ZGlmZiAtLWdpdCBhL1NUQVRVUyBiL1NUQVRVUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAzMDU2MC4uMDAwMDAwMAotLS0gYS9TVEFUVVMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1BY3RpdmUgY29tbWl0dGVyczoKLQotY2V6YXIuYW5kcmVpQGJlYS5jb20KLWNsaWZmLnNjaG1pZHRAYmVhLmNvbQotZGF2aWQucmVteUBiZWEuY29tCi1kYXZpZC5iYXVAYmVhLmNvbQotZXJpYy52YXNpbGlrQGJlYS5jb20KLWtlbkBrcmVzcy5vcmcKLWxhdXJlbmNlLm1vcm9uZXlAcmV1dGVycy5jb20KLXNjb3R0LnppZWdsZXJAYmVhLmNvbQotdHdsQGFwYWNoZS5vcmcKLQotSW5pdGlhbCBjb2RlIGRyb3BwZWQuICBQYXJ0eSBvbi4KLQotUHJvcG9zYWxzIGZvciBmZWF0dXJlcyBhdDoKLWh0dHA6Ly9uYWdveWEuYXBhY2hlLm9yZy93aWtpL2FwYWNoZXdpa2kuY2dpP1htbEJlYW5zRmVhdHVyZVBsYW4KLShwZXJpb2RpY2FsbHkgcG9zdGVkIHRvIHhtbGJlYW5zLWRldikKZGlmZiAtLWdpdCBhL3YyL1JFQURNRS50eHQgYi92Mi9SRUFETUUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTQ5NWMzLi4wMDAwMDAwCi0tLSBhL3YyL1JFQURNRS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1UaGlzIGRpcmVjdG9yeSB3aWxsIGNvbnRhaW4gcHJlbGltaW5hcnkgY29kZSBiZWluZyBpbnZlc3RpZ2F0ZWQgdGhhdAotZXZlbnR1YWxseSB3aWxsIGJlY29tZSB0aGUgbmV4dCBtYWpvciByZXZpc2lvbiBvZiBYTUxCZWFucy4KLQotU2luY2UgdjIgd2lsbCBsaWtlbHkgYnJlYWsgc29tZSBmdW5kYW1lbnRhbCBhc3N1bXB0aW9ucyBvZiB0aGF0IGFyZQotbWFkZSBieSB2MSwgdjIgd2lsbCBiZSBkb25lIGFzIGEgbmV3IGNvZGVsaW5lIGhlcmUuCi0KLVRoZSBjb2RlIHRvZGF5ICgyMDAzLTA5LTI0KSBpcyBpbiBhIHZlcnkgcHJlbGltaW5hcnkgc3RhdGUgKGFjdHVhbGx5Ci1hcyBvZiB0b2RheSwgbm90aGluZyBpcyBjaGVja2VkIGluIGhlcmUpLCBzbyBzaG91bGQgYmUgc2VlbiBhcwotdmVyeSBlYXJseSB3b3JrLiAgQXMgdjIgcHJvZ3Jlc3NlcywgdGhpcyBub3RpY2Ugd2lsbCBiZSB1cGRhdGVkLgotCi1NaW5vciBidWdmaXhlcyBhbmQgc21hbGwgZmVhdHVyZXMgc2hvdWxkIGJlIG1hZGUgaW4gdGhlIHYxIGRpcmVjdG9yeTsgYXMKLXRoZSB2MiBwcm9qZWN0IHJhbXBzIHVwLCB3ZSBhbGwgd2lsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGZpeGVzIHRoYXQKLWFyZSBhcHBsaWNhYmxlIHRvIGJvdGggdjEgYW5kIHYyIGFyZSBtZXJnZWQgaW50byBib3RoIHRyZWVzLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3YyL2Jpbi9kdW1weHNiIGIvdjIvYmluL2R1bXB4c2IKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2NjY1ZjguLjAwMDAwMDAKLS0tIGEvdjIvYmluL2R1bXB4c2IKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0jIS8jaW4vc2gKLQotI1hTQiBmaWxlIGR1bXBlcgotI1ByaW50cyB0aGUgY29udGVudHMgb2YgYW4geHNiIGZpbGUgaW4gaHVtYW4tcmVhZG1ibGUgZm9ybQotCi1jcD0KLWNwPSRjcDokWE1MQkVBTlNfSE9NRS9idWlsZC9saWJ1eGJlYW4uamFyCi0KLWphdmEgCi1jbGFzc3BhdGggJGNwIG9yZy5hcGFjaGUueG1sZWVhbnMuaW1wbC50b29sLnBzYkR1bXBlciAkKgpkaWZmIC0tZ2l0IGEvdjIvYmluL2R1bXB4c2IuY21kIGIvdjIvYmluL2R1bXB4c2IuY21kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWI2MmNmLi4wMDAwMDAwCi0tLSBhL3YyL2Jpbi9kdW1weHNiLmNtZAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLUByZW0gWFNCIGZpbGUgZHVtcGVyCi1AcmVtCi1AcmVtIFByaW50cyB0aGUgY29udGVudHMgb2YgYW4geHNiIGZpbGUgaW4gaHVtYW4tcmVhZGFibGUgZm9ybQotQGVjaG8gb2ZmCi0KLXNldGxvY2FsCi1pZiAiJVhNTEJFQU5TX0hPTUUlIiBFUVUgIiIgKHNldCBYTUxCRUFOU19IT01FPSV+ZHAwLi4pCi0KLXNldCBjcD0KLXNldCBjcD0lY3AlOyVYTUxCRUFOU19IT01FJVxidWlsZFxhclx4YmVhbi5qYXIKLQotamF2YSAtY2xhc3NwYXRoICVjcCUgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnRvb2wuWHNiRHVtcGVyICUqCi0KLTpkb25lCmRpZmYgLS1naXQgYS92Mi9iaW4vamF4YmMuY21kIGIvdjIvYmluL2pheGJjLmNtZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlkMjA3OS4uMDAwMDAwMAotLS0gYS92Mi9iaW4vamF4YmMuY21kCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotQHJlbSBTY2hlbWEgY29tcGlsZXIKLUByZW0KLUByZW0gQnVpbGRzIGpheGIgdHlwZXMgZnJvbSB4c2QgZmlsZXMuCi0KLUBlY2hvIG9mZgotCi1zZXRsb2NhbAotaWYgIiVYTUxCRUFOU19IT01FJSIgRVFVICIiIChzZXQgWE1MQkVBTlNfSE9NRT0lfmRwMC4uKQotCi1zZXQgY3A9Ci1zZXQgY3A9JWNwJTslWE1MQkVBTlNfSE9NRSVcYnVpbGRcYXJceGJlYW4uamFyCi1zZXQgY3A9JWNwJTslWE1MQkVBTlNfSE9NRSVcZXh0ZXJuYWxcbGliXGpheGItMS4wXGpheGItYXBpLmphcgotCi1qYXZhIC1jbGFzc3BhdGggJWNwJSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudG9vbC5TY2hlbWFDb21waWxlciAtamF4YiAlKgotCi06ZG9uZQpkaWZmIC0tZ2l0IGEvdjIvYmluL3JhbmRvbS5jbWQgYi92Mi9iaW4vcmFuZG9tLmNtZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDcyN2QyNi4uMDAwMDAwMAotLS0gYS92Mi9iaW4vcmFuZG9tLmNtZAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLUBlY2hvIG9mZgotCi1AcmVtIERSVAotQHJlbQotQHJlbSBJbnZva2VzIFJhbmRvbSB0ZXN0Ci0KLXNldGxvY2FsCi1pZiAiJVhNTEJFQU5TX0hPTUUlIiBFUVUgIiIgKHNldCBYTUxCRUFOU19IT01FPSV+ZHAwLi4pCi0KLXNldCBjcD0KLXNldCBjcD0lY3AlOyVYTUxCRUFOU19IT01FJVxidWlsZFxhclx4YmVhbi5qYXIKLXNldCBjcD0lY3AlOyVYTUxCRUFOU19IT01FJVxidWlsZFxwcml2YXRlXGxpYlxyYW5kb20uamFyCi1zZXQgY3A9JWNwJTslWE1MQkVBTlNfSE9NRSVcYnVpbGRccHJpdmF0ZVxsaWJcZWFzeXBvLmphcgotCi1yZW0gamF2YSAtZWEgLUR0cmVlYXNzZXJ0cz10cnVlICAtRHhiZWFuLnJvb3RkaXI9JVhNTEJFQU5TX0hPTUUlIC1jbGFzc3BhdGggJWNwJSBSYW5kb20gLW5vcXVlcnkgJSoKLSAgICBqYXZhIC1lYSAtRHRyZWVhc3NlcnRzPWZhbHNlIC1EeGJlYW4ucm9vdGRpcj0lWE1MQkVBTlNfSE9NRSUgLWNsYXNzcGF0aCAlY3AlIFJhbmRvbSAtbm9xdWVyeSAlKgpkaWZmIC0tZ2l0IGEvdjIvYmluL3Njb21wIGIvdjIvYmluL3Njb21wCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzVjYTgzLi4wMDAwMDAwCi0tLSBhL3YyL2Jpbi9zY29tcAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotIyEvYmluL3NoCi0KLSNTY2hlbWEgY29tcGlsZXIKLSNCdWlsZHMgWEJlYW4gdHlwZXMgZnJvbSB4c2QgZmlsZXMuCi0KLWNwPQotY3A9JGNwOiRYTUxCRUFOU19IT01FL2J1aWxkL2FyL3hiZWFuLmphcgotCi1qYXZhIC1jbGFzc3BhdGggJGNwIG9ydC5hcGFjaGUueG1sYmVhbnNlaW1wbC50b29sbVNjaGVtYUNvbXBpbGVyICQqCmRpZmYgLS1naXQgYS92Mi9iaW4vc2NvbXAuY21kIGIvdjIvYmluL3Njb21wLmNtZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVlZDAxYi4uMDAwMDAwMAotLS0gYS92Mi9iaW4vc2NvbXAuY21kCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotQHJlbSBTY2hlbWEgY29tcGlsZXIKLUByZW0KLUByZW0gQnVpbGRzIFhCZWFuIHR5cGVzIGZyb20geHNkIGZpbGVzLgotCi1AZWNobyBvZmYKLQotc2V0bG9jYWwKLWlmICIlWE1MQkVBTlNfSE9NRSUiIEVRVSAiIiAoc2V0IFhNTEJFQU5TX0hPTUU9JX5kcDAuLikKLQotc2V0IGNwPQotc2V0IGNwPSVjcCU7JVhNTEJFQU5TX0hPTUUlXGJ1aWxkXGFyXHhiZWFuLmphcgotCi1qYXZhIC1jbGFzc3BhdGggJWNwJSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudG9vbC5TY2hlbWFDb21waWxlciAlKgotCi06ZG9uZQpkaWZmIC0tZ2l0IGEvdjIvYmluL3Njb3B5LmNtZCBiL3YyL2Jpbi9zY29weS5jbWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwOTRjM2EuLjAwMDAwMDAKLS0tIGEvdjIvYmluL3Njb3B5LmNtZAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLUByZW0gU2NoZW1hIGNvbXBpbGVyCi1AcmVtCi1AcmVtIEJ1aWxkcyBYQmVhbiB0eXBlcyBmcm9tIHhzZCBmaWxlcy4KLQotQGVjaG8gb2ZmCi0KLXNldGxvY2FsCi1pZiAiJVhNTEJFQU5TX0hPTUUlIiBFUVUgIiIgKHNldCBYTUxCRUFOU19IT01FPSV+ZHAwLi4pCi0KLXNldCBjcD0KLXNldCBjcD0lY3AlOyVYTUxCRUFOU19IT01FJVxidWlsZFxhclx4YmVhbi5qYXIKLQotamF2YSAtY2xhc3NwYXRoICVjcCUgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnRvb2wuU2NoZW1hQ29weSAlKgotCi06ZG9uZQpkaWZmIC0tZ2l0IGEvdjIvYmluL3Nkb3dubG9hZC5jbWQgYi92Mi9iaW4vc2Rvd25sb2FkLmNtZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ1ODI5ZC4uMDAwMDAwMAotLS0gYS92Mi9iaW4vc2Rvd25sb2FkLmNtZAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLUByZW0gU2NoZW1hIGRvd25sb2FkZXIKLUByZW0KLUByZW0gVG9vbCB0byBkb3dubG9hZCBzY2hlbWFzLgotCi1AZWNobyBvZmYKLQotc2V0bG9jYWwKLWlmICIlWE1MQkVBTlNfSE9NRSUiIEVRVSAiIiAoc2V0IFhNTEJFQU5TX0hPTUU9JX5kcDAuLikKLQotc2V0IGNwPQotc2V0IGNwPSVjcCU7JVhNTEJFQU5TX0hPTUUlXGJ1aWxkXGFyXHhiZWFuLmphcgotCi1qYXZhIC1jbGFzc3BhdGggJWNwJSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudG9vbC5TY2hlbWFSZXNvdXJjZU1hbmFnZXIgJSoKLQotOmRvbmUKZGlmZiAtLWdpdCBhL3YyL2Jpbi9zZmFjdG9yLmNtZCBiL3YyL2Jpbi9zZmFjdG9yLmNtZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdhMDcwMy4uMDAwMDAwMAotLS0gYS92Mi9iaW4vc2ZhY3Rvci5jbWQKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1AcmVtIFNjaGVtYSBGYWN0b3JpbmcgdG9vbAotQHJlbQotQHJlbSBGYWN0b3JlcyByZWR1bmRhbnQgZGVmaW5pdGlvbnMgb3V0IG9mIGEgc2V0IG9mIHNjaGVtYXMgYW5kIHVzZXMgaW1wb3J0cyBpbnN0ZWFkLgotCi1AZWNobyBvZmYKLQotc2V0bG9jYWwKLWlmICIlWE1MQkVBTlNfSE9NRSUiIEVRVSAiIiAoc2V0IFhNTEJFQU5TX0hPTUU9JX5kcDAuLikKLQotc2V0IGNwPQotc2V0IGNwPSVjcCU7JVhNTEJFQU5TX0hPTUUlXGJ1aWxkXGFyXHhiZWFuLmphcgotCi1qYXZhIC1jbGFzc3BhdGggJWNwJSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudG9vbC5GYWN0b3JJbXBvcnRzICUqCi0KLTpkb25lCmRpZmYgLS1naXQgYS92Mi9iaW4vdmFsaWRhdGUgYi92Mi9iaW4vdmFsaWRhdGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MTNiZDkuLjAwMDAwMDAKLS0tIGEvdjIvYmluL3ZhbGlkYXRlCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotIyEvI2luL3NoCi0jCi0jIEluc3RhbmNlIFZhbGlkYXRvcgotIwotIyBWYWxpZGF0ZXMgYW4gaW5zdGFuY2UgYWdhaW5zdCBhIHNjaGVtYS4KLQotQ1A9Ci1DUD0kQ1A6JFhNTEJFQU5TX0hPTUUvYnVpbGQvYXIveGJlYW4uamFyCi0KLWphdmEgLWNsYXNzcCB0aCAkQ1Agb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnRvb2wuSW5zdGFuY2VWYWxpZGF0b3IgJCoKZGlmZiAtLWdpdCBhL3YyL2Jpbi92YWxpZGF0ZS5jbWQgYi92Mi9iaW4vdmFsaWRhdGUuY21kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjI4NWNmLi4wMDAwMDAwCi0tLSBhL3YyL2Jpbi92YWxpZGF0ZS5jbWQKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi1AcmVtIEluc3RhbmNlIFZhbGlkYXRvcgotQHJlbQotQHJlbSBWYWxpZGF0ZXMgYW4gaW5zdGFuY2UgYWdhaW5zdCBhIHNjaGVtYS4KLQotQGVjaG8gb2ZmCi0KLXNldGxvY2FsCi1pZiAiJVhNTEJFQU5TX0hPTUUlIiBFUVUgIiIgKHNldCBYTUxCRUFOU19IT01FPSV+ZHAwLi4pCi0KLXNldCBjcD0KLXNldCBjcD0lY3AlOyVYTUxCRUFOU19IT01FJVxidWlsZFxhclx4YmVhbi5qYXIKLQotamF2YSAtY2xhc3NwYXRoICVjcCUgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnRvb2wuSW5zdGFuY2VWYWxpZGF0b3IgJSoKLQotOmRvbmUKZGlmZiAtLWdpdCBhL3YyL2Jpbi94cHJldHR5LmNtZCBiL3YyL2Jpbi94cHJldHR5LmNtZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE1MWU4YS4uMDAwMDAwMAotLS0gYS92Mi9iaW4veHByZXR0eS5jbWQKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1AZWNobyBvZmYKLQotQHJlbSBJbnZva2VzIHByZXR0eSBwcmludGVyCi0KLXNldGxvY2FsCi1pZiAiJVhNTEJFQU5TX0hPTUUlIiBFUVUgIiIgKHNldCBYTUxCRUFOU19IT01FPSV+ZHAwLi4pCi0KLXNldCBjcD0KLXNldCBjcD0lY3AlOyVYTUxCRUFOU19IT01FJVxidWlsZFxhclx4YmVhbi5qYXIKLQotamF2YSAtY2xhc3NwYXRoICVjcCUgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnRvb2wuUHJldHR5UHJpbnRlciAlKgpkaWZmIC0tZ2l0IGEvdjIvYmluL3hzZHRyZWUuY21kIGIvdjIvYmluL3hzZHRyZWUuY21kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzcxYThmLi4wMDAwMDAwCi0tLSBhL3YyL2Jpbi94c2R0cmVlLmNtZAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLUBlY2hvIG9mZgotCi1AcmVtIEludm9rZXMgdHlwZSBoaWVyYXJjaHkgcHJpbnRlcgotCi1zZXRsb2NhbAotaWYgIiVYTUxCRUFOU19IT01FJSIgRVFVICIiIChzZXQgWE1MQkVBTlNfSE9NRT0lfmRwMC4uKQotCi1zZXQgY3A9Ci1zZXQgY3A9JWNwJTslWE1MQkVBTlNfSE9NRSVcYnVpbGRcYXJceGJlYW4uamFyCi0KLWphdmEgLWNsYXNzcGF0aCAlY3AlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC50b29sLlR5cGVIaWVyYXJjaHlQcmludGVyICUqCmRpZmYgLS1naXQgYS92Mi9iaW4veHN0Yy5jbWQgYi92Mi9iaW4veHN0Yy5jbWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxZWJkNjEuLjAwMDAwMDAKLS0tIGEvdjIvYmluL3hzdGMuY21kCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotQGVjaG8gb2ZmCi0KLUByZW0gSW52b2tlcyBYU1RDCi0KLXNldGxvY2FsCi1pZiAiJVhNTEJFQU5TX0hPTUUlIiBFUVUgIiIgKHNldCBYTUxCRUFOU19IT01FPSV+ZHAwLi4pCi0KLXNldCBjcD0KLXNldCBjcD0lY3AlOyVYTUxCRUFOU19IT01FJVxidWlsZFxhclx4YmVhbi5qYXIKLQotamF2YSAtY2xhc3NwYXRoICVjcCUgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnRvb2wuWFNUQ1Rlc3RlciAlKgpkaWZmIC0tZ2l0IGEvdjIvYnVpbGQueG1sIGIvdjIvYnVpbGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODEyMDY5Li4wMDAwMDAwCi0tLSBhL3YyL2J1aWxkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwMzIgKzAsMCBAQAotPHByb2plY3QgbmFtZT0iWGJlYW4iIGRlZmF1bHQ9ImRlZmF1bHQiIGJhc2VkaXI9Ii4iPgotCi0gIDxwcm9wZXJ0eSBuYW1lPSJidWlsZC5jb21waWxlciIgdmFsdWU9ImphdmFjMS40Ii8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJwcm9kdWN0LnZlcnNpb24iIHZhbHVlPSIxLjAuMCIvPgotCi0gIDx0YXJnZXQgbmFtZT0idXNhZ2UiPgotICAgIDxlY2hvIG1lc3NhZ2U9IlRoZSBmb2xsb3dpbmcgYW50IHRhcmdldHMgYXJlIGRlZmluZWQ6Ii8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idXNhZ2UgICAgLSB0aGlzIGhlbHAgdGV4dCIvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkICAgIC0gYnVpbGRzIG91ciBwdWJsaWMgaW50ZXJmYWNlIGphcnMgc28gb3RoZXJzIGNhbiBjb21waWxlIi8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZGVwbG95ICAgLSBidWlsZHMgb3VyIGltcGxlbWVudGF0aW9uIGphciAoeGJlYW4uamFyKSIvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNsZWFuICAgIC0gY2xlYW5zIG91dCB0aGUgeGJlYW5zIGRpcmVjdG9yaWVzIi8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGRkcnQgLSBidWlsZHMsIGJ1dCBkb2VzIG5vdCBydW4sIHRoZSB4YmVhbiBkcnQiLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJkcnQgICAgICAtIHJ1bnMgdGhlIHhiZWFuIGRydCIvPgotICA8L3RhcmdldD4KLQotICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KLSAgICA8ZGVsZXRlIGRpcj0iYnVpbGQiLz4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJkZXBsb3kiIGRlcGVuZHM9InNvdXJjZXMsIHhiZWFuLCBkcnQuamFyLCByYW5kb20uamFyIiAvPgotCi0gIDx0YXJnZXQgbmFtZT0ic291cmNlcyIgZGVwZW5kcz0iZGlycyI+Ci0gICAgPHppcCBkZXN0ZmlsZT0iYnVpbGQvYXIveGJlYW5zcmMuemlwIiBiYXNlZGlyPSIuIiBleGNsdWRlcz0iYnVpbGQvKioiLz4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJjaGVjay5qc3IxNzMuamFyIj4KLSAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJqc3IxNzMuamFyLmV4aXN0cyI+Ci0gICAgICAgIDxhdmFpbGFibGUgZmlsZT0iYnVpbGQvbGliL2pzcjE3My5qYXIiLz4KLSAgICA8L2NvbmRpdGlvbj4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJqc3IxNzMuamFyIiBkZXBlbmRzPSJjaGVjay5qc3IxNzMuamFyLCBkaXJzIiB1bmxlc3M9ImpzcjE3My5qYXIuZXhpc3RzIj4KLSAgICA8Z2V0IGRlc3Q9ImJ1aWxkL2xpYi9qc3IxNzMuamFyIgotICAgICAgICAgc3JjPSJodHRwOi8vd29ya3Nob3AuYmVhLmNvbS94bWxiZWFucy9qc3IxNzMvanNyMTczLmphciIKLSAgICAgICAgIHZlcmJvc2U9InRydWUiIHVzZXRpbWVzdGFtcD0idHJ1ZSIgaWdub3JlZXJyb3JzPSJ0cnVlIi8+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0iY2hlY2suanNyMTczXzA3X2FwaS5qYXIiPgotICAgIDxjb25kaXRpb24gcHJvcGVydHk9ImpzcjE3M18wN19hcGkuamFyLmV4aXN0cyI+Ci0gICAgICAgIDxhdmFpbGFibGUgZmlsZT0iYnVpbGQvbGliL2pzcjE3M18wN19hcGkuamFyIi8+Ci0gICAgPC9jb25kaXRpb24+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0ianNyMTczXzA3X2FwaS5qYXIiIGRlcGVuZHM9ImpzcjE3My5qYXIsIGNoZWNrLmpzcjE3M18wN19hcGkuamFyIiB1bmxlc3M9ImpzcjE3M18wN19hcGkuamFyLmV4aXN0cyI+Ci0gICAgPHVuamFyIHNyYz0iYnVpbGQvbGliL2pzcjE3My5qYXIiIGRlc3Q9ImJ1aWxkL2xpYiI+Ci0gICAgICA8cGF0dGVybnNldD4KLSAgICAgICAgPGluY2x1ZGUgbmFtZT0ianNyMTczXzA3X2FwaS5qYXIiLz4KLSAgICA8L3BhdHRlcm5zZXQ+Ci0gICAgPC91bmphcj4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJjaGVjay5qc3IxNzNfMDdfcmkuamFyIj4KLSAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJqc3IxNzNfMDdfcmkuamFyLmV4aXN0cyI+Ci0gICAgICAgIDxhdmFpbGFibGUgZmlsZT0iYnVpbGQvbGliL2pzcjE3M18wN19yaS5qYXIiLz4KLSAgICA8L2NvbmRpdGlvbj4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJqc3IxNzNfMDdfcmkuamFyIiBkZXBlbmRzPSJqc3IxNzMuamFyLCBjaGVjay5qc3IxNzNfMDdfcmkuamFyIiB1bmxlc3M9ImpzcjE3M18wN19yaS5qYXIuZXhpc3RzIj4KLSAgICA8dW5qYXIgc3JjPSJidWlsZC9saWIvanNyMTczLmphciIgZGVzdD0iYnVpbGQvbGliIj4KLSAgICAgIDxwYXR0ZXJuc2V0PgotICAgICAgICA8aW5jbHVkZSBuYW1lPSJqc3IxNzNfMDdfcmkuamFyIi8+Ci0gICAgPC9wYXR0ZXJuc2V0PgotICAgIDwvdW5qYXI+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0iY2hlY2suamF4ZW4uamFyIj4KLSAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJqYXhlbi5qYXIuZXhpc3RzIj4KLSAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSJidWlsZC9saWIvamF4ZW4uamFyIi8+Ci0gICAgPC9jb25kaXRpb24+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0iamF4ZW4uamFyIiBkZXBlbmRzPSJjaGVjay5qYXhlbi5qYXIsIGRpcnMiIHVubGVzcz0iamF4ZW4uamFyLmV4aXN0cyI+Ci0gICAgPGdldCBkZXN0PSJidWlsZC9saWIvamF4ZW4uamFyIgotICAgICAgICAgc3JjPSJodHRwOi8vd3d3LmliaWJsaW8ub3JnL21hdmVuL2pheGVuL2phcnMvamF4ZW4tMS4xLWJldGEtMi5qYXIiCi0gICAgICAgICB2ZXJib3NlPSJ0cnVlIiB1c2V0aW1lc3RhbXA9InRydWUiIGlnbm9yZWVycm9ycz0idHJ1ZSIvPgotICA8L3RhcmdldD4KLQotICA8dGFyZ2V0IG5hbWU9InhiZWFuIiBkZXBlbmRzPSJ4YmVhbi5qYXIiPgotICAgIDxjb3B5IGZpbGU9ImJ1aWxkL2xpYi94YmVhbi5qYXIiIHRvZmlsZT0iYnVpbGQvYXIveGJlYW4uamFyIi8+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0iZGlycyI+Ci0gICAgPG1rZGlyIGRpcj0iYnVpbGQiLz4KLSAgICA8bWtkaXIgZGlyPSJidWlsZC9jbGFzc2VzIi8+Ci0gICAgPG1rZGlyIGRpcj0iYnVpbGQvbGliIi8+Ci0gICAgPG1rZGlyIGRpcj0iYnVpbGQvYXIiLz4KLSAgICA8bWtkaXIgZGlyPSJidWlsZC9zcmMiLz4KLSAgICA8bWtkaXIgZGlyPSJidWlsZC9wcml2YXRlIi8+Ci0gICAgPG1rZGlyIGRpcj0iYnVpbGQvcHJpdmF0ZS9jbGFzc2VzIi8+Ci0gICAgPG1rZGlyIGRpcj0iYnVpbGQvcHJpdmF0ZS9saWIiLz4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJkcnQiID4KLSAgICAgIDxlY2hvIG1lc3NhZ2U9IlJ1bm5pbmcgcmFuZG9tIHRlc3RlciIvPgotICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iUmFuZG9tIiBmb3JrPSJ0cnVlIiBmYWlsb25lcnJvcj0idHJ1ZSI+Ci0gICAgICAgICAgPGNsYXNzcGF0aD4KLSAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvYXIveGJlYW4uamFyIi8+Ci0gICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2xpYi9qc3IxNzNfMDdfYXBpLmphciIvPgotICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9wcml2YXRlL2xpYi9lYXN5cG8uamFyIi8+Ci0gICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL3ByaXZhdGUvbGliL3JhbmRvbS5qYXIiLz4KLSAgICAgICAgICA8L2NsYXNzcGF0aD4KLSAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1lYSIvPgotICAgICAgICAgPGFyZyBsaW5lPSItc2VlZCAwIC1pIDIwIC1ub3F1ZXJ5Ii8+Ci0gICAgICAgPC9qYXZhPgotCi0gICAgPG1rZGlyIGRpcj0iYnVpbGQvdGVzdC9vdXRwdXQiLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJSdW5uaW5nIHhiZWFuIHByb2R1Y3QgZHJ0IHRlc3RzIi8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iSlVuaXQgb3V0cHV0IGJlaW5nIHNlbnQgdG8geGJlYW4vYnVpbGQvdGVzdC9vdXRwdXQvZHJ0LXByb2R1Y3QudHh0Ii8+Ci0gICAgPGp1bml0IGZvcms9InllcyIgcHJpbnRzdW1tYXJ5PSJ5ZXMiIGhhbHRvbmZhaWx1cmU9InllcyIgc2hvd291dHB1dD0ieWVzIj4KLSAgICAgIDxqdm1hcmcgdmFsdWU9Ii1lYSIvPgotICAgICAgPHN5c3Byb3BlcnR5IGtleT0ieGJlYW4ucm9vdGRpciIgdmFsdWU9IiR7YmFzZWRpcn0iLz4KLSAgICAgIDxzeXNwcm9wZXJ0eSBrZXk9InRyZWVhc3NlcnRzIiB2YWx1ZT0idHJ1ZSIvPgotICAgICAgPGNsYXNzcGF0aD4KLSAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJleHRlcm5hbC9saWIvanVuaXQuamFyIi8+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvYXIveGJlYW4uamFyIi8+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvbGliL2pzcjE3M18wN19hcGkuamFyIi8+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvcHJpdmF0ZS9saWIvZHJ0LmphciIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL3ByaXZhdGUvbGliL2Vhc3lwby5qYXIiLz4KLSAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9wcml2YXRlL2xpYi9zY2hlbWFzLmphciIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL3ByaXZhdGUvbGliL3hzdHlwZXMuamFyIi8+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvcHJpdmF0ZS9saWIvZW51bXRlc3QuamFyIi8+Ci0gICAgICA8L2NsYXNzcGF0aD4KLSAgICAgIDxmb3JtYXR0ZXIgdHlwZT0icGxhaW4iLz4KLSAgICAgIDx0ZXN0IG5hbWU9ImRydGNhc2VzLlNtb2tlVGVzdHMiIG91dGZpbGU9ImJ1aWxkL3Rlc3Qvb3V0cHV0L2RydC1wcm9kdWN0IiAvPgotICAgIDwvanVuaXQ+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0iYnVpbGRkcnQiIGRlcGVuZHM9ImRydC5qYXIsIHJhbmRvbS5qYXIsIGVyaWMiLz4KLQotICA8dGFyZ2V0IG5hbWU9ImVyaWMiIGRlcGVuZHM9ImVyaWN0ZXN0LmphciIvPgotCi0gIDx0YXJnZXQgbmFtZT0iZGVmYXVsdCIgZGVwZW5kcz0iZGVwbG95LCBidWlsZGRydCIvPgotCi0gIDx0YXJnZXQgbmFtZT0icmVkZXBsb3kiIGRlcGVuZHM9ImNsZWFuLCBkZXBsb3kiLz4KLQotICA8IS0tIG9sZHhiZWFuLmphciB0YXJnZXQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQotICA8dGFyZ2V0IG5hbWU9Im9sZHhiZWFuLmphciI+Ci0gICAgPGNvcHkgZmlsZT0iZXh0ZXJuYWwvbGliL29sZHhiZWFuLmphciIgdG9maWxlPSJidWlsZC9wcml2YXRlL2xpYi9vbGR4YmVhbi5qYXIiLz4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBib290c3RyYXAgdGFyZ2V0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0KLSAgPHRhcmdldCBuYW1lPSJib290c3RyYXAiIGRlcGVuZHM9InhiZWFuIj4KLQotICAgIDwhLS0gYWZ0ZXIgeGJlYW4uamFyIGlzIGJ1aWx0LCBtb3ZlIGl0IG91dCBvZiB0aGUgd2F5IGFuZCBjbGVhbiB0aGUgcHJvamVjdCAtLT4KLSAgICA8dGVtcGZpbGUgcHJvcGVydHk9ImJvb3RzdHJhcC5qYXJmaWxlIiBwcmVmaXg9Im9sZHhiZWFuIiBzdWZmaXg9Ii5qYXIiLz4KLSAgICA8bW92ZSBmaWxlPSJidWlsZC9hci94YmVhbi5qYXIiIHRvZmlsZT0iJHtib290c3RyYXAuamFyZmlsZX0iLz4KLSAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuIiBpbmhlcml0QWxsPSJmYWxzZSIvPgotCi0gICAgPCEtLSB0aGVuIG1vdmUgaXQgYmFjayBpbnRvIHBsYWNlIGFzIG9sZHhiZWFuLmphciBhbmQgZG8gYW5vdGhlciBidWlsZCAtLT4KLSAgICA8bW92ZSBmaWxlPSIke2Jvb3RzdHJhcC5qYXJmaWxlfSIgdG9maWxlPSJidWlsZC9wcml2YXRlL2xpYi9vbGR4YmVhbi5qYXIiLz4KLSAgICA8YW50Y2FsbCB0YXJnZXQ9InhiZWFuIiBpbmhlcml0QWxsPSJmYWxzZSIvPgotCi0gICAgPCEtLSBjb21wYXJlIHRoZSBjb250ZW50cyBvZiB0aGUgZmlyc3QgamFyIHRvIHRoZSBjb250ZW50cyBvZiB0aGUgc2Vjb25kIGphciAtLT4KLSAgICA8YW50Y2FsbCB0YXJnZXQ9InppcGNvbXBhcmUuY2xhc3NlcyIgaW5oZXJpdEFsbD0iZmFsc2UiLz4KLSAgICA8amF2YSBjbGFzc25hbWU9InppcGNvbXBhcmUuWmlwQ29tcGFyZSIKLSAgICAgICAgICBjbGFzc3BhdGg9ImJ1aWxkL3ByaXZhdGUvY2xhc3Nlcy96aXBjb21wYXJlIgotICAgICAgICAgIGZvcms9InRydWUiCi0gICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPgotICAgICAgPGFyZyBsaW5lPSJidWlsZC9hci94YmVhbi5qYXIgYnVpbGQvcHJpdmF0ZS9saWIvb2xkeGJlYW4uamFyIi8+Ci0gICAgPC9qYXZhPgotCi0gICAgPCEtLSB3aGVuIGV2ZXJ5dGhpbmcgc3VjY2VlZHMsIGNoZWNrIG91dCBvbGR4YmVhbi5qYXIgZnJvbSBwZXJmb3JjZSAtLT4KLSAgICA8ZWNobyBtZXNzYWdlPSI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIvPgotICAgIDxlY2hvIG1lc3NhZ2U9IlJlc3VsdHMgbWF0Y2ghIEJvb3RzdHJhcCBzdWNjZWVkZWQuIi8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJBdHRlbXB0aW5nIHRvIGNvcHkgb2xkeGJlYW4uamFyIi8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iSWYgdGhlIGNvcHkgZmFpbHMsIHlvdSBtdXN0IGNoZWNrIG91dCBvbGR4YmVhbi5qYXIiLz4KLSAgICA8IS0tIGNvcHkgb2xkeGJlYW4uamFyIHdoZXRoZXIgb3Igbm90IHBlcmZvcmNlIHN1Y2NlZWRlZCAtLT4KLSAgICA8ZWNobyBtZXNzYWdlPSJvdmVyd3JpdGluZyBvbGQgZXh0ZXJuYWwvbGliL29sZHhiZWFuLmphciIvPgotICAgIDxjb3B5IGZpbGU9ImJ1aWxkL3ByaXZhdGUvbGliL29sZHhiZWFuLmphciIgdG9maWxlPSJleHRlcm5hbC9saWIvb2xkeGJlYW4uamFyIi8+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gemlwY29tcGFyZSAoZm9yIGNoZWNraW5nIGJvb3RzdHJhcCkgPT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQotICA8dGFyZ2V0IG5hbWU9InppcGNvbXBhcmUuY2xhc3NlcyI+Ci0gICAgPG1rZGlyIGRpcj0iYnVpbGQvcHJpdmF0ZS9jbGFzc2VzL3ppcGNvbXBhcmUiLz4KLSAgICA8amF2YWMgc3JjZGlyPSJzcmMvemlwY29tcGFyZSIKLSAgICAgICAgICAgZGVzdGRpcj0iYnVpbGQvcHJpdmF0ZS9jbGFzc2VzL3ppcGNvbXBhcmUiCi0gICAgICAgICAgIGRlYnVnPSJvbiIvPgotICA8L3RhcmdldD4KLQotICA8IS0tIHRlc3QgdGFyZ2V0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCi0gIDxwYXRoIGlkPSJ0ZXN0LmNvbXBpbGUucGF0aCI+Ci0gICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJleHRlcm5hbC9saWIvanVuaXQuamFyIi8+Ci0gICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9hci94YmVhbi5qYXIiLz4KLSAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2xpYi9qc3IxNzNfMDdfYXBpLmphciIvPgotICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvcHJpdmF0ZS9saWIvZWFzeXBvLmphciIvPgotICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvcHJpdmF0ZS9saWIvc2NoZW1hcy5qYXIiLz4KLSAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL3ByaXZhdGUvbGliL2VudW10ZXN0LmphciIvPgotICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvcHJpdmF0ZS9saWIveHN0eXBlcy5qYXIiLz4KLSAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMveG1saW5wdXRzdHJlYW0iLz4KLSAgPC9wYXRoPgotCi0gIDxwYXRoIGlkPSJ0ZXN0LnJ1bi5wYXRoIj4KLSAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2FyL3hiZWFuLmphciIvPgotICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iZXh0ZXJuYWwvbGliL2p1bml0LmphciIvPgotICA8L3BhdGg+Ci0KLSAgPCEtLSBidWlsZGRydCB0YXJnZXQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQotICA8dGFyZ2V0IG5hbWU9ImRydC5jbGFzc2VzIiBkZXBlbmRzPSJkaXJzLCBlYXN5cG8uamFyLCBzY2hlbWFzLmphciwgeHN0eXBlcy5qYXIsIGVudW10ZXN0LmphciI+Ci0gICAgPG1rZGlyIGRpcj0iYnVpbGQvcHJpdmF0ZS9jbGFzc2VzL2RydCIvPgotICAgIDxqYXZhYwotICAgICAgIHNyY2Rpcj0idGVzdC9zcmMvZHJ0IgotICAgICAgIGRlc3RkaXI9ImJ1aWxkL3ByaXZhdGUvY2xhc3Nlcy9kcnQiCi0gICAgICAgY2xhc3NwYXRocmVmPSJ0ZXN0LmNvbXBpbGUucGF0aCIKLSAgICAgICBzb3VyY2U9IjEuNCIKLSAgICAgICBkZWJ1Zz0ib24iLz4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJkcnQuamFyIiBkZXBlbmRzPSJkcnQuY2xhc3NlcyI+Ci0gICAgPGphciBqYXJmaWxlPSJidWlsZC9wcml2YXRlL2xpYi9kcnQuamFyIiBiYXNlZGlyPSJidWlsZC9wcml2YXRlL2NsYXNzZXMvZHJ0Ii8+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gc3Rzc2NoZW1hIChmb3IgdGVzdGluZykgdGFyZ2V0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCi0gIDxwYXRoIGlkPSJzY29tcC5ydW4ucGF0aCI+Ci0gICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9saWIveGJlYW4uamFyIi8+Ci0gICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9saWIvanNyMTczXzA3X2FwaS5qYXIiLz4KLSAgPC9wYXRoPgotCi0gIDx0YXJnZXQgbmFtZT0ic3Rzc2NoZW1hLmNoZWNrIj4KLSAgICA8dXB0b2RhdGUgcHJvcGVydHk9InN0c3NjaGVtYS5ub3RSZXF1aXJlZCIgdGFyZ2V0ZmlsZT0iYnVpbGQvcHJpdmF0ZS9saWIvc3Rzc2NoZW1hLmphciI+Ci0gICAgICA8c3JjZmlsZXMgZGlyPSJ0ZXN0L3NyYy9zdHNzY2hlbWEiIGluY2x1ZGVzPSIqKi8qLnhzZCIvPgotICAgICAgPHNyY2ZpbGVzIGRpcj0iYnVpbGQvYXIiIGluY2x1ZGVzPSJ4YmVhbi5qYXIiLz4KLSAgICA8L3VwdG9kYXRlPgotICA8L3RhcmdldD4KLQotICA8dGFyZ2V0IG5hbWU9InN0c3NjaGVtYS5qYXIiIGRlcGVuZHM9InN0c3NjaGVtYS5jaGVjaywgZGlycywgeGJlYW4iIHVubGVzcz0ic3Rzc2NoZW1hLm5vdFJlcXVpcmVkIj4KLSAgICA8amF2YSBjbGFzc25hbWU9IiR7c2NoZW1hX2NvbXBpbGVyfSIgY2xhc3NwYXRocmVmPSJzY29tcC5ydW4ucGF0aCIgZm9yaz0idHJ1ZSIgZmFpbG9uZXJyb3I9InRydWUiPgotICAgICAgPGp2bWFyZyB2YWx1ZT0iLWVhIi8+Ci0gICAgICA8YXJnIGxpbmU9Ii1vdXQgYnVpbGQvcHJpdmF0ZS9saWIvc3Rzc2NoZW1hLmphciB0ZXN0L3NyYy9zdHNzY2hlbWEiLz4KLSAgICA8L2phdmE+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gc29hcHRlc3QgdGFyZ2V0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCi0gIDx0YXJnZXQgbmFtZT0ic29hcHRlc3QuY2xhc3NlcyIgZGVwZW5kcz0iZGlycywgc3Rzc2NoZW1hLmphciI+Ci0gICAgPG1rZGlyIGRpcj0iYnVpbGQvcHJpdmF0ZS9jbGFzc2VzL3NvYXB0ZXN0Ii8+Ci0gICAgPGphdmFjIHNyY2Rpcj0idGVzdC9zcmMvc29hcHRlc3QiIGRlc3RkaXI9ImJ1aWxkL3ByaXZhdGUvY2xhc3Nlcy9zb2FwdGVzdCIgc291cmNlPSIxLjQiIGRlYnVnPSJvbiI+Ci0gICAgICA8Y2xhc3NwYXRoPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImV4dGVybmFsL2xpYi9qZG9tLmphciIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImV4dGVybmFsL2xpYi9qdW5pdC5qYXIiLz4KLSAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9hci94YmVhbi5qYXIiLz4KLSAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9wcml2YXRlL2xpYi9zdHNzY2hlbWEuamFyIi8+Ci0gICAgICA8L2NsYXNzcGF0aD4KLSAgICA8L2phdmFjPgotCi0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0ic29hcHRlc3QuamFyIiBkZXBlbmRzPSJzb2FwdGVzdC5jbGFzc2VzIj4KLSAgICA8amFyIGphcmZpbGU9ImJ1aWxkL3ByaXZhdGUvbGliL3NvYXB0ZXN0LmphciIgYmFzZWRpcj0iYnVpbGQvcHJpdmF0ZS9jbGFzc2VzL3NvYXB0ZXN0Ii8+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gZXJpY3Rlc3QgdGFyZ2V0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQotICA8dGFyZ2V0IG5hbWU9ImVyaWN0ZXN0LmNsYXNzZXMiIGRlcGVuZHM9ImRpcnMsIHhiZWFuLCBlcmljc2NoZW1hLmphciwganNyMTczXzA3X2FwaS5qYXIiPgotICAgIDxta2RpciBkaXI9ImJ1aWxkL3ByaXZhdGUvY2xhc3Nlcy9lcmljdGVzdCIvPgotICAgIDxqYXZhYyBzcmNkaXI9InRlc3Qvc3JjL2VyaWN0ZXN0IiBkZXN0ZGlyPSJidWlsZC9wcml2YXRlL2NsYXNzZXMvZXJpY3Rlc3QiIHNvdXJjZT0iMS40IiBkZWJ1Zz0ib24iPgotICAgICAgPGNsYXNzcGF0aD4KLSAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9hci94YmVhbi5qYXIiLz4KLSAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9wcml2YXRlL2xpYi9lcmljc2NoZW1hLmphciIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2xpYi9qc3IxNzNfMDdfYXBpLmphciIvPgotICAgICAgPC9jbGFzc3BhdGg+Ci0gICAgPC9qYXZhYz4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJlcmljdGVzdC5qYXIiIGRlcGVuZHM9ImVyaWN0ZXN0LmNsYXNzZXMiPgotICAgIDxqYXIgamFyZmlsZT0iYnVpbGQvcHJpdmF0ZS9saWIvZXJpY3Rlc3QuamFyIiBiYXNlZGlyPSJidWlsZC9wcml2YXRlL2NsYXNzZXMvZXJpY3Rlc3QiLz4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSByYW5kb20gdGFyZ2V0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQotICA8dGFyZ2V0IG5hbWU9InJhbmRvbS5jbGFzc2VzIiBkZXBlbmRzPSJkaXJzLCB4YmVhbiwgZWFzeXBvLmphciI+Ci0gICAgPG1rZGlyIGRpcj0iYnVpbGQvcHJpdmF0ZS9jbGFzc2VzL3JhbmRvbSIvPgotICAgIDxqYXZhYwotICAgICAgIHNyY2Rpcj0idGVzdC9zcmMvcmFuZG9tIgotICAgICAgIGRlc3RkaXI9ImJ1aWxkL3ByaXZhdGUvY2xhc3Nlcy9yYW5kb20iCi0gICAgICAgY2xhc3NwYXRocmVmPSJ0ZXN0LmNvbXBpbGUucGF0aCIKLSAgICAgICBzb3VyY2U9IjEuNCIKLSAgICAgICBkZWJ1Zz0ib24iLz4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJyYW5kb20uamFyIiBkZXBlbmRzPSJyYW5kb20uY2xhc3NlcyI+Ci0gICAgPGphciBqYXJmaWxlPSJidWlsZC9wcml2YXRlL2xpYi9yYW5kb20uamFyIiBiYXNlZGlyPSJidWlsZC9wcml2YXRlL2NsYXNzZXMvcmFuZG9tIi8+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gdGVzdHN0b3JlIHRhcmdldCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0KLSAgPHRhcmdldCBuYW1lPSJ0ZXN0c3RvcmUuY2xhc3NlcyIgZGVwZW5kcz0iZGlycyI+Ci0gICAgPG1rZGlyIGRpcj0iYnVpbGQvcHJpdmF0ZS9jbGFzc2VzL3Rlc3RzdG9yZSIvPgotICAgIDxqYXZhYyBzcmNkaXI9InRlc3Qvc3JjL3Rlc3RzdG9yZSIgZGVzdGRpcj0iYnVpbGQvcHJpdmF0ZS9jbGFzc2VzL3Rlc3RzdG9yZSIgc291cmNlPSIxLjQiIGRlYnVnPSJvbiI+Ci0gICAgICA8Y2xhc3NwYXRoPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL3ByaXZhdGUvY2xhc3Nlcy9zaW1wbGV0eXBlcyIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL3ByaXZhdGUvY2xhc3Nlcy94bWxjb21wIi8+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvcHJpdmF0ZS9jbGFzc2VzL3R5cGVzdG9yZSIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL3ByaXZhdGUvY2xhc3Nlcy94bWxwdWJsaWMiLz4KLSAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9wcml2YXRlL2NsYXNzZXMvdHlwZWltcGwiLz4KLSAgICAgIDwvY2xhc3NwYXRoPgotICAgIDwvamF2YWM+Ci0KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJ0ZXN0c3RvcmUuamFyIiBkZXBlbmRzPSJ0ZXN0c3RvcmUuY2xhc3NlcyI+Ci0gICAgPGphciBqYXJmaWxlPSJidWlsZC9wcml2YXRlL2xpYi90ZXN0c3RvcmUuamFyIiBiYXNlZGlyPSJidWlsZC9wcml2YXRlL2NsYXNzZXMvdGVzdHN0b3JlIi8+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gc2ltcGxldHlwZXMgKGZvciB0ZXN0aW5nKSB0YXJnZXQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0KLSAgPHRhcmdldCBuYW1lPSJzaW1wbGV0eXBlcy5jaGVjayI+Ci0gICAgPHVwdG9kYXRlIHByb3BlcnR5PSJzaW1wbGV0eXBlcy5ub3RSZXF1aXJlZCIgdGFyZ2V0ZmlsZT0iYnVpbGQvcHJpdmF0ZS9saWIvc2ltcGxldHlwZXMuamFyIj4KLSAgICAgIDxzcmNmaWxlcyBkaXI9InRlc3QvY2FzZXMvc2NoZW1hL3NpbXBsZSIgaW5jbHVkZXM9IioqLyoueHNkIi8+Ci0gICAgICA8c3JjZmlsZXMgZGlyPSJidWlsZC9wcml2YXRlL2xpYiIgaW5jbHVkZXM9InhiZWFuLmphciIvPgotICAgIDwvdXB0b2RhdGU+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0ic2ltcGxldHlwZXMuamFyIiBkZXBlbmRzPSJzaW1wbGV0eXBlcy5jaGVjaywgZGlycyIgdW5sZXNzPSJzaW1wbGV0eXBlLm5vdFJlcXVpcmVkIj4KLSAgICA8amF2YSBjbGFzc25hbWU9IiR7c2NoZW1hX2NvbXBpbGVyfSIgY2xhc3NwYXRocmVmPSJzY29tcC5ydW4ucGF0aCIgZm9yaz0idHJ1ZSIgZmFpbG9uZXJyb3I9InRydWUiPgotICAgICAgPGp2bWFyZyB2YWx1ZT0iLWVhIi8+Ci0gICAgICA8YXJnIGxpbmU9Ii1uYW1lIHNjaGVtYS50ZXN0LnNpbXBsZSAtb3V0IGJ1aWxkL3ByaXZhdGUvbGliL3NpbXBsZXR5cGVzLmphciB0ZXN0L2Nhc2VzL3NjaGVtYS9zaW1wbGUiLz4KLSAgICA8L2phdmE+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gZWFzeXBvIChmb3IgdGVzdGluZykgdGFyZ2V0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0KLSAgPHRhcmdldCBuYW1lPSJlYXN5cG8uY2hlY2siPgotICAgIDx1cHRvZGF0ZSBwcm9wZXJ0eT0iZWFzeXBvLm5vdFJlcXVpcmVkIiB0YXJnZXRmaWxlPSJidWlsZC9wcml2YXRlL2xpYi9lYXN5cG8uamFyIj4KLSAgICAgIDxzcmNmaWxlcyBkaXI9InRlc3Qvc3JjL2Vhc3lwbyIgaW5jbHVkZXM9IioqLyoiLz4KLSAgICAgIDxzcmNmaWxlcyBkaXI9ImJ1aWxkL2FyIiBpbmNsdWRlcz0ieGJlYW4uamFyIi8+Ci0gICAgPC91cHRvZGF0ZT4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJlYXN5cG8uamFyIiBkZXBlbmRzPSJlYXN5cG8uY2hlY2ssIGRpcnMsIHhiZWFuIiB1bmxlc3M9ImVhc3lwby5ub3RSZXF1aXJlZCI+Ci0gICAgPGphdmEgY2xhc3NuYW1lPSIke3NjaGVtYV9jb21waWxlcn0iIGNsYXNzcGF0aHJlZj0ic2NvbXAucnVuLnBhdGgiIGZvcms9InRydWUiIGZhaWxvbmVycm9yPSJ0cnVlIj4KLSAgICAgIDxqdm1hcmcgdmFsdWU9Ii1lYSIvPgotICAgICAgPGFyZyBsaW5lPSItb3V0IGJ1aWxkL3ByaXZhdGUvbGliL2Vhc3lwby5qYXIgdGVzdC9zcmMvZWFzeXBvIi8+Ci0gICAgPC9qYXZhPgotICA8L3RhcmdldD4KLQotICA8IS0tIHNjaGVtYXMgKGZvciB0ZXN0aW5nKSB0YXJnZXQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0KLSAgPHRhcmdldCBuYW1lPSJzY2hlbWFzLmNoZWNrIj4KLSAgICA8dXB0b2RhdGUgcHJvcGVydHk9InNjaGVtYXMubm90UmVxdWlyZWQiIHRhcmdldGZpbGU9ImJ1aWxkL3ByaXZhdGUvbGliL3NjaGVtYXMuamFyIj4KLSAgICAgIDxzcmNmaWxlcyBkaXI9InRlc3Qvc3JjL3NjaGVtYXMiIGluY2x1ZGVzPSIqKi8qLnhzZCIvPgotICAgICAgPHNyY2ZpbGVzIGRpcj0iYnVpbGQvYXIiIGluY2x1ZGVzPSJ4YmVhbi5qYXIiLz4KLSAgICA8L3VwdG9kYXRlPgotICA8L3RhcmdldD4KLQotICA8dGFyZ2V0IG5hbWU9InNjaGVtYXMuamFyIiBkZXBlbmRzPSJzY2hlbWFzLmNoZWNrLCBkaXJzLCB4YmVhbiIgdW5sZXNzPSJzY2hlbWFzLm5vdFJlcXVpcmVkIj4KLSAgICA8amF2YSBjbGFzc25hbWU9IiR7c2NoZW1hX2NvbXBpbGVyfSIgY2xhc3NwYXRocmVmPSJzY29tcC5ydW4ucGF0aCIgZm9yaz0idHJ1ZSIgZmFpbG9uZXJyb3I9InRydWUiPgotICAgICAgPGp2bWFyZyB2YWx1ZT0iLWVhIi8+Ci0gICAgICA8YXJnIGxpbmU9Ii1vdXQgYnVpbGQvcHJpdmF0ZS9saWIvc2NoZW1hcy5qYXIgdGVzdC9zcmMvc2NoZW1hcyIvPgotICAgIDwvamF2YT4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBlcmljc2NoZW1hIChmb3IgdGVzdGluZykgdGFyZ2V0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCi0gIDx0YXJnZXQgbmFtZT0iZXJpY3NjaGVtYS5jaGVjayI+Ci0gICAgPHVwdG9kYXRlIHByb3BlcnR5PSJlcmljc2NoZW1hLm5vdFJlcXVpcmVkIiB0YXJnZXRmaWxlPSJidWlsZC9wcml2YXRlL2xpYi9lcmljc2NoZW1hLmphciI+Ci0gICAgICA8c3JjZmlsZXMgZGlyPSJ0ZXN0L3NyYy9lcmljc2NoZW1hIiBpbmNsdWRlcz0iKiovKi54c2QiLz4KLSAgICAgIDxzcmNmaWxlcyBkaXI9ImJ1aWxkL2FyIiBpbmNsdWRlcz0ieGJlYW4uamFyIi8+Ci0gICAgPC91cHRvZGF0ZT4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJlcmljc2NoZW1hLmphciIgZGVwZW5kcz0iZXJpY3NjaGVtYS5jaGVjaywgZGlycywgeGJlYW4iIHVubGVzcz0iZXJpY3NjaGVtYS5ub3RSZXF1aXJlZCI+Ci0gICAgPGphdmEgY2xhc3NuYW1lPSIke3NjaGVtYV9jb21waWxlcn0iIGNsYXNzcGF0aHJlZj0ic2NvbXAucnVuLnBhdGgiIGZvcms9InRydWUiIGZhaWxvbmVycm9yPSJ0cnVlIj4KLSAgICAgIDxqdm1hcmcgdmFsdWU9Ii1lYSIvPgotICAgICAgPGFyZyBsaW5lPSItc3JjIGJ1aWxkL3ByaXZhdGUvc3JjIC1vdXQgYnVpbGQvcHJpdmF0ZS9saWIvZXJpY3NjaGVtYS5qYXIgdGVzdC9zcmMvZXJpY3NjaGVtYSIvPgotICAgIDwvamF2YT4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBlbnVtdGVzdCAoZm9yIHRlc3RpbmcpIHRhcmdldCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0KLSAgPHRhcmdldCBuYW1lPSJlbnVtdGVzdC5jaGVjayI+Ci0gICAgPHVwdG9kYXRlIHByb3BlcnR5PSJlbnVtdGVzdC5ub3RSZXF1aXJlZCIgdGFyZ2V0ZmlsZT0iYnVpbGQvcHJpdmF0ZS9saWIvZW51bXRlc3QuamFyIj4KLSAgICAgIDxzcmNmaWxlcyBkaXI9InRlc3QvY2FzZXMvc2NoZW1hL3NpbXBsZSIgaW5jbHVkZXM9IioqLyoueHNkIi8+Ci0gICAgICA8c3JjZmlsZXMgZGlyPSJidWlsZC9hciIgaW5jbHVkZXM9InhiZWFuLmphciIvPgotICAgIDwvdXB0b2RhdGU+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0iZW51bXRlc3QuamFyIiBkZXBlbmRzPSJlbnVtdGVzdC5jaGVjaywgZGlycywgeGJlYW4iIHVubGVzcz0iZW51bXRlc3Qubm90UmVxdWlyZWQiPgotICAgIDxqYXZhIGNsYXNzbmFtZT0iJHtzY2hlbWFfY29tcGlsZXJ9IiBjbGFzc3BhdGhyZWY9InNjb21wLnJ1bi5wYXRoIiBmb3JrPSJ0cnVlIiBmYWlsb25lcnJvcj0idHJ1ZSI+Ci0gICAgICA8anZtYXJnIHZhbHVlPSItZWEiLz4KLSAgICAgIDxhcmcgbGluZT0iLW91dCBidWlsZC9wcml2YXRlL2xpYi9lbnVtdGVzdC5qYXIgdGVzdC9zcmMvZW51bXRlc3QiLz4KLSAgICA8L2phdmE+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0geHN0eXBlcyAoZm9yIHRlc3RpbmcpIHRhcmdldCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0KLSAgPHRhcmdldCBuYW1lPSJ4c3R5cGVzLmNoZWNrIj4KLSAgICA8dXB0b2RhdGUgcHJvcGVydHk9InhzdHlwZXMubm90UmVxdWlyZWQiIHRhcmdldGZpbGU9ImJ1aWxkL3ByaXZhdGUvbGliL3hzdHlwZXMuamFyIj4KLSAgICAgIDxzcmNmaWxlcyBkaXI9InRlc3QvY2FzZXMvc2NoZW1hL3NpbXBsZSIgaW5jbHVkZXM9IioqLyoueHNkIi8+Ci0gICAgICA8c3JjZmlsZXMgZGlyPSJidWlsZC9hciIgaW5jbHVkZXM9InhiZWFuLmphciIvPgotICAgIDwvdXB0b2RhdGU+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0ieHN0eXBlcy5qYXIiIGRlcGVuZHM9InhzdHlwZXMuY2hlY2ssIGRpcnMsIHhiZWFuIiB1bmxlc3M9InhzdHlwZXMubm90UmVxdWlyZWQiPgotICAgIDxqYXZhIGNsYXNzbmFtZT0iJHtzY2hlbWFfY29tcGlsZXJ9IiBjbGFzc3BhdGhyZWY9InNjb21wLnJ1bi5wYXRoIiBmb3JrPSJ0cnVlIiBmYWlsb25lcnJvcj0idHJ1ZSI+Ci0gICAgICA8anZtYXJnIHZhbHVlPSItZWEiLz4KLSAgICAgIDxhcmcgbGluZT0iLW91dCBidWlsZC9wcml2YXRlL2xpYi94c3R5cGVzLmphciB0ZXN0L3NyYy94c3R5cGVzIi8+Ci0gICAgPC9qYXZhPgotICA8L3RhcmdldD4KLQotICA8IS0tIGphdmFkb2NzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQotICA8IS0tIEFsbCBkb2NzIHRvIGJ1aWxkL2RvY3MsIGluY2x1ZGluZyBndWlkZSBhbmQgamF2YWRvY3MuIC0tPgotCi0gIDx0YXJnZXQgbmFtZT0iZG9jcyIgZGVwZW5kcz0ieGJlYW4iPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJkb2NzLmRpciIgdmFsdWU9ImJ1aWxkL2RvY3MiLz4KLSAgICA8ZGVsZXRlIGRpcj0iJHtkb2NzLmRpcn0iLz4KLSAgICA8bWtkaXIgZGlyPSIke2RvY3MuZGlyfSIvPgotICAgIDxqYXZhZG9jIHBhY2thZ2VuYW1lcz0iKiIgc291cmNlcGF0aD0ic3JjL3htbHB1YmxpYyIgY2xhc3NwYXRoPSIke2phdmFkb2MucGF0aH0iIGRlc3RkaXI9IiR7ZG9jcy5kaXJ9L3JlZmVyZW5jZSIgd2luZG93dGl0bGU9IlhNTEJlYW5zIERvY3VtZW50YXRpb24iIHNvdXJjZT0iMS40IiBzdHlsZXNoZWV0ZmlsZT0iZG9jcy9zdHlsZXNoZWV0LmNzcyI+Ci0gICAgICA8bGluayBocmVmPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy8iLz4KLSAgICAgIDxsaW5rIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS8iLz4KLSAgICAgIDxsaW5rIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvIi8+Ci0gICAgICA8bGluayBocmVmPSJodHRwOi8veG1sLmFwYWNoZS5vcmcveGVyY2VzLWovYXBpRG9jcy8iLz4KLSAgICAgIDxjbGFzc3BhdGg+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvYXIveGJlYW4uamFyIi8+Ci0gICAgICA8L2NsYXNzcGF0aD4KLSAgICA8L2phdmFkb2M+Ci0gICAgPGNvcHkgZmlsZT0iZG9jcy94bWxiZWFucy5jc3MiIHRvZmlsZT0iJHtkb2NzLmRpcn0veG1sYmVhbnMuY3NzIiAvPgotICAgIDxjb3B5IHRvZGlyPSIke2RvY3MuZGlyfS9ndWlkZSI+Ci0gICAgICA8ZmlsZXNldCBkaXI9ImRvY3MvZ3VpZGUiLz4KLSAgICA8L2NvcHk+Ci0gICAgPGNvcHkgdG9kaXI9IiR7ZG9jcy5kaXJ9L2ltYWdlcyI+Ci0gICAgICA8ZmlsZXNldCBkaXI9ImRvY3MvaW1hZ2VzIi8+Ci0gICAgPC9jb3B5PgotICA8L3RhcmdldD4KLQotICA8IS0tIHN0cmVhbSBjb25mb3JtYW5jZSB0ZXN0cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0KLSAgPHRhcmdldCBuYW1lPSJzdHJlYW10ZXN0LmNsYXNzZXMiIGRlcGVuZHM9ImRpcnMiPgotICAgIDxta2RpciBkaXI9ImJ1aWxkL3ByaXZhdGUvY2xhc3Nlcy9zdHJlYW10ZXN0Ii8+Ci0gICAgPGphdmFjCi0gICAgICBzcmNkaXI9InRlc3Qvc3JjL3N0cmVhbXRlc3QiCi0gICAgICBkZXN0ZGlyPSJidWlsZC9wcml2YXRlL2NsYXNzZXMvc3RyZWFtdGVzdCIKLSAgICAgIGNsYXNzcGF0aHJlZj0idGVzdC5jb21waWxlLnBhdGgiCi0gICAgICBzb3VyY2U9IjEuNCIKLSAgICAgIGRlYnVnPSJvbiIvPgotICA8L3RhcmdldD4KLQotICA8dGFyZ2V0IG5hbWU9InN0cmVhbXRlc3QuamFyIiBkZXBlbmRzPSJzdHJlYW10ZXN0LmNsYXNzZXMiPgotICAgIDxqYXIgamFyZmlsZT0iYnVpbGQvcHJpdmF0ZS9saWIvc3RyZWFtdGVzdC5qYXIiIGJhc2VkaXI9ImJ1aWxkL3ByaXZhdGUvY2xhc3Nlcy9zdHJlYW10ZXN0Ii8+Ci0gIDwvdGFyZ2V0PgotCi0gIDxwYXRoIGlkPSJydW4uc3RyZWFtY29uZi5wYXRoIj4KLSAgICA8cGF0aCByZWZpZD0idGVzdC5ydW4ucGF0aCIvPgotICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvcHJpdmF0ZS9jbGFzc2VzL3N0cmVhbXRlc3QvIi8+Ci0gIDwvcGF0aD4KLQotICA8dGFyZ2V0IG5hbWU9InN0cmVhbWNvbmYiIGRlcGVuZHM9InN0cmVhbXRlc3QuamFyIj4KLSAgICA8amF2YSBjbGFzc25hbWU9InN0cmVhbXRlc3QuWG1sU3RyZWFtQ29uZm9ybWFuY2UiCi0gICAgICAgICAgY2xhc3NwYXRocmVmPSJydW4uc3RyZWFtY29uZi5wYXRoIgotICAgICAgICAgIGZvcms9InRydWUiPgotICAgICAgPGp2bWFyZyB2YWx1ZT0iLWVhIi8+Ci0gICAgICA8IS0tYXJnIGxpbmU9InRlc3QvY2FzZXMvc3RyZWFtY29uZi9zbWFsbC54bWwiIC8tLT4KLSAgICAgIDxhcmcgbGluZT0idGVzdC9jYXNlcy9zdHJlYW1jb25mL2R0ZC54bWwiIC8+Ci0gICAgPC9qYXZhPgotICA8L3RhcmdldD4KLQotCi0gIDx0YXJnZXQgbmFtZT0iZGlzdCIgZGVwZW5kcz0ieGJlYW4sIGRvY3MiPgotICAgICA8ZGVsZXRlIGRpcj0iYnVpbGQvcHJpdmF0ZS94bWxiZWFucy0ke3Byb2R1Y3QudmVyc2lvbn0iLz4KLSAgICAgPGRlbGV0ZSBmaWxlPSJidWlsZC9wcml2YXRlL2luY3ViYXRlZC14bWxiZWFucy0ke3Byb2R1Y3QudmVyc2lvbn0uemlwIi8+Ci0KLSAgICAgPG1rZGlyIGRpcj0iYnVpbGQvcHJpdmF0ZS94bWxiZWFucy0ke3Byb2R1Y3QudmVyc2lvbn0iLz4KLSAgICAgPGNvcHkgdG9kaXI9ImJ1aWxkL3ByaXZhdGUveG1sYmVhbnMtJHtwcm9kdWN0LnZlcnNpb259Ij4KLSAgICAgICAgPGZpbGVzZXQgZGlyPSJ4a2l0Ii8+Ci0gICAgIDwvY29weT4KLQotICAgICA8bWtkaXIgZGlyPSJidWlsZC9wcml2YXRlL3htbGJlYW5zLSR7cHJvZHVjdC52ZXJzaW9ufS9saWIiLz4KLSAgICAgPGNvcHkgdG9kaXI9ImJ1aWxkL3ByaXZhdGUveG1sYmVhbnMtJHtwcm9kdWN0LnZlcnNpb259L2xpYiIgZmlsZT0iYnVpbGQvYXIveGJlYW4uamFyIi8+Ci0KLSAgICAgPG1rZGlyIGRpcj0iYnVpbGQvcHJpdmF0ZS94bWxiZWFucy0ke3Byb2R1Y3QudmVyc2lvbn0vc3JjL3NjaGVtYSIvPgotICAgICA8Y29weSB0b2Rpcj0iYnVpbGQvcHJpdmF0ZS94bWxiZWFucy0ke3Byb2R1Y3QudmVyc2lvbn0vc3JjL3NjaGVtYSI+Ci0gICAgICAgIDxmaWxlc2V0IGRpcj0ic3JjL3Rvb2xzY2hlbWEiLz4KLSAgICAgPC9jb3B5PgotCi0gICAgIDxta2RpciBkaXI9ImJ1aWxkL3ByaXZhdGUveG1sYmVhbnMtJHtwcm9kdWN0LnZlcnNpb259L2RvY3MiLz4KLSAgICAgPGNvcHkgdG9kaXI9ImJ1aWxkL3ByaXZhdGUveG1sYmVhbnMtJHtwcm9kdWN0LnZlcnNpb259L2RvY3MiPgotICAgICAgICA8ZmlsZXNldCBkaXI9ImJ1aWxkL2RvY3MiLz4KLSAgICAgPC9jb3B5PgotCi0gICAgICA8IS0tIHRvZG8gZm9yIGd1bXA/OiBhZGQgeXl5eU1NZGQgaW50byBmaWxlbmFtZSAtIHJlbSAtLT4KLSAgICAgIDx6aXAgZGVzdGZpbGU9ImJ1aWxkL3ByaXZhdGUvaW5jdWJhdGVkLXhtbGJlYW5zLSR7cHJvZHVjdC52ZXJzaW9ufS56aXAiCi0gICAgICAgICAgYmFzZWRpcj0iYnVpbGQvcHJpdmF0ZSIKLSAgICAgICAgICBpbmNsdWRlcz0ieG1sYmVhbnMtJHtwcm9kdWN0LnZlcnNpb259LyoqIi8+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gcHJldmlvdXNseSBpbiB4YmVhbi54bWwgLS0+Ci0KLSAgPHRhcmdldCBuYW1lPSJ4YmVhbi5qYXIiCi0gICAgICAgIGRlcGVuZHM9ImRpcnMsIHhtbHB1YmxpYy5jbGFzc2VzLCB0eXBlc3RvcmUuY2xhc3NlcywKLSAgICAgICAgICAgICAgICAgY29tbW9uLmNsYXNzZXMsIHR5cGVpbXBsLmNsYXNzZXMsIHhtbGNvbXAuY2xhc3NlcywKLSAgICAgICAgICAgICAgICAgeG1sc3RvcmUuY2xhc3NlcywgYmluZGluZy5jbGFzc2VzLCBtYXJzaGFsLmNsYXNzZXMsCi0gICAgICAgICAgICAgICAgIG9sZHhiZWFuLmphciwgeHNkc2NoZW1hLmNsYXNzZXMsCi0gICAgICAgICAgICAgICAgIHhtbGlucHV0c3RyZWFtLmNsYXNzZXMiPgotICAgIDxqYXIgamFyZmlsZT0iYnVpbGQvbGliL3hiZWFuLmphciIgaW5kZXg9InRydWUiPgotICAgICAgPGZpbGVzZXQgZGlyPSJidWlsZC9jbGFzc2VzL3htbHB1YmxpYyIvPgotICAgICAgPGZpbGVzZXQgZGlyPSJidWlsZC9jbGFzc2VzL3R5cGVzdG9yZSIvPgotICAgICAgPGZpbGVzZXQgZGlyPSJidWlsZC9jbGFzc2VzL2NvbW1vbiIvPgotICAgICAgPGZpbGVzZXQgZGlyPSJidWlsZC9jbGFzc2VzL3R5cGVpbXBsIi8+Ci0gICAgICA8ZmlsZXNldCBkaXI9ImJ1aWxkL2NsYXNzZXMveG1sY29tcCIvPgotICAgICAgPGZpbGVzZXQgZGlyPSJidWlsZC9jbGFzc2VzL2NvbmZpZ3NjaGVtYSIvPgotICAgICAgPGZpbGVzZXQgZGlyPSJidWlsZC9jbGFzc2VzL3Rvb2xzY2hlbWEiLz4KLSAgICAgIDxmaWxlc2V0IGRpcj0iYnVpbGQvY2xhc3Nlcy94c2RzY2hlbWEiLz4KLSAgICAgIDxmaWxlc2V0IGRpcj0iYnVpbGQvY2xhc3Nlcy94bWxzY2hlbWEiLz4KLSAgICAgIDxmaWxlc2V0IGRpcj0iYnVpbGQvY2xhc3Nlcy94bWxzdG9yZSIvPgotICAgICAgPGZpbGVzZXQgZGlyPSJidWlsZC9jbGFzc2VzL3htbGlucHV0c3RyZWFtIi8+Ci0gICAgICA8ZmlsZXNldCBkaXI9ImJ1aWxkL2NsYXNzZXMvYmluZGluZyIvPgotICAgICAgPGZpbGVzZXQgZGlyPSJidWlsZC9jbGFzc2VzL21hcnNoYWwiLz4KLSAgICAgIDxmaWxlc2V0IGRpcj0iYnVpbGQvY2xhc3Nlcy9yZXBhY2thZ2UiLz4KLSAgICAgIDxmaWxlc2V0IGRpcj0iYnVpbGQvY2xhc3Nlcy9qYW0iLz4KLSAgICAgIDxmaWxlc2V0IGRpcj0ic3JjL2xpY2Vuc2UiLz4KLSAgICA8L2phcj4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBqYXhiIHRhcmdldCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0KLSAgPHBhdGggaWQ9ImpheGIuY29tcGlsZS5wYXRoIj4KLSAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImV4dGVybmFsL2xpYi9qYXhiLTEuMC9qYXhiLWFwaS5qYXIiLz4KLSAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMveG1scHVibGljIi8+Ci0gICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9jbGFzc2VzL3R5cGVpbXBsIi8+Ci0gICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9jbGFzc2VzL2NvbW1vbiIvPgotICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvY2xhc3Nlcy90eXBlc3RvcmUiLz4KLSAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMveG1saW5wdXRzdHJlYW0iLz4KLSAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMvamF4YnNjaGVtYSIvPgotICA8L3BhdGg+Ci0KLSAgICA8dGFyZ2V0IG5hbWU9ImpheGJzY2hlbWEuY2hlY2siPgotICAgICAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJqYXhic2NoZW1hLm5vdFJlcXVpcmVkIj4KLSAgICAgICAgICAgIDx1cHRvZGF0ZSBwcm9wZXJ0eT0iamF4YnNjaGVtYS5ub3RSZXF1aXJlZCIgdGFyZ2V0ZmlsZT0iYnVpbGQvY2xhc3Nlcy9qYXhic2NoZW1hL3NjaGVtYS9zeXN0ZW0vSkFYQkNPTkZJRy9pbmRleC54c2IiPgotICAgICAgICAgICAgICAgIDxzcmNmaWxlcyBkaXI9InNyYy9qYXhiL3NjaGVtYSIgaW5jbHVkZXM9IioqLyoueHNkOyoqLyoueHNkY29uZmlnIi8+Ci0gICAgICAgICAgICA8L3VwdG9kYXRlPgotICAgICAgICA8L2NvbmRpdGlvbj4KLSAgICA8L3RhcmdldD4KLQotICAgIDx0YXJnZXQgbmFtZT0iamF4YnNjaGVtYS5jbGFzc2VzIiBkZXBlbmRzPSJqYXhic2NoZW1hLmNoZWNrLCB4bWxwdWJsaWMuY2xhc3NlcywgdHlwZWltcGwuY2xhc3NlcywgY29tbW9uLmNsYXNzZXMsIHR5cGVzdG9yZS5jbGFzc2VzLCB4bWxpbnB1dHN0cmVhbS5jbGFzc2VzIiB1bmxlc3M9ImpheGJzY2hlbWEubm90UmVxdWlyZWQiPgotICAgICAgICA8ZGVsZXRlIGRpcj0iYnVpbGQvY2xhc3Nlcy9qYXhic2NoZW1hIi8+Ci0gICAgICAgIDxkZWxldGUgZGlyPSJidWlsZC9zcmMvamF4YnNjaGVtYSIvPgotICAgICAgICA8amF2YSBjbGFzc25hbWU9IiR7Ym9vdHN0cmFwX3NjaGVtYV9jb21waWxlcn0iIGNsYXNzcGF0aHJlZj0iYm9vdHN0cmFwLnJ1bi5wYXRoIiBmb3JrPSJ0cnVlIiBmYWlsb25lcnJvcj0idHJ1ZSI+Ci0gICAgICAgICAgICA8anZtYXJnIHZhbHVlPSItZWEiLz4KLSAgICAgICAgICAgIDxhcmcgbGluZT0iJHtyZXBhY2thZ2VfYXJnfSAtbmFtZSBKQVhCQ09ORklHIC1jcCAke2Jvb3RzdHJhcC5jb21waWxlLnBhdGh9IC1zcmNvbmx5IC1kIGJ1aWxkL2NsYXNzZXMvamF4YnNjaGVtYSAtc3JjIGJ1aWxkL3NyYy9qYXhic2NoZW1hIHNyYy9qYXhiL3NjaGVtYSIvPgotICAgICAgICA8L2phdmE+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8dGFyZ2V0IG5hbWU9ImpheGIuY2xhc3NlcyIgZGVwZW5kcz0iZGlycywgamF4YnNjaGVtYS5jbGFzc2VzLCB4bWxwdWJsaWMuY2xhc3NlcywgdHlwZWltcGwuY2xhc3NlcywgY29tbW9uLmNsYXNzZXMsIHR5cGVzdG9yZS5jbGFzc2VzLCB4bWxpbnB1dHN0cmVhbS5jbGFzc2VzIj4KLSAgICAgICAgPG1rZGlyIGRpcj0iYnVpbGQvc3JjL2pheGIiLz4KLSAgICAgICAgPG1rZGlyIGRpcj0iYnVpbGQvY2xhc3Nlcy9qYXhiIi8+Ci0KLSAgICAgICAgPGphdmFjIGRlc3RkaXI9ImJ1aWxkL2NsYXNzZXMvamF4YiIgY2xhc3NwYXRocmVmPSJqYXhiLmNvbXBpbGUucGF0aCIgc291cmNlPSIxLjQiIGRlYnVnPSJvbiI+Ci0gICAgICAgICAgICA8c3JjIHBhdGg9InNyYy9qYXhiIi8+Ci0gICAgICAgICAgICA8c3JjIHBhdGg9ImJ1aWxkL3NyYy9qYXhic2NoZW1hIi8+Ci0gICAgICAgIDwvamF2YWM+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBidWlsZCBYTUxJbnB1dFN0cmVhbSBpbnRlcmZhY2UgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCi0gIDx0YXJnZXQgbmFtZT0ieG1saW5wdXRzdHJlYW0uY2xhc3NlcyIgZGVwZW5kcz0iZGlycyI+Ci0gICAgPG1rZGlyIGRpcj0iYnVpbGQvY2xhc3Nlcy94bWxpbnB1dHN0cmVhbSIvPgotICAgIDxqYXZhYyBzcmNkaXI9InNyYy94bWxpbnB1dHN0cmVhbSIKLSAgICAgICAgZGVzdGRpcj0iYnVpbGQvY2xhc3Nlcy94bWxpbnB1dHN0cmVhbSIKLSAgICAgICAgZGVidWc9Im9uIi8+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0geG1scHVibGljIHRhcmdldCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCi0gIDx0YXJnZXQgbmFtZT0ieG1scHVibGljLmNsYXNzZXMiIGRlcGVuZHM9ImRpcnMsIHhtbGlucHV0c3RyZWFtLmNsYXNzZXMsIGpzcjE3M18wN19hcGkuamFyIj4KLSAgICA8bWtkaXIgZGlyPSJidWlsZC9jbGFzc2VzL3htbHB1YmxpYyIvPgotICAgIDxqYXZhYyBzcmNkaXI9InNyYy94bWxwdWJsaWMiIGRlc3RkaXI9ImJ1aWxkL2NsYXNzZXMveG1scHVibGljIiBzb3VyY2U9IjEuNCIgZGVidWc9Im9uIj4KLSAgICAgIDxjbGFzc3BhdGg+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvY2xhc3Nlcy94bWxpbnB1dHN0cmVhbSIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2xpYi9qc3IxNzNfMDdfYXBpLmphciIvPgotICAgICAgPC9jbGFzc3BhdGg+Ci0gICAgPC9qYXZhYz4KLQotICA8L3RhcmdldD4KLQotICA8dGFyZ2V0IG5hbWU9InhtbHB1YmxpYy5qYXIiIGRlcGVuZHM9ImRpcnMsIHhtbGlucHV0c3RyZWFtLmNsYXNzZXMsIHhtbHB1YmxpYy5jbGFzc2VzLCB4bWxzY2hlbWEuY2xhc3NlcywgeHNkc2NoZW1hLmNsYXNzZXMiPgotICAgIDxqYXIgamFyZmlsZT0iYnVpbGQvbGliL3htbHB1YmxpYy5qYXIiICBpbmRleD0idHJ1ZSI+Ci0gICAgICA8ZmlsZXNldCBkaXI9ImJ1aWxkL2NsYXNzZXMveG1scHVibGljIi8+Ci0gICAgICA8ZmlsZXNldCBkaXI9ImJ1aWxkL2NsYXNzZXMveG1sc2NoZW1hIi8+Ci0gICAgICA8ZmlsZXNldCBkaXI9ImJ1aWxkL2NsYXNzZXMveHNkc2NoZW1hIi8+Ci0gICAgPC9qYXI+Ci0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gdHlwZXN0b3JlIHRhcmdldCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCi0gIDx0YXJnZXQgbmFtZT0idHlwZXN0b3JlLmNsYXNzZXMiIGRlcGVuZHM9ImRpcnMsIHhtbHB1YmxpYy5jbGFzc2VzLCBjb21tb24uY2xhc3NlcywgeG1saW5wdXRzdHJlYW0uY2xhc3NlcyI+Ci0gICAgPG1rZGlyIGRpcj0iYnVpbGQvY2xhc3Nlcy90eXBlc3RvcmUiLz4KLSAgICA8amF2YWMgc3JjZGlyPSJzcmMvdHlwZXN0b3JlIiBkZXN0ZGlyPSJidWlsZC9jbGFzc2VzL3R5cGVzdG9yZSIgc291cmNlPSIxLjQiIGRlYnVnPSJvbiI+Ci0gICAgICA8Y2xhc3NwYXRoPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2xpYi9qc3IxNzNfMDdfYXBpLmphciIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMveG1saW5wdXRzdHJlYW0iLz4KLSAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9jbGFzc2VzL3htbHB1YmxpYyIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMvY29tbW9uIi8+Ci0gICAgICA8L2NsYXNzcGF0aD4KLSAgICA8L2phdmFjPgotCi0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gY29tbW9uIHRhcmdldCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0KLSAgPHRhcmdldCBuYW1lPSJjb21tb24uY2xhc3NlcyIgZGVwZW5kcz0iZGlycywgeG1scHVibGljLmphciwgeG1saW5wdXRzdHJlYW0uY2xhc3NlcywganNyMTczXzA3X2FwaS5qYXIiPgotICAgIDxta2RpciBkaXI9ImJ1aWxkL2NsYXNzZXMvY29tbW9uIi8+Ci0gICAgPGphdmFjIHNyY2Rpcj0ic3JjL2NvbW1vbiIgZGVzdGRpcj0iYnVpbGQvY2xhc3Nlcy9jb21tb24iIHNvdXJjZT0iMS40IiBkZWJ1Zz0ib24iPgotICAgICAgPGNsYXNzcGF0aD4KLSAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9saWIvanNyMTczXzA3X2FwaS5qYXIiLz4KLSAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9jbGFzc2VzL3htbGlucHV0c3RyZWFtIi8+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvbGliL3htbHB1YmxpYy5qYXIiLz4KLSAgICAgIDwvY2xhc3NwYXRoPgotICAgIDwvamF2YWM+Ci0KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSB0eXBlaW1wbCB0YXJnZXQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQotICA8dGFyZ2V0IG5hbWU9InR5cGVpbXBsLmNsYXNzZXMiIGRlcGVuZHM9ImRpcnMsIHJlcGFja2FnZS5jbGFzc2VzLCB4bWxwdWJsaWMuY2xhc3NlcywgdHlwZXN0b3JlLmNsYXNzZXMsIHhzZHNjaGVtYS5jbGFzc2VzLCBjb25maWdzY2hlbWEuY2xhc3NlcywgdG9vbHNjaGVtYS5jbGFzc2VzLCBqc3IxNzNfMDdfYXBpLmphciI+Ci0gICAgPG1rZGlyIGRpcj0iYnVpbGQvY2xhc3Nlcy90eXBlaW1wbCIvPgotICAgIDxqYXZhYyBkZXN0ZGlyPSJidWlsZC9jbGFzc2VzL3R5cGVpbXBsIiBzb3VyY2U9IjEuNCIgZGVidWc9Im9uIj4KLSAgICAgIDxjbGFzc3BhdGg+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvY2xhc3Nlcy94bWxpbnB1dHN0cmVhbSIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMvY29tbW9uIi8+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvY2xhc3Nlcy9yZXBhY2thZ2UiLz4KLSAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9jbGFzc2VzL3R5cGVzdG9yZSIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMveG1scHVibGljIi8+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvY2xhc3Nlcy94bWxjb25maWciLz4KLSAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9jbGFzc2VzL2NvbmZpZ3NjaGVtYSIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMveHNkc2NoZW1hIi8+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvbGliL2pzcjE3M18wN19hcGkuamFyIi8+Ci0gICAgICA8L2NsYXNzcGF0aD4KLQotICAgICAgICA8c3JjIHBhdGg9InNyYy90eXBlaW1wbCIvPgotICAgICAgICA8c3JjIHBhdGg9ImJ1aWxkL3NyYy94bWxzY2hlbWEiLz4KLSAgICAgICAgPHNyYyBwYXRoPSJidWlsZC9zcmMveHNkc2NoZW1hIi8+Ci0gICAgICAgIDxzcmMgcGF0aD0iYnVpbGQvc3JjL2NvbmZpZ3NjaGVtYSIvPgotICAgICAgICA8c3JjIHBhdGg9ImJ1aWxkL3NyYy90b29sc2NoZW1hIi8+Ci0gICAgICAgIDxzcmMgcGF0aD0ic3JjL3htbGNvbmZpZyIvPgotICAgIDwvamF2YWM+Ci0KLSAgICA8IS0tIE5lZWQgcHJvcGVydGllcyBmaWxlcyBmb3IgcmVnZXggLS0+Ci0gICAgPGNvcHkKLSAgICAgIHRvZGlyPSJidWlsZC9jbGFzc2VzL3R5cGVpbXBsIj4KLSAgICAgIDxmaWxlc2V0IGRpcj0ic3JjL3R5cGVpbXBsIj4KLSAgICAgICAgPGV4Y2x1ZGUgbmFtZT0iKiovKi5qYXZhIi8+Ci0gICAgICA8L2ZpbGVzZXQ+Ci0gICAgPC9jb3B5PgotICA8L3RhcmdldD4KLQotICA8IS0tIHhtbGNvbXAgdGFyZ2V0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCi0gIDx0YXJnZXQgbmFtZT0ieG1sY29tcC5jbGFzc2VzIiBkZXBlbmRzPSJkaXJzLCByZXBhY2thZ2UuY2xhc3NlcywgdHlwZWltcGwuY2xhc3NlcywgeG1scHVibGljLmNsYXNzZXMsIHR5cGVzdG9yZS5jbGFzc2VzIj4KLSAgICA8bWtkaXIgZGlyPSJidWlsZC9jbGFzc2VzL3htbGNvbXAiLz4KLSAgICA8amF2YWMgc3JjZGlyPSJzcmMveG1sY29tcCIgZGVzdGRpcj0iYnVpbGQvY2xhc3Nlcy94bWxjb21wIiBzb3VyY2U9IjEuNCIgZGVidWc9Im9uIj4KLSAgICAgIDxjbGFzc3BhdGg+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvbGliL2pzcjE3M18wN19hcGkuamFyIi8+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvY2xhc3Nlcy94bWxpbnB1dHN0cmVhbSIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMveG1scHVibGljIi8+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvY2xhc3Nlcy9jb21tb24iLz4KLSAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9jbGFzc2VzL3JlcGFja2FnZSIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMvdHlwZWltcGwiLz4KLSAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9jbGFzc2VzL3htbGNvbmZpZyIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMvY29uZmlnc2NoZW1hIi8+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvY2xhc3Nlcy90b29sc2NoZW1hIi8+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvY2xhc3Nlcy94c2RzY2hlbWEiLz4KLSAgICAgIDwvY2xhc3NwYXRoPgotICAgIDwvamF2YWM+Ci0KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBqYW0gdGFyZ2V0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCi0gIDx0YXJnZXQgbmFtZT0iamFtLmNsYXNzZXMiIGRlcGVuZHM9ImRpcnMiPgotICAgIDxta2RpciBkaXI9ImJ1aWxkL2NsYXNzZXMvamFtIi8+Ci0gICAgPGphdmFjIHNyY2Rpcj0ic3JjL2phbSIgZGVzdGRpcj0iYnVpbGQvY2xhc3Nlcy9qYW0iIHNvdXJjZT0iMS40IiBkZWJ1Zz0ib24iPgotICAgICAgPGNsYXNzcGF0aD4KLSAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9jbGFzc2VzL2NvbmZpZ3NjaGVtYSIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMveG1saW5wdXRzdHJlYW0iLz4KLSAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9jbGFzc2VzL3htbHB1YmxpYyIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMvY29tbW9uIi8+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvY2xhc3Nlcy9yZXBhY2thZ2UiLz4KLSAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9jbGFzc2VzL3R5cGVpbXBsIi8+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvY2xhc3Nlcy94bWxjb25maWciLz4KLSAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9jbGFzc2VzL2NvbmZpZ3NjaGVtYSIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMvdG9vbHNjaGVtYSIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMveHNkc2NoZW1hIi8+Ci0gICAgICA8L2NsYXNzcGF0aD4KLSAgICA8L2phdmFjPgotCi0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gYmluZGluZyB0YXJnZXQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0KLSAgPHRhcmdldCBuYW1lPSJiaW5kaW5nLmNsYXNzZXMiIGRlcGVuZHM9ImRpcnMsIHJlcGFja2FnZS5jbGFzc2VzLCB0eXBlaW1wbC5jbGFzc2VzLCB4bWxwdWJsaWMuY2xhc3NlcywgdHlwZXN0b3JlLmNsYXNzZXMsIGNvbmZpZ3NjaGVtYS5jbGFzc2VzLCBqYW0uY2xhc3NlcyI+Ci0gICAgPG1rZGlyIGRpcj0iYnVpbGQvY2xhc3Nlcy9iaW5kaW5nIi8+Ci0gICAgPGphdmFjIHNyY2Rpcj0ic3JjL2JpbmRpbmciIGRlc3RkaXI9ImJ1aWxkL2NsYXNzZXMvYmluZGluZyIgc291cmNlPSIxLjQiIGRlYnVnPSJvbiI+Ci0gICAgICA8Y2xhc3NwYXRoPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMvY29uZmlnc2NoZW1hIi8+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvY2xhc3Nlcy94bWxpbnB1dHN0cmVhbSIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMveG1scHVibGljIi8+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvY2xhc3Nlcy9jb21tb24iLz4KLSAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9jbGFzc2VzL3JlcGFja2FnZSIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMvdHlwZWltcGwiLz4KLSAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9jbGFzc2VzL3htbGNvbmZpZyIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMvY29uZmlnc2NoZW1hIi8+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvY2xhc3Nlcy90b29sc2NoZW1hIi8+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvY2xhc3Nlcy94c2RzY2hlbWEiLz4KLSAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9jbGFzc2VzL2phbSIvPgotICAgICAgPC9jbGFzc3BhdGg+Ci0gICAgPC9qYXZhYz4KLQotICA8L3RhcmdldD4KLQotICA8IS0tIG1hcnNoYWwgdGFyZ2V0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotCi0gIDx0YXJnZXQgbmFtZT0ibWFyc2hhbC5jbGFzc2VzIiBkZXBlbmRzPSJkaXJzLCBiaW5kaW5nLmNsYXNzZXMsIHR5cGVpbXBsLmNsYXNzZXMsIHhtbHB1YmxpYy5jbGFzc2VzLCBqc3IxNzNfMDdfYXBpLmphciI+Ci0gICAgPG1rZGlyIGRpcj0iYnVpbGQvY2xhc3Nlcy9tYXJzaGFsIi8+Ci0gICAgPGphdmFjIHNyY2Rpcj0ic3JjL21hcnNoYWwiIGRlc3RkaXI9ImJ1aWxkL2NsYXNzZXMvbWFyc2hhbCIgc291cmNlPSIxLjQiIGRlYnVnPSJvbiI+Ci0gICAgICA8Y2xhc3NwYXRoPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2xpYi9qc3IxNzNfMDdfYXBpLmphciIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMvY29uZmlnc2NoZW1hIi8+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvY2xhc3Nlcy94bWxpbnB1dHN0cmVhbSIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMveG1scHVibGljIi8+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvY2xhc3Nlcy9jb21tb24iLz4KLSAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9jbGFzc2VzL2JpbmRpbmciLz4KLSAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9jbGFzc2VzL3R5cGVpbXBsIi8+Ci0gICAgICA8L2NsYXNzcGF0aD4KLSAgICA8L2phdmFjPgotICA8L3RhcmdldD4KLQotCi0gIDwhLS0geG1sc3RvcmUgdGFyZ2V0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0KLSAgPHRhcmdldCBuYW1lPSJ4bWxzdG9yZS5jbGFzc2VzIgotICAgICAgICBkZXBlbmRzPSJkaXJzLCBjb21tb24uY2xhc3NlcywgdHlwZXN0b3JlLmNsYXNzZXMsIHhtbHB1YmxpYy5jbGFzc2VzIj4KLSAgICA8bWtkaXIgZGlyPSJidWlsZC9jbGFzc2VzL3htbHN0b3JlIi8+Ci0gICAgPGphdmFjIHNyY2Rpcj0ic3JjL3htbHN0b3JlIiBkZXN0ZGlyPSJidWlsZC9jbGFzc2VzL3htbHN0b3JlIiBzb3VyY2U9IjEuNCIgZGVidWc9Im9uIj4KLSAgICAgIDxjbGFzc3BhdGggaWQ9InhtbHN0b3JlLmNvbXBpbGUucGF0aCI+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvbGliL2pzcjE3M18wN19hcGkuamFyIi8+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvY2xhc3Nlcy94bWxpbnB1dHN0cmVhbSIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMvdHlwZXN0b3JlIi8+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvY2xhc3Nlcy94bWxwdWJsaWMiLz4KLSAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9jbGFzc2VzL2NvbW1vbiIvPgotICAgICAgPC9jbGFzc3BhdGg+Ci0gICAgPC9qYXZhYz4KLQotICA8L3RhcmdldD4KLQotICA8IS0tIGJvb3RzdHJhcCBzY2hlbWEgdGFyZ2V0IHN1cHBvcnQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0KLQotICA8IS0tIHhzZHNjaGVtYSB0YXJnZXQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0KLSAgPCEtLSBOb3RlIHRoYXQgdGhpcyBpcyBhIHRyaWNreSB0YXJnZXQgYmVjYXVzZSBpdCBib290c3RyYXBzIHhiZWFucyBvbiBpdHNlbGYuIC0tPgotICA8IS0tIFRoZSBiYXNpYyBzdHJhdGVneSBpcyB0byByZWx5IG9uIHRoZSBvbGR4YmVhbnMuamFyIGNoZWNrZWQgaW50byBleHRlcm5hbC9saWIgLS0+Ci0KLSAgPHBhdGggaWQ9ImJvb3RzdHJhcC5ydW4ucGF0aCI+Ci0gICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9wcml2YXRlL2xpYi9vbGR4YmVhbi5qYXIiLz4KLSAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2xpYi9qc3IxNzNfMDdfYXBpLmphciIvPgotICA8L3BhdGg+Ci0KLSAgPHBhdGggaWQ9ImJvb3RzdHJhcC5jb21waWxlLnBhdGgiPgotICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvY2xhc3Nlcy94bWxwdWJsaWMiLz4KLSAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2xpYi9qc3IxNzNfMDdfYXBpLmphciIvPgotICA8L3BhdGg+Ci0KLSAgPHByb3BlcnR5IG5hbWU9ImJvb3RzdHJhcC5jb21waWxlLnBhdGgiIHJlZmlkPSJib290c3RyYXAuY29tcGlsZS5wYXRoIi8+Ci0KLSAgPHBhdGggaWQ9InhzZHNjaGVtYS5jb21waWxlLnBhdGgiPgotICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvY2xhc3Nlcy94bWxzY2hlbWEiLz4KLSAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMveG1scHVibGljIi8+Ci0gIDwvcGF0aD4KLQotICA8cHJvcGVydHkgbmFtZT0ieHNkc2NoZW1hLmNvbXBpbGUucGF0aCIgcmVmaWQ9InhzZHNjaGVtYS5jb21waWxlLnBhdGgiLz4KLQotICA8dGFyZ2V0IG5hbWU9InhzZHNjaGVtYS5jaGVjayI+Ci0gICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0ieHNkc2NoZW1hLm5vdFJlcXVpcmVkIj4KLSAgICAgICAgPHVwdG9kYXRlIHByb3BlcnR5PSJ4c2RzY2hlbWEubm90UmVxdWlyZWQiIHRhcmdldGZpbGU9ImJ1aWxkL2NsYXNzZXMveHNkc2NoZW1hL3NjaGVtYS9zeXN0ZW0vc1hNTFNDSEVNQS9pbmRleC54c2IiPgotICAgICAgICAgIDxzcmNmaWxlcyBkaXI9InNyYy94c2RzY2hlbWEiIGluY2x1ZGVzPSIqKi8qLnhzZCIvPgotICAgICAgICA8L3VwdG9kYXRlPgotICAgIDwvY29uZGl0aW9uPgotICA8L3RhcmdldD4KLQotICA8dGFyZ2V0IG5hbWU9InhzZHNjaGVtYS5jbGFzc2VzIiBkZXBlbmRzPSJ4c2RzY2hlbWEuY2hlY2ssIHhtbHNjaGVtYS5jbGFzc2VzLCB4bWxwdWJsaWMuY2xhc3Nlcywgb2xkeGJlYW4uamFyIiB1bmxlc3M9InhzZHNjaGVtYS5ub3RSZXF1aXJlZCI+Ci0gICAgPGRlbGV0ZSBkaXI9ImJ1aWxkL2NsYXNzZXMveHNkc2NoZW1hIi8+Ci0gICAgPGRlbGV0ZSBkaXI9ImJ1aWxkL3NyYy94c2RzY2hlbWEiLz4KLSAgICA8amF2YSBjbGFzc25hbWU9IiR7Ym9vdHN0cmFwX3NjaGVtYV9jb21waWxlcn0iIGNsYXNzcGF0aHJlZj0iYm9vdHN0cmFwLnJ1bi5wYXRoIiBmb3JrPSJ0cnVlIiBmYWlsb25lcnJvcj0idHJ1ZSI+Ci0gICAgICA8anZtYXJnIHZhbHVlPSItZWEiLz4KLSAgICAgIDxhcmcgbGluZT0iJHtyZXBhY2thZ2VfYXJnfSAtbmFtZSBzWE1MU0NIRU1BIC1jcCAke3hzZHNjaGVtYS5jb21waWxlLnBhdGh9IC1zcmNvbmx5IC1kIGJ1aWxkL2NsYXNzZXMveHNkc2NoZW1hIC1zcmMgYnVpbGQvc3JjL3hzZHNjaGVtYSBzcmMveHNkc2NoZW1hL3NjaGVtYSIvPgotICAgIDwvamF2YT4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSB4bWxzY2hlbWEgdGFyZ2V0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQotICA8IS0tIE5vdGUgdGhhdCB0aGlzIGlzIGEgdHJpY2t5IHRhcmdldCBiZWNhdXNlIGl0IGJvb3RzdHJhcHMgeGJlYW5zIG9uIGl0c2VsZi4gLS0+Ci0gIDwhLS0gVGhlIGJhc2ljIHN0cmF0ZWd5IGlzIHRvIHJlbHkgb24gdGhlIG9sZHhiZWFucy5qYXIgY2hlY2tlZCBpbnRvIGV4dGVybmFsL2xpYiAtLT4KLQotICA8dGFyZ2V0IG5hbWU9InhtbHNjaGVtYS5jaGVjayI+Ci0gICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0ieG1sc2NoZW1hLm5vdFJlcXVpcmVkIj4KLSAgICAgICAgPHVwdG9kYXRlIHByb3BlcnR5PSJ4bWxzY2hlbWEubm90UmVxdWlyZWQiIHRhcmdldGZpbGU9ImJ1aWxkL2NsYXNzZXMveG1sc2NoZW1hL3NjaGVtYS9zeXN0ZW0vc1hNTExBTkcvaW5kZXgueHNiIj4KLSAgICAgICAgICA8c3JjZmlsZXMgZGlyPSJzcmMveG1sc2NoZW1hIiBpbmNsdWRlcz0iKiovKi54c2QiLz4KLSAgICAgICAgPC91cHRvZGF0ZT4KLSAgICA8L2NvbmRpdGlvbj4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJ4bWxzY2hlbWEuY2xhc3NlcyIgZGVwZW5kcz0ieG1sc2NoZW1hLmNoZWNrLCB4bWxwdWJsaWMuY2xhc3Nlcywgb2xkeGJlYW4uamFyLCBqc3IxNzNfMDdfYXBpLmphciIgdW5sZXNzPSJ4bWxzY2hlbWEubm90UmVxdWlyZWQiPgotICAgIDxkZWxldGUgZGlyPSJidWlsZC9jbGFzc2VzL3htbHNjaGVtYSIvPgotICAgIDxkZWxldGUgZGlyPSJidWlsZC9zcmMveG1sc2NoZW1hIi8+Ci0gICAgPGphdmEgY2xhc3NuYW1lPSIke2Jvb3RzdHJhcF9zY2hlbWFfY29tcGlsZXJ9IiBjbGFzc3BhdGhyZWY9ImJvb3RzdHJhcC5ydW4ucGF0aCIgZm9yaz0idHJ1ZSIgZmFpbG9uZXJyb3I9InRydWUiPgotICAgICAgPGp2bWFyZyB2YWx1ZT0iLWVhIi8+Ci0gICAgICA8YXJnIGxpbmU9IiR7cmVwYWNrYWdlX2FyZ30gLW5hbWUgc1hNTExBTkcgLWQgYnVpbGQvY2xhc3Nlcy94bWxzY2hlbWEgLXNyYyBidWlsZC9zcmMveG1sc2NoZW1hIC1zcmNvbmx5IHNyYy94bWxzY2hlbWEvc2NoZW1hIi8+Ci0gICAgPC9qYXZhPgotICA8L3RhcmdldD4KLQotICA8IS0tIHhtbGNvbmZpZyB0YXJnZXQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0KLSAgPHRhcmdldCBuYW1lPSJ4bWxjb25maWcuY2xhc3NlcyIgZGVwZW5kcz0iZGlycywgeG1scHVibGljLmphciwgY29uZmlnc2NoZW1hLmNsYXNzZXMiPgotICAgIDxta2RpciBkaXI9ImJ1aWxkL2NsYXNzZXMveG1sY29uZmlnIi8+Ci0gICAgPGphdmFjIHNyY2Rpcj0ic3JjL3htbGNvbmZpZyIgZGVzdGRpcj0iYnVpbGQvY2xhc3Nlcy94bWxjb25maWciIHNvdXJjZT0iMS40IiBkZWJ1Zz0ib24iPgotICAgICAgPGNsYXNzcGF0aD4KLSAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9saWIveG1scHVibGljLmphciIvPgotICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMvY29uZmlnc2NoZW1hIi8+Ci0gICAgICA8L2NsYXNzcGF0aD4KLSAgICA8L2phdmFjPgotCi0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gY29uZmlnc2NoZW1hIHRhcmdldCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0KLSAgPCEtLSBOb3RlIHRoYXQgdGhpcyBpcyBhIHRyaWNreSB0YXJnZXQgYmVjYXVzZSBpdCBib290c3RyYXBzIHhiZWFucyBvbiBpdHNlbGYuIC0tPgotICA8IS0tIFRoZSBiYXNpYyBzdHJhdGVneSBpcyB0byByZWx5IG9uIHRoZSBvbGR4YmVhbnMuamFyIGNoZWNrZWQgaW50byBleHRlcm5hbC9saWIgLS0+Ci0KLSAgPHByb3BlcnR5IG5hbWU9ImJvb3RzdHJhcC5jb21waWxlLnBhdGgiIHJlZmlkPSJib290c3RyYXAuY29tcGlsZS5wYXRoIi8+Ci0KLSAgPHRhcmdldCBuYW1lPSJjb25maWdzY2hlbWEuY2hlY2siPgotICAgIDx1cHRvZGF0ZSBwcm9wZXJ0eT0iY29uZmlnc2NoZW1hLm5vdFJlcXVpcmVkIiB0YXJnZXRmaWxlPSJidWlsZC9jbGFzc2VzL2NvbmZpZ3NjaGVtYS9zY2hlbWEvc3lzdGVtL3NYTUxDT05GSUcvaW5kZXgueHNiIj4KLSAgICAgIDxzcmNmaWxlcyBkaXI9InNyYy9jb25maWdzY2hlbWEiIGluY2x1ZGVzPSIqKi8qLnhzZCIvPgotICAgIDwvdXB0b2RhdGU+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0iY29uZmlnc2NoZW1hLmNsYXNzZXMiIGRlcGVuZHM9ImNvbmZpZ3NjaGVtYS5jaGVjaywgeG1scHVibGljLmNsYXNzZXMsIG9sZHhiZWFuLmphciIgdW5sZXNzPSJjb25maWdzY2hlbWEubm90UmVxdWlyZWQiPgotICAgIDxkZWxldGUgZGlyPSJidWlsZC9jbGFzc2VzL2NvbmZpZ3NjaGVtYSIvPgotICAgIDxqYXZhIGNsYXNzbmFtZT0iJHtib290c3RyYXBfc2NoZW1hX2NvbXBpbGVyfSIgY2xhc3NwYXRocmVmPSJib290c3RyYXAucnVuLnBhdGgiIGZvcms9InRydWUiIGZhaWxvbmVycm9yPSJ0cnVlIj4KLSAgICAgIDxqdm1hcmcgdmFsdWU9Ii1lYSIvPgotICAgICAgPGFyZyBsaW5lPSIke3JlcGFja2FnZV9hcmd9IC1uYW1lIHNYTUxDT05GSUcgLXNyY29ubHkgLXNyYyBidWlsZC9zcmMvY29uZmlnc2NoZW1hIC1kIGJ1aWxkL2NsYXNzZXMvY29uZmlnc2NoZW1hIHNyYy9jb25maWdzY2hlbWEvc2NoZW1hIi8+Ci0gICAgPC9qYXZhPgotICA8L3RhcmdldD4KLQotICA8IS0tIHRvb2xzY2hlbWEgdGFyZ2V0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQotICA8IS0tIE5vdGUgdGhhdCB0aGlzIGlzIGEgdHJpY2t5IHRhcmdldCBiZWNhdXNlIGl0IGJvb3RzdHJhcHMgeGJlYW5zIG9uIGl0c2VsZi4gLS0+Ci0gIDwhLS0gVGhlIGJhc2ljIHN0cmF0ZWd5IGlzIHRvIHJlbHkgb24gdGhlIG9sZHhiZWFucy5qYXIgY2hlY2tlZCBpbnRvIGV4dGVybmFsL2xpYiAtLT4KLQotICA8cHJvcGVydHkgbmFtZT0iYm9vdHN0cmFwLmNvbXBpbGUucGF0aCIgcmVmaWQ9ImJvb3RzdHJhcC5jb21waWxlLnBhdGgiLz4KLQotICA8dGFyZ2V0IG5hbWU9InRvb2xzY2hlbWEuY2hlY2siPgotICAgIDx1cHRvZGF0ZSBwcm9wZXJ0eT0idG9vbHNjaGVtYS5ub3RSZXF1aXJlZCIgdGFyZ2V0ZmlsZT0iYnVpbGQvY2xhc3Nlcy90b29sc2NoZW1hL3NjaGVtYS9zeXN0ZW0vc1hNTFRPT0xTL2luZGV4LnhzYiI+Ci0gICAgICA8c3JjZmlsZXMgZGlyPSJzcmMvdG9vbHNjaGVtYSIgaW5jbHVkZXM9IioqLyoueHNkIi8+Ci0gICAgPC91cHRvZGF0ZT4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJ0b29sc2NoZW1hLmNsYXNzZXMiIGRlcGVuZHM9InRvb2xzY2hlbWEuY2hlY2ssIHhtbHB1YmxpYy5jbGFzc2VzLCBvbGR4YmVhbi5qYXIiIHVubGVzcz0idG9vbHNjaGVtYS5ub3RSZXF1aXJlZCI+Ci0gICAgPGRlbGV0ZSBkaXI9ImJ1aWxkL2NsYXNzZXMvdG9vbHNjaGVtYSIvPgotICAgIDxta2RpciBkaXI9ImJ1aWxkL3NyYy90b29sc2NoZW1hIi8+Ci0gICAgPGphdmEgY2xhc3NuYW1lPSIke2Jvb3RzdHJhcF9zY2hlbWFfY29tcGlsZXJ9IiBjbGFzc3BhdGhyZWY9ImJvb3RzdHJhcC5ydW4ucGF0aCIgZm9yaz0idHJ1ZSIgZmFpbG9uZXJyb3I9InRydWUiPgotICAgICAgPGp2bWFyZyB2YWx1ZT0iLWVhIi8+Ci0gICAgICA8YXJnIGxpbmU9IiR7cmVwYWNrYWdlX2FyZ30gLW5hbWUgc1hNTFRPT0xTIC1zcmNvbmx5IC1zcmMgYnVpbGQvc3JjL3Rvb2xzY2hlbWEgLWQgYnVpbGQvY2xhc3Nlcy90b29sc2NoZW1hIHNyYy90b29sc2NoZW1hIi8+Ci0gICAgPC9qYXZhPgotICA8L3RhcmdldD4KLQotCi0gICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0gICAgPCEtLSA9PT09PSAgIFJlcGFja2FnaW5nICA9PT09PT0gLS0+Ci0gICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0KLSAgICA8dGFyZ2V0IG5hbWU9ImVkaXRfYnVpbGRfc2NyaXB0Ij4KLSAgICAgICAgPGVjaG8gbWVzc2FnZT0iZWRpdGluZyByZXBhY2thZ2UgYnVpbGQgZmlsZTogJHt0b2tlbn0gLS0+JHtyZXBsYWNlbWVudH0iLz4KLQotICAgICAgICA8amF2YSBjbGFzc25hbWU9InJlcGFja2FnZS5FZGl0QnVpbGRTY3JpcHQiIGZhaWxvbmVycm9yPSJ0cnVlIj4KLSAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7YmFzZWRpcn0vYnVpbGQvcmVwYWNrYWdlL2J1aWxkLnhtbCIvPgotICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHt0b2tlbn0iLz4KLSAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7cmVwbGFjZW1lbnR9Ii8+Ci0gICAgICAgICAgICA8Y2xhc3NwYXRoPgotICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvY2xhc3Nlcy9yZXBhY2thZ2UiLz4KLSAgICAgICAgICAgIDwvY2xhc3NwYXRoPgotICAgICAgICA8L2phdmE+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8cHJvcGVydHkgbmFtZT0icmVwYWNrYWdlX2FyZyIgdmFsdWU9IiIvPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJzY2hlbWFfY29tcGlsZXIiIHZhbHVlPSJvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudG9vbC5TY2hlbWFDb21waWxlciIvPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJib290c3RyYXBfc2NoZW1hX2NvbXBpbGVyIiB2YWx1ZT0ib3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnRvb2wuU2NoZW1hQ29tcGlsZXIiLz4KLQotICAgIDwhLS0KLSAgICAgICAgUGFyYW1zIHRvIHJlcGFja2FnZSBhcmU6Ci0KLSAgICAgICAgICAgIHJlcGFja2FnZV9zcGVjOgotCi0gICAgICAgICAgICAgICAgT2YgdGhlIGZvcm0gZnJvbV9wa2dfMTp0b19wa2dfMTtmcm9tX3BrZ18yOnRvX3BrZ18yIHdoaWNoIHNwZWNpZmllcyB3aGljaCBwYWNrYWdlcwotICAgICAgICAgICAgICAgIGFyZSB0byBiZSBjb252ZXJ0ZWQgd2hpY2ggd2hpY2ggd2hpY2ggb3RoZXIgcGFja2FnZXMuICBSaWdodCBub3csIHRoZXJlIGFyZSB0d28uCi0gICAgICAgICAgICAgICAgb3JnLmFwYWNoZS54bWxiZWFucyBhbmQgYXBhY2hlLnhtbGJlYW5zLmltcGwsIHRoZSBwdWJsaWMgYW5kIGltcGxlbWVudGF0aW9uCi0gICAgICAgICAgICAgICAgcGFja2FnZXMuCi0KLSAgICAgICAgICAgIG5ld19zY2hlbWFfY29tcGlsZXIKLQotICAgICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyB3aGljaCB3aWxsIG5ldyB0aGUgbmV3IHNjaGVtYSBjb21waWxlci4gIFdpbGwgcmVwbGFjZQotICAgICAgICAgICAgICAgICR7c2NoZW1hX2NvbXBpbGVyfSBkdXJpbmcgdGhlIGJvb3RzdHJhcCBwcm9jZXNzLgotICAgIC0tPgotCi0gICAgPHRhcmdldCBuYW1lPSJyZXBhY2thZ2UiIGRlcGVuZHM9InJlcGFja2FnZS5jbGFzc2VzIj4KLQotICAgICAgICA8ZWNobyBtZXNzYWdlPSJSZS1wYWNrYWdpbmcgWE1sQmVhbnMiLz4KLQotICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgIG5hbWU9Im5ld19yZXBhY2thZ2VfYXJnIgotICAgICAgICAgICAgdmFsdWU9Ii1yZXBhY2thZ2UgJHtyZXBhY2thZ2Vfc3BlY30iLz4KLQotICAgICAgICA8amF2YSBjbGFzc25hbWU9InJlcGFja2FnZS5SZXBhY2thZ2UiIGZvcms9InRydWUiIGZhaWxvbmVycm9yPSJ0cnVlIj4KLSAgICAgICAgICAgIDxjbGFzc3BhdGg+Ci0gICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9jbGFzc2VzL3JlcGFja2FnZSIvPgotICAgICAgICAgICAgPC9jbGFzc3BhdGg+Ci0gICAgICAgICAgICA8YXJnIGxpbmU9IiR7bmV3X3JlcGFja2FnZV9hcmd9Ii8+Ci0gICAgICAgIDwvamF2YT4KLQotICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVkaXRfYnVpbGRfc2NyaXB0Ij4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0b2tlbiIgICAgICAgdmFsdWU9InJlcGFja2FnZV9hcmciLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXBsYWNlbWVudCIgdmFsdWU9IiR7bmV3X3JlcGFja2FnZV9hcmd9Ii8+Ci0gICAgICAgIDwvYW50Y2FsbD4KLQotICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVkaXRfYnVpbGRfc2NyaXB0Ij4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0b2tlbiIgICAgICAgdmFsdWU9InNjaGVtYV9jb21waWxlciIvPgotICAgICAgICAgICAgPHBhcmFtIG5hbWU9InJlcGxhY2VtZW50IiB2YWx1ZT0iJHtuZXdfc2NoZW1hX2NvbXBpbGVyfSIvPgotICAgICAgICA8L2FudGNhbGw+Ci0KLSAgICAgICAgPGFudCBkaXI9ImJ1aWxkL3JlcGFja2FnZSIgdGFyZ2V0PSJ4YmVhbiIgaW5oZXJpdEFsbD0iZmFsc2UiLz4KLQotICAgICAgICA8YW50Y2FsbCB0YXJnZXQ9ImVkaXRfYnVpbGRfc2NyaXB0Ij4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ0b2tlbiIgICAgICAgdmFsdWU9ImJvb3RzdHJhcF9zY2hlbWFfY29tcGlsZXIiLz4KLSAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJyZXBsYWNlbWVudCIgdmFsdWU9IiR7bmV3X3NjaGVtYV9jb21waWxlcn0iLz4KLSAgICAgICAgPC9hbnRjYWxsPgotCi0gICAgICAgIDxhbnQgZGlyPSJidWlsZC9yZXBhY2thZ2UiIHRhcmdldD0iYm9vdHN0cmFwIiBpbmhlcml0QWxsPSJmYWxzZSIvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8dGFyZ2V0IG5hbWU9InJlcGFja2FnZS5jbGFzc2VzIj4KLSAgICAgICAgPG1rZGlyIGRpcj0iYnVpbGQvY2xhc3Nlcy9yZXBhY2thZ2UiLz4KLSAgICAgICAgPGphdmFjIHNyY2Rpcj0ic3JjL3JlcGFja2FnZSIgZGVzdGRpcj0iYnVpbGQvY2xhc3Nlcy9yZXBhY2thZ2UiIHNvdXJjZT0iMS40IiBkZWJ1Zz0ib24iLz4KLSAgICA8L3RhcmdldD4KLQotICA8IS0tIHhwYXRoIHRhcmdldCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci0KLSAgPHRhcmdldCBuYW1lPSJ4cGF0aC5jbGFzc2VzIiBkZXBlbmRzPSJkaXJzLCB4bWxwdWJsaWMuamFyLCBqYXhlbi5qYXIiPgotICAgIDxta2RpciBkaXI9ImJ1aWxkL3ByaXZhdGUvY2xhc3Nlcy94cGF0aCIvPgotICAgIDxqYXZhYwotICAgICAgIHNyY2Rpcj0ic3JjL3hwYXRoIgotICAgICAgIGRlc3RkaXI9ImJ1aWxkL3ByaXZhdGUvY2xhc3Nlcy94cGF0aCIKLSAgICAgICBjbGFzc3BhdGhyZWY9InhwYXRoLmNvbXBpbGUucGF0aCIKLSAgICAgICBzb3VyY2U9IjEuNCIKLSAgICAgICBkZWJ1Zz0ib24iPgotICAgICAgPGNsYXNzcGF0aCBpZD0ieHBhdGguY29tcGlsZS5wYXRoIj4KLSAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2xpYi94bWxwdWJsaWMuamFyIi8+Ci0gICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9saWIvamF4ZW4uamFyIi8+Ci0gICAgICA8L2NsYXNzcGF0aD4KLSAgICA8L2phdmFjPgotICA8L3RhcmdldD4KLQotICA8dGFyZ2V0IG5hbWU9InhiZWFuX3hwYXRoLmphciIgZGVwZW5kcz0ieHBhdGguY2xhc3NlcyI+Ci0gICAgPGphciBqYXJmaWxlPSJidWlsZC9wcml2YXRlL2xpYi94YmVhbl94cGF0aC5qYXIiIGJhc2VkaXI9ImJ1aWxkL3ByaXZhdGUvY2xhc3Nlcy94cGF0aCIvPgotICA8L3RhcmdldD4KLQotICA8IS0tIHRlc3QgeHBhdGggdGFyZ2V0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLQotICA8dGFyZ2V0IG5hbWU9InRlc3RfeHBhdGguY2xhc3NlcyIgZGVwZW5kcz0iZGlycywgeG1scHVibGljLmphciwganNyMTczXzA3X2FwaS5qYXIsIGpheGVuLmphciwgeGJlYW5feHBhdGguamFyIj4KLSAgICA8bWtkaXIgZGlyPSJidWlsZC9wcml2YXRlL2NsYXNzZXMvdGVzdHhwYXRoIi8+Ci0gICAgPGphdmFjCi0gICAgICAgc3JjZGlyPSJ0ZXN0L3NyYy94cGF0aCIKLSAgICAgICBkZXN0ZGlyPSJidWlsZC9wcml2YXRlL2NsYXNzZXMvdGVzdHhwYXRoIgotICAgICAgIGNsYXNzcGF0aHJlZj0idGVzdHhwYXRoLmNvbXBpbGUucGF0aCIKLSAgICAgICBzb3VyY2U9IjEuNCIKLSAgICAgICBkZWJ1Zz0ib24iPgotICAgICAgPGNsYXNzcGF0aCBpZD0idGVzdHhwYXRoLmNvbXBpbGUucGF0aCI+Ci0gICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9saWIveG1scHVibGljLmphciIvPgotICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvbGliL2pzcjE3M18wN19hcGkuamFyIi8+Ci0gICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9saWIvamF4ZW4uamFyIi8+Ci0gICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9wcml2YXRlL2xpYi94YmVhbl94cGF0aC5qYXIiLz4KLSAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMveG1saW5wdXRzdHJlYW0iLz4KLSAgICAgIDwvY2xhc3NwYXRoPgotICAgIDwvamF2YWM+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0icnVuX3Rlc3RfeHBhdGgiIGRlcGVuZHM9InRlc3RfeHBhdGguY2xhc3NlcywgeGJlYW4iPgotICAgIDxqYXZhIGNsYXNzbmFtZT0ib3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnhwYXRoLmpheGVuLlhCZWFuc0RlbW8iIGZvcms9InRydWUiIGZhaWxvbmVycm9yPSJ0cnVlIj4KLSAgICAgIDxjbGFzc3BhdGg+Ci0gICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9saWIveGJlYW4uamFyIi8+Ci0gICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9saWIvanNyMTczXzA3X2FwaS5qYXIiLz4KLSAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2xpYi9qYXhlbi5qYXIiLz4KLSAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL3ByaXZhdGUvbGliL3hiZWFuX3hwYXRoLmphciIvPgotICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvcHJpdmF0ZS9jbGFzc2VzL3Rlc3R4cGF0aCIvPgotICAgICAgPC9jbGFzc3BhdGg+Ci0gICAgICA8anZtYXJnIHZhbHVlPSItZWEiLz4KLSAgICAgIDxhcmcgbGluZT0ndGVzdC9jYXNlcy94cGF0aC9tdWNoX2Fkby54bWwgIlBMQVkvQUNUL1NDRU5FL1NQRUVDSC9TUEVBS0VSIicvPgotICAgIDwvamF2YT4KLSAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIHRlc3QgbWFyc2hhbCB0YXJnZXQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotICAgIDx0YXJnZXQgbmFtZT0idGVzdF9tYXJzaGFsLmNsYXNzZXMiIGRlcGVuZHM9Im1hcnNoYWwuY2xhc3NlcyI+Ci0gICAgICAgIDxta2RpciBkaXI9ImJ1aWxkL3ByaXZhdGUvY2xhc3Nlcy9tYXJzaGFsIi8+Ci0gICAgICAgIDxqYXZhYwotICAgICAgICAgICAgc3JjZGlyPSJ0ZXN0L2Nhc2VzL21hcnNoYWwiCi0gICAgICAgICAgICBkZXN0ZGlyPSJidWlsZC9wcml2YXRlL2NsYXNzZXMvbWFyc2hhbCIKLSAgICAgICAgICAgIGNsYXNzcGF0aHJlZj0idGVzdG1hcnNoYWwuY29tcGlsZS5wYXRoIgotICAgICAgICAgICAgc291cmNlPSIxLjQiCi0gICAgICAgICAgICBkZWJ1Zz0ib24iPgotICAgICAgICAgICAgPGNsYXNzcGF0aCBpZD0idGVzdG1hcnNoYWwuY29tcGlsZS5wYXRoIj4KLSAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMvYmluZGluZyIvPgotICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvY2xhc3Nlcy9tYXJzaGFsIi8+Ci0gICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9jbGFzc2VzL2NvbW1vbiIvPgotICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iYnVpbGQvY2xhc3Nlcy9jb25maWdzY2hlbWEiLz4KLSAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMvdHlwZWltcGwiLz4KLSAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMveG1saW5wdXRzdHJlYW0iLz4KLSAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2NsYXNzZXMveG1scHVibGljIi8+Ci0gICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJidWlsZC9saWIvanNyMTczXzA3X2FwaS5qYXIiLz4KLSAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249ImJ1aWxkL2xpYi94bWxwdWJsaWMuamFyIi8+Ci0gICAgICAgICAgICA8L2NsYXNzcGF0aD4KLSAgICAgICAgPC9qYXZhYz4KLSAgICA8L3RhcmdldD4KLQotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdjIvZG9jcy9ndWlkZS9jb25HZXR0aW5nU3RhcnRlZHdpdGhYTUxCZWFucy5odG1sIGIvdjIvZG9jcy9ndWlkZS9jb25HZXR0aW5nU3RhcnRlZHdpdGhYTUxCZWFucy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGM5OGZkLi4wMDAwMDAwCi0tLSBhL3YyL2RvY3MvZ3VpZGUvY29uR2V0dGluZ1N0YXJ0ZWR3aXRoWE1MQmVhbnMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDUxOSArMCwwIEBACi08IWRvY3R5cGUgSFRNTCBwdWJsaWMgIi0vL1czQy8vRFREIEhUTUwgNC4wIEZyYW1lc2V0Ly9FTiI+Ci0KLTxodG1sPgotPGhlYWQ+Ci08IS0tIEluc3RhbmNlQmVnaW5FZGl0YWJsZSBuYW1lPSJkb2N0aXRsZSIgLS0+Ci08dGl0bGU+R2V0dGluZyBTdGFydGVkIHdpdGggWE1MQmVhbnM8L3RpdGxlPgotPCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPiAKLTwhLS0oTWV0YSk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+Ci0KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD0kQ0hBUlNFVDsiPgotCi0KLTwhLS0gSW5zdGFuY2VCZWdpbkVkaXRhYmxlIG5hbWU9Im1ldGF0YWdzIiAtLT4KLQotPG1ldGEgbmFtZT0iYXV0aG9yIiBjb250ZW50PSJ5b3VyIG5hbWUiPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkEgZGVzY3JpcHRpb24gb2YgdGhlIHRvcGljIGNvbnRlbnRzLiI+Ci08bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0ia2V5d29yZHMgdG8gaGVscCBpbiBzZWFyY2hlcyI+Ci08bWV0YSBuYW1lPSJkYXRlIGxhc3QgbW9kaWZpZWQiIGNvbnRlbnQ9IjEwLzI1LzAyIj4KLTwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4KLQotPCEtLShMaW5rcyk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLTwhLS0gSW5zdGFuY2VCZWdpbkVkaXRhYmxlIG5hbWU9ImhlYWQiIC0tPiAKLTxsaW5rIGhyZWY9Ii4uL3htbGJlYW5zLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+Ci08IS0tIEluc3RhbmNlRW5kRWRpdGFibGUgLS0+Ci08bGluayBocmVmPSIuLi94bWxiZWFucy5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgotPGEgaHJlZj0iLi4vLi4vLi4vY29yZS9pbmRleC5odG1sIiBpZD0iaW5kZXgiPjwvYT4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHNyYz0iLi4vLi4vLi4vY29yZS90b3BpY0luZm8uanMiPjwvc2NyaXB0PgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgc3JjPSIuLi8uLi8uLi9jb3JlL0Nvb2tpZUNsYXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHNyYz0iLi4vLi4vLi4vY29yZS9kaXNwbGF5Q29udGVudC5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci0KLTwhLS0oQm9keSk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+Ci08Ym9keT4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgotCi08L3NjcmlwdD4KLTwhLS0gSW5zdGFuY2VCZWdpbkVkaXRhYmxlIG5hbWU9ImJvZHkiIC0tPiAKLTxoMT4gR2V0dGluZyBTdGFydGVkIHdpdGggWE1MQmVhbnM8L2gxPgotPGRpdiBpZD0idG9waWN0ZXh0Ij4gCi0gIDxwPlhNTEJlYW5zIHByb3ZpZGVzIGludHVpdGl2ZSB3YXlzIHRvIGhhbmRsZSBYTUwgdGhhdCBtYWtlIGl0IGVhc2llciBmb3IgeW91IAotICAgIHRvIGFjY2VzcyBhbmQgbWFuaXB1bGF0ZSBYTUwgZGF0YSBhbmQgZG9jdW1lbnRzIGluIEphdmEuIDwvcD4KLSAgPHA+Q2hhcmFjdGVyaXN0aWNzIG9mIFhNTEJlYW5zIGFwcHJvYWNoIHRvIFhNTDo8L3A+Ci08L2Rpdj4KLTx1bD4KLSAgPGxpPiAKLSAgICA8ZGl2Pkl0IHByb3ZpZGVzIGEgZmFtaWxpYXIgSmF2YSBvYmplY3QtYmFzZWQgdmlldyBvZiBYTUwgZGF0YSB3aXRob3V0IGxvc2luZyAKLSAgICAgIGFjY2VzcyB0byB0aGUgb3JpZ2luYWwsIG5hdGl2ZSBYTUwgc3RydWN0dXJlLjwvZGl2PgotICA8L2xpPgotICA8bGk+IAotICAgIDxkaXY+VGhlIFhNTCdzIGludGVncml0eSBhcyBhIGRvY3VtZW50IGlzIG5vdCBsb3N0IHdpdGggWE1MQmVhbnMuIFhNTC1vcmllbnRlZCAKLSAgICAgIEFQSXMgY29tbW9ubHkgdGFrZSB0aGUgWE1MIGFwYXJ0IGluIG9yZGVyIHRvIGJpbmQgdG8gaXRzIHBhcnRzLiBXaXRoIFhNTEJlYW5zLCAKLSAgICAgIHRoZSBlbnRpcmUgWE1MIGluc3RhbmNlIGRvY3VtZW50IGlzIGhhbmRsZWQgYXMgYSB3aG9sZS4gVGhlIFhNTCBkYXRhIGlzIAotICAgICAgc3RvcmVkIGluIG1lbW9yeSBhcyBYTUwuIFRoaXMgbWVhbnMgdGhhdCB0aGUgZG9jdW1lbnQgb3JkZXIgaXMgcHJlc2VydmVkIAotICAgICAgYXMgd2VsbCBhcyB0aGUgb3JpZ2luYWwgZWxlbWVudCBjb250ZW50IHdpdGggd2hpdGVzcGFjZS48L2Rpdj4KLSAgPC9saT4KLSAgPGxpPiAKLSAgICA8ZGl2PldpdGggdHlwZXMgZ2VuZXJhdGVkIGZyb20gc2NoZW1hLCBhY2Nlc3MgdG8gWE1MIGluc3RhbmNlcyBpcyB0aHJvdWdoIAotICAgICAgSmF2YUJlYW4tbGlrZSBhY2Nlc3NvcnMsIHdpdGggZ2V0IGFuZCBzZXQgbWV0aG9kcy48L2Rpdj4KLSAgPC9saT4KLSAgPGxpPiAKLSAgICA8ZGl2Pkl0IGlzIGRlc2lnbmVkIHdpdGggWE1MIHNjaGVtYSBpbiBtaW5kIGZyb20gdGhlIGJlZ2lubmluZyAmIzgyMTI7IFhNTEJlYW5zIAotICAgICAgc3VwcG9ydHMgYWxsIFhNTCBzY2hlbWEgZGVmaW5pdGlvbnMuPC9kaXY+Ci0gIDwvbGk+Ci0gIDxsaT5BY2Nlc3MgdG8gWE1MIGlzIGZhc3QuPC9saT4KLTwvdWw+Ci08ZGl2PiAKLSAgPHA+VGhlIHN0YXJ0aW5nIHBvaW50IGZvciBYTUxCZWFucyBpcyBYTUwgc2NoZW1hLiBBIHNjaGVtYSAoY29udGFpbmVkIGluIGFuIAotICAgIFhTRCBmaWxlKSBpcyBhbiBYTUwgZG9jdW1lbnQgdGhhdCBkZWZpbmVzIGEgc2V0IG9mIHJ1bGVzIHRvIHdoaWNoIG90aGVyIFhNTCAKLSAgICBkb2N1bWVudHMgbXVzdCBjb25mb3JtLiBUaGUgWE1MIFNjaGVtYSBzcGVjaWZpY2F0aW9uIHByb3ZpZGVzIGEgcmljaCBkYXRhIAotICAgIG1vZGVsIHRoYXQgYWxsb3dzIHlvdSB0byBleHByZXNzIHNvcGhpc3RpY2F0ZWQgc3RydWN0dXJlIGFuZCBjb25zdHJhaW50cyBvbiAKLSAgICB5b3VyIGRhdGEuIEZvciBleGFtcGxlLCBhbiBYTUwgc2NoZW1hIGNhbiBlbmZvcmNlIGNvbnRyb2wgb3ZlciBob3cgZGF0YSBpcyAKLSAgICBvcmRlcmVkIGluIGEgZG9jdW1lbnQsIG9yIGNvbnN0cmFpbnRzIG9uIHBhcnRpY3VsYXIgdmFsdWVzIChmb3IgZXhhbXBsZSwgYSAKLSAgICBiaXJ0aCBkYXRlIHRoYXQgbXVzdCBiZSBsYXRlciB0aGFuIDE5MDApLiBVbmZvcnR1bmF0ZWx5LCB0aGUgYWJpbGl0eSB0byBlbmZvcmNlIAotICAgIHJ1bGVzIGxpa2UgdGhpcyBpcyB0eXBpY2FsbHkgbm90IGF2YWlsYWJsZSBpbiBKYXZhIHdpdGhvdXQgd3JpdGluZyBjdXN0b20gCi0gICAgY29kZS4gWE1MQmVhbnMgaG9ub3JzIHNjaGVtYSBjb25zdHJhaW50cy48L3A+Ci0gIDxwIGNsYXNzPSJub3RlcGFyYSI+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBXaGVyZSBhbiBYTUwgc2NoZW1hIGRlZmluZXMgcnVsZXMgCi0gICAgZm9yIGFuIFhNTCBkb2N1bWVudCwgYW4gWE1MIDxlbT5pbnN0YW5jZTwvZW0+IGlzIGFuIFhNTCBkb2N1bWVudCB0aGF0IGNvbmZvcm1zIAotICAgIHRvIHRoZSBzY2hlbWEuPC9wPgotICA8cD5Zb3UgY29tcGlsZSBhIHNjaGVtYSAoWFNEKSBmaWxlIHRvIGdlbmVyYXRlIGEgc2V0IG9mIEphdmEgaW50ZXJmYWNlcyB0aGF0IAotICAgIG1pcnJvciB0aGUgc2NoZW1hLiBXaXRoIHRoZXNlIHR5cGVzLCB5b3UgcHJvY2VzcyBYTUwgaW5zdGFuY2UgZG9jdW1lbnRzIHRoYXQgCi0gICAgY29uZm9ybSB0byB0aGUgc2NoZW1hLiBZb3UgYmluZCBhbiBYTUwgaW5zdGFuY2UgZG9jdW1lbnQgdG8gdGhlc2UgdHlwZXM7IGNoYW5nZXMgCi0gICAgbWFkZSB0aHJvdWdoIHRoZSBKYXZhIGludGVyZmFjZSBjaGFuZ2UgdGhlIHVuZGVybHlpbmcgWE1MIHJlcHJlc2VudGF0aW9uLjwvcD4KLSAgPHA+UHJldmlvdXMgb3B0aW9ucyBmb3IgaGFuZGxpbmcgWE1MIGluY2x1ZGUgdXNpbmcgWE1MIHByb2dyYW1taW5nIGludGVyZmFjZXMgCi0gICAgKHN1Y2ggYXMgRE9NIG9yIFNBWCkgb3IgYW4gWE1MIG1hcnNoYWxsaW5nL2JpbmRpbmcgdG9vbCAoc3VjaCBhcyBKQVhCKS4gQmVjYXVzZSAKLSAgICBpdCBsYWNrcyBzdHJvbmcgc2NoZW1hLW9yaWVudGVkIHR5cGluZywgbmF2aWdhdGlvbiBpbiBhIERPTS1vcmllbnRlZCBtb2RlbCAKLSAgICBpcyBtb3JlIHRlZGlvdXMgYW5kIHJlcXVpcmVzIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbXBsZXRlIG9iamVjdCBtb2RlbC4gCi0gICAgSkFYQiBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgWE1MIHNjaGVtYSBzcGVjaWZpY2F0aW9uLCBidXQgaGFuZGxlcyBvbmx5IGEgCi0gICAgc3Vic2V0IG9mIGl0OyBYTUxCZWFucyBzdXBwb3J0cyBhbGwgb2YgaXQuIEFsc28sIGJ5IHN0b3JpbmcgdGhlIGRhdGEgaW4gbWVtb3J5IAotICAgIGFzIFhNTCwgWE1MQmVhbnMgaXMgYWJsZSB0byByZWR1Y2UgdGhlIG92ZXJoZWFkIG9mIG1hcnNoYWxsaW5nIGFuZCBkZW1hcnNoYWxsaW5nLjwvcD4KLSAgPGgxPkFjY2Vzc2luZyBYTUwgVXNpbmcgSXRzIFNjaGVtYTwvaDE+Ci0gIDxwPlRvIGdldCBhIGdsaW1wc2Ugb2YgdGhlIGtpbmRzIG9mIHRoaW5ncyB5b3UgY2FuIGRvIHdpdGggWE1MQmVhbnMsIHRha2UgYSAKLSAgICBsb29rIGF0IGFuIGV4YW1wbGUgdXNpbmcgWE1MIGZvciBhIHB1cmNoYXNlIG9yZGVyLiBUaGUgcHVyY2hhc2Ugb3JkZXIgWE1MIAotICAgIGNvbnRhaW5zIGRhdGEgZXhjaGFuZ2VkIGJ5IHR3byBwYXJ0aWVzLCBzdWNoIGFzIHR3byBjb21wYW5pZXMuIEJvdGggcGFydGllcyAKLSAgICBuZWVkIHRvIGJlIGFibGUgdG8gcmVseSBvbiBhIGNvbnNpc3RlbnQgbWVzc2FnZSBzaGFwZSwgYW5kIGEgc2NoZW1hIHNwZWNpZmllcyAKLSAgICB0aGUgY29tbW9uIGdyb3VuZC4gPC9wPgotICA8cD5IZXJlJ3Mgd2hhdCBhIHB1cmNoYXNlIG9yZGVyIFhNTCBpbnN0YW5jZSBtaWdodCBsb29rIGxpa2UuPC9wPgotICA8cHJlPgotJmx0O3BvOnB1cmNoYXNlLW9yZGVyIHhtbG5zOnBvPSJodHRwOi8vb3BlbnVyaS5vcmcvZWFzeXBvIiZndDsKLSAgICAmbHQ7cG86Y3VzdG9tZXImZ3Q7Ci0gICAgICAgICZsdDtwbzpuYW1lJmd0O0dsYWR5cyBLcmF2aXR6Jmx0Oy9wbzpuYW1lJmd0OwotICAgICAgICAmbHQ7cG86YWRkcmVzcyZndDtBbnl0b3duLCBQQSZsdDsvcG86YWRkcmVzcyZndDsKLSAgICAmbHQ7L3BvOmN1c3RvbWVyJmd0OwotICAgICZsdDtwbzpkYXRlJmd0OzIwMDMtMDEtMDdUMTQ6MTY6MDAtMDU6MDAmbHQ7L3BvOmRhdGUmZ3Q7Ci0gICAgJmx0O3BvOmxpbmUtaXRlbSZndDsKLSAgICAgICAgJmx0O3BvOmRlc2NyaXB0aW9uJmd0O0J1cm5oYW0ncyBDZWxlc3RpYWwgSGFuZGJvb2ssIFZvbCAxJmx0Oy9wbzpkZXNjcmlwdGlvbiZndDsKLSAgICAgICAgJmx0O3BvOnBlci11bml0LW91bmNlcyZndDs1Jmx0Oy9wbzpwZXItdW5pdC1vdW5jZXMmZ3Q7Ci0gICAgICAgICZsdDtwbzpwcmljZSZndDsyMS43OSZsdDsvcG86cHJpY2UmZ3Q7Ci0gICAgICAgICZsdDtwbzpxdWFudGl0eSZndDsyJmx0Oy9wbzpxdWFudGl0eSZndDsKLSAgICAmbHQ7L3BvOmxpbmUtaXRlbSZndDsKLSAgICAmbHQ7cG86bGluZS1pdGVtJmd0OwotICAgICAgICAmbHQ7cG86ZGVzY3JpcHRpb24mZ3Q7QnVybmhhbSdzIENlbGVzdGlhbCBIYW5kYm9vaywgVm9sIDImbHQ7L3BvOmRlc2NyaXB0aW9uJmd0OwotICAgICAgICAmbHQ7cG86cGVyLXVuaXQtb3VuY2VzJmd0OzUmbHQ7L3BvOnBlci11bml0LW91bmNlcyZndDsKLSAgICAgICAgJmx0O3BvOnByaWNlJmd0OzE5Ljg5Jmx0Oy9wbzpwcmljZSZndDsKLSAgICAgICAgJmx0O3BvOnF1YW50aXR5Jmd0OzImbHQ7L3BvOnF1YW50aXR5Jmd0OwotICAgICZsdDsvcG86bGluZS1pdGVtJmd0OwotJmx0O3BvOnNoaXBwZXImZ3Q7Ci0gICAgICAgICZsdDtwbzpuYW1lJmd0O1ppcFNoaXAmbHQ7L3BvOm5hbWUmZ3Q7Ci0gICAgICAgICZsdDtwbzpwZXItb3VuY2UtcmF0ZSZndDswLjc0Jmx0Oy9wbzpwZXItb3VuY2UtcmF0ZSZndDsKLSAgICAmbHQ7L3BvOnNoaXBwZXImZ3Q7Ci0mbHQ7L3BvOnB1cmNoYXNlLW9yZGVyJmd0OzwvcHJlPgotICA8cD5UaGlzIFhNTCBpbmNsdWRlcyBhIHJvb3QgZWxlbWVudCwgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnB1cmNoYXNlLW9yZGVyPC9zcGFuPiwgCi0gICAgdGhhdCBoYXMgdGhyZWUga2luZHMgb2YgY2hpbGQgZWxlbWVudHM6IDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5jdXN0b21lcjwvc3Bhbj4sIAotICAgIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5kYXRlPC9zcGFuPiwgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmxpbmUtaXRlbTwvc3Bhbj4sIAotICAgIGFuZCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+c2hpcHBlcjwvc3Bhbj4uIEFuIGludHVpdGl2ZSwgb2JqZWN0LWJhc2VkIHZpZXcgCi0gICAgb2YgdGhpcyBYTUwgd291bGQgcHJvdmlkZSBhbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+cHVyY2hhc2Utb3JkZXI8L3NwYW4+IAotICAgIGVsZW1lbnQsIGFuZCBpdCB3b3VsZCBoYXZlIG1ldGhvZHMgZm9yIGdldHRpbmcgdGhlIGRhdGUgYW5kIGZvciBnZXR0aW5nIHN1Ym9yZGluYXRlIAotICAgIG9iamVjdHMgZm9yIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5jdXN0b21lcjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5saW5lLWl0ZW08L3NwYW4+LCAKLSAgICBhbmQgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnNoaXBwZXI8L3NwYW4+IGVsZW1lbnRzLiBFYWNoIG9mIHRoZSBsYXN0IHRocmVlIAotICAgIHdvdWxkIGhhdmUgaXRzIG93biBtZXRob2RzIGZvciBnZXR0aW5nIHRoZSBkYXRhIGluc2lkZSB0aGVtIGFzIHdlbGwuPC9wPgotICA8aDI+TG9va2luZyBhdCB0aGUgU2NoZW1hPC9oMj4KLSAgPHA+VGhlIGZvbGxvd2luZyBYTUwgaXMgdGhlIHRoZSBzY2hlbWEgZm9yIHRoZSBwcmVjZWRpbmcgcHVyY2hhc2Ugb3JkZXIgWE1MLiAKLSAgICBJdCBkZWZpbmVzIHRoZSBYTUwncyAmcXVvdDtzaGFwZSZxdW90OyAmIzgyMTI7IHdoYXQgaXRzIGVsZW1lbnRzIGFyZSwgd2hhdCAKLSAgICBvcmRlciB0aGV5IGFwcGVhciBpbiwgd2hpY2ggYXJlIGNoaWxkcmVuIG9mIHdoaWNoLCBhbmQgc28gb24uPC9wPgotPC9kaXY+Ci08ZGl2PiAKLSAgPHByZT4KLSZsdDt4czpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vb3BlbnVyaS5vcmcvZWFzeXBvIgotICAgIHhtbG5zOnBvPSJodHRwOi8vb3BlbnVyaS5vcmcvZWFzeXBvIgotICAgIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCImZ3Q7Ci0JCi0gICAgJmx0O3hzOmVsZW1lbnQgbmFtZT0icHVyY2hhc2Utb3JkZXIiJmd0OwotICAgICAgICAmbHQ7eHM6Y29tcGxleFR5cGUmZ3Q7Ci0gICAgICAgICAgICAmbHQ7eHM6c2VxdWVuY2UmZ3Q7Ci0gICAgICAgICAgICAgICAgJmx0O3hzOmVsZW1lbnQgbmFtZT0iY3VzdG9tZXIiIHR5cGU9InBvOmN1c3RvbWVyIi8mZ3Q7Ci0gICAgICAgICAgICAgICAgJmx0O3hzOmVsZW1lbnQgbmFtZT0iZGF0ZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiLyZndDsKLSAgICAgICAgICAgICAgICAmbHQ7eHM6ZWxlbWVudCBuYW1lPSJsaW5lLWl0ZW0iIHR5cGU9InBvOmxpbmUtaXRlbSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvJmd0OwotICAgICAgICAgICAgICAgICZsdDt4czplbGVtZW50IG5hbWU9InNoaXBwZXIiIHR5cGU9InBvOnNoaXBwZXIiIG1pbk9jY3Vycz0iMCIvJmd0OwotICAgICAgICAgICAgJmx0Oy94czpzZXF1ZW5jZSZndDsKLSAgICAgICAgJmx0Oy94czpjb21wbGV4VHlwZSZndDsKLSAgICAmbHQ7L3hzOmVsZW1lbnQmZ3Q7Ci0gICAgJmx0O3hzOmNvbXBsZXhUeXBlIG5hbWU9ImN1c3RvbWVyIiZndDsKLSAgICAgICAgJmx0O3hzOnNlcXVlbmNlJmd0OwotICAgICAgICAgICAgJmx0O3hzOmVsZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIi8mZ3Q7Ci0gICAgICAgICAgICAmbHQ7eHM6ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiB0eXBlPSJ4czpzdHJpbmciLyZndDsKLSAgICAgICAgJmx0Oy94czpzZXF1ZW5jZSZndDsKLSAgICAmbHQ7L3hzOmNvbXBsZXhUeXBlJmd0OwotICAgICZsdDt4czpjb21wbGV4VHlwZSBuYW1lPSJsaW5lLWl0ZW0iJmd0OwotICAgICAgICAmbHQ7eHM6c2VxdWVuY2UmZ3Q7Ci0gICAgICAgICAgICAmbHQ7eHM6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIgdHlwZT0ieHM6c3RyaW5nIi8mZ3Q7Ci0gICAgICAgICAgICAmbHQ7eHM6ZWxlbWVudCBuYW1lPSJwZXItdW5pdC1vdW5jZXMiIHR5cGU9InhzOmRlY2ltYWwiLyZndDsKLSAgICAgICAgICAgICZsdDt4czplbGVtZW50IG5hbWU9InByaWNlIiB0eXBlPSJ4czpkb3VibGUiLyZndDsKLSAgICAgICAgICAgICZsdDt4czplbGVtZW50IG5hbWU9InF1YW50aXR5IiB0eXBlPSJ4czppbnQiLyZndDsKLSAgICAgICAgJmx0Oy94czpzZXF1ZW5jZSZndDsKLSAgICAmbHQ7L3hzOmNvbXBsZXhUeXBlJmd0OwotICAgICZsdDt4czpjb21wbGV4VHlwZSBuYW1lPSJzaGlwcGVyIiZndDsKLSAgICAgICAgJmx0O3hzOnNlcXVlbmNlJmd0OwotICAgICAgICAgICAgJmx0O3hzOmVsZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIi8mZ3Q7Ci0gICAgICAgICAgICAmbHQ7eHM6ZWxlbWVudCBuYW1lPSJwZXItb3VuY2UtcmF0ZSIgdHlwZT0ieHM6ZGVjaW1hbCIvJmd0OwotICAgICAgICAmbHQ7L3hzOnNlcXVlbmNlJmd0OwotICAgICZsdDsveHM6Y29tcGxleFR5cGUmZ3Q7Ci0mbHQ7L3hzOnNjaGVtYSZndDs8L3ByZT4KLSAgPGRpdj4gCi0gICAgPHA+VGhpcyBzY2hlbWEgZGVzY3JpYmVzIHRoZSBwdXJjaGFzZSBvcmRlciBYTUwgaW5zdGFuY2UgYnkgZGVmaW5pbmcgdGhlIGZvbGxvd2luZzo8L3A+Ci0gIDwvZGl2PgotICA8dWw+Ci0gICAgPGxpPiAKLSAgICAgIDxkaXY+RGVmaW5pdGlvbnMgZm9yIHRocmVlIGNvbXBsZXggdHlwZXMgJiM4MjEyOyBjdXN0b21lciwgbGluZS1pdGVtLCBhbmQgCi0gICAgICAgIHNoaXBwZXIuIFRoZXNlIGFyZSB0aGUgdHlwZXMgdXNlZCBmb3IgdGhlIGNoaWxkcmVuIG9mIHRoZSBwdXJjaGFzZS1vcmRlciAKLSAgICAgICAgZWxlbWVudC4gSW4gc2NoZW1hLCBhIGNvbXBsZXggdHlwZSBpcyBvbmUgdGhhdCBkZWZpbmVzIGFuIGVsZW1lbnQgdGhhdCAKLSAgICAgICAgbWF5IGhhdmUgY2hpbGQgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMuIFRoZSBzZXF1ZW5jZSBlbGVtZW50IG5lc3RlZCBpbiAKLSAgICAgICAgdGhlIGNvbXBsZXggdHlwZSBsaXN0cyBpdHMgY2hpbGQgZWxlbWVudHMuPC9kaXY+Ci0gICAgICA8cD5UaGVzZSBhcmUgYWxzbyA8ZW0+Z2xvYmFsPC9lbT4gdHlwZXMuIFRoZXkgYXJlIGdsb2JhbCBiZWNhdXNlIHRoZXkgYXJlIAotICAgICAgICBhdCB0aGUgdG9wIGxldmVsIG9mIHRoZSBzY2hlbWEgKGluIG90aGVyIHdvcmRzLCBqdXN0IGJlbmVhdGggdGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5zY2hlbWE8L3NwYW4+IAotICAgICAgICByb290IGVsZW1lbnQpLiBUaGlzIG1lYW5zIHRoYXQgdGhleSBtYXkgYmUgcmVmZXJlbmNlZCBmcm9tIGFueXdoZXJlIGVsc2UgCi0gICAgICAgIGluIHRoZSBzY2hlbWEuPC9wPgotICAgIDwvbGk+Ci0gIDwvdWw+Ci08L2Rpdj4KLTxkaXY+Ci0gIDx1bD4KLSAgICA8bGk+VXNlIG9mIHNpbXBsZSB0eXBlcyB3aXRoaW4gdGhlIGNvbXBsZXggdHlwZXMuIFRoZSBuYW1lLCBhZGRyZXNzLCBhbmQgZGVzY3JpcHRpb24gCi0gICAgICBlbGVtZW50cyAoYW1vbmcgb3RoZXJzKSBhcmUgdHlwZWQgYXMgc2ltcGxlIHR5cGVzLiBBcyBpdCBoYXBwZW5zLCB0aGVzZSAKLSAgICAgIGFyZSBhbHNvIDxlbT5idWlsdC1pbjwvZW0+IHR5cGVzLiBBIGJ1aWx0LWluIHR5cGUgKGhlcmUsIG9uZSB3aXRoIHRoZSAmcXVvdDt4cyZxdW90OyAKLSAgICAgIHByZWZpeCkgaXMgcGFydCBvZiB0aGUgc2NoZW1hIHNwZWNpZmljYXRpb24uIChUaGUgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIAotICAgICAgNDYgYnVpbHQtaW4gdHlwZXMuKTwvbGk+Ci0gICAgPGxpPkEgZ2xvYmFsIGVsZW1lbnQgY2FsbGVkIHB1cmNoYXNlLW9yZGVyLiBUaGlzIGVsZW1lbnQgZGVmaW5pdGlvbiBpbmNsdWRlcyAKLSAgICAgIGEgbmVzdGVkIGNvbXBsZXggdHlwZSBkZWZpbml0aW9uIHRoYXQgc3BlY2lmaWVzIHRoZSBjaGlsZCBlbGVtZW50cyBmb3IgYSAKLSAgICAgIHB1cmNoYXNlLW9yZGVyIGVsZW1lbnQuIE5vdGljZSB0aGF0IHRoZSBjb21wbGV4IHR5cGUgaW5jbHVkZXMgcmVmZXJlbmNlcyAKLSAgICAgIHRvIHRoZSBvdGhlciBjb21wbGV4IHR5cGVzIGRlZmluZWQgaW4gdGhpcyBzY2hlbWEuPC9saT4KLSAgPC91bD4KLSAgPGRpdj48L2Rpdj4KLSAgPHA+SW4gb3RoZXIgd29yZHMsIHRoZSBzY2hlbWEgZGVmaW5lcyB0eXBlcyBmb3IgdGhlIGNoaWxkIGVsZW1lbnRzIGFuZCBkZXNjcmliZXMgCi0gICAgdGhlaXIgcG9zaXRpb24gYXMgc3Vib3JkaW5hdGUgdG8gdGhlIHJvb3QgZWxlbWVudCwgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnB1cmNoYXNlLW9yZGVyPC9zcGFuPi48L3A+Ci0gIDxwPldoZW4geW91IHVzZSB0aGUgWE1MQmVhbiBjb21waWxlciB3aXRoIGFuIFhTRCBmaWxlIHN1Y2ggYXMgdGhpcyBvbmUsIHlvdSAKLSAgICBnZW5lcmF0ZSBhIEpBUiBmaWxlIGNvbnRhaW5pbmcgdGhlIGludGVyZmFjZXMgZ2VuZXJhdGVkIGZyb20gdGhlIHNjaGVtYS48L3A+Ci0gIDxoMj5Xcml0aW5nIEphdmEgQ29kZSBUaGF0IFVzZXMgdGhlIEludGVyZmFjZXM8L2gyPgotICA8cD5XaXRoIHRoZSBYTUxCZWFucyBpbnRlcmZhY2VzIGluIHlvdXIgYXBwbGljYXRpb24sIHlvdSBjYW4gd3JpdGUgY29kZSB0aGF0IAotICAgIHVzZXMgdGhlIG5ldyB0eXBlcyB0byBoYW5kbGUgWE1MIGJhc2VkIG9uIHRoZSBzY2hlbWEuIEhlcmUncyBhbiBleGFtcGxlIHRoYXQgCi0gICAgZXh0cmFjdHMgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBvZiB0aGUgb3JkZXJlZCBpdGVtcyBpbiB0aGUgcHVyY2hhc2Ugb3JkZXIgCi0gICAgWE1MLCBjb3VudHMgdGhlIGl0ZW1zLCBhbmQgY2FsY3VsYXRlcyBhIHRvdGFsIG9mIHRoZWlyIHByaWNlcy4gSW4gcGFydGljdWxhciwgCi0gICAgbG9vayBhdCB0aGUgdXNlIG9mIHR5cGVzIGdlbmVyYXRlZCBmcm9tIHRoZSBzY2hlbWEgYW5kIGltcG9ydGVkIGFzIHBhcnQgb2YgCi0gICAgdGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5vcmcub3BlbnVyaS5lYXN5cG88L3NwYW4+IHBhY2thZ2UuIDwvcD4KLSAgPHA+VGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5wcmludEl0ZW1zPC9zcGFuPiBtZXRob2QgcmVjZWl2ZXMgYSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+RmlsZTwvc3Bhbj4gCi0gICAgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHB1cmNoYXNlIG9yZGVyIFhNTCBmaWxlLjwvcD4KLSAgPHByZT4KLXBhY2thZ2UgZG9jcy54bWxiZWFuczsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLio7Ci1pbXBvcnQgb3JnLm9wZW51cmkuZWFzeXBvLlB1cmNoYXNlT3JkZXJEb2N1bWVudDsKLWltcG9ydCBvcmcub3BlbnVyaS5lYXN5cG8uUHVyY2hhc2VPcmRlcjsKLWltcG9ydCBvcmcub3BlbnVyaS5lYXN5cG8uTGluZUl0ZW07Ci0KLXB1YmxpYyBjbGFzcyBQT0hhbmRsZXIgCi17Ci0gICAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50SXRlbXMoRmlsZSBwbykgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgICB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIEFsbCBYTUxCZWFucyBzY2hlbWEgdHlwZXMgcHJvdmlkZSBhIG5lc3RlZCBGYWN0b3J5IGNsYXNzIHlvdSBjYW4KLSAgICAgICAgICogdXNlIHRvIGJpbmQgWE1MIHRvIHRoZSB0eXBlLCBvciB0byBjcmVhdGUgbmV3IGluc3RhbmNlcyBvZiB0aGUgdHlwZS4KLSAgICAgICAgICogTm90ZSB0aGF0IGEgIkRvY3VtZW50IiB0eXBlIHN1Y2ggYXMgdGhpcyBvbmUgaXMgYW4gWE1MQmVhbnMgCi0gICAgICAgICAqIGNvbnN0cnVjdCBmb3IgcmVwcmVzZW50aW5nIGEgZ2xvYmFsIGVsZW1lbnQuIEl0IHByb3ZpZGVzIGEgd2F5Ci0gICAgICAgICAqIGZvciB5b3UgdG8gZ2V0IGFuZCBzZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBlbnRpcmUgZWxlbWVudC4KLSAgICAgICAgICoKLSAgICAgICAgICogQWxzbywgbm90ZSB0aGF0IHRoZSBwYXJzZSBtZXRob2Qgd2lsbCBvbmx5IHN1Y2NlZWQgaWYgdGhlIAotICAgICAgICAgKiBYTUwgeW91J3JlIHBhcnNpbmcgYXBwZWFycyB0byBjb25mb3JtIHRvIHRoZSBzY2hlbWEuCi0gICAgICAgICAqLwotICAgICAgICBQdXJjaGFzZU9yZGVyRG9jdW1lbnQgcG9Eb2MgPQotICAgICAgICAgICAgUHVyY2hhc2VPcmRlckRvY3VtZW50LkZhY3RvcnkucGFyc2UocG8pOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFRoZSBQdXJjaGFzZU9yZGVyIHR5cGUgcmVwcmVzZW50cyB0aGUgcHVyY2hhc2Utb3JkZXIgZWxlbWVudCdzCi0gICAgICAgICAqIGNvbXBsZXggdHlwZS4KLSAgICAgICAgICovCi0gICAgICAgIFB1cmNoYXNlT3JkZXIgcG8gPSBwb0RvYy5nZXRQdXJjaGFzZU9yZGVyKCk7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogV2hlbiBhbiBlbGVtZW50IG1heSBvY2N1ciBtb3JlIHRoYW4gb25jZSBhcyBhIGNoaWxkIGVsZW1lbnQsCi0gICAgICAgICAqIHRoZSBzY2hlbWEgY29tcGlsZXIgd2lsbCBnZW5lcmF0ZSBtZXRob2RzIHRoYXQgcmVmZXIgdG8gYW4gCi0gICAgICAgICAqIGFycmF5IG9mIHRoYXQgZWxlbWVudC4gVGhlIGxpbmUtaXRlbSBlbGVtZW50IGlzIGRlZmluZWQgd2l0aAotICAgICAgICAgKiBhIG1heE9jY3VycyBhdHRyaWJ1dGUgdmFsdWUgb2YgInVuYm91bmRlZCIsIG1lYW5pbmcgdGhhdCAKLSAgICAgICAgICogaXQgbWF5IG9jY3VyIGFzIG1hbnkgdGltZXMgaW4gYW4gaW5zdGFuY2UgZG9jdW1lbnQgYXMgbmVlZGVkLgotICAgICAgICAgKiBTbyB0aGVyZSBhcmUgbWV0aG9kcyBzdWNoIGFzIGdldExpbmVJdGVtQXJyYXkgYW5kIHNldExpbmVJdGVtQXJyYXkuIAotICAgICAgICAgKi8KLSAgICAgICAgTGluZUl0ZW1bXSBsaW5laXRlbXMgPSBwby5nZXRMaW5lSXRlbUFycmF5KCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUHVyY2hhc2Ugb3JkZXIgaGFzICIgKyBsaW5laXRlbXMubGVuZ3RoICsgIiBsaW5lIGl0ZW1zLiIpOwotCi0gICAgICAgIGRvdWJsZSB0b3RhbEFtb3VudCA9IDAuMDsKLSAgICAgICAgaW50IG51bWJlck9mSXRlbXMgPSAwOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIExvb3AgdGhyb3VnaCB0aGUgbGluZS1pdGVtIGVsZW1lbnRzLCB1c2luZyBnZW5lcmF0ZWQgYWNjZXNzb3JzIHRvIAotICAgICAgICAgKiBnZXQgdmFsdWVzIGZvciBjaGlsZCBlbGVtZW50cyBzdWNoIGEgZGVzY3JpcHRpb24sIHF1YW50aXR5LCBhbmQKLSAgICAgICAgICogcHJpY2UuCi0gICAgICAgICAqLwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGxpbmVpdGVtcy5sZW5ndGg7IGorKykgCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIExpbmUgaXRlbTogIiArIGopOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKAotICAgICAgICAgICAgICAgICIgICBEZXNjcmlwdGlvbjogIiArIGxpbmVpdGVtc1tqXS5nZXREZXNjcmlwdGlvbigpKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgUXVhbnRpdHk6ICIgKyBsaW5laXRlbXNbal0uZ2V0UXVhbnRpdHkoKSk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgIFByaWNlOiAiICsgbGluZWl0ZW1zW2pdLmdldFByaWNlKCkpOwotICAgICAgICAgICAgbnVtYmVyT2ZJdGVtcyArPSBsaW5laXRlbXNbal0uZ2V0UXVhbnRpdHkoKTsKLSAgICAgICAgICAgIHRvdGFsQW1vdW50ICs9IGxpbmVpdGVtc1tqXS5nZXRQcmljZSgpICogbGluZWl0ZW1zW2pdLmdldFF1YW50aXR5KCk7Ci0gICAgICAgIH0KLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUb3RhbCBpdGVtczogIiArIG51bWJlck9mSXRlbXMpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIGFtb3VudDogIiArIHRvdGFsQW1vdW50KTsKLSAgICB9Ci19Ci08L3ByZT4KLSAgPHA+Tm90aWNlIHRoYXQgdHlwZXMgZ2VuZXJhdGVkIGZyb20gdGhlIHNjaGVtYSByZWZsZWN0IHdoYXQncyBpbiB0aGUgWE1MOjwvcD4KLTwvZGl2PgotPHVsPgotICA8bGk+IAotICAgIDxkaXY+QSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+UHVyY2hhc2VPcmRlckRvY3VtZW50PC9zcGFuPiByZXByZXNlbnRzIHRoZSAKLSAgICAgIGdsb2JhbCByb290IGVsZW1lbnQuPC9kaXY+Ci0gIDwvbGk+Ci0gIDxsaT4gCi0gICAgPGRpdj5BIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5nZXRQdXJjaGFzZU9yZGVyPC9zcGFuPiBtZXRob2QgcmV0dXJucyBhIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5QdXJjaGFzZU9yZGVyRG9jdW1lbnQuUHVyY2hhc2VPcmRlcjwvc3Bhbj4gCi0gICAgICB0eXBlIHRoYXQgY29udGFpbnMgY2hpbGQgZWxlbWVudHMsIGluY2x1ZGluZyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+bGluZS1pdGVtPC9zcGFuPi4gCi0gICAgICBBIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5nZXRMaW5lSXRlbUFycmF5PC9zcGFuPiBtZXRob2QgcmV0dXJucyBhIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5MaW5lSXRlbTwvc3Bhbj4gCi0gICAgICBhcnJheSBjb250YWluaW5nIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+bGluZS1pdGVtPC9zcGFuPiBlbGVtZW50cy48L2Rpdj4KLSAgPC9saT4KLSAgPGxpPk90aGVyIG1ldGhvZHMsIHN1Y2ggYXMgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmdldFF1YW50aXR5PC9zcGFuPiwgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmdldFByaWNlPC9zcGFuPiwgCi0gICAgYW5kIHNvIG9uLCBmb2xsb3cgbmF0dXJhbGx5IGZyb20gd2hhdCB0aGUgc2NoZW1hIGRlc2NyaWJlcywgcmV0dXJuaW5nIGNvcnJlc3BvbmRpbmcgCi0gICAgY2hpbGRyZW4gb2YgdGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5saW5lLWl0ZW08L3NwYW4+IGVsZW1lbnQuPC9saT4KLSAgPGxpPlRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIGNvbnRhaW5pbmcgdGhlc2UgdHlwZXMgaXMgZGVyaXZlZCBmcm9tIHRoZSBzY2hlbWEncyAKLSAgICB0YXJnZXQgbmFtZXNwYWNlLjwvbGk+Ci08L3VsPgotPGRpdj4gCi0gIDxwPkNhcGl0YWxpemF0aW9uIGFuZCBwdW5jdHVhdGlvbiBmb3IgZ2VuZXJhdGVkIHR5cGUgbmFtZXMgZm9sbG93IEphdmEgY29udmVudGlvbi4gCi0gICAgQWxzbywgd2hpbGUgdGhpcyBleGFtcGxlIHBhcnNlcyB0aGUgWE1MIGZyb20gYSBmaWxlLCBvdGhlciA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+cGFyc2U8L3NwYW4+IAotICAgIG1ldGhvZHMgc3VwcG9ydCBhIEphdmEgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPklucHV0U3RyZWFtPC9zcGFuPiBvYmplY3QsIAotICAgIGEgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlJlYWRlcjwvc3Bhbj4gb2JqZWN0LCBhbmQgc28gb24uPC9wPgotICA8cD5UaGUgcHJlY2VkaW5nIEphdmEgY29kZSBwcmludHMgdGhlIGZvbGxvd2luZyB0byB0aGUgY29uc29sZTo8L3A+Ci08L2Rpdj4KLTxkaXY+IAotICA8cHJlPgotUHVyY2hhc2Ugb3JkZXIgaGFzIDMgbGluZSBpdGVtcy4KLSBMaW5lIGl0ZW0gMAotICAgRGVzY3JpcHRpb246IEJ1cm5oYW0ncyBDZWxlc3RpYWwgSGFuZGJvb2ssIFZvbCAxCi0gICBRdWFudGl0eTogMgotICAgUHJpY2U6IDIxLjc5Ci0gTGluZSBpdGVtIDEKLSAgIERlc2NyaXB0aW9uOiBCdXJuaGFtJ3MgQ2VsZXN0aWFsIEhhbmRib29rLCBWb2wgMgotICAgUXVhbnRpdHk6IDIKLSAgIFByaWNlOiAxOS44OQotVG90YWwgaXRlbXM6IDQKLVRvdGFsIGFtb3VudDogNDEuNjg8L3ByZT4KLSAgPGgyPkNyZWF0aW5nIE5ldyBYTUwgSW5zdGFuY2VzIGZyb20gU2NoZW1hPC9oMj4KLSAgPHA+QXMgeW91J3ZlIHNlZW4gWE1MQmVhbnMgcHJvdmlkZXMgYSAmcXVvdDtmYWN0b3J5JnF1b3Q7IGNsYXNzIHlvdSBjYW4gdXNlIAotICAgIHRvIGNyZWF0ZSBuZXcgaW5zdGFuY2VzLiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgY3JlYXRlcyBhIG5ldyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+cHVyY2hhc2Utb3JkZXI8L3NwYW4+IAotICAgIGVsZW1lbnQgYW5kIGFkZHMgYSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+Y3VzdG9tZXI8L3NwYW4+IGNoaWxkIGVsZW1lbnQuIAotICAgIEl0IHRoZW4gaW5zZXJ0cyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+bmFtZTwvc3Bhbj4gYW5kIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5hZGRyZXNzPC9zcGFuPiAKLSAgICBjaGlsZCBlbGVtZW50cywgY3JlYXRpbmcgdGhlIGVsZW1lbnRzIGFuZCBzZXR0aW5nIHRoZWlyIHZhbHVlcyB3aXRoIGEgc2luZ2xlIAotICAgIGNhbGwgdG8gdGhlaXIgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnNldDwvc3Bhbj4gbWV0aG9kcy48L3A+Ci0gIDxwcmU+Ci1wdWJsaWMgUHVyY2hhc2VPcmRlckRvY3VtZW50IGNyZWF0ZVBPKCkKLXsKLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1B1cmNoYXNlT3JkZXJEb2N1bWVudCBuZXdQT0RvYyA9IFB1cmNoYXNlT3JkZXJEb2N1bWVudC5GYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQdXJjaGFzZU9yZGVyIG5ld1BPID0gbmV3UE9Eb2MuYWRkTmV3UHVyY2hhc2VPcmRlcigpOwotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3VzdG9tZXIgbmV3Q3VzdG9tZXIgPSBuZXdQTy5hZGROZXdDdXN0b21lcigpOwotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7bmV3Q3VzdG9tZXIuc2V0TmFtZSgmcXVvdDtEb3JpcyBLcmF2aXR6JnF1b3Q7KTsKLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO25ld0N1c3RvbWVyLnNldEFkZHJlc3MoJnF1b3Q7QmVsbGZsb3dlciwgQ0EmcXVvdDspOwotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7cmV0dXJuIG5ld1BPRG9jOwotfQotPC9wcmU+Ci0gIDxwPlRoZSBmb2xsb3dpbmcgaXMgdGhlIFhNTCB0aGF0IHJlc3VsdHMuIE5vdGUgdGhhdCBYTUxCZWFucyBhc3NpZ25zIHRoZSBjb3JyZWN0IAotICAgIG5hbWVzcGFjZSBiYXNlZCBvbiB0aGUgc2NoZW1hLCB1c2luZyBhbiAmcXVvdDtuczEmcXVvdDsgKG9yLCAmcXVvdDtuYW1lc3BhY2UgCi0gICAgMSZxdW90OykgcHJlZml4LiBGb3IgcHJhY3RpY2FsIHB1cnBvc2VzLCB0aGUgcHJlZml4IGl0c2VsZiBkb2Vzbid0IHJlYWxseSAKLSAgICBtYXR0ZXIgJiM4MjEyOyBpdCdzIHRoZSBuYW1lc3BhY2UgVVJJIChodHRwOi8vb3BlbnVyaS5vcmcvZWFzeXBvKSB0aGF0IGRlZmluZXMgCi0gICAgdGhlIG5hbWVzcGFjZS4gVGhlIHByZWZpeCBpcyBtZXJlbHkgYSBtYXJrZXIgdGhhdCByZXByZXNlbnRzIGl0LjwvcD4KLSAgPHByZT4mbHQ7bnMxOnB1cmNoYXNlLW9yZGVyIHhtbG5zOm5zMT0mcXVvdDtodHRwOi8vb3BlbnVyaS5vcmcvZWFzeXBvJnF1b3Q7Jmd0OwotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jmx0O25zMTpjdXN0b21lciZndDsKLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZsdDtuczE6bmFtZSZndDtEb3JpcyBLcmF2aXR6Jmx0Oy9uczE6bmFtZSZndDsKLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZsdDtuczE6YWRkcmVzcyZndDtCZWxsZmxvd2VyLCBDQSZsdDsvbnMxOmFkZHJlc3MmZ3Q7Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7L25zMTpjdXN0b21lciZndDsKLSZsdDsvbnMxOnB1cmNoYXNlLW9yZGVyJmd0OwotPC9wcmU+Ci0gIDxwPk5vdGUgdGhhdCBhbGwgdHlwZXMgKGluY2x1ZGluZyB0aG9zZSBnZW5lcmF0ZWQgZnJvbSBzY2hlbWEpIGluaGVyaXQgZnJvbSAKLSAgICA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sT2JqZWN0PC9zcGFuPiwgYW5kIHNvIHByb3ZpZGUgYSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+RmFjdG9yeTwvc3Bhbj4gCi0gICAgY2xhc3MuIEZvciBhbiBvdmVydmlldyBvZiB0aGUgdHlwZSBzeXN0ZW0gaW4gd2hpY2ggPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlhtbE9iamVjdDwvc3Bhbj4gCi0gICAgZml0cywgc2VlIDxhIGhyZWY9ImNvblhNTEJlYW5zU3VwcG9ydEJ1aWx0SW5TY2hlbWFUeXBlcy5odG1sIj5YTUxCZWFucyBTdXBwb3J0IAotICAgIGZvciBCdWlsdC1JbiBTY2hlbWEgVHlwZXM8L2E+LiBGb3IgcmVmZXJlbmNlIGluZm9ybWF0aW9uLCBzZWUgPGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdCAKLSAgICBJbnRlcmZhY2U8L2E+LjwvcD4KLSAgPGgxPlhNTEJlYW5zIEhpZXJhcmNoeTwvaDE+Ci0gIDxwPlRoZSBnZW5lcmF0ZWQgdHlwZXMgeW91IHNhdyB1c2VkIGluIHRoZSBwcmVjZWRpbmcgZXhhbXBsZSBhcmUgYWN0dWFsbHkgcGFydCAKLSAgICBvZiBhIGhpZXJhcmNoeSBvZiBYTUxCZWFucyB0eXBlcy4gVGhpcyBoaWVyYXJjaHkgaXMgb25lIG9mIHRoZSB3YXlzIGluIHdoaWNoIAotICAgIFhNTEJlYW5zIHByZXNlbnRzIGFuIGludHVpdGl2ZSB2aWV3IG9mIHNjaGVtYS4gQXQgdGhlIHRvcCBvZiB0aGUgaGllcmFyY2h5IAotICAgIGlzIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5YbWxPYmplY3Q8L3NwYW4+LCB0aGUgYmFzZSBpbnRlcmZhY2UgZm9yIFhNTEJlYW5zIAotICAgIHR5cGVzLiBCZW5lYXRoIHRoaXMgbGV2ZWwsIHRoZXJlIGFyZSB0d28gbWFpbiB0eXBlIGNhdGVnb3JpZXM6IGdlbmVyYXRlZCB0eXBlcyAKLSAgICB0aGF0IHJlcHJlc2VudCB1c2VyLWRlcml2ZWQgc2NoZW1hIHR5cGVzLCBhbmQgaW5jbHVkZWQgdHlwZXMgdGhhdCByZXByZXNlbnQgCi0gICAgYnVpbHQtaW4gc2NoZW1hIHR5cGVzLjwvcD4KLSAgVGhpcyB0b3BpYyBoYXMgYWxyZWFkeSBpbnRyb2R1Y2VkIGdlbmVyYXRlZCB0eXBlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSAKLSAgPGEgaHJlZj0iY29uSmF2YVR5cGVzR2VuZXJhdGVkRnJvbVVzZXJEZXJpdmVkLmh0bWwiPkphdmEgVHlwZXMgR2VuZXJhdGVkIGZyb20gCi0gIFVzZXItRGVyaXZlZCBTY2hlbWEgVHlwZXMuPC9hPiAKLSAgPGgyPkJ1aWx0LUluIFR5cGUgU3VwcG9ydDwvaDI+Ci0gIDxwPkluIGFkZGl0aW9uIHRvIHR5cGVzIGdlbmVyYXRlZCBmcm9tIGEgZ2l2ZW4gc2NoZW1hLCBYTUxCZWFucyBwcm92aWRlcyA0NiAKLSAgICBKYXZhIHR5cGVzIHRoYXQgbWlycm9yIHRoZSA0NiBidWlsdC1pbiB0eXBlcyBkZWZpbmVkIGJ5IHRoZSBYTUwgc2NoZW1hIHNwZWNpZmljYXRpb24uIAotICAgIFdoZXJlIHNjaGVtYSBkZWZpbmVzIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj54czpzdHJpbmc8L3NwYW4+LCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+eHM6ZGVjaW1hbDwvc3Bhbj4sIAotICAgIGFuZCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+eHM6aW50PC9zcGFuPiwgZm9yIGV4YW1wbGUsIFhNTEJlYW5zIHByb3ZpZGVzIAotICAgIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+WG1sU3RyaW5nPC9hPjwvc3Bhbj4sIAotICAgIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L2E+PC9zcGFuPiwgCi0gICAgYW5kIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+WG1sSW50PC9hPjwvc3Bhbj4uIAotICAgIEVhY2ggb2YgdGhlc2UgYWxzbyBpbmhlcml0cyBmcm9tIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5YbWxPYmplY3Q8L3NwYW4+LCAKLSAgICB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgYnVpbHQtaW4gc2NoZW1hIHR5cGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnhzOmFueVR5cGU8L3NwYW4+LjwvcD4KLSAgPHA+WE1MQmVhbnMgcHJvdmlkZXMgYSB3YXkgZm9yIHlvdSB0byBoYW5kbGUgWE1MIGRhdGEgYXMgdGhlc2UgYnVpbHQtaW4gdHlwZXMuIAotICAgIFdoZXJlIHlvdXIgc2NoZW1hIGluY2x1ZGVzIGFuIGVsZW1lbnQgd2hvc2UgdHlwZSBpcywgZm9yIGV4YW1wbGUsIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj54czppbnQ8L3NwYW4+LCAKLSAgICBYTUxCZWFucyB3aWxsIHByb3ZpZGUgYSBnZW5lcmF0ZWQgbWV0aG9kIGRlc2lnbmVkIHRvIHJldHVybiBhbiA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sSW50PC9zcGFuPi4gCi0gICAgSW4gYWRkaXRpb24sIGFzIHlvdSBzYXcgaW4gdGhlIHByZWNlZGluZyBleGFtcGxlLCBmb3IgbW9zdCB0eXBlcyB0aGVyZSB3aWxsIAotICAgIGFsc28gYmUgYSBtZXRob2QgdGhhdCByZXR1cm5zIGEgbmF0dXJhbCBKYXZhIHR5cGUgc3VjaCBhcyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+aW50PC9zcGFuPi4gCi0gICAgVGhlIGZvbGxvd2luZyB0d28gbGluZXMgb2YgY29kZSByZXR1cm4gdGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5xdWFudGl0eTwvc3Bhbj4gCi0gICAgZWxlbWVudCdzIHZhbHVlLCBidXQgcmV0dXJuIGl0IGFzIGRpZmZlcmVudCB0eXBlcy48L3A+Ci0gIDxwcmU+Ci0vLyBNZXRob2RzIHRoYXQgcmV0dXJuIHNpbXBsZSB0eXBlcyBiZWdpbiB3aXRoIGFuICJ4Ii4KLVhtbEludCB4bWxRdWFudGl0eSA9IGxpbmVpdGVtc1tqXS54Z2V0UXVhbnRpdHkoKTsKLS8vIE1ldGhvZHMgdGhhdCByZXR1cm4gYSBuYXR1cmFsIEphdmEgdHlwZSBhcmUgdW5hZG9ybmVkLgotaW50IGphdmFRdWFudGl0eSA9IGxpbmVpdGVtc1tqXS5nZXRRdWFudGl0eSgpOwotPC9wcmU+Ci0gIDxwPkluIGEgc2Vuc2UgYm90aCBnZXQgbWV0aG9kcyBuYXZpZ2F0ZSB0byB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnF1YW50aXR5PC9zcGFuPiAKLSAgICBlbGVtZW50OyB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmdldFF1YW50aXR5PC9zcGFuPiBtZXRob2QgZ29lcyBhIHN0ZXAgCi0gICAgZnVydGhlciBhbmQgY29udmVydHMgdGhlIGVsZW1lbnRzIHZhbHVlIHRvIHRoZSBtb3N0IGFwcHJvcHJpYXRlIG5hdHVyYWwgSmF2YSAKLSAgICB0eXBlIGJlZm9yZSByZXR1cm5pbmcgaXQuIChYTUxCZWFucyBhbHNvIHByb3ZpZGVzIGEgbWVhbnMgZm9yIHZhbGlkYXRpbmcgdGhlIAotICAgIFhNTCBhcyB5b3Ugd29yayB3aXRoIGl0Lik8L3A+Ci0gIDxwPklmIHlvdSBrbm93IGEgYml0IGFib3V0IFhNTCBzY2hlbWEsIFhNTEJlYW5zIHR5cGVzIHNob3VsZCBzZWVtIGZhaXJseSBpbnR1aXRpdmUuIAotICAgIElmIHlvdSBkb24ndCwgeW91J2xsIGxlYXJuIGEgbG90IGJ5IGV4cGVyaW1lbnRpbmcgd2l0aCBYTUxCZWFucyB1c2luZyB5b3VyIAotICAgIG93biBzY2hlbWFzIGFuZCBYTUwgaW5zdGFuY2VzIGJhc2VkIG9uIHRoZW0uIDwvcD4KLSAgPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIG1ldGhvZHMgb2YgdHlwZXMgZ2VuZXJhdGVkIGZyb20gc2NoZW1hLCBzZWUgPGEgaHJlZj0iY29uTWV0aG9kc0ZvckdlbmVyYXRlZEphdmFUeXBlcy5odG1sIj5NZXRob2RzIAotICAgIGZvciBUeXBlcyBHZW5lcmF0ZWQgRnJvbSBTY2hlbWE8L2E+LiBGb3IgbW9yZSBhYm91dCB0aGUgaG93IFhNTEJlYW5zIHJlcHJlc2VudHMgCi0gICAgYnVpbHQtaW4gc2NoZW1hIHR5cGVzLCBzZWUgPGEgaHJlZj0iY29uWE1MQmVhbnNTdXBwb3J0QnVpbHRJblNjaGVtYVR5cGVzLmh0bWwiPlhNTEJlYW5zIAotICAgIFN1cHBvcnQgZm9yIEJ1aWx0LUluIFNjaGVtYSBUeXBlczwvYT4uPC9wPgotICA8aDE+VXNpbmcgWFF1ZXJ5IEV4cHJlc3Npb25zPC9oMT4KLSAgPHA+V2l0aCBYTUxCZWFucyB5b3UgY2FuIHVzZSBYUXVlcnkgdG8gcXVlcnkgWE1MIGZvciBzcGVjaWZpYyBwaWVjZXMgb2YgZGF0YS4gCi0gICAgWFF1ZXJ5IGlzIHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyAmcXVvdDtTUUwgZm9yIFhNTCZxdW90OyBiZWNhdXNlIGl0IHByb3ZpZGVzIAotICAgIGEgbWVjaGFuaXNtIHRvIGFjY2VzcyBkYXRhIGRpcmVjdGx5IGZyb20gWE1MIGRvY3VtZW50cywgbXVjaCBhcyBTUUwgcHJvdmlkZXMgCi0gICAgYSBtZWNoYW5pc20gZm9yIGFjY2Vzc2luZyBkYXRhIGluIHRyYWRpdGlvbmFsIGRhdGFiYXNlcy48L3A+Ci0gIDxwPlhRdWVyeSBib3Jyb3dzIHNvbWUgb2YgaXRzIHN5bnRheCBmcm9tIFhQYXRoLCBhIHN5bnRheCBmb3Igc3BlY2lmeWluZyBuZXN0ZWQgCi0gICAgZGF0YSBpbiBYTUwuIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSByZXR1cm5zIGFsbCBvZiB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmxpbmUtaXRlbTwvc3Bhbj4gCi0gICAgZWxlbWVudHMgd2hvc2UgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnByaWNlPC9zcGFuPiBjaGlsZCBlbGVtZW50cyBoYXZlIHZhbHVlcyAKLSAgICBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMjAuMDA6PC9wPgotICA8cHJlPgotUHVyY2hhc2VPcmRlckRvY3VtZW50IGRvYyA9IFB1cmNoYXNlT3JkZXJEb2N1bWVudC5GYWN0b3J5LnBhcnNlKHBvKTsKLQotLyoKLSAqIFRoZSBYUXVlcnkgZXhwcmVzc2lvbiBpcyB0aGUgZm9sbG93aW5nIHR3byBzdHJpbmdzIGNvbWJpbmVkLiBUaGV5J3JlCi0gKiBkZWNsYXJlZCBzZXBhcmF0ZWx5IGhlcmUgZm9yIGNvbnZlbmllbmNlLiBUaGUgZmlyc3Qgc3RyaW5nIGRlY2xhcmVzCi0gKiB0aGUgbmFtZXNwYWNlIHByZWZpeCB0aGF0J3MgdXNlZCBpbiB0aGUgcXVlcnkgZXhwcmVzc2lvbjsgdGhlIHNlY29uZAotICogZGVjbGFyZXMgdGhlIGV4cHJlc3Npb24gaXRzZWxmLgotICovCi1TdHJpbmcgbnNUZXh0ID0gImRlY2xhcmUgbmFtZXNwYWNlIHBvID0gJ2h0dHA6Ly9vcGVudXJpLm9yZy9lYXN5cG8nIjsKLVN0cmluZyBwYXRoVGV4dCA9ICIkdGhpcy9wbzpwdXJjaGFzZS1vcmRlci9wbzpsaW5lLWl0ZW1bcG86cHJpY2UgPD0gMjAuMDBdIjsKLVN0cmluZyBxdWVyeVRleHQgPSBuc1RleHQgKyBwYXRoVGV4dDsKLQotWG1sQ3Vyc29yIGl0ZW1DdXJzb3IgPSBkb2MubmV3Q3Vyc29yKCkuZXhlY1F1ZXJ5KHF1ZXJ5VGV4dCk7Ci1TeXN0ZW0ub3V0LnByaW50bG4oaXRlbUN1cnNvci54bWxUZXh0KCkpOwotPC9wcmU+Ci0gIDxwPlRoaXMgY29kZSBjcmVhdGVzIGEgbmV3IGN1cnNvciBhdCB0aGUgc3RhcnQgb2YgdGhlIGRvY3VtZW50LiBGcm9tIHRoZXJlLCAKLSAgICBpdCB1c2VzIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sQ3Vyc29yPC9zcGFuPiBpbnRlcmZhY2UncyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+ZXhlY1F1ZXJ5PC9zcGFuPiAKLSAgICBtZXRob2QgdG8gZXhlY3V0ZSB0aGUgcXVlcnkgZXhwcmVzc2lvbi4gSW4gdGhpcyBleGFtcGxlLCB0aGUgbWV0aG9kJ3MgcGFyYW1ldGVyIAotICAgIGlzIGFuIFhRdWVyeSBleHByZXNzaW9uIHRoYXQgc2ltcGx5IHNheXMsICZxdW90O0Zyb20gbXkgY3VycmVudCBsb2NhdGlvbiwgCi0gICAgbmF2aWdhdGUgdGhyb3VnaCB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnB1cmNoYXNlLW9yZGVyPC9zcGFuPiBlbGVtZW50IAotICAgIGFuZCByZXRyaWV2ZSB0aG9zZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+bGluZS1pdGVtPC9zcGFuPiBlbGVtZW50cyB3aG9zZSAKLSAgICB2YWx1ZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMjAuMDAuJnF1b3Q7IFRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+JHRoaXM8L3NwYW4+IAotICAgIHZhcmlhYmxlIG1lYW5zICZxdW90O3RoZSBjdXJyZW50IHBvc2l0aW9uLiZxdW90OzwvcD4KLSAgPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgWFF1ZXJ5LCBzZWUgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveHF1ZXJ5LyIgdGFyZ2V0PSJfYmxhbmsiPlhRdWVyeSAKLSAgICAxLjA6IEFuIFhNTCBRdWVyeSBMYW5ndWFnZTwvYT4gYXQgdGhlIFczQyB3ZWIgc2l0ZS48L3A+Ci0gIDxoMj5Vc2luZyBYTUwgQ3Vyc29yczwvaDI+Ci0gIDxwPkluIHRoZSBwcmVjZWRpbmcgZXhhbXBsZSB5b3UgbWF5IGhhdmUgbm90aWNlZCB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L2E+PC9zcGFuPiAKLSAgICBpbnRlcmZhY2UuIEluIGFkZGl0aW9uIHRvIHByb3ZpZGluZyBhIHdheSB0byBleGVjdXRlIFhRdWVyeSBleHByZXNzaW9uLCBhbiAKLSAgICBYTUwgY3Vyc29ycyBvZmZlcnMgYSBmaW5lLWdyYWluZWQgbW9kZWwgZm9yIG1hbmlwdWxhdGluZyBkYXRhLiBUaGUgWE1MIGN1cnNvciAKLSAgICBBUEksIGFuYWxvZ291cyB0byB0aGUgRE9NJ3Mgb2JqZWN0IEFQSSwgaXMgc2ltcGx5IGEgd2F5IHRvIHBvaW50IGF0IGEgcGFydGljdWxhciAKLSAgICBwaWVjZSBvZiBkYXRhLiBTbywganVzdCBsaWtlIGEgY3Vyc29yIGhlbHBzIG5hdmlnYXRlIHRocm91Z2ggYSB3b3JkIHByb2Nlc3NpbmcgCi0gICAgZG9jdW1lbnQsIHRoZSBYTUwgY3Vyc29yIGRlZmluZXMgYSBsb2NhdGlvbiBpbiBYTUwgd2hlcmUgeW91IGNhbiBwZXJmb3JtIGFjdGlvbnMgCi0gICAgb24gdGhlIHNlbGVjdGVkIFhNTC48L3A+Ci0gIDxwPkN1cnNvcnMgYXJlIGlkZWFsIGZvciBtb3ZpbmcgdGhyb3VnaCBhbiBYTUwgZG9jdW1lbnQgd2hlbiB0aGVyZSdzIG5vIHNjaGVtYSAKLSAgICBhdmFpbGFibGUuIE9uY2UgeW91J3ZlIGdvdCB0aGUgY3Vyc29yIGF0IHRoZSBsb2NhdGlvbiB5b3UncmUgaW50ZXJlc3RlZCBpbiwgCi0gICAgeW91IGNhbiBwZXJmb3JtIGEgdmFyaWV0eSBvZiBvcGVyYXRpb25zIHdpdGggaXQuIEZvciBleGFtcGxlLCB5b3UgY2FuIHNldCAKLSAgICBhbmQgZ2V0IHZhbHVlcywgaW5zZXJ0IGFuZCByZW1vdmUgZnJhZ21lbnRzIG9mIFhNTCwgY29weSBmcmFnbWVudHMgb2YgWE1MIAotICAgIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBkb2N1bWVudCwgYW5kIG1ha2Ugb3RoZXIgZmluZS1ncmFpbmVkIGNoYW5nZXMgdG8gdGhlIAotICAgIFhNTCBkb2N1bWVudC48L3A+Ci0gIDxwPlRoZSBmb2xsb3dpbmcgZXhhbXBsZSB1c2VzIGFuIFhNTCBjdXJzb3IgdG8gbmF2aWdhdGUgdG8gdGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5jdXN0b21lcjwvc3Bhbj4gCi0gICAgZWxlbWVudCdzIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5uYW1lPC9zcGFuPiBjaGlsZCBlbGVtZW50LjwvcD4KLSAgPHByZT4KLVB1cmNoYXNlT3JkZXJEb2N1bWVudCBkb2MgPSAKLSAgICBQdXJjaGFzZU9yZGVyRG9jdW1lbnQuRmFjdG9yeS5wYXJzZShwbyk7Ci0KLVhtbEN1cnNvciBjdXJzb3IgPSBkb2MubmV3Q3Vyc29yKCk7Ci1jdXJzb3IudG9GaXJzdENvbnRlbnRUb2tlbigpOwotY3Vyc29yLnRvRmlyc3RDaGlsZEVsZW1lbnQoKTsKLWN1cnNvci50b0ZpcnN0Q2hpbGRFbGVtZW50KCk7Ci1TeXN0ZW0ub3V0LnByaW50bG4oY3Vyc29yLmdldFRleHQoKSk7Ci0KLWN1cnNvci5kaXNwb3NlKCk7Ci08L3ByZT4KLSAgPHA+V2hhdCdzIGhhcHBlbmluZyBoZXJlPyBBcyB3aXRoIHRoZSBlYXJsaWVyIGV4YW1wbGUsIHRoZSBjb2RlIGxvYWRzIHRoZSBYTUwgCi0gICAgZnJvbSBhIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5GaWxlPC9zcGFuPiBvYmplY3QuIEFmdGVyIGxvYWRpbmcgdGhlIGRvY3VtZW50LCAKLSAgICB0aGUgY29kZSBjcmVhdGVzIGEgY3Vyc29yIGF0IGl0cyBiZWdpbm5pbmcuIE1vdmluZyB0aGUgY3Vyc29yIGEgZmV3IHRpbWVzIAotICAgIHRha2VzIGl0IHRvIHRoZSBuZXN0ZWQgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPm5hbWUgPC9zcGFuPiBlbGVtZW50LiBPbmNlIAotICAgIHRoZXJlLCB0aGUgZ2V0VGV4dCBtZXRob2QgcmV0cmlldmVzIHRoZSBlbGVtZW50J3MgdmFsdWUuPC9wPgotICA8cD5UaGlzIGlzIGp1c3QgYW4gaW50cm9kdWN0aW9uIHRvIFhNTCBjdXJzb3JzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyAKLSAgICBjdXJzb3JzLCBzZWUgPGEgaHJlZj0iY29uTmF2aWdhdGluZ1hNTHdpdGhDdXJzb3JzLmh0bWwiPk5hdmlnYXRpbmcgWE1MIHdpdGggCi0gICAgQ3Vyc29yczwvYT4uPC9wPgotICA8aDI+V2hlcmUgdG8gR28gTmV4dDwvaDI+Ci08L2Rpdj4KLTx1bD4KLSAgPGxpPiAKLSAgICA8ZGl2PlhNTEJlYW5zIHByb3ZpZGVzIGludHVpdGl2ZSB3YXlzIHRvIGhhbmRsZSBYTUwsIHBhcnRpY3VsYXJseSBpZiB5b3UncmUgCi0gICAgICBzdGFydGluZyB3aXRoIHNjaGVtYS4gSWYgeW91J3JlIGFjY2Vzc2luZyBYTUwgdGhhdCdzIGJhc2VkIG9uIGEgc2NoZW1hLCAKLSAgICAgIHlvdSdsbCBwcm9iYWJseSBmaW5kIGl0IG1vc3QgZWZmaWNpZW50IHRvIGFjY2VzcyB0aGUgWE1MIHRocm91Z2ggZ2VuZXJhdGVkIAotICAgICAgdHlwZXMgc3BlY2lmaWMgdG8gdGhlIHNjaGVtYS4gVG8gZG8gdGhpcywgeW91IGJlZ2luIGJ5IGNvbXBpbGluZyB0aGUgc2NoZW1hIAotICAgICAgdG8gZ2VuZXJhdGUgaW50ZXJmYWNlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgWE1MQmVhbnMgdHlwZXMgZ2VuZXJhdGVkIAotICAgICAgYnkgY29tcGlsaW5nIHNjaGVtYSwgc2VlIDxhIGhyZWY9ImNvbkphdmFUeXBlc0dlbmVyYXRlZEZyb21Vc2VyRGVyaXZlZC5odG1sIj5KYXZhIAotICAgICAgVHlwZXMgR2VuZXJhdGVkIEZyb20gVXNlci1EZXJpdmVkIFNjaGVtYSBUeXBlczwvYT4gYW5kIDxhIGhyZWY9ImNvbk1ldGhvZHNGb3JHZW5lcmF0ZWRKYXZhVHlwZXMuaHRtbCI+TWV0aG9kcyAKLSAgICAgIGZvciBUeXBlcyBHZW5lcmF0ZWQgRnJvbSBTY2hlbWE8L2E+LjwvZGl2PgotICA8L2xpPgotICA8bGk+IAotICAgIDxkaXY+WW91IG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4gcmVhZGluZyBtb3JlIGFib3V0IHRoZSB0eXBlIHN5c3RlbSBvbiB3aGljaCAKLSAgICAgIFhNTEJlYW5zIGlzIGJhc2VkLCBwYXJ0aWN1bGFybHkgaWYgeW91J3JlIHVzaW5nIHR5cGVzIGdlbmVyYXRlZCBmcm9tIHNjaGVtYS4gCi0gICAgICBYTUxCZWFucyBwcm92aWRlcyBhIGhpZXJhcmNoaWNhbCBzeXN0ZW0gb2YgdHlwZXMgdGhhdCBtaXJyb3Igd2hhdCB5b3UgZmluZCAKLSAgICAgIGluIHRoZSBYTUwgc2NoZW1hIHNwZWNpZmljYXRpb24gaXRzZWxmLiBJZiB5b3UncmUgd29ya2luZyB3aXRoIHNjaGVtYSwgeW91IAotICAgICAgbWlnaHQgZmluZCBpdCBoZWxwcyB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB0eXBlcyB3b3JrLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgCi0gICAgICBzZWUgPGEgaHJlZj0iY29uWE1MQmVhbnNTdXBwb3J0QnVpbHRJblNjaGVtYVR5cGVzLmh0bWwiPlhNTEJlYW5zIFN1cHBvcnQgCi0gICAgICBmb3IgQnVpbHQtSW4gU2NoZW1hIFR5cGVzPC9hPiBhbmQgPGEgaHJlZj0iY29uSW50cm9Ub1RoZVNjaGVtYVR5cGVTeXN0ZW0uaHRtbCI+SW50cm9kdWN0aW9uIAotICAgICAgdG8gU2NoZW1hIFR5cGUgU2lnbmF0dXJlczwvYT4uPC9kaXY+Ci0gIDwvbGk+Ci0gIDxsaT4gCi0gICAgPGRpdj5YTUxCZWFucyBwcm92aWRlcyBhY2Nlc3MgdG8gWE1MIHRocm91Z2ggWFF1ZXJ5LCB3aGljaCBib3Jyb3dzIHBhdGggc3ludGF4IAotICAgICAgZnJvbSBYUGF0aC4gV2l0aCBYUXVlcnksIHlvdSBjYW4gc3BlY2lmeSBzcGVjaWZpYyBmcmFnbWVudHMgb2YgWE1MIGRhdGEgCi0gICAgICB3aXRoIG9yIHdpdGhvdXQgc2NoZW1hLiBUbyBsZWFybiBtb3JlIGFib3V0IHVzaW5nIFhRdWVyeSBhbmQgWFBhdGggaW4gWE1MQmVhbnMsIAotICAgICAgc2VlIDxhIGhyZWY9ImNvblNlbGVjdGluZ1hNTHdpdGhYUXVlcnlQYXRoWFBhdGguaHRtbCI+U2VsZWN0aW5nIFhNTCB3aXRoIAotICAgICAgWFF1ZXJ5IGFuZCBYUGF0aDwvYT4uPC9kaXY+Ci0gIDwvbGk+Ci0gIDxsaT5Zb3UgY2FuIHVzZSB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlhtbEN1cnNvcjwvc3Bhbj4gaW50ZXJmYWNlIGZvciAKLSAgICBmaW5lLWdyYWluZWQgbmF2aWdhdGlvbiBhbmQgbWFuaXB1bGF0aW9uIG9mIFhNTC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSAKLSAgICA8YSBocmVmPSJjb25OYXZpZ2F0aW5nWE1Md2l0aEN1cnNvcnMuaHRtbCI+TmF2aWdhdGluZyBYTUwgd2l0aCBDdXJzb3JzPC9hPi48L2xpPgotPC91bD4KLTxkaXY+Ci0gIDxwIGNsYXNzPSJub3RlcGFyYSI+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBUaGUgeGJlYW4uamFyIGZpbGUgdGhhdCBjb250YWlucyAKLSAgICB0aGUgWE1MQmVhbnMgbGlicmFyeSBpcyBmdWxseSBmdW5jdGlvbmFsIGFzIGEgc3RhbmRhbG9uZSBsaWJyYXJ5LjwvcD4KLSAgPGgxPlJlbGF0ZWQgVG9waWNzPC9oMT4KLSAgPHA+PGEgaHJlZj0iLi4vLi4vc2FtcGxlcy9uYXZYTUxCZWFuc1NhbXBsZXMuaHRtbCI+WE1MQmVhbnMgU2FtcGxlczwvYT48L3A+Ci08L2Rpdj4KLTwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4gCi08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KLQotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS92Mi9kb2NzL2d1aWRlL2NvbkludHJvVG9UaGVTY2hlbWFUeXBlU3lzdGVtLmh0bWwgYi92Mi9kb2NzL2d1aWRlL2NvbkludHJvVG9UaGVTY2hlbWFUeXBlU3lzdGVtLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwZTg1YzcuLjAwMDAwMDAKLS0tIGEvdjIvZG9jcy9ndWlkZS9jb25JbnRyb1RvVGhlU2NoZW1hVHlwZVN5c3RlbS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjE2ICswLDAgQEAKLTwhZG9jdHlwZSBIVE1MIHB1YmxpYyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgRnJhbWVzZXQvL0VOIj4KLQotPGh0bWw+Ci08aGVhZD4KLTwhLS0gSW5zdGFuY2VCZWdpbkVkaXRhYmxlIG5hbWU9ImRvY3RpdGxlIiAtLT4KLTx0aXRsZT5JbnRyb2R1Y3Rpb24gdG8gU2NoZW1hIFR5cGUgU2lnbmF0dXJlczwvdGl0bGU+Ci08IS0tIEluc3RhbmNlRW5kRWRpdGFibGUgLS0+IAotPCEtLShNZXRhKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLQotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PSRDSEFSU0VUOyI+Ci0KLQotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0ibWV0YXRhZ3MiIC0tPgotCi08bWV0YSBjb250ZW50PSJ5b3VyIG5hbWUiIG5hbWU9ImF1dGhvciI+Ci08bWV0YSBjb250ZW50PSJBIGRlc2NyaXB0aW9uIG9mIHRoZSB0b3BpYyBjb250ZW50cy4iIG5hbWU9ImRlc2NyaXB0aW9uIj4KLTxtZXRhIGNvbnRlbnQ9ImtleXdvcmRzIHRvIGhlbHAgaW4gc2VhcmNoZXMiIG5hbWU9ImtleXdvcmRzIj4KLTxtZXRhIGNvbnRlbnQ9IjEwLzI1LzAyIiBuYW1lPSJkYXRlIGxhc3QgbW9kaWZpZWQiPgotPCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPgotCi08IS0tKExpbmtzKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iaGVhZCIgLS0+IAotPGxpbmsgaHJlZj0iLi4veG1sYmVhbnMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4KLTwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4KLTxsaW5rIGhyZWY9Ii4uL3htbGJlYW5zLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+Ci08YSBocmVmPSIuLi8uLi8uLi9jb3JlL2luZGV4Lmh0bWwiIGlkPSJpbmRleCI+PC9hPgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgc3JjPSIuLi8uLi8uLi9jb3JlL3RvcGljSW5mby5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiBzcmM9Ii4uLy4uLy4uL2NvcmUvQ29va2llQ2xhc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgc3JjPSIuLi8uLi8uLi9jb3JlL2Rpc3BsYXlDb250ZW50LmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLQotPCEtLShCb2R5KT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLTxib2R5PgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+Ci0KLTwvc2NyaXB0PgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iYm9keSIgLS0+IAotPGgxPiBJbnRyb2R1Y3Rpb24gdG8gU2NoZW1hIFR5cGUgU2lnbmF0dXJlczwvaDE+Ci08ZGl2IGlkPSJ0b3BpY3RleHQiPiAKLSAgPHA+V2hlbiB5b3UgY29tcGlsZSBzY2hlbWEsIHRoZSBBUEkgZ2VuZXJhdGVkIGZyb20geW91ciBzY2hlbWEgaXMgaW50ZWdyYXRlZCAKLSAgICB3aXRoIHRoZSBYTUxCZWFucyB0eXBlIHN5c3RlbSB0aGF0IHJlcHJlc2VudHMgdGhlIHVuZGVybHlpbmcgWE1MIHNjaGVtYS4gQWxsIAotICAgIHRvZ2V0aGVyLCB0aGVzZSB0eXBlcyBtYWtlIHVwIHRoZSA8ZW0+c2NoZW1hIHR5cGUgc3lzdGVtPC9lbT4gdG8gd2hpY2ggeW91ciAKLSAgICBjb2RlIGhhcyBhY2Nlc3MuIFdoZW4gaGFuZGxpbmcgWE1MIGJhc2VkIG9uIHRoZSBzY2hlbWEsIHlvdSB0eXBpY2FsbHkgY2FsbCAKLSAgICBtZXRob2RzIG9mIHRoZSBBUEkgZ2VuZXJhdGVkIHdoZW4geW91IGNvbXBpbGVkIHRoZSBzY2hlbWEuIEhvd2V2ZXIsIGZvciB0aGUgCi0gICAgY2FzZXMgd2hlbiB5b3Ugd2FudCB0byBnZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNjaGVtYSBpdHNlbGYsIHlvdSB1c2UgdGhlIAotICAgIHNjaGVtYSB0eXBlIHN5c3RlbSBBUEkuPC9wPgotICA8cD5JbiB0aGUgWE1MQmVhbnMgQVBJLCB5b3UgaGF2ZSBhY2Nlc3MgdG8gdGhlIHN5c3RlbSBpdHNlbGYgdGhyb3VnaCA8YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwiPjxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5TY2hlbWFUeXBlU3lzdGVtPC9zcGFuPjwvYT4gCi0gICAgYW5kIHJlbGF0ZWQgY2xhc3Nlcy4gVGhlc2UgbWFrZSB1cCBhIGtpbmQgb2YgJnF1b3Q7bWV0YS1BUEksJnF1b3Q7IG9yIGEgdmlldyAKLSAgICBvbiB0aGUgc2NoZW1hLiBZb3UgY2FuIHVzZSB0aGUgc2NoZW1hIHR5cGUgc3lzdGVtIEFQSSB0byBkaXNjb3ZlciB0aGUgdHlwZSAKLSAgICBzeXN0ZW0gYXQgcnVuIHRpbWUuIFNlZSB0aGUgcmVmZXJlbmNlIHRvcGljIG9uIHRoYXQgaW50ZXJmYWNlIGZvciBhbiBvdmVydmlldyAKLSAgICBvZiB0aGUgc2NoZW1hIHR5cGUgc3lzdGVtLjwvcD4KLSAgPGgyPlNjaGVtYSBUeXBlICZxdW90O1NpZ25hdHVyZXMmcXVvdDs8L2gyPgotICA8cD5BIHNjaGVtYSBpcyBtYWRlIHVwIG9mIHNjaGVtYSBjb21wb25lbnRzLiBTY2hlbWEgY29tcG9uZW50cyBhcmUgdGhlIHBpZWNlcyAKLSAgICBvZiBhIHNjaGVtYSwgc3VjaCBhcyBhIHR5cGUgZGVmaW5pdGlvbiwgYW4gZWxlbWVudCBkZWNsYXJhdGlvbiwgYXR0cmlidXRlIAotICAgIGRlY2xhcmF0aW9uLCBhbmQgc28gb24uIFRvIG1pcnJvciB0aGVzZSBpbiB0aGUgc2NoZW1hIHR5cGUgc3lzdGVtLCBhIDxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sIj48c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+U2NoZW1hQ29tcG9uZW50PC9zcGFuPjwvYT4gCi0gICAgaW5zdGFuY2UgcmVwcmVzZW50cyBhIGNvbXBvbmVudCBpbiB0aGUgdW5kZXJseWluZyBzY2hlbWE7IHNlcGFyYXRlIGNvbXBvbmVudHMgCi0gICAgaGF2ZSBjb3JyZXNwb25kaW5nIHR5cGVzLiBGb3IgZXhhbXBsZSB5b3Ugd291bGQgaGF2ZSBhIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L2E+PC9zcGFuPiAKLSAgICBvYmplY3QgZm9yIGEgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPkN1c3RvbWVyVHlwZTwvc3Bhbj4geW91ciBzY2hlbWEgZGVmaW5lZCwgCi0gICAgb3IgYSA8YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50Lmh0bWwiPjxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5TY2hlbWFHbG9iYWxFbGVtZW50PC9zcGFuPjwvYT4gCi0gICAgb2JqZWN0IGZvciBhIGdsb2JhbCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+UHVyY2hhc2VPcmRlcjwvc3Bhbj4gZWxlbWVudC4gCi0gICAgWW91IHdvdWxkIGFsc28gaGF2ZSBhIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5TY2hlbWFUeXBlPC9zcGFuPiBmb3IgYnVpbHQtaW4gCi0gICAgc2NoZW1hIHR5cGVzLCBzdWNoIGFzIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj54czpzdHJpbmc8L3NwYW4+IG9yIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj54czpkYXRldGltZTwvc3Bhbj4uIAotICAgIFhNTEJlYW4gcHJvdmlkZXMgYSAmcXVvdDtzaWduYXR1cmUmcXVvdDsgdG8gZGVzY3JpYmUgZWFjaCB0eXBlLiBZb3UgY2FuIHJldHJpZXZlIAotICAgIHRoaXMgc2lnbmF0dXJlIGJ5IGNhbGxpbmcgdGhlIFNjaGVtYVR5cGUgY2xhc3MncyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+dG9TdHJpbmc8L3NwYW4+IAotICAgIG1ldGhvZC48L3A+Ci0gIDxwPlRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+dG9TdHJpbmc8L3NwYW4+IG1ldGhvZCByZXR1cm5zIFhNTEJlYW5zJyB2ZXJzaW9uIAotICAgIG9mIGEgdW5pcXVlIHNpZ25hdHVyZSBmb3IgYSBzY2hlbWEgdHlwZS4gVGhpcyBzdHJpbmcgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgCi0gICAgYmVjYXVzZSBpdCBkZXNjcmliZXMgYSBnaXZlbiB0eXBlIGV2ZW4gd2hlbiB0aGUgdHlwZSBkb2Vzbid0IGhhdmUgYSBuYW1lLiAKLSAgPC9wPgotICA8cCBjbGFzcz0ibm90ZXBhcmEiPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gSXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCB0aGlzIAotICAgIHNpZ25hdHVyZSBpcyBhbiBYTUxCZWFucyBjb252ZW50aW9uLCByYXRoZXIgdGhhbiBhIHN0YW5kYXJkIGZyb20gdGhlIHNjaGVtYSAKLSAgICB3b3JraW5nIGdyb3VwLiBUaGUgd29ya2luZyBncm91cCBoYXMgbm90IHlldCBzdGFuZGFyZGl6ZWQgYSBzaWduYXR1cmUgZm9yIAotICAgIFhNTCBzY2hlbWEgdHlwZXMuIEFzIGEgcmVzdWx0IHRoZSBzaWduYXR1cmUgeW91J2xsIHNlZSBmcm9tIFhNTEJlYW5zIGlzIHN1YmplY3QgCi0gICAgdG8gY2hhbmdlICYjODIxMjsgd2hhdGV2ZXIgdGhlIHNjaGVtYSB3b3JraW5nIGdyb3VwIGNvbWVzIHVwIHdpdGggaW4gdGhlIGVuZCAKLSAgICAoaWYgYW55dGhpbmcpIGlzIHByb2JhYmx5IHdoYXQgd2lsbCBiZSB1c2VkIGJ5IHRoaXMgQVBJLiBJbiBvdGhlciB3b3JkcywgZG9uJ3QgCi0gICAgd3JpdGUgYSBwcm9ncmFtIHRvIGRlY29kZSB0aGUgc2lnbmF0dXJlLjwvcD4KLSAgPHA+WW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBkZXNjcmlwdGlvbiB0byB1bmRlcnN0YW5kIGhvdyBhIHNpZ25hdHVyZSBpcyBjb25zdHJ1Y3RlZC48L3A+Ci08L2Rpdj4KLTx1bD4KLSAgPGxpPiAKLSAgICA8ZGl2PjxzdHJvbmc+R2xvYmFsIHR5cGVzLjwvc3Ryb25nPiBJZiB0aGUgdHlwZSBoYXMgYSBuYW1lLCBpdCdzIGEgZ2xvYmFsIAotICAgICAgdHlwZS4gVGhlIGZvbGxvd2luZyBmb3JtIGlzIHVzZWQ6PC9kaXY+Ci0gICAgPGRpdj4gCi0gICAgICA8ZGl2PiAKLSAgICAgICAgPHByZT5UPSZsdDtsb2NhbG5hbWUmZ3Q7QCZsdDt0YXJnZXROYW1lc3BhY2UmZ3Q7PC9wcmU+Ci0gICAgICA8L2Rpdj4KLSAgICA8L2Rpdj4KLSAgICA8cD5UaGUgJnF1b3Q7VCZxdW90OyBpcyBmb3IgJnF1b3Q7dHlwZSwmcXVvdDsgb2YgY291cnNlLiAmcXVvdDtsb2NhbG5hbWUmcXVvdDsgCi0gICAgICBpcyBhIGNvbnZlbnRpb24gdXNlZCBieSBxbmFtZXMgKHF1YWxpZmllZCBuYW1lcyksIHdoaWNoIGluY2x1ZGUgYSBsb2NhbCAKLSAgICAgIG5hbWUgYW5kIHRoZSBuYW1lc3BhY2UgVVJJIChpZiBhbnkpLiBTbyBhbiBleGFtcGxlIG1pZ2h0IGJlOjwvcD4KLSAgICA8cHJlPlQ9Y3VzdG9tZXJAb3BlbnVyaS5vcmc8L3ByZT4KLSAgPC9saT4KLSAgPGxpPjxzdHJvbmc+RG9jdW1lbnQgdHlwZXMgYW5kIGdsb2JhbCBhdHRyaWJ1dGUgdHlwZXMuPC9zdHJvbmc+IFRoZXNlIGNvcnJlc3BvbmQgCi0gICAgdG8gYSBzcGVjaWFsIGFub255bW91cyB0eXBlIGNvbnRhaW5pbmcgb25lIGdsb2JhbCBlbGVtZW50IG9yIGF0dHJpYnV0ZS4gVGhlc2UgCi0gICAgc3BlY2lhbCB0eXBlcyBhcmUgZ2VuZXJhdGVkIGJ5IFhNTEJlYW5zIHRvIHJlcHJlc2VudCBnbG9iYWwgdHlwZXMgZGVjbGFyZWQgCi0gICAgd2l0aCB0aGUgJmx0O2VsZW1lbnQmZ3Q7IG9yICZsdDthdHRyaWJ1dGUmZ3Q7IHRhZyBpbiBzY2hlbWEuIEJlY2F1c2Ugc3VjaCAKLSAgICB0eXBlcyBhcmUgdHlwZXMsIGJ1dCBhcmUgZGVjbGFyZWQgYXMgZWxlbWVudHMgb3IgYXR0cmlidXRlcywgdGhleSByZXF1aXJlIAotICAgIHNwZWNpYWwgdHJlYXRtZW50LiBUaGUgZm9sbG93aW5nIHNpZ25hdHVyZSBmb3JtIGlzIHVzZWQ6IAotICAgIDxkaXY+IAotICAgICAgPHByZT4KLUQ9Jmx0O2RvY3VtZW50LWVsZW1lbnQtbmFtZSZndDtAJmx0O3RhcmdldE5hbWVzcGFjZSZndDsKLVI9Jmx0O2F0dHJpYnV0ZS10eXBlLW5hbWUmZ3Q7QCZsdDt0YXJnZXROYW1lc3BhY2UmZ3Q7Ci08L3ByZT4KLSAgICAgIDxkaXY+PC9kaXY+Ci0gICAgPC9kaXY+Ci0gICAgPGRpdj4gCi0gICAgICA8ZGl2Pk5vdGUgdGhhdCB0aGVzZSBhcmUgYWxzbyB0aGUgc2lnbmF0dXJlcyBvZiBhIHR5cGUgcmV0dXJuZWQgYnkgYSBGb29Eb2N1bWVudC50eXBlIAotICAgICAgICBvciBGb29BdHRyaWJ1dGUudHlwZSBtZXRob2QgY2FsbC48L2Rpdj4KLSAgICA8L2Rpdj4KLSAgPC9saT4KLSAgPGxpPjxzdHJvbmc+QW5vbnltb3VzIHR5cGVzLjwvc3Ryb25nPiBJZiB0aGUgdHlwZSBpcyBhbm9ueW1vdXMsIGl0IGlzIGRlZmluZWQgCi0gICAgYXMgYW4gZWxlbWVudCBvciBhdHRyaWJ1dGUsIG9yIHdpdGhpbiBhIGZ1cnRoZXIgYW5vbnltb3VzIHR5cGUuIEluIHRoaXMgY2FzZSwgCi0gICAgdGhlIHNpZ25hdHVyZSBpcyBidWlsdCBieSBlc3RhYmxpc2hpbmcgdGhlIGxvY2FsIGNvbnRleHQgKGluIG9yZGVyIHdvcmRzLCAKLSAgICB3aGF0IGlzIHRoZSBhbm9ueW1vdXMgdHlwZSBuZXN0ZWQgaW4/KS4gRnJvbSB0aGUgbG9jYWwgY29udGV4dCwgdGhlIGxhcmdlciAKLSAgICBjb250ZXh0IGlzIGJ1aWx0IHJlY3Vyc2l2ZWx5LiBJbiBvdGhlciB3b3JkcywgdGhlIHNpZ25hdHVyZSBpcyBidWlsdCBieSBnaXZpbmcgCi0gICAgbm90IG9ubHkgdGhlIGFub255bW91cyB0eXBlIGl0c2VsZiwgYnV0IGFsc28gYnkgZGVzY3JpYmluZyBpdHMgY29udGV4dC4gCi0gICAgPHA+IFRoZSBmb2xsb3dpbmcgcnVsZXMgYXJlIHVzZWQgZm9yIGJ1aWxkaW5nIGEgc2lnbmF0dXJlIGZvciBhbiBhbm9ueW1vdXMgCi0gICAgICB0eXBlLiA8L3A+Ci0gICAgPHVsPgotICAgICAgPGxpPiBJdCBtaWdodCBiZSBhbiBhbm9ueW1vdXMgdHlwZSBkZWZpbmVkIGluc2lkZSBhIGxvY2FsIGVsZW1lbnQgb3IgYXR0cmlidXRlLCAKLSAgICAgICAgd2hpY2ggaW4gdHVybiBpcyBkZWZpbmVkIHdpdGhpbiBzb21ldGhpbmcgZWxzZTogCi0gICAgICAgIDxwPklmIHRoZSBlbGVtZW50IGlzIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIiBzdHlsZT0ibGFuZ2lubGluZSI+Zm9ybT0mcXVvdDtxdWFsaWZpZWQmcXVvdDs8L3NwYW4+IAotICAgICAgICAgICh0aGUgdXN1YWwgZGVmYXVsdCk6PC9wPgotICAgICAgPC9saT4KLSAgICA8L3VsPgotICA8L2xpPgotICA8YmxvY2txdW90ZT4gCi0gICAgPGRpdj4gCi0gICAgICA8cHJlPkU9Jmx0O2VsdG5hbWUmZ3Q7fCZsdDtzaWduYXR1cmUgb2YgdGhlIHR5cGUgd2l0aGluIHdoaWNoIHRoZSBlbHQgaXMgZGVmaW5lZCZndDs8L3ByZT4KLSAgICA8L2Rpdj4KLSAgICA8ZGl2PklmIHRoZSBlbGVtZW50IGlzIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIiBzdHlsZT0ibGFuZ2lubGluZSI+Zm9ybT0mcXVvdDt1bnF1YWxpZmllZCZxdW90Ozwvc3Bhbj46PC9kaXY+Ci0gICAgPGRpdj4gCi0gICAgICA8cHJlPlU9Jmx0O2VsdG5hbWUmZ3Q7fCZsdDtzaWduYXR1cmUgb2YgdGhlIHR5cGUgd2l0aGluIHdoaWNoIHRoZSBlbHQgaXMgZGVmaW5lZCZndDs8L3ByZT4KLSAgICA8L2Rpdj4KLSAgICA8ZGl2PklmIHRoZSBhdHRyaWJ1dGUgaXMgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiIHN0eWxlPSJsYW5nbGluZSI+Zm9ybT0mcXVvdDt1bnF1YWxpZmllZCZxdW90Ozwvc3Bhbj4gCi0gICAgICAodGhlIHVzdWFsIGRlZmF1bHQpOjwvZGl2PgotICAgIDxkaXY+IAotICAgICAgPHByZT5BPSZsdDthdHRybmFtZSZndDt8Jmx0O3NpZ25hdHVyZSBvZiB0aGUgdHlwZSB3aXRoaW4gdGhlIGF0dHIgaXMgZGVmaW5lZCZndDs8L3ByZT4KLSAgICA8L2Rpdj4KLSAgICA8ZGl2PmlmIHRoZSBhdHRyaWJ1dGUgaXMgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiIHN0eWxlPSJsYW5naW5saW5lIj5mb3JtPSZxdW90O3F1YWxpZmllZCZxdW90Ozwvc3Bhbj46PC9kaXY+Ci0gICAgPGRpdj4gCi0gICAgICA8cHJlPlE9Jmx0O2F0dHJuYW1lJmd0O3wmbHQ7c2lnbmF0dXJlIG9mIHRoZSB0eXBlIHdpdGhpbiB0aGUgYXR0ciBpcyBkZWZpbmVkJmd0OzwvcHJlPgotICAgIDwvZGl2PgotICA8L2Jsb2NrcXVvdGU+Ci0gIDx1bD4KLSAgICA8bGk+SXQgbWlnaHQgYmUgYW4gYW5vbnltb3VzIHR5cGUgZGVmaW5lZCBhIHNpbXBsZSByZXN0cmljdGlvbiwgdW5pb24sIG9yIAotICAgICAgbGlzdCBkZWZpbml0aW9uOjwvbGk+Ci0gIDwvdWw+Ci0gIDxibG9ja3F1b3RlPiAKLSAgICA8ZGl2PiAKLSAgICAgIDxwcmU+TT0jfCZsdDtzaWduYXR1cmUgb2YgdGhlIGNvbnRhaW5pbmcgdW5pb24gdHlwZSZndDs8L3ByZT4KLSAgICAgIDxwPihUaGUgIyBpcyBhIG51bWJlciBpbmRpY2F0aW5nIHdoaWNoIHVuaW9uIG1lbWJlciBpdCBpcywgYnkgc291cmNlIG9yZGVyIAotICAgICAgICAmIzgyMTI7IHN1Y2ggYXMgMCwxLDIsIGV0Yy4pPC9wPgotICAgICAgPHByZT5CPXwmbHQ7c2lnbmF0dXJlIG9mIHRoZSBjb250YWluaW5nIGJhc2UgdHlwZSBmb3IgYSByZXN0cmljdGlvbiZndDs8L3ByZT4KLSAgICAgIDxwcmU+ST18Jmx0O3NpZ25hdHVyZSBvZiB0aGUgY29udGFpbmluZyBsaXN0IHR5cGUmZ3Q7PC9wcmU+Ci0gICAgPC9kaXY+Ci0gIDwvYmxvY2txdW90ZT4KLSAgPHVsPgotICAgIDxsaT4gCi0gICAgICA8ZGl2PiBJbiB0aGUgZnV0dXJlIGlmIGFub255bW91cyB0eXBlcyBhcmUgYWxsb3dlZCBpbiBzb21lIG90aGVyIGNvbnRleHQsIAotICAgICAgICB0aGVyZSBtYXkgYmUgbW9yZSBjb2Rlcy48L2Rpdj4KLSAgICA8L2xpPgotICA8L3VsPgotPC91bD4KLTxoMj5BbiBFeGFtcGxlPC9oMj4KLTxwPlNvLCBmb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgYSB0eXBlIHRoYXQgZGVzY3JpYmVzIHRoZSBsaXN0IGl0ZW1zIHdpdGhpbiBhbiAKLSAgYXR0cmlidXRlIG9mIGFuIGluc3RhbmNlIHRoYXQgbG9va3MgbGlrZSB0aGlzOjwvcD4KLTxibG9ja3F1b3RlPiAKLSAgPGRpdj4gCi0gICAgPHByZT4gJmx0O3Jvb3QgbXlsaXN0PSZxdW90OzQzMiA5OTkgMTQzIDEyMyZxdW90Oy8mZ3Q7PC9wcmU+Ci0gIDwvZGl2PgotPC9ibG9ja3F1b3RlPgotPGRpdj4gVGhlIHNjaGVtYSwgaWYgZG9uZSB3aXRoIGxvdHMgb2YgbmVzdGVkIHR5cGVzLCBjb3VsZCBsb29rIHNvbWV0aGluZyBsaWtlIAotICB0aGlzOjwvZGl2PgotPGJsb2NrcXVvdGU+Ci0gIDxkaXY+Ci0gICAgPHByZT4KLSZsdDtzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSZxdW90O215TmFtZXNwYWNlJnF1b3Q7IGVsZW1lbnRGb3JtRGVmYXVsdD0mcXVvdDtxdWFsaWZpZWQmcXVvdDsmZ3Q7Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7ZWxlbWVudCBuYW1lPSZxdW90O3Jvb3QmcXVvdDsmZ3Q7Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7Y29tcGxleFR5cGUmZ3Q7Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7YXR0cmlidXRlIG5hbWU9JnF1b3Q7bXlsaXN0JnF1b3Q7Jmd0OwotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jmx0O3NpbXBsZVR5cGUmZ3Q7Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7bGlzdCZndDsKLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZsdDtzaW1wbGVUeXBlJmd0OyAmbHQ7IS0tVGhpcyBpcyB0aGUgdHlwZSB0aGF0IHRoZSBzaWduYXR1cmUgaXMgZm9yIC0tJmd0OwotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jmx0O3Jlc3RyaWN0aW9uIGJhc2U9JnF1b3Q7eHM6bm9uTmVnYXRpdmVJbnRlZ2VyJnF1b3Q7Jmd0OwotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jmx0O3RvdGFsRGlnaXRzIHZhbHVlPSZxdW90OzMmcXVvdDsvJmd0Oy4uCi08L3ByZT4KLSAgPC9kaXY+Ci08L2Jsb2NrcXVvdGU+Ci08ZGl2PiBUaGUgc2lnbmF0dXJlIGZvciB0aGUgc2ltcGxlVHlwZSBpbmRpY2F0ZWQgaW4gdGhlIGV4YW1wbGUgd291bGQgYmU6PC9kaXY+Ci08YmxvY2txdW90ZT4KLSAgPHByZT5JPXxBPW15bGlzdHxFPXJvb3R8RD1yb290QG15TmFtZXNwYWNlPC9wcmU+Ci08L2Jsb2NrcXVvdGU+Ci08ZGl2PiAKLSAgPHA+WW91IGNvdWxkIHJlYWQgdGhpcyBhczogPC9wPgotPC9kaXY+Ci08YmxvY2txdW90ZT4KLSAgPGRpdj4mcXVvdDtUaGUgdHlwZSBvZiB0aGUgbGlzdCBpdGVtIHwgd2l0aGluIHRoZSB0eXBlIG9mIHRoZSBteWxpc3QgYXR0cmlidXRlJ3MgCi0gICAgdHlwZSB8IHdpdGhpbiB0aGUgdHlwZSBvZiB0aGUgcm9vdCBlbGVtZW50IHwgd2l0aGluIHRoZSBkb2N1bWVudCB0eXBlIGZvciAKLSAgICAmbHQ7cm9vdCZndDsgZG9jdW1lbnRzIHwgaW4gdGhlIG15TmFtZXNwYWNlIG5hbWVzcGFjZSZxdW90Oy48L2Rpdj4KLTwvYmxvY2txdW90ZT4KLTxkaXY+IAotICA8cD5Ob3RlIHRoYXQgdGhlIHNpZ25hdHVyZSBzdHJ1Y3R1cmUgbWlycm9ycyB0aGUgSmF2YSBjbGFzcyBzdHJ1Y3R1cmUgZ2VuZXJhdGVkIAotICAgIGJ5IFhNTEJlYW5zIHdoZW4gY29tcGlsaW5nIHRoZSBzY2hlbWEuIEluIG90aGVyIHdvcmRzLCBpZiB5b3Ugd2VyZSB0byBjb21waWxlIAotICAgIGEgc2NoZW1hIHRoYXQgaW5jbHVkZWQgdGhlIHByZWNlZGluZyBzbmlwcGV0LCB5b3Ugd291bGQgYmUgYWJsZSB0byBhY2Nlc3MgCi0gICAgYW4gaW5zdGFuY2Ugb2YgdGhlIHNjaGVtYSB3aXRoIEphdmEgY29kZSBsaWtlIHRoZSBmb2xsb3dpbmc6PC9wPgotICA8cHJlPlNjaGVtYVR5cGUgc1R5cGUgPSBSb290RG9jdW1lbnQuUm9vdC5NeUxpc3QuSXRlbS50eXBlOzwvcHJlPgotPC9kaXY+Ci08cCBjbGFzcz0icmVsYXRlZHRvcGljcyI+UmVsYXRlZCBUb3BpY3M8L3A+Ci08cD48YSBocmVmPSJjb25HZXR0aW5nU3RhcnRlZHdpdGhYTUxCZWFucy5odG1sIj5HZXR0aW5nIFN0YXJ0ZWQgd2l0aCBYTUxCZWFuczwvYT48L3A+Ci08IS0tIEluc3RhbmNlRW5kRWRpdGFibGUgLS0+IAotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+Ci0KLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdjIvZG9jcy9ndWlkZS9jb25KYXZhVHlwZXNHZW5lcmF0ZWRGcm9tVXNlckRlcml2ZWQuaHRtbCBiL3YyL2RvY3MvZ3VpZGUvY29uSmF2YVR5cGVzR2VuZXJhdGVkRnJvbVVzZXJEZXJpdmVkLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMTEyNDYuLjAwMDAwMDAKLS0tIGEvdjIvZG9jcy9ndWlkZS9jb25KYXZhVHlwZXNHZW5lcmF0ZWRGcm9tVXNlckRlcml2ZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ1OCArMCwwIEBACi08IWRvY3R5cGUgSFRNTCBwdWJsaWMgIi0vL1czQy8vRFREIEhUTUwgNC4wIEZyYW1lc2V0Ly9FTiI+Ci0KLTxodG1sPgotPGhlYWQ+Ci08IS0tIEluc3RhbmNlQmVnaW5FZGl0YWJsZSBuYW1lPSJkb2N0aXRsZSIgLS0+IAotPHRpdGxlPkphdmEgVHlwZXMgR2VuZXJhdGVkIGZyb20gU2NoZW1hPC90aXRsZT4KLTwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4gCi0KLTwhLS0oTWV0YSk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9JENIQVJTRVQ7Ij4KLQotCi08IS0tIEluc3RhbmNlQmVnaW5FZGl0YWJsZSBuYW1lPSJtZXRhdGFncyIgLS0+IAotCi08bWV0YSBuYW1lPSJjb21wb25lbnQiIGNvbnRlbnQ9IiI+Ci08IS0tIEluIHRoZSBkZXNjcmlwdGlvbiBtZXRhdGFnLCBwbGVhc2UgcHJvdmlkZSBhIEJSSUVGIGRlc2NyaXB0aW9uIG9mIHRoZSB0b3BpYyBjb250ZW50cy4gLS0+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iIj4KLTwhLS0gSW4gdGhlIGNvbXBvbmVudCBtZXRhdGFnLCBwbGVhc2UgbGlzdCBrZXl3b3JkcyB0aGF0IHdpbGwgaGVscCBhIHVzZXIgc2VhcmNoIGZvciB0aGlzIHRvcGljLiAtLT4KLTxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSIiPgotPCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPgotCi08IS0tKExpbmtzKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iaGVhZCIgLS0+Ci0KLTxsaW5rIGhyZWY9Ii4uL3htbGJlYW5zLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+Ci0gCi08IS0tKE1ldGEpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPgotCi0KLQotPG1ldGEgbmFtZT0iYXV0aG9yIiBjb250ZW50PSJ5b3VyIG5hbWUiPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkEgZGVzY3JpcHRpb24gb2YgdGhlIHRvcGljIGNvbnRlbnRzLiI+Ci08bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0ia2V5d29yZHMgdG8gaGVscCBpbiBzZWFyY2hlcyI+Ci08bWV0YSBuYW1lPSJkYXRlIGxhc3QgbW9kaWZpZWQiIGNvbnRlbnQ9IjEwLzI1LzAyIj4KLTwhLS0oTGlua3MpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+Ci08IS0tKEJvZHkpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPjwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4KLTxsaW5rIGhyZWY9Ii4uL3htbGJlYW5zLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+Ci08YSBocmVmPSIuLi8uLi8uLi9jb3JlL2luZGV4Lmh0bWwiIGlkPSJpbmRleCI+PC9hPgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgc3JjPSIuLi8uLi8uLi9jb3JlL3RvcGljSW5mby5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiBzcmM9Ii4uLy4uLy4uL2NvcmUvQ29va2llQ2xhc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgc3JjPSIuLi8uLi8uLi9jb3JlL2Rpc3BsYXlDb250ZW50LmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLQotPCEtLShCb2R5KT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLTxib2R5PgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+Ci0KLTwvc2NyaXB0PgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iYm9keSIgLS0+Ci08aDE+IEphdmEgVHlwZXMgR2VuZXJhdGVkIGZyb20gVXNlci1EZXJpdmVkIFNjaGVtYSBUeXBlczwvaDE+Ci08ZGl2IGlkPSJ0b3BpY3RleHQiPiAKLSAgPHA+V2hlbiB5b3UgY29tcGlsZSBYTUwgc2NoZW1hLCB0aGUgcmVzdWx0aW5nIEFQSSBpcyBtYWRlIHVwIG9mIHR3byBjYXRlZ29yaWVzIAotICAgIG9mIHR5cGVzOiBidWlsdC1pbiB0eXBlcyB0aGF0IG1pcnJvciB0aG9zZSBpbiB0aGUgc2NoZW1hIHNwZWNpZmljYXRpb24gYW5kIAotICAgIG90aGVycyB0aGF0IGFyZSBnZW5lcmF0ZWQgZnJvbSB1c2VyLWRlcml2ZWQgc2NoZW1hIHR5cGVzLiBUaGlzIHRvcGljIHByb3ZpZGVzIAotICAgIGFuIG92ZXJ2aWV3IG9mIHRoZSBKYXZhIHR5cGVzIGdlbmVyYXRlZCBmb3IgdXNlci1kZXJpdmVkIHR5cGVzLCBkZXNjcmliaW5nIAotICAgIHRoZSBtZXRob2RzIHRoZSBKYXZhIHR5cGVzIHByb3ZpZGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGJ1aWx0LWluIHR5cGVzLCAKLSAgICBzZWUgPGEgaHJlZj0iY29uWE1MQmVhbnNTdXBwb3J0QnVpbHRJblNjaGVtYVR5cGVzLmh0bWwiPlhNTEJlYW5zIFN1cHBvcnQgZm9yIAotICAgIEJ1aWx0LUluIFNjaGVtYSBUeXBlczwvYT4uIEZvciBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWV0aG9kcyBleHBvc2VkIAotICAgIGJ5IGdlbmVyYXRlZCB0eXBlcywgc2VlIDxhIGhyZWY9ImNvbk1ldGhvZHNGb3JHZW5lcmF0ZWRKYXZhVHlwZXMuaHRtbCI+TWV0aG9kcyAKLSAgICBmb3IgR2VuZXJhdGVkIEphdmEgVHlwZXM8L2E+LjwvcD4KLSAgPHA+SW4gZ2VuZXJhbCwgYW4gQVBJIGdlbmVyYXRlZCBmcm9tIHNjaGVtYSBpcyBhbiBpbnR1aXRpdmUgbWVhbnMgdG8gYWNjZXNzIAotICAgIFhNTCBpbnN0YW5jZXMgYmFzZWQgb24gdGhlIHNjaGVtYS4gWW91J2xsIHByb2JhYmx5IGZpbmQgdGhhdCBmb3IgbW9zdCB1c2VzIAotICAgIGl0J3MgdW5uZWNlc3NhcnkgdG8ga25vdyB0aGUgcnVsZXMgZm9yIGdlbmVyYXRpbmcgaXQgaW4gb3JkZXIgdG8gdXNlIGl0LiBIb3dldmVyLCAKLSAgICBmb3IgdGhvc2UgY2FzZXMgd2hlbiBpdCdzIHVuY2xlYXIgd2hhdCdzIGdvaW5nIG9uIGJlaGluZCB0aGUgc2NlbmVzIChvciBpZiAKLSAgICB5b3UncmUganVzdCBjdXJpb3VzKSwgdGhpcyB0b3BpYyBkZXNjcmliZXMgdGhlIHJ1bGVzLjwvcD4KLSAgPHAgY2xhc3M9Im5vdGVwYXJhIj48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFRoZSBYTUxCZWFucyBBUEkgYWxzbyBwcm92aWRlcyBhIAotICAgIHdheSBmb3IgeW91IHRvIGdldCBpbmZvcm1hdGlvbiA8ZW0+YWJvdXQgPC9lbT50aGUgdHlwZSBzeXN0ZW0gaXRzZWxmICYjODIxMjsgCi0gICAgaW4gb3RoZXIgd29yZHMsIGFib3V0IHRoZSBBUEkgYW5kIHRoZSB1bmRlcmx5aW5nIHNjaGVtYS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIAotICAgIHNlZSA8YSBocmVmPSJjb25JbnRyb1RvVGhlU2NoZW1hVHlwZVN5c3RlbS5odG1sIj5JbnRyb2R1Y3Rpb24gdG8gU2NoZW1hIFR5cGUgCi0gICAgU2lnbmF0dXJlczwvYT4uPC9wPgotICA8cD5FYWNoIG9mIHRoZSB0eXBlcyBnZW5lcmF0ZWQgd2hlbiB5b3UgY29tcGlsZSBhIHNjaGVtYSBpcyBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgCi0gICAgZm9yIGFjY2VzcyB0byBYTUwgaW5zdGFuY2VzIGNvbmZvcm1pbmcgdG8gdGhhdCBwYXJ0IG9mIHRoZSBzY2hlbWEuIFN0YXJ0IGJ5IAotICAgIHRha2luZyBhIGxvb2sgYXQgYSBzaW1wbGUgWE1MIGFuZCBzY2hlbWEgZXhhbXBsZS4gVGhlIGZvbGxvd2luZyBzY2hlbWEgZGVzY3JpYmVzIAotICAgIGFuIFhNTCBkb2N1bWVudCB0byBjb250YWluIGEgc3RvY2sgcHJpY2UgcXVvdGUuPC9wPgotICA8cHJlPiZsdDt4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiZndDsKLSAgICAmbHQ7eHM6ZWxlbWVudCBuYW1lPSJwcmljZS1xdW90ZSImZ3Q7Ci0gICAgICAgICZsdDt4czpjb21wbGV4VHlwZSZndDsKLSAgICAgICAgICAgICZsdDt4czpzZXF1ZW5jZSZndDsKLSAgICAgICAgICAgICAgICAmbHQ7eHM6ZWxlbWVudCBuYW1lPSJzdG9jay1zeW1ib2wiIHR5cGU9InhzOnN0cmluZyIvJmd0OwotICAgICAgICAgICAgICAgICZsdDt4czplbGVtZW50IG5hbWU9InN0b2NrLXByaWNlIiB0eXBlPSJ4czpmbG9hdCIvJmd0OwotICAgICAgICAgICAgJmx0Oy94czpzZXF1ZW5jZSZndDsKLSAgICAgICAgJmx0Oy94czpjb21wbGV4VHlwZSZndDsKLSAgICAmbHQ7L3hzOmVsZW1lbnQmZ3Q7Ci0mbHQ7L3hzOnNjaGVtYSZndDsKLTwvcHJlPgotICA8cD5UaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgWE1MIHRoYXQgY29uZm9ybXMgdG8gdGhpcyBzY2hlbWEuPC9wPgotICA8cHJlPiZsdDtwcmljZS1xdW90ZSZndDsKLSAgICAmbHQ7c3RvY2stc3ltYm9sJmd0O0JFQVMmbHQ7L3N0b2NrLXN5bWJvbCZndDsKLSAgICAmbHQ7c3RvY2stcHJpY2UmZ3Q7NTkuMjEmbHQ7L3N0b2NrLXByaWNlJmd0OwotJmx0Oy9wcmljZS1xdW90ZSZndDs8L3ByZT4KLSAgPHA+V2hlbiB5b3UgY29tcGlsZSB0aGlzIHNjaGVtYSwgeW91IGdldCB0d28gZ2VuZXJhdGVkIFhNTEJlYW5zIGludGVyZmFjZXM6IAotICAgIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj4gUHJpY2VRdW90ZURvY3VtZW50PC9zcGFuPiBhbmQgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlByaWNlUXVvdGVEb2N1bWVudC5QcmljZVF1b3RlPC9zcGFuPi48L3A+Ci0gIDxwPkZyb20gdGhlIHNjaGVtYSBwb2ludCBvZiB2aWV3LCB0aGUgZ2VuZXJhdGVkIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5QcmljZVF1b3RlPC9zcGFuPiAKLSAgICBpbnRlcmZhY2UgcmVwcmVzZW50cyB0aGUgPGVtPmNvbXBsZXggdHlwZTwvZW0+IHlvdSBzZWUgaW5zaWRlIHRoZSBzY2hlbWEncyAKLSAgICA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+cHJpY2UtcXVvdGU8L3NwYW4+IGVsZW1lbnQgZGVjbGFyYXRpb24uIExvb2tpbmcgYXQgCi0gICAgdGhlIFhNTCBpbnN0YW5jZSwgeW91IGNhbiBzZWUgdGhhdCB0aGlzIGNvbXBsZXggdHlwZSB0cmFuc2xhdGVzIGludG8gYSBzZXF1ZW5jZSAKLSAgICBvZiB0d28gZWxlbWVudHMsIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5zdG9jay1zeW1ib2w8L3NwYW4+IGFuZCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+c3RvY2stcHJpY2U8L3NwYW4+LiAKLSAgICBTbyBpdCdzIG5vdCBzdXJwcmlzaW5nIHRoYXQgdGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5QcmljZVF1b3RlPC9zcGFuPiAKLSAgICBpbnRlcmZhY2UgZXhwb3NlcyBtZXRob2RzIHN1Y2ggYXMgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmdldFN0b2NrUHJpY2U8L3NwYW4+IAotICAgIGFuZCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+c2V0U3RvY2tQcmljZTwvc3Bhbj4gdG8gc2V0IHRoZSB2YWx1ZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+c3RvY2stcHJpY2U8L3NwYW4+IAotICAgIGVsZW1lbnQuPC9wPgotICA8cD5UaGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlByaWNlUXVvdGVEb2N1bWVudDwvc3Bhbj4gaW50ZXJmYWNlLCBvbiB0aGUgCi0gICAgb3RoZXIgaGFuZCwgcmVwcmVzZW50cyB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnByaWNlLXF1b3RlPC9zcGFuPiA8ZW0+ZG9jdW1lbnQ8L2VtPiAKLSAgICB0aGF0IGNvbnRhaW5zIHRoZSByb290IDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5wcmljZS1xdW90ZTwvc3Bhbj4gZWxlbWVudC4gCi0gICAgWE1MQmVhbnMgY3JlYXRlcyBhIHNwZWNpYWwgJnF1b3Q7ZG9jdW1lbnQmcXVvdDsgdHlwZSBmb3IgZ2xvYmFsIGVsZW1lbnQgdHlwZXMuIAotICAgIEEgZG9jdW1lbnQgdHlwZSBwcm92aWRlcyBhIHdheSBmb3IgeW91IHRvIGdldCBhbmQgc2V0IHRoZSB2YWx1ZSBvZiB0aGUgdW5kZXJseWluZyAKLSAgICB0eXBlLCBoZXJlIHJlcHJlc2VudGVkIGJ5IDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5QcmljZVF1b3RlPC9zcGFuPi4gVGhlIAotICAgIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5wcmljZS1xdW90ZTwvc3Bhbj4gZWxlbWVudCBpcyBjb25zaWRlcmVkIGEgPGVtPmdsb2JhbDwvZW0+IAotICAgIGVsZW1lbnQgYmVjYXVzZSBpdCBjYW4gYmUgcmVmZXJlbmNlZCBmcm9tIGFueXdoZXJlIGVsc2UgaW4gdGhlIHNjaGVtYS4gRm9yIAotICAgIGdsb2JhbCBlbGVtZW50cywgdGhlIFhNTEJlYW5zIHNjaGVtYSBjb21waWxlciBnZW5lcmF0ZXMgYW4gaW50ZXJmYWNlIHdob3NlIAotICAgIG5hbWUgZW5kcyB3aXRoICZxdW90O0RvY3VtZW50LiZxdW90OyBUaGlzIGlzIGJlY2F1c2UgYW4gWE1MIHNjaGVtYSBoYXMgbm8gCi0gICAgd2F5IG9mIGRlZmluaW5nIGEgJnF1b3Q7cm9vdCZxdW90OyBlbGVtZW50OyBhbnkgZ2xvYmFsIGVsZW1lbnQgY2FuIGJlIHRoZSAKLSAgICByb290LjwvcD4KLSAgPHA+VGhlIGZvbGxvd2luZyBiaXQgb2YgSmF2YSBjb2RlIGlsbHVzdHJhdGVzIGhvdyB5b3UgbWlnaHQgdXNlIHRoZXNlIGludGVyZmFjZXMgCi0gICAgdG8gZ2V0IHRoZSBzdG9jayBwcmljZSBjb250YWluZWQgaW4gdGhlIFhNTC48L3A+Ci0gIDxwcmU+Ci1wdWJsaWMgc3RhdGljIGZsb2F0IGdldFN0b2NrUHJpY2UoamF2YS5pby5GaWxlIG9yZGVyWE1MKSB0aHJvd3MgRXhjZXB0aW9uIAotewotICAgIFByaWNlUXVvdGVEb2N1bWVudCBkb2NYTUwgPSBQcmljZVF1b3RlRG9jdW1lbnQuRmFjdG9yeS5wYXJzZShvcmRlclhNTCk7Ci0gICAgUHJpY2VRdW90ZSBxdW90ZVhNTCA9IGRvY1hNTC5nZXRQcmljZVF1b3RlKCk7Ci0gICAgZmxvYXQgc3RvY2tQcmljZSA9IHF1b3RlWE1MLmdldFN0b2NrUHJpY2UoKTsKLSAgICByZXR1cm4gc3RvY2tQcmljZTsKLX0KLTwvcHJlPgotICA8cD5UaGlzIGNvZGUgbG9hZHMgdGhlIFhNTCBmcm9tIGEgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPkZpbGU8L3NwYW4+IG9iamVjdCwgCi0gICAgY29udmVydGluZyB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnBhcnNlPC9zcGFuPiBtZXRob2QncyByZXR1cm4gdmFsdWUgCi0gICAgdG8gYSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+UHJpY2VRdW90ZURvY3VtZW50PC9zcGFuPiBpbnN0YW5jZS4gSXQgdGhlbiAKLSAgICB1c2VzIHRoaXMgaW5zdGFuY2UgdG8gZ2V0IGFuIGluc3RhbmNlIG9mIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5QcmljZVF1b3RlPC9zcGFuPi4gCi0gICAgV2l0aCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+UHJpY2VRdW90ZTwvc3Bhbj4sIHRoZSBjb2RlIGV4dHJhY3RzIHRoZSBzdG9jayAKLSAgICBwcmljZS4gPC9wPgotPC9kaXY+Ci08ZGl2PiAKLSAgPGRpdiBpZD0idG9waWN0ZXh0Ij4gCi0gICAgPHA+VGhlIFhNTCBzY2hlbWEgc3BlY2lmaWNhdGlvbiBwcm92aWRlcyBhIHJpY2ggc2V0IG9mIHJ1bGVzIHRocm91Z2ggd2hpY2ggCi0gICAgICB5b3UgY2FuIGRlcml2ZSBuZXcgdHlwZXMuIFdoZW4geW91IGdlbmVyYXRlIGludGVyZmFjZXMgZnJvbSB5b3VyIHNjaGVtYSwgCi0gICAgICBYTUxCZWFucyB1c2VzIHRoZSBzY2hlbWEncyBydWxlcyB0byBkZXRlcm1pbmUgaG93IHRvIGdlbmVyYXRlIGludGVyZmFjZXMuIAotICAgICAgVGhlIGZvbGxvd2luZyBkZXNjcmliZXMgc29tZSBvZiB0aGUgZ3VpZGVsaW5lcyBieSB3aGljaCB0aGlzIGlzIGRvbmUuPC9wPgotICAgIDxoMj5OYW1lcyBmb3IgSW50ZXJmYWNlczwvaDI+Ci0gICAgPHA+SW50ZXJmYWNlcyBhcmUgZ2VuZXJhdGVkIGZvciBzY2hlbWEgdHlwZXMgKGJvdGggc2ltcGxlIGFuZCBjb21wbGV4KS4gQW5vbnltb3VzIAotICAgICAgc2NoZW1hIHR5cGVzIHJlc3VsdCBpbiBpbm5lciBpbnRlcmZhY2VzIGluc2lkZSB0aGUgdHlwZSBpbnRlcmZhY2UgaW4gd2hpY2ggCi0gICAgICB0aGV5IGFyZSBkZWZpbmVkLiBUaGVpciBuYW1lIGNvbWVzIGZyb20gdGhlIGVsZW1lbnQgb3IgYXR0cmlidXRlIGluIHdoaWNoIAotICAgICAgdGhleSBpcyBkZWZpbmVkLjwvcD4KLSAgICA8cD5OYW1lcyBmb3Igc2NoZW1hIHR5cGVzIGJlY29tZSBKYXZhLWZyaWVuZGx5IG5hbWVzIHdoZW4gdGhlIHNjaGVtYSBpcyBjb21waWxlZC4gCi0gICAgICBJbiBvdGhlciB3b3JkcywgbmFtZXMgc3VjaCBhcyAicHJpY2UtcXVvdGUiIGJlY29tZSAiUHJpY2VRdW90ZS4iIEluIGFkZGl0aW9uLCAKLSAgICAgIGEgc2NoZW1hJ3MgWE1MIG5hbWVzcGFjZSBVUklzIGJlY29tZSBwYWNrYWdlIG5hbWVzIGZvciBYTUxCZWFuIHR5cGVzIGdlbmVyYXRlZCAKLSAgICAgIGZyb20gdGhlIHNjaGVtYS4gVGhlIHdheSB0aGlzIG5hbWUgdHJhbnNsYXRpb24gaXMgZG9uZSBpcyBkZXNjcmliZWQgYnkgc2VjdGlvbiAKLSAgICAgIEMgb2YgdGhlIEphdmEgQVBJIGZvciBYTUwgQmluZGluZyAoSkFYQikgc3BlY2lmaWNhdGlvbiBhdCA8YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9kb3dubG9hZHMvamF4Yi5odG1sIiB0YXJnZXQ9Il9ibGFuayI+IAotICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvamF4Yi5odG1sLjwvYT4gPC9wPgotICAgIDxwPkhlcmUgYXJlIGEgZmV3IGV4YW1wbGVzOjwvcD4KLSAgICA8dGFibGU+Ci0gICAgICA8dHI+IAotICAgICAgICA8dGQ+PHN0cm9uZz5TY2hlbWEgVGFyZ2V0IE5hbWVzcGFjZTwvc3Ryb25nPjwvdGQ+Ci0gICAgICAgIDx0ZCB3aWR0aD0iMTU1Ij48c3Ryb25nPlhNTCBMb2NhbG5hbWU8L3N0cm9uZz48L3RkPgotICAgICAgICA8dGQ+PHN0cm9uZz5GdWxseS1RdWFsaWZpZWQgWE1MQmVhbiBUeXBlIE5hbWU8L3N0cm9uZz48L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4gCi0gICAgICAgIDx0ZD5odHRwOi8vd3d3Lm15Y29tcGFueS5jb20vMjAwMi9idXllcjwvdGQ+Ci0gICAgICAgIDx0ZCB3aWR0aD0iMTU1Ij5wdXJjaGFzZS1vcmRlci00PC90ZD4KLSAgICAgICAgPHRkPmNvbS5teWNvbXBhbnkueDIwMDIuYnV5ZXIuUHVyY2hhc2VPcmRlcjQ8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4gCi0gICAgICAgIDx0ZD5odHRwOi8vbXljby5jb20vc2FtcGxlLmh0bWw8L3RkPgotICAgICAgICA8dGQgd2lkdGg9IjE1NSI+U2FtcGxlRG9jdW1lbnQ8L3RkPgotICAgICAgICA8dGQ+Y29tLm15Y28uc2FtcGxlLlNhbXBsZURvY3VtZW50PC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+IAotICAgICAgICA8dGQ+aHR0cDovL29wZW51cmkub3JnL3Rlc3RfY2FzZV8xPC90ZD4KLSAgICAgICAgPHRkIHdpZHRoPSIxNTUiPnRlc3RfdHlwZTwvdGQ+Ci0gICAgICAgIDx0ZD5vcmcub3BlbnVyaS50ZXN0Q2FzZTEuVGVzdFR5cGU8L3RkPgotICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIDxwPldoZW4gdGhlcmUgYXJlIG5hbWUgY29sbGlzaW9ucywgdGhlIGdlbmVyYXRlZCB0eXBlcyB3aWxsIGhhdmUgbmFtZXMgd2l0aCAKLSAgICAgIG51bWVyYWxzIGFwcGVuZGVkJm5ic3A7lyBmb3IgZXhhbXBsZSwgIlRlc3RUeXBlMiIuPC9wPgotICAgIDxoMj5HbG9iYWwgRWxlbWVudHMgYW5kIEF0dHJpYnV0ZXM8L2gyPgotICAgIDxwPkluIHNjaGVtYSwgZ2xvYmFsIGVsZW1lbnQgYW5kIGF0dHJpYnV0ZSBkZWZpbml0aW9ucyBhcmUgdGhvc2UgdGhhdCBhcmUgCi0gICAgICBkZWNsYXJlZCBhdCB0aGUgdG9wIGxldmVsIG9mIHRoZSBzY2hlbWEgKHRoYXQgaXMsIGltbWVkaWF0ZWx5IHdpdGhpbiB0aGUgCi0gICAgICA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+c2NoZW1hPC9zcGFuPiByb290IGVsZW1lbnQpLiBCZWNhdXNlIHRoZXkgYXJlIGdsb2JhbCwgCi0gICAgICB0aGV5IG1heSBiZSByZWZlcmVuY2VkIGZyb20gaW5zaWRlIHRoZSBzY2hlbWEgYnkgbmFtZS4gVGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5jcmVkaXRSZXBvcnQ8L3NwYW4+IAotICAgICAgKG5vdCB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmNyZWRpdFJlcG9ydFR5cGU8L3NwYW4+IGNvbXBsZXggdHlwZSkgCi0gICAgICBlbGVtZW50IGRlZmluZWQgaW4gdGhlIGZvbGxvd2luZyBzY2hlbWEgaXMgYW4gZXhhbXBsZS48L3A+Ci0gICAgPHByZT4KLSZsdDt4czpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSZxdW90O2h0dHA6Ly9vcGVudXJpLm9yZy9zYW1wbGVzL2NyZWRpdFJlcG9ydCZxdW90OyAKLSAgICB4bWxuczpjcj0mcXVvdDtodHRwOi8vb3BlbnVyaS5vcmcvc2FtcGxlcy9jcmVkaXRSZXBvcnQmcXVvdDsgCi0gICAgeG1sbnM6eHM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEmcXVvdDsKLSAgICBlbGVtZW50Rm9ybURlZmF1bHQ9JnF1b3Q7cXVhbGlmaWVkJnF1b3Q7Ci0gICAgYXR0cmlidXRlRm9ybURlZmF1bHQ9JnF1b3Q7dW5xdWFsaWZpZWQmcXVvdDsmZ3Q7Ci0gICAgJmx0O3hzOmNvbXBsZXhUeXBlIG5hbWU9JnF1b3Q7Y3JlZGl0UmVwb3J0VHlwZSZxdW90OyZndDsKLSAgICAgICAgJmx0O3hzOnNlcXVlbmNlJmd0OwotICAgICAgICAgICAgJmx0O3hzOmVsZW1lbnQgbmFtZT0mcXVvdDtiYW5rUmVwb3J0JnF1b3Q7IHR5cGU9JnF1b3Q7eHM6c3RyaW5nJnF1b3Q7LyZndDsKLSAgICAgICAgICAgICZsdDt4czplbGVtZW50IG5hbWU9JnF1b3Q7dGF4UmVwb3J0JnF1b3Q7IHR5cGU9JnF1b3Q7eHM6c3RyaW5nJnF1b3Q7LyZndDsKLSAgICAgICAgJmx0Oy94czpzZXF1ZW5jZSZndDsKLSAgICAmbHQ7L3hzOmNvbXBsZXhUeXBlJmd0OwotICAgICZsdDt4czplbGVtZW50IG5hbWU9JnF1b3Q7Y3JlZGl0UmVwb3J0JnF1b3Q7IHR5cGU9JnF1b3Q7Y3I6Y3JlZGl0UmVwb3J0VHlwZSZxdW90Oy8mZ3Q7Ci0mbHQ7L3hzOnNjaGVtYSZndDs8L3ByZT4KLSAgICA8cD5YTUxCZWFucyBnZW5lcmF0ZXMgYSBzZXBhcmF0ZSBpbnRlcmZhY2UgZm9yIGVhY2ggb2YgdGhlc2UuIEFsc28sIGdsb2JhbCAKLSAgICAgIGVsZW1lbnQgYW5kIGF0dHJpYnV0ZSB0eXBlcyBhcmUgc29tZXdoYXQgdW5pcXVlIGluIHRoYXQgdGhlIHNjaGVtYSBjb21waWxlciAKLSAgICAgIHdpbGwgY3JlYXRlIHNwZWNpYWwgdHlwZXMgdG8gaG9sZCB0aGUgZ2xvYmFsbHkgZGVmaW5lZCBlbGVtZW50IG9yIGF0dHJpYnV0ZS4gCi0gICAgICBUaGUgbmFtZXMgb2YgdGhlc2UgdHlwZXMgd2lsbCBiZSBhcHBlbmRlZCB3aXRoICZxdW90O0RvY3VtZW50JnF1b3Q7IChmb3IgCi0gICAgICBlbGVtZW50cykgb3IgJnF1b3Q7QXR0cmlidXRlJnF1b3Q7IChmb3IgYXR0cmlidXRlcykuIFlvdSBjYW4gcmV0cmlldmUgdGhlIAotICAgICAgZWxlbWVudCBvciBhdHRyaWJ1dGUgaXRzZWxmIChvciBjcmVhdGUgYSBuZXcgb25lKSBieSBjYWxsaW5nIHRoZSBhY2Nlc3NvciAKLSAgICAgIG1ldGhvZHMgdGhhdCB0aGUgc3BlY2lhbCB0eXBlcyBwcm92aWRlLiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgd291bGQgY3JlYXRlIAotICAgICAgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNyZWRpdFJlcG9ydCBlbGVtZW50LjwvcD4KLSAgICA8cHJlPgotLy8gQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBzcGVjaWFsIGRvY3VtZW50IHR5cGUuCi1DcmVkaXRSZXBvcnREb2N1bWVudCByZXBvcnREb2MgPSBDcmVkaXRSZXBvcnREb2N1bWVudC5GYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0vKgotICogVXNlIHRoZSBkb2N1bWVudCB0eXBlIHRvIGFkZCBhIG5ldyBjcmVkaXRSZXBvcnQgZWxlbWVudCB0byB0aGUgWE1MIGluc3RhbmNlLgotICogTm90ZSB0aGF0IHRoZSB0eXBlIHJldHVybmVkIGJ5IHRoZSBhZGROZXdDcmVkaXRSZXBvcnQgbWV0aG9kIGlzIHRoZSAKLSAqIGNyZWRpdFJlcG9ydFR5cGUgY29tcGxleCB0eXBlIGRlZmluZWQgZm9yIGl0IGluIHNjaGVtYS4KLSAqLwotQ3JlZGl0UmVwb3J0VHlwZSByZXBvcnQgPSByZXBvcnREb2MuYWRkTmV3Q3JlZGl0UmVwb3J0KCk7Ci08L3ByZT4KLSAgICA8aDI+R2xvYmFsIFVzZXItRGVyaXZlZCBUeXBlczwvaDI+Ci0gICAgPHA+QSA8ZW0+dXNlci1kZXJpdmVkPC9lbT4gdHlwZSBpcyBvbmUgZGVmaW5lZCB3aXRoIGEgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmNvbXBsZXhUeXBlPC9zcGFuPiAKLSAgICAgIG9yIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5zaW1wbGVUeXBlPC9zcGFuPiBlbGVtZW50IGluIHNjaGVtYS4gVXNlci1kZXJpdmVkIAotICAgICAgdHlwZXMgYXQgdGhlIHRvcCBsZXZlbCBvZiBhIHNjaGVtYSBhcmUgZ2xvYmFsLiBYTUxCZWFucyBnZW5lcmF0ZXMgYW4gaW50ZXJmYWNlIAotICAgICAgZm9yIGVhY2ggb2YgdGhlc2UsIGFzIGl0IGRvZXMgd2l0aCBnbG9iYWwgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMuIFRoZXNlIAotICAgICAgaW50ZXJmYWNlcyBpbmNsdWRlIG1ldGhvZHMgdGhyb3VnaCB3aGljaCB5b3UgY2FuIGdldCBhbmQgc2V0IHRoZSB0eXBlJ3MgCi0gICAgICB2YWx1ZXMsIGluY2x1ZGluZyBhbnkgbmVzdGVkIGRlcml2ZWQgdHlwZXMgaXQgbWF5IGNvbnRhaW4uIFRoZSBmb2xsb3dpbmcgCi0gICAgICBzY2hlbWEgc25pcHBldCBkZWZpbmVzIGEgdXNlci1kZXJpdmVkIGNvbXBsZXggdHlwZSBjYWxsZWQgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPml0ZW1UeXBlPC9zcGFuPiwgCi0gICAgICBhbG9uZyB3aXRoIGEgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnByaWNlVHlwZTwvc3Bhbj4gdGhhdCB1c2VzIGl0IGFzIHRoZSAKLSAgICAgIHR5cGUgZm9yIGFuIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5pdGVtPC9zcGFuPiBjaGlsZCBlbGVtZW50LjwvcD4KLSAgICA8cHJlPgotJmx0O3hzOmNvbXBsZXhUeXBlIG5hbWU9JnF1b3Q7aXRlbVR5cGUmcXVvdDsmZ3Q7Ci0gICAgJmx0O3hzOnNlcXVlbmNlJmd0OwotICAgICAgICAmbHQ7eHM6ZWxlbWVudCBuYW1lPSZxdW90O25hbWUmcXVvdDsgdHlwZT0mcXVvdDt4czpzdHJpbmcmcXVvdDsvJmd0OwotICAgICAgICAmbHQ7eHM6ZWxlbWVudCBuYW1lPSZxdW90O2Ftb3VudCZxdW90OyB0eXBlPSZxdW90O3hzOmludCZxdW90Oy8mZ3Q7Ci0gICAgICAgICZsdDt4czplbGVtZW50IG5hbWU9JnF1b3Q7cHJpY2UmcXVvdDsgdHlwZT0mcXVvdDt4czpkb3VibGUmcXVvdDsvJmd0OwotICAgICZsdDsveHM6c2VxdWVuY2UmZ3Q7Ci0mbHQ7L3hzOmNvbXBsZXhUeXBlJmd0OwotJmx0O3hzOmNvbXBsZXhUeXBlIG5hbWU9JnF1b3Q7cHJpY2VUeXBlJnF1b3Q7Jmd0OwotICAgICZsdDt4czpzZXF1ZW5jZSZndDsKLSAgICAgICAgJmx0O3hzOmVsZW1lbnQgbmFtZT0mcXVvdDtpdGVtJnF1b3Q7IHR5cGU9JnF1b3Q7cHM6aXRlbVR5cGUmcXVvdDsgbWluT2NjdXJzPSZxdW90OzAmcXVvdDsgbWF4T2NjdXJzPSZxdW90O3VuYm91bmRlZCZxdW90Oy8mZ3Q7Ci0gICAgJmx0Oy94czpzZXF1ZW5jZSZndDsKLSZsdDsveHM6Y29tcGxleFR5cGUmZ3Q7Ci0mbHQ7eHM6ZWxlbWVudCBuYW1lPSZxdW90O3ByaWNlJnF1b3Q7IHR5cGU9JnF1b3Q7cHM6cHJpY2VUeXBlJnF1b3Q7LyZndDsKLTwvcHJlPgotICAgIDxwPkJ5IGRlZmF1bHQsIHRoZSBnZW5lcmF0ZWQgSmF2YSB0eXBlIGZvciA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+aXRlbVR5cGU8L3NwYW4+IAotICAgICAgd291bGQgYmUgYW4gaW50ZXJmYWNlIGNhbGxlZCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+SXRlbVR5cGU8L3NwYW4+LiBXaXRoIAotICAgICAgdGhpcyB0eXBlLCB5b3Ugd291bGQgYmUgYWJsZSB0byBnZXQgYW5kIHNldCB0aGUgdmFsdWVzIG9mIGl0cyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+bmFtZTwvc3Bhbj4sIAotICAgICAgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmFtb3VudDwvc3Bhbj4sIGFuZCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+cHJpY2U8L3NwYW4+IAotICAgICAgY2hpbGQgZWxlbWVudHMuIEhvd2V2ZXIsIGEgdXNlci1kZXJpdmVkIHR5cGUgKGFzIG9wcG9zZWQgdG8gYW4gZWxlbWVudCBvciAKLSAgICAgIGF0dHJpYnV0ZSkgaXMgYWx3YXlzIGludGVuZGVkIGZvciB1c2UgYXMgdGhlIHR5cGUgdG8gd2hpY2ggYW4gZWxlbWVudCBvciAKLSAgICAgIGF0dHJpYnV0ZSBpcyBib3VuZC4gSW4gb3RoZXIgd29yZHMsIGl0J3MgY29udGFpbmVkIGJ5IGFuIGVsZW1lbnQgb3IgYXR0cmlidXRlLiAKLSAgICAgIFdoaWxlIHlvdSBjYW4gY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGEgdXNlci1kZXJpdmVkIHR5cGUsIHRoZSBuZXcgaW5zdGFuY2UncyAKLSAgICAgIHVuZGVybHlpbmcgWE1MIGlzIGEgZnJhZ21lbnQuIEFzIHRoZSBnZW5lcmF0ZWQgQVBJIHdvdWxkIG1ha2UgY2xlYXIsIHRoZSAKLSAgICAgIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5pdGVtVHlwZTwvc3Bhbj4gYmVjb21lcyB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnZXQgCi0gICAgICBtZXRob2QsIG9yIHRoZSBwYXJhbWV0ZXIgb2YgYSBzZXQgbWV0aG9kLjwvcD4KLSAgICA8cHJlPgotLy8gQ3JlYXRlIGEgbmV3IHByaWNlIGRvY3VtZW50LgotUHJpY2VEb2N1bWVudCBwcmljZURvYyA9IFByaWNlRG9jdW1lbnQuRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotUHJpY2VUeXBlIHByaWNlID0gcHJpY2VEb2MuZ2V0UHJpY2UoKTsKLQotLyogCi0gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgSXRlbVR5cGUgYW5kIHNldCB0aGUgdmFsdWVzIG9mIGl0cwotICogY2hpbGQgZWxlbWVudHMuCi0gKi8KLUl0ZW1UeXBlIGl0ZW0gPSBJdGVtVHlwZS5GYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci1pdGVtLnNldE5hbWUoJnF1b3Q7YmljeWNsZSZxdW90Oyk7Ci1pdGVtLnNldEFtb3VudCgxMik7Ci1pdGVtLnNldFByaWNlKDU2MC4wMCk7Ci0KLS8qIAotICogVXNlIHRoZSBuZXcgSXRlbVR5cGUgaW5zdGFuY2UgdG8gc2V0IHRoZSB2YWx1ZSBvZiB0aGUgCi0gKiBwcmljZSBlbGVtZW50J3MgZmlyc3QgaXRlbSBjaGlsZCBlbGVtZW50LiBOb3RpY2UgdGhhdCB0aGUgc2V0IG1ldGhvZAotICogaGVyZSBpcyBhbiAiQXJyYXkiIG1ldGhvZC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBpdGVtIGVsZW1lbnQKLSAqIGlzIGRlZmluZWQgd2l0aCBhIG1heE9jY3Vycz0idW5ib3VuZGVkIiBhdHRyaWJ1dGUuIEl0IGNhbiBvY2N1cgotICogbWFueSB0aW1lcyBhcyBhIGNoaWxkIG9mIHByaWNlLgotICovCi1wcmljZS5zZXRJdGVtQXJyYXkoMCwgaXRlbSk7Ci08L3ByZT4KLSAgICA8aDI+TmVzdGVkIEVsZW1lbnRzIGFuZCBEZXJpdmVkIFR5cGVzPC9oMj4KLSAgICA8cD5XaGVuIHlvdXIgc2NoZW1hIGluY2x1ZGVzIG5hbWVkIHR5cGVzIHRoYXQgYXJlIGRlY2xhcmVkIGxvY2FsbHmXd2l0aGluIAotICAgICAgdGhlIGRlY2xhcmF0aW9uIG9mIGFub3RoZXIgZWxlbWVudCBvciB0eXBll3RoZSBzY2hlbWEgdHlwZSdzIGdlbmVyYXRlZCBKYXZhIAotICAgICAgaW50ZXJmYWNlIHdpbGwgYmUgYW4gaW5uZXIgaW50ZXJmYWNlIHdpdGhpbiB0aGUgdHlwZSBpdCdzIG5lc3RlZCBpbi48L3A+Ci0gICAgPHA+Rm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2NoZW1hIHNuaXBwZXQgZGVmaW5lcyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+bmFtZTwvc3Bhbj4gCi0gICAgICBhbmQgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmdlbmRlcjwvc3Bhbj4gZWxlbWVudHMgbmVzdGVkIHdpdGhpbiBhIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5wZXJzb248L3NwYW4+IAotICAgICAgY29tcGxleCB0eXBlLiBJbiBwYXJ0aWN1bGFyLCBub3RlIHRoYXQgdGhlIGdlbmRlciBlbGVtZW50IGlzIGRlZmluZWQgYXMgCi0gICAgICBkZXJpdmluZyBmcm9tIHRoZSB4czpOTVRPS0VOIGJ1aWx0LWluIHR5cGUuPC9wPgotICAgIDxwcmU+Ci0mbHQ7eHM6Y29tcGxleFR5cGUgbmFtZT0icGVyc29uIiZndDsKLSAgICAmbHQ7eHM6c2VxdWVuY2UmZ3Q7Ci0gICAgICAgICZsdDt4czplbGVtZW50IG5hbWU9Im5hbWUiIHR5cGU9InhzOnN0cmluZyIvJmd0OwotICAgICAgICAmbHQ7eHM6ZWxlbWVudCBuYW1lPSJnZW5kZXIiJmd0OwotICAgICAgICAgICAgJmx0O3hzOnNpbXBsZVR5cGUmZ3Q7Ci0gICAgICAgICAgICAgICAgJmx0O3hzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iJmd0OwotICAgICAgICAgICAgICAgICAgICAmbHQ7eHM6ZW51bWVyYXRpb24gdmFsdWU9Im1hbGUiLyZndDsKLSAgICAgICAgICAgICAgICAgICAgJmx0O3hzOmVudW1lcmF0aW9uIHZhbHVlPSJmZW1hbGUiLyZndDsKLSAgICAgICAgICAgICAgICAmbHQ7L3hzOnJlc3RyaWN0aW9uJmd0OwotICAgICAgICAgICAgJmx0Oy94czpzaW1wbGVUeXBlJmd0OwotICAgICAgICAmbHQ7L3hzOmVsZW1lbnQmZ3Q7Ci0gICAgJmx0Oy94czpzZXF1ZW5jZSZndDsKLSZsdDsveHM6Y29tcGxleFR5cGUmZ3Q7Ci08L3ByZT4KLSAgICA8cD5UaGUgZ2VuZXJhdGVkIGludGVyZmFjZXMgZm9yIHBlcnNvbiBhbmQgZ2VuZGVyIHdvdWxkIGJlIG9yZ2FuaXplZCBpbiBzb3VyY2UgCi0gICAgICBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nLiBPZiBjb3Vyc2UsIHlvdSB3b3VsZG4ndCBzZWUgdGhlIHNvdXJjZSwgYnV0IAotICAgICAgeW91IGNhbiBzZWUgaGVyZSB0aGF0IHRoZSBHZW5kZXIgaW50ZXJmYWNlIGlzIG5lc3RlZCB3aXRoIFBlcnNvbi4gQWxzbywgCi0gICAgICBub3RpY2UgdGhhdCBpdCBleHRlbmRzIFhtbE5NVE9LRU4sIG1pcnJvcmluZyB0aGUgc2NoZW1hLjwvcD4KLSAgICA8cHJlPnB1YmxpYyBpbnRlcmZhY2UgUGVyc29uIGV4dGVuZHMgWG1sT2JqZWN0Ci17Ci0gICAgcHVibGljIGludGVyZmFjZSBHZW5kZXIgZXh0ZW5kcyBYbWxOTVRPS0VOCi0gICAgewotICAgICAgICAvLyBNZXRob2RzIG9taXR0ZWQgZm9yIHRoaXMgZXhhbXBsZQotICAgIH0KLSAgICAvLyBNZXRob2RzIG9taXR0ZWQgZm9yIHRoaXMgZXhhbXBsZQotfQotPC9wcmU+Ci0gICAgPHA+WW91IGNvdWxkIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPkdlbmRlcjwvc3Bhbj4gCi0gICAgICB0eXBlIGluIHRoaXMgd2F5ICh0aGVyZSBhcmUgYWxzbyB2YXJpb3VzIGFsdGVybmF0aXZlcyB0byB0aGlzKTo8L3A+Ci0gICAgPHByZT4KLS8vIENyZWF0ZSBhIG5ldyBQZXJzb24gaW5zdGFuY2UuCi1QZXJzb24gcGVyc29uID0gUGVyc29uLkZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLS8qCi0gKiBTZXQgdGhlIGdlbmRlciBlbGVtZW50J3MgdmFsdWUgdXNpbmcgdGhlIAotICogZW51bWVyYXRpb24gZ2VuZXJhdGVkIGZyb20gdGhlIHNjaGVtYS4KLSAqLwotcGVyc29uLnNldEdlbmRlcihHZW5kZXIuRkVNQUxFKTs8L3ByZT4KLSAgICA8aDI+VXNlci1EZXJpdmVkIFNpbXBsZSBUeXBlczwvaDI+Ci0gICAgPHA+SW4gYWRkaXRpb24gdG8gdGhlIDQ2IGJ1aWx0LWluIHNpbXBsZSB0eXBlcyBpbiBYTUwgc2NoZW1hLCBhIHNjaGVtYSBjYW4gCi0gICAgICBpbmNsdWRlIGl0cyBvd24gY3VzdG9tIHNpbXBsZSB0eXBlcyB1c2luZyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+eHM6c2ltcGxlVHlwZTwvc3Bhbj4gCi0gICAgICBkZWNsYXJhdGlvbnMuIFRoZXNlIHVzZXItZGVyaXZlZCBzaW1wbGUgdHlwZXMgYXJlIGFsd2F5cyBiYXNlZCBvbiB0aGUgYnVpbHQtaW4gCi0gICAgICBYTUwgc2NoZW1hIHR5cGVzLiBUaGUgYnVpbHQtaW4gdHlwZXMgY2FuIGJlIG1vZGlmaWVkIGJ5IDxlbT5yZXN0cmljdGluZzwvZW0+IAotICAgICAgdGhlbSwgdGFraW5nIDxlbT51bmlvbnM8L2VtPiBvZiB0aGVtLCBvciBtYWtpbmcgc3BhY2Utc2VwYXJhdGVkIDxlbT5saXN0czwvZW0+IAotICAgICAgb2YgdGhlbS4gRWFjaCBYTUwgc2ltcGxlIHR5cGUgaXMgdHJhbnNsYXRlZCBpbnRvIGEgSmF2YSB0eXBlIHRoYXQgcHJvdmlkZXMgCi0gICAgICBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgZGF0YS48L3A+Ci0gICAgPGgzPlVuaW9uczwvaDM+Ci0gICAgPHA+SW4gc2NoZW1hLCB5b3UgY2FuIHVzZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+eHM6dW5pb248L3NwYW4+IHRvIHNwZWNpZnkgCi0gICAgICBhIHNpbXBsZSB0eXBlIHRoYXQgaXMgYWxsb3dlZCB0byBjb250YWluIHZhbHVlcyBvZiBhIG51bWJlciBvZiBvdGhlciBzaW1wbGUgCi0gICAgICB0eXBlcy4gWE1MQmVhbnMgZ2VuZXJhdGVzIGEgdHlwZSBmb3IgYSB1bmlvbiwganVzdCBhcyBpdCBnZW5lcmF0ZXMgYSB0eXBlIAotICAgICAgZm9yIGFueSBvdGhlciBzY2hlbWEgdHlwZS4gQXQgcnVuIHRpbWUsIHlvdSBjYW4gZGlzY292ZXIgdGhlIHVuZGVybHlpbmcgCi0gICAgICB0eXBlIG9mIGFuIGluc3RhbmNlIG9mIGEgdW5pb24gdHlwZSBieSBjYWxsaW5nIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sT2JqZWN0PC9zcGFuPiAKLSAgICAgIGludGVyZmFjZSdzIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5pbnN0YW5jZVR5cGU8L3NwYW4+IG1ldGhvZC4gT25jZSB5b3UgCi0gICAgICBoYXZlIGRldGVybWluZWQgdGhlIHR5cGUsIHlvdSBjYW4gY2FzdCBhbiBpbnN0YW5jZSBvZiBhIHVuaW9uIHR5cGUgdG8gdGhlIAotICAgICAgYWN0dWFsIHVuZGVybHlpbmcgaW5zdGFuY2UgdHlwZS48L3A+Ci0gICAgPHByZT4KLSZsdDt4czpzaW1wbGVUeXBlIG5hbWU9JnF1b3Q7aW50T3JTdHJpbmcmcXVvdDsmZ3Q7Ci0gICAgJmx0O3hzOnVuaW9uIG1lbWJlclR5cGVzPSZxdW90O3hzOmludCB4czpzdHJpbmcmcXVvdDsmZ3Q7Ci0mbHQ7L3hzOnNpbXBsZVR5cGUmZ3Q7Ci08L3ByZT4KLSAgICA8cD5HaXZlbiB0aGUgcHJlY2VkaW5nIHNjaGVtYSBzbmlwcGV0LCB5b3UgY291bGQgc2V0IHRoZSBpbnRPclN0cmluZyB2YWx1ZSAKLSAgICAgIHRvLCBzYXksIDYgb3IgJnF1b3Q7c2l4JnF1b3Q7LiBUaGUgdW5pb24gb2YgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnhzOmludDwvc3Bhbj4gCi0gICAgICBhbmQgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnhzOnN0cmluZzwvc3Bhbj4gbWFrZXMgYm90aCBhbGxvd2FibGUuPC9wPgotICAgIDxwcmU+Ci0vLyBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIHR5cGUuCi1JbnRPclN0cmluZyBpbnRPclN0cmluZyA9IEludE9yU3RyaW5nLkZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLWludE9yU3RyaW5nLnNldCgmcXVvdDs1JnF1b3Q7KTsKLS8vIFRoaXMgY29kZSBwcmludHMgIlhtbEludCIgdG8gdGhlIGNvbnNvbGUuCi1TeXN0ZW0ub3V0LnByaW50bG4oaW50T3JTdHJpbmcuaW5zdGFuY2VUeXBlKCkuZ2V0U2hvcnRKYXZhTmFtZSgpKTsKLTwvcHJlPgotICAgIDxoMz5SZXN0cmljdGlvbnM8L2gzPgotICAgIDxwPlhNTCBzY2hlbWEgcmVzdHJpY3Rpb25zIG9uIHNpbXBsZSBYTUxCZWFucyB0eXBlcyBhcmUgZW5mb3JjZWQuIFNvLCBmb3IgCi0gICAgICBleGFtcGxlLCBpdCBpcyBpbGxlZ2FsIHRvIHNldCBhIG51bWJlciBvdXRzaWRlIGl0cyByZXN0cmljdGVkIHJhbmdlLiA8L3A+Ci0gICAgPGg0Pk51bWVyaWMgVHlwZSBSZXN0cmljdGlvbnM8L2g0PgotICAgIDxwPkluIHNjaGVtYSwgeW91IGNhbiByZXN0cmljdCBudW1lcmljIHR5cGVzIHRvIGFsbG93LCBmb3IgZXhhbXBsZSwgb25seSBhIAotICAgICAgcGFydGljdWxhciByYW5nZSBvZiB2YWx1ZXMuIEZvciBzdWNoIGEgcmVzdHJpY3Rpb24sIFhNTEJlYW5zIHRhaWxvcnMgdGhlIAotICAgICAgcmVzdWx0aW5nIG5hdHVyYWwgSmF2YSBhbHRlcm5hdGl2ZS4gRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhdmUgdGhlIGZvbGxvd2luZyAKLSAgICAgIGVsZW1lbnQgZGVmaW5lZCBpbiBzY2hlbWE6PC9wPgotICAgIDxwcmU+Ci0mbHQ7eHM6ZWxlbWVudCBuYW1lPSJudW1iZXIiJmd0OwotICAgICZsdDt4czpzaW1wbGVUeXBlJmd0OwotICAgICAgICAmbHQ7eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6aW50ZWdlciImZ3Q7Ci0gICAgICAgICAgICAmbHQ7eHM6bWluSW5jbHVzaXZlIHZhbHVlPSIxIi8mZ3Q7Ci0gICAgICAgICAgICAmbHQ7eHM6bWF4SW5jbHVzaXZlIHZhbHVlPSIxMDAwMDAwIi8mZ3Q7Ci0gICAgICAgICZsdDsveHM6cmVzdHJpY3Rpb24mZ3Q7Ci0gICAgJmx0Oy94czpzaW1wbGVUeXBlJmd0OwotJmx0Oy94czplbGVtZW50Jmd0OwotPC9wcmU+Ci0gICAgPHA+VGhlIHR5cGUgaXMgcmVzdHJpY3RlZCBmcm9tIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj54czppbnRlZ2VyPC9zcGFuPiwgCi0gICAgICBidXQgYmVjYXVzZSB0aGUgbnVtYmVyJ3MgcmFuZ2UgaXMgbGltaXRlZCB0byBiZXR3ZWVuIDEgYW5kIDEwMDAwMDAsIGl0IHdpbGwgCi0gICAgICBmaXQgaW50byBhIEphdmEgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmludDwvc3Bhbj4uIEEgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmxvbmc8L3NwYW4+IAotICAgICAgb3IgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmphdmEubWF0aC5CaWdJbnRlZ2VyPC9zcGFuPiB3b3VsZCBiZSB0b28gYmlnIAotICAgICAgZm9yIHRoZSBuZWVkLiBJbiBvdGhlciB3b3JkcywgdGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5nZXROdW1iZXI8L3NwYW4+IAotICAgICAgbWV0aG9kIGdlbmVyYXRlZCBmb3IgdGhpcyB0eXBlIHdpbGwgcmV0dXJuIGFuIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5pbnQ8L3NwYW4+LCAKLSAgICAgIHJhdGhlciB0aGFuIGEgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPkJpZ0ludGVnZXI8L3NwYW4+IG9yIGEgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmxvbmc8L3NwYW4+LjwvcD4KLSAgICA8cD5CeSB0aGUgc2FtZSB0b2tlbiwgYW4gbG9uZyBjYW4gYmUgY29tcGlsZWQgdG8gYW4gaW50IGlmIHRoZSB0b3RhbERpZ2l0cyAKLSAgICAgIGF0dHJpYnV0ZSBpcyAmbHQ7PTksIG9yIHRoZSBtaW4gYW5kIG1heCBhdHRyaWJ1dGUgdmFsdWVzIGFyZSB3aXRoaW4gMzItYml0IAotICAgICAgMnMgY29tcGxlbWVudCByYW5nZS48L3A+Ci0gICAgPHA+VGhlIHNpbmdsZSBwcmltaXRpdmUgWE1MIHR5cGUgeHM6ZGVjaW1hbCBjYW4gYmUgcmVzdHJpY3RlZCBpbiBzZXZlcmFsIHdheXMgCi0gICAgICB0aGF0IGluZmx1ZW5jZSB0aGUgcmVzdWx0aW5nIG5hdHVyYWwgSmF2YSB0eXBlLiBGb3IgZXhhbXBsZSwgaXQgY2FuIGJlOjwvcD4KLSAgPC9kaXY+Ci08L2Rpdj4KLTx1bD4KLSAgPGxpPgotICAgIDxkaXY+Ci0gICAgICA8ZGl2PkNvbXBpbGVkIHRvIGEgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPkJpZ0ludGVnZXI8L3NwYW4+IGlmIGl0cyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+ZnJhY3Rpb25EaWdpdDwvc3Bhbj4gCi0gICAgICAgIGF0dHJpYnV0ZSBpcyBzZXQgdG8gMC4gPC9kaXY+Ci0gICAgPC9kaXY+Ci0gIDwvbGk+Ci0gIDxsaT4KLSAgICA8ZGl2PgotICAgICAgPGRpdj5Db21waWxlZCB0byBhIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5sb25nPC9zcGFuPiBpZiBpdHMgdG90YWxEaWdpdHMgCi0gICAgICAgIGF0dHJpYnV0ZSBpcyAmbHQ7PTE4LCBvciB0aGUgbWluIGFuZCBtYXggYXJlIHdpdGhpbiA2NC1iaXQgMnMgY29tcGxlbWVudCAKLSAgICAgICAgcmFuZ2UuPC9kaXY+Ci0gICAgPC9kaXY+Ci0gIDwvbGk+Ci08L3VsPgotPGRpdj4KLSAgPGRpdj4KLSAgICA8aDM+RW51bWVyYXRpb25zPC9oMz4KLSAgICA8cD5JbiBzY2hlbWEsIHlvdSBjYW4gZGVyaXZlIGEgbmV3IHR5cGUgYnkgcmVzdHJpY3RpbmcgYSBidWlsdC1pbiB0eXBlIHNvIAotICAgICAgdGhhdCBvbmx5IGEgZmluaXRlIHNldCBvZiB2YWx1ZXMgYXJlIGFsbG93YWJsZS4gV2hlcmUgc2NoZW1hIGRvZXMgdGhpcyBieSAKLSAgICAgIHJlc3RyaWN0aW5nIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj54czpzdHJpbmc8L3NwYW4+LCBYTUxCZWFucyBnZW5lcmF0ZXMgCi0gICAgICBhIHNwZWNpYWwgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPkVudW08L3NwYW4+IHR5cGUuIFdpdGggYW4gPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPkVudW08L3NwYW4+LCAKLSAgICAgIHlvdSBjYW4gc2VsZWN0IHRoZSBlbnVtZXJhdGVkIHZhbHVlIGVpdGhlciBieSBpdHMgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlN0cmluZzwvc3Bhbj4gCi0gICAgICB2YWx1ZSBvciBieSBhIG51bWVyaWMgaW5kZXguIFRoZSBpbmRleCdzIHZhbHVlIGlzIGRldGVybWluZWQgYmFzZWQgb24gdGhlIAotICAgICAgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlN0cmluZzwvc3Bhbj4gdmFsdWUncyBvcmRlciBpbiB0aGUgc2NoZW1hLiBIYXZpbmcgCi0gICAgICBhbiBpbmRleCBjYW4gYmUgdXNlZnVsIGluIEphdmEgc3dpdGNoIHN0YXRlbWVudHMuPC9wPgotICAgIDxwPkZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSBoYWQgYSBkb2N1bWVudCBjb250YWluaW5nIHByaWNlIGVsZW1lbnRzIHdob3NlIAotICAgICAgdHlwZSB3YXMgdGhlIHByaWNlVHlwZSBkZWZpbmVkIGluIHRoZSBmb2xsb3dpbmcgc2NoZW1hIHNuaXBwZXQ6PC9wPgotICAgIDxwcmU+Jmx0O3hzOmNvbXBsZXhUeXBlIG5hbWU9JnF1b3Q7cHJpY2VUeXBlJnF1b3Q7Jmd0OwotICAgICZsdDt4czpzZXF1ZW5jZSZndDsKLSAgICAgICAgJmx0O3hzOmVsZW1lbnQgbmFtZT0mcXVvdDtpdGVtJnF1b3Q7IHR5cGU9JnF1b3Q7cHM6aXRlbVR5cGUmcXVvdDsgbWluT2NjdXJzPSZxdW90OzAmcXVvdDsgCi0gICAgICAgICAgICAgIG1heE9jY3Vycz0mcXVvdDt1bmJvdW5kZWQmcXVvdDsvJmd0OwotICAgICZsdDsveHM6c2VxdWVuY2UmZ3Q7Ci0gICAgJmx0O3hzOmF0dHJpYnV0ZSBuYW1lPSZxdW90O3RocmVzaG9sZCZxdW90OyZndDsKLSAgICAgICAgJmx0O3hzOnNpbXBsZVR5cGUmZ3Q7Ci0gICAgICAgICAgICAmbHQ7eHM6cmVzdHJpY3Rpb24gYmFzZT0mcXVvdDt4czpzdHJpbmcmcXVvdDsmZ3Q7Ci0gICAgICAgICAgICAgICAgJmx0O3hzOmVudW1lcmF0aW9uIHZhbHVlPSZxdW90O0JlbG93MTBEb2xsYXJzJnF1b3Q7LyZndDsKLSAgICAgICAgICAgICAgICAmbHQ7eHM6ZW51bWVyYXRpb24gdmFsdWU9JnF1b3Q7QmV0d2VlbjEwQW5kMjBEb2xsYXJzJnF1b3Q7LyZndDsKLSAgICAgICAgICAgICAgICAmbHQ7eHM6ZW51bWVyYXRpb24gdmFsdWU9JnF1b3Q7QWJvdmUyMERvbGxhcnMmcXVvdDsvJmd0OwotICAgICAgICAgICAgJmx0Oy94czpyZXN0cmljdGlvbiZndDsKLSAgICAgICAgJmx0Oy94czpzaW1wbGVUeXBlJmd0OwotICAgICZsdDsveHM6YXR0cmlidXRlJmd0OwotJmx0Oy94czpjb21wbGV4VHlwZSZndDs8L3ByZT4KLSAgICA8cD5Vc2luZyB0eXBlcyBnZW5lcmF0ZWQgZnJvbSB0aGUgc2NoZW1hLCB5b3Ugd291bGQgYmUgYWJsZSB0byB3cml0ZSB0aGUgZm9sbG93aW5nIAotICAgICAgSmF2YSBjb2RlIHRvICZxdW90O3N3aXRjaCZxdW90OyBvbiB0aGUgdGhyZXNob2xkIGF0dHJpYnV0ZSdzIGVudW1lcmF0aW9uOjwvcD4KLSAgICA8cHJlPgotLyoKLSAqIFVzZSB0aGUgaW50VmFsdWUgbWV0aG9kIHByb3ZpZGVkIGJ5IHRoZSBFbnVtIHR5cGUgdG8gZGV0ZXJtaW5lIHRoZSB0aHJlc2hvbGQKLSAqIGF0dHJpYnV0ZSdzIGN1cnJlbnQgZW51bWVyYXRpb24gdmFsdWUuCi0gKi8KLXN3aXRjaChwcmljZUVsZW1lbnRzW2ldLmdldFRocmVzaG9sZCgpLmludFZhbHVlKCkpCi17Ci0gICAgLy8gVXNlIHRoZSBUaHJlc2hvbGQgdHlwZSdzIGVudW1lcmF0aW9uIHZhbHVlcyB0byB0ZXN0IGZvciBhbiBhdHRyaWJ1dGUgdmFsdWUuIAotICAgIGNhc2UgUHJpY2VUeXBlLlRocmVzaG9sZC5JTlRfQkVMT1dfMTBfRE9MTEFSUzoKLSAgICAgICAgemVyb0J1ZmZlci5hcHBlbmQoaXRlbS5nZXRUaXRsZSgpICsgJnF1b3Q7XG4mcXVvdDspOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFByaWNlVHlwZS5UaHJlc2hvbGQuSU5UX0JFVFdFRU5fMTBfQU5EXzIwX0RPTExBUlM6Ci0gICAgICAgIHRlbkJ1ZmZlci5hcHBlbmQoaXRlbS5nZXRUaXRsZSgpICsgJnF1b3Q7XG4mcXVvdDspOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFByaWNlVHlwZS5UaHJlc2hvbGQuSU5UX0FCT1ZFXzIwX0RPTExBUlM6Ci0gICAgICAgIHR3ZW50eUJ1ZmZlci5hcHBlbmQoaXRlbS5nZXRUaXRsZSgpICsgJnF1b3Q7XG4mcXVvdDspOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oJnF1b3Q7WW8hIFNvbWV0aGluZyB1bmV4cGVjdGVkIGhhcHBlbmVkISZxdW90Oyk7Ci0gICAgICAgIGJyZWFrOwotfTwvcHJlPgotICA8L2Rpdj4KLSAgPHAgY2xhc3M9InJlbGF0ZWR0b3BpY3MiPlJlbGF0ZWQgVG9waWNzPC9wPgotICA8cD48YSBocmVmPSJjb25YTUxCZWFuc1N1cHBvcnRCdWlsdEluU2NoZW1hVHlwZXMuaHRtbCI+WE1MQmVhbnMgU3VwcG9ydCBmb3IgCi0gICAgQnVpbHQtSW4gU2NoZW1hIFR5cGVzPC9hPjwvcD4KLTwvZGl2PgotIDwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgotCi08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3YyL2RvY3MvZ3VpZGUvY29uTWV0aG9kc0ZvckdlbmVyYXRlZEphdmFUeXBlcy5odG1sIGIvdjIvZG9jcy9ndWlkZS9jb25NZXRob2RzRm9yR2VuZXJhdGVkSmF2YVR5cGVzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlMTkwZTIuLjAwMDAwMDAKLS0tIGEvdjIvZG9jcy9ndWlkZS9jb25NZXRob2RzRm9yR2VuZXJhdGVkSmF2YVR5cGVzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNjIgKzAsMCBAQAotPCFkb2N0eXBlIEhUTUwgcHVibGljICItLy9XM0MvL0RURCBIVE1MIDQuMCBGcmFtZXNldC8vRU4iPgotCi08aHRtbD4KLTxoZWFkPgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iZG9jdGl0bGUiIC0tPgotPHRpdGxlPk1ldGhvZHMgZm9yIFR5cGVzIEdlbmVyYXRlZCBGcm9tIFNjaGVtYTwvdGl0bGU+Ci08IS0tIEluc3RhbmNlRW5kRWRpdGFibGUgLS0+IAotPCEtLShNZXRhKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLQotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PSRDSEFSU0VUOyI+Ci0KLQotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0ibWV0YXRhZ3MiIC0tPgotCi08bWV0YSBuYW1lPSJjb21wb25lbnQiIGNvbnRlbnQ9IiI+Ci08IS0tIEluIHRoZSBkZXNjcmlwdGlvbiBtZXRhdGFnLCBwbGVhc2UgcHJvdmlkZSBhIEJSSUVGIGRlc2NyaXB0aW9uIG9mIHRoZSB0b3BpYyBjb250ZW50cy4gLS0+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iIj4KLTwhLS0gSW4gdGhlIGNvbXBvbmVudCBtZXRhdGFnLCBwbGVhc2UgbGlzdCBrZXl3b3JkcyB0aGF0IHdpbGwgaGVscCBhIHVzZXIgc2VhcmNoIGZvciB0aGlzIHRvcGljLiAtLT4KLTxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSIiPgotPCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPgotCi08IS0tKExpbmtzKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iaGVhZCIgLS0+Ci08IS0tIEluc3RhbmNlRW5kRWRpdGFibGUgLS0+Ci08bGluayBocmVmPSIuLi94bWxiZWFucy5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgotPGEgaHJlZj0iLi4vLi4vLi4vY29yZS9pbmRleC5odG1sIiBpZD0iaW5kZXgiPjwvYT4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHNyYz0iLi4vLi4vLi4vY29yZS90b3BpY0luZm8uanMiPjwvc2NyaXB0PgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgc3JjPSIuLi8uLi8uLi9jb3JlL0Nvb2tpZUNsYXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHNyYz0iLi4vLi4vLi4vY29yZS9kaXNwbGF5Q29udGVudC5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci0KLTwhLS0oQm9keSk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+Ci08Ym9keT4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgotCi08L3NjcmlwdD4KLTwhLS0gSW5zdGFuY2VCZWdpbkVkaXRhYmxlIG5hbWU9ImJvZHkiIC0tPiAKLTxkaXYgaWQ9dG9waWN0aXRsZT4gCi0gIDxwIGNsYXNzPVRpdGxlPk1ldGhvZHMgZm9yIFR5cGVzIEdlbmVyYXRlZCBGcm9tIFNjaGVtYTwvcD4KLTwvZGl2PgotPGRpdiBpZD10b3BpY3RleHQ+Ci0gIDxwPkFzIHlvdSBtYXkgaGF2ZSBzZWVuIGluIDxhIGhyZWY9ImNvbkdldHRpbmdTdGFydGVkd2l0aFhNTEJlYW5zLmh0bWwiPkdldHRpbmcgCi0gICAgU3RhcnRlZCB3aXRoIFhNTEJlYW5zPC9hPiwgeW91IHVzZSB0aGUgdHlwZXMgZ2VuZXJhdGVkIGZyb20gc2NoZW1hIHRvIGFjY2VzcyAKLSAgICBYTUwgaW5zdGFuY2VzIGJhc2VkIG9uIHRoZSBzY2hlbWEuIElmIHlvdSdyZSBmYW1pbGlhciB3aXRoIHRoZSBKYXZhQmVhbnMgdGVjaG5vbG9neSwgCi0gICAgdGhlIGNvbnZlbnRpb25zIHVzZWQgaW4gdGhlIGdlbmVyYXRlZCBBUEkgd2lsbCBiZSByZWNvZ25pemFibGUuIDwvcD4KLSAgPHA+SW4gZ2VuZXJhbCwgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMgYXJlIHRyZWF0ZWQgYXMgJnF1b3Q7cHJvcGVydGllcyZxdW90OyAKLSAgICBpbiB0aGUgSmF2YUJlYW5zIHNlbnNlLiBJbiBvdGhlciB3b3JkcywgYXMgeW91IHdvdWxkIHdpdGggSmF2YUJlYW5zIHByb3BlcnRpZXMsIAotICAgIHlvdSBtYW5pcHVsYXRlIHBhcnRzIG9mIHRoZSBYTUwgdGhyb3VnaCBhY2Nlc3NvciBtZXRob2RzIHN1Y2ggYXMgZ2V0Q3VzdG9tZXIoKSAKLSAgICAod2hlcmUgeW91IGhhdmUgYSAmcXVvdDtjdXN0b21lciZxdW90OyBlbGVtZW50KSwgc2V0SWQoU3RyaW5nKSAod2hlcmUgeW91IAotICAgIGhhdmUgYW4gJnF1b3Q7aWQmcXVvdDsgYXR0cmlidXRlKSwgYW5kIHNvIG9uLiBIb3dldmVyLCBiZWNhdXNlIHNjaGVtYSBzdHJ1Y3R1cmVzIAotICAgIGNhbiBiZSBzb21ld2hhdCBjb21wbGV4LCBYTUxCZWFucyBwcm92aWRlcyBzZXZlcmFsIG90aGVyIG1ldGhvZCBzdHlsZXMgZm9yIAotICAgIGhhbmRsaW5nIHRob3NlIHN0cnVjdHVyZXMgaW4gWE1MIGluc3RhbmNlcy48L3A+Ci0gIDxkaXY+Ci0gICAgPGgyPlByb3RvdHlwZXMgZm9yIE1ldGhvZHMgaW4gR2VuZXJhdGVkIEludGVyZmFjZXM8L2gyPgotICAgIDxwPlNldmVyYWwgbWV0aG9kcyBhcmUgZ2VuZXJhdGVkIGZvciBlYWNoIGVsZW1lbnQgb3IgYXR0cmlidXRlIHdpdGhpbiB0aGUgCi0gICAgICBjb21wbGV4IHR5cGUuIFRoaXMgdG9waWMgbGlzdHMgZWFjaCBtZXRob2QgdGhhdCBjb3VsZCBiZSBnZW5lcmF0ZWQgZm9yIGEgCi0gICAgICBnaXZlbiBlbGVtZW50IG9yIGF0dHJpYnV0ZS4gPC9wPgotICAgIDxwPk5vdGUgdGhhdCB3aGV0aGVyIG9yIG5vdCBhIGdpdmVuIG1ldGhvZCBpcyBnZW5lcmF0ZWQgaXMgYmFzZWQgb24gaG93IHRoZSAKLSAgICAgIGVsZW1lbnQgb3IgYXR0cmlidXRlIGlzIGRlZmluZWQgaW4gc2NoZW1hLiBGb3IgZXhhbXBsZSwgYSBjdXN0b21lciBlbGVtZW50IAotICAgICAgZGVmaW5pdGlvbiB3aXRoIGEgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPm1heE9jY3Vyczwvc3Bhbj4gYXR0cmlidXRlIHZhbHVlIAotICAgICAgb2YgMSB3aWxsIHJlc3VsdCBpbiBhIGdldEN1c3RvbWVyIG1ldGhvZCwgYnV0IG5vdCBhIGdldEN1c3RvbWVyQXJyYXkgbWV0aG9kIAotICAgICAgJiM4MjEyOyBhZnRlciBhbGwsIG9ubHkgb25lIGN1c3RvbWVyIGVsZW1lbnQgaXMgcG9zc2libGUgaW4gYW4gaW5zdGFuY2UgCi0gICAgICBkb2N1bWVudC48L3A+Ci0gICAgPHA+Tm90ZSwgdG9vLCB0aGF0IHRoZXJlIG1heSBiZSB0d28gc2V0cyBvZiBwYXJhbGxlbCBtZXRob2RzOiBvbmUgd2hvc2UgcHJvdG90eXBlIAotICAgICAgc3RhcnRzIHdpdGggYW4gJnF1b3Q7eCZxdW90Oy4gQW4gJnF1b3Q7eCZxdW90OyBtZXRob2Qgc3VjaCBhcyB4Z2V0TmFtZSBvciAKLSAgICAgIHhzZXROYW1lIHdvdWxkIGJlIGdlbmVyYXRlZCBmb3IgZWxlbWVudHMgb3IgYXR0cmlidXRlIHdob3NlIHR5cGUgaXMgYSBzaW1wbGUgCi0gICAgICB0eXBlLiBBIHNpbXBsZSB0eXBlIG1heSBiZSBvbmUgb2YgdGhlIDQ0IGJ1aWx0LWluIHNpbXBsZSB0eXBlcyBvciBtYXkgYmUgCi0gICAgICBhIHJlc3RyaWN0aW9uIGluIHNjaGVtYSBvZiBvbmUgb2YgdGhvc2UgYnVpbHQtaW4gdHlwZXMuIE9mIGNvdXJzZSwgYW4gYXR0cmlidXRlIAotICAgICAgd2lsbCBhbHdheXMgYmUgb2YgYSBzaW1wbGUgdHlwZS4gRm9yIGJ1aWx0LWluIHNpbXBsZSB0eXBlcywgYW4gJnF1b3Q7eCZxdW90OyAKLSAgICAgIG1ldGhvZCB3aWxsIGdldCBvciBzZXQgb25lIG9mIHRoZSB0eXBlcyBwcm92aWRlZCB3aXRoIFhNTEJlYW5zLCBzdWNoIGFzIAotICAgICAgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj5YbWxTdHJpbmc8L2E+PC9zcGFuPiwgCi0gICAgICA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9hPjwvc3Bhbj4sIAotICAgICAgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+WG1sR0RheTwvYT48L3NwYW4+LCAKLSAgICAgIGFuZCBzbyBvbi4gRm9yIGRlcml2ZWQgdHlwZXMsIHRoZSAmcXVvdDt4JnF1b3Q7IG1ldGhvZCB3aWxsIGdldCBvciBzZXQgYSAKLSAgICAgIGdlbmVyYXRlZCB0eXBlLjwvcD4KLSAgICA8aDM+U2luZ2xlIE9jY3VycmVuY2UgTWV0aG9kczwvaDM+Ci0gICAgPHA+TWV0aG9kcyBnZW5lcmF0ZWQgZm9yIGVsZW1lbnRzIG9yIGF0dHJpYnV0ZXMgdGhhdCBhbGxvdyBhIHNpbmdsZSBvY2N1cnJlbmNlLiAKLSAgICAgIEFuIGVsZW1lbnQgaXMgc2luZ3VsYXIgaWYgaXQgd2FzIGRlY2xhcmVkIHdpdGggbWF4T2NjdXJzPSZxdW90OzEmcXVvdDsuIAotICAgICAgQW4gYXR0cmlidXRlIGlzIHNpbmd1bGFyIGlmIGl0IHdhcyBub3QgZGVjbGFyZWQgd2l0aCB1c2U9JnF1b3Q7cHJvaGliaXRlZCZxdW90Oy48L3A+Ci0gICAgPHByZT4KLVR5cGUgZ2V0Rm9vKCkKLXZvaWQgc2V0Rm9vKFR5cGUgbmV3VmFsdWUpCi08L3ByZT4KLSAgPC9kaXY+Ci0gIDxibG9ja3F1b3RlPiAKLSAgICA8ZGl2PlJldHVybnMgb3Igc2V0cyB0aGUgdmFsdWUgb2YgRm9vLiBHZW5lcmF0ZWQgd2hlbiBGb28gaXMgYW4gYXR0cmlidXRlLCAKLSAgICAgIG9yIGlzIGFuIGVsZW1lbnQgdGhhdCBjYW4gb2NjdXIgb25seSBvbmNlIGFzIGEgY2hpbGQuPC9kaXY+Ci0gIDwvYmxvY2txdW90ZT4KLSAgPGRpdj4gCi0gICAgPGhyIHNpemU9IjEiPgotICAgIDxwcmU+WG1sVHlwZSB4Z2V0Rm9vKCkKLXZvaWQgeHNldEZvbyhYbWxUeXBlIG5ld1ZhbHVlKTwvcHJlPgotICA8L2Rpdj4KLSAgPGJsb2NrcXVvdGU+IAotICAgIDxkaXY+UmV0dXJucyBvciBzZXRzIHRoZSB2YWx1ZSBvZiBGb28gYXMgYW4gWE1MQmVhbiBzaW1wbGUgdHlwZS4gVGhlc2UgbWV0aG9kcyAKLSAgICAgIGFyZSBnZW5lcmF0ZWQgaWYgRm9vJ3MgdHlwZSBpcyBkZWZpbmVkIGluIHNjaGVtYSBhcyBhIHNpbXBsZVR5cGUuPC9kaXY+Ci0gIDwvYmxvY2txdW90ZT4KLSAgPGRpdj4gCi0gICAgPGhyIHNpemU9IjEiPgotICAgIDxwcmU+Ym9vbGVhbiBpc05pbEZvbygpCi12b2lkIHNldE5pbEZvbygpPC9wcmU+Ci0gIDwvZGl2PgotICA8YmxvY2txdW90ZT4gCi0gICAgPGRpdj5EZXRlcm1pbmVzIG9yIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBGb28gZWxlbWVudCBpcyBuaWwgKGluIG90aGVyIHdvcmRzLCAKLSAgICAgICZxdW90O251bGwmcXVvdDsgaW4gc2NoZW1hIHRlcm1zKSwgbWVhbmluZyBpdCBjYW4gYmUgZW1wdHkuIEEgbmlsIGVsZW1lbnQgCi0gICAgICBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzOjwvZGl2PgotICAgIDxkaXY+IAotICAgICAgPHByZT4mbHQ7Zm9vLyZndDs8L3ByZT4KLSAgICA8L2Rpdj4KLSAgICA8ZGl2PlRoZXNlIG1ldGhvZHMgYXJlIG9ubHkgZ2VuZXJhdGVkIHdoZW4gYW4gZWxlbWVudCB0eXBlIGlzIGRlY2xhcmVkIGFzIAotICAgICAgbmlsbGFibGUgaW4gc2NoZW1hICYjODIxMjsgaXQgaGFzIGEgbmlsbGFibGU9JnF1b3Q7dHJ1ZSZxdW90OyBhdHRyaWJ1dGUuPC9kaXY+Ci0gIDwvYmxvY2txdW90ZT4KLSAgPGRpdj4gCi0gICAgPGhyIHNpemU9IjEiPgotICAgIDxwcmU+WG1sVHlwZSBhZGROZXdGb28oKTwvcHJlPgotICA8L2Rpdj4KLSAgPGJsb2NrcXVvdGU+IAotICAgIDxkaXY+QWRkcyBhIG5ldyBGb28gYXMgYW4gWE1MQmVhbiBzaW1wbGUgdG8gdGhlIGRvY3VtZW50LCBvciByZXR1cm5zIEZvbydzIAotICAgICAgdmFsdWUgaWYgb25lIGV4aXN0cyBhbHJlYWR5LjwvZGl2PgotICA8L2Jsb2NrcXVvdGU+Ci0gIDxkaXY+IAotICAgIDxociBzaXplPSIxIj4KLSAgICA8cHJlPmJvb2xlYW4gaXNTZXRGb28oKQotdm9pZCB1blNldEZvbygpPC9wcmU+Ci0gIDwvZGl2PgotICA8YmxvY2txdW90ZT4gCi0gICAgPGRpdj5EZXRlcm1pbmVzIHdoZXRoZXIgdGhlIEZvbyBlbGVtZW50IG9yIGF0dHJpYnV0ZSBleGlzdHMgaW4gdGhlIGRvY3VtZW50OyAKLSAgICAgIHJlbW92ZXMgRm9vLiBUaGVzZSBtZXRob2RzIGFyZSBnZW5lcmF0ZWQgZm9yIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzIHRoYXQgCi0gICAgICBhcmUgb3B0aW9uYWwuIEluIHNjaGVtYSwgYW5kIG9wdGlvbmFsIGVsZW1lbnQgaGFzIGFuIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5taW5PY2N1cnM8L3NwYW4+IAotICAgICAgYXR0cmlidXRlIHNldCB0byAmcXVvdDswJnF1b3Q7OyBhbiBvcHRpb25hbCBhdHRyaWJ1dGUgaGFzIGEgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnVzZTwvc3Bhbj4gCi0gICAgICBhdHRyaWJ1dGUgc2V0IHRvICZxdW90O29wdGlvbmFsJnF1b3Q7LjwvZGl2PgotICA8L2Jsb2NrcXVvdGU+Ci0gIDxkaXY+IAotICAgIDxociBzaXplPSIxIj4KLSAgICA8aDM+TXVsdGlwbGUgT2NjdXJyZW5jZSBNZXRob2RzPC9oMz4KLSAgICA8cD5NZXRob2RzIGdlbmVyYXRlZCBmb3IgZWxlbWVudHMgdGhhdCBhbGxvdyBtdWx0aXBsZSBvY2N1cnJlbmNlcy4gPC9wPgotICAgIDxwPkFuIGVsZW1lbnQgbWF5IG9jY3VyIG11bHRpcGxlIHRpbWVzIGlmIGl0IGhhcyBhIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5tYXhPY2N1cnM8L3NwYW4+IAotICAgICAgYXR0cmlidXRlIHNldCB0byAmcXVvdDt1bmJvdW5kZWQmcXVvdDsgb3IgZ3JlYXRlciB0aGFuIDEuIEF0dHJpYnV0ZXMgY2FuJ3QgCi0gICAgICBvY2N1ciBtdWx0aXBsZSB0aW1lcy48L3A+Ci0gICAgPHByZT5UeXBlW10gZ2V0Rm9vQXJyYXkoKQotdm9pZCBzZXRGb29BcnJheShUeXBlW10gbmV3VmFsdWUpIDwvcHJlPgotICA8L2Rpdj4KLSAgPGJsb2NrcXVvdGU+IAotICAgIDxkaXY+UmV0dXJucyBvciBzZXRzIGFsbCBvZiB0aGUgRm9vIGVsZW1lbnRzLiA8L2Rpdj4KLSAgICA8ZGl2PiAKLSAgICAgIDxwcmU+Ci0vLyBHZXQgYW4gYXJyYXkgb2YgdGhlIGFsbCBvZiB0aGUgcHVyY2hhc2Utb3JkZXIgZWxlbWVudHMgaXRlbSBjaGlsZHJlbi4KLUl0ZW1bXSBpdGVtcyA9IG15UE8uZ2V0SXRlbUFycmF5KCk7Ci08L3ByZT4KLSAgICA8L2Rpdj4KLSAgPC9ibG9ja3F1b3RlPgotICA8ZGl2PiAKLSAgICA8aHIgc2l6ZT0iMSI+Ci0gICAgPHByZT5UeXBlIGdldEZvb0FycmF5KGludCBpbmRleCkKLXZvaWQgc2V0Rm9vQXJyYXkoVHlwZSBuZXdWYWx1ZSwgaW50IGluZGV4KTwvcHJlPgotICA8L2Rpdj4KLSAgPGJsb2NrcXVvdGU+IAotICAgIDxkaXY+UmV0dXJucyBvciBzZXRzIHRoZSBGb28gY2hpbGQgZWxlbWVudCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LjwvZGl2PgotICAgIDxkaXY+IAotICAgICAgPHByZT4vLyBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgdGhpcmQgaXRlbSBjaGlsZCBlbGVtZW50LgotbXlQTy5zZXRJdGVtKG5ld0l0ZW0sIDIpOzwvcHJlPgotICAgIDwvZGl2PgotICA8L2Jsb2NrcXVvdGU+Ci0gIDxkaXY+IAotICAgIDxociBzaXplPSIxIj4KLSAgICA8cHJlPmludCBzaXplT2ZGb29BcnJheSgpPC9wcmU+Ci0gIDwvZGl2PgotICA8YmxvY2txdW90ZT4gCi0gICAgPGRpdj5SZXR1cm5zIHRoZSBudW1iZXIgb2YgRm9vIGNoaWxkIGVsZW1lbnRzLjwvZGl2PgotICAgIDxkaXY+IAotICAgICAgPHByZT4vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbSBjaGlsZCBlbGVtZW50cy4KLWludCBpdGVtQ291bnQgPSBteVBPLnNpemVPZkl0ZW1BcnJheSgpOzwvcHJlPgotICAgIDwvZGl2PgotICA8L2Jsb2NrcXVvdGU+Ci0gIDxkaXY+IAotICAgIDxociBzaXplPSIxIj4KLSAgICA8cHJlPnZvaWQgcmVtb3ZlRm9vKGludCBpbmRleCk8L3ByZT4KLSAgPC9kaXY+Ci0gIDxibG9ja3F1b3RlPiAKLSAgICA8ZGl2PlJlbW92ZXMgdGhlIEZvbyBjaGlsZCBlbGVtZW50IGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguPC9kaXY+Ci0gIDwvYmxvY2txdW90ZT4KLSAgPGRpdj4gCi0gICAgPGhyIHNpemU9IjEiPgotICAgIDxwcmU+WG1sVHlwZVtdIHhnZXRGb29BcnJheSgpCi12b2lkIHhzZXRGb29BcnJheShYbWxUeXBlW10gYXJyYXlPZk5ld1ZhbHVlcyk8L3ByZT4KLSAgPC9kaXY+Ci0gIDxibG9ja3F1b3RlPiAKLSAgICA8ZGl2PlJldHVybnMgb3Igc2V0cyBhbGwgb2YgdGhlIEZvbyBlbGVtZW50cyBhcyBYTUxCZWFucyBzaW1wbGUgdHlwZXMuIEdlbmVyYXRlZCAKLSAgICAgIG9ubHkgd2hlbiB0aGUgRm9vIGVsZW1lbnQgaXMgZGVmaW5lZCBhcyBhIHNpbXBsZSB0eXBlLjwvZGl2PgotICAgIDxkaXY+IAotICAgICAgPHByZT4vKgotICogUmV0dXJucyB2YWx1ZXMgb2YgYWxsIHRoZSBwaG9uZSBjaGlsZCBlbGVtZW50cyBvZiBhbiBlbXBsb3llZSBlbGVtZW50LAotICogd2hlcmUgdGhlIHBob25lIGVsZW1lbnQgaGFzIGJlZW4gZGVmaW5lZCBhcyB4czpzdHJpbmcuCi0gKi8KLVhtbFN0cmluZ1tdIGVtcFBob25lcyA9IGN1cnJlbnRFbXBsb3llZS54R2V0UGhvbmVBcnJheSgpOwotPC9wcmU+Ci0gICAgPC9kaXY+Ci0gIDwvYmxvY2txdW90ZT4KLSAgPGRpdj4gCi0gICAgPGhyIHNpemU9IjEiPgotICAgIDxwcmU+WG1sVHlwZSB4Z2V0Rm9vQXJyYXkoaW50IGluZGV4KQotdm9pZCB4c2V0Rm9vQXJyYXkoaW50IGluZGV4LCBYbWxUeXBlIG5ld1ZhbHVlKTwvcHJlPgotICA8L2Rpdj4KLSAgPGJsb2NrcXVvdGU+IAotICAgIDxkaXY+UmV0dXJucyBvciBzZXRzIHRoZSBGb28gZWxlbWVudCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LCB1c2luZyBhbiBYTUxCZWFucyAKLSAgICAgIHNpbXBsZSB0eXBlIHZhbHVlLiBHZW5lcmF0ZWQgZm9yIGFuIGVsZW1lbnQgZGVmaW5lZCBhcyBhIHNpbXBsZSB0eXBlIGluIAotICAgICAgc2NoZW1hLjwvZGl2PgotICA8L2Jsb2NrcXVvdGU+Ci0gIDxkaXY+IAotICAgIDxociBzaXplPSIxIj4KLSAgICA8cHJlPnZvaWQgaW5zZXJ0Rm9vKGludCBpbmRleCwgRm9vVHlwZSBuZXdWYWx1ZSk8L3ByZT4KLSAgPC9kaXY+Ci0gIDxibG9ja3F1b3RlPiAKLSAgICA8ZGl2Pkluc2VydHMgdGhlIHNwZWNpZmllZCBGb28gY2hpbGQgZWxlbWVudCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LjwvZGl2PgotICA8L2Jsb2NrcXVvdGU+Ci0gIDxkaXY+IAotICAgIDxociBzaXplPSIxIj4KLSAgICA8cHJlPnZvaWQgYWRkRm9vKEZvb1R5cGUgbmV3VmFsdWUpPC9wcmU+Ci0gIDwvZGl2PgotICA8YmxvY2txdW90ZT4gCi0gICAgPGRpdj5BZGRzIHRoZSBzcGVjaWZpZWQgRm9vIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3Qgb2YgRm9vIGNoaWxkIGVsZW1lbnRzLjwvZGl2PgotICA8L2Jsb2NrcXVvdGU+Ci0gIDxkaXY+IAotICAgIDxociBzaXplPSIxIj4KLSAgICA8cHJlPlhtbFR5cGUgaW5zZXJ0TmV3Rm9vKGludCBpbmRleCk8L3ByZT4KLSAgPC9kaXY+Ci0gIDxibG9ja3F1b3RlPiAKLSAgICA8ZGl2Pkluc2VydHMgYSBuZXcgRm9vIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXgsIHJldHVybmluZyBhbiBYTUxCZWFucyBzaW1wbGUgCi0gICAgICB0eXBlIHJlcHJlc2VudGluZyB0aGUgbmV3IGVsZW1lbnQ7IHJldHVybnMgdGhlIGV4aXN0aW5nIEZvbyBpZiB0aGVyZSdzIGFscmVhZHkgCi0gICAgICBvbmUgYXQgaW5kZXguPC9kaXY+Ci0gIDwvYmxvY2txdW90ZT4KLSAgPGRpdj4gCi0gICAgPGhyIHNpemU9IjEiPgotICAgIDxwcmU+WG1sVHlwZSBhZGROZXdGb28oKTwvcHJlPgotICA8L2Rpdj4KLSAgPGJsb2NrcXVvdGU+IAotICAgIDxkaXY+QWRkcyBhIG5ldyBGb28gZWxlbWVudCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0IG9mIEZvbyBjaGlsZCBlbGVtZW50cywgCi0gICAgICByZXR1cm5pbmcgYW4gWE1MQmVhbnMgc2ltcGxlIHR5cGUgcmVwcmVzZW50aW5nIHRoZSBuZXdseSBhZGRlZCBlbGVtZW50LjwvZGl2PgotICA8L2Jsb2NrcXVvdGU+Ci0gIDxkaXY+IAotICAgIDxociBzaXplPSIxIj4KLSAgICA8cHJlPmJvb2xlYW4gaXNOaWxGb29BcnJheShpbnQgaW5kZXgpCi12b2lkIHNldE5pbEZvb0FycmF5KGludCBpbmRleCk8L3ByZT4KLSAgPC9kaXY+Ci0gIDxibG9ja3F1b3RlPiAKLSAgICA8ZGl2PkRldGVybWluZXMgb3Igc3BlY2lmaWVzIHdoZXRoZXIgdGhlIEZvbyBlbGVtZW50IGF0IHRoZSBzcGVjaWZpZWQgaW5kZXggCi0gICAgICBpcyBuaWwuPC9kaXY+Ci0gIDwvYmxvY2txdW90ZT4KLSAgPGRpdj4gCi0gICAgPGhyIHNpemU9IjEiPgotICA8L2Rpdj4KLSAgPGRpdiBpZD0idG9waWN0ZXh0Ij48L2Rpdj4KLSAgPHAgY2xhc3M9cmVsYXRlZHRvcGljcz5SZWxhdGVkIFRvcGljczwvcD4KLSAgPHA+PGEgaHJlZj0iY29uSmF2YVR5cGVzR2VuZXJhdGVkRnJvbVVzZXJEZXJpdmVkLmh0bWwiPkphdmEgVHlwZXMgR2VuZXJhdGVkIAotICAgIGZyb20gVXNlci1EZXJpdmVkIFNjaGVtYSBUeXBlczwvYT48L3A+Ci08L2Rpdj4KLTwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgotCi08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3YyL2RvY3MvZ3VpZGUvY29uTmF2aWdhdGluZ1hNTHdpdGhDdXJzb3JzLmh0bWwgYi92Mi9kb2NzL2d1aWRlL2Nvbk5hdmlnYXRpbmdYTUx3aXRoQ3Vyc29ycy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWU0MTRhLi4wMDAwMDAwCi0tLSBhL3YyL2RvY3MvZ3VpZGUvY29uTmF2aWdhdGluZ1hNTHdpdGhDdXJzb3JzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAotPCFkb2N0eXBlIEhUTUwgcHVibGljICItLy9XM0MvL0RURCBIVE1MIDQuMCBGcmFtZXNldC8vRU4iPgotCi08aHRtbD4KLTxoZWFkPgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iZG9jdGl0bGUiIC0tPgotPHRpdGxlPk5hdmlnYXRpbmcgWE1MIHdpdGggQ3Vyc29yczwvdGl0bGU+Ci08IS0tIEluc3RhbmNlRW5kRWRpdGFibGUgLS0+IAotPCEtLShNZXRhKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLQotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PSRDSEFSU0VUOyI+Ci0KLQotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0ibWV0YXRhZ3MiIC0tPgotCi08bWV0YSBjb250ZW50PSJ5b3VyIG5hbWUiIG5hbWU9ImF1dGhvciI+Ci08bWV0YSBjb250ZW50PSJBIGRlc2NyaXB0aW9uIG9mIHRoZSB0b3BpYyBjb250ZW50cy4iIG5hbWU9ImRlc2NyaXB0aW9uIj4KLTxtZXRhIGNvbnRlbnQ9ImtleXdvcmRzIHRvIGhlbHAgaW4gc2VhcmNoZXMiIG5hbWU9ImtleXdvcmRzIj4KLTxtZXRhIGNvbnRlbnQ9IjEwLzI1LzAyIiBuYW1lPSJkYXRlIGxhc3QgbW9kaWZpZWQiPgotPCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPgotCi08IS0tKExpbmtzKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iaGVhZCIgLS0+IAotPGxpbmsgaHJlZj0iLi4veG1sYmVhbnMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4KLTwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4KLTxsaW5rIGhyZWY9Ii4uL3htbGJlYW5zLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+Ci08YSBocmVmPSIuLi8uLi8uLi9jb3JlL2luZGV4Lmh0bWwiIGlkPSJpbmRleCI+PC9hPgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgc3JjPSIuLi8uLi8uLi9jb3JlL3RvcGljSW5mby5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiBzcmM9Ii4uLy4uLy4uL2NvcmUvQ29va2llQ2xhc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgc3JjPSIuLi8uLi8uLi9jb3JlL2Rpc3BsYXlDb250ZW50LmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLQotPCEtLShCb2R5KT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLTxib2R5PgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+Ci0KLTwvc2NyaXB0PgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iYm9keSIgLS0+IAotPGgxPiBOYXZpZ2F0aW5nIFhNTCB3aXRoIEN1cnNvcnMgPC9oMT4KLTxkaXYgaWQ9InRvcGljdGV4dCI+IAotICA8cD5YTUwgY3Vyc29ycyBhcmUgYSB3YXkgdG8gbmF2aWdhdGUgdGhyb3VnaCBhbiBYTUwgaW5zdGFuY2UgZG9jdW1lbnQuIE9uY2UgCi0gICAgeW91IGxvYWQgYW4gWE1MIGRvY3VtZW50LCB5b3UgY2FuIGNyZWF0ZSBhIGN1cnNvciB0byByZXByZXNlbnQgYSBzcGVjaWZpYyAKLSAgICBwbGFjZSBpbiB0aGUgWE1MLiBCZWNhdXNlIHlvdSBjYW4gdXNlIGEgY3Vyc29yIHdpdGggb3Igd2l0aG91dCBhIHNjaGVtYSBjb3JyZXNwb25kaW5nIAotICAgIHRvIHRoZSBYTUwsIGN1cnNvcnMgYXJlIGFuIGlkZWFsIHdheSB0byBoYW5kbGUgWE1MIHdpdGhvdXQgYSBzY2hlbWEuPC9wPgotICA8cD5XaXRoIGFuIFhNTCBjdXJzb3IsIHlvdSBjYW46PC9wPgotPC9kaXY+Ci08VUw+Ci0gIDxsaT4gCi0gICAgPGRpdj48YSBocmVmPSJjb25VbmRlcnN0YW5kaW5nWE1MVG9rZW5zLmh0bWwiPlVzZSB0aGUgdG9rZW4gbW9kZWw8L2E+IHRvIG1vdmUgCi0gICAgICB0aHJvdWdoIFhNTCBpbiBzbWFsbCBpbmNyZW1lbnRzLCBvciBpbiBhIG1hbm5lciBzaW1pbGFyIHRvIHVzaW5nIGEgRE9NLWJhc2VkIAotICAgICAgbW9kZWwuPC9kaXY+Ci0gIDxMST4gCi0gICAgPERJVj5HZXQgYW5kIHNldCB2YWx1ZXMgd2l0aGluIHRoZSBYTUwuPC9ESVY+Ci0gIDxMST4gCi0gICAgPERJVj48YSBocmVmPSIjYWRkaW5nX2VsZW1lbnRzX2F0dHJpYnV0ZXMiPkNoYW5nZSB0aGUgc3RydWN0dXJlPC9hPiBvZiBhbiAKLSAgICAgIFhNTCBkb2N1bWVudCBieSBpbnNlcnRpbmcsIHJlbW92aW5nLCBhbmQgbW92aW5nIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzLjwvRElWPgotICA8TEk+IAotICAgIDxESVY+PGEgaHJlZj0iY29uU2VsZWN0aW5nWE1Md2l0aFhRdWVyeVBhdGhYUGF0aC5odG1sIj5FeGVjdXRlIFhRdWVyeSBleHByZXNzaW9uczwvYT4gCi0gICAgICBhZ2FpbnN0IHRoZSBYTUwgcmVwcmVzZW50ZWQgYnkgdGhlIGN1cnNvci48L0RJVj4KLSAgPExJPiAKLSAgICA8RElWPjxhIGhyZWY9ImNvblVzaW5nQm9va21hcmtzVG9Bbm5vdGF0ZVhNTC5odG1sIj5JbnNlcnQgYm9va21hcmtzPC9hPiB0byAKLSAgICAgIG1hcmsgbG9jYXRpb25zIGluIFhNTC48L0RJVj4KLTwvVUw+Ci08UD5XaGVuIHlvdSdyZSBmaW5pc2hlZCB1c2luZyBhIGN1cnNvciwgeW91ciBjb2RlIHNob3VsZCBjYWxsIGl0cyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+ZGlzcG9zZTwvc3Bhbj4gCi0gIG1ldGhvZC48L1A+Ci08aDI+Q3JlYXRpbmcgYW5kIE1vdmluZyBhIEN1cnNvcjwvaDI+Ci08UD5XaXRoIGFuIFhNTCBpbnN0YW5jZSBkb2N1bWVudCBib3VuZCB0byA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvYT48L3NwYW4+IAotICAob3IgYSB0eXBlIGluaGVyaXRpbmcgZnJvbSBpdCksIHlvdSBjcmVhdGUgYSBuZXcgY3Vyc29yIGJ5IGNhbGxpbmcgdGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5uZXdDdXJzb3I8L3NwYW4+IAotICBtZXRob2QuIFRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvYT48L3NwYW4+IAotICBpbnRlcmZhY2UgcmVwcmVzZW50cyBhIGN1cnNvci4gRnJvbSBhIGN1cnNvciBzdGFuZHBvaW50LCBhbiBYTUwgZG9jdW1lbnQgaXMgCi0gIGEgY29sbGVjdGlvbiBvZiA8RU0+dG9rZW5zPC9FTT4gdGhhdCByZXByZXNlbnQgdGhlIGtpbmRzIG9mIHRoaW5ncyB0aGF0IGNhbiAKLSAgYXBwZWFyIGluIFhNTC4gVGhlc2UgaW5jbHVkZSZuYnNwO2F0dHJpYnV0ZXMsIHRoZSBzdGFydCBhbmQgZW5kIG9mIGVsZW1lbnRzLCAKLSAgY29tbWVudHMsIGFuZCBzbyBvbi4mbmJzcDtFYWNoIHBpZWNlIG9mIGluZm9ybWF0aW9uIGluIFhNTCBpcyByZXByZXNlbnRlZCBieSAKLSAgYSA8ZW0+dG9rZW4gdHlwZTwvZW0+LjwvUD4KLTxQIGNsYXNzPSJub3RlcGFyYSI+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBGb3IgYSBtb3JlIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIAotICBYTUwgdG9rZW5zLCBzZWUgPGEgaHJlZj0iY29uVW5kZXJzdGFuZGluZ1hNTFRva2Vucy5odG1sIj5VbmRlcnN0YW5kaW5nIFhNTCBUb2tlbnM8L2E+LjwvUD4KLTxQPkZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGUgbG9hZHMgdGhlJm5ic3A7WE1MIGluc3RhbmNlIGRlc2NyaWJlZCBhYm92ZSAKLSAgZnJvbSBhIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5GaWxlPC9zcGFuPiBvYmplY3QsIHRoZW4gY3JlYXRlcyBhIG5ldyBjdXJzb3IuIAotICBUaGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnRvRmlyc3RDaGlsZDwvc3Bhbj4gdGFrZXMgdGhlIGN1cnNvciB0byB0aGUgc3RhcnQgCi0gIHRhZyBvZiB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmJhdGNoV2lkZ2V0T3JkZXI8L3NwYW4+IGRvY3VtZW50IGVsZW1lbnQuIAotICBUaGUgY29kZSB0aGVuIHByaW50cyB0aGUgdHlwZSBmb3IgdGhlIHRva2VuIGF0IHRoZSBjdXJzb3IncyBsb2NhdGlvbiwgYWxvbmcgCi0gIHdpdGggdGhlIFhNTCB0aGUgY3Vyc29yIHJlcHJlc2VudHOXaW4gb3RoZXIgd29yZHMsIDxzcGFuIGNsYXNzPSJmaWxlcGF0aCI+VG9rZW4gCi0gIHR5cGU6IFNUQVJUIC88L3NwYW4+IGFuZCB0aGUgPHNwYW4gY2xhc3M9ImZpbGVwYXRoIj5iYXRjaFdpZGdldE9yZGVyRWxlbWVudDwvc3Bhbj4gCi0gIGFuZCBpdHMgY29udGVudHMuPC9QPgotPHByZT5wdWJsaWMgc3RhdGljIHZvaWQgaW5zZXJ0Q3Vyc29yKEZpbGUgb3JkZXJGaWxlKSB0aHJvd3MgRXhjZXB0aW9uIAotewotICAgIEJhdGNoV2lkZ2V0T3JkZXJEb2N1bWVudCB4bWxEb2MgPSBCYXRjaFdpZGdldE9yZGVyRG9jdW1lbnQuRmFjdG9yeS5wYXJzZShvcmRlckZpbGUpOwotICAgIFhtbEN1cnNvciBvcmRlckN1cnNvciA9IHhtbERvYy5uZXdDdXJzb3IoKTsKLSAgICBvcmRlckN1cnNvci50b0ZpcnN0Q2hpbGQoKTsKLSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRva2VuIHR5cGU6ICIgKyBvcmRlckN1cnNvci5jdXJyZW50VG9rZW5UeXBlKCkgKwotICAgICAgICAiIC8gIiArIG9yZGVyQ3Vyc29yLnhtbFRleHQoKSk7Ci19Ci08L3ByZT4KLTxwIGNsYXNzPSJub3RlcGFyYSI+PFNUUk9ORz5Ob3RlPC9TVFJPTkc+OiBUaGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlhtbEN1cnNvcjwvc3Bhbj4gCi0gIGludGVyZmFjZSBwcm92aWRlcyBtYW55IG1ldGhvZHMgeW91IGNhbiB1c2UgdG8gcHV0IGEgY3Vyc29yIHdoZXJlIHlvdSB3YW50IGl0LiAKLSAgRm9yIGEgbGlzdCBvZiB0aG9zZSBtZXRob2RzLCBzZWUgPGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvciAKLSAgSW50ZXJmYWNlPC9hPi48L3A+Ci08aDI+PGEgbmFtZT0iYWRkaW5nX2VsZW1lbnRzX2F0dHJpYnV0ZXMiIGlkPSJhZGRpbmdfZWxlbWVudHNfYXR0cmlidXRlcyI+PC9hPkFkZGluZyAKLSAgRWxlbWVudHMgYW5kIEF0dHJpYnV0ZXM8L2gyPgotPHA+VGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5YbWxDdXJzb3I8L3NwYW4+IGludGVyZmFjZSBwcm92aWRlcyBzZXZlcmFsIG1ldGhvZHMgCi0gIHlvdSBjYW4gdXNlIHRvIGFkZCBlbGVtZW50cyBhbmQgYXR0cmlidXRlcyB0byBYTUwuIDwvcD4KLTxwPk9uZSB3YXkgdG8gYWRkIG5ldyBYTUwgaXMgd2l0aCB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmJlZ2luRWxlbWVudDwvc3Bhbj4gCi0gIG1ldGhvZC4gVGhpcyBtZXRob2QgaXMgZGVzaWduZWQgdG8gaW5zZXJ0IGEgbmV3IGVsZW1lbnQgYXQgdGhlIGN1cnNvcidzIGxvY2F0aW9uLCAKLSAgYW5kIGRvIGl0IHNvIHRoZSBjdXJzb3IgZW5kcyB1cCBiZXR3ZWVuIHRoZSBuZXcgZWxlbWVudCdzIFNUQVJUIGFuZCBFTkQgdG9rZW5zLiAKLSAgRnJvbSB0aGlzIHBvc2l0aW9uLCB5b3UgY2FuIGluc2VydCBhdHRyaWJ1dGVzICh0aGV5J3JlIGF1dG9tYXRpY2FsbHkgcGxhY2VkIAotICBpbiB0aGUgc3RhcnQgdGFnLCB3aGVyZSB0aGV5IGJlbG9uZykgYW5kIGluc2VydCBhIHZhbHVlLiBIZXJlJ3MgYW4gZXhhbXBsZTo8L3A+Ci08cHJlPgotLy8gQ3JlYXRlIGEgbmV3IGNodW5rIG9mIFhNTC4KLVhtbE9iamVjdCBuZXdYbWwgPSBYbWxPYmplY3QuRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotLyogCi0gKiBJbnNlcnQgYSBuZXcgY3Vyc29yIGFuZCBtb3ZlIGl0IHRvIHRoZSBmaXJzdCBTVEFSVCB0b2tlbiAod2hlcmUgdGhlCi0gKiBYTUwgYWN0dWFsbHkgYmVnaW5zLgotICovCi1YbWxDdXJzb3IgY3Vyc29yID0gbmV3WG1sLm5ld0N1cnNvcigpOwotY3Vyc29yLnRvTmV4dFRva2VuKCk7Ci0vLyBCZWdpbiBhIG5ldyBpdGVtIGVsZW1lbnQgd2hvc2UgbmFtZXNwYWNlIFVSSSBpcyAiaHR0cDovL29wZW51cmkub3JnIi4KLWN1cnNvci5iZWdpbkVsZW1lbnQoJnF1b3Q7aXRlbSZxdW90OywgJnF1b3Q7aHR0cDovL29wZW51cmkub3JnLyZxdW90Oyk7Ci0vLyBJbnNlcnQgYW4gSUQgYXR0cmlidXRlIG9uIHRoZSBpdGVtIGVsZW1lbnQsIGFsb25nIHdpdGggYW4gYXR0cmlidXRlIHZhbHVlLgotY3Vyc29yLmluc2VydEF0dHJpYnV0ZVdpdGhWYWx1ZSgmcXVvdDtpZCZxdW90OywgJnF1b3Q7NDA1NjQwNCZxdW90Oyk7Ci0vLyBJbnNlcnQgImJpY3ljbGUiIGFzIGFuIGVsZW1lbnQgdmFsdWUuCi1jdXJzb3IuaW5zZXJ0Q2hhcnMoJnF1b3Q7YmljeWNsZSZxdW90Oyk7Ci1jdXJzb3IuZGlzcG9zZSgpOwotPC9wcmU+Ci08cD5UaGlzIGV4YW1wbGUgcmVzdWx0cyBpbiBzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nOjwvcD4KLTxwcmU+Jmx0O25zMTppdGVtIGlkPSZxdW90OzQwNTY0MDQmcXVvdDsgeG1sbnM6bnMxPSZxdW90O2h0dHA6Ly9vcGVudXJpLm9yZy8mcXVvdDsmZ3Q7YmljeWNsZSZsdDsvbnMxOml0ZW0mZ3Q7Ci08L3ByZT4KLTxoMj4gVXNpbmcgU3RvcmVkIEN1cnNvciBMb2NhdGlvbnMgd2l0aCBwdXNoKCkgYW5kIHBvcCgpPC9oMj4KLTxkaXYgaWQ9InRvcGljdGV4dCI+IAotICA8cD5XaGVuIHlvdSB3YW50IHRvIG1vdmUgYSBjdXJzb3IgYXJvdW5kLCBidXQgd2FudCB0byBrZWVwIHRyYWNrIG9mIGEgZm9ybWVyIAotICAgIGxvY2F0aW9uLCB5b3UgY2FuIHVzZSB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlhtbEN1cnNvcjwvc3Bhbj4gaW50ZXJmYWNlJ3MgCi0gICAgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnB1c2g8L3NwYW4+IGFuZCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+cG9wPC9zcGFuPiAKLSAgICBtZXRob2RzLiBUaGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnB1c2g8L3NwYW4+IG1ldGhvZCBwdXNoZXMgdGhlIGN1cnNvcidzIAotICAgIGN1cnJlbnQgbG9jYXRpb24gb250byBhIHN0YWNrIG9mIGxvY2F0aW9ucyBtYWludGFpbmVkIGZvciB0aGF0IHBhcnRpY3VsYXIgCi0gICAgY3Vyc29yOyB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnBvcDwvc3Bhbj4gbWV0aG9kIHJlbW92ZXMgdGhlIGxvY2F0aW9uIAotICAgIGZyb20gdGhlIHRvcCBvZiB0aGUgc3RhY2sgYW5kIG1vdmVzIHRoZSBjdXJzb3IgdG8gdGhhdCBsb2NhdGlvbi48L3A+Ci0gIDxwPkZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nICZsdDtlbXBsb3llZSZndDsgZWxlbWVudCwgdXNlZCBpbiB0aGUgCi0gICAgZXhhbXBsZSBiZWxvdy48L3A+Ci0gIDxwcmU+Ci0mbHQ7ZW1wbG95ZWUmZ3Q7Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7bmFtZSZndDtHbGFkeXMgS3Jhdml0eiZsdDsvbmFtZSZndDsKLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZsdDthZGRyZXNzIGxvY2F0aW9uPSZxdW90O2hvbWUmcXVvdDsmZ3Q7Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7c3RyZWV0Jmd0OzEzMTMgTW9ja2luZ2JpcmQgTGFuZSZsdDsvc3RyZWV0Jmd0OwotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jmx0O2NpdHkmZ3Q7U2VhdHRsZSZsdDsvY2l0eSZndDsKLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZsdDtzdGF0ZSZndDtXQSZsdDsvc3RhdGUmZ3Q7Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7emlwJmd0Ozk4MTE1Jmx0Oy96aXAmZ3Q7Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7L2FkZHJlc3MmZ3Q7Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7YWRkcmVzcyBsb2NhdGlvbj0mcXVvdDt3b3JrJnF1b3Q7Jmd0OwotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jmx0O3N0cmVldCZndDsyMDExIDE1Mm5kIEF2ZW51ZSBORSZsdDsvc3RyZWV0Jmd0OwotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jmx0O2NpdHkmZ3Q7UmVkbW9uZCZsdDsvY2l0eSZndDsKLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZsdDtzdGF0ZSZndDtXQSZsdDsvc3RhdGUmZ3Q7Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7emlwJmd0Ozk4MDUyJmx0Oy96aXAmZ3Q7Ci0mbmJzcDsmbmJzcDsgJm5ic3A7Jmx0Oy9hZGRyZXNzJmd0OwotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jmx0O3Bob25lIGxvY2F0aW9uPSZxdW90O3dvcmsmcXVvdDsmZ3Q7KDQyNSkgNTU1LTY4OTcmbHQ7L3Bob25lJmd0OwotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jmx0O3Bob25lIGxvY2F0aW9uPSZxdW90O2hvbWUmcXVvdDsmZ3Q7KDIwNikgNTU1LTY1OTQmbHQ7L3Bob25lJmd0OwotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jmx0O3Bob25lIGxvY2F0aW9uPSZxdW90O21vYmlsZSZxdW90OyZndDsoMjA2KSA1NTUtNzg5NCZsdDsvcGhvbmUmZ3Q7Ci0mbHQ7L2VtcGxveWVlJmd0OwotPC9wcmU+Ci0gIDxwPlRoZSBmb2xsb3dpbmcgSmF2YSBjb2RlIGlsbHVzdHJhdGVzIGhvdyB5b3UgY2FuIHVzZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+cHVzaDwvc3Bhbj4gCi0gICAgYW5kIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5wb3A8L3NwYW4+IHRvIHB1dCB0aGUgY3Vyc29yIGJhY2sgdG8gYSBzYXZlZCAKLSAgICBsb2NhdGlvbiBhZnRlciBhIGJpdCBvZiB0cmF2ZWxpbmcuPC9wPgotICA8cHJlPgotLyoqCi0gKiBQYXNzIHRvIHRoZSB0cnlTZWxlY3RQYXRoIG1ldGhvZCBhbiBYbWxPYmplY3QgaW5zdGFuY2UgdGhhdCBjb250YWlucwotICogdGhlIFhNTCBhYm92ZS4KLSAqLwotcHVibGljIHZvaWQgdHJ5U2VsZWN0UGF0aChYbWxPYmplY3QgeG1sKQotewotICAgIC8qIAotICAgICAqIEluc2VydHMgdGhlIGN1cnNvciBhdCB0aGUgU1RBUlRET0MgdG9rZW4gKHRoZSB2ZXJ5IGJlZ2lubmluZywgCi0gICAgICogYmVmb3JlIGFueSBlbGVtZW50cykuCi0gICAgICovCi0gICAgWG1sQ3Vyc29yIGN1cnNvciA9IHhtbC5uZXdDdXJzb3IoKTsKLSAgICAvLyBNb3ZlcyB0aGUgY3Vyc29yIHRvIGp1c3QgYmVmb3JlICZsdDtlbXBsb3llZSZndDsKLSAgICBjdXJzb3IudG9GaXJzdENoaWxkKCk7Ci0gICAgLy8gUHVzaGVzIHRoZSBjdXJzb3IncyBjdXJyZW50IGxvY2F0aW9uIG9udG8gdGhlIHN0YWNrLgotICAgIGN1cnNvci5wdXNoKCk7Ci0gICAgLy8gTW92ZXMgdGhlIGN1cnNvciB0byBqdXN0IGJlZm9yZSB0aGUgJnF1b3Q7d29yayZxdW90OyAmbHQ7cGhvbmUmZ3Q7IGVsZW1lbnQuICAgICAgCi0gICAgY3Vyc29yLnRvQ2hpbGQoMik7Ci0gICAgLy8gTW92ZXMgdGhlIGN1cnNvciB0byBqdXN0IGJlZm9yZSB0aGUgJnF1b3Q7aG9tZSZxdW90OyAmbHQ7cGhvbmUmZ3Q7IGVsZW1lbnQuCi0gICAgY3Vyc29yLnRvTmV4dFNpYmxpbmcoKTsKLSAgICAvLyBNb3ZlcyB0aGUgY3Vyc29yIGJhY2sgdG8ganVzdCBiZWZvcmUgJmx0O2VtcGxveWVlJmd0OwotICAgIGN1cnNvci5wb3AoKTsKLX0KLTwvcHJlPgotICA8cD5PZiBjb3Vyc2UsIHlvdSBjYW4gY2FsbCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+cHVzaDwvc3Bhbj4gYW5kIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5wb3A8L3NwYW4+IAotICAgIG11bHRpcGxlIHRpbWVzLiBFYWNoIG5ldyBjYWxsIHRvIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+cHVzaDwvc3Bhbj4gCi0gICAgbWV0aG9kIHB1c2hlcyB0aGUgY3VycmVudCBsb2NhdGlvbiBvbnRvIHRoZSBzdGFjay4gQXMgeW91IGNhbGwgdGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5wb3A8L3NwYW4+IAotICAgIG1ldGhvZCwgeW91J3JlIGFsd2F5cyBnZXR0aW5nIHdoYXQncyBvbiB0b3Agb2YgdGhlIHN0YWNrLiBTbyBpZiB5b3UgY2FsbGVkIAotICAgIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5wdXNoPC9zcGFuPiB0aHJlZSB0aW1lcyBiZWZvcmUgY2FsbGluZyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+cG9wPC9zcGFuPiAKLSAgICAmIzgyMTI7IDEsIDIsIDMgJiM4MjEyOyBjYWxsaW5nIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5wb3A8L3NwYW4+IHRocmVlIAotICAgIHRpbWVzIHdvdWxkIGdldCB0aG9zZSBsb2NhdGlvbnMgaW4gcmV2ZXJzZSBvcmRlciAmIzgyMTI7IDMsIDIsIDEuPC9wPgotICA8cD5UaGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnB1c2g8L3NwYW4+IGFuZCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+cG9wPC9zcGFuPiAKLSAgICBtZXRob2RzIGNhbiBiZSBoYW5keSBhcyBhbiBhbHRlcm5hdGl2ZSB0byBjcmVhdGluZyBuZXcgY3Vyc29ycyB0aGF0IGFyZSBkZXNpZ25lZCAKLSAgICBzaW1wbHkgdG8gbWFyayBhIHBhcnRpY3VsYXIgbG9jYXRpb24gd2hpbGUgeW91IG1vdmUgYW5vdGhlciBjdXJzb3IgYXJvdW5kLiAKLSAgICBUaGUgcmVzb3VyY2VzIHJlcXVpcmVkIHRvIG1haW50YWluIGEgbG9jYXRpb24gc3RhY2sgdGhyb3VnaCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+cHVzaDwvc3Bhbj4gCi0gICAgYW5kIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5wb3A8L3NwYW4+IGFyZSBmYXIgbGVzcyB0aGFuIHRob3NlIG5lZWRlZCBieSAKLSAgICBjdXJzb3JzLiA8L3A+Ci0gIDxIMT5EaXNwb3Npbmcgb2YgYSBDdXJzb3I8L0gxPgotICA8cD5XaGVuIHlvdSdyZSB0aHJvdWdoIHdpdGggYSBjdXJzb3IsIHlvdXIgY29kZSBzaG91bGQgY2FsbCBpdHMgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmRpc3Bvc2U8L3NwYW4+IAotICAgIG1ldGhvZCB0byBpbmRpY2F0ZSB0aGF0IGl0J3Mgbm8gbG9uZ2VyIG5lZWRlZC48L3A+Ci0gIDxwIGNsYXNzPSJyZWxhdGVkdG9waWNzIj5SZWxhdGVkIFRvcGljczwvcD4KLSAgPHA+PGEgaHJlZj0iY29uVW5kZXJzdGFuZGluZ1hNTFRva2Vucy5odG1sIj5VbmRlcnN0YW5kaW5nIFhNTCBUb2tlbnM8L2E+PC9wPgotICA8cD48YSBocmVmPSJjb25HZXR0aW5nU3RhcnRlZHdpdGhYTUxCZWFucy5odG1sIj5HZXR0aW5nIFN0YXJ0ZWQgd2l0aCBYTUxCZWFuczwvYT48L3A+Ci08L2Rpdj4KLTwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4gCi08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KLQotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS92Mi9kb2NzL2d1aWRlL2NvblNlbGVjdGluZ1hNTHdpdGhYUXVlcnlQYXRoWFBhdGguaHRtbCBiL3YyL2RvY3MvZ3VpZGUvY29uU2VsZWN0aW5nWE1Md2l0aFhRdWVyeVBhdGhYUGF0aC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWUxM2Y4Li4wMDAwMDAwCi0tLSBhL3YyL2RvY3MvZ3VpZGUvY29uU2VsZWN0aW5nWE1Md2l0aFhRdWVyeVBhdGhYUGF0aC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjU3ICswLDAgQEAKLTwhZG9jdHlwZSBIVE1MIHB1YmxpYyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgRnJhbWVzZXQvL0VOIj4KLQotPGh0bWw+Ci08aGVhZD4KLTwhLS0gSW5zdGFuY2VCZWdpbkVkaXRhYmxlIG5hbWU9ImRvY3RpdGxlIiAtLT4KLTx0aXRsZT5TZWxlY3RpbmcgWE1MIHdpdGggWFF1ZXJ5IGFuZCBYUGF0aDwvdGl0bGU+Ci08IS0tIEluc3RhbmNlRW5kRWRpdGFibGUgLS0+IAotPCEtLShNZXRhKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLQotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PSRDSEFSU0VUOyI+Ci0KLQotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0ibWV0YXRhZ3MiIC0tPgotCi08bWV0YSBjb250ZW50PSJ5b3VyIG5hbWUiIG5hbWU9ImF1dGhvciI+Ci08bWV0YSBjb250ZW50PSJBIGRlc2NyaXB0aW9uIG9mIHRoZSB0b3BpYyBjb250ZW50cy4iIG5hbWU9ImRlc2NyaXB0aW9uIj4KLTxtZXRhIGNvbnRlbnQ9ImtleXdvcmRzIHRvIGhlbHAgaW4gc2VhcmNoZXMiIG5hbWU9ImtleXdvcmRzIj4KLTxtZXRhIGNvbnRlbnQ9IjEwLzI1LzAyIiBuYW1lPSJkYXRlIGxhc3QgbW9kaWZpZWQiPgotPCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPgotCi08IS0tKExpbmtzKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iaGVhZCIgLS0+IAotPGxpbmsgaHJlZj0iLi4veG1sYmVhbnMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4KLTwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4KLTxsaW5rIGhyZWY9Ii4uL3htbGJlYW5zLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+Ci08YSBocmVmPSIuLi8uLi8uLi9jb3JlL2luZGV4Lmh0bWwiIGlkPSJpbmRleCI+PC9hPgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgc3JjPSIuLi8uLi8uLi9jb3JlL3RvcGljSW5mby5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiBzcmM9Ii4uLy4uLy4uL2NvcmUvQ29va2llQ2xhc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgc3JjPSIuLi8uLi8uLi9jb3JlL2Rpc3BsYXlDb250ZW50LmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLQotPCEtLShCb2R5KT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLTxib2R5PgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+Ci0KLTwvc2NyaXB0PgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iYm9keSIgLS0+IAotPGgxPiBTZWxlY3RpbmcgWE1MIHdpdGggWFF1ZXJ5IGFuZCBYUGF0aDwvaDE+Ci08ZGl2IGlkPSJ0b3BpY3RleHQiPiAKLSAgPHA+WW91IGNhbiB1c2UgWFF1ZXJ5IGFuZCBYUGF0aCB0byByZXRyaWV2ZSBzcGVjaWZpYyBwaWVjZXMgb2YgWE1MIGFzIHlvdSBtaWdodCAKLSAgICByZXRyaWV2ZSBkYXRhIGZyb20gYSBkYXRhYmFzZS4gWFF1ZXJ5IGFuZCBYUGF0aCBwcm92aWRlIGEgc3ludGF4IGZvciBzcGVjaWZ5aW5nIAotICAgIHdoaWNoIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzIHlvdSdyZSBpbnRlcmVzdGVkIGluLiBUaGUgWE1MQmVhbnMgQVBJIHByb3ZpZGVzIAotICAgIHR3byBtZXRob2RzIGZvciBleGVjdXRpbmcgWFF1ZXJ5IGFuZCBYUGF0aCBleHByZXNzaW9ucywgYW5kIHR3byBkaWZmZXJpbmcgCi0gICAgd2F5cyB0byB1c2UgdGhlbS4gVGhlIG1ldGhvZHMgYXJlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5zZWxlY3RQYXRoPC9zcGFuPiAKLSAgICBhbmQgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmV4ZWNRdWVyeTwvc3Bhbj4sIGFuZCB5b3UgY2FuIGNhbGwgdGhlbSBmcm9tIAotICAgIDxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj48c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sT2JqZWN0PC9zcGFuPjwvYT4gCi0gICAgKG9yIGFuIG9iamVjdCBpbmhlcml0aW5nIGZyb20gaXQpIG9yIDxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj48c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sQ3Vyc29yPC9zcGFuPjwvYT4uIAotICAgIFRoZSByZXN1bHRzIGZvciB0aGUgbWV0aG9kcyBkaWZmZXIgc29tZXdoYXQuIDwvcD4KLSAgPGgyPlVzaW5nIHRoZSBzZWxlY3RQYXRoIE1ldGhvZDwvaDI+Ci08L2Rpdj4KLTxkaXY+Ci0gIDxwPlRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+c2VsZWN0UGF0aDwvc3Bhbj4gbWV0aG9kIGlzIHRoZSBtb3N0IGVmZmljaWVudCAKLSAgICB3YXkgdG8gZXhlY3V0ZSBYUGF0aCBleHByZXNzaW9ucy4gVGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5zZWxlY3RQYXRoPC9zcGFuPiAKLSAgICBtZXRob2QgaXMgb3B0aW1pemVkIGZvciBYUGF0aC4gV2hlbiB5b3UgdXNlIFhQYXRoIHdpdGggdGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5zZWxlY3RQYXRoPC9zcGFuPiAKLSAgICBtZXRob2QsIHRoZSB2YWx1ZSByZXR1cm5lZCBpcyBhbiBhcnJheSBvZiB2YWx1ZXMgZnJvbSB0aGUgPGVtPmN1cnJlbnQgZG9jdW1lbnQ8L2VtPi4gCi0gICAgSW4gY29udHJhc3QsIHdoZW4geW91IHVzZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+ZXhlY1F1ZXJ5PC9zcGFuPiwgdGhlIHZhbHVlIAotICAgIHJldHVybmVkIGlzIGEgPGVtPm5ldyBkb2N1bWVudDwvZW0+LjwvcD4KLSAgPGgzPkNhbGxpbmcgZnJvbSBYbWxPYmplY3Q8L2gzPgotICA8cD5XaGVuIGNhbGxlZCBmcm9tIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5YbWxPYmplY3Q8L3NwYW4+IChvciBhIHR5cGUgdGhhdCAKLSAgICBpbmhlcml0cyBmcm9tIGl0KSwgdGhpcyBtZXRob2QgcmV0dXJucyBhbiBhcnJheSBvZiBvYmplY3RzLiBJZiB0aGUgZXhwcmVzc2lvbiAKLSAgICBpcyBleGVjdXRlZCBhZ2FpbnN0IHR5cGVzIGdlbmVyYXRlZCBmcm9tIHNjaGVtYSwgdGhlbiB0aGUgdHlwZSBmb3IgdGhlIHJldHVybmVkIAotICAgIGFycmF5IGlzIG9uZSBvZiB0aGUgSmF2YSB0eXBlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBzY2hlbWEuIDwvcD4KLSAgPHA+Rm9yIGV4YW1wbGUsIGltYWdpbmUgeW91IGhhdmUgdGhlIGZvbGxvd2luZyBYTUwgY29udGFpbmluZyBlbXBsb3llZSBpbmZvcm1hdGlvbi4gCi0gICAgWW91J3ZlIGNvbXBpbGVkIHRoZSBzY2hlbWEgZGVzY3JpYmluZyB0aGlzIFhNTCBhbmQgdGhlIHR5cGVzIGdlbmVyYXRlZCBmcm9tIAotICAgIHNjaGVtYSBhcmUgYXZhaWxhYmxlIHRvIHlvdXIgY29kZS48L3A+Ci08cHJlPgotJmx0O3hxOmVtcGxveWVlcyB4bWxuczp4cT0mcXVvdDtodHRwOi8vb3BlbnVyaS5vcmcvc2VsZWN0UGF0aCZxdW90OyZndDsKLSAgICAmbHQ7eHE6ZW1wbG95ZWUmZ3Q7Ci0gICAgICAgICZsdDt4cTpuYW1lJmd0O0ZyZWQgSm9uZXMmbHQ7L3hxOm5hbWUmZ3Q7Ci0gICAgICAgICZsdDt4cTphZGRyZXNzIGxvY2F0aW9uPSZxdW90O2hvbWUmcXVvdDsmZ3Q7Ci0gICAgICAgICAgICAmbHQ7eHE6c3RyZWV0Jmd0OzkwMCBBdXJvcmEgQXZlLiZsdDsveHE6c3RyZWV0Jmd0OwotICAgICAgICAgICAgJmx0O3hxOmNpdHkmZ3Q7U2VhdHRsZSZsdDsveHE6Y2l0eSZndDsKLSAgICAgICAgICAgICZsdDt4cTpzdGF0ZSZndDtXQSZsdDsveHE6c3RhdGUmZ3Q7Ci0gICAgICAgICAgICAmbHQ7eHE6emlwJmd0Ozk4MTE1Jmx0Oy94cTp6aXAmZ3Q7Ci0gICAgICAgICZsdDsveHE6YWRkcmVzcyZndDsKLSAgICAgICAgJmx0O3hxOmFkZHJlc3MgbG9jYXRpb249JnF1b3Q7d29yayZxdW90OyZndDsKLSAgICAgICAgICAgICZsdDt4cTpzdHJlZXQmZ3Q7MjAxMSAxNTJuZCBBdmVudWUgTkUmbHQ7L3hxOnN0cmVldCZndDsKLSAgICAgICAgICAgICZsdDt4cTpjaXR5Jmd0O1JlZG1vbmQmbHQ7L3hxOmNpdHkmZ3Q7Ci0gICAgICAgICAgICAmbHQ7eHE6c3RhdGUmZ3Q7V0EmbHQ7L3hxOnN0YXRlJmd0OwotICAgICAgICAgICAgJmx0O3hxOnppcCZndDs5ODA1MiZsdDsveHE6emlwJmd0OwotICAgICAgICAmbHQ7L3hxOmFkZHJlc3MmZ3Q7Ci0gICAgICAgICZsdDt4cTpwaG9uZSBsb2NhdGlvbj0mcXVvdDt3b3JrJnF1b3Q7Jmd0Oyg0MjUpNTU1LTU2NjUmbHQ7L3hxOnBob25lJmd0OwotICAgICAgICAmbHQ7eHE6cGhvbmUgbG9jYXRpb249JnF1b3Q7aG9tZSZxdW90OyZndDsoMjA2KTU1NS01NTU1Jmx0Oy94cTpwaG9uZSZndDsKLSAgICAgICAgJmx0O3hxOnBob25lIGxvY2F0aW9uPSZxdW90O21vYmlsZSZxdW90OyZndDsoMjA2KTU1NS00MzIxJmx0Oy94cTpwaG9uZSZndDsKLSAgICAmbHQ7L3hxOmVtcGxveWVlJmd0OwotJmx0Oy94cTplbXBsb3llZXMmZ3Q7Ci08L3ByZT4KLSAgSWYgeW91IHdhbnRlZCB0byBmaW5kIHRoZSBwaG9uZSBudW1iZXJzIHdob3NlIGFyZWEgY29kZSB3YXMgMjA2LCB5b3UgY291bGQgY2FwdHVyZSAKLSAgdGhlIFhQYXRoIGV4cHJlc3Npb24gaW4gdGhpcyB3YXk6IAotICA8cHJlPgotU3RyaW5nIHF1ZXJ5RXhwcmVzc2lvbiA9Ci0gICAgJnF1b3Q7ZGVjbGFyZSBuYW1lc3BhY2UgeHE9J2h0dHA6Ly9vcGVudXJpLm9yZy9zZWxlY3RQYXRoJyZxdW90OyArCi0gICAgJnF1b3Q7JHRoaXMveHE6ZW1wbG95ZWVzL3hxOmVtcGxveWVlL3hxOnBob25lW2NvbnRhaW5zKC4sICcoMjA2KScpXSZxdW90OwotPC9wcmU+Ci0gIDxwPk5vdGljZSBpbiB0aGUgcXVlcnkgZXhwcmVzc2lvbiB0aGF0IHRoZSB2YXJpYWJsZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+JHRoaXM8L3NwYW4+IAotICAgIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgY29udGV4dCBub2RlICh0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlhtbE9iamVjdDwvc3Bhbj4gCi0gICAgdGhhdCB5b3UgYXJlIHF1ZXJ5aW5nIGZyb20pLiBJbiB0aGlzIGV4YW1wbGUgeW91IGFyZSBxdWVyeWluZyBmcm9tIHRoZSBkb2N1bWVudCAKLSAgICBsZXZlbCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sT2JqZWN0PC9zcGFuPi48L3A+Ci0gIDxwPllvdSBjb3VsZCB0aGVuIHByaW50IHRoZSByZXN1bHRzIHdpdGggY29kZSBzdWNoIGFzIHRoZSBmb2xsb3dpbmc6PC9wPgotICA8cHJlPgotLyogCi0gKiBSZXRyaWV2ZSB0aGUgbWF0Y2hpbmcgcGhvbmUgZWxlbWVudHMgYW5kIGFzc2lnbiB0aGUgcmVzdWx0cyB0byB0aGUgY29ycmVzcG9uZGluZwotICogZ2VuZXJhdGVkIHR5cGUuCi0gKi8KLVBob25lVHlwZVtdIHBob25lcyA9IChQaG9uZVR5cGVbXSllbXBEb2Muc2VsZWN0UGF0aChxdWVyeUV4cHJlc3Npb24pOwotLyoKLSAqIExvb3AgdGhyb3VnaCB0aGUgcmVzdWx0cywgcHJpbnRpbmcgdGhlIHZhbHVlIG9mIHRoZSBwaG9uZSBlbGVtZW50LgotICovCi1mb3IgKGludCBpID0gMDsgaSA8IHBob25lcy5sZW5ndGg7IGkrKykKLXsKLSAgICBTeXN0ZW0ub3V0LnByaW50bG4ocGhvbmVzW2ldLnN0cmluZ1ZhbHVlKCkpOwotfSAgPC9wcmU+Ci0KLSAgPGgzPkNhbGxpbmcgZnJvbSBYbWxDdXJzb3I8L2gzPgotICA8cD5XaGVuIGNhbGxlZCBmcm9tIGFuIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5YbWxDdXJzb3I8L3NwYW4+IGluc3RhbmNlLCB0aGUgCi0gICAgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnNlbGVjdFBhdGg8L3NwYW4+IG1ldGhvZCByZXRyaWV2ZXMgYSBsaXN0IG9mIHNlbGVjdGlvbnMsIAotICAgIG9yIGxvY2F0aW9ucyBpbiB0aGUgWE1MLiBUaGUgc2VsZWN0aW9ucyBhcmUgcmVtZW1iZXJlZCBieSB0aGUgY3Vyc29yIGluc3RhbmNlLiAKLSAgICBZb3UgY2FuIHVzZSBtZXRob2RzIHN1Y2ggYXMgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnRvTmV4dFNlbGVjdGlvbjwvc3Bhbj4gCi0gICAgdG8gbmF2aWdhdGUgYW1vbmcgdGhlbS48L3A+Ci0gIDxkaXY+Ci0gICAgPHA+VGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5zZWxlY3RQYXRoPC9zcGFuPiBtZXRob2QgdGFrZXMgYW4gWFBhdGggZXhwcmVzc2lvbi4gCi0gICAgICBJZiB0aGUgZXhwcmVzc2lvbiByZXR1cm5zIGFueSByZXN1bHRzLCBlYWNoIG9mIHRob3NlIHJlc3VsdHMgaXMgYWRkZWQgYXMgCi0gICAgICBhIHNlbGVjdGlvbiB0byB0aGUgY3Vyc29yJ3MgbGlzdCBvZiBzZWxlY3Rpb25zLiBZb3UgY2FuIG1vdmUgdGhyb3VnaCB0aGVzZSAKLSAgICAgIHNlbGVjdGlvbnMgaW4gdGhlIHdheSB5b3UgbWlnaHQgdXNlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5qYXZhLnV0aWwuSXRlcmF0b3I8L3NwYW4+IAotICAgICAgbWV0aG9kcyB0byBtb3ZlIHRocm91Z2ggYSBjb2xsZWN0aW9uLjwvcD4KLSAgICA8cD4gRm9yIGV4YW1wbGUsIGZvciBhIHBhdGggc3VjaCBhcyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+JHRoaXMvZW1wbG95ZWVzL2VtcGxveWVlPC9zcGFuPiwgCi0gICAgICB0aGUgcmVzdWx0cyB3b3VsZCBpbmNsdWRlIGEgc2VsZWN0aW9uIGZvciBlYWNoIGVtcGxveWVlIGVsZW1lbnQgZm91bmQgYnkgCi0gICAgICB0aGUgZXhwcmVzc2lvbi4gTm90ZSB0aGF0IHRoZSB2YXJpYWJsZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+JHRoaXM8L3NwYW4+IAotICAgICAgaXMgYWx3YXlzIGJvdW5kIHRvIHRoZSBjdXJyZW50IGNvbnRleHQgbm9kZSwgd2hpY2ggaW4gdGhpcyBleGFtcGxlIGlzIHRoZSAKLSAgICAgIGRvY3VtZW50LiBBZnRlciBjYWxsaW5nIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+c2VsZWN0UGF0aDwvc3Bhbj4gbWV0aG9kLCAKLSAgICAgIHlvdSB3b3VsZCB1c2UgdmFyaW91cyAmcXVvdDtzZWxlY3Rpb24mcXVvdDstcmVsYXRlZCBtZXRob2RzIHRvIHdvcmsgd2l0aCAKLSAgICAgIHRoZSByZXN1bHRzLiBUaGVzZSBtZXRob2RzIGluY2x1ZGU6PC9wPgotICA8L2Rpdj4KLSAgPHVsPgotICAgIDxsaT4gCi0gICAgICA8ZGl2PjxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5nZXRTZWxlY3Rpb25Db3VudCgpIDwvc3Bhbj50byByZXRyaWV2ZSB0aGUgCi0gICAgICAgIG51bWJlciBvZiBzZWxlY3Rpb25zIHJlc3VsdGluZyBmcm9tIHRoZSBxdWVyeS48L2Rpdj4KLSAgICA8L2xpPgotICAgIDxsaT4gCi0gICAgICA8ZGl2PiA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+dG9OZXh0U2VsZWN0aW9uKCk8L3NwYW4+IHRvIG1vdmUgdGhlIGN1cnNvciAKLSAgICAgICAgdG8gdGhlIG5leHQgc2VsZWN0aW9uIGluIHRoZSBsaXN0IChzdWNoIGFzIHRvIHRoZSBvbmUgcG9pbnRpbmcgYXQgdGhlIAotICAgICAgICBuZXh0IGVtcGxveWVlIGVsZW1lbnQgZm91bmQpLjwvZGl2PgotICAgIDwvbGk+Ci0gICAgPGxpPiAKLSAgICAgIDxkaXY+IDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj50b1NlbGVjdGlvbihpbnQpPC9zcGFuPiB0byBtb3ZlIHRoZSBjdXJzb3IgCi0gICAgICAgIHRvIHRoZSBzZWxlY3Rpb24gYXQgdGhlIHNwZWNpZmllZCBpbmRleCAoc3VjaCBhcyB0byB0aGUgdGhpcmQgZW1wbG95ZWUgCi0gICAgICAgIGVsZW1lbnQgaW4gdGhlIHNlbGVjdGlvbikuPC9kaXY+Ci0gICAgPC9saT4KLSAgICA8bGk+IAotICAgICAgPGRpdj4gPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmhhc05leHRTZWxlY3Rpb24oKTwvc3Bhbj4gdG8gZmluZCBvdXQgaWYgCi0gICAgICAgIHRoZXJlIGFyZSBtb3JlIHNlbGVjdGlvbnMgYWZ0ZXIgdGhlIGN1cnNvcidzIGN1cnJlbnQgcG9zaXRpb24uPC9kaXY+Ci0gICAgPC9saT4KLSAgICA8bGk+IAotICAgICAgPGRpdj48c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+IGNsZWFyU2VsZWN0aW9ucygpPC9zcGFuPiBjbGVhcnMgdGhlIHNlbGVjdGlvbnMgCi0gICAgICAgIGZyb20gdGhlIGN1cnJlbnQgY3Vyc29yLiBUaGlzIGRvZXNuJ3QgbW9kaWZ5IHRoZSBkb2N1bWVudCAoaW4gb3RoZXIgd29yZHMsIAotICAgICAgICBpdCBkb2Vzbid0IGRlbGV0ZSB0aGUgc2VsZWN0ZWQgWE1MKTsgaXQgbWVyZWx5IGNsZWFycyB0aGUgc2VsZWN0aW9uIGxpc3QgCi0gICAgICAgIHNvIHRoYXQgdGhlIGN1cnNvciBpcyBubyBsb25nZXIga2VlcGluZyB0cmFjayBvZiB0aG9zZSBwb3NpdGlvbnMuPC9kaXY+Ci0gICAgPC9saT4KLSAgPC91bD4KLSAgPGRpdj4KLSAgICA8cD5UaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHlvdSBtaWdodCB1c2UgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnNlbGVjdFBhdGg8L3NwYW4+LCAKLSAgICAgIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5wdXNoPC9zcGFuPiBhbmQgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnBvcDwvc3Bhbj4gCi0gICAgICBtZXRob2RzLCB0byBtYW5ldXZlciB0aHJvdWdoIFhNTCwgcmV0cmlldmluZyBzcGVjaWZpYyB2YWx1ZXMuIDwvcD4KLSAgICA8cHJlPgotcHVibGljIHZvaWQgcHJpbnRaaXBzQW5kV29ya1Bob25lcyhYbWxPYmplY3QgeG1sKQotewotICAgIC8vIERlY2xhcmUgdGhlIG5hbWVzcGFjZSB0aGF0IHdpbGwgYmUgdXNlZC4KLSAgICBTdHJpbmcgeHFOYW1lc3BhY2UgPSAKLSAgICAgICAgJnF1b3Q7ZGVjbGFyZSBuYW1lc3BhY2UgeHE9J2h0dHA6Ly9vcGVudXJpLm9yZy9zZWxlY3RQYXRoJyZxdW90OzsKLQotICAgIC8vIEluc2VydCBhIGN1cnNvciBhbmQgbW92ZSBpdCB0byB0aGUgZmlyc3QgZWxlbWVudC4KLSAgICBYbWxDdXJzb3IgY3Vyc29yID0geG1sLm5ld0N1cnNvcigpOwotICAgIGN1cnNvci50b0ZpcnN0Q2hpbGQoKTsKLSAgICAvKiAKLSAgICAgKiBTYXZlIHRoZSBjdXJzb3IncyBjdXJyZW50IGxvY2F0aW9uIGJ5IHB1c2hpbmcgaXQgCi0gICAgICogb250byBhIHN0YWNrIG9mIHNhdmVkIGxvY2F0aW9ucy4KLSAgICAgKi8KLSAgICBjdXJzb3IucHVzaCgpOwotICAgIC8vIFF1ZXJ5IGZvciB6aXAgZWxlbWVudHMuCi0gICAgY3Vyc29yLnNlbGVjdFBhdGgoeHFOYW1lc3BhY2UgKyAmcXVvdDskdGhpcy8veHE6emlwJnF1b3Q7KTsKLSAgICAvKiAKLSAgICAgKiBMb29wIHRocm91Z2ggdGhlIGxpc3Qgb2Ygc2VsZWN0aW9ucywgZ2V0dGluZyB0aGUgdmFsdWUgb2YgCi0gICAgICogZWFjaCBlbGVtZW50LgotICAgICAqLwotICAgIHdoaWxlIChjdXJzb3IudG9OZXh0U2VsZWN0aW9uKCkpCi0gICAgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY3Vyc29yLmdldFRleHRWYWx1ZSgpKTsKLSAgICB9Ci0gICAgLy8gUG9wIHRoZSBzYXZlZCBsb2NhdGlvbiBvZmYgdGhlIHN0YWNrLgotICAgIGN1cnNvci5wb3AoKTsKLSAgICAvLyBRdWVyeSBhZ2FpbiBmcm9tIHRoZSB0b3AsIHRoaXMgdGltZSBmb3Igd29yayBwaG9uZSBudW1iZXJzLgotICAgIGN1cnNvci5zZWxlY3RQYXRoKHhxTmFtZXNwYWNlICsgJnF1b3Q7JHRoaXMvL3hxOnBob25lW0Bsb2NhdGlvbj0nd29yayddJnF1b3Q7KTsKLSAgICAvKiAKLSAgICAgKiBNb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIGZpcnN0IHNlbGVjdGlvbiwgdGhlbSBwcmludCB0aGF0IGVsZW1lbnQncwotICAgICAqIHZhbHVlLgotICAgICAqLwotICAgIGN1cnNvci50b05leHRTZWxlY3Rpb24oKTsKLSAgICBTeXN0ZW0ub3V0LnByaW50bG4oY3Vyc29yLmdldFRleHRWYWx1ZSgpKTsKLSAgICAvLyBEaXNwb3NlIG9mIHRoZSBjdXJzb3IuCi0gICAgY3Vyc29yLmRpc3Bvc2UoKTsKLX0KLTwvcHJlPgotICAgIDxwPlVzaW5nIHNlbGVjdGlvbnMgaXMgc29tZXdoYXQgbGlrZSB0cmFja2luZyB0aGUgbG9jYXRpb25zIG9mIG11bHRpcGxlIGN1cnNvcnMgCi0gICAgICB3aXRoIGEgc2luZ2xlIGN1cnNvci4gVGhpcyBiZWNvbWVzIGVzcGVjaWFsbHkgY2xlYXIgd2hlbiB5b3UgcmVtb3ZlIHRoZSAKLSAgICAgIFhNTCBhc3NvY2lhdGVkIHdpdGggYSBzZWxlY3Rpb24uIFdoZW4geW91IGRvIHNvIHRoZSBzZWxlY3Rpb24gaXRzZWxmIHJlbWFpbnMgCi0gICAgICBhdCB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIHJlbW92ZWQgWE1MIHdhcywgYnV0IG5vdyB0aGUgc2VsZWN0aW9uJ3MgbG9jYXRpb24gCi0gICAgICBpcyBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIFhNTCB0aGF0IHdhcyBhZnRlciB0aGUgWE1MIHlvdSByZW1vdmVkLiBJbiBvdGhlciAKLSAgICAgIHdvcmRzLCByZW1vdmluZyBYTUwgY3JlYXRlZCBhIGtpbmQgb2YgdmFjdXVtIHRoYXQgd2FzIGZpbGxlZCBieSB0aGUgWE1MIAotICAgICAgYWZ0ZXIgaXQsIHdoaWNoIHNoaWZ0ZWQgdXAgaW50byB0aGUgc3BhY2UgJiM4MjEyOyB1cCBpbnRvIHBvc2l0aW9uIGltbWVkaWF0ZWx5IAotICAgICAgYWZ0ZXIgdGhlIHNlbGVjdGlvbiBsb2NhdGlvbi4gVGhpcyBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIGlmIHRoZSBzZWxlY3Rpb24gCi0gICAgICBoYWQgYmVlbiBhbm90aGVyIGN1cnNvci48L3A+Ci0gICAgPHA+RmluYWxseSwgd2hlbiB1c2luZyBzZWxlY3Rpb25zIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBsaXN0IG9mIHNlbGVjdGlvbnMgCi0gICAgICBpcyBpbiBhIHNlbnNlICZxdW90O2xpdmUmcXVvdDsuIFRoZSBjdXJzb3IgeW91J3JlIHdvcmtpbmcgd2l0aCBpcyBrZWVwaW5nIAotICAgICAgdHJhY2sgb2YgdGhlIHNlbGVjdGlvbnMgaW4gdGhlIGxpc3QuIEluIG90aGVyIHdvcmRzLCBiZSBzdXJlIHRvIGNhbGwgdGhlIAotICAgICAgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmNsZWFyU2VsZWN0aW9uczwvc3Bhbj4gbWV0aG9kIHdoZW4geW91J3JlIGZpbmlzaGVkIAotICAgICAgd2l0aCB0aGUgc2VsZWN0aW9ucywganVzdCBhcyB5b3Ugc2hvdWxkIGNhbGwgdGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5YbWxDdXJzb3IuZGlzcG9zZSgpPC9zcGFuPiAKLSAgICAgIG1ldGhvZCB3aGVuIHlvdSdyZSBmaW5pc2hlZCB1c2luZyB0aGUgY3Vyc29yLjwvcD4KLSAgPC9kaXY+Ci0gIDxoMj5Vc2luZyB0aGUgZXhlY1F1ZXJ5IE1ldGhvZDwvaDI+Ci0gIDxwPlVzZSB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmV4ZWNRdWVyeTwvc3Bhbj4gbWV0aG9kIHRvIGV4ZWN1dGUgWFF1ZXJ5IAotICAgIGV4cHJlc3Npb25zIHRoYXQgYXJlIG1vcmUgc29waGlzdGljYXRlZCB0aGFuIHBhdGhzLiBUaGVzZSBleHByZXNzaW9ucyBpbmNsdWRlIAotICAgIG1vcmUgc29waGlzdGljYXRlZCBsb29wcyBhbmQgRkxXUiAoRm9yLCBMZXQsIFdoZXJlLCBhbmQgUmVzdWx0cykgZXhwcmVzc2lvbnMuIAotICA8L3A+Ci0gIDxwIGNsYXNzPSJub3RlcGFyYSI+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBCZSBzdXJlIHRvIHNlZSB0aGUgc2ltcGxlRXhwcmVzc2lvbnMgCi0gICAgc2FtcGxlIGluIHRoZSBTYW1wbGVzQXBwIGFwcGxpY2F0aW9uIGZvciBhIHNhbXBsaW5nIG9mIFhRdWVyeSBleHByZXNzaW9ucyAKLSAgICBpbiB1c2UuPC9wPgotICA8aDM+Q2FsbGluZyBmcm9tIFhtbE9iamVjdDwvaDM+Ci0gIDxwPlVubGlrZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+c2VsZWN0UGF0aDwvc3Bhbj4sIGNhbGxpbmcgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmV4ZWNRdWVyeTwvc3Bhbj4gCi0gICAgZnJvbSBhbiA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sT2JqZWN0PC9zcGFuPiBpbnN0YW5jZSB3aWxsIHJldHVybiBhbiAKLSAgICA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sT2JqZWN0PC9zcGFuPiBhcnJheS4gSWYgdGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5YbWxPYmplY3Q8L3NwYW4+IAotICAgIGluc3RhbmNlcyByZXN1bHRpbmcgZnJvbSB0aGUgWFF1ZXJ5IG1hdGNoIGEgcmVjb2duaXplZCBYTUxCZWFucyB0eXBlICh0aGUgCi0gICAgbmFtZXNwYWNlIGFuZCB0b3AgbGV2ZWwgZWxlbWVudCBuYW1lIG1hdGNoIHVwIHdpdGggYW4gWE1MQmVhbnMgdHlwZSkgdGhlbiAKLSAgICB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlhtbE9iamVjdDwvc3Bhbj4gd2lsbCBiZSB0eXBlZDsgb3RoZXJ3aXNlIHRoZSAKLSAgICA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sT2JqZWN0PC9zcGFuPiB3aWxsIGJlIHVudHlwZWQuPC9wPgotICA8aDM+Q2FsbGluZyBmcm9tIFhtbEN1cnNvcjwvaDM+Ci08L2Rpdj4KLSAgCi08ZGl2PiAKLSAgPHA+Q2FsbGluZyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+ZXhlY1F1ZXJ5PC9zcGFuPiBmcm9tIGFuIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5YbWxDdXJzb3I8L3NwYW4+IAotICAgIGluc3RhbmNlIHJldHVybnMgYSBuZXcgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlhtbEN1cnNvcjwvc3Bhbj4gaW5zdGFuY2UuIAotICAgIFRoZSBjdXJzb3IgcmV0dXJuZWQgaXMgcG9zaXRpb25lZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbmV3IHhtbCBkb2N1bWVudCByZXByZXNlbnRpbmcgCi0gICAgdGhlIHF1ZXJ5IHJlc3VsdHMsIGFuZCB5b3UgY2FuIHVzZSBpdCB0byBtb3ZlIHRocm91Z2ggdGhlIHJlc3VsdHMsIGN1cnNvci1zdHlsZSAKLSAgICAoZm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSA8YSBocmVmPSJjb25OYXZpZ2F0aW5nWE1Md2l0aEN1cnNvcnMuaHRtbCI+TmF2aWdhdGluZyAKLSAgICBYTUwgd2l0aCBDdXJzb3JzPC9hPikuIElmIHRoZSBkb2N1bWVudCByZXN1bHRpbmcgZnJvbSB0aGUgcXVlcnkgZXhlY3V0aW9uIAotICAgIHJlcHJlc2VudHMgYSByZWNvZ25pemVkIFhNTEJlYW5zIHR5cGUgKHRoZSBuYW1lc3BhY2UgYW5kIHRvcCBsZXZlbCBlbGVtZW50IAotICAgIG5hbWUgbWF0Y2ggdXAgd2l0aCBhbiBYTUxCZWFucyB0eXBlKSB0aGVuIHRoZSBkb2N1bWVudCByZXN1bHRpbmcgZnJvbSB0aGUgCi0gICAgeHF1ZXJ5IHdpbGwgaGF2ZSB0aGF0IEphdmEgdHlwZTsgb3RoZXJ3aXNlIHRoZSByZXN1bHRpbmcgZG9jdW1lbnQgd2lsbCBiZSAKLSAgICB1bnR5cGVkLjwvcD4KLSAgPGgyPlJlbGF0ZWQgVG9waWNzPC9oMj4KLTwvZGl2PgotPHA+PGEgaHJlZj0iY29uR2V0dGluZ1N0YXJ0ZWR3aXRoWE1MQmVhbnMuaHRtbCI+R2V0dGluZyBTdGFydGVkIHdpdGggWE1MQmVhbnM8L2E+PC9wPgotPCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPiAKLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgotCi08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3YyL2RvY3MvZ3VpZGUvY29uVW5kZXJzdGFuZGluZ1hNTFRva2Vucy5odG1sIGIvdjIvZG9jcy9ndWlkZS9jb25VbmRlcnN0YW5kaW5nWE1MVG9rZW5zLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0MzAyZjQuLjAwMDAwMDAKLS0tIGEvdjIvZG9jcy9ndWlkZS9jb25VbmRlcnN0YW5kaW5nWE1MVG9rZW5zLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzYgKzAsMCBAQAotPCFkb2N0eXBlIEhUTUwgcHVibGljICItLy9XM0MvL0RURCBIVE1MIDQuMCBGcmFtZXNldC8vRU4iPgotCi08aHRtbD4KLTxoZWFkPgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iZG9jdGl0bGUiIC0tPgotPHRpdGxlPlVuZGVyc3RhbmRpbmcgWE1MIFRva2VuczwvdGl0bGU+Ci08IS0tIEluc3RhbmNlRW5kRWRpdGFibGUgLS0+IAotPCEtLShNZXRhKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLQotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PSRDSEFSU0VUOyI+Ci0KLQotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0ibWV0YXRhZ3MiIC0tPgotCi08bWV0YSBuYW1lPSJjb21wb25lbnQiIGNvbnRlbnQ9IiI+Ci08IS0tIEluIHRoZSBkZXNjcmlwdGlvbiBtZXRhdGFnLCBwbGVhc2UgcHJvdmlkZSBhIEJSSUVGIGRlc2NyaXB0aW9uIG9mIHRoZSB0b3BpYyBjb250ZW50cy4gLS0+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iIj4KLTwhLS0gSW4gdGhlIGNvbXBvbmVudCBtZXRhdGFnLCBwbGVhc2UgbGlzdCBrZXl3b3JkcyB0aGF0IHdpbGwgaGVscCBhIHVzZXIgc2VhcmNoIGZvciB0aGlzIHRvcGljLiAtLT4KLTxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSIiPgotPCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPgotCi08IS0tKExpbmtzKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iaGVhZCIgLS0+Ci08IS0tIEluc3RhbmNlRW5kRWRpdGFibGUgLS0+Ci08bGluayBocmVmPSIuLi94bWxiZWFucy5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgotPGEgaHJlZj0iLi4vLi4vLi4vY29yZS9pbmRleC5odG1sIiBpZD0iaW5kZXgiPjwvYT4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHNyYz0iLi4vLi4vLi4vY29yZS90b3BpY0luZm8uanMiPjwvc2NyaXB0PgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgc3JjPSIuLi8uLi8uLi9jb3JlL0Nvb2tpZUNsYXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHNyYz0iLi4vLi4vLi4vY29yZS9kaXNwbGF5Q29udGVudC5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci0KLTwhLS0oQm9keSk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+Ci08Ym9keT4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgotCi08L3NjcmlwdD4KLTwhLS0gSW5zdGFuY2VCZWdpbkVkaXRhYmxlIG5hbWU9ImJvZHkiIC0tPiAKLTxkaXYgaWQ9dG9waWN0aXRsZT4gCi0gIDxwIGNsYXNzPVRpdGxlPlVuZGVyc3RhbmRpbmcgWE1MIFRva2VuczwvcD4KLTwvZGl2PgotPGRpdiBpZD10b3BpY3RleHQ+IAotICA8cD5BbiBYTUwgY3Vyc29yIChhbiBpbnN0YW5jZSBvZiB0aGUgPGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPjxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5YbWxDdXJzb3I8L3NwYW4+PC9hPiAKLSAgICBpbnRlcmZhY2UpIG1vdmVzIGZyb20gdG9rZW4gdG8gdG9rZW4gYXMgeW91ciBjb2RlIG1vdmVzIHRoZSBjdXJzb3IuIFdoZW4geW91IAotICAgIG1vdmUgYSBjdXJzb3IgdXNpbmcgYSBtZXRob2Qgc3VjaCBhcyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+dG9QYXJlbnQ8L3NwYW4+LCAKLSAgICA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+dG9GaXJzdEF0dHJpYnV0ZTwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj50b1ByZXZTaWJsaW5nPC9zcGFuPiwgCi0gICAgYW5kIHNvIG9uLCB0aGUgY3Vyc29yIG1vdmVzIHRvIHRoZSB0b2tlbiBmaXR0aW5nIHRoZSBkZXNjcmlwdGlvbi4gSWYgdGhlcmUgCi0gICAgaXMgbm8gYXBwcm9wcmlhdGUgdG9rZW4gdG8gbW92ZSB0bywgdGhlIGN1cnNvciByZW1haW5zIHdoZXJlIGl0IGlzLCBhbmQgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmZhbHNlPC9zcGFuPiAKLSAgICBpcyByZXR1cm5lZCB0byBpbmRpY2F0ZSB0aGF0IGl0IGRpZG4ndCBtb3ZlLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGN1cnNvciBpcyAKLSAgICBhdCB0aGUgRU5ERE9DIHRva2VuICh0aGUgbGFzdCB0YWcgaW4gdGhlIGRvY3VtZW50KSwgYSBjYWxsIHRvIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+dG9OZXh0U2libGluZzwvc3Bhbj4gCi0gICAgbWV0aG9kIHdpbGwgbm90IG1vdmUgdGhlIGN1cnNvciBhbmQgd2lsbCByZXR1cm4gPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmZhbHNlPC9zcGFuPiAKLSAgICB0byBpbmRpY2F0ZSB0aGF0IHRoZSBtb3ZlIHdhcyB1bnN1Y2Nlc3NmdWwuPC9wPgotICA8cD5Ob3RlIHRoYXQgd2hpbGUgeW91IGNhbiBjYWxsIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sQ3Vyc29yLmN1cnJlbnRUb2tlblR5cGU8L3NwYW4+IAotICAgIG1ldGhvZCB0byBmaW5kIG91dCB3aGljaCB0b2tlbiB0eXBlIHRoZSBjdXJzb3IgaXMgYXQsIHlvdSBtaWdodCBmaW5kIGl0IG1vcmUgCi0gICAgY29udmVuaWVudCB0byB1c2UgYSBtZXRob2Qgc3VjaCBhcyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+aXNFbmRkb2M8L3NwYW4+LiAKLSAgICBUaGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlhtbEN1cnNvcjwvc3Bhbj4gaW50ZXJmYWNlIHByb3ZpZGVzIHNldmVyYWwgbWV0aG9kcyAKLSAgICB0aGF0IG1ha2UgaXQgZWFzeSB0byBkaXNjb3ZlciB3aGV0aGVyIHRoZSBjdXJzb3IgeW91J3JlIG1vdmluZyBpcyBhdCB0aGUgdG9rZW4gCi0gICAgeW91J3JlIGxvb2tpbmcgZm9yLiBUaGVzZSBtZXRob2RzLCBzdWNoIGFzIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5pc1N0YXJ0PC9zcGFuPiwgCi0gICAgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmlzQXR0cjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5pc1RleHQ8L3NwYW4+LCAKLSAgICBhbmQgc28gb24sIHJldHVybiBhIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5ib29sZWFuPC9zcGFuPiB2YWx1ZSB0aGF0IGluZGljYXRlcyAKLSAgICB3aGV0aGVyIHRoZSBjdXJzb3IgaXMgYXQgdGhlIHRva2VuIHR5cGUgaW4gcXVlc3Rpb24uPC9wPgotICA8UD5Ub2tlbnMgYXJlIHJlcHJlc2VudGVkIGJ5IGNvbnN0YW50cyBpbiB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+VG9rZW5UeXBlPC9hPjwvc3Bhbj4gCi0gICAgY2xhc3MsIGFuIGlubmVyIGNsYXNzIG9mIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sQ3Vyc29yPC9zcGFuPiBpbnRlcmZhY2UuIAotICAgIEVhY2ggaGFzIGEgY29uc3RhbnQgeW91IGNhbiB1c2UgaW4gc3dpdGNoIHN0YXRlbWVudHMgdG8gcGVyZm9ybSBieS10b2tlbiBhY3Rpb25zLiAKLSAgICBUaGUgZm9sbG93aW5nIHRhYmxlIGxpc3RzIHRoZSB0b2tlbiB0eXBlczo8L1A+Ci0gIDxUQUJMRSBpZD0iVGFibGUxIj4KLSAgICA8VFI+IAotICAgICAgPFREPjxTVFJPTkc+VG9rZW4gVHlwZTwvU1RST05HPjwvVEQ+Ci0gICAgICA8VEQ+PFNUUk9ORz5Td2l0Y2ggQ29uc3RhbnQ8L1NUUk9ORz48L1REPgotICAgICAgPFREPjxTVFJPTkc+RGVzY3JpcHRpb248L1NUUk9ORz48L1REPgotICAgIDwvVFI+Ci0gICAgPFRSPiAKLSAgICAgIDxURD5TVEFSVERPQzwvVEQ+Ci0gICAgICA8VEQ+SU5UX1NUQVJURE9DPC9URD4KLSAgICAgIDxURD5SZXByZXNlbnRzIHRoZSBzdGFydCBvZiB0aGUgWE1MLiBBbHdheXMgdGhlIGZpcnN0IHRva2VuLiBUaGUgZG9jdW1lbnQgCi0gICAgICAgIGVsZW1lbnQgaXRzZWxmIGlzIHJlcHJlc2VudGVkIGJ5IGEgU1RBUlQgdG9rZW4sIG5vdCB0aGUgU1RBUlRET0MgdG9rZW4uPC9URD4KLSAgICA8L1RSPgotICAgIDxUUj4gCi0gICAgICA8VEQ+RU5ERE9DIDwvVEQ+Ci0gICAgICA8VEQ+SU5UX0VORERPQzwvVEQ+Ci0gICAgICA8VEQ+UmVwcmVzZW50cyB0aGUgZW5kIG9mIHRoZSBYTUwuIEFsd2F5cyB0aGUgbGFzdCB0b2tlbi48L1REPgotICAgIDwvVFI+Ci0gICAgPFRSPiAKLSAgICAgIDxURD5TVEFSVCA8L1REPgotICAgICAgPFREPklOVF9TVEFSVDwvVEQ+Ci0gICAgICA8VEQ+UmVwcmVzZW50cyB0aGUgc3RhcnQgb2YgYW4gZWxlbWVudC48L1REPgotICAgIDwvVFI+Ci0gICAgPFRSPiAKLSAgICAgIDxURD5FTkQgPC9URD4KLSAgICAgIDxURD5JTlRfRU5EPC9URD4KLSAgICAgIDxURD5SZXByZXNlbnRzIHRoZSBlbmQgb2YgYW4gZWxlbWVudC4gVGhlIEVORCB0b2tlbiBoYXMgbm8gdmFsdWUsIGJ1dCBtYXJrcyAKLSAgICAgICAgdGhlIGVsZW1lbnQncyBlbmQuPC9URD4KLSAgICA8L1RSPgotICAgIDxUUj4gCi0gICAgICA8VEQ+VEVYVDwvVEQ+Ci0gICAgICA8VEQ+SU5UX1RFWFQ8L1REPgotICAgICAgPFREPlJlcHJlc2VudHMgdGV4dC48L1REPgotICAgIDwvVFI+Ci0gICAgPFRSPiAKLSAgICAgIDxURD5BVFRSIDwvVEQ+Ci0gICAgICA8VEQ+SU5UX0FUVFI8L1REPgotICAgICAgPFREPlJlcHJlc2VudHMgYW4gYXR0cmlidXRlLiBBVFRSIHRva2VucyBhcmUgYWxsb3dlZCB0byBhcHBlYXIgYWZ0ZXIgYSBTVEFSVERPQyAKLSAgICAgICAgb3IgU1RBUlQgdG9rZW4uPC9URD4KLSAgICA8L1RSPgotICAgIDxUUj4gCi0gICAgICA8VEQ+TkFNRVNQQUNFPC9URD4KLSAgICAgIDxURD5JTlRfTkFNRVNQQUNFPC9URD4KLSAgICAgIDxURD5SZXByZXNlbnRzIGEgbmFtZXNwYWNlICh4bWxucykgYXR0cmlidXRlLiBBbHNvIG9ubHkgYWxsb3dlZCBhZnRlciBTVEFSVCAKLSAgICAgICAgb3IgU1RBUlRET0MgdG9rZW5zLjwvVEQ+Ci0gICAgPC9UUj4KLSAgICA8VFI+IAotICAgICAgPFREPkNPTU1FTlQgPC9URD4KLSAgICAgIDxURD5JTlRfQ09NTUVOVDwvVEQ+Ci0gICAgICA8VEQ+UmVwcmVzZW50cyBhIGNvbW1lbnQuPC9URD4KLSAgICA8L1RSPgotICAgIDxUUj4gCi0gICAgICA8VEQ+UFJPQ0lOU1QgPC9URD4KLSAgICAgIDxURD5JTlRfUFJPQ0lOU1Q8L1REPgotICAgICAgPFREPlJlcHJlc2VudHMgYSBwcm9jZXNzaW5nIGluc3RydWN0aW9uLjwvVEQ+Ci0gICAgPC9UUj4KLSAgPC9UQUJMRT4KLSAgPFA+QXMgeW91IHVzZSBhIGN1cnNvciB0byBuYXZpZ2F0ZSB0aHJvdWdoIFhNTCwgeW91IGNhbiB1c2Ugb25lIG9mIHRoZSBjb252ZW5pZW5jZSAKLSAgICBtZXRob2RzIGRlc2NyaWJlZCBhYm92ZSB0byBkaXNjb3ZlciB3aGV0aGVyIHlvdSdyZSBhdCB0aGUgdG9rZW4geW91J3JlIGxvb2tpbmcgCi0gICAgZm9yLCBvciB1c2UgdGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5YbWxDdXJzb3IuY3VycmVudFRva2VuVHlwZTwvc3Bhbj4mbmJzcDttZXRob2QgCi0gICAgdG8gZGlzY292ZXIgdGhlIGN1cnJlbnQgdG9rZW4ncyB0eXBlLiBUaGUgZm9sbG93aW5nIGZpZ3VyZSBpbGx1c3RyYXRlcyBleGFtcGxlIAotICAgIGxvY2F0aW9ucyBmb3IgdG9rZW4gdHlwZXM6PC9QPgotICA8UD48SU1HIHNyYz0iLi4vaW1hZ2VzL2NvbkN1cnNvclRva2VuTG9jYXRpb25zLmdpZiIgd2lkdGg9IjcyNyIgaGVpZ2h0PSI1MzIiPgotICA8aDI+U3dpdGNoaW5nIHRvIFRlc3QgZm9yIFRva2VuIFR5cGVzPC9oMj4KLSAgPHA+SGVyZSdzIGEgYml0IG9mIGNvZGUgaWxsdXN0cmF0aW5nIGhvdyB5b3UgbWlnaHQgdXNlIGEgSmF2YSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+c3dpdGNoPC9zcGFuPiAKLSAgICBzdGF0ZW1lbnQgdG8gdGVzdCBmb3IgdGhlIFNUQVJUIHRva2VuIHR5cGUuPC9wPgotICA8cHJlPgotLy8gVGFrZSBhbiBpbmNvbWluZyBYbWxPYmplY3QgYW5kIGluc2VydCBhIGN1cnNvci4KLVhtbEN1cnNvciBkb2N1bWVudEN1cnNvciA9IHhtbERvYy5uZXdDdXJzb3IoKTsKLSAKLS8qIAotICogTG9vcCB0aHJvdWdoIHRoZSBkb2N1bWVudCwgcGFzc2luZyB0aGUgY3Vyc29yIHdoZW4gaXQgc3RvcHMgYXQgZWFjaCB0b2tlbiAKLSAqIHRvIGEgZnVuY3Rpb24gZGVzaWduZWQgdG8gZGlzY292ZXIgdGhlIHRva2VuIHR5cGUuIENvbnRpbnVlIHRoZSBsb29wCi0gKiBhcyBsb25nIGF0IHRoZSBjdXJzb3IgaXMgYXQgYSB0b2tlbiAodW50aWwgaXQgcmVhY2hlcyB0aGUgZW5kKS4KLSAqLwotd2hpbGUgKCFkb2N1bWVudEN1cnNvci50b05leHRUb2tlbigpLmlzTm9uZSgpKSAKLXsKLSAgICAvKgotICAgICAqIFVzZSB0aGUgaW50VmFsdWUgbWV0aG9kIHRvIHJldHVybiB0aGUgaW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIAotCSAqIGN1cnJlbnQgdG9rZW4gdHlwZS4gSWYgaXQgaXMgdGhlIHZhbHVlIGZvciBJTlRfU1RBUlQsCi0JICogdGhlbiB5b3UgaGF2ZSBhIG1hdGNoLgotCSAqLwotICAgIHN3aXRjaCAoY3Vyc29yLmN1cnJlbnRUb2tlblR5cGUoKS5pbnRWYWx1ZSgpKQotICAgIHsgICAgICAgIAotICAgICAgICBjYXNlIFRva2VuVHlwZS5JTlRfU1RBUlQ6Ci0gICAgICAgIC8vIFByaW50IG91dCB0aGUgdG9rZW4gdHlwZSBhbmQgYSBtZXNzYWdlLgotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY3Vyc29yLmN1cnJlbnRUb2tlblR5cGUoKSArIAotICAgICAgICAgICAgIjsgY3Vyc29yIGlzIGF0IHRoZSBzdGFydCBvZiBhbiBlbGVtZW50LiIpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0vLyBCZSBzdXJlIHRvIGRpc3Bvc2Ugb2YgYSBjdXJzb3Igd2hlbiB5b3UncmUgZmluaXNoZWQuCi1kb2N1bWVudEN1cnNvci5kaXNwb3NlKCk7Ci08L3ByZT4KLSAgPHA+VGhlIHNjb3BlIG9mIGFuIFhNTCBjdXJzb3IgaXMgdGhlIFhNTCBkb2N1bWVudCBpbiB3aGljaCBpdCBpcyBjcmVhdGVkLiBGb3IgCi0gICAgZXhhbXBsZSwgeW91IGNhbiBjcmVhdGUgYSBjdXJzb3IgYXQgdGhlIG9yZGVySXRlbSBlbGVtZW50IGluIHRoZSBleGFtcGxlIGVhcmxpZXIgCi0gICAgaW4gdGhpcyB0b3BpYy4gSWYgeW91IHRoZW4gdXNlIHRoYXQgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlhtbEN1cnNvcjwvc3Bhbj4gCi0gICAgaW5zdGFuY2UncyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+dG9OZXh0VG9rZW48L3NwYW4+IG1ldGhvZCB0byBtb3ZlIHRoZSAKLSAgICBjdXJzb3IgdW50aWwgaXQgd29uJ3QgbW92ZSBhbnkgZnVydGhlciwgeW91J2xsIGhhdmUgcmVhY2hlZCB0aGUgRU5ERE9DIHRva2VuLiAKLSAgICBJbiB0aGlzIGV4YW1wbGUsIHRoYXQncyBhdCB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPiZsdDsvYmF0Y2hXaWRnZXRPcmRlciZndDs8L3NwYW4+IAotICAgIHRhZy4gSW4gb3RoZXIgd29yZHMsIHRoZSBjdXJzb3IncyBzY29wZSBpcyBub3QgbGltaXRlZCB0byB0aGUgZWxlbWVudCBhdCB3aGljaCAKLSAgICBpdCB3YXMgY3JlYXRlZC48L3A+Ci0gIDxwIGNsYXNzPXJlbGF0ZWR0b3BpY3M+UmVsYXRlZCBUb3BpY3M8L3A+Ci0gIDxwPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+WG1sQ3Vyc29yLlRva2VuVHlwZSAKLSAgICBDbGFzczwvYT48L3A+Ci0gIDxwPjxhIGhyZWY9ImNvbk5hdmlnYXRpbmdYTUx3aXRoQ3Vyc29ycy5odG1sIj5OYXZpZ2F0aW5nIFhNTCB3aXRoIEN1cnNvcnM8L2E+PC9wPgotPC9kaXY+Ci08IS0tIEluc3RhbmNlRW5kRWRpdGFibGUgLS0+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KLQotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS92Mi9kb2NzL2d1aWRlL2NvblVzaW5nQm9va21hcmtzVG9Bbm5vdGF0ZVhNTC5odG1sIGIvdjIvZG9jcy9ndWlkZS9jb25Vc2luZ0Jvb2ttYXJrc1RvQW5ub3RhdGVYTUwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjEyZWU5Ny4uMDAwMDAwMAotLS0gYS92Mi9kb2NzL2d1aWRlL2NvblVzaW5nQm9va21hcmtzVG9Bbm5vdGF0ZVhNTC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotPCFkb2N0eXBlIEhUTUwgcHVibGljICItLy9XM0MvL0RURCBIVE1MIDQuMCBGcmFtZXNldC8vRU4iPgotCi08aHRtbD4KLTxoZWFkPgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iZG9jdGl0bGUiIC0tPgotPHRpdGxlPlVzaW5nIEJvb2ttYXJrcyB0byBBbm5vdGF0ZSBYTUw8L3RpdGxlPgotPCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPiAKLTwhLS0oTWV0YSk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+Ci0KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD0kQ0hBUlNFVDsiPgotCi0KLTwhLS0gSW5zdGFuY2VCZWdpbkVkaXRhYmxlIG5hbWU9Im1ldGF0YWdzIiAtLT4KLQotPG1ldGEgbmFtZT0iY29tcG9uZW50IiBjb250ZW50PSIiPgotPCEtLSBJbiB0aGUgZGVzY3JpcHRpb24gbWV0YXRhZywgcGxlYXNlIHByb3ZpZGUgYSBCUklFRiBkZXNjcmlwdGlvbiBvZiB0aGUgdG9waWMgY29udGVudHMuIC0tPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IiI+Ci08IS0tIEluIHRoZSBjb21wb25lbnQgbWV0YXRhZywgcGxlYXNlIGxpc3Qga2V5d29yZHMgdGhhdCB3aWxsIGhlbHAgYSB1c2VyIHNlYXJjaCBmb3IgdGhpcyB0b3BpYy4gLS0+Ci08bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iIj4KLTwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4KLQotPCEtLShMaW5rcyk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLTwhLS0gSW5zdGFuY2VCZWdpbkVkaXRhYmxlIG5hbWU9ImhlYWQiIC0tPgotPCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPgotPGxpbmsgaHJlZj0iLi4veG1sYmVhbnMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4KLTxhIGhyZWY9Ii4uLy4uLy4uL2NvcmUvaW5kZXguaHRtbCIgaWQ9ImluZGV4Ij48L2E+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiBzcmM9Ii4uLy4uLy4uL2NvcmUvdG9waWNJbmZvLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHNyYz0iLi4vLi4vLi4vY29yZS9Db29raWVDbGFzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiBzcmM9Ii4uLy4uLy4uL2NvcmUvZGlzcGxheUNvbnRlbnQuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotCi08IS0tKEJvZHkpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPgotPGJvZHk+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KLQotPC9zY3JpcHQ+Ci08IS0tIEluc3RhbmNlQmVnaW5FZGl0YWJsZSBuYW1lPSJib2R5IiAtLT4gCi08ZGl2IGlkPXRvcGljdGl0bGU+IAotICA8cCBjbGFzcz1UaXRsZT5Vc2luZyBCb29rbWFya3MgdG8gQW5ub3RhdGUgWE1MPC9wPgotPC9kaXY+Ci08ZGl2IGlkPXRvcGljdGV4dD4gCi0gIDxwPllvdSBjYW4gdXNlIGEgY3Vyc29yIHRvIGluc2VydCBib29rbWFya3MgdGhhdCBhbm5vdGF0ZSBYTUwgd2l0aCBtYXJrZXJzIGNvbnRhaW5pbmcgCi0gICAgaW5mb3JtYXRpb24geW91IGRlc2lnbi4gVGhlc2UgYm9va21hcmtzIGFyZW4ndCB3cml0dGVuIGludG8gdGhlIFhNTCBpdHNlbGYsIAotICAgIGJ1dCBpbiBhIHNlbnNlICJoYW5nIiBmcm9tIHRoZSBsb2NhdGlvbiB3aGVyZSBpdCB3YXMgaW5zZXJ0ZWQuIEluIHRoaXMgd2F5IAotICAgIHlvdSBjYW4gYXNzb2NpYXRlIGFyYml0cmFyeSBwaWVjZXMgb2YgaW5mb3JtYXRpb24gd2l0aCBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgCi0gICAgWE1MLjwvcD4KLSAgPFA+WW91IGRlc2lnbiB5b3VyIG93biBib29rbWFyayBjbGFzc2VzIGJ5IGV4dGVuZGluZyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbEJvb2ttYXJrLmh0bWwiPlhtbEJvb2ttYXJrPC9hPjwvc3Bhbj4sIAotICAgIGEgbmVzdGVkIGNsYXNzIG9mIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9hPjwvc3Bhbj4uIAotICAgIFlvdSBjYW4gZGVzaWduIHlvdXIgYm9va21hcmsgY2xhc3MgdG8gY29udGFpbiBpbmZvcm1hdGlvbiBzcGVjaWZpYyB0byB5b3VyIAotICAgIG5lZWRzLiA8L1A+Ci0gIDxQPkluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPk9yZGVyQm9va21hcms8L3NwYW4+IGlzIAotICAgIGFuIGlubmVyIGNsYXNzIHRoYXQgZXh0ZW5kcyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sQ3Vyc29yLlhtbEJvb2ttYXJrPC9zcGFuPi4gCi0gICAgSXQgbWVyZWx5IHN0b3JlcyBhIHBpZWNlIG9mIHRleHQuPC9QPgotICA8UFJFPgotLyogCi0gKiBUaGUgT3JkZXJCb29rbWFyayBjbGFzcyBpbmNsdWRlcyBhIGNvbnN0cnVjdG9yIHRocm91Z2ggd2hpY2ggeW91IHdpbGwgCi0gKiBpbnNlcnQgeW91ciBib29rbWFyaydzIGNvbnRlbnQuIEl0IGFsc28gaW5jbHVkZXMgZ2V0IGFuZCBzZXQgbWV0aG9kcwotICogeW91IGNhbiB1c2UgdG8gcmV0cmlldmUgYW5kIGNoYW5nZSB0aGUgY29udGVudC4KLSAqLwotc3RhdGljIGNsYXNzIE9yZGVyQm9va21hcmsgZXh0ZW5kcyBYbWxDdXJzb3IuWG1sQm9va21hcmsgewotICAgIHB1YmxpYyBPcmRlckJvb2ttYXJrIChTdHJpbmcgdGV4dCkgeyBURVhUID0gdGV4dDsgfQotICAgIHB1YmxpYyBTdHJpbmcgVEVYVDsKLSAgICBwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7IHJldHVybiBURVhUOyB9Ci0gICAgcHVibGljIHZvaWQgc2V0VGV4dChTdHJpbmcgbmV3VGV4dCkgeyBURVhUID0gbmV3VGV4dDsgfQotfQotPC9QUkU+Ci0gIDxwPllvdSBjYW4gdXNlIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIHRvIHN0b3JlIGJvb2ttYXJrcyBhdCBwbGFjZXMgaW4geW91ciAKLSAgICBYTUwuIFRoZSBmb2xsb3dpbmcgZXhjZXJwdCBvZiBjb2RlIGNyZWF0ZXMgYSBjdXJzb3IgYW5kIGFuIGluc3RhbmNlIG9mIHRoZSAKLSAgICA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+T3JkZXJCb29rbWFyazwvc3Bhbj4gY2xhc3MuIFRoZW4gaXQgdXNlcyB0aGUgY3Vyc29yIAotICAgIHRvIGluc2VydCB0aGUgYm9va21hcmsgYXQgdGhlIGN1cnNvcidzIGN1cnJlbnQgbG9jYXRpb24uPC9wPgotICA8cHJlPgotICAgIFhtbEN1cnNvciBvcmRlckN1cnNvciA9IHhtbERvYy5uZXdDdXJzb3IoKTsKLSAgICBPcmRlckJvb2ttYXJrIHRoaXNCb29rbWFyayA9IG5ldyBPcmRlckJvb2ttYXJrKCJmb28iKTsKLSAgICBvcmRlckN1cnNvci5zZXRCb29rbWFyayh0aGlzQW5ub3RhdGlvbik7Ci08L3ByZT4KLSAgPHAgY2xhc3M9cmVsYXRlZHRvcGljcz5SZWxhdGVkIFRvcGljczwvcD4KLSAgPHA+PGEgaHJlZj0iY29uTmF2aWdhdGluZ1hNTHdpdGhDdXJzb3JzLmh0bWwiPk5hdmlnYXRpbmcgWE1MIHdpdGggQ3Vyc29yczwvYT48L3A+Ci08L2Rpdj4KLTwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgotCi08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3YyL2RvY3MvZ3VpZGUvY29uWE1MQmVhbnNTdXBwb3J0QnVpbHRJblNjaGVtYVR5cGVzLmh0bWwgYi92Mi9kb2NzL2d1aWRlL2NvblhNTEJlYW5zU3VwcG9ydEJ1aWx0SW5TY2hlbWFUeXBlcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzc3NTllLi4wMDAwMDAwCi0tLSBhL3YyL2RvY3MvZ3VpZGUvY29uWE1MQmVhbnNTdXBwb3J0QnVpbHRJblNjaGVtYVR5cGVzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMzAgKzAsMCBAQAotPCFkb2N0eXBlIEhUTUwgcHVibGljICItLy9XM0MvL0RURCBIVE1MIDQuMCBGcmFtZXNldC8vRU4iPgotCi08aHRtbD4KLTxoZWFkPgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iZG9jdGl0bGUiIC0tPgotPHRpdGxlPkphdmEgVHlwZXMgZm9yIFhNTCBTY2hlbWE8L3RpdGxlPgotPCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPiAKLTwhLS0oTWV0YSk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+Ci0KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD0kQ0hBUlNFVDsiPgotCi0KLTwhLS0gSW5zdGFuY2VCZWdpbkVkaXRhYmxlIG5hbWU9Im1ldGF0YWdzIiAtLT4KLQotPG1ldGEgbmFtZT0iYXV0aG9yIiBjb250ZW50PSJ5b3VyIG5hbWUiPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkEgZGVzY3JpcHRpb24gb2YgdGhlIHRvcGljIGNvbnRlbnRzLiI+Ci08bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0ia2V5d29yZHMgdG8gaGVscCBpbiBzZWFyY2hlcyI+Ci08bWV0YSBuYW1lPSJkYXRlIGxhc3QgbW9kaWZpZWQiIGNvbnRlbnQ9IjEwLzI1LzAyIj4KLTwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4KLQotPCEtLShMaW5rcyk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLTwhLS0gSW5zdGFuY2VCZWdpbkVkaXRhYmxlIG5hbWU9ImhlYWQiIC0tPgotPGxpbmsgaHJlZj0iLi4veG1sYmVhbnMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4KLTwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4KLTxsaW5rIGhyZWY9Ii4uL3htbGJlYW5zLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+Ci08YSBocmVmPSIuLi8uLi8uLi9jb3JlL2luZGV4Lmh0bWwiIGlkPSJpbmRleCI+PC9hPgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgc3JjPSIuLi8uLi8uLi9jb3JlL3RvcGljSW5mby5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiBzcmM9Ii4uLy4uLy4uL2NvcmUvQ29va2llQ2xhc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgc3JjPSIuLi8uLi8uLi9jb3JlL2Rpc3BsYXlDb250ZW50LmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLQotPCEtLShCb2R5KT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLTxib2R5PgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+Ci0KLTwvc2NyaXB0PgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iYm9keSIgLS0+IAotPGgxPiBYTUxCZWFucyBTdXBwb3J0IGZvciBCdWlsdC1JbiBTY2hlbWEgVHlwZXM8L2gxPgotPHA+SnVzdCBhcyB3aXRoIHR5cGVzIGluIFhNTCBzY2hlbWEsIHRoZSBYTUxCZWFucyB0eXBlcyBiYXNlZCBvbiBzY2hlbWEgYXJlIGFycmFuZ2VkIAotICBpbiBhIGhpZXJhcmNoeS4gSW4gZ2VuZXJhbCwgdGhlIGhpZXJhcmNoeSBvZiBYTUxCZWFuIHR5cGVzIG1pcnJvcnMgdGhlIGhpZXJhcmNoeSAKLSAgb2YgdGhlIHNjaGVtYSB0eXBlcyB0aGVtc2VsdmVzLiBYTUwgc2NoZW1hIHR5cGVzIGFsbCBpbmhlcml0IGZyb20gPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnhzOmFueVR5cGU8L3NwYW4+IAotICAod2hpY2ggaXMgYXQgdGhlIHJvb3Qgb2YgdGhlIGhpZXJhcmNoeSk7IFhNTEJlYW5zIHR5cGVzIGluaGVyaXQgZnJvbSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sT2JqZWN0PC9zcGFuPi48L3A+Ci08cD5JbiBYTUwgc2NoZW1hLCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+eHM6YW55VHlwZTwvc3Bhbj4gaXMgdGhlIHJvb3QgdHlwZSAKLSAgZm9yIHR3byB0eXBlIGNhdGVnb3JpZXM6IGJ1aWx0LWluIGFuZCB1c2VyLWRlcml2ZWQuIEJ1aWx0LWluIHNjaGVtYSB0eXBlcyBhcmUgCi0gIGNvbW1vbiB0eXBlcyBkZWZpbmVkIGJ5IHRoZSBYTUwgc2NoZW1hIHNwZWNpZmljYXRpb24uIFVzZXItZGVyaXZlZCB0eXBlcyBhcmUgCi0gIHRob3NlIHlvdSBkZWZpbmUgaW4geW91ciBzY2hlbWEuIFRoaXMgdG9waWMgbGlzdHMgdGhlIGJ1aWx0LWluIHR5cGVzIHByb3ZpZGVkIAotICB3aXRoIFhNTEJlYW5zLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdXNlci1kZXJpdmVkIHR5cGVzIGFuZCB0aGUgSmF2YSB0eXBlcyBnZW5lcmF0ZWQgCi0gIGZyb20gdGhlbSwgc2VlIDxhIGhyZWY9ImNvbkphdmFUeXBlc0dlbmVyYXRlZEZyb21Vc2VyRGVyaXZlZC5odG1sIj5KYXZhIFR5cGVzIEdlbmVyYXRlZCAKLSAgZnJvbSBVc2VyLURlcml2ZWQgU2NoZW1hIFR5cGVzPC9hPi48L3A+Ci08cD5UaGUgZm9sbG93aW5nIGZpZ3VyZSBpbGx1c3RyYXRlcyB0aGUgaGllcmFyY2h5IG9mIHR5cGVzLCBzaG93aW5nIGJvdGggYnVpbHQtaW4gCi0gIHNjaGVtYSB0eXBlcyBhbmQgdGhlaXIgWE1MQmVhbnMgcGFyYWxsZWxzLiBOb3RpY2UsIHRvbywgdGhhdCBuZWFybHkgYWxsIG9mIHRoZSAKLSAgYnVpbHQtaW4gdHlwZXMgYXJlIGFsc28gYXZhaWxhYmxlIGFzIG5hdHVyYWwgSmF2YSB0eXBlcy48L3A+Ci08cD48aW1nIHNyYz0iLi4vaW1hZ2VzL2NvblhNTFR5cGVIaWVyYXJjaHkuZ2lmIiB3aWR0aD0iODY1IiBoZWlnaHQ9Ijg4NyI+IDwvcD4KLTxoMT5KYXZhIFR5cGVzIFJlcHJlc2VudGluZyBCdWlsdC1JbiBTY2hlbWEgVHlwZXM8L2gxPgotPHA+QXMgeW91IGNhbiBzZWUgZnJvbSB0aGUgZmlndXJlIGFib3ZlLCBhbGwgNDYgYnVpbHQtaW4gc2NoZW1hIHR5cGVzIGFyZSByZXByZXNlbnRlZCAKLSAgYnkgYW4gWE1MQmVhbiB0eXBlIHByb3ZpZGVkIHdpdGggWE1MQmVhbnMuIFdoZW4gdXNpbmcgYnVpbHQtaW4gWE1MQmVhbiB0eXBlcywgCi0gIGtlZXAgaW4gbWluZCB0aGF0OjwvcD4KLTx1bD4KLSAgPGxpPiBTaW5jZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sT2JqZWN0PC9zcGFuPiBjb3JyZXNwb25kcyB0byB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnhzOmFueVR5cGU8L3NwYW4+LCAKLSAgICBhbGwgSmF2YSBYTUxCZWFuIHR5cGVzIGluaGVyaXQgZnJvbSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sT2JqZWN0PC9zcGFuPi4gCi0gICAgVGhlcmVmb3JlIGFsbCBYTUxCZWFuIHR5cGVzIHNoYXJlIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sT2JqZWN0PC9zcGFuPiAKLSAgICBpbnRlcmZhY2WScyBhYmlsaXR5IHRvIGNyZWF0ZSBhbiA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sQ3Vyc29yPC9zcGFuPiAKLSAgICBhdCB0aGUgcG9zaXRpb24gb2YgdGhlIG9iamVjdC4gVGhleSBjYW4gYWxzbyByZW5kZXIgdGhlIFhNTCBhcyBzdHJpbmdzIG9yIAotICAgIHN0cmVhbXMuIAotICA8bGk+IAotICAgIDxkaXY+V2hlcmUgdGhlcmUgaXMgYSBjb3JyZXNwb25kaW5nIG5hdHVyYWwgSmF2YSB0eXBlLCB0aGUgWE1MQmVhbnMgdHlwZSBwcm92aWRlcyAKLSAgICAgIGEgd2F5IHRvIGdldCB0aGUgdW5kZXJseWluZyBYTUwncyB2YWx1ZSBhcyB0aGUgbmF0dXJhbCB0eXBlLiBTZWUgdGhlIHRhYmxlIAotICAgICAgaW4gdGhpcyB0b3BpYyBmb3IgaW5mb3JtYXRpb24gb24gaG93IG5hdHVyYWwgSmF2YSB0eXBlcyBtYXAgdG8gWE1MQmVhbnMgCi0gICAgICB0eXBlcy4gPC9kaXY+Ci0gIAotICA8bGk+IFZhbHVlcyBhc3NpZ25lZCB0byBidWlsdC1pbiBYTUxCZWFucyB0eXBlcyBhcmUgdmFsaWRhdGVkIGluIGtlZXBpbmcgd2l0aCAKLSAgICB0aGUgcnVsZXMgb2YgdGhlIHNjaGVtYSB0eXBlIHRoZXkgcmVwcmVzZW50LiBTbywgZm9yIGV4YW1wbGUsIGFuIGF0dGVtcHQgdG8gCi0gICAgYXNzaWduIGEgbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSB0byBhbiA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sUG9zaXRpdmVJbnRlZ2VyPC9zcGFuPiAKLSAgICB3aWxsIHRocm93IGFuIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5YbWxWYWx1ZU91dE9mUmFuZ2U8L3NwYW4+IGV4Y2VwdGlvbi48L2xpPgotPC91bD4KLTxkaXY+IAotICA8cD5UaGUgZm9sbG93aW5nIHRhYmxlIGxpc3RzIHRoZSBidWlsdC1pbiBzY2hlbWEgdHlwZXMsIGFsb25nIHdpdGggdGhlaXIgWE1MQmVhbnMgCi0gICAgYW5kIG5hdHVyYWwgSmF2YSBwYXJhbGxlbHMuIFVubGVzcyBvdGhlcndpc2Ugbm90ZWQsIG5hdHVyYWwgSmF2YSB0eXBlcyBhcmUgCi0gICAgaW4gdGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5qYXZhLmxhbmc8L3NwYW4+IHBhY2thZ2U7IFhNTEJlYW4gdHlwZXMgYXJlIAotICAgIGluIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+b3JnLmFwYWNoZS54bWxiZWFuczwvc3Bhbj4gcGFja2FnZS48L3A+Ci08L2Rpdj4KLTxkaXYgaWQ9InRvcGljdGV4dCI+IAotICA8dGFibGU+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZCB3aWR0aD0iMzAlIj48c3Ryb25nPkJ1aWx0LUluIFNjaGVtYSBUeXBlPC9zdHJvbmc+PC90ZD4KLSAgICAgIDx0ZCB3aWR0aD0iMzElIj48c3Ryb25nPlhNTEJlYW4gVHlwZTwvc3Ryb25nPjwvdGQ+Ci0gICAgICA8dGQgd2lkdGg9IjM5JSI+PHN0cm9uZz5OYXR1cmFsIEphdmEgVHlwZTwvc3Ryb25nPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPnhzOmFueVR5cGU8L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L2E+PC90ZD4KLSAgICAgIDx0ZD4gPGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0PC9hPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkdC1hbnlTaW1wbGVUeXBlIiB0YXJnZXQ9Il9ibGFuayI+eHM6YW55U2ltcGxlVHlwZTwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvYT48L3RkPgotICAgICAgPHRkPiA8YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjEvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIiB0YXJnZXQ9Il9ibGFuayI+U3RyaW5nPC9hPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNhbnlVUkkiIHRhcmdldD0iX2JsYW5rIj54czphbnlVUkk8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+WG1sQW55VVJJPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4xL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlN0cmluZzwvYT48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jYmFzZTY0QmluYXJ5IiB0YXJnZXQ9Il9ibGFuayI+eHM6YmFzZTY0QmluYXJ5PC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPlhtbEJhc2U2NEJpbmFyeTwvYT48L3RkPgotICAgICAgPHRkPmJ5dGVbXTwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNib29sZWFuIiB0YXJnZXQ9Il9ibGFuayI+eHM6Ym9vbGVhbjwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+WG1sQm9vbGVhbjwvYT48L3RkPgotICAgICAgPHRkPmJvb2xlYW48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jYnl0ZSIgdGFyZ2V0PSJfYmxhbmsiPnhzOmJ5dGU8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPlhtbEJ5dGU8L2E+PC90ZD4KLSAgICAgIDx0ZD5ieXRlPC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQgaGVpZ2h0PSIxNyI+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2RhdGUiIHRhcmdldD0iX2JsYW5rIj54czpkYXRlPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj5YbWxEYXRlPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIiB0YXJnZXQ9Il9ibGFuayI+amF2YS51dGlsLkNhbGVuZGFyPC9hPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkYXRlVGltZSIgdGFyZ2V0PSJfYmxhbmsiPnhzOmRhdGVUaW1lPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+WG1sRGF0ZVRpbWU8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5qYXZhLnV0aWwuQ2FsZW5kYXI8L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2RlY2ltYWwiIHRhcmdldD0iX2JsYW5rIj54czpkZWNpbWFsPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5qYXZhLm1hdGguQmlnRGVjaW1hbDwvYT48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZG91YmxlIiB0YXJnZXQ9Il9ibGFuayI+eHM6ZG91YmxlPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPlhtbERvdWJsZTwvYT48L3RkPgotICAgICAgPHRkPmRvdWJsZTwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkdXJhdGlvbiIgdGFyZ2V0PSJfYmxhbmsiPnhzOmR1cmF0aW9uPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+WG1sRHVyYXRpb248L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCI+b3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb248L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI0VOVElUSUVTIiB0YXJnZXQ9Il9ibGFuayI+eHM6RU5USVRJRVM8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj5YbWxFTlRJVElFUzwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMS9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5TdHJpbmc8L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI0VOVElUWSIgdGFyZ2V0PSJfYmxhbmsiPnhzOkVOVElUWTwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj5YbWxFTlRJVFk8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjEvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIiB0YXJnZXQ9Il9ibGFuayI+U3RyaW5nPC9hPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNmbG9hdCIgdGFyZ2V0PSJfYmxhbmsiPnhzOmZsb2F0PC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+WG1sRmxvYXQ8L2E+PC90ZD4KLSAgICAgIDx0ZD5mbG9hdDwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNnRGF5IiB0YXJnZXQ9Il9ibGFuayI+eHM6Z0RheTwvYT48L3RkPgotICAgICAgPHRkPjxwPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+WG1sR0RheTwvYT48L3A+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5qYXZhLnV0aWwuQ2FsZW5kYXI8L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2dNb250aCIgdGFyZ2V0PSJfYmxhbmsiPnhzOmdNb250aDwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj5YbWxHTW9udGg8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5qYXZhLnV0aWwuQ2FsZW5kYXI8L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2dNb250aERheSIgdGFyZ2V0PSJfYmxhbmsiPnhzOmdNb250aERheTwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj5YbWxHTW9udGhEYXk8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5qYXZhLnV0aWwuQ2FsZW5kYXI8L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2dZZWFyIiB0YXJnZXQ9Il9ibGFuayI+eHM6Z1llYXI8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj5YbWxHWWVhcjwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmphdmEudXRpbC5DYWxlbmRhcjwvYT48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZ1llYXJNb250aCIgdGFyZ2V0PSJfYmxhbmsiPnhzOmdZZWFyTW9udGg8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPlhtbEdZZWFyTW9udGg8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5qYXZhLnV0aWwuQ2FsZW5kYXI8L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2hleEJpbmFyeSIgdGFyZ2V0PSJfYmxhbmsiPnhzOmhleEJpbmFyeTwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj5YbWxIZXhCaW5hcnk8L2E+PC90ZD4KLSAgICAgIDx0ZD5ieXRlW108L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jSUQiIHRhcmdldD0iX2JsYW5rIj54czpJRDwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPlhtbElEPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4xL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlN0cmluZzwvYT48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jSURSRUYiIHRhcmdldD0iX2JsYW5rIj54czpJRFJFRjwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPlhtbElEUkVGPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4xL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlN0cmluZzwvYT48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jSURSRUZTIiB0YXJnZXQ9Il9ibGFuayI+eHM6SURSRUZTPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPlhtbElEUkVGUzwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMS9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5TdHJpbmc8L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2ludCIgdGFyZ2V0PSJfYmxhbmsiPnhzOmludDwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj5YbWxJbnQ8L2E+PC90ZD4KLSAgICAgIDx0ZD5pbnQ8L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jaW50ZWdlciIgdGFyZ2V0PSJfYmxhbmsiPnhzOmludGVnZXI8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmphdmEubWF0aC5CaWdJbnRlZ2VyPC9hPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNsYW5ndWFnZSIgdGFyZ2V0PSJfYmxhbmsiPnhzOmxhbmd1YWdlPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+WG1sTGFuZ3VhZ2U8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjEvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIiB0YXJnZXQ9Il9ibGFuayI+U3RyaW5nPC9hPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNsb25nIiB0YXJnZXQ9Il9ibGFuayI+eHM6bG9uZzwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+WG1sTG9uZzwvYT48L3RkPgotICAgICAgPHRkPmxvbmc8L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jTmFtZSIgdGFyZ2V0PSJfYmxhbmsiPnhzOk5hbWU8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPlhtbE5hbWU8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjEvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIiB0YXJnZXQ9Il9ibGFuayI+U3RyaW5nPC9hPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNOQ05hbWUiIHRhcmdldD0iX2JsYW5rIj54czpOQ05hbWU8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+WG1sTkNOQU1FPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4xL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlN0cmluZzwvYT48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jbmVnYXRpdmVJbnRlZ2VyIiB0YXJnZXQ9Il9ibGFuayI+eHM6bmVnYXRpdmVJbnRlZ2VyPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5lZ2F0aXZlSW50ZWdlcjwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIiB0YXJnZXQ9Il9ibGFuayI+amF2YS5tYXRoLkJpZ0ludGVnZXI8L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI05NVE9LRU4iIHRhcmdldD0iX2JsYW5rIj54czpOTVRPS0VOPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj5YbWxOTVRPS0VOPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4xL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlN0cmluZzwvYT48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jTk1UT0tFTlMiIHRhcmdldD0iX2JsYW5rIj54czpOTVRPS0VOUzwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPlhtbE5NVE9LRU5TPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4xL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlN0cmluZzwvYT48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jbm9uTmVnYXRpdmVJbnRlZ2VyIiB0YXJnZXQ9Il9ibGFuayI+eHM6bm9uTmVnYXRpdmVJbnRlZ2VyPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIiB0YXJnZXQ9Il9ibGFuayI+amF2YS5tYXRoLkJpZ0ludGVnZXI8L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI25vblBvc2l0aXZlSW50ZWdlciIgdGFyZ2V0PSJfYmxhbmsiPnhzOm5vblBvc2l0aXZlSW50ZWdlcjwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmphdmEubWF0aC5CaWdJbnRlZ2VyPC9hPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNub3JtYWxpemVkU3RyaW5nIiB0YXJnZXQ9Il9ibGFuayI+eHM6bm9ybWFsaXplZFN0cmluZzwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZzwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMS9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5TdHJpbmc8L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI05PVEFUSU9OIiB0YXJnZXQ9Il9ibGFuayI+eHM6Tk9UQVRJT048L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj5YbWxOT1RBVElPTjwvYT48L3RkPgotICAgICAgPHRkPiBOb3Qgc3VwcG9ydGVkPC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Bvc2l0aXZlSW50ZWdlciIgdGFyZ2V0PSJfYmxhbmsiPnhzOnBvc2l0aXZlSW50ZWdlcjwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXI8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmphdmEubWF0aC5CaWdJbnRlZ2VyPC9hPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNRTmFtZSIgdGFyZ2V0PSJfYmxhbmsiPnhzOlFOYW1lPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+WG1sUU5hbWU8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU8L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Nob3J0IiB0YXJnZXQ9Il9ibGFuayI+eHM6c2hvcnQ8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj5YbWxTaG9ydDwvYT48L3RkPgotICAgICAgPHRkPnNob3J0PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3N0cmluZyIgdGFyZ2V0PSJfYmxhbmsiPnhzOnN0cmluZzwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj5YbWxTdHJpbmc8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjEvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIiB0YXJnZXQ9Il9ibGFuayI+U3RyaW5nPC9hPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyN0aW1lIiB0YXJnZXQ9Il9ibGFuayI+eHM6dGltZTwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+WG1sVGltZTwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmphdmEudXRpbC5DYWxlbmRhcjwvYT48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jdG9rZW4iIHRhcmdldD0iX2JsYW5rIj54czp0b2tlbjwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPlhtbFRva2VuPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4xL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlN0cmluZzwvYT48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jdW5zaWduZWRCeXRlIiB0YXJnZXQ9Il9ibGFuayI+eHM6dW5zaWduZWRCeXRlPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPlhtbFVuc2lnbmVkQnl0ZTwvYT48L3RkPgotICAgICAgPHRkPnNob3J0PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Vuc2lnbmVkSW50IiB0YXJnZXQ9Il9ibGFuayI+eHM6dW5zaWduZWRJbnQ8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj5YbWxVbnNpZ25lZEludDwvYT48L3RkPgotICAgICAgPHRkPmxvbmc8L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jdW5zaWduZWRMb25nIiB0YXJnZXQ9Il9ibGFuayI+eHM6dW5zaWduZWRMb25nPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPlhtbFVuc2lnbmVkTG9uZzwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIiB0YXJnZXQ9Il9ibGFuayI+amF2YS5tYXRoLkJpZ0ludGVnZXI8L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Vuc2lnbmVkU2hvcnQiIHRhcmdldD0iX2JsYW5rIj54czp1bnNpZ25lZFNob3J0PC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj5YbWxVbnNpZ25lZFNob3J0PC9hPjwvdGQ+Ci0gICAgICA8dGQ+aW50PC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+Ci08ZGl2PiAKLSAgPHAgY2xhc3M9InJlbGF0ZWR0b3BpY3MiPlJlbGF0ZWQgVG9waWNzPC9wPgotICA8cD48YSBocmVmPSJjb25HZXR0aW5nU3RhcnRlZHdpdGhYTUxCZWFucy5odG1sIj5HZXR0aW5nIFN0YXJ0ZWQgd2l0aCBYTUxCZWFuczwvYT48L3A+Ci08L2Rpdj4KLTwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4gCi08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KLQotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS92Mi9kb2NzL2ltYWdlcy9jb25DdXJzb3JUb2tlbkxvY2F0aW9ucy5naWYgYi92Mi9kb2NzL2ltYWdlcy9jb25DdXJzb3JUb2tlbkxvY2F0aW9ucy5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViMThiOTYuLjAwMDAwMDAKLS0tIGEvdjIvZG9jcy9pbWFnZXMvY29uQ3Vyc29yVG9rZW5Mb2NhdGlvbnMuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdjIvZG9jcy9pbWFnZXMvY29uWE1MVHlwZUhpZXJhcmNoeS5naWYgYi92Mi9kb2NzL2ltYWdlcy9jb25YTUxUeXBlSGllcmFyY2h5LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQwNzg2Yi4uMDAwMDAwMAotLS0gYS92Mi9kb2NzL2ltYWdlcy9jb25YTUxUeXBlSGllcmFyY2h5LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3YyL2RvY3Mvc3R5bGVzaGVldC5jc3MgYi92Mi9kb2NzL3N0eWxlc2hlZXQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDFkODAzLi4wMDAwMDAwCi0tLSBhL3YyL2RvY3Mvc3R5bGVzaGVldC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKiBKYXZhZG9jIHN0eWxlIHNoZWV0ICovCi0KLS8qIERlZmluZSBjb2xvcnMsIGZvbnRzIGFuZCBvdGhlciBzdHlsZSBhdHRyaWJ1dGVzIGhlcmUgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHRzICovCi0KLS8qIFBhZ2UgYmFja2dyb3VuZCBjb2xvciAqLwotYm9keSB7IAkKLQlmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsKLQliYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGIAotfQotCi1ib2R5IHsKLS8qCXBhZGRpbmc6IDBweCAwcHggMHB4IDE1cHg7ICovCi0JYmFja2dyb3VuZDogI2ZmZmZmZjsKLQljb2xvcjogIzAwMDAwOwotCWZvbnQtc2l6ZTogODAlOwotfQotCi0vKiBUYWJsZSBjb2xvcnMgKi8KLS5UYWJsZUhlYWRpbmdDb2xvciAgICAgeyBiYWNrZ3JvdW5kOiAjQ0NDQ0ZGIH0gLyogRGFyayBtYXV2ZSAqLwotLlRhYmxlU3ViSGVhZGluZ0NvbG9yICB7IGJhY2tncm91bmQ6ICNFRUVFRkYgfSAvKiBMaWdodCBtYXV2ZSAqLwotLlRhYmxlUm93Q29sb3IgICAgICAgICB7IGJhY2tncm91bmQ6ICNGRkZGRkYgfSAvKiBXaGl0ZSAqLwotCi0vKiBGb250IHVzZWQgaW4gbGVmdC1oYW5kIGZyYW1lIGxpc3RzICovCi0uRnJhbWVUaXRsZUZvbnQgICB7IGZvbnQtc2l6ZTogMTBwdHM7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2EsIEFyaWFsLCBzYW4tc2VyaWYgfQotLkZyYW1lSGVhZGluZ0ZvbnQgeyBmb250LXNpemU6IDEwcHRzOyBmb250LWZhbWlseTogSGVsdmV0aWNhLCBBcmlhbCwgc2FuLXNlcmlmIH0KLS5GcmFtZUl0ZW1Gb250ICAgIHsgZm9udC1zaXplOiAxMHB0czsgZm9udC1mYW1pbHk6IEhlbHZldGljYSwgQXJpYWwsIHNhbi1zZXJpZiB9Ci0KLS8qIEV4YW1wbGUgb2Ygc21hbGxlciwgc2Fucy1zZXJpZiBmb250IGluIGZyYW1lcyAqLwotLyogLkZyYW1lSXRlbUZvbnQgIHsgZm9udC1zaXplOiAxMHB0OyBmb250LWZhbWlseTogSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiB9ICovCi0KLS8qIE5hdmlnYXRpb24gYmFyIGZvbnRzIGFuZCBjb2xvcnMgKi8KLS5OYXZCYXJDZWxsMSAgICB7IGJhY2tncm91bmQtY29sb3I6I0VFRUVGRjt9LyogTGlnaHQgbWF1dmUgKi8KLS5OYXZCYXJDZWxsMVJldiB7IGJhY2tncm91bmQtY29sb3I6IzAwMDA4Qjt9LyogRGFyayBCbHVlICovCi0uTmF2QmFyRm9udDEgICAgeyBmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgY29sb3I6IzAwMDAwMDt9Ci0uTmF2QmFyRm9udDFSZXYgeyBmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgY29sb3I6I0ZGRkZGRjt9Ci0KLS5OYXZCYXJDZWxsMiAgICB7IGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBiYWNrZ3JvdW5kLWNvbG9yOiNGRkZGRkY7fQotLk5hdkJhckNlbGwzICAgIHsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGJhY2tncm91bmQtY29sb3I6I0ZGRkZGRjt9Ci0KZGlmZiAtLWdpdCBhL3YyL2RvY3MveG1sYmVhbnMuY3NzIGIvdjIvZG9jcy94bWxiZWFucy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2NjIwNjEuLjAwMDAwMDAKLS0tIGEvdjIvZG9jcy94bWxiZWFucy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw0ODIgKzAsMCBAQAotLyogIFRoZSBzdHlsZXMgbW9zdCBsaWtlbHkgdG8gYmUgdXNlZCBhcmU6Ci0JLSBUaXRsZTogVGhlIHRpdGxlIG9mIHRoZSB0b3BpYwotCS0gaDEsIGgyLCBoMzogRmlyc3QsIHNlY29uZCwgYW5kIHRoaXJkLWxldmVsIGhlYWRpbmdzIHdpdGhpbiB0aGUgYm9keSBvZiBhIHRvcGljCi0JLSByZWxhdGVkVG9waWNzOiBSZWxhdGVkIFRvcGljcwotCS0gcHJvY1RpdGxlOiBXaXRoaW4gSG93IERvIEk6Li4uIHRvcGljcywgZm9yIGhlYWRpbmdzIHdpdGhpbiB0aGUgYm9keSBvZiBhIHRvcGljIHRoYXQgYXJlIGZvbGxvd2VkIGJ5Ci0JICBidWxsZXRlZCBwcm9jZWR1cmVzICgiVG8gZG8gdGhpcyIpLgotCS0gcHJlOiBGb3IgY29kZSBibG9ja3MKLQktIGxhbmdpbmxpbmU6IEZvciBjb2RlIGZyYWdtZW50cyB3aXRoaW4gYSAobm9uLWNvZGUpIHJlZ3VsYXIgc2VjdGlvbi4KLQktIG5vdGVwYXJhOiBOb3RlcwkgCi0qLwotaDEsCi1oMiwKLWgzLAotaDQsCi1oNSwKLXAsCi1wcm9jdGl0bGUsCi1yZWxhdGVkdG9waWNzIHsKLQlmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsKLQljb2xvcjogIzAwMDAwMDsKLX0KLQotLyogVXNlIGgxIGZvciBhbGwgZmlyc3QtbGV2ZWwgaGVhZGluZ3Mgd2l0aGluIHRoZSBib2R5IG9mIGEgdG9waWMuIAotICAgRm9yIHRoZSB0b3BpYyB0aXRsZSwgdXNlIHRoZSBUaXRsZSBzdHlsZS4gKi8KLWgxIHsKLQlmb250LXNpemU6IDEzNSU7Ci0JbWFyZ2luLXRvcDogLjVlbTsKLQltYXJnaW4tYm90dG9tOiAuNWVtOwotfQotCi0vKiBVc2UgaDIgZm9yIGFsbCBzZWNvbmQtbGV2ZWwgaGVhZGluZ3MuICovCi1oMiB7Ci0JZm9udC1zaXplOiAxMjUlOwotCW1hcmdpbi10b3A6IDFlbTsKLQltYXJnaW4tYm90dG9tOiAuNmVtOwotfQotCi0vKiBVc2UgaDMgZm9yIGFsbCB0aGlyZC1sZXZlbCBoZWFkaW5ncy4gKi8KLWgzIHsKLQlmb250LXNpemU6IDExMCU7Ci0JbWFyZ2luLXRvcDogMWVtOwotCW1hcmdpbi1ib3R0b206IC42ZW07Ci19Ci0KLS8qIFVzZSBoNCBmb3IgYWxsIGZvdXJ0aC1sZXZlbCBoZWFkaW5ncy4gCi0gICBOb3RlOiB0aGlzIHN0eWxlIGxvb2tzIGlkZW50aWNhbCB0byB0aGUgcmVsYXRlZHRvcGljcyBhbmQgcHJvY3RpdGxlIHN0eWxlcy4gKi8KLWg0IHsKLQlmb250LXNpemU6IDEwNSU7Ci0JbWFyZ2luLXRvcDogMWVtOwotCW1hcmdpbi1ib3R0b206IC42ZW07Ci19Ci0KLS8qIFVzZSBoNSBmb3IgYWxsIGZpZnRoLWxldmVsIGhlYWRpbmcuICAKLSAgIEN1cnJlbnRseSwgdGhlcmUgYXJlIG5vIGg1cyBpbiB1c2UgaW4gdGhlIGRvY3VtZW50LiovCi1oNSB7Ci0JZm9udC1zaXplOiAxMDAlOwotCW1hcmdpbi10b3A6IDFlbTsKLQltYXJnaW4tYm90dG9tOiAuNmVtOwotfQotCi0vKiBVc2UgdGhlIFRpdGxlIHN0eWxlIGZvciB0aGUgdGl0bGUgb2YgYSB0b3BpYy4gKi8KLXAuVGl0bGUgewotCWZvbnQtd2VpZ2h0OiBib2xkOwotCWZvbnQtc3R5bGU6IG5vcm1hbDsKLQlmb250LWZhbWlseTogVmVyZGFuYSwgc2Fucy1zZXJpZjsKLQlmb250LXNpemU6IDE0MiU7Ci19Ci0KLS8qIFRoaXMgZGVwcmF0ZWQgdGFnIGNyZWF0ZXMgYSBkaXYgdGhhdCBkZXNpZ25hdGVzIHRoZSB0aXRsZS4gKi8KLSN0b3BpY3RpdGxlIHsKLX0KLQotLyogVGhpcyBkZXByZWNhdGVkIHRhZyBjcmVhdGVzIGEgZGl2ZSB0aGF0IGRlc2lnbmF0ZXMgYWxsIGJvZHkgdGV4dC4gKi8KLSN0b3BpY3RleHQgewotfQotCi0vKiBVc2VkIGZvciBmaWd1cmUgY2FwdGlvbnMuKi8KLXAuYXJ0dGl0bGUgewotCWZvbnQtd2VpZ2h0OiBCb2xkOwotfQotICAKLS8qIFRoZSBhdHRyaWJ1dGUgc3R5bGUgcmVzZW1ibGVzIHRoZSBuYXZ0aXRsZSBhbmQgcGFydGRlc2Mgc3R5bGVzIGluIHRoYXQgaXQga2VlcHMgdGhlIG5leHQgcGFyYWdyYXBoIAotICAgZmx1c2ggd2l0aCBpdC4gVXNlIGl0IHdoZW4geW91IGxpc3QgdGhlIGF0dHJpYnV0ZXMgb2Ygc3ludGF4IGluIGEgcmVmZXJlbmNlIHRvcGljLgotICAgVGhlIGFyZ3VtZW50IHN0eWxlIHNob3VsZCBhbHdheXMgYmUgZm9sbG93ZWQgYnkgdGhlIHBhcnRkZXNjIHN0eWxlLiAqLwotcC5hdHRyaWJ1dGUgewotCW1hcmdpbi10b3A6IC42ZW07Ci0JbWFyZ2luLWJvdHRvbTogMHB4OwotCWZvbnQtd2VpZ2h0OiBCb2xkOwotCQotfQotCi0vKiBTdGFuZGFyZCBIVE1MIHRhZy4gKi8KLWJvZHkgewotCXBhZGRpbmc6IDBweCAwcHggMHB4IDE1cHg7Ci0JYmFja2dyb3VuZDogI2ZmZmZmZjsKLQljb2xvcjogIzAwMDAwOwotCWZvbnQtc2l6ZTogODAlOwotCWZvbnQtZmFtaWx5OiBWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOwotfQotCi0vKiBTdGFuZGFyZCBIVE1MIHRhZy4gKi8KLXNwYW4uYm9sZCB7Ci0JZm9udC13ZWlnaHQ6IEJvbGQ7Ci19Ci0KLS8qIFN0YW5kYXJkIEhUTUwgdGFnLiAqLwotYmxvY2txdW90ZSB7Ci0JbWFyZ2luOiAwZW0gMGVtIDBlbSAyZW07Ci0JcGFkZGluZzogMHB4OwotfQotCi0vKiBVc2UgdGhlIGZpbGVwYXRoIHN0eWxlIHRvIGRlc2lnbmF0ZSBmaWxlIHBhdGhzLiBJdCBpcyBjdXJyZW50bHkgYSBtb25vc3BhY2UgZmlsZS4gKi8KLXNwYW4uZmlsZXBhdGggewotCWZvbnQ6IDEwMCUgQ291cmllciBOZXcgQ291cmllciBtb25vOwotCWZvbnQtZmFtaWx5OiAiQ291cmllciBOZXciLCBtb25vc3BhY2U7Ci19Ci0KLS8qIFRoZSBsYW5naW5saW5lIHN0eWxlLCBsaWtlIHVzZXJpbnB1dCBhbmQgZmlsZXBhdGgsIGFsc28gcmVuZGVycyB0ZXh0IG1vbm9zcGFjZS4gVXNlIHRoaXMKLSAgIHRvIGRlbm90ZSBhbnkgaW5kaXZpZHVhbCBpbnN0YW5jZSBvZiBjb2RlIGluIHRoZSBjb250ZXh0IG9mIG5vbi1jb2RlZCB0ZXh0LiBGb3IgZXhhbXBsZSwgCi0gICB5b3Ugd291bGQgdXNlIHRoaXMgdG8gZGVub3RlIHRoZSBuYW1lIG9mIGEgY2xhc3Mgd2hlbiB5b3UncmUgZGVzY3JpYmluZyBpdCBpbiB0aGUgcGFyYWdyYXBoIHRoYXQKLSAgIHByZWNlZGVzIGEgY29kZSBzYW1wbGUuIFRvIGRlbm90ZSBhIGNvZGUgc2FtcGxlLCBob3dldmVyLCB1c2UgdGhlIDxwcmU+IHRhZy4gKi8KLXNwYW4ubGFuZ2lubGluZSB7Ci0JZm9udDogMTAwJSBDb3VyaWVyIE5ldyBDb3VyaWVyIG1vbm87Ci0JZm9udC1mYW1pbHk6ICJDb3VyaWVyIE5ldyIsIG1vbm9zcGFjZTsKLX0KLQotLyogVGhlIGxpc3RwbGFpbiBzdHlsZSBuYXJyb3dzIHRoZSBtYXJnaW4gYmV0d2VlbiB0aGUgZm9ybWF0dGVkIGxpbmUgYW5kIHRoZSBvbmUgYmVmb3JlIGl0LgotICAgSXQgaXMgdG8gYmUgdXNlZCB3aGVuIGNyZWF0aW5nIGEgc2Vjb25kIHBhcmFncmFwaCBpbiBhIGxpc3QgaXRlbSwgYWxvbmcgd2l0aCB0aGUgaW5kZW50IGFuZAotICAgdW5pbmRlbnQgYnV0dG9ucyBpbiBEcmVhbXdlYXZlci4gKi8KLXAubGlzdHBsYWluIHsKLQltYXJnaW4tdG9wOiAwLjdlbTsKLQltYXJnaW4tYm90dG9tOiAwOwotCXBhZGRpbmc6IDBlbTsKLX0KLQotLyogQWxsIHRleHQgaW4gdGhlIG5hdnRpdGxlIHN0eWxlIHNob3VsZCBpbmNsdWRlIGEgbGluayB0byBhbm90aGVyIHRvcGljLgotICAgVGhlIG5hdnRpdGxlIHN0eWxlIGlzIHVzZWQgaW4gbmF2aWdhdGlvbmFsIG5vZGUgdG9waWNzLCBpbiBDbGFzcyByZWZlcmVuY2UKLSAgIHRvcGljcywgYW5kIGluIE1ldGhvZCByZWZlcmVuY2UgdG9waWNzLiBGb3IgZXhhbXBsZSwgaW4gdGhlICJUb3BpY3MgCi0gICBJbmNsdWRlZCBpbiB0aGlzIFNlY3Rpb24iIHNlY3Rpb24gb2YgYSBuYXZpZ2F0aW9uIHRvcGljLCB5b3UgaW5jbHVkZSB0aGUgbGlua3MgdG8gYWxsIG9mIAotICAgdGhlIHRvcGljcyBpbiB0aGF0IGNoYXB0ZXIsIGFsb25nIHdpdGggYSBicmllZiBkZXNjcmlwdGlvbiBvZiB3aGF0IHlvdSdsbCBmaW5kIGluIGVhY2guIFVzZSB0aGUKLSAgIG5hdnRpdGxlIHN0eWxlIGZvciB0aGUgbGlua2VkIHRleHQuIEl0IGRpZmZlcnMgZnJvbSBhIG5vcm1hbCBwYXJhZ3JhcGggc3R5bGUgaW4gdGhhdCBpdCBkb2VzIG5vdCAKLSAgIGluY2x1ZGUgYW4gZXh0cmEgcGFyYWdyYXBoIGJyZWFrIGJldHdlZW4gdGhlIGxpbmsgYW5kIHRoZSBkZXNjcmlwdGl2ZSB0ZXh0LiAqLwotcC5uYXZ0aXRsZSB7Ci0JbWFyZ2luLXRvcDogLjZlbTsKLQltYXJnaW4tYm90dG9tOiAwZW07Ci19Ci0KLS8qIFRoZSBuYXZkZXNjIHN0eWxlIGlzIHVzZWQgaW4gbmF2aWdhdGlvbmFsIG5vZGUgdG9waWNzLCBpbiBDbGFzcyByZWZlcmVuY2UKLSAgIHRvcGljcywgYW5kIGluIE1ldGhvZCByZWZlcmVuY2UgdG9waWNzLiBGb3IgZXhhbXBsZSwgaW4gdGhlICJUb3BpY3MgSW5jbHVkZWQgaW4gdGhpcyBTZWN0aW9uIiAKLSAgIHNlY3Rpb24gb2YgYSBuYXZpZ2F0aW9uIHRvcGljLCB5b3UgaW5jbHVkZSB0aGUgbGlua3MgdG8gYWxsIG9mIHRoZSB0b3BpY3MgaW4gdGhhdCBjaGFwdGVyLAotICAgYWxvbmcgd2l0aCBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHdoYXQgeW91J2xsIGZpbmQgaW4gZWFjaC4gVXNlIHRoaXMgc3R5bGUgZm9yIHRoZSBkZXNjcmlwdGl2ZSB0ZXh0LiAKLSAgIEl0IGluZGVudHMgdGhlIHRleHQgb25lIHRhYiBzdG9wIGFuZCBrZWVwcyB0aGUgbWFyZ2luIGJldHdlZW4gdGhpcyBzdHlsZSBhbmQgdGhlIG5hdnRpdGxlIHN0eWxlIHNtYWxsLiAgKi8KLXAubmF2ZGVzYyB7Ci0JbWFyZ2luLWJvdHRvbTogMWVtOwotCW1hcmdpbi1sZWZ0OiAxLjllbTsKLQltYXJnaW4tdG9wOiAwZW07Ci19Ci0KLS8qIFRoZSBub3RlcGFyYSBzdHlsZSBpbmRlbnRzIHlvdXIgdGV4dCB0byB0aGUgdGFiIHN0b3AgZm9yIG5vdGUKLSAgIHRleHQuIFlvdSBzaG91bGQgYWx3YXlzIGJlZ2luIE5vdGUgdGV4dCB3aXRoIHRoZSB3b3JkICJOb3RlOiIgaW4KLSAgIGJvbGRmYWNlLiAqLwotcC5ub3RlcGFyYSB7Ci0JbWFyZ2luLWxlZnQ6IDJlbTsKLQltYXJnaW4tcmlnaHQ6IDJlbTsKLQltYXJnaW4tYm90dG9tOiAxLjVlbTsKLX0KLQotLyogVGhlIHBhcnRuYW1lIHN0eWxlIHJlc2VtYmxlcyB0aGUgbmF2dGl0bGUgc3R5bGUgaW4gdGhhdCBpdCBrZWVwcyB0aGUgbmV4dCBwYXJhZ3JhcGggZmx1c2ggd2l0aCBpdC4gCi0gICBZb3UgdXNlIGl0IHdoZW4geW91IGxpc3QgdGhlIHBhcmFtZXRlcnMgaW4gYSByZWZlcmVuY2UgdG9waWMuIEl0IGlzIGFsc28gdXNlZCBjdXJyZW50bHkgaW4gdGhlIAotICAgZ2xvc3NhcnkgdG8gZGVzaWduYXRlIGdsb3NzYXJ5IGVudHJpZXMuIEl0IHJlbmRlcnMgdGV4dCBpdGFsaWMuCi0gICBUaGUgcGFydG5hbWUgc3R5bGUgc2hvdWxkIGFsd2F5cyBiZSBmb2xsb3dlZCBieSB0aGUgcGFydGRlc2Mgc3R5bGUuKi8KLXAucGFydG5hbWUgewotCW1hcmdpbi10b3A6IC42ZW07Ci0JbWFyZ2luLWJvdHRvbTogMHB4OwotCWZvbnQtc3R5bGU6IGl0YWxpYzsKLX0KLQotLyogVXNlIHRoZSBwYXJ0ZGVzYyBzdHlsZSB3aGVuIHlvdSBkZXNjcmliZSB0aGUgZnVuY3Rpb24gb2YgdGhlIHByb3BlcnRpZXMsIHBhcmFtZXRlcnMsIG9yIGV4Y2VwdGlvbnMgCi0gICBsaXN0ZWQgaW4gYSByZWZlcmVuY2UgdG9waWMuIEl0IGlzIGFsc28gdXNlZCBjdXJyZW50bHkgaW4gdGhlIGdsb3NzYXJ5IHRvIGRlc2lnbmF0ZSBnbG9zc2FyeSAKLSAgIGRlZmluaXRpb25zLiBUaGUgc3R5bGUgaW5kZW50cyB0aGUgZGVzY3JpcHRpb24gc2xpZ2h0bHkuCi0gICBUaGUgcGFydGRlc2Mgc3R5bGUgc2hvdWxkIGFsd2F5cyBmb2xsb3cgdGhlIHBhcnRuYW1lIG9yIGF0dHJpYnV0ZSBzdHlsZS4qLwotcC5wYXJ0ZGVzYyB7Ci0JbWFyZ2luLWJvdHRvbTogMWVtOwotCW1hcmdpbi1sZWZ0OiAxLjllbTsKLQltYXJnaW4tdG9wOiAwZW07Ci0KLX0KLQotLyogVGhlIHBvaW50IG9mIHRoZSBwcm9jdGl0bGUgc3R5bGUgaXMgdGhlIHNhbWUgYXMgdGhlIHBvaW50IG9mIHRoZSByZWxhdGVkdG9waWNzIHN0eWxlLiAgCi0gICBJdCBhcHBsaWVzIHRvIGFsbCBoZWFkaW5ncyB0aGF0IGJlZ2luIHdpdGggIlRvIFtkbyBzb21ldGhpbmddIi4gSXQgbG9va3MgaWRlbnRpY2FsIHRvIHRoZSBoNCBzdHlsZS4gICovCi1wLnByb2N0aXRsZSB7Ci0JZm9udC1zaXplOiAxMTAlOwotCW1hcmdpbi10b3A6IDFlbTsKLQltYXJnaW4tYm90dG9tOiAuNmVtOwotCWZvbnQtd2VpZ2h0OiBCb2xkOwotCi19Ci0KLS8qIFVzZSB0aGUgcmVsYXRlZHRvcGljcyBzdHlsZSwgZm9yIHRoZSB3b3JkcyAiUmVsYXRlZCBUb3BpY3MiIGF0IHRoZSBlbmQgb2YgYSB0b3BpYy4gCi0gICBJdCBsb29rcyBpZGVudGljYWwgdG8gdGhlIGg0IHN0eWxlLiAqLwotcC5yZWxhdGVkdG9waWNzIHsKLQlmb250LXNpemU6IDEyMCU7Ci0JbWFyZ2luLXRvcDogMWVtOwotCW1hcmdpbi1ib3R0b206IC42ZW07Ci0JZm9udC13ZWlnaHQ6IEJvbGQ7Ci19Ci0KLS8qIFRoZSBzeW50YXggc3R5bGUgcmVuZGVycyB0ZXh0IGJvbGQuIFVzZSBpdCB0byBzdHlsZSBhbGwgc3ludGF4IGxpbmVzIHVuZGVyIHRoZQotICAgU3ludGF4IGhlYWRpbmcgb2YgcmVmZXJlbmNlIHRvcGljcy4gKi8KLXAuc3ludGF4IHsKLQlmb250LWZhbWlseTogbW9ub3NwYWNlOwotCWxpbmUtaGVpZ2h0OiBub3JtYWw7Ci0JZm9udC13ZWlnaHQ6IEJvbGQ7Ci19Ci0KLS8qIFVzZSB0aGUgc3ludGF4aW5kZW50IHN0eWxlIHRvIGluZGVudCBzdWItcHJvcGVydGllcyBvZiBzeW50YXggZGVjbGFyYXRpb25zLiAqLwotcC5zeW50YXhpbmRlbnQgewotCWZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Ci0JbGluZS1oZWlnaHQ6IG5vcm1hbDsKLQlmb250LXdlaWdodDogQm9sZDsKLQltYXJnaW4tbGVmdDogMS41ZW07Ci0JbWFyZ2luLXRvcDogMGVtOwotCW1hcmdpbi1ib3R0b206IDBweDsKLX0KLQotCi1wLmZpbGV1cmwgewotCWZvbnQtc2l6ZTogOHB0OwotfQotCi1wLm1vZGlmaWVkZGF0ZSB7Ci0JZm9udC1zaXplOiA4cHQ7Ci19Ci0KLS8qIFRoZSBzeW50YXhwYXJ0bmFtZSBjaGFyYWN0ZXIgc3R5bGUgcmVuZGVycyB0ZXh0IGl0YWxpYy4gVXNlIGl0IHRvIGRlc2lnbmF0ZSAKLSAgIHN5bnRheCBlbGVtZW50cyBpbiByZWZlcmVuY2UgdG9waWNzLiovCi1zcGFuLnN5bnRheHBhcnRuYW1lIHsKLQlmb250LXN0eWxlOiBpdGFsaWM7Ci0JZm9udC13ZWlnaHQ6IG5vcm1hbDsKLX0KLQotLyogVGhlc2Ugc3BlY2lmaWNhdGlvbnMgZGljdGF0ZSB0aGUgbWFyZ2lucyBhbmQgd2lkdGggb2YgdGFibGVzLiAqLwotdGFibGUgewotCXdpZHRoOiA5MCU7Ci0JbWFyZ2luLXRvcDogLjZlbTsKLQltYXJnaW4tYm90dG9tOiAuM2VtOwotfQotCi0vKiBUaGUgYmFja2dyb3VuZCBvZiBoZWFkZXIgY2VsbHMgaXMgZ3JleSwgYW5kIHRoZSB0ZXh0IGlzIGJvdHRvbS1hbGlnbmVkLiAqLwotdGggewotCXBhZGRpbmctbGVmdDogOHB4OwotCXBhZGRpbmctcmlnaHQ6IDhweDsKLQliYWNrZ3JvdW5kOiAjY2NjY2NjOwotCXRleHQtYWxpZ246IGxlZnQ7Ci0JZm9udC1zaXplOiA4MCU7Ci0JZm9udC1mYW1pbHk6IFZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7Ci0JdmVydGljYWwtYWxpZ246IGJvdHRvbTsKLX0KLQotLyogVGhlIHRleHQgaW4gbm9ybWFsIHRhYmxlIGNlbGxzIGlzIHRvcC1hbGlnbmVkLiAqLwotdGQgewotCXBhZGRpbmctbGVmdDogOHB4OwotCXBhZGRpbmctcmlnaHQ6IDhweDsKLQliYWNrZ3JvdW5kOiAjZmZmZmZmOwotCXZlcnRpY2FsLWFsaWduOiB0b3A7Ci0JZm9udC1zaXplOiA4MCU7Ci0JZm9udC1mYW1pbHk6IFZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7Ci19Ci0KLS8qIFRoaXMgc3R5bGUgY3JlYXRlcyBzcGFjZSBhYm92ZSBhbmQgYmVsb3cgdGFibGUgdGV4dCBiZXR3ZWVuIHBhcmFncmFwaCBhbmQgdGhlIHRhYmxlIGJvcmRlcnMuICovCi1wLnRhYmxldGV4dCB7Ci0JbWFyZ2luLXRvcDogLjZlbTsKLQltYXJnaW4tYm90dG9tOiAuNmVtOwotfQotCi0vKiBUaGUgZWRpdG9yIHVzZXMgdGhpcyBzdHlsZSB3aGVuIGNyZWF0aW5nIHRlbXBsYXRlIGd1aWRlcyB0byBkZXNpZ25hdGUgYSBzdHlsZSBhbm5vdGF0aW9uLiAKLSAgIFlvdSBwcm9iYWJseSB3b24ndCB3YW50IHRvIHVzZSBpdCBhbnl3aGVyZSBlbHNlIGluIHRoZSBndWlkZS4gKi8KLXNwYW4udGVtcGxhdGUgewotCWNvbG9yOiAjRkYwMEZGOwkKLX0KLQotYS50b2Mtbm9kZSB7Ci0JZm9udC1zaXplOjExcHg7Ci0JY29sb3I6MDAwMDAwOwotCW1hcmdpbi1sZWZ0OiAwcHg7Ci0JbWFyZ2luLXRvcDogMHB4OwotCW1hcmdpbi1ib3R0b206IDBweDsKLSAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwotICAgIGZvbnQtZmFtaWx5OiBUYWhvbWE7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjojRkZGRkZGOwotICAgIHRleHQtZGVjb3JhdGlvbjpub25lOyAgICAgICAgCi19Ci0KLS8qIFRoZSB1c2VyaW5wdXQgc3R5bGUgcmVuZGVycyB0ZXh0IG1vbm9zcGFjZS5Vc2UgdGhpcyBzdHlsZSB0byBoaWdobGlnaHQgdGV4dCB0aGF0IGEgdXNlciAKLSAgIHR5cGVzIGludG8gYSB0ZXh0IGZpZWxkLiAgKi8KLXNwYW4udXNlcmlucHV0IHsKLQlmb250OiAxMDAlIENvdXJpZXIgTmV3IENvdXJpZXIgbW9ubzsKLQlmb250LWZhbWlseTogIkNvdXJpZXIgTmV3IiwgbW9ub3NwYWNlOwotfQotCi0vKiBTdGFuZGFyZCBIVE1MIHRhZ3MuICovCi11bCwKLW9sIHsKLQlmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsKLQlsaXN0LXN0eWxlLXBvc2l0aW9uOiBvdXRzaWRlOwotCWxpc3Qtc3R5bGUtaW1hZ2U6IG5vbmU7Ci0JbWFyZ2luLXRvcDogMGVtOwotCW1hcmdpbi1ib3R0b206IDBlbTsKLX0KLQotLyogU3RhbmRhcmQgSFRNTCB0YWcuICovCi1vbCB7Ci0JbGlzdC1zdHlsZS10eXBlOiAxOwotCW1hcmdpbi1sZWZ0OiAyZW07Ci19Ci0KLS8qIFN0YW5kYXJkIEhUTUwgdGFnLiAqLwotdWwgewotCWxpc3Qtc3R5bGUtdHlwZTogZGlzYzsKLQltYXJnaW4tbGVmdDogMS41ZW07Ci19Ci0KLS8qIFN0YW5kYXJkIEhUTUwgdGFnLiAqLwotbGkgewotCW1hcmdpbi10b3A6IDEuM2VtOyAKLQltYXJnaW4tYm90dG9tOiAwZW07Ci19Ci0KLWE6bGluayB7Ci0JY29sb3I6ICMzMzY2Q0M7Ci19Ci1hOmhvdmVyIHsKLQl4LXRleHQtdW5kZXJsaW5lOiBub3JtYWw7Ci0JLypiZWdpbiFrYWRvdnt7Ki8gdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IC8qfX1lbmQha2Fkb3YqLyAKLX0KLQotYTphY3RpdmUgewotCXgtdGV4dC11bmRlcmxpbmU6IG5vcm1hbDsKLQkvKmJlZ2luIWthZG92e3sqLyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgLyp9fWVuZCFrYWRvdiovIAotfQotCi1hOnZpc2l0ZWQgewotCWNvbG9yOiAjODAzMzgwOwotfQotCi1hIHsKLQl4LXRleHQtdW5kZXJsaW5lOiBvZmY7Ci0JeC10ZXh0LW92ZXJsaW5lOiBvZmY7Ci0JeC10ZXh0LWxpbmUtdGhyb3VnaDogb2ZmOwotCS8qYmVnaW4ha2Fkb3Z7eyovIHRleHQtZGVjb3JhdGlvbjogbm9uZSBub25lIG5vbmU7IC8qfX1lbmQha2Fkb3YqLyAKLX0KLWE6bGluayB7Ci0JY29sb3I6ICMzMzY2Q0M7Ci19Ci0KLWE6aG92ZXIgewotCXgtdGV4dC11bmRlcmxpbmU6IG5vcm1hbDsKLQkvKmJlZ2luIWthZG92e3sqLyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgLyp9fWVuZCFrYWRvdiovIAotfQotCi1hOmFjdGl2ZSB7Ci0JeC10ZXh0LXVuZGVybGluZTogbm9ybWFsOwotCS8qYmVnaW4ha2Fkb3Z7eyovIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyAvKn19ZW5kIWthZG92Ki8gCi19Ci0KLWE6dmlzaXRlZCB7Ci0JY29sb3I6ICMwMDAwNjY7Ci19Ci0KLWRpdi5mb290ZXIgewotfQotCi0uYnV0dG9uY2xhc3MKLXsKLQlmb250LXNpemU6MTBweDsKLQloZWlnaHQ6MjBweDsKLX0KLQotLmZvcm1jbGFzcwotewotCWZvbnQtc2l6ZToxMHB4OwotCWhlaWdodDoxN3B4OwotfQotCi0KLQotCi0vKkRFUFJFQ0FURUQqLwotcC5jb2RlYmxvY2sgewotCWZvbnQtc2l6ZTogMTAwJTsKLQlmb250LWZhbWlseTogbW9ub3NwYWNlOwotCWxpbmUtaGVpZ2h0OiAxZW07Ci0JeC10ZXh0LXRhYi1zdG9wczogcmVwZWF0IDFpbjsKLQl3aGl0ZS1zcGFjZTogbm93cmFwOwotCWNvbG9yOiAjMDAwMDAwOwotCWN1cnNvcjogdGV4dDsKLQlwYWRkaW5nLXJpZ2h0OiAxZW07Ci0JcGFkZGluZy1sZWZ0OiAxZW07Ci0JcGFkZGluZy10b3A6IDBlbTsKLQlwYWRkaW5nLWJvdHRvbTogMGVtOwotCW1hcmdpbi1ib3R0b206IDBlbTsKLQltYXJnaW4tdG9wOiAwZW07Ci0JeC10ZXh0LXVuZGVybGluZTogT2ZmOwotCS8qYmVnaW4ha2Fkb3Z7eyovIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLyp9fWVuZCFrYWRvdiovIAotfQotCi0vKiBERVBSRUNBVEVEICovCi1wLmJ1bGxldGluZGVudDEgewotCW1hcmdpbi1sZWZ0OiAxLjVlbTsKLQltYXJnaW4tdG9wOiAwOwotCW1hcmdpbi1ib3R0b206IDA7Ci19Ci0KLS8qIERFUFJFQ0FURUQgKi8KLXAuYnVsbGV0aW5kZW50MiB7Ci0JbWFyZ2luLWxlZnQ6IDUuMWVtOwotCW1hcmdpbi10b3A6IDA7Ci0JbWFyZ2luLWJvdHRvbTogMDsKLX0KLQotLyogREVQUkVDQVRFRCAqLwotcC5idWxsZXRpbmRlbnQzIHsKLQltYXJnaW4tbGVmdDogNC4zZW07Ci19Ci0KLS8qIERFUFJFQ0FURUQgKi8KLXAuaW5kZW50MSB7Ci0JbWFyZ2luLWxlZnQ6IDEuNWVtOwotCW1hcmdpbi1yaWdodDogMS45ZW07Ci19Ci0KLS8qIERFUFJFQ0FURUQgKi8KLXAuaW5kZW50MiB7Ci0JbWFyZ2luLWxlZnQ6IDIuOWVtOwotCW1hcmdpbi1yaWdodDogMS45ZW07Ci19Ci0KLS8qIERFUFJFQ0FURUQgKi8KLXAuaW5kZW50MyB7Ci0JbWFyZ2luLWxlZnQ6IDQuM2VtOwotCW1hcmdpbi1yaWdodDogMS45ZW07Ci19Ci0KLS8qIERFUFJFQ0FURUQgKi8KLXAubnVtYmVyZWRpbmRlbnQxIHsKLQltYXJnaW4tbGVmdDogMi4yZW07Ci0JbWFyZ2luLXRvcDogMDsKLQltYXJnaW4tYm90dG9tOiAwOwotfQotCi0vKiBERVBSRUNBVEVEICovCi1wLm51bWJlcmVkaW5kZW50MiB7Ci0JbWFyZ2luLWxlZnQ6IDYuM2VtOwotCW1hcmdpbi10b3A6IDA7Ci0JbWFyZ2luLWJvdHRvbTogMDsKLX0KLQotLyogREVQUkVDQVRFRCAqLwotcC5udW1iZXJlZGluZGVudDMgewotCW1hcmdpbi1sZWZ0OiAxMC41ZW07Ci0JbWFyZ2luLXRvcDogMDsKLQltYXJnaW4tYm90dG9tOiAwOwotfQkKLQotLyogREVQUkVDQVRFRCAqLwotcC50YWJsZXRpdGxlIHsKLQltYXJnaW4tbGVmdDogMDsKLQlmb250LXdlaWdodDogQm9sZDsKLX0KLQotCi0vKiBUaGVzZSBzdHlsZXMgYXJlIHVzZWQgYnkgdGhlIHNlYXJjaCByZXN1bHRzIHBhZ2UgKi8KLQotLnNlYXJjaC1ub2RlIHsKLQlmb250LXNpemU6MTBweDsKLQljb2xvcjowMDAwMDA7Ci19Ci0KLWEuc2VhcmNoLW5vZGUgewotCWZvbnQtc2l6ZToxMHB4OwotCWNvbG9yOjAwMDAwMDsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92Mi9leHRlcm5hbC9saWIvanVuaXQuamFyIGIvdjIvZXh0ZXJuYWwvbGliL2p1bml0LmphcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVlNDNiYi4uMDAwMDAwMAotLS0gYS92Mi9leHRlcm5hbC9saWIvanVuaXQuamFyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdjIvZXh0ZXJuYWwvbGliL29sZHhiZWFuLmphciBiL3YyL2V4dGVybmFsL2xpYi9vbGR4YmVhbi5qYXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxM2Y4M2EuLjAwMDAwMDAKLS0tIGEvdjIvZXh0ZXJuYWwvbGliL29sZHhiZWFuLmphcgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2J0cy9CYXNlQmluZGluZ0xvYWRlci5qYXZhIGIvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvYnRzL0Jhc2VCaW5kaW5nTG9hZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyMTNiMGYuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvYnRzL0Jhc2VCaW5kaW5nTG9hZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzOwotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotLyoqCi0gKiBCYXNlIGNsYXNzCi0gKi8gCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmFzZUJpbmRpbmdMb2FkZXIgaW1wbGVtZW50cyBCaW5kaW5nTG9hZGVyCi17Ci0gICAgcHJpdmF0ZSBmaW5hbCBNYXAgYmluZGluZ1R5cGVzID0gbmV3IExpbmtlZEhhc2hNYXAoKTsgICAgLy8gbmFtZS1wYWlyIC0+IEJpbmRpbmdUeXBlCi0gICAgcHJpdmF0ZSBmaW5hbCBNYXAgeG1sRnJvbUphdmEgPSBuZXcgTGlua2VkSGFzaE1hcCgpOyAgICAgLy8gamF2YU5hbWUgLT4gcGFpcgotICAgIHByaXZhdGUgZmluYWwgTWFwIHhtbEZyb21KYXZhRWxlbWVudCA9IG5ldyBMaW5rZWRIYXNoTWFwKCk7IC8vIGphdmFOYW1lIC0+IHBhaXIgKHhtbCBlbGVtZW50KQotICAgIHByaXZhdGUgZmluYWwgTWFwIGphdmFGcm9tWG1sUG9qbyA9IG5ldyBMaW5rZWRIYXNoTWFwKCk7IC8vIHhtbE5hbWUgLT4gcGFpciAocG9qbykKLSAgICBwcml2YXRlIGZpbmFsIE1hcCBqYXZhRnJvbVhtbE9iaiA9IG5ldyBMaW5rZWRIYXNoTWFwKCk7ICAvLyB4bWxOYW1lIC0+IHBhaXIgKHhtbG9iaikKLQotICAgIHB1YmxpYyBCaW5kaW5nVHlwZSBnZXRCaW5kaW5nVHlwZShCaW5kaW5nVHlwZU5hbWUgYnROYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChCaW5kaW5nVHlwZSliaW5kaW5nVHlwZXMuZ2V0KGJ0TmFtZSk7Ci0gICAgfQotCi0gICAgcHVibGljIEJpbmRpbmdUeXBlTmFtZSBsb29rdXBQb2pvRm9yKFhtbE5hbWUgeE5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gKEJpbmRpbmdUeXBlTmFtZSlqYXZhRnJvbVhtbFBvam8uZ2V0KHhOYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQmluZGluZ1R5cGVOYW1lIGxvb2t1cFhtbE9iamVjdEZvcihYbWxOYW1lIHhOYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChCaW5kaW5nVHlwZU5hbWUpamF2YUZyb21YbWxPYmouZ2V0KHhOYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQmluZGluZ1R5cGVOYW1lIGxvb2t1cFR5cGVGb3IoSmF2YU5hbWUgak5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gKEJpbmRpbmdUeXBlTmFtZSl4bWxGcm9tSmF2YS5nZXQoak5hbWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBCaW5kaW5nVHlwZU5hbWUgbG9va3VwRWxlbWVudEZvcihKYXZhTmFtZSBqTmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoQmluZGluZ1R5cGVOYW1lKXhtbEZyb21KYXZhRWxlbWVudC5nZXQoak5hbWUpOwotICAgIH0KLSAgICAKLSAgICBwcm90ZWN0ZWQgdm9pZCBhZGRCaW5kaW5nVHlwZShCaW5kaW5nVHlwZSBiVHlwZSkKLSAgICB7Ci0gICAgICAgIGJpbmRpbmdUeXBlcy5wdXQoYlR5cGUuZ2V0TmFtZSgpLCBiVHlwZSk7Ci0gICAgfQotICAgIAotICAgIHByb3RlY3RlZCB2b2lkIGFkZFBvam9Gb3IoWG1sTmFtZSB4TmFtZSwgQmluZGluZ1R5cGVOYW1lIGJ0TmFtZSkKLSAgICB7Ci0gICAgICAgIGFzc2VydCghYnROYW1lLmdldEphdmFOYW1lKCkuaXNYbWxPYmplY3QoKSk7Ci0gICAgICAgIGphdmFGcm9tWG1sUG9qby5wdXQoeE5hbWUsIGJ0TmFtZSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgYWRkWG1sT2JqZWN0Rm9yKFhtbE5hbWUgeE5hbWUsIEJpbmRpbmdUeXBlTmFtZSBidE5hbWUpCi0gICAgewotICAgICAgICBhc3NlcnQoYnROYW1lLmdldEphdmFOYW1lKCkuaXNYbWxPYmplY3QoKSk7Ci0gICAgICAgIGphdmFGcm9tWG1sT2JqLnB1dCh4TmFtZSwgYnROYW1lKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBhZGRUeXBlRm9yKEphdmFOYW1lIGpOYW1lLCBCaW5kaW5nVHlwZU5hbWUgYnROYW1lKQotICAgIHsKLSAgICAgICAgYXNzZXJ0KGJ0TmFtZS5nZXRYbWxOYW1lKCkuaXNTY2hlbWFUeXBlKCkpOwotICAgICAgICB4bWxGcm9tSmF2YS5wdXQoak5hbWUsIGJ0TmFtZSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgYWRkRWxlbWVudEZvcihKYXZhTmFtZSBqTmFtZSwgQmluZGluZ1R5cGVOYW1lIGJ0TmFtZSkKLSAgICB7Ci0gICAgICAgIGFzc2VydChidE5hbWUuZ2V0WG1sTmFtZSgpLmdldENvbXBvbmVudFR5cGUoKSA9PSBYbWxOYW1lLkVMRU1FTlQpOwotICAgICAgICB4bWxGcm9tSmF2YUVsZW1lbnQucHV0KGpOYW1lLCBidE5hbWUpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBiaW5kaW5nVHlwZXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJpbmRpbmdUeXBlcy52YWx1ZXMoKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIENvbGxlY3Rpb24gdHlwZU1hcHBlZEphdmFUeXBlcygpCi0gICAgewotICAgICAgICByZXR1cm4geG1sRnJvbUphdmEua2V5U2V0KCk7Ci0gICAgfQotCi0gICAgcHVibGljIENvbGxlY3Rpb24gZWxlbWVudE1hcHBlZEphdmFUeXBlcygpCi0gICAgewotICAgICAgICByZXR1cm4geG1sRnJvbUphdmFFbGVtZW50LmtleVNldCgpOwotICAgIH0KLQotICAgIHB1YmxpYyBDb2xsZWN0aW9uIHBvam9NYXBwZWRYbWxUeXBlcygpCi0gICAgewotICAgICAgICByZXR1cm4gamF2YUZyb21YbWxQb2pvLmtleVNldCgpOwotICAgIH0KLQotICAgIHB1YmxpYyBDb2xsZWN0aW9uIHhtbE9iamVjdE1hcHBlZFhtbFR5cGVzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBqYXZhRnJvbVhtbE9iai5rZXlTZXQoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvYmluZGluZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvYmluZGluZy9idHMvQmluZGluZ0ZpbGUuamF2YSBiL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2J0cy9CaW5kaW5nRmlsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTU5OTVjLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2J0cy9CaW5kaW5nRmlsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi0KLS8qKgotICogUmVwcmVzZW50cyBhIEJpbmRpbmdMb2FkZXIgd2hvc2UgY29udGVudHMgYXJlIGxvYWRlZCBmcm9tIGEKLSAqIHNpbmdsZSBiaW5kaW5nLWNvbmZpZyBmaWxlLiAoU2VlIGJpbmRpbmctY29uZmlnLnhzZCkKLSAqLwotcHVibGljIGNsYXNzIEJpbmRpbmdGaWxlIGV4dGVuZHMgQmFzZUJpbmRpbmdMb2FkZXIKLXsKLSAgICAvKioKLSAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGlzIHVzZWQgd2hlbiBtYWtpbmcgYSBuZXcgb25lIG91dCBvZiB0aGUgYmx1ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgQmluZGluZ0ZpbGUoKQotICAgIHsKLSAgICAgICAgLy8gbm90aGluZyB0byBkbyAtIGFsbCBtYXBzIGFyZSBlbXB0eQotICAgIH0KLQotICAgIC8qKgotICAgICAqIExvYWRlcgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgQmluZGluZ0ZpbGUgZm9yRG9jKG9yZy5hcGFjaGUueG1sYmVhbnMueDIwMDMueDA5LmJpbmRpbmdDb25maWcuQmluZGluZ0NvbmZpZ0RvY3VtZW50IGRvYykKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgQmluZGluZ0ZpbGUoZG9jKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIGNvbnN0cnVjdG9yIGxvYWRzIGFuIGluc3RhbmNlIGZyb20gYW4gWE1MIGZpbGUKLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgQmluZGluZ0ZpbGUob3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5CaW5kaW5nQ29uZmlnRG9jdW1lbnQgZG9jKQotICAgIHsKLSAgICAgICAgTGlzdCBlcnJvcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIGlmICghZG9jLnZhbGlkYXRlKG5ldyBYbWxPcHRpb25zKCkuc2V0RXJyb3JMaXN0ZW5lcihlcnJvcnMpKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oZXJyb3JzLnNpemUoKSA+IDAgPyBlcnJvcnMuZ2V0KDApLnRvU3RyaW5nKCkgOiAiSW52YWxpZCBiaW5kaW5nLWNvbmZpZyBkb2N1bWVudCIpOwotCi0gICAgICAgIC8vIHRvZG86IGluIHRoZSBsb29wcyBiZWxvdywgdmFsaWRhdGUgdGhhdCBlbnRyaWVzIGFyZSB1bmlxdWUsIG9yIG1vZGlmeSBzY2hlbWEgdG8gZG8gc28uCi0KLSAgICAgICAgb3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5CaW5kaW5nVHlwZVtdIGJ0Tm9kZXMgPQotICAgICAgICAgICAgICAgIGRvYy5nZXRCaW5kaW5nQ29uZmlnKCkuZ2V0QmluZGluZ3MoKS5nZXRCaW5kaW5nVHlwZUFycmF5KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnROb2Rlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgQmluZGluZ1R5cGUgbmV4dCA9IEJpbmRpbmdUeXBlLmxvYWRGcm9tQmluZGluZ1R5cGVOb2RlKGJ0Tm9kZXNbaV0pOwotICAgICAgICAgICAgYWRkQmluZGluZ1R5cGUobmV4dCwgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAgfQotICAgICAgICBvcmcuYXBhY2hlLnhtbGJlYW5zLngyMDAzLngwOS5iaW5kaW5nQ29uZmlnLk1hcHBpbmdbXSBtTm9kZXMgPQotICAgICAgICAgICAgICAgIGRvYy5nZXRCaW5kaW5nQ29uZmlnKCkuZ2V0SmF2YVRvWG1sKCkuZ2V0TWFwcGluZ0FycmF5KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbU5vZGVzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBKYXZhTmFtZSBqTmFtZSA9IEphdmFOYW1lLmZvclN0cmluZyhtTm9kZXNbaV0uZ2V0SmF2YXR5cGUoKSk7Ci0gICAgICAgICAgICBYbWxOYW1lIHhOYW1lID0gWG1sTmFtZS5mb3JTdHJpbmcobU5vZGVzW2ldLmdldFhtbGNvbXBvbmVudCgpKTsKLSAgICAgICAgICAgIGFkZFR5cGVGb3Ioak5hbWUsIEJpbmRpbmdUeXBlTmFtZS5mb3JQYWlyKGpOYW1lLCB4TmFtZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbU5vZGVzID0gZG9jLmdldEJpbmRpbmdDb25maWcoKS5nZXRKYXZhVG9FbGVtZW50KCkuZ2V0TWFwcGluZ0FycmF5KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbU5vZGVzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBKYXZhTmFtZSBqTmFtZSA9IEphdmFOYW1lLmZvclN0cmluZyhtTm9kZXNbaV0uZ2V0SmF2YXR5cGUoKSk7Ci0gICAgICAgICAgICBYbWxOYW1lIHhOYW1lID0gWG1sTmFtZS5mb3JTdHJpbmcobU5vZGVzW2ldLmdldFhtbGNvbXBvbmVudCgpKTsKLSAgICAgICAgICAgIGFkZEVsZW1lbnRGb3Ioak5hbWUsIEJpbmRpbmdUeXBlTmFtZS5mb3JQYWlyKGpOYW1lLCB4TmFtZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbU5vZGVzID0gZG9jLmdldEJpbmRpbmdDb25maWcoKS5nZXRYbWxUb1Bvam8oKS5nZXRNYXBwaW5nQXJyYXkoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtTm9kZXMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIEphdmFOYW1lIGpOYW1lID0gSmF2YU5hbWUuZm9yU3RyaW5nKG1Ob2Rlc1tpXS5nZXRKYXZhdHlwZSgpKTsKLSAgICAgICAgICAgIFhtbE5hbWUgeE5hbWUgPSBYbWxOYW1lLmZvclN0cmluZyhtTm9kZXNbaV0uZ2V0WG1sY29tcG9uZW50KCkpOwotICAgICAgICAgICAgYWRkUG9qb0Zvcih4TmFtZSwgQmluZGluZ1R5cGVOYW1lLmZvclBhaXIoak5hbWUsIHhOYW1lKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtTm9kZXMgPSBkb2MuZ2V0QmluZGluZ0NvbmZpZygpLmdldFhtbFRvWG1sb2JqKCkuZ2V0TWFwcGluZ0FycmF5KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbU5vZGVzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBKYXZhTmFtZSBqTmFtZSA9IEphdmFOYW1lLmZvclN0cmluZyhtTm9kZXNbaV0uZ2V0SmF2YXR5cGUoKSk7Ci0gICAgICAgICAgICBYbWxOYW1lIHhOYW1lID0gWG1sTmFtZS5mb3JTdHJpbmcobU5vZGVzW2ldLmdldFhtbGNvbXBvbmVudCgpKTsKLSAgICAgICAgICAgIGFkZFhtbE9iamVjdEZvcih4TmFtZSwgQmluZGluZ1R5cGVOYW1lLmZvclBhaXIoak5hbWUsIHhOYW1lKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBXcml0ZXMgb3V0IHRvIFhNTAotICAgICAqLwotICAgIHB1YmxpYyBvcmcuYXBhY2hlLnhtbGJlYW5zLngyMDAzLngwOS5iaW5kaW5nQ29uZmlnLkJpbmRpbmdDb25maWdEb2N1bWVudCB3cml0ZSgpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgb3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5CaW5kaW5nQ29uZmlnRG9jdW1lbnQgZG9jID0KLSAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLnhtbGJlYW5zLngyMDAzLngwOS5iaW5kaW5nQ29uZmlnLkJpbmRpbmdDb25maWdEb2N1bWVudC5GYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAgIHdyaXRlKGRvYyk7Ci0gICAgICAgIHJldHVybiBkb2M7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYW4gaW5zdGFuY2UgaW50byBhbiBlbXB0eSBkb2MuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHdyaXRlKG9yZy5hcGFjaGUueG1sYmVhbnMueDIwMDMueDA5LmJpbmRpbmdDb25maWcuQmluZGluZ0NvbmZpZ0RvY3VtZW50IGRvYykKLSAgICB7Ci0gICAgICAgIGlmIChkb2MuZ2V0QmluZGluZ0NvbmZpZygpICE9IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDYW4gb25seSB3cml0ZSBpbnRvIGVtcHR5IGRvYyIpOwotICAgICAgICBvcmcuYXBhY2hlLnhtbGJlYW5zLngyMDAzLngwOS5iaW5kaW5nQ29uZmlnLkJpbmRpbmdDb25maWdEb2N1bWVudC5CaW5kaW5nQ29uZmlnIGJjTm9kZSA9IGRvYy5hZGROZXdCaW5kaW5nQ29uZmlnKCk7Ci0KLSAgICAgICAgLy8gbWFrZSB0YWJsZXMKLSAgICAgICAgb3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5CaW5kaW5nVGFibGUgYnRhYk5vZGUgPSBiY05vZGUuYWRkTmV3QmluZGluZ3MoKTsKLSAgICAgICAgb3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5NYXBwaW5nVGFibGUgdHlwZXRhYk5vZGUgPSBiY05vZGUuYWRkTmV3SmF2YVRvWG1sKCk7Ci0gICAgICAgIG9yZy5hcGFjaGUueG1sYmVhbnMueDIwMDMueDA5LmJpbmRpbmdDb25maWcuTWFwcGluZ1RhYmxlIGVsZW1lbnR0YWJOb2RlID0gYmNOb2RlLmFkZE5ld0phdmFUb0VsZW1lbnQoKTsKLSAgICAgICAgb3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5NYXBwaW5nVGFibGUgcG9qb3RhYk5vZGUgPSBiY05vZGUuYWRkTmV3WG1sVG9Qb2pvKCk7Ci0gICAgICAgIG9yZy5hcGFjaGUueG1sYmVhbnMueDIwMDMueDA5LmJpbmRpbmdDb25maWcuTWFwcGluZ1RhYmxlIHhvdGFiTm9kZSA9IGJjTm9kZS5hZGROZXdYbWxUb1htbG9iaigpOwotCi0gICAgICAgIC8vIGZpbGwgZW0gaW46IGJpbmRpbmcgdHlwZXMgKGRlbGVnYXRlIHRvIEJpbmRpbmdUeXBlLndyaXRlKQotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBiaW5kaW5nVHlwZXMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICB7Ci0gICAgICAgICAgICBCaW5kaW5nVHlwZSBiVHlwZSA9IChCaW5kaW5nVHlwZSlpLm5leHQoKTsKLSAgICAgICAgICAgIG9yZy5hcGFjaGUueG1sYmVhbnMueDIwMDMueDA5LmJpbmRpbmdDb25maWcuQmluZGluZ1R5cGUgYnROb2RlID0gYnRhYk5vZGUuYWRkTmV3QmluZGluZ1R5cGUoKTsKLSAgICAgICAgICAgIGJUeXBlLndyaXRlKGJ0Tm9kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBmcm9tLWphdmEgbWFwcGluZ3MKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gdHlwZU1hcHBlZEphdmFUeXBlcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIEphdmFOYW1lIGpOYW1lID0gKEphdmFOYW1lKWkubmV4dCgpOwotICAgICAgICAgICAgQmluZGluZ1R5cGVOYW1lIHBhaXIgPSBsb29rdXBUeXBlRm9yKGpOYW1lKTsKLSAgICAgICAgICAgIG9yZy5hcGFjaGUueG1sYmVhbnMueDIwMDMueDA5LmJpbmRpbmdDb25maWcuTWFwcGluZyBtTm9kZSA9IHR5cGV0YWJOb2RlLmFkZE5ld01hcHBpbmcoKTsKLSAgICAgICAgICAgIG1Ob2RlLnNldEphdmF0eXBlKGpOYW1lLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgbU5vZGUuc2V0WG1sY29tcG9uZW50KHBhaXIuZ2V0WG1sTmFtZSgpLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gZnJvbS1qYXZhIG1hcHBpbmdzCi0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGVsZW1lbnRNYXBwZWRKYXZhVHlwZXMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICB7Ci0gICAgICAgICAgICBKYXZhTmFtZSBqTmFtZSA9IChKYXZhTmFtZSlpLm5leHQoKTsKLSAgICAgICAgICAgIEJpbmRpbmdUeXBlTmFtZSBwYWlyID0gbG9va3VwRWxlbWVudEZvcihqTmFtZSk7Ci0gICAgICAgICAgICBvcmcuYXBhY2hlLnhtbGJlYW5zLngyMDAzLngwOS5iaW5kaW5nQ29uZmlnLk1hcHBpbmcgbU5vZGUgPSBlbGVtZW50dGFiTm9kZS5hZGROZXdNYXBwaW5nKCk7Ci0gICAgICAgICAgICBtTm9kZS5zZXRKYXZhdHlwZShqTmFtZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIG1Ob2RlLnNldFhtbGNvbXBvbmVudChwYWlyLmdldFhtbE5hbWUoKS50b1N0cmluZygpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHRvLXBvam8KLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gcG9qb01hcHBlZFhtbFR5cGVzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgWG1sTmFtZSB4TmFtZSA9IChYbWxOYW1lKWkubmV4dCgpOwotICAgICAgICAgICAgQmluZGluZ1R5cGVOYW1lIHBhaXIgPSBsb29rdXBQb2pvRm9yKHhOYW1lKTsKLSAgICAgICAgICAgIG9yZy5hcGFjaGUueG1sYmVhbnMueDIwMDMueDA5LmJpbmRpbmdDb25maWcuTWFwcGluZyBtTm9kZSA9IHBvam90YWJOb2RlLmFkZE5ld01hcHBpbmcoKTsKLSAgICAgICAgICAgIG1Ob2RlLnNldEphdmF0eXBlKHBhaXIuZ2V0SmF2YU5hbWUoKS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIG1Ob2RlLnNldFhtbGNvbXBvbmVudCh4TmFtZS50b1N0cmluZygpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHRvLXhtbG9iagotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSB4bWxPYmplY3RNYXBwZWRYbWxUeXBlcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFhtbE5hbWUgeE5hbWUgPSAoWG1sTmFtZSlpLm5leHQoKTsKLSAgICAgICAgICAgIEJpbmRpbmdUeXBlTmFtZSBwYWlyID0gbG9va3VwWG1sT2JqZWN0Rm9yKHhOYW1lKTsKLSAgICAgICAgICAgIG9yZy5hcGFjaGUueG1sYmVhbnMueDIwMDMueDA5LmJpbmRpbmdDb25maWcuTWFwcGluZyBtTm9kZSA9IHhvdGFiTm9kZS5hZGROZXdNYXBwaW5nKCk7Ci0gICAgICAgICAgICBtTm9kZS5zZXRKYXZhdHlwZShwYWlyLmdldEphdmFOYW1lKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBtTm9kZS5zZXRYbWxjb21wb25lbnQoeE5hbWUudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRCaW5kaW5nVHlwZShCaW5kaW5nVHlwZSBiVHlwZSwgYm9vbGVhbiBmcm9tSmF2YURlZmF1bHQsIGJvb2xlYW4gZnJvbVhtbERlZmF1bHQpCi0gICAgewotICAgICAgICBhZGRCaW5kaW5nVHlwZShiVHlwZSk7Ci0gICAgICAgIGlmIChmcm9tWG1sRGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGJUeXBlLmdldE5hbWUoKS5nZXRKYXZhTmFtZSgpLmlzWG1sT2JqZWN0KCkpCi0gICAgICAgICAgICAgICAgYWRkWG1sT2JqZWN0Rm9yKGJUeXBlLmdldE5hbWUoKS5nZXRYbWxOYW1lKCksIGJUeXBlLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYWRkUG9qb0ZvcihiVHlwZS5nZXROYW1lKCkuZ2V0WG1sTmFtZSgpLCBiVHlwZS5nZXROYW1lKCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChmcm9tSmF2YURlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChiVHlwZS5nZXROYW1lKCkuZ2V0WG1sTmFtZSgpLmdldENvbXBvbmVudFR5cGUoKSA9PSBYbWxOYW1lLkVMRU1FTlQpCi0gICAgICAgICAgICAgICAgYWRkRWxlbWVudEZvcihiVHlwZS5nZXROYW1lKCkuZ2V0SmF2YU5hbWUoKSwgYlR5cGUuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhZGRUeXBlRm9yKGJUeXBlLmdldE5hbWUoKS5nZXRKYXZhTmFtZSgpLCBiVHlwZS5nZXROYW1lKCkpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvYnRzL0JpbmRpbmdMb2FkZXIuamF2YSBiL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2J0cy9CaW5kaW5nTG9hZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNTBmODkuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvYnRzL0JpbmRpbmdMb2FkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0czsKLQotCi0vKioKLSAqIFJlcHJlc2VudHMgYSByZXNvdXJjZSBjYXBhYmxlIG9mIHByb3ZpZGluZyBCaW5kaW5nVHlwZXMsIGJhc2VkIG9uCi0gKiBYTUwgYW5kIEphdmEgY29tcG9uZW50IG5hbWVzLiAgSW1wbGVtZW50YXRpb25zIG9mIHRoaXMgaW50ZXJmYWNlCi0gKiBtYXkgbG9hZCBmcm9tIGZpbGVzLCBjbGFzc3BhdGhzLCBldGMuIAotICovCi1wdWJsaWMgaW50ZXJmYWNlIEJpbmRpbmdMb2FkZXIKLXsKLSAgICBCaW5kaW5nVHlwZSBnZXRCaW5kaW5nVHlwZShCaW5kaW5nVHlwZU5hbWUgYnROYW1lKTsKLQotICAgIEJpbmRpbmdUeXBlTmFtZSBsb29rdXBQb2pvRm9yKFhtbE5hbWUgeE5hbWUpOwotCi0gICAgQmluZGluZ1R5cGVOYW1lIGxvb2t1cFhtbE9iamVjdEZvcihYbWxOYW1lIHhOYW1lKTsKLQotICAgIEJpbmRpbmdUeXBlTmFtZSBsb29rdXBUeXBlRm9yKEphdmFOYW1lIGpOYW1lKTsKLQotICAgIEJpbmRpbmdUeXBlTmFtZSBsb29rdXBFbGVtZW50Rm9yKEphdmFOYW1lIGpOYW1lKTsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2J0cy9CaW5kaW5nUHJvcGVydHkuamF2YSBiL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2J0cy9CaW5kaW5nUHJvcGVydHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGUwZjFlYy4uMDAwMDAwMAotLS0gYS92Mi9zcmMvYmluZGluZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvYmluZGluZy9idHMvQmluZGluZ1Byb3BlcnR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjAgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotCi0vKioKLSAqIFJlcHJlc2VudHMgYSBwcm9wZXJ0eS4gIEV2ZXJ5IHByb3BlcnR5IGNvcnJlc3BvbmRzIHRvIGEKLSAqIEphdmEgZ2V0dGVyL3NldHRlciBvciBhIGZpZWxkLiAgT24gdGhlIFhNTCBzaWRlLCB0aGVyZQotICogYXJlIGRpZmZlcmVudCBmb3JtcyBvZiBwcm9wZXJ0aWVzLCBzb21lIHdoaWNoIGJpbmQgYmFzZWQKLSAqIG9uIHNlcXVlbmNpbmcsIGFuZCBvdGhlcnMgd2hpY2ggYmluZCBiYXNlZCBvbiBuYW1lLgotICovIAotcHVibGljIGFic3RyYWN0IGNsYXNzIEJpbmRpbmdQcm9wZXJ0eQotewotICAgIHByaXZhdGUgQmluZGluZ1R5cGVOYW1lIGJ0TmFtZTsKLSAgICBwcml2YXRlIFN0cmluZyBnZXR0ZXI7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgc2V0dGVyOwotICAgIHByaXZhdGUgU3RyaW5nIGZpZWxkOwotICAgIHByaXZhdGUgSmF2YU5hbWUgY29sbGVjdGlvbjsKLSAgICAKLSAgICAvKioKLSAgICAgKiBUaGlzIGtpbmQgb2YgY29uc3RydWN0b3IgaXMgdXNlZCB3aGVuIG1ha2luZyBhIG5ldyBvbmUgb3V0IG9mIHRoZSBibHVlLgotICAgICAqIAotICAgICAqIFN1YmNsYXNzZXMgc2hvdWxkIGNhbGwgc3VwZXIoLi4pIHdoZW4gZGVmaW5pbmcgY29uc3RydWN0b3JzIHRoYXQgaW5pdCBuZXcgQmluZGluZ1R5cGVzLgotICAgICAqLyAKLSAgICBwcm90ZWN0ZWQgQmluZGluZ1Byb3BlcnR5KCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIFRoaXMgY29uc3RydWN0b3IgbG9hZHMgYW4gaW5zdGFuY2UgZnJvbSBhbiBYTUwgZmlsZQotICAgICAqIAotICAgICAqIFN1YmNsYXNzZXMgc2hvdWxkIGhhdmUgY3RvcnMgb2YgdGhlIHNhbWUgc2lnbmF0dXJlIGFuZCBjYWxsIHN1cGVyKC4uKSBmaXJzdC4KLSAgICAgKi8gCi0gICAgcHJvdGVjdGVkIEJpbmRpbmdQcm9wZXJ0eShvcmcuYXBhY2hlLnhtbGJlYW5zLngyMDAzLngwOS5iaW5kaW5nQ29uZmlnLkJpbmRpbmdQcm9wZXJ0eSBub2RlKQotICAgIHsKLSAgICAgICAgdGhpcy5idE5hbWUgPSBCaW5kaW5nVHlwZU5hbWUuZm9yUGFpcigKLSAgICAgICAgICAgICAgICAgICAgICAgIEphdmFOYW1lLmZvclN0cmluZyhub2RlLmdldEphdmF0eXBlKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgWG1sTmFtZS5mb3JTdHJpbmcobm9kZS5nZXRYbWxjb21wb25lbnQoKSkpOwotICAgICAgICB0aGlzLmdldHRlciA9IG5vZGUuZ2V0R2V0dGVyKCk7Ci0gICAgICAgIHRoaXMuc2V0dGVyID0gbm9kZS5nZXRTZXR0ZXIoKTsKLSAgICAgICAgdGhpcy5maWVsZCA9IG5vZGUuZ2V0RmllbGQoKTsKLSAgICAgICAgU3RyaW5nIGNvbGxlY3Rpb24gPSBub2RlLmdldENvbGxlY3Rpb24oKTsKLSAgICAgICAgaWYgKGNvbGxlY3Rpb24gIT0gbnVsbCkKLSAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvbiA9IEphdmFOYW1lLmZvclN0cmluZyhjb2xsZWN0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYW4gaW5zdGFuY2UgYmFjayBvdXQgdG8gdGhlIHJlbGV2YW50IHBhcnQgb2YgdGhlIFhNTCBmaWxlLgotICAgICAqIAotICAgICAqIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIGFuZCBjYWxsIHN1cGVyLndyaXRlIGZpcnN0LgotICAgICAqLyAKLSAgICBwcm90ZWN0ZWQgb3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5CaW5kaW5nUHJvcGVydHkgd3JpdGUob3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5CaW5kaW5nUHJvcGVydHkgbm9kZSkKLSAgICB7Ci0gICAgICAgIG5vZGUgPSAob3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5CaW5kaW5nUHJvcGVydHkpbm9kZS5jaGFuZ2VUeXBlKGtpbmRzLnR5cGVGb3JDbGFzcyh0aGlzLmdldENsYXNzKCkpKTsKLSAgICAgICAgCi0gICAgICAgIG5vZGUuc2V0SmF2YXR5cGUoYnROYW1lLmdldEphdmFOYW1lKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgIG5vZGUuc2V0WG1sY29tcG9uZW50KGJ0TmFtZS5nZXRYbWxOYW1lKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgIGlmIChnZXRGaWVsZE5hbWUoKSAhPSBudWxsKQotICAgICAgICAgICAgbm9kZS5zZXRGaWVsZChnZXRGaWVsZE5hbWUoKSk7Ci0gICAgICAgIGlmIChnZXRHZXR0ZXJOYW1lKCkgIT0gbnVsbCkKLSAgICAgICAgICAgIG5vZGUuc2V0R2V0dGVyKGdldEdldHRlck5hbWUoKSk7Ci0gICAgICAgIGlmIChnZXRTZXR0ZXJOYW1lKCkgIT0gbnVsbCkKLSAgICAgICAgICAgIG5vZGUuc2V0U2V0dGVyKGdldFNldHRlck5hbWUoKSk7Ci0gICAgICAgIGlmIChnZXRDb2xsZWN0aW9uQ2xhc3MoKSAhPSBudWxsKQotICAgICAgICAgICAgbm9kZS5zZXRDb2xsZWN0aW9uKGdldENvbGxlY3Rpb25DbGFzcygpLnRvU3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gbm9kZTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGJvb2xlYW4gaXNGaWVsZCgpCi0gICAgewotICAgICAgICByZXR1cm4gZmllbGQgIT0gbnVsbDsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIEJpbmRpbmdUeXBlTmFtZSBnZXRUeXBlTmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYnROYW1lOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRCaW5kaW5nVHlwZShCaW5kaW5nVHlwZSBiVHlwZSkKLSAgICB7Ci0gICAgICAgIGJ0TmFtZSA9IGJUeXBlLmdldE5hbWUoKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIFN0cmluZyBnZXRHZXR0ZXJOYW1lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc0ZpZWxkKCkgPyBudWxsIDogZ2V0dGVyOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRHZXR0ZXJOYW1lKFN0cmluZyBnZXR0ZXIpCi0gICAgewotICAgICAgICB0aGlzLmdldHRlciA9IGdldHRlcjsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGJvb2xlYW4gaGFzU2V0dGVyKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAhaXNGaWVsZCgpICYmIHNldHRlciAhPSBudWxsOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgU3RyaW5nIGdldFNldHRlck5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzRmllbGQoKSA/IG51bGwgOiBzZXR0ZXI7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHNldFNldHRlck5hbWUoU3RyaW5nIHNldHRlcikKLSAgICB7Ci0gICAgICAgIHRoaXMuc2V0dGVyID0gc2V0dGVyOyAKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIFN0cmluZyBnZXRGaWVsZE5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZpZWxkOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRGaWVsZE5hbWUoU3RyaW5nIGZpZWxkKQotICAgIHsKLSAgICAgICAgdGhpcy5maWVsZCA9IGZpZWxkOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgSmF2YU5hbWUgZ2V0Q29sbGVjdGlvbkNsYXNzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb2xsZWN0aW9uOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRDb2xsZWN0aW9uQ2xhc3MoSmF2YU5hbWUgak5hbWUpCi0gICAgewotICAgICAgICBjb2xsZWN0aW9uID0gak5hbWU7Ci0gICAgfQotICAgIAotICAgIC8qIFJFR0lTVFJZIE9GIFNVQkNMQVNTRVMgKi8KLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBDbGFzc1tdIGN0b3JBcmdzID0gbmV3IENsYXNzW10ge29yZy5hcGFjaGUueG1sYmVhbnMueDIwMDMueDA5LmJpbmRpbmdDb25maWcuQmluZGluZ1Byb3BlcnR5LmNsYXNzfTsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIEJpbmRpbmdQcm9wZXJ0eSBmb3JOb2RlKG9yZy5hcGFjaGUueG1sYmVhbnMueDIwMDMueDA5LmJpbmRpbmdDb25maWcuQmluZGluZ1Byb3BlcnR5IG5vZGUpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgQ2xhc3MgY2xhenogPSBraW5kcy5jbGFzc0ZvclR5cGUobm9kZS5zY2hlbWFUeXBlKCkpOwotICAgICAgICAgICAgcmV0dXJuIChCaW5kaW5nUHJvcGVydHkpY2xhenouZ2V0Q29uc3RydWN0b3IoY3RvckFyZ3MpLm5ld0luc3RhbmNlKG5ldyBPYmplY3RbXSB7bm9kZX0pOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiluZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDYW5ub3QgbG9hZCBjbGFzcyBmb3IgIiArIG5vZGUuc2NoZW1hVHlwZSgpICsgIjogc2hvdWxkIGJlIHJlZ2lzdGVyZWQuIikuaW5pdENhdXNlKGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSBCaW5kaW5nRmlsZSwgd2hlbiBsb2FkaW5nIHVwIGJpbmRpbmd0eXBlcwotICAgICAqLwotICAgIHN0YXRpYyBLaW5kUmVnaXN0cnkga2luZHMgPSBuZXcgS2luZFJlZ2lzdHJ5KCk7Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ2xhc3NBbmRUeXBlKENsYXNzIGNsYXp6LCBTY2hlbWFUeXBlIHR5cGUpCi0gICAgewotICAgICAgICBpZiAoIUJpbmRpbmdQcm9wZXJ0eS5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKGNsYXp6KSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkNsYXNzZXMgbXVzdCBpbmhlcml0IGZyb20gQmluZGluZ1Byb3BlcnR5Iik7Ci0gICAgICAgIGlmICghb3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5CaW5kaW5nUHJvcGVydHkudHlwZS5pc0Fzc2lnbmFibGVGcm9tKHR5cGUpKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiU2NoZW1hIHR5cGVzIG11c3QgaW5oZXJpdCBmcm9tIGJpbmRpbmctcHJvcGVydHkiKTsKLSAgICAgICAga2luZHMucmVnaXN0ZXJDbGFzc0FuZFR5cGUoY2xhenosIHR5cGUpOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMKLSAgICB7Ci0gICAgICAgIHJlZ2lzdGVyQ2xhc3NBbmRUeXBlKFFOYW1lUHJvcGVydHkuY2xhc3MsIG9yZy5hcGFjaGUueG1sYmVhbnMueDIwMDMueDA5LmJpbmRpbmdDb25maWcuUW5hbWVQcm9wZXJ0eS50eXBlKTsKLSAgICAgICAgcmVnaXN0ZXJDbGFzc0FuZFR5cGUoUGFydGljbGVQcm9wZXJ0eS5jbGFzcywgb3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5QYXJ0aWNsZVByb3BlcnR5LnR5cGUpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2J0cy9CaW5kaW5nVHlwZS5qYXZhIGIvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvYnRzL0JpbmRpbmdUeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMTc3ZDIuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvYnRzL0JpbmRpbmdUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0czsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLQotLyoqCi0gKiBSZXByZXNlbnRzIGEgSmF2YStYTUwgY29tcG9uZW50IGFuZCBhIHJ1bGUgZm9yIGdldHRpbmcgYmV0d2VlbgotICogdGhlbS4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEJpbmRpbmdUeXBlCi17Ci0gICAgcHJpdmF0ZSBmaW5hbCBCaW5kaW5nVHlwZU5hbWUgYnROYW1lOwotCi0gICAgLyoqCi0gICAgICogVGhpcyBraW5kIG9mIGNvbnN0cnVjdG9yIGlzIHVzZWQgd2hlbiBtYWtpbmcgYSBuZXcgb25lIG91dCBvZiB0aGUgYmx1ZS4KLSAgICAgKgotICAgICAqIFN1YmNsYXNzZXMgc2hvdWxkIGNhbGwgc3VwZXIoLi4pIHdoZW4gZGVmaW5pbmcgY29uc3RydWN0b3JzIHRoYXQgaW5pdCBuZXcgQmluZGluZ1R5cGVzLgotICAgICAqLwotICAgIHByb3RlY3RlZCBCaW5kaW5nVHlwZShCaW5kaW5nVHlwZU5hbWUgYnROYW1lKQotICAgIHsKLSAgICAgICAgdGhpcy5idE5hbWUgPSBidE5hbWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhpcyBjb25zdHJ1Y3RvciBsb2FkcyBhbiBpbnN0YW5jZSBmcm9tIGFuIFhNTCBmaWxlCi0gICAgICoKLSAgICAgKiBTdWJjbGFzc2VzIHNob3VsZCBoYXZlIGN0b3JzIG9mIHRoZSBzYW1lIHNpZ25hdHVyZSBhbmQgY2FsbCBzdXBlciguLikgZmlyc3QuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIEJpbmRpbmdUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMueDIwMDMueDA5LmJpbmRpbmdDb25maWcuQmluZGluZ1R5cGUgbm9kZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuYnROYW1lID0gQmluZGluZ1R5cGVOYW1lLmZvclBhaXIoCi0gICAgICAgICAgICAgICAgSmF2YU5hbWUuZm9yU3RyaW5nKG5vZGUuZ2V0SmF2YXR5cGUoKSksCi0gICAgICAgICAgICAgICAgWG1sTmFtZS5mb3JTdHJpbmcobm9kZS5nZXRYbWxjb21wb25lbnQoKSkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGFuIGluc3RhbmNlIGJhY2sgb3V0IHRvIHRoZSByZWxldmFudCBwYXJ0IG9mIHRoZSBYTUwgZmlsZS4KLSAgICAgKgotICAgICAqIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIGFuZCBjYWxsIHN1cGVyLndyaXRlIGZpcnN0LgotICAgICAqLwotICAgIHByb3RlY3RlZCBvcmcuYXBhY2hlLnhtbGJlYW5zLngyMDAzLngwOS5iaW5kaW5nQ29uZmlnLkJpbmRpbmdUeXBlIHdyaXRlKG9yZy5hcGFjaGUueG1sYmVhbnMueDIwMDMueDA5LmJpbmRpbmdDb25maWcuQmluZGluZ1R5cGUgbm9kZSkKLSAgICB7Ci0gICAgICAgIG5vZGUgPSAob3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5CaW5kaW5nVHlwZSlub2RlLmNoYW5nZVR5cGUoa2luZHMudHlwZUZvckNsYXNzKHRoaXMuZ2V0Q2xhc3MoKSkpOwotICAgICAgICBub2RlLnNldEphdmF0eXBlKGJ0TmFtZS5nZXRKYXZhTmFtZSgpLnRvU3RyaW5nKCkpOwotICAgICAgICBub2RlLnNldFhtbGNvbXBvbmVudChidE5hbWUuZ2V0WG1sTmFtZSgpLnRvU3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gbm9kZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgQmluZGluZ1R5cGVOYW1lIGdldE5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJ0TmFtZTsKLSAgICB9Ci0KLSAgICAvKiBSRUdJU1RSWSBPRiBTVUJDTEFTU0VTICovCi0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBDbGFzc1tdIGN0b3JBcmdzID0gbmV3IENsYXNzW10ge29yZy5hcGFjaGUueG1sYmVhbnMueDIwMDMueDA5LmJpbmRpbmdDb25maWcuQmluZGluZ1R5cGUuY2xhc3N9OwotCi0gICAgcHVibGljIHN0YXRpYyBCaW5kaW5nVHlwZSBsb2FkRnJvbUJpbmRpbmdUeXBlTm9kZShvcmcuYXBhY2hlLnhtbGJlYW5zLngyMDAzLngwOS5iaW5kaW5nQ29uZmlnLkJpbmRpbmdUeXBlIG5vZGUpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgQ2xhc3MgY2xhenogPSBraW5kcy5jbGFzc0ZvclR5cGUobm9kZS5zY2hlbWFUeXBlKCkpOwotICAgICAgICAgICAgcmV0dXJuIChCaW5kaW5nVHlwZSljbGF6ei5nZXRDb25zdHJ1Y3RvcihjdG9yQXJncykubmV3SW5zdGFuY2UobmV3IE9iamVjdFtdIHtub2RlfSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uKW5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNhbm5vdCBsb2FkIGNsYXNzIGZvciAiICsgbm9kZS5zY2hlbWFUeXBlKCkgKyAiOiBzaG91bGQgYmUgcmVnaXN0ZXJlZC4iKS5pbml0Q2F1c2UoZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTaG91bGQgb25seSBiZSBjYWxsZWQgYnkgQmluZGluZ0ZpbGUsIHdoZW4gbG9hZGluZyB1cCBiaW5kaW5ndHlwZXMKLSAgICAgKi8KLSAgICBzdGF0aWMgS2luZFJlZ2lzdHJ5IGtpbmRzID0gbmV3IEtpbmRSZWdpc3RyeSgpOwotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQ2xhc3NBbmRUeXBlKENsYXNzIGNsYXp6LCBTY2hlbWFUeXBlIHR5cGUpCi0gICAgewotICAgICAgICBpZiAoIUJpbmRpbmdUeXBlLmNsYXNzLmlzQXNzaWduYWJsZUZyb20oY2xhenopKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ2xhc3NlcyBtdXN0IGluaGVyaXQgZnJvbSBCaW5kaW5nVHlwZSIpOwotICAgICAgICBpZiAoIW9yZy5hcGFjaGUueG1sYmVhbnMueDIwMDMueDA5LmJpbmRpbmdDb25maWcuQmluZGluZ1R5cGUudHlwZS5pc0Fzc2lnbmFibGVGcm9tKHR5cGUpKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiU2NoZW1hIHR5cGVzIG11c3QgaW5oZXJpdCBmcm9tIGJpbmRpbmctdHlwZSIpOwotICAgICAgICBraW5kcy5yZWdpc3RlckNsYXNzQW5kVHlwZShjbGF6eiwgdHlwZSk7Ci0gICAgfQotCi0gICAgc3RhdGljCi0gICAgewotICAgICAgICByZWdpc3RlckNsYXNzQW5kVHlwZShKYXhiQmVhbi5jbGFzcywgb3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5KYXhiQmVhbi50eXBlKTsKLSAgICAgICAgcmVnaXN0ZXJDbGFzc0FuZFR5cGUoQnlOYW1lQmVhbi5jbGFzcywgb3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5CeU5hbWVCZWFuLnR5cGUpOwotICAgICAgICByZWdpc3RlckNsYXNzQW5kVHlwZShTaW1wbGVCaW5kaW5nVHlwZS5jbGFzcywgb3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5TaW1wbGVUeXBlLnR5cGUpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvYnRzL0JpbmRpbmdUeXBlTmFtZS5qYXZhIGIvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvYnRzL0JpbmRpbmdUeXBlTmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmM5YTUwLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2J0cy9CaW5kaW5nVHlwZU5hbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHM7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBCaW5kaW5nVHlwZU5hbWUKLXsKLSAgICBwcml2YXRlIGZpbmFsIEphdmFOYW1lIGpOYW1lOwotICAgIHByaXZhdGUgZmluYWwgWG1sTmFtZSB4TmFtZTsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIEJpbmRpbmdUeXBlTmFtZSBmb3JQYWlyKEphdmFOYW1lIGpOYW1lLCBYbWxOYW1lIHhOYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBCaW5kaW5nVHlwZU5hbWUoak5hbWUsIHhOYW1lKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIEJpbmRpbmdUeXBlTmFtZShKYXZhTmFtZSBqTmFtZSwgWG1sTmFtZSB4TmFtZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuak5hbWUgPSBqTmFtZTsKLSAgICAgICAgdGhpcy54TmFtZSA9IHhOYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyBKYXZhTmFtZSBnZXRKYXZhTmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gak5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIFhtbE5hbWUgZ2V0WG1sTmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4geE5hbWU7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzID09IG8pIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIShvIGluc3RhbmNlb2YgQmluZGluZ1R5cGVOYW1lKSkgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGZpbmFsIEJpbmRpbmdUeXBlTmFtZSBiaW5kaW5nVHlwZU5hbWUgPSAoQmluZGluZ1R5cGVOYW1lKSBvOwotCi0gICAgICAgIGlmICghak5hbWUuZXF1YWxzKGJpbmRpbmdUeXBlTmFtZS5qTmFtZSkpIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCF4TmFtZS5lcXVhbHMoYmluZGluZ1R5cGVOYW1lLnhOYW1lKSkgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKQotICAgIHsKLSAgICAgICAgaW50IHJlc3VsdDsKLSAgICAgICAgcmVzdWx0ID0gak5hbWUuaGFzaENvZGUoKTsKLSAgICAgICAgcmVzdWx0ID0gMjkgKiByZXN1bHQgKyB4TmFtZS5oYXNoQ29kZSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2J0cy9CdWlsdGluQmluZGluZ0xvYWRlci5qYXZhIGIvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvYnRzL0J1aWx0aW5CaW5kaW5nTG9hZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyMmUyYjMuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvYnRzL0J1aWx0aW5CaW5kaW5nTG9hZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0czsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0cy5CaW5kaW5nVHlwZTsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLS8qKgotICogUmVwcmVzZW50cyBidWlsdGluIGJpbmRpbmdzLiAKLSAqLyAKLXB1YmxpYyBjbGFzcyBCdWlsdGluQmluZGluZ0xvYWRlciBleHRlbmRzIEJhc2VCaW5kaW5nTG9hZGVyCi17Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHhzbnMgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOwotCi0gICAgcHVibGljIHN0YXRpYyBCaW5kaW5nTG9hZGVyIGdldEluc3RhbmNlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBJTlNUQU5DRTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBCdWlsdGluQmluZGluZ0xvYWRlciBJTlNUQU5DRSA9IG5ldyBCdWlsdGluQmluZGluZ0xvYWRlcigpOwotICAgIAotICAgIHByaXZhdGUgdm9pZCBhZGRNYXBwaW5nKFN0cmluZyB4bWxUeXBlLCBTdHJpbmcgamF2YU5hbWUsIGJvb2xlYW4gZnJvbUphdmFEZWZhdWx0LCBib29sZWFuIGZyb21YbWxEZWZhdWx0KQotICAgIHsKLSAgICAgICAgWG1sTmFtZSB4biA9IFhtbE5hbWUuZm9yVHlwZU5hbWVkKG5ldyBRTmFtZSh4c25zLCB4bWxUeXBlKSk7Ci0gICAgICAgIEphdmFOYW1lIGpuID0gSmF2YU5hbWUuZm9yU3RyaW5nKGphdmFOYW1lKTsKLSAgICAgICAgQmluZGluZ1R5cGVOYW1lIGJ0TmFtZSA9IEJpbmRpbmdUeXBlTmFtZS5mb3JQYWlyKGpuLCB4bik7Ci0gICAgICAgIEJpbmRpbmdUeXBlIGJUeXBlID0gbmV3IEJ1aWx0aW5CaW5kaW5nVHlwZShidE5hbWUpOwotICAgICAgICAKLSAgICAgICAgYWRkQmluZGluZ1R5cGUoYlR5cGUpOwotICAgICAgICBpZiAoZnJvbUphdmFEZWZhdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYlR5cGUuZ2V0TmFtZSgpLmdldFhtbE5hbWUoKS5nZXRDb21wb25lbnRUeXBlKCkgPT0gWG1sTmFtZS5FTEVNRU5UKQotICAgICAgICAgICAgICAgIGFkZEVsZW1lbnRGb3IoYlR5cGUuZ2V0TmFtZSgpLmdldEphdmFOYW1lKCksIGJUeXBlLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYWRkVHlwZUZvcihiVHlwZS5nZXROYW1lKCkuZ2V0SmF2YU5hbWUoKSwgYlR5cGUuZ2V0TmFtZSgpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZnJvbVhtbERlZmF1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChiVHlwZS5nZXROYW1lKCkuZ2V0SmF2YU5hbWUoKS5pc1htbE9iamVjdCgpKQotICAgICAgICAgICAgICAgIGFkZFhtbE9iamVjdEZvcihiVHlwZS5nZXROYW1lKCkuZ2V0WG1sTmFtZSgpLCBiVHlwZS5nZXROYW1lKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGFkZFBvam9Gb3IoYlR5cGUuZ2V0TmFtZSgpLmdldFhtbE5hbWUoKSwgYlR5cGUuZ2V0TmFtZSgpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgYWRkUG9qb1R3b1dheShTdHJpbmcgeG1sVHlwZSwgU3RyaW5nIGphdmFOYW1lKQotICAgIHsKLSAgICAgICAgYWRkTWFwcGluZyh4bWxUeXBlLCBqYXZhTmFtZSwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGFkZFBvam9YbWwoU3RyaW5nIHhtbFR5cGUsIFN0cmluZyBqYXZhTmFtZSkKLSAgICB7Ci0gICAgICAgIGFkZE1hcHBpbmcoeG1sVHlwZSwgamF2YU5hbWUsIGZhbHNlLCB0cnVlKTsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIGFkZFBvam9KYXZhKFN0cmluZyB4bWxUeXBlLCBTdHJpbmcgamF2YU5hbWUpCi0gICAgewotICAgICAgICBhZGRNYXBwaW5nKHhtbFR5cGUsIGphdmFOYW1lLCB0cnVlLCBmYWxzZSk7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBhZGRQb2pvKFN0cmluZyB4bWxUeXBlLCBTdHJpbmcgamF2YU5hbWUpCi0gICAgewotICAgICAgICBhZGRNYXBwaW5nKHhtbFR5cGUsIGphdmFOYW1lLCB0cnVlLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBCdWlsdGluQmluZGluZ0xvYWRlcigpCi0gICAgewotICAgICAgICAvLyB0b2RvOiBzaG91bGQgZWFjaCBidWlsdGluIGJpbmRpbmcgdHlwZSBrbm93IGFib3V0IGl0J3MgcHJpbnQvcGFyc2UgbWV0aG9kcz8KLSAgICAgICAgCi0gICAgICAgIGFkZFBvam9YbWwoImFueVNpbXBsZVR5cGUiLCAiamF2YS5sYW5nLlN0cmluZyIpOwotICAgICAgICAKLSAgICAgICAgYWRkUG9qb1R3b1dheSgic3RyaW5nIiwgImphdmEubGFuZy5TdHJpbmciKTsKLSAgICAgICAgYWRkUG9qb1htbCgibm9ybWFsaXplZFN0cmluZyIsICJqYXZhLmxhbmcuU3RyaW5nIik7Ci0gICAgICAgIGFkZFBvam9YbWwoInRva2VuIiwgImphdmEubGFuZy5TdHJpbmciKTsKLSAgICAgICAgYWRkUG9qb1htbCgibGFuZ3VhZ2UiLCAiamF2YS5sYW5nLlN0cmluZyIpOwotICAgICAgICBhZGRQb2pvWG1sKCJOYW1lIiwgImphdmEubGFuZy5TdHJpbmciKTsKLSAgICAgICAgYWRkUG9qb1htbCgiTkNOYW1lIiwgImphdmEubGFuZy5TdHJpbmciKTsKLSAgICAgICAgYWRkUG9qb1htbCgiTk1UT0tFTiIsICJqYXZhLmxhbmcuU3RyaW5nIik7Ci0gICAgICAgIGFkZFBvam9YbWwoIklEIiwgImphdmEubGFuZy5TdHJpbmciKTsKLSAgICAgICAgYWRkUG9qb1htbCgiSURSRUYiLCAiamF2YS5sYW5nLlN0cmluZyIpOwotICAgICAgICBhZGRQb2pvWG1sKCJFTlRJVFkiLCAiamF2YS5sYW5nLlN0cmluZyIpOwotICAgICAgICAKLSAgICAgICAgYWRkUG9qb1R3b1dheSgiZHVyYXRpb24iLCAib3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb24iKTsKLSAgICAgICAgCi0gICAgICAgIGFkZFBvam9Ud29XYXkoImRhdGVUaW1lIiwgImphdmEudXRpbC5DYWxlbmRhciIpOwotICAgICAgICBhZGRQb2pvSmF2YSgiZGF0ZVRpbWUiLCAiamF2YS51dGlsLkRhdGUiKTsKLSAgICAgICAgYWRkUG9qb1htbCgidGltZSIsICJqYXZhLnV0aWwuQ2FsZW5kYXIiKTsKLSAgICAgICAgYWRkUG9qb1htbCgiZGF0ZSIsICJqYXZhLnV0aWwuQ2FsZW5kYXIiKTsKLSAgICAgICAgYWRkUG9qbygiZGF0ZSIsICJqYXZhLnV0aWwuRGF0ZSIpOwotICAgICAgICBhZGRQb2pvWG1sKCJnWWVhck1vbnRoIiwgImphdmEudXRpbC5DYWxlbmRhciIpOwotICAgICAgICBhZGRQb2pvWG1sKCJnWWVhciIsICJqYXZhLnV0aWwuQ2FsZW5kYXIiKTsKLSAgICAgICAgYWRkUG9qbygiZ1llYXIiLCAiaW50Iik7Ci0gICAgICAgIGFkZFBvam9YbWwoImdNb250aERheSIsICJqYXZhLnV0aWwuQ2FsZW5kYXIiKTsKLSAgICAgICAgYWRkUG9qb1htbCgiZ01vbnRoIiwgImphdmEudXRpbC5DYWxlbmRhciIpOwotICAgICAgICBhZGRQb2pvKCJnTW9udGgiLCAiaW50Iik7Ci0gICAgICAgIGFkZFBvam9YbWwoImdEYXkiLCAiamF2YS51dGlsLkNhbGVuZGFyIik7Ci0gICAgICAgIGFkZFBvam8oImdEYXkiLCAiaW50Iik7Ci0KLSAgICAgICAgYWRkUG9qb1R3b1dheSgiYm9vbGVhbiIsICJib29sZWFuIik7Ci0gICAgICAgIGFkZFBvam9Ud29XYXkoImJhc2U2NEJpbmFyeSIsICJieXRlW10iKTsKLSAgICAgICAgYWRkUG9qb0phdmEoImJhc2U2NEJpbmFyeSIsICJqYXZhLmlvLklucHV0U3RyZWFtIik7Ci0gICAgICAgIGFkZFBvam9YbWwoImhleEJpbmFyeSIsICJieXRlW10iKTsKLSAgICAgICAgYWRkUG9qbygiaGV4QmluYXJ5IiwgImphdmEuaW8uSW5wdXRTdHJlYW0iKTsKLSAgICAgICAgYWRkUG9qb1R3b1dheSgiZmxvYXQiLCAiZmxvYXQiKTsKLSAgICAgICAgYWRkUG9qb1R3b1dheSgiZG91YmxlIiwgImRvdWJsZSIpOwotICAgICAgICBhZGRQb2pvVHdvV2F5KCJkZWNpbWFsIiwgImphdmEubWF0aC5CaWdEZWNpbWFsIik7Ci0gICAgICAgIGFkZFBvam9Ud29XYXkoImludGVnZXIiLCAiamF2YS5tYXRoLkJpZ0ludGVnZXIiKTsKLSAgICAgICAgYWRkUG9qb1R3b1dheSgibG9uZyIsICJsb25nIik7Ci0gICAgICAgIGFkZFBvam9Ud29XYXkoImludCIsICJpbnQiKTsKLSAgICAgICAgYWRkUG9qb1R3b1dheSgic2hvcnQiLCAic2hvcnQiKTsKLSAgICAgICAgYWRkUG9qb1R3b1dheSgiYnl0ZSIsICJieXRlIik7Ci0gICAgICAgIGFkZFBvam9YbWwoIm5vblBvc2l0aXZlSW50ZWdlciIsICJqYXZhLm1hdGguQmlnSW50ZWdlciIpOwotICAgICAgICBhZGRQb2pvWG1sKCJuZWdhdGl2ZUludGVnZXIiLCAiamF2YS5tYXRoLkJpZ0ludGVnZXIiKTsKLSAgICAgICAgYWRkUG9qb1htbCgibm9uTmVnYXRpdmVJbnRlZ2VyIiwgImphdmEubWF0aC5CaWdJbnRlZ2VyIik7Ci0gICAgICAgIGFkZFBvam9YbWwoInBvc2l0aXZlSW50ZWdlciIsICJqYXZhLm1hdGguQmlnSW50ZWdlciIpOwotICAgICAgICBhZGRQb2pvWG1sKCJ1bnNpZ25lZExvbmciLCAiamF2YS5tYXRoLkJpZ0ludGVnZXIiKTsKLSAgICAgICAgYWRkUG9qb1htbCgidW5zaWduZWRJbnQiLCAibG9uZyIpOwotICAgICAgICBhZGRQb2pvWG1sKCJ1bnNpZ25lZFNob3J0IiwgImludCIpOwotICAgICAgICBhZGRQb2pvWG1sKCJ1bnNpZ25lZEJ5dGUiLCAic2hvcnQiKTsKLSAgICAgICAgYWRkUG9qb1htbCgiYW55VVJJIiwgImphdmEubGFuZy5TdHJpbmciKTsKLSAgICAgICAgYWRkUG9qb0phdmEoImFueVVSSSIsICJqYXZhLm5ldC5VUkkiKTsKLSAgICAgICAgYWRkUG9qb1R3b1dheSgiUU5hbWUiLCAiamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSIpOwotICAgICAgICBhZGRQb2pvWG1sKCJOT1RBVElPTiIsICJqYXZhLmxhbmcuU3RyaW5nIik7Ci0KLSAgICAgICAgYWRkUG9qb0phdmEoImZsb2F0IiwgRmxvYXQuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgYWRkUG9qb0phdmEoImRvdWJsZSIsIERvdWJsZS5jbGFzcy5nZXROYW1lKCkpOwotICAgICAgICBhZGRQb2pvSmF2YSgibG9uZyIsIExvbmcuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgYWRkUG9qb0phdmEoImludCIsIEludGVnZXIuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgYWRkUG9qb0phdmEoInNob3J0IiwgU2hvcnQuY2xhc3MuZ2V0TmFtZSgpKTsKLSAgICAgICAgYWRkUG9qb0phdmEoImJ5dGUiLCBCeXRlLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgICAgIC8vVE9ETzogZGVhbCB3aXRoIGNoYXIgYW5kIGphdmEubGFuZy5DaGFyYWN0ZXIKLQotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvYnRzL0J1aWx0aW5CaW5kaW5nVHlwZS5qYXZhIGIvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvYnRzL0J1aWx0aW5CaW5kaW5nVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTczODg5Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2J0cy9CdWlsdGluQmluZGluZ1R5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHMuQmluZGluZ1R5cGU7Ci0KLS8qKgotICogQSAiYnVpbHRpbiIgYmluZGluZyB0eXBlIGlzIG9uZSB0aGF0IGRvZXNuJ3QgZXhwbGljaXRseSBzcGVjaWZ5Ci0gKiBob3cgdGhlIGNvbnZlcnNpb24gd29ya3MgYmVjYXVzZSBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIHJ1bnRpbWUKLSAqIGhhcyBidWlsdGluIGtub3dsZWRnZSBvZiBob3cgdG8gbWFrZSBpdCBoYXBwZW4uICBJbnN0YW5jZXMgc2hvdWxkCi0gKiBvbmx5IGJlIGNyZWF0ZWQgYnkgQnVpbHRpbkJpbmRpbmdMb2FkZXIuCi0gKi8gCi1wdWJsaWMgY2xhc3MgQnVpbHRpbkJpbmRpbmdUeXBlIGV4dGVuZHMgQmluZGluZ1R5cGUKLXsKLSAgICAvLyBub3RlOiBvbmx5IHRoaXMgb25lIGNvbnN0cnVjdG9yOyBidWlsdGluIGJpbmRpbmcgdHlwZXMgY2FuJ3QgYmUgbG9hZGVkCi0gICAgcHVibGljIEJ1aWx0aW5CaW5kaW5nVHlwZShCaW5kaW5nVHlwZU5hbWUgYnROYW1lKQotICAgIHsKLSAgICAgICAgc3VwZXIoYnROYW1lKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvYmluZGluZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvYmluZGluZy9idHMvQnlOYW1lQmVhbi5qYXZhIGIvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvYnRzL0J5TmFtZUJlYW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRjZDE1NS4uMDAwMDAwMAotLS0gYS92Mi9zcmMvYmluZGluZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvYmluZGluZy9idHMvQnlOYW1lQmVhbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHMuQmluZGluZ1Byb3BlcnR5OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0cy5CaW5kaW5nVHlwZTsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLS8qKgotICogQSBieS1uYW1lIGJpbmRpbmcgaXMgb25lIHRoYXQgY29ubmVjdHMgWE1MIGFuZCBKYXZhIGJhc2VkIG9uIHRoZQotICogUU5hbWVzIG9mIFhNTCBlbGVtZW50cyBhbmQgYXR0cmlidXRlcywgcmF0aGVyIHRoYW4gYnkgc2VxdWVuY2luZwotICogb3IgcGFydGljbGUgdHJlZXMuCi0gKi8gCi1wdWJsaWMgY2xhc3MgQnlOYW1lQmVhbiBleHRlbmRzIEJpbmRpbmdUeXBlCi17Ci0gICAgTGlzdCBwcm9wcyA9IG5ldyBBcnJheUxpc3QoKTsgLy8gb2YgUU5hbWVQcm9wZXJ0aWVzCi0gICAgTWFwIGVsdFByb3BzID0gbmV3IEhhc2hNYXAoKTsgLy8gUU5hbWUgLT4gcHJvcCAoZWx0cykKLSAgICBNYXAgYXR0UHJvcHMgPSBuZXcgSGFzaE1hcCgpOyAvLyBRTmFtZSAtPiBwcm9wIChhdHRycykKLSAgICAKLSAgICBwdWJsaWMgQnlOYW1lQmVhbihCaW5kaW5nVHlwZU5hbWUgYnROYW1lKQotICAgIHsKLSAgICAgICAgc3VwZXIoYnROYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQnlOYW1lQmVhbihvcmcuYXBhY2hlLnhtbGJlYW5zLngyMDAzLngwOS5iaW5kaW5nQ29uZmlnLkJpbmRpbmdUeXBlIG5vZGUpCi0gICAgewotICAgICAgICBzdXBlcihub2RlKTsKLSAgICAgICAgCi0gICAgICAgIG9yZy5hcGFjaGUueG1sYmVhbnMueDIwMDMueDA5LmJpbmRpbmdDb25maWcuUW5hbWVQcm9wZXJ0eVtdIHByb3BBcnJheSA9Ci0gICAgICAgICAgICgob3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5CeU5hbWVCZWFuKW5vZGUpLmdldFFuYW1lUHJvcGVydHlBcnJheSgpOwotICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9wQXJyYXkubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KChRTmFtZVByb3BlcnR5KUJpbmRpbmdQcm9wZXJ0eS5mb3JOb2RlKHByb3BBcnJheVtpXSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGFuIGluc3RhbmNlIGJhY2sgb3V0IHRvIHRoZSByZWxldmFudCBwYXJ0IG9mIHRoZSBYTUwgZmlsZS4KLSAgICAgKiAKLSAgICAgKiBTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBhbmQgY2FsbCBzdXBlci53cml0ZSBmaXJzdC4KLSAgICAgKi8gCi0gICAgcHJvdGVjdGVkIG9yZy5hcGFjaGUueG1sYmVhbnMueDIwMDMueDA5LmJpbmRpbmdDb25maWcuQmluZGluZ1R5cGUgd3JpdGUob3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5CaW5kaW5nVHlwZSBub2RlKQotICAgIHsKLSAgICAgICAgb3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5CeU5hbWVCZWFuIGJuTm9kZSA9IChvcmcuYXBhY2hlLnhtbGJlYW5zLngyMDAzLngwOS5iaW5kaW5nQ29uZmlnLkJ5TmFtZUJlYW4pc3VwZXIud3JpdGUobm9kZSk7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IHByb3BzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFFOYW1lUHJvcGVydHkgcVByb3AgPSAoUU5hbWVQcm9wZXJ0eSlpLm5leHQoKTsKLSAgICAgICAgICAgIG9yZy5hcGFjaGUueG1sYmVhbnMueDIwMDMueDA5LmJpbmRpbmdDb25maWcuUW5hbWVQcm9wZXJ0eSBxcE5vZGUgPSBibk5vZGUuYWRkTmV3UW5hbWVQcm9wZXJ0eSgpOwotICAgICAgICAgICAgcVByb3Aud3JpdGUocXBOb2RlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYm5Ob2RlOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGFuIHVubW9kaWZpYWJsZSBjb2xsZWN0aW9uIG9mIFFOYW1lUHJvcGVydHkgb2JqZWN0cy4KLSAgICAgKi8gCi0gICAgcHVibGljIENvbGxlY3Rpb24gZ2V0UHJvcGVydGllcygpCi0gICAgewotICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlQ29sbGVjdGlvbihwcm9wcyk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIExvb2tzIHVwIGEgcHJvcGVydHkgYnkgYXR0cmlidXRlIG5hbWUsIG51bGwgaWYgbm8gbWF0Y2guCi0gICAgICovIAotICAgIHB1YmxpYyBRTmFtZVByb3BlcnR5IGdldFByb3BlcnR5Rm9yQXR0cmlidXRlKFFOYW1lIG5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gKFFOYW1lUHJvcGVydHkpYXR0UHJvcHMuZ2V0KG5hbWUpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBMb29rcyB1cCBhIHByb3BlcnR5IGJ5IGVsZW1lbnQgbmFtZSwgbnVsbCBpZiBubyBtYXRjaC4KLSAgICAgKi8gCi0gICAgcHVibGljIFFOYW1lUHJvcGVydHkgZ2V0UHJvcGVydHlGb3JFbGVtZW50KFFOYW1lIG5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gKFFOYW1lUHJvcGVydHkpZWx0UHJvcHMuZ2V0KG5hbWUpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBBZGRzIGEgbmV3IHByb3BlcnR5Ci0gICAgICovCi0gICAgcHVibGljIHZvaWQgYWRkUHJvcGVydHkoUU5hbWVQcm9wZXJ0eSBuZXdQcm9wKQotICAgIHsKLSAgICAgICAgaWYgKG5ld1Byb3AuaXNBdHRyaWJ1dGUoKSA/IGF0dFByb3BzLmNvbnRhaW5zS2V5KG5ld1Byb3AuZ2V0UU5hbWUoKSkgOiBlbHRQcm9wcy5jb250YWluc0tleShuZXdQcm9wLmdldFFOYW1lKCkpKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOwotICAgICAgICAKLSAgICAgICAgcHJvcHMuYWRkKG5ld1Byb3ApOwotICAgICAgICBpZiAobmV3UHJvcC5pc0F0dHJpYnV0ZSgpKQotICAgICAgICAgICAgYXR0UHJvcHMucHV0KG5ld1Byb3AuZ2V0UU5hbWUoKSwgbmV3UHJvcCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVsdFByb3BzLnB1dChuZXdQcm9wLmdldFFOYW1lKCksIG5ld1Byb3ApOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2J0cy9KYXZhTmFtZS5qYXZhIGIvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvYnRzL0phdmFOYW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5MzQ4ZWMuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvYnRzL0phdmFOYW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzQgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHM7Ci0KLS8qKgotICogUmVwcmVzZW50cyBhIEphdmEgY2xhc3MgbmFtZSwgYW5kIHByb3ZpZGVzIHNvbWUgdXRpbGl0eSBtZXRob2RzCi0gKiBmb3IgcGFyc2luZyBvdXQgYml0cyBvZiB0aGUgbmFtZS4KLSAqIAotICogRXhhbXBsZXM6Ci0gKiAKLSAqICJpbnRbXSIKLSAqICJqYXZhLmxhbmcuU3RyaW5nIgotICogImNvbS5teWNvLk15Q2xhc3MkTXlJbm5lckNsYXNzJElubmVySW5uZXJDbGFzc1tdW10iCi0gKiAKLSAqIFRoZSBjbGFzc25hbWUgaXMgcHJlY2VkZWQgYnkgYW4gIng9IiBpZiBpdCBpcyBhbiBYbWxPYmplY3QKLSAqIHN1YmNsYXNzLCBpLmUuLCBpZiBpdCdzIGFuIFhtbEJlYW5zLXN0eWxlIGNsYXNzLCBmb3IgZXhhbXBsZToKLSAqIAotICogIng9b3JnLmFwYWNoZS54bWxiZWFucy5YbWxJbnQiCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBKYXZhTmFtZQotewotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIGNsYXNzTmFtZTsKLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBhcnJheVN0cmluZzsKLSAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gaXNYbWxPYmplY3Q7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgSmF2YU5hbWUgb2JqZWN0IGZvciBhIGZ1bGx5LXF1YWxpZmllZCBjbGFzcyBuYW1lLgotICAgICAqIFRoZSBjbGFzcy1uYW1lIHNob3VsZCBiZSBkb3Qtc2VwYXJhdGVkIGZvciBwYWNrYWdlcyBhbmQKLSAgICAgKiBkb2xsYXItc2VwYXJhdGVkIGZvciBpbm5lciBjbGFzc2VzLgotICAgICAqIAotICAgICAqIFRoZSBuYW1lcyAiaW50IiwgImJ5dGUiIGV0YyBhcmUgY29uc2lkZXJlZCBzcGVjaWFsLgotICAgICAqIEFycmF5cyBhcmUgZGVhbHQgd2l0aCBhcyBbXVtdW10gYXQgdGhlIGVuZC4KLSAgICAgKiAKLSAgICAgKiBUaGlzIGlzIGEgc3RhdGljIGZ1bmN0aW9uIHRvIHBlcm1pdCBwb29saW5nIGluIHRoZSBmdXR1cmUuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBKYXZhTmFtZSBmb3JTdHJpbmcoU3RyaW5nIGNsYXNzTmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgSmF2YU5hbWUoY2xhc3NOYW1lKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQnVpbGRzIGEgSmF2YU5hbWUgZm9yIHRoZSBhcnJheSBjb250YWluaW5nIGl0ZW1zIHdpdGgKLSAgICAgKiB0aGUgZ2l2ZW4gSmF2YU5hbWUuCi0gICAgICovIAotICAgIHB1YmxpYyBzdGF0aWMgSmF2YU5hbWUgZm9yQXJyYXkoSmF2YU5hbWUgaXRlbVR5cGUsIGludCBkZXB0aCkKLSAgICB7Ci0gICAgICAgIC8vIGVmZmljaWVuY3kgbGF0ZXIKLSAgICAgICAgU3RyaW5nIGFycmF5QnJhY2tldHMgPSAiIjsKLSAgICAgICAgd2hpbGUgKGRlcHRoLS0gPiAwKQotICAgICAgICAgICAgYXJyYXlCcmFja2V0cyArPSAiW10iOwotICAgICAgICByZXR1cm4gZm9yU3RyaW5nKGl0ZW1UeXBlLnRvU3RyaW5nKCkgKyBhcnJheUJyYWNrZXRzKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogRG8gbm90IHVzZSB0aGlzIGNvbnN0cnVjdG9yOyB1c2UgZm9yQ2xhc3NOYW1lIGluc3RlYWQuCi0gICAgICovIAotICAgIHByaXZhdGUgSmF2YU5hbWUoU3RyaW5nIGNsYXNzTmFtZSkKLSAgICB7Ci0gICAgICAgIGlmIChjbGFzc05hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjbGFzc05hbWUuc3RhcnRzV2l0aCgieD0iKSkKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5pc1htbE9iamVjdCA9IHRydWU7Ci0gICAgICAgICAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUuc3Vic3RyaW5nKDIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5pc1htbE9iamVjdCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpbnQgYXJyYXlEZXB0aCA9IDA7Ci0gICAgICAgIGZvciAoaW50IGkgPSBjbGFzc05hbWUubGVuZ3RoKCkgLSAyOyBpID49IDA7IGkgLT0gMikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGNsYXNzTmFtZS5jaGFyQXQoaSkgIT0gJ1snIHx8IGNsYXNzTmFtZS5jaGFyQXQoaSArIDEpICE9ICddJykKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGFycmF5RGVwdGggKz0gMTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZS5zdWJzdHJpbmcoMCwgY2xhc3NOYW1lLmxlbmd0aCgpIC0gMiAqIGFycmF5RGVwdGgpOwotICAgICAgICB0aGlzLmFycmF5U3RyaW5nID0gY2xhc3NOYW1lLnN1YnN0cmluZyhjbGFzc05hbWUubGVuZ3RoKCkgLSAyICogYXJyYXlEZXB0aCk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGZ1bGx5LXF1YWxpZmllZCBjbGFzcyBuYW1lLgotICAgICAqLyAKLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIGlmIChpc1htbE9iamVjdCkKLSAgICAgICAgICAgIHJldHVybiAieD0iICsgY2xhc3NOYW1lICsgYXJyYXlTdHJpbmc7Ci0gICAgICAgIHJldHVybiBjbGFzc05hbWUgKyBhcnJheVN0cmluZzsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogVHJ1ZSBmb3IgY2xhc3NuYW1lcyB0aGF0IGFyZSBYbWxPYmplY3RzLgotICAgICAqLyAKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1htbE9iamVjdCgpCi0gICAgewotICAgICAgICByZXR1cm4gaXNYbWxPYmplY3Q7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGFycmF5IGRlcHRoLCAwIGZvciBub24tYXJyYXlzLCAxIGZvciBbXSwgMiBmb3IgW11bXSwgZXRjLgotICAgICAqLyAKLSAgICBwdWJsaWMgaW50IGdldEFycmF5RGVwdGgoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFycmF5U3RyaW5nLmxlbmd0aCgpIC8gMjsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgYXJyYXkgaXRlbSB0eXBlIChwZWVsaW5nIG9mZiAibiIgYXJyYXkgaW5kZXhlcykKLSAgICAgKi8KLSAgICBwdWJsaWMgSmF2YU5hbWUgZ2V0QXJyYXlJdGVtVHlwZShpbnQgZGVwdGgpCi0gICAgewotICAgICAgICBpZiAoYXJyYXlTdHJpbmcubGVuZ3RoKCkgPCBkZXB0aCAqIDIpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgcmV0dXJuIGZvclN0cmluZyhjbGFzc05hbWUgKyBhcnJheVN0cmluZy5zdWJzdHJpbmcoMCwgYXJyYXlTdHJpbmcubGVuZ3RoKCkgLSAyICogZGVwdGgpKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgZG90LXNlcGFyYXRlZCBwYWNrYWdlIG5hbWUuCi0gICAgICovIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFja2FnZSgpCi0gICAgewotICAgICAgICBpbnQgaW5kZXggPSBjbGFzc05hbWUubGFzdEluZGV4T2YoJy4nKTsKLSAgICAgICAgaWYgKGluZGV4IDw9IDApCi0gICAgICAgICAgICByZXR1cm4gIiI7Ci0gICAgICAgIHJldHVybiBjbGFzc05hbWUuc3Vic3RyaW5nKDAsIGluZGV4KTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGlzIGlzIGFuIGlubmVyIGNsYXNzIG5hbWUuCi0gICAgICovIAotICAgIHB1YmxpYyBib29sZWFuIGlzSW5uZXJDbGFzcygpCi0gICAgewotICAgICAgICByZXR1cm4gKGNsYXNzTmFtZS5sYXN0SW5kZXhPZignJCcpID49IDApOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBKYXZhTmFtZSBvZiB0aGUgY29udGFpbmluZyBjbGFzcywgb3IgbnVsbCBpZiB0aGlzCi0gICAgICogaXMgbm90IGFuIGlubmVyIGNsYXNzIG5hbWUuCi0gICAgICovIAotICAgIHB1YmxpYyBKYXZhTmFtZSBnZXRDb250YWluaW5nQ2xhc3MoKQotICAgIHsKLSAgICAgICAgaW50IGluZGV4ID0gY2xhc3NOYW1lLmxhc3RJbmRleE9mKCckJyk7Ci0gICAgICAgIGlmIChpbmRleCA8IDApCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgcmV0dXJuIEphdmFOYW1lLmZvclN0cmluZyhjbGFzc05hbWUuc3Vic3RyaW5nKDAsIGluZGV4KSk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHNob3J0IGNsYXNzIG5hbWUgKGkuZS4sIG5vIGRvdHMgb3IgZG9sbGFycykuCi0gICAgICovIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2hvcnRDbGFzc05hbWUoKQotICAgIHsKLSAgICAgICAgaW50IGluZGV4ID0gY2xhc3NOYW1lLmxhc3RJbmRleE9mKCckJyk7Ci0gICAgICAgIGludCBpbmRleDIgPSBjbGFzc05hbWUubGFzdEluZGV4T2YoJy4nKTsKLSAgICAgICAgaWYgKGluZGV4MiA+IGluZGV4KQotICAgICAgICAgICAgaW5kZXggPSBpbmRleDI7Ci0gICAgICAgIGlmIChpbmRleCA8IDApCi0gICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lOwotICAgICAgICByZXR1cm4gY2xhc3NOYW1lLnN1YnN0cmluZyhpbmRleCArIDEpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzID09IG8pIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIShvIGluc3RhbmNlb2YgSmF2YU5hbWUpKSByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgZmluYWwgSmF2YU5hbWUgamF2YU5hbWUgPSAoSmF2YU5hbWUpIG87Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNYbWxPYmplY3QgIT0gamF2YU5hbWUuaXNYbWxPYmplY3QpIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFjbGFzc05hbWUuZXF1YWxzKGphdmFOYW1lLmNsYXNzTmFtZSkpIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFhcnJheVN0cmluZy5lcXVhbHMoamF2YU5hbWUuYXJyYXlTdHJpbmcpKSByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBoYXNoQ29kZSgpCi0gICAgewotICAgICAgICByZXR1cm4gY2xhc3NOYW1lLmhhc2hDb2RlKCkgKyBhcnJheVN0cmluZy5sZW5ndGgoKSArIChpc1htbE9iamVjdCA/IDEgOiAwKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvYmluZGluZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvYmluZGluZy9idHMvSmF4YkJlYW4uamF2YSBiL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2J0cy9KYXhiQmVhbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDZlMTI3Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2J0cy9KYXhiQmVhbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHMuQmluZGluZ1Byb3BlcnR5OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0cy5CaW5kaW5nVHlwZTsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7Ci0KLS8qKgotICogUmVwcmVzZW50cyBhIGJpbmRpbmcgdGhhdCBjYW4gbGluZSB1cCBwcm9wZXJ0aWVzIGJhc2VkIG9uIGVpdGhlcgotICogbmFtZSAobGlrZSBCeU5hbWVCZWFuKSBvciBwb3NpdGlvbiAoaS5lLiwgU2NoZW1hIFBhcnRpY2xlKSwgYXMKLSAqIHJlcXVpcmVkIGJ5IEpBWEIuCi0gKi8gCi1wdWJsaWMgY2xhc3MgSmF4YkJlYW4gZXh0ZW5kcyBCaW5kaW5nVHlwZQotewotICAgIE1hcCBwYXJ0UHJvcHMgPSBuZXcgTGlua2VkSGFzaE1hcCgpOyAvLyBYbWxOYW1lIC0+IHByb3AgKHBhcnRpY2xlcykKLSAgICBNYXAgZWx0UHJvcHMgPSBuZXcgTGlua2VkSGFzaE1hcCgpOyAvLyBRTmFtZSAtPiBwcm9wIChlbHRzKQotICAgIE1hcCBhdHRQcm9wcyA9IG5ldyBMaW5rZWRIYXNoTWFwKCk7IC8vIFFOYW1lIC0+IHByb3AgKGF0dHJzKQotICAgIAotICAgIHB1YmxpYyBKYXhiQmVhbihCaW5kaW5nVHlwZU5hbWUgYnROYW1lKQotICAgIHsKLSAgICAgICAgc3VwZXIoYnROYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSmF4YkJlYW4ob3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5CaW5kaW5nVHlwZSBub2RlKQotICAgIHsKLSAgICAgICAgc3VwZXIobm9kZSk7Ci0gICAgICAgIAotICAgICAgICBvcmcuYXBhY2hlLnhtbGJlYW5zLngyMDAzLngwOS5iaW5kaW5nQ29uZmlnLkpheGJCZWFuIGpiTm9kZSA9IChvcmcuYXBhY2hlLnhtbGJlYW5zLngyMDAzLngwOS5iaW5kaW5nQ29uZmlnLkpheGJCZWFuKW5vZGU7Ci0gICAgICAgIAotICAgICAgICBvcmcuYXBhY2hlLnhtbGJlYW5zLngyMDAzLngwOS5iaW5kaW5nQ29uZmlnLlBhcnRpY2xlUHJvcGVydHlbXSBwcHJvcEFycmF5ID0gamJOb2RlLmdldFBhcnRpY2xlUHJvcGVydHlBcnJheSgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBwcm9wQXJyYXkubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KEJpbmRpbmdQcm9wZXJ0eS5mb3JOb2RlKHBwcm9wQXJyYXlbaV0pKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgb3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5RbmFtZVByb3BlcnR5W10gcXByb3BBcnJheSA9IGpiTm9kZS5nZXRRbmFtZVByb3BlcnR5QXJyYXkoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBxcHJvcEFycmF5Lmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShCaW5kaW5nUHJvcGVydHkuZm9yTm9kZShxcHJvcEFycmF5W2ldKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgCi0gICAgLyoqCi0gICAgICogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYW4gaW5zdGFuY2UgYmFjayBvdXQgdG8gdGhlIHJlbGV2YW50IHBhcnQgb2YgdGhlIFhNTCBmaWxlLgotICAgICAqIAotICAgICAqIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIGFuZCBjYWxsIHN1cGVyLndyaXRlIGZpcnN0LgotICAgICAqLyAKLSAgICBwcm90ZWN0ZWQgb3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5CaW5kaW5nVHlwZSB3cml0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLngyMDAzLngwOS5iaW5kaW5nQ29uZmlnLkJpbmRpbmdUeXBlIG5vZGUpCi0gICAgewotICAgICAgICBvcmcuYXBhY2hlLnhtbGJlYW5zLngyMDAzLngwOS5iaW5kaW5nQ29uZmlnLkpheGJCZWFuIGpiTm9kZSA9IChvcmcuYXBhY2hlLnhtbGJlYW5zLngyMDAzLngwOS5iaW5kaW5nQ29uZmlnLkpheGJCZWFuKXN1cGVyLndyaXRlKG5vZGUpOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBnZXRQcm9wZXJ0aWVzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgQmluZGluZ1Byb3BlcnR5IGJQcm9wID0gKEJpbmRpbmdQcm9wZXJ0eSlpLm5leHQoKTsKLSAgICAgICAgICAgIGlmIChiUHJvcCBpbnN0YW5jZW9mIFBhcnRpY2xlUHJvcGVydHkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5QYXJ0aWNsZVByb3BlcnR5IHBwTm9kZSA9IGpiTm9kZS5hZGROZXdQYXJ0aWNsZVByb3BlcnR5KCk7Ci0gICAgICAgICAgICAgICAgYlByb3Aud3JpdGUocHBOb2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLnhtbGJlYW5zLngyMDAzLngwOS5iaW5kaW5nQ29uZmlnLlFuYW1lUHJvcGVydHkgcXBOb2RlID0gamJOb2RlLmFkZE5ld1FuYW1lUHJvcGVydHkoKTsKLSAgICAgICAgICAgICAgICBiUHJvcC53cml0ZShxcE5vZGUpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBqYk5vZGU7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIFJldHVybnMgYW4gdW5tb2RpZmlhYmxlIGNvbGxlY3Rpb24gb2YgUU5hbWVQcm9wZXJ0eSBvYmplY3RzLgotICAgICAqLyAKLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRQcm9wZXJ0aWVzKCkKLSAgICB7Ci0gICAgICAgIExpc3QgcmVzdWx0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICByZXN1bHQuYWRkQWxsKHBhcnRQcm9wcy52YWx1ZXMoKSk7Ci0gICAgICAgIHJlc3VsdC5hZGRBbGwoZWx0UHJvcHMudmFsdWVzKCkpOwotICAgICAgICByZXN1bHQuYWRkQWxsKGF0dFByb3BzLnZhbHVlcygpKTsKLSAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUNvbGxlY3Rpb24ocmVzdWx0KTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogTG9va3MgdXAgYSBwcm9wZXJ0eSBieSBhdHRyaWJ1dGUgbmFtZSwgbnVsbCBpZiBubyBtYXRjaC4KLSAgICAgKi8gCi0gICAgcHVibGljIFFOYW1lUHJvcGVydHkgZ2V0UHJvcGVydHlGb3JBdHRyaWJ1dGUoUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoUU5hbWVQcm9wZXJ0eSlhdHRQcm9wcy5nZXQobmFtZSk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIExvb2tzIHVwIGEgcHJvcGVydHkgYnkgZWxlbWVudCBuYW1lLCBudWxsIGlmIG5vIG1hdGNoLgotICAgICAqLyAKLSAgICBwdWJsaWMgUU5hbWVQcm9wZXJ0eSBnZXRQcm9wZXJ0eUZvckVsZW1lbnQoUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoUU5hbWVQcm9wZXJ0eSllbHRQcm9wcy5nZXQobmFtZSk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIEFkZHMgYSBuZXcgcHJvcGVydHkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBhZGRQcm9wZXJ0eShCaW5kaW5nUHJvcGVydHkgbmV3UHJvcCkKLSAgICB7Ci0gICAgICAgIGlmIChuZXdQcm9wIGluc3RhbmNlb2YgUGFydGljbGVQcm9wZXJ0eSkKLSAgICAgICAgewotICAgICAgICAgICAgcGFydFByb3BzLnB1dCgoKFBhcnRpY2xlUHJvcGVydHkpbmV3UHJvcCkuZ2V0WG1sTmFtZSgpLCBuZXdQcm9wKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChuZXdQcm9wIGluc3RhbmNlb2YgUU5hbWVQcm9wZXJ0eSkKLSAgICAgICAgewotICAgICAgICAgICAgUU5hbWVQcm9wZXJ0eSBxUHJvcCA9IChRTmFtZVByb3BlcnR5KW5ld1Byb3A7Ci0gICAgICAgICAgICBpZiAocVByb3AuaXNBdHRyaWJ1dGUoKSkKLSAgICAgICAgICAgICAgICBhdHRQcm9wcy5wdXQocVByb3AuZ2V0UU5hbWUoKSwgbmV3UHJvcCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZWx0UHJvcHMucHV0KHFQcm9wLmdldFFOYW1lKCksIG5ld1Byb3ApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvYnRzL0tpbmRSZWdpc3RyeS5qYXZhIGIvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvYnRzL0tpbmRSZWdpc3RyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzQ4Yjk1Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2J0cy9LaW5kUmVnaXN0cnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotCi0KLS8qIHBhY2thZ2UgcHJvdGVjdGVkICovCi0KLS8qKgotICogTm90ZSB0aGF0IHRoaXMgaXMgTk9UIGEgZ2VuZXJpYyBiaW5kaW5nIHJlZ2lzdHJ5IGZvciB1c2VycycgYmluZGluZzsgdGhpcyBpcwotICogYSByZWdpc3RyeSB0aGF0IGlzIHVzZWQgaW50ZXJuYWxseSBqdXN0IHRvIG1hbmFnZSBiaW5kaW5nIGJldHdlZW4KLSAqIFhCZWFucyBmb3IgQmluZGluZ1R5cGVzIGFuZCBCaW5kaW5nVHlwZSB3cmFwcGVyIGNsYXNzZXMuICBUaGUgcmVhc29uCi0gKiBmb3IgdGhpcyBtZWNoYW5pc20gaXMgdGhhdCBYTUxCZWFucyBiaW5kaW5nIGlzIE5PVCBZRVQgcG93ZXJmdWwgZW5vdWdoCi0gKiB0byBiaW5kIHRoZSB2YXJpb3VzIGtpbmRzIG9mIEJpbmRpbmdUeXBlcyBkaXJlY3RseSB0byBzY2hlbWEgeWV0LgotICogCi0gKiBIb3dldmVyLCBpbiB0aGUgZnV0dXJlLCB3ZSBob3BlIHRvIG1ha2UgaXQgcG93ZXJmdWwgZW5vdWdoIHRvIGRvIHNvLAotICogc28gdGhhdCBtb3N0IG9mIHRoZSBoYW5kLWNvZGVkIGJpbmRpbmcgYmV0d2VuIEphdmEgYW5kIFhNTCBjYW4gZ28gYXdheS4KLSAqIFRoaXMgY2xhc3MsIGFuZCBhbGwgdGhlIG1lY2hhbmlzbXMgdGhhdCB1c2UgaXQsIHNob3VsZCBnbyBhd2F5IHRvby4KLSAqLwotY2xhc3MgS2luZFJlZ2lzdHJ5Ci17Ci0gICAgcHJpdmF0ZSBNYXAgcmVnaXN0cnlDbGFzc0Zyb21UeXBlID0gbmV3IEhhc2hNYXAoKTsKLSAgICBwcml2YXRlIE1hcCByZWdpc3RyeVR5cGVGcm9tQ2xhc3MgPSBuZXcgSGFzaE1hcCgpOwotICAgIAotICAgIHN5bmNocm9uaXplZCB2b2lkIHJlZ2lzdGVyQ2xhc3NBbmRUeXBlKENsYXNzIGJpbmRpbmdUeXBlQ2xhc3MsIFNjaGVtYVR5cGUgYmluZGluZ1R5cGVTY2hlbWFUeXBlKQotICAgIHsKLSAgICAgICAgcmVnaXN0cnlDbGFzc0Zyb21UeXBlLnB1dChiaW5kaW5nVHlwZVNjaGVtYVR5cGUsIGJpbmRpbmdUeXBlQ2xhc3MpOwotICAgICAgICByZWdpc3RyeVR5cGVGcm9tQ2xhc3MucHV0KGJpbmRpbmdUeXBlQ2xhc3MsIGJpbmRpbmdUeXBlU2NoZW1hVHlwZSk7Ci0gICAgfQotICAgIAotICAgIHN5bmNocm9uaXplZCBDbGFzcyBjbGFzc0ZvclR5cGUoU2NoZW1hVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChDbGFzcylyZWdpc3RyeUNsYXNzRnJvbVR5cGUuZ2V0KHR5cGUpOwotICAgIH0KLSAgICAKLSAgICBzeW5jaHJvbml6ZWQgU2NoZW1hVHlwZSB0eXBlRm9yQ2xhc3MoQ2xhc3MgY2xhenopCi0gICAgewotICAgICAgICByZXR1cm4gKFNjaGVtYVR5cGUpcmVnaXN0cnlUeXBlRnJvbUNsYXNzLmdldChjbGF6eik7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvYnRzL1BhcnRpY2xlUHJvcGVydHkuamF2YSBiL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2J0cy9QYXJ0aWNsZVByb3BlcnR5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyZTZlMGEuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvYnRzL1BhcnRpY2xlUHJvcGVydHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHMuQmluZGluZ1Byb3BlcnR5OwotCi0vKioKLSAqIEEgcHJvcGVydHkgbGluZWQgdXAgYnkgU2NoZW1hIHBhcnRpY2xlLiAgVXNlZCBieSBKYXhiQmVhbgotICovIAotcHVibGljIGNsYXNzIFBhcnRpY2xlUHJvcGVydHkgZXh0ZW5kcyBCaW5kaW5nUHJvcGVydHkKLXsKLSAgICBwdWJsaWMgUGFydGljbGVQcm9wZXJ0eSgpCi0gICAgewotICAgICAgICBzdXBlcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBQYXJ0aWNsZVByb3BlcnR5KG9yZy5hcGFjaGUueG1sYmVhbnMueDIwMDMueDA5LmJpbmRpbmdDb25maWcuQmluZGluZ1Byb3BlcnR5IG5vZGUpCi0gICAgewotICAgICAgICBzdXBlcihub2RlKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIFhtbE5hbWUgZ2V0WG1sTmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0VHlwZU5hbWUoKS5nZXRYbWxOYW1lKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvYnRzL1BhdGhCaW5kaW5nTG9hZGVyLmphdmEgYi92Mi9zcmMvYmluZGluZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvYmluZGluZy9idHMvUGF0aEJpbmRpbmdMb2FkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUzM2U2OS4uMDAwMDAwMAotLS0gYS92Mi9zcmMvYmluZGluZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvYmluZGluZy9idHMvUGF0aEJpbmRpbmdMb2FkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzLkJpbmRpbmdMb2FkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzLkJpbmRpbmdUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0cy5KYXZhTmFtZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5JZGVudGl0eUhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci0KLS8qKgotICogQSBiaW5kaW5nIGxvYWRlciBpbXBsIHdpdGggdGhlIGFiaWxpdHkgdG8gY2hhaW4gdG9nZXRoZXIgYSBwYXRoCi0gKiBvZiBvdGhlciBsb2FkZXJzLgotICovIAotcHVibGljIGNsYXNzIFBhdGhCaW5kaW5nTG9hZGVyIGltcGxlbWVudHMgQmluZGluZ0xvYWRlcgotewotICAgIHByaXZhdGUgZmluYWwgQ29sbGVjdGlvbiBsb2FkZXJQYXRoOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUGF0aEJpbmRpbmdMb2FkZXIgRU1QVFlfTE9BREVSID0gbmV3IFBhdGhCaW5kaW5nTG9hZGVyKENvbGxlY3Rpb25zLkVNUFRZX0xJU1QpOwotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgQmluZGluZ0xvYWRlciBmb3JQYXRoKEJpbmRpbmdMb2FkZXJbXSBwYXRoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZvclBhdGgoQXJyYXlzLmFzTGlzdChwYXRoKSk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgQmluZGluZ0xvYWRlciBmb3JQYXRoKENvbGxlY3Rpb24gcGF0aCkKLSAgICB7Ci0gICAgICAgIElkZW50aXR5SGFzaE1hcCBzZWVuID0gbmV3IElkZW50aXR5SGFzaE1hcCgpOwotICAgICAgICAKLSAgICAgICAgTGlzdCBmbGF0dGVuZWQgPSBuZXcgQXJyYXlMaXN0KHBhdGguc2l6ZSgpKTsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gcGF0aC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICAgICAgYWRkVG9QYXRoKGZsYXR0ZW5lZCwgc2VlbiwgKEJpbmRpbmdMb2FkZXIpaS5uZXh0KCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGZsYXR0ZW5lZC5zaXplKCkgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiBFTVBUWV9MT0FERVI7Ci0gICAgICAgIAotICAgICAgICBpZiAoZmxhdHRlbmVkLnNpemUoKSA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIChCaW5kaW5nTG9hZGVyKWZsYXR0ZW5lZC5nZXQoMCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbmV3IFBhdGhCaW5kaW5nTG9hZGVyKGZsYXR0ZW5lZCk7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgYWRkVG9QYXRoKExpc3QgcGF0aCwgSWRlbnRpdHlIYXNoTWFwIHNlZW4sIEJpbmRpbmdMb2FkZXIgbG9hZGVyKQotICAgIHsKLSAgICAgICAgaWYgKHNlZW4uY29udGFpbnNLZXkobG9hZGVyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGlmIChsb2FkZXIgaW5zdGFuY2VvZiBQYXRoQmluZGluZ0xvYWRlcikKLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaiA9ICgoUGF0aEJpbmRpbmdMb2FkZXIpcGF0aCkubG9hZGVyUGF0aC5pdGVyYXRvcigpOyBqLmhhc05leHQoKTsgKQotICAgICAgICAgICAgICAgIGFkZFRvUGF0aChwYXRoLCBzZWVuLCAoQmluZGluZ0xvYWRlcilqLm5leHQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhdGguYWRkKGxvYWRlcik7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgUGF0aEJpbmRpbmdMb2FkZXIoTGlzdCBwYXRoKQotICAgIHsKLSAgICAgICAgbG9hZGVyUGF0aCA9IENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QocGF0aCk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBCaW5kaW5nVHlwZSBnZXRCaW5kaW5nVHlwZShCaW5kaW5nVHlwZU5hbWUgYnROYW1lKQotICAgIHsKLSAgICAgICAgQmluZGluZ1R5cGUgcmVzdWx0ID0gbnVsbDsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gbG9hZGVyUGF0aC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSAoKEJpbmRpbmdMb2FkZXIpaS5uZXh0KCkpLmdldEJpbmRpbmdUeXBlKGJ0TmFtZSk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQmluZGluZ1R5cGVOYW1lIGxvb2t1cFBvam9Gb3IoWG1sTmFtZSB4TmFtZSkKLSAgICB7Ci0gICAgICAgIEJpbmRpbmdUeXBlTmFtZSByZXN1bHQgPSBudWxsOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBsb2FkZXJQYXRoLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9ICgoQmluZGluZ0xvYWRlcilpLm5leHQoKSkubG9va3VwUG9qb0Zvcih4TmFtZSk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQmluZGluZ1R5cGVOYW1lIGxvb2t1cFhtbE9iamVjdEZvcihYbWxOYW1lIHhOYW1lKQotICAgIHsKLSAgICAgICAgQmluZGluZ1R5cGVOYW1lIHJlc3VsdCA9IG51bGw7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGxvYWRlclBhdGguaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gKChCaW5kaW5nTG9hZGVyKWkubmV4dCgpKS5sb29rdXBYbWxPYmplY3RGb3IoeE5hbWUpOwotICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIEJpbmRpbmdUeXBlTmFtZSBsb29rdXBUeXBlRm9yKEphdmFOYW1lIGpOYW1lKQotICAgIHsKLSAgICAgICAgQmluZGluZ1R5cGVOYW1lIHJlc3VsdCA9IG51bGw7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGxvYWRlclBhdGguaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gKChCaW5kaW5nTG9hZGVyKWkubmV4dCgpKS5sb29rdXBUeXBlRm9yKGpOYW1lKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBCaW5kaW5nVHlwZU5hbWUgbG9va3VwRWxlbWVudEZvcihKYXZhTmFtZSBqTmFtZSkKLSAgICB7Ci0gICAgICAgIEJpbmRpbmdUeXBlTmFtZSByZXN1bHQgPSBudWxsOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBsb2FkZXJQYXRoLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9ICgoQmluZGluZ0xvYWRlcilpLm5leHQoKSkubG9va3VwRWxlbWVudEZvcihqTmFtZSk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2J0cy9RTmFtZVByb3BlcnR5LmphdmEgYi92Mi9zcmMvYmluZGluZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvYmluZGluZy9idHMvUU5hbWVQcm9wZXJ0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2I4MzhmLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2J0cy9RTmFtZVByb3BlcnR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0czsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0cy5CaW5kaW5nUHJvcGVydHk7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi0vKioKLSAqIEEgcHJvcGVydHkgdGhhdCBhZGRyZXNzZXMgYW4gWE1MIGVsZW1lbnQgb3IgYXR0cmlidXRlIGJ5IG5hbWUKLSAqIHJhdGhlciB0aGFuIGJ5IHBvc2l0aW9uLgotICovIAotcHVibGljIGNsYXNzIFFOYW1lUHJvcGVydHkgZXh0ZW5kcyBCaW5kaW5nUHJvcGVydHkKLXsKLSAgICBwcml2YXRlIFFOYW1lIHRoZU5hbWU7Ci0gICAgcHJpdmF0ZSBib29sZWFuIGlzQXR0cmlidXRlOwotICAgIHByaXZhdGUgYm9vbGVhbiBpc011bHRpcGxlOwotICAgIHByaXZhdGUgYm9vbGVhbiBpc09wdGlvbmFsOwotICAgIHByaXZhdGUgYm9vbGVhbiBpc05pbGxhYmxlOwotICAgIAotICAgIHB1YmxpYyBRTmFtZVByb3BlcnR5KCkKLSAgICB7Ci0gICAgICAgIHN1cGVyKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFFOYW1lUHJvcGVydHkob3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5CaW5kaW5nUHJvcGVydHkgbm9kZSkKLSAgICB7Ci0gICAgICAgIHN1cGVyKG5vZGUpOwotICAgICAgICBvcmcuYXBhY2hlLnhtbGJlYW5zLngyMDAzLngwOS5iaW5kaW5nQ29uZmlnLlFuYW1lUHJvcGVydHkgcXBOb2RlID0KLSAgICAgICAgICAgICAgICAob3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5RbmFtZVByb3BlcnR5KW5vZGU7Ci0gICAgICAgIHRoZU5hbWUgPSBxcE5vZGUuZ2V0UW5hbWUoKTsKLSAgICAgICAgaXNBdHRyaWJ1dGUgPSBxcE5vZGUuZ2V0QXR0cmlidXRlKCk7Ci0gICAgICAgIGlzTXVsdGlwbGUgPSBxcE5vZGUuZ2V0TXVsdGlwbGUoKTsKLSAgICAgICAgaXNOaWxsYWJsZSA9IHFwTm9kZS5nZXROaWxsYWJsZSgpOwotICAgICAgICBpc09wdGlvbmFsID0gcXBOb2RlLmdldE9wdGlvbmFsKCk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGFuIGluc3RhbmNlIGJhY2sgb3V0IHRvIHRoZSByZWxldmFudCBwYXJ0IG9mIHRoZSBYTUwgZmlsZS4KLSAgICAgKiAKLSAgICAgKiBTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSBhbmQgY2FsbCBzdXBlci53cml0ZSBmaXJzdC4KLSAgICAgKi8gCi0gICAgcHJvdGVjdGVkIG9yZy5hcGFjaGUueG1sYmVhbnMueDIwMDMueDA5LmJpbmRpbmdDb25maWcuQmluZGluZ1Byb3BlcnR5IHdyaXRlKG9yZy5hcGFjaGUueG1sYmVhbnMueDIwMDMueDA5LmJpbmRpbmdDb25maWcuQmluZGluZ1Byb3BlcnR5IG5vZGUpCi0gICAgewotICAgICAgICBub2RlID0gc3VwZXIud3JpdGUobm9kZSk7Ci0gICAgICAgIAotICAgICAgICBvcmcuYXBhY2hlLnhtbGJlYW5zLngyMDAzLngwOS5iaW5kaW5nQ29uZmlnLlFuYW1lUHJvcGVydHkgcXBOb2RlID0KLSAgICAgICAgICAgICAgICAob3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5RbmFtZVByb3BlcnR5KW5vZGU7Ci0gICAgICAgIAotICAgICAgICBxcE5vZGUuc2V0UW5hbWUodGhlTmFtZSk7Ci0gICAgICAgIGlmIChpc0F0dHJpYnV0ZSkKLSAgICAgICAgICAgIHFwTm9kZS5zZXRBdHRyaWJ1dGUodHJ1ZSk7Ci0gICAgICAgIGlmIChpc011bHRpcGxlKQotICAgICAgICAgICAgcXBOb2RlLnNldE11bHRpcGxlKHRydWUpOwotICAgICAgICBpZiAoaXNPcHRpb25hbCkKLSAgICAgICAgICAgIHFwTm9kZS5zZXRPcHRpb25hbCh0cnVlKTsKLSAgICAgICAgaWYgKGlzTmlsbGFibGUpCi0gICAgICAgICAgICBxcE5vZGUuc2V0TmlsbGFibGUodHJ1ZSk7Ci0gICAgICAgIHJldHVybiBxcE5vZGU7Ci0gICAgfQotCi0gICAgcHVibGljIFFOYW1lIGdldFFOYW1lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGVOYW1lOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRRTmFtZShRTmFtZSB0aGVOYW1lKQotICAgIHsKLSAgICAgICAgdGhpcy50aGVOYW1lID0gdGhlTmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0F0dHJpYnV0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gaXNBdHRyaWJ1dGU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0QXR0cmlidXRlKGJvb2xlYW4gYXR0cmlidXRlKQotICAgIHsKLSAgICAgICAgaXNBdHRyaWJ1dGUgPSBhdHRyaWJ1dGU7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNNdWx0aXBsZSgpCi0gICAgewotICAgICAgICByZXR1cm4gaXNNdWx0aXBsZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRNdWx0aXBsZShib29sZWFuIG11bHRpcGxlKQotICAgIHsKLSAgICAgICAgaXNNdWx0aXBsZSA9IG11bHRpcGxlOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzT3B0aW9uYWwoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzT3B0aW9uYWw7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0T3B0aW9uYWwoYm9vbGVhbiBvcHRpb25hbCkKLSAgICB7Ci0gICAgICAgIGlzT3B0aW9uYWwgPSBvcHRpb25hbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc05pbGxhYmxlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc05pbGxhYmxlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldE5pbGxhYmxlKGJvb2xlYW4gbmlsbGFibGUpCi0gICAgewotICAgICAgICBpc05pbGxhYmxlID0gbmlsbGFibGU7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvYnRzL1NpbXBsZUJpbmRpbmdUeXBlLmphdmEgYi92Mi9zcmMvYmluZGluZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvYmluZGluZy9idHMvU2ltcGxlQmluZGluZ1R5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RiNWJjZC4uMDAwMDAwMAotLS0gYS92Mi9zcmMvYmluZGluZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvYmluZGluZy9idHMvU2ltcGxlQmluZGluZ1R5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzLkJpbmRpbmdUeXBlOwotCi0vKioKLSAqIEEgYmluZGluZyBvZiBhIHNpbXBsZSB1c2VyLWRlZmluZWQgdHlwZSB0aGF0IG9wZXJhdGVzIGJ5Ci0gKiBkZWxlZ2F0aW5nIHRvIGFub3RoZXIgd2VsbC1rbm93biAoZS5nLiwgYnVpbHRpbikgYmluZGluZy4KLSAqLyAKLXB1YmxpYyBjbGFzcyBTaW1wbGVCaW5kaW5nVHlwZSBleHRlbmRzIEJpbmRpbmdUeXBlCi17Ci0gICAgcHVibGljIFNpbXBsZUJpbmRpbmdUeXBlKEJpbmRpbmdUeXBlTmFtZSBidE5hbWUpCi0gICAgewotICAgICAgICBzdXBlcihidE5hbWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBTaW1wbGVCaW5kaW5nVHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLngyMDAzLngwOS5iaW5kaW5nQ29uZmlnLkJpbmRpbmdUeXBlIG5vZGUpCi0gICAgewotICAgICAgICBzdXBlcihub2RlKTsKLSAgICAgICAgb3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5TaW1wbGVUeXBlIHN0Tm9kZSA9IChvcmcuYXBhY2hlLnhtbGJlYW5zLngyMDAzLngwOS5iaW5kaW5nQ29uZmlnLlNpbXBsZVR5cGUpbm9kZTsKLSAgICAgICAgYXNJZlhtbFR5cGUgPSBYbWxOYW1lLmZvclN0cmluZyhzdE5vZGUuZ2V0QXNYbWwoKSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIG9yZy5hcGFjaGUueG1sYmVhbnMueDIwMDMueDA5LmJpbmRpbmdDb25maWcuQmluZGluZ1R5cGUgd3JpdGUob3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5CaW5kaW5nVHlwZSBub2RlKQotICAgIHsKLSAgICAgICAgb3JnLmFwYWNoZS54bWxiZWFucy54MjAwMy54MDkuYmluZGluZ0NvbmZpZy5TaW1wbGVUeXBlIHN0Tm9kZSA9IChvcmcuYXBhY2hlLnhtbGJlYW5zLngyMDAzLngwOS5iaW5kaW5nQ29uZmlnLlNpbXBsZVR5cGUpc3VwZXIud3JpdGUobm9kZSk7Ci0gICAgICAgIHN0Tm9kZS5zZXRBc1htbChhc0lmWG1sVHlwZS50b1N0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIHN0Tm9kZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFhtbE5hbWUgYXNJZlhtbFR5cGU7Ci0KLSAgICAvLyB0eXBpY2FsbHkgdGhlICJhcyBpZiIgdHlwZSBpcyB0aGUgY2xvc2VzdCBiYXNlIGJ1aWx0aW4gdHlwZS4KLSAgICBwdWJsaWMgWG1sTmFtZSBnZXRBc0lmWG1sVHlwZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYXNJZlhtbFR5cGU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0QXNJZlhtbFR5cGUoWG1sTmFtZSBhc0lmWG1sVHlwZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuYXNJZlhtbFR5cGUgPSBhc0lmWG1sVHlwZTsKLSAgICB9Ci0gICAgCi0gICAgLy8gcXVlc3Rpb246IGRvIHdlIHdhbnQgYW4gImFzIGlmIEphdmEgdHlwZSIgYXMgd2VsbD8KLSAgICAKLSAgICBwdWJsaWMgQmluZGluZ1R5cGVOYW1lIGdldEFzSWZCaW5kaW5nVHlwZU5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJpbmRpbmdUeXBlTmFtZS5mb3JQYWlyKGdldE5hbWUoKS5nZXRKYXZhTmFtZSgpLCBhc0lmWG1sVHlwZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvYnRzL1htbE5hbWUuamF2YSBiL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2J0cy9YbWxOYW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0MDRkNzQuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvYnRzL1htbE5hbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2MyArMCwwIEBACi0vKioKLSAqIFhCZWFucyBpbXBsZW1lbnRhdGlvbi4KLSAqIEF1dGhvcjogRGF2aWQgQmF1Ci0gKiBEYXRlOiBPY3QgMSwgMjAwMwotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0czsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uWE1MQ2hhcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQmVhbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5zb2FwLlNPQVBBcnJheVR5cGU7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi0vKioKLSAqIEFuIFhtbE5hbWUgaXMgYSB3YXkgb2YgdW5pcXVlbHkgaWRlbnRpZnlpbmcgYW55Ci0gKiBsb2dpY2FsIGNvbXBvbmVudCBpbiBhIHNjaGVtYS4KLSAqIAotICogRm9yIGEgZGlhZ3JhbSBvZiB0aGUga2luZHMgb2YgY29tcG9uZW50cyB0aGF0IGNhbiBiZSByZWZlcmVuY2VkLAotICogc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xL2NvbXBvbmVudHMuZ2lmCi0gKiAKLSAqIEEgc2lnbmF0dXJlIGxvb2tzIGxpa2UgdGhpczoKLSAqIAotICogYS1uYW1lMXx0fGU9bmFtZTJ8cC4zfHN8cC41fGN8cC4wfHR8ZT1uYW1lM0BteS1uYW1lc3BhY2UKLSAqIAotICogVGhpcyByZWFkcyBhczpnCi0gKiBUaGUgYXR0cmlidXRlIGRlY2xhcmF0aW9uIGNhbGxlZCAibmFtZTEiICh1bnF1YWxpZmllZCkgaW5zaWRlCi0gKiB0aGUgYW5vbnltb3VzIHR5cGUgb2YKLSAqIHRoZSBlbGVtZW50IGRlY2xhcmF0aW9uIGNhbGxlZCAibmFtZTIiIChxdWFsaWZpZWQpIHdoaWNoIGlzCi0gKiB0aGUgdGhpcmQgcGFydGljbGUgb2YKLSAqIHRoZSBzZXF1ZW5jZSB3aGljaCBpcwotICogdGhlIGZpZnRoIHBhcnRpY2xlIG9mCi0gKiB0aGUgY2hvaWNlIHdoaWNoIGlzCi0gKiB0aGUgemVyb3RoIHBhcnRpY2xlIG9mCi0gKiB0aGUgYW5vbnltb3VzIHR5cGUgb2YKLSAqIHRoZSBlbGVtZW50IG5hbWVkIG5hbWUzIChxdWFsaWZpZWQpIGluCi0gKiB0aGUgbmFtZXNwYWNlIG15LW5hbWVzcGFjZS4KLSAqIAotICogSHlwaGVucyAoLSkgaW50cm9kdWNlIHVucXVhbGlmaWVkIG5hbWVzCi0gKiBFcXVhbHMgKD0pIGludHJvZHVjZSBxdWFsaWZpZWQgbmFtZXMKLSAqIERvdCAoLikgaW50cm9kdWNlIG51bWJlcnMKLSAqIEFub255bW91cyBjb21wb25lbnRzIGFyZSBqdXN0IHNpbmdsZS1sZXR0ZXJzLgotICoKLSAqIFRoZXJlIGFyZSB0aGVzZSB0eXBlcyBvZiBjb21wb25lbnRzCi0gKgotICogbiA9IE5vdGF0aW9ucyAobmFtZWQsIGdsb2JhbCBvbmx5KQotICogZSA9IEVsZW1lbnQgZGVjbHMgKG5hbWVkLCBnbG9iYWwgb3IgaW5zaWRlIHQgb3IgcCkKLSAqIElkZW50aXR5IGNvbnN0cmFpbnQgZGVmcwotICogICBrID0ga2V5L3VuaXF1ZS9rZXlyZWYgKG5hbWVkLCBpbiBlbHRzIG9ubHkpCi0gKiBnID0gTW9kZWwgZ3JvdXAgZGVmcyAobmFtZWQsIGdsb2JhbCBvbmx5KQotICogTW9kZWwgZ3JvdXAgY29tcG9zaXRvcnM6Ci0gKiAgIGwgPSBBbGwgY29tcG9zaXRvcnMgKGFub24sIGluc2lkZSBwIG9yIGcpCi0gKiAgIHMgPSBTZXF1ZW5jZSBjb21wb3NpdG9ycyAoYW5vbiwgaW5zaWRlIHAgb3IgZykKLSAqICAgYyA9IENob2ljZSBjb21wb3NpdG9ycyAoYW5vbiwgaW5zaWRlIHAgb3IgZykKLSAqIHAgPSBQYXJ0aWNsZXMgKG51bWJlcmVkLCBpbnNpZGUgdCBvciBsIG9yIHMgb3IgYykKLSAqIHcgPSBXaWxkY2FyZHMgKGFub24sIGluc2lkZSBwIG9ubHkpCi0gKiB2ID0gQXR0cmlidXRlIFVzZXMgKG5hbWVkLCBpbiB0eXBlIG9ubHksIGluc2lkZSB0KQotICogYSA9IEF0dHJpYnV0ZSBEZWNsYXJhdGlvbnMgKG5hbWVkLCBnbG9iYWwgb3IgaW5zaWRlIHQgb3IgdikKLSAqIHIgPSBBdHRyaWJ1dGUgZ3JvdXAgZGVmaW5pdGlvbnMgKG5hbWVkLCBnbG9iYWwgb25seSkKLSAqIHQgPSBUeXBlIGRlZmluaXRpb25zIChuYW1lIHdoZW4gZ2xvYmFsLCBvciBhbm9uIGluc2lkZSBpLCBtLCBlLCBhLCB0KQotICogCi0gKiBOb3QgcGFydCBvZiB0aGUgc3BlYywgYnV0IHdlIHRyZWF0IGFzIGNvbXBvbmVudHM6Ci0gKiBkID0gZG9jdW1lbnQgdHlwZSBkZWZpbml0aW9uIChuYW1lZCwgZ2xvYmFsIG9ubHkpCi0gKiBiID0gYXR0cmlidXRlLWNvbnRhaW5lciB0eXBlIGRlZmluaXRpb24gKG5hbWVkLCBnbG9iYWwgb25seSkKLSAqIG0gPSB1bmlvbiBtZW1iZXIgZGVmaW5pdGlvbiAobnVtYmVyZWQsIGluc2lkZSB0IG9ubHkpCi0gKiB5ID0gc29hcCBhcnJheSBvZiBkaW1lbnNpb24gbiAobnVtYmVyZWQsIHJlZmVyZW5jaW5nIGdsb2JhbCB0IG9yIGFub3RoZXIgeSBvbmx5KQotICoKLSAqIEEgY2Fub25pY2FsIHNpZ25hdHVyZSB3aWxsIHNob3J0Y3V0IHRoZSBmb2xsb3dpbmc6Ci0gKiAKLSAqIC0gZ2xvYmFsIGVsZW1lbnRzIGRvIG5vdCBuZWVkIHRvIGJlIGV4cGxpY2l0bHkgbmVzdGVkIGluc2lkZSB0aGVpcgotICogICBjb250YWluaW5nIGRvY3VtZW50IHR5cGVzIChlPW5hbWV8ZD1uYW1lQG5hbWVzcGFjZSAtPiBlPW5hbWVAbmFtZXNwYWNlKQotICogLSBnbG9iYWwgYXR0cmlidXRlcyBkbyBub3QgbmVlZCB0byBiZSBleHBsaWNpdGx5IG5lc3RlZCBpbnNpZGUgdGhlaXIKLSAqICAgY29udGFpbmluZyBhdHRyaWJ1dGUgdHlwZXMgKGU9bmFtZXxkPW5hbWVAbmFtZXNwYWNlIC0+IGU9bmFtZUBuYW1lc3BhY2UpCi0gKiAtIGFuIGVsZW1lbnQgb2YgYSB0eXBlLCBpZiBpdHMgbmFtZSBpcyB1bmlxdWUsIG1heSBiZSByZWZlcmVuY2VkIHdpdGhvdXQgdGhlCi0gKiAgIGludGVydmVuaW5nIHBhcnRpY2xlIHBhdGguICAoZS5nLiwgZT1uYW1lMnxwLjN8c3xwLjV8Y3xwLjB8dCBjYW4gYmUKLSAqICAgcmVkdWNlZCB0byBlPW5hbWUyfHQpCi0gKiAtIGFuIGF0dHJpYnV0ZSBvZiBhIHR5cGUgbWF5IGJlIHJlZmVyZW5jZWQgd2l0aG91dCBleHBsaWNpdGx5IHB1dHRpbmcgaXQKLSAqICAgaW5zaWRlIGFuIGF0dHJpYnV0ZSB1c2UgKGUuZy4sIGEtbmFtZTF8di1uYW1lMXx0IC0+IGEtbmFtZTF8dCkKLSAqIAotICogTm90aWNlIFNPQVAgYXJyYXlzIGFyZSBpbmNsdWRlZCBpbiB0aGUgbmFtaW5nIHNjaGVtYSwgYXMgZm9sbG93czoKLSAqIAotICogQSBzb2FwIGFycmF5IHR5cGUgd3JpdHRlbiBsaWtlIHRoaXM6Ci0gKiAgICAgeDpkcmdbLCwsXVssXVssLF0KLSAqIAotICogSGFzIHRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlOgotICogICAgIHkuM3x5LjJ8eS40fHQ9ZHJnQGZvb2JhcgotICovCi1wdWJsaWMgY2xhc3MgWG1sTmFtZQotewotICAgIHByaXZhdGUgU3RyaW5nIG5hbWVzcGFjZTsKLSAgICBwcml2YXRlIFN0cmluZyBwYXRoOwotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2hhciBOT1RBVElPTiA9ICduJzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNoYXIgRUxFTUVOVCA9ICdlJzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNoYXIgSURfQ09OU1RSQUlOVCA9ICdrJzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNoYXIgTU9ERUxfR1JPVVAgPSAnZyc7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjaGFyIEFMTCA9ICdsJzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNoYXIgU0VRVUVOQ0UgPSAncyc7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjaGFyIENIT0lDRSA9ICdjJzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNoYXIgUEFSVElDTEUgPSAncCc7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjaGFyIFdJTERDQVJEID0gJ3cnOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2hhciBBVFRSSUJVVEVfVVNFID0gJ3YnOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2hhciBBVFRSSUJVVEUgPSAnYSc7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjaGFyIEFUVFJJQlVURV9HUk9VUCA9ICdyJzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNoYXIgVFlQRSA9ICd0JzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNoYXIgRE9DVU1FTlRfVFlQRSA9ICdkJzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNoYXIgQVRUUklCVVRFX1RZUEUgPSAnYic7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjaGFyIE1FTUJFUiA9ICdtJzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNoYXIgU09BUF9BUlJBWSA9ICd5JzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNoYXIgTk9fVFlQRSA9ICd6JzsKLSAgICAKLSAgICAvKioKLSAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc2VlIGlmIGEgcGF0aCBpcyB2YWxpZCBvciBub3QuCi0gICAgICovIAotICAgIHB1YmxpYyBib29sZWFuIHZhbGlkKCkKLSAgICB7Ci0gICAgICAgIFhtbE5hbWUgb3V0ZXJDb21wb25lbnQgPSBudWxsOwotICAgICAgICBpbnQgb3V0ZXJUeXBlID0gMDsKLSAgICAgICAgU3RyaW5nIGxvY2FsTmFtZSA9IGludGVybmFsR2V0U3RyaW5nTmFtZSgpOwotICAgICAgICAKLSAgICAgICAgYm9vbGVhbiBoYXNOdW1iZXIgPSBpbnRlcm5hbEdldE51bWJlcigpID49IDA7Ci0gICAgICAgIGJvb2xlYW4gaGFzTmFtZSA9IChsb2NhbE5hbWUgIT0gbnVsbCk7Ci0gICAgICAgIGJvb2xlYW4gaXNBbm9ueW1vdXMgPSBpbnRlcm5hbElzQW5vbnltb3VzKCk7Ci0gICAgICAgIGJvb2xlYW4gaXNRdWFsaWZpZWQgPSBpbnRlcm5hbElzUXVhbGlmaWVkKCk7Ci0gICAgICAgIGJvb2xlYW4gaXNHbG9iYWwgPSBpc0dsb2JhbCgpOwotICAgIAotICAgICAgICBpZiAoIWlzR2xvYmFsKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRlckNvbXBvbmVudCA9IGdldE91dGVyQ29tcG9uZW50KCk7Ci0gICAgICAgICAgICBvdXRlclR5cGUgPSBvdXRlckNvbXBvbmVudC5nZXRDb21wb25lbnRUeXBlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGJvb2xlYW4gcmVzdWx0OwotICAgICAgICAKLSAgICAgICAgaWYgKGxvY2FsTmFtZSAhPSBudWxsICYmICFYTUxDaGFyLmlzVmFsaWROQ05hbWUobG9jYWxOYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAoZ2V0Q29tcG9uZW50VHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIE5PVEFUSU9OOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IChpc0dsb2JhbCAmJiBoYXNOYW1lICYmIGlzUXVhbGlmaWVkKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgRUxFTUVOVDoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSAoaGFzTmFtZSAmJiAoaXNHbG9iYWwgJiYgaXNRdWFsaWZpZWQgfHwgb3V0ZXJUeXBlID09IFRZUEUgfHwgb3V0ZXJUeXBlID09IFBBUlRJQ0xFKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIElEX0NPTlNUUkFJTlQ6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gKGhhc05hbWUgJiYgb3V0ZXJUeXBlID09IEVMRU1FTlQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBNT0RFTF9HUk9VUDoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSAoaGFzTmFtZSAmJiBpc0dsb2JhbCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFMTDoKLSAgICAgICAgICAgIGNhc2UgU0VRVUVOQ0U6Ci0gICAgICAgICAgICBjYXNlIENIT0lDRToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSAoaXNBbm9ueW1vdXMgJiYgKG91dGVyVHlwZSA9PSBQQVJUSUNMRSB8fCBvdXRlclR5cGUgPT0gTU9ERUxfR1JPVVApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgUEFSVElDTEU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gKGhhc051bWJlciAmJiAob3V0ZXJUeXBlID09IFNFUVVFTkNFIHx8IG91dGVyVHlwZSA9PSBDSE9JQ0UgfHwgb3V0ZXJUeXBlID09IEFMTCB8fCBvdXRlclR5cGUgPT0gVFlQRSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBXSUxEQ0FSRDoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSAoaXNBbm9ueW1vdXMgJiYgKG91dGVyVHlwZSA9PSBQQVJUSUNMRSB8fCBvdXRlclR5cGUgPT0gVFlQRSB8fCBvdXRlclR5cGUgPT0gQVRUUklCVVRFX0dST1VQKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFUVFJJQlVURV9VU0U6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gKGhhc05hbWUgJiYgKG91dGVyVHlwZSA9PSBUWVBFIHx8IG91dGVyVHlwZSA9PSBBVFRSSUJVVEVfR1JPVVApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQVRUUklCVVRFOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IChoYXNOYW1lICYmIChpc0dsb2JhbCAmJiBpc1F1YWxpZmllZCB8fCBvdXRlclR5cGUgPT0gVFlQRSB8fCBvdXRlclR5cGUgPT0gQVRUUklCVVRFX1VTRSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBVFRSSUJVVEVfR1JPVVA6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gKGhhc05hbWUgJiYgaXNRdWFsaWZpZWQgJiYgaXNHbG9iYWwpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBUWVBFOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9ICgoaGFzTmFtZSAmJiBpc1F1YWxpZmllZCAmJiBpc0dsb2JhbCkgfHwgKGlzQW5vbnltb3VzICYmIG91dGVyVHlwZSA9PSBUWVBFIHx8IG91dGVyVHlwZSA9PSBFTEVNRU5UIHx8IG91dGVyVHlwZSA9PSBBVFRSSUJVVEUgfHwgb3V0ZXJUeXBlID09IE1FTUJFUikpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBET0NVTUVOVF9UWVBFOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IChoYXNOYW1lICYmIGlzUXVhbGlmaWVkICYmIGlzR2xvYmFsKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQVRUUklCVVRFX1RZUEU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gKGhhc05hbWUgJiYgaXNRdWFsaWZpZWQgJiYgaXNHbG9iYWwpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBNRU1CRVI6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gKGlzQW5vbnltb3VzICYmIG91dGVyVHlwZSA9PSBUWVBFKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgU09BUF9BUlJBWToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSAoaGFzTnVtYmVyICYmIChvdXRlclR5cGUgPT0gU09BUF9BUlJBWSB8fCBvdXRlclR5cGUgPT0gVFlQRSAmJiBvdXRlckNvbXBvbmVudC5pc0dsb2JhbCgpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIE5PX1RZUEU6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gKGlzQW5vbnltb3VzICYmIGlzR2xvYmFsICYmIG5hbWVzcGFjZS5sZW5ndGgoKSA9PSAwKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNHbG9iYWwpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBvdXRlckNvbXBvbmVudC52YWxpZCgpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGFuIFhNTE5hbWUgYmFzZWQgb24gdGhlIGdpdmVuIFN0cmluZyBzaWduYXR1cmUuCi0gICAgICogCi0gICAgICogVGhpcyBzaWduYXR1cmUgaXMgZGVzY3JpYmVkIGluIHRoZSBqYXZhZG9jIGZvciB0aGlzIGNsYXNzLgotICAgICAqLyAKLSAgICBwdWJsaWMgc3RhdGljIFhtbE5hbWUgZm9yU3RyaW5nKFN0cmluZyBzaWduYXR1cmUpCi0gICAgewotICAgICAgICBTdHJpbmcgcGF0aDsKLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZTsKLSAgICAgICAgaW50IGF0U2lnbiA9IHNpZ25hdHVyZS5pbmRleE9mKCdAJyk7Ci0gICAgICAgIGlmIChhdFNpZ24gPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lc3BhY2UgPSAiIjsKLSAgICAgICAgICAgIHBhdGggPSBzaWduYXR1cmU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lc3BhY2UgPSBzaWduYXR1cmUuc3Vic3RyaW5nKGF0U2lnbiArIDEpOwotICAgICAgICAgICAgcGF0aCA9IHNpZ25hdHVyZS5zdWJzdHJpbmcoMCwgYXRTaWduKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZm9yUGF0aEFuZE5hbWVzcGFjZShwYXRoLCBuYW1lc3BhY2UpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGFuIFhNTE5hbWUgZm9yIGEgc2NoZW1hIHR5cGUgd2l0aCB0aGUgZ2l2ZW4gZnVsbHktcXVhbGlmaWVkIFFOYW1lLgotICAgICAqLyAKLSAgICBwdWJsaWMgc3RhdGljIFhtbE5hbWUgZm9yVHlwZU5hbWVkKFFOYW1lIG5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gZm9yUGF0aEFuZE5hbWVzcGFjZShUWVBFICsgIj0iICsgbmFtZS5nZXRMb2NhbFBhcnQoKSwgbmFtZS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYW4gWE1MTmFtZSBmb3IgYSBnbG9iYWwgc2NoZW1hIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gZnVsbHktcXVhbGlmaWVkIFFOYW1lLgotICAgICAqLyAKLSAgICBwdWJsaWMgc3RhdGljIFhtbE5hbWUgZm9yR2xvYmFsTmFtZShjaGFyIGtpbmQsIFFOYW1lIG5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gZm9yUGF0aEFuZE5hbWVzcGFjZShraW5kICsgIj0iICsgbmFtZS5nZXRMb2NhbFBhcnQoKSwgbmFtZS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYW4gWE1MTmFtZSBmb3IgYSBuZXN0ZWQgY29tcG9uZW50Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBYbWxOYW1lIGZvck5lc3RlZE5hbWUoY2hhciBraW5kLCBTdHJpbmcgbG9jYWxOYW1lLCBib29sZWFuIHF1YWxpZmllZCwgWG1sTmFtZSBvdXRlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBmb3JQYXRoQW5kTmFtZXNwYWNlKGtpbmQgKyAocXVhbGlmaWVkID8gIj0iIDogIi0iKSArIGxvY2FsTmFtZSArICJ8IiArIG91dGVyLnBhdGgsIG91dGVyLm5hbWVzcGFjZSk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYW4gWE1MTmFtZSBmb3IgYSBuZXN0ZWQgY29tcG9uZW50Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBYbWxOYW1lIGZvck5lc3RlZE51bWJlcihjaGFyIGtpbmQsIGludCBuLCBYbWxOYW1lIG91dGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZvclBhdGhBbmROYW1lc3BhY2Uoa2luZCArICIuIiArIG4gKyAifCIgKyBvdXRlci5wYXRoLCBvdXRlci5uYW1lc3BhY2UpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYW4gWE1MTmFtZSBmb3IgYSBuZXN0ZWQgY29tcG9uZW50Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBYbWxOYW1lIGZvck5lc3RlZEFub255bW91cyhjaGFyIGtpbmQsIFhtbE5hbWUgb3V0ZXIpCi0gICAgewotICAgICAgICByZXR1cm4gZm9yUGF0aEFuZE5hbWVzcGFjZShraW5kICsgInwiICsgb3V0ZXIucGF0aCwgb3V0ZXIubmFtZXNwYWNlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGFuIFhNTE5hbWUgZm9yIGEgcGFydGljdWxhciBzY2hlbWEgdHlwZQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgWG1sTmFtZSBmb3JTY2hlbWFUeXBlKFNjaGVtYVR5cGUgc1R5cGUpCi0gICAgewotICAgICAgICBpZiAoc1R5cGUuZ2V0TmFtZSgpICE9IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gZm9yVHlwZU5hbWVkKHNUeXBlLmdldE5hbWUoKSk7Ci0KLSAgICAgICAgaWYgKHNUeXBlLmlzRG9jdW1lbnRUeXBlKCkpCi0gICAgICAgICAgICByZXR1cm4gZm9yR2xvYmFsTmFtZShET0NVTUVOVF9UWVBFLCBzVHlwZS5nZXREb2N1bWVudEVsZW1lbnROYW1lKCkpOwotCi0gICAgICAgIGlmIChzVHlwZS5pc0F0dHJpYnV0ZVR5cGUoKSkKLSAgICAgICAgICAgIHJldHVybiBmb3JHbG9iYWxOYW1lKEFUVFJJQlVURV9UWVBFLCBzVHlwZS5nZXRBdHRyaWJ1dGVUeXBlQXR0cmlidXRlTmFtZSgpKTsKLQotICAgICAgICBpZiAoc1R5cGUuaXNOb1R5cGUoKSB8fCBzVHlwZS5nZXRPdXRlclR5cGUoKSA9PSBudWxsKSAvLyBsYXR0ZXIgaXMgYW4gZXJyb3IKLSAgICAgICAgICAgIHJldHVybiBmb3JQYXRoQW5kTmFtZXNwYWNlKCIiICsgTk9fVFlQRSwgIiIpOwotICAgICAgICAKLSAgICAgICAgU2NoZW1hVHlwZSBvdXRlclR5cGUgPSBzVHlwZS5nZXRPdXRlclR5cGUoKTsKLSAgICAgICAgWG1sTmFtZSBvdXRlck5hbWUgPSBmb3JTY2hlbWFUeXBlKG91dGVyVHlwZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoc1R5cGUuZ2V0Q29udGFpbmVyRmllbGQoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBib29sZWFuIHF1YWxpZmllZCA9IHNUeXBlLmdldENvbnRhaW5lckZpZWxkKCkuZ2V0TmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpLmxlbmd0aCgpID4gMDsKLSAgICAgICAgICAgIFN0cmluZyBsb2NhbE5hbWUgPSBzVHlwZS5nZXRDb250YWluZXJGaWVsZCgpLmdldE5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICAgIGNoYXIga2luZCA9IChzVHlwZS5nZXRDb250YWluZXJGaWVsZCgpLmlzQXR0cmlidXRlKCkgPyBBVFRSSUJVVEUgOiBFTEVNRU5UKTsKLSAgICAgICAgICAgIHJldHVybiBmb3JOZXN0ZWRBbm9ueW1vdXMoVFlQRSwgZm9yTmVzdGVkTmFtZShraW5kLCBsb2NhbE5hbWUsIHF1YWxpZmllZCwgb3V0ZXJOYW1lKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChvdXRlclR5cGUuZ2V0U2ltcGxlVmFyaWV0eSgpID09IFNjaGVtYVR5cGUuVU5JT04pCi0gICAgICAgICAgICByZXR1cm4gZm9yTmVzdGVkQW5vbnltb3VzKFRZUEUsIGZvck5lc3RlZE51bWJlcihNRU1CRVIsIHNUeXBlLmdldEFub255bW91c1VuaW9uTWVtYmVyT3JkaW5hbCgpLCBvdXRlck5hbWUpKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBmb3JOZXN0ZWRBbm9ueW1vdXMoVFlQRSwgb3V0ZXJOYW1lKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBvbmUgZm9yIGEgU09BUEFycmF5VHlwZQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgWG1sTmFtZSBmb3JTb2FwQXJyYXlUeXBlKFNPQVBBcnJheVR5cGUgc1R5cGUpCi0gICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIHNiLmFwcGVuZChTT0FQX0FSUkFZICsgIi4iICsgc1R5cGUuZ2V0RGltZW5zaW9ucygpLmxlbmd0aCk7Ci0gICAgICAgIGludFtdIHJhbmtzID0gc1R5cGUuZ2V0UmFua3MoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IHJhbmtzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS09IDEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNiLmFwcGVuZCgifCIgKyBTT0FQX0FSUkFZICsgIi4iICsgcmFua3NbaV0pOwotICAgICAgICB9Ci0gICAgICAgIFFOYW1lIG5hbWUgPSBzVHlwZS5nZXRRTmFtZSgpOwotICAgICAgICBzYi5hcHBlbmQoInwiICsgVFlQRSArICI9IiArIG5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgICByZXR1cm4gZm9yUGF0aEFuZE5hbWVzcGFjZShzYi50b1N0cmluZygpLCBuYW1lLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiBpdCBpcyBhIHNjaGVtYSB0eXBlCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNTY2hlbWFUeXBlKCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoZ2V0Q29tcG9uZW50VHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFRZUEU6Ci0gICAgICAgICAgICBjYXNlIERPQ1VNRU5UX1RZUEU6Ci0gICAgICAgICAgICBjYXNlIEFUVFJJQlVURV9UWVBFOgotICAgICAgICAgICAgY2FzZSBOT19UWVBFOgotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogRmluZHMgYSB0eXBlIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0gICAgICovCi0gICAgcHVibGljIFNjaGVtYVR5cGUgZmluZFR5cGVJbihTY2hlbWFUeXBlTG9hZGVyIGxvYWRlcikKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoZ2V0Q29tcG9uZW50VHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIE5PX1RZUEU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLk5PX1RZUEU7Ci0gICAgICAgICAgICBjYXNlIERPQ1VNRU5UX1RZUEU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRlci5maW5kRG9jdW1lbnRUeXBlKGdldFFOYW1lKCkpOwotICAgICAgICAgICAgY2FzZSBBVFRSSUJVVEVfVFlQRToKLSAgICAgICAgICAgICAgICByZXR1cm4gbG9hZGVyLmZpbmRBdHRyaWJ1dGVUeXBlKGdldFFOYW1lKCkpOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIGNhc2UgVFlQRToKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGlzR2xvYmFsKCkpCi0gICAgICAgICAgICByZXR1cm4gbG9hZGVyLmZpbmRUeXBlKGdldFFOYW1lKCkpOwotCi0gICAgICAgIFhtbE5hbWUgb3V0ZXJOYW1lID0gZ2V0T3V0ZXJDb21wb25lbnQoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIGlmIHRoZSBjb21wb25lbnQgaXMgY29udGFpbmVkIHdpdGhpbiBhIHR5cGUsIGdldCBpdAotICAgICAgICBmb3IgKFhtbE5hbWUgb3V0ZXJUeXBlTmFtZSA9IG91dGVyTmFtZTsgOyBvdXRlclR5cGVOYW1lID0gb3V0ZXJUeXBlTmFtZS5nZXRPdXRlckNvbXBvbmVudCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAob3V0ZXJUeXBlTmFtZS5pc1NjaGVtYVR5cGUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTY2hlbWFUeXBlIG91dGVyVHlwZSA9IG91dGVyVHlwZU5hbWUuZmluZFR5cGVJbihsb2FkZXIpOwotICAgICAgICAgICAgICAgIHN3aXRjaCAob3V0ZXJOYW1lLmdldENvbXBvbmVudFR5cGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJJbGxlZ2FsIHR5cGUgbmFtZSAiICsgdGhpcyk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgVFlQRToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXRlclR5cGUuZ2V0QW5vbnltb3VzVHlwZXMoKVswXTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFTEVNRU5UOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dGVyVHlwZS5nZXRFbGVtZW50VHlwZShvdXRlck5hbWUuZ2V0UU5hbWUoKSwgbnVsbCwgbG9hZGVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIEFUVFJJQlVURToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXRlclR5cGUuZ2V0QXR0cmlidXRlVHlwZShvdXRlck5hbWUuZ2V0UU5hbWUoKSwgbG9hZGVyKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBNRU1CRVI6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0ZXJUeXBlLmdldEFub255bW91c1R5cGVzKClbb3V0ZXJOYW1lLmdldE51bWJlcigpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob3V0ZXJUeXBlTmFtZS5pc0dsb2JhbCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN3aXRjaCAob3V0ZXJOYW1lLmdldENvbXBvbmVudFR5cGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJJbGxlZ2FsIHR5cGUgbmFtZSAiICsgdGhpcyk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgRUxFTUVOVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2FkZXIuZmluZERvY3VtZW50VHlwZShvdXRlclR5cGVOYW1lLmdldFFOYW1lKCkpLmdldEVsZW1lbnRUeXBlKG91dGVyVHlwZU5hbWUuZ2V0UU5hbWUoKSwgbnVsbCwgbG9hZGVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIEFUVFJJQlVURToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2FkZXIuZmluZEF0dHJpYnV0ZVR5cGUob3V0ZXJUeXBlTmFtZS5nZXRRTmFtZSgpKS5nZXRBdHRyaWJ1dGVUeXBlKG91dGVyVHlwZU5hbWUuZ2V0UU5hbWUoKSwgbG9hZGVyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgWG1sTmFtZSBmb3JQYXRoQW5kTmFtZXNwYWNlKFN0cmluZyBwYXRoLCBTdHJpbmcgbmFtZXNwYWNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBYbWxOYW1lKHBhdGgsIG5hbWVzcGFjZSk7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgWG1sTmFtZShTdHJpbmcgcGF0aCwgU3RyaW5nIG5hbWVzcGFjZSkKLSAgICB7Ci0gICAgICAgIGlmIChwYXRoID09IG51bGwgfHwgbmFtZXNwYWNlID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7Ci0gICAgICAgIAotICAgICAgICB0aGlzLnBhdGggPSBwYXRoOwotICAgICAgICB0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGJvb2xlYW4gaXNHbG9iYWwoKQotICAgIHsKLSAgICAgICAgaW50IGluZGV4ID0gcGF0aC5pbmRleE9mKCd8Jyk7Ci0gICAgICAgIHJldHVybiBpbmRleCA8IDA7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBYbWxOYW1lIGdldE91dGVyQ29tcG9uZW50KCkKLSAgICB7Ci0gICAgICAgIGludCBpbmRleCA9IHBhdGguaW5kZXhPZignfCcpOwotICAgICAgICBpZiAoaW5kZXggPCAwKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHJldHVybiBmb3JQYXRoQW5kTmFtZXNwYWNlKHBhdGguc3Vic3RyaW5nKGluZGV4ICsgMSksIG5hbWVzcGFjZSk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBpbnQgZ2V0Q29tcG9uZW50VHlwZSgpCi0gICAgewotICAgICAgICBpZiAocGF0aC5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICByZXR1cm4gcGF0aC5jaGFyQXQoMCk7Ci0gICAgICAgIHJldHVybiAwOyAvLyB1bmtub3duIHR5cGUKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBuZWdhdGl2ZSBpZiB0aGVyZSBpcyBubyBudW1iZXIKLSAgICAgKi8gCi0gICAgcHJpdmF0ZSBpbnQgaW50ZXJuYWxHZXROdW1iZXIoKQotICAgIHsKLSAgICAgICAgaWYgKHBhdGgubGVuZ3RoKCkgPD0gMSB8fCBwYXRoLmNoYXJBdCgxKSAhPSAnLicpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIAotICAgICAgICBpbnQgaW5kZXggPSBwYXRoLmluZGV4T2YoJ3wnKTsKLSAgICAgICAgaWYgKGluZGV4IDwgMCkKLSAgICAgICAgICAgIGluZGV4ID0gcGF0aC5sZW5ndGgoKTsKLSAgICAgICAgCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSW50ZWdlci5wYXJzZUludChwYXRoLnN1YnN0cmluZygyLCBpbmRleCkpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIG51bWJlciBsb2NhdGluZyB0aGlzIGNvbXBvbmVudCB3aXRoaW4gaXRzIHBhcmVudCwKLSAgICAgKiBvciB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZXJlIGlzIG5vbmUuICBPbmx5IHVuaW9uIG1lbWJlcnMgKG0pCi0gICAgICogYW5kIHBhcnRpY2xlcyAocCkgaGF2ZSBudW1iZXJzLgotICAgICAqLyAKLSAgICBwdWJsaWMgaW50IGdldE51bWJlcigpCi0gICAgewotICAgICAgICBpbnQgcmVzdWx0ID0gaW50ZXJuYWxHZXROdW1iZXIoKTsKLSAgICAgICAgaWYgKHJlc3VsdCA8IDApCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJQYXRoIGhhcyBubyBudW1iZXIiKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBTdHJpbmcgaW50ZXJuYWxHZXRTdHJpbmdOYW1lKCkKLSAgICB7Ci0gICAgICAgIGlmIChwYXRoLmxlbmd0aCgpIDw9IDEgfHwgcGF0aC5jaGFyQXQoMSkgIT0gJz0nICYmIHBhdGguY2hhckF0KDEpICE9ICctJykKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAKLSAgICAgICAgaW50IGluZGV4ID0gcGF0aC5pbmRleE9mKCd8Jyk7Ci0gICAgICAgIGlmIChpbmRleCA8IDApCi0gICAgICAgICAgICBpbmRleCA9IHBhdGgubGVuZ3RoKCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gcGF0aC5zdWJzdHJpbmcoMiwgaW5kZXgpOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIGJvb2xlYW4gaW50ZXJuYWxJc1F1YWxpZmllZCgpCi0gICAgewotICAgICAgICByZXR1cm4gKHBhdGgubGVuZ3RoKCkgPiAxICYmIHBhdGguY2hhckF0KDEpID09ICc9Jyk7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgYm9vbGVhbiBpbnRlcm5hbElzQW5vbnltb3VzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAocGF0aC5sZW5ndGgoKSA8PSAxIHx8IHBhdGguY2hhckF0KDEpID09ICd8Jyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbmFtZSBsb2NhdGluZyB0aGlzIGNvbXBvbmVudCB3aXRoaW4gaXRzIHBhcmVudCwgb3IKLSAgICAgKiByZXR1cm5zIG51bGwgaWYgdGhlcmUgaXMgbm9uZS4gIE5vdGljZSB0aGF0IGlmIGxvb2tpbmcgdXAgZWxlbWVudHMKLSAgICAgKiBieSBuYW1lIGluIGEgdHlwZSwgeW91IGdldCB0aGUgZmlyc3QgZWxlbWVudCBkZWZpbnRpb24gd2hlbiB0aGVyZQotICAgICAqIGFyZSBtdWx0aXBsZSBvbmVzLiAgQSBmdWxsIHBhcnRpY2xlIHBhdGggY2FuIGRpc2FtYmlndWF0ZS4KLSAgICAgKiAKLSAgICAgKiBUaGlzIG5hbWUgd2lsbCBiZSBxdWFsaWZpZWQgaW4gYSBuYW1lc3BhY2UgaWYgYXBwcm9wcmlhdGUsIGJ1dCwKLSAgICAgKiBmb3IgZXhhbXBsZSwgbG9jYWwgdW5xdWFsaWZpZWQgYXR0cmlidXRlcyB3aWxsIGhhdmUgYSBRTmFtZSB0aGF0Ci0gICAgICogaXMgdW5xdWFsaWZpZWQuCi0gICAgICogCi0gICAgICogRWxlbWVudCwgYXR0cmlidXRlcywgaWRlbnRpdHkgY29uc3RyYWludHMsIG1vZGVsL2F0dHJpYnV0ZSBncm91cHMsCi0gICAgICogYW5kIG5vdGF0aW9ucyBoYXZlIG5hbWVzLgotICAgICAqLyAKLSAgICBwdWJsaWMgUU5hbWUgZ2V0UU5hbWUoKQotICAgIHsKLSAgICAgICAgU3RyaW5nIGxvY2FsTmFtZSA9IGludGVybmFsR2V0U3RyaW5nTmFtZSgpOwotICAgICAgICBpZiAobG9jYWxOYW1lID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgCi0gICAgICAgIGlmIChpbnRlcm5hbElzUXVhbGlmaWVkKCkpCi0gICAgICAgICAgICByZXR1cm4gbmV3IFFOYW1lKG5hbWVzcGFjZSwgbG9jYWxOYW1lKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIG5ldyBRTmFtZShsb2NhbE5hbWUpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBzaWduYXR1cmUgc3RyaW5nLgotICAgICAqLyAKLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIGlmIChuYW1lc3BhY2UubGVuZ3RoKCkgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiBwYXRoOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHBhdGggKyAnQCcgKyBuYW1lc3BhY2U7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMgPT0gbykgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghKG8gaW5zdGFuY2VvZiBYbWxOYW1lKSkgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGZpbmFsIFhtbE5hbWUgeG1sTmFtZSA9IChYbWxOYW1lKSBvOwotCi0gICAgICAgIGlmICghbmFtZXNwYWNlLmVxdWFscyh4bWxOYW1lLm5hbWVzcGFjZSkpIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFwYXRoLmVxdWFscyh4bWxOYW1lLnBhdGgpKSByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBoYXNoQ29kZSgpCi0gICAgewotICAgICAgICBpbnQgcmVzdWx0OwotICAgICAgICByZXN1bHQgPSBuYW1lc3BhY2UuaGFzaENvZGUoKTsKLSAgICAgICAgcmVzdWx0ID0gMjkgKiByZXN1bHQgKyBwYXRoLmhhc2hDb2RlKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvY29tcGlsZS9CaW5kaW5nRmlsZUdlbmVyYXRvci5qYXZhIGIvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvY29tcGlsZS9CaW5kaW5nRmlsZUdlbmVyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2NhMDQzLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2NvbXBpbGUvQmluZGluZ0ZpbGVHZW5lcmF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmNvbXBpbGU7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotCi1wdWJsaWMgaW50ZXJmYWNlIEJpbmRpbmdGaWxlR2VuZXJhdG9yCi17Ci0gICAgdm9pZCBwcmludEJpbmRpbmdGaWxlKE91dHB1dFN0cmVhbSBvdXRwdXQpIHRocm93cyBJT0V4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2NvbXBpbGUvRXhwbG9kZWRUeWxhckJ1aWxkZXIuamF2YSBiL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2NvbXBpbGUvRXhwbG9kZWRUeWxhckJ1aWxkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI2NjlkMy4uMDAwMDAwMAotLS0gYS92Mi9zcmMvYmluZGluZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvYmluZGluZy9jb21waWxlL0V4cGxvZGVkVHlsYXJCdWlsZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmNvbXBpbGU7Ci0KLWltcG9ydCBvcmcudzMueDIwMDEueG1sU2NoZW1hLlNjaGVtYURvY3VtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0cy5CaW5kaW5nRmlsZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLngyMDAzLngwOS5iaW5kaW5nQ29uZmlnLkJpbmRpbmdDb25maWdEb2N1bWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQuQnVpbGRFeGNlcHRpb247Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLS8qKgotICogU2ltcGxlIGltcGxlbWVudGF0aW9uIG9mIFR5bGFyQnVpbGRlciB0aGF0IGp1c3QgZHVtcHMgZXZlcnl0aGluZyBpbiBhCi0gKiBkaXJlY3RvcnkuCi0gKgotICogQGF1dGhvciBQYXRyaWNrIENhbGFoYW4gPHBjYWxAYmVhLmNvbT4KLSAqLwotcHVibGljIGNsYXNzIEV4cGxvZGVkVHlsYXJCdWlsZGVyIGltcGxlbWVudHMgVHlsYXJCdWlsZGVyIHsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIENvbnN0YW50cwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBYTUxfSU5ERU5UID0gMjsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFZhcmlhYmxlcwotCi0gIHByaXZhdGUgRmlsZSBtRGlyOwotICBwcml2YXRlIExpc3QgbVNjaGVtYXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByaXZhdGUgTGlzdCBtQmluZGluZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBDb25zdHJ1Y3RvcnMKLQotICBwdWJsaWMgRXhwbG9kZWRUeWxhckJ1aWxkZXIoRmlsZSBkaXIpIHsKLSAgICBpZiAoZGlyID09IG51bGwpIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm51bGwgZGlyIik7Ci0gICAgaWYgKCFkaXIuZXhpc3RzKCkpIHsKLSAgICAgIGlmICghZGlyLm1rZGlycygpKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImZhaWxlZCB0byBjcmVhdGUgZGlyICIrZGlyKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgaWYgKCFkaXIuaXNEaXJlY3RvcnkoKSkKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibm90IGEgZGlyZWN0b3J5OiAiK2Rpcik7Ci0gICAgfQotICAgIG1EaXIgPSBkaXI7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFR5bGFyQnVpbGRlciBpbXBsZW1lbnRhdGlvbgotCi0gIHB1YmxpYyB2b2lkIGFkZFNjaGVtYShTY2hlbWFEb2N1bWVudCBzZCkgewotICAgIG1TY2hlbWFzLmFkZChzZCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRCaW5kaW5nRmlsZShCaW5kaW5nRmlsZSBiZikgewotICAgIG1CaW5kaW5ncy5hZGQoYmYpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY29tcGxldGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHdyaXRlQmluZGluZ0ZpbGVzKCk7Ci0gICAgd3JpdGVTY2hlbWFzKCk7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFByaXZhdGUgbWV0aG9kcwotCi0gIHByaXZhdGUgdm9pZCB3cml0ZUJpbmRpbmdGaWxlcygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgaW50IG51bSA9IDA7IC8vIEZJWE1FIG5lZWQgcmVhbCBuYW1pbmcgcnVsZXMKLSAgICBmb3IoSXRlcmF0b3IgaSA9IG1CaW5kaW5ncy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgbnVtKyspIHsKLSAgICAgIEJpbmRpbmdGaWxlIGJmID0gKEJpbmRpbmdGaWxlKWkubmV4dCgpOwotICAgICAgQmluZGluZ0NvbmZpZ0RvY3VtZW50IGRvYyA9IGJmLndyaXRlKCk7Ci0gICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShtRGlyLCJiaW5kaW5nLWZpbGUiKyhudW0gIT0gMCA/ICIiK251bSA6ICIiKSsiLnhtbCIpOwotICAgICAgRmlsZU91dHB1dFN0cmVhbSBvdXQ7Ci0gICAgICBvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShmaWxlKTsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGRvYy5zYXZlKG91dCwKLSAgICAgICAgICAgICAgICAgbmV3IFhtbE9wdGlvbnMoKS5zZXRTYXZlUHJldHR5UHJpbnQoKS4KLSAgICAgICAgICAgICAgICAgc2V0U2F2ZVByZXR0eVByaW50SW5kZW50KFhNTF9JTkRFTlQpKTsKLSAgICAgIH0gY2F0Y2goSU9FeGNlcHRpb24gZSkgewotICAgICAgICB0aHJvdyBlOwotICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBvdXQuY2xvc2UoKTsKLSAgICAgICAgfSBjYXRjaChJT0V4Y2VwdGlvbiBpb2UpIHsKLSAgICAgICAgICBpb2UucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgd3JpdGVTY2hlbWFzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICBpbnQgbnVtID0gMDsgLy8gRklYTUUgbmVlZCByZWFsIG5hbWluZyBydWxlcwotICAgIGZvcihJdGVyYXRvciBpID0gbVNjaGVtYXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7IG51bSsrKSB7Ci0gICAgICBTY2hlbWFEb2N1bWVudCBzZCA9IChTY2hlbWFEb2N1bWVudClpLm5leHQoKTsKLSAgICAgIEZpbGUgZmlsZSA9IG5ldyBGaWxlKG1EaXIsInNjaGVtYSIrKG51bSAhPSAwID8gIiIrbnVtIDogIiIpKyIueHNkIik7Ci0gICAgICBGaWxlT3V0cHV0U3RyZWFtIG91dDsKLSAgICAgIG91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGZpbGUpOwotICAgICAgdHJ5IHsKLSAgICAgICAgc2Quc2F2ZShvdXQsCi0gICAgICAgICAgICAgICAgbmV3IFhtbE9wdGlvbnMoKS5zZXRTYXZlUHJldHR5UHJpbnQoKS4KLSAgICAgICAgICAgICAgICBzZXRTYXZlUHJldHR5UHJpbnRJbmRlbnQoWE1MX0lOREVOVCkpOwotICAgICAgfSBjYXRjaChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHRocm93IGU7Ci0gICAgICB9IGZpbmFsbHkgewotICAgICAgICB0cnkgewotICAgICAgICAgIG91dC5jbG9zZSgpOwotICAgICAgICB9IGNhdGNoKElPRXhjZXB0aW9uIGlvZSkgewotICAgICAgICAgIGlvZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvY29tcGlsZS9KQVhSUENTY2hlbWFCaW5kZXIuamF2YSBiL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2NvbXBpbGUvSkFYUlBDU2NoZW1hQmluZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMmU5YWQuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvY29tcGlsZS9KQVhSUENTY2hlbWFCaW5kZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOTEgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuY29tcGlsZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0cy5CaW5kaW5nRmlsZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHMuQmluZGluZ1R5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzLkJpbmRpbmdMb2FkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzLlhtbE5hbWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzLkphdmFOYW1lOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0cy5CeU5hbWVCZWFuOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0cy5RTmFtZVByb3BlcnR5OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0cy5TaW1wbGVCaW5kaW5nVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHMuQmluZGluZ1R5cGVOYW1lOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmNvbXBpbGUuQmluZGluZ0ZpbGVHZW5lcmF0b3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuY29tcGlsZS5KYXZhQ29kZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5jb21waWxlLkphdmFDb2RlUHJpbnRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLk5hbWVVdGlsOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVTeXN0ZW07Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQcm9wZXJ0eTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUxvY2FsQXR0cmlidXRlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9uczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLnNvYXAuU09BUEFycmF5VHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLnNvYXAuU2NoZW1hV1NETEFycmF5VHlwZTsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5BYnN0cmFjdENvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotLyoqCi0gKiBUaGlzIGlzIHRoZSAiSkFYUlBDLXN0eWxlIiBTY2hlbWEtdG8tYnRzIGNvbXBpbGVyLgotICovIAotcHVibGljIGNsYXNzIEpBWFJQQ1NjaGVtYUJpbmRlciBpbXBsZW1lbnRzIEphdmFDb2RlR2VuZXJhdG9yLCBCaW5kaW5nRmlsZUdlbmVyYXRvciwgU2NoZW1hVG9KYXZhUmVzdWx0Ci17Ci0gICAgcHJpdmF0ZSBTZXQgdXNlZE5hbWVzID0gbmV3IEhhc2hTZXQoKTsKLSAgICBwcml2YXRlIFNjaGVtYVR5cGVTeXN0ZW0gc3RzOwotICAgIHByaXZhdGUgTWFwIHNjcmF0Y2hGcm9tWG1sTmFtZSA9IG5ldyBMaW5rZWRIYXNoTWFwKCk7Ci0gICAgcHJpdmF0ZSBNYXAgc2NyYXRjaEZyb21TY2hlbWFUeXBlID0gbmV3IEhhc2hNYXAoKTsgLy8gZm9yIGNvbnZlbmllbmNlCi0gICAgcHJpdmF0ZSBNYXAgc2NyYXRjaEZyb21KYXZhTmFtZVN0cmluZyA9IG5ldyBIYXNoTWFwKCk7IC8vIGZvciBwcmludGluZwotICAgIHByaXZhdGUgQmluZGluZ0xvYWRlciBwYXRoOwotICAgIHByaXZhdGUgaW50IHN0cnVjdHVyZUNvdW50OwotICAgIHByaXZhdGUgQmluZGluZ0ZpbGUgYmluZGluZ0ZpbGUgPSBuZXcgQmluZGluZ0ZpbGUoKTsKLQotICAgIHByaXZhdGUgSkFYUlBDU2NoZW1hQmluZGVyKFNjaGVtYVR5cGVTeXN0ZW0gc3RzLCBCaW5kaW5nTG9hZGVyIHBhdGgpCi0gICAgewotICAgICAgICB0aGlzLnN0cyA9IHN0czsKLSAgICAgICAgdGhpcy5wYXRoID0gcGF0aDsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogR2VuZXJhdGVzIGEgYmluZGluZyBmb3IgdGhlIGdpdmVuIHNldCBvZiBzY2hlbWEgdHlwZXMuCi0gICAgICogCi0gICAgICogRGVmZXIgdG8gYW55IHByZXZpb3VzbHkgZGVmaW5lZCBiaW5kaW5ncyBvbiB0aGUgQmluZGluZ0xvYWRlciBwYXRoCi0gICAgICogc3VwcGxpZWQuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBTY2hlbWFUb0phdmFSZXN1bHQgYmluZChTY2hlbWFUeXBlU3lzdGVtIHN0cywgQmluZGluZ0xvYWRlciBwYXRoKQotICAgIHsKLSAgICAgICAgSkFYUlBDU2NoZW1hQmluZGVyIGJpbmRlciA9IG5ldyBKQVhSUENTY2hlbWFCaW5kZXIoc3RzLCBwYXRoKTsKLSAgICAgICAgYmluZGVyLmJpbmQoKTsKLSAgICAgICAgcmV0dXJuIGJpbmRlcjsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ29tcHV0ZXMgdGhlIGJpbmRpbmcuCi0gICAgICovIAotICAgIHByaXZhdGUgdm9pZCBiaW5kKCkKLSAgICB7Ci0gICAgICAgIC8vIEV2ZXJ5IHR5cGUgb3IgZ2xvYmFsIGVsZW1lbnQgb3IgZ2xvYmFsIGF0dHJpYnV0ZSBpcyBkcm9wcGVkIGludG8KLSAgICAgICAgLy8gb25lIG9mIGEgbnVtYmVyIG9mIGNhdGVnb3JpZXMuICAoU2VlIFNjcmF0Y2ggY29uc3RhbnRzLikKLSAgICAgICAgLy8KLSAgICAgICAgLy8gQmFzZWQgb24gdGhlIGNhdGVnb3J5LCBhIGphdmEgY2xhc3MgaXMgZWl0aGVyIGRlZmluZWQgb3IgZm91bmQKLSAgICAgICAgLy8gdGhhdCBtYWNoZXMgd2l0aCB0aGUgc2NoZW1hIHR5cGUuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoZSBwaGFzZXMgd29yayBhcyBmb2xsb3dzOgotICAgICAgICAvLwotICAgICAgICAvLyAxLiBjYXRlZ29yaXplIGFuZCBhbGxvY2F0ZSBTY3JhdGNoZXMKLSAgICAgICAgLy8gMi4gd3JpdGUgb3IgZmluZCBqYXZhIG5hbWVzIGZvciBlYWNoIHhtbCB0eXBlCi0gICAgICAgIC8vIDMuIGFsbG9jYXRlIGJpbmRpbmcgdHlwZXMgZm9yIGVhY2ggc2NyYXRjaCAoZG9uZSBpbiB0aGUgc2FtZSBwYXNzIGFzIDIpCi0gICAgICAgIC8vIDQuIGZpbGwgaW4gdGhlIGphdmEgZ2V0dGVyL3NldHRlciBzdHJ1Y3R1cmUgb2YgYW55IGNvbXBsZXggdHlwZXMKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAvLyAxLiBjYXRlZ29yaXplIGFuZCBhbGxvY2F0ZSBTY3JhdGNoZXMKLSAgICAgICAgY3JlYXRlU2NyYXRjaEFyZWEoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIDIuIHdyaXRlIG9yIGZpbmQgamF2YSBuYW1lcyBmb3IgZWFjaCB4bWwgdHlwZQotICAgICAgICAvLyAzLiBhbGxvY2F0ZSBiaW5kaW5nIHR5cGVzIGZvciBlYWNoIHNjcmF0Y2ggKGRvbmUgaW4gdGhlIHNhbWUgcGFzcyBhcyAyKQotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBzY3JhdGNoSXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgU2NyYXRjaCBzY3JhdGNoID0gKFNjcmF0Y2gpaS5uZXh0KCk7IAotICAgICAgICAgICAgcmVzb2x2ZUphdmFOYW1lKHNjcmF0Y2gpOwotICAgICAgICAgICAgY3JlYXRlQmluZGluZ1R5cGUoc2NyYXRjaCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIDQuIGZpbGwgaW4gdGhlIGphdmEgZ2V0dGVyL3NldHRlciBzdHJ1Y3R1cmUgb2YgYW55IGNvbXBsZXggdHlwZXMKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gc2NyYXRjaEl0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc29sdmVKYXZhU3RydWN0dXJlKChTY3JhdGNoKWkubmV4dCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoaXMgZnVuY3Rpb24gZ29lcyB0aHJvdWdoIGFsbCByZWxldmFudCBzY2hlbWEgdHlwZXMsIHBsdXMgc29hcAotICAgICAqIGFycmF5IHR5cGVzLCBhbmQgY3JlYXRlcyBhIHNjcmF0Y2ggYXJlYSBmb3IgZWFjaC4gIEVhY2gKLSAgICAgKiBzY3JhdGNoIGFyZWEgaXMgYWxzbyBtYXJrZWQgYXQgdGhpcyB0aW1lIHdpdGggYW4gWG1sTmFtZSwKLSAgICAgKiBhIHNjaGVtYSB0eXBlLCBhbmQgYSBjYXRlZ29yeS4KLSAgICAgKi8gCi0gICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVNjcmF0Y2hBcmVhKCkKLSAgICB7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGFsbFR5cGVJdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICB7Ci0gICAgICAgICAgICBTY2hlbWFUeXBlIHNUeXBlID0gKFNjaGVtYVR5cGUpaS5uZXh0KCk7Ci0gICAgICAgICAgICBYbWxOYW1lIHhtbE5hbWUgPSBYbWxOYW1lLmZvclNjaGVtYVR5cGUoc1R5cGUpOwotICAgICAgICAgICAgU2NyYXRjaCBzY3JhdGNoOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc1R5cGUuaXNTaW1wbGVUeXBlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gc2ltcGxlIHR5cGVzIGFyZSBhdG9taWMKLSAgICAgICAgICAgICAgICAvLyB0b2RvOiB3aGF0IGFib3V0IHNpbXBsZSBjb250ZW50LCBjdXN0b20gY29kZWNzLCBldGM/Ci0gICAgICAgICAgICAgICAgc2NyYXRjaCA9IG5ldyBTY3JhdGNoKHNUeXBlLCB4bWxOYW1lLCBTY3JhdGNoLkFUT01JQ19UWVBFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHNUeXBlLmlzRG9jdW1lbnRUeXBlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc2NyYXRjaCA9IG5ldyBTY3JhdGNoKHNUeXBlLCBYbWxOYW1lLmZvckdsb2JhbE5hbWUoWG1sTmFtZS5FTEVNRU5ULCBzVHlwZS5nZXREb2N1bWVudEVsZW1lbnROYW1lKCkpLCBTY3JhdGNoLkVMRU1FTlQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoc1R5cGUuaXNBdHRyaWJ1dGVUeXBlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc2NyYXRjaCA9IG5ldyBTY3JhdGNoKHNUeXBlLCBYbWxOYW1lLmZvckdsb2JhbE5hbWUoWG1sTmFtZS5BVFRSSUJVVEUsIHNUeXBlLmdldERvY3VtZW50RWxlbWVudE5hbWUoKSksIFNjcmF0Y2guQVRUUklCVVRFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGlzU29hcEFycmF5KHNUeXBlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzY3JhdGNoID0gbmV3IFNjcmF0Y2goc1R5cGUsIHhtbE5hbWUsIFNjcmF0Y2guU09BUEFSUkFZX1JFRik7Ci0gICAgICAgICAgICAgICAgeG1sTmFtZSA9IHNvYXBBcnJheVR5cGVOYW1lKHNUeXBlKTsKLSAgICAgICAgICAgICAgICBzY3JhdGNoLnNldEFzSWYoeG1sTmFtZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gc29hcCBhcnJheXMgdW5yb2xsIGxpa2UgdGhpcwotICAgICAgICAgICAgICAgIHdoaWxlICh4bWxOYW1lLmdldENvbXBvbmVudFR5cGUoKSA9PSBYbWxOYW1lLlNPQVBfQVJSQVkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzY3JhdGNoID0gbmV3IFNjcmF0Y2gobnVsbCwgeG1sTmFtZSwgU2NyYXRjaC5TT0FQQVJSQVkpOwotICAgICAgICAgICAgICAgICAgICBzY3JhdGNoRnJvbVhtbE5hbWUucHV0KHhtbE5hbWUsIHNjcmF0Y2gpOwotICAgICAgICAgICAgICAgICAgICB4bWxOYW1lID0geG1sTmFtZS5nZXRPdXRlckNvbXBvbmVudCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGlzTGl0ZXJhbEFycmF5KHNUeXBlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzY3JhdGNoID0gbmV3IFNjcmF0Y2goc1R5cGUsIHhtbE5hbWUsIFNjcmF0Y2guTElURVJBTEFSUkFZX1RZUEUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNjcmF0Y2ggPSBuZXcgU2NyYXRjaChzVHlwZSwgeG1sTmFtZSwgU2NyYXRjaC5TVFJVQ1RfVFlQRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNjcmF0Y2hGcm9tWG1sTmFtZS5wdXQoeG1sTmFtZSwgc2NyYXRjaCk7Ci0gICAgICAgICAgICBzY3JhdGNoRnJvbVNjaGVtYVR5cGUucHV0KHNUeXBlLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENvbXB1dGVzIGEgSmF2YU5hbWUgZm9yIGVhY2ggc2NyYXRjaC4gIE5vdGljZSB0aGF0IHN0cnVjdHVyZXMgYW5kCi0gICAgICogYXRvbXMgY2FuIGJlIGNvbXB1dGVkIGRpcmVjdGx5LCBidXQgYXJyYXlzLCBlbGVtZW50cywgZXRjLCBuZWVkCi0gICAgICogdG8gZGVmZXIgdG8gb3RoZXIgc2NyYXRjaCBhcmVhcywgc28gdGhpcyBpcyBhIHJlc29sdXRpb24KLSAgICAgKiBwcm9jZXNzIHRoYXQgb2NjdXJzIGluIGRlcGVuZGVuY3kgb3JkZXIuCi0gICAgICovIAotICAgIHByaXZhdGUgdm9pZCByZXNvbHZlSmF2YU5hbWUoU2NyYXRjaCBzY3JhdGNoKQotICAgIHsKLSAgICAgICAgLy8gYWxyZWFkeSByZXNvbHZlZCAod2UgcmVjdXJzZSB0byBkbyBpbiBkZXBlbmRlbmN5IG9yZGVyKQotICAgICAgICBpZiAoc2NyYXRjaC5nZXRKYXZhTmFtZSgpICE9IG51bGwpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKHNjcmF0Y2guZ2V0Q2F0ZWdvcnkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTY3JhdGNoLkFUT01JQ19UWVBFOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZVNpbXBsZVNjcmF0Y2goc2NyYXRjaCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFNjcmF0Y2guU1RSVUNUX1RZUEU6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVDb3VudCArPSAxOwotICAgICAgICAgICAgICAgICAgICBKYXZhTmFtZSBqYXZhTmFtZSA9IHBpY2tVbmlxdWVKYXZhTmFtZShzY3JhdGNoLmdldFNjaGVtYVR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNjcmF0Y2guc2V0SmF2YU5hbWUoamF2YU5hbWUpOwotICAgICAgICAgICAgICAgICAgICBzY3JhdGNoRnJvbUphdmFOYW1lU3RyaW5nLnB1dChqYXZhTmFtZS50b1N0cmluZygpLCBzY3JhdGNoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgU2NyYXRjaC5MSVRFUkFMQVJSQVlfVFlQRToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFNjaGVtYVR5cGUgaXRlbVR5cGUgPSBnZXRMaXRlcmFsQXJyYXlJdGVtVHlwZShzY3JhdGNoLmdldFNjaGVtYVR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIFNjcmF0Y2ggaXRlbVNjcmF0Y2ggPSBzY3JhdGNoRm9yU2NoZW1hVHlwZShpdGVtVHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc29sdmVKYXZhTmFtZShpdGVtU2NyYXRjaCk7Ci0gICAgICAgICAgICAgICAgICAgIHNjcmF0Y2guc2V0SmF2YU5hbWUoSmF2YU5hbWUuZm9yQXJyYXkoaXRlbVNjcmF0Y2guZ2V0SmF2YU5hbWUoKSwgMSkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBTY3JhdGNoLlNPQVBBUlJBWV9SRUY6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBYbWxOYW1lIHNvYXBBcnJheU5hbWUgPSBzY3JhdGNoLmdldEFzSWYoKTsKLSAgICAgICAgICAgICAgICAgICAgU2NyYXRjaCBhcnJheVNjcmF0Y2ggPSBzY3JhdGNoRm9yWG1sTmFtZShzb2FwQXJyYXlOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUphdmFOYW1lKGFycmF5U2NyYXRjaCk7Ci0gICAgICAgICAgICAgICAgICAgIHNjcmF0Y2guc2V0SmF2YU5hbWUoYXJyYXlTY3JhdGNoLmdldEphdmFOYW1lKCkpOwotICAgICAgICAgICAgICAgICAgICBzY3JhdGNoLnNldEFzSWYoYXJyYXlTY3JhdGNoLmdldFhtbE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFNjcmF0Y2guU09BUEFSUkFZOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgWG1sTmFtZSBhcnJheU5hbWUgPSBzY3JhdGNoLmdldFhtbE5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgWG1sTmFtZSBpdGVtTmFtZSA9IGFycmF5TmFtZS5nZXRPdXRlckNvbXBvbmVudCgpOwotICAgICAgICAgICAgICAgICAgICBTY3JhdGNoIGl0ZW1TY3JhdGNoID0gc2NyYXRjaEZvclhtbE5hbWUoaXRlbU5hbWUpOwotICAgICAgICAgICAgICAgICAgICByZXNvbHZlSmF2YU5hbWUoaXRlbVNjcmF0Y2gpOwotICAgICAgICAgICAgICAgICAgICBzY3JhdGNoLnNldEphdmFOYW1lKEphdmFOYW1lLmZvckFycmF5KGl0ZW1TY3JhdGNoLmdldEphdmFOYW1lKCksIGFycmF5TmFtZS5nZXROdW1iZXIoKSkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBTY3JhdGNoLkVMRU1FTlQ6Ci0gICAgICAgICAgICBjYXNlIFNjcmF0Y2guQVRUUklCVVRFOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU2NoZW1hVHlwZSBjb250ZW50VHlwZSA9IHNjcmF0Y2guZ2V0U2NoZW1hVHlwZSgpLmdldFByb3BlcnRpZXMoKVswXS5nZXRUeXBlKCk7Ci0gICAgICAgICAgICAgICAgICAgIFNjcmF0Y2ggY29udGVudFNjcmF0Y2ggPSBzY3JhdGNoRm9yU2NoZW1hVHlwZShjb250ZW50VHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc29sdmVKYXZhTmFtZShjb250ZW50U2NyYXRjaCk7Ci0gICAgICAgICAgICAgICAgICAgIHNjcmF0Y2guc2V0SmF2YU5hbWUoY29udGVudFNjcmF0Y2guZ2V0SmF2YU5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNjcmF0Y2guc2V0QXNJZihjb250ZW50U2NyYXRjaC5nZXRYbWxOYW1lKCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJVbnJlY29nbml6ZWQgY2F0ZWdvcnkiKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbXB1dGVzIGEgQmluZGluZ1R5cGUgZm9yIGEgc2NyYXRjaC4KLSAgICAgKi8gCi0gICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZUJpbmRpbmdUeXBlKFNjcmF0Y2ggc2NyYXRjaCkKLSAgICB7Ci0gICAgICAgIGFzc2VydChzY3JhdGNoLmdldEJpbmRpbmdUeXBlKCkgPT0gbnVsbCk7Ci0gICAgICAgIAotICAgICAgICBCaW5kaW5nVHlwZU5hbWUgYnROYW1lID0gQmluZGluZ1R5cGVOYW1lLmZvclBhaXIoc2NyYXRjaC5nZXRKYXZhTmFtZSgpLCBzY3JhdGNoLmdldFhtbE5hbWUoKSk7Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKHNjcmF0Y2guZ2V0Q2F0ZWdvcnkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTY3JhdGNoLkFUT01JQ19UWVBFOgotICAgICAgICAgICAgY2FzZSBTY3JhdGNoLkVMRU1FTlQ6Ci0gICAgICAgICAgICBjYXNlIFNjcmF0Y2guU09BUEFSUkFZX1JFRjoKLSAgICAgICAgICAgIGNhc2UgU2NyYXRjaC5BVFRSSUJVVEU6Ci0gICAgICAgICAgICAgICAgU2ltcGxlQmluZGluZ1R5cGUgc2ltcGxlUmVzdWx0ID0gbmV3IFNpbXBsZUJpbmRpbmdUeXBlKGJ0TmFtZSk7Ci0gICAgICAgICAgICAgICAgc2ltcGxlUmVzdWx0LnNldEFzSWZYbWxUeXBlKHNjcmF0Y2guZ2V0QXNJZigpKTsKLSAgICAgICAgICAgICAgICBzY3JhdGNoLnNldEJpbmRpbmdUeXBlKHNpbXBsZVJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgYmluZGluZ0ZpbGUuYWRkQmluZGluZ1R5cGUoc2ltcGxlUmVzdWx0LCBzaG91bGRCZUZyb21KYXZhRGVmYXVsdChidE5hbWUpLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgU2NyYXRjaC5TVFJVQ1RfVFlQRToKLSAgICAgICAgICAgICAgICBCeU5hbWVCZWFuIGJ5TmFtZVJlc3VsdCA9IG5ldyBCeU5hbWVCZWFuKGJ0TmFtZSk7Ci0gICAgICAgICAgICAgICAgc2NyYXRjaC5zZXRCaW5kaW5nVHlwZShieU5hbWVSZXN1bHQpOwotICAgICAgICAgICAgICAgIGJpbmRpbmdGaWxlLmFkZEJpbmRpbmdUeXBlKGJ5TmFtZVJlc3VsdCwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFNjcmF0Y2guTElURVJBTEFSUkFZX1RZUEU6Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFNjcmF0Y2guU09BUEFSUkFZOgotICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJVbnJlY29nbml6ZWQgY2F0ZWdvcnkiKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGJ0TmFtZSB3b3VsZCBiZSB0aGUgZmlyc3QgKHVuaXF1ZSkKLSAgICAgKiBkZWZhdWx0IGphdmEtPnhtbCBiaW5kaW5nIHRvIGJlIGVudGVyZWQgaW4gdGhlIGphdmEtdG8tdHlwZSBvcgotICAgICAqIGphdmEtdG8tZWxlbWVudCB0YWJsZXMuCi0gICAgICovIAotICAgIHByaXZhdGUgYm9vbGVhbiBzaG91bGRCZUZyb21KYXZhRGVmYXVsdChCaW5kaW5nVHlwZU5hbWUgYnROYW1lKQotICAgIHsKLSAgICAgICAgSmF2YU5hbWUgak5hbWUgPSBidE5hbWUuZ2V0SmF2YU5hbWUoKTsKLSAgICAgICAgWG1sTmFtZSB4TmFtZSA9IGJ0TmFtZS5nZXRYbWxOYW1lKCk7Ci0gICAgICAgIGlmICh4TmFtZS5pc1NjaGVtYVR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChiaW5kaW5nRmlsZS5sb29rdXBUeXBlRm9yKGpOYW1lKSA9PSBudWxsICYmCi0gICAgICAgICAgICAgICAgICAgIHBhdGgubG9va3VwVHlwZUZvcihqTmFtZSkgPT0gbnVsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHhOYW1lLmdldENvbXBvbmVudFR5cGUoKSA9PSBYbWxOYW1lLkVMRU1FTlQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAoYmluZGluZ0ZpbGUubG9va3VwRWxlbWVudEZvcihqTmFtZSkgPT0gbnVsbCAmJgotICAgICAgICAgICAgICAgICAgICBwYXRoLmxvb2t1cEVsZW1lbnRGb3Ioak5hbWUpID09IG51bGwpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBOb3cgd2UgcmVzb2x2ZSB0aGUgc3RydWN0dXJhbCBhc3BlY3RzIChwcm9wZXJ0eSBuYW1lcykgZm9yIGVhY2gKLSAgICAgKiBzY3JhdGNoLgotICAgICAqIAotICAgICAqIHRvZG86IHVuZGVyc3RhbmQgaG93IHdlIHdhbnQgaW5oZXJpdGFuY2UgdG8gd29yawotICAgICAqLyAKLSAgICBwcml2YXRlIHZvaWQgcmVzb2x2ZUphdmFTdHJ1Y3R1cmUoU2NyYXRjaCBzY3JhdGNoKQotICAgIHsKLSAgICAgICAgaWYgKHNjcmF0Y2guZ2V0Q2F0ZWdvcnkoKSAhPSBTY3JhdGNoLlNUUlVDVF9UWVBFKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKHNjcmF0Y2guaXNTdHJ1Y3R1cmVSZXNvbHZlZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgc2NyYXRjaC5zZXRTdHJ1Y3R1cmVSZXNvbHZlZCh0cnVlKTsKLSAgICAgICAgCi0gICAgICAgIFNjaGVtYVR5cGUgYmFzZVR5cGUgPSBzY3JhdGNoLmdldFNjaGVtYVR5cGUoKS5nZXRCYXNlVHlwZSgpOwotICAgICAgICBDb2xsZWN0aW9uIGJhc2VQcm9wZXJ0aWVzID0gbnVsbDsKLSAgICAgICAgaWYgKGJhc2VUeXBlICE9IG51bGwpCi0gICAgICAgICAgICBiYXNlUHJvcGVydGllcyA9IGV4dHJhY3RQcm9wZXJ0aWVzKGJhc2VUeXBlKTsKLSAgICAgICAgaWYgKGJhc2VQcm9wZXJ0aWVzID09IG51bGwpCi0gICAgICAgICAgICBiYXNlUHJvcGVydGllcyA9IENvbGxlY3Rpb25zLkVNUFRZX0xJU1Q7Ci0gICAgICAgIAotICAgICAgICAvLyBzb3J0IHByb3BlcnRpZXMgYmFzZWQgb24gUU5hbWUgYXR0ci9lbHQKLSAgICAgICAgTWFwIHNlZW5BdHRyUHJvcHMgPSBuZXcgSGFzaE1hcCgpOwotICAgICAgICBNYXAgc2VlbkVsdFByb3BzID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgU2V0IHNlZW5NZXRob2ROYW1lcyA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICAgIHNlZW5NZXRob2ROYW1lcy5hZGQoImdldENsYXNzIik7Ci0gICAgICAgIAotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBiYXNlUHJvcGVydGllcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICB7Ci0gICAgICAgICAgICBRTmFtZVByb3BlcnR5IHByb3AgPSAoUU5hbWVQcm9wZXJ0eSlpLm5leHQoKTsKLSAgICAgICAgICAgIGlmIChwcm9wLmlzQXR0cmlidXRlKCkpCi0gICAgICAgICAgICAgICAgc2VlbkF0dHJQcm9wcy5wdXQocHJvcC5nZXRRTmFtZSgpLCBwcm9wKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZWVuRWx0UHJvcHMucHV0KHByb3AuZ2V0UU5hbWUoKSwgcHJvcCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIHRvZG86IHByb2JhYmx5IHRoaXMgY29sbGlzaW9uIGF2b2lkYW5jZSBzaG91bGQgYmUgdXNpbmcgSmF2YSBpbnRyb3NwZWN0aW9uIGluc3RlYWQKLSAgICAgICAgICAgIGlmIChwcm9wLmdldEdldHRlck5hbWUoKSAhPSBudWxsKQotICAgICAgICAgICAgICAgIHNlZW5NZXRob2ROYW1lcy5hZGQocHJvcC5nZXRHZXR0ZXJOYW1lKCkpOwotICAgICAgICAgICAgaWYgKHByb3AuZ2V0U2V0dGVyTmFtZSgpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgc2Vlbk1ldGhvZE5hbWVzLmFkZChwcm9wLmdldFNldHRlck5hbWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIG5vdyBkZWFsIHdpdGggcmVtYWluaW5nIHByb3BzCi0gICAgICAgIFNjaGVtYVByb3BlcnR5W10gcHJvcHMgPSBzY3JhdGNoLmdldFNjaGVtYVR5cGUoKS5nZXRQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFFOYW1lUHJvcGVydHkgcHJvcCA9IChRTmFtZVByb3BlcnR5KShwcm9wc1tpXS5pc0F0dHJpYnV0ZSgpID8gc2VlbkF0dHJQcm9wcyA6IHNlZW5FbHRQcm9wcykuZ2V0KHByb3BzW2ldLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICBpZiAocHJvcCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIGFscmVhZHkgc2VlbiBwcm9wZXJ0eTogdmVyaWZ5IG11bHRpcGxpY2l0eSBsb29rcyBjb29sCi0gICAgICAgICAgICAgICAgaWYgKHByb3AuaXNNdWx0aXBsZSgpICE9IGlzTXVsdGlwbGUocHJvcHNbaV0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gdG9kbzogc2lnbmFsIG5pY2VyIGVycm9yCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNhbid0IGNoYW5nZSBtdWx0aXBsaWNpdHkiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gdG9kbzogdGhpbmsgYWJvdXQgb3B0aW9uYWxpdHkgYW5kIG5pbGxhYmlsaXR5IHRvbwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNjaGVtYVR5cGUgc1R5cGUgPSBwcm9wc1tpXS5nZXRUeXBlKCk7Ci0gICAgICAgICAgICAgICAgQmluZGluZ1R5cGUgYlR5cGUgPSBiaW5kaW5nVHlwZUZvclNjaGVtYVR5cGUoc1R5cGUpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFN0cmluZyBwcm9wTmFtZSA9IHBpY2tVbmlxdWVQcm9wZXJ0eU5hbWUocHJvcHNbaV0uZ2V0TmFtZSgpLCBzZWVuTWV0aG9kTmFtZXMpOwotICAgICAgICAgICAgICAgIFN0cmluZyBnZXR0ZXIgPSAiZ2V0IiArIHByb3BOYW1lOwotICAgICAgICAgICAgICAgIFN0cmluZyBzZXR0ZXIgPSAic2V0IiArIHByb3BOYW1lOwotICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNNdWx0aXBsZSA9IGlzTXVsdGlwbGUocHJvcHNbaV0pOwotICAgICAgICAgICAgICAgIEphdmFOYW1lIGNvbGxlY3Rpb24gPSBudWxsOwotICAgICAgICAgICAgICAgIGlmIChpc011bHRpcGxlKQotICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uID0gSmF2YU5hbWUuZm9yQXJyYXkoYlR5cGUuZ2V0TmFtZSgpLmdldEphdmFOYW1lKCksIDEpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHByb3AgPSBuZXcgUU5hbWVQcm9wZXJ0eSgpOwotICAgICAgICAgICAgICAgIHByb3Auc2V0UU5hbWUocHJvcHNbaV0uZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICBwcm9wLnNldEF0dHJpYnV0ZShwcm9wc1tpXS5pc0F0dHJpYnV0ZSgpKTsKLSAgICAgICAgICAgICAgICBwcm9wLnNldFNldHRlck5hbWUoc2V0dGVyKTsKLSAgICAgICAgICAgICAgICBwcm9wLnNldEdldHRlck5hbWUoZ2V0dGVyKTsKLSAgICAgICAgICAgICAgICBwcm9wLnNldENvbGxlY3Rpb25DbGFzcyhjb2xsZWN0aW9uKTsKLSAgICAgICAgICAgICAgICBwcm9wLnNldEJpbmRpbmdUeXBlKGJUeXBlKTsKLSAgICAgICAgICAgICAgICBwcm9wLnNldE5pbGxhYmxlKHByb3BzW2ldLmhhc05pbGxhYmxlKCkgIT0gU2NoZW1hUHJvcGVydHkuTkVWRVIpOwotICAgICAgICAgICAgICAgIHByb3Auc2V0T3B0aW9uYWwoaXNPcHRpb25hbChwcm9wc1tpXSkpOwotICAgICAgICAgICAgICAgIHByb3Auc2V0TXVsdGlwbGUoaXNNdWx0aXBsZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzY3JhdGNoLmFkZFFOYW1lUHJvcGVydHkocHJvcCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogUGlja3MgYSBwcm9wZXJ0eSBuYW1lIHdpdGhvdXQgY29sbGlkaW5nIHdpdGggbmFtZXMgb2YKLSAgICAgKiBwcmV2aW91c2x5IHBpY2tlZCBnZXR0ZXJzIGFuZCBzZXR0ZXJzLgotICAgICAqLyAKLSAgICBwcml2YXRlIFN0cmluZyBwaWNrVW5pcXVlUHJvcGVydHlOYW1lKFFOYW1lIG5hbWUsIFNldCBzZWVuTWV0aG9kTmFtZXMpCi0gICAgewotICAgICAgICBTdHJpbmcgYmFzZU5hbWUgPSBOYW1lVXRpbC51cHBlckNhbWVsQ2FzZShuYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICAgICAgU3RyaW5nIHByb3BOYW1lID0gYmFzZU5hbWU7Ci0gICAgICAgIGZvciAoaW50IGkgPSAxOyA7IGkgKz0gMSkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIGdldHRlciA9ICJnZXQiICsgcHJvcE5hbWU7Ci0gICAgICAgICAgICBTdHJpbmcgc2V0dGVyID0gInNldCIgKyBwcm9wTmFtZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFzZWVuTWV0aG9kTmFtZXMuY29udGFpbnMoZ2V0dGVyKSAmJgotICAgICAgICAgICAgICAgICAgICAhc2Vlbk1ldGhvZE5hbWVzLmNvbnRhaW5zKHNldHRlcikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc2Vlbk1ldGhvZE5hbWVzLmFkZChnZXR0ZXIpOwotICAgICAgICAgICAgICAgIHNlZW5NZXRob2ROYW1lcy5hZGQoc2V0dGVyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcHJvcE5hbWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcm9wTmFtZSA9IGJhc2VOYW1lICsgaTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhlIGdpdmVuIFNjaGVtYVByb3BlcnR5IGhhcyBtYXhPY2N1cnMgPiAxCi0gICAgICovIAotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNNdWx0aXBsZShTY2hlbWFQcm9wZXJ0eSBwcm9wKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChwcm9wLmdldE1heE9jY3VycygpID09IG51bGwgfHwgcHJvcC5nZXRNYXhPY2N1cnMoKS5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpID4gMCk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhlIGdpdmVuIFNjaGVtYVByb3BlcnR5IGhhcyBtaW5PY2N1cnMgPCAxCi0gICAgICovIAotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNPcHRpb25hbChTY2hlbWFQcm9wZXJ0eSBwcm9wKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChwcm9wLmdldE1pbk9jY3VycygpLnNpZ251bSgpID09IDApOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgY29sbGVjdGlvbiBvZiBRTmFtZVByb3BlcnRpZXMgZm9yIGEgZ2l2ZW4gc2NoZW1hIHR5cGUgdGhhdAotICAgICAqIG1heSBlaXRoZXIgYmUgb24gdGhlIHBhdGggb3IgdGhlIGN1cnJlbnQgc2NyYXRjaCBhcmVhLgotICAgICAqLyAKLSAgICBwcml2YXRlIENvbGxlY3Rpb24gZXh0cmFjdFByb3BlcnRpZXMoU2NoZW1hVHlwZSBzVHlwZSkKLSAgICB7Ci0gICAgICAgIC8vIGNhc2UgMTogaXQncyBpbiB0aGUgY3VycmVudCBhcmVhCi0gICAgICAgIFNjcmF0Y2ggc2NyYXRjaCA9IHNjcmF0Y2hGb3JTY2hlbWFUeXBlKHNUeXBlKTsKLSAgICAgICAgaWYgKHNjcmF0Y2ggIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgcmVzb2x2ZUphdmFTdHJ1Y3R1cmUoc2NyYXRjaCk7Ci0gICAgICAgICAgICByZXR1cm4gc2NyYXRjaC5nZXRRTmFtZVByb3BlcnRpZXMoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gY2FzZSAyOiBpdCdzIGluIHRoZSBwYXRoCi0gICAgICAgIEJpbmRpbmdUeXBlIGJUeXBlID0gcGF0aC5nZXRCaW5kaW5nVHlwZShwYXRoLmxvb2t1cFBvam9Gb3IoWG1sTmFtZS5mb3JTY2hlbWFUeXBlKHNUeXBlKSkpOwotICAgICAgICBpZiAoIShiVHlwZSBpbnN0YW5jZW9mIEJ5TmFtZUJlYW4pKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBDb2xsZWN0aW9uIHJlc3VsdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgQnlOYW1lQmVhbiBibmIgPSAoQnlOYW1lQmVhbiliVHlwZTsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gYm5iLmdldFByb3BlcnRpZXMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQuYWRkKGkubmV4dCgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogVHJ1ZSBmb3IgYSBzY2hlbWEgdHlwZSB0aGF0IGlzIGEgU09BUCBhcnJheS4KLSAgICAgKi8gCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1NvYXBBcnJheShTY2hlbWFUeXBlIHNUeXBlKQotICAgIHsKLSAgICAgICAgLy8gU09BUCBBcnJheSBkZWZpbml0aW9uIG11c3QgYmUgcHV0IG9uIHRoZSBjb21waWxldGltZSBjbGFzc3BhdGgKLSAgICAgICAgd2hpbGUgKHNUeXBlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBzaWduYXR1cmUgPSBYbWxOYW1lLmZvclNjaGVtYVR5cGUoc1R5cGUpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIGNhcHR1cmVzIGJvdGggU09BUCAxLjEgYW5kIFNPQVAgMS4yKwotICAgICAgICAgICAgaWYgKHNpZ25hdHVyZS5lcXVhbHMoInQ9QXJyYXlAaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbmNvZGluZy8iKSB8fAotICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUuc3RhcnRzV2l0aCgidD1BcnJheUBodHRwOi8vd3d3LnczLm9yZy8iKQotICAgICAgICAgICAgICAgICAgICAmJiBzaWduYXR1cmUuZW5kc1dpdGgoIi9zb2FwLWVuY29kaW5nIikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBzVHlwZSA9IHNUeXBlLmdldEJhc2VUeXBlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBRTmFtZSBhcnJheVR5cGUgPSBuZXcgUU5hbWUoImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW5jb2RpbmcvIiwgImFycmF5VHlwZSIpOwotICAgIAotICAgIC8qKgotICAgICAqIFJldHVybnMgYW4gWG1sTmFtZSBkZXNjcmliaW5nIGEgU09BUCBhcnJheS4KLSAgICAgKi8gCi0gICAgcHJpdmF0ZSBzdGF0aWMgWG1sTmFtZSBzb2FwQXJyYXlUeXBlTmFtZShTY2hlbWFUeXBlIHNUeXBlKQotICAgIHsKLSAgICAgICAgLy8gZmlyc3QsIGxvb2sgZm9yIHdzZGw6YXJyYXlUeXBlIGRlZmF1bHQgLSB0aGlzIHdpbGwgaGVscCB1cyB3aXRoIG11bHRpZGltZW5zaW9uYWwgYXJyYXlzCi0gICAgICAgIFNPQVBBcnJheVR5cGUgZGVmYXVsdEFycmF5VHlwZSA9IG51bGw7Ci0gICAgICAgIFNjaGVtYUxvY2FsQXR0cmlidXRlIGF0dHIgPSBzVHlwZS5nZXRBdHRyaWJ1dGVNb2RlbCgpLmdldEF0dHJpYnV0ZShhcnJheVR5cGUpOwotICAgICAgICBpZiAoYXR0ciAhPSBudWxsKQotICAgICAgICAgICAgZGVmYXVsdEFycmF5VHlwZSA9ICgoU2NoZW1hV1NETEFycmF5VHlwZSlhdHRyKS5nZXRXU0RMQXJyYXlUeXBlKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBtZXRob2QgMTogdHJ1c3Qgd3NkbDphcnJheVR5cGUKLSAgICAgICAgaWYgKGRlZmF1bHRBcnJheVR5cGUgIT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBYbWxOYW1lLmZvclNvYXBBcnJheVR5cGUoZGVmYXVsdEFycmF5VHlwZSk7Ci0gICAgICAgIAotICAgICAgICAvLyBtZXRob2QgMjogU09BUCAxLjIgZXF1aXZhbGVudD8KLSAgICAgICAgLy8gdG9kbzogdHJhY2sgd2hhdCBkbyBXU0RMcyBkbyBpbiB0aGUgd29ybGQgb2YgU09BUCAxLjIuCi0gICAgICAgIAotICAgICAgICAvLyBtZXRob2QgMzogbG9vayBhdCB0aGUgdHlwZSBvZiBhIHVuaXF1ZSBlbGVtZW50LgotICAgICAgICBTY2hlbWFUeXBlIGl0ZW1UeXBlID0gWG1sT2JqZWN0LnR5cGU7Ci0gICAgICAgIFNjaGVtYVByb3BlcnR5W10gcHJvcHMgPSBzVHlwZS5nZXRFbGVtZW50UHJvcGVydGllcygpOwotICAgICAgICBpZiAocHJvcHMubGVuZ3RoID09IDEpCi0gICAgICAgICAgICBpdGVtVHlwZSA9IHByb3BzWzBdLmdldFR5cGUoKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBYbWxOYW1lLmZvck5lc3RlZE51bWJlcihYbWxOYW1lLlNPQVBfQVJSQVksIDEsIFhtbE5hbWUuZm9yU2NoZW1hVHlwZShpdGVtVHlwZSkpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDbGltYnMgdGhlIHN0cnVjdHVyZSBvZiBhIHNjaGVtYSB0eXBlIHRvIGZpbmQgdGhlIG5hbWVzcGFjZSB3aXRoaW4KLSAgICAgKiB3aGljaCBpdCB3YXMgZGVmaW5lZC4KLSAgICAgKi8gCi0gICAgcHJpdmF0ZSBTdHJpbmcgZmluZENvbnRhaW5pbmdOYW1lc3BhY2UoU2NoZW1hVHlwZSBzVHlwZSkKLSAgICB7Ci0gICAgICAgIGZvciAoOzspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzVHlwZS5pc0RvY3VtZW50VHlwZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBzVHlwZS5nZXREb2N1bWVudEVsZW1lbnROYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChzVHlwZS5pc0F0dHJpYnV0ZVR5cGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc1R5cGUuZ2V0QXR0cmlidXRlVHlwZUF0dHJpYnV0ZU5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHNUeXBlLmdldE5hbWUoKSAhPSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBzVHlwZS5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICAgICAgICBzVHlwZSA9IHNUeXBlLmdldE91dGVyVHlwZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUGlja3MgYSB1bmlxdWUgZnVsbHktcXVhbGlmaWVkIEphdmEgY2xhc3MgbmFtZSBmb3IgdGhlIGdpdmVuIHNjaGVtYQotICAgICAqIHR5cGUuICBVc2VzIGFuZCB1cGRhdGVzIHRoZSAidXNlZE5hbWVzIiBzZXQuCi0gICAgICovIAotICAgIHByaXZhdGUgSmF2YU5hbWUgcGlja1VuaXF1ZUphdmFOYW1lKFNjaGVtYVR5cGUgc1R5cGUpCi0gICAgewotICAgICAgICBRTmFtZSBxbmFtZSA9IG51bGw7Ci0gICAgICAgIHdoaWxlIChxbmFtZSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoc1R5cGUuaXNEb2N1bWVudFR5cGUoKSkKLSAgICAgICAgICAgICAgICBxbmFtZSA9IHNUeXBlLmdldERvY3VtZW50RWxlbWVudE5hbWUoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHNUeXBlLmlzQXR0cmlidXRlVHlwZSgpKQotICAgICAgICAgICAgICAgIHFuYW1lID0gc1R5cGUuZ2V0QXR0cmlidXRlVHlwZUF0dHJpYnV0ZU5hbWUoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHNUeXBlLmdldE5hbWUoKSAhPSBudWxsKQotICAgICAgICAgICAgICAgIHFuYW1lID0gc1R5cGUuZ2V0TmFtZSgpOwotICAgICAgICAgICAgZWxzZSBpZiAoc1R5cGUuZ2V0Q29udGFpbmVyRmllbGQoKSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHFuYW1lID0gc1R5cGUuZ2V0Q29udGFpbmVyRmllbGQoKS5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICAgICAgICAgIHFuYW1lID0gbmV3IFFOYW1lKGZpbmRDb250YWluaW5nTmFtZXNwYWNlKHNUeXBlKSwgcW5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc1R5cGUgPSBzVHlwZS5nZXRPdXRlclR5cGUoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3RyaW5nIGJhc2VOYW1lID0gTmFtZVV0aWwuZ2V0Q2xhc3NOYW1lRnJvbVFOYW1lKHFuYW1lKTsKLSAgICAgICAgU3RyaW5nIHBpY2tlZE5hbWUgPSBiYXNlTmFtZTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGkgPSAxOyB1c2VkTmFtZXMuY29udGFpbnMocGlja2VkTmFtZSk7IGkgKz0gMSkKLSAgICAgICAgICAgIHBpY2tlZE5hbWUgPSBiYXNlTmFtZSArIGk7Ci0gICAgICAgIAotICAgICAgICB1c2VkTmFtZXMuYWRkKHBpY2tlZE5hbWUpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIEphdmFOYW1lLmZvclN0cmluZyhwaWNrZWROYW1lKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXNvbHZlcyBhbiBhdG9taWMgc2NyYXRjaCBhbGwgYXQgb25jZSwgaW5jbHVkaW5nIGl0cwotICAgICAqIEphdmFOYW1lIGFuZCBiYXNlZE9uIGZpZWxkcy4KLSAgICAgKiAKLSAgICAgKiBUaGlzIHJlc29sdXRpb24gbWV0aG9kIHNldHMgdXAgYSBzY3JhdGNoIHNvIHRoYXQgaXMKLSAgICAgKiBpcyAiYmFzZWQgb24iIGFub3RoZXIgYmluZGluZyB0eXBlLiAgSXQgZmluZHMgdGhlCi0gICAgICogdW5kZXJseWluZyBiaW5kaW5nIHR5cGUgYnkgY2xpbWluZyB0aGUgYmFzZSB0eXBlCi0gICAgICogY2hhaW4sIGFuZCBncmFiYmluZyB0aGUgZmlyc3QgaGl0LgotICAgICAqLyAKLSAgICBwcml2YXRlIHZvaWQgcmVzb2x2ZVNpbXBsZVNjcmF0Y2goU2NyYXRjaCBzY3JhdGNoKQotICAgIHsKLSAgICAgICAgYXNzZXJ0KHNjcmF0Y2guZ2V0Q2F0ZWdvcnkoKSA9PSBTY3JhdGNoLkFUT01JQ19UWVBFKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgaWYgKHNjcmF0Y2guZ2V0SmF2YU5hbWUoKSAhPSBudWxsKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgU2NoZW1hVHlwZSBiYXNlVHlwZSA9IHNjcmF0Y2guZ2V0U2NoZW1hVHlwZSgpLmdldEJhc2VUeXBlKCk7Ci0gICAgICAgIHdoaWxlIChiYXNlVHlwZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBmaW5kIGEgYmFzZSB0eXBlIHdpdGhpbiB0aGlzIHR5cGUgc3lzdGVtCi0gICAgICAgICAgICBTY3JhdGNoIGJhc2VkT25TY3JhdGNoID0gc2NyYXRjaEZvclNjaGVtYVR5cGUoYmFzZVR5cGUpOwotICAgICAgICAgICAgaWYgKGJhc2VkT25TY3JhdGNoICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VkT25TY3JhdGNoLmdldENhdGVnb3J5KCkgIT0gU2NyYXRjaC5BVE9NSUNfVFlQRSkKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQXRvbWljIHR5cGVzIHNob3VsZCBvbmx5IGluaGVyaXQgZnJvbSBhdG9taWMgdHlwZXMiKTsKLSAgICAgICAgICAgICAgICByZXNvbHZlU2ltcGxlU2NyYXRjaChiYXNlZE9uU2NyYXRjaCk7Ci0gICAgICAgICAgICAgICAgc2NyYXRjaC5zZXRKYXZhTmFtZShiYXNlZE9uU2NyYXRjaC5nZXRKYXZhTmFtZSgpKTsKLSAgICAgICAgICAgICAgICBzY3JhdGNoLnNldEFzSWYoYmFzZWRPblNjcmF0Y2guZ2V0WG1sTmFtZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIG9yIGlmIG5vdCB3aXRoaW4gdGhpcyB0eXBlIHN5c3RlbSwgZmluZCB0aGUgYmFzZSB0eXBlIG9uIHRoZSBwYXRoCi0gICAgICAgICAgICBYbWxOYW1lIHRyZWF0QXMgPSBYbWxOYW1lLmZvclNjaGVtYVR5cGUoYmFzZVR5cGUpOwotICAgICAgICAgICAgQmluZGluZ1R5cGUgYmFzZWRPbkJpbmRpbmcgPSBwYXRoLmdldEJpbmRpbmdUeXBlKHBhdGgubG9va3VwUG9qb0Zvcih0cmVhdEFzKSk7Ci0gICAgICAgICAgICBpZiAoYmFzZWRPbkJpbmRpbmcgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzY3JhdGNoLnNldEphdmFOYW1lKGJhc2VkT25CaW5kaW5nLmdldE5hbWUoKS5nZXRKYXZhTmFtZSgpKTsKLSAgICAgICAgICAgICAgICBzY3JhdGNoLnNldEFzSWYodHJlYXRBcyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBvciBnbyB0byB0aGUgbmV4dCBiYXNlIHR5cGUgdXAKLSAgICAgICAgICAgIGJhc2VUeXBlID0gYmFzZVR5cGUuZ2V0QmFzZVR5cGUoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gYnVpbHRpbiBhdCBsZWFzdCBzaG91bGQgZ2l2ZSB1cyB4czphbnlUeXBlCi0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkJ1aWx0aW4gYmluZGluZyB0eXBlIGxvYWRlciBpcyBub3Qgb24gcGF0aC4iKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogTG9va3Mgb24gYm90aCB0aGUgcGF0aCBhbmQgaW4gdGhlIGN1cnJlbnQgc2NyYXRjaCBhcmVhIGZvcgotICAgICAqIHRoZSBiaW5kaW5nIHR5cGUgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gc2NoZW1hIHR5cGUuICBNdXN0Ci0gICAgICogYmUgY2FsbGVkIGFmdGVyIGFsbCB0aGUgYmluZGluZyB0eXBlcyBoYXZlIGJlZW4gY3JlYXRlZC4KLSAgICAgKi8gCi0gICAgcHJpdmF0ZSBCaW5kaW5nVHlwZSBiaW5kaW5nVHlwZUZvclNjaGVtYVR5cGUoU2NoZW1hVHlwZSBzVHlwZSkKLSAgICB7Ci0gICAgICAgIFNjcmF0Y2ggc2NyYXRjaCA9IHNjcmF0Y2hGb3JTY2hlbWFUeXBlKHNUeXBlKTsKLSAgICAgICAgaWYgKHNjcmF0Y2ggIT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBzY3JhdGNoLmdldEJpbmRpbmdUeXBlKCk7Ci0gICAgICAgIHJldHVybiBwYXRoLmdldEJpbmRpbmdUeXBlKHBhdGgubG9va3VwUG9qb0ZvcihYbWxOYW1lLmZvclNjaGVtYVR5cGUoc1R5cGUpKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgc2NyYXRjaCBhcmVhIGZvciBhIGdpdmVuIHNjaGVtYSB0eXBlLiAgTm90aWNlIHRoYXQKLSAgICAgKiBTT0FQIGFycmF5cyBoYXZlIGFuIFhtbE5hbWUgYnV0IG5vdCBhIHNjaGVtYSB0eXBlLgotICAgICAqLyAKLSAgICBwcml2YXRlIFNjcmF0Y2ggc2NyYXRjaEZvclNjaGVtYVR5cGUoU2NoZW1hVHlwZSBzVHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoU2NyYXRjaClzY3JhdGNoRnJvbVNjaGVtYVR5cGUuZ2V0KHNUeXBlKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgc2NyYXRjaCBhcmVhIGZvciBhIGdpdmVuIFhtbE5hbWUuCi0gICAgICovIAotICAgIHByaXZhdGUgU2NyYXRjaCBzY3JhdGNoRm9yWG1sTmFtZShYbWxOYW1lIHhtbE5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gKFNjcmF0Y2gpc2NyYXRjaEZyb21YbWxOYW1lLmdldCh4bWxOYW1lKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBzY3JhdGNoIGFyZWEgZm9yIGEgZ2l2ZW4gSmF2YU5hbWUuICBOb3RpY2UgdGhhdCBvbmx5Ci0gICAgICogc3RydWN0dXJlcyBnZW5lcmF0ZSBhIGphdmEgY2xhc3MsIHNvIG5vdCBub24tc3RydWN1dHVyZSBzY3JhdGNoIGFyZWFzCi0gICAgICogY2Fubm90IGJlIHJlZmVyZW5jZWQgdGhpcyB3YXkuCi0gICAgICovIAotICAgIHByaXZhdGUgU2NyYXRjaCBzY3JhdGNoRm9ySmF2YU5hbWVTdHJpbmcoU3RyaW5nIGphdmFOYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChTY3JhdGNoKXNjcmF0Y2hGcm9tSmF2YU5hbWVTdHJpbmcuZ2V0KGphdmFOYW1lKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogRXh0cmFjdHMgdGhlIHNjaGVtYSB0eXBlIGZvciB0aGUgYXJyYXkgaXRlbXMgZm9yIGEgbGl0ZXJhbCBhcnJheS4KLSAgICAgKi8gCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2NoZW1hVHlwZSBnZXRMaXRlcmFsQXJyYXlJdGVtVHlwZShTY2hlbWFUeXBlIHNUeXBlKQotICAgIHsKLSAgICAgICAgLy8gY29uc2lkZXI6IG11c3QgdGhlIHR5cGUgYmUgbmFtZWQgIkFycmF5T2YuLi4iPwotICAgICAgICAKLSAgICAgICAgaWYgKHNUeXBlLmlzU2ltcGxlVHlwZSgpIHx8IHNUeXBlLmdldENvbnRlbnRUeXBlKCkgPT0gU2NoZW1hVHlwZS5TSU1QTEVfQ09OVEVOVCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICBTY2hlbWFQcm9wZXJ0eVtdIHByb3AgPSBzVHlwZS5nZXRQcm9wZXJ0aWVzKCk7Ci0gICAgICAgIGlmIChwcm9wLmxlbmd0aCAhPSAxIHx8IHByb3BbMF0uaXNBdHRyaWJ1dGUoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICBCaWdJbnRlZ2VyIG1heCA9IHByb3BbMF0uZ2V0TWF4T2NjdXJzKCk7Ci0gICAgICAgIGlmIChtYXggIT0gbnVsbCAmJiBtYXguY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKSA8PSAwKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHJldHVybiBwcm9wWzBdLmdldFR5cGUoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUcnVlIGlmIHRoZSBnaXZlbiBzY2hlbWEgdHlwZSBpcyBpbnRlcnByZXRlZCBhcyBhIC5ORVQtc3R5bGUKLSAgICAgKiBhcnJheS4KLSAgICAgKi8gCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0xpdGVyYWxBcnJheShTY2hlbWFUeXBlIHNUeXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdldExpdGVyYWxBcnJheUl0ZW1UeXBlKHNUeXBlKSAhPSBudWxsOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBTY3JhdGNoIGFyZWEgY29ycmVzcG9uZGluZyB0byBhIHNjaGVtYSB0eXBlLCB1c2VkIGZvciB0aGUgYmluZGluZwotICAgICAqIGNvbXB1dGF0aW9uLgotICAgICAqLyAKLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBTY3JhdGNoCi0gICAgewotICAgICAgICBTY3JhdGNoKFNjaGVtYVR5cGUgc2NoZW1hVHlwZSwgWG1sTmFtZSB4bWxOYW1lLCBpbnQgY2F0ZWdvcnkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuc2NoZW1hVHlwZSA9IHNjaGVtYVR5cGU7Ci0gICAgICAgICAgICB0aGlzLnhtbE5hbWUgPSB4bWxOYW1lOwotICAgICAgICAgICAgdGhpcy5jYXRlZ29yeSA9IGNhdGVnb3J5OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIEJpbmRpbmdUeXBlIGJpbmRpbmdUeXBlOwotICAgICAgICBwcml2YXRlIFNjaGVtYVR5cGUgc2NoZW1hVHlwZTsgLy8gbWF5IGJlIG51bGwKLSAgICAgICAgcHJpdmF0ZSBKYXZhTmFtZSBqYXZhTmFtZTsKLSAgICAgICAgcHJpdmF0ZSBYbWxOYW1lIHhtbE5hbWU7Ci0KLSAgICAgICAgcHJpdmF0ZSBpbnQgY2F0ZWdvcnk7Ci0KLSAgICAgICAgLy8gYXRvbWljIHR5cGVzIGdldCBhIHRyZWF0QXMKLSAgICAgICAgcHJpdmF0ZSBYbWxOYW1lIGFzSWY7Ci0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBpc1N0cnVjdHVyZVJlc29sdmVkOwotCi0gICAgICAgIC8vIGNhdGVnb3JpZXMgb2YgU2NyYXRjaCwgZXN0YWJsaXNoZWQgYXQgY3RvciB0aW1lCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFUT01JQ19UWVBFID0gMTsKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RSVUNUX1RZUEUgPSAyOwotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMSVRFUkFMQVJSQVlfVFlQRSA9IDM7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNPQVBBUlJBWV9SRUYgPSA0OwotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTT0FQQVJSQVkgPSA1OwotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTEVNRU5UID0gNjsKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVRUUklCVVRFID0gNzsKLQotICAgICAgICBwdWJsaWMgaW50IGdldENhdGVnb3J5KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGNhdGVnb3J5OwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIEphdmFOYW1lIGdldEphdmFOYW1lKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGphdmFOYW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0SmF2YU5hbWUoSmF2YU5hbWUgamF2YU5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuamF2YU5hbWUgPSBqYXZhTmFtZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBCaW5kaW5nVHlwZSBnZXRCaW5kaW5nVHlwZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBiaW5kaW5nVHlwZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldEJpbmRpbmdUeXBlKEJpbmRpbmdUeXBlIGJpbmRpbmdUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLmJpbmRpbmdUeXBlID0gYmluZGluZ1R5cGU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU2NoZW1hVHlwZSBnZXRTY2hlbWFUeXBlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHNjaGVtYVR5cGU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgWG1sTmFtZSBnZXRYbWxOYW1lKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHhtbE5hbWU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRYbWxOYW1lKFhtbE5hbWUgeG1sTmFtZSkKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy54bWxOYW1lID0geG1sTmFtZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBYbWxOYW1lIGdldEFzSWYoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYXNJZjsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldEFzSWYoWG1sTmFtZSB4bWxOYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLmFzSWYgPSB4bWxOYW1lOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwdWJsaWMgdm9pZCBhZGRRTmFtZVByb3BlcnR5KFFOYW1lUHJvcGVydHkgcHJvcCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCEoYmluZGluZ1R5cGUgaW5zdGFuY2VvZiBCeU5hbWVCZWFuKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICAoKEJ5TmFtZUJlYW4pYmluZGluZ1R5cGUpLmFkZFByb3BlcnR5KHByb3ApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRRTmFtZVByb3BlcnRpZXMoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIShiaW5kaW5nVHlwZSBpbnN0YW5jZW9mIEJ5TmFtZUJlYW4pKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLSAgICAgICAgICAgIHJldHVybiAoKEJ5TmFtZUJlYW4pYmluZGluZ1R5cGUpLmdldFByb3BlcnRpZXMoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzU3RydWN0dXJlUmVzb2x2ZWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1N0cnVjdHVyZVJlc29sdmVkOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwdWJsaWMgdm9pZCBzZXRTdHJ1Y3R1cmVSZXNvbHZlZChib29sZWFuIGlzU3RydWN0dXJlUmVzb2x2ZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuaXNTdHJ1Y3R1cmVSZXNvbHZlZCA9IGlzU3RydWN0dXJlUmVzb2x2ZWQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhbiBpdGVyYXRvciBmb3IgYWxsIHRoZSBTY3JhdGNoJ3MKLSAgICAgKi8gCi0gICAgcHJpdmF0ZSBJdGVyYXRvciBzY3JhdGNoSXRlcmF0b3IoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHNjcmF0Y2hGcm9tWG1sTmFtZS52YWx1ZXMoKS5pdGVyYXRvcigpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGFuIGl0ZXJhdG9yIGZvciBhbGwgdGhlIHNjaGVtYSB0eXBlcwotICAgICAqLyAKLSAgICBwcml2YXRlIEl0ZXJhdG9yIGFsbFR5cGVJdGVyYXRvcigpCi0gICAgewotICAgICAgICBjbGFzcyBBbGxUeXBlSXRlcmF0b3IgaW1wbGVtZW50cyBJdGVyYXRvcgotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgaW5kZXg7Ci0gICAgICAgICAgICBMaXN0IGFsbFNlZW5UeXBlczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQWxsVHlwZUl0ZXJhdG9yKFNjaGVtYVR5cGVTeXN0ZW0gc3RzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFsbFNlZW5UeXBlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgICAgICAgICBhbGxTZWVuVHlwZXMuYWRkQWxsKEFycmF5cy5hc0xpc3Qoc3RzLmRvY3VtZW50VHlwZXMoKSkpOwotICAgICAgICAgICAgICAgIGFsbFNlZW5UeXBlcy5hZGRBbGwoQXJyYXlzLmFzTGlzdChzdHMuYXR0cmlidXRlVHlwZXMoKSkpOwotICAgICAgICAgICAgICAgIGFsbFNlZW5UeXBlcy5hZGRBbGwoQXJyYXlzLmFzTGlzdChzdHMuZ2xvYmFsVHlwZXMoKSkpOwotICAgICAgICAgICAgICAgIGluZGV4ID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gaGFzTmV4dCgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4IDwgYWxsU2VlblR5cGVzLnNpemUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIE9iamVjdCBuZXh0KCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTY2hlbWFUeXBlIG5leHQgPSAoU2NoZW1hVHlwZSlhbGxTZWVuVHlwZXMuZ2V0KGluZGV4KTsKLSAgICAgICAgICAgICAgICBhbGxTZWVuVHlwZXMuYWRkQWxsKEFycmF5cy5hc0xpc3QobmV4dC5nZXRBbm9ueW1vdXNUeXBlcygpKSk7Ci0gICAgICAgICAgICAgICAgaW5kZXggKz0gMTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV4dDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIHZvaWQgcmVtb3ZlKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG5ldyBBbGxUeXBlSXRlcmF0b3Ioc3RzKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogSXRlcmF0ZXMgb3ZlciBhbGwgdGhlIHRvcC1sZXZlbCBKYXZhIGNsYXNzIG5hbWVzIGdlbmVyYXRlZAotICAgICAqIGJ5IHRoaXMgYmluZGluZy4gIFVzZWQgYnkgZ2V0VG9wbGV2ZWxDbGFzc2VzLgotICAgICAqLyAKLSAgICBwcml2YXRlIGNsYXNzIFRvcExldmVsQ2xhc3NOYW1lSXRlcmF0b3IgaW1wbGVtZW50cyBJdGVyYXRvcgotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBJdGVyYXRvciBzaSA9IHNjcmF0Y2hJdGVyYXRvcigpOwotICAgICAgICBwcml2YXRlIFNjcmF0Y2ggbmV4dCA9IG5leHRTdHJ1Y3R1cmUoKTsKLSAgICAgICAgCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGhhc05leHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV4dCAhPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIE9iamVjdCBuZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gdG9kbzogbmVlZCB0byBzdHJpcCBvZmYgeD0gZnJvbSB4bWxvYmplY3QgbmFtZQotICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IG5leHQuZ2V0SmF2YU5hbWUoKS50b1N0cmluZygpOwotICAgICAgICAgICAgbmV4dCA9IG5leHRTdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIFNjcmF0Y2ggbmV4dFN0cnVjdHVyZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHdoaWxlIChzaS5oYXNOZXh0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2NyYXRjaCBzY3JhdGNoID0gKFNjcmF0Y2gpc2kubmV4dCgpOwotICAgICAgICAgICAgICAgIGlmIChzY3JhdGNoLmdldENhdGVnb3J5KCkgPT0gU2NyYXRjaC5TVFJVQ1RfVFlQRSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjcmF0Y2g7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHJlbW92ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgY29sbGVjdGlvbiBvZiBmdWxseS1xdWFsaWZpZWQgSmF2YSBjbGFzcyBuYW1lIHN0cmluZ3MKLSAgICAgKiBnZW5lcmF0ZWQgYnkgdGhpcyBiaW5kaW5nLgotICAgICAqLwotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGdldFRvcGxldmVsQ2xhc3NlcygpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IEFic3RyYWN0Q29sbGVjdGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHB1YmxpYyBJdGVyYXRvciBpdGVyYXRvcigpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUb3BMZXZlbENsYXNzTmFtZUl0ZXJhdG9yKCk7Ci0gICAgICAgICAgICB9Ci0gICAgCi0gICAgICAgICAgICBwdWJsaWMgaW50IHNpemUoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVDb3VudDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQcmludHMgdGhlIEphdmEgc291cmNlIGNvZGUgZm9yIHRoZSBnaXZlbiBnZW5lcmF0ZWQgamF2YSBjbGFzcyBuYW1lLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHByaW50U291cmNlQ29kZShTdHJpbmcgdG9wTGV2ZWxDbGFzc05hbWUsIE91dHB1dFN0cmVhbSBvdXRwdXQpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgU2NyYXRjaCBzY3JhdGNoID0gc2NyYXRjaEZvckphdmFOYW1lU3RyaW5nKHRvcExldmVsQ2xhc3NOYW1lKTsKLSAgICAgICAgaWYgKHNjcmF0Y2ggPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLSAgICAgICAgV3JpdGVyIHdyaXRlciA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIob3V0cHV0KTsKLSAgICAgICAgU2NyYXRjaENvZGVQcmludGVyIHByaW50ZXIgPSBuZXcgU2NyYXRjaENvZGVQcmludGVyKHNjcmF0Y2gsIHdyaXRlcik7Ci0gICAgICAgIHByaW50ZXIucHJpbnQoKTsKLSAgICAgICAgd3JpdGVyLmZsdXNoKCk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIEhhbmRsZXMgdGhlIHByaW50aW5nIGZvciBvbmUgZ2VuZXJhdGVkIGphdmEgY2xhc3MuCi0gICAgICovCi0gICAgcHJpdmF0ZSBjbGFzcyBTY3JhdGNoQ29kZVByaW50ZXIgZXh0ZW5kcyBKYXZhQ29kZVByaW50ZXIKLSAgICB7Ci0gICAgICAgIHByaXZhdGUgU2NyYXRjaCBzY3JhdGNoOwotCi0gICAgICAgIFNjcmF0Y2hDb2RlUHJpbnRlcihTY3JhdGNoIHNjcmF0Y2gsIFdyaXRlciB3cml0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN1cGVyKHdyaXRlcik7Ci0gICAgICAgICAgICBhc3NlcnQoc2NyYXRjaC5nZXRDYXRlZ29yeSgpID09IFNjcmF0Y2guU1RSVUNUX1RZUEUpOwotICAgICAgICAgICAgdGhpcy5zY3JhdGNoID0gc2NyYXRjaDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSB2b2lkIHByaW50KCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIEphdmFOYW1lIGphdmFOYW1lID0gc2NyYXRjaC5nZXRKYXZhTmFtZSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBqYXZhTmFtZS5nZXRQYWNrYWdlKCk7Ci0gICAgICAgICAgICBTdHJpbmcgc2hvcnRDbGFzc05hbWUgPSBqYXZhTmFtZS5nZXRTaG9ydENsYXNzTmFtZSgpOwotICAgICAgICAgICAgQmluZGluZ1R5cGUgYmFzZVR5cGUgPSBiaW5kaW5nVHlwZUZvclNjaGVtYVR5cGUoc2NyYXRjaC5nZXRTY2hlbWFUeXBlKCkuZ2V0QmFzZVR5cGUoKSk7Ci0gICAgICAgICAgICBTdHJpbmcgYmFzZUphdmFuYW1lID0gbnVsbDsKLSAgICAgICAgICAgIGlmIChiYXNlVHlwZSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJhc2VKYXZhbmFtZSA9IGJhc2VUeXBlLmdldE5hbWUoKS5nZXRKYXZhTmFtZSgpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VKYXZhbmFtZS5lcXVhbHMoImphdmEubGFuZy5PYmplY3QiKSkKLSAgICAgICAgICAgICAgICAgICAgYmFzZUphdmFuYW1lID0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGluZSgicGFja2FnZSAiICsgcGFja2FnZU5hbWUpOwotICAgICAgICAgICAgbGluZSgpOwotICAgICAgICAgICAgamF2YWRvYygiR2VuZXJhdGVkIGZyb20gc2NoZW1hIHR5cGUgIiArIHNjcmF0Y2guZ2V0WG1sTmFtZSgpKTsKLSAgICAgICAgICAgIGxpbmUoImNsYXNzICIgKyBzaG9ydENsYXNzTmFtZSArIChiYXNlSmF2YW5hbWUgIT0gbnVsbCA/ICIgZXh0ZW5kcyAiICsgYmFzZUphdmFuYW1lIDogIiIpKTsKLSAgICAgICAgICAgIHN0YXJ0QmxvY2soKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQ29sbGVjdGlvbiBwcm9wcyA9IHNjcmF0Y2guZ2V0UU5hbWVQcm9wZXJ0aWVzKCk7Ci0gICAgICAgICAgICBNYXAgZmllbGROYW1lcyA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgICAgICBTZXQgc2VlbkZpZWxkTmFtZXMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBwaWNrIGZpZWxkIG5hbWVzCi0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBwcm9wcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFFOYW1lUHJvcGVydHkgcHJvcCA9IChRTmFtZVByb3BlcnR5KWkubmV4dCgpOwotICAgICAgICAgICAgICAgIGZpZWxkTmFtZXMucHV0KHByb3AsIHBpY2tVbmlxdWVGaWVsZE5hbWUocHJvcC5nZXRHZXR0ZXJOYW1lKCksIHNlZW5GaWVsZE5hbWVzKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIHByaW50IHByaXZhdGUgZmllbGRzCi0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBwcm9wcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFFOYW1lUHJvcGVydHkgcHJvcCA9IChRTmFtZVByb3BlcnR5KWkubmV4dCgpOwotICAgICAgICAgICAgICAgIEphdmFOYW1lIGpUeXBlID0gcHJvcC5nZXRUeXBlTmFtZSgpLmdldEphdmFOYW1lKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHByb3AuZ2V0Q29sbGVjdGlvbkNsYXNzKCkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgalR5cGUgPSBwcm9wLmdldENvbGxlY3Rpb25DbGFzcygpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGxpbmUoInByaXZhdGUgIiArIGpUeXBlLnRvU3RyaW5nKCkgKyAiICIgKyBmaWVsZE5hbWVzLmdldChwcm9wKSArICI7Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIHByaW50IGdldHRlcnMgYW5kIHNldHRlcnMKLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IHByb3BzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUU5hbWVQcm9wZXJ0eSBwcm9wID0gKFFOYW1lUHJvcGVydHkpaS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgSmF2YU5hbWUgalR5cGUgPSBwcm9wLmdldFR5cGVOYW1lKCkuZ2V0SmF2YU5hbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAocHJvcC5nZXRDb2xsZWN0aW9uQ2xhc3MoKSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICBqVHlwZSA9IHByb3AuZ2V0Q29sbGVjdGlvbkNsYXNzKCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGZpZWxkTmFtZSA9IChTdHJpbmcpZmllbGROYW1lcy5nZXQocHJvcCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbGluZSgpOwotICAgICAgICAgICAgICAgIGxpbmUoInB1YmxpYyAiICsgalR5cGUudG9TdHJpbmcoKSArICIgIiArIHByb3AuZ2V0R2V0dGVyTmFtZSgpICsgIigpIik7Ci0gICAgICAgICAgICAgICAgc3RhcnRCbG9jaygpOwotICAgICAgICAgICAgICAgIGxpbmUoInJldHVybiAiICsgZmllbGROYW1lICsgIjsiKTsKLSAgICAgICAgICAgICAgICBlbmRCbG9jaygpOwotICAgICAgICAgICAgICAgIGxpbmUoKTsKLSAgICAgICAgICAgICAgICBsaW5lKCJwdWJsaWMgdm9pZCAiICsgcHJvcC5nZXRTZXR0ZXJOYW1lKCkgKyAiKCIgKyBqVHlwZS50b1N0cmluZygpICsgIiAiICsgZmllbGROYW1lICsgIikiKTsKLSAgICAgICAgICAgICAgICBzdGFydEJsb2NrKCk7Ci0gICAgICAgICAgICAgICAgbGluZSgidGhpcy4iICsgZmllbGROYW1lICsgIiA9ICIgKyBmaWVsZE5hbWUgKyAiOyIpOwotICAgICAgICAgICAgICAgIGVuZEJsb2NrKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGVuZEJsb2NrKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgU3RyaW5nIHBpY2tVbmlxdWVGaWVsZE5hbWUoU3RyaW5nIGdldHRlciwgU2V0IHNlZW5OYW1lcykKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIGJhc2VOYW1lOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZ2V0dGVyLmxlbmd0aCgpID4gMyAmJiBnZXR0ZXIuc3RhcnRzV2l0aCgiZ2V0IikpCi0gICAgICAgICAgICAgICAgYmFzZU5hbWUgPSBDaGFyYWN0ZXIudG9Mb3dlckNhc2UoZ2V0dGVyLmNoYXJBdCgzKSkgKyBnZXR0ZXIuc3Vic3RyaW5nKDQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJhc2VOYW1lID0gImZpZWxkIjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgU3RyaW5nIGZpZWxkTmFtZSA9IGJhc2VOYW1lOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IHNlZW5OYW1lcy5jb250YWlucyhmaWVsZE5hbWUpOyBpICs9IDEpCi0gICAgICAgICAgICAgICAgZmllbGROYW1lID0gYmFzZU5hbWUgKyBpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzZWVuTmFtZXMuYWRkKGZpZWxkTmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gZmllbGROYW1lOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUHJpbnRzIHRoZSBiaW5kaW5nIGZpbGUgZ2VuZXJhdGVkIGJ5IHRoaXMgYmluZGluZy4KLSAgICAgKi8gCi0gICAgcHVibGljIHZvaWQgcHJpbnRCaW5kaW5nRmlsZShPdXRwdXRTdHJlYW0gb3V0cHV0KSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGJpbmRpbmdGaWxlLndyaXRlKCkuc2F2ZShvdXRwdXQsIG5ldyBYbWxPcHRpb25zKCkuc2V0U2F2ZVByZXR0eVByaW50KCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBCaW5kaW5nRmlsZUdlbmVyYXRvciBmb3IgdGhpcyBTY2hlbWFUb0phdmFSZXN1bHQuCi0gICAgICovIAotICAgIHB1YmxpYyBCaW5kaW5nRmlsZUdlbmVyYXRvciBnZXRCaW5kaW5nRmlsZUdlbmVyYXRvcigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBKYXZhQ29kZUdlbmVyYXRvciBmb3IgdGhpcyBTY2hlbWFUb0phdmFSZXN1bHQuCi0gICAgICovIAotICAgIHB1YmxpYyBKYXZhQ29kZUdlbmVyYXRvciBnZXRKYXZhQ29kZUdlbmVyYXRvcigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpczsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvYmluZGluZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvYmluZGluZy9jb21waWxlL0phdmEyU2NoZW1hLmphdmEgYi92Mi9zcmMvYmluZGluZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvYmluZGluZy9jb21waWxlL0phdmEyU2NoZW1hLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlYzc2NDcuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvY29tcGlsZS9KYXZhMlNjaGVtYS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjM2ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5jb21waWxlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzLio7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5KQW5ub3RhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLkpDbGFzczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLkpQcm9wZXJ0eTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLkpFbGVtZW50OwotaW1wb3J0IG9yZy53My54MjAwMS54bWxTY2hlbWEuKjsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLS8qKgotICogVHJhbnNmb3JtcyBhIHNldCBvZiBKQ2xhc3NlcyBpbnRvIGEgQlRTIGFuZCBhIHNjaGVtYS4gIFRoaXMgaXMgcmVhbGx5IGp1c3QKLSAqIGEgc2tldGNoIGF0IHRoaXMgcG9pbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBKYXZhMlNjaGVtYSB7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBDb25zdGFudHMKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSkFWQV9VUklfU0NIRU1FICAgICAgPSAiamF2YToiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSkFWQV9OQU1FU1BBQ0VfVVJJICAgPSAibGFuZ3VhZ2VfYnVpbHRpbnMiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSkFWQV9QQUNLQUdFX1BSRUZJWCAgPSAiamF2YS4iOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfQ1QgICAgICAgICAgICAgICA9ICJ4c2RnZW46Y29tcGxleFR5cGUiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX0NUX1RZUEVOQU1FICAgICAgPSBUQUdfQ1QrIi50eXBlTmFtZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfQ1RfVEFSR0VUTlMgICAgICA9IFRBR19DVCsiLnRhcmdldE5hbWVzcGFjZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfQ1RfUk9PVCAgICAgICAgICA9IFRBR19DVCsiLnJvb3RFbGVtZW50IjsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX0VMICAgICAgICAgICAgICAgPSAieHNkZ2VuOmVsZW1lbnQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX0VMX05BTUUgICAgICAgICAgPSBUQUdfRUwrIi5uYW1lIjsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHX0FUICAgICAgICAgICAgICAgPSAieHNkZ2VuOmF0dHJpYnV0ZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUdfQVRfTkFNRSAgICAgICAgICA9IFRBR19BVCsiLm5hbWUiOwotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gVmFyaWFibGVzCi0KLSAgcHJpdmF0ZSBCaW5kaW5nRmlsZSBtQmluZGluZ0ZpbGU7Ci0gIHByaXZhdGUgQmluZGluZ0xvYWRlciBtTG9hZGVyOwotICBwcml2YXRlIFNjaGVtYURvY3VtZW50IG1TY2hlbWFEb2N1bWVudDsKLSAgcHJpdmF0ZSBTY2hlbWFEb2N1bWVudC5TY2hlbWEgbVNjaGVtYTsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIENvbnN0cnVjdG9ycwotCi0gIHB1YmxpYyBKYXZhMlNjaGVtYSgpIHt9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBQdWJsaWMgbWV0aG9kcwotCi0gIHB1YmxpYyB2b2lkIGJpbmQoSkNsYXNzW10gY2xhc3NlcywgVHlsYXJCdWlsZGVyIHRiKSB7Ci0gICAgdGIuYWRkQmluZGluZ0ZpbGUobUJpbmRpbmdGaWxlID0gbmV3IEJpbmRpbmdGaWxlKCkpOwotICAgIG1Mb2FkZXIgPSBQYXRoQmluZGluZ0xvYWRlci5mb3JQYXRoCi0gICAgICAgICAgICAobmV3IEJpbmRpbmdMb2FkZXJbXSB7bUJpbmRpbmdGaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWx0aW5CaW5kaW5nTG9hZGVyLmdldEluc3RhbmNlKCl9KTsKLSAgICB0Yi5hZGRTY2hlbWEobVNjaGVtYURvY3VtZW50ID0gU2NoZW1hRG9jdW1lbnQuRmFjdG9yeS5uZXdJbnN0YW5jZSgpKTsKLSAgICBtU2NoZW1hID0gbVNjaGVtYURvY3VtZW50LmFkZE5ld1NjaGVtYSgpOwotICAgIGZvcihpbnQgaT0wOyBpPGNsYXNzZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGdldEJpbmRpbmdUeXBlRm9yKGNsYXNzZXNbaV0pOwotICAgIH0KLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gUHJpdmF0ZSBtZXRob2RzCi0KLSAgcHJpdmF0ZSBzdGF0aWMgSmF2YU5hbWUgZ2V0SmF2YU5hbWUoSkNsYXNzIGpjKSB7Ci0gICAgcmV0dXJuIEphdmFOYW1lLmZvclN0cmluZyhqYy5nZXRRdWFsaWZpZWROYW1lKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSBCaW5kaW5nVHlwZSBnZXRCaW5kaW5nVHlwZUZvcihKQ2xhc3MgY2xhenopIHsKLSAgICBCaW5kaW5nVHlwZSBvdXQgPSBtTG9hZGVyLmdldEJpbmRpbmdUeXBlKG1Mb2FkZXIubG9va3VwVHlwZUZvcihnZXRKYXZhTmFtZShjbGF6eikpKTsKLSAgICBpZiAob3V0ID09IG51bGwpIHsKLSAgICAgIG91dCA9IGNyZWF0ZUJpbmRpbmdUeXBlRm9yKGNsYXp6KTsKLSAgICB9Ci0gICAgcmV0dXJuIG91dDsKLSAgfQotCi0gIHByaXZhdGUgQmluZGluZ1R5cGUgY3JlYXRlQmluZGluZ1R5cGVGb3IoSkNsYXNzIGNsYXp6KSB7Ci0gICAgaWYgKGNsYXp6LmlzUHJpbWl0aXZlKCkpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oY2xhenouZ2V0U2ltcGxlTmFtZSgpKTsKLSAgICB9Ci0gICAgLy8gY3JlYXRlIHRoZSBzY2hlbWEgdHlwZQotICAgIFRvcExldmVsQ29tcGxleFR5cGUgeHNkVHlwZSA9IG1TY2hlbWEuYWRkTmV3Q29tcGxleFR5cGUoKTsKLSAgICBTdHJpbmcgdG5zID0gZ2V0VGFyZ2V0TmFtZXNwYWNlKGNsYXp6KTsKLSAgICBTdHJpbmcgeHNkTmFtZSA9IGdldEFubm90YXRpb24oY2xhenosVEFHX0NUX1RZUEVOQU1FLGNsYXp6LmdldFNpbXBsZU5hbWUoKSk7Ci0gICAgUU5hbWUgcW5hbWUgPSBuZXcgUU5hbWUodG5zLHhzZE5hbWUpOwotICAgIHhzZFR5cGUuc2V0TmFtZSh4c2ROYW1lKTsKLSAgICAvLyBjcmVhdGUgYSBiaW5kaW5nIHR5cGUKLSAgICBCeU5hbWVCZWFuIGJpbmRUeXBlID0gbmV3IEJ5TmFtZUJlYW4oQmluZGluZ1R5cGVOYW1lLmZvclBhaXIoZ2V0SmF2YU5hbWUoY2xhenopLCBYbWxOYW1lLmZvclR5cGVOYW1lZChxbmFtZSkpKTsKLSAgICBtQmluZGluZ0ZpbGUuYWRkQmluZGluZ1R5cGUoYmluZFR5cGUsdHJ1ZSx0cnVlKTsKLSAgICAvLyBydW4gdGhyb3VnaCB0aGUgY2xhc3MnIHByb3BlcnRpZXMgdG8gcG9wdWxhdGUgdGhlIGJpbmRpbmcgYW5kIHhzZHR5cGVzCi0gICAgLy9GSVhNRSB0aGlzIGlzIGdvaW5nIHRvIGhhdmUgdG8gY2hhbmdlIHRvIHRha2UgaW5oZXJpdGFuY2UgaW50byBhY2NvdW50Ci0gICAgSlByb3BlcnR5IHByb3BzW10gPSBjbGF6ei5nZXRQcm9wZXJ0aWVzKCk7Ci0gICAgR3JvdXAgeHNkU2VxdWVuY2UgPSBudWxsOwotICAgIGZvcihpbnQgaT0wOyBpPHByb3BzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAocHJvcHNbaV0uZ2V0R2V0dGVyKCkgPT0gbnVsbCB8fCBwcm9wc1tpXS5nZXRTZXR0ZXIoKSA9PSBudWxsKSB7Ci0gICAgICAgIGNvbnRpbnVlOyAvLyB3ZSBjYW4gb25seSBkZWFsIHdpdGggcmVhZC13cml0ZSBwcm9wcwotICAgICAgfQotICAgICAgYm9vbGVhbiBpc0F0dHJpYnV0ZSA9IGZhbHNlOwotICAgICAgU3RyaW5nIHByb3BOYW1lID0gZ2V0QW5ub3RhdGlvbihwcm9wc1tpXSxUQUdfQVRfTkFNRSxudWxsKTsKLSAgICAgIGlmIChwcm9wTmFtZSAhPSBudWxsKSB7Ci0gICAgICAgIGlzQXR0cmlidXRlID0gdHJ1ZTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHByb3BOYW1lID0gZ2V0QW5ub3RhdGlvbihwcm9wc1tpXSxUQUdfRUxfTkFNRSxwcm9wc1tpXS5nZXRTaW1wbGVOYW1lKCkpOwotICAgICAgfQotICAgICAgQmluZGluZ1R5cGUgcHJvcFR5cGUgPSBnZXRCaW5kaW5nVHlwZUZvcihwcm9wc1tpXS5nZXRUeXBlKCkpOwotICAgICAgUU5hbWVQcm9wZXJ0eSBxcHJvcCA9IG5ldyBRTmFtZVByb3BlcnR5KCk7Ci0gICAgICBxcHJvcC5zZXRCaW5kaW5nVHlwZShwcm9wVHlwZSk7Ci0gICAgICBxcHJvcC5zZXRRTmFtZShuZXcgUU5hbWUodG5zLHByb3BOYW1lKSk7Ci0gICAgICBxcHJvcC5zZXRHZXR0ZXJOYW1lKHByb3BzW2ldLmdldEdldHRlcigpLmdldFNpbXBsZU5hbWUoKSk7Ci0gICAgICBxcHJvcC5zZXRTZXR0ZXJOYW1lKHByb3BzW2ldLmdldFNldHRlcigpLmdldFNpbXBsZU5hbWUoKSk7Ci0gICAgICBiaW5kVHlwZS5hZGRQcm9wZXJ0eShxcHJvcCk7Ci0gICAgICAvLyBhbHNvIHBvcHVsYXRlIHRoZSBzY2hlbWEgdHlwZQotICAgICAgaWYgKCFpc0F0dHJpYnV0ZSkgewotICAgICAgICBpZiAoeHNkU2VxdWVuY2UgPT0gbnVsbCkgeHNkU2VxdWVuY2UgPSB4c2RUeXBlLmFkZE5ld1NlcXVlbmNlKCk7Ci0gICAgICAgIExvY2FsRWxlbWVudCB4c2RFbGVtZW50ID0geHNkU2VxdWVuY2UuYWRkTmV3RWxlbWVudCgpOwotICAgICAgICB4c2RFbGVtZW50LnNldE5hbWUocHJvcE5hbWUpOwotICAgICAgICB4c2RFbGVtZW50LnNldFR5cGUoZ2V0QnVpbHRpblR5cGVOYW1lRm9yKHByb3BzW2ldLmdldFR5cGUoKSkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgQXR0cmlidXRlIHhzZEF0dCA9IHhzZFR5cGUuYWRkTmV3QXR0cmlidXRlKCk7Ci0gICAgICAgIHFwcm9wLnNldEF0dHJpYnV0ZSh0cnVlKTsKLSAgICAgICAgeHNkQXR0LnNldE5hbWUocHJvcE5hbWUpOwotICAgICAgICB4c2RBdHQuc2V0VHlwZShnZXRCdWlsdGluVHlwZU5hbWVGb3IocHJvcHNbaV0uZ2V0VHlwZSgpKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIC8vIGNoZWNrIHRvIHNlZSBpZiB0aGV5IHdhbnQgdG8gY3JlYXRlIGEgcm9vdCBlbGVtZW50cyBmcm9tIHRoaXMgdHlwZQotICAgIEpBbm5vdGF0aW9uW10gYW5ucyA9IGNsYXp6LmdldEFubm90YXRpb25zKFRBR19DVF9ST09UKTsKLSAgICBmb3IoaW50IGk9MDsgaTxhbm5zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBUb3BMZXZlbEVsZW1lbnQgcm9vdCA9IG1TY2hlbWEuYWRkTmV3RWxlbWVudCgpOwotICAgICAgcm9vdC5zZXROYW1lKGFubnNbaV0uZ2V0U3RyaW5nVmFsdWUoKSk7Ci0gICAgICByb290LnNldFR5cGUocW5hbWUpOwotICAgICAgLy8gRklYTUUgc3RpbGwgbm90IGVudGlyZWx5IGNsZWFyIHRvIG1lIHdoYXQgd2Ugc2hvdWxkIGRvIGFib3V0Ci0gICAgICAvLyB0aGUgYmluZGluZyBmaWxlIGhlcmUKLSAgICB9Ci0gICAgcmV0dXJuIGJpbmRUeXBlOwotICB9Ci0KLSAgLy9SRVZJRVcgc2VlbXMgbGlrZSBoYXZpbmcgdGhpcyBmdW5jdGlvbmFsaXR5IGluIGphbSAoZ2V0dGVycyB3L2RlZmF1bHRzKQotICAvL3dvdWxkIGJlIGEgZ29vZCB0aGluZyB0byBhZGQgdG8gSkFNCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRBbm5vdGF0aW9uKEpFbGVtZW50IGVsZW0sIFN0cmluZyBhbm5OYW1lLCBTdHJpbmcgZGZsdCkgewotICAgIEpBbm5vdGF0aW9uIGFubiA9IGVsZW0uZ2V0QW5ub3RhdGlvbihhbm5OYW1lKTsKLSAgICByZXR1cm4gKGFubiA9PSBudWxsKSA/IGRmbHQgOiBhbm4uZ2V0U3RyaW5nVmFsdWUoKTsKLSAgfQotCi0gIHByaXZhdGUgUU5hbWUgZ2V0QnVpbHRpblR5cGVOYW1lRm9yKEpDbGFzcyBjbGF6eikgewotICAgIEJpbmRpbmdUeXBlIGJ0ID0KLSAgICAgICAgICAgIG1Mb2FkZXIuZ2V0QmluZGluZ1R5cGUobUxvYWRlci5sb29rdXBUeXBlRm9yKEphdmFOYW1lLmZvclN0cmluZyhjbGF6ei5nZXRRdWFsaWZpZWROYW1lKCkpKSk7Ci0gICAgaWYgKGJ0ICE9IG51bGwpIHJldHVybiBidC5nZXROYW1lKCkuZ2V0WG1sTmFtZSgpLmdldFFOYW1lKCk7Ci0gICAgU3lzdGVtLm91dC5wcmludGxuKCJubyB0eXBlIGZvdW5kIGZvciAiK2NsYXp6LmdldFF1YWxpZmllZE5hbWUoKSk7Ci0gICAgcmV0dXJuIG51bGw7IC8vRklYTUUKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldFRhcmdldE5hbWVzcGFjZShKQ2xhc3MgY2xhenopIHsKLSAgICBKQW5ub3RhdGlvbiBhbm4gPSBjbGF6ei5nZXRBbm5vdGF0aW9uKFRBR19DVF9UQVJHRVROUyk7Ci0gICAgaWYgKGFubiAhPSBudWxsKSByZXR1cm4gYW5uLmdldFN0cmluZ1ZhbHVlKCk7Ci0gICAgLy8gT2ssIHRoZXkgZGlkbid0IHNwZWNpZnkgaXQgaW4gdGhlIG1hcmt1cCwgc28gd2UgaGF2ZSB0bwotICAgIC8vIHN5bnRoZXNpemUgaXQgZnJvbSB0aGUgY2xhc3NuYW1lLgotICAgIFN0cmluZyBwa2dfbmFtZTsKLSAgICBpZiAoY2xhenouaXNQcmltaXRpdmUoKSkgewotICAgICAgcGtnX25hbWUgPSBKQVZBX05BTUVTUEFDRV9VUkk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHBrZ19uYW1lID0gY2xhenouZ2V0Q29udGFpbmluZ1BhY2thZ2UoKS5nZXRRdWFsaWZpZWROYW1lKCk7Ci0gICAgICBpZiAocGtnX25hbWUuc3RhcnRzV2l0aChKQVZBX1BBQ0tBR0VfUFJFRklYKSkgewotICAgICAgICBwa2dfbmFtZSA9IEpBVkFfTkFNRVNQQUNFX1VSSSsiLiIrCi0gICAgICAgICAgICAgICAgcGtnX25hbWUuc3Vic3RyaW5nKEpBVkFfUEFDS0FHRV9QUkVGSVgubGVuZ3RoKCkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gSkFWQV9VUklfU0NIRU1FICsgcGtnX25hbWU7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzWG1sT2JqKEpDbGFzcyBjbGF6eikgewotICAgIHRyeSB7Ci0gICAgICBKQ2xhc3MgeG1sT2JqID0gY2xhenouZm9yTmFtZSgib3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiKTsKLSAgICAgIHJldHVybiB4bWxPYmouaXNBc3NpZ25hYmxlRnJvbShjbGF6eik7Ci0gICAgfSBjYXRjaChFeGNlcHRpb24gZSkgewotICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsgLy9GSVhNRQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2NvbXBpbGUvSmF2YTJTY2hlbWFUYXNrLmphdmEgYi92Mi9zcmMvYmluZGluZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvYmluZGluZy9jb21waWxlL0phdmEyU2NoZW1hVGFzay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGVlNDM2Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2NvbXBpbGUvSmF2YTJTY2hlbWFUYXNrLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmNvbXBpbGU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5CdWlsZEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC5UYXNrOwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LnR5cGVzLlBhdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9uczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLkpDbGFzczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLkpGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uSkZpbGVTZXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzLkJpbmRpbmdGaWxlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMueDIwMDMueDA5LmJpbmRpbmdDb25maWcuQmluZGluZ0NvbmZpZ0RvY3VtZW50OwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLS8qKgotICogQW50IHRhc2sgZGVmaW5pdGlvbiBmb3IgYmluZGluZyBpbiB0aGUgc3RhcnQtd2l0aC1qYXZhIGNhc2UuCi0gKiBUaGUgcmVhbCB3b3JrIGlzIGRlbGVnYXRlZCB0byBhbm90aGVyIGNsYXNzLCBKYXZhMlNjaGVtYS4KLSAqCi0gKiBAYXV0aG9yIFBhdHJpY2sgQ2FsYWhhbiA8cGNhbEBiZWEuY29tPgotICovCi1wdWJsaWMgY2xhc3MgSmF2YTJTY2hlbWFUYXNrIGV4dGVuZHMgVGFzayB7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBWYXJpYWJsZXMKLQotICBwcml2YXRlIEZpbGUgbURlc3REaXIgPSBudWxsOwotICBwcml2YXRlIEZpbGUgbVRlbXBEaXIgPSBudWxsOwotICBwcml2YXRlIFBhdGggbVNvdXJjZXBhdGggPSBudWxsOwotICBwcml2YXRlIFBhdGggbUNsYXNzcGF0aCA9IG51bGw7Ci0gIHByaXZhdGUgU3RyaW5nIG1JbmNsdWRlcyA9IG51bGw7Ci0gIHByaXZhdGUgUGF0aCBtU3JjRGlyID0gbnVsbDsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFRhc2sgYXR0cmlidXRlcwotCi0gIHB1YmxpYyB2b2lkIHNldERlc3REaXIoRmlsZSBkaXIpIHsgbURlc3REaXIgPSBkaXI7IH0KLQotICBwdWJsaWMgdm9pZCBzZXRUZW1wRGlyKEZpbGUgZGlyKSB7IG1UZW1wRGlyID0gZGlyOyB9Ci0KLSAgLyoqCi0gICAqIFNldCB0aGUgc291cmNlIGRpcmVjdG9yaWVzIHRvIGZpbmQgdGhlIHNvdXJjZSBKYXZhIGZpbGVzLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U3JjZGlyKFBhdGggc3JjRGlyKSB7Ci0gICAgaWYgKG1TcmNEaXIgPT0gbnVsbCkgewotICAgICAgbVNyY0RpciA9IHNyY0RpcjsKLSAgICB9IGVsc2UgewotICAgICAgbVNyY0Rpci5hcHBlbmQoc3JjRGlyKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTb3VyY2VwYXRoKFBhdGggcGF0aCkgewotICAgIGlmIChtU291cmNlcGF0aCA9PSBudWxsKSB7Ci0gICAgICBtU291cmNlcGF0aCA9IHBhdGg7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG1Tb3VyY2VwYXRoLmFwcGVuZChwYXRoKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDbGFzc3BhdGgoUGF0aCBwYXRoKSB7Ci0gICAgaWYgKG1DbGFzc3BhdGggPT0gbnVsbCkgewotICAgICAgbUNsYXNzcGF0aCA9IHBhdGg7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG1DbGFzc3BhdGguYXBwZW5kKHBhdGgpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENsYXNzcGF0aFJlZihSZWZlcmVuY2UgcikgewotICAgIGNyZWF0ZUNsYXNzcGF0aCgpLnNldFJlZmlkKHIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U291cmNlcGF0aFJlZihSZWZlcmVuY2UgcikgewotICAgIGNyZWF0ZVNvdXJjZXBhdGgoKS5zZXRSZWZpZChyKTsKLSAgfQotCi0gIHB1YmxpYyBQYXRoIGNyZWF0ZUNsYXNzcGF0aCgpIHsKLSAgICBpZiAobUNsYXNzcGF0aCA9PSBudWxsKSB7Ci0gICAgICBtQ2xhc3NwYXRoID0gbmV3IFBhdGgoZ2V0UHJvamVjdCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1DbGFzc3BhdGguY3JlYXRlUGF0aCgpOwotICB9Ci0KLSAgcHVibGljIFBhdGggY3JlYXRlU291cmNlcGF0aCgpIHsKLSAgICBpZiAobVNvdXJjZXBhdGggPT0gbnVsbCkgewotICAgICAgbVNvdXJjZXBhdGggPSBuZXcgUGF0aChnZXRQcm9qZWN0KCkpOwotICAgIH0KLSAgICByZXR1cm4gbVNvdXJjZXBhdGguY3JlYXRlUGF0aCgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0SW5jbHVkZXMoU3RyaW5nIGluY2x1ZGVzKSB7Ci0gICAgbUluY2x1ZGVzID0gaW5jbHVkZXM7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFRhc2sgaW1wbGVtZW50YXRpb24KLQotICAgLyoqCi0gICAqIEV4ZWN1dGUgdGhlIHRhc2suCi0gICAqLwotICBwdWJsaWMgdm9pZCBleGVjdXRlKCkgdGhyb3dzIEJ1aWxkRXhjZXB0aW9uIHsKLSAgICBKRmFjdG9yeSBqZiA9IEpGYWN0b3J5LmdldEluc3RhbmNlKCk7Ci0gICAgU3RyaW5nW10gbGlzdCA9IG1TcmNEaXIubGlzdCgpOwotICAgIGlmIChsaXN0Lmxlbmd0aCAhPSAxKSB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJOWUkiKTsKLSAgICBKRmlsZVNldCBmcyA9IGpmLmNyZWF0ZUZpbGVTZXQobmV3IEZpbGUoIi4iLypsaXN0WzBdKi8pKTsKLSAgICBmcy5pbmNsdWRlKG1JbmNsdWRlcyk7Ci0gICAgaWYgKG1DbGFzc3BhdGggIT0gbnVsbCkgewotICAgICAgU3lzdGVtLm91dC5wcmludGxuKG1DbGFzc3BhdGgudG9TdHJpbmcoKSsiICBzZXQgY2xhc3NwYXRoIik7Ci0gICAgICBmcy5zZXRDbGFzc3BhdGgobUNsYXNzcGF0aC50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgSkNsYXNzW10gY2xhc3NlczsKLSAgICB0cnkgewotICAgICAgY2xhc3NlcyA9IGpmLmxvYWRTb3VyY2VzKGZzKTsKLSAgICB9IGNhdGNoKElPRXhjZXB0aW9uIGlvZSkgewotICAgICAgaW9lLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgdGhyb3cgbmV3IEJ1aWxkRXhjZXB0aW9uKGlvZSk7Ci0gICAgfQotICAgIEphdmEyU2NoZW1hIGoyYiA9IG5ldyBKYXZhMlNjaGVtYSgpOwotICAgIFR5bGFyQnVpbGRlciB0YiA9IG5ldyBFeHBsb2RlZFR5bGFyQnVpbGRlcihtRGVzdERpcik7Ci0gICAgajJiLmJpbmQoY2xhc3Nlcyx0Yik7Ci0gICAgdHJ5IHsKLSAgICAgIHRiLmNvbXBsZXRlKCk7Ci0gICAgfSBjYXRjaChJT0V4Y2VwdGlvbiBpb2UpIHsKLSAgICAgIGlvZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIHRocm93IG5ldyBCdWlsZEV4Y2VwdGlvbihpb2UpOwotICAgIH0KLSAgICBsb2coIkphdmEyU2NoZW1hIGNvbXBsZXRlLCBvdXRwdXQgaW4gIittRGVzdERpcik7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFByaXZhdGUgbWV0aG9kcwotCi0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2NvbXBpbGUvSmF2YUNvZGVHZW5lcmF0b3IuamF2YSBiL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2NvbXBpbGUvSmF2YUNvZGVHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFiMGVlNi4uMDAwMDAwMAotLS0gYS92Mi9zcmMvYmluZGluZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvYmluZGluZy9jb21waWxlL0phdmFDb2RlR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5jb21waWxlOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotcHVibGljIGludGVyZmFjZSBKYXZhQ29kZUdlbmVyYXRvcgotewotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBjb2xsZWN0aW9uIG9mIGZ1bGx5LXF1YWxpZmllZCBKYXZhIGNsYXNzIG5hbWUgc3RyaW5ncwotICAgICAqLwotICAgIENvbGxlY3Rpb24gZ2V0VG9wbGV2ZWxDbGFzc2VzKCk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogUHJpbnRzIHRoZSAuamF2YSBzb3VyY2UgY29kZSBmb3IgdGhlIGdpdmVuIGNsYXNzLgotICAgICAqIAotICAgICAqIE5vdGUgZm9yIGludGVybmF0aW9uYWxpemF0aW9uOiB0aGUgc3lzdGVtIGRlZmF1bHQgZW5jb2RpbmcKLSAgICAgKiBzaG91bGQgYmUgdXNlZCBmb3IgdGhlIGdpdmVuIE91dHB1dFN0cmVhbSwgc2luY2UgaXQgaXMgY29udmVudGlvbmFsCi0gICAgICogZm9yIEphdmEgcHJvZ3JhbXMgdG8gYmUgY29tcGlsZWQgZnJvbSBmaWxlcyB1c2luZyB0aGlzIGVuY29kaW5nLgotICAgICAqIAotICAgICAqIFRvIHByb2R1Y2UgYSBzYWZlbHkgcG9ydGFibGUgc291cmNlIGZpbGUsIGEgcHJpbnRlciBzaG91bGQgYmUKLSAgICAgKiBjYXJlZnVsIHRvIHVzZSB1WFhYWCBlc2NhcGUgY29kZXMgZm9yIGFueSBub24tYXNjaWkgY2hhcmFjdGVycy4KLSAgICAgKi8gCi0gICAgdm9pZCBwcmludFNvdXJjZUNvZGUoU3RyaW5nIHRvcExldmVsQ2xhc3NOYW1lLCBPdXRwdXRTdHJlYW0gb3V0cHV0KSB0aHJvd3MgSU9FeGNlcHRpb247Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvYmluZGluZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvYmluZGluZy9jb21waWxlL0phdmFDb2RlUHJpbnRlci5qYXZhIGIvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvY29tcGlsZS9KYXZhQ29kZVByaW50ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2YxMDM4ZS4uMDAwMDAwMAotLS0gYS92Mi9zcmMvYmluZGluZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvYmluZGluZy9jb21waWxlL0phdmFDb2RlUHJpbnRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcwICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmNvbXBpbGU7Ci0KLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgSmF2YUNvZGVQcmludGVyCi17Ci0gICAgcHJpdmF0ZSBXcml0ZXIgX3dyaXRlcjsKLSAgICBwcml2YXRlIGludCAgICBfaW5kZW50OwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExJTkVfU0VQQVJBVE9SID0KLSAgICAgICAgU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpID09IG51bGwKLSAgICAgICAgICAgID8gIlxuIgotICAgICAgICAgICAgOiBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUFYX1NQQUNFUyA9ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSU5ERU5UX0lOQ1JFTUVOVCA9IDQ7Ci0KLSAgICBwdWJsaWMgSmF2YUNvZGVQcmludGVyKFdyaXRlciB3cml0ZXIpCi0gICAgewotICAgICAgICBfd3JpdGVyID0gd3JpdGVyOwotICAgICAgICBfaW5kZW50ID0gMDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBpbmRlbnQoKQotICAgIHsKLSAgICAgICAgX2luZGVudCArPSBJTkRFTlRfSU5DUkVNRU5UOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIG91dGRlbnQoKQotICAgIHsKLSAgICAgICAgX2luZGVudCAtPSBJTkRFTlRfSU5DUkVNRU5UOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGVuY29kZVN0cmluZyhTdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQotICAgICAgICBzYi5hcHBlbmQoICciJyApOwotCi0gICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCBzLmxlbmd0aCgpIDsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hhciBjaCA9IHMuY2hhckF0KCBpICk7Ci0KLSAgICAgICAgICAgIGlmIChjaCA9PSAnIicpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKCAnXFwnICk7Ci0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKCAnXCInICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnXFwnKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggJ1xcJyApOwotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggJ1xcJyApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT0gJ1xyJykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoICdcXCcgKTsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoICdyJyApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT0gJ1xuJykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoICdcXCcgKTsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoICduJyApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT0gJ1x0JykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoICdcXCcgKTsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoICd0JyApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggY2ggKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNiLmFwcGVuZCggJyInICk7Ci0KLSAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBpbnRsU2FmZShTdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy5sZW5ndGgoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocy5jaGFyQXQoaSkgPiAxMjcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJ1aWxkSW50bFNhZmUocyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHM7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXJbXSBoZXhMb3cgPSB7Ci0gICAgICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJywKLSAgICAgICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnLAotICAgICAgICAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRicsCi0gICAgICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJywKLSAgICAgICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnLAotICAgICAgICAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRicsCi0gICAgICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJywKLSAgICAgICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnLAotICAgICAgICAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRicsCi0gICAgICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJywKLSAgICAgICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnLAotICAgICAgICAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRicsCi0gICAgICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJywKLSAgICAgICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnLAotICAgICAgICAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRicsCi0gICAgICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJywKLSAgICB9OwotICAgIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXJbXSBoZXhIaWdoID0gewotICAgICAgICAnMCcsICcwJywgJzAnLCAnMCcsICcwJywgJzAnLCAnMCcsICcwJywgJzAnLCAnMCcsICcwJywgJzAnLCAnMCcsICcwJywgJzAnLCAnMCcsCi0gICAgICAgICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywKLSAgICAgICAgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLAotICAgICAgICAnMycsICczJywgJzMnLCAnMycsICczJywgJzMnLCAnMycsICczJywgJzMnLCAnMycsICczJywgJzMnLCAnMycsICczJywgJzMnLCAnMycsCi0gICAgICAgICc0JywgJzQnLCAnNCcsICc0JywgJzQnLCAnNCcsICc0JywgJzQnLCAnNCcsICc0JywgJzQnLCAnNCcsICc0JywgJzQnLCAnNCcsICc0JywKLSAgICAgICAgJzUnLCAnNScsICc1JywgJzUnLCAnNScsICc1JywgJzUnLCAnNScsICc1JywgJzUnLCAnNScsICc1JywgJzUnLCAnNScsICc1JywgJzUnLAotICAgICAgICAnNicsICc2JywgJzYnLCAnNicsICc2JywgJzYnLCAnNicsICc2JywgJzYnLCAnNicsICc2JywgJzYnLCAnNicsICc2JywgJzYnLCAnNicsCi0gICAgICAgICc3JywgJzcnLCAnNycsICc3JywgJzcnLCAnNycsICc3JywgJzcnLCAnNycsICc3JywgJzcnLCAnNycsICc3JywgJzcnLCAnNycsICc3JywKLSAgICAgICAgJzgnLCAnOCcsICc4JywgJzgnLCAnOCcsICc4JywgJzgnLCAnOCcsICc4JywgJzgnLCAnOCcsICc4JywgJzgnLCAnOCcsICc4JywgJzgnLAotICAgICAgICAnOScsICc5JywgJzknLCAnOScsICc5JywgJzknLCAnOScsICc5JywgJzknLCAnOScsICc5JywgJzknLCAnOScsICc5JywgJzknLCAnOScsCi0gICAgICAgICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywgJ0EnLCAnQScsICdBJywKLSAgICAgICAgJ0InLCAnQicsICdCJywgJ0InLCAnQicsICdCJywgJ0InLCAnQicsICdCJywgJ0InLCAnQicsICdCJywgJ0InLCAnQicsICdCJywgJ0InLAotICAgICAgICAnQycsICdDJywgJ0MnLCAnQycsICdDJywgJ0MnLCAnQycsICdDJywgJ0MnLCAnQycsICdDJywgJ0MnLCAnQycsICdDJywgJ0MnLCAnQycsCi0gICAgICAgICdEJywgJ0QnLCAnRCcsICdEJywgJ0QnLCAnRCcsICdEJywgJ0QnLCAnRCcsICdEJywgJ0QnLCAnRCcsICdEJywgJ0QnLCAnRCcsICdEJywKLSAgICAgICAgJ0UnLCAnRScsICdFJywgJ0UnLCAnRScsICdFJywgJ0UnLCAnRScsICdFJywgJ0UnLCAnRScsICdFJywgJ0UnLCAnRScsICdFJywgJ0UnLAotICAgICAgICAnRicsICdGJywgJ0YnLCAnRicsICdGJywgJ0YnLCAnRicsICdGJywgJ0YnLCAnRicsICdGJywgJ0YnLCAnRicsICdGJywgJ0YnLCAnRicsCi0gICAgfTsKLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgYnVpbGRJbnRsU2FmZShTdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgaW50IGkgPSAwOwotICAgICAgICBpbnQgaiA9IDA7Ci0gICAgICAgIGZvciAoOzspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoOyBpIDwgcy5sZW5ndGgoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzLmNoYXJBdChpKSA+IDEyNykKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaiA8IGkpCi0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKHMuc3Vic3RyaW5nKGosIGkpKTsKLSAgICAgICAgICAgIGZvciAoOyBpIDwgcy5sZW5ndGgoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBjaCA9IHMuY2hhckF0KGkpOwotICAgICAgICAgICAgICAgIGlmIChjaCA8PSAxMjcpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGludCBoaWdoQnl0ZSA9IGNoID4+PiA4OwotICAgICAgICAgICAgICAgIGludCBsb3dCeXRlID0gY2ggJiAweEZGOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiXFx1Iik7Ci0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKGhleEhpZ2hbaGlnaEJ5dGVdKTsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoaGV4TG93W2hpZ2hCeXRlXSk7Ci0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKGhleEhpZ2hbbG93Qnl0ZV0pOwotICAgICAgICAgICAgICAgIHNiLmFwcGVuZChoZXhMb3dbbG93Qnl0ZV0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaiA9IGk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBsaW5lKFN0cmluZyBzKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGludCBpbmRlbnQgPSBfaW5kZW50OwotICAgICAgICAKLSAgICAgICAgaWYgKGluZGVudCA+IE1BWF9TUEFDRVMubGVuZ3RoKCkgLyAyKQotICAgICAgICAgICAgaW5kZW50ID0gTUFYX1NQQUNFUy5sZW5ndGgoKSAvIDQgKyBpbmRlbnQgLyAyOwotICAgICAgICAKLSAgICAgICAgaWYgKGluZGVudCA+IE1BWF9TUEFDRVMubGVuZ3RoKCkpCi0gICAgICAgICAgICBpbmRlbnQgPSBNQVhfU1BBQ0VTLmxlbmd0aCgpOwotICAgICAgICAKLSAgICAgICAgX3dyaXRlci53cml0ZShNQVhfU1BBQ0VTLnN1YnN0cmluZygwLCBpbmRlbnQpKTsKLSAgICAgICAgX3dyaXRlci53cml0ZShpbnRsU2FmZShzKSk7Ci0gICAgICAgIF93cml0ZXIud3JpdGUoTElORV9TRVBBUkFUT1IpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBsaW5lKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBfd3JpdGVyLndyaXRlKExJTkVfU0VQQVJBVE9SKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgamF2YWRvYyhTdHJpbmcgcykgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBsaW5lKCIvKioiKTsKLSAgICAgICAgaW50IGkgPSAwOwotICAgICAgICBpbnQgaiA9IDA7Ci0gICAgICAgIGZvciAoOzspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGogPSBzLmluZGV4T2YoJ1xuJywgaSk7Ci0gICAgICAgICAgICBpZiAoaiA8IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBsaW5lKCIgKiAiICsgcy5zdWJzdHJpbmcoaSwgaikpOwotICAgICAgICAgICAgaSA9IGogKyAxOwotICAgICAgICB9Ci0gICAgICAgIGxpbmUoIiAqICIgKyBzLnN1YnN0cmluZyhpKSk7Ci0gICAgICAgIGxpbmUoIiAqLyIpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzdGFydEJsb2NrKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBsaW5lKCJ7Iik7Ci0gICAgICAgIGluZGVudCgpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzdGFydEJsb2NrKFN0cmluZyBzKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGxpbmUocyArICIgeyIpOwotICAgICAgICBpbmRlbnQoKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgZW5kQmxvY2soKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIG91dGRlbnQoKTsKLSAgICAgICAgbGluZSgifSIpOwotICAgIH0KLSAgICAKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2NvbXBpbGUvSmF2YVRvU2NoZW1hSW5wdXQuamF2YSBiL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2NvbXBpbGUvSmF2YVRvU2NoZW1hSW5wdXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmIwNjA4OC4uMDAwMDAwMAotLS0gYS92Mi9zcmMvYmluZGluZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvYmluZGluZy9jb21waWxlL0phdmFUb1NjaGVtYUlucHV0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5jb21waWxlOwotCi1wdWJsaWMgaW50ZXJmYWNlIEphdmFUb1NjaGVtYUlucHV0Ci17Ci0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIHNvbWV0aGluZyB0aGF0IHJlcHJlc2VudHMgYSBzZXQgb2YgSkNsYXNzZXMgdGhhdAotICAgICAqIGFyZSB0byBiZSBwcm9jZXNzZWQgZm9yIGJpbmRpbmcuICg/PykKLSAgICAgKi8gCi0gICAgLy8gSkNsYXNzU2V0IGdldEpDbGFzc1NldCgpOwotICAgIAotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHBhdGggdXNlZCBmb3IgcmVzb2x2aW5nIGFscmVhZHkta25vd24gYmluZGluZ3MKLSAgICAgKi8KLSAgICBUeWxhckxvYWRlciBnZXRUeWxhckxvYWRlcigpOwotICAgIAotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvY29tcGlsZS9KYXZhVG9TY2hlbWFSZXN1bHQuamF2YSBiL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2NvbXBpbGUvSmF2YVRvU2NoZW1hUmVzdWx0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlN2NhYzguLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvY29tcGlsZS9KYXZhVG9TY2hlbWFSZXN1bHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmNvbXBpbGU7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgSmF2YVRvU2NoZW1hUmVzdWx0Ci17Ci0gICAgQmluZGluZ0ZpbGVHZW5lcmF0b3IgZ2V0QmluZGluZ0ZpbGVHZW5lcmF0b3IoKTsKLSAgICBTY2hlbWFHZW5lcmF0b3IgZ2V0U2NoZW1hR2VuZXJhdG9yKCk7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvYmluZGluZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvYmluZGluZy9jb21waWxlL1NjaGVtYUdlbmVyYXRvci5qYXZhIGIvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvY29tcGlsZS9TY2hlbWFHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjJiMjMwMi4uMDAwMDAwMAotLS0gYS92Mi9zcmMvYmluZGluZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvYmluZGluZy9jb21waWxlL1NjaGVtYUdlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuY29tcGlsZTsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLXB1YmxpYyBpbnRlcmZhY2UgU2NoZW1hR2VuZXJhdG9yCi17Ci0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIGNvbGxlY3Rpb24gb2YgdGFyZ2V0TmFtZXNwYWNlIFVSSXMgYXMgU3RyaW5ncy4KLSAgICAgKi8KLSAgICBDb2xsZWN0aW9uIGdldFRhcmdldE5hbWVzcGFjZXMoKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBQcmludHMgdGhlIC54c2Qgc291cmNlIGNvZGUgZm9yIHRoZSBnaXZlbiB0YXJnZXQgbmFtZXNwYWNlLgotICAgICAqIAotICAgICAqIE5vdGUgZm9yIGludGVybmF0aW9uYWxpemF0aW9uOiB1dGYtOCBpcyBhbHdheXMgdXNlZCBmb3IgdGhlCi0gICAgICogZ2l2ZW4gT3V0cHV0U3RyZWFtLgotICAgICAqLyAKLSAgICB2b2lkIHByaW50U2NoZW1hKFN0cmluZyB0YXJnZXROYW1lc3BhY2UsIE91dHB1dFN0cmVhbSBvdXRwdXQpIHRocm93cyBJT0V4Y2VwdGlvbjsKLSAgICAKLSAgICAvLyBjb25zaWRlcjogbWF5YmUgcmV0dXJuaW5nIGdlbmVyYXRlZCBzY2hlbWFzIGluIHNvbWUgb3RoZXIgZm9ybT8KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2NvbXBpbGUvU2NoZW1hVG9KYXZhSW5wdXQuamF2YSBiL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2NvbXBpbGUvU2NoZW1hVG9KYXZhSW5wdXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgyYTk0Yy4uMDAwMDAwMAotLS0gYS92Mi9zcmMvYmluZGluZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvYmluZGluZy9jb21waWxlL1NjaGVtYVRvSmF2YUlucHV0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5jb21waWxlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlU3lzdGVtOwotCi1wdWJsaWMgaW50ZXJmYWNlIFNjaGVtYVRvSmF2YUlucHV0Ci17Ci0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIHR5cGVzeXN0ZW0gdGhhdCBjb250YWlucyBhbGwgdGhlIHNjaGVtYSB0eXBlcyB0byBiZQotICAgICAqIGNvbnZlcnRlZCB0byBvciBib3VuZCB0byBKYXZhLgotICAgICAqLyAKLSAgICBTY2hlbWFUeXBlU3lzdGVtIGdldFNjaGVtYVR5cGVTeXN0ZW0oKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBwYXRoIHVzZWQgZm9yIHJlc29sdmluZyBhbHJlYWR5LWtub3duIGJpbmRpbmdzCi0gICAgICovCi0gICAgVHlsYXJMb2FkZXIgZ2V0VHlsYXJMb2FkZXIoKTsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2NvbXBpbGUvU2NoZW1hVG9KYXZhUmVzdWx0LmphdmEgYi92Mi9zcmMvYmluZGluZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvYmluZGluZy9jb21waWxlL1NjaGVtYVRvSmF2YVJlc3VsdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzJkNDUxLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2NvbXBpbGUvU2NoZW1hVG9KYXZhUmVzdWx0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5jb21waWxlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuY29tcGlsZS5CaW5kaW5nRmlsZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5jb21waWxlLkphdmFDb2RlR2VuZXJhdG9yOwotCi0vKioKLSAqIFRoZSByZXN1bHQgb2YgYSBTY2hlbWEtPkphdmEgYmluZGluZy4KLSAqIAotICogVGhlIHJlc3VsdCBjb250YWluczogKDEpIGEgYmluZGluZyBmaWxlLCBhbmQgKDIpIGEgc2V0IG9mCi0gKiBnZW5lcmF0ZWQgSmF2YSBjbGFzc2VzLgotICovCi1wdWJsaWMgaW50ZXJmYWNlIFNjaGVtYVRvSmF2YVJlc3VsdAotewotICAgIEJpbmRpbmdGaWxlR2VuZXJhdG9yIGdldEJpbmRpbmdGaWxlR2VuZXJhdG9yKCk7Ci0gICAgSmF2YUNvZGVHZW5lcmF0b3IgZ2V0SmF2YUNvZGVHZW5lcmF0b3IoKTsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2NvbXBpbGUvVHlsYXJCdWlsZGVyLmphdmEgYi92Mi9zcmMvYmluZGluZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvYmluZGluZy9jb21waWxlL1R5bGFyQnVpbGRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGMyOGE5Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9iaW5kaW5nL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9iaW5kaW5nL2NvbXBpbGUvVHlsYXJCdWlsZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuY29tcGlsZTsKLQotaW1wb3J0IG9yZy53My54MjAwMS54bWxTY2hlbWEuU2NoZW1hRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzLkJpbmRpbmdGaWxlOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotLyoqCi0gKiBJc29sYXRlcyBiaW5kaW5nIGNvbXBpbGF0aW9uIHRhc2tzIGZyb20gZGV0YWlscyBvZiBob3cgdGhlaXIgb3V0cHV0cyBhcmUKLSAqIGFjdHVhbGx5IHdyaXR0ZW4gb3V0IHRvIGRpc2suICBUaGVyZSB3aWxsIHByb2JhYmx5IGJlIGF0IGxlYXN0IHR3bwotICogaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgaW50ZXJmYWNlOiBvbmUgdGhhdCBvdXRwdXRzIGEgamFycmVkICd0eWxhcicgYW5kCi0gKiBhbm90aGVyIHdoaWNoIG91dHB1dHMgYSBkaXJlY3RvcnkuCi0gKgotICogV2UgbWF5IHdhbnQgdG8gY2hhbmdlIHRoZSBuYW1lIG9mIHRoaXMgY2xhc3M7IEknbSBzdGlsbCBhIGxpdHRsZSB1bmVhc3kKLSAqIGFib3V0ICd0eWxhciwnIGJ1dCBmb3IgdGhlIG1vbWVudCwgYXQgbGVhc3QgZXZlcnlvbmUgd2lsbCB1bmRlcnN0YW5kIHdoYXQKLSAqIHRoaXMgaXMuCi0gKgotICogQGF1dGhvciBQYXRyaWNrIENhbGFoYW4gPHBjYWxAYmVhLmNvbT4KLSAqLwotcHVibGljIGludGVyZmFjZSBUeWxhckJ1aWxkZXIgewotCi0vKioKLSAqIEFkZHMgdGhlIGdpdmVuIHNjaGVtYSBkb2N1bWVudCB0byB0aGUgdHlwZSBsaWJyYXJ5LgotICovCi0gIHB1YmxpYyB2b2lkIGFkZFNjaGVtYShTY2hlbWFEb2N1bWVudCBzZCk7Ci0KLSAgLyoqCi0gICAqIEFkZHMgdGhlIGdpdmVuIGJpbmRpbmcgY29uZmlnIHRvIHRoZSB0eXBlIGxpYnJhcnkuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRCaW5kaW5nRmlsZShCaW5kaW5nRmlsZSBiZik7Ci0KLSAgLyoqCi0gICAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB0byBpbmZvcm0gdGhlIGJ1aWxkZXIgdGhhdCB3b3JrIGlzIGNvbXBsZXRlIGFuZAotICAgKiB0aGF0IGl0IHNob3VsZCB3cml0ZSBhbGwgb2YgaXRzIG91dHB1dCB0byBkaXNrIChvciB3aGF0ZXZlciBpdCB3YW50cwotICAgKiB0byBkbykuICBUaGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIGF0IG1vc3Qgb25jZSBmb3IgYSBnaXZlbiBpbnN0YW5jZQotICAgKiBvZiBUeWxhckJ1aWxkZXI7IGFueSBzdWJzZXF1ZW50IG1ldGhvZCBjYWxscyBvbiB0aGF0IGluc3RhbmNlIHdpbGwgcmVzdWx0Ci0gICAqIGluIGFuIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbi4KLSAgICoKLSAgICogQHRocm93cyBJT0V4Y2VwdGlvbiBpZiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgcGVyZm9ybWluZyBvdXRwdXQuIFJFVklFVwotICAgKi8KLSAgcHVibGljIHZvaWQgY29tcGxldGUoKSB0aHJvd3MgSU9FeGNlcHRpb247Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92Mi9zcmMvYmluZGluZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvYmluZGluZy9jb21waWxlL1R5bGFyTG9hZGVyLmphdmEgYi92Mi9zcmMvYmluZGluZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvYmluZGluZy9jb21waWxlL1R5bGFyTG9hZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmMjc2MjYuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2JpbmRpbmcvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2JpbmRpbmcvY29tcGlsZS9UeWxhckxvYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuY29tcGlsZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uSkNsYXNzTG9hZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0cy5CaW5kaW5nTG9hZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlcjsKLQotLyoqCi0gKiBSZXByZXNlbnRzIGEgcGF0aCBvbiB3aGljaDoKLSAqIDxwcmU+Ci0gKiAoMSkgQmluZGluZyBtZXRhZGF0YSBjYW4gYmUgbG9hZGVkCi0gKiAoMikgTWV0YWRhdGEgYWJvdXQgdGhlIGJvdW5kIGphdmEgY2xhc3NlcyBjYW4gYmUgbG9hZGVkCi0gKiAoMykgTWV0YWRhdGEgYWJvdXQgdGhlIGJvdW5kIHNjaGVtYSBjb21wb25lbnRzIGNhbiBiZSBsb2FkZWQKLSAqIDwvcHJlPgotICogCi0gKiBUaGlzIHR5bGFyTG9hZGVyIGNvbmNlcHQgaXMgdXNlZCBhdCBib3RoIGNvbXBpbGV0aW1lIGFuZCBydW50aW1lLgotICogQXQgY29tcGlsZXRpbWUsIGl0IGlzIHVzZWQgdG8gcHJvdmlkZSBqYXZhL3NjaGVtYS9iaW5kaW5nIHR5cGUKLSAqIGluZm9ybWF0aW9uIHRvIGxpbmsgYWdhaW5zdC4gIEF0IHJ1bnRpbWUsIGl0IGlzIHVzZWQgdG8gcHJvdmlkZQotICogdGhlIGNvbXBsZXRlIGphdmEvc2NoZW1hL2JpbmRpbmcgdHlwZSBpbmZvcm1hdGlvbiB0byBtYXJzaGFsCi0gKiB3aXRoLgotICovIAotcHVibGljIGludGVyZmFjZSBUeWxhckxvYWRlcgotewotICAgIEJpbmRpbmdMb2FkZXIgZ2V0QmluZGluZ0xvYWRlcigpOwotICAgIEpDbGFzc0xvYWRlciBnZXRKQ2xhc3NMb2FkZXIoKTsKLSAgICBTY2hlbWFUeXBlTG9hZGVyIGdldFNjaGVtYVR5cGVMb2FkZXIoKTsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9DaGFycy5qYXZhIGIvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL0NoYXJzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwNDFkNWQuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL0NoYXJzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb247Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBDaGFycwotewotICAgIHB1YmxpYyBTdHJpbmcgYXNTdHJpbmcgKCApCi0gICAgewotICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHN0cmluZyA9PSBudWxsCi0gICAgICAgICAgICAgICAgPyBidWZmZXIgPT0gbnVsbCA/ICIiIDogbmV3IFN0cmluZyggYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCApCi0gICAgICAgICAgICAgICAgOiBzdHJpbmc7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBzdHJpbmc7Ci0KLSAgICBwdWJsaWMgY2hhcltdIGJ1ZmZlcjsKLSAgICBwdWJsaWMgaW50ICAgIG9mZnNldDsKLSAgICBwdWJsaWMgaW50ICAgIGxlbmd0aDsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9FbmNvZGluZ01hcC5qYXZhIGIvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL0VuY29kaW5nTWFwLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0MWI0MmMuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL0VuY29kaW5nTWFwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NDEgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1wdWJsaWMgY2xhc3MgRW5jb2RpbmdNYXAKLXsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRKYXZhMklBTkFNYXBwaW5nICggU3RyaW5nIGphdmEgKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChTdHJpbmcpIF9qYXZhX3RvX2lhbmEuZ2V0KCBqYXZhLnRvVXBwZXJDYXNlKCkgKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SUFOQTJKYXZhTWFwcGluZyAoIFN0cmluZyBpYW5hICkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoU3RyaW5nKSBfaWFuYV90b19qYXZhLmdldCggaWFuYS50b1VwcGVyQ2FzZSgpICk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBFbmNvZGluZ01hcCAoICkgeyB9Ci0gICAgCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgSGFzaE1hcCBfaWFuYV90b19qYXZhID0gbmV3IEhhc2hNYXAoKTsKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBIYXNoTWFwIF9qYXZhX3RvX2lhbmEgPSBuZXcgSGFzaE1hcCgpOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgdm9pZCBhZGRNYXBwaW5nICgKLSAgICAgICAgU3RyaW5nIGphdmEsIFN0cmluZyBpYW5hLCBib29sZWFuIGlzRGVmYXVsdCApCi0gICAgewotICAgICAgICBhc3NlcnQgIV9pYW5hX3RvX2phdmEuY29udGFpbnNLZXkoIGlhbmEgKTsKLSAgICAgICAgYXNzZXJ0IGphdmEudG9VcHBlckNhc2UoKS5lcXVhbHMoIGphdmEgKTsKLSAgICAgICAgYXNzZXJ0IGlhbmEudG9VcHBlckNhc2UoKS5lcXVhbHMoIGlhbmEgKTsKLSAgICAgICAgCi0gICAgICAgIF9pYW5hX3RvX2phdmEucHV0KCBpYW5hLCBqYXZhICk7Ci0KLSAgICAgICAgaWYgKGlzRGVmYXVsdCkKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0ICFfamF2YV90b19pYW5hLmNvbnRhaW5zS2V5KCBqYXZhICk7Ci0gICAgICAgICAgICBfamF2YV90b19pYW5hLnB1dCggamF2YSwgaWFuYSApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgYm9vbGVhbiBjb21wbGV0ZU1hcHBpbmdzICggKQotICAgIHsKLSAgICAgICAgSGFzaE1hcCBtID0gbmV3IEhhc2hNYXAoKTsKLQotICAgICAgICBmb3IgKCBJdGVyYXRvciBpID0gX2lhbmFfdG9famF2YS5rZXlTZXQoKS5pdGVyYXRvcigpIDsgaS5oYXNOZXh0KCkgOyApCi0gICAgICAgICAgICBtLnB1dCggX2lhbmFfdG9famF2YS5nZXQoIGkubmV4dCgpICksIG51bGwgKTsKLQotICAgICAgICBmb3IgKCBJdGVyYXRvciBpID0gbS5rZXlTZXQoKS5pdGVyYXRvcigpIDsgaS5oYXNOZXh0KCkgOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIE9iamVjdCBrID0gaS5uZXh0KCk7Ci0gICAgICAgICAgICBhc3NlcnQgX2phdmFfdG9faWFuYS5jb250YWluc0tleSggayApOiBrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgc3RhdGljCi0gICAgewotICAgICAgICBhZGRNYXBwaW5nKCAiQVNDSUkiLCAgICAgICAgICJBTlNJX1gzLjQtMTk4NiIsICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkFTQ0lJIiwgICAgICAgICAiQVNDSUkiLCAgICAgICAgICAgICAgICAgIHRydWUgICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJBU0NJSSIsICAgICAgICAgIkNQMzY3IiwgICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQVNDSUkiLCAgICAgICAgICJDU0FTQ0lJIiwgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkFTQ0lJIiwgICAgICAgICAiSUJNLTM2NyIsICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJBU0NJSSIsICAgICAgICAgIklCTTM2NyIsICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQVNDSUkiLCAgICAgICAgICJJU08tSVItNiIsICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkFTQ0lJIiwgICAgICAgICAiSVNPNjQ2LVVTIiwgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJBU0NJSSIsICAgICAgICAgIklTT182NDYuSVJWOjE5OTEiLCAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQVNDSUkiLCAgICAgICAgICJVUyIsICAgICAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkFTQ0lJIiwgICAgICAgICAiVVMtQVNDSUkiLCAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJCSUc1IiwgICAgICAgICAgIkJJRzUiLCAgICAgICAgICAgICAgICAgICB0cnVlICApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQklHNSIsICAgICAgICAgICJDU0JJRzUiLCAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMDM3IiwgICAgICAgICAiQ1AwMzciLCAgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDAzNyIsICAgICAgICAgIkNTSUJNMDM3IiwgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AwMzciLCAgICAgICAgICJFQkNESUMtQ1AtQ0EiLCAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMDM3IiwgICAgICAgICAiRUJDRElDLUNQLU5MIiwgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDAzNyIsICAgICAgICAgIkVCQ0RJQy1DUC1VUyIsICAgICAgICAgICB0cnVlICApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AwMzciLCAgICAgICAgICJFQkNESUMtQ1AtV1QiLCAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMDM3IiwgICAgICAgICAiSUJNLTM3IiwgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDAzNyIsICAgICAgICAgIklCTTAzNyIsICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AxMDI2IiwgICAgICAgICJDUDEwMjYiLCAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMTAyNiIsICAgICAgICAiQ1NJQk0xMDI2IiwgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDEwMjYiLCAgICAgICAgIklCTS0xMDI2IiwgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AxMDI2IiwgICAgICAgICJJQk0xMDI2IiwgICAgICAgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMTA0NyIsICAgICAgICAiQ1AxMDQ3IiwgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDEwNDciLCAgICAgICAgIklCTS0xMDQ3IiwgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AxMDQ3IiwgICAgICAgICJJQk0xMDQ3IiwgICAgICAgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMTE0MCIsICAgICAgICAiQ0NTSUQwMTE0MCIsICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDExNDAiLCAgICAgICAgIkNQMDExNDAiLCAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AxMTQwIiwgICAgICAgICJJQk0tMTE0MCIsICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMTE0MCIsICAgICAgICAiSUJNMDExNDAiLCAgICAgICAgICAgICAgIHRydWUgICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDExNDEiLCAgICAgICAgIkNDU0lEMDExNDEiLCAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AxMTQxIiwgICAgICAgICJDUDAxMTQxIiwgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMTE0MSIsICAgICAgICAiSUJNLTExNDEiLCAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDExNDEiLCAgICAgICAgIklCTTAxMTQxIiwgICAgICAgICAgICAgICB0cnVlICApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AxMTQyIiwgICAgICAgICJDQ1NJRDAxMTQyIiwgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMTE0MiIsICAgICAgICAiQ1AwMTE0MiIsICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDExNDIiLCAgICAgICAgIklCTS0xMTQyIiwgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AxMTQyIiwgICAgICAgICJJQk0wMTE0MiIsICAgICAgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMTE0MyIsICAgICAgICAiQ0NTSUQwMTE0MyIsICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDExNDMiLCAgICAgICAgIkNQMDExNDMiLCAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AxMTQzIiwgICAgICAgICJJQk0tMTE0MyIsICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMTE0MyIsICAgICAgICAiSUJNMDExNDMiLCAgICAgICAgICAgICAgIHRydWUgICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDExNDQiLCAgICAgICAgIkNDU0lEMDExNDQiLCAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AxMTQ0IiwgICAgICAgICJDUDAxMTQ0IiwgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMTE0NCIsICAgICAgICAiSUJNLTExNDQiLCAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDExNDQiLCAgICAgICAgIklCTTAxMTQ0IiwgICAgICAgICAgICAgICB0cnVlICApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AxMTQ1IiwgICAgICAgICJDQ1NJRDAxMTQ1IiwgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMTE0NSIsICAgICAgICAiQ1AwMTE0NSIsICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDExNDUiLCAgICAgICAgIklCTS0xMTQ1IiwgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AxMTQ1IiwgICAgICAgICJJQk0wMTE0NSIsICAgICAgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMTE0NiIsICAgICAgICAiQ0NTSUQwMTE0NiIsICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDExNDYiLCAgICAgICAgIkNQMDExNDYiLCAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AxMTQ2IiwgICAgICAgICJJQk0tMTE0NiIsICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMTE0NiIsICAgICAgICAiSUJNMDExNDYiLCAgICAgICAgICAgICAgIHRydWUgICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDExNDciLCAgICAgICAgIkNDU0lEMDExNDciLCAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AxMTQ3IiwgICAgICAgICJDUDAxMTQ3IiwgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMTE0NyIsICAgICAgICAiSUJNLTExNDciLCAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDExNDciLCAgICAgICAgIklCTTAxMTQ3IiwgICAgICAgICAgICAgICB0cnVlICApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AxMTQ4IiwgICAgICAgICJDQ1NJRDAxMTQ4IiwgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMTE0OCIsICAgICAgICAiQ1AwMTE0OCIsICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDExNDgiLCAgICAgICAgIklCTS0xMTQ4IiwgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AxMTQ4IiwgICAgICAgICJJQk0wMTE0OCIsICAgICAgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMTE0OSIsICAgICAgICAiQ0NTSUQwMTE0OSIsICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDExNDkiLCAgICAgICAgIkNQMDExNDkiLCAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AxMTQ5IiwgICAgICAgICJJQk0tMTE0OSIsICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMTE0OSIsICAgICAgICAiSUJNMDExNDkiLCAgICAgICAgICAgICAgIHRydWUgICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDEyNTAiLCAgICAgICAgIldJTkRPV1MtMTI1MCIsICAgICAgICAgICB0cnVlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDEyNTEiLCAgICAgICAgIldJTkRPV1MtMTI1MSIsICAgICAgICAgICB0cnVlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDEyNTIiLCAgICAgICAgIldJTkRPV1MtMTI1MiIsICAgICAgICAgICB0cnVlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDEyNTMiLCAgICAgICAgIldJTkRPV1MtMTI1MyIsICAgICAgICAgICB0cnVlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDEyNTQiLCAgICAgICAgIldJTkRPV1MtMTI1NCIsICAgICAgICAgICB0cnVlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDEyNTUiLCAgICAgICAgIldJTkRPV1MtMTI1NSIsICAgICAgICAgICB0cnVlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDEyNTYiLCAgICAgICAgIldJTkRPV1MtMTI1NiIsICAgICAgICAgICB0cnVlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDEyNTciLCAgICAgICAgIldJTkRPV1MtMTI1NyIsICAgICAgICAgICB0cnVlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDEyNTgiLCAgICAgICAgIldJTkRPV1MtMTI1OCIsICAgICAgICAgICB0cnVlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDI3MyIsICAgICAgICAgIkNQMjczIiwgICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AyNzMiLCAgICAgICAgICJDU0lCTTI3MyIsICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMjczIiwgICAgICAgICAiSUJNLTI3MyIsICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDI3MyIsICAgICAgICAgIklCTTI3MyIsICAgICAgICAgICAgICAgICB0cnVlICApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AyNzciLCAgICAgICAgICJDUDI3NyIsICAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMjc3IiwgICAgICAgICAiQ1NJQk0yNzciLCAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDI3NyIsICAgICAgICAgIkVCQ0RJQy1DUC1ESyIsICAgICAgICAgICB0cnVlICApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AyNzciLCAgICAgICAgICJFQkNESUMtQ1AtTk8iLCAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMjc3IiwgICAgICAgICAiSUJNLTI3NyIsICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDI3NyIsICAgICAgICAgIklCTTI3NyIsICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AyNzgiLCAgICAgICAgICJDUDI3OCIsICAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMjc4IiwgICAgICAgICAiQ1NJQk0yNzgiLCAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDI3OCIsICAgICAgICAgIkVCQ0RJQy1DUC1GSSIsICAgICAgICAgICB0cnVlICApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AyNzgiLCAgICAgICAgICJFQkNESUMtQ1AtU0UiLCAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMjc4IiwgICAgICAgICAiSUJNLTI3OCIsICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDI3OCIsICAgICAgICAgIklCTTI3OCIsICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AyODAiLCAgICAgICAgICJDUDI4MCIsICAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMjgwIiwgICAgICAgICAiQ1NJQk0yODAiLCAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDI4MCIsICAgICAgICAgIkVCQ0RJQy1DUC1JVCIsICAgICAgICAgICB0cnVlICApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AyODAiLCAgICAgICAgICJJQk0tMjgwIiwgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMjgwIiwgICAgICAgICAiSUJNMjgwIiwgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDI4NCIsICAgICAgICAgIkNQMjg0IiwgICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AyODQiLCAgICAgICAgICJDU0lCTTI4NCIsICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMjg0IiwgICAgICAgICAiRUJDRElDLUNQLUVTIiwgICAgICAgICAgIHRydWUgICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDI4NCIsICAgICAgICAgIklCTS0yODQiLCAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AyODQiLCAgICAgICAgICJJQk0yODQiLCAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMjg1IiwgICAgICAgICAiQ1AyODUiLCAgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDI4NSIsICAgICAgICAgIkNTSUJNMjg1IiwgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AyODUiLCAgICAgICAgICJFQkNESUMtQ1AtR0IiLCAgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMjg1IiwgICAgICAgICAiSUJNLTI4NSIsICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDI4NSIsICAgICAgICAgIklCTTI4NSIsICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AyOTAiLCAgICAgICAgICJDUDI5MCIsICAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMjkwIiwgICAgICAgICAiQ1NJQk0yOTAiLCAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDI5MCIsICAgICAgICAgIkVCQ0RJQy1KUC1LQU5BIiwgICAgICAgICB0cnVlICApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AyOTAiLCAgICAgICAgICJJQk0tMjkwIiwgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMjkwIiwgICAgICAgICAiSUJNMjkwIiwgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDI5NyIsICAgICAgICAgIkNQMjk3IiwgICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AyOTciLCAgICAgICAgICJDU0lCTTI5NyIsICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQMjk3IiwgICAgICAgICAiRUJDRElDLUNQLUZSIiwgICAgICAgICAgIHRydWUgICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDI5NyIsICAgICAgICAgIklCTS0yOTciLCAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1AyOTciLCAgICAgICAgICJJQk0yOTciLCAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQNDIwIiwgICAgICAgICAiQ1A0MjAiLCAgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDQyMCIsICAgICAgICAgIkNTSUJNNDIwIiwgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A0MjAiLCAgICAgICAgICJFQkNESUMtQ1AtQVIxIiwgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQNDIwIiwgICAgICAgICAiSUJNLTQyMCIsICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDQyMCIsICAgICAgICAgIklCTTQyMCIsICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A0MjQiLCAgICAgICAgICJDUDQyNCIsICAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQNDI0IiwgICAgICAgICAiQ1NJQk00MjQiLCAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDQyNCIsICAgICAgICAgIkVCQ0RJQy1DUC1IRSIsICAgICAgICAgICB0cnVlICApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A0MjQiLCAgICAgICAgICJJQk0tNDI0IiwgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQNDI0IiwgICAgICAgICAiSUJNNDI0IiwgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDQzNyIsICAgICAgICAgIjQzNyIsICAgICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A0MzciLCAgICAgICAgICJDUDQzNyIsICAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQNDM3IiwgICAgICAgICAiQ1NQQzhDT0RFUEFHRTQzNyIsICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDQzNyIsICAgICAgICAgIklCTS00MzciLCAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A0MzciLCAgICAgICAgICJJQk00MzciLCAgICAgICAgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQNTAwIiwgICAgICAgICAiQ1A1MDAiLCAgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDUwMCIsICAgICAgICAgIkNTSUJNNTAwIiwgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A1MDAiLCAgICAgICAgICJFQkNESUMtQ1AtQkUiLCAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQNTAwIiwgICAgICAgICAiRUJDRElDLUNQLUNIIiwgICAgICAgICAgIHRydWUgICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDUwMCIsICAgICAgICAgIklCTS01MDAiLCAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A1MDAiLCAgICAgICAgICJJQk01MDAiLCAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQNzc1IiwgICAgICAgICAiQ1A3NzUiLCAgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDc3NSIsICAgICAgICAgIkNTUEM3NzVCQUxUSUMiLCAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A3NzUiLCAgICAgICAgICJJQk0tNzc1IiwgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQNzc1IiwgICAgICAgICAiSUJNNzc1IiwgICAgICAgICAgICAgICAgIHRydWUgICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg1MCIsICAgICAgICAgIjg1MCIsICAgICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NTAiLCAgICAgICAgICJDUDg1MCIsICAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODUwIiwgICAgICAgICAiQ1NQQzg1ME1VTFRJTElOR1VBTCIsICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg1MCIsICAgICAgICAgIklCTS04NTAiLCAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NTAiLCAgICAgICAgICJJQk04NTAiLCAgICAgICAgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODUyIiwgICAgICAgICAiODUyIiwgICAgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg1MiIsICAgICAgICAgIkNQODUyIiwgICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NTIiLCAgICAgICAgICJDU1BDUDg1MiIsICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODUyIiwgICAgICAgICAiSUJNLTg1MiIsICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg1MiIsICAgICAgICAgIklCTTg1MiIsICAgICAgICAgICAgICAgICB0cnVlICApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NTUiLCAgICAgICAgICI4NTUiLCAgICAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODU1IiwgICAgICAgICAiQ1A4NTUiLCAgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg1NSIsICAgICAgICAgIkNTSUJNODU1IiwgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NTUiLCAgICAgICAgICJJQk0tODU1IiwgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODU1IiwgICAgICAgICAiSUJNODU1IiwgICAgICAgICAgICAgICAgIHRydWUgICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg1NyIsICAgICAgICAgIjg1NyIsICAgICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NTciLCAgICAgICAgICJDUDg1NyIsICAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODU3IiwgICAgICAgICAiQ1NJQk04NTciLCAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg1NyIsICAgICAgICAgIklCTS04NTciLCAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NTciLCAgICAgICAgICJJQk04NTciLCAgICAgICAgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODU4IiwgICAgICAgICAiQ0NTSUQwMDg1OCIsICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg1OCIsICAgICAgICAgIkNQMDA4NTgiLCAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NTgiLCAgICAgICAgICJJQk0tODU4IiwgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODU4IiwgICAgICAgICAiSUJNMDA4NTgiLCAgICAgICAgICAgICAgIHRydWUgICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg2MCIsICAgICAgICAgIjg2MCIsICAgICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NjAiLCAgICAgICAgICJDUDg2MCIsICAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODYwIiwgICAgICAgICAiQ1NJQk04NjAiLCAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg2MCIsICAgICAgICAgIklCTS04NjAiLCAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NjAiLCAgICAgICAgICJJQk04NjAiLCAgICAgICAgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODYxIiwgICAgICAgICAiODYxIiwgICAgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg2MSIsICAgICAgICAgIkNQLUlTIiwgICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NjEiLCAgICAgICAgICJDUDg2MSIsICAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODYxIiwgICAgICAgICAiQ1NJQk04NjEiLCAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg2MSIsICAgICAgICAgIklCTS04NjEiLCAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NjEiLCAgICAgICAgICJJQk04NjEiLCAgICAgICAgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODYyIiwgICAgICAgICAiODYyIiwgICAgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg2MiIsICAgICAgICAgIkNQODYyIiwgICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NjIiLCAgICAgICAgICJDU1BDODYyTEFUSU5IRUJSRVciLCAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODYyIiwgICAgICAgICAiSUJNLTg2MiIsICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg2MiIsICAgICAgICAgIklCTTg2MiIsICAgICAgICAgICAgICAgICB0cnVlICApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NjMiLCAgICAgICAgICI4NjMiLCAgICAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODYzIiwgICAgICAgICAiQ1A4NjMiLCAgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg2MyIsICAgICAgICAgIkNTSUJNODYzIiwgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NjMiLCAgICAgICAgICJJQk0tODYzIiwgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODYzIiwgICAgICAgICAiSUJNODYzIiwgICAgICAgICAgICAgICAgIHRydWUgICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg2NCIsICAgICAgICAgIkNQODY0IiwgICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NjQiLCAgICAgICAgICJDU0lCTTg2NCIsICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODY0IiwgICAgICAgICAiSUJNLTg2NCIsICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg2NCIsICAgICAgICAgIklCTTg2NCIsICAgICAgICAgICAgICAgICB0cnVlICApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NjUiLCAgICAgICAgICI4NjUiLCAgICAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODY1IiwgICAgICAgICAiQ1A4NjUiLCAgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg2NSIsICAgICAgICAgIkNTSUJNODY1IiwgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NjUiLCAgICAgICAgICJJQk0tODY1IiwgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODY1IiwgICAgICAgICAiSUJNODY1IiwgICAgICAgICAgICAgICAgIHRydWUgICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg2NiIsICAgICAgICAgIjg2NiIsICAgICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NjYiLCAgICAgICAgICJDUDg2NiIsICAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODY2IiwgICAgICAgICAiQ1NJQk04NjYiLCAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg2NiIsICAgICAgICAgIklCTS04NjYiLCAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NjYiLCAgICAgICAgICJJQk04NjYiLCAgICAgICAgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODY4IiwgICAgICAgICAiQ1AtQVIiLCAgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg2OCIsICAgICAgICAgIkNQODY4IiwgICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NjgiLCAgICAgICAgICJDU0lCTTg2OCIsICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODY4IiwgICAgICAgICAiSUJNLTg2OCIsICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg2OCIsICAgICAgICAgIklCTTg2OCIsICAgICAgICAgICAgICAgICB0cnVlICApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NjkiLCAgICAgICAgICJDUC1HUiIsICAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODY5IiwgICAgICAgICAiQ1A4NjkiLCAgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg2OSIsICAgICAgICAgIkNTSUJNODY5IiwgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NjkiLCAgICAgICAgICJJQk0tODY5IiwgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODY5IiwgICAgICAgICAiSUJNODY5IiwgICAgICAgICAgICAgICAgIHRydWUgICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg3MCIsICAgICAgICAgIkNQODcwIiwgICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NzAiLCAgICAgICAgICJDU0lCTTg3MCIsICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODcwIiwgICAgICAgICAiRUJDRElDLUNQLVJPRUNFIiwgICAgICAgIHRydWUgICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg3MCIsICAgICAgICAgIkVCQ0RJQy1DUC1ZVSIsICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NzAiLCAgICAgICAgICJJQk0tODcwIiwgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODcwIiwgICAgICAgICAiSUJNODcwIiwgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg3MSIsICAgICAgICAgIkNQODcxIiwgICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NzEiLCAgICAgICAgICJDU0lCTTg3MSIsICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQODcxIiwgICAgICAgICAiRUJDRElDLUNQLUlTIiwgICAgICAgICAgIHRydWUgICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDg3MSIsICAgICAgICAgIklCTS04NzEiLCAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A4NzEiLCAgICAgICAgICJJQk04NzEiLCAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQOTE4IiwgICAgICAgICAiQ1A5MTgiLCAgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDkxOCIsICAgICAgICAgIkNTSUJNOTE4IiwgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A5MTgiLCAgICAgICAgICJFQkNESUMtQ1AtQVIyIiwgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQOTE4IiwgICAgICAgICAiSUJNLTkxOCIsICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDkxOCIsICAgICAgICAgIklCTTkxOCIsICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A5MjQiLCAgICAgICAgICJDQ1NJRDAwOTI0IiwgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQOTI0IiwgICAgICAgICAiQ1AwMDkyNCIsICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJDUDkyNCIsICAgICAgICAgIkVCQ0RJQy1MQVRJTjktLUVVUk8iLCAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiQ1A5MjQiLCAgICAgICAgICJJQk0tOTI0IiwgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkNQOTI0IiwgICAgICAgICAiSUJNMDA5MjQiLCAgICAgICAgICAgICAgIHRydWUgICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJFVUNKSVMiLCAgICAgICAgIkNTRVVDUEtERk1USkFQQU5FU0UiLCAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiRVVDSklTIiwgICAgICAgICJFVUMtSlAiLCAgICAgICAgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkVVQ0pJUyIsICAgICAgICAiRVhURU5ERURfVU5JWF9DT0RFX1BBQ0tFRF9GT1JNQVRfRk9SX0pBUEFORVNFIiwgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkdCMTgwMzAiLCAgICAgICAiR0IxODAzMCIsICAgICAgICAgICAgICAgIHRydWUgICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJHQjIzMTIiLCAgICAgICAgIkNTR0IyMzEyIiwgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiR0IyMzEyIiwgICAgICAgICJHQjIzMTIiLCAgICAgICAgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIklTTzIwMjJDTiIsICAgICAiSVNPLTIwMjItQ04iLCAgICAgICAgICAgIHRydWUgICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJJU08yMDIyS1IiLCAgICAgIkNTSVNPMjAyMktSIiwgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiSVNPMjAyMktSIiwgICAgICJJU08tMjAyMi1LUiIsICAgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIklTTzg4NTlfMSIsICAgICAiQ1A4MTkiLCAgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJJU084ODU5XzEiLCAgICAgIkNTSVNPTEFUSU4xIiwgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiSVNPODg1OV8xIiwgICAgICJJQk0tODE5IiwgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIklTTzg4NTlfMSIsICAgICAiSUJNODE5IiwgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJJU084ODU5XzEiLCAgICAgIklTTy04ODU5LTEiLCAgICAgICAgICAgICB0cnVlICApOwotICAgICAgICBhZGRNYXBwaW5nKCAiSVNPODg1OV8xIiwgICAgICJJU08tSVItMTAwIiwgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIklTTzg4NTlfMSIsICAgICAiSVNPXzg4NTktMSIsICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJJU084ODU5XzEiLCAgICAgIkwxIiwgICAgICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiSVNPODg1OV8xIiwgICAgICJMQVRJTjEiLCAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIklTTzg4NTlfMiIsICAgICAiQ1NJU09MQVRJTjIiLCAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJJU084ODU5XzIiLCAgICAgIklTTy04ODU5LTIiLCAgICAgICAgICAgICB0cnVlICApOwotICAgICAgICBhZGRNYXBwaW5nKCAiSVNPODg1OV8yIiwgICAgICJJU08tSVItMTAxIiwgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIklTTzg4NTlfMiIsICAgICAiSVNPXzg4NTktMiIsICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJJU084ODU5XzIiLCAgICAgIkwyIiwgICAgICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiSVNPODg1OV8yIiwgICAgICJMQVRJTjIiLCAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIklTTzg4NTlfMyIsICAgICAiQ1NJU09MQVRJTjMiLCAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJJU084ODU5XzMiLCAgICAgIklTTy04ODU5LTMiLCAgICAgICAgICAgICB0cnVlICApOwotICAgICAgICBhZGRNYXBwaW5nKCAiSVNPODg1OV8zIiwgICAgICJJU08tSVItMTA5IiwgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIklTTzg4NTlfMyIsICAgICAiSVNPXzg4NTktMyIsICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJJU084ODU5XzMiLCAgICAgIkwzIiwgICAgICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiSVNPODg1OV8zIiwgICAgICJMQVRJTjMiLCAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIklTTzg4NTlfNCIsICAgICAiQ1NJU09MQVRJTjQiLCAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJJU084ODU5XzQiLCAgICAgIklTTy04ODU5LTQiLCAgICAgICAgICAgICB0cnVlICApOwotICAgICAgICBhZGRNYXBwaW5nKCAiSVNPODg1OV80IiwgICAgICJJU08tSVItMTEwIiwgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIklTTzg4NTlfNCIsICAgICAiSVNPXzg4NTktNCIsICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJJU084ODU5XzQiLCAgICAgIkw0IiwgICAgICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiSVNPODg1OV80IiwgICAgICJMQVRJTjQiLCAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIklTTzg4NTlfNSIsICAgICAiQ1NJU09MQVRJTkNZUklMTElDIiwgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJJU084ODU5XzUiLCAgICAgIkNZUklMTElDIiwgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiSVNPODg1OV81IiwgICAgICJJU08tODg1OS01IiwgICAgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIklTTzg4NTlfNSIsICAgICAiSVNPLUlSLTE0NCIsICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJJU084ODU5XzUiLCAgICAgIklTT184ODU5LTUiLCAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiSVNPODg1OV82IiwgICAgICJBUkFCSUMiLCAgICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIklTTzg4NTlfNiIsICAgICAiQVNNTy03MDgiLCAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJJU084ODU5XzYiLCAgICAgIkNTSVNPTEFUSU5BUkFCSUMiLCAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiSVNPODg1OV82IiwgICAgICJFQ01BLTExNCIsICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIklTTzg4NTlfNiIsICAgICAiSVNPLTg4NTktNiIsICAgICAgICAgICAgIHRydWUgICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJJU084ODU5XzYiLCAgICAgIklTTy1JUi0xMjciLCAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiSVNPODg1OV82IiwgICAgICJJU09fODg1OS02IiwgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIklTTzg4NTlfNyIsICAgICAiQ1NJU09MQVRJTkdSRUVLIiwgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJJU084ODU5XzciLCAgICAgIkVDTUEtMTE4IiwgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiSVNPODg1OV83IiwgICAgICJFTE9UXzkyOCIsICAgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIklTTzg4NTlfNyIsICAgICAiR1JFRUsiLCAgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJJU084ODU5XzciLCAgICAgIkdSRUVLOCIsICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiSVNPODg1OV83IiwgICAgICJJU08tODg1OS03IiwgICAgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIklTTzg4NTlfNyIsICAgICAiSVNPLUlSLTEyNiIsICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJJU084ODU5XzciLCAgICAgIklTT184ODU5LTciLCAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiSVNPODg1OV84IiwgICAgICJDU0lTT0xBVElOSEVCUkVXIiwgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIklTTzg4NTlfOCIsICAgICAiSEVCUkVXIiwgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJJU084ODU5XzgiLCAgICAgIklTTy04ODU5LTgiLCAgICAgICAgICAgICB0cnVlICApOwotICAgICAgICBhZGRNYXBwaW5nKCAiSVNPODg1OV84IiwgICAgICJJU08tODg1OS04LUkiLCAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIklTTzg4NTlfOCIsICAgICAiSVNPLUlSLTEzOCIsICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJJU084ODU5XzgiLCAgICAgIklTT184ODU5LTgiLCAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiSVNPODg1OV85IiwgICAgICJDU0lTT0xBVElONSIsICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIklTTzg4NTlfOSIsICAgICAiSVNPLTg4NTktOSIsICAgICAgICAgICAgIHRydWUgICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJJU084ODU5XzkiLCAgICAgIklTTy1JUi0xNDgiLCAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiSVNPODg1OV85IiwgICAgICJJU09fODg1OS05IiwgICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIklTTzg4NTlfOSIsICAgICAiTDUiLCAgICAgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJJU084ODU5XzkiLCAgICAgIkxBVElONSIsICAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiSklTIiwgICAgICAgICAgICJDU0lTTzIwMjJKUCIsICAgICAgICAgICAgZmFsc2UgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkpJUyIsICAgICAgICAgICAiSVNPLTIwMjItSlAiLCAgICAgICAgICAgIHRydWUgICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJKSVMwMjAxIiwgICAgICAgIkNTSVNPMTNKSVNDNjIyMEpQIiwgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiSklTMDIwMSIsICAgICAgICJYMDIwMSIsICAgICAgICAgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkpJUzAyMDgiLCAgICAgICAiQ1NJU084N0pJU1gwMjA4IiwgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJKSVMwMjA4IiwgICAgICAgIklTTy1JUi04NyIsICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiSklTMDIwOCIsICAgICAgICJYMDIwOCIsICAgICAgICAgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkpJUzAyMDgiLCAgICAgICAiWDAyMDhEQklKSVNfWDAyMDgtMTk4MyIsIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJKSVMwMjEyIiwgICAgICAgIkNTSVNPMTU5SklTWDAyMTIxOTkwIiwgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiSklTMDIxMiIsICAgICAgICJJU08tSVItMTU5IiwgICAgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIkpJUzAyMTIiLCAgICAgICAiWDAyMTIiLCAgICAgICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJLT0k4X1IiLCAgICAgICAgIkNTS09JOFIiLCAgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiS09JOF9SIiwgICAgICAgICJLT0k4LVIiLCAgICAgICAgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIktTQzU2MDEiLCAgICAgICAiRVVDLUtSIiwgICAgICAgICAgICAgICAgIHRydWUgICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJNUzkzMiIsICAgICAgICAgIkNTV0lORE9XUzMxSiIsICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiTVM5MzIiLCAgICAgICAgICJXSU5ET1dTLTMxSiIsICAgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIlNKSVMiLCAgICAgICAgICAiQ1NTSElGVEpJUyIsICAgICAgICAgICAgIGZhbHNlICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJTSklTIiwgICAgICAgICAgIk1TX0tBTkpJIiwgICAgICAgICAgICAgICBmYWxzZSApOwotICAgICAgICBhZGRNYXBwaW5nKCAiU0pJUyIsICAgICAgICAgICJTSElGVF9KSVMiLCAgICAgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIlRJUzYyMCIsICAgICAgICAiVElTLTYyMCIsICAgICAgICAgICAgICAgIHRydWUgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIlVOSUNPREUiLCAgICAgICAiVVRGLTE2IiwgICAgICAgICAgICAgICAgIHRydWUgICk7Ci0gICAgICAgIGFkZE1hcHBpbmcoICJVTklDT0RFQklHIiwgICAgIlVURi0xNkJFIiwgICAgICAgICAgICAgICB0cnVlICApOwotICAgICAgICBhZGRNYXBwaW5nKCAiVU5JQ09ERUxJVFRMRSIsICJVVEYtMTZMRSIsICAgICAgICAgICAgICAgdHJ1ZSAgKTsKLSAgICAgICAgYWRkTWFwcGluZyggIlVURjgiLCAgICAgICAgICAiVVRGLTgiLCAgICAgICAgICAgICAgICAgIHRydWUgICk7Ci0KLSAgICAgICAgYXNzZXJ0IGNvbXBsZXRlTWFwcGluZ3MoKTsKLSAgICB9OwotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL0dlbmVyaWNYbWxJbnB1dFN0cmVhbS5qYXZhIGIvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL0dlbmVyaWNYbWxJbnB1dFN0cmVhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDI5ZmE1Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9HZW5lcmljWG1sSW5wdXRTdHJlYW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4MSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb247Ci0KLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLlJlZmVyZW5jZVJlc29sdmVyOwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MRXZlbnQ7Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbTsKLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTE5hbWU7Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBHZW5lcmljWG1sSW5wdXRTdHJlYW0gaW1wbGVtZW50cyBYTUxJbnB1dFN0cmVhbQotewotICAgIHB1YmxpYyBHZW5lcmljWG1sSW5wdXRTdHJlYW0gKCApCi0gICAgewotICAgICAgICBfbWFzdGVyID0gdGhpczsKLSAgICAgICAgX2VsZW1lbnRDb3VudCA9IDE7IC8vIEdvIGFsbCB0aGUgd2F5Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBHZW5lcmljWG1sSW5wdXRTdHJlYW0gKCBHZW5lcmljWG1sSW5wdXRTdHJlYW0gbWFzdGVyICkKLSAgICB7Ci0gICAgICAgIChfbWFzdGVyID0gbWFzdGVyKS5lbnN1cmVJbml0KCk7Ci0gICAgICAgIF9uZXh0RXZlbnQgPSBtYXN0ZXIuX25leHRFdmVudDsKLSAgICB9Ci0gICAgCi0gICAgLy8KLSAgICAvLyBUaGUgc291cmNlIGZvciBhbGwgZXZlbnRzCi0gICAgLy8KLQotICAgIHByb3RlY3RlZCBYTUxFdmVudCBuZXh0RXZlbnQgKCApIHRocm93cyBYTUxTdHJlYW1FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCAibmV4dEV2ZW50IG5vdCBvdmVycmlkZGVuIiApOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8KLSAgICAvLwotCi0gICAgcHJpdmF0ZSBjbGFzcyBFdmVudEl0ZW0KLSAgICB7Ci0gICAgICAgIEV2ZW50SXRlbSAoIFhNTEV2ZW50IGUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBfZXZlbnQgPSBlOwotICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgCi0gICAgICAgIGludCAgICAgZ2V0VHlwZSAoICkgeyByZXR1cm4gX2V2ZW50LmdldFR5cGUoKTsgfQotICAgICAgICBib29sZWFuIGhhc05hbWUgKCApIHsgcmV0dXJuIF9ldmVudC5oYXNOYW1lKCk7IH0KLSAgICAgICAgWE1MTmFtZSBnZXROYW1lICggKSB7IHJldHVybiBfZXZlbnQuZ2V0TmFtZSgpOyB9Ci0gICAgICAgIAotICAgICAgICBmaW5hbCBYTUxFdmVudCBfZXZlbnQ7Ci0gICAgICAgIAotICAgICAgICBFdmVudEl0ZW0gX25leHQ7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGVuc3VyZUluaXQgKCApCi0gICAgewotICAgICAgICBpZiAoIV9tYXN0ZXIuX2luaXRpYWxpemVkKQotICAgICAgICB7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfbWFzdGVyLl9uZXh0RXZlbnQgPSBnZXROZXh0RXZlbnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoICggWE1MU3RyZWFtRXhjZXB0aW9uIGUgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCBlICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIF9tYXN0ZXIuX2luaXRpYWxpemVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgRXZlbnRJdGVtIGdldE5leHRFdmVudCAoICkgdGhyb3dzIFhNTFN0cmVhbUV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgWE1MRXZlbnQgZSA9IG5leHRFdmVudCgpOwotCi0gICAgICAgIHJldHVybiBlID09IG51bGwgPyBudWxsIDogbmV3IEV2ZW50SXRlbSggZSApOwotICAgIH0KLQotICAgIHB1YmxpYyBYTUxFdmVudCBuZXh0ICggKSB0aHJvd3MgWE1MU3RyZWFtRXhjZXB0aW9uCi0gICAgewotICAgICAgICBlbnN1cmVJbml0KCk7Ci0gICAgICAgIAotICAgICAgICBFdmVudEl0ZW0gY3VycmVudEV2ZW50ID0gX25leHRFdmVudDsKLQotICAgICAgICBpZiAoX25leHRFdmVudCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX25leHRFdmVudC5fbmV4dCA9PSBudWxsKQotICAgICAgICAgICAgICAgIF9uZXh0RXZlbnQuX25leHQgPSBfbWFzdGVyLmdldE5leHRFdmVudCgpOwotCi0gICAgICAgICAgICBfbmV4dEV2ZW50ID0gX25leHRFdmVudC5fbmV4dDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjdXJyZW50RXZlbnQgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIGlmIChjdXJyZW50RXZlbnQuZ2V0VHlwZSgpID09IFhNTEV2ZW50LkVORF9FTEVNRU5UKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoLS1fZWxlbWVudENvdW50IDw9IDApCi0gICAgICAgICAgICAgICAgX25leHRFdmVudCA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoY3VycmVudEV2ZW50LmdldFR5cGUoKSA9PSBYTUxFdmVudC5TVEFSVF9FTEVNRU5UKQotICAgICAgICAgICAgX2VsZW1lbnRDb3VudCsrOwotCi0gICAgICAgIHJldHVybiBjdXJyZW50RXZlbnQuX2V2ZW50OwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGhhc05leHQgKCApIHRocm93cyBYTUxTdHJlYW1FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGVuc3VyZUluaXQoKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBfbmV4dEV2ZW50ICE9IG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2tpcCAoICkgdGhyb3dzIFhNTFN0cmVhbUV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgbmV4dCgpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNraXBFbGVtZW50ICggKSB0aHJvd3MgWE1MU3RyZWFtRXhjZXB0aW9uCi0gICAgewotICAgICAgICBlbnN1cmVJbml0KCk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKCA7IF9uZXh0RXZlbnQgIT0gbnVsbCA7IG5leHQoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfbmV4dEV2ZW50LmdldFR5cGUoKSA9PSBYTUxFdmVudC5TVEFSVF9FTEVNRU5UKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGNvdW50ID0gMDsKLQotICAgICAgICBmb3IgKCA7IF9uZXh0RXZlbnQgIT0gbnVsbCA7IG5leHQoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB0eXBlID0gbmV4dCgpLmdldFR5cGUoKTsKLQotICAgICAgICAgICAgaWYgKHR5cGUgPT0gWE1MRXZlbnQuU1RBUlRfRUxFTUVOVCkKLSAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBYTUxFdmVudC5FTkRfRUxFTUVOVCAmJiAtLWNvdW50ID09IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgWE1MRXZlbnQgcGVlayAoICkgdGhyb3dzIFhNTFN0cmVhbUV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgZW5zdXJlSW5pdCgpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIF9uZXh0RXZlbnQuX2V2ZW50OwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHNraXAgKCBpbnQgZXZlbnRUeXBlICkgdGhyb3dzIFhNTFN0cmVhbUV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgZW5zdXJlSW5pdCgpOwotICAgICAgICAKLSAgICAgICAgZm9yICggOyBfbmV4dEV2ZW50ICE9IG51bGwgOyBuZXh0KCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX25leHRFdmVudC5nZXRUeXBlKCkgPT0gZXZlbnRUeXBlKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHNraXAgKCBYTUxOYW1lIG5hbWUgKSB0aHJvd3MgWE1MU3RyZWFtRXhjZXB0aW9uCi0gICAgewotICAgICAgICBlbnN1cmVJbml0KCk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKCA7IF9uZXh0RXZlbnQgIT0gbnVsbCA7IG5leHQoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfbmV4dEV2ZW50Lmhhc05hbWUoKSAmJiBfbmV4dEV2ZW50LmdldE5hbWUoKS5lcXVhbHMoIG5hbWUgKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBza2lwICggWE1MTmFtZSBuYW1lLCBpbnQgZXZlbnRUeXBlICkgdGhyb3dzIFhNTFN0cmVhbUV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgZW5zdXJlSW5pdCgpOwotICAgICAgICAKLSAgICAgICAgZm9yICggOyBfbmV4dEV2ZW50ICE9IG51bGwgOyBuZXh0KCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX25leHRFdmVudC5nZXRUeXBlKCkgPT0gZXZlbnRUeXBlICYmCi0gICAgICAgICAgICAgICAgICBfbmV4dEV2ZW50Lmhhc05hbWUoKSAmJgotICAgICAgICAgICAgICAgICAgICBfbmV4dEV2ZW50LmdldE5hbWUoKS5lcXVhbHMoIG5hbWUgKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgWE1MSW5wdXRTdHJlYW0gZ2V0U3ViU3RyZWFtICggKSB0aHJvd3MgWE1MU3RyZWFtRXhjZXB0aW9uCi0gICAgewotICAgICAgICBlbnN1cmVJbml0KCk7Ci0gICAgICAgIAotICAgICAgICBHZW5lcmljWG1sSW5wdXRTdHJlYW0gc3ViU3RyZWFtID0gbmV3IEdlbmVyaWNYbWxJbnB1dFN0cmVhbSggdGhpcyApOwotCi0gICAgICAgIHN1YlN0cmVhbS5za2lwKCBYTUxFdmVudC5TVEFSVF9FTEVNRU5UICk7Ci0KLSAgICAgICAgcmV0dXJuIHN1YlN0cmVhbTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBjbG9zZSAoICkgdGhyb3dzIFhNTFN0cmVhbUV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgLy8gQlVHQlVHIC0gY2FuIEkgZG8gYW55dGhpbmcgaGVyZSwgcmVhbGx5PwotICAgICAgICAvLyBTSG91bGQgSSBjb3VudCB0aGUgbnVtYmVyIG9mIG9wZW4gc3ViIHN0cmVhbXM/Ci0gICAgICAgIC8vIEkgaGF2ZSBubyBkZXN0cnVjdG9yLCBob3cgY2FuIEkgY2xvc2UgcHJvcGVybHk/Ci0gICAgfQotCi0gICAgcHVibGljIFJlZmVyZW5jZVJlc29sdmVyIGdldFJlZmVyZW5jZVJlc29sdmVyICggKQotICAgIHsKLSAgICAgICAgZW5zdXJlSW5pdCgpOwotICAgICAgICAKLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oICJOb3QgaW1wbCIgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRSZWZlcmVuY2VSZXNvbHZlciAoIFJlZmVyZW5jZVJlc29sdmVyIHJlc29sdmVyICkKLSAgICB7Ci0gICAgICAgIGVuc3VyZUluaXQoKTsKLSAgICAgICAgCi0gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCAiTm90IGltcGwiICk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICAgICAgX2luaXRpYWxpemVkOwotICAgIHByaXZhdGUgRXZlbnRJdGVtICAgICAgICAgICAgIF9uZXh0RXZlbnQ7Ci0gICAgcHJpdmF0ZSBpbnQgICAgICAgICAgICAgICAgICAgX2VsZW1lbnRDb3VudDsKLSAgICBwcml2YXRlIEdlbmVyaWNYbWxJbnB1dFN0cmVhbSBfbWFzdGVyOwotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL0dsb2JhbExvY2suamF2YSBiL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9HbG9iYWxMb2NrLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkMzliZjEuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL0dsb2JhbExvY2suamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbjsKLQotLyoqCi0gKiBXaGVuZXZlciBtdWx0aXBsZSBsb2NrcyBtdXN0IGJlIGFjcXVpcmVkIHdpdGhpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YKLSAqIFhNTCBCZWFucywgdGhpcyBHbG9iYWxMb2NrIGlzIGFjcXVpcmVkIGZpcnN0LCBhbmQgdGhlbiByZWxlYXNlZCB3aGVuIGFsbAotICogdGhlIGFjdXRhbGx5LW5lZWRlZCBsb2NrcyBoYXZlIGJlZW4gYWNxdWlyZWQuICBUaGlzIHByZXZlbnRzIGRlYWRsb2Nrcy4KLSAqLyAKLXB1YmxpYyBjbGFzcyBHbG9iYWxMb2NrCi17Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTXV0ZXggR0xPQkFMX01VVEVYID0gbmV3IE11dGV4KCk7Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGFjcXVpcmUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24geyBHTE9CQUxfTVVURVguYWNxdWlyZSgpOyB9Ci0gICAgcHVibGljIHN0YXRpYyB2b2lkIHRyeVRvQWNxdWlyZSgpIHsgR0xPQkFMX01VVEVYLnRyeVRvQWNxdWlyZSgpOyB9Ci0gICAgcHVibGljIHN0YXRpYyB2b2lkIHJlbGVhc2UoKSB7IEdMT0JBTF9NVVRFWC5yZWxlYXNlKCk7IH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9JT1V0aWwuamF2YSBiL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9JT1V0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQyNzkwOC4uMDAwMDAwMAotLS0gYS92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vSU9VdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uOwotCi1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJJOwotaW1wb3J0IGphdmEubmlvLmNoYW5uZWxzLkZpbGVDaGFubmVsOwotCi1wdWJsaWMgY2xhc3MgSU9VdGlsCi17Ci0gICAgcHVibGljIHN0YXRpYyB2b2lkIGNvcHlDb21wbGV0ZWx5KElucHV0U3RyZWFtIGlucHV0LCBPdXRwdXRTdHJlYW0gb3V0cHV0KQotICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIC8vaWYgYm90aCBhcmUgZmlsZSBzdHJlYW1zLCB1c2UgY2hhbm5lbCBJTwotICAgICAgICBpZiAoKG91dHB1dCBpbnN0YW5jZW9mIEZpbGVPdXRwdXRTdHJlYW0pICYmIChpbnB1dCBpbnN0YW5jZW9mIEZpbGVJbnB1dFN0cmVhbSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEZpbGVDaGFubmVsIHRhcmdldCA9ICgoRmlsZU91dHB1dFN0cmVhbSkgb3V0cHV0KS5nZXRDaGFubmVsKCk7Ci0gICAgICAgICAgICAgICAgRmlsZUNoYW5uZWwgc291cmNlID0gKChGaWxlSW5wdXRTdHJlYW0pIGlucHV0KS5nZXRDaGFubmVsKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc291cmNlLnRyYW5zZmVyVG8oMCwgSW50ZWdlci5NQVhfVkFMVUUsIHRhcmdldCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc291cmNlLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgdGFyZ2V0LmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgeyAvKiBmYWlsb3ZlciB0byBieXRlIHN0cmVhbSB2ZXJzaW9uICovIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYnl0ZVtdIGJ1ZiA9IG5ldyBieXRlWzgxOTJdOwotICAgICAgICB3aGlsZSAodHJ1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGxlbmd0aCA9IGlucHV0LnJlYWQoYnVmKTsKLSAgICAgICAgICAgIGlmIChsZW5ndGggPCAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgb3V0cHV0LndyaXRlKGJ1ZiwgMCwgbGVuZ3RoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdHJ5IHsgaW5wdXQuY2xvc2UoKTsgfSBjYXRjaCAoSU9FeGNlcHRpb24gaWdub3JlKSB7fQotICAgICAgICB0cnkgeyBvdXRwdXQuY2xvc2UoKTsgfSBjYXRjaCAoSU9FeGNlcHRpb24gaWdub3JlKSB7fQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBjb3B5Q29tcGxldGVseShVUkkgaW5wdXQsIFVSSSBvdXRwdXQpCi0gICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIElucHV0U3RyZWFtIGluID0gbnVsbDsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEZpbGUgZiA9IG5ldyBGaWxlKGlucHV0KTsKLSAgICAgICAgICAgICAgICBpZiAoZi5leGlzdHMoKSkKLSAgICAgICAgICAgICAgICAgICAgaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGYpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBub3RBRmlsZSkKLSAgICAgICAgICAgIHt9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEZpbGUgb3V0ID0gbmV3IEZpbGUob3V0cHV0KTsKLSAgICAgICAgICAgIEZpbGUgZGlyID0gb3V0LmdldFBhcmVudEZpbGUoKTsKLSAgICAgICAgICAgIGRpci5ta2RpcnMoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGluID09IG51bGwpCi0gICAgICAgICAgICAgICAgaW4gPSBpbnB1dC50b1VSTCgpLm9wZW5TdHJlYW0oKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIElPVXRpbC5jb3B5Q29tcGxldGVseShpbiwgbmV3IEZpbGVPdXRwdXRTdHJlYW0ob3V0KSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIkNhbm5vdCBjb3B5IHRvICIgKyBvdXRwdXQpOwotICAgICAgICB9Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vSWRlbnRpdHlDb25zdHJhaW50LmphdmEgYi92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vSWRlbnRpdHlDb25zdHJhaW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YWZiN2YuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL0lkZW50aXR5Q29uc3RyYWludC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAzICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uVmFsaWRhdG9yTGlzdGVuZXIuRXZlbnQ7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLio7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogSWRlbnRpdHkgY29uc3RyYWludCBlbmdpbmUuIFBlcmZvcm1zIHN0cmVhbWluZyB2YWxpZGF0aW9uIG9mIGlkZW50aXR5IGNvbnN0cmFpbnRzLgotICogVGhpcyBpbmNsdWRlcyBrZXksIGtleXJlZiwgJiB1bmlxdWUsIGFzIHdlbGwgYXMgSUQgJiBJRFJlZi4KLSAqLwotcHVibGljIGNsYXNzIElkZW50aXR5Q29uc3RyYWludCB7Ci0KLSAgICBwcml2YXRlIENvbnN0cmFpbnRTdGF0ZSBfY29uc3RyYWludFN0YWNrOwotICAgIHByaXZhdGUgRWxlbWVudFN0YXRlIF9lbGVtZW50U3RhY2s7Ci0gICAgcHJpdmF0ZSBDb2xsZWN0aW9uIF9lcnJvckxpc3RlbmVyOwotICAgIHByaXZhdGUgYm9vbGVhbiBfaW52YWxpZDsKLSAgICBwcml2YXRlIGJvb2xlYW4gX3RyYWNrSWRyZWZzOyAvLyBXZSBvbmx5IHRyYWNrIGlkcmVmcyBpZiB2YWxpZGF0aW5nIGZyb20gdGhlIHJvb3QgZWxlbWVudAotCi0gICAgcHVibGljIElkZW50aXR5Q29uc3RyYWludChDb2xsZWN0aW9uICBlcnJvckxpc3RlbmVyLCBib29sZWFuIHRyYWNrSWRyZWZzKSB7Ci0gICAgICAgIF9lcnJvckxpc3RlbmVyID0gZXJyb3JMaXN0ZW5lcjsKLSAgICAgICAgX3RyYWNrSWRyZWZzID0gdHJhY2tJZHJlZnM7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZWxlbWVudChFdmVudCBlLCBTY2hlbWFUeXBlIHN0LCBTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnRbXSBpY3MpIHsKLQotICAgICAgICAvLyBDb25zdHJ1Y3QgYSBuZXcgc3RhdGUgZm9yIHRoZSBlbGVtZW50Ci0gICAgICAgIG5ld1N0YXRlKCk7Ci0KLSAgICAgICAgLy8gRmlyc3QgZGlzcGF0Y2ggdGhpcyBlbGVtZW50IGV2ZW50Ci0gICAgICAgIGZvciAoQ29uc3RyYWludFN0YXRlIGNzID0gX2NvbnN0cmFpbnRTdGFjayA7IGNzICE9IG51bGwgOyBjcyA9IGNzLl9uZXh0KQotICAgICAgICAgICAgY3MuZWxlbWVudChlLCBzdCk7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IFNlbGVjdG9yU3RhdGUgZm9yIGVhY2ggbmV3IElkZW50aXR5IENvbnN0cmFpbnQKLQotICAgICAgICBmb3IgKGludCBpID0gMCA7IGljcyAhPSBudWxsICYmIGkgPCBpY3MubGVuZ3RoIDsgaSsrKQotICAgICAgICAgICAgbmV3Q29uc3RyYWludFN0YXRlKGljc1tpXSwgZSwgc3QpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGVuZEVsZW1lbnQoRXZlbnQgZSkgewotICAgICAgICAvLyBQb3AgdGhlIGVsZW1lbnQgc3RhdGUgc3RhY2sgYW5kIGFueSBjb25zdHJhaW50cyBhdCB0aGlzIGRlcHRoCi0gICAgICAgIGlmIChfZWxlbWVudFN0YWNrLl9oYXNDb25zdHJhaW50cykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChDb25zdHJhaW50U3RhdGUgY3MgPSBfY29uc3RyYWludFN0YWNrIDsgY3MgIT0gbnVsbCAmJiBjcyAhPSBfZWxlbWVudFN0YWNrLl9zYXZlUG9pbnQgOyBjcyA9IGNzLl9uZXh0KQotICAgICAgICAgICAgICAgIGNzLnJlbW92ZSggZSApOwotCi0gICAgICAgICAgICBfY29uc3RyYWludFN0YWNrID0gX2VsZW1lbnRTdGFjay5fc2F2ZVBvaW50OwotICAgICAgICB9Ci0KLSAgICAgICAgX2VsZW1lbnRTdGFjayA9IF9lbGVtZW50U3RhY2suX25leHQ7Ci0KLSAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV2ZW50Ci0gICAgICAgIGZvciAoQ29uc3RyYWludFN0YXRlIGNzID0gX2NvbnN0cmFpbnRTdGFjayA7IGNzICE9IG51bGwgOyBjcyA9IGNzLl9uZXh0KQotICAgICAgICAgICAgY3MuZW5kRWxlbWVudChlKTsKLQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGF0dHIoRXZlbnQgZSwgUU5hbWUgbmFtZSwgU2NoZW1hVHlwZSBzdCwgU3RyaW5nIHZhbHVlKSB7Ci0gICAgICAgIGZvciAoQ29uc3RyYWludFN0YXRlIGNzID0gX2NvbnN0cmFpbnRTdGFjayA7IGNzICE9IG51bGwgOyBjcyA9IGNzLl9uZXh0KQotICAgICAgICAgICAgY3MuYXR0cihlLCBuYW1lLCBzdCwgdmFsdWUpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHRleHQoRXZlbnQgZSwgU2NoZW1hVHlwZSBzdCwgU3RyaW5nIHZhbHVlLCBib29sZWFuIGVtcHR5Q29udGVudCkgewotICAgICAgICBmb3IgKENvbnN0cmFpbnRTdGF0ZSBjcyA9IF9jb25zdHJhaW50U3RhY2sgOyBjcyAhPSBudWxsIDsgY3MgPSBjcy5fbmV4dCkKLSAgICAgICAgICAgIGNzLnRleHQoZSwgc3QsIHZhbHVlLCBlbXB0eUNvbnRlbnQpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzVmFsaWQoKSB7Ci0gICAgICAgIHJldHVybiAhX2ludmFsaWQ7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIG5ld0NvbnN0cmFpbnRTdGF0ZShTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQgaWMsIEV2ZW50IGUsIFNjaGVtYVR5cGUgc3QpCi0gICAgewotICAgICAgICBpZiAoaWMuZ2V0Q29uc3RyYWludENhdGVnb3J5KCkgPT0gU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LkNDX0tFWVJFRikKLSAgICAgICAgICAgIG5ldyBLZXlyZWZTdGF0ZShpYywgZSwgc3QpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBuZXcgU2VsZWN0b3JTdGF0ZShpYywgZSwgc3QpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBidWlsZElkU3RhdGVzKCkKLSAgICB7Ci0gICAgICAgIC8vIENvbnN0cnVjdCBzdGF0ZXMgdG8gaG9sZCB0aGUgdmFsdWVzIGZvciBJRHMgYW5kIElEUmVmcwotICAgICAgICBJZFN0YXRlIGlkcyA9IG5ldyBJZFN0YXRlKCk7Ci0gICAgICAgIGlmIChfdHJhY2tJZHJlZnMpCi0gICAgICAgICAgICBuZXcgSWRSZWZTdGF0ZShpZHMpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBuZXdTdGF0ZSgpIHsKLSAgICAgICAgYm9vbGVhbiBmaXJzdFRpbWUgPSBfZWxlbWVudFN0YWNrID09IG51bGw7Ci0KLSAgICAgICAgRWxlbWVudFN0YXRlIHN0ID0gbmV3IEVsZW1lbnRTdGF0ZSgpOwotICAgICAgICBzdC5fbmV4dCA9IF9lbGVtZW50U3RhY2s7Ci0gICAgICAgIF9lbGVtZW50U3RhY2sgPSBzdDsKLQotICAgICAgICBpZiAoZmlyc3RUaW1lKQotICAgICAgICAgICAgYnVpbGRJZFN0YXRlcygpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBlbWl0RXJyb3IgKCBFdmVudCBldmVudCwgU3RyaW5nIG1zZyApCi0gICAgewotICAgICAgICBfaW52YWxpZCA9IHRydWU7Ci0KLSAgICAgICAgaWYgKF9lcnJvckxpc3RlbmVyICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFzc2VydCBldmVudCAhPSBudWxsOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBfZXJyb3JMaXN0ZW5lci5hZGQoCi0gICAgICAgICAgICAgICAgWG1sRXJyb3IuZm9yQ3Vyc29yKCBtc2csIGV2ZW50LmdldExvY2F0aW9uQXNDdXJzb3IoKSApICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2V0U2F2ZVBvaW50KCBDb25zdHJhaW50U3RhdGUgY3MgKQotICAgIHsKLSAgICAgICAgaWYgKCEgX2VsZW1lbnRTdGFjay5faGFzQ29uc3RyYWludHMpCi0gICAgICAgICAgICBfZWxlbWVudFN0YWNrLl9zYXZlUG9pbnQgPSBjczsKLQotICAgICAgICBfZWxlbWVudFN0YWNrLl9oYXNDb25zdHJhaW50cyA9IHRydWU7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgWG1sT2JqZWN0IG5ld1ZhbHVlKFNjaGVtYVR5cGUgc3QsIFN0cmluZyB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZXR1cm4gc3QubmV3VmFsdWUodmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGJpdCBoYWNreS4gbmV3VmFsdWUgdGhyb3dzIFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbiB3aGljaCBpcyAKLSAgICAgICAgICAgIC8vIHVuY2hlY2tlZCBhbmQgZGVjbGFyZWQgaW4gdHlwZWltcGwuIEkgY2FuIG9ubHkgY2F0Y2ggaXRzIHBhcmVudCBjbGFzcywgCi0gICAgICAgICAgICAvLyB0eXBlaW1wbCBpcyBidWlsdCBhZnRlciBjb21tb24uCi0KLSAgICAgICAgICAgIC8vIElnbm9yZSB0aGVzZSBleGNlcHRpb25zLiBBc3N1bWUgdGhhdCB2YWxpZGF0aW9uIHdpbGwgY2F0Y2ggdGhlbS4KLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJuIHRoZSBzaW1wbGUgdHlwZSBmb3Igc2NoZW1hIHR5cGUuIElmIHRoZSBzY2hlbWEgdHlwZSBpcyBhbHJlYWR5Ci0gICAgICogc2ltcGxlLCBqdXN0IHJldHVybiBpdC4gSWYgaXQgaXMgYSBjb21wbGV4IHR5cGUgd2l0aCBzaW1wbGUgY29udGVudCwKLSAgICAgKiByZXR1cm4gdGhlIHNpbXBsZSB0eXBlIGl0IGV4dGVuZHMuCi0gICAgICovCi0gICAgc3RhdGljIFNjaGVtYVR5cGUgZ2V0U2ltcGxlVHlwZShTY2hlbWFUeXBlIHN0KSAKLSAgICB7Ci0gICAgICAgIGFzc2VydCBzdC5pc1NpbXBsZVR5cGUoKSB8fCBzdC5nZXRDb250ZW50VHlwZSgpID09IFNjaGVtYVR5cGUuU0lNUExFX0NPTlRFTlQgOiAKLSAgICAgICAgICAgIHN0ICsgIiBkb2VzIG5vdCBoYXZlIHNpbXBsZSBjb250ZW50LiI7Ci0KLSAgICAgICAgd2hpbGUgKCEgc3QuaXNTaW1wbGVUeXBlKCkgKQotICAgICAgICAgICAgc3QgPSBzdC5nZXRCYXNlVHlwZSgpOwotCi0gICAgICAgIHJldHVybiBzdDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbGVhbiBoYXNTaW1wbGVDb250ZW50KFNjaGVtYVR5cGUgc3QpCi0gICAgewotICAgICAgICByZXR1cm4gc3QuaXNTaW1wbGVUeXBlKCkgfHwgc3QuZ2V0Q29udGVudFR5cGUoKSA9PSBTY2hlbWFUeXBlLlNJTVBMRV9DT05URU5UOwotICAgIH0KLQotICAgIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBDb25zdHJhaW50U3RhdGUgewotICAgICAgICBDb25zdHJhaW50U3RhdGUgX25leHQ7Ci0KLSAgICAgICAgQ29uc3RyYWludFN0YXRlKCkKLSAgICAgICAgewotICAgICAgICAgICAgc2V0U2F2ZVBvaW50KF9jb25zdHJhaW50U3RhY2spOwotICAgICAgICAgICAgX25leHQgPSBfY29uc3RyYWludFN0YWNrOwotICAgICAgICAgICAgX2NvbnN0cmFpbnRTdGFjayA9IHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICBhYnN0cmFjdCB2b2lkIGVsZW1lbnQoRXZlbnQgZSwgU2NoZW1hVHlwZSBzdCk7Ci0gICAgICAgIGFic3RyYWN0IHZvaWQgZW5kRWxlbWVudChFdmVudCBlKTsKLSAgICAgICAgYWJzdHJhY3Qgdm9pZCBhdHRyKEV2ZW50IGUsIFFOYW1lIG5hbWUsIFNjaGVtYVR5cGUgc3QsIFN0cmluZyB2YWx1ZSk7Ci0gICAgICAgIGFic3RyYWN0IHZvaWQgdGV4dChFdmVudCBlLCBTY2hlbWFUeXBlIHN0LCBTdHJpbmcgdmFsdWUsIGJvb2xlYW4gZW1wdHlDb250ZW50KTsKLSAgICAgICAgYWJzdHJhY3Qgdm9pZCByZW1vdmUoRXZlbnQgZSk7Ci0KLSAgICB9Ci0KLSAgICBwdWJsaWMgY2xhc3MgU2VsZWN0b3JTdGF0ZSBleHRlbmRzIENvbnN0cmFpbnRTdGF0ZSB7Ci0gICAgICAgIFNjaGVtYUlkZW50aXR5Q29uc3RyYWludCBfY29uc3RyYWludDsKLSAgICAgICAgU2V0IF92YWx1ZXMgPSBuZXcgTGlua2VkSGFzaFNldCgpOwotICAgICAgICBYUGF0aC5FeGVjdXRpb25Db250ZXh0IF9jb250ZXh0OwotCi0gICAgICAgIFNlbGVjdG9yU3RhdGUoU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50IGNvbnN0cmFpbnQsIEV2ZW50IGUsIFNjaGVtYVR5cGUgc3QpIHsKLSAgICAgICAgICAgIF9jb25zdHJhaW50ID0gY29uc3RyYWludDsKLSAgICAgICAgICAgIF9jb250ZXh0ID0gbmV3IFhQYXRoLkV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICAgICAgICAgIF9jb250ZXh0LmluaXQoKFhQYXRoKV9jb25zdHJhaW50LmdldFNlbGVjdG9yUGF0aCgpKTsKLQotICAgICAgICAgICAgaWYgKCAoIF9jb250ZXh0LnN0YXJ0KCkgJiBYUGF0aC5FeGVjdXRpb25Db250ZXh0LkhJVCApICE9IDAgKQotICAgICAgICAgICAgICAgIGNyZWF0ZUZpZWxkU3RhdGUoZSwgc3QpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBhZGRGaWVsZHMoWG1sT2JqZWN0TGlzdCBmaWVsZHMsIEV2ZW50IGUpIAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX2NvbnN0cmFpbnQuZ2V0Q29uc3RyYWludENhdGVnb3J5KCkgPT0gU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LkNDX0tFWVJFRikKLSAgICAgICAgICAgICAgICBfdmFsdWVzLmFkZChmaWVsZHMpOwotICAgICAgICAgICAgZWxzZSBpZiAoX3ZhbHVlcy5jb250YWlucyhmaWVsZHMpKSAKLSAgICAgICAgICAgICAgICBlbWl0RXJyb3IoZSwgIkR1cGxpY2F0ZSBrZXkgJyIgKyBmaWVsZHMgKyAiJyBmb3Iga2V5IG9yIHVuaXF1ZSBjb25zdHJhaW50ICIgKyBRTmFtZUhlbHBlci5wcmV0dHkoX2NvbnN0cmFpbnQuZ2V0TmFtZSgpKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgX3ZhbHVlcy5hZGQoZmllbGRzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZWxlbWVudChFdmVudCBlLCBTY2hlbWFUeXBlIHN0KSAKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCAoIF9jb250ZXh0LmVsZW1lbnQoZS5nZXROYW1lKCkpICYgWFBhdGguRXhlY3V0aW9uQ29udGV4dC5ISVQpICE9IDAgKQotICAgICAgICAgICAgICAgIGNyZWF0ZUZpZWxkU3RhdGUoZSwgc3QpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBlbmRFbGVtZW50KEV2ZW50IGUpIAotICAgICAgICB7Ci0gICAgICAgICAgICBfY29udGV4dC5lbmQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgY3JlYXRlRmllbGRTdGF0ZShFdmVudCBlLCBTY2hlbWFUeXBlIHN0KSB7Ci0gICAgICAgICAgICBuZXcgRmllbGRTdGF0ZSh0aGlzLCBlLCBzdCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHJlbW92ZShFdmVudCBlKSB7Ci0gICAgICAgICAgICAvLyBCdWJibGUgdXAga2V5LCB1bmlxdWUgdmFsdWVzIHRvIGtleXJlZnMKLSAgICAgICAgICAgIGZvciAoQ29uc3RyYWludFN0YXRlIGNzID0gX25leHQgOyBjcyAhPSBudWxsIDsgY3MgPSBjcy5fbmV4dCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNzIGluc3RhbmNlb2YgS2V5cmVmU3RhdGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBLZXlyZWZTdGF0ZSBrciA9IChLZXlyZWZTdGF0ZSljczsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGtyLl9jb25zdHJhaW50LmdldFJlZmVyZW5jZWRLZXkoKSA9PSB0aGlzKQotICAgICAgICAgICAgICAgICAgICAgICAga3IuYWRkS2V5VmFsdWVzKF92YWx1ZXMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgYXR0cihFdmVudCBlLCBRTmFtZSBuYW1lLCBTY2hlbWFUeXBlIHN0LCBTdHJpbmcgdmFsdWUpIHt9Ci0gICAgICAgIHZvaWQgdGV4dChFdmVudCBlLCBTY2hlbWFUeXBlIHN0LCBTdHJpbmcgdmFsdWUsIGJvb2xlYW4gZW1wdHlDb250ZW50KSB7fQotICAgIH0KLQotICAgIHB1YmxpYyBjbGFzcyBLZXlyZWZTdGF0ZSBleHRlbmRzIFNlbGVjdG9yU3RhdGUgewotICAgICAgICBTZXQgX2tleVZhbHVlcyA9IG5ldyBIYXNoU2V0KCk7Ci0KLSAgICAgICAgS2V5cmVmU3RhdGUoU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50IGNvbnN0cmFpbnQsIEV2ZW50IGUsIFNjaGVtYVR5cGUgc3QpIHsKLSAgICAgICAgICAgIHN1cGVyKGNvbnN0cmFpbnQsIGUsIHN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgYWRkS2V5VmFsdWVzKGZpbmFsIFNldCB2YWx1ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEJVRzogcmVtb3ZlIGR1cGxpY2F0ZXMKLSAgICAgICAgICAgIF9rZXlWYWx1ZXMuYWRkQWxsKHZhbHVlcyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHJlbW92ZShFdmVudCBlKSB7Ci0gICAgICAgICAgICAvLyBGaXJzdCBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGtleXMgYXQgdGhlIHNhbWUgc3RhY2sgbGV2ZWwgYXMgdGhpcwotICAgICAgICAgICAgLy8gdGhhdCBtYXkgY29udHJpYnV0ZSBrZXkgdmFsdWVzIHRvIG1lCi0gICAgICAgICAgICBmb3IgKENvbnN0cmFpbnRTdGF0ZSBjcyA9IF9uZXh0IDsgY3MgIT0gbnVsbCAmJiBjcyAhPSBfZWxlbWVudFN0YWNrLl9zYXZlUG9pbnQgOyBjcyA9IGNzLl9uZXh0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjcyBpbnN0YW5jZW9mIFNlbGVjdG9yU3RhdGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTZWxlY3RvclN0YXRlIHNlbCA9IChTZWxlY3RvclN0YXRlKWNzOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2VsLl9jb25zdHJhaW50ID09IF9jb25zdHJhaW50LmdldFJlZmVyZW5jZWRLZXkoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZEtleVZhbHVlcyhzZWwuX3ZhbHVlcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0KLSAgICAgICAgICAgIC8vIHZhbGlkYXRlIGFsbCB2YWx1ZXMgaGF2ZSBiZWVuIHNlZW4KLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBfdmFsdWVzLml0ZXJhdG9yKCkgOyBpdC5oYXNOZXh0KCkgOyApCi0gICAgICAgICAgICB7Ci0KLSAgICAgICAgICAgICAgICBYbWxPYmplY3RMaXN0IGZpZWxkcyA9IChYbWxPYmplY3RMaXN0KWl0Lm5leHQoKTsKLSAgICAgICAgICAgICAgICBpZiAoZmllbGRzLnVuZmlsbGVkKCkgPCAwICYmICEgX2tleVZhbHVlcy5jb250YWlucyhmaWVsZHMpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZW1pdEVycm9yKGUsICJLZXkgJyIgKyBmaWVsZHMgKyAiJyBub3QgZm91bmQgKGtleVJlZiAiICsgUU5hbWVIZWxwZXIucHJldHR5KF9jb25zdHJhaW50LmdldE5hbWUoKSkgKyAiKSIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGNsYXNzIEZpZWxkU3RhdGUgZXh0ZW5kcyBDb25zdHJhaW50U3RhdGUgewotICAgICAgICBTZWxlY3RvclN0YXRlIF9zZWxlY3RvcjsKLSAgICAgICAgWFBhdGguRXhlY3V0aW9uQ29udGV4dFtdIF9jb250ZXh0czsKLSAgICAgICAgYm9vbGVhbltdIF9uZWVkc1ZhbHVlOwotICAgICAgICBYbWxPYmplY3RMaXN0IF92YWx1ZTsKLQotICAgICAgICBGaWVsZFN0YXRlKFNlbGVjdG9yU3RhdGUgc2VsZWN0b3IsIEV2ZW50IGUsIFNjaGVtYVR5cGUgc3QpIHsKLQotICAgICAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCJDcmVhdGluZyBuZXcgRmllbGQgU3RhdGUgZm9yOiAiICsgZS5nZXROYW1lKCkpOwotCi0gICAgICAgICAgICBfc2VsZWN0b3IgPSBzZWxlY3RvcjsKLSAgICAgICAgICAgIFNjaGVtYUlkZW50aXR5Q29uc3RyYWludCBpYyA9IHNlbGVjdG9yLl9jb25zdHJhaW50OwotCi0gICAgICAgICAgICBpbnQgZmllbGRDb3VudCA9IGljLmdldEZpZWxkcygpLmxlbmd0aDsKLSAgICAgICAgICAgIF9jb250ZXh0cyA9IG5ldyBYUGF0aC5FeGVjdXRpb25Db250ZXh0W2ZpZWxkQ291bnRdOwotICAgICAgICAgICAgX25lZWRzVmFsdWUgPSBuZXcgYm9vbGVhbltmaWVsZENvdW50XTsKLSAgICAgICAgICAgIF92YWx1ZSA9IG5ldyBYbWxPYmplY3RMaXN0KGZpZWxkQ291bnQpOwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCBmaWVsZENvdW50IDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9jb250ZXh0c1tpXSA9IG5ldyBYUGF0aC5FeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgICAgICAgICAgICAgX2NvbnRleHRzW2ldLmluaXQoKFhQYXRoKWljLmdldEZpZWxkUGF0aChpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCAoIF9jb250ZXh0c1tpXS5zdGFydCgpICYgWFBhdGguRXhlY3V0aW9uQ29udGV4dC5ISVQgKSAhPSAwICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiaGl0IGZvciBlbGVtZW50OiAiICsgZS5nZXROYW1lKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICghaGFzU2ltcGxlQ29udGVudChzdCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBlbWl0RXJyb3IoZSwgIklkZW50aXR5IGNvbnN0cmFpbnQgZmllbGQgbXVzdCBoYXZlIHNpbXBsZSBjb250ZW50Iik7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIF9uZWVkc1ZhbHVlW2ldID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZWxlbWVudChFdmVudCBlLCBTY2hlbWFUeXBlIHN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCBfY29udGV4dHMubGVuZ3RoIDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKF9uZWVkc1ZhbHVlW2ldKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZW1pdEVycm9yKGUsICJJZGVudGl0eSBjb25zdHJhaW50IGZpZWxkIG11c3QgaGF2ZSBzaW1wbGUgY29udGVudCIpOwotICAgICAgICAgICAgICAgICAgICBfbmVlZHNWYWx1ZVtpXSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgX2NvbnRleHRzLmxlbmd0aCA7IGkrKykgewotICAgICAgICAgICAgICAgIGlmICggKCBfY29udGV4dHNbaV0uZWxlbWVudChlLmdldE5hbWUoKSkgJiBYUGF0aC5FeGVjdXRpb25Db250ZXh0LkhJVCkgIT0gMCApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoISBoYXNTaW1wbGVDb250ZW50KHN0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRFcnJvcihlLCAiSWRlbnRpdHkgY29uc3RyYWludCBmaWVsZCBtdXN0IGhhdmUgc2ltcGxlIGNvbnRlbnQiKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgX25lZWRzVmFsdWVbaV0gPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgYXR0cihFdmVudCBlLCBRTmFtZSBuYW1lLCBTY2hlbWFUeXBlIHN0LCBTdHJpbmcgdmFsdWUpIHsKLQotICAgICAgICAgICAgLy8gTnVsbCB2YWx1ZSBpbmRpY2F0ZXMgcHJldmlvdXNseSByZXBvcnRlZCB2YWxpZGF0aW9uIHByb2JsZW0KLSAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm47Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IF9jb250ZXh0cy5sZW5ndGggOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoIF9jb250ZXh0c1tpXS5hdHRyKG5hbWUpICkgewotICAgICAgICAgICAgICAgICAgICBYbWxPYmplY3QgbyA9IG5ld1ZhbHVlKHN0LCB2YWx1ZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIGludmFsaWQgdmFsdWVzLiBBc3N1bWUgdGhhdCB2YWxpZGF0aW9uIGNhdGNoZXMgdGhlc2UKLSAgICAgICAgICAgICAgICAgICAgaWYgKG8gPT0gbnVsbCkgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gc2V0ID0gX3ZhbHVlLnNldChvLCBpKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoISBzZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICBlbWl0RXJyb3IoZSwgIk11bHRpcGxlIGluc3RhbmNlcyBvZiBmaWVsZCB3aXRoIHhwYXRoOiAnIiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArIF9zZWxlY3Rvci5fY29uc3RyYWludC5nZXRGaWVsZHMoKVtpXSArICInIGZvciBhIHNlbGVjdG9yIik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotCi0gICAgICAgIHZvaWQgdGV4dChFdmVudCBlLCBTY2hlbWFUeXBlIHN0LCBTdHJpbmcgdmFsdWUsIGJvb2xlYW4gZW1wdHlDb250ZW50KSB7Ci0KLSAgICAgICAgICAgIC8vIE51bGwgdmFsdWUgaW5kaWNhdGVzIHByZXZpb3VzbHkgcmVwb3J0ZWQgdmFsaWRhdGlvbiBwcm9ibGVtCi0gICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCAmJiAhZW1wdHlDb250ZW50KSByZXR1cm47Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IF9jb250ZXh0cy5sZW5ndGggOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoIF9uZWVkc1ZhbHVlW2ldICkgewotCi0gICAgICAgICAgICAgICAgICAgIGlmIChlbXB0eUNvbnRlbnQgfHwgIWhhc1NpbXBsZUNvbnRlbnQoc3QpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbWl0RXJyb3IoZSwgIklkZW50aXR5IGNvbnN0cmFpbnQgZmllbGQgbXVzdCBoYXZlIHNpbXBsZSBjb250ZW50Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBTY2hlbWFUeXBlIHNpbXBsZVR5cGUgPSBnZXRTaW1wbGVUeXBlKHN0KTsKLSAgICAgICAgICAgICAgICAgICAgWG1sT2JqZWN0IG8gPSBuZXdWYWx1ZShzaW1wbGVUeXBlLCB2YWx1ZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIGludmFsaWQgdmFsdWVzLiBBc3N1bWUgdGhhdCB2YWxpZGF0aW9uIGNhdGNoZXMgdGhlc2UKLSAgICAgICAgICAgICAgICAgICAgaWYgKG8gPT0gbnVsbCkgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gc2V0ID0gX3ZhbHVlLnNldChvLCBpKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoISBzZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICBlbWl0RXJyb3IoZSwgIk11bHRpcGxlIGluc3RhbmNlcyBvZiBmaWVsZCB3aXRoIHhwYXRoOiAnIiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArIF9zZWxlY3Rvci5fY29uc3RyYWludC5nZXRGaWVsZHMoKVtpXSArICInIGZvciBhIHNlbGVjdG9yIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBlbmRFbGVtZW50KEV2ZW50IGUpIHsKLSAgICAgICAgICAgIC8vIHJlc2V0IGFueSAgX25lZWRzVmFsdWUgZmxhZ3MgCi0gICAgICAgICAgICAvLyBhc3N1bWUgdGhhdCBpZiB3ZSBkaWRuJ3Qgc2VlIHRoZSB0ZXh0LCBpdCB3YXMgYmVjYXVzZSBvZiBhbm90aGVyIHZhbGlkYXRpb24KLSAgICAgICAgICAgIC8vIGVycm9yLCBzbyBkb24ndCBlbWl0IGFub3RoZXIgb25lLgotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgX25lZWRzVmFsdWUubGVuZ3RoIDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9jb250ZXh0c1tpXS5lbmQoKTsKLSAgICAgICAgICAgICAgICBfbmVlZHNWYWx1ZVtpXSA9IGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHJlbW92ZShFdmVudCBlKSAKLSAgICAgICAgewotCi0gICAgICAgICAgICBpZiAoX3NlbGVjdG9yLl9jb25zdHJhaW50LmdldENvbnN0cmFpbnRDYXRlZ29yeSgpID09IFNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5DQ19LRVkgJiYKLSAgICAgICAgICAgICAgICBfdmFsdWUudW5maWxsZWQoKSA+PSAwICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBrZXlzIG11c3QgaGF2ZSBhbGwgdmFsdWVzIHN1cHBsaWVkCi0gICAgICAgICAgICAgICAgZW1pdEVycm9yKGUsICJLZXkgIiArIFFOYW1lSGVscGVyLnByZXR0eShfc2VsZWN0b3IuX2NvbnN0cmFpbnQuZ2V0TmFtZSgpKSArICIgaXMgbWlzc2luZyBmaWVsZCB3aXRoIHhwYXRoOiAnIiArIF9zZWxlY3Rvci5fY29uc3RyYWludC5nZXRGaWVsZHMoKVtfdmFsdWUudW5maWxsZWQoKV0gKyAiJyIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIEZpbmlzaGVkLiBBZGQgdGhlc2UgZmllbGRzIHRvIHRoZSBzZWxlY3RvciBzdGF0ZQotICAgICAgICAgICAgICAgIF9zZWxlY3Rvci5hZGRGaWVsZHMoX3ZhbHVlLCBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgfQotCi0gICAgcHVibGljIGNsYXNzIElkU3RhdGUgZXh0ZW5kcyBDb25zdHJhaW50U3RhdGUKLSAgICB7Ci0gICAgICAgIFNldCBfdmFsdWVzID0gbmV3IExpbmtlZEhhc2hTZXQoKTsKLQotICAgICAgICBJZFN0YXRlKCkgeyB9Ci0KLSAgICAgICAgdm9pZCBhdHRyKEV2ZW50IGUsIFFOYW1lIG5hbWUsIFNjaGVtYVR5cGUgc3QsIFN0cmluZyB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaGFuZGxlVmFsdWUoZSwgc3QsIHZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgdGV4dChFdmVudCBlLCBTY2hlbWFUeXBlIHN0LCBTdHJpbmcgdmFsdWUsIGJvb2xlYW4gZW1wdHlDb250ZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZW1wdHlDb250ZW50KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaGFuZGxlVmFsdWUoZSwgc3QsIHZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBoYW5kbGVWYWx1ZShFdmVudCBlLCBTY2hlbWFUeXBlIHN0LCBTdHJpbmcgdmFsdWUpCi0gICAgICAgIHsKLQotICAgICAgICAgICAgLy8gTnVsbCB2YWx1ZSBpbmRpY2F0ZXMgcHJldmlvdXNseSByZXBvcnRlZCB2YWxpZGF0aW9uIHByb2JsZW0KLSAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmIChzdCA9PSBudWxsIHx8IHN0LmlzTm9UeXBlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gaWdub3JlIGludmFsaWQgdmFsdWVzLiBBc3N1bWUgdGhhdCB2YWxpZGF0aW9uIGNhdGNoZXMgdGhlc2UKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChYbWxJRC50eXBlLmlzQXNzaWduYWJsZUZyb20oc3QpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFhtbE9iamVjdExpc3QgeG1sVmFsdWUgPSBuZXcgWG1sT2JqZWN0TGlzdCgxKTsKLSAgICAgICAgICAgICAgICBYbWxPYmplY3QgbyA9IG5ld1ZhbHVlKFhtbElELnR5cGUsIHZhbHVlKTsKLQotICAgICAgICAgICAgICAgIC8vIElnbm9yZSBpbnZhbGlkIHZhbHVlcy4gQXNzdW1lIHRoYXQgdmFsaWRhdGlvbiBjYXRjaGVzIHRoZXNlCi0gICAgICAgICAgICAgICAgaWYgKG8gPT0gbnVsbCkgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgeG1sVmFsdWUuc2V0KG8sIDApOwotCi0gICAgICAgICAgICAgICAgaWYgKF92YWx1ZXMuY29udGFpbnMoeG1sVmFsdWUpKQotICAgICAgICAgICAgICAgICAgICBlbWl0RXJyb3IoZSwgIkR1cGxpY2F0ZSBJRCB2YWx1ZSAnIiArIHZhbHVlICsgIiciKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIF92YWx1ZXMuYWRkKHhtbFZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZWxlbWVudChFdmVudCBlLCBTY2hlbWFUeXBlIHN0KSB7fQotICAgICAgICB2b2lkIGVuZEVsZW1lbnQoRXZlbnQgZSl7fQotICAgICAgICB2b2lkIHJlbW92ZShFdmVudCBlKXt9Ci0KLSAgICB9Ci0KLSAgICBwdWJsaWMgY2xhc3MgSWRSZWZTdGF0ZSBleHRlbmRzIENvbnN0cmFpbnRTdGF0ZQotICAgIHsKLSAgICAgICAgSWRTdGF0ZSBfaWRzOwotICAgICAgICBMaXN0IF92YWx1ZXM7Ci0KLSAgICAgICAgSWRSZWZTdGF0ZShJZFN0YXRlIGlkcykKLSAgICAgICAgewotICAgICAgICAgICAgX2lkcyA9IGlkczsKLSAgICAgICAgICAgIF92YWx1ZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgaGFuZGxlVmFsdWUoRXZlbnQgZSwgU2NoZW1hVHlwZSBzdCwgU3RyaW5nIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBOdWxsIHZhbHVlIGluZGljYXRlcyBwcmV2aW91c2x5IHJlcG9ydGVkIHZhbGlkYXRpb24gcHJvYmxlbQotICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKHN0ID09IG51bGwgfHwgc3QuaXNOb1R5cGUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBpZ25vcmUgaW52YWxpZCB2YWx1ZXMuIEFzc3VtZSB0aGF0IHZhbGlkYXRpb24gY2F0Y2hlcyB0aGVzZQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChYbWxJRFJFRlMudHlwZS5pc0Fzc2lnbmFibGVGcm9tKHN0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBYbWxJRFJFRlMgbHYgPSAoWG1sSURSRUZTKW5ld1ZhbHVlKFhtbElEUkVGUy50eXBlLCB2YWx1ZSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZ25vcmUgaW52YWxpZCB2YWx1ZXMuIEFzc3VtZSB0aGF0IHZhbGlkYXRpb24gY2F0Y2hlcyB0aGVzZQotICAgICAgICAgICAgICAgIGlmIChsdiA9PSBudWxsKSByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBMaXN0IGwgPSBsdi54Z2V0TGlzdFZhbHVlKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBBZGQgb25lIHZhbHVlIGZvciBlYWNoIGlkcmVmIGluIHRoZSBsaXN0Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgbC5zaXplKCkgOyBpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBYbWxPYmplY3RMaXN0IHhtbFZhbHVlID0gbmV3IFhtbE9iamVjdExpc3QoMSk7Ci0gICAgICAgICAgICAgICAgICAgIFhtbElEUkVGIGlkcmVmID0gKFhtbElEUkVGKWwuZ2V0KGkpOwotICAgICAgICAgICAgICAgICAgICB4bWxWYWx1ZS5zZXQoaWRyZWYsIDApOwotICAgICAgICAgICAgICAgICAgICBfdmFsdWVzLmFkZCh4bWxWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoWG1sSURSRUYudHlwZS5pc0Fzc2lnbmFibGVGcm9tKHN0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBYbWxPYmplY3RMaXN0IHhtbFZhbHVlID0gbmV3IFhtbE9iamVjdExpc3QoMSk7Ci0gICAgICAgICAgICAgICAgWG1sSURSRUYgaWRyZWYgPSAoWG1sSURSRUYpc3QubmV3VmFsdWUodmFsdWUpOwotCi0gICAgICAgICAgICAgICAgLy8gSWdub3JlIGludmFsaWQgdmFsdWVzLiBBc3N1bWUgdGhhdCB2YWxpZGF0aW9uIGNhdGNoZXMgdGhlc2UKLSAgICAgICAgICAgICAgICBpZiAoaWRyZWYgPT0gbnVsbCkgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgeG1sVmFsdWUuc2V0KGlkcmVmLCAwKTsKLSAgICAgICAgICAgICAgICBfdmFsdWVzLmFkZCh4bWxWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGF0dHIoRXZlbnQgZSwgUU5hbWUgbmFtZSwgU2NoZW1hVHlwZSBzdCwgU3RyaW5nIHZhbHVlKSAKLSAgICAgICAgewotICAgICAgICAgICAgaGFuZGxlVmFsdWUoZSwgc3QsIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICB2b2lkIHRleHQoRXZlbnQgZSwgU2NoZW1hVHlwZSBzdCwgU3RyaW5nIHZhbHVlLCBib29sZWFuIGVtcHR5Q29udGVudCkgCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlbXB0eUNvbnRlbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBoYW5kbGVWYWx1ZShlLCBzdCwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgcmVtb3ZlKEV2ZW50IGUpIAotICAgICAgICB7IAotICAgICAgICAgICAgLy8gVmFsaWRhdGUgZWFjaCByZWYgaGFzIGEgY29ycmVzcG9uZGluZyBJRAotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IF92YWx1ZXMuaXRlcmF0b3IoKSA7IGl0Lmhhc05leHQoKSA7ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBPYmplY3QgbyA9IGl0Lm5leHQoKTsKLSAgICAgICAgICAgICAgICBpZiAoISBfaWRzLl92YWx1ZXMuY29udGFpbnMobykpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBlbWl0RXJyb3IoZSwgIklEIG5vdCBmb3VuZCBmb3IgSURSZWYgdmFsdWUgJyIgKyBvICsgIiciKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBlbGVtZW50KEV2ZW50IGUsIFNjaGVtYVR5cGUgc3QpIHsgfQotICAgICAgICB2b2lkIGVuZEVsZW1lbnQoRXZlbnQgZSkgeyB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRWxlbWVudFN0YXRlIHsKLSAgICAgICAgRWxlbWVudFN0YXRlIF9uZXh0OwotICAgICAgICBib29sZWFuIF9oYXNDb25zdHJhaW50czsKLSAgICAgICAgQ29uc3RyYWludFN0YXRlIF9zYXZlUG9pbnQ7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL0xldmVuc2h0ZWluLmphdmEgYi92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vTGV2ZW5zaHRlaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjAxODFlOS4uMDAwMDAwMAotLS0gYS92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vTGV2ZW5zaHRlaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb247Ci0KLXB1YmxpYyBjbGFzcyBMZXZlbnNodGVpbgotewotICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgIC8vIEdldCBtaW5pbXVtIG9mIHRocmVlIHZhbHVlcwotICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IG1pbmltdW0oaW50IGEsIGludCBiLCBpbnQgYykKLSAgICB7Ci0gICAgICAgIGludCBtaSA9IGE7Ci0gICAgICAgIGlmIChiIDwgbWkpCi0gICAgICAgICAgICBtaSA9IGI7Ci0gICAgICAgIGlmIChjIDwgbWkpCi0gICAgICAgICAgICBtaSA9IGM7Ci0gICAgICAgIHJldHVybiBtaTsKLSAgICB9Ci0KLSAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gICAgLy8gQ29tcHV0ZSBMZXZlbnNodGVpbiBkaXN0YW5jZQotICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICBwdWJsaWMgc3RhdGljIGludCBkaXN0YW5jZShTdHJpbmcgcywgU3RyaW5nIHQpCi0gICAgewotICAgICAgICBpbnQgZFtdW107IC8vIG1hdHJpeAotICAgICAgICBpbnQgbjsgLy8gbGVuZ3RoIG9mIHMKLSAgICAgICAgaW50IG07IC8vIGxlbmd0aCBvZiB0Ci0gICAgICAgIGludCBpOyAvLyBpdGVyYXRlcyB0aHJvdWdoIHMKLSAgICAgICAgaW50IGo7IC8vIGl0ZXJhdGVzIHRocm91Z2ggdAotICAgICAgICBjaGFyIHNfaTsgLy8gaXRoIGNoYXJhY3RlciBvZiBzCi0gICAgICAgIGNoYXIgdF9qOyAvLyBqdGggY2hhcmFjdGVyIG9mIHQKLSAgICAgICAgaW50IGNvc3Q7IC8vIGNvc3QKLQotICAgICAgICAvLyBTdGVwIDEKLSAgICAgICAgbiA9IHMubGVuZ3RoKCk7Ci0gICAgICAgIG0gPSB0Lmxlbmd0aCgpOwotICAgICAgICBpZiAobiA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIG07Ci0gICAgICAgIGlmIChtID09IDApCi0gICAgICAgICAgICByZXR1cm4gbjsKLSAgICAgICAgZCA9IG5ldyBpbnRbbisxXVttKzFdOwotCi0gICAgICAgIC8vIFN0ZXAgMgotICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IG47IGkrKykKLSAgICAgICAgICAgIGRbaV1bMF0gPSBpOwotICAgICAgICBmb3IgKGogPSAwOyBqIDw9IG07IGorKykKLSAgICAgICAgICAgIGRbMF1bal0gPSBqOwotCi0gICAgICAgIC8vIFN0ZXAgMwotICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgc19pID0gcy5jaGFyQXQgKGkgLSAxKTsKLQotICAgICAgICAgICAgLy8gU3RlcCA0Ci0gICAgICAgICAgICBmb3IgKGogPSAxOyBqIDw9IG07IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0X2ogPSB0LmNoYXJBdChqIC0gMSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTdGVwIDUKLSAgICAgICAgICAgICAgICBpZiAoc19pID09IHRfaikKLSAgICAgICAgICAgICAgICAgICAgY29zdCA9IDA7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBjb3N0ID0gMTsKLQotICAgICAgICAgICAgICAgIC8vIFN0ZXAgNgotICAgICAgICAgICAgICAgIGRbaV1bal0gPSBtaW5pbXVtKGRbaS0xXVtqXSsxLCBkW2ldW2otMV0rMSwgZFtpLTFdW2otMV0gKyBjb3N0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFN0ZXAgNwotICAgICAgICByZXR1cm4gZFtuXVttXTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9NdXRleC5qYXZhIGIvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL011dGV4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4OTY3NDUuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL011dGV4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uOwotCi1wdWJsaWMgY2xhc3MgTXV0ZXgKLXsKLSAgICBwcml2YXRlIFRocmVhZCAgb3duZXIgICAgICA9IG51bGw7ICAvLyBPd25lciBvZiBtdXRleCwgbnVsbCBpZiBub2JvZHkKLSAgICBwcml2YXRlIGludCAgICAgbG9ja19jb3VudCA9IDA7Ci0KLSAgICAvKioKLSAgICAgKiBBY3F1aXJlIHRoZSBtdXRleC4gVGhlIG11dGV4IGNhbiBiZSBhY3F1aXJlZCBtdWx0aXBsZSB0aW1lcwotICAgICAqIGJ5IHRoZSBzYW1lIHRocmVhZCwgcHJvdmlkZWQgdGhhdCBpdCBpcyByZWxlYXNlZCBhcyBtYW55Ci0gICAgICogdGltZXMgYXMgaXQgaXMgYWNxdWlyZWQuIFRoZSBjYWxsaW5nIHRocmVhZCBibG9ja3MgdW50aWwKLSAgICAgKiBpdCBoYXMgYWNxdWlyZWQgdGhlIG11dGV4LiAoVGhlcmUgaXMgbm8gdGltZW91dCkuCi0gICAgICovCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGFjcXVpcmUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHdoaWxlICh0cnlUb0FjcXVpcmUoKSA9PSBmYWxzZSkKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy53YWl0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBdHRlbXB0cyB0byBhY3F1aXJlIHRoZSBtdXRleC4gUmV0dXJucyBmYWxzZSAoYW5kIGRvZXMgbm90Ci0gICAgICogYmxvY2spIGlmIGl0IGNhbid0IGdldCBpdC4KLSAgICAgKi8KLQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgYm9vbGVhbiB0cnlUb0FjcXVpcmUoKQotICAgIHsKLSAgICAgICAgLy8gVHJ5IHRvIGdldCB0aGUgbXV0ZXguIFJldHVybiB0cnVlIGlmIHlvdSBnb3QgaXQuCi0KLSAgICAgICAgaWYoIG93bmVyID09IG51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgICBvd25lciA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCk7Ci0gICAgICAgICAgICBsb2NrX2NvdW50ID0gMTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYoIG93bmVyID09IFRocmVhZC5jdXJyZW50VGhyZWFkKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICArK2xvY2tfY291bnQ7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZWxlYXNlIHRoZSBtdXRleC4gVGhlIG11dGV4IGhhcyB0byBiZSByZWxlYXNlZCBhcyBtYW55IHRpbWVzCi0gICAgICogYXMgaXQgd2FzIGFjcXVpcmVkIHRvIGFjdHVhbGx5IHVubG9jayB0aGUgcmVzb3VyY2UuIFRoZSBtdXRleAotICAgICAqIG11c3QgYmUgcmVsZWFzZWQgYnkgdGhlIHRocmVhZCB0aGF0IGFjcXVpcmVkIGl0Ci0gICAgICoKLSAgICAgKiBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiAoYSBSdW50aW1lRXhjZXB0aW9uKSBpZiBhIHRocmVhZAotICAgICAqICAgICAgb3RoZXIgdGhhbiB0aGUgY3VycmVudCBvd25lciB0cmllcyB0byByZWxlYXNlIHRoZSBtdXRleC4KLSAgICAgKi8KLQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZWxlYXNlKCkKLSAgICB7Ci0gICAgICAgIGlmIChvd25lciAhPSBUaHJlYWQuY3VycmVudFRocmVhZCgpKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVGhyZWFkIGNhbGxpbmcgcmVsZWFzZSgpIGRvZXNuJ3Qgb3duIG11dGV4Iik7Ci0KLSAgICAgICAgaWYgKC0tbG9ja19jb3VudCA8PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBvd25lciA9IG51bGw7Ci0gICAgICAgICAgICBub3RpZnkoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL05hbWVVdGlsLmphdmEgYi92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vTmFtZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIwY2M2Yi4uMDAwMDAwMAotLS0gYS92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vTmFtZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxMyArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb247Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLXB1YmxpYyBjbGFzcyBOYW1lVXRpbAotewotICAgIC8vIHB1bmN0dWF0aW9uIGNoYXJhY3RlcnMKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgSFlQSEVOID0gJ1x1MDAyRCc7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIFBFUklPRCA9ICdcdTAwMkUnOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2hhciBDT0xPTiAgPSAnXHUwMDNBJzsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgVVNDT1JFID0gJ1x1MDA1Ric7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIERPVCAgICA9ICdcdTAwQjcnOwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2hhciBURUxFSUEgPSAnXHUwMzg3JzsKLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIGNoYXIgQVlBSCAgID0gJ1x1MDZERCc7Ci0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBjaGFyIEVMSElaQiA9ICdcdTA2REUnOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU2V0IGphdmFXb3JkcyA9IG5ldyBIYXNoU2V0KEFycmF5cy5hc0xpc3QoCi0gICAgICAgIG5ldyBTdHJpbmdbXQotICAgICAgICB7Ci0gICAgICAgICAgICAgICJhYnN0cmFjdCIsCi0gICAgICAgICAgICAgICJib29sZWFuIiwKLSAgICAgICAgICAgICAgImJyZWFrIiwKLSAgICAgICAgICAgICAgImJ5dGUiLAotICAgICAgICAgICAgICAiY2FzZSIsCi0gICAgICAgICAgICAgICJjYXRjaCIsCi0gICAgICAgICAgICAgICJjaGFyIiwKLSAgICAgICAgICAgICAgImNsYXNzIiwKLSAgICAgICAgICAgICAgImNvbnN0IiwKLSAgICAgICAgICAgICAgImNvbnRpbnVlIiwKLSAgICAgICAgICAgICAgImRlZmF1bHQiLAotICAgICAgICAgICAgICAiZG8iLAotICAgICAgICAgICAgICAiZG91YmxlIiwKLSAgICAgICAgICAgICAgImVsc2UiLAotICAgICAgICAgICAgICAiZXh0ZW5kcyIsCi0gICAgICAgICAgICAgICJmYWxzZSIsIC8vIG5vdCBhIGtleXdvcmQKLSAgICAgICAgICAgICAgImZpbmFsIiwKLSAgICAgICAgICAgICAgImZpbmFsbHkiLAotICAgICAgICAgICAgICAiZmxvYXQiLAotICAgICAgICAgICAgICAiZm9yIiwKLSAgICAgICAgICAgICAgImdvdG8iLAotICAgICAgICAgICAgICAiaWYiLAotICAgICAgICAgICAgICAiaW1wbGVtZW50cyIsCi0gICAgICAgICAgICAgICJpbXBvcnQiLAotICAgICAgICAgICAgICAiaW5zdGFuY2VvZiIsCi0gICAgICAgICAgICAgICJpbnQiLAotICAgICAgICAgICAgICAiaW50ZXJmYWNlIiwKLSAgICAgICAgICAgICAgImxvbmciLAotICAgICAgICAgICAgICAibmF0aXZlIiwKLSAgICAgICAgICAgICAgIm5ldyIsCi0gICAgICAgICAgICAgICJudWxsIiwgLy8gbm90IGEga2V5d29yZAotICAgICAgICAgICAgICAicGFja2FnZSIsCi0gICAgICAgICAgICAgICJwcml2YXRlIiwKLSAgICAgICAgICAgICAgInByb3RlY3RlZCIsCi0gICAgICAgICAgICAgICJwdWJsaWMiLAotICAgICAgICAgICAgICAicmV0dXJuIiwKLSAgICAgICAgICAgICAgInNob3J0IiwKLSAgICAgICAgICAgICAgInN0YXRpYyIsCi0gICAgICAgICAgICAgICJzdXBlciIsCi0gICAgICAgICAgICAgICJzd2l0Y2giLAotICAgICAgICAgICAgICAic3luY2hyb25pemVkIiwKLSAgICAgICAgICAgICAgInRoaXMiLAotICAgICAgICAgICAgICAidGhyZWFkc2FmZSIsCi0gICAgICAgICAgICAgICJ0aHJvdyIsCi0gICAgICAgICAgICAgICJ0aHJvd3MiLAotICAgICAgICAgICAgICAidHJhbnNpZW50IiwKLSAgICAgICAgICAgICAgInRydWUiLCAvLyBub3QgYSBrZXl3b3JkCi0gICAgICAgICAgICAgICJ0cnkiLAotICAgICAgICAgICAgICAidm9pZCIsCi0gICAgICAgICAgICAgICJ2b2xhdGlsZSIsCi0gICAgICAgICAgICAgICJ3aGlsZSIsCi0gICAgICAgIH0KLSAgICApKTsKLQotICAgIC8qCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU2V0IGphdmFOYW1lcyA9IG5ldyBIYXNoU2V0KEFycmF5cy5hc0xpc3QoCi0gICAgICAgIG5ldyBTdHJpbmdbXQotICAgICAgICB7Ci0gICAgICAgICAgICAiQ2hhclNlcXVlbmNlIiwKLSAgICAgICAgICAgICJDbG9uZWFibGUiLAotICAgICAgICAgICAgIkNvbXBhcmFibGUiLAotICAgICAgICAgICAgIlJ1bm5hYmxlIiwKLQotICAgICAgICAgICAgIkJvb2xlYW4iLAotICAgICAgICAgICAgIkJ5dGUiLAotICAgICAgICAgICAgIkNoYXJhY3RlciIsCi0gICAgICAgICAgICAiQ2xhc3MiLAotICAgICAgICAgICAgIkNsYXNzTG9hZGVyIiwKLSAgICAgICAgICAgICJDb21waWxlciIsCi0gICAgICAgICAgICAiRG91YmxlIiwKLSAgICAgICAgICAgICJGbG9hdCIsCi0gICAgICAgICAgICAiSW5oZXJpdGFibGVUaHJlYWRMb2NhbCIsCi0gICAgICAgICAgICAiSW50ZWdlciIsCi0gICAgICAgICAgICAiTG9uZyIsCi0gICAgICAgICAgICAiTWF0aCIsCi0gICAgICAgICAgICAiTnVtYmVyIiwKLSAgICAgICAgICAgICJPYmplY3QiLAotICAgICAgICAgICAgIlBhY2thZ2UiLAotICAgICAgICAgICAgIlByb2Nlc3MiLAotICAgICAgICAgICAgIlJ1bnRpbWUiLAotICAgICAgICAgICAgIlJ1bnRpbWVQZXJtaXNzaW9uIiwKLSAgICAgICAgICAgICJTZWN1cml0eU1hbmFnZXIiLAotICAgICAgICAgICAgIlNob3J0IiwKLSAgICAgICAgICAgICJTdGFja1RyYWNlRWxlbWVudCIsCi0gICAgICAgICAgICAiU3RyaWN0TWF0aCIsCi0gICAgICAgICAgICAiU3RyaW5nIiwKLSAgICAgICAgICAgICJTdHJpbmdCdWZmZXIiLAotICAgICAgICAgICAgIlN5c3RlbSIsCi0gICAgICAgICAgICAiVGhyZWFkIiwKLSAgICAgICAgICAgICJUaHJlYWRHcm91cCIsCi0gICAgICAgICAgICAiVGhyZWFkTG9jYWwiLAotICAgICAgICAgICAgIlRocm93YWJsZSIsCi0gICAgICAgICAgICAiVm9pZCIsCi0KLSAgICAgICAgICAgICJBcml0aG1ldGljRXhjZXB0aW9uIiwKLSAgICAgICAgICAgICJBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24iLAotICAgICAgICAgICAgIkFycmF5U3RvcmVFeGNlcHRpb24iLAotICAgICAgICAgICAgIkNsYXNzQ2FzdEV4Y2VwdGlvbiIsCi0gICAgICAgICAgICAiQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiIsCi0gICAgICAgICAgICAiQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24iLAotICAgICAgICAgICAgIkV4Y2VwdGlvbiIsCi0gICAgICAgICAgICAiSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiIsCi0gICAgICAgICAgICAiSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIiwKLSAgICAgICAgICAgICJJbGxlZ2FsTW9uaXRvclN0YXRlRXhjZXB0aW9uIiwKLSAgICAgICAgICAgICJJbGxlZ2FsU3RhdGVFeGNlcHRpb24iLAotICAgICAgICAgICAgIklsbGVnYWxUaHJlYWRTdGF0ZUV4Y2VwdGlvbiIsCi0gICAgICAgICAgICAiSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiIsCi0gICAgICAgICAgICAiSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiIsCi0gICAgICAgICAgICAiSW50ZXJydXB0ZWRFeGNlcHRpb24iLAotICAgICAgICAgICAgIk5lZ2F0aXZlQXJyYXlTaXplRXhjZXB0aW9uIiwKLSAgICAgICAgICAgICJOb1N1Y2hGaWVsZEV4Y2VwdGlvbiIsCi0gICAgICAgICAgICAiTm9TdWNoTWV0aG9kRXhjZXB0aW9uIiwKLSAgICAgICAgICAgICJOdWxsUG9pbnRlckV4Y2VwdGlvbiIsCi0gICAgICAgICAgICAiTnVtYmVyRm9ybWF0RXhjZXB0aW9uIiwKLSAgICAgICAgICAgICJSdW50aW1lRXhjZXB0aW9uIiwKLSAgICAgICAgICAgICJTZWN1cml0eUV4Y2VwdGlvbiIsCi0gICAgICAgICAgICAiU3RyaW5nSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiIsCi0gICAgICAgICAgICAiVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24iLAotCi0gICAgICAgICAgICAiQWJzdHJhY3RNZXRob2RFcnJvciIsCi0gICAgICAgICAgICAiQXNzZXJ0aW9uRXJyb3IiLAotICAgICAgICAgICAgIkNsYXNzQ2lyY3VsYXJpdHlFcnJvciIsCi0gICAgICAgICAgICAiQ2xhc3NGb3JtYXRFcnJvciIsCi0gICAgICAgICAgICAiRXJyb3IiLAotICAgICAgICAgICAgIkV4Y2VwdGlvbkluSW5pdGlhbGl6ZXJFcnJvciIsCi0gICAgICAgICAgICAiSWxsZWdhbEFjY2Vzc0Vycm9yIiwKLSAgICAgICAgICAgICJJbmNvbXBhdGlibGVDbGFzc0NoYW5nZUVycm9yIiwKLSAgICAgICAgICAgICJJbnN0YW50aWF0aW9uRXJyb3IiLAotICAgICAgICAgICAgIkludGVybmFsRXJyb3IiLAotICAgICAgICAgICAgIkxpbmthZ2VFcnJvciIsCi0gICAgICAgICAgICAiTm9DbGFzc0RlZkZvdW5kRXJyb3IiLAotICAgICAgICAgICAgIk5vU3VjaEZpZWxkRXJyb3IiLAotICAgICAgICAgICAgIk5vU3VjaE1ldGhvZEVycm9yIiwKLSAgICAgICAgICAgICJPdXRPZk1lbW9yeUVycm9yIiwKLSAgICAgICAgICAgICJTdGFja092ZXJmbG93RXJyb3IiLAotICAgICAgICAgICAgIlRocmVhZERlYXRoIiwKLSAgICAgICAgICAgICJVbmtub3duRXJyb3IiLAotICAgICAgICAgICAgIlVuc2F0aXNmaWVkTGlua0Vycm9yIiwKLSAgICAgICAgICAgICJVbnN1cHBvcnRlZENsYXNzVmVyc2lvbkVycm9yIiwKLSAgICAgICAgICAgICJWZXJpZnlFcnJvciIsCi0gICAgICAgICAgICAiVmlydHVhbE1hY2hpbmVFcnJvciIsCi0gICAgICAgIH0KLSAgICApKTsKLSAgICAqLwotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU2V0IGphdmFOYW1lcyA9IG5ldyBIYXNoU2V0KEFycmF5cy5hc0xpc3QoCi0gICAgICAgIG5ldyBTdHJpbmdbXQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyAxLiBhbGwgdGhlIEphdmEubGFuZyBjbGFzc2VzIFsxLjQuMSBKREtdLgotICAgICAgICAgICAgIkNoYXJTZXF1ZW5jZSIsCi0gICAgICAgICAgICAiQ2xvbmVhYmxlIiwKLSAgICAgICAgICAgICJDb21wYXJhYmxlIiwKLSAgICAgICAgICAgICJSdW5uYWJsZSIsCi0KLSAgICAgICAgICAgICJCb29sZWFuIiwKLSAgICAgICAgICAgICJCeXRlIiwKLSAgICAgICAgICAgICJDaGFyYWN0ZXIiLAotICAgICAgICAgICAgIkNsYXNzIiwKLSAgICAgICAgICAgICJDbGFzc0xvYWRlciIsCi0gICAgICAgICAgICAiQ29tcGlsZXIiLAotICAgICAgICAgICAgIkRvdWJsZSIsCi0gICAgICAgICAgICAiRmxvYXQiLAotICAgICAgICAgICAgIkluaGVyaXRhYmxlVGhyZWFkTG9jYWwiLAotICAgICAgICAgICAgIkludGVnZXIiLAotICAgICAgICAgICAgIkxvbmciLAotICAgICAgICAgICAgIk1hdGgiLAotICAgICAgICAgICAgIk51bWJlciIsCi0gICAgICAgICAgICAiT2JqZWN0IiwKLSAgICAgICAgICAgICJQYWNrYWdlIiwKLSAgICAgICAgICAgICJQcm9jZXNzIiwKLSAgICAgICAgICAgICJSdW50aW1lIiwKLSAgICAgICAgICAgICJSdW50aW1lUGVybWlzc2lvbiIsCi0gICAgICAgICAgICAiU2VjdXJpdHlNYW5hZ2VyIiwKLSAgICAgICAgICAgICJTaG9ydCIsCi0gICAgICAgICAgICAiU3RhY2tUcmFjZUVsZW1lbnQiLAotICAgICAgICAgICAgIlN0cmljdE1hdGgiLAotICAgICAgICAgICAgIlN0cmluZyIsCi0gICAgICAgICAgICAiU3RyaW5nQnVmZmVyIiwKLSAgICAgICAgICAgICJTeXN0ZW0iLAotICAgICAgICAgICAgIlRocmVhZCIsCi0gICAgICAgICAgICAiVGhyZWFkR3JvdXAiLAotICAgICAgICAgICAgIlRocmVhZExvY2FsIiwKLSAgICAgICAgICAgICJUaHJvd2FibGUiLAotICAgICAgICAgICAgIlZvaWQiLAotCi0gICAgICAgICAgICAiQXJpdGhtZXRpY0V4Y2VwdGlvbiIsCi0gICAgICAgICAgICAiQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIiwKLSAgICAgICAgICAgICJBcnJheVN0b3JlRXhjZXB0aW9uIiwKLSAgICAgICAgICAgICJDbGFzc0Nhc3RFeGNlcHRpb24iLAotICAgICAgICAgICAgIkNsYXNzTm90Rm91bmRFeGNlcHRpb24iLAotICAgICAgICAgICAgIkNsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIiwKLSAgICAgICAgICAgICJFeGNlcHRpb24iLAotICAgICAgICAgICAgIklsbGVnYWxBY2Nlc3NFeGNlcHRpb24iLAotICAgICAgICAgICAgIklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiIsCi0gICAgICAgICAgICAiSWxsZWdhbE1vbml0b3JTdGF0ZUV4Y2VwdGlvbiIsCi0gICAgICAgICAgICAiSWxsZWdhbFN0YXRlRXhjZXB0aW9uIiwKLSAgICAgICAgICAgICJJbGxlZ2FsVGhyZWFkU3RhdGVFeGNlcHRpb24iLAotICAgICAgICAgICAgIkluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24iLAotICAgICAgICAgICAgIkluc3RhbnRpYXRpb25FeGNlcHRpb24iLAotICAgICAgICAgICAgIkludGVycnVwdGVkRXhjZXB0aW9uIiwKLSAgICAgICAgICAgICJOZWdhdGl2ZUFycmF5U2l6ZUV4Y2VwdGlvbiIsCi0gICAgICAgICAgICAiTm9TdWNoRmllbGRFeGNlcHRpb24iLAotICAgICAgICAgICAgIk5vU3VjaE1ldGhvZEV4Y2VwdGlvbiIsCi0gICAgICAgICAgICAiTnVsbFBvaW50ZXJFeGNlcHRpb24iLAotICAgICAgICAgICAgIk51bWJlckZvcm1hdEV4Y2VwdGlvbiIsCi0gICAgICAgICAgICAiUnVudGltZUV4Y2VwdGlvbiIsCi0gICAgICAgICAgICAiU2VjdXJpdHlFeGNlcHRpb24iLAotICAgICAgICAgICAgIlN0cmluZ0luZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24iLAotICAgICAgICAgICAgIlVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uIiwKLQotICAgICAgICAgICAgIkFic3RyYWN0TWV0aG9kRXJyb3IiLAotICAgICAgICAgICAgIkFzc2VydGlvbkVycm9yIiwKLSAgICAgICAgICAgICJDbGFzc0NpcmN1bGFyaXR5RXJyb3IiLAotICAgICAgICAgICAgIkNsYXNzRm9ybWF0RXJyb3IiLAotICAgICAgICAgICAgIkVycm9yIiwKLSAgICAgICAgICAgICJFeGNlcHRpb25JbkluaXRpYWxpemVyRXJyb3IiLAotICAgICAgICAgICAgIklsbGVnYWxBY2Nlc3NFcnJvciIsCi0gICAgICAgICAgICAiSW5jb21wYXRpYmxlQ2xhc3NDaGFuZ2VFcnJvciIsCi0gICAgICAgICAgICAiSW5zdGFudGlhdGlvbkVycm9yIiwKLSAgICAgICAgICAgICJJbnRlcm5hbEVycm9yIiwKLSAgICAgICAgICAgICJMaW5rYWdlRXJyb3IiLAotICAgICAgICAgICAgIk5vQ2xhc3NEZWZGb3VuZEVycm9yIiwKLSAgICAgICAgICAgICJOb1N1Y2hGaWVsZEVycm9yIiwKLSAgICAgICAgICAgICJOb1N1Y2hNZXRob2RFcnJvciIsCi0gICAgICAgICAgICAiT3V0T2ZNZW1vcnlFcnJvciIsCi0gICAgICAgICAgICAiU3RhY2tPdmVyZmxvd0Vycm9yIiwKLSAgICAgICAgICAgICJUaHJlYWREZWF0aCIsCi0gICAgICAgICAgICAiVW5rbm93bkVycm9yIiwKLSAgICAgICAgICAgICJVbnNhdGlzZmllZExpbmtFcnJvciIsCi0gICAgICAgICAgICAiVW5zdXBwb3J0ZWRDbGFzc1ZlcnNpb25FcnJvciIsCi0gICAgICAgICAgICAiVmVyaWZ5RXJyb3IiLAotICAgICAgICAgICAgIlZpcnR1YWxNYWNoaW5lRXJyb3IiLAotCi0gICAgICAgICAgICAvLyAyLiBvdGhlciBjbGFzc2VzIHVzZWQgYXMgcHJpbWl0aXZlIHR5cGVzIGJ5IHhtbCBiZWFucwotICAgICAgICAgICAgIkJpZ0ludGVnZXIiLAotICAgICAgICAgICAgIkJpZ0RlY2ltYWwiLAotICAgICAgICAgICAgIkVudW0iLAotICAgICAgICAgICAgIkRhdGUiLAotICAgICAgICAgICAgIkdEYXRlIiwKLSAgICAgICAgICAgICJHRHVyYXRpb24iLAotICAgICAgICAgICAgIlFOYW1lIiwKLSAgICAgICAgICAgICJMaXN0IiwKLQotICAgICAgICAgICAgLy8gMy4gdGhlIHRvcCBmZXcgb3JnLmFwYWNoZS54bWxiZWFucyBuYW1lcwotICAgICAgICAgICAgIlhtbE9iamVjdCIsCi0gICAgICAgICAgICAiWG1sQ3Vyc29yIiwKLSAgICAgICAgICAgICJYbWxCZWFucyIsCi0gICAgICAgICAgICAiU2NoZW1hVHlwZSIsCi0gICAgICAgIH0KLSAgICApKTsKLQotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkSmF2YUlkZW50aWZpZXIoU3RyaW5nIGlkKQotICAgIHsKLSAgICAgICAgaWYgKGlkID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJpZCBjYW5ub3QgYmUgbnVsbCIpOwotCi0gICAgICAgIGludCBsZW4gPSBpZC5sZW5ndGgoKTsKLSAgICAgICAgaWYgKGxlbiA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChqYXZhV29yZHMuY29udGFpbnMoaWQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICghQ2hhcmFjdGVyLmlzSmF2YUlkZW50aWZpZXJTdGFydChpZC5jaGFyQXQoMCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbGVuOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghQ2hhcmFjdGVyLmlzSmF2YUlkZW50aWZpZXJQYXJ0KGlkLmNoYXJBdChpKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLyoKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRKQVhSUENDbGFzc05hbWUoIFN0cmluZyBuYW1lICkKLSAgICB7Ci0gICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoJy4nLCAnXycpOwotICAgICAgICBuYW1lID0gdXBwZXJjYXNlRmlyc3RMZXR0ZXIoIG5hbWUgKTsKLQotICAgICAgICBpZiAoaXNWYWxpZEphdmFJZGVudGlmZXIobmFtZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuYW1lOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICJfIiArIG5hbWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRKQVhSUENNZXRob2ROYW1lKFN0cmluZyBuYW1lKQotICAgIHsKLSAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZSgnLicsJ18nKTsKLSAgICAgICAgbmFtZSA9IGxvd2VyY2FzZUZpcnN0TGV0dGVyKG5hbWUpOwotCi0gICAgICAgIGlmIChpc1ZhbGlkSmF2YUlkZW50aWZlcihuYW1lKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gIl8iICsgbmFtZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgWE1MTmFtZSBnZXRYTUxOYW1lRnJvbUNsYXNzKENsYXNzIGNsYXp6KQotICAgIHsKLSAgICAgICAgU3RyaW5nIHVyaSA9IE5hbWVVdGlsLmdldE5hbWVzcGFjZUZyb21QYWNrYWdlKGNsYXp6KTsKLSAgICAgICAgU3RyaW5nIGxuYW1lID0gTmFtZVV0aWwuZ2V0Um9vdENsYXNzTmFtZUZyb21DbGFzcyhjbGF6ei5nZXROYW1lKCkpOwotICAgICAgICBYTUxOYW1lIHhzZF9uYW1lID0gbmV3IE5hbWUodXJpLCBsbmFtZSk7Ci0gICAgICAgIHJldHVybiB4c2RfbmFtZTsKLSAgICB9Ci0gICAgKi8KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldENsYXNzTmFtZUZyb21RTmFtZShRTmFtZSBxbmFtZSkKLSAgICB7Ci0gICAgICAgIFN0cmluZyBqYXZhX3R5cGUgPSB1cHBlckNhbWVsQ2FzZShxbmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0KLSAgICAgICAgU3RyaW5nIHVyaSA9IHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgICBTdHJpbmcgamF2YV9wa2cgPSBudWxsOwotCi0gICAgICAgIGphdmFfcGtnID0gZ2V0UGFja2FnZUZyb21OYW1lc3BhY2UodXJpKTsKLQotICAgICAgICBpZiAoamF2YV9wa2cgIT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBqYXZhX3BrZyArICIuIiArIGphdmFfdHlwZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGphdmFfdHlwZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSkFWQV9OU19QUkVGSVg9ImphdmE6IjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEFOR19QUkVGSVggPSAiamF2YS4iOwotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlRnJvbVBhY2thZ2UoZmluYWwgQ2xhc3MgY2xhenopCi0gICAgewotICAgICAgICBDbGFzcyBjdXJyX2NsYXp6ID0gY2xheno7Ci0KLSAgICAgICAgd2hpbGUgKGN1cnJfY2xhenouaXNBcnJheSgpKQotICAgICAgICAgICAgY3Vycl9jbGF6eiA9IGN1cnJfY2xhenouZ2V0Q29tcG9uZW50VHlwZSgpOwotCi0gICAgICAgIFN0cmluZyBmdWxsbmFtZSA9IGNsYXp6LmdldE5hbWUoKTsKLSAgICAgICAgaW50IGxhc3Rkb3QgPSBmdWxsbmFtZS5sYXN0SW5kZXhPZignLicpOwotICAgICAgICBTdHJpbmcgcGtnX25hbWUgPSBsYXN0ZG90IDwgMCA/ICIiIDogZnVsbG5hbWUuc3Vic3RyaW5nKDAsIGxhc3Rkb3QpOwotCi0gICAgICAgIC8vc3BlY2lhbCBjYXNlIGZvciBidWlsdGluIHR5cGVzCi0gICAgICAgIC8qCi0gICAgICAgIGlmIChjdXJyX2NsYXp6LmlzUHJpbWl0aXZlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBrZ19uYW1lID0gYy5nZXRKYXZhTGFuZ3VhZ2VOYW1lc3BhY2VVcmkoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChwa2dfbmFtZS5zdGFydHNXaXRoKExBTkdfUFJFRklYKSkKLSAgICAgICAgewotICAgICAgICAgICAgZmluYWwgU3RyaW5nIHJlbV9zdHIgPSBwa2dfbmFtZS5zdWJzdHJpbmcoTEFOR19QUkVGSVgubGVuZ3RoKCkpOwotICAgICAgICAgICAgcGtnX25hbWUgPSBjLmdldEphdmFMYW5ndWFnZU5hbWVzcGFjZVVyaSgpICsgIi4iICsgcmVtX3N0cjsKLSAgICAgICAgfQotICAgICAgICAqLwotICAgICAgICByZXR1cm4gSkFWQV9OU19QUkVGSVggKyBwa2dfbmFtZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVXJpU2NoZW1lQ2hhcihjaGFyIGNoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChjaCA+PSAnYScgJiYgY2ggPD0neicgfHwKLSAgICAgICAgICAgIGNoID49ICdBJyAmJiBjaCA8PSdaJyB8fAotICAgICAgICAgICAgY2ggPj0gJzAnICYmIGNoIDw9JzknIHx8Ci0gICAgICAgICAgICBjaCA9PSAnLScgfHwgY2ggPT0gJy4nIHx8IGNoID09ICcrJyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1VyaUFscGhhQ2hhcihjaGFyIGNoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChjaCA+PSAnYScgJiYgY2ggPD0neicgfHwgY2ggPj0gJ0EnICYmIGNoIDw9ICdaJyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IGZpbmRTY2hlbWVDb2xvbihTdHJpbmcgdXJpKQotICAgIHsKLSAgICAgICAgaW50IGxlbiA9IHVyaS5sZW5ndGgoKTsKLSAgICAgICAgaWYgKGxlbiA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBpZiAoIWlzVXJpQWxwaGFDaGFyKHVyaS5jaGFyQXQoMCkpKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBpbnQgaTsKLSAgICAgICAgZm9yIChpID0gMTsgaSA8IGxlbjsgaSsrKQotICAgICAgICAgICAgaWYgKCFpc1VyaVNjaGVtZUNoYXIodXJpLmNoYXJBdChpKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChpID09IGxlbikKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgaWYgKHVyaS5jaGFyQXQoaSkgIT0gJzonKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICByZXR1cm4gaTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgamxzNzdTdHJpbmcoU3RyaW5nIG5hbWUpCi0gICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcihuYW1lKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aCgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghQ2hhcmFjdGVyLmlzSmF2YUlkZW50aWZpZXJQYXJ0KGJ1Zi5jaGFyQXQoaSkpKQotICAgICAgICAgICAgICAgIGJ1Zi5zZXRDaGFyQXQoaSwgJ18nKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoYnVmLmxlbmd0aCgpID09IDAgfHwgIUNoYXJhY3Rlci5pc0phdmFJZGVudGlmaWVyU3RhcnQoYnVmLmNoYXJBdCgwKSkpCi0gICAgICAgICAgICBidWYuaW5zZXJ0KDAsICdfJyk7Ci0gICAgICAgIGlmIChpc0phdmFSZXNlcnZlZFdvcmQobmFtZSkpCi0gICAgICAgICAgICBidWYuYXBwZW5kKCdfJyk7Ci0gICAgICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBMaXN0IHNwbGl0RE5TKFN0cmluZyBkbnMpCi0gICAgewotICAgICAgICAvLyBKQVhCIHNheXM6IG9ubHkgc3BsaXQrcmV2ZXJzZSBETlMgaWYgVExEIG1hdGNoZXMga25vd24gVExEcyBvciBJU08gMzE2NgotICAgICAgICAvLyBXZSBhcmUgaWdub3JpbmcgdGhpcyBub3cgKFRIKQotCi0gICAgICAgIExpc3QgcmVzdWx0ID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgICAgIGludCBlbmQgPSBkbnMubGVuZ3RoKCk7Ci0gICAgICAgIGludCBiZWdpbiA9IGRucy5sYXN0SW5kZXhPZignLicpOwotICAgICAgICBmb3IgKCA7IGJlZ2luICE9IC0xIDsgYmVnaW4tLSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGRucy5jaGFyQXQoYmVnaW4pID09ICcuJykgewotICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQoamxzNzdTdHJpbmcoZG5zLnN1YnN0cmluZyhiZWdpbiArIDEsIGVuZCkpKTsKLSAgICAgICAgICAgICAgICBlbmQgPSBiZWdpbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXN1bHQuYWRkKGpsczc3U3RyaW5nKGRucy5zdWJzdHJpbmcoMCwgZW5kKSkpOwotCi0gICAgICAgIC8vIEpBWEIgZHJhZnQgZXhhbXBsZSBpbXBsaWVzIHJlbW92YWwgb2Ygd3d3Ci0gICAgICAgIGlmIChyZXN1bHQuc2l6ZSgpID49IDMgJiYKLSAgICAgICAgICAgICAgICAoKFN0cmluZylyZXN1bHQuZ2V0KHJlc3VsdC5zaXplKCkgLSAxKSkudG9Mb3dlckNhc2UoKS5lcXVhbHMoInd3dyIpKQotICAgICAgICAgICAgcmVzdWx0LnJlbW92ZShyZXN1bHQuc2l6ZSgpIC0gMSk7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcHJvY2Vzc0ZpbGVuYW1lKFN0cmluZyBmaWxlbmFtZSkKLSAgICB7Ci0gICAgICAgIC8vIEpBWEIgc2F5czogc3RyaXAgMiBvciAzIGxldHRlciBleHRlbnNpb24gb3IgIi5odG1sIgotCi0gICAgICAgIGludCBpID0gZmlsZW5hbWUubGFzdEluZGV4T2YoJy4nKTsKLSAgICAgICAgaWYgKGkgPiAwICYmICgKLSAgICAgICAgICAgICAgICBpICsgMSArIDIgPT0gZmlsZW5hbWUubGVuZ3RoKCkgfHwKLSAgICAgICAgICAgICAgICBpICsgMSArIDMgPT0gZmlsZW5hbWUubGVuZ3RoKCkgfHwKLSAgICAgICAgICAgICAgICBmaWxlbmFtZS5zdWJzdHJpbmcoaSArIDEpLnRvTG93ZXJDYXNlKCkgPT0gImh0bWwiKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZpbGVuYW1lLnN1YnN0cmluZygwLCBpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBmaWxlbmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQYWNrYWdlRnJvbU5hbWVzcGFjZShTdHJpbmcgdXJpKQotICAgIHsKLSAgICAgICAgLy8gc3BlY2lhbCBjYXNlOiBubyBuYW1lc3BhY2UgLT4gcGFja2FnZSAibm9OYW1lc3BhY2UiCi0gICAgICAgIGlmICh1cmkgPT0gbnVsbCB8fCB1cmkubGVuZ3RoKCkgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiAibm9OYW1lc3BhY2UiOwotCi0gICAgICAgIC8vIGFwcGx5IGRyYWZ0IEpBWEIgcnVsZXMKLSAgICAgICAgaW50IGxlbiA9IHVyaS5sZW5ndGgoKTsKLSAgICAgICAgaW50IGkgPSBmaW5kU2NoZW1lQ29sb24odXJpKTsKLSAgICAgICAgTGlzdCByZXN1bHQgPSBudWxsOwotCi0gICAgICAgIGlmICggaSA+PSAwICYmIHVyaS5zdWJzdHJpbmcoMCwgaSkuZXF1YWxzKCJqYXZhIikpCi0gICAgICAgICAgICByZXN1bHQgPSAgQXJyYXlzLmFzTGlzdCh1cmkuc3Vic3RyaW5nKGkgKyAxKS5zcGxpdCgiXFwuIikpOwotCi0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmVzdWx0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAgICAgb3V0ZXI6IGZvciAoaSA9IGkgKyAxOyBpIDwgbGVuOyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHVyaS5jaGFyQXQoaSkgPT0gJy8nKQotICAgICAgICAgICAgICAgICAgICBpZiAoKytpID49IGxlbikgYnJlYWsgb3V0ZXI7Ci0gICAgICAgICAgICAgICAgaW50IHN0YXJ0ID0gaTsKLSAgICAgICAgICAgICAgICB3aGlsZSAodXJpLmNoYXJBdChpKSAhPSAnLycpCi0gICAgICAgICAgICAgICAgICAgIGlmICgrK2kgPj0gbGVuKSBicmVhazsKLSAgICAgICAgICAgICAgICBpbnQgZW5kID0gaTsKLSAgICAgICAgICAgICAgICByZXN1bHQuYWRkKHVyaS5zdWJzdHJpbmcoc3RhcnQsIGVuZCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJlc3VsdC5zaXplKCkgPiAxKQotICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQocmVzdWx0LnNpemUoKSAtIDEsIHByb2Nlc3NGaWxlbmFtZSgoU3RyaW5nKXJlc3VsdC5nZXQocmVzdWx0LnNpemUoKSAtIDEpKSk7Ci0KLSAgICAgICAgICAgIGlmIChyZXN1bHQuc2l6ZSgpID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMaXN0IHNwbGl0ZG5zID0gc3BsaXRETlMoKFN0cmluZylyZXN1bHQuZ2V0KDApKTsKLSAgICAgICAgICAgICAgICByZXN1bHQucmVtb3ZlKDApOwotICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRBbGwoMCwgc3BsaXRkbnMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IHJlc3VsdC5pdGVyYXRvcigpOyBpdC5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgYnVmLmFwcGVuZChub25KYXZhS2V5d29yZChsb3dlckNhbWVsQ2FzZSgoU3RyaW5nKWl0Lm5leHQoKSkpKTsKLSAgICAgICAgICAgIGJ1Zi5hcHBlbmQoJy4nKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYnVmLnN1YnN0cmluZygwLCBidWYubGVuZ3RoKCkgLSAxKTsgLy8gY2hvcCBvZmYgZXh0cmEgZG90Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih1cHBlckNhc2VVbmRlcmJhcihhcmdzW2ldKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIHVwcGVyLWNhc2UtYW5kLXVuZGVyYmFyIHN0cmluZyB1c2luZyB0aGUgSkFYQiBydWxlcy4KLSAgICAgKiBBbHdheXMgc3RhcnRzIHdpdGggYSBjYXBpdGFsIGxldHRlciB0aGF0IGlzIGEgdmFsaWQKLSAgICAgKiBqYXZhIGlkZW50aWZpZXIgc3RhcnQuIChJZiBKQVhCIHJ1bGVzIGRvbid0IHByb2R1Y2UKLSAgICAgKiBvbmUsIHRoZW4gIlhfIiBpcyBwcmVwZW5kZWQuKQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHVwcGVyQ2FzZVVuZGVyYmFyKFN0cmluZyB4bWxfbmFtZSkKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIExpc3Qgd29yZHMgPSBzcGxpdFdvcmRzKHhtbF9uYW1lKTsKLQotICAgICAgICBmaW5hbCBpbnQgc3ogPSB3b3Jkcy5zaXplKCkgLSAxOwotICAgICAgICBpZiAoc3ogPj0gMCAmJiAhQ2hhcmFjdGVyLmlzSmF2YUlkZW50aWZpZXJTdGFydCgoKFN0cmluZyl3b3Jkcy5nZXQoMCkpLmNoYXJBdCgwKSkpCi0gICAgICAgICAgICBidWYuYXBwZW5kKCJYXyIpOwotCi0gICAgICAgIGZvcihpbnQgaSA9IDAgOyBpIDwgc3ogOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJ1Zi5hcHBlbmQoKFN0cmluZyl3b3Jkcy5nZXQoaSkpOwotICAgICAgICAgICAgYnVmLmFwcGVuZChVU0NPUkUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN6ID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJ1Zi5hcHBlbmQoKFN0cmluZyl3b3Jkcy5nZXQoc3opKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vdXBjYXNlIGVudGlyZSBidWZmZXIKLSAgICAgICAgZmluYWwgaW50IGxlbiA9IGJ1Zi5sZW5ndGgoKTsKLSAgICAgICAgZm9yKGludCBqID0gMCA7IGogPCBsZW4gOyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIgYyA9IGJ1Zi5jaGFyQXQoaik7Ci0gICAgICAgICAgICBidWYuc2V0Q2hhckF0KGosIENoYXJhY3Rlci50b1VwcGVyQ2FzZShjKSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIGNhbWVsLWNhc2VkIHN0cmluZyB1c2luZyB0aGUgSkFYQiBydWxlcy4KLSAgICAgKiBBbHdheXMgc3RhcnRzIHdpdGggYSBjYXBpdGFsIGxldHRlciB0aGF0IGlzIGEgdmFsaWQKLSAgICAgKiBqYXZhIGlkZW50aWZpZXIgc3RhcnQuIChJZiBKQVhCIHJ1bGVzIGRvbid0IHByb2R1Y2UKLSAgICAgKiBvbmUsIHRoZW4gIlgiIGlzIHByZXBlbmRlZC4pCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgdXBwZXJDYW1lbENhc2UoU3RyaW5nIHhtbF9uYW1lKQotICAgIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgTGlzdCB3b3JkcyA9IHNwbGl0V29yZHMoeG1sX25hbWUpOwotCi0gICAgICAgIGlmICh3b3Jkcy5zaXplKCkgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIUNoYXJhY3Rlci5pc0phdmFJZGVudGlmaWVyU3RhcnQoKChTdHJpbmcpd29yZHMuZ2V0KDApKS5jaGFyQXQoMCkpKQotICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIlgiKTsKLQotICAgICAgICAgICAgSXRlcmF0b3IgaXRyID0gd29yZHMuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHdoaWxlKGl0ci5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgYnVmLmFwcGVuZCgoU3RyaW5nKWl0ci5uZXh0KCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgY2FtZWwtY2FzZWQgc3RyaW5nIHVzaW5nIHRoZSBKQVhCIHJ1bGVzLAotICAgICAqIHdoZXJlIHRoZSBmaXJzdCBjb21wb25lbnQgaXMgbG93ZXJjYXNlZC4gTm90ZSB0aGF0Ci0gICAgICogaWYgdGhlIGZpcnN0IGNvbXBvbmVudCBpcyBhbiBhY3JvbnltLCB0aGUgd2hvbGUKLSAgICAgKiB0aGlnbnMgZ2V0cyBsb3dlcmNhc2VkLgotICAgICAqIEFsd2F5cyBzdGFydHMgd2l0aCBhIGxvd2VyY2FzZSBsZXR0ZXIgdGhhdCBpcyBhIHZhbGlkCi0gICAgICogamF2YSBpZGVudGlmaWVyIHN0YXJ0LiAoSWYgSkFYQiBydWxlcyBkb24ndCBwcm9kdWNlCi0gICAgICogb25lLCB0aGVuICJ4IiBpcyBwcmVwZW5kZWQuKQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGxvd2VyQ2FtZWxDYXNlKFN0cmluZyB4bWxfbmFtZSkKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIExpc3Qgd29yZHMgPSBzcGxpdFdvcmRzKHhtbF9uYW1lKTsKLQotICAgICAgICBpZiAod29yZHMuc2l6ZSgpID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIGZpcnN0ID0gKChTdHJpbmcpd29yZHMuZ2V0KDApKS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAgICAgY2hhciBmID0gZmlyc3QuY2hhckF0KDApOwotICAgICAgICAgICAgaWYgKCFDaGFyYWN0ZXIuaXNKYXZhSWRlbnRpZmllclN0YXJ0KGYpKQotICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQoIngiKTsKLSAgICAgICAgICAgIGJ1Zi5hcHBlbmQoZmlyc3QpOwotCi0gICAgICAgICAgICBJdGVyYXRvciBpdHIgPSB3b3Jkcy5pdGVyYXRvcigpOwotICAgICAgICAgICAgaXRyLm5leHQoKTsgLy8gc2tpcCBhbHJlYWR5LWxvd2VyY2FzZWQgd29yZAotICAgICAgICAgICAgd2hpbGUoaXRyLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgICBidWYuYXBwZW5kKChTdHJpbmcpaXRyLm5leHQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHVwcGVyQ2FzZUZpcnN0TGV0dGVyKFN0cmluZyBzKQotICAgIHsKLSAgICAgICAgaWYgKHMubGVuZ3RoKCkgPT0gMCB8fCBDaGFyYWN0ZXIuaXNVcHBlckNhc2Uocy5jaGFyQXQoMCkpKQotICAgICAgICAgICAgcmV0dXJuIHM7Ci0KLSAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIocyk7Ci0gICAgICAgIGJ1Zi5zZXRDaGFyQXQoMCwgQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKGJ1Zi5jaGFyQXQoMCkpKTsKLSAgICAgICAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICAgc3BsaXQgYW4geG1sIG5hbWUgaW50byB3b3JkcyB2aWEgSkFYQiBhcHByb2FjaCwgdXBjYXNpbmcgZmlyc3QKLSAgICAgICBsZXR0ZXIgb2YgZWFjaCB3b3JkIGFzIG5lZWRlZCwgaWYgdXBjYXNlIGlzIHRydWUKLQotICAgICAgIG5jbmFtZSBpcyB4bWwgbmNuYW1lIChpLmUuIG5vIGNvbG9ucykuCi0gICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGFkZENhcHBlZChMaXN0IGxpc3QsIFN0cmluZyBzdHIpCi0gICAgewotICAgICAgICBpZiAoc3RyLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICAgIGxpc3QuYWRkKHVwcGVyQ2FzZUZpcnN0TGV0dGVyKHN0cikpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgTGlzdCBzcGxpdFdvcmRzKFN0cmluZyBuYW1lKQotICAgIHsKLSAgICAgICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBpbnQgbGVuID0gbmFtZS5sZW5ndGgoKTsKLSAgICAgICAgaW50IHN0YXJ0ID0gMDsKLSAgICAgICAgaW50IHByZWZpeCA9IFNUQVJUOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgY3VycmVudCA9IGdldENoYXJDbGFzcyhuYW1lLmNoYXJBdChpKSk7Ci0gICAgICAgICAgICBpZiAocHJlZml4ICE9IFBVTkNUICYmIGN1cnJlbnQgPT0gUFVOQ1QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYWRkQ2FwcGVkKGxpc3QsIG5hbWUuc3Vic3RyaW5nKHN0YXJ0LCBpKSk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKChjdXJyZW50ID0gZ2V0Q2hhckNsYXNzKG5hbWUuY2hhckF0KGkpKSkgPT0gUFVOQ1QpCi0gICAgICAgICAgICAgICAgICAgIGlmICgrK2kgPj0gbGVuKSByZXR1cm4gbGlzdDsKLSAgICAgICAgICAgICAgICBzdGFydCA9IGk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICgocHJlZml4ID09IERJR0lUKSAhPSAoY3VycmVudCA9PSBESUdJVCkgfHwKLSAgICAgICAgICAgICAgICAgICAgIChwcmVmaXggPT0gTE9XRVIgJiYgY3VycmVudCAhPSBMT1dFUikgfHwKLSAgICAgICAgICAgICAgICAgICAgIChpc0xldHRlcihwcmVmaXgpICE9IGlzTGV0dGVyKGN1cnJlbnQpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhZGRDYXBwZWQobGlzdCwgbmFtZS5zdWJzdHJpbmcoc3RhcnQsIGkpKTsKLSAgICAgICAgICAgICAgICBzdGFydCA9IGk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChwcmVmaXggPT0gVVBQRVIgJiYgY3VycmVudCA9PSBMT1dFUiAmJiBpID4gc3RhcnQgKyAxKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFkZENhcHBlZChsaXN0LCBuYW1lLnN1YnN0cmluZyhzdGFydCwgaSAtIDEpKTsKLSAgICAgICAgICAgICAgICBzdGFydCA9IGkgLSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJlZml4ID0gY3VycmVudDsKLSAgICAgICAgfQotICAgICAgICBhZGRDYXBwZWQobGlzdCwgbmFtZS5zdWJzdHJpbmcoc3RhcnQpKTsKLSAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgfQotCi0gICAgLy9jaGFyIGNsYXNzZXMKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgU1RBUlQgPSAwOwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBQVU5DVCA9IDE7Ci0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IERJR0lUID0gMjsKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgTUFSSyA9IDM7Ci0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IFVQUEVSID0gNDsKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgTE9XRVI9IDU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IE5PQ0FTRT0gNjsKLQotICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldENoYXJDbGFzcyhjaGFyIGMpCi0gICAgewotICAgICAgICAvL29yZGVyaW5nIGlzIGltcG9ydGFudCBoZXJlLgotICAgICAgICBpZiAoaXNQdW5jdHVhdGlvbihjKSkKLSAgICAgICAgICAgIHJldHVybiBQVU5DVDsKLSAgICAgICAgZWxzZSBpZiAoQ2hhcmFjdGVyLmlzRGlnaXQoYykpCi0gICAgICAgICAgICByZXR1cm4gRElHSVQ7Ci0gICAgICAgIGVsc2UgaWYgKENoYXJhY3Rlci5pc1VwcGVyQ2FzZShjKSkKLSAgICAgICAgICAgIHJldHVybiBVUFBFUjsKLSAgICAgICAgZWxzZSBpZiAoQ2hhcmFjdGVyLmlzTG93ZXJDYXNlKGMpKQotICAgICAgICAgICAgcmV0dXJuIExPV0VSOwotICAgICAgICBlbHNlIGlmIChDaGFyYWN0ZXIuaXNMZXR0ZXIoYykpCi0gICAgICAgICAgICByZXR1cm4gTk9DQVNFOwotICAgICAgICBlbHNlIGlmIChDaGFyYWN0ZXIuaXNKYXZhSWRlbnRpZmllclBhcnQoYykpCi0gICAgICAgICAgICByZXR1cm4gTUFSSzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIFBVTkNUOyAvLyBub3QgY292ZXJlZCBieSBKQVhCOiB0cmVhdCBpdCBhcyBwdW5jdHVhdGlvbgotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNMZXR0ZXIoaW50IHN0YXRlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChzdGF0ZT09VVBQRVIKLSAgICAgICAgICAgICAgfHwgc3RhdGU9PUxPV0VSCi0gICAgICAgICAgICAgIHx8IHN0YXRlPT1OT0NBU0UpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1B1bmN0dWF0aW9uKGNoYXIgYykKLSAgICB7Ci0gICAgICAgIHJldHVybiAoYyA9PSBIWVBIRU4KLSAgICAgICAgICAgICAgfHwgYyA9PSBQRVJJT0QKLSAgICAgICAgICAgICAgfHwgYyA9PSBDT0xPTgotICAgICAgICAgICAgICB8fCBjID09IFVTQ09SRQotICAgICAgICAgICAgICB8fCBjID09IERPVAotICAgICAgICAgICAgICB8fCBjID09IFRFTEVJQQotICAgICAgICAgICAgICB8fCBjID09IEFZQUgKLSAgICAgICAgICAgICAgfHwgYyA9PSBFTEhJWkIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEludGVuZGVkIHRvIGJlIGFwcGxpZWQgdG8gYSBsb3dlcmNhc2Utc3RhcnRpbmcgaWRlbnRpZmllciB0aGF0Ci0gICAgICogbWF5IGNvbGxpZGUgd2l0aCBhIEphdmEga2V5d29yZC4gIElmIGl0IGRvZXMgY29sbGlkZSwgdGhpcwotICAgICAqIHByZXBlbmRzIHRoZSBsZXR0ZXIgIngiLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIG5vbkphdmFLZXl3b3JkKFN0cmluZyB3b3JkKQotICAgIHsKLSAgICAgICAgaWYgKGlzSmF2YVJlc2VydmVkV29yZCh3b3JkKSkKLSAgICAgICAgICAgIHJldHVybiAneCcgKyB3b3JkOwotICAgICAgICByZXR1cm4gd29yZDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbnRlbmRlZCB0byBiZSBhcHBsaWVkIHRvIGFuIHVwcGVyY2FzZS1zdGFydGluZyBpZGVudGlmaWVyIHRoYXQKLSAgICAgKiBtYXkgY29sbGlkZSB3aXRoIGEgamF2YS5sYW5nLiogY2xhc3NuYW1lLiAgSWYgaXQgZG9lcyBjb2xsaWRlLCB0aGlzCi0gICAgICogcHJlcGVuZHMgdGhlIGxldHRlciAiWCIuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgbm9uSmF2YUNvbW1vbkNsYXNzTmFtZShTdHJpbmcgbmFtZSkKLSAgICB7Ci0gICAgICAgIGlmIChpc0phdmFDb21tb25DbGFzc05hbWUobmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gIlgiICsgbmFtZTsKLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0phdmFSZXNlcnZlZFdvcmQoU3RyaW5nIHdvcmQpCi0gICAgewotICAgICAgICByZXR1cm4gaXNKYXZhUmVzZXJ2ZWRXb3JkKHdvcmQsIHRydWUpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNKYXZhUmVzZXJ2ZWRXb3JkKFN0cmluZyB3b3JkLCBib29sZWFuIGlnbm9yZV9jYXNlKQotICAgIHsKLSAgICAgICAgaWYgKGlnbm9yZV9jYXNlKQotICAgICAgICAgICAgd29yZCA9IHdvcmQudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgcmV0dXJuIGphdmFXb3Jkcy5jb250YWlucyh3b3JkKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNKYXZhQ29tbW9uQ2xhc3NOYW1lKFN0cmluZyB3b3JkKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGphdmFOYW1lcy5jb250YWlucyh3b3JkKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vUHJlZml4UmVzb2x2ZXIuamF2YSBiL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9QcmVmaXhSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjhmZGE4Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9QcmVmaXhSZXNvbHZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uOwotCi1wdWJsaWMgaW50ZXJmYWNlIFByZWZpeFJlc29sdmVyCi17Ci0gICAgLyoqCi0gICAgICogQ2FsZWQgd2hlbiB0aGUgdXNlciBoYXMgYSBwcmVmaXggYW5kIG5lZWRzIHRvIGxvb2sgdXAgdGhlIGNvcnJlc3BvbmRpbmcKLSAgICAgKiBuYW1lc3BhY2UgVVJJLiBJZiB0aGUgcHJlZml4IGlzIG5vdCBkZWZpbmVkIGluIHRoaXMgY29udGV4dCwgdGhlbiB0aGlzCi0gICAgICogbWV0aG9kIG1heSByZXR1cm4gbnVsbC4gIFRoZSBuby1uYW1lc3BhY2UgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIGVtcHR5Ci0gICAgICogc3RyaW5nIHJldHVybiByZXN1bHQuCi0gICAgICogCi0gICAgICogSWYgdGhlIHByZWZpeCBpcyBudWxsIG9yICIiLCB0aGVuIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSBpcyBiZWluZwotICAgICAqIHJlcXVlc3RlZC4KLSAgICAgKi8KLSAgICBTdHJpbmcgZ2V0TmFtZXNwYWNlRm9yUHJlZml4KFN0cmluZyBwcmVmaXgpOwotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL1B1c2hlZElucHV0U3RyZWFtLmphdmEgYi92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vUHVzaGVkSW5wdXRTdHJlYW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDlhOTZhMy4uMDAwMDAwMAotLS0gYS92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vUHVzaGVkSW5wdXRTdHJlYW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1MCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb247Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFB1c2hlZElucHV0U3RyZWFtIGV4dGVuZHMgSW5wdXRTdHJlYW0KLXsKLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgZGVmYXVsdEJ1ZmZlclNpemUgPSAyMDQ4OwotICAgIHByb3RlY3RlZCBieXRlIGJ1ZltdOwotICAgIHByb3RlY3RlZCBpbnQgd3JpdGVwb3M7Ci0gICAgcHJvdGVjdGVkIGludCByZWFkcG9zOwotICAgIHByb3RlY3RlZCBpbnQgbWFya3BvcyA9IC0xOwotICAgIHByb3RlY3RlZCBpbnQgbWFya2xpbWl0OwotICAgIHByb3RlY3RlZCBPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gbmV3IEludGVybmFsT3V0cHV0U3RyZWFtKCk7Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsZWQgd2hlbiBtb3JlIGJ5dGVzIG5lZWQgdG8gYmUgd3JpdHRlbiBpbnRvIHRoaXMgc3RyZWFtCi0gICAgICogKGFzIGFuIE91dHB1dFN0cmVhbSkuCi0gICAgICoKLSAgICAgKiBUaGlzIG1ldGhvZCBtdXN0IHdyaXRlIGF0IGxlYXN0IG9uZSBieXRlIGlmIHRoZSBzdHJlYW0gaXMKLSAgICAgKiBub3QgZW5kZWQsIGFuZCBpdCBtdXN0IG5vdCB3cml0ZSBhbnkgYnl0ZXMgaWYgdGhlIHN0cmVhbSBoYXMKLSAgICAgKiBhbHJlYWR5IGVuZGVkLgotICAgICAqLwotICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGZpbGwoaW50IHJlcXVlc3RlZEJ5dGVzKSB0aHJvd3MgSU9FeGNlcHRpb247Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBsaW5rZWQgb3V0cHV0IHN0cmVhbS4KLSAgICAgKgotICAgICAqIFRoaXMgaXMgdGhlIG91dHB1dCBzdHJlYW0gdGhhdCBtdXN0IGJlIHdyaXR0ZW4gdG8gd2hlbmV2ZXIKLSAgICAgKiB0aGUgZmlsbCBtZXRob2QgaXMgY2FsbGVkLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBPdXRwdXRTdHJlYW0gZ2V0T3V0cHV0U3RyZWFtKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBvdXRwdXRTdHJlYW07Ci0gICAgfQotCi0gICAgcHVibGljIFB1c2hlZElucHV0U3RyZWFtKCkKLSAgICB7Ci0gICAgICAgIHRoaXMoZGVmYXVsdEJ1ZmZlclNpemUpOwotICAgIH0KLQotICAgIHB1YmxpYyBQdXNoZWRJbnB1dFN0cmVhbShpbnQgc2l6ZSkKLSAgICB7Ci0gICAgICAgIGlmIChzaXplIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTmVnYXRpdmUgaW5pdGlhbCBidWZmZXIgc2l6ZSIpOwotICAgICAgICB9Ci0gICAgICAgIGJ1ZiA9IG5ldyBieXRlW3NpemVdOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIE1ha2VzIHJvb20gZm9yIGNiIG1vcmUgYnl0ZXMgb2YgZGF0YQotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBzaGlmdChpbnQgY2IpCi0gICAgewotICAgICAgICBpbnQgc2F2ZXBvcyA9IHJlYWRwb3M7Ci0gICAgICAgIGlmIChtYXJrcG9zID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlYWRwb3MgLSBtYXJrcG9zID4gbWFya2xpbWl0KQotICAgICAgICAgICAgICAgIG1hcmtwb3MgPSAtMTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzYXZlcG9zID0gbWFya3BvczsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBzaXplID0gd3JpdGVwb3MgLSBzYXZlcG9zOwotCi0gICAgICAgIGlmIChzYXZlcG9zID4gMCAmJiBidWYubGVuZ3RoIC0gc2l6ZSA+PSBjYiAmJiBzaXplIDw9IGNiKQotICAgICAgICB7Ci0gICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGJ1Ziwgc2F2ZXBvcywgYnVmLCAwLCBzaXplKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBuZXdjb3VudCA9IHNpemUgKyBjYjsKLSAgICAgICAgICAgIGJ5dGUgbmV3YnVmW10gPSBuZXcgYnl0ZVtNYXRoLm1heChidWYubGVuZ3RoIDw8IDEsIG5ld2NvdW50KV07Ci0gICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGJ1Ziwgc2F2ZXBvcywgbmV3YnVmLCAwLCBzaXplKTsKLSAgICAgICAgICAgIGJ1ZiA9IG5ld2J1ZjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzYXZlcG9zID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmVhZHBvcyAtPSBzYXZlcG9zOwotICAgICAgICAgICAgaWYgKG1hcmtwb3MgPiAwKQotICAgICAgICAgICAgICAgIG1hcmtwb3MgLT0gc2F2ZXBvczsKLSAgICAgICAgICAgIHdyaXRlcG9zIC09IHNhdmVwb3M7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIGludCByZWFkKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBpZiAocmVhZHBvcyA+PSB3cml0ZXBvcykKLSAgICAgICAgewotICAgICAgICAgICAgZmlsbCgxKTsKLSAgICAgICAgICAgIGlmIChyZWFkcG9zID49IHdyaXRlcG9zKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYnVmW3JlYWRwb3MrK10gJiAweGZmOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlYWQgY2hhcmFjdGVycyBpbnRvIGEgcG9ydGlvbiBvZiBhbiBhcnJheSwgcmVhZGluZyBmcm9tIHRoZSB1bmRlcmx5aW5nCi0gICAgICogc3RyZWFtIGF0IG1vc3Qgb25jZSBpZiBuZWNlc3NhcnkuCi0gICAgICovCi0gICAgcHVibGljIHN5bmNocm9uaXplZCBpbnQgcmVhZChieXRlW10gYiwgaW50IG9mZiwgaW50IGxlbikgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBpbnQgYXZhaWwgPSB3cml0ZXBvcyAtIHJlYWRwb3M7Ci0gICAgICAgIGlmIChhdmFpbCA8IGxlbikKLSAgICAgICAgewotICAgICAgICAgICAgZmlsbChsZW4gLSBhdmFpbCk7Ci0gICAgICAgICAgICBhdmFpbCA9IHdyaXRlcG9zIC0gcmVhZHBvczsKLSAgICAgICAgICAgIGlmIChhdmFpbCA8PSAwKSByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGNudCA9IChhdmFpbCA8IGxlbikgPyBhdmFpbCA6IGxlbjsKLSAgICAgICAgU3lzdGVtLmFycmF5Y29weShidWYsIHJlYWRwb3MsIGIsIG9mZiwgY250KTsKLSAgICAgICAgcmVhZHBvcyArPSBjbnQ7Ci0gICAgICAgIHJldHVybiBjbnQ7Ci0gICAgfQotCi0gICAgcHVibGljIHN5bmNocm9uaXplZCBsb25nIHNraXAobG9uZyBuKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGlmIChuIDw9IDApCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBsb25nIGF2YWlsID0gd3JpdGVwb3MgLSByZWFkcG9zOwotCi0gICAgICAgIGlmIChhdmFpbCA8IG4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEZpbGwgaW4gYnVmZmVyIHRvIHNhdmUgYnl0ZXMgZm9yIHJlc2V0Ci0gICAgICAgICAgICBsb25nIHJlcSA9IG4gLSBhdmFpbDsKLSAgICAgICAgICAgIGlmIChyZXEgPiBJbnRlZ2VyLk1BWF9WQUxVRSkKLSAgICAgICAgICAgICAgICByZXEgPSBJbnRlZ2VyLk1BWF9WQUxVRTsKLSAgICAgICAgICAgIGZpbGwoKGludClyZXEpOwotICAgICAgICAgICAgYXZhaWwgPSB3cml0ZXBvcyAtIHJlYWRwb3M7Ci0gICAgICAgICAgICBpZiAoYXZhaWwgPD0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIGxvbmcgc2tpcHBlZCA9IChhdmFpbCA8IG4pID8gYXZhaWwgOiBuOwotICAgICAgICByZWFkcG9zICs9IHNraXBwZWQ7Ci0gICAgICAgIHJldHVybiBza2lwcGVkOwotICAgIH0KLQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgaW50IGF2YWlsYWJsZSgpCi0gICAgewotICAgICAgICByZXR1cm4gd3JpdGVwb3MgLSByZWFkcG9zOwotICAgIH0KLQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBtYXJrKGludCByZWFkbGltaXQpCi0gICAgewotICAgICAgICBtYXJrbGltaXQgPSByZWFkbGltaXQ7Ci0gICAgICAgIG1hcmtwb3MgPSByZWFkcG9zOwotICAgIH0KLQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZXNldCgpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgaWYgKG1hcmtwb3MgPCAwKQotICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJSZXNldHRpbmcgdG8gaW52YWxpZCBtYXJrIik7Ci0gICAgICAgIHJlYWRwb3MgPSBtYXJrcG9zOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIG1hcmtTdXBwb3J0ZWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBjbGFzcyBJbnRlcm5hbE91dHB1dFN0cmVhbSBleHRlbmRzIE91dHB1dFN0cmVhbQotICAgIHsKLSAgICAgICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHdyaXRlKGludCBiKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHdyaXRlcG9zICsgMSA+IGJ1Zi5sZW5ndGgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc2hpZnQoMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBidWZbd3JpdGVwb3NdID0gKGJ5dGUpYjsKLSAgICAgICAgICAgIHdyaXRlcG9zICs9IDE7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgd3JpdGUoYnl0ZSBiW10sIGludCBvZmYsIGludCBsZW4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICgob2ZmIDwgMCkgfHwgKG9mZiA+IGIubGVuZ3RoKSB8fCAobGVuIDwgMCkgfHwKLSAgICAgICAgICAgICAgICAoKG9mZiArIGxlbikgPiBiLmxlbmd0aCkgfHwgKChvZmYgKyBsZW4pIDwgMCkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGxlbiA9PSAwKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKHdyaXRlcG9zICsgbGVuID4gYnVmLmxlbmd0aCkKLSAgICAgICAgICAgICAgICBzaGlmdChsZW4pOwotCi0gICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGIsIG9mZiwgYnVmLCB3cml0ZXBvcywgbGVuKTsKLSAgICAgICAgICAgIHdyaXRlcG9zICs9IGxlbjsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9RTmFtZUhlbHBlci5qYXZhIGIvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL1FOYW1lSGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3ZmJkMjguLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL1FOYW1lSGVscGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MTcgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTE5hbWU7Ci0KLWltcG9ydCBqYXZhLnNlY3VyaXR5Lk1lc3NhZ2VEaWdlc3Q7Ci1pbXBvcnQgamF2YS5zZWN1cml0eS5Ob1N1Y2hBbGdvcml0aG1FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hRmllbGQ7Ci0KLXB1YmxpYyBjbGFzcyBRTmFtZUhlbHBlcgotewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE1hcCBXRUxMX0tOT1dOX1BSRUZJWEVTID0gYnVpbGRXS1AoKTsKLQotICAgIHB1YmxpYyBzdGF0aWMgWE1MTmFtZSBnZXRYTUxOYW1lKFFOYW1lIHFuYW1lKQotICAgIHsKLSAgICAgICAgaWYgKHFuYW1lID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBYTUxOYW1lSGVscGVyLmZvckxOUyggcW5hbWUuZ2V0TG9jYWxQYXJ0KCksIHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpICk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgUU5hbWUgZm9yTE5TKFN0cmluZyBsb2NhbG5hbWUsIFN0cmluZyB1cmkpCi0gICAgewotICAgICAgICBpZiAodXJpID09IG51bGwpCi0gICAgICAgICAgICB1cmkgPSAiIjsKLSAgICAgICAgcmV0dXJuIG5ldyBRTmFtZSh1cmksIGxvY2FsbmFtZSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBRTmFtZSBmb3JMTihTdHJpbmcgbG9jYWxuYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBRTmFtZSgiIiwgbG9jYWxuYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFFOYW1lIGZvclByZXR0eShTdHJpbmcgcHJldHR5LCBpbnQgb2Zmc2V0KQotICAgIHsKLSAgICAgICAgaW50IGF0ID0gcHJldHR5LmluZGV4T2YoJ0AnLCBvZmZzZXQpOwotICAgICAgICBpZiAoYXQgPCAwKQotICAgICAgICAgICAgcmV0dXJuIG5ldyBRTmFtZSgiIiwgcHJldHR5LnN1YnN0cmluZyhvZmZzZXQpKTsKLSAgICAgICAgcmV0dXJuIG5ldyBRTmFtZShwcmV0dHkuc3Vic3RyaW5nKGF0ICsgMSksIHByZXR0eS5zdWJzdHJpbmcob2Zmc2V0LCBhdCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHByZXR0eShRTmFtZSBuYW1lKQotICAgIHsKLSAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiAibnVsbCI7Ci0KLSAgICAgICAgaWYgKG5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkgPT0gbnVsbCB8fCBuYW1lLmdldE5hbWVzcGFjZVVSSSgpLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICByZXR1cm4gbmFtZS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBuYW1lLmdldExvY2FsUGFydCgpICsgIkAiICsgbmFtZS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gaGV4ZGlnaXRzID0gbmV3IGNoYXJbXQotICAgICAgICB7JzAnLCcxJywnMicsJzMnLCc0JywnNScsJzYnLCc3JywnOCcsJzknLCdBJywnQicsJ0MnLCdEJywnRScsJ0YnfTsKLQotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNTYWZlKGludCBjKQotICAgIHsKLSAgICAgICAgaWYgKGMgPj0gJ2EnICYmIGMgPD0gJ3onKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChjID49ICdBJyAmJiBjIDw9ICdaJykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFRoaXMgcHJvZHVjZXMgYSBzdHJpbmcgd2hpY2ggaXMgYSBzYWZlIGZpbGVuYW1lIGZyb20gdGhlIGdpdmVuIHN0cmluZyBzLgotICAgIC8vIFRvIG1ha2UgaXQgYSBzYWZlIGZpbGVuYW1lLCB0aGUgZm9sbG93aW5nIHR3byB0cmFuc2Zvcm1hdGlvbnMgYXJlIGFwcGxpZWQ6Ci0gICAgLy8KLSAgICAvLyAxLiBGaXJzdCBhbGwgbm9uLWFzY2lpLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkIHVzaW5nCi0gICAgLy8gICAgdGhlaXIgVVRGOCBieXRlIHNlcXVlbmNlLCBpbiB0aGUgZm9ybSBfeHhfeHhfeHgsIGZvciBleGFtcGxlLAotICAgIC8vICAgICJIZWxsb18yMFRoZXJlIiBmb3IgIkhlbGxvIFRoZXJlIi4gIChPYnZpb3VzbHksIGEgc2luZ2xlIHVuaWNvZGUKLSAgICAvLyAgICBjaGFyYWN0ZXIgbWF5IGV4cGFuZCBpbnRvIGFzIG1hbnkgYXMgdGhyZWUgZXNjYXBlIHBhdHRlcm5zLikKLSAgICAvLyAgICBJZiB0aGUgcmVzdWx0aW5nIHN0cmluZyBpcyA2NCBjaGFyYWN0ZXJzIG9yIGZld2VyLCB0aGF0J3MgdGhlIHJlc3VsdC4KLSAgICAvLwotICAgIC8vIDIuIElmIHRoZSByZXN1bHRpbmcgc3RyaW5nIGlzIGxvbmdlciB0aGFuIDY0IGNoYXJhY3RlcnMsIHRoZW4gaXQgaXMKLSAgICAvLyAgICBkaXNjYXJkZWQuICBJbnN0ZWFkLCB0aGUgU0hBMSBhbGdvcml0aG0gaXMgcnVuIG9uIHRoZSBvcmlnaW5hbAotICAgIC8vICAgIHN0cmluZydzIFVURjggcmVwcmVzZW50YXRpb24sIGFuZCB0aGVuIHRoZSByZXN1bHRpbmcgMjAtYnl0ZSBtZXNzYWdlCi0gICAgLy8gICAgZGlnZXN0IGlzIHR1cm5lZCBpbnRvIGEgNDAtY2hhcmFjdGVyIGhleCBzdHJpbmc7IHRoZW4gIlVSSV9TSEFfMV8iIGlzCi0gICAgLy8gICAgcHJlcGVuZGVkLgotICAgIC8vCi0gICAgLy8gVGhlIHJlYXNvbiBmb3IgdGhlICJzaG9ydGVuaW5nIiBpcyB0byBhdm9pZCBmaWxlbmFtZXMgbG9uZ2VyIHRoYW4gYWJvdXQKLSAgICAvLyAyNTYgY2hhcmFjdGVycywgd2hpY2ggYXJlIHByb2hpYml0ZWQgb24gV2luZG93cyBOVC4KLSAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWF9OQU1FX0xFTkdUSCA9IDY0OwotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGhleHNhZmUoU3RyaW5nIHMpCi0gICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHMubGVuZ3RoKCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgY2hhciBjaCA9IHMuY2hhckF0KGkpOwotICAgICAgICAgICAgaWYgKGlzU2FmZShjaCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjaCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnl0ZVtdIHV0ZjggPSBudWxsOwotICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdXRmOCA9IHMuc3Vic3RyaW5nKGksIGkgKyAxKS5nZXRCeXRlcygiVVRGLTgiKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHV0ZjgubGVuZ3RoOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCdfJyk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaGV4ZGlnaXRzWyh1dGY4W2pdID4+IDQpICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaGV4ZGlnaXRzW3V0Zjhbal0gJiAweEZdKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2goVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiB1ZWUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBzaG91bGQgbmV2ZXIgaGFwcGVuIC0gVVRGLTggaSBhbHdheXMgc3VwcG9ydGVkCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIl9CQURfVVRGOF9DSEFSIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBzaG9ydCBlbm91Z2g/IERvbmUhCi0gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoKCkgPD0gTUFYX05BTUVfTEVOR1RIKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICAgICAgICAKLSAgICAgICAgLy8gdG9vIGxvbmc/IHVzZSBTSEExCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBNZXNzYWdlRGlnZXN0IG1kID0gTWVzc2FnZURpZ2VzdC5nZXRJbnN0YW5jZSgiU0hBIik7Ci0gICAgICAgICAgICBieXRlW10gaW5wdXRCeXRlcyA9IG51bGw7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnB1dEJ5dGVzID0gcy5nZXRCeXRlcygiVVRGLTgiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gdWVlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIHNob3VsZCBuZXZlciBoYXBwZW4gLSBVVEYtOCBpcyBhbHdheXMgc3VwcG9ydGVkCi0gICAgICAgICAgICAgICAgaW5wdXRCeXRlcyA9IG5ldyBieXRlWzBdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnl0ZVtdIGRpZ2VzdCA9IG1kLmRpZ2VzdChpbnB1dEJ5dGVzKTsKLSAgICAgICAgICAgIGFzc2VydChkaWdlc3QubGVuZ3RoID09IDIwKTsgLy8gU0hBMSAxNjAgYml0cyA9PSAyMCBieXRlcwotICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigiVVJJX1NIQV8xXyIpOwotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBkaWdlc3QubGVuZ3RoOyBqKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChoZXhkaWdpdHNbKGRpZ2VzdFtqXSA+PiA0KSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaGV4ZGlnaXRzW2RpZ2VzdFtqXSAmIDB4Rl0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChOb1N1Y2hBbGdvcml0aG1FeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVXNpbmcgaW4gYSBKREsgd2l0aG91dCBhbiBTSEEgaW1wbGVtZW50YXRpb24iKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGhleHNhZmVkaXIoUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIGlmIChuYW1lLmdldE5hbWVzcGFjZVVSSSgpID09IG51bGwgfHwgbmFtZS5nZXROYW1lc3BhY2VVUkkoKS5sZW5ndGgoKSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuICJfbm9ucy8iICsgaGV4c2FmZShuYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICAgICAgcmV0dXJuIGhleHNhZmUobmFtZS5nZXROYW1lc3BhY2VVUkkoKSkgKyAiLyIgKyBoZXhzYWZlKG5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIE1hcCBidWlsZFdLUCgpCi0gICAgewotICAgICAgICBNYXAgcmVzdWx0ID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgcmVzdWx0LnB1dCgiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwgInhtbCIpOwotICAgICAgICByZXN1bHQucHV0KCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsICJ4cyIpOwotICAgICAgICByZXN1bHQucHV0KCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIsICJ4c2kiKTsKLSAgICAgICAgcmVzdWx0LnB1dCgiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iLCAid3NkbCIpOwotICAgICAgICByZXN1bHQucHV0KCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VuY29kaW5nLyIsICJzb2FwZW5jIik7Ci0gICAgICAgIHJlc3VsdC5wdXQoImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIiwgInNvYXBlbnYiKTsKLSAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZU1hcChyZXN1bHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHJlYWRhYmxlKFNjaGVtYVR5cGUgc1R5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gcmVhZGFibGUoc1R5cGUsIFdFTExfS05PV05fUFJFRklYRVMpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHJlYWRhYmxlKFNjaGVtYVR5cGUgc1R5cGUsIE1hcCBuc1ByZWZpeCkKLSAgICB7Ci0gICAgICAgIGlmIChzVHlwZS5nZXROYW1lKCkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHJlYWRhYmxlKHNUeXBlLmdldE5hbWUoKSwgbnNQcmVmaXgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoc1R5cGUuaXNBdHRyaWJ1dGVUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAiYXR0cmlidXRlIHR5cGUgIiArIHJlYWRhYmxlKHNUeXBlLmdldEF0dHJpYnV0ZVR5cGVBdHRyaWJ1dGVOYW1lKCksIG5zUHJlZml4KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHNUeXBlLmlzRG9jdW1lbnRUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAiZG9jdW1lbnQgdHlwZSAiICsgcmVhZGFibGUoc1R5cGUuZ2V0RG9jdW1lbnRFbGVtZW50TmFtZSgpLCBuc1ByZWZpeCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChzVHlwZS5pc05vVHlwZSgpIHx8IHNUeXBlLmdldE91dGVyVHlwZSgpID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAiaW52YWxpZCB0eXBlIjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU2NoZW1hVHlwZSBvdXRlclR5cGUgPSBzVHlwZS5nZXRPdXRlclR5cGUoKTsKLSAgICAgICAgU2NoZW1hRmllbGQgY29udGFpbmVyID0gc1R5cGUuZ2V0Q29udGFpbmVyRmllbGQoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChvdXRlclR5cGUuaXNBdHRyaWJ1dGVUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAidHlwZSBvZiBhdHRyaWJ1dGUgIiArIHJlYWRhYmxlKGNvbnRhaW5lci5nZXROYW1lKCksIG5zUHJlZml4KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChvdXRlclR5cGUuaXNEb2N1bWVudFR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICJ0eXBlIG9mIGVsZW1lbnQgIiArIHJlYWRhYmxlKGNvbnRhaW5lci5nZXROYW1lKCksIG5zUHJlZml4KTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGlmIChjb250YWluZXIgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGNvbnRhaW5lci5pc0F0dHJpYnV0ZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiAidHlwZSBvZiAiICsgY29udGFpbmVyLmdldE5hbWUoKS5nZXRMb2NhbFBhcnQoKSArICIgYXR0cmlidXRlIGluICIgKyByZWFkYWJsZShvdXRlclR5cGUsIG5zUHJlZml4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gInR5cGUgb2YgIiArIGNvbnRhaW5lci5nZXROYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgKyAiIGVsZW1lbnQgaW4gIiArIHJlYWRhYmxlKG91dGVyVHlwZSwgbnNQcmVmaXgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAob3V0ZXJUeXBlLmdldEJhc2VUeXBlKCkgPT0gc1R5cGUpCi0gICAgICAgICAgICByZXR1cm4gImJhc2UgdHlwZSBvZiAiICsgcmVhZGFibGUob3V0ZXJUeXBlLCBuc1ByZWZpeCk7Ci0gICAgICAgIGVsc2UgaWYgKG91dGVyVHlwZS5nZXRTaW1wbGVWYXJpZXR5KCkgPT0gU2NoZW1hVHlwZS5MSVNUKQotICAgICAgICAgICAgcmV0dXJuICJpdGVtIHR5cGUgb2YgIiArIHJlYWRhYmxlKG91dGVyVHlwZSwgbnNQcmVmaXgpOwotICAgICAgICBlbHNlIGlmIChvdXRlclR5cGUuZ2V0U2ltcGxlVmFyaWV0eSgpID09IFNjaGVtYVR5cGUuVU5JT04pCi0gICAgICAgICAgICByZXR1cm4gIm1lbWJlciB0eXBlICIgKyBzVHlwZS5nZXRBbm9ueW1vdXNVbmlvbk1lbWJlck9yZGluYWwoKSArICIgb2YgIiArIHJlYWRhYmxlKG91dGVyVHlwZSwgbnNQcmVmaXgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gImlubmVyIHR5cGUgaW4gIiArIHJlYWRhYmxlKG91dGVyVHlwZSwgbnNQcmVmaXgpOyAKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgcmVhZGFibGUoUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiByZWFkYWJsZShuYW1lLCBXRUxMX0tOT1dOX1BSRUZJWEVTKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyByZWFkYWJsZShRTmFtZSBuYW1lLCBNYXAgcHJlZml4ZXMpCi0gICAgewotICAgICAgICBpZiAobmFtZS5nZXROYW1lc3BhY2VVUkkoKS5sZW5ndGgoKSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIG5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgIFN0cmluZyBwcmVmaXggPSAoU3RyaW5nKXByZWZpeGVzLmdldChuYW1lLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICAgICAgaWYgKHByZWZpeCAhPSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIHByZWZpeCArICI6IiArIG5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgIHJldHVybiBuYW1lLmdldExvY2FsUGFydCgpICsgIiBpbiBuYW1lc3BhY2UgIiArIG5hbWUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHN1Z2dlc3RQcmVmaXgoU3RyaW5nIG5hbWVzcGFjZSkKLSAgICB7Ci0gICAgICAgIFN0cmluZyByZXN1bHQgPSAoU3RyaW5nKVdFTExfS05PV05fUFJFRklYRVMuZ2V0KG5hbWVzcGFjZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIAotICAgICAgICBpbnQgbGVuID0gbmFtZXNwYWNlLmxlbmd0aCgpOwotICAgICAgICBpbnQgaSA9IG5hbWVzcGFjZS5sYXN0SW5kZXhPZignLycpOwotICAgICAgICBpZiAoaSA+IDAgJiYgaSA9PSBuYW1lc3BhY2UubGVuZ3RoKCkgLSAxKQotICAgICAgICB7Ci0gICAgICAgICAgICBsZW4gPSBpOwotICAgICAgICAgICAgaSA9IG5hbWVzcGFjZS5sYXN0SW5kZXhPZignLycsIGkgLSAxKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaSArPSAxOyAvLyBza2lwICcvJywgYWxzbyBjb3ZlcnMgLTEgY2FzZS4KLSAgICAgICAgCi0gICAgICAgIGlmIChuYW1lc3BhY2Uuc3RhcnRzV2l0aCgid3d3LiIsIGkpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpICs9IDQ7IC8vICJ3d3cuIi5sZW5ndGgoKQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB3aGlsZSAoaSA8IGxlbikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKFhNTENoYXIuaXNOQ05hbWVTdGFydChuYW1lc3BhY2UuY2hhckF0KGkpKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGkgKz0gMTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgZW5kID0gaSArIDE7IGVuZCA8IGxlbjsgZW5kICs9IDEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghWE1MQ2hhci5pc05DTmFtZShuYW1lc3BhY2UuY2hhckF0KGVuZCkpIHx8ICFDaGFyYWN0ZXIuaXNMZXR0ZXJPckRpZ2l0KG5hbWVzcGFjZS5jaGFyQXQoZW5kKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbGVuID0gZW5kOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBwcmVmaXhlcyBzdGFydGluZyB3aXRoICJ4bWwiIGFyZSBmb3JiaWRkZW4sIHNvIGNoYW5nZSAieG1scyIgLT4gInhzIgotICAgICAgICBpZiAobmFtZXNwYWNlLmxlbmd0aCgpID49IGkgKyAzICYmIHN0YXJ0c1dpdGhYbWwobmFtZXNwYWNlLCBpKSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG5hbWVzcGFjZS5sZW5ndGgoKSA+PSBpICsgNCkKLSAgICAgICAgICAgICAgICByZXR1cm4gIngiICsgQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKG5hbWVzcGFjZS5jaGFyQXQoaSArIDMpKTsKLSAgICAgICAgICAgIHJldHVybiAibnMiOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobGVuIC0gaSA+IDQpIC8vIGZvdXIgb3IgbGVzcz8gbGVhdmUgaXQuCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc1Zvd2VsKG5hbWVzcGFjZS5jaGFyQXQoaSArIDIpKSAmJiAhaXNWb3dlbChuYW1lc3BhY2UuY2hhckF0KGkgKyAzKSkpCi0gICAgICAgICAgICAgICAgbGVuID0gaSArIDQ7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGVuID0gaSArIDM7IC8vIG1vcmUgdGhhbiBmb3VyPyB0cnVuY2F0ZSB0byAzLgotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpbnQgbjsKLSAgICAgICAgCi0gICAgICAgIGlmIChsZW4gLSBpID09IDApCi0gICAgICAgICAgICByZXR1cm4gIm5zIjsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBuYW1lc3BhY2Uuc3Vic3RyaW5nKGksIGxlbikudG9Mb3dlckNhc2UoKTsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBzdGFydHNXaXRoWG1sKFN0cmluZyBzLCBpbnQgaSkKLSAgICB7Ci0gICAgICAgIGlmIChzLmxlbmd0aCgpIDwgaSArIDMpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpZiAocy5jaGFyQXQoaSkgIT0gJ1gnICYmIHMuY2hhckF0KGkpICE9ICd4JykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHMuY2hhckF0KGkgKyAxKSAhPSAnTScgJiYgcy5jaGFyQXQoaSArIDEpICE9ICdtJykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHMuY2hhckF0KGkgKyAyKSAhPSAnTCcgJiYgcy5jaGFyQXQoaSArIDIpICE9ICdsJykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzVm93ZWwoY2hhciBjaCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY2gpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgJ2EnOgotICAgICAgICAgICAgY2FzZSAnZSc6Ci0gICAgICAgICAgICBjYXNlICdpJzoKLSAgICAgICAgICAgIGNhc2UgJ28nOgotICAgICAgICAgICAgY2FzZSAndSc6Ci0gICAgICAgICAgICBjYXNlICdBJzoKLSAgICAgICAgICAgIGNhc2UgJ0UnOgotICAgICAgICAgICAgY2FzZSAnSSc6Ci0gICAgICAgICAgICBjYXNlICdPJzoKLSAgICAgICAgICAgIGNhc2UgJ1UnOgotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgbmFtZXNwYWNlKFNjaGVtYVR5cGUgc1R5cGUpCi0gICAgewotICAgICAgICB3aGlsZSAoc1R5cGUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHNUeXBlLmdldE5hbWUoKSAhPSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBzVHlwZS5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICAgICAgICBpZiAoc1R5cGUuZ2V0Q29udGFpbmVyRmllbGQoKSAhPSBudWxsICYmIHNUeXBlLmdldENvbnRhaW5lckZpZWxkKCkuZ2V0TmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc1R5cGUuZ2V0Q29udGFpbmVyRmllbGQoKS5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICAgICAgICBzVHlwZSA9IHNUeXBlLmdldE91dGVyVHlwZSgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vUmVhZGVySW5wdXRTdHJlYW0uamF2YSBiL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9SZWFkZXJJbnB1dFN0cmVhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDc4MmY1Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9SZWFkZXJJbnB1dFN0cmVhbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbjsKLQotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgUmVhZGVySW5wdXRTdHJlYW0gZXh0ZW5kcyBQdXNoZWRJbnB1dFN0cmVhbQotewotICAgIHByaXZhdGUgUmVhZGVyIHJlYWRlcjsKLSAgICBwcml2YXRlIFdyaXRlciB3cml0ZXI7Ci0gICAgcHJpdmF0ZSBjaGFyW10gYnVmOwotICAgIHB1YmxpYyBzdGF0aWMgaW50IGRlZmF1bHRCdWZmZXJTaXplID0gMjA0ODsKLQotICAgIHB1YmxpYyBSZWFkZXJJbnB1dFN0cmVhbShSZWFkZXIgcmVhZGVyLCBTdHJpbmcgZW5jb2RpbmcpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uCi0gICAgewotICAgICAgICB0aGlzKHJlYWRlciwgZW5jb2RpbmcsIGRlZmF1bHRCdWZmZXJTaXplKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUmVhZGVySW5wdXRTdHJlYW0oUmVhZGVyIHJlYWRlciwgU3RyaW5nIGVuY29kaW5nLCBpbnQgYnVmZmVyU2l6ZSkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGlmIChidWZmZXJTaXplIDw9IDApCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJCdWZmZXIgc2l6ZSA8PSAwIik7Ci0KLSAgICAgICAgdGhpcy5yZWFkZXIgPSByZWFkZXI7Ci0gICAgICAgIHRoaXMud3JpdGVyID0gbmV3IE91dHB1dFN0cmVhbVdyaXRlcihnZXRPdXRwdXRTdHJlYW0oKSwgZW5jb2RpbmcpOwotICAgICAgICBidWYgPSBuZXcgY2hhcltidWZmZXJTaXplXTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBmaWxsKGludCByZXF1ZXN0ZWRCeXRlcykgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBkbwotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgY2hhcnMgPSByZWFkZXIucmVhZChidWYpOwotICAgICAgICAgICAgaWYgKGNoYXJzIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIHdyaXRlci53cml0ZShidWYsIDAsIGNoYXJzKTsKLSAgICAgICAgICAgIHdyaXRlci5mbHVzaCgpOwotICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChhdmFpbGFibGUoKSA8PSAwKTsgLy8gbG9vcCBmb3Igc2FmZXR5LCBpbiBjYXNlIGVuY29kaW5nIGRpZG4ndCBwcm9kdWNlIGFueSBieXRlcyB5ZXQKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vU25pZmZlZFhtbElucHV0U3RyZWFtLmphdmEgYi92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vU25pZmZlZFhtbElucHV0U3RyZWFtLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ZmNmOGQuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL1NuaWZmZWRYbWxJbnB1dFN0cmVhbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzM3ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbjsKLQotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLQotcHVibGljIGNsYXNzIFNuaWZmZWRYbWxJbnB1dFN0cmVhbSBleHRlbmRzIEJ1ZmZlcmVkSW5wdXRTdHJlYW0KLXsKLSAgICAvLyBXZSBkb24ndCBzbmlmZiBtb3JlIHRoYW4gMTkyIGJ5dGVzLgotICAgIHB1YmxpYyBzdGF0aWMgaW50IE1BWF9TTklGRkVEX0JZVEVTID0gMTkyOwotCi0gICAgcHVibGljIFNuaWZmZWRYbWxJbnB1dFN0cmVhbShJbnB1dFN0cmVhbSBzdHJlYW0pIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgc3VwZXIoc3RyZWFtKTsKLQotICAgICAgICAvLyByZWFkIGJ5dGUgb3JkZXIgbWFya3MgYW5kIGRldGVjdCBFQkNESUMgZXRjCi0gICAgICAgIF9lbmNvZGluZyA9IHNuaWZmRm91ckJ5dGVzKCk7Ci0KLSAgICAgICAgaWYgKF9lbmNvZGluZyAhPSBudWxsICYmIF9lbmNvZGluZy5lcXVhbHMoIklCTTAzNyIpKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBGaXJzdCBmb3VyIGJ5dGVzIHN1Z2dlc3QgRUJDRElDIHdpdGggPD94bSBhdCBzdGFydAotICAgICAgICAgICAgU3RyaW5nIGVuY29kaW5nID0gc25pZmZGb3JYbWxEZWNsKF9lbmNvZGluZyk7Ci0gICAgICAgICAgICBpZiAoZW5jb2RpbmcgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBfZW5jb2RpbmcgPSBlbmNvZGluZzsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChfZW5jb2RpbmcgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gSGF2ZW4ndCB5ZXQgZGV0ZXJtaW5lZCBlbmNvZGluZzogc25pZmYgZm9yIDw/eG1sIGVuY29kaW5nPSIuLi4iPz4KLSAgICAgICAgICAgIC8vIGFzc3VtaW5nIHdlIGNhbiByZWFkIGl0IGFzIFVURi04LgotICAgICAgICAgICAgX2VuY29kaW5nID0gc25pZmZGb3JYbWxEZWNsKCJVVEYtOCIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKF9lbmNvZGluZyA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUaGUgWE1MIHNwZWMgc2F5cyB0aGVzZSB0d28gdGhpbmdzOgotCi0gICAgICAgICAgICAvLyAoMSkgIkluIHRoZSBhYnNlbmNlIG9mIGV4dGVybmFsIGNoYXJhY3RlciBlbmNvZGluZyBpbmZvcm1hdGlvbgotICAgICAgICAgICAgLy8gKHN1Y2ggYXMgTUlNRSBoZWFkZXJzKSwgcGFyc2VkIGVudGl0aWVzIHdoaWNoIGFyZSBzdG9yZWQgaW4gYW4KLSAgICAgICAgICAgIC8vIGVuY29kaW5nIG90aGVyIHRoYW4gVVRGLTggb3IgVVRGLTE2IG11c3QgYmVnaW4gd2l0aCBhIHRleHQKLSAgICAgICAgICAgIC8vIGRlY2xhcmF0aW9uIChzZWUgNC4zLjEgVGhlIFRleHQgRGVjbGFyYXRpb24pIGNvbnRhaW5pbmcgYW4KLSAgICAgICAgICAgIC8vIGVuY29kaW5nIGRlY2xhcmF0aW9uOiIKLQotICAgICAgICAgICAgLy8gKDIpICJJbiB0aGUgYWJzZW5jZSBvZiBpbmZvcm1hdGlvbiBwcm92aWRlZCBieSBhbiBleHRlcm5hbAotICAgICAgICAgICAgLy8gdHJhbnNwb3J0IHByb3RvY29sIChlLmcuIEhUVFAgb3IgTUlNRSksIGl0IGlzIGFuIGVycm9yCi0gICAgICAgICAgICAvLyBmb3IgYW4gZW50aXR5IGluY2x1ZGluZyBhbiBlbmNvZGluZyBkZWNsYXJhdGlvbiB0byBiZQotICAgICAgICAgICAgLy8gcHJlc2VudGVkIHRvIHRoZSBYTUwgcHJvY2Vzc29yIGluIGFuIGVuY29kaW5nIG90aGVyIHRoYW4KLSAgICAgICAgICAgIC8vIHRoYXQgbmFtZWQgaW4gdGhlIGRlY2xhcmF0aW9uLCBvciBmb3IgYW4gZW50aXR5IHdoaWNoIGJlZ2lucwotICAgICAgICAgICAgLy8gd2l0aCBuZWl0aGVyIGEgQnl0ZSBPcmRlciBNYXJrIG5vciBhbiBlbmNvZGluZyBkZWNsYXJhdGlvbgotICAgICAgICAgICAgLy8gdG8gdXNlIGFuIGVuY29kaW5nIG90aGVyIHRoYW4gVVRGLTguIgotCi0gICAgICAgICAgICAvLyBTaW5jZSB3ZSdyZSB1c2luZyBhIHNuaWZmZWQgc3RyZWFtLCB3ZSBkbyBub3QgaGF2ZSBleHRlcm5hbAotICAgICAgICAgICAgLy8gY2hhcmFjdGVyIGVuY29kaW5nIGluZm9ybWF0aW9uLgotCi0gICAgICAgICAgICAvLyBTaW5jZSB3ZSdyZSBoZXJlLCB3ZSBhbHNvIGRvbid0IGhhdmUgYSByZWNvZ25pemVkIGJ5dGUgb3JkZXIKLSAgICAgICAgICAgIC8vIG1hcmsgb3IgYW4gZXhwbGljaXQgZW5jb2RpbmcgZGVjbGFyYXRpb24gdGhhdCBjYW4gYmUgcmVhZCBpbgotICAgICAgICAgICAgLy8gZWl0aGVyIEFTQ0lJIG9yIEVCRElDIHN0eWxlLgotCi0gICAgICAgICAgICAvLyBUaGVyZWZvcmUsIHdlIG11c3QgdXNlIFVURi04LgotCi0gICAgICAgICAgICBfZW5jb2RpbmcgPSAiVVRGLTgiOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBpbnQgcmVhZEFzTXVjaEFzUG9zc2libGUoYnl0ZVtdIGJ1ZiwgaW50IHN0YXJ0QXQsIGludCBsZW4pIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgaW50IHRvdGFsID0gMDsKLSAgICAgICAgd2hpbGUgKHRvdGFsIDwgbGVuKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgY291bnQgPSByZWFkKGJ1Ziwgc3RhcnRBdCArIHRvdGFsLCBsZW4gLSB0b3RhbCk7Ci0gICAgICAgICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgdG90YWwgKz0gY291bnQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvdGFsOwotICAgIH0KLQotICAgIHByaXZhdGUgU3RyaW5nIHNuaWZmRm91ckJ5dGVzKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBtYXJrKDQpOwotICAgICAgICBpbnQgc2tpcCA9IDA7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBieXRlW10gYnVmID0gbmV3IGJ5dGVbNF07Ci0gICAgICAgICAgICBpZiAocmVhZEFzTXVjaEFzUG9zc2libGUoYnVmLCAwLCA0KSA8IDQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICBsb25nIHJlc3VsdCA9IDB4RkYwMDAwMDAgJiAoYnVmWzBdIDw8IDI0KSB8IDB4MDBGRjAwMDAgJiAoYnVmWzFdIDw8IDE2KSB8IDB4MDAwMEZGMDAgJiAoYnVmWzJdIDw8IDgpIHwgMHgwMDAwMDBGRiAmIGJ1ZlszXTsKLQotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSAweDAwMDBGRUZGKQotICAgICAgICAgICAgICAgIHJldHVybiAiVUNTLTQiOwotICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0ID09IDB4RkZGRTAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuICJVQ1MtNCI7Ci0gICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQgPT0gMHgwMDAwMDAzQykKLSAgICAgICAgICAgICAgICByZXR1cm4gIlVDUy00QkUiOwotICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0ID09IDB4M0MwMDAwMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuICJVQ1MtNExFIjsKLSAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdCA9PSAweDAwM0MwMDNGKQotICAgICAgICAgICAgICAgIHJldHVybiAiVVRGLTE2QkUiOwotICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0ID09IDB4M0MwMDNGMDApCi0gICAgICAgICAgICAgICAgcmV0dXJuICJVVEYtMTZMRSI7Ci0gICAgICAgICAgICBlbHNlIGlmIChyZXN1bHQgPT0gMHgzQzNGNzg2RCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gbG9va3MgbGlrZSBVUy1BU0NJSSB3aXRoIDw/eG1sOiBzbmlmZgotICAgICAgICAgICAgZWxzZSBpZiAocmVzdWx0ID09IDB4NEM2RkE3OTQpCi0gICAgICAgICAgICAgICAgcmV0dXJuICJJQk0wMzciOyAvLyBTbmlmZiBmb3IgZWJkaWMgY29kZXBhZ2UKLSAgICAgICAgICAgIGVsc2UgaWYgKChyZXN1bHQgJiAweEZGRkYwMDAwKSA9PSAweEZFRkYwMDAwKQotICAgICAgICAgICAgICAgIHJldHVybiAiVVRGLTE2IjsKLSAgICAgICAgICAgIGVsc2UgaWYgKChyZXN1bHQgJiAweEZGRkYwMDAwKSA9PSAweEZGRkUwMDAwKQotICAgICAgICAgICAgICAgIHJldHVybiAiVVRGLTE2IjsKLSAgICAgICAgICAgIGVsc2UgaWYgKChyZXN1bHQgJiAweEZGRkZGRjAwKSA9PSAweEVGQkJCRjAwKQotICAgICAgICAgICAgICAgIHJldHVybiAiVVRGLTgiOwotICAgICAgICAgICAgZWxzZSByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBmaW5hbGx5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc2V0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBCVUdCVUcgaW4gSkRLOiBDaGFyc2V0LmZvck5hbWUgaXMgbm90IHRocmVhZHNhZmUsIHNvIHdlJ2xsIHByaW1lIGl0Ci0gICAgLy8gd2l0aCB0aGUgY29tbW9uIGNoYXJzZXRzLgotCi0gICAgcHJpdmF0ZSBzdGF0aWMgQ2hhcnNldCBkdW1teTEgPSBDaGFyc2V0LmZvck5hbWUoIlVURi04Iik7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgQ2hhcnNldCBkdW1teTIgPSBDaGFyc2V0LmZvck5hbWUoIlVURi0xNiIpOwotICAgIHByaXZhdGUgc3RhdGljIENoYXJzZXQgZHVtbXkzID0gQ2hhcnNldC5mb3JOYW1lKCJVVEYtMTZCRSIpOwotICAgIHByaXZhdGUgc3RhdGljIENoYXJzZXQgZHVtbXk0ID0gQ2hhcnNldC5mb3JOYW1lKCJVVEYtMTZMRSIpOwotICAgIHByaXZhdGUgc3RhdGljIENoYXJzZXQgZHVtbXk1ID0gQ2hhcnNldC5mb3JOYW1lKCJJU08tODg1OS0xIik7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgQ2hhcnNldCBkdW1teTYgPSBDaGFyc2V0LmZvck5hbWUoIlVTLUFTQ0lJIik7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgQ2hhcnNldCBkdW1teTcgPSBDaGFyc2V0LmZvck5hbWUoIkNwMTI1MiIpOwotCi0KLSAgICBwcml2YXRlIFN0cmluZyBzbmlmZkZvclhtbERlY2woU3RyaW5nIGVuY29kaW5nKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIG1hcmsoTUFYX1NOSUZGRURfQllURVMpOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgYnl0ZVtdIGJ5dGVidWYgPSBuZXcgYnl0ZVtNQVhfU05JRkZFRF9CWVRFU107Ci0gICAgICAgICAgICBpbnQgYnl0ZWxpbWl0ID0gcmVhZEFzTXVjaEFzUG9zc2libGUoYnl0ZWJ1ZiwgMCwgTUFYX1NOSUZGRURfQllURVMpOwotCi0gICAgICAgICAgICAvLyBCVUdCVUcgaW4gSkRLOiBDaGFyc2V0LmZvck5hbWUgaXMgbm90IHRocmVhZHNhZmUuCi0gICAgICAgICAgICBDaGFyc2V0IGNoYXJzZXQgPSBDaGFyc2V0LmZvck5hbWUoZW5jb2RpbmcpOwotICAgICAgICAgICAgUmVhZGVyIHJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYnl0ZWJ1ZiwgMCwgYnl0ZWxpbWl0KSwgY2hhcnNldCk7Ci0gICAgICAgICAgICBjaGFyW10gYnVmID0gbmV3IGNoYXJbYnl0ZWxpbWl0XTsKLSAgICAgICAgICAgIGludCBsaW1pdCA9IDA7Ci0gICAgICAgICAgICB3aGlsZSAobGltaXQgPCBieXRlbGltaXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IGNvdW50ID0gcmVhZGVyLnJlYWQoYnVmLCBsaW1pdCwgYnl0ZWxpbWl0IC0gbGltaXQpOwotICAgICAgICAgICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGxpbWl0ICs9IGNvdW50OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZXh0cmFjdFhtbERlY2xFbmNvZGluZyhidWYsIDAsIGxpbWl0KTsKLSAgICAgICAgfQotICAgICAgICBmaW5hbGx5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc2V0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIFN0cmluZyBfZW5jb2Rpbmc7Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFhtbEVuY29kaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfZW5jb2Rpbmc7Ci0gICAgfQotCi0gICAgLyogcGFja2FnZSAqLyBzdGF0aWMgU3RyaW5nIGV4dHJhY3RYbWxEZWNsRW5jb2RpbmcoY2hhcltdIGJ1ZiwgaW50IG9mZnNldCwgaW50IHNpemUpCi0gICAgewotICAgICAgICBpbnQgbGltaXQgPSBvZmZzZXQgKyBzaXplOwotICAgICAgICBpbnQgeG1scGkgPSBmaXJzdEluZGV4T2YoIjw/eG1sIiwgYnVmLCBvZmZzZXQsIGxpbWl0KTsKLSAgICAgICAgaWYgKHhtbHBpID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpID0geG1scGkgKyA1OwotICAgICAgICAgICAgU2Nhbm5lZEF0dHJpYnV0ZSBhdHRyID0gbmV3IFNjYW5uZWRBdHRyaWJ1dGUoKTsKLSAgICAgICAgICAgIHdoaWxlIChpIDwgbGltaXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaSA9IHNjYW5BdHRyaWJ1dGUoYnVmLCBpLCBsaW1pdCwgYXR0cik7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPCAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICBpZiAoYXR0ci5uYW1lLmVxdWFscygiZW5jb2RpbmciKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF0dHIudmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IGZpcnN0SW5kZXhPZihTdHJpbmcgcywgY2hhcltdIGJ1ZiwgaW50IHN0YXJ0QXQsIGludCBsaW1pdCkKLSAgICB7Ci0gICAgICAgIGFzc2VydChzLmxlbmd0aCgpID4gMCk7Ci0gICAgICAgIGNoYXJbXSBsb29rRm9yID0gcy50b0NoYXJBcnJheSgpOwotCi0gICAgICAgIGNoYXIgZmlyc3RjaGFyID0gbG9va0ZvclswXTsKLSAgICAgICAgc2VhcmNoaW5nOiBmb3IgKGxpbWl0IC09IGxvb2tGb3IubGVuZ3RoOyBzdGFydEF0IDwgbGltaXQ7IHN0YXJ0QXQrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGJ1ZltzdGFydEF0XSA9PSBmaXJzdGNoYXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBsb29rRm9yLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZltzdGFydEF0ICsgaV0gIT0gbG9va0ZvcltpXSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgc2VhcmNoaW5nOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBzdGFydEF0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGludCBuZXh0Tm9ubWF0Y2hpbmdCeXRlKGNoYXJbXSBsb29rRm9yLCBjaGFyW10gYnVmLCBpbnQgc3RhcnRBdCwgaW50IGxpbWl0KQotICAgIHsKLSAgICAgICAgc2VhcmNoaW5nOiBmb3IgKDsgc3RhcnRBdCA8IGxpbWl0OyBzdGFydEF0KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB0aGlzY2hhciA9IGJ1ZltzdGFydEF0XTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbG9va0Zvci5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICBpZiAodGhpc2NoYXIgPT0gbG9va0ZvcltpXSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUgc2VhcmNoaW5nOwotICAgICAgICAgICAgcmV0dXJuIHN0YXJ0QXQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGludCBuZXh0TWF0Y2hpbmdCeXRlKGNoYXJbXSBsb29rRm9yLCBjaGFyW10gYnVmLCBpbnQgc3RhcnRBdCwgaW50IGxpbWl0KQotICAgIHsKLSAgICAgICAgc2VhcmNoaW5nOiBmb3IgKDsgc3RhcnRBdCA8IGxpbWl0OyBzdGFydEF0KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB0aGlzY2hhciA9IGJ1ZltzdGFydEF0XTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbG9va0Zvci5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICBpZiAodGhpc2NoYXIgPT0gbG9va0ZvcltpXSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0QXQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGludCBuZXh0TWF0Y2hpbmdCeXRlKGNoYXIgbG9va0ZvciwgY2hhcltdIGJ1ZiwgaW50IHN0YXJ0QXQsIGludCBsaW1pdCkKLSAgICB7Ci0gICAgICAgIHNlYXJjaGluZzogZm9yICg7IHN0YXJ0QXQgPCBsaW1pdDsgc3RhcnRBdCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYnVmW3N0YXJ0QXRdID09IGxvb2tGb3IpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0QXQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBwcml2YXRlIHN0YXRpYyBjaGFyW10gV0hJVEVTUEFDRSA9IG5ldyBjaGFyW10geyAnICcsICdccicsICdcdCcsICdcbicgfTsKLSAgICBwcml2YXRlIHN0YXRpYyBjaGFyW10gTk9UTkFNRSA9IG5ldyBjaGFyW10geyAnPScsICcgJywgJ1xyJywgJ1x0JywgJ1xuJywgJz8nLCAnPicsICc8JywgJ1wnJywgJ1wiJyB9OwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU2Nhbm5lZEF0dHJpYnV0ZQotICAgIHsKLSAgICAgICAgcHVibGljIFN0cmluZyBuYW1lOwotICAgICAgICBwdWJsaWMgU3RyaW5nIHZhbHVlOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGludCBzY2FuQXR0cmlidXRlKGNoYXJbXSBidWYsIGludCBzdGFydEF0LCBpbnQgbGltaXQsIFNjYW5uZWRBdHRyaWJ1dGUgYXR0cikKLSAgICB7Ci0gICAgICAgIGludCBuYW1lU3RhcnQgPSBuZXh0Tm9ubWF0Y2hpbmdCeXRlKFdISVRFU1BBQ0UsIGJ1Ziwgc3RhcnRBdCwgbGltaXQpOwotICAgICAgICBpZiAobmFtZVN0YXJ0IDwgMCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgaW50IG5hbWVFbmQgPSBuZXh0TWF0Y2hpbmdCeXRlKE5PVE5BTUUsIGJ1ZiwgbmFtZVN0YXJ0LCBsaW1pdCk7Ci0gICAgICAgIGlmIChuYW1lRW5kIDwgMCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgaW50IGVxdWFscyA9IG5leHROb25tYXRjaGluZ0J5dGUoV0hJVEVTUEFDRSwgYnVmLCBuYW1lRW5kLCBsaW1pdCk7Ci0gICAgICAgIGlmIChlcXVhbHMgPCAwKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBpZiAoYnVmW2VxdWFsc10gIT0gJz0nKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBpbnQgdmFsUXVvdGUgPSBuZXh0Tm9ubWF0Y2hpbmdCeXRlKFdISVRFU1BBQ0UsIGJ1ZiwgZXF1YWxzICsgMSwgbGltaXQpOwotICAgICAgICBpZiAoYnVmW3ZhbFF1b3RlXSAhPSAnXCcnICYmIGJ1Zlt2YWxRdW90ZV0gIT0gJ1wiJykKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgaW50IHZhbEVuZHF1b3RlID0gbmV4dE1hdGNoaW5nQnl0ZShidWZbdmFsUXVvdGVdLCBidWYsIHZhbFF1b3RlICsgMSwgbGltaXQpOwotICAgICAgICBpZiAodmFsRW5kcXVvdGUgPCAwKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBhdHRyLm5hbWUgPSBuZXcgU3RyaW5nKGJ1ZiwgbmFtZVN0YXJ0LCBuYW1lRW5kIC0gbmFtZVN0YXJ0KTsKLSAgICAgICAgYXR0ci52YWx1ZSA9IG5ldyBTdHJpbmcoYnVmLCB2YWxRdW90ZSArIDEsIHZhbEVuZHF1b3RlIC0gdmFsUXVvdGUgLSAxKTsKLSAgICAgICAgcmV0dXJuIHZhbEVuZHF1b3RlICsgMTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vU25pZmZlZFhtbFJlYWRlci5qYXZhIGIvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL1NuaWZmZWRYbWxSZWFkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJjNDYxOS4uMDAwMDAwMAotLS0gYS92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vU25pZmZlZFhtbFJlYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7Ci0KLXB1YmxpYyBjbGFzcyBTbmlmZmVkWG1sUmVhZGVyIGV4dGVuZHMgQnVmZmVyZWRSZWFkZXIKLXsKLSAgICAvLyBXZSBkb24ndCBzbmlmZiBtb3JlIHRoYW4gMTkyIGJ5dGVzLgotICAgIHB1YmxpYyBzdGF0aWMgaW50IE1BWF9TTklGRkVEX0NIQVJTID0gMTkyOwotCi0gICAgcHVibGljIFNuaWZmZWRYbWxSZWFkZXIoUmVhZGVyIHJlYWRlcikgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBzdXBlcihyZWFkZXIpOwotICAgICAgICBfZW5jb2RpbmcgPSBzbmlmZkZvclhtbERlY2woKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGludCByZWFkQXNNdWNoQXNQb3NzaWJsZShjaGFyW10gYnVmLCBpbnQgc3RhcnRBdCwgaW50IGxlbikgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBpbnQgdG90YWwgPSAwOwotICAgICAgICB3aGlsZSAodG90YWwgPCBsZW4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBjb3VudCA9IHJlYWQoYnVmLCBzdGFydEF0ICsgdG90YWwsIGxlbiAtIHRvdGFsKTsKLSAgICAgICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB0b3RhbCArPSBjb3VudDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG90YWw7Ci0gICAgfQotCi0gICAgLy8gQlVHQlVHIGluIEpESzogQ2hhcnNldC5mb3JOYW1lIGlzIG5vdCB0aHJlYWRzYWZlLCBzbyB3ZSdsbCBwcmltZSBpdAotICAgIC8vIHdpdGggdGhlIGNvbW1vbiBjaGFyc2V0cy4KLQotICAgIHByaXZhdGUgc3RhdGljIENoYXJzZXQgZHVtbXkxID0gQ2hhcnNldC5mb3JOYW1lKCJVVEYtOCIpOwotICAgIHByaXZhdGUgc3RhdGljIENoYXJzZXQgZHVtbXkyID0gQ2hhcnNldC5mb3JOYW1lKCJVVEYtMTYiKTsKLSAgICBwcml2YXRlIHN0YXRpYyBDaGFyc2V0IGR1bW15MyA9IENoYXJzZXQuZm9yTmFtZSgiVVRGLTE2QkUiKTsKLSAgICBwcml2YXRlIHN0YXRpYyBDaGFyc2V0IGR1bW15NCA9IENoYXJzZXQuZm9yTmFtZSgiVVRGLTE2TEUiKTsKLSAgICBwcml2YXRlIHN0YXRpYyBDaGFyc2V0IGR1bW15NSA9IENoYXJzZXQuZm9yTmFtZSgiSVNPLTg4NTktMSIpOwotICAgIHByaXZhdGUgc3RhdGljIENoYXJzZXQgZHVtbXk2ID0gQ2hhcnNldC5mb3JOYW1lKCJVUy1BU0NJSSIpOwotICAgIHByaXZhdGUgc3RhdGljIENoYXJzZXQgZHVtbXk3ID0gQ2hhcnNldC5mb3JOYW1lKCJDcDEyNTIiKTsKLQotCi0gICAgcHJpdmF0ZSBTdHJpbmcgc25pZmZGb3JYbWxEZWNsKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBtYXJrKE1BWF9TTklGRkVEX0NIQVJTKTsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNoYXJbXSBidWYgPSBuZXcgY2hhcltNQVhfU05JRkZFRF9DSEFSU107Ci0gICAgICAgICAgICBpbnQgbGltaXQgPSByZWFkQXNNdWNoQXNQb3NzaWJsZShidWYsIDAsIE1BWF9TTklGRkVEX0NIQVJTKTsKLSAgICAgICAgICAgIHJldHVybiBTbmlmZmVkWG1sSW5wdXRTdHJlYW0uZXh0cmFjdFhtbERlY2xFbmNvZGluZyhidWYsIDAsIGxpbWl0KTsKLSAgICAgICAgfQotICAgICAgICBmaW5hbGx5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc2V0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIFN0cmluZyBfZW5jb2Rpbmc7Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFhtbEVuY29kaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfZW5jb2Rpbmc7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL1ZhbGlkYXRpb25Db250ZXh0LmphdmEgYi92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vVmFsaWRhdGlvbkNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ViODBjMi4uMDAwMDAwMAotLS0gYS92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vVmFsaWRhdGlvbkNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbjsKLQotcHVibGljIGludGVyZmFjZSBWYWxpZGF0aW9uQ29udGV4dAotewotICAgIHB1YmxpYyB2b2lkIGludmFsaWQgKCBTdHJpbmcgbWVzc2FnZSApOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9WYWxpZGF0b3JMaXN0ZW5lci5qYXZhIGIvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL1ZhbGlkYXRvckxpc3RlbmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0OWViZTEuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL1ZhbGlkYXRvckxpc3RlbmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcjsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi0vKioKLSAqIEZpcnN0IGV2ZW50IG11c3QgYmUgYSBCRUdJTiB3aXRoIG5vIG5hbWUgKHRvIGNvbW11bmljYXRlIGFueSB4c2kKLSAqIGluZm9ybWF0aW9uKS4gIEJFR0lOIGFuZCBFTkQgbmVlZCB0byBtYXRjaC4KLSAqLwotCi1wdWJsaWMgaW50ZXJmYWNlIFZhbGlkYXRvckxpc3RlbmVyCi17Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQkVHSU4gICAgPSAxOyAvLyBCZWdpbiBlbGVtZW50Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRU5EICAgICAgPSAyOyAvLyBFbmQgZWxlbWVudAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRFWFQgICAgID0gMzsgLy8gVGV4dAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFUVFIgICAgID0gNDsgLy8gQXR0ciAobm9uLW5hbWVzcGFjZXMsIG5vbiB4c2kgb25seSkKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTkRBVFRSUyA9IDU7IC8vIGFmdGVyIEJFR0lOLCBhZnRlciBhdHRycwotCi0gICAgdm9pZCBuZXh0RXZlbnQgKCBpbnQga2luZCwgRXZlbnQgZXZlbnQgKTsKLQotICAgIHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIEV2ZW50IGV4dGVuZHMgUHJlZml4UmVzb2x2ZXIKLSAgICB7Ci0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBSRVNFUlZFID0gMTsKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVQTEFDRSAgPSAyOwotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT0xMQVBTRSA9IDM7Ci0KLSAgICAgICAgWG1sQ3Vyc29yIGdldExvY2F0aW9uQXNDdXJzb3IgKCApOwotCi0gICAgICAgIGJvb2xlYW4gZ2V0WHNpVHlwZSAgKCBDaGFycyBjaGFycyApOyAvLyBCRUdJTiB4c2k6dHlwZQotICAgICAgICBib29sZWFuIGdldFhzaU5pbCAgICggQ2hhcnMgY2hhcnMgKTsgLy8gQkVHSU4geHNpOm5pbAotICAgICAgICBib29sZWFuIGdldFhzaUxvYyAgICggQ2hhcnMgY2hhcnMgKTsgLy8gQkVHSU4geHNpOnNjaGVtYUxvY2F0aW9uCi0gICAgICAgIGJvb2xlYW4gZ2V0WHNpTm9Mb2MgKCBDaGFycyBjaGFycyApOyAvLyBCRUdJTiB4c2k6bm9OYW1lc3BhY2VTY2hlbWFMb2NhdGlvbgotICAgICAgICAgICAgICAgIAotICAgICAgICAvLyBPbiBTVEFSVCBhbmQgQVRUUgotICAgICAgICBRTmFtZSBnZXROYW1lICggKTsKLSAgICAgICAgCi0gICAgICAgIC8vIE9uIFRFWFQgYW5kIEFUVFIKLSAgICAgICAgdm9pZCBnZXRUZXh0ICggQ2hhcnMgY2hhcnMgKTsKLSAgICAgICAgdm9pZCBnZXRUZXh0ICggQ2hhcnMgY2hhcnMsIGludCB3c3IgKTsKLSAgICAgICAgCi0gICAgICAgIGJvb2xlYW4gdGV4dElzV2hpdGVzcGFjZSAoICk7Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9YQmVhbkRlYnVnLmphdmEgYi92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vWEJlYW5EZWJ1Zy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDU2MzdlLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9YQmVhbkRlYnVnLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTggKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBYQmVhbkRlYnVnCi17Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVFJBQ0VfU0NIRU1BX0xPQURJTkcgPSAweDAwMDE7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgdHJhY2VQcm9wID0gIm9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5kZWJ1ZyI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZGVmYXVsdFByb3AgPSAiIjsgLy8gIlRSQUNFX1NDSEVNQV9MT0FESU5HIjsKLQotICAgIHByaXZhdGUgc3RhdGljIGludCBfZW5hYmxlZCA9IGluaXRpYWxpemVCaXRzRnJvbVByb3BlcnR5KCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IF9pbmRlbnQgPSAwOwotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBfaW5kZW50c3BhY2UgPSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IGluaXRpYWxpemVCaXRzRnJvbVByb3BlcnR5KCkKLSAgICB7Ci0gICAgICAgIGludCBiaXRzID0gMDsKLSAgICAgICAgU3RyaW5nIHByb3AgPSBTeXN0ZW0uZ2V0UHJvcGVydHkodHJhY2VQcm9wLCBkZWZhdWx0UHJvcCk7Ci0gICAgICAgIGlmIChwcm9wLmluZGV4T2YoIlRSQUNFX1NDSEVNQV9MT0FESU5HIikgPj0gMCkKLSAgICAgICAgICAgIGJpdHMgfD0gVFJBQ0VfU0NIRU1BX0xPQURJTkc7Ci0gICAgICAgIHJldHVybiBiaXRzOwotICAgIH0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgZW5hYmxlKGludCBiaXRzKQotICAgIHsKLSAgICAgICAgX2VuYWJsZWQgPSBfZW5hYmxlZCB8IGJpdHM7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGRpc2FibGUoaW50IGJpdHMpCi0gICAgewotICAgICAgICBfZW5hYmxlZCA9IF9lbmFibGVkICYgfmJpdHM7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlKGludCBiaXRzLCBTdHJpbmcgbWVzc2FnZSwgaW50IGluZGVudCkKLSAgICB7Ci0gICAgICAgIGlmICh0ZXN0KGJpdHMpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzeW5jaHJvbml6ZWQgKFhCZWFuRGVidWcuY2xhc3MpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGluZGVudCA8IDApCi0gICAgICAgICAgICAgICAgICAgIF9pbmRlbnQgKz0gaW5kZW50OwotCi0gICAgICAgICAgICAgICAgU3RyaW5nIHNwYWNlcyA9IF9pbmRlbnQgPCAwID8gIiIgOiBfaW5kZW50ID4gX2luZGVudHNwYWNlLmxlbmd0aCgpID8gX2luZGVudHNwYWNlIDogX2luZGVudHNwYWNlLnN1YnN0cmluZygwLCBfaW5kZW50KTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbG9nbWVzc2FnZSA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpICsgIjogIiArIHNwYWNlcyArIG1lc3NhZ2UgKyAiXG4iOwotICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnQobG9nbWVzc2FnZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaW5kZW50ID4gMCkKLSAgICAgICAgICAgICAgICAgICAgX2luZGVudCArPSBpbmRlbnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gdGVzdChpbnQgYml0cykKLSAgICB7Ci0gICAgICAgIHJldHVybiAoX2VuYWJsZWQgJiBiaXRzKSAhPSAwOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgUHJpbnRTdHJlYW0gX2VycjsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBsb2coU3RyaW5nIG1lc3NhZ2UpCi0gICAgewotICAgICAgICBsb2cobWVzc2FnZSwgbnVsbCk7Ci0gICAgICAgIHJldHVybiBtZXNzYWdlOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBsb2dTdGFja1RyYWNlKFN0cmluZyBtZXNzYWdlKQotICAgIHsKLSAgICAgICAgbG9nKG1lc3NhZ2UsIG5ldyBUaHJvd2FibGUoKSk7Ci0gICAgICAgIHJldHVybiBtZXNzYWdlOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHN5bmNocm9uaXplZCBzdGF0aWMgU3RyaW5nIGxvZyhTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIHN0YWNrVHJhY2UpCi0gICAgewotICAgICAgICBpZiAoX2VyciA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBGaWxlIGRpYWdub3N0aWNGaWxlID0gRmlsZS5jcmVhdGVUZW1wRmlsZSgieG1sYmVhbmRlYnVnIiwgIi5sb2ciKTsKLSAgICAgICAgICAgICAgICBfZXJyID0gbmV3IFByaW50U3RyZWFtKG5ldyBGaWxlT3V0cHV0U3RyZWFtKGRpYWdub3N0aWNGaWxlKSk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJEaWFnbm9zdGljIFhNTCBCZWFuIGRlYnVnIGxvZyBmaWxlIGNyZWF0ZWQ6ICIgKyBkaWFnbm9zdGljRmlsZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfZXJyID0gU3lzdGVtLmVycjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBfZXJyLnByaW50bG4obWVzc2FnZSk7Ci0gICAgICAgIGlmIChzdGFja1RyYWNlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0YWNrVHJhY2UucHJpbnRTdGFja1RyYWNlKF9lcnIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtZXNzYWdlOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIFRocm93YWJsZSBsb2dFeGNlcHRpb24oVGhyb3dhYmxlIHQpCi0gICAgewotICAgICAgICBsb2codC5nZXRNZXNzYWdlKCksIHQpOwotICAgICAgICByZXR1cm4gdDsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vWE1MQ2hhci5qYXZhIGIvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL1hNTENoYXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVhYTlkOS4uMDAwMDAwMAotLS0gYS92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vWE1MQ2hhci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkxICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbjsKLQotLyoqCi0gKiBUaGlzIGNsYXNzIGRlZmluZXMgdGhlIGJhc2ljIFhNTCBjaGFyYWN0ZXIgcHJvcGVydGllcy4gVGhlIGRhdGEKLSAqIGluIHRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gdmVyaWZ5IHRoYXQgYSBjaGFyYWN0ZXIgaXMgYSB2YWxpZAotICogWE1MIGNoYXJhY3RlciBvciBpZiB0aGUgY2hhcmFjdGVyIGlzIGEgc3BhY2UsIG5hbWUgc3RhcnQsIG9yIG5hbWUKLSAqIGNoYXJhY3Rlci4KLSAqIDxwPgotICogQSBzZXJpZXMgb2YgY29udmVuaWVuY2UgbWV0aG9kcyBhcmUgc3VwcGxpZWQgdG8gZWFzZSB0aGUgYnVyZGVuCi0gKiBvZiB0aGUgZGV2ZWxvcGVyLiBCZWNhdXNlIGlubGluaW5nIHRoZSBjaGVja3MgY2FuIGltcHJvdmUgcGVyCi0gKiBjaGFyYWN0ZXIgcGVyZm9ybWFuY2UsIHRoZSB0YWJsZXMgb2YgY2hhcmFjdGVyIHByb3BlcnRpZXMgYXJlCi0gKiBwdWJsaWMuIFVzaW5nIHRoZSBjaGFyYWN0ZXIgYXMgYW4gaW5kZXggaW50byB0aGUgPGNvZGU+Q0hBUlM8L2NvZGU+Ci0gKiBhcnJheSBhbmQgYXBwbHlpbmcgdGhlIGFwcHJvcHJpYXRlIG1hc2sgZmxhZyAoZS5nLgotICogPGNvZGU+TUFTS19WQUxJRDwvY29kZT4pLCB5aWVsZHMgdGhlIHNhbWUgcmVzdWx0cyBhcyBjYWxsaW5nIHRoZQotICogY29udmVuaWVuY2UgbWV0aG9kcy4gVGhlcmUgaXMgb25lIGV4Y2VwdGlvbjogY2hlY2sgdGhlIGNvbW1lbnRzCi0gKiBmb3IgdGhlIDxjb2RlPmlzVmFsaWQ8L2NvZGU+IG1ldGhvZCBmb3IgZGV0YWlscy4KLSAqCi0gKiBAYXV0aG9yIEdsZW5uIE1hcmN5LCBJQk0KLSAqIEBhdXRob3IgQW5keSBDbGFyaywgSUJNCi0gKiBAYXV0aG9yIEVyaWMgWWUsIElCTQotICogQGF1dGhvciBBcm5hdWQgIExlIEhvcnMsIElCTQotICogQGF1dGhvciBSYWh1bCBTcml2YXN0YXZhLCBTdW4gTWljcm9zeXN0ZW1zIEluYy4KLSAqCi0gKiBAdmVyc2lvbiAkSWQ6IFhNTENoYXIuamF2YSx2IDEuMSAyMDAzLzA5LzI2IDIxOjIzOjI2IGVyaWN2YXMgRXhwICQKLSAqLwotcHVibGljIGNsYXNzIFhNTENoYXIgewotCi0gICAgLy8KLSAgICAvLyBDb25zdGFudHMKLSAgICAvLwotCi0gICAgLyoqIENoYXJhY3RlciBmbGFncy4gKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlW10gQ0hBUlMgPSBuZXcgYnl0ZVsxIDw8IDE2XTsKLQotICAgIC8qKiBWYWxpZCBjaGFyYWN0ZXIgbWFzay4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVNLX1ZBTElEID0gMHgwMTsKLQotICAgIC8qKiBTcGFjZSBjaGFyYWN0ZXIgbWFzay4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVNLX1NQQUNFID0gMHgwMjsKLQotICAgIC8qKiBOYW1lIHN0YXJ0IGNoYXJhY3RlciBtYXNrLiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BU0tfTkFNRV9TVEFSVCA9IDB4MDQ7Ci0KLSAgICAvKiogTmFtZSBjaGFyYWN0ZXIgbWFzay4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQVNLX05BTUUgPSAweDA4OwotCi0gICAgLyoqIFB1YmlkIGNoYXJhY3RlciBtYXNrLiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BU0tfUFVCSUQgPSAweDEwOwotICAgIAotICAgIC8qKiAKLSAgICAgKiBDb250ZW50IGNoYXJhY3RlciBtYXNrLiBTcGVjaWFsIGNoYXJhY3RlcnMgYXJlIHRob3NlIHRoYXQgY2FuCi0gICAgICogYmUgY29uc2lkZXJlZCB0aGUgc3RhcnQgb2YgbWFya3VwLCBzdWNoIGFzICcmbHQ7JyBhbmQgJyZhbXA7Jy4gCi0gICAgICogVGhlIHZhcmlvdXMgbmV3bGluZSBjaGFyYWN0ZXJzIGFyZSBjb25zaWRlcmVkIHNwZWNpYWwgYXMgd2VsbC4KLSAgICAgKiBBbGwgb3RoZXIgdmFsaWQgWE1MIGNoYXJhY3RlcnMgY2FuIGJlIGNvbnNpZGVyZWQgY29udGVudC4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiBmb3IgdGhlIGlubmVyIGxvb3Agb2YgY2hhcmFjdGVyIHNjYW5uaW5nLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BU0tfQ09OVEVOVCA9IDB4MjA7Ci0KLSAgICAvKiogTkNOYW1lIHN0YXJ0IGNoYXJhY3RlciBtYXNrLiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BU0tfTkNOQU1FX1NUQVJUID0gMHg0MDsKLQotICAgIC8qKiBOQ05hbWUgY2hhcmFjdGVyIG1hc2suICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFTS19OQ05BTUUgPSAweDgwOwotCi0gICAgLy8KLSAgICAvLyBTdGF0aWMgaW5pdGlhbGl6YXRpb24KLSAgICAvLwotCi0gICAgc3RhdGljIHsKLSAgICAgICAgCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFsyXSBDaGFyIDo6PSAjeDkgfCAjeEEgfCAjeEQgfCBbI3gyMC0jeEQ3RkZdIHwKLSAgICAgICAgLy8gICAgICAgICAgICAgIFsjeEUwMDAtI3hGRkZEXSB8IFsjeDEwMDAwLSN4MTBGRkZGXQotICAgICAgICAvLwotCi0gICAgICAgIGludCBjaGFyUmFuZ2VbXSA9IHsgCi0gICAgICAgICAgICAweDAwMDksIDB4MDAwQSwgMHgwMDBELCAweDAwMEQsIDB4MDAyMCwgMHhEN0ZGLCAweEUwMDAsIDB4RkZGRCwKLSAgICAgICAgfTsKLQotICAgICAgICAvLwotICAgICAgICAvLyBbM10gUyA6Oj0gKCN4MjAgfCAjeDkgfCAjeEQgfCAjeEEpKwotICAgICAgICAvLwotCi0gICAgICAgIGludCBzcGFjZUNoYXJbXSA9IHsgCi0gICAgICAgICAgICAweDAwMjAsIDB4MDAwOSwgMHgwMDBELCAweDAwMEEsCi0gICAgICAgIH07Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gWzRdIE5hbWVDaGFyIDo6PSBMZXR0ZXIgfCBEaWdpdCB8ICcuJyB8ICctJyB8ICdfJyB8ICc6JyB8Ci0gICAgICAgIC8vICAgICAgICAgICAgICAgICAgQ29tYmluaW5nQ2hhciB8IEV4dGVuZGVyCi0gICAgICAgIC8vCi0KLSAgICAgICAgaW50IG5hbWVDaGFyW10gPSB7IAotICAgICAgICAgICAgMHgwMDJELCAweDAwMkUsIC8vICctJyBhbmQgJy4nCi0gICAgICAgIH07Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gWzVdIE5hbWUgOjo9IChMZXR0ZXIgfCAnXycgfCAnOicpIChOYW1lQ2hhcikqCi0gICAgICAgIC8vCi0KLSAgICAgICAgaW50IG5hbWVTdGFydENoYXJbXSA9IHsgCi0gICAgICAgICAgICAweDAwM0EsIDB4MDA1RiwgLy8gJzonIGFuZCAnXycKLSAgICAgICAgfTsKLQotICAgICAgICAvLwotICAgICAgICAvLyBbMTNdIFB1YmlkQ2hhciA6Oj0gI3gyMCB8IDB4RCB8IDB4QSB8IFthLXpBLVowLTldIHwgWy0nKCkrLC4vOj0/OyEqI0AkXyVdCi0gICAgICAgIC8vCi0KLSAgICAgICAgaW50IHB1YmlkQ2hhcltdID0gewotICAgICAgICAgICAgMHgwMDBBLCAweDAwMEQsIDB4MDAyMCwgMHgwMDIxLCAweDAwMjMsIDB4MDAyNCwgMHgwMDI1LCAweDAwM0QsCi0gICAgICAgICAgICAweDAwNUYKLSAgICAgICAgfTsKLQotICAgICAgICBpbnQgcHViaWRSYW5nZVtdID0gewotICAgICAgICAgICAgMHgwMDI3LCAweDAwM0IsIDB4MDAzRiwgMHgwMDVBLCAweDAwNjEsIDB4MDA3QQotICAgICAgICB9OwotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFs4NF0gTGV0dGVyIDo6PSBCYXNlQ2hhciB8IElkZW9ncmFwaGljCi0gICAgICAgIC8vCi0KLSAgICAgICAgaW50IGxldHRlclJhbmdlW10gPSB7Ci0gICAgICAgICAgICAvLyBCYXNlQ2hhcgotICAgICAgICAgICAgMHgwMDQxLCAweDAwNUEsIDB4MDA2MSwgMHgwMDdBLCAweDAwQzAsIDB4MDBENiwgMHgwMEQ4LCAweDAwRjYsCi0gICAgICAgICAgICAweDAwRjgsIDB4MDEzMSwgMHgwMTM0LCAweDAxM0UsIDB4MDE0MSwgMHgwMTQ4LCAweDAxNEEsIDB4MDE3RSwKLSAgICAgICAgICAgIDB4MDE4MCwgMHgwMUMzLCAweDAxQ0QsIDB4MDFGMCwgMHgwMUY0LCAweDAxRjUsIDB4MDFGQSwgMHgwMjE3LAotICAgICAgICAgICAgMHgwMjUwLCAweDAyQTgsIDB4MDJCQiwgMHgwMkMxLCAweDAzODgsIDB4MDM4QSwgMHgwMzhFLCAweDAzQTEsCi0gICAgICAgICAgICAweDAzQTMsIDB4MDNDRSwgMHgwM0QwLCAweDAzRDYsIDB4MDNFMiwgMHgwM0YzLCAweDA0MDEsIDB4MDQwQywKLSAgICAgICAgICAgIDB4MDQwRSwgMHgwNDRGLCAweDA0NTEsIDB4MDQ1QywgMHgwNDVFLCAweDA0ODEsIDB4MDQ5MCwgMHgwNEM0LAotICAgICAgICAgICAgMHgwNEM3LCAweDA0QzgsIDB4MDRDQiwgMHgwNENDLCAweDA0RDAsIDB4MDRFQiwgMHgwNEVFLCAweDA0RjUsCi0gICAgICAgICAgICAweDA0RjgsIDB4MDRGOSwgMHgwNTMxLCAweDA1NTYsIDB4MDU2MSwgMHgwNTg2LCAweDA1RDAsIDB4MDVFQSwKLSAgICAgICAgICAgIDB4MDVGMCwgMHgwNUYyLCAweDA2MjEsIDB4MDYzQSwgMHgwNjQxLCAweDA2NEEsIDB4MDY3MSwgMHgwNkI3LAotICAgICAgICAgICAgMHgwNkJBLCAweDA2QkUsIDB4MDZDMCwgMHgwNkNFLCAweDA2RDAsIDB4MDZEMywgMHgwNkU1LCAweDA2RTYsCi0gICAgICAgICAgICAweDA5MDUsIDB4MDkzOSwgMHgwOTU4LCAweDA5NjEsIDB4MDk4NSwgMHgwOThDLCAweDA5OEYsIDB4MDk5MCwKLSAgICAgICAgICAgIDB4MDk5MywgMHgwOUE4LCAweDA5QUEsIDB4MDlCMCwgMHgwOUI2LCAweDA5QjksIDB4MDlEQywgMHgwOURELAotICAgICAgICAgICAgMHgwOURGLCAweDA5RTEsIDB4MDlGMCwgMHgwOUYxLCAweDBBMDUsIDB4MEEwQSwgMHgwQTBGLCAweDBBMTAsCi0gICAgICAgICAgICAweDBBMTMsIDB4MEEyOCwgMHgwQTJBLCAweDBBMzAsIDB4MEEzMiwgMHgwQTMzLCAweDBBMzUsIDB4MEEzNiwKLSAgICAgICAgICAgIDB4MEEzOCwgMHgwQTM5LCAweDBBNTksIDB4MEE1QywgMHgwQTcyLCAweDBBNzQsIDB4MEE4NSwgMHgwQThCLAotICAgICAgICAgICAgMHgwQThGLCAweDBBOTEsIDB4MEE5MywgMHgwQUE4LCAweDBBQUEsIDB4MEFCMCwgMHgwQUIyLCAweDBBQjMsCi0gICAgICAgICAgICAweDBBQjUsIDB4MEFCOSwgMHgwQjA1LCAweDBCMEMsIDB4MEIwRiwgMHgwQjEwLCAweDBCMTMsIDB4MEIyOCwKLSAgICAgICAgICAgIDB4MEIyQSwgMHgwQjMwLCAweDBCMzIsIDB4MEIzMywgMHgwQjM2LCAweDBCMzksIDB4MEI1QywgMHgwQjVELAotICAgICAgICAgICAgMHgwQjVGLCAweDBCNjEsIDB4MEI4NSwgMHgwQjhBLCAweDBCOEUsIDB4MEI5MCwgMHgwQjkyLCAweDBCOTUsCi0gICAgICAgICAgICAweDBCOTksIDB4MEI5QSwgMHgwQjlFLCAweDBCOUYsIDB4MEJBMywgMHgwQkE0LCAweDBCQTgsIDB4MEJBQSwKLSAgICAgICAgICAgIDB4MEJBRSwgMHgwQkI1LCAweDBCQjcsIDB4MEJCOSwgMHgwQzA1LCAweDBDMEMsIDB4MEMwRSwgMHgwQzEwLAotICAgICAgICAgICAgMHgwQzEyLCAweDBDMjgsIDB4MEMyQSwgMHgwQzMzLCAweDBDMzUsIDB4MEMzOSwgMHgwQzYwLCAweDBDNjEsCi0gICAgICAgICAgICAweDBDODUsIDB4MEM4QywgMHgwQzhFLCAweDBDOTAsIDB4MEM5MiwgMHgwQ0E4LCAweDBDQUEsIDB4MENCMywKLSAgICAgICAgICAgIDB4MENCNSwgMHgwQ0I5LCAweDBDRTAsIDB4MENFMSwgMHgwRDA1LCAweDBEMEMsIDB4MEQwRSwgMHgwRDEwLAotICAgICAgICAgICAgMHgwRDEyLCAweDBEMjgsIDB4MEQyQSwgMHgwRDM5LCAweDBENjAsIDB4MEQ2MSwgMHgwRTAxLCAweDBFMkUsCi0gICAgICAgICAgICAweDBFMzIsIDB4MEUzMywgMHgwRTQwLCAweDBFNDUsIDB4MEU4MSwgMHgwRTgyLCAweDBFODcsIDB4MEU4OCwKLSAgICAgICAgICAgIDB4MEU5NCwgMHgwRTk3LCAweDBFOTksIDB4MEU5RiwgMHgwRUExLCAweDBFQTMsIDB4MEVBQSwgMHgwRUFCLAotICAgICAgICAgICAgMHgwRUFELCAweDBFQUUsIDB4MEVCMiwgMHgwRUIzLCAweDBFQzAsIDB4MEVDNCwgMHgwRjQwLCAweDBGNDcsCi0gICAgICAgICAgICAweDBGNDksIDB4MEY2OSwgMHgxMEEwLCAweDEwQzUsIDB4MTBEMCwgMHgxMEY2LCAweDExMDIsIDB4MTEwMywKLSAgICAgICAgICAgIDB4MTEwNSwgMHgxMTA3LCAweDExMEIsIDB4MTEwQywgMHgxMTBFLCAweDExMTIsIDB4MTE1NCwgMHgxMTU1LAotICAgICAgICAgICAgMHgxMTVGLCAweDExNjEsIDB4MTE2RCwgMHgxMTZFLCAweDExNzIsIDB4MTE3MywgMHgxMUFFLCAweDExQUYsCi0gICAgICAgICAgICAweDExQjcsIDB4MTFCOCwgMHgxMUJDLCAweDExQzIsIDB4MUUwMCwgMHgxRTlCLCAweDFFQTAsIDB4MUVGOSwKLSAgICAgICAgICAgIDB4MUYwMCwgMHgxRjE1LCAweDFGMTgsIDB4MUYxRCwgMHgxRjIwLCAweDFGNDUsIDB4MUY0OCwgMHgxRjRELAotICAgICAgICAgICAgMHgxRjUwLCAweDFGNTcsIDB4MUY1RiwgMHgxRjdELCAweDFGODAsIDB4MUZCNCwgMHgxRkI2LCAweDFGQkMsCi0gICAgICAgICAgICAweDFGQzIsIDB4MUZDNCwgMHgxRkM2LCAweDFGQ0MsIDB4MUZEMCwgMHgxRkQzLCAweDFGRDYsIDB4MUZEQiwKLSAgICAgICAgICAgIDB4MUZFMCwgMHgxRkVDLCAweDFGRjIsIDB4MUZGNCwgMHgxRkY2LCAweDFGRkMsIDB4MjEyQSwgMHgyMTJCLAotICAgICAgICAgICAgMHgyMTgwLCAweDIxODIsIDB4MzA0MSwgMHgzMDk0LCAweDMwQTEsIDB4MzBGQSwgMHgzMTA1LCAweDMxMkMsCi0gICAgICAgICAgICAweEFDMDAsIDB4RDdBMywKLSAgICAgICAgICAgIC8vIElkZW9ncmFwaGljCi0gICAgICAgICAgICAweDMwMjEsIDB4MzAyOSwgMHg0RTAwLCAweDlGQTUsCi0gICAgICAgIH07Ci0gICAgICAgIGludCBsZXR0ZXJDaGFyW10gPSB7Ci0gICAgICAgICAgICAvLyBCYXNlQ2hhcgotICAgICAgICAgICAgMHgwMzg2LCAweDAzOEMsIDB4MDNEQSwgMHgwM0RDLCAweDAzREUsIDB4MDNFMCwgMHgwNTU5LCAweDA2RDUsCi0gICAgICAgICAgICAweDA5M0QsIDB4MDlCMiwgMHgwQTVFLCAweDBBOEQsIDB4MEFCRCwgMHgwQUUwLCAweDBCM0QsIDB4MEI5QywKLSAgICAgICAgICAgIDB4MENERSwgMHgwRTMwLCAweDBFODQsIDB4MEU4QSwgMHgwRThELCAweDBFQTUsIDB4MEVBNywgMHgwRUIwLAotICAgICAgICAgICAgMHgwRUJELCAweDExMDAsIDB4MTEwOSwgMHgxMTNDLCAweDExM0UsIDB4MTE0MCwgMHgxMTRDLCAweDExNEUsCi0gICAgICAgICAgICAweDExNTAsIDB4MTE1OSwgMHgxMTYzLCAweDExNjUsIDB4MTE2NywgMHgxMTY5LCAweDExNzUsIDB4MTE5RSwKLSAgICAgICAgICAgIDB4MTFBOCwgMHgxMUFCLCAweDExQkEsIDB4MTFFQiwgMHgxMUYwLCAweDExRjksIDB4MUY1OSwgMHgxRjVCLAotICAgICAgICAgICAgMHgxRjVELCAweDFGQkUsIDB4MjEyNiwgMHgyMTJFLAotICAgICAgICAgICAgLy8gSWRlb2dyYXBoaWMKLSAgICAgICAgICAgIDB4MzAwNywKLSAgICAgICAgfTsKLQotICAgICAgICAvLwotICAgICAgICAvLyBbODddIENvbWJpbmluZ0NoYXIgOjo9IC4uLgotICAgICAgICAvLwotCi0gICAgICAgIGludCBjb21iaW5pbmdDaGFyUmFuZ2VbXSA9IHsKLSAgICAgICAgICAgIDB4MDMwMCwgMHgwMzQ1LCAweDAzNjAsIDB4MDM2MSwgMHgwNDgzLCAweDA0ODYsIDB4MDU5MSwgMHgwNUExLAotICAgICAgICAgICAgMHgwNUEzLCAweDA1QjksIDB4MDVCQiwgMHgwNUJELCAweDA1QzEsIDB4MDVDMiwgMHgwNjRCLCAweDA2NTIsCi0gICAgICAgICAgICAweDA2RDYsIDB4MDZEQywgMHgwNkRELCAweDA2REYsIDB4MDZFMCwgMHgwNkU0LCAweDA2RTcsIDB4MDZFOCwKLSAgICAgICAgICAgIDB4MDZFQSwgMHgwNkVELCAweDA5MDEsIDB4MDkwMywgMHgwOTNFLCAweDA5NEMsIDB4MDk1MSwgMHgwOTU0LAotICAgICAgICAgICAgMHgwOTYyLCAweDA5NjMsIDB4MDk4MSwgMHgwOTgzLCAweDA5QzAsIDB4MDlDNCwgMHgwOUM3LCAweDA5QzgsCi0gICAgICAgICAgICAweDA5Q0IsIDB4MDlDRCwgMHgwOUUyLCAweDA5RTMsIDB4MEE0MCwgMHgwQTQyLCAweDBBNDcsIDB4MEE0OCwKLSAgICAgICAgICAgIDB4MEE0QiwgMHgwQTRELCAweDBBNzAsIDB4MEE3MSwgMHgwQTgxLCAweDBBODMsIDB4MEFCRSwgMHgwQUM1LAotICAgICAgICAgICAgMHgwQUM3LCAweDBBQzksIDB4MEFDQiwgMHgwQUNELCAweDBCMDEsIDB4MEIwMywgMHgwQjNFLCAweDBCNDMsCi0gICAgICAgICAgICAweDBCNDcsIDB4MEI0OCwgMHgwQjRCLCAweDBCNEQsIDB4MEI1NiwgMHgwQjU3LCAweDBCODIsIDB4MEI4MywKLSAgICAgICAgICAgIDB4MEJCRSwgMHgwQkMyLCAweDBCQzYsIDB4MEJDOCwgMHgwQkNBLCAweDBCQ0QsIDB4MEMwMSwgMHgwQzAzLAotICAgICAgICAgICAgMHgwQzNFLCAweDBDNDQsIDB4MEM0NiwgMHgwQzQ4LCAweDBDNEEsIDB4MEM0RCwgMHgwQzU1LCAweDBDNTYsCi0gICAgICAgICAgICAweDBDODIsIDB4MEM4MywgMHgwQ0JFLCAweDBDQzQsIDB4MENDNiwgMHgwQ0M4LCAweDBDQ0EsIDB4MENDRCwKLSAgICAgICAgICAgIDB4MENENSwgMHgwQ0Q2LCAweDBEMDIsIDB4MEQwMywgMHgwRDNFLCAweDBENDMsIDB4MEQ0NiwgMHgwRDQ4LAotICAgICAgICAgICAgMHgwRDRBLCAweDBENEQsIDB4MEUzNCwgMHgwRTNBLCAweDBFNDcsIDB4MEU0RSwgMHgwRUI0LCAweDBFQjksCi0gICAgICAgICAgICAweDBFQkIsIDB4MEVCQywgMHgwRUM4LCAweDBFQ0QsIDB4MEYxOCwgMHgwRjE5LCAweDBGNzEsIDB4MEY4NCwKLSAgICAgICAgICAgIDB4MEY4NiwgMHgwRjhCLCAweDBGOTAsIDB4MEY5NSwgMHgwRjk5LCAweDBGQUQsIDB4MEZCMSwgMHgwRkI3LAotICAgICAgICAgICAgMHgyMEQwLCAweDIwREMsIDB4MzAyQSwgMHgzMDJGLAotICAgICAgICB9OwotCi0gICAgICAgIGludCBjb21iaW5pbmdDaGFyQ2hhcltdID0gewotICAgICAgICAgICAgMHgwNUJGLCAweDA1QzQsIDB4MDY3MCwgMHgwOTNDLCAweDA5NEQsIDB4MDlCQywgMHgwOUJFLCAweDA5QkYsCi0gICAgICAgICAgICAweDA5RDcsIDB4MEEwMiwgMHgwQTNDLCAweDBBM0UsIDB4MEEzRiwgMHgwQUJDLCAweDBCM0MsIDB4MEJENywKLSAgICAgICAgICAgIDB4MEQ1NywgMHgwRTMxLCAweDBFQjEsIDB4MEYzNSwgMHgwRjM3LCAweDBGMzksIDB4MEYzRSwgMHgwRjNGLAotICAgICAgICAgICAgMHgwRjk3LCAweDBGQjksIDB4MjBFMSwgMHgzMDk5LCAweDMwOUEsCi0gICAgICAgIH07Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gWzg4XSBEaWdpdCA6Oj0gLi4uCi0gICAgICAgIC8vCi0KLSAgICAgICAgaW50IGRpZ2l0UmFuZ2VbXSA9IHsKLSAgICAgICAgICAgIDB4MDAzMCwgMHgwMDM5LCAweDA2NjAsIDB4MDY2OSwgMHgwNkYwLCAweDA2RjksIDB4MDk2NiwgMHgwOTZGLAotICAgICAgICAgICAgMHgwOUU2LCAweDA5RUYsIDB4MEE2NiwgMHgwQTZGLCAweDBBRTYsIDB4MEFFRiwgMHgwQjY2LCAweDBCNkYsCi0gICAgICAgICAgICAweDBCRTcsIDB4MEJFRiwgMHgwQzY2LCAweDBDNkYsIDB4MENFNiwgMHgwQ0VGLCAweDBENjYsIDB4MEQ2RiwKLSAgICAgICAgICAgIDB4MEU1MCwgMHgwRTU5LCAweDBFRDAsIDB4MEVEOSwgMHgwRjIwLCAweDBGMjksCi0gICAgICAgIH07Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gWzg5XSBFeHRlbmRlciA6Oj0gLi4uCi0gICAgICAgIC8vCi0KLSAgICAgICAgaW50IGV4dGVuZGVyUmFuZ2VbXSA9IHsKLSAgICAgICAgICAgIDB4MzAzMSwgMHgzMDM1LCAweDMwOUQsIDB4MzA5RSwgMHgzMEZDLCAweDMwRkUsCi0gICAgICAgIH07Ci0KLSAgICAgICAgaW50IGV4dGVuZGVyQ2hhcltdID0gewotICAgICAgICAgICAgMHgwMEI3LCAweDAyRDAsIDB4MDJEMSwgMHgwMzg3LCAweDA2NDAsIDB4MEU0NiwgMHgwRUM2LCAweDMwMDUsCi0gICAgICAgIH07Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gU3BlY2lhbENoYXIgOjo9ICc8JywgJyYnLCAnXG4nLCAnXHInLCAnXScKLSAgICAgICAgLy8KLQotICAgICAgICBpbnQgc3BlY2lhbENoYXJbXSA9IHsKLSAgICAgICAgICAgICc8JywgJyYnLCAnXG4nLCAnXHInLCAnXScsCi0gICAgICAgIH07Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gSW5pdGlhbGl6ZQotICAgICAgICAvLwotCi0gICAgICAgIC8vIHNldCB2YWxpZCBjaGFyYWN0ZXJzCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hhclJhbmdlLmxlbmd0aDsgaSArPSAyKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gY2hhclJhbmdlW2ldOyBqIDw9IGNoYXJSYW5nZVtpICsgMV07IGorKykgewotICAgICAgICAgICAgICAgIENIQVJTW2pdIHw9IE1BU0tfVkFMSUQgfCBNQVNLX0NPTlRFTlQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyByZW1vdmUgc3BlY2lhbCBjaGFyYWN0ZXJzCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3BlY2lhbENoYXIubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIENIQVJTW3NwZWNpYWxDaGFyW2ldXSA9IChieXRlKShDSEFSU1tzcGVjaWFsQ2hhcltpXV0gJiB+TUFTS19DT05URU5UKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHNldCBzcGFjZSBjaGFyYWN0ZXJzCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3BhY2VDaGFyLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBDSEFSU1tzcGFjZUNoYXJbaV1dIHw9IE1BU0tfU1BBQ0U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBzZXQgbmFtZSBzdGFydCBjaGFyYWN0ZXJzCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZVN0YXJ0Q2hhci5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgQ0hBUlNbbmFtZVN0YXJ0Q2hhcltpXV0gfD0gTUFTS19OQU1FX1NUQVJUIHwgTUFTS19OQU1FIHwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVNLX05DTkFNRV9TVEFSVCB8IE1BU0tfTkNOQU1FOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGV0dGVyUmFuZ2UubGVuZ3RoOyBpICs9IDIpIHsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSBsZXR0ZXJSYW5nZVtpXTsgaiA8PSBsZXR0ZXJSYW5nZVtpICsgMV07IGorKykgewotICAgICAgICAgICAgICAgIENIQVJTW2pdIHw9IE1BU0tfTkFNRV9TVEFSVCB8IE1BU0tfTkFNRSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFTS19OQ05BTUVfU1RBUlQgfCBNQVNLX05DTkFNRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldHRlckNoYXIubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIENIQVJTW2xldHRlckNoYXJbaV1dIHw9IE1BU0tfTkFNRV9TVEFSVCB8IE1BU0tfTkFNRSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVNLX05DTkFNRV9TVEFSVCB8IE1BU0tfTkNOQU1FOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gc2V0IG5hbWUgY2hhcmFjdGVycwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5hbWVDaGFyLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBDSEFSU1tuYW1lQ2hhcltpXV0gfD0gTUFTS19OQU1FIHwgTUFTS19OQ05BTUU7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaWdpdFJhbmdlLmxlbmd0aDsgaSArPSAyKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gZGlnaXRSYW5nZVtpXTsgaiA8PSBkaWdpdFJhbmdlW2kgKyAxXTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgQ0hBUlNbal0gfD0gTUFTS19OQU1FIHwgTUFTS19OQ05BTUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb21iaW5pbmdDaGFyUmFuZ2UubGVuZ3RoOyBpICs9IDIpIHsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSBjb21iaW5pbmdDaGFyUmFuZ2VbaV07IGogPD0gY29tYmluaW5nQ2hhclJhbmdlW2kgKyAxXTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgQ0hBUlNbal0gfD0gTUFTS19OQU1FIHwgTUFTS19OQ05BTUU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb21iaW5pbmdDaGFyQ2hhci5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgQ0hBUlNbY29tYmluaW5nQ2hhckNoYXJbaV1dIHw9IE1BU0tfTkFNRSB8IE1BU0tfTkNOQU1FOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXh0ZW5kZXJSYW5nZS5sZW5ndGg7IGkgKz0gMikgewotICAgICAgICAgICAgZm9yIChpbnQgaiA9IGV4dGVuZGVyUmFuZ2VbaV07IGogPD0gZXh0ZW5kZXJSYW5nZVtpICsgMV07IGorKykgewotICAgICAgICAgICAgICAgIENIQVJTW2pdIHw9IE1BU0tfTkFNRSB8IE1BU0tfTkNOQU1FOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXh0ZW5kZXJDaGFyLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBDSEFSU1tleHRlbmRlckNoYXJbaV1dIHw9IE1BU0tfTkFNRSB8IE1BU0tfTkNOQU1FOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gcmVtb3ZlICc6JyBmcm9tIGFsbG93YWJsZSBNQVNLX05DTkFNRV9TVEFSVCBhbmQgTUFTS19OQ05BTUUgY2hhcnMKLSAgICAgICAgQ0hBUlNbJzonXSAmPSB+KE1BU0tfTkNOQU1FX1NUQVJUIHwgTUFTS19OQ05BTUUpOwotCi0gICAgICAgIC8vIHNldCBQdWJpZCBjaGFyYWN0ZXJzCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHViaWRDaGFyLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBDSEFSU1twdWJpZENoYXJbaV1dIHw9IE1BU0tfUFVCSUQ7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwdWJpZFJhbmdlLmxlbmd0aDsgaSArPSAyKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gcHViaWRSYW5nZVtpXTsgaiA8PSBwdWJpZFJhbmdlW2kgKyAxXTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgQ0hBUlNbal0gfD0gTUFTS19QVUJJRDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgfSAvLyA8Y2xpbml0PigpCi0KLSAgICAvLwotICAgIC8vIFB1YmxpYyBzdGF0aWMgbWV0aG9kcwotICAgIC8vCi0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIgaXMgYSBzdXBwbGVtZW50YWwgY2hhcmFjdGVyLgotICAgICAqCi0gICAgICogQHBhcmFtIGMgVGhlIGNoYXJhY3RlciB0byBjaGVjay4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTdXBwbGVtZW50YWwoaW50IGMpIHsKLSAgICAgICAgcmV0dXJuIChjID49IDB4MTAwMDAgJiYgYyA8PSAweDEwRkZGRik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIHRoZSBzdXBwbGVtZW50YWwgY2hhcmFjdGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuCi0gICAgICogc3Vycm9nYXRlcy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBoIFRoZSBoaWdoIHN1cnJvZ2F0ZS4KLSAgICAgKiBAcGFyYW0gbCBUaGUgbG93IHN1cnJvZ2F0ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGludCBzdXBwbGVtZW50YWwoY2hhciBoLCBjaGFyIGwpIHsKLSAgICAgICAgcmV0dXJuIChoIC0gMHhEODAwKSAqIDB4NDAwICsgKGwgLSAweERDMDApICsgMHgxMDAwMDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cHBsZW1lbnRhbCBjaGFyYWN0ZXIKLSAgICAgKgotICAgICAqIEBwYXJhbSBjIFRoZSBzdXBwbGVtZW50YWwgY2hhcmFjdGVyIHRvICJzcGxpdCIuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBjaGFyIGhpZ2hTdXJyb2dhdGUoaW50IGMpIHsKLSAgICAgICAgcmV0dXJuIChjaGFyKSAoKChjIC0gMHgwMDAxMDAwMCkgPj4gMTApICsgMHhEODAwKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBsb3cgc3Vycm9nYXRlIG9mIGEgc3VwcGxlbWVudGFsIGNoYXJhY3RlcgotICAgICAqCi0gICAgICogQHBhcmFtIGMgVGhlIHN1cHBsZW1lbnRhbCBjaGFyYWN0ZXIgdG8gInNwbGl0Ii4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGNoYXIgbG93U3Vycm9nYXRlKGludCBjKSB7Ci0gICAgICAgIHJldHVybiAoY2hhcikgKCgoYyAtIDB4MDAwMTAwMDApICYgMHgzRkYpICsgMHhEQzAwKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIGNoYXJhY3RlciBpcyBhIGhpZ2ggc3Vycm9nYXRlCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYyBUaGUgY2hhcmFjdGVyIHRvIGNoZWNrLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0hpZ2hTdXJyb2dhdGUoaW50IGMpIHsKLSAgICAgICAgcmV0dXJuICgweEQ4MDAgPD0gYyAmJiBjIDw9IDB4REJGRik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBjaGFyYWN0ZXIgaXMgYSBsb3cgc3Vycm9nYXRlCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYyBUaGUgY2hhcmFjdGVyIHRvIGNoZWNrLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0xvd1N1cnJvZ2F0ZShpbnQgYykgewotICAgICAgICByZXR1cm4gKDB4REMwMCA8PSBjICYmIGMgPD0gMHhERkZGKTsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlciBpcyB2YWxpZC4gVGhpcyBtZXRob2QKLSAgICAgKiBhbHNvIGNoZWNrcyB0aGUgc3Vycm9nYXRlIGNoYXJhY3RlciByYW5nZSBmcm9tIDB4MTAwMDAgdG8gMHgxMEZGRkYuCi0gICAgICogPHA+Ci0gICAgICogSWYgdGhlIHByb2dyYW0gY2hvb3NlcyB0byBhcHBseSB0aGUgbWFzayBkaXJlY3RseSB0byB0aGUKLSAgICAgKiA8Y29kZT5DSEFSUzwvY29kZT4gYXJyYXksIHRoZW4gdGhleSBhcmUgcmVzcG9uc2libGUgZm9yIGNoZWNraW5nCi0gICAgICogdGhlIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIgcmFuZ2UuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYyBUaGUgY2hhcmFjdGVyIHRvIGNoZWNrLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkKGludCBjKSB7Ci0gICAgICAgIHJldHVybiAoYyA8IDB4MTAwMDAgJiYgKENIQVJTW2NdICYgTUFTS19WQUxJRCkgIT0gMCkgfHwKLSAgICAgICAgICAgICAgICgweDEwMDAwIDw9IGMgJiYgYyA8PSAweDEwRkZGRik7Ci0gICAgfSAvLyBpc1ZhbGlkKGludCk6Ym9vbGVhbgotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIGlzIGludmFsaWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYyBUaGUgY2hhcmFjdGVyIHRvIGNoZWNrLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0ludmFsaWQoaW50IGMpIHsKLSAgICAgICAgcmV0dXJuICFpc1ZhbGlkKGMpOwotICAgIH0gLy8gaXNJbnZhbGlkKGludCk6Ym9vbGVhbgotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIGNhbiBiZSBjb25zaWRlcmVkIGNvbnRlbnQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYyBUaGUgY2hhcmFjdGVyIHRvIGNoZWNrLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0NvbnRlbnQoaW50IGMpIHsKLSAgICAgICAgcmV0dXJuIChjIDwgMHgxMDAwMCAmJiAoQ0hBUlNbY10gJiBNQVNLX0NPTlRFTlQpICE9IDApIHx8Ci0gICAgICAgICAgICAgICAoMHgxMDAwMCA8PSBjICYmIGMgPD0gMHgxMEZGRkYpOwotICAgIH0gLy8gaXNDb250ZW50KGludCk6Ym9vbGVhbgotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIGNhbiBiZSBjb25zaWRlcmVkIG1hcmt1cC4KLSAgICAgKiBNYXJrdXAgY2hhcmFjdGVycyBpbmNsdWRlICcmbHQ7JywgJyZhbXA7JywgYW5kICclJy4KLSAgICAgKgotICAgICAqIEBwYXJhbSBjIFRoZSBjaGFyYWN0ZXIgdG8gY2hlY2suCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzTWFya3VwKGludCBjKSB7Ci0gICAgICAgIHJldHVybiBjID09ICc8JyB8fCBjID09ICcmJyB8fCBjID09ICclJzsKLSAgICB9IC8vIGlzTWFya3VwKGludCk6Ym9vbGVhbgotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIGlzIGEgc3BhY2UgY2hhcmFjdGVyCi0gICAgICogYXMgZGVmaW5lZCBieSBwcm9kdWN0aW9uIFszXSBpbiB0aGUgWE1MIDEuMCBzcGVjaWZpY2F0aW9uLgotICAgICAqCi0gICAgICogQHBhcmFtIGMgVGhlIGNoYXJhY3RlciB0byBjaGVjay4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTcGFjZShpbnQgYykgewotICAgICAgICByZXR1cm4gYyA8IDB4MTAwMDAgJiYgKENIQVJTW2NdICYgTUFTS19TUEFDRSkgIT0gMDsKLSAgICB9IC8vIGlzU3BhY2UoaW50KTpib29sZWFuCi0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIgaXMgYSBzcGFjZSBjaGFyYWN0ZXIKLSAgICAgKiBhcyBhbWRlbmRlZCBpbiB0aGUgWE1MIDEuMSBzcGVjaWZpY2F0aW9uLgotICAgICAqCi0gICAgICogQHBhcmFtIGMgVGhlIGNoYXJhY3RlciB0byBjaGVjay4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNYTUwxMVNwYWNlKGludCBjKSB7Ci0gICAgICAgIHJldHVybiAoYyA8IDB4MTAwMDAgJiYgKENIQVJTW2NdICYgTUFTS19TUEFDRSkgIT0gMCkgfHwKLSAgICAgICAgICAgIGMgPT0gMHg4NSB8fCBjID09IDB4MjAyODsKLSAgICB9IC8vIGlzWE1MMTFTcGFjZShpbnQpOmJvb2xlYW4KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlciBpcyBhIHZhbGlkIG5hbWUgc3RhcnQKLSAgICAgKiBjaGFyYWN0ZXIgYXMgZGVmaW5lZCBieSBwcm9kdWN0aW9uIFs1XSBpbiB0aGUgWE1MIDEuMAotICAgICAqIHNwZWNpZmljYXRpb24uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYyBUaGUgY2hhcmFjdGVyIHRvIGNoZWNrLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc05hbWVTdGFydChpbnQgYykgewotICAgICAgICByZXR1cm4gYyA8IDB4MTAwMDAgJiYgKENIQVJTW2NdICYgTUFTS19OQU1FX1NUQVJUKSAhPSAwOwotICAgIH0gLy8gaXNOYW1lU3RhcnQoaW50KTpib29sZWFuCi0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIgaXMgYSB2YWxpZCBuYW1lCi0gICAgICogY2hhcmFjdGVyIGFzIGRlZmluZWQgYnkgcHJvZHVjdGlvbiBbNF0gaW4gdGhlIFhNTCAxLjAKLSAgICAgKiBzcGVjaWZpY2F0aW9uLgotICAgICAqCi0gICAgICogQHBhcmFtIGMgVGhlIGNoYXJhY3RlciB0byBjaGVjay4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNOYW1lKGludCBjKSB7Ci0gICAgICAgIHJldHVybiBjIDwgMHgxMDAwMCAmJiAoQ0hBUlNbY10gJiBNQVNLX05BTUUpICE9IDA7Ci0gICAgfSAvLyBpc05hbWUoaW50KTpib29sZWFuCi0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIgaXMgYSB2YWxpZCBOQ05hbWUgc3RhcnQKLSAgICAgKiBjaGFyYWN0ZXIgYXMgZGVmaW5lZCBieSBwcm9kdWN0aW9uIFs0XSBpbiBOYW1lc3BhY2VzIGluIFhNTAotICAgICAqIHJlY29tbWVuZGF0aW9uLgotICAgICAqCi0gICAgICogQHBhcmFtIGMgVGhlIGNoYXJhY3RlciB0byBjaGVjay4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNOQ05hbWVTdGFydChpbnQgYykgewotICAgICAgICByZXR1cm4gYyA8IDB4MTAwMDAgJiYgKENIQVJTW2NdICYgTUFTS19OQ05BTUVfU1RBUlQpICE9IDA7Ci0gICAgfSAvLyBpc05DTmFtZVN0YXJ0KGludCk6Ym9vbGVhbgotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIGlzIGEgdmFsaWQgTkNOYW1lCi0gICAgICogY2hhcmFjdGVyIGFzIGRlZmluZWQgYnkgcHJvZHVjdGlvbiBbNV0gaW4gTmFtZXNwYWNlcyBpbiBYTUwKLSAgICAgKiByZWNvbW1lbmRhdGlvbi4KLSAgICAgKgotICAgICAqIEBwYXJhbSBjIFRoZSBjaGFyYWN0ZXIgdG8gY2hlY2suCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzTkNOYW1lKGludCBjKSB7Ci0gICAgICAgIHJldHVybiBjIDwgMHgxMDAwMCAmJiAoQ0hBUlNbY10gJiBNQVNLX05DTkFNRSkgIT0gMDsKLSAgICB9IC8vIGlzTkNOYW1lKGludCk6Ym9vbGVhbgotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIGlzIGEgdmFsaWQgUHViaWQKLSAgICAgKiBjaGFyYWN0ZXIgYXMgZGVmaW5lZCBieSBwcm9kdWN0aW9uIFsxM10gaW4gdGhlIFhNTCAxLjAKLSAgICAgKiBzcGVjaWZpY2F0aW9uLgotICAgICAqCi0gICAgICogQHBhcmFtIGMgVGhlIGNoYXJhY3RlciB0byBjaGVjay4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNQdWJpZChpbnQgYykgewotICAgICAgICByZXR1cm4gYyA8IDB4MTAwMDAgJiYgKENIQVJTW2NdICYgTUFTS19QVUJJRCkgIT0gMDsKLSAgICB9IC8vIGlzUHViaWQoaW50KTpib29sZWFuCi0KLSAgICAvKgotICAgICAqIFs1XSBOYW1lIDo6PSAoTGV0dGVyIHwgJ18nIHwgJzonKSAoTmFtZUNoYXIpKgotICAgICAqLwotICAgIC8qKgotICAgICAqIENoZWNrIHRvIHNlZSBpZiBhIHN0cmluZyBpcyBhIHZhbGlkIE5hbWUgYWNjb3JkaW5nIHRvIFs1XQotICAgICAqIGluIHRoZSBYTUwgMS4wIFJlY29tbWVuZGF0aW9uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbmFtZSBzdHJpbmcgdG8gY2hlY2sKLSAgICAgKiBAcmV0dXJuIHRydWUgaWYgbmFtZSBpcyBhIHZhbGlkIE5hbWUKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNWYWxpZE5hbWUoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgaWYgKG5hbWUubGVuZ3RoKCkgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY2hhciBjaCA9IG5hbWUuY2hhckF0KDApOwotICAgICAgICBpZiggaXNOYW1lU3RhcnQoY2gpID09IGZhbHNlKQotICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbmFtZS5sZW5ndGgoKTsgaSsrICkgewotICAgICAgICAgICBjaCA9IG5hbWUuY2hhckF0KGkpOwotICAgICAgICAgICBpZiggaXNOYW1lKCBjaCApID09IGZhbHNlICl7Ci0gICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gLy8gaXNWYWxpZE5hbWUoU3RyaW5nKTpib29sZWFuCi0gICAgCi0KLSAgICAvKgotICAgICAqIGZyb20gdGhlIG5hbWVzcGFjZSByZWMKLSAgICAgKiBbNF0gTkNOYW1lIDo6PSAoTGV0dGVyIHwgJ18nKSAoTkNOYW1lQ2hhcikqCi0gICAgICovCi0gICAgLyoqCi0gICAgICogQ2hlY2sgdG8gc2VlIGlmIGEgc3RyaW5nIGlzIGEgdmFsaWQgTkNOYW1lIGFjY29yZGluZyB0byBbNF0KLSAgICAgKiBmcm9tIHRoZSBYTUwgTmFtZXNwYWNlcyAxLjAgUmVjb21tZW5kYXRpb24KLSAgICAgKgotICAgICAqIEBwYXJhbSBuYW1lIHN0cmluZyB0byBjaGVjawotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBuYW1lIGlzIGEgdmFsaWQgTkNOYW1lCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzVmFsaWROQ05hbWUoU3RyaW5nIG5jTmFtZSkgewotICAgICAgICBpZiAobmNOYW1lLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNoYXIgY2ggPSBuY05hbWUuY2hhckF0KDApOwotICAgICAgICBpZiggaXNOQ05hbWVTdGFydChjaCkgPT0gZmFsc2UpCi0gICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBuY05hbWUubGVuZ3RoKCk7IGkrKyApIHsKLSAgICAgICAgICAgY2ggPSBuY05hbWUuY2hhckF0KGkpOwotICAgICAgICAgICBpZiggaXNOQ05hbWUoIGNoICkgPT0gZmFsc2UgKXsKLSAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSAvLyBpc1ZhbGlkTkNOYW1lKFN0cmluZyk6Ym9vbGVhbgotCi0gICAgLyoKLSAgICAgKiBbN10gTm10b2tlbiA6Oj0gKE5hbWVDaGFyKSsKLSAgICAgKi8KLSAgICAvKioKLSAgICAgKiBDaGVjayB0byBzZWUgaWYgYSBzdHJpbmcgaXMgYSB2YWxpZCBObXRva2VuIGFjY29yZGluZyB0byBbN10KLSAgICAgKiBpbiB0aGUgWE1MIDEuMCBSZWNvbW1lbmRhdGlvbgotICAgICAqCi0gICAgICogQHBhcmFtIG5tdG9rZW4gc3RyaW5nIHRvIGNoZWNrCi0gICAgICogQHJldHVybiB0cnVlIGlmIG5tdG9rZW4gaXMgYSB2YWxpZCBObXRva2VuIAotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkTm10b2tlbihTdHJpbmcgbm10b2tlbikgewotICAgICAgICBpZiAobm10b2tlbi5sZW5ndGgoKSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5tdG9rZW4ubGVuZ3RoKCk7IGkrKyApIHsKLSAgICAgICAgICAgY2hhciBjaCA9IG5tdG9rZW4uY2hhckF0KGkpOwotICAgICAgICAgICBpZiggICEgaXNOYW1lKCBjaCApICl7Ci0gICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gLy8gaXNWYWxpZE5hbWUoU3RyaW5nKTpib29sZWFuCi0KLQotCi0KLQotICAgIC8vIGVuY29kaW5ncwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmNvZGluZyBuYW1lIGlzIGEgdmFsaWQgSUFOQSBlbmNvZGluZy4KLSAgICAgKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCB2ZXJpZnkgdGhhdCB0aGVyZSBpcyBhIGRlY29kZXIgYXZhaWxhYmxlCi0gICAgICogZm9yIHRoaXMgZW5jb2RpbmcsIG9ubHkgdGhhdCB0aGUgY2hhcmFjdGVycyBhcmUgdmFsaWQgZm9yIGFuCi0gICAgICogSUFOQSBlbmNvZGluZyBuYW1lLgotICAgICAqCi0gICAgICogQHBhcmFtIGlhbmFFbmNvZGluZyBUaGUgSUFOQSBlbmNvZGluZyBuYW1lLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkSUFOQUVuY29kaW5nKFN0cmluZyBpYW5hRW5jb2RpbmcpIHsKLSAgICAgICAgaWYgKGlhbmFFbmNvZGluZyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpbnQgbGVuZ3RoID0gaWFuYUVuY29kaW5nLmxlbmd0aCgpOwotICAgICAgICAgICAgaWYgKGxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgICAgICBjaGFyIGMgPSBpYW5hRW5jb2RpbmcuY2hhckF0KDApOwotICAgICAgICAgICAgICAgIGlmICgoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8IChjID49ICdhJyAmJiBjIDw9ICd6JykpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGlhbmFFbmNvZGluZy5jaGFyQXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGMgPCAnQScgfHwgYyA+ICdaJykgJiYgKGMgPCAnYScgfHwgYyA+ICd6JykgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYyA8ICcwJyB8fCBjID4gJzknKSAmJiBjICE9ICcuJyAmJiBjICE9ICdfJyAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgIT0gJy0nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSAvLyBpc1ZhbGlkSUFOQUVuY29kaW5nKFN0cmluZyk6Ym9vbGVhbgotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmNvZGluZyBuYW1lIGlzIGEgdmFsaWQgSmF2YSBlbmNvZGluZy4KLSAgICAgKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCB2ZXJpZnkgdGhhdCB0aGVyZSBpcyBhIGRlY29kZXIgYXZhaWxhYmxlCi0gICAgICogZm9yIHRoaXMgZW5jb2RpbmcsIG9ubHkgdGhhdCB0aGUgY2hhcmFjdGVycyBhcmUgdmFsaWQgZm9yIGFuCi0gICAgICogSmF2YSBlbmNvZGluZyBuYW1lLgotICAgICAqCi0gICAgICogQHBhcmFtIGphdmFFbmNvZGluZyBUaGUgSmF2YSBlbmNvZGluZyBuYW1lLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZhbGlkSmF2YUVuY29kaW5nKFN0cmluZyBqYXZhRW5jb2RpbmcpIHsKLSAgICAgICAgaWYgKGphdmFFbmNvZGluZyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpbnQgbGVuZ3RoID0gamF2YUVuY29kaW5nLmxlbmd0aCgpOwotICAgICAgICAgICAgaWYgKGxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgYyA9IGphdmFFbmNvZGluZy5jaGFyQXQoaSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoYyA8ICdBJyB8fCBjID4gJ1onKSAmJiAoYyA8ICdhJyB8fCBjID4gJ3onKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgKGMgPCAnMCcgfHwgYyA+ICc5JykgJiYgYyAhPSAnLicgJiYgYyAhPSAnXycgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIGMgIT0gJy0nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gLy8gaXNWYWxpZElBTkFFbmNvZGluZyhTdHJpbmcpOmJvb2xlYW4KLQotfSAvLyBjbGFzcyBYTUxDaGFyCmRpZmYgLS1naXQgYS92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vWE1MTmFtZUhlbHBlci5qYXZhIGIvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL1hNTE5hbWVIZWxwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhjNDk3Ni4uMDAwMDAwMAotLS0gYS92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vWE1MTmFtZUhlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbjsKLQotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MTmFtZTsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFhNTE5hbWVIZWxwZXIKLXsKLSAgICBwdWJsaWMgc3RhdGljIFFOYW1lIGdldFFOYW1lKFhNTE5hbWUgeG1sTmFtZSkKLSAgICB7Ci0gICAgICAgIGlmICh4bWxOYW1lID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBRTmFtZUhlbHBlci5mb3JMTlMoIHhtbE5hbWUuZ2V0TG9jYWxOYW1lKCksIHhtbE5hbWUuZ2V0TmFtZXNwYWNlVXJpKCkgKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBYTUxOYW1lIGZvckxOUyhTdHJpbmcgbG9jYWxuYW1lLCBTdHJpbmcgdXJpKQotICAgIHsKLSAgICAgICAgaWYgKHVyaSA9PSBudWxsKQotICAgICAgICAgICAgdXJpID0gIiI7Ci0gICAgICAgIHJldHVybiBuZXcgWG1sTmFtZUltcGwodXJpLCBsb2NhbG5hbWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgWE1MTmFtZSBmb3JMTihTdHJpbmcgbG9jYWxuYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBYbWxOYW1lSW1wbCgiIiwgbG9jYWxuYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFhNTE5hbWUgZm9yUHJldHR5KFN0cmluZyBwcmV0dHksIGludCBvZmZzZXQpCi0gICAgewotICAgICAgICBpbnQgYXQgPSBwcmV0dHkuaW5kZXhPZignQCcsIG9mZnNldCk7Ci0gICAgICAgIGlmIChhdCA8IDApCi0gICAgICAgICAgICByZXR1cm4gbmV3IFhtbE5hbWVJbXBsKCIiLCBwcmV0dHkuc3Vic3RyaW5nKG9mZnNldCkpOwotICAgICAgICByZXR1cm4gbmV3IFhtbE5hbWVJbXBsKHByZXR0eS5zdWJzdHJpbmcoYXQgKyAxKSwgcHJldHR5LnN1YnN0cmluZyhvZmZzZXQsIGF0KSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgcHJldHR5KFhNTE5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIGlmIChuYW1lID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gIm51bGwiOwotCi0gICAgICAgIGlmIChuYW1lLmdldE5hbWVzcGFjZVVyaSgpID09IG51bGwgfHwgbmFtZS5nZXROYW1lc3BhY2VVcmkoKS5sZW5ndGgoKSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIG5hbWUuZ2V0TG9jYWxOYW1lKCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbmFtZS5nZXRMb2NhbE5hbWUoKSArICJAIiArIG5hbWUuZ2V0TmFtZXNwYWNlVXJpKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2hhcltdIGhleGRpZ2l0cyA9IG5ldyBjaGFyW10KLSAgICAgICAgeycwJywnMScsJzInLCczJywnNCcsJzUnLCc2JywnNycsJzgnLCc5JywnQScsJ0InLCdDJywnRCcsJ0UnLCdGJ307Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzU2FmZShpbnQgYykKLSAgICB7Ci0gICAgICAgIGlmIChjID49ICdhJyAmJiBjIDw9ICd6JykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoYyA+PSAnQScgJiYgYyA8PSAnWicpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBoZXhzYWZlKFN0cmluZyBzKQotICAgIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLmxlbmd0aCgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIgY2ggPSBzLmNoYXJBdChpKTsKLSAgICAgICAgICAgIGlmIChpc1NhZmUoY2gpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY2gpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJ5dGVbXSB1dGY4ID0gbnVsbDsKLSAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHV0ZjggPSBzLnN1YnN0cmluZyhpLCBpICsgMSkuZ2V0Qnl0ZXMoIlVURi04Iik7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB1dGY4Lmxlbmd0aDsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnXycpOwotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGhleGRpZ2l0c1sodXRmOFtqXSA+PiA0KSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGhleGRpZ2l0c1t1dGY4W2pdICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2goVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiB1ZWUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBzaG91bGQgbmV2ZXIgaGFwcGVuIC0gVVRGLTggaXMgYWx3YXlzIHN1cHBvcnRlZAotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJfQkFEX1VURjhfQ0hBUiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgaGV4c2FmZWRpcihYTUxOYW1lIG5hbWUpCi0gICAgewotICAgICAgICBpZiAobmFtZS5nZXROYW1lc3BhY2VVcmkoKSA9PSBudWxsIHx8IG5hbWUuZ2V0TmFtZXNwYWNlVXJpKCkubGVuZ3RoKCkgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiAiX25vbnMvIiArIGhleHNhZmUobmFtZS5nZXRMb2NhbE5hbWUoKSk7Ci0gICAgICAgIHJldHVybiBoZXhzYWZlKG5hbWUuZ2V0TmFtZXNwYWNlVXJpKCkpICsgIi8iICsgaGV4c2FmZShuYW1lLmdldExvY2FsTmFtZSgpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vWFBhdGguamF2YSBiL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9YUGF0aC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGY4ZjFmLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9YUGF0aC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA0MSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb247Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXJyb3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5YTUxDaGFyOwotCi1wdWJsaWMgY2xhc3MgWFBhdGgKLXsKLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFhQYXRoQ29tcGlsZUV4Y2VwdGlvbiBleHRlbmRzIFhtbEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgWFBhdGhDb21waWxlRXhjZXB0aW9uICggWG1sRXJyb3IgZXJyICkKLSAgICAgICAgewotICAgICAgICAgICAgc3VwZXIoIGVyci50b1N0cmluZygpLCBudWxsLCBlcnIgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vCi0gICAgLy8KLSAgICAvLwotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBFeGVjdXRpb25Db250ZXh0Ci0gICAgewotICAgICAgICBwdWJsaWMgRXhlY3V0aW9uQ29udGV4dCAoICkKLSAgICAgICAgewotICAgICAgICAgICAgX3N0YWNrID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSElUICAgICA9IDB4MTsKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREVTQ0VORCA9IDB4MjsKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVRUUlMgICA9IDB4NDsKLSAgICAgICAgCi0gICAgICAgIHB1YmxpYyBmaW5hbCB2b2lkIGluaXQgKCBYUGF0aCB4cGF0aCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfeHBhdGggIT0geHBhdGgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX3hwYXRoID0geHBhdGg7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgX3BhdGhzID0gbmV3IFBhdGhDb250ZXh0IFsgeHBhdGguX3NlbGVjdG9yLl9wYXRocy5sZW5ndGggXTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgX3BhdGhzLmxlbmd0aCA7IGkrKyApCi0gICAgICAgICAgICAgICAgICAgIF9wYXRoc1sgaSBdID0gbmV3IFBhdGhDb250ZXh0KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIF9zdGFjay5jbGVhcigpOwotCi0gICAgICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgX3BhdGhzLmxlbmd0aCA7IGkrKyApCi0gICAgICAgICAgICAgICAgX3BhdGhzWyBpIF0uaW5pdCggeHBhdGguX3NlbGVjdG9yLl9wYXRoc1sgaSBdICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgZmluYWwgaW50IHN0YXJ0ICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgcmVzdWx0ID0gMDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IF9wYXRocy5sZW5ndGggOyBpKysgKQotICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBfcGF0aHNbIGkgXS5zdGFydCgpOwotCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwdWJsaWMgZmluYWwgaW50IGVsZW1lbnQgKCBRTmFtZSBuYW1lICkKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0IG5hbWUgIT0gbnVsbDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgX3N0YWNrLmFkZCggbmFtZSApOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnQgcmVzdWx0ID0gMDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IF9wYXRocy5sZW5ndGggOyBpKysgKQotICAgICAgICAgICAgICAgIHJlc3VsdCB8PSBfcGF0aHNbIGkgXS5lbGVtZW50KCBuYW1lICk7Ci0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGF0dHIgKCBRTmFtZSBuYW1lICkKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbGVhbiBoaXQgPSBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IF9wYXRocy5sZW5ndGggOyBpKysgKQotICAgICAgICAgICAgICAgIGhpdCA9IGhpdCB8IF9wYXRoc1sgaSBdLmF0dHIoIG5hbWUgKTsKLQotICAgICAgICAgICAgcmV0dXJuIGhpdDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBmaW5hbCB2b2lkIGVuZCAoICkKLSAgICAgICAgewotICAgICAgICAgICAgX3N0YWNrLnJlbW92ZSggX3N0YWNrLnNpemUoKSAtIDEgKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IF9wYXRocy5sZW5ndGggOyBpKysgKQotICAgICAgICAgICAgICAgIF9wYXRoc1sgaSBdLmVuZCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIGZpbmFsIGNsYXNzIFBhdGhDb250ZXh0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFBhdGhDb250ZXh0ICggKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9wcmV2ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICB2b2lkIGluaXQgKCBTdGVwIHN0ZXBzICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfY3VyciA9IHN0ZXBzOwotICAgICAgICAgICAgICAgIF9wcmV2LmNsZWFyKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHByaXZhdGUgUU5hbWUgdG9wICggaW50IGkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiAoUU5hbWUpIEV4ZWN1dGlvbkNvbnRleHQudGhpcy5fc3RhY2suZ2V0KCBfc3RhY2suc2l6ZSgpIC0gMSAtIGkgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIGJhY2t0cmFjayAoICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQgX2N1cnIgIT0gbnVsbDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoX2N1cnIuX2hhc0JhY2t0cmFjaykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIF9jdXJyID0gX2N1cnIuX2JhY2t0cmFjazsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGFzc2VydCAhX2N1cnIuX2RlZXA7Ci0KLSAgICAgICAgICAgICAgICBfY3VyciA9IF9jdXJyLl9wcmV2OwotCi0gICAgICAgICAgICAgICAgc2VhcmNoOiBmb3IgKCA7ICFfY3Vyci5fZGVlcCA7IF9jdXJyID0gX2N1cnIuX3ByZXYgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHQgPSAwOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgZm9yICggU3RlcCBzID0gX2N1cnIgOyAhcy5fZGVlcCA7IHMgPSBzLl9wcmV2ICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzLm1hdGNoKCB0b3AoIHQrKyApKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBzZWFyY2g7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGludCBzdGFydCAoICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQgX2N1cnIgIT0gbnVsbDsKLSAgICAgICAgICAgICAgICBhc3NlcnQgX2N1cnIuX3ByZXYgPT0gbnVsbDsKLQotICAgICAgICAgICAgICAgIGlmIChfY3Vyci5fbmFtZSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2N1cnIuX2ZsYWdzOwotCi0gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHN0ZXBzIGNvbnNpc3Qgb24gb25seSBhIHRlcm1pbmF0b3IsIHRoZW4gdGhlIHBhdGggY2FuCi0gICAgICAgICAgICAgICAgLy8gb25seSBiZSAnLicuICBJbiB0aGlzIGNhc2UsIHdlIGdldCBhIGhpdCwgYnV0IHRoZXJlIGlzCi0gICAgICAgICAgICAgICAgLy8gbm90aGluZyBlbHNlIHRvIG1hdGNoLiAgTm8gbmVlZCB0byBiYWNrdHJhY2suCi0KLSAgICAgICAgICAgICAgICBfY3VyciA9IG51bGw7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gSElUOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnQgZWxlbWVudCAoIFFOYW1lIG5hbWUgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9wcmV2LmFkZCggX2N1cnIgKTsKLQotICAgICAgICAgICAgICAgIGlmIChfY3VyciA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICAgICAgICAgIGFzc2VydCBfY3Vyci5fbmFtZSAhPSBudWxsOwotCi0gICAgICAgICAgICAgICAgaWYgKCFfY3Vyci5fYXR0ciAmJiBfY3Vyci5tYXRjaCggbmFtZSApKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChfY3VyciA9IF9jdXJyLl9uZXh0KS5fbmFtZSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jdXJyLl9mbGFnczsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGJhY2t0cmFjaygpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jdXJyID09IG51bGwgPyBISVQgOiBISVQgfCBfY3Vyci5fZmxhZ3M7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZm9yICggOyA7ICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGJhY2t0cmFjaygpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChfY3VyciA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKF9jdXJyLm1hdGNoKCBuYW1lICkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIF9jdXJyID0gX2N1cnIuX25leHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChfY3Vyci5fZGVlcCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXR1cm4gX2N1cnIuX2ZsYWdzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBib29sZWFuIGF0dHIgKCBRTmFtZSBuYW1lICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gX2N1cnIgIT0gbnVsbCAmJiBfY3Vyci5fYXR0ciAmJiBfY3Vyci5tYXRjaCggbmFtZSApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2b2lkIGVuZCAoICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfY3VyciA9IChTdGVwKSBfcHJldi5yZW1vdmUoIF9wcmV2LnNpemUoKSAtIDEgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgcHJpdmF0ZSBTdGVwIF9jdXJyOwotICAgICAgICAgICAgcHJpdmF0ZSBMaXN0IF9wcmV2OwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBYUGF0aCAgICAgICAgIF94cGF0aDsKLSAgICAgICAgcHJpdmF0ZSBBcnJheUxpc3QgICAgIF9zdGFjazsKLSAgICAgICAgcHJpdmF0ZSBQYXRoQ29udGV4dFtdIF9wYXRoczsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vCi0gICAgLy8KLQotICAgIHB1YmxpYyBzdGF0aWMgWFBhdGggY29tcGlsZVhQYXRoICggU3RyaW5nIHhwYXRoICkKLSAgICAgICAgdGhyb3dzIFhQYXRoQ29tcGlsZUV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbXBpbGVYUGF0aCggeHBhdGgsICIkdGhpcyIsIG51bGwgKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBYUGF0aCBjb21waWxlWFBhdGggKCBTdHJpbmcgeHBhdGgsIFN0cmluZyBjdXJyZW50Tm9kZVZhciApCi0gICAgICAgIHRocm93cyBYUGF0aENvbXBpbGVFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHJldHVybiBjb21waWxlWFBhdGgoIHhwYXRoLCBjdXJyZW50Tm9kZVZhciwgbnVsbCApOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgWFBhdGggY29tcGlsZVhQYXRoICggU3RyaW5nIHhwYXRoLCBNYXAgbmFtZXNwYWNlcyApCi0gICAgICAgICAgICB0aHJvd3MgWFBhdGhDb21waWxlRXhjZXB0aW9uCi0gICAgewotICAgICAgICByZXR1cm4gY29tcGlsZVhQYXRoKCB4cGF0aCwgIiR0aGlzIiwgbmFtZXNwYWNlcyApOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIFhQYXRoIGNvbXBpbGVYUGF0aCAoCi0gICAgICAgIFN0cmluZyB4cGF0aCwgU3RyaW5nIGN1cnJlbnROb2RlVmFyLCBNYXAgbmFtZXNwYWNlcyApCi0gICAgICAgICAgICB0aHJvd3MgWFBhdGhDb21waWxlRXhjZXB0aW9uCi0gICAgewotICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIG5ldyBDb21waWxhdGlvbkNvbnRleHQoIG5hbWVzcGFjZXMsIGN1cnJlbnROb2RlVmFyICkuCi0gICAgICAgICAgICAgICAgY29tcGlsZSggeHBhdGggKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBDb21waWxhdGlvbkNvbnRleHQKLSAgICB7Ci0gICAgICAgIENvbXBpbGF0aW9uQ29udGV4dCAoIE1hcCBuYW1lc3BhY2VzLCBTdHJpbmcgY3VycmVudE5vZGVWYXIgKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQKLSAgICAgICAgICAgICAgICBfY3VycmVudE5vZGVWYXIgPT0gbnVsbCB8fAotICAgICAgICAgICAgICAgICAgICBfY3VycmVudE5vZGVWYXIuc3RhcnRzV2l0aCggIiQiICk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZVZhciA9PSBudWxsKQotICAgICAgICAgICAgICAgIF9jdXJyZW50Tm9kZVZhciA9ICIkdGhpcyI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgX2N1cnJlbnROb2RlVmFyID0gY3VycmVudE5vZGVWYXI7Ci0KLSAgICAgICAgICAgIF9uYW1lc3BhY2VzID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgX2V4dGVybmFsTmFtZXNwYWNlcyA9Ci0gICAgICAgICAgICAgICAgbmFtZXNwYWNlcyA9PSBudWxsID8gbmV3IEhhc2hNYXAoKSA6IG5hbWVzcGFjZXM7Ci0gICAgICAgIH0KLQotICAgICAgICBYUGF0aCBjb21waWxlICggU3RyaW5nIGV4cHIgKSB0aHJvd3MgWFBhdGhDb21waWxlRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9vZmZzZXQgPSAwOwotICAgICAgICAgICAgX2xpbmUgPSAxOwotICAgICAgICAgICAgX2NvbHVtbiA9IDE7Ci0gICAgICAgICAgICBfZXhwciA9IGV4cHI7Ci0KLSAgICAgICAgICAgIHJldHVybiB0b2tlbml6ZVhQYXRoKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGludCBjdXJyQ2hhciAoICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGN1cnJDaGFyKCAwICk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGludCBjdXJyQ2hhciAoIGludCBvZmZzZXQgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgICAgICBfb2Zmc2V0ICsgb2Zmc2V0ID49IF9leHByLmxlbmd0aCgpCi0gICAgICAgICAgICAgICAgICAgID8gLTEKLSAgICAgICAgICAgICAgICAgICAgOiBfZXhwci5jaGFyQXQoIF9vZmZzZXQgKyBvZmZzZXQgKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBhZHZhbmNlICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX29mZnNldCA8IF9leHByLmxlbmd0aCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNoYXIgY2ggPSBfZXhwci5jaGFyQXQoIF9vZmZzZXQgKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBfb2Zmc2V0Kys7Ci0gICAgICAgICAgICAgICAgX2NvbHVtbisrOwotCi0gICAgICAgICAgICAgICAgaWYgKGNoID09ICdccicgfHwgY2ggPT0gJ1xuJykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIF9saW5lKys7Ci0gICAgICAgICAgICAgICAgICAgIF9jb2x1bW4gPSAxOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChfb2Zmc2V0ICsgMSA8IF9leHByLmxlbmd0aCgpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyIG5leHRDaCA9IF9leHByLmNoYXJBdCggX29mZnNldCArIDEgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChuZXh0Q2ggPT0gJ1xyJyB8fCBuZXh0Q2ggPT0gJ1xuJykgJiYgY2ggIT0gbmV4dENoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9vZmZzZXQrKzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgYWR2YW5jZSAoIGludCBjb3VudCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFzc2VydCBjb3VudCA+PSAwOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB3aGlsZSAoIGNvdW50LS0gPiAwICkKLSAgICAgICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgYm9vbGVhbiBpc1doaXRlc3BhY2UgKCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpc1doaXRlc3BhY2UoIDAgKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYm9vbGVhbiBpc1doaXRlc3BhY2UgKCBpbnQgb2Zmc2V0ICkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGNoID0gY3VyckNoYXIoIG9mZnNldCApOwotICAgICAgICAgICAgcmV0dXJuIGNoID09ICcgJyB8fCBjaCA9PSAnXHQnIHx8IGNoID09ICdcbicgfHwgY2ggPT0gJ1xyJzsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2xlYW4gaXNOQ05hbWVTdGFydCAoICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgY3VyckNoYXIoKSA9PSAtMQotICAgICAgICAgICAgICAgICAgICA/IGZhbHNlIDoKLSAgICAgICAgICAgICAgICAgICAgWE1MQ2hhci5pc05DTmFtZVN0YXJ0KCBjdXJyQ2hhcigpICk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGJvb2xlYW4gaXNOQ05hbWUgKCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgIGN1cnJDaGFyKCkgPT0gLTEKLSAgICAgICAgICAgICAgICAgICAgPyBmYWxzZSA6Ci0gICAgICAgICAgICAgICAgICAgIFhNTENoYXIuaXNOQ05hbWUoIGN1cnJDaGFyKCkgKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYm9vbGVhbiBzdGFydHNXaXRoICggU3RyaW5nIHMgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc3RhcnRzV2l0aCggcywgMCApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBib29sZWFuIHN0YXJ0c1dpdGggKCBTdHJpbmcgcywgaW50IG9mZnNldCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfb2Zmc2V0ICsgb2Zmc2V0ID49IF9leHByLmxlbmd0aCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIF9leHByLnN0YXJ0c1dpdGgoIHMsIF9vZmZzZXQgKyBvZmZzZXQgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgWFBhdGhDb21waWxlRXhjZXB0aW9uIG5ld0Vycm9yICggU3RyaW5nIG1zZyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFhtbEVycm9yIGVyciA9Ci0gICAgICAgICAgICAgICAgWG1sRXJyb3IuZm9yTG9jYXRpb24oCi0gICAgICAgICAgICAgICAgICAgIG1zZywgWG1sRXJyb3IuU0VWRVJJVFlfRVJST1IsIG51bGwsCi0gICAgICAgICAgICAgICAgICAgIF9saW5lLCBfY29sdW1uLCBfb2Zmc2V0ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gbmV3IFhQYXRoQ29tcGlsZUV4Y2VwdGlvbiggZXJyICk7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgbG9va3VwUHJlZml4ICggU3RyaW5nIHByZWZpeCApIHRocm93cyBYUGF0aENvbXBpbGVFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgICAgaWYgKF9uYW1lc3BhY2VzLmNvbnRhaW5zS2V5KCBwcmVmaXggKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gKFN0cmluZykgX25hbWVzcGFjZXMuZ2V0KCBwcmVmaXggKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKF9leHRlcm5hbE5hbWVzcGFjZXMuY29udGFpbnNLZXkoIHByZWZpeCApKQotICAgICAgICAgICAgICAgIHJldHVybiAoU3RyaW5nKSBfZXh0ZXJuYWxOYW1lc3BhY2VzLmdldCggcHJlZml4ICk7Ci0KLSAgICAgICAgICAgIGlmIChwcmVmaXguZXF1YWxzKCAieG1sIiApKQotICAgICAgICAgICAgICAgICAgcmV0dXJuICJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAocHJlZml4LmVxdWFscyggInhzIiApKQotICAgICAgICAgICAgICAgICAgcmV0dXJuICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChwcmVmaXguZXF1YWxzKCAieHNpIiApKQotICAgICAgICAgICAgICAgICAgcmV0dXJuICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChwcmVmaXguZXF1YWxzKCAiZm4iICkpCi0gICAgICAgICAgICAgICAgICByZXR1cm4gImh0dHA6Ly93d3cudzMub3JnLzIwMDIvMTEveHF1ZXJ5LWZ1bmN0aW9ucyI7Ci0KLSAgICAgICAgICAgIHRocm93IG5ld0Vycm9yKCAiVW5kZWZpbmVkIHByZWZpeDogIiArIHByZWZpeCApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIHBhcnNlV2hpdGVzcGFjZSAoICkgdGhyb3dzIFhQYXRoQ29tcGlsZUV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBib29sZWFuIHNhd1NwYWNlID0gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHdoaWxlICggaXNXaGl0ZXNwYWNlKCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKLSAgICAgICAgICAgICAgICBzYXdTcGFjZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBzYXdTcGFjZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8KLSAgICAgICAgLy8gVG9rZW5pemluZyB3aWxsIGNvbnN1bWUgd2hpdGVzcGFjZSBmb2xsb3dlZCBieSB0aGUgdG9rZW5zLCBzZXBhcmF0ZWQKLSAgICAgICAgLy8gYnkgd2hpdGVzcGFjZS4gIFRoZSB3aGl0ZXNwYWNlIGZvbGxvd2luZyB0aGUgbGFzdCB0b2tlbiBpcyBub3QKLSAgICAgICAgLy8gY29uc3VtZWQuCi0gICAgICAgIC8vCi0gICAgICAgIAotICAgICAgICBwcml2YXRlIGJvb2xlYW4gdG9rZW5pemUgKCBTdHJpbmcgcyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFzc2VydCBzLmxlbmd0aCgpID4gMDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaW50IG9mZnNldCA9IDA7Ci0KLSAgICAgICAgICAgIHdoaWxlICggaXNXaGl0ZXNwYWNlKCBvZmZzZXQgKSApCi0gICAgICAgICAgICAgICAgb2Zmc2V0Kys7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghc3RhcnRzV2l0aCggcywgb2Zmc2V0ICkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBvZmZzZXQgKz0gcy5sZW5ndGgoKTsKLQotICAgICAgICAgICAgYWR2YW5jZSggb2Zmc2V0ICk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIHRva2VuaXplICggU3RyaW5nIHMxLCBTdHJpbmcgczIgKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgczEubGVuZ3RoKCkgPiAwOwotICAgICAgICAgICAgYXNzZXJ0IHMyLmxlbmd0aCgpID4gMDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaW50IG9mZnNldCA9IDA7Ci0KLSAgICAgICAgICAgIHdoaWxlICggaXNXaGl0ZXNwYWNlKCBvZmZzZXQgKSApCi0gICAgICAgICAgICAgICAgb2Zmc2V0Kys7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghc3RhcnRzV2l0aCggczEsIG9mZnNldCApKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgb2Zmc2V0ICs9IHMxLmxlbmd0aCgpOwotCi0gICAgICAgICAgICB3aGlsZSAoIGlzV2hpdGVzcGFjZSggb2Zmc2V0ICkgKQotICAgICAgICAgICAgICAgIG9mZnNldCsrOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIXN0YXJ0c1dpdGgoIHMyLCBvZmZzZXQgKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBvZmZzZXQgKz0gczIubGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIGFkdmFuY2UoIG9mZnNldCApOwotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgYm9vbGVhbiB0b2tlbml6ZSAoIFN0cmluZyBzMSwgU3RyaW5nIHMyLCBTdHJpbmcgczMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgczEubGVuZ3RoKCkgPiAwOwotICAgICAgICAgICAgYXNzZXJ0IHMyLmxlbmd0aCgpID4gMDsKLSAgICAgICAgICAgIGFzc2VydCBzMy5sZW5ndGgoKSA+IDA7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAwOwotCi0gICAgICAgICAgICB3aGlsZSAoIGlzV2hpdGVzcGFjZSggb2Zmc2V0ICkgKQotICAgICAgICAgICAgICAgIG9mZnNldCsrOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIXN0YXJ0c1dpdGgoIHMxLCBvZmZzZXQgKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIG9mZnNldCArPSBzMS5sZW5ndGgoKTsKLQotICAgICAgICAgICAgd2hpbGUgKCBpc1doaXRlc3BhY2UoIG9mZnNldCApICkKLSAgICAgICAgICAgICAgICBvZmZzZXQrKzsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFzdGFydHNXaXRoKCBzMiwgb2Zmc2V0ICkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgb2Zmc2V0ICs9IHMyLmxlbmd0aCgpOwotCi0gICAgICAgICAgICB3aGlsZSAoIGlzV2hpdGVzcGFjZSggb2Zmc2V0ICkgKQotICAgICAgICAgICAgICAgIG9mZnNldCsrOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIXN0YXJ0c1dpdGgoIHMzLCBvZmZzZXQgKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG9mZnNldCArPSBzMy5sZW5ndGgoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGFkdmFuY2UoIG9mZnNldCApOwotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgU3RyaW5nIHRva2VuaXplTkNOYW1lICggKSB0aHJvd3MgWFBhdGhDb21waWxlRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhcnNlV2hpdGVzcGFjZSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzTkNOYW1lU3RhcnQoKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXdFcnJvciggIkV4cGVjdGVkIG5vbi1jb2xvbml6ZWQgbmFtZSIgKTsKLQotICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0gICAgICAgICAgICBzYi5hcHBlbmQoIChjaGFyKSBjdXJyQ2hhcigpICk7Ci0KLSAgICAgICAgICAgIGZvciAoIGFkdmFuY2UoKSA7IGlzTkNOYW1lKCkgOyBhZHZhbmNlKCkgKQotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggKGNoYXIpIGN1cnJDaGFyKCkgKTsKLQotICAgICAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIFFOYW1lIGdldEFueVFOYW1lICggKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFFOYW1lKCAiIiwgIiIgKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBRTmFtZSB0b2tlbml6ZVFOYW1lICggKSB0aHJvd3MgWFBhdGhDb21waWxlRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0b2tlbml6ZSggIioiICkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGdldEFueVFOYW1lKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cmluZyBuY05hbWUgPSB0b2tlbml6ZU5DTmFtZSgpOwotCi0gICAgICAgICAgICBpZiAoIXRva2VuaXplKCAiOiIgKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFFOYW1lKCBsb29rdXBQcmVmaXgoICIiICksIG5jTmFtZSApOwotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgICAgICBuZXcgUU5hbWUoCi0gICAgICAgICAgICAgICAgICAgIGxvb2t1cFByZWZpeCggbmNOYW1lICksCi0gICAgICAgICAgICAgICAgICAgIHRva2VuaXplKCAiKiIgKSA/ICIiIDogdG9rZW5pemVOQ05hbWUoKSApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIFN0cmluZyB0b2tlbml6ZVF1b3RlZFVyaSAoICkgdGhyb3dzIFhQYXRoQ29tcGlsZUV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyIHF1b3RlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodG9rZW5pemUoICJcIiIgKSkKLSAgICAgICAgICAgICAgICBxdW90ZSA9ICciJzsKLSAgICAgICAgICAgIGVsc2UgIGlmICh0b2tlbml6ZSggIiciICkpCi0gICAgICAgICAgICAgICAgcXVvdGUgPSAnXCcnOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHRocm93IG5ld0Vycm9yKCAiRXhwZWN0ZWQgcXVvdGUgKFwiIG9yICcpIiApOwotCi0gICAgICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLSAgICAgICAgICAgIGZvciAoIDsgOyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJDaGFyKCkgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ld0Vycm9yKCAiUGF0aCB0ZXJtaW5hdGVkIGluIFVSSSBsaXRlcmFsIiApOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChjdXJyQ2hhcigpID09IHF1b3RlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJDaGFyKCkgIT0gcXVvdGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKCAoY2hhcikgY3VyckNoYXIoKSApOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIFN0ZXAgYWRkU3RlcCAoIGJvb2xlYW4gZGVlcCwgYm9vbGVhbiBhdHRyLCBRTmFtZSBuYW1lLCBTdGVwIHN0ZXBzICkKLSAgICAgICAgewotICAgICAgICAgICAgU3RlcCBzdGVwID0gbmV3IFN0ZXAoIGRlZXAsIGF0dHIsIG5hbWUgKTsKLQotICAgICAgICAgICAgaWYgKHN0ZXBzID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZXA7Ci0KLSAgICAgICAgICAgIFN0ZXAgcyA9IHN0ZXBzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB3aGlsZSAoIHN0ZXBzLl9uZXh0ICE9IG51bGwgKQotICAgICAgICAgICAgICAgIHN0ZXBzID0gc3RlcHMuX25leHQ7Ci0KLSAgICAgICAgICAgIHN0ZXBzLl9uZXh0ID0gc3RlcDsKLSAgICAgICAgICAgIHN0ZXAuX3ByZXYgPSBzdGVwczsKLQotICAgICAgICAgICAgcmV0dXJuIHM7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIFN0ZXAgdG9rZW5pemVTdGVwcyAoICkgdGhyb3dzIFhQYXRoQ29tcGlsZUV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodG9rZW5pemUoICIvIiApKQotICAgICAgICAgICAgICAgIHRocm93IG5ld0Vycm9yKCAiQWJzb2x1dGUgcGF0aHMgdW5zdXBwb3J0ZWQiICk7Ci0KLSAgICAgICAgICAgIGJvb2xlYW4gZGVlcDsKLQotICAgICAgICAgICAgaWYgKHRva2VuaXplKCAiJCIsIF9jdXJyZW50Tm9kZVZhciwgIi8vIiApIHx8IHRva2VuaXplKCAiLiIsICIvLyIgKSkKLSAgICAgICAgICAgICAgICBkZWVwID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuaXplKCAiJCIsIF9jdXJyZW50Tm9kZVZhciwgIi8iICkgfHwgdG9rZW5pemUoICIuIiwgIi8iICkpCi0gICAgICAgICAgICAgICAgZGVlcCA9IGZhbHNlOwotICAgICAgICAgICAgZWxzZSBpZiAodG9rZW5pemUoICIkIiwgX2N1cnJlbnROb2RlVmFyICkgfHwgdG9rZW5pemUoICIuIiApKQotICAgICAgICAgICAgICAgIHJldHVybiBhZGRTdGVwKCBmYWxzZSwgZmFsc2UsIG51bGwsIG51bGwgKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBkZWVwID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIFN0ZXAgc3RlcHMgPSBudWxsOwotCi0gICAgICAgICAgICAvLyBDb21waWxlIHRoZSBzdGVwcyByZW1vdmluZyAvLiBhbmQgbWVyZ2luZCAvLy4gd2l0aCB0aGUgbmV4dCBzdGVwCi0KLSAgICAgICAgICAgIGJvb2xlYW4gZGVlcERvdCA9IGZhbHNlOwotCi0gICAgICAgICAgICBmb3IgKCA7IDsgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICh0b2tlbml6ZSggImF0dHJpYnV0ZSIsICI6OiIgKSB8fCB0b2tlbml6ZSggIkAiICkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGVwcyA9IGFkZFN0ZXAoIGRlZXAsIHRydWUsIHRva2VuaXplUU5hbWUoKSwgc3RlcHMgKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgUU5hbWUgbmFtZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAodG9rZW5pemUoICIuIiApKQotICAgICAgICAgICAgICAgICAgICBkZWVwRG90ID0gZGVlcERvdCB8fCBkZWVwOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuaXplKCAiY2hpbGQiLCAiOjoiICkgJiYgKG5hbWUgPSB0b2tlbml6ZVFOYW1lKCkpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHN0ZXBzID0gYWRkU3RlcCggZGVlcCwgZmFsc2UsIG5hbWUsIHN0ZXBzICk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoKG5hbWUgPSB0b2tlbml6ZVFOYW1lKCkpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHN0ZXBzID0gYWRkU3RlcCggZGVlcCwgZmFsc2UsIG5hbWUsIHN0ZXBzICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodG9rZW5pemUoICIvLyIgKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGRlZXAgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBkZWVwRG90ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuaXplKCAiLyIgKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkZWVwRG90KQotICAgICAgICAgICAgICAgICAgICAgICAgZGVlcCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIElmIHRoZXJlIHdhcyBhIC8vLiBhdCB0aGUgZW5kIG9mIHRoIHBhdGgsIHRoZW4gd2UgbmVlZCB0byBtYWtlCi0gICAgICAgICAgICAvLyB0d28gcGF0aHMsIG9uZSB3aXRoICogYXQgdGhlIGVuZCBhbmQgYW5vdGhlciB3aXRoIEAqIGF0IHRoZSBlbmQuCi0KLSAgICAgICAgICAgIGlmICgoX2xhc3REZWVwRG90ID0gZGVlcERvdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2xhc3REZWVwRG90ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBzdGVwcyA9IGFkZFN0ZXAoIHRydWUsIGZhbHNlLCBnZXRBbnlRTmFtZSgpLCBzdGVwcyApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBBZGQgc2VudGluYWwgc3RlcCAoX25hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIGFkZFN0ZXAoIGZhbHNlLCBmYWxzZSwgbnVsbCwgc3RlcHMgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBjb21wdXRlQmFja3RyYWNrICggU3RlcCBzdGVwcyApCi0gICAgICAgICAgICB0aHJvd3MgWFBhdGhDb21waWxlRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBDb21wdXRlIHN0YXRpYyBiYWNrdHJhY2sgaW5mb3JtYXRpb24KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgSSB1c2UgdGhlIGZhY3QgdGhhdCBfaGFzQmFja3RyYWNrIGlzIGluaXRpYWxpemVkIHRvCi0gICAgICAgICAgICAvLyBmYWxzZSBhbmQgX2JhY2t0cmFjayB0byBudWxsIGluIHRoZSBmb2xsb3dpbmcgY29kZS4KLSAgICAgICAgICAgIC8vCi0KLSAgICAgICAgICAgIFN0ZXAgcywgdDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICggcyA9IHN0ZXBzIDsgcyAhPSBudWxsIDsgcyA9IHQgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIHNlZ21lbnQgZnJvbSBbIHMsIHQgKQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAoIHQgPSBzLl9uZXh0IDsgdCAhPSBudWxsICYmICF0Ll9kZWVwIDsgKQotICAgICAgICAgICAgICAgICAgICB0ID0gdC5fbmV4dDsKLQotICAgICAgICAgICAgICAgIC8vIElmIHRoZSBzZWdtZW50IGlzIE5PVCByb290ZWQgYXQgLy8sIHRoZW4gdGhlIGJhY2t0cmFjayBpcwotICAgICAgICAgICAgICAgIC8vIG51bGwgZm9yIHRoZSBlbnRpcmUgc2VnbWVudCwgaW5jbHVkaW5nIHBvc3NpYmxlIGF0dHIgYW5kL29yCi0gICAgICAgICAgICAgICAgLy8gc2VudGluYWwKLQotICAgICAgICAgICAgICAgIGlmICghcy5fZGVlcCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoIFN0ZXAgdSA9IHMgOyB1ICE9IHQgOyB1ID0gdS5fbmV4dCApCi0gICAgICAgICAgICAgICAgICAgICAgICB1Ll9oYXNCYWNrdHJhY2sgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIHNlcXVlbmNlIFsgcywgdSApIG9mIGxlbmd0aCBuIHdoaWNoIGNvbnRhaW4gbm8KLSAgICAgICAgICAgICAgICAvLyB3aWxkIHN0ZXBzLgotCi0gICAgICAgICAgICAgICAgaW50IG4gPSAwOwotICAgICAgICAgICAgICAgIFN0ZXAgdSA9IHM7Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAoIHUgIT0gdCAmJiB1Ll9uYW1lICE9IG51bGwgJiYgIXUuaXNXaWxkKCkgJiYgIXUuX2F0dHIgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbisrOwotICAgICAgICAgICAgICAgICAgICB1ID0gdS5fbmV4dDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBOb3csIGFwcGx5IEtNUCB0byBbIHMsIHUgKSBmb3IgZmFzdCBiYWNrdHJhY2tpbmcKLQotICAgICAgICAgICAgICAgIFFOYW1lIFtdIHBhdHRlcm4gPSBuZXcgUU5hbWUgWyBuICsgMSBdOwotICAgICAgICAgICAgICAgIGludCBbXSBrbXAgPSBuZXcgaW50IFsgbiArIDEgXTsKLQotICAgICAgICAgICAgICAgIFN0ZXAgdiA9IHM7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IG4gOyBpKysgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcGF0dGVyblsgaSBdID0gdi5fbmFtZTsKLSAgICAgICAgICAgICAgICAgICAgdiA9IHYuX25leHQ7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcGF0dGVyblsgbiBdID0gZ2V0QW55UU5hbWUoKTsKLQotICAgICAgICAgICAgICAgIGludCBpID0gMDsKLSAgICAgICAgICAgICAgICBpbnQgaiA9IGttcFsgMCBdID0gLTE7Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAoIGkgPCBuICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlICggaiA+IC0xICYmICFwYXR0ZXJuWyBpIF0uZXF1YWxzKCBwYXR0ZXJuWyBqIF0gKSApCi0gICAgICAgICAgICAgICAgICAgICAgICBqID0ga21wWyBqIF07Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhdHRlcm5bICsraSBdLmVxdWFscyggcGF0dGVyblsgKytqIF0gKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGttcFsgaSBdID0ga21wWyBqIF07Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGttcFsgaSBdID0gajsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpID0gMDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKCB2ID0gcyA7IHYgIT0gdSA7IHYgPSB2Ll9uZXh0ICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHYuX2hhc0JhY2t0cmFjayA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHYuX2JhY2t0cmFjayA9IHM7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBmb3IgKCBqID0ga21wWyBpIF0gOyBqID4gMCA7IGotLSApCi0gICAgICAgICAgICAgICAgICAgICAgICB2Ll9iYWNrdHJhY2sgPSB2Ll9iYWNrdHJhY2suX25leHQ7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgc3VjY2VzcyBiYWNrdHJhY2sgYW5kIHN0dWZmIGl0IGludG8gYW4gYXR0ciBhbmQKLSAgICAgICAgICAgICAgICAvLyBzZW50aW5hbCBpZiB0aGV5IGV4aXN0IGZvciB0aGlzIHNlZ21lbnQKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB2ID0gczsKLQotICAgICAgICAgICAgICAgIGlmIChuID4gMSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoIGogPSBrbXBbIG4gLSAxIF0gOyBqID4gMCA7IGotLSApCi0gICAgICAgICAgICAgICAgICAgICAgICB2ID0gdi5fbmV4dDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodSAhPSB0ICYmIHUuX2F0dHIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1Ll9oYXNCYWNrdHJhY2sgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB1Ll9iYWNrdHJhY2sgPSB2OwotICAgICAgICAgICAgICAgICAgICB1ID0gdS5fbmV4dDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodSAhPSB0ICYmIHUuX25hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHUuX2hhc0JhY2t0cmFjayA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHUuX2JhY2t0cmFjayA9IHY7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gVGhlIGZpcnN0IHBhcnQgb2YgYSBkZWVwIHNlZ21lbnQgYWx3YXlzIGJhY2t0cmFja3MgdG8gaXRzZWxmCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYXNzZXJ0IHMuX2RlZXA7Ci0KLSAgICAgICAgICAgICAgICBzLl9oYXNCYWNrdHJhY2sgPSB0cnVlOwotICAgICAgICAgICAgICAgIHMuX2JhY2t0cmFjayA9IHM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgdG9rZW5pemVQYXRoICggQXJyYXlMaXN0IHBhdGhzICkKLSAgICAgICAgICAgIHRocm93cyBYUGF0aENvbXBpbGVFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgICAgX2xhc3REZWVwRG90ID0gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFN0ZXAgc3RlcHMgPSB0b2tlbml6ZVN0ZXBzKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNvbXB1dGVCYWNrdHJhY2soIHN0ZXBzICk7Ci0KLSAgICAgICAgICAgIHBhdGhzLmFkZCggc3RlcHMgKTsKLQotICAgICAgICAgICAgLy8gSWYgdGhlIGxhc3QgcGF0aCBlbmRlZCBpbiAvLy4sIHRoYXQgcGF0aCB3aWxsIG1hdGNoIGFsbAotICAgICAgICAgICAgLy8gZWxlbWVudHMsIGhlcmUgSSBtYWtlIGEgcGF0aCB3aGljaCBtYXRjaGVzIGFsbCBhdHRyaWJ1dGVzLgotCi0gICAgICAgICAgICBpZiAoX2xhc3REZWVwRG90KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9zYXdEZWVwRG90ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBTdGVwIHMgPSBudWxsOwotCi0gICAgICAgICAgICAgICAgZm9yICggU3RlcCB0ID0gc3RlcHMgOyB0ICE9IG51bGwgOyB0ID0gdC5fbmV4dCApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAodC5fbmV4dCAhPSBudWxsICYmIHQuX25leHQuX25leHQgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBhZGRTdGVwKCB0Ll9kZWVwLCB0cnVlLCB0Ll9uYW1lLCBzICk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBhZGRTdGVwKCB0Ll9kZWVwLCB0Ll9hdHRyLCB0Ll9uYW1lLCBzICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY29tcHV0ZUJhY2t0cmFjayggcyApOwotCi0gICAgICAgICAgICAgICAgcGF0aHMuYWRkKCBzICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgU2VsZWN0b3IgdG9rZW5pemVTZWxlY3RvciAoICkgdGhyb3dzIFhQYXRoQ29tcGlsZUV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBBcnJheUxpc3QgcGF0aHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICAgICAgICAgIHRva2VuaXplUGF0aCggcGF0aHMgKTsKLQotICAgICAgICAgICAgd2hpbGUgKCB0b2tlbml6ZSggInwiICkgKQotICAgICAgICAgICAgICAgIHRva2VuaXplUGF0aCggcGF0aHMgKTsKLQotICAgICAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RvciggKFN0ZXBbXSkgcGF0aHMudG9BcnJheSggbmV3IFN0ZXAgWyAwIF0gKSApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBYUGF0aCB0b2tlbml6ZVhQYXRoICggKSB0aHJvd3MgWFBhdGhDb21waWxlRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoIDsgOyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHRva2VuaXplKCAiZGVjbGFyZSIsICJuYW1lc3BhY2UiICkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlV2hpdGVzcGFjZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3RXJyb3IoICJFeHBlY3RlZCBwcmVmaXggYWZ0ZXIgJ2RlY2xhcmUgbmFtZXNwYWNlJyIgKTsKLQotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gdG9rZW5pemVOQ05hbWUoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIXRva2VuaXplKCAiPSIgKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ld0Vycm9yKCAiRXhwZWN0ZWQgJz0nIiApOwotCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZyB1cmkgPSB0b2tlbml6ZVF1b3RlZFVyaSgpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKF9uYW1lc3BhY2VzLmNvbnRhaW5zS2V5KCBwcmVmaXggKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3RXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlZGVmaW5pdGlvbiBvZiBuYW1lc3BhY2UgcHJlZml4OiAiICsgcHJlZml4ICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBfbmFtZXNwYWNlcy5wdXQoIHByZWZpeCwgdXJpICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICh0b2tlbml6ZSggImRlZmF1bHQiLCAiZWxlbWVudCIsICJuYW1lc3BhY2UiICkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXRva2VuaXplKCAiPSIgKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ld0Vycm9yKCAiRXhwZWN0ZWQgJz0nIiApOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHVyaSA9IHRva2VuaXplUXVvdGVkVXJpKCk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoX25hbWVzcGFjZXMuY29udGFpbnNLZXkoICIiICkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ld0Vycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWRlZmluaXRpb24gb2YgZGVmYXVsdCBlbGVtZW50IG5hbWVzcGFjZSIgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIF9uYW1lc3BhY2VzLnB1dCggIiIsIHVyaSApOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQWRkIHRoZSBkZWZhdWx0IHByZWZpeCBtYXBwaW5nIGlmIGl0IGhhcyBub3QgYmVlbiByZWRlZmluZWQKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFfbmFtZXNwYWNlcy5jb250YWluc0tleSggIiIgKSkKLSAgICAgICAgICAgICAgICBfbmFtZXNwYWNlcy5wdXQoICIiLCAiIiApOwotCi0gICAgICAgICAgICBTZWxlY3RvciBzZWxlY3RvciA9IHRva2VuaXplU2VsZWN0b3IoKTsKLQotICAgICAgICAgICAgcGFyc2VXaGl0ZXNwYWNlKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChjdXJyQ2hhcigpICE9IC0xKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ld0Vycm9yKAotICAgICAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCBjaGFyICciICsgKGNoYXIpIGN1cnJDaGFyKCkgKyAiJyIgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG5ldyBYUGF0aCggc2VsZWN0b3IsIF9zYXdEZWVwRG90ICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIFN0cmluZyBfZXhwcjsKLQotICAgICAgICBwcml2YXRlIGJvb2xlYW4gX3Nhd0RlZXBEb3Q7ICAvLyBTYXcgb25lIG92ZXJhbGwKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIF9sYXN0RGVlcERvdDsKLQotICAgICAgICBwcml2YXRlIFN0cmluZyBfY3VycmVudE5vZGVWYXI7Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIE1hcCBfbmFtZXNwYWNlczsKLSAgICAgICAgcHJpdmF0ZSBNYXAgX2V4dGVybmFsTmFtZXNwYWNlczsKLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgaW50IF9vZmZzZXQ7Ci0gICAgICAgIHByaXZhdGUgaW50IF9saW5lOwotICAgICAgICBwcml2YXRlIGludCBfY29sdW1uOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIFN0ZXAKLSAgICB7Ci0gICAgICAgIFN0ZXAgKCBib29sZWFuIGRlZXAsIGJvb2xlYW4gYXR0ciwgUU5hbWUgbmFtZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9uYW1lID0gbmFtZTsKLQotICAgICAgICAgICAgX2RlZXAgPSBkZWVwOwotICAgICAgICAgICAgX2F0dHIgPSBhdHRyOwotCi0gICAgICAgICAgICBpbnQgZmxhZ3MgPSAwOwotCi0gICAgICAgICAgICBpZiAoX2RlZXAgfHwgIV9hdHRyKQotICAgICAgICAgICAgICAgIGZsYWdzIHw9IEV4ZWN1dGlvbkNvbnRleHQuREVTQ0VORDsKLQotICAgICAgICAgICAgaWYgKF9hdHRyKQotICAgICAgICAgICAgICAgIGZsYWdzIHw9IEV4ZWN1dGlvbkNvbnRleHQuQVRUUlM7Ci0KLSAgICAgICAgICAgIF9mbGFncyA9IGZsYWdzOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbGVhbiBpc1dpbGQgKCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBfbmFtZS5nZXRMb2NhbFBhcnQoKS5sZW5ndGgoKSA9PSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbGVhbiBtYXRjaCAoIFFOYW1lIG5hbWUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgbG9jYWwgPSBfbmFtZS5nZXRMb2NhbFBhcnQoKTsKLQotICAgICAgICAgICAgaWYgKGxvY2FsLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHVyaSA9IF9uYW1lLmdldE5hbWVzcGFjZVVSSSgpOwotCi0gICAgICAgICAgICAgICAgaWYgKHVyaS5sZW5ndGgoKSA9PSAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIHJldHVybiB1cmkuZXF1YWxzKCBuYW1lLmdldE5hbWVzcGFjZVVSSSgpICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBfbmFtZS5lcXVhbHMoIG5hbWUgKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIGJvb2xlYW4gX2F0dHI7Ci0gICAgICAgIGZpbmFsIGJvb2xlYW4gX2RlZXA7Ci0KLSAgICAgICAgaW50IF9mbGFnczsKLSAgICAgICAgCi0gICAgICAgIGZpbmFsIFFOYW1lIF9uYW1lOwotCi0gICAgICAgIFN0ZXAgX25leHQsIF9wcmV2OwotCi0gICAgICAgIGJvb2xlYW4gX2hhc0JhY2t0cmFjazsKLSAgICAgICAgU3RlcCAgICBfYmFja3RyYWNrOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIFNlbGVjdG9yCi0gICAgewotICAgICAgICBTZWxlY3RvciAoIFN0ZXBbXSBwYXRocyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9wYXRocyA9IHBhdGhzOwotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwgU3RlcFtdIF9wYXRoczsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vCi0gICAgLy8KLSAgICAKLSAgICBwcml2YXRlIFhQYXRoICggU2VsZWN0b3Igc2VsZWN0b3IsIGJvb2xlYW4gc2F3RGVlcERvdCApCi0gICAgewotICAgICAgICBfc2VsZWN0b3IgPSBzZWxlY3RvcjsKLSAgICAgICAgX3Nhd0RlZXBEb3QgPSBzYXdEZWVwRG90OwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHNhd0RlZXBEb3QgKCApCi0gICAgewotICAgICAgICByZXR1cm4gX3Nhd0RlZXBEb3Q7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBmaW5hbCBTZWxlY3RvciBfc2VsZWN0b3I7Ci0gICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuICBfc2F3RGVlcERvdDsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vWG1sRW5jb2RpbmdTbmlmZmVyLmphdmEgYi92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vWG1sRW5jb2RpbmdTbmlmZmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjODFhZWMuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL1htbEVuY29kaW5nU25pZmZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA1ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbjsKLQotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFhtbEVuY29kaW5nU25pZmZlcgotewotICAgIHByaXZhdGUgU3RyaW5nICAgICAgX3htbGVuY29kaW5nOwotICAgIHByaXZhdGUgU3RyaW5nICAgICAgX2phdmFlbmNvZGluZzsKLSAgICBwcml2YXRlIElucHV0U3RyZWFtIF9zdHJlYW07Ci0gICAgcHJpdmF0ZSBSZWFkZXIgICAgICBfcmVhZGVyOwotCi0gICAgLyoqCi0gICAgICogU25pZmZzIHRoZSBnaXZlbiBYTUwgc3RyZWFtIGZvciBlbmNvZGluZyBpbmZvcm1hdGlvbi4KLSAgICAgKgotICAgICAqIEFmdGVyIGEgc25pZmZlciBpcyBjb25zdHJ1Y3RlZCwgaXQgY2FuIHJldHVybiBlaXRoZXIgYSBzdHJlYW0KLSAgICAgKiAod2hpY2ggaXMgYSBidWZmZXJlZCBzdHJlYW0gd3JhcHBlciBvZiB0aGUgb3JpZ2luYWwpIG9yIGEgcmVhZGVyCi0gICAgICogKHdoaWNoIGFwcGxpZXMgdGhlIHByb3BlciBlbmNvZGluZykuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc3RyZWFtICAgICAgICAgICBUaGUgc3RyZWFtIHRvIHNuaWZmCi0gICAgICogQHBhcmFtIGVuY29kaW5nT3ZlcnJpZGUgVGhlIFhNTCAoSUFOQSkgbmFtZSBmb3IgdGhlIG92ZXJyaWRpbmcgZW5jb2RpbmcKLSAgICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgICogQHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uCi0gICAgICovCi0gICAgcHVibGljIFhtbEVuY29kaW5nU25pZmZlcihJbnB1dFN0cmVhbSBzdHJlYW0sIFN0cmluZyBlbmNvZGluZ092ZXJyaWRlKQotICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIF9zdHJlYW0gPSBzdHJlYW07Ci0gICAgICAgIAotICAgICAgICBpZiAoZW5jb2RpbmdPdmVycmlkZSAhPSBudWxsKQotICAgICAgICAgICAgX3htbGVuY29kaW5nID0gRW5jb2RpbmdNYXAuZ2V0SmF2YTJJQU5BTWFwcGluZyhlbmNvZGluZ092ZXJyaWRlKTsKLQotICAgICAgICBpZiAoX3htbGVuY29kaW5nID09IG51bGwpCi0gICAgICAgICAgICBfeG1sZW5jb2RpbmcgPSBlbmNvZGluZ092ZXJyaWRlOwotCi0gICAgICAgIGlmIChfeG1sZW5jb2RpbmcgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgU25pZmZlZFhtbElucHV0U3RyZWFtIHNuaWZmZWQgPSBuZXcgU25pZmZlZFhtbElucHV0U3RyZWFtKF9zdHJlYW0pOwotICAgICAgICAgICAgX3htbGVuY29kaW5nID0gc25pZmZlZC5nZXRYbWxFbmNvZGluZygpOwotICAgICAgICAgICAgYXNzZXJ0KF94bWxlbmNvZGluZyAhPSBudWxsKTsKLSAgICAgICAgICAgIF9zdHJlYW0gPSBzbmlmZmVkOwotICAgICAgICB9Ci0KLSAgICAgICAgX2phdmFlbmNvZGluZyA9IEVuY29kaW5nTWFwLmdldElBTkEySmF2YU1hcHBpbmcoX3htbGVuY29kaW5nKTsKLSAgICAgICAgCi0gICAgICAgIC8vIHdlIGFsbG93IHlvdSB0byB1c2UgSmF2YSdzIGVuY29kaW5nIG5hbWVzIGluIFhNTCBldmVuIHRob3VnaCB5b3UncmUKLSAgICAgICAgLy8gbm90IHN1cHBvc2VkIHRvLgotICAgICAgICAKLSAgICAgICAgaWYgKF9qYXZhZW5jb2RpbmcgPT0gbnVsbCkKLSAgICAgICAgICAgIF9qYXZhZW5jb2RpbmcgPSBfeG1sZW5jb2Rpbmc7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU25pZmZzIHRoZSBnaXZlbiBYTUwgc3RyZWFtIGZvciBlbmNvZGluZyBpbmZvcm1hdGlvbi4KLSAgICAgKgotICAgICAqIEFmdGVyIGEgc25pZmZlciBpcyBjb25zdHJ1Y3RlZCwgaXQgY2FuIHJldHVybiBlaXRoZXIgYSByZWFkZXIKLSAgICAgKiAod2hpY2ggaXMgYSBidWZmZXJlZCBzdHJlYW0gd3JhcHBlciBvZiB0aGUgb3JpZ2luYWwpIG9yIGEgc3RyZWFtCi0gICAgICogKHdoaWNoIGFwcGxpZXMgdGhlIHByb3BlciBlbmNvZGluZykuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcmVhZGVyICAgICAgICAgICBUaGUgcmVhZGVyIHRvIHNuaWZmCi0gICAgICogQHBhcmFtIGVuY29kaW5nRGVmYXVsdCAgVGhlIEphdmEgbmFtZSBmb3IgdGhlIGRlZmF1bHQgZW5jb2RpbmcgdG8gYXBwbHksIFVURi04IGlmIG51bGwuCi0gICAgICogQHRocm93cyBJT0V4Y2VwdGlvbgotICAgICAqIEB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbgotICAgICAqLwotICAgIHB1YmxpYyBYbWxFbmNvZGluZ1NuaWZmZXIoUmVhZGVyIHJlYWRlciwgU3RyaW5nIGVuY29kaW5nRGVmYXVsdCkKLSAgICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgaWYgKGVuY29kaW5nRGVmYXVsdCA9PSBudWxsKQotICAgICAgICAgICAgZW5jb2RpbmdEZWZhdWx0ID0gIlVURi04IjsKLSAgICAgICAgCi0gICAgICAgIFNuaWZmZWRYbWxSZWFkZXIgc25pZmZlZFJlYWRlciA9IG5ldyBTbmlmZmVkWG1sUmVhZGVyKHJlYWRlcik7Ci0gICAgICAgIF9yZWFkZXIgPSBzbmlmZmVkUmVhZGVyOwotICAgICAgICBfeG1sZW5jb2RpbmcgPSBzbmlmZmVkUmVhZGVyLmdldFhtbEVuY29kaW5nKCk7Ci0KLSAgICAgICAgaWYgKF94bWxlbmNvZGluZyA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBfeG1sZW5jb2RpbmcgPSBFbmNvZGluZ01hcC5nZXRKYXZhMklBTkFNYXBwaW5nKGVuY29kaW5nRGVmYXVsdCk7Ci0gICAgICAgICAgICBpZiAoX3htbGVuY29kaW5nICE9IG51bGwpCi0gICAgICAgICAgICAgICAgX2phdmFlbmNvZGluZyA9IGVuY29kaW5nRGVmYXVsdDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBfeG1sZW5jb2RpbmcgPSBlbmNvZGluZ0RlZmF1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoX3htbGVuY29kaW5nID09IG51bGwpCi0gICAgICAgICAgICBfeG1sZW5jb2RpbmcgPSAiVVRGLTgiOwotICAgICAgICAKLSAgICAgICAgLy8gd2UgYWxsb3cgeW91IHRvIHVzZSBKYXZhJ3MgZW5jb2RpbmcgbmFtZXMgaW4gWE1MIGV2ZW4gdGhvdWdoIHlvdSdyZQotICAgICAgICAvLyBub3Qgc3VwcG9zZWQgdG8uCi0gICAgICAgIAotICAgICAgICBfamF2YWVuY29kaW5nID0gRW5jb2RpbmdNYXAuZ2V0SUFOQTJKYXZhTWFwcGluZyhfeG1sZW5jb2RpbmcpOwotICAgICAgICAKLSAgICAgICAgaWYgKF9qYXZhZW5jb2RpbmcgPT0gbnVsbCkKLSAgICAgICAgICAgIF9qYXZhZW5jb2RpbmcgPSBfeG1sZW5jb2Rpbmc7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRYbWxFbmNvZGluZygpCi0gICAgewotICAgICAgICByZXR1cm4gX3htbGVuY29kaW5nOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0SmF2YUVuY29kaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfamF2YWVuY29kaW5nOwotICAgIH0KLQotICAgIHB1YmxpYyBJbnB1dFN0cmVhbSBnZXRTdHJlYW0oKQotICAgICAgICAgICAgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGlmIChfc3RyZWFtICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gX3N0cmVhbTsKLSAgICAgICAgICAgIF9zdHJlYW0gPSBudWxsOwotICAgICAgICAgICAgcmV0dXJuIGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKF9yZWFkZXIgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBuZXcgUmVhZGVySW5wdXRTdHJlYW0oIF9yZWFkZXIsIF9qYXZhZW5jb2RpbmcgKTsKLSAgICAgICAgICAgIF9yZWFkZXIgPSBudWxsOwotICAgICAgICAgICAgcmV0dXJuIGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0KLSAgICBwdWJsaWMgUmVhZGVyIGdldFJlYWRlciAoICkKLSAgICAgICAgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGlmIChfcmVhZGVyICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJlYWRlciByZWFkZXIgPSBfcmVhZGVyOwotICAgICAgICAgICAgX3JlYWRlciA9IG51bGw7Ci0gICAgICAgICAgICByZXR1cm4gcmVhZGVyOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKF9zdHJlYW0gIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgUmVhZGVyIHJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlciggX3N0cmVhbSwgX2phdmFlbmNvZGluZyApOwotICAgICAgICAgICAgX3N0cmVhbSA9IG51bGw7Ci0gICAgICAgICAgICByZXR1cm4gcmVhZGVyOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL1htbEVycm9yQ29udGV4dC5qYXZhIGIvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL1htbEVycm9yQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWZlNDVkLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9YbWxFcnJvckNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb247Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBYbWxFcnJvckNvbnRleHQKLXsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQU5OT1RfTE9BRF9YU0RfRklMRSAgICAgICAgICAgICAgPSAgIDE7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0FOTk9UX0xPQURfWFNEX0NPTkZJR19GSUxFICAgICAgID0gICAyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PX1NDSEVNQV9FTEVNRU5UICAgICAgICAgICAgICAgICA9ICAgMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNSVNNQVRDSEVEX1RBUkdFVF9OQU1FU1BBQ0UgICAgICAgPSAgIDQ7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgR0xPQkFMX1RZUEVfTUlTU0lOR19OQU1FICAgICAgICAgID0gICA1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRZUEVfTk9UX0ZPVU5EICAgICAgICAgICAgICAgICAgICA9ICAgNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRURVTkRBTlRfTkVTVEVEX1RZUEUgICAgICAgICAgICAgPSAgIDc7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRUxFTUVOVF9NSVNTSU5HX05BTUUgICAgICAgICAgICAgID0gICA4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFRFVOREFOVF9ERUZBVUxUX0ZJWEVEICAgICAgICAgICA9ICAgOTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNT0RFTF9HUk9VUF9NSVNTSU5HX05BTUUgICAgICAgICAgPSAgMTA7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVRUUklCVVRFX01JU1NJTkdfTkFNRSAgICAgICAgICAgID0gIDExOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEFUVFJJQlVURV9HUk9VUF9NSVNTSU5HX05BTUUgICAgICA9ICAxMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDWUNMSUNfREVQRU5ERU5DWSAgICAgICAgICAgICAgICAgPSAgMTM7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVU5JT05fTUVNQkVSX05PVF9TSU1QTEUgICAgICAgICAgID0gIDE0OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFU1RSSUNUSU9OX1JFRFVOREFOVF9CQVNFICAgICAgICA9ICAxNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBSRVNUUklDVElPTl9NSVNTSU5HX0JBU0UgICAgICAgICAgPSAgMTY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0lNUExFX1JFU1RSSUNUSU9OX05PVF9TSU1QTEUgICAgID0gIDE3OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZBQ0VUX0RPRVNfTk9UX0FQUExZICAgICAgICAgICAgICA9ICAxODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGQUNFVF9EVVBMSUNBVEVEICAgICAgICAgICAgICAgICAgPSAgMTk7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkFDRVRfVkFMVUVfTUFMRk9STUVEICAgICAgICAgICAgID0gIDIwOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZBQ0VUX0ZJWEVEICAgICAgICAgICAgICAgICAgICAgICA9ICAyMTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQUxGT1JNRURfTlVNQkVSICAgICAgICAgICAgICAgICAgPSAgMjE7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTElTVF9NSVNTSU5HX0lURU0gICAgICAgICAgICAgICAgID0gIDIyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExJU1RfSVRFTV9OT1RfU0lNUExFICAgICAgICAgICAgICA9ICAyMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMSVNUX09GX0xJU1QgICAgICAgICAgICAgICAgICAgICAgPSAgMjQ7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTElTVF9XSElURVNQQUNFICAgICAgICAgICAgICAgICAgID0gIDI1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFRFVOREFOVF9DT05URU5UX01PREVMICAgICAgICAgICA9ICAyNjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNSVNTSU5HX1JFU1RSSUNUSU9OX09SX0VYVEVOU0lPTiAgPSAgMjc7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlTU0lOR19CQVNFICAgICAgICAgICAgICAgICAgICAgID0gIDI4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVMRU1FTlRfUkVGX05PVF9GT1VORCAgICAgICAgICAgICA9ICAyOTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTEVNRU5UX0VYVFJBX1JFRiAgICAgICAgICAgICAgICAgPSAgMzA7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQUxMX0NPTlRFTlRTICAgICAgICAgICAgICAgICAgICAgID0gIDMxOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVYUExJQ0lUX0dST1VQX05FRURFRCAgICAgICAgICAgICA9ICAzMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHUk9VUF9NSVNTSU5HX1JFRiAgICAgICAgICAgICAgICAgPSAgMzM7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTU9ERUxfR1JPVVBfTk9UX0ZPVU5EICAgICAgICAgICAgID0gIDM0OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTl9NQVhfT0NDVVJTICAgICAgICAgICAgICAgICAgICA9ICAzNTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBVFRSSUJVVEVfUkVGX05PVF9GT1VORCAgICAgICAgICAgPSAgMzY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRFVQTElDQVRFX0FUVFJJQlVURV9OQU1FICAgICAgICAgID0gIDM3OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERVUExJQ0FURV9BTllfQVRUUklCVVRFICAgICAgICAgICA9ICAzODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBVFRSSUJVVEVfR1JPVVBfTUlTU0lOR19SRUYgICAgICAgPSAgMzk7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVRUUklCVVRFX0dST1VQX05PVF9GT1VORCAgICAgICAgID0gIDQwOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENPTVBMRVhfQkFTRV9OT1RfQ09NUExFWCAgICAgICAgICA9ICA0MTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQU5OT1RfRVhURU5EX0FMTCAgICAgICAgICAgICAgICAgPSAgNDI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0lNUExFX0JBU0VfTk9UX1NJTVBMRSAgICAgICAgICAgID0gIDQzOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFJFU0VSVkVEX1RZUEVfTkFNRSAgICAgICAgICAgICAgICA9ICA0NDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTExFR0FMX1JFU1RSSUNUSU9OICAgICAgICAgICAgICAgPSAgNDU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5WQUxJRF9TQ0hFTUEgICAgICAgICAgICAgICAgICAgID0gIDQ2OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERVUExJQ0FURV9HTE9CQUxfRUxFTUVOVCAgICAgICAgICA9ICA0NzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEVVBMSUNBVEVfR0xPQkFMX0FUVFJJQlVURSAgICAgICAgPSAgNDg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRFVQTElDQVRFX0dMT0JBTF9UWVBFICAgICAgICAgICAgID0gIDQ5OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOQ09OU0lTVEVOVF9UWVBFICAgICAgICAgICAgICAgICA9ICA1MDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBVTlNVUFBPUlRFRF9GRUFUVVJFICAgICAgICAgICAgICAgPSAgNTE7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUFMRk9STUVEX1NJTVBMRV9UWVBFX0RFRk4gICAgICAgID0gIDUyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOVkFMSURfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9ICA1MzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQU5OT1RfREVSSVZFX0ZJTkFMICAgICAgICAgICAgICAgPSAgNTQ7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSURDX05PVF9GT1VORCAgICAgICAgICAgICAgICAgICAgID0gIDU1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENBTk5PVF9GSU5EX1JFU09VUkNFICAgICAgICAgICAgICA9ICA1NjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBOT05ERVRFUk1JTklTVElDX01PREVMICAgICAgICAgICAgPSAgNTc7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgWFBBVEhfQ09NUElMQVRJT05fRkFJTFVSRSAgICAgICAgID0gIDU4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFTkVSSUNfRVJST1IgICAgICAgICAgICAgICAgICAgICA9ICA2MDsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9YbWxFcnJvclByaW50ZXIuamF2YSBiL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9YbWxFcnJvclByaW50ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY5NTVlNi4uMDAwMDAwMAotLS0gYS92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vWG1sRXJyb3JQcmludGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFcnJvcjsKLQotaW1wb3J0IGphdmEudXRpbC5BYnN0cmFjdENvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci0KLXB1YmxpYyBjbGFzcyBYbWxFcnJvclByaW50ZXIgZXh0ZW5kcyBBYnN0cmFjdENvbGxlY3Rpb24KLXsKLSAgICBwcml2YXRlIGJvb2xlYW4gX25vaXN5OwotICAgIHByaXZhdGUgVVJJIF9iYXNlVVJJOwotCi0gICAgcHVibGljIFhtbEVycm9yUHJpbnRlcihib29sZWFuIG5vaXN5LCBVUkkgYmFzZVVSSSkKLSAgICB7Ci0gICAgICAgIF9ub2lzeSA9IG5vaXN5OwotICAgICAgICBfYmFzZVVSSSA9IGJhc2VVUkk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gYWRkKE9iamVjdCBvKQotICAgIHsKLSAgICAgICAgaWYgKG8gaW5zdGFuY2VvZiBYbWxFcnJvcikKLSAgICAgICAgewotICAgICAgICAgICAgWG1sRXJyb3IgZXJyID0gKFhtbEVycm9yKW87Ci0gICAgICAgICAgICBpZiAoZXJyLmdldFNldmVyaXR5KCkgPT0gWG1sRXJyb3IuU0VWRVJJVFlfRVJST1IgfHwKLSAgICAgICAgICAgICAgICBlcnIuZ2V0U2V2ZXJpdHkoKSA9PSBYbWxFcnJvci5TRVZFUklUWV9XQVJOSU5HKQotICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihlcnIudG9TdHJpbmcoX2Jhc2VVUkkpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKF9ub2lzeSkKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZXJyLnRvU3RyaW5nKF9iYXNlVVJJKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyBJdGVyYXRvciBpdGVyYXRvcigpCi0gICAgewotICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTElTVC5pdGVyYXRvcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgc2l6ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9YbWxFcnJvcldhdGNoZXIuamF2YSBiL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9YbWxFcnJvcldhdGNoZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkwZjIzNi4uMDAwMDAwMAotLS0gYS92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vWG1sRXJyb3JXYXRjaGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFcnJvcjsKLQotaW1wb3J0IGphdmEudXRpbC5BYnN0cmFjdENvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLQotcHVibGljIGNsYXNzIFhtbEVycm9yV2F0Y2hlciBleHRlbmRzIEFic3RyYWN0Q29sbGVjdGlvbgotewotICAgIHByaXZhdGUgQ29sbGVjdGlvbiBfdW5kZXJseWluZzsKLSAgICBwcml2YXRlIFhtbEVycm9yIF9maXJzdEVycm9yOwotCi0gICAgcHVibGljIFhtbEVycm9yV2F0Y2hlcihDb2xsZWN0aW9uIHVuZGVybHlpbmcpCi0gICAgewotICAgICAgICBfdW5kZXJseWluZyA9IHVuZGVybHlpbmc7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gYWRkKE9iamVjdCBvKQotICAgIHsKLSAgICAgICAgaWYgKF9maXJzdEVycm9yID09IG51bGwgJiYgbyBpbnN0YW5jZW9mIFhtbEVycm9yICYmICgoWG1sRXJyb3IpbykuZ2V0U2V2ZXJpdHkoKSA9PSBYbWxFcnJvci5TRVZFUklUWV9FUlJPUikKLSAgICAgICAgICAgIF9maXJzdEVycm9yID0gKFhtbEVycm9yKW87Ci0gICAgICAgIGlmIChfdW5kZXJseWluZyA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gX3VuZGVybHlpbmcuYWRkKG8pOwotICAgIH0KLQotICAgIHB1YmxpYyBJdGVyYXRvciBpdGVyYXRvcigpCi0gICAgewotICAgICAgICBpZiAoX3VuZGVybHlpbmcgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9MSVNULml0ZXJhdG9yKCk7Ci0KLSAgICAgICAgcmV0dXJuIF91bmRlcmx5aW5nLml0ZXJhdG9yKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBzaXplKCkKLSAgICB7Ci0gICAgICAgIGlmIChfdW5kZXJseWluZyA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgcmV0dXJuIF91bmRlcmx5aW5nLnNpemUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNFcnJvcigpCi0gICAgewotICAgICAgICByZXR1cm4gX2ZpcnN0RXJyb3IgIT0gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgWG1sRXJyb3IgZmlyc3RFcnJvcigpCi0gICAgewotICAgICAgICByZXR1cm4gX2ZpcnN0RXJyb3I7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL1htbEV2ZW50QmFzZS5qYXZhIGIvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL1htbEV2ZW50QmFzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWQ1YzYyLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9YbWxFdmVudEJhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb247Ci0KLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTEV2ZW50OwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uZXZlbnRzLkVsZW1lbnRUeXBlTmFtZXM7Ci0KLS8qKgotICogQWJzdHJhY3QgYmFzZSBjbGFzcyB3aGljaCBpbXBsZW1lbnRzIHRoZSB0eXBlIHBhcnQgWE1MRXZlbnQuCi0gKi8KLQotcHVibGljIGFic3RyYWN0IGNsYXNzIFhtbEV2ZW50QmFzZSBpbXBsZW1lbnRzIFhNTEV2ZW50Ci17Ci0gICAgcHVibGljIFhtbEV2ZW50QmFzZSAoICkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBYbWxFdmVudEJhc2UgKCBpbnQgdHlwZSApCi0gICAgewotICAgICAgICBfdHlwZSA9IHR5cGU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VHlwZSAoIGludCB0eXBlICkKLSAgICB7Ci0gICAgICAgIF90eXBlID0gdHlwZTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGludCBnZXRUeXBlICggKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF90eXBlOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZUFzU3RyaW5nICggKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEVsZW1lbnRUeXBlTmFtZXMuZ2V0TmFtZSggX3R5cGUgKTsKLSAgICB9Ci0gICAgICAgICAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1N0YXJ0RWxlbWVudCAoICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfdHlwZSA9PSBYTUxFdmVudC5TVEFSVF9FTEVNRU5UOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiBpc0VuZEVsZW1lbnQgKCApCi0gICAgewotICAgICAgICByZXR1cm4gX3R5cGUgPT0gWE1MRXZlbnQuRU5EX0VMRU1FTlQ7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBib29sZWFuIGlzRW50aXR5UmVmZXJlbmNlICggKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF90eXBlID09IFhNTEV2ZW50LkVOVElUWV9SRUZFUkVOQ0U7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBib29sZWFuIGlzU3RhcnRQcmVmaXhNYXBwaW5nICggKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF90eXBlID09IFhNTEV2ZW50LlNUQVJUX1BSRUZJWF9NQVBQSU5HOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiBpc0VuZFByZWZpeE1hcHBpbmcgKCApCi0gICAgewotICAgICAgICByZXR1cm4gX3R5cGUgPT0gWE1MRXZlbnQuRU5EX1BSRUZJWF9NQVBQSU5HOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiBpc0NoYW5nZVByZWZpeE1hcHBpbmcgKCApCi0gICAgewotICAgICAgICByZXR1cm4gX3R5cGUgPT0gWE1MRXZlbnQuQ0hBTkdFX1BSRUZJWF9NQVBQSU5HOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1Byb2Nlc3NpbmdJbnN0cnVjdGlvbiAoICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfdHlwZSA9PSBYTUxFdmVudC5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiBpc0NoYXJhY3RlckRhdGEgKCApCi0gICAgewotICAgICAgICByZXR1cm4gX3R5cGUgPT0gWE1MRXZlbnQuQ0hBUkFDVEVSX0RBVEE7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBib29sZWFuIGlzU3BhY2UgKCApCi0gICAgewotICAgICAgICByZXR1cm4gX3R5cGUgPT0gWE1MRXZlbnQuU1BBQ0U7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBib29sZWFuIGlzTnVsbCAoICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfdHlwZSA9PSBYTUxFdmVudC5OVUxMX0VMRU1FTlQ7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBib29sZWFuIGlzU3RhcnREb2N1bWVudCAoICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfdHlwZSA9PSBYTUxFdmVudC5TVEFSVF9ET0NVTUVOVDsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGJvb2xlYW4gaXNFbmREb2N1bWVudCAoICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfdHlwZSA9PSBYTUxFdmVudC5FTkRfRE9DVU1FTlQ7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBpbnQgX3R5cGU7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vWG1sTmFtZUltcGwuamF2YSBiL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9YbWxOYW1lSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxN2FhNDA5Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9YbWxOYW1lSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbjsKLQotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MTmFtZTsKLQotcHVibGljIGNsYXNzIFhtbE5hbWVJbXBsIGltcGxlbWVudHMgWE1MTmFtZSB7Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgbmFtZXNwYWNlVXJpPW51bGw7Ci0gIHByaXZhdGUgU3RyaW5nIGxvY2FsTmFtZT1udWxsOwotICBwcml2YXRlIFN0cmluZyBwcmVmaXg9bnVsbDsKLSAgcHJpdmF0ZSBpbnQgaGFzaCA9IDA7Ci0KLSAgcHVibGljIFhtbE5hbWVJbXBsICgpIHt9Ci0gIHB1YmxpYyBYbWxOYW1lSW1wbCAoU3RyaW5nIGxvY2FsTmFtZSkgewotICAgIHRoaXMubG9jYWxOYW1lID0gbG9jYWxOYW1lOwotICB9Ci0gIHB1YmxpYyBYbWxOYW1lSW1wbCAoU3RyaW5nIG5hbWVzcGFjZVVyaSxTdHJpbmcgbG9jYWxOYW1lKSB7Ci0gICAgc2V0TmFtZXNwYWNlVXJpKG5hbWVzcGFjZVVyaSk7Ci0gICAgdGhpcy5sb2NhbE5hbWUgPSBsb2NhbE5hbWU7Ci0gIH0KLSAgcHVibGljIFhtbE5hbWVJbXBsIChTdHJpbmcgbmFtZXNwYWNlVXJpLAotICAgICAgICAgICAgICAgU3RyaW5nIGxvY2FsTmFtZSwKLSAgICAgICAgICAgICAgIFN0cmluZyBwcmVmaXgpIHsKLSAgICBzZXROYW1lc3BhY2VVcmkobmFtZXNwYWNlVXJpKTsKLSAgICB0aGlzLmxvY2FsTmFtZSA9IGxvY2FsTmFtZTsKLSAgICB0aGlzLnByZWZpeCA9IHByZWZpeDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlVXJpKCkgeyByZXR1cm4gbmFtZXNwYWNlVXJpOyB9Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9jYWxOYW1lKCkgeyByZXR1cm4gbG9jYWxOYW1lOyB9Ci0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJlZml4KCkgeyByZXR1cm4gcHJlZml4OyB9Ci0KLSAgcHVibGljIHZvaWQgc2V0TmFtZXNwYWNlVXJpKFN0cmluZyBuYW1lc3BhY2VVcmkpIHsKLSAgICBoYXNoID0gMDsKLSAgICBpZiAobmFtZXNwYWNlVXJpICE9IG51bGwgJiYgbmFtZXNwYWNlVXJpLmVxdWFscygiIikpIHJldHVybjsKLSAgICB0aGlzLm5hbWVzcGFjZVVyaSA9IG5hbWVzcGFjZVVyaTsgCi0gIH0KLSAgcHVibGljIHZvaWQgc2V0TG9jYWxOYW1lKFN0cmluZyBsb2NhbE5hbWUpIHsgCi0gICAgdGhpcy5sb2NhbE5hbWUgPSBsb2NhbE5hbWU7IAotICAgIGhhc2ggPSAwOwotICB9Ci0gIHB1YmxpYyB2b2lkIHNldFByZWZpeChTdHJpbmcgcHJlZml4KSB7IHRoaXMucHJlZml4ID0gcHJlZml4OyB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRRdWFsaWZpZWROYW1lKCkgewotICAgIGlmIChwcmVmaXggIT0gbnVsbCAmJiBwcmVmaXgubGVuZ3RoKCkgPiAwKQotICAgICAgcmV0dXJuIHByZWZpeCArICI6IiArIGxvY2FsTmFtZTsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gbG9jYWxOYW1lOwotICB9Ci0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgaWYgKGdldE5hbWVzcGFjZVVyaSgpICE9IG51bGwpCi0gICAgICByZXR1cm4gIlsnIitnZXROYW1lc3BhY2VVcmkoKSsiJ106IitnZXRRdWFsaWZpZWROYW1lKCk7Ci0gICAgZWxzZSAKLSAgICAgIHJldHVybiBnZXRRdWFsaWZpZWROYW1lKCk7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgaW50IGhhc2hDb2RlKCkgewotICAgIGludCB0bXBfaGFzaCA9IGhhc2g7Ci0gICAgaWYgKHRtcF9oYXNoID09IDApIHsKLSAgICAgIHRtcF9oYXNoID0gMTc7Ci0gICAgICBpZiAobmFtZXNwYWNlVXJpICE9IG51bGwpIHsKLQl0bXBfaGFzaCA9IDM3KnRtcF9oYXNoICsgbmFtZXNwYWNlVXJpLmhhc2hDb2RlKCk7Ci0gICAgICB9Ci0gICAgICBpZiAobG9jYWxOYW1lICE9IG51bGwpIHsKLQl0bXBfaGFzaCA9IDM3KnRtcF9oYXNoICsgbG9jYWxOYW1lLmhhc2hDb2RlKCk7Ci0gICAgICB9Ci0gICAgICBoYXNoID0gdG1wX2hhc2g7Ci0gICAgfQotICAgIHJldHVybiB0bXBfaGFzaDsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7Ci0gICAgaWYgKG9iaiA9PSB0aGlzKSByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChvYmogaW5zdGFuY2VvZiBYTUxOYW1lKSB7Ci0gICAgICBmaW5hbCBYTUxOYW1lIG5hbWU9IChYTUxOYW1lKSBvYmo7Ci0KLSAgICAgIGZpbmFsIFN0cmluZyBsbmFtZSA9IGxvY2FsTmFtZTsKLSAgICAgIGlmICghKGxuYW1lPT1udWxsID8gbmFtZS5nZXRMb2NhbE5hbWUoKT09bnVsbCA6IAotCSAgICBsbmFtZS5lcXVhbHMobmFtZS5nZXRMb2NhbE5hbWUoKSkpKQotCXJldHVybiBmYWxzZTsKLQotICAgICAgZmluYWwgU3RyaW5nIHVyaSA9IG5hbWVzcGFjZVVyaTsKLSAgICAgIHJldHVybiAodXJpPT1udWxsID8gbmFtZS5nZXROYW1lc3BhY2VVcmkoKT09bnVsbCA6Ci0JICAgICAgdXJpLmVxdWFscyhuYW1lLmdldE5hbWVzcGFjZVVyaSgpKSk7Ci0JCi0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0KLQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL1htbE9iamVjdExpc3QuamF2YSBiL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9YbWxPYmplY3RMaXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1ZmRjYzAuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL1htbE9iamVjdExpc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNpbXBsZVZhbHVlOwotCi0vKioKLSAqIEEgY2xhc3MgdG8gaG9sZCBhbmQgY29tcGFyZSBhIGxpc3Qgb2YgWG1sT2JqZWN0cyBmb3IgdXNlIGJ5IGtleXMKLSAqIGtleXJlZnMgZHVyaW5nIHZhbGlkYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBYbWxPYmplY3RMaXN0Ci17Ci0gICAgcHJpdmF0ZSBmaW5hbCBYbWxPYmplY3RbXSBfb2JqZWN0czsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdCBhIG5ldyBlbXB0eSBvYmplY3QgbGlzdCBvZiB0aGUgZ2l2ZW4gZml4ZWQgc2l6ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgWG1sT2JqZWN0TGlzdChpbnQgb2JqZWN0Q291bnQpIHsKLSAgICAgICAgX29iamVjdHMgPSBuZXcgWG1sT2JqZWN0W29iamVjdENvdW50XTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXQgYW4gb2JqZWN0IGJ5IGluZGV4IHVubGVzcyBhIHZhbHVlIGhhcyBiZWVuIHByZXZpb3VzbHkKLSAgICAgKiBzZXQgYXQgdGhhdCBsb2NhdGlvbi4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIHdhcyBzZXQsIGZhbHNlIGlmIHRoZSB2YWx1ZSBoYXMKLSAgICAgKiBhbHJlYWR5IGJlZW4gc2V0Ci0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gc2V0KFhtbE9iamVjdCBvLCBpbnQgaW5kZXgpCi0gICAgewotICAgICAgICBpZiAoX29iamVjdHNbaW5kZXhdICE9IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgX29iamVjdHNbaW5kZXhdID0gbzsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGVzdHMgdGhhdCBhbGwgdmFsdWVzIGhhdmUgYmVlbiBzZXQuIE5lZWRlZCBmb3Iga2V5cy4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBmaWxsZWQoKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IF9vYmplY3RzLmxlbmd0aCA7IGkrKykKLSAgICAgICAgICAgIGlmIChfb2JqZWN0c1tpXSA9PSBudWxsKSByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIFRlc3RzIHRoYXQgYWxsIHZhbHVlcyBoYXZlIGJlZW4gc2V0LiBOZWVkZWQgZm9yIGtleXMuCi0gICAgICovCi0gICAgcHVibGljIGludCB1bmZpbGxlZCgpCi0gICAgewotICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCBfb2JqZWN0cy5sZW5ndGggOyBpKyspCi0gICAgICAgICAgICBpZiAoX29iamVjdHNbaV0gPT0gbnVsbCkgcmV0dXJuIGk7Ci0KLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykgewotICAgICAgICBpZiAoISggbyBpbnN0YW5jZW9mIFhtbE9iamVjdExpc3QpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFhtbE9iamVjdExpc3Qgb3RoZXIgPSAoWG1sT2JqZWN0TGlzdClvOwotCi0gICAgICAgIGlmIChvdGhlci5fb2JqZWN0cy5sZW5ndGggIT0gdGhpcy5fb2JqZWN0cy5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgX29iamVjdHMubGVuZ3RoIDsgaSsrKSB7Ci0gICAgICAgICAgICAvLyBJZ25vcmUgbWlzc2luZyB2YWx1ZXMKLSAgICAgICAgICAgIGlmIChfb2JqZWN0c1tpXSA9PSBudWxsIHx8IG90aGVyLl9vYmplY3RzW2ldID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoISBfb2JqZWN0c1tpXS52YWx1ZUVxdWFscyhvdGhlci5fb2JqZWN0c1tpXSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBoYXNoQ29kZSgpCi0gICAgewotICAgICAgICBpbnQgaCA9IDA7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgX29iamVjdHMubGVuZ3RoIDsgaSsrKQotICAgICAgICAgICAgaWYgKF9vYmplY3RzW2ldICE9IG51bGwpCi0gICAgICAgICAgICAgICAgaCA9IDMxICogaCArIF9vYmplY3RzW2ldLnZhbHVlSGFzaENvZGUoKTsKLQotICAgICAgICByZXR1cm4gaDsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHByZXR0eXRyaW0oU3RyaW5nIHMpCi0gICAgewotICAgICAgICBpbnQgZW5kOwotICAgICAgICBmb3IgKGVuZCA9IHMubGVuZ3RoKCk7IGVuZCA+IDA7IGVuZCAtPSAxKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIVhNTENoYXIuaXNTcGFjZShzLmNoYXJBdChlbmQgLSAxKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IHN0YXJ0OwotICAgICAgICBmb3IgKHN0YXJ0ID0gMDsgc3RhcnQgPCBlbmQ7IHN0YXJ0ICs9IDEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghWE1MQ2hhci5pc1NwYWNlKHMuY2hhckF0KHN0YXJ0KSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHMuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IF9vYmplY3RzLmxlbmd0aCA7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGkgIT0gMCkgYi5hcHBlbmQoIiAiKTsKLSAgICAgICAgICAgIGIuYXBwZW5kKHByZXR0eXRyaW0oKChTaW1wbGVWYWx1ZSlfb2JqZWN0c1tpXSkuc3RyaW5nVmFsdWUoKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGIudG9TdHJpbmcoKTsKLSAgICB9Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL1htbFN0cmVhbVV0aWxzLmphdmEgYi92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vWG1sU3RyZWFtVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI1ODEzNC4uMDAwMDAwMAotLS0gYS92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vWG1sU3RyZWFtVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2NSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb247Ci0KLWltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKLQotLyoqCi0gKiBkZWJ1Z2dpbmcgdXRpbGl0aWVzIGZvciBYbWxTdHJlYW1SZWFkZXIKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFhtbFN0cmVhbVV0aWxzCi17Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHByaW50RXZlbnQoWE1MU3RyZWFtUmVhZGVyIHhtbHIpCi0gIHsKLSAgICBTdHJpbmdCdWZmZXIgYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBiLmFwcGVuZCgiRVZFTlQ6WyIgKyB4bWxyLmdldExvY2F0aW9uKCkuZ2V0TGluZU51bWJlcigpICsgIl1bIiArCi0gICAgICAgICAgICAgeG1sci5nZXRMb2NhdGlvbigpLmdldENvbHVtbk51bWJlcigpICsgIl0gIik7Ci0gICAgYi5hcHBlbmQoZ2V0TmFtZSh4bWxyLmdldEV2ZW50VHlwZSgpKSk7Ci0gICAgYi5hcHBlbmQoIiBbIik7Ci0gICAgc3dpdGNoICh4bWxyLmdldEV2ZW50VHlwZSgpKSB7Ci0gICAgICBjYXNlIFhNTFN0cmVhbVJlYWRlci5TVEFSVF9FTEVNRU5UOgotICAgICAgICBiLmFwcGVuZCgiPCIpOwotICAgICAgICBwcmludE5hbWUoeG1sciwgYik7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgeG1sci5nZXROYW1lc3BhY2VDb3VudCgpOyBpKyspIHsKLSAgICAgICAgICBiLmFwcGVuZCgiICIpOwotICAgICAgICAgIFN0cmluZyBuID0geG1sci5nZXROYW1lc3BhY2VQcmVmaXgoaSk7Ci0gICAgICAgICAgaWYgKCJ4bWxucyIuZXF1YWxzKG4pKSB7Ci0gICAgICAgICAgICBiLmFwcGVuZCgieG1sbnM9XCIiICsgeG1sci5nZXROYW1lc3BhY2VVUkkoaSkgKyAiXCIiKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYi5hcHBlbmQoInhtbG5zOiIgKyBuKTsKLSAgICAgICAgICAgIGIuYXBwZW5kKCI9XCIiKTsKLSAgICAgICAgICAgIGIuYXBwZW5kKHhtbHIuZ2V0TmFtZXNwYWNlVVJJKGkpKTsKLSAgICAgICAgICAgIGIuYXBwZW5kKCJcIiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgeG1sci5nZXRBdHRyaWJ1dGVDb3VudCgpOyBpKyspIHsKLSAgICAgICAgICBiLmFwcGVuZCgiICIpOwotICAgICAgICAgIHByaW50TmFtZSh4bWxyLmdldEF0dHJpYnV0ZVByZWZpeChpKSwKLSAgICAgICAgICAgICAgICAgICAgeG1sci5nZXRBdHRyaWJ1dGVOYW1lc3BhY2UoaSksCi0gICAgICAgICAgICAgICAgICAgIHhtbHIuZ2V0QXR0cmlidXRlTG9jYWxOYW1lKGkpLAotICAgICAgICAgICAgICAgICAgICBiKTsKLSAgICAgICAgICBiLmFwcGVuZCgiPVwiIik7Ci0gICAgICAgICAgYi5hcHBlbmQoeG1sci5nZXRBdHRyaWJ1dGVWYWx1ZShpKSk7Ci0gICAgICAgICAgYi5hcHBlbmQoIlwiIik7Ci0gICAgICAgIH0KLQotICAgICAgICBiLmFwcGVuZCgiPiIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgWE1MU3RyZWFtUmVhZGVyLkVORF9FTEVNRU5UOgotICAgICAgICBiLmFwcGVuZCgiPC8iKTsKLSAgICAgICAgcHJpbnROYW1lKHhtbHIsIGIpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHhtbHIuZ2V0TmFtZXNwYWNlQ291bnQoKTsgaSsrKSB7Ci0gICAgICAgICAgYi5hcHBlbmQoIiAiKTsKLSAgICAgICAgICBTdHJpbmcgbiA9IHhtbHIuZ2V0TmFtZXNwYWNlUHJlZml4KGkpOwotICAgICAgICAgIGlmICgieG1sbnMiLmVxdWFscyhuKSkgewotICAgICAgICAgICAgYi5hcHBlbmQoInhtbG5zPVwiIiArIHhtbHIuZ2V0TmFtZXNwYWNlVVJJKGkpICsgIlwiIik7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGIuYXBwZW5kKCJ4bWxuczoiICsgbik7Ci0gICAgICAgICAgICBiLmFwcGVuZCgiPVwiIik7Ci0gICAgICAgICAgICBiLmFwcGVuZCh4bWxyLmdldE5hbWVzcGFjZVVSSShpKSk7Ci0gICAgICAgICAgICBiLmFwcGVuZCgiXCIiKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYi5hcHBlbmQoIj4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFhNTFN0cmVhbVJlYWRlci5TUEFDRToKLSAgICAgIGNhc2UgWE1MU3RyZWFtUmVhZGVyLkNIQVJBQ1RFUlM6Ci0gICAgICAgIC8vYi5hcHBlbmQoeG1sci5nZXRUZXh0KCkpOwotICAgICAgICBpbnQgc3RhcnQgPSB4bWxyLmdldFRleHRTdGFydCgpOwotICAgICAgICBpbnQgbGVuZ3RoID0geG1sci5nZXRUZXh0TGVuZ3RoKCk7Ci0gICAgICAgIGIuYXBwZW5kKG5ldyBTdHJpbmcoeG1sci5nZXRUZXh0Q2hhcmFjdGVycygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCkpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgWE1MU3RyZWFtUmVhZGVyLlBST0NFU1NJTkdfSU5TVFJVQ1RJT046Ci0gICAgICAgIFN0cmluZyB0YXJnZXQgPSB4bWxyLmdldFBJVGFyZ2V0KCk7Ci0gICAgICAgIGlmICh0YXJnZXQgPT0gbnVsbCkgdGFyZ2V0ID0gIiI7Ci0gICAgICAgIFN0cmluZyBkYXRhID0geG1sci5nZXRQSURhdGEoKTsKLSAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCkgZGF0YSA9ICIiOwotICAgICAgICBiLmFwcGVuZCgiPD8iKTsKLSAgICAgICAgYi5hcHBlbmQodGFyZ2V0ICsgIiAiICsgZGF0YSk7Ci0gICAgICAgIGIuYXBwZW5kKCI/PiIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgWE1MU3RyZWFtUmVhZGVyLkNEQVRBOgotICAgICAgICBiLmFwcGVuZCgiPCFbQ0RBVEFbIik7Ci0gICAgICAgIGlmICh4bWxyLmhhc1RleHQoKSkKLSAgICAgICAgICBiLmFwcGVuZCh4bWxyLmdldFRleHQoKSk7Ci0gICAgICAgIGIuYXBwZW5kKCJdXT4iKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgWE1MU3RyZWFtUmVhZGVyLkNPTU1FTlQ6Ci0gICAgICAgIGIuYXBwZW5kKCI8IS0tIik7Ci0gICAgICAgIGlmICh4bWxyLmhhc1RleHQoKSkKLSAgICAgICAgICBiLmFwcGVuZCh4bWxyLmdldFRleHQoKSk7Ci0gICAgICAgIGIuYXBwZW5kKCItLT4iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFhNTFN0cmVhbVJlYWRlci5FTlRJVFlfUkVGRVJFTkNFOgotICAgICAgICBiLmFwcGVuZCh4bWxyLmdldExvY2FsTmFtZSgpICsgIj0iKTsKLSAgICAgICAgaWYgKHhtbHIuaGFzVGV4dCgpKQotICAgICAgICAgIGIuYXBwZW5kKCJbIiArIHhtbHIuZ2V0VGV4dCgpICsgIl0iKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFhNTFN0cmVhbVJlYWRlci5TVEFSVF9ET0NVTUVOVDoKLSAgICAgICAgYi5hcHBlbmQoIjw/eG1sIik7Ci0gICAgICAgIGIuYXBwZW5kKCIgdmVyc2lvbj0nIiArIHhtbHIuZ2V0VmVyc2lvbigpICsgIiciKTsKLSAgICAgICAgYi5hcHBlbmQoIiBlbmNvZGluZz0nIiArIHhtbHIuZ2V0Q2hhcmFjdGVyRW5jb2RpbmdTY2hlbWUoKSArICInIik7Ci0gICAgICAgIGlmICh4bWxyLmlzU3RhbmRhbG9uZSgpKQotICAgICAgICAgIGIuYXBwZW5kKCIgc3RhbmRhbG9uZT0neWVzJyIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgYi5hcHBlbmQoIiBzdGFuZGFsb25lPSdubyciKTsKLSAgICAgICAgYi5hcHBlbmQoIj8+Iik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgfQotICAgIGIuYXBwZW5kKCJdIik7Ci0gICAgcmV0dXJuIGIudG9TdHJpbmcoKTsKLSAgfQotCi0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBwcmludE5hbWUoU3RyaW5nIHByZWZpeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHVyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxvY2FsTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIGIpCi0gIHsKLSAgICBpZiAodXJpICE9IG51bGwgJiYgISgiIi5lcXVhbHModXJpKSkpIGIuYXBwZW5kKCJbJyIgKyB1cmkgKyAiJ106Iik7Ci0gICAgaWYgKHByZWZpeCAhPSBudWxsKSBiLmFwcGVuZChwcmVmaXggKyAiOiIpOwotICAgIGlmIChsb2NhbE5hbWUgIT0gbnVsbCkgYi5hcHBlbmQobG9jYWxOYW1lKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnROYW1lKFhNTFN0cmVhbVJlYWRlciB4bWxyLCBTdHJpbmdCdWZmZXIgYikKLSAgewotICAgIGlmICh4bWxyLmhhc05hbWUoKSkgewotICAgICAgU3RyaW5nIHByZWZpeCA9IHhtbHIuZ2V0UHJlZml4KCk7Ci0gICAgICBTdHJpbmcgdXJpID0geG1sci5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgIFN0cmluZyBsb2NhbE5hbWUgPSB4bWxyLmdldExvY2FsTmFtZSgpOwotICAgICAgcHJpbnROYW1lKHByZWZpeCwgdXJpLCBsb2NhbE5hbWUsIGIpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldE5hbWUoaW50IGV2ZW50VHlwZSkKLSAgewotICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7Ci0gICAgICBjYXNlIFhNTFN0cmVhbVJlYWRlci5TVEFSVF9FTEVNRU5UOgotICAgICAgICByZXR1cm4gIlNUQVJUX0VMRU1FTlQiOwotICAgICAgY2FzZSBYTUxTdHJlYW1SZWFkZXIuRU5EX0VMRU1FTlQ6Ci0gICAgICAgIHJldHVybiAiRU5EX0VMRU1FTlQiOwotICAgICAgY2FzZSBYTUxTdHJlYW1SZWFkZXIuUFJPQ0VTU0lOR19JTlNUUlVDVElPTjoKLSAgICAgICAgcmV0dXJuICJQUk9DRVNTSU5HX0lOU1RSVUNUSU9OIjsKLSAgICAgIGNhc2UgWE1MU3RyZWFtUmVhZGVyLkNIQVJBQ1RFUlM6Ci0gICAgICAgIHJldHVybiAiQ0hBUkFDVEVSUyI7Ci0gICAgICBjYXNlIFhNTFN0cmVhbVJlYWRlci5TUEFDRToKLSAgICAgICAgcmV0dXJuICJTUEFDRSI7Ci0gICAgICBjYXNlIFhNTFN0cmVhbVJlYWRlci5DT01NRU5UOgotICAgICAgICByZXR1cm4gIkNPTU1FTlQiOwotICAgICAgY2FzZSBYTUxTdHJlYW1SZWFkZXIuU1RBUlRfRE9DVU1FTlQ6Ci0gICAgICAgIHJldHVybiAiU1RBUlRfRE9DVU1FTlQiOwotICAgICAgY2FzZSBYTUxTdHJlYW1SZWFkZXIuRU5EX0RPQ1VNRU5UOgotICAgICAgICByZXR1cm4gIkVORF9ET0NVTUVOVCI7Ci0gICAgICBjYXNlIFhNTFN0cmVhbVJlYWRlci5FTlRJVFlfUkVGRVJFTkNFOgotICAgICAgICByZXR1cm4gIkVOVElUWV9SRUZFUkVOQ0UiOwotICAgICAgY2FzZSBYTUxTdHJlYW1SZWFkZXIuQVRUUklCVVRFOgotICAgICAgICByZXR1cm4gIkFUVFJJQlVURSI7Ci0gICAgICBjYXNlIFhNTFN0cmVhbVJlYWRlci5EVEQ6Ci0gICAgICAgIHJldHVybiAiRFREIjsKLSAgICAgIGNhc2UgWE1MU3RyZWFtUmVhZGVyLkNEQVRBOgotICAgICAgICByZXR1cm4gIkNEQVRBIjsKLSAgICAgIGNhc2UgWE1MU3RyZWFtUmVhZGVyLk5BTUVTUEFDRToKLSAgICAgICAgcmV0dXJuICJOQU1FU1BBQ0UiOwotICAgICAgY2FzZSBYTUxTdHJlYW1SZWFkZXIuU1RBUlRfRU5USVRZOgotICAgICAgICByZXR1cm4gIlNUQVJUX0VOVElUWSI7Ci0gICAgICBjYXNlIFhNTFN0cmVhbVJlYWRlci5FTkRfRU5USVRZOgotICAgICAgICByZXR1cm4gIkVORF9FTlRJVFkiOwotCi0gICAgfQotICAgIHJldHVybiAiVU5LTk9XTl9FVkVOVF9UWVBFIjsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgaW50IGdldFR5cGUoU3RyaW5nIHZhbCkKLSAgewotICAgIGlmICh2YWwuZXF1YWxzKCJTVEFSVF9FTEVNRU5UIikpCi0gICAgICByZXR1cm4gWE1MU3RyZWFtUmVhZGVyLlNUQVJUX0VMRU1FTlQ7Ci0gICAgaWYgKHZhbC5lcXVhbHMoIlNQQUNFIikpCi0gICAgICByZXR1cm4gWE1MU3RyZWFtUmVhZGVyLlNQQUNFOwotICAgIGlmICh2YWwuZXF1YWxzKCJFTkRfRUxFTUVOVCIpKQotICAgICAgcmV0dXJuIFhNTFN0cmVhbVJlYWRlci5FTkRfRUxFTUVOVDsKLSAgICBpZiAodmFsLmVxdWFscygiUFJPQ0VTU0lOR19JTlNUUlVDVElPTiIpKQotICAgICAgcmV0dXJuIFhNTFN0cmVhbVJlYWRlci5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OOwotICAgIGlmICh2YWwuZXF1YWxzKCJDSEFSQUNURVJTIikpCi0gICAgICByZXR1cm4gWE1MU3RyZWFtUmVhZGVyLkNIQVJBQ1RFUlM7Ci0gICAgaWYgKHZhbC5lcXVhbHMoIkNPTU1FTlQiKSkKLSAgICAgIHJldHVybiBYTUxTdHJlYW1SZWFkZXIuQ09NTUVOVDsKLSAgICBpZiAodmFsLmVxdWFscygiU1RBUlRfRE9DVU1FTlQiKSkKLSAgICAgIHJldHVybiBYTUxTdHJlYW1SZWFkZXIuU1RBUlRfRE9DVU1FTlQ7Ci0gICAgaWYgKHZhbC5lcXVhbHMoIkVORF9ET0NVTUVOVCIpKQotICAgICAgcmV0dXJuIFhNTFN0cmVhbVJlYWRlci5FTkRfRE9DVU1FTlQ7Ci0gICAgaWYgKHZhbC5lcXVhbHMoIkFUVFJJQlVURSIpKQotICAgICAgcmV0dXJuIFhNTFN0cmVhbVJlYWRlci5BVFRSSUJVVEU7Ci0gICAgaWYgKHZhbC5lcXVhbHMoIkRURCIpKQotICAgICAgcmV0dXJuIFhNTFN0cmVhbVJlYWRlci5EVEQ7Ci0gICAgaWYgKHZhbC5lcXVhbHMoIkNEQVRBIikpCi0gICAgICByZXR1cm4gWE1MU3RyZWFtUmVhZGVyLkNEQVRBOwotICAgIGlmICh2YWwuZXF1YWxzKCJOQU1FU1BBQ0UiKSkKLSAgICAgIHJldHVybiBYTUxTdHJlYW1SZWFkZXIuTkFNRVNQQUNFOwotICAgIGlmICh2YWwuZXF1YWxzKCJTVEFSVF9FTlRJVFkiKSkKLSAgICAgIHJldHVybiBYTUxTdHJlYW1SZWFkZXIuU1RBUlRfRU5USVRZOwotICAgIGlmICh2YWwuZXF1YWxzKCJFTkRfRU5USVRZIikpCi0gICAgICByZXR1cm4gWE1MU3RyZWFtUmVhZGVyLkVORF9FTlRJVFk7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL1htbFdoaXRlc3BhY2UuamF2YSBiL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9YbWxXaGl0ZXNwYWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5ZTJmMmEuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL1htbFdoaXRlc3BhY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4OSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci0KLXB1YmxpYyBjbGFzcyBYbWxXaGl0ZXNwYWNlCi17Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV1NfVU5TUEVDSUZJRUQgPSBTY2hlbWFUeXBlLldTX1VOU1BFQ0lGSUVEOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdTX1BSRVNFUlZFID0gU2NoZW1hVHlwZS5XU19QUkVTRVJWRTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXU19SRVBMQUNFID0gU2NoZW1hVHlwZS5XU19SRVBMQUNFOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdTX0NPTExBUFNFID0gU2NoZW1hVHlwZS5XU19DT0xMQVBTRTsKLQotCi0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzU3BhY2UoY2hhciBjaCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY2gpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgJyAnOgotICAgICAgICAgICAgY2FzZSAnXG4nOgotICAgICAgICAgICAgY2FzZSAnXHInOgotICAgICAgICAgICAgY2FzZSAnXHQnOgotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNBbGxTcGFjZShTdHJpbmcgdikKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdi5sZW5ndGgoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWlzU3BhY2Uodi5jaGFyQXQoaSkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBjb2xsYXBzZShTdHJpbmcgdikKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb2xsYXBzZSh2LCBYbWxXaGl0ZXNwYWNlLldTX0NPTExBUFNFKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgYWxnb3JpdGhtIHVzZWQgYnkgYXBwbHlfd3NjYW5vbjogc29tZXRpbWVzIHVzZWQgaW4gaW1wbHMuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgY29sbGFwc2UoU3RyaW5nIHYsIGludCB3c3IpCi0gICAgewotICAgICAgICBpZiAod3NyID09IFNjaGVtYVR5cGUuV1NfUFJFU0VSVkUgfHwgd3NyID09IFNjaGVtYVR5cGUuV1NfVU5TUEVDSUZJRUQpCi0gICAgICAgICAgICByZXR1cm4gdjsKLQotICAgICAgICBpZiAodi5pbmRleE9mKCdcbicpID49IDApCi0gICAgICAgICAgICB2ID0gdi5yZXBsYWNlKCdcbicsICcgJyk7Ci0gICAgICAgIGlmICh2LmluZGV4T2YoJ1x0JykgPj0gMCkKLSAgICAgICAgICAgIHYgPSB2LnJlcGxhY2UoJ1x0JywgJyAnKTsKLSAgICAgICAgaWYgKHYuaW5kZXhPZignXHInKSA+PSAwKQotICAgICAgICAgICAgdiA9IHYucmVwbGFjZSgnXHInLCAnICcpOwotCi0gICAgICAgIGlmICh3c3IgPT0gU2NoZW1hVHlwZS5XU19SRVBMQUNFKQotICAgICAgICAgICAgcmV0dXJuIHY7Ci0KLSAgICAgICAgaW50IGogPSAwOwotICAgICAgICBpbnQgbGVuID0gdi5sZW5ndGgoKTsKLSAgICAgICAgaWYgKGxlbiA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIHY7Ci0KLSAgICAgICAgaW50IGk7Ci0KLSAgICAgICAgLyogYSB0cmljazogZXhhbWluZSBldmVyeSBvdGhlciBjaGFyYWN0ZXIgbG9va2luZyBmb3IgcGFpcnMgb2Ygc3BhY2VzICovCi0gICAgICAgIGlmICh2LmNoYXJBdCgwKSAhPSAnICcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGV4YW1pbmU6IHsKLSAgICAgICAgICAgICAgICBmb3IgKGogPSAyOyBqIDwgbGVuOyBqICs9IDIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAodi5jaGFyQXQoaikgPT0gJyAnKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodi5jaGFyQXQoaiAtIDEpID09ICcgJykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBleGFtaW5lOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPT0gbGVuIC0gMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBleGFtaW5lOwotICAgICAgICAgICAgICAgICAgICAgICAgaisrOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYuY2hhckF0KGopID09ICcgJykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBleGFtaW5lOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChqID09IGxlbiAmJiB2LmNoYXJBdChqIC0gMSkgPT0gJyAnKQotICAgICAgICAgICAgICAgICAgICBicmVhayBleGFtaW5lOwotICAgICAgICAgICAgICAgIHJldHVybiB2OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogaiBpcyBwb2ludGluZyBhdCB0aGUgZmlyc3Qgd3MgdG8gYmUgcmVtb3ZlZCwgb3IgcGFzdCBlbmQgKi8KLSAgICAgICAgICAgIGkgPSBqOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBqIGlzIHBvaW50aW5nIGF0IHRoZSBsYXN0IHdoaXRlc3BhY2UgaW4gdGhlIGluaXRpYWwgcnVuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHdoaWxlIChqICsgMSA8IHYubGVuZ3RoKCkgJiYgdi5jaGFyQXQoaiArIDEpID09ICcgJykKLSAgICAgICAgICAgICAgICBqICs9IDE7Ci0gICAgICAgICAgICBpID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIGNoYXJbXSBjaCA9IHYudG9DaGFyQXJyYXkoKTsKLQotICAgICAgICBzaGlmdGVyOiBmb3IgKDs7KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKDs7KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8qIGogd2FzIHdzIG9yIHBhc3QgZW5kICovCi0gICAgICAgICAgICAgICAgaisrOwotICAgICAgICAgICAgICAgIGlmIChqID49IGxlbikKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsgc2hpZnRlcjsKLSAgICAgICAgICAgICAgICBpZiAodi5jaGFyQXQoaikgIT0gJyAnKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAoOzspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogaiB3YXMgbm9ud3MgKi8KLSAgICAgICAgICAgICAgICBjaFtpKytdID0gY2hbaisrXTsKLSAgICAgICAgICAgICAgICBpZiAoaiA+PSBsZW4pCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrIHNoaWZ0ZXI7Ci0gICAgICAgICAgICAgICAgaWYgKGNoW2pdID09ICcgJykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNoW2krK10gPSBjaFtqKytdOwotICAgICAgICAgICAgICAgICAgICBpZiAoaiA+PSBsZW4pCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhayBzaGlmdGVyOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2hbal0gPT0gJyAnKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoY2gsIDAsIChpID09IDAgfHwgY2hbaSAtIDFdICE9ICcgJykgPyBpIDogaSAtIDEpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL1hzVHlwZUNvbnZlcnRlci5qYXZhIGIvdjIvc3JjL2NvbW1vbi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29tbW9uL1hzVHlwZUNvbnZlcnRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWJjNDg2Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9Yc1R5cGVDb252ZXJ0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwNCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEVycm9yOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLk5hbWVzcGFjZUNvbnRleHQ7Ci1pbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7Ci1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBYc1R5cGVDb252ZXJ0ZXIKLXsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBPU19JTkZfTEVYID0gIklORiI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBORUdfSU5GX0xFWCA9ICItSU5GIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTl9MRVggPSAiTmFOIjsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyIE5BTUVTUEFDRV9TRVAgPSAnOic7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFTVBUWV9QUkVGSVggPSAiIjsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gZmxvYXQgPT09PT09PT09PT09PT09PT09PT09PT09Ci0gIHB1YmxpYyBzdGF0aWMgZmxvYXQgbGV4RmxvYXQoU3RyaW5nIHYsIENvbGxlY3Rpb24gZXJyb3JzKQotICB7Ci0gICAgdHJ5IHsKLSAgICAgIC8vY3VycmVudCBqZGsgaW1wbCBvZiBwYXJzZUZsb2F0IGNhbGxzIHRyaW0oKSBvbiB0aGUgc3RyaW5nLgotICAgICAgLy9Bbnkgb3RoZXIgc3BhY2UgaXMgaWxsZWdhbCBhbnl3YXksIHdoZXRoZXIgdGhlcmUgYXJlIG9uZSBvciBtb3JlIHNwYWNlcy4KLSAgICAgIC8vc28gbm8gbmVlZCB0byBkbyBhIGNvbGxhcHNlIHBhc3MgdGhyb3VnaCB0aGUgc3RyaW5nLgotICAgICAgcmV0dXJuIEZsb2F0LnBhcnNlRmxvYXQodik7Ci0gICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgIGlmICh2LmVxdWFscyhQT1NfSU5GX0xFWCkpIHJldHVybiBGbG9hdC5QT1NJVElWRV9JTkZJTklUWTsKLSAgICAgIGlmICh2LmVxdWFscyhORUdfSU5GX0xFWCkpIHJldHVybiBGbG9hdC5ORUdBVElWRV9JTkZJTklUWTsKLSAgICAgIGlmICh2LmVxdWFscyhOQU5fTEVYKSkgcmV0dXJuIEZsb2F0Lk5hTjsKLQotICAgICAgLy9UT0RPOiBpMThuCi0gICAgICBTdHJpbmcgbXNnID0gImludmFsaWQgZmxvYXQ6ICIgKyB2OwotICAgICAgZXJyb3JzLmFkZChYbWxFcnJvci5mb3JNZXNzYWdlKG1zZykpOwotCi0gICAgICByZXR1cm4gRmxvYXQuTmFOOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHByaW50RmxvYXQoZmxvYXQgdmFsdWUpCi0gIHsKLSAgICBpZiAodmFsdWUgPT0gRmxvYXQuUE9TSVRJVkVfSU5GSU5JVFkpCi0gICAgICByZXR1cm4gUE9TX0lORl9MRVg7Ci0gICAgZWxzZSBpZiAodmFsdWUgPT0gRmxvYXQuTkVHQVRJVkVfSU5GSU5JVFkpCi0gICAgICByZXR1cm4gTkVHX0lORl9MRVg7Ci0gICAgZWxzZSBpZiAodmFsdWUgPT0gRmxvYXQuTmFOKQotICAgICAgcmV0dXJuIE5BTl9MRVg7Ci0gICAgZWxzZQotICAgICAgcmV0dXJuIEZsb2F0LnRvU3RyaW5nKHZhbHVlKTsKLSAgfQotCi0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IGRvdWJsZSA9PT09PT09PT09PT09PT09PT09PT09PT0KLSAgcHVibGljIHN0YXRpYyBkb3VibGUgbGV4RG91YmxlKFN0cmluZyB2LCBDb2xsZWN0aW9uIGVycm9ycykKLSAgewotICAgIHRyeSB7Ci0gICAgICAvL2N1cnJlbnQgamRrIGltcGwgb2YgcGFyc2VEb3VibGUgY2FsbHMgdHJpbSgpIG9uIHRoZSBzdHJpbmcuCi0gICAgICAvL0FueSBvdGhlciBzcGFjZSBpcyBpbGxlZ2FsIGFueXdheSwgd2hldGhlciB0aGVyZSBhcmUgb25lIG9yIG1vcmUgc3BhY2VzLgotICAgICAgLy9zbyBubyBuZWVkIHRvIGRvIGEgY29sbGFwc2UgcGFzcyB0aHJvdWdoIHRoZSBzdHJpbmcuCi0gICAgICByZXR1cm4gRG91YmxlLnBhcnNlRG91YmxlKHYpOwotICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBpZiAodi5lcXVhbHMoUE9TX0lORl9MRVgpKSByZXR1cm4gRG91YmxlLlBPU0lUSVZFX0lORklOSVRZOwotICAgICAgaWYgKHYuZXF1YWxzKE5FR19JTkZfTEVYKSkgcmV0dXJuIERvdWJsZS5ORUdBVElWRV9JTkZJTklUWTsKLSAgICAgIGlmICh2LmVxdWFscyhOQU5fTEVYKSkgcmV0dXJuIERvdWJsZS5OYU47Ci0KLSAgICAgIC8vVE9ETzogaTE4bgotICAgICAgU3RyaW5nIG1zZyA9ICJpbnZhbGlkIGRvdWJsZTogIiArIHY7Ci0gICAgICBlcnJvcnMuYWRkKFhtbEVycm9yLmZvck1lc3NhZ2UobXNnKSk7Ci0KLSAgICAgIHJldHVybiBEb3VibGUuTmFOOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHByaW50RG91YmxlKGRvdWJsZSB2YWx1ZSkKLSAgewotICAgIGlmICh2YWx1ZSA9PSBEb3VibGUuUE9TSVRJVkVfSU5GSU5JVFkpCi0gICAgICByZXR1cm4gUE9TX0lORl9MRVg7Ci0gICAgZWxzZSBpZiAodmFsdWUgPT0gRG91YmxlLk5FR0FUSVZFX0lORklOSVRZKQotICAgICAgcmV0dXJuIE5FR19JTkZfTEVYOwotICAgIGVsc2UgaWYgKHZhbHVlID09IERvdWJsZS5OYU4pCi0gICAgICByZXR1cm4gTkFOX0xFWDsKLSAgICBlbHNlCi0gICAgICByZXR1cm4gRG91YmxlLnRvU3RyaW5nKHZhbHVlKTsKLSAgfQotCi0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IGRlY2ltYWwgPT09PT09PT09PT09PT09PT09PT09PT09Ci0gIHB1YmxpYyBzdGF0aWMgQmlnRGVjaW1hbCBsZXhEZWNpbWFsKFN0cmluZyB2LCBDb2xsZWN0aW9uIGVycm9ycykKLSAgewotICAgIHRyeSB7Ci0gICAgICAvL1RPRE86IHJldmlldyB0aGlzCi0gICAgICAvL05PVEU6IHdlIHRyaW0gdW5uZWVkZWQgemVyb3MgZnJvbSB0aGUgc3RyaW5nIGJlY2F1c2UKLSAgICAgIC8vamF2YS5tYXRoLkJpZ0RlY2ltYWwgY29uc2lkZXJzIHRoZW0gc2lnbmlmaWNhbnQgZm9yIGl0cwotICAgICAgLy9lcXVhbHMoKSBtZXRob2QsIGJ1dCB0aGUgeG1sIHZhbHVlCi0gICAgICAvL3NwYWNlIGRvZXMgbm90IGNvbnNpZGVyIHRoZW0gc2lnbmlmaWNhbnQuCi0gICAgICAvL1NlZSBodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA1L3htbHNjaGVtYS1lcnJhdGEjZTItNDQKLSAgICAgIHJldHVybiBuZXcgQmlnRGVjaW1hbCh0cmltVHJhaWxpbmdaZXJvcyh2KSk7Ci0gICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vVE9ETzogaTE4bgotICAgICAgU3RyaW5nIG1zZyA9ICJpbnZhbGlkIGxvbmc6ICIgKyB2OwotICAgICAgZXJyb3JzLmFkZChYbWxFcnJvci5mb3JNZXNzYWdlKG1zZykpOwotICAgICAgcmV0dXJuIG5ldyBCaWdEZWNpbWFsKHRyaW1UcmFpbGluZ1plcm9zKHYpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBwcmludERlY2ltYWwoQmlnRGVjaW1hbCB2YWx1ZSkKLSAgewotICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpOwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IGludGVnZXIgPT09PT09PT09PT09PT09PT09PT09PT09Ci0gIHB1YmxpYyBzdGF0aWMgQmlnSW50ZWdlciBsZXhJbnRlZ2VyKFN0cmluZyB2LCBDb2xsZWN0aW9uIGVycm9ycykKLSAgewotICAgIHRyeSB7Ci0gICAgICAvL1RPRE86IGNvbnNpZGVyIHNwZWNpYWwgY2FzaW5nIHplcm8gYW5kIG9uZSB0byByZXR1cm4gc3RhdGljIHZhbHVlcwotICAgICAgLy9mcm9tIEJpZ0ludGVnZXIgdG8gYXZvaWQgb2JqZWN0IGNyZWF0aW9uLgotICAgICAgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKHRyaW1Jbml0aWFsUGx1cyh2KSk7Ci0gICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vVE9ETzogaTE4bgotICAgICAgU3RyaW5nIG1zZyA9ICJpbnZhbGlkIGxvbmc6ICIgKyB2OwotICAgICAgZXJyb3JzLmFkZChYbWxFcnJvci5mb3JNZXNzYWdlKG1zZykpOwotICAgICAgcmV0dXJuIEJpZ0ludGVnZXIuWkVSTzsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBwcmludEludGVnZXIoQmlnSW50ZWdlciB2YWx1ZSkKLSAgewotICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpOwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IGxvbmcgPT09PT09PT09PT09PT09PT09PT09PT09Ci0gIHB1YmxpYyBzdGF0aWMgbG9uZyBsZXhMb25nKFN0cmluZyB2LCBDb2xsZWN0aW9uIGVycm9ycykKLSAgewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gTG9uZy5wYXJzZUxvbmcodHJpbUluaXRpYWxQbHVzKHYpKTsKLSAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgLy9UT0RPOiBpMThuCi0gICAgICBTdHJpbmcgbXNnID0gImludmFsaWQgbG9uZzogIiArIHY7Ci0gICAgICBlcnJvcnMuYWRkKFhtbEVycm9yLmZvck1lc3NhZ2UobXNnKSk7Ci0gICAgICByZXR1cm4gMEw7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgcHJpbnRMb25nKGxvbmcgdmFsdWUpCi0gIHsKLSAgICByZXR1cm4gTG9uZy50b1N0cmluZyh2YWx1ZSk7Ci0gIH0KLQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBzaG9ydCA9PT09PT09PT09PT09PT09PT09PT09PT0KLSAgcHVibGljIHN0YXRpYyBzaG9ydCBsZXhTaG9ydChTdHJpbmcgdiwgQ29sbGVjdGlvbiBlcnJvcnMpCi0gIHsKLSAgICB0cnkgewotICAgICAgcmV0dXJuIFNob3J0LnBhcnNlU2hvcnQodHJpbUluaXRpYWxQbHVzKHYpKTsKLSAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgLy9UT0RPOiBpMThuCi0gICAgICBTdHJpbmcgbXNnID0gImludmFsaWQgc2hvcnQ6ICIgKyB2OwotICAgICAgZXJyb3JzLmFkZChYbWxFcnJvci5mb3JNZXNzYWdlKG1zZykpOwotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgcHJpbnRTaG9ydChzaG9ydCB2YWx1ZSkKLSAgewotICAgIHJldHVybiBTaG9ydC50b1N0cmluZyh2YWx1ZSk7Ci0gIH0KLQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PSBpbnQgPT09PT09PT09PT09PT09PT09PT09PT09Ci0gIHB1YmxpYyBzdGF0aWMgaW50IGxleEludChTdHJpbmcgdiwgQ29sbGVjdGlvbiBlcnJvcnMpCi0gIHsKLSAgICB0cnkgewotICAgICAgcmV0dXJuIEludGVnZXIucGFyc2VJbnQodHJpbUluaXRpYWxQbHVzKHYpKTsKLSAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgLy9UT0RPOiBpMThuCi0gICAgICBTdHJpbmcgbXNnID0gImludmFsaWQgaW50OiAiICsgdjsKLSAgICAgIGVycm9ycy5hZGQoWG1sRXJyb3IuZm9yTWVzc2FnZShtc2cpKTsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHByaW50SW50KGludCB2YWx1ZSkKLSAgewotICAgIHJldHVybiBJbnRlZ2VyLnRvU3RyaW5nKHZhbHVlKTsKLSAgfQotCi0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IGJ5dGUgPT09PT09PT09PT09PT09PT09PT09PT09Ci0gIHB1YmxpYyBzdGF0aWMgYnl0ZSBsZXhCeXRlKFN0cmluZyB2LCBDb2xsZWN0aW9uIGVycm9ycykKLSAgewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gQnl0ZS5wYXJzZUJ5dGUodHJpbUluaXRpYWxQbHVzKHYpKTsKLSAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgLy9UT0RPOiBpMThuCi0gICAgICBTdHJpbmcgbXNnID0gImludmFsaWQgYnl0ZTogIiArIHY7Ci0gICAgICBlcnJvcnMuYWRkKFhtbEVycm9yLmZvck1lc3NhZ2UobXNnKSk7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBwcmludEJ5dGUoYnl0ZSB2YWx1ZSkKLSAgewotICAgIHJldHVybiBCeXRlLnRvU3RyaW5nKHZhbHVlKTsKLSAgfQotCi0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IGJvb2xlYW4gPT09PT09PT09PT09PT09PT09PT09PT09Ci0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBsZXhCb29sZWFuKFN0cmluZyB2LCBDb2xsZWN0aW9uIGVycm9ycykKLSAgewotICAgIGlmICgidHJ1ZSIuZXF1YWxzKHYpIHx8ICIxIi5lcXVhbHModikpIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoImZhbHNlIi5lcXVhbHModikgfHwgIjAiLmVxdWFscyh2KSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICAvL1RPRE86IGkxOG4KLSAgICAgIFN0cmluZyBtc2cgPSAiaW52YWxpZCBib29sZWFuOiAiICsgdjsKLSAgICAgIGVycm9ycy5hZGQoWG1sRXJyb3IuZm9yTWVzc2FnZShtc2cpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBwcmludEJvb2xlYW4oYm9vbGVhbiB2YWx1ZSkKLSAgewotICAgIHJldHVybiAodmFsdWUgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKLSAgfQotCi0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09IHN0cmluZyA9PT09PT09PT09PT09PT09PT09PT09PT0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgbGV4U3RyaW5nKFN0cmluZyB2LCBDb2xsZWN0aW9uIGVycm9ycykKLSAgewotICAgIHJldHVybiB2OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgcHJpbnRTdHJpbmcoU3RyaW5nIHZhbHVlKQotICB7Ci0gICAgcmV0dXJuIHZhbHVlOwotICB9Ci0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT0gUU5hbWUgPT09PT09PT09PT09PT09PT09PT09PT09Ci0gIHB1YmxpYyBzdGF0aWMgUU5hbWUgbGV4UU5hbWUoU3RyaW5nIHhzZF9xbmFtZSwgQ29sbGVjdGlvbiBlcnJvcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZXNwYWNlQ29udGV4dCBuc2NvbnRleHQpCi0gIHsKLQotICAgIGZpbmFsIGludCBpZHggPSBpbmRleE9mTmFtZXNwYWNlU2VwZXJhdG9yKHhzZF9xbmFtZSwgZXJyb3JzKTsKLSAgICBTdHJpbmcgcHJlZml4OwotICAgIFN0cmluZyBsb2NhbHBhcnQ7Ci0gICAgaWYgKGlkeCA8IDApIHsKLSAgICAgIHByZWZpeCA9IEVNUFRZX1BSRUZJWDsKLSAgICAgIGxvY2FscGFydCA9IHhzZF9xbmFtZTsKLSAgICB9IGVsc2UgewotICAgICAgcHJlZml4ID0geHNkX3FuYW1lLnN1YnN0cmluZygwLCBpZHgpOwotICAgICAgbG9jYWxwYXJ0ID0geHNkX3FuYW1lLnN1YnN0cmluZygxICsgaWR4KTsKLSAgICB9Ci0gICAgU3RyaW5nIG5hbWVzcGFjZVVyaSA9IGdldFVyaUZyb21Db250ZXh0KHByZWZpeCwgeHNkX3FuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc2NvbnRleHQsIGVycm9ycyk7Ci0gICAgcmV0dXJuIG5ldyBRTmFtZShuYW1lc3BhY2VVcmksIGxvY2FscGFydCwgcHJlZml4KTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHByaW50UU5hbWUoUU5hbWUgcW5hbWUsIE5hbWVzcGFjZUNvbnRleHQgbnNDb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbGxlY3Rpb24gZXJyb3JzKQotICB7Ci0gICAgZmluYWwgU3RyaW5nIHVyaSA9IHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpOwotICAgIFN0cmluZyBwcmVmaXggPSBuc0NvbnRleHQuZ2V0UHJlZml4KHVyaSk7Ci0gICAgaWYgKHByZWZpeCA9PSBudWxsKSB7Ci0gICAgICBTdHJpbmcgbXNnID0gIk5hbWVzcGFjZUNvbnRleHQgZG9lcyBub3QgcHJvdmlkZSIgKwotICAgICAgICAiIHByZWZpeCBmb3IgbmFtZXNwYWNlVVJJICIgKyB1cmk7Ci0gICAgICBlcnJvcnMuYWRkKFhtbEVycm9yLmZvck1lc3NhZ2UobXNnKSk7Ci0gICAgfQotICAgIHJldHVybiBnZXRRTmFtZVN0cmluZyh1cmksIHFuYW1lLmdldExvY2FsUGFydCgpLCBwcmVmaXgpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UU5hbWVTdHJpbmcoU3RyaW5nIHVyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxvY2FscGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHByZWZpeCkKLSAgewotICAgIGlmICh1cmkgIT0gbnVsbCAmJgotICAgICAgcHJlZml4ICE9IG51bGwgJiYKLSAgICAgIHByZWZpeC5sZW5ndGgoKSA+IDApIHsKLSAgICAgIHJldHVybiAocHJlZml4ICsgTkFNRVNQQUNFX1NFUCArIGxvY2FscGFydCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBsb2NhbHBhcnQ7Ci0gICAgfQotICB9Ci0KLQotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdHJpbUluaXRpYWxQbHVzKFN0cmluZyB4bWwpCi0gIHsKLSAgICBpZiAoeG1sLmNoYXJBdCgwKSA9PSAnKycpIHsKLSAgICAgIHJldHVybiB4bWwuc3Vic3RyaW5nKDEpOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4geG1sOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGludCBpbmRleE9mTmFtZXNwYWNlU2VwZXJhdG9yKFN0cmluZyB4bWwsIENvbGxlY3Rpb24gZXJyb3JzKQotICB7Ci0gICAgZmluYWwgaW50IGlkeCA9IHhtbC5pbmRleE9mKE5BTUVTUEFDRV9TRVApOwotCi0gICAgaWYgKGlkeCA9PSAwKSB7Ci0gICAgICBTdHJpbmcgbXNnID0gImFuIGVtcHR5IHByZWZpeCBpcyBub3QgYWxsb3dlZCBpbiBhbiB4c2Q6UU5hbWUgdmFsdWUiOwotICAgICAgZXJyb3JzLmFkZChYbWxFcnJvci5mb3JNZXNzYWdlKG1zZykpOwotICAgIH0KLSAgICByZXR1cm4gaWR4OwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFVyaUZyb21Db250ZXh0KFN0cmluZyBwcmVmaXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgb3JpZ2luYWxfeG1sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZXNwYWNlQ29udGV4dCBuc2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xsZWN0aW9uIGVycm9ycykKLSAgewotICAgIFN0cmluZyB1cmkgPSBuc2NvbnRleHQuZ2V0TmFtZXNwYWNlVVJJKHByZWZpeCk7Ci0gICAgaWYgKHVyaSA9PSBudWxsKSB7Ci0gICAgICBTdHJpbmcgbXNnID0gImludmFsaWQgcW5hbWU6ICIgKyBvcmlnaW5hbF94bWw7Ci0gICAgICBlcnJvcnMuYWRkKFhtbEVycm9yLmZvck1lc3NhZ2UobXNnKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHVyaTsKLSAgfQotCi0KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRyaW1UcmFpbGluZ1plcm9zKFN0cmluZyB4c2RfZGVjaW1hbCkKLSAgewotICAgIGZpbmFsIGludCBsYXN0X2NoYXJfaWR4ID0geHNkX2RlY2ltYWwubGVuZ3RoKCkgLSAxOwotICAgIGlmICh4c2RfZGVjaW1hbC5jaGFyQXQobGFzdF9jaGFyX2lkeCkgPT0gJzAnKSB7Ci0gICAgICBmaW5hbCBpbnQgbGFzdF9wb2ludCA9IHhzZF9kZWNpbWFsLmxhc3RJbmRleE9mKCcuJyk7Ci0gICAgICBpZiAobGFzdF9wb2ludCA+PSAwKSB7Ci0gICAgICAgIC8vZmluZCBsYXN0IHRyYWlsaW5nIHplcm8KLSAgICAgICAgZm9yIChpbnQgaWR4ID0gbGFzdF9jaGFyX2lkeDsgaWR4ID4gbGFzdF9wb2ludDsgaWR4LS0pIHsKLSAgICAgICAgICBpZiAoeHNkX2RlY2ltYWwuY2hhckF0KGlkeCkgIT0gJzAnKSB7Ci0gICAgICAgICAgICByZXR1cm4geHNkX2RlY2ltYWwuc3Vic3RyaW5nKDAsIGlkeCArIDEpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvL3JlYWNoaW5nIGhlcmUgbWVhbnMgdGhlIHN0cmluZyBtYXRjaGVkIHh4eC4wKgotICAgICAgICByZXR1cm4geHNkX2RlY2ltYWwuc3Vic3RyaW5nKDAsIGxhc3RfcG9pbnQpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4geHNkX2RlY2ltYWw7Ci0gIH0KLQotICAvL3VzZSBvbmx5IGFzIG5lZWRlZAotICBwdWJsaWMgc3RhdGljIFN0cmluZyBzdHJpbmdWYWx1ZShDaGFyU2VxdWVuY2UgdmFsdWUpCi0gIHsKLSAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvY29tbW9uL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb21tb24vcmVhZG1lLnR4dCBiL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9yZWFkbWUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTI1MTQzLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9jb21tb24vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2NvbW1vbi9yZWFkbWUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1UaGVyZSBhcmUgaXNvbGF0ZWQgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgdGFrZW4gZnJvbSB0aGUgQXBhY2hlCi1YZXJjZXMtSiAyLjAgcHJvamVjdAotCi1JdCBjb250YWlucyB2ZXJ5IG1pbm9yIG1vZGlmaWNhdGlvbnMgaW5jbHVkaW5nIGEgY2hhbmdlIGluIG5hbWVzcGFjZS4KLQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2NvbmZpZ3NjaGVtYS9zY2hlbWEvYmluZGluZy1jb25maWcueHNkIGIvdjIvc3JjL2NvbmZpZ3NjaGVtYS9zY2hlbWEvYmluZGluZy1jb25maWcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWYxNzM2Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9jb25maWdzY2hlbWEvc2NoZW1hL2JpbmRpbmctY29uZmlnLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi08eHM6c2NoZW1hCi0gIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgeG1sbnM6dG5zPSJodHRwOi8veG1sYmVhbnMuYXBhY2hlLm9yZy8yMDAzLzA5L2JpbmRpbmctY29uZmlnIgotICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly94bWxiZWFucy5hcGFjaGUub3JnLzIwMDMvMDkvYmluZGluZy1jb25maWciCi0gIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJiaW5kaW5nLWNvbmZpZyI+Ci0gICAgPHhzOmNvbXBsZXhUeXBlPgotICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJiaW5kaW5ncyIgdHlwZT0idG5zOmJpbmRpbmctdGFibGUiLz4KLSAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ieG1sLXRvLXBvam8iIHR5cGU9InRuczptYXBwaW5nLXRhYmxlIi8+Ci0gICAgICAgIDx4czplbGVtZW50IG5hbWU9InhtbC10by14bWxvYmoiIHR5cGU9InRuczptYXBwaW5nLXRhYmxlIi8+Ci0gICAgICAgIDx4czplbGVtZW50IG5hbWU9ImphdmEtdG8teG1sIiB0eXBlPSJ0bnM6bWFwcGluZy10YWJsZSIvPgotICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJqYXZhLXRvLWVsZW1lbnQiIHR5cGU9InRuczptYXBwaW5nLXRhYmxlIi8+Ci0gICAgICA8L3hzOnNlcXVlbmNlPgotICAgIDwveHM6Y29tcGxleFR5cGU+Ci0gIDwveHM6ZWxlbWVudD4KLQotCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJiaW5kaW5nLXRhYmxlIj4KLSAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJiaW5kaW5nLXR5cGUiIHR5cGU9InRuczpiaW5kaW5nLXR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzOnNlcXVlbmNlPgotICA8L3hzOmNvbXBsZXhUeXBlPgotCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJtYXBwaW5nLXRhYmxlIj4KLSAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJtYXBwaW5nIiB0eXBlPSJ0bnM6bWFwcGluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Im1hcHBpbmciPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgIDx4czplbGVtZW50IG5hbWU9InhtbGNvbXBvbmVudCIgdHlwZT0idG5zOnhtbC1zaWduYXR1cmUiLz4KLSAgICAgIDx4czplbGVtZW50IG5hbWU9ImphdmF0eXBlIiB0eXBlPSJ0bnM6amF2YS1jbGFzcy1uYW1lIi8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iYmluZGluZy10eXBlIiBhYnN0cmFjdD0idHJ1ZSI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ieG1sY29tcG9uZW50IiB0eXBlPSJ0bnM6eG1sLXNpZ25hdHVyZSIvPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iamF2YXR5cGUiIHR5cGU9InRuczpqYXZhLWNsYXNzLW5hbWUiLz4KLSAgICAgIDwhLS0gdG9kbzogbWF5YmUgbW9yZSBqYXZhIGluZm8sIGUuZy4sIGluc3RhbmNlVHlwZSwgaXMtaW50ZXJmYWNlLCBpcy14bWxvYmogZXRjPyAtLT4KLSAgICA8L3hzOnNlcXVlbmNlPgotICA8L3hzOmNvbXBsZXhUeXBlPgotICAgIAotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ic2ltcGxlLXR5cGUiPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOmJpbmRpbmctdHlwZSI+Ci0gICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJhcy14bWwiIHR5cGU9InRuczp4bWwtc2lnbmF0dXJlIi8+Ci0gICAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJieS1uYW1lLWJlYW4iPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0idG5zOmJpbmRpbmctdHlwZSI+Ci0gICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icW5hbWUtcHJvcGVydHkiIHR5cGU9InRuczpxbmFtZS1wcm9wZXJ0eSIvPgotICAgICAgICA8L3hzOmNob2ljZT4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iamF4Yi1iZWFuIj4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpiaW5kaW5nLXR5cGUiPgotICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9InBhcnRpY2xlLXByb3BlcnR5IiB0eXBlPSJ0bnM6cGFydGljbGUtcHJvcGVydHkiLz4KLSAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJxbmFtZS1wcm9wZXJ0eSIgdHlwZT0idG5zOnFuYW1lLXByb3BlcnR5Ii8+Ci0gICAgICAgIDwveHM6Y2hvaWNlPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iYmluZGluZy1wcm9wZXJ0eSIgYWJzdHJhY3Q9InRydWUiPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgIDx4czplbGVtZW50IG5hbWU9InhtbGNvbXBvbmVudCIgdHlwZT0idG5zOnhtbC1zaWduYXR1cmUiLz4KLSAgICAgIDx4czplbGVtZW50IG5hbWU9ImphdmF0eXBlIiB0eXBlPSJ0bnM6amF2YS1jbGFzcy1uYW1lIi8+Ci0gICAgICA8eHM6Y2hvaWNlPgotICAgICAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iZ2V0dGVyIiB0eXBlPSJ0bnM6amF2YS1wcm9wZXJ0eS1uYW1lIi8+Ci0gICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ic2V0dGVyIiB0eXBlPSJ0bnM6amF2YS1wcm9wZXJ0eS1uYW1lIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iZmllbGQiIHR5cGU9InRuczpqYXZhLWZpZWxkLW5hbWUiLz4KLSAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ic3RhdGljIiB0eXBlPSJ0bnM6amF2YS1maWVsZC1uYW1lIi8+Ci0gICAgICA8L3hzOmNob2ljZT4KLSAgICAgIDx4czplbGVtZW50IG5hbWU9ImNvbGxlY3Rpb24iIHR5cGU9InRuczpqYXZhLWNsYXNzLW5hbWUiIG1pbk9jY3Vycz0iMCIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InFuYW1lLXByb3BlcnR5Ij4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpiaW5kaW5nLXByb3BlcnR5Ij4KLSAgICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9InFuYW1lIiB0eXBlPSJ4czpRTmFtZSIvPgotICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9ImF0dHJpYnV0ZSIgdHlwZT0ieHM6Ym9vbGVhbiIgZGVmYXVsdD0iZmFsc2UiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Im11bHRpcGxlIiB0eXBlPSJ4czpib29sZWFuIiBkZWZhdWx0PSJmYWxzZSIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ibmlsbGFibGUiIHR5cGU9InhzOmJvb2xlYW4iIGRlZmF1bHQ9ImZhbHNlIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJvcHRpb25hbCIgdHlwZT0ieHM6Ym9vbGVhbiIgZGVmYXVsdD0iZmFsc2UiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8L3hzOnNlcXVlbmNlPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0icGFydGljbGUtcHJvcGVydHkiPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDwhLS0gaW1wbGljaXQgcmVzdHJpY3Rpb246IHhtbGNvbXBvbmVudCBtdXN0IGJlIGEgcGFydGljbGUgLS0+Ci0gICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InRuczpiaW5kaW5nLXByb3BlcnR5Ij4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJqYXZhLWNsYXNzLW5hbWUiPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9InhtbC1zaWduYXR1cmUiPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9ImphdmEtcHJvcGVydHktbmFtZSI+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iamF2YS1maWVsZC1uYW1lIj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotCi08L3hzOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3YyL3NyYy9jb25maWdzY2hlbWEvc2NoZW1hL3htbGNvbmZpZy54c2QgYi92Mi9zcmMvY29uZmlnc2NoZW1hL3NjaGVtYS94bWxjb25maWcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTdlZDZiLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9jb25maWdzY2hlbWEvc2NoZW1hL3htbGNvbmZpZy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotPHhzOnNjaGVtYQotICAgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgeG1sbnM6eGI9Imh0dHA6Ly93d3cuYmVhLmNvbS8yMDAyLzA5L3hiZWFuL2NvbmZpZyIKLSAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5iZWEuY29tLzIwMDIvMDkveGJlYW4vY29uZmlnIgotICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotICAKLSAgPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIi8+IAotCi0gIDx4czplbGVtZW50IG5hbWU9ImNvbmZpZyI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgIFRoZSBjb25maWcgZWxlbWVudCBpcyB0aGUgdG9wLWxldmVsIGVsZW1lbnQgZm9yIGFuIC54c2Rjb25maWcgZmlsZS4KLSAgICAgICAgIEl0IGNvbnRhaW5zIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gdGhhdCBndWlkZXMgdGhlIHhzZCBjb21waWxlcgotICAgICAgICAgd2hlbiBpdCBnZW5lcmF0ZXMgSmF2YSBjbGFzc2VzLiBZb3UgY2FuIHNwZWNpZnkgcGFja2FnZSBuYW1lcyB0bwotICAgICAgICAgYmUgdXNlZCBmb3Igd2hvbGUgeG1sIG5hbWVzcGFjZXM7IHlvdSBjYW4gc3BlY2lmeSBjbGFzcyBuYW1lcwotICAgICAgICAgdG8gdXNlIGZvciBpbmRpdmlkdWFsIHNjaGVtYSB0eXBlczsgYW5kIHlvdSBjYW4gc3VwcGx5IGV4dGVuc2lvbgotICAgICAgICAgaW50ZXJmYWNlcyBhbmQgaW1wbGVtZW50YXRpb25zIHRvIGJlIGV4dGVuZGVkIGJ5IHRoZSBnZW5lcmF0ZWQKLSAgICAgICAgIEphdmEgY2xhc3Nlcy4KLSAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOmNvbXBsZXhUeXBlPgotICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQotICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJuYW1lc3BhY2UiIHR5cGU9InhiOm5zY29uZmlnIj4KLSAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICBTcGVjaWZpZXMgY29uZmlndXJhdGlvbiBmb3IgYSBuYW1lc3BhY2UuCi0gICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmVsZW1lbnQ+Ci0KLSAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icW5hbWUiIHR5cGU9InhiOnFuYW1lY29uZmlnIj4KLSAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICBTcGVjaWZpZXMgamF2YSBtYXBwaW5nIGZvciBhIHFuYW1lLgotICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czplbGVtZW50PgotCi0gICAgICA8L3hzOmNob2ljZT4KLSAgICA8L3hzOmNvbXBsZXhUeXBlPgotICA8L3hzOmVsZW1lbnQ+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Im5zY29uZmlnIj4KLQotICAgIDx4czpzZXF1ZW5jZT4KLQotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icGFja2FnZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIFRoZSBwYWNrYWdlIG5hbWUgdG8gYmUgdXNlZCBmb3IgdHlwZXMgZ2VuZXJhdGVkIGluIHRoaXMKLSAgICAgICAgICAgIG5hbWVzcGFjZS4KLSAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgIDwveHM6ZWxlbWVudD4KLSAgICAgIAotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icHJlZml4IiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgQSBwcmVmaXggdG8gYmUgdXNlZCB0byBwcmVwZW5kIHRvIHRvcC1sZXZlbCBKYXZhIHR5cGUgbmFtZXMKLSAgICAgICAgICAgIGdlbmVyYXRlZCBpbiB0aGlzIG5hbWVzcGFjZS4gIChUaGUgcHJlZml4IGlzIG5vdCB1c2VkIGZvcgotICAgICAgICAgICAgaW5uZXIgSmF2YSB0eXBlIGRlZmluaXRpb25zLikKLSAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgIDwveHM6ZWxlbWVudD4KLQotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ic3VmZml4IiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgQSBzdWZmaXggdG8gYmUgdXNlZCB0byBhcHBlbmQgdG8gdG9wLWxldmVsIEphdmEgdHlwZSBuYW1lcwotICAgICAgICAgICAgZ2VuZXJhdGVkIGluIHRoaXMgbmFtZXNwYWNlLiAoVGhlIHN1ZmZpeCBpcyBub3QgdXNlZCBmb3IKLSAgICAgICAgICAgIGlubmVyIEphdmEgdHlwZSBkZWZpbml0aW9ucy4pCi0gICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICA8L3hzOmVsZW1lbnQ+Ci0KLSAgICA8L3hzOnNlcXVlbmNlPgotCi0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1cmkiIHR5cGU9InhzOm5hbWVzcGFjZUxpc3QiPgotICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgIEEgbGlzdCBvZiBhbnkgbnVtYmVyIG9mIG5hbWVzcGFjZSBVUklzIG9yICMjbG9jYWwgZm9yIHRoZSBuby1uYW1lc3BhY2UsCi0gICAgICAgICAgb3IgIyNhbnkgZm9yIGFsbCBuYW1lc3BhY2VzLgotICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPC94czphdHRyaWJ1dGU+Ci0KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0icW5hbWVjb25maWciPgotICAgIDx4czpzZXF1ZW5jZS8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpRTmFtZSIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iamF2YW5hbWUiIHR5cGU9InhzOnN0cmluZyIvPgotICA8L3hzOmNvbXBsZXhUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9Im5hbWVzcGFjZUxpc3QiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgQSBsaXN0IG9mIG5hbWVzcGFjZSBVUklzLCB3aXRoICMjbG9jYWwgZm9yIG5vLXVyaTsgb3IgIyNhbnkgZm9yIGFsbCBVUklzLgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czp1bmlvbj4KLSAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iIyNhbnkiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICA8eHM6bGlzdD4KLSAgICAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgICAgPHhzOnVuaW9uIG1lbWJlclR5cGVzPSJ4czphbnlVUkkiPgotICAgICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIjI2xvY2FsIi8+Ci0gICAgICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICAgICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICAgICAgPC94czp1bmlvbj4KLSAgICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzOmxpc3Q+Ci0gICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICA8L3hzOnVuaW9uPgotICAgPC94czpzaW1wbGVUeXBlPgotICAKLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL0pBbm5vdGF0aW9uLmphdmEgYi92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vSkFubm90YXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgwNTYwNy4uMDAwMDAwMAotLS0gYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vSkFubm90YXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtOwotCi0vKioKLSAqIDxwPlJlcHJlc2VudHMgYSBtZXRhZGF0YSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIKLSAqIEpFbGVtZW50LiAgTm90ZSB0aGF0IEpBbm5vYXRpb25zIGFyZSBKRWxlbWVudHMsIHdoaWNoIG1lYW5zCi0gKiB0aGF0IHRoZXkgdGhlbXNlbHZlcyBjYW4gaGF2ZSBhbm5vdGF0aW9ucywgYW5kIGNhbiBiZSB0cmVhdGVkIGFzCi0gKiBub2RlcyBpbiBhIEpBTSBoaWVyYXJjaHkuPC9wPgotICoKLSAqIDxwPkFubm90YXRpb25zIGNhbiBiZSBzaW1wbGUgb3IgY29tcGxleC4gIFZhbHVlcyBvZiBzaW1wbGUKLSAqIGFubm90YXRpb25zIGNhbiBiZSByZXRyaWV2ZWQgdmlhIHRoZSB2YXJpb3VzIGdldC4uLlZhbHVlKCkgbWV0aG9kcy4KLSAqIENvbXBsZXggYXR0cmlidXRlcyBjYW4gYmUgbmF2aWdhdGVkIHZpYSB0aGUgZ2V0QW5ub3RhdGlvbnMoKSBtZXRob2QKLSAqIHdoaWNoIGV4cG9zZXMgbmVzdGVkIGF0dHJpYnV0ZXMgKHdoaWNoIG1heSBpbiB0dXJuIGJlIGVpdGhlciBzaW1wbGUKLSAqIG9yIGNvbXBsZXguPC9wPgotICoKLSAqIEBhdXRob3IgUGF0cmljayBDYWxhaGFuIDxwY2FsQGJlYS5jb20+Ci0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSkFubm90YXRpb24gZXh0ZW5kcyBKRWxlbWVudCB7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhpcyBhbm5vdGF0aW9uLiAgTm90ZSB0aGF0IGluIHRoZSBjYXNlIG9mCi0gICAqIGphdmFkb2Mtc3R5bGUgYW5ub3RhdGlvbnMsIHRoaXMgbmFtZSB3aWxsIE5PVCBpbmNsdWRlIHRoZSBsZWFkaW5nCi0gICAqICdAJy4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBTdHJpbmcgdmFsdWUgb2YgdGhlIGFubm90YXRpb24uICBSZXR1cm5zIGFuIGVtcHR5IHN0cmluZwotICAgKiBieSBkZWZhdWx0LgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTdHJpbmdWYWx1ZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhbiBpbnQuICBSZXR1cm5zIDAgYnkgZGVmYXVsdCBpZiB0aGUgdmFsdWUKLSAgICogY2Fubm90IGJlIHVuZGVyc3Rvb2QgYXMgYW4gaW50LgotICAgKi8KLSAgcHVibGljIGludCBnZXRJbnRWYWx1ZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIGJvb2xlYW4uICBSZXR1cm5zIGZhbHNlIGJ5IGRlZmF1bHQgaWYgdGhlCi0gICAqIGFubm90YXRpb24gdmFsdWUgY2Fubm90IGJlIHVuZGVyc3Rvb2QgYXMgYSBib29sZWFuLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0Qm9vbGVhblZhbHVlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIGFzIGEgbG9uZy4gIFJldHVybnMgMCBieSBkZWZhdWx0IGlmIHRoZQotICAgKiBhbm5vdGF0aW9uIHZhbHVlIGNhbm5vdCBiZSB1bmRlcnN0b29kIGFzIGEgbG9uZy4KLSAgICovCi0gIHB1YmxpYyBsb25nIGdldExvbmdWYWx1ZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIHNob3J0LiAgUmV0dXJucyAwIGJ5IGRlZmF1bHQgaWYgdGhlCi0gICAqIGFubm90YXRpb24gdmFsdWUgY2Fubm90IGJlIHVuZGVyc3Rvb2QgYXMgYSBzaG9ydC4KLSAgICovCi0gIHB1YmxpYyBzaG9ydCBnZXRTaG9ydFZhbHVlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIGFzIGEgZG91YmxlLiAgUmV0dXJucyAwIGJ5IGRlZmF1bHQgaWYgdGhlCi0gICAqIGFubm90YXRpb24gdmFsdWUgY2Fubm90IGJlIHVuZGVyc3Rvb2QgYXMgYSBkb3VibGUuCi0gICAqLwotICBwdWJsaWMgZG91YmxlIGdldERvdWJsZVZhbHVlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHZhbHVlIGFzIGEgYnl0ZS4gIFJldHVybnMgMCBieSBkZWZhdWx0IGlmIHRoZQotICAgKiBhbm5vdGF0aW9uIHZhbHVlIGNhbm5vdCBiZSB1bmRlcnN0b29kIGFzIGEgYnl0ZS4KLSAgICovCi0gIHB1YmxpYyBieXRlIGdldEJ5dGVWYWx1ZSgpOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9KQW5ub3RhdGlvbkxvYWRlci5qYXZhIGIvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL0pBbm5vdGF0aW9uTG9hZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlODk2NGEuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL0pBbm5vdGF0aW9uTG9hZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLS8qKgotICogPHA+SW50ZXJmYWNlIGltcGxlbWVudGVkIGJ5IHN1cHBsZW1lbnRhbCBtYXJrdXAgcHJvdmlkZXJzLiAgQW4KLSAqIGV4YW1wbGUgd291bGQgYmUgYW4gcHJvcGVydGllcyBvciBYTUwgZmlsZSB3aGljaCBjb250YWlucyBleHRlcm5hbAotICogbWFya3VwLiAgQW5vdGhlciBleGFtcGxlIG1pZ2h0IGJlIGEgY2xhc3Mgd2hpY2ggd2lzaGVzIHRvCi0gKiBwcm9ncmFtbWF0aWNhbGx5IGFkZCBtYXJrdXAgdG8gYSBKQU0uPC9wPgotICoKLSAqIEBhdXRob3IgUGF0cmljayBDYWxhaGFtIDxwY2FsQGJlYS5jb20+Ci0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSkFubm90YXRpb25Mb2FkZXIgewotCi0gIHB1YmxpYyB2b2lkIGdldEFubm90YXRpb25zKEpFbGVtZW50IGEsIENvbGxlY3Rpb24gb3V0KTsKLQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL0pDbGFzcy5qYXZhIGIvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL0pDbGFzcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzg3OWE4Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9KQ2xhc3MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1NSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtOwotCi0vKioKLSAqIDxwPlJlcHJlc2VudHMgYSBKYXZhIGNsYXNzIHRoYXQgbWF5IG9yIG1heSBub3QgYmUgbG9hZGVkIGluIHRoZSBWTS4KLSAqIEpDbGFzcyBpcyB0eXBpY2FsbHkgaW1wbGVtZW50ZWQgaW4gb25lIG9mIHR3byB3YXlzOiBieSB3cmFwcGluZyBhCi0gKiBqYXZhLmxhbmcuQ2xhc3Mgb3IgYnkgcGFyc2luZyBhIHNvdXJjZSBmaWxlIGRpcmVjdGx5IHdpdGggYSB0b29sCi0gKiBzdWNoIGFzIGphdmFkb2Mgb3IgamF2ZWxpbi48L3A+Ci0gKgotICogPHA+SWYgYSBKQ2xhc3MgcmVwcmVzZW50cyBhbiBpbm5lciBjbGFzcywgaXRzIGdldFBhcmVudCgpIG1ldGhvZAotICogcmV0dXJucyB0aGUgb3V0ZXIgY2xhc3MuICBPdGhlcndpc2UsIGl0IHJldHVybnMgdGhlIGNvbnRhaW5pbmcKLSAqIHBhY2thZ2UuPC9wPgotICoKLSAqIDxwPlJFVklFVyBhIGJ1bmNoIG9mIHRoZXNlIG1ldGhvZHMgKGdldE1ldGhvZHMsIGdldENvbnN0cnVjdG9ycy4uLikKLSAqIGNvdWxkIHRocm93IFNlY3VyaXR5RXhjZXB0aW9uIGlmIHRoZSBKQ2xhc3MgaXMgYmFja2VkIGJ5Ci0gKiBqYXZhLmxhbmcuQ2xhc3MgKHNlZSBqYXZhZG9jcyBmb3IgQ2xhc3MpLiAgV2UncmUgY3VycmVudGx5IGlnbm9yaW5nCi0gKiB0aGlzLCBiZWNhdXNlIGl0IHNlZW1zIHVubGlrZWx5IGFuZCBpdCBzZWVtcyBoZWF2eXdlaWdodC4gIFNlZW1zCi0gKiBvaz88L3A+Ci0gKgotICogQGF1dGhvciBQYXRyaWNrIENhbGFoYW4gPHBjYWxAYmVhLmNvbT4KLSAqLwotcHVibGljIGludGVyZmFjZSBKQ2xhc3MgZXh0ZW5kcyBKTWVtYmVyIHsKLQotICAvKioKLSAgICogPHA+UmV0dXJucyBhIEpQYWNrYWdlIHdoaWNoIHJlcHJlc2VudHMgdGhlIHBhY2thZ2Ugd2hpY2ggY29udGFpbnMKLSAgICogdGhpcyBKQ2xhc3MuPC9wPgotICAgKi8KLSAgcHVibGljIEpQYWNrYWdlIGdldENvbnRhaW5pbmdQYWNrYWdlKCk7Ci0KLSAgLyoqCi0gICAqIDxwPlJldHVybnMgdGhlIENsYXNzIHJlcHJlc2VudGluZyB0aGUgc3VwZXJjbGFzcyBvZiB0aGUgZW50aXR5Ci0gICAqIChjbGFzcywgaW50ZXJmYWNlLCBwcmltaXRpdmUgdHlwZSBvciB2b2lkKSByZXByZXNlbnRlZCBieSB0aGlzCi0gICAqIENsYXNzLiBJZiB0aGlzIENsYXNzIHJlcHJlc2VudHMgZWl0aGVyIHRoZSBPYmplY3QgY2xhc3MsIGFuCi0gICAqIGludGVyZmFjZSwgYSBwcmltaXRpdmUgdHlwZSwgb3Igdm9pZCwgdGhlbiBudWxsIGlzIHJldHVybmVkLiBJZgotICAgKiB0aGlzIG9iamVjdCByZXByZXNlbnRzIGFuIGFycmF5IGNsYXNzIHRoZW4gdGhlIENsYXNzIG9iamVjdAotICAgKiByZXByZXNlbnRpbmcgdGhlIE9iamVjdCBjbGFzcyBpcyByZXR1cm5lZC4KLSAgICovCi0gIHB1YmxpYyBKQ2xhc3MgZ2V0U3VwZXJjbGFzcygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGFsbCBvZiB0aGUgaW50ZXJmYWNlcyBkaXJlY3RseSBpbXBsZW1lbnRlZCBieSB0aGlzIGNsYXNzLgotICAgKiBSZXR1cm5zIGFuIGVtcHR5IGFycmF5IGlmIG5vIGludGVyZmFjZXMgYXJlIGltcGxlbWVudGVkLiAgUkVWSUVXCi0gICAqIHdlIHByb2JhYmx5IHdhbnQgZ2V0SW50ZXJmYWNlcyBhbmQgZ2V0RGVjbGFyZWRJbnRlcmZhY2VzLgotICAgKi8KLSAgcHVibGljIEpDbGFzc1tdIGdldEludGVyZmFjZXMoKTsKLQotICAvKioKLSAgICogPHA+UkVWSUVXIHNob3VsZCB3ZSBjb25zaWRlciByZW5hbWluZyB0aGlzIHRvIGdldEFsbEZpZWxkcygpPyAgSQotICAgKiB0aGluayB0aGlzIG1ha2VzIGl0IG1vcmUgY2xlYXIgYnV0IGlzIG5vdCBjb25zaXN0ZW50IHdpdGgKLSAgICogamF2YS5sYW5nLkNsYXNzLjwvcD4KLSAgICoKLSAgICogPHA+UmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIEZpZWxkIG9iamVjdHMgcmVmbGVjdGluZyBhbGwgdGhlCi0gICAqIGFjY2Vzc2libGUgcHVibGljIGZpZWxkcyBvZiB0aGUgY2xhc3Mgb3IgaW50ZXJmYWNlIHJlcHJlc2VudGVkIGJ5Ci0gICAqIHRoaXMgQ2xhc3Mgb2JqZWN0LiBUaGUgZWxlbWVudHMgaW4gdGhlIGFycmF5IHJldHVybmVkIGFyZSBub3QKLSAgICogc29ydGVkIGFuZCBhcmUgbm90IGluIGFueSBwYXJ0aWN1bGFyIG9yZGVyLiBUaGlzIG1ldGhvZCByZXR1cm5zCi0gICAqIGFuIGFycmF5IG9mIGxlbmd0aCAwIGlmIHRoZSBjbGFzcyBvciBpbnRlcmZhY2UgaGFzIG5vIGFjY2Vzc2libGUKLSAgICogcHVibGljIGZpZWxkcywgb3IgaWYgaXQgcmVwcmVzZW50cyBhbiBhcnJheSBjbGFzcywgYSBwcmltaXRpdmUKLSAgICogdHlwZSwgb3Igdm9pZC4gPC9wPgotICAgKgotICAgKiA8cD5TcGVjaWZpY2FsbHksIGlmIHRoaXMgSkNsYXNzIG9iamVjdCByZXByZXNlbnRzIGEgY2xhc3MsIHRoaXMKLSAgICogbWV0aG9kIHJldHVybnMgdGhlIHB1YmxpYyBmaWVsZHMgb2YgdGhpcyBjbGFzcyBhbmQgb2YgYWxsIGl0cwotICAgKiBzdXBlcmNsYXNzZXMuIElmIHRoaXMgSkNsYXNzIG9iamVjdCByZXByZXNlbnRzIGFuIGludGVyZmFjZSwgdGhpcwotICAgKiBtZXRob2QgcmV0dXJucyB0aGUgZmllbGRzIG9mIHRoaXMgaW50ZXJmYWNlIGFuZCBvZiBhbGwgaXRzCi0gICAqIHN1cGVyaW50ZXJmYWNlcy4gPC9wPgotICAgKgotICAgKiA8cD5UaGUgaW1wbGljaXQgbGVuZ3RoIGZpZWxkIGZvciBhcnJheSBjbGFzcyBpcyBub3QgcmVmbGVjdGVkIGJ5Ci0gICAqIHRoaXMgbWV0aG9kLiBVc2VyIGNvZGUgc2hvdWxkIHVzZSB0aGUgbWV0aG9kcyBvZiBjbGFzcyBBcnJheSB0bwotICAgKiBtYW5pcHVsYXRlIGFycmF5cy4gPC9wPgotICAgKgotICAgKiA8cD5TZWUgVGhlIEphdmEgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbiwgc2VjdGlvbnMgOC4yIGFuZAotICAgKiA4LjMuIDwvcD4KLSAgICovCi0gIHB1YmxpYyBKRmllbGRbXSBnZXRGaWVsZHMoKTsKLQotCi0gIC8qKgotICAgKiA8cD5SZXR1cm5zIGFuIGFycmF5IG9mIEZpZWxkIG9iamVjdHMgcmVmbGVjdGluZyBhbGwgdGhlIGZpZWxkcwotICAgKiBkZWNsYXJlZCBieSB0aGUgY2xhc3Mgb3IgaW50ZXJmYWNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgQ2xhc3MKLSAgICogb2JqZWN0LiBUaGlzIGluY2x1ZGVzIHB1YmxpYywgcHJvdGVjdGVkLCBkZWZhdWx0IChwYWNrYWdlKQotICAgKiBhY2Nlc3MsIGFuZCBwcml2YXRlIGZpZWxkcywgYnV0IGV4Y2x1ZGVzIGluaGVyaXRlZCBmaWVsZHMuIFRoZQotICAgKiBlbGVtZW50cyBpbiB0aGUgYXJyYXkgcmV0dXJuZWQgYXJlIG5vdCBzb3J0ZWQgYW5kIGFyZSBub3QgaW4gYW55Ci0gICAqIHBhcnRpY3VsYXIgb3JkZXIuIFRoaXMgbWV0aG9kIHJldHVybnMgYW4gYXJyYXkgb2YgbGVuZ3RoIDAgaWYgdGhlCi0gICAqIGNsYXNzIG9yIGludGVyZmFjZSBkZWNsYXJlcyBubyBmaWVsZHMsIG9yIGlmIHRoaXMgQ2xhc3Mgb2JqZWN0Ci0gICAqIHJlcHJlc2VudHMgYSBwcmltaXRpdmUgdHlwZSwgYW4gYXJyYXkgY2xhc3MsIG9yIHZvaWQuIDwvcD4KLSAgICoKLSAgICogPHA+U2VlIFRoZSBKYXZhIExhbmd1YWdlIFNwZWNpZmljYXRpb24sIHNlY3Rpb25zIDguMiBhbmQgOC4zLjwvcD4KLSAgICovCi0gIHB1YmxpYyBKRmllbGRbXSBnZXREZWNsYXJlZEZpZWxkcygpOwotCi0gIC8qKgotICAgKiA8cD5SRVZJRVcgc2hvdWxkIHdlIGNvbnNpZGVyIHJlbmFtaW5nIHRoaXMgdG8gZ2V0QWxsTWV0aG9kcygpPyAgSQotICAgKiB0aGluayB0aGlzIG1ha2VzIGl0IG1vcmUgY2xlYXIgYnV0IGlzIG5vdCBjb25zaXN0ZW50IHdpdGgKLSAgICogamF2YS5sYW5nLkNsYXNzLjwvcD4KLSAgICoKLSAgICogPHA+UmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIE1ldGhvZCBvYmplY3RzIHJlZmxlY3RpbmcgYWxsIHRoZQotICAgKiBwdWJsaWMgbWVtYmVyIG1ldGhvZHMgb2YgdGhlIGNsYXNzIG9yIGludGVyZmFjZSByZXByZXNlbnRlZCBieQotICAgKiB0aGlzIENsYXNzIG9iamVjdCwgaW5jbHVkaW5nIHRob3NlIGRlY2xhcmVkIGJ5IHRoZSBjbGFzcyBvcgotICAgKiBpbnRlcmZhY2UgYW5kIGFuZCB0aG9zZSBpbmhlcml0ZWQgZnJvbSBzdXBlcmNsYXNzZXMgYW5kCi0gICAqIHN1cGVyaW50ZXJmYWNlcy4gVGhlIGVsZW1lbnRzIGluIHRoZSBhcnJheSByZXR1cm5lZCBhcmUgbm90Ci0gICAqIHNvcnRlZCBhbmQgYXJlIG5vdCBpbiBhbnkgcGFydGljdWxhciBvcmRlci4gVGhpcyBtZXRob2QgcmV0dXJucwotICAgKiBhbiBhcnJheSBvZiBsZW5ndGggMCBpZiB0aGlzIENsYXNzIG9iamVjdCByZXByZXNlbnRzIGEgY2xhc3Mgb3IKLSAgICogaW50ZXJmYWNlIHRoYXQgaGFzIG5vIHB1YmxpYyBtZW1iZXIgbWV0aG9kcywgb3IgaWYgdGhpcyBDbGFzcwotICAgKiBvYmplY3QgcmVwcmVzZW50cyBhbiBhcnJheSBjbGFzcywgcHJpbWl0aXZlIHR5cGUsIG9yIHZvaWQuPC9wPgotICAgKgotICAgKiA8cD5UaGUgY2xhc3MgaW5pdGlhbGl6YXRpb24gbWV0aG9kIDxjbGluaXQ+IGlzIG5vdCBpbmNsdWRlZCBpbgotICAgKiB0aGUgcmV0dXJuZWQgYXJyYXkuIElmIHRoZSBjbGFzcyBkZWNsYXJlcyBtdWx0aXBsZSBwdWJsaWMgbWVtYmVyCi0gICAqIG1ldGhvZHMgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXIgdHlwZXMsIHRoZXkgYXJlIGFsbCBpbmNsdWRlZCBpbgotICAgKiB0aGUgcmV0dXJuZWQgYXJyYXkuIDwvcD4KLSAgICovCi0gIHB1YmxpYyBKTWV0aG9kW10gZ2V0TWV0aG9kcygpOwotCi0gIC8qKgotICAgKiA8cD5SZXR1cm5zIGFuIGFycmF5IG9mIE1ldGhvZCBvYmplY3RzIHJlZmxlY3RpbmcgYWxsIHRoZSBtZXRob2RzCi0gICAqIGRlY2xhcmVkIGJ5IHRoZSBjbGFzcyBvciBpbnRlcmZhY2UgcmVwcmVzZW50ZWQgYnkgdGhpcyBDbGFzcwotICAgKiBvYmplY3QuIFRoaXMgaW5jbHVkZXMgcHVibGljLCBwcm90ZWN0ZWQsIGRlZmF1bHQgKHBhY2thZ2UpCi0gICAqIGFjY2VzcywgYW5kIHByaXZhdGUgbWV0aG9kcywgYnV0IGV4Y2x1ZGVzIGluaGVyaXRlZCBtZXRob2RzLiBUaGUKLSAgICogZWxlbWVudHMgaW4gdGhlIGFycmF5IHJldHVybmVkIGFyZSBub3Qgc29ydGVkIGFuZCBhcmUgbm90IGluIGFueQotICAgKiBwYXJ0aWN1bGFyIG9yZGVyLiBUaGlzIG1ldGhvZCByZXR1cm5zIGFuIGFycmF5IG9mIGxlbmd0aCAwIGlmIHRoZQotICAgKiBjbGFzcyBvciBpbnRlcmZhY2UgZGVjbGFyZXMgbm8gbWV0aG9kcywgb3IgaWYgdGhpcyBDbGFzcyBvYmplY3QKLSAgICogcmVwcmVzZW50cyBhIHByaW1pdGl2ZSB0eXBlLCBhbiBhcnJheSBjbGFzcywgb3Igdm9pZC4gVGhlIGNsYXNzCi0gICAqIGluaXRpYWxpemF0aW9uIG1ldGhvZCA8Y2xpbml0PiBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkCi0gICAqIGFycmF5LiBJZiB0aGUgY2xhc3MgZGVjbGFyZXMgbXVsdGlwbGUgcHVibGljIG1lbWJlciBtZXRob2RzIHdpdGgKLSAgICogdGhlIHNhbWUgcGFyYW1ldGVyIHR5cGVzLCB0aGV5IGFyZSBhbGwgaW5jbHVkZWQgaW4gdGhlIHJldHVybmVkCi0gICAqIGFycmF5LiA8L3A+Ci0gICAqCi0gICAqIDxwPlNlZSBUaGUgSmF2YSBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uLCBzZWN0aW9uIDguMi4gPC9wPgotICAgKi8KLSAgcHVibGljIEpNZXRob2RbXSBnZXREZWNsYXJlZE1ldGhvZHMoKTsKLQotICAvKioKLSAgICogPHA+UmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIENvbnN0cnVjdG9yIG9iamVjdHMgcmVmbGVjdGluZyBhbGwKLSAgICogdGhlIHB1YmxpYyBjb25zdHJ1Y3RvcnMgb2YgdGhlIGNsYXNzIHJlcHJlc2VudGVkIGJ5IHRoaXMgQ2xhc3MKLSAgICogb2JqZWN0LiBBbiBhcnJheSBvZiBsZW5ndGggMCBpcyByZXR1cm5lZCBpZiB0aGUgY2xhc3MgaGFzIG5vCi0gICAqIHB1YmxpYyBjb25zdHJ1Y3RvcnMsIG9yIGlmIHRoZSBjbGFzcyBpcyBhbiBhcnJheSBjbGFzcywgb3IgaWYgdGhlCi0gICAqIGNsYXNzIHJlZmxlY3RzIGEgcHJpbWl0aXZlIHR5cGUgb3Igdm9pZC4gPC9wPgotICAgKi8KLSAgcHVibGljIEpDb25zdHJ1Y3RvcltdIGdldENvbnN0cnVjdG9ycygpOwotCi0gIC8vIFRoaXMgaXMgb24gamF2YS5sYW5nLkNsYXNzLCBidXQgaXMgaXQgcmVhbGx5IHVzZWZ1bD8KLSAgLy8KLSAgLy8gIHB1YmxpYyBKQ29uc3RydWN0b3JbXSBnZXREZWNsYXJlZENvbnN0cnVjdG9ycygpOwotCi0KLSAgLyoqCi0gICAqIFJldHVybnMgYSAuCi0KLSAgICogYXMgZGV0YWlsZWQgaW4gc2VjdGlvbiA4LjMgb2YgdGhlIEphdmEgQmVhbnMgc3BlY2lmaWNhdGlvbiwKLSAgICogJ0Rlc2lnbiBQYXR0ZXJucyBmb3IgUHJvcGVydGllcy4nICBOb3RlIHRoYXQgYWNjb3JkaW5nIHRvIHRoaXMKLSAgICogcGF0dGVybiwgcHVibGljIGZpZWxkcyBhcmUgbmV2ZXIgY29uc2lkZXJlZCBwcm9wZXJ0aWVzLgotICAgKi8KLSAgcHVibGljIEpQcm9wZXJ0eVtdIGdldFByb3BlcnRpZXMoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgSkNsYXNzIHJlcHJlc2VudHMgYW4gaW50ZXJmYWNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNJbnRlcmZhY2UoKTsKLQotICAvKioKLSAgICogUmV0dXJuIHRydWUgaWYgdGhpcyBKQ2xhc3MgcmVwcmVzZW50cyBwcmltaXRpdmUgdHlwZSAoaW50LCBsb25nLAotICAgKiBkb3VibGUsIGFuZCBzbyBmb3J0aCkuICBSZW1lbWJlciB0aGF0IHByaW1pdGl2ZSB3cmFwcGVyIGNsYXNzZXMKLSAgICogc3VjaCBhcyBqYXZhLmxhbmcuSW50ZWdlciBhcmUgTk9UIGNvbnNpZGVyZWQgcHJpbWl0aXZlcy4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzUHJpbWl0aXZlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0cnVlIGlmIHRoaXMgY2xhc3MgaXMgZmluYWwuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0ZpbmFsKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0cnVlIGlmIHRoaXMgY2xhc3MgaXMgc3RhdGljLiAgTm90ZSB0aGF0IHRvcC1sZXZlbCBjbGFzc2VzCi0gICAqIGFyZSBuZXZlciBzdGF0aWMuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1N0YXRpYygpOwotCi0gIC8qKgotICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGNsYXNzIGlzIGFic3RyYWN0LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNBYnN0cmFjdCgpOwotCi0gIC8qKgotICAgKiA8cD5SZXR1cm5zIHRydWUgaWYgdGhpcyBKQ2xhc3MgcmVwcmVzZW50cyB0aGUgdm9pZCB0eXBlLjwvcD4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzVm9pZCgpOwotCi0gIC8qKgotICAgKiA8cD5SZXR1cm5zIHRydWUgaWYgdGhpcyBKQ2xhc3MgcmVwcmVzZW50cyBqYXZhLmxhbmcuT2JqZWN0LjwvcD4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzT2JqZWN0KCk7Ci0KLSAgLyoqCi0gICAqIDxwPlJldHVybnMgdHJ1ZSBpZiB0aGlzIEpDbGFzcyByZXByZXNlbnRzIGFuIGFycmF5IHR5cGUuPC9wPgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNBcnJheSgpOwotCi0gIC8qKgotICAgKiA8cD5SZXR1cm5zIHRoZSBDbGFzcyByZXByZXNlbnRpbmcgdGhlIGNvbXBvbmVudCB0eXBlIG9mIGFuIGFycmF5LgotICAgKiBJZiB0aGlzIGNsYXNzIGRvZXMgbm90IHJlcHJlc2VudCBhbiBhcnJheSBjbGFzcyB0aGlzIG1ldGhvZAotICAgKiByZXR1cm5zIG51bGwuPC9wPgotICAgKgotICAgKiA8cD5Ob3RlIHRoYXQgdGhpcyBtZXRob2QgZGlmZmVycyBzdWJzdGFudGlhbGx5IGZyb20KLSAgICogPGNvZGU+amF2YS5sYW5nLkNsYXNzLmdldENvbXBvbmVudFR5cGUoKTwvY29kZT4gaW4gdGhlIHdheSBpdAotICAgKiB0cmVhdHMgbXVsdGlkaW1lbnNpb25hbCBhcnJheXMuICBTcGVjaWZpY2FsbHksIGxldAotICAgKiA8Y29kZT5mb29BcnJheUNsYXNzPC9jb2RlPiBiZSB0aGUgY2xhc3Mgb2YgYW4gbiBkaW1lbnNpb25hbCBhcnJheQotICAgKiBvZiBjbGFzcyA8Y29kZT5mb288L2NvZGU+IGZvciBuID4gMi4gIEZvciB0aGUgamF2YS5sYW5nLkNsYXNzCi0gICAqIHJlcHJlc2VudGF0aW9uIG9mIDxjb2RlPmZvb0FycmF5Q2xhc3M8L2NvZGU+LAotICAgKiA8Y29kZT5nZXRDb21wb25lbnRUeXBlKCk8L2NvZGU+IHdpbGwgcmV0dXJuIGEgamF2YS5sYW5nLkNsYXNzIGZvcgotICAgKiBhbiAobi0xKS1kaW1lbnNpb25hbCBhcnJheSBvZiA8Y29kZT5mb288L2NvZGU+cy4gIEJ5IGNvbnRyYXN0LAotICAgKiB0aGUgSkNsYXNzIHJlcHJlc2VudGF0aW9uIG9mIDxjb2RlPmZvb0FycmF5Q2xhc3M8L2NvZGU+IHdpbGwKLSAgICogYWx3YXlzIHNpbXBseSByZXR1cm4gYSBKQ2xhc3MgcmVwcmVzZW50aW5nIDxjb2RlPmZvbzwvY29kZT4gZm9yCi0gICAqIGFueSB2YWx1ZSBvZiBuID4gMS48L3A+Ci0gICAqCi0gICAqIDxwPkluIG90aGVyIHdvcmRzLCB0aGlzIG1ldGhvZCBhbHdheXMgcmV0dXJucyB0aGUgJ2NvcmUnIHR5cGUgb2YKLSAgICogdGhlIGFycmF5LCBlZmZlY3RpdmVseSBoaWRpbmcgYXdheSBhbGwgb2YgdGhlIGludGVybWVkaWFyeSBhcnJheQotICAgKiB0eXBlcy4gIEdpdmVuIHRoYXQgSkNsYXNzIHByb3ZpZGVzIHRoZSBhZGRpdGlvbmFsCi0gICAqIDxjb2RlPmdldEFycmF5RGltZW5zaW9uczwvY29kZT4gZmFjaWxpdHksIGl0IGlzIGZlbHQgdGhhdCB0aGlzIGlzCi0gICAqIGEgbXVjaCBlYXNpZXIgY29udmVudGlvbiBmb3IgdG9vbCBhdXRob3JzIHRvIHdvcmsgd2l0aC48L3A+Ci0gICAqLwotICBwdWJsaWMgSkNsYXNzIGdldEFycmF5Q29tcG9uZW50VHlwZSgpOwotCi0gIC8qKgotICAgKiA8cD5JZiB0aGlzIEpDbGFzcyByZXByZXNlbnRzIGFuIGFycmF5IHR5cGUgKGlzQXJyYXkoKSA9PSB0cnVlKSwKLSAgICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGRpbWVuc2lvbnMgaW4gdGhlIGFycmF5LiAgT3RoZXJ3aXNlIHJldHVybnMKLSAgICogemVyby48L3A+Ci0gICAqLwotICBwdWJsaWMgaW50IGdldEFycmF5RGltZW5zaW9ucygpOwotCi0gIC8qKgotICAgKiA8cD5EZXRlcm1pbmVzIGlmIHRoZSBjbGFzcyBvciBpbnRlcmZhY2UgcmVwcmVzZW50ZWQgYnkgdGhpcyBDbGFzcwotICAgKiBvYmplY3QgaXMgZWl0aGVyIHRoZSBzYW1lIGFzLCBvciBpcyBhIHN1cGVyY2xhc3Mgb3IKLSAgICogc3VwZXJpbnRlcmZhY2Ugb2YsIHRoZSBjbGFzcyBvciBpbnRlcmZhY2UgcmVwcmVzZW50ZWQgYnkgdGhlCi0gICAqIHNwZWNpZmllZCBDbGFzcyBwYXJhbWV0ZXIuIEl0IHJldHVybnMgdHJ1ZSBpZiBzbzsgb3RoZXJ3aXNlIGl0Ci0gICAqIHJldHVybnMgZmFsc2UuIElmIHRoaXMgQ2xhc3Mgb2JqZWN0IHJlcHJlc2VudHMgYSBwcmltaXRpdmUgdHlwZSwKLSAgICogdGhpcyBtZXRob2QgcmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgQ2xhc3MgcGFyYW1ldGVyIGlzCi0gICAqIGV4YWN0bHkgdGhpcyBDbGFzcyBvYmplY3Q7IG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLjwvcD4KLSAgICoKLSAgICogPHA+U3BlY2lmaWNhbGx5LCB0aGlzIG1ldGhvZCB0ZXN0cyB3aGV0aGVyIHRoZSB0eXBlIHJlcHJlc2VudGVkCi0gICAqIGJ5IHRoZSBzcGVjaWZpZWQgQ2xhc3MgcGFyYW1ldGVyIGNhbiBiZSBjb252ZXJ0ZWQgdG8gdGhlIHR5cGUKLSAgICogcmVwcmVzZW50ZWQgYnkgdGhpcyBDbGFzcyBvYmplY3QgdmlhIGFuIGlkZW50aXR5IGNvbnZlcnNpb24gb3IKLSAgICogdmlhIGEgd2lkZW5pbmcgcmVmZXJlbmNlIGNvbnZlcnNpb24uIFNlZSBUaGUgSmF2YSBMYW5ndWFnZQotICAgKiBTcGVjaWZpY2F0aW9uLCBzZWN0aW9ucyA1LjEuMSBhbmQgNS4xLjQgLCBmb3IgZGV0YWlscy48L3A+Ci0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0Fzc2lnbmFibGVGcm9tKEpDbGFzcyBjbGF6eik7Ci0KLSAgLyoqCi0gICAqIFR3byBKQ2xhc3NlcyBhcmUgYWx3YXlzIGNvbnNpZGVyZWQgZXF1YWwgYXMgbG9uZyBhcyB0aGVpcgotICAgKiBxdWFsaWZpZWQgbmFtZXMgYXJlIHRoZSBzYW1lLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvKTsKLQotICAvKioKLSAgICogPHA+UmV0dXJucyB0aGUgaW5uZXIgY2xhc3NlcyBmb3IgdGhpcyBjbGFzcy4gIFRoZSBhcnJheSBjb250YWlucwotICAgKiBKQ2xhc3Mgb2JqZWN0cyByZXByZXNlbnRpbmcgYWxsIHRoZSBwdWJsaWMgY2xhc3NlcyBhbmQgaW50ZXJmYWNlcwotICAgKiB0aGF0IGFyZSBtZW1iZXJzIG9mIHRoZSBjbGFzcyByZXByZXNlbnRlZCBieSB0aGlzIEpDbGFzcy4gIFRoaXMKLSAgICogaW5jbHVkZXMgcHVibGljIGNsYXNzIGFuZCBpbnRlcmZhY2UgbWVtYmVycyBpbmhlcml0ZWQgZnJvbQotICAgKiBzdXBlcmNsYXNzZXMgYW5kIHB1YmxpYyBjbGFzcyBhbmQgaW50ZXJmYWNlIG1lbWJlcnMgZGVjbGFyZWQgYnkKLSAgICogdGhlIGNsYXNzLiBUaGlzIG1ldGhvZCByZXR1cm5zIGFuIGFycmF5IG9mIGxlbmd0aCAwIGlmIHRoaXMgQ2xhc3MKLSAgICogb2JqZWN0IGhhcyBubyBwdWJsaWMgbWVtYmVyIGNsYXNzZXMgb3IgaW50ZXJmYWNlcy4gVGhpcyBtZXRob2QKLSAgICogYWxzbyByZXR1cm5zIGFuIGFycmF5IG9mIGxlbmd0aCAwIGlmIHRoaXMgSkNsYXNzIG9iamVjdAotICAgKiByZXByZXNlbnRzIGEgcHJpbWl0aXZlIHR5cGUsIGFuIGFycmF5IGNsYXNzLCBvciB2b2lkLiA8L3A+Ci0gICAqLwotICBwdWJsaWMgSkNsYXNzW10gZ2V0Q2xhc3NlcygpOwotCi0gIC8qKgotICAgKiA8cD5JZiB0aGlzIEpDbGFzcyBpcyBhbiBpbm5lciBjbGFzcywgcmV0dXJucyB0aGUgb3V0ZXIgY2xhc3MuICBJZgotICAgKiB0aGUgY2xhc3Mgb3IgaW50ZXJmYWNlIHJlcHJlc2VudGVkIGJ5IHRoaXMgSkNsYXNzIG9iamVjdCBpcyBhCi0gICAqIG1lbWJlciBvZiBhbm90aGVyIGNsYXNzLCByZXR1cm5zIHRoZSBKQ2xhc3Mgb2JqZWN0IHJlcHJlc2VudGluZwotICAgKiB0aGUgY2xhc3MgaW4gd2hpY2ggaXQgd2FzIGRlY2xhcmVkLiBUaGlzIG1ldGhvZCByZXR1cm5zIG51bGwgaWYKLSAgICogdGhpcyBjbGFzcyBvciBpbnRlcmZhY2UgaXMgbm90IGEgbWVtYmVyIG9mIGFueSBvdGhlciBjbGFzcy4gSWYKLSAgICogdGhpcyBKQ2xhc3Mgb2JqZWN0IHJlcHJlc2VudHMgYW4gYXJyYXkgY2xhc3MsIGEgcHJpbWl0aXZlIHR5cGUsCi0gICAqIG9yIHZvaWQsIHRoZW4gdGhpcyBtZXRob2QgcmV0dXJucyBudWxsLjwvcD4KLSAgICovCi0gIHB1YmxpYyBKQ2xhc3MgZ2V0Q29udGFpbmluZ0NsYXNzKCk7Ci0KLSAgLyoqCi0gICAqIDxwPlJldHVybnMgdGhlIG5hbWUgb2YgdGhpcyBtZW1iZXIgaW4gdGhlIGZvcm1hdCBkZXNjcmliZWQgaW4KLSAgICogc2VjdGlvbiA0LjMuMiBvZiB0aGUgVk0gc3BlYywgJ0ZpZWxkIERlc2NyaXB0b3JzLicgIFRoaXMgaXMgdGhlCi0gICAqIHNhbWUgbmFzdHkgZm9ybWF0IHJldHVybmVkIGJ5IGphdmEubGFuZy5DbGFzcy5nZXROYW1lKCksIGFuZCBpcwotICAgKiB0aGUgZm9ybWF0IHlvdSBuZWVkIHRvIHVzZSBpbiBjYWxscyB0byBDbGFzcy5mb3JOYW1lKCkuICBGb3IKLSAgICogZXhhbXBsZSwgdGhlIENsYXNzZmlsZU5hbWUgb2YgdGhlIGNsYXNzIG9mIGEgdHdvLWRpbWVuc2lvbmFsCi0gICAqIGFycmF5IG9mIHN0cmluZ3MgaXMgPGNvZGU+W1tMamF2YS5sYW5nLlN0cmluZzs8L2NvZGU+LiAgRm9yCi0gICAqIGRldGFpbHMsIHNlZQotICAgKiBodHRwOi8vamF2YS5zdW4uY29tL2RvY3MvYm9va3Mvdm1zcGVjLzJuZC1lZGl0aW9uL2h0bWwvQ2xhc3NGaWxlLmRvYy5odG1sPC9wPgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRGaWVsZERlc2NyaXB0b3IoKTsKLQotCi0gIC8qKgotICAgKiA8cD5SZXR1cm5zIHRoZSBKQ2xhc3NMb2FkZXIgd2hpY2ggbG9hZGVkIHRoaXMgY2xhc3MuPC9wPiBSRVZJRVcKLSAgICogc2hvdWxkIHRoZSBjbGFzbG9hZGVyIGJlIHRoZSBwYXJlbnQ/ICBzaG91bGQgd2UgZGl0Y2gvcmVmb3JtdWxhdGUKLSAgICogSlBhY2thZ2U/Ci0gICAqLwotICBwdWJsaWMgSkNsYXNzTG9hZGVyIGdldENsYXNzTG9hZGVyKCk7Ci0KLQotICAvKioKLSAgICogU2hvcnRoYW5kIGZvciBteUNsYXNzLmdldENsYXNzTG9hZGVyKCkubG9hZENsYXNzKG5hbWUpCi0gICAqLwotICBwdWJsaWMgSkNsYXNzIGZvck5hbWUoU3RyaW5nIG5hbWUpIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL0pDbGFzc0xvYWRlci5qYXZhIGIvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL0pDbGFzc0xvYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzVmMTQ3Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9KQ2xhc3NMb2FkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtOwotCi0vKioKLSAqIE9iamVjdCB3aGljaCBjYW4gbG9hZCByZXByZXNlbnRhdGlvbnMgb2YgYSBqYXZhLmxhbmcuQ2xhc3MuCi0gKiBBbmFsYWdvdXMgdG8gYSBqYXZhLmxhbmcuQ2xhc3NMb2FkZXIuCi0gKgotICogQGF1dGhvciBQYXRyaWNrIENhbGFoYW4gPHBjYWxAYmVhLmNvbT4KLSAqLwotcHVibGljIGludGVyZmFjZSBKQ2xhc3NMb2FkZXIgewotCi0gIC8qKgotICAgKiA8cD5SZXR1cm5zIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIG5hbWVkIGNsYXNzLiAgSWYgdGhlIGNsYXNzIGlzCi0gICAqIG5vdCB1bmRlciB0aGUgc2FtZSByb290IGFzIHRoaXMgSkVsZW1lbnQgcm9vdCwgYSByZXByZXNlbnRhdGlvbiBvZgotICAgKiBpdCB3aWxsIGJlIHN5bnRoZXNpemVkIHZpYSByZWZsZWN0aW9uIChzZWUgbm90ZSBpbiBjbGFzcwotICAgKiBjb21tZW50cykuICBUaGUgJ25hbWVkJyBwYXJhbWV0ZXIgbXVzdCBiZSBhIGZ1bGx5LXF1YWxpZmllZCBjbGFzcwotICAgKiBuYW1lIGluIHRoZSBjbGFzc2ZpbGUgJ0ZpZWxkIERlc2NyaXB0b3InIGZvcm1hdCwgYSBzaW1wbGUKLSAgICogcHJpbWl0aXZlIG5hbWUgKGUuZy4gJ2xvbmcnIG9yICdpbnQnKSwgb3IgJ3ZvaWQnLjwvcD4KLSAgICoKLSAgICogPHA+QSBub3RlIHJlZ2FyZGluZyBmdWxseS1xdWFsaWZpZWQgY2xhc3MgbmFtZXM6IGlmIHlvdSdyZQotICAgKiBsb29raW5nIHVwIGEgbm9uLWFycmF5IHR5cGUgYnkgbmFtZSwgeW91IGNhbiBqdXN0IHBhc3MgdGhlCi0gICAqIHJlZ3VsYXIsIGZ1bGx5LXF1YWxpZmllZCBuYW1lLiAgSWYgeW91J3JlIGxvb2tpbmcgdXAgYW4gYXJyYXkKLSAgICogdHlwZSwgeW91IG5lZWQgdG8gdXNlIHRoZSAnRmllbGQgRGVzY3JpcHRvcicgZm9ybWF0IGFzIGRlc2NyaWJlZAotICAgKiBpbiBzZWNpb24gNC4zLjIgb2YgdGhlIFZNIHNwZWMuICBUaGlzIGlzIHRoZSBzYW1lIG5hbWUgZm9ybWF0Ci0gICAqIHRoYXQgaXMgcmV0dXJuZWQgYnkgSkNsYXNzLmdldEZpZWxkRGVzY3JpcHRvci48L3A+Ci0gICAqCi0gICAqIEB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBpZiBubyBzdWNoIGNsYXNzIGV4aXN0cy4KLSAgICovCi0gIHB1YmxpYyBKQ2xhc3MgbG9hZENsYXNzKFN0cmluZyBmaWVsZERlc2NyaXB0b3IpCi0gICAgICAgICAgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb247Ci0KLQotICBwdWJsaWMgSlBhY2thZ2UgZ2V0UGFja2FnZShTdHJpbmcgbmFtZSk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIEpBbm5vdGF0aW9uTG9hZGVyIHdoaWNoIHNob3VsZCBiZSB1c2VkIGZvciByZXRyaWV2aW5nCi0gICAqIHN1cHBsZW1lbnRhbCBhbm5vdGF0aW9ucwotICAgKi8KLSAgcHVibGljIEpBbm5vdGF0aW9uTG9hZGVyIGdldEFubm90YXRpb25Mb2FkZXIoKTsKLQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoaXMgSkNsYXNzTG9hZGVycydzIHBhcmVudC4KLSAgICovCi0gIHB1YmxpYyBKQ2xhc3NMb2FkZXIgZ2V0UGFyZW50KCk7Ci0KLSAgLy9SRVZJRVcgZG8gd2UgbmVlZCB0byBleHBvc2UgdGhlIHBhcmVudCBKQ2xhc3NMb2FkZXIgaGVyZT8gIHdvdWxkCi0gIC8vcmF0aGVyIG5vdCB1bmxlc3MgdGhlcmUgaXMgYSBnb29kIHJlYXNvbiB0bwotCi0gIC8vICBwdWJsaWMgSkNsYXNzW10gZ2V0UmVzb2x2ZWRDbGFzc2VzKCk7Ci0KLQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL0pDb21tZW50LmphdmEgYi92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vSkNvbW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMyZWU0Ni4uMDAwMDAwMAotLS0gYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vSkNvbW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW07Ci0KLS8qKgotICogPHA+RW5jYXBzdWxhdGVzIGNvbW1lbnQgYXNzb2NpYXRlZCB3aXRoIGEgcGFja2FnZSwgY2xhc3MsCi0gKiBtZXRob2QsIGFuZCBzbyBvbi4gIEFsdGhvdWdoIHRoZXkgYXJlIG9mdGVuIGRlY2xhcmVkIGluIHRoZSBzYW1lCi0gKiBwbGFjZSAoY29kZSBjb21tZW50cykgSkNvbW1lbnQgaXMgYSBkaXN0aW5jdCBlbnRpdHkgZnJvbQotICogSkFubm90YXRpb24uPC9wPgotICoKLSAqIEBhdXRob3IgUGF0cmljayBDYWxhaGFuIDxwY2FsQGJlYS5jb20+Ci0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSkNvbW1lbnQgewotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSB0ZXh0IG9mIHRoaXMgY29tbWVudC4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBsb2NhdGlvbiBvZiB0aGlzIGNvbW1lbnQgaW4gdGhlIHNvdXJjZSwgb3IgbnVsbCBpZiBpdAotICAgKiBpcyB1bmtub3duLgotICAgKi8KLSAgcHVibGljIEpTb3VyY2VQb3NpdGlvbiBnZXRTb3VyY2VQb3NpdGlvbigpOwotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL0pDb25zdHJ1Y3Rvci5qYXZhIGIvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL0pDb25zdHJ1Y3Rvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDliNmNkLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9KQ29uc3RydWN0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW07Ci0KLS8qKgotICogUmVwcmVzZW50cyBhIGNvbnN0cnVjdG9yIG9mIGEgamF2YSBjbGFzcy4KLSAqCi0gKiBAYXV0aG9yIFBhdHJpY2sgQ2FsYWhhbiA8cGNhbEBiZWEuY29tPgotICovCi1wdWJsaWMgaW50ZXJmYWNlIEpDb25zdHJ1Y3RvciBleHRlbmRzIEpNZW1iZXIgewotCi0gIC8qKgotICAgKiA8cD5SZXR1cm5zIHJlcHJlc2VudGF0aW9ucyBvZiB0aGUgcGFyYW1ldGVycyB0YWtlbiBieSB0aGlzCi0gICAqIGNvbnN0cnVjdG9yLiAgUmV0dXJucyBhbiBhcnJheSBvZiBsZW5ndGggMCBpZiB0aGUgY29uc3RydWN0b3IKLSAgICogdGFrZXMgbm8gcGFyYW1ldGVycy48L3A+Ci0gICAqLwotICBwdWJsaWMgSlBhcmFtZXRlcltdIGdldFBhcmFtZXRlcnMoKTsKLQotICAvKioKLSAgICogPHA+UmV0dXJucyByZXByZXNlbnRhdGlvbnMgb2YgdGhlIHR5cGUgb2YgZWFjaCBvZiB0aGUgZXhjZXB0aW9ucwotICAgKiB3aGljaCBjYW4gYmUgdGhyb3duIGJ5IHRoaXMgY29uc3RydWN0b3IuICBSZXR1cm5zIGFuIGFycmF5IG9mCi0gICAqIGxlbmd0aCAwIGlmIHRoZSBjb25zdHJ1Y3RvciB0aHJvd3Mgbm8gZXhjZXB0aW9ucy48L3A+Ci0gICAqLwotICBwdWJsaWMgSkNsYXNzW10gZ2V0RXhjZXB0aW9uVHlwZXMoKTsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9KRWxlbWVudC5qYXZhIGIvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL0pFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMTgxOWYuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL0pFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjYgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW07Ci0KLS8qKgotICogPHA+SW50ZXJmYWNlIGltcGxlbWVudGVkIGJ5IEpBTSBhYnN0cmFjdGlvbnMgd2hpY2ggY2FuIGhhdmUKLSAqIGFzc29jaWF0ZWQgYW5ub3RhdGlvbnMgKGkuZS4gbWV0YWRhdGEpLiAgVGhpcyBhYnN0cmFjdGlvbiBpcwotICogcHJpbWFyaWx5IHVzZWZ1bCBpbiB0aGUgY2FzZSB3aGVyZSBhbm5vdGF0aW9uIGluaGVyaXRhbmNlIGlzCi0gKiBkZXNpcmVkOyB0aGUgZ2V0UGFyZW50KCkgY2FsbCBjYW4gYmUgdXNlZCB0byBjbGltYiB0aGUgdHJlZSBvZgotICogYW5ub3RlZCBvYmplY3RzIHVudGlsIGEgZGVzaXJlZCBhbm5vdGF0aW9uIGlzIGZvdW5kLiAgTm90ZSB0aGF0Ci0gKiBKQW5ub3RhdGlvbnMgYXJlIHRoZW1zZWx2ZXMgSkVsZW1lbnQsIHdoaWNoIGlzIHVzZWQgdG8gYW5ub3RhdGlvbgotICogbmVzdGluZyAoYXMgZXhwcmVzc2VkIGJ5IEpTUjE3NSBuZXN0ZWQgc3RydWN0cyBvciBqYXZhZG9jJ2VkCi0gKiBuYW1lLXZhbHVlIHBhaXJzKS48L3A+Ci0gKgotICogQGF1dGhvciBQYXRyaWNrIENhbGFoYW4gPHBjYWxAYmVhLmNvbT4KLSAqLwotcHVibGljIGludGVyZmFjZSBKRWxlbWVudCB7Ci0KLSAgLyoqCi0gICAqIDxwPlJldHVybnMgdGhlIG1ldGFkYXRhIEpBbm5vdGF0aW9ucyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGgKLSAgICogdGhpcyBhYnN0cmFjdGlvbi4gIFJldHVybnMgYW4gZW1wdHkgYXJyYXkgaWYgdGhlcmUgYXJlIG5vCi0gICAqIGFubm90YXRpb25zLjwvcD4KLSAgICovCi0gIHB1YmxpYyBKQW5ub3RhdGlvbltdIGdldEFubm90YXRpb25zKCk7Ci0KLSAgLyoqCi0gICAqIDxwPlJldHVybnMgdGhlIHNldCBvZiBhbm5vdGF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhpcwotICAgKiBhYnN0cmFjdGlvbiB3aGljaCBoYXZlIHRoZSBnaXZlbiBuYW1lLiAgUmV0dXJucyBhbiBlbXB0eSBhcnJheSBpZgotICAgKiB0aGVyZSBhcmUgbm8gc3VjaCBhbm5vdGF0aW9ucy48L3A+Ci0gICAqLwotICBwdWJsaWMgSkFubm90YXRpb25bXSBnZXRBbm5vdGF0aW9ucyhTdHJpbmcgbmFtZWQpOwotCi0gIC8qKgotICAgKiA8cD5SZXR1cm5zIHRoZSBhbm5vdGF0aW9uIG9uIHRoaXMgYWJzdHJhY3Rpb24gd2hpY2ggaGFzIHRoZSBnaXZlbgotICAgKiBuYW1lLiAgSWYgbW9yZSB0aGFuIG9uZSBzdWNoIGFubm90YXRpb24gZXhpc3RzLCByZXR1cm5zIHRoZSBmaXJzdAotICAgKiBvbmUgaW4gZG9jdW1lbnQgb3JkZXIuICBJZiBub25lIGV4aXN0cywgcmV0dXJucyBudWxsLjwvcD4KLSAgICoKLSAgICogPHA+VGhpcyBtZXRob2QgYWxzbyBwcm92aWRlcyBhIGNvbnZlbmllbnQgd2F5IHRvIGFjY2VzcyBuZXN0ZWQKLSAgICogbWV0YWRhdGEgYnkgdXNpbmcgYW4gJ0AnIGRlbGltaXRlci4gIEZvciBleGFtcGxlLCB0YWtlIGEgbWV0aG9kCi0gICAqIHdpdGggYSAnZm9vJyBhbm5vdGF0aW9uLCB3aGljaCBpbiB0dXJuIGhhcyBhICdiYXInCi0gICAqIHN1Yi1hbm5vdGF0aW9uLiAgVGhlIGphdmFkb2Mtc3R5bGUgYW5ub3RhdGlvbiBmb3IgdGhpcyB3b3VsZCBsaWtlCi0gICAqIDxwcmU+Ci0gICAqIEBmb28gYmFyPW15dmFsdWUKLSAgICogPC9wcmU+Ci0gICAqCi0gICAqIDxwPiBUaGUgSkFubm90YXRpb24gZm9yICdiYXInIGNvdWxkIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IHZpYQotICAgKiBteU1ldGhvZC5nZXRBbm5vdGF0aW9uKCJmb29AYmFyIikuICBOb3RlIHRoYXQgaXQgbWlnaHQgc3RpbGwKLSAgICogcmV0dXJuIG51bGwuPC9wPgotICAgKgotICAgKi8KLSAgcHVibGljIEpBbm5vdGF0aW9uIGdldEFubm90YXRpb24oU3RyaW5nIG5hbWVkKTsKLQotICAvKioKLSAgICogPHA+UmV0dXJucyB0aGUgcGFyZW50IG9mIHRoaXMgYWJzdHJhY3Rpb24sIG9yIG51bGwgaWYgdGhpcwotICAgKiBhbm5vdGF0aW9uIHJlcHJlc2VudHMgYSByb290IGFic3RyYWN0aW9uIChpLmUuIGEgSlBhY2thZ2UpLiAgVGhlCi0gICAqIEpFbGVtZW50IGhpZXJhcmNoeSBsb29rcyBsaWtlIHRoaXM6PC9wPgotICAgKgotICAgKiA8cHJlPgotICAgKiAgICAgSlBhY2thZ2UKLSAgICogICAgICAgSkNsYXNzCi0gICAqICAgICAgICAgSkNvbnN0cnVjdG9yCi0gICAqICAgICAgICAgSkZpZWxkCi0gICAqICAgICAgICAgSk1ldGhvZAotICAgKiAgICAgICAgICAgSlBhcmFtZXRlcgotICAgKiAgICAgICAgIEpQcm9wZXJ0eQotICAgKiAgICAgICAgIEpDbGFzcyAoaW5uZXIgY2xhc3MpLi4uCi0gICAqIDwvcHJlPgotICAgKgotICAgKiA8cD5BZGRpdGlvbmFsbHksIGFueSBvZiB0aGUgYWJzdHJhY3Rpb25zIGFib3ZlIG1heSBpbiB0dXJuIGhhdmUKLSAgICogY2hpbGQgSkFubm90YXRpb25zLCB3aGljaCBtYXkgdGhlbXNlbHZlcyBoYXZlIGNoaWxkCi0gICAqIEpBbm5vdGF0aW9ucy48L3A+Ci0gICAqLwotICBwdWJsaWMgSkVsZW1lbnQgZ2V0UGFyZW50KCk7Ci0KLSAgLyoqCi0gICAqIDxwPlJldHVybnMgdGhlIGNvbW1lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFic3RyYWN0aW9uLgotICAgKiBSZXR1cm5zIGFuIGVtcHR5IGFycmF5IGlmIHRoZXJlIGFyZSBubyBjb21tZW50cy48L3A+Ci0gICAqLwotICBwdWJsaWMgSkNvbW1lbnRbXSBnZXRDb21tZW50cygpOwotCi0gIC8qKgotICAgKiA8cD5SZXR1cm5zIGEgc2ltcGxlIG5hbWUgb2YgdGhpcyBhYnN0cmFjdGlvbi4gIFRoZSBleGFjdCBmb3JtYXQKLSAgICogb2YgdGhlIG5hbWUgZGVwZW5kcyBvbiB0aGUgcGFydGljdWxhciBhYnN0cmFjdGlvbiAoc2VlIGphdmFkb2MpLgotICAgKiBQbGVhc2UgcmVmZXIgdG8gdGhlIEpBTSBwYWNrYWdlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscyBvbgotICAgKiBuYW1pbmcgY29udmVudGlvbnMuPC9wPgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRTaW1wbGVOYW1lKCk7Ci0KLSAgLyoqCi0gICAqIDxwPlJldHVybnMgYSBmdWxseS1xdWFsaWZpZWQgbmFtZSBmb3IgdGhpcyBhYnN0cmFjdGlvbi4gIFRoZQotICAgKiBleGFjdCBmb3JtYXQgb2YgdGhlIG5hbWUgZGVwZW5kcyBvbiB0aGUgcGFydGljdWxhciBhYnN0cmFjdGlvbi4KLSAgICogUGxlYXNlIHJlZmVyIHRvIHRoZSBKQU0gcGFja2FnZSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMgb24KLSAgICogbmFtaW5nIGNvbnZlbnRpb25zLjwvcD4KLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UXVhbGlmaWVkTmFtZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGFuIG9iamVjdCBkZXNjcmliaW5nIHRoZSBzb3VyY2UgZmlsZSBwb3NpdGlvbiBvZiB0aGlzCi0gICAqIGVsZW1lbnQsIG9yIG51bGwgaWYgdGhlIHBvc2l0aW9uIGlzIHVua25vd24gb24gbm90IGFwcGxpY2FibGUuCi0gICAqLwotICBwdWJsaWMgSlNvdXJjZVBvc2l0aW9uIGdldFNvdXJjZVBvc2l0aW9uKCk7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vSkZhY3RvcnkuamF2YSBiL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9KRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjQ0ZWY2Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9KRmFjdG9yeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjExICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW07Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLmludGVybmFsLkpGaWxlU2V0SW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLmludGVybmFsLkphbVByaW50ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5pbnRlcm5hbC5qYXZhZG9jLkpEQ2xhc3NMb2FkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5pbnRlcm5hbC5qYXZhZG9jLkpEQ2xhc3NMb2FkZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uaW50ZXJuYWwucmVmbGVjdC5SQ2xhc3NMb2FkZXI7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi0vKioKLSAqIDxwPlRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGludG8gdGhlIEpBTSBzdWJzeXN0ZW0uICBKRmFjdG9yeSBpcyBhCi0gKiBzaW5nbGV0b24gd2hpY2ggYnVpbGRzIGV2ZXJ5dGhpbmcgeW91IG5lZWQgdG8gZ2V0IHN0YXJ0ZWQgd2l0aCBhIEpBTS48L3A+Ci0gKgotICogPHA+SGVyZSBpcyBhIHNpbXBsZSB1c2FnZSBleGFtcGxlIHdoaWNoIHBhcnNlcyBhbGwgb2YgdGhlIHNvdXJjZSBmaWxlcwotICogaW4gd2VibG9naWMvdXRpbHMvamFtIGFuZCBwcmludHMgb3V0IHRoZSBjbGFzc25hbWVzIHRoYXQgd2VyZQotICogZm91bmQuPC9wPgotICoKLSAqIDxwcmU+Ci0gKiBKRmFjdG9yeSBmYWN0b3J5ID0gSkZhY3RvcnkuZ2V0SW5zdGFuY2UoKTsKLSAqIEpGaWxlU2V0IGZpbGVzID0gZmFjdG9yeS5jcmVhdGVGaWxlU2V0KG5ldyBGaWxlKCJjOlxcd2VibG9naWNcXGRldlxcc3JjIikpOwotICogZmlsZXMuaW5jbHVkZSgid2VibG9naWNcXHV0aWxzXFxqYW1cXCoqXFwqLmphdmEiKTsKLSAqIEpDbGFzc1tdIGNsYXNzZXMgPSBmYWN0b3J5LmxvYWRTb3VyY2VzKGZpbGVzKTsKLSAqIGZvcihpbnQgaT0wOyBpPGNsYXNzZXMubGVuZ3RoOyBpKyspIHsKLSAqICAgU3lzdGVtLm91dC5wcmludGxuKGNsYXNzZXNbaV0uZ2V0UXVhbGlmaWVkTmFtZSgpKTsKLSAqIH0KLSAqIDwvcHJlPgotICoKLSAqIEBhdXRob3IgUGF0cmljayBDYWxhaGFuIDxwY2FsQGJlYS5jb20+Ci0gKi8KLXB1YmxpYyBjbGFzcyBKRmFjdG9yeSB7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFNpbmdsZXRvbgotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gSkZhY3RvcnkgaW5zdGFuY2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEpGYWN0b3J5IGdldEluc3RhbmNlKCkgewotICAgIHJldHVybiBJTlNUQU5DRTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEpGYWN0b3J5IElOU1RBTkNFID0gbmV3IEpGYWN0b3J5KCk7Ci0KLSAgcHJpdmF0ZSBKRmFjdG9yeSgpIHsKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBDb25zdGFudHMKLQotICBwcml2YXRlIEpDbGFzc0xvYWRlciBTWVNURU1fQ0wgPQotICAgICAgICAgIG5ldyBSQ2xhc3NMb2FkZXIoQ2xhc3NMb2FkZXIuZ2V0U3lzdGVtQ2xhc3NMb2FkZXIoKSk7Ci0gIC8vIFJFVklFVyBpIHRoaW5rIHRoaXMgbmVlZHMgdG8gYmUgZXZlbiBtb3JlIHNwZWNpYWwKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gUHVibGljIG1ldGhvZHMKLQotICAvKioKLSAgICogQ3JlYXRlIGFuIG9iamVjdCB3aGljaCBpcyB1c2VkIHRvIGRlc2NyaWJlIGEgc2V0IG9mIGphdmEgc291cmNlCi0gICAqIGZpbGVzIHRvIGJlIHBhcnNlZC4gIE9uY2UgY3JlYXRlZCwgcGF0dGVybnMgb2YgZmlsZXMgdG8gYmUKLSAgICogaW5jbHVkZWQgb3IgZXhjbHVkZWQgY2FuIGJlIHNwZWNpZmllZCBvbiB0aGUgSkZpbGVTZXQuICBTZWUKLSAgICogQGxpbmsgSkZpbGVTZXQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAqCi0gICAqIEBwYXJhbSByb290RGlyIFRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgZmlsZXNldC4gIEFsbCBpbmNsdWRlIGFuZAotICAgKiBleGNsdWRlIHBhdHRlcm5zIGFyZSByZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeS4gIFRoaXMgRmlsZSBtdXN0Ci0gICAqIGV4aXN0IGFuZCBtdXN0IGJlIGEgZGlyZWN0b3J5LgotICAgKi8KLSAgcHVibGljIEpGaWxlU2V0IGNyZWF0ZUZpbGVTZXQoRmlsZSByb290RGlyKSB7Ci0gICAgcmV0dXJuIG5ldyBKRmlsZVNldEltcGwocm9vdERpcik7Ci0gIH0KLQotICAvKioKLSAgICogTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGlzIGd1YXJhbnRlZWQgdG8gcmV0dXJuIGEgbm9uLWVtcHR5IGFycmF5OwotICAgKiBGaWxlTm90Rm91bmRFeGNlcHRpb24gaXMgdGhyb3duIGlmIG5vIGNsYXNzZXMgYXJlIGZvdW5kIHRvIHBhcnNlLgotICAgKgotICAgKiBAdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBJZiBubyBqYXZhIHNvdXJjZSBmaWxlcyBjb3VsZCBiZQotICAgKiBsb2NhdGVkIGluIHRoZSBnaXZlbiBmaWxlc2V0LgotICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uIElmIGFuIElPIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgdGhlCi0gICAqIHNvdXJjZSBmaWxlcy4KLSAgICovCi0gIHB1YmxpYyBKQ2xhc3NbXSBsb2FkU291cmNlcyhKRmlsZVNldCBmcykKLSAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgcmV0dXJuIGxvYWRTb3VyY2VzKGZzLCBudWxsLCBudWxsLCBuZXcgUHJpbnRXcml0ZXIoU3lzdGVtLm91dCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBhIG5vbi1lbXB0eSBhcnJheTsKLSAgICogRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGlzIHRocm93biBpZiBubyBjbGFzc2VzIGFyZSBmb3VuZCB0byBwYXJzZS4KLSAgICoKLSAgICogQHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24gSWYgbm8gamF2YSBzb3VyY2UgZmlsZXMgY291bGQgYmUKLSAgICogbG9jYXRlZCBpbiB0aGUgZ2l2ZW4gZmlsZXNldC4KLSAgICogQHRocm93cyBJT0V4Y2VwdGlvbiBJZiBhbiBJTyBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIHRoZQotICAgKiBzb3VyY2UgZmlsZXMuCi0gICAqLwotICBwdWJsaWMgSkNsYXNzW10gbG9hZFNvdXJjZXMoSkZpbGVTZXQgZnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQ2xhc3NMb2FkZXIgcGFyZW50TG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkFubm90YXRpb25Mb2FkZXIgYW5uTG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpbnRXcml0ZXIgbG9nKQotICAgICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICBKRENsYXNzTG9hZGVyIGxvYWRlciA9IEpEQ2xhc3NMb2FkZXJGYWN0b3J5LmdldEluc3RhbmNlKCkuCi0gICAgICAgICAgICBjcmVhdGUoZnMsIHBhcmVudExvYWRlciwgYW5uTG9hZGVyLCBsb2cpOwotICAgIENvbGxlY3Rpb24gY2xhc3NlcyA9IGxvYWRlci5nZXRSZXNvbHZlZENsYXNzZXMoKTsKLSAgICBKQ2xhc3NbXSBvdXQgPSBuZXcgSkNsYXNzW2NsYXNzZXMuc2l6ZSgpXTsKLSAgICBjbGFzc2VzLnRvQXJyYXkob3V0KTsKLSAgICByZXR1cm4gb3V0OwotICB9Ci0KLSAgLyoqCi0gICAqIEBwYXJhbSBwYXJlbnQgT3B0aW9uYWwgcGFyYW1ldGVyIHdoaWNoIHNwZWNpZmllcyBhIHBhcmVudAotICAgKiBKQ2xhc3NMb2FkZXIgZm9yIHRoZSBjcmVhdGVkIEpDbGFzc0xvYWRlci4gIElmIG51bGwsIHRoZSBwYXJlbnQKLSAgICogaXMgdGhlIFN5c3RlbSBKQ2xhc3NMb2FkZXIuCi0gICAqCi0gICAqIEBwYXJhbSBhbm5Mb2FkZXIgT3B0aW9uYWwgbG9hZGVyIGZvciBzdXBwbGVtZW50YWwgYW5ub3RhdGlvbnMgZm9yCi0gICAqIGNsYXNzZXMgbG9hZGVkIGJ5IHRoZSBjcmVhdGVkIGNsYXNzbG9hZGVyLgotICAgKi8KLSAgcHVibGljIEpDbGFzc0xvYWRlciBjcmVhdGVDbGFzc0xvYWRlcihDbGFzc0xvYWRlciBjbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQ2xhc3NMb2FkZXIgcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBbm5vdGF0aW9uTG9hZGVyIGFubkxvYWRlcikgewotICAgIHJldHVybiBuZXcgUkNsYXNzTG9hZGVyKGNsLCBwYXJlbnQpOy8vRklYTUUKLSAgfQotCi0gIHB1YmxpYyBKQ2xhc3NMb2FkZXIgZ2V0U3lzdGVtQ2xhc3NMb2FkZXIoKSB7Ci0gICAgcmV0dXJuIFNZU1RFTV9DTDsKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBtYWluKCkgbWV0aG9kCi0KLSAgLyoqCi0gICAqIG1haW4gbWV0aG9kIGlzIHByb3ZpZGVkIGZvciBkZWJ1Z2dpbmcuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBpZiAoYXJncy5sZW5ndGggPT0gMCkgewotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVc2FnZTpcbiBqYXZhIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uSkZhY3RvcnkgIiArCi0gICAgICAgICAgICAgICJpbmNsdWRlIFtpbmNsdWRlXS4uLiIpOwotICAgICAgU3lzdGVtLm91dC5mbHVzaCgpOwotICAgICAgU3lzdGVtLmV4aXQoLTEpOwotICAgIH0KLSAgICAvLyBjcmVhdGUgdGhlIGZhY3RvcnkKLSAgICBKRmFjdG9yeSBmYWN0b3J5ID0gbmV3IEpGYWN0b3J5KCk7Ci0gICAgSkZpbGVTZXQgZnMgPSBmYWN0b3J5LmNyZWF0ZUZpbGVTZXQobmV3IEZpbGUoIi4iKSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSBmcy5pbmNsdWRlKGFyZ3NbaV0pOwotICAgIEpDbGFzc1tdIGNsYXNzZXMgPSBmYWN0b3J5LmxvYWRTb3VyY2VzKGZzKTsKLSAgICBKYW1QcmludGVyIHByaW50ZXIgPSBKYW1QcmludGVyLm5ld0luc3RhbmNlKCk7Ci0gICAgUHJpbnRXcml0ZXIgb3V0ID0gbmV3IFByaW50V3JpdGVyKFN5c3RlbS5vdXQsIHRydWUpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKykgewotICAgICAgcHJpbnRlci5wcmludChjbGFzc2VzW2ldLCBvdXQpOwotICAgIH0KLSAgICBTeXN0ZW0ub3V0LmZsdXNoKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9KRmllbGQuamF2YSBiL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9KRmllbGQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVjZWUwMC4uMDAwMDAwMAotLS0gYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vSkZpZWxkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtOwotCi0vKioKLSAqIDxwPlJlcHJlc2VudHMgYW4gZXhwb3NlZCBmaWVsZCBvbiBhIEphdmEgY2xhc3MuPC9wPgotICoKLSAqIEBhdXRob3IgUGF0cmljayBDYWxhaGFuIDxwY2FsQGJlYS5jb20+Ci0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSkZpZWxkIGV4dGVuZHMgSk1lbWJlciB7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHR5cGUgb2YgdGhpcyBmaWVsZC4KLSAgICovCi0gIHB1YmxpYyBKQ2xhc3MgZ2V0VHlwZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGZpZWxkIGlzIGZpbmFsLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNGaW5hbCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGZpZWxkIGlzIHN0YXRpYy4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzU3RhdGljKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0cnVlIGlmIHRoaXMgZmllbGQgaXMgdm9sYXRpbGUuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1ZvbGF0aWxlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0cnVlIGlmIHRoaXMgZmllbGQgaXMgdHJhbnNpZW50LgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNUcmFuc2llbnQoKTsKLQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL0pGaWxlU2V0LmphdmEgYi92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vSkZpbGVTZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RlZTNjNy4uMDAwMDAwMAotLS0gYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vSkZpbGVTZXQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW07Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotLyoqCi0gKiA8cD5EZXNjcmliZXMgYSBzZXQgb2YgaW5wdXQgc291cmNlIGZpbGVzIHdoaWNoIGRlc2NyaWJlIHRoZSBqYXZhIHR5cGVzIHRvCi0gKiBiZSByZXByZXNlbnRlZC4gIEluc3RhbmNlcyBvZiBKRmlsZVNldCBhcmUgY3JlYXRlZCBieSBKRmFjdG9yeS48L3A+Ci0gKgotICogQGF1dGhvciBQYXRyaWNrIENhbGFoYW4gPHBjYWxAYmVhLmNvbT4KLSAqLwotcHVibGljIGludGVyZmFjZSBKRmlsZVNldCB7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFB1YmxpYyBtZXRob2RzCi0KLSAgcHVibGljIHZvaWQgaW5jbHVkZShTdHJpbmcgcGF0dGVybik7Ci0KLSAgcHVibGljIHZvaWQgZXhjbHVkZShTdHJpbmcgcGF0dGVybik7Ci0KLSAgcHVibGljIHZvaWQgc2V0Q2xhc3NwYXRoKFN0cmluZyBjcCk7Ci0KLSAgcHVibGljIHZvaWQgc2V0Q2FzZVNlbnNpdGl2ZShib29sZWFuIGIpOwotCi0gIHB1YmxpYyBGaWxlW10gZ2V0RmlsZXMoKSB0aHJvd3MgSU9FeGNlcHRpb247Ci0KLSAgLy8gIHB1YmxpYyBib29sZWFuIHNldEZvbGxvd1N5bWxpbmtzKGJvb2xlYW4gYik7Ci0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9KTWVtYmVyLmphdmEgYi92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vSk1lbWJlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODBlNzQ2Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9KTWVtYmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTcgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbTsKLQotLyoqCi0gKiA8cD5SZXByZXNlbnRzIGFuIGFic3RyYWN0aW9uIHdoaWNoIGNhbiBiZSBtZW1iZXIgb2YgYSBjbGFzcy4gIFN1Y2gKLSAqIGFic3RyYWN0aW9ucyBpbmNsdWRlOiBjb25zdHJ1Y3RvcnMsIG1ldGhvZHMsIGZpZWxkcywgYW5kIGNsYXNzZXMKLSAqIChpbiB0aGUgY2FzZSBvZiBpbm5lciBjbGFzc2VzKS4gIEpNZW1iZXIncyBzaGFyZSB0aGUgZm9sbG93aW5nCi0gKiBhdHRyaWJ1dGVzIGluIGNvbW1vbjogdGhleSBoYXZlIHNvbWUgbGV2ZWwgb2YgYWNjZXNzIHByb3RlY3Rpb24KLSAqIChwdWJsaWMvcHJvdGVjdGVkL3ByaXZhdGUpIGFuZCBhcmUgKHVzdWFsbHkpIGNvbnRhaW5lZCB3aXRoaW4gYQotICogY2xhc3MuPC9wPgotICoKLSAqIDxwPkJlY2F1c2UgY2xhc3NlcyB0aGVtc2VsdmVzIGNhbiBiZSBtZW1iZXJzIG9mIG90aGVyIGNsYXNzZXMsCi0gKiBKQ2xhc3MgZXh0ZW5kcyBKTWVtYmVyLiAgSW4gdGhlIGNhc2Ugd2hlcmUgYSBKQ2xhc3MgcmVwcmVzZW50cyBhCi0gKiB0b3AtbGV2ZWwgY2xhc3MgKGkuZS4gbm90IGFuIGlubmVyIGNsYXNzKSwKLSAqIEpNZW1iZXIuZ2V0Q29udGFpbmluZ0NsYXNzKCkgd2lsbCBhbHdheXMgcmV0dXJuIG51bGwuPC9wPgotICoKLSAqIDxwPk5vdGUgdGhhdCB0aGUgdmFyaW91cyBhY2Nlc3MgcHJvdGVjdGlvbiBsZXZlbHMgYXJlIGFsbCBtdXR1YWxseQotICogZXhjbHVzaXZlLiAgRm9yIGEgZ2l2ZW4gYWJzdHJhY3Rpb24sIG9ubHkgb25lIG9mIGlzUHJpdmF0ZSgpLAotICogaXNQYWNrYWdlUHJpdmF0ZSgpLCBpc1Byb3RlY3RlZCgpLCBvciBpc1B1YmxpYygpIHdpbGwgcmV0dXJuIHRydWUuCi0gKiBOb3RlIHRoYXQgdGhpcyBpbmZvcm1hdGlvbiBpcyBhbHNvIGV4cG9zZWQgdmlhIGdldE1vZGlmaWVycygpLAotICogd2hpY2ggcmV0dXJucyBhIGJpdC1maWVsZCB0aGF0IGlzIGlkZW50aWNhbCB0byB0aGF0IGRlc2NyaWJlZCBpbgotICogamF2YS5sYW5nLnJlZmxlY3QuTW9kaWZpZXIuPC9wPgotICoKLSAqIEBhdXRob3IgUGF0cmljayBDYWxhaGFuIDxwY2FsQGJlYS5jb20+Ci0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSk1lbWJlciBleHRlbmRzIEpFbGVtZW50IHsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gUHVibGljIG1ldGhvZHMKLQotICAvKioKLSAgICogPHA+UmV0dXJucyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjbGFzcyB3aGljaCBjb250YWlucyB0aGlzCi0gICAqIG1lbWJlci4gIE5vdGUgdGhhdCBpZiB0aGlzIG1lbWJlciBpcyBhbiBpbm5lciBjbGFzcywgdGhpcyBtZXRob2QKLSAgICogcmV0dXJucyB0aGUgY2xhc3MgaW4gd2hpY2ggdGhpcyBjbGFzcyBpcyBkZWNsYXJlZCAoaS5lLiAnb3V0ZXInKS4KLSAgICogSWYgdGhpcyBtZW1iZXIgaXMgYSB0b3AtbGV2ZWwgY2xhc3MsIHRoaXMgbWV0aG9kIHdpbGwgYWx3YXlzCi0gICAqIHJldHVybiBudWxsLjwvcD4KLSAgICovCi0gIHB1YmxpYyBKQ2xhc3MgZ2V0Q29udGFpbmluZ0NsYXNzKCk7Ci0KLSAgLyoqCi0gICAqIDxwPlJldHVybnMgdGhlIG1vZGlmaWVycyBzcGVjaWZpZXIuICBUaGlzIGlzIGEgYml0IGZpZWxkIGV4YWN0bHkKLSAgICogbGlrZSB0aG9zZSByZXR1cm5lZCBieSBqYXZhLmxhbmcuQ2xhc3MuZ2V0TW9kaWZpZXJzKCkgYW5kIGNhbiBiZQotICAgKiBtYW5pcHVsYXRlZCB1c2luZyBqYXZhLmxhbmcucmVmbGVjdC5Nb2RpZmllciBpbiB0aGUgc2FtZSB3YXkuPC9wPgotICAgKi8KLSAgcHVibGljIGludCBnZXRNb2RpZmllcnMoKTsKLQotICAvKioKLSAgICogUmV0dXJuIHRydWUgaWYgdGhpcyBtZW1iZXIgaXMgcGFja2FnZSBwcml2YXRlIChpLmUuIHRoZSBkZWZhdWx0Ci0gICAqIGFjY2VzcyBwcm90ZWN0aW9uIGxldmVsKS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzUGFja2FnZVByaXZhdGUoKTsKLQotICAvKioKLSAgICogUmV0dXJuIHRydWUgaWYgdGhpcyBtZW1iZXIgaXMgcHJpdmF0ZS4gIEVxdWl2YWxlbnQgdG8gY2FsbGluZwotICAgKiBNb2RpZmllci5pc1ByaXZhdGUobWVtYmVyLmdldE1vZGlmaWVycygpKS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzUHJpdmF0ZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIG1lbWJlciBpcyBwcm90ZWN0ZWQuICBFcXVpdmFsZW50IHRvIGNhbGxpbmcKLSAgICogTW9kaWZpZXIuaXNQcm90ZWN0ZWQobWVtYmVyLmdldE1vZGlmaWVycygpKS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzUHJvdGVjdGVkKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0cnVlIGlmIHRoaXMgbWVtYmVyIGlzIHB1YmxpYy4gIEVxdWl2YWxlbnQgdG8gY2FsbGluZwotICAgKiBNb2RpZmllci5pc1Byb3RlY3RlZChtZW1iZXIuZ2V0TW9kaWZpZXJzKCkpLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNQdWJsaWMoKTsKLQotICAvKioKLSAgICogPHA+UmV0dXJucyB0aGUgc291cmNlIGNvZGUgcG9zaXRpb24gb2YgdGhpcyBtZW1iZXIsIG9yIG51bGwgaWYgaXQKLSAgICogaXMgdW5rbm93bi48L3A+Ci0gICAqLwotICBwdWJsaWMgSlNvdXJjZVBvc2l0aW9uIGdldFNvdXJjZVBvc2l0aW9uKCk7Ci0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9KTWV0aG9kLmphdmEgYi92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vSk1ldGhvZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWU1NDVmLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9KTWV0aG9kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODcgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbTsKLQotLyoqCi0gKiBSZXByZXNlbnRzIGEgbWV0aG9kIG9mIGEgamF2YSBjbGFzcy4KLSAqCi0gKiBAYXV0aG9yIFBhdHJpY2sgQ2FsYWhhbiA8cGNhbEBiZWEuY29tPgotICovCi1wdWJsaWMgaW50ZXJmYWNlIEpNZXRob2QgZXh0ZW5kcyBKTWVtYmVyIHsKLQotICAvKioKLSAgICogPHA+UmV0dXJucyByZXByZXNlbnRhdGlvbnMgb2YgdGhlIHBhcmFtZXRlcnMgdGFrZW4gYnkgdGhpcwotICAgKiBtZXRob2QuICBSZXR1cm5zIGFuIGFycmF5IG9mIGxlbmd0aCAwIGlmIHRoZSBtZXRob2QgdGFrZXMgbm8KLSAgICogcGFyYW1ldGVycy48L3A+Ci0gICAqLwotICBwdWJsaWMgSlBhcmFtZXRlcltdIGdldFBhcmFtZXRlcnMoKTsKLQotICAvKioKLSAgICogPHA+UmV0dXJucyByZXByZXNlbnRhdGlvbnMgb2YgdGhlIHR5cGUgb2YgZWFjaCBvZiB0aGUgZXhjZXB0aW9ucwotICAgKiB3aGljaCBjYW4gYmUgdGhyb3duIGJ5IHRoaXMgbWV0aG9kLiAgUmV0dXJucyBhbiBhcnJheSBvZiBsZW5ndGggMAotICAgKiBpZiB0aGUgbWV0aG9kIHRocm93cyBubyBleGNlcHRpb25zLjwvcD4KLSAgICovCi0gIHB1YmxpYyBKQ2xhc3NbXSBnZXRFeGNlcHRpb25UeXBlcygpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgSkNsYXNzIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHR5cGUgb2YgdGhpcyBtZXRob2RzCi0gICAqIHJldHVybiB2YWx1ZS4gIE5vdGUgdGhhdCB2b2lkIG1ldGhvZHMgd2lsbCByZXR1cm4gYSBKQ2xhc3MKLSAgICogcmVwcmVzZW50aW5nIHZvaWQuPC9wPgotICAgKi8KLSAgcHVibGljIEpDbGFzcyBnZXRSZXR1cm5UeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0cnVlIGlmIHRoaXMgbWV0aG9kIGlzIGRlY2xhcmVkIGZpbmFsLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNGaW5hbCgpOwotCi0gIC8qKgotICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIG1ldGhvZCBpcyBzdGF0aWMuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc1N0YXRpYygpOwotCi0gIC8qKgotICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIG1lbWJlciBpcyBmaW5hbC4gIE5vdGUgdGhhdCBjb25zdHJ1Y3RvcnMgYXJlCi0gICAqIGZpZWxkcyBhcmUgbmV2ZXIgYWJzdHJhY3QuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc0Fic3RyYWN0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIG1ldGhvZCBpcyBkZWNsYXJlZCBuYXRpdmUuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBpc05hdGl2ZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBtZXRob2QgaXMgZGVjbGFyZWQgc3luY2hyb25pemVkLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNTeW5jaHJvbml6ZWQoKTsKLQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoaXMgY2xhc3MgaW4gdGhlIGZvcm1hdCBkZXNjcmliZWQgaW4gc2VjdGlvbgotICAgKiA0LjMuMyBvZiB0aGUgVk0gc3BlYywgJ0NsYXNzIEZpbGUgRm9ybWF0OiBNZXRob2QgRGVzY3JpcHRvcnMuJwotICAgKiBUaGlzIGlzIHRoZSBuYXN0eSBmb3JtYXQgb2YgdGhlIG5hbWUgcmV0dXJuZWQgYnkKLSAgICogamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kLmdldE5hbWUoKS4gIEZvciBkZXRhaWxzLCBzZWUKLSAgICogaHR0cDovL2phdmEuc3VuLmNvbS9kb2NzL2Jvb2tzL3Ztc3BlYy8ybmQtZWRpdGlvbi9odG1sL0NsYXNzRmlsZS5kb2MuaHRtbAotICAgKi8KLSAgLy8gIHB1YmxpYyBTdHJpbmcgZ2V0TWV0aG9kRGVzY3JpcHRvcigpOyAgIGR1bm5vIGlmIHRoaXMgaXMgdXNlZnVsCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vSlBhY2thZ2UuamF2YSBiL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9KUGFja2FnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjllODU4Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9KUGFja2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ1ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW07Ci0KLS8qKgotICogUmVwcmVzZW50cyBhIGphdmEgcGFja2FnZS4gUHJvdmlkZXMgYWNjZXNzIHRvIGluZm9ybWF0aW9uIGFib3V0IHRoZQotICogcGFja2FnZSwgdGhlIHBhY2thZ2UncyBjb21tZW50IGFuZCB0YWdzLCBhbmQgdGhlIGNsYXNzZXMgaW4gdGhlCi0gKiBwYWNrYWdlLgotICoKLSAqIDxwPkZJWE1FIGhvdyBhcmUgd2UgaGFuZGxpbmcgdGhlIGRlZmF1bHQgcGFja2FnZT8gIGkgdGhpbmsgaXQKLSAqIHNob3VsZCBiZSBhIHBhY2thZ2Ugd2l0aCBhbiBlbXB0eSBzdHJpbmcgZm9yIGEgbmFtZSwgYnV0IHdlIG5lZWQgdG8KLSAqIG1ha2Ugc3VyZSB0aGlzIHdvcmtzIGFuZCBkb2N1bWVudCBpdC48L3A+Ci0gKgotICogQGF1dGhvciBQYXRyaWNrIENhbGFoYW4gPHBjYWxAYmVhLmNvbT4KLSAqLwotcHVibGljIGludGVyZmFjZSBKUGFja2FnZSBleHRlbmRzIEpFbGVtZW50IHsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgY2xhc3NlcyBpbiB0aGlzIHBhY2thZ2Ugd2hpY2ggd2VyZSBzcGVjaWZpZWQgYXMgcGFydAotICAgKiBvZiB0aGUgSlJvb3QgY29uc3RydWN0aW9uLiAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgbmVjZXNzYXJpbHkKLSAgICogaW5jbHVkZSBhbGwgb2YgdGhlIGNsYXNzZXMgdGhhdCBhcmUgYWN0dWFsbHkgaW4gdGhlIHBhY2thZ2UgKGl0Ci0gICAqIG1heSBub3QgY29udGFpbiBhbnkgc3BlY2lmaWVkIGNsYXNzZXMgYXQgYWxsKS4KLSAgICovCi0gIHB1YmxpYyBKQ2xhc3NbXSBnZXRDbGFzc2VzKCk7Ci0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9KUGFyYW1ldGVyLmphdmEgYi92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vSlBhcmFtZXRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTg1MDA2Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9KUGFyYW1ldGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtOwotCi0vKioKLSAqIFJlcHJlc2VudHMgYSBzaW5nbGUgcGFyYW1ldGVyIG9mIGEgSmF2YSBtZXRob2Qgb3IgY29uc3RydWN0b3IuCi0gKiBUaGlzIHR5cGUgYW5kIG5hbWUgaW5mb3JtYXRpb24gYXMgd2VsbCBhcyBhc3NvY2lhdGVkIG1ldGFkYXRhLgotICoKLSAqIEBhdXRob3IgUGF0cmljayBDYWxhaGFuIDxwY2FsQGJlYS5jb20+Ci0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgSlBhcmFtZXRlciBleHRlbmRzIEpFbGVtZW50IHsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGlzIHBhcmFtZXRlci4KLSAgICovCi0gIHB1YmxpYyBKQ2xhc3MgZ2V0VHlwZSgpOwotCi0KLQotICAvLyBSRVZJRVc6IFRoaXMgd291bGQgYmUgbmljZSwgYnV0IHRoZXJlIGlzIGN1cnJlbnRseSBubyB3YXkgdG8gZmluZAotICAvLyB0aGlzIG91dCB2aWEgZWl0aGVyIGphdmFkb2Mgb3IgcmVmbGVjdGlvbi4gIEkgZ3Vlc3MgaXQncyBub3QKLSAgLy8gY2xlYXIgdGhhdCB0aGlzIGlzIGdvaW5nIHRvIGJlIHZlcnkgdXNlZnVsIGFueXdheS4KLSAgLyoqCi0gICAqIFJldHVybiB0cnVlIGlmIHRoaXMgcGFyYW1ldGVyIGlzIGZpbmFsLgotICAgKi8KLSAgLy8gIHB1YmxpYyBib29sZWFuIGlzRmluYWwoKTsKLX0KLQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL0pQcm9wZXJ0eS5qYXZhIGIvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL0pQcm9wZXJ0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTk0ZDBkLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9KUHJvcGVydHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW07Ci0KLS8qKgotICogPHA+VGhpcyBpcyBhIGhlbHBlciBjbGFzcyB3aGljaCBwcm92aWRlcyBqYXZhLmJlYW5zLWxpa2UKLSAqIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIEpBTSBmcmFtZXdvcmsuCi0KLSBleHRlbnNpb24gdG8gdGhlIEpBTSBmcmFtZXdvcmsgdGhhdCBlbmNhcHN1bGF0ZXMgdGhlIG5vdGlvbiBvZiBhCi0gKiBqYXZhYmVhbiBwcm9wZXJ0aWVzLiAgVGhpcyBjbGFzcyBjYW4gYmUgdXNlZCB0byBnZXQgc2ltaWxhcgotICogZnVuY3Rpb25hbGl0eSBpbiBKQU0gdGhhdCBpcyBwcm92aWRlZCBieSB0aGUgamF2YS5iZWFucy4qCi0gKiBwYWNrZ2UuPC9wPgotICoKLSAqIDxwPkFuIGFycmF5IG9mIEpQcm9wZXJ0aWVzIGZvciBhIGdpdmVuIEpDbGFzcyBjYW4gYmUgcmV0cmlldmVkCi0gKiB1c2luZyB0aGUgZ2V0UHJvcGVydGllcyBmYWN0b3J5IG1ldGhvZC48L3A+Ci0gKgotICogQGF1dGhvciBQYXRyaWNrIENhbGFoYW4gPHBjYWxAYmVhLmNvbT4KLSAqLwotcHVibGljIGludGVyZmFjZSBKUHJvcGVydHkgZXh0ZW5kcyBKRWxlbWVudCB7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFB1YmxpYyBtZXRob2RzCi0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBKQ2xhc3Mgd2hpY2ggcmVwcmVzZW50cyB0aGUgdHlwZSBvZiB0aGlzIHByb3BlcnR5LgotICAgKi8KLSAgcHVibGljIEpDbGFzcyBnZXRUeXBlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBKTWV0aG9kIHdoaWNoIHJlcHJlc2VudHMgdGhlIHNldHRlciBmb3IgdGhpcyBwcm9wZXJ0eS4KLSAgICogUmV0dXJucyBudWxsIGlmIHRoaXMgcHJvcGVydHkgaXMgcmVhZC1vbmx5LgotICAgKi8KLSAgcHVibGljIEpNZXRob2QgZ2V0U2V0dGVyKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBKTWV0aG9kIHdoaWNoIHJlcHJlc2VudHMgdGhlIGdldHRlciBmb3IgdGhpcyBwcm9wZXJ0eS4KLSAgICogUmV0dXJucyBudWxsIGlmIHRoaXMgcHJvcGVydHkgaXMgd3JpdGUtb25seS4KLSAgICovCi0gIHB1YmxpYyBKTWV0aG9kIGdldEdldHRlcigpOwotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL0pTb3VyY2VQb3NpdGlvbi5qYXZhIGIvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL0pTb3VyY2VQb3NpdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGMwNTViLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9KU291cmNlUG9zaXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW07Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci0KLS8qKgotICogRGVzY3JpYmVzIGEgc3BlY2lmaWMgcG9pbnQgaW4gYSBzb3VyY2UgZmlsZS4KLSAqCi0gKiBAYXV0aG9yIFBhdHJpY2sgQ2FsYWhhbiA8cGNhbEBiZWEuY29tPgotICovCi1wdWJsaWMgaW50ZXJmYWNlIEpTb3VyY2VQb3NpdGlvbiB7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHRleHQgY29sdW1uIG51bWJlciBmb3IgdGhpcyBzb3VyY2UgcG9zaXRpb24sIG9yIC0xIGlmCi0gICAqIGl0IGlzIG5vdCBrbm93bi4KLSAgICovCi0gIHB1YmxpYyBpbnQgZ2V0Q29sdW1uKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHRleHQgbGluZSBudW1iZXIgZm9yIHRoaXMgc291cmNlIHBvc2l0aW9uLCBvciAtMSBpZgotICAgKiBpdCBpcyBub3Qga25vd24uCi0gICAqLwotICBwdWJsaWMgaW50IGdldExpbmUoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgVVJJIG9mIHRoZSBzb3VyY2UgZmlsZSwgb3IgbnVsbCBpZiBpdCBpcyBub3Qga25vd24uCi0gICAqLwotICBwdWJsaWMgVVJJIGdldFNvdXJjZVVSSSgpOwotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL0FycmF5SkNsYXNzLmphdmEgYi92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvQXJyYXlKQ2xhc3MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM0MWY3ZS4uMDAwMDAwMAotLS0gYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvQXJyYXlKQ2xhc3MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0NCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS4qOwotCi1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KLQotLyoqCi0gKiBKQ2xhc3MgZm9yIGFycmF5IHR5cGVzLiAgVGhlc2UgYXJlIHN5bnRoZXNpemVkIGF0IHJ1bnRpbWUgYnkgdGhlCi0gKiBKQU0gZnJhbWV3b3JrCi0gKgotICogQGF1dGhvciBQYXRyaWNrIENhbGFoYW4gPHBjYWxAYmVhLmNvbT4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIEFycmF5SkNsYXNzIGV4dGVuZHMgQnVpbHRpbkpDbGFzcyB7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFZhcmlhYmxlcwotCi0gIHByaXZhdGUgaW50IG1EaW1lbnNpb25zOwotICBwcml2YXRlIEpDbGFzcyBtQ29tcG9uZW50VHlwZTsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gRmFjdG9yeSBtZXRob2RzCi0KLSAgcHVibGljIHN0YXRpYyBKQ2xhc3MgY3JlYXRlQ2xhc3NGb3IoU3RyaW5nIGFycmF5RkQsIEpDbGFzc0xvYWRlciBsb2FkZXIpCi0gICAgICAgICAgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24gewotICAgIGlmICghYXJyYXlGRC5zdGFydHNXaXRoKCJbIikpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm11c3QgYmUgYW4gYXJyYXkgdHlwZTogIiArIGFycmF5RkQpOwotICAgIH0KLSAgICAvLyBpZiBpdCdzIGFuIGFycmF5IHR5cGUsIHdlIGhhdmUgdG8gYmUgY2FyZWZ1bAotICAgIFN0cmluZyBjb21wb25lbnRUeXBlOwotICAgIGlmIChhcnJheUZELmVuZHNXaXRoKCI7IikpIHsKLSAgICAgIC8vIGlmIGl0J3MgYW4gYXJyYXkgb2YgY29tcGxleCB0eXBlcywgd2UgbmVlZCB0byBjb25zdHJ1Y3QKLSAgICAgIC8vIGFuIEFycmF5SkNsYXNzIHdyYXBwZXIgYW5kIGdvIGJhY2sgaW50byB0aGUgY29udGV4dCB0bwotICAgICAgLy8gZ2V0IHRoZSBjb21wb25lbnQgdHlwZSwgc2luY2UgYSBzb3VyY2UgZGVzY3JpcHRpb24gZm9yIGl0Ci0gICAgICAvLyBtaWdodCBiZSBhdmFpbGFibGUKLSAgICAgIGludCBkaW1zID0gYXJyYXlGRC5pbmRleE9mKCJMIik7Ci0gICAgICBpZiAoZGltcyAhPSAtMSAmJiBkaW1zIDwgYXJyYXlGRC5sZW5ndGgoKSAtIDIpIHsKLSAgICAgICAgY29tcG9uZW50VHlwZSA9IGFycmF5RkQuc3Vic3RyaW5nKGRpbXMgKyAxLCBhcnJheUZELmxlbmd0aCgpIC0gMSk7Ci0gICAgICAgIHJldHVybiBuZXcgQXJyYXlKQ2xhc3MobG9hZGVyLmxvYWRDbGFzcyhjb21wb25lbnRUeXBlKSwgZGltcyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBuYW1lIGlzIG1hbGZvcm1lZAotICAgICAgICB0aHJvdyBuZXcgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbihhcnJheUZEKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgaW50IGRpbXMgPSBhcnJheUZELmxhc3RJbmRleE9mKCJbIikgKyAxOwotICAgICAgSkNsYXNzIHByaW1UeXBlID0gUHJpbWl0aXZlSkNsYXNzLmdldFByaW1pdGl2ZUNsYXNzRm9yTmFtZQotICAgICAgICAgICAgICAoYXJyYXlGRC5zdWJzdHJpbmcoZGltcywgZGltcyArIDEpKTsKLSAgICAgIGlmIChwcmltVHlwZSA9PSBudWxsKSB0aHJvdyBuZXcgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbihhcnJheUZEKTsKLSAgICAgIHJldHVybiBuZXcgQXJyYXlKQ2xhc3MocHJpbVR5cGUsIGRpbXMpOwotICAgIH0KLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBDb25zdHJ1Y3RvcnMKLQotICAvKioKLSAgICogQ29uc3RydWN0cyBhIEpEQ2xhc3MgZm9yIHRoZSBnaXZlbiBDbGFzc0RvYyBpbiB0aGUgZ2l2ZW4gY29udGV4dC4KLSAgICovCi0gIHByaXZhdGUgQXJyYXlKQ2xhc3MoSkNsYXNzIGNvbXBvbmVudFR5cGUsIGludCBkaW1lbnNpb25zKSB7Ci0gICAgaWYgKGRpbWVuc2lvbnMgPCAxKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJkaW1lbnNpb25zPSIgKyBkaW1lbnNpb25zKTsKLSAgICB9Ci0gICAgaWYgKGNvbXBvbmVudFR5cGUgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibnVsbCBjb21wb25lbnRUeXBlIik7Ci0gICAgfQotICAgIG1Db21wb25lbnRUeXBlID0gY29tcG9uZW50VHlwZTsKLSAgICBtRGltZW5zaW9ucyA9IGRpbWVuc2lvbnM7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gSkVsZW1lbnQgaW1wbGVtZW50YXRpb24KLQotICBwdWJsaWMgSkVsZW1lbnQgZ2V0UGFyZW50KCkgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIEpFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNpbXBsZU5hbWUoKSB7Ci0gICAgU3RyaW5nIG91dCA9IGdldFF1YWxpZmllZE5hbWUoKTsKLSAgICBpbnQgbGFzdERvdCA9IG91dC5sYXN0SW5kZXhPZignLicpOwotICAgIHJldHVybiAobGFzdERvdCA9PSAtMSkgPyBvdXQgOiBvdXQuc3Vic3RyaW5nKGxhc3REb3QgKyAxKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UXVhbGlmaWVkTmFtZSgpIHsKLSAgICBTdHJpbmdXcml0ZXIgb3V0ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIG91dC53cml0ZShtQ29tcG9uZW50VHlwZS5nZXRRdWFsaWZpZWROYW1lKCkpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbURpbWVuc2lvbnM7IGkrKykgb3V0LndyaXRlKCJbXSIpOwotICAgIHJldHVybiBvdXQudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBKQW5ub3RhdGlvbltdIGdldEFubm90YXRpb25zKCkgewotICAgIHJldHVybiBCYXNlSkVsZW1lbnQuTk9fQU5OT1RBVElPTjsKLSAgfQotCi0gIHB1YmxpYyBKQW5ub3RhdGlvbltdIGdldEFubm90YXRpb25zKFN0cmluZyBuYW1lZCkgewotICAgIHJldHVybiBCYXNlSkVsZW1lbnQuTk9fQU5OT1RBVElPTjsKLSAgfQotCi0gIHB1YmxpYyBKQW5ub3RhdGlvbiBnZXRBbm5vdGF0aW9uKFN0cmluZyBuYW1lZCkgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIEpDb21tZW50W10gZ2V0Q29tbWVudHMoKSB7Ci0gICAgcmV0dXJuIEJhc2VKRWxlbWVudC5OT19DT01NRU5UOwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIEpNZW1iZXIgaW1wbGVtZW50YXRpb24KLQotICBwdWJsaWMgaW50IGdldE1vZGlmaWVycygpIHsKLSAgICByZXR1cm4gbUNvbXBvbmVudFR5cGUuZ2V0TW9kaWZpZXJzKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1BhY2thZ2VQcml2YXRlKCkgewotICAgIHJldHVybiBtQ29tcG9uZW50VHlwZS5pc1BhY2thZ2VQcml2YXRlKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1Byb3RlY3RlZCgpIHsKLSAgICByZXR1cm4gbUNvbXBvbmVudFR5cGUuaXNQcm90ZWN0ZWQoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzUHVibGljKCkgewotICAgIHJldHVybiBtQ29tcG9uZW50VHlwZS5pc1B1YmxpYygpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNQcml2YXRlKCkgewotICAgIHJldHVybiBtQ29tcG9uZW50VHlwZS5pc1ByaXZhdGUoKTsKLSAgfQotCi0gIHB1YmxpYyBKU291cmNlUG9zaXRpb24gZ2V0U291cmNlUG9zaXRpb24oKSB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgSkNsYXNzIGdldENvbnRhaW5pbmdDbGFzcygpIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBKQ2xhc3MgaW1wbGVtZW50YXRpb24KLQotICBwdWJsaWMgSkNsYXNzTG9hZGVyIGdldENsYXNzTG9hZGVyKCkgewotICAgIHJldHVybiBtQ29tcG9uZW50VHlwZS5nZXRDbGFzc0xvYWRlcigpOwotICB9Ci0KLSAgcHVibGljIEpDbGFzcyBmb3JOYW1lKFN0cmluZyBmZCkgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24gewotICAgIHJldHVybiBtQ29tcG9uZW50VHlwZS5mb3JOYW1lKGZkKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzQXJyYXkoKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgSkNsYXNzIGdldEFycmF5Q29tcG9uZW50VHlwZSgpIHsKLSAgICByZXR1cm4gbUNvbXBvbmVudFR5cGU7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldEFycmF5RGltZW5zaW9ucygpIHsKLSAgICByZXR1cm4gbURpbWVuc2lvbnM7Ci0gIH0KLQotICBwdWJsaWMgSkNsYXNzIGdldFN1cGVyY2xhc3MoKSB7Ci0gICAgcmV0dXJuIE9iamVjdEpDbGFzcy5nZXRJbnN0YW5jZSgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNBc3NpZ25hYmxlRnJvbShKQ2xhc3MgYykgewotICAgIHJldHVybiBjLmlzQXJyYXkoKSAmJgotICAgICAgICAgICAgKGMuZ2V0QXJyYXlEaW1lbnNpb25zKCkgPT0gbURpbWVuc2lvbnMpICYmCi0gICAgICAgICAgICAobUNvbXBvbmVudFR5cGUuaXNBc3NpZ25hYmxlRnJvbShjLmdldEFycmF5Q29tcG9uZW50VHlwZSgpKSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZpZWxkRGVzY3JpcHRvcigpIHsKLSAgICAvL1JFVklFVyBzaG91bGQgd2UgY2FjaGUgdGhpcyByZXN1bHQ/Ci0gICAgU3RyaW5nV3JpdGVyIG91dCA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1EaW1lbnNpb25zOyBpKyspIG91dC53cml0ZSgiWyIpOwotICAgIGlmIChtQ29tcG9uZW50VHlwZS5pc1ByaW1pdGl2ZSgpKSB7Ci0gICAgICBvdXQud3JpdGUobUNvbXBvbmVudFR5cGUuZ2V0RmllbGREZXNjcmlwdG9yKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBvdXQud3JpdGUoIkwiKTsKLSAgICAgIG91dC53cml0ZShtQ29tcG9uZW50VHlwZS5nZXRRdWFsaWZpZWROYW1lKCkpOwotICAgICAgb3V0LndyaXRlKCI7Iik7Ci0gICAgfQotICAgIHJldHVybiBvdXQudG9TdHJpbmcoKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL0Jhc2VKQW5ub3RhdGlvbi5qYXZhIGIvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL0Jhc2VKQW5ub3RhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmE3NWNhLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9CYXNlSkFubm90YXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5KQW5ub3RhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLkpFbGVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uSlNvdXJjZVBvc2l0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotLyoqCi0gKiBKYXZhZG9jLWJhY2tlZCBpbXBsZW1lbnRhdGlvbiBvZiBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLkFubm90YXRpb24KLSAqCi0gKiBAYXV0aG9yIFBhdHJpY2sgQ2FsYWhhbiA8cGNhbEBiZWEuY29tPgotICovCi1wdWJsaWMgY2xhc3MgQmFzZUpBbm5vdGF0aW9uIGV4dGVuZHMgQmFzZUpFbGVtZW50IGltcGxlbWVudHMgSkFubm90YXRpb24gewotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gQ29uc3RhbnRzCi0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5BTUVfVkFMVUVfU0VQUyA9ICJcblxyIjsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gVmFyaWFibGVzCi0KLSAgcHJpdmF0ZSBKU291cmNlUG9zaXRpb24gbVNvdXJjZVBvc2l0aW9uID0gbnVsbDsKLSAgcHJpdmF0ZSBTdHJpbmcgbU5hbWUsIG1WYWx1ZSA9IG51bGw7Ci0gIHByaXZhdGUgSkVsZW1lbnQgbVBhcmVudDsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gQ29uc3RydWN0b3JzCi0KLSAgcHVibGljIEJhc2VKQW5ub3RhdGlvbihKRWxlbWVudCBwYXJlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlKSB7Ci0gICAgdGhpcyhwYXJlbnQsIG5hbWUsIHZhbHVlLCBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBCYXNlSkFubm90YXRpb24oSkVsZW1lbnQgcGFyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBKU291cmNlUG9zaXRpb24gcG9zKSB7Ci0gICAgaWYgKG5hbWUgPT0gbnVsbCkgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibnVsbCBuYW1lIik7Ci0gICAgaWYgKHBhcmVudCA9PSBudWxsKSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJudWxsIHBhcmVudCIpOwotICAgIG1QYXJlbnQgPSBwYXJlbnQ7Ci0gICAgbU5hbWUgPSBuYW1lOwotICAgIG1WYWx1ZSA9IHZhbHVlOyAgLy8gb2sgdG8gYmUgbnVsbAotICAgIG1Tb3VyY2VQb3NpdGlvbiA9IHBvczsKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBKRWxlbWVudCBpbXBsZW1lbnRhdGlvbgotCi0gIHB1YmxpYyBKRWxlbWVudCBnZXRQYXJlbnQoKSB7Ci0gICAgcmV0dXJuIG1QYXJlbnQ7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0gICAgcmV0dXJuIG1OYW1lOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTaW1wbGVOYW1lKCkgewotICAgIHJldHVybiBtTmFtZTsKLSAgfSAvL0ZJWE1FCi0KLSAgcHVibGljIFN0cmluZyBnZXRRdWFsaWZpZWROYW1lKCkgewotICAgIHJldHVybiBtTmFtZTsKLSAgfSAvL0ZJWE1FCi0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIEpBbm5vdGF0aW9uIGltcGxlbWVudGF0aW9uCi0KLSAgcHVibGljIEpTb3VyY2VQb3NpdGlvbiBnZXRTb3VyY2VQb3NpdGlvbigpIHsKLSAgICByZXR1cm4gbVNvdXJjZVBvc2l0aW9uOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTdHJpbmdWYWx1ZSgpIHsKLSAgICByZXR1cm4gbVZhbHVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0Qm9vbGVhblZhbHVlKCkgewotICAgIHJldHVybiBCb29sZWFuLnZhbHVlT2YoZ2V0U3RyaW5nVmFsdWUoKSkuYm9vbGVhblZhbHVlKCk7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldEludFZhbHVlKCkgewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gSW50ZWdlci5wYXJzZUludChnZXRTdHJpbmdWYWx1ZSgpKTsKLSAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgbG9uZyBnZXRMb25nVmFsdWUoKSB7Ci0gICAgdHJ5IHsKLSAgICAgIHJldHVybiBMb25nLnBhcnNlTG9uZyhnZXRTdHJpbmdWYWx1ZSgpKTsKLSAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgZmxvYXQgZ2V0RmxvYXRWYWx1ZSgpIHsKLSAgICB0cnkgewotICAgICAgcmV0dXJuIEZsb2F0LnBhcnNlRmxvYXQoZ2V0U3RyaW5nVmFsdWUoKSk7Ci0gICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgewotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGRvdWJsZSBnZXREb3VibGVWYWx1ZSgpIHsKLSAgICB0cnkgewotICAgICAgcmV0dXJuIERvdWJsZS5wYXJzZURvdWJsZShnZXRTdHJpbmdWYWx1ZSgpKTsKLSAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlKSB7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc2hvcnQgZ2V0U2hvcnRWYWx1ZSgpIHsKLSAgICB0cnkgewotICAgICAgcmV0dXJuIFNob3J0LnBhcnNlU2hvcnQoZ2V0U3RyaW5nVmFsdWUoKSk7Ci0gICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgewotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGJ5dGUgZ2V0Qnl0ZVZhbHVlKCkgewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gQnl0ZS5wYXJzZUJ5dGUoZ2V0U3RyaW5nVmFsdWUoKSk7Ci0gICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSkgewotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIEJhc2VKRWxlbWVudCBpbXBsCi0KLSAgLy8gRklYTUUgdGhpcyBsb2dpYyBzaG91bGQgcHJvYmFibHkgYmUgbWFkZSBqYXZhZG9jLXNwZWNpZmljCi0gIC8qKgotICAgKiBUYWtpbmcgdGhlIHN0cmluZ1ZhbHVlIG9mIHRoaXMgYW5ub3RhdGlvbiBhcyBhCi0gICAqIGxpbmUtYnJlYWstc2VwZWFyYXRlZCBsaXN0IG9mIG5hbWUtdmFsdWUgcGFpcnMsIGNyZWF0ZXMgYSBuZXcKLSAgICogSkFubm90YXRpb24gZm9yIGVhY2ggcGFpciBhbmQgYWRkcyBpdCB0byB0aGUgZ2l2ZW4gY29sbGVjdGlvbi4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGdldExvY2FsQW5ub3RhdGlvbnMoQ29sbGVjdGlvbiBvdXQpIHsKLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKG1WYWx1ZSwgTkFNRV9WQUxVRV9TRVBTKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKSB7Ci0gICAgICBTdHJpbmcgcGFpciA9IHN0Lm5leHRUb2tlbigpOwotICAgICAgaW50IGVxID0gcGFpci5pbmRleE9mKCc9Jyk7Ci0gICAgICBpZiAoZXEgPD0gMCkgY29udGludWU7IC8vIGlmIG5vdCB0aGVyZSBvciBpcyBmaXJzdCBjaGFyYWN0ZXIKLSAgICAgIFN0cmluZyBuYW1lID0gcGFpci5zdWJzdHJpbmcoMCwgZXEpLnRyaW0oKTsKLSAgICAgIFN0cmluZyB2YWx1ZSA9IChlcSA8IHBhaXIubGVuZ3RoKCkgLSAxKSA/IHBhaXIuc3Vic3RyaW5nKGVxICsgMSkgOiBudWxsOwotICAgICAgSkFubm90YXRpb24gYW5uID0gbmV3IEJhc2VKQW5ub3RhdGlvbih0aGlzLCBuYW1lLCB2YWx1ZSk7Ci0gICAgICBvdXQuYWRkKGFubik7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEFubm90YXRpb25zIGRvbid0IGhhdmUgY29tbWVudHMsIHJpZ2h0PwotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgZ2V0TG9jYWxDb21tZW50cyhDb2xsZWN0aW9uIG91dCkgewotICB9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL0Jhc2VKRWxlbWVudC5qYXZhIGIvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL0Jhc2VKRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWU1OGYzLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9CYXNlSkVsZW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNyArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS4qOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiBCYXNlIGNsYXNzIGZvciBpbXBsZW1lbnRpbmcgaW50ZXJmYWNlcyB3aGljaCBpbXBsZW1lbnQgSkVsZW1lbnQuCi0gKgotICogQGF1dGhvciBQYXRyaWNrIENhbGFoYW4gPHBjYWxAYmVhLmNvbT4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEJhc2VKRWxlbWVudCBpbXBsZW1lbnRzIEpFbGVtZW50IHsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gQ29uc3RhbnRzCi0KLSAgLy8gaGVscCByZWR1Y2Ugb2JqZWN0IHdhc3RlCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgSkVsZW1lbnRbXSBOT19OT0RFID0gbmV3IEpFbGVtZW50WzBdOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEpDbGFzc1tdIE5PX0NMQVNTID0gbmV3IEpDbGFzc1swXTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBKRmllbGRbXSBOT19GSUVMRCA9IG5ldyBKRmllbGRbMF07Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgSkNvbnN0cnVjdG9yW10gTk9fQ09OU1RSVUNUT1IgPSBuZXcgSkNvbnN0cnVjdG9yWzBdOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEpNZXRob2RbXSBOT19NRVRIT0QgPSBuZXcgSk1ldGhvZFswXTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBKUGFyYW1ldGVyW10gTk9fUEFSQU1FVEVSID0gbmV3IEpQYXJhbWV0ZXJbMF07Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgSkFubm90YXRpb25bXSBOT19BTk5PVEFUSU9OID0gbmV3IEpBbm5vdGF0aW9uWzBdOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgSkNvbW1lbnRbXSBOT19DT01NRU5UID0gbmV3IEpDb21tZW50WzBdOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIEpQcm9wZXJ0eVtdIE5PX1BST1BFUlRZID0gbmV3IEpQcm9wZXJ0eVswXTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQU5OT1RBVElPTl9TRVBBUkFUT1IgPSAiQCI7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFZhcmlhYmxlcwotCi0gIHByaXZhdGUgSkFubm90YXRpb25bXSBtQW5ucyA9IG51bGw7Ci0gIHByaXZhdGUgSkNvbW1lbnRbXSBtQ29tbWVudHMgPSBudWxsOwotICBwcml2YXRlIExpc3QgbVRlbXBMaXN0ID0gbnVsbDsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gQ29uc3RydWN0b3JzCi0KLSAgcHJvdGVjdGVkIEJhc2VKRWxlbWVudCgpIHsKLSAgfQotCi0gIHByaXZhdGUgTGlzdCBnZXRUZW1wTGlzdCgpIHsKLSAgICByZXR1cm4gbmV3IEFycmF5TGlzdCgpOwotICAgIC8qCi0gICAgaWYgKG1UZW1wTGlzdCA9PSBudWxsKSB7Ci0gICAgICBtVGVtcExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG1UZW1wTGlzdC5jbGVhcigpOwotICAgIH0KLSAgICByZXR1cm4gbVRlbXBMaXN0OwotICAgICovCi0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gSkFubm90YXRpb24gaW1wbGVtZW50YXRpb24KLQotICBwdWJsaWMgZmluYWwgSkFubm90YXRpb25bXSBnZXRBbm5vdGF0aW9ucygpIHsKLSAgICBpZiAobUFubnMgPT0gbnVsbCkgewotICAgICAgTGlzdCBsaXN0ID0gZ2V0VGVtcExpc3QoKTsKLSAgICAgIGdldExvY2FsQW5ub3RhdGlvbnMobGlzdCk7Ci0gICAgICBpZiAobGlzdC5zaXplKCkgPT0gMCkgewotICAgICAgICBtQW5ucyA9IE5PX0FOTk9UQVRJT047Ci0gICAgICB9IGVsc2UgewotICAgICAgICBtQW5ucyA9IG5ldyBKQW5ub3RhdGlvbltsaXN0LnNpemUoKV07Ci0gICAgICAgIGxpc3QudG9BcnJheShtQW5ucyk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBtQW5uczsgLy8gRklYTUUgZG8gd2UgbmVlZCB0byByZXR1cm4gYSBjb3B5PwotICB9Ci0KLSAgcHVibGljIGZpbmFsIEpBbm5vdGF0aW9uW10gZ2V0QW5ub3RhdGlvbnMoU3RyaW5nIG5hbWVkKSB7Ci0gICAgTGlzdCBsaXN0ID0gZ2V0VGVtcExpc3QoKTsKLSAgICBnYXRoZXJBbm5vdGF0aW9ucyhuYW1lZCwgbGlzdCk7Ci0gICAgSkFubm90YXRpb25bXSBvdXQgPSBuZXcgSkFubm90YXRpb25bbGlzdC5zaXplKCldOwotICAgIGxpc3QudG9BcnJheShvdXQpOwotICAgIHJldHVybiBvdXQ7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgSkNvbW1lbnRbXSBnZXRDb21tZW50cygpIHsKLSAgICBpZiAobUNvbW1lbnRzID09IG51bGwpIHsKLSAgICAgIExpc3QgbGlzdCA9IGdldFRlbXBMaXN0KCk7Ci0gICAgICBnZXRMb2NhbENvbW1lbnRzKGxpc3QpOwotICAgICAgLyogICAgICBpZiAobUNvbnRleHQuZ2V0RXh0cmFNYXJrdXBTdG9yZSgpICE9IG51bGwpIHsKLQltQ29udGV4dC5nZXRFeHRyYU1hcmt1cFN0b3JlKCkuZ2V0Q29tbWVudHModGhpcyxsaXN0KTsKLQl9Ki8KLSAgICAgIGlmIChsaXN0LnNpemUoKSA9PSAwKSB7Ci0gICAgICAgIG1Db21tZW50cyA9IE5PX0NPTU1FTlQ7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBtQ29tbWVudHMgPSBuZXcgSkNvbW1lbnRbbGlzdC5zaXplKCldOwotICAgICAgICBsaXN0LnRvQXJyYXkobUNvbW1lbnRzKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG1Db21tZW50czsgLy8gRklYTUUgZG8gd2UgbmVlZCB0byByZXR1cm4gYSBjb3B5PwotICB9Ci0KLSAgcHVibGljIGZpbmFsIEpBbm5vdGF0aW9uIGdldEFubm90YXRpb24oU3RyaW5nIG5hbWVkKSB7Ci0gICAgSkFubm90YXRpb25bXSBhbm5zID0gZ2V0QW5ub3RhdGlvbnMobmFtZWQpOwotICAgIHJldHVybiAoYW5ucy5sZW5ndGggPT0gMCkgPyBudWxsIDogYW5uc1swXTsKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBPYmplY3QgaW1wbGVtZW50YXRpb24KLQotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgIHJldHVybiBnZXRRdWFsaWZpZWROYW1lKCk7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gTWV0aG9kcyB0byBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzCi0KLSAgLyoqCi0gICAqIEV4dGVuZGluZyBjbGFzcyBtdXN0IGltcGxlbWVudCB0aGlzIGJ5IGFkZGluZyBhbGwgb2YgdGhlCi0gICAqIGFubm90YXRpb25zIHdoaWNoIGFwcGx5IHRvIHRoaXMgb2JqZWN0IHRvIHRoZSBnaXZlbiAnb3V0JwotICAgKiBjb2xsZWN0aW9uLiAgSW1wbGVtZW50IGFzIGEgbm8tb3AgaWYgYW5ub3RhdGlvbnMgYXJlIG5vdAotICAgKiBhcHBsaWNhYmxlLgotICAgKi8KLSAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgZ2V0TG9jYWxBbm5vdGF0aW9ucyhDb2xsZWN0aW9uIG91dCk7Ci0KLSAgLyoqCi0gICAqIEV4dGVuZGluZyBjbGFzcyBtdXN0IGltcGxlbWVudCB0aGlzIGJ5IGFkZGluZyBhbGwgb2YgdGhlCi0gICAqIGFubm90YXRpb25zIHdoaWNoIGFwcGx5IHRvIHRoaXMgb2JqZWN0IHRvIHRoZSBnaXZlbiAnb3V0JwotICAgKiBjb2xsZWN0aW9uLiAgSW1wbGVtZW50IGFzIGEgbm8tb3AgaWYgY29tbWVudHMgYXJlIG5vdCBhcHBsaWNhYmxlLgotICAgKi8KLSAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgZ2V0TG9jYWxDb21tZW50cyhDb2xsZWN0aW9uIG91dCk7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFByaXZhdGUgbWV0aG9kcwotCi0gIHByaXZhdGUgdm9pZCBnYXRoZXJBbm5vdGF0aW9ucyhTdHJpbmcgZnVsbE5hbWUsIENvbGxlY3Rpb24gb3V0KSB7Ci0gICAgSkFubm90YXRpb25bXSBhbm5zID0gZ2V0QW5ub3RhdGlvbnMoKTsKLSAgICBpZiAoYW5ucyA9PSBOT19BTk5PVEFUSU9OKSByZXR1cm47Ci0gICAgaW50IGRvdCA9IGZ1bGxOYW1lLmluZGV4T2YoQU5OT1RBVElPTl9TRVBBUkFUT1IpOwotICAgIFN0cmluZyBzdWJuYW1lID0gKGRvdCA9PSAtMSkgPyBmdWxsTmFtZSA6IGZ1bGxOYW1lLnN1YnN0cmluZygwLCBkb3QpOwotICAgIFN0cmluZyBwb3N0Zml4ID0gKGRvdCA9PSAtMSB8fCBkb3QgPT0gZnVsbE5hbWUubGVuZ3RoKCkgLSAxKSA/Ci0gICAgICAgICAgICBudWxsIDogZnVsbE5hbWUuc3Vic3RyaW5nKGRvdCArIDEpOwotICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiPT09PT0gIitzdWJuYW1lKyIgICIrcG9zdGZpeCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbm5zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAoYW5uc1tpXS5nZXROYW1lKCkuZXF1YWxzKHN1Ym5hbWUpKSB7Ci0gICAgICAgIGlmIChwb3N0Zml4ID09IG51bGwpIHsKLSAgICAgICAgICBvdXQuYWRkKGFubnNbaV0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8vIFJFVklFVyBuYXN0eSBjYXN0LiAgQWx0ZXJuYXRpdmUgaXMgdG8gZXhwb3NlIHRoaXMgbWV0aG9kCi0gICAgICAgICAgLy8gdmlhIGEgcHJpdmF0ZSBpbnRlcmZhY2UsIGJ1dCB0aGF0IHNlZW1zIGxpa2Ugb3ZlcmtpbGwuCi0gICAgICAgICAgKChCYXNlSkVsZW1lbnQpIGFubnNbaV0pLmdhdGhlckFubm90YXRpb25zKHBvc3RmaXgsIG91dCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBPYmplY3QgaW1wbGVtZW50YXRpb24KLQotICAvLyBSRVZJRVcgdGhpcyBuZWVkcyBtb3JlIHRob3VnaHQuCi0KLSAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvKSB7Ci0gICAgcmV0dXJuIChvIGluc3RhbmNlb2YgSkVsZW1lbnQpICYmCi0gICAgICAgICAgICBnZXRRdWFsaWZpZWROYW1lKCkuZXF1YWxzKCgoSkVsZW1lbnQpIG8pLmdldFF1YWxpZmllZE5hbWUoKSk7Ci0gIH0KLQotICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgIHJldHVybiBnZXRRdWFsaWZpZWROYW1lKCkuaGFzaENvZGUoKTsKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBQdWJsaWMgc3RhdGljIHV0aWxpdGllcwotCi0gIHB1YmxpYyBzdGF0aWMgSkNsYXNzIGdldENsYXNzU2FmZWx5KFN0cmluZyBmZCwgSkNsYXNzTG9hZGVyIGxvYWRlcikgewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gbG9hZGVyLmxvYWRDbGFzcyhmZCk7Ci0gICAgfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBjbmZlKSB7Ci0gICAgICBjbmZlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgLy93aGF0IGRvIHdlIGRvPyBSRVZJRVcKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL0J1aWx0aW5KQ2xhc3MuamF2YSBiL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9CdWlsdGluSkNsYXNzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjOWQ0ZTguLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL0J1aWx0aW5KQ2xhc3MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzMiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS4qOwotCi0vKioKLSAqIEJhc2UgY2xhc3MgZm9yIHR5cGVzIHRoYXQgYXJlICdidWlsdCBpbicgdG8gdGhlIFZNLiAgSnVzdCBwcm92aWRlcwotICogYm9yaW5nIGRlZmF1bHQgaW1wbGVtZW50YXRpb25zIGZvciBsb3RzIG9mIHN0dWZmLgotICoKLSAqIEBhdXRob3IgUGF0cmljayBDYWxhaGFuIDxwY2FsQGJlYS5jb20+Ci0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBCdWlsdGluSkNsYXNzIGltcGxlbWVudHMgSkNsYXNzIHsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gSkVsZW1lbnQgaW1wbGVtZW50YXRpb24KLQotICBwdWJsaWMgSkVsZW1lbnQgZ2V0UGFyZW50KCkgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIEpFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgSkFubm90YXRpb25bXSBnZXRBbm5vdGF0aW9ucygpIHsKLSAgICByZXR1cm4gQmFzZUpFbGVtZW50Lk5PX0FOTk9UQVRJT047Ci0gIH0KLQotICBwdWJsaWMgSkFubm90YXRpb25bXSBnZXRBbm5vdGF0aW9ucyhTdHJpbmcgbmFtZWQpIHsKLSAgICByZXR1cm4gQmFzZUpFbGVtZW50Lk5PX0FOTk9UQVRJT047Ci0gIH0KLQotICBwdWJsaWMgSkFubm90YXRpb24gZ2V0QW5ub3RhdGlvbihTdHJpbmcgbmFtZWQpIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBKQ29tbWVudFtdIGdldENvbW1lbnRzKCkgewotICAgIHJldHVybiBCYXNlSkVsZW1lbnQuTk9fQ09NTUVOVDsKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBKTWVtYmVyIGltcGxlbWVudGF0aW9uCi0KLSAgcHVibGljIGludCBnZXRNb2RpZmllcnMoKSB7Ci0gICAgcmV0dXJuIE9iamVjdC5jbGFzcy5nZXRNb2RpZmllcnMoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzUGFja2FnZVByaXZhdGUoKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNQcm90ZWN0ZWQoKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNQdWJsaWMoKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1ByaXZhdGUoKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIEpTb3VyY2VQb3NpdGlvbiBnZXRTb3VyY2VQb3NpdGlvbigpIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBKQ2xhc3MgZ2V0Q29udGFpbmluZ0NsYXNzKCkgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIEpDbGFzcyBpbXBsZW1lbnRhdGlvbgotCi0gIHB1YmxpYyBKQ2xhc3NMb2FkZXIgZ2V0Q2xhc3NMb2FkZXIoKSB7Ci0gICAgcmV0dXJuIEpGYWN0b3J5LmdldEluc3RhbmNlKCkuZ2V0U3lzdGVtQ2xhc3NMb2FkZXIoKTsKLSAgfQotCi0gIHB1YmxpYyBKQ2xhc3MgZm9yTmFtZShTdHJpbmcgZmQpIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIHsKLSAgICByZXR1cm4gZ2V0Q2xhc3NMb2FkZXIoKS5sb2FkQ2xhc3MoZmQpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNBcnJheSgpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgSkNsYXNzIGdldEFycmF5Q29tcG9uZW50VHlwZSgpIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0QXJyYXlEaW1lbnNpb25zKCkgewotICAgIHJldHVybiAwOwotICB9Ci0KLSAgcHVibGljIEpDbGFzcyBnZXRTdXBlcmNsYXNzKCkgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIEpDbGFzc1tdIGdldEludGVyZmFjZXMoKSB7Ci0gICAgcmV0dXJuIEJhc2VKRWxlbWVudC5OT19DTEFTUzsKLSAgfQotCi0gIHB1YmxpYyBKRmllbGRbXSBnZXRGaWVsZHMoKSB7Ci0gICAgcmV0dXJuIEJhc2VKRWxlbWVudC5OT19GSUVMRDsKLSAgfQotCi0gIHB1YmxpYyBKRmllbGRbXSBnZXREZWNsYXJlZEZpZWxkcygpIHsKLSAgICByZXR1cm4gQmFzZUpFbGVtZW50Lk5PX0ZJRUxEOwotICB9Ci0KLSAgcHVibGljIEpDb25zdHJ1Y3RvcltdIGdldENvbnN0cnVjdG9ycygpIHsKLSAgICByZXR1cm4gQmFzZUpFbGVtZW50Lk5PX0NPTlNUUlVDVE9SOwotICB9Ci0KLSAgcHVibGljIEpNZXRob2RbXSBnZXRNZXRob2RzKCkgewotICAgIHJldHVybiBCYXNlSkVsZW1lbnQuTk9fTUVUSE9EOwotICB9Ci0KLSAgcHVibGljIEpNZXRob2RbXSBnZXREZWNsYXJlZE1ldGhvZHMoKSB7Ci0gICAgcmV0dXJuIEJhc2VKRWxlbWVudC5OT19NRVRIT0Q7Ci0gIH0KLQotICBwdWJsaWMgSlBhY2thZ2UgZ2V0Q29udGFpbmluZ1BhY2thZ2UoKSB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0Fic3RyYWN0KCkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzSW50ZXJmYWNlKCkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzUHJpbWl0aXZlKCkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzT2JqZWN0KCkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzVm9pZCgpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0ZpbmFsKCkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzU3RhdGljKCkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBKQ2xhc3NbXSBnZXRDbGFzc2VzKCkgewotICAgIHJldHVybiBCYXNlSkVsZW1lbnQuTk9fQ0xBU1M7Ci0gIH0KLQotICBwdWJsaWMgSlByb3BlcnR5W10gZ2V0UHJvcGVydGllcygpIHsKLSAgICByZXR1cm4gQmFzZUpFbGVtZW50Lk5PX1BST1BFUlRZOwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIE9iamVjdCBpbXBsZW1lbnRhdGlvbgotCi0gIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykgewotICAgIGlmIChvIGluc3RhbmNlb2YgSkNsYXNzKSB7Ci0gICAgICByZXR1cm4gKChKQ2xhc3MpIG8pLmdldEZpZWxkRGVzY3JpcHRvcigpLmVxdWFscyhnZXRGaWVsZERlc2NyaXB0b3IoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgIHJldHVybiBnZXRGaWVsZERlc2NyaXB0b3IoKS5oYXNoQ29kZSgpOwotICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvSW50ZXJuYWxKUGFja2FnZS5qYXZhIGIvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL0ludGVybmFsSlBhY2thZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU5YTgyYi4uMDAwMDAwMAotLS0gYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvSW50ZXJuYWxKUGFja2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uSkNsYXNzOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uSkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5KUGFja2FnZTsKLQotLyoqCi0gKiA8cD5BZGRzIG1ldGhvZHMgdG8gdGhlIEpQYWNrYWdlIGludGVyZmFjZSB0aGF0IHdlIGRvbid0IHdhbnQgdG8KLSAqIGV4cG9zZSB0byBBUEkgY2xpZW50cy4gIEFsbCBKUGFja2FnZSBpbXBscyBtdXN0IGJlIGNhc3RhYmxlIHRvCi0gKiBJbnRlcm5hbEpQYWNrYWdlLjwvcD4KLSAqCi0gKiBAYXV0aG9yIFBhdHJpY2sgQ2FsYWhhbiA8cGNhbEBiZWEuY29tPgotICovCi1wdWJsaWMgaW50ZXJmYWNlIEludGVybmFsSlBhY2thZ2UgZXh0ZW5kcyBKUGFja2FnZSB7Ci0gIC8qKgotICAgKiA8cD5OZWVkIHRoaXMgc28gSlJvb3RJbXBsIGNhbiB0ZWxsIGFyYml0cmFyeSBwYWNrYWdlIGltcGxzIHRoYXQKLSAgICogaXQgaXMgdGhlaXIgcGFyZW50LiAgU2VlIEpSb290SW1wbCBjb25zdHJ1Y3Rvci48L3A+Ci0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRQYXJlbnQoSkVsZW1lbnQgcGFyZW50KTsKLQotICAvKioKLSAgICogPHA+TmVlZCB0aGlzIHNvIHdlIGNhbiB0ZWxsIGFyYml0cmFyeSBwYWNrYWdlcyB0aGF0IGFuIGFyYml0cmFyeQotICAgKiBjbGFzcyBpcyB0aGVpciBjaGlsZC4gIFNlZSBKUm9vdEltcGwgY29uc3RydWN0b3IuPC9wPgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQ2xhc3MoSkNsYXNzIGNsYXp6KTsKLX0KLQotCmRpZmYgLS1naXQgYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvSkNsYXNzSGVscGVyLmphdmEgYi92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvSkNsYXNzSGVscGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1NmVlOTAuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL0pDbGFzc0hlbHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLio7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogPHA+SGVscGVyIGNsYXNzIGNvbnRhaW5pbmcgbWV0aG9kcyB0byB3aGljaCBKQ2xhc3MgaW1wbGVtZW50YXRpb25zCi0gKiBjYW4gZGVsZWdhdGUgc29tZSB0ZWRpb3VzIHdvcmsuPC9wPgotICoKLSAqIEBhdXRob3IgUGF0cmljayBDYWxhaGFuIDxwY2FsQGJlYS5jb20+Ci0gKi8KLXB1YmxpYyBjbGFzcyBKQ2xhc3NIZWxwZXIgewotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBWYXJpYWJsZXMKLQotICBwcml2YXRlIEpDbGFzcyBtQ2xhc3M7Ci0gIHByaXZhdGUgSkZpZWxkW10gbUZpZWxkcyA9IG51bGw7Ci0gIHByaXZhdGUgSk1ldGhvZFtdIG1NZXRob2RzID0gbnVsbDsKLSAgcHJpdmF0ZSBKRWxlbWVudFtdIG1DaGlsZHJlbiA9IG51bGw7Ci0gIHByaXZhdGUgSkVsZW1lbnQgbVBhcmVudCA9IG51bGw7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIENvbnN0cnVjdG9yCi0KLSAgcHVibGljIEpDbGFzc0hlbHBlcihKQ2xhc3MgYykgewotICAgIGlmIChjID09IG51bGwpIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLSAgICBtQ2xhc3MgPSBjOwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFB1YmxpYyBtZXRob2RzCi0KLSAgcHVibGljIEpFbGVtZW50IGdldFBhcmVudCgpIHsKLSAgICBpZiAobVBhcmVudCA9PSBudWxsKSB7Ci0gICAgICBtUGFyZW50ID0gbUNsYXNzLmdldENvbnRhaW5pbmdDbGFzcygpOwotICAgICAgaWYgKG1QYXJlbnQgPT0gbnVsbCkgbVBhcmVudCA9IG1DbGFzcy5nZXRDb250YWluaW5nUGFja2FnZSgpOwotICAgIH0KLSAgICByZXR1cm4gbVBhcmVudDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGFsbCBvZiB0aGUgY2hpbGRyZW4gb2YgdGhlIGdpdmVuIGNsYXNzIGFzIGRlZmluZWQgaW4gdGhlCi0gICAqIGphdmFkb2NzIGZvciBKQ2xhc3MuCi0gICAqLwotICBwdWJsaWMgSkVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLSAgICBpZiAobUNoaWxkcmVuID09IG51bGwpIHsKLSAgICAgIExpc3QgbGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgIC8vIGNvbnN0cnVjdG9ycwotICAgICAgSkNvbnN0cnVjdG9yW10gY29uc3RydWN0b3JzID0gbUNsYXNzLmdldENvbnN0cnVjdG9ycygpOwotICAgICAgaWYgKGNvbnN0cnVjdG9ycyAhPSBudWxsKSBsaXN0LmFkZEFsbChBcnJheXMuYXNMaXN0KGNvbnN0cnVjdG9ycykpOwotICAgICAgLy8gbWV0aG9kcwotICAgICAgSk1ldGhvZFtdIG1ldGhvZHMgPSBtQ2xhc3MuZ2V0RGVjbGFyZWRNZXRob2RzKCk7Ci0gICAgICBpZiAobWV0aG9kcyAhPSBudWxsKSBsaXN0LmFkZEFsbChBcnJheXMuYXNMaXN0KG1ldGhvZHMpKTsKLSAgICAgIC8vIGZpZWxkcwotICAgICAgSkZpZWxkW10gZmllbGRzID0gbUNsYXNzLmdldERlY2xhcmVkRmllbGRzKCk7Ci0gICAgICBpZiAoZmllbGRzICE9IG51bGwpIGxpc3QuYWRkQWxsKEFycmF5cy5hc0xpc3QoZmllbGRzKSk7Ci0gICAgICAvLyBpbm5lciBjbGFzc2VzCi0gICAgICBKQ2xhc3NbXSBpbm5lcnMgPSBtQ2xhc3MuZ2V0Q2xhc3NlcygpOwotICAgICAgaWYgKGlubmVycyAhPSBudWxsKSBsaXN0LmFkZEFsbChBcnJheXMuYXNMaXN0KGlubmVycykpOwotICAgICAgLy8KLSAgICAgIG1DaGlsZHJlbiA9IG5ldyBKRWxlbWVudFtsaXN0LnNpemUoKV07Ci0gICAgICBsaXN0LnRvQXJyYXkobUNoaWxkcmVuKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1DaGlsZHJlbjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBmaWVsZHMgZGVjbGFyZWQgYnkgdGhlCi0gICAqIGNsYXNzIGFuZCBpbmhlcml0ZWQgZnJvbSBpdHMgc3VwZXJjbGFzc2VzLiAgVGhpcyBpcyBkb25lIGJ5Ci0gICAqIGNhbGxpbmcgZ2V0RGVjbGFyZWRGaWVsZHMgb24gZWFjaCBvZiB0aGUgY2xhc3NlcyBpbiB0aGUgdHJlZS4KLSAgICogVGhpcyBtZXRob2QgaXMgdXNlZnVsIGZvciBpbXBsZW1lbnRpbmcgSkNsYXNzLmdldEZpZWxkcygpLgotICAgKi8KLSAgcHVibGljIEpGaWVsZFtdIGdldEFsbEZpZWxkcygpIHsKLSAgICBpZiAobUZpZWxkcyA9PSBudWxsKSB7Ci0gICAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICBhZGRGaWVsZHNSZWN1cnNpdmVseShtQ2xhc3MsIGxpc3QpOwotICAgICAgbUZpZWxkcyA9IG5ldyBKRmllbGRbbGlzdC5zaXplKCldOwotICAgICAgbGlzdC50b0FycmF5KG1GaWVsZHMpOwotICAgIH0KLSAgICByZXR1cm4gbUZpZWxkczsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBtZXRob2RzIGRlY2xhcmVkIGJ5IHRoZQotICAgKiBjbGFzcyBhbmQgaW5oZXJpdGVkIGZyb20gaXRzIHN1cGVyY2xhc3Nlcy4gIFRoaXMgaXMgZG9uZSBieQotICAgKiBjYWxsaW5nIGdldERlY2xhcmVkTWV0aG9kcyBvbiBlYWNoIG9mIHRoZSBjbGFzc2VzIGluIHRoZSB0cmVlLgotICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgZm9yIGltcGxlbWVudGluZyBKQ2xhc3MuZ2V0TWV0aG9kcygpLgotICAgKi8KLSAgcHVibGljIEpNZXRob2RbXSBnZXRBbGxNZXRob2RzKCkgewotICAgIGlmIChtTWV0aG9kcyA9PSBudWxsKSB7Ci0gICAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICBhZGRNZXRob2RzUmVjdXJzaXZlbHkobUNsYXNzLCBsaXN0KTsKLSAgICAgIG1NZXRob2RzID0gbmV3IEpNZXRob2RbbGlzdC5zaXplKCldOwotICAgICAgbGlzdC50b0FycmF5KG1NZXRob2RzKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1NZXRob2RzOwotICB9Ci0KLSAgLyoqCi0gICAqIDxwPkRldGVybWluZXMgaWYgdGhlIG1DbGFzcyBpcyBlaXRoZXIgdGhlIHNhbWUgYXMsIG9yIGlzIGEKLSAgICogc3VwZXJjbGFzcyBvciBzdXBlcmludGVyZmFjZSBvZiwgdGhlIGNsYXNzIG9yIGludGVyZmFjZQotICAgKiByZXByZXNlbnRlZCBieSB0aGUgYXJnLiBJdCByZXR1cm5zIHRydWUgaWYgc287IG90aGVyd2lzZSBpdAotICAgKiByZXR1cm5zIGZhbHNlLiBJZiBtQ2xhc3MgcmVwcmVzZW50cyBhIHByaW1pdGl2ZSB0eXBlLCB0aGlzIG1ldGhvZAotICAgKiByZXR1cm5zIHRydWUgb25seSBpZiBhcmcgaXMgZXhhY3RseSB0aGUgbUNsYXNzLjwvcD4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzQXNzaWduYWJsZUZyb20oSkNsYXNzIGFyZykgewotICAgIGlmIChtQ2xhc3MuaXNQcmltaXRpdmUoKSB8fCBhcmcuaXNQcmltaXRpdmUoKSkgewotICAgICAgcmV0dXJuIG1DbGFzcy5lcXVhbHMoYXJnKTsKLSAgICB9Ci0gICAgcmV0dXJuIGlzQXNzaWduYWJsZUZyb21SZWN1cnNlKGFyZyk7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gUHJpdmF0ZSBtZXRob2RzCi0KLSAgcHJpdmF0ZSBib29sZWFuIGlzQXNzaWduYWJsZUZyb21SZWN1cnNlKEpDbGFzcyBhcmcpIHsKLSAgICBpZiAobUNsYXNzLmVxdWFscyhhcmcpKSByZXR1cm4gdHJ1ZTsKLSAgICAvLyBjaGVjayBhbGwgb2YgYXJnJ3MgaW1wbGVtZW50ZWQgaW50ZXJmYWNlcywgcmVjdXJzaXZlbHkKLSAgICBKQ2xhc3NbXSBpbnRlcmZhY2VzID0gYXJnLmdldEludGVyZmFjZXMoKTsKLSAgICBpZiAoaW50ZXJmYWNlcyAhPSBudWxsKSB7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGludGVyZmFjZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYgKGlzQXNzaWduYWJsZUZyb21SZWN1cnNlKGludGVyZmFjZXNbaV0pKSByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gY2hlY2sgYXJnJ3Mgc3VwZXJjbGFzcywgcmVjdXJzaXZlbHkKLSAgICBhcmcgPSBhcmcuZ2V0U3VwZXJjbGFzcygpOwotICAgIGlmIChhcmcgIT0gbnVsbCkgewotICAgICAgaWYgKGlzQXNzaWduYWJsZUZyb21SZWN1cnNlKGFyZykpIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyB2b2lkIGFkZEZpZWxkc1JlY3Vyc2l2ZWx5KEpDbGFzcyBjbGF6eiwgQ29sbGVjdGlvbiBvdXQpIHsKLSAgICBKRmllbGRbXSBmaWVsZHMgPSBjbGF6ei5nZXREZWNsYXJlZEZpZWxkcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSBvdXQuYWRkKGZpZWxkc1tpXSk7Ci0gICAgaWYgKGNsYXp6LmlzSW50ZXJmYWNlKCkpIHsKLSAgICAgIEpDbGFzc1tdIGludHMgPSBjbGF6ei5nZXRJbnRlcmZhY2VzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGludHMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgYWRkRmllbGRzUmVjdXJzaXZlbHkoaW50c1tpXSwgb3V0KTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgY2xhenogPSBjbGF6ei5nZXRTdXBlcmNsYXNzKCk7Ci0gICAgICBpZiAoY2xhenogIT0gbnVsbCkgYWRkRmllbGRzUmVjdXJzaXZlbHkoY2xhenosIG91dCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGRNZXRob2RzUmVjdXJzaXZlbHkoSkNsYXNzIGNsYXp6LCBDb2xsZWN0aW9uIG91dCkgewotICAgIEpNZXRob2RbXSBtZXRob2RzID0gY2xhenouZ2V0RGVjbGFyZWRNZXRob2RzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSsrKSBvdXQuYWRkKG1ldGhvZHNbaV0pOwotICAgIGlmIChjbGF6ei5pc0ludGVyZmFjZSgpKSB7Ci0gICAgICBKQ2xhc3NbXSBpbnRzID0gY2xhenouZ2V0SW50ZXJmYWNlcygpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGFkZE1ldGhvZHNSZWN1cnNpdmVseShpbnRzW2ldLCBvdXQpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBjbGF6eiA9IGNsYXp6LmdldFN1cGVyY2xhc3MoKTsKLSAgICAgIGlmIChjbGF6eiAhPSBudWxsKSBhZGRNZXRob2RzUmVjdXJzaXZlbHkoY2xhenosIG91dCk7Ci0gICAgfQotICB9Ci19Ci0KLQotCmRpZmYgLS1naXQgYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvSkZpbGVTZXRJbXBsLmphdmEgYi92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvSkZpbGVTZXRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5MjgzY2QuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL0pGaWxlU2V0SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODA5ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLkpGaWxlU2V0OwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLS8qKgotICoKLSAqIEBhdXRob3IgUGF0cmljayBDYWxhaGFuIDxwY2FsQGJlYS5jb20+Ci0gKi8KLXB1YmxpYyBjbGFzcyBKRmlsZVNldEltcGwgaW1wbGVtZW50cyBKRmlsZVNldCB7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFZhcmlhYmxlcwotCi0gIHByaXZhdGUgTGlzdCBtSW5jbHVkZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByaXZhdGUgTGlzdCBtRXhjbHVkZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gIHByaXZhdGUgU3RyaW5nIG1DbGFzc3BhdGggPSBudWxsOwotICBwcml2YXRlIGJvb2xlYW4gbUNhc2VTZW5zaXRpdmUgPSB0cnVlOwotICBwcml2YXRlIEZpbGUgbUJhc2VkaXI7Ci0gIHByb3RlY3RlZCBTdHJpbmdbXSBpbmNsdWRlczsKLSAgcHJvdGVjdGVkIFN0cmluZ1tdIGV4Y2x1ZGVzOwotICBwcm90ZWN0ZWQgVmVjdG9yIGZpbGVzSW5jbHVkZWQ7Ci0gIHByb3RlY3RlZCBWZWN0b3IgZGlyc0luY2x1ZGVkOwotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBDb25zdHJ1Y3RvcnMKLQotICBwdWJsaWMgSkZpbGVTZXRJbXBsKEZpbGUgcm9vdCkgewotICAgIGlmIChyb290ID09IG51bGwpIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm51bGwgcm9vdCIpOwotICAgIGlmICghcm9vdC5leGlzdHMoKSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihyb290ICsgIiBkb2VzIG5vdCBleGlzdCIpOwotICAgIH0KLSAgICBpZiAoIXJvb3QuaXNEaXJlY3RvcnkoKSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihyb290ICsgIiBpcyBub3QgYSBkaXJlY3RvcnkiKTsKLSAgICB9Ci0gICAgbUJhc2VkaXIgPSByb290OwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFB1YmxpYyBtZXRob2RzCi0KLSAgcHVibGljIEZpbGVbXSBnZXRGaWxlcygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgU3RyaW5nW10gaW5jbHVkZXMgPSBuZXcgU3RyaW5nW21JbmNsdWRlcy5zaXplKCldOwotICAgIG1JbmNsdWRlcy50b0FycmF5KGluY2x1ZGVzKTsKLSAgICBTdHJpbmdbXSBleGNsdWRlcyA9IG5ldyBTdHJpbmdbbUV4Y2x1ZGVzLnNpemUoKV07Ci0gICAgbUV4Y2x1ZGVzLnRvQXJyYXkoZXhjbHVkZXMpOwotICAgIHNldEluY2x1ZGVzKGluY2x1ZGVzKTsKLSAgICBzZXRFeGNsdWRlcyhleGNsdWRlcyk7Ci0gICAgc2NhbigpOwotICAgIFN0cmluZ1tdIG5hbWVzID0gZ2V0SW5jbHVkZWRGaWxlcygpOwotICAgIEZpbGVbXSBvdXQgPSBuZXcgRmlsZVtuYW1lcy5sZW5ndGhdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIG91dFtpXSA9IG5ldyBGaWxlKG1CYXNlZGlyLCBuYW1lc1tpXSk7Ci0gICAgfQotICAgIHJldHVybiBvdXQ7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gbWFpbigpIG1ldGhvZAotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLSAgICB0cnkgewotICAgICAgSkZpbGVTZXRJbXBsIGZzID0gbmV3IEpGaWxlU2V0SW1wbChuZXcgRmlsZShhcmdzWzBdKSk7Ci0gICAgICBmb3IgKGludCBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgZnMuaW5jbHVkZShhcmdzW2ldKTsKLSAgICAgIH0KLSAgICAgIEZpbGVbXSBmaWxlcyA9IGZzLmdldEZpbGVzKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihmaWxlc1tpXS50b1N0cmluZygpKTsKLSAgICAgIH0KLSAgICAgIFN5c3RlbS5vdXQuZmx1c2goKTsKLSAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewotICAgICAgdC5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgIFN5c3RlbS5vdXQuZmx1c2goKTsKLSAgICAgIFN5c3RlbS5leGl0KC0xKTsKLSAgICB9Ci0gIH0KLQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBKRmlsZVNldCBpbXBsZW1lbnRhdGlvbgotCi0gIHB1YmxpYyB2b2lkIGluY2x1ZGUoU3RyaW5nIHBhdHRlcm4pIHsKLSAgICBtSW5jbHVkZXMuYWRkKHBhdHRlcm4pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZXhjbHVkZShTdHJpbmcgcGF0dGVybikgewotICAgIG1FeGNsdWRlcy5hZGQocGF0dGVybik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDYXNlU2Vuc2l0aXZlKGJvb2xlYW4gYikgewotICAgIG1DYXNlU2Vuc2l0aXZlID0gYjsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENsYXNzcGF0aChTdHJpbmcgY2xhc3NwYXRoKSB7Ci0gICAgbUNsYXNzcGF0aCA9IGNsYXNzcGF0aDsKLSAgfQotCi0gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBQdWJsaWMgbWV0aG9kcwotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2xhc3NwYXRoKCkgeyByZXR1cm4gbUNsYXNzcGF0aDsgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBEaXJlY3Rvcnkgc2Nhbm5lciBzdHVmZgotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBsaXN0IG9mIGluY2x1ZGUgcGF0dGVybnMgdG8gdXNlLiBBbGwgJy8nIGFuZCAnXCcgY2hhcmFjdGVycwotICAgKiBhcmUgcmVwbGFjZWQgYnkgPGNvZGU+RmlsZS5zZXBhcmF0b3JDaGFyPC9jb2RlPiwgc28gdGhlIHNlcGFyYXRvciB1c2VkCi0gICAqIG5lZWQgbm90IG1hdGNoIDxjb2RlPkZpbGUuc2VwYXJhdG9yQ2hhcjwvY29kZT4uCi0gICAqIDxwPgotICAgKiBXaGVuIGEgcGF0dGVybiBlbmRzIHdpdGggYSAnLycgb3IgJ1wnLCAiKioiIGlzIGFwcGVuZGVkLgotICAgKgotICAgKiBAcGFyYW0gaW5jbHVkZXMgQSBsaXN0IG9mIGluY2x1ZGUgcGF0dGVybnMuCi0gICAqICAgICAgICAgICAgICAgICBNYXkgYmUgPGNvZGU+bnVsbDwvY29kZT4sIGluZGljYXRpbmcgdGhhdCBhbGwgZmlsZXMKLSAgICogICAgICAgICAgICAgICAgIHNob3VsZCBiZSBpbmNsdWRlZC4gSWYgYSBub24tPGNvZGU+bnVsbDwvY29kZT4KLSAgICogICAgICAgICAgICAgICAgIGxpc3QgaXMgZ2l2ZW4sIGFsbCBlbGVtZW50cyBtdXN0IGJlCi0gICAqIG5vbi08Y29kZT5udWxsPC9jb2RlPi4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBzZXRJbmNsdWRlcyhTdHJpbmdbXSBpbmNsdWRlcykgewotICAgIGlmIChpbmNsdWRlcyA9PSBudWxsKSB7Ci0gICAgICB0aGlzLmluY2x1ZGVzID0gbnVsbDsKLSAgICB9IGVsc2UgewotICAgICAgdGhpcy5pbmNsdWRlcyA9IG5ldyBTdHJpbmdbaW5jbHVkZXMubGVuZ3RoXTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5jbHVkZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgU3RyaW5nIHBhdHRlcm47Ci0gICAgICAgIHBhdHRlcm4gPSBpbmNsdWRlc1tpXS5yZXBsYWNlKCcvJywgRmlsZS5zZXBhcmF0b3JDaGFyKS4KLSAgICAgICAgICAgICAgICByZXBsYWNlKCdcXCcsIEZpbGUuc2VwYXJhdG9yQ2hhcik7Ci0gICAgICAgIGlmIChwYXR0ZXJuLmVuZHNXaXRoKEZpbGUuc2VwYXJhdG9yKSkgewotICAgICAgICAgIHBhdHRlcm4gKz0gIioqIjsKLSAgICAgICAgfQotICAgICAgICB0aGlzLmluY2x1ZGVzW2ldID0gcGF0dGVybjsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotCi0gIC8qKgotICAgKiBTZXRzIHRoZSBsaXN0IG9mIGV4Y2x1ZGUgcGF0dGVybnMgdG8gdXNlLiBBbGwgJy8nIGFuZCAnXCcgY2hhcmFjdGVycwotICAgKiBhcmUgcmVwbGFjZWQgYnkgPGNvZGU+RmlsZS5zZXBhcmF0b3JDaGFyPC9jb2RlPiwgc28gdGhlIHNlcGFyYXRvciB1c2VkCi0gICAqIG5lZWQgbm90IG1hdGNoIDxjb2RlPkZpbGUuc2VwYXJhdG9yQ2hhcjwvY29kZT4uCi0gICAqIDxwPgotICAgKiBXaGVuIGEgcGF0dGVybiBlbmRzIHdpdGggYSAnLycgb3IgJ1wnLCAiKioiIGlzIGFwcGVuZGVkLgotICAgKgotICAgKiBAcGFyYW0gZXhjbHVkZXMgQSBsaXN0IG9mIGV4Y2x1ZGUgcGF0dGVybnMuCi0gICAqICAgICAgICAgICAgICAgICBNYXkgYmUgPGNvZGU+bnVsbDwvY29kZT4sIGluZGljYXRpbmcgdGhhdCBubyBmaWxlcwotICAgKiAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIGV4Y2x1ZGVkLiBJZiBhIG5vbi08Y29kZT5udWxsPC9jb2RlPiBsaXN0IGlzCi0gICAqICAgICAgICAgICAgICAgICBnaXZlbiwgYWxsIGVsZW1lbnRzIG11c3QgYmUgbm9uLTxjb2RlPm51bGw8L2NvZGU+LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHNldEV4Y2x1ZGVzKFN0cmluZ1tdIGV4Y2x1ZGVzKSB7Ci0gICAgaWYgKGV4Y2x1ZGVzID09IG51bGwpIHsKLSAgICAgIHRoaXMuZXhjbHVkZXMgPSBudWxsOwotICAgIH0gZWxzZSB7Ci0gICAgICB0aGlzLmV4Y2x1ZGVzID0gbmV3IFN0cmluZ1tleGNsdWRlcy5sZW5ndGhdOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleGNsdWRlcy5sZW5ndGg7IGkrKykgewotICAgICAgICBTdHJpbmcgcGF0dGVybjsKLSAgICAgICAgcGF0dGVybiA9IGV4Y2x1ZGVzW2ldLnJlcGxhY2UoJy8nLCBGaWxlLnNlcGFyYXRvckNoYXIpLgotICAgICAgICAgICAgICAgIHJlcGxhY2UoJ1xcJywgRmlsZS5zZXBhcmF0b3JDaGFyKTsKLSAgICAgICAgaWYgKHBhdHRlcm4uZW5kc1dpdGgoRmlsZS5zZXBhcmF0b3IpKSB7Ci0gICAgICAgICAgcGF0dGVybiArPSAiKioiOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuZXhjbHVkZXNbaV0gPSBwYXR0ZXJuOwotICAgICAgfQotICAgIH0KLSAgfQotCi0KLSAgLyoqCi0gICAqIFNjYW5zIHRoZSBiYXNlIGRpcmVjdG9yeSBmb3IgZmlsZXMgd2hpY2ggbWF0Y2ggYXQgbGVhc3Qgb25lCi0gICAqIGluY2x1ZGUgcGF0dGVybiBhbmQgZG9uJ3QgbWF0Y2ggYW55IGV4Y2x1ZGUgcGF0dGVybnMuIElmIHRoZXJlCi0gICAqIGFyZSBzZWxlY3RvcnMgdGhlbiB0aGUgZmlsZXMgbXVzdCBwYXNzIG11c3RlciB0aGVyZSwgYXMgd2VsbC4KLSAgICoKLSAgICogQGV4Y2VwdGlvbiBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgdGhlIGJhc2UgZGlyZWN0b3J5IHdhcyBzZXQKLSAgICogICAgICAgICAgICBpbmNvcnJlY3RseSAoaS5lLiBpZiBpdCBpcyA8Y29kZT5udWxsPC9jb2RlPiwgZG9lc24ndCBleGlzdCwKLSAgICogICAgICAgICAgICBvciBpc24ndCBhIGRpcmVjdG9yeSkuCi0gICAqLwotICBwcml2YXRlIHZvaWQgc2NhbigpIHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICBpZiAoaW5jbHVkZXMgPT0gbnVsbCkgewotICAgICAgLy8gTm8gaW5jbHVkZXMgc3VwcGxpZWQsIHNvIHNldCBpdCB0byAnbWF0Y2hlcyBhbGwnCi0gICAgICBpbmNsdWRlcyA9IG5ldyBTdHJpbmdbMV07Ci0gICAgICBpbmNsdWRlc1swXSA9ICIqKiI7Ci0gICAgfQotICAgIGlmIChleGNsdWRlcyA9PSBudWxsKSB7Ci0gICAgICBleGNsdWRlcyA9IG5ldyBTdHJpbmdbMF07Ci0gICAgfQotICAgIGZpbGVzSW5jbHVkZWQgPSBuZXcgVmVjdG9yKCk7Ci0gICAgZGlyc0luY2x1ZGVkID0gbmV3IFZlY3RvcigpOwotICAgIGlmIChpc0luY2x1ZGVkKCIiKSkgewotICAgICAgaWYgKCFpc0V4Y2x1ZGVkKCIiKSkgewotICAgICAgICBkaXJzSW5jbHVkZWQuYWRkRWxlbWVudCgiIik7Ci0gICAgICB9Ci0gICAgfQotICAgIHNjYW5kaXIobUJhc2VkaXIsICIiLCB0cnVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBTY2FucyB0aGUgZ2l2ZW4gZGlyZWN0b3J5IGZvciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuIEZvdW5kIGZpbGVzIGFuZAotICAgKiBkaXJlY3RvcmllcyBhcmUgcGxhY2VkIGluIHRoZWlyIHJlc3BlY3RpdmUgY29sbGVjdGlvbnMsIGJhc2VkIG9uIHRoZQotICAgKiBtYXRjaGluZyBvZiBpbmNsdWRlcywgZXhjbHVkZXMsIGFuZCB0aGUgc2VsZWN0b3JzLiAgV2hlbiBhIGRpcmVjdG9yeQotICAgKiBpcyBmb3VuZCwgaXQgaXMgc2Nhbm5lZCByZWN1cnNpdmVseS4KLSAgICoKLSAgICogQHBhcmFtIGRpciAgIFRoZSBkaXJlY3RvcnkgdG8gc2Nhbi4gTXVzdCBub3QgYmUgPGNvZGU+bnVsbDwvY29kZT4uCi0gICAqIEBwYXJhbSB2cGF0aCBUaGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgYmFzZSBkaXJlY3RvcnkgKG5lZWRlZCB0bwotICAgKiAgICAgICAgICAgICAgcHJldmVudCBwcm9ibGVtcyB3aXRoIGFuIGFic29sdXRlIHBhdGggd2hlbiB1c2luZwotICAgKiAgICAgICAgICAgICAgZGlyKS4gTXVzdCBub3QgYmUgPGNvZGU+bnVsbDwvY29kZT4uCi0gICAqIEBwYXJhbSBmYXN0ICBXaGV0aGVyIG9yIG5vdCB0aGlzIGNhbGwgaXMgcGFydCBvZiBhIGZhc3Qgc2Nhbi4KLSAgICoKLSAgICogQHNlZSAjZmlsZXNJbmNsdWRlZAotICAgKiBAc2VlICNkaXJzSW5jbHVkZWQKLSAgICovCi0gIHByaXZhdGUgdm9pZCBzY2FuZGlyKEZpbGUgZGlyLCBTdHJpbmcgdnBhdGgsIGJvb2xlYW4gZmFzdCkKLSAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIFN0cmluZ1tdIG5ld2ZpbGVzID0gZGlyLmxpc3QoKTsKLSAgICBpZiAobmV3ZmlsZXMgPT0gbnVsbCkgewotICAgICAgLyoKLSAgICAgICAqIHR3byByZWFzb25zIGFyZSBtZW50aW9uZWQgaW4gdGhlIEFQSSBkb2NzIGZvciBGaWxlLmxpc3QKLSAgICAgICAqICgxKSBkaXIgaXMgbm90IGEgZGlyZWN0b3J5LiBUaGlzIGlzIGltcG9zc2libGUgYXMKLSAgICAgICAqICAgICB3ZSB3b3VsZG4ndCBnZXQgaGVyZSBpbiB0aGlzIGNhc2UuCi0gICAgICAgKiAoMikgYW4gSU8gZXJyb3Igb2NjdXJyZWQgKHdoeSBkb2Vzbid0IGl0IHRocm93IGFuIGV4Y2VwdGlvbgotICAgICAgICogICAgIHRoZW4/Pz8pCi0gICAgICAgKi8KLSAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiSU8gZXJyb3Igc2Nhbm5pbmcgZGlyZWN0b3J5ICIKLSAgICAgICAgICAgICAgKyBkaXIuZ2V0QWJzb2x1dGVQYXRoKCkpOwotICAgIH0KLSAgICAvKgotICAgICAgaWYgKCFmb2xsb3dTeW1saW5rcykgewotICAgICAgVmVjdG9yIG5vTGlua3MgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5ld2ZpbGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICB0cnkgewotICAgICAgaWYgKGZpbGVVdGlscy5pc1N5bWJvbGljTGluayhkaXIsIG5ld2ZpbGVzW2ldKSkgewotICAgICAgU3RyaW5nIG5hbWUgPSB2cGF0aCArIG5ld2ZpbGVzW2ldOwotICAgICAgRmlsZSAgIGZpbGUgPSBuZXcgRmlsZShkaXIsIG5ld2ZpbGVzW2ldKTsKLSAgICAgIGlmIChmaWxlLmlzRGlyZWN0b3J5KCkpIHsKLSAgICAgIGRpcnNFeGNsdWRlZC5hZGRFbGVtZW50KG5hbWUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgIGZpbGVzRXhjbHVkZWQuYWRkRWxlbWVudChuYW1lKTsKLSAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICBub0xpbmtzLmFkZEVsZW1lbnQobmV3ZmlsZXNbaV0pOwotICAgICAgfQotICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7Ci0gICAgICBTdHJpbmcgbXNnID0gIklPRXhjZXB0aW9uIGNhdWdodCB3aGlsZSBjaGVja2luZyAiCi0gICAgICArICJmb3IgbGlua3MsIGNvdWxkbid0IGdldCBjYW5ub25pY2FsIHBhdGghIjsKLSAgICAgIC8vIHdpbGwgYmUgY2F1Z2h0IGFuZCByZWRpcmVjdGVkIHRvIEFudCdzIGxvZ2dpbmcgc3lzdGVtCi0gICAgICBTeXN0ZW0uZXJyLnByaW50bG4obXNnKTsKLSAgICAgIG5vTGlua3MuYWRkRWxlbWVudChuZXdmaWxlc1tpXSk7Ci0gICAgICB9Ci0gICAgICB9Ci0gICAgICBuZXdmaWxlcyA9IG5ldyBTdHJpbmdbbm9MaW5rcy5zaXplKCldOwotICAgICAgbm9MaW5rcy5jb3B5SW50byhuZXdmaWxlcyk7Ci0gICAgICB9Ki8KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5ld2ZpbGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBTdHJpbmcgbmFtZSA9IHZwYXRoICsgbmV3ZmlsZXNbaV07Ci0gICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShkaXIsIG5ld2ZpbGVzW2ldKTsKLSAgICAgIGlmIChmaWxlLmlzRGlyZWN0b3J5KCkpIHsKLSAgICAgICAgaWYgKGlzSW5jbHVkZWQobmFtZSkgJiYgIWlzRXhjbHVkZWQobmFtZSkpIHsKLSAgICAgICAgICBkaXJzSW5jbHVkZWQuYWRkRWxlbWVudChuYW1lKTsKLSAgICAgICAgICBzY2FuZGlyKGZpbGUsIG5hbWUgKyBGaWxlLnNlcGFyYXRvciwgZmFzdCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKGNvdWxkSG9sZEluY2x1ZGVkKG5hbWUpKSB7Ci0gICAgICAgICAgICBzY2FuZGlyKGZpbGUsIG5hbWUgKyBGaWxlLnNlcGFyYXRvciwgZmFzdCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9IGVsc2UgaWYgKGZpbGUuaXNGaWxlKCkpIHsKLSAgICAgICAgaWYgKGlzSW5jbHVkZWQobmFtZSkpIHsKLSAgICAgICAgICBpZiAoIWlzRXhjbHVkZWQobmFtZSkpIHsKLSAgICAgICAgICAgIGZpbGVzSW5jbHVkZWQuYWRkRWxlbWVudChuYW1lKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGVzdHMgd2hldGhlciBvciBub3QgYSBuYW1lIG1hdGNoZXMgYWdhaW5zdCBhdCBsZWFzdCBvbmUgaW5jbHVkZQotICAgKiBwYXR0ZXJuLgotICAgKgotICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSB0byBtYXRjaC4gTXVzdCBub3QgYmUgPGNvZGU+bnVsbDwvY29kZT4uCi0gICAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gd2hlbiB0aGUgbmFtZSBtYXRjaGVzIGFnYWluc3QgYXQgbGVhc3Qgb25lCi0gICAqICAgICAgICAgaW5jbHVkZSBwYXR0ZXJuLCBvciA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGlzSW5jbHVkZWQoU3RyaW5nIG5hbWUpIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluY2x1ZGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAobWF0Y2hQYXRoKGluY2x1ZGVzW2ldLCBuYW1lLCBtQ2FzZVNlbnNpdGl2ZSkpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0cyB3aGV0aGVyIG9yIG5vdCBhIG5hbWUgbWF0Y2hlcyB0aGUgc3RhcnQgb2YgYXQgbGVhc3Qgb25lIGluY2x1ZGUKLSAgICogcGF0dGVybi4KLSAgICoKLSAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgdG8gbWF0Y2guIE11c3Qgbm90IGJlIDxjb2RlPm51bGw8L2NvZGU+LgotICAgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IHdoZW4gdGhlIG5hbWUgbWF0Y2hlcyBhZ2FpbnN0IHRoZSBzdGFydCBvZiBhdAotICAgKiAgICAgICAgIGxlYXN0IG9uZSBpbmNsdWRlIHBhdHRlcm4sIG9yIDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gY291bGRIb2xkSW5jbHVkZWQoU3RyaW5nIG5hbWUpIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGluY2x1ZGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAobWF0Y2hQYXR0ZXJuU3RhcnQoaW5jbHVkZXNbaV0sIG5hbWUsIG1DYXNlU2Vuc2l0aXZlKSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3RzIHdoZXRoZXIgb3Igbm90IGEgbmFtZSBtYXRjaGVzIGFnYWluc3QgYXQgbGVhc3Qgb25lIGV4Y2x1ZGUKLSAgICogcGF0dGVybi4KLSAgICoKLSAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgdG8gbWF0Y2guIE11c3Qgbm90IGJlIDxjb2RlPm51bGw8L2NvZGU+LgotICAgKiBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IHdoZW4gdGhlIG5hbWUgbWF0Y2hlcyBhZ2FpbnN0IGF0IGxlYXN0IG9uZQotICAgKiAgICAgICAgIGV4Y2x1ZGUgcGF0dGVybiwgb3IgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpc0V4Y2x1ZGVkKFN0cmluZyBuYW1lKSB7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleGNsdWRlcy5sZW5ndGg7IGkrKykgewotICAgICAgaWYgKG1hdGNoUGF0aChleGNsdWRlc1tpXSwgbmFtZSwgbUNhc2VTZW5zaXRpdmUpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBuYW1lcyBvZiB0aGUgZmlsZXMgd2hpY2ggbWF0Y2hlZCBhdCBsZWFzdCBvbmUgb2YgdGhlCi0gICAqIGluY2x1ZGUgcGF0dGVybnMgYW5kIG5vbmUgb2YgdGhlIGV4Y2x1ZGUgcGF0dGVybnMuICBUaGUgbmFtZXMgYXJlCi0gICAqIHJlbGF0aXZlIHRvIHRoZSBiYXNlIGRpcmVjdG9yeS4KLSAgICoKLSAgICogQHJldHVybiB0aGUgbmFtZXMgb2YgdGhlIGZpbGVzIHdoaWNoIG1hdGNoZWQgYXQgbGVhc3Qgb25lIG9mIHRoZQotICAgKiAgICAgICAgIGluY2x1ZGUgcGF0dGVybnMgYW5kIG5vbmUgb2YgdGhlIGV4Y2x1ZGUgcGF0dGVybnMuCi0gICAqLwotICBwcml2YXRlIFN0cmluZ1tdIGdldEluY2x1ZGVkRmlsZXMoKSB7Ci0gICAgU3RyaW5nW10gZmlsZXMgPSBuZXcgU3RyaW5nW2ZpbGVzSW5jbHVkZWQuc2l6ZSgpXTsKLSAgICBmaWxlc0luY2x1ZGVkLmNvcHlJbnRvKGZpbGVzKTsKLSAgICByZXR1cm4gZmlsZXM7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgbmFtZXMgb2YgdGhlIGRpcmVjdG9yaWVzIHdoaWNoIG1hdGNoZWQgYXQgbGVhc3Qgb25lCi0gICAqIG9mIHRoZSBpbmNsdWRlIHBhdHRlcm5zIGFuZCBub25lIG9mIHRoZSBleGNsdWRlIHBhdHRlcm5zLiAgVGhlCi0gICAqIG5hbWVzIGFyZSByZWxhdGl2ZSB0byB0aGUgYmFzZSBkaXJlY3RvcnkuCi0gICAqCi0gICAqIEByZXR1cm4gdGhlIG5hbWVzIG9mIHRoZSBkaXJlY3RvcmllcyB3aGljaCBtYXRjaGVkIGF0IGxlYXN0IG9uZSBvZiB0aGUKLSAgICogaW5jbHVkZSBwYXR0ZXJucyBhbmQgbm9uZSBvZiB0aGUgZXhjbHVkZSBwYXR0ZXJucy4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nW10gZ2V0SW5jbHVkZWREaXJlY3RvcmllcygpIHsKLSAgICBTdHJpbmdbXSBkaXJlY3RvcmllcyA9IG5ldyBTdHJpbmdbZGlyc0luY2x1ZGVkLnNpemUoKV07Ci0gICAgZGlyc0luY2x1ZGVkLmNvcHlJbnRvKGRpcmVjdG9yaWVzKTsKLSAgICByZXR1cm4gZGlyZWN0b3JpZXM7Ci0gIH0KLQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBTZWxlY3RvclV0aWxzIHN0dWZmCi0KLSAgLyoqCi0gICAqIFRlc3RzIHdoZXRoZXIgb3Igbm90IGEgZ2l2ZW4gcGF0aCBtYXRjaGVzIHRoZSBzdGFydCBvZiBhIGdpdmVuCi0gICAqIHBhdHRlcm4gdXAgdG8gdGhlIGZpcnN0ICIqKiIuCi0gICAqIDxwPgotICAgKiBUaGlzIGlzIG5vdCBhIGdlbmVyYWwgcHVycG9zZSB0ZXN0IGFuZCBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdQotICAgKiBjYW4gbGl2ZSB3aXRoIGZhbHNlIHBvc2l0aXZlcy4gRm9yIGV4YW1wbGUsIDxjb2RlPnBhdHRlcm49KipcYTwvY29kZT4KLSAgICogYW5kIDxjb2RlPnN0cj1iPC9jb2RlPiB3aWxsIHlpZWxkIDxjb2RlPnRydWU8L2NvZGU+LgotICAgKgotICAgKiBAcGFyYW0gcGF0dGVybiBUaGUgcGF0dGVybiB0byBtYXRjaCBhZ2FpbnN0LiBNdXN0IG5vdCBiZQotICAgKiAgICAgICAgICAgICAgICA8Y29kZT5udWxsPC9jb2RlPi4KLSAgICogQHBhcmFtIHN0ciAgICAgVGhlIHBhdGggdG8gbWF0Y2gsIGFzIGEgU3RyaW5nLiBNdXN0IG5vdCBiZQotICAgKiAgICAgICAgICAgICAgICA8Y29kZT5udWxsPC9jb2RlPi4KLSAgICoKLSAgICogQHJldHVybiB3aGV0aGVyIG9yIG5vdCBhIGdpdmVuIHBhdGggbWF0Y2hlcyB0aGUgc3RhcnQgb2YgYSBnaXZlbgotICAgKiBwYXR0ZXJuIHVwIHRvIHRoZSBmaXJzdCAiKioiLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIG1hdGNoUGF0dGVyblN0YXJ0KFN0cmluZyBwYXR0ZXJuLCBTdHJpbmcgc3RyKSB7Ci0gICAgcmV0dXJuIG1hdGNoUGF0dGVyblN0YXJ0KHBhdHRlcm4sIHN0ciwgdHJ1ZSk7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdHMgd2hldGhlciBvciBub3QgYSBnaXZlbiBwYXRoIG1hdGNoZXMgdGhlIHN0YXJ0IG9mIGEgZ2l2ZW4KLSAgICogcGF0dGVybiB1cCB0byB0aGUgZmlyc3QgIioqIi4KLSAgICogPHA+Ci0gICAqIFRoaXMgaXMgbm90IGEgZ2VuZXJhbCBwdXJwb3NlIHRlc3QgYW5kIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgeW91Ci0gICAqIGNhbiBsaXZlIHdpdGggZmFsc2UgcG9zaXRpdmVzLiBGb3IgZXhhbXBsZSwgPGNvZGU+cGF0dGVybj0qKlxhPC9jb2RlPgotICAgKiBhbmQgPGNvZGU+c3RyPWI8L2NvZGU+IHdpbGwgeWllbGQgPGNvZGU+dHJ1ZTwvY29kZT4uCi0gICAqCi0gICAqIEBwYXJhbSBwYXR0ZXJuIFRoZSBwYXR0ZXJuIHRvIG1hdGNoIGFnYWluc3QuIE11c3Qgbm90IGJlCi0gICAqICAgICAgICAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+LgotICAgKiBAcGFyYW0gc3RyICAgICBUaGUgcGF0aCB0byBtYXRjaCwgYXMgYSBTdHJpbmcuIE11c3Qgbm90IGJlCi0gICAqICAgICAgICAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+LgotICAgKiBAcGFyYW0gbUNhc2VTZW5zaXRpdmUgV2hldGhlciBvciBub3QgbWF0Y2hpbmcgc2hvdWxkIGJlIHBlcmZvcm1lZAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugc2Vuc2l0aXZlbHkuCi0gICAqCi0gICAqIEByZXR1cm4gd2hldGhlciBvciBub3QgYSBnaXZlbiBwYXRoIG1hdGNoZXMgdGhlIHN0YXJ0IG9mIGEgZ2l2ZW4KLSAgICogcGF0dGVybiB1cCB0byB0aGUgZmlyc3QgIioqIi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBtYXRjaFBhdHRlcm5TdGFydChTdHJpbmcgcGF0dGVybiwgU3RyaW5nIHN0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gbUNhc2VTZW5zaXRpdmUpIHsKLSAgICAvLyBXaGVuIHN0ciBzdGFydHMgd2l0aCBhIEZpbGUuc2VwYXJhdG9yLCBwYXR0ZXJuIGhhcyB0byBzdGFydCB3aXRoIGEKLSAgICAvLyBGaWxlLnNlcGFyYXRvci4KLSAgICAvLyBXaGVuIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBGaWxlLnNlcGFyYXRvciwgc3RyIGhhcyB0byBzdGFydCB3aXRoIGEKLSAgICAvLyBGaWxlLnNlcGFyYXRvci4KLSAgICBpZiAoc3RyLnN0YXJ0c1dpdGgoRmlsZS5zZXBhcmF0b3IpICE9Ci0gICAgICAgICAgICBwYXR0ZXJuLnN0YXJ0c1dpdGgoRmlsZS5zZXBhcmF0b3IpKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIFZlY3RvciBwYXREaXJzID0gdG9rZW5pemVQYXRoKHBhdHRlcm4pOwotICAgIFZlY3RvciBzdHJEaXJzID0gdG9rZW5pemVQYXRoKHN0cik7Ci0gICAgaW50IHBhdElkeFN0YXJ0ID0gMDsKLSAgICBpbnQgcGF0SWR4RW5kID0gcGF0RGlycy5zaXplKCkgLSAxOwotICAgIGludCBzdHJJZHhTdGFydCA9IDA7Ci0gICAgaW50IHN0cklkeEVuZCA9IHN0ckRpcnMuc2l6ZSgpIC0gMTsKLSAgICAvLyB1cCB0byBmaXJzdCAnKionCi0gICAgd2hpbGUgKHBhdElkeFN0YXJ0IDw9IHBhdElkeEVuZCAmJiBzdHJJZHhTdGFydCA8PSBzdHJJZHhFbmQpIHsKLSAgICAgIFN0cmluZyBwYXREaXIgPSAoU3RyaW5nKSBwYXREaXJzLmVsZW1lbnRBdChwYXRJZHhTdGFydCk7Ci0gICAgICBpZiAocGF0RGlyLmVxdWFscygiKioiKSkgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICAgIGlmICghbWF0Y2gocGF0RGlyLCAoU3RyaW5nKSBzdHJEaXJzLmVsZW1lbnRBdChzdHJJZHhTdGFydCksCi0gICAgICAgICAgICAgIG1DYXNlU2Vuc2l0aXZlKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBwYXRJZHhTdGFydCsrOwotICAgICAgc3RySWR4U3RhcnQrKzsKLSAgICB9Ci0gICAgaWYgKHN0cklkeFN0YXJ0ID4gc3RySWR4RW5kKSB7Ci0gICAgICAvLyBTdHJpbmcgaXMgZXhoYXVzdGVkCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHBhdElkeFN0YXJ0ID4gcGF0SWR4RW5kKSB7Ci0gICAgICAvLyBTdHJpbmcgbm90IGV4aGF1c3RlZCwgYnV0IHBhdHRlcm4gaXMuIEZhaWx1cmUuCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIHBhdHRlcm4gbm93IGhvbGRzICoqIHdoaWxlIHN0cmluZyBpcyBub3QgZXhoYXVzdGVkCi0gICAgICAvLyB0aGlzIHdpbGwgZ2VuZXJhdGUgZmFsc2UgcG9zaXRpdmVzIGJ1dCB3ZSBjYW4gbGl2ZSB3aXRoIHRoYXQuCi0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGVzdHMgd2hldGhlciBvciBub3QgYSBnaXZlbiBwYXRoIG1hdGNoZXMgYSBnaXZlbiBwYXR0ZXJuLgotICAgKgotICAgKiBAcGFyYW0gcGF0dGVybiBUaGUgcGF0dGVybiB0byBtYXRjaCBhZ2FpbnN0LiBNdXN0IG5vdCBiZQotICAgKiAgICAgICAgICAgICAgICA8Y29kZT5udWxsPC9jb2RlPi4KLSAgICogQHBhcmFtIHN0ciAgICAgVGhlIHBhdGggdG8gbWF0Y2gsIGFzIGEgU3RyaW5nLiBNdXN0IG5vdCBiZQotICAgKiAgICAgICAgICAgICAgICA8Y29kZT5udWxsPC9jb2RlPi4KLSAgICoKLSAgICogQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgcGF0dGVybiBtYXRjaGVzIGFnYWluc3QgdGhlIHN0cmluZywKLSAgICogICAgICAgICBvciA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIG1hdGNoUGF0aChTdHJpbmcgcGF0dGVybiwgU3RyaW5nIHN0cikgewotICAgIHJldHVybiBtYXRjaFBhdGgocGF0dGVybiwgc3RyLCB0cnVlKTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0cyB3aGV0aGVyIG9yIG5vdCBhIGdpdmVuIHBhdGggbWF0Y2hlcyBhIGdpdmVuIHBhdHRlcm4uCi0gICAqCi0gICAqIEBwYXJhbSBwYXR0ZXJuIFRoZSBwYXR0ZXJuIHRvIG1hdGNoIGFnYWluc3QuIE11c3Qgbm90IGJlCi0gICAqICAgICAgICAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+LgotICAgKiBAcGFyYW0gc3RyICAgICBUaGUgcGF0aCB0byBtYXRjaCwgYXMgYSBTdHJpbmcuIE11c3Qgbm90IGJlCi0gICAqICAgICAgICAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+LgotICAgKiBAcGFyYW0gbUNhc2VTZW5zaXRpdmUgV2hldGhlciBvciBub3QgbWF0Y2hpbmcgc2hvdWxkIGJlIHBlcmZvcm1lZAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugc2Vuc2l0aXZlbHkuCi0gICAqCi0gICAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHBhdHRlcm4gbWF0Y2hlcyBhZ2FpbnN0IHRoZSBzdHJpbmcsCi0gICAqICAgICAgICAgb3IgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBtYXRjaFBhdGgoU3RyaW5nIHBhdHRlcm4sIFN0cmluZyBzdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBtQ2FzZVNlbnNpdGl2ZSkgewotICAgIC8vIFdoZW4gc3RyIHN0YXJ0cyB3aXRoIGEgRmlsZS5zZXBhcmF0b3IsIHBhdHRlcm4gaGFzIHRvIHN0YXJ0IHdpdGggYQotICAgIC8vIEZpbGUuc2VwYXJhdG9yLgotICAgIC8vIFdoZW4gcGF0dGVybiBzdGFydHMgd2l0aCBhIEZpbGUuc2VwYXJhdG9yLCBzdHIgaGFzIHRvIHN0YXJ0IHdpdGggYQotICAgIC8vIEZpbGUuc2VwYXJhdG9yLgotICAgIGlmIChzdHIuc3RhcnRzV2l0aChGaWxlLnNlcGFyYXRvcikgIT0KLSAgICAgICAgICAgIHBhdHRlcm4uc3RhcnRzV2l0aChGaWxlLnNlcGFyYXRvcikpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgVmVjdG9yIHBhdERpcnMgPSB0b2tlbml6ZVBhdGgocGF0dGVybik7Ci0gICAgVmVjdG9yIHN0ckRpcnMgPSB0b2tlbml6ZVBhdGgoc3RyKTsKLSAgICBpbnQgcGF0SWR4U3RhcnQgPSAwOwotICAgIGludCBwYXRJZHhFbmQgPSBwYXREaXJzLnNpemUoKSAtIDE7Ci0gICAgaW50IHN0cklkeFN0YXJ0ID0gMDsKLSAgICBpbnQgc3RySWR4RW5kID0gc3RyRGlycy5zaXplKCkgLSAxOwotICAgIC8vIHVwIHRvIGZpcnN0ICcqKicKLSAgICB3aGlsZSAocGF0SWR4U3RhcnQgPD0gcGF0SWR4RW5kICYmIHN0cklkeFN0YXJ0IDw9IHN0cklkeEVuZCkgewotICAgICAgU3RyaW5nIHBhdERpciA9IChTdHJpbmcpIHBhdERpcnMuZWxlbWVudEF0KHBhdElkeFN0YXJ0KTsKLSAgICAgIGlmIChwYXREaXIuZXF1YWxzKCIqKiIpKSB7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWYgKCFtYXRjaChwYXREaXIsIChTdHJpbmcpIHN0ckRpcnMuZWxlbWVudEF0KHN0cklkeFN0YXJ0KSwKLSAgICAgICAgICAgICAgbUNhc2VTZW5zaXRpdmUpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIHBhdElkeFN0YXJ0Kys7Ci0gICAgICBzdHJJZHhTdGFydCsrOwotICAgIH0KLSAgICBpZiAoc3RySWR4U3RhcnQgPiBzdHJJZHhFbmQpIHsKLSAgICAgIC8vIFN0cmluZyBpcyBleGhhdXN0ZWQKLSAgICAgIGZvciAoaW50IGkgPSBwYXRJZHhTdGFydDsgaSA8PSBwYXRJZHhFbmQ7IGkrKykgewotICAgICAgICBpZiAoIXBhdERpcnMuZWxlbWVudEF0KGkpLmVxdWFscygiKioiKSkgewotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChwYXRJZHhTdGFydCA+IHBhdElkeEVuZCkgewotICAgICAgICAvLyBTdHJpbmcgbm90IGV4aGF1c3RlZCwgYnV0IHBhdHRlcm4gaXMuIEZhaWx1cmUuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgLy8gdXAgdG8gbGFzdCAnKionCi0gICAgd2hpbGUgKHBhdElkeFN0YXJ0IDw9IHBhdElkeEVuZCAmJiBzdHJJZHhTdGFydCA8PSBzdHJJZHhFbmQpIHsKLSAgICAgIFN0cmluZyBwYXREaXIgPSAoU3RyaW5nKSBwYXREaXJzLmVsZW1lbnRBdChwYXRJZHhFbmQpOwotICAgICAgaWYgKHBhdERpci5lcXVhbHMoIioqIikpIHsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgICBpZiAoIW1hdGNoKHBhdERpciwgKFN0cmluZykgc3RyRGlycy5lbGVtZW50QXQoc3RySWR4RW5kKSwKLSAgICAgICAgICAgICAgbUNhc2VTZW5zaXRpdmUpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIHBhdElkeEVuZC0tOwotICAgICAgc3RySWR4RW5kLS07Ci0gICAgfQotICAgIGlmIChzdHJJZHhTdGFydCA+IHN0cklkeEVuZCkgewotICAgICAgLy8gU3RyaW5nIGlzIGV4aGF1c3RlZAotICAgICAgZm9yIChpbnQgaSA9IHBhdElkeFN0YXJ0OyBpIDw9IHBhdElkeEVuZDsgaSsrKSB7Ci0gICAgICAgIGlmICghcGF0RGlycy5lbGVtZW50QXQoaSkuZXF1YWxzKCIqKiIpKSB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgd2hpbGUgKHBhdElkeFN0YXJ0ICE9IHBhdElkeEVuZCAmJiBzdHJJZHhTdGFydCA8PSBzdHJJZHhFbmQpIHsKLSAgICAgIGludCBwYXRJZHhUbXAgPSAtMTsKLSAgICAgIGZvciAoaW50IGkgPSBwYXRJZHhTdGFydCArIDE7IGkgPD0gcGF0SWR4RW5kOyBpKyspIHsKLSAgICAgICAgaWYgKHBhdERpcnMuZWxlbWVudEF0KGkpLmVxdWFscygiKioiKSkgewotICAgICAgICAgIHBhdElkeFRtcCA9IGk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChwYXRJZHhUbXAgPT0gcGF0SWR4U3RhcnQgKyAxKSB7Ci0gICAgICAgIC8vICcqKi8qKicgc2l0dWF0aW9uLCBzbyBza2lwIG9uZQotICAgICAgICBwYXRJZHhTdGFydCsrOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIC8vIEZpbmQgdGhlIHBhdHRlcm4gYmV0d2VlbiBwYWRJZHhTdGFydCAmIHBhZElkeFRtcCBpbiBzdHIgYmV0d2VlbgotICAgICAgLy8gc3RySWR4U3RhcnQgJiBzdHJJZHhFbmQKLSAgICAgIGludCBwYXRMZW5ndGggPSAocGF0SWR4VG1wIC0gcGF0SWR4U3RhcnQgLSAxKTsKLSAgICAgIGludCBzdHJMZW5ndGggPSAoc3RySWR4RW5kIC0gc3RySWR4U3RhcnQgKyAxKTsKLSAgICAgIGludCBmb3VuZElkeCA9IC0xOwotICAgICAgc3RyTG9vcDoKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3RyTGVuZ3RoIC0gcGF0TGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBhdExlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgICBTdHJpbmcgc3ViUGF0ID0gKFN0cmluZykgcGF0RGlycy5lbGVtZW50QXQocGF0SWR4U3RhcnQgKyBqICsgMSk7Ci0gICAgICAgICAgICBTdHJpbmcgc3ViU3RyID0gKFN0cmluZykgc3RyRGlycy5lbGVtZW50QXQoc3RySWR4U3RhcnQgKyBpICsgaik7Ci0gICAgICAgICAgICBpZiAoIW1hdGNoKHN1YlBhdCwgc3ViU3RyLCBtQ2FzZVNlbnNpdGl2ZSkpIHsKLSAgICAgICAgICAgICAgY29udGludWUgc3RyTG9vcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZm91bmRJZHggPSBzdHJJZHhTdGFydCArIGk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIGlmIChmb3VuZElkeCA9PSAtMSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBwYXRJZHhTdGFydCA9IHBhdElkeFRtcDsKLSAgICAgIHN0cklkeFN0YXJ0ID0gZm91bmRJZHggKyBwYXRMZW5ndGg7Ci0gICAgfQotICAgIGZvciAoaW50IGkgPSBwYXRJZHhTdGFydDsgaSA8PSBwYXRJZHhFbmQ7IGkrKykgewotICAgICAgaWYgKCFwYXREaXJzLmVsZW1lbnRBdChpKS5lcXVhbHMoIioqIikpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0KLSAgLyoqCi0gICAqIFRlc3RzIHdoZXRoZXIgb3Igbm90IGEgc3RyaW5nIG1hdGNoZXMgYWdhaW5zdCBhIHBhdHRlcm4uICBUaGUKLSAgICogcGF0dGVybiBtYXkgY29udGFpbiB0d28gc3BlY2lhbCBjaGFyYWN0ZXJzOjxicj4gJyonIG1lYW5zIHplcm8gb3IKLSAgICogbW9yZSBjaGFyYWN0ZXJzPGJyPiAnPycgbWVhbnMgb25lIGFuZCBvbmx5IG9uZSBjaGFyYWN0ZXIKLSAgICoKLSAgICogQHBhcmFtIHBhdHRlcm4gVGhlIHBhdHRlcm4gdG8gbWF0Y2ggYWdhaW5zdC4KLSAgICogICAgICAgICAgICAgICAgTXVzdCBub3QgYmUgPGNvZGU+bnVsbDwvY29kZT4uCi0gICAqIEBwYXJhbSBzdHIgICAgIFRoZSBzdHJpbmcgd2hpY2ggbXVzdCBiZSBtYXRjaGVkIGFnYWluc3QgdGhlIHBhdHRlcm4uCi0gICAqICAgICAgICAgICAgICAgIE11c3Qgbm90IGJlIDxjb2RlPm51bGw8L2NvZGU+LgotICAgKiBAcGFyYW0gbUNhc2VTZW5zaXRpdmUgV2hldGhlciBvciBub3QgbWF0Y2hpbmcgc2hvdWxkIGJlIHBlcmZvcm1lZAotICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugc2Vuc2l0aXZlbHkuCi0gICAqCi0gICAqCi0gICAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIHN0cmluZyBtYXRjaGVzIGFnYWluc3QgdGhlIHBhdHRlcm4sCi0gICAqICAgICAgICAgb3IgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gbWF0Y2goU3RyaW5nIHBhdHRlcm4sIFN0cmluZyBzdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBtQ2FzZVNlbnNpdGl2ZSkgewotICAgIGNoYXJbXSBwYXRBcnIgPSBwYXR0ZXJuLnRvQ2hhckFycmF5KCk7Ci0gICAgY2hhcltdIHN0ckFyciA9IHN0ci50b0NoYXJBcnJheSgpOwotICAgIGludCBwYXRJZHhTdGFydCA9IDA7Ci0gICAgaW50IHBhdElkeEVuZCA9IHBhdEFyci5sZW5ndGggLSAxOwotICAgIGludCBzdHJJZHhTdGFydCA9IDA7Ci0gICAgaW50IHN0cklkeEVuZCA9IHN0ckFyci5sZW5ndGggLSAxOwotICAgIGNoYXIgY2g7Ci0gICAgYm9vbGVhbiBjb250YWluc1N0YXIgPSBmYWxzZTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhdEFyci5sZW5ndGg7IGkrKykgewotICAgICAgaWYgKHBhdEFycltpXSA9PSAnKicpIHsKLSAgICAgICAgY29udGFpbnNTdGFyID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICghY29udGFpbnNTdGFyKSB7Ci0gICAgICAvLyBObyAnKidzLCBzbyB3ZSBtYWtlIGEgc2hvcnRjdXQKLSAgICAgIGlmIChwYXRJZHhFbmQgIT0gc3RySWR4RW5kKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gUGF0dGVybiBhbmQgc3RyaW5nIGRvIG5vdCBoYXZlIHRoZSBzYW1lIHNpemUKLSAgICAgIH0KLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHBhdElkeEVuZDsgaSsrKSB7Ci0gICAgICAgIGNoID0gcGF0QXJyW2ldOwotICAgICAgICBpZiAoY2ggIT0gJz8nKSB7Ci0gICAgICAgICAgaWYgKG1DYXNlU2Vuc2l0aXZlICYmIGNoICE9IHN0ckFycltpXSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOy8vIENoYXJhY3RlciBtaXNtYXRjaAotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoIW1DYXNlU2Vuc2l0aXZlICYmIENoYXJhY3Rlci50b1VwcGVyQ2FzZShjaCkgIT0KLSAgICAgICAgICAgICAgICAgIENoYXJhY3Rlci50b1VwcGVyQ2FzZShzdHJBcnJbaV0pKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIENoYXJhY3RlciBtaXNtYXRjaAotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIHRydWU7IC8vIFN0cmluZyBtYXRjaGVzIGFnYWluc3QgcGF0dGVybgotICAgIH0KLSAgICBpZiAocGF0SWR4RW5kID09IDApIHsKLSAgICAgIHJldHVybiB0cnVlOyAvLyBQYXR0ZXJuIGNvbnRhaW5zIG9ubHkgJyonLCB3aGljaCBtYXRjaGVzIGFueXRoaW5nCi0gICAgfQotICAgIC8vIFByb2Nlc3MgY2hhcmFjdGVycyBiZWZvcmUgZmlyc3Qgc3RhcgotICAgIHdoaWxlICgoY2ggPSBwYXRBcnJbcGF0SWR4U3RhcnRdKSAhPSAnKicgJiYgc3RySWR4U3RhcnQgPD0gc3RySWR4RW5kKSB7Ci0gICAgICBpZiAoY2ggIT0gJz8nKSB7Ci0gICAgICAgIGlmIChtQ2FzZVNlbnNpdGl2ZSAmJiBjaCAhPSBzdHJBcnJbc3RySWR4U3RhcnRdKSB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOy8vIENoYXJhY3RlciBtaXNtYXRjaAotICAgICAgICB9Ci0gICAgICAgIGlmICghbUNhc2VTZW5zaXRpdmUgJiYgQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKGNoKSAhPQotICAgICAgICAgICAgICAgIENoYXJhY3Rlci50b1VwcGVyQ2FzZShzdHJBcnJbc3RySWR4U3RhcnRdKSkgewotICAgICAgICAgIHJldHVybiBmYWxzZTsvLyBDaGFyYWN0ZXIgbWlzbWF0Y2gKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcGF0SWR4U3RhcnQrKzsKLSAgICAgIHN0cklkeFN0YXJ0Kys7Ci0gICAgfQotICAgIGlmIChzdHJJZHhTdGFydCA+IHN0cklkeEVuZCkgewotICAgICAgLy8gQWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgdXNlZC4gQ2hlY2sgaWYgb25seSAnKidzIGFyZQotICAgICAgLy8gbGVmdCBpbiB0aGUgcGF0dGVybi4gSWYgc28sIHdlIHN1Y2NlZWRlZC4gT3RoZXJ3aXNlIGZhaWx1cmUuCi0gICAgICBmb3IgKGludCBpID0gcGF0SWR4U3RhcnQ7IGkgPD0gcGF0SWR4RW5kOyBpKyspIHsKLSAgICAgICAgaWYgKHBhdEFycltpXSAhPSAnKicpIHsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAvLyBQcm9jZXNzIGNoYXJhY3RlcnMgYWZ0ZXIgbGFzdCBzdGFyCi0gICAgd2hpbGUgKChjaCA9IHBhdEFycltwYXRJZHhFbmRdKSAhPSAnKicgJiYgc3RySWR4U3RhcnQgPD0gc3RySWR4RW5kKSB7Ci0gICAgICBpZiAoY2ggIT0gJz8nKSB7Ci0gICAgICAgIGlmIChtQ2FzZVNlbnNpdGl2ZSAmJiBjaCAhPSBzdHJBcnJbc3RySWR4RW5kXSkgewotICAgICAgICAgIHJldHVybiBmYWxzZTsvLyBDaGFyYWN0ZXIgbWlzbWF0Y2gKLSAgICAgICAgfQotICAgICAgICBpZiAoIW1DYXNlU2Vuc2l0aXZlICYmIENoYXJhY3Rlci50b1VwcGVyQ2FzZShjaCkgIT0KLSAgICAgICAgICAgICAgICBDaGFyYWN0ZXIudG9VcHBlckNhc2Uoc3RyQXJyW3N0cklkeEVuZF0pKSB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOy8vIENoYXJhY3RlciBtaXNtYXRjaAotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBwYXRJZHhFbmQtLTsKLSAgICAgIHN0cklkeEVuZC0tOwotICAgIH0KLSAgICBpZiAoc3RySWR4U3RhcnQgPiBzdHJJZHhFbmQpIHsKLSAgICAgIC8vIEFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIHVzZWQuIENoZWNrIGlmIG9ubHkgJyoncyBhcmUKLSAgICAgIC8vIGxlZnQgaW4gdGhlIHBhdHRlcm4uIElmIHNvLCB3ZSBzdWNjZWVkZWQuIE90aGVyd2lzZSBmYWlsdXJlLgotICAgICAgZm9yIChpbnQgaSA9IHBhdElkeFN0YXJ0OyBpIDw9IHBhdElkeEVuZDsgaSsrKSB7Ci0gICAgICAgIGlmIChwYXRBcnJbaV0gIT0gJyonKSB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgLy8gcHJvY2VzcyBwYXR0ZXJuIGJldHdlZW4gc3RhcnMuIHBhZElkeFN0YXJ0IGFuZCBwYXRJZHhFbmQgcG9pbnQKLSAgICAvLyBhbHdheXMgdG8gYSAnKicuCi0gICAgd2hpbGUgKHBhdElkeFN0YXJ0ICE9IHBhdElkeEVuZCAmJiBzdHJJZHhTdGFydCA8PSBzdHJJZHhFbmQpIHsKLSAgICAgIGludCBwYXRJZHhUbXAgPSAtMTsKLSAgICAgIGZvciAoaW50IGkgPSBwYXRJZHhTdGFydCArIDE7IGkgPD0gcGF0SWR4RW5kOyBpKyspIHsKLSAgICAgICAgaWYgKHBhdEFycltpXSA9PSAnKicpIHsKLSAgICAgICAgICBwYXRJZHhUbXAgPSBpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAocGF0SWR4VG1wID09IHBhdElkeFN0YXJ0ICsgMSkgewotICAgICAgICAvLyBUd28gc3RhcnMgbmV4dCB0byBlYWNoIG90aGVyLCBza2lwIHRoZSBmaXJzdCBvbmUuCi0gICAgICAgIHBhdElkeFN0YXJ0Kys7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgLy8gRmluZCB0aGUgcGF0dGVybiBiZXR3ZWVuIHBhZElkeFN0YXJ0ICYgcGFkSWR4VG1wIGluIHN0ciBiZXR3ZWVuCi0gICAgICAvLyBzdHJJZHhTdGFydCAmIHN0cklkeEVuZAotICAgICAgaW50IHBhdExlbmd0aCA9IChwYXRJZHhUbXAgLSBwYXRJZHhTdGFydCAtIDEpOwotICAgICAgaW50IHN0ckxlbmd0aCA9IChzdHJJZHhFbmQgLSBzdHJJZHhTdGFydCArIDEpOwotICAgICAgaW50IGZvdW5kSWR4ID0gLTE7Ci0gICAgICBzdHJMb29wOgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSBzdHJMZW5ndGggLSBwYXRMZW5ndGg7IGkrKykgewotICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcGF0TGVuZ3RoOyBqKyspIHsKLSAgICAgICAgICAgIGNoID0gcGF0QXJyW3BhdElkeFN0YXJ0ICsgaiArIDFdOwotICAgICAgICAgICAgaWYgKGNoICE9ICc/JykgewotICAgICAgICAgICAgICBpZiAobUNhc2VTZW5zaXRpdmUgJiYgY2ggIT0gc3RyQXJyW3N0cklkeFN0YXJ0ICsgaSArIGpdKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWUgc3RyTG9vcDsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBpZiAoIW1DYXNlU2Vuc2l0aXZlICYmIENoYXJhY3Rlci50b1VwcGVyQ2FzZShjaCkgIT0KLSAgICAgICAgICAgICAgICAgICAgICBDaGFyYWN0ZXIudG9VcHBlckNhc2Uoc3RyQXJyW3N0cklkeFN0YXJ0ICsgaSArIGpdKSkgewotICAgICAgICAgICAgICAgIGNvbnRpbnVlIHN0ckxvb3A7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZm91bmRJZHggPSBzdHJJZHhTdGFydCArIGk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIGlmIChmb3VuZElkeCA9PSAtMSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBwYXRJZHhTdGFydCA9IHBhdElkeFRtcDsKLSAgICAgIHN0cklkeFN0YXJ0ID0gZm91bmRJZHggKyBwYXRMZW5ndGg7Ci0gICAgfQotICAgIC8vIEFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIHVzZWQuIENoZWNrIGlmIG9ubHkgJyoncyBhcmUgbGVmdAotICAgIC8vIGluIHRoZSBwYXR0ZXJuLiBJZiBzbywgd2Ugc3VjY2VlZGVkLiBPdGhlcndpc2UgZmFpbHVyZS4KLSAgICBmb3IgKGludCBpID0gcGF0SWR4U3RhcnQ7IGkgPD0gcGF0SWR4RW5kOyBpKyspIHsKLSAgICAgIGlmIChwYXRBcnJbaV0gIT0gJyonKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogQnJlYWtzIGEgcGF0aCB1cCBpbnRvIGEgVmVjdG9yIG9mIHBhdGggZWxlbWVudHMsIHRva2VuaXppbmcgb24KLSAgICogPGNvZGU+RmlsZS5zZXBhcmF0b3I8L2NvZGU+LgotICAgKgotICAgKiBAcGFyYW0gcGF0aCBQYXRoIHRvIHRva2VuaXplLiBNdXN0IG5vdCBiZSA8Y29kZT5udWxsPC9jb2RlPi4KLSAgICoKLSAgICogQHJldHVybiBhIFZlY3RvciBvZiBwYXRoIGVsZW1lbnRzIGZyb20gdGhlIHRva2VuaXplZCBwYXRoCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBWZWN0b3IgdG9rZW5pemVQYXRoKFN0cmluZyBwYXRoKSB7Ci0gICAgVmVjdG9yIHJldCA9IG5ldyBWZWN0b3IoKTsKLSAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHBhdGgsIEZpbGUuc2VwYXJhdG9yKTsKLSAgICB3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKSB7Ci0gICAgICByZXQuYWRkRWxlbWVudChzdC5uZXh0VG9rZW4oKSk7Ci0gICAgfQotICAgIHJldHVybiByZXQ7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvSlBhY2thZ2VJbXBsLmphdmEgYi92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvSlBhY2thZ2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNmFhMDAuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL0pQYWNrYWdlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLkpDbGFzczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLkpFbGVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uSlNvdXJjZVBvc2l0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotCi0vKioKLSAqIDxwPkdlbmVyaWMgaW1wbGVtZW50YXRpb24gb2YgSlBhY2thZ2UvSW50ZXJuYWxKUGFja2FnZSB0aGF0IGlzIGdvb2QKLSAqIGVub3VnaCBmb3IgYWxsIGNhc2VzLCByaWdodCBub3cuICBUaGlzIG1pZ2h0IGNoYW5nZSBpZiB3ZSBldmVyIHdyYXAKLSAqIGEgbW9kZWwgd2hpY2ggbmF0aXZlbHkgc3VwcG9ydHMgcGFja2FnZS1sZXZlbCBhbm5vdGF0aW9uLjwvcD4KLSAqCi0gKiBAYXV0aG9yIFBhdHJpY2sgQ2FsYWhhbiA8cGNhbEBiZWEuY29tPgotICovCi1wdWJsaWMgY2xhc3MgSlBhY2thZ2VJbXBsIGV4dGVuZHMgQmFzZUpFbGVtZW50IGltcGxlbWVudHMgSW50ZXJuYWxKUGFja2FnZSB7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFZhcmlhYmxlcwotCi0gIHByaXZhdGUgTGlzdCBtUm9vdENsYXNzZXMgPSBudWxsOwotICBwcml2YXRlIFN0cmluZyBtTmFtZTsKLSAgcHJpdmF0ZSBKRWxlbWVudCBtUGFyZW50ID0gbnVsbDsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gQ29uc3RydWN0b3JzCi0KLSAgcHVibGljIEpQYWNrYWdlSW1wbChTdHJpbmcgbmFtZSkgewotICAgIG1OYW1lID0gbmFtZTsKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBJbnRlcm5hbEpQYWNrYWdlIGltcGxlbWVudGF0aW9uCi0KLSAgcHVibGljIHZvaWQgc2V0UGFyZW50KEpFbGVtZW50IHBhcmVudCkgewotICAgIG1QYXJlbnQgPSBwYXJlbnQ7Ci0gIH0KLQotICAvKioKLSAgICogPHA+TmVlZCB0aGlzIHNvIHdlIGNhbiB0ZWxsIGFyYml0cmFyeSBwYWNrYWdlcyB0aGF0IGFuIGFyYml0cmFyeQotICAgKiBjbGFzcyBpcyB0aGVpciBjaGlsZC4gIFNlZSBKUm9vdEltcGwgY29uc3RydWN0b3IuPC9wPgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkQ2xhc3MoSkNsYXNzIGNsYXp6KSB7Ci0gICAgaWYgKG1Sb290Q2xhc3NlcyA9PSBudWxsKSBtUm9vdENsYXNzZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgbVJvb3RDbGFzc2VzLmFkZChjbGF6eik7Ci0gIH0KLQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBKRWxlbWVudCBpbXBsZW1lbnRhdGlvbgotCi0gIC8qKgotICAgKiBUaGUgcGFyZW50IG9mIGEgcGFja2FnZSBpcyBhbHdheXMgdGhlIHJvb3QuCi0gICAqLwotICBwdWJsaWMgSkVsZW1lbnQgZ2V0UGFyZW50KCkgewotICAgIHJldHVybiBtUGFyZW50OwotICB9Ci0KLSAgcHVibGljIEpFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0gICAgcmV0dXJuIGdldENsYXNzZXMoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2ltcGxlTmFtZSgpIHsKLSAgICBpbnQgbGFzdERvdCA9IG1OYW1lLmxhc3RJbmRleE9mKCcuJyk7Ci0gICAgaWYgKGxhc3REb3QgPT0gLTEpIHJldHVybiBtTmFtZTsKLSAgICByZXR1cm4gbU5hbWUuc3Vic3RyaW5nKGxhc3REb3QgKyAxKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UXVhbGlmaWVkTmFtZSgpIHsKLSAgICByZXR1cm4gbU5hbWU7Ci0gIH0KLQotICAvL1JFVklFVyBtYXliZSB3ZSBzaG91bGQgdHJ5IHRvIGZpbmQgcGFja2FnZS5odG1sIGFuZCB1c2UgdGhhdCBhcwotICAvL3NvdXJjZSBwb3NpdGlvbj8KLSAgcHVibGljIEpTb3VyY2VQb3NpdGlvbiBnZXRTb3VyY2VQb3NpdGlvbigpIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBKUGFja2FnZSBpbXBsZW1lbnRhdGlvbgotCi0gIHB1YmxpYyBKQ2xhc3NbXSBnZXRDbGFzc2VzKCkgewotICAgIEpDbGFzc1tdIG91dCA9IG5ldyBKQ2xhc3NbbVJvb3RDbGFzc2VzLnNpemUoKV07Ci0gICAgbVJvb3RDbGFzc2VzLnRvQXJyYXkob3V0KTsKLSAgICByZXR1cm4gb3V0OwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIEJhc2VKRWxlbWVudCBpbXBsZW1lbnRhdGlvbgotCi0gIC8vIG5vIHN1cHBvcnQgZm9yIGxvY2FsIHBhY2thZ2UtbGV2ZWwgY29tbWVudHMgb3IgYW5ub3RhdGlvbnMKLQotICBwcm90ZWN0ZWQgdm9pZCBnZXRMb2NhbEFubm90YXRpb25zKENvbGxlY3Rpb24gb3V0KSB7Ci0gIH0KLQotICBwcm90ZWN0ZWQgdm9pZCBnZXRMb2NhbENvbW1lbnRzKENvbGxlY3Rpb24gb3V0KSB7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL0pQcm9wZXJ0eUltcGwuamF2YSBiL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9KUHJvcGVydHlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjMzk1ZWMuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL0pQcm9wZXJ0eUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5OCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS4qOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotLyoqCi0gKiA8cD5JbXBsZW1lbnRhdGlvbiBvZiBKUHJvcGVydHkuPC9wPgotICoKLSAqIEBhdXRob3IgUGF0cmljayBDYWxhaGFuIDxwY2FsQGJlYS5jb20+Ci0gKi8KLXB1YmxpYyBjbGFzcyBKUHJvcGVydHlJbXBsIGltcGxlbWVudHMgSlByb3BlcnR5IHsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gVmFyaWFibGVzCi0KLSAgcHJpdmF0ZSBTdHJpbmcgbU5hbWU7Ci0gIHByaXZhdGUgSk1ldGhvZCBtR2V0dGVyLCBtU2V0dGVyOwotICBwcml2YXRlIEpDbGFzcyBtVHlwZTsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gRmFjdG9yeQotCi0KLSAgLy8gUkVWSUVXIHNob3VsZCB0aGVzZSBiZSBhdmFpbGFibGUgdmlhIGEgZ2V0dGVyIG9uIEpDbGFzcz8gIFNlZW1zCi0gIC8vIG9rIHRvIG1lLCBidXQgdGhlcmUgd2VyZSBzb21lIGNvbmNlcm5zIHRoYXQgdGhpcyBtaWdodCBjb25mdXNpbmcuCi0gIC8qKgotICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHByb3BlcnRpZXMgZm91bmQgb24gdGhlIGdpdmVuIGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBKUHJvcGVydHlbXSBnZXRQcm9wZXJ0aWVzKEpDbGFzcyBjbGF6eikgewotICAgIE1hcCBuYW1lMnByb3AgPSBuZXcgSGFzaE1hcCgpOwotICAgIEpNZXRob2RbXSBtZXRob2RzID0gY2xhenouZ2V0TWV0aG9kcygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkrKykgewotICAgICAgU3RyaW5nIG5hbWUgPSBtZXRob2RzW2ldLmdldFNpbXBsZU5hbWUoKTsKLSAgICAgIC8vCi0gICAgICAvLyBwcm9jZXNzIGdldHRlcnMKLSAgICAgIC8vCi0gICAgICBpZiAobmFtZS5zdGFydHNXaXRoKCJnZXQiKSAmJiBuYW1lLmxlbmd0aCgpID4gMykgewotICAgICAgICBKQ2xhc3MgdHlwZSA9IG1ldGhvZHNbaV0uZ2V0UmV0dXJuVHlwZSgpOwotICAgICAgICBpZiAodHlwZSA9PSBudWxsKSBjb250aW51ZTsgLy8gbXVzdCBoYXZlIGEgdHlwZSBhbmQgaGF2ZQotICAgICAgICBpZiAobWV0aG9kc1tpXS5nZXRQYXJhbWV0ZXJzKCkubGVuZ3RoID4gMCkgY29udGludWU7IC8vbm8gcGFyYW1zCi0gICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cmluZygzKTsKLSAgICAgICAgSlByb3BlcnR5SW1wbCBwcm9wID0gKEpQcm9wZXJ0eUltcGwpIG5hbWUycHJvcC5nZXQobmFtZSk7Ci0gICAgICAgIGlmIChwcm9wID09IG51bGwpIHsKLSAgICAgICAgICBwcm9wID0gbmV3IEpQcm9wZXJ0eUltcGwobmFtZSwgbWV0aG9kc1tpXSwgbnVsbCwgdHlwZSk7Ci0gICAgICAgICAgbmFtZTJwcm9wLnB1dChuYW1lLCBwcm9wKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBpZiAodHlwZS5lcXVhbHMocHJvcC5nZXRUeXBlKCkpKSB7Ci0gICAgICAgICAgICAvLyBpZiBpdCdzIHRoZSBzYW1lIHR5cGUsIGNvb2wgLSBqdXN0IGFkZCB0aGUgZ2V0dGVyCi0gICAgICAgICAgICBwcm9wLm1HZXR0ZXIgPSBtZXRob2RzW2ldOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBPdGhlcndpc2UsIGdldHRlci9zZXR0ZXIgdHlwZXMgYXJlIG1pc21hdGNoZWQgYW5kIHdlCi0gICAgICAgICAgICAvLyBkb24ndCBoYXZlIGEgcHJvcGVydHkuICBSRVZJRVcgb2s/Ci0gICAgICAgICAgICBuYW1lMnByb3AucmVtb3ZlKG5hbWUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8KLSAgICAgIC8vIHByb2Nlc3Mgc2V0dGVycwotICAgICAgLy8KLSAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoInNldCIpICYmIG5hbWUubGVuZ3RoKCkgPiAzKSB7Ci0gICAgICAgIGlmIChtZXRob2RzW2ldLmdldFBhcmFtZXRlcnMoKS5sZW5ndGggIT0gMSkgY29udGludWU7IC8vMSBwYXJhbSByZXFkCi0gICAgICAgIEpDbGFzcyB0eXBlID0gbWV0aG9kc1tpXS5nZXRQYXJhbWV0ZXJzKClbMF0uZ2V0VHlwZSgpOwotICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcoMyk7Ci0gICAgICAgIEpQcm9wZXJ0eUltcGwgcHJvcCA9IChKUHJvcGVydHlJbXBsKSBuYW1lMnByb3AuZ2V0KG5hbWUpOwotICAgICAgICBpZiAocHJvcCA9PSBudWxsKSB7Ci0gICAgICAgICAgcHJvcCA9IG5ldyBKUHJvcGVydHlJbXBsKG5hbWUsIG51bGwsIG1ldGhvZHNbaV0sIHR5cGUpOwotICAgICAgICAgIG5hbWUycHJvcC5wdXQobmFtZSwgcHJvcCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKHR5cGUuZXF1YWxzKHByb3AuZ2V0VHlwZSgpKSkgewotICAgICAgICAgICAgLy8gaWYgaXQncyB0aGUgc2FtZSB0eXBlLCBjb29sIC0ganVzdCBhZGQgdGhlIGdldHRlcgotICAgICAgICAgICAgcHJvcC5tU2V0dGVyID0gbWV0aG9kc1tpXTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBnZXR0ZXIvc2V0dGVyIHR5cGVzIGFyZSBtaXNtYXRjaGVkIGFuZCB3ZQotICAgICAgICAgICAgLy8gZG9uJ3QgaGF2ZSBhIHByb3BlcnR5LiAgUkVWSUVXIG9rPwotICAgICAgICAgICAgbmFtZTJwcm9wLnJlbW92ZShuYW1lKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgSlByb3BlcnR5W10gb3V0ID0gbmV3IEpQcm9wZXJ0eVtuYW1lMnByb3AudmFsdWVzKCkuc2l6ZSgpXTsKLSAgICBuYW1lMnByb3AudmFsdWVzKCkudG9BcnJheShvdXQpOwotICAgIHJldHVybiBvdXQ7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gQ29uc3RydWN0b3IKLQotICAvKioKLSAgICogPHA+WW91J2xsIHVzdWFsbHkgd2FudCB0byB1c2UgdGhlIGdldFByb3BlcnRpZXMoKSBmYWN0b3J5IG1ldGhvZAotICAgKiBpbnN0ZWFkIG9mIGNvbnN0cnVjdGluZyBKUHJvcGVydGllcyB5b3Vyc2VsZi4gIFRoaXMgY29uc3RydWN0b3IKLSAgICogaXMgZXhwb3NlZCBqdXN0IGluIGNhc2UgdGhlIGRlZmF1bHQgcnVsZXMgaW4gdGhlIGZhY3RvcnkgbWV0aG9kCi0gICAqIGZvciBpZGVudGlmeWluZyBwcm9wZXJ0aWVzIGFyZSBpbnN1ZmZpY2llbnQgZm9yIHNvbWUgdXNlCi0gICAqIGNhc2UuPC9wPgotICAgKi8KLSAgcHVibGljIEpQcm9wZXJ0eUltcGwoU3RyaW5nIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIEpNZXRob2QgZ2V0dGVyLAotICAgICAgICAgICAgICAgICAgICAgICBKTWV0aG9kIHNldHRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgSkNsYXNzIHR5cGUpIHsKLSAgICBtTmFtZSA9IG5hbWU7Ci0gICAgbUdldHRlciA9IGdldHRlcjsKLSAgICBtU2V0dGVyID0gc2V0dGVyOwotICAgIG1UeXBlID0gdHlwZTsKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBQdWJsaWMgbWV0aG9kcwotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgSkNsYXNzIHdoaWNoIHJlcHJlc2VudHMgdGhlIHR5cGUgb2YgdGhpcyBwcm9wZXJ0eS4KLSAgICovCi0gIHB1YmxpYyBKQ2xhc3MgZ2V0VHlwZSgpIHsKLSAgICByZXR1cm4gbVR5cGU7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgc2ltcGxlIG5hbWUgb2YgdGhpcyBwcm9wZXJ0eS4gIEZvciBleGFtcGxlLCBmb3IgYQotICAgKiBwcm9wZXJ0eSBtYW5pZmVzdCBieSBnZXRGb28oKSBhbmQgc2V0Rm9vKCksIHRoaXMgd2lsbCByZXR1cm4KLSAgICogJ2ZvbycuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFNpbXBsZU5hbWUoKSB7Ci0gICAgcmV0dXJuIG1OYW1lOwotICB9Ci0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgc2ltcGxlIG5hbWUgb2YgdGhpcyBwcm9wZXJ0eS4gIEZvciBleGFtcGxlLCBmb3IgYQotICAgKiBwcm9wZXJ0eSBtYW5pZmVzdCBieSBnZXRGb28oKSBhbmQgc2V0Rm9vKCksIHRoaXMgd2lsbCByZXR1cm4KLSAgICogJ2ZvbycuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFF1YWxpZmllZE5hbWUoKSB7Ci0gICAgcmV0dXJuIGdldFBhcmVudCgpLmdldFF1YWxpZmllZE5hbWUoKSArICIuIiArIGdldFNpbXBsZU5hbWUoKTsgLy9SRVZJRVcKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgSk1ldGhvZCB3aGljaCByZXByZXNlbnRzIHRoZSBzZXR0ZXIgZm9yIHRoaXMgcHJvcGVydHkuCi0gICAqIFJldHVybnMgbnVsbCBpZiB0aGlzIHByb3BlcnR5IGlzIHJlYWQtb25seS4KLSAgICovCi0gIHB1YmxpYyBKTWV0aG9kIGdldFNldHRlcigpIHsKLSAgICByZXR1cm4gbVNldHRlcjsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgSk1ldGhvZCB3aGljaCByZXByZXNlbnRzIHRoZSBnZXR0ZXIgZm9yIHRoaXMgcHJvcGVydHkuCi0gICAqIFJldHVybnMgbnVsbCBpZiB0aGlzIHByb3BlcnR5IGlzIHdyaXRlLW9ubHkuCi0gICAqLwotICBwdWJsaWMgSk1ldGhvZCBnZXRHZXR0ZXIoKSB7Ci0gICAgcmV0dXJuIG1HZXR0ZXI7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gSkVsZW1lbnQgaW1wbGVtZW50YXRpb24KLQotICAvKioKLSAgICogUmV0dXJucyBhbGwgb2YgdGhlIGFubm90YXRpb25zIG9uIHRoZSBnZXR0ZXIgYW5kL29yIHRoZSBzZXR0ZXIKLSAgICogbWV0aG9kcy4KLSAgICovCi0gIHB1YmxpYyBKQW5ub3RhdGlvbltdIGdldEFubm90YXRpb25zKCkgewotICAgIHJldHVybiBjb21iaW5lKChtR2V0dGVyID09IG51bGwpID8KLSAgICAgICAgICAgIEJhc2VKRWxlbWVudC5OT19BTk5PVEFUSU9OIDogbUdldHRlci5nZXRBbm5vdGF0aW9ucygpLAotICAgICAgICAgICAgKG1TZXR0ZXIgPT0gbnVsbCkgPwotICAgICAgICAgICAgQmFzZUpFbGVtZW50Lk5PX0FOTk9UQVRJT04gOiBtU2V0dGVyLmdldEFubm90YXRpb25zKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYW5ub3RhdGlvbnMgd2l0aCB0aGUgZ2l2ZW4gbmFtZSB0aGF0IGFyZSBmb3VuZCBvbiB0aGlzCi0gICAqIHByb3BlcnR5J3MgZ2V0dGVyIGFuZC9vciBzZXR0ZXIuCi0gICAqLwotICBwdWJsaWMgSkFubm90YXRpb25bXSBnZXRBbm5vdGF0aW9ucyhTdHJpbmcgbmFtZWQpIHsKLSAgICByZXR1cm4gY29tYmluZSgobUdldHRlciA9PSBudWxsKSA/Ci0gICAgICAgICAgICBCYXNlSkVsZW1lbnQuTk9fQU5OT1RBVElPTiA6IG1HZXR0ZXIuZ2V0QW5ub3RhdGlvbnMobmFtZWQpLAotICAgICAgICAgICAgKG1TZXR0ZXIgPT0gbnVsbCkgPwotICAgICAgICAgICAgQmFzZUpFbGVtZW50Lk5PX0FOTk9UQVRJT04gOiBtU2V0dGVyLmdldEFubm90YXRpb25zKG5hbWVkKSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgZmlyc3QgYW5ub3RhdGlvbiB3aXRoIHRoZSBnaXZlbiBuYW1lIHRoYXQgaXMgZm91bmQgb24KLSAgICogdGhpcyBwcm9wZXJ0eSdzIGdldHRlciBhbmQvb3Igc2V0dGVycy4KLSAgICovCi0gIHB1YmxpYyBKQW5ub3RhdGlvbiBnZXRBbm5vdGF0aW9uKFN0cmluZyBuYW1lZCkgewotICAgIC8vIEZJWE1FIHRoaXMgY291bGQgYmUgYSBsb3QgbW9yZSBlZmZpY2llbnQKLSAgICBKQW5ub3RhdGlvbltdIG91dCA9IGdldEFubm90YXRpb25zKG5hbWVkKTsKLSAgICBpZiAob3V0Lmxlbmd0aCA9PSAwKSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIG91dFswXTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgSkNvbW1lbnRbXSBnZXRDb21tZW50cygpIHsKLSAgICByZXR1cm4gY29tYmluZSgobUdldHRlciA9PSBudWxsKSA/Ci0gICAgICAgICAgICBCYXNlSkVsZW1lbnQuTk9fQ09NTUVOVCA6IG1HZXR0ZXIuZ2V0Q29tbWVudHMoKSwKLSAgICAgICAgICAgIChtU2V0dGVyID09IG51bGwpID8KLSAgICAgICAgICAgIEJhc2VKRWxlbWVudC5OT19DT01NRU5UIDogbVNldHRlci5nZXRDb21tZW50cygpKTsKLSAgfQotCi0gIHB1YmxpYyBKRWxlbWVudCBnZXRQYXJlbnQoKSB7Ci0gICAgcmV0dXJuIG1HZXR0ZXIgIT0gbnVsbCA/IG1HZXR0ZXIuZ2V0UGFyZW50KCkgOiBtU2V0dGVyLmdldFBhcmVudCgpOwotICB9Ci0KLSAgcHVibGljIEpTb3VyY2VQb3NpdGlvbiBnZXRTb3VyY2VQb3NpdGlvbigpIHsKLSAgICByZXR1cm4gbUdldHRlciAhPSBudWxsID8KLSAgICAgICAgICAgIG1HZXR0ZXIuZ2V0U291cmNlUG9zaXRpb24oKSA6IG1TZXR0ZXIuZ2V0U291cmNlUG9zaXRpb24oKTsKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBPYmplY3QgaW1wbGVtZW50YXRpb24KLQotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgIHJldHVybiBnZXRRdWFsaWZpZWROYW1lKCk7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gUHJpdmF0ZSBtZXRob2RzCi0KLSAgLyoqCi0gICAqIFJldHVybnMgYW4gYXJyYXkgdGhhdCBpcyB0aGUgdW5pb24gb2YgdGhlIHR3byBhcnJheXMgb2YKLSAgICogYW5vdGF0aW9ucy4KLSAgICovCi0gIHByaXZhdGUgSkFubm90YXRpb25bXSBjb21iaW5lKEpBbm5vdGF0aW9uW10gYSwgSkFubm90YXRpb25bXSBiKSB7Ci0gICAgaWYgKGEubGVuZ3RoID09IDApIHJldHVybiBiOwotICAgIGlmIChiLmxlbmd0aCA9PSAwKSByZXR1cm4gYTsKLSAgICBKQW5ub3RhdGlvbltdIG91dCA9IG5ldyBKQW5ub3RhdGlvblthLmxlbmd0aCArIGIubGVuZ3RoXTsKLSAgICBTeXN0ZW0uYXJyYXljb3B5KGEsIDAsIG91dCwgMCwgYS5sZW5ndGgpOwotICAgIFN5c3RlbS5hcnJheWNvcHkoYiwgMCwgb3V0LCBhLmxlbmd0aCwgYi5sZW5ndGgpOwotICAgIHJldHVybiBvdXQ7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhbiBhcnJheSB0aGF0IGlzIHRoZSB1bmlvbiBvZiB0aGUgdHdvIGFycmF5cyBvZgotICAgKiBhbm90YXRpb25zLgotICAgKi8KLSAgcHJpdmF0ZSBKQ29tbWVudFtdIGNvbWJpbmUoSkNvbW1lbnRbXSBhLCBKQ29tbWVudFtdIGIpIHsKLSAgICBpZiAoYS5sZW5ndGggPT0gMCkgcmV0dXJuIGI7Ci0gICAgaWYgKGIubGVuZ3RoID09IDApIHJldHVybiBhOwotICAgIEpDb21tZW50W10gb3V0ID0gbmV3IEpDb21tZW50W2EubGVuZ3RoICsgYi5sZW5ndGhdOwotICAgIFN5c3RlbS5hcnJheWNvcHkoYSwgMCwgb3V0LCAwLCBhLmxlbmd0aCk7Ci0gICAgU3lzdGVtLmFycmF5Y29weShiLCAwLCBvdXQsIGEubGVuZ3RoLCBiLmxlbmd0aCk7Ci0gICAgcmV0dXJuIG91dDsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL0phbVByaW50ZXIuamF2YSBiL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9KYW1QcmludGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlYzFhN2IuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL0phbVByaW50ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS4qOwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLS8qKgotICogVXRpbGl0eSBjbGFzcyBmb3IgcHJpbnRpbmcgb3V0IGEgSkFNLgotICoKLSAqIEBhdXRob3IgUGF0cmljayBDYWxhaGFuIDxwY2FsQGJlYS5jb20+Ci0gKi8KLXB1YmxpYyBjbGFzcyBKYW1QcmludGVyIHsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gRmFjdG9yeQotCi0gIHB1YmxpYyBzdGF0aWMgSmFtUHJpbnRlciBuZXdJbnN0YW5jZSgpIHsKLSAgICByZXR1cm4gbmV3IEphbVByaW50ZXIoKTsKLSAgfQotCi0gIHByaXZhdGUgSmFtUHJpbnRlcigpIHsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTkRFTlQgPSAiICAiOwotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBQdWJsaWMgbWV0aG9kcwotCi0gIHB1YmxpYyB2b2lkIHByaW50KEpFbGVtZW50IHJvb3QsIFByaW50V3JpdGVyIG91dCkgewotICAgIHByaW50KHJvb3QsIDAsIG91dCk7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gUHJpdmF0ZSBtZXRob2RzCi0KLSAgcHJpdmF0ZSB2b2lkIHByaW50KEpFbGVtZW50IGEsIGludCBpbmRlbnQsIFByaW50V3JpdGVyIG91dCkgewotICAgIGluZGVudChpbmRlbnQsIG91dCk7Ci0gICAgb3V0LnByaW50KCJbIik7Ci0gICAgb3V0LnByaW50KGdldFR5cGVLZXkoYSkpOwotICAgIG91dC5wcmludCgiXSAiKTsKLSAgICBpZiAoYSBpbnN0YW5jZW9mIEpNZXRob2QpIHsKLSAgICAgIG91dC5wcmludCgoKEpNZXRob2QpIGEpLmdldFJldHVyblR5cGUoKS5nZXRGaWVsZERlc2NyaXB0b3IoKSk7Ci0gICAgICBvdXQucHJpbnQoIiAiKTsKLSAgICAgIG91dC5wcmludGxuKGEuZ2V0U2ltcGxlTmFtZSgpKTsKLSAgICB9IGVsc2UgewotICAgICAgb3V0LnByaW50bG4oYS5nZXRTaW1wbGVOYW1lKCkpOwotICAgIH0KLSAgICBpbmRlbnQrKzsKLSAgICAvLyBwcmludCBvdXQgdGhlIGFubm90YXRpb25zCi0gICAgSkFubm90YXRpb25bXSBhdHRzID0gYS5nZXRBbm5vdGF0aW9ucygpOwotICAgIGlmIChhdHRzICE9IG51bGwpIHByaW50KGF0dHMsIGluZGVudCwgb3V0KTsKLSAgICAvLyBub3cgcmVjdXJzaXZlbHkgcHJpbnQgb3V0IHRoZSBjaGlsZHJlbgotICAgIEpFbGVtZW50W10gY2hpbGRyZW4gPSBnZXRDaGlsZHJlbkZvcihhKTsKLSAgICBpZiAoY2hpbGRyZW4gIT0gbnVsbCkgewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgewotICAgICAgICBpZiAoY2hpbGRyZW5baV0gIT0gbnVsbCkgcHJpbnQoY2hpbGRyZW5baV0sIGluZGVudCwgb3V0KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcHJpbnQoSkFubm90YXRpb25bXSBhdHRzLCBpbnQgaW5kZW50LCBQcmludFdyaXRlciBvdXQpIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGluZGVudChpbmRlbnQsIG91dCk7Ci0gICAgICBvdXQucHJpbnQoIjwiKTsKLSAgICAgIG91dC5wcmludChnZXRUeXBlS2V5KGF0dHNbaV0pKTsKLSAgICAgIG91dC5wcmludCgiPiAiKTsKLSAgICAgIG91dC5wcmludChhdHRzW2ldLmdldE5hbWUoKSk7Ci0gICAgICBKQW5ub3RhdGlvbltdIHN1YnMgPSBhdHRzW2ldLmdldEFubm90YXRpb25zKCk7Ci0gICAgICBpZiAoc3Vicy5sZW5ndGggPiAwKSB7Ci0gICAgICAgIG91dC5wcmludGxuKCk7Ci0gICAgICAgIHByaW50KHN1YnMsIGluZGVudCArIDEsIG91dCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBvdXQucHJpbnQoIj0iKTsKLSAgICAgICAgb3V0LnByaW50bG4oYXR0c1tpXS5nZXRTdHJpbmdWYWx1ZSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaW5kZW50KGludCBpbmRlbnQsIFByaW50V3JpdGVyIG91dCkgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5kZW50OyBpKyspIG91dC5wcmludChJTkRFTlQpOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0VHlwZUtleShPYmplY3QgbykgewotICAgIFN0cmluZyB0eXBlID0gby5nZXRDbGFzcygpLmdldE5hbWUoKTsKLSAgICBpbnQgbGFzdERvdCA9IHR5cGUubGFzdEluZGV4T2YoIi4iKTsKLSAgICBpZiAobGFzdERvdCAhPSAtMSAmJiBsYXN0RG90ICsgMSA8IHR5cGUubGVuZ3RoKCkpIHsKLSAgICAgIHR5cGUgPSB0eXBlLnN1YnN0cmluZyhsYXN0RG90ICsgMSk7Ci0gICAgfQotICAgIHJldHVybiB0eXBlOwotICB9Ci0KLQotICAvLyB0aGlzIGlzIHF1aXRlIGdyb3NzLCBidXQgd2UgZG9uJ3Qgd2FudCB0byBleHBvc2UgZ2V0Q2hpbGRyZW4oKSB0bwotICAvLyB0aGUgcHVibGljIGFueSBtb3JlCi0gIHByaXZhdGUgc3RhdGljIEpFbGVtZW50W10gZ2V0Q2hpbGRyZW5Gb3IoSkVsZW1lbnQgcGFyZW50KSB7Ci0gICAgQ29sbGVjdGlvbiBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBKQ2xhc3MpIHsKLSAgICAgIGxpc3QuYWRkQWxsKEFycmF5cy5hc0xpc3QoKChKQ2xhc3MpIHBhcmVudCkuZ2V0RGVjbGFyZWRGaWVsZHMoKSkpOwotICAgICAgbGlzdC5hZGRBbGwoQXJyYXlzLmFzTGlzdCgoKEpDbGFzcykgcGFyZW50KS5nZXREZWNsYXJlZE1ldGhvZHMoKSkpOwotICAgICAgbGlzdC5hZGRBbGwoQXJyYXlzLmFzTGlzdCgoKEpDbGFzcykgcGFyZW50KS5nZXRDb25zdHJ1Y3RvcnMoKSkpOwotICAgICAgbGlzdC5hZGRBbGwoQXJyYXlzLmFzTGlzdCgoKEpDbGFzcykgcGFyZW50KS5nZXRDbGFzc2VzKCkpKTsKLSAgICB9IGVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEpDb25zdHJ1Y3RvcikgewotICAgICAgbGlzdC5hZGRBbGwoQXJyYXlzLmFzTGlzdCgoKEpDb25zdHJ1Y3RvcikgcGFyZW50KS5nZXRQYXJhbWV0ZXJzKCkpKTsKLSAgICB9IGVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEpNZXRob2QpIHsKLSAgICAgIGxpc3QuYWRkQWxsKEFycmF5cy5hc0xpc3QoKChKTWV0aG9kKSBwYXJlbnQpLmdldFBhcmFtZXRlcnMoKSkpOwotICAgIH0KLSAgICBKRWxlbWVudFtdIG91dCA9IG5ldyBKRWxlbWVudFtsaXN0LnNpemUoKV07Ci0gICAgbGlzdC50b0FycmF5KG91dCk7Ci0gICAgcmV0dXJuIG91dDsKLSAgfQotfQotCmRpZmYgLS1naXQgYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvT2JqZWN0SkNsYXNzLmphdmEgYi92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvT2JqZWN0SkNsYXNzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MjI4NjEuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL09iamVjdEpDbGFzcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLkpDbGFzczsKLQotLyoqCi0gKiBTaW5nbGV0b24gSkNsYXNzIGltcGwgZm9yIGphdmEubGFuZy5PYmplY3QuCi0gKgotICogQGF1dGhvciBQYXRyaWNrIENhbGFoYW4gPHBjYWxAYmVhLmNvbT4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIE9iamVjdEpDbGFzcyBleHRlbmRzIEJ1aWx0aW5KQ2xhc3MgewotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBDb25zdGFudHMKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0lNUExFX05BTUUgPSAiT2JqZWN0IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFFVQUxJRklFRF9OQU1FID0gImphdmEubGFuZy5PYmplY3QiOwotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBTaW5nbGV0b24KLQotICAvKioKLSAgICogUmV0dXJucyBhIEpDbGFzcyByZXByZXNlbnRpbmcgdGhlIG5hbWVkIHByaW1pdGl2ZSB0eXBlLiAgVGhlIG5hbWUKLSAgICogcGFyYW1ldGVyIGNhbiBiZSBhIHNpbXBsZSB0eXBlIG5hbWUgKGUuZy4gJ2ludCcpIG9yIGEgZmllbGQKLSAgICogZGVzY3JpcHRvciAoZS5nLiAnSScpLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBKQ2xhc3MgZ2V0SW5zdGFuY2UoKSB7Ci0gICAgcmV0dXJuIElOU1RBTkNFOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSkNsYXNzIElOU1RBTkNFID0gbmV3IE9iamVjdEpDbGFzcygpOwotCi0gIHByaXZhdGUgT2JqZWN0SkNsYXNzKCkgewotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIEpFbGVtZW50IGltcGxlbWVudGF0aW9uCi0KLSAgcHVibGljIFN0cmluZyBnZXRTaW1wbGVOYW1lKCkgewotICAgIHJldHVybiBTSU1QTEVfTkFNRTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UXVhbGlmaWVkTmFtZSgpIHsKLSAgICByZXR1cm4gUVVBTElGSUVEX05BTUU7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZpZWxkRGVzY3JpcHRvcigpIHsKLSAgICByZXR1cm4gUVVBTElGSUVEX05BTUU7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gSkNsYXNzIGltcGxlbWVudGF0aW9uCi0KLSAgcHVibGljIGJvb2xlYW4gaXNBc3NpZ25hYmxlRnJvbShKQ2xhc3MgYykgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNPYmplY3QoKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9QcmltaXRpdmVKQ2xhc3MuamF2YSBiL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9QcmltaXRpdmVKQ2xhc3MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDlhNjgyZi4uMDAwMDAwMAotLS0gYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvUHJpbWl0aXZlSkNsYXNzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uSkNsYXNzOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotLyoqCi0gKiBKQ2xhc3MgaW1wbCBmb3IgcHJpbWl0aXZlIHR5cGUgc2luZ2xldG9ucy4KLSAqCi0gKiBAYXV0aG9yIFBhdHJpY2sgQ2FsYWhhbiA8cGNhbEBiZWEuY29tPgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgUHJpbWl0aXZlSkNsYXNzIGV4dGVuZHMgQnVpbHRpbkpDbGFzcyB7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIENvbnN0YW50cwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgT2JqZWN0W11bXSBQUklNSVRJVkVTID0gewotICAgIC8vIE5hbWUgICAgICAgRkQgICAgIENsYXNzCi0gICAgeyJpbnQiLCAiSSIsIGludC5jbGFzc30sCi0gICAgeyJsb25nIiwgIkoiLCBsb25nLmNsYXNzfSwKLSAgICB7ImJvb2xlYW4iLCAiWiIsIGJvb2xlYW4uY2xhc3N9LAotICAgIHsic2hvcnQiLCAiUyIsIHNob3J0LmNsYXNzfSwKLSAgICB7ImJ5dGUiLCAiQiIsIGJ5dGUuY2xhc3N9LAotICAgIHsiY2hhciIsICJDIiwgY2hhci5jbGFzc30sCi0gICAgeyJmbG9hdCIsICJGIiwgZmxvYXQuY2xhc3N9LAotICAgIHsiZG91YmxlIiwgIkQiLCBkb3VibGUuY2xhc3N9LAotICB9OwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIE1hcCBOQU1FX1RPX0NMQVNTLCBGRF9UT19DTEFTUzsKLQotICBzdGF0aWMgewotICAgIE5BTUVfVE9fQ0xBU1MgPSBuZXcgSGFzaE1hcCgpOwotICAgIEZEX1RPX0NMQVNTID0gbmV3IEhhc2hNYXAoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFBSSU1JVElWRVMubGVuZ3RoOyBpKyspIHsKLSAgICAgIFByaW1pdGl2ZUpDbGFzcyBjID0gbmV3IFByaW1pdGl2ZUpDbGFzcwotICAgICAgICAgICAgICAoKFN0cmluZykgUFJJTUlUSVZFU1tpXVswXSwKLSAgICAgICAgICAgICAgICAgICAgICAoU3RyaW5nKSBQUklNSVRJVkVTW2ldWzFdLAotICAgICAgICAgICAgICAgICAgICAgIChDbGFzcykgUFJJTUlUSVZFU1tpXVsyXSk7Ci0gICAgICBOQU1FX1RPX0NMQVNTLnB1dChjLmdldFF1YWxpZmllZE5hbWUoKSwgYyk7Ci0gICAgICBGRF9UT19DTEFTUy5wdXQoYy5nZXRGaWVsZERlc2NyaXB0b3IoKSwgYyk7Ci0gICAgfQotICB9OwotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBGYWN0b3J5IG1ldGhvZHMKLQotICAvKioKLSAgICogUmV0dXJucyBhIEpDbGFzcyByZXByZXNlbnRpbmcgdGhlIG5hbWVkIHByaW1pdGl2ZSB0eXBlLiAgVGhlIG5hbWUKLSAgICogcGFyYW1ldGVyIGNhbiBiZSBhIHNpbXBsZSB0eXBlIG5hbWUgKGUuZy4gJ2ludCcpIG9yIGEgZmllbGQKLSAgICogZGVzY3JpcHRvciAoZS5nLiAnSScpLiAgUmV0dXJucyBudWxsIGlmIHRoZSBwYXJhbWV0ZXIgZG9lcyBub3QKLSAgICogbmFtZSBhIHByaW1pdGl2ZSB0eXBlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBKQ2xhc3MgZ2V0UHJpbWl0aXZlQ2xhc3NGb3JOYW1lKFN0cmluZyBuYW1lZCkgewotICAgIEpDbGFzcyBvdXQgPSAoSkNsYXNzKSBOQU1FX1RPX0NMQVNTLmdldChuYW1lZCk7Ci0gICAgaWYgKG91dCAhPSBudWxsKSByZXR1cm4gb3V0OwotICAgIHJldHVybiAoSkNsYXNzKSBGRF9UT19DTEFTUy5nZXQobmFtZWQpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBKQ2xhc3MgcmVwcmVzZW50aW5nIHRoZSBnaXZlbiBwcmltaXRpdmUgQ2xhc3MuICBSZXR1cm5zCi0gICAqIG51bGwgaWYgdGhlIHBhcmFtZXRlciBpcyBub3QgYSBwcmltaXRpdmUgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEpDbGFzcyBnZXRQcmltaXRpdmVDbGFzcyhDbGFzcyBjbGF6eikgewotICAgIHJldHVybiBnZXRQcmltaXRpdmVDbGFzc0Zvck5hbWUoY2xhenouZ2V0TmFtZSgpKTsKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBTdGF0aWMgdXRpbGl0aWVzCi0KLSAgLyoqCi0gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbmFtZWQgdHlwZSBpcyBhIHByaW1pdGl2ZS4gIFRoZSBwYXJhbWV0ZXIgY2FuCi0gICAqIGJlIGEgc2ltcGxlIHR5cGUgbmFtZSAoZS5nLiAnaW50Jykgb3IgYSBmaWVsZCBkZXNjcmlwdG9yCi0gICAqIChlLmcuICdJJykuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNQcmltaXRpdmUoU3RyaW5nIG5hbWUpIHsKLSAgICByZXR1cm4gKE5BTUVfVE9fQ0xBU1MuZ2V0KG5hbWUpICE9IG51bGwgfHwKLSAgICAgICAgICAgIEZEX1RPX0NMQVNTLmdldChuYW1lKSAhPSBudWxsKTsKLSAgfQotCi0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFZhcmlhYmxlcwotCi0gIHByaXZhdGUgU3RyaW5nIG1OYW1lOwotICBwcml2YXRlIFN0cmluZyBtRkQ7Ci0gIHByaXZhdGUgQ2xhc3MgbUNsYXNzOwotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBDb25zdHJ1Y3RvcnMKLQotICBwcml2YXRlIFByaW1pdGl2ZUpDbGFzcyhTdHJpbmcgbmFtZSwgU3RyaW5nIGZkLCBDbGFzcyB0eXBlKSB7Ci0gICAgbUNsYXNzID0gdHlwZTsKLSAgICBtTmFtZSA9IG5hbWU7Ci0gICAgbUZEID0gZmQ7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gSkVsZW1lbnQgaW1wbGVtZW50YXRpb24KLQotICBwdWJsaWMgU3RyaW5nIGdldFNpbXBsZU5hbWUoKSB7Ci0gICAgcmV0dXJuIG1OYW1lOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRRdWFsaWZpZWROYW1lKCkgewotICAgIHJldHVybiBtTmFtZTsKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBKQ2xhc3MgaW1wbGVtZW50YXRpb24KLQotICBwdWJsaWMgU3RyaW5nIGdldEZpZWxkRGVzY3JpcHRvcigpIHsKLSAgICByZXR1cm4gbUZEOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNBc3NpZ25hYmxlRnJvbShKQ2xhc3MgYykgewotICAgIHJldHVybiBjLmVxdWFscyh0aGlzKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzUHJpbWl0aXZlKCkgewotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvVm9pZEpDbGFzcy5qYXZhIGIvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL1ZvaWRKQ2xhc3MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU1OTA2My4uMDAwMDAwMAotLS0gYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvVm9pZEpDbGFzcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uaW50ZXJuYWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLkpDbGFzczsKLQotLyoqCi0gKiBTaW5nbGV0b24gSkNsYXNzIGltcGwgZm9yIHRoZSB2b2lkIHR5cGUuCi0gKgotICogQGF1dGhvciBQYXRyaWNrIENhbGFoYW4gPHBjYWxAYmVhLmNvbT4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFZvaWRKQ2xhc3MgZXh0ZW5kcyBCdWlsdGluSkNsYXNzIHsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gQ29uc3RhbnRzCi0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNJTVBMRV9OQU1FID0gInZvaWQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUVVBTElGSUVEX05BTUUgPSAidm9pZCI7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFNpbmdsZXRvbgotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgSkNsYXNzIHJlcHJlc2VudGluZyB0aGUgbmFtZWQgcHJpbWl0aXZlIHR5cGUuICBUaGUgbmFtZQotICAgKiBwYXJhbWV0ZXIgY2FuIGJlIGEgc2ltcGxlIHR5cGUgbmFtZSAoZS5nLiAnaW50Jykgb3IgYSBmaWVsZAotICAgKiBkZXNjcmlwdG9yIChlLmcuICdJJykuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIEpDbGFzcyBnZXRJbnN0YW5jZSgpIHsKLSAgICByZXR1cm4gSU5TVEFOQ0U7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBKQ2xhc3MgSU5TVEFOQ0UgPSBuZXcgVm9pZEpDbGFzcygpOwotCi0gIHByaXZhdGUgVm9pZEpDbGFzcygpIHsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZvaWQoU3RyaW5nIGZkKSB7Ci0gICAgcmV0dXJuIGZkLmVxdWFscyhTSU1QTEVfTkFNRSk7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gSkVsZW1lbnQgaW1wbGVtZW50YXRpb24KLQotICBwdWJsaWMgU3RyaW5nIGdldFNpbXBsZU5hbWUoKSB7Ci0gICAgcmV0dXJuIFNJTVBMRV9OQU1FOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRRdWFsaWZpZWROYW1lKCkgewotICAgIHJldHVybiBRVUFMSUZJRURfTkFNRTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0RmllbGREZXNjcmlwdG9yKCkgewotICAgIHJldHVybiBRVUFMSUZJRURfTkFNRTsKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBKQ2xhc3MgaW1wbGVtZW50YXRpb24KLQotICBwdWJsaWMgYm9vbGVhbiBpc1ZvaWQoKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0Fzc2lnbmFibGVGcm9tKEpDbGFzcyBjKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvamF2YWRvYy9KREFubm90YXRpb24uamF2YSBiL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9qYXZhZG9jL0pEQW5ub3RhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzQ1OGNjLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9qYXZhZG9jL0pEQW5ub3RhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uaW50ZXJuYWwuamF2YWRvYzsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uSkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5KU291cmNlUG9zaXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5pbnRlcm5hbC5CYXNlSkFubm90YXRpb247Ci0KLS8qKgotICogSmF2YWRvYy1iYWNrZWQgaW1wbGVtZW50YXRpb24gb2Ygb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5Bbm5vdGF0aW9uCi0gKgotICogQGF1dGhvciBQYXRyaWNrIENhbGFoYW4gPHBjYWxAYmVhLmNvbT4KLSAqLwotCi0vKnBhY2thZ2UqLyBmaW5hbCBjbGFzcyBKREFubm90YXRpb24gZXh0ZW5kcyBCYXNlSkFubm90YXRpb24gewotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBWYXJpYWJsZXMKLQotICBwcml2YXRlIGNvbS5zdW4uamF2YWRvYy5UYWcgbVRhZzsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gQ29uc3RydWN0b3JzCi0KLSAgcHVibGljIEpEQW5ub3RhdGlvbihKRWxlbWVudCBwYXJlbnQsIGNvbS5zdW4uamF2YWRvYy5UYWcgdGFnKSB7Ci0gICAgdGhpcyhwYXJlbnQsIHRhZywgdGFnLm5hbWUoKSwgdGFnLnRleHQoKSk7Ci0gIH0KLQotICBwdWJsaWMgSkRBbm5vdGF0aW9uKEpFbGVtZW50IHBhcmVudCwgY29tLnN1bi5qYXZhZG9jLlBhcmFtVGFnIHRhZykgewotICAgIHRoaXMocGFyZW50LCB0YWcsIHRhZy5uYW1lKCksIHRhZy5wYXJhbWV0ZXJDb21tZW50KCkpOyAvL1JFVklFVz8KLSAgfQotCi0gIHByaXZhdGUgSkRBbm5vdGF0aW9uKEpFbGVtZW50IHBhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29tLnN1bi5qYXZhZG9jLlRhZyB0YWcsCi0gICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWUpIHsKLSAgICBzdXBlcihwYXJlbnQsIHRyaW1BdFNpZ24obmFtZSksIHZhbHVlKTsKLSAgICBtVGFnID0gdGFnOwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIEpFbGVtZW50IGltcGwKLQotICAvLyB3ZSB3YW50IHRvIGxhemlseSBpbnN0YW50aWF0ZSB0aGVzZSBzaW5jZSB0aGV5IHByb2JhYmx5IHdvbid0IGdldAotICAvLyB1c2VkIG9mdGVuLgotCi0gIHB1YmxpYyBKU291cmNlUG9zaXRpb24gZ2V0U291cmNlUG9zaXRpb24oKSB7Ci0gICAgcmV0dXJuIG5ldyBKRFNvdXJjZVBvc2l0aW9uKG1UYWcucG9zaXRpb24oKSk7Ci0gICAgLy9GSVhNRSBidXQgc3RpbGwgd2FudCBsYXp5IGluc3RhbnRpYXRpb24KLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBQcml2YXRlIG1ldGhvZHMKLQotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdHJpbUF0U2lnbihTdHJpbmcgbmFtZSkgewotICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PSAnQCcgJiYgbmFtZS5sZW5ndGgoKSA+IDEpIHsKLSAgICAgIHJldHVybiBuYW1lLnN1YnN0cmluZygxKS50cmltKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBuYW1lOwotICAgIH0KLSAgfQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvamF2YWRvYy9KRENsYXNzLmphdmEgYi92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvamF2YWRvYy9KRENsYXNzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyZDQ0OTMuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL2phdmFkb2MvSkRDbGFzcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEyICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uaW50ZXJuYWwuamF2YWRvYzsKLQotaW1wb3J0IGNvbS5zdW4uamF2YWRvYy4qOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uKjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLmludGVybmFsLkpDbGFzc0hlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLmludGVybmFsLkpQcm9wZXJ0eUltcGw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0KLS8qKgotICogamF2YWRvYy1iYWNrZWQgaW1wbGVtZW50YXRpb24gb2YgSkNsYXNzLgotICoKLSAqIEBhdXRob3IgUGF0cmljayBDYWxhaGFuIDxwY2FsQGJlYS5jb20+Ci0gKi8KLQotLypwYWNrYWdlKi8gZmluYWwgY2xhc3MgSkRDbGFzcyBleHRlbmRzIEpETWVtYmVyIGltcGxlbWVudHMgSkNsYXNzIHsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gVmFyaWFibGVzCi0KLSAgcHJpdmF0ZSBDbGFzc0RvYyBtQ2xhc3M7Ci0gIHByaXZhdGUgSkNsYXNzSGVscGVyIG1IZWxwZXI7Ci0gIHByaXZhdGUgTWFwIG1XcmFwcGVyTWFwID0gbmV3IEhhc2hNYXAoKTsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gQ29uc3RydWN0b3JzCi0KLSAgLyoqCi0gICAqIENvbnN0cnVjdHMgYSBKRENsYXNzIGZvciB0aGUgZ2l2ZW4gQ2xhc3NEb2MgaW4gdGhlIGdpdmVuIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgSkRDbGFzcyhDbGFzc0RvYyBjLCBKQ2xhc3NMb2FkZXIgbG9hZGVyKSB7Ci0gICAgc3VwZXIoYywgbG9hZGVyKTsKLSAgICBtQ2xhc3MgPSBjOwotICAgIG1IZWxwZXIgPSBuZXcgSkNsYXNzSGVscGVyKHRoaXMpOwotICAgIC8vIGFzc2VydCB0aGF0IGl0IGlzbid0IGFuIGFycmF5IHR5cGUuCi0gICAgU3RyaW5nIGRpbSA9IGMuZGltZW5zaW9uKCk7Ci0gICAgaWYgKGRpbSAhPSBudWxsICYmIGRpbS5sZW5ndGgoKSA+IDApIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkludGVybmFsIEVycm9yOiBjYW5ub3QgdXNlIEpEQ2xhc3MgIiArCi0gICAgICAgICAgICAgICJ0byByZXByZXNlbnQgYXJyYXkgdHlwZXMuIik7Ci0gICAgfQotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIEpFbGVtZW50IGltcGxlbWVudGF0aW9uCi0KLSAgcHVibGljIEpFbGVtZW50IGdldFBhcmVudCgpIHsKLSAgICByZXR1cm4gbUhlbHBlci5nZXRQYXJlbnQoKTsKLSAgfQotCi0gIHB1YmxpYyBKRWxlbWVudFtdIGdldENoaWxkcmVuKCkgewotICAgIHJldHVybiBtSGVscGVyLmdldENoaWxkcmVuKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNpbXBsZU5hbWUoKSB7Ci0gICAgU3RyaW5nIG91dCA9IGdldFF1YWxpZmllZE5hbWUoKTsKLSAgICBpbnQgbGFzdERvdCA9IG91dC5sYXN0SW5kZXhPZignLicpOwotICAgIHJldHVybiAobGFzdERvdCA9PSAtMSkgPyBvdXQgOiBvdXQuc3Vic3RyaW5nKGxhc3REb3QgKyAxKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UXVhbGlmaWVkTmFtZSgpIHsKLSAgICByZXR1cm4gbUNsYXNzLnF1YWxpZmllZE5hbWUoKTsKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBKQ2xhc3MgaW1wbGVtZW50YXRpb24KLQotICBwdWJsaWMgSkNsYXNzTG9hZGVyIGdldENsYXNzTG9hZGVyKCkgewotICAgIHJldHVybiBtTG9hZGVyOwotICB9Ci0KLSAgcHVibGljIEpDbGFzcyBmb3JOYW1lKFN0cmluZyBmZCkgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24gewotICAgIHJldHVybiBtTG9hZGVyLmxvYWRDbGFzcyhmZCk7Ci0gIH0KLQotICBwdWJsaWMgSkNsYXNzIGdldFN1cGVyY2xhc3MoKSB7Ci0gICAgaWYgKGlzT2JqZWN0KCkgfHwgaXNJbnRlcmZhY2UoKSB8fCBpc1ByaW1pdGl2ZSgpKSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIEpEQ2xhc3NMb2FkZXIuZ2V0Q2xhc3NTYWZlbHkobUNsYXNzLnN1cGVyY2xhc3MoKSwgbUxvYWRlcik7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIEpDbGFzc1tdIGdldEludGVyZmFjZXMoKSB7Ci0gICAgcmV0dXJuIGdldENsYXNzZXMobUNsYXNzLmludGVyZmFjZXMoKSwgbUxvYWRlcik7Ci0gIH0KLQotICBwdWJsaWMgSkZpZWxkW10gZ2V0RmllbGRzKCkgewotICAgIHJldHVybiBtSGVscGVyLmdldEFsbEZpZWxkcygpOwotICB9Ci0KLSAgcHVibGljIEpGaWVsZFtdIGdldERlY2xhcmVkRmllbGRzKCkgewotICAgIHJldHVybiBnZXRGaWVsZHMobUNsYXNzLmZpZWxkcygpKTsKLSAgfQotCi0gIHB1YmxpYyBKQ29uc3RydWN0b3JbXSBnZXRDb25zdHJ1Y3RvcnMoKSB7Ci0gICAgcmV0dXJuIGdldENvbnN0cnVjdG9ycyhtQ2xhc3MuY29uc3RydWN0b3JzKCkpOwotICB9Ci0KLSAgcHVibGljIEpNZXRob2RbXSBnZXRNZXRob2RzKCkgewotICAgIHJldHVybiBtSGVscGVyLmdldEFsbE1ldGhvZHMoKTsKLSAgfQotCi0gIHB1YmxpYyBKTWV0aG9kW10gZ2V0RGVjbGFyZWRNZXRob2RzKCkgewotICAgIHJldHVybiBnZXRNZXRob2RzKG1DbGFzcy5tZXRob2RzKCkpOwotICB9Ci0KLSAgcHVibGljIEpQcm9wZXJ0eVtdIGdldFByb3BlcnRpZXMoKSB7Ci0gICAgcmV0dXJuIEpQcm9wZXJ0eUltcGwuZ2V0UHJvcGVydGllcyh0aGlzKTsKLSAgfQotCi0gIHB1YmxpYyBKUGFja2FnZSBnZXRDb250YWluaW5nUGFja2FnZSgpIHsKLSAgICByZXR1cm4gbUxvYWRlci5nZXRQYWNrYWdlKG1DbGFzcy5jb250YWluaW5nUGFja2FnZSgpLm5hbWUoKSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0ludGVyZmFjZSgpIHsKLSAgICByZXR1cm4gbUNsYXNzLmlzSW50ZXJmYWNlKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0Fic3RyYWN0KCkgewotICAgIHJldHVybiBtQ2xhc3MuaXNBYnN0cmFjdCgpOwotICB9Ci0KLSAgcHVibGljIEpDbGFzc1tdIGdldENsYXNzZXMoKSB7Ci0gICAgcmV0dXJuIGdldENsYXNzZXMobUNsYXNzLmlubmVyQ2xhc3NlcygpLCBtTG9hZGVyKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzQXNzaWduYWJsZUZyb20oSkNsYXNzIGMpIHsKLSAgICByZXR1cm4gbUhlbHBlci5pc0Fzc2lnbmFibGVGcm9tKGMpOwotICB9Ci0KLQotICBwdWJsaWMgU3RyaW5nIGdldEZpZWxkRGVzY3JpcHRvcigpIHsKLSAgICAvLyB0ZWNobmljYWxseSwgd2Ugc2h1bGQgYmUgYWJsZSB0byBzYWZlbHkganVzdCByZXR1cm4KLSAgICAvLyBtQ2xhc3MucXVhbGlmaWVkTmFtZSgpLCBzaW5jZSB0aGlzIGlzIG5ldmVyIGFuIGFycmF5IHR5cGUKLSAgICByZXR1cm4gSkRDbGFzc0xvYWRlci5nZXRGaWVsZERlc2NyaXB0b3JGb3IobUNsYXNzKTsKLSAgfQotCi0gIC8vIHRoZXNlIGNhbiBuZXZlciBhcHBseSBiZWNhdXNlIHdlIGhhdmUgYnVpbHRpbiBjbGFzc2VzIHRvIGhhbmRsZQotICAvLyB0aGVzZSBjYXNlcwotCi0gIHB1YmxpYyBib29sZWFuIGlzUHJpbWl0aXZlKCkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzVm9pZCgpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc09iamVjdCgpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0FycmF5KCkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBKQ2xhc3MgZ2V0QXJyYXlDb21wb25lbnRUeXBlKCkgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRBcnJheURpbWVuc2lvbnMoKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gT2JqZWN0IGltcGxlbWVudGF0aW9uCi0KLSAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvKSB7Ci0gICAgaWYgKG8gaW5zdGFuY2VvZiBKQ2xhc3MpIHsKLSAgICAgIHJldHVybiAoKEpDbGFzcykgbykuZ2V0RmllbGREZXNjcmlwdG9yKCkuZXF1YWxzKGdldEZpZWxkRGVzY3JpcHRvcigpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKLSAgICByZXR1cm4gZ2V0RmllbGREZXNjcmlwdG9yKCkuaGFzaENvZGUoKTsKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBQcml2YXRlIG1ldGhvZHMKLQotICBwcml2YXRlIEpGaWVsZFtdIGdldEZpZWxkcyhGaWVsZERvY1tdIGZpZWxkRG9jcykgewotICAgIGlmIChmaWVsZERvY3MubGVuZ3RoID09IDApIHJldHVybiBOT19GSUVMRDsKLSAgICBKRmllbGRbXSBvdXQgPSBuZXcgSkZpZWxkW2ZpZWxkRG9jcy5sZW5ndGhdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGREb2NzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBvdXRbaV0gPSBnZXRGaWVsZChmaWVsZERvY3NbaV0pOwotICAgIH0KLSAgICByZXR1cm4gb3V0OwotICB9Ci0KLSAgcHJpdmF0ZSBKRmllbGQgZ2V0RmllbGQoRmllbGREb2MgeCkgewotICAgIEpGaWVsZCBvdXQgPSAoSkZpZWxkKSBtV3JhcHBlck1hcC5nZXQoeCk7Ci0gICAgaWYgKG91dCA9PSBudWxsKSB7Ci0gICAgICBvdXQgPSBuZXcgSkRGaWVsZCh4LCBtTG9hZGVyKTsKLSAgICAgIG1XcmFwcGVyTWFwLnB1dCh4LCBvdXQpOwotICAgIH0KLSAgICByZXR1cm4gb3V0OwotICB9Ci0KLQotICBwcml2YXRlIEpNZXRob2QgZ2V0TWV0aG9kKE1ldGhvZERvYyB4KSB7Ci0gICAgSk1ldGhvZCBvdXQgPSAoSk1ldGhvZCkgbVdyYXBwZXJNYXAuZ2V0KHgpOwotICAgIGlmIChvdXQgPT0gbnVsbCkgewotICAgICAgb3V0ID0gbmV3IEpETWV0aG9kKHgsIG1Mb2FkZXIpOwotICAgICAgbVdyYXBwZXJNYXAucHV0KHgsIG91dCk7Ci0gICAgfQotICAgIHJldHVybiBvdXQ7Ci0gIH0KLQotICBwcml2YXRlIEpNZXRob2RbXSBnZXRNZXRob2RzKE1ldGhvZERvY1tdIG1ldGhvZERvY3MpIHsKLSAgICBpZiAobWV0aG9kRG9jcy5sZW5ndGggPT0gMCkgcmV0dXJuIE5PX01FVEhPRDsKLSAgICBKTWV0aG9kW10gb3V0ID0gbmV3IEpNZXRob2RbbWV0aG9kRG9jcy5sZW5ndGhdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWV0aG9kRG9jcy5sZW5ndGg7IGkrKykgewotICAgICAgb3V0W2ldID0gZ2V0TWV0aG9kKG1ldGhvZERvY3NbaV0pOwotICAgIH0KLSAgICByZXR1cm4gb3V0OwotICB9Ci0KLSAgcHJpdmF0ZSBKQ29uc3RydWN0b3IgZ2V0Q29uc3RydWN0b3IoQ29uc3RydWN0b3JEb2MgeCkgewotICAgIEpDb25zdHJ1Y3RvciBvdXQgPSAoSkNvbnN0cnVjdG9yKSBtV3JhcHBlck1hcC5nZXQoeCk7Ci0gICAgaWYgKG91dCA9PSBudWxsKSB7Ci0gICAgICBvdXQgPSBuZXcgSkRDb25zdHJ1Y3Rvcih4LCBtTG9hZGVyKTsKLSAgICAgIG1XcmFwcGVyTWFwLnB1dCh4LCBvdXQpOwotICAgIH0KLSAgICByZXR1cm4gb3V0OwotICB9Ci0KLSAgcHJpdmF0ZSBKQ29uc3RydWN0b3JbXSBnZXRDb25zdHJ1Y3RvcnMoQ29uc3RydWN0b3JEb2NbXSBkb2NzKSB7Ci0gICAgaWYgKGRvY3MubGVuZ3RoID09IDApIHJldHVybiBOT19DT05TVFJVQ1RPUjsKLSAgICBKQ29uc3RydWN0b3JbXSBvdXQgPSBuZXcgSkNvbnN0cnVjdG9yW2RvY3MubGVuZ3RoXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRvY3MubGVuZ3RoOyBpKyspIHsKLSAgICAgIG91dFtpXSA9IGdldENvbnN0cnVjdG9yKGRvY3NbaV0pOwotICAgIH0KLSAgICByZXR1cm4gb3V0OwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFBhY2thZ2UgdXRpbGl0eSBtZXRob2RzCi0KLSAgLy8gIC8qcGFja2FnZSovIHN0YXRpYwotCi0gIC8qcGFja2FnZSovCi0gIHN0YXRpYyBKQ2xhc3NbXSBnZXRDbGFzc2VzKENsYXNzRG9jW10gZG9jcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkNsYXNzTG9hZGVyIGxvYWRlcikgewotICAgIGlmIChkb2NzID09IG51bGwpIHJldHVybiBOT19DTEFTUzsKLSAgICBKQ2xhc3NbXSBvdXQgPSBuZXcgSkNsYXNzW2RvY3MubGVuZ3RoXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG91dC5sZW5ndGg7IGkrKykgewotICAgICAgb3V0W2ldID0gSkRDbGFzc0xvYWRlci5nZXRDbGFzc1NhZmVseShkb2NzW2ldLCBsb2FkZXIpOwotICAgICAgLy9SRVZJRVcgcXRuIG9rPwotICAgIH0KLSAgICByZXR1cm4gb3V0OwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9qYXZhZG9jL0pEQ2xhc3NMb2FkZXIuamF2YSBiL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9qYXZhZG9jL0pEQ2xhc3NMb2FkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkyYjg5Yi4uMDAwMDAwMAotLS0gYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvamF2YWRvYy9KRENsYXNzTG9hZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5pbnRlcm5hbC5qYXZhZG9jOwotCi1pbXBvcnQgY29tLnN1bi5qYXZhZG9jLkNsYXNzRG9jOwotaW1wb3J0IGNvbS5zdW4uamF2YWRvYy5Sb290RG9jOwotaW1wb3J0IGNvbS5zdW4uamF2YWRvYy5UeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uKjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLmludGVybmFsLkFycmF5SkNsYXNzOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uaW50ZXJuYWwuSlBhY2thZ2VJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uaW50ZXJuYWwuUHJpbWl0aXZlSkNsYXNzOwotCi1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLQotLyoqCi0gKiA8cD5qYXZhZG9jLWJhY2tlZCBpbXBsZW1lbnRhdGlvbiBvZiBKQ2xhc3NMb2FkZXIuCi0gKgotICogQGF1dGhvciBQYXRyaWNrIENhbGFoYW4gPHBjYWxAYmVhLmNvbT4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIEpEQ2xhc3NMb2FkZXIgaW1wbGVtZW50cyBKQ2xhc3NMb2FkZXIgewotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gVmFyaWFibGVzCi0KLSAgcHJpdmF0ZSBNYXAgbU5hbWUyUGFja2FnZSA9IG5ldyBIYXNoTWFwKCk7Ci0gIHByaXZhdGUgTWFwIG1GZDJDbGFzcyA9IG5ldyBIYXNoTWFwKCk7Ci0gIHByaXZhdGUgSkFubm90YXRpb25Mb2FkZXIgbUFubm90YXRpb25Mb2FkZXIgPSBudWxsOy8vRklYTUUKLSAgcHJpdmF0ZSBKQ2xhc3NMb2FkZXIgbVBhcmVudExvYWRlcjsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gQ29uc3RydWN0b3IKLQotICBwdWJsaWMgSkRDbGFzc0xvYWRlcihSb290RG9jIGRvYywgSkNsYXNzTG9hZGVyIGxvYWRlcikgewotICAgIENsYXNzRG9jW10gYyA9IGRvYy5jbGFzc2VzKCk7Ci0gICAgbVBhcmVudExvYWRlciA9IChsb2FkZXIgIT0gbnVsbCkgPyBsb2FkZXIgOgotICAgICAgICAgICAgSkZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5nZXRTeXN0ZW1DbGFzc0xvYWRlcigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYy5sZW5ndGg7IGkrKykgewotICAgICAgLy9SRVZJRVcga2luZGEgYmFkIHRvIGJlIHBhc3NpbmcgcmVmZXJlbmNlcyB0byBvdXJzZWxmIGFyb3VuZCBpbgotICAgICAgLy90aGUgY29uc3RydWN0b3IuICBJIHRoaW5rIGl0J3Mgb2sgaGVyZSwgdGhvdWdoLiAgTm8/Ci0gICAgICBKRENsYXNzIGNsYXp6ID0gbmV3IEpEQ2xhc3MoY1tpXSwgdGhpcyk7Ci0gICAgICBtRmQyQ2xhc3MucHV0KGNsYXp6LmdldEZpZWxkRGVzY3JpcHRvcigpLCBjbGF6eik7Ci0gICAgfQotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIEpDbGFzc0xvYWRlciBpbXBsZW1lbnRhdGlvbgotCi0gIHB1YmxpYyBKQ2xhc3NMb2FkZXIgZ2V0UGFyZW50KCkgewotICAgIHJldHVybiBtUGFyZW50TG9hZGVyOwotICB9Ci0KLSAgcHVibGljIEpDbGFzcyBsb2FkQ2xhc3MoU3RyaW5nIGZkKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgZmQgPSBmZC50cmltKCk7Ly9SRVZJRVcgaXMgdGhpcyBwYXJhbm9pZD8KLSAgICBpZiAoZmQuc3RhcnRzV2l0aCgiWyIpKSB7Ci0gICAgICByZXR1cm4gQXJyYXlKQ2xhc3MuY3JlYXRlQ2xhc3NGb3IoZmQsIHRoaXMpOwotICAgIH0gZWxzZSB7Ci0gICAgICBKQ2xhc3Mgb3V0ID0gKEpDbGFzcykgbUZkMkNsYXNzLmdldChmZCk7Ci0gICAgICByZXR1cm4gKG91dCAhPSBudWxsKSA/IG91dCA6IG1QYXJlbnRMb2FkZXIubG9hZENsYXNzKGZkKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgSkFubm90YXRpb25Mb2FkZXIgZ2V0QW5ub3RhdGlvbkxvYWRlcigpIHsKLSAgICByZXR1cm4gbUFubm90YXRpb25Mb2FkZXI7Ci0gIH0KLQotICBwdWJsaWMgSlBhY2thZ2UgZ2V0UGFja2FnZShTdHJpbmcgbmFtZWQpIHsKLSAgICBKUGFja2FnZSBvdXQgPSAoSlBhY2thZ2UpIG1OYW1lMlBhY2thZ2UuZ2V0KG5hbWVkKTsKLSAgICBpZiAob3V0ID09IG51bGwpIHsKLSAgICAgIG91dCA9IG5ldyBKUGFja2FnZUltcGwobmFtZWQpOwotICAgICAgbU5hbWUyUGFja2FnZS5wdXQobmFtZWQsIG91dCk7Ci0gICAgfQotICAgIHJldHVybiBvdXQ7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gUHVibGljIG1ldGhvZHMKLQotICAvKioKLSAgICogUmV0dXJucyBhbiB1bm1vZGlmaWFibGUgY29sbGVjdGlvbiBjb250YWluaW5nIHRoZSBKQ2xhc3NlcyB3aGljaAotICAgKiBoYXZlIGJlZW4gcmVzb2x2ZWQgYnkgdGhpcyBKQ2xhc3NMb2FkZXIuCi0gICAqLwotICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRSZXNvbHZlZENsYXNzZXMoKSB7Ci0gICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUNvbGxlY3Rpb24obUZkMkNsYXNzLnZhbHVlcygpKTsKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBTdGF0aWMgdXRpbGl0aWVzCi0KLSAgLypwYWNrYWdlKi8KLSAgc3RhdGljIEpDbGFzcyBnZXRDbGFzc1NhZmVseShUeXBlIHQsIEpDbGFzc0xvYWRlciBsb2FkZXIpIHsKLSAgICByZXR1cm4gb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5pbnRlcm5hbC5CYXNlSkVsZW1lbnQuCi0gICAgICAgICAgICBnZXRDbGFzc1NhZmVseShnZXRGaWVsZERlc2NyaXB0b3JGb3IodCksIGxvYWRlcik7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBhIGNsYXNzZmlsZS1zdHlsZSBmaWVsZCBkZXNjcmlwdG9yIGZvciB0aGUgZ2l2ZW4gdHlwZS4KLSAgICogVGhpcyBoYXMgdG8gYmUgY2FsbGVkIHRvIGdldCBhIG5hbWUgZm9yIGEgamF2YWRvYyB0eXBlIHRoYXQgY2FuCi0gICAqIGJlIHVzZWQgd2l0aCBDbGFzcy5mb3JOYW1lKCksIEpSb290Q29udGV4dC5nZXRDbGFzcygpLCBvcgotICAgKiBKQ2xhc3MuZm9yTmFtZSgpLgotICAgKi8KLSAgLypwYWNrYWdlKi8KLSAgc3RhdGljIFN0cmluZyBnZXRGaWVsZERlc2NyaXB0b3JGb3IoVHlwZSB0KSB7Ci0gICAgU3RyaW5nIGRpbSA9IHQuZGltZW5zaW9uKCk7Ci0gICAgaWYgKGRpbSA9PSBudWxsIHx8IGRpbS5sZW5ndGgoKSA9PSAwKSB7Ci0gICAgICByZXR1cm4gdC5xdWFsaWZpZWRUeXBlTmFtZSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICBTdHJpbmdXcml0ZXIgb3V0ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgICAgZm9yIChpbnQgaSA9IDAsIGlMID0gZGltLmxlbmd0aCgpIC8gMjsgaSA8IGlMOyBpKyspIG91dC53cml0ZSgiWyIpOwotICAgICAgSkNsYXNzIHByaW1DbGFzcyA9Ci0gICAgICAgICAgICAgIFByaW1pdGl2ZUpDbGFzcy5nZXRQcmltaXRpdmVDbGFzc0Zvck5hbWUodC5xdWFsaWZpZWRUeXBlTmFtZSgpKTsKLSAgICAgIGlmIChwcmltQ2xhc3MgIT0gbnVsbCkgeyAvL2kuZS4gaWYgcHJpbWl0aXZlCi0gICAgICAgIG91dC53cml0ZShwcmltQ2xhc3MuZ2V0RmllbGREZXNjcmlwdG9yKCkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgb3V0LndyaXRlKCJMIik7Ci0gICAgICAgIG91dC53cml0ZSh0LnF1YWxpZmllZFR5cGVOYW1lKCkpOwotICAgICAgICBvdXQud3JpdGUoIjsiKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBvdXQudG9TdHJpbmcoKTsKLSAgICB9Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL2phdmFkb2MvSkRDbGFzc0xvYWRlckZhY3RvcnkuamF2YSBiL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9qYXZhZG9jL0pEQ2xhc3NMb2FkZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5MDEwOWUuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL2phdmFkb2MvSkRDbGFzc0xvYWRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLmludGVybmFsLmphdmFkb2M7Ci0KLWltcG9ydCBjb20uc3VuLmphdmFkb2MuRG9jbGV0OwotaW1wb3J0IGNvbS5zdW4uamF2YWRvYy5Sb290RG9jOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uSkFubm90YXRpb25Mb2FkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5KQ2xhc3NMb2FkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5KRmlsZVNldDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLmludGVybmFsLkpGaWxlU2V0SW1wbDsKLQotaW1wb3J0IGphdmEuaW8uKjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIDxwPlRoaXMgY2xhc3MgZG9lcyBpdHMgYmVzdCB0byBlbmNhcHN1bGF0ZSBhbmQgbWFrZSB0aHJlYWRzYWZlIHRoZQotICogbmFzdGluZXNzIHRoYXQgaXMgdGhlIGphdmFkb2MgJ2ludm9jYXRpb24nIEFQSS48L3A+Ci0gKgotICogQGF1dGhvciBQYXRyaWNrIENhbGFoYW4gPHBjYWxAYmVhLmNvbT4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIEpEQ2xhc3NMb2FkZXJGYWN0b3J5IGV4dGVuZHMgRG9jbGV0IHsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gVmFyaWFibGVzCi0KLSAgcHJpdmF0ZSBzdGF0aWMgUm9vdERvYyBtQ3VycmVudFJvb3QgPSBudWxsOwotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBTaW5nbGV0b24KLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBKRENsYXNzTG9hZGVyRmFjdG9yeSBJTlNUQU5DRSA9Ci0gICAgICAgICAgbmV3IEpEQ2xhc3NMb2FkZXJGYWN0b3J5KCk7Ci0KLSAgcHJpdmF0ZSBKRENsYXNzTG9hZGVyRmFjdG9yeSgpIHt9Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBKRENsYXNzTG9hZGVyRmFjdG9yeSBnZXRJbnN0YW5jZSgpIHsKLSAgICByZXR1cm4gSU5TVEFOQ0U7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gUHVibGljIG1ldGhvZHMKLQotICAvKioKLSAgICogUnVucyBqYXZhZG9jIG9uIHRoZSBnaXZlbiBzb3VyY2UgZGlyZWN0b3J5IGFuZCByZXR1cm5zIGEgSkRSb290Ci0gICAqIHdoaWNoIHdyYXBzIHRoZSBqYXZhZG9jIHZpZXcgb2YgdGhlIHNvdXJjZSBmaWxlcyB0aGVyZS4KLSAgICovCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgSkRDbGFzc0xvYWRlciBjcmVhdGUoSkZpbGVTZXQgZmlsZXNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQ2xhc3NMb2FkZXIgcGFyZW50TG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpBbm5vdGF0aW9uTG9hZGVyIGFubkxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmludFdyaXRlciBvdXQpCi0gICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBGaWxlTm90Rm91bmRFeGNlcHRpb24gewotICAgIExpc3QgYXJnTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICBhcmdMaXN0LmFkZCgiLXByaXZhdGUiKTsKLQotICAgIFN0cmluZyBjcCA9ICgoSkZpbGVTZXRJbXBsKWZpbGVzZXQpLmdldENsYXNzcGF0aCgpOwotICAgIGlmIChjcCAhPSBudWxsKSB7Ci0gICAgICBhcmdMaXN0LmFkZCgiLWRvY2xldHBhdGgiKTsKLSAgICAgIGFyZ0xpc3QuYWRkKGNwKTsKLSAgICAgIGFyZ0xpc3QuYWRkKCItY2xhc3NwYXRoIik7Ci0gICAgICBhcmdMaXN0LmFkZChjcCk7Ci0gICAgfQotICAgIEZpbGVbXSBmaWxlcyA9IGZpbGVzZXQuZ2V0RmlsZXMoKTsKLSAgICBpZiAoZmlsZXMubGVuZ3RoID09IDApIHsKLSAgICAgIHRocm93IG5ldyBGaWxlTm90Rm91bmRFeGNlcHRpb24oIk5vIGlucHV0IGZpbGVzIGZvdW5kLiIpOwotICAgIH0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBhcmdMaXN0LmFkZChmaWxlc1tpXS50b1N0cmluZygpKTsKLSAgICAgIGlmIChvdXQgIT0gbnVsbCkgb3V0LnByaW50bG4oZmlsZXNbaV0udG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIFN0cmluZ1tdIGFyZ3MgPSBuZXcgU3RyaW5nW2FyZ0xpc3Quc2l6ZSgpXTsKLSAgICBhcmdMaXN0LnRvQXJyYXkoYXJncyk7Ci0gICAgLy8gY3JlYXRlIGEgYnVmZmVyIHRvIGNhcHR1cmUgdGhlIGNyYXAgamF2YWRvYyBzcGl0cyBvdXQuICB3ZSdsbAotICAgIC8vIGp1c3QgaWdub3JlIGl0IHVubGVzcyBzb21ldGhpbmcgZ29lcyB3cm9uZwotICAgIFN0cmluZ1dyaXRlciBzcGV3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgIFByaW50V3JpdGVyIHNwZXdXcml0ZXIgPSBuZXcgUHJpbnRXcml0ZXIoc3Bldyk7Ci0gICAgaW50IHJlc3VsdCA9Ci0gICAgICAgICAgICBjb20uc3VuLnRvb2xzLmphdmFkb2MuTWFpbi5leGVjdXRlKCJKQU0iLAotICAgICAgICAgICAgICAgICAgICBzcGV3V3JpdGVyLAotICAgICAgICAgICAgICAgICAgICBzcGV3V3JpdGVyLAotICAgICAgICAgICAgICAgICAgICBzcGV3V3JpdGVyLAotICAgICAgICAgICAgICAgICAgICB0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICBhcmdzKTsKLSAgICBpZiAocmVzdWx0ICE9IDAgfHwgbUN1cnJlbnRSb290ID09IG51bGwpIHsKLSAgICAgIHNwZXdXcml0ZXIuZmx1c2goKTsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVbmtub3duIGphdmFkb2MgcHJvYmxlbTogcmVzdWx0PSIgKyByZXN1bHQgKwotICAgICAgICAgICAgICAiLCBtQ3VycmVudFJvb3Q9IiArIG1DdXJyZW50Um9vdCArICI6XG4iICsKLSAgICAgICAgICAgICAgc3Bldy50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgSkRDbGFzc0xvYWRlciBsb2FkZXIgPSBuZXcgSkRDbGFzc0xvYWRlcihtQ3VycmVudFJvb3QsIHBhcmVudExvYWRlcik7Ci0gICAgbUN1cnJlbnRSb290ID0gbnVsbDsKLSAgICByZXR1cm4gbG9hZGVyOwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIERvY2xldCAnaW1wbGVtZW50YXRpb24nCi0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIHN0YXJ0KFJvb3REb2Mgcm9vdCkgewotICAgIGlmIChtQ3VycmVudFJvb3QgIT0gbnVsbCkgeyAgLy8gc2hvdWxkIG5vdCBiZSBwb3NzaWJsZQotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotICAgIH0KLSAgICBtQ3VycmVudFJvb3QgPSByb290OwotICAgIHJldHVybiB0cnVlOwotICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvamF2YWRvYy9KRENvbW1lbnQuamF2YSBiL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9qYXZhZG9jL0pEQ29tbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGVlNjg4Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9qYXZhZG9jL0pEQ29tbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5pbnRlcm5hbC5qYXZhZG9jOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5KQ29tbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLkpTb3VyY2VQb3NpdGlvbjsKLQotLyoqCi0gKiBKYXZhZG9jLWJhY2tlZCBpbXBsZW1lbnRhdGlvbiBvZiBDb21tZW50LgotICoKLSAqIEBhdXRob3IgUGF0cmljayBDYWxhaGFuIDxwY2FsQGJlYS5jb20+Ci0gKi8KLQotLypwYWNrYWdlKi8gZmluYWwgY2xhc3MgSkRDb21tZW50IGltcGxlbWVudHMgSkNvbW1lbnQgewotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gVmFyaWFibGVzCi0KLSAgcHJpdmF0ZSBKU291cmNlUG9zaXRpb24gbVBvc2l0aW9uID0gbnVsbDsKLSAgcHJpdmF0ZSBTdHJpbmcgbVRleHQgPSBudWxsOwotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBDb25zdHJ1Y3RvcnMKLQotICBwdWJsaWMgSkRDb21tZW50KFN0cmluZyB0ZXh0KSB7Ci0gICAgbVRleHQgPSB0ZXh0OwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIENvbW1lbnQgaW1wbGVtZW50YXRpb24KLQotICBwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0gICAgcmV0dXJuIG1UZXh0OwotICB9Ci0KLSAgcHVibGljIEpTb3VyY2VQb3NpdGlvbiBnZXRTb3VyY2VQb3NpdGlvbigpIHsKLSAgICByZXR1cm4gbVBvc2l0aW9uOwotICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvamF2YWRvYy9KRENvbnN0cnVjdG9yLmphdmEgYi92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvamF2YWRvYy9KRENvbnN0cnVjdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1MDZhNTUuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL2phdmFkb2MvSkRDb25zdHJ1Y3Rvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5pbnRlcm5hbC5qYXZhZG9jOwotCi1pbXBvcnQgY29tLnN1bi5qYXZhZG9jLkNvbnN0cnVjdG9yRG9jOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uSkNsYXNzTG9hZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uSkNvbnN0cnVjdG9yOwotCi0vKioKLSAqIGphdmFkb2MtYmFja2VkIGltcGxlbWVudGF0aW9uIG9mIEpDbGFzcy4KLSAqCi0gKiBAYXV0aG9yIFBhdHJpY2sgQ2FsYWhhbiA8cGNhbEBiZWEuY29tPgotICovCi0KLS8qcGFja2FnZSovIGZpbmFsIGNsYXNzIEpEQ29uc3RydWN0b3IgZXh0ZW5kcyBKREV4ZWN1dGFibGVNZW1iZXIKLSAgICAgICAgaW1wbGVtZW50cyBKQ29uc3RydWN0b3IgewotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBDb25zdHJ1Y3RvcnMKLQotICBwdWJsaWMgSkRDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvckRvYyBmLCBKQ2xhc3NMb2FkZXIgbG9hZGVyKSB7Ci0gICAgc3VwZXIoZiwgbG9hZGVyKTsKLSAgfQotfQotCi0KZGlmZiAtLWdpdCBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9qYXZhZG9jL0pERXhlY3V0YWJsZU1lbWJlci5qYXZhIGIvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL2phdmFkb2MvSkRFeGVjdXRhYmxlTWVtYmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5MTQ3NjcuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL2phdmFkb2MvSkRFeGVjdXRhYmxlTWVtYmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5pbnRlcm5hbC5qYXZhZG9jOwotCi1pbXBvcnQgY29tLnN1bi5qYXZhZG9jLkV4ZWN1dGFibGVNZW1iZXJEb2M7Ci1pbXBvcnQgY29tLnN1bi5qYXZhZG9jLlBhcmFtVGFnOwotaW1wb3J0IGNvbS5zdW4uamF2YWRvYy5QYXJhbWV0ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5KQ2xhc3M7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5KQ2xhc3NMb2FkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5KRWxlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLkpQYXJhbWV0ZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotLyoqCi0gKiBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBKRENvbnN0cnVjdG9yIGFuZCBKRE1ldGhvZC4KLSAqCi0gKiBAYXV0aG9yIFBhdHJpY2sgQ2FsYWhhbiA8cGNhbEBiZWEuY29tPgotICovCi0vKnBhY2thZ2UqLyBhYnN0cmFjdCBjbGFzcyBKREV4ZWN1dGFibGVNZW1iZXIgZXh0ZW5kcyBKRE1lbWJlciB7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFZhcmlhYmxlcwotCi0gIHByaXZhdGUgRXhlY3V0YWJsZU1lbWJlckRvYyBtTWVtYmVyOwotICBwcml2YXRlIEpQYXJhbWV0ZXJbXSBtUGFyYW1ldGVycyA9IG51bGw7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIENvbnN0cnVjdG9ycwotCi0gIC8qKgotICAgKgotICAgKi8KLSAgcHJvdGVjdGVkIEpERXhlY3V0YWJsZU1lbWJlcihFeGVjdXRhYmxlTWVtYmVyRG9jIG0sIEpDbGFzc0xvYWRlciBsb2FkZXIpIHsKLSAgICBzdXBlcihtLCBsb2FkZXIpOwotICAgIG1NZW1iZXIgPSBtOwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIEpFbGVtZW50IGltcGxlbWVudGF0aW9uCi0KLSAgcHVibGljIEpFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0gICAgcmV0dXJuIGdldFBhcmFtZXRlcnMoKTsKLSAgfQotCi0gIC8qKgotICAgKiBPdmVycmlkZSB0aGlzIHNvIHRoYXQgd2UgY2FuIGV4Y2x1ZGUgQHBhcmFtIHRhZ3MgLSB0aGVzZSBnZXQgaHVuZAotICAgKiBvbiB0aGUgSlBhcmFtZXRlcnMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBnZXRMb2NhbEFubm90YXRpb25zKENvbGxlY3Rpb24gb3V0KSB7Ci0gICAgY29tLnN1bi5qYXZhZG9jLlRhZ1tdIHRhZ3MgPSBtTWVtYmVyLnRhZ3MoKTsKLSAgICBpZiAodGFncyA9PSBudWxsIHx8IHRhZ3MubGVuZ3RoID09IDApIHJldHVybjsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRhZ3MubGVuZ3RoOyBpKyspIHsKLSAgICAgIGlmICghKHRhZ3NbaV0gaW5zdGFuY2VvZiBQYXJhbVRhZykpIHsKLSAgICAgICAgb3V0LmFkZChuZXcgSkRBbm5vdGF0aW9uKHRoaXMsIHRhZ3NbaV0pKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gSkV4ZWN1dGFibGVNZW1iZXIgaW1wbGVtZW50YXRpb24KLQotICBwdWJsaWMgSlBhcmFtZXRlcltdIGdldFBhcmFtZXRlcnMoKSB7Ci0gICAgaWYgKG1QYXJhbWV0ZXJzID09IG51bGwpIHsKLSAgICAgIFBhcmFtZXRlcltdIHBhcmFtcyA9IG1NZW1iZXIucGFyYW1ldGVycygpOwotICAgICAgaWYgKHBhcmFtcyA9PSBudWxsIHx8IHBhcmFtcy5sZW5ndGggPT0gMCkgewotICAgICAgICBtUGFyYW1ldGVycyA9IE5PX1BBUkFNRVRFUjsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG1QYXJhbWV0ZXJzID0gbmV3IEpEUGFyYW1ldGVyW3BhcmFtcy5sZW5ndGhdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgIG1QYXJhbWV0ZXJzW2ldID0gbmV3IEpEUGFyYW1ldGVyKHBhcmFtc1tpXSwKLSAgICAgICAgICAgICAgICAgIHRoaXMsCi0gICAgICAgICAgICAgICAgICBtTG9hZGVyKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbVBhcmFtZXRlcnM7Ci0gIH0KLQotICBwdWJsaWMgSkNsYXNzW10gZ2V0RXhjZXB0aW9uVHlwZXMoKSB7Ci0gICAgcmV0dXJuIEpEQ2xhc3MuZ2V0Q2xhc3NlcyhtTWVtYmVyLnRocm93bkV4Y2VwdGlvbnMoKSwgbUxvYWRlcik7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gUGFja2FnZSBtZXRob2RzCi0KLSAgLy8gdGhpcyBpcyBoZXJlIGZvciB0aGUgYmVuZWZpdCBvZiBKRFBhcmFtZXRlci5nZXRMb2NhbEFubm90YXRpb25zKCkKLSAgLypwYWNrYWdlKi8KLSAgRXhlY3V0YWJsZU1lbWJlckRvYyBnZXRNZW1iZXIoKSB7Ci0gICAgcmV0dXJuIG1NZW1iZXI7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL2phdmFkb2MvSkRGaWVsZC5qYXZhIGIvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL2phdmFkb2MvSkRGaWVsZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjZiNzY0Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9qYXZhZG9jL0pERmllbGQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uaW50ZXJuYWwuamF2YWRvYzsKLQotaW1wb3J0IGNvbS5zdW4uamF2YWRvYy5GaWVsZERvYzsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLkpDbGFzczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLkpDbGFzc0xvYWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLkpGaWVsZDsKLQotLyoqCi0gKiBqYXZhZG9jLWJhY2tlZCBpbXBsZW1lbnRhdGlvbiBvZiBKQ2xhc3MuCi0gKgotICogQGF1dGhvciBQYXRyaWNrIENhbGFoYW4gPHBjYWxAYmVhLmNvbT4KLSAqLwotLypwYWNrYWdlKi8gZmluYWwgY2xhc3MgSkRGaWVsZCBleHRlbmRzIEpETWVtYmVyIGltcGxlbWVudHMgSkZpZWxkIHsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gVmFyaWFibGVzCi0KLSAgcHJpdmF0ZSBGaWVsZERvYyBtRmllbGQ7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIENvbnN0cnVjdG9ycwotCi0gIHB1YmxpYyBKREZpZWxkKEZpZWxkRG9jIGYsIEpDbGFzc0xvYWRlciBsb2FkZXIpIHsKLSAgICBzdXBlcihmLCBsb2FkZXIpOwotICAgIG1GaWVsZCA9IGY7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gSkZpZWxkIGltcGxlbWVudGF0aW9uCi0KLSAgcHVibGljIEpDbGFzcyBnZXRUeXBlKCkgewotICAgIHJldHVybiBKRENsYXNzTG9hZGVyLmdldENsYXNzU2FmZWx5KG1GaWVsZC50eXBlKCksIG1Mb2FkZXIpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNUcmFuc2llbnQoKSB7Ci0gICAgcmV0dXJuIG1GaWVsZC5pc1RyYW5zaWVudCgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNWb2xhdGlsZSgpIHsKLSAgICByZXR1cm4gbUZpZWxkLmlzVm9sYXRpbGUoKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvamF2YWRvYy9KRE1lbWJlci5qYXZhIGIvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL2phdmFkb2MvSkRNZW1iZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgyZjAxZi4uMDAwMDAwMAotLS0gYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvamF2YWRvYy9KRE1lbWJlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uaW50ZXJuYWwuamF2YWRvYzsKLQotaW1wb3J0IGNvbS5zdW4uamF2YWRvYy5Qcm9ncmFtRWxlbWVudERvYzsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLio7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5pbnRlcm5hbC5CYXNlSkVsZW1lbnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotLyoqCi0gKiBqYXZhZG9jLWJhY2tlZCBpbXBsZW1lbnRhdGlvbiBvZiBKTWVtYmVyLgotICoKLSAqIEBhdXRob3IgUGF0cmljayBDYWxhaGFuIDxwY2FsQGJlYS5jb20+Ci0gKi8KLS8qcGFja2FnZSovIGFic3RyYWN0IGNsYXNzIEpETWVtYmVyIGV4dGVuZHMgQmFzZUpFbGVtZW50IGltcGxlbWVudHMgSk1lbWJlciB7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFZhcmlhYmxlcwotCi0gIHByb3RlY3RlZCBKQ2xhc3NMb2FkZXIgbUxvYWRlcjsKLSAgcHJpdmF0ZSBQcm9ncmFtRWxlbWVudERvYyBtUEU7Ci0gIHByaXZhdGUgSlNvdXJjZVBvc2l0aW9uIG1Qb3NpdGlvbiA9IG51bGw7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIENvbnN0cnVjdG9ycwotCi0gIHByb3RlY3RlZCBKRE1lbWJlcihQcm9ncmFtRWxlbWVudERvYyBwZSwgSkNsYXNzTG9hZGVyIGxvYWRlcikgewotICAgIG1Mb2FkZXIgPSBsb2FkZXI7Ci0gICAgbVBFID0gcGU7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gSkVsZW1lbnQgaW1wbGVtZW50YXRpb24KLQotICBwdWJsaWMgU3RyaW5nIGdldFNpbXBsZU5hbWUoKSB7Ci0gICAgcmV0dXJuIG1QRS5uYW1lKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFF1YWxpZmllZE5hbWUoKSB7Ci0gICAgcmV0dXJuIG1QRS5xdWFsaWZpZWROYW1lKCk7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gUGFydGlhbCBCYXNlSkVsZW1lbnQgaW1wbGVtZW50YXRpb24KLQotICBwcm90ZWN0ZWQgdm9pZCBnZXRMb2NhbEFubm90YXRpb25zKENvbGxlY3Rpb24gb3V0KSB7Ci0gICAgY29tLnN1bi5qYXZhZG9jLlRhZ1tdIHRhZ3MgPSBtUEUudGFncygpOwotICAgIGlmICh0YWdzICE9IG51bGwpIHsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGFncy5sZW5ndGg7IGkrKykgewotICAgICAgICBvdXQuYWRkKG5ldyBKREFubm90YXRpb24odGhpcywgdGFnc1tpXSkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGdldExvY2FsQ29tbWVudHMoQ29sbGVjdGlvbiBvdXQpIHsKLSAgICBTdHJpbmcgdHh0ID0gbVBFLmNvbW1lbnRUZXh0KCk7Ci0gICAgaWYgKHR4dCA9PSBudWxsKSByZXR1cm47Ci0gICAgdHh0ID0gdHh0LnRyaW0oKTsKLSAgICBpZiAodHh0Lmxlbmd0aCgpID09IDApIHJldHVybjsKLSAgICBvdXQuYWRkKG5ldyBKRENvbW1lbnQobVBFLmNvbW1lbnRUZXh0KCkpKTsKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBKRWxlbWVudCBpbXBsZW1lbnRhdGlvbiAtIG92ZXJyaWRkZW4gYnkgc29tZQotCi0gIHB1YmxpYyBKRWxlbWVudCBnZXRQYXJlbnQoKSB7Ci0gICAgcmV0dXJuIEpEQ2xhc3NMb2FkZXIuZ2V0Q2xhc3NTYWZlbHkobVBFLmNvbnRhaW5pbmdDbGFzcygpLCBtTG9hZGVyKTsKLSAgfQotCi0gIHB1YmxpYyBKRWxlbWVudFtdIGdldENoaWxkcmVuKCkgewotICAgIHJldHVybiBudWxsOwotICB9IC8vRklYTUUKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gSk1lbWJlciBpbXBsZW1lbnRhdGlvbgotCi0gIHB1YmxpYyBpbnQgZ2V0TW9kaWZpZXJzKCkgewotICAgIHJldHVybiBtUEUubW9kaWZpZXJTcGVjaWZpZXIoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzUGFja2FnZVByaXZhdGUoKSB7Ci0gICAgcmV0dXJuIG1QRS5pc1BhY2thZ2VQcml2YXRlKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1Byb3RlY3RlZCgpIHsKLSAgICByZXR1cm4gbVBFLmlzUHJvdGVjdGVkKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1B1YmxpYygpIHsKLSAgICByZXR1cm4gbVBFLmlzUHVibGljKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1ByaXZhdGUoKSB7Ci0gICAgcmV0dXJuIG1QRS5pc1ByaXZhdGUoKTsKLSAgfQotCi0gIHB1YmxpYyBKU291cmNlUG9zaXRpb24gZ2V0U291cmNlUG9zaXRpb24oKSB7Ci0gICAgaWYgKG1Qb3NpdGlvbiA9PSBudWxsKSB7Ci0gICAgICBtUG9zaXRpb24gPSBuZXcgSkRTb3VyY2VQb3NpdGlvbihtUEUucG9zaXRpb24oKSk7Ci0gICAgfQotICAgIHJldHVybiBtUG9zaXRpb247Ci0gIH0KLQotICBwdWJsaWMgSkNsYXNzIGdldENvbnRhaW5pbmdDbGFzcygpIHsKLSAgICByZXR1cm4gSkRDbGFzc0xvYWRlci5nZXRDbGFzc1NhZmVseShtUEUuY29udGFpbmluZ0NsYXNzKCksIG1Mb2FkZXIpOwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIEltcGxzIGluaGVydGllZCBieSBKTWV0aG9kLCBKQ2xhc3MgZXQgYWwuICBKYXZhZG9jIGV4cG9zZXMgdGhlc2UKLSAgLy8gYXR0cmlidXRlcyBvbiBhYnN0cmFjdGlvbnMgd2hlcmUgdGhleSBkb24ndCBtYWtlIHNlbnNlCi0gIC8vIChlLmcuIGNvbnN0cnVjdG9ycyksIGJ1dCB3ZSdsbCB0YWtlIGFkdmFudGFnZSBvZiB0aGF0IGhlcmUKLQotICBwdWJsaWMgYm9vbGVhbiBpc0ZpbmFsKCkgewotICAgIHJldHVybiBtUEUuaXNGaW5hbCgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNTdGF0aWMoKSB7Ci0gICAgcmV0dXJuIG1QRS5pc1N0YXRpYygpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9qYXZhZG9jL0pETWV0aG9kLmphdmEgYi92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvamF2YWRvYy9KRE1ldGhvZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGY5M2Y3Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9qYXZhZG9jL0pETWV0aG9kLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5pbnRlcm5hbC5qYXZhZG9jOwotCi1pbXBvcnQgY29tLnN1bi5qYXZhZG9jLk1ldGhvZERvYzsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLkpDbGFzczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLkpDbGFzc0xvYWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLkpNZXRob2Q7Ci0KLS8qKgotICogamF2YWRvYy1iYWNrZWQgaW1wbGVtZW50YXRpb24gb2YgSkNsYXNzLgotICoKLSAqIEBhdXRob3IgUGF0cmljayBDYWxhaGFuIDxwY2FsQGJlYS5jb20+Ci0gKi8KLS8qcGFja2FnZSovIGZpbmFsIGNsYXNzIEpETWV0aG9kIGV4dGVuZHMgSkRFeGVjdXRhYmxlTWVtYmVyCi0gICAgICAgIGltcGxlbWVudHMgSk1ldGhvZCB7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFZhcmlhYmxlcwotCi0gIHByaXZhdGUgTWV0aG9kRG9jIG1NZXRob2Q7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIENvbnN0cnVjdG9ycwotCi0gIHB1YmxpYyBKRE1ldGhvZChNZXRob2REb2MgZiwgSkNsYXNzTG9hZGVyIGxvYWRlcikgewotICAgIHN1cGVyKGYsIGxvYWRlcik7Ci0gICAgbU1ldGhvZCA9IGY7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gSk1ldGhvZCBpbXBsZW1lbnRhdGlvbgotCi0gIHB1YmxpYyBKQ2xhc3MgZ2V0UmV0dXJuVHlwZSgpIHsKLSAgICByZXR1cm4gSkRDbGFzc0xvYWRlci5nZXRDbGFzc1NhZmVseShtTWV0aG9kLnJldHVyblR5cGUoKSwgbUxvYWRlcik7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1N5bmNocm9uaXplZCgpIHsKLSAgICByZXR1cm4gbU1ldGhvZC5pc1N5bmNocm9uaXplZCgpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNOYXRpdmUoKSB7Ci0gICAgcmV0dXJuIG1NZXRob2QuaXNOYXRpdmUoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzQWJzdHJhY3QoKSB7Ci0gICAgcmV0dXJuIG1NZXRob2QuaXNBYnN0cmFjdCgpOwotICB9Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL2phdmFkb2MvSkRQYXJhbWV0ZXIuamF2YSBiL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9qYXZhZG9jL0pEUGFyYW1ldGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiZjI1MzIuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL2phdmFkb2MvSkRQYXJhbWV0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLmludGVybmFsLmphdmFkb2M7Ci0KLWltcG9ydCBjb20uc3VuLmphdmFkb2MuUGFyYW1UYWc7Ci1pbXBvcnQgY29tLnN1bi5qYXZhZG9jLlBhcmFtZXRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLio7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5pbnRlcm5hbC5CYXNlSkVsZW1lbnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIEphdmFkb2MtYmFja2VkIGltcGxlbWVudGF0aW9uIG9mIEpQYXJhbWV0ZXIuCi0gKgotICogQGF1dGhvciBQYXRyaWNrIENhbGFoYW4gPHBjYWxAYmVhLmNvbT4KLSAqLwotLypwYWNrYWdlKi8gZmluYWwgY2xhc3MgSkRQYXJhbWV0ZXIgZXh0ZW5kcyBCYXNlSkVsZW1lbnQKLSAgICAgICAgaW1wbGVtZW50cyBKUGFyYW1ldGVyIHsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gVmFyaWFibGVzCi0KLSAgcHJpdmF0ZSBQYXJhbWV0ZXIgbVBhcmFtZXRlcjsKLSAgcHJpdmF0ZSBKREV4ZWN1dGFibGVNZW1iZXIgbVBhcmVudDsKLSAgcHJpdmF0ZSBKQ2xhc3NMb2FkZXIgbUxvYWRlcjsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gQ29uc3RydWN0b3JzCi0KLSAgcHVibGljIEpEUGFyYW1ldGVyKFBhcmFtZXRlciBwLAotICAgICAgICAgICAgICAgICAgICAgSkRFeGVjdXRhYmxlTWVtYmVyIHBhcmVudCwKLSAgICAgICAgICAgICAgICAgICAgIEpDbGFzc0xvYWRlciBsb2FkZXIpIHsKLSAgICBtUGFyYW1ldGVyID0gcDsKLSAgICBtUGFyZW50ID0gcGFyZW50OwotICAgIG1Mb2FkZXIgPSBsb2FkZXI7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gSkVsZW1lbnQgaW1wbGVtZW50YXRpb24KLQotICBwdWJsaWMgSkVsZW1lbnQgZ2V0UGFyZW50KCkgewotICAgIHJldHVybiBtUGFyZW50OwotICB9Ci0KLSAgcHVibGljIEpFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFNpbXBsZU5hbWUoKSB7Ci0gICAgcmV0dXJuIG1QYXJhbWV0ZXIubmFtZSgpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRRdWFsaWZpZWROYW1lKCkgewotICAgIHJldHVybiBtUGFyYW1ldGVyLm5hbWUoKTsKLSAgfQotCi0gIHB1YmxpYyBKU291cmNlUG9zaXRpb24gZ2V0U291cmNlUG9zaXRpb24oKSB7Ci0gICAgcmV0dXJuIG1QYXJlbnQuZ2V0U291cmNlUG9zaXRpb24oKTsgLy9jbG9zZSBlbm91Z2gKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBCYXNlSkVsZW1lbnQgaW1wbGVtZW50YXRpb24KLQotICBwcm90ZWN0ZWQgdm9pZCBnZXRMb2NhbEFubm90YXRpb25zKENvbGxlY3Rpb24gb3V0KSB7Ci0gICAgUGFyYW1UYWdbXSB0YWdzID0gbVBhcmVudC5nZXRNZW1iZXIoKS5wYXJhbVRhZ3MoKTsKLSAgICBpZiAodGFncyA9PSBudWxsIHx8IHRhZ3MubGVuZ3RoID09IDApIHJldHVybjsKLSAgICB0YWdzID0gZ2V0UGFyYW1UYWdzRm9yKHRhZ3MsIG1QYXJhbWV0ZXIpOwotICAgIGlmICh0YWdzID09IG51bGwgfHwgdGFncy5sZW5ndGggPT0gMCkgcmV0dXJuOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGFncy5sZW5ndGg7IGkrKykgewotICAgICAgb3V0LmFkZChuZXcgSkRBbm5vdGF0aW9uKHRoaXMsIHRhZ3NbaV0pKTsKLSAgICB9Ci0gIH0KLQotICAvLyBqYXZhZG9jIGRvZXNuJ3QgcmVjb2duaXplIEBwYXJhbSBjb21tZW50cywgdW5mb3J0dW5hdGVseS4gIEZJWE1FCi0gIC8vIHdlIGNvdWxkIGJlIGNsZXZlciBhbmQgZmlndXJlIHRoZW0gb3V0IG91cnNlbHZlcywgaSBzdXBwb3NlLgotICBwcm90ZWN0ZWQgdm9pZCBnZXRMb2NhbENvbW1lbnRzKENvbGxlY3Rpb24gb3V0KSB7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gSlBhcmFtZXRlciBpbXBsZW1lbnRhdGlvbgotCi0gIHB1YmxpYyBKQ2xhc3MgZ2V0VHlwZSgpIHsKLSAgICByZXR1cm4gSkRDbGFzc0xvYWRlci5nZXRDbGFzc1NhZmVseShtUGFyYW1ldGVyLnR5cGUoKSwgbUxvYWRlcik7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gUHJpdmF0ZSBtZXRob2RzCi0KLSAgLyoqCi0gICAqIEdpdmVuIGEgc2V0IG9mIFBhcmFtVGFncywgcmV0dXJucyB0aG9zZSB3aGljaCBhcHBseSB0byB0aGUgZ2l2ZW4KLSAgICogcGFyYW1ldGVyLgotICAgKi8KLSAgcHJpdmF0ZSBQYXJhbVRhZ1tdIGdldFBhcmFtVGFnc0ZvcihQYXJhbVRhZ1tdIGFsbCwgUGFyYW1ldGVyIHApIHsKLSAgICBMaXN0IGxpc3QgPSBudWxsOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWxsLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBpZiAoYWxsW2ldLnBhcmFtZXRlck5hbWUoKS5lcXVhbHMocC5uYW1lKCkpKSB7Ci0gICAgICAgIGlmIChsaXN0ID09IG51bGwpIGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIGxpc3QuYWRkKGFsbFtpXSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChsaXN0ID09IG51bGwpIHJldHVybiBudWxsOwotICAgIFBhcmFtVGFnW10gb3V0ID0gbmV3IFBhcmFtVGFnW2xpc3Quc2l6ZSgpXTsKLSAgICBsaXN0LnRvQXJyYXkob3V0KTsKLSAgICByZXR1cm4gb3V0OwotICB9Ci0KLX0KLQotCmRpZmYgLS1naXQgYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvamF2YWRvYy9KRFNvdXJjZVBvc2l0aW9uLmphdmEgYi92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvamF2YWRvYy9KRFNvdXJjZVBvc2l0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmZjI4MGUuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL2phdmFkb2MvSkRTb3VyY2VQb3NpdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5pbnRlcm5hbC5qYXZhZG9jOwotCi1pbXBvcnQgY29tLnN1bi5qYXZhZG9jLlNvdXJjZVBvc2l0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uSlNvdXJjZVBvc2l0aW9uOwotCi1pbXBvcnQgamF2YS5uZXQuVVJJOwotCi0vKioKLSAqIDxwPkphdmFkb2MtYmFja2VkIGltcGxlbWVudGF0aW9uIG9mIEpTb3VyY2VQb3NpdGlvbi48L3A+Ci0gKgotICogQGF1dGhvciBQYXRyaWNrIENhbGFoYW4gPHBjYWxAYmVhLmNvbT4KLSAqLwotLypwYWNrYWdlKi8gZmluYWwgY2xhc3MgSkRTb3VyY2VQb3NpdGlvbiBpbXBsZW1lbnRzIEpTb3VyY2VQb3NpdGlvbiB7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFZhcmlhYmxlcwotCi0gIHByaXZhdGUgU291cmNlUG9zaXRpb24gbVBvc2l0aW9uOwotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBDb25zdHJ1Y3RvcnMKLQotICBwdWJsaWMgSkRTb3VyY2VQb3NpdGlvbihTb3VyY2VQb3NpdGlvbiBwKSB7Ci0gICAgaWYgKHAgPT0gbnVsbCkgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibnVsbCBwb3NpdGlvbiIpOwotICAgIG1Qb3NpdGlvbiA9IHA7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gSlNvdXJjZVBvc2l0aW9uIGltcGxlbWVudGF0aW9uCi0KLSAgcHVibGljIGludCBnZXRDb2x1bW4oKSB7Ci0gICAgcmV0dXJuIG1Qb3NpdGlvbi5jb2x1bW4oKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0TGluZSgpIHsKLSAgICByZXR1cm4gbVBvc2l0aW9uLmxpbmUoKTsKLSAgfQotCi0gIHB1YmxpYyBVUkkgZ2V0U291cmNlVVJJKCkgewotICAgIHJldHVybiBtUG9zaXRpb24uZmlsZSgpLnRvVVJJKCk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9qYXZhZG9jL3BhY2thZ2UuaHRtbCBiL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9qYXZhZG9jL3BhY2thZ2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk5NDdhNy4uMDAwMDAwMAotLS0gYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvamF2YWRvYy9wYWNrYWdlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTxib2R5PgotICBJbnRlcm5hbCB1c2Ugb25seS4gIFRoaXMgcGFja2FnZSBjb250YWlucyBqYXZhZG9jLWJhc2VkCi0gIEpBTSBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLgotPC9ib2R5PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9wYWNrYWdlLmh0bWwgYi92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvcGFja2FnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTJmMjRjLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9wYWNrYWdlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTxib2R5PgotICBJbnRlcm5hbCB1c2Ugb25seS4gIFRoaXMgcGFja2FnZSBjb250YWlucyBzaGFyZWQgSkFNIGltcGxlbWVudGF0aW9uCi0gIGNsYXNzZXMuCi08L2JvZHk+CmRpZmYgLS1naXQgYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvcmVmbGVjdC9SQ2xhc3MuamF2YSBiL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9yZWZsZWN0L1JDbGFzcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2VjMGJiLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9yZWZsZWN0L1JDbGFzcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzgxICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uaW50ZXJuYWwucmVmbGVjdDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uKjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLmludGVybmFsLkJhc2VKRWxlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLmludGVybmFsLkpDbGFzc0hlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLmludGVybmFsLkpQcm9wZXJ0eUltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5pbnRlcm5hbC5QcmltaXRpdmVKQ2xhc3M7Ci0KLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Db25zdHJ1Y3RvcjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5GaWVsZDsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTW9kaWZpZXI7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci0KLS8qKgotICogSmF2YWRvYy1iYWNrZWQgaW1wbGVtZW50YXRpb24gb2YgSkNsYXNzLgotICoKLSAqIEBhdXRob3IgUGF0cmljayBDYWxhaGFuIDxwY2FsQGJlYS5jb20+Ci0gKi8KLXB1YmxpYyBjbGFzcyBSQ2xhc3MgZXh0ZW5kcyBCYXNlSkVsZW1lbnQgaW1wbGVtZW50cyBKQ2xhc3MgewotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBWYXJpYWJsZXMKLQotICBwcml2YXRlIE1hcCBtV3JhcHBlck1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gIHByaXZhdGUgQ2xhc3MgbUNsYXNzOwotICBwcml2YXRlIEpDbGFzc0hlbHBlciBtSGVscGVyOy8vdGhpcyBjbGFzcyBpcyBkdW1iCi0gIHByaXZhdGUgSkNsYXNzTG9hZGVyIG1Mb2FkZXI7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIENvbnN0cnVjdG9ycwotCi0gIHB1YmxpYyBSQ2xhc3MoQ2xhc3MgYywgSkNsYXNzTG9hZGVyIGxvYWRlcikgewotICAgIG1Mb2FkZXIgPSBsb2FkZXI7Ci0gICAgbUNsYXNzID0gYzsKLSAgICBtSGVscGVyID0gbmV3IEpDbGFzc0hlbHBlcih0aGlzKTsKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBKRWxlbWVudCBpbXBsZW1lbnRhdGlvbgotCi0gIHB1YmxpYyBKRWxlbWVudCBnZXRQYXJlbnQoKSB7Ci0gICAgcmV0dXJuIG1IZWxwZXIuZ2V0UGFyZW50KCk7Ci0gIH0KLQotICBwdWJsaWMgSkVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLSAgICByZXR1cm4gbUhlbHBlci5nZXRDaGlsZHJlbigpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTaW1wbGVOYW1lKCkgewotICAgIFN0cmluZyBvdXQgPSBnZXRRdWFsaWZpZWROYW1lKCk7Ci0gICAgaW50IGxhc3REb3QgPSBvdXQubGFzdEluZGV4T2YoJy4nKTsKLSAgICByZXR1cm4gKGxhc3REb3QgPT0gLTEpID8gb3V0IDogb3V0LnN1YnN0cmluZyhsYXN0RG90ICsgMSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFF1YWxpZmllZE5hbWUoKSB7Ci0gICAgaWYgKCFpc0FycmF5KCkpIHsKLSAgICAgIHJldHVybiBtQ2xhc3MuZ2V0TmFtZSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICBTdHJpbmdXcml0ZXIgb3V0ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotICAgICAgb3V0LndyaXRlKGdldEFycmF5Q29tcG9uZW50VHlwZSgpLmdldFF1YWxpZmllZE5hbWUoKSk7Ci0gICAgICBpbnQgZGltID0gZ2V0QXJyYXlEaW1lbnNpb25zKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRpbTsgaSsrKSBvdXQud3JpdGUoIltdIik7Ci0gICAgICByZXR1cm4gb3V0LnRvU3RyaW5nKCk7Ci0gICAgfQotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIEJhc2VKRWxlbWVudCBpbXBsZW1lbnRhdGlvbgotCi0gIC8qKgotICAgKiBXZSBjYW4ndCBpbXBsZW1lbnQgdGhpcyB1bnRpbCBKU1IxNzUgaXMgaGVyZS4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGdldExvY2FsQW5ub3RhdGlvbnMoQ29sbGVjdGlvbiBvdXQpIHsKLSAgfQotCi0gIC8qKgotICAgKiBXZSBjYW4ndCBldmVyIGltcGxlbWVudCB0aGlzLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgZ2V0TG9jYWxDb21tZW50cyhDb2xsZWN0aW9uIG91dCkgewotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIEpDbGFzcyBpbXBsZW1lbnRhdGlvbgotCi0gIHB1YmxpYyBKQ2xhc3NMb2FkZXIgZ2V0Q2xhc3NMb2FkZXIoKSB7Ci0gICAgcmV0dXJuIG1Mb2FkZXI7Ci0gIH0KLQotICBwdWJsaWMgSkNsYXNzIGZvck5hbWUoU3RyaW5nIGZkKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgcmV0dXJuIG1Mb2FkZXIubG9hZENsYXNzKGZkKTsKLSAgfQotCi0gIHB1YmxpYyBKQ2xhc3MgZ2V0U3VwZXJjbGFzcygpIHsKLSAgICBpZiAoaXNPYmplY3QoKSB8fCBpc0ludGVyZmFjZSgpIHx8IGlzUHJpbWl0aXZlKCkpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gZ2V0Q2xhc3NTYWZlbHkobUNsYXNzLmdldFN1cGVyY2xhc3MoKS5nZXROYW1lKCksIG1Mb2FkZXIpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBKQ2xhc3NbXSBnZXRJbnRlcmZhY2VzKCkgewotICAgIHJldHVybiBnZXRDbGFzc2VzKG1DbGFzcy5nZXRJbnRlcmZhY2VzKCkpOwotICB9Ci0KLSAgcHVibGljIEpGaWVsZFtdIGdldEZpZWxkcygpIHsKLSAgICByZXR1cm4gbUhlbHBlci5nZXRBbGxGaWVsZHMoKTsKLSAgfQotCi0gIHB1YmxpYyBKRmllbGRbXSBnZXREZWNsYXJlZEZpZWxkcygpIHsKLSAgICByZXR1cm4gZ2V0RmllbGRzKG1DbGFzcy5nZXREZWNsYXJlZEZpZWxkcygpKTsKLSAgfQotCi0gIHB1YmxpYyBKQ29uc3RydWN0b3JbXSBnZXRDb25zdHJ1Y3RvcnMoKSB7Ci0gICAgcmV0dXJuIGdldENvbnN0cnVjdG9ycyhtQ2xhc3MuZ2V0Q29uc3RydWN0b3JzKCkpOwotICB9Ci0KLSAgcHVibGljIEpNZXRob2RbXSBnZXRNZXRob2RzKCkgewotICAgIHJldHVybiBtSGVscGVyLmdldEFsbE1ldGhvZHMoKTsKLSAgfQotCi0gIHB1YmxpYyBKTWV0aG9kW10gZ2V0RGVjbGFyZWRNZXRob2RzKCkgewotICAgIHJldHVybiBnZXRNZXRob2RzKG1DbGFzcy5nZXREZWNsYXJlZE1ldGhvZHMoKSk7Ci0gIH0KLQotICBwdWJsaWMgSlBhY2thZ2UgZ2V0Q29udGFpbmluZ1BhY2thZ2UoKSB7Ci0gICAgU3RyaW5nIHBrZ05hbWU7Ci0gICAgaWYgKG1DbGFzcy5nZXRQYWNrYWdlKCkgIT0gbnVsbCkgewotICAgICAgcGtnTmFtZSA9IG1DbGFzcy5nZXRQYWNrYWdlKCkuZ2V0TmFtZSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBJZiB0aGUgcGFja2FnZSBpc24ndCBhbHJlYWR5IGRlZmluZWQgaW4gdGhlIGNsYXNzbG9hZGVyLAotICAgICAgLy8gbGV0J3Mgbm90IGdvIGRlZmluaW5nIG5ldyBwYWNrYWdlcyAtIGp1c3QgZmlndXJlIGl0IG91dCB0aGUKLSAgICAgIC8vIGhhcmQgd2F5LgotICAgICAgcGtnTmFtZSA9ICFpc0FycmF5KCkgPyBnZXRRdWFsaWZpZWROYW1lKCkgOgotICAgICAgICAgICAgICBnZXRBcnJheUNvbXBvbmVudFR5cGUoKS5nZXRRdWFsaWZpZWROYW1lKCk7Ci0gICAgICBpbnQgbGFzdERvdCA9IHBrZ05hbWUubGFzdEluZGV4T2YoIi4iKTsKLSAgICAgIGlmIChsYXN0RG90ICE9IC0xICYmIGxhc3REb3QgPCBwa2dOYW1lLmxlbmd0aCgpIC0gMSkgewotICAgICAgICBwa2dOYW1lID0gcGtnTmFtZS5zdWJzdHJpbmcoMCwgbGFzdERvdCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBtTG9hZGVyLmdldFBhY2thZ2UocGtnTmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0ludGVyZmFjZSgpIHsKLSAgICByZXR1cm4gbUNsYXNzLmlzSW50ZXJmYWNlKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1ByaW1pdGl2ZSgpIHsKLSAgICByZXR1cm4gKFByaW1pdGl2ZUpDbGFzcy5nZXRQcmltaXRpdmVDbGFzcyhtQ2xhc3MpICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNWb2lkKCkgewotICAgIHJldHVybiBtQ2xhc3MuZ2V0TmFtZSgpLmVxdWFscygidm9pZCIpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNPYmplY3QoKSB7Ci0gICAgcmV0dXJuIG1DbGFzcyA9PSBPYmplY3QuY2xhc3M7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0Fic3RyYWN0KCkgewotICAgIHJldHVybiBNb2RpZmllci5pc0Fic3RyYWN0KG1DbGFzcy5nZXRNb2RpZmllcnMoKSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0FycmF5KCkgewotICAgIHJldHVybiBtQ2xhc3MuaXNBcnJheSgpOwotICB9Ci0KLSAgcHVibGljIEpDbGFzcyBnZXRBcnJheUNvbXBvbmVudFR5cGUoKSB7Ci0gICAgaWYgKG1DbGFzcy5nZXRDb21wb25lbnRUeXBlKCkgPT0gbnVsbCkgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSBlbHNlIHsKLSAgICAgIENsYXNzIGMgPSBtQ2xhc3MuZ2V0Q29tcG9uZW50VHlwZSgpOwotICAgICAgd2hpbGUgKGMuZ2V0Q29tcG9uZW50VHlwZSgpICE9IG51bGwpIGMgPSBjLmdldENvbXBvbmVudFR5cGUoKTsKLSAgICAgIHJldHVybiBnZXRDbGFzc1NhZmVseShjLmdldE5hbWUoKSwgbUxvYWRlcik7Ci0gICAgfQotICB9Ci0KLQotICBwdWJsaWMgaW50IGdldEFycmF5RGltZW5zaW9ucygpIHsKLSAgICBpbnQgb3V0ID0gMDsKLSAgICBDbGFzcyBjID0gbUNsYXNzOwotICAgIHdoaWxlICgoYyA9IGMuZ2V0Q29tcG9uZW50VHlwZSgpKSAhPSBudWxsKSBvdXQrKzsKLSAgICByZXR1cm4gb3V0OwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRGaWVsZERlc2NyaXB0b3IoKSB7Ci0gICAgcmV0dXJuIG1DbGFzcy5nZXROYW1lKCk7Ci0gIH0KLQotICBwdWJsaWMgSkNsYXNzW10gZ2V0Q2xhc3NlcygpIHsKLSAgICByZXR1cm4gZ2V0Q2xhc3NlcyhtQ2xhc3MuZ2V0Q2xhc3NlcygpKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzQXNzaWduYWJsZUZyb20oSkNsYXNzIGNsYXp6KSB7Ci0gICAgcmV0dXJuIG1IZWxwZXIuaXNBc3NpZ25hYmxlRnJvbShjbGF6eik7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1N0YXRpYygpIHsKLSAgICByZXR1cm4gTW9kaWZpZXIuaXNTdGF0aWMobUNsYXNzLmdldE1vZGlmaWVycygpKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzRmluYWwoKSB7Ci0gICAgcmV0dXJuIE1vZGlmaWVyLmlzRmluYWwobUNsYXNzLmdldE1vZGlmaWVycygpKTsKLSAgfQotCi0gIHB1YmxpYyBKUHJvcGVydHlbXSBnZXRQcm9wZXJ0aWVzKCkgewotICAgIC8vUkVWSUVXIG1heWJlIHdlIHNob3VsZCByZXRyaWV2ZSB0aGUgQmVhbkluZm8gaW4gb3JkZXIgdG8gZ2V0Ci0gICAgLy9wcm9wZXJ0aWVzCi0gICAgcmV0dXJuIEpQcm9wZXJ0eUltcGwuZ2V0UHJvcGVydGllcyh0aGlzKTsKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBKTWVtYmVyIGltcGxlbWVudGF0aW9uCi0KLSAgcHVibGljIEpDbGFzcyBnZXRDb250YWluaW5nQ2xhc3MoKSB7Ci0gICAgcmV0dXJuIGdldENsYXNzU2FmZWx5KG1DbGFzcy5nZXREZWNsYXJpbmdDbGFzcygpLmdldE5hbWUoKSwgbUxvYWRlcik7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1Byb3RlY3RlZCgpIHsKLSAgICByZXR1cm4gTW9kaWZpZXIuaXNQcm90ZWN0ZWQobUNsYXNzLmdldE1vZGlmaWVycygpKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzUHVibGljKCkgewotICAgIHJldHVybiBNb2RpZmllci5pc1B1YmxpYyhtQ2xhc3MuZ2V0TW9kaWZpZXJzKCkpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNQcml2YXRlKCkgewotICAgIHJldHVybiBNb2RpZmllci5pc1ByaXZhdGUobUNsYXNzLmdldE1vZGlmaWVycygpKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzUGFja2FnZVByaXZhdGUoKSB7Ci0gICAgcmV0dXJuICFpc1B1YmxpYygpICYmICFpc1Byb3RlY3RlZCgpICYmICFpc1ByaXZhdGUoKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0TW9kaWZpZXJzKCkgewotICAgIHJldHVybiBtQ2xhc3MuZ2V0TW9kaWZpZXJzKCk7Ci0gIH0KLQotICBwdWJsaWMgSlNvdXJjZVBvc2l0aW9uIGdldFNvdXJjZVBvc2l0aW9uKCkgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIE9iamVjdCBpbXBsZW1lbnRhdGlvbgotCi0gIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykgewotICAgIGlmIChvIGluc3RhbmNlb2YgSkNsYXNzKSB7Ci0gICAgICByZXR1cm4gKChKQ2xhc3MpIG8pLmdldEZpZWxkRGVzY3JpcHRvcigpLmVxdWFscyhnZXRGaWVsZERlc2NyaXB0b3IoKSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0gICAgcmV0dXJuIGdldEZpZWxkRGVzY3JpcHRvcigpLmhhc2hDb2RlKCk7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gUHJpdmF0ZSBtZXRob2RzCi0KLSAgcHJpdmF0ZSBKRmllbGRbXSBnZXRGaWVsZHMoRmllbGRbXSBmaWVsZHMpIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGxpc3QuYWRkKGdldEZpZWxkKGZpZWxkc1tpXSkpOwotICAgIH0KLSAgICBKRmllbGRbXSBvdXQgPSBuZXcgSkZpZWxkW2xpc3Quc2l6ZSgpXTsKLSAgICBsaXN0LnRvQXJyYXkob3V0KTsKLSAgICByZXR1cm4gb3V0OwotICB9Ci0KLSAgcHJpdmF0ZSBKTWV0aG9kW10gZ2V0TWV0aG9kcyhNZXRob2RbXSBtZXRob2RzKSB7Ci0gICAgTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkrKykgewotICAgICAgbGlzdC5hZGQoZ2V0TWV0aG9kKG1ldGhvZHNbaV0pKTsKLSAgICB9Ci0gICAgSk1ldGhvZFtdIG91dCA9IG5ldyBKTWV0aG9kW2xpc3Quc2l6ZSgpXTsKLSAgICBsaXN0LnRvQXJyYXkob3V0KTsKLSAgICByZXR1cm4gb3V0OwotICB9Ci0KLSAgcHJpdmF0ZSBKQ29uc3RydWN0b3JbXSBnZXRDb25zdHJ1Y3RvcnMoQ29uc3RydWN0b3JbXSBjb25zdHJ1Y3RvcnMpIHsKLSAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb25zdHJ1Y3RvcnMubGVuZ3RoOyBpKyspIHsKLSAgICAgIGxpc3QuYWRkKGdldENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yc1tpXSkpOwotICAgIH0KLSAgICBKQ29uc3RydWN0b3JbXSBvdXQgPSBuZXcgSkNvbnN0cnVjdG9yW2xpc3Quc2l6ZSgpXTsKLSAgICBsaXN0LnRvQXJyYXkob3V0KTsKLSAgICByZXR1cm4gb3V0OwotICB9Ci0KLSAgcHJpdmF0ZSBKRmllbGQgZ2V0RmllbGQoRmllbGQgZikgewotICAgIEpGaWVsZCBvdXQgPSAoSkZpZWxkKSBtV3JhcHBlck1hcC5nZXQoZik7Ci0gICAgaWYgKG91dCA9PSBudWxsKSBtV3JhcHBlck1hcC5wdXQoZiwgb3V0ID0gbmV3IFJGaWVsZChmLCBtTG9hZGVyKSk7Ci0gICAgcmV0dXJuIG91dDsKLSAgfQotCi0gIHByaXZhdGUgSk1ldGhvZCBnZXRNZXRob2QoTWV0aG9kIGYpIHsKLSAgICBKTWV0aG9kIG91dCA9IChKTWV0aG9kKSBtV3JhcHBlck1hcC5nZXQoZik7Ci0gICAgaWYgKG91dCA9PSBudWxsKSBtV3JhcHBlck1hcC5wdXQoZiwgb3V0ID0gbmV3IFJNZXRob2QoZiwgbUxvYWRlcikpOwotICAgIHJldHVybiBvdXQ7Ci0gIH0KLQotICBwcml2YXRlIEpDb25zdHJ1Y3RvciBnZXRDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvciBmKSB7Ci0gICAgSkNvbnN0cnVjdG9yIG91dCA9IChKQ29uc3RydWN0b3IpIG1XcmFwcGVyTWFwLmdldChmKTsKLSAgICBpZiAob3V0ID09IG51bGwpIG1XcmFwcGVyTWFwLnB1dChmLCBvdXQgPSBuZXcgUkNvbnN0cnVjdG9yKGYsIG1Mb2FkZXIpKTsKLSAgICByZXR1cm4gb3V0OwotICB9Ci0KLSAgcHJpdmF0ZSBKQ2xhc3NbXSBnZXRDbGFzc2VzKENsYXNzW10gYykgewotICAgIHJldHVybiBnZXRDbGFzc2VzKGMsIG1Mb2FkZXIpOwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFBhY2thZ2UgdXRpbGl0eSBtZXRob2RzCi0KLSAgLypwYWNrYWdlKi8KLSAgc3RhdGljIEpDbGFzc1tdIGdldENsYXNzZXMoQ2xhc3NbXSBjLCBKQ2xhc3NMb2FkZXIgbG9hZGVyKSB7Ci0gICAgaWYgKGMgPT0gbnVsbCkgcmV0dXJuIG51bGw7Ci0gICAgSkNsYXNzW10gb3V0ID0gbmV3IEpDbGFzc1tjLmxlbmd0aF07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdXQubGVuZ3RoOyBpKyspIHsKLSAgICAgIG91dFtpXSA9IGdldENsYXNzU2FmZWx5KGNbaV0uZ2V0TmFtZSgpLCBsb2FkZXIpOwotICAgIH0KLSAgICByZXR1cm4gb3V0OwotICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvcmVmbGVjdC9SQ2xhc3NMb2FkZXIuamF2YSBiL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9yZWZsZWN0L1JDbGFzc0xvYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDhhZGUyLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9yZWZsZWN0L1JDbGFzc0xvYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYzICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uaW50ZXJuYWwucmVmbGVjdDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uSkFubm90YXRpb25Mb2FkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5KQ2xhc3M7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5KQ2xhc3NMb2FkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5KUGFja2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLmludGVybmFsLkFycmF5SkNsYXNzOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uaW50ZXJuYWwuSlBhY2thZ2VJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uaW50ZXJuYWwuUHJpbWl0aXZlSkNsYXNzOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uaW50ZXJuYWwuVm9pZEpDbGFzczsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8qKgotICogamF2YS5sYW5nLkNsYXNzTG9hZGVyLWJhY2tlZCBpbXBsZW1lbnRhdGlvbiBvZiBKQ2xhc3NMb2FkZXIuCi0gKgotICogQGF1dGhvciBQYXRyaWNrIENhbGFoYW4gPHBjYWxAYmVhLmNvbT4KLSAqLwotcHVibGljIGNsYXNzIFJDbGFzc0xvYWRlciBpbXBsZW1lbnRzIEpDbGFzc0xvYWRlciB7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFZhcmlhYmxlcwotCi0gIHByaXZhdGUgQ2xhc3NMb2FkZXIgbUxvYWRlcjsKLSAgcHJpdmF0ZSBNYXAgbUZkMkNsYXNzID0gbmV3IEhhc2hNYXAoKSwgbU5hbWUyUGFja2FnZSA9IG5ldyBIYXNoTWFwKCk7Ci0gIHByaXZhdGUgSkNsYXNzTG9hZGVyIG1QYXJlbnRMb2FkZXI7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIENvbnN0cnVjdG9ycwotCi0gIHB1YmxpYyBSQ2xhc3NMb2FkZXIoQ2xhc3NMb2FkZXIgYykgewotICAgIHRoaXMoYywgbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgUkNsYXNzTG9hZGVyKENsYXNzTG9hZGVyIGMsIEpDbGFzc0xvYWRlciBwYXJlbnQpIHsKLSAgICBpZiAoYyA9PSBudWxsKSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJudWxsIGNsYXNzbG9hZGVyIik7Ci0gICAgbUxvYWRlciA9IGM7Ci0gICAgbVBhcmVudExvYWRlciA9IHBhcmVudDsgLy90aGlzIGNhbiBiZSBudWxsCi0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gSkNsYXNzTG9hZGVyIGltcGxlbWVudGF0aW9uCi0KLSAgcHVibGljIEpDbGFzc0xvYWRlciBnZXRQYXJlbnQoKSB7Ci0gICAgcmV0dXJuIG1QYXJlbnRMb2FkZXI7Ci0gIH0KLQotICAvKioKLSAgICoKLSAgICovCi0gIHB1YmxpYyBKQW5ub3RhdGlvbkxvYWRlciBnZXRBbm5vdGF0aW9uTG9hZGVyKCkgewotICAgIHJldHVybiBudWxsOwotICB9Ly9GSVhNRQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGEgcmVmbGVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbmFtZWQgY2xhc3MuICBUaHJvd3MKLSAgICogQ2xhc3NOb3RGb3VuZAotICAgKi8KLSAgcHVibGljIEpDbGFzcyBsb2FkQ2xhc3MoU3RyaW5nIGZkKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgZmQgPSBmZC50cmltKCk7Ci0gICAgLy8gY2hlY2sgY2FjaGUgZmlyc3QKLSAgICBKQ2xhc3Mgb3V0ID0gKEpDbGFzcykgbUZkMkNsYXNzLmdldChmZCk7Ci0gICAgaWYgKG91dCAhPSBudWxsKSByZXR1cm4gb3V0OwotICAgIC8vIGlzIGl0IGFuIGFycmF5PwotICAgIGlmIChmZC5zdGFydHNXaXRoKCJbIikpIHsKLSAgICAgIG1GZDJDbGFzcy5wdXQoZmQsIG91dCA9IEFycmF5SkNsYXNzLmNyZWF0ZUNsYXNzRm9yKGZkLCB0aGlzKSk7Ci0gICAgICByZXR1cm4gb3V0OwotICAgIH0KLSAgICAvLyBzZWUgaWYgaXQncyBhIHByaW1pdGl2ZS4gIFJFVklFVyBpIHRoaW5rIHRoaXMgY2hlY2sgc2hvdWxkIG9ubHkKLSAgICAvLyBoYXBwZW4gaWYgd2UncmUgdGhlIHN5c3RlbSBSQ2xhc3NMb2FkZXIuCi0gICAgb3V0ID0gUHJpbWl0aXZlSkNsYXNzLmdldFByaW1pdGl2ZUNsYXNzRm9yTmFtZShmZCk7Ci0gICAgaWYgKG91dCAhPSBudWxsKSB7Ci0gICAgICBtRmQyQ2xhc3MucHV0KGZkLCBvdXQpOwotICAgICAgcmV0dXJuIG91dDsKLSAgICB9Ci0gICAgLy8gc2VlIGlmIGl0J3Mgdm9pZC4gIFJFVklFVyBpIHRoaW5rIHRoaXMgY2hlY2sgc2hvdWxkIG9ubHkgaGFwcGVuCi0gICAgLy8gaWYgd2UncmUgdGhlIHN5c3RlbSBSQ2xhc3NMb2FkZXIuCi0gICAgaWYgKFZvaWRKQ2xhc3MuaXNWb2lkKGZkKSkgewotICAgICAgbUZkMkNsYXNzLnB1dChmZCwgb3V0ID0gVm9pZEpDbGFzcy5nZXRJbnN0YW5jZSgpKTsKLSAgICAgIHJldHVybiBvdXQ7Ci0gICAgfQotICAgIC8vIHN0aWxsIG5vIGRpY2UuICBvaywgdHJ5IHRvIGxvYWQgaXQKLSAgICB0cnkgewotICAgICAgbUZkMkNsYXNzLnB1dChmZCwgb3V0ID0gbmV3IFJDbGFzcyhtTG9hZGVyLmxvYWRDbGFzcyhmZCksIHRoaXMpKTsKLSAgICAgIHJldHVybiBvdXQ7Ci0gICAgfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBpZ25vcmUpIHsKLSAgICB9Ci0gICAgLy8gZG9oLiAgb2ssIGhhbmQgb2ZmIHRvIG91ciBwYXJlbnQuICBpZiB3ZSBkb24ndCBoYXZlIG9uZSwgd2UncmUKLSAgICAvLyBkb25lLgotICAgIGlmIChtUGFyZW50TG9hZGVyID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uKGZkKTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIG1QYXJlbnRMb2FkZXIubG9hZENsYXNzKGZkKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgSlBhY2thZ2UgZ2V0UGFja2FnZShTdHJpbmcgbmFtZWQpIHsKLSAgICBuYW1lZCA9IG5hbWVkLnRyaW0oKTsKLSAgICBKUGFja2FnZSBvdXQgPSAoSlBhY2thZ2UpIG1OYW1lMlBhY2thZ2UuZ2V0KG5hbWVkKTsKLSAgICBpZiAob3V0ID09IG51bGwpIHsKLSAgICAgIG1OYW1lMlBhY2thZ2UucHV0KG5hbWVkLCBvdXQgPSBuZXcgSlBhY2thZ2VJbXBsKG5hbWVkKSk7Ci0gICAgfQotICAgIHJldHVybiBvdXQ7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL3JlZmxlY3QvUkNvbnN0cnVjdG9yLmphdmEgYi92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvcmVmbGVjdC9SQ29uc3RydWN0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y3NTY0Zi4uMDAwMDAwMAotLS0gYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvcmVmbGVjdC9SQ29uc3RydWN0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLmludGVybmFsLnJlZmxlY3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLio7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Db25zdHJ1Y3RvcjsKLQotLyoqCi0gKiBSZWZsZWN0aW9uLWJhY2tlZCBpbXBsZW1lbnRhdGlvbiBvZiBKQ2xhc3MuCi0gKgotICogQGF1dGhvciBQYXRyaWNrIENhbGFoYW4gPHBjYWxAYmVhLmNvbT4KLSAqLwotLypwYWNrYWdlKi8KLQotZmluYWwgY2xhc3MgUkNvbnN0cnVjdG9yIGV4dGVuZHMgUk1lbWJlciBpbXBsZW1lbnRzIEpDb25zdHJ1Y3RvciB7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFZhcmlhYmxlcwotCi0gIHByaXZhdGUgQ29uc3RydWN0b3IgbUNvbnN0cnVjdG9yOwotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBDb25zdHJ1Y3RvcnMKLQotICBwdWJsaWMgUkNvbnN0cnVjdG9yKENvbnN0cnVjdG9yIG0sIEpDbGFzc0xvYWRlciBsb2FkZXIpIHsKLSAgICBzdXBlcihtLCBsb2FkZXIpOwotICAgIG1Db25zdHJ1Y3RvciA9IG07Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gSkVsZW1lbnQgaW1wbGVtZW50YXRpb24KLQotICBwdWJsaWMgSkVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLSAgICByZXR1cm4gZ2V0UGFyYW1ldGVycygpOwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIEpDb25zdHJ1Y3RvciBpbXBsZW1lbnRhdGlvbgotCi0gIHB1YmxpYyBKUGFyYW1ldGVyW10gZ2V0UGFyYW1ldGVycygpIHsKLSAgICByZXR1cm4gUlBhcmFtZXRlci5jcmVhdGVQYXJhbWV0ZXJzCi0gICAgICAgICAgICAobUNvbnN0cnVjdG9yLmdldFBhcmFtZXRlclR5cGVzKCksIHRoaXMsIG1Mb2FkZXIpOwotICB9Ci0KLSAgcHVibGljIEpDbGFzc1tdIGdldEV4Y2VwdGlvblR5cGVzKCkgewotICAgIHJldHVybiBSQ2xhc3MuZ2V0Q2xhc3NlcyhtQ29uc3RydWN0b3IuZ2V0RXhjZXB0aW9uVHlwZXMoKSwgbUxvYWRlcik7Ci0gIH0KLQotfQotCi0KZGlmZiAtLWdpdCBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9yZWZsZWN0L1JGaWVsZC5qYXZhIGIvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL3JlZmxlY3QvUkZpZWxkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiZTgwMzkuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL3JlZmxlY3QvUkZpZWxkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5pbnRlcm5hbC5yZWZsZWN0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5KQ2xhc3M7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5KQ2xhc3NMb2FkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5KRmllbGQ7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5GaWVsZDsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Nb2RpZmllcjsKLQotLyoqCi0gKiBSZWZsZWN0aW9uLWJhY2tlZCBpbXBsZW1lbnRhdGlvbiBvZiBKQ2xhc3MuCi0gKgotICogQGF1dGhvciBQYXRyaWNrIENhbGFoYW4gPHBjYWxAYmVhLmNvbT4KLSAqLwotLypwYWNrYWdlKi8KLQotZmluYWwgY2xhc3MgUkZpZWxkIGV4dGVuZHMgUk1lbWJlciBpbXBsZW1lbnRzIEpGaWVsZCB7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFZhcmlhYmxlcwotCi0gIHByaXZhdGUgRmllbGQgbUZpZWxkOwotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBDb25zdHJ1Y3RvcnMKLQotICBwdWJsaWMgUkZpZWxkKEZpZWxkIGYsIEpDbGFzc0xvYWRlciBsb2FkZXIpIHsKLSAgICBzdXBlcihmLCBsb2FkZXIpOwotICAgIG1GaWVsZCA9IGY7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gSkZpZWxkIGltcGxlbWVudGF0aW9uCi0KLSAgcHVibGljIEpDbGFzcyBnZXRUeXBlKCkgewotICAgIHJldHVybiBnZXRDbGFzc1NhZmVseShtRmllbGQuZ2V0VHlwZSgpLmdldE5hbWUoKSwgbUxvYWRlcik7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1ZvbGF0aWxlKCkgewotICAgIHJldHVybiBNb2RpZmllci5pc1ZvbGF0aWxlKG1GaWVsZC5nZXRNb2RpZmllcnMoKSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1RyYW5zaWVudCgpIHsKLSAgICByZXR1cm4gTW9kaWZpZXIuaXNUcmFuc2llbnQobUZpZWxkLmdldE1vZGlmaWVycygpKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL3JlZmxlY3QvUk1lbWJlci5qYXZhIGIvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL3JlZmxlY3QvUk1lbWJlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NWNkYzM1Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9yZWZsZWN0L1JNZW1iZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLmludGVybmFsLnJlZmxlY3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamFtLio7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5pbnRlcm5hbC5CYXNlSkVsZW1lbnQ7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZW1iZXI7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTW9kaWZpZXI7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLS8qKgotICogUmVmbGVjdGlvbi1iYWNrZWQgaW1wbGVtZW50YXRpb24gb2YgSk1lbWJlci4KLSAqCi0gKiBAYXV0aG9yIFBhdHJpY2sgQ2FsYWhhbiA8cGNhbEBiZWEuY29tPgotICovCi0vKnBhY2thZ2UqLwotCi1hYnN0cmFjdCBjbGFzcyBSTWVtYmVyIGV4dGVuZHMgQmFzZUpFbGVtZW50IGltcGxlbWVudHMgSk1lbWJlciB7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIFZhcmlhYmxlcwotCi0gIHByaXZhdGUgTWVtYmVyIG1NZW1iZXI7Ci0gIHByb3RlY3RlZCBKQ2xhc3NMb2FkZXIgbUxvYWRlcjsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gQ29uc3RydWN0b3JzCi0KLSAgcHVibGljIFJNZW1iZXIoTWVtYmVyIG0sIEpDbGFzc0xvYWRlciBsb2FkZXIpIHsKLSAgICBtTG9hZGVyID0gbG9hZGVyOwotICAgIG1NZW1iZXIgPSBtOwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIEpFbGVtZW50IGltcGxlbWVudGF0aW9uCi0KLSAgcHVibGljIEpFbGVtZW50IGdldFBhcmVudCgpIHsKLSAgICByZXR1cm4gZ2V0Q2xhc3NTYWZlbHkobU1lbWJlci5nZXREZWNsYXJpbmdDbGFzcygpLmdldE5hbWUoKSwgbUxvYWRlcik7Ci0gIH0KLQotICBwdWJsaWMgSkVsZW1lbnRbXSBnZXRDaGlsZHJlbigpIHsKLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U2ltcGxlTmFtZSgpIHsKLSAgICByZXR1cm4gbU1lbWJlci5nZXROYW1lKCk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGdldFF1YWxpZmllZE5hbWUoKSB7Ci0gICAgcmV0dXJuIG1NZW1iZXIuZ2V0TmFtZSgpOwotICB9IC8vRklYTUUKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gSk1lbWJlciBpbXBsZW1lbnRhdGlvbgotCi0gIHB1YmxpYyBib29sZWFuIGlzRmluYWwoKSB7Ci0gICAgcmV0dXJuIE1vZGlmaWVyLmlzRmluYWwobU1lbWJlci5nZXRNb2RpZmllcnMoKSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0Fic3RyYWN0KCkgewotICAgIHJldHVybiBNb2RpZmllci5pc0Fic3RyYWN0KG1NZW1iZXIuZ2V0TW9kaWZpZXJzKCkpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNQcm90ZWN0ZWQoKSB7Ci0gICAgcmV0dXJuIE1vZGlmaWVyLmlzUHJvdGVjdGVkKG1NZW1iZXIuZ2V0TW9kaWZpZXJzKCkpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNQdWJsaWMoKSB7Ci0gICAgcmV0dXJuIE1vZGlmaWVyLmlzUHVibGljKG1NZW1iZXIuZ2V0TW9kaWZpZXJzKCkpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNQcml2YXRlKCkgewotICAgIHJldHVybiBNb2RpZmllci5pc1ByaXZhdGUobU1lbWJlci5nZXRNb2RpZmllcnMoKSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1N0YXRpYygpIHsKLSAgICByZXR1cm4gTW9kaWZpZXIuaXNTdGF0aWMobU1lbWJlci5nZXRNb2RpZmllcnMoKSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1BhY2thZ2VQcml2YXRlKCkgewotICAgIHJldHVybiAhaXNQdWJsaWMoKSAmJiAhaXNQcm90ZWN0ZWQoKSAmJiAhaXNQcml2YXRlKCk7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldE1vZGlmaWVycygpIHsKLSAgICByZXR1cm4gbU1lbWJlci5nZXRNb2RpZmllcnMoKTsKLSAgfQotCi0gIC8qKgotICAgKiBXZSdyZSBuZXZlciBnb2luZyB0byBrbm93IHRoaXMuCi0gICAqLwotICBwdWJsaWMgSlNvdXJjZVBvc2l0aW9uIGdldFNvdXJjZVBvc2l0aW9uKCkgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIEpNZW1iZXIgaW1wbGVtZW50YXRpb24KLQotICBwdWJsaWMgSkNsYXNzIGdldENvbnRhaW5pbmdDbGFzcygpIHsKLSAgICByZXR1cm4gZ2V0Q2xhc3NTYWZlbHkobU1lbWJlci5nZXREZWNsYXJpbmdDbGFzcygpLmdldE5hbWUoKSwgbUxvYWRlcik7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1N5bnRoZXRpYygpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0vL0ZJWE1FPwotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBCYXNlSkVsZW1lbnQgaW1wbGVtZW50YXRpb24KLQotICAvKioKLSAgICogV2UgY2FuJ3QgaW1wbGVtZW50IHRoaXMgdW50aWwgSlNSMTc1IGlzIGhlcmUuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBnZXRMb2NhbEFubm90YXRpb25zKENvbGxlY3Rpb24gb3V0KSB7Ci0gIH0KLQotICAvKioKLSAgICogV2UgY2FuJ3QgZXZlciBpbXBsZW1lbnQgdGhpcy4KLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIGdldExvY2FsQ29tbWVudHMoQ29sbGVjdGlvbiBvdXQpIHsKLSAgfQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvcmVmbGVjdC9STWV0aG9kLmphdmEgYi92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvcmVmbGVjdC9STWV0aG9kLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1YzcxMTEuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL3JlZmxlY3QvUk1ldGhvZC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uaW50ZXJuYWwucmVmbGVjdDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uKjsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Nb2RpZmllcjsKLQotLyoqCi0gKiBSZWZsZWN0aW9uLWJhY2tlZCBpbXBsZW1lbnRhdGlvbiBvZiBKQ2xhc3MuCi0gKgotICogQGF1dGhvciBQYXRyaWNrIENhbGFoYW4gPHBjYWxAYmVhLmNvbT4KLSAqLwotLypwYWNrYWdlKi8KLQotZmluYWwgY2xhc3MgUk1ldGhvZCBleHRlbmRzIFJNZW1iZXIgaW1wbGVtZW50cyBKTWV0aG9kIHsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gVmFyaWFibGVzCi0KLSAgcHJpdmF0ZSBNZXRob2QgbU1ldGhvZDsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gQ29uc3RydWN0b3JzCi0KLSAgcHVibGljIFJNZXRob2QoTWV0aG9kIG0sIEpDbGFzc0xvYWRlciBsb2FkZXIpIHsKLSAgICBzdXBlcihtLCBsb2FkZXIpOwotICAgIG1NZXRob2QgPSBtOwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIEpFbGVtZW50IGltcGxlbWVudGF0aW9uCi0KLSAgcHVibGljIEpFbGVtZW50W10gZ2V0Q2hpbGRyZW4oKSB7Ci0gICAgcmV0dXJuIGdldFBhcmFtZXRlcnMoKTsKLSAgfQotCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBKTWV0aG9kIGltcGxlbWVudGF0aW9uCi0KLSAgcHVibGljIEpDbGFzcyBnZXRSZXR1cm5UeXBlKCkgewotICAgIHJldHVybiBnZXRDbGFzc1NhZmVseShtTWV0aG9kLmdldFJldHVyblR5cGUoKS5nZXROYW1lKCksIG1Mb2FkZXIpOwotICB9Ci0KLSAgcHVibGljIEpQYXJhbWV0ZXJbXSBnZXRQYXJhbWV0ZXJzKCkgewotICAgIHJldHVybiBSUGFyYW1ldGVyLmNyZWF0ZVBhcmFtZXRlcnMKLSAgICAgICAgICAgIChtTWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCksIHRoaXMsIG1Mb2FkZXIpOwotICB9Ci0KLSAgcHVibGljIEpDbGFzc1tdIGdldEV4Y2VwdGlvblR5cGVzKCkgewotICAgIHJldHVybiBSQ2xhc3MuZ2V0Q2xhc3NlcyhtTWV0aG9kLmdldEV4Y2VwdGlvblR5cGVzKCksIG1Mb2FkZXIpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNTeW5jaHJvbml6ZWQoKSB7Ci0gICAgcmV0dXJuIE1vZGlmaWVyLmlzU3luY2hyb25pemVkKG1NZXRob2QuZ2V0TW9kaWZpZXJzKCkpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNOYXRpdmUoKSB7Ci0gICAgcmV0dXJuIE1vZGlmaWVyLmlzTmF0aXZlKG1NZXRob2QuZ2V0TW9kaWZpZXJzKCkpOwotICB9Ci0KLX0KLQotCmRpZmYgLS1naXQgYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvcmVmbGVjdC9SUGFyYW1ldGVyLmphdmEgYi92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vaW50ZXJuYWwvcmVmbGVjdC9SUGFyYW1ldGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NmI0MzMuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL3JlZmxlY3QvUlBhcmFtZXRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjExICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS5pbnRlcm5hbC5yZWZsZWN0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmphbS4qOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYW0uaW50ZXJuYWwuQmFzZUpFbGVtZW50OwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLS8qKgotICogPHA+UmVmbGVjdGlvbi1iYWNrZWQgaW1wbGVtZW50YXRpb24gb2YgSlBhcmFtZXRlci4gIE5vdGUgdGhhdAotICogcmVmbGVjdGlvbiBkb2VzIG5vdCBwcm92aWRlIGEgZmlyc3QtY2xhc3MgcmVwcmVzZW50YXRpb24gb2YgbWV0aG9kCi0gKiBwYXJhbWV0ZXJzIC0gdGhpcyByZXByZXNlbnRhdGlvbiBpcyBzeW50aGVzaXplZCBmcm9tIHRoZQotICogaW5mb3JtYXRpb24gYXZhaWxhYmxlIHRvIHVzIGluIHRoZSBNZXRob2Qgb3IgQ29uc3RydWN0b3IuPC9wPgotICoKLSAqIEBhdXRob3IgUGF0cmljayBDYWxhaGFuIDxwY2FsQGJlYS5jb20+Ci0gKi8KLS8qcGFja2FnZSovCi0KLWZpbmFsIGNsYXNzIFJQYXJhbWV0ZXIgZXh0ZW5kcyBCYXNlSkVsZW1lbnQKLSAgICAgICAgaW1wbGVtZW50cyBKUGFyYW1ldGVyIHsKLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gRmFjdG9yeQotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgSlBhcmFtZXRlcltdIGNyZWF0ZVBhcmFtZXRlcnMKLSAgICAgICAgICAoQ2xhc3NbXSB0eXBlcywgSkVsZW1lbnQgcGFyZW50LCBKQ2xhc3NMb2FkZXIgbG9hZGVyKSB7Ci0gICAgSlBhcmFtZXRlcltdIG91dCA9IG5ldyBKUGFyYW1ldGVyW3R5cGVzLmxlbmd0aF07Ci0gICAgLy9SRVZJRVcgbWF5YmUgd2Ugd2FudCB0byBleHBvc2UgYW4gaW50ZXJmYWNlIHRvIG1ha2UgdGhlIG5hbWluZwotICAgIC8vcnVsZSBwbHVnZ2FibGU/Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdXQubGVuZ3RoOyBpKyspIHsKLSAgICAgIG91dFtpXSA9IG5ldyBSUGFyYW1ldGVyKCJwYXJhbSIgKyBpLAotICAgICAgICAgICAgICBnZXRDbGFzc1NhZmVseSh0eXBlc1tpXS5nZXROYW1lKCksIGxvYWRlciksCi0gICAgICAgICAgICAgIHBhcmVudCk7Ci0gICAgfQotICAgIHJldHVybiBvdXQ7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gVmFyaWFibGVzCi0KLSAgcHJpdmF0ZSBKRWxlbWVudCBtUGFyZW50OwotICBwcml2YXRlIFN0cmluZyBtTmFtZTsKLSAgcHJpdmF0ZSBKQ2xhc3MgbVR5cGU7Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIENvbnN0cnVjdG9ycwotCi0gIHByaXZhdGUgUlBhcmFtZXRlcihTdHJpbmcgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgIEpDbGFzcyB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgSkVsZW1lbnQgcGFyZW50KSB7Ci0gICAgbU5hbWUgPSBuYW1lOwotICAgIG1UeXBlID0gdHlwZTsKLSAgICBtUGFyZW50ID0gcGFyZW50OwotICB9Ci0KLSAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIC8vIEpFbGVtZW50IGltcGxlbWVudGF0aW9uCi0KLSAgcHVibGljIEpFbGVtZW50IGdldFBhcmVudCgpIHsKLSAgICByZXR1cm4gbVBhcmVudDsKLSAgfQotCi0gIHB1YmxpYyBKRWxlbWVudFtdIGdldENoaWxkcmVuKCkgewotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBnZXRTaW1wbGVOYW1lKCkgewotICAgIHJldHVybiBtTmFtZTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UXVhbGlmaWVkTmFtZSgpIHsKLSAgICByZXR1cm4gbU5hbWU7Ci0gIH0gLy9GSVhNRQotCi0gIHB1YmxpYyBKU291cmNlUG9zaXRpb24gZ2V0U291cmNlUG9zaXRpb24oKSB7Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gQmFzZUpFbGVtZW50IGltcGxlbWVudGF0aW9uCi0KLSAgLyoqCi0gICAqIFdlIGNhbid0IGltcGxlbWVudCB0aGlzIHVudGlsIEpTUjE3NSBpcyBoZXJlLgotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgZ2V0TG9jYWxBbm5vdGF0aW9ucyhDb2xsZWN0aW9uIG91dCkgewotICB9Ci0KLSAgLyoqCi0gICAqIFdlIGNhbid0IGV2ZXIgaW1wbGVtZW50IHRoaXMuCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBnZXRMb2NhbENvbW1lbnRzKENvbGxlY3Rpb24gb3V0KSB7Ci0gIH0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgLy8gSlBhcmFtZXRlciBpbXBsZW1lbnRhdGlvbgotCi0gIHB1YmxpYyBKQ2xhc3MgZ2V0VHlwZSgpIHsKLSAgICByZXR1cm4gbVR5cGU7Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL3JlZmxlY3QvcGFja2FnZS5odG1sIGIvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL2ludGVybmFsL3JlZmxlY3QvcGFja2FnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGM2YzRhLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYW0vb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2phbS9pbnRlcm5hbC9yZWZsZWN0L3BhY2thZ2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPGJvZHk+Ci0gIEludGVybmFsIHVzZSBvbmx5LiAgVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHJlZmxlY3Rpb24tYmFzZWQKLSAgSkFNIGltcGxlbWVudGF0aW9uIGNsYXNzZXMuCi08L2JvZHk+CmRpZmYgLS1naXQgYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vcGFja2FnZS5odG1sIGIvdjIvc3JjL2phbS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamFtL3BhY2thZ2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTMwYjgyMC4uMDAwMDAwMAotLS0gYS92Mi9zcmMvamFtL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYW0vcGFja2FnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPGJvZHk+Ci0KLTxwPgotVGhlIEphdmEgQWJzdHJhY3Rpb24gTW9kZWwgKEpBTSkgcHJvdmlkZXMgYSByZXByZXNlbnRhdGlvbiBvZgotSmF2YSBhYnN0cmFjdGlvbnMgKHN1Y2ggYXMgY2xhc3NlcyBhbmQgbWV0aG9kcykgYW5kIHRoZWlyIAotYXNzb2NpYXRlZCBtZXRhZGF0YS4gIFRoaXMgbW9kZWwgc2VydmVzIHRvIGRlY291cGxlIGl0cyBjbGllbnRzJyBjb2RlIAotZnJvbSBhbnkgc3BlY2lmaWMgaW50cm9zcGVjdGlvbiBtZWNoYW5pc20gc3VjaCBhcyBqYXZhZG9jIG9yIHJlZmxlY3Rpb24uCi08L3A+Ci0KLTxwPlRoaXMgYXBwcm9hY2ggaGFzIHNldmVyYWwga2V5IGFkdmFudGFnZXM6PC9wPgotPHVsPgotCi0gIDxsaT48Yj5BIHVuaWZpZWQgaW50cm9zcGVjdGlvbiBBUEkgZm9yIHNvdXJjZXMgYW5kIGNsYXNzZXMuPC9iPgotICBJbiBmYWN0LCBzb3VyY2UtIGFuZCBjbGFzcy1iYXNlZCByZXByZXNlbnRhdGlvbnMgY2FuIGJlIGZyZWVseSAKLSAgaW50ZXJ3b3ZlbiwgaWYgZGVzaXJlZC48L2xpPgotPHA+Ci0gIDxsaT48Yj5BIG1lYXN1cmUgb2YgY2VydGFpbnR5IGluIGFuIHVuY2VydGFpbiB3b3JsZC48L2I+Ci0gIE1ldGFkYXRhIGlzIGEgaG90IHRvcGljIGF0IHRoZSBtb21lbnQsIGFuZCB0aGUgd2F5IHdlIGRlYWwgd2l0aCBpdAotICBpcyBnb2luZyB0byBjaGFuZ2UgZHJhbWF0aWNhbGx5IG92ZXIgdGhlIG5leHQgeWVhciBvciB0d28uCi0gIEJ5IHdyaXRpbmcgdG8gdGhlIEpBTSBBUEksIHlvdSBjYW4gYmUgc3VyZSB0aGF0IHlvdSB3b24ndAotICBoYXZlIHRvIHJld3JpdGUgeW91ciBjb2RlIHRvIGFjY29tbW9kYXRlIGVtZXJnaW5nIHRvb2xzIGFuZCBzdGFuZGFyZHMKLSAgKEpTUjE3NSwgZm9yIGV4YW1wbGUpLjwvbGk+Ci08cD4KLSAgPGxpPjxiPlBsdWdnYWJsZSBtZXRhZGF0YSBzdG9yZXMuPC9iPgotICBNZXRhZGF0YSBjYW4gYmUgcmV0cmlldmVkIGZyb20gYW4gZXh0ZXJuYWwgc291cmNlIChzdWNoIGFzIGFuIFhNTCBmaWxlKSAKLSAgb3IgZXZlbiBnZW5lcmF0ZWQgcHJvZ3JhbW1hdGljYWxseS4gIFRoaXMgYWxzbyBhbGxvd3MgbWV0YWRhdGEgdG8gCi0gIGJlIGFzc29jaWF0ZWQgd2l0aCBqYXZhIGNvbnN0cnVjdHMgdGhhdCBtYXkgbm90IG5vcm1hbGx5IHN1cHBvcnQgCi0gIGFubm90YXRpb25zIChzdWNoIGFzIHBhY2thZ2VzKS48L2xpPgotPHA+Ci0gIDxsaT48Yj5BIE5vZGUtYmFzZWQgdmlldyBvZiBKYXZhIGNvbnN0cnVjdHMuPC9iPiAKLSAgSkFNIGNsaWVudHMgaGF2ZSB0aGUgb3B0aW9uIG9mIHZpZXdpbmcgdGhlaXIgamF2YSBjb25zdHJ1Y3RzIGFzIGEgdHJlZSAKLSAgb2YgZ2VuZXJpYywgRE9NLWxpa2Ugbm9kZXMgKHBhY2thZ2VzIGNvbnRhaW4gY2xhc3NlcywgY2xhc3NlcyBjb250YWluIAotICBtZXRob2RzKSBlYWNoIG9mIHdoaWNoIG1heSBoYXZlIGFzc29jaWF0ZWQgYW5ub3RhdGlvbnMuICBUaGlzIGlzIAotICBleHRyZW1lbHkgaGVscGZ1bCBmb3IgdG9vbHMgd2hpY2ggd2lzaCB0byBzdXBwb3J0IGFubm90YXRpb24KLSAgaW5oZXJpdGFuY2UuPC9saT4KLQotPC91bD4KLQotPC9ib2R5PgpkaWZmIC0tZ2l0IGEvdjIvc3JjL2pheGIvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2pheGIvY29tcGlsZXIvQ29tcG9uZW50SW5mby5qYXZhIGIvdjIvc3JjL2pheGIvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2pheGIvY29tcGlsZXIvQ29tcG9uZW50SW5mby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTExYTUxLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYXhiL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYXhiL2NvbXBpbGVyL0NvbXBvbmVudEluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYXhiLmNvbXBpbGVyOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkNvbnN0cnVjdG9yOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ29tcG9uZW50SW5mbwotewotICAgIHByaXZhdGUgU3RyaW5nIF9mdWxsSmF2YUludGZOYW1lOwotICAgIHByaXZhdGUgU3RyaW5nIF9mdWxsSmF2YUltcGxOYW1lOwotICAgIHByaXZhdGUgU3RyaW5nIF9zaG9ydEphdmFJbnRmTmFtZTsKLSAgICBwcml2YXRlIFN0cmluZyBfc2hvcnRKYXZhSW1wbE5hbWU7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgX2Jhc2VJbnRmTmFtZTsKLSAgICBwcml2YXRlIFN0cmluZyBfYmFzZUltcGxOYW1lOwotICAgIHByaXZhdGUgaW50IF9zdXBlckN0ckFyZ0NvdW50OwotCi0gICAgLy8gcnVudGltZSBzdXBwb3J0Ci0gICAgcHJpdmF0ZSB2b2xhdGlsZSBib29sZWFuICAgICBfaW1wbE5vdEF2YWlsYWJsZTsKLSAgICBwcml2YXRlIHZvbGF0aWxlIENsYXNzICAgICAgIF9qYXZhSW1wbENsYXNzOwotICAgIHByaXZhdGUgdm9sYXRpbGUgQ29uc3RydWN0b3IgX2phdmFJbXBsQ29uc3RydWN0b3I7Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEZ1bGxKYXZhSW50Zk5hbWUoKSB7Ci0gICAgICAgIHJldHVybiBfZnVsbEphdmFJbnRmTmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNob3J0SmF2YUludGZOYW1lKCkgewotICAgICAgICByZXR1cm4gX3Nob3J0SmF2YUludGZOYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEZ1bGxKYXZhSW50Zk5hbWUoU3RyaW5nIGludGZOYW1lKSB7Ci0gICAgICAgIF9mdWxsSmF2YUludGZOYW1lID0gaW50Zk5hbWU7Ci0KLSAgICAgICAgaW50IGluZGV4ID0gTWF0aC5tYXgoX2Z1bGxKYXZhSW50Zk5hbWUubGFzdEluZGV4T2YoJyQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Z1bGxKYXZhSW50Zk5hbWUubGFzdEluZGV4T2YoJy4nKSkgKyAxOwotCi0gICAgICAgIF9zaG9ydEphdmFJbnRmTmFtZSA9IF9mdWxsSmF2YUludGZOYW1lLnN1YnN0cmluZyhpbmRleCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGdWxsSmF2YUltcGxOYW1lKCkgewotICAgICAgICByZXR1cm4gX2Z1bGxKYXZhSW1wbE5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTaG9ydEphdmFJbXBsTmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIF9zaG9ydEphdmFJbXBsTmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRGdWxsSmF2YUltcGxOYW1lKFN0cmluZyBpbXBsTmFtZSkgewotICAgICAgICBfZnVsbEphdmFJbXBsTmFtZSA9IGltcGxOYW1lOwotCi0gICAgICAgIGludCBpbmRleCA9IE1hdGgubWF4KF9mdWxsSmF2YUltcGxOYW1lLmxhc3RJbmRleE9mKCckJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9mdWxsSmF2YUltcGxOYW1lLmxhc3RJbmRleE9mKCcuJykpICsgMTsKLQotICAgICAgICBfc2hvcnRKYXZhSW1wbE5hbWUgPSBfZnVsbEphdmFJbXBsTmFtZS5zdWJzdHJpbmcoaW5kZXgpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEJhc2VJbnRmTmFtZShTdHJpbmcgYmFzZVR5cGUpCi0gICAgewotICAgICAgICBfYmFzZUludGZOYW1lID0gYmFzZVR5cGU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRCYXNlSW50Zk5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9iYXNlSW50Zk5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0QmFzZUltcGxOYW1lKFN0cmluZyBiYXNldHlwZSkKLSAgICB7Ci0gICAgICAgIF9iYXNlSW1wbE5hbWUgPSBiYXNldHlwZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEJhc2VJbXBsTmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gX2Jhc2VJbXBsTmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldFN1cGVyQ3RyQXJnQ291bnQoKSB7Ci0gICAgICAgIHJldHVybiBfc3VwZXJDdHJBcmdDb3VudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRTdXBlckN0ckFyZ0NvdW50KGludCBjb3VudCkgewotICAgICAgICBfc3VwZXJDdHJBcmdDb3VudCA9IGNvdW50OwotICAgIH0KLQotICAgIHB1YmxpYyBDbGFzcyBnZXRKYXZhSW1wbENsYXNzKENsYXNzTG9hZGVyIGNsKSB7Ci0gICAgICAgIGlmIChfaW1wbE5vdEF2YWlsYWJsZSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIGlmIChfamF2YUltcGxDbGFzcyA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIGlmIChnZXRGdWxsSmF2YUltcGxOYW1lKCkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgX2phdmFJbXBsQ2xhc3MgPSBDbGFzcy5mb3JOYW1lKGdldEZ1bGxKYXZhSW1wbE5hbWUoKSwgZmFsc2UsIGNsKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIF9pbXBsTm90QXZhaWxhYmxlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBfaW1wbE5vdEF2YWlsYWJsZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gX2phdmFJbXBsQ2xhc3M7Ci0gICAgfQotCi0gICAgcHVibGljIENvbnN0cnVjdG9yIGdldEphdmFJbXBsQ29uc3RydWN0b3IoQ2xhc3NMb2FkZXIgY2wpCi0gICAgewotICAgICAgICBpZiAoX2phdmFJbXBsQ29uc3RydWN0b3IgPT0gbnVsbCAmJiAhX2ltcGxOb3RBdmFpbGFibGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZpbmFsIENsYXNzIGltcGwgPSBnZXRKYXZhSW1wbENsYXNzKGNsKTsKLSAgICAgICAgICAgIGlmIChpbXBsID09IG51bGwpIHJldHVybiBudWxsOwotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2phdmFJbXBsQ29uc3RydWN0b3IgPSBpbXBsLmdldENvbnN0cnVjdG9yKG51bGwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gX2phdmFJbXBsQ29uc3RydWN0b3I7Ci0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvamF4Yi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamF4Yi9jb21waWxlci9FbGVtZW50SW5mby5qYXZhIGIvdjIvc3JjL2pheGIvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2pheGIvY29tcGlsZXIvRWxlbWVudEluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVlMGQzZS4uMDAwMDAwMAotLS0gYS92Mi9zcmMvamF4Yi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamF4Yi9jb21waWxlci9FbGVtZW50SW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamF4Yi5jb21waWxlcjsKLQotcHVibGljIGNsYXNzIEVsZW1lbnRJbmZvIGV4dGVuZHMgQ29tcG9uZW50SW5mbyB7Ci0gICAgcHVibGljIHN0YXRpYyBpbnQgTk9fVkFMVUUgPSAtMTsKLSAgICBwcml2YXRlIGludCBfdmFsdWVUeXBlID0gTk9fVkFMVUU7Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRWYWx1ZVR5cGUoaW50IHZhbHVlVHlwZSkKLSAgICB7Ci0gICAgICAgIF92YWx1ZVR5cGUgPSB2YWx1ZVR5cGU7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRWYWx1ZVR5cGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF92YWx1ZVR5cGU7Ci0gICAgfQotCi0KLQotfQotCmRpZmYgLS1naXQgYS92Mi9zcmMvamF4Yi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamF4Yi9jb21waWxlci9KYXhiQ29kZUdlbmVyYXRvci5qYXZhIGIvdjIvc3JjL2pheGIvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2pheGIvY29tcGlsZXIvSmF4YkNvZGVHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkwYjg0Ny4uMDAwMDAwMAotLS0gYS92Mi9zcmMvamF4Yi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamF4Yi9jb21waWxlci9KYXhiQ29kZUdlbmVyYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI5ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmpheGIuY29tcGlsZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLWltcG9ydCBqYXZhLmlvLio7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVN5c3RlbTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUdsb2JhbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFMb2NhbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uTmFtZVV0aWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5YbWxFcnJvcldhdGNoZXI7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamF4Yi5jb25maWcuSmF4YkNvbmZpZ0RvY3VtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYXhiLmNvbmZpZy5KYXhiQ29uZmlnRG9jdW1lbnQuSmF4YkNvbmZpZzsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamF4Yi5jb25maWcuSmF4YkNvbmZpZ0RvY3VtZW50LkpheGJDb25maWcuR2xvYmFsRWxlbWVudHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmpheGIuY29uZmlnLkpheGJDb25maWdEb2N1bWVudC5KYXhiQ29uZmlnLkdsb2JhbFR5cGVzOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYXhiLmNvbmZpZy5HbG9iYWxFbGVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYXhiLmNvbmZpZy5HbG9iYWxUeXBlOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgSmF4YkNvZGVHZW5lcmF0b3IKLXsKLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gY29tcGlsZShTY2hlbWFUeXBlU3lzdGVtIHN0cywgTGlzdCBzb3VyY2VmaWxlcywgRmlsZSBzb3VyY2VkaXIsIEZpbGUgY2xhc3Nlc2RpciwgWG1sRXJyb3JXYXRjaGVyIGVycm9ycykKLSAgICB7Ci0gICAgICAgIE1hcCBjb21wb25lbnREYXRhID0gbmV3IExpbmtlZEhhc2hNYXAoKTsKLSAgICAgICAgTWFwIHBhY2thZ2VEYXRhID0gbmV3IExpbmtlZEhhc2hNYXAoKTsKLSAgICAgICAgYm9vbGVhbiBmYWlsdXJlID0gZmFsc2U7Ci0KLSAgICAgICAgaWYgKCAhIEpheGJKYXZhaXplci5qYXZhaXplKHN0cywgY29tcG9uZW50RGF0YSwgcGFja2FnZURhdGEsIGVycm9ycykgKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIEpheGJDb25maWdEb2N1bWVudCBkb2MgPSBKYXhiQ29uZmlnRG9jdW1lbnQuRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgICBKYXhiQ29uZmlnIHJvb3QgPSBkb2MuYWRkTmV3SmF4YkNvbmZpZygpOwotICAgICAgICBHbG9iYWxFbGVtZW50cyBlbHRzID0gcm9vdC5hZGROZXdHbG9iYWxFbGVtZW50cygpOwotICAgICAgICBHbG9iYWxUeXBlcyB0eXBlcyA9IHJvb3QuYWRkTmV3R2xvYmFsVHlwZXMoKTsKLQotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gcGFja2FnZURhdGEudmFsdWVzKCkuaXRlcmF0b3IoKSA7IGl0Lmhhc05leHQoKSA7ICkKLSAgICAgICAgewotICAgICAgICAgICAgUGFja2FnZUluZm8gcGkgPSAoUGFja2FnZUluZm8pIGl0Lm5leHQoKTsKLQotICAgICAgICAgICAgV3JpdGVyIHdyaXRlciA9IG51bGw7Ci0gICAgICAgICAgICB0cnkgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gRmlyc3QgY29uc3RydWN0IHRoZSBqYXhiLnByb3BlcnRpZXMgZmlsZSBmb3IgdGhpcyBwYWNrYWdlCi0gICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gcGkuZ2V0UGFja2FnZU5hbWUoKS5yZXBsYWNlKCcuJywgJy8nKSArICIvamF4Yi5wcm9wZXJ0aWVzIjsKLSAgICAgICAgICAgICAgICBGaWxlIHNvdXJjZWZpbGUgPSBuZXcgRmlsZShjbGFzc2VzZGlyLCBmaWxlbmFtZSk7Ci0gICAgICAgICAgICAgICAgc291cmNlZmlsZS5nZXRQYXJlbnRGaWxlKCkubWtkaXJzKCk7Ci0KLSAgICAgICAgICAgICAgICB3cml0ZXIgPSBuZXcgRmlsZVdyaXRlcihzb3VyY2VmaWxlKTsKLSAgICAgICAgICAgICAgICBKYXhiQ29kZVByaW50ZXIucHJpbnRQYWNrYWdlUHJvcGVydGllcyh3cml0ZXIsIHBpKTsKLSAgICAgICAgICAgICAgICB3cml0ZXIuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICB3cml0ZXIgPSBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJJTyBFcnJvciAiICsgZSk7Ci0gICAgICAgICAgICAgICAgZmFpbHVyZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICB0cnkgeyBpZiAod3JpdGVyICE9IG51bGwpIHdyaXRlci5jbG9zZSgpOyB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7fQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUT0RPOiBnZW5lcmF0ZSBPYmplY3RGYWN0b3J5IGNsYXNzCi0KLQotICAgICAgICAgICAgLy8gR2VuZXJhdGUgdGhlIGludGVyZmFjZXMgJiBpbXBsZW1lbnRhdGlvbnMgZm9yIHRoZSBzY2hlbWEgY29tcG9uZW50cwotICAgICAgICAgICAgTGlzdCBhbGxDb21wb25lbnRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAgICAgYWxsQ29tcG9uZW50cy5hZGRBbGwoQXJyYXlzLmFzTGlzdChzdHMuZ2xvYmFsRWxlbWVudHMoKSkpOwotICAgICAgICAgICAgYWxsQ29tcG9uZW50cy5hZGRBbGwoQXJyYXlzLmFzTGlzdChzdHMuZ2xvYmFsVHlwZXMoKSkpOwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMCwgbGVuID0gYWxsQ29tcG9uZW50cy5zaXplKCkgOyBpIDwgbGVuIDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNjaGVtYUNvbXBvbmVudCBzYyA9IChTY2hlbWFDb21wb25lbnQpYWxsQ29tcG9uZW50cy5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgQ29tcG9uZW50SW5mbyBjaSA9IChDb21wb25lbnRJbmZvKWNvbXBvbmVudERhdGEuZ2V0KHNjKTsKLQotICAgICAgICAgICAgICAgIGFkZENvbXBvbmVudFRvQ29uZmlnKHNjLCBjaSwgcm9vdCk7Ci0KLSAgICAgICAgICAgICAgICBhc3NlcnQgY2kgIT0gbnVsbDsKLQotICAgICAgICAgICAgICAgIFN0cmluZyBmaWxlbmFtZSA9IGNpLmdldEZ1bGxKYXZhSW50Zk5hbWUoKS5yZXBsYWNlKCcuJywgJy8nKSArICIuamF2YSI7Ci0KLSAgICAgICAgICAgICAgICAvLyBwcmludCB0aGUgamF2YSBpbnRlcmZhY2UKLQotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIEZpbGUgc291cmNlZmlsZSA9IG5ldyBGaWxlKHNvdXJjZWRpciwgIGZpbGVuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgc291cmNlZmlsZS5nZXRQYXJlbnRGaWxlKCkubWtkaXJzKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gbmV3IEZpbGVXcml0ZXIoc291cmNlZmlsZSk7Ci0gICAgICAgICAgICAgICAgICAgIEpheGJDb2RlUHJpbnRlci5wcmludEphdmFJbnRlcmZhY2Uod3JpdGVyLCBzYywgY2kpOwotICAgICAgICAgICAgICAgICAgICB3cml0ZXIuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgc291cmNlZmlsZXMuYWRkKHNvdXJjZWZpbGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiSU8gRXJyb3IgIiArIGUpOwotICAgICAgICAgICAgICAgICAgICBmYWlsdXJlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7IGlmICh3cml0ZXIgIT0gbnVsbCkgd3JpdGVyLmNsb3NlKCk7IH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gcHJpbnQgdGhlIGphdmEgaW1wbAotCi0KLSAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IGNpLmdldEZ1bGxKYXZhSW1wbE5hbWUoKS5yZXBsYWNlKCcuJywgJy8nKSArICIuamF2YSI7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgRmlsZSBzb3VyY2VmaWxlID0gbmV3IEZpbGUoc291cmNlZGlyLCAgZmlsZW5hbWUpOwotICAgICAgICAgICAgICAgICAgICBzb3VyY2VmaWxlLmdldFBhcmVudEZpbGUoKS5ta2RpcnMoKTsKLQotICAgICAgICAgICAgICAgICAgICB3cml0ZXIgPSBuZXcgRmlsZVdyaXRlcihzb3VyY2VmaWxlKTsKLSAgICAgICAgICAgICAgICAgICAgSmF4YkNvZGVQcmludGVyLnByaW50SmF2YUltcGwod3JpdGVyLCBzYywgY2kpOwotICAgICAgICAgICAgICAgICAgICB3cml0ZXIuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgc291cmNlZmlsZXMuYWRkKHNvdXJjZWZpbGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiSU8gRXJyb3IgIiArIGUpOwotICAgICAgICAgICAgICAgICAgICBmYWlsdXJlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7IGlmICh3cml0ZXIgIT0gbnVsbCkgd3JpdGVyLmNsb3NlKCk7IH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLQotICAgICAgICAvLyBTYXZlIG91dCB0aGUgamF4YiBjb25maWcgZmlsZQotCi0gICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IG51bGw7Ci0gICAgICAgIHRyeSAKLSAgICAgICAgewotICAgICAgICAgICAgLy8gRmlyc3QgY29uc3RydWN0IHRoZSBqYXhiLnByb3BlcnRpZXMgZmlsZSBmb3IgdGhpcyBwYWNrYWdlCi0gICAgICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSBzdHMuZ2V0TmFtZSgpLnJlcGxhY2UoJy4nLCAnLycpICsgIi9KYXhiQ29uZmlnLnhtbCI7Ci0gICAgICAgICAgICBGaWxlIHNvdXJjZWZpbGUgPSBuZXcgRmlsZShjbGFzc2VzZGlyLCBmaWxlbmFtZSk7Ci0gICAgICAgICAgICBzb3VyY2VmaWxlLmdldFBhcmVudEZpbGUoKS5ta2RpcnMoKTsKLQotICAgICAgICAgICAgb3MgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShzb3VyY2VmaWxlKTsKLSAgICAgICAgICAgIGRvYy5zYXZlKG9zKTsKLSAgICAgICAgICAgIG9zLmNsb3NlKCk7Ci0gICAgICAgICAgICBvcyA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiSU8gRXJyb3IgIiArIGUpOwotICAgICAgICAgICAgZmFpbHVyZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWxseSB7Ci0gICAgICAgICAgICB0cnkgeyBpZiAob3MgIT0gbnVsbCkgb3MuY2xvc2UoKTsgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkge30KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBmYWlsdXJlOwotCi0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgYWRkQ29tcG9uZW50VG9Db25maWcoU2NoZW1hQ29tcG9uZW50IHNjLCBDb21wb25lbnRJbmZvIGNpLCBKYXhiQ29uZmlnIGNvbmZpZykKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoc2MuZ2V0Q29tcG9uZW50VHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYUNvbXBvbmVudC5FTEVNRU5UOgotICAgICAgICAgICAgICAgIEdsb2JhbEVsZW1lbnQgZWx0ID0gY29uZmlnLmdldEdsb2JhbEVsZW1lbnRzKCkuYWRkTmV3R2xvYmFsRWxlbWVudCgpOwotICAgICAgICAgICAgICAgIGVsdC5zZXRRbmFtZShzYy5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgIGVsdC5zZXRKYXZhSW1wbChjaS5nZXRGdWxsSmF2YUltcGxOYW1lKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLQotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2pheGIvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2pheGIvY29tcGlsZXIvSmF4YkNvZGVQcmludGVyLmphdmEgYi92Mi9zcmMvamF4Yi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamF4Yi9jb21waWxlci9KYXhiQ29kZVByaW50ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDEwYmZjZC4uMDAwMDAwMAotLS0gYS92Mi9zcmMvamF4Yi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamF4Yi9jb21waWxlci9KYXhiQ29kZVByaW50ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzMiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYXhiLmNvbXBpbGVyOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci1pbXBvcnQgamF2YS5pby4qOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVTeXN0ZW07Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFHbG9iYWxFbGVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hTG9jYWxFbGVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVByb3BlcnR5OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uTmFtZVV0aWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5YbWxFcnJvcldhdGNoZXI7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBKYXhiQ29kZVByaW50ZXIKLXsKLSAgICBXcml0ZXIgX3dyaXRlcjsKLSAgICBpbnQgX2luZGVudDsKLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIExJTkVfU0VQQVJBVE9SID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpID09IG51bGwgPyAiXG4iIDogU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOwotCi0gICAgc3RhdGljIGZpbmFsIGludCBNQVhfSU5ERU5UID0gNDA7Ci0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBNQVhfU1BBQ0VTID0gIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgSU5ERU5UX0lOQ1JFTUVOVCA9IDQ7Ci0KLSAgICBwdWJsaWMgSmF4YkNvZGVQcmludGVyKFdyaXRlciB3cml0ZXIpCi0gICAgewotICAgICAgICBfd3JpdGVyID0gd3JpdGVyOwotICAgICAgICBfaW5kZW50ID0gMDsKLSAgICB9Ci0KLSAgICB2b2lkIGluZGVudCgpCi0gICAgewotICAgICAgICBfaW5kZW50ICs9IElOREVOVF9JTkNSRU1FTlQ7Ci0gICAgfQotCi0gICAgdm9pZCBvdXRkZW50KCkKLSAgICB7Ci0gICAgICAgIF9pbmRlbnQgLT0gSU5ERU5UX0lOQ1JFTUVOVDsKLSAgICB9Ci0KLSAgICB2b2lkIHN0YXJ0QmxvY2soKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGVtaXQoInsiKTsKLSAgICAgICAgaW5kZW50KCk7Ci0gICAgfQotICAgIHZvaWQgZW5kQmxvY2soKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIG91dGRlbnQoKTsKLSAgICAgICAgZW1pdCgifSIpOwotICAgIH0KLQotICAgIHZvaWQgZW1pdChTdHJpbmcgcykgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBpbnQgaW5kZW50ID0gX2luZGVudDsKLSAgICAgICAgaWYgKGluZGVudCA+IE1BWF9JTkRFTlQgLyAyKQotICAgICAgICAgICAgaW5kZW50ID0gTUFYX0lOREVOVCAvIDQgKyBpbmRlbnQgLyAyOwotICAgICAgICBpZiAoaW5kZW50ID4gTUFYX0lOREVOVCkKLSAgICAgICAgICAgIGluZGVudCA9IE1BWF9JTkRFTlQ7Ci0gICAgICAgIF93cml0ZXIud3JpdGUoTUFYX1NQQUNFUy5zdWJzdHJpbmcoMCwgaW5kZW50KSk7Ci0gICAgICAgIF93cml0ZXIud3JpdGUocyk7Ci0gICAgICAgIF93cml0ZXIud3JpdGUoTElORV9TRVBBUkFUT1IpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludFBhY2thZ2VQcm9wZXJ0aWVzKFdyaXRlciB3LCBQYWNrYWdlSW5mbyBwaSkgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBKYXhiQ29kZVByaW50ZXIgcCA9IG5ldyBKYXhiQ29kZVByaW50ZXIodyk7Ci0gICAgICAgIHAucHJpbnRQYWNrYWdlUHJvcGVydGllcyhwaSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50SmF2YUludGVyZmFjZShXcml0ZXIgdywgU2NoZW1hQ29tcG9uZW50IHNjLCBDb21wb25lbnRJbmZvIGNpKQotICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIEpheGJDb2RlUHJpbnRlciBwID0gbmV3IEpheGJDb2RlUHJpbnRlcih3KTsKLQotICAgICAgICBzd2l0Y2ggKHNjLmdldENvbXBvbmVudFR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTY2hlbWFDb21wb25lbnQuRUxFTUVOVDoKLSAgICAgICAgICAgICAgICBwLnByaW50RWxlbWVudCgoU2NoZW1hR2xvYmFsRWxlbWVudClzYywgKEVsZW1lbnRJbmZvKWNpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRKYXZhSW1wbChXcml0ZXIgdywgU2NoZW1hQ29tcG9uZW50IHNjLCBDb21wb25lbnRJbmZvIGNpKQotICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIEpheGJDb2RlUHJpbnRlciBwID0gbmV3IEpheGJDb2RlUHJpbnRlcih3KTsKLQotICAgICAgICBzd2l0Y2ggKHNjLmdldENvbXBvbmVudFR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTY2hlbWFDb21wb25lbnQuRUxFTUVOVDoKLSAgICAgICAgICAgICAgICBwLnByaW50RWxlbWVudEltcGwoKFNjaGVtYUdsb2JhbEVsZW1lbnQpc2MsIChFbGVtZW50SW5mbyljaSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBwcmludFBhY2thZ2VQcm9wZXJ0aWVzKFBhY2thZ2VJbmZvIHBpKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGVtaXQoIiMiICsgbmV3IERhdGUoKSk7Ci0gICAgICAgIGVtaXQoImphdmF4LnhtbC5iaW5kLmNvbnRleHQuZmFjdG9yeT1vcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamF4Yi5ydW50aW1lLkNvbnRleHRJbXBsIik7Ci0gICAgICAgIGVtaXQoIm9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYXhiLlR5cGVTeXN0ZW1Ib2xkZXI9IiArIHBpLmdldEluZGV4Q2xhc3NOYW1lKCkpOwotICAgIH0KLQotICAgIHZvaWQgcHJpbnRFbGVtZW50KFNjaGVtYUdsb2JhbEVsZW1lbnQgZWx0LCBFbGVtZW50SW5mbyBlaSkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBwcmludFRvcENvbW1lbnQoZWx0LCBlaSwgdHJ1ZSk7Ci0gICAgICAgIHByaW50UGFja2FnZShlbHQsIGVpLCB0cnVlKTsKLSAgICAgICAgcHJpbnRFbGVtZW50Qm9keShlbHQsIGVpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHByaW50RWxlbWVudEltcGwoU2NoZW1hR2xvYmFsRWxlbWVudCBlbHQsIEVsZW1lbnRJbmZvIGVpKQotICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHByaW50VG9wQ29tbWVudChlbHQsIGVpLCBmYWxzZSk7Ci0gICAgICAgIHByaW50UGFja2FnZShlbHQsIGVpLCBmYWxzZSk7Ci0gICAgICAgIHByaW50RWxlbWVudEltcGxCb2R5KGVsdCwgZWkpOwotICAgIH0KLQotICAgIHZvaWQgcHJpbnRUb3BDb21tZW50KFNjaGVtYUNvbXBvbmVudCBzYywgQ29tcG9uZW50SW5mbyBjaSwgYm9vbGVhbiBpbnRmKQotICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGVtaXQoIi8qIik7Ci0gICAgICAgIGVtaXQoIiAqIFhNTCBUeXBlOiAgIiArIHNjLmdldE5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICAgIGVtaXQoIiAqIE5hbWVzcGFjZTogIiArIHNjLmdldE5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICAgIGVtaXQoIiAqIEphdmEgdHlwZTogIiArICggaW50ZiA/IGNpLmdldEZ1bGxKYXZhSW50Zk5hbWUoKSA6IGNpLmdldEZ1bGxKYXZhSW1wbE5hbWUoKSkpOwotICAgICAgICBlbWl0KCIgKiIpOwotICAgICAgICBlbWl0KCIgKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCAtIGRvIG5vdCBtb2RpZnkuIik7Ci0gICAgICAgIGVtaXQoIiAqLyIpOwotICAgICAgICBlbWl0KCIiKTsKLSAgICB9Ci0KLSAgICB2b2lkIHByaW50UGFja2FnZShTY2hlbWFDb21wb25lbnQgc2MsIENvbXBvbmVudEluZm8gY2ksIGJvb2xlYW4gaW50ZikKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBTdHJpbmcgZnFqbjsKLSAgICAgICAgaWYgKGludGYpCi0gICAgICAgICAgICBmcWpuID0gY2kuZ2V0RnVsbEphdmFJbnRmTmFtZSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmcWpuID0gY2kuZ2V0RnVsbEphdmFJbXBsTmFtZSgpOwotCi0gICAgICAgIGludCBsYXN0ZG90ID0gZnFqbi5sYXN0SW5kZXhPZignLicpOwotICAgICAgICBhc3NlcnQgbGFzdGRvdCA+PSAwOwotCi0gICAgICAgIFN0cmluZyBwa2cgPSBmcWpuLnN1YnN0cmluZygwLCBsYXN0ZG90KTsKLSAgICAgICAgZW1pdCgicGFja2FnZSAiICsgcGtnICsgIjsiKTsKLSAgICAgICAgZW1pdCgiIik7Ci0gICAgfQotCi0gICAgdm9pZCBwcmludEVsZW1lbnRCb2R5KFNjaGVtYUdsb2JhbEVsZW1lbnQgZWx0LCBFbGVtZW50SW5mbyBlaSkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBwcmludElubmVyRWxlbWVudEphdmFEb2MoZWx0LCBlaSk7Ci0gICAgICAgIHN0YXJ0SW50ZXJmYWNlKGVsdCwgZWkpOwotICAgICAgICBzdGFydEJsb2NrKCk7Ci0KLSAgICAgICAgaWYgKGVpLmdldFZhbHVlVHlwZSgpICE9IEVsZW1lbnRJbmZvLk5PX1ZBTFVFKQotICAgICAgICAgICAgcHJpbnRQcm9wZXJ0eSgiVmFsdWUiLCBqYXZhVHlwZUZvckNvZGUoZWkuZ2V0VmFsdWVUeXBlKCkpLCBudWxsLCBmYWxzZSwgZWx0LmdldERlZmF1bHRUZXh0KCkpOwotCi0gICAgICAgIGVuZEJsb2NrKCk7Ci0KLSAgICB9Ci0KLSAgICB2b2lkIHByaW50RWxlbWVudEltcGxCb2R5KFNjaGVtYUdsb2JhbEVsZW1lbnQgZWx0LCBFbGVtZW50SW5mbyBlaSkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBlbWl0KCJwdWJsaWMgY2xhc3MgIiArIGVpLmdldFNob3J0SmF2YUltcGxOYW1lKCkgKyAiIGV4dGVuZHMgIiArIGVpLmdldEJhc2VJbXBsTmFtZSgpKTsKLSAgICAgICAgaW5kZW50KCk7Ci0gICAgICAgIGVtaXQoImltcGxlbWVudHMgIiArIGVpLmdldEZ1bGxKYXZhSW50Zk5hbWUoKSArICIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Iik7Ci0gICAgICAgIG91dGRlbnQoKTsKLSAgICAgICAgc3RhcnRCbG9jaygpOwotICAgICAgICBwcmludEVsZW1lbnRDb25zdHJ1Y3RvcihlbHQsIGVpKTsKLQotICAgICAgICBpZiAoZWkuZ2V0VmFsdWVUeXBlKCkgIT0gRWxlbWVudEluZm8uTk9fVkFMVUUpCi0gICAgICAgICAgICBwcmludFByb3BlcnR5SW1wbCgiVmFsdWUiLCBqYXZhVHlwZUZvckNvZGUoZWkuZ2V0VmFsdWVUeXBlKCkpLCBlaS5nZXRWYWx1ZVR5cGUoKSwgbnVsbCwgZmFsc2UsIGVsdC5nZXREZWZhdWx0VGV4dCgpLCB0cnVlKTsKLQotICAgICAgICBlbmRCbG9jaygpOwotICAgIH0KLQotICAgIHN0YXRpYyBTdHJpbmcgcHJldHR5UU5hbWUoUU5hbWUgcW5hbWUpCi0gICAgewotICAgICAgICBTdHJpbmcgcmVzdWx0ID0gcW5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgIGlmIChxbmFtZS5nZXROYW1lc3BhY2VVUkkoKSAhPSBudWxsKQotICAgICAgICAgICAgcmVzdWx0ICs9ICIoQCIgKyBxbmFtZS5nZXROYW1lc3BhY2VVUkkoKSArICIpIjsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICB2b2lkIHByaW50SmF2YURvYyhTdHJpbmcgY29tbWVudCkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBlbWl0KCIiKTsKLSAgICAgICAgZW1pdCgiLyoqIik7Ci0gICAgICAgIGVtaXQoIiAqICIgKyBjb21tZW50KTsKLSAgICAgICAgZW1pdCgiICovIik7Ci0gICAgfQotCi0gICAgdm9pZCBwcmludElubmVyRWxlbWVudEphdmFEb2MoU2NoZW1hR2xvYmFsRWxlbWVudCBlbHQsIEVsZW1lbnRJbmZvIGVpKQotICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGVtaXQoIi8qKiIpOwotICAgICAgICBlbWl0KCIgKiBKYXZhIGNvbnRlbnQgY2xhc3MgZm9yIGEgcm9vdCBlbGVtZW50IGRlY2xhcmF0aW9uIik7Ci0gICAgICAgIGVtaXQoIiAqIGNvbnRhaW5pbmcgb25lICIgKyBwcmV0dHlRTmFtZShlbHQuZ2V0TmFtZSgpKSArICIgZWxlbWVudC4iKTsKLSAgICAgICAgZW1pdCgiICovIik7Ci0gICAgfQotCi0gICAgdm9pZCBzdGFydEludGVyZmFjZShTY2hlbWFDb21wb25lbnQgc2MsIENvbXBvbmVudEluZm8gY2kpCi0gICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgU3RyaW5nIHNob3J0TmFtZSA9IGNpLmdldFNob3J0SmF2YUludGZOYW1lKCk7Ci0gICAgICAgIFN0cmluZyBleHRlbmQgPSBudWxsOwotCi0gICAgICAgIGlmIChzYy5nZXRDb21wb25lbnRUeXBlKCkgPT0gU2NoZW1hQ29tcG9uZW50LkVMRU1FTlQpCi0gICAgICAgICAgICBleHRlbmQgPSAiamF2YXgueG1sLmJpbmQuRWxlbWVudCI7Ci0KLSAgICAgICAgaWYgKGNpLmdldEJhc2VJbnRmTmFtZSgpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChleHRlbmQgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICBleHRlbmQgPSBjaS5nZXRCYXNlSW50Zk5hbWUoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBleHRlbmQgKz0gIiwgIiArIGNpLmdldEJhc2VJbnRmTmFtZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZW1pdCgicHVibGljIGludGVyZmFjZSAiICsgc2hvcnROYW1lICsgKGV4dGVuZCAhPSBudWxsID8gIiBleHRlbmRzICIgKyBleHRlbmQgOiAiIikpOwotICAgIH0KLQotICAgIHZvaWQgcHJpbnRQcm9wZXJ0eShTdHJpbmcgcHJvcG5hbWUsIFN0cmluZyBqYXZhdHlwZSwgU3RyaW5nIGNvbGxlY3Rpb250eXBlLCBib29sZWFuIG5pbGxhYmxlLCBTdHJpbmcgZGVmYXVsdHRleHQpCi0gICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgcHJpbnRKYXZhRG9jKCJHZXRzIHRoZSAiICsgcHJvcG5hbWUgKyAiIHByb3BlcnR5Iik7Ci0gICAgICAgIGVtaXQoamF2YXR5cGUgKyAiIGdldCIgKyBwcm9wbmFtZSArICIoKTsiKTsKLQotICAgICAgICBTdHJpbmcgc2FmZVZhck5hbWUgPSBOYW1lVXRpbC5ub25KYXZhS2V5d29yZChOYW1lVXRpbC5sb3dlckNhbWVsQ2FzZShwcm9wbmFtZSkpOwotCi0gICAgICAgIHByaW50SmF2YURvYygiU2V0cyB0aGUgIiArIHByb3BuYW1lICsgIiBwcm9wZXJ0eSIpOwotICAgICAgICBlbWl0KCJ2b2lkIHNldCIgKyBwcm9wbmFtZSArICIoIiArIGphdmF0eXBlICsgIiAiICsgc2FmZVZhck5hbWUgKyAiKTsiKTsKLSAgICB9Ci0KLSAgICB2b2lkIHByaW50UHJvcGVydHlJbXBsKFN0cmluZyBwcm9wbmFtZSwgU3RyaW5nIGphdmF0eXBlLCBpbnQgamF2YVR5cGVDb2RlLCBTdHJpbmcgY29sbGVjdGlvbnR5cGUsIGJvb2xlYW4gbmlsbGFibGUsIFN0cmluZyBkZWZhdWx0dGV4dCwgYm9vbGVhbiB2YWx1ZSkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBlbWl0KCJwdWJsaWMgIiArIGphdmF0eXBlICsgIiBnZXQiICsgcHJvcG5hbWUgKyAiKCkiKTsKLSAgICAgICAgc3RhcnRCbG9jaygpOwotICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICBlbWl0KCJyZXR1cm4gIiArIGpnZXRNZXRob2ROYW1lRm9ySmF2YVR5cGVDb2RlKGphdmFUeXBlQ29kZSkgKyAiOyIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICA7IC8vIFRPRE8KLSAgICAgICAgZW5kQmxvY2soKTsKLQotICAgICAgICBTdHJpbmcgc2FmZVZhck5hbWUgPSBOYW1lVXRpbC5ub25KYXZhS2V5d29yZChOYW1lVXRpbC5sb3dlckNhbWVsQ2FzZShwcm9wbmFtZSkpOwotCi0gICAgICAgIGVtaXQoInB1YmxpYyB2b2lkIHNldCIgKyBwcm9wbmFtZSArICIoIiArIGphdmF0eXBlICsgIiAiICsgc2FmZVZhck5hbWUgKyAiKSIpOwotICAgICAgICBzdGFydEJsb2NrKCk7Ci0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIGVtaXQoInNldCgiICsgc2FmZVZhck5hbWUgKyAiKTsiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgOyAvLyBUT0RPCi0gICAgICAgIGVuZEJsb2NrKCk7Ci0gICAgfQotCi0gICAgdm9pZCBwcmludEVsZW1lbnRDb25zdHJ1Y3RvcihTY2hlbWFHbG9iYWxFbGVtZW50IGVsdCwgRWxlbWVudEluZm8gZWkpCi0gICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgLyoKLSAgICAgICAgU3RyaW5nIHN1cGVyYXJncyA9ICIiOwotICAgICAgICBpZiAoZWkuZ2V0U3VwZXJDdHJBcmdDb3VudCgpID09IDEpCi0gICAgICAgICAgICBzdXBlcmFyZ3MgPSAic1R5cGUiOwotICAgICAgICBlbHNlIGlmIChlaS5nZXRTdXBlckN0ckFyZ0NvdW50KCkgPT0gMikKLSAgICAgICAgICAgIHN1cGVyYXJncyA9ICJzVHlwZSwgZmFsc2UiOwotICAgICAgICAgICAgKi8KLQotICAgICAgICBlbWl0KCJwdWJsaWMgIiArIGVpLmdldFNob3J0SmF2YUltcGxOYW1lKCkgKyAiKCkiKTsKLSAgICAgICAgc3RhcnRCbG9jaygpOwotICAgICAgICAvLyBlbWl0KCJzdXBlcigiICsgc3VwZXJhcmdzICsgIik7Iik7Ci0gICAgICAgIGVuZEJsb2NrKCk7Ci0gICAgfQotCi0gICAgU3RyaW5nIGpnZXRNZXRob2ROYW1lRm9ySmF2YVR5cGVDb2RlKGludCBqYXZhVHlwZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgc3dpdGNoIChqYXZhVHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0JPT0xFQU46Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJib29sZWFuVmFsdWUoKSI7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9GTE9BVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0VmFsdWUoKSI7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9ET1VCTEU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJkb3VibGVWYWx1ZSgpIjsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0JZVEU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJieXRlVmFsdWUoKSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX1NIT1JUOgotICAgICAgICAgICAgICAgIHJldHVybiAic2hvcnRWYWx1ZSgpIjsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0lOVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gImludFZhbHVlKCkiOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfTE9ORzoKLSAgICAgICAgICAgICAgICByZXR1cm4gImxvbmdWYWx1ZSgpIjsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0JJR19ERUNJTUFMOgotICAgICAgICAgICAgICAgIHJldHVybiAiYmlnRGVjaW1hbFZhbHVlKCkiOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfQklHX0lOVEVHRVI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJiaWdJbnRlZ2VyVmFsdWUoKSI7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9TVFJJTkc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJzdHJpbmdWYWx1ZSgpIjsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0JZVEVfQVJSQVk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJieXRlQXJyYXlWYWx1ZSgpIjsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0NBTEVOREFSOgotICAgICAgICAgICAgICAgIHJldHVybiAiY2FsZW5kYXJWYWx1ZSgpIjsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX1FOQU1FOgotICAgICAgICAgICAgICAgIHJldHVybiAicU5hbWVWYWx1ZSgpIjsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9MSVNUOgotICAgICAgICAgICAgICAgIGVtaXQoInJldHVybiB0YXJnZXQubGlzdFZhbHVlKCk7Iik7IGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfRU5VTToKLSAgICAgICAgICAgICAgICBlbWl0KCJyZXR1cm4gKCIgKyB0eXBlICsgIil0YXJnZXQuZW51bVZhbHVlKCk7Iik7IGJyZWFrOwotICAgICAgICAgICAgICAgICovCi0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBTdHJpbmcgamF2YVR5cGVGb3JDb2RlKGludCBqYXZhVHlwZUNvZGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGphdmFUeXBlQ29kZSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0JPT0xFQU46Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJib29sZWFuIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9GTE9BVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0IjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9ET1VCTEU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJkb3VibGUiOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0JZVEU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJieXRlIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9TSE9SVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gInNob3J0IjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9JTlQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJpbnQiOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0xPTkc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJsb25nIjsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0JJR19ERUNJTUFMOgotICAgICAgICAgICAgICAgIHJldHVybiAiamF2YS5tYXRoLkJpZ0RlY2ltYWwiOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0JJR19JTlRFR0VSOgotICAgICAgICAgICAgICAgIHJldHVybiAiamF2YS5tYXRoLkJpZ0ludGVnZXIiOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX1NUUklORzoKLSAgICAgICAgICAgICAgICByZXR1cm4gImphdmEubGFuZy5TdHJpbmciOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0JZVEVfQVJSQVk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJieXRlW10iOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX1FOQU1FOgotICAgICAgICAgICAgICAgIHJldHVybiAiamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfQ0FMRU5EQVI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJqYXZhLnV0aWwuQ2FsZW5kYXIiOwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2pheGIvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2pheGIvY29tcGlsZXIvSmF4YkphdmFpemVyLmphdmEgYi92Mi9zcmMvamF4Yi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamF4Yi9jb21waWxlci9KYXhiSmF2YWl6ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzMzMWM4Mi4uMDAwMDAwMAotLS0gYS92Mi9zcmMvamF4Yi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamF4Yi9jb21waWxlci9KYXhiSmF2YWl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3MyArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYXhiLmNvbXBpbGVyOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVN5c3RlbTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUdsb2JhbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFMb2NhbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hUHJvcGVydHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5OYW1lVXRpbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlhtbEVycm9yV2F0Y2hlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hLlNjaGVtYVR5cGVDb2RlUHJpbnRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hLkJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgSmF4YkphdmFpemVyCi17Ci0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIGphdmFpemUoU2NoZW1hVHlwZVN5c3RlbSBzdHMsIE1hcCBjb21wb25lbnREYXRhLCBNYXAgcGFja2FnZXMsIFhtbEVycm9yV2F0Y2hlciBlcnJvcnMpCi0gICAgewotICAgICAgICBmaW5hbCBMaXN0IGFsbENvbXBvbmVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIGFsbENvbXBvbmVudHMuYWRkQWxsKEFycmF5cy5hc0xpc3Qoc3RzLmdsb2JhbEVsZW1lbnRzKCkpKTsKLSAgICAgICAgYWxsQ29tcG9uZW50cy5hZGRBbGwoQXJyYXlzLmFzTGlzdChzdHMuZ2xvYmFsVHlwZXMoKSkpOwotCi0gICAgICAgIGFzc2lnbkdsb2JhbE5hbWVzKGFsbENvbXBvbmVudHMsIGNvbXBvbmVudERhdGEsIHBhY2thZ2VzKTsKLQotICAgICAgICAvLyBOb3cgZnVsbHkgamF2YWl6ZSBldmVyeXRoaW5nIGRlZXBseQotCi0gICAgICAgIGZvciAoaW50IGkgPSAwICwgbGVuID0gYWxsQ29tcG9uZW50cy5zaXplKCkgOyBpIDwgbGVuIDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBTY2hlbWFDb21wb25lbnQgc2MgPSAoU2NoZW1hQ29tcG9uZW50KWFsbENvbXBvbmVudHMuZ2V0KGkpOwotICAgICAgICAgICAgamF2YWl6ZUNvbXBvbmVudChzYywgY29tcG9uZW50RGF0YSwgcGFja2FnZXMpOwotICAgICAgICAgICAgLy8gYWxsU2VlblR5cGVzLmFkZEFsbChBcnJheXMuYXNMaXN0KGdUeXBlLmdldEFub255bW91c1R5cGVzKCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vVE9ETzogY2hlY2sgZm9yIGFueSByZWFsIGVycm9yczoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgYXNzaWduR2xvYmFsTmFtZXMoTGlzdCBhbGxDb21wb25lbnRzLCBNYXAgY29tcG9uZW50RGF0YSwgTWFwIHBhY2thZ2VzKQotICAgIHsKLSAgICAgICAgU2V0IHVzZWROYW1lcyA9IG5ldyBIYXNoU2V0KCk7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDAgLCBsZW4gPSBhbGxDb21wb25lbnRzLnNpemUoKSA7IGkgPCBsZW4gOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYUNvbXBvbmVudCBzYyA9IChTY2hlbWFDb21wb25lbnQpYWxsQ29tcG9uZW50cy5nZXQoaSk7Ci0gICAgICAgICAgICBRTmFtZSBuYW1lID0gc2MuZ2V0TmFtZSgpOwotCi0gICAgICAgICAgICBDb21wb25lbnRJbmZvIGNpID0gZ2V0Q29tcG9uZW50SW5mbyhzYywgY29tcG9uZW50RGF0YSk7Ci0KLSAgICAgICAgICAgIGNpLnNldEZ1bGxKYXZhSW50Zk5hbWUocGlja0Z1bGxKYXZhSW50Zk5hbWUodXNlZE5hbWVzLCBuYW1lKSk7Ci0gICAgICAgICAgICBjaS5zZXRGdWxsSmF2YUltcGxOYW1lKHBpY2tGdWxsSmF2YUltcGxOYW1lKHVzZWROYW1lcywgY2kuZ2V0RnVsbEphdmFJbnRmTmFtZSgpKSk7Ci0KLSAgICAgICAgICAgIC8vIENvbnN0cnVjdCBhIG5ldyBQYWNrYWdlSW5mbyBvYmplY3QgZm9yIGVhY2ggdW5pcXVlIHBhY2thZ2UgbmFtZQotICAgICAgICAgICAgU3RyaW5nIHBrZ25hbWUgPSBnZXRQYWNrYWdlTmFtZShjaS5nZXRGdWxsSmF2YUludGZOYW1lKCkpOwotICAgICAgICAgICAgaWYgKCEgcGFja2FnZXMuY29udGFpbnNLZXkocGtnbmFtZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUGFja2FnZUluZm8gcGkgPSBuZXcgUGFja2FnZUluZm8ocGtnbmFtZSk7Ci0gICAgICAgICAgICAgICAgcGFja2FnZXMucHV0KHBrZ25hbWUsIHBpKTsKLSAgICAgICAgICAgICAgICBwaS5zZXRJbmRleENsYXNzTmFtZShTY2hlbWFUeXBlQ29kZVByaW50ZXIuaW5kZXhDbGFzc0ZvclN5c3RlbShzYy5nZXRUeXBlU3lzdGVtKCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgamF2YWl6ZUNvbXBvbmVudChTY2hlbWFDb21wb25lbnQgc2MsIE1hcCBjb21wb25lbnREYXRhLCBNYXAgcGFja2FnZXMpCi0gICAgewotICAgICAgICBzd2l0Y2goc2MuZ2V0Q29tcG9uZW50VHlwZSgpKSAKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTY2hlbWFDb21wb25lbnQuRUxFTUVOVDoKLSAgICAgICAgICAgICAgICBqYXZhaXplRWxlbWVudCgoU2NoZW1hR2xvYmFsRWxlbWVudClzYywgY29tcG9uZW50RGF0YSwgcGFja2FnZXMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYUNvbXBvbmVudC5UWVBFOgotICAgICAgICAgICAgICAgIGphdmFpemVUeXBlKChTY2hlbWFUeXBlKXNjLCBjb21wb25lbnREYXRhLCBwYWNrYWdlcyk7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0KLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBzZXRKYXZhSW1wbENsYXNzKFNjaGVtYVR5cGUgc1R5cGUsIENvbXBvbmVudEluZm8gY2kpIHsKLSAgICAgICAgU2NoZW1hVHlwZSBwVHlwZSA9IHNUeXBlLmdldFByaW1pdGl2ZVR5cGUoKTsKLSAgICAgICAgYm9vbGVhbiBpc0J1aWx0aW4gPSBzVHlwZS5pc0J1aWx0aW5UeXBlKCk7Ci0gICAgICAgIFN0cmluZyBiYXNlY2xhc3MgPSBudWxsOwotICAgICAgICBpbnQgYXJnY291bnQgPSBpc0J1aWx0aW4gPyAwIDogMjsKLQotICAgICAgICBzd2l0Y2ggKHBUeXBlLmdldEJ1aWx0aW5UeXBlQ29kZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0FOWV9TSU1QTEU6Ci0gICAgICAgICAgICAgICAgYmFzZWNsYXNzID0gICJvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLlhtbEFueVNpbXBsZVR5cGVJbXBsIjsKLSAgICAgICAgICAgICAgICBpZiAocFR5cGUgIT0gc1R5cGUpCi0gICAgICAgICAgICAgICAgICAgIGFyZ2NvdW50ID0gMjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfQk9PTEVBTjoKLSAgICAgICAgICAgICAgICBpZiAoIWlzQnVpbHRpbikKLSAgICAgICAgICAgICAgICAgICAgYmFzZWNsYXNzID0gICJvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFCb29sZWFuSG9sZGVyRXgiOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYmFzZWNsYXNzID0gICJvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFCb29sZWFuSG9sZGVyIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfQkFTRV82NF9CSU5BUlk6Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0J1aWx0aW4pCi0gICAgICAgICAgICAgICAgICAgIGJhc2VjbGFzcyA9ICAib3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5KYXZhQmFzZTY0SG9sZGVyRXgiOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYmFzZWNsYXNzID0gICJvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFCYXNlNjRIb2xkZXIiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19IRVhfQklOQVJZOgotICAgICAgICAgICAgICAgIGlmICghaXNCdWlsdGluKQotICAgICAgICAgICAgICAgICAgICBiYXNlY2xhc3MgPSAgIm9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuSmF2YUhleEJpbmFyeUhvbGRlckV4IjsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJhc2VjbGFzcyA9ICAib3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5KYXZhSGV4QmluYXJ5SG9sZGVyIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfQU5ZX1VSSToKLSAgICAgICAgICAgICAgICBpZiAoIWlzQnVpbHRpbikKLSAgICAgICAgICAgICAgICAgICAgYmFzZWNsYXNzID0gICJvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFVcmlIb2xkZXJFeCI7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBiYXNlY2xhc3MgPSAgIm9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuSmF2YVVyaUhvbGRlciI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1FOQU1FOgotICAgICAgICAgICAgICAgIGlmICghaXNCdWlsdGluKQotICAgICAgICAgICAgICAgICAgICBiYXNlY2xhc3MgPSAgIm9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuSmF2YVFOYW1lSG9sZGVyRXgiOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYmFzZWNsYXNzID0gICJvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFRTmFtZUhvbGRlciI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX05PVEFUSU9OOgotICAgICAgICAgICAgICAgIGlmICghaXNCdWlsdGluKQotICAgICAgICAgICAgICAgICAgICBiYXNlY2xhc3MgPSAgIm9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuSmF2YU5vdGF0aW9uSG9sZGVyRXgiOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYmFzZWNsYXNzID0gICJvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFOb3RhdGlvbkhvbGRlciI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0ZMT0FUOgotICAgICAgICAgICAgICAgIGlmICghaXNCdWlsdGluKQotICAgICAgICAgICAgICAgICAgICBiYXNlY2xhc3MgPSAgIm9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuSmF2YUZsb2F0SG9sZGVyRXgiOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYmFzZWNsYXNzID0gICJvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFGbG9hdEhvbGRlciI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RPVUJMRToKLSAgICAgICAgICAgICAgICBpZiAoIWlzQnVpbHRpbikKLSAgICAgICAgICAgICAgICAgICAgYmFzZWNsYXNzID0gICJvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFEb3VibGVIb2xkZXJFeCI7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBiYXNlY2xhc3MgPSAgIm9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuSmF2YURvdWJsZUhvbGRlciI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1NUUklORzoKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgIGlmIChzVHlwZS5oYXNTdHJpbmdFbnVtVmFsdWVzKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAib3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5KYXZhU3RyaW5nRW51bWVyYXRpb25Ib2xkZXJFeCI7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKHBUeXBlICE9IHNUeXBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYmFzZWNsYXNzID0gICJvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFTdHJpbmdIb2xkZXJFeCI7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ2NvdW50ID0gMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYmFzZWNsYXNzID0gICJvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFTdHJpbmdIb2xkZXIiOwotICAgICAgICAgICAgICAgICAgICBhcmdjb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RBVEVfVElNRToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfVElNRToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfREFURToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19ZRUFSX01PTlRIOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX1lFQVI6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfTU9OVEhfREFZOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX0RBWToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19NT05USDoKLSAgICAgICAgICAgICAgICBiYXNlY2xhc3MgPSAgIm9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuSmF2YUdEYXRlSG9sZGVyRXgiOwotICAgICAgICAgICAgICAgIGFyZ2NvdW50ID0gMjsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19EVVJBVElPTjoKLSAgICAgICAgICAgICAgICBiYXNlY2xhc3MgPSAgIm9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuSmF2YUdEdXJhdGlvbkhvbGRlckV4IjsKLSAgICAgICAgICAgICAgICBhcmdjb3VudCA9IDI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfREVDSU1BTDoKLSAgICAgICAgICAgICAgICAvLyBEZWNpbWFsIHR5cGVzIGFyZSBoYW5kbGVkIGJlbG93Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKSA6ICJ1bnJlY29nbml6ZWQgcHJpbWl0aXZlIHR5cGUiOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHdoaWxlIChiYXNlY2xhc3MgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgYXJnY291bnQgPSAyOwotICAgICAgICAgICAgc3dpdGNoIChzVHlwZS5nZXRCdWlsdGluVHlwZUNvZGUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RFQ0lNQUw6Ci0gICAgICAgICAgICAgICAgICAgIGJhc2VjbGFzcyA9ICJvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFEZWNpbWFsSG9sZGVyRXgiOwotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfSU5URUdFUjoKLSAgICAgICAgICAgICAgICAgICAgYmFzZWNsYXNzID0gIm9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuSmF2YUludGVnZXJIb2xkZXJFeCI7Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19MT05HOgotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfVU5TSUdORURfSU5UOgotICAgICAgICAgICAgICAgICAgICBiYXNlY2xhc3MgPSAib3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5KYXZhTG9uZ0hvbGRlckV4IjsKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfSU5UOgotICAgICAgICAgICAgICAgICAgICBiYXNlY2xhc3MgPSAib3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5KYXZhSW50SG9sZGVyRXgiOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHNUeXBlID0gc1R5cGUuZ2V0QmFzZVR5cGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGNpLnNldEJhc2VJbXBsTmFtZShiYXNlY2xhc3MpOwotICAgICAgICBjaS5zZXRTdXBlckN0ckFyZ0NvdW50KGFyZ2NvdW50KTsKLQotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGphdmFpemVFbGVtZW50KFNjaGVtYUxvY2FsRWxlbWVudCBlbHQsIE1hcCBjb21wb25lbnREYXRhLCBNYXAgcGFja2FnZXMpCi0gICAgewotICAgICAgICAvLyBUT0RPOiBkZWFsIHdpdGggbG9jYWwgZWxlbWVudHMgLSBvbmx5IGdlbiBpbnRlcmZhY2Ugd2hlbiBwYXJ0IG9mIGEgCi0gICAgICAgIC8vIGdlbmVyYWwgY29udGVudCBtb2RlbC4gU2VlIDUuNy4xCi0KLSAgICAgICAgaWYgKCEgKCBlbHQgaW5zdGFuY2VvZiBTY2hlbWFHbG9iYWxFbGVtZW50KSApCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgRWxlbWVudEluZm8gZWkgPSAoRWxlbWVudEluZm8pY29tcG9uZW50RGF0YS5nZXQoZWx0KTsKLSAgICAgICAgUGFja2FnZUluZm8gcGkgPSBnZXRQYWNrYWdlSW5mbyhwYWNrYWdlcywgZWkuZ2V0RnVsbEphdmFJbnRmTmFtZSgpKTsKLQotICAgICAgICAvLyBUT0RPOiBkZWFsIHdpdGggYW5vbnltb3VzIGNvbXBsZXggdHlwZSBkZWZpbml0aW9uIHNlZSA1LjcuMgotICAgICAgICBpZiAoZWx0LmdldFR5cGUoKS5nZXRDb250ZW50VHlwZSgpICE9IFNjaGVtYVR5cGUuTk9UX0NPTVBMRVhfVFlQRSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEZvciBhbiBlbGVtZW50IHdob3NlIHR5cGUgZGVmaW5pdGlvbiBpcyBjb21wbGV4LCB0aGUgSmF2YSBFbGVtZW50IGludGVyZmFjZQotICAgICAgICAgICAgLy8gZXh0ZW5kcyB0aGUgSmF2YSBjb250ZW50IGludGVyZmFjZSByZXByZXNlbnRpbmcgdGhlIHR5cGUgZGVmaW5pdGlvbi4KLSAgICAgICAgICAgIFR5cGVJbmZvIHRpID0gKFR5cGVJbmZvKWNvbXBvbmVudERhdGEuZ2V0KGVsdC5nZXRUeXBlKCkpOwotICAgICAgICAgICAgZWkuc2V0QmFzZUludGZOYW1lKHRpLmdldEZ1bGxKYXZhSW50Zk5hbWUoKSk7Ci0gICAgICAgICAgICBlaS5zZXRCYXNlSW1wbE5hbWUodGkuZ2V0RnVsbEphdmFJbXBsTmFtZSgpKTsKLSAgICAgICAgICAgIGVpLnNldFN1cGVyQ3RyQXJnQ291bnQoMSk7Ci0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEZvciBhbiBlbGVtZW50IHdob3NlIHR5cGUgZGVmaW5pdGlvbiBpcyBzaW1wbGUsIFRoZSBnZW5lcmF0ZWQgZWxlbWVudAotICAgICAgICAgICAgLy8gaW50ZXJmYWNlIGhhcyBhIEphdmEgc2ltcGxlIGNvbnRlbnQtcHJvcGVydHkgbmFtZWQgInZhbHVlIgotICAgICAgICAgICAgZWkuc2V0VmFsdWVUeXBlKCBnZXRKYXZhUHJvcGVydHlUeXBlKGVsdC5nZXRUeXBlKCksIGVsdC5pc05pbGxhYmxlKCkpICk7Ci0gICAgICAgICAgICBzZXRKYXZhSW1wbENsYXNzKGVsdC5nZXRUeXBlKCksIGVpKTsKLQotICAgICAgICB9Ci0KLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBqYXZhaXplVHlwZShTY2hlbWFUeXBlIHN0LCBNYXAgY29tcG9uZW50RGF0YSwgTWFwIHBhY2thZ2VzKQotICAgIHsKLSAgICAgICAgVHlwZUluZm8gdGkgPSAoVHlwZUluZm8pY29tcG9uZW50RGF0YS5nZXQoc3QpOwotCi0gICAgICAgIGlmIChzdC5nZXRCYXNlVHlwZSgpLmVxdWFscyhCdWlsdGluU2NoZW1hVHlwZVN5c3RlbS5TVF9BTllfVFlQRSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIHRpCi0gICAgICAgIH0KLQotICAgIH0KLQotICAgIHN0YXRpYyBDb21wb25lbnRJbmZvIGdldENvbXBvbmVudEluZm8oU2NoZW1hQ29tcG9uZW50IHNjLCBNYXAgY29tcG9uZW50RGF0YSkKLSAgICB7Ci0gICAgICAgIENvbXBvbmVudEluZm8gY2kgPSAoQ29tcG9uZW50SW5mbyljb21wb25lbnREYXRhLmdldChzYyk7Ci0gICAgICAgIGlmIChjaSAhPSBudWxsKSByZXR1cm4gY2k7Ci0KLSAgICAgICAgLy8gQ291bGQgbm90IGZpbmQgLSBjcmVhdGUgYSBuZXcgcmVjb3JkCi0gICAgICAgIHN3aXRjaCAoc2MuZ2V0Q29tcG9uZW50VHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYUNvbXBvbmVudC5FTEVNRU5UOgotICAgICAgICAgICAgICAgIGNpID0gbmV3IEVsZW1lbnRJbmZvKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hQ29tcG9uZW50LlRZUEU6Ci0gICAgICAgICAgICAgICAgY2kgPSBuZXcgVHlwZUluZm8oKTsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDYW5ub3QgaGFuZGxlIGNvbXBvbmVudCBvZiB0eXBlOiAiICsgc2MuZ2V0Q29tcG9uZW50VHlwZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbXBvbmVudERhdGEucHV0KHNjLCBjaSk7Ci0gICAgICAgIHJldHVybiBjaTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUGFja2FnZUluZm8gZ2V0UGFja2FnZUluZm8oTWFwIHBhY2thZ2VzLCBTdHJpbmcgZnFjbikKLSAgICB7Ci0gICAgICAgIFN0cmluZyBwa2duYW1lID0gZ2V0UGFja2FnZU5hbWUoZnFjbik7Ci0gICAgICAgIHJldHVybiAoUGFja2FnZUluZm8pcGFja2FnZXMuZ2V0KHBrZ25hbWUpOwotICAgIH0KLQotICAgIHN0YXRpYyBTdHJpbmcgZ2V0UGFja2FnZU5hbWUoU3RyaW5nIGZxY24pCi0gICAgewotICAgICAgICAvLyByZW1vdmUgY2xhc3MgbmFtZQotICAgICAgICBpbnQgbGFzdGRvdCA9IGZxY24ubGFzdEluZGV4T2YoJy4nKTsKLSAgICAgICAgaWYgKGxhc3Rkb3QgPCAwKQotICAgICAgICAgICAgcmV0dXJuICIiOwotCi0gICAgICAgIC8vIHJlbW92ZSBvdXRlciBwYWNrYWdlIG5hbWVzCi0gICAgICAgIHJldHVybiBmcWNuLnN1YnN0cmluZygwLCBsYXN0ZG90KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgU3RyaW5nIHBpY2tGdWxsSmF2YUludGZOYW1lKFNldCB1c2VkTmFtZXMsIFFOYW1lIHFOYW1lKQotICAgIHsKLSAgICAgICAgLy8gQlVHQlVHOiBUaGlzIHV0aWwgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBKQVhCIG5hbWluZyBydWxlcwotICAgICAgICBTdHJpbmcgbmFtZSA9IE5hbWVVdGlsLmdldENsYXNzTmFtZUZyb21RTmFtZShxTmFtZSk7Ci0KLSAgICAgICAgaWYgKHVzZWROYW1lcy5jb250YWlucyhuYW1lKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIk5hbWUgY29sbGlzaW9uIG9uIHFuYW1lOiAiICsgcU5hbWUpOwotCi0gICAgICAgIGlmIChyZXNlcnZlZEdsb2JhbENsYXNzTmFtZShuYW1lKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlFOYW1lICIgKyBxTmFtZSArICIgY29uZmxpY3RzIHdpdGggZ2VuZXJhdGVkIEpBWEIgY2xhc3MgbmFtZS4iKTsKLSAgICAgICAgICAgIAotICAgICAgICB1c2VkTmFtZXMuYWRkKG5hbWUpOwotCi0gICAgICAgIHJldHVybiBuYW1lOwotICAgIH0KLQotICAgIHN0YXRpYyBTdHJpbmcgcGlja0Z1bGxKYXZhSW1wbE5hbWUoU2V0IHVzZWROYW1lcywgU3RyaW5nIGludGZOYW1lKQotICAgIHsKLSAgICAgICAgLy8gU3RyaXAgb2ZmIHRoZSBwYWNrYWdlIGZyb20gdGhlIGNsYXNzIG5hbWUgc28gd2UgY2FuIHJlcGxhY2UgaXQKLSAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IGludGZOYW1lOwotICAgICAgICBTdHJpbmcgcGtnTmFtZSA9IG51bGw7Ci0gICAgICAgIGludCBpbmRleCA9IGludGZOYW1lLmxhc3RJbmRleE9mKCcuJyk7Ci0gICAgICAgIGlmIChpbmRleCA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBjbGFzc05hbWUgPSBpbnRmTmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxKTsKLSAgICAgICAgICAgIHBrZ05hbWUgPSBpbnRmTmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRm9ybSB0aGUgbmV3IHF1YWxpZmllZCBjbGFzcyBuYW1lIGZyb20gdGhlIG5ldyBwYWNrYWdlIG5hbWUKLSAgICAgICAgLy8gYW5kIHRoZSBvbGQgY2xhc3MgbmFtZQotICAgICAgICBTdHJpbmcgbmFtZSA9IHBrZ05hbWUgKyAiLmltcGwuIiArIGNsYXNzTmFtZSArICJJbXBsIjsKLQotICAgICAgICBpZiAodXNlZE5hbWVzLmNvbnRhaW5zKG5hbWUpKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiUU5hbWUgY29uZmxpY3QiKTsKLQotICAgICAgICByZXR1cm4gbmFtZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgaW50IGdldEJ1aWx0aW5UeXBlQ29kZShTY2hlbWFUeXBlIHhtbHR5cGUpCi0gICAgewotICAgICAgICB3aGlsZSAoISB4bWx0eXBlLmlzQnVpbHRpblR5cGUoKSkKLSAgICAgICAgICAgIHhtbHR5cGUgPSB4bWx0eXBlLmdldEJhc2VUeXBlKCk7Ci0KLSAgICAgICAgcmV0dXJuIHhtbHR5cGUuZ2V0QnVpbHRpblR5cGVDb2RlKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGludCBnZXRKYXZhUHJvcGVydHlUeXBlKFNjaGVtYVR5cGUgeG1sdHlwZSwgYm9vbGVhbiBuaWxsYWJsZSkKLSAgICB7Ci0gICAgICAgIGFzc2VydCB4bWx0eXBlLmdldENvbnRlbnRUeXBlKCkgPT0gU2NoZW1hVHlwZS5OT1RfQ09NUExFWF9UWVBFOwotCi0gICAgICAgIC8vIFRPRE86IGhhbmRsZSBsaXN0cywgdW5pb25zLCBlbnVtcwotCi0gICAgICAgIHdoaWxlICh0cnVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHhtbHR5cGUuZ2V0QnVpbHRpblR5cGVDb2RlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19BTllfU0lNUExFOgotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfU1RSSU5HOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2NoZW1hUHJvcGVydHkuSkFWQV9TVFJJTkc7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0lOVEVHRVI6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTY2hlbWFQcm9wZXJ0eS5KQVZBX0JJR19JTlRFR0VSOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19JTlQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19VTlNJR05FRF9TSE9SVDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNjaGVtYVByb3BlcnR5LkpBVkFfSU5UOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19MT05HOgotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfVU5TSUdORURfSU5UOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2NoZW1hUHJvcGVydHkuSkFWQV9MT05HOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19TSE9SVDoKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTY2hlbWFQcm9wZXJ0eS5KQVZBX1NIT1JUOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19ERUNJTUFMOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2NoZW1hUHJvcGVydHkuSkFWQV9CSUdfREVDSU1BTDsKLQotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfRkxPQVQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTY2hlbWFQcm9wZXJ0eS5KQVZBX0ZMT0FUOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19ET1VCTEU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTY2hlbWFQcm9wZXJ0eS5KQVZBX0RPVUJMRTsKLQotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfQk9PTEVBTjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNjaGVtYVByb3BlcnR5LkpBVkFfQk9PTEVBTjsKLQotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfQllURToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNjaGVtYVByb3BlcnR5LkpBVkFfQllURTsKLQotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfUU5BTUU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTY2hlbWFQcm9wZXJ0eS5KQVZBX1FOQU1FOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19USU1FOgotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfREFURToKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RBVEVfVElNRToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNjaGVtYVByb3BlcnR5LkpBVkFfQ0FMRU5EQVI7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0JBU0VfNjRfQklOQVJZOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2NoZW1hUHJvcGVydHkuSkFWQV9CWVRFX0FSUkFZOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19IRVhfQklOQVJZOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2NoZW1hUHJvcGVydHkuSkFWQV9CWVRFOwotCi0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgeG1sdHlwZSA9IHhtbHR5cGUuZ2V0QmFzZVR5cGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBib29sZWFuIHJlc2VydmVkR2xvYmFsQ2xhc3NOYW1lKFN0cmluZyBmcWNuKQotICAgIHsKLSAgICAgICAgaW50IGkgPSBmcWNuLmxhc3RJbmRleE9mKCcuJyk7Ci0gICAgICAgIFN0cmluZyBsYXN0U2VnbWVudCA9IGZxY24uc3Vic3RyaW5nKGkgKyAxKTsKLQotICAgICAgICBpZiAobGFzdFNlZ21lbnQuZXF1YWxzKCJPYmplY3RGYWN0b3J5IikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2pheGIvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2pheGIvY29tcGlsZXIvUGFja2FnZUluZm8uamF2YSBiL3YyL3NyYy9qYXhiL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYXhiL2NvbXBpbGVyL1BhY2thZ2VJbmZvLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljODFkZjUuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2pheGIvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2pheGIvY29tcGlsZXIvUGFja2FnZUluZm8uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYXhiLmNvbXBpbGVyOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci0KLXB1YmxpYyBjbGFzcyBQYWNrYWdlSW5mbyAKLXsKLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBfcGFja2FnZU5hbWU7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgX2luZGV4Q2xhc3NOYW1lOwotCi0gICAgLyoqIEEgbGlzdCBvZiB0aGUgY29tcG9uZW50cyBpbiB0aGlzIHBhY2thZ2UgdGhhdCB3aWxsIG5lZWQgYSBmYWN0b3J5IG1ldGhvZCAqLwotICAgIHByaXZhdGUgZmluYWwgTGlzdCBfY29tcG9uZW50cyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgIHB1YmxpYyBQYWNrYWdlSW5mbyhTdHJpbmcgcGFja2FnZU5hbWUpCi0gICAgewotICAgICAgICBfcGFja2FnZU5hbWUgPSBwYWNrYWdlTmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFBhY2thZ2VOYW1lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfcGFja2FnZU5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYWRkRmFjdG9yeUNvbXBvbmVudChDb21wb25lbnRJbmZvIGNpKQotICAgIHsKLSAgICAgICAgX2NvbXBvbmVudHMuYWRkKGNpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTGlzdCBmYWN0b3J5Q29tcG9uZW50cygpCi0gICAgewotICAgICAgICByZXR1cm4gX2NvbXBvbmVudHM7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0SW5kZXhDbGFzc05hbWUoU3RyaW5nIGluZGV4Q2xhc3NOYW1lKQotICAgIHsKLSAgICAgICAgX2luZGV4Q2xhc3NOYW1lID0gaW5kZXhDbGFzc05hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRJbmRleENsYXNzTmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gX2luZGV4Q2xhc3NOYW1lOwotICAgIH0KLQotfQotCmRpZmYgLS1naXQgYS92Mi9zcmMvamF4Yi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamF4Yi9jb21waWxlci9UeXBlSW5mby5qYXZhIGIvdjIvc3JjL2pheGIvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2pheGIvY29tcGlsZXIvVHlwZUluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVhMDE1YS4uMDAwMDAwMAotLS0gYS92Mi9zcmMvamF4Yi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamF4Yi9jb21waWxlci9UeXBlSW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamF4Yi5jb21waWxlcjsKLQotcHVibGljIGNsYXNzIFR5cGVJbmZvIGV4dGVuZHMgQ29tcG9uZW50SW5mbyB7Ci0KLX0KLQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2pheGIvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2pheGIvcnVudGltZS9Db250ZXh0SW1wbC5qYXZhIGIvdjIvc3JjL2pheGIvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2pheGIvcnVudGltZS9Db250ZXh0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzAyNjAwLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYXhiL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYXhiL3J1bnRpbWUvQ29udGV4dEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYXhiLnJ1bnRpbWU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLWltcG9ydCBqYXZhLmlvLio7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuKjsKLQotaW1wb3J0IGphdmF4LnhtbC5iaW5kLkpBWEJDb250ZXh0OwotaW1wb3J0IGphdmF4LnhtbC5iaW5kLkpBWEJFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLmJpbmQuRGF0YXR5cGVDb252ZXJ0ZXI7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQmVhbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVTeXN0ZW07Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5UeXBlU3RvcmVGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuVHlwZVN0b3JlVXNlcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYXhiLmNvbXBpbGVyLkVsZW1lbnRJbmZvOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYXhiLmNvbXBpbGVyLlR5cGVJbmZvOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmpheGIuY29uZmlnLkpheGJDb25maWdEb2N1bWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamF4Yi5jb25maWcuSmF4YkNvbmZpZ0RvY3VtZW50LkpheGJDb25maWc7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmpheGIuY29uZmlnLkpheGJDb25maWdEb2N1bWVudC5KYXhiQ29uZmlnLkdsb2JhbEVsZW1lbnRzOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYXhiLmNvbmZpZy5KYXhiQ29uZmlnRG9jdW1lbnQuSmF4YkNvbmZpZy5HbG9iYWxUeXBlczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamF4Yi5jb25maWcuR2xvYmFsRWxlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamF4Yi5jb25maWcuR2xvYmFsVHlwZTsKLQotcHVibGljIGNsYXNzIENvbnRleHRJbXBsIGV4dGVuZHMgSkFYQkNvbnRleHQgaW1wbGVtZW50cyBUeXBlU3RvcmVGYWN0b3J5Ci17Ci0gICAgcHJpdmF0ZSBTY2hlbWFUeXBlTG9hZGVyIF9zdGw7Ci0gICAgcHJpdmF0ZSBNYXAgX2dsb2JhbEVsZW1lbnRzOwotCi0gICAgcHVibGljIGphdmF4LnhtbC5iaW5kLlVubWFyc2hhbGxlciBjcmVhdGVVbm1hcnNoYWxsZXIoKSAKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgVW5tYXJzaGFsbGVySW1wbChfc3RsLCB0aGlzKTsKLSAgICB9Ci0gICAgcHVibGljIGphdmF4LnhtbC5iaW5kLk1hcnNoYWxsZXIgY3JlYXRlTWFyc2hhbGxlcigpIAotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBNYXJzaGFsbGVySW1wbCgpOwotICAgIH0KLSAgICBwdWJsaWMgamF2YXgueG1sLmJpbmQuVmFsaWRhdG9yIGNyZWF0ZVZhbGlkYXRvcigpIAotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0b3JJbXBsKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFR5cGVTdG9yZVVzZXIgY3JlYXRlRWxlbWVudFVzZXIoU2NoZW1hVHlwZSBwYXJlbnRUeXBlLCBRTmFtZSBuYW1lLCBRTmFtZSB4c2lUeXBlKSAKLSAgICB7Ci0gICAgICAgIGlmIChwYXJlbnRUeXBlLmlzRG9jdW1lbnRUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVsZW1lbnRJbmZvIGVpID0gKEVsZW1lbnRJbmZvKV9nbG9iYWxFbGVtZW50cy5nZXQobmFtZSk7Ci0gICAgICAgICAgICBpZiAoZWkgPT0gbnVsbCkgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yIGN0ciA9IGVpLmdldEphdmFJbXBsQ29uc3RydWN0b3IocGFyZW50VHlwZS5nZXRUeXBlU3lzdGVtKCkuZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChUeXBlU3RvcmVVc2VyKWN0ci5uZXdJbnN0YW5jZShudWxsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAKLSAgICB9Ci0KLSAgICBwdWJsaWMgVHlwZVN0b3JlVXNlciBjcmVhdGVBdHRyaWJ1dGVVc2VyKFNjaGVtYVR5cGUgcGFyZW50VHlwZSwgUU5hbWUgbmFtZSkgCi0gICAgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBDb250ZXh0SW1wbChTY2hlbWFUeXBlTG9hZGVyIHN0bCwgTWFwIGdsb2JhbEVsZW1lbnRzKQotICAgIHsKLSAgICAgICAgX3N0bCA9IHN0bDsKLSAgICAgICAgX2dsb2JhbEVsZW1lbnRzID0gZ2xvYmFsRWxlbWVudHM7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBKQVhCQ29udGV4dCBjcmVhdGVDb250ZXh0KFN0cmluZyBjb250ZXh0UGF0aCwgQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIpCi0gICAgICAgIHRocm93cyBKQVhCRXhjZXB0aW9uCi0gICAgewotICAgICAgICBEYXRhdHlwZUNvbnZlcnRlci5zZXREYXRhdHlwZUNvbnZlcnRlcigKLSAgICAgICAgICAgIERhdGF0eXBlQ29udmVydGVySW1wbC5pbnN0YW5jZSk7Ci0KLQotICAgICAgICBTdHJpbmdbXSBwa2dzID0gY29udGV4dFBhdGguc3BsaXQoIjoiKTsKLQotICAgICAgICBTY2hlbWFUeXBlTG9hZGVyW10gc3RscyA9IG5ldyBTY2hlbWFUeXBlTG9hZGVyW3BrZ3MubGVuZ3RoICsgMV07Ci0gICAgICAgIHN0bHNbMF0gPSBYbWxCZWFucy5nZXRCdWlsdGluVHlwZVN5c3RlbSgpOwotCi0gICAgICAgIE1hcCBnbG9iYWxFbGVtZW50cyA9IG5ldyBIYXNoTWFwKCk7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgcGtncy5sZW5ndGggOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHByb3BzID0gcGtnc1tpXS5yZXBsYWNlKCcuJywgJy8nKSArICIvamF4Yi5wcm9wZXJ0aWVzIjsKLSAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzIHAgPSBuZXcgUHJvcGVydGllcygpOwotCi0gICAgICAgICAgICAgICAgcC5sb2FkKGNsYXNzTG9hZGVyLmdldFJlc291cmNlQXNTdHJlYW0ocHJvcHMpKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgaW5kZXhDbGFzc05hbWUgPSBwLmdldFByb3BlcnR5KCJvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamF4Yi5UeXBlU3lzdGVtSG9sZGVyIik7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaW5kZXhDbGFzc05hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpBWEJFeGNlcHRpb24oIlRoaXMgcGFja2FnZSB3YXMgbm90IGNyZWF0ZWQgd2l0aCB0aGlzIEpheGIgaW1wbC4iKTsKLQotICAgICAgICAgICAgICAgIEZpZWxkIGYgPSBDbGFzcy5mb3JOYW1lKGluZGV4Q2xhc3NOYW1lLCBmYWxzZSwgY2xhc3NMb2FkZXIpLmdldEZpZWxkKCJ0eXBlU3lzdGVtIik7Ci0gICAgICAgICAgICAgICAgU2NoZW1hVHlwZVN5c3RlbSBzdHMgPSAoU2NoZW1hVHlwZVN5c3RlbSlmLmdldChudWxsKTsKLSAgICAgICAgICAgICAgICBzdGxzW2kgKyAxXSA9IHN0czsKLQotICAgICAgICAgICAgICAgIC8vIE5vdyBsb2FkIHRoZSBKYXhiIENvbmZpZyBpbmZvCi0gICAgICAgICAgICAgICAgbG9hZEpheGJDb25maWcoY2xhc3NMb2FkZXIsIHN0cywgZ2xvYmFsRWxlbWVudHMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpBWEJFeGNlcHRpb24oIiIsIGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSkFYQkV4Y2VwdGlvbigiVGhpcyBwYWNrYWdlIHdhcyBub3QgY3JlYXRlZCB3aXRoIHRoaXMgamF4YiBpbXBsLiIsICBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChOb1N1Y2hGaWVsZEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBKQVhCRXhjZXB0aW9uKCJUaGlzIHBhY2thZ2Ugd2FzIG5vdCBjcmVhdGVkIHdpdGggdGhpcyBqYXhiIGltcGwuIiwgIGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSkFYQkV4Y2VwdGlvbigiVGhpcyBwYWNrYWdlIHdhcyBub3QgY3JlYXRlZCB3aXRoIHRoaXMgamF4YiBpbXBsLiIsICBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChYbWxFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSkFYQkV4Y2VwdGlvbigiVGhpcyBwYWNrYWdlIHdhcyBub3QgY3JlYXRlZCB3aXRoIHRoaXMgamF4YiBpbXBsLiIsICBlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG5ldyBDb250ZXh0SW1wbChYbWxCZWFucy50eXBlTG9hZGVyVW5pb24oc3RscyksIGdsb2JhbEVsZW1lbnRzKTsKLQotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGxvYWRKYXhiQ29uZmlnKENsYXNzTG9hZGVyIGNsLCBTY2hlbWFUeXBlU3lzdGVtIHN0cywgTWFwIGdsb2JhbEVsZW1lbnRzKQotICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFhtbEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gc3RzLmdldE5hbWUoKS5yZXBsYWNlKCcuJywgJy8nKSArICIvSmF4YkNvbmZpZy54bWwiOwotICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IGNsLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCi0gICAgICAgIEpheGJDb25maWcgY29uZmlnID0gSmF4YkNvbmZpZ0RvY3VtZW50LkZhY3RvcnkucGFyc2UoaXMpLmdldEpheGJDb25maWcoKTsKLSAgICAgICAgR2xvYmFsRWxlbWVudFtdIGVsdHMgPSBjb25maWcuZ2V0R2xvYmFsRWxlbWVudHMoKS5nZXRHbG9iYWxFbGVtZW50QXJyYXkoKTsKLQotICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCBlbHRzLmxlbmd0aCA7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgRWxlbWVudEluZm8gZWkgPSBuZXcgRWxlbWVudEluZm8oKTsKLSAgICAgICAgICAgIGVpLnNldEZ1bGxKYXZhSW1wbE5hbWUoZWx0c1tpXS5nZXRKYXZhSW1wbCgpKTsKLSAgICAgICAgICAgIGdsb2JhbEVsZW1lbnRzLnB1dChlbHRzW2ldLmdldFFuYW1lKCksIGVpKTsKLSAgICAgICAgfQotCi0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2pheGIvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2pheGIvcnVudGltZS9EYXRhdHlwZUNvbnZlcnRlckltcGwuamF2YSBiL3YyL3NyYy9qYXhiL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYXhiL3J1bnRpbWUvRGF0YXR5cGVDb252ZXJ0ZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1NDQzZWUuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2pheGIvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2pheGIvcnVudGltZS9EYXRhdHlwZUNvbnZlcnRlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyNCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYXhiLnJ1bnRpbWU7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZheC54bWwuYmluZC5EYXRhdHlwZUNvbnZlcnRlckludGVyZmFjZTsKLWltcG9ydCBqYXZheC54bWwuYmluZC5NYXJzaGFsRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5iaW5kLlVubWFyc2hhbEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLk5hbWVzcGFjZUNvbnRleHQ7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnV0aWwuQmFzZTY0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC51dGlsLkhleEJpbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlZhbGlkYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRGF0ZVRpbWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxEYXRlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sVGltZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuSmF2YUdEYXRlSG9sZGVyRXg7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5KYXZhQmFzZTY0SG9sZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuSmF2YUhleEJpbmFyeUhvbGRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFJbnRlZ2VySG9sZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuSmF2YURvdWJsZUhvbGRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFGbG9hdEhvbGRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFCb29sZWFuSG9sZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuSmF2YVFOYW1lSG9sZGVyOwotCi0KLS8qIAotICAgSW1wbGVtZW50YXRpb24gbm90ZToKLQotICAgVGhlIHBhcnNlIG1ldGhvZHMgYWxsIHJldHVybiBudWxsIHdoZW4gcG9zc2libGUgYW5kIHRocm93IE5QRSB3aGVuIHRoZQotICAgcmV0dXJuIHR5cGUgaXMgYSBzY2FsYXIuIEkgZG9uJ3Qga25vdyB3aHkgdGhleSBkbyB0aGlzLCBidXQgdGhhdCdzIHdoYXQKLSAgIHRoZSBKQVhCIDEuMCBSSSBkb2VzLCBzbyBJJ20gY29weWluZy4gSXQgc2VlbXMgdGhlc2Ugc2hvdWxkIGhhdmUgZGVjbGFyZWQKLSAgIGV4Y2VwdGlvbnMsIGJ1dCB0aGV5IGRvbid0LgotICAgCi0qLwotICAgCi0KLXB1YmxpYyBjbGFzcyBEYXRhdHlwZUNvbnZlcnRlckltcGwgaW1wbGVtZW50cyBEYXRhdHlwZUNvbnZlcnRlckludGVyZmFjZQotewotCi0gICAgcHJpdmF0ZSBEYXRhdHlwZUNvbnZlcnRlckltcGwoKSB7fQotICAgIHB1YmxpYyBzdGF0aWMgRGF0YXR5cGVDb252ZXJ0ZXJJbXBsIGluc3RhbmNlID0gbmV3IERhdGF0eXBlQ29udmVydGVySW1wbCgpOwotCi0gICAgcHVibGljIFN0cmluZyBwcmludERlY2ltYWwoamF2YS5tYXRoLkJpZ0RlY2ltYWwgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgcHVibGljIFN0cmluZyBwcmludFFOYW1lKFFOYW1lIHZhbHVlLCBOYW1lc3BhY2VDb250ZXh0IG5zYykKLSAgICB7Ci0gICAgICAgIGlmIChuc2MgPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLQotICAgICAgICBmaW5hbCBTdHJpbmcgbG9jYWxwYXJ0ID0gdmFsdWUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgIGZpbmFsIFN0cmluZyB1cmkgPSB2YWx1ZS5nZXROYW1lc3BhY2VVUkkoKTsKLQotICAgICAgICBmaW5hbCBTdHJpbmcgcHJlZml4ID0gbnNjLmdldFByZWZpeCh1cmkpOwotCi0gICAgICAgIGlmIChwcmVmaXggPT0gbnVsbCkKLSAgICAgICAgICAgIC8vIHRocm93IG5ldyBNYXJzaGFsRXhjZXB0aW9uKCJOYW1lc3BhY2UgdXJpICciICsgdXJpICsgIicgbm90IGJvdW5kIGluIGN1cnJlbnQgY29udGV4dCIpOwotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgcmV0dXJuIHByZWZpeCArICI6IiArIGxvY2FscGFydDsKLQotICAgIH0KLSAgICBwdWJsaWMgU3RyaW5nIHByaW50RmxvYXQoZmxvYXQgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSmF2YUZsb2F0SG9sZGVyLnNlcmlhbGl6ZSh2YWx1ZSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBwcmludERvdWJsZShkb3VibGUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSmF2YURvdWJsZUhvbGRlci5zZXJpYWxpemUodmFsdWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgcHJpbnRCb29sZWFuKGJvb2xlYW4gdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUgPyAidHJ1ZSIgOiAiZmFsc2UiOwotICAgIH0KLSAgICBwdWJsaWMgU3RyaW5nIHByaW50Qnl0ZShieXRlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEJ5dGUudG9TdHJpbmcodmFsdWUpOwotICAgIH0KLSAgICBwdWJsaWMgU3RyaW5nIHByaW50RGF0ZVRpbWUoamF2YS51dGlsLkNhbGVuZGFyIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBHRGF0ZSh2YWx1ZSkudG9TdHJpbmcoKTsKLQotICAgIH0KLSAgICBwdWJsaWMgU3RyaW5nIHByaW50QmFzZTY0QmluYXJ5KGJ5dGVbXSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RyaW5nKEJhc2U2NC5lbmNvZGUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHByaW50SGV4QmluYXJ5KGJ5dGVbXSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RyaW5nKEhleEJpbi5lbmNvZGUodmFsdWUpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHByaW50VW5zaWduZWRJbnQobG9uZyB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBMb25nLnRvU3RyaW5nKHZhbHVlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHByaW50VW5zaWduZWRTaG9ydChpbnQgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gSW50ZWdlci50b1N0cmluZyh2YWx1ZSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBwcmludFRpbWUoamF2YS51dGlsLkNhbGVuZGFyIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBHRGF0ZSh2YWx1ZSkudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHByaW50RGF0ZShqYXZhLnV0aWwuQ2FsZW5kYXIgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IEdEYXRlKHZhbHVlKS50b1N0cmluZygpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgcHJpbnRBbnlTaW1wbGVUeXBlKFN0cmluZyB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHByaW50U3RyaW5nKFN0cmluZyBzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHM7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBwcmludEludGVnZXIoamF2YS5tYXRoLkJpZ0ludGVnZXIgcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBzLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBwcmludEludChpbnQgcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBJbnRlZ2VyLnRvU3RyaW5nKHMpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgcHJpbnRMb25nKGxvbmcgcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBMb25nLnRvU3RyaW5nKHMpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgcHJpbnRTaG9ydChzaG9ydCBzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFNob3J0LnRvU3RyaW5nKHMpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgcGFyc2VTdHJpbmcoU3RyaW5nIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHB1YmxpYyBqYXZhLnV0aWwuQ2FsZW5kYXIgcGFyc2VEYXRlVGltZShTdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIEdEYXRlIGRhdGUgPSBKYXZhR0RhdGVIb2xkZXJFeC5sZXgocywgWG1sRGF0ZVRpbWUudHlwZSwgX2V2Yyk7Ci0gICAgICAgIHJldHVybiBkYXRlLmdldENhbGVuZGFyKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGJ5dGVbXSBwYXJzZUJhc2U2NEJpbmFyeShTdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBKYXZhQmFzZTY0SG9sZGVyLmxleChzLCBfZXZjKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYnl0ZVtdIHBhcnNlSGV4QmluYXJ5KFN0cmluZyBzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEphdmFIZXhCaW5hcnlIb2xkZXIubGV4KHMsIF9ldmMpOwotICAgIH0KLQotICAgIHB1YmxpYyBsb25nIHBhcnNlVW5zaWduZWRJbnQoU3RyaW5nIHMpCi0gICAgewotICAgICAgICB0cnkgeyByZXR1cm4gTG9uZy5wYXJzZUxvbmcocyk7IH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7IHRocm93IG5ldyBOdWxsUG9pbnRlckV4Y2VwdGlvbigiaW52YWxpZCB1bnNpZ25lZCBpbnQgIiArIHMpOyB9Ci0gICAgfQotCi0gICAgcHVibGljIGludCBwYXJzZVVuc2lnbmVkU2hvcnQoU3RyaW5nIHMpCi0gICAgewotICAgICAgICB0cnkgeyByZXR1cm4gSW50ZWdlci5wYXJzZUludChzKTsgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCJpbnZhbGlkIHVuc2lnbmVkIHNob3J0ICIgKyBzKTsgfQotICAgIH0KLQotICAgIHB1YmxpYyBqYXZhLnV0aWwuQ2FsZW5kYXIgcGFyc2VUaW1lKFN0cmluZyBzKQotICAgIHsKLSAgICAgICAgR0RhdGUgZGF0ZSA9IEphdmFHRGF0ZUhvbGRlckV4LmxleChzLCBYbWxUaW1lLnR5cGUsIF9ldmMpOwotICAgICAgICByZXR1cm4gZGF0ZS5nZXRDYWxlbmRhcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBqYXZhLm1hdGguQmlnSW50ZWdlciBwYXJzZUludGVnZXIoU3RyaW5nIHMpCi0gICAgewotICAgICAgICByZXR1cm4gSmF2YUludGVnZXJIb2xkZXIubGV4KHMsIF9ldmMpOwotICAgIH0KLQotICAgIHB1YmxpYyBqYXZhLm1hdGguQmlnRGVjaW1hbCBwYXJzZURlY2ltYWwoU3RyaW5nIHMpCi0gICAgewotICAgICAgICB0cnkgeyByZXR1cm4gbmV3IEJpZ0RlY2ltYWwocyk7IH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7IHJldHVybiBudWxsOyB9Ci0gICAgfQotCi0gICAgcHVibGljIGludCBwYXJzZUludChTdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIHRyeSB7IHJldHVybiBJbnRlZ2VyLnBhcnNlSW50KHMpOyB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeyB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oImludmFsaWQgaW50ICIgKyBzKTsgfQotICAgIH0KLQotICAgIHB1YmxpYyBsb25nIHBhcnNlTG9uZyhTdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIHRyeSB7IHJldHVybiBMb25nLnBhcnNlTG9uZyhzKTsgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCJpbnZhbGlkIGxvbmcgIiArIHMpOyB9Ci0gICAgfQotCi0gICAgcHVibGljIHNob3J0IHBhcnNlU2hvcnQoU3RyaW5nIHMpCi0gICAgewotICAgICAgICB0cnkgeyByZXR1cm4gU2hvcnQucGFyc2VTaG9ydChzKTsgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCJpbnZhbGlkIHNob3J0ICIgKyBzKTsgfQotICAgIH0KLQotICAgIHB1YmxpYyBmbG9hdCBwYXJzZUZsb2F0KFN0cmluZyBzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEphdmFGbG9hdEhvbGRlci52YWxpZGF0ZUxleGljYWwocywgX2V2Yyk7Ci0gICAgfQotCi0gICAgcHVibGljIGRvdWJsZSBwYXJzZURvdWJsZShTdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBKYXZhRG91YmxlSG9sZGVyLnZhbGlkYXRlTGV4aWNhbChzLCBfZXZjKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBwYXJzZUJvb2xlYW4oU3RyaW5nIHMpCi0gICAgewotICAgICAgICByZXR1cm4gSmF2YUJvb2xlYW5Ib2xkZXIudmFsaWRhdGVMZXhpY2FsKHMsIF9ldmMpOwotICAgIH0KLQotICAgIHB1YmxpYyBieXRlIHBhcnNlQnl0ZShTdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIHRyeSB7IHJldHVybiBCeXRlLnBhcnNlQnl0ZShzKTsgfQotICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkgeyB0aHJvdyBuZXcgTnVsbFBvaW50ZXJFeGNlcHRpb24oImludmFsaWQgYnl0ZSAiICsgcyk7IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgUU5hbWUgcGFyc2VRTmFtZShTdHJpbmcgcywgTmFtZXNwYWNlQ29udGV4dCBjKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEphdmFRTmFtZUhvbGRlci52YWxpZGF0ZUxleGljYWwocywgX2V2YywgCi0gICAgICAgICAgICBuZXcgTmFtZXNwYWNlQ29udGV4dFdyYXBwZXIoYykpOwotICAgIH0KLQotICAgIHB1YmxpYyBqYXZhLnV0aWwuQ2FsZW5kYXIgcGFyc2VEYXRlKFN0cmluZyBzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEphdmFHRGF0ZUhvbGRlckV4LmxleChzLCBYbWxEYXRlLnR5cGUsIF9ldmMpLmdldENhbGVuZGFyKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBwYXJzZUFueVNpbXBsZVR5cGUoU3RyaW5nIHMpCi0gICAgewotICAgICAgICByZXR1cm4gczsKLSAgICB9Ci0KLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVmFsaWRhdGlvbkNvbnRleHQgX2V2YyA9IG5ldyBFeGNlcHRpb25WYWxpZGF0aW9uQ29udGV4dCgpOwotICAgIC8qKgotICAgICAqIFVzZSBfZXZjIHdoZW4geW91IHdhbnQgdG8gdGhyb3cgYW4gRXhjZXB0aW9uIHdoZW4KLSAgICAgKiBwYXJzaW5nIGEgc2ltcGxlIHR5cGUuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgRXhjZXB0aW9uVmFsaWRhdGlvbkNvbnRleHQgaW1wbGVtZW50cyBWYWxpZGF0aW9uQ29udGV4dAotICAgIHsKLSAgICAgICAgcHVibGljIHZvaWQgaW52YWxpZChTdHJpbmcgbWVzc2FnZSkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCBtZXNzYWdlICk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvamF4Yi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamF4Yi9ydW50aW1lL01hcnNoYWxsZXJJbXBsLmphdmEgYi92Mi9zcmMvamF4Yi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamF4Yi9ydW50aW1lL01hcnNoYWxsZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmMGQ5N2MuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2pheGIvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL2pheGIvcnVudGltZS9NYXJzaGFsbGVySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI3ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmpheGIucnVudGltZTsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGphdmF4LnhtbC5iaW5kLk1hcnNoYWxsZXI7Ci1pbXBvcnQgamF2YXgueG1sLmJpbmQuTWFyc2hhbEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwuYmluZC5WYWxpZGF0aW9uRXZlbnRIYW5kbGVyOwotaW1wb3J0IGphdmF4LnhtbC5iaW5kLlByb3BlcnR5RXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5iaW5kLkpBWEJFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLmJpbmQuaGVscGVycy5BYnN0cmFjdE1hcnNoYWxsZXJJbXBsOwotaW1wb3J0IGphdmF4LnhtbC5iaW5kLmhlbHBlcnMuRGVmYXVsdFZhbGlkYXRpb25FdmVudEhhbmRsZXI7Ci0KLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlJlc3VsdDsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLmRvbS5ET01SZXN1bHQ7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zYXguU0FYUmVzdWx0OwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVJlc3VsdDsKLQotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLnhtbC5zYXguWE1MUmVhZGVyOwotaW1wb3J0IG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXI7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnM7Ci0KLXB1YmxpYyBjbGFzcyBNYXJzaGFsbGVySW1wbCBpbXBsZW1lbnRzIE1hcnNoYWxsZXIKLXsKLSAgICBwcml2YXRlIFZhbGlkYXRpb25FdmVudEhhbmRsZXIgX2hhbmRsZXIgPSBuZXcgRGVmYXVsdFZhbGlkYXRpb25FdmVudEhhbmRsZXIoKTsKLSAgICBwcml2YXRlIFhtbE9wdGlvbnMgX29wdGlvbnMgPSBuZXcgWG1sT3B0aW9ucygpLnNldFNhdmVPdXRlcigpOwotCi0KLSAgICBzdGF0aWMgTWFwIEpBWEJfVE9fWEJFQU5fUFJPUEVSVFlfTUFQOwotICAgIHN0YXRpYyB7Ci0gICAgICAgIEpBWEJfVE9fWEJFQU5fUFJPUEVSVFlfTUFQID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgSkFYQl9UT19YQkVBTl9QUk9QRVJUWV9NQVAucHV0KEpBWEJfRU5DT0RJTkcsIFhtbE9wdGlvbnMuQ0hBUkFDVEVSX0VOQ09ESU5HKTsKLSAgICAgICAgSkFYQl9UT19YQkVBTl9QUk9QRVJUWV9NQVAucHV0KEpBWEJfRk9STUFUVEVEX09VVFBVVCwgWG1sT3B0aW9ucy5TQVZFX1BSRVRUWV9QUklOVCk7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cmluZyBnZXRYYmVhblByb3BGb3JKYXhiUHJvcChTdHJpbmcgamF4Yk5hbWUpIHsKLSAgICAgICAgcmV0dXJuIChTdHJpbmcpSkFYQl9UT19YQkVBTl9QUk9QRVJUWV9NQVAuZ2V0KGpheGJOYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0eShTdHJpbmcgcHJvcCwgT2JqZWN0IHZhbHVlKQotICAgICAgICB0aHJvd3MgUHJvcGVydHlFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFN0cmluZyB4YmVhblByb3AgPSBnZXRYYmVhblByb3BGb3JKYXhiUHJvcChwcm9wKTsKLSAgICAgICAgaWYgKHhiZWFuUHJvcCA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IFByb3BlcnR5RXhjZXB0aW9uKHByb3AgKyAiIGlzIHVuc3VwcG9ydGVkLiIpOwotCi0gICAgICAgIF9vcHRpb25zLnB1dCh4YmVhblByb3AsIHZhbHVlKTsKLQotICAgIH0KLSAgICBwdWJsaWMgT2JqZWN0IGdldFByb3BlcnR5KFN0cmluZyBwcm9wKQotICAgICAgICB0aHJvd3MgUHJvcGVydHlFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFN0cmluZyB4YmVhblByb3AgPSBnZXRYYmVhblByb3BGb3JKYXhiUHJvcChwcm9wKTsKLSAgICAgICAgaWYgKHhiZWFuUHJvcCA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IFByb3BlcnR5RXhjZXB0aW9uKHByb3AgKyAiIGlzIHVuc3VwcG9ydGVkLiIpOwotCi0gICAgICAgIHJldHVybiBfb3B0aW9ucy5nZXQoeGJlYW5Qcm9wKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgamF2YXgueG1sLmJpbmQuVmFsaWRhdGlvbkV2ZW50SGFuZGxlciBnZXRFdmVudEhhbmRsZXIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9oYW5kbGVyOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEV2ZW50SGFuZGxlcihWYWxpZGF0aW9uRXZlbnRIYW5kbGVyIGhhbmRsZXIpCi0gICAgewotICAgICAgICBfaGFuZGxlciA9IGhhbmRsZXI7Ci0gICAgfQotCi0gICAgdm9pZCBtYXJzaGFsKE9iamVjdCBvYmosIENvbnRlbnRIYW5kbGVyIGNoLCBMZXhpY2FsSGFuZGxlciBsaCkKLSAgICAgICAgdGhyb3dzIE1hcnNoYWxFeGNlcHRpb24sIEpBWEJFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbE9iamVjdCB4bWxvYmogPSBnZXRYbWxPYmplY3Qob2JqKTsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgeG1sb2JqLnNhdmUoY2gsICBsaCwgX29wdGlvbnMpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChTQVhFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IEpBWEJFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBtYXJzaGFsKE9iamVjdCBvYmosIENvbnRlbnRIYW5kbGVyIGNoKQotICAgICAgICB0aHJvd3MgTWFyc2hhbEV4Y2VwdGlvbiwgSkFYQkV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgbWFyc2hhbChvYmosIGNoLCBudWxsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBtYXJzaGFsKE9iamVjdCBvYmosIE5vZGUgbm9kZSkKLSAgICAgICAgdGhyb3dzIE1hcnNoYWxFeGNlcHRpb24sIEpBWEJFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIG1hcnNoYWwoT2JqZWN0IG9iaiwgT3V0cHV0U3RyZWFtIG91dCkKLSAgICAgICAgdGhyb3dzIE1hcnNoYWxFeGNlcHRpb24sIEpBWEJFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbE9iamVjdCB4bWxvYmogPSBnZXRYbWxPYmplY3Qob2JqKTsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgeG1sb2JqLnNhdmUob3V0LCBfb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBKQVhCRXhjZXB0aW9uKGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgbWFyc2hhbChPYmplY3Qgb2JqLCAgV3JpdGVyIG91dCkKLSAgICAgICAgdGhyb3dzIE1hcnNoYWxFeGNlcHRpb24sIEpBWEJFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbE9iamVjdCB4bWxvYmogPSBnZXRYbWxPYmplY3Qob2JqKTsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgeG1sb2JqLnNhdmUob3V0LCAgX29wdGlvbnMpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSkFYQkV4Y2VwdGlvbihlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIG1hcnNoYWwoT2JqZWN0IG9iaiwgamF2YXgueG1sLnRyYW5zZm9ybS5SZXN1bHQgcmVzdWx0KQotICAgICAgICB0aHJvd3MgTWFyc2hhbEV4Y2VwdGlvbiwgSkFYQkV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFNBWFJlc3VsdCkKLSAgICAgICAgewotICAgICAgICAgICAgU0FYUmVzdWx0IHNheHJlc3VsdCA9IChTQVhSZXN1bHQpcmVzdWx0OwotICAgICAgICAgICAgbWFyc2hhbChvYmosIHNheHJlc3VsdC5nZXRIYW5kbGVyKCksIHNheHJlc3VsdC5nZXRMZXhpY2FsSGFuZGxlcigpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBET01SZXN1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIERPTVJlc3VsdCBkb21yZXN1bHQgPSAoRE9NUmVzdWx0KXJlc3VsdDsKLSAgICAgICAgICAgIG1hcnNoYWwob2JqLCBkb21yZXN1bHQuZ2V0Tm9kZSgpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBTdHJlYW1SZXN1bHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmVhbVJlc3VsdCBzciA9IChTdHJlYW1SZXN1bHQpcmVzdWx0OwotICAgICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gc3IuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0gICAgICAgICAgICBXcml0ZXIgdyA9IHNyLmdldFdyaXRlcigpOwotCi0gICAgICAgICAgICBpZiAob3MgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBtYXJzaGFsKG9iaiwgb3MpOwotICAgICAgICAgICAgZWxzZSBpZiAodyAhPSBudWxsKQotICAgICAgICAgICAgICAgIG1hcnNoYWwob2JqLCB3KTsKLSAgICAgICAgICAgIGVsc2UgCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE1hcnNoYWxFeGNlcHRpb24oImludmFsaWQgUmVzdWx0IHBhcmFtZXRlciIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRocm93IG5ldyBNYXJzaGFsRXhjZXB0aW9uKCJpbnZhbGlkIFJlc3VsdCBwYXJhbWV0ZXIiKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3JnLnczYy5kb20uTm9kZSBnZXROb2RlKE9iamVjdCBvKQotICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIFhtbE9iamVjdCBnZXRYbWxPYmplY3QoT2JqZWN0IG9iaikgdGhyb3dzIE1hcnNoYWxFeGNlcHRpb24gewotICAgICAgICBpZiAoISAoIG9iaiBpbnN0YW5jZW9mIFhtbE9iamVjdCApICkKLSAgICAgICAgICAgIHRocm93IG5ldyBNYXJzaGFsRXhjZXB0aW9uKCJDYW5ub3QgbWFyc2hhbCBvYmplY3QuIEl0IHdhcyBub3QgY3JlYXRlZCBieSB0aGlzIEpBWEIgcHJvdmlkZXIuIik7Ci0KLSAgICAgICAgcmV0dXJuIChYbWxPYmplY3Qpb2JqOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9qYXhiL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYXhiL3J1bnRpbWUvTmFtZXNwYWNlQ29udGV4dFdyYXBwZXIuamF2YSBiL3YyL3NyYy9qYXhiL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYXhiL3J1bnRpbWUvTmFtZXNwYWNlQ29udGV4dFdyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZhYWY5OC4uMDAwMDAwMAotLS0gYS92Mi9zcmMvamF4Yi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamF4Yi9ydW50aW1lL05hbWVzcGFjZUNvbnRleHRXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYXhiLnJ1bnRpbWU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLk5hbWVzcGFjZU1hbmFnZXI7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5OYW1lc3BhY2VDb250ZXh0OwotCi1wdWJsaWMgY2xhc3MgTmFtZXNwYWNlQ29udGV4dFdyYXBwZXIgaW1wbGVtZW50cyBOYW1lc3BhY2VNYW5hZ2VyCi17Ci0gICAgcHJpdmF0ZSBOYW1lc3BhY2VDb250ZXh0IF9jb250ZXh0OwotCi0gICAgcHVibGljIE5hbWVzcGFjZUNvbnRleHRXcmFwcGVyKE5hbWVzcGFjZUNvbnRleHQgY29udGV4dCkKLSAgICB7Ci0gICAgICAgIF9jb250ZXh0ID0gY29udGV4dDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGZpbmRfcHJlZml4X2Zvcl9uc3VyaShTdHJpbmcgbnN1cmksIFN0cmluZyBzdWdnZXN0ZWRfcHJlZml4KQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9jb250ZXh0LmdldFByZWZpeChuc3VyaSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2VGb3JQcmVmaXgoU3RyaW5nIHByZWZpeCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfY29udGV4dC5nZXROYW1lc3BhY2VVUkkocHJlZml4KTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvamF4Yi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamF4Yi9ydW50aW1lL1VubWFyc2hhbGxlckltcGwuamF2YSBiL3YyL3NyYy9qYXhiL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYXhiL3J1bnRpbWUvVW5tYXJzaGFsbGVySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2ZjMGE1Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYXhiL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYXhiL3J1bnRpbWUvVW5tYXJzaGFsbGVySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjU0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmpheGIucnVudGltZTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5Tb3VyY2U7Ci0KLWltcG9ydCBqYXZheC54bWwuYmluZC5Vbm1hcnNoYWxsZXJIYW5kbGVyOwotaW1wb3J0IGphdmF4LnhtbC5iaW5kLlVubWFyc2hhbGxlcjsKLWltcG9ydCBqYXZheC54bWwuYmluZC5Qcm9wZXJ0eUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwuYmluZC5WYWxpZGF0aW9uRXZlbnRIYW5kbGVyOwotaW1wb3J0IGphdmF4LnhtbC5iaW5kLlZhbGlkYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLmJpbmQuSkFYQkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwuYmluZC5Vbm1hcnNoYWxFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLmJpbmQuaGVscGVycy5EZWZhdWx0VmFsaWRhdGlvbkV2ZW50SGFuZGxlcjsKLQotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLnhtbC5zYXguWE1MUmVhZGVyOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9uczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLlR5cGVTdG9yZUZhY3Rvcnk7Ci0KLXB1YmxpYyBjbGFzcyBVbm1hcnNoYWxsZXJJbXBsIGltcGxlbWVudHMgVW5tYXJzaGFsbGVyCi17Ci0gICAgcHJpdmF0ZSBmaW5hbCBTY2hlbWFUeXBlTG9hZGVyIF9zdGw7Ci0KLSAgICBib29sZWFuIF92YWxpZGF0aW5nID0gZmFsc2U7Ci0gICAgVmFsaWRhdGlvbkV2ZW50SGFuZGxlciBfaGFuZGxlciA9IG5ldyBEZWZhdWx0VmFsaWRhdGlvbkV2ZW50SGFuZGxlcigpOwotICAgIHByaXZhdGUgWG1sT3B0aW9ucyBfb3B0aW9uczsKLQotICAgIFVubWFyc2hhbGxlckltcGwoU2NoZW1hVHlwZUxvYWRlciBzdGwsIENvbnRleHRJbXBsIGNvbnRleHQpCi0gICAgewotICAgICAgICBhc3NlcnQgc3RsICE9IG51bGw7Ci0gICAgICAgIF9zdGwgPSBzdGw7Ci0KLSAgICAgICAgX29wdGlvbnMgPSBuZXcgWG1sT3B0aW9ucygpOwotICAgICAgICBfb3B0aW9ucy5wdXQoVHlwZVN0b3JlRmFjdG9yeS5LRVksICBjb250ZXh0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRWYWxpZGF0aW5nKGJvb2xlYW4gdmFsaWRhdGluZykKLSAgICB7Ci0gICAgICAgIF92YWxpZGF0aW5nID0gdmFsaWRhdGluZzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkYXRpbmcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF92YWxpZGF0aW5nOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEV2ZW50SGFuZGxlcihWYWxpZGF0aW9uRXZlbnRIYW5kbGVyIGhhbmRsZXIpIAotICAgIHsKLSAgICAgICAgX2hhbmRsZXIgPSBoYW5kbGVyOwotICAgIH0KLQotICAgIHB1YmxpYyBWYWxpZGF0aW9uRXZlbnRIYW5kbGVyIGdldEV2ZW50SGFuZGxlcigpIAotICAgIHsKLSAgICAgICAgcmV0dXJuIF9oYW5kbGVyOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFByb3BlcnR5KFN0cmluZyBwcm9wLCBPYmplY3QgdmFsdWUpIHRocm93cyBQcm9wZXJ0eUV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFByb3BlcnR5RXhjZXB0aW9uKHByb3AsICB2YWx1ZSk7Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCBnZXRQcm9wZXJ0eShTdHJpbmcgcHJvcCkgdGhyb3dzIFByb3BlcnR5RXhjZXB0aW9uCi0gICAgewotICAgICAgICB0aHJvdyBuZXcgUHJvcGVydHlFeGNlcHRpb24ocHJvcCk7Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCB1bm1hcnNoYWwoRmlsZSBmKQotICAgICAgICB0aHJvd3MgSkFYQkV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgWG1sT2JqZWN0IG87Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBvID0gX3N0bC5wYXJzZShmLCAgbnVsbCwgIF9vcHRpb25zKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IEpBWEJFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFhtbEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSkFYQkV4Y2VwdGlvbihlKTsKLSAgICAgICAgfQotCi0gICAgICAgIG8gPSBwb3N0UHJvY2VzcyhvKTsKLSAgICAgICAgcmV0dXJuIG87Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCB1bm1hcnNoYWwoVVJMIHVybCkKLSAgICAgICAgdGhyb3dzIEpBWEJFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiTllJIik7Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCB1bm1hcnNoYWwoSW5wdXRTdHJlYW0gaXMpCi0gICAgICAgIHRocm93cyBKQVhCRXhjZXB0aW9uCi0gICAgewotICAgICAgICBYbWxPYmplY3QgbzsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG8gPSBfc3RsLnBhcnNlKGlzLCAgbnVsbCwgIF9vcHRpb25zKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IEpBWEJFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFhtbEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSkFYQkV4Y2VwdGlvbihlKTsKLSAgICAgICAgfQotCi0gICAgICAgIG8gPSBwb3N0UHJvY2VzcyhvKTsKLSAgICAgICAgcmV0dXJuIG87Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCB1bm1hcnNoYWwoUmVhZGVyIHIpCi0gICAgICAgIHRocm93cyBKQVhCRXhjZXB0aW9uCi0gICAgewotICAgICAgICBYbWxPYmplY3QgbzsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG8gPSBfc3RsLnBhcnNlKHIsICBudWxsLCAgX29wdGlvbnMpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSkFYQkV4Y2VwdGlvbihlKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoWG1sRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBKQVhCRXhjZXB0aW9uKGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgbyA9IHBvc3RQcm9jZXNzKG8pOwotICAgICAgICByZXR1cm4gbzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgT2JqZWN0IHVubWFyc2hhbChJbnB1dFNvdXJjZSBzKQotICAgICAgICB0aHJvd3MgSkFYQkV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgaWYgKHMuZ2V0Qnl0ZVN0cmVhbSgpICE9IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gdW5tYXJzaGFsKHMuZ2V0Qnl0ZVN0cmVhbSgpKTsKLSAgICAgICAgZWxzZSBpZiAocy5nZXRDaGFyYWN0ZXJTdHJlYW0oKSAhPSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIHVubWFyc2hhbChzLmdldENoYXJhY3RlclN0cmVhbSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGhyb3cgbmV3IEpBWEJFeGNlcHRpb24oIkludmFsaWQgaW5wdXQgc291cmNlLiIpOwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3QgdW5tYXJzaGFsKE5vZGUgbm9kZSkKLSAgICAgICAgdGhyb3dzIEpBWEJFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbE9iamVjdCBvOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgbyA9IF9zdGwucGFyc2Uobm9kZSwgIG51bGwsICBfb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFhtbEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSkFYQkV4Y2VwdGlvbihlKTsKLSAgICAgICAgfQotCi0gICAgICAgIG8gPSBwb3N0UHJvY2VzcyhvKTsKLSAgICAgICAgcmV0dXJuIG87Ci0KLSAgICB9Ci0KLSAgICBwdWJsaWMgT2JqZWN0IHVubWFyc2hhbChTb3VyY2Ugc291cmNlKQotICAgICAgICB0aHJvd3MgSkFYQkV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJOWUkiKTsKLSAgICB9Ci0KLSAgICBYbWxPYmplY3QgcG9zdFByb2Nlc3MoWG1sT2JqZWN0IG8pIHRocm93cyBVbm1hcnNoYWxFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGlmIChfdmFsaWRhdGluZykKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBWYWxpZGF0b3JJbXBsLnZhbGlkYXRlSW1wbChvLCBfaGFuZGxlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoVmFsaWRhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVubWFyc2hhbEV4Y2VwdGlvbihlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9Ci0KLSAgICAgICAgWG1sQ3Vyc29yIGMgPSBvLm5ld0N1cnNvcigpOwotICAgICAgICBpZiAoYy50b0ZpcnN0Q2hpbGQoKSkKLSAgICAgICAgICAgIHJldHVybiBjLmdldE9iamVjdCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvLyBzaW1pbGFyIHRvIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sU2F4SGFuZGxlcgotICAgIHB1YmxpYyBVbm1hcnNoYWxsZXJIYW5kbGVyIGdldFVubWFyc2hhbGxlckhhbmRsZXIoKQotICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJOWUkiKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9qYXhiL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYXhiL3J1bnRpbWUvVmFsaWRhdGlvbkxvY2F0b3JFdmVudEltcGwuamF2YSBiL3YyL3NyYy9qYXhiL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYXhiL3J1bnRpbWUvVmFsaWRhdGlvbkxvY2F0b3JFdmVudEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJlNmE1NC4uMDAwMDAwMAotLS0gYS92Mi9zcmMvamF4Yi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamF4Yi9ydW50aW1lL1ZhbGlkYXRpb25Mb2NhdG9yRXZlbnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuamF4Yi5ydW50aW1lOwotCi1pbXBvcnQgamF2YXgueG1sLmJpbmQuVmFsaWRhdGlvbkV2ZW50TG9jYXRvcjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFcnJvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLQotcHVibGljIGNsYXNzIFZhbGlkYXRpb25Mb2NhdG9yRXZlbnRJbXBsIGltcGxlbWVudHMgVmFsaWRhdGlvbkV2ZW50TG9jYXRvciAKLXsKLSAgICBpbnQgX2xpbmVOdW1iZXI7Ci0gICAgaW50IF9jb2x1bW5OdW1iZXI7Ci0gICAgaW50IF9vZmZzZXQ7Ci0gICAgVVJMIF91cmw7Ci0gICAgWG1sT2JqZWN0IF9vYmplY3Q7Ci0KLSAgICBwdWJsaWMgc3RhdGljIFZhbGlkYXRpb25Mb2NhdG9yRXZlbnRJbXBsIGNyZWF0ZShYbWxFcnJvciBlcnJvcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgVmFsaWRhdGlvbkxvY2F0b3JFdmVudEltcGwoZXJyb3IuZ2V0TGluZSgpLCBlcnJvci5nZXRDb2x1bW4oKSwKLSAgICAgICAgICAgIGVycm9yLmdldE9mZnNldCgpLCBlcnJvci5nZXRPYmplY3RMb2NhdGlvbigpLCBlcnJvci5nZXRTb3VyY2VOYW1lKCkpOwotICAgIH0KLQotICAgIHByaXZhdGUgVmFsaWRhdGlvbkxvY2F0b3JFdmVudEltcGwoaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsCi0gICAgICAgIGludCBvZmZzZXQsIFhtbE9iamVjdCBvYmplY3QsIFN0cmluZyBzb3VyY2VOYW1lKQotICAgIHsKLSAgICAgICAgX2xpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotICAgICAgICBfY29sdW1uTnVtYmVyID0gY29sdW1uTnVtYmVyOwotICAgICAgICBfb2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICBfb2JqZWN0ID0gb2JqZWN0OwotCi0gICAgICAgIHRyeSB7IF91cmwgPSBuZXcgVVJMKHNvdXJjZU5hbWUpOyB9Ci0gICAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkge30KLQotICAgIH0KLQotICAgIHB1YmxpYyBqYXZhLm5ldC5VUkwgZ2V0VVJMKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfdXJsOwotICAgIH0KLSAgICBwdWJsaWMgaW50IGdldE9mZnNldCgpCi0gICAgewotICAgICAgICByZXR1cm4gX29mZnNldDsKLSAgICB9Ci0gICAgcHVibGljIGludCBnZXRMaW5lTnVtYmVyKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfbGluZU51bWJlcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldENvbHVtbk51bWJlcigpCi0gICAgewotICAgICAgICByZXR1cm4gX2NvbHVtbk51bWJlcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgb3JnLnczYy5kb20uTm9kZSBnZXROb2RlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICBwdWJsaWMgamF2YS5sYW5nLk9iamVjdCBnZXRPYmplY3QoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9vYmplY3Q7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvamF4Yi9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvamF4Yi9ydW50aW1lL1ZhbGlkYXRvckltcGwuamF2YSBiL3YyL3NyYy9qYXhiL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYXhiL3J1bnRpbWUvVmFsaWRhdG9ySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTk5NzQ0Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYXhiL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9qYXhiL3J1bnRpbWUvVmFsaWRhdG9ySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmpheGIucnVudGltZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLWltcG9ydCBqYXZheC54bWwuYmluZC5WYWxpZGF0b3I7Ci1pbXBvcnQgamF2YXgueG1sLmJpbmQuVmFsaWRhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwuYmluZC5WYWxpZGF0aW9uRXZlbnQ7Ci1pbXBvcnQgamF2YXgueG1sLmJpbmQuVmFsaWRhdGlvbkV2ZW50SGFuZGxlcjsKLWltcG9ydCBqYXZheC54bWwuYmluZC5Qcm9wZXJ0eUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwuYmluZC5oZWxwZXJzLkRlZmF1bHRWYWxpZGF0aW9uRXZlbnRIYW5kbGVyOwotaW1wb3J0IGphdmF4LnhtbC5iaW5kLmhlbHBlcnMuVmFsaWRhdGlvbkV2ZW50SW1wbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9uczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEVycm9yOwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9ySW1wbCBpbXBsZW1lbnRzIFZhbGlkYXRvciAKLXsKLSAgICBWYWxpZGF0aW9uRXZlbnRIYW5kbGVyIF9oYW5kbGVyID0gbmV3IERlZmF1bHRWYWxpZGF0aW9uRXZlbnRIYW5kbGVyKCk7Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRFdmVudEhhbmRsZXIoVmFsaWRhdGlvbkV2ZW50SGFuZGxlciBoYW5kbGVyKSAKLSAgICB7Ci0gICAgICAgIF9oYW5kbGVyID0gaGFuZGxlcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVmFsaWRhdGlvbkV2ZW50SGFuZGxlciBnZXRFdmVudEhhbmRsZXIoKSAKLSAgICB7Ci0gICAgICAgIHJldHVybiBfaGFuZGxlcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgT2JqZWN0IGdldFByb3BlcnR5KFN0cmluZyBwcm9wZXJ0eSkgdGhyb3dzIFByb3BlcnR5RXhjZXB0aW9uCi0gICAgewotICAgICAgICB0aHJvdyBuZXcgUHJvcGVydHlFeGNlcHRpb24ocHJvcGVydHkpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFByb3BlcnR5KFN0cmluZyBwcm9wZXJ0eSwgT2JqZWN0IHZhbHVlKSB0aHJvd3MgUHJvcGVydHlFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHRocm93IG5ldyBQcm9wZXJ0eUV4Y2VwdGlvbihwcm9wZXJ0eSwgIHZhbHVlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZShPYmplY3QgbykgdGhyb3dzIFZhbGlkYXRpb25FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGlmIChvID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7Ci0KLSAgICAgICAgaWYgKCEgKCBvIGluc3RhbmNlb2YgWG1sT2JqZWN0KSkKLSAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXhjZXB0aW9uKCJDYW5ub3QgdmFsaWRhdGUgdHJlZSByb290ZWQgYXQgc3Vicm9vdE9iai4iKTsKLQotICAgICAgICByZXR1cm4gdmFsaWRhdGVJbXBsKChYbWxPYmplY3QpbywgX2hhbmRsZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlUm9vdChPYmplY3QgbykgdGhyb3dzIFZhbGlkYXRpb25FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWxpZGF0ZShvKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbGVhbiB2YWxpZGF0ZUltcGwoWG1sT2JqZWN0IG8sIFZhbGlkYXRpb25FdmVudEhhbmRsZXIgaGFuZGxlcikKLSAgICAgICAgdGhyb3dzIFZhbGlkYXRpb25FeGNlcHRpb24KLSAgICB7Ci0KLSAgICAgICAgYXNzZXJ0IG8gIT0gbnVsbCAmJiBoYW5kbGVyICE9IG51bGw7Ci0KLSAgICAgICAgZmluYWwgTGlzdCBsID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBmaW5hbCBYbWxPcHRpb25zIG9wdHMgPSBuZXcgWG1sT3B0aW9ucygpLnNldEVycm9yTGlzdGVuZXIobCk7Ci0KLSAgICAgICAgZmluYWwgYm9vbGVhbiB2YWxpZCA9IG8udmFsaWRhdGUob3B0cyk7Ci0KLSAgICAgICAgLy8gY29udmVydCB0byBWYWxpZGF0aW9uRXZlbnQgYW5kIGRpc3BhdGNoCi0gICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IGwuc2l6ZSgpIDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxFcnJvciB4ZSA9IChYbWxFcnJvcilsLmdldChpKTsKLQotICAgICAgICAgICAgaW50IHNldmVyaXR5ID0geGUuZ2V0U2V2ZXJpdHkoKSA9PSBYbWxFcnJvci5TRVZFUklUWV9FUlJPUiA/IAotICAgICAgICAgICAgICAgIFZhbGlkYXRpb25FdmVudC5FUlJPUiA6Ci0gICAgICAgICAgICAgICAgVmFsaWRhdGlvbkV2ZW50LldBUk5JTkc7Ci0KLSAgICAgICAgICAgIFZhbGlkYXRpb25FdmVudCB2ZSA9IG5ldyBWYWxpZGF0aW9uRXZlbnRJbXBsKHNldmVyaXR5LCB4ZS5nZXRNZXNzYWdlKCksIAotICAgICAgICAgICAgICAgIFZhbGlkYXRpb25Mb2NhdG9yRXZlbnRJbXBsLmNyZWF0ZSh4ZSkpOwotCi0gICAgICAgICAgICB0cnkgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCEgaGFuZGxlci5oYW5kbGVFdmVudCh2ZSkpCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXhjZXB0aW9uKHZlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXhjZXB0aW9uKGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHZhbGlkOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL2pheGIvc2NoZW1hL2pheGJjb25maWcueHNkIGIvdjIvc3JjL2pheGIvc2NoZW1hL2pheGJjb25maWcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGFkMDI2Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9qYXhiL3NjaGVtYS9qYXhiY29uZmlnLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTx4czpzY2hlbWEKLSAgIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgIHhtbG5zOmpjPSJodHRwOi8vd3d3LmJlYS5jb20vMjAwMy8wOC9qYXhiL2NvbmZpZyIKLSAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5iZWEuY29tLzIwMDMvMDgvamF4Yi9jb25maWciCi0gICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0gIAotICA8eHM6ZWxlbWVudCBuYW1lPSJqYXhiLWNvbmZpZyI+Ci0gICAgICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgPHhzOnNlcXVlbmNlPgotCi0gICAgICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9Imdsb2JhbC1lbGVtZW50cyI+Ci0gICAgICAgICAgICAgICAgICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgPHhzOnNlcXVlbmNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iZ2xvYmFsLWVsZW1lbnQiIHR5cGU9ImpjOmdsb2JhbC1lbGVtZW50Ii8+Ci0gICAgICAgICAgICAgICAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgIDwveHM6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgIDwveHM6ZWxlbWVudD4KLQotICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJnbG9iYWwtdHlwZXMiID4KLSAgICAgICAgICAgICAgICAgIDx4czpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICA8eHM6c2VxdWVuY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJnbG9iYWwtdHlwZSIgdHlwZT0iamM6Z2xvYmFsLXR5cGUiLz4KLSAgICAgICAgICAgICAgICAgICAgICA8L3hzOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgPC94czpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgPC94czplbGVtZW50PgotCi0gICAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgIDwveHM6Y29tcGxleFR5cGU+Ci0gIDwveHM6ZWxlbWVudD4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZ2xvYmFsLWVsZW1lbnQiPgotICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9InFuYW1lIiB0eXBlPSJ4czpRTmFtZSIvPgotICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9ImphdmEtaW1wbCIgdHlwZT0ieHM6dG9rZW4iLz4KLSAgICAgIDwveHM6c2VxdWVuY2U+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Imdsb2JhbC10eXBlIi8+Ci0KLTwveHM6c2NoZW1hPgotCmRpZmYgLS1naXQgYS92Mi9zcmMvamF4Yi9zY2hlbWEvamF4YmNvbmZpZy54c2Rjb25maWcgYi92Mi9zcmMvamF4Yi9zY2hlbWEvamF4YmNvbmZpZy54c2Rjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlZDAwMzMuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL2pheGIvc2NoZW1hL2pheGJjb25maWcueHNkY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08eGI6Y29uZmlnIHhtbG5zOnhiPSJodHRwOi8vd3d3LmJlYS5jb20vMjAwMi8wOS94YmVhbi9jb25maWciPgotICA8eGI6bmFtZXNwYWNlIHVyaT0iaHR0cDovL3d3dy5iZWEuY29tLzIwMDMvMDgvamF4Yi9jb25maWciPgotICAgIDx4YjpwYWNrYWdlPm9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYXhiLmNvbmZpZzwveGI6cGFja2FnZT4KLSAgPC94YjpuYW1lc3BhY2U+Ci08L3hiOmNvbmZpZz4KZGlmZiAtLWdpdCBhL3YyL3NyYy9tYXJzaGFsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9tYXJzaGFsL0F0b21pY0xleGVyUHJpbnRlci5qYXZhIGIvdjIvc3JjL21hcnNoYWwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL21hcnNoYWwvQXRvbWljTGV4ZXJQcmludGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4Nzk1NGIuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL21hcnNoYWwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL21hcnNoYWwvQXRvbWljTGV4ZXJQcmludGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5tYXJzaGFsOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLS8qKgotICogQW4gQXRvbWljTGV4ZXJQcmludGVyIGtub3dzIGhvdyB0byBsZXggYW5kIHByaW50IGEgeG1sIHNjaGVtYSBhdG9taWMKLSAqIHNpbXBsZSB0eXBlLiAgTm8gdmFsaWRhdGlvbiBpcyBpbXBsaWVkLCB0aG91Z2ggaXQgaXMgbm90IHByb2hpYml0ZWQuCi0gKi8KLWludGVyZmFjZSBBdG9taWNMZXhlclByaW50ZXIKLXsKLSAgICAvL3dlJ2xsIHNwZWNpYWwgY2FzZSBxbmFtZXMKLSAgICBPYmplY3QgbGV4KENoYXJTZXF1ZW5jZSB2YWx1ZSwgQ29sbGVjdGlvbiBlcnJvcnMpOwotCi0gICAgLy93ZSdsbCBzcGVjaWFsIGNhc2UgcW5hbWVzCi0gICAgQ2hhclNlcXVlbmNlIHByaW50KE9iamVjdCB2YWx1ZSwgQ29sbGVjdGlvbiBlcnJvcnMpOwotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL21hcnNoYWwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL21hcnNoYWwvQXRvbWljU2ltcGxlVHlwZUNvbnZlcnRlci5qYXZhIGIvdjIvc3JjL21hcnNoYWwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL21hcnNoYWwvQXRvbWljU2ltcGxlVHlwZUNvbnZlcnRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDYzZTY3Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9tYXJzaGFsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9tYXJzaGFsL0F0b21pY1NpbXBsZVR5cGVDb252ZXJ0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLm1hcnNoYWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHMuQmluZGluZ0xvYWRlcjsKLQotLyoqCi0gKiBCYXNpYyBYbWxTdHJlYW1SZWFkZXIgYmFzZWQgaW1wbCB0aGF0IGNhbiBoYW5kbGUgY29udmVydGluZwotICogc2ltcGxlIHR5cGVzIG9mIHRoZSBmb3JtIDxhPjQuNTQ8L2E+LgotICovCi1jbGFzcyBBdG9taWNTaW1wbGVUeXBlQ29udmVydGVyCi0gICAgaW1wbGVtZW50cyBUeXBlQ29udmVydGVyCi17Ci0gICAgcHJpdmF0ZSBmaW5hbCBBdG9taWNMZXhlclByaW50ZXIgbGV4ZXJQcmludGVyOwotCi0gICAgQXRvbWljU2ltcGxlVHlwZUNvbnZlcnRlcihBdG9taWNMZXhlclByaW50ZXIgbGV4ZXJQcmludGVyKQotICAgIHsKLSAgICAgICAgdGhpcy5sZXhlclByaW50ZXIgPSBsZXhlclByaW50ZXI7Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCB1bm1hcnNoYWwoVW5tYXJzaGFsQ29udGV4dCBjb250ZXh0KQotICAgIHsKLSAgICAgICAgZmluYWwgQ2hhclNlcXVlbmNlIGNvbnRlbnQgPSBjb250ZXh0LmdldEVsZW1lbnRUZXh0KCk7Ci0KLSAgICAgICAgYXNzZXJ0IChjb250ZW50ICE9IG51bGwpOwotCi0gICAgICAgIHJldHVybiBsZXhlclByaW50ZXIubGV4KGNvbnRlbnQsIGNvbnRleHQuZ2V0RXJyb3JDb2xsZWN0aW9uKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3QgdW5tYXJzaGFsU2ltcGxlVHlwZShDaGFyU2VxdWVuY2UgbGV4aWNhbFZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbm1hcnNoYWxDb250ZXh0IGNvbnRleHQpCi0gICAgewotICAgICAgICByZXR1cm4gbGV4ZXJQcmludGVyLmxleChsZXhpY2FsVmFsdWUsIGNvbnRleHQuZ2V0RXJyb3JDb2xsZWN0aW9uKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoUnVudGltZUJpbmRpbmdUeXBlVGFibGUgdHlwZVRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQmluZGluZ0xvYWRlciBiaW5kaW5nTG9hZGVyKQotICAgIHsKLSAgICB9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL21hcnNoYWwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL21hcnNoYWwvQmluZGluZ0NvbnRleHQuamF2YSBiL3YyL3NyYy9tYXJzaGFsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9tYXJzaGFsL0JpbmRpbmdDb250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhNDRmNmQuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL21hcnNoYWwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL21hcnNoYWwvQmluZGluZ0NvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLm1hcnNoYWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHMuQmluZGluZ0xvYWRlcjsKLQotLyoqCi0gKiBNYWluIGVudHJ5IHBvaW50IGludG8gbWFyc2hhbGxpbmcgZnJhbWV3b3JrLgotICogVXNlIHRoZSBCaW5kaW5nQ29udGV4dEZhY3RvcnkgdG8gY3JlYXRlIG9uZQotICovCi1wdWJsaWMgY2xhc3MgQmluZGluZ0NvbnRleHQKLXsKLQotICAgIHByaXZhdGUgZmluYWwgQmluZGluZ0xvYWRlciBiaW5kaW5nTG9hZGVyOwotICAgIHByaXZhdGUgZmluYWwgUnVudGltZUJpbmRpbmdUeXBlVGFibGUgdHlwZVRhYmxlOwotCi0gICAgLyogcGFja2FnZSBwcm90ZWN0ZWQgLS0gdXNlIHRoZSBmYWN0b3J5ICovCi0gICAgQmluZGluZ0NvbnRleHQoQmluZGluZ0xvYWRlciBiaW5kaW5nTG9hZGVyLAotICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVCaW5kaW5nVHlwZVRhYmxlIHR5cGVUYWJsZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuYmluZGluZ0xvYWRlciA9IGJpbmRpbmdMb2FkZXI7Ci0gICAgICAgIHRoaXMudHlwZVRhYmxlID0gdHlwZVRhYmxlOwotICAgIH0KLQotCi0gICAgcHVibGljIFVubWFyc2hhbGxlciBjcmVhdGVVbm1hcnNoYWxsZXIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBVbm1hcnNoYWxsZXJJbXBsKGJpbmRpbmdMb2FkZXIsIHR5cGVUYWJsZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL21hcnNoYWwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL21hcnNoYWwvQmluZGluZ0NvbnRleHRGYWN0b3J5LmphdmEgYi92Mi9zcmMvbWFyc2hhbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvbWFyc2hhbC9CaW5kaW5nQ29udGV4dEZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU5ZTU1Mi4uMDAwMDAwMAotLS0gYS92Mi9zcmMvbWFyc2hhbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvbWFyc2hhbC9CaW5kaW5nQ29udGV4dEZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5tYXJzaGFsOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzLkJpbmRpbmdGaWxlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0cy5CaW5kaW5nTG9hZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0cy5CaW5kaW5nVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHMuQnVpbHRpbkJpbmRpbmdMb2FkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzLkJ5TmFtZUJlYW47Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzLlBhdGhCaW5kaW5nTG9hZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0cy5TaW1wbGVCaW5kaW5nVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLngyMDAzLngwOS5iaW5kaW5nQ29uZmlnLkJpbmRpbmdDb25maWdEb2N1bWVudDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi0vKioKLSAqIGNyZWF0ZXMgQmluZGluZ0NvbnRleHQgb2JqZWN0cyBmcm9tIHZhcmlvdXMgaW5wdXRzLgotICovCi1wdWJsaWMgY2xhc3MgQmluZGluZ0NvbnRleHRGYWN0b3J5Ci17Ci0KLSAgICBwdWJsaWMgc3RhdGljIEJpbmRpbmdDb250ZXh0IGNyZWF0ZUJpbmRpbmdDb250ZXh0KElucHV0U3RyZWFtIGJpbmRpbmdDb25maWcpCi0gICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgWG1sRXhjZXB0aW9uCi0gICAgewotICAgICAgICBCaW5kaW5nQ29uZmlnRG9jdW1lbnQgZG9jID0KLSAgICAgICAgICAgIEJpbmRpbmdDb25maWdEb2N1bWVudC5GYWN0b3J5LnBhcnNlKGJpbmRpbmdDb25maWcpOwotICAgICAgICByZXR1cm4gY3JlYXRlQmluZGluZ0NvbnRleHQoZG9jKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEJpbmRpbmdDb250ZXh0IGNyZWF0ZUJpbmRpbmdDb250ZXh0KEZpbGUgYmluZGluZ0NvbmZpZykKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBYbWxFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIEJpbmRpbmdDb25maWdEb2N1bWVudCBkb2MgPQotICAgICAgICAgICAgQmluZGluZ0NvbmZpZ0RvY3VtZW50LkZhY3RvcnkucGFyc2UoYmluZGluZ0NvbmZpZyk7Ci0gICAgICAgIHJldHVybiBjcmVhdGVCaW5kaW5nQ29udGV4dChkb2MpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgQmluZGluZ0NvbnRleHQgY3JlYXRlQmluZGluZ0NvbnRleHQoQmluZGluZ0NvbmZpZ0RvY3VtZW50IGRvYykKLSAgICB7Ci0gICAgICAgIEJpbmRpbmdGaWxlIGJmID0gQmluZGluZ0ZpbGUuZm9yRG9jKGRvYyk7Ci0KLSAgICAgICAgQmluZGluZ0xvYWRlciBiaW5kaW5nTG9hZGVyID0gYnVpbGRCaW5kaW5nTG9hZGVyKGJmKTsKLSAgICAgICAgUnVudGltZUJpbmRpbmdUeXBlVGFibGUgdGJsID0gYnVpbGRVbm1hcnNoYWxsaW5nVHlwZVRhYmxlKGJmLCBiaW5kaW5nTG9hZGVyKTsKLQotICAgICAgICByZXR1cm4gbmV3IEJpbmRpbmdDb250ZXh0KGJpbmRpbmdMb2FkZXIsIHRibCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgQmluZGluZ0xvYWRlciBidWlsZEJpbmRpbmdMb2FkZXIoQmluZGluZ0ZpbGUgYmYpCi0gICAgewotICAgICAgICBCaW5kaW5nTG9hZGVyIGJ1aWx0aW5zID0gQnVpbHRpbkJpbmRpbmdMb2FkZXIuZ2V0SW5zdGFuY2UoKTsKLSAgICAgICAgcmV0dXJuIFBhdGhCaW5kaW5nTG9hZGVyLmZvclBhdGgobmV3IEJpbmRpbmdMb2FkZXJbXXtidWlsdGlucywgYmZ9KTsKLSAgICB9Ci0KLQotICAgIHByaXZhdGUgc3RhdGljIFJ1bnRpbWVCaW5kaW5nVHlwZVRhYmxlIGJ1aWxkVW5tYXJzaGFsbGluZ1R5cGVUYWJsZShCaW5kaW5nRmlsZSBiZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmluZGluZ0xvYWRlciBsb2FkZXIpCi0gICAgewotICAgICAgICBSdW50aW1lQmluZGluZ1R5cGVUYWJsZSB0YmwgPSBuZXcgUnVudGltZUJpbmRpbmdUeXBlVGFibGUoKTsKLQotICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ciA9IGJmLmJpbmRpbmdUeXBlcygpLml0ZXJhdG9yKCk7IGl0ci5oYXNOZXh0KCk7KSB7Ci0gICAgICAgICAgICBCaW5kaW5nVHlwZSB0eXBlID0gKEJpbmRpbmdUeXBlKWl0ci5uZXh0KCk7Ci0KLSAgICAgICAgICAgIFR5cGVVbm1hcnNoYWxsZXIgdW0gPSBjcmVhdGVUeXBlVW5tYXJzaGFsbGVyKHR5cGUsIGxvYWRlciwgdGJsKTsKLSAgICAgICAgICAgIHRibC5wdXRUeXBlVW5tYXJzaGFsbGVyKHR5cGUsIHVtKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRibC5pbml0VW5tYXJzaGFsbGVycyhsb2FkZXIpOwotCi0gICAgICAgIHJldHVybiB0Ymw7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgVHlwZVVubWFyc2hhbGxlciBjcmVhdGVUeXBlVW5tYXJzaGFsbGVyKEJpbmRpbmdUeXBlIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpbmRpbmdMb2FkZXIgbG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lQmluZGluZ1R5cGVUYWJsZSB0YWJsZSkKLSAgICB7Ci0gICAgICAgIC8vVE9ETzogY2xlYW51cCB0aGlzIG5hc3R5IGluc3RhbmNlb2Ygc3R1ZmYgKFZpc2l0b3I/KQotCi0gICAgICAgIGlmICh0eXBlIGluc3RhbmNlb2YgU2ltcGxlQmluZGluZ1R5cGUpIHsKLSAgICAgICAgICAgIC8vbm90ZSB0aGlzIGNvdWxkIHJldHVybiBhIHN0YXRpYyBmb3IgYnVpbHRpbiB0eXBlcwotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVNpbXBsZVR5cGVVbm1hcnNoYWxsZXIoKFNpbXBsZUJpbmRpbmdUeXBlKXR5cGUsIGxvYWRlciwgdGFibGUpOwotICAgICAgICB9IGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBCeU5hbWVCZWFuKSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEJ5TmFtZVVubWFyc2hhbGxlcigoQnlOYW1lQmVhbil0eXBlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigiVU5JTVBMRU1FTlRFRCBUWVBFOiAiICsgdHlwZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgVHlwZVVubWFyc2hhbGxlciBjcmVhdGVTaW1wbGVUeXBlVW5tYXJzaGFsbGVyKFNpbXBsZUJpbmRpbmdUeXBlIHN0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaW5kaW5nTG9hZGVyIGxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZUJpbmRpbmdUeXBlVGFibGUgdGFibGUpCi0gICAgewotICAgICAgICBUeXBlVW5tYXJzaGFsbGVyIHVtID0gdGFibGUuZ2V0VHlwZVVubWFyc2hhbGxlcihzdHlwZSk7Ci0KLSAgICAgICAgaWYgKHVtID09IG51bGwpIHsKLSAgICAgICAgICAgIC8vbGV0J3MgdHJ5IHVzaW5nIHRoZSBhcyBpZiB0eXBlCi0gICAgICAgICAgICBCaW5kaW5nVHlwZSBhc2lmID0gbG9hZGVyLmdldEJpbmRpbmdUeXBlKHN0eXBlLmdldEFzSWZCaW5kaW5nVHlwZU5hbWUoKSk7Ci0gICAgICAgICAgICBpZiAoYXNpZiA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCJ1bmFibGUgdG8gZ2V0IGFzaWYgdHlwZSBmb3IgIiArIHN0eXBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVtID0gdGFibGUuZ2V0VHlwZVVubWFyc2hhbGxlcihhc2lmKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1bSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbXNnID0gInVuYWJsZSB0byBnZXQgc2ltcGxlIHR5cGUgdW5tYXJzaGFsbGVyIGZvciAiICsgc3R5cGU7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobXNnKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB1bTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9tYXJzaGFsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9tYXJzaGFsL0J1aWx0aW5SdW50aW1lVHlwZVRhYmxlLmphdmEgYi92Mi9zcmMvbWFyc2hhbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvbWFyc2hhbC9CdWlsdGluUnVudGltZVR5cGVUYWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjNkZTAwLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9tYXJzaGFsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9tYXJzaGFsL0J1aWx0aW5SdW50aW1lVHlwZVRhYmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5tYXJzaGFsOwotCi0KLQotLyoqCi0gKiBBIHNwZWNpYWwgc2luZ2xldG9uIHZlcnNpb24gb2YgUnVudGltZUJpbmRpbmdUeXBlVGFibGUgdGhhdCBrbm93cyBhYm91dAotICogYWxsIHRoZSBidWlsdGluIHR5cGVzIHRoYXQgd2Uga25vdyBob3cgdG8gZGVhbCB3aXRoLgotICovCi1jbGFzcyBCdWlsdGluUnVudGltZVR5cGVUYWJsZQotICAgIGV4dGVuZHMgUnVudGltZUJpbmRpbmdUeXBlVGFibGUKLXsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEJ1aWx0aW5SdW50aW1lVHlwZVRhYmxlIElOU1RBTkNFID0KLSAgICAgICAgbmV3IEJ1aWx0aW5SdW50aW1lVHlwZVRhYmxlKCk7Ci0KLSAgICBwdWJsaWMgc3RhdGljIFJ1bnRpbWVCaW5kaW5nVHlwZVRhYmxlIGdldEJ1aWx0aW5UYWJsZSgpCi0gICAgewotICAgICAgICByZXR1cm4gSU5TVEFOQ0U7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBCdWlsdGluUnVudGltZVR5cGVUYWJsZSgpCi0gICAgewotICAgICAgICBhZGRYc2RCdWlsdGluKCJmbG9hdCIsIGZsb2F0LmNsYXNzLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICBuZXcgQXRvbWljU2ltcGxlVHlwZUNvbnZlcnRlcihuZXcgRmxvYXRMZXhlclByaW50ZXIoKSkpOwotICAgICAgICBhZGRYc2RCdWlsdGluKCJmbG9hdCIsIEZsb2F0LmNsYXNzLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICBuZXcgQXRvbWljU2ltcGxlVHlwZUNvbnZlcnRlcihuZXcgRmxvYXRMZXhlclByaW50ZXIoKSkpOwotCi0gICAgICAgIGFkZFhzZEJ1aWx0aW4oImxvbmciLCBsb25nLmNsYXNzLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICBuZXcgQXRvbWljU2ltcGxlVHlwZUNvbnZlcnRlcihuZXcgTG9uZ0xleGVyUHJpbnRlcigpKSk7Ci0gICAgICAgIGFkZFhzZEJ1aWx0aW4oImxvbmciLCBMb25nLmNsYXNzLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICBuZXcgQXRvbWljU2ltcGxlVHlwZUNvbnZlcnRlcihuZXcgTG9uZ0xleGVyUHJpbnRlcigpKSk7Ci0KLSAgICAgICAgYWRkWHNkQnVpbHRpbigic3RyaW5nIiwgU3RyaW5nLmNsYXNzLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICBuZXcgQXRvbWljU2ltcGxlVHlwZUNvbnZlcnRlcihuZXcgU3RyaW5nTGV4ZXJQcmludGVyKCkpKTsKLQotICAgIH0KLQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvbWFyc2hhbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvbWFyc2hhbC9CeU5hbWVSdW50aW1lQmluZGluZ1R5cGUuamF2YSBiL3YyL3NyYy9tYXJzaGFsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9tYXJzaGFsL0J5TmFtZVJ1bnRpbWVCaW5kaW5nVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWU5ZjE2Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9tYXJzaGFsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9tYXJzaGFsL0J5TmFtZVJ1bnRpbWVCaW5kaW5nVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjY4ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLm1hcnNoYWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFJ1bnRpbWVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzLkJpbmRpbmdMb2FkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzLkJpbmRpbmdQcm9wZXJ0eTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHMuQmluZGluZ1R5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzLkJ5TmFtZUJlYW47Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzLkphdmFOYW1lOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0cy5RTmFtZVByb3BlcnR5OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLQotZmluYWwgY2xhc3MgQnlOYW1lUnVudGltZUJpbmRpbmdUeXBlCi0gICAgaW1wbGVtZW50cyBSdW50aW1lQmluZGluZ1R5cGUKLXsKLSAgICBwcml2YXRlIGZpbmFsIEJ5TmFtZUJlYW4gYnlOYW1lQmVhbjsKLSAgICBwcml2YXRlIGZpbmFsIFByb3BlcnR5W10gcHJvcGVydGllczsKLSAgICBwcml2YXRlIGZpbmFsIENsYXNzIGphdmFDbGFzczsKLQotICAgIEJ5TmFtZVJ1bnRpbWVCaW5kaW5nVHlwZShCeU5hbWVCZWFuIGJ0eXBlKQotICAgIHsKLSAgICAgICAgYnlOYW1lQmVhbiA9IGJ0eXBlOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgamF2YUNsYXNzID0gZ2V0SmF2YUNsYXNzKGJ0eXBlLCBnZXRDbGFzcygpLmdldENsYXNzTG9hZGVyKCkpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBtc2cgPSAiZmFpbGVkIHRvIGxvYWQgIiArIGJ0eXBlLmdldE5hbWUoKS5nZXRKYXZhTmFtZSgpOwotICAgICAgICAgICAgdGhyb3cgKFJ1bnRpbWVFeGNlcHRpb24pKG5ldyBSdW50aW1lRXhjZXB0aW9uKG1zZykuaW5pdENhdXNlKGUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByb3BlcnRpZXMgPSBuZXcgUHJvcGVydHlbYnR5cGUuZ2V0UHJvcGVydGllcygpLnNpemUoKV07Ci0gICAgfQotCi0gICAgLy9wcmVwYXJlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBmb3IgdXNlCi0gICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZShSdW50aW1lQmluZGluZ1R5cGVUYWJsZSB0eXBlVGFibGUsCi0gICAgICAgICAgICAgICAgICAgIEJpbmRpbmdMb2FkZXIgbG9hZGVyKQotICAgIHsKLSAgICAgICAgaW50IGlkeCA9IDA7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaXRyID0gYnlOYW1lQmVhbi5nZXRQcm9wZXJ0aWVzKCkuaXRlcmF0b3IoKTsgaXRyLmhhc05leHQoKTspIHsKLSAgICAgICAgICAgIFFOYW1lUHJvcGVydHkgYnByb3AgPSAoUU5hbWVQcm9wZXJ0eSlpdHIubmV4dCgpOwotICAgICAgICAgICAgUHJvcGVydHkgcHJvcCA9IG5ldyBQcm9wZXJ0eShqYXZhQ2xhc3MsIGJwcm9wLCB0eXBlVGFibGUsIGxvYWRlcik7Ci0gICAgICAgICAgICBwcm9wZXJ0aWVzW2lkeCsrXSA9IHByb3A7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgT2JqZWN0IGNyZWF0ZUludGVybWVkaWFyeShVbm1hcnNoYWxDb250ZXh0IGNvbnRleHQpCi0gICAgewotICAgICAgICByZXR1cm4gQ2xhc3NMb2FkaW5nVXRpbHMubmV3SW5zdGFuY2UoamF2YUNsYXNzKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBDbGFzcyBnZXRKYXZhQ2xhc3MoQmluZGluZ1R5cGUgYnR5cGUsIENsYXNzTG9hZGVyIGJhY2t1cCkKLSAgICAgICAgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGZpbmFsIEphdmFOYW1lIGphdmFOYW1lID0gYnR5cGUuZ2V0TmFtZSgpLmdldEphdmFOYW1lKCk7Ci0gICAgICAgIFN0cmluZyBqY2xhc3MgPSBqYXZhTmFtZS50b1N0cmluZygpOwotICAgICAgICByZXR1cm4gQ2xhc3NMb2FkaW5nVXRpbHMubG9hZENsYXNzKGpjbGFzcywgYmFja3VwKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgT2JqZWN0IGdldEZpbmFsT2JqZWN0RnJvbUludGVybWVkaWFyeShPYmplY3QgcmV0dmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVubWFyc2hhbENvbnRleHQgY29udGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiByZXR2YWw7Ci0gICAgfQotCi0gICAgLy9UT0RPOiBvcHRpbWl6ZSB0aGlzIGxpbmVhciBzY2FuCi0gICAgUnVudGltZUJpbmRpbmdQcm9wZXJ0eSBnZXRNYXRjaGluZ0VsZW1lbnRQcm9wZXJ0eShTdHJpbmcgdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxvY2FsbmFtZSkKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwLCBsZW4gPSBwcm9wZXJ0aWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICBmaW5hbCBQcm9wZXJ0eSBwcm9wID0gcHJvcGVydGllc1tpXTsKLSAgICAgICAgICAgIGlmIChwcm9wLmlzQXR0cmlidXRlKCkpIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBRTmFtZSBxbiA9IHByb3AuZ2V0UU5hbWUoKTsKLSAgICAgICAgICAgIGlmIChxbi5nZXRMb2NhbFBhcnQoKS5lcXVhbHMobG9jYWxuYW1lKSAmJgotICAgICAgICAgICAgICAgIHFuLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyh1cmkpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHByb3A7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLy9UT0RPOiBvcHRpbWl6ZSB0aGlzIGxpbmVhciBzY2FuCi0gICAgUnVudGltZUJpbmRpbmdQcm9wZXJ0eSBnZXRNYXRjaGluZ0F0dHJpYnV0ZVByb3BlcnR5KFN0cmluZyB1cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBsb2NhbG5hbWUpCi0gICAgewotICAgICAgICBmb3IgKGludCBpID0gMCwgbGVuID0gcHJvcGVydGllcy5sZW5ndGg7IGkgPCBsZW47IGkrKykgewotICAgICAgICAgICAgZmluYWwgUHJvcGVydHkgcHJvcCA9IHByb3BlcnRpZXNbaV07Ci0gICAgICAgICAgICBpZiAoIXByb3AuaXNBdHRyaWJ1dGUoKSkgY29udGludWU7Ci0KLSAgICAgICAgICAgIFFOYW1lIHFuID0gcHJvcC5nZXRRTmFtZSgpOwotICAgICAgICAgICAgaWYgKHFuLmdldExvY2FsUGFydCgpLmVxdWFscyhsb2NhbG5hbWUpICYmCi0gICAgICAgICAgICAgICAgcW4uZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKHVyaSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcHJvcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIFByb3BlcnR5IGltcGxlbWVudHMgUnVudGltZUJpbmRpbmdQcm9wZXJ0eQotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBRTmFtZVByb3BlcnR5IGJpbmRpbmdQcm9wZXJ0eTsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBUeXBlVW5tYXJzaGFsbGVyIHVubWFyc2hhbGxlcjsKLSAgICAgICAgcHJpdmF0ZSBmaW5hbCBDbGFzcyBwcm9wZXJ0eUNsYXNzOwotICAgICAgICBwcml2YXRlIGZpbmFsIE1ldGhvZCBzZXRNZXRob2Q7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBqYXZhUHJpbWl0aXZlOwotCi0gICAgICAgIFByb3BlcnR5KENsYXNzIGJlYW5DbGFzcywKLSAgICAgICAgICAgICAgICAgUU5hbWVQcm9wZXJ0eSBwcm9wLAotICAgICAgICAgICAgICAgICBSdW50aW1lQmluZGluZ1R5cGVUYWJsZSB0eXBlVGFibGUsCi0gICAgICAgICAgICAgICAgIEJpbmRpbmdMb2FkZXIgbG9hZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLmJpbmRpbmdQcm9wZXJ0eSA9IHByb3A7Ci0gICAgICAgICAgICB0aGlzLnVubWFyc2hhbGxlciA9IGxvb2t1cFVubWFyc2hhbGxlcihwcm9wLCB0eXBlVGFibGUsIGxvYWRlcik7Ci0gICAgICAgICAgICBmaW5hbCBCaW5kaW5nVHlwZSBiaW5kaW5nVHlwZSA9IGxvYWRlci5nZXRCaW5kaW5nVHlwZShwcm9wLmdldFR5cGVOYW1lKCkpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICB0aGlzLnByb3BlcnR5Q2xhc3MgPSBnZXRKYXZhQ2xhc3MoYmluZGluZ1R5cGUsIGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIG1zZyA9ICJlcnJvciBsb2FkaW5nICIgKyBiaW5kaW5nVHlwZS5nZXROYW1lKCkuZ2V0SmF2YU5hbWUoKTsKLSAgICAgICAgICAgICAgICB0aHJvdyAoUnVudGltZUV4Y2VwdGlvbikobmV3IFJ1bnRpbWVFeGNlcHRpb24obXNnKS5pbml0Q2F1c2UoZSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzZXRNZXRob2QgPSBnZXRTZXR0ZXJNZXRob2QocHJvcCwgYmVhbkNsYXNzLCBwcm9wZXJ0eUNsYXNzKTsKLSAgICAgICAgICAgIGphdmFQcmltaXRpdmUgPSBwcm9wZXJ0eUNsYXNzLmlzUHJpbWl0aXZlKCk7Ci0gICAgICAgIH0KLQotCi0gICAgICAgIHByaXZhdGUgVHlwZVVubWFyc2hhbGxlciBsb29rdXBVbm1hcnNoYWxsZXIoQmluZGluZ1Byb3BlcnR5IHByb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZUJpbmRpbmdUeXBlVGFibGUgdHlwZVRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpbmRpbmdMb2FkZXIgYmluZGluZ0xvYWRlcikKLSAgICAgICAgewotICAgICAgICAgICAgZmluYWwgQmluZGluZ1R5cGUgYmluZGluZ1R5cGUgPQotICAgICAgICAgICAgICAgIGJpbmRpbmdMb2FkZXIuZ2V0QmluZGluZ1R5cGUocHJvcC5nZXRUeXBlTmFtZSgpKTsKLSAgICAgICAgICAgIFR5cGVVbm1hcnNoYWxsZXIgdW0gPSB0eXBlVGFibGUuZ2V0VHlwZVVubWFyc2hhbGxlcihiaW5kaW5nVHlwZSk7Ci0gICAgICAgICAgICBpZiAodW0gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigiZmFpbGVkIHRvIGdldCB1bm1hcnNoYWxsZXIgZm9yICIgKyBwcm9wKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB1bTsKLSAgICAgICAgfQotCi0KLSAgICAgICAgcHVibGljIFR5cGVVbm1hcnNoYWxsZXIgZ2V0VHlwZVVubWFyc2hhbGxlcihVbm1hcnNoYWxDb250ZXh0IGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZpbmFsIFFOYW1lIHhzaV90eXBlID0gY29udGV4dC5nZXRYc2lUeXBlKCk7Ci0KLSAgICAgICAgICAgIGlmICh4c2lfdHlwZSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiB1bm1hcnNoYWxsZXI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaWYgKHhzaV90eXBlID09IFVubWFyc2hhbENvbnRleHQuWFNJX05JTF9NQVJLRVIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOdWxsVW5tYXJzaGFsbGVyLmdldEluc3RhbmNlKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmdldFR5cGVVbm1hcnNoYWxsZXIoeHNpX3R5cGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgZmlsbChPYmplY3QgaW50ZXIsIE9iamVjdCBwcm9wX29iaikKLSAgICAgICAgewotICAgICAgICAgICAgLy9tZWFucyB4c2k6bmlsIHdhcyB0cnVlIGJ1dCB3ZSdyZSBhIHByaW10aXZlLgotICAgICAgICAgICAgLy9zY2hlbWEgc2hvdWxkIGhhdmUgbmlsbGFibGU9ImZhbHNlIiBzbyB0aGlzCi0gICAgICAgICAgICAvL2lzIGEgdmFsaWRhdGlvbiBwcm9ibGVtcwotICAgICAgICAgICAgaWYgKHByb3Bfb2JqID09IG51bGwgJiYgamF2YVByaW1pdGl2ZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgc2V0TWV0aG9kLmludm9rZShpbnRlciwgbmV3IE9iamVjdFtde3Byb3Bfb2JqfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBYbWxSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBYbWxSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBYbWxSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgTWV0aG9kIGdldFNldHRlck1ldGhvZChRTmFtZVByb3BlcnR5IGJpbmRpbmdQcm9wZXJ0eTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3MgYmVhbkNsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzIHByb3BDbGFzcykKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHNldHRlciA9IGJpbmRpbmdQcm9wZXJ0eTEuZ2V0U2V0dGVyTmFtZSgpOwotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBmaW5hbCBNZXRob2Qgc2V0X21ldGhvZCA9Ci0gICAgICAgICAgICAgICAgICAgIGJlYW5DbGFzcy5nZXRNZXRob2Qoc2V0dGVyLCBuZXcgQ2xhc3NbXXtwcm9wQ2xhc3N9KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2V0X21ldGhvZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBYbWxSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWG1sUnVudGltZUV4Y2VwdGlvbihlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGJvb2xlYW4gaXNBdHRyaWJ1dGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYmluZGluZ1Byb3BlcnR5LmlzQXR0cmlidXRlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBRTmFtZSBnZXRRTmFtZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBiaW5kaW5nUHJvcGVydHkuZ2V0UU5hbWUoKTsKLSAgICAgICAgfQotCi0gICAgfQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvbWFyc2hhbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvbWFyc2hhbC9CeU5hbWVVbm1hcnNoYWxsZXIuamF2YSBiL3YyL3NyYy9tYXJzaGFsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9tYXJzaGFsL0J5TmFtZVVubWFyc2hhbGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDVlMjgyLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9tYXJzaGFsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9tYXJzaGFsL0J5TmFtZVVubWFyc2hhbGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLm1hcnNoYWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHMuQmluZGluZ0xvYWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHMuQnlOYW1lQmVhbjsKLQotZmluYWwgY2xhc3MgQnlOYW1lVW5tYXJzaGFsbGVyIGltcGxlbWVudHMgVHlwZVVubWFyc2hhbGxlcgotewotICAgIHByaXZhdGUgZmluYWwgQnlOYW1lUnVudGltZUJpbmRpbmdUeXBlIHR5cGU7Ci0KLSAgICBwdWJsaWMgQnlOYW1lVW5tYXJzaGFsbGVyKEJ5TmFtZUJlYW4gdHlwZSkKLSAgICB7Ci0gICAgICAgIHRoaXMudHlwZSA9IG5ldyBCeU5hbWVSdW50aW1lQmluZGluZ1R5cGUodHlwZSk7Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCB1bm1hcnNoYWwoVW5tYXJzaGFsQ29udGV4dCBjb250ZXh0KQotICAgIHsKLSAgICAgICAgZmluYWwgT2JqZWN0IGludGVyID0gdHlwZS5jcmVhdGVJbnRlcm1lZGlhcnkoY29udGV4dCk7Ci0gICAgICAgIGRlc2VyaWFsaXplQXR0cmlidXRlcyhpbnRlciwgY29udGV4dCk7Ci0gICAgICAgIGRlc2VyaWFsaXplQ29udGVudHMoaW50ZXIsIGNvbnRleHQpOwotICAgICAgICByZXR1cm4gdHlwZS5nZXRGaW5hbE9iamVjdEZyb21JbnRlcm1lZGlhcnkoaW50ZXIsIGNvbnRleHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3QgdW5tYXJzaGFsU2ltcGxlVHlwZShDaGFyU2VxdWVuY2UgbGV4aWNhbFZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbm1hcnNoYWxDb250ZXh0IGNvbnRleHQpCi0gICAgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgZGVzZXJpYWxpemVDb250ZW50cyhPYmplY3QgaW50ZXIsIFVubWFyc2hhbENvbnRleHQgY29udGV4dCkKLSAgICB7Ci0gICAgICAgIHdoaWxlIChjb250ZXh0LmFkdmFuY2VUb05leHRTdGFydEVsZW1lbnQoKSkgewotICAgICAgICAgICAgYXNzZXJ0IGNvbnRleHQuZ2V0WG1sU3RyZWFtKCkuaXNTdGFydEVsZW1lbnQoKTsKLQotICAgICAgICAgICAgUnVudGltZUJpbmRpbmdQcm9wZXJ0eSBwcm9wID0gZmluZE1hdGNoaW5nRWxlbWVudFByb3BlcnR5KGNvbnRleHQpOwotICAgICAgICAgICAgaWYgKHByb3AgIT0gbnVsbCkgZmlsbEVsZW1lbnRQcm9wKHByb3AsIGNvbnRleHQsIGludGVyKTsKLSAgICAgICAgfQotICAgIH0KLQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBmaWxsRWxlbWVudFByb3AoUnVudGltZUJpbmRpbmdQcm9wZXJ0eSBwcm9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVubWFyc2hhbENvbnRleHQgY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QgaW50ZXIpCi0gICAgewotICAgICAgICBmaW5hbCBUeXBlVW5tYXJzaGFsbGVyIHVtID0gcHJvcC5nZXRUeXBlVW5tYXJzaGFsbGVyKGNvbnRleHQpOwotICAgICAgICBhc3NlcnQgdW0gIT0gbnVsbDsKLQotICAgICAgICBmaW5hbCBPYmplY3QgcHJvcF92YWwgPSB1bS51bm1hcnNoYWwoY29udGV4dCk7Ci0gICAgICAgIHByb3AuZmlsbChpbnRlciwgcHJvcF92YWwpOwotICAgIH0KLQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBmaWxsQXR0cmlidXRlUHJvcChSdW50aW1lQmluZGluZ1Byb3BlcnR5IHByb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyU2VxdWVuY2UgbGV4aWNhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVubWFyc2hhbENvbnRleHQgY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCBpbnRlcikKLSAgICB7Ci0gICAgICAgIGZpbmFsIFR5cGVVbm1hcnNoYWxsZXIgdW0gPSBwcm9wLmdldFR5cGVVbm1hcnNoYWxsZXIoY29udGV4dCk7Ci0gICAgICAgIGFzc2VydCB1bSAhPSBudWxsOwotCi0gICAgICAgIGZpbmFsIE9iamVjdCBwcm9wX3ZhbCA9IHVtLnVubWFyc2hhbFNpbXBsZVR5cGUobGV4aWNhbCwgY29udGV4dCk7Ci0gICAgICAgIHByb3AuZmlsbChpbnRlciwgcHJvcF92YWwpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBkZXNlcmlhbGl6ZUF0dHJpYnV0ZXMoT2JqZWN0IGludGVyLCBVbm1hcnNoYWxDb250ZXh0IGNvbnRleHQpCi0gICAgewotICAgICAgICBmaW5hbCBpbnQgY250ID0gY29udGV4dC5nZXRBdHRyaWJ1dGVDb3VudCgpOwotICAgICAgICBmb3IgKGludCBhdHRfaWR4ID0gMDsgYXR0X2lkeCA8IGNudDsgYXR0X2lkeCsrKSB7Ci0gICAgICAgICAgICBSdW50aW1lQmluZGluZ1Byb3BlcnR5IHByb3AgPQotICAgICAgICAgICAgICAgIGZpbmRNYXRjaGluZ0F0dHJpYnV0ZVByb3BlcnR5KGF0dF9pZHgsIGNvbnRleHQpOwotICAgICAgICAgICAgaWYgKHByb3AgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIFN0cmluZyBhdHRfdmFsID0gY29udGV4dC5nZXRBdHRyaWJ1dGVWYWx1ZShhdHRfaWR4KTsKLSAgICAgICAgICAgICAgICBmaWxsQXR0cmlidXRlUHJvcChwcm9wLCBhdHRfdmFsLCBjb250ZXh0LCBpbnRlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIFJ1bnRpbWVCaW5kaW5nUHJvcGVydHkgZmluZE1hdGNoaW5nRWxlbWVudFByb3BlcnR5KFVubWFyc2hhbENvbnRleHQgY29udGV4dCkKLSAgICB7Ci0gICAgICAgIFN0cmluZyB1cmkgPSBjb250ZXh0LmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgICBTdHJpbmcgbG5hbWUgPSBjb250ZXh0LmdldExvY2FsTmFtZSgpOwotICAgICAgICByZXR1cm4gdHlwZS5nZXRNYXRjaGluZ0VsZW1lbnRQcm9wZXJ0eSh1cmksIGxuYW1lKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFJ1bnRpbWVCaW5kaW5nUHJvcGVydHkgZmluZE1hdGNoaW5nQXR0cmlidXRlUHJvcGVydHkoaW50IGF0dF9pZHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVubWFyc2hhbENvbnRleHQgY29udGV4dCkKLSAgICB7Ci0gICAgICAgIFN0cmluZyB1cmkgPSBjb250ZXh0LmdldEF0dHJpYnV0ZU5hbWVzcGFjZVVSSShhdHRfaWR4KTsKLSAgICAgICAgU3RyaW5nIGxuYW1lID0gY29udGV4dC5nZXRBdHRyaWJ1dGVMb2NhbE5hbWUoYXR0X2lkeCk7Ci0KLSAgICAgICAgcmV0dXJuIHR5cGUuZ2V0TWF0Y2hpbmdBdHRyaWJ1dGVQcm9wZXJ0eSh1cmksIGxuYW1lKTsKLSAgICB9Ci0KLSAgICAvL3ByZXBhcmUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGZvciB1c2UKLSAgICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKFJ1bnRpbWVCaW5kaW5nVHlwZVRhYmxlIHR5cGVUYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpbmRpbmdMb2FkZXIgYmluZGluZ0xvYWRlcikKLSAgICB7Ci0gICAgICAgIHR5cGUuaW5pdGlhbGl6ZSh0eXBlVGFibGUsIGJpbmRpbmdMb2FkZXIpOwotICAgIH0KLQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvbWFyc2hhbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvbWFyc2hhbC9DbGFzc0xvYWRpbmdVdGlscy5qYXZhIGIvdjIvc3JjL21hcnNoYWwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL21hcnNoYWwvQ2xhc3NMb2FkaW5nVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVmMjVhOC4uMDAwMDAwMAotLS0gYS92Mi9zcmMvbWFyc2hhbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvbWFyc2hhbC9DbGFzc0xvYWRpbmdVdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg4ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLm1hcnNoYWw7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5BcnJheTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWZpbmFsIGNsYXNzIENsYXNzTG9hZGluZ1V0aWxzCi17Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWFwIFBSSU1JVElWRVMgPSBuZXcgSGFzaE1hcCgpOwotCi0gICAgc3RhdGljCi0gICAgewotICAgICAgICBQUklNSVRJVkVTLnB1dChib29sZWFuLmNsYXNzLmdldE5hbWUoKSwgYm9vbGVhbi5jbGFzcyk7Ci0gICAgICAgIFBSSU1JVElWRVMucHV0KGNoYXIuY2xhc3MuZ2V0TmFtZSgpLCBjaGFyLmNsYXNzKTsKLSAgICAgICAgUFJJTUlUSVZFUy5wdXQoYnl0ZS5jbGFzcy5nZXROYW1lKCksIGJ5dGUuY2xhc3MpOwotICAgICAgICBQUklNSVRJVkVTLnB1dChzaG9ydC5jbGFzcy5nZXROYW1lKCksIHNob3J0LmNsYXNzKTsKLSAgICAgICAgUFJJTUlUSVZFUy5wdXQoaW50LmNsYXNzLmdldE5hbWUoKSwgaW50LmNsYXNzKTsKLSAgICAgICAgUFJJTUlUSVZFUy5wdXQobG9uZy5jbGFzcy5nZXROYW1lKCksIGxvbmcuY2xhc3MpOwotICAgICAgICBQUklNSVRJVkVTLnB1dChmbG9hdC5jbGFzcy5nZXROYW1lKCksIGZsb2F0LmNsYXNzKTsKLSAgICAgICAgUFJJTUlUSVZFUy5wdXQoZG91YmxlLmNsYXNzLmdldE5hbWUoKSwgZG91YmxlLmNsYXNzKTsKLSAgICB9Ci0KLQotICAgIHB1YmxpYyBzdGF0aWMgQ2xhc3MgbG9hZENsYXNzKFN0cmluZyBjbGFzc05hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NMb2FkZXIgYmFja3VwX2NsYXNzbG9hZGVyKQotICAgICAgICB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgQ2xhc3MgcHJpbV9jbGFzcyA9IGxvYWRQcmltaXRpdmVDbGFzcyhjbGFzc05hbWUpOwotICAgICAgICBpZiAocHJpbV9jbGFzcyAhPSBudWxsKSByZXR1cm4gcHJpbV9jbGFzczsKLQotICAgICAgICBDbGFzcyBhcnJheV9jbGFzcyA9IGxvYWRBcnJheUNsYXNzKGNsYXNzTmFtZSwgYmFja3VwX2NsYXNzbG9hZGVyKTsKLSAgICAgICAgaWYgKGFycmF5X2NsYXNzICE9IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gYXJyYXlfY2xhc3M7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBsb2FkTm9uQXJyYXlDbGFzcyhjbGFzc05hbWUsIGJhY2t1cF9jbGFzc2xvYWRlcik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgQ2xhc3MgbG9hZFByaW1pdGl2ZUNsYXNzKFN0cmluZyBjbGFzc05hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gKENsYXNzKVBSSU1JVElWRVMuZ2V0KGNsYXNzTmFtZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgQ2xhc3MgbG9hZE5vbkFycmF5Q2xhc3MoU3RyaW5nIGNsYXNzTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc0xvYWRlciBiYWNrdXBfY2xhc3Nsb2FkZXIpCi0gICAgICAgIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uCi0gICAgewotICAgICAgICBDbGFzcyBwcmltX2NsYXNzID0gbG9hZFByaW1pdGl2ZUNsYXNzKGNsYXNzTmFtZSk7Ci0KLSAgICAgICAgaWYgKHByaW1fY2xhc3MgIT0gbnVsbCkgewotICAgICAgICAgICAgcmV0dXJuIHByaW1fY2xhc3M7Ci0gICAgICAgIH0KLQotICAgICAgICBDbGFzc0xvYWRlciBjbCA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7Ci0KLSAgICAgICAgaWYgKGNsID09IG51bGwpIHsKLSAgICAgICAgICAgIGNsID0gYmFja3VwX2NsYXNzbG9hZGVyOwotICAgICAgICB9Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBjbC5sb2FkQ2xhc3MoY2xhc3NOYW1lKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICByZXR1cm4gQ2xhc3MuZm9yTmFtZShjbGFzc05hbWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgQ2xhc3MgbG9hZEFycmF5Q2xhc3MoU3RyaW5nIGNsYXNzTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc0xvYWRlciBiYWNrdXBfY2xhc3Nsb2FkZXIpCi0gICAgICAgIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uCi0gICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgY29tcG9uZW50ID0gbmV3IFN0cmluZ0J1ZmZlcihjbGFzc05hbWUubGVuZ3RoKCkpOwotICAgICAgICBpbnQgcmFuayA9IGdldEFycmF5Q29tcG9uZW50TmFtZUZyb21EZWNsKGNvbXBvbmVudCwgY2xhc3NOYW1lKTsKLQotICAgICAgICBpZiAocmFuayA8IDEpIHJldHVybiBudWxsOyAvL25vdCBhbiBhcnJheQotCi0gICAgICAgIGludFtdIHJhbmtzID0gbmV3IGludFtyYW5rXTsKLQotICAgICAgICBBcnJheXMuZmlsbChyYW5rcywgMSk7Ci0KLSAgICAgICAgQ2xhc3MgY29tcG9uZW50X2NsYXNzID0gbG9hZE5vbkFycmF5Q2xhc3MoY29tcG9uZW50LnRvU3RyaW5nKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2t1cF9jbGFzc2xvYWRlcik7Ci0gICAgICAgIE9iamVjdCBpbnN0YW5jZSA9IEFycmF5Lm5ld0luc3RhbmNlKGNvbXBvbmVudF9jbGFzcywgcmFua3MpOwotICAgICAgICByZXR1cm4gaW5zdGFuY2UuZ2V0Q2xhc3MoKTsKLSAgICB9Ci0KLSAgICAvL1RPRE86IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIGEgYW5vdGhlciB2ZXJzaW9uIG9mIHRoaXMgbWV0aG9kIHNvbWV3aGVyZQotICAgIC8vY29tcG5hbWUgaG9sZHMgcmV0dXJuIHZhbHVlCi0gICAgLy9yZXR1cm4gaW50IGlzIG51bWJlciBvZiBkaW1lbnNpb25zIG9mIGFycmF5Ci0gICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0QXJyYXlDb21wb25lbnROYW1lRnJvbURlY2woU3RyaW5nQnVmZmVyIGNvbXBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBhbmFtZSkKLSAgICB7Ci0gICAgICAgIGNvbXBuYW1lLnNldExlbmd0aCgwKTsKLQotICAgICAgICBmaW5hbCBpbnQgZmlyc3RfYnJhY2tldCA9IGFuYW1lLmluZGV4T2YoJ1snKTsKLQotICAgICAgICBpZiAoZmlyc3RfYnJhY2tldCA8PSAwKSB7Ci0gICAgICAgICAgICBjb21wbmFtZS5hcHBlbmQoYW5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBTdHJpbmcgYmFzZSA9IGFuYW1lLnN1YnN0cmluZygwLCBmaXJzdF9icmFja2V0KS50cmltKCk7Ci0gICAgICAgIGNvbXBuYW1lLmFwcGVuZChiYXNlKTsKLQotICAgICAgICBpbnQgcmFuayA9IDA7Ci0gICAgICAgIGZvciAoaW50IGlkeCA9IGFuYW1lLmluZGV4T2YoJ10nKTsgaWR4ID49IDA7Ci0gICAgICAgICAgICAgaWR4ID0gYW5hbWUuaW5kZXhPZignXScsIGlkeCArIDEpKSB7Ci0gICAgICAgICAgICByYW5rKys7Ci0gICAgICAgIH0KLQotICAgICAgICBhc3NlcnQgY29tcG5hbWUubGVuZ3RoKCkgPiAwOwotICAgICAgICBhc3NlcnQgcmFuayA+IDA7Ci0gICAgICAgIHJldHVybiByYW5rOwotICAgIH0KLQotICAgIHN0YXRpYyBPYmplY3QgbmV3SW5zdGFuY2UoQ2xhc3MgamF2YUNsYXNzKQotICAgIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBqYXZhQ2xhc3MubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAvL1RPRE86IHJlYWwgZXJyb3IgaGFuZGxpbmcKLSAgICAgICAgICAgIHRocm93IChSdW50aW1lRXhjZXB0aW9uKShuZXcgUnVudGltZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSkuaW5pdENhdXNlKGUpKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAvL1RPRE86IHJlYWwgZXJyb3IgaGFuZGxpbmcKLSAgICAgICAgICAgIHRocm93IChSdW50aW1lRXhjZXB0aW9uKShuZXcgUnVudGltZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSkuaW5pdENhdXNlKGUpKTsKLSAgICAgICAgfQotICAgIH0KLQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvbWFyc2hhbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvbWFyc2hhbC9GbG9hdExleGVyUHJpbnRlci5qYXZhIGIvdjIvc3JjL21hcnNoYWwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL21hcnNoYWwvRmxvYXRMZXhlclByaW50ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI0ZjZmNS4uMDAwMDAwMAotLS0gYS92Mi9zcmMvbWFyc2hhbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvbWFyc2hhbC9GbG9hdExleGVyUHJpbnRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwubWFyc2hhbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uWHNUeXBlQ29udmVydGVyOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWZpbmFsIGNsYXNzIEZsb2F0TGV4ZXJQcmludGVyCi0gICAgaW1wbGVtZW50cyBBdG9taWNMZXhlclByaW50ZXIKLXsKLQotICAgIHB1YmxpYyBPYmplY3QgbGV4KENoYXJTZXF1ZW5jZSB2YWx1ZSwgQ29sbGVjdGlvbiBlcnJvcnMpCi0gICAgewotICAgICAgICAvL3NvbWVkYXkgaWYgd2UgaGF2ZSBhIHBhcnNlRmxvYXQoQ2hhclNlcXVlbmNlKQotICAgICAgICAvL21ldGhvZCB3ZSBjYW4gYXZvaWQgdGhpcyBidXNpbmVzcwotICAgICAgICBTdHJpbmcgdiA9IFhzVHlwZUNvbnZlcnRlci5zdHJpbmdWYWx1ZSh2YWx1ZSk7Ci0KLSAgICAgICAgZmxvYXQgZiA9IFhzVHlwZUNvbnZlcnRlci5sZXhGbG9hdCh2LCBlcnJvcnMpOwotICAgICAgICByZXR1cm4gbmV3IEZsb2F0KGYpOwotICAgIH0KLQotICAgIHB1YmxpYyBDaGFyU2VxdWVuY2UgcHJpbnQoT2JqZWN0IHZhbHVlLCBDb2xsZWN0aW9uIGVycm9ycykKLSAgICB7Ci0gICAgICAgIEZsb2F0IGZvYmogPSAoRmxvYXQpIHZhbHVlOwotICAgICAgICByZXR1cm4gWHNUeXBlQ29udmVydGVyLnByaW50RmxvYXQoZm9iai5mbG9hdFZhbHVlKCkpOwotICAgIH0KLQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvbWFyc2hhbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvbWFyc2hhbC9Mb25nTGV4ZXJQcmludGVyLmphdmEgYi92Mi9zcmMvbWFyc2hhbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvbWFyc2hhbC9Mb25nTGV4ZXJQcmludGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhMjlhYjcuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL21hcnNoYWwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL21hcnNoYWwvTG9uZ0xleGVyUHJpbnRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwubWFyc2hhbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uWHNUeXBlQ29udmVydGVyOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWZpbmFsIGNsYXNzIExvbmdMZXhlclByaW50ZXIKLSAgICBpbXBsZW1lbnRzIEF0b21pY0xleGVyUHJpbnRlcgotewotCi0gICAgcHVibGljIE9iamVjdCBsZXgoQ2hhclNlcXVlbmNlIHZhbHVlLCBDb2xsZWN0aW9uIGVycm9ycykKLSAgICB7Ci0gICAgICAgIC8vc29tZWRheSBpZiB3ZSBoYXZlIGEgcGFyc2VMb25nKENoYXJTZXF1ZW5jZSkKLSAgICAgICAgLy9tZXRob2Qgd2UgY2FuIGF2b2lkIHRoaXMgYnVzaW5lc3MKLSAgICAgICAgU3RyaW5nIHYgPSBYc1R5cGVDb252ZXJ0ZXIuc3RyaW5nVmFsdWUodmFsdWUpOwotCi0gICAgICAgIGxvbmcgZiA9IFhzVHlwZUNvbnZlcnRlci5sZXhMb25nKHYsIGVycm9ycyk7Ci0gICAgICAgIHJldHVybiBuZXcgTG9uZyhmKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ2hhclNlcXVlbmNlIHByaW50KE9iamVjdCB2YWx1ZSwgQ29sbGVjdGlvbiBlcnJvcnMpCi0gICAgewotICAgICAgICBMb25nIGZvYmogPSAoTG9uZykgdmFsdWU7Ci0gICAgICAgIHJldHVybiBYc1R5cGVDb252ZXJ0ZXIucHJpbnRMb25nKGZvYmoubG9uZ1ZhbHVlKCkpOwotICAgIH0KLQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvbWFyc2hhbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvbWFyc2hhbC9NYXJzaGFsU3RyZWFtVXRpbHMuamF2YSBiL3YyL3NyYy9tYXJzaGFsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9tYXJzaGFsL01hcnNoYWxTdHJlYW1VdGlscy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Mzg2MGUyLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9tYXJzaGFsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9tYXJzaGFsL01hcnNoYWxTdHJlYW1VdGlscy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjczICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLm1hcnNoYWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFJ1bnRpbWVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5Yc1R5cGVDb252ZXJ0ZXI7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotCi1maW5hbCBjbGFzcyBNYXJzaGFsU3RyZWFtVXRpbHMKLXsKLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIFhTSV9OUyA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI7Ci0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBYU0lfVFlQRV9BVFRSID0gInR5cGUiOwotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFNJX05JTF9BVFRSID0gIm5pbCI7Ci0KLSAgICAvL21vcmUgZWZmaWNpZW50IChob3BlZnVsbHkpIHZlcnNpb24gb2YgWG1sU3RyZWFtUmVhZGVyLmdldEVsZW1lbnRUZXh0KCkKLSAgICAvL1RPRE86IHBsZW50eSBvZiByb29tIGZvciBvcHRpbWl6YXRpb25zIGhlcmUuLi4KLSAgICBzdGF0aWMgQ2hhclNlcXVlbmNlIGdldENvbnRlbnQoWE1MU3RyZWFtUmVhZGVyIHJlYWRlciwgQ29sbGVjdGlvbiBlcnJvcnMpCi0gICAgICAgIHRocm93cyBYTUxTdHJlYW1FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGFzc2VydCByZWFkZXIuaXNTdGFydEVsZW1lbnQoKTsKLQotICAgICAgICByZWFkZXIubmV4dCgpOyAvL21vdmUgcGFzdCBzdGFydCBlbGVtZW50Ci0KLSAgICAgICAgU3RyaW5nIGNvbnRlbnQgPSBudWxsOwotICAgICAgICBTdHJpbmdCdWZmZXIgYnVmID0gbnVsbDsKLQotICAgICAgICBGT0w6Ci0gICAgICAgIGZvciAoaW50IHN0YXRlID0gcmVhZGVyLmdldEV2ZW50VHlwZSgpOyA7IHN0YXRlID0gcmVhZGVyLm5leHQoKSkgewotICAgICAgICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgICAgICAgICAgIGNhc2UgWE1MU3RyZWFtUmVhZGVyLkVORF9ET0NVTUVOVDoKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFJ1bnRpbWVFeGNlcHRpb24oInVuZXhwZWN0ZWQgZW5kIG9mIFhNTCIpOwotICAgICAgICAgICAgICAgIGNhc2UgWE1MU3RyZWFtUmVhZGVyLkVORF9FTEVNRU5UOgotICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gIiI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm5leHQoKTsgLy8gZWF0IHRoZSBtYXRjaGluZyBlbmQgZWxlbQotICAgICAgICAgICAgICAgICAgICBicmVhayBGT0w7Ci0gICAgICAgICAgICAgICAgY2FzZSBYTUxTdHJlYW1SZWFkZXIuU1RBUlRfRUxFTUVOVDoKLSAgICAgICAgICAgICAgICAgICAgLy9UT0RPOiBiZXR0ZXIgZXJyb3IgaGFuZGxpbmcKLSAgICAgICAgICAgICAgICAgICAgZXJyb3JzLmFkZCgic2tpcHBpbmcgdW5leHBlY3RlZCBjaGlsZCBlbGVtZW50Iik7Ci0gICAgICAgICAgICAgICAgICAgIHNraXBFbGVtZW50KHJlYWRlcik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgWE1MU3RyZWFtUmVhZGVyLkNIQVJBQ1RFUlM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSByZWFkZXIuZ2V0VGV4dCgpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZiA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcihjb250ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi5hcHBlbmQocmVhZGVyLmdldFRleHQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBYTUxTdHJlYW1SZWFkZXIuUFJPQ0VTU0lOR19JTlNUUlVDVElPTjoKLSAgICAgICAgICAgICAgICBjYXNlIFhNTFN0cmVhbVJlYWRlci5DT01NRU5UOgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoInVuZXhwZWN0ZWQgeG1sIHN0YXRlICIgKyBzdGF0ZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghcmVhZGVyLmhhc05leHQoKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBYbWxSdW50aW1lRXhjZXB0aW9uKCJ1bmV4cGVjdGVkIGVuZCBvZiB4bWwgc3RyZWFtIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChidWYgPT0gbnVsbCkgewotICAgICAgICAgICAgYXNzZXJ0IChjb250ZW50ICE9IG51bGwpIDsKLSAgICAgICAgICAgIHJldHVybiBjb250ZW50OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOwotICAgICAgICB9Ci0KLSAgICB9Ci0KLQotCi0gICAgLyoqCi0gICAgICogc3BlY2lhbCBtYXJrZXIgcW5hbWUgb2JqZWN0IHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB3ZSBub3RpY2VkCi0gICAgICogYW4geHNpOm5pbD0idHJ1ZSIgdmFsdWUgd2hpbGUgd2Ugd2VyZSBsb29raW5nIGZvciBhbiB4c2k6dHlwZSBhdHRyaWJ1dGUKLSAgICAgKgotICAgICAqIG5vdGUgdGhhdCBzdWNoIGEgdmFsdWUgd291bGQgbmV2ZXIgYmUgcmV0dXJuZWQgYnkgZ2V0WHNpVHlwZSBzaW5jZQotICAgICAqIGl0IGlzIGlsbGVnYWwgdG8gZGVjbGFyZSB0eXBlcyBpbiB0aGUgaW5zdGFuY2UgbmFtZXNwYWNlLgotICAgICAqLwotICAgIHN0YXRpYyBRTmFtZSBYU0lfTklMX01BUktFUiA9IG5ldyBRTmFtZShYU0lfTlMsICJ1bnVzZWQiKTsKLQotICAgIC8vVE9ETzogUkVWSUVXOiByZWNvbnNpZGVyIHRoaXMgYXBwcm9hY2gKLSAgICAvL2FuZCB3aGF0IGFib3V0IHRoZSBvdGhlciB4c2kgYXR0cmlidXRlcz8KLSAgICBzdGF0aWMgUU5hbWUgZ2V0WHNpVHlwZShmaW5hbCBYTUxTdHJlYW1SZWFkZXIgcmVhZGVyLCBDb2xsZWN0aW9uIGVycm9ycykKLSAgICB7Ci0gICAgICAgIGFzc2VydCByZWFkZXIuaXNTdGFydEVsZW1lbnQoKTsKLQotICAgICAgICBmaW5hbCBpbnQgYXR0X2NudCA9IHJlYWRlci5nZXRBdHRyaWJ1dGVDb3VudCgpOwotICAgICAgICBmb3IgKGludCBhdHRfaWR4ID0gMDsgYXR0X2lkeCA8IGF0dF9jbnQ7IGF0dF9pZHgrKykgewotICAgICAgICAgICAgaWYgKCFYU0lfTlMuZXF1YWxzKHJlYWRlci5nZXRBdHRyaWJ1dGVOYW1lc3BhY2UoYXR0X2lkeCkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBmaW5hbCBTdHJpbmcgbG5hbWUgPSByZWFkZXIuZ2V0QXR0cmlidXRlTG9jYWxOYW1lKGF0dF9pZHgpOwotICAgICAgICAgICAgaWYgKFhTSV9OSUxfQVRUUi5lcXVhbHMobG5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIGF0dF92YWwgPSByZWFkZXIuZ2V0QXR0cmlidXRlVmFsdWUoYXR0X2lkeCk7Ci0gICAgICAgICAgICAgICAgYm9vbGVhbiBpc19uaWwgPSBYc1R5cGVDb252ZXJ0ZXIubGV4Qm9vbGVhbihhdHRfdmFsLCBlcnJvcnMpOwotICAgICAgICAgICAgICAgIGlmIChpc19uaWwpIHJldHVybiBYU0lfTklMX01BUktFUjsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoWFNJX1RZUEVfQVRUUi5lcXVhbHMobG5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHR5cGVfc3RyID0gcmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKGF0dF9pZHgpOwotICAgICAgICAgICAgICAgIHJldHVybiBYc1R5cGVDb252ZXJ0ZXIubGV4UU5hbWUodHlwZV9zdHIsIGVycm9ycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5nZXROYW1lc3BhY2VDb250ZXh0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogZ28gdG8gbmV4dCBzdGFydCBlbGVtZW50LiAgaWYgcmVhZGVyIGlzIHNpdHRpbmcgb24gYSBzdGFydCBlbGVtZW50Ci0gICAgICogdGhlbiBubyBhZHZhbmNpbmcgd2lsbCBiZSBkb25lLiAgcmV0dXJucyBmYWxzZSBpZiB3ZSBoaXQgYW5kIGVuZCBlbGVtZW50LAotICAgICAqIG90aGVyd2lzZSByZXR1cm5zIHRydWUKLSAgICAgKgotICAgICAqIEBwYXJhbSByZWFkZXIKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgc3RhdGljIGJvb2xlYW4gYWR2YW5jZVRvTmV4dFN0YXJ0RWxlbWVudChYTUxTdHJlYW1SZWFkZXIgcmVhZGVyKQotICAgIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZvciAoaW50IHN0YXRlID0gcmVhZGVyLmdldEV2ZW50VHlwZSgpOwotICAgICAgICAgICAgICAgICByZWFkZXIuaGFzTmV4dCgpOwotICAgICAgICAgICAgICAgICBzdGF0ZSA9IHJlYWRlci5uZXh0KCkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgWE1MU3RyZWFtUmVhZGVyLkVORF9ET0NVTUVOVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBYbWxSdW50aW1lRXhjZXB0aW9uKCJ1bmV4cGVjdGVkIGVuZCBvZiBYTUwiKTsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBYTUxTdHJlYW1SZWFkZXIuRU5EX0VMRU1FTlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgWE1MU3RyZWFtUmVhZGVyLlNUQVJUX0VMRU1FTlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBYTUxTdHJlYW1SZWFkZXIuQ0hBUkFDVEVSUzoKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vVE9ETzogd2hhdCBhYm91dCBtaXhlZCBjb250ZW50IG1vZGVscwotICAgICAgICAgICAgICAgICAgICBjYXNlIFhNTFN0cmVhbVJlYWRlci5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFhNTFN0cmVhbVJlYWRlci5DT01NRU5UOgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoInVuZXhwZWN0ZWQgeG1sIHN0YXRlICIgKyBzdGF0ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChYTUxTdHJlYW1FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFJ1bnRpbWVFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJvdyBuZXcgWG1sUnVudGltZUV4Y2VwdGlvbigidW5leHBlY3RlZCBlbmQgb2YgeG1sIHN0cmVhbSIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNraXAgY3VycmVudCBlbGVtZW50IG5vZGUgYW5kIGFsbCBpdHMgY29udGVudHMuCi0gICAgICogUmVhZGVyIG11c3QgYmUgb24gc3RhcnQgZWxlbWVudC4KLSAgICAgKiBTa2lwcyB0byB0aGUgbWF0Y2hpbmcgZW5kIGVsZW1lbnQgKG5vdCBwYXN0IGl0KS4KLSAgICAgKiBXZSBhcmUganVzdCBjb3VudGluZyBzdGFydC9lbmQgLS0gdGhlIHBhcnNlciBpcwotICAgICAqIGRlYWxpbmcgd2l0aCB3ZWxsLWZvcm1lZG5lc3MuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcmVhZGVyCi0gICAgICovCi0gICAgc3RhdGljIHZvaWQgc2tpcEVsZW1lbnQoWE1MU3RyZWFtUmVhZGVyIHJlYWRlcikKLSAgICB7Ci0gICAgICAgIGFzc2VydCByZWFkZXIuaXNTdGFydEVsZW1lbnQoKTsKLQotICAgICAgICBpbnQgY250ID0gLTE7Ci0KLSAgICAgICAgLy9UT0RPOiBzZWVtIHRvIGJlIHJlY2hlY2tpbmcgYXNzZXJ0aW9uLCB3aHkgbm90IHNraXAgb25lIGFoZWFkLi4uCi0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGZvciAoaW50IHN0YXRlID0gcmVhZGVyLmdldEV2ZW50VHlwZSgpOyByZWFkZXIuaGFzTmV4dCgpOwotICAgICAgICAgICAgICAgICBzdGF0ZSA9IHJlYWRlci5uZXh0KCkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgWE1MU3RyZWFtUmVhZGVyLkVORF9ET0NVTUVOVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vc2hvdWxkIG5vdCBoYXBwZW4gZm9yIHdlbGwtZm9ybWVkIHhtbAotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFJ1bnRpbWVFeGNlcHRpb24oInVuZXhwZWN0ZWQgZW5kIG9mIHhtbCBkb2N1bWVudCIpOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFhNTFN0cmVhbVJlYWRlci5FTkRfRUxFTUVOVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbnQgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY250LS07Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBYTUxTdHJlYW1SZWFkZXIuU1RBUlRfRUxFTUVOVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNudCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFhNTFN0cmVhbUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgWG1sUnVudGltZUV4Y2VwdGlvbihlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vc2hvdWxkIG5vdCBoYXBwZW4gZm9yIHdlbGwtZm9ybWVkIHhtbAotICAgICAgICB0aHJvdyBuZXcgWG1sUnVudGltZUV4Y2VwdGlvbigidW5leHBlY3RlZCBlbmQgb2YgeG1sIHN0cmVhbSIpOwotICAgIH0KLQotCi0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzWHNpTmlsVHJ1ZShYTUxTdHJlYW1SZWFkZXIgcmVhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGF0dF9pZHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xsZWN0aW9uIGVycm9ycykKLSAgICB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBsbmFtZSA9IHJlYWRlci5nZXRBdHRyaWJ1dGVMb2NhbE5hbWUoYXR0X2lkeCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibG5hbWUgPSAiICsgbG5hbWUpOwotICAgICAgICBpZiAoIVhTSV9OSUxfQVRUUi5lcXVhbHMobG5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICghWFNJX05TLmVxdWFscyhyZWFkZXIuZ2V0QXR0cmlidXRlTmFtZXNwYWNlKGF0dF9pZHgpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBmaW5hbCBTdHJpbmcgYXR0X3ZhbCA9IHJlYWRlci5nZXRBdHRyaWJ1dGVWYWx1ZShhdHRfaWR4KTsKLSAgICAgICAgcmV0dXJuIFhzVHlwZUNvbnZlcnRlci5sZXhCb29sZWFuKGF0dF92YWwsIGVycm9ycyk7Ci0gICAgfQotCi0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9tYXJzaGFsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9tYXJzaGFsL01hcnNoYWxsZXIuamF2YSBiL3YyL3NyYy9tYXJzaGFsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9tYXJzaGFsL01hcnNoYWxsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTExNTI1ZS4uMDAwMDAwMAotLS0gYS92Mi9zcmMvbWFyc2hhbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvbWFyc2hhbC9NYXJzaGFsbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5tYXJzaGFsOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzLkJpbmRpbmdMb2FkZXI7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLk5hbWVzcGFjZUNvbnRleHQ7Ci1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7Ci0KLS8qKgotICogRW50cnkgcG9pbnQgZm9yIG1hcnNoYWxsaW5nIGphdmEgb2JqZWN0cyB0byB4bWwuCi0gKi8KLXB1YmxpYyBjbGFzcyBNYXJzaGFsbGVyCi17Ci0gICAgcHJpdmF0ZSBmaW5hbCBCaW5kaW5nTG9hZGVyIGJpbmRpbmdMb2FkZXI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBSdW50aW1lQmluZGluZ1R5cGVUYWJsZSB0eXBlVGFibGU7Ci0KLQotICAgIC8qcGFja2FnZSovCi0gICAgTWFyc2hhbGxlcihCaW5kaW5nTG9hZGVyIGJpbmRpbmdMb2FkZXIsCi0gICAgICAgICAgICAgICBSdW50aW1lQmluZGluZ1R5cGVUYWJsZSB0eXBlVGFibGUpCi0gICAgewotICAgICAgICB0aGlzLmJpbmRpbmdMb2FkZXIgPSBiaW5kaW5nTG9hZGVyOwotICAgICAgICB0aGlzLnR5cGVUYWJsZSA9IHR5cGVUYWJsZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgWE1MU3RyZWFtUmVhZGVyIG1hcnNoYWxsKE5hbWVzcGFjZUNvbnRleHQgbnNjb250ZXh0KQotICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCJVTklNUExFTUVOVEVEIik7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL21hcnNoYWwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL21hcnNoYWwvTnVsbFVubWFyc2hhbGxlci5qYXZhIGIvdjIvc3JjL21hcnNoYWwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL21hcnNoYWwvTnVsbFVubWFyc2hhbGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjIzZDgzLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9tYXJzaGFsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9tYXJzaGFsL051bGxVbm1hcnNoYWxsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLm1hcnNoYWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHMuQmluZGluZ0xvYWRlcjsKLQotZmluYWwgY2xhc3MgTnVsbFVubWFyc2hhbGxlcgotICAgIGltcGxlbWVudHMgVHlwZVVubWFyc2hhbGxlcgotewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFR5cGVVbm1hcnNoYWxsZXIgSU5TVEFOQ0UgPSBuZXcgTnVsbFVubWFyc2hhbGxlcigpOwotCi0gICAgcHJpdmF0ZSBOdWxsVW5tYXJzaGFsbGVyKCkKLSAgICB7Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCB1bm1hcnNoYWwoVW5tYXJzaGFsQ29udGV4dCBjb250ZXh0KQotICAgIHsKLSAgICAgICAgY29udGV4dC5za2lwRWxlbWVudCgpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgT2JqZWN0IHVubWFyc2hhbFNpbXBsZVR5cGUoQ2hhclNlcXVlbmNlIGxleGljYWxWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5tYXJzaGFsQ29udGV4dCBjb250ZXh0KQotICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZShSdW50aW1lQmluZGluZ1R5cGVUYWJsZSB0eXBlVGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBCaW5kaW5nTG9hZGVyIGJpbmRpbmdMb2FkZXIpCi0gICAgewotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgVHlwZVVubWFyc2hhbGxlciBnZXRJbnN0YW5jZSgpCi0gICAgewotICAgICAgICByZXR1cm4gSU5TVEFOQ0U7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL21hcnNoYWwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL21hcnNoYWwvUnVudGltZUJpbmRpbmdQcm9wZXJ0eS5qYXZhIGIvdjIvc3JjL21hcnNoYWwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL21hcnNoYWwvUnVudGltZUJpbmRpbmdQcm9wZXJ0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmQ2YTIxLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9tYXJzaGFsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9tYXJzaGFsL1J1bnRpbWVCaW5kaW5nUHJvcGVydHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLm1hcnNoYWw7Ci0KLQotaW50ZXJmYWNlIFJ1bnRpbWVCaW5kaW5nUHJvcGVydHkKLXsKLSAgICBUeXBlVW5tYXJzaGFsbGVyIGdldFR5cGVVbm1hcnNoYWxsZXIoVW5tYXJzaGFsQ29udGV4dCBjb250ZXh0KTsKLQotICAgIHZvaWQgZmlsbChPYmplY3QgaW50ZXIsIE9iamVjdCBwcm9wX29iaik7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvbWFyc2hhbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvbWFyc2hhbC9SdW50aW1lQmluZGluZ1R5cGUuamF2YSBiL3YyL3NyYy9tYXJzaGFsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9tYXJzaGFsL1J1bnRpbWVCaW5kaW5nVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTRjYTJkLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9tYXJzaGFsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9tYXJzaGFsL1J1bnRpbWVCaW5kaW5nVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwubWFyc2hhbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0cy5CaW5kaW5nTG9hZGVyOwotCi0vKioKLSAqIHdoYXQgd2UgbmVlZCB0byBrbm93IGFib3V0IGEgYmluZGluZyB0eXBlIGF0IHJ1bnRpbWUuCi0gKiBObyBtYXJzaGFsbGluZyBzdGF0ZSBzaG91bGQgYmUgc3RvcmVkIGhlcmUuCi0gKiBUaGlzIG9iamVjdCB3aWxsIGJlIHNoYXJlZCBieSBtYW55IHRocmVhZHMKLSAqLwotaW50ZXJmYWNlIFJ1bnRpbWVCaW5kaW5nVHlwZQotewotICAgIC8qKgotICAgICAqIHByZXBhcmUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGZvciB1c2UKLSAgICAgKgotICAgICAqIEBwYXJhbSB0eXBlVGFibGUKLSAgICAgKiBAcGFyYW0gYmluZGluZ0xvYWRlcgotICAgICAqLwotICAgIHZvaWQgaW5pdGlhbGl6ZShSdW50aW1lQmluZGluZ1R5cGVUYWJsZSB0eXBlVGFibGUsCi0gICAgICAgICAgICAgICAgICAgIEJpbmRpbmdMb2FkZXIgYmluZGluZ0xvYWRlcik7Ci0KLSAgICBPYmplY3QgY3JlYXRlSW50ZXJtZWRpYXJ5KFVubWFyc2hhbENvbnRleHQgY29udGV4dCk7Ci0KLSAgICBPYmplY3QgZ2V0RmluYWxPYmplY3RGcm9tSW50ZXJtZWRpYXJ5KE9iamVjdCByZXR2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbm1hcnNoYWxDb250ZXh0IGNvbnRleHQpOwotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvbWFyc2hhbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvbWFyc2hhbC9SdW50aW1lQmluZGluZ1R5cGVUYWJsZS5qYXZhIGIvdjIvc3JjL21hcnNoYWwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL21hcnNoYWwvUnVudGltZUJpbmRpbmdUeXBlVGFibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmUyNDQ0MS4uMDAwMDAwMAotLS0gYS92Mi9zcmMvbWFyc2hhbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvbWFyc2hhbC9SdW50aW1lQmluZGluZ1R5cGVUYWJsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLm1hcnNoYWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHMuQmluZGluZ0xvYWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHMuQmluZGluZ1R5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzLkJ1aWx0aW5CaW5kaW5nTG9hZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0cy5KYXZhTmFtZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHMuWG1sTmFtZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHMuQmluZGluZ1R5cGVOYW1lOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotLyoqCi0gKiBUYWJsZSBvZiBUeXBlTWFyc2hhbGxlciBhbmQgVHlwZVVubWFyc2hhbGxlciBvYmplY3RzIGtleWVkIGJ5IEJpbmRpbmdUeXBlCi0gKi8KLWNsYXNzIFJ1bnRpbWVCaW5kaW5nVHlwZVRhYmxlCi17Ci0KLSAgICBwcml2YXRlIGZpbmFsIE1hcCB0eXBlTWFwID0gbmV3IEhhc2hNYXAoKTsKLQotICAgIHByb3RlY3RlZCBzdGF0aWMgZmluYWwgU3RyaW5nIFhTRF9OUyA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI7Ci0KLSAgICBSdW50aW1lQmluZGluZ1R5cGVUYWJsZSgpCi0gICAgewotICAgICAgICBhZGRCdWlsdGlucygpOwotICAgIH0KLQotICAgIFR5cGVVbm1hcnNoYWxsZXIgZ2V0VHlwZVVubWFyc2hhbGxlcihCaW5kaW5nVHlwZSBrZXkpCi0gICAgewotICAgICAgICBUVEVudHJ5IGUgPSAoVFRFbnRyeSl0eXBlTWFwLmdldChrZXkpOwotICAgICAgICBpZiAoZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKLSAgICAgICAgcmV0dXJuIGUudHlwZVVubWFyc2hhbGxlcjsKLSAgICB9Ci0KLSAgICBUeXBlTWFyc2hhbGxlciBnZXRUeXBlTWFyc2hhbGxlcihCaW5kaW5nVHlwZSBrZXkpCi0gICAgewotICAgICAgICBUVEVudHJ5IGUgPSAoVFRFbnRyeSl0eXBlTWFwLmdldChrZXkpOwotICAgICAgICBpZiAoZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKLSAgICAgICAgcmV0dXJuIGUudHlwZU1hcnNoYWxsZXI7Ci0gICAgfQotCi0gICAgdm9pZCBwdXRUeXBlVW5tYXJzaGFsbGVyKEJpbmRpbmdUeXBlIGtleSwgVHlwZVVubWFyc2hhbGxlciB1bSkKLSAgICB7Ci0gICAgICAgIFRURW50cnkgZSA9IChUVEVudHJ5KXR5cGVNYXAuZ2V0KGtleSk7Ci0gICAgICAgIGlmIChlID09IG51bGwpIHsKLSAgICAgICAgICAgIGUgPSBuZXcgVFRFbnRyeSgpOwotICAgICAgICAgICAgdHlwZU1hcC5wdXQoa2V5LCBlKTsKLSAgICAgICAgfQotICAgICAgICBlLnR5cGVVbm1hcnNoYWxsZXIgPSB1bTsKLSAgICB9Ci0KLSAgICB2b2lkIHB1dFR5cGVNYXJzaGFsbGVyKEJpbmRpbmdUeXBlIGtleSwgVHlwZU1hcnNoYWxsZXIgbSkKLSAgICB7Ci0gICAgICAgIFRURW50cnkgZSA9IChUVEVudHJ5KXR5cGVNYXAuZ2V0KGtleSk7Ci0gICAgICAgIGlmIChlID09IG51bGwpIHsKLSAgICAgICAgICAgIGUgPSBuZXcgVFRFbnRyeSgpOwotICAgICAgICAgICAgdHlwZU1hcC5wdXQoa2V5LCBlKTsKLSAgICAgICAgfQotICAgICAgICBlLnR5cGVNYXJzaGFsbGVyID0gbTsKLSAgICB9Ci0KLSAgICAvL2RlYnVnZ2luZyBvbmx5Ci0gICAgU2V0IGdldEtleXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZVNldCh0eXBlTWFwLmtleVNldCgpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBpbml0VW5tYXJzaGFsbGVycyhCaW5kaW5nTG9hZGVyIGxvYWRlcikKLSAgICB7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaXRlcmF0b3IgPSB0eXBlTWFwLnZhbHVlcygpLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspIHsKLSAgICAgICAgICAgIFRURW50cnkgZW50cnkgPSAoVFRFbnRyeSlpdGVyYXRvci5uZXh0KCk7Ci0gICAgICAgICAgICBlbnRyeS50eXBlVW5tYXJzaGFsbGVyLmluaXRpYWxpemUodGhpcywgbG9hZGVyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBhZGRCdWlsdGlucygpCi0gICAgewotICAgICAgICBhZGRYc2RCdWlsdGluKCJmbG9hdCIsIGZsb2F0LmNsYXNzLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICBuZXcgQXRvbWljU2ltcGxlVHlwZUNvbnZlcnRlcihuZXcgRmxvYXRMZXhlclByaW50ZXIoKSkpOwotICAgICAgICBhZGRYc2RCdWlsdGluKCJmbG9hdCIsIEZsb2F0LmNsYXNzLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICBuZXcgQXRvbWljU2ltcGxlVHlwZUNvbnZlcnRlcihuZXcgRmxvYXRMZXhlclByaW50ZXIoKSkpOwotCi0gICAgICAgIGFkZFhzZEJ1aWx0aW4oImxvbmciLCBsb25nLmNsYXNzLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICBuZXcgQXRvbWljU2ltcGxlVHlwZUNvbnZlcnRlcihuZXcgTG9uZ0xleGVyUHJpbnRlcigpKSk7Ci0gICAgICAgIGFkZFhzZEJ1aWx0aW4oImxvbmciLCBMb25nLmNsYXNzLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICBuZXcgQXRvbWljU2ltcGxlVHlwZUNvbnZlcnRlcihuZXcgTG9uZ0xleGVyUHJpbnRlcigpKSk7Ci0KLSAgICAgICAgYWRkWHNkQnVpbHRpbigic3RyaW5nIiwgU3RyaW5nLmNsYXNzLmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICBuZXcgQXRvbWljU2ltcGxlVHlwZUNvbnZlcnRlcihuZXcgU3RyaW5nTGV4ZXJQcmludGVyKCkpKTsKLQotICAgICAgICBhZGRYc2RCdWlsdGluKCJ0b2tlbiIsIFN0cmluZy5jbGFzcy5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgbmV3IEF0b21pY1NpbXBsZVR5cGVDb252ZXJ0ZXIobmV3IFN0cmluZ0xleGVyUHJpbnRlcigpKSk7Ci0gICAgfQotCi0KLSAgICBwcm90ZWN0ZWQgdm9pZCBhZGRYc2RCdWlsdGluKFN0cmluZyB4c2RUeXBlLCBTdHJpbmcgamF2YVR5cGUsIFR5cGVDb252ZXJ0ZXIgY29udmVydGVyKQotICAgIHsKLSAgICAgICAgZmluYWwgQmluZGluZ0xvYWRlciBiaW5kaW5nTG9hZGVyID0gQnVpbHRpbkJpbmRpbmdMb2FkZXIuZ2V0SW5zdGFuY2UoKTsKLQotICAgICAgICBRTmFtZSB4bWxfdHlwZSA9IG5ldyBRTmFtZShYU0RfTlMsIHhzZFR5cGUpOwotICAgICAgICBKYXZhTmFtZSBqTmFtZSA9IEphdmFOYW1lLmZvclN0cmluZyhqYXZhVHlwZSk7Ci0gICAgICAgIFhtbE5hbWUgeE5hbWUgPSBYbWxOYW1lLmZvclR5cGVOYW1lZCh4bWxfdHlwZSk7Ci0gICAgICAgIEJpbmRpbmdUeXBlIGJ0eXBlID0gYmluZGluZ0xvYWRlci5nZXRCaW5kaW5nVHlwZShCaW5kaW5nVHlwZU5hbWUuZm9yUGFpcihqTmFtZSwgeE5hbWUpKTsKLSAgICAgICAgaWYgKGJ0eXBlID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigiZmFpbGVkIHRvIGZpbmQgYnVpbHRpbiBmb3IgamF2YToiICsgak5hbWUgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgLSB4c2Q6IiArIHhOYW1lKTsKLSAgICAgICAgfQotICAgICAgICBwdXRUeXBlTWFyc2hhbGxlcihidHlwZSwgY29udmVydGVyKTsKLSAgICAgICAgcHV0VHlwZVVubWFyc2hhbGxlcihidHlwZSwgY29udmVydGVyKTsKLQotICAgICAgICBhc3NlcnQgZ2V0VHlwZU1hcnNoYWxsZXIoYnR5cGUpID09IGNvbnZlcnRlcjsKLSAgICAgICAgYXNzZXJ0IGdldFR5cGVVbm1hcnNoYWxsZXIoYnR5cGUpID09IGNvbnZlcnRlcjsKLSAgICB9Ci0KLQotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFRURW50cnkKLSAgICB7Ci0gICAgICAgIFR5cGVNYXJzaGFsbGVyIHR5cGVNYXJzaGFsbGVyOwotICAgICAgICBUeXBlVW5tYXJzaGFsbGVyIHR5cGVVbm1hcnNoYWxsZXI7Ci0gICAgfQotCi0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy9tYXJzaGFsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9tYXJzaGFsL1N0cmluZ0xleGVyUHJpbnRlci5qYXZhIGIvdjIvc3JjL21hcnNoYWwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL21hcnNoYWwvU3RyaW5nTGV4ZXJQcmludGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkMTBjNzYuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL21hcnNoYWwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL21hcnNoYWwvU3RyaW5nTGV4ZXJQcmludGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5tYXJzaGFsOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5Yc1R5cGVDb252ZXJ0ZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotY2xhc3MgU3RyaW5nTGV4ZXJQcmludGVyIGltcGxlbWVudHMgQXRvbWljTGV4ZXJQcmludGVyCi17Ci0gICAgcHVibGljIE9iamVjdCBsZXgoQ2hhclNlcXVlbmNlIHZhbHVlLCBDb2xsZWN0aW9uIGVycm9ycykKLSAgICB7Ci0gICAgICAgIHJldHVybiBYc1R5cGVDb252ZXJ0ZXIuc3RyaW5nVmFsdWUodmFsdWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBDaGFyU2VxdWVuY2UgcHJpbnQoT2JqZWN0IHZhbHVlLCBDb2xsZWN0aW9uIGVycm9ycykKLSAgICB7Ci0gICAgICAgIHJldHVybiAoQ2hhclNlcXVlbmNlKSB2YWx1ZTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvbWFyc2hhbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvbWFyc2hhbC9UeXBlQ29udmVydGVyLmphdmEgYi92Mi9zcmMvbWFyc2hhbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvbWFyc2hhbC9UeXBlQ29udmVydGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2MDkyMGIuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL21hcnNoYWwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL21hcnNoYWwvVHlwZUNvbnZlcnRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwubWFyc2hhbDsKLQotLyoqCi0gKiBjb252ZW5pZW5jZSB1bmlvbiBvZiB0aGUgbWFyc2hhbGxpbmcgYW5kIHVtYXJzaGFsbGluZyBpbnRlcmZhY2VzCi0gKi8KLWludGVyZmFjZSBUeXBlQ29udmVydGVyCi0gICAgZXh0ZW5kcyBUeXBlVW5tYXJzaGFsbGVyLCBUeXBlTWFyc2hhbGxlcgotewotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL21hcnNoYWwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL21hcnNoYWwvVHlwZU1hcnNoYWxsZXIuamF2YSBiL3YyL3NyYy9tYXJzaGFsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9tYXJzaGFsL1R5cGVNYXJzaGFsbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMTIwODEuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL21hcnNoYWwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL21hcnNoYWwvVHlwZU1hcnNoYWxsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLm1hcnNoYWw7Ci0KLS8qKgotICogQSBUeXBlTWFyc2hhbGxlciBrbm93cyBob3cgdG8gbWFyc2hhbGwgYSBqYXZhIG9iamVjdCBpbnRvIHhtbC4KLSAqLwotaW50ZXJmYWNlIFR5cGVNYXJzaGFsbGVyCi17Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvbWFyc2hhbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvbWFyc2hhbC9UeXBlVW5tYXJzaGFsbGVyLmphdmEgYi92Mi9zcmMvbWFyc2hhbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvbWFyc2hhbC9UeXBlVW5tYXJzaGFsbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmYzAyMmQuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL21hcnNoYWwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL21hcnNoYWwvVHlwZVVubWFyc2hhbGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLm1hcnNoYWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHMuQmluZGluZ0xvYWRlcjsKLQotLyoqCi0gKiBBIFR5cGVVbm1hcnNoYWxsZXIga25vd3MgaG93IHRvIHVubWFyc2hhbCBhbiB4bWwKLSAqIGluc3RhbmNlIG9mIGEgZ2l2ZW4gQmluZGluZ1R5cGUKLSAqLwotaW50ZXJmYWNlIFR5cGVVbm1hcnNoYWxsZXIKLXsKLSAgICAvKioKLSAgICAgKiBVbm1hcnNoYWxscyB0aGUgY3VycmVudCBub2RlIGluIHRoZSB4bWwgaW50byBhIGphdmEgb2JqZWN0LgotICAgICAqIFRoZSBVbm1hcnNoYWxDb250ZXh0IG11c3QgYmUgcG9pbnRpbmcgYXQgdGhlIHN0YXJ0IGVsZW1lbnQgb2YgdGhlIG5vZGUKLSAgICAgKiB0byBiZSB1bm1hcnNoYWxsZWQgKHN1Y2ggdGhhdCBYbWxTdHJlYW1SZWFkZXIuaXNTdGFydGVFbGVtZW50KCkKLSAgICAgKiByZXR1cm5zIHRydWUpLiAgVGhlIHVubWFyc2hhbCBtZXRob2QgbXVzdCBjb25zdW1lIHRoZSBlbnRpcmUgY29udGVudHMKLSAgICAgKiBvZiB0aGF0IG5vZGUgaW5jbHVkaW5nIHRoZSBtYXRjaGluZyBlbmQgZWxlbWVudC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBjb250ZXh0ICBjb250YWlucyB0aGF0IHN0YXRlIG9mIHRoZSBkb2N1bWVudCB1bm1hcnNoYWwgcHJvY2VzcwotICAgICAqIEByZXR1cm4gIE9iamVjdCByZXByZXNlbnRpbmcgdGhlIGNvbnZlcnRlZCB4bWwKLSAgICAgKi8KLSAgICBPYmplY3QgdW5tYXJzaGFsKFVubWFyc2hhbENvbnRleHQgY29udGV4dCk7Ci0KLSAgICAvKioKLSAgICAgKiB1bm1hcnNoYWwgdGhlIGxleGljYWwgdmFsdWUgb2YgYW4gaW5zdGFuY2Ugb2YgeHNkOmFueVNpbXBsZVR5cGUuCi0gICAgICogVGhpcyBjb3VsZCBiZSBjYWxsZWQgb24gYW4gYXR0cmlidXRlIHZhbHVlIG9yIG9uIGVsZW1lbnQgY29udGVudC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBsZXhpY2FsVmFsdWUKLSAgICAgKiBAcGFyYW0gY29udGV4dAotICAgICAqIEByZXR1cm4gT2JqZWN0IHJlcHJlc2VudGluZyBqYXZhIHZhbHVlIG9mIGxleGljYWwKLSAgICAgKgotICAgICAqIEBleGNlcHRpb24gVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gaWYgdGhlCi0gICAgICogICAgICAgICAgICA8dHQ+dW5tYXJzaGFsU2ltcGxlVHlwZTwvdHQ+IG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCi0gICAgICogICAgICAgICAgICBieSB0aGlzIFR5cGVVbm1hcnNoYWxsZXIuCi0gICAgICovCi0gICAgT2JqZWN0IHVubWFyc2hhbFNpbXBsZVR5cGUoQ2hhclNlcXVlbmNlIGxleGljYWxWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbm1hcnNoYWxDb250ZXh0IGNvbnRleHQpOwotCi0KLSAgICAvKioKLSAgICAgKiBjYWxsZWQgb25jZSBwZXIgb2JqZWN0IGJlZm9yZSBmaXJzdCB1c2UuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdHlwZVRhYmxlCi0gICAgICogQHBhcmFtIGJpbmRpbmdMb2FkZXIKLSAgICAgKi8KLSAgICB2b2lkIGluaXRpYWxpemUoUnVudGltZUJpbmRpbmdUeXBlVGFibGUgdHlwZVRhYmxlLAotICAgICAgICAgICAgICAgICAgICBCaW5kaW5nTG9hZGVyIGJpbmRpbmdMb2FkZXIpOwotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL21hcnNoYWwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL21hcnNoYWwvVW5tYXJzaGFsQ29udGV4dC5qYXZhIGIvdjIvc3JjL21hcnNoYWwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL21hcnNoYWwvVW5tYXJzaGFsQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2FjYmUzLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9tYXJzaGFsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9tYXJzaGFsL1VubWFyc2hhbENvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzOCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLm1hcnNoYWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFJ1bnRpbWVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzLkJpbmRpbmdMb2FkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzLkJpbmRpbmdUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0cy5YbWxOYW1lOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotLyoqCi0gKiBBbiBVbm1hcnNoYWxDb250ZXh0IGhvbGRzIHRoZSBtdXRhYmxlIHN0YXRlIHVzaW5nIGJ5IGFuIFVubWFyc2hhbGxlcgotICogZHVyaW5nIHVubWFyc2hhbGxpbmcuICBFeGFtcGxlIGNvbnRlbnRzIGFyZSBhbiBpZCAtPiBvYmplY3QgdGFibGUKLSAqIGZvciBocmVmIHByb2Nlc3NpbmcsIGFuZCB0aGUgcG9zaXRpb24gaW4gdGhlIHhtbCBkb2N1bWVudC4KLSAqCi0gKiBUaGUgVW5tYXJzaGFsQ29udGV4dCBpcyBwdXJwb3NlZnVsbGx5IHVuc3luY2hyb25pemVkLgotICogT25seSBvbmUgdGhyZWFkIHNob3VsZCBldmVyIGJlIGFjY2Vzc2luZyB0aGlzIG9iamVjdCwgYW5kIGEgbmV3IG9uZSB3aWxsIGJlCi0gKiByZXF1aXJlZCBmb3IgZWFjaCB1bm1hcnNoYWxsaW5nIHBhc3MuCi0gKi8KLWZpbmFsIGNsYXNzIFVubWFyc2hhbENvbnRleHQKLXsKLSAgICBwcml2YXRlIGZpbmFsIFhNTFN0cmVhbVJlYWRlciBiYXNlUmVhZGVyOwotICAgIHByaXZhdGUgZmluYWwgQmluZGluZ0xvYWRlciBiaW5kaW5nTG9hZGVyOwotICAgIHByaXZhdGUgZmluYWwgUnVudGltZUJpbmRpbmdUeXBlVGFibGUgdHlwZVRhYmxlOwotICAgIHByaXZhdGUgZmluYWwgQ29sbGVjdGlvbiBlcnJvcnM7Ci0KLSAgICBwdWJsaWMgVW5tYXJzaGFsQ29udGV4dChYTUxTdHJlYW1SZWFkZXIgYmFzZVJlYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmluZGluZ0xvYWRlciBiaW5kaW5nTG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lQmluZGluZ1R5cGVUYWJsZSB0eXBlVGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbGxlY3Rpb24gZXJyb3JzKQotICAgIHsKLSAgICAgICAgdGhpcy5iYXNlUmVhZGVyID0gYmFzZVJlYWRlcjsKLSAgICAgICAgdGhpcy5iaW5kaW5nTG9hZGVyID0gYmluZGluZ0xvYWRlcjsKLSAgICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7Ci0gICAgICAgIHRoaXMudHlwZVRhYmxlID0gdHlwZVRhYmxlOwotICAgIH0KLQotCi0gICAgWE1MU3RyZWFtUmVhZGVyIGdldFhtbFN0cmVhbSgpCi0gICAgewotICAgICAgICByZXR1cm4gYmFzZVJlYWRlcjsKLSAgICB9Ci0KLSAgICBSdW50aW1lQmluZGluZ1R5cGVUYWJsZSBnZXRUeXBlVGFibGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHR5cGVUYWJsZTsKLSAgICB9Ci0KLQotICAgIFR5cGVVbm1hcnNoYWxsZXIgZ2V0VHlwZVVubWFyc2hhbGxlcihRTmFtZSB4c2lfdHlwZSkKLSAgICB7Ci0gICAgICAgIFhtbE5hbWUgeG5hbWUgPSBYbWxOYW1lLmZvclR5cGVOYW1lZCh4c2lfdHlwZSk7Ci0gICAgICAgIEJpbmRpbmdUeXBlIGJpbmRpbmdfdHlwZSA9Ci0gICAgICAgICAgICBiaW5kaW5nTG9hZGVyLmdldEJpbmRpbmdUeXBlKGJpbmRpbmdMb2FkZXIubG9va3VwUG9qb0Zvcih4bmFtZSkpOwotICAgICAgICBpZiAoYmluZGluZ190eXBlID09IG51bGwpIHsKLSAgICAgICAgICAgIFN0cmluZyBtc2cgPSAidW5hYmxlIHRvIGxvY2F0ZSBiaW5kaW5nIHR5cGUgZm9yICIgKyB4c2lfdHlwZTsKLSAgICAgICAgICAgIHRocm93IG5ldyBYbWxSdW50aW1lRXhjZXB0aW9uKG1zZyk7Ci0gICAgICAgIH0KLSAgICAgICAgVHlwZVVubWFyc2hhbGxlciB1bSA9Ci0gICAgICAgICAgICB0eXBlVGFibGUuZ2V0VHlwZVVubWFyc2hhbGxlcihiaW5kaW5nX3R5cGUpOwotICAgICAgICBpZiAodW0gPT0gbnVsbCkgewotICAgICAgICAgICAgU3RyaW5nIG1zZyA9ICJ1bmFibGUgdG8gbG9jYXRlIHVubWFyc2hhbGxlciBmb3IgIiArIGJpbmRpbmdfdHlwZTsKLSAgICAgICAgICAgIHRocm93IG5ldyBYbWxSdW50aW1lRXhjZXB0aW9uKG1zZyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHVtOwotICAgIH0KLQotCi0gICAgcHVibGljIEJpbmRpbmdMb2FkZXIgZ2V0QmluZGluZ0xvYWRlcigpCi0gICAgewotICAgICAgICByZXR1cm4gYmluZGluZ0xvYWRlcjsKLSAgICB9Ci0KLSAgICAvL3BhY2thZ2Ugb25seSAtLSBnZXQgcmVhZC93cml0ZSB2ZXJzaW9uIG9mIGVycm9yIGNvbGxlY3Rpb24KLQotICAgIC8qKgotICAgICAqIHBhY2thZ2Ugb25seSAtLSBnZXQgcmVhZC93cml0ZSB2ZXJzaW9uIG9mIGVycm9yIGNvbGxlY3Rpb24KLSAgICAgKgotICAgICAqIEByZXR1cm4gIHJlYWQvd3JpdGUgdmVyc2lvbiBvZiBlcnJvciBjb2xsZWN0aW9uCi0gICAgICovCi0gICAgQ29sbGVjdGlvbiBnZXRFcnJvckNvbGxlY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVycm9yczsKLSAgICB9Ci0KLQotCi0gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT0geG1sIGFjY2VzcyBtZXRob2RzID09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgICBDaGFyU2VxdWVuY2UgZ2V0RWxlbWVudFRleHQoKQotICAgIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBNYXJzaGFsU3RyZWFtVXRpbHMuZ2V0Q29udGVudChiYXNlUmVhZGVyLCBlcnJvcnMpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChYTUxTdHJlYW1FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFJ1bnRpbWVFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBzcGVjaWFsIG1hcmtlciBxbmFtZSBvYmplY3QgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHdlIG5vdGljZWQKLSAgICAgKiBhbiB4c2k6bmlsPSJ0cnVlIiB2YWx1ZSB3aGlsZSB3ZSB3ZXJlIGxvb2tpbmcgZm9yIGFuIHhzaTp0eXBlIGF0dHJpYnV0ZQotICAgICAqCi0gICAgICogbm90ZSB0aGF0IHN1Y2ggYSB2YWx1ZSB3b3VsZCBuZXZlciBiZSByZXR1cm5lZCBieSBnZXRYc2lUeXBlIHNpbmNlCi0gICAgICogaXQgaXMgaWxsZWdhbCB0byBkZWNsYXJlIHR5cGVzIGluIHRoZSBpbnN0YW5jZSBuYW1lc3BhY2UuCi0gICAgICovCi0gICAgc3RhdGljIGZpbmFsIFFOYW1lIFhTSV9OSUxfTUFSS0VSID0gTWFyc2hhbFN0cmVhbVV0aWxzLlhTSV9OSUxfTUFSS0VSOwotCi0gICAgLyoqCi0gICAgICogcmV0dXJuOgotICAgICAqIFhTSV9OSUxfTUFSS0VSIGZvciB4c2k6bmlsPSJ0cnVlIgotICAgICAqIG9yIHRoZSBRTmFtZSB2YWx1ZSBmb3VuZCBmb3IgeHNpOnR5cGUKLSAgICAgKiBvciBudWxsIGlmIG5laXRoZXIgb25lIHdhcyBmb3VuZAotICAgICAqLwotICAgIFFOYW1lIGdldFhzaVR5cGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE1hcnNoYWxTdHJlYW1VdGlscy5nZXRYc2lUeXBlKGJhc2VSZWFkZXIsIGVycm9ycyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICoKLSAgICAgKiBAcmV0dXJuICBmYWxzZSBpZiB3ZSBoaXQgYW4gZW5kIGVsZW1lbnQgKGFueSBlbmQgZWxlbWVudCBhdCBhbGwpCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gYWR2YW5jZVRvTmV4dFN0YXJ0RWxlbWVudCgpCi0gICAgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgLy9tb3ZlIHBhc3Qgb3VyIGN1cnJlbnQgc3RhcnQgZWxlbWVudAotICAgICAgICAgICAgYmFzZVJlYWRlci5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFhNTFN0cmVhbUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgWG1sUnVudGltZUV4Y2VwdGlvbihlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gTWFyc2hhbFN0cmVhbVV0aWxzLmFkdmFuY2VUb05leHRTdGFydEVsZW1lbnQoYmFzZVJlYWRlcik7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRBdHRyaWJ1dGVDb3VudCgpCi0gICAgewotICAgICAgICBhc3NlcnQgYmFzZVJlYWRlci5pc1N0YXJ0RWxlbWVudCgpOwotCi0gICAgICAgIHJldHVybiBiYXNlUmVhZGVyLmdldEF0dHJpYnV0ZUNvdW50KCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRMb2NhbE5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJhc2VSZWFkZXIuZ2V0TG9jYWxOYW1lKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2VVUkkoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJhc2VSZWFkZXIuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBdHRyaWJ1dGVOYW1lc3BhY2VVUkkoaW50IGF0dF9pZHgpCi0gICAgewotICAgICAgICByZXR1cm4gYmFzZVJlYWRlci5nZXRBdHRyaWJ1dGVOYW1lc3BhY2UoYXR0X2lkeCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBdHRyaWJ1dGVMb2NhbE5hbWUoaW50IGF0dF9pZHgpCi0gICAgewotICAgICAgICByZXR1cm4gYmFzZVJlYWRlci5nZXRBdHRyaWJ1dGVMb2NhbE5hbWUoYXR0X2lkeCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBdHRyaWJ1dGVWYWx1ZShpbnQgYXR0X2lkeCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBiYXNlUmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKGF0dF9pZHgpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzWHNpTmlsVHJ1ZShpbnQgYXR0X2lkeCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBNYXJzaGFsU3RyZWFtVXRpbHMuaXNYc2lOaWxUcnVlKGJhc2VSZWFkZXIsIGF0dF9pZHgsIGVycm9ycyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2tpcEVsZW1lbnQoKQotICAgIHsKLSAgICAgICAgTWFyc2hhbFN0cmVhbVV0aWxzLnNraXBFbGVtZW50KGJhc2VSZWFkZXIpOwotICAgIH0KLQotfQotCmRpZmYgLS1naXQgYS92Mi9zcmMvbWFyc2hhbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvbWFyc2hhbC9Vbm1hcnNoYWxsZXIuamF2YSBiL3YyL3NyYy9tYXJzaGFsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9tYXJzaGFsL1VubWFyc2hhbGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmUxNzU5Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9tYXJzaGFsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9tYXJzaGFsL1VubWFyc2hhbGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwubWFyc2hhbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uOwotCi1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgVW5tYXJzaGFsbGVyCi17Ci0gICAgT2JqZWN0IHVubWFyc2hhbChYTUxTdHJlYW1SZWFkZXIgcmVhZGVyKQotICAgICAgICB0aHJvd3MgWG1sRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL21hcnNoYWwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL21hcnNoYWwvVW5tYXJzaGFsbGVySW1wbC5qYXZhIGIvdjIvc3JjL21hcnNoYWwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL21hcnNoYWwvVW5tYXJzaGFsbGVySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjE2MGVlLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9tYXJzaGFsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9tYXJzaGFsL1VubWFyc2hhbGxlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5tYXJzaGFsOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzLkJpbmRpbmdMb2FkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzLkJpbmRpbmdUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0cy5YbWxOYW1lOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLQotLyoqCi0gKiBBIFVubWFyc2hhbGxlciBrbm93cyBob3cgdG8gY29udmVydCB4bWwgdG8gamF2YSBvYmplY3RzLgotICovCi1jbGFzcyBVbm1hcnNoYWxsZXJJbXBsCi0gICAgaW1wbGVtZW50cyBVbm1hcnNoYWxsZXIKLXsKLSAgICBwcml2YXRlIGZpbmFsIEJpbmRpbmdMb2FkZXIgYmluZGluZ0xvYWRlcjsKLSAgICBwcml2YXRlIGZpbmFsIFJ1bnRpbWVCaW5kaW5nVHlwZVRhYmxlIHR5cGVUYWJsZTsKLQotCi0gICAgLypwYWNrYWdlKi8KLSAgICBVbm1hcnNoYWxsZXJJbXBsKEJpbmRpbmdMb2FkZXIgYmluZGluZ0xvYWRlciwKLSAgICAgICAgICAgICAgICAgUnVudGltZUJpbmRpbmdUeXBlVGFibGUgdHlwZVRhYmxlKQotICAgIHsKLSAgICAgICAgdGhpcy5iaW5kaW5nTG9hZGVyID0gYmluZGluZ0xvYWRlcjsKLSAgICAgICAgdGhpcy50eXBlVGFibGUgPSB0eXBlVGFibGU7Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCB1bm1hcnNoYWwoWE1MU3RyZWFtUmVhZGVyIHJlYWRlcikKLSAgICAgICAgdGhyb3dzIFhtbEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgVW5tYXJzaGFsQ29udGV4dCBjb250ZXh0ID0gY3JlYXRlVW5tYXJzaGFsbENvbnRleHQocmVhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEFycmF5TGlzdCgpKTsKLQotICAgICAgICBhZHZhbmNlVG9GaXJzdEl0ZW1PZkludGVyZXN0KHJlYWRlcik7Ci0KLSAgICAgICAgZmluYWwgQmluZGluZ1R5cGUgYmluZGluZ1R5cGUgPSBkZXRlcm1pbmVSb290VHlwZShjb250ZXh0KTsKLQotICAgICAgICBUeXBlVW5tYXJzaGFsbGVyIHVtID0KLSAgICAgICAgICAgIHR5cGVUYWJsZS5nZXRUeXBlVW5tYXJzaGFsbGVyKGJpbmRpbmdUeXBlKTsKLQotICAgICAgICBpZiAodW0gPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFhtbEV4Y2VwdGlvbigiZmFpbGVkIHRvIGxvb2t1cCB1bm1hcnNoYWxsZXIgZm9yICIgKyBiaW5kaW5nVHlwZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBPYmplY3QgdHlwZV9pbnN0YW5jZSA9IHVtLnVubWFyc2hhbChjb250ZXh0KTsKLQotICAgICAgICBmaW5hbCBDb2xsZWN0aW9uIGVycm9ycyA9IGNvbnRleHQuZ2V0RXJyb3JDb2xsZWN0aW9uKCk7Ci0gICAgICAgIGlmICghZXJyb3JzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy9UT0RPOiByZXZpZXcgdGhpcyBjdG9yCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImVycm9ycyA9ICIgKyBlcnJvcnMpOwotICAgICAgICAgICAgU3RyaW5nIG1zZyA9IGVycm9yc1RvTXNnKGVycm9ycyk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgWG1sRXhjZXB0aW9uKG1zZywgbnVsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlQ29sbGVjdGlvbihlcnJvcnMpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0eXBlX2luc3RhbmNlOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBlcnJvcnNUb01zZyhmaW5hbCBDb2xsZWN0aW9uIGVycm9ycykKLSAgICB7Ci0gICAgICAgIGZpbmFsIGludCBzeiA9IGVycm9ycy5zaXplKCk7Ci0gICAgICAgIGFzc2VydCBzeiA+IDA7Ci0KLSAgICAgICAgaWYgKHN6ID09IDEpIHsKLSAgICAgICAgICAgIHJldHVybiAidW5tYXJzaGFsbGluZyBlcnJvcjogIiArIGVycm9ycy5pdGVyYXRvcigpLm5leHQoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiAidW5tYXJzaGFsbGluZyBlcnJvcnMgKCIgKyBzeiArICIpIjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBhZHZhbmNlVG9GaXJzdEl0ZW1PZkludGVyZXN0KFhNTFN0cmVhbVJlYWRlciByZHIpCi0gICAgICAgIHRocm93cyBYbWxFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmb3IgKGludCBzdGF0ZSA9IHJkci5nZXRFdmVudFR5cGUoKTsgcmRyLmhhc05leHQoKTsgc3RhdGUgPSByZHIubmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChzdGF0ZSkgewotCi0gICAgICAgICAgICAgICAgICAgIC8vdGhlc2UgYXJlIHRoaW5ncyB3ZSBjYW4gaGFuZGxlLi4uCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgWE1MU3RyZWFtUmVhZGVyLlNUQVJUX0VMRU1FTlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vZXZlbnR1YWxseSB3ZSdsbCBoYW5kbGUgdGhlc2UuLi4KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBYTUxTdHJlYW1SZWFkZXIuQVRUUklCVVRFOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFhNTFN0cmVhbVJlYWRlci5DSEFSQUNURVJTOgotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCJVTklNUExFTUVOVEVEIFRZUEU6ICIgKyBzdGF0ZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vYmFkIG5ld3MgaW4gdGhlIHhtbCBzdHJlYW0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBYTUxTdHJlYW1SZWFkZXIuRU5EX0RPQ1VNRU5UOgotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFhtbEV4Y2VwdGlvbigidW5leHBlY3RlZCBlbmQgb2YgWE1MIik7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgWE1MU3RyZWFtUmVhZGVyLkVORF9FTEVNRU5UOgotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFhtbEV4Y2VwdGlvbigidW5leHBlY3RlZCBlbmQgb2YgWE1MIik7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vc2tpcCB0aGVzZSBhbmQga2VlcCBnb2luZwotICAgICAgICAgICAgICAgICAgICBjYXNlIFhNTFN0cmVhbVJlYWRlci5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFhNTFN0cmVhbVJlYWRlci5DT01NRU5UOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFhNTFN0cmVhbVJlYWRlci5TVEFSVF9ET0NVTUVOVDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBYTUxTdHJlYW1SZWFkZXIuU1BBQ0U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgLy90aGlzIGNhc2UgcHJldHR5IG11Y2ggbWVhbnMgbWFsZm9ybWVkIHhtbCBvciBhIGJ1ZwotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFhtbEV4Y2VwdGlvbigidW5leHBlY3RlZCB4bWwgc3RhdGU6IiArIHN0YXRlICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIiArIHJkcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhyb3cgbmV3IFhtbEV4Y2VwdGlvbigidW5leHBlY3RlZCBlbmQgb2YgeG1sIHN0cmVhbSIpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChYTUxTdHJlYW1FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFhtbEV4Y2VwdGlvbihlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgQmluZGluZ1R5cGUgZGV0ZXJtaW5lUm9vdFR5cGUoVW5tYXJzaGFsQ29udGV4dCBjb250ZXh0KQotICAgICAgICB0aHJvd3MgWG1sRXhjZXB0aW9uCi0gICAgewotICAgICAgICAvL1RPRE86IGZpeCB0aGlzIHRlbXBvcmFyeSBoYWNrCi0gICAgICAgIC8vdG8gZ2V0IHN0YXJ0ZWQgd2UncmUgcmVseWluZyBvbiB4c2k6dHlwZSBiZWluZyBvbiB0aGUgcm9vdCBlbGVtZW50Ci0gICAgICAgIC8vdG8gYXZvaWQgcmVxdWlyaW5nIHRoZSBzY2hlbWEKLQotICAgICAgICBRTmFtZSB4c2lfdHlwZSA9IGNvbnRleHQuZ2V0WHNpVHlwZSgpOwotICAgICAgICBpZiAoeHNpX3R5cGUgPT0gVW5tYXJzaGFsQ29udGV4dC5YU0lfTklMX01BUktFUikgewotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCJ4c2k6bmlsIGJyb2tlbiBvbiByb290IGVsZW1lbnQgZm9yIG5vdyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHhzaV90eXBlID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigieHNpOnR5cGUgaXMgcmVxdWlyZWQgZm9yIG5vdyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgWG1sTmFtZSB0eXBlX25hbWUgPSBYbWxOYW1lLmZvclR5cGVOYW1lZCh4c2lfdHlwZSk7Ci0KLSAgICAgICAgQmluZGluZ1R5cGUgYnQgPQotICAgICAgICAgICAgYmluZGluZ0xvYWRlci5nZXRCaW5kaW5nVHlwZShiaW5kaW5nTG9hZGVyLmxvb2t1cFBvam9Gb3IodHlwZV9uYW1lKSk7Ci0KLSAgICAgICAgaWYgKGJ0ID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBYbWxFeGNlcHRpb24oImZhaWxlZCB0byBsb2FkIEJpbmRpbmdUeXBlIGZvciBYbWxOYW1lOiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV9uYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBidDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFVubWFyc2hhbENvbnRleHQgY3JlYXRlVW5tYXJzaGFsbENvbnRleHQoWE1MU3RyZWFtUmVhZGVyIHJlYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbGxlY3Rpb24gZXJyb3JzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBVbm1hcnNoYWxDb250ZXh0KHJlYWRlciwgYmluZGluZ0xvYWRlciwgdHlwZVRhYmxlLCBlcnJvcnMpOwotICAgIH0KLQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvcmVwYWNrYWdlL3JlcGFja2FnZS9FZGl0QnVpbGRTY3JpcHQuamF2YSBiL3YyL3NyYy9yZXBhY2thZ2UvcmVwYWNrYWdlL0VkaXRCdWlsZFNjcmlwdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYmViNTk3Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9yZXBhY2thZ2UvcmVwYWNrYWdlL0VkaXRCdWlsZFNjcmlwdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2UgcmVwYWNrYWdlOwotCi1pbXBvcnQgamF2YS5pby4qOwotCi1wdWJsaWMgY2xhc3MgRWRpdEJ1aWxkU2NyaXB0Ci17Ci0gICAgLy8KLSAgICAvLyB1c2dhZTogZWRpdCBidWlsZGZpbGUgdG9rZW4gbmV3LXZhbHVlCi0gICAgLy8KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluICggU3RyaW5nW10gYXJncyApCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPSAzKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMiICk7Ci0KLSAgICAgICAgYXJnc1sgMCBdID0gYXJnc1sgMCBdLnJlcGxhY2UoICcvJywgRmlsZS5zZXBhcmF0b3JDaGFyICk7Ci0KLSAgICAgICAgRmlsZSBidWlsZEZpbGUgPSBuZXcgRmlsZSggYXJnc1sgMCBdICk7Ci0KLSAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gcmVhZEZpbGUoIGJ1aWxkRmlsZSApOwotCi0gICAgICAgIFN0cmluZyB0b2tlblN0ciA9ICI8cHJvcGVydHkgbmFtZT1cIiIgKyBhcmdzWyAxIF0gKyAiXCIgdmFsdWU9XCIiOwotICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICBpbnQgaSA9IHNiLmluZGV4T2YoIHRva2VuU3RyICk7Ci0KLSAgICAgICAgaWYgKGkgPCAwKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIkNhbid0IGZpbmQgdG9rZW46ICIgKyB0b2tlblN0ciApOwotCi0gICAgICAgIGludCBqID0gaSArIHRva2VuU3RyLmxlbmd0aCgpOwotCi0gICAgICAgIHdoaWxlICggc2IuY2hhckF0KCBqICkgIT0gJyInICkKLSAgICAgICAgICAgIGorKzsKLQotICAgICAgICBzYi5yZXBsYWNlKCBpICsgdG9rZW5TdHIubGVuZ3RoKCksIGosIGFyZ3NbIDIgXSApOwotCi0gICAgICAgIHdyaXRlRmlsZSggYnVpbGRGaWxlLCBzYiApOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgU3RyaW5nQnVmZmVyIHJlYWRGaWxlICggRmlsZSBmICkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBJbnB1dFN0cmVhbSBpbiA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oIGYgKTsKLSAgICAgICAgUmVhZGVyIHIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoIGluICk7Ci0gICAgICAgIFN0cmluZ1dyaXRlciB3ID0gbmV3IFN0cmluZ1dyaXRlcigpOwotCi0gICAgICAgIGNvcHkoIHIsIHcgKTsKLQotICAgICAgICB3LmNsb3NlKCk7Ci0gICAgICAgIHIuY2xvc2UoKTsKLSAgICAgICAgaW4uY2xvc2UoKTsKLQotICAgICAgICByZXR1cm4gdy5nZXRCdWZmZXIoKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgd3JpdGVGaWxlICggRmlsZSBmLCBTdHJpbmdCdWZmZXIgY2hhcnMgKQotICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIE91dHB1dFN0cmVhbSBvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSggZiApOwotICAgICAgICBXcml0ZXIgdyA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoIG91dCApOwotICAgICAgICBSZWFkZXIgciA9IG5ldyBTdHJpbmdSZWFkZXIoIGNoYXJzLnRvU3RyaW5nKCkgKTsKLQotICAgICAgICBjb3B5KCByLCB3ICk7Ci0KLSAgICAgICAgci5jbG9zZSgpOwotICAgICAgICB3LmNsb3NlKCk7Ci0gICAgICAgIG91dC5jbG9zZSgpOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCBjb3B5ICggUmVhZGVyIHIsIFdyaXRlciB3ICkgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBjaGFyW10gYnVmZmVyID0gbmV3IGNoYXIgWyAxMDI0ICogMTYgXTsKLQotICAgICAgICBmb3IgKCA7IDsgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbiA9IHIucmVhZCggYnVmZmVyLCAwLCBidWZmZXIubGVuZ3RoICk7Ci0KLSAgICAgICAgICAgIGlmIChuIDwgMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgdy53cml0ZSggYnVmZmVyLCAwLCBuICk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvcmVwYWNrYWdlL3JlcGFja2FnZS9SZXBhY2thZ2UuamF2YSBiL3YyL3NyYy9yZXBhY2thZ2UvcmVwYWNrYWdlL1JlcGFja2FnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDBjOTNhLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy9yZXBhY2thZ2UvcmVwYWNrYWdlL1JlcGFja2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDI0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2UgcmVwYWNrYWdlOwotCi1pbXBvcnQgamF2YS5pby4qOwotaW1wb3J0IGphdmEudXRpbC4qOwotaW1wb3J0IGphdmEudXRpbC5yZWdleC4qOwotCi1wdWJsaWMgY2xhc3MgUmVwYWNrYWdlCi17Ci0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKCBTdHJpbmdbXSBhcmdzICkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgbmV3IFJlcGFja2FnZSgpLnJlcGFja2FnZSggYXJncyApOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCByZXBhY2thZ2UgKCBTdHJpbmdbXSBhcmdzICkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9IDIgfHwgIWFyZ3NbMF0uZXF1YWxzKCAiLXJlcGFja2FnZSIgKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCAiVXNhZ2U6IHJlcGFja2FnZSAtcmVwYWNrYWdlIFtzcGVjXSIgKTsKLSAgICAgICAgCi0gICAgICAgIF9yZXBhY2thZ2VyID0gbmV3IFJlcGFja2FnZXIoIGFyZ3NbIDEgXSApOwotCi0gICAgICAgIF9mcm9tUGFja2FnZXMgPSBfcmVwYWNrYWdlci5nZXRGcm9tUGFja2FnZXMoKTsKLSAgICAgICAgX3RvUGFja2FnZXMgPSBfcmVwYWNrYWdlci5nZXRUb1BhY2thZ2VzKCk7Ci0gICAgICAgIAotICAgICAgICBfcGFja2FnZVBhdHRlcm4gPQotICAgICAgICAgICAgUGF0dGVybi5jb21waWxlKCAiXlxccypwYWNrYWdlXFxzKygoPzpcXHd8XFwuKSopXFxzKjsiLCBQYXR0ZXJuLk1VTFRJTElORSApOwotICAgICAgICAKLSAgICAgICAgX21vdmVBbG9uZ0ZpbGVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBfbW92ZWREaXJzID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgCi0gICAgICAgIEZpbGUgY3VycmVudERpciAgID0gbmV3IEZpbGUoICIuIiApOwotICAgICAgICBGaWxlIGJ1aWxkRGlyICAgICA9IG5ldyBGaWxlKCBjdXJyZW50RGlyLCAiYnVpbGQiICk7Ci0gICAgICAgIEZpbGUgcmVwYWNrYWdlRGlyID0gbmV3IEZpbGUoIGJ1aWxkRGlyLCAicmVwYWNrYWdlIiApOwotCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIkRlbGV0aW5nIHJlcGFja2FnZSBkaXIgLi4uIiApOwotICAgICAgICAKLSAgICAgICAgcmVjdXJzaXZlRGVsZXRlKCByZXBhY2thZ2VEaXIgKTsKLQotICAgICAgICByZXBhY2thZ2VEaXIubWtkaXJzKCk7Ci0gICAgICAgIAotICAgICAgICBBcnJheUxpc3QgZmlsZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICAgICAgZmlsbEZpbGVzKCBmaWxlcywgY3VycmVudERpciApOwotICAgICAgICAKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiUmVwYWNrYWdpbmcgIiArIGZpbGVzLnNpemUoKSArICIgZmlsZXMgLi4uIiApOwotCi0gICAgICAgIGludCBwcmVmaXhMZW5ndGggPSBjdXJyZW50RGlyLmdldENhbm9uaWNhbFBhdGgoKS5sZW5ndGgoKTsKLQotICAgICAgICBfc291cmNlQmFzZSA9IGN1cnJlbnREaXI7Ci0gICAgICAgIF90YXJnZXRCYXNlID0gcmVwYWNrYWdlRGlyOwotCi0gICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCBmaWxlcy5zaXplKCkgOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBGaWxlIGZyb20gPSAoRmlsZSkgZmlsZXMuZ2V0KCBpICk7Ci0KLSAgICAgICAgICAgIFN0cmluZyBuYW1lID0gZnJvbS5nZXRDYW5vbmljYWxQYXRoKCkuc3Vic3RyaW5nKCBwcmVmaXhMZW5ndGggKyAxICk7Ci0KLSAgICAgICAgICAgIHJlcGFja2FnZUZpbGUoIG5hbWUgKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZmluaXNoTW92aW5nRmlsZXMoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZXBhY2thZ2VGaWxlICggU3RyaW5nIG5hbWUgKQotICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGlmIChuYW1lLmVuZHNXaXRoKCAiLmphdmEiICkpCi0gICAgICAgICAgICByZXBhY2thZ2VKYXZhRmlsZSggbmFtZSApOwotICAgICAgICBlbHNlIGlmIChuYW1lLmVuZHNXaXRoKCAiLnhzZGNvbmZpZyIgKSkKLSAgICAgICAgICAgIHJlcGFja2FnZU5vbkphdmFGaWxlKCBuYW1lICk7Ci0gICAgICAgIGVsc2UgaWYgKG5hbWUuc3RhcnRzV2l0aCggImJpbiIgKyBGaWxlLnNlcGFyYXRvckNoYXIgKSkKLSAgICAgICAgICAgIHJlcGFja2FnZU5vbkphdmFGaWxlKCBuYW1lICk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1vdmVBbG9uZ1dpdGhKYXZhRmlsZXMoIG5hbWUgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBtb3ZlQWxvbmdXaXRoSmF2YUZpbGVzKCBTdHJpbmcgbmFtZSApCi0gICAgewotICAgICAgICBfbW92ZUFsb25nRmlsZXMuYWRkKG5hbWUpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBmaW5pc2hNb3ZpbmdGaWxlcyAoICkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBmb3IgKCBJdGVyYXRvciBpID0gX21vdmVBbG9uZ0ZpbGVzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZykgaS5uZXh0KCk7Ci0gICAgICAgICAgICBTdHJpbmcgdG9OYW1lID0gbmFtZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgU3RyaW5nIHNyY0RpciA9IFJlcGFja2FnZXIuZGlyRm9yUGF0aCggbmFtZSApOwotICAgICAgICAgICAgU3RyaW5nIHRvRGlyID0gKFN0cmluZykgX21vdmVkRGlycy5nZXQoIHNyY0RpciApOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodG9EaXIgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICB0b05hbWUgPSBuZXcgRmlsZSggdG9EaXIsIG5ldyBGaWxlKCBuYW1lICkuZ2V0TmFtZSgpICkudG9TdHJpbmcoKTsgCi0KLSAgICAgICAgICAgIGlmIChuYW1lLmVuZHNXaXRoKCAiLmh0bWwiICkpCi0gICAgICAgICAgICAgICAgcmVwYWNrYWdlTm9uSmF2YUZpbGUoIG5hbWUsIHRvTmFtZSApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvcHlGaWxlKCBuZXcgRmlsZSggX3NvdXJjZUJhc2UsIG5hbWUgKSwgbmV3IEZpbGUoIF90YXJnZXRCYXNlLCB0b05hbWUgKSApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgcmVwYWNrYWdlTm9uSmF2YUZpbGUgKCBTdHJpbmcgbmFtZSApCi0gICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gcmVhZEZpbGUoIG5ldyBGaWxlKCBfc291cmNlQmFzZSwgbmFtZSApICk7Ci0KLSAgICAgICAgX3JlcGFja2FnZXIucmVwYWNrYWdlKCBzYiApOwotICAgICAgICAKLSAgICAgICAgd3JpdGVGaWxlKCBuZXcgRmlsZSggX3RhcmdldEJhc2UsIG5hbWUgKSwgc2IgKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgcmVwYWNrYWdlTm9uSmF2YUZpbGUgKCBTdHJpbmcgc291cmNlTmFtZSwgU3RyaW5nIHRhcmdldE5hbWUgKQotICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IHJlYWRGaWxlKCBuZXcgRmlsZSggX3NvdXJjZUJhc2UsIHNvdXJjZU5hbWUgKSApOwotCi0gICAgICAgIF9yZXBhY2thZ2VyLnJlcGFja2FnZSggc2IgKTsKLSAgICAgICAgCi0gICAgICAgIHdyaXRlRmlsZSggbmV3IEZpbGUoIF90YXJnZXRCYXNlLCB0YXJnZXROYW1lICksIHNiICk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHJlcGFja2FnZUphdmFGaWxlICggU3RyaW5nIG5hbWUgKQotICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IHJlYWRGaWxlKCBuZXcgRmlsZSggX3NvdXJjZUJhc2UsIG5hbWUgKSApOwotCi0gICAgICAgIE1hdGNoZXIgcGFja2FnZU1hdGNoZXIgPSBfcGFja2FnZVBhdHRlcm4ubWF0Y2hlciggc2IgKTsKLQotICAgICAgICBpZiAocGFja2FnZU1hdGNoZXIuZmluZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgcGtnID0gcGFja2FnZU1hdGNoZXIuZ3JvdXAoIDEgKTsKLSAgICAgICAgICAgIGludCBwa2dTdGFydCA9IHBhY2thZ2VNYXRjaGVyLnN0YXJ0KCAxICk7Ci0gICAgICAgICAgICBpbnQgcGtnRW5kID0gcGFja2FnZU1hdGNoZXIuZW5kKCAxICk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChwYWNrYWdlTWF0Y2hlci5maW5kKCkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oICJUd28gcGFja2FnZSBzcGVjaWZpY2F0aW9ucyBmb3VuZDogIiArIG5hbWUgKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTGlzdCBmaWxlUGF0aCA9IFJlcGFja2FnZXIuc3BsaXRQYXRoKCBuYW1lLCBGaWxlLnNlcGFyYXRvckNoYXIgKTsKLSAgICAgICAgICAgIFN0cmluZyBzcmNEaXIgPSBSZXBhY2thZ2VyLmRpckZvclBhdGgoIG5hbWUgKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gU29ydCB0aGUgcmVwYWNrYWdlIHNwZWMgc28gdGhhdCBsb25nZXIgZnJvbSdzIGFyZSBmaXJzdCB0byBtYXRjaAotICAgICAgICAgICAgLy8gbG9uZ2VzdCBwYWNrYWdlIGZpcnN0Ci0KLSAgICAgICAgICAgIGZvciAoIDsgOyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbGVhbiBzd2FwcGVkID0gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKCBpbnQgaSA9IDEgOyBpIDwgZmlsZVBhdGguc2l6ZSgpIDsgaSsrICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBzcGVjMSA9IChTdHJpbmcpIGZpbGVQYXRoLmdldCggaSAtIDEgKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHNwZWMyID0gKFN0cmluZykgZmlsZVBhdGguZ2V0KCBpICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNwZWMxLmluZGV4T2YoICc6JyApIDwgc3BlYzIuaW5kZXhPZiggJzonICkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVQYXRoLnNldCggaSAtIDEsIHNwZWMyICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlUGF0aC5zZXQoIGksIHNwZWMxICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBwZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCFzd2FwcGVkKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgTGlzdCBwa2dQYXRoID0gUmVwYWNrYWdlci5zcGxpdFBhdGgoIHBrZywgJy4nICk7Ci0KLSAgICAgICAgICAgIGludCBmID0gZmlsZVBhdGguc2l6ZSgpIC0gMjsKLQotICAgICAgICAgICAgZm9yICggaW50IGkgPSBwa2dQYXRoLnNpemUoKSAtIDEgOyBpID49IDAgOyBpLS0gKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghcGtnUGF0aC5nZXQoIGkgKS5lcXVhbHMoIGZpbGVQYXRoLmdldCggZi0tICkgKSkKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oICJQYWNrYWdlIHNwZWMgZGlmZmVycyBmcm9tIGZpbGUgcGF0aDogIiArIG5hbWUgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgTGlzdCBjaGFuZ2VUbyA9IG51bGw7Ci0gICAgICAgICAgICBMaXN0IGNoYW5nZUZyb20gPSBudWxsOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmcm9tOgotICAgICAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IF9mcm9tUGFja2FnZXMuc2l6ZSgpIDsgaSArKyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTGlzdCBmcm9tID0gKExpc3QpIF9mcm9tUGFja2FnZXMuZ2V0KCBpICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZnJvbS5zaXplKCkgPD0gcGtnUGF0aC5zaXplKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBmb3IgKCBpbnQgaiA9IDAgOyBqIDwgZnJvbS5zaXplKCkgOyBqKysgKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmcm9tLmdldCggaiApLmVxdWFscyggcGtnUGF0aC5nZXQoIGogKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgZnJvbTsKLQotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VGcm9tID0gZnJvbTsKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlVG8gPSAoTGlzdCkgX3RvUGFja2FnZXMuZ2V0KCBpICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY2hhbmdlVG8gIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbmV3UGtnID0gIiI7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5ld05hbWUgPSAiIjsKLQotICAgICAgICAgICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCBjaGFuZ2VUby5zaXplKCkgOyBpKysgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGkgPiAwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdQa2cgKz0gIi4iOwotICAgICAgICAgICAgICAgICAgICAgICAgbmV3TmFtZSArPSBGaWxlLnNlcGFyYXRvckNoYXI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG5ld1BrZyArPSBjaGFuZ2VUby5nZXQoIGkgKTsKLSAgICAgICAgICAgICAgICAgICAgbmV3TmFtZSArPSBjaGFuZ2VUby5nZXQoIGkgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZm9yICggaW50IGkgPSBmaWxlUGF0aC5zaXplKCkgLSBwa2dQYXRoLnNpemUoKSAtIDIgOyBpID49IDAgOyBpLS0gKQotICAgICAgICAgICAgICAgICAgICBuZXdOYW1lID0gKFN0cmluZykgZmlsZVBhdGguZ2V0KCBpICkgKyBGaWxlLnNlcGFyYXRvckNoYXIgKyBuZXdOYW1lOwotCi0gICAgICAgICAgICAgICAgZm9yICggaW50IGkgPSBjaGFuZ2VGcm9tLnNpemUoKSA7IGkgPCBwa2dQYXRoLnNpemUoKSA7IGkrKyApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBuZXdOYW1lICs9IEZpbGUuc2VwYXJhdG9yQ2hhciArIChTdHJpbmcpIHBrZ1BhdGguZ2V0KCBpICk7Ci0gICAgICAgICAgICAgICAgICAgIG5ld1BrZyArPSAnLicgKyAoU3RyaW5nKSBwa2dQYXRoLmdldCggaSApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG5ld05hbWUgKz0gRmlsZS5zZXBhcmF0b3JDaGFyICsgKFN0cmluZykgZmlsZVBhdGguZ2V0KCBmaWxlUGF0aC5zaXplKCkgLSAxICk7Ci0KLSAgICAgICAgICAgICAgICBzYi5yZXBsYWNlKCBwa2dTdGFydCwgcGtnRW5kLCBuZXdQa2cgKTsKLQotICAgICAgICAgICAgICAgIG5hbWUgPSBuZXdOYW1lOwotICAgICAgICAgICAgICAgIFN0cmluZyBuZXdEaXIgPSBSZXBhY2thZ2VyLmRpckZvclBhdGgoIG5hbWUgKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIXNyY0Rpci5lcXVhbHMobmV3RGlyKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIF9tb3ZlZERpcnMucHV0KHNyY0RpciwgbmV3RGlyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBfcmVwYWNrYWdlci5yZXBhY2thZ2UoIHNiICk7Ci0gICAgICAgIAotICAgICAgICB3cml0ZUZpbGUoIG5ldyBGaWxlKCBfdGFyZ2V0QmFzZSwgbmFtZSApLCBzYiApOwotICAgIH0KLQotICAgIHZvaWQgd3JpdGVGaWxlICggRmlsZSBmLCBTdHJpbmdCdWZmZXIgY2hhcnMgKQotICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGYuZ2V0UGFyZW50RmlsZSgpLm1rZGlycygpOwotICAgICAgICAKLSAgICAgICAgT3V0cHV0U3RyZWFtIG91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCBmICk7Ci0gICAgICAgIFdyaXRlciB3ID0gbmV3IE91dHB1dFN0cmVhbVdyaXRlciggb3V0ICk7Ci0gICAgICAgIFJlYWRlciByID0gbmV3IFN0cmluZ1JlYWRlciggY2hhcnMudG9TdHJpbmcoKSApOwotCi0gICAgICAgIGNvcHkoIHIsIHcgKTsKLQotICAgICAgICByLmNsb3NlKCk7Ci0gICAgICAgIHcuY2xvc2UoKTsKLSAgICAgICAgb3V0LmNsb3NlKCk7Ci0gICAgfQotICAgIAotICAgIFN0cmluZ0J1ZmZlciByZWFkRmlsZSAoIEZpbGUgZiApCi0gICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgSW5wdXRTdHJlYW0gaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKCBmICk7Ci0gICAgICAgIFJlYWRlciByID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKCBpbiApOwotICAgICAgICBTdHJpbmdXcml0ZXIgdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLQotICAgICAgICBjb3B5KCByLCB3ICk7Ci0KLSAgICAgICAgdy5jbG9zZSgpOwotICAgICAgICByLmNsb3NlKCk7Ci0gICAgICAgIGluLmNsb3NlKCk7Ci0KLSAgICAgICAgcmV0dXJuIHcuZ2V0QnVmZmVyKCk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGNvcHlGaWxlICggRmlsZSBmcm9tLCBGaWxlIHRvICkgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICB0by5nZXRQYXJlbnRGaWxlKCkubWtkaXJzKCk7Ci0gICAgICAgIAotICAgICAgICBGaWxlSW5wdXRTdHJlYW0gaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKCBmcm9tICk7Ci0gICAgICAgIEZpbGVPdXRwdXRTdHJlYW0gb3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oIHRvICk7Ci0KLSAgICAgICAgY29weSggaW4sIG91dCApOwotICAgICAgICAKLSAgICAgICAgb3V0LmNsb3NlKCk7Ci0gICAgICAgIGluLmNsb3NlKCk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGNvcHkgKCBJbnB1dFN0cmVhbSBpbiwgT3V0cHV0U3RyZWFtIG91dCApIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgYnl0ZVtdIGJ1ZmZlciA9IG5ldyBieXRlIFsgMTAyNCAqIDE2IF07Ci0KLSAgICAgICAgZm9yICggOyA7ICkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IG4gPSBpbi5yZWFkKCBidWZmZXIsIDAsIGJ1ZmZlci5sZW5ndGggKTsKLQotICAgICAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBvdXQud3JpdGUoIGJ1ZmZlciwgMCwgbiApOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGNvcHkgKCBSZWFkZXIgciwgV3JpdGVyIHcgKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGNoYXJbXSBidWZmZXIgPSBuZXcgY2hhciBbIDEwMjQgKiAxNiBdOwotCi0gICAgICAgIGZvciAoIDsgOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBuID0gci5yZWFkKCBidWZmZXIsIDAsIGJ1ZmZlci5sZW5ndGggKTsKLQotICAgICAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICB3LndyaXRlKCBidWZmZXIsIDAsIG4gKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBmaWxsRmlsZXMgKCBBcnJheUxpc3QgZmlsZXMsIEZpbGUgZmlsZSApIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgaWYgKCFmaWxlLmlzRGlyZWN0b3J5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZpbGVzLmFkZCggZmlsZSApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRXhjbHVkZSB0aGUgYnVpbGQgZGlyZWN0b3J5Ci0KLSAgICAgICAgaWYgKGZpbGUuZ2V0TmFtZSgpLmVxdWFscyggImJ1aWxkIiApKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgLy8gRXhjbHVkZSBDVlMgZGlyZWN0b3JpZXMKLSAgICAgICAgaWYgKGZpbGUuZ2V0TmFtZSgpLmVxdWFscyggIkNWUyIgKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBTdHJpbmdbXSBlbnRyaWVzID0gZmlsZS5saXN0KCk7Ci0KLSAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IGVudHJpZXMubGVuZ3RoIDsgaSsrICkKLSAgICAgICAgICAgIGZpbGxGaWxlcyggZmlsZXMsIG5ldyBGaWxlKCBmaWxlLCBlbnRyaWVzWyBpIF0gKSApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJlY3Vyc2l2ZURlbGV0ZSAoIEZpbGUgZmlsZSApIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgaWYgKCFmaWxlLmV4aXN0cygpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChmaWxlLmlzRGlyZWN0b3J5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZ1tdIGVudHJpZXMgPSBmaWxlLmxpc3QoKTsKLQotICAgICAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IGVudHJpZXMubGVuZ3RoIDsgaSsrICkKLSAgICAgICAgICAgICAgICByZWN1cnNpdmVEZWxldGUoIG5ldyBGaWxlKCBmaWxlLCBlbnRyaWVzWyBpIF0gKSApOwotICAgICAgICB9Ci0KLSAgICAgICAgZmlsZS5kZWxldGUoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIEZpbGUgX3NvdXJjZUJhc2U7Ci0gICAgcHJpdmF0ZSBGaWxlIF90YXJnZXRCYXNlOwotCi0gICAgcHJpdmF0ZSBMaXN0IF9mcm9tUGFja2FnZXM7Ci0gICAgcHJpdmF0ZSBMaXN0IF90b1BhY2thZ2VzOwotICAgIAotICAgIHByaXZhdGUgUGF0dGVybiBfcGFja2FnZVBhdHRlcm47Ci0KLSAgICBwcml2YXRlIFJlcGFja2FnZXIgX3JlcGFja2FnZXI7Ci0gICAgCi0gICAgcHJpdmF0ZSBNYXAgX21vdmVkRGlyczsKLSAgICBwcml2YXRlIExpc3QgX21vdmVBbG9uZ0ZpbGVzOwotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3JlcGFja2FnZS9yZXBhY2thZ2UvUmVwYWNrYWdlci5qYXZhIGIvdjIvc3JjL3JlcGFja2FnZS9yZXBhY2thZ2UvUmVwYWNrYWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjY3Zjg2Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy9yZXBhY2thZ2UvcmVwYWNrYWdlL1JlcGFja2FnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIHJlcGFja2FnZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXI7Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotCi1wdWJsaWMgY2xhc3MgUmVwYWNrYWdlcgotewotICAgIHB1YmxpYyBSZXBhY2thZ2VyICggU3RyaW5nIHJlcGFja2FnZVNwZWNzICkKLSAgICB7Ci0gICAgICAgIF9mcm9tUGFja2FnZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIF90b1BhY2thZ2VzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAKLSAgICAgICAgTGlzdCByZXBhY2thZ2VzID0gc3BsaXRQYXRoKCByZXBhY2thZ2VTcGVjcywgJzsnICk7Ci0KLSAgICAgICAgLy8gU29ydCB0aGUgcmVwYWNrYWdlIHNwZWMgc28gdGhhdCBsb25nZXIgZnJvbSdzIGFyZSBmaXJzdCB0byBtYXRjaAotICAgICAgICAvLyBsb25nZXN0IHBhY2thZ2UgZmlyc3QKLSAgICAgICAgCi0gICAgICAgIGZvciAoIDsgOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJvb2xlYW4gc3dhcHBlZCA9IGZhbHNlOwotCi0gICAgICAgICAgICBmb3IgKCBpbnQgaSA9IDEgOyBpIDwgcmVwYWNrYWdlcy5zaXplKCkgOyBpKysgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBzcGVjMSA9IChTdHJpbmcpIHJlcGFja2FnZXMuZ2V0KCBpIC0gMSApOwotICAgICAgICAgICAgICAgIFN0cmluZyBzcGVjMiA9IChTdHJpbmcpIHJlcGFja2FnZXMuZ2V0KCBpICk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHNwZWMxLmluZGV4T2YoICc6JyApIDwgc3BlYzIuaW5kZXhPZiggJzonICkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXBhY2thZ2VzLnNldCggaSAtIDEsIHNwZWMyICk7Ci0gICAgICAgICAgICAgICAgICAgIHJlcGFja2FnZXMuc2V0KCBpLCBzcGVjMSApOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgc3dhcHBlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXN3YXBwZWQpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgcmVwYWNrYWdlcy5zaXplKCkgOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgc3BlYyA9IChTdHJpbmcpIHJlcGFja2FnZXMuZ2V0KCBpICk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGludCBqID0gc3BlYy5pbmRleE9mKCAnOicgKTsKLQotICAgICAgICAgICAgaWYgKGogPCAwIHx8IHNwZWMuaW5kZXhPZiggJzonLCBqICsgMSApID49IDApCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oICJJbGxlZ2FsIHJlcGFja2FnZSBzcGVjaWZpY2F0aW9uOiAiICsgc3BlYyApOwotCi0gICAgICAgICAgICBTdHJpbmcgZnJvbSA9IHNwZWMuc3Vic3RyaW5nKCAwLCBqICk7Ci0gICAgICAgICAgICBTdHJpbmcgdG8gPSBzcGVjLnN1YnN0cmluZyggaiArIDEgKTsKLQotICAgICAgICAgICAgX2Zyb21QYWNrYWdlcy5hZGQoIFJlcGFja2FnZXIuc3BsaXRQYXRoKCBmcm9tLCAnLicgKSApOwotICAgICAgICAgICAgX3RvUGFja2FnZXMuYWRkKCBSZXBhY2thZ2VyLnNwbGl0UGF0aCggdG8sICcuJyApICk7Ci0gICAgICAgIH0KLQotICAgICAgICBfZnJvbU1hdGNoZXJzID0gbmV3IE1hdGNoZXIgWyBfZnJvbVBhY2thZ2VzLnNpemUoKSAqIDIgXTsKLSAgICAgICAgX3RvUGFja2FnZU5hbWVzID0gbmV3IFN0cmluZyBbIF9mcm9tUGFja2FnZXMuc2l6ZSgpICogMiBdOwotCi0gICAgICAgIGFkZFBhdHRlcm5zKCAnLicsIDAgKTsKLSAgICAgICAgYWRkUGF0dGVybnMoICcvJywgX2Zyb21QYWNrYWdlcy5zaXplKCkgKTsKLSAgICB9Ci0KLSAgICB2b2lkIGFkZFBhdHRlcm5zICggY2hhciBzZXAsIGludCBvZmYgKQotICAgIHsKLSAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IF9mcm9tUGFja2FnZXMuc2l6ZSgpIDsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgTGlzdCBmcm9tID0gKExpc3QpIF9mcm9tUGFja2FnZXMuZ2V0KCBpICk7Ci0gICAgICAgICAgICBMaXN0IHRvID0gKExpc3QpIF90b1BhY2thZ2VzLmdldCggaSApOwotCi0gICAgICAgICAgICBTdHJpbmcgcGF0dGVybiA9ICIiOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKCBpbnQgaiA9IDAgOyBqIDwgZnJvbS5zaXplKCkgOyBqKysgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChqID4gMCkKLSAgICAgICAgICAgICAgICAgICAgcGF0dGVybiArPSAiXFwiICsgc2VwOwotCi0gICAgICAgICAgICAgICAgcGF0dGVybiArPSBmcm9tLmdldCggaiApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBTdHJpbmcgdG9QYWNrYWdlID0gIiI7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAoIGludCBqID0gMCA7IGogPCB0by5zaXplKCkgOyBqKysgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChqID4gMCkKLSAgICAgICAgICAgICAgICAgICAgdG9QYWNrYWdlICs9IHNlcDsKLQotICAgICAgICAgICAgICAgIHRvUGFja2FnZSArPSB0by5nZXQoIGogKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgX2Zyb21NYXRjaGVyc1sgb2ZmICsgaSBdID0gUGF0dGVybi5jb21waWxlKCBwYXR0ZXJuICkubWF0Y2hlciggbnVsbCApOwotICAgICAgICAgICAgX3RvUGFja2FnZU5hbWVzWyBvZmYgKyBpIF0gPSB0b1BhY2thZ2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZXBhY2thZ2UgKCBTdHJpbmdCdWZmZXIgc2IgKQotICAgIHsKLSAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IF9mcm9tTWF0Y2hlcnMubGVuZ3RoIDsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgTWF0Y2hlciBtYXRjaGVyID0gKE1hdGNoZXIpIF9mcm9tTWF0Y2hlcnNbIGkgXTsKLQotICAgICAgICAgICAgbWF0Y2hlci5yZXNldCggc2IgKTsKLQotICAgICAgICAgICAgd2hpbGUgKCBtYXRjaGVyLmZpbmQoKSApCi0gICAgICAgICAgICAgICAgc2IucmVwbGFjZSggbWF0Y2hlci5zdGFydCgpLCBtYXRjaGVyLmVuZCgpLCBfdG9QYWNrYWdlTmFtZXNbIGkgXSApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIExpc3QgZ2V0RnJvbVBhY2thZ2VzICggKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9mcm9tUGFja2FnZXM7Ci0gICAgfQotCi0gICAgcHVibGljIExpc3QgZ2V0VG9QYWNrYWdlcyAoICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfdG9QYWNrYWdlczsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBBcnJheUxpc3Qgc3BsaXRQYXRoICggU3RyaW5nIHBhdGgsIGNoYXIgc2VwYXJhdG9yICkKLSAgICB7Ci0gICAgICAgIEFycmF5TGlzdCBjb21wb25lbnRzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAKLSAgICAgICAgZm9yICggOyA7ICkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGkgPSBwYXRoLmluZGV4T2YoIHNlcGFyYXRvciApOwotCi0gICAgICAgICAgICBpZiAoaSA8IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNvbXBvbmVudHMuYWRkKCBwYXRoLnN1YnN0cmluZyggMCwgaSApICk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cmluZyggaSArIDEgKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwYXRoLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICAgIGNvbXBvbmVudHMuYWRkKCBwYXRoICk7Ci0KLSAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGRpckZvclBhdGggKCBTdHJpbmcgcGF0aCApCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IEZpbGUocGF0aCkuZ2V0UGFyZW50KCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBMaXN0IF9mcm9tUGFja2FnZXM7Ci0gICAgcHJpdmF0ZSBMaXN0IF90b1BhY2thZ2VzOwotICAgIAotICAgIHByaXZhdGUgTWF0Y2hlcltdIF9mcm9tTWF0Y2hlcnM7Ci0gICAgcHJpdmF0ZSBTdHJpbmdbXSAgX3RvUGFja2FnZU5hbWVzOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3YyL3NyYy90b29sc2NoZW1hL2x0Z2ZtdC54c2QgYi92Mi9zcmMvdG9vbHNjaGVtYS9sdGdmbXQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzRlZmVhLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90b29sc2NoZW1hL2x0Z2ZtdC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi08eHM6c2NoZW1hCi0gICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuYmVhLmNvbS8yMDAzLzA1L3htbGJlYW4vbHRnZm10IgotICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmJlYS5jb20vMjAwMy8wNS94bWxiZWFuL2x0Z2ZtdCIKLSAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJ0ZXN0cyI+Ci0gICAgPHhzOmNvbXBsZXhUeXBlPgotICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJ0ZXN0IiB0eXBlPSJ0bnM6dGVzdC1jYXNlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+IAotICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICA8L3hzOmNvbXBsZXhUeXBlPgotICA8L3hzOmVsZW1lbnQ+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRlc3QtY2FzZSI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJmaWxlcyI+Ci0gICAgICAgIDx4czpjb21wbGV4VHlwZT4KLSAgICAgICAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJmaWxlIiB0eXBlPSJ0bnM6ZmlsZS1kZXNjIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0iNCIvPgotICAgICAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgICAgIDwveHM6Y29tcGxleFR5cGU+Ci0gICAgICA8L3hzOmVsZW1lbnQ+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpJRCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ib3JpZ2luIiB0eXBlPSJ4czp0b2tlbiIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibW9kaWZpZWQiIHR5cGU9InhzOmJvb2xlYW4iLz4KLSAgPC94czpjb21wbGV4VHlwZT4KLSAgCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJmaWxlLWRlc2MiPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idHNEaXIiIHR5cGU9InhzOnRva2VuIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmb2xkZXIiIHR5cGU9InhzOnRva2VuIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmaWxlTmFtZSIgdHlwZT0ieHM6dG9rZW4iLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJvbGUiPgotICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzY2hlbWEiLz4KLSAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imluc3RhbmNlIi8+Ci0gICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZXNvdXJjZSIvPgotICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgIDwveHM6YXR0cmlidXRlPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmFsaWRpdHkiIHR5cGU9InhzOmJvb2xlYW4iLz4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotPC94czpzY2hlbWE+CmRpZmYgLS1naXQgYS92Mi9zcmMvdG9vbHNjaGVtYS9zdWJzdHdzZGwueHNkIGIvdjIvc3JjL3Rvb2xzY2hlbWEvc3Vic3R3c2RsLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JjY2YzYy4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdG9vbHNjaGVtYS9zdWJzdHdzZGwueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotPCEtLQotICAgVGhpcyBzY2hlbWEgc3RhbmRzIGluIGZvciBhIHNjaGVtYSBmb3IgV1NETC4KLQotICAgSXQgaGFzIG5vbmUgb2YgdGhlIHJlYWwgc3RydWN0dXJlIG9mIGEgV1NETCBleGNlcHQgImltcG9ydHMiIGFuZAotICAgdGhlIDJuZC1sZXZlbCB0YWcgbmFtZXMuCi0KLSAgIFdoZW4gY29tcGlsaW5nIHNjaGVtYXMgd2l0aGluIC53c2RsIGZpbGVzLCB3ZSB1c2UgdGhpcyBzY2hlbWEgdG8gbG9hZAotICAgdGhlIFdTREwgZmlsZXMuICBPZiBjb3Vyc2UsIFdTREwgZmlsZXMgYXJlIGFjdHVhbGx5IGluIHRoZQotICAgaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8gbmFtZXNwYWNlLCBidXQgd2UgdXNlIHRoZQotICAgTG9hZFN1YnN0aXR1dGVOYW1lc3BhY2VzIG9wdGlvbiBpbiBvcmRlciB0byBpbnRlcm5hbGx5IHN1YnN0aXR1dGUKLSAgIHRoZSBuYW1lc3BhY2UgYmVsb3cuCi0tLT4KLQotCi08eHM6c2NoZW1hCi0gICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICB4bWxuczp0bnM9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9pbnRlcm5hbC94bWxiZWFucy93c2Rsc3Vic3QiCi0gICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9pbnRlcm5hbC94bWxiZWFucy93c2Rsc3Vic3QiCi0gICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0KLSAgPHhzOmVsZW1lbnQgbmFtZT0iZGVmaW5pdGlvbnMiPgotICAgIDx4czpjb21wbGV4VHlwZT4KLSAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgIDx4czplbGVtZW50IG5hbWU9ImltcG9ydCIgdHlwZT0idG5zOlRJbXBvcnQiLz4KLSAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0idHlwZXMiLz4gICAgICAgICAgICAgICAJCQkKLSAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ibWVzc2FnZSIvPgotICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJiaW5kaW5nIi8+Ci0gICAgICAgIDx4czplbGVtZW50IG5hbWU9InBvcnRUeXBlIi8+Ci0gICAgICAgIDx4czplbGVtZW50IG5hbWU9InNlcnZpY2UiLz4KLSAgICAgICAgPHhzOmFueSBuYW1lc3BhY2U9IiMjb3RoZXIiLz4KLSAgICAgIDwveHM6Y2hvaWNlPgotICAgICAgPHhzOmFueUF0dHJpYnV0ZS8+Ci0gICAgPC94czpjb21wbGV4VHlwZT4KLSAgPC94czplbGVtZW50PgotCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJUSW1wb3J0Ij4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdHlwZT0ieHM6YW55VVJJIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJsb2NhdGlvbiIgdHlwZT0ieHM6YW55VVJJIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiLz4JCQotICA8L3hzOmNvbXBsZXhUeXBlPgotCi08L3hzOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3YyL3NyYy90b29sc2NoZW1hL3hzZG93bmxvYWQueHNkIGIvdjIvc3JjL3Rvb2xzY2hlbWEveHNkb3dubG9hZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxNjlkMzYuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3Rvb2xzY2hlbWEveHNkb3dubG9hZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi08eHM6c2NoZW1hCi0gICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICB4bWxuczppPSJodHRwOi8vd3d3LmJlYS5jb20vMjAwMy8wMS94bWxiZWFuL3hzZG93bmxvYWQiCi0gICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuYmVhLmNvbS8yMDAzLzAxL3htbGJlYW4veHNkb3dubG9hZCIKLSAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJkb3dubG9hZGVkLXNjaGVtYXMiPgotICAgIDx4czpjb21wbGV4VHlwZT4KLSAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgIDx4czplbGVtZW50IG5hbWU9ImVudHJ5IiB0eXBlPSJpOmRvd25sb2FkZWQtc2NoZW1hLWVudHJ5Ii8+Ci0gICAgICA8L3hzOmNob2ljZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImRlZmF1bHREaXJlY3RvcnkiIHR5cGU9InhzOnRva2VuIi8+Ci0gICAgPC94czpjb21wbGV4VHlwZT4KLSAgPC94czplbGVtZW50PgotCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJkb3dubG9hZGVkLXNjaGVtYS1lbnRyeSI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iZmlsZW5hbWUiIHR5cGU9InhzOnRva2VuIi8+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJzaGExIiB0eXBlPSJ4czp0b2tlbiIvPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ic2NoZW1hTG9jYXRpb24iIHR5cGU9InhzOmFueVVSSSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ibmFtZXNwYWNlIiB0eXBlPSJ4czphbnlVUkkiIG1pbk9jY3Vycz0iMCIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLTwveHM6c2NoZW1hPgotCmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3JlZ2V4L0JNUGF0dGVybi5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9yZWdleC9CTVBhdHRlcm4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI3YzU1ZC4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3JlZ2V4L0JNUGF0dGVybi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcxICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnJlZ2V4OwotCi1pbXBvcnQgamF2YS50ZXh0LkNoYXJhY3Rlckl0ZXJhdG9yOwotCi0vKioKLSAqIEJveWVyLU1vb3JlIHNlYXJjaGVyLgotICovCi1wdWJsaWMgY2xhc3MgQk1QYXR0ZXJuIHsKLSAgICBjaGFyW10gcGF0dGVybjsKLSAgICBpbnRbXSBzaGlmdFRhYmxlOwotICAgIGJvb2xlYW4gaWdub3JlQ2FzZTsKLQotICAgIHB1YmxpYyBCTVBhdHRlcm4oU3RyaW5nIHBhdCwgYm9vbGVhbiBpZ25vcmVDYXNlKSB7Ci0gICAgICAgIHRoaXMocGF0LCAyNTYsIGlnbm9yZUNhc2UpOwotICAgIH0KLQotICAgIHB1YmxpYyBCTVBhdHRlcm4oU3RyaW5nIHBhdCwgaW50IHRhYmxlU2l6ZSwgYm9vbGVhbiBpZ25vcmVDYXNlKSB7Ci0gICAgICAgIHRoaXMucGF0dGVybiA9IHBhdC50b0NoYXJBcnJheSgpOwotICAgICAgICB0aGlzLnNoaWZ0VGFibGUgPSBuZXcgaW50W3RhYmxlU2l6ZV07Ci0gICAgICAgIHRoaXMuaWdub3JlQ2FzZSA9IGlnbm9yZUNhc2U7Ci0KLSAgICAgICAgaW50IGxlbmd0aCA9IHBhdHRlcm4ubGVuZ3RoOwotICAgICAgICBmb3IgKGludCBpID0gMDsgIGkgPCB0aGlzLnNoaWZ0VGFibGUubGVuZ3RoOyAgaSArKykKLSAgICAgICAgICAgIHRoaXMuc2hpZnRUYWJsZVtpXSA9IGxlbmd0aDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgIGkgPCBsZW5ndGg7ICBpICsrKSB7Ci0gICAgICAgICAgICBjaGFyIGNoID0gdGhpcy5wYXR0ZXJuW2ldOwotICAgICAgICAgICAgaW50IGRpZmYgPSBsZW5ndGgtaS0xOwotICAgICAgICAgICAgaW50IGluZGV4ID0gY2ggJSB0aGlzLnNoaWZ0VGFibGUubGVuZ3RoOwotICAgICAgICAgICAgaWYgKGRpZmYgPCB0aGlzLnNoaWZ0VGFibGVbaW5kZXhdKQotICAgICAgICAgICAgICAgIHRoaXMuc2hpZnRUYWJsZVtpbmRleF0gPSBkaWZmOwotICAgICAgICAgICAgaWYgKHRoaXMuaWdub3JlQ2FzZSkgewotICAgICAgICAgICAgICAgIGNoID0gQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKGNoKTsKLSAgICAgICAgICAgICAgICBpbmRleCA9IGNoICUgdGhpcy5zaGlmdFRhYmxlLmxlbmd0aDsKLSAgICAgICAgICAgICAgICBpZiAoZGlmZiA8IHRoaXMuc2hpZnRUYWJsZVtpbmRleF0pCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnRUYWJsZVtpbmRleF0gPSBkaWZmOwotICAgICAgICAgICAgICAgIGNoID0gQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKGNoKTsKLSAgICAgICAgICAgICAgICBpbmRleCA9IGNoICUgdGhpcy5zaGlmdFRhYmxlLmxlbmd0aDsKLSAgICAgICAgICAgICAgICBpZiAoZGlmZiA8IHRoaXMuc2hpZnRUYWJsZVtpbmRleF0pCi0gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnRUYWJsZVtpbmRleF0gPSBkaWZmOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIC0xIGlmIDx2YXI+aXRlcmF0b3I8L3Zhcj4gZG9lcyBub3QgY29udGFpbiB0aGlzIHBhdHRlcm4uCi0gICAgICovCi0gICAgcHVibGljIGludCBtYXRjaGVzKENoYXJhY3Rlckl0ZXJhdG9yIGl0ZXJhdG9yLCBpbnQgc3RhcnQsIGludCBsaW1pdCkgewotICAgICAgICBpZiAodGhpcy5pZ25vcmVDYXNlKSAgcmV0dXJuIHRoaXMubWF0Y2hlc0lnbm9yZUNhc2UoaXRlcmF0b3IsIHN0YXJ0LCBsaW1pdCk7Ci0gICAgICAgIGludCBwbGVuZ3RoID0gdGhpcy5wYXR0ZXJuLmxlbmd0aDsKLSAgICAgICAgaWYgKHBsZW5ndGggPT0gMCkgIHJldHVybiBzdGFydDsKLSAgICAgICAgaW50IGluZGV4ID0gc3RhcnQrcGxlbmd0aDsKLSAgICAgICAgd2hpbGUgKGluZGV4IDw9IGxpbWl0KSB7Ci0gICAgICAgICAgICBpbnQgcGluZGV4ID0gcGxlbmd0aDsKLSAgICAgICAgICAgIGludCBuaW5kZXggPSBpbmRleCsxOwotICAgICAgICAgICAgY2hhciBjaDsKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBpZiAoKGNoID0gaXRlcmF0b3Iuc2V0SW5kZXgoLS1pbmRleCkpICE9IHRoaXMucGF0dGVyblstLXBpbmRleF0pCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmIChwaW5kZXggPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwotICAgICAgICAgICAgfSB3aGlsZSAocGluZGV4ID4gMCk7Ci0gICAgICAgICAgICBpbmRleCArPSB0aGlzLnNoaWZ0VGFibGVbY2ggJSB0aGlzLnNoaWZ0VGFibGUubGVuZ3RoXSsxOwotICAgICAgICAgICAgaWYgKGluZGV4IDwgbmluZGV4KSAgaW5kZXggPSBuaW5kZXg7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIC8qKgotICAgICAqCi0gICAgICogQHJldHVybiAtMSBpZiA8dmFyPnN0cjwvdmFyPiBkb2VzIG5vdCBjb250YWluIHRoaXMgcGF0dGVybi4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IG1hdGNoZXMoU3RyaW5nIHN0ciwgaW50IHN0YXJ0LCBpbnQgbGltaXQpIHsKLSAgICAgICAgaWYgKHRoaXMuaWdub3JlQ2FzZSkgIHJldHVybiB0aGlzLm1hdGNoZXNJZ25vcmVDYXNlKHN0ciwgc3RhcnQsIGxpbWl0KTsKLSAgICAgICAgaW50IHBsZW5ndGggPSB0aGlzLnBhdHRlcm4ubGVuZ3RoOwotICAgICAgICBpZiAocGxlbmd0aCA9PSAwKSAgcmV0dXJuIHN0YXJ0OwotICAgICAgICBpbnQgaW5kZXggPSBzdGFydCtwbGVuZ3RoOwotICAgICAgICB3aGlsZSAoaW5kZXggPD0gbGltaXQpIHsKLSAgICAgICAgICAgIC8vU3lzdGVtLmVyci5wcmludGxuKCJTdGFydHMgYXQgIitpbmRleCk7Ci0gICAgICAgICAgICBpbnQgcGluZGV4ID0gcGxlbmd0aDsKLSAgICAgICAgICAgIGludCBuaW5kZXggPSBpbmRleCsxOwotICAgICAgICAgICAgY2hhciBjaDsKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBpZiAoKGNoID0gc3RyLmNoYXJBdCgtLWluZGV4KSkgIT0gdGhpcy5wYXR0ZXJuWy0tcGluZGV4XSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKHBpbmRleCA9PSAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgICAgICB9IHdoaWxlIChwaW5kZXggPiAwKTsKLSAgICAgICAgICAgIGluZGV4ICs9IHRoaXMuc2hpZnRUYWJsZVtjaCAlIHRoaXMuc2hpZnRUYWJsZS5sZW5ndGhdKzE7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPCBuaW5kZXgpICBpbmRleCA9IG5pbmRleDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIC8qKgotICAgICAqCi0gICAgICogQHJldHVybiAtMSBpZiA8dmFyPmNoYXJzPC9jaGFyPiBkb2VzIG5vdCBjb250YWluIHRoaXMgcGF0dGVybi4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IG1hdGNoZXMoY2hhcltdIGNoYXJzLCBpbnQgc3RhcnQsIGludCBsaW1pdCkgewotICAgICAgICBpZiAodGhpcy5pZ25vcmVDYXNlKSAgcmV0dXJuIHRoaXMubWF0Y2hlc0lnbm9yZUNhc2UoY2hhcnMsIHN0YXJ0LCBsaW1pdCk7Ci0gICAgICAgIGludCBwbGVuZ3RoID0gdGhpcy5wYXR0ZXJuLmxlbmd0aDsKLSAgICAgICAgaWYgKHBsZW5ndGggPT0gMCkgIHJldHVybiBzdGFydDsKLSAgICAgICAgaW50IGluZGV4ID0gc3RhcnQrcGxlbmd0aDsKLSAgICAgICAgd2hpbGUgKGluZGV4IDw9IGxpbWl0KSB7Ci0gICAgICAgICAgICAvL1N5c3RlbS5lcnIucHJpbnRsbigiU3RhcnRzIGF0ICIraW5kZXgpOwotICAgICAgICAgICAgaW50IHBpbmRleCA9IHBsZW5ndGg7Ci0gICAgICAgICAgICBpbnQgbmluZGV4ID0gaW5kZXgrMTsKLSAgICAgICAgICAgIGNoYXIgY2g7Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgaWYgKChjaCA9IGNoYXJzWy0taW5kZXhdKSAhPSB0aGlzLnBhdHRlcm5bLS1waW5kZXhdKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAocGluZGV4ID09IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgICAgIH0gd2hpbGUgKHBpbmRleCA+IDApOwotICAgICAgICAgICAgaW5kZXggKz0gdGhpcy5zaGlmdFRhYmxlW2NoICUgdGhpcy5zaGlmdFRhYmxlLmxlbmd0aF0rMTsKLSAgICAgICAgICAgIGlmIChpbmRleCA8IG5pbmRleCkgIGluZGV4ID0gbmluZGV4OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBpbnQgbWF0Y2hlc0lnbm9yZUNhc2UoQ2hhcmFjdGVySXRlcmF0b3IgaXRlcmF0b3IsIGludCBzdGFydCwgaW50IGxpbWl0KSB7Ci0gICAgICAgIGludCBwbGVuZ3RoID0gdGhpcy5wYXR0ZXJuLmxlbmd0aDsKLSAgICAgICAgaWYgKHBsZW5ndGggPT0gMCkgIHJldHVybiBzdGFydDsKLSAgICAgICAgaW50IGluZGV4ID0gc3RhcnQrcGxlbmd0aDsKLSAgICAgICAgd2hpbGUgKGluZGV4IDw9IGxpbWl0KSB7Ci0gICAgICAgICAgICBpbnQgcGluZGV4ID0gcGxlbmd0aDsKLSAgICAgICAgICAgIGludCBuaW5kZXggPSBpbmRleCsxOwotICAgICAgICAgICAgY2hhciBjaDsKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBjaGFyIGNoMSA9IGNoID0gaXRlcmF0b3Iuc2V0SW5kZXgoLS1pbmRleCk7Ci0gICAgICAgICAgICAgICAgY2hhciBjaDIgPSB0aGlzLnBhdHRlcm5bLS1waW5kZXhdOwotICAgICAgICAgICAgICAgIGlmIChjaDEgIT0gY2gyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoMSA9IENoYXJhY3Rlci50b1VwcGVyQ2FzZShjaDEpOwotICAgICAgICAgICAgICAgICAgICBjaDIgPSBDaGFyYWN0ZXIudG9VcHBlckNhc2UoY2gyKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoMSAhPSBjaDIgJiYgQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKGNoMSkgIT0gQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKGNoMikpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHBpbmRleCA9PSAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgICAgICB9IHdoaWxlIChwaW5kZXggPiAwKTsKLSAgICAgICAgICAgIGluZGV4ICs9IHRoaXMuc2hpZnRUYWJsZVtjaCAlIHRoaXMuc2hpZnRUYWJsZS5sZW5ndGhdKzE7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPCBuaW5kZXgpICBpbmRleCA9IG5pbmRleDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIAotICAgIGludCBtYXRjaGVzSWdub3JlQ2FzZShTdHJpbmcgdGV4dCwgaW50IHN0YXJ0LCBpbnQgbGltaXQpIHsKLSAgICAgICAgaW50IHBsZW5ndGggPSB0aGlzLnBhdHRlcm4ubGVuZ3RoOwotICAgICAgICBpZiAocGxlbmd0aCA9PSAwKSAgcmV0dXJuIHN0YXJ0OwotICAgICAgICBpbnQgaW5kZXggPSBzdGFydCtwbGVuZ3RoOwotICAgICAgICB3aGlsZSAoaW5kZXggPD0gbGltaXQpIHsKLSAgICAgICAgICAgIGludCBwaW5kZXggPSBwbGVuZ3RoOwotICAgICAgICAgICAgaW50IG5pbmRleCA9IGluZGV4KzE7Ci0gICAgICAgICAgICBjaGFyIGNoOwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIGNoYXIgY2gxID0gY2ggPSB0ZXh0LmNoYXJBdCgtLWluZGV4KTsKLSAgICAgICAgICAgICAgICBjaGFyIGNoMiA9IHRoaXMucGF0dGVyblstLXBpbmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKGNoMSAhPSBjaDIpIHsKLSAgICAgICAgICAgICAgICAgICAgY2gxID0gQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKGNoMSk7Ci0gICAgICAgICAgICAgICAgICAgIGNoMiA9IENoYXJhY3Rlci50b1VwcGVyQ2FzZShjaDIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2gxICE9IGNoMiAmJiBDaGFyYWN0ZXIudG9Mb3dlckNhc2UoY2gxKSAhPSBDaGFyYWN0ZXIudG9Mb3dlckNhc2UoY2gyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAocGluZGV4ID09IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgICAgIH0gd2hpbGUgKHBpbmRleCA+IDApOwotICAgICAgICAgICAgaW5kZXggKz0gdGhpcy5zaGlmdFRhYmxlW2NoICUgdGhpcy5zaGlmdFRhYmxlLmxlbmd0aF0rMTsKLSAgICAgICAgICAgIGlmIChpbmRleCA8IG5pbmRleCkgIGluZGV4ID0gbmluZGV4OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgaW50IG1hdGNoZXNJZ25vcmVDYXNlKGNoYXJbXSBjaGFycywgaW50IHN0YXJ0LCBpbnQgbGltaXQpIHsKLSAgICAgICAgaW50IHBsZW5ndGggPSB0aGlzLnBhdHRlcm4ubGVuZ3RoOwotICAgICAgICBpZiAocGxlbmd0aCA9PSAwKSAgcmV0dXJuIHN0YXJ0OwotICAgICAgICBpbnQgaW5kZXggPSBzdGFydCtwbGVuZ3RoOwotICAgICAgICB3aGlsZSAoaW5kZXggPD0gbGltaXQpIHsKLSAgICAgICAgICAgIGludCBwaW5kZXggPSBwbGVuZ3RoOwotICAgICAgICAgICAgaW50IG5pbmRleCA9IGluZGV4KzE7Ci0gICAgICAgICAgICBjaGFyIGNoOwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIGNoYXIgY2gxID0gY2ggPSBjaGFyc1stLWluZGV4XTsKLSAgICAgICAgICAgICAgICBjaGFyIGNoMiA9IHRoaXMucGF0dGVyblstLXBpbmRleF07Ci0gICAgICAgICAgICAgICAgaWYgKGNoMSAhPSBjaDIpIHsKLSAgICAgICAgICAgICAgICAgICAgY2gxID0gQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKGNoMSk7Ci0gICAgICAgICAgICAgICAgICAgIGNoMiA9IENoYXJhY3Rlci50b1VwcGVyQ2FzZShjaDIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2gxICE9IGNoMiAmJiBDaGFyYWN0ZXIudG9Mb3dlckNhc2UoY2gxKSAhPSBDaGFyYWN0ZXIudG9Mb3dlckNhc2UoY2gyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAocGluZGV4ID09IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgICAgIH0gd2hpbGUgKHBpbmRleCA+IDApOwotICAgICAgICAgICAgaW5kZXggKz0gdGhpcy5zaGlmdFRhYmxlW2NoICUgdGhpcy5zaGlmdFRhYmxlLmxlbmd0aF0rMTsKLSAgICAgICAgICAgIGlmIChpbmRleCA8IG5pbmRleCkgIGluZGV4ID0gbmluZGV4OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICAvKgotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3YpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGludFtdIHNoaWZ0VGFibGUgPSBuZXcgaW50WzI1Nl07Ci0gICAgICAgICAgICBpbml0aWFsaXplQm95ZXJNb29yZShhcmd2WzBdLCBzaGlmdFRhYmxlLCB0cnVlKTsKLSAgICAgICAgICAgIGludCBvID0gLTE7Ci0gICAgICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBpdGUgPSBuZXcgamF2YS50ZXh0LlN0cmluZ0NoYXJhY3Rlckl0ZXJhdG9yKGFyZ3ZbMV0pOwotICAgICAgICAgICAgbG9uZyBzdGFydCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgICAgICAgICAgLy9mb3IgKGludCBpID0gMDsgIGkgPCAxMDAwMDsgIGkgKyspCi0gICAgICAgICAgICAgICAgbyA9IHNlYXJjaElnbm9yZUNhc2VzV2l0aEJveWVyTW9vcmUoaXRlLCAwLCBhcmd2WzBdLCBzaGlmdFRhYmxlKTsKLSAgICAgICAgICAgIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCktc3RhcnQ7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3VsdDogIitvKyIsIEVsYXBzZWQ6ICIrc3RhcnQpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICB9Ci0gICAgfSovCi19Ci0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvcmVnZXgvTWF0Y2guamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvcmVnZXgvTWF0Y2guamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRjZjdiYi4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3JlZ2V4L01hdGNoLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjEgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwucmVnZXg7Ci0KLWltcG9ydCBqYXZhLnRleHQuQ2hhcmFjdGVySXRlcmF0b3I7Ci0KLS8qKgotICogCi0gKiBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGhhcyByYW5nZXMgY2FwdHVyZWQgaW4gbWF0Y2hpbmcuCi0gKgotICogQHNlZSBSZWd1bGFyRXhwcmVzc2lvbiNtYXRjaGVzKGNoYXJbXSwgaW50LCBpbnQsIE1hdGNoKQotICogQHNlZSBSZWd1bGFyRXhwcmVzc2lvbiNtYXRjaGVzKGNoYXJbXSwgTWF0Y2gpCi0gKiBAc2VlIFJlZ3VsYXJFeHByZXNzaW9uI21hdGNoZXMoamF2YS50ZXh0LkNoYXJhY3Rlckl0ZXJhdG9yLCBNYXRjaCkKLSAqIEBzZWUgUmVndWxhckV4cHJlc3Npb24jbWF0Y2hlcyhqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGludCwgTWF0Y2gpCi0gKiBAc2VlIFJlZ3VsYXJFeHByZXNzaW9uI21hdGNoZXMoamF2YS5sYW5nLlN0cmluZywgTWF0Y2gpCi0gKiBAYXV0aG9yIFRBTVVSQSBLZW50ICZsdDtrZW50QHRybC5pYm0uY28uanAmZ3Q7Ci0gKi8KLXB1YmxpYyBjbGFzcyBNYXRjaCBpbXBsZW1lbnRzIENsb25lYWJsZSB7Ci0gICAgaW50W10gYmVnaW5wb3MgPSBudWxsOwotICAgIGludFtdIGVuZHBvcyA9IG51bGw7Ci0gICAgaW50IG5vZmdyb3VwcyA9IDA7Ci0KLSAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaVNvdXJjZSA9IG51bGw7Ci0gICAgU3RyaW5nIHN0clNvdXJjZSA9IG51bGw7Ci0gICAgY2hhcltdIGNoYXJTb3VyY2UgPSBudWxsOwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgTWF0Y2goKSB7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIE9iamVjdCBjbG9uZSgpIHsKLSAgICAgICAgTWF0Y2ggbWEgPSBuZXcgTWF0Y2goKTsKLSAgICAgICAgaWYgKHRoaXMubm9mZ3JvdXBzID4gMCkgewotICAgICAgICAgICAgbWEuc2V0TnVtYmVyT2ZHcm91cHModGhpcy5ub2Zncm91cHMpOwotICAgICAgICAgICAgaWYgKHRoaXMuY2lTb3VyY2UgIT0gbnVsbCkgIG1hLnNldFNvdXJjZSh0aGlzLmNpU291cmNlKTsKLSAgICAgICAgICAgIGlmICh0aGlzLnN0clNvdXJjZSAhPSBudWxsKSAgbWEuc2V0U291cmNlKHRoaXMuc3RyU291cmNlKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyAgaSA8IHRoaXMubm9mZ3JvdXBzOyAgaSArKykgewotICAgICAgICAgICAgICAgIG1hLnNldEJlZ2lubmluZyhpLCB0aGlzLmdldEJlZ2lubmluZyhpKSk7Ci0gICAgICAgICAgICAgICAgbWEuc2V0RW5kKGksIHRoaXMuZ2V0RW5kKGkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbWE7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXROdW1iZXJPZkdyb3VwcyhpbnQgbikgewotICAgICAgICBpbnQgb2xkbiA9IHRoaXMubm9mZ3JvdXBzOwotICAgICAgICB0aGlzLm5vZmdyb3VwcyA9IG47Ci0gICAgICAgIGlmIChvbGRuIDw9IDAKLSAgICAgICAgICAgIHx8IG9sZG4gPCBuIHx8IG4qMiA8IG9sZG4pIHsKLSAgICAgICAgICAgIHRoaXMuYmVnaW5wb3MgPSBuZXcgaW50W25dOwotICAgICAgICAgICAgdGhpcy5lbmRwb3MgPSBuZXcgaW50W25dOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyAgaSA8IG47ICBpICsrKSB7Ci0gICAgICAgICAgICB0aGlzLmJlZ2lucG9zW2ldID0gLTE7Ci0gICAgICAgICAgICB0aGlzLmVuZHBvc1tpXSA9IC0xOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRTb3VyY2UoQ2hhcmFjdGVySXRlcmF0b3IgY2kpIHsKLSAgICAgICAgdGhpcy5jaVNvdXJjZSA9IGNpOwotICAgICAgICB0aGlzLnN0clNvdXJjZSA9IG51bGw7Ci0gICAgICAgIHRoaXMuY2hhclNvdXJjZSA9IG51bGw7Ci0gICAgfQotICAgIC8qKgotICAgICAqCi0gICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0U291cmNlKFN0cmluZyBzdHIpIHsKLSAgICAgICAgdGhpcy5jaVNvdXJjZSA9IG51bGw7Ci0gICAgICAgIHRoaXMuc3RyU291cmNlID0gc3RyOwotICAgICAgICB0aGlzLmNoYXJTb3VyY2UgPSBudWxsOwotICAgIH0KLSAgICAvKioKLSAgICAgKgotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIHNldFNvdXJjZShjaGFyW10gY2hhcnMpIHsKLSAgICAgICAgdGhpcy5jaVNvdXJjZSA9IG51bGw7Ci0gICAgICAgIHRoaXMuc3RyU291cmNlID0gbnVsbDsKLSAgICAgICAgdGhpcy5jaGFyU291cmNlID0gY2hhcnM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRCZWdpbm5pbmcoaW50IGluZGV4LCBpbnQgdikgewotICAgICAgICB0aGlzLmJlZ2lucG9zW2luZGV4XSA9IHY7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRFbmQoaW50IGluZGV4LCBpbnQgdikgewotICAgICAgICB0aGlzLmVuZHBvc1tpbmRleF0gPSB2OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbiBncm91cHMuCi0gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyAxIHdoZW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBoYXMgbm8gY2FwdHVyaW5nLXBhcmVudGhlc2lzLgotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0TnVtYmVyT2ZHcm91cHMoKSB7Ci0gICAgICAgIGlmICh0aGlzLm5vZmdyb3VwcyA8PSAwKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQSByZXN1bHQgaXMgbm90IHNldC4iKTsKLSAgICAgICAgcmV0dXJuIHRoaXMubm9mZ3JvdXBzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybiBhIHN0YXJ0IHBvc2l0aW9uIGluIHRoZSB0YXJnZXQgdGV4dCBtYXRjaGVkIHRvIHNwZWNpZmllZCByZWd1bGFyIGV4cHJlc3Npb24gZ3JvdXAuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5kZXggTGVzcyB0aGFuIDxjb2RlPmdldE51bWJlck9mR3JvdXBzKCk8L2NvZGU+LgotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0QmVnaW5uaW5nKGludCBpbmRleCkgewotICAgICAgICBpZiAodGhpcy5iZWdpbnBvcyA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQSByZXN1bHQgaXMgbm90IHNldC4iKTsKLSAgICAgICAgaWYgKGluZGV4IDwgMCB8fCB0aGlzLm5vZmdyb3VwcyA8PSBpbmRleCkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBwYXJhbWV0ZXIgbXVzdCBiZSBsZXNzIHRoYW4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArdGhpcy5ub2Zncm91cHMrIjogIitpbmRleCk7Ci0gICAgICAgIHJldHVybiB0aGlzLmJlZ2lucG9zW2luZGV4XTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm4gYW4gZW5kIHBvc2l0aW9uIGluIHRoZSB0YXJnZXQgdGV4dCBtYXRjaGVkIHRvIHNwZWNpZmllZCByZWd1bGFyIGV4cHJlc3Npb24gZ3JvdXAuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gaW5kZXggTGVzcyB0aGFuIDxjb2RlPmdldE51bWJlck9mR3JvdXBzKCk8L2NvZGU+LgotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0RW5kKGludCBpbmRleCkgewotICAgICAgICBpZiAodGhpcy5lbmRwb3MgPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkEgcmVzdWx0IGlzIG5vdCBzZXQuIik7Ci0gICAgICAgIGlmIChpbmRleCA8IDAgfHwgdGhpcy5ub2Zncm91cHMgPD0gaW5kZXgpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgcGFyYW1ldGVyIG11c3QgYmUgbGVzcyB0aGFuICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3RoaXMubm9mZ3JvdXBzKyI6ICIraW5kZXgpOwotICAgICAgICByZXR1cm4gdGhpcy5lbmRwb3NbaW5kZXhdOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybiBhbiBzdWJzdHJpbmcgb2YgdGhlIHRhcmdldCB0ZXh0IG1hdGNoZWQgdG8gc3BlY2lmaWVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBncm91cC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBpbmRleCBMZXNzIHRoYW4gPGNvZGU+Z2V0TnVtYmVyT2ZHcm91cHMoKTwvY29kZT4uCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRDYXB0dXJlZFRleHQoaW50IGluZGV4KSB7Ci0gICAgICAgIGlmICh0aGlzLmJlZ2lucG9zID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJtYXRjaCgpIGhhcyBuZXZlciBiZWVuIGNhbGxlZC4iKTsKLSAgICAgICAgaWYgKGluZGV4IDwgMCB8fCB0aGlzLm5vZmdyb3VwcyA8PSBpbmRleCkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlRoZSBwYXJhbWV0ZXIgbXVzdCBiZSBsZXNzIHRoYW4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArdGhpcy5ub2Zncm91cHMrIjogIitpbmRleCk7Ci0gICAgICAgIFN0cmluZyByZXQ7Ci0gICAgICAgIGludCBiZWdpbiA9IHRoaXMuYmVnaW5wb3NbaW5kZXhdLCBlbmQgPSB0aGlzLmVuZHBvc1tpbmRleF07Ci0gICAgICAgIGlmIChiZWdpbiA8IDAgfHwgZW5kIDwgMCkgIHJldHVybiBudWxsOwotICAgICAgICBpZiAodGhpcy5jaVNvdXJjZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXQgPSBSRVV0aWwuc3Vic3RyaW5nKHRoaXMuY2lTb3VyY2UsIGJlZ2luLCBlbmQpOwotICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RyU291cmNlICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldCA9IHRoaXMuc3RyU291cmNlLnN1YnN0cmluZyhiZWdpbiwgZW5kKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldCA9IG5ldyBTdHJpbmcodGhpcy5jaGFyU291cmNlLCBiZWdpbiwgZW5kLWJlZ2luKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvcmVnZXgvT3AuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvcmVnZXgvT3AuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI4MjAzMi4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3JlZ2V4L09wLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODggKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwucmVnZXg7Ci0KLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi0vKioKLSAqLwotY2xhc3MgT3AgewotICAgIHN0YXRpYyBmaW5hbCBpbnQgRE9UID0gMDsKLSAgICBzdGF0aWMgZmluYWwgaW50IENIQVIgPSAxOyAgICAgICAgICAgICAgICAgIC8vIFNpbmdsZSBjaGFyYWN0ZXIKLSAgICBzdGF0aWMgZmluYWwgaW50IFJBTkdFID0gMzsgICAgICAgICAgICAgICAgIC8vIFthLXpBLVpdCi0gICAgc3RhdGljIGZpbmFsIGludCBOUkFOR0UgPSA0OyAgICAgICAgICAgICAgICAvLyBbXmEtekEtWl0KLSAgICBzdGF0aWMgZmluYWwgaW50IEFOQ0hPUiA9IDU7ICAgICAgICAgICAgICAgIC8vIF4gJCAuLi4KLSAgICBzdGF0aWMgZmluYWwgaW50IFNUUklORyA9IDY7ICAgICAgICAgICAgICAgIC8vIGxpdGVyYWwgU3RyaW5nIAotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ0xPU1VSRSA9IDc7ICAgICAgICAgICAgICAgLy8gWCoKLSAgICBzdGF0aWMgZmluYWwgaW50IE5PTkdSRUVEWUNMT1NVUkUgPSA4OyAgICAgIC8vIFgqPwotICAgIHN0YXRpYyBmaW5hbCBpbnQgUVVFU1RJT04gPSA5OyAgICAgICAgICAgICAgLy8gWD8KLSAgICBzdGF0aWMgZmluYWwgaW50IE5PTkdSRUVEWVFVRVNUSU9OID0gMTA7ICAgIC8vIFg/PwotICAgIHN0YXRpYyBmaW5hbCBpbnQgVU5JT04gPSAxMTsgICAgICAgICAgICAgICAgLy8gWHxZCi0gICAgc3RhdGljIGZpbmFsIGludCBDQVBUVVJFID0gMTU7ICAgICAgICAgICAgICAvLyAoIGFuZCApCi0gICAgc3RhdGljIGZpbmFsIGludCBCQUNLUkVGRVJFTkNFID0gMTY7ICAgICAgICAvLyBcMSBcMiAuLi4KLSAgICBzdGF0aWMgZmluYWwgaW50IExPT0tBSEVBRCA9IDIwOyAgICAgICAgICAgIC8vICg/PS4uLikKLSAgICBzdGF0aWMgZmluYWwgaW50IE5FR0FUSVZFTE9PS0FIRUFEID0gMjE7ICAgIC8vICg/IS4uLikKLSAgICBzdGF0aWMgZmluYWwgaW50IExPT0tCRUhJTkQgPSAyMjsgICAgICAgICAgIC8vICg/PD0uLi4pCi0gICAgc3RhdGljIGZpbmFsIGludCBORUdBVElWRUxPT0tCRUhJTkQgPSAyMzsgICAvLyAoPzwhLi4uKQotICAgIHN0YXRpYyBmaW5hbCBpbnQgSU5ERVBFTkRFTlQgPSAyNDsgICAgICAgICAgLy8gKD8+Li4uKQotICAgIHN0YXRpYyBmaW5hbCBpbnQgTU9ESUZJRVIgPSAyNTsgICAgICAgICAgICAgLy8gKD9pbXMtaW1zOi4uLikKLSAgICBzdGF0aWMgZmluYWwgaW50IENPTkRJVElPTiA9IDI2OyAgICAgICAgICAgIC8vICg/KC4uKXllc3xubykKLQotICAgIHN0YXRpYyBpbnQgbm9maW5zdGFuY2VzID0gMDsKLSAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBDT1VOVCA9IGZhbHNlOwotCi0gICAgc3RhdGljIE9wIGNyZWF0ZURvdCgpIHsKLSAgICAgICAgaWYgKE9wLkNPVU5UKSAgT3Aubm9maW5zdGFuY2VzICsrOwotICAgICAgICByZXR1cm4gbmV3IE9wKE9wLkRPVCk7Ci0gICAgfQotICAgIHN0YXRpYyBDaGFyT3AgY3JlYXRlQ2hhcihpbnQgZGF0YSkgewotICAgICAgICBpZiAoT3AuQ09VTlQpICBPcC5ub2ZpbnN0YW5jZXMgKys7Ci0gICAgICAgIHJldHVybiBuZXcgQ2hhck9wKE9wLkNIQVIsIGRhdGEpOwotICAgIH0KLSAgICBzdGF0aWMgQ2hhck9wIGNyZWF0ZUFuY2hvcihpbnQgZGF0YSkgewotICAgICAgICBpZiAoT3AuQ09VTlQpICBPcC5ub2ZpbnN0YW5jZXMgKys7Ci0gICAgICAgIHJldHVybiBuZXcgQ2hhck9wKE9wLkFOQ0hPUiwgZGF0YSk7Ci0gICAgfQotICAgIHN0YXRpYyBDaGFyT3AgY3JlYXRlQ2FwdHVyZShpbnQgbnVtYmVyLCBPcCBuZXh0KSB7Ci0gICAgICAgIGlmIChPcC5DT1VOVCkgIE9wLm5vZmluc3RhbmNlcyArKzsKLSAgICAgICAgQ2hhck9wIG9wID0gbmV3IENoYXJPcChPcC5DQVBUVVJFLCBudW1iZXIpOwotICAgICAgICBvcC5uZXh0ID0gbmV4dDsKLSAgICAgICAgcmV0dXJuIG9wOwotICAgIH0KLSAgICBzdGF0aWMgVW5pb25PcCBjcmVhdGVVbmlvbihpbnQgc2l6ZSkgewotICAgICAgICBpZiAoT3AuQ09VTlQpICBPcC5ub2ZpbnN0YW5jZXMgKys7Ci0gICAgICAgIC8vU3lzdGVtLmVyci5wcmludGxuKCJDcmVhdGVzIFVuaW9uT3AiKTsKLSAgICAgICAgcmV0dXJuIG5ldyBVbmlvbk9wKE9wLlVOSU9OLCBzaXplKTsKLSAgICB9Ci0gICAgc3RhdGljIENoaWxkT3AgY3JlYXRlQ2xvc3VyZShpbnQgaWQpIHsKLSAgICAgICAgaWYgKE9wLkNPVU5UKSAgT3Aubm9maW5zdGFuY2VzICsrOwotICAgICAgICByZXR1cm4gbmV3IE1vZGlmaWVyT3AoT3AuQ0xPU1VSRSwgaWQsIC0xKTsKLSAgICB9Ci0gICAgc3RhdGljIENoaWxkT3AgY3JlYXRlTm9uR3JlZWR5Q2xvc3VyZSgpIHsKLSAgICAgICAgaWYgKE9wLkNPVU5UKSAgT3Aubm9maW5zdGFuY2VzICsrOwotICAgICAgICByZXR1cm4gbmV3IENoaWxkT3AoT3AuTk9OR1JFRURZQ0xPU1VSRSk7Ci0gICAgfQotICAgIHN0YXRpYyBDaGlsZE9wIGNyZWF0ZVF1ZXN0aW9uKGJvb2xlYW4gbm9uZ3JlZWR5KSB7Ci0gICAgICAgIGlmIChPcC5DT1VOVCkgIE9wLm5vZmluc3RhbmNlcyArKzsKLSAgICAgICAgcmV0dXJuIG5ldyBDaGlsZE9wKG5vbmdyZWVkeSA/IE9wLk5PTkdSRUVEWVFVRVNUSU9OIDogT3AuUVVFU1RJT04pOwotICAgIH0KLSAgICBzdGF0aWMgUmFuZ2VPcCBjcmVhdGVSYW5nZShUb2tlbiB0b2spIHsKLSAgICAgICAgaWYgKE9wLkNPVU5UKSAgT3Aubm9maW5zdGFuY2VzICsrOwotICAgICAgICByZXR1cm4gbmV3IFJhbmdlT3AoT3AuUkFOR0UsIHRvayk7Ci0gICAgfQotICAgIHN0YXRpYyBDaGlsZE9wIGNyZWF0ZUxvb2soaW50IHR5cGUsIE9wIG5leHQsIE9wIGJyYW5jaCkgewotICAgICAgICBpZiAoT3AuQ09VTlQpICBPcC5ub2ZpbnN0YW5jZXMgKys7Ci0gICAgICAgIENoaWxkT3Agb3AgPSBuZXcgQ2hpbGRPcCh0eXBlKTsKLSAgICAgICAgb3Auc2V0Q2hpbGQoYnJhbmNoKTsKLSAgICAgICAgb3AubmV4dCA9IG5leHQ7Ci0gICAgICAgIHJldHVybiBvcDsKLSAgICB9Ci0gICAgc3RhdGljIENoYXJPcCBjcmVhdGVCYWNrUmVmZXJlbmNlKGludCByZWZubykgewotICAgICAgICBpZiAoT3AuQ09VTlQpICBPcC5ub2ZpbnN0YW5jZXMgKys7Ci0gICAgICAgIHJldHVybiBuZXcgQ2hhck9wKE9wLkJBQ0tSRUZFUkVOQ0UsIHJlZm5vKTsKLSAgICB9Ci0gICAgc3RhdGljIFN0cmluZ09wIGNyZWF0ZVN0cmluZyhTdHJpbmcgbGl0ZXJhbCkgewotICAgICAgICBpZiAoT3AuQ09VTlQpICBPcC5ub2ZpbnN0YW5jZXMgKys7Ci0gICAgICAgIHJldHVybiBuZXcgU3RyaW5nT3AoT3AuU1RSSU5HLCBsaXRlcmFsKTsKLSAgICB9Ci0gICAgc3RhdGljIENoaWxkT3AgY3JlYXRlSW5kZXBlbmRlbnQoT3AgbmV4dCwgT3AgYnJhbmNoKSB7Ci0gICAgICAgIGlmIChPcC5DT1VOVCkgIE9wLm5vZmluc3RhbmNlcyArKzsKLSAgICAgICAgQ2hpbGRPcCBvcCA9IG5ldyBDaGlsZE9wKE9wLklOREVQRU5ERU5UKTsKLSAgICAgICAgb3Auc2V0Q2hpbGQoYnJhbmNoKTsKLSAgICAgICAgb3AubmV4dCA9IG5leHQ7Ci0gICAgICAgIHJldHVybiBvcDsKLSAgICB9Ci0gICAgc3RhdGljIE1vZGlmaWVyT3AgY3JlYXRlTW9kaWZpZXIoT3AgbmV4dCwgT3AgYnJhbmNoLCBpbnQgYWRkLCBpbnQgbWFzaykgewotICAgICAgICBpZiAoT3AuQ09VTlQpICBPcC5ub2ZpbnN0YW5jZXMgKys7Ci0gICAgICAgIE1vZGlmaWVyT3Agb3AgPSBuZXcgTW9kaWZpZXJPcChPcC5NT0RJRklFUiwgYWRkLCBtYXNrKTsKLSAgICAgICAgb3Auc2V0Q2hpbGQoYnJhbmNoKTsKLSAgICAgICAgb3AubmV4dCA9IG5leHQ7Ci0gICAgICAgIHJldHVybiBvcDsKLSAgICB9Ci0gICAgc3RhdGljIENvbmRpdGlvbk9wIGNyZWF0ZUNvbmRpdGlvbihPcCBuZXh0LCBpbnQgcmVmLCBPcCBjb25kaXRpb25mbG93LCBPcCB5ZXNmbG93LCBPcCBub2Zsb3cpIHsKLSAgICAgICAgaWYgKE9wLkNPVU5UKSAgT3Aubm9maW5zdGFuY2VzICsrOwotICAgICAgICBDb25kaXRpb25PcCBvcCA9IG5ldyBDb25kaXRpb25PcChPcC5DT05ESVRJT04sIHJlZiwgY29uZGl0aW9uZmxvdywgeWVzZmxvdywgbm9mbG93KTsKLSAgICAgICAgb3AubmV4dCA9IG5leHQ7Ci0gICAgICAgIHJldHVybiBvcDsKLSAgICB9Ci0KLSAgICBpbnQgdHlwZTsKLSAgICBPcCBuZXh0ID0gbnVsbDsKLQotICAgIHByb3RlY3RlZCBPcChpbnQgdHlwZSkgewotICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOwotICAgIH0KLQotICAgIGludCBzaXplKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIFVOSU9OCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBPcCBlbGVtZW50QXQoaW50IGluZGV4KSB7ICAgICAgICAgICAgICAgICAgIC8vIGZvciBVTklvTgotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW50ZXJuYWwgRXJyb3I6IHR5cGU9Iit0aGlzLnR5cGUpOwotICAgIH0KLSAgICBPcCBnZXRDaGlsZCgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBDTE9TVVJFLCBRVUVTVElPTgotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW50ZXJuYWwgRXJyb3I6IHR5cGU9Iit0aGlzLnR5cGUpOwotICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1vZGlmaWVyT3AKLSAgICBpbnQgZ2V0RGF0YSgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoYXJPcCAgZm9yIENIQVIsIEJBQ0tSRUZFUkVOQ0UsIENBUFRVUkUsIEFOQ0hPUiwgCi0gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbnRlcm5hbCBFcnJvcjogdHlwZT0iK3RoaXMudHlwZSk7Ci0gICAgfQotICAgIGludCBnZXREYXRhMigpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW9kaWZpZXJPcAotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW50ZXJuYWwgRXJyb3I6IHR5cGU9Iit0aGlzLnR5cGUpOwotICAgIH0KLSAgICBSYW5nZVRva2VuIGdldFRva2VuKCkgeyAgICAgICAgICAgICAgICAgICAgIC8vIFJBTkdFLCBOUkFOR0UKLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkludGVybmFsIEVycm9yOiB0eXBlPSIrdGhpcy50eXBlKTsKLSAgICB9Ci0gICAgU3RyaW5nIGdldFN0cmluZygpIHsgICAgICAgICAgICAgICAgICAgICAgICAvLyBTVFJJTkcKLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkludGVybmFsIEVycm9yOiB0eXBlPSIrdGhpcy50eXBlKTsKLSAgICB9Ci0KLSAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgc3RhdGljIGNsYXNzIENoYXJPcCBleHRlbmRzIE9wIHsKLSAgICAgICAgaW50IGNoYXJEYXRhOwotICAgICAgICBDaGFyT3AoaW50IHR5cGUsIGludCBkYXRhKSB7Ci0gICAgICAgICAgICBzdXBlcih0eXBlKTsKLSAgICAgICAgICAgIHRoaXMuY2hhckRhdGEgPSBkYXRhOwotICAgICAgICB9Ci0gICAgICAgIGludCBnZXREYXRhKCkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hhckRhdGE7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgc3RhdGljIGNsYXNzIFVuaW9uT3AgZXh0ZW5kcyBPcCB7Ci0gICAgICAgIFZlY3RvciBicmFuY2hlczsKLSAgICAgICAgVW5pb25PcChpbnQgdHlwZSwgaW50IHNpemUpIHsKLSAgICAgICAgICAgIHN1cGVyKHR5cGUpOwotICAgICAgICAgICAgdGhpcy5icmFuY2hlcyA9IG5ldyBWZWN0b3Ioc2l6ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBhZGRFbGVtZW50KE9wIG9wKSB7Ci0gICAgICAgICAgICB0aGlzLmJyYW5jaGVzLmFkZEVsZW1lbnQob3ApOwotICAgICAgICB9Ci0gICAgICAgIGludCBzaXplKCkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnJhbmNoZXMuc2l6ZSgpOwotICAgICAgICB9Ci0gICAgICAgIE9wIGVsZW1lbnRBdChpbnQgaW5kZXgpIHsKLSAgICAgICAgICAgIHJldHVybiAoT3ApdGhpcy5icmFuY2hlcy5lbGVtZW50QXQoaW5kZXgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIHN0YXRpYyBjbGFzcyBDaGlsZE9wIGV4dGVuZHMgT3AgewotICAgICAgICBPcCBjaGlsZDsKLSAgICAgICAgQ2hpbGRPcChpbnQgdHlwZSkgewotICAgICAgICAgICAgc3VwZXIodHlwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBzZXRDaGlsZChPcCBjaGlsZCkgewotICAgICAgICAgICAgdGhpcy5jaGlsZCA9IGNoaWxkOwotICAgICAgICB9Ci0gICAgICAgIE9wIGdldENoaWxkKCkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIHN0YXRpYyBjbGFzcyBNb2RpZmllck9wIGV4dGVuZHMgQ2hpbGRPcCB7Ci0gICAgICAgIGludCB2MTsKLSAgICAgICAgaW50IHYyOwotICAgICAgICBNb2RpZmllck9wKGludCB0eXBlLCBpbnQgdjEsIGludCB2MikgewotICAgICAgICAgICAgc3VwZXIodHlwZSk7Ci0gICAgICAgICAgICB0aGlzLnYxID0gdjE7Ci0gICAgICAgICAgICB0aGlzLnYyID0gdjI7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGdldERhdGEoKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy52MTsKLSAgICAgICAgfQotICAgICAgICBpbnQgZ2V0RGF0YTIoKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy52MjsKLSAgICAgICAgfQotICAgIH0KLSAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgc3RhdGljIGNsYXNzIFJhbmdlT3AgZXh0ZW5kcyBPcCB7Ci0gICAgICAgIFRva2VuIHRvazsKLSAgICAgICAgUmFuZ2VPcChpbnQgdHlwZSwgVG9rZW4gdG9rKSB7Ci0gICAgICAgICAgICBzdXBlcih0eXBlKTsKLSAgICAgICAgICAgIHRoaXMudG9rID0gdG9rOwotICAgICAgICB9Ci0gICAgICAgIFJhbmdlVG9rZW4gZ2V0VG9rZW4oKSB7Ci0gICAgICAgICAgICByZXR1cm4gKFJhbmdlVG9rZW4pdGhpcy50b2s7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIHN0YXRpYyBjbGFzcyBTdHJpbmdPcCBleHRlbmRzIE9wIHsKLSAgICAgICAgU3RyaW5nIHN0cmluZzsKLSAgICAgICAgU3RyaW5nT3AoaW50IHR5cGUsIFN0cmluZyBsaXRlcmFsKSB7Ci0gICAgICAgICAgICBzdXBlcih0eXBlKTsKLSAgICAgICAgICAgIHRoaXMuc3RyaW5nID0gbGl0ZXJhbDsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgZ2V0U3RyaW5nKCkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nOwotICAgICAgICB9Ci0gICAgfQotICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICBzdGF0aWMgY2xhc3MgQ29uZGl0aW9uT3AgZXh0ZW5kcyBPcCB7Ci0gICAgICAgIGludCByZWZOdW1iZXI7Ci0gICAgICAgIE9wIGNvbmRpdGlvbjsKLSAgICAgICAgT3AgeWVzOwotICAgICAgICBPcCBubzsKLSAgICAgICAgQ29uZGl0aW9uT3AoaW50IHR5cGUsIGludCByZWZubywgT3AgY29uZGl0aW9uZmxvdywgT3AgeWVzZmxvdywgT3Agbm9mbG93KSB7Ci0gICAgICAgICAgICBzdXBlcih0eXBlKTsKLSAgICAgICAgICAgIHRoaXMucmVmTnVtYmVyID0gcmVmbm87Ci0gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbiA9IGNvbmRpdGlvbmZsb3c7Ci0gICAgICAgICAgICB0aGlzLnllcyA9IHllc2Zsb3c7Ci0gICAgICAgICAgICB0aGlzLm5vID0gbm9mbG93OwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9yZWdleC9QYXJzZUV4Y2VwdGlvbi5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9yZWdleC9QYXJzZUV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTQxYWIzLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvcmVnZXgvUGFyc2VFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnJlZ2V4OwotCi0vKioKLSAqCi0gKiBAYXV0aG9yIFRBTVVSQSBLZW50ICZsdDtrZW50QHRybC5pYm0uY28uanAmZ3Q7Ci0gKi8KLXB1YmxpYyBjbGFzcyBQYXJzZUV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24gewotICAgIGludCBsb2NhdGlvbjsKLQotICAgIC8qCi0gICAgcHVibGljIFBhcnNlRXhjZXB0aW9uKFN0cmluZyBtZXMpIHsKLSAgICAgICAgdGhpcyhtZXMsIC0xKTsKLSAgICB9Ci0gICAgKi8KLSAgICAvKioKLSAgICAgKgotICAgICAqLwotICAgIHB1YmxpYyBQYXJzZUV4Y2VwdGlvbihTdHJpbmcgbWVzLCBpbnQgbG9jYXRpb24pIHsKLSAgICAgICAgc3VwZXIobWVzKTsKLSAgICAgICAgdGhpcy5sb2NhdGlvbiA9IGxvY2F0aW9uOwotICAgIH0KLQotICAgIC8qKgotICAgICAqCi0gICAgICogQHJldHVybiAtMSBpZiBsb2NhdGlvbiBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlLgotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0TG9jYXRpb24oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmxvY2F0aW9uOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvcmVnZXgvUGFyc2VyRm9yWE1MU2NoZW1hLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3JlZ2V4L1BhcnNlckZvclhNTFNjaGVtYS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmU5YjY1Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvcmVnZXgvUGFyc2VyRm9yWE1MU2NoZW1hLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MDMgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwucmVnZXg7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7Ci0KLS8qKgotICogQSByZWd1bGFyIGV4cHJlc3Npb24gcGFyc2VyIGZvciB0aGUgWE1MIFNoZW1hLgotICoKLSAqIEBhdXRob3IgVEFNVVJBIEtlbnQgJmx0O2tlbnRAdHJsLmlibS5jby5qcCZndDsKLSAqLwotY2xhc3MgUGFyc2VyRm9yWE1MU2NoZW1hIGV4dGVuZHMgUmVnZXhQYXJzZXIgewotCi0gICAgcHVibGljIFBhcnNlckZvclhNTFNjaGVtYSgpIHsKLSAgICAgICAgLy90aGlzLnNldExvY2FsZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKLSAgICB9Ci0gICAgcHVibGljIFBhcnNlckZvclhNTFNjaGVtYShMb2NhbGUgbG9jYWxlKSB7Ci0gICAgICAgIC8vdGhpcy5zZXRMb2NhbGUobG9jYWxlKTsKLSAgICB9Ci0KLSAgICBUb2tlbiBwcm9jZXNzQ2FyZXQoKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICB0aGlzLm5leHQoKTsKLSAgICAgICAgcmV0dXJuIFRva2VuLmNyZWF0ZUNoYXIoJ14nKTsKLSAgICB9Ci0gICAgVG9rZW4gcHJvY2Vzc0RvbGxhcigpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICByZXR1cm4gVG9rZW4uY3JlYXRlQ2hhcignJCcpOwotICAgICB9Ci0gICAgVG9rZW4gcHJvY2Vzc0xvb2thaGVhZCgpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRocm93IGV4KCJwYXJzZXIucHJvY2Vzcy4xIiwgdGhpcy5vZmZzZXQpOwotICAgIH0KLSAgICBUb2tlbiBwcm9jZXNzTmVnYXRpdmVsb29rYWhlYWQoKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICB0aHJvdyBleCgicGFyc2VyLnByb2Nlc3MuMSIsIHRoaXMub2Zmc2V0KTsKLSAgICB9Ci0gICAgVG9rZW4gcHJvY2Vzc0xvb2tiZWhpbmQoKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICB0aHJvdyBleCgicGFyc2VyLnByb2Nlc3MuMSIsIHRoaXMub2Zmc2V0KTsKLSAgICB9Ci0gICAgVG9rZW4gcHJvY2Vzc05lZ2F0aXZlbG9va2JlaGluZCgpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRocm93IGV4KCJwYXJzZXIucHJvY2Vzcy4xIiwgdGhpcy5vZmZzZXQpOwotICAgIH0KLSAgICBUb2tlbiBwcm9jZXNzQmFja3NvbGlkdXNfQSgpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRocm93IGV4KCJwYXJzZXIucHJvY2Vzcy4xIiwgdGhpcy5vZmZzZXQpOwotICAgIH0KLSAgICBUb2tlbiBwcm9jZXNzQmFja3NvbGlkdXNfWigpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRocm93IGV4KCJwYXJzZXIucHJvY2Vzcy4xIiwgdGhpcy5vZmZzZXQpOwotICAgIH0KLSAgICBUb2tlbiBwcm9jZXNzQmFja3NvbGlkdXNfeigpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRocm93IGV4KCJwYXJzZXIucHJvY2Vzcy4xIiwgdGhpcy5vZmZzZXQpOwotICAgIH0KLSAgICBUb2tlbiBwcm9jZXNzQmFja3NvbGlkdXNfYigpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRocm93IGV4KCJwYXJzZXIucHJvY2Vzcy4xIiwgdGhpcy5vZmZzZXQpOwotICAgIH0KLSAgICBUb2tlbiBwcm9jZXNzQmFja3NvbGlkdXNfQigpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRocm93IGV4KCJwYXJzZXIucHJvY2Vzcy4xIiwgdGhpcy5vZmZzZXQpOwotICAgIH0KLSAgICBUb2tlbiBwcm9jZXNzQmFja3NvbGlkdXNfbHQoKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICB0aHJvdyBleCgicGFyc2VyLnByb2Nlc3MuMSIsIHRoaXMub2Zmc2V0KTsKLSAgICB9Ci0gICAgVG9rZW4gcHJvY2Vzc0JhY2tzb2xpZHVzX2d0KCkgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKLSAgICAgICAgdGhyb3cgZXgoInBhcnNlci5wcm9jZXNzLjEiLCB0aGlzLm9mZnNldCk7Ci0gICAgfQotICAgIFRva2VuIHByb2Nlc3NTdGFyKFRva2VuIHRvaykgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKLSAgICAgICAgdGhpcy5uZXh0KCk7Ci0gICAgICAgIHJldHVybiBUb2tlbi5jcmVhdGVDbG9zdXJlKHRvayk7Ci0gICAgfQotICAgIFRva2VuIHByb2Nlc3NQbHVzKFRva2VuIHRvaykgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gWCsgLT4gWFgqCi0gICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICByZXR1cm4gVG9rZW4uY3JlYXRlQ29uY2F0KHRvaywgVG9rZW4uY3JlYXRlQ2xvc3VyZSh0b2spKTsKLSAgICB9Ci0gICAgVG9rZW4gcHJvY2Vzc1F1ZXN0aW9uKFRva2VuIHRvaykgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gWD8gLT4gWHwKLSAgICAgICAgdGhpcy5uZXh0KCk7Ci0gICAgICAgIFRva2VuIHBhciA9IFRva2VuLmNyZWF0ZVVuaW9uKCk7Ci0gICAgICAgIHBhci5hZGRDaGlsZCh0b2spOwotICAgICAgICBwYXIuYWRkQ2hpbGQoVG9rZW4uY3JlYXRlRW1wdHkoKSk7Ci0gICAgICAgIHJldHVybiBwYXI7Ci0gICAgfQotICAgIGJvb2xlYW4gY2hlY2tRdWVzdGlvbihpbnQgb2ZmKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgVG9rZW4gcHJvY2Vzc1BhcmVuKCkgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKLSAgICAgICAgdGhpcy5uZXh0KCk7Ci0gICAgICAgIFRva2VuIHRvayA9IFRva2VuLmNyZWF0ZVBhcmVuKHRoaXMucGFyc2VSZWdleCgpLCAwKTsKLSAgICAgICAgaWYgKHRoaXMucmVhZCgpICE9IHN1cGVyLlRfUlBBUkVOKSAgdGhyb3cgZXgoInBhcnNlci5mYWN0b3IuMSIsIHRoaXMub2Zmc2V0LTEpOwotICAgICAgICB0aGlzLm5leHQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2tpcHMgJyknCi0gICAgICAgIHJldHVybiB0b2s7Ci0gICAgfQotICAgIFRva2VuIHByb2Nlc3NQYXJlbjIoKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICB0aHJvdyBleCgicGFyc2VyLnByb2Nlc3MuMSIsIHRoaXMub2Zmc2V0KTsKLSAgICB9Ci0gICAgVG9rZW4gcHJvY2Vzc0NvbmRpdGlvbigpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRocm93IGV4KCJwYXJzZXIucHJvY2Vzcy4xIiwgdGhpcy5vZmZzZXQpOwotICAgIH0KLSAgICBUb2tlbiBwcm9jZXNzTW9kaWZpZXJzKCkgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKLSAgICAgICAgdGhyb3cgZXgoInBhcnNlci5wcm9jZXNzLjEiLCB0aGlzLm9mZnNldCk7Ci0gICAgfQotICAgIFRva2VuIHByb2Nlc3NJbmRlcGVuZGVudCgpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRocm93IGV4KCJwYXJzZXIucHJvY2Vzcy4xIiwgdGhpcy5vZmZzZXQpOwotICAgIH0KLSAgICBUb2tlbiBwcm9jZXNzQmFja3NvbGlkdXNfYygpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICByZXR1cm4gdGhpcy5nZXRUb2tlbkZvclNob3J0aGFuZCgnYycpOwotICAgIH0KLSAgICBUb2tlbiBwcm9jZXNzQmFja3NvbGlkdXNfQygpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICByZXR1cm4gdGhpcy5nZXRUb2tlbkZvclNob3J0aGFuZCgnQycpOwotICAgIH0KLSAgICBUb2tlbiBwcm9jZXNzQmFja3NvbGlkdXNfaSgpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICByZXR1cm4gdGhpcy5nZXRUb2tlbkZvclNob3J0aGFuZCgnaScpOwotICAgIH0KLSAgICBUb2tlbiBwcm9jZXNzQmFja3NvbGlkdXNfSSgpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICByZXR1cm4gdGhpcy5nZXRUb2tlbkZvclNob3J0aGFuZCgnSScpOwotICAgIH0KLSAgICBUb2tlbiBwcm9jZXNzQmFja3NvbGlkdXNfZygpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRocm93IHRoaXMuZXgoInBhcnNlci5wcm9jZXNzLjEiLCB0aGlzLm9mZnNldC0yKTsKLSAgICB9Ci0gICAgVG9rZW4gcHJvY2Vzc0JhY2tzb2xpZHVzX1goKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICB0aHJvdyBleCgicGFyc2VyLnByb2Nlc3MuMSIsIHRoaXMub2Zmc2V0LTIpOwotICAgIH0KLSAgICBUb2tlbiBwcm9jZXNzQmFja3JlZmVyZW5jZSgpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRocm93IGV4KCJwYXJzZXIucHJvY2Vzcy4xIiwgdGhpcy5vZmZzZXQtNCk7Ci0gICAgfQotCi0gICAgaW50IHByb2Nlc3NDSWluQ2hhcmFjdGVyQ2xhc3MoUmFuZ2VUb2tlbiB0b2ssIGludCBjKSB7Ci0gICAgICAgIHRvay5tZXJnZVJhbmdlcyh0aGlzLmdldFRva2VuRm9yU2hvcnRoYW5kKGMpKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogUGFyc2VzIGEgY2hhcmFjdGVyLWNsYXNzLWV4cHJlc3Npb24sIG5vdCBhIGNoYXJhY3Rlci1jbGFzcy1lc2NhcGUuCi0gICAgICoKLSAgICAgKiBjLWMtZXhwcmVzc2lvbiAgIDo6PSAnWycgYy1ncm91cCAnXScKLSAgICAgKiBjLWdyb3VwICAgICAgICAgIDo6PSBwb3NpdGl2ZS1jLWdyb3VwIHwgbmVnYXRpdmUtYy1ncm91cCB8IGMtYy1zdWJ0cmFjdGlvbgotICAgICAqIHBvc2l0aXZlLWMtZ3JvdXAgOjo9IChjLXJhbmdlIHwgYy1jLWVzY2FwZSkrCi0gICAgICogbmVnYXRpdmUtYy1ncm91cCA6Oj0gJ14nIHBvc2l0aXZlLWMtZ3JvdXAKLSAgICAgKiBjLWMtc3VidHJhY3Rpb24gIDo6PSAocG9zaXRpdmUtYy1ncm91cCB8IG5lZ2F0aXZlLWMtZ3JvdXApIHN1YnRyYWN0aW9uCi0gICAgICogc3VidHJhY3Rpb24gICAgICA6Oj0gJy0nIGMtYy1leHByZXNzaW9uCi0gICAgICogYy1yYW5nZSAgICAgICAgICA6Oj0gc2luZ2xlLXJhbmdlIHwgZnJvbS10by1yYW5nZQotICAgICAqIHNpbmdsZS1yYW5nZSAgICAgOjo9IG11bHRpLWMtZXNjYXBlIHwgY2F0ZWdvcnktYy1lc2NhcGUgfCBibG9jay1jLWVzY2FwZSB8IDxhbnkgWE1MIGNoYXI+Ci0gICAgICogY2Mtbm9ybWFsLWMgICAgICA6Oj0gPGFueSBjaGFyYWN0ZXIgZXhjZXB0IFssIF0sIFw+Ci0gICAgICogZnJvbS10by1yYW5nZSAgICA6Oj0gY2Mtbm9ybWFsLWMgJy0nIGNjLW5vcm1hbC1jCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdXNlTnJhZ2UgSWdub3JlZC4KLSAgICAgKiBAcmV0dXJuIFRoaXMgcmV0dXJucyBubyBOcmFnZVRva2VuLgotICAgICAqLwotICAgIHByb3RlY3RlZCBSYW5nZVRva2VuIHBhcnNlQ2hhcmFjdGVyQ2xhc3MoYm9vbGVhbiB1c2VOcmFuZ2UpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRoaXMuc2V0Q29udGV4dChTX0lOQlJBQ0tFVFMpOwotICAgICAgICB0aGlzLm5leHQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ1snCi0gICAgICAgIGJvb2xlYW4gbnJhbmdlID0gZmFsc2U7Ci0gICAgICAgIFJhbmdlVG9rZW4gYmFzZSA9IG51bGw7Ci0gICAgICAgIFJhbmdlVG9rZW4gdG9rOwotICAgICAgICBpZiAodGhpcy5yZWFkKCkgPT0gVF9DSEFSICYmIHRoaXMuY2hhcmRhdGEgPT0gJ14nKSB7Ci0gICAgICAgICAgICBucmFuZ2UgPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5uZXh0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ14nCi0gICAgICAgICAgICBiYXNlID0gVG9rZW4uY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgICAgIGJhc2UuYWRkUmFuZ2UoMCwgVG9rZW4uVVRGMTZfTUFYKTsKLSAgICAgICAgICAgIHRvayA9IFRva2VuLmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0b2sgPSBUb2tlbi5jcmVhdGVSYW5nZSgpOwotICAgICAgICB9Ci0gICAgICAgIGludCB0eXBlOwotICAgICAgICBib29sZWFuIGZpcnN0bG9vcCA9IHRydWU7Ci0gICAgICAgIHdoaWxlICgodHlwZSA9IHRoaXMucmVhZCgpKSAhPSBUX0VPRikgeyAvLyBEb24ndCB1c2UgJ2NvdGludWUnIGZvciB0aGlzIGxvb3AuCi0gICAgICAgICAgICAvLyBzaW5nbGUtcmFuZ2UgfCBmcm9tLXRvLXJhbmdlIHwgc3VidHJhY3Rpb24KLSAgICAgICAgICAgIGlmICh0eXBlID09IFRfQ0hBUiAmJiB0aGlzLmNoYXJkYXRhID09ICddJyAmJiAhZmlyc3Rsb29wKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5yYW5nZSkgewotICAgICAgICAgICAgICAgICAgICBiYXNlLnN1YnRyYWN0UmFuZ2VzKHRvayk7Ci0gICAgICAgICAgICAgICAgICAgIHRvayA9IGJhc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IGMgPSB0aGlzLmNoYXJkYXRhOwotICAgICAgICAgICAgYm9vbGVhbiBlbmQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmICh0eXBlID09IFRfQkFDS1NPTElEVVMpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgJ2QnOiAgY2FzZSAnRCc6Ci0gICAgICAgICAgICAgICAgICBjYXNlICd3JzogIGNhc2UgJ1cnOgotICAgICAgICAgICAgICAgICAgY2FzZSAncyc6ICBjYXNlICdTJzoKLSAgICAgICAgICAgICAgICAgICAgdG9rLm1lcmdlUmFuZ2VzKHRoaXMuZ2V0VG9rZW5Gb3JTaG9ydGhhbmQoYykpOwotICAgICAgICAgICAgICAgICAgICBlbmQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgY2FzZSAnaSc6ICBjYXNlICdJJzoKLSAgICAgICAgICAgICAgICAgIGNhc2UgJ2MnOiAgY2FzZSAnQyc6Ci0gICAgICAgICAgICAgICAgICAgIGMgPSB0aGlzLnByb2Nlc3NDSWluQ2hhcmFjdGVyQ2xhc3ModG9rLCBjKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGMgPCAwKSAgZW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgY2FzZSAncCc6Ci0gICAgICAgICAgICAgICAgICBjYXNlICdQJzoKLSAgICAgICAgICAgICAgICAgICAgaW50IHBzdGFydCA9IHRoaXMub2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBSYW5nZVRva2VuIHRvazIgPSB0aGlzLnByb2Nlc3NCYWNrc29saWR1c19wUChjKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRvazIgPT0gbnVsbCkgIHRocm93IHRoaXMuZXgoInBhcnNlci5hdG9tLjUiLCBwc3RhcnQpOwotICAgICAgICAgICAgICAgICAgICB0b2subWVyZ2VSYW5nZXModG9rMik7Ci0gICAgICAgICAgICAgICAgICAgIGVuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBjID0gdGhpcy5kZWNvZGVFc2NhcGVkKCk7Ci0gICAgICAgICAgICAgICAgfSAvLyBcICsgYwotICAgICAgICAgICAgfSAvLyBiYWNrc29saWR1cwotICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBUX1hNTFNDSEVNQV9DQ19TVUJUUkFDVElPTiAmJiAhZmlyc3Rsb29wKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdWJyYWN0aW9uCi0gICAgICAgICAgICAgICAgaWYgKG5yYW5nZSkgewotICAgICAgICAgICAgICAgICAgICBiYXNlLnN1YnRyYWN0UmFuZ2VzKHRvayk7Ci0gICAgICAgICAgICAgICAgICAgIHRvayA9IGJhc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFJhbmdlVG9rZW4gcmFuZ2UyID0gdGhpcy5wYXJzZUNoYXJhY3RlckNsYXNzKGZhbHNlKTsKLSAgICAgICAgICAgICAgICB0b2suc3VidHJhY3RSYW5nZXMocmFuZ2UyKTsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkKCkgIT0gVF9DSEFSIHx8IHRoaXMuY2hhcmRhdGEgIT0gJ10nKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyB0aGlzLmV4KCJwYXJzZXIuY2MuNSIsIHRoaXMub2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV4aXQgdGhpcyBsb29wCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLm5leHQoKTsKLSAgICAgICAgICAgIGlmICghZW5kKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIG5vdCBzaG9ydGhhbmRzLi4uCi0gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gVF9DSEFSKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjID09ICdbJykgIHRocm93IHRoaXMuZXgoInBhcnNlci5jYy42IiwgdGhpcy5vZmZzZXQtMik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjID09ICddJykgIHRocm93IHRoaXMuZXgoInBhcnNlci5jYy43IiwgdGhpcy5vZmZzZXQtMik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWQoKSAhPSBUX0NIQVIgfHwgdGhpcy5jaGFyZGF0YSAhPSAnLScpIHsgLy8gSGVyZSBpcyBubyAnLScuCi0gICAgICAgICAgICAgICAgICAgIHRvay5hZGRSYW5nZShjLCBjKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvdW5kICctJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXMgdGhpcyAnLScgaXMgYSBmcm9tLXRvIHRva2VuPz8KLSAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7IC8vIFNraXBzICctJwotICAgICAgICAgICAgICAgICAgICBpZiAoKHR5cGUgPSB0aGlzLnJlYWQoKSkgPT0gVF9FT0YpICB0aHJvdyB0aGlzLmV4KCJwYXJzZXIuY2MuMiIsIHRoaXMub2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGMgJy0nICddJyAtPiAnLScgaXMgYSBzaW5nbGUtcmFuZ2UuCi0gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09IFRfQ0hBUiAmJiB0aGlzLmNoYXJkYXRhID09ICddJykgewotICAgICAgICAgICAgICAgICAgICAgICAgdG9rLmFkZFJhbmdlKGMsIGMpOwotICAgICAgICAgICAgICAgICAgICAgICAgdG9rLmFkZFJhbmdlKCctJywgJy0nKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYyAnLScgJy1bJyAtPiAnLScgaXMgYSBzaW5nbGUtcmFuZ2UuCi0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gVF9YTUxTQ0hFTUFfQ0NfU1VCVFJBQ1RJT04pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvay5hZGRSYW5nZShjLCBjKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvay5hZGRSYW5nZSgnLScsICctJyk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFuZ2VlbmQgPSB0aGlzLmNoYXJkYXRhOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gVF9DSEFSKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlZW5kID09ICdbJykgIHRocm93IHRoaXMuZXgoInBhcnNlci5jYy42IiwgdGhpcy5vZmZzZXQtMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlZW5kID09ICddJykgIHRocm93IHRoaXMuZXgoInBhcnNlci5jYy43IiwgdGhpcy5vZmZzZXQtMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBUX0JBQ0tTT0xJRFVTKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlZW5kID0gdGhpcy5kZWNvZGVFc2NhcGVkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvay5hZGRSYW5nZShjLCByYW5nZWVuZCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaXJzdGxvb3AgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAodGhpcy5yZWFkKCkgPT0gVF9FT0YpCi0gICAgICAgICAgICB0aHJvdyB0aGlzLmV4KCJwYXJzZXIuY2MuMiIsIHRoaXMub2Zmc2V0KTsKLSAgICAgICAgdG9rLnNvcnRSYW5nZXMoKTsKLSAgICAgICAgdG9rLmNvbXBhY3RSYW5nZXMoKTsKLSAgICAgICAgLy90b2suZHVtcFJhbmdlcygpOwotICAgICAgICB0aGlzLnNldENvbnRleHQoU19OT1JNQUwpOwotICAgICAgICB0aGlzLm5leHQoKTsgICAgICAgICAgICAgICAgICAgIC8vIFNraXBzICddJwotCi0gICAgICAgIHJldHVybiB0b2s7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIFJhbmdlVG9rZW4gcGFyc2VTZXRPcGVyYXRpb25zKCkgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKLSAgICAgICAgdGhyb3cgdGhpcy5leCgicGFyc2VyLnByb2Nlc3MuMSIsIHRoaXMub2Zmc2V0KTsKLSAgICB9Ci0gCi0gICAgVG9rZW4gZ2V0VG9rZW5Gb3JTaG9ydGhhbmQoaW50IGNoKSB7Ci0gICAgICAgIHN3aXRjaCAoY2gpIHsKLSAgICAgICAgICBjYXNlICdkJzoKLSAgICAgICAgICAgIHJldHVybiBQYXJzZXJGb3JYTUxTY2hlbWEuZ2V0UmFuZ2UoInhtbDppc0RpZ2l0IiwgdHJ1ZSk7Ci0gICAgICAgICAgY2FzZSAnRCc6Ci0gICAgICAgICAgICByZXR1cm4gUGFyc2VyRm9yWE1MU2NoZW1hLmdldFJhbmdlKCJ4bWw6aXNEaWdpdCIsIGZhbHNlKTsKLSAgICAgICAgICBjYXNlICd3JzoKLSAgICAgICAgICAgIHJldHVybiBQYXJzZXJGb3JYTUxTY2hlbWEuZ2V0UmFuZ2UoInhtbDppc1dvcmQiLCB0cnVlKTsKLSAgICAgICAgICBjYXNlICdXJzoKLSAgICAgICAgICAgIHJldHVybiBQYXJzZXJGb3JYTUxTY2hlbWEuZ2V0UmFuZ2UoInhtbDppc1dvcmQiLCBmYWxzZSk7Ci0gICAgICAgICAgY2FzZSAncyc6Ci0gICAgICAgICAgICByZXR1cm4gUGFyc2VyRm9yWE1MU2NoZW1hLmdldFJhbmdlKCJ4bWw6aXNTcGFjZSIsIHRydWUpOwotICAgICAgICAgIGNhc2UgJ1MnOgotICAgICAgICAgICAgcmV0dXJuIFBhcnNlckZvclhNTFNjaGVtYS5nZXRSYW5nZSgieG1sOmlzU3BhY2UiLCBmYWxzZSk7Ci0gICAgICAgICAgY2FzZSAnYyc6Ci0gICAgICAgICAgICByZXR1cm4gUGFyc2VyRm9yWE1MU2NoZW1hLmdldFJhbmdlKCJ4bWw6aXNOYW1lQ2hhciIsIHRydWUpOwotICAgICAgICAgIGNhc2UgJ0MnOgotICAgICAgICAgICAgcmV0dXJuIFBhcnNlckZvclhNTFNjaGVtYS5nZXRSYW5nZSgieG1sOmlzTmFtZUNoYXIiLCBmYWxzZSk7Ci0gICAgICAgICAgY2FzZSAnaSc6Ci0gICAgICAgICAgICByZXR1cm4gUGFyc2VyRm9yWE1MU2NoZW1hLmdldFJhbmdlKCJ4bWw6aXNJbml0aWFsTmFtZUNoYXIiLCB0cnVlKTsKLSAgICAgICAgICBjYXNlICdJJzoKLSAgICAgICAgICAgIHJldHVybiBQYXJzZXJGb3JYTUxTY2hlbWEuZ2V0UmFuZ2UoInhtbDppc0luaXRpYWxOYW1lQ2hhciIsIGZhbHNlKTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkludGVybmFsIEVycm9yOiBzaG9ydGhhbmRzOiBcXHUiK0ludGVnZXIudG9TdHJpbmcoY2gsIDE2KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaW50IGRlY29kZUVzY2FwZWQoKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICBpZiAodGhpcy5yZWFkKCkgIT0gVF9CQUNLU09MSURVUykgIHRocm93IGV4KCJwYXJzZXIubmV4dC4xIiwgdGhpcy5vZmZzZXQtMSk7Ci0gICAgICAgIGludCBjID0gdGhpcy5jaGFyZGF0YTsKLSAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgY2FzZSAnbic6ICBjID0gJ1xuJzsgIGJyZWFrOyAvLyBMSU5FIEZFRUQgVSswMDBBCi0gICAgICAgICAgY2FzZSAncic6ICBjID0gJ1xyJzsgIGJyZWFrOyAvLyBDUlJJQUdFIFJFVFVSTiBVKzAwMEQKLSAgICAgICAgICBjYXNlICd0JzogIGMgPSAnXHQnOyAgYnJlYWs7IC8vIEhPUklaT05UQUwgVEFCVUxBVElPTiBVKzAwMDkKLQotICAgICAgICAgIGNhc2UgJ2UnOgotICAgICAgICAgIGNhc2UgJ2YnOgotICAgICAgICAgIGNhc2UgJ3gnOgotICAgICAgICAgIGNhc2UgJ3UnOgotICAgICAgICAgIGNhc2UgJ3YnOgotICAgICAgICAgICAgdGhyb3cgZXgoInBhcnNlci5wcm9jZXNzLjEiLCB0aGlzLm9mZnNldC0yKTsKLSAgICAgICAgICBjYXNlICdBJzoKLSAgICAgICAgICBjYXNlICdaJzoKLSAgICAgICAgICBjYXNlICd6JzoKLSAgICAgICAgICAgIHRocm93IGV4KCJwYXJzZXIuZGVzY2FwZS41IiwgdGhpcy5vZmZzZXQtMik7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYzsKLSAgICB9Ci0KLSAgICBzdGF0aWMgcHJpdmF0ZSBIYXNodGFibGUgcmFuZ2VzID0gbnVsbDsKLSAgICBzdGF0aWMgcHJpdmF0ZSBIYXNodGFibGUgcmFuZ2VzMiA9IG51bGw7Ci0gICAgc3RhdGljIHN5bmNocm9uaXplZCBwcm90ZWN0ZWQgUmFuZ2VUb2tlbiBnZXRSYW5nZShTdHJpbmcgbmFtZSwgYm9vbGVhbiBwb3NpdGl2ZSkgewotICAgICAgICBpZiAocmFuZ2VzID09IG51bGwpIHsKLSAgICAgICAgICAgIHJhbmdlcyA9IG5ldyBIYXNodGFibGUoKTsKLSAgICAgICAgICAgIHJhbmdlczIgPSBuZXcgSGFzaHRhYmxlKCk7Ci0KLSAgICAgICAgICAgIFRva2VuIHRvayA9IFRva2VuLmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgICAgICBzZXR1cFJhbmdlKHRvaywgU1BBQ0VTKTsKLSAgICAgICAgICAgIHJhbmdlcy5wdXQoInhtbDppc1NwYWNlIiwgdG9rKTsKLSAgICAgICAgICAgIHJhbmdlczIucHV0KCJ4bWw6aXNTcGFjZSIsIFRva2VuLmNvbXBsZW1lbnRSYW5nZXModG9rKSk7Ci0KLSAgICAgICAgICAgIHRvayA9IFRva2VuLmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgICAgICBzZXR1cFJhbmdlKHRvaywgRElHSVRTKTsKLSAgICAgICAgICAgIHJhbmdlcy5wdXQoInhtbDppc0RpZ2l0IiwgdG9rKTsKLSAgICAgICAgICAgIHJhbmdlczIucHV0KCJ4bWw6aXNEaWdpdCIsIFRva2VuLmNvbXBsZW1lbnRSYW5nZXModG9rKSk7Ci0KLSAgICAgICAgICAgIHRvayA9IFRva2VuLmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgICAgICBzZXR1cFJhbmdlKHRvaywgRElHSVRTKTsKLSAgICAgICAgICAgIHJhbmdlcy5wdXQoInhtbDppc0RpZ2l0IiwgdG9rKTsKLSAgICAgICAgICAgIHJhbmdlczIucHV0KCJ4bWw6aXNEaWdpdCIsIFRva2VuLmNvbXBsZW1lbnRSYW5nZXModG9rKSk7Ci0KLSAgICAgICAgICAgIHRvayA9IFRva2VuLmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgICAgICBzZXR1cFJhbmdlKHRvaywgTEVUVEVSUyk7Ci0gICAgICAgICAgICB0b2subWVyZ2VSYW5nZXMoKFRva2VuKXJhbmdlcy5nZXQoInhtbDppc0RpZ2l0IikpOwotICAgICAgICAgICAgcmFuZ2VzLnB1dCgieG1sOmlzV29yZCIsIHRvayk7Ci0gICAgICAgICAgICByYW5nZXMyLnB1dCgieG1sOmlzV29yZCIsIFRva2VuLmNvbXBsZW1lbnRSYW5nZXModG9rKSk7Ci0KLSAgICAgICAgICAgIHRvayA9IFRva2VuLmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgICAgICBzZXR1cFJhbmdlKHRvaywgTkFNRUNIQVJTKTsKLSAgICAgICAgICAgIHJhbmdlcy5wdXQoInhtbDppc05hbWVDaGFyIiwgdG9rKTsKLSAgICAgICAgICAgIHJhbmdlczIucHV0KCJ4bWw6aXNOYW1lQ2hhciIsIFRva2VuLmNvbXBsZW1lbnRSYW5nZXModG9rKSk7Ci0KLSAgICAgICAgICAgIHRvayA9IFRva2VuLmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgICAgICBzZXR1cFJhbmdlKHRvaywgTEVUVEVSUyk7Ci0gICAgICAgICAgICB0b2suYWRkUmFuZ2UoJ18nLCAnXycpOwotICAgICAgICAgICAgdG9rLmFkZFJhbmdlKCc6JywgJzonKTsKLSAgICAgICAgICAgIHJhbmdlcy5wdXQoInhtbDppc0luaXRpYWxOYW1lQ2hhciIsIHRvayk7Ci0gICAgICAgICAgICByYW5nZXMyLnB1dCgieG1sOmlzSW5pdGlhbE5hbWVDaGFyIiwgVG9rZW4uY29tcGxlbWVudFJhbmdlcyh0b2spKTsKLSAgICAgICAgfQotICAgICAgICBSYW5nZVRva2VuIHRvayA9IHBvc2l0aXZlID8gKFJhbmdlVG9rZW4pcmFuZ2VzLmdldChuYW1lKQotICAgICAgICAgICAgOiAoUmFuZ2VUb2tlbilyYW5nZXMyLmdldChuYW1lKTsKLSAgICAgICAgcmV0dXJuIHRvazsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBzZXR1cFJhbmdlKFRva2VuIHJhbmdlLCBTdHJpbmcgc3JjKSB7Ci0gICAgICAgIGludCBsZW4gPSBzcmMubGVuZ3RoKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyAgaSA8IGxlbjsgIGkgKz0gMikKLSAgICAgICAgICAgIHJhbmdlLmFkZFJhbmdlKHNyYy5jaGFyQXQoaSksIHNyYy5jaGFyQXQoaSsxKSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNQQUNFUyA9ICJcdFxuXHJcciAgIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTkFNRUNIQVJTID0KLSAgICAgICAgIlx1MDAyZFx1MDAyZVx1MDAzMFx1MDAzYVx1MDA0MVx1MDA1YVx1MDA1Zlx1MDA1Zlx1MDA2MVx1MDA3YVx1MDBiN1x1MDBiN1x1MDBjMFx1MDBkNiIKLSAgICAgICAgKyJcdTAwZDhcdTAwZjZcdTAwZjhcdTAxMzFcdTAxMzRcdTAxM2VcdTAxNDFcdTAxNDhcdTAxNGFcdTAxN2VcdTAxODBcdTAxYzNcdTAxY2RcdTAxZjAiCi0gICAgICAgICsiXHUwMWY0XHUwMWY1XHUwMWZhXHUwMjE3XHUwMjUwXHUwMmE4XHUwMmJiXHUwMmMxXHUwMmQwXHUwMmQxXHUwMzAwXHUwMzQ1XHUwMzYwXHUwMzYxIgotICAgICAgICArIlx1MDM4Nlx1MDM4YVx1MDM4Y1x1MDM4Y1x1MDM4ZVx1MDNhMVx1MDNhM1x1MDNjZVx1MDNkMFx1MDNkNlx1MDNkYVx1MDNkYVx1MDNkY1x1MDNkYyIKLSAgICAgICAgKyJcdTAzZGVcdTAzZGVcdTAzZTBcdTAzZTBcdTAzZTJcdTAzZjNcdTA0MDFcdTA0MGNcdTA0MGVcdTA0NGZcdTA0NTFcdTA0NWNcdTA0NWVcdTA0ODEiCi0gICAgICAgICsiXHUwNDgzXHUwNDg2XHUwNDkwXHUwNGM0XHUwNGM3XHUwNGM4XHUwNGNiXHUwNGNjXHUwNGQwXHUwNGViXHUwNGVlXHUwNGY1XHUwNGY4XHUwNGY5IgotICAgICAgICArIlx1MDUzMVx1MDU1Nlx1MDU1OVx1MDU1OVx1MDU2MVx1MDU4Nlx1MDU5MVx1MDVhMVx1MDVhM1x1MDViOVx1MDViYlx1MDViZFx1MDViZlx1MDViZiIKLSAgICAgICAgKyJcdTA1YzFcdTA1YzJcdTA1YzRcdTA1YzRcdTA1ZDBcdTA1ZWFcdTA1ZjBcdTA1ZjJcdTA2MjFcdTA2M2FcdTA2NDBcdTA2NTJcdTA2NjBcdTA2NjkiCi0gICAgICAgICsiXHUwNjcwXHUwNmI3XHUwNmJhXHUwNmJlXHUwNmMwXHUwNmNlXHUwNmQwXHUwNmQzXHUwNmQ1XHUwNmU4XHUwNmVhXHUwNmVkXHUwNmYwXHUwNmY5IgotICAgICAgICArIlx1MDkwMVx1MDkwM1x1MDkwNVx1MDkzOVx1MDkzY1x1MDk0ZFx1MDk1MVx1MDk1NFx1MDk1OFx1MDk2M1x1MDk2Nlx1MDk2Zlx1MDk4MVx1MDk4MyIKLSAgICAgICAgKyJcdTA5ODVcdTA5OGNcdTA5OGZcdTA5OTBcdTA5OTNcdTA5YThcdTA5YWFcdTA5YjBcdTA5YjJcdTA5YjJcdTA5YjZcdTA5YjlcdTA5YmNcdTA5YmMiCi0gICAgICAgICsiXHUwOWJlXHUwOWM0XHUwOWM3XHUwOWM4XHUwOWNiXHUwOWNkXHUwOWQ3XHUwOWQ3XHUwOWRjXHUwOWRkXHUwOWRmXHUwOWUzXHUwOWU2XHUwOWYxIgotICAgICAgICArIlx1MGEwMlx1MGEwMlx1MGEwNVx1MGEwYVx1MGEwZlx1MGExMFx1MGExM1x1MGEyOFx1MGEyYVx1MGEzMFx1MGEzMlx1MGEzM1x1MGEzNVx1MGEzNiIKLSAgICAgICAgKyJcdTBhMzhcdTBhMzlcdTBhM2NcdTBhM2NcdTBhM2VcdTBhNDJcdTBhNDdcdTBhNDhcdTBhNGJcdTBhNGRcdTBhNTlcdTBhNWNcdTBhNWVcdTBhNWUiCi0gICAgICAgICsiXHUwYTY2XHUwYTc0XHUwYTgxXHUwYTgzXHUwYTg1XHUwYThiXHUwYThkXHUwYThkXHUwYThmXHUwYTkxXHUwYTkzXHUwYWE4XHUwYWFhXHUwYWIwIgotICAgICAgICArIlx1MGFiMlx1MGFiM1x1MGFiNVx1MGFiOVx1MGFiY1x1MGFjNVx1MGFjN1x1MGFjOVx1MGFjYlx1MGFjZFx1MGFlMFx1MGFlMFx1MGFlNlx1MGFlZiIKLSAgICAgICAgKyJcdTBiMDFcdTBiMDNcdTBiMDVcdTBiMGNcdTBiMGZcdTBiMTBcdTBiMTNcdTBiMjhcdTBiMmFcdTBiMzBcdTBiMzJcdTBiMzNcdTBiMzZcdTBiMzkiCi0gICAgICAgICsiXHUwYjNjXHUwYjQzXHUwYjQ3XHUwYjQ4XHUwYjRiXHUwYjRkXHUwYjU2XHUwYjU3XHUwYjVjXHUwYjVkXHUwYjVmXHUwYjYxXHUwYjY2XHUwYjZmIgotICAgICAgICArIlx1MGI4Mlx1MGI4M1x1MGI4NVx1MGI4YVx1MGI4ZVx1MGI5MFx1MGI5Mlx1MGI5NVx1MGI5OVx1MGI5YVx1MGI5Y1x1MGI5Y1x1MGI5ZVx1MGI5ZiIKLSAgICAgICAgKyJcdTBiYTNcdTBiYTRcdTBiYThcdTBiYWFcdTBiYWVcdTBiYjVcdTBiYjdcdTBiYjlcdTBiYmVcdTBiYzJcdTBiYzZcdTBiYzhcdTBiY2FcdTBiY2QiCi0gICAgICAgICsiXHUwYmQ3XHUwYmQ3XHUwYmU3XHUwYmVmXHUwYzAxXHUwYzAzXHUwYzA1XHUwYzBjXHUwYzBlXHUwYzEwXHUwYzEyXHUwYzI4XHUwYzJhXHUwYzMzIgotICAgICAgICArIlx1MGMzNVx1MGMzOVx1MGMzZVx1MGM0NFx1MGM0Nlx1MGM0OFx1MGM0YVx1MGM0ZFx1MGM1NVx1MGM1Nlx1MGM2MFx1MGM2MVx1MGM2Nlx1MGM2ZiIKLSAgICAgICAgKyJcdTBjODJcdTBjODNcdTBjODVcdTBjOGNcdTBjOGVcdTBjOTBcdTBjOTJcdTBjYThcdTBjYWFcdTBjYjNcdTBjYjVcdTBjYjlcdTBjYmVcdTBjYzQiCi0gICAgICAgICsiXHUwY2M2XHUwY2M4XHUwY2NhXHUwY2NkXHUwY2Q1XHUwY2Q2XHUwY2RlXHUwY2RlXHUwY2UwXHUwY2UxXHUwY2U2XHUwY2VmXHUwZDAyXHUwZDAzIgotICAgICAgICArIlx1MGQwNVx1MGQwY1x1MGQwZVx1MGQxMFx1MGQxMlx1MGQyOFx1MGQyYVx1MGQzOVx1MGQzZVx1MGQ0M1x1MGQ0Nlx1MGQ0OFx1MGQ0YVx1MGQ0ZCIKLSAgICAgICAgKyJcdTBkNTdcdTBkNTdcdTBkNjBcdTBkNjFcdTBkNjZcdTBkNmZcdTBlMDFcdTBlMmVcdTBlMzBcdTBlM2FcdTBlNDBcdTBlNGVcdTBlNTBcdTBlNTkiCi0gICAgICAgICsiXHUwZTgxXHUwZTgyXHUwZTg0XHUwZTg0XHUwZTg3XHUwZTg4XHUwZThhXHUwZThhXHUwZThkXHUwZThkXHUwZTk0XHUwZTk3XHUwZTk5XHUwZTlmIgotICAgICAgICArIlx1MGVhMVx1MGVhM1x1MGVhNVx1MGVhNVx1MGVhN1x1MGVhN1x1MGVhYVx1MGVhYlx1MGVhZFx1MGVhZVx1MGViMFx1MGViOVx1MGViYlx1MGViZCIKLSAgICAgICAgKyJcdTBlYzBcdTBlYzRcdTBlYzZcdTBlYzZcdTBlYzhcdTBlY2RcdTBlZDBcdTBlZDlcdTBmMThcdTBmMTlcdTBmMjBcdTBmMjlcdTBmMzVcdTBmMzUiCi0gICAgICAgICsiXHUwZjM3XHUwZjM3XHUwZjM5XHUwZjM5XHUwZjNlXHUwZjQ3XHUwZjQ5XHUwZjY5XHUwZjcxXHUwZjg0XHUwZjg2XHUwZjhiXHUwZjkwXHUwZjk1IgotICAgICAgICArIlx1MGY5N1x1MGY5N1x1MGY5OVx1MGZhZFx1MGZiMVx1MGZiN1x1MGZiOVx1MGZiOVx1MTBhMFx1MTBjNVx1MTBkMFx1MTBmNlx1MTEwMFx1MTEwMCIKLSAgICAgICAgKyJcdTExMDJcdTExMDNcdTExMDVcdTExMDdcdTExMDlcdTExMDlcdTExMGJcdTExMGNcdTExMGVcdTExMTJcdTExM2NcdTExM2NcdTExM2VcdTExM2UiCi0gICAgICAgICsiXHUxMTQwXHUxMTQwXHUxMTRjXHUxMTRjXHUxMTRlXHUxMTRlXHUxMTUwXHUxMTUwXHUxMTU0XHUxMTU1XHUxMTU5XHUxMTU5XHUxMTVmXHUxMTYxIgotICAgICAgICArIlx1MTE2M1x1MTE2M1x1MTE2NVx1MTE2NVx1MTE2N1x1MTE2N1x1MTE2OVx1MTE2OVx1MTE2ZFx1MTE2ZVx1MTE3Mlx1MTE3M1x1MTE3NVx1MTE3NSIKLSAgICAgICAgKyJcdTExOWVcdTExOWVcdTExYThcdTExYThcdTExYWJcdTExYWJcdTExYWVcdTExYWZcdTExYjdcdTExYjhcdTExYmFcdTExYmFcdTExYmNcdTExYzIiCi0gICAgICAgICsiXHUxMWViXHUxMWViXHUxMWYwXHUxMWYwXHUxMWY5XHUxMWY5XHUxZTAwXHUxZTliXHUxZWEwXHUxZWY5XHUxZjAwXHUxZjE1XHUxZjE4XHUxZjFkIgotICAgICAgICArIlx1MWYyMFx1MWY0NVx1MWY0OFx1MWY0ZFx1MWY1MFx1MWY1N1x1MWY1OVx1MWY1OVx1MWY1Ylx1MWY1Ylx1MWY1ZFx1MWY1ZFx1MWY1Zlx1MWY3ZCIKLSAgICAgICAgKyJcdTFmODBcdTFmYjRcdTFmYjZcdTFmYmNcdTFmYmVcdTFmYmVcdTFmYzJcdTFmYzRcdTFmYzZcdTFmY2NcdTFmZDBcdTFmZDNcdTFmZDZcdTFmZGIiCi0gICAgICAgICsiXHUxZmUwXHUxZmVjXHUxZmYyXHUxZmY0XHUxZmY2XHUxZmZjXHUyMGQwXHUyMGRjXHUyMGUxXHUyMGUxXHUyMTI2XHUyMTI2XHUyMTJhXHUyMTJiIgotICAgICAgICArIlx1MjEyZVx1MjEyZVx1MjE4MFx1MjE4Mlx1MzAwNVx1MzAwNVx1MzAwN1x1MzAwN1x1MzAyMVx1MzAyZlx1MzAzMVx1MzAzNVx1MzA0MVx1MzA5NCIKLSAgICAgICAgKyJcdTMwOTlcdTMwOWFcdTMwOWRcdTMwOWVcdTMwYTFcdTMwZmFcdTMwZmNcdTMwZmVcdTMxMDVcdTMxMmNcdTRlMDBcdTlmYTVcdWFjMDBcdWQ3YTMiCi0gICAgICAgICsiIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEVUVEVSUyA9Ci0gICAgICAgICJcdTAwNDFcdTAwNWFcdTAwNjFcdTAwN2FcdTAwYzBcdTAwZDZcdTAwZDhcdTAwZjZcdTAwZjhcdTAxMzFcdTAxMzRcdTAxM2VcdTAxNDFcdTAxNDgiCi0gICAgICAgICsiXHUwMTRhXHUwMTdlXHUwMTgwXHUwMWMzXHUwMWNkXHUwMWYwXHUwMWY0XHUwMWY1XHUwMWZhXHUwMjE3XHUwMjUwXHUwMmE4XHUwMmJiXHUwMmMxIgotICAgICAgICArIlx1MDM4Nlx1MDM4Nlx1MDM4OFx1MDM4YVx1MDM4Y1x1MDM4Y1x1MDM4ZVx1MDNhMVx1MDNhM1x1MDNjZVx1MDNkMFx1MDNkNlx1MDNkYVx1MDNkYSIKLSAgICAgICAgKyJcdTAzZGNcdTAzZGNcdTAzZGVcdTAzZGVcdTAzZTBcdTAzZTBcdTAzZTJcdTAzZjNcdTA0MDFcdTA0MGNcdTA0MGVcdTA0NGZcdTA0NTFcdTA0NWMiCi0gICAgICAgICsiXHUwNDVlXHUwNDgxXHUwNDkwXHUwNGM0XHUwNGM3XHUwNGM4XHUwNGNiXHUwNGNjXHUwNGQwXHUwNGViXHUwNGVlXHUwNGY1XHUwNGY4XHUwNGY5IgotICAgICAgICArIlx1MDUzMVx1MDU1Nlx1MDU1OVx1MDU1OVx1MDU2MVx1MDU4Nlx1MDVkMFx1MDVlYVx1MDVmMFx1MDVmMlx1MDYyMVx1MDYzYVx1MDY0MVx1MDY0YSIKLSAgICAgICAgKyJcdTA2NzFcdTA2YjdcdTA2YmFcdTA2YmVcdTA2YzBcdTA2Y2VcdTA2ZDBcdTA2ZDNcdTA2ZDVcdTA2ZDVcdTA2ZTVcdTA2ZTZcdTA5MDVcdTA5MzkiCi0gICAgICAgICsiXHUwOTNkXHUwOTNkXHUwOTU4XHUwOTYxXHUwOTg1XHUwOThjXHUwOThmXHUwOTkwXHUwOTkzXHUwOWE4XHUwOWFhXHUwOWIwXHUwOWIyXHUwOWIyIgotICAgICAgICArIlx1MDliNlx1MDliOVx1MDlkY1x1MDlkZFx1MDlkZlx1MDllMVx1MDlmMFx1MDlmMVx1MGEwNVx1MGEwYVx1MGEwZlx1MGExMFx1MGExM1x1MGEyOCIKLSAgICAgICAgKyJcdTBhMmFcdTBhMzBcdTBhMzJcdTBhMzNcdTBhMzVcdTBhMzZcdTBhMzhcdTBhMzlcdTBhNTlcdTBhNWNcdTBhNWVcdTBhNWVcdTBhNzJcdTBhNzQiCi0gICAgICAgICsiXHUwYTg1XHUwYThiXHUwYThkXHUwYThkXHUwYThmXHUwYTkxXHUwYTkzXHUwYWE4XHUwYWFhXHUwYWIwXHUwYWIyXHUwYWIzXHUwYWI1XHUwYWI5IgotICAgICAgICArIlx1MGFiZFx1MGFiZFx1MGFlMFx1MGFlMFx1MGIwNVx1MGIwY1x1MGIwZlx1MGIxMFx1MGIxM1x1MGIyOFx1MGIyYVx1MGIzMFx1MGIzMlx1MGIzMyIKLSAgICAgICAgKyJcdTBiMzZcdTBiMzlcdTBiM2RcdTBiM2RcdTBiNWNcdTBiNWRcdTBiNWZcdTBiNjFcdTBiODVcdTBiOGFcdTBiOGVcdTBiOTBcdTBiOTJcdTBiOTUiCi0gICAgICAgICsiXHUwYjk5XHUwYjlhXHUwYjljXHUwYjljXHUwYjllXHUwYjlmXHUwYmEzXHUwYmE0XHUwYmE4XHUwYmFhXHUwYmFlXHUwYmI1XHUwYmI3XHUwYmI5IgotICAgICAgICArIlx1MGMwNVx1MGMwY1x1MGMwZVx1MGMxMFx1MGMxMlx1MGMyOFx1MGMyYVx1MGMzM1x1MGMzNVx1MGMzOVx1MGM2MFx1MGM2MVx1MGM4NVx1MGM4YyIKLSAgICAgICAgKyJcdTBjOGVcdTBjOTBcdTBjOTJcdTBjYThcdTBjYWFcdTBjYjNcdTBjYjVcdTBjYjlcdTBjZGVcdTBjZGVcdTBjZTBcdTBjZTFcdTBkMDVcdTBkMGMiCi0gICAgICAgICsiXHUwZDBlXHUwZDEwXHUwZDEyXHUwZDI4XHUwZDJhXHUwZDM5XHUwZDYwXHUwZDYxXHUwZTAxXHUwZTJlXHUwZTMwXHUwZTMwXHUwZTMyXHUwZTMzIgotICAgICAgICArIlx1MGU0MFx1MGU0NVx1MGU4MVx1MGU4Mlx1MGU4NFx1MGU4NFx1MGU4N1x1MGU4OFx1MGU4YVx1MGU4YVx1MGU4ZFx1MGU4ZFx1MGU5NFx1MGU5NyIKLSAgICAgICAgKyJcdTBlOTlcdTBlOWZcdTBlYTFcdTBlYTNcdTBlYTVcdTBlYTVcdTBlYTdcdTBlYTdcdTBlYWFcdTBlYWJcdTBlYWRcdTBlYWVcdTBlYjBcdTBlYjAiCi0gICAgICAgICsiXHUwZWIyXHUwZWIzXHUwZWJkXHUwZWJkXHUwZWMwXHUwZWM0XHUwZjQwXHUwZjQ3XHUwZjQ5XHUwZjY5XHUxMGEwXHUxMGM1XHUxMGQwXHUxMGY2IgotICAgICAgICArIlx1MTEwMFx1MTEwMFx1MTEwMlx1MTEwM1x1MTEwNVx1MTEwN1x1MTEwOVx1MTEwOVx1MTEwYlx1MTEwY1x1MTEwZVx1MTExMlx1MTEzY1x1MTEzYyIKLSAgICAgICAgKyJcdTExM2VcdTExM2VcdTExNDBcdTExNDBcdTExNGNcdTExNGNcdTExNGVcdTExNGVcdTExNTBcdTExNTBcdTExNTRcdTExNTVcdTExNTlcdTExNTkiCi0gICAgICAgICsiXHUxMTVmXHUxMTYxXHUxMTYzXHUxMTYzXHUxMTY1XHUxMTY1XHUxMTY3XHUxMTY3XHUxMTY5XHUxMTY5XHUxMTZkXHUxMTZlXHUxMTcyXHUxMTczIgotICAgICAgICArIlx1MTE3NVx1MTE3NVx1MTE5ZVx1MTE5ZVx1MTFhOFx1MTFhOFx1MTFhYlx1MTFhYlx1MTFhZVx1MTFhZlx1MTFiN1x1MTFiOFx1MTFiYVx1MTFiYSIKLSAgICAgICAgKyJcdTExYmNcdTExYzJcdTExZWJcdTExZWJcdTExZjBcdTExZjBcdTExZjlcdTExZjlcdTFlMDBcdTFlOWJcdTFlYTBcdTFlZjlcdTFmMDBcdTFmMTUiCi0gICAgICAgICsiXHUxZjE4XHUxZjFkXHUxZjIwXHUxZjQ1XHUxZjQ4XHUxZjRkXHUxZjUwXHUxZjU3XHUxZjU5XHUxZjU5XHUxZjViXHUxZjViXHUxZjVkXHUxZjVkIgotICAgICAgICArIlx1MWY1Zlx1MWY3ZFx1MWY4MFx1MWZiNFx1MWZiNlx1MWZiY1x1MWZiZVx1MWZiZVx1MWZjMlx1MWZjNFx1MWZjNlx1MWZjY1x1MWZkMFx1MWZkMyIKLSAgICAgICAgKyJcdTFmZDZcdTFmZGJcdTFmZTBcdTFmZWNcdTFmZjJcdTFmZjRcdTFmZjZcdTFmZmNcdTIxMjZcdTIxMjZcdTIxMmFcdTIxMmJcdTIxMmVcdTIxMmUiCi0gICAgICAgICsiXHUyMTgwXHUyMTgyXHUzMDA3XHUzMDA3XHUzMDIxXHUzMDI5XHUzMDQxXHUzMDk0XHUzMGExXHUzMGZhXHUzMTA1XHUzMTJjXHU0ZTAwXHU5ZmE1IgotICAgICAgICArIlx1YWMwMFx1ZDdhMyI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERJR0lUUyA9Ci0gICAgICAgICJcdTAwMzBcdTAwMzlcdTA2NjBcdTA2NjlcdTA2RjBcdTA2RjlcdTA5NjZcdTA5NkZcdTA5RTZcdTA5RUZcdTBBNjZcdTBBNkZcdTBBRTZcdTBBRUYiCi0gICAgICAgICsiXHUwQjY2XHUwQjZGXHUwQkU3XHUwQkVGXHUwQzY2XHUwQzZGXHUwQ0U2XHUwQ0VGXHUwRDY2XHUwRDZGXHUwRTUwXHUwRTU5XHUwRUQwXHUwRUQ5IgotICAgICAgICArIlx1MEYyMFx1MEYyOSI7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3JlZ2V4L1JFQURNRS50eHQgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3JlZ2V4L1JFQURNRS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjZjExNjcuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9yZWdleC9SRUFETUUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotVGhpcyBpcyBhbiBpc29sYXRlZCBkaXJlY3RvcnkgdGhhdCB3YXMgdGFrZW4gZnJvbSB0aGUKLUFwYWNoZSBYZXJjZXMtSiAyLjAgcHJvamVjdC4KLQotSXQgY29udGFpbnMgdGhlIGZvbGxvd2luZyBtb2RpZmljYXRpb25zOgotCi0oMSkgYSBjaGFuZ2UgaW4gbmFtZXNwYWNlLgotKDIpIHRoZSBhZGRpdGlvbiBvZiBhIFNjaGVtYVJlZ3VsYXJFeHByZXNzaW9uIGNsYXNzIGZvciBmYXN0Ci0gICAgZGV0ZWN0aW9uIG9mIE5DTkFNRSwgZXRjLgotCi1ObyB4YmVhbiBjb2RlIG91dHNpZGUgdGhpcyBkaXJlY3Rvcnkgb3Igb3RoZXIgZGlyZWN0b3JpZXMgd2l0aAotc2ltaWxhciBSRUFETUUgbm90aWNlcyB3YXMgdGFrZW4gZnJvbSBBcGFjaGUuCmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3JlZ2V4L1JFVXRpbC5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9yZWdleC9SRVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJjNzE2OC4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3JlZ2V4L1JFVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzY3ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnJlZ2V4OwotCi1pbXBvcnQgamF2YS50ZXh0LkNoYXJhY3Rlckl0ZXJhdG9yOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgUkVVdGlsIHsKLSAgICBwcml2YXRlIFJFVXRpbCgpIHsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZmluYWwgaW50IGNvbXBvc2VGcm9tU3Vycm9nYXRlcyhpbnQgaGlnaCwgaW50IGxvdykgewotICAgICAgICByZXR1cm4gMHgxMDAwMCArICgoaGlnaC0weGQ4MDApPDwxMCkgKyBsb3ctMHhkYzAwOwotICAgIH0KLQotICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIGlzTG93U3Vycm9nYXRlKGludCBjaCkgewotICAgICAgICByZXR1cm4gKGNoICYgMHhmYzAwKSA9PSAweGRjMDA7Ci0gICAgfQotCi0gICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gaXNIaWdoU3Vycm9nYXRlKGludCBjaCkgewotICAgICAgICByZXR1cm4gKGNoICYgMHhmYzAwKSA9PSAweGQ4MDA7Ci0gICAgfQotCi0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBkZWNvbXBvc2VUb1N1cnJvZ2F0ZXMoaW50IGNoKSB7Ci0gICAgICAgIGNoYXJbXSBjaHMgPSBuZXcgY2hhclsyXTsKLSAgICAgICAgY2ggLT0gMHgxMDAwMDsKLSAgICAgICAgY2hzWzBdID0gKGNoYXIpKChjaD4+MTApKzB4ZDgwMCk7Ci0gICAgICAgIGNoc1sxXSA9IChjaGFyKSgoY2gmMHgzZmYpKzB4ZGMwMCk7Ci0gICAgICAgIHJldHVybiBuZXcgU3RyaW5nKGNocyk7Ci0gICAgfQotCi0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBzdWJzdHJpbmcoQ2hhcmFjdGVySXRlcmF0b3IgaXRlcmF0b3IsIGludCBiZWdpbiwgaW50IGVuZCkgewotICAgICAgICBjaGFyW10gc3JjID0gbmV3IGNoYXJbZW5kLWJlZ2luXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7ICBpIDwgc3JjLmxlbmd0aDsgIGkgKyspCi0gICAgICAgICAgICBzcmNbaV0gPSBpdGVyYXRvci5zZXRJbmRleChpK2JlZ2luKTsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoc3JjKTsKLSAgICB9Ci0KLSAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgICBzdGF0aWMgZmluYWwgaW50IGdldE9wdGlvblZhbHVlKGludCBjaCkgewotICAgICAgICBpbnQgcmV0ID0gMDsKLSAgICAgICAgc3dpdGNoIChjaCkgewotICAgICAgICAgIGNhc2UgJ2knOgotICAgICAgICAgICAgcmV0ID0gUmVndWxhckV4cHJlc3Npb24uSUdOT1JFX0NBU0U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICdtJzoKLSAgICAgICAgICAgIHJldCA9IFJlZ3VsYXJFeHByZXNzaW9uLk1VTFRJUExFX0xJTkVTOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAncyc6Ci0gICAgICAgICAgICByZXQgPSBSZWd1bGFyRXhwcmVzc2lvbi5TSU5HTEVfTElORTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ3gnOgotICAgICAgICAgICAgcmV0ID0gUmVndWxhckV4cHJlc3Npb24uRVhURU5ERURfQ09NTUVOVDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ3UnOgotICAgICAgICAgICAgcmV0ID0gUmVndWxhckV4cHJlc3Npb24uVVNFX1VOSUNPREVfQ0FURUdPUlk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICd3JzoKLSAgICAgICAgICAgIHJldCA9IFJlZ3VsYXJFeHByZXNzaW9uLlVOSUNPREVfV09SRF9CT1VOREFSWTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ0YnOgotICAgICAgICAgICAgcmV0ID0gUmVndWxhckV4cHJlc3Npb24uUFJPSElCSVRfRklYRURfU1RSSU5HX09QVElNSVpBVElPTjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ0gnOgotICAgICAgICAgICAgcmV0ID0gUmVndWxhckV4cHJlc3Npb24uUFJPSElCSVRfSEVBRF9DSEFSQUNURVJfT1BUSU1JWkFUSU9OOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAnWCc6Ci0gICAgICAgICAgICByZXQgPSBSZWd1bGFyRXhwcmVzc2lvbi5YTUxTQ0hFTUFfTU9ERTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJywnOgotICAgICAgICAgICAgcmV0ID0gUmVndWxhckV4cHJlc3Npb24uU1BFQ0lBTF9DT01NQTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZmluYWwgaW50IHBhcnNlT3B0aW9ucyhTdHJpbmcgb3B0cykgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKG9wdHMgPT0gbnVsbCkgIHJldHVybiAwOwotICAgICAgICBpbnQgb3B0aW9ucyA9IDA7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyAgaSA8IG9wdHMubGVuZ3RoKCk7ICBpICsrKSB7Ci0gICAgICAgICAgICBpbnQgdiA9IGdldE9wdGlvblZhbHVlKG9wdHMuY2hhckF0KGkpKTsKLSAgICAgICAgICAgIGlmICh2ID09IDApCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlRXhjZXB0aW9uKCJVbmtub3duIE9wdGlvbjogIitvcHRzLnN1YnN0cmluZyhpKSwgLTEpOwotICAgICAgICAgICAgb3B0aW9ucyB8PSB2OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBvcHRpb25zOwotICAgIH0KLQotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgY3JlYXRlT3B0aW9uU3RyaW5nKGludCBvcHRpb25zKSB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoOSk7Ci0gICAgICAgIGlmICgob3B0aW9ucyAmIFJlZ3VsYXJFeHByZXNzaW9uLlBST0hJQklUX0ZJWEVEX1NUUklOR19PUFRJTUlaQVRJT04pICE9IDApCi0gICAgICAgICAgICBzYi5hcHBlbmQoKGNoYXIpJ0YnKTsKLSAgICAgICAgaWYgKChvcHRpb25zICYgUmVndWxhckV4cHJlc3Npb24uUFJPSElCSVRfSEVBRF9DSEFSQUNURVJfT1BUSU1JWkFUSU9OKSAhPSAwKQotICAgICAgICAgICAgc2IuYXBwZW5kKChjaGFyKSdIJyk7Ci0gICAgICAgIGlmICgob3B0aW9ucyAmIFJlZ3VsYXJFeHByZXNzaW9uLlhNTFNDSEVNQV9NT0RFKSAhPSAwKQotICAgICAgICAgICAgc2IuYXBwZW5kKChjaGFyKSdYJyk7Ci0gICAgICAgIGlmICgob3B0aW9ucyAmIFJlZ3VsYXJFeHByZXNzaW9uLklHTk9SRV9DQVNFKSAhPSAwKQotICAgICAgICAgICAgc2IuYXBwZW5kKChjaGFyKSdpJyk7Ci0gICAgICAgIGlmICgob3B0aW9ucyAmIFJlZ3VsYXJFeHByZXNzaW9uLk1VTFRJUExFX0xJTkVTKSAhPSAwKQotICAgICAgICAgICAgc2IuYXBwZW5kKChjaGFyKSdtJyk7Ci0gICAgICAgIGlmICgob3B0aW9ucyAmIFJlZ3VsYXJFeHByZXNzaW9uLlNJTkdMRV9MSU5FKSAhPSAwKQotICAgICAgICAgICAgc2IuYXBwZW5kKChjaGFyKSdzJyk7Ci0gICAgICAgIGlmICgob3B0aW9ucyAmIFJlZ3VsYXJFeHByZXNzaW9uLlVTRV9VTklDT0RFX0NBVEVHT1JZKSAhPSAwKQotICAgICAgICAgICAgc2IuYXBwZW5kKChjaGFyKSd1Jyk7Ci0gICAgICAgIGlmICgob3B0aW9ucyAmIFJlZ3VsYXJFeHByZXNzaW9uLlVOSUNPREVfV09SRF9CT1VOREFSWSkgIT0gMCkKLSAgICAgICAgICAgIHNiLmFwcGVuZCgoY2hhcikndycpOwotICAgICAgICBpZiAoKG9wdGlvbnMgJiBSZWd1bGFyRXhwcmVzc2lvbi5FWFRFTkRFRF9DT01NRU5UKSAhPSAwKQotICAgICAgICAgICAgc2IuYXBwZW5kKChjaGFyKSd4Jyk7Ci0gICAgICAgIGlmICgob3B0aW9ucyAmIFJlZ3VsYXJFeHByZXNzaW9uLlNQRUNJQUxfQ09NTUEpICE9IDApCi0gICAgICAgICAgICBzYi5hcHBlbmQoKGNoYXIpJywnKTsKLSAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCkuaW50ZXJuKCk7Ci0gICAgfQotCi0gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gICAgc3RhdGljIFN0cmluZyBzdHJpcEV4dGVuZGVkQ29tbWVudChTdHJpbmcgcmVnZXgpIHsKLSAgICAgICAgaW50IGxlbiA9IHJlZ2V4Lmxlbmd0aCgpOwotICAgICAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcihsZW4pOwotICAgICAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICAgICAgd2hpbGUgKG9mZnNldCA8IGxlbikgewotICAgICAgICAgICAgaW50IGNoID0gcmVnZXguY2hhckF0KG9mZnNldCsrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNraXBzIGEgd2hpdGUgc3BhY2UuCi0gICAgICAgICAgICBpZiAoY2ggPT0gJ1x0JyB8fCBjaCA9PSAnXG4nIHx8IGNoID09ICdcZicgfHwgY2ggPT0gJ1xyJyB8fCBjaCA9PSAnICcpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmIChjaCA9PSAnIycpIHsgICAgICAgICAgICAgICAgICAgIC8vIFNraXBzIGNocmFjdGVycyBiZXR3ZWVuICcjJyBhbmQgYSBsaW5lIGVuZC4KLSAgICAgICAgICAgICAgICB3aGlsZSAob2Zmc2V0IDwgbGVuKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoID0gcmVnZXguY2hhckF0KG9mZnNldCsrKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICdccicgfHwgY2ggPT0gJ1xuJykKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaW50IG5leHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RyaXBzIGFuIGVzY2FwZWQgd2hpdGUgc3BhY2UuCi0gICAgICAgICAgICBpZiAoY2ggPT0gJ1xcJyAmJiBvZmZzZXQgPCBsZW4pIHsKLSAgICAgICAgICAgICAgICBpZiAoKG5leHQgPSByZWdleC5jaGFyQXQob2Zmc2V0KSkgPT0gJyMnCi0gICAgICAgICAgICAgICAgICAgIHx8IG5leHQgPT0gJ1x0JyB8fCBuZXh0ID09ICdcbicgfHwgbmV4dCA9PSAnXGYnCi0gICAgICAgICAgICAgICAgICAgIHx8IG5leHQgPT0gJ1xyJyB8fCBuZXh0ID09ICcgJykgewotICAgICAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKChjaGFyKW5leHQpOwotICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKys7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvLyBPdGhlciBlc2NhcGVkIGNoYXJhY3Rlci4KLSAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgoY2hhciknXFwnKTsKLSAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgoY2hhciluZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICsrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFzIGlzLgotICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoKGNoYXIpY2gpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgICAvKioKLSAgICAgKiBTYW1wbGUgZW50cnkuCi0gICAgICogPGRpdj5Vc2FnZTogPEtCRD5vcmcuYXBhY2hlLnhlcmNlcy51dGlscy5yZWdleC5SRVV0aWwgJmx0O3JlZ2V4Jmd0OyAmbHQ7c3RyaW5nJmd0OzwvS0JEPjwvZGl2PgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3YpIHsKLSAgICAgICAgU3RyaW5nIHBhdHRlcm4gPSBudWxsOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgU3RyaW5nIG9wdGlvbnMgPSAiIjsKLSAgICAgICAgICAgIFN0cmluZyB0YXJnZXQgPSBudWxsOwotICAgICAgICAgICAgaWYoIGFyZ3YubGVuZ3RoID09IDAgKSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiRXJyb3I6VXNhZ2U6IGphdmEgUkVVdGlsIC1pfC1tfC1zfC11fC13fC1YIHJlZ3VsYXJFeHByZXNzaW9uIFN0cmluZyIgKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCggMCApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7ICBpIDwgYXJndi5sZW5ndGg7ICBpICsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3ZbaV0ubGVuZ3RoKCkgPT0gMCB8fCBhcmd2W2ldLmNoYXJBdCgwKSAhPSAnLScpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhdHRlcm4gPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSBhcmd2W2ldOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0YXJnZXQgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IGFyZ3ZbaV07Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVW5uZWNlc3Nhcnk6ICIrYXJndltpXSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcmd2W2ldLmVxdWFscygiLWkiKSkgewotICAgICAgICAgICAgICAgICAgICBvcHRpb25zICs9ICJpIjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3ZbaV0uZXF1YWxzKCItbSIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgKz0gIm0iOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJndltpXS5lcXVhbHMoIi1zIikpIHsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyArPSAicyI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcmd2W2ldLmVxdWFscygiLXUiKSkgewotICAgICAgICAgICAgICAgICAgICBvcHRpb25zICs9ICJ1IjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3ZbaV0uZXF1YWxzKCItdyIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgKz0gInciOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJndltpXS5lcXVhbHMoIi1YIikpIHsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyArPSAiWCI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVbmtub3duIG9wdGlvbjogIithcmd2W2ldKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWd1bGFyRXhwcmVzc2lvbiByZWcgPSBuZXcgUmVndWxhckV4cHJlc3Npb24ocGF0dGVybiwgb3B0aW9ucyk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlZ3VsYXJFeHByZXNzaW9uOiAiK3JlZyk7Ci0gICAgICAgICAgICBNYXRjaCBtYXRjaCA9IG5ldyBNYXRjaCgpOwotICAgICAgICAgICAgcmVnLm1hdGNoZXModGFyZ2V0LCBtYXRjaCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgIGkgPCBtYXRjaC5nZXROdW1iZXJPZkdyb3VwcygpOyAgaSArKykgewotICAgICAgICAgICAgICAgIGlmIChpID09IDAgKSAgU3lzdGVtLm91dC5wcmludCgiTWF0Y2hlZCByYW5nZSBmb3IgdGhlIHdob2xlIHBhdHRlcm46ICIpOwotICAgICAgICAgICAgICAgIGVsc2UgU3lzdGVtLm91dC5wcmludCgiWyIraSsiXTogIik7Ci0gICAgICAgICAgICAgICAgaWYgKG1hdGNoLmdldEJlZ2lubmluZyhpKSA8IDApCi0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLTEiKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludChtYXRjaC5nZXRCZWdpbm5pbmcoaSkrIiwgIittYXRjaC5nZXRFbmQoaSkrIiwgIik7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXCIiK21hdGNoLmdldENhcHR1cmVkVGV4dChpKSsiXCIiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIHBlKSB7Ci0gICAgICAgICAgICBpZiAocGF0dGVybiA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigib3JnLmFwYWNoZS54ZXJjZXMudXRpbHMucmVnZXguUGFyc2VFeGNlcHRpb246ICIrcGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgaW5kZW50ID0gIiAgICAgICAgIjsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oaW5kZW50K3BhdHRlcm4pOwotICAgICAgICAgICAgICAgIGludCBsb2MgPSBwZS5nZXRMb2NhdGlvbigpOwotICAgICAgICAgICAgICAgIGlmIChsb2MgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50KGluZGVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyAgaSA8IGxvYzsgIGkgKyspICBTeXN0ZW0uZXJyLnByaW50KCItIik7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiXiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgZmluYWwgaW50IENBQ0hFU0laRSA9IDIwOwotICAgIHN0YXRpYyBmaW5hbCBSZWd1bGFyRXhwcmVzc2lvbltdIHJlZ2V4Q2FjaGUgPSBuZXcgUmVndWxhckV4cHJlc3Npb25bQ0FDSEVTSVpFXTsKLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgUmVndWxhckV4cHJlc3Npb24gaW5zdGFuY2UuCi0gICAgICogVGhpcyBtZXRob2QgY2FjaGVzIGNyZWF0ZWQgaW5zdGFuY2VzLgotICAgICAqCi0gICAgICogQHNlZXEgUmVndWxhckV4cHJlc3Npb24jUmVndWxhckV4cHJlc3Npb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFJlZ3VsYXJFeHByZXNzaW9uIGNyZWF0ZVJlZ2V4KFN0cmluZyBwYXR0ZXJuLCBTdHJpbmcgb3B0aW9ucykKLSAgICAgICAgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKLSAgICAgICAgUmVndWxhckV4cHJlc3Npb24gcmUgPSBudWxsOwotICAgICAgICBpbnQgaW50T3B0aW9ucyA9IFJFVXRpbC5wYXJzZU9wdGlvbnMob3B0aW9ucyk7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoUkVVdGlsLnJlZ2V4Q2FjaGUpIHsKLSAgICAgICAgICAgIGludCBpOwotICAgICAgICAgICAgZm9yIChpID0gMDsgIGkgPCBSRVV0aWwuQ0FDSEVTSVpFOyAgaSArKykgewotICAgICAgICAgICAgICAgIFJlZ3VsYXJFeHByZXNzaW9uIGNhY2hlZCA9IFJFVXRpbC5yZWdleENhY2hlW2ldOwotICAgICAgICAgICAgICAgIGlmIChjYWNoZWQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBpID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY2FjaGVkLmVxdWFscyhwYXR0ZXJuLCBpbnRPcHRpb25zKSkgewotICAgICAgICAgICAgICAgICAgICByZSA9IGNhY2hlZDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZiAoaSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoUkVVdGlsLnJlZ2V4Q2FjaGUsIDAsIFJFVXRpbC5yZWdleENhY2hlLCAxLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgUkVVdGlsLnJlZ2V4Q2FjaGVbMF0gPSByZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJlID0gbmV3IFJlZ3VsYXJFeHByZXNzaW9uKHBhdHRlcm4sIG9wdGlvbnMpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoUkVVdGlsLnJlZ2V4Q2FjaGUsIDAsIFJFVXRpbC5yZWdleENhY2hlLCAxLCBSRVV0aWwuQ0FDSEVTSVpFLTEpOwotICAgICAgICAgICAgICAgIFJFVXRpbC5yZWdleENhY2hlWzBdID0gcmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqCi0gICAgICogQHNlZSBSZWd1bGFyRXhwcmVzc2lvbiNtYXRjaGVzKGphdmEubGFuZy5TdHJpbmcpCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIG1hdGNoZXMoU3RyaW5nIHJlZ2V4LCBTdHJpbmcgdGFyZ2V0KSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gUkVVdGlsLmNyZWF0ZVJlZ2V4KHJlZ2V4LCBudWxsKS5tYXRjaGVzKHRhcmdldCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICoKLSAgICAgKiBAc2VlIFJlZ3VsYXJFeHByZXNzaW9uI21hdGNoZXMoamF2YS5sYW5nLlN0cmluZykKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gbWF0Y2hlcyhTdHJpbmcgcmVnZXgsIFN0cmluZyBvcHRpb25zLCBTdHJpbmcgdGFyZ2V0KSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gUkVVdGlsLmNyZWF0ZVJlZ2V4KHJlZ2V4LCBvcHRpb25zKS5tYXRjaGVzKHRhcmdldCk7Ci0gICAgfQotCi0gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBxdW90ZU1ldGEoU3RyaW5nIGxpdGVyYWwpIHsKLSAgICAgICAgaW50IGxlbiA9IGxpdGVyYWwubGVuZ3RoKCk7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBudWxsOwotICAgICAgICBmb3IgKGludCBpID0gMDsgIGkgPCBsZW47ICBpICsrKSB7Ci0gICAgICAgICAgICBpbnQgY2ggPSBsaXRlcmFsLmNoYXJBdChpKTsKLSAgICAgICAgICAgIGlmICgiLiorP3tbKCl8XFxeJCIuaW5kZXhPZihjaCkgPj0gMCkgewotICAgICAgICAgICAgICAgIGlmIChidWZmZXIgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKGkrKGxlbi1pKSoyKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGkgPiAwKSAgYnVmZmVyLmFwcGVuZChsaXRlcmFsLnN1YnN0cmluZygwLCBpKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoKGNoYXIpJ1xcJyk7Ci0gICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgoY2hhciljaCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGJ1ZmZlciAhPSBudWxsKQotICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoKGNoYXIpY2gpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBidWZmZXIgIT0gbnVsbCA/IGJ1ZmZlci50b1N0cmluZygpIDogbGl0ZXJhbDsKLSAgICB9Ci0KLSAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgICBzdGF0aWMgdm9pZCBkdW1wU3RyaW5nKFN0cmluZyB2KSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyAgaSA8IHYubGVuZ3RoKCk7ICBpICsrKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KEludGVnZXIudG9IZXhTdHJpbmcodi5jaGFyQXQoaSkpKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiAiKTsKLSAgICAgICAgfQotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3JlZ2V4L1JhbmdlVG9rZW4uamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvcmVnZXgvUmFuZ2VUb2tlbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDJiYmFhLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvcmVnZXgvUmFuZ2VUb2tlbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQ4ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnJlZ2V4OwotCi0vKioKLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIGNoYXJhY3RlciBjbGFzcyBzdWNoIGFzIFthLXpdIG9yIGEgcGVyaW9kLgotICovCi1maW5hbCBjbGFzcyBSYW5nZVRva2VuIGV4dGVuZHMgVG9rZW4gaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7Ci0KLSAgICBpbnRbXSByYW5nZXM7Ci0gICAgYm9vbGVhbiBzb3J0ZWQ7Ci0gICAgYm9vbGVhbiBjb21wYWN0ZWQ7Ci0gICAgUmFuZ2VUb2tlbiBpY2FzZUNhY2hlID0gbnVsbDsKLSAgICBpbnRbXSBtYXAgPSBudWxsOwotICAgIGludCBub25NYXBJbmRleDsKLQotICAgIFJhbmdlVG9rZW4oaW50IHR5cGUpIHsKLSAgICAgICAgc3VwZXIodHlwZSk7Ci0gICAgICAgIHRoaXMuc2V0U29ydGVkKGZhbHNlKTsKLSAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBSQU5HRSBvciBOUkFOR0UKLSAgICBwcm90ZWN0ZWQgdm9pZCBhZGRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpIHsKLSAgICAgICAgdGhpcy5pY2FzZUNhY2hlID0gbnVsbDsKLSAgICAgICAgLy9TeXN0ZW0uZXJyLnByaW50bG4oIlRva2VuI2FkZFJhbmdlKCk6ICIrc3RhcnQrIiAiK2VuZCk7Ci0gICAgICAgIGludCByMSwgcjI7Ci0gICAgICAgIGlmIChzdGFydCA8PSBlbmQpIHsKLSAgICAgICAgICAgIHIxID0gc3RhcnQ7Ci0gICAgICAgICAgICByMiA9IGVuZDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHIxID0gZW5kOwotICAgICAgICAgICAgcjIgPSBzdGFydDsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBwb3MgPSAwOwotICAgICAgICBpZiAodGhpcy5yYW5nZXMgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhpcy5yYW5nZXMgPSBuZXcgaW50WzJdOwotICAgICAgICAgICAgdGhpcy5yYW5nZXNbMF0gPSByMTsKLSAgICAgICAgICAgIHRoaXMucmFuZ2VzWzFdID0gcjI7Ci0gICAgICAgICAgICB0aGlzLnNldFNvcnRlZCh0cnVlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBvcyA9IHRoaXMucmFuZ2VzLmxlbmd0aDsKLSAgICAgICAgICAgIGlmICh0aGlzLnJhbmdlc1twb3MtMV0rMSA9PSByMSkgewotICAgICAgICAgICAgICAgIHRoaXMucmFuZ2VzW3Bvcy0xXSA9IHIyOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGludFtdIHRlbXAgPSBuZXcgaW50W3BvcysyXTsKLSAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkodGhpcy5yYW5nZXMsIDAsIHRlbXAsIDAsIHBvcyk7Ci0gICAgICAgICAgICB0aGlzLnJhbmdlcyA9IHRlbXA7Ci0gICAgICAgICAgICBpZiAodGhpcy5yYW5nZXNbcG9zLTFdID49IHIxKQotICAgICAgICAgICAgICAgIHRoaXMuc2V0U29ydGVkKGZhbHNlKTsKLSAgICAgICAgICAgIHRoaXMucmFuZ2VzW3BvcysrXSA9IHIxOwotICAgICAgICAgICAgdGhpcy5yYW5nZXNbcG9zXSA9IHIyOwotICAgICAgICAgICAgaWYgKCF0aGlzLnNvcnRlZCkKLSAgICAgICAgICAgICAgICB0aGlzLnNvcnRSYW5nZXMoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBpc1NvcnRlZCgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuc29ydGVkOwotICAgIH0KLSAgICBwcml2YXRlIGZpbmFsIHZvaWQgc2V0U29ydGVkKGJvb2xlYW4gc29ydCkgewotICAgICAgICB0aGlzLnNvcnRlZCA9IHNvcnQ7Ci0gICAgICAgIGlmICghc29ydCkgIHRoaXMuY29tcGFjdGVkID0gZmFsc2U7Ci0gICAgfQotICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBpc0NvbXBhY3RlZCgpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFjdGVkOwotICAgIH0KLSAgICBwcml2YXRlIGZpbmFsIHZvaWQgc2V0Q29tcGFjdGVkKCkgewotICAgICAgICB0aGlzLmNvbXBhY3RlZCA9IHRydWU7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgc29ydFJhbmdlcygpIHsKLSAgICAgICAgaWYgKHRoaXMuaXNTb3J0ZWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKHRoaXMucmFuZ2VzID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIC8vU3lzdGVtLmVyci5wcmludGxuKCJEbyBzb3J0aW5nOiAiK3RoaXMucmFuZ2VzLmxlbmd0aCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1YmJsZSBzb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaHk/IC0tIEluIG1hbnkgY2FzZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIHRoaXMucmFuZ2VzIGhhcyBmZXcgZWxlbWVudHMuCi0gICAgICAgIGZvciAoaW50IGkgPSB0aGlzLnJhbmdlcy5sZW5ndGgtNDsgIGkgPj0gMDsgIGkgLT0gMikgewotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7ICBqIDw9IGk7ICBqICs9IDIpIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5yYW5nZXNbal0gPiB0aGlzLnJhbmdlc1tqKzJdCi0gICAgICAgICAgICAgICAgICAgIHx8IHRoaXMucmFuZ2VzW2pdID09IHRoaXMucmFuZ2VzW2orMl0gJiYgdGhpcy5yYW5nZXNbaisxXSA+IHRoaXMucmFuZ2VzW2orM10pIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHRtcDsKLSAgICAgICAgICAgICAgICAgICAgdG1wID0gdGhpcy5yYW5nZXNbaisyXTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5yYW5nZXNbaisyXSA9IHRoaXMucmFuZ2VzW2pdOwotICAgICAgICAgICAgICAgICAgICB0aGlzLnJhbmdlc1tqXSA9IHRtcDsKLSAgICAgICAgICAgICAgICAgICAgdG1wID0gdGhpcy5yYW5nZXNbaiszXTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5yYW5nZXNbaiszXSA9IHRoaXMucmFuZ2VzW2orMV07Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMucmFuZ2VzW2orMV0gPSB0bXA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHRoaXMuc2V0U29ydGVkKHRydWUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIHRoaXMucmFuZ2VzIGlzIHNvcnRlZC4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBjb21wYWN0UmFuZ2VzKCkgewotICAgICAgICBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0gICAgICAgIGlmICh0aGlzLnJhbmdlcyA9PSBudWxsIHx8IHRoaXMucmFuZ2VzLmxlbmd0aCA8PSAyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAodGhpcy5pc0NvbXBhY3RlZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpbnQgYmFzZSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5kZXggb2Ygd3JpdGluZyBwb2ludAotICAgICAgICBpbnQgdGFyZ2V0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5kZXggb2YgcHJvY2Vzc2luZyBwb2ludAotCi0gICAgICAgIHdoaWxlICh0YXJnZXQgPCB0aGlzLnJhbmdlcy5sZW5ndGgpIHsKLSAgICAgICAgICAgIGlmIChiYXNlICE9IHRhcmdldCkgewotICAgICAgICAgICAgICAgIHRoaXMucmFuZ2VzW2Jhc2VdID0gdGhpcy5yYW5nZXNbdGFyZ2V0KytdOwotICAgICAgICAgICAgICAgIHRoaXMucmFuZ2VzW2Jhc2UrMV0gPSB0aGlzLnJhbmdlc1t0YXJnZXQrK107Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICB0YXJnZXQgKz0gMjsKLSAgICAgICAgICAgIGludCBiYXNlZW5kID0gdGhpcy5yYW5nZXNbYmFzZSsxXTsKLSAgICAgICAgICAgIHdoaWxlICh0YXJnZXQgPCB0aGlzLnJhbmdlcy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBpZiAoYmFzZWVuZCsxIDwgdGhpcy5yYW5nZXNbdGFyZ2V0XSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VlbmQrMSA9PSB0aGlzLnJhbmdlc1t0YXJnZXRdKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykKLSAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVG9rZW4jY29tcGFjdFJhbmdlcygpOiBDb21wYWN0aW9uOiBbIit0aGlzLnJhbmdlc1tiYXNlXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsiLCAiK3RoaXMucmFuZ2VzW2Jhc2UrMV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIl0sIFsiK3RoaXMucmFuZ2VzW3RhcmdldF0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIiwgIit0aGlzLnJhbmdlc1t0YXJnZXQrMV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIl0gLT4gWyIrdGhpcy5yYW5nZXNbYmFzZV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIiwgIit0aGlzLnJhbmdlc1t0YXJnZXQrMV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIl0iKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5yYW5nZXNbYmFzZSsxXSA9IHRoaXMucmFuZ2VzW3RhcmdldCsxXTsKLSAgICAgICAgICAgICAgICAgICAgYmFzZWVuZCA9IHRoaXMucmFuZ2VzW2Jhc2UrMV07Ci0gICAgICAgICAgICAgICAgICAgIHRhcmdldCArPSAyOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYmFzZWVuZCA+PSB0aGlzLnJhbmdlc1t0YXJnZXQrMV0pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKQotICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJUb2tlbiNjb21wYWN0UmFuZ2VzKCk6IENvbXBhY3Rpb246IFsiK3RoaXMucmFuZ2VzW2Jhc2VdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyIsICIrdGhpcy5yYW5nZXNbYmFzZSsxXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsiXSwgWyIrdGhpcy5yYW5nZXNbdGFyZ2V0XQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsiLCAiK3RoaXMucmFuZ2VzW3RhcmdldCsxXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsiXSAtPiBbIit0aGlzLnJhbmdlc1tiYXNlXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsiLCAiK3RoaXMucmFuZ2VzW2Jhc2UrMV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIl0iKTsKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ICs9IDI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiYXNlZW5kIDwgdGhpcy5yYW5nZXNbdGFyZ2V0KzFdKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChERUJVRykKLSAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVG9rZW4jY29tcGFjdFJhbmdlcygpOiBDb21wYWN0aW9uOiBbIit0aGlzLnJhbmdlc1tiYXNlXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsiLCAiK3RoaXMucmFuZ2VzW2Jhc2UrMV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIl0sIFsiK3RoaXMucmFuZ2VzW3RhcmdldF0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIiwgIit0aGlzLnJhbmdlc1t0YXJnZXQrMV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIl0gLT4gWyIrdGhpcy5yYW5nZXNbYmFzZV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIiwgIit0aGlzLnJhbmdlc1t0YXJnZXQrMV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIl0iKTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5yYW5nZXNbYmFzZSsxXSA9IHRoaXMucmFuZ2VzW3RhcmdldCsxXTsKLSAgICAgICAgICAgICAgICAgICAgYmFzZWVuZCA9IHRoaXMucmFuZ2VzW2Jhc2UrMV07Ci0gICAgICAgICAgICAgICAgICAgIHRhcmdldCArPSAyOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUb2tlbiNjb21wYWN0UmFuZ2VzKCk6IEludGVybmVsIEVycm9yOiBbIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArdGhpcy5yYW5nZXNbYmFzZV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyIsIit0aGlzLnJhbmdlc1tiYXNlKzFdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsiXSBbIit0aGlzLnJhbmdlc1t0YXJnZXRdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsiLCIrdGhpcy5yYW5nZXNbdGFyZ2V0KzFdKyJdIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSAvLyB3aGlsZQotICAgICAgICAgICAgYmFzZSArPSAyOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJhc2UgIT0gdGhpcy5yYW5nZXMubGVuZ3RoKSB7Ci0gICAgICAgICAgICBpbnRbXSByZXN1bHQgPSBuZXcgaW50W2Jhc2VdOwotICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSh0aGlzLnJhbmdlcywgMCwgcmVzdWx0LCAwLCBiYXNlKTsKLSAgICAgICAgICAgIHRoaXMucmFuZ2VzID0gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuc2V0Q29tcGFjdGVkKCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgbWVyZ2VSYW5nZXMoVG9rZW4gdG9rZW4pIHsKLSAgICAgICAgUmFuZ2VUb2tlbiB0b2sgPSAoUmFuZ2VUb2tlbil0b2tlbjsKLSAgICAgICAgdGhpcy5zb3J0UmFuZ2VzKCk7Ci0gICAgICAgIHRvay5zb3J0UmFuZ2VzKCk7Ci0gICAgICAgIGlmICh0b2sucmFuZ2VzID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMuaWNhc2VDYWNoZSA9IG51bGw7Ci0gICAgICAgIHRoaXMuc2V0U29ydGVkKHRydWUpOwotICAgICAgICBpZiAodGhpcy5yYW5nZXMgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhpcy5yYW5nZXMgPSBuZXcgaW50W3Rvay5yYW5nZXMubGVuZ3RoXTsKLSAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkodG9rLnJhbmdlcywgMCwgdGhpcy5yYW5nZXMsIDAsIHRvay5yYW5nZXMubGVuZ3RoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpbnRbXSByZXN1bHQgPSBuZXcgaW50W3RoaXMucmFuZ2VzLmxlbmd0aCt0b2sucmFuZ2VzLmxlbmd0aF07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwLCBqID0gMCwgayA9IDA7ICBpIDwgdGhpcy5yYW5nZXMubGVuZ3RoIHx8IGogPCB0b2sucmFuZ2VzLmxlbmd0aDspIHsKLSAgICAgICAgICAgIGlmIChpID49IHRoaXMucmFuZ2VzLmxlbmd0aCkgewotICAgICAgICAgICAgICAgIHJlc3VsdFtrKytdID0gdG9rLnJhbmdlc1tqKytdOwotICAgICAgICAgICAgICAgIHJlc3VsdFtrKytdID0gdG9rLnJhbmdlc1tqKytdOwotICAgICAgICAgICAgfSBlbHNlIGlmIChqID49IHRvay5yYW5nZXMubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0W2srK10gPSB0aGlzLnJhbmdlc1tpKytdOwotICAgICAgICAgICAgICAgIHJlc3VsdFtrKytdID0gdGhpcy5yYW5nZXNbaSsrXTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rLnJhbmdlc1tqXSA8IHRoaXMucmFuZ2VzW2ldCi0gICAgICAgICAgICAgICAgICAgICAgIHx8IHRvay5yYW5nZXNbal0gPT0gdGhpcy5yYW5nZXNbaV0gJiYgdG9rLnJhbmdlc1tqKzFdIDwgdGhpcy5yYW5nZXNbaSsxXSkgewotICAgICAgICAgICAgICAgIHJlc3VsdFtrKytdID0gdG9rLnJhbmdlc1tqKytdOwotICAgICAgICAgICAgICAgIHJlc3VsdFtrKytdID0gdG9rLnJhbmdlc1tqKytdOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXN1bHRbaysrXSA9IHRoaXMucmFuZ2VzW2krK107Ci0gICAgICAgICAgICAgICAgcmVzdWx0W2srK10gPSB0aGlzLnJhbmdlc1tpKytdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHRoaXMucmFuZ2VzID0gcmVzdWx0OwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHN1YnRyYWN0UmFuZ2VzKFRva2VuIHRva2VuKSB7Ci0gICAgICAgIGlmICh0b2tlbi50eXBlID09IE5SQU5HRSkgewotICAgICAgICAgICAgdGhpcy5pbnRlcnNlY3RSYW5nZXModG9rZW4pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIFJhbmdlVG9rZW4gdG9rID0gKFJhbmdlVG9rZW4pdG9rZW47Ci0gICAgICAgIGlmICh0b2sucmFuZ2VzID09IG51bGwgfHwgdGhpcy5yYW5nZXMgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5pY2FzZUNhY2hlID0gbnVsbDsKLSAgICAgICAgdGhpcy5zb3J0UmFuZ2VzKCk7Ci0gICAgICAgIHRoaXMuY29tcGFjdFJhbmdlcygpOwotICAgICAgICB0b2suc29ydFJhbmdlcygpOwotICAgICAgICB0b2suY29tcGFjdFJhbmdlcygpOwotCi0gICAgICAgIC8vU3lzdGVtLmVyci5wcmludGxuKCJUb2tlbiNzdWJzdHJhY3RSYW5nZXMoKTogRW50cnk6ICIrdGhpcy5yYW5nZXMubGVuZ3RoKyIsICIrdG9rLnJhbmdlcy5sZW5ndGgpOwotCi0gICAgICAgIGludFtdIHJlc3VsdCA9IG5ldyBpbnRbdGhpcy5yYW5nZXMubGVuZ3RoK3Rvay5yYW5nZXMubGVuZ3RoXTsKLSAgICAgICAgaW50IHdwID0gMCwgc3JjID0gMCwgc3ViID0gMDsKLSAgICAgICAgd2hpbGUgKHNyYyA8IHRoaXMucmFuZ2VzLmxlbmd0aCAmJiBzdWIgPCB0b2sucmFuZ2VzLmxlbmd0aCkgewotICAgICAgICAgICAgaW50IHNyY2JlZ2luID0gdGhpcy5yYW5nZXNbc3JjXTsKLSAgICAgICAgICAgIGludCBzcmNlbmQgPSB0aGlzLnJhbmdlc1tzcmMrMV07Ci0gICAgICAgICAgICBpbnQgc3ViYmVnaW4gPSB0b2sucmFuZ2VzW3N1Yl07Ci0gICAgICAgICAgICBpbnQgc3ViZW5kID0gdG9rLnJhbmdlc1tzdWIrMV07Ci0gICAgICAgICAgICBpZiAoc3JjZW5kIDwgc3ViYmVnaW4pIHsgICAgICAgICAgICAvLyBOb3Qgb3ZlcmxhcHBlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3JjOiBvLS0tLS1vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdWI6ICAgICAgICAgby0tLS0tbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzOiBvLS0tLS1vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXVzZSBzdWIKLSAgICAgICAgICAgICAgICByZXN1bHRbd3ArK10gPSB0aGlzLnJhbmdlc1tzcmMrK107Ci0gICAgICAgICAgICAgICAgcmVzdWx0W3dwKytdID0gdGhpcy5yYW5nZXNbc3JjKytdOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzcmNlbmQgPj0gc3ViYmVnaW4KLSAgICAgICAgICAgICAgICAgICAgICAgJiYgc3JjYmVnaW4gPD0gc3ViZW5kKSB7IC8vIE92ZXJsYXBwZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNyYzogICAgby0tLS0tLS0tbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3ViOiAgby0tLS1vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdWI6ICAgICAgby0tLS1vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdWI6ICAgICAgICAgIG8tLS0tbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3ViOiAgby0tLS0tLS0tLS0tLW8KLSAgICAgICAgICAgICAgICBpZiAoc3ViYmVnaW4gPD0gc3JjYmVnaW4gJiYgc3JjZW5kIDw9IHN1YmVuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3JjOiAgICBvLS0tLS0tLS1vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdWI6ICBvLS0tLS0tLS0tLS0tbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzOiBlbXB0eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV1c2Ugc3ViCi0gICAgICAgICAgICAgICAgICAgIHNyYyArPSAyOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ViYmVnaW4gPD0gc3JjYmVnaW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNyYzogICAgby0tLS0tLS0tbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3ViOiAgby0tLS1vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXM6ICAgICAgIG8tLS0tLW8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldXNlIHNyYyg9cmVzKQotICAgICAgICAgICAgICAgICAgICB0aGlzLnJhbmdlc1tzcmNdID0gc3ViZW5kKzE7Ci0gICAgICAgICAgICAgICAgICAgIHN1YiArPSAyOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3JjZW5kIDw9IHN1YmVuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3JjOiAgICBvLS0tLS0tLS1vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdWI6ICAgICAgICAgIG8tLS0tbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzOiAgICBvLS0tLS1vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXVzZSBzdWIKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0W3dwKytdID0gc3JjYmVnaW47Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFt3cCsrXSA9IHN1YmJlZ2luLTE7Ci0gICAgICAgICAgICAgICAgICAgIHNyYyArPSAyOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzcmM6ICAgIG8tLS0tLS0tLW8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1YjogICAgICBvLS0tLW8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlczogICAgby1vICAgIG8tbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV1c2Ugc3JjKD1yaWdodCByZXMpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFt3cCsrXSA9IHNyY2JlZ2luOwotICAgICAgICAgICAgICAgICAgICByZXN1bHRbd3ArK10gPSBzdWJiZWdpbi0xOwotICAgICAgICAgICAgICAgICAgICB0aGlzLnJhbmdlc1tzcmNdID0gc3ViZW5kKzE7Ci0gICAgICAgICAgICAgICAgICAgIHN1YiArPSAyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3ViZW5kIDwgc3JjYmVnaW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdCBvdmVybGFwcGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzcmM6ICAgICAgICAgIG8tLS0tLW8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN1Yjogby0tLS1vCi0gICAgICAgICAgICAgICAgc3ViICs9IDI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUb2tlbiNzdWJ0cmFjdFJhbmdlcygpOiBJbnRlcm5hbCBFcnJvcjogWyIrdGhpcy5yYW5nZXNbc3JjXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsiLCIrdGhpcy5yYW5nZXNbc3JjKzFdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyJdIC0gWyIrdG9rLnJhbmdlc1tzdWJdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyIsIit0b2sucmFuZ2VzW3N1YisxXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsiXSIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChzcmMgPCB0aGlzLnJhbmdlcy5sZW5ndGgpIHsKLSAgICAgICAgICAgIHJlc3VsdFt3cCsrXSA9IHRoaXMucmFuZ2VzW3NyYysrXTsKLSAgICAgICAgICAgIHJlc3VsdFt3cCsrXSA9IHRoaXMucmFuZ2VzW3NyYysrXTsKLSAgICAgICAgfQotICAgICAgICB0aGlzLnJhbmdlcyA9IG5ldyBpbnRbd3BdOwotICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHJlc3VsdCwgMCwgdGhpcy5yYW5nZXMsIDAsIHdwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMucmFuZ2VzIGlzIHNvcnRlZCBhbmQgY29tcGFjdGVkLgotICAgIH0KLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB0b2sgSWdub3JlIHdoZXRoZXIgaXQgaXMgTlJBTkdFIG9yIG5vdC4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbnRlcnNlY3RSYW5nZXMoVG9rZW4gdG9rZW4pIHsKLSAgICAgICAgUmFuZ2VUb2tlbiB0b2sgPSAoUmFuZ2VUb2tlbil0b2tlbjsKLSAgICAgICAgaWYgKHRvay5yYW5nZXMgPT0gbnVsbCB8fCB0aGlzLnJhbmdlcyA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLmljYXNlQ2FjaGUgPSBudWxsOwotICAgICAgICB0aGlzLnNvcnRSYW5nZXMoKTsKLSAgICAgICAgdGhpcy5jb21wYWN0UmFuZ2VzKCk7Ci0gICAgICAgIHRvay5zb3J0UmFuZ2VzKCk7Ci0gICAgICAgIHRvay5jb21wYWN0UmFuZ2VzKCk7Ci0KLSAgICAgICAgaW50W10gcmVzdWx0ID0gbmV3IGludFt0aGlzLnJhbmdlcy5sZW5ndGgrdG9rLnJhbmdlcy5sZW5ndGhdOwotICAgICAgICBpbnQgd3AgPSAwLCBzcmMxID0gMCwgc3JjMiA9IDA7Ci0gICAgICAgIHdoaWxlIChzcmMxIDwgdGhpcy5yYW5nZXMubGVuZ3RoICYmIHNyYzIgPCB0b2sucmFuZ2VzLmxlbmd0aCkgewotICAgICAgICAgICAgaW50IHNyYzFiZWdpbiA9IHRoaXMucmFuZ2VzW3NyYzFdOwotICAgICAgICAgICAgaW50IHNyYzFlbmQgPSB0aGlzLnJhbmdlc1tzcmMxKzFdOwotICAgICAgICAgICAgaW50IHNyYzJiZWdpbiA9IHRvay5yYW5nZXNbc3JjMl07Ci0gICAgICAgICAgICBpbnQgc3JjMmVuZCA9IHRvay5yYW5nZXNbc3JjMisxXTsKLSAgICAgICAgICAgIGlmIChzcmMxZW5kIDwgc3JjMmJlZ2luKSB7ICAgICAgICAgIC8vIE5vdCBvdmVybGFwcGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzcmMxOiBvLS0tLS1vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzcmMyOiAgICAgICAgIG8tLS0tLW8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlczogIGVtcHR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXVzZSBzcmMyCi0gICAgICAgICAgICAgICAgc3JjMSArPSAyOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzcmMxZW5kID49IHNyYzJiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAmJiBzcmMxYmVnaW4gPD0gc3JjMmVuZCkgeyAvLyBPdmVybGFwcGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzcmMxOiAgICBvLS0tLS0tLS1vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzcmMyOiAgby0tLS1vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzcmMyOiAgICAgIG8tLS0tbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3JjMjogICAgICAgICAgby0tLS1vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzcmMyOiAgby0tLS0tLS0tLS0tLW8KLSAgICAgICAgICAgICAgICBpZiAoc3JjMmJlZ2luIDw9IHNyYzJiZWdpbiAmJiBzcmMxZW5kIDw9IHNyYzJlbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNyYzE6ICAgIG8tLS0tLS0tLW8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNyYzI6ICBvLS0tLS0tLS0tLS0tbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzOiAgICAgby0tLS0tLS0tbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV1c2Ugc3JjMgotICAgICAgICAgICAgICAgICAgICByZXN1bHRbd3ArK10gPSBzcmMxYmVnaW47Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFt3cCsrXSA9IHNyYzFlbmQ7Ci0gICAgICAgICAgICAgICAgICAgIHNyYzEgKz0gMjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNyYzJiZWdpbiA8PSBzcmMxYmVnaW4pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNyYzE6ICAgIG8tLS0tLS0tLW8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNyYzI6ICBvLS0tLW8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlczogICAgIG8tLW8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldXNlIHRoZSByZXN0IG9mIHNyYzEKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0W3dwKytdID0gc3JjMWJlZ2luOwotICAgICAgICAgICAgICAgICAgICByZXN1bHRbd3ArK10gPSBzcmMyZW5kOwotICAgICAgICAgICAgICAgICAgICB0aGlzLnJhbmdlc1tzcmMxXSA9IHNyYzJlbmQrMTsKLSAgICAgICAgICAgICAgICAgICAgc3JjMiArPSAyOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3JjMWVuZCA8PSBzcmMyZW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzcmMxOiAgICBvLS0tLS0tLS1vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzcmMyOiAgICAgICAgICBvLS0tLW8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlczogICAgICAgICAgIG8tLW8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldXNlIHNyYzIKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0W3dwKytdID0gc3JjMmJlZ2luOwotICAgICAgICAgICAgICAgICAgICByZXN1bHRbd3ArK10gPSBzcmMxZW5kOwotICAgICAgICAgICAgICAgICAgICBzcmMxICs9IDI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNyYzE6ICAgIG8tLS0tLS0tLW8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNyYzI6ICAgICAgby0tLS1vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXM6ICAgICAgIG8tLS0tbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV1c2UgdGhlIHJlc3Qgb2Ygc3JjMQotICAgICAgICAgICAgICAgICAgICByZXN1bHRbd3ArK10gPSBzcmMyYmVnaW47Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFt3cCsrXSA9IHNyYzJlbmQ7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMucmFuZ2VzW3NyYzFdID0gc3JjMmVuZCsxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3JjMmVuZCA8IHNyYzFiZWdpbikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90IG92ZXJsYXBwZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNyYzE6ICAgICAgICAgIG8tLS0tLW8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNyYzI6IG8tLS0tbwotICAgICAgICAgICAgICAgIHNyYzIgKz0gMjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlRva2VuI2ludGVyc2VjdFJhbmdlcygpOiBJbnRlcm5hbCBFcnJvcjogWyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArdGhpcy5yYW5nZXNbc3JjMV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIiwiK3RoaXMucmFuZ2VzW3NyYzErMV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIl0gJiBbIit0b2sucmFuZ2VzW3NyYzJdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyIsIit0b2sucmFuZ2VzW3NyYzIrMV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIl0iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB3aGlsZSAoc3JjMSA8IHRoaXMucmFuZ2VzLmxlbmd0aCkgewotICAgICAgICAgICAgcmVzdWx0W3dwKytdID0gdGhpcy5yYW5nZXNbc3JjMSsrXTsKLSAgICAgICAgICAgIHJlc3VsdFt3cCsrXSA9IHRoaXMucmFuZ2VzW3NyYzErK107Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5yYW5nZXMgPSBuZXcgaW50W3dwXTsKLSAgICAgICAgU3lzdGVtLmFycmF5Y29weShyZXN1bHQsIDAsIHRoaXMucmFuZ2VzLCAwLCB3cCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLnJhbmdlcyBpcyBzb3J0ZWQgYW5kIGNvbXBhY3RlZC4KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBmb3IgUkFOR0U6IENyZWF0ZXMgY29tcGxlbWVudC4KLSAgICAgKiBmb3IgTlJBTkdFOiBDcmVhdGVzIHRoZSBzYW1lIG1lYW5pbmcgUkFOR0UuCi0gICAgICovCi0gICAgc3RhdGljIFRva2VuIGNvbXBsZW1lbnRSYW5nZXMoVG9rZW4gdG9rZW4pIHsKLSAgICAgICAgaWYgKHRva2VuLnR5cGUgIT0gUkFOR0UgJiYgdG9rZW4udHlwZSAhPSBOUkFOR0UpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUb2tlbiNjb21wbGVtZW50UmFuZ2VzKCk6IG11c3QgYmUgUkFOR0U6ICIrdG9rZW4udHlwZSk7Ci0gICAgICAgIFJhbmdlVG9rZW4gdG9rID0gKFJhbmdlVG9rZW4pdG9rZW47Ci0gICAgICAgIHRvay5zb3J0UmFuZ2VzKCk7Ci0gICAgICAgIHRvay5jb21wYWN0UmFuZ2VzKCk7Ci0gICAgICAgIGludCBsZW4gPSB0b2sucmFuZ2VzLmxlbmd0aCsyOwotICAgICAgICBpZiAodG9rLnJhbmdlc1swXSA9PSAwKQotICAgICAgICAgICAgbGVuIC09IDI7Ci0gICAgICAgIGludCBsYXN0ID0gdG9rLnJhbmdlc1t0b2sucmFuZ2VzLmxlbmd0aC0xXTsKLSAgICAgICAgaWYgKGxhc3QgPT0gVVRGMTZfTUFYKQotICAgICAgICAgICAgbGVuIC09IDI7Ci0gICAgICAgIFJhbmdlVG9rZW4gcmV0ID0gVG9rZW4uY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgcmV0LnJhbmdlcyA9IG5ldyBpbnRbbGVuXTsKLSAgICAgICAgaW50IHdwID0gMDsKLSAgICAgICAgaWYgKHRvay5yYW5nZXNbMF0gPiAwKSB7Ci0gICAgICAgICAgICByZXQucmFuZ2VzW3dwKytdID0gMDsKLSAgICAgICAgICAgIHJldC5yYW5nZXNbd3ArK10gPSB0b2sucmFuZ2VzWzBdLTE7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChpbnQgaSA9IDE7ICBpIDwgdG9rLnJhbmdlcy5sZW5ndGgtMjsgIGkgKz0gMikgewotICAgICAgICAgICAgcmV0LnJhbmdlc1t3cCsrXSA9IHRvay5yYW5nZXNbaV0rMTsKLSAgICAgICAgICAgIHJldC5yYW5nZXNbd3ArK10gPSB0b2sucmFuZ2VzW2krMV0tMTsKLSAgICAgICAgfQotICAgICAgICBpZiAobGFzdCAhPSBVVEYxNl9NQVgpIHsKLSAgICAgICAgICAgIHJldC5yYW5nZXNbd3ArK10gPSBsYXN0KzE7Ci0gICAgICAgICAgICByZXQucmFuZ2VzW3dwXSA9IFVURjE2X01BWDsKLSAgICAgICAgfQotICAgICAgICByZXQuc2V0Q29tcGFjdGVkKCk7Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgc3luY2hyb25pemVkIFJhbmdlVG9rZW4gZ2V0Q2FzZUluc2Vuc2l0aXZlVG9rZW4oKSB7Ci0gICAgICAgIGlmICh0aGlzLmljYXNlQ2FjaGUgIT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmljYXNlQ2FjaGU7Ci0gICAgICAgICAgICAKLSAgICAgICAgUmFuZ2VUb2tlbiB1cHBlcnMgPSB0aGlzLnR5cGUgPT0gVG9rZW4uUkFOR0UgPyBUb2tlbi5jcmVhdGVSYW5nZSgpIDogVG9rZW4uY3JlYXRlTlJhbmdlKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyAgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgIGkgKz0gMikgewotICAgICAgICAgICAgZm9yIChpbnQgY2ggPSB0aGlzLnJhbmdlc1tpXTsgIGNoIDw9IHRoaXMucmFuZ2VzW2krMV07ICBjaCArKykgewotICAgICAgICAgICAgICAgIGlmIChjaCA+IDB4ZmZmZikKLSAgICAgICAgICAgICAgICAgICAgdXBwZXJzLmFkZFJhbmdlKGNoLCBjaCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgdWNoID0gQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKChjaGFyKWNoKTsKLSAgICAgICAgICAgICAgICAgICAgdXBwZXJzLmFkZFJhbmdlKHVjaCwgdWNoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgUmFuZ2VUb2tlbiBsb3dlcnMgPSB0aGlzLnR5cGUgPT0gVG9rZW4uUkFOR0UgPyBUb2tlbi5jcmVhdGVSYW5nZSgpIDogVG9rZW4uY3JlYXRlTlJhbmdlKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyAgaSA8IHVwcGVycy5yYW5nZXMubGVuZ3RoOyAgaSArPSAyKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBjaCA9IHVwcGVycy5yYW5nZXNbaV07ICBjaCA8PSB1cHBlcnMucmFuZ2VzW2krMV07ICBjaCArKykgewotICAgICAgICAgICAgICAgIGlmIChjaCA+IDB4ZmZmZikKLSAgICAgICAgICAgICAgICAgICAgbG93ZXJzLmFkZFJhbmdlKGNoLCBjaCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgdWNoID0gQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKChjaGFyKWNoKTsKLSAgICAgICAgICAgICAgICAgICAgbG93ZXJzLmFkZFJhbmdlKHVjaCwgdWNoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbG93ZXJzLm1lcmdlUmFuZ2VzKHVwcGVycyk7Ci0gICAgICAgIGxvd2Vycy5tZXJnZVJhbmdlcyh0aGlzKTsKLSAgICAgICAgbG93ZXJzLmNvbXBhY3RSYW5nZXMoKTsKLQotICAgICAgICB0aGlzLmljYXNlQ2FjaGUgPSBsb3dlcnM7Ci0gICAgICAgIHJldHVybiBsb3dlcnM7Ci0gICAgfQotCi0gICAgdm9pZCBkdW1wUmFuZ2VzKCkgewotICAgICAgICBTeXN0ZW0uZXJyLnByaW50KCJSQU5HRTogIik7Ci0gICAgICAgIGlmICh0aGlzLnJhbmdlcyA9PSBudWxsKQotICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCIgTlVMTCIpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgIGkgPCB0aGlzLnJhbmdlcy5sZW5ndGg7ICBpICs9IDIpIHsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnQoIlsiK3RoaXMucmFuZ2VzW2ldKyIsIit0aGlzLnJhbmdlc1tpKzFdKyJdICIpOwotICAgICAgICB9Ci0gICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiIik7Ci0gICAgfQotCi0gICAgYm9vbGVhbiBtYXRjaChpbnQgY2gpIHsKLSAgICAgICAgaWYgKHRoaXMubWFwID09IG51bGwpICB0aGlzLmNyZWF0ZU1hcCgpOwotICAgICAgICBib29sZWFuIHJldDsKLSAgICAgICAgaWYgKHRoaXMudHlwZSA9PSBSQU5HRSkgewotICAgICAgICAgICAgaWYgKGNoIDwgTUFQU0laRSkKLSAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMubWFwW2NoLzMyXSAmICgxPDwoY2gmMHgxZikpKSAhPSAwOwotICAgICAgICAgICAgcmV0ID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gdGhpcy5ub25NYXBJbmRleDsgIGkgPCB0aGlzLnJhbmdlcy5sZW5ndGg7ICBpICs9IDIpIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5yYW5nZXNbaV0gPD0gY2ggJiYgY2ggPD0gdGhpcy5yYW5nZXNbaSsxXSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoY2ggPCBNQVBTSVpFKQotICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5tYXBbY2gvMzJdICYgKDE8PChjaCYweDFmKSkpID09IDA7Ci0gICAgICAgICAgICByZXQgPSB0cnVlOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IHRoaXMubm9uTWFwSW5kZXg7ICBpIDwgdGhpcy5yYW5nZXMubGVuZ3RoOyAgaSArPSAyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMucmFuZ2VzW2ldIDw9IGNoICYmIGNoIDw9IHRoaXMucmFuZ2VzW2krMV0pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVBTSVpFID0gMjU2OwotICAgIHByaXZhdGUgdm9pZCBjcmVhdGVNYXAoKSB7Ci0gICAgICAgIGludCBhc2l6ZSA9IE1BUFNJWkUvMzI7ICAgICAgICAgICAgICAgICAvLyAzMiBpcyB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gYGludCcuCi0gICAgICAgIHRoaXMubWFwID0gbmV3IGludFthc2l6ZV07Ci0gICAgICAgIHRoaXMubm9uTWFwSW5kZXggPSB0aGlzLnJhbmdlcy5sZW5ndGg7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyAgaSA8IGFzaXplOyAgaSArKykgIHRoaXMubWFwW2ldID0gMDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7ICBpIDwgdGhpcy5yYW5nZXMubGVuZ3RoOyAgaSArPSAyKSB7Ci0gICAgICAgICAgICBpbnQgcyA9IHRoaXMucmFuZ2VzW2ldOwotICAgICAgICAgICAgaW50IGUgPSB0aGlzLnJhbmdlc1tpKzFdOwotICAgICAgICAgICAgaWYgKHMgPCBNQVBTSVpFKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IHM7ICBqIDw9IGUgJiYgaiA8IE1BUFNJWkU7ICBqICsrKQotICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcFtqLzMyXSB8PSAxPDwoaiYweDFmKTsgLy8gcyYweDFmIDogMC0zMQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aGlzLm5vbk1hcEluZGV4ID0gaTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChlID49IE1BUFNJWkUpIHsKLSAgICAgICAgICAgICAgICB0aGlzLm5vbk1hcEluZGV4ID0gaTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvL2ZvciAoaW50IGkgPSAwOyAgaSA8IGFzaXplOyAgaSArKykgIFN5c3RlbS5lcnIucHJpbnRsbigiTWFwOiAiK0ludGVnZXIudG9TdHJpbmcodGhpcy5tYXBbaV0sIDE2KSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZyhpbnQgb3B0aW9ucykgewotICAgICAgICBTdHJpbmcgcmV0OwotICAgICAgICBpZiAodGhpcy50eXBlID09IFJBTkdFKSB7Ci0gICAgICAgICAgICBpZiAodGhpcyA9PSBUb2tlbi50b2tlbl9kb3QpCi0gICAgICAgICAgICAgICAgcmV0ID0gIi4iOwotICAgICAgICAgICAgZWxzZSBpZiAodGhpcyA9PSBUb2tlbi50b2tlbl8wdG85KQotICAgICAgICAgICAgICAgIHJldCA9ICJcXGQiOwotICAgICAgICAgICAgZWxzZSBpZiAodGhpcyA9PSBUb2tlbi50b2tlbl93b3JkY2hhcnMpCi0gICAgICAgICAgICAgICAgcmV0ID0gIlxcdyI7Ci0gICAgICAgICAgICBlbHNlIGlmICh0aGlzID09IFRva2VuLnRva2VuX3NwYWNlcykKLSAgICAgICAgICAgICAgICByZXQgPSAiXFxzIjsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIlsiKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgIGkgPCB0aGlzLnJhbmdlcy5sZW5ndGg7ICBpICs9IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChvcHRpb25zICYgUmVndWxhckV4cHJlc3Npb24uU1BFQ0lBTF9DT01NQSkgIT0gMCAmJiBpID4gMCkgIHNiLmFwcGVuZCgiLCIpOwotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yYW5nZXNbaV0gPT0gdGhpcy5yYW5nZXNbaSsxXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKGVzY2FwZUNoYXJJbkNoYXJDbGFzcyh0aGlzLnJhbmdlc1tpXSkpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKGVzY2FwZUNoYXJJbkNoYXJDbGFzcyh0aGlzLnJhbmdlc1tpXSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKChjaGFyKSctJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoZXNjYXBlQ2hhckluQ2hhckNsYXNzKHRoaXMucmFuZ2VzW2krMV0pKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIl0iKTsKLSAgICAgICAgICAgICAgICByZXQgPSBzYi50b1N0cmluZygpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHRoaXMgPT0gVG9rZW4udG9rZW5fbm90XzB0bzkpCi0gICAgICAgICAgICAgICAgcmV0ID0gIlxcRCI7Ci0gICAgICAgICAgICBlbHNlIGlmICh0aGlzID09IFRva2VuLnRva2VuX25vdF93b3JkY2hhcnMpCi0gICAgICAgICAgICAgICAgcmV0ID0gIlxcVyI7Ci0gICAgICAgICAgICBlbHNlIGlmICh0aGlzID09IFRva2VuLnRva2VuX25vdF9zcGFjZXMpCi0gICAgICAgICAgICAgICAgcmV0ID0gIlxcUyI7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKCJbXiIpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyAgaSA8IHRoaXMucmFuZ2VzLmxlbmd0aDsgIGkgKz0gMikgewotICAgICAgICAgICAgICAgICAgICBpZiAoKG9wdGlvbnMgJiBSZWd1bGFyRXhwcmVzc2lvbi5TUEVDSUFMX0NPTU1BKSAhPSAwICYmIGkgPiAwKSAgc2IuYXBwZW5kKCIsIik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJhbmdlc1tpXSA9PSB0aGlzLnJhbmdlc1tpKzFdKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoZXNjYXBlQ2hhckluQ2hhckNsYXNzKHRoaXMucmFuZ2VzW2ldKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoZXNjYXBlQ2hhckluQ2hhckNsYXNzKHRoaXMucmFuZ2VzW2ldKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoJy0nKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZChlc2NhcGVDaGFySW5DaGFyQ2xhc3ModGhpcy5yYW5nZXNbaSsxXSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiXSIpOwotICAgICAgICAgICAgICAgIHJldCA9IHNiLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZXNjYXBlQ2hhckluQ2hhckNsYXNzKGludCBjaCkgewotICAgICAgICBTdHJpbmcgcmV0OwotICAgICAgICBzd2l0Y2ggKGNoKSB7Ci0gICAgICAgICAgY2FzZSAnWyc6ICBjYXNlICddJzogIGNhc2UgJy0nOiAgY2FzZSAnXic6Ci0gICAgICAgICAgY2FzZSAnLCc6ICBjYXNlICdcXCc6Ci0gICAgICAgICAgICByZXQgPSAiXFwiKyhjaGFyKWNoOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAnXGYnOiAgcmV0ID0gIlxcZiI7ICBicmVhazsKLSAgICAgICAgICBjYXNlICdcbic6ICByZXQgPSAiXFxuIjsgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ1xyJzogIHJldCA9ICJcXHIiOyAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAnXHQnOiAgcmV0ID0gIlxcdCI7ICBicmVhazsKLSAgICAgICAgICBjYXNlIDB4MWI6ICByZXQgPSAiXFxlIjsgIGJyZWFrOwotICAgICAgICAgIC8vY2FzZSAweDBiOiAgcmV0ID0gIlxcdiI7ICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKGNoIDwgMHgyMCkgewotICAgICAgICAgICAgICAgIFN0cmluZyBwcmUgPSAiMCIrSW50ZWdlci50b0hleFN0cmluZyhjaCk7Ci0gICAgICAgICAgICAgICAgcmV0ID0gIlxceCIrcHJlLnN1YnN0cmluZyhwcmUubGVuZ3RoKCktMiwgcHJlLmxlbmd0aCgpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPj0gMHgxMDAwMCkgewotICAgICAgICAgICAgICAgIFN0cmluZyBwcmUgPSAiMCIrSW50ZWdlci50b0hleFN0cmluZyhjaCk7Ci0gICAgICAgICAgICAgICAgcmV0ID0gIlxcdiIrcHJlLnN1YnN0cmluZyhwcmUubGVuZ3RoKCktNiwgcHJlLmxlbmd0aCgpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHJldCA9ICIiKyhjaGFyKWNoOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3JlZ2V4L1JlZ2V4UGFyc2VyLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3JlZ2V4L1JlZ2V4UGFyc2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiMDlkOTUuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9yZWdleC9SZWdleFBhcnNlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzMyArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5yZWdleDsKLQotaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7Ci1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotLyoqCi0gKiBBIFJlZ3VsYXIgRXhwcmVzc2lvbiBQYXJzZXIuCi0gKi8KLWNsYXNzIFJlZ2V4UGFyc2VyIHsKLSAgICBzdGF0aWMgZmluYWwgaW50IFRfQ0hBUiA9IDA7Ci0gICAgc3RhdGljIGZpbmFsIGludCBUX0VPRiA9IDE7Ci0gICAgc3RhdGljIGZpbmFsIGludCBUX09SID0gMjsgICAgICAgICAgICAgICAgICAvLyAnfCcKLSAgICBzdGF0aWMgZmluYWwgaW50IFRfU1RBUiA9IDM7ICAgICAgICAgICAgICAgIC8vICcqJwotICAgIHN0YXRpYyBmaW5hbCBpbnQgVF9QTFVTID0gNDsgICAgICAgICAgICAgICAgLy8gJysnCi0gICAgc3RhdGljIGZpbmFsIGludCBUX1FVRVNUSU9OID0gNTsgICAgICAgICAgICAvLyAnPycKLSAgICBzdGF0aWMgZmluYWwgaW50IFRfTFBBUkVOID0gNjsgICAgICAgICAgICAgIC8vICcoJwotICAgIHN0YXRpYyBmaW5hbCBpbnQgVF9SUEFSRU4gPSA3OyAgICAgICAgICAgICAgLy8gJyknCi0gICAgc3RhdGljIGZpbmFsIGludCBUX0RPVCA9IDg7ICAgICAgICAgICAgICAgICAvLyAnLicKLSAgICBzdGF0aWMgZmluYWwgaW50IFRfTEJSQUNLRVQgPSA5OyAgICAgICAgICAgIC8vICdbJwotICAgIHN0YXRpYyBmaW5hbCBpbnQgVF9CQUNLU09MSURVUyA9IDEwOyAgICAgICAgLy8gJ1wnCi0gICAgc3RhdGljIGZpbmFsIGludCBUX0NBUkVUID0gMTE7ICAgICAgICAgICAgICAvLyAnXicKLSAgICBzdGF0aWMgZmluYWwgaW50IFRfRE9MTEFSID0gMTI7ICAgICAgICAgICAgIC8vICckJwotICAgIHN0YXRpYyBmaW5hbCBpbnQgVF9MUEFSRU4yID0gMTM7ICAgICAgICAgICAgLy8gJyg/OicKLSAgICBzdGF0aWMgZmluYWwgaW50IFRfTE9PS0FIRUFEID0gMTQ7ICAgICAgICAgIC8vICcoPz0nCi0gICAgc3RhdGljIGZpbmFsIGludCBUX05FR0FUSVZFTE9PS0FIRUFEID0gMTU7ICAvLyAnKD8hJwotICAgIHN0YXRpYyBmaW5hbCBpbnQgVF9MT09LQkVISU5EID0gMTY7ICAgICAgICAgLy8gJyg/PD0nCi0gICAgc3RhdGljIGZpbmFsIGludCBUX05FR0FUSVZFTE9PS0JFSElORCA9IDE3OyAvLyAnKD88IScKLSAgICBzdGF0aWMgZmluYWwgaW50IFRfSU5ERVBFTkRFTlQgPSAxODsgICAgICAgIC8vICcoPz4nCi0gICAgc3RhdGljIGZpbmFsIGludCBUX1NFVF9PUEVSQVRJT05TID0gMTk7ICAgICAvLyAnKD9bJwotICAgIHN0YXRpYyBmaW5hbCBpbnQgVF9QT1NJWF9DSEFSQ0xBU1NfU1RBUlQgPSAyMDsgLy8gJ1s6JyBpbiBhIGNoYXJhY3RlciBjbGFzcwotICAgIHN0YXRpYyBmaW5hbCBpbnQgVF9DT01NRU5UID0gMjE7ICAgICAgICAgICAgLy8gJyg/IycKLSAgICBzdGF0aWMgZmluYWwgaW50IFRfTU9ESUZJRVJTID0gMjI7ICAgICAgICAgIC8vICcoPycgW1wtLGEteixBLVpdCi0gICAgc3RhdGljIGZpbmFsIGludCBUX0NPTkRJVElPTiA9IDIzOyAgICAgICAgICAvLyAnKD8oJwotICAgIHN0YXRpYyBmaW5hbCBpbnQgVF9YTUxTQ0hFTUFfQ0NfU1VCVFJBQ1RJT04gPSAyNDsgLy8gJy1bJyBpbiBhIGNoYXJhY3RlciBjbGFzcwotCi0gICAgc3RhdGljIGNsYXNzIFJlZmVyZW5jZVBvc2l0aW9uIHsKLSAgICAgICAgaW50IHJlZk51bWJlcjsKLSAgICAgICAgaW50IHBvc2l0aW9uOwotICAgICAgICBSZWZlcmVuY2VQb3NpdGlvbihpbnQgbiwgaW50IHBvcykgewotICAgICAgICAgICAgdGhpcy5yZWZOdW1iZXIgPSBuOwotICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHBvczsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGludCBvZmZzZXQ7Ci0gICAgU3RyaW5nIHJlZ2V4OwotICAgIGludCByZWdleGxlbjsKLSAgICBpbnQgb3B0aW9uczsKLSAgICBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZXM7Ci0gICAgaW50IGNoYXJkYXRhOwotICAgIGludCBuZXh0dG9rZW47Ci0gICAgc3RhdGljIHByb3RlY3RlZCBmaW5hbCBpbnQgU19OT1JNQUwgPSAwOwotICAgIHN0YXRpYyBwcm90ZWN0ZWQgZmluYWwgaW50IFNfSU5CUkFDS0VUUyA9IDE7Ci0gICAgc3RhdGljIHByb3RlY3RlZCBmaW5hbCBpbnQgU19JTlhCUkFDS0VUUyA9IDI7Ci0gICAgaW50IGNvbnRleHQgPSBTX05PUk1BTDsKLSAgICBpbnQgcGFyZW5udW1iZXIgPSAxOwotICAgIGJvb2xlYW4gaGFzQmFja1JlZmVyZW5jZXM7Ci0gICAgVmVjdG9yIHJlZmVyZW5jZXMgPSBudWxsOwotCi0gICAgcHVibGljIFJlZ2V4UGFyc2VyKCkgewotICAgICAgICB0aGlzLnNldExvY2FsZShMb2NhbGUuZ2V0RGVmYXVsdCgpKTsKLSAgICB9Ci0gICAgcHVibGljIFJlZ2V4UGFyc2VyKExvY2FsZSBsb2NhbGUpIHsKLSAgICAgICAgdGhpcy5zZXRMb2NhbGUobG9jYWxlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRMb2NhbGUoTG9jYWxlIGxvY2FsZSkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgdGhpcy5yZXNvdXJjZXMgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5yZWdleC5tZXNzYWdlIiwgbG9jYWxlKTsKLSAgICAgICAgfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIG1yZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluc3RhbGxhdGlvbiBQcm9ibGVtPz8/ICBDb3VsZG4ndCBsb2FkIG1lc3NhZ2VzOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArbXJlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmaW5hbCBQYXJzZUV4Y2VwdGlvbiBleChTdHJpbmcga2V5LCBpbnQgbG9jKSB7Ci0gICAgICAgIHJldHVybiBuZXcgUGFyc2VFeGNlcHRpb24odGhpcy5yZXNvdXJjZXMuZ2V0U3RyaW5nKGtleSksIGxvYyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGlzU2V0KGludCBmbGFnKSB7Ci0gICAgICAgIHJldHVybiAodGhpcy5vcHRpb25zICYgZmxhZykgPT0gZmxhZzsKLSAgICB9Ci0KLSAgICBzeW5jaHJvbml6ZWQgVG9rZW4gcGFyc2UoU3RyaW5nIHJlZ2V4LCBpbnQgb3B0aW9ucykgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKLSAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKLSAgICAgICAgdGhpcy5vZmZzZXQgPSAwOwotICAgICAgICB0aGlzLnNldENvbnRleHQoU19OT1JNQUwpOwotICAgICAgICB0aGlzLnBhcmVubnVtYmVyID0gMTsKLSAgICAgICAgdGhpcy5oYXNCYWNrUmVmZXJlbmNlcyA9IGZhbHNlOwotICAgICAgICB0aGlzLnJlZ2V4ID0gcmVnZXg7Ci0gICAgICAgIGlmICh0aGlzLmlzU2V0KFJlZ3VsYXJFeHByZXNzaW9uLkVYVEVOREVEX0NPTU1FTlQpKQotICAgICAgICAgICAgdGhpcy5yZWdleCA9IFJFVXRpbC5zdHJpcEV4dGVuZGVkQ29tbWVudCh0aGlzLnJlZ2V4KTsKLSAgICAgICAgdGhpcy5yZWdleGxlbiA9IHRoaXMucmVnZXgubGVuZ3RoKCk7Ci0KLQotICAgICAgICB0aGlzLm5leHQoKTsKLSAgICAgICAgVG9rZW4gcmV0ID0gdGhpcy5wYXJzZVJlZ2V4KCk7Ci0gICAgICAgIGlmICh0aGlzLm9mZnNldCAhPSB0aGlzLnJlZ2V4bGVuKQotICAgICAgICAgICAgdGhyb3cgZXgoInBhcnNlci5wYXJzZS4xIiwgdGhpcy5vZmZzZXQpOwotICAgICAgICBpZiAodGhpcy5yZWZlcmVuY2VzICE9IG51bGwpIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyAgaSA8IHRoaXMucmVmZXJlbmNlcy5zaXplKCk7ICBpICsrKSB7Ci0gICAgICAgICAgICAgICAgUmVmZXJlbmNlUG9zaXRpb24gcG9zaXRpb24gPSAoUmVmZXJlbmNlUG9zaXRpb24pdGhpcy5yZWZlcmVuY2VzLmVsZW1lbnRBdChpKTsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5wYXJlbm51bWJlciA8PSBwb3NpdGlvbi5yZWZOdW1iZXIpCi0gICAgICAgICAgICAgICAgICAgIHRocm93IGV4KCJwYXJzZXIucGFyc2UuMiIsIHBvc2l0aW9uLnBvc2l0aW9uKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMucmVmZXJlbmNlcy5yZW1vdmVBbGxFbGVtZW50cygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgLyoKLSAgICBwdWJsaWMgUmVndWxhckV4cHJlc3Npb24gY3JlYXRlUmVnZXgoU3RyaW5nIHJlZ2V4LCBpbnQgb3B0aW9ucykgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKLSAgICAgICAgVG9rZW4gdG9rID0gdGhpcy5wYXJzZShyZWdleCwgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybiBuZXcgUmVndWxhckV4cHJlc3Npb24ocmVnZXgsIHRvaywgdGhpcy5wYXJlbm51bWJlciwgdGhpcy5oYXNCYWNrUmVmZXJlbmNlcywgb3B0aW9ucyk7Ci0gICAgfQotICAgICovCi0KLSAgICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBzZXRDb250ZXh0KGludCBjb24pIHsKLSAgICAgICAgdGhpcy5jb250ZXh0ID0gY29uOwotICAgIH0KLQotICAgIGZpbmFsIGludCByZWFkKCkgewotICAgICAgICByZXR1cm4gdGhpcy5uZXh0dG9rZW47Ci0gICAgfQotCi0gICAgZmluYWwgdm9pZCBuZXh0KCkgewotICAgICAgICBpZiAodGhpcy5vZmZzZXQgPj0gdGhpcy5yZWdleGxlbikgewotICAgICAgICAgICAgdGhpcy5jaGFyZGF0YSA9IC0xOwotICAgICAgICAgICAgdGhpcy5uZXh0dG9rZW4gPSBUX0VPRjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGludCByZXQ7Ci0gICAgICAgIGludCBjaCA9IHRoaXMucmVnZXguY2hhckF0KHRoaXMub2Zmc2V0KyspOwotICAgICAgICB0aGlzLmNoYXJkYXRhID0gY2g7Ci0KLSAgICAgICAgaWYgKHRoaXMuY29udGV4dCA9PSBTX0lOQlJBQ0tFVFMpIHsKLSAgICAgICAgICAgIC8vIEluIGEgY2hhcmFjdGVyIGNsYXNzLCB0aGlzLmNoYXJkYXRhIGhhcyBvbmUgY2hhcmFjdGVyLCB0aGF0IGlzIHRvIHNheSwKLSAgICAgICAgICAgIC8vIGEgcGFpciBvZiBzdXJyb2dhdGVzIGlzIGNvbXBvc2VkIGFuZCBzdG9yZWQgdG8gdGhpcy5jaGFyZGF0YS4KLSAgICAgICAgICAgIHN3aXRjaCAoY2gpIHsKLSAgICAgICAgICAgICAgY2FzZSAnXFwnOgotICAgICAgICAgICAgICAgIHJldCA9IFRfQkFDS1NPTElEVVM7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMub2Zmc2V0ID49IHRoaXMucmVnZXhsZW4pCi0gICAgICAgICAgICAgICAgICAgIHRocm93IGV4KCJwYXJzZXIubmV4dC4xIiwgdGhpcy5vZmZzZXQtMSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5jaGFyZGF0YSA9IHRoaXMucmVnZXguY2hhckF0KHRoaXMub2Zmc2V0KyspOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGNhc2UgJy0nOgotICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU2V0KFJlZ3VsYXJFeHByZXNzaW9uLlhNTFNDSEVNQV9NT0RFKQotICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLm9mZnNldCA8IHRoaXMucmVnZXhsZW4gJiYgdGhpcy5yZWdleC5jaGFyQXQodGhpcy5vZmZzZXQpID09ICdbJykgewotICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldCsrOwotICAgICAgICAgICAgICAgICAgICByZXQgPSBUX1hNTFNDSEVNQV9DQ19TVUJUUkFDVElPTjsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gVF9DSEFSOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGNhc2UgJ1snOgotICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1NldChSZWd1bGFyRXhwcmVzc2lvbi5YTUxTQ0hFTUFfTU9ERSkKLSAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5vZmZzZXQgPCB0aGlzLnJlZ2V4bGVuICYmIHRoaXMucmVnZXguY2hhckF0KHRoaXMub2Zmc2V0KSA9PSAnOicpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXQrKzsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gVF9QT1NJWF9DSEFSQ0xBU1NfU1RBUlQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0gLy8gVGhyb3VnaCBkb3duCi0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKFJFVXRpbC5pc0hpZ2hTdXJyb2dhdGUoY2gpICYmIHRoaXMub2Zmc2V0IDwgdGhpcy5yZWdleGxlbikgewotICAgICAgICAgICAgICAgICAgICBpbnQgbG93ID0gdGhpcy5yZWdleC5jaGFyQXQodGhpcy5vZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoUkVVdGlsLmlzTG93U3Vycm9nYXRlKGxvdykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcmRhdGEgPSBSRVV0aWwuY29tcG9zZUZyb21TdXJyb2dhdGVzKGNoLCBsb3cpOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXQgKys7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0ID0gVF9DSEFSOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5uZXh0dG9rZW4gPSByZXQ7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGNoKSB7Ci0gICAgICAgICAgY2FzZSAnfCc6IHJldCA9IFRfT1I7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJyonOiByZXQgPSBUX1NUQVI7ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICcrJzogcmV0ID0gVF9QTFVTOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAnPyc6IHJldCA9IFRfUVVFU1RJT047ICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJyknOiByZXQgPSBUX1JQQVJFTjsgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICcuJzogcmV0ID0gVF9ET1Q7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAnWyc6IHJldCA9IFRfTEJSQUNLRVQ7ICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ14nOiByZXQgPSBUX0NBUkVUOyAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICckJzogcmV0ID0gVF9ET0xMQVI7ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAnKCc6Ci0gICAgICAgICAgICByZXQgPSBUX0xQQVJFTjsKLSAgICAgICAgICAgIGlmICh0aGlzLm9mZnNldCA+PSB0aGlzLnJlZ2V4bGVuKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKHRoaXMucmVnZXguY2hhckF0KHRoaXMub2Zmc2V0KSAhPSAnPycpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoKyt0aGlzLm9mZnNldCA+PSB0aGlzLnJlZ2V4bGVuKQotICAgICAgICAgICAgICAgIHRocm93IGV4KCJwYXJzZXIubmV4dC4yIiwgdGhpcy5vZmZzZXQtMSk7Ci0gICAgICAgICAgICBjaCA9IHRoaXMucmVnZXguY2hhckF0KHRoaXMub2Zmc2V0KyspOwotICAgICAgICAgICAgc3dpdGNoIChjaCkgewotICAgICAgICAgICAgICBjYXNlICc6JzogIHJldCA9IFRfTFBBUkVOMjsgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSAnPSc6ICByZXQgPSBUX0xPT0tBSEVBRDsgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgJyEnOiAgcmV0ID0gVF9ORUdBVElWRUxPT0tBSEVBRDsgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlICdbJzogIHJldCA9IFRfU0VUX09QRVJBVElPTlM7ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSAnPic6ICByZXQgPSBUX0lOREVQRU5ERU5UOyAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgJzwnOgotICAgICAgICAgICAgICAgIGlmICh0aGlzLm9mZnNldCA+PSB0aGlzLnJlZ2V4bGVuKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBleCgicGFyc2VyLm5leHQuMiIsIHRoaXMub2Zmc2V0LTMpOwotICAgICAgICAgICAgICAgIGNoID0gdGhpcy5yZWdleC5jaGFyQXQodGhpcy5vZmZzZXQrKyk7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09ICc9JykgewotICAgICAgICAgICAgICAgICAgICByZXQgPSBUX0xPT0tCRUhJTkQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnIScpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gVF9ORUdBVElWRUxPT0tCRUhJTkQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHRocm93IGV4KCJwYXJzZXIubmV4dC4zIiwgdGhpcy5vZmZzZXQtMyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgJyMnOgotICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLm9mZnNldCA8IHRoaXMucmVnZXhsZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLnJlZ2V4LmNoYXJBdCh0aGlzLm9mZnNldCsrKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICcpJykgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY2ggIT0gJyknKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBleCgicGFyc2VyLm5leHQuNCIsIHRoaXMub2Zmc2V0LTEpOwotICAgICAgICAgICAgICAgIHJldCA9IFRfQ09NTUVOVDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJy0nIHx8ICdhJyA8PSBjaCAmJiBjaCA8PSAneicgfHwgJ0EnIDw9IGNoICYmIGNoIDw9ICdaJykgey8vIE9wdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXQgLS07Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IFRfTU9ESUZJRVJTOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICcoJykgeyAgICAgICAgIC8vIGNvbmRpdGlvbmFsCi0gICAgICAgICAgICAgICAgICAgIHJldCA9IFRfQ09ORElUSU9OOyAgICAgICAgICAvLyB0aGlzLm9mZnNldHMgcG9pbnRzIHRoZSBuZXh0IG9mICcoJy4KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRocm93IGV4KCJwYXJzZXIubmV4dC4yIiwgdGhpcy5vZmZzZXQtMik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAgIGNhc2UgJ1xcJzoKLSAgICAgICAgICAgIHJldCA9IFRfQkFDS1NPTElEVVM7Ci0gICAgICAgICAgICBpZiAodGhpcy5vZmZzZXQgPj0gdGhpcy5yZWdleGxlbikKLSAgICAgICAgICAgICAgICB0aHJvdyBleCgicGFyc2VyLm5leHQuMSIsIHRoaXMub2Zmc2V0LTEpOwotICAgICAgICAgICAgdGhpcy5jaGFyZGF0YSA9IHRoaXMucmVnZXguY2hhckF0KHRoaXMub2Zmc2V0KyspOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0ID0gVF9DSEFSOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMubmV4dHRva2VuID0gcmV0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIHJlZ2V4IDo6PSB0ZXJtIChgfGAgdGVybSkqCi0gICAgICogdGVybSA6Oj0gZmFjdG9yKwotICAgICAqIGZhY3RvciA6Oj0gKCdeJyB8ICckJyB8ICdcQScgfCAnXFonIHwgJ1x6JyB8ICdcYicgfCAnXEInIHwgJ1w8JyB8ICdcPicKLSAgICAgKiAgICAgICAgICAgIHwgYXRvbSAoKCcqJyB8ICcrJyB8ICc/JyB8IG1pbm1heCApICc/Jz8gKT8pCi0gICAgICogICAgICAgICAgICB8ICcoPz0nIHJlZ2V4ICcpJyAgfCAnKD8hJyByZWdleCAnKScgIHwgJyg/Jmx0Oz0nIHJlZ2V4ICcpJyAgfCAnKD8mbHQ7IScgcmVnZXggJyknCi0gICAgICogYXRvbSA6Oj0gY2hhciB8ICcuJyB8IHJhbmdlIHwgJygnIHJlZ2V4ICcpJyB8ICcoPzonIHJlZ2V4ICcpJyB8ICdcJyBbMC05XQotICAgICAqICAgICAgICAgIHwgJ1x3JyB8ICdcVycgfCAnXGQnIHwgJ1xEJyB8ICdccycgfCAnXFMnIHwgY2F0ZWdvcnktYmxvY2sgCi0gICAgICovCi0gICAgVG9rZW4gcGFyc2VSZWdleCgpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIFRva2VuIHRvayA9IHRoaXMucGFyc2VUZXJtKCk7Ci0gICAgICAgIFRva2VuIHBhcmVudCA9IG51bGw7Ci0gICAgICAgIHdoaWxlICh0aGlzLnJlYWQoKSA9PSBUX09SKSB7Ci0gICAgICAgICAgICB0aGlzLm5leHQoKTsgICAgICAgICAgICAgICAgICAgIC8vICd8JwotICAgICAgICAgICAgaWYgKHBhcmVudCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcGFyZW50ID0gVG9rZW4uY3JlYXRlVW5pb24oKTsKLSAgICAgICAgICAgICAgICBwYXJlbnQuYWRkQ2hpbGQodG9rKTsKLSAgICAgICAgICAgICAgICB0b2sgPSBwYXJlbnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0b2suYWRkQ2hpbGQodGhpcy5wYXJzZVRlcm0oKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRvazsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiB0ZXJtIDo6PSBmYWN0b3IrCi0gICAgICovCi0gICAgVG9rZW4gcGFyc2VUZXJtKCkgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKLSAgICAgICAgaW50IGNoID0gdGhpcy5yZWFkKCk7Ci0gICAgICAgIGlmIChjaCA9PSBUX09SIHx8IGNoID09IFRfUlBBUkVOIHx8IGNoID09IFRfRU9GKSB7Ci0gICAgICAgICAgICByZXR1cm4gVG9rZW4uY3JlYXRlRW1wdHkoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFRva2VuIHRvayA9IHRoaXMucGFyc2VGYWN0b3IoKTsKLSAgICAgICAgICAgIFRva2VuIGNvbmNhdCA9IG51bGw7Ci0gICAgICAgICAgICB3aGlsZSAoKGNoID0gdGhpcy5yZWFkKCkpICE9IFRfT1IgJiYgY2ggIT0gVF9SUEFSRU4gJiYgY2ggIT0gVF9FT0YpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29uY2F0ID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uY2F0ID0gVG9rZW4uY3JlYXRlQ29uY2F0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmNhdC5hZGRDaGlsZCh0b2spOwotICAgICAgICAgICAgICAgICAgICB0b2sgPSBjb25jYXQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbmNhdC5hZGRDaGlsZCh0aGlzLnBhcnNlRmFjdG9yKCkpOwotICAgICAgICAgICAgICAgIC8vdG9rID0gVG9rZW4uY3JlYXRlQ29uY2F0KHRvaywgdGhpcy5wYXJzZUZhY3RvcigpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0b2s7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICBUb2tlbiBwcm9jZXNzQ2FyZXQoKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICB0aGlzLm5leHQoKTsKLSAgICAgICAgcmV0dXJuIFRva2VuLnRva2VuX2xpbmViZWdpbm5pbmc7Ci0gICAgfQotICAgIFRva2VuIHByb2Nlc3NEb2xsYXIoKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICB0aGlzLm5leHQoKTsKLSAgICAgICAgcmV0dXJuIFRva2VuLnRva2VuX2xpbmVlbmQ7Ci0gICAgfQotICAgIFRva2VuIHByb2Nlc3NMb29rYWhlYWQoKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICB0aGlzLm5leHQoKTsKLSAgICAgICAgVG9rZW4gdG9rID0gVG9rZW4uY3JlYXRlTG9vayhUb2tlbi5MT09LQUhFQUQsIHRoaXMucGFyc2VSZWdleCgpKTsKLSAgICAgICAgaWYgKHRoaXMucmVhZCgpICE9IFRfUlBBUkVOKSAgdGhyb3cgZXgoInBhcnNlci5mYWN0b3IuMSIsIHRoaXMub2Zmc2V0LTEpOwotICAgICAgICB0aGlzLm5leHQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyknCi0gICAgICAgIHJldHVybiB0b2s7Ci0gICAgfQotICAgIFRva2VuIHByb2Nlc3NOZWdhdGl2ZWxvb2thaGVhZCgpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICBUb2tlbiB0b2sgPSBUb2tlbi5jcmVhdGVMb29rKFRva2VuLk5FR0FUSVZFTE9PS0FIRUFELCB0aGlzLnBhcnNlUmVnZXgoKSk7Ci0gICAgICAgIGlmICh0aGlzLnJlYWQoKSAhPSBUX1JQQVJFTikgIHRocm93IGV4KCJwYXJzZXIuZmFjdG9yLjEiLCB0aGlzLm9mZnNldC0xKTsKLSAgICAgICAgdGhpcy5uZXh0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICcpJwotICAgICAgICByZXR1cm4gdG9rOwotICAgIH0KLSAgICBUb2tlbiBwcm9jZXNzTG9va2JlaGluZCgpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICBUb2tlbiB0b2sgPSBUb2tlbi5jcmVhdGVMb29rKFRva2VuLkxPT0tCRUhJTkQsIHRoaXMucGFyc2VSZWdleCgpKTsKLSAgICAgICAgaWYgKHRoaXMucmVhZCgpICE9IFRfUlBBUkVOKSAgdGhyb3cgZXgoInBhcnNlci5mYWN0b3IuMSIsIHRoaXMub2Zmc2V0LTEpOwotICAgICAgICB0aGlzLm5leHQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJyknCi0gICAgICAgIHJldHVybiB0b2s7Ci0gICAgfQotICAgIFRva2VuIHByb2Nlc3NOZWdhdGl2ZWxvb2tiZWhpbmQoKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICB0aGlzLm5leHQoKTsKLSAgICAgICAgVG9rZW4gdG9rID0gVG9rZW4uY3JlYXRlTG9vayhUb2tlbi5ORUdBVElWRUxPT0tCRUhJTkQsIHRoaXMucGFyc2VSZWdleCgpKTsKLSAgICAgICAgaWYgKHRoaXMucmVhZCgpICE9IFRfUlBBUkVOKSAgdGhyb3cgZXgoInBhcnNlci5mYWN0b3IuMSIsIHRoaXMub2Zmc2V0LTEpOwotICAgICAgICB0aGlzLm5leHQoKTsgICAgICAgICAgICAgICAgICAgIC8vICcpJwotICAgICAgICByZXR1cm4gdG9rOwotICAgIH0KLSAgICBUb2tlbiBwcm9jZXNzQmFja3NvbGlkdXNfQSgpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICByZXR1cm4gVG9rZW4udG9rZW5fc3RyaW5nYmVnaW5uaW5nOwotICAgIH0KLSAgICBUb2tlbiBwcm9jZXNzQmFja3NvbGlkdXNfWigpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICByZXR1cm4gVG9rZW4udG9rZW5fc3RyaW5nZW5kMjsKLSAgICB9Ci0gICAgVG9rZW4gcHJvY2Vzc0JhY2tzb2xpZHVzX3ooKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICB0aGlzLm5leHQoKTsKLSAgICAgICAgcmV0dXJuIFRva2VuLnRva2VuX3N0cmluZ2VuZDsKLSAgICB9Ci0gICAgVG9rZW4gcHJvY2Vzc0JhY2tzb2xpZHVzX2IoKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICB0aGlzLm5leHQoKTsKLSAgICAgICAgcmV0dXJuIFRva2VuLnRva2VuX3dvcmRlZGdlOwotICAgIH0KLSAgICBUb2tlbiBwcm9jZXNzQmFja3NvbGlkdXNfQigpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICByZXR1cm4gVG9rZW4udG9rZW5fbm90X3dvcmRlZGdlOwotICAgIH0KLSAgICBUb2tlbiBwcm9jZXNzQmFja3NvbGlkdXNfbHQoKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICB0aGlzLm5leHQoKTsKLSAgICAgICAgcmV0dXJuIFRva2VuLnRva2VuX3dvcmRiZWdpbm5pbmc7Ci0gICAgfQotICAgIFRva2VuIHByb2Nlc3NCYWNrc29saWR1c19ndCgpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICByZXR1cm4gVG9rZW4udG9rZW5fd29yZGVuZDsKLSAgICB9Ci0gICAgVG9rZW4gcHJvY2Vzc1N0YXIoVG9rZW4gdG9rKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICB0aGlzLm5leHQoKTsKLSAgICAgICAgaWYgKHRoaXMucmVhZCgpID09IFRfUVVFU1RJT04pIHsKLSAgICAgICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICAgICAgcmV0dXJuIFRva2VuLmNyZWF0ZU5HQ2xvc3VyZSh0b2spOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBUb2tlbi5jcmVhdGVDbG9zdXJlKHRvayk7Ci0gICAgfQotICAgIFRva2VuIHByb2Nlc3NQbHVzKFRva2VuIHRvaykgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gWCsgLT4gWFgqCi0gICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICBpZiAodGhpcy5yZWFkKCkgPT0gVF9RVUVTVElPTikgewotICAgICAgICAgICAgdGhpcy5uZXh0KCk7Ci0gICAgICAgICAgICByZXR1cm4gVG9rZW4uY3JlYXRlQ29uY2F0KHRvaywgVG9rZW4uY3JlYXRlTkdDbG9zdXJlKHRvaykpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBUb2tlbi5jcmVhdGVDb25jYXQodG9rLCBUb2tlbi5jcmVhdGVDbG9zdXJlKHRvaykpOwotICAgIH0KLSAgICBUb2tlbiBwcm9jZXNzUXVlc3Rpb24oVG9rZW4gdG9rKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICAvLyBYPyAtPiBYfAotICAgICAgICB0aGlzLm5leHQoKTsKLSAgICAgICAgVG9rZW4gcGFyID0gVG9rZW4uY3JlYXRlVW5pb24oKTsKLSAgICAgICAgaWYgKHRoaXMucmVhZCgpID09IFRfUVVFU1RJT04pIHsKLSAgICAgICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICAgICAgcGFyLmFkZENoaWxkKFRva2VuLmNyZWF0ZUVtcHR5KCkpOwotICAgICAgICAgICAgcGFyLmFkZENoaWxkKHRvayk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwYXIuYWRkQ2hpbGQodG9rKTsKLSAgICAgICAgICAgIHBhci5hZGRDaGlsZChUb2tlbi5jcmVhdGVFbXB0eSgpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcGFyOwotICAgIH0KLSAgICBib29sZWFuIGNoZWNrUXVlc3Rpb24oaW50IG9mZikgewotICAgICAgICByZXR1cm4gb2ZmIDwgdGhpcy5yZWdleGxlbiAmJiB0aGlzLnJlZ2V4LmNoYXJBdChvZmYpID09ICc/JzsKLSAgICB9Ci0gICAgVG9rZW4gcHJvY2Vzc1BhcmVuKCkgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKLSAgICAgICAgdGhpcy5uZXh0KCk7Ci0gICAgICAgIGludCBwID0gdGhpcy5wYXJlbm51bWJlcisrOwotICAgICAgICBUb2tlbiB0b2sgPSBUb2tlbi5jcmVhdGVQYXJlbih0aGlzLnBhcnNlUmVnZXgoKSwgcCk7Ci0gICAgICAgIGlmICh0aGlzLnJlYWQoKSAhPSBUX1JQQVJFTikgIHRocm93IGV4KCJwYXJzZXIuZmFjdG9yLjEiLCB0aGlzLm9mZnNldC0xKTsKLSAgICAgICAgdGhpcy5uZXh0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNraXBzICcpJwotICAgICAgICByZXR1cm4gdG9rOwotICAgIH0KLSAgICBUb2tlbiBwcm9jZXNzUGFyZW4yKCkgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKLSAgICAgICAgdGhpcy5uZXh0KCk7Ci0gICAgICAgIFRva2VuIHRvayA9IFRva2VuLmNyZWF0ZVBhcmVuKHRoaXMucGFyc2VSZWdleCgpLCAwKTsKLSAgICAgICAgaWYgKHRoaXMucmVhZCgpICE9IFRfUlBBUkVOKSAgdGhyb3cgZXgoInBhcnNlci5mYWN0b3IuMSIsIHRoaXMub2Zmc2V0LTEpOwotICAgICAgICB0aGlzLm5leHQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2tpcHMgJyknCi0gICAgICAgIHJldHVybiB0b2s7Ci0gICAgfQotICAgIFRva2VuIHByb2Nlc3NDb25kaXRpb24oKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5vZmZzZXQgcG9pbnRzIHRoZSBuZXh0IG9mICcoJwotICAgICAgICBpZiAodGhpcy5vZmZzZXQrMSA+PSB0aGlzLnJlZ2V4bGVuKSAgdGhyb3cgZXgoInBhcnNlci5mYWN0b3IuNCIsIHRoaXMub2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBhcnNlcyBhIGNvbmRpdGlvbi4KLSAgICAgICAgaW50IHJlZm5vID0gLTE7Ci0gICAgICAgIFRva2VuIGNvbmRpdGlvbiA9IG51bGw7Ci0gICAgICAgIGludCBjaCA9IHRoaXMucmVnZXguY2hhckF0KHRoaXMub2Zmc2V0KTsKLSAgICAgICAgaWYgKCcxJyA8PSBjaCAmJiBjaCA8PSAnOScpIHsKLSAgICAgICAgICAgIHJlZm5vID0gY2gtJzAnOwotICAgICAgICAgICAgdGhpcy5oYXNCYWNrUmVmZXJlbmNlcyA9IHRydWU7Ci0gICAgICAgICAgICBpZiAodGhpcy5yZWZlcmVuY2VzID09IG51bGwpICB0aGlzLnJlZmVyZW5jZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgICB0aGlzLnJlZmVyZW5jZXMuYWRkRWxlbWVudChuZXcgUmVmZXJlbmNlUG9zaXRpb24ocmVmbm8sIHRoaXMub2Zmc2V0KSk7Ci0gICAgICAgICAgICB0aGlzLm9mZnNldCArKzsKLSAgICAgICAgICAgIGlmICh0aGlzLnJlZ2V4LmNoYXJBdCh0aGlzLm9mZnNldCkgIT0gJyknKSAgdGhyb3cgZXgoInBhcnNlci5mYWN0b3IuMSIsIHRoaXMub2Zmc2V0KTsKLSAgICAgICAgICAgIHRoaXMub2Zmc2V0ICsrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGNoID09ICc/JykgIHRoaXMub2Zmc2V0IC0tOyAvLyBQb2ludHMgJygnLgotICAgICAgICAgICAgdGhpcy5uZXh0KCk7Ci0gICAgICAgICAgICBjb25kaXRpb24gPSB0aGlzLnBhcnNlRmFjdG9yKCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvbmRpdGlvbi50eXBlKSB7Ci0gICAgICAgICAgICAgIGNhc2UgVG9rZW4uTE9PS0FIRUFEOgotICAgICAgICAgICAgICBjYXNlIFRva2VuLk5FR0FUSVZFTE9PS0FIRUFEOgotICAgICAgICAgICAgICBjYXNlIFRva2VuLkxPT0tCRUhJTkQ6Ci0gICAgICAgICAgICAgIGNhc2UgVG9rZW4uTkVHQVRJVkVMT09LQkVISU5EOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIFRva2VuLkFOQ0hPUjoKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkKCkgIT0gVF9SUEFSRU4pICB0aHJvdyBleCgicGFyc2VyLmZhY3Rvci4xIiwgdGhpcy5vZmZzZXQtMSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgdGhyb3cgZXgoInBhcnNlci5mYWN0b3IuNSIsIHRoaXMub2Zmc2V0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFyc2VzIHllcy9uby1wYXR0ZXJucy4KLSAgICAgICAgdGhpcy5uZXh0KCk7Ci0gICAgICAgIFRva2VuIHllc1BhdHRlcm4gPSB0aGlzLnBhcnNlUmVnZXgoKTsKLSAgICAgICAgVG9rZW4gbm9QYXR0ZXJuID0gbnVsbDsKLSAgICAgICAgaWYgKHllc1BhdHRlcm4udHlwZSA9PSBUb2tlbi5VTklPTikgewotICAgICAgICAgICAgaWYgKHllc1BhdHRlcm4uc2l6ZSgpICE9IDIpICB0aHJvdyBleCgicGFyc2VyLmZhY3Rvci42IiwgdGhpcy5vZmZzZXQpOwotICAgICAgICAgICAgbm9QYXR0ZXJuID0geWVzUGF0dGVybi5nZXRDaGlsZCgxKTsKLSAgICAgICAgICAgIHllc1BhdHRlcm4gPSB5ZXNQYXR0ZXJuLmdldENoaWxkKDApOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0aGlzLnJlYWQoKSAhPSBUX1JQQVJFTikgIHRocm93IGV4KCJwYXJzZXIuZmFjdG9yLjEiLCB0aGlzLm9mZnNldC0xKTsKLSAgICAgICAgdGhpcy5uZXh0KCk7Ci0gICAgICAgIHJldHVybiBUb2tlbi5jcmVhdGVDb25kaXRpb24ocmVmbm8sIGNvbmRpdGlvbiwgeWVzUGF0dGVybiwgbm9QYXR0ZXJuKTsKLSAgICB9Ci0gICAgVG9rZW4gcHJvY2Vzc01vZGlmaWVycygpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLm9mZnNldCBwb2ludHMgdGhlIG5leHQgb2YgJz8nLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW9kaWZpZXJzIDo6PSBbaW1zd10qICgnLScgW2ltc3ddKik/ICc6JwotICAgICAgICBpbnQgYWRkID0gMCwgbWFzayA9IDAsIGNoID0gLTE7Ci0gICAgICAgIHdoaWxlICh0aGlzLm9mZnNldCA8IHRoaXMucmVnZXhsZW4pIHsKLSAgICAgICAgICAgIGNoID0gdGhpcy5yZWdleC5jaGFyQXQodGhpcy5vZmZzZXQpOwotICAgICAgICAgICAgaW50IHYgPSBSRVV0aWwuZ2V0T3B0aW9uVmFsdWUoY2gpOwotICAgICAgICAgICAgaWYgKHYgPT0gMCkgIGJyZWFrOyAgICAgICAgICAgICAgICAgLy8gJy0nIG9yICc6Jz8KLSAgICAgICAgICAgIGFkZCB8PSB2OwotICAgICAgICAgICAgdGhpcy5vZmZzZXQgKys7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRoaXMub2Zmc2V0ID49IHRoaXMucmVnZXhsZW4pICB0aHJvdyBleCgicGFyc2VyLmZhY3Rvci4yIiwgdGhpcy5vZmZzZXQtMSk7Ci0gICAgICAgIGlmIChjaCA9PSAnLScpIHsKLSAgICAgICAgICAgIHRoaXMub2Zmc2V0ICsrOwotICAgICAgICAgICAgd2hpbGUgKHRoaXMub2Zmc2V0IDwgdGhpcy5yZWdleGxlbikgewotICAgICAgICAgICAgICAgIGNoID0gdGhpcy5yZWdleC5jaGFyQXQodGhpcy5vZmZzZXQpOwotICAgICAgICAgICAgICAgIGludCB2ID0gUkVVdGlsLmdldE9wdGlvblZhbHVlKGNoKTsKLSAgICAgICAgICAgICAgICBpZiAodiA9PSAwKSAgYnJlYWs7ICAgICAgICAgICAgIC8vICc6Jz8KLSAgICAgICAgICAgICAgICBtYXNrIHw9IHY7Ci0gICAgICAgICAgICAgICAgdGhpcy5vZmZzZXQgKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodGhpcy5vZmZzZXQgPj0gdGhpcy5yZWdleGxlbikgIHRocm93IGV4KCJwYXJzZXIuZmFjdG9yLjIiLCB0aGlzLm9mZnNldC0xKTsKLSAgICAgICAgfQotICAgICAgICBUb2tlbiB0b2s7Ci0gICAgICAgIGlmIChjaCA9PSAnOicpIHsKLSAgICAgICAgICAgIHRoaXMub2Zmc2V0ICsrOwotICAgICAgICAgICAgdGhpcy5uZXh0KCk7Ci0gICAgICAgICAgICB0b2sgPSBUb2tlbi5jcmVhdGVNb2RpZmllckdyb3VwKHRoaXMucGFyc2VSZWdleCgpLCBhZGQsIG1hc2spOwotICAgICAgICAgICAgaWYgKHRoaXMucmVhZCgpICE9IFRfUlBBUkVOKSAgdGhyb3cgZXgoInBhcnNlci5mYWN0b3IuMSIsIHRoaXMub2Zmc2V0LTEpOwotICAgICAgICAgICAgdGhpcy5uZXh0KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJyknKSB7ICAgICAgICAgICAgICAgICAvLyBzdWNoIGFzICg/LWkpCi0gICAgICAgICAgICB0aGlzLm9mZnNldCArKzsKLSAgICAgICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICAgICAgdG9rID0gVG9rZW4uY3JlYXRlTW9kaWZpZXJHcm91cCh0aGlzLnBhcnNlUmVnZXgoKSwgYWRkLCBtYXNrKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0aHJvdyBleCgicGFyc2VyLmZhY3Rvci4zIiwgdGhpcy5vZmZzZXQpOwotCi0gICAgICAgIHJldHVybiB0b2s7Ci0gICAgfQotICAgIFRva2VuIHByb2Nlc3NJbmRlcGVuZGVudCgpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICBUb2tlbiB0b2sgPSBUb2tlbi5jcmVhdGVMb29rKFRva2VuLklOREVQRU5ERU5ULCB0aGlzLnBhcnNlUmVnZXgoKSk7Ci0gICAgICAgIGlmICh0aGlzLnJlYWQoKSAhPSBUX1JQQVJFTikgIHRocm93IGV4KCJwYXJzZXIuZmFjdG9yLjEiLCB0aGlzLm9mZnNldC0xKTsKLSAgICAgICAgdGhpcy5uZXh0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNraXBzICcpJwotICAgICAgICByZXR1cm4gdG9rOwotICAgIH0KLSAgICBUb2tlbiBwcm9jZXNzQmFja3NvbGlkdXNfYygpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGludCBjaDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNdXN0IGJlIGluIDB4MDA0MC0weDAwNWYKLSAgICAgICAgaWYgKHRoaXMub2Zmc2V0ID49IHRoaXMucmVnZXhsZW4KLSAgICAgICAgICAgIHx8ICgoY2gyID0gdGhpcy5yZWdleC5jaGFyQXQodGhpcy5vZmZzZXQrKykpICYgMHhmZmUwKSAhPSAweDAwNDApCi0gICAgICAgICAgICB0aHJvdyBleCgicGFyc2VyLmF0b20uMSIsIHRoaXMub2Zmc2V0LTEpOwotICAgICAgICB0aGlzLm5leHQoKTsKLSAgICAgICAgcmV0dXJuIFRva2VuLmNyZWF0ZUNoYXIoY2gyLTB4NDApOwotICAgIH0KLSAgICBUb2tlbiBwcm9jZXNzQmFja3NvbGlkdXNfQygpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRocm93IGV4KCJwYXJzZXIucHJvY2Vzcy4xIiwgdGhpcy5vZmZzZXQpOwotICAgIH0KLSAgICBUb2tlbiBwcm9jZXNzQmFja3NvbGlkdXNfaSgpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIFRva2VuIHRvayA9IFRva2VuLmNyZWF0ZUNoYXIoJ2knKTsKLSAgICAgICAgdGhpcy5uZXh0KCk7Ci0gICAgICAgIHJldHVybiB0b2s7Ci0gICAgfQotICAgIFRva2VuIHByb2Nlc3NCYWNrc29saWR1c19JKCkgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKLSAgICAgICAgdGhyb3cgZXgoInBhcnNlci5wcm9jZXNzLjEiLCB0aGlzLm9mZnNldCk7Ci0gICAgfQotICAgIFRva2VuIHByb2Nlc3NCYWNrc29saWR1c19nKCkgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKLSAgICAgICAgdGhpcy5uZXh0KCk7Ci0gICAgICAgIHJldHVybiBUb2tlbi5nZXRHcmFwaGVtZVBhdHRlcm4oKTsKLSAgICB9Ci0gICAgVG9rZW4gcHJvY2Vzc0JhY2tzb2xpZHVzX1goKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICB0aGlzLm5leHQoKTsKLSAgICAgICAgcmV0dXJuIFRva2VuLmdldENvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKCk7Ci0gICAgfQotICAgIFRva2VuIHByb2Nlc3NCYWNrcmVmZXJlbmNlKCkgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKLSAgICAgICAgaW50IHJlZm51bSA9IHRoaXMuY2hhcmRhdGEtJzAnOwotICAgICAgICBUb2tlbiB0b2sgPSBUb2tlbi5jcmVhdGVCYWNrUmVmZXJlbmNlKHJlZm51bSk7Ci0gICAgICAgIHRoaXMuaGFzQmFja1JlZmVyZW5jZXMgPSB0cnVlOwotICAgICAgICBpZiAodGhpcy5yZWZlcmVuY2VzID09IG51bGwpICB0aGlzLnJlZmVyZW5jZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgIHRoaXMucmVmZXJlbmNlcy5hZGRFbGVtZW50KG5ldyBSZWZlcmVuY2VQb3NpdGlvbihyZWZudW0sIHRoaXMub2Zmc2V0LTIpKTsKLSAgICAgICAgdGhpcy5uZXh0KCk7Ci0gICAgICAgIHJldHVybiB0b2s7Ci0gICAgfQotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgLyoqCi0gICAgICogZmFjdG9yIDo6PSAoJ14nIHwgJyQnIHwgJ1xBJyB8ICdcWicgfCAnXHonIHwgJ1xiJyB8ICdcQicgfCAnXDwnIHwgJ1w+JwotICAgICAqICAgICAgICAgICAgfCBhdG9tICgoJyonIHwgJysnIHwgJz8nIHwgbWlubWF4ICkgJz8nPyApPykKLSAgICAgKiAgICAgICAgICAgIHwgJyg/PScgcmVnZXggJyknICB8ICcoPyEnIHJlZ2V4ICcpJyAgfCAnKD8mbHQ7PScgcmVnZXggJyknICB8ICcoPyZsdDshJyByZWdleCAnKScKLSAgICAgKiAgICAgICAgICAgIHwgJyg/IycgW14pXSogJyknCi0gICAgICogbWlubWF4IDo6PSAneycgbWluICgnLCcgbWF4Pyk/ICd9JwotICAgICAqIG1pbiA6Oj0gWzAtOV0rCi0gICAgICogbWF4IDo6PSBbMC05XSsKLSAgICAgKi8KLSAgICBUb2tlbiBwYXJzZUZhY3RvcigpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7ICAgICAgICAKLSAgICAgICAgaW50IGNoID0gdGhpcy5yZWFkKCk7Ci0gICAgICAgIFRva2VuIHRvazsKLSAgICAgICAgc3dpdGNoIChjaCkgewotICAgICAgICAgIGNhc2UgVF9DQVJFVDogICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzQ2FyZXQoKTsKLSAgICAgICAgICBjYXNlIFRfRE9MTEFSOiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RvbGxhcigpOwotICAgICAgICAgIGNhc2UgVF9MT09LQUhFQUQ6ICAgICByZXR1cm4gdGhpcy5wcm9jZXNzTG9va2FoZWFkKCk7Ci0gICAgICAgICAgY2FzZSBUX05FR0FUSVZFTE9PS0FIRUFEOiByZXR1cm4gdGhpcy5wcm9jZXNzTmVnYXRpdmVsb29rYWhlYWQoKTsKLSAgICAgICAgICBjYXNlIFRfTE9PS0JFSElORDogICAgcmV0dXJuIHRoaXMucHJvY2Vzc0xvb2tiZWhpbmQoKTsKLSAgICAgICAgICBjYXNlIFRfTkVHQVRJVkVMT09LQkVISU5EOiByZXR1cm4gdGhpcy5wcm9jZXNzTmVnYXRpdmVsb29rYmVoaW5kKCk7Ci0KLSAgICAgICAgICBjYXNlIFRfQ09NTUVOVDoKLSAgICAgICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICAgICAgcmV0dXJuIFRva2VuLmNyZWF0ZUVtcHR5KCk7Ci0KLSAgICAgICAgICBjYXNlIFRfQkFDS1NPTElEVVM6Ci0gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuY2hhcmRhdGEpIHsKLSAgICAgICAgICAgICAgY2FzZSAnQSc6IHJldHVybiB0aGlzLnByb2Nlc3NCYWNrc29saWR1c19BKCk7Ci0gICAgICAgICAgICAgIGNhc2UgJ1onOiByZXR1cm4gdGhpcy5wcm9jZXNzQmFja3NvbGlkdXNfWigpOwotICAgICAgICAgICAgICBjYXNlICd6JzogcmV0dXJuIHRoaXMucHJvY2Vzc0JhY2tzb2xpZHVzX3ooKTsKLSAgICAgICAgICAgICAgY2FzZSAnYic6IHJldHVybiB0aGlzLnByb2Nlc3NCYWNrc29saWR1c19iKCk7Ci0gICAgICAgICAgICAgIGNhc2UgJ0InOiByZXR1cm4gdGhpcy5wcm9jZXNzQmFja3NvbGlkdXNfQigpOwotICAgICAgICAgICAgICBjYXNlICc8JzogcmV0dXJuIHRoaXMucHJvY2Vzc0JhY2tzb2xpZHVzX2x0KCk7Ci0gICAgICAgICAgICAgIGNhc2UgJz4nOiByZXR1cm4gdGhpcy5wcm9jZXNzQmFja3NvbGlkdXNfZ3QoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRocm91Z2ggZG93bgotICAgICAgICB9Ci0gICAgICAgIHRvayA9IHRoaXMucGFyc2VBdG9tKCk7Ci0gICAgICAgIGNoID0gdGhpcy5yZWFkKCk7Ci0gICAgICAgIHN3aXRjaCAoY2gpIHsKLSAgICAgICAgICBjYXNlIFRfU1RBUjogIHJldHVybiB0aGlzLnByb2Nlc3NTdGFyKHRvayk7Ci0gICAgICAgICAgY2FzZSBUX1BMVVM6ICByZXR1cm4gdGhpcy5wcm9jZXNzUGx1cyh0b2spOwotICAgICAgICAgIGNhc2UgVF9RVUVTVElPTjogcmV0dXJuIHRoaXMucHJvY2Vzc1F1ZXN0aW9uKHRvayk7Ci0gICAgICAgICAgY2FzZSBUX0NIQVI6Ci0gICAgICAgICAgICBpZiAodGhpcy5jaGFyZGF0YSA9PSAneycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMub2Zmc2V0IC0+IG5leHQgb2YgJ3snCi0gICAgICAgICAgICAgICAgaW50IG9mZiA9IHRoaXMub2Zmc2V0OwotICAgICAgICAgICAgICAgIGludCBtaW4gPSAwLCBtYXggPSAtMTsKLSAgICAgICAgICAgICAgICBpZiAob2ZmID49IHRoaXMucmVnZXhsZW4pICBicmVhazsKLSAgICAgICAgICAgICAgICBjaCA9IHRoaXMucmVnZXguY2hhckF0KG9mZisrKTsKLSAgICAgICAgICAgICAgICBpZiAoY2ggIT0gJywnICYmIChjaCA8ICcwJyB8fCBjaCA+ICc5JykpICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoY2ggIT0gJywnKSB7ICAgICAgICAgICAgICAgIC8vIDAtOQotICAgICAgICAgICAgICAgICAgICBtaW4gPSBjaC0nMCc7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChvZmYgPCB0aGlzLnJlZ2V4bGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoY2ggPSB0aGlzLnJlZ2V4LmNoYXJBdChvZmYrKykpID49ICcwJyAmJiBjaCA8PSAnOScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1pbiA9IG1pbioxMCArY2gtJzAnOwotICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPCAwKSAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vaWYgKG9mZiA+PSB0aGlzLnJlZ2V4bGVuKSAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgbWF4ID0gbWluOwotICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnLCcpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9mZiA+PSB0aGlzLnJlZ2V4bGVuCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCAoKGNoID0gdGhpcy5yZWdleC5jaGFyQXQob2ZmKyspKSA8ICcwJyB8fCBjaCA+ICc5JykKLSAgICAgICAgICAgICAgICAgICAgICAgICYmIGNoICE9ICd9JykKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJ30nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXggPSAtMTsgICAgICAgICAgIC8vIHttaW4sfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbWF4ID0gY2gtJzAnOyAgICAgICAvLyB7bWluLG1heH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChvZmYgPCB0aGlzLnJlZ2V4bGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGNoID0gdGhpcy5yZWdleC5jaGFyQXQob2ZmKyspKSA+PSAnMCcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBjaCA8PSAnOScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXggPSBtYXgqMTAgK2NoLScwJzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoIDwgMCkgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiAobWluID4gbWF4KQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgdGhyb3cgbmV3IFBhcnNlRXhjZXB0aW9uKCJwYXJzZUZhY3RvcigpOiBtaW4gPiBtYXg6ICIrbWluKyIsICIrbWF4KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY2ggIT0gJ30nKSAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmYgLT4gbmV4dCBvZiAnfScKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGVja1F1ZXN0aW9uKG9mZikpIHsKLSAgICAgICAgICAgICAgICAgICAgdG9rID0gVG9rZW4uY3JlYXRlTkdDbG9zdXJlKHRvayk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0ID0gb2ZmKzE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdG9rID0gVG9rZW4uY3JlYXRlQ2xvc3VyZSh0b2spOwotICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldCA9IG9mZjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdG9rLnNldE1pbihtaW4pOwotICAgICAgICAgICAgICAgIHRvay5zZXRNYXgobWF4KTsKLSAgICAgICAgICAgICAgICAvL1N5c3RlbS5lcnIucHJpbnRsbigiQ0xPU1VSRTogIittaW4rIiwgIittYXgpOwotICAgICAgICAgICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b2s7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogYXRvbSA6Oj0gY2hhciB8ICcuJyB8IGNoYXItY2xhc3MgfCAnKCcgcmVnZXggJyknIHwgJyg/OicgcmVnZXggJyknIHwgJ1wnIFswLTldCi0gICAgICogICAgICAgICAgfCAnXHcnIHwgJ1xXJyB8ICdcZCcgfCAnXEQnIHwgJ1xzJyB8ICdcUycgfCBjYXRlZ29yeS1ibG9jawotICAgICAqICAgICAgICAgIHwgJyg/PicgcmVnZXggJyknCi0gICAgICogY2hhciA6Oj0gJ1xcJyB8ICdcJyBbZWZucnRdIHwgYm1wLWNvZGUgfCBjaGFyYWN0ZXItMQotICAgICAqLwotICAgIFRva2VuIHBhcnNlQXRvbSgpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIGludCBjaCA9IHRoaXMucmVhZCgpOwotICAgICAgICBUb2tlbiB0b2sgPSBudWxsOwotICAgICAgICBzd2l0Y2ggKGNoKSB7Ci0gICAgICAgICAgY2FzZSBUX0xQQVJFTjogICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NQYXJlbigpOwotICAgICAgICAgIGNhc2UgVF9MUEFSRU4yOiAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzUGFyZW4yKCk7IC8vICcoPzonCi0gICAgICAgICAgY2FzZSBUX0NPTkRJVElPTjogICAgIHJldHVybiB0aGlzLnByb2Nlc3NDb25kaXRpb24oKTsgLy8gJyg/KCcKLSAgICAgICAgICBjYXNlIFRfTU9ESUZJRVJTOiAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc01vZGlmaWVycygpOyAvLyAoP21vZGlmaWVycyAuLi4gKQotICAgICAgICAgIGNhc2UgVF9JTkRFUEVOREVOVDogICByZXR1cm4gdGhpcy5wcm9jZXNzSW5kZXBlbmRlbnQoKTsKLSAgICAgICAgICBjYXNlIFRfRE9UOgotICAgICAgICAgICAgdGhpcy5uZXh0KCk7ICAgICAgICAgICAgICAgICAgICAvLyBTa2lwcyAnLicKLSAgICAgICAgICAgIHRvayA9IFRva2VuLnRva2VuX2RvdDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAqIGNoYXItY2xhc3MgOjo9ICdbJyAoICdeJz8gcmFuZ2UgJywnPykrICddJwotICAgICAgICAgICAgICogcmFuZ2UgOjo9ICdcZCcgfCAnXHcnIHwgJ1xzJyB8IGNhdGVnb3J5LWJsb2NrIHwgcmFuZ2UtY2hhcgotICAgICAgICAgICAgICogICAgICAgICAgIHwgcmFuZ2UtY2hhciAnLScgcmFuZ2UtY2hhcgotICAgICAgICAgICAgICogcmFuZ2UtY2hhciA6Oj0gJ1xbJyB8ICdcXScgfCAnXFwnIHwgJ1wnIFssLWVmbnJ0dl0gfCBibXAtY29kZSB8IGNoYXJhY3Rlci0yCi0gICAgICAgICAgICAgKiBibXAtY2hhciA6Oj0gJ1wnICd1JyBbMC05YS1mQS1GXSBbMC05YS1mQS1GXSBbMC05YS1mQS1GXSBbMC05YS1mQS1GXQotICAgICAgICAgICAgICovCi0gICAgICAgICAgY2FzZSBUX0xCUkFDS0VUOiAgICAgIHJldHVybiB0aGlzLnBhcnNlQ2hhcmFjdGVyQ2xhc3ModHJ1ZSk7Ci0gICAgICAgICAgY2FzZSBUX1NFVF9PUEVSQVRJT05TOiByZXR1cm4gdGhpcy5wYXJzZVNldE9wZXJhdGlvbnMoKTsKLQotICAgICAgICAgIGNhc2UgVF9CQUNLU09MSURVUzoKLSAgICAgICAgICAgIHN3aXRjaCAodGhpcy5jaGFyZGF0YSkgewotICAgICAgICAgICAgICBjYXNlICdkJzogIGNhc2UgJ0QnOgotICAgICAgICAgICAgICBjYXNlICd3JzogIGNhc2UgJ1cnOgotICAgICAgICAgICAgICBjYXNlICdzJzogIGNhc2UgJ1MnOgotICAgICAgICAgICAgICAgIHRvayA9IHRoaXMuZ2V0VG9rZW5Gb3JTaG9ydGhhbmQodGhpcy5jaGFyZGF0YSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRvazsKLQotICAgICAgICAgICAgICBjYXNlICdlJzogIGNhc2UgJ2YnOiAgY2FzZSAnbic6ICBjYXNlICdyJzoKLSAgICAgICAgICAgICAgY2FzZSAndCc6ICBjYXNlICd1JzogIGNhc2UgJ3YnOiAgY2FzZSAneCc6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbnQgY2gyID0gdGhpcy5kZWNvZGVFc2NhcGVkKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaDIgPCAweDEwMDAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b2sgPSBUb2tlbi5jcmVhdGVDaGFyKGNoMik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b2sgPSBUb2tlbi5jcmVhdGVTdHJpbmcoUkVVdGlsLmRlY29tcG9zZVRvU3Vycm9nYXRlcyhjaDIpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICBjYXNlICdjJzogcmV0dXJuIHRoaXMucHJvY2Vzc0JhY2tzb2xpZHVzX2MoKTsKLSAgICAgICAgICAgICAgY2FzZSAnQyc6IHJldHVybiB0aGlzLnByb2Nlc3NCYWNrc29saWR1c19DKCk7Ci0gICAgICAgICAgICAgIGNhc2UgJ2knOiByZXR1cm4gdGhpcy5wcm9jZXNzQmFja3NvbGlkdXNfaSgpOwotICAgICAgICAgICAgICBjYXNlICdJJzogcmV0dXJuIHRoaXMucHJvY2Vzc0JhY2tzb2xpZHVzX0koKTsKLSAgICAgICAgICAgICAgY2FzZSAnZyc6IHJldHVybiB0aGlzLnByb2Nlc3NCYWNrc29saWR1c19nKCk7Ci0gICAgICAgICAgICAgIGNhc2UgJ1gnOiByZXR1cm4gdGhpcy5wcm9jZXNzQmFja3NvbGlkdXNfWCgpOwotICAgICAgICAgICAgICBjYXNlICcxJzogIGNhc2UgJzInOiAgY2FzZSAnMyc6ICBjYXNlICc0JzoKLSAgICAgICAgICAgICAgY2FzZSAnNSc6ICBjYXNlICc2JzogIGNhc2UgJzcnOiAgY2FzZSAnOCc6ICBjYXNlICc5JzoKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzQmFja3JlZmVyZW5jZSgpOwotCi0gICAgICAgICAgICAgIGNhc2UgJ1AnOgotICAgICAgICAgICAgICBjYXNlICdwJzoKLSAgICAgICAgICAgICAgICBpbnQgcHN0YXJ0ID0gdGhpcy5vZmZzZXQ7Ci0gICAgICAgICAgICAgICAgdG9rID0gcHJvY2Vzc0JhY2tzb2xpZHVzX3BQKHRoaXMuY2hhcmRhdGEpOwotICAgICAgICAgICAgICAgIGlmICh0b2sgPT0gbnVsbCkgIHRocm93IHRoaXMuZXgoInBhcnNlci5hdG9tLjUiLCBwc3RhcnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgdG9rID0gVG9rZW4uY3JlYXRlQ2hhcih0aGlzLmNoYXJkYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIFRfQ0hBUjoKLSAgICAgICAgICAgIHRvayA9IFRva2VuLmNyZWF0ZUNoYXIodGhpcy5jaGFyZGF0YSk7Ci0gICAgICAgICAgICBpbnQgaGlnaCA9IHRoaXMuY2hhcmRhdGE7Ci0gICAgICAgICAgICB0aGlzLm5leHQoKTsKLSAgICAgICAgICAgIGlmIChSRVV0aWwuaXNIaWdoU3Vycm9nYXRlKGhpZ2gpCi0gICAgICAgICAgICAgICAgJiYgdGhpcy5yZWFkKCkgPT0gVF9DSEFSICYmIFJFVXRpbC5pc0xvd1N1cnJvZ2F0ZSh0aGlzLmNoYXJkYXRhKSkgewotICAgICAgICAgICAgICAgIGNoYXJbXSBzdXIgPSBuZXcgY2hhclsyXTsKLSAgICAgICAgICAgICAgICBzdXJbMF0gPSAoY2hhciloaWdoOwotICAgICAgICAgICAgICAgIHN1clsxXSA9IChjaGFyKXRoaXMuY2hhcmRhdGE7Ci0gICAgICAgICAgICAgICAgdG9rID0gVG9rZW4uY3JlYXRlUGFyZW4oVG9rZW4uY3JlYXRlU3RyaW5nKG5ldyBTdHJpbmcoc3VyKSksIDApOwotICAgICAgICAgICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgdGhyb3cgdGhpcy5leCgicGFyc2VyLmF0b20uNCIsIHRoaXMub2Zmc2V0LTEpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b2s7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIFJhbmdlVG9rZW4gcHJvY2Vzc0JhY2tzb2xpZHVzX3BQKGludCBjKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICBib29sZWFuIHBvc2l0aXZlID0gYyA9PSAncCc7Ci0gICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICBpZiAodGhpcy5yZWFkKCkgIT0gVF9DSEFSKSAgdGhyb3cgdGhpcy5leCgicGFyc2VyLmF0b20uMiIsIHRoaXMub2Zmc2V0LTEpOwotICAgICAgICBSYW5nZVRva2VuIHRvazsKLSAgICAgICAgc3dpdGNoICh0aGlzLmNoYXJkYXRhKSB7Ci0gICAgICAgICAgY2FzZSAnTCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMZXR0ZXIKLSAgICAgICAgICAgIHRvayA9IFRva2VuLmdldFJhbmdlKCJMIiwgcG9zaXRpdmUpOyAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAnTSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYXJrCi0gICAgICAgICAgICB0b2sgPSBUb2tlbi5nZXRSYW5nZSgiTSIsIHBvc2l0aXZlKTsgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ04nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTnVtYmVyCi0gICAgICAgICAgICB0b2sgPSBUb2tlbi5nZXRSYW5nZSgiTiIsIHBvc2l0aXZlKTsgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ1onOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VwYXJhdG9yCi0gICAgICAgICAgICB0b2sgPSBUb2tlbi5nZXRSYW5nZSgiWiIsIHBvc2l0aXZlKTsgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ0MnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXIKLSAgICAgICAgICAgIHRvayA9IFRva2VuLmdldFJhbmdlKCJDIiwgcG9zaXRpdmUpOyAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAnUCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQdW5jdHVhdGlvbgotICAgICAgICAgICAgdG9rID0gVG9rZW4uZ2V0UmFuZ2UoIlAiLCBwb3NpdGl2ZSk7ICBicmVhazsKLSAgICAgICAgICBjYXNlICdTJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN5bWJvbAotICAgICAgICAgICAgdG9rID0gVG9rZW4uZ2V0UmFuZ2UoIlMiLCBwb3NpdGl2ZSk7ICBicmVhazsKLSAgICAgICAgICBjYXNlICd7JzoKLSAgICAgICAgICAgIC8vIHRoaXMub2Zmc2V0IHBvaW50cyB0aGUgbmV4dCBvZiAneycuCi0gICAgICAgICAgICAvL3BzdGFydCA9IHRoaXMub2Zmc2V0OwotICAgICAgICAgICAgaW50IG5hbWVzdGFydCA9IHRoaXMub2Zmc2V0OwotICAgICAgICAgICAgaW50IG5hbWVlbmQgPSB0aGlzLnJlZ2V4LmluZGV4T2YoJ30nLCBuYW1lc3RhcnQpOwotICAgICAgICAgICAgaWYgKG5hbWVlbmQgPCAwKSAgdGhyb3cgdGhpcy5leCgicGFyc2VyLmF0b20uMyIsIHRoaXMub2Zmc2V0KTsKLSAgICAgICAgICAgIFN0cmluZyBwbmFtZSA9IHRoaXMucmVnZXguc3Vic3RyaW5nKG5hbWVzdGFydCwgbmFtZWVuZCk7Ci0gICAgICAgICAgICB0aGlzLm9mZnNldCA9IG5hbWVlbmQrMTsKLSAgICAgICAgICAgIHRvayA9IFRva2VuLmdldFJhbmdlKHBuYW1lLCBwb3NpdGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTZXQoUmVndWxhckV4cHJlc3Npb24uWE1MU0NIRU1BX01PREUpKTsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgIGlmICh0aGlzLmlzU2V0KFJlZ3VsYXJFeHByZXNzaW9uLklHTk9SRV9DQVNFKSkKLSAgICAgICAgICAgICAgdG9rID0gUmFuZ2VUb2tlbi5jcmVhdGVDYXNlSW5zZW5zaXRpdmVUb2tlbih0b2spOwotICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHRocm93IHRoaXMuZXgoInBhcnNlci5hdG9tLjIiLCB0aGlzLm9mZnNldC0xKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdG9rOwotICAgIH0KLQotICAgIGludCBwcm9jZXNzQ0lpbkNoYXJhY3RlckNsYXNzKFJhbmdlVG9rZW4gdG9rLCBpbnQgYykgewotICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGVFc2NhcGVkKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogY2hhci1jbGFzcyA6Oj0gJ1snICggJ14nPyByYW5nZSAnLCc/KSsgJ10nCi0gICAgICogcmFuZ2UgOjo9ICdcZCcgfCAnXHcnIHwgJ1xzJyB8IGNhdGVnb3J5LWJsb2NrIHwgcmFuZ2UtY2hhcgotICAgICAqICAgICAgICAgICB8IHJhbmdlLWNoYXIgJy0nIHJhbmdlLWNoYXIKLSAgICAgKiByYW5nZS1jaGFyIDo6PSAnXFsnIHwgJ1xdJyB8ICdcXCcgfCAnXCcgWywtZWZucnR2XSB8IGJtcC1jb2RlIHwgY2hhcmFjdGVyLTIKLSAgICAgKiBibXAtY29kZSA6Oj0gJ1wnICd1JyBbMC05YS1mQS1GXSBbMC05YS1mQS1GXSBbMC05YS1mQS1GXSBbMC05YS1mQS1GXQotICAgICAqLwotICAgIHByb3RlY3RlZCBSYW5nZVRva2VuIHBhcnNlQ2hhcmFjdGVyQ2xhc3MoYm9vbGVhbiB1c2VOcmFuZ2UpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRoaXMuc2V0Q29udGV4dChTX0lOQlJBQ0tFVFMpOwotICAgICAgICB0aGlzLm5leHQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ1snCi0gICAgICAgIGJvb2xlYW4gbnJhbmdlID0gZmFsc2U7Ci0gICAgICAgIFJhbmdlVG9rZW4gYmFzZSA9IG51bGw7Ci0gICAgICAgIFJhbmdlVG9rZW4gdG9rOwotICAgICAgICBpZiAodGhpcy5yZWFkKCkgPT0gVF9DSEFSICYmIHRoaXMuY2hhcmRhdGEgPT0gJ14nKSB7Ci0gICAgICAgICAgICBucmFuZ2UgPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5uZXh0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gJ14nCi0gICAgICAgICAgICBpZiAodXNlTnJhbmdlKSB7Ci0gICAgICAgICAgICAgICAgdG9rID0gVG9rZW4uY3JlYXRlTlJhbmdlKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGJhc2UgPSBUb2tlbi5jcmVhdGVSYW5nZSgpOwotICAgICAgICAgICAgICAgIGJhc2UuYWRkUmFuZ2UoMCwgVG9rZW4uVVRGMTZfTUFYKTsKLSAgICAgICAgICAgICAgICB0b2sgPSBUb2tlbi5jcmVhdGVSYW5nZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdG9rID0gVG9rZW4uY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgfQotICAgICAgICBpbnQgdHlwZTsKLSAgICAgICAgYm9vbGVhbiBmaXJzdGxvb3AgPSB0cnVlOwotICAgICAgICB3aGlsZSAoKHR5cGUgPSB0aGlzLnJlYWQoKSkgIT0gVF9FT0YpIHsKLSAgICAgICAgICAgIGlmICh0eXBlID09IFRfQ0hBUiAmJiB0aGlzLmNoYXJkYXRhID09ICddJyAmJiAhZmlyc3Rsb29wKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZmlyc3Rsb29wID0gZmFsc2U7Ci0gICAgICAgICAgICBpbnQgYyA9IHRoaXMuY2hhcmRhdGE7Ci0gICAgICAgICAgICBib29sZWFuIGVuZCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKHR5cGUgPT0gVF9CQUNLU09MSURVUykgewotICAgICAgICAgICAgICAgIHN3aXRjaCAoYykgewotICAgICAgICAgICAgICAgICAgY2FzZSAnZCc6ICBjYXNlICdEJzoKLSAgICAgICAgICAgICAgICAgIGNhc2UgJ3cnOiAgY2FzZSAnVyc6Ci0gICAgICAgICAgICAgICAgICBjYXNlICdzJzogIGNhc2UgJ1MnOgotICAgICAgICAgICAgICAgICAgICB0b2subWVyZ2VSYW5nZXModGhpcy5nZXRUb2tlbkZvclNob3J0aGFuZChjKSk7Ci0gICAgICAgICAgICAgICAgICAgIGVuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICBjYXNlICdpJzogIGNhc2UgJ0knOgotICAgICAgICAgICAgICAgICAgY2FzZSAnYyc6ICBjYXNlICdDJzoKLSAgICAgICAgICAgICAgICAgICAgYyA9IHRoaXMucHJvY2Vzc0NJaW5DaGFyYWN0ZXJDbGFzcyh0b2ssIGMpOwotICAgICAgICAgICAgICAgICAgICBpZiAoYyA8IDApICBlbmQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICBjYXNlICdwJzoKLSAgICAgICAgICAgICAgICAgIGNhc2UgJ1AnOgotICAgICAgICAgICAgICAgICAgICBpbnQgcHN0YXJ0ID0gdGhpcy5vZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIFJhbmdlVG9rZW4gdG9rMiA9IHRoaXMucHJvY2Vzc0JhY2tzb2xpZHVzX3BQKGMpOwotICAgICAgICAgICAgICAgICAgICBpZiAodG9rMiA9PSBudWxsKSAgdGhyb3cgdGhpcy5leCgicGFyc2VyLmF0b20uNSIsIHBzdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgIHRvay5tZXJnZVJhbmdlcyh0b2syKTsKLSAgICAgICAgICAgICAgICAgICAgZW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGMgPSB0aGlzLmRlY29kZUVzY2FwZWQoKTsKLSAgICAgICAgICAgICAgICB9IC8vIFwgKyBjCi0gICAgICAgICAgICB9IC8vIGJhY2tzb2xpZHVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQT1NJWCBDaGFyYWN0ZXIgY2xhc3Mgc3VjaCBhcyBbOmFsbnVtOl0KLSAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gVF9QT1NJWF9DSEFSQ0xBU1NfU1RBUlQpIHsKLSAgICAgICAgICAgICAgICBpbnQgbmFtZWVuZCA9IHRoaXMucmVnZXguaW5kZXhPZignOicsIHRoaXMub2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBpZiAobmFtZWVuZCA8IDApIHRocm93IHRoaXMuZXgoInBhcnNlci5jYy4xIiwgdGhpcy5vZmZzZXQpOwotICAgICAgICAgICAgICAgIGJvb2xlYW4gcG9zaXRpdmUgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlZ2V4LmNoYXJBdCh0aGlzLm9mZnNldCkgPT0gJ14nKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0ICsrOwotICAgICAgICAgICAgICAgICAgICBwb3NpdGl2ZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHRoaXMucmVnZXguc3Vic3RyaW5nKHRoaXMub2Zmc2V0LCBuYW1lZW5kKTsKLSAgICAgICAgICAgICAgICBSYW5nZVRva2VuIHJhbmdlID0gVG9rZW4uZ2V0UmFuZ2UobmFtZSwgcG9zaXRpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTZXQoUmVndWxhckV4cHJlc3Npb24uWE1MU0NIRU1BX01PREUpKTsKLSAgICAgICAgICAgICAgICBpZiAocmFuZ2UgPT0gbnVsbCkgIHRocm93IHRoaXMuZXgoInBhcnNlci5jYy4zIiwgdGhpcy5vZmZzZXQpOwotICAgICAgICAgICAgICAgIHRvay5tZXJnZVJhbmdlcyhyYW5nZSk7Ci0gICAgICAgICAgICAgICAgZW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAobmFtZWVuZCsxID49IHRoaXMucmVnZXhsZW4gfHwgdGhpcy5yZWdleC5jaGFyQXQobmFtZWVuZCsxKSAhPSAnXScpCi0gICAgICAgICAgICAgICAgICAgIHRocm93IHRoaXMuZXgoInBhcnNlci5jYy4xIiwgbmFtZWVuZCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5vZmZzZXQgPSBuYW1lZW5kKzI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzLm5leHQoKTsKLSAgICAgICAgICAgIGlmICghZW5kKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIG5vdCBzaG9ydGhhbmRzLi4uCi0gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZCgpICE9IFRfQ0hBUiB8fCB0aGlzLmNoYXJkYXRhICE9ICctJykgeyAvLyBIZXJlIGlzIG5vICctJy4KLSAgICAgICAgICAgICAgICAgICAgdG9rLmFkZFJhbmdlKGMsIGMpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCgpOyAvLyBTa2lwcyAnLScKLSAgICAgICAgICAgICAgICAgICAgaWYgKCh0eXBlID0gdGhpcy5yZWFkKCkpID09IFRfRU9GKSAgdGhyb3cgdGhpcy5leCgicGFyc2VyLmNjLjIiLCB0aGlzLm9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09IFRfQ0hBUiAmJiB0aGlzLmNoYXJkYXRhID09ICddJykgewotICAgICAgICAgICAgICAgICAgICAgICAgdG9rLmFkZFJhbmdlKGMsIGMpOwotICAgICAgICAgICAgICAgICAgICAgICAgdG9rLmFkZFJhbmdlKCctJywgJy0nKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCByYW5nZWVuZCA9IHRoaXMuY2hhcmRhdGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBUX0JBQ0tTT0xJRFVTKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlZW5kID0gdGhpcy5kZWNvZGVFc2NhcGVkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvay5hZGRSYW5nZShjLCByYW5nZWVuZCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodGhpcy5pc1NldChSZWd1bGFyRXhwcmVzc2lvbi5TUEVDSUFMX0NPTU1BKQotICAgICAgICAgICAgICAgICYmIHRoaXMucmVhZCgpID09IFRfQ0hBUiAmJiB0aGlzLmNoYXJkYXRhID09ICcsJykKLSAgICAgICAgICAgICAgICB0aGlzLm5leHQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAodGhpcy5yZWFkKCkgPT0gVF9FT0YpCi0gICAgICAgICAgICB0aHJvdyB0aGlzLmV4KCJwYXJzZXIuY2MuMiIsIHRoaXMub2Zmc2V0KTsKLSAgICAgICAgaWYgKCF1c2VOcmFuZ2UgJiYgbnJhbmdlKSB7Ci0gICAgICAgICAgICBiYXNlLnN1YnRyYWN0UmFuZ2VzKHRvayk7Ci0gICAgICAgICAgICB0b2sgPSBiYXNlOwotICAgICAgICB9Ci0gICAgICAgIHRvay5zb3J0UmFuZ2VzKCk7Ci0gICAgICAgIHRvay5jb21wYWN0UmFuZ2VzKCk7Ci0gICAgICAgIC8vdG9rLmR1bXBSYW5nZXMoKTsKLSAgICAgICAgLyoKLSAgICAgICAgaWYgKHRoaXMuaXNTZXQoUmVndWxhckV4cHJlc3Npb24uSUdOT1JFX0NBU0UpKQotICAgICAgICAgICAgdG9rID0gUmFuZ2VUb2tlbi5jcmVhdGVDYXNlSW5zZW5zaXRpdmVUb2tlbih0b2spOwotICAgICAgICAqLwotICAgICAgICB0aGlzLnNldENvbnRleHQoU19OT1JNQUwpOwotICAgICAgICB0aGlzLm5leHQoKTsgICAgICAgICAgICAgICAgICAgIC8vIFNraXBzICddJwotCi0gICAgICAgIHJldHVybiB0b2s7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogJyg/WycgLi4uICddJyAoKCctJyB8ICcrJyB8ICcmJykgJ1snIC4uLiAnXScpPyAnKScKLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgUmFuZ2VUb2tlbiBwYXJzZVNldE9wZXJhdGlvbnMoKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICBSYW5nZVRva2VuIHRvayA9IHRoaXMucGFyc2VDaGFyYWN0ZXJDbGFzcyhmYWxzZSk7Ci0gICAgICAgIGludCB0eXBlOwotICAgICAgICB3aGlsZSAoKHR5cGUgPSB0aGlzLnJlYWQoKSkgIT0gVF9SUEFSRU4pIHsKLSAgICAgICAgICAgIGludCBjaCA9IHRoaXMuY2hhcmRhdGE7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBUX0NIQVIgJiYgKGNoID09ICctJyB8fCBjaCA9PSAnJicpCi0gICAgICAgICAgICAgICAgfHwgdHlwZSA9PSBUX1BMVVMpIHsKLSAgICAgICAgICAgICAgICB0aGlzLm5leHQoKTsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkKCkgIT0gVF9MQlJBQ0tFVCkgdGhyb3cgZXgoInBhcnNlci5vcGUuMSIsIHRoaXMub2Zmc2V0LTEpOwotICAgICAgICAgICAgICAgIFJhbmdlVG9rZW4gdDIgPSB0aGlzLnBhcnNlQ2hhcmFjdGVyQ2xhc3MoZmFsc2UpOwotICAgICAgICAgICAgICAgIGlmICh0eXBlID09IFRfUExVUykKLSAgICAgICAgICAgICAgICAgICAgdG9rLm1lcmdlUmFuZ2VzKHQyKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnLScpCi0gICAgICAgICAgICAgICAgICAgIHRvay5zdWJ0cmFjdFJhbmdlcyh0Mik7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT0gJyYnKQotICAgICAgICAgICAgICAgICAgICB0b2suaW50ZXJzZWN0UmFuZ2VzKHQyKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJBU1NFUlQiKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgZXgoInBhcnNlci5vcGUuMiIsIHRoaXMub2Zmc2V0LTEpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICByZXR1cm4gdG9rOwotICAgIH0KLQotICAgIFRva2VuIGdldFRva2VuRm9yU2hvcnRoYW5kKGludCBjaCkgewotICAgICAgICBUb2tlbiB0b2s7Ci0gICAgICAgIHN3aXRjaCAoY2gpIHsKLSAgICAgICAgICBjYXNlICdkJzoKLSAgICAgICAgICAgIHRvayA9IHRoaXMuaXNTZXQoUmVndWxhckV4cHJlc3Npb24uVVNFX1VOSUNPREVfQ0FURUdPUlkpCi0gICAgICAgICAgICAgICAgPyBUb2tlbi5nZXRSYW5nZSgiTmQiLCB0cnVlKSA6IFRva2VuLnRva2VuXzB0bzk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICdEJzoKLSAgICAgICAgICAgIHRvayA9IHRoaXMuaXNTZXQoUmVndWxhckV4cHJlc3Npb24uVVNFX1VOSUNPREVfQ0FURUdPUlkpCi0gICAgICAgICAgICAgICAgPyBUb2tlbi5nZXRSYW5nZSgiTmQiLCBmYWxzZSkgOiBUb2tlbi50b2tlbl9ub3RfMHRvOTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ3cnOgotICAgICAgICAgICAgdG9rID0gdGhpcy5pc1NldChSZWd1bGFyRXhwcmVzc2lvbi5VU0VfVU5JQ09ERV9DQVRFR09SWSkKLSAgICAgICAgICAgICAgICA/IFRva2VuLmdldFJhbmdlKCJJc1dvcmQiLCB0cnVlKSA6IFRva2VuLnRva2VuX3dvcmRjaGFyczsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ1cnOgotICAgICAgICAgICAgdG9rID0gdGhpcy5pc1NldChSZWd1bGFyRXhwcmVzc2lvbi5VU0VfVU5JQ09ERV9DQVRFR09SWSkKLSAgICAgICAgICAgICAgICA/IFRva2VuLmdldFJhbmdlKCJJc1dvcmQiLCBmYWxzZSkgOiBUb2tlbi50b2tlbl9ub3Rfd29yZGNoYXJzOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAncyc6Ci0gICAgICAgICAgICB0b2sgPSB0aGlzLmlzU2V0KFJlZ3VsYXJFeHByZXNzaW9uLlVTRV9VTklDT0RFX0NBVEVHT1JZKQotICAgICAgICAgICAgICAgID8gVG9rZW4uZ2V0UmFuZ2UoIklzU3BhY2UiLCB0cnVlKSA6IFRva2VuLnRva2VuX3NwYWNlczsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ1MnOgotICAgICAgICAgICAgdG9rID0gdGhpcy5pc1NldChSZWd1bGFyRXhwcmVzc2lvbi5VU0VfVU5JQ09ERV9DQVRFR09SWSkKLSAgICAgICAgICAgICAgICA/IFRva2VuLmdldFJhbmdlKCJJc1NwYWNlIiwgZmFsc2UpIDogVG9rZW4udG9rZW5fbm90X3NwYWNlczsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbnRlcm5hbCBFcnJvcjogc2hvcnRoYW5kczogXFx1IitJbnRlZ2VyLnRvU3RyaW5nKGNoLCAxNikpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0b2s7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICovCi0gICAgaW50IGRlY29kZUVzY2FwZWQoKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICBpZiAodGhpcy5yZWFkKCkgIT0gVF9CQUNLU09MSURVUykgIHRocm93IGV4KCJwYXJzZXIubmV4dC4xIiwgdGhpcy5vZmZzZXQtMSk7Ci0gICAgICAgIGludCBjID0gdGhpcy5jaGFyZGF0YTsKLSAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgY2FzZSAnZSc6ICBjID0gMHgxYjsgIGJyZWFrOyAvLyBFU0NBUEUgVSswMDFCCi0gICAgICAgICAgY2FzZSAnZic6ICBjID0gJ1xmJzsgIGJyZWFrOyAvLyBGT1JNIEZFRUQgVSswMDBDCi0gICAgICAgICAgY2FzZSAnbic6ICBjID0gJ1xuJzsgIGJyZWFrOyAvLyBMSU5FIEZFRUQgVSswMDBBCi0gICAgICAgICAgY2FzZSAncic6ICBjID0gJ1xyJzsgIGJyZWFrOyAvLyBDUlJJQUdFIFJFVFVSTiBVKzAwMEQKLSAgICAgICAgICBjYXNlICd0JzogIGMgPSAnXHQnOyAgYnJlYWs7IC8vIEhPUklaT05UQUwgVEFCVUxBVElPTiBVKzAwMDkKLSAgICAgICAgICAvL2Nhc2UgJ3YnOiAgYyA9IDB4MGI7ICBicmVhazsgLy8gVkVSVElDQUwgVEFCVUxBVElPTiBVKzAwMEIKLSAgICAgICAgICBjYXNlICd4JzoKLSAgICAgICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICAgICAgaWYgKHRoaXMucmVhZCgpICE9IFRfQ0hBUikgIHRocm93IGV4KCJwYXJzZXIuZGVzY2FwZS4xIiwgdGhpcy5vZmZzZXQtMSk7Ci0gICAgICAgICAgICBpZiAodGhpcy5jaGFyZGF0YSA9PSAneycpIHsKLSAgICAgICAgICAgICAgICBpbnQgdjEgPSAwOwotICAgICAgICAgICAgICAgIGludCB1diA9IDA7Ci0gICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZCgpICE9IFRfQ0hBUikgIHRocm93IGV4KCJwYXJzZXIuZGVzY2FwZS4xIiwgdGhpcy5vZmZzZXQtMSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgodjEgPSBoZXhDaGFyKHRoaXMuY2hhcmRhdGEpKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHV2ID4gdXYqMTYpIHRocm93IGV4KCJwYXJzZXIuZGVzY2FwZS4yIiwgdGhpcy5vZmZzZXQtMSk7Ci0gICAgICAgICAgICAgICAgICAgIHV2ID0gdXYqMTYrdjE7Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hhcmRhdGEgIT0gJ30nKSAgdGhyb3cgZXgoInBhcnNlci5kZXNjYXBlLjMiLCB0aGlzLm9mZnNldC0xKTsKLSAgICAgICAgICAgICAgICBpZiAodXYgPiBUb2tlbi5VVEYxNl9NQVgpICB0aHJvdyBleCgicGFyc2VyLmRlc2NhcGUuNCIsIHRoaXMub2Zmc2V0LTEpOwotICAgICAgICAgICAgICAgIGMgPSB1djsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaW50IHYxID0gMDsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkKCkgIT0gVF9DSEFSIHx8ICh2MSA9IGhleENoYXIodGhpcy5jaGFyZGF0YSkpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXgoInBhcnNlci5kZXNjYXBlLjEiLCB0aGlzLm9mZnNldC0xKTsKLSAgICAgICAgICAgICAgICBpbnQgdXYgPSB2MTsKLSAgICAgICAgICAgICAgICB0aGlzLm5leHQoKTsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkKCkgIT0gVF9DSEFSIHx8ICh2MSA9IGhleENoYXIodGhpcy5jaGFyZGF0YSkpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXgoInBhcnNlci5kZXNjYXBlLjEiLCB0aGlzLm9mZnNldC0xKTsKLSAgICAgICAgICAgICAgICB1diA9IHV2KjE2K3YxOwotICAgICAgICAgICAgICAgIGMgPSB1djsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSAndSc6Ci0gICAgICAgICAgICBpbnQgdjEgPSAwOwotICAgICAgICAgICAgdGhpcy5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAodGhpcy5yZWFkKCkgIT0gVF9DSEFSIHx8ICh2MSA9IGhleENoYXIodGhpcy5jaGFyZGF0YSkpIDwgMCkKLSAgICAgICAgICAgICAgICB0aHJvdyBleCgicGFyc2VyLmRlc2NhcGUuMSIsIHRoaXMub2Zmc2V0LTEpOwotICAgICAgICAgICAgaW50IHV2ID0gdjE7Ci0gICAgICAgICAgICB0aGlzLm5leHQoKTsKLSAgICAgICAgICAgIGlmICh0aGlzLnJlYWQoKSAhPSBUX0NIQVIgfHwgKHYxID0gaGV4Q2hhcih0aGlzLmNoYXJkYXRhKSkgPCAwKQotICAgICAgICAgICAgICAgIHRocm93IGV4KCJwYXJzZXIuZGVzY2FwZS4xIiwgdGhpcy5vZmZzZXQtMSk7Ci0gICAgICAgICAgICB1diA9IHV2KjE2K3YxOwotICAgICAgICAgICAgdGhpcy5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAodGhpcy5yZWFkKCkgIT0gVF9DSEFSIHx8ICh2MSA9IGhleENoYXIodGhpcy5jaGFyZGF0YSkpIDwgMCkKLSAgICAgICAgICAgICAgICB0aHJvdyBleCgicGFyc2VyLmRlc2NhcGUuMSIsIHRoaXMub2Zmc2V0LTEpOwotICAgICAgICAgICAgdXYgPSB1dioxNit2MTsKLSAgICAgICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICAgICAgaWYgKHRoaXMucmVhZCgpICE9IFRfQ0hBUiB8fCAodjEgPSBoZXhDaGFyKHRoaXMuY2hhcmRhdGEpKSA8IDApCi0gICAgICAgICAgICAgICAgdGhyb3cgZXgoInBhcnNlci5kZXNjYXBlLjEiLCB0aGlzLm9mZnNldC0xKTsKLSAgICAgICAgICAgIHV2ID0gdXYqMTYrdjE7Ci0gICAgICAgICAgICBjID0gdXY7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgJ3YnOgotICAgICAgICAgICAgdGhpcy5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAodGhpcy5yZWFkKCkgIT0gVF9DSEFSIHx8ICh2MSA9IGhleENoYXIodGhpcy5jaGFyZGF0YSkpIDwgMCkKLSAgICAgICAgICAgICAgICB0aHJvdyBleCgicGFyc2VyLmRlc2NhcGUuMSIsIHRoaXMub2Zmc2V0LTEpOwotICAgICAgICAgICAgdXYgPSB2MTsKLSAgICAgICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICAgICAgaWYgKHRoaXMucmVhZCgpICE9IFRfQ0hBUiB8fCAodjEgPSBoZXhDaGFyKHRoaXMuY2hhcmRhdGEpKSA8IDApCi0gICAgICAgICAgICAgICAgdGhyb3cgZXgoInBhcnNlci5kZXNjYXBlLjEiLCB0aGlzLm9mZnNldC0xKTsKLSAgICAgICAgICAgIHV2ID0gdXYqMTYrdjE7Ci0gICAgICAgICAgICB0aGlzLm5leHQoKTsKLSAgICAgICAgICAgIGlmICh0aGlzLnJlYWQoKSAhPSBUX0NIQVIgfHwgKHYxID0gaGV4Q2hhcih0aGlzLmNoYXJkYXRhKSkgPCAwKQotICAgICAgICAgICAgICAgIHRocm93IGV4KCJwYXJzZXIuZGVzY2FwZS4xIiwgdGhpcy5vZmZzZXQtMSk7Ci0gICAgICAgICAgICB1diA9IHV2KjE2K3YxOwotICAgICAgICAgICAgdGhpcy5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAodGhpcy5yZWFkKCkgIT0gVF9DSEFSIHx8ICh2MSA9IGhleENoYXIodGhpcy5jaGFyZGF0YSkpIDwgMCkKLSAgICAgICAgICAgICAgICB0aHJvdyBleCgicGFyc2VyLmRlc2NhcGUuMSIsIHRoaXMub2Zmc2V0LTEpOwotICAgICAgICAgICAgdXYgPSB1dioxNit2MTsKLSAgICAgICAgICAgIHRoaXMubmV4dCgpOwotICAgICAgICAgICAgaWYgKHRoaXMucmVhZCgpICE9IFRfQ0hBUiB8fCAodjEgPSBoZXhDaGFyKHRoaXMuY2hhcmRhdGEpKSA8IDApCi0gICAgICAgICAgICAgICAgdGhyb3cgZXgoInBhcnNlci5kZXNjYXBlLjEiLCB0aGlzLm9mZnNldC0xKTsKLSAgICAgICAgICAgIHV2ID0gdXYqMTYrdjE7Ci0gICAgICAgICAgICB0aGlzLm5leHQoKTsKLSAgICAgICAgICAgIGlmICh0aGlzLnJlYWQoKSAhPSBUX0NIQVIgfHwgKHYxID0gaGV4Q2hhcih0aGlzLmNoYXJkYXRhKSkgPCAwKQotICAgICAgICAgICAgICAgIHRocm93IGV4KCJwYXJzZXIuZGVzY2FwZS4xIiwgdGhpcy5vZmZzZXQtMSk7Ci0gICAgICAgICAgICB1diA9IHV2KjE2K3YxOwotICAgICAgICAgICAgaWYgKHV2ID4gVG9rZW4uVVRGMTZfTUFYKSAgdGhyb3cgZXgoInBhcnNlci5kZXNjYXBwZS40IiwgdGhpcy5vZmZzZXQtMSk7Ci0gICAgICAgICAgICBjID0gdXY7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICdBJzoKLSAgICAgICAgICBjYXNlICdaJzoKLSAgICAgICAgICBjYXNlICd6JzoKLSAgICAgICAgICAgIHRocm93IGV4KCJwYXJzZXIuZGVzY2FwZS41IiwgdGhpcy5vZmZzZXQtMik7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYzsKLSAgICB9Ci0KLSAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBpbnQgaGV4Q2hhcihpbnQgY2gpIHsKLSAgICAgICAgaWYgKGNoIDwgJzAnKSAgcmV0dXJuIC0xOwotICAgICAgICBpZiAoY2ggPiAnZicpICByZXR1cm4gLTE7Ci0gICAgICAgIGlmIChjaCA8PSAnOScpICByZXR1cm4gY2gtJzAnOwotICAgICAgICBpZiAoY2ggPCAnQScpICByZXR1cm4gLTE7Ci0gICAgICAgIGlmIChjaCA8PSAnRicpICByZXR1cm4gY2gtJ0EnKzEwOwotICAgICAgICBpZiAoY2ggPCAnYScpICByZXR1cm4gLTE7Ci0gICAgICAgIHJldHVybiBjaC0nYScrMTA7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9yZWdleC9SZWd1bGFyRXhwcmVzc2lvbi5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9yZWdleC9SZWd1bGFyRXhwcmVzc2lvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjkxOWZjLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvcmVnZXgvUmVndWxhckV4cHJlc3Npb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxODggKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwucmVnZXg7Ci0KLWltcG9ydCBqYXZhLnRleHQuQ2hhcmFjdGVySXRlcmF0b3I7Ci0KLS8qKgotICogQSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgZW5naW5lIHVzaW5nIE5vbi1kZXRlcm1pbmlzdGljIEZpbml0ZSBBdXRvbWF0b24gKE5GQSkuCi0gKiBUaGlzIGVuZ2luZSBkb2VzIG5vdCBjb25mb3JtIHRvIHRoZSBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb24uCi0gKgotICogPGhyIHdpZHRoPSI1MCUiPgotICogPGgzPkhvdyB0byB1c2U8L2gzPgotICoKLSAqIDxkbD4KLSAqICAgPGR0PkEuIFN0YW5kYXJkIHdheQotICogICA8ZGQ+Ci0gKiA8cHJlPgotICogUmVndWxhckV4cHJlc3Npb24gcmUgPSBuZXcgUmVndWxhckV4cHJlc3Npb24oPHZhcj5yZWdleDwvdmFyPik7Ci0gKiBpZiAocmUubWF0Y2hlcyh0ZXh0KSkgeyAuLi4gfQotICogPC9wcmU+Ci0gKgotICogICA8ZHQ+Qi4gQ2FwdHVyaW5nIGdyb3VwcwotICogICA8ZGQ+Ci0gKiA8cHJlPgotICogUmVndWxhckV4cHJlc3Npb24gcmUgPSBuZXcgUmVndWxhckV4cHJlc3Npb24oPHZhcj5yZWdleDwvdmFyPik7Ci0gKiBNYXRjaCBtYXRjaCA9IG5ldyBNYXRjaCgpOwotICogaWYgKHJlLm1hdGNoZXModGV4dCwgbWF0Y2gpKSB7Ci0gKiAgICAgLi4uIC8vIFlvdSBjYW4gcmVmZXIgY2FwdHVyZWQgdGV4dHMgd2l0aCBtZXRob2RzIG9mIHRoZSA8Y29kZT5NYXRjaDwvY29kZT4gY2xhc3MuCi0gKiB9Ci0gKiA8L3ByZT4KLSAqCi0gKiA8L2RsPgotICoKLSAqIDxoND5DYXNlLWluc2Vuc2l0aXZlIG1hdGNoaW5nPC9oND4KLSAqIDxwcmU+Ci0gKiBSZWd1bGFyRXhwcmVzc2lvbiByZSA9IG5ldyBSZWd1bGFyRXhwcmVzc2lvbig8dmFyPnJlZ2V4PC92YXI+LCAiaSIpOwotICogaWYgKHJlLm1hdGNoZXModGV4dCkgPj0gMCkgeyAuLi59Ci0gKiA8L3ByZT4KLSAqCi0gKiA8aDQ+T3B0aW9uczwvaDQ+Ci0gKiA8cD5Zb3UgY2FuIHNwZWNpZnkgb3B0aW9ucyB0byA8YSBocmVmPSIjUmVndWxhckV4cHJlc3Npb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjxjb2RlPlJlZ3VsYXJFeHByZXNzaW9uKDwvY29kZT48dmFyPnJlZ2V4PC92YXI+PGNvZGU+LCA8L2NvZGU+PHZhcj5vcHRpb25zPC92YXI+PGNvZGU+KTwvY29kZT48L2E+Ci0gKiAgICBvciA8YSBocmVmPSIjc2V0UGF0dGVybihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+PGNvZGU+c2V0UGF0dGVybig8L2NvZGU+PHZhcj5yZWdleDwvdmFyPjxjb2RlPiwgPC9jb2RlPjx2YXI+b3B0aW9uczwvdmFyPjxjb2RlPik8L2NvZGU+PC9hPi4KLSAqICAgIFRoaXMgPHZhcj5vcHRpb25zPC92YXI+IHBhcmFtZXRlciBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMuCi0gKiA8L3A+Ci0gKiA8ZGw+Ci0gKiAgIDxkdD48YSBuYW1lPSJJX09QVElPTiI+PGNvZGU+ImkiPC9jb2RlPjwvYT4KLSAqICAgPGRkPlRoaXMgb3B0aW9uIGluZGljYXRlcyBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoaW5nLgotICogICA8ZHQ+PGEgbmFtZT0iTV9PUFRJT04iPjxjb2RlPiJtIjwvY29kZT48L2E+Ci0gKiAgIDxkZCBjbGFzcz0iUkVHRVgiPjxrYmQ+Xjwva2JkPiBhbmQgPGtiZD4kPC9rYmQ+IGNvbnNpZGVyIHRoZSBFT0wgY2hhcmFjdGVycyB3aXRoaW4gdGhlIHRleHQuCi0gKiAgIDxkdD48YSBuYW1lPSJTX09QVElPTiI+PGNvZGU+InMiPC9jb2RlPjwvYT4KLSAqICAgPGRkIGNsYXNzPSJSRUdFWCI+PGtiZD4uPC9rYmQ+IG1hdGNoZXMgYW55IG9uZSBjaGFyYWN0ZXIuCi0gKiAgIDxkdD48YSBuYW1lPSJVX09QVElPTiI+PGNvZGU+InUiPC9jb2RlPjwvYT4KLSAqICAgPGRkIGNsYXNzPSJSRUdFWCI+UmVkZWZpbmVzIDxLYmQ+XGQgXEQgXHcgXFcgXHMgXFMgXGIgXEIgXCZsdDsgXD48L2tiZD4gYXMgYmVjb21pbmcgdG8gVW5pY29kZS4KLSAqICAgPGR0PjxhIG5hbWU9IldfT1BUSU9OIj48Y29kZT4idyI8L2NvZGU+PC9hPgotICogICA8ZGQgY2xhc3M9IlJFR0VYIj5CeSB0aGlzIG9wdGlvbiwgPGtiZD5cYiBcQiBcJmx0OyBcPjwva2JkPiBhcmUgcHJvY2Vzc2VkIHdpdGggdGhlIG1ldGhvZCBvZgotICogICAgICAnVW5pY29kZSBSZWd1bGFyIEV4cHJlc3Npb24gR3VpZGVsaW5lcycgUmV2aXNpb24gNC4KLSAqICAgICAgV2hlbiAidyIgYW5kICJ1IiBhcmUgc3BlY2lmaWVkIGF0IHRoZSBzYW1lIHRpbWUsCi0gKiAgICAgIDxrYmQ+XGIgXEIgXCZsdDsgXD48L2tiZD4gYXJlIHByb2Nlc3NlZCBmb3IgdGhlICJ3IiBvcHRpb24uCi0gKiAgIDxkdD48YSBuYW1lPSJDT01NQV9PUFRJT04iPjxjb2RlPiIsIjwvY29kZT48L2E+Ci0gKiAgIDxkZD5UaGUgcGFyc2VyIHRyZWF0cyBhIGNvbW1hIGluIGEgY2hhcmFjdGVyIGNsYXNzIGFzIGEgcmFuZ2Ugc2VwYXJhdG9yLgotICogICAgICA8a2JkIGNsYXNzPSJSRUdFWCI+W2EsYl08L2tiZD4gbWF0Y2hlcyA8a2JkPmE8L2tiZD4gb3IgPGtiZD4sPC9rYmQ+IG9yIDxrYmQ+Yjwva2JkPiB3aXRob3V0IHRoaXMgb3B0aW9uLgotICogICAgICA8a2JkIGNsYXNzPSJSRUdFWCI+W2EsYl08L2tiZD4gbWF0Y2hlcyA8a2JkPmE8L2tiZD4gb3IgPGtiZD5iPC9rYmQ+IHdpdGggdGhpcyBvcHRpb24uCi0gKgotICogICA8ZHQ+PGEgbmFtZT0iWF9PUFRJT04iPjxjb2RlPiJYIjwvY29kZT48L2E+Ci0gKiAgIDxkZCBjbGFzcz0iUkVHRVgiPgotICogICAgICAgQnkgdGhpcyBvcHRpb24sIHRoZSBlbmdpbmUgY29uZm9tcyB0byA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1dELXhtbHNjaGVtYS0yLTIwMDAwNDA3LyNyZWdleHMiPlhNTCBTY2hlbWE6IFJlZ3VsYXIgRXhwcmVzc2lvbjwvYT4uCi0gKiAgICAgICBUaGUgPGNvZGU+bWF0Y2goKTwvY29kZT4gbWV0aG9kIGRvZXMgbm90IGRvIHN1YnNyaW5nIG1hdGNoaW5nCi0gKiAgICAgICBidXQgZW50aXJlIHN0cmluZyBtYXRjaGluZy4KLSAqCi0gKiA8L2RsPgotICogCi0gKiA8aHIgd2lkdGg9IjUwJSI+Ci0gKiA8aDM+U3ludGF4PC9oMz4KLSAqIDx0YWJsZSBib3JkZXI9IjEiIGJnY29sb3I9IiNkZGVlZmYiPgotICogICA8dHI+Ci0gKiAgICA8dGQ+Ci0gKiAgICAgPGg0PkRpZmZlcmVuY2VzIGZyb20gdGhlIFBlcmwgNSByZWd1bGFyIGV4cHJlc3Npb248L2g0PgotICogICAgIDx1bD4KLSAqICAgICAgPGxpPlRoZXJlIGlzIDYtZGlnaXQgaGV4YWRlY2ltYWwgY2hhcmFjdGVyIHJlcHJlc2VudGF0aW9uICAoPGtiZD5cdTAwNWN2PC9rYmQ+PHZhcj5ISEhISEg8L3Zhcj4uKQotICogICAgICA8bGk+U3VwcG9ydHMgc3VidHJhY3Rpb24sIHVuaW9uLCBhbmQgaW50ZXJzZWN0aW9uIG9wZXJhdGlvbnMgZm9yIGNoYXJhY3RlciBjbGFzc2VzLgotICogICAgICA8bGk+Tm90IHN1cHBvcnRlZDogPGtiZD5cPC9rYmQ+PHZhcj5vb288L3Zhcj4gKE9jdGFsIGNoYXJhY3RlciByZXByZXNlbnRhdGlvbnMpLAotICogICAgICAgICAgPEtiZD5cRzwva2JkPiwgPGtiZD5cQzwva2JkPiwgPGtiZD5cbDwva2JkPjx2YXI+YzwvdmFyPiwKLSAqICAgICAgICAgIDxrYmQ+XHUwMDVjIHU8L2tiZD48dmFyPmM8L3Zhcj4sIDxrYmQ+XEw8L2tiZD4sIDxrYmQ+XFU8L2tiZD4sCi0gKiAgICAgICAgICA8a2JkPlxFPC9rYmQ+LCA8a2JkPlxRPC9rYmQ+LCA8a2JkPlxOezwva2JkPjx2YXI+bmFtZTwvdmFyPjxrYmQ+fTwva2JkPiwKLSAqICAgICAgICAgIDxLYmQ+KD97PGtiZD48dmFyPmNvZGU8L3Zhcj48a2JkPn0pPC9rYmQ+LCA8S2JkPig/P3s8a2JkPjx2YXI+Y29kZTwvdmFyPjxrYmQ+fSk8L2tiZD4KLSAqICAgICA8L3VsPgotICogICAgPC90ZD4KLSAqICAgPC90cj4KLSAqIDwvdGFibGU+Ci0gKgotICogPFA+TWV0YSBjaGFyYWN0ZXJzIGFyZSBgPEtCRD4uICogKyA/IHsgWyAoICkgfCBcIF4gJDwvS0JEPicuPC9QPgotICogPHVsPgotICogICA8bGk+Q2hhcmFjdGVyCi0gKiAgICAgPGRsPgotICogICAgICAgPGR0IGNsYXNzPSJSRUdFWCI+PGtiZD4uPC9rYmQ+IChBIHBlcmlvZCkKLSAqICAgICAgIDxkZD5NYXRjaGVzIGFueSBvbmUgY2hhcmFjdGVyIGV4Y2VwdCB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMuCi0gKiAgICAgICA8ZGQ+TElORSBGRUVEIChVKzAwMEEpLCBDQVJSSUFHRSBSRVRVUk4gKFUrMDAwRCksCi0gKiAgICAgICAgICAgUEFSQUdSQVBIIFNFUEFSQVRPUiAoVSsyMDI5KSwgTElORSBTRVBBUkFUT1IgKFUrMjAyOCkKLSAqICAgICAgIDxkZD5UaGlzIGV4cHJlc3Npb24gbWF0Y2hlcyBvbmUgY29kZSBwb2ludCBpbiBVbmljb2RlLiBJdCBjYW4gbWF0Y2ggYSBwYWlyIG9mIHN1cnJvZ2F0ZXMuCi0gKiAgICAgICA8ZGQ+V2hlbiA8YSBocmVmPSIjU19PUFRJT04iPnRoZSAicyIgb3B0aW9uPC9hPiBpcyBzcGVjaWZpZWQsCi0gKiAgICAgICAgICAgaXQgbWF0Y2hlcyBhbnkgY2hhcmFjdGVyIGluY2x1ZGluZyB0aGUgYWJvdmUgZm91ciBjaGFyYWN0ZXJzLgotICoKLSAqICAgICAgIDxkdCBjbGFzcz0iUkVHRVgiPjxLYmQ+XGUgXGYgXG4gXHIgXHQ8L2tiZD4KLSAqICAgICAgIDxkZD5NYXRjaGVzIEVTQ0FQRSAoVSswMDFCKSwgRk9STSBGRUVEIChVKzAwMEMpLCBMSU5FIEZFRUQgKFUrMDAwQSksCi0gKiAgICAgICAgICAgQ0FSUklBR0UgUkVUVVJOIChVKzAwMEQpLCBIT1JJWk9OVEFMIFRBQlVMQVRJT04gKFUrMDAwOSkKLSAqCi0gKiAgICAgICA8ZHQgY2xhc3M9IlJFR0VYIj48a2JkPlxjPC9rYmQ+PHZhcj5DPC92YXI+Ci0gKiAgICAgICA8ZGQ+TWF0Y2hlcyBhIGNvbnRyb2wgY2hhcmFjdGVyLgotICogICAgICAgICAgIFRoZSA8dmFyPkM8L3Zhcj4gbXVzdCBiZSBvbmUgb2YgJzxrYmQ+QDwva2JkPicsICc8a2JkPkE8L2tiZD4nLSc8a2JkPlo8L2tiZD4nLAotICogICAgICAgICAgICc8a2JkPls8L2tiZD4nLCAnPGtiZD5cdTAwNWM8L2tiZD4nLCAnPGtiZD5dPC9rYmQ+JywgJzxrYmQ+Xjwva2JkPicsICc8a2JkPl88L2tiZD4nLgotICogICAgICAgICAgIEl0IG1hdGNoZXMgYSBjb250cm9sIGNoYXJhY3RlciBvZiB3aGljaCB0aGUgY2hhcmFjdGVyIGNvZGUgaXMgbGVzcyB0aGFuCi0gKiAgICAgICAgICAgdGhlIGNoYXJhY3RlciBjb2RlIG9mIHRoZSA8dmFyPkM8L3Zhcj4gYnkgMHgwMDQwLgotICogICAgICAgPGRkIGNsYXNzPSJSRUdFWCI+Rm9yIGV4YW1wbGUsIGEgPGtiZD5cY0o8L2tiZD4gbWF0Y2hlcyBhIExJTkUgRkVFRCAoVSswMDBBKSwKLSAqICAgICAgICAgICBhbmQgYSA8a2JkPlxjWzwva2JkPiBtYXRjaGVzIGFuIEVTQ0FQRSAoVSswMDFCKS4KLSAqCi0gKiAgICAgICA8ZHQgY2xhc3M9IlJFR0VYIj5hIG5vbi1tZXRhIGNoYXJhY3RlcgotICogICAgICAgPGRkPk1hdGNoZXMgdGhlIGNoYXJhY3Rlci4KLSAqCi0gKiAgICAgICA8ZHQgY2xhc3M9IlJFR0VYIj48S0JEPlw8L0tCRD4gKyBhIG1ldGEgY2hhcmFjdGVyCi0gKiAgICAgICA8ZGQ+TWF0Y2hlcyB0aGUgbWV0YSBjaGFyYWN0ZXIuCi0gKgotICogICAgICAgPGR0IGNsYXNzPSJSRUdFWCI+PGtiZD5cdTAwNWN4PC9rYmQ+PHZhcj5ISDwvdmFyPiA8a2JkPlx1MDA1Y3h7PC9rYmQ+PHZhcj5ISEhIPC92YXI+PGtiZD59PC9rYmQ+Ci0gKiAgICAgICA8ZGQ+TWF0Y2hlcyBhIGNoYXJhY3RlciBvZiB3aGljaCBjb2RlIHBvaW50IGlzIDx2YXI+SEg8L3Zhcj4gKEhleGFkZWNpbWFsKSBpbiBVbmljb2RlLgotICogICAgICAgICAgIFlvdSBjYW4gd3JpdGUganVzdCAyIGRpZ2l0cyBmb3IgPGtiZD5cdTAwNWN4PC9rYmQ+PHZhcj5ISDwvdmFyPiwgYW5kCi0gKiAgICAgICAgICAgdmFyaWFibGUgbGVuZ3RoIGRpZ2l0cyBmb3IgPGtiZD5cdTAwNWN4ezwva2JkPjx2YXI+SEhISDwvdmFyPjxrYmQ+fTwva2JkPi4KLSAqCi0gKiAgICAgICA8IS0tCi0gKiAgICAgICA8ZHQgY2xhc3M9IlJFR0VYIj48a2JkPlx1MDA1YyB1PC9rYmQ+PHZhcj5ISEhIPC92YXI+Ci0gKiAgICAgICA8ZGQ+TWF0Y2hlcyBhIGNoYXJhY3RlciBvZiB3aGljaCBjb2RlIHBvaW50IGlzIDx2YXI+SEhISDwvdmFyPiAoSGV4YWRlY2ltYWwpIGluIFVuaWNvZGUuCi0gKiAgICAgICAtLT4KLSAqCi0gKiAgICAgICA8ZHQgY2xhc3M9IlJFR0VYIj48a2JkPlx1MDA1Y3Y8L2tiZD48dmFyPkhISEhISDwvdmFyPgotICogICAgICAgPGRkPk1hdGNoZXMgYSBjaGFyYWN0ZXIgb2Ygd2hpY2ggY29kZSBwb2ludCBpcyA8dmFyPkhISEhISDwvdmFyPiAoSGV4YWRlY2ltYWwpIGluIFVuaWNvZGUuCi0gKgotICogICAgICAgPGR0IGNsYXNzPSJSRUdFWCI+PGtiZD5cZzwva2JkPgotICogICAgICAgPGRkPk1hdGNoZXMgYSBncmFwaGVtZS4KLSAqICAgICAgIDxkZCBjbGFzcz0iUkVHRVgiPkl0IGlzIGVxdWl2YWxlbnQgdG8gPGtiZD4oP1tccHtBU1NJR05FRH1dLVtccHtNfVxwe0N9XSk/KD86XHB7TX18W1x4ezA5NER9XHh7MDlDRH1ceHswQTREfVx4ezBBQ0R9XHh7MEIzRH1ceHswQkNEfVx4ezBDNER9XHh7MENDRH1ceHswRDREfVx4ezBFM0F9XHh7MEY4NH1dXHB7TH18W1x4ezExNjB9LVx4ezExQTd9XXxbXHh7MTFBOH0tXHh7MTFGRn1dfFtceHtGRjlFfVx4e0ZGOUZ9XSkqPC9rYmQ+Ci0gKgotICogICAgICAgPGR0IGNsYXNzPSJSRUdFWCI+PGtiZD5cWDwva2JkPgotICogICAgICAgPGRkIGNsYXNzPSJSRUdFWCI+TWF0Y2hlcyBhIGNvbWJpbmluZyBjaGFyYWN0ZXIgc2VxdWVuY2UuCi0gKiAgICAgICBJdCBpcyBlcXVpdmFsZW50IHRvIDxrYmQ+KD86XFBNXHBNKik8L2tiZD4KLSAqICAgICA8L2RsPgotICogICA8L2xpPgotICoKLSAqICAgPGxpPkNoYXJhY3RlciBjbGFzcwotICogICAgIDxkbD4KLSsgKiAgICAgICA8ZHQgY2xhc3M9IlJFR0VYIj48a2JkPls8L2tiZD48dmFyPlI8c3ViPjE8L3N1Yj48L3Zhcj48dmFyPlI8c3ViPjI8L3N1Yj48L3Zhcj48dmFyPi4uLjwvdmFyPjx2YXI+UjxzdWI+bjwvc3ViPjwvdmFyPjxrYmQ+XTwva2JkPiAod2l0aG91dCA8YSBocmVmPSIjQ09NTUFfT1BUSU9OIj4iLCIgb3B0aW9uPC9hPikKLSsgKiAgICAgICA8ZHQgY2xhc3M9IlJFR0VYIj48a2JkPls8L2tiZD48dmFyPlI8c3ViPjE8L3N1Yj48L3Zhcj48a2JkPiw8L2tiZD48dmFyPlI8c3ViPjI8L3N1Yj48L3Zhcj48a2JkPiw8L2tiZD48dmFyPi4uLjwvdmFyPjxrYmQ+LDwva2JkPjx2YXI+UjxzdWI+bjwvc3ViPjwvdmFyPjxrYmQ+XTwva2JkPiAod2l0aCA8YSBocmVmPSIjQ09NTUFfT1BUSU9OIj4iLCIgb3B0aW9uPC9hPikKLSAqICAgICAgIDxkZD5Qb3NpdGl2ZSBjaGFyYWN0ZXIgY2xhc3MuICBJdCBtYXRjaGVzIGEgY2hhcmFjdGVyIGluIHJhbmdlcy4KLSAqICAgICAgIDxkZD48dmFyPlI8c3ViPm48L3N1Yj48L3Zhcj46Ci0gKiAgICAgICA8dWw+Ci0gKiAgICAgICAgIDxsaSBjbGFzcz0iUkVHRVgiPkEgY2hhcmFjdGVyIChpbmNsdWRpbmcgPEtiZD5cZSBcZiBcbiBcciBcdDwva2JkPiA8a2JkPlx1MDA1Y3g8L2tiZD48dmFyPkhIPC92YXI+IDxrYmQ+XHUwMDVjeHs8L2tiZD48dmFyPkhISEg8L3Zhcj48a2JkPn08L2tiZD4gPCEtLWtiZD5cdTAwNWMgdTwva2JkPjx2YXI+SEhISDwvdmFyLS0+IDxrYmQ+XHUwMDVjdjwva2JkPjx2YXI+SEhISEhIPC92YXI+KQotICogICAgICAgICAgICAgPHA+VGhpcyByYW5nZSBtYXRjaGVzIHRoZSBjaGFyYWN0ZXIuCi0gKiAgICAgICAgIDxsaSBjbGFzcz0iUkVHRVgiPjx2YXI+QzxzdWI+MTwvc3ViPjwvdmFyPjxrYmQ+LTwva2JkPjx2YXI+QzxzdWI+Mjwvc3ViPjwvdmFyPgotICogICAgICAgICAgICAgPHA+VGhpcyByYW5nZSBtYXRjaGVzIGEgY2hhcmFjdGVyIHdoaWNoIGhhcyBhIGNvZGUgcG9pbnQgdGhhdCBpcyA+PSA8dmFyPkM8c3ViPjE8L3N1Yj48L3Zhcj4ncyBjb2RlIHBvaW50IGFuZCAmbHQ7PSA8dmFyPkM8c3ViPjI8L3N1Yj48L3Zhcj4ncyBjb2RlIHBvaW50LgotKyAqICAgICAgICAgPGxpIGNsYXNzPSJSRUdFWCI+QSBQT1NJWCBjaGFyYWN0ZXIgY2xhc3M6IDxLYmQ+WzphbHBoYTpdIFs6YWxudW06XSBbOmFzY2lpOl0gWzpjbnRybDpdIFs6ZGlnaXQ6XSBbOmdyYXBoOl0gWzpsb3dlcjpdIFs6cHJpbnQ6XSBbOnB1bmN0Ol0gWzpzcGFjZTpdIFs6dXBwZXI6XSBbOnhkaWdpdDpdPC9rYmQ+LAotKyAqICAgICAgICAgICAgIGFuZCBuZWdhdGl2ZSBQT1NJWCBjaGFyYWN0ZXIgY2xhc3NlcyBpbiBQZXJsIGxpa2UgPGtiZD5bOl5hbHBoYTpdPC9rYmQ+Ci0gKiAgICAgICAgICAgICA8cD4uLi4KLSAqICAgICAgICAgPGxpIGNsYXNzPSJSRUdFWCI+PGtiZD5cZCBcRCBccyBcUyBcdyBcVyBccHs8L2tiZD48dmFyPm5hbWU8L3Zhcj48a2JkPn0gXFB7PC9rYmQ+PHZhcj5uYW1lPC92YXI+PGtiZD59PC9rYmQ+Ci0gKiAgICAgICAgICAgICA8cD5UaGVzZSBleHByZXNzaW9ucyBzcGVjaWZpZXMgdGhlIHNhbWUgcmFuZ2VzIGFzIHRoZSBmb2xsb3dpbmcgZXhwcmVzc2lvbnMuCi0gKiAgICAgICA8L3VsPgotICogICAgICAgPHAgY2xhc3M9IlJFR0VYIj5FbnVtZXJhdGVkIHJhbmdlcyBhcmUgbWVyZ2VkICh1bmlvbiBvcGVyYXRpb24pLgotICogICAgICAgICAgPGtiZD5bYS1lYy16XTwva2JkPiBpcyBlcXVpdmFsZW50IHRvIDxrYmQ+W2Etel08L2tiZD4KLSAqCi0gKiAgICAgICA8ZHQgY2xhc3M9IlJFR0VYIj48a2JkPltePC9rYmQ+PHZhcj5SPHN1Yj4xPC9zdWI+PC92YXI+PHZhcj5SPHN1Yj4yPC9zdWI+PC92YXI+PHZhcj4uLi48L3Zhcj48dmFyPlI8c3ViPm48L3N1Yj48L3Zhcj48a2JkPl08L2tiZD4gKHdpdGhvdXQgYSA8YSBocmVmPSIjQ09NTUFfT1BUSU9OIj4iLCIgb3B0aW9uPC9hPikKLSAqICAgICAgIDxkdCBjbGFzcz0iUkVHRVgiPjxrYmQ+W148L2tiZD48dmFyPlI8c3ViPjE8L3N1Yj48L3Zhcj48a2JkPiw8L2tiZD48dmFyPlI8c3ViPjI8L3N1Yj48L3Zhcj48a2JkPiw8L2tiZD48dmFyPi4uLjwvdmFyPjxrYmQ+LDwva2JkPjx2YXI+UjxzdWI+bjwvc3ViPjwvdmFyPjxrYmQ+XTwva2JkPiAod2l0aCBhIDxhIGhyZWY9IiNDT01NQV9PUFRJT04iPiIsIiBvcHRpb248L2E+KQotICogICAgICAgPGRkPk5lZ2F0aXZlIGNoYXJhY3RlciBjbGFzcy4gIEl0IG1hdGNoZXMgYSBjaGFyYWN0ZXIgbm90IGluIHJhbmdlcy4KLSAqCi0gKiAgICAgICA8ZHQgY2xhc3M9IlJFR0VYIj48a2JkPig/Wzwva2JkPjx2YXI+cmFuZ2VzPC92YXI+PGtiZD5dPC9rYmQ+PHZhcj5vcDwvdmFyPjxrYmQ+Wzwva2JkPjx2YXI+cmFuZ2VzPC92YXI+PGtiZD5dPC9rYmQ+PHZhcj5vcDwvdmFyPjxrYmQ+Wzwva2JkPjx2YXI+cmFuZ2VzPC92YXI+PGtiZD5dPC9rYmQ+IC4uLiA8S2JkPik8L2tiZD4KLSAqICAgICAgICg8dmFyPm9wPC92YXI+IGlzIDxrYmQ+LTwva2JkPiBvciA8a2JkPis8L2tiZD4gb3IgPGtiZD4mPC9rYmQ+LikKLSAqICAgICAgIDxkZD5TdWJ0cmFjdGlvbiBvciB1bmlvbiBvciBpbnRlcnNlY3Rpb24gZm9yIGNoYXJhY3RlciBjbGFzc2VzLgotICogICAgICAgPGRkIGNsYXNzPSJSRUdFWCI+Rm9yIGV4bWFwbGUsIDxrYmQ+KD9bQS1aXS1bQ0ZdKTwva2JkPiBpcyBlcXVpdmFsZW50IHRvIDxrYmQ+W0EtQkQtRUctWl08L2tiZD4sIGFuZCA8a2JkPig/WzB4MDAtMHg3Zl0tW0tdJltccHtMdX1dKTwva2JkPiBpcyBlcXVpdmFsZW50IHRvIDxrYmQ+W0EtSkwtWl08L2tiZD4uCi0gKiAgICAgICA8ZGQ+VGhlIHJlc3VsdCBvZiB0aGlzIG9wZXJhdGlvbnMgaXMgYSA8dT5wb3NpdGl2ZSBjaGFyYWN0ZXIgY2xhc3M8L3U+Ci0gKiAgICAgICAgICAgZXZlbiBpZiBhbiBleHByZXNzaW9uIGluY2x1ZGVzIGFueSBuZWdhdGl2ZSBjaGFyYWN0ZXIgY2xhc3Nlcy4KLSAqICAgICAgICAgICBZb3UgaGF2ZSB0byB0YWtlIGNhcmUgb24gdGhpcyBpbiBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoaW5nLgotICogICAgICAgICAgIEZvciBpbnN0YW5jZSwgPGtiZD4oP1teYl0pPC9rYmQ+IGlzIGVxdWl2YWxlbnQgdG8gPGtiZD5bXHgwMC1hYy1ceHsxMGZmZmZ9XTwva2JkPiwKLSAqICAgICAgICAgICB3aGljaCBpcyBlcXVpdmFsZW50IHRvIDxrYmQ+W15iXTwva2JkPiBpbiBjYXNlLXNlbnNpdGl2ZSBtYXRjaGluZy4KLSAqICAgICAgICAgICBCdXQsIGluIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2hpbmcsIDxrYmQ+KD9bXmJdKTwva2JkPiBtYXRjaGVzIGFueSBjaGFyYWN0ZXIgYmVjYXVzZQotICogICAgICAgICAgIGl0IGluY2x1ZGVzICc8a2JkPkI8L2tiZD4nIGFuZCAnPGtiZD5CPC9rYmQ+JyBtYXRjaGVzICc8a2JkPmI8L2tiZD4nCi0gKiAgICAgICAgICAgdGhvdWdoIDxrYmQ+W15iXTwva2JkPiBpcyBwcm9jZXNzZWQgYXMgPGtiZD5bXkJiXTwva2JkPi4KLSAqCi0gKiAgICAgICA8ZHQgY2xhc3M9IlJFR0VYIj48a2JkPls8L2tiZD48dmFyPlI8c3ViPjE8L3N1Yj5SPHN1Yj4yPC9zdWI+Li4uPC92YXI+PGtiZD4tWzwva2JkPjx2YXI+UjxzdWI+bjwvc3ViPlI8c3ViPm4rMTwvc3ViPi4uLjwvdmFyPjxrYmQ+XV08L2tiZD4gKHdpdGggYW4gPGEgaHJlZj0iI1hfT1BUSU9OIj4iWCIgb3B0aW9uPC9hPik8L2R0PgotICogICAgICAgPGRkPkNoYXJhY3RlciBjbGFzcyBzdWJ0cmFjdGlvbiBmb3IgdGhlIFhNTCBTY2hlbWEuCi0gKiAgICAgICAgICAgWW91IGNhbiB1c2UgdGhpcyBzeW50YXggd2hlbiB5b3Ugc3BlY2lmeSBhbiA8YSBocmVmPSIjWF9PUFRJT04iPiJYIiBvcHRpb248L2E+LgotICogICAgICAgICAgIAotICogICAgICAgPGR0IGNsYXNzPSJSRUdFWCI+PGtiZD5cZDwva2JkPgotICogICAgICAgPGRkIGNsYXNzPSJSRUdFWCI+RXF1aXZhbGVudCB0byA8a2JkPlswLTldPC9rYmQ+LgotICogICAgICAgPGRkPldoZW4gPGEgaHJlZj0iI1VfT1BUSU9OIj5hICJ1IiBvcHRpb248L2E+IGlzIHNldCwgaXQgaXMgZXF1aXZhbGVudCB0bwotICogICAgICAgICAgIDxzcGFuIGNsYXNzPSJSRUdFWCI+PGtiZD5ccHtOZH08L2tiZD48L3NwYW4+LgotICoKLSAqICAgICAgIDxkdCBjbGFzcz0iUkVHRVgiPjxrYmQ+XEQ8L2tiZD4KLSAqICAgICAgIDxkZCBjbGFzcz0iUkVHRVgiPkVxdWl2YWxlbnQgdG8gPGtiZD5bXjAtOV08L2tiZD4KLSAqICAgICAgIDxkZD5XaGVuIDxhIGhyZWY9IiNVX09QVElPTiI+YSAidSIgb3B0aW9uPC9hPiBpcyBzZXQsIGl0IGlzIGVxdWl2YWxlbnQgdG8KLSAqICAgICAgICAgICA8c3BhbiBjbGFzcz0iUkVHRVgiPjxrYmQ+XFB7TmR9PC9rYmQ+PC9zcGFuPi4KLSAqCi0gKiAgICAgICA8ZHQgY2xhc3M9IlJFR0VYIj48a2JkPlxzPC9rYmQ+Ci0gKiAgICAgICA8ZGQgY2xhc3M9IlJFR0VYIj5FcXVpdmFsZW50IHRvIDxrYmQ+WyBcZlxuXHJcdF08L2tiZD4KLSAqICAgICAgIDxkZD5XaGVuIDxhIGhyZWY9IiNVX09QVElPTiI+YSAidSIgb3B0aW9uPC9hPiBpcyBzZXQsIGl0IGlzIGVxdWl2YWxlbnQgdG8KLSAqICAgICAgICAgICA8c3BhbiBjbGFzcz0iUkVHRVgiPjxrYmQ+WyBcZlxuXHJcdFxwe1p9XTwva2JkPjwvc3Bhbj4uCi0gKgotICogICAgICAgPGR0IGNsYXNzPSJSRUdFWCI+PGtiZD5cUzwva2JkPgotICogICAgICAgPGRkIGNsYXNzPSJSRUdFWCI+RXF1aXZhbGVudCB0byA8a2JkPlteIFxmXG5cclx0XTwva2JkPgotICogICAgICAgPGRkPldoZW4gPGEgaHJlZj0iI1VfT1BUSU9OIj5hICJ1IiBvcHRpb248L2E+IGlzIHNldCwgaXQgaXMgZXF1aXZhbGVudCB0bwotICogICAgICAgICAgIDxzcGFuIGNsYXNzPSJSRUdFWCI+PGtiZD5bXiBcZlxuXHJcdFxwe1p9XTwva2JkPjwvc3Bhbj4uCi0gKgotICogICAgICAgPGR0IGNsYXNzPSJSRUdFWCI+PGtiZD5cdzwva2JkPgotICogICAgICAgPGRkIGNsYXNzPSJSRUdFWCI+RXF1aXZhbGVudCB0byA8a2JkPlthLXpBLVowLTlfXTwva2JkPgotICogICAgICAgPGRkPldoZW4gPGEgaHJlZj0iI1VfT1BUSU9OIj5hICJ1IiBvcHRpb248L2E+IGlzIHNldCwgaXQgaXMgZXF1aXZhbGVudCB0bwotICogICAgICAgICAgIDxzcGFuIGNsYXNzPSJSRUdFWCI+PGtiZD5bXHB7THV9XHB7TGx9XHB7TG99XHB7TmR9X108L2tiZD48L3NwYW4+LgotICoKLSAqICAgICAgIDxkdCBjbGFzcz0iUkVHRVgiPjxrYmQ+XFc8L2tiZD4KLSAqICAgICAgIDxkZCBjbGFzcz0iUkVHRVgiPkVxdWl2YWxlbnQgdG8gPGtiZD5bXmEtekEtWjAtOV9dPC9rYmQ+Ci0gKiAgICAgICA8ZGQ+V2hlbiA8YSBocmVmPSIjVV9PUFRJT04iPmEgInUiIG9wdGlvbjwvYT4gaXMgc2V0LCBpdCBpcyBlcXVpdmFsZW50IHRvCi0gKiAgICAgICAgICAgPHNwYW4gY2xhc3M9IlJFR0VYIj48a2JkPlteXHB7THV9XHB7TGx9XHB7TG99XHB7TmR9X108L2tiZD48L3NwYW4+LgotICoKLSAqICAgICAgIDxkdCBjbGFzcz0iUkVHRVgiPjxrYmQ+XHB7PC9rYmQ+PHZhcj5uYW1lPC92YXI+PGtiZD59PC9rYmQ+Ci0gKiAgICAgICA8ZGQ+TWF0Y2hlcyBvbmUgY2hhcmFjdGVyIGluIHRoZSBzcGVjaWZpZWQgR2VuZXJhbCBDYXRlZ29yeSAodGhlIHNlY29uZCBmaWVsZCBpbiA8YSBocmVmPSJmdHA6Ly9mdHAudW5pY29kZS5vcmcvUHVibGljL1VOSURBVEEvVW5pY29kZURhdGEudHh0Ij48a2JkPlVuaWNvZGVEYXRhLnR4dDwva2JkPjwvYT4pIG9yIHRoZSBzcGVjaWZpZWQgPGEgaHJlZj0iZnRwOi8vZnRwLnVuaWNvZGUub3JnL1B1YmxpYy9VTklEQVRBL0Jsb2Nrcy50eHQiPkJsb2NrPC9hPi4KLSAqICAgICAgIFRoZSBmb2xsb3dpbmcgbmFtZXMgYXJlIGF2YWlsYWJsZToKLSAqICAgICAgIDxkbD4KLSAqICAgICAgICAgPGR0PlVuaWNvZGUgR2VuZXJhbCBDYXRlZ29yaWVzOgotICogICAgICAgICA8ZGQ+PGtiZD4KLSAqICAgICAgIEwsIE0sIE4sIFosIEMsIFAsIFMsIEx1LCBMbCwgTHQsIExtLCBMbywgTW4sIE1lLCBNYywgTmQsIE5sLCBObywgWnMsIFpsLCBacCwKLSAqICAgICAgIENjLCBDZiwgQ24sIENvLCBDcywgUGQsIFBzLCBQZSwgUGMsIFBvLCBTbSwgU2MsIFNrLCBTbywKLSAqICAgICAgICAgPC9rYmQ+Ci0gKiAgICAgICAgIDxkZD4oQ3VycmVudGx5IHRoZSBDbiBjYXRlZ29yeSBpbmNsdWRlcyBVKzEwMDAwLVUrMTBGRkZGIGNoYXJhY3RlcnMpCi0gKiAgICAgICAgIDxkdD5Vbmljb2RlIEJsb2NrczoKLSAqICAgICAgICAgPGRkPjxrYmQ+Ci0gKiAgICAgICBCYXNpYyBMYXRpbiwgTGF0aW4tMSBTdXBwbGVtZW50LCBMYXRpbiBFeHRlbmRlZC1BLCBMYXRpbiBFeHRlbmRlZC1CLAotICogICAgICAgSVBBIEV4dGVuc2lvbnMsIFNwYWNpbmcgTW9kaWZpZXIgTGV0dGVycywgQ29tYmluaW5nIERpYWNyaXRpY2FsIE1hcmtzLCBHcmVlaywKLSAqICAgICAgIEN5cmlsbGljLCBBcm1lbmlhbiwgSGVicmV3LCBBcmFiaWMsIERldmFuYWdhcmksIEJlbmdhbGksIEd1cm11a2hpLCBHdWphcmF0aSwKLSAqICAgICAgIE9yaXlhLCBUYW1pbCwgVGVsdWd1LCBLYW5uYWRhLCBNYWxheWFsYW0sIFRoYWksIExhbywgVGliZXRhbiwgR2VvcmdpYW4sCi0gKiAgICAgICBIYW5ndWwgSmFtbywgTGF0aW4gRXh0ZW5kZWQgQWRkaXRpb25hbCwgR3JlZWsgRXh0ZW5kZWQsIEdlbmVyYWwgUHVuY3R1YXRpb24sCi0gKiAgICAgICBTdXBlcnNjcmlwdHMgYW5kIFN1YnNjcmlwdHMsIEN1cnJlbmN5IFN5bWJvbHMsIENvbWJpbmluZyBNYXJrcyBmb3IgU3ltYm9scywKLSAqICAgICAgIExldHRlcmxpa2UgU3ltYm9scywgTnVtYmVyIEZvcm1zLCBBcnJvd3MsIE1hdGhlbWF0aWNhbCBPcGVyYXRvcnMsCi0gKiAgICAgICBNaXNjZWxsYW5lb3VzIFRlY2huaWNhbCwgQ29udHJvbCBQaWN0dXJlcywgT3B0aWNhbCBDaGFyYWN0ZXIgUmVjb2duaXRpb24sCi0gKiAgICAgICBFbmNsb3NlZCBBbHBoYW51bWVyaWNzLCBCb3ggRHJhd2luZywgQmxvY2sgRWxlbWVudHMsIEdlb21ldHJpYyBTaGFwZXMsCi0gKiAgICAgICBNaXNjZWxsYW5lb3VzIFN5bWJvbHMsIERpbmdiYXRzLCBDSksgU3ltYm9scyBhbmQgUHVuY3R1YXRpb24sIEhpcmFnYW5hLAotICogICAgICAgS2F0YWthbmEsIEJvcG9tb2ZvLCBIYW5ndWwgQ29tcGF0aWJpbGl0eSBKYW1vLCBLYW5idW4sCi0gKiAgICAgICBFbmNsb3NlZCBDSksgTGV0dGVycyBhbmQgTW9udGhzLCBDSksgQ29tcGF0aWJpbGl0eSwgQ0pLIFVuaWZpZWQgSWRlb2dyYXBocywKLSAqICAgICAgIEhhbmd1bCBTeWxsYWJsZXMsIEhpZ2ggU3Vycm9nYXRlcywgSGlnaCBQcml2YXRlIFVzZSBTdXJyb2dhdGVzLCBMb3cgU3Vycm9nYXRlcywKLSAqICAgICAgIFByaXZhdGUgVXNlLCBDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzLCBBbHBoYWJldGljIFByZXNlbnRhdGlvbiBGb3JtcywKLSAqICAgICAgIEFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSwgQ29tYmluaW5nIEhhbGYgTWFya3MsIENKSyBDb21wYXRpYmlsaXR5IEZvcm1zLAotICogICAgICAgU21hbGwgRm9ybSBWYXJpYW50cywgQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CLCBTcGVjaWFscywKLSAqICAgICAgIEhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zCi0gKiAgICAgICAgIDwva2JkPgotICogICAgICAgICA8ZHQ+T3RoZXJzOgotICogICAgICAgICA8ZGQ+PGtiZD5BTEw8L2tiZD4gKEVxdWl2YWxlbnQgdG8gPGtiZD5bXHUwMDVjdTAwMDAtXHUwMDVjdjEwRkZGRl08L2tiZD4pCi0gKiAgICAgICAgIDxkZD48a2JkPkFTU0dJTkVEPC9rYmQ+ICg8a2JkPlxwe0FTU0lHTkVEfTwva2JkPiBpcyBlcXVpdmFsZW50IHRvIDxrYmQ+XFB7Q259PC9rYmQ+KQotICogICAgICAgICA8ZGQ+PGtiZD5VTkFTU0dJTkVEPC9rYmQ+Ci0gKiAgICAgICAgICAgICAoPGtiZD5ccHtVTkFTU0lHTkVEfTwva2JkPiBpcyBlcXVpdmFsZW50IHRvIDxrYmQ+XHB7Q259PC9rYmQ+KQotICogICAgICAgPC9kbD4KLSAqCi0gKiAgICAgICA8ZHQgY2xhc3M9IlJFR0VYIj48a2JkPlxQezwva2JkPjx2YXI+bmFtZTwvdmFyPjxrYmQ+fTwva2JkPgotICogICAgICAgPGRkPk1hdGNoZXMgb25lIGNoYXJhY3RlciBub3QgaW4gdGhlIHNwZWNpZmllZCBHZW5lcmFsIENhdGVnb3J5IG9yIHRoZSBzcGVjaWZpZWQgQmxvY2suCi0gKiAgICAgPC9kbD4KLSAqICAgPC9saT4KLSAqCi0gKiAgIDxsaT5TZWxlY3Rpb24gYW5kIFF1YW50aWZpZXIKLSAqICAgICA8ZGw+Ci0gKiAgICAgICA8ZHQgY2xhc3M9IlJFR0VYIj48VkFSPlg8L1ZBUj48a2JkPnw8L2tiZD48VkFSPlk8L1ZBUj4KLSAqICAgICAgIDxkZD4uLi4KLSAqCi0gKiAgICAgICA8ZHQgY2xhc3M9IlJFR0VYIj48VkFSPlg8L1ZBUj48a2JkPio8L0tCRD4KLSAqICAgICAgIDxkZD5NYXRjaGVzIDAgb3IgbW9yZSA8dmFyPlg8L3Zhcj4uCi0gKgotICogICAgICAgPGR0IGNsYXNzPSJSRUdFWCI+PFZBUj5YPC9WQVI+PGtiZD4rPC9LQkQ+Ci0gKiAgICAgICA8ZGQ+TWF0Y2hlcyAxIG9yIG1vcmUgPHZhcj5YPC92YXI+LgotICoKLSAqICAgICAgIDxkdCBjbGFzcz0iUkVHRVgiPjxWQVI+WDwvVkFSPjxrYmQ+PzwvS0JEPgotICogICAgICAgPGRkPk1hdGNoZXMgMCBvciAxIDx2YXI+WDwvdmFyPi4KLSAqCi0gKiAgICAgICA8ZHQgY2xhc3M9IlJFR0VYIj48dmFyPlg8L3Zhcj48a2JkPns8L2tiZD48dmFyPm51bWJlcjwvdmFyPjxrYmQ+fTwva2JkPgotICogICAgICAgPGRkPk1hdGNoZXMgPHZhcj5udW1iZXI8L3Zhcj4gdGltZXMuCi0gKgotICogICAgICAgPGR0IGNsYXNzPSJSRUdFWCI+PHZhcj5YPC92YXI+PGtiZD57PC9rYmQ+PHZhcj5taW48L3Zhcj48a2JkPix9PC9rYmQ+Ci0gKiAgICAgICA8ZGQ+Li4uCi0gKgotICogICAgICAgPGR0IGNsYXNzPSJSRUdFWCI+PHZhcj5YPC92YXI+PGtiZD57PC9rYmQ+PHZhcj5taW48L3Zhcj48a2JkPiw8L2tiZD48dmFyPm1heDwvdmFyPjxrYmQ+fTwva2JkPgotICogICAgICAgPGRkPi4uLgotICoKLSAqICAgICAgIDxkdCBjbGFzcz0iUkVHRVgiPjxWQVI+WDwvVkFSPjxrYmQ+Kj88L2tiZD4KLSAqICAgICAgIDxkdCBjbGFzcz0iUkVHRVgiPjxWQVI+WDwvVkFSPjxrYmQ+Kz88L2tiZD4KLSAqICAgICAgIDxkdCBjbGFzcz0iUkVHRVgiPjxWQVI+WDwvVkFSPjxrYmQ+Pz88L2tiZD4KLSAqICAgICAgIDxkdCBjbGFzcz0iUkVHRVgiPjx2YXI+WDwvdmFyPjxrYmQ+ezwva2JkPjx2YXI+bWluPC92YXI+PGtiZD4sfT88L2tiZD4KLSAqICAgICAgIDxkdCBjbGFzcz0iUkVHRVgiPjx2YXI+WDwvdmFyPjxrYmQ+ezwva2JkPjx2YXI+bWluPC92YXI+PGtiZD4sPC9rYmQ+PHZhcj5tYXg8L3Zhcj48a2JkPn0/PC9rYmQ+Ci0gKiAgICAgICA8ZGQ+Tm9uLWdyZWVkeSBtYXRjaGluZy4KLSAqICAgICA8L2RsPgotICogICA8L2xpPgotICoKLSAqICAgPGxpPkdyb3VwaW5nLCBDYXB0dXJpbmcsIGFuZCBCYWNrLXJlZmVyZW5jZQotICogICAgIDxkbD4KLSAqICAgICAgIDxkdCBjbGFzcz0iUkVHRVgiPjxLQkQ+KD86PC9rYmQ+PFZBUj5YPC9WQVI+PGtiZD4pPC9LQkQ+Ci0gKiAgICAgICA8ZGQ+R3JvdXBpbmcuICI8S0JEPmZvbys8L0tCRD4iIG1hdGNoZXMgIjxLQkQ+Zm9vPC9LQkQ+IiBvciAiPEtCRD5mb29vbzwvS0JEPiIuCi0gKiAgICAgICBJZiB5b3Ugd2FudCBpdCBtYXRjaGVzICI8S0JEPmZvb2ZvbzwvS0JEPiIgb3IgIjxLQkQ+Zm9vZm9vZm9vPC9LQkQ+IiwKLSAqICAgICAgIHlvdSBoYXZlIHRvIHdyaXRlICI8S0JEPig/OmZvbykrPC9LQkQ+Ii4KLSAqCi0gKiAgICAgICA8ZHQgY2xhc3M9IlJFR0VYIj48S0JEPig8L2tiZD48VkFSPlg8L1ZBUj48a2JkPik8L0tCRD4KLSAqICAgICAgIDxkZD5Hcm91cGluZyB3aXRoIGNhcHR1cmluZy4KLSAqIEl0IG1ha2UgYSBncm91cCBhbmQgYXBwbGljYXRpb25zIGNhbiBrbm93Ci0gKiB3aGVyZSBpbiB0YXJnZXQgdGV4dCBhIGdyb3VwIG1hdGNoZWQgd2l0aCBtZXRob2RzIG9mIGEgPGNvZGU+TWF0Y2g8L2NvZGU+IGluc3RhbmNlCi0gKiBhZnRlciA8Y29kZT48YSBocmVmPSIjbWF0Y2hlcyhqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhlcmNlcy51dGlscy5yZWdleC5NYXRjaCkiPm1hdGNoZXMoU3RyaW5nLE1hdGNoKTwvYT48L2NvZGU+LgotICogVGhlIDB0aCBncm91cCBtZWFucyB3aG9sZSBvZiB0aGlzIHJlZ3VsYXIgZXhwcmVzc2lvbi4KLSAqIFRoZSA8VkFSPk48L1ZBUj50aCBnb3J1cCBpcyB0aGUgaW5zaWRlIG9mIHRoZSA8VkFSPk48L1ZBUj50aCBsZWZ0IHBhcmVudGhlc2lzLgotICogCi0gKiAgIDxwPkZvciBpbnN0YW5jZSwgYSByZWd1bGFyIGV4cHJlc3Npb24gaXMKLSAqICAgIjxGT05UIGNvbG9yPWJsdWU+PEtCRD4gKihbXiZsdDs6XSopICsmbHQ7KFteJmd0O10qKSZndDsgKjwvS0JEPjwvRk9OVD4iCi0gKiAgIGFuZCB0YXJnZXQgdGV4dCBpcwotICogICAiPEZPTlQgY29sb3I9cmVkPjxLQkQ+RnJvbTogVEFNVVJBIEtlbnQgJmx0O2tlbnRAdHJsLmlibS5jby5qcCZndDs8L0tCRD48L0ZPTlQ+IjoKLSAqICAgPHVsPgotICogICAgIDxsaT48Y29kZT5NYXRjaC5nZXRDYXB0dXJlZFRleHQoMCk8L2NvZGU+OgotICogICAgICI8Rk9OVCBjb2xvcj1yZWQ+PEtCRD4gVEFNVVJBIEtlbnQgJmx0O2tlbnRAdHJsLmlibS5jby5qcCZndDs8L0tCRD48L0ZPTlQ+IgotICogICAgIDxsaT48Y29kZT5NYXRjaC5nZXRDYXB0dXJlZFRleHQoMSk8L2NvZGU+OiAiPEZPTlQgY29sb3I9cmVkPjxLQkQ+VEFNVVJBIEtlbnQ8L0tCRD48L0ZPTlQ+IgotICogICAgIDxsaT48Y29kZT5NYXRjaC5nZXRDYXB0dXJlZFRleHQoMik8L2NvZGU+OiAiPEZPTlQgY29sb3I9cmVkPjxLQkQ+a2VudEB0cmwuaWJtLmNvLmpwPC9LQkQ+PC9GT05UPiIKLSAqICAgPC91bD4KLSAqCi0gKiAgICAgICA8ZHQgY2xhc3M9IlJFR0VYIj48a2JkPlwxIFwyIFwzIFw0IFw1IFw2IFw3IFw4IFw5PC9rYmQ+Ci0gKiAgICAgICA8ZGQ+Ci0gKgotICogICAgICAgPGR0IGNsYXNzPSJSRUdFWCI+PGtiZD4oPz48L2tiZD48dmFyPlg8L3Zhcj48a2JkPik8L2tiZD4KLSAqICAgICAgIDxkZD5JbmRlcGVuZGVudCBleHByZXNzaW9uIGdyb3VwLiAuLi4uLi4uLi4uLi4uLi4uCi0gKgotICogICAgICAgPGR0IGNsYXNzPSJSRUdFWCI+PGtiZD4oPzwva2JkPjx2YXI+b3B0aW9uczwvdmFyPjxrYmQ+Ojwva2JkPjx2YXI+WDwvdmFyPjxrYmQ+KTwva2JkPgotICogICAgICAgPGR0IGNsYXNzPSJSRUdFWCI+PGtiZD4oPzwva2JkPjx2YXI+b3B0aW9uczwvdmFyPjxrYmQ+LTwva2JkPjx2YXI+b3B0aW9uczI8L3Zhcj48a2JkPjo8L2tiZD48dmFyPlg8L3Zhcj48a2JkPik8L2tiZD4KLSAqICAgICAgIDxkZD4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gKiAgICAgICA8ZGQ+VGhlIDx2YXI+b3B0aW9uczwvdmFyPiBvciB0aGUgPHZhcj5vcHRpb25zMjwvdmFyPiBjb25zaXN0cyBvZiAnaScgJ20nICdzJyAndycuCi0gKiAgICAgICAgICAgTm90ZSB0aGF0IGl0IGNhbiBub3QgY29udGFpbiAndScuCi0gKgotICogICAgICAgPGR0IGNsYXNzPSJSRUdFWCI+PGtiZD4oPzwva2JkPjx2YXI+b3B0aW9uczwvdmFyPjxrYmQ+KTwva2JkPgotICogICAgICAgPGR0IGNsYXNzPSJSRUdFWCI+PGtiZD4oPzwva2JkPjx2YXI+b3B0aW9uczwvdmFyPjxrYmQ+LTwva2JkPjx2YXI+b3B0aW9uczI8L3Zhcj48a2JkPik8L2tiZD4KLSAqICAgICAgIDxkZD4uLi4uLi4KLSAqICAgICAgIDxkZD5UaGVzZSBleHByZXNzaW9ucyBtdXN0IGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBncm91cC4KLSAqICAgICA8L2RsPgotICogICA8L2xpPgotICoKLSAqICAgPGxpPkFuY2hvcgotICogICAgIDxkbD4KLSAqICAgICAgIDxkdCBjbGFzcz0iUkVHRVgiPjxrYmQ+XEE8L2tiZD4KLSAqICAgICAgIDxkZD5NYXRjaGVzIHRoZSBiZWdpbm5pZyBvZiB0aGUgdGV4dC4KLSAqCi0gKiAgICAgICA8ZHQgY2xhc3M9IlJFR0VYIj48a2JkPlxaPC9rYmQ+Ci0gKiAgICAgICA8ZGQ+TWF0Y2hlcyB0aGUgZW5kIG9mIHRoZSB0ZXh0LCBvciBiZWZvcmUgYW4gRU9MIGNoYXJhY3RlciBhdCB0aGUgZW5kIG9mIHRoZSB0ZXh0LAotICogICAgICAgICAgIG9yIENBUlJJQUdFIFJFVFVSTiArIExJTkUgRkVFRCBhdCB0aGUgZW5kIG9mIHRoZSB0ZXh0LgotICoKLSAqICAgICAgIDxkdCBjbGFzcz0iUkVHRVgiPjxrYmQ+XHo8L2tiZD4KLSAqICAgICAgIDxkZD5NYXRjaGVzIHRoZSBlbmQgb2YgdGhlIHRleHQuCi0gKgotICogICAgICAgPGR0IGNsYXNzPSJSRUdFWCI+PGtiZD5ePC9rYmQ+Ci0gKiAgICAgICA8ZGQ+TWF0Y2hlcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0ZXh0LiAgSXQgaXMgZXF1aXZhbGVudCB0byA8c3BhbiBjbGFzcz0iUkVHRVgiPjxLYmQ+XEE8L2tiZD48L3NwYW4+LgotICogICAgICAgPGRkPldoZW4gPGEgaHJlZj0iI01fT1BUSU9OIj5hICJtIiBvcHRpb248L2E+IGlzIHNldCwKLSAqICAgICAgICAgICBpdCBtYXRjaGVzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRleHQsIG9yIGFmdGVyIG9uZSBvZiBFT0wgY2hhcmFjdGVycyAoCi0gKiAgICAgICAgICAgTElORSBGRUVEIChVKzAwMEEpLCBDQVJSSUFHRSBSRVRVUk4gKFUrMDAwRCksIExJTkUgU0VQQVJBVE9SIChVKzIwMjgpLAotICogICAgICAgICAgIFBBUkFHUkFQSCBTRVBBUkFUT1IgKFUrMjAyOSkuKQotICoKLSAqICAgICAgIDxkdCBjbGFzcz0iUkVHRVgiPjxrYmQ+JDwva2JkPgotICogICAgICAgPGRkPk1hdGNoZXMgdGhlIGVuZCBvZiB0aGUgdGV4dCwgb3IgYmVmb3JlIGFuIEVPTCBjaGFyYWN0ZXIgYXQgdGhlIGVuZCBvZiB0aGUgdGV4dCwKLSAqICAgICAgICAgICBvciBDQVJSSUFHRSBSRVRVUk4gKyBMSU5FIEZFRUQgYXQgdGhlIGVuZCBvZiB0aGUgdGV4dC4KLSAqICAgICAgIDxkZD5XaGVuIDxhIGhyZWY9IiNNX09QVElPTiI+YSAibSIgb3B0aW9uPC9hPiBpcyBzZXQsCi0gKiAgICAgICAgICAgaXQgbWF0Y2hlcyB0aGUgZW5kIG9mIHRoZSB0ZXh0LCBvciBiZWZvcmUgYW4gRU9MIGNoYXJhY3Rlci4KLSAqCi0gKiAgICAgICA8ZHQgY2xhc3M9IlJFR0VYIj48a2JkPlxiPC9rYmQ+Ci0gKiAgICAgICA8ZGQ+TWF0Y2hlcyB3b3JkIGJvdW5kYXJ5LgotICogICAgICAgICAgIChTZWUgPGEgaHJlZj0iI1dfT1BUSU9OIj5hICJ3IiBvcHRpb248L2E+KQotICoKLSAqICAgICAgIDxkdCBjbGFzcz0iUkVHRVgiPjxrYmQ+XEI8L2tiZD4KLSAqICAgICAgIDxkZD5NYXRjaGVzIG5vbiB3b3JkIGJvdW5kYXJ5LgotICogICAgICAgICAgIChTZWUgPGEgaHJlZj0iI1dfT1BUSU9OIj5hICJ3IiBvcHRpb248L2E+KQotICoKLSAqICAgICAgIDxkdCBjbGFzcz0iUkVHRVgiPjxrYmQ+XCZsdDs8L2tiZD4KLSAqICAgICAgIDxkZD5NYXRjaGVzIHRoZSBiZWdpbm5pbmcgb2YgYSB3b3JkLgotICogICAgICAgICAgIChTZWUgPGEgaHJlZj0iI1dfT1BUSU9OIj5hICJ3IiBvcHRpb248L2E+KQotICoKLSAqICAgICAgIDxkdCBjbGFzcz0iUkVHRVgiPjxrYmQ+XCZndDs8L2tiZD4KLSAqICAgICAgIDxkZD5NYXRjaGVzIHRoZSBlbmQgb2YgYSB3b3JkLgotICogICAgICAgICAgIChTZWUgPGEgaHJlZj0iI1dfT1BUSU9OIj5hICJ3IiBvcHRpb248L2E+KQotICogICAgIDwvZGw+Ci0gKiAgIDwvbGk+Ci0gKiAgIDxsaT5Mb29rYWhlYWQgYW5kIGxvb2tiZWhpbmQKLSAqICAgICA8ZGw+Ci0gKiAgICAgICA8ZHQgY2xhc3M9IlJFR0VYIj48a2JkPig/PTwva2JkPjx2YXI+WDwvdmFyPjxrYmQ+KTwva2JkPgotICogICAgICAgPGRkPkxvb2thaGVhZC4KLSAqCi0gKiAgICAgICA8ZHQgY2xhc3M9IlJFR0VYIj48a2JkPig/ITwva2JkPjx2YXI+WDwvdmFyPjxrYmQ+KTwva2JkPgotICogICAgICAgPGRkPk5lZ2F0aXZlIGxvb2thaGVhZC4KLSAqCi0gKiAgICAgICA8ZHQgY2xhc3M9IlJFR0VYIj48a2JkPig/Jmx0Oz08L2tiZD48dmFyPlg8L3Zhcj48a2JkPik8L2tiZD4KLSAqICAgICAgIDxkZD5Mb29rYmVoaW5kLgotICogICAgICAgPGRkPihOb3RlIGZvciB0ZXh0IGNhcHR1cmluZy4uLi4uLikKLSAqCi0gKiAgICAgICA8ZHQgY2xhc3M9IlJFR0VYIj48a2JkPig/Jmx0OyE8L2tiZD48dmFyPlg8L3Zhcj48a2JkPik8L2tiZD4KLSAqICAgICAgIDxkZD5OZWdhdGl2ZSBsb29rYmVoaW5kLgotICogICAgIDwvZGw+Ci0gKiAgIDwvbGk+Ci0gKgotICogICA8bGk+TWlzYy4KLSAqICAgICA8ZGw+Ci0gKiAgICAgICA8ZHQgY2xhc3M9IlJFR0VYIj48a2JkPig/KDwvS2JkPjx2YXI+Y29uZGl0aW9uPC92YXI+PEtiZD4pPC9rYmQ+PHZhcj55ZXMtcGF0dGVybjwvdmFyPjxrYmQ+fDwva2JkPjx2YXI+bm8tcGF0dGVybjwvdmFyPjxrYmQ+KTwva2JkPiwKLSAqICAgICAgIDxkdCBjbGFzcz0iUkVHRVgiPjxrYmQ+KD8oPC9rYmQ+PHZhcj5jb25kaXRpb248L3Zhcj48a2JkPik8L2tiZD48dmFyPnllcy1wYXR0ZXJuPC92YXI+PGtiZD4pPC9rYmQ+Ci0gKiAgICAgICA8ZGQ+Li4uLi4uCi0gKiAgICAgICA8ZHQgY2xhc3M9IlJFR0VYIj48a2JkPig/Izwva2JkPjx2YXI+Y29tbWVudDwvdmFyPjxrYmQ+KTwva2JkPgotICogICAgICAgPGRkPkNvbW1lbnQuICBBIGNvbW1lbnQgc3RyaW5nIGNvbnNpc3RzIG9mIGNoYXJhY3RlcnMgZXhjZXB0ICc8a2JkPik8L2tiZD4nLgotICogICAgICAgICAgIFlvdSBjYW4gbm90IHdyaXRlIGNvbW1lbnRzIGluIGNoYXJhY3RlciBjbGFzc2VzIGFuZCBiZWZvcmUgcXVhbnRpZmllcnMuCi0gKiAgICAgPC9kbD4KLSAqICAgPC9saT4KLSAqIDwvdWw+Ci0gKgotICoKLSAqIDxociB3aWR0aD0iNTAlIj4KLSAqIDxoMz5CTkYgZm9yIHRoZSByZWd1bGFyIGV4cHJlc3Npb248L2gzPgotICogPHByZT4KLSAqIHJlZ2V4IDo6PSAoJyg/JyBvcHRpb25zICcpJyk/IHRlcm0gKCd8JyB0ZXJtKSoKLSAqIHRlcm0gOjo9IGZhY3RvcisKLSAqIGZhY3RvciA6Oj0gYW5jaG9ycyB8IGF0b20gKCgnKicgfCAnKycgfCAnPycgfCBtaW5tYXggKSAnPyc/ICk/Ci0gKiAgICAgICAgICAgIHwgJyg/IycgW14pXSogJyknCi0gKiBtaW5tYXggOjo9ICd7JyAoWzAtOV0rIHwgWzAtOV0rICcsJyB8ICcsJyBbMC05XSsgfCBbMC05XSsgJywnIFswLTldKykgJ30nCi0gKiBhdG9tIDo6PSBjaGFyIHwgJy4nIHwgY2hhci1jbGFzcyB8ICcoJyByZWdleCAnKScgfCAnKD86JyByZWdleCAnKScgfCAnXCcgWzAtOV0KLSAqICAgICAgICAgIHwgJ1x3JyB8ICdcVycgfCAnXGQnIHwgJ1xEJyB8ICdccycgfCAnXFMnIHwgY2F0ZWdvcnktYmxvY2sgfCAnXFgnCi0gKiAgICAgICAgICB8ICcoPz4nIHJlZ2V4ICcpJyB8ICcoPycgb3B0aW9ucyAnOicgcmVnZXggJyknCi0gKiAgICAgICAgICB8ICcoPycgKCcoJyBbMC05XSAnKScgfCAnKCcgYW5jaG9ycyAnKScgfCBsb29rcykgdGVybSAoJ3wnIHRlcm0pPyAnKScKLSAqIG9wdGlvbnMgOjo9IFtpbXN3XSogKCctJyBbaW1zd10rKT8KLSAqIGFuY2hvcnMgOjo9ICdeJyB8ICckJyB8ICdcQScgfCAnXFonIHwgJ1x6JyB8ICdcYicgfCAnXEInIHwgJ1wmbHQ7JyB8ICdcPicKLSAqIGxvb2tzIDo6PSAnKD89JyByZWdleCAnKScgIHwgJyg/IScgcmVnZXggJyknCi0gKiAgICAgICAgICAgfCAnKD8mbHQ7PScgcmVnZXggJyknIHwgJyg/Jmx0OyEnIHJlZ2V4ICcpJwotICogY2hhciA6Oj0gJ1xcJyB8ICdcJyBbZWZucnR2XSB8ICdcYycgW0AtX10gfCBjb2RlLXBvaW50IHwgY2hhcmFjdGVyLTEKLSAqIGNhdGVnb3J5LWJsb2NrIDo6PSAnXCcgW3BQXSBjYXRlZ29yeS1zeW1ib2wtMQotICogICAgICAgICAgICAgICAgICAgIHwgKCdccHsnIHwgJ1xQeycpIChjYXRlZ29yeS1zeW1ib2wgfCBibG9jay1uYW1lCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgb3RoZXItcHJvcGVydGllcykgJ30nCi0gKiBjYXRlZ29yeS1zeW1ib2wtMSA6Oj0gJ0wnIHwgJ00nIHwgJ04nIHwgJ1onIHwgJ0MnIHwgJ1AnIHwgJ1MnCi0gKiBjYXRlZ29yeS1zeW1ib2wgOjo9IGNhdGVnb3J5LXN5bWJvbC0xIHwgJ0x1JyB8ICdMbCcgfCAnTHQnIHwgJ0xtJyB8IExvJwotICogICAgICAgICAgICAgICAgICAgICB8ICdNbicgfCAnTWUnIHwgJ01jJyB8ICdOZCcgfCAnTmwnIHwgJ05vJwotICogICAgICAgICAgICAgICAgICAgICB8ICdacycgfCAnWmwnIHwgJ1pwJyB8ICdDYycgfCAnQ2YnIHwgJ0NuJyB8ICdDbycgfCAnQ3MnCi0gKiAgICAgICAgICAgICAgICAgICAgIHwgJ1BkJyB8ICdQcycgfCAnUGUnIHwgJ1BjJyB8ICdQbycKLSAqICAgICAgICAgICAgICAgICAgICAgfCAnU20nIHwgJ1NjJyB8ICdTaycgfCAnU28nCi0gKiBibG9jay1uYW1lIDo6PSAoU2VlIGFib3ZlKQotICogb3RoZXItcHJvcGVydGllcyA6Oj0gJ0FMTCcgfCAnQVNTSUdORUQnIHwgJ1VOQVNTSUdORUQnCi0gKiBjaGFyYWN0ZXItMSA6Oj0gKGFueSBjaGFyYWN0ZXIgZXhjZXB0IG1ldGEtY2hhcmFjdGVycykKLSAqCi0gKiBjaGFyLWNsYXNzIDo6PSAnWycgcmFuZ2VzICddJwotICogICAgICAgICAgICAgICAgfCAnKD9bJyByYW5nZXMgJ10nIChbLSsmXSAnWycgcmFuZ2VzICddJyk/ICcpJwotICogcmFuZ2VzIDo6PSAnXic/IChyYW5nZSA8YSBocmVmPSIjQ09NTUFfT1BUSU9OIj4nLCc/PC9hPikrCi0gKiByYW5nZSA6Oj0gJ1xkJyB8ICdcdycgfCAnXHMnIHwgJ1xEJyB8ICdcVycgfCAnXFMnIHwgY2F0ZWdvcnktYmxvY2sKLSAqICAgICAgICAgICB8IHJhbmdlLWNoYXIgfCByYW5nZS1jaGFyICctJyByYW5nZS1jaGFyCi0gKiByYW5nZS1jaGFyIDo6PSAnXFsnIHwgJ1xdJyB8ICdcXCcgfCAnXCcgWywtZWZucnR2XSB8IGNvZGUtcG9pbnQgfCBjaGFyYWN0ZXItMgotICogY29kZS1wb2ludCA6Oj0gJ1x4JyBoZXgtY2hhciBoZXgtY2hhcgotICogICAgICAgICAgICAgICAgfCAnXHh7JyBoZXgtY2hhcisgJ30nCi0gKiA8IS0tICAgICAgICAgICAgICAgfCAnXHUwMDVjIHUnIGhleC1jaGFyIGhleC1jaGFyIGhleC1jaGFyIGhleC1jaGFyCi0gKiAtLT4gICAgICAgICAgICAgICB8ICdcdicgaGV4LWNoYXIgaGV4LWNoYXIgaGV4LWNoYXIgaGV4LWNoYXIgaGV4LWNoYXIgaGV4LWNoYXIKLSAqIGhleC1jaGFyIDo6PSBbMC05YS1mQS1GXQotICogY2hhcmFjdGVyLTIgOjo9IChhbnkgY2hhcmFjdGVyIGV4Y2VwdCBcW10tLCkKLSAqIDwvcHJlPgotICoKLSAqIDxociB3aWR0aD0iNTAlIj4KLSAqIDxoMz5UT0RPPC9oMz4KLSAqIDx1bD4KLSAqICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cudW5pY29kZS5vcmcvdW5pY29kZS9yZXBvcnRzL3RyMTgvIj5Vbmljb2RlIFJlZ3VsYXIgRXhwcmVzc2lvbiBHdWlkZWxpbmVzPC9hPgotICogICAgIDx1bD4KLSAqICAgICAgIDxsaT4yLjQgQ2Fub25pY2FsIEVxdWl2YWxlbnRzCi0gKiAgICAgICA8bGk+TGV2ZWwgMwotICogICAgIDwvdWw+Ci0gKiAgIDxsaT5QYXJzaW5nIHBlcmZvcm1hbmNlCi0gKiA8L3VsPgotICoKLSAqIDxociB3aWR0aD0iNTAlIj4KLSAqCi0gKiBAYXV0aG9yIFRBTVVSQSBLZW50ICZsdDtrZW50QHRybC5pYm0uY28uanAmZ3Q7Ci0gKiBAdmVyc2lvbiAkSWQ6IFJlZ3VsYXJFeHByZXNzaW9uLmphdmEsdiAxLjEgMjAwMy8wOS8yNiAyMToyMzoyOCBlcmljdmFzIEV4cCAkCi0gKi8KLXB1YmxpYyBjbGFzcyBSZWd1bGFyRXhwcmVzc2lvbiBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKLSAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0gICAgLyoqCi0gICAgICogQ29tcGlsZXMgYSB0b2tlbiB0cmVlIGludG8gYW4gb3BlcmF0aW9uIGZsb3cuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzeW5jaHJvbml6ZWQgdm9pZCBjb21waWxlKFRva2VuIHRvaykgewotICAgICAgICBpZiAodGhpcy5vcGVyYXRpb25zICE9IG51bGwpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHRoaXMubnVtYmVyT2ZDbG9zdXJlcyA9IDA7Ci0gICAgICAgIHRoaXMub3BlcmF0aW9ucyA9IHRoaXMuY29tcGlsZSh0b2ssIG51bGwsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb252ZXJ0cyBhIHRva2VuIHRvIGFuIG9wZXJhdGlvbi4KLSAgICAgKi8KLSAgICBwcml2YXRlIE9wIGNvbXBpbGUoVG9rZW4gdG9rLCBPcCBuZXh0LCBib29sZWFuIHJldmVyc2UpIHsKLSAgICAgICAgT3AgcmV0OwotICAgICAgICBzd2l0Y2ggKHRvay50eXBlKSB7Ci0gICAgICAgIGNhc2UgVG9rZW4uRE9UOgotICAgICAgICAgICAgcmV0ID0gT3AuY3JlYXRlRG90KCk7Ci0gICAgICAgICAgICByZXQubmV4dCA9IG5leHQ7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFRva2VuLkNIQVI6Ci0gICAgICAgICAgICByZXQgPSBPcC5jcmVhdGVDaGFyKHRvay5nZXRDaGFyKCkpOwotICAgICAgICAgICAgcmV0Lm5leHQgPSBuZXh0OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBUb2tlbi5BTkNIT1I6Ci0gICAgICAgICAgICByZXQgPSBPcC5jcmVhdGVBbmNob3IodG9rLmdldENoYXIoKSk7Ci0gICAgICAgICAgICByZXQubmV4dCA9IG5leHQ7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFRva2VuLlJBTkdFOgotICAgICAgICBjYXNlIFRva2VuLk5SQU5HRToKLSAgICAgICAgICAgIHJldCA9IE9wLmNyZWF0ZVJhbmdlKHRvayk7Ci0gICAgICAgICAgICByZXQubmV4dCA9IG5leHQ7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFRva2VuLkNPTkNBVDoKLSAgICAgICAgICAgIHJldCA9IG5leHQ7Ci0gICAgICAgICAgICBpZiAoIXJldmVyc2UpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gdG9rLnNpemUoKS0xOyAgaSA+PSAwOyAgaSAtLSkgewotICAgICAgICAgICAgICAgICAgICByZXQgPSBjb21waWxlKHRvay5nZXRDaGlsZChpKSwgcmV0LCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgIGkgPCB0b2suc2l6ZSgpOyAgaSArKykgewotICAgICAgICAgICAgICAgICAgICByZXQgPSBjb21waWxlKHRvay5nZXRDaGlsZChpKSwgcmV0LCB0cnVlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFRva2VuLlVOSU9OOgotICAgICAgICAgICAgT3AuVW5pb25PcCB1bmkgPSBPcC5jcmVhdGVVbmlvbih0b2suc2l6ZSgpKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyAgaSA8IHRvay5zaXplKCk7ICBpICsrKSB7Ci0gICAgICAgICAgICAgICAgdW5pLmFkZEVsZW1lbnQoY29tcGlsZSh0b2suZ2V0Q2hpbGQoaSksIG5leHQsIHJldmVyc2UpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldCA9IHVuaTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldC5uZXh0IGlzIG51bGwuCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFRva2VuLkNMT1NVUkU6Ci0gICAgICAgIGNhc2UgVG9rZW4uTk9OR1JFRURZQ0xPU1VSRToKLSAgICAgICAgICAgIFRva2VuIGNoaWxkID0gdG9rLmdldENoaWxkKDApOwotICAgICAgICAgICAgaW50IG1pbiA9IHRvay5nZXRNaW4oKTsKLSAgICAgICAgICAgIGludCBtYXggPSB0b2suZ2V0TWF4KCk7Ci0gICAgICAgICAgICBpZiAobWluID49IDAgJiYgbWluID09IG1heCkgeyAvLyB7bn0KLSAgICAgICAgICAgICAgICByZXQgPSBuZXh0OwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWluOyAgaSArKykgewotICAgICAgICAgICAgICAgICAgICByZXQgPSBjb21waWxlKGNoaWxkLCByZXQsIHJldmVyc2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtaW4gPiAwICYmIG1heCA+IDApCi0gICAgICAgICAgICAgICAgbWF4IC09IG1pbjsKLSAgICAgICAgICAgIGlmIChtYXggPiAwKSB7Ci0gICAgICAgICAgICAgICAgLy8gWHsyLDZ9IC0+IFhYKFgoWChYWD8pPyk/KT8KLSAgICAgICAgICAgICAgICByZXQgPSBuZXh0OwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyAgaSA8IG1heDsgIGkgKyspIHsKLSAgICAgICAgICAgICAgICAgICAgT3AuQ2hpbGRPcCBxID0gT3AuY3JlYXRlUXVlc3Rpb24odG9rLnR5cGUgPT0gVG9rZW4uTk9OR1JFRURZQ0xPU1VSRSk7Ci0gICAgICAgICAgICAgICAgICAgIHEubmV4dCA9IG5leHQ7Ci0gICAgICAgICAgICAgICAgICAgIHEuc2V0Q2hpbGQoY29tcGlsZShjaGlsZCwgcmV0LCByZXZlcnNlKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IHE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBPcC5DaGlsZE9wIG9wOwotICAgICAgICAgICAgICAgIGlmICh0b2sudHlwZSA9PSBUb2tlbi5OT05HUkVFRFlDTE9TVVJFKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9wID0gT3AuY3JlYXRlTm9uR3JlZWR5Q2xvc3VyZSgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gVG9rZW4uQ0xPU1VSRQotICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZ2V0TWluTGVuZ3RoKCkgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gT3AuY3JlYXRlQ2xvc3VyZSh0aGlzLm51bWJlck9mQ2xvc3VyZXMrKyk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gT3AuY3JlYXRlQ2xvc3VyZSgtMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9wLm5leHQgPSBuZXh0OwotICAgICAgICAgICAgICAgIG9wLnNldENoaWxkKGNvbXBpbGUoY2hpbGQsIG9wLCByZXZlcnNlKSk7Ci0gICAgICAgICAgICAgICAgcmV0ID0gb3A7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobWluID4gMCkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyAgaSA8IG1pbjsgIGkgKyspIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gY29tcGlsZShjaGlsZCwgcmV0LCByZXZlcnNlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFRva2VuLkVNUFRZOgotICAgICAgICAgICAgcmV0ID0gbmV4dDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgVG9rZW4uU1RSSU5HOgotICAgICAgICAgICAgcmV0ID0gT3AuY3JlYXRlU3RyaW5nKHRvay5nZXRTdHJpbmcoKSk7Ci0gICAgICAgICAgICByZXQubmV4dCA9IG5leHQ7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFRva2VuLkJBQ0tSRUZFUkVOQ0U6Ci0gICAgICAgICAgICByZXQgPSBPcC5jcmVhdGVCYWNrUmVmZXJlbmNlKHRvay5nZXRSZWZlcmVuY2VOdW1iZXIoKSk7Ci0gICAgICAgICAgICByZXQubmV4dCA9IG5leHQ7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFRva2VuLlBBUkVOOgotICAgICAgICAgICAgaWYgKHRvay5nZXRQYXJlbk51bWJlcigpID09IDApIHsKLSAgICAgICAgICAgICAgICByZXQgPSBjb21waWxlKHRvay5nZXRDaGlsZCgwKSwgbmV4dCwgcmV2ZXJzZSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHJldmVyc2UpIHsKLSAgICAgICAgICAgICAgICBuZXh0ID0gT3AuY3JlYXRlQ2FwdHVyZSh0b2suZ2V0UGFyZW5OdW1iZXIoKSwgbmV4dCk7Ci0gICAgICAgICAgICAgICAgbmV4dCA9IGNvbXBpbGUodG9rLmdldENoaWxkKDApLCBuZXh0LCByZXZlcnNlKTsKLSAgICAgICAgICAgICAgICByZXQgPSBPcC5jcmVhdGVDYXB0dXJlKC10b2suZ2V0UGFyZW5OdW1iZXIoKSwgbmV4dCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG5leHQgPSBPcC5jcmVhdGVDYXB0dXJlKC10b2suZ2V0UGFyZW5OdW1iZXIoKSwgbmV4dCk7Ci0gICAgICAgICAgICAgICAgbmV4dCA9IGNvbXBpbGUodG9rLmdldENoaWxkKDApLCBuZXh0LCByZXZlcnNlKTsKLSAgICAgICAgICAgICAgICByZXQgPSBPcC5jcmVhdGVDYXB0dXJlKHRvay5nZXRQYXJlbk51bWJlcigpLCBuZXh0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgVG9rZW4uTE9PS0FIRUFEOgotICAgICAgICAgICAgcmV0ID0gT3AuY3JlYXRlTG9vayhPcC5MT09LQUhFQUQsIG5leHQsIGNvbXBpbGUodG9rLmdldENoaWxkKDApLCBudWxsLCBmYWxzZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVG9rZW4uTkVHQVRJVkVMT09LQUhFQUQ6Ci0gICAgICAgICAgICByZXQgPSBPcC5jcmVhdGVMb29rKE9wLk5FR0FUSVZFTE9PS0FIRUFELCBuZXh0LCBjb21waWxlKHRvay5nZXRDaGlsZCgwKSwgbnVsbCwgZmFsc2UpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRva2VuLkxPT0tCRUhJTkQ6Ci0gICAgICAgICAgICByZXQgPSBPcC5jcmVhdGVMb29rKE9wLkxPT0tCRUhJTkQsIG5leHQsIGNvbXBpbGUodG9rLmdldENoaWxkKDApLCBudWxsLCB0cnVlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUb2tlbi5ORUdBVElWRUxPT0tCRUhJTkQ6Ci0gICAgICAgICAgICByZXQgPSBPcC5jcmVhdGVMb29rKE9wLk5FR0FUSVZFTE9PS0JFSElORCwgbmV4dCwgY29tcGlsZSh0b2suZ2V0Q2hpbGQoMCksIG51bGwsIHRydWUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgVG9rZW4uSU5ERVBFTkRFTlQ6Ci0gICAgICAgICAgICByZXQgPSBPcC5jcmVhdGVJbmRlcGVuZGVudChuZXh0LCBjb21waWxlKHRvay5nZXRDaGlsZCgwKSwgbnVsbCwgcmV2ZXJzZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBUb2tlbi5NT0RJRklFUkdST1VQOgotICAgICAgICAgICAgcmV0ID0gT3AuY3JlYXRlTW9kaWZpZXIobmV4dCwgY29tcGlsZSh0b2suZ2V0Q2hpbGQoMCksIG51bGwsIHJldmVyc2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUb2tlbi5Nb2RpZmllclRva2VuKXRvaykuZ2V0T3B0aW9ucygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUb2tlbi5Nb2RpZmllclRva2VuKXRvaykuZ2V0T3B0aW9uc01hc2soKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFRva2VuLkNPTkRJVElPTjoKLSAgICAgICAgICAgIFRva2VuLkNvbmRpdGlvblRva2VuIGN0b2sgPSAoVG9rZW4uQ29uZGl0aW9uVG9rZW4pdG9rOwotICAgICAgICAgICAgaW50IHJlZiA9IGN0b2sucmVmTnVtYmVyOwotICAgICAgICAgICAgT3AgY29uZGl0aW9uID0gY3Rvay5jb25kaXRpb24gPT0gbnVsbCA/IG51bGwgOiBjb21waWxlKGN0b2suY29uZGl0aW9uLCBudWxsLCByZXZlcnNlKTsKLSAgICAgICAgICAgIE9wIHllcyA9IGNvbXBpbGUoY3Rvay55ZXMsIG5leHQsIHJldmVyc2UpOwotICAgICAgICAgICAgT3Agbm8gPSBjdG9rLm5vID09IG51bGwgPyBudWxsIDogY29tcGlsZShjdG9rLm5vLCBuZXh0LCByZXZlcnNlKTsKLSAgICAgICAgICAgIHJldCA9IE9wLmNyZWF0ZUNvbmRpdGlvbihuZXh0LCByZWYsIGNvbmRpdGlvbiwgeWVzLCBubyk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVua25vd24gdG9rZW4gdHlwZTogIit0b2sudHlwZSk7Ci0gICAgICAgIH0gLy8gc3dpdGNoICh0b2sudHlwZSkKLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICB9Ci0KLQotLy9QdWJsaWMKLQotICAgIC8qKgotICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSA8dmFyPnRhcmdldDwvdmFyPiB0ZXh0IDxzdHJvbmc+Y29udGFpbnM8L3N0cm9uZz4gdGhpcyBwYXR0ZXJuIG9yIG5vdC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdGFyZ2V0IGlzIG1hdGNoZWQgdG8gdGhpcyByZWd1bGFyIGV4cHJlc3Npb24uCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gbWF0Y2hlcyhjaGFyW10gIHRhcmdldCkgewotICAgICAgICByZXR1cm4gdGhpcy5tYXRjaGVzKHRhcmdldCwgMCwgIHRhcmdldCAubGVuZ3RoICwgKE1hdGNoKW51bGwpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSA8dmFyPnRhcmdldDwvdmFyPiB0ZXh0IDxzdHJvbmc+Y29udGFpbnM8L3N0cm9uZz4gdGhpcyBwYXR0ZXJuCi0gICAgICogaW4gc3BlY2lmaWVkIHJhbmdlIG9yIG5vdC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBzdGFydCBTdGFydCBvZmZzZXQgb2YgdGhlIHJhbmdlLgotICAgICAqIEBwYXJhbSBlbmQgIEVuZCBvZmZzZXQgKzEgb2YgdGhlIHJhbmdlLgotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdGFyZ2V0IGlzIG1hdGNoZWQgdG8gdGhpcyByZWd1bGFyIGV4cHJlc3Npb24uCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gbWF0Y2hlcyhjaGFyW10gIHRhcmdldCwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLm1hdGNoZXModGFyZ2V0LCBzdGFydCwgZW5kLCAoTWF0Y2gpbnVsbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIDx2YXI+dGFyZ2V0PC92YXI+IHRleHQgPHN0cm9uZz5jb250YWluczwvc3Ryb25nPiB0aGlzIHBhdHRlcm4gb3Igbm90LgotICAgICAqCi0gICAgICogQHBhcmFtIG1hdGNoIEEgTWF0Y2ggaW5zdGFuY2UgZm9yIHN0b3JpbmcgbWF0Y2hpbmcgcmVzdWx0LgotICAgICAqIEByZXR1cm4gT2Zmc2V0IG9mIHRoZSBzdGFydCBwb3NpdGlvbiBpbiA8VkFSPnRhcmdldDwvVkFSPjsgb3IgLTEgaWYgbm90IG1hdGNoLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIG1hdGNoZXMoY2hhcltdICB0YXJnZXQsIE1hdGNoIG1hdGNoKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLm1hdGNoZXModGFyZ2V0LCAwLCAgdGFyZ2V0IC5sZW5ndGggLCBtYXRjaCk7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgPHZhcj50YXJnZXQ8L3Zhcj4gdGV4dCA8c3Ryb25nPmNvbnRhaW5zPC9zdHJvbmc+IHRoaXMgcGF0dGVybgotICAgICAqIGluIHNwZWNpZmllZCByYW5nZSBvciBub3QuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc3RhcnQgU3RhcnQgb2Zmc2V0IG9mIHRoZSByYW5nZS4KLSAgICAgKiBAcGFyYW0gZW5kICBFbmQgb2Zmc2V0ICsxIG9mIHRoZSByYW5nZS4KLSAgICAgKiBAcGFyYW0gbWF0Y2ggQSBNYXRjaCBpbnN0YW5jZSBmb3Igc3RvcmluZyBtYXRjaGluZyByZXN1bHQuCi0gICAgICogQHJldHVybiBPZmZzZXQgb2YgdGhlIHN0YXJ0IHBvc2l0aW9uIGluIDxWQVI+dGFyZ2V0PC9WQVI+OyBvciAtMSBpZiBub3QgbWF0Y2guCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gbWF0Y2hlcyhjaGFyW10gIHRhcmdldCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBNYXRjaCBtYXRjaCkgewotCi0gICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewotICAgICAgICAgICAgaWYgKHRoaXMub3BlcmF0aW9ucyA9PSBudWxsKQotICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZSgpOwotICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dCA9PSBudWxsKQotICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IG5ldyBDb250ZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgQ29udGV4dCBjb24gPSBudWxsOwotICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMuY29udGV4dCkgewotICAgICAgICAgICAgY29uID0gdGhpcy5jb250ZXh0LmludXNlID8gbmV3IENvbnRleHQoKSA6IHRoaXMuY29udGV4dDsKLSAgICAgICAgICAgIGNvbi5yZXNldCh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXMubnVtYmVyT2ZDbG9zdXJlcyk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1hdGNoICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1hdGNoLnNldE51bWJlck9mR3JvdXBzKHRoaXMubm9mcGFyZW4pOwotICAgICAgICAgICAgbWF0Y2guc2V0U291cmNlKHRhcmdldCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodGhpcy5oYXNCYWNrUmVmZXJlbmNlcykgewotICAgICAgICAgICAgbWF0Y2ggPSBuZXcgTWF0Y2goKTsKLSAgICAgICAgICAgIG1hdGNoLnNldE51bWJlck9mR3JvdXBzKHRoaXMubm9mcGFyZW4pOwotICAgICAgICAgICAgLy8gTmVlZCBub3QgdG8gY2FsbCBzZXRTb3VyY2UoKSBiZWNhdXNlCi0gICAgICAgICAgICAvLyBhIGNhbGxlciBjYW4gbm90IGFjY2VzcyB0aGlzIG1hdGNoIGluc3RhbmNlLgotICAgICAgICB9Ci0gICAgICAgIGNvbi5tYXRjaCA9IG1hdGNoOwotCi0gICAgICAgIGlmICh0aGlzLmlzU2V0KHRoaXMub3B0aW9ucywgWE1MU0NIRU1BX01PREUpKSB7Ci0gICAgICAgICAgICBpbnQgbWF0Y2hFbmQgPSB0aGlzLiBtYXRjaENoYXJBcnJheSAoY29uLCB0aGlzLm9wZXJhdGlvbnMsIGNvbi5zdGFydCwgMSwgdGhpcy5vcHRpb25zKTsKLSAgICAgICAgICAgIC8vU3lzdGVtLmVyci5wcmludGxuKCJERUJVRzogbWF0Y2hFbmQ9IittYXRjaEVuZCk7Ci0gICAgICAgICAgICBpZiAobWF0Y2hFbmQgPT0gY29uLmxpbWl0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbi5tYXRjaCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbi5tYXRjaC5zZXRCZWdpbm5pbmcoMCwgY29uLnN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgY29uLm1hdGNoLnNldEVuZCgwLCBtYXRjaEVuZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbi5pbnVzZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogVGhlIHBhdHRlcm4gaGFzIG9ubHkgZml4ZWQgc3RyaW5nLgotICAgICAgICAgKiBUaGUgZW5naW5lIHVzZXMgQm95ZXItTW9vcmUuCi0gICAgICAgICAqLwotICAgICAgICBpZiAodGhpcy5maXhlZFN0cmluZ09ubHkpIHsKLSAgICAgICAgICAgIC8vU3lzdGVtLmVyci5wcmludGxuKCJERUJVRzogZml4ZWQtb25seTogIit0aGlzLmZpeGVkU3RyaW5nKTsKLSAgICAgICAgICAgIGludCBvID0gdGhpcy5maXhlZFN0cmluZ1RhYmxlLm1hdGNoZXModGFyZ2V0LCBjb24uc3RhcnQsIGNvbi5saW1pdCk7Ci0gICAgICAgICAgICBpZiAobyA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbi5tYXRjaCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbi5tYXRjaC5zZXRCZWdpbm5pbmcoMCwgbyk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbi5tYXRjaC5zZXRFbmQoMCwgbyt0aGlzLmZpeGVkU3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29uLmludXNlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb24uaW51c2UgPSBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFRoZSBwYXR0ZXJuIGNvbnRhaW5zIGEgZml4ZWQgc3RyaW5nLgotICAgICAgICAgKiBUaGUgZW5naW5lIGNoZWNrcyB3aXRoIEJveWVyLU1vb3JlIHdoZXRoZXIgdGhlIHRleHQgY29udGFpbnMgdGhlIGZpeGVkIHN0cmluZyBvciBub3QuCi0gICAgICAgICAqIElmIG5vdCwgaXQgcmV0dXJuIHdpdGggZmFsc2UuCi0gICAgICAgICAqLwotICAgICAgICBpZiAodGhpcy5maXhlZFN0cmluZyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpbnQgbyA9IHRoaXMuZml4ZWRTdHJpbmdUYWJsZS5tYXRjaGVzKHRhcmdldCwgY29uLnN0YXJ0LCBjb24ubGltaXQpOwotICAgICAgICAgICAgaWYgKG8gPCAwKSB7Ci0gICAgICAgICAgICAgICAgLy9TeXN0ZW0uZXJyLnByaW50bG4oIk5vbi1tYXRjaCBpbiBmaXhlZC1zdHJpbmcgc2VhcmNoLiIpOwotICAgICAgICAgICAgICAgIGNvbi5pbnVzZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGludCBsaW1pdCA9IGNvbi5saW1pdC10aGlzLm1pbmxlbmd0aDsKLSAgICAgICAgaW50IG1hdGNoU3RhcnQ7Ci0gICAgICAgIGludCBtYXRjaEVuZCA9IC0xOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBleHByZXNzaW9uIHN0YXJ0cyB3aXRoICIuKiIuCi0gICAgICAgICAqLwotICAgICAgICBpZiAodGhpcy5vcGVyYXRpb25zICE9IG51bGwKLSAgICAgICAgICAgICYmIHRoaXMub3BlcmF0aW9ucy50eXBlID09IE9wLkNMT1NVUkUgJiYgdGhpcy5vcGVyYXRpb25zLmdldENoaWxkKCkudHlwZSA9PSBPcC5ET1QpIHsKLSAgICAgICAgICAgIGlmIChpc1NldCh0aGlzLm9wdGlvbnMsIFNJTkdMRV9MSU5FKSkgewotICAgICAgICAgICAgICAgIG1hdGNoU3RhcnQgPSBjb24uc3RhcnQ7Ci0gICAgICAgICAgICAgICAgbWF0Y2hFbmQgPSB0aGlzLiBtYXRjaENoYXJBcnJheSAoY29uLCB0aGlzLm9wZXJhdGlvbnMsIGNvbi5zdGFydCwgMSwgdGhpcy5vcHRpb25zKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYm9vbGVhbiBwcmV2aW91c0lzRU9MID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBmb3IgKG1hdGNoU3RhcnQgPSBjb24uc3RhcnQ7ICBtYXRjaFN0YXJ0IDw9IGxpbWl0OyAgbWF0Y2hTdGFydCArKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgY2ggPSAgdGFyZ2V0IFsgIG1hdGNoU3RhcnQgXSA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc0VPTENoYXIoY2gpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0lzRU9MID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0lzRU9MKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPD0gKG1hdGNoRW5kID0gdGhpcy4gbWF0Y2hDaGFyQXJyYXkgKGNvbiwgdGhpcy5vcGVyYXRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFN0YXJ0LCAxLCB0aGlzLm9wdGlvbnMpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0lzRU9MID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBPcHRpbWl6YXRpb24gYWdhaW5zdCB0aGUgZmlyc3QgY2hhcmFjdGVyLgotICAgICAgICAgKi8KLSAgICAgICAgZWxzZSBpZiAodGhpcy5maXJzdENoYXIgIT0gbnVsbCkgewotICAgICAgICAgICAgLy9TeXN0ZW0uZXJyLnByaW50bG4oIkRFQlVHOiB3aXRoIGZpcnN0Y2hhci1tYXRjaGluZzogIit0aGlzLmZpcnN0Q2hhcik7Ci0gICAgICAgICAgICBSYW5nZVRva2VuIHJhbmdlID0gdGhpcy5maXJzdENoYXI7Ci0gICAgICAgICAgICBpZiAodGhpcy5pc1NldCh0aGlzLm9wdGlvbnMsIElHTk9SRV9DQVNFKSkgewotICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5maXJzdENoYXIuZ2V0Q2FzZUluc2Vuc2l0aXZlVG9rZW4oKTsKLSAgICAgICAgICAgICAgICBmb3IgKG1hdGNoU3RhcnQgPSBjb24uc3RhcnQ7ICBtYXRjaFN0YXJ0IDw9IGxpbWl0OyAgbWF0Y2hTdGFydCArKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgY2ggPSAgdGFyZ2V0IFsgIG1hdGNoU3RhcnQgXSA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChSRVV0aWwuaXNIaWdoU3Vycm9nYXRlKGNoKSAmJiBtYXRjaFN0YXJ0KzEgPCBjb24ubGltaXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gUkVVdGlsLmNvbXBvc2VGcm9tU3Vycm9nYXRlcyhjaCwgIHRhcmdldCBbICBtYXRjaFN0YXJ0KzEgXSApOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyYW5nZS5tYXRjaChjaCkpICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmFuZ2UubWF0Y2goY2gpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjaDEgPSBDaGFyYWN0ZXIudG9VcHBlckNhc2UoKGNoYXIpY2gpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmFuZ2UubWF0Y2goY2gxKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyYW5nZS5tYXRjaChDaGFyYWN0ZXIudG9Mb3dlckNhc2UoY2gxKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoMCA8PSAobWF0Y2hFbmQgPSB0aGlzLiBtYXRjaENoYXJBcnJheSAoY29uLCB0aGlzLm9wZXJhdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFN0YXJ0LCAxLCB0aGlzLm9wdGlvbnMpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZm9yIChtYXRjaFN0YXJ0ID0gY29uLnN0YXJ0OyAgbWF0Y2hTdGFydCA8PSBsaW1pdDsgIG1hdGNoU3RhcnQgKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGNoID0gIHRhcmdldCBbICBtYXRjaFN0YXJ0IF0gOwotICAgICAgICAgICAgICAgICAgICBpZiAoUkVVdGlsLmlzSGlnaFN1cnJvZ2F0ZShjaCkgJiYgbWF0Y2hTdGFydCsxIDwgY29uLmxpbWl0KQotICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBSRVV0aWwuY29tcG9zZUZyb21TdXJyb2dhdGVzKGNoLCAgdGFyZ2V0IFsgIG1hdGNoU3RhcnQrMSBdICk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcmFuZ2UubWF0Y2goY2gpKSAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgwIDw9IChtYXRjaEVuZCA9IHRoaXMuIG1hdGNoQ2hhckFycmF5IChjb24sIHRoaXMub3BlcmF0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoU3RhcnQsIDEsIHRoaXMub3B0aW9ucykpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogU3RyYWlnaHRmb3J3YXJkIG1hdGNoaW5nLgotICAgICAgICAgKi8KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKG1hdGNoU3RhcnQgPSBjb24uc3RhcnQ7ICBtYXRjaFN0YXJ0IDw9IGxpbWl0OyAgbWF0Y2hTdGFydCArKykgewotICAgICAgICAgICAgICAgIGlmICgwIDw9IChtYXRjaEVuZCA9IHRoaXMuIG1hdGNoQ2hhckFycmF5IChjb24sIHRoaXMub3BlcmF0aW9ucywgbWF0Y2hTdGFydCwgMSwgdGhpcy5vcHRpb25zKSkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1hdGNoRW5kID49IDApIHsKLSAgICAgICAgICAgIGlmIChjb24ubWF0Y2ggIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGNvbi5tYXRjaC5zZXRCZWdpbm5pbmcoMCwgbWF0Y2hTdGFydCk7Ci0gICAgICAgICAgICAgICAgY29uLm1hdGNoLnNldEVuZCgwLCBtYXRjaEVuZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb24uaW51c2UgPSBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29uLmludXNlID0gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLS8qKgotICogQHJldHVybiAtMSB3aGVuIG5vdCBtYXRjaDsgb2Zmc2V0IG9mIHRoZSBlbmQgb2YgbWF0Y2hlZCBzdHJpbmcgd2hlbiBtYXRjaC4KLSAqLwotICAgIHByaXZhdGUgaW50IG1hdGNoQ2hhckFycmF5IChDb250ZXh0IGNvbiwgT3Agb3AsIGludCBvZmZzZXQsIGludCBkeCwgaW50IG9wdHMpIHsKLQotICAgICAgICBjaGFyW10gdGFyZ2V0ID0gY29uLmNoYXJUYXJnZXQ7Ci0KLQotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgaWYgKG9wID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGlzU2V0KG9wdHMsIFhNTFNDSEVNQV9NT0RFKSAmJiBvZmZzZXQgIT0gY29uLmxpbWl0ID8gLTEgOiBvZmZzZXQ7Ci0gICAgICAgICAgICBpZiAob2Zmc2V0ID4gY29uLmxpbWl0IHx8IG9mZnNldCA8IGNvbi5zdGFydCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBzd2l0Y2ggKG9wLnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgT3AuQ0hBUjoKLSAgICAgICAgICAgICAgICBpZiAoaXNTZXQob3B0cywgSUdOT1JFX0NBU0UpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBjaCA9IG9wLmdldERhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGR4ID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBjb24ubGltaXQgfHwgIW1hdGNoSWdub3JlQ2FzZShjaCwgIHRhcmdldCBbICBvZmZzZXQgXSApKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArKzsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBvMSA9IG9mZnNldC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8xID49IGNvbi5saW1pdCB8fCBvMSA8IDAgfHwgIW1hdGNoSWdub3JlQ2FzZShjaCwgIHRhcmdldCBbICBvMSBdICkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbzE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpbnQgY2ggPSBvcC5nZXREYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkeCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPj0gY29uLmxpbWl0IHx8IGNoICE9ICB0YXJnZXQgWyAgb2Zmc2V0IF0gKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArKzsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBvMSA9IG9mZnNldC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8xID49IGNvbi5saW1pdCB8fCBvMSA8IDAgfHwgY2ggIT0gIHRhcmdldCBbICBvMSBdICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBvMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvcCA9IG9wLm5leHQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgT3AuRE9UOgotICAgICAgICAgICAgICAgIGlmIChkeCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBjb24ubGltaXQpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIGludCBjaCA9ICB0YXJnZXQgWyAgb2Zmc2V0IF0gOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNTZXQob3B0cywgU0lOR0xFX0xJTkUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUkVVdGlsLmlzSGlnaFN1cnJvZ2F0ZShjaCkgJiYgb2Zmc2V0KzEgPCBjb24ubGltaXQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICsrOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJFVXRpbC5pc0hpZ2hTdXJyb2dhdGUoY2gpICYmIG9mZnNldCsxIDwgY29uLmxpbWl0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gUkVVdGlsLmNvbXBvc2VGcm9tU3Vycm9nYXRlcyhjaCwgIHRhcmdldCBbICArK29mZnNldCBdICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNFT0xDaGFyKGNoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICsrOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBvMSA9IG9mZnNldC0xOwotICAgICAgICAgICAgICAgICAgICBpZiAobzEgPj0gY29uLmxpbWl0IHx8IG8xIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGNoID0gIHRhcmdldCBbICBvMSBdIDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2V0KG9wdHMsIFNJTkdMRV9MSU5FKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJFVXRpbC5pc0xvd1N1cnJvZ2F0ZShjaCkgJiYgbzEtMSA+PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8xIC0tOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJFVXRpbC5pc0xvd1N1cnJvZ2F0ZShjaCkgJiYgbzEtMSA+PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gUkVVdGlsLmNvbXBvc2VGcm9tU3Vycm9nYXRlcyggdGFyZ2V0IFsgIC0tbzEgXSAsIGNoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFT0xDaGFyKGNoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbzE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9wID0gb3AubmV4dDsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBPcC5SQU5HRToKLSAgICAgICAgICAgIGNhc2UgT3AuTlJBTkdFOgotICAgICAgICAgICAgICAgIGlmIChkeCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBjb24ubGltaXQpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIGludCBjaCA9ICB0YXJnZXQgWyAgb2Zmc2V0IF0gOwotICAgICAgICAgICAgICAgICAgICBpZiAoUkVVdGlsLmlzSGlnaFN1cnJvZ2F0ZShjaCkgJiYgb2Zmc2V0KzEgPCBjb24ubGltaXQpCi0gICAgICAgICAgICAgICAgICAgICAgICBjaCA9IFJFVXRpbC5jb21wb3NlRnJvbVN1cnJvZ2F0ZXMoY2gsICB0YXJnZXQgWyAgKytvZmZzZXQgXSApOwotICAgICAgICAgICAgICAgICAgICBSYW5nZVRva2VuIHRvayA9IG9wLmdldFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc1NldChvcHRzLCBJR05PUkVfQ0FTRSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvayA9IHRvay5nZXRDYXNlSW5zZW5zaXRpdmVUb2tlbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2subWF0Y2goY2gpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID49IDB4MTAwMDApICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciB1Y2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2subWF0Y2godWNoID0gQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKChjaGFyKWNoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXRvay5tYXRjaChDaGFyYWN0ZXIudG9Mb3dlckNhc2UodWNoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdG9rLm1hdGNoKGNoKSkgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKys7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IG8xID0gb2Zmc2V0LTE7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvMSA+PSBjb24ubGltaXQgfHwgbzEgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICBpbnQgY2ggPSAgdGFyZ2V0IFsgIG8xIF0gOwotICAgICAgICAgICAgICAgICAgICBpZiAoUkVVdGlsLmlzTG93U3Vycm9nYXRlKGNoKSAmJiBvMS0xID49IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBjaCA9IFJFVXRpbC5jb21wb3NlRnJvbVN1cnJvZ2F0ZXMoIHRhcmdldCBbICAtLW8xIF0gLCBjaCk7Ci0gICAgICAgICAgICAgICAgICAgIFJhbmdlVG9rZW4gdG9rID0gb3AuZ2V0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2V0KG9wdHMsIElHTk9SRV9DQVNFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdG9rID0gdG9rLmdldENhc2VJbnNlbnNpdGl2ZVRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRvay5tYXRjaChjaCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPj0gMHgxMDAwMCkgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIHVjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRvay5tYXRjaCh1Y2ggPSBDaGFyYWN0ZXIudG9VcHBlckNhc2UoKGNoYXIpY2gpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhdG9rLm1hdGNoKENoYXJhY3Rlci50b0xvd2VyQ2FzZSh1Y2gpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2subWF0Y2goY2gpKSAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IG8xOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvcCA9IG9wLm5leHQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgT3AuQU5DSE9SOgotICAgICAgICAgICAgICAgIGJvb2xlYW4gZ28gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wLmdldERhdGEoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgJ14nOgotICAgICAgICAgICAgICAgICAgICBpZiAoaXNTZXQob3B0cywgTVVMVElQTEVfTElORVMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShvZmZzZXQgPT0gY29uLnN0YXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBvZmZzZXQgPiBjb24uc3RhcnQgJiYgaXNFT0xDaGFyKCB0YXJnZXQgWyAgb2Zmc2V0LTEgXSApKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ICE9IGNvbi5zdGFydCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlICdAJzogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW50ZXJuYWwgdXNlIG9ubHkuCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBAIGFsd2F5cyBtYXRjaGVzIGxpbmUgYmVnaW5uaW5ncy4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCEob2Zmc2V0ID09IGNvbi5zdGFydAotICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBvZmZzZXQgPiBjb24uc3RhcnQgJiYgaXNFT0xDaGFyKCB0YXJnZXQgWyAgb2Zmc2V0LTEgXSApKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlICckJzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2V0KG9wdHMsIE1VTFRJUExFX0xJTkVTKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEob2Zmc2V0ID09IGNvbi5saW1pdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgb2Zmc2V0IDwgY29uLmxpbWl0ICYmIGlzRU9MQ2hhciggdGFyZ2V0IFsgIG9mZnNldCBdICkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG9mZnNldCA9PSBjb24ubGltaXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG9mZnNldCsxID09IGNvbi5saW1pdCAmJiBpc0VPTENoYXIoIHRhcmdldCBbICBvZmZzZXQgXSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBvZmZzZXQrMiA9PSBjb24ubGltaXQgJiYgIHRhcmdldCBbICBvZmZzZXQgXSAgPT0gQ0FSUklBR0VfUkVUVVJOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAgdGFyZ2V0IFsgIG9mZnNldCsxIF0gID09IExJTkVfRkVFRCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSAnQSc6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gY29uLnN0YXJ0KSAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgJ1onOgotICAgICAgICAgICAgICAgICAgICBpZiAoIShvZmZzZXQgPT0gY29uLmxpbWl0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG9mZnNldCsxID09IGNvbi5saW1pdCAmJiBpc0VPTENoYXIoIHRhcmdldCBbICBvZmZzZXQgXSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG9mZnNldCsyID09IGNvbi5saW1pdCAmJiAgdGFyZ2V0IFsgIG9mZnNldCBdICA9PSBDQVJSSUFHRV9SRVRVUk4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIHRhcmdldCBbICBvZmZzZXQrMSBdICA9PSBMSU5FX0ZFRUQpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgJ3onOgotICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ICE9IGNvbi5saW1pdCkgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlICdiJzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbi5sZW5ndGggPT0gMCkgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFmdGVyID0gZ2V0V29yZFR5cGUodGFyZ2V0LCBjb24uc3RhcnQsIGNvbi5saW1pdCwgb2Zmc2V0LCBvcHRzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZnRlciA9PSBXVF9JR05PUkUpICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmVmb3JlID0gZ2V0UHJldmlvdXNXb3JkVHlwZSh0YXJnZXQsIGNvbi5zdGFydCwgY29uLmxpbWl0LCBvZmZzZXQsIG9wdHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFmdGVyID09IGJlZm9yZSkgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgJ0InOgotICAgICAgICAgICAgICAgICAgICBpZiAoY29uLmxlbmd0aCA9PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgZ28gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBhZnRlciA9IGdldFdvcmRUeXBlKHRhcmdldCwgY29uLnN0YXJ0LCBjb24ubGltaXQsIG9mZnNldCwgb3B0cyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnbyA9IGFmdGVyID09IFdUX0lHTk9SRQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBhZnRlciA9PSBnZXRQcmV2aW91c1dvcmRUeXBlKHRhcmdldCwgY29uLnN0YXJ0LCBjb24ubGltaXQsIG9mZnNldCwgb3B0cyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFnbykgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlICc8JzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbi5sZW5ndGggPT0gMCB8fCBvZmZzZXQgPT0gY29uLmxpbWl0KSAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0V29yZFR5cGUodGFyZ2V0LCBjb24uc3RhcnQsIGNvbi5saW1pdCwgb2Zmc2V0LCBvcHRzKSAhPSBXVF9MRVRURVIKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IGdldFByZXZpb3VzV29yZFR5cGUodGFyZ2V0LCBjb24uc3RhcnQsIGNvbi5saW1pdCwgb2Zmc2V0LCBvcHRzKSAhPSBXVF9PVEhFUikKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlICc+JzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbi5sZW5ndGggPT0gMCB8fCBvZmZzZXQgPT0gY29uLnN0YXJ0KSAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0V29yZFR5cGUodGFyZ2V0LCBjb24uc3RhcnQsIGNvbi5saW1pdCwgb2Zmc2V0LCBvcHRzKSAhPSBXVF9PVEhFUgotICAgICAgICAgICAgICAgICAgICAgICAgfHwgZ2V0UHJldmlvdXNXb3JkVHlwZSh0YXJnZXQsIGNvbi5zdGFydCwgY29uLmxpbWl0LCBvZmZzZXQsIG9wdHMpICE9IFdUX0xFVFRFUikKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfSAvLyBzd2l0Y2ggYW5jaG9yIHR5cGUKLSAgICAgICAgICAgICAgICBvcCA9IG9wLm5leHQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgT3AuQkFDS1JFRkVSRU5DRToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGludCByZWZubyA9IG9wLmdldERhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlZm5vIDw9IDAgfHwgcmVmbm8gPj0gdGhpcy5ub2ZwYXJlbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbnRlcm5hbCBFcnJvcjogUmVmZXJlbmNlIG51bWJlciBtdXN0IGJlIG1vcmUgdGhhbiB6ZXJvOiAiK3JlZm5vKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbi5tYXRjaC5nZXRCZWdpbm5pbmcocmVmbm8pIDwgMAotICAgICAgICAgICAgICAgICAgICAgICAgfHwgY29uLm1hdGNoLmdldEVuZChyZWZubykgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOyAgICAgICAgICAgICAgICAvLyAqKioqKioqKgotICAgICAgICAgICAgICAgICAgICBpbnQgbzIgPSBjb24ubWF0Y2guZ2V0QmVnaW5uaW5nKHJlZm5vKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGxpdGVyYWxsZW4gPSBjb24ubWF0Y2guZ2V0RW5kKHJlZm5vKS1vMjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NldChvcHRzLCBJR05PUkVfQ0FTRSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkeCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZ2lvbk1hdGNoZXModGFyZ2V0LCBvZmZzZXQsIGNvbi5saW1pdCwgbzIsIGxpdGVyYWxsZW4pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGxpdGVyYWxsZW47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVnaW9uTWF0Y2hlcyh0YXJnZXQsIG9mZnNldC1saXRlcmFsbGVuLCBjb24ubGltaXQsIG8yLCBsaXRlcmFsbGVuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCAtPSBsaXRlcmFsbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGR4ID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVnaW9uTWF0Y2hlc0lnbm9yZUNhc2UodGFyZ2V0LCBvZmZzZXQsIGNvbi5saW1pdCwgbzIsIGxpdGVyYWxsZW4pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGxpdGVyYWxsZW47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVnaW9uTWF0Y2hlc0lnbm9yZUNhc2UodGFyZ2V0LCBvZmZzZXQtbGl0ZXJhbGxlbiwgY29uLmxpbWl0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzIsIGxpdGVyYWxsZW4pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0IC09IGxpdGVyYWxsZW47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3AgPSBvcC5uZXh0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBPcC5TVFJJTkc6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbGl0ZXJhbCA9IG9wLmdldFN0cmluZygpOwotICAgICAgICAgICAgICAgICAgICBpbnQgbGl0ZXJhbGxlbiA9IGxpdGVyYWwubGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNTZXQob3B0cywgSUdOT1JFX0NBU0UpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHggPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWdpb25NYXRjaGVzKHRhcmdldCwgb2Zmc2V0LCBjb24ubGltaXQsIGxpdGVyYWwsIGxpdGVyYWxsZW4pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGxpdGVyYWxsZW47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVnaW9uTWF0Y2hlcyh0YXJnZXQsIG9mZnNldC1saXRlcmFsbGVuLCBjb24ubGltaXQsIGxpdGVyYWwsIGxpdGVyYWxsZW4pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0IC09IGxpdGVyYWxsZW47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHggPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWdpb25NYXRjaGVzSWdub3JlQ2FzZSh0YXJnZXQsIG9mZnNldCwgY29uLmxpbWl0LCBsaXRlcmFsLCBsaXRlcmFsbGVuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBsaXRlcmFsbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKHRhcmdldCwgb2Zmc2V0LWxpdGVyYWxsZW4sIGNvbi5saW1pdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdGVyYWwsIGxpdGVyYWxsZW4pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0IC09IGxpdGVyYWxsZW47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3AgPSBvcC5uZXh0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIE9wLkNMT1NVUkU6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgICAgKiBTYXZlcyBjdXJyZW50IHBvc2l0aW9uIHRvIGF2b2lkCi0gICAgICAgICAgICAgICAgICAgICAqIHplcm8td2lkdGggcmVwZWF0cy4KLSAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIGludCBpZCA9IG9wLmdldERhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlkID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmV2aW91c09mZnNldCA9IGNvbi5vZmZzZXRzW2lkXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c09mZnNldCA8IDAgfHwgcHJldmlvdXNPZmZzZXQgIT0gb2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uLm9mZnNldHNbaWRdID0gb2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb24ub2Zmc2V0c1tpZF0gPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IG9wLm5leHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gdGhpcy4gbWF0Y2hDaGFyQXJyYXkgKGNvbiwgb3AuZ2V0Q2hpbGQoKSwgb2Zmc2V0LCBkeCwgb3B0cyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpZCA+PSAwKSAgY29uLm9mZnNldHNbaWRdID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPj0gMCkgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICAgICAgICAgIG9wID0gb3AubmV4dDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgT3AuUVVFU1RJT046Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gdGhpcy4gbWF0Y2hDaGFyQXJyYXkgKGNvbiwgb3AuZ2V0Q2hpbGQoKSwgb2Zmc2V0LCBkeCwgb3B0cyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPj0gMCkgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICAgICAgICAgIG9wID0gb3AubmV4dDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgT3AuTk9OR1JFRURZQ0xPU1VSRToKLSAgICAgICAgICAgIGNhc2UgT3AuTk9OR1JFRURZUVVFU1RJT046Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gdGhpcy4gbWF0Y2hDaGFyQXJyYXkgKGNvbiwgb3AubmV4dCwgb2Zmc2V0LCBkeCwgb3B0cyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPj0gMCkgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICAgICAgICAgIG9wID0gb3AuZ2V0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgT3AuVU5JT046Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7ICBpIDwgb3Auc2l6ZSgpOyAgaSArKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gdGhpcy4gbWF0Y2hDaGFyQXJyYXkgKGNvbiwgb3AuZWxlbWVudEF0KGkpLCBvZmZzZXQsIGR4LCBvcHRzKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVOSU9OOiAiK2krIiwgcmV0PSIrcmV0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAocmV0ID49IDApICByZXR1cm4gcmV0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAgICAgICAgIGNhc2UgT3AuQ0FQVFVSRToKLSAgICAgICAgICAgICAgICBpbnQgcmVmbm8gPSBvcC5nZXREYXRhKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbi5tYXRjaCAhPSBudWxsICYmIHJlZm5vID4gMCkgewotICAgICAgICAgICAgICAgICAgICBpbnQgc2F2ZSA9IGNvbi5tYXRjaC5nZXRCZWdpbm5pbmcocmVmbm8pOwotICAgICAgICAgICAgICAgICAgICBjb24ubWF0Y2guc2V0QmVnaW5uaW5nKHJlZm5vLCBvZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gdGhpcy4gbWF0Y2hDaGFyQXJyYXkgKGNvbiwgb3AubmV4dCwgb2Zmc2V0LCBkeCwgb3B0cyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKSAgY29uLm1hdGNoLnNldEJlZ2lubmluZyhyZWZubywgc2F2ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb24ubWF0Y2ggIT0gbnVsbCAmJiByZWZubyA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4ID0gLXJlZm5vOwotICAgICAgICAgICAgICAgICAgICBpbnQgc2F2ZSA9IGNvbi5tYXRjaC5nZXRFbmQoaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBjb24ubWF0Y2guc2V0RW5kKGluZGV4LCBvZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gdGhpcy4gbWF0Y2hDaGFyQXJyYXkgKGNvbiwgb3AubmV4dCwgb2Zmc2V0LCBkeCwgb3B0cyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKSAgY29uLm1hdGNoLnNldEVuZChpbmRleCwgc2F2ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9wID0gb3AubmV4dDsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBPcC5MT09LQUhFQUQ6Ci0gICAgICAgICAgICAgICAgaWYgKDAgPiB0aGlzLiBtYXRjaENoYXJBcnJheSAoY29uLCBvcC5nZXRDaGlsZCgpLCBvZmZzZXQsIDEsIG9wdHMpKSAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgIG9wID0gb3AubmV4dDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgT3AuTkVHQVRJVkVMT09LQUhFQUQ6Ci0gICAgICAgICAgICAgICAgaWYgKDAgPD0gdGhpcy4gbWF0Y2hDaGFyQXJyYXkgKGNvbiwgb3AuZ2V0Q2hpbGQoKSwgb2Zmc2V0LCAxLCBvcHRzKSkgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICBvcCA9IG9wLm5leHQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIE9wLkxPT0tCRUhJTkQ6Ci0gICAgICAgICAgICAgICAgaWYgKDAgPiB0aGlzLiBtYXRjaENoYXJBcnJheSAoY29uLCBvcC5nZXRDaGlsZCgpLCBvZmZzZXQsIC0xLCBvcHRzKSkgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICBvcCA9IG9wLm5leHQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIE9wLk5FR0FUSVZFTE9PS0JFSElORDoKLSAgICAgICAgICAgICAgICBpZiAoMCA8PSB0aGlzLiBtYXRjaENoYXJBcnJheSAoY29uLCBvcC5nZXRDaGlsZCgpLCBvZmZzZXQsIC0xLCBvcHRzKSkgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICBvcCA9IG9wLm5leHQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgT3AuSU5ERVBFTkRFTlQ6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gdGhpcy4gbWF0Y2hDaGFyQXJyYXkgKGNvbiwgb3AuZ2V0Q2hpbGQoKSwgb2Zmc2V0LCBkeCwgb3B0cyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKSAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gcmV0OwotICAgICAgICAgICAgICAgICAgICBvcCA9IG9wLm5leHQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIE9wLk1PRElGSUVSOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGxvY2Fsb3B0cyA9IG9wdHM7Ci0gICAgICAgICAgICAgICAgICAgIGxvY2Fsb3B0cyB8PSBvcC5nZXREYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGxvY2Fsb3B0cyAmPSB+b3AuZ2V0RGF0YTIoKTsKLSAgICAgICAgICAgICAgICAgICAgLy9TeXN0ZW0uZXJyLnByaW50bG4oIk1PRElGSUVSOiAiK0ludGVnZXIudG9TdHJpbmcob3B0cywgMTYpKyIgLT4gIitJbnRlZ2VyLnRvU3RyaW5nKGxvY2Fsb3B0cywgMTYpKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IHJldCA9IHRoaXMuIG1hdGNoQ2hhckFycmF5IChjb24sIG9wLmdldENoaWxkKCksIG9mZnNldCwgZHgsIGxvY2Fsb3B0cyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKSAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gcmV0OwotICAgICAgICAgICAgICAgICAgICBvcCA9IG9wLm5leHQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIE9wLkNPTkRJVElPTjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIE9wLkNvbmRpdGlvbk9wIGNvcCA9IChPcC5Db25kaXRpb25PcClvcDsKLSAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBtYXRjaHAgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvcC5yZWZOdW1iZXIgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29wLnJlZk51bWJlciA+PSB0aGlzLm5vZnBhcmVuKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbnRlcm5hbCBFcnJvcjogUmVmZXJlbmNlIG51bWJlciBtdXN0IGJlIG1vcmUgdGhhbiB6ZXJvOiAiK2NvcC5yZWZOdW1iZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hwID0gY29uLm1hdGNoLmdldEJlZ2lubmluZyhjb3AucmVmTnVtYmVyKSA+PSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBjb24ubWF0Y2guZ2V0RW5kKGNvcC5yZWZOdW1iZXIpID49IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaHAgPSAwIDw9IHRoaXMuIG1hdGNoQ2hhckFycmF5IChjb24sIGNvcC5jb25kaXRpb24sIG9mZnNldCwgZHgsIG9wdHMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNocCkgewotICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBjb3AueWVzOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvcC5ubyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcCA9IGNvcC5ubzsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gY29wLm5leHQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVua25vd24gb3BlcmF0aW9uIHR5cGU6ICIrb3AudHlwZSk7Ci0gICAgICAgICAgICB9IC8vIHN3aXRjaCAob3AudHlwZSkKLSAgICAgICAgfSAvLyB3aGlsZQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBnZXRQcmV2aW91c1dvcmRUeXBlKGNoYXJbXSAgdGFyZ2V0LCBpbnQgYmVnaW4sIGludCBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCwgaW50IG9wdHMpIHsKLSAgICAgICAgaW50IHJldCA9IGdldFdvcmRUeXBlKHRhcmdldCwgYmVnaW4sIGVuZCwgLS1vZmZzZXQsIG9wdHMpOwotICAgICAgICB3aGlsZSAocmV0ID09IFdUX0lHTk9SRSkKLSAgICAgICAgICAgIHJldCA9IGdldFdvcmRUeXBlKHRhcmdldCwgYmVnaW4sIGVuZCwgLS1vZmZzZXQsIG9wdHMpOwotICAgICAgICByZXR1cm4gcmV0OwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBnZXRXb3JkVHlwZShjaGFyW10gIHRhcmdldCwgaW50IGJlZ2luLCBpbnQgZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0LCBpbnQgb3B0cykgewotICAgICAgICBpZiAob2Zmc2V0IDwgYmVnaW4gfHwgb2Zmc2V0ID49IGVuZCkgIHJldHVybiBXVF9PVEhFUjsKLSAgICAgICAgcmV0dXJuIGdldFdvcmRUeXBlMCggdGFyZ2V0IFsgIG9mZnNldCBdICwgb3B0cyk7Ci0gICAgfQotCi0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gcmVnaW9uTWF0Y2hlcyhjaGFyW10gIHRhcmdldCwgaW50IG9mZnNldCwgaW50IGxpbWl0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcGFydCwgaW50IHBhcnRsZW4pIHsKLSAgICAgICAgaWYgKG9mZnNldCA8IDApICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChsaW1pdC1vZmZzZXQgPCBwYXJ0bGVuKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAgIHdoaWxlIChwYXJ0bGVuLS0gPiAwKSB7Ci0gICAgICAgICAgICBpZiAoIHRhcmdldCBbICBvZmZzZXQrKyBdICAhPSBwYXJ0LmNoYXJBdChpKyspKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIHJlZ2lvbk1hdGNoZXMoY2hhcltdICB0YXJnZXQsIGludCBvZmZzZXQsIGludCBsaW1pdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldDIsIGludCBwYXJ0bGVuKSB7Ci0gICAgICAgIGlmIChvZmZzZXQgPCAwKSAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAobGltaXQtb2Zmc2V0IDwgcGFydGxlbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaW50IGkgPSBvZmZzZXQyOwotICAgICAgICB3aGlsZSAocGFydGxlbi0tID4gMCkgewotICAgICAgICAgICAgaWYgKCB0YXJnZXQgWyAgb2Zmc2V0KysgXSAgIT0gIHRhcmdldCBbICBpKysgXSApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotLyoqCi0gKiBAc2VlIGphdmEubGFuZy5TdHJpbmcjcmVnaW9uTWF0Y2hlcwotICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiByZWdpb25NYXRjaGVzSWdub3JlQ2FzZShjaGFyW10gIHRhcmdldCwgaW50IG9mZnNldCwgaW50IGxpbWl0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHBhcnQsIGludCBwYXJ0bGVuKSB7Ci0gICAgICAgIGlmIChvZmZzZXQgPCAwKSAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAobGltaXQtb2Zmc2V0IDwgcGFydGxlbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaW50IGkgPSAwOwotICAgICAgICB3aGlsZSAocGFydGxlbi0tID4gMCkgewotICAgICAgICAgICAgY2hhciBjaDEgPSAgdGFyZ2V0IFsgIG9mZnNldCsrIF0gOwotICAgICAgICAgICAgY2hhciBjaDIgPSBwYXJ0LmNoYXJBdChpKyspOwotICAgICAgICAgICAgaWYgKGNoMSA9PSBjaDIpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjaGFyIHVjaDEgPSBDaGFyYWN0ZXIudG9VcHBlckNhc2UoY2gxKTsKLSAgICAgICAgICAgIGNoYXIgdWNoMiA9IENoYXJhY3Rlci50b1VwcGVyQ2FzZShjaDIpOwotICAgICAgICAgICAgaWYgKHVjaDEgPT0gdWNoMikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChDaGFyYWN0ZXIudG9Mb3dlckNhc2UodWNoMSkgIT0gQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKHVjaDIpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIHJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKGNoYXJbXSAgdGFyZ2V0LCBpbnQgb2Zmc2V0LCBpbnQgbGltaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0MiwgaW50IHBhcnRsZW4pIHsKLSAgICAgICAgaWYgKG9mZnNldCA8IDApICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChsaW1pdC1vZmZzZXQgPCBwYXJ0bGVuKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpbnQgaSA9IG9mZnNldDI7Ci0gICAgICAgIHdoaWxlIChwYXJ0bGVuLS0gPiAwKSB7Ci0gICAgICAgICAgICBjaGFyIGNoMSA9ICB0YXJnZXQgWyAgb2Zmc2V0KysgXSA7Ci0gICAgICAgICAgICBjaGFyIGNoMiA9ICB0YXJnZXQgWyAgaSsrIF0gOwotICAgICAgICAgICAgaWYgKGNoMSA9PSBjaDIpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjaGFyIHVjaDEgPSBDaGFyYWN0ZXIudG9VcHBlckNhc2UoY2gxKTsKLSAgICAgICAgICAgIGNoYXIgdWNoMiA9IENoYXJhY3Rlci50b1VwcGVyQ2FzZShjaDIpOwotICAgICAgICAgICAgaWYgKHVjaDEgPT0gdWNoMikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChDaGFyYWN0ZXIudG9Mb3dlckNhc2UodWNoMSkgIT0gQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKHVjaDIpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLQotCi0KLSAgICAvKioKLSAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgPHZhcj50YXJnZXQ8L3Zhcj4gdGV4dCA8c3Ryb25nPmNvbnRhaW5zPC9zdHJvbmc+IHRoaXMgcGF0dGVybiBvciBub3QuCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHRhcmdldCBpcyBtYXRjaGVkIHRvIHRoaXMgcmVndWxhciBleHByZXNzaW9uLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIG1hdGNoZXMoU3RyaW5nICB0YXJnZXQpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2hlcyh0YXJnZXQsIDAsICB0YXJnZXQgLmxlbmd0aCgpICwgKE1hdGNoKW51bGwpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSA8dmFyPnRhcmdldDwvdmFyPiB0ZXh0IDxzdHJvbmc+Y29udGFpbnM8L3N0cm9uZz4gdGhpcyBwYXR0ZXJuCi0gICAgICogaW4gc3BlY2lmaWVkIHJhbmdlIG9yIG5vdC4KLSAgICAgKgotICAgICAqIEBwYXJhbSBzdGFydCBTdGFydCBvZmZzZXQgb2YgdGhlIHJhbmdlLgotICAgICAqIEBwYXJhbSBlbmQgIEVuZCBvZmZzZXQgKzEgb2YgdGhlIHJhbmdlLgotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdGFyZ2V0IGlzIG1hdGNoZWQgdG8gdGhpcyByZWd1bGFyIGV4cHJlc3Npb24uCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gbWF0Y2hlcyhTdHJpbmcgIHRhcmdldCwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLm1hdGNoZXModGFyZ2V0LCBzdGFydCwgZW5kLCAoTWF0Y2gpbnVsbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIDx2YXI+dGFyZ2V0PC92YXI+IHRleHQgPHN0cm9uZz5jb250YWluczwvc3Ryb25nPiB0aGlzIHBhdHRlcm4gb3Igbm90LgotICAgICAqCi0gICAgICogQHBhcmFtIG1hdGNoIEEgTWF0Y2ggaW5zdGFuY2UgZm9yIHN0b3JpbmcgbWF0Y2hpbmcgcmVzdWx0LgotICAgICAqIEByZXR1cm4gT2Zmc2V0IG9mIHRoZSBzdGFydCBwb3NpdGlvbiBpbiA8VkFSPnRhcmdldDwvVkFSPjsgb3IgLTEgaWYgbm90IG1hdGNoLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIG1hdGNoZXMoU3RyaW5nICB0YXJnZXQsIE1hdGNoIG1hdGNoKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLm1hdGNoZXModGFyZ2V0LCAwLCAgdGFyZ2V0IC5sZW5ndGgoKSAsIG1hdGNoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDaGVja3Mgd2hldGhlciB0aGUgPHZhcj50YXJnZXQ8L3Zhcj4gdGV4dCA8c3Ryb25nPmNvbnRhaW5zPC9zdHJvbmc+IHRoaXMgcGF0dGVybgotICAgICAqIGluIHNwZWNpZmllZCByYW5nZSBvciBub3QuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc3RhcnQgU3RhcnQgb2Zmc2V0IG9mIHRoZSByYW5nZS4KLSAgICAgKiBAcGFyYW0gZW5kICBFbmQgb2Zmc2V0ICsxIG9mIHRoZSByYW5nZS4KLSAgICAgKiBAcGFyYW0gbWF0Y2ggQSBNYXRjaCBpbnN0YW5jZSBmb3Igc3RvcmluZyBtYXRjaGluZyByZXN1bHQuCi0gICAgICogQHJldHVybiBPZmZzZXQgb2YgdGhlIHN0YXJ0IHBvc2l0aW9uIGluIDxWQVI+dGFyZ2V0PC9WQVI+OyBvciAtMSBpZiBub3QgbWF0Y2guCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gbWF0Y2hlcyhTdHJpbmcgIHRhcmdldCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBNYXRjaCBtYXRjaCkgewotCi0gICAgICAgIHN5bmNocm9uaXplZCAodGhpcykgewotICAgICAgICAgICAgaWYgKHRoaXMub3BlcmF0aW9ucyA9PSBudWxsKQotICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZSgpOwotICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dCA9PSBudWxsKQotICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IG5ldyBDb250ZXh0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgQ29udGV4dCBjb24gPSBudWxsOwotICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMuY29udGV4dCkgewotICAgICAgICAgICAgY29uID0gdGhpcy5jb250ZXh0LmludXNlID8gbmV3IENvbnRleHQoKSA6IHRoaXMuY29udGV4dDsKLSAgICAgICAgICAgIGNvbi5yZXNldCh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXMubnVtYmVyT2ZDbG9zdXJlcyk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1hdGNoICE9IG51bGwpIHsKLSAgICAgICAgICAgIG1hdGNoLnNldE51bWJlck9mR3JvdXBzKHRoaXMubm9mcGFyZW4pOwotICAgICAgICAgICAgbWF0Y2guc2V0U291cmNlKHRhcmdldCk7Ci0gICAgICAgIH0gZWxzZSBpZiAodGhpcy5oYXNCYWNrUmVmZXJlbmNlcykgewotICAgICAgICAgICAgbWF0Y2ggPSBuZXcgTWF0Y2goKTsKLSAgICAgICAgICAgIG1hdGNoLnNldE51bWJlck9mR3JvdXBzKHRoaXMubm9mcGFyZW4pOwotICAgICAgICAgICAgLy8gTmVlZCBub3QgdG8gY2FsbCBzZXRTb3VyY2UoKSBiZWNhdXNlCi0gICAgICAgICAgICAvLyBhIGNhbGxlciBjYW4gbm90IGFjY2VzcyB0aGlzIG1hdGNoIGluc3RhbmNlLgotICAgICAgICB9Ci0gICAgICAgIGNvbi5tYXRjaCA9IG1hdGNoOwotCi0gICAgICAgIGlmICh0aGlzLmlzU2V0KHRoaXMub3B0aW9ucywgWE1MU0NIRU1BX01PREUpKSB7Ci0gICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oInRhcmdldCBzdHJpbmc9Iit0YXJnZXQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IG1hdGNoRW5kID0gdGhpcy4gbWF0Y2hTdHJpbmcgKGNvbiwgdGhpcy5vcGVyYXRpb25zLCBjb24uc3RhcnQsIDEsIHRoaXMub3B0aW9ucyk7Ci0gICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIm1hdGNoRW5kPSIrbWF0Y2hFbmQpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiY29uLmxpbWl0PSIrY29uLmxpbWl0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtYXRjaEVuZCA9PSBjb24ubGltaXQpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29uLm1hdGNoICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uLm1hdGNoLnNldEJlZ2lubmluZygwLCBjb24uc3RhcnQpOwotICAgICAgICAgICAgICAgICAgICBjb24ubWF0Y2guc2V0RW5kKDAsIG1hdGNoRW5kKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29uLmludXNlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBUaGUgcGF0dGVybiBoYXMgb25seSBmaXhlZCBzdHJpbmcuCi0gICAgICAgICAqIFRoZSBlbmdpbmUgdXNlcyBCb3llci1Nb29yZS4KLSAgICAgICAgICovCi0gICAgICAgIGlmICh0aGlzLmZpeGVkU3RyaW5nT25seSkgewotICAgICAgICAgICAgLy9TeXN0ZW0uZXJyLnByaW50bG4oIkRFQlVHOiBmaXhlZC1vbmx5OiAiK3RoaXMuZml4ZWRTdHJpbmcpOwotICAgICAgICAgICAgaW50IG8gPSB0aGlzLmZpeGVkU3RyaW5nVGFibGUubWF0Y2hlcyh0YXJnZXQsIGNvbi5zdGFydCwgY29uLmxpbWl0KTsKLSAgICAgICAgICAgIGlmIChvID49IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoY29uLm1hdGNoICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uLm1hdGNoLnNldEJlZ2lubmluZygwLCBvKTsKLSAgICAgICAgICAgICAgICAgICAgY29uLm1hdGNoLnNldEVuZCgwLCBvK3RoaXMuZml4ZWRTdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb24uaW51c2UgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbi5pbnVzZSA9IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogVGhlIHBhdHRlcm4gY29udGFpbnMgYSBmaXhlZCBzdHJpbmcuCi0gICAgICAgICAqIFRoZSBlbmdpbmUgY2hlY2tzIHdpdGggQm95ZXItTW9vcmUgd2hldGhlciB0aGUgdGV4dCBjb250YWlucyB0aGUgZml4ZWQgc3RyaW5nIG9yIG5vdC4KLSAgICAgICAgICogSWYgbm90LCBpdCByZXR1cm4gd2l0aCBmYWxzZS4KLSAgICAgICAgICovCi0gICAgICAgIGlmICh0aGlzLmZpeGVkU3RyaW5nICE9IG51bGwpIHsKLSAgICAgICAgICAgIGludCBvID0gdGhpcy5maXhlZFN0cmluZ1RhYmxlLm1hdGNoZXModGFyZ2V0LCBjb24uc3RhcnQsIGNvbi5saW1pdCk7Ci0gICAgICAgICAgICBpZiAobyA8IDApIHsKLSAgICAgICAgICAgICAgICAvL1N5c3RlbS5lcnIucHJpbnRsbigiTm9uLW1hdGNoIGluIGZpeGVkLXN0cmluZyBzZWFyY2guIik7Ci0gICAgICAgICAgICAgICAgY29uLmludXNlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGxpbWl0ID0gY29uLmxpbWl0LXRoaXMubWlubGVuZ3RoOwotICAgICAgICBpbnQgbWF0Y2hTdGFydDsKLSAgICAgICAgaW50IG1hdGNoRW5kID0gLTE7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGV4cHJlc3Npb24gc3RhcnRzIHdpdGggIi4qIi4KLSAgICAgICAgICovCi0gICAgICAgIGlmICh0aGlzLm9wZXJhdGlvbnMgIT0gbnVsbAotICAgICAgICAgICAgJiYgdGhpcy5vcGVyYXRpb25zLnR5cGUgPT0gT3AuQ0xPU1VSRSAmJiB0aGlzLm9wZXJhdGlvbnMuZ2V0Q2hpbGQoKS50eXBlID09IE9wLkRPVCkgewotICAgICAgICAgICAgaWYgKGlzU2V0KHRoaXMub3B0aW9ucywgU0lOR0xFX0xJTkUpKSB7Ci0gICAgICAgICAgICAgICAgbWF0Y2hTdGFydCA9IGNvbi5zdGFydDsKLSAgICAgICAgICAgICAgICBtYXRjaEVuZCA9IHRoaXMuIG1hdGNoU3RyaW5nIChjb24sIHRoaXMub3BlcmF0aW9ucywgY29uLnN0YXJ0LCAxLCB0aGlzLm9wdGlvbnMpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBib29sZWFuIHByZXZpb3VzSXNFT0wgPSB0cnVlOwotICAgICAgICAgICAgICAgIGZvciAobWF0Y2hTdGFydCA9IGNvbi5zdGFydDsgIG1hdGNoU3RhcnQgPD0gbGltaXQ7ICBtYXRjaFN0YXJ0ICsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBjaCA9ICB0YXJnZXQgLmNoYXJBdCggIG1hdGNoU3RhcnQgKSA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc0VPTENoYXIoY2gpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0lzRU9MID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0lzRU9MKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPD0gKG1hdGNoRW5kID0gdGhpcy4gbWF0Y2hTdHJpbmcgKGNvbiwgdGhpcy5vcGVyYXRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFN0YXJ0LCAxLCB0aGlzLm9wdGlvbnMpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0lzRU9MID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBPcHRpbWl6YXRpb24gYWdhaW5zdCB0aGUgZmlyc3QgY2hhcmFjdGVyLgotICAgICAgICAgKi8KLSAgICAgICAgZWxzZSBpZiAodGhpcy5maXJzdENoYXIgIT0gbnVsbCkgewotICAgICAgICAgICAgLy9TeXN0ZW0uZXJyLnByaW50bG4oIkRFQlVHOiB3aXRoIGZpcnN0Y2hhci1tYXRjaGluZzogIit0aGlzLmZpcnN0Q2hhcik7Ci0gICAgICAgICAgICBSYW5nZVRva2VuIHJhbmdlID0gdGhpcy5maXJzdENoYXI7Ci0gICAgICAgICAgICBpZiAodGhpcy5pc1NldCh0aGlzLm9wdGlvbnMsIElHTk9SRV9DQVNFKSkgewotICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5maXJzdENoYXIuZ2V0Q2FzZUluc2Vuc2l0aXZlVG9rZW4oKTsKLSAgICAgICAgICAgICAgICBmb3IgKG1hdGNoU3RhcnQgPSBjb24uc3RhcnQ7ICBtYXRjaFN0YXJ0IDw9IGxpbWl0OyAgbWF0Y2hTdGFydCArKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgY2ggPSAgdGFyZ2V0IC5jaGFyQXQoICBtYXRjaFN0YXJ0ICkgOwotICAgICAgICAgICAgICAgICAgICBpZiAoUkVVdGlsLmlzSGlnaFN1cnJvZ2F0ZShjaCkgJiYgbWF0Y2hTdGFydCsxIDwgY29uLmxpbWl0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaCA9IFJFVXRpbC5jb21wb3NlRnJvbVN1cnJvZ2F0ZXMoY2gsICB0YXJnZXQgLmNoYXJBdCggIG1hdGNoU3RhcnQrMSApICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJhbmdlLm1hdGNoKGNoKSkgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyYW5nZS5tYXRjaChjaCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNoMSA9IENoYXJhY3Rlci50b1VwcGVyQ2FzZSgoY2hhciljaCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyYW5nZS5tYXRjaChjaDEpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJhbmdlLm1hdGNoKENoYXJhY3Rlci50b0xvd2VyQ2FzZShjaDEpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICgwIDw9IChtYXRjaEVuZCA9IHRoaXMuIG1hdGNoU3RyaW5nIChjb24sIHRoaXMub3BlcmF0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoU3RhcnQsIDEsIHRoaXMub3B0aW9ucykpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBmb3IgKG1hdGNoU3RhcnQgPSBjb24uc3RhcnQ7ICBtYXRjaFN0YXJ0IDw9IGxpbWl0OyAgbWF0Y2hTdGFydCArKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgY2ggPSAgdGFyZ2V0IC5jaGFyQXQoICBtYXRjaFN0YXJ0ICkgOwotICAgICAgICAgICAgICAgICAgICBpZiAoUkVVdGlsLmlzSGlnaFN1cnJvZ2F0ZShjaCkgJiYgbWF0Y2hTdGFydCsxIDwgY29uLmxpbWl0KQotICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBSRVV0aWwuY29tcG9zZUZyb21TdXJyb2dhdGVzKGNoLCAgdGFyZ2V0IC5jaGFyQXQoICBtYXRjaFN0YXJ0KzEgKSApOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXJhbmdlLm1hdGNoKGNoKSkgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAoMCA8PSAobWF0Y2hFbmQgPSB0aGlzLiBtYXRjaFN0cmluZyAoY29uLCB0aGlzLm9wZXJhdGlvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFN0YXJ0LCAxLCB0aGlzLm9wdGlvbnMpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFN0cmFpZ2h0Zm9yd2FyZCBtYXRjaGluZy4KLSAgICAgICAgICovCi0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZm9yIChtYXRjaFN0YXJ0ID0gY29uLnN0YXJ0OyAgbWF0Y2hTdGFydCA8PSBsaW1pdDsgIG1hdGNoU3RhcnQgKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoMCA8PSAobWF0Y2hFbmQgPSB0aGlzLiBtYXRjaFN0cmluZyAoY29uLCB0aGlzLm9wZXJhdGlvbnMsIG1hdGNoU3RhcnQsIDEsIHRoaXMub3B0aW9ucykpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtYXRjaEVuZCA+PSAwKSB7Ci0gICAgICAgICAgICBpZiAoY29uLm1hdGNoICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBjb24ubWF0Y2guc2V0QmVnaW5uaW5nKDAsIG1hdGNoU3RhcnQpOwotICAgICAgICAgICAgICAgIGNvbi5tYXRjaC5zZXRFbmQoMCwgbWF0Y2hFbmQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29uLmludXNlID0gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbi5pbnVzZSA9IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHJldHVybiAtMSB3aGVuIG5vdCBtYXRjaDsgb2Zmc2V0IG9mIHRoZSBlbmQgb2YgbWF0Y2hlZCBzdHJpbmcgd2hlbiBtYXRjaC4KLSAgICAgKi8KLSAgICBwcml2YXRlIGludCBtYXRjaFN0cmluZyAoQ29udGV4dCBjb24sIE9wIG9wLCBpbnQgb2Zmc2V0LCBpbnQgZHgsIGludCBvcHRzKSB7Ci0KLQotCi0KLSAgICAgICAgU3RyaW5nIHRhcmdldCA9IGNvbi5zdHJUYXJnZXQ7Ci0KLQotCi0KLSAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgIGlmIChvcCA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBpc1NldChvcHRzLCBYTUxTQ0hFTUFfTU9ERSkgJiYgb2Zmc2V0ICE9IGNvbi5saW1pdCA/IC0xIDogb2Zmc2V0OwotICAgICAgICAgICAgaWYgKG9mZnNldCA+IGNvbi5saW1pdCB8fCBvZmZzZXQgPCBjb24uc3RhcnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgc3dpdGNoIChvcC50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIE9wLkNIQVI6Ci0gICAgICAgICAgICAgICAgaWYgKGlzU2V0KG9wdHMsIElHTk9SRV9DQVNFKSkgewotICAgICAgICAgICAgICAgICAgICBpbnQgY2ggPSBvcC5nZXREYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkeCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPj0gY29uLmxpbWl0IHx8ICFtYXRjaElnbm9yZUNhc2UoY2gsICB0YXJnZXQgLmNoYXJBdCggIG9mZnNldCApICkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICsrOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG8xID0gb2Zmc2V0LTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobzEgPj0gY29uLmxpbWl0IHx8IG8xIDwgMCB8fCAhbWF0Y2hJZ25vcmVDYXNlKGNoLCAgdGFyZ2V0IC5jaGFyQXQoICBvMSApICkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbzE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpbnQgY2ggPSBvcC5nZXREYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkeCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPj0gY29uLmxpbWl0IHx8IGNoICE9ICB0YXJnZXQgLmNoYXJBdCggIG9mZnNldCApICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKys7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgbzEgPSBvZmZzZXQtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvMSA+PSBjb24ubGltaXQgfHwgbzEgPCAwIHx8IGNoICE9ICB0YXJnZXQgLmNoYXJBdCggIG8xICkgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IG8xOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9wID0gb3AubmV4dDsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBPcC5ET1Q6Ci0gICAgICAgICAgICAgICAgaWYgKGR4ID4gMCkgewotICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ID49IGNvbi5saW1pdCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGNoID0gIHRhcmdldCAuY2hhckF0KCAgb2Zmc2V0ICkgOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNTZXQob3B0cywgU0lOR0xFX0xJTkUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUkVVdGlsLmlzSGlnaFN1cnJvZ2F0ZShjaCkgJiYgb2Zmc2V0KzEgPCBjb24ubGltaXQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICsrOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJFVXRpbC5pc0hpZ2hTdXJyb2dhdGUoY2gpICYmIG9mZnNldCsxIDwgY29uLmxpbWl0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gUkVVdGlsLmNvbXBvc2VGcm9tU3Vycm9nYXRlcyhjaCwgIHRhcmdldCAuY2hhckF0KCAgKytvZmZzZXQgKSApOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRU9MQ2hhcihjaCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG9mZnNldCArKzsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpbnQgbzEgPSBvZmZzZXQtMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG8xID49IGNvbi5saW1pdCB8fCBvMSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIGludCBjaCA9ICB0YXJnZXQgLmNoYXJBdCggIG8xICkgOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNTZXQob3B0cywgU0lOR0xFX0xJTkUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUkVVdGlsLmlzTG93U3Vycm9nYXRlKGNoKSAmJiBvMS0xID49IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbzEgLS07Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUkVVdGlsLmlzTG93U3Vycm9nYXRlKGNoKSAmJiBvMS0xID49IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBSRVV0aWwuY29tcG9zZUZyb21TdXJyb2dhdGVzKCB0YXJnZXQgLmNoYXJBdCggIC0tbzEgKSAsIGNoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFT0xDaGFyKGNoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbzE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9wID0gb3AubmV4dDsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBPcC5SQU5HRToKLSAgICAgICAgICAgIGNhc2UgT3AuTlJBTkdFOgotICAgICAgICAgICAgICAgIGlmIChkeCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBjb24ubGltaXQpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIGludCBjaCA9ICB0YXJnZXQgLmNoYXJBdCggIG9mZnNldCApIDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFJFVXRpbC5pc0hpZ2hTdXJyb2dhdGUoY2gpICYmIG9mZnNldCsxIDwgY29uLmxpbWl0KQotICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBSRVV0aWwuY29tcG9zZUZyb21TdXJyb2dhdGVzKGNoLCAgdGFyZ2V0IC5jaGFyQXQoICArK29mZnNldCApICk7Ci0gICAgICAgICAgICAgICAgICAgIFJhbmdlVG9rZW4gdG9rID0gb3AuZ2V0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2V0KG9wdHMsIElHTk9SRV9DQVNFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdG9rID0gdG9rLmdldENhc2VJbnNlbnNpdGl2ZVRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRvay5tYXRjaChjaCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPj0gMHgxMDAwMCkgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIHVjaDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRvay5tYXRjaCh1Y2ggPSBDaGFyYWN0ZXIudG9VcHBlckNhc2UoKGNoYXIpY2gpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhdG9rLm1hdGNoKENoYXJhY3Rlci50b0xvd2VyQ2FzZSh1Y2gpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2subWF0Y2goY2gpKSAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG9mZnNldCArKzsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpbnQgbzEgPSBvZmZzZXQtMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG8xID49IGNvbi5saW1pdCB8fCBvMSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIGludCBjaCA9ICB0YXJnZXQgLmNoYXJBdCggIG8xICkgOwotICAgICAgICAgICAgICAgICAgICBpZiAoUkVVdGlsLmlzTG93U3Vycm9nYXRlKGNoKSAmJiBvMS0xID49IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBjaCA9IFJFVXRpbC5jb21wb3NlRnJvbVN1cnJvZ2F0ZXMoIHRhcmdldCAuY2hhckF0KCAgLS1vMSApICwgY2gpOwotICAgICAgICAgICAgICAgICAgICBSYW5nZVRva2VuIHRvayA9IG9wLmdldFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc1NldChvcHRzLCBJR05PUkVfQ0FTRSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvayA9IHRvay5nZXRDYXNlSW5zZW5zaXRpdmVUb2tlbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2subWF0Y2goY2gpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID49IDB4MTAwMDApICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciB1Y2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2subWF0Y2godWNoID0gQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKChjaGFyKWNoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXRvay5tYXRjaChDaGFyYWN0ZXIudG9Mb3dlckNhc2UodWNoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdG9rLm1hdGNoKGNoKSkgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBvMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3AgPSBvcC5uZXh0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIE9wLkFOQ0hPUjoKLSAgICAgICAgICAgICAgICBib29sZWFuIGdvID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChvcC5nZXREYXRhKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlICdeJzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2V0KG9wdHMsIE1VTFRJUExFX0xJTkVTKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEob2Zmc2V0ID09IGNvbi5zdGFydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgb2Zmc2V0ID4gY29uLnN0YXJ0ICYmIGlzRU9MQ2hhciggdGFyZ2V0IC5jaGFyQXQoICBvZmZzZXQtMSApICkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gY29uLnN0YXJ0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgJ0AnOiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRlcm5hbCB1c2Ugb25seS4KLSAgICAgICAgICAgICAgICAgICAgLy8gVGhlIEAgYWx3YXlzIG1hdGNoZXMgbGluZSBiZWdpbm5pbmdzLgotICAgICAgICAgICAgICAgICAgICBpZiAoIShvZmZzZXQgPT0gY29uLnN0YXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG9mZnNldCA+IGNvbi5zdGFydCAmJiBpc0VPTENoYXIoIHRhcmdldCAuY2hhckF0KCAgb2Zmc2V0LTEgKSApKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlICckJzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2V0KG9wdHMsIE1VTFRJUExFX0xJTkVTKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEob2Zmc2V0ID09IGNvbi5saW1pdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgb2Zmc2V0IDwgY29uLmxpbWl0ICYmIGlzRU9MQ2hhciggdGFyZ2V0IC5jaGFyQXQoICBvZmZzZXQgKSApKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShvZmZzZXQgPT0gY29uLmxpbWl0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBvZmZzZXQrMSA9PSBjb24ubGltaXQgJiYgaXNFT0xDaGFyKCB0YXJnZXQgLmNoYXJBdCggIG9mZnNldCApICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG9mZnNldCsyID09IGNvbi5saW1pdCAmJiAgdGFyZ2V0IC5jaGFyQXQoICBvZmZzZXQgKSAgPT0gQ0FSUklBR0VfUkVUVVJOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAgdGFyZ2V0IC5jaGFyQXQoICBvZmZzZXQrMSApICA9PSBMSU5FX0ZFRUQpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgJ0EnOgotICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ICE9IGNvbi5zdGFydCkgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlICdaJzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEob2Zmc2V0ID09IGNvbi5saW1pdAotICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBvZmZzZXQrMSA9PSBjb24ubGltaXQgJiYgaXNFT0xDaGFyKCB0YXJnZXQgLmNoYXJBdCggIG9mZnNldCApICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgb2Zmc2V0KzIgPT0gY29uLmxpbWl0ICYmICB0YXJnZXQgLmNoYXJBdCggIG9mZnNldCApICA9PSBDQVJSSUFHRV9SRVRVUk4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIHRhcmdldCAuY2hhckF0KCAgb2Zmc2V0KzEgKSAgPT0gTElORV9GRUVEKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlICd6JzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCAhPSBjb24ubGltaXQpICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSAnYic6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb24ubGVuZ3RoID09IDApICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBhZnRlciA9IGdldFdvcmRUeXBlKHRhcmdldCwgY29uLnN0YXJ0LCBjb24ubGltaXQsIG9mZnNldCwgb3B0cyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWZ0ZXIgPT0gV1RfSUdOT1JFKSAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJlZm9yZSA9IGdldFByZXZpb3VzV29yZFR5cGUodGFyZ2V0LCBjb24uc3RhcnQsIGNvbi5saW1pdCwgb2Zmc2V0LCBvcHRzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZnRlciA9PSBiZWZvcmUpICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlICdCJzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbi5sZW5ndGggPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWZ0ZXIgPSBnZXRXb3JkVHlwZSh0YXJnZXQsIGNvbi5zdGFydCwgY29uLmxpbWl0LCBvZmZzZXQsIG9wdHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ28gPSBhZnRlciA9PSBXVF9JR05PUkUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYWZ0ZXIgPT0gZ2V0UHJldmlvdXNXb3JkVHlwZSh0YXJnZXQsIGNvbi5zdGFydCwgY29uLmxpbWl0LCBvZmZzZXQsIG9wdHMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZ28pICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSAnPCc6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb24ubGVuZ3RoID09IDAgfHwgb2Zmc2V0ID09IGNvbi5saW1pdCkgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGdldFdvcmRUeXBlKHRhcmdldCwgY29uLnN0YXJ0LCBjb24ubGltaXQsIG9mZnNldCwgb3B0cykgIT0gV1RfTEVUVEVSCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBnZXRQcmV2aW91c1dvcmRUeXBlKHRhcmdldCwgY29uLnN0YXJ0LCBjb24ubGltaXQsIG9mZnNldCwgb3B0cykgIT0gV1RfT1RIRVIpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSAnPic6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb24ubGVuZ3RoID09IDAgfHwgb2Zmc2V0ID09IGNvbi5zdGFydCkgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGdldFdvcmRUeXBlKHRhcmdldCwgY29uLnN0YXJ0LCBjb24ubGltaXQsIG9mZnNldCwgb3B0cykgIT0gV1RfT1RIRVIKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IGdldFByZXZpb3VzV29yZFR5cGUodGFyZ2V0LCBjb24uc3RhcnQsIGNvbi5saW1pdCwgb2Zmc2V0LCBvcHRzKSAhPSBXVF9MRVRURVIpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0gLy8gc3dpdGNoIGFuY2hvciB0eXBlCi0gICAgICAgICAgICAgICAgb3AgPSBvcC5uZXh0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIE9wLkJBQ0tSRUZFUkVOQ0U6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbnQgcmVmbm8gPSBvcC5nZXREYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZWZubyA8PSAwIHx8IHJlZm5vID49IHRoaXMubm9mcGFyZW4pCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW50ZXJuYWwgRXJyb3I6IFJlZmVyZW5jZSBudW1iZXIgbXVzdCBiZSBtb3JlIHRoYW4gemVybzogIityZWZubyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb24ubWF0Y2guZ2V0QmVnaW5uaW5nKHJlZm5vKSA8IDAKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNvbi5tYXRjaC5nZXRFbmQocmVmbm8pIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsgICAgICAgICAgICAgICAgLy8gKioqKioqKioKLSAgICAgICAgICAgICAgICAgICAgaW50IG8yID0gY29uLm1hdGNoLmdldEJlZ2lubmluZyhyZWZubyk7Ci0gICAgICAgICAgICAgICAgICAgIGludCBsaXRlcmFsbGVuID0gY29uLm1hdGNoLmdldEVuZChyZWZubyktbzI7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNTZXQob3B0cywgSUdOT1JFX0NBU0UpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHggPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWdpb25NYXRjaGVzKHRhcmdldCwgb2Zmc2V0LCBjb24ubGltaXQsIG8yLCBsaXRlcmFsbGVuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBsaXRlcmFsbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZ2lvbk1hdGNoZXModGFyZ2V0LCBvZmZzZXQtbGl0ZXJhbGxlbiwgY29uLmxpbWl0LCBvMiwgbGl0ZXJhbGxlbikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgLT0gbGl0ZXJhbGxlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkeCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKHRhcmdldCwgb2Zmc2V0LCBjb24ubGltaXQsIG8yLCBsaXRlcmFsbGVuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBsaXRlcmFsbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKHRhcmdldCwgb2Zmc2V0LWxpdGVyYWxsZW4sIGNvbi5saW1pdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8yLCBsaXRlcmFsbGVuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCAtPSBsaXRlcmFsbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9wID0gb3AubmV4dDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgT3AuU1RSSU5HOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxpdGVyYWwgPSBvcC5nZXRTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGxpdGVyYWxsZW4gPSBsaXRlcmFsLmxlbmd0aCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU2V0KG9wdHMsIElHTk9SRV9DQVNFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGR4ID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVnaW9uTWF0Y2hlcyh0YXJnZXQsIG9mZnNldCwgY29uLmxpbWl0LCBsaXRlcmFsLCBsaXRlcmFsbGVuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBsaXRlcmFsbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZ2lvbk1hdGNoZXModGFyZ2V0LCBvZmZzZXQtbGl0ZXJhbGxlbiwgY29uLmxpbWl0LCBsaXRlcmFsLCBsaXRlcmFsbGVuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCAtPSBsaXRlcmFsbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGR4ID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVnaW9uTWF0Y2hlc0lnbm9yZUNhc2UodGFyZ2V0LCBvZmZzZXQsIGNvbi5saW1pdCwgbGl0ZXJhbCwgbGl0ZXJhbGxlbikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gbGl0ZXJhbGxlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWdpb25NYXRjaGVzSWdub3JlQ2FzZSh0YXJnZXQsIG9mZnNldC1saXRlcmFsbGVuLCBjb24ubGltaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXRlcmFsLCBsaXRlcmFsbGVuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCAtPSBsaXRlcmFsbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9wID0gb3AubmV4dDsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBPcC5DTE9TVVJFOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAgICogU2F2ZXMgY3VycmVudCBwb3NpdGlvbiB0byBhdm9pZAotICAgICAgICAgICAgICAgICAgICAgKiB6ZXJvLXdpZHRoIHJlcGVhdHMuCi0gICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICBpbnQgaWQgPSBvcC5nZXREYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpZCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJldmlvdXNPZmZzZXQgPSBjb24ub2Zmc2V0c1tpZF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNPZmZzZXQgPCAwIHx8IHByZXZpb3VzT2Zmc2V0ICE9IG9mZnNldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbi5vZmZzZXRzW2lkXSA9IG9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uLm9mZnNldHNbaWRdID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBvcC5uZXh0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGludCByZXQgPSB0aGlzLiBtYXRjaFN0cmluZyAoY29uLCBvcC5nZXRDaGlsZCgpLCBvZmZzZXQsIGR4LCBvcHRzKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlkID49IDApICBjb24ub2Zmc2V0c1tpZF0gPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA+PSAwKSAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgICAgICAgICAgb3AgPSBvcC5uZXh0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBPcC5RVUVTVElPTjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGludCByZXQgPSB0aGlzLiBtYXRjaFN0cmluZyAoY29uLCBvcC5nZXRDaGlsZCgpLCBvZmZzZXQsIGR4LCBvcHRzKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA+PSAwKSAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgICAgICAgICAgb3AgPSBvcC5uZXh0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBPcC5OT05HUkVFRFlDTE9TVVJFOgotICAgICAgICAgICAgY2FzZSBPcC5OT05HUkVFRFlRVUVTVElPTjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGludCByZXQgPSB0aGlzLiBtYXRjaFN0cmluZyAoY29uLCBvcC5uZXh0LCBvZmZzZXQsIGR4LCBvcHRzKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA+PSAwKSAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgICAgICAgICAgb3AgPSBvcC5nZXRDaGlsZCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBPcC5VTklPTjoKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgIGkgPCBvcC5zaXplKCk7ICBpICsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCByZXQgPSB0aGlzLiBtYXRjaFN0cmluZyAoY29uLCBvcC5lbGVtZW50QXQoaSksIG9mZnNldCwgZHgsIG9wdHMpOwotICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVU5JT046ICIraSsiLCByZXQ9IityZXQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPj0gMCkgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLQotICAgICAgICAgICAgY2FzZSBPcC5DQVBUVVJFOgotICAgICAgICAgICAgICAgIGludCByZWZubyA9IG9wLmdldERhdGEoKTsKLSAgICAgICAgICAgICAgICBpZiAoY29uLm1hdGNoICE9IG51bGwgJiYgcmVmbm8gPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBzYXZlID0gY29uLm1hdGNoLmdldEJlZ2lubmluZyhyZWZubyk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbi5tYXRjaC5zZXRCZWdpbm5pbmcocmVmbm8sIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgIGludCByZXQgPSB0aGlzLiBtYXRjaFN0cmluZyAoY29uLCBvcC5uZXh0LCBvZmZzZXQsIGR4LCBvcHRzKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApICBjb24ubWF0Y2guc2V0QmVnaW5uaW5nKHJlZm5vLCBzYXZlKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbi5tYXRjaCAhPSBudWxsICYmIHJlZm5vIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSAtcmVmbm87Ci0gICAgICAgICAgICAgICAgICAgIGludCBzYXZlID0gY29uLm1hdGNoLmdldEVuZChpbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbi5tYXRjaC5zZXRFbmQoaW5kZXgsIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgIGludCByZXQgPSB0aGlzLiBtYXRjaFN0cmluZyAoY29uLCBvcC5uZXh0LCBvZmZzZXQsIGR4LCBvcHRzKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApICBjb24ubWF0Y2guc2V0RW5kKGluZGV4LCBzYXZlKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3AgPSBvcC5uZXh0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIE9wLkxPT0tBSEVBRDoKLSAgICAgICAgICAgICAgICBpZiAoMCA+IHRoaXMuIG1hdGNoU3RyaW5nIChjb24sIG9wLmdldENoaWxkKCksIG9mZnNldCwgMSwgb3B0cykpICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgb3AgPSBvcC5uZXh0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBPcC5ORUdBVElWRUxPT0tBSEVBRDoKLSAgICAgICAgICAgICAgICBpZiAoMCA8PSB0aGlzLiBtYXRjaFN0cmluZyAoY29uLCBvcC5nZXRDaGlsZCgpLCBvZmZzZXQsIDEsIG9wdHMpKSAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgIG9wID0gb3AubmV4dDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgT3AuTE9PS0JFSElORDoKLSAgICAgICAgICAgICAgICBpZiAoMCA+IHRoaXMuIG1hdGNoU3RyaW5nIChjb24sIG9wLmdldENoaWxkKCksIG9mZnNldCwgLTEsIG9wdHMpKSAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgIG9wID0gb3AubmV4dDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgT3AuTkVHQVRJVkVMT09LQkVISU5EOgotICAgICAgICAgICAgICAgIGlmICgwIDw9IHRoaXMuIG1hdGNoU3RyaW5nIChjb24sIG9wLmdldENoaWxkKCksIG9mZnNldCwgLTEsIG9wdHMpKSAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgIG9wID0gb3AubmV4dDsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBPcC5JTkRFUEVOREVOVDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGludCByZXQgPSB0aGlzLiBtYXRjaFN0cmluZyAoY29uLCBvcC5nZXRDaGlsZCgpLCBvZmZzZXQsIGR4LCBvcHRzKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApICByZXR1cm4gcmV0OwotICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSByZXQ7Ci0gICAgICAgICAgICAgICAgICAgIG9wID0gb3AubmV4dDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgT3AuTU9ESUZJRVI6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbnQgbG9jYWxvcHRzID0gb3B0czsKLSAgICAgICAgICAgICAgICAgICAgbG9jYWxvcHRzIHw9IG9wLmdldERhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgbG9jYWxvcHRzICY9IH5vcC5nZXREYXRhMigpOwotICAgICAgICAgICAgICAgICAgICAvL1N5c3RlbS5lcnIucHJpbnRsbigiTU9ESUZJRVI6ICIrSW50ZWdlci50b1N0cmluZyhvcHRzLCAxNikrIiAtPiAiK0ludGVnZXIudG9TdHJpbmcobG9jYWxvcHRzLCAxNikpOwotICAgICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gdGhpcy4gbWF0Y2hTdHJpbmcgKGNvbiwgb3AuZ2V0Q2hpbGQoKSwgb2Zmc2V0LCBkeCwgbG9jYWxvcHRzKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApICByZXR1cm4gcmV0OwotICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSByZXQ7Ci0gICAgICAgICAgICAgICAgICAgIG9wID0gb3AubmV4dDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgT3AuQ09ORElUSU9OOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgT3AuQ29uZGl0aW9uT3AgY29wID0gKE9wLkNvbmRpdGlvbk9wKW9wOwotICAgICAgICAgICAgICAgICAgICBib29sZWFuIG1hdGNocCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBpZiAoY29wLnJlZk51bWJlciA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3AucmVmTnVtYmVyID49IHRoaXMubm9mcGFyZW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkludGVybmFsIEVycm9yOiBSZWZlcmVuY2UgbnVtYmVyIG11c3QgYmUgbW9yZSB0aGFuIHplcm86ICIrY29wLnJlZk51bWJlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaHAgPSBjb24ubWF0Y2guZ2V0QmVnaW5uaW5nKGNvcC5yZWZOdW1iZXIpID49IDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGNvbi5tYXRjaC5nZXRFbmQoY29wLnJlZk51bWJlcikgPj0gMDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNocCA9IDAgPD0gdGhpcy4gbWF0Y2hTdHJpbmcgKGNvbiwgY29wLmNvbmRpdGlvbiwgb2Zmc2V0LCBkeCwgb3B0cyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcCA9IGNvcC55ZXM7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29wLm5vICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gY29wLm5vOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBjb3AubmV4dDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5rbm93biBvcGVyYXRpb24gdHlwZTogIitvcC50eXBlKTsKLSAgICAgICAgICAgIH0gLy8gc3dpdGNoIChvcC50eXBlKQotICAgICAgICB9IC8vIHdoaWxlCi0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGdldFByZXZpb3VzV29yZFR5cGUoU3RyaW5nICB0YXJnZXQsIGludCBiZWdpbiwgaW50IGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0LCBpbnQgb3B0cykgewotICAgICAgICBpbnQgcmV0ID0gZ2V0V29yZFR5cGUodGFyZ2V0LCBiZWdpbiwgZW5kLCAtLW9mZnNldCwgb3B0cyk7Ci0gICAgICAgIHdoaWxlIChyZXQgPT0gV1RfSUdOT1JFKQotICAgICAgICAgICAgcmV0ID0gZ2V0V29yZFR5cGUodGFyZ2V0LCBiZWdpbiwgZW5kLCAtLW9mZnNldCwgb3B0cyk7Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGdldFdvcmRUeXBlKFN0cmluZyAgdGFyZ2V0LCBpbnQgYmVnaW4sIGludCBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQsIGludCBvcHRzKSB7Ci0gICAgICAgIGlmIChvZmZzZXQgPCBiZWdpbiB8fCBvZmZzZXQgPj0gZW5kKSAgcmV0dXJuIFdUX09USEVSOwotICAgICAgICByZXR1cm4gZ2V0V29yZFR5cGUwKCB0YXJnZXQgLmNoYXJBdCggIG9mZnNldCApICwgb3B0cyk7Ci0gICAgfQotCi0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIHJlZ2lvbk1hdGNoZXMoU3RyaW5nIHRleHQsIGludCBvZmZzZXQsIGludCBsaW1pdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHBhcnQsIGludCBwYXJ0bGVuKSB7Ci0gICAgICAgIGlmIChsaW1pdC1vZmZzZXQgPCBwYXJ0bGVuKSAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gdGV4dC5yZWdpb25NYXRjaGVzKG9mZnNldCwgcGFydCwgMCwgcGFydGxlbik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiByZWdpb25NYXRjaGVzKFN0cmluZyB0ZXh0LCBpbnQgb2Zmc2V0LCBpbnQgbGltaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQyLCBpbnQgcGFydGxlbikgewotICAgICAgICBpZiAobGltaXQtb2Zmc2V0IDwgcGFydGxlbikgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHRleHQucmVnaW9uTWF0Y2hlcyhvZmZzZXQsIHRleHQsIG9mZnNldDIsIHBhcnRsZW4pOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gcmVnaW9uTWF0Y2hlc0lnbm9yZUNhc2UoU3RyaW5nIHRleHQsIGludCBvZmZzZXQsIGludCBsaW1pdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwYXJ0LCBpbnQgcGFydGxlbikgewotICAgICAgICByZXR1cm4gdGV4dC5yZWdpb25NYXRjaGVzKHRydWUsIG9mZnNldCwgcGFydCwgMCwgcGFydGxlbik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiByZWdpb25NYXRjaGVzSWdub3JlQ2FzZShTdHJpbmcgdGV4dCwgaW50IG9mZnNldCwgaW50IGxpbWl0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldDIsIGludCBwYXJ0bGVuKSB7Ci0gICAgICAgIGlmIChsaW1pdC1vZmZzZXQgPCBwYXJ0bGVuKSAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gdGV4dC5yZWdpb25NYXRjaGVzKHRydWUsIG9mZnNldCwgdGV4dCwgb2Zmc2V0MiwgcGFydGxlbik7Ci0gICAgfQotCi0KLQotCi0KLQotCi0gICAgLyoqCi0gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIDx2YXI+dGFyZ2V0PC92YXI+IHRleHQgPHN0cm9uZz5jb250YWluczwvc3Ryb25nPiB0aGlzIHBhdHRlcm4gb3Igbm90LgotICAgICAqCi0gICAgICogQHJldHVybiB0cnVlIGlmIHRoZSB0YXJnZXQgaXMgbWF0Y2hlZCB0byB0aGlzIHJlZ3VsYXIgZXhwcmVzc2lvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBtYXRjaGVzKENoYXJhY3Rlckl0ZXJhdG9yIHRhcmdldCkgewotICAgICAgICByZXR1cm4gdGhpcy5tYXRjaGVzKHRhcmdldCwgKE1hdGNoKW51bGwpOwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIDx2YXI+dGFyZ2V0PC92YXI+IHRleHQgPHN0cm9uZz5jb250YWluczwvc3Ryb25nPiB0aGlzIHBhdHRlcm4gb3Igbm90LgotICAgICAqCi0gICAgICogQHBhcmFtIG1hdGNoIEEgTWF0Y2ggaW5zdGFuY2UgZm9yIHN0b3JpbmcgbWF0Y2hpbmcgcmVzdWx0LgotICAgICAqIEByZXR1cm4gT2Zmc2V0IG9mIHRoZSBzdGFydCBwb3NpdGlvbiBpbiA8VkFSPnRhcmdldDwvVkFSPjsgb3IgLTEgaWYgbm90IG1hdGNoLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIG1hdGNoZXMoQ2hhcmFjdGVySXRlcmF0b3IgIHRhcmdldCwgTWF0Y2ggbWF0Y2gpIHsKLSAgICAgICAgaW50IHN0YXJ0ID0gdGFyZ2V0LmdldEJlZ2luSW5kZXgoKTsKLSAgICAgICAgaW50IGVuZCA9IHRhcmdldC5nZXRFbmRJbmRleCgpOwotCi0KLQotICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLm9wZXJhdGlvbnMgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmUoKTsKLSAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBuZXcgQ29udGV4dCgpOwotICAgICAgICB9Ci0gICAgICAgIENvbnRleHQgY29uID0gbnVsbDsKLSAgICAgICAgc3luY2hyb25pemVkICh0aGlzLmNvbnRleHQpIHsKLSAgICAgICAgICAgIGNvbiA9IHRoaXMuY29udGV4dC5pbnVzZSA/IG5ldyBDb250ZXh0KCkgOiB0aGlzLmNvbnRleHQ7Ci0gICAgICAgICAgICBjb24ucmVzZXQodGFyZ2V0LCBzdGFydCwgZW5kLCB0aGlzLm51bWJlck9mQ2xvc3VyZXMpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtYXRjaCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBtYXRjaC5zZXROdW1iZXJPZkdyb3Vwcyh0aGlzLm5vZnBhcmVuKTsKLSAgICAgICAgICAgIG1hdGNoLnNldFNvdXJjZSh0YXJnZXQpOwotICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaGFzQmFja1JlZmVyZW5jZXMpIHsKLSAgICAgICAgICAgIG1hdGNoID0gbmV3IE1hdGNoKCk7Ci0gICAgICAgICAgICBtYXRjaC5zZXROdW1iZXJPZkdyb3Vwcyh0aGlzLm5vZnBhcmVuKTsKLSAgICAgICAgICAgIC8vIE5lZWQgbm90IHRvIGNhbGwgc2V0U291cmNlKCkgYmVjYXVzZQotICAgICAgICAgICAgLy8gYSBjYWxsZXIgY2FuIG5vdCBhY2Nlc3MgdGhpcyBtYXRjaCBpbnN0YW5jZS4KLSAgICAgICAgfQotICAgICAgICBjb24ubWF0Y2ggPSBtYXRjaDsKLQotICAgICAgICBpZiAodGhpcy5pc1NldCh0aGlzLm9wdGlvbnMsIFhNTFNDSEVNQV9NT0RFKSkgewotICAgICAgICAgICAgaW50IG1hdGNoRW5kID0gdGhpcy4gbWF0Y2hDaGFyYWN0ZXJJdGVyYXRvciAoY29uLCB0aGlzLm9wZXJhdGlvbnMsIGNvbi5zdGFydCwgMSwgdGhpcy5vcHRpb25zKTsKLSAgICAgICAgICAgIC8vU3lzdGVtLmVyci5wcmludGxuKCJERUJVRzogbWF0Y2hFbmQ9IittYXRjaEVuZCk7Ci0gICAgICAgICAgICBpZiAobWF0Y2hFbmQgPT0gY29uLmxpbWl0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbi5tYXRjaCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbi5tYXRjaC5zZXRCZWdpbm5pbmcoMCwgY29uLnN0YXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgY29uLm1hdGNoLnNldEVuZCgwLCBtYXRjaEVuZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbi5pbnVzZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogVGhlIHBhdHRlcm4gaGFzIG9ubHkgZml4ZWQgc3RyaW5nLgotICAgICAgICAgKiBUaGUgZW5naW5lIHVzZXMgQm95ZXItTW9vcmUuCi0gICAgICAgICAqLwotICAgICAgICBpZiAodGhpcy5maXhlZFN0cmluZ09ubHkpIHsKLSAgICAgICAgICAgIC8vU3lzdGVtLmVyci5wcmludGxuKCJERUJVRzogZml4ZWQtb25seTogIit0aGlzLmZpeGVkU3RyaW5nKTsKLSAgICAgICAgICAgIGludCBvID0gdGhpcy5maXhlZFN0cmluZ1RhYmxlLm1hdGNoZXModGFyZ2V0LCBjb24uc3RhcnQsIGNvbi5saW1pdCk7Ci0gICAgICAgICAgICBpZiAobyA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbi5tYXRjaCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbi5tYXRjaC5zZXRCZWdpbm5pbmcoMCwgbyk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbi5tYXRjaC5zZXRFbmQoMCwgbyt0aGlzLmZpeGVkU3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29uLmludXNlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb24uaW51c2UgPSBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFRoZSBwYXR0ZXJuIGNvbnRhaW5zIGEgZml4ZWQgc3RyaW5nLgotICAgICAgICAgKiBUaGUgZW5naW5lIGNoZWNrcyB3aXRoIEJveWVyLU1vb3JlIHdoZXRoZXIgdGhlIHRleHQgY29udGFpbnMgdGhlIGZpeGVkIHN0cmluZyBvciBub3QuCi0gICAgICAgICAqIElmIG5vdCwgaXQgcmV0dXJuIHdpdGggZmFsc2UuCi0gICAgICAgICAqLwotICAgICAgICBpZiAodGhpcy5maXhlZFN0cmluZyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpbnQgbyA9IHRoaXMuZml4ZWRTdHJpbmdUYWJsZS5tYXRjaGVzKHRhcmdldCwgY29uLnN0YXJ0LCBjb24ubGltaXQpOwotICAgICAgICAgICAgaWYgKG8gPCAwKSB7Ci0gICAgICAgICAgICAgICAgLy9TeXN0ZW0uZXJyLnByaW50bG4oIk5vbi1tYXRjaCBpbiBmaXhlZC1zdHJpbmcgc2VhcmNoLiIpOwotICAgICAgICAgICAgICAgIGNvbi5pbnVzZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGludCBsaW1pdCA9IGNvbi5saW1pdC10aGlzLm1pbmxlbmd0aDsKLSAgICAgICAgaW50IG1hdGNoU3RhcnQ7Ci0gICAgICAgIGludCBtYXRjaEVuZCA9IC0xOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIENoZWNrcyB3aGV0aGVyIHRoZSBleHByZXNzaW9uIHN0YXJ0cyB3aXRoICIuKiIuCi0gICAgICAgICAqLwotICAgICAgICBpZiAodGhpcy5vcGVyYXRpb25zICE9IG51bGwKLSAgICAgICAgICAgICYmIHRoaXMub3BlcmF0aW9ucy50eXBlID09IE9wLkNMT1NVUkUgJiYgdGhpcy5vcGVyYXRpb25zLmdldENoaWxkKCkudHlwZSA9PSBPcC5ET1QpIHsKLSAgICAgICAgICAgIGlmIChpc1NldCh0aGlzLm9wdGlvbnMsIFNJTkdMRV9MSU5FKSkgewotICAgICAgICAgICAgICAgIG1hdGNoU3RhcnQgPSBjb24uc3RhcnQ7Ci0gICAgICAgICAgICAgICAgbWF0Y2hFbmQgPSB0aGlzLiBtYXRjaENoYXJhY3Rlckl0ZXJhdG9yIChjb24sIHRoaXMub3BlcmF0aW9ucywgY29uLnN0YXJ0LCAxLCB0aGlzLm9wdGlvbnMpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBib29sZWFuIHByZXZpb3VzSXNFT0wgPSB0cnVlOwotICAgICAgICAgICAgICAgIGZvciAobWF0Y2hTdGFydCA9IGNvbi5zdGFydDsgIG1hdGNoU3RhcnQgPD0gbGltaXQ7ICBtYXRjaFN0YXJ0ICsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBjaCA9ICB0YXJnZXQgLnNldEluZGV4KCAgbWF0Y2hTdGFydCApIDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzRU9MQ2hhcihjaCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzSXNFT0wgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzSXNFT0wpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA8PSAobWF0Y2hFbmQgPSB0aGlzLiBtYXRjaENoYXJhY3Rlckl0ZXJhdG9yIChjb24sIHRoaXMub3BlcmF0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFN0YXJ0LCAxLCB0aGlzLm9wdGlvbnMpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0lzRU9MID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBPcHRpbWl6YXRpb24gYWdhaW5zdCB0aGUgZmlyc3QgY2hhcmFjdGVyLgotICAgICAgICAgKi8KLSAgICAgICAgZWxzZSBpZiAodGhpcy5maXJzdENoYXIgIT0gbnVsbCkgewotICAgICAgICAgICAgLy9TeXN0ZW0uZXJyLnByaW50bG4oIkRFQlVHOiB3aXRoIGZpcnN0Y2hhci1tYXRjaGluZzogIit0aGlzLmZpcnN0Q2hhcik7Ci0gICAgICAgICAgICBSYW5nZVRva2VuIHJhbmdlID0gdGhpcy5maXJzdENoYXI7Ci0gICAgICAgICAgICBpZiAodGhpcy5pc1NldCh0aGlzLm9wdGlvbnMsIElHTk9SRV9DQVNFKSkgewotICAgICAgICAgICAgICAgIHJhbmdlID0gdGhpcy5maXJzdENoYXIuZ2V0Q2FzZUluc2Vuc2l0aXZlVG9rZW4oKTsKLSAgICAgICAgICAgICAgICBmb3IgKG1hdGNoU3RhcnQgPSBjb24uc3RhcnQ7ICBtYXRjaFN0YXJ0IDw9IGxpbWl0OyAgbWF0Y2hTdGFydCArKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgY2ggPSAgdGFyZ2V0IC5zZXRJbmRleCggIG1hdGNoU3RhcnQgKSA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChSRVV0aWwuaXNIaWdoU3Vycm9nYXRlKGNoKSAmJiBtYXRjaFN0YXJ0KzEgPCBjb24ubGltaXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gUkVVdGlsLmNvbXBvc2VGcm9tU3Vycm9nYXRlcyhjaCwgIHRhcmdldCAuc2V0SW5kZXgoICBtYXRjaFN0YXJ0KzEgKSApOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyYW5nZS5tYXRjaChjaCkpICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmFuZ2UubWF0Y2goY2gpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjaDEgPSBDaGFyYWN0ZXIudG9VcHBlckNhc2UoKGNoYXIpY2gpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmFuZ2UubWF0Y2goY2gxKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyYW5nZS5tYXRjaChDaGFyYWN0ZXIudG9Mb3dlckNhc2UoY2gxKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoMCA8PSAobWF0Y2hFbmQgPSB0aGlzLiBtYXRjaENoYXJhY3Rlckl0ZXJhdG9yIChjb24sIHRoaXMub3BlcmF0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hTdGFydCwgMSwgdGhpcy5vcHRpb25zKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZvciAobWF0Y2hTdGFydCA9IGNvbi5zdGFydDsgIG1hdGNoU3RhcnQgPD0gbGltaXQ7ICBtYXRjaFN0YXJ0ICsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBjaCA9ICB0YXJnZXQgLnNldEluZGV4KCAgbWF0Y2hTdGFydCApIDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFJFVXRpbC5pc0hpZ2hTdXJyb2dhdGUoY2gpICYmIG1hdGNoU3RhcnQrMSA8IGNvbi5saW1pdCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gUkVVdGlsLmNvbXBvc2VGcm9tU3Vycm9nYXRlcyhjaCwgIHRhcmdldCAuc2V0SW5kZXgoICBtYXRjaFN0YXJ0KzEgKSApOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXJhbmdlLm1hdGNoKGNoKSkgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBpZiAoMCA8PSAobWF0Y2hFbmQgPSB0aGlzLiBtYXRjaENoYXJhY3Rlckl0ZXJhdG9yIChjb24sIHRoaXMub3BlcmF0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hTdGFydCwgMSwgdGhpcy5vcHRpb25zKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBTdHJhaWdodGZvcndhcmQgbWF0Y2hpbmcuCi0gICAgICAgICAqLwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGZvciAobWF0Y2hTdGFydCA9IGNvbi5zdGFydDsgIG1hdGNoU3RhcnQgPD0gbGltaXQ7ICBtYXRjaFN0YXJ0ICsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKDAgPD0gKG1hdGNoRW5kID0gdGhpcy4gbWF0Y2hDaGFyYWN0ZXJJdGVyYXRvciAoY29uLCB0aGlzLm9wZXJhdGlvbnMsIG1hdGNoU3RhcnQsIDEsIHRoaXMub3B0aW9ucykpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtYXRjaEVuZCA+PSAwKSB7Ci0gICAgICAgICAgICBpZiAoY29uLm1hdGNoICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBjb24ubWF0Y2guc2V0QmVnaW5uaW5nKDAsIG1hdGNoU3RhcnQpOwotICAgICAgICAgICAgICAgIGNvbi5tYXRjaC5zZXRFbmQoMCwgbWF0Y2hFbmQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29uLmludXNlID0gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbi5pbnVzZSA9IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHJldHVybiAtMSB3aGVuIG5vdCBtYXRjaDsgb2Zmc2V0IG9mIHRoZSBlbmQgb2YgbWF0Y2hlZCBzdHJpbmcgd2hlbiBtYXRjaC4KLSAgICAgKi8KLSAgICBwcml2YXRlIGludCBtYXRjaENoYXJhY3Rlckl0ZXJhdG9yIChDb250ZXh0IGNvbiwgT3Agb3AsIGludCBvZmZzZXQsIGludCBkeCwgaW50IG9wdHMpIHsKLQotCi0gICAgICAgIENoYXJhY3Rlckl0ZXJhdG9yIHRhcmdldCA9IGNvbi5jaVRhcmdldDsKLQotCi0KLQotCi0KLSAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgIGlmIChvcCA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBpc1NldChvcHRzLCBYTUxTQ0hFTUFfTU9ERSkgJiYgb2Zmc2V0ICE9IGNvbi5saW1pdCA/IC0xIDogb2Zmc2V0OwotICAgICAgICAgICAgaWYgKG9mZnNldCA+IGNvbi5saW1pdCB8fCBvZmZzZXQgPCBjb24uc3RhcnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgc3dpdGNoIChvcC50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIE9wLkNIQVI6Ci0gICAgICAgICAgICAgICAgaWYgKGlzU2V0KG9wdHMsIElHTk9SRV9DQVNFKSkgewotICAgICAgICAgICAgICAgICAgICBpbnQgY2ggPSBvcC5nZXREYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkeCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPj0gY29uLmxpbWl0IHx8ICFtYXRjaElnbm9yZUNhc2UoY2gsICB0YXJnZXQgLnNldEluZGV4KCAgb2Zmc2V0ICkgKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKys7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgbzEgPSBvZmZzZXQtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvMSA+PSBjb24ubGltaXQgfHwgbzEgPCAwIHx8ICFtYXRjaElnbm9yZUNhc2UoY2gsICB0YXJnZXQgLnNldEluZGV4KCAgbzEgKSApKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IG8xOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGNoID0gb3AuZ2V0RGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZHggPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ID49IGNvbi5saW1pdCB8fCBjaCAhPSAgdGFyZ2V0IC5zZXRJbmRleCggIG9mZnNldCApICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKys7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgbzEgPSBvZmZzZXQtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvMSA+PSBjb24ubGltaXQgfHwgbzEgPCAwIHx8IGNoICE9ICB0YXJnZXQgLnNldEluZGV4KCAgbzEgKSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbzE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3AgPSBvcC5uZXh0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIE9wLkRPVDoKLSAgICAgICAgICAgICAgICBpZiAoZHggPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPj0gY29uLmxpbWl0KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICBpbnQgY2ggPSAgdGFyZ2V0IC5zZXRJbmRleCggIG9mZnNldCApIDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2V0KG9wdHMsIFNJTkdMRV9MSU5FKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJFVXRpbC5pc0hpZ2hTdXJyb2dhdGUoY2gpICYmIG9mZnNldCsxIDwgY29uLmxpbWl0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArKzsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSRVV0aWwuaXNIaWdoU3Vycm9nYXRlKGNoKSAmJiBvZmZzZXQrMSA8IGNvbi5saW1pdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IFJFVXRpbC5jb21wb3NlRnJvbVN1cnJvZ2F0ZXMoY2gsICB0YXJnZXQgLnNldEluZGV4KCAgKytvZmZzZXQgKSApOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRU9MQ2hhcihjaCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG9mZnNldCArKzsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpbnQgbzEgPSBvZmZzZXQtMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG8xID49IGNvbi5saW1pdCB8fCBvMSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIGludCBjaCA9ICB0YXJnZXQgLnNldEluZGV4KCAgbzEgKSA7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc1NldChvcHRzLCBTSU5HTEVfTElORSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSRVV0aWwuaXNMb3dTdXJyb2dhdGUoY2gpICYmIG8xLTEgPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvMSAtLTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSRVV0aWwuaXNMb3dTdXJyb2dhdGUoY2gpICYmIG8xLTEgPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IFJFVXRpbC5jb21wb3NlRnJvbVN1cnJvZ2F0ZXMoIHRhcmdldCAuc2V0SW5kZXgoICAtLW8xICkgLCBjaCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRU9MQ2hhcihjaCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IG8xOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvcCA9IG9wLm5leHQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgT3AuUkFOR0U6Ci0gICAgICAgICAgICBjYXNlIE9wLk5SQU5HRToKLSAgICAgICAgICAgICAgICBpZiAoZHggPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPj0gY29uLmxpbWl0KQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICBpbnQgY2ggPSAgdGFyZ2V0IC5zZXRJbmRleCggIG9mZnNldCApIDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFJFVXRpbC5pc0hpZ2hTdXJyb2dhdGUoY2gpICYmIG9mZnNldCsxIDwgY29uLmxpbWl0KQotICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBSRVV0aWwuY29tcG9zZUZyb21TdXJyb2dhdGVzKGNoLCAgdGFyZ2V0IC5zZXRJbmRleCggICsrb2Zmc2V0ICkgKTsKLSAgICAgICAgICAgICAgICAgICAgUmFuZ2VUb2tlbiB0b2sgPSBvcC5nZXRUb2tlbigpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNTZXQob3B0cywgSUdOT1JFX0NBU0UpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0b2sgPSB0b2suZ2V0Q2FzZUluc2Vuc2l0aXZlVG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdG9rLm1hdGNoKGNoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA+PSAweDEwMDAwKSAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgdWNoOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdG9rLm1hdGNoKHVjaCA9IENoYXJhY3Rlci50b1VwcGVyQ2FzZSgoY2hhciljaCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICF0b2subWF0Y2goQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKHVjaCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRvay5tYXRjaChjaCkpICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICsrOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBvMSA9IG9mZnNldC0xOwotICAgICAgICAgICAgICAgICAgICBpZiAobzEgPj0gY29uLmxpbWl0IHx8IG8xIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGNoID0gIHRhcmdldCAuc2V0SW5kZXgoICBvMSApIDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFJFVXRpbC5pc0xvd1N1cnJvZ2F0ZShjaCkgJiYgbzEtMSA+PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBSRVV0aWwuY29tcG9zZUZyb21TdXJyb2dhdGVzKCB0YXJnZXQgLnNldEluZGV4KCAgLS1vMSApICwgY2gpOwotICAgICAgICAgICAgICAgICAgICBSYW5nZVRva2VuIHRvayA9IG9wLmdldFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc1NldChvcHRzLCBJR05PUkVfQ0FTRSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRvayA9IHRvay5nZXRDYXNlSW5zZW5zaXRpdmVUb2tlbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2subWF0Y2goY2gpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID49IDB4MTAwMDApICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciB1Y2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2subWF0Y2godWNoID0gQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKChjaGFyKWNoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXRvay5tYXRjaChDaGFyYWN0ZXIudG9Mb3dlckNhc2UodWNoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdG9rLm1hdGNoKGNoKSkgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBvMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb3AgPSBvcC5uZXh0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIE9wLkFOQ0hPUjoKLSAgICAgICAgICAgICAgICBib29sZWFuIGdvID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChvcC5nZXREYXRhKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlICdeJzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2V0KG9wdHMsIE1VTFRJUExFX0xJTkVTKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEob2Zmc2V0ID09IGNvbi5zdGFydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgb2Zmc2V0ID4gY29uLnN0YXJ0ICYmIGlzRU9MQ2hhciggdGFyZ2V0IC5zZXRJbmRleCggIG9mZnNldC0xICkgKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCAhPSBjb24uc3RhcnQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSAnQCc6ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEludGVybmFsIHVzZSBvbmx5LgotICAgICAgICAgICAgICAgICAgICAvLyBUaGUgQCBhbHdheXMgbWF0Y2hlcyBsaW5lIGJlZ2lubmluZ3MuCi0gICAgICAgICAgICAgICAgICAgIGlmICghKG9mZnNldCA9PSBjb24uc3RhcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgb2Zmc2V0ID4gY29uLnN0YXJ0ICYmIGlzRU9MQ2hhciggdGFyZ2V0IC5zZXRJbmRleCggIG9mZnNldC0xICkgKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSAnJCc6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc1NldChvcHRzLCBNVUxUSVBMRV9MSU5FUykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG9mZnNldCA9PSBjb24ubGltaXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IG9mZnNldCA8IGNvbi5saW1pdCAmJiBpc0VPTENoYXIoIHRhcmdldCAuc2V0SW5kZXgoICBvZmZzZXQgKSApKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShvZmZzZXQgPT0gY29uLmxpbWl0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBvZmZzZXQrMSA9PSBjb24ubGltaXQgJiYgaXNFT0xDaGFyKCB0YXJnZXQgLnNldEluZGV4KCAgb2Zmc2V0ICkgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgb2Zmc2V0KzIgPT0gY29uLmxpbWl0ICYmICB0YXJnZXQgLnNldEluZGV4KCAgb2Zmc2V0ICkgID09IENBUlJJQUdFX1JFVFVSTgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIHRhcmdldCAuc2V0SW5kZXgoICBvZmZzZXQrMSApICA9PSBMSU5FX0ZFRUQpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgJ0EnOgotICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ICE9IGNvbi5zdGFydCkgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlICdaJzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEob2Zmc2V0ID09IGNvbi5saW1pdAotICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBvZmZzZXQrMSA9PSBjb24ubGltaXQgJiYgaXNFT0xDaGFyKCB0YXJnZXQgLnNldEluZGV4KCAgb2Zmc2V0ICkgKQotICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBvZmZzZXQrMiA9PSBjb24ubGltaXQgJiYgIHRhcmdldCAuc2V0SW5kZXgoICBvZmZzZXQgKSAgPT0gQ0FSUklBR0VfUkVUVVJOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICYmICB0YXJnZXQgLnNldEluZGV4KCAgb2Zmc2V0KzEgKSAgPT0gTElORV9GRUVEKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlICd6JzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCAhPSBjb24ubGltaXQpICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSAnYic6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb24ubGVuZ3RoID09IDApICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBhZnRlciA9IGdldFdvcmRUeXBlKHRhcmdldCwgY29uLnN0YXJ0LCBjb24ubGltaXQsIG9mZnNldCwgb3B0cyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWZ0ZXIgPT0gV1RfSUdOT1JFKSAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJlZm9yZSA9IGdldFByZXZpb3VzV29yZFR5cGUodGFyZ2V0LCBjb24uc3RhcnQsIGNvbi5saW1pdCwgb2Zmc2V0LCBvcHRzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZnRlciA9PSBiZWZvcmUpICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlICdCJzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbi5sZW5ndGggPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWZ0ZXIgPSBnZXRXb3JkVHlwZSh0YXJnZXQsIGNvbi5zdGFydCwgY29uLmxpbWl0LCBvZmZzZXQsIG9wdHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ28gPSBhZnRlciA9PSBXVF9JR05PUkUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYWZ0ZXIgPT0gZ2V0UHJldmlvdXNXb3JkVHlwZSh0YXJnZXQsIGNvbi5zdGFydCwgY29uLmxpbWl0LCBvZmZzZXQsIG9wdHMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZ28pICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSAnPCc6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb24ubGVuZ3RoID09IDAgfHwgb2Zmc2V0ID09IGNvbi5saW1pdCkgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGdldFdvcmRUeXBlKHRhcmdldCwgY29uLnN0YXJ0LCBjb24ubGltaXQsIG9mZnNldCwgb3B0cykgIT0gV1RfTEVUVEVSCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBnZXRQcmV2aW91c1dvcmRUeXBlKHRhcmdldCwgY29uLnN0YXJ0LCBjb24ubGltaXQsIG9mZnNldCwgb3B0cykgIT0gV1RfT1RIRVIpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSAnPic6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb24ubGVuZ3RoID09IDAgfHwgb2Zmc2V0ID09IGNvbi5zdGFydCkgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGdldFdvcmRUeXBlKHRhcmdldCwgY29uLnN0YXJ0LCBjb24ubGltaXQsIG9mZnNldCwgb3B0cykgIT0gV1RfT1RIRVIKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IGdldFByZXZpb3VzV29yZFR5cGUodGFyZ2V0LCBjb24uc3RhcnQsIGNvbi5saW1pdCwgb2Zmc2V0LCBvcHRzKSAhPSBXVF9MRVRURVIpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0gLy8gc3dpdGNoIGFuY2hvciB0eXBlCi0gICAgICAgICAgICAgICAgb3AgPSBvcC5uZXh0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIE9wLkJBQ0tSRUZFUkVOQ0U6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbnQgcmVmbm8gPSBvcC5nZXREYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZWZubyA8PSAwIHx8IHJlZm5vID49IHRoaXMubm9mcGFyZW4pCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW50ZXJuYWwgRXJyb3I6IFJlZmVyZW5jZSBudW1iZXIgbXVzdCBiZSBtb3JlIHRoYW4gemVybzogIityZWZubyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb24ubWF0Y2guZ2V0QmVnaW5uaW5nKHJlZm5vKSA8IDAKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNvbi5tYXRjaC5nZXRFbmQocmVmbm8pIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsgICAgICAgICAgICAgICAgLy8gKioqKioqKioKLSAgICAgICAgICAgICAgICAgICAgaW50IG8yID0gY29uLm1hdGNoLmdldEJlZ2lubmluZyhyZWZubyk7Ci0gICAgICAgICAgICAgICAgICAgIGludCBsaXRlcmFsbGVuID0gY29uLm1hdGNoLmdldEVuZChyZWZubyktbzI7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNTZXQob3B0cywgSUdOT1JFX0NBU0UpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHggPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWdpb25NYXRjaGVzKHRhcmdldCwgb2Zmc2V0LCBjb24ubGltaXQsIG8yLCBsaXRlcmFsbGVuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBsaXRlcmFsbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZ2lvbk1hdGNoZXModGFyZ2V0LCBvZmZzZXQtbGl0ZXJhbGxlbiwgY29uLmxpbWl0LCBvMiwgbGl0ZXJhbGxlbikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgLT0gbGl0ZXJhbGxlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkeCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKHRhcmdldCwgb2Zmc2V0LCBjb24ubGltaXQsIG8yLCBsaXRlcmFsbGVuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBsaXRlcmFsbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKHRhcmdldCwgb2Zmc2V0LWxpdGVyYWxsZW4sIGNvbi5saW1pdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8yLCBsaXRlcmFsbGVuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCAtPSBsaXRlcmFsbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9wID0gb3AubmV4dDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgT3AuU1RSSU5HOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxpdGVyYWwgPSBvcC5nZXRTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGxpdGVyYWxsZW4gPSBsaXRlcmFsLmxlbmd0aCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU2V0KG9wdHMsIElHTk9SRV9DQVNFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGR4ID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVnaW9uTWF0Y2hlcyh0YXJnZXQsIG9mZnNldCwgY29uLmxpbWl0LCBsaXRlcmFsLCBsaXRlcmFsbGVuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBsaXRlcmFsbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZ2lvbk1hdGNoZXModGFyZ2V0LCBvZmZzZXQtbGl0ZXJhbGxlbiwgY29uLmxpbWl0LCBsaXRlcmFsLCBsaXRlcmFsbGVuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCAtPSBsaXRlcmFsbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGR4ID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVnaW9uTWF0Y2hlc0lnbm9yZUNhc2UodGFyZ2V0LCBvZmZzZXQsIGNvbi5saW1pdCwgbGl0ZXJhbCwgbGl0ZXJhbGxlbikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gbGl0ZXJhbGxlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWdpb25NYXRjaGVzSWdub3JlQ2FzZSh0YXJnZXQsIG9mZnNldC1saXRlcmFsbGVuLCBjb24ubGltaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXRlcmFsLCBsaXRlcmFsbGVuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCAtPSBsaXRlcmFsbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9wID0gb3AubmV4dDsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBPcC5DTE9TVVJFOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAgICogU2F2ZXMgY3VycmVudCBwb3NpdGlvbiB0byBhdm9pZAotICAgICAgICAgICAgICAgICAgICAgKiB6ZXJvLXdpZHRoIHJlcGVhdHMuCi0gICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICBpbnQgaWQgPSBvcC5nZXREYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpZCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJldmlvdXNPZmZzZXQgPSBjb24ub2Zmc2V0c1tpZF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNPZmZzZXQgPCAwIHx8IHByZXZpb3VzT2Zmc2V0ICE9IG9mZnNldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbi5vZmZzZXRzW2lkXSA9IG9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uLm9mZnNldHNbaWRdID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBvcC5uZXh0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gdGhpcy4gbWF0Y2hDaGFyYWN0ZXJJdGVyYXRvciAoY29uLCBvcC5nZXRDaGlsZCgpLCBvZmZzZXQsIGR4LCBvcHRzKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlkID49IDApICBjb24ub2Zmc2V0c1tpZF0gPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA+PSAwKSAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgICAgICAgICAgb3AgPSBvcC5uZXh0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBPcC5RVUVTVElPTjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGludCByZXQgPSB0aGlzLiBtYXRjaENoYXJhY3Rlckl0ZXJhdG9yIChjb24sIG9wLmdldENoaWxkKCksIG9mZnNldCwgZHgsIG9wdHMpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmV0ID49IDApICByZXR1cm4gcmV0OwotICAgICAgICAgICAgICAgICAgICBvcCA9IG9wLm5leHQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIE9wLk5PTkdSRUVEWUNMT1NVUkU6Ci0gICAgICAgICAgICBjYXNlIE9wLk5PTkdSRUVEWVFVRVNUSU9OOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHJldCA9IHRoaXMuIG1hdGNoQ2hhcmFjdGVySXRlcmF0b3IgKGNvbiwgb3AubmV4dCwgb2Zmc2V0LCBkeCwgb3B0cyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPj0gMCkgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICAgICAgICAgIG9wID0gb3AuZ2V0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgT3AuVU5JT046Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7ICBpIDwgb3Auc2l6ZSgpOyAgaSArKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gdGhpcy4gbWF0Y2hDaGFyYWN0ZXJJdGVyYXRvciAoY29uLCBvcC5lbGVtZW50QXQoaSksIG9mZnNldCwgZHgsIG9wdHMpOwotICAgICAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVU5JT046ICIraSsiLCByZXQ9IityZXQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPj0gMCkgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLQotICAgICAgICAgICAgY2FzZSBPcC5DQVBUVVJFOgotICAgICAgICAgICAgICAgIGludCByZWZubyA9IG9wLmdldERhdGEoKTsKLSAgICAgICAgICAgICAgICBpZiAoY29uLm1hdGNoICE9IG51bGwgJiYgcmVmbm8gPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBzYXZlID0gY29uLm1hdGNoLmdldEJlZ2lubmluZyhyZWZubyk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbi5tYXRjaC5zZXRCZWdpbm5pbmcocmVmbm8sIG9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgIGludCByZXQgPSB0aGlzLiBtYXRjaENoYXJhY3Rlckl0ZXJhdG9yIChjb24sIG9wLm5leHQsIG9mZnNldCwgZHgsIG9wdHMpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkgIGNvbi5tYXRjaC5zZXRCZWdpbm5pbmcocmVmbm8sIHNhdmUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uLm1hdGNoICE9IG51bGwgJiYgcmVmbm8gPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBpbmRleCA9IC1yZWZubzsKLSAgICAgICAgICAgICAgICAgICAgaW50IHNhdmUgPSBjb24ubWF0Y2guZ2V0RW5kKGluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgY29uLm1hdGNoLnNldEVuZChpbmRleCwgb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgaW50IHJldCA9IHRoaXMuIG1hdGNoQ2hhcmFjdGVySXRlcmF0b3IgKGNvbiwgb3AubmV4dCwgb2Zmc2V0LCBkeCwgb3B0cyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKSAgY29uLm1hdGNoLnNldEVuZChpbmRleCwgc2F2ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9wID0gb3AubmV4dDsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBPcC5MT09LQUhFQUQ6Ci0gICAgICAgICAgICAgICAgaWYgKDAgPiB0aGlzLiBtYXRjaENoYXJhY3Rlckl0ZXJhdG9yIChjb24sIG9wLmdldENoaWxkKCksIG9mZnNldCwgMSwgb3B0cykpICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgb3AgPSBvcC5uZXh0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBPcC5ORUdBVElWRUxPT0tBSEVBRDoKLSAgICAgICAgICAgICAgICBpZiAoMCA8PSB0aGlzLiBtYXRjaENoYXJhY3Rlckl0ZXJhdG9yIChjb24sIG9wLmdldENoaWxkKCksIG9mZnNldCwgMSwgb3B0cykpICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgb3AgPSBvcC5uZXh0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBPcC5MT09LQkVISU5EOgotICAgICAgICAgICAgICAgIGlmICgwID4gdGhpcy4gbWF0Y2hDaGFyYWN0ZXJJdGVyYXRvciAoY29uLCBvcC5nZXRDaGlsZCgpLCBvZmZzZXQsIC0xLCBvcHRzKSkgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICBvcCA9IG9wLm5leHQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIE9wLk5FR0FUSVZFTE9PS0JFSElORDoKLSAgICAgICAgICAgICAgICBpZiAoMCA8PSB0aGlzLiBtYXRjaENoYXJhY3Rlckl0ZXJhdG9yIChjb24sIG9wLmdldENoaWxkKCksIG9mZnNldCwgLTEsIG9wdHMpKSAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgIG9wID0gb3AubmV4dDsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBPcC5JTkRFUEVOREVOVDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGludCByZXQgPSB0aGlzLiBtYXRjaENoYXJhY3Rlckl0ZXJhdG9yIChjb24sIG9wLmdldENoaWxkKCksIG9mZnNldCwgZHgsIG9wdHMpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHJldDsKLSAgICAgICAgICAgICAgICAgICAgb3AgPSBvcC5uZXh0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBPcC5NT0RJRklFUjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBsb2NhbG9wdHMgPSBvcHRzOwotICAgICAgICAgICAgICAgICAgICBsb2NhbG9wdHMgfD0gb3AuZ2V0RGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBsb2NhbG9wdHMgJj0gfm9wLmdldERhdGEyKCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vU3lzdGVtLmVyci5wcmludGxuKCJNT0RJRklFUjogIitJbnRlZ2VyLnRvU3RyaW5nKG9wdHMsIDE2KSsiIC0+ICIrSW50ZWdlci50b1N0cmluZyhsb2NhbG9wdHMsIDE2KSk7Ci0gICAgICAgICAgICAgICAgICAgIGludCByZXQgPSB0aGlzLiBtYXRjaENoYXJhY3Rlckl0ZXJhdG9yIChjb24sIG9wLmdldENoaWxkKCksIG9mZnNldCwgZHgsIGxvY2Fsb3B0cyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKSAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gcmV0OwotICAgICAgICAgICAgICAgICAgICBvcCA9IG9wLm5leHQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIE9wLkNPTkRJVElPTjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIE9wLkNvbmRpdGlvbk9wIGNvcCA9IChPcC5Db25kaXRpb25PcClvcDsKLSAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBtYXRjaHAgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvcC5yZWZOdW1iZXIgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29wLnJlZk51bWJlciA+PSB0aGlzLm5vZnBhcmVuKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbnRlcm5hbCBFcnJvcjogUmVmZXJlbmNlIG51bWJlciBtdXN0IGJlIG1vcmUgdGhhbiB6ZXJvOiAiK2NvcC5yZWZOdW1iZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hwID0gY29uLm1hdGNoLmdldEJlZ2lubmluZyhjb3AucmVmTnVtYmVyKSA+PSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBjb24ubWF0Y2guZ2V0RW5kKGNvcC5yZWZOdW1iZXIpID49IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaHAgPSAwIDw9IHRoaXMuIG1hdGNoQ2hhcmFjdGVySXRlcmF0b3IgKGNvbiwgY29wLmNvbmRpdGlvbiwgb2Zmc2V0LCBkeCwgb3B0cyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcCA9IGNvcC55ZXM7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29wLm5vICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gY29wLm5vOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBjb3AubmV4dDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5rbm93biBvcGVyYXRpb24gdHlwZTogIitvcC50eXBlKTsKLSAgICAgICAgICAgIH0gLy8gc3dpdGNoIChvcC50eXBlKQotICAgICAgICB9IC8vIHdoaWxlCi0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IGdldFByZXZpb3VzV29yZFR5cGUoQ2hhcmFjdGVySXRlcmF0b3IgIHRhcmdldCwgaW50IGJlZ2luLCBpbnQgZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQsIGludCBvcHRzKSB7Ci0gICAgICAgIGludCByZXQgPSBnZXRXb3JkVHlwZSh0YXJnZXQsIGJlZ2luLCBlbmQsIC0tb2Zmc2V0LCBvcHRzKTsKLSAgICAgICAgd2hpbGUgKHJldCA9PSBXVF9JR05PUkUpCi0gICAgICAgICAgICByZXQgPSBnZXRXb3JkVHlwZSh0YXJnZXQsIGJlZ2luLCBlbmQsIC0tb2Zmc2V0LCBvcHRzKTsKLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgZ2V0V29yZFR5cGUoQ2hhcmFjdGVySXRlcmF0b3IgIHRhcmdldCwgaW50IGJlZ2luLCBpbnQgZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0LCBpbnQgb3B0cykgewotICAgICAgICBpZiAob2Zmc2V0IDwgYmVnaW4gfHwgb2Zmc2V0ID49IGVuZCkgIHJldHVybiBXVF9PVEhFUjsKLSAgICAgICAgcmV0dXJuIGdldFdvcmRUeXBlMCggdGFyZ2V0IC5zZXRJbmRleCggIG9mZnNldCApICwgb3B0cyk7Ci0gICAgfQotCi0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gcmVnaW9uTWF0Y2hlcyhDaGFyYWN0ZXJJdGVyYXRvciAgdGFyZ2V0LCBpbnQgb2Zmc2V0LCBpbnQgbGltaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwYXJ0LCBpbnQgcGFydGxlbikgewotICAgICAgICBpZiAob2Zmc2V0IDwgMCkgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGxpbWl0LW9mZnNldCA8IHBhcnRsZW4pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGludCBpID0gMDsKLSAgICAgICAgd2hpbGUgKHBhcnRsZW4tLSA+IDApIHsKLSAgICAgICAgICAgIGlmICggdGFyZ2V0IC5zZXRJbmRleCggIG9mZnNldCsrICkgICE9IHBhcnQuY2hhckF0KGkrKykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gcmVnaW9uTWF0Y2hlcyhDaGFyYWN0ZXJJdGVyYXRvciAgdGFyZ2V0LCBpbnQgb2Zmc2V0LCBpbnQgbGltaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQyLCBpbnQgcGFydGxlbikgewotICAgICAgICBpZiAob2Zmc2V0IDwgMCkgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGxpbWl0LW9mZnNldCA8IHBhcnRsZW4pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGludCBpID0gb2Zmc2V0MjsKLSAgICAgICAgd2hpbGUgKHBhcnRsZW4tLSA+IDApIHsKLSAgICAgICAgICAgIGlmICggdGFyZ2V0IC5zZXRJbmRleCggIG9mZnNldCsrICkgICE9ICB0YXJnZXQgLnNldEluZGV4KCAgaSsrICkgKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBAc2VlIGphdmEubGFuZy5TdHJpbmcjcmVnaW9uTWF0Y2hlcwotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gcmVnaW9uTWF0Y2hlc0lnbm9yZUNhc2UoQ2hhcmFjdGVySXRlcmF0b3IgIHRhcmdldCwgaW50IG9mZnNldCwgaW50IGxpbWl0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHBhcnQsIGludCBwYXJ0bGVuKSB7Ci0gICAgICAgIGlmIChvZmZzZXQgPCAwKSAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAobGltaXQtb2Zmc2V0IDwgcGFydGxlbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaW50IGkgPSAwOwotICAgICAgICB3aGlsZSAocGFydGxlbi0tID4gMCkgewotICAgICAgICAgICAgY2hhciBjaDEgPSAgdGFyZ2V0IC5zZXRJbmRleCggIG9mZnNldCsrICkgOwotICAgICAgICAgICAgY2hhciBjaDIgPSBwYXJ0LmNoYXJBdChpKyspOwotICAgICAgICAgICAgaWYgKGNoMSA9PSBjaDIpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBjaGFyIHVjaDEgPSBDaGFyYWN0ZXIudG9VcHBlckNhc2UoY2gxKTsKLSAgICAgICAgICAgIGNoYXIgdWNoMiA9IENoYXJhY3Rlci50b1VwcGVyQ2FzZShjaDIpOwotICAgICAgICAgICAgaWYgKHVjaDEgPT0gdWNoMikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChDaGFyYWN0ZXIudG9Mb3dlckNhc2UodWNoMSkgIT0gQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKHVjaDIpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIHJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKENoYXJhY3Rlckl0ZXJhdG9yICB0YXJnZXQsIGludCBvZmZzZXQsIGludCBsaW1pdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQyLCBpbnQgcGFydGxlbikgewotICAgICAgICBpZiAob2Zmc2V0IDwgMCkgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGxpbWl0LW9mZnNldCA8IHBhcnRsZW4pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGludCBpID0gb2Zmc2V0MjsKLSAgICAgICAgd2hpbGUgKHBhcnRsZW4tLSA+IDApIHsKLSAgICAgICAgICAgIGNoYXIgY2gxID0gIHRhcmdldCAuc2V0SW5kZXgoICBvZmZzZXQrKyApIDsKLSAgICAgICAgICAgIGNoYXIgY2gyID0gIHRhcmdldCAuc2V0SW5kZXgoICBpKysgKSA7Ci0gICAgICAgICAgICBpZiAoY2gxID09IGNoMikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGNoYXIgdWNoMSA9IENoYXJhY3Rlci50b1VwcGVyQ2FzZShjaDEpOwotICAgICAgICAgICAgY2hhciB1Y2gyID0gQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKGNoMik7Ci0gICAgICAgICAgICBpZiAodWNoMSA9PSB1Y2gyKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKENoYXJhY3Rlci50b0xvd2VyQ2FzZSh1Y2gxKSAhPSBDaGFyYWN0ZXIudG9Mb3dlckNhc2UodWNoMikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotCi0KLQotICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgIC8qKgotICAgICAqIEEgcmVndWxhciBleHByZXNzaW9uLgotICAgICAqIEBzZXJpYWwKLSAgICAgKi8KLSAgICBTdHJpbmcgcmVnZXg7Ci0gICAgLyoqCi0gICAgICogQHNlcmlhbAotICAgICAqLwotICAgIGludCBvcHRpb25zOwotCi0gICAgLyoqCi0gICAgICogVGhlIG51bWJlciBvZiBwYXJlbnRoZXNpcyBpbiB0aGUgcmVndWxhciBleHByZXNzaW9uLgotICAgICAqIEBzZXJpYWwKLSAgICAgKi8KLSAgICBpbnQgbm9mcGFyZW47Ci0gICAgLyoqCi0gICAgICogSW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi4KLSAgICAgKiBAc2VyaWFsCi0gICAgICovCi0gICAgVG9rZW4gdG9rZW50cmVlOwotCi0gICAgYm9vbGVhbiBoYXNCYWNrUmVmZXJlbmNlcyA9IGZhbHNlOwotCi0gICAgdHJhbnNpZW50IGludCBtaW5sZW5ndGg7Ci0gICAgdHJhbnNpZW50IE9wIG9wZXJhdGlvbnMgPSBudWxsOwotICAgIHRyYW5zaWVudCBpbnQgbnVtYmVyT2ZDbG9zdXJlczsKLSAgICB0cmFuc2llbnQgQ29udGV4dCBjb250ZXh0ID0gbnVsbDsKLSAgICB0cmFuc2llbnQgUmFuZ2VUb2tlbiBmaXJzdENoYXIgPSBudWxsOwotCi0gICAgdHJhbnNpZW50IFN0cmluZyBmaXhlZFN0cmluZyA9IG51bGw7Ci0gICAgdHJhbnNpZW50IGludCBmaXhlZFN0cmluZ09wdGlvbnM7Ci0gICAgdHJhbnNpZW50IEJNUGF0dGVybiBmaXhlZFN0cmluZ1RhYmxlID0gbnVsbDsKLSAgICB0cmFuc2llbnQgYm9vbGVhbiBmaXhlZFN0cmluZ09ubHkgPSBmYWxzZTsKLQotCi0gICAgc3RhdGljIGZpbmFsIGNsYXNzIENvbnRleHQgewotICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaVRhcmdldDsKLSAgICAgICAgU3RyaW5nIHN0clRhcmdldDsKLSAgICAgICAgY2hhcltdIGNoYXJUYXJnZXQ7Ci0gICAgICAgIGludCBzdGFydDsKLSAgICAgICAgaW50IGxpbWl0OwotICAgICAgICBpbnQgbGVuZ3RoOwotICAgICAgICBNYXRjaCBtYXRjaDsKLSAgICAgICAgYm9vbGVhbiBpbnVzZSA9IGZhbHNlOwotICAgICAgICBpbnRbXSBvZmZzZXRzOwotCi0gICAgICAgIENvbnRleHQoKSB7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgcmVzZXRDb21tb24oaW50IG5vZmNsb3N1cmVzKSB7Ci0gICAgICAgICAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGltaXQtdGhpcy5zdGFydDsKLSAgICAgICAgICAgIHRoaXMuaW51c2UgPSB0cnVlOwotICAgICAgICAgICAgdGhpcy5tYXRjaCA9IG51bGw7Ci0gICAgICAgICAgICBpZiAodGhpcy5vZmZzZXRzID09IG51bGwgfHwgdGhpcy5vZmZzZXRzLmxlbmd0aCAhPSBub2ZjbG9zdXJlcykKLSAgICAgICAgICAgICAgICB0aGlzLm9mZnNldHMgPSBuZXcgaW50W25vZmNsb3N1cmVzXTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyAgaSA8IG5vZmNsb3N1cmVzOyAgaSArKykgIHRoaXMub2Zmc2V0c1tpXSA9IC0xOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgcmVzZXQoQ2hhcmFjdGVySXRlcmF0b3IgdGFyZ2V0LCBpbnQgc3RhcnQsIGludCBsaW1pdCwgaW50IG5vZmNsb3N1cmVzKSB7Ci0gICAgICAgICAgICB0aGlzLmNpVGFyZ2V0ID0gdGFyZ2V0OwotICAgICAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0OwotICAgICAgICAgICAgdGhpcy5saW1pdCA9IGxpbWl0OwotICAgICAgICAgICAgdGhpcy5yZXNldENvbW1vbihub2ZjbG9zdXJlcyk7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCByZXNldChTdHJpbmcgdGFyZ2V0LCBpbnQgc3RhcnQsIGludCBsaW1pdCwgaW50IG5vZmNsb3N1cmVzKSB7Ci0gICAgICAgICAgICB0aGlzLnN0clRhcmdldCA9IHRhcmdldDsKLSAgICAgICAgICAgIHRoaXMuc3RhcnQgPSBzdGFydDsKLSAgICAgICAgICAgIHRoaXMubGltaXQgPSBsaW1pdDsKLSAgICAgICAgICAgIHRoaXMucmVzZXRDb21tb24obm9mY2xvc3VyZXMpOwotICAgICAgICB9Ci0gICAgICAgIHZvaWQgcmVzZXQoY2hhcltdIHRhcmdldCwgaW50IHN0YXJ0LCBpbnQgbGltaXQsIGludCBub2ZjbG9zdXJlcykgewotICAgICAgICAgICAgdGhpcy5jaGFyVGFyZ2V0ID0gdGFyZ2V0OwotICAgICAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0OwotICAgICAgICAgICAgdGhpcy5saW1pdCA9IGxpbWl0OwotICAgICAgICAgICAgdGhpcy5yZXNldENvbW1vbihub2ZjbG9zdXJlcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQcmVwYXJlcyBmb3IgbWF0Y2hpbmcuICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQganVzdCBiZWZvcmUgc3RhcnRpbmcgbWF0Y2hpbmcuCi0gICAgICovCi0gICAgdm9pZCBwcmVwYXJlKCkgewotICAgICAgICBpZiAoT3AuQ09VTlQpICBPcC5ub2ZpbnN0YW5jZXMgPSAwOwotICAgICAgICB0aGlzLmNvbXBpbGUodGhpcy50b2tlbnRyZWUpOwotICAgICAgICAvKgotICAgICAgICBpZiAgKHRoaXMub3BlcmF0aW9ucy50eXBlID09IE9wLkNMT1NVUkUgJiYgdGhpcy5vcGVyYXRpb25zLmdldENoaWxkKCkudHlwZSA9PSBPcC5ET1QpIHsgLy8gLioKLSAgICAgICAgICAgIE9wIGFuY2hvciA9IE9wLmNyZWF0ZUFuY2hvcihpc1NldCh0aGlzLm9wdGlvbnMsIFNJTkdMRV9MSU5FKSA/ICdBJyA6ICdAJyk7Ci0gICAgICAgICAgICBhbmNob3IubmV4dCA9IHRoaXMub3BlcmF0aW9uczsKLSAgICAgICAgICAgIHRoaXMub3BlcmF0aW9ucyA9IGFuY2hvcjsKLSAgICAgICAgfQotICAgICAgICAqLwotICAgICAgICBpZiAoT3AuQ09VTlQpICBTeXN0ZW0uZXJyLnByaW50bG4oIkRFQlVHOiBUaGUgbnVtYmVyIG9mIG9wZXJhdGlvbnM6ICIrT3Aubm9maW5zdGFuY2VzKTsKLQotICAgICAgICB0aGlzLm1pbmxlbmd0aCA9IHRoaXMudG9rZW50cmVlLmdldE1pbkxlbmd0aCgpOwotCi0gICAgICAgIHRoaXMuZmlyc3RDaGFyID0gbnVsbDsKLSAgICAgICAgaWYgKCFpc1NldCh0aGlzLm9wdGlvbnMsIFBST0hJQklUX0hFQURfQ0hBUkFDVEVSX09QVElNSVpBVElPTikKLSAgICAgICAgICAgICYmICFpc1NldCh0aGlzLm9wdGlvbnMsIFhNTFNDSEVNQV9NT0RFKSkgewotICAgICAgICAgICAgUmFuZ2VUb2tlbiBmaXJzdENoYXIgPSBUb2tlbi5jcmVhdGVSYW5nZSgpOwotICAgICAgICAgICAgaW50IGZyZXN1bHQgPSB0aGlzLnRva2VudHJlZS5hbmFseXplRmlyc3RDaGFyYWN0ZXIoZmlyc3RDaGFyLCB0aGlzLm9wdGlvbnMpOwotICAgICAgICAgICAgaWYgKGZyZXN1bHQgPT0gVG9rZW4uRkNfVEVSTUlOQUwpIHsKLSAgICAgICAgICAgICAgICBmaXJzdENoYXIuY29tcGFjdFJhbmdlcygpOwotICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RDaGFyID0gZmlyc3RDaGFyOwotICAgICAgICAgICAgICAgIGlmIChERUJVRykKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJERUJVRzogVXNlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb3B0aW1pemF0aW9uOiAiK2ZpcnN0Q2hhcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGhpcy5vcGVyYXRpb25zICE9IG51bGwKLSAgICAgICAgICAgICYmICh0aGlzLm9wZXJhdGlvbnMudHlwZSA9PSBPcC5TVFJJTkcgfHwgdGhpcy5vcGVyYXRpb25zLnR5cGUgPT0gT3AuQ0hBUikKLSAgICAgICAgICAgICYmIHRoaXMub3BlcmF0aW9ucy5uZXh0ID09IG51bGwpIHsKLSAgICAgICAgICAgIGlmIChERUJVRykKLSAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50KCIgKioqIE9ubHkgZml4ZWQgc3RyaW5nISAqKiogIik7Ci0gICAgICAgICAgICB0aGlzLmZpeGVkU3RyaW5nT25seSA9IHRydWU7Ci0gICAgICAgICAgICBpZiAodGhpcy5vcGVyYXRpb25zLnR5cGUgPT0gT3AuU1RSSU5HKQotICAgICAgICAgICAgICAgIHRoaXMuZml4ZWRTdHJpbmcgPSB0aGlzLm9wZXJhdGlvbnMuZ2V0U3RyaW5nKCk7Ci0gICAgICAgICAgICBlbHNlIGlmICh0aGlzLm9wZXJhdGlvbnMuZ2V0RGF0YSgpID49IDB4MTAwMDApIHsgLy8gT3AuQ0hBUgotICAgICAgICAgICAgICAgIHRoaXMuZml4ZWRTdHJpbmcgPSBSRVV0aWwuZGVjb21wb3NlVG9TdXJyb2dhdGVzKHRoaXMub3BlcmF0aW9ucy5nZXREYXRhKCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjaGFyW10gYWMgPSBuZXcgY2hhclsxXTsKLSAgICAgICAgICAgICAgICBhY1swXSA9IChjaGFyKXRoaXMub3BlcmF0aW9ucy5nZXREYXRhKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5maXhlZFN0cmluZyA9IG5ldyBTdHJpbmcoYWMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhpcy5maXhlZFN0cmluZ09wdGlvbnMgPSB0aGlzLm9wdGlvbnM7Ci0gICAgICAgICAgICB0aGlzLmZpeGVkU3RyaW5nVGFibGUgPSBuZXcgQk1QYXR0ZXJuKHRoaXMuZml4ZWRTdHJpbmcsIDI1NiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZXQodGhpcy5maXhlZFN0cmluZ09wdGlvbnMsIElHTk9SRV9DQVNFKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIWlzU2V0KHRoaXMub3B0aW9ucywgUFJPSElCSVRfRklYRURfU1RSSU5HX09QVElNSVpBVElPTikKLSAgICAgICAgICAgICAgICAgICAmJiAhaXNTZXQodGhpcy5vcHRpb25zLCBYTUxTQ0hFTUFfTU9ERSkpIHsKLSAgICAgICAgICAgIFRva2VuLkZpeGVkU3RyaW5nQ29udGFpbmVyIGNvbnRhaW5lciA9IG5ldyBUb2tlbi5GaXhlZFN0cmluZ0NvbnRhaW5lcigpOwotICAgICAgICAgICAgdGhpcy50b2tlbnRyZWUuZmluZEZpeGVkU3RyaW5nKGNvbnRhaW5lciwgdGhpcy5vcHRpb25zKTsKLSAgICAgICAgICAgIHRoaXMuZml4ZWRTdHJpbmcgPSBjb250YWluZXIudG9rZW4gPT0gbnVsbCA/IG51bGwgOiBjb250YWluZXIudG9rZW4uZ2V0U3RyaW5nKCk7Ci0gICAgICAgICAgICB0aGlzLmZpeGVkU3RyaW5nT3B0aW9ucyA9IGNvbnRhaW5lci5vcHRpb25zOwotICAgICAgICAgICAgaWYgKHRoaXMuZml4ZWRTdHJpbmcgIT0gbnVsbCAmJiB0aGlzLmZpeGVkU3RyaW5nLmxlbmd0aCgpIDwgMikKLSAgICAgICAgICAgICAgICB0aGlzLmZpeGVkU3RyaW5nID0gbnVsbDsKLSAgICAgICAgICAgIC8vIFRoaXMgcGF0dGVybiBoYXMgYSBmaXhlZCBzdHJpbmcgb2Ygd2hpY2ggbGVuZ3RoIGlzIG1vcmUgdGhhbiBvbmUuCi0gICAgICAgICAgICBpZiAodGhpcy5maXhlZFN0cmluZyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5maXhlZFN0cmluZ1RhYmxlID0gbmV3IEJNUGF0dGVybih0aGlzLmZpeGVkU3RyaW5nLCAyNTYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NldCh0aGlzLmZpeGVkU3RyaW5nT3B0aW9ucywgSUdOT1JFX0NBU0UpKTsKLSAgICAgICAgICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJERUJVRzogVGhlIGxvbmdlc3QgZml4ZWQgc3RyaW5nOiAiK3RoaXMuZml4ZWRTdHJpbmcubGVuZ3RoKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsiLyIgLy8rdGhpcy5maXhlZFN0cmluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyIvIitSRVV0aWwuY3JlYXRlT3B0aW9uU3RyaW5nKHRoaXMuZml4ZWRTdHJpbmdPcHRpb25zKSk7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnQoIlN0cmluZzogIik7Ci0gICAgICAgICAgICAgICAgICAgIFJFVXRpbC5kdW1wU3RyaW5nKHRoaXMuZml4ZWRTdHJpbmcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFuIG9wdGlvbi4KLSAgICAgKiBJZiB5b3Ugc3BlY2lmeSB0aGlzIG9wdGlvbiwgPHNwYW4gY2xhc3M9IlJFR0VYIj48a2JkPig8L2tiZD48dmFyPlg8L3Zhcj48a2JkPik8L2tiZD48L3NwYW4+Ci0gICAgICogY2FwdHVyZXMgbWF0Y2hlZCB0ZXh0LCBhbmQgPHNwYW4gY2xhc3M9IlJFR0VYIj48a2JkPig6Pzwva2JkPjx2YXI+WDwvdmFyPjxrYmQ+KTwva2JkPjwvc3Bhbj4KLSAgICAgKiBkb2VzIG5vdCBjYXB0dXJlLgotICAgICAqCi0gICAgICogQHNlZSAjUmVndWxhckV4cHJlc3Npb24oamF2YS5sYW5nLlN0cmluZyxpbnQpCi0gICAgICogQHNlZSAjc2V0UGF0dGVybihqYXZhLmxhbmcuU3RyaW5nLGludCkKLSAgICBzdGF0aWMgZmluYWwgaW50IE1BUktfUEFSRU5TID0gMTw8MDsKLSAgICAgKi8KLQotICAgIC8qKgotICAgICAqICJpIgotICAgICAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgSUdOT1JFX0NBU0UgPSAxPDwxOwotCi0gICAgLyoqCi0gICAgICogInMiCi0gICAgICovCi0gICAgc3RhdGljIGZpbmFsIGludCBTSU5HTEVfTElORSA9IDE8PDI7Ci0KLSAgICAvKioKLSAgICAgKiAibSIKLSAgICAgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IE1VTFRJUExFX0xJTkVTID0gMTw8MzsKLQotICAgIC8qKgotICAgICAqICJ4IgotICAgICAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgRVhURU5ERURfQ09NTUVOVCA9IDE8PDQ7Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIG9wdGlvbiByZWRlZmluZXMgPHNwYW4gY2xhc3M9IlJFR0VYIj48a2JkPlxkIFxEIFx3IFxXIFxzIFxTPC9rYmQ+PC9zcGFuPi4KLSAgICAgKgotICAgICAqIEBzZWUgI1JlZ3VsYXJFeHByZXNzaW9uKGphdmEubGFuZy5TdHJpbmcsaW50KQotICAgICAqIEBzZWUgI3NldFBhdHRlcm4oamF2YS5sYW5nLlN0cmluZyxpbnQpCi0gICAgICogQHNlZSAjVU5JQ09ERV9XT1JEX0JPVU5EQVJZCi0gICAgICovCi0gICAgc3RhdGljIGZpbmFsIGludCBVU0VfVU5JQ09ERV9DQVRFR09SWSA9IDE8PDU7IC8vICJ1IgotCi0gICAgLyoqCi0gICAgICogQW4gb3B0aW9uLgotICAgICAqIFRoaXMgZW5hYmxlcyB0byBwcm9jZXNzIGxvY2FsZS1pbmRlcGVuZGVudCB3b3JkIGJvdW5kYXJ5IGZvciA8c3BhbiBjbGFzcz0iUkVHRVgiPjxrYmQ+XGIgXEIgXCZsdDsgXD48L2tiZD48L3NwYW4+LgotICAgICAqIDxwPkJ5IGRlZmF1bHQsIHRoZSBlbmdpbmUgY29uc2lkZXJzIGEgcG9zaXRpb24gYmV0d2VlbiBhIHdvcmQgY2hhcmFjdGVyCi0gICAgICogKDxzcGFuIGNsYXNzPSJSRUdFWCI+PEtiZD5cdzwva2JkPjwvc3Bhbj4pIGFuZCBhIG5vbiB3b3JkIGNoYXJhY3RlcgotICAgICAqIGlzIGEgd29yZCBib3VuZGFyeS4KLSAgICAgKiA8cD5CeSB0aGlzIG9wdGlvbiwgdGhlIGVuZ2luZSBjaGVja3Mgd29yZCBib3VuZGFyaWVzIHdpdGggdGhlIG1ldGhvZCBvZgotICAgICAqICdVbmljb2RlIFJlZ3VsYXIgRXhwcmVzc2lvbiBHdWlkZWxpbmVzJyBSZXZpc2lvbiA0LgotICAgICAqCi0gICAgICogQHNlZSAjUmVndWxhckV4cHJlc3Npb24oamF2YS5sYW5nLlN0cmluZyxpbnQpCi0gICAgICogQHNlZSAjc2V0UGF0dGVybihqYXZhLmxhbmcuU3RyaW5nLGludCkKLSAgICAgKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IFVOSUNPREVfV09SRF9CT1VOREFSWSA9IDE8PDY7IC8vICJ3IgotCi0gICAgLyoqCi0gICAgICogIkgiCi0gICAgICovCi0gICAgc3RhdGljIGZpbmFsIGludCBQUk9ISUJJVF9IRUFEX0NIQVJBQ1RFUl9PUFRJTUlaQVRJT04gPSAxPDw3OwotICAgIC8qKgotICAgICAqICJGIgotICAgICAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgUFJPSElCSVRfRklYRURfU1RSSU5HX09QVElNSVpBVElPTiA9IDE8PDg7Ci0gICAgLyoqCi0gICAgICogIlgiLiBYTUwgU2NoZW1hIG1vZGUuCi0gICAgICovCi0gICAgc3RhdGljIGZpbmFsIGludCBYTUxTQ0hFTUFfTU9ERSA9IDE8PDk7Ci0gICAgLyoqCi0gICAgICogIiwiLgotICAgICAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgU1BFQ0lBTF9DT01NQSA9IDE8PDEwOwotCi0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIGlzU2V0KGludCBvcHRpb25zLCBpbnQgZmxhZykgewotICAgICAgICByZXR1cm4gKG9wdGlvbnMgJiBmbGFnKSA9PSBmbGFnOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcgUmVndWxhckV4cHJlc3Npb24gaW5zdGFuY2UuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gcmVnZXggQSByZWd1bGFyIGV4cHJlc3Npb24KLSAgICAgKiBAZXhjZXB0aW9uIG9yZy5hcGFjaGUueGVyY2VzLnV0aWxzLnJlZ2V4LlBhcnNlRXhjZXB0aW9uIDxWQVI+cmVnZXg8L1ZBUj4gaXMgbm90IGNvbmZvcm1pbmcgdG8gdGhlIHN5bnRheC4KLSAgICAgKi8KLSAgICBwdWJsaWMgUmVndWxhckV4cHJlc3Npb24oU3RyaW5nIHJlZ2V4KSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICB0aGlzLnNldFBhdHRlcm4ocmVnZXgsIG51bGwpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcgUmVndWxhckV4cHJlc3Npb24gaW5zdGFuY2Ugd2l0aCBvcHRpb25zLgotICAgICAqCi0gICAgICogQHBhcmFtIHJlZ2V4IEEgcmVndWxhciBleHByZXNzaW9uCi0gICAgICogQHBhcmFtIG9wdGlvbnMgQSBTdHJpbmcgY29uc2lzdGVkIG9mICJpIiAibSIgInMiICJ1IiAidyIgIiwiICJYIgotICAgICAqIEBleGNlcHRpb24gb3JnLmFwYWNoZS54ZXJjZXMudXRpbHMucmVnZXguUGFyc2VFeGNlcHRpb24gPFZBUj5yZWdleDwvVkFSPiBpcyBub3QgY29uZm9ybWluZyB0byB0aGUgc3ludGF4LgotICAgICAqLwotICAgIHB1YmxpYyBSZWd1bGFyRXhwcmVzc2lvbihTdHJpbmcgcmVnZXgsIFN0cmluZyBvcHRpb25zKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICB0aGlzLnNldFBhdHRlcm4ocmVnZXgsIG9wdGlvbnMpOwotICAgIH0KLQotICAgIFJlZ3VsYXJFeHByZXNzaW9uKFN0cmluZyByZWdleCwgVG9rZW4gdG9rLCBpbnQgcGFyZW5zLCBib29sZWFuIGhhc0JhY2tSZWZlcmVuY2VzLCBpbnQgb3B0aW9ucykgewotICAgICAgICB0aGlzLnJlZ2V4ID0gcmVnZXg7Ci0gICAgICAgIHRoaXMudG9rZW50cmVlID0gdG9rOwotICAgICAgICB0aGlzLm5vZnBhcmVuID0gcGFyZW5zOwotICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwotICAgICAgICB0aGlzLmhhc0JhY2tSZWZlcmVuY2VzID0gaGFzQmFja1JlZmVyZW5jZXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRQYXR0ZXJuKFN0cmluZyBuZXdQYXR0ZXJuKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewotICAgICAgICB0aGlzLnNldFBhdHRlcm4obmV3UGF0dGVybiwgdGhpcy5vcHRpb25zKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2V0UGF0dGVybihTdHJpbmcgbmV3UGF0dGVybiwgaW50IG9wdGlvbnMpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRoaXMucmVnZXggPSBuZXdQYXR0ZXJuOwotICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwotICAgICAgICBSZWdleFBhcnNlciBycCA9IHRoaXMuaXNTZXQodGhpcy5vcHRpb25zLCBSZWd1bGFyRXhwcmVzc2lvbi5YTUxTQ0hFTUFfTU9ERSkKLSAgICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBQYXJzZXJGb3JYTUxTY2hlbWEoKSA6IG5ldyBSZWdleFBhcnNlcigpOwotICAgICAgICB0aGlzLnRva2VudHJlZSA9IHJwLnBhcnNlKHRoaXMucmVnZXgsIHRoaXMub3B0aW9ucyk7Ci0gICAgICAgIHRoaXMubm9mcGFyZW4gPSBycC5wYXJlbm51bWJlcjsKLSAgICAgICAgdGhpcy5oYXNCYWNrUmVmZXJlbmNlcyA9IHJwLmhhc0JhY2tSZWZlcmVuY2VzOwotCi0gICAgICAgIHRoaXMub3BlcmF0aW9ucyA9IG51bGw7Ci0gICAgICAgIHRoaXMuY29udGV4dCA9IG51bGw7Ci0gICAgfQotICAgIC8qKgotICAgICAqCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0UGF0dGVybihTdHJpbmcgbmV3UGF0dGVybiwgU3RyaW5nIG9wdGlvbnMpIHRocm93cyBQYXJzZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHRoaXMuc2V0UGF0dGVybihuZXdQYXR0ZXJuLCBSRVV0aWwucGFyc2VPcHRpb25zKG9wdGlvbnMpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKgotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGF0dGVybigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMucmVnZXg7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVwcmVzZW50cyB0aGlzIGluc3RlbmNlIGluIFN0cmluZy4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICByZXR1cm4gdGhpcy50b2tlbnRyZWUudG9TdHJpbmcodGhpcy5vcHRpb25zKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgb3B0aW9uIHN0cmluZy4KLSAgICAgKiBUaGUgb3JkZXIgb2YgbGV0dGVycyBpbiBpdCBtYXkgYmUgZGlmZmVyZW50IGZyb20gYSBzdHJpbmcgc3BlY2lmaWVkCi0gICAgICogaW4gYSBjb25zdHJ1Y3RvciBvciA8Y29kZT5zZXRQYXR0ZXJuKCk8L2NvZGU+LgotICAgICAqCi0gICAgICogQHNlZSAjUmVndWxhckV4cHJlc3Npb24oamF2YS5sYW5nLlN0cmluZyxqYXZhLmxhbmcuU3RyaW5nKQotICAgICAqIEBzZWUgI3NldFBhdHRlcm4oamF2YS5sYW5nLlN0cmluZyxqYXZhLmxhbmcuU3RyaW5nKQotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0T3B0aW9ucygpIHsKLSAgICAgICAgcmV0dXJuIFJFVXRpbC5jcmVhdGVPcHRpb25TdHJpbmcodGhpcy5vcHRpb25zKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiAgUmV0dXJuIHRydWUgaWYgcGF0dGVybnMgYXJlIHRoZSBzYW1lIGFuZCB0aGUgb3B0aW9ucyBhcmUgZXF1aXZhbGVudC4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewotICAgICAgICBpZiAob2JqID09IG51bGwpICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghKG9iaiBpbnN0YW5jZW9mIFJlZ3VsYXJFeHByZXNzaW9uKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgUmVndWxhckV4cHJlc3Npb24gciA9IChSZWd1bGFyRXhwcmVzc2lvbilvYmo7Ci0gICAgICAgIHJldHVybiB0aGlzLnJlZ2V4LmVxdWFscyhyLnJlZ2V4KSAmJiB0aGlzLm9wdGlvbnMgPT0gci5vcHRpb25zOwotICAgIH0KLQotICAgIGJvb2xlYW4gZXF1YWxzKFN0cmluZyBwYXR0ZXJuLCBpbnQgb3B0aW9ucykgewotICAgICAgICByZXR1cm4gdGhpcy5yZWdleC5lcXVhbHMocGF0dGVybikgJiYgdGhpcy5vcHRpb25zID09IG9wdGlvbnM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgICAgICByZXR1cm4gKHRoaXMucmVnZXgrIi8iK3RoaXMuZ2V0T3B0aW9ucygpKS5oYXNoQ29kZSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbiBncm91cHMuCi0gICAgICogVGhpcyBtZXRob2QgcmV0dXJucyAxIHdoZW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBoYXMgbm8gY2FwdHVyaW5nLXBhcmVudGhlc2lzLgotICAgICAqCi0gICAgICovCi0gICAgcHVibGljIGludCBnZXROdW1iZXJPZkdyb3VwcygpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubm9mcGFyZW47Ci0gICAgfQotCi0gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFdUX0lHTk9SRSA9IDA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFdUX0xFVFRFUiA9IDE7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFdUX09USEVSID0gMjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgZ2V0V29yZFR5cGUwKGNoYXIgY2gsIGludCBvcHRzKSB7Ci0gICAgICAgIGlmICghaXNTZXQob3B0cywgVU5JQ09ERV9XT1JEX0JPVU5EQVJZKSkgewotICAgICAgICAgICAgaWYgKGlzU2V0KG9wdHMsIFVTRV9VTklDT0RFX0NBVEVHT1JZKSkgewotICAgICAgICAgICAgICAgIHJldHVybiAoVG9rZW4uZ2V0UmFuZ2UoIklzV29yZCIsIHRydWUpLm1hdGNoKGNoKSkgPyBXVF9MRVRURVIgOiBXVF9PVEhFUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBpc1dvcmRDaGFyKGNoKSA/IFdUX0xFVFRFUiA6IFdUX09USEVSOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChDaGFyYWN0ZXIuZ2V0VHlwZShjaCkpIHsKLSAgICAgICAgY2FzZSBDaGFyYWN0ZXIuVVBQRVJDQVNFX0xFVFRFUjogICAgICAvLyBMCi0gICAgICAgIGNhc2UgQ2hhcmFjdGVyLkxPV0VSQ0FTRV9MRVRURVI6ICAgICAgLy8gTAotICAgICAgICBjYXNlIENoYXJhY3Rlci5USVRMRUNBU0VfTEVUVEVSOiAgICAgIC8vIEwKLSAgICAgICAgY2FzZSBDaGFyYWN0ZXIuTU9ESUZJRVJfTEVUVEVSOiAgICAgICAvLyBMCi0gICAgICAgIGNhc2UgQ2hhcmFjdGVyLk9USEVSX0xFVFRFUjogICAgICAgICAgLy8gTAotICAgICAgICBjYXNlIENoYXJhY3Rlci5MRVRURVJfTlVNQkVSOiAgICAgICAgIC8vIE4KLSAgICAgICAgY2FzZSBDaGFyYWN0ZXIuREVDSU1BTF9ESUdJVF9OVU1CRVI6ICAvLyBOCi0gICAgICAgIGNhc2UgQ2hhcmFjdGVyLk9USEVSX05VTUJFUjogICAgICAgICAgLy8gTgotICAgICAgICBjYXNlIENoYXJhY3Rlci5DT01CSU5JTkdfU1BBQ0lOR19NQVJLOiAvLyBNYwotICAgICAgICAgICAgcmV0dXJuIFdUX0xFVFRFUjsKLQotICAgICAgICBjYXNlIENoYXJhY3Rlci5GT1JNQVQ6ICAgICAgICAgICAgICAgIC8vIENmCi0gICAgICAgIGNhc2UgQ2hhcmFjdGVyLk5PTl9TUEFDSU5HX01BUks6ICAgICAgLy8gTW4KLSAgICAgICAgY2FzZSBDaGFyYWN0ZXIuRU5DTE9TSU5HX01BUks6ICAgICAgICAvLyBNYwotICAgICAgICAgICAgcmV0dXJuIFdUX0lHTk9SRTsKLQotICAgICAgICBjYXNlIENoYXJhY3Rlci5DT05UUk9MOiAgICAgICAgICAgICAgIC8vIENjCi0gICAgICAgICAgICBzd2l0Y2ggKGNoKSB7Ci0gICAgICAgICAgICBjYXNlICdcdCc6Ci0gICAgICAgICAgICBjYXNlICdcbic6Ci0gICAgICAgICAgICBjYXNlICdcdTAwMEInOgotICAgICAgICAgICAgY2FzZSAnXGYnOgotICAgICAgICAgICAgY2FzZSAnXHInOgotICAgICAgICAgICAgICAgIHJldHVybiBXVF9PVEhFUjsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFdUX0lHTk9SRTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIFdUX09USEVSOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gICAgc3RhdGljIGZpbmFsIGludCBMSU5FX0ZFRUQgPSAweDAwMEE7Ci0gICAgc3RhdGljIGZpbmFsIGludCBDQVJSSUFHRV9SRVRVUk4gPSAweDAwMEQ7Ci0gICAgc3RhdGljIGZpbmFsIGludCBMSU5FX1NFUEFSQVRPUiA9IDB4MjAyODsKLSAgICBzdGF0aWMgZmluYWwgaW50IFBBUkFHUkFQSF9TRVBBUkFUT1IgPSAweDIwMjk7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIGlzRU9MQ2hhcihpbnQgY2gpIHsKLSAgICAgICAgcmV0dXJuIGNoID09IExJTkVfRkVFRCB8fCBjaCA9PSBDQVJSSUFHRV9SRVRVUk4gfHwgY2ggPT0gTElORV9TRVBBUkFUT1IKLSAgICAgICAgfHwgY2ggPT0gUEFSQUdSQVBIX1NFUEFSQVRPUjsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIGlzV29yZENoYXIoaW50IGNoKSB7IC8vIExlZ2FjeSB3b3JkIGNoYXJhY3RlcnMKLSAgICAgICAgaWYgKGNoID09ICdfJykgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoY2ggPCAnMCcpICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChjaCA+ICd6JykgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGNoIDw9ICc5JykgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoY2ggPCAnQScpICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChjaCA8PSAnWicpICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKGNoIDwgJ2EnKSAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIG1hdGNoSWdub3JlQ2FzZShpbnQgY2hhcmRhdGEsIGludCBjaCkgewotICAgICAgICBpZiAoY2hhcmRhdGEgPT0gY2gpICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKGNoYXJkYXRhID4gMHhmZmZmIHx8IGNoID4gMHhmZmZmKSAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjaGFyIHVjaDEgPSBDaGFyYWN0ZXIudG9VcHBlckNhc2UoKGNoYXIpY2hhcmRhdGEpOwotICAgICAgICBjaGFyIHVjaDIgPSBDaGFyYWN0ZXIudG9VcHBlckNhc2UoKGNoYXIpY2gpOwotICAgICAgICBpZiAodWNoMSA9PSB1Y2gyKSAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBDaGFyYWN0ZXIudG9Mb3dlckNhc2UodWNoMSkgPT0gQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKHVjaDIpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvcmVnZXgvU2NoZW1hUmVndWxhckV4cHJlc3Npb24uamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvcmVnZXgvU2NoZW1hUmVndWxhckV4cHJlc3Npb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGUyYWRlOC4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3JlZ2V4L1NjaGVtYVJlZ3VsYXJFeHByZXNzaW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5yZWdleDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uWE1MQ2hhcjsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLXB1YmxpYyBjbGFzcyBTY2hlbWFSZWd1bGFyRXhwcmVzc2lvbiBleHRlbmRzIFJlZ3VsYXJFeHByZXNzaW9uCi17Ci0gICAgcHJpdmF0ZSBTY2hlbWFSZWd1bGFyRXhwcmVzc2lvbihTdHJpbmcgcGF0dGVybikKLSAgICB7Ci0gICAgICAgIHN1cGVyKHBhdHRlcm4sICJYIik7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBSZWd1bGFyRXhwcmVzc2lvbiBmb3JQYXR0ZXJuKFN0cmluZyBzKQotICAgIHsKLSAgICAgICAgU2NoZW1hUmVndWxhckV4cHJlc3Npb24gdHJlID0gKFNjaGVtYVJlZ3VsYXJFeHByZXNzaW9uKWtub3duUGF0dGVybnMuZ2V0KHMpOwotICAgICAgICBpZiAodHJlICE9IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gdHJlOwotICAgICAgICByZXR1cm4gbmV3IFJlZ3VsYXJFeHByZXNzaW9uKHMsICJYIik7Ci0gICAgfQotCi0gICAgc3RhdGljIGZpbmFsIE1hcCBrbm93blBhdHRlcm5zID0gYnVpbGRLbm93blBhdHRlcm5NYXAoKTsKLQotICAgIHByaXZhdGUgc3RhdGljIE1hcCBidWlsZEtub3duUGF0dGVybk1hcCgpCi0gICAgewotICAgICAgICBNYXAgcmVzdWx0ID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgcmVzdWx0LnB1dCgiXFxjKyIsIG5ldyBTY2hlbWFSZWd1bGFyRXhwcmVzc2lvbigiXFxjKyIpCi0gICAgICAgICAgICB7IHB1YmxpYyBib29sZWFuIG1hdGNoZXMoU3RyaW5nIHMpIHsgcmV0dXJuIFhNTENoYXIuaXNWYWxpZE5tdG9rZW4ocyk7IH0gfSApOwotICAgICAgICByZXN1bHQucHV0KCJcXGlcXGMqIiwgbmV3IFNjaGVtYVJlZ3VsYXJFeHByZXNzaW9uKCJcXGlcXGMqIikKLSAgICAgICAgICAgIHsgcHVibGljIGJvb2xlYW4gbWF0Y2hlcyhTdHJpbmcgcykgeyByZXR1cm4gWE1MQ2hhci5pc1ZhbGlkTmFtZShzKTsgfSB9ICk7Ci0gICAgICAgIHJlc3VsdC5wdXQoIltcXGktWzpdXVtcXGMtWzpdXSoiLCBuZXcgU2NoZW1hUmVndWxhckV4cHJlc3Npb24oIltcXGktWzpdXVtcXGMtWzpdXSoiKQotICAgICAgICAgICAgeyBwdWJsaWMgYm9vbGVhbiBtYXRjaGVzKFN0cmluZyBzKSB7IHJldHVybiBYTUxDaGFyLmlzVmFsaWROQ05hbWUocyk7IH0gfSApOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvcmVnZXgvVG9rZW4uamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvcmVnZXgvVG9rZW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODkzMTJlZS4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3JlZ2V4L1Rva2VuLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYyICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnJlZ2V4OwotCi1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIG5vZGUgaW4gcGFyc2UgdHJlZS4KLSAqLwotY2xhc3MgVG9rZW4gaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7Ci0gICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gQ09VTlRUT0tFTlMgPSB0cnVlOwotICAgIHN0YXRpYyBpbnQgdG9rZW5zID0gMDsKLQotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ0hBUiA9IDA7ICAgICAgICAgICAgICAgICAgLy8gTGl0ZXJhbCBjaGFyCi0gICAgc3RhdGljIGZpbmFsIGludCBET1QgPSAxMTsgICAgICAgICAgICAgICAgICAvLyAuCi0gICAgc3RhdGljIGZpbmFsIGludCBDT05DQVQgPSAxOyAgICAgICAgICAgICAgICAvLyBYWQotICAgIHN0YXRpYyBmaW5hbCBpbnQgVU5JT04gPSAyOyAgICAgICAgICAgICAgICAgLy8gWHxZfFoKLSAgICBzdGF0aWMgZmluYWwgaW50IENMT1NVUkUgPSAzOyAgICAgICAgICAgICAgIC8vIFgqCi0gICAgc3RhdGljIGZpbmFsIGludCBSQU5HRSA9IDQ7ICAgICAgICAgICAgICAgICAvLyBbYS16QS1aXSBldGMuCi0gICAgc3RhdGljIGZpbmFsIGludCBOUkFOR0UgPSA1OyAgICAgICAgICAgICAgICAvLyBbXmEtekEtWl0gZXRjLgotICAgIHN0YXRpYyBmaW5hbCBpbnQgUEFSRU4gPSA2OyAgICAgICAgICAgICAgICAgLy8gKFgpIG9yICg/OlgpCi0gICAgc3RhdGljIGZpbmFsIGludCBFTVBUWSA9IDc7ICAgICAgICAgICAgICAgICAvLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQU5DSE9SID0gODsgICAgICAgICAgICAgICAgLy8gXiAkIFxiIFxCIFw8IFw+IFxBIFxaIFx6Ci0gICAgc3RhdGljIGZpbmFsIGludCBOT05HUkVFRFlDTE9TVVJFID0gOTsgICAgICAvLyAqPyArPwotICAgIHN0YXRpYyBmaW5hbCBpbnQgU1RSSU5HID0gMTA7ICAgICAgICAgICAgICAgLy8gc3RyaW5ncwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQkFDS1JFRkVSRU5DRSA9IDEyOyAgICAgICAgLy8gYmFjayByZWZlcmVuY2VzCi0gICAgc3RhdGljIGZpbmFsIGludCBMT09LQUhFQUQgPSAyMDsgICAgICAgICAgICAvLyAoPz0uLi4pCi0gICAgc3RhdGljIGZpbmFsIGludCBORUdBVElWRUxPT0tBSEVBRCA9IDIxOyAgICAvLyAoPyEuLi4pCi0gICAgc3RhdGljIGZpbmFsIGludCBMT09LQkVISU5EID0gMjI7ICAgICAgICAgICAvLyAoPzw9Li4uKQotICAgIHN0YXRpYyBmaW5hbCBpbnQgTkVHQVRJVkVMT09LQkVISU5EID0gMjM7ICAgLy8gKD88IS4uLikKLSAgICBzdGF0aWMgZmluYWwgaW50IElOREVQRU5ERU5UID0gMjQ7ICAgICAgICAgIC8vICg/Pi4uLikKLSAgICBzdGF0aWMgZmluYWwgaW50IE1PRElGSUVSR1JPVVAgPSAyNTsgICAgICAgIC8vICg/aW1zLWltczouLi4pCi0gICAgc3RhdGljIGZpbmFsIGludCBDT05ESVRJT04gPSAyNjsgICAgICAgICAgICAvLyAoPyguLi4peWVzfG5vKQotCi0gICAgc3RhdGljIGZpbmFsIGludCBVVEYxNl9NQVggPSAweDEwZmZmZjsKLQotICAgIGludCB0eXBlOwotCi0gICAgc3RhdGljIFRva2VuIHRva2VuX2RvdDsKLSAgICBzdGF0aWMgVG9rZW4gdG9rZW5fMHRvOTsKLSAgICBzdGF0aWMgVG9rZW4gdG9rZW5fd29yZGNoYXJzOwotICAgIHN0YXRpYyBUb2tlbiB0b2tlbl9ub3RfMHRvOTsKLSAgICBzdGF0aWMgVG9rZW4gdG9rZW5fbm90X3dvcmRjaGFyczsKLSAgICBzdGF0aWMgVG9rZW4gdG9rZW5fc3BhY2VzOwotICAgIHN0YXRpYyBUb2tlbiB0b2tlbl9ub3Rfc3BhY2VzOwotICAgIHN0YXRpYyBUb2tlbiB0b2tlbl9lbXB0eTsKLSAgICBzdGF0aWMgVG9rZW4gdG9rZW5fbGluZWJlZ2lubmluZzsKLSAgICBzdGF0aWMgVG9rZW4gdG9rZW5fbGluZWJlZ2lubmluZzI7Ci0gICAgc3RhdGljIFRva2VuIHRva2VuX2xpbmVlbmQ7Ci0gICAgc3RhdGljIFRva2VuIHRva2VuX3N0cmluZ2JlZ2lubmluZzsKLSAgICBzdGF0aWMgVG9rZW4gdG9rZW5fc3RyaW5nZW5kOwotICAgIHN0YXRpYyBUb2tlbiB0b2tlbl9zdHJpbmdlbmQyOwotICAgIHN0YXRpYyBUb2tlbiB0b2tlbl93b3JkZWRnZTsKLSAgICBzdGF0aWMgVG9rZW4gdG9rZW5fbm90X3dvcmRlZGdlOwotICAgIHN0YXRpYyBUb2tlbiB0b2tlbl93b3JkYmVnaW5uaW5nOwotICAgIHN0YXRpYyBUb2tlbiB0b2tlbl93b3JkZW5kOwotICAgIHN0YXRpYyB7Ci0gICAgICAgIFRva2VuLnRva2VuX2VtcHR5ID0gbmV3IFRva2VuKFRva2VuLkVNUFRZKTsKLQotICAgICAgICBUb2tlbi50b2tlbl9saW5lYmVnaW5uaW5nID0gVG9rZW4uY3JlYXRlQW5jaG9yKCdeJyk7Ci0gICAgICAgIFRva2VuLnRva2VuX2xpbmViZWdpbm5pbmcyID0gVG9rZW4uY3JlYXRlQW5jaG9yKCdAJyk7Ci0gICAgICAgIFRva2VuLnRva2VuX2xpbmVlbmQgPSBUb2tlbi5jcmVhdGVBbmNob3IoJyQnKTsKLSAgICAgICAgVG9rZW4udG9rZW5fc3RyaW5nYmVnaW5uaW5nID0gVG9rZW4uY3JlYXRlQW5jaG9yKCdBJyk7Ci0gICAgICAgIFRva2VuLnRva2VuX3N0cmluZ2VuZCA9IFRva2VuLmNyZWF0ZUFuY2hvcigneicpOwotICAgICAgICBUb2tlbi50b2tlbl9zdHJpbmdlbmQyID0gVG9rZW4uY3JlYXRlQW5jaG9yKCdaJyk7Ci0gICAgICAgIFRva2VuLnRva2VuX3dvcmRlZGdlID0gVG9rZW4uY3JlYXRlQW5jaG9yKCdiJyk7Ci0gICAgICAgIFRva2VuLnRva2VuX25vdF93b3JkZWRnZSA9IFRva2VuLmNyZWF0ZUFuY2hvcignQicpOwotICAgICAgICBUb2tlbi50b2tlbl93b3JkYmVnaW5uaW5nID0gVG9rZW4uY3JlYXRlQW5jaG9yKCc8Jyk7Ci0gICAgICAgIFRva2VuLnRva2VuX3dvcmRlbmQgPSBUb2tlbi5jcmVhdGVBbmNob3IoJz4nKTsKLQotICAgICAgICBUb2tlbi50b2tlbl9kb3QgPSBuZXcgVG9rZW4oVG9rZW4uRE9UKTsKLQotICAgICAgICBUb2tlbi50b2tlbl8wdG85ID0gVG9rZW4uY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgVG9rZW4udG9rZW5fMHRvOS5hZGRSYW5nZSgnMCcsICc5Jyk7Ci0gICAgICAgIFRva2VuLnRva2VuX3dvcmRjaGFycyA9IFRva2VuLmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgIFRva2VuLnRva2VuX3dvcmRjaGFycy5hZGRSYW5nZSgnMCcsICc5Jyk7Ci0gICAgICAgIFRva2VuLnRva2VuX3dvcmRjaGFycy5hZGRSYW5nZSgnQScsICdaJyk7Ci0gICAgICAgIFRva2VuLnRva2VuX3dvcmRjaGFycy5hZGRSYW5nZSgnXycsICdfJyk7Ci0gICAgICAgIFRva2VuLnRva2VuX3dvcmRjaGFycy5hZGRSYW5nZSgnYScsICd6Jyk7Ci0gICAgICAgIFRva2VuLnRva2VuX3NwYWNlcyA9IFRva2VuLmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgIFRva2VuLnRva2VuX3NwYWNlcy5hZGRSYW5nZSgnXHQnLCAnXHQnKTsKLSAgICAgICAgVG9rZW4udG9rZW5fc3BhY2VzLmFkZFJhbmdlKCdcbicsICdcbicpOwotICAgICAgICBUb2tlbi50b2tlbl9zcGFjZXMuYWRkUmFuZ2UoJ1xmJywgJ1xmJyk7Ci0gICAgICAgIFRva2VuLnRva2VuX3NwYWNlcy5hZGRSYW5nZSgnXHInLCAnXHInKTsKLSAgICAgICAgVG9rZW4udG9rZW5fc3BhY2VzLmFkZFJhbmdlKCcgJywgJyAnKTsKLQotICAgICAgICBUb2tlbi50b2tlbl9ub3RfMHRvOSA9IFRva2VuLmNvbXBsZW1lbnRSYW5nZXMoVG9rZW4udG9rZW5fMHRvOSk7Ci0gICAgICAgIFRva2VuLnRva2VuX25vdF93b3JkY2hhcnMgPSBUb2tlbi5jb21wbGVtZW50UmFuZ2VzKFRva2VuLnRva2VuX3dvcmRjaGFycyk7Ci0gICAgICAgIFRva2VuLnRva2VuX25vdF9zcGFjZXMgPSBUb2tlbi5jb21wbGVtZW50UmFuZ2VzKFRva2VuLnRva2VuX3NwYWNlcyk7Ci0gICAgfQotCi0gICAgc3RhdGljIFRva2VuLlBhcmVuVG9rZW4gY3JlYXRlTG9vayhpbnQgdHlwZSwgVG9rZW4gY2hpbGQpIHsKLSAgICAgICAgaWYgKENPVU5UVE9LRU5TKSAgVG9rZW4udG9rZW5zICsrOwotICAgICAgICByZXR1cm4gbmV3IFRva2VuLlBhcmVuVG9rZW4odHlwZSwgY2hpbGQsIDApOwotICAgIH0KLSAgICBzdGF0aWMgVG9rZW4uUGFyZW5Ub2tlbiBjcmVhdGVQYXJlbihUb2tlbiBjaGlsZCwgaW50IHBudW1iZXIpIHsKLSAgICAgICAgaWYgKENPVU5UVE9LRU5TKSAgVG9rZW4udG9rZW5zICsrOwotICAgICAgICByZXR1cm4gbmV3IFRva2VuLlBhcmVuVG9rZW4oVG9rZW4uUEFSRU4sIGNoaWxkLCBwbnVtYmVyKTsKLSAgICB9Ci0gICAgc3RhdGljIFRva2VuLkNsb3N1cmVUb2tlbiBjcmVhdGVDbG9zdXJlKFRva2VuIHRvaykgewotICAgICAgICBpZiAoQ09VTlRUT0tFTlMpICBUb2tlbi50b2tlbnMgKys7Ci0gICAgICAgIHJldHVybiBuZXcgVG9rZW4uQ2xvc3VyZVRva2VuKFRva2VuLkNMT1NVUkUsIHRvayk7Ci0gICAgfQotICAgIHN0YXRpYyBUb2tlbi5DbG9zdXJlVG9rZW4gY3JlYXRlTkdDbG9zdXJlKFRva2VuIHRvaykgewotICAgICAgICBpZiAoQ09VTlRUT0tFTlMpICBUb2tlbi50b2tlbnMgKys7Ci0gICAgICAgIHJldHVybiBuZXcgVG9rZW4uQ2xvc3VyZVRva2VuKFRva2VuLk5PTkdSRUVEWUNMT1NVUkUsIHRvayk7Ci0gICAgfQotICAgIHN0YXRpYyBUb2tlbi5Db25jYXRUb2tlbiBjcmVhdGVDb25jYXQoVG9rZW4gdG9rMSwgVG9rZW4gdG9rMikgewotICAgICAgICBpZiAoQ09VTlRUT0tFTlMpICBUb2tlbi50b2tlbnMgKys7Ci0gICAgICAgIHJldHVybiBuZXcgVG9rZW4uQ29uY2F0VG9rZW4odG9rMSwgdG9rMik7Ci0gICAgfQotICAgIHN0YXRpYyBUb2tlbi5VbmlvblRva2VuIGNyZWF0ZUNvbmNhdCgpIHsKLSAgICAgICAgaWYgKENPVU5UVE9LRU5TKSAgVG9rZW4udG9rZW5zICsrOwotICAgICAgICByZXR1cm4gbmV3IFRva2VuLlVuaW9uVG9rZW4oVG9rZW4uQ09OQ0FUKTsgLy8gKioqIEl0IGlzIG5vdCBhIGJ1Zy4KLSAgICB9Ci0gICAgc3RhdGljIFRva2VuLlVuaW9uVG9rZW4gY3JlYXRlVW5pb24oKSB7Ci0gICAgICAgIGlmIChDT1VOVFRPS0VOUykgIFRva2VuLnRva2VucyArKzsKLSAgICAgICAgcmV0dXJuIG5ldyBUb2tlbi5VbmlvblRva2VuKFRva2VuLlVOSU9OKTsKLSAgICB9Ci0gICAgc3RhdGljIFRva2VuIGNyZWF0ZUVtcHR5KCkgewotICAgICAgICByZXR1cm4gVG9rZW4udG9rZW5fZW1wdHk7Ci0gICAgfQotICAgIHN0YXRpYyBSYW5nZVRva2VuIGNyZWF0ZVJhbmdlKCkgewotICAgICAgICBpZiAoQ09VTlRUT0tFTlMpICBUb2tlbi50b2tlbnMgKys7Ci0gICAgICAgIHJldHVybiBuZXcgUmFuZ2VUb2tlbihUb2tlbi5SQU5HRSk7Ci0gICAgfQotICAgIHN0YXRpYyBSYW5nZVRva2VuIGNyZWF0ZU5SYW5nZSgpIHsKLSAgICAgICAgaWYgKENPVU5UVE9LRU5TKSAgVG9rZW4udG9rZW5zICsrOwotICAgICAgICByZXR1cm4gbmV3IFJhbmdlVG9rZW4oVG9rZW4uTlJBTkdFKTsKLSAgICB9Ci0gICAgc3RhdGljIFRva2VuLkNoYXJUb2tlbiBjcmVhdGVDaGFyKGludCBjaCkgewotICAgICAgICBpZiAoQ09VTlRUT0tFTlMpICBUb2tlbi50b2tlbnMgKys7Ci0gICAgICAgIHJldHVybiBuZXcgVG9rZW4uQ2hhclRva2VuKFRva2VuLkNIQVIsIGNoKTsKLSAgICB9Ci0gICAgc3RhdGljIHByaXZhdGUgVG9rZW4uQ2hhclRva2VuIGNyZWF0ZUFuY2hvcihpbnQgY2gpIHsKLSAgICAgICAgaWYgKENPVU5UVE9LRU5TKSAgVG9rZW4udG9rZW5zICsrOwotICAgICAgICByZXR1cm4gbmV3IFRva2VuLkNoYXJUb2tlbihUb2tlbi5BTkNIT1IsIGNoKTsKLSAgICB9Ci0gICAgc3RhdGljIFRva2VuLlN0cmluZ1Rva2VuIGNyZWF0ZUJhY2tSZWZlcmVuY2UoaW50IHJlZm5vKSB7Ci0gICAgICAgIGlmIChDT1VOVFRPS0VOUykgIFRva2VuLnRva2VucyArKzsKLSAgICAgICAgcmV0dXJuIG5ldyBUb2tlbi5TdHJpbmdUb2tlbihUb2tlbi5CQUNLUkVGRVJFTkNFLCBudWxsLCByZWZubyk7Ci0gICAgfQotICAgIHN0YXRpYyBUb2tlbi5TdHJpbmdUb2tlbiBjcmVhdGVTdHJpbmcoU3RyaW5nIHN0cikgewotICAgICAgICBpZiAoQ09VTlRUT0tFTlMpICBUb2tlbi50b2tlbnMgKys7Ci0gICAgICAgIHJldHVybiBuZXcgVG9rZW4uU3RyaW5nVG9rZW4oVG9rZW4uU1RSSU5HLCBzdHIsIDApOwotICAgIH0KLSAgICBzdGF0aWMgVG9rZW4uTW9kaWZpZXJUb2tlbiBjcmVhdGVNb2RpZmllckdyb3VwKFRva2VuIGNoaWxkLCBpbnQgYWRkLCBpbnQgbWFzaykgewotICAgICAgICBpZiAoQ09VTlRUT0tFTlMpICBUb2tlbi50b2tlbnMgKys7Ci0gICAgICAgIHJldHVybiBuZXcgVG9rZW4uTW9kaWZpZXJUb2tlbihjaGlsZCwgYWRkLCBtYXNrKTsKLSAgICB9Ci0gICAgc3RhdGljIFRva2VuLkNvbmRpdGlvblRva2VuIGNyZWF0ZUNvbmRpdGlvbihpbnQgcmVmbm8sIFRva2VuIGNvbmRpdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRva2VuIHllc3BhdCwgVG9rZW4gbm9wYXQpIHsKLSAgICAgICAgaWYgKENPVU5UVE9LRU5TKSAgVG9rZW4udG9rZW5zICsrOwotICAgICAgICByZXR1cm4gbmV3IFRva2VuLkNvbmRpdGlvblRva2VuKHJlZm5vLCBjb25kaXRpb24sIHllc3BhdCwgbm9wYXQpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBUb2tlbihpbnQgdHlwZSkgewotICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEEgbnVtYmVyIG9mIGNoaWxkcmVuLgotICAgICAqLwotICAgIGludCBzaXplKCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgVG9rZW4gZ2V0Q2hpbGQoaW50IGluZGV4KSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICB2b2lkIGFkZENoaWxkKFRva2VuIHRvaykgewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiTm90IHN1cHBvcnRlZC4iKTsKLSAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBSQU5HRSBvciBOUkFOR0UKLSAgICBwcm90ZWN0ZWQgdm9pZCBhZGRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpIHsKLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk5vdCBzdXBwb3J0ZWQuIik7Ci0gICAgfQotICAgIHByb3RlY3RlZCB2b2lkIHNvcnRSYW5nZXMoKSB7Ci0gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJOb3Qgc3VwcG9ydGVkLiIpOwotICAgIH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBjb21wYWN0UmFuZ2VzKCkgewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiTm90IHN1cHBvcnRlZC4iKTsKLSAgICB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgbWVyZ2VSYW5nZXMoVG9rZW4gdG9rKSB7Ci0gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJOb3Qgc3VwcG9ydGVkLiIpOwotICAgIH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzdWJ0cmFjdFJhbmdlcyhUb2tlbiB0b2spIHsKLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk5vdCBzdXBwb3J0ZWQuIik7Ci0gICAgfQotICAgIHByb3RlY3RlZCB2b2lkIGludGVyc2VjdFJhbmdlcyhUb2tlbiB0b2spIHsKLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk5vdCBzdXBwb3J0ZWQuIik7Ci0gICAgfQotICAgIHN0YXRpYyBUb2tlbiBjb21wbGVtZW50UmFuZ2VzKFRva2VuIHRvaykgewotICAgICAgICByZXR1cm4gUmFuZ2VUb2tlbi5jb21wbGVtZW50UmFuZ2VzKHRvayk7Ci0gICAgfQotCi0KLSAgICB2b2lkIHNldE1pbihpbnQgbWluKSB7ICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBDTE9TVVJFCi0gICAgfQotICAgIHZvaWQgc2V0TWF4KGludCBtYXgpIHsgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIENMT1NVUkUKLSAgICB9Ci0gICAgaW50IGdldE1pbigpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgQ0xPU1VSRQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGludCBnZXRNYXgoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIENMT1NVUkUKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBpbnQgZ2V0UmVmZXJlbmNlTnVtYmVyKCkgeyAgICAgICAgICAgICAgICAgIC8vIGZvciBTVFJJTkcKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIFN0cmluZyBnZXRTdHJpbmcoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yIFNUUklORwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBpbnQgZ2V0UGFyZW5OdW1iZXIoKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpbnQgZ2V0Q2hhcigpIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLnRvU3RyaW5nKDApOwotICAgIH0KLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKGludCBvcHRpb25zKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT0gVG9rZW4uRE9UID8gIi4iIDogIiI7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSG93IG1hbnkgY2hhcmFjdGVycyBhcmUgbmVlZGVkPwotICAgICAqLwotICAgIGZpbmFsIGludCBnZXRNaW5MZW5ndGgoKSB7Ci0gICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7Ci0gICAgICAgICAgY2FzZSBDT05DQVQ6Ci0gICAgICAgICAgICBpbnQgc3VtID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyAgaSA8IHRoaXMuc2l6ZSgpOyAgaSArKykKLSAgICAgICAgICAgICAgICBzdW0gKz0gdGhpcy5nZXRDaGlsZChpKS5nZXRNaW5MZW5ndGgoKTsKLSAgICAgICAgICAgIHJldHVybiBzdW07Ci0KLSAgICAgICAgICBjYXNlIENPTkRJVElPTjoKLSAgICAgICAgICBjYXNlIFVOSU9OOgotICAgICAgICAgICAgaWYgKHRoaXMuc2l6ZSgpID09IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBpbnQgcmV0ID0gdGhpcy5nZXRDaGlsZCgwKS5nZXRNaW5MZW5ndGgoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyAgaSA8IHRoaXMuc2l6ZSgpOyAgaSArKykgewotICAgICAgICAgICAgICAgIGludCBtaW4gPSB0aGlzLmdldENoaWxkKGkpLmdldE1pbkxlbmd0aCgpOwotICAgICAgICAgICAgICAgIGlmIChtaW4gPCByZXQpICByZXQgPSBtaW47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmV0OwotCi0gICAgICAgICAgY2FzZSBDTE9TVVJFOgotICAgICAgICAgIGNhc2UgTk9OR1JFRURZQ0xPU1VSRToKLSAgICAgICAgICAgIGlmICh0aGlzLmdldE1pbigpID49IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWluKCkgKiB0aGlzLmdldENoaWxkKDApLmdldE1pbkxlbmd0aCgpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICBjYXNlIEVNUFRZOgotICAgICAgICAgIGNhc2UgQU5DSE9SOgotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICBjYXNlIERPVDoKLSAgICAgICAgICBjYXNlIENIQVI6Ci0gICAgICAgICAgY2FzZSBSQU5HRToKLSAgICAgICAgICBjYXNlIE5SQU5HRToKLSAgICAgICAgICAgIHJldHVybiAxOwotCi0gICAgICAgICAgY2FzZSBJTkRFUEVOREVOVDoKLSAgICAgICAgICBjYXNlIFBBUkVOOgotICAgICAgICAgIGNhc2UgTU9ESUZJRVJHUk9VUDoKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENoaWxkKDApLmdldE1pbkxlbmd0aCgpOwotCi0gICAgICAgICAgY2FzZSBCQUNLUkVGRVJFTkNFOgotICAgICAgICAgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKioqKioqKgotCi0gICAgICAgICAgY2FzZSBTVFJJTkc6Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmcoKS5sZW5ndGgoKTsKLQotICAgICAgICAgIGNhc2UgTE9PS0FIRUFEOgotICAgICAgICAgIGNhc2UgTkVHQVRJVkVMT09LQUhFQUQ6Ci0gICAgICAgICAgY2FzZSBMT09LQkVISU5EOgotICAgICAgICAgIGNhc2UgTkVHQVRJVkVMT09LQkVISU5EOgotICAgICAgICAgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKioqKiogUmVhbGx5PwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUb2tlbiNnZXRNaW5MZW5ndGgoKTogSW52YWxpZCBUeXBlOiAiK3RoaXMudHlwZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmaW5hbCBpbnQgZ2V0TWF4TGVuZ3RoKCkgewotICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkgewotICAgICAgICAgIGNhc2UgQ09OQ0FUOgotICAgICAgICAgICAgaW50IHN1bSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgIGkgPCB0aGlzLnNpemUoKTsgIGkgKyspIHsKLSAgICAgICAgICAgICAgICBpbnQgZCA9IHRoaXMuZ2V0Q2hpbGQoaSkuZ2V0TWF4TGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGQgPCAwKSAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgIHN1bSArPSBkOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHN1bTsKLQotICAgICAgICAgIGNhc2UgQ09ORElUSU9OOgotICAgICAgICAgIGNhc2UgVU5JT046Ci0gICAgICAgICAgICBpZiAodGhpcy5zaXplKCkgPT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGludCByZXQgPSB0aGlzLmdldENoaWxkKDApLmdldE1heExlbmd0aCgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7ICByZXQgPj0gMCAmJiBpIDwgdGhpcy5zaXplKCk7ICBpICsrKSB7Ci0gICAgICAgICAgICAgICAgaW50IG1heCA9IHRoaXMuZ2V0Q2hpbGQoaSkuZ2V0TWF4TGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1heCA8IDApIHsgICAgICAgICAgICAgICAgICAvLyBpbmZpbml0eQotICAgICAgICAgICAgICAgICAgICByZXQgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChtYXggPiByZXQpICByZXQgPSBtYXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmV0OwotCi0gICAgICAgICAgY2FzZSBDTE9TVVJFOgotICAgICAgICAgIGNhc2UgTk9OR1JFRURZQ0xPU1VSRToKLSAgICAgICAgICAgIGlmICh0aGlzLmdldE1heCgpID49IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHRoaXMuY2hpbGQuZ2V0TWF4TGVuZ3RoKCkgPCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyByZXR1cm5zIG1pbnVzIHZhbHVlCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWF4KCkgKiB0aGlzLmdldENoaWxkKDApLmdldE1heExlbmd0aCgpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgICAgICAgY2FzZSBFTVBUWToKLSAgICAgICAgICBjYXNlIEFOQ0hPUjoKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgICAgY2FzZSBDSEFSOgotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgY2FzZSBET1Q6Ci0gICAgICAgICAgY2FzZSBSQU5HRToKLSAgICAgICAgICBjYXNlIE5SQU5HRToKLSAgICAgICAgICAgIHJldHVybiAyOwotCi0gICAgICAgICAgY2FzZSBJTkRFUEVOREVOVDoKLSAgICAgICAgICBjYXNlIFBBUkVOOgotICAgICAgICAgIGNhc2UgTU9ESUZJRVJHUk9VUDoKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENoaWxkKDApLmdldE1heExlbmd0aCgpOwotCi0gICAgICAgICAgY2FzZSBCQUNLUkVGRVJFTkNFOgotICAgICAgICAgICAgcmV0dXJuIC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKioqKioqCi0KLSAgICAgICAgICBjYXNlIFNUUklORzoKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0cmluZygpLmxlbmd0aCgpOwotCi0gICAgICAgICAgY2FzZSBMT09LQUhFQUQ6Ci0gICAgICAgICAgY2FzZSBORUdBVElWRUxPT0tBSEVBRDoKLSAgICAgICAgICBjYXNlIExPT0tCRUhJTkQ6Ci0gICAgICAgICAgY2FzZSBORUdBVElWRUxPT0tCRUhJTkQ6Ci0gICAgICAgICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAqKioqKiBSZWFsbHk/Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlRva2VuI2dldE1heExlbmd0aCgpOiBJbnZhbGlkIFR5cGU6ICIrdGhpcy50eXBlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBmaW5hbCBpbnQgRkNfQ09OVElOVUUgPSAwOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgRkNfVEVSTUlOQUwgPSAxOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgRkNfQU5ZID0gMjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIGlzU2V0KGludCBvcHRpb25zLCBpbnQgZmxhZykgewotICAgICAgICByZXR1cm4gKG9wdGlvbnMgJiBmbGFnKSA9PSBmbGFnOwotICAgIH0KLSAgICBmaW5hbCBpbnQgYW5hbHl6ZUZpcnN0Q2hhcmFjdGVyKFJhbmdlVG9rZW4gcmVzdWx0LCBpbnQgb3B0aW9ucykgewotICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkgewotICAgICAgICAgIGNhc2UgQ09OQ0FUOgotICAgICAgICAgICAgaW50IHJldCA9IEZDX0NPTlRJTlVFOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7ICBpIDwgdGhpcy5zaXplKCk7ICBpICsrKQotICAgICAgICAgICAgICAgIGlmICgocmV0ID0gdGhpcy5nZXRDaGlsZChpKS5hbmFseXplRmlyc3RDaGFyYWN0ZXIocmVzdWx0LCBvcHRpb25zKSkgIT0gRkNfQ09OVElOVUUpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgcmV0dXJuIHJldDsKLQotICAgICAgICAgIGNhc2UgVU5JT046Ci0gICAgICAgICAgICBpZiAodGhpcy5zaXplKCkgPT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gRkNfQ09OVElOVUU7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogIGF8YnxjIC0+IEZDX1RFUk1JTkFMCi0gICAgICAgICAgICAgKiAgYXwufGMgLT4gRkNfQU5ZCi0gICAgICAgICAgICAgKiAgYXxifCAgLT4gRkNfQ09OVElOVUUKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaW50IHJldDIgPSBGQ19DT05USU5VRTsKLSAgICAgICAgICAgIGJvb2xlYW4gaGFzRW1wdHkgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyAgaSA8IHRoaXMuc2l6ZSgpOyAgaSArKykgewotICAgICAgICAgICAgICAgIHJldDIgPSB0aGlzLmdldENoaWxkKGkpLmFuYWx5emVGaXJzdENoYXJhY3RlcihyZXN1bHQsIG9wdGlvbnMpOwotICAgICAgICAgICAgICAgIGlmIChyZXQyID09IEZDX0FOWSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAocmV0MiA9PSBGQ19DT05USU5VRSkKLSAgICAgICAgICAgICAgICAgICAgaGFzRW1wdHkgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGhhc0VtcHR5ID8gRkNfQ09OVElOVUUgOiByZXQyOwotCi0gICAgICAgICAgY2FzZSBDT05ESVRJT046Ci0gICAgICAgICAgICBpbnQgcmV0MyA9IHRoaXMuZ2V0Q2hpbGQoMCkuYW5hbHl6ZUZpcnN0Q2hhcmFjdGVyKHJlc3VsdCwgb3B0aW9ucyk7Ci0gICAgICAgICAgICBpZiAodGhpcy5zaXplKCkgPT0gMSkgIHJldHVybiBGQ19DT05USU5VRTsKLSAgICAgICAgICAgIGlmIChyZXQzID09IEZDX0FOWSkgIHJldHVybiByZXQzOwotICAgICAgICAgICAgaW50IHJldDQgPSB0aGlzLmdldENoaWxkKDEpLmFuYWx5emVGaXJzdENoYXJhY3RlcihyZXN1bHQsIG9wdGlvbnMpOwotICAgICAgICAgICAgaWYgKHJldDQgPT0gRkNfQU5ZKSAgcmV0dXJuIHJldDQ7Ci0gICAgICAgICAgICByZXR1cm4gcmV0MyA9PSBGQ19DT05USU5VRSB8fCByZXQ0ID09IEZDX0NPTlRJTlVFID8gRkNfQ09OVElOVUUgOiBGQ19URVJNSU5BTDsKLQotICAgICAgICAgIGNhc2UgQ0xPU1VSRToKLSAgICAgICAgICBjYXNlIE5PTkdSRUVEWUNMT1NVUkU6Ci0gICAgICAgICAgICB0aGlzLmdldENoaWxkKDApLmFuYWx5emVGaXJzdENoYXJhY3RlcihyZXN1bHQsIG9wdGlvbnMpOwotICAgICAgICAgICAgcmV0dXJuIEZDX0NPTlRJTlVFOwotCi0gICAgICAgICAgY2FzZSBFTVBUWToKLSAgICAgICAgICBjYXNlIEFOQ0hPUjoKLSAgICAgICAgICAgIHJldHVybiBGQ19DT05USU5VRTsKLQotICAgICAgICAgIGNhc2UgQ0hBUjoKLSAgICAgICAgICAgIGludCBjaCA9IHRoaXMuZ2V0Q2hhcigpOwotICAgICAgICAgICAgcmVzdWx0LmFkZFJhbmdlKGNoLCBjaCk7Ci0gICAgICAgICAgICBpZiAoY2ggPCAweDEwMDAwICYmIGlzU2V0KG9wdGlvbnMsIFJlZ3VsYXJFeHByZXNzaW9uLklHTk9SRV9DQVNFKSkgewotICAgICAgICAgICAgICAgIGNoID0gQ2hhcmFjdGVyLnRvVXBwZXJDYXNlKChjaGFyKWNoKTsKLSAgICAgICAgICAgICAgICByZXN1bHQuYWRkUmFuZ2UoY2gsIGNoKTsKLSAgICAgICAgICAgICAgICBjaCA9IENoYXJhY3Rlci50b0xvd2VyQ2FzZSgoY2hhciljaCk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFkZFJhbmdlKGNoLCBjaCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gRkNfVEVSTUlOQUw7Ci0KLSAgICAgICAgICBjYXNlIERPVDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICoqKioKLSAgICAgICAgICAgIGlmIChpc1NldChvcHRpb25zLCBSZWd1bGFyRXhwcmVzc2lvbi5TSU5HTEVfTElORSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRkNfQ09OVElOVUU7ICAgICAgICAgICAgIC8vICoqKiogV2UgY2FuIG5vdCBvcHRpbWl6ZS4KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZDX0NPTlRJTlVFOwotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgcmVzdWx0LmFkZFJhbmdlKDAsIFJlZ3VsYXJFeHByZXNzaW9uLkxJTkVfRkVFRC0xKTsKLSAgICAgICAgICAgICAgICByZXN1bHQuYWRkUmFuZ2UoUmVndWxhckV4cHJlc3Npb24uTElORV9GRUVEKzEsIFJlZ3VsYXJFeHByZXNzaW9uLkNBUlJJQUdFX1JFVFVSTi0xKTsKLSAgICAgICAgICAgICAgICByZXN1bHQuYWRkUmFuZ2UoUmVndWxhckV4cHJlc3Npb24uQ0FSUklBR0VfUkVUVVJOKzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ3VsYXJFeHByZXNzaW9uLkxJTkVfU0VQQVJBVE9SLTEpOwotICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRSYW5nZShSZWd1bGFyRXhwcmVzc2lvbi5QQVJBR1JBUEhfU0VQQVJBVE9SKzEsIFVURjE2X01BWCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgIGNhc2UgUkFOR0U6Ci0gICAgICAgICAgICBpZiAoaXNTZXQob3B0aW9ucywgUmVndWxhckV4cHJlc3Npb24uSUdOT1JFX0NBU0UpKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0Lm1lcmdlUmFuZ2VzKCgoUmFuZ2VUb2tlbil0aGlzKS5nZXRDYXNlSW5zZW5zaXRpdmVUb2tlbigpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0Lm1lcmdlUmFuZ2VzKHRoaXMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEZDX1RFUk1JTkFMOwotCi0gICAgICAgICAgY2FzZSBOUkFOR0U6ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAqKioqCi0gICAgICAgICAgICBpZiAoaXNTZXQob3B0aW9ucywgUmVndWxhckV4cHJlc3Npb24uSUdOT1JFX0NBU0UpKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0Lm1lcmdlUmFuZ2VzKFRva2VuLmNvbXBsZW1lbnRSYW5nZXMoKChSYW5nZVRva2VuKXRoaXMpLmdldENhc2VJbnNlbnNpdGl2ZVRva2VuKCkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0Lm1lcmdlUmFuZ2VzKFRva2VuLmNvbXBsZW1lbnRSYW5nZXModGhpcykpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEZDX1RFUk1JTkFMOwotCi0gICAgICAgICAgY2FzZSBJTkRFUEVOREVOVDoKLSAgICAgICAgICBjYXNlIFBBUkVOOgotICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2hpbGQoMCkuYW5hbHl6ZUZpcnN0Q2hhcmFjdGVyKHJlc3VsdCwgb3B0aW9ucyk7Ci0KLSAgICAgICAgICBjYXNlIE1PRElGSUVSR1JPVVA6Ci0gICAgICAgICAgICBvcHRpb25zIHw9ICgoTW9kaWZpZXJUb2tlbil0aGlzKS5nZXRPcHRpb25zKCk7Ci0gICAgICAgICAgICBvcHRpb25zICY9IH4oKE1vZGlmaWVyVG9rZW4pdGhpcykuZ2V0T3B0aW9uc01hc2soKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENoaWxkKDApLmFuYWx5emVGaXJzdENoYXJhY3RlcihyZXN1bHQsIG9wdGlvbnMpOwotCi0gICAgICAgICAgY2FzZSBCQUNLUkVGRVJFTkNFOgotICAgICAgICAgICAgcmVzdWx0LmFkZFJhbmdlKDAsIFVURjE2X01BWCk7ICAvLyAqKioqIFdlIGNhbiBub3Qgb3B0aW1pemUuCi0gICAgICAgICAgICByZXR1cm4gRkNfQU5ZOwotCi0gICAgICAgICAgY2FzZSBTVFJJTkc6Ci0gICAgICAgICAgICBpbnQgY2hhID0gdGhpcy5nZXRTdHJpbmcoKS5jaGFyQXQoMCk7Ci0gICAgICAgICAgICBpbnQgY2gyOwotICAgICAgICAgICAgaWYgKFJFVXRpbC5pc0hpZ2hTdXJyb2dhdGUoY2hhKQotICAgICAgICAgICAgICAgICYmIHRoaXMuZ2V0U3RyaW5nKCkubGVuZ3RoKCkgPj0gMgotICAgICAgICAgICAgICAgICYmIFJFVXRpbC5pc0xvd1N1cnJvZ2F0ZSgoY2gyID0gdGhpcy5nZXRTdHJpbmcoKS5jaGFyQXQoMSkpKSkKLSAgICAgICAgICAgICAgICBjaGEgPSBSRVV0aWwuY29tcG9zZUZyb21TdXJyb2dhdGVzKGNoYSwgY2gyKTsKLSAgICAgICAgICAgIHJlc3VsdC5hZGRSYW5nZShjaGEsIGNoYSk7Ci0gICAgICAgICAgICBpZiAoY2hhIDwgMHgxMDAwMCAmJiBpc1NldChvcHRpb25zLCBSZWd1bGFyRXhwcmVzc2lvbi5JR05PUkVfQ0FTRSkpIHsKLSAgICAgICAgICAgICAgICBjaGEgPSBDaGFyYWN0ZXIudG9VcHBlckNhc2UoKGNoYXIpY2hhKTsKLSAgICAgICAgICAgICAgICByZXN1bHQuYWRkUmFuZ2UoY2hhLCBjaGEpOwotICAgICAgICAgICAgICAgIGNoYSA9IENoYXJhY3Rlci50b0xvd2VyQ2FzZSgoY2hhciljaGEpOwotICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRSYW5nZShjaGEsIGNoYSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gRkNfVEVSTUlOQUw7Ci0KLSAgICAgICAgICBjYXNlIExPT0tBSEVBRDoKLSAgICAgICAgICBjYXNlIE5FR0FUSVZFTE9PS0FIRUFEOgotICAgICAgICAgIGNhc2UgTE9PS0JFSElORDoKLSAgICAgICAgICBjYXNlIE5FR0FUSVZFTE9PS0JFSElORDoKLSAgICAgICAgICAgIHJldHVybiBGQ19DT05USU5VRTsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVG9rZW4jYW5hbHl6ZUhlYWRDaGFyYWN0ZXIoKTogSW52YWxpZCBUeXBlOiAiK3RoaXMudHlwZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gaXNTaG9ydGVyVGhhbihUb2tlbiB0b2spIHsKLSAgICAgICAgaWYgKHRvayA9PSBudWxsKSAgcmV0dXJuIGZhbHNlOwotICAgICAgICAvKgotICAgICAgICBpbnQgbXlsZW5ndGg7Ci0gICAgICAgIGlmICh0aGlzLnR5cGUgPT0gU1RSSU5HKSAgbXlsZW5ndGggPSB0aGlzLmdldFN0cmluZygpLmxlbmd0aCgpOwotICAgICAgICBlbHNlIGlmICh0aGlzLnR5cGUgPT0gQ0hBUikgIG15bGVuZ3RoID0gdGhpcy5nZXRDaGFyKCkgPj0gMHgxMDAwMCA/IDIgOiAxOwotICAgICAgICBlbHNlIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbnRlcm5hbCBFcnJvcjogSWxsZWdhbCB0eXBlOiAiK3RoaXMudHlwZSk7Ci0gICAgICAgIGludCBvdGhlcmxlbmd0aDsKLSAgICAgICAgaWYgKHRvay50eXBlID09IFNUUklORykgIG90aGVybGVuZ3RoID0gdG9rLmdldFN0cmluZygpLmxlbmd0aCgpOwotICAgICAgICBlbHNlIGlmICh0b2sudHlwZSA9PSBDSEFSKSAgb3RoZXJsZW5ndGggPSB0b2suZ2V0Q2hhcigpID49IDB4MTAwMDAgPyAyIDogMTsKLSAgICAgICAgZWxzZSB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW50ZXJuYWwgRXJyb3I6IElsbGVnYWwgdHlwZTogIit0b2sudHlwZSk7Ci0gICAgICAgICovCi0gICAgICAgIGludCBteWxlbmd0aDsKLSAgICAgICAgaWYgKHRoaXMudHlwZSA9PSBTVFJJTkcpICBteWxlbmd0aCA9IHRoaXMuZ2V0U3RyaW5nKCkubGVuZ3RoKCk7Ci0gICAgICAgIGVsc2UgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkludGVybmFsIEVycm9yOiBJbGxlZ2FsIHR5cGU6ICIrdGhpcy50eXBlKTsKLSAgICAgICAgaW50IG90aGVybGVuZ3RoOwotICAgICAgICBpZiAodG9rLnR5cGUgPT0gU1RSSU5HKSAgb3RoZXJsZW5ndGggPSB0b2suZ2V0U3RyaW5nKCkubGVuZ3RoKCk7Ci0gICAgICAgIGVsc2UgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkludGVybmFsIEVycm9yOiBJbGxlZ2FsIHR5cGU6ICIrdG9rLnR5cGUpOwotICAgICAgICByZXR1cm4gbXlsZW5ndGggPCBvdGhlcmxlbmd0aDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY2xhc3MgRml4ZWRTdHJpbmdDb250YWluZXIgewotICAgICAgICBUb2tlbiB0b2tlbiA9IG51bGw7Ci0gICAgICAgIGludCBvcHRpb25zID0gMDsKLSAgICAgICAgRml4ZWRTdHJpbmdDb250YWluZXIoKSB7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmaW5hbCB2b2lkIGZpbmRGaXhlZFN0cmluZyhGaXhlZFN0cmluZ0NvbnRhaW5lciBjb250YWluZXIsIGludCBvcHRpb25zKSB7Ci0gICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7Ci0gICAgICAgICAgY2FzZSBDT05DQVQ6Ci0gICAgICAgICAgICBUb2tlbiBwcmV2VG9rZW4gPSBudWxsOwotICAgICAgICAgICAgaW50IHByZXZPcHRpb25zID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyAgaSA8IHRoaXMuc2l6ZSgpOyAgaSArKykgewotICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2hpbGQoaSkuZmluZEZpeGVkU3RyaW5nKGNvbnRhaW5lciwgb3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgaWYgKHByZXZUb2tlbiA9PSBudWxsIHx8IHByZXZUb2tlbi5pc1Nob3J0ZXJUaGFuKGNvbnRhaW5lci50b2tlbikpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJldlRva2VuID0gY29udGFpbmVyLnRva2VuOwotICAgICAgICAgICAgICAgICAgICBwcmV2T3B0aW9ucyA9IGNvbnRhaW5lci5vcHRpb25zOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRhaW5lci50b2tlbiA9IHByZXZUb2tlbjsKLSAgICAgICAgICAgIGNvbnRhaW5lci5vcHRpb25zID0gcHJldk9wdGlvbnM7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBjYXNlIFVOSU9OOgotICAgICAgICAgIGNhc2UgQ0xPU1VSRToKLSAgICAgICAgICBjYXNlIE5PTkdSRUVEWUNMT1NVUkU6Ci0gICAgICAgICAgY2FzZSBFTVBUWToKLSAgICAgICAgICBjYXNlIEFOQ0hPUjoKLSAgICAgICAgICBjYXNlIFJBTkdFOgotICAgICAgICAgIGNhc2UgRE9UOgotICAgICAgICAgIGNhc2UgTlJBTkdFOgotICAgICAgICAgIGNhc2UgQkFDS1JFRkVSRU5DRToKLSAgICAgICAgICBjYXNlIExPT0tBSEVBRDoKLSAgICAgICAgICBjYXNlIE5FR0FUSVZFTE9PS0FIRUFEOgotICAgICAgICAgIGNhc2UgTE9PS0JFSElORDoKLSAgICAgICAgICBjYXNlIE5FR0FUSVZFTE9PS0JFSElORDoKLSAgICAgICAgICBjYXNlIENPTkRJVElPTjoKLSAgICAgICAgICAgIGNvbnRhaW5lci50b2tlbiA9IG51bGw7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICBjYXNlIENIQVI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBDSEFSIHRva2Vucy4KLSAgICAgICAgICAgIGNvbnRhaW5lci50b2tlbiA9IG51bGw7ICAgICAgICAgICAgIC8vICoqCi0gICAgICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAqKgotCi0gICAgICAgICAgY2FzZSBTVFJJTkc6Ci0gICAgICAgICAgICBjb250YWluZXIudG9rZW4gPSB0aGlzOwotICAgICAgICAgICAgY29udGFpbmVyLm9wdGlvbnMgPSBvcHRpb25zOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgY2FzZSBJTkRFUEVOREVOVDoKLSAgICAgICAgICBjYXNlIFBBUkVOOgotICAgICAgICAgICAgdGhpcy5nZXRDaGlsZCgwKS5maW5kRml4ZWRTdHJpbmcoY29udGFpbmVyLCBvcHRpb25zKTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGNhc2UgTU9ESUZJRVJHUk9VUDoKLSAgICAgICAgICAgIG9wdGlvbnMgfD0gKChNb2RpZmllclRva2VuKXRoaXMpLmdldE9wdGlvbnMoKTsKLSAgICAgICAgICAgIG9wdGlvbnMgJj0gfigoTW9kaWZpZXJUb2tlbil0aGlzKS5nZXRPcHRpb25zTWFzaygpOwotICAgICAgICAgICAgdGhpcy5nZXRDaGlsZCgwKS5maW5kRml4ZWRTdHJpbmcoY29udGFpbmVyLCBvcHRpb25zKTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVG9rZW4jZmluZEZpeGVkU3RyaW5nKCk6IEludmFsaWQgVHlwZTogIit0aGlzLnR5cGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbGVhbiBtYXRjaChpbnQgY2gpIHsKLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk5GQUFycm93I21hdGNoKCk6IEludGVybmFsIGVycm9yOiAiK3RoaXMudHlwZSk7Ci0gICAgfQotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgSGFzaHRhYmxlIGNhdGVnb3JpZXMgPSBuZXcgSGFzaHRhYmxlKCk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgSGFzaHRhYmxlIGNhdGVnb3JpZXMyID0gbmV3IEhhc2h0YWJsZSgpOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIGNhdGVnb3J5TmFtZXMgPSB7Ci0gICAgICAgICJDbiIsICJMdSIsICJMbCIsICJMdCIsICJMbSIsICJMbyIsICJNbiIsICJNZSIsICJNYyIsICJOZCIsCi0gICAgICAgICJObCIsICJObyIsICJacyIsICJabCIsICJacCIsICJDYyIsICJDZiIsIG51bGwsICJDbyIsICJDcyIsCi0gICAgICAgICJQZCIsICJQcyIsICJQZSIsICJQYyIsICJQbyIsICJTbSIsICJTYyIsICJTayIsICJTbyIsIC8vIDI4Ci0gICAgICAgICJQaSIsICJQZiIsICAvLyAyOSwgMzAKLSAgICAgICAgIkwiLCAiTSIsICJOIiwgIloiLCAiQyIsICJQIiwgIlMiLCAgICAgIC8vIDMxLTM3Ci0gICAgfTsKLQotICAgIC8vIFNjaGVtYSBSZWMuIHtEYXRhdHlwZXN9IC0gUHVuY3R1YXRpb24gCi0gICAgc3RhdGljIGZpbmFsIGludCBDSEFSX0lOSVRfUVVPVEUgID0gMjk7ICAgICAvLyBQaSAtIGluaXRpYWwgcXVvdGUKLSAgICBzdGF0aWMgZmluYWwgaW50IENIQVJfRklOQUxfUVVPVEUgPSAzMDsgICAgIC8vIFBmIC0gZmluYWwgcXVvdGUKLSAgICBzdGF0aWMgZmluYWwgaW50IENIQVJfTEVUVEVSID0gMzE7Ci0gICAgc3RhdGljIGZpbmFsIGludCBDSEFSX01BUksgPSAzMjsKLSAgICBzdGF0aWMgZmluYWwgaW50IENIQVJfTlVNQkVSID0gMzM7Ci0gICAgc3RhdGljIGZpbmFsIGludCBDSEFSX1NFUEFSQVRPUiA9IDM0OwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ0hBUl9PVEhFUiA9IDM1OwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ0hBUl9QVU5DVFVBVElPTiA9IDM2OwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ0hBUl9TWU1CT0wgPSAzNzsKLSAgICAKLSAgICAvL2Jsb2NrTmFtZXMgaW4gVU5JQ09ERSAzLjEgdGhhdCBzdXBwb3J0ZWQgYnkgWE1MIFNjaGVtYSBSRUMgICAgICAgICAgICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gYmxvY2tOYW1lcyA9IHsKLSAgICAgICAgLyowMDAwLi4wMDdGOyovICJCYXNpYyBMYXRpbiIsCi0gICAgICAgIC8qMDA4MC4uMDBGRjsqLyAiTGF0aW4tMSBTdXBwbGVtZW50IiwKLSAgICAgICAgLyowMTAwLi4wMTdGOyovICJMYXRpbiBFeHRlbmRlZC1BIiwKLSAgICAgICAgLyowMTgwLi4wMjRGOyovICJMYXRpbiBFeHRlbmRlZC1CIiwKLSAgICAgICAgLyowMjUwLi4wMkFGOyovICJJUEEgRXh0ZW5zaW9ucyIsCi0gICAgICAgIC8qMDJCMC4uMDJGRjsqLyAiU3BhY2luZyBNb2RpZmllciBMZXR0ZXJzIiwKLSAgICAgICAgLyowMzAwLi4wMzZGOyovICJDb21iaW5pbmcgRGlhY3JpdGljYWwgTWFya3MiLAotICAgICAgICAvKjAzNzAuLjAzRkY7Ki8gIkdyZWVrIiwKLSAgICAgICAgLyowNDAwLi4wNEZGOyovICJDeXJpbGxpYyIsCi0gICAgICAgIC8qMDUzMC4uMDU4RjsqLyAiQXJtZW5pYW4iLAotICAgICAgICAvKjA1OTAuLjA1RkY7Ki8gIkhlYnJldyIsCi0gICAgICAgIC8qMDYwMC4uMDZGRjsqLyAiQXJhYmljIiwKLSAgICAgICAgLyowNzAwLi4wNzRGOyovICJTeXJpYWMiLCAgCi0gICAgICAgIC8qMDc4MC4uMDdCRjsqLyAiVGhhYW5hIiwKLSAgICAgICAgLyowOTAwLi4wOTdGOyovICJEZXZhbmFnYXJpIiwKLSAgICAgICAgLyowOTgwLi4wOUZGOyovICJCZW5nYWxpIiwKLSAgICAgICAgLyowQTAwLi4wQTdGOyovICJHdXJtdWtoaSIsCi0gICAgICAgIC8qMEE4MC4uMEFGRjsqLyAiR3VqYXJhdGkiLAotICAgICAgICAvKjBCMDAuLjBCN0Y7Ki8gIk9yaXlhIiwKLSAgICAgICAgLyowQjgwLi4wQkZGOyovICJUYW1pbCIsCi0gICAgICAgIC8qMEMwMC4uMEM3RjsqLyAiVGVsdWd1IiwKLSAgICAgICAgLyowQzgwLi4wQ0ZGOyovICJLYW5uYWRhIiwKLSAgICAgICAgLyowRDAwLi4wRDdGOyovICJNYWxheWFsYW0iLAotICAgICAgICAvKjBEODAuLjBERkY7Ki8gIlNpbmhhbGEiLAotICAgICAgICAvKjBFMDAuLjBFN0Y7Ki8gIlRoYWkiLAotICAgICAgICAvKjBFODAuLjBFRkY7Ki8gIkxhbyIsCi0gICAgICAgIC8qMEYwMC4uMEZGRjsqLyAiVGliZXRhbiIsCi0gICAgICAgIC8qMTAwMC4uMTA5RjsqLyAiTXlhbm1hciIsIAotICAgICAgICAvKjEwQTAuLjEwRkY7Ki8gIkdlb3JnaWFuIiwKLSAgICAgICAgLyoxMTAwLi4xMUZGOyovICJIYW5ndWwgSmFtbyIsCi0gICAgICAgIC8qMTIwMC4uMTM3RjsqLyAiRXRoaW9waWMiLAotICAgICAgICAvKjEzQTAuLjEzRkY7Ki8gIkNoZXJva2VlIiwKLSAgICAgICAgLyoxNDAwLi4xNjdGOyovICJVbmlmaWVkIENhbmFkaWFuIEFib3JpZ2luYWwgU3lsbGFiaWNzIiwKLSAgICAgICAgLyoxNjgwLi4xNjlGOyovICJPZ2hhbSIsCi0gICAgICAgIC8qMTZBMC4uMTZGRjsqLyAiUnVuaWMiLAotICAgICAgICAvKjE3ODAuLjE3RkY7Ki8gIktobWVyIiwKLSAgICAgICAgLyoxODAwLi4xOEFGOyovICJNb25nb2xpYW4iLAotICAgICAgICAvKjFFMDAuLjFFRkY7Ki8gIkxhdGluIEV4dGVuZGVkIEFkZGl0aW9uYWwiLAotICAgICAgICAvKjFGMDAuLjFGRkY7Ki8gIkdyZWVrIEV4dGVuZGVkIiwKLSAgICAgICAgLyoyMDAwLi4yMDZGOyovICJHZW5lcmFsIFB1bmN0dWF0aW9uIiwKLSAgICAgICAgLyoyMDcwLi4yMDlGOyovICJTdXBlcnNjcmlwdHMgYW5kIFN1YnNjcmlwdHMiLAotICAgICAgICAvKjIwQTAuLjIwQ0Y7Ki8gIkN1cnJlbmN5IFN5bWJvbHMiLAotICAgICAgICAvKjIwRDAuLjIwRkY7Ki8gIkNvbWJpbmluZyBNYXJrcyBmb3IgU3ltYm9scyIsCi0gICAgICAgIC8qMjEwMC4uMjE0RjsqLyAiTGV0dGVybGlrZSBTeW1ib2xzIiwKLSAgICAgICAgLyoyMTUwLi4yMThGOyovICJOdW1iZXIgRm9ybXMiLAotICAgICAgICAvKjIxOTAuLjIxRkY7Ki8gIkFycm93cyIsCi0gICAgICAgIC8qMjIwMC4uMjJGRjsqLyAiTWF0aGVtYXRpY2FsIE9wZXJhdG9ycyIsCi0gICAgICAgIC8qMjMwMC4uMjNGRjsqLyAiTWlzY2VsbGFuZW91cyBUZWNobmljYWwiLAotICAgICAgICAvKjI0MDAuLjI0M0Y7Ki8gIkNvbnRyb2wgUGljdHVyZXMiLAotICAgICAgICAvKjI0NDAuLjI0NUY7Ki8gIk9wdGljYWwgQ2hhcmFjdGVyIFJlY29nbml0aW9uIiwKLSAgICAgICAgLyoyNDYwLi4yNEZGOyovICJFbmNsb3NlZCBBbHBoYW51bWVyaWNzIiwKLSAgICAgICAgLyoyNTAwLi4yNTdGOyovICJCb3ggRHJhd2luZyIsCi0gICAgICAgIC8qMjU4MC4uMjU5RjsqLyAiQmxvY2sgRWxlbWVudHMiLAotICAgICAgICAvKjI1QTAuLjI1RkY7Ki8gIkdlb21ldHJpYyBTaGFwZXMiLAotICAgICAgICAvKjI2MDAuLjI2RkY7Ki8gIk1pc2NlbGxhbmVvdXMgU3ltYm9scyIsCi0gICAgICAgIC8qMjcwMC4uMjdCRjsqLyAiRGluZ2JhdHMiLAotICAgICAgICAvKjI4MDAuLjI4RkY7Ki8gIkJyYWlsbGUgUGF0dGVybnMiLAotICAgICAgICAvKjJFODAuLjJFRkY7Ki8gIkNKSyBSYWRpY2FscyBTdXBwbGVtZW50IiwKLSAgICAgICAgLyoyRjAwLi4yRkRGOyovICJLYW5neGkgUmFkaWNhbHMiLAotICAgICAgICAvKjJGRjAuLjJGRkY7Ki8gIklkZW9ncmFwaGljIERlc2NyaXB0aW9uIENoYXJhY3RlcnMiLAotICAgICAgICAvKjMwMDAuLjMwM0Y7Ki8gIkNKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiIsCi0gICAgICAgIC8qMzA0MC4uMzA5RjsqLyAiSGlyYWdhbmEiLAotICAgICAgICAvKjMwQTAuLjMwRkY7Ki8gIkthdGFrYW5hIiwKLSAgICAgICAgLyozMTAwLi4zMTJGOyovICJCb3BvbW9mbyIsCi0gICAgICAgIC8qMzEzMC4uMzE4RjsqLyAiSGFuZ3VsIENvbXBhdGliaWxpdHkgSmFtbyIsCi0gICAgICAgIC8qMzE5MC4uMzE5RjsqLyAiS2FuYnVuIiwKLSAgICAgICAgLyozMUEwLi4zMUJGOyovICJCb3BvbW9mbyBFeHRlbmRlZCIsCi0gICAgICAgIC8qMzIwMC4uMzJGRjsqLyAiRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyIsCi0gICAgICAgIC8qMzMwMC4uMzNGRjsqLyAiQ0pLIENvbXBhdGliaWxpdHkiLAotICAgICAgICAvKjM0MDAuLjREQjU7Ki8gIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEiLAotICAgICAgICAvKjRFMDAuLjlGRkY7Ki8gIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMiLAotICAgICAgICAvKkEwMDAuLkE0OEY7Ki8gIllpIFN5bGxhYmxlcyIsCi0gICAgICAgIC8qQTQ5MC4uQTRDRjsqLyAiWWkgUmFkaWNhbHMiLAotICAgICAgICAvKkFDMDAuLkQ3QTM7Ki8gIkhhbmd1bCBTeWxsYWJsZXMiLAotICAgICAgICAvKkQ4MDAuLkRCN0Y7Ki8gIkhpZ2ggU3Vycm9nYXRlcyIsCi0gICAgICAgIC8qREI4MC4uREJGRjsqLyAiSGlnaCBQcml2YXRlIFVzZSBTdXJyb2dhdGVzIiwKLSAgICAgICAgLypEQzAwLi5ERkZGOyovICJMb3cgU3Vycm9nYXRlcyIsCi0gICAgICAgIC8qRTAwMC4uRjhGRjsqLyAiUHJpdmF0ZSBVc2UiLAotICAgICAgICAvKkY5MDAuLkZBRkY7Ki8gIkNKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMiLAotICAgICAgICAvKkZCMDAuLkZCNEY7Ki8gIkFscGhhYmV0aWMgUHJlc2VudGF0aW9uIEZvcm1zIiwKLSAgICAgICAgLypGQjUwLi5GREZGOyovICJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUEiLAotICAgICAgICAvKkZFMjAuLkZFMkY7Ki8gIkNvbWJpbmluZyBIYWxmIE1hcmtzIiwKLSAgICAgICAgLypGRTMwLi5GRTRGOyovICJDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyIsCi0gICAgICAgIC8qRkU1MC4uRkU2RjsqLyAiU21hbGwgRm9ybSBWYXJpYW50cyIsCi0gICAgICAgIC8qRkU3MC4uRkVGRTsqLyAiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CIiwKLSAgICAgICAgLypGRUZGLi5GRUZGOyovICJTcGVjaWFscyIsCi0gICAgICAgIC8qRkYwMC4uRkZFRjsqLyAiSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMiLAotICAgICAgICAgLy9taXNzaW5nIFNwZWNpYWxzIGFkZCBtYW51YWxseQotICAgICAgICAvKjEwMzAwLi4xMDMyRjsqLyAiT2xkIEl0YWxpYyIsCQkvLyA4NwotICAgICAgICAvKjEwMzMwLi4xMDM0RjsqLyAiR290aGljIiwKLSAgICAgICAgLyoxMDQwMC4uMTA0NEY7Ki8gIkRlc2VyZXQiLAotICAgICAgICAvKjFEMDAwLi4xRDBGRjsqLyAiQnl6YW50aW5lIE11c2ljYWwgU3ltYm9scyIsCi0gICAgICAgIC8qMUQxMDAuLjFEMUZGOyovICJNdXNpY2FsIFN5bWJvbHMiLAotICAgICAgICAvKjFENDAwLi4xRDdGRjsqLyAiTWF0aGVtYXRpY2FsIEFscGhhbnVtZXJpYyBTeW1ib2xzIiwKLSAgICAgICAgLyoyMDAwMC4uMkE2RDY7Ki8gIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEIiLAotICAgICAgICAvKjJGODAwLi4yRkExRjsqLyAiQ0pLIENvbXBhdGliaWxpdHkgSWRlb2dyYXBocyBTdXBwbGVtZW50IiwKLSAgICAgICAgLypFMDAwMC4uRTAwN0Y7Ki8gIlRhZ3MiLAotICAgICAgICAvL21pc3NpbmcgMiBwcml2YXRlIHVzZSBhZGQgbWFudWFsbHkKLQotICAgIH07Ci0gICAgLy9BREQgVEhPU0UgTUFOVUFMTFkKLSAgICAvL0YwMDAwLi5GRkZGRDsgIlByaXZhdGUgVXNlIiwKLSAgICAvLzEwMDAwMC4uMTBGRkZEOyAiUHJpdmF0ZSBVc2UiCi0gICAgLy9GRkYwLi5GRkZEOyAiU3BlY2lhbHMiLCAKLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIGJsb2NrUmFuZ2VzID0gCi0gICAgICAgIlx1MDAwMFx1MDA3Rlx1MDA4MFx1MDBGRlx1MDEwMFx1MDE3Rlx1MDE4MFx1MDI0Rlx1MDI1MFx1MDJBRlx1MDJCMFx1MDJGRlx1MDMwMFx1MDM2RiIKLSAgICAgICAgKyJcdTAzNzBcdTAzRkZcdTA0MDBcdTA0RkZcdTA1MzBcdTA1OEZcdTA1OTBcdTA1RkZcdTA2MDBcdTA2RkZcdTA3MDBcdTA3NEZcdTA3ODBcdTA3QkYiCi0gICAgICAgICsiXHUwOTAwXHUwOTdGXHUwOTgwXHUwOUZGXHUwQTAwXHUwQTdGXHUwQTgwXHUwQUZGXHUwQjAwXHUwQjdGXHUwQjgwXHUwQkZGXHUwQzAwXHUwQzdGXHUwQzgwXHUwQ0ZGIgotICAgICAgICArIlx1MEQwMFx1MEQ3Rlx1MEQ4MFx1MERGRlx1MEUwMFx1MEU3Rlx1MEU4MFx1MEVGRlx1MEYwMFx1MEZGRlx1MTAwMFx1MTA5Rlx1MTBBMFx1MTBGRlx1MTEwMFx1MTFGRiIKLSAgICAgICAgKyJcdTEyMDBcdTEzN0ZcdTEzQTBcdTEzRkZcdTE0MDBcdTE2N0ZcdTE2ODBcdTE2OUZcdTE2QTBcdTE2RkZcdTE3ODBcdTE3RkZcdTE4MDBcdTE4QUZcdTFFMDBcdTFFRkYiCi0gICAgICAgICsiXHUxRjAwXHUxRkZGXHUyMDAwXHUyMDZGXHUyMDcwXHUyMDlGXHUyMEEwXHUyMENGXHUyMEQwXHUyMEZGXHUyMTAwXHUyMTRGXHUyMTUwXHUyMThGXHUyMTkwXHUyMUZGXHUyMjAwXHUyMkZGIgotICAgICAgICArIlx1MjMwMFx1MjNGRlx1MjQwMFx1MjQzRlx1MjQ0MFx1MjQ1Rlx1MjQ2MFx1MjRGRlx1MjUwMFx1MjU3Rlx1MjU4MFx1MjU5Rlx1MjVBMFx1MjVGRlx1MjYwMFx1MjZGRlx1MjcwMFx1MjdCRiIKLSAgICAgICAgKyJcdTI4MDBcdTI4RkZcdTJFODBcdTJFRkZcdTJGMDBcdTJGREZcdTJGRjBcdTJGRkZcdTMwMDBcdTMwM0ZcdTMwNDBcdTMwOUZcdTMwQTBcdTMwRkZcdTMxMDBcdTMxMkZcdTMxMzBcdTMxOEYiCi0gICAgICAgICsiXHUzMTkwXHUzMTlGXHUzMUEwXHUzMUJGXHUzMjAwXHUzMkZGXHUzMzAwXHUzM0ZGXHUzNDAwXHU0REI1XHU0RTAwXHU5RkZGXHVBMDAwXHVBNDhGXHVBNDkwXHVBNENGIgotICAgICAgICArIlx1QUMwMFx1RDdBM1x1RDgwMFx1REI3Rlx1REI4MFx1REJGRlx1REMwMFx1REZGRlx1RTAwMFx1RjhGRlx1RjkwMFx1RkFGRlx1RkIwMFx1RkI0Rlx1RkI1MFx1RkRGRiIKLSAgICAgICAgKyJcdUZFMjBcdUZFMkZcdUZFMzBcdUZFNEZcdUZFNTBcdUZFNkZcdUZFNzBcdUZFRkVcdUZFRkZcdUZFRkZcdUZGMDBcdUZGRUYiOwotICAgIHN0YXRpYyBmaW5hbCBpbnRbXSBub25CTVBCbG9ja1JhbmdlcyA9IHsKLSAgICAgICAgMHgxMDMwMCwgMHgxMDMyRiwgICAgICAgLy8gODcKLSAgICAgICAgMHgxMDMzMCwgMHgxMDM0RiwKLSAgICAgICAgMHgxMDQwMCwgMHgxMDQ0RiwKLSAgICAgICAgMHgxRDAwMCwgMHgxRDBGRiwKLSAgICAgICAgMHgxRDEwMCwgMHgxRDFGRiwKLSAgICAgICAgMHgxRDQwMCwgMHgxRDdGRiwKLSAgICAgICAgMHgyMDAwMCwgMHgyQTZENiwKLSAgICAgICAgMHgyRjgwMCwgMHgyRkExRiwKLSAgICAgICAgMHhFMDAwMCwgMHhFMDA3RgotICAgIH07Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5PTkJNUF9CTE9DS19TVEFSVCA9IDg3OwotCi0gICAgc3RhdGljIHByb3RlY3RlZCBSYW5nZVRva2VuIGdldFJhbmdlKFN0cmluZyBuYW1lLCBib29sZWFuIHBvc2l0aXZlKSB7Ci0gICAgICAgIGlmIChUb2tlbi5jYXRlZ29yaWVzLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgICBzeW5jaHJvbml6ZWQgKFRva2VuLmNhdGVnb3JpZXMpIHsKLSAgICAgICAgICAgICAgICBUb2tlbltdIHJhbmdlcyA9IG5ldyBUb2tlbltUb2tlbi5jYXRlZ29yeU5hbWVzLmxlbmd0aF07Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7ICBpIDwgcmFuZ2VzLmxlbmd0aDsgIGkgKyspIHsKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2VzW2ldID0gVG9rZW4uY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaW50IHR5cGU7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7ICBpIDwgMHgxMDAwMDsgIGkgKyspIHsKLSAgICAgICAgICAgICAgICAgICAgdHlwZSA9IENoYXJhY3Rlci5nZXRUeXBlKChjaGFyKWkpOwotICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBDaGFyYWN0ZXIuU1RBUlRfUFVOQ1RVQVRJT04gfHwgCi0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlID09IENoYXJhY3Rlci5FTkRfUFVOQ1RVQVRJT04pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vYnVpbGQgdGFibGUgb2YgUGkgdmFsdWVzCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSAweDAwQUIgfHwgaSA9PSAweDIwMTggfHwgaSA9PSAweDIwMUIgfHwgaSA9PSAweDIwMUMgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID09IDB4MjAxRiB8fCBpID09IDB4MjAzOSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBDSEFSX0lOSVRfUVVPVEU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL2J1aWxkIHRhYmxlIG9mIFBmIHZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMHgwMEJCIHx8IGkgPT0gMHgyMDE5IHx8IGkgPT0gMHgyMDFEIHx8IGkgPT0gMHgyMDNBICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBDSEFSX0ZJTkFMX1FVT1RFOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJhbmdlc1t0eXBlXS5hZGRSYW5nZShpLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBDaGFyYWN0ZXIuVVBQRVJDQVNFX0xFVFRFUjoKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIENoYXJhY3Rlci5MT1dFUkNBU0VfTEVUVEVSOgotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2hhcmFjdGVyLlRJVExFQ0FTRV9MRVRURVI6Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBDaGFyYWN0ZXIuTU9ESUZJRVJfTEVUVEVSOgotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2hhcmFjdGVyLk9USEVSX0xFVFRFUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBDSEFSX0xFVFRFUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2hhcmFjdGVyLk5PTl9TUEFDSU5HX01BUks6Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBDaGFyYWN0ZXIuQ09NQklOSU5HX1NQQUNJTkdfTUFSSzoKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIENoYXJhY3Rlci5FTkNMT1NJTkdfTUFSSzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBDSEFSX01BUks7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIENoYXJhY3Rlci5ERUNJTUFMX0RJR0lUX05VTUJFUjoKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIENoYXJhY3Rlci5MRVRURVJfTlVNQkVSOgotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2hhcmFjdGVyLk9USEVSX05VTUJFUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBDSEFSX05VTUJFUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2hhcmFjdGVyLlNQQUNFX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIENoYXJhY3Rlci5MSU5FX1NFUEFSQVRPUjoKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIENoYXJhY3Rlci5QQVJBR1JBUEhfU0VQQVJBVE9SOgotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IENIQVJfU0VQQVJBVE9SOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBDaGFyYWN0ZXIuQ09OVFJPTDoKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIENoYXJhY3Rlci5GT1JNQVQ6Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBDaGFyYWN0ZXIuU1VSUk9HQVRFOgotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2hhcmFjdGVyLlBSSVZBVEVfVVNFOgotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2hhcmFjdGVyLlVOQVNTSUdORUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gQ0hBUl9PVEhFUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2hhcmFjdGVyLkNPTk5FQ1RPUl9QVU5DVFVBVElPTjoKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIENoYXJhY3Rlci5EQVNIX1BVTkNUVUFUSU9OOgotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2hhcmFjdGVyLlNUQVJUX1BVTkNUVUFUSU9OOgotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2hhcmFjdGVyLkVORF9QVU5DVFVBVElPTjoKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIENIQVJfSU5JVF9RVU9URToKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIENIQVJfRklOQUxfUVVPVEU6Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBDaGFyYWN0ZXIuT1RIRVJfUFVOQ1RVQVRJT046Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gQ0hBUl9QVU5DVFVBVElPTjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2hhcmFjdGVyLk1BVEhfU1lNQk9MOgotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2hhcmFjdGVyLkNVUlJFTkNZX1NZTUJPTDoKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIENoYXJhY3Rlci5NT0RJRklFUl9TWU1CT0w6Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSBDaGFyYWN0ZXIuT1RIRVJfU1lNQk9MOgotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IENIQVJfU1lNQk9MOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJvcmcuYXBhY2hlLnhlcmNlcy51dGlscy5yZWdleC5Ub2tlbiNnZXRSYW5nZSgpOiBVbmtub3duIFVuaWNvZGUgY2F0ZWdvcnk6ICIrdHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmFuZ2VzW3R5cGVdLmFkZFJhbmdlKGksIGkpOwotICAgICAgICAgICAgICAgIH0gLy8gZm9yIGFsbCBjaGFyYWN0ZXJzCi0gICAgICAgICAgICAgICAgcmFuZ2VzW0NoYXJhY3Rlci5VTkFTU0lHTkVEXS5hZGRSYW5nZSgweDEwMDAwLCBUb2tlbi5VVEYxNl9NQVgpOwotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7ICBpIDwgcmFuZ2VzLmxlbmd0aDsgIGkgKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFRva2VuLmNhdGVnb3J5TmFtZXNbaV0gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gQ2hhcmFjdGVyLlVOQVNTSUdORUQpIHsgLy8gVW5hc3NpZ25lZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlc1tpXS5hZGRSYW5nZSgweDEwMDAwLCBUb2tlbi5VVEYxNl9NQVgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgVG9rZW4uY2F0ZWdvcmllcy5wdXQoVG9rZW4uY2F0ZWdvcnlOYW1lc1tpXSwgcmFuZ2VzW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFRva2VuLmNhdGVnb3JpZXMyLnB1dChUb2tlbi5jYXRlZ29yeU5hbWVzW2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRva2VuLmNvbXBsZW1lbnRSYW5nZXMocmFuZ2VzW2ldKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy9SRVZJU0lUOiBkbyB3ZSByZWFsbHkgbmVlZCB0byBzdXBwb3J0IGJsb2NrIG5hbWVzIGFzIGluIFVuaWNvZGUgMy4xCi0gICAgICAgICAgICAgICAgLy8gICAgICAgICBvciB3ZSBjYW4ganVzdCBjcmVhdGUgYWxsIHRoZSBuYW1lcyBpbiBJc0JMT0NLTkFNRSBmb3JtYXQgKFhNTCBTY2hlbWEgUkVDKT8KLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKDUwKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgIGkgPCBUb2tlbi5ibG9ja05hbWVzLmxlbmd0aDsgIGkgKyspIHsKLSAgICAgICAgICAgICAgICAgICAgVG9rZW4gcjEgPSBUb2tlbi5jcmVhdGVSYW5nZSgpOwotICAgICAgICAgICAgICAgICAgICBpbnQgbG9jYXRpb247Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpIDwgTk9OQk1QX0JMT0NLX1NUQVJUKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IGkqMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCByc3RhcnQgPSBUb2tlbi5ibG9ja1Jhbmdlcy5jaGFyQXQobG9jYXRpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlbmQgPSBUb2tlbi5ibG9ja1Jhbmdlcy5jaGFyQXQobG9jYXRpb24rMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL0RFQlVHSU5HCi0gICAgICAgICAgICAgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbihuKyIgIiArSW50ZWdlci50b0hleFN0cmluZyhyc3RhcnQpCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICsiLSIrIEludGVnZXIudG9IZXhTdHJpbmcocmVuZCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcjEuYWRkUmFuZ2UocnN0YXJ0LCByZW5kKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gKGkgLSBOT05CTVBfQkxPQ0tfU1RBUlQpICogMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHIxLmFkZFJhbmdlKFRva2VuLm5vbkJNUEJsb2NrUmFuZ2VzW2xvY2F0aW9uXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRva2VuLm5vbkJNUEJsb2NrUmFuZ2VzW2xvY2F0aW9uICsgMV0pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBuID0gVG9rZW4uYmxvY2tOYW1lc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG4uZXF1YWxzKCJTcGVjaWFscyIpKQotICAgICAgICAgICAgICAgICAgICAgICAgcjEuYWRkUmFuZ2UoMHhmZmYwLCAweGZmZmQpOwotICAgICAgICAgICAgICAgICAgICBpZiAobi5lcXVhbHMoIlByaXZhdGUgVXNlIikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHIxLmFkZFJhbmdlKDB4RjAwMDAsMHhGRkZGRCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByMS5hZGRSYW5nZSgweDEwMDAwMCwweDEwRkZGRCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgVG9rZW4uY2F0ZWdvcmllcy5wdXQobiwgcjEpOwotICAgICAgICAgICAgICAgICAgICBUb2tlbi5jYXRlZ29yaWVzMi5wdXQobiwgVG9rZW4uY29tcGxlbWVudFJhbmdlcyhyMSkpOwotICAgICAgICAgICAgICAgICAgICBidWZmZXIuc2V0TGVuZ3RoKDApOwotICAgICAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCJJcyIpOwotICAgICAgICAgICAgICAgICAgICBpZiAobi5pbmRleE9mKCcgJykgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY2kgPSAwOyAgY2kgPCBuLmxlbmd0aCgpOyAgY2kgKyspCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4uY2hhckF0KGNpKSAhPSAnICcpICBidWZmZXIuYXBwZW5kKChjaGFyKW4uY2hhckF0KGNpKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKG4pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIFRva2VuLnNldEFsaWFzKGJ1ZmZlci50b1N0cmluZygpLCBuLCB0cnVlKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBUUiMxOCAxLjIKLSAgICAgICAgICAgICAgICBUb2tlbi5zZXRBbGlhcygiQVNTSUdORUQiLCAiQ24iLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgVG9rZW4uc2V0QWxpYXMoIlVOQVNTSUdORUQiLCAiQ24iLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBUb2tlbiBhbGwgPSBUb2tlbi5jcmVhdGVSYW5nZSgpOwotICAgICAgICAgICAgICAgIGFsbC5hZGRSYW5nZSgwLCBUb2tlbi5VVEYxNl9NQVgpOwotICAgICAgICAgICAgICAgIFRva2VuLmNhdGVnb3JpZXMucHV0KCJBTEwiLCBhbGwpOwotICAgICAgICAgICAgICAgIFRva2VuLmNhdGVnb3JpZXMyLnB1dCgiQUxMIiwgVG9rZW4uY29tcGxlbWVudFJhbmdlcyhhbGwpKTsKLSAgICAgICAgICAgICAgICBUb2tlbi5yZWdpc3Rlck5vblhTKCJBU1NJR05FRCIpOwotICAgICAgICAgICAgICAgIFRva2VuLnJlZ2lzdGVyTm9uWFMoIlVOQVNTSUdORUQiKTsKLSAgICAgICAgICAgICAgICBUb2tlbi5yZWdpc3Rlck5vblhTKCJBTEwiKTsKLQotICAgICAgICAgICAgICAgIFRva2VuIGlzYWxwaGEgPSBUb2tlbi5jcmVhdGVSYW5nZSgpOwotICAgICAgICAgICAgICAgIGlzYWxwaGEubWVyZ2VSYW5nZXMocmFuZ2VzW0NoYXJhY3Rlci5VUFBFUkNBU0VfTEVUVEVSXSk7IC8vIEx1Ci0gICAgICAgICAgICAgICAgaXNhbHBoYS5tZXJnZVJhbmdlcyhyYW5nZXNbQ2hhcmFjdGVyLkxPV0VSQ0FTRV9MRVRURVJdKTsgLy8gTGwKLSAgICAgICAgICAgICAgICBpc2FscGhhLm1lcmdlUmFuZ2VzKHJhbmdlc1tDaGFyYWN0ZXIuT1RIRVJfTEVUVEVSXSk7IC8vIExvCi0gICAgICAgICAgICAgICAgVG9rZW4uY2F0ZWdvcmllcy5wdXQoIklzQWxwaGEiLCBpc2FscGhhKTsKLSAgICAgICAgICAgICAgICBUb2tlbi5jYXRlZ29yaWVzMi5wdXQoIklzQWxwaGEiLCBUb2tlbi5jb21wbGVtZW50UmFuZ2VzKGlzYWxwaGEpKTsKLSAgICAgICAgICAgICAgICBUb2tlbi5yZWdpc3Rlck5vblhTKCJJc0FscGhhIik7Ci0KLSAgICAgICAgICAgICAgICBUb2tlbiBpc2FsbnVtID0gVG9rZW4uY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgICAgICAgICBpc2FsbnVtLm1lcmdlUmFuZ2VzKGlzYWxwaGEpOyAgIC8vIEx1IExsIExvCi0gICAgICAgICAgICAgICAgaXNhbG51bS5tZXJnZVJhbmdlcyhyYW5nZXNbQ2hhcmFjdGVyLkRFQ0lNQUxfRElHSVRfTlVNQkVSXSk7IC8vIE5kCi0gICAgICAgICAgICAgICAgVG9rZW4uY2F0ZWdvcmllcy5wdXQoIklzQWxudW0iLCBpc2FsbnVtKTsKLSAgICAgICAgICAgICAgICBUb2tlbi5jYXRlZ29yaWVzMi5wdXQoIklzQWxudW0iLCBUb2tlbi5jb21wbGVtZW50UmFuZ2VzKGlzYWxudW0pKTsKLSAgICAgICAgICAgICAgICBUb2tlbi5yZWdpc3Rlck5vblhTKCJJc0FsbnVtIik7Ci0KLSAgICAgICAgICAgICAgICBUb2tlbiBpc3NwYWNlID0gVG9rZW4uY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgICAgICAgICBpc3NwYWNlLm1lcmdlUmFuZ2VzKFRva2VuLnRva2VuX3NwYWNlcyk7Ci0gICAgICAgICAgICAgICAgaXNzcGFjZS5tZXJnZVJhbmdlcyhyYW5nZXNbQ0hBUl9TRVBBUkFUT1JdKTsgLy8gWgotICAgICAgICAgICAgICAgIFRva2VuLmNhdGVnb3JpZXMucHV0KCJJc1NwYWNlIiwgaXNzcGFjZSk7Ci0gICAgICAgICAgICAgICAgVG9rZW4uY2F0ZWdvcmllczIucHV0KCJJc1NwYWNlIiwgVG9rZW4uY29tcGxlbWVudFJhbmdlcyhpc3NwYWNlKSk7Ci0gICAgICAgICAgICAgICAgVG9rZW4ucmVnaXN0ZXJOb25YUygiSXNTcGFjZSIpOwotCi0gICAgICAgICAgICAgICAgVG9rZW4gaXN3b3JkID0gVG9rZW4uY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgICAgICAgICBpc3dvcmQubWVyZ2VSYW5nZXMoaXNhbG51bSk7ICAgICAvLyBMdSBMbCBMbyBOZAotICAgICAgICAgICAgICAgIGlzd29yZC5hZGRSYW5nZSgnXycsICdfJyk7Ci0gICAgICAgICAgICAgICAgVG9rZW4uY2F0ZWdvcmllcy5wdXQoIklzV29yZCIsIGlzd29yZCk7Ci0gICAgICAgICAgICAgICAgVG9rZW4uY2F0ZWdvcmllczIucHV0KCJJc1dvcmQiLCBUb2tlbi5jb21wbGVtZW50UmFuZ2VzKGlzd29yZCkpOwotICAgICAgICAgICAgICAgIFRva2VuLnJlZ2lzdGVyTm9uWFMoIklzV29yZCIpOwotCi0gICAgICAgICAgICAgICAgVG9rZW4gaXNhc2NpaSA9IFRva2VuLmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgICAgICAgICAgaXNhc2NpaS5hZGRSYW5nZSgwLCAxMjcpOwotICAgICAgICAgICAgICAgIFRva2VuLmNhdGVnb3JpZXMucHV0KCJJc0FTQ0lJIiwgaXNhc2NpaSk7Ci0gICAgICAgICAgICAgICAgVG9rZW4uY2F0ZWdvcmllczIucHV0KCJJc0FTQ0lJIiwgVG9rZW4uY29tcGxlbWVudFJhbmdlcyhpc2FzY2lpKSk7Ci0gICAgICAgICAgICAgICAgVG9rZW4ucmVnaXN0ZXJOb25YUygiSXNBU0NJSSIpOwotCi0gICAgICAgICAgICAgICAgVG9rZW4gaXNub3RncmFwaCA9IFRva2VuLmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgICAgICAgICAgaXNub3RncmFwaC5tZXJnZVJhbmdlcyhyYW5nZXNbQ0hBUl9PVEhFUl0pOwotICAgICAgICAgICAgICAgIGlzbm90Z3JhcGguYWRkUmFuZ2UoJyAnLCAnICcpOwotICAgICAgICAgICAgICAgIFRva2VuLmNhdGVnb3JpZXMucHV0KCJJc0dyYXBoIiwgVG9rZW4uY29tcGxlbWVudFJhbmdlcyhpc25vdGdyYXBoKSk7Ci0gICAgICAgICAgICAgICAgVG9rZW4uY2F0ZWdvcmllczIucHV0KCJJc0dyYXBoIiwgaXNub3RncmFwaCk7Ci0gICAgICAgICAgICAgICAgVG9rZW4ucmVnaXN0ZXJOb25YUygiSXNHcmFwaCIpOwotCi0gICAgICAgICAgICAgICAgVG9rZW4gaXN4ZGlnaXQgPSBUb2tlbi5jcmVhdGVSYW5nZSgpOwotICAgICAgICAgICAgICAgIGlzeGRpZ2l0LmFkZFJhbmdlKCcwJywgJzknKTsKLSAgICAgICAgICAgICAgICBpc3hkaWdpdC5hZGRSYW5nZSgnQScsICdGJyk7Ci0gICAgICAgICAgICAgICAgaXN4ZGlnaXQuYWRkUmFuZ2UoJ2EnLCAnZicpOwotICAgICAgICAgICAgICAgIFRva2VuLmNhdGVnb3JpZXMucHV0KCJJc1hEaWdpdCIsIFRva2VuLmNvbXBsZW1lbnRSYW5nZXMoaXN4ZGlnaXQpKTsKLSAgICAgICAgICAgICAgICBUb2tlbi5jYXRlZ29yaWVzMi5wdXQoIklzWERpZ2l0IiwgaXN4ZGlnaXQpOwotICAgICAgICAgICAgICAgIFRva2VuLnJlZ2lzdGVyTm9uWFMoIklzWERpZ2l0Iik7Ci0KLSAgICAgICAgICAgICAgICBUb2tlbi5zZXRBbGlhcygiSXNEaWdpdCIsICJOZCIsIHRydWUpOwotICAgICAgICAgICAgICAgIFRva2VuLnNldEFsaWFzKCJJc1VwcGVyIiwgIkx1IiwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgVG9rZW4uc2V0QWxpYXMoIklzTG93ZXIiLCAiTGwiLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBUb2tlbi5zZXRBbGlhcygiSXNDbnRybCIsICJDIiwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgVG9rZW4uc2V0QWxpYXMoIklzUHJpbnQiLCAiQyIsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBUb2tlbi5zZXRBbGlhcygiSXNQdW5jdCIsICJQIiwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgVG9rZW4ucmVnaXN0ZXJOb25YUygiSXNEaWdpdCIpOwotICAgICAgICAgICAgICAgIFRva2VuLnJlZ2lzdGVyTm9uWFMoIklzVXBwZXIiKTsKLSAgICAgICAgICAgICAgICBUb2tlbi5yZWdpc3Rlck5vblhTKCJJc0xvd2VyIik7Ci0gICAgICAgICAgICAgICAgVG9rZW4ucmVnaXN0ZXJOb25YUygiSXNDbnRybCIpOwotICAgICAgICAgICAgICAgIFRva2VuLnJlZ2lzdGVyTm9uWFMoIklzUHJpbnQiKTsKLSAgICAgICAgICAgICAgICBUb2tlbi5yZWdpc3Rlck5vblhTKCJJc1B1bmN0Iik7Ci0KLSAgICAgICAgICAgICAgICBUb2tlbi5zZXRBbGlhcygiYWxwaGEiLCAiSXNBbHBoYSIsIHRydWUpOwotICAgICAgICAgICAgICAgIFRva2VuLnNldEFsaWFzKCJhbG51bSIsICJJc0FsbnVtIiwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgVG9rZW4uc2V0QWxpYXMoImFzY2lpIiwgIklzQVNDSUkiLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBUb2tlbi5zZXRBbGlhcygiY250cmwiLCAiSXNDbnRybCIsIHRydWUpOwotICAgICAgICAgICAgICAgIFRva2VuLnNldEFsaWFzKCJkaWdpdCIsICJJc0RpZ2l0IiwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgVG9rZW4uc2V0QWxpYXMoImdyYXBoIiwgIklzR3JhcGgiLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBUb2tlbi5zZXRBbGlhcygibG93ZXIiLCAiSXNMb3dlciIsIHRydWUpOwotICAgICAgICAgICAgICAgIFRva2VuLnNldEFsaWFzKCJwcmludCIsICJJc1ByaW50IiwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgVG9rZW4uc2V0QWxpYXMoInB1bmN0IiwgIklzUHVuY3QiLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBUb2tlbi5zZXRBbGlhcygic3BhY2UiLCAiSXNTcGFjZSIsIHRydWUpOwotICAgICAgICAgICAgICAgIFRva2VuLnNldEFsaWFzKCJ1cHBlciIsICJJc1VwcGVyIiwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgVG9rZW4uc2V0QWxpYXMoIndvcmQiLCAiSXNXb3JkIiwgdHJ1ZSk7IC8vIFBlcmwgZXh0ZW5zaW9uCi0gICAgICAgICAgICAgICAgVG9rZW4uc2V0QWxpYXMoInhkaWdpdCIsICJJc1hEaWdpdCIsIHRydWUpOwotICAgICAgICAgICAgICAgIFRva2VuLnJlZ2lzdGVyTm9uWFMoImFscGhhIik7Ci0gICAgICAgICAgICAgICAgVG9rZW4ucmVnaXN0ZXJOb25YUygiYWxudW0iKTsKLSAgICAgICAgICAgICAgICBUb2tlbi5yZWdpc3Rlck5vblhTKCJhc2NpaSIpOwotICAgICAgICAgICAgICAgIFRva2VuLnJlZ2lzdGVyTm9uWFMoImNudHJsIik7Ci0gICAgICAgICAgICAgICAgVG9rZW4ucmVnaXN0ZXJOb25YUygiZGlnaXQiKTsKLSAgICAgICAgICAgICAgICBUb2tlbi5yZWdpc3Rlck5vblhTKCJncmFwaCIpOwotICAgICAgICAgICAgICAgIFRva2VuLnJlZ2lzdGVyTm9uWFMoImxvd2VyIik7Ci0gICAgICAgICAgICAgICAgVG9rZW4ucmVnaXN0ZXJOb25YUygicHJpbnQiKTsKLSAgICAgICAgICAgICAgICBUb2tlbi5yZWdpc3Rlck5vblhTKCJwdW5jdCIpOwotICAgICAgICAgICAgICAgIFRva2VuLnJlZ2lzdGVyTm9uWFMoInNwYWNlIik7Ci0gICAgICAgICAgICAgICAgVG9rZW4ucmVnaXN0ZXJOb25YUygidXBwZXIiKTsKLSAgICAgICAgICAgICAgICBUb2tlbi5yZWdpc3Rlck5vblhTKCJ3b3JkIik7Ci0gICAgICAgICAgICAgICAgVG9rZW4ucmVnaXN0ZXJOb25YUygieGRpZ2l0Iik7Ci0gICAgICAgICAgICB9IC8vIHN5bmNocm9uaXplZAotICAgICAgICB9IC8vIGlmIG51bGwKLSAgICAgICAgUmFuZ2VUb2tlbiB0b2sgPSBwb3NpdGl2ZSA/IChSYW5nZVRva2VuKVRva2VuLmNhdGVnb3JpZXMuZ2V0KG5hbWUpCi0gICAgICAgICAgICA6IChSYW5nZVRva2VuKVRva2VuLmNhdGVnb3JpZXMyLmdldChuYW1lKTsKLSAgICAgICAgLy9pZiAodG9rID09IG51bGwpIFN5c3RlbS5vdXQucHJpbnRsbihuYW1lKTsKLSAgICAgICAgcmV0dXJuIHRvazsKLSAgICB9Ci0gICAgc3RhdGljIHByb3RlY3RlZCBSYW5nZVRva2VuIGdldFJhbmdlKFN0cmluZyBuYW1lLCBib29sZWFuIHBvc2l0aXZlLCBib29sZWFuIHhzKSB7Ci0gICAgICAgIFJhbmdlVG9rZW4gcmFuZ2UgPSBUb2tlbi5nZXRSYW5nZShuYW1lLCBwb3NpdGl2ZSk7Ci0gICAgICAgIGlmICh4cyAmJiByYW5nZSAhPSBudWxsICYmIFRva2VuLmlzUmVnaXN0ZXJOb25YUyhuYW1lKSkKLSAgICAgICAgICAgIHJhbmdlID0gbnVsbDsKLSAgICAgICAgcmV0dXJuIHJhbmdlOwotICAgIH0KLQotICAgIHN0YXRpYyBIYXNodGFibGUgbm9ueHMgPSBudWxsOwotICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBvbmx5IGdldFJhbmdlKCkuCi0gICAgICogU28gdGhpcyBtZXRob2QgbmVlZCBub3QgTVQtc2FmZS4KLSAgICAgKi8KLSAgICBzdGF0aWMgcHJvdGVjdGVkIHZvaWQgcmVnaXN0ZXJOb25YUyhTdHJpbmcgbmFtZSkgewotICAgICAgICBpZiAoVG9rZW4ubm9ueHMgPT0gbnVsbCkKLSAgICAgICAgICAgIFRva2VuLm5vbnhzID0gbmV3IEhhc2h0YWJsZSgpOwotICAgICAgICBUb2tlbi5ub254cy5wdXQobmFtZSwgbmFtZSk7Ci0gICAgfQotICAgIHN0YXRpYyBwcm90ZWN0ZWQgYm9vbGVhbiBpc1JlZ2lzdGVyTm9uWFMoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgaWYgKFRva2VuLm5vbnhzID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8vREVCVUcKLSAgICAgICAgLy9TeXN0ZW0uZXJyLnByaW50bG4oImlzUmVnaXN0ZXJOb25YUzogIituYW1lKTsKLSAgICAgICAgcmV0dXJuIFRva2VuLm5vbnhzLmNvbnRhaW5zS2V5KG5hbWUpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgc2V0QWxpYXMoU3RyaW5nIG5ld05hbWUsIFN0cmluZyBuYW1lLCBib29sZWFuIHBvc2l0aXZlKSB7Ci0gICAgICAgIFRva2VuIHQxID0gKFRva2VuKVRva2VuLmNhdGVnb3JpZXMuZ2V0KG5hbWUpOwotICAgICAgICBUb2tlbiB0MiA9IChUb2tlbilUb2tlbi5jYXRlZ29yaWVzMi5nZXQobmFtZSk7Ci0gICAgICAgIGlmIChwb3NpdGl2ZSkgewotICAgICAgICAgICAgVG9rZW4uY2F0ZWdvcmllcy5wdXQobmV3TmFtZSwgdDEpOwotICAgICAgICAgICAgVG9rZW4uY2F0ZWdvcmllczIucHV0KG5ld05hbWUsIHQyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFRva2VuLmNhdGVnb3JpZXMyLnB1dChuZXdOYW1lLCB0MSk7Ci0gICAgICAgICAgICBUb2tlbi5jYXRlZ29yaWVzLnB1dChuZXdOYW1lLCB0Mik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgdmlyYW1hU3RyaW5nID0KLSAgICAiXHUwOTREIi8vIDtERVZBTkFHQVJJIFNJR04gVklSQU1BO01uOzk7T047Ozs7O047Ozs7OwotICAgICsiXHUwOUNEIi8vO0JFTkdBTEkgU0lHTiBWSVJBTUE7TW47OTtPTjs7Ozs7Tjs7Ozs7Ci0gICAgKyJcdTBBNEQiLy87R1VSTVVLSEkgU0lHTiBWSVJBTUE7TW47OTtPTjs7Ozs7Tjs7Ozs7Ci0gICAgKyJcdTBBQ0QiLy87R1VKQVJBVEkgU0lHTiBWSVJBTUE7TW47OTtPTjs7Ozs7Tjs7Ozs7Ci0gICAgKyJcdTBCNEQiLy87T1JJWUEgU0lHTiBWSVJBTUE7TW47OTtPTjs7Ozs7Tjs7Ozs7Ci0gICAgKyJcdTBCQ0QiLy87VEFNSUwgU0lHTiBWSVJBTUE7TW47OTtPTjs7Ozs7Tjs7Ozs7Ci0gICAgKyJcdTBDNEQiLy87VEVMVUdVIFNJR04gVklSQU1BO01uOzk7T047Ozs7O047Ozs7OwotICAgICsiXHUwQ0NEIi8vO0tBTk5BREEgU0lHTiBWSVJBTUE7TW47OTtPTjs7Ozs7Tjs7Ozs7Ci0gICAgKyJcdTBENEQiLy87TUFMQVlBTEFNIFNJR04gVklSQU1BO01uOzk7T047Ozs7O047Ozs7OwotICAgICsiXHUwRTNBIi8vO1RIQUkgQ0hBUkFDVEVSIFBISU5USFU7TW47OTtPTjs7Ozs7TjtUSEFJIFZPV0VMIFNJR04gUEhJTlRIVTs7OzsKLSAgICArIlx1MEY4NCI7Ly87VElCRVRBTiBNQVJLIEhBTEFOVEE7TW47OTtPTjs7Ozs7TjtUSUJFVEFOIFZJUkFNQTs7OzsKLQotICAgIHN0YXRpYyBwcml2YXRlIFRva2VuIHRva2VuX2dyYXBoZW1lID0gbnVsbDsKLSAgICBzdGF0aWMgc3luY2hyb25pemVkIFRva2VuIGdldEdyYXBoZW1lUGF0dGVybigpIHsKLSAgICAgICAgaWYgKFRva2VuLnRva2VuX2dyYXBoZW1lICE9IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gVG9rZW4udG9rZW5fZ3JhcGhlbWU7Ci0KLSAgICAgICAgVG9rZW4gYmFzZV9jaGFyID0gVG9rZW4uY3JlYXRlUmFuZ2UoKTsgIC8vIFt7QVNTSUdORUR9XS1be019LHtDfV0KLSAgICAgICAgYmFzZV9jaGFyLm1lcmdlUmFuZ2VzKFRva2VuLmdldFJhbmdlKCJBU1NJR05FRCIsIHRydWUpKTsKLSAgICAgICAgYmFzZV9jaGFyLnN1YnRyYWN0UmFuZ2VzKFRva2VuLmdldFJhbmdlKCJNIiwgdHJ1ZSkpOwotICAgICAgICBiYXNlX2NoYXIuc3VidHJhY3RSYW5nZXMoVG9rZW4uZ2V0UmFuZ2UoIkMiLCB0cnVlKSk7Ci0KLSAgICAgICAgVG9rZW4gdmlyYW1hID0gVG9rZW4uY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7ICBpIDwgVG9rZW4udmlyYW1hU3RyaW5nLmxlbmd0aCgpOyAgaSArKykgewotICAgICAgICAgICAgaW50IGNoID0gdmlyYW1hU3RyaW5nLmNoYXJBdChpKTsKLSAgICAgICAgICAgIHZpcmFtYS5hZGRSYW5nZShpLCBpKTsKLSAgICAgICAgfQotCi0gICAgICAgIFRva2VuIGNvbWJpbmVyX3dvX3ZpcmFtYSA9IFRva2VuLmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgIGNvbWJpbmVyX3dvX3ZpcmFtYS5tZXJnZVJhbmdlcyhUb2tlbi5nZXRSYW5nZSgiTSIsIHRydWUpKTsKLSAgICAgICAgY29tYmluZXJfd29fdmlyYW1hLmFkZFJhbmdlKDB4MTE2MCwgMHgxMWZmKTsgLy8gaGFuZ3VsX21lZGlhbCBhbmQgaGFuZ3VsX2ZpbmFsCi0gICAgICAgIGNvbWJpbmVyX3dvX3ZpcmFtYS5hZGRSYW5nZSgweGZmOWUsIDB4ZmY5Zik7IC8vIGV4dHJhcwotCi0gICAgICAgIFRva2VuIGxlZnQgPSBUb2tlbi5jcmVhdGVVbmlvbigpOyAgICAgICAvLyBiYXNlX2NoYXI/Ci0gICAgICAgIGxlZnQuYWRkQ2hpbGQoYmFzZV9jaGFyKTsKLSAgICAgICAgbGVmdC5hZGRDaGlsZChUb2tlbi50b2tlbl9lbXB0eSk7Ci0KLSAgICAgICAgVG9rZW4gZm9vID0gVG9rZW4uY3JlYXRlVW5pb24oKTsKLSAgICAgICAgZm9vLmFkZENoaWxkKFRva2VuLmNyZWF0ZUNvbmNhdCh2aXJhbWEsIFRva2VuLmdldFJhbmdlKCJMIiwgdHJ1ZSkpKTsKLSAgICAgICAgZm9vLmFkZENoaWxkKGNvbWJpbmVyX3dvX3ZpcmFtYSk7Ci0KLSAgICAgICAgZm9vID0gVG9rZW4uY3JlYXRlQ2xvc3VyZShmb28pOwotCi0gICAgICAgIGZvbyA9IFRva2VuLmNyZWF0ZUNvbmNhdChsZWZ0LCBmb28pOwotCi0gICAgICAgIFRva2VuLnRva2VuX2dyYXBoZW1lID0gZm9vOwotICAgICAgICByZXR1cm4gVG9rZW4udG9rZW5fZ3JhcGhlbWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29tYmluZyBDaGFyYWN0ZXIgU2VxdWVuY2UgaW4gUGVybCA1LjYuCi0gICAgICovCi0gICAgc3RhdGljIHByaXZhdGUgVG9rZW4gdG9rZW5fY2NzID0gbnVsbDsKLSAgICBzdGF0aWMgc3luY2hyb25pemVkIFRva2VuIGdldENvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKCkgewotICAgICAgICBpZiAoVG9rZW4udG9rZW5fY2NzICE9IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gVG9rZW4udG9rZW5fY2NzOwotCi0gICAgICAgIFRva2VuIGZvbyA9IFRva2VuLmNyZWF0ZUNsb3N1cmUoVG9rZW4uZ2V0UmFuZ2UoIk0iLCB0cnVlKSk7IC8vIFxwTSoKLSAgICAgICAgZm9vID0gVG9rZW4uY3JlYXRlQ29uY2F0KFRva2VuLmdldFJhbmdlKCJNIiwgZmFsc2UpLCBmb28pOyAvLyBcUE0gKyBccE0qCi0gICAgICAgIFRva2VuLnRva2VuX2NjcyA9IGZvbzsKLSAgICAgICAgcmV0dXJuIFRva2VuLnRva2VuX2NjczsKLSAgICB9Ci0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8qKgotICAgICAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIG5vZGUgaW4gcGFyc2UgdHJlZS4KLSAgICAgKi8KLSAgICBzdGF0aWMgY2xhc3MgU3RyaW5nVG9rZW4gZXh0ZW5kcyBUb2tlbiBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKLSAgICAgICAgU3RyaW5nIHN0cmluZzsKLSAgICAgICAgaW50IHJlZk51bWJlcjsKLQotICAgICAgICBTdHJpbmdUb2tlbihpbnQgdHlwZSwgU3RyaW5nIHN0ciwgaW50IG4pIHsKLSAgICAgICAgICAgIHN1cGVyKHR5cGUpOwotICAgICAgICAgICAgdGhpcy5zdHJpbmcgPSBzdHI7Ci0gICAgICAgICAgICB0aGlzLnJlZk51bWJlciA9IG47Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgZ2V0UmVmZXJlbmNlTnVtYmVyKCkgeyAgICAgICAgICAgICAgLy8gZm9yIFNUUklORwotICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmTnVtYmVyOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBnZXRTdHJpbmcoKSB7ICAgICAgICAgICAgICAgICAgICAvLyBmb3IgU1RSSU5HCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmc7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoaW50IG9wdGlvbnMpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gQkFDS1JFRkVSRU5DRSkKLSAgICAgICAgICAgICAgICByZXR1cm4gIlxcIit0aGlzLnJlZk51bWJlcjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gUkVVdGlsLnF1b3RlTWV0YSh0aGlzLnN0cmluZyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBub2RlIGluIHBhcnNlIHRyZWUuCi0gICAgICovCi0gICAgc3RhdGljIGNsYXNzIENvbmNhdFRva2VuIGV4dGVuZHMgVG9rZW4gaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7Ci0gICAgICAgIFRva2VuIGNoaWxkOwotICAgICAgICBUb2tlbiBjaGlsZDI7Ci0gICAgICAgIAotICAgICAgICBDb25jYXRUb2tlbihUb2tlbiB0MSwgVG9rZW4gdDIpIHsKLSAgICAgICAgICAgIHN1cGVyKFRva2VuLkNPTkNBVCk7Ci0gICAgICAgICAgICB0aGlzLmNoaWxkID0gdDE7Ci0gICAgICAgICAgICB0aGlzLmNoaWxkMiA9IHQyOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHNpemUoKSB7Ci0gICAgICAgICAgICByZXR1cm4gMjsKLSAgICAgICAgfQotICAgICAgICBUb2tlbiBnZXRDaGlsZChpbnQgaW5kZXgpIHsKLSAgICAgICAgICAgIHJldHVybiBpbmRleCA9PSAwID8gdGhpcy5jaGlsZCA6IHRoaXMuY2hpbGQyOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZyhpbnQgb3B0aW9ucykgewotICAgICAgICAgICAgU3RyaW5nIHJldDsKLSAgICAgICAgICAgIGlmICh0aGlzLmNoaWxkMi50eXBlID09IENMT1NVUkUgJiYgdGhpcy5jaGlsZDIuZ2V0Q2hpbGQoMCkgPT0gdGhpcy5jaGlsZCkgewotICAgICAgICAgICAgICAgIHJldCA9IHRoaXMuY2hpbGQudG9TdHJpbmcob3B0aW9ucykrIisiOwotICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoaWxkMi50eXBlID09IE5PTkdSRUVEWUNMT1NVUkUgJiYgdGhpcy5jaGlsZDIuZ2V0Q2hpbGQoMCkgPT0gdGhpcy5jaGlsZCkgewotICAgICAgICAgICAgICAgIHJldCA9IHRoaXMuY2hpbGQudG9TdHJpbmcob3B0aW9ucykrIis/IjsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHJldCA9IHRoaXMuY2hpbGQudG9TdHJpbmcob3B0aW9ucykrdGhpcy5jaGlsZDIudG9TdHJpbmcob3B0aW9ucyk7Ci0gICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgbm9kZSBpbiBwYXJzZSB0cmVlLgotICAgICAqLwotICAgIHN0YXRpYyBjbGFzcyBDaGFyVG9rZW4gZXh0ZW5kcyBUb2tlbiBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlIHsKLSAgICAgICAgaW50IGNoYXJkYXRhOwotCi0gICAgICAgIENoYXJUb2tlbihpbnQgdHlwZSwgaW50IGNoKSB7Ci0gICAgICAgICAgICBzdXBlcih0eXBlKTsKLSAgICAgICAgICAgIHRoaXMuY2hhcmRhdGEgPSBjaDsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBnZXRDaGFyKCkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hhcmRhdGE7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKGludCBvcHRpb25zKSB7Ci0gICAgICAgICAgICBTdHJpbmcgcmV0OwotICAgICAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHsKLSAgICAgICAgICAgICAgY2FzZSBDSEFSOgotICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5jaGFyZGF0YSkgewotICAgICAgICAgICAgICAgICAgY2FzZSAnfCc6ICBjYXNlICcqJzogIGNhc2UgJysnOiAgY2FzZSAnPyc6Ci0gICAgICAgICAgICAgICAgICBjYXNlICcoJzogIGNhc2UgJyknOiAgY2FzZSAnLic6ICBjYXNlICdbJzoKLSAgICAgICAgICAgICAgICAgIGNhc2UgJ3snOiAgY2FzZSAnXFwnOgotICAgICAgICAgICAgICAgICAgICByZXQgPSAiXFwiKyhjaGFyKXRoaXMuY2hhcmRhdGE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSAnXGYnOiAgcmV0ID0gIlxcZiI7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgJ1xuJzogIHJldCA9ICJcXG4iOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlICdccic6ICByZXQgPSAiXFxyIjsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSAnXHQnOiAgcmV0ID0gIlxcdCI7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgMHgxYjogIHJldCA9ICJcXGUiOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIC8vY2FzZSAweDBiOiAgcmV0ID0gIlxcdiI7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoYXJkYXRhID49IDB4MTAwMDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwcmUgPSAiMCIrSW50ZWdlci50b0hleFN0cmluZyh0aGlzLmNoYXJkYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9ICJcXHYiK3ByZS5zdWJzdHJpbmcocHJlLmxlbmd0aCgpLTYsIHByZS5sZW5ndGgoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gIiIrKGNoYXIpdGhpcy5jaGFyZGF0YTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgY2FzZSBBTkNIT1I6Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMgPT0gVG9rZW4udG9rZW5fbGluZWJlZ2lubmluZyB8fCB0aGlzID09IFRva2VuLnRva2VuX2xpbmVlbmQpCi0gICAgICAgICAgICAgICAgICAgIHJldCA9ICIiKyhjaGFyKXRoaXMuY2hhcmRhdGE7Ci0gICAgICAgICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gIlxcIisoY2hhcil0aGlzLmNoYXJkYXRhOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0ID0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sZWFuIG1hdGNoKGludCBjaCkgewotICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PSBDSEFSKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNoID09IHRoaXMuY2hhcmRhdGE7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiTkZBQXJyb3cjbWF0Y2goKTogSW50ZXJuYWwgZXJyb3I6ICIrdGhpcy50eXBlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIG5vZGUgaW4gcGFyc2UgdHJlZS4KLSAgICAgKi8KLSAgICBzdGF0aWMgY2xhc3MgQ2xvc3VyZVRva2VuIGV4dGVuZHMgVG9rZW4gaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7Ci0gICAgICAgIGludCBtaW47Ci0gICAgICAgIGludCBtYXg7Ci0gICAgICAgIFRva2VuIGNoaWxkOwotCi0gICAgICAgIENsb3N1cmVUb2tlbihpbnQgdHlwZSwgVG9rZW4gdG9rKSB7Ci0gICAgICAgICAgICBzdXBlcih0eXBlKTsKLSAgICAgICAgICAgIHRoaXMuY2hpbGQgPSB0b2s7Ci0gICAgICAgICAgICB0aGlzLnNldE1pbigtMSk7Ci0gICAgICAgICAgICB0aGlzLnNldE1heCgtMSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgc2l6ZSgpIHsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgICAgIFRva2VuIGdldENoaWxkKGludCBpbmRleCkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGQ7Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCB2b2lkIHNldE1pbihpbnQgbWluKSB7Ci0gICAgICAgICAgICB0aGlzLm1pbiA9IG1pbjsKLSAgICAgICAgfQotICAgICAgICBmaW5hbCB2b2lkIHNldE1heChpbnQgbWF4KSB7Ci0gICAgICAgICAgICB0aGlzLm1heCA9IG1heDsKLSAgICAgICAgfQotICAgICAgICBmaW5hbCBpbnQgZ2V0TWluKCkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMubWluOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsIGludCBnZXRNYXgoKSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXg7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKGludCBvcHRpb25zKSB7Ci0gICAgICAgICAgICBTdHJpbmcgcmV0OwotICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PSBDTE9TVVJFKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0TWluKCkgPCAwICYmIHRoaXMuZ2V0TWF4KCkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IHRoaXMuY2hpbGQudG9TdHJpbmcob3B0aW9ucykrIioiOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRNaW4oKSA9PSB0aGlzLmdldE1heCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IHRoaXMuY2hpbGQudG9TdHJpbmcob3B0aW9ucykrInsiK3RoaXMuZ2V0TWluKCkrIn0iOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRNaW4oKSA+PSAwICYmIHRoaXMuZ2V0TWF4KCkgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICByZXQgPSB0aGlzLmNoaWxkLnRvU3RyaW5nKG9wdGlvbnMpKyJ7Iit0aGlzLmdldE1pbigpKyIsIit0aGlzLmdldE1heCgpKyJ9IjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0TWluKCkgPj0gMCAmJiB0aGlzLmdldE1heCgpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICByZXQgPSB0aGlzLmNoaWxkLnRvU3RyaW5nKG9wdGlvbnMpKyJ7Iit0aGlzLmdldE1pbigpKyIsfSI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUb2tlbiN0b1N0cmluZygpOiBDTE9TVVJFICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3RoaXMuZ2V0TWluKCkrIiwgIit0aGlzLmdldE1heCgpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0TWluKCkgPCAwICYmIHRoaXMuZ2V0TWF4KCkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IHRoaXMuY2hpbGQudG9TdHJpbmcob3B0aW9ucykrIio/IjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0TWluKCkgPT0gdGhpcy5nZXRNYXgoKSkgewotICAgICAgICAgICAgICAgICAgICByZXQgPSB0aGlzLmNoaWxkLnRvU3RyaW5nKG9wdGlvbnMpKyJ7Iit0aGlzLmdldE1pbigpKyJ9PyI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldE1pbigpID49IDAgJiYgdGhpcy5nZXRNYXgoKSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IHRoaXMuY2hpbGQudG9TdHJpbmcob3B0aW9ucykrInsiK3RoaXMuZ2V0TWluKCkrIiwiK3RoaXMuZ2V0TWF4KCkrIn0/IjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0TWluKCkgPj0gMCAmJiB0aGlzLmdldE1heCgpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICByZXQgPSB0aGlzLmNoaWxkLnRvU3RyaW5nKG9wdGlvbnMpKyJ7Iit0aGlzLmdldE1pbigpKyIsfT8iOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVG9rZW4jdG9TdHJpbmcoKTogTk9OR1JFRURZQ0xPU1VSRSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICt0aGlzLmdldE1pbigpKyIsICIrdGhpcy5nZXRNYXgoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgbm9kZSBpbiBwYXJzZSB0cmVlLgotICAgICAqLwotICAgIHN0YXRpYyBjbGFzcyBQYXJlblRva2VuIGV4dGVuZHMgVG9rZW4gaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7Ci0gICAgICAgIFRva2VuIGNoaWxkOwotICAgICAgICBpbnQgcGFyZW5udW1iZXI7Ci0KLSAgICAgICAgUGFyZW5Ub2tlbihpbnQgdHlwZSwgVG9rZW4gdG9rLCBpbnQgcGFyZW4pIHsKLSAgICAgICAgICAgIHN1cGVyKHR5cGUpOwotICAgICAgICAgICAgdGhpcy5jaGlsZCA9IHRvazsKLSAgICAgICAgICAgIHRoaXMucGFyZW5udW1iZXIgPSBwYXJlbjsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBzaXplKCkgewotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICAgICAgVG9rZW4gZ2V0Q2hpbGQoaW50IGluZGV4KSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZDsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBnZXRQYXJlbk51bWJlcigpIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVubnVtYmVyOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZyhpbnQgb3B0aW9ucykgewotICAgICAgICAgICAgU3RyaW5nIHJldCA9IG51bGw7Ci0gICAgICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkgewotICAgICAgICAgICAgICBjYXNlIFBBUkVOOgotICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcmVubnVtYmVyID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gIig/OiIrdGhpcy5jaGlsZC50b1N0cmluZyhvcHRpb25zKSsiKSI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gIigiK3RoaXMuY2hpbGQudG9TdHJpbmcob3B0aW9ucykrIikiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICBjYXNlIExPT0tBSEVBRDoKLSAgICAgICAgICAgICAgICByZXQgPSAiKD89Iit0aGlzLmNoaWxkLnRvU3RyaW5nKG9wdGlvbnMpKyIpIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBORUdBVElWRUxPT0tBSEVBRDoKLSAgICAgICAgICAgICAgICByZXQgPSAiKD8hIit0aGlzLmNoaWxkLnRvU3RyaW5nKG9wdGlvbnMpKyIpIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBMT09LQkVISU5EOgotICAgICAgICAgICAgICAgIHJldCA9ICIoPzw9Iit0aGlzLmNoaWxkLnRvU3RyaW5nKG9wdGlvbnMpKyIpIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBORUdBVElWRUxPT0tCRUhJTkQ6Ci0gICAgICAgICAgICAgICAgcmV0ID0gIig/PCEiK3RoaXMuY2hpbGQudG9TdHJpbmcob3B0aW9ucykrIikiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIElOREVQRU5ERU5UOgotICAgICAgICAgICAgICAgIHJldCA9ICIoPz4iK3RoaXMuY2hpbGQudG9TdHJpbmcob3B0aW9ucykrIikiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqICg/KGNvbmRpdGlvbil5ZXMtcGF0dGVybnxuby1wYXR0ZXJuKQotICAgICAqLwotICAgIHN0YXRpYyBjbGFzcyBDb25kaXRpb25Ub2tlbiBleHRlbmRzIFRva2VuIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGUgewotICAgICAgICBpbnQgcmVmTnVtYmVyOwotICAgICAgICBUb2tlbiBjb25kaXRpb247Ci0gICAgICAgIFRva2VuIHllczsKLSAgICAgICAgVG9rZW4gbm87Ci0gICAgICAgIENvbmRpdGlvblRva2VuKGludCByZWZubywgVG9rZW4gY29uZCwgVG9rZW4geWVzcGF0LCBUb2tlbiBub3BhdCkgewotICAgICAgICAgICAgc3VwZXIoVG9rZW4uQ09ORElUSU9OKTsKLSAgICAgICAgICAgIHRoaXMucmVmTnVtYmVyID0gcmVmbm87Ci0gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbiA9IGNvbmQ7Ci0gICAgICAgICAgICB0aGlzLnllcyA9IHllc3BhdDsKLSAgICAgICAgICAgIHRoaXMubm8gPSBub3BhdDsKLSAgICAgICAgfQotICAgICAgICBpbnQgc2l6ZSgpIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLm5vID09IG51bGwgPyAxIDogMjsKLSAgICAgICAgfQotICAgICAgICBUb2tlbiBnZXRDaGlsZChpbnQgaW5kZXgpIHsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSAwKSAgcmV0dXJuIHRoaXMueWVzOwotICAgICAgICAgICAgaWYgKGluZGV4ID09IDEpICByZXR1cm4gdGhpcy5ubzsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbnRlcm5hbCBFcnJvcjogIitpbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKGludCBvcHRpb25zKSB7Ci0gICAgICAgICAgICBTdHJpbmcgcmV0OwotICAgICAgICAgICAgaWYgKHJlZk51bWJlciA+IDApIHsKLSAgICAgICAgICAgICAgICByZXQgPSAiKD8oIityZWZOdW1iZXIrIikiOwotICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmRpdGlvbi50eXBlID09IFRva2VuLkFOQ0hPUikgewotICAgICAgICAgICAgICAgIHJldCA9ICIoPygiK3RoaXMuY29uZGl0aW9uKyIpIjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0ID0gIig/Iit0aGlzLmNvbmRpdGlvbjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRoaXMubm8gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJldCArPSB0aGlzLnllcysiKSI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldCArPSB0aGlzLnllcysifCIrdGhpcy5ubysiKSI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogKGltcy1pbXM6IC4uLi4gKQotICAgICAqLwotICAgIHN0YXRpYyBjbGFzcyBNb2RpZmllclRva2VuIGV4dGVuZHMgVG9rZW4gaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZSB7Ci0gICAgICAgIFRva2VuIGNoaWxkOwotICAgICAgICBpbnQgYWRkOwotICAgICAgICBpbnQgbWFzazsKLQotICAgICAgICBNb2RpZmllclRva2VuKFRva2VuIHRvaywgaW50IGFkZCwgaW50IG1hc2spIHsKLSAgICAgICAgICAgIHN1cGVyKFRva2VuLk1PRElGSUVSR1JPVVApOwotICAgICAgICAgICAgdGhpcy5jaGlsZCA9IHRvazsKLSAgICAgICAgICAgIHRoaXMuYWRkID0gYWRkOwotICAgICAgICAgICAgdGhpcy5tYXNrID0gbWFzazsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBzaXplKCkgewotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICAgICAgVG9rZW4gZ2V0Q2hpbGQoaW50IGluZGV4KSB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZDsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBnZXRPcHRpb25zKCkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkOwotICAgICAgICB9Ci0gICAgICAgIGludCBnZXRPcHRpb25zTWFzaygpIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLm1hc2s7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKGludCBvcHRpb25zKSB7Ci0gICAgICAgICAgICByZXR1cm4gIig/IgotICAgICAgICAgICAgICAgICsodGhpcy5hZGQgPT0gMCA/ICIiIDogUkVVdGlsLmNyZWF0ZU9wdGlvblN0cmluZyh0aGlzLmFkZCkpCi0gICAgICAgICAgICAgICAgKyh0aGlzLm1hc2sgPT0gMCA/ICIiIDogUkVVdGlsLmNyZWF0ZU9wdGlvblN0cmluZyh0aGlzLm1hc2spKQotICAgICAgICAgICAgICAgICsiOiIKLSAgICAgICAgICAgICAgICArdGhpcy5jaGlsZC50b1N0cmluZyhvcHRpb25zKQotICAgICAgICAgICAgICAgICsiKSI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBub2RlIGluIHBhcnNlIHRyZWUuCi0gICAgICogZm9yIFVOSU9OIG9yIENPTkNBVC4KLSAgICAgKi8KLSAgICBzdGF0aWMgY2xhc3MgVW5pb25Ub2tlbiBleHRlbmRzIFRva2VuIGltcGxlbWVudHMgamF2YS5pby5TZXJpYWxpemFibGUgewotICAgICAgICBWZWN0b3IgY2hpbGRyZW47Ci0KLSAgICAgICAgVW5pb25Ub2tlbihpbnQgdHlwZSkgewotICAgICAgICAgICAgc3VwZXIodHlwZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGFkZENoaWxkKFRva2VuIHRvaykgewotICAgICAgICAgICAgaWYgKHRvayA9PSBudWxsKSAgcmV0dXJuOwotICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4gPT0gbnVsbCkgIHRoaXMuY2hpbGRyZW4gPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAgICAgICBpZiAodGhpcy50eXBlID09IFVOSU9OKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5hZGRFbGVtZW50KHRvayk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBDT05DQVQsIGFuZCBuZXcgY2hpbGQgaXMgQ09OQ0FULgotICAgICAgICAgICAgaWYgKHRvay50eXBlID09IENPTkNBVCkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyAgaSA8IHRvay5zaXplKCk7ICBpICsrKQotICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENoaWxkKHRvay5nZXRDaGlsZChpKSk7IC8vIFJlY3Vyc2lvbgotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGludCBzaXplID0gdGhpcy5jaGlsZHJlbi5zaXplKCk7Ci0gICAgICAgICAgICBpZiAoc2l6ZSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5hZGRFbGVtZW50KHRvayk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgVG9rZW4gcHJldmlvdXMgPSAoVG9rZW4pdGhpcy5jaGlsZHJlbi5lbGVtZW50QXQoc2l6ZS0xKTsKLSAgICAgICAgICAgIGlmICghKChwcmV2aW91cy50eXBlID09IENIQVIgfHwgcHJldmlvdXMudHlwZSA9PSBTVFJJTkcpCi0gICAgICAgICAgICAgICAgICAmJiAodG9rLnR5cGUgPT0gQ0hBUiB8fCB0b2sudHlwZSA9PSBTVFJJTkcpKSkgewotICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uYWRkRWxlbWVudCh0b2spOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy9TeXN0ZW0uZXJyLnByaW50bG4oIk1lcmdlICciK3ByZXZpb3VzKyInIGFuZCAnIit0b2srIicuIik7Ci0KLSAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBidWZmZXI7Ci0gICAgICAgICAgICBpbnQgbmV4dE1heExlbmd0aCA9ICh0b2sudHlwZSA9PSBDSEFSID8gMiA6IHRvay5nZXRTdHJpbmcoKS5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBpZiAocHJldmlvdXMudHlwZSA9PSBDSEFSKSB7ICAgICAgICAvLyBSZXBsYWNlIHByZXZpb3VzIHRva2VuIGJ5IFNUUklORwotICAgICAgICAgICAgICAgIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoMiArIG5leHRNYXhMZW5ndGgpOwotICAgICAgICAgICAgICAgIGludCBjaCA9IHByZXZpb3VzLmdldENoYXIoKTsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPj0gMHgxMDAwMCkKLSAgICAgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChSRVV0aWwuZGVjb21wb3NlVG9TdXJyb2dhdGVzKGNoKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKChjaGFyKWNoKTsKLSAgICAgICAgICAgICAgICBwcmV2aW91cyA9IFRva2VuLmNyZWF0ZVN0cmluZyhudWxsKTsKLSAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuLnNldEVsZW1lbnRBdChwcmV2aW91cywgc2l6ZS0xKTsKLSAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNUUklORwotICAgICAgICAgICAgICAgIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIocHJldmlvdXMuZ2V0U3RyaW5nKCkubGVuZ3RoKCkgKyBuZXh0TWF4TGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKHByZXZpb3VzLmdldFN0cmluZygpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRvay50eXBlID09IENIQVIpIHsKLSAgICAgICAgICAgICAgICBpbnQgY2ggPSB0b2suZ2V0Q2hhcigpOwotICAgICAgICAgICAgICAgIGlmIChjaCA+PSAweDEwMDAwKQotICAgICAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKFJFVXRpbC5kZWNvbXBvc2VUb1N1cnJvZ2F0ZXMoY2gpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoKGNoYXIpY2gpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKHRvay5nZXRTdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICgoU3RyaW5nVG9rZW4pcHJldmlvdXMpLnN0cmluZyA9IG5ldyBTdHJpbmcoYnVmZmVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBzaXplKCkgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4gPT0gbnVsbCA/IDAgOiB0aGlzLmNoaWxkcmVuLnNpemUoKTsKLSAgICAgICAgfQotICAgICAgICBUb2tlbiBnZXRDaGlsZChpbnQgaW5kZXgpIHsKLSAgICAgICAgICAgIHJldHVybiAoVG9rZW4pdGhpcy5jaGlsZHJlbi5lbGVtZW50QXQoaW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFN0cmluZyB0b1N0cmluZyhpbnQgb3B0aW9ucykgewotICAgICAgICAgICAgU3RyaW5nIHJldDsKLSAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gQ09OQ0FUKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4uc2l6ZSgpID09IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgVG9rZW4gY2ggPSB0aGlzLmdldENoaWxkKDApOwotICAgICAgICAgICAgICAgICAgICBUb2tlbiBjaDIgPSB0aGlzLmdldENoaWxkKDEpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2gyLnR5cGUgPT0gQ0xPU1VSRSAmJiBjaDIuZ2V0Q2hpbGQoMCkgPT0gY2gpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IGNoLnRvU3RyaW5nKG9wdGlvbnMpKyIrIjsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaDIudHlwZSA9PSBOT05HUkVFRFlDTE9TVVJFICYmIGNoMi5nZXRDaGlsZCgwKSA9PSBjaCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gY2gudG9TdHJpbmcob3B0aW9ucykrIis/IjsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBjaC50b1N0cmluZyhvcHRpb25zKStjaDIudG9TdHJpbmcob3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgIGkgPCB0aGlzLmNoaWxkcmVuLnNpemUoKTsgIGkgKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgoKFRva2VuKXRoaXMuY2hpbGRyZW4uZWxlbWVudEF0KGkpKS50b1N0cmluZyhvcHRpb25zKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0ID0gbmV3IFN0cmluZyhzYik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5zaXplKCkgPT0gMiAmJiB0aGlzLmdldENoaWxkKDEpLnR5cGUgPT0gRU1QVFkpIHsKLSAgICAgICAgICAgICAgICByZXQgPSB0aGlzLmdldENoaWxkKDApLnRvU3RyaW5nKG9wdGlvbnMpKyI/IjsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jaGlsZHJlbi5zaXplKCkgPT0gMgotICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmdldENoaWxkKDApLnR5cGUgPT0gRU1QVFkpIHsKLSAgICAgICAgICAgICAgICByZXQgPSB0aGlzLmdldENoaWxkKDEpLnRvU3RyaW5nKG9wdGlvbnMpKyI/PyI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoKChUb2tlbil0aGlzLmNoaWxkcmVuLmVsZW1lbnRBdCgwKSkudG9TdHJpbmcob3B0aW9ucykpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyAgaSA8IHRoaXMuY2hpbGRyZW4uc2l6ZSgpOyAgaSArKykgewotICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoKGNoYXIpJ3wnKTsKLSAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCgoVG9rZW4pdGhpcy5jaGlsZHJlbi5lbGVtZW50QXQoaSkpLnRvU3RyaW5nKG9wdGlvbnMpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0ID0gbmV3IFN0cmluZyhzYik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9yZWdleC9tZXNzYWdlLnByb3BlcnRpZXMgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3JlZ2V4L21lc3NhZ2UucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJlNDg4MC4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3JlZ2V4L21lc3NhZ2UucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLXBhcnNlci5wYXJzZS4xPVdyb25nIGNoYXJhY3Rlci4KLXBhcnNlci5wYXJzZS4yPUludmFsaWQgcmVmZXJlbmNlIG51bWJlci4KLXBhcnNlci5uZXh0LjE9QSBjaGFyYWN0ZXIgaXMgcmVxdWlyZWQgYWZ0ZXIgXFwuCi1wYXJzZXIubmV4dC4yPSc/JyBpcyBub3QgZXhwZWN0ZWQuICAnKD86JyBvciAnKD89JyBvciAnKD8hJyBvciAnKD88JyBvciAnKD8jJyBvciAnKD8+Jz8KLXBhcnNlci5uZXh0LjM9Jyg/PD0nIG9yICcoPzwhJyBpcyBleHBlY3RlZC4KLXBhcnNlci5uZXh0LjQ9QSBjb21tZW50IGlzIG5vdCB0ZXJtaW5hdGVkLgotcGFyc2VyLmZhY3Rvci4xPScpJyBpcyBleHBlY3RlZC4KLXBhcnNlci5mYWN0b3IuMj1VbmV4cGVjdGVkIGVuZCBvZiB0aGUgcGF0dGVybiBpbiBhIG1vZGlmaWVyIGdyb3VwLgotcGFyc2VyLmZhY3Rvci4zPSc6JyBpcyBleHBlY3RlZC4KLXBhcnNlci5mYWN0b3IuND1VbmV4cGVjdGVkIGVuZCBvZiB0aGUgcGF0dGVybiBpbiBhIGNvbmRpdGlvbmFsIGdyb3VwLgotcGFyc2VyLmZhY3Rvci41PUEgYmFjayByZWZlcmVuY2Ugb3IgYW4gYW5jaG9yIG9yIGEgbG9va2FoZWFkIG9yIGEgbG9va2JlaGluZCBpcyBleHBlY3RlZCBpbiBhIGNvbmRpdGlvbmFsIHBhdHRlcm4uCi1wYXJzZXIuZmFjdG9yLjY9VGhlcmUgYXJlIG1vcmUgdGhhbiB0aHJlZSBjaG9pc2VzIGluIGEgY29uZGl0aW9uYWwgZ3JvdXAuCi1wYXJzZXIuYXRvbS4xPUEgY2hhcmFjdGVyIGluIFUrMDA0MC1VKzAwNWYgbXVzdCBmb2xsb3cgXFxjLgotcGFyc2VyLmF0b20uMj1BIENhdGVnb3J5IGNoYXJhY3RlciBvciAneycgaXMgcmVxdWlyZWQuCi1wYXJzZXIuYXRvbS4zPUEgcHJvcGVydHkgbmFtZSBpcyBub3QgY2xvc2VkIGJ5ICd9Jy4KLXBhcnNlci5hdG9tLjQ9VW5leHBlY3RlZCBtZXRhIGNoYXJhY3Rlci4KLXBhcnNlci5hdG9tLjU9VW5rbm93biBwcm9wZXJ0eS4KLXBhcnNlci5jYy4xPUEgUE9TSVggY2hhcmFjdGVyIGNsYXNzIG11c3QgYmUgY2xvc2VkIGJ5ICc6XScuCi1wYXJzZXIuY2MuMj1VbmV4cGVjdGVkIGVuZCBvZiB0aGUgcGF0dGVybiBpbiBhIGNoYXJhY3RlciBjbGFzcy4KLXBhcnNlci5jYy4zPVVua25vd24gbmFtZSBmb3IgYSBQT1NJWCBjaGFyYWN0ZXIgY2xhc3MuCi1wYXJzZXIuY2MuND0nLScgaXMgaW52YWxpZCBoZXJlLgotcGFyc2VyLmNjLjU9J10nIGlzIGV4cGVjdGVkLgotcGFyc2VyLmNjLjY9J1snIGlzIGludmFsaWQgaW4gYSBjaGFyYWNlciBjbGFzcy4gIFdyaXRlICdcXFsnLgotcGFyc2VyLmNjLjc9J10nIGlzIGludmFsaWQgaW4gYSBjaGFyYWNlciBjbGFzcy4gIFdyaXRlICdcXF0nLgotcGFyc2VyLm9wZS4xPSdbJyBpcyBleHBlY3RlZC4KLXBhcnNlci5vcGUuMj0nKScgb3IgJy1bJyBvciAnK1snIG9yICcmWycgaXMgZXhwZWN0ZWQuCi1wYXJzZXIuZGVzY2FwZS4xPUludmFsaWQgVW5pY29kZSBoZXggbm90YXRpb24uCi1wYXJzZXIuZGVzY2FwZS4yPU92ZXJmbG93IGluIGEgaGV4IG5vdGF0aW9uLgotcGFyc2VyLmRlc2NhcGUuMz0nXFx4eycgbXVzdCBiZSBjbG9zZWQgYnkgJ30nLgotcGFyc2VyLmRlc2NhcGUuND1JbnZhbGlkIFVuaWNvZGUgY29kZSBwb2ludC4KLXBhcnNlci5kZXNjYXBlLjU9QW4gYW5jaG9yIG11c3Qgbm90IGJlIGhlcmUuCi1wYXJzZXIucHJvY2Vzcy4xPVRoaXMgZXhwcmVzc2lvbiBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSBjdXJyZW50IG9wdGlvbiBzZXR0aW5nLgpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9yZWdleC9tZXNzYWdlX2ZyLnByb3BlcnRpZXMgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3JlZ2V4L21lc3NhZ2VfZnIucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQzZTk4MS4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3JlZ2V4L21lc3NhZ2VfZnIucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLSBwYXJzZXIucGFyc2UuMT1DYXJhY3RcdTAwZThyZSBpbnZhbGlkZS4KLXBhcnNlci5wYXJzZS4yPU51bVx1MDBlOXJvIGRlIHJcdTAwZTlmXHUwMGU5cmVuY2UgaW52YWxpZGUuCi1wYXJzZXIubmV4dC4xPVVuIFxcIGRvaXQgXHUwMGVhdHJlIHN1aXZpIGQndW4gY2FyYWN0XHUwMGU4cmUuCi1wYXJzZXIubmV4dC4yPSc/JyBuJ2VzdCBwYXMgcG9zc2libGUgaWNpLiAgJyg/Oicgb3UgJyg/PScgb3UgJyg/IScgb3UgJyg/PCcgb3UgJyg/Iycgb3UgJyg/Pic/Ci1wYXJzZXIubmV4dC4zPScoPzw9JyBvdSAnKD88IScgc29udCBhdHRlbmR1cy4KLXBhcnNlci5uZXh0LjQ9VW4gY29tbWVudGFpcmUgbidlc3QgcGFzIGZlcm1cdTAwZTkuCi1wYXJzZXIuZmFjdG9yLjE9JyknIG1hbnF1YW50LgotcGFyc2VyLmZhY3Rvci4yPUZpbiBwclx1MDBlOW1hdHVyXHUwMGU5ZSBkZSBtb3RpZiBkYW5zIHVuIGdyb3VwZSBtb2RpZmlhbnQuCi1wYXJzZXIuZmFjdG9yLjM9JzonIG1hbnF1YW50LgotcGFyc2VyLmZhY3Rvci40PUZpbiBwclx1MDBlOW1hdHVyXHUwMGU5ZSBkZSBtb3RpZiBkYW5zIHVuIGdyb3VwZSBjb25kaXRpb25lbC4KLXBhcnNlci5mYWN0b3IuNT1VbmUgclx1MDBlOWZcdTAwZTlyZW5jZSBhcnJpXHUwMGU4cmUgb3UgdW5lIGFuY3JlIG91IHVuIGxvb2thaGVhZCBvdSB1biBsb29rYmVoaW5kIGVzdCBhdHRlbmR1IGRhbnMgdW4gZ3JvdXBlIGNvbmRpdGlvbmVsLgotcGFyc2VyLmZhY3Rvci42PUlsIHkgYSBwbHVzIGRlIHRyb2lzIGNob2l4IGRhbnMgdW4gZ3JvdXBlIGNvbmRpdGlvbmVsLgotcGFyc2VyLmF0b20uMT1cXGMgZG9pdCBcdTAwZWF0cmUgc3VpdmkgZCd1biBjYXJhY3RcdTAwZThyZSBkYW5zIGwnaW50ZXJ2YWxsZSBVKzAwNDAtVSswMDVmIC4KLXBhcnNlci5hdG9tLjI9VW4gY2FyYWN0XHUwMGU4cmUgZGUgY2F0XHUwMGU5Z29yaWUgb3UgJ3snIGVzdCByZXF1aXMuCi1wYXJzZXIuYXRvbS4zPVVuIG5vbSBkZSBwcm9wcmlcdTAwZTl0XHUwMGU5IG5lIHNlIHRlcm1pbmUgcGFzIHBhciAnfScuCi1wYXJzZXIuYXRvbS40PU1cdTAwZTl0YWNhcmFjdFx1MDBlOHJlIGludGVyZGl0LgotcGFyc2VyLmF0b20uNT1Qcm9wcmlcdTAwZTl0XHUwMGU5IGluY29ubnVlLgotcGFyc2VyLmNjLjE9VW5lIGNsYXNzZSBkZSBjYXJhY3RcdTAwZThyZSBQT1NJWCBkb2l0IFx1MDBlYXRyZSB0ZXJtaW5cdTAwZTllIHBhciAnOl0nLgotcGFyc2VyLmNjLjI9RmluIHByXHUwMGU5bWF0dXJcdTAwZTllIGRlIG1vdGlmIGRhbnMgdW5lIGNsYXNzZSBkZSBjYXJhY3RcdTAwZThyZS4KLXBhcnNlci5jYy4zPU5vbSBpbmNvbm51IHBvdXIgdW5lIGNsYXNzZSBkZSBjYXJhY3RcdTAwZThyZSBQT1NJWC4KLXBhcnNlci5jYy40PSctJyBlc3QgaW52YWxpZGUsIGRhbnMgY2UgY2FzLgotcGFyc2VyLmNjLjU9J10nIG1hbnF1YW50LgotcGFyc2VyLmNjLjY9J1snIGVzdCBpbnZhbGlkZSBkYW5zIHVuZSBjbGFzc2UgZGUgY2FyYWN0XHUwMGU4cmUuIEVjcml2ZXogJ1xcWycuCi1wYXJzZXIuY2MuNz0nXScgZXN0IGludmFsaWRlIGRhbnMgdW5lIGNsYXNzZSBkZSBjYXJhY3RcdTAwZThyZS4gRWNyaXZleiAnXFxdJy4KLXBhcnNlci5vcGUuMT0nWycgZXN0IGF0dGVuZHUuCi1wYXJzZXIub3BlLjI9JyknIG91ICctWycgb3UgJytbJyBvdSAnJlsnIHNvbnQgYXR0ZW5kdXMuCi1wYXJzZXIuZGVzY2FwZS4xPU5vdGF0aW9uIGhleGFkXHUwMGU5Y2ltYWxlIFVuaWNvZGUgaW52YWxpZGUuCi1wYXJzZXIuZGVzY2FwZS4yPURcdTAwZTlwYXNzZW1lbnQgZGUgY2FwYWNpdFx1MDBlOSBkYW5zIHVuZSBleHByZXNzaW9uIGhleGFkXHUwMGU5Y2ltYWxlLgotcGFyc2VyLmRlc2NhcGUuMz0nXFx4eycgZG9pdCBzZSB0ZXJtaW5lciBwYXIgdW4gJ30nLgotcGFyc2VyLmRlc2NhcGUuND1Qb2ludCBkZSBjb2RlIFVuaWNvZGUgaW52YWxpZGUuCi1wYXJzZXIuZGVzY2FwZS41PUFuY3JlIGludGVyZGl0ZSBpY2kuCi1wYXJzZXIucHJvY2Vzcy4xPUNldHRlIGV4cHJlc3Npb24gbidlc3QgcGFzIGF1dG9yaXNcdTAwZTllIGNvbXB0ZSB0ZW51IGRlcyBvcHRpb25zIGVuIGNvdXJzLgpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9yZWdleC9tZXNzYWdlX2phLnByb3BlcnRpZXMgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3JlZ2V4L21lc3NhZ2VfamEucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJlODM5NC4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3JlZ2V4L21lc3NhZ2VfamEucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLXBhcnNlci5wYXJzZS4xPVx1MzA3OFx1MzA5M1x1MzA2YVx1NjU4N1x1NWI1Ny4KLXBhcnNlci5wYXJzZS4yPVx1NWI1OFx1NTcyOFx1MzA1N1x1MzA2YVx1MzA0NFx1MzBiMFx1MzBlYlx1MzBmY1x1MzBkN1x1NzU2YVx1NTNmN1x1MzA2N1x1MzA1OS4KLXBhcnNlci5uZXh0LjE9XFwgXHUzMDZlXHU1ZjhjXHUzMDZiMVx1NjU4N1x1NWI1N1x1NWZjNVx1ODk4MVx1MzA2N1x1MzA1OS4KLXBhcnNlci5uZXh0LjI9Jz8nIFx1MzA5Mlx1MzA1M1x1MzA1M1x1MzA2Ylx1NjZmOFx1MzA0Zlx1MzA1M1x1MzA2OFx1MzA2Zlx1MzA2N1x1MzA0ZFx1MzA3ZVx1MzA1Ylx1MzA5My4gXHUzMDgyXHUzMDU3XHUzMDRiXHUzMDU3XHUzMDY2ICcoPzonIFx1MzA0YiAnKD89JyBcdTMwNGIgJyg/IScgXHUzMDRiICcoPzwnIFx1MzA0YiAnKD8jJyBcdTMwNGIgJyg/PicgXHUzMDY3XHUzMDU5XHUzMDRiPwotcGFyc2VyLm5leHQuMz0nKD88PScgXHUzMDRiICcoPzwhJyBcdTMwNGNcdTVmYzVcdTg5ODFcdTMwNjdcdTMwNTkuCi1wYXJzZXIubmV4dC40PVx1OGEzYlx1OTFjOFx1MzA0Y1x1OTU4OVx1MzA1OFx1MzA2Nlx1MzA0NFx1MzA3ZVx1MzA1Ylx1MzA5My4KLXBhcnNlci5mYWN0b3IuMT0nKScgXHUzMDRjXHU1ZmM1XHU4OTgxXHUzMDY3XHUzMDU5LgotcGFyc2VyLmZhY3Rvci4yPVx1MzBhYVx1MzBkN1x1MzBiN1x1MzBlN1x1MzBmM1x1NGVkOFx1MzA0ZFx1MzBiMFx1MzBlYlx1MzBmY1x1MzBkN1x1MzA2ZVx1NGUyZFx1MzA2N1x1MzBkMVx1MzBiZlx1MzBmY1x1MzBmM1x1MzA0Y1x1N2Q0Mlx1NGU4Nlx1MzA1N1x1MzA2Nlx1MzA0NFx1MzA3ZVx1MzA1OS4KLXBhcnNlci5mYWN0b3IuMz0nOicgXHUzMDRjXHU1ZmM1XHU4OTgxXHUzMDY3XHUzMDU5LgotcGFyc2VyLmZhY3Rvci40PVx1Njc2MVx1NGVmNlx1NGVkOFx1MzA0ZFx1MzBiMFx1MzBlYlx1MzBmY1x1MzBkN1x1MzA2ZVx1NGUyZFx1MzA2N1x1MzBkMVx1MzBiZlx1MzBmY1x1MzBmM1x1MzA0Y1x1N2Q0Mlx1NGU4Nlx1MzA1N1x1MzA2Nlx1MzA0NFx1MzA3ZVx1MzA1OS4KLXBhcnNlci5mYWN0b3IuNT1cdTY3NjFcdTRlZjZcdTMwZDFcdTMwYmZcdTMwZmNcdTMwZjNcdTMwNmJcdTMwNmZcdTMwMDFcdTVmOGNcdTY1YjlcdTUzYzJcdTcxNjdcdTMwZmJcdTMwYTJcdTMwZjNcdTMwYWJcdTMwZmNcdTMwZmJcdTUxNDhcdThhYWRcdTMwN2ZcdTMwZmJcdTVmOGNcdThhYWRcdTMwN2ZcdTMwNmVcdTMwN2ZcdTRmN2ZcdTc1MjhcdTMwNjdcdTMwNGRcdTMwN2VcdTMwNTkuCi1wYXJzZXIuZmFjdG9yLjY9XHU2NzYxXHU0ZWY2XHU0ZWQ4XHUzMDRkXHUzMGIwXHUzMGViXHUzMGZjXHUzMGQ3XHUzMDZlXHU0ZTJkXHUzMDZiM1x1NTAwYlx1NGVlNVx1NGUwYVx1MzA2ZVx1OTA3OFx1NjI5ZVx1MzA5Mlx1NjZmOFx1MzA0Zlx1MzA1M1x1MzA2OFx1MzA2Zlx1MzA2N1x1MzA0ZFx1MzA3ZVx1MzA1Ylx1MzA5My4KLXBhcnNlci5hdG9tLjE9XFxjIFx1MzA2ZVx1NWY4Y1x1MzA2Ylx1MzA2Zlx1MzBiM1x1MzBmY1x1MzBjOVx1MzBkZFx1MzBhNFx1MzBmM1x1MzBjOFx1MzA0YyBVKzAwNDBcdWZmNWVVKzAwNWYgXHUzMDZlXHU3YmM0XHU1NmYyXHUzMDZlXHU2NTg3XHU1YjU3XHUzMDRjXHU1ZmM1XHU4OTgxXHUzMDY3XHUzMDU5LgotcGFyc2VyLmF0b20uMj0xXHU2NTg3XHU1YjU3XHUzMDZlXHUzMGFiXHUzMGM2XHUzMGI0XHUzMGVhXHU2NTg3XHU1YjU3XHUzMDRiICd7JyBcdTMwNGNcdTVmYzVcdTg5ODFcdTMwNjdcdTMwNTkuCi1wYXJzZXIuYXRvbS4zPVx1MzBkN1x1MzBlZFx1MzBkMVx1MzBjNlx1MzBhM1x1NTQwZFx1MzA0YyAnfScgXHUzMDY3XHU5NTg5XHUzMDU4XHUzMDY2XHUzMDQ0XHUzMDdlXHUzMDViXHUzMDkzLgotcGFyc2VyLmF0b20uND1cdTMwZTFcdTMwYmZcdTY1ODdcdTViNTdcdTMwNGNcdTU5MDlcdTMwNmFcdTMwNjhcdTMwNTNcdTMwOGRcdTMwNmJcdTMwNDJcdTMwOGFcdTMwN2VcdTMwNTkuCi1wYXJzZXIuYXRvbS41PVx1NjcyYVx1NzdlNVx1MzA2ZVx1MzBkN1x1MzBlZFx1MzBkMVx1MzBjNlx1MzBhM1x1NTQwZFx1MzA2N1x1MzA1OS4KLXBhcnNlci5jYy4xPVBPU0lYIFx1NjU4N1x1NWI1N1x1MzBhZlx1MzBlOVx1MzBiOVx1MzA2ZiAnOl0nIFx1MzA2N1x1OTU4OVx1MzA1OFx1MzA4Ylx1NWZjNVx1ODk4MVx1MzA0Y1x1MzA0Mlx1MzA4YVx1MzA3ZVx1MzA1OS4KLXBhcnNlci5jYy4yPVx1NjU4N1x1NWI1N1x1MzBhZlx1MzBlOVx1MzBiOVx1NTE4NVx1MzA2N1x1MzBkMVx1MzBiZlx1MzBmY1x1MzBmM1x1MzA0Y1x1N2Q0Mlx1NGU4Nlx1MzA1N1x1MzA2Nlx1MzA0NFx1MzA3ZVx1MzA1OS4KLXBhcnNlci5jYy4zPVx1NjcyYVx1NzdlNVx1MzA2ZSBQT1NJWCBcdTY1ODdcdTViNTdcdTMwYWZcdTMwZTlcdTMwYjlcdTU0MGRcdTMwNjdcdTMwNTkuCi1wYXJzZXIuY2MuND1cdTMwNTNcdTMwNTNcdTMwNmIgJy0nIFx1MzA5Mlx1NjZmOFx1MzA0Zlx1MzA1M1x1MzA2OFx1MzA2Zlx1MzA2N1x1MzA0ZFx1MzA3ZVx1MzA1Ylx1MzA5My4KLXBhcnNlci5jYy41PSddJyBcdTMwNGNcdTVmYzVcdTg5ODFcdTMwNjdcdTMwNTkuCi1wYXJzZXIuY2MuNj1cdTY1ODdcdTViNTdcdTMwYWZcdTMwZTlcdTMwYjlcdTUxODVcdTMwNjdcdTMwNmYgJ1snIFx1MzA5Mlx1NzZmNFx1NjNhNVx1NjZmOFx1MzA0Zlx1MzA1M1x1MzA2OFx1MzA2Zlx1MzA2N1x1MzA0ZFx1MzA3ZVx1MzA1Ylx1MzA5My4gJ1xcWycgXHUzMDY4XHU2NmY4XHUzMDQ0XHUzMDY2XHUzMDRmXHUzMDYwXHUzMDU1XHUzMDQ0LgotcGFyc2VyLmNjLjc9XHU2NTg3XHU1YjU3XHUzMGFmXHUzMGU5XHUzMGI5XHU1MTg1XHUzMDY3XHUzMDZmICddJyBcdTMwOTJcdTc2ZjRcdTYzYTVcdTY2ZjhcdTMwNGZcdTMwNTNcdTMwNjhcdTMwNmZcdTMwNjdcdTMwNGRcdTMwN2VcdTMwNWJcdTMwOTMuICdcXF0nIFx1MzA2OFx1NjZmOFx1MzA0NFx1MzA2Nlx1MzA0Zlx1MzA2MFx1MzA1NVx1MzA0NC4KLXBhcnNlci5vcGUuMT0nWycgXHUzMDRjXHU1ZmM1XHU4OTgxXHUzMDY3XHUzMDU5LgotcGFyc2VyLm9wZS4yPScpJyBcdTMwNGIgJy1bJyBcdTMwNGIgJytbJyBcdTMwNGIgJyZbJyBcdTMwNGNcdTVmYzVcdTg5ODFcdTMwNjdcdTMwNTkuCi1wYXJzZXIuZGVzY2FwZS4xPVx1MzBiM1x1MzBmY1x1MzBjOVx1MzBkZFx1MzBhNFx1MzBmM1x1MzBjOFx1MzA2ZTE2XHU5MDMyXHU2NTcwXHU4ODY4XHU4YTE4XHU0ZTJkXHUzMDZiXHU5NTkzXHU5MDU1XHUzMDYzXHUzMDVmXHU2NTg3XHU1YjU3XHUzMDRjXHUzMDQyXHUzMDhhXHUzMDdlXHUzMDU5LgotcGFyc2VyLmRlc2NhcGUuMj1cdTMwYjNcdTMwZmNcdTMwYzlcdTMwZGRcdTMwYTRcdTMwZjNcdTMwYzhcdTMwNmVcdTY1NzBcdTUwMjRcdTMwNGNcdTU5MjdcdTMwNGRcdTMwNTlcdTMwNGVcdTMwN2VcdTMwNTkuCi1wYXJzZXIuZGVzY2FwZS4zPSdcXHh7JyBcdTMwNmYgJ30nIFx1MzA2N1x1OTU4OVx1MzA1OFx1MzA2YVx1MzA1MVx1MzA4Y1x1MzA3MFx1MzA0NFx1MzA1MVx1MzA3ZVx1MzA1Ylx1MzA5My4KLXBhcnNlci5kZXNjYXBlLjQ9VW5pY29kZSBcdTMwNmVcdTMwYjNcdTMwZmNcdTMwYzlcdTMwZGRcdTMwYTRcdTMwZjNcdTMwYzhcdTMwNjhcdTMwNTdcdTMwNjZcdTRlMGRcdTZiNjNcdTMwNjdcdTMwNTkuCi1wYXJzZXIuZGVzY2FwZS41PVx1MzBhMlx1MzBmM1x1MzBhYlx1MzBmY1x1MzA5Mlx1MzA1M1x1MzA1M1x1MzA2Ylx1NjZmOFx1MzA0Zlx1MzA1M1x1MzA2OFx1MzA2Zlx1MzA2N1x1MzA0ZFx1MzA3ZVx1MzA1Ylx1MzA5My4KLXBhcnNlci5wcm9jZXNzLjE9XHUzMDUzXHUzMDZlXHU4ODY4XHU3M2ZlXHUzMDZmXHU3M2ZlXHU1NzI4XHUzMDZlXHUzMGFhXHUzMGQ3XHUzMGI3XHUzMGU3XHUzMGYzXHU4YTJkXHU1YjlhXHUzMDY3XHUzMDZmXHU0ZjdmXHU3NTI4XHUzMDY3XHUzMDRkXHUzMDdlXHUzMDViXHUzMDkzLgpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL0J1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlZjEyZTEuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwOTIgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlU3lzdGVtOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUdsb2JhbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFHbG9iYWxBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFNb2RlbEdyb3VwOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQXR0cmlidXRlR3JvdXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQYXJ0aWNsZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlFOYW1lU2V0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQXR0cmlidXRlTW9kZWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5RTmFtZUhlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLlhtbEludGVnZXJJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuWG1sU3RyaW5nSW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwucmVnZXguUmVndWxhckV4cHJlc3Npb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnJlZ2V4LlNjaGVtYVJlZ3VsYXJFeHByZXNzaW9uOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotCi1wdWJsaWMgY2xhc3MgQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0gZXh0ZW5kcyBTY2hlbWFUeXBlTG9hZGVyQmFzZSBpbXBsZW1lbnRzIFNjaGVtYVR5cGVTeXN0ZW0KLXsKLSAgICAvLyBUaGUgZ2xvYmFsIGJ1aWx0aW4gdHlwZSBzeXN0ZW0KLSAgICBwdWJsaWMgc3RhdGljIFNjaGVtYVR5cGVTeXN0ZW0gZ2V0KCkKLSAgICAgICAgeyByZXR1cm4gX2dsb2JhbDsgfQotCi0gICAgLy8gc29tZSBjb25zdGFudHMgdGhhdCBuZWVkIHRvIGJlIGluaXRpYWxpemVkIGVhcmx5Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZVtdIEVNUFRZX1NDSEVNQVRZUEVfQVJSQVkgPSBuZXcgU2NoZW1hVHlwZVswXTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlLlJlZltdIEVNUFRZX1NDSEVNQVRZUEVSRUZfQVJSQVkgPSBuZXcgU2NoZW1hVHlwZS5SZWZbMF07Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU2NoZW1hR2xvYmFsRWxlbWVudFtdIEVNUFRZX1NDSEVNQUVMRU1FTlRfQVJSQVkgPSBuZXcgU2NoZW1hR2xvYmFsRWxlbWVudFswXTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTY2hlbWFHbG9iYWxBdHRyaWJ1dGVbXSBFTVBUWV9TQ0hFTUFBVFRSSUJVVEVfQVJSQVkgPSBuZXcgU2NoZW1hR2xvYmFsQXR0cmlidXRlWzBdOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFNjaGVtYU1vZGVsR3JvdXBbXSBFTVBUWV9TQ0hFTUFNT0RFTEdST1VQX0FSUkFZID0gbmV3IFNjaGVtYU1vZGVsR3JvdXBbMF07Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU2NoZW1hQXR0cmlidXRlR3JvdXBbXSBFTVBUWV9TQ0hFTUFBVFRSSUJVVEVHUk9VUF9BUlJBWSA9IG5ldyBTY2hlbWFBdHRyaWJ1dGVHcm91cFswXTsKLQotICAgIHByaXZhdGUgc3RhdGljIEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtIF9nbG9iYWwgPSBuZXcgQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0oKTsKLQotICAgIC8vIFVSIHR5cGVzCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlSW1wbCBTVF9BTllfVFlQRSA9IF9nbG9iYWwuZ2V0QnVpbHRpblR5cGUoU2NoZW1hVHlwZS5CVENfQU5ZX1RZUEUpOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZUltcGwgU1RfQU5ZX1NJTVBMRSA9IF9nbG9iYWwuZ2V0QnVpbHRpblR5cGUoU2NoZW1hVHlwZS5CVENfQU5ZX1NJTVBMRSk7Ci0KLSAgICAvLyBwcmltaXRpdmVzCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlSW1wbCBTVF9CT09MRUFOID0gX2dsb2JhbC5nZXRCdWlsdGluVHlwZShTY2hlbWFUeXBlLkJUQ19CT09MRUFOKTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGVJbXBsIFNUX0JBU0VfNjRfQklOQVJZID0gX2dsb2JhbC5nZXRCdWlsdGluVHlwZShTY2hlbWFUeXBlLkJUQ19CQVNFXzY0X0JJTkFSWSk7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlSW1wbCBTVF9IRVhfQklOQVJZID0gX2dsb2JhbC5nZXRCdWlsdGluVHlwZShTY2hlbWFUeXBlLkJUQ19IRVhfQklOQVJZKTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGVJbXBsIFNUX0FOWV9VUkkgPSBfZ2xvYmFsLmdldEJ1aWx0aW5UeXBlKFNjaGVtYVR5cGUuQlRDX0FOWV9VUkkpOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZUltcGwgU1RfUU5BTUUgPSBfZ2xvYmFsLmdldEJ1aWx0aW5UeXBlKFNjaGVtYVR5cGUuQlRDX1FOQU1FKTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGVJbXBsIFNUX05PVEFUSU9OID0gX2dsb2JhbC5nZXRCdWlsdGluVHlwZShTY2hlbWFUeXBlLkJUQ19OT1RBVElPTik7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlSW1wbCBTVF9GTE9BVCA9IF9nbG9iYWwuZ2V0QnVpbHRpblR5cGUoU2NoZW1hVHlwZS5CVENfRkxPQVQpOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZUltcGwgU1RfRE9VQkxFID0gX2dsb2JhbC5nZXRCdWlsdGluVHlwZShTY2hlbWFUeXBlLkJUQ19ET1VCTEUpOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZUltcGwgU1RfREVDSU1BTCA9IF9nbG9iYWwuZ2V0QnVpbHRpblR5cGUoU2NoZW1hVHlwZS5CVENfREVDSU1BTCk7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlSW1wbCBTVF9TVFJJTkcgPSBfZ2xvYmFsLmdldEJ1aWx0aW5UeXBlKFNjaGVtYVR5cGUuQlRDX1NUUklORyk7Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGVJbXBsIFNUX0RVUkFUSU9OID0gX2dsb2JhbC5nZXRCdWlsdGluVHlwZShTY2hlbWFUeXBlLkJUQ19EVVJBVElPTik7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlSW1wbCBTVF9EQVRFX1RJTUUgPSBfZ2xvYmFsLmdldEJ1aWx0aW5UeXBlKFNjaGVtYVR5cGUuQlRDX0RBVEVfVElNRSk7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlSW1wbCBTVF9USU1FID0gX2dsb2JhbC5nZXRCdWlsdGluVHlwZShTY2hlbWFUeXBlLkJUQ19USU1FKTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGVJbXBsIFNUX0RBVEUgPSBfZ2xvYmFsLmdldEJ1aWx0aW5UeXBlKFNjaGVtYVR5cGUuQlRDX0RBVEUpOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZUltcGwgU1RfR19ZRUFSX01PTlRIID0gX2dsb2JhbC5nZXRCdWlsdGluVHlwZShTY2hlbWFUeXBlLkJUQ19HX1lFQVJfTU9OVEgpOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZUltcGwgU1RfR19ZRUFSID0gX2dsb2JhbC5nZXRCdWlsdGluVHlwZShTY2hlbWFUeXBlLkJUQ19HX1lFQVIpOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZUltcGwgU1RfR19NT05USF9EQVkgPSBfZ2xvYmFsLmdldEJ1aWx0aW5UeXBlKFNjaGVtYVR5cGUuQlRDX0dfTU9OVEhfREFZKTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGVJbXBsIFNUX0dfREFZID0gX2dsb2JhbC5nZXRCdWlsdGluVHlwZShTY2hlbWFUeXBlLkJUQ19HX0RBWSk7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlSW1wbCBTVF9HX01PTlRIID0gX2dsb2JhbC5nZXRCdWlsdGluVHlwZShTY2hlbWFUeXBlLkJUQ19HX01PTlRIKTsKLQotICAgIC8vIGRlcml2ZWQgbnVtZXJpY3MKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGVJbXBsIFNUX0lOVEVHRVIgPSBfZ2xvYmFsLmdldEJ1aWx0aW5UeXBlKFNjaGVtYVR5cGUuQlRDX0lOVEVHRVIpOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZUltcGwgU1RfTE9ORyA9IF9nbG9iYWwuZ2V0QnVpbHRpblR5cGUoU2NoZW1hVHlwZS5CVENfTE9ORyk7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlSW1wbCBTVF9JTlQgPSBfZ2xvYmFsLmdldEJ1aWx0aW5UeXBlKFNjaGVtYVR5cGUuQlRDX0lOVCk7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlSW1wbCBTVF9TSE9SVCA9IF9nbG9iYWwuZ2V0QnVpbHRpblR5cGUoU2NoZW1hVHlwZS5CVENfU0hPUlQpOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZUltcGwgU1RfQllURSA9IF9nbG9iYWwuZ2V0QnVpbHRpblR5cGUoU2NoZW1hVHlwZS5CVENfQllURSk7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlSW1wbCBTVF9OT05fUE9TSVRJVkVfSU5URUdFUiA9IF9nbG9iYWwuZ2V0QnVpbHRpblR5cGUoU2NoZW1hVHlwZS5CVENfTk9OX1BPU0lUSVZFX0lOVEVHRVIpOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZUltcGwgU1RfTkVHQVRJVkVfSU5URUdFUiA9IF9nbG9iYWwuZ2V0QnVpbHRpblR5cGUoU2NoZW1hVHlwZS5CVENfTkVHQVRJVkVfSU5URUdFUik7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlSW1wbCBTVF9OT05fTkVHQVRJVkVfSU5URUdFUiA9IF9nbG9iYWwuZ2V0QnVpbHRpblR5cGUoU2NoZW1hVHlwZS5CVENfTk9OX05FR0FUSVZFX0lOVEVHRVIpOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZUltcGwgU1RfUE9TSVRJVkVfSU5URUdFUiA9IF9nbG9iYWwuZ2V0QnVpbHRpblR5cGUoU2NoZW1hVHlwZS5CVENfUE9TSVRJVkVfSU5URUdFUik7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlSW1wbCBTVF9VTlNJR05FRF9MT05HID0gX2dsb2JhbC5nZXRCdWlsdGluVHlwZShTY2hlbWFUeXBlLkJUQ19VTlNJR05FRF9MT05HKTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGVJbXBsIFNUX1VOU0lHTkVEX0lOVCA9IF9nbG9iYWwuZ2V0QnVpbHRpblR5cGUoU2NoZW1hVHlwZS5CVENfVU5TSUdORURfSU5UKTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGVJbXBsIFNUX1VOU0lHTkVEX1NIT1JUID0gX2dsb2JhbC5nZXRCdWlsdGluVHlwZShTY2hlbWFUeXBlLkJUQ19VTlNJR05FRF9TSE9SVCk7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlSW1wbCBTVF9VTlNJR05FRF9CWVRFID0gX2dsb2JhbC5nZXRCdWlsdGluVHlwZShTY2hlbWFUeXBlLkJUQ19VTlNJR05FRF9CWVRFKTsKLQotICAgIC8vIGRlcml2ZWQgc3RyaW5ncwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZUltcGwgU1RfTk9STUFMSVpFRF9TVFJJTkcgPSBfZ2xvYmFsLmdldEJ1aWx0aW5UeXBlKFNjaGVtYVR5cGUuQlRDX05PUk1BTElaRURfU1RSSU5HKTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGVJbXBsIFNUX1RPS0VOID0gX2dsb2JhbC5nZXRCdWlsdGluVHlwZShTY2hlbWFUeXBlLkJUQ19UT0tFTik7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlSW1wbCBTVF9OQU1FID0gX2dsb2JhbC5nZXRCdWlsdGluVHlwZShTY2hlbWFUeXBlLkJUQ19OQU1FKTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGVJbXBsIFNUX05DTkFNRSA9IF9nbG9iYWwuZ2V0QnVpbHRpblR5cGUoU2NoZW1hVHlwZS5CVENfTkNOQU1FKTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGVJbXBsIFNUX0xBTkdVQUdFID0gX2dsb2JhbC5nZXRCdWlsdGluVHlwZShTY2hlbWFUeXBlLkJUQ19MQU5HVUFHRSk7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlSW1wbCBTVF9JRCA9IF9nbG9iYWwuZ2V0QnVpbHRpblR5cGUoU2NoZW1hVHlwZS5CVENfSUQpOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZUltcGwgU1RfSURSRUYgPSBfZ2xvYmFsLmdldEJ1aWx0aW5UeXBlKFNjaGVtYVR5cGUuQlRDX0lEUkVGKTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGVJbXBsIFNUX0lEUkVGUyA9IF9nbG9iYWwuZ2V0QnVpbHRpblR5cGUoU2NoZW1hVHlwZS5CVENfSURSRUZTKTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGVJbXBsIFNUX0VOVElUWSA9IF9nbG9iYWwuZ2V0QnVpbHRpblR5cGUoU2NoZW1hVHlwZS5CVENfRU5USVRZKTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGVJbXBsIFNUX0VOVElUSUVTID0gX2dsb2JhbC5nZXRCdWlsdGluVHlwZShTY2hlbWFUeXBlLkJUQ19FTlRJVElFUyk7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlSW1wbCBTVF9OTVRPS0VOID0gX2dsb2JhbC5nZXRCdWlsdGluVHlwZShTY2hlbWFUeXBlLkJUQ19OTVRPS0VOKTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGVJbXBsIFNUX05NVE9LRU5TID0gX2dsb2JhbC5nZXRCdWlsdGluVHlwZShTY2hlbWFUeXBlLkJUQ19OTVRPS0VOUyk7Ci0KLSAgICAvLyB0aGUgbm8tdHlwZQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZUltcGwgU1RfTk9fVFlQRSA9IF9nbG9iYWwuZ2V0QnVpbHRpblR5cGUoU2NoZW1hVHlwZS5CVENfTk9UX0JVSUxUSU4pOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgWG1sVmFsdWVSZWYgWE1MU1RSX1BSRVNFUlZFID0gYnVpbGRTdHJpbmcoInByZXNlcnZlIik7Ci0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgWG1sVmFsdWVSZWYgWE1MU1RSX1JFUExBQ0UgPSBidWlsZFN0cmluZygicHJlc2VydmUiKTsKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBYbWxWYWx1ZVJlZiBYTUxTVFJfQ09MTEFQU0UgPSBidWlsZFN0cmluZygicHJlc2VydmUiKTsKLQotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFhtbFZhbHVlUmVmW10gRkFDRVRTX05PTkUgPSBuZXcgWG1sVmFsdWVSZWZbXQotICAgICAgICB7IG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsCi0gICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCB9OwotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgYm9vbGVhbltdIEZJWEVEX0ZBQ0VUU19OT05FID0gbmV3IGJvb2xlYW5bXQotICAgICAgICB7IGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsCi0gICAgICAgICAgZmFsc2UsIGZhbHNlLCBmYWxzZSB9OwotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgWG1sVmFsdWVSZWZbXSBGQUNFVFNfV1NfQ09MTEFQU0UgPSBuZXcgWG1sVmFsdWVSZWZbXQotICAgICAgICB7IG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsCi0gICAgICAgICAgYnVpbGRfd3NzdHJpbmcoU2NoZW1hVHlwZS5XU19DT0xMQVBTRSksIG51bGwsIG51bGwgfTsKLQotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFhtbFZhbHVlUmVmW10gRkFDRVRTX1dTX1JFUExBQ0UgPSBuZXcgWG1sVmFsdWVSZWZbXQotICAgICAgICB7IG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsCi0gICAgICAgICAgYnVpbGRfd3NzdHJpbmcoU2NoZW1hVHlwZS5XU19SRVBMQUNFKSwgbnVsbCwgbnVsbCB9OwotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgWG1sVmFsdWVSZWZbXSBGQUNFVFNfV1NfUFJFU0VSVkUgPSBuZXcgWG1sVmFsdWVSZWZbXQotICAgICAgICB7IG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsCi0gICAgICAgICAgYnVpbGRfd3NzdHJpbmcoU2NoZW1hVHlwZS5XU19QUkVTRVJWRSksIG51bGwsIG51bGwgfTsKLQotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFhtbFZhbHVlUmVmW10gRkFDRVRTX0lOVEVHRVIgPSBuZXcgWG1sVmFsdWVSZWZbXQotICAgICAgICB7IG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIGJ1aWxkTm5JbnRlZ2VyKEJpZ0ludGVnZXIuWkVSTyksCi0gICAgICAgICAgYnVpbGRfd3NzdHJpbmcoU2NoZW1hVHlwZS5XU19DT0xMQVBTRSksIG51bGwsIG51bGwgfTsKLQotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFhtbFZhbHVlUmVmW10gRkFDRVRTX0xPTkcgPSBuZXcgWG1sVmFsdWVSZWZbXQotICAgICAgICB7IG51bGwsIG51bGwsIG51bGwsIG51bGwsIGJ1aWxkSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YoTG9uZy5NSU5fVkFMVUUpKSwgYnVpbGRJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihMb25nLk1BWF9WQUxVRSkpLCBudWxsLCBudWxsLCBidWlsZE5uSW50ZWdlcihCaWdJbnRlZ2VyLlpFUk8pLAotICAgICAgICAgIGJ1aWxkX3dzc3RyaW5nKFNjaGVtYVR5cGUuV1NfQ09MTEFQU0UpLCBudWxsLCBudWxsIH07Ci0KLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBYbWxWYWx1ZVJlZltdIEZBQ0VUU19JTlQgPSBuZXcgWG1sVmFsdWVSZWZbXQotICAgICAgICB7IG51bGwsIG51bGwsIG51bGwsIG51bGwsIGJ1aWxkSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YoSW50ZWdlci5NSU5fVkFMVUUpKSwgYnVpbGRJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihJbnRlZ2VyLk1BWF9WQUxVRSkpLCBudWxsLCBudWxsLCBidWlsZE5uSW50ZWdlcihCaWdJbnRlZ2VyLlpFUk8pLAotICAgICAgICAgIGJ1aWxkX3dzc3RyaW5nKFNjaGVtYVR5cGUuV1NfQ09MTEFQU0UpLCBudWxsLCBudWxsIH07Ci0KLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBYbWxWYWx1ZVJlZltdIEZBQ0VUU19TSE9SVCA9IG5ldyBYbWxWYWx1ZVJlZltdCi0gICAgICAgIHsgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgYnVpbGRJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihTaG9ydC5NSU5fVkFMVUUpKSwgYnVpbGRJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihTaG9ydC5NQVhfVkFMVUUpKSwgbnVsbCwgbnVsbCwgYnVpbGRObkludGVnZXIoQmlnSW50ZWdlci5aRVJPKSwKLSAgICAgICAgICBidWlsZF93c3N0cmluZyhTY2hlbWFUeXBlLldTX0NPTExBUFNFKSwgbnVsbCwgbnVsbCB9OwotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgWG1sVmFsdWVSZWZbXSBGQUNFVFNfQllURSA9IG5ldyBYbWxWYWx1ZVJlZltdCi0gICAgICAgIHsgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgYnVpbGRJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZihCeXRlLk1JTl9WQUxVRSkpLCBidWlsZEludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKEJ5dGUuTUFYX1ZBTFVFKSksIG51bGwsIG51bGwsIGJ1aWxkTm5JbnRlZ2VyKEJpZ0ludGVnZXIuWkVSTyksCi0gICAgICAgICAgYnVpbGRfd3NzdHJpbmcoU2NoZW1hVHlwZS5XU19DT0xMQVBTRSksIG51bGwsIG51bGwgfTsKLQotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFhtbFZhbHVlUmVmW10gRkFDRVRTX05PTk5FR0FUSVZFID0gbmV3IFhtbFZhbHVlUmVmW10KLSAgICAgICAgeyBudWxsLCBudWxsLCBudWxsLCBudWxsLCBidWlsZEludGVnZXIoQmlnSW50ZWdlci5aRVJPKSwgbnVsbCwgbnVsbCwgbnVsbCwgYnVpbGRObkludGVnZXIoQmlnSW50ZWdlci5aRVJPKSwKLSAgICAgICAgICBidWlsZF93c3N0cmluZyhTY2hlbWFUeXBlLldTX0NPTExBUFNFKSwgbnVsbCwgbnVsbCB9OwotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgWG1sVmFsdWVSZWZbXSBGQUNFVFNfUE9TSVRJVkUgPSBuZXcgWG1sVmFsdWVSZWZbXQotICAgICAgICB7IG51bGwsIG51bGwsIG51bGwsIG51bGwsIGJ1aWxkSW50ZWdlcihCaWdJbnRlZ2VyLk9ORSksIG51bGwsIG51bGwsIG51bGwsIGJ1aWxkTm5JbnRlZ2VyKEJpZ0ludGVnZXIuWkVSTyksCi0gICAgICAgICAgYnVpbGRfd3NzdHJpbmcoU2NoZW1hVHlwZS5XU19DT0xMQVBTRSksIG51bGwsIG51bGwgfTsKLQotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFhtbFZhbHVlUmVmW10gRkFDRVRTX05PTlBPU0lUSVZFID0gbmV3IFhtbFZhbHVlUmVmW10KLSAgICAgICAgeyBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBidWlsZEludGVnZXIoQmlnSW50ZWdlci5aRVJPKSwgbnVsbCwgbnVsbCwgYnVpbGRObkludGVnZXIoQmlnSW50ZWdlci5aRVJPKSwKLSAgICAgICAgICBidWlsZF93c3N0cmluZyhTY2hlbWFUeXBlLldTX0NPTExBUFNFKSwgbnVsbCwgbnVsbCB9OwotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgWG1sVmFsdWVSZWZbXSBGQUNFVFNfTkVHQVRJVkUgPSBuZXcgWG1sVmFsdWVSZWZbXQotICAgICAgICB7IG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIGJ1aWxkSW50ZWdlcihCaWdJbnRlZ2VyLk9ORS5uZWdhdGUoKSksIG51bGwsIG51bGwsIGJ1aWxkTm5JbnRlZ2VyKEJpZ0ludGVnZXIuWkVSTyksCi0gICAgICAgICAgYnVpbGRfd3NzdHJpbmcoU2NoZW1hVHlwZS5XU19DT0xMQVBTRSksIG51bGwsIG51bGwgfTsKLQotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFhtbFZhbHVlUmVmW10gRkFDRVRTX1VOU0lHTkVEX0xPTkcgPSBuZXcgWG1sVmFsdWVSZWZbXQotICAgICAgICB7IG51bGwsIG51bGwsIG51bGwsIG51bGwsIGJ1aWxkSW50ZWdlcihCaWdJbnRlZ2VyLlpFUk8pLCBidWlsZEludGVnZXIobmV3IEJpZ0ludGVnZXIoIjE4NDQ2NzQ0MDczNzA5NTUxNjE1IikpLCBudWxsLCBudWxsLCBidWlsZE5uSW50ZWdlcihCaWdJbnRlZ2VyLlpFUk8pLAotICAgICAgICAgIGJ1aWxkX3dzc3RyaW5nKFNjaGVtYVR5cGUuV1NfQ09MTEFQU0UpLCBudWxsLCBudWxsIH07Ci0KLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBYbWxWYWx1ZVJlZltdIEZBQ0VUU19VTlNJR05FRF9JTlQgPSBuZXcgWG1sVmFsdWVSZWZbXQotICAgICAgICB7IG51bGwsIG51bGwsIG51bGwsIG51bGwsIGJ1aWxkSW50ZWdlcihCaWdJbnRlZ2VyLlpFUk8pLCBidWlsZEludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKDQyOTQ5NjcyOTVMKSksIG51bGwsIG51bGwsIGJ1aWxkTm5JbnRlZ2VyKEJpZ0ludGVnZXIuWkVSTyksCi0gICAgICAgICAgYnVpbGRfd3NzdHJpbmcoU2NoZW1hVHlwZS5XU19DT0xMQVBTRSksIG51bGwsIG51bGwgfTsKLQotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFhtbFZhbHVlUmVmW10gRkFDRVRTX1VOU0lHTkVEX1NIT1JUID0gbmV3IFhtbFZhbHVlUmVmW10KLSAgICAgICAgeyBudWxsLCBudWxsLCBudWxsLCBudWxsLCBidWlsZEludGVnZXIoQmlnSW50ZWdlci5aRVJPKSwgYnVpbGRJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZig2NTUzNSkpLCBudWxsLCBudWxsLCBidWlsZE5uSW50ZWdlcihCaWdJbnRlZ2VyLlpFUk8pLAotICAgICAgICAgIGJ1aWxkX3dzc3RyaW5nKFNjaGVtYVR5cGUuV1NfQ09MTEFQU0UpLCBudWxsLCBudWxsIH07Ci0KLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBYbWxWYWx1ZVJlZltdIEZBQ0VUU19VTlNJR05FRF9CWVRFID0gbmV3IFhtbFZhbHVlUmVmW10KLSAgICAgICAgeyBudWxsLCBudWxsLCBudWxsLCBudWxsLCBidWlsZEludGVnZXIoQmlnSW50ZWdlci5aRVJPKSwgYnVpbGRJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZigyNTUpKSwgbnVsbCwgbnVsbCwgYnVpbGRObkludGVnZXIoQmlnSW50ZWdlci5aRVJPKSwKLSAgICAgICAgICBidWlsZF93c3N0cmluZyhTY2hlbWFUeXBlLldTX0NPTExBUFNFKSwgbnVsbCwgbnVsbCB9OwotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgWG1sVmFsdWVSZWZbXSBGQUNFVFNfQlVJTFRJTl9MSVNUID0gbmV3IFhtbFZhbHVlUmVmW10KLSAgICAgICAgeyBudWxsLCBidWlsZE5uSW50ZWdlcihCaWdJbnRlZ2VyLk9ORSksIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsCi0gICAgICAgICAgYnVpbGRfd3NzdHJpbmcoU2NoZW1hVHlwZS5XU19DT0xMQVBTRSksIG51bGwsIG51bGwgfTsKLQotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGJvb2xlYW5bXSBGSVhFRF9GQUNFVFNfV1MgPSBuZXcgYm9vbGVhbltdCi0gICAgICAgIHsgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKLSAgICAgICAgICB0cnVlLCBmYWxzZSwgZmFsc2UgfTsKLQotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGJvb2xlYW5bXSBGSVhFRF9GQUNFVFNfSU5URUdFUiA9IG5ldyBib29sZWFuW10KLSAgICAgICAgeyBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsCi0gICAgICAgICAgdHJ1ZSwgZmFsc2UsIGZhbHNlIH07Ci0KLSAgICBmaW5hbCBzdGF0aWMgWG1sVmFsdWVSZWZbXSBGQUNFVFNfVU5JT04gPSBGQUNFVFNfTk9ORTsKLSAgICBmaW5hbCBzdGF0aWMgYm9vbGVhbltdIEZJWEVEX0ZBQ0VUU19VTklPTiA9IEZJWEVEX0ZBQ0VUU19OT05FOwotCi0gICAgZmluYWwgc3RhdGljIFhtbFZhbHVlUmVmW10gRkFDRVRTX0xJU1QgPSBGQUNFVFNfV1NfQ09MTEFQU0U7Ci0gICAgZmluYWwgc3RhdGljIGJvb2xlYW5bXSBGSVhFRF9GQUNFVFNfTElTVCA9IEZJWEVEX0ZBQ0VUU19XUzsKLQotCi0gICAgLyoKLSAgICAgKiBMQVNUIFN0YXRpYyBpbml0aWFsaXplcgotICAgICAqLwotICAgIHN0YXRpYyB7Ci0gICAgICAgIGZvciAoaW50IGkgPSBTY2hlbWFUeXBlLkJUQ19OT1RfQlVJTFRJTjsgaSA8PSBTY2hlbWFUeXBlLkJUQ19MQVNUX0JVSUxUSU47IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgX2dsb2JhbC5maWxsSW5UeXBlKGkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBNYXAgX3R5cGVNYXAgPSBuZXcgSGFzaE1hcCgpOwotICAgIHByaXZhdGUgU2NoZW1hVHlwZUltcGxbXSBfdHlwZUFycmF5ID0gbmV3IFNjaGVtYVR5cGVJbXBsW1NjaGVtYVR5cGUuQlRDX0xBU1RfQlVJTFRJTiArIDFdOwotICAgIHByaXZhdGUgTWFwIF9oYW5kbGVzVG9PYmplY3RzID0gbmV3IEhhc2hNYXAoKTsKLSAgICBwcml2YXRlIE1hcCBfb2JqZWN0c1RvSGFuZGxlcyA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgcHJpdmF0ZSBNYXAgX3R5cGVzQnlDbGFzc25hbWUgPSBuZXcgSGFzaE1hcCgpOwotCi0gICAgcHJpdmF0ZSBTY2hlbWFUeXBlSW1wbCBnZXRCdWlsdGluVHlwZShpbnQgYnRjKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF90eXBlQXJyYXlbYnRjXTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtKCkKLSAgICB7Ci0gICAgICAgIC8vIFVSIHR5cGVzCi0gICAgICAgIHNldHVwQnVpbHRpbihTY2hlbWFUeXBlLkJUQ19BTllfVFlQRSwgImFueVR5cGUiLCAib3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiKTsKLSAgICAgICAgc2V0dXBCdWlsdGluKFNjaGVtYVR5cGUuQlRDX0FOWV9TSU1QTEUsICJhbnlTaW1wbGVUeXBlIiwgIm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSIpOwotCi0gICAgICAgIC8vIHByaW1pdGl2ZXMKLSAgICAgICAgc2V0dXBCdWlsdGluKFNjaGVtYVR5cGUuQlRDX0JPT0xFQU4sICJib29sZWFuIiwgIm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQm9vbGVhbiIpOwotICAgICAgICBzZXR1cEJ1aWx0aW4oU2NoZW1hVHlwZS5CVENfQkFTRV82NF9CSU5BUlksICJiYXNlNjRCaW5hcnkiLCAib3JnLmFwYWNoZS54bWxiZWFucy5YbWxCYXNlNjRCaW5hcnkiKTsKLSAgICAgICAgc2V0dXBCdWlsdGluKFNjaGVtYVR5cGUuQlRDX0hFWF9CSU5BUlksICJoZXhCaW5hcnkiLCAib3JnLmFwYWNoZS54bWxiZWFucy5YbWxIZXhCaW5hcnkiKTsKLSAgICAgICAgc2V0dXBCdWlsdGluKFNjaGVtYVR5cGUuQlRDX0FOWV9VUkksICJhbnlVUkkiLCAib3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlVUkkiKTsKLSAgICAgICAgc2V0dXBCdWlsdGluKFNjaGVtYVR5cGUuQlRDX1FOQU1FLCAiUU5hbWUiLCAib3JnLmFwYWNoZS54bWxiZWFucy5YbWxRTmFtZSIpOwotICAgICAgICBzZXR1cEJ1aWx0aW4oU2NoZW1hVHlwZS5CVENfTk9UQVRJT04sICJOT1RBVElPTiIsICJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE5PVEFUSU9OIik7Ci0gICAgICAgIHNldHVwQnVpbHRpbihTY2hlbWFUeXBlLkJUQ19GTE9BVCwgImZsb2F0IiwgIm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRmxvYXQiKTsKLSAgICAgICAgc2V0dXBCdWlsdGluKFNjaGVtYVR5cGUuQlRDX0RPVUJMRSwgImRvdWJsZSIsICJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERvdWJsZSIpOwotICAgICAgICBzZXR1cEJ1aWx0aW4oU2NoZW1hVHlwZS5CVENfREVDSU1BTCwgImRlY2ltYWwiLCAib3JnLmFwYWNoZS54bWxiZWFucy5YbWxEZWNpbWFsIik7Ci0gICAgICAgIHNldHVwQnVpbHRpbihTY2hlbWFUeXBlLkJUQ19TVFJJTkcsICJzdHJpbmciLCAib3JnLmFwYWNoZS54bWxiZWFucy5YbWxTdHJpbmciKTsKLQotICAgICAgICBzZXR1cEJ1aWx0aW4oU2NoZW1hVHlwZS5CVENfRFVSQVRJT04sICJkdXJhdGlvbiIsICJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbER1cmF0aW9uIik7Ci0gICAgICAgIHNldHVwQnVpbHRpbihTY2hlbWFUeXBlLkJUQ19EQVRFX1RJTUUsICJkYXRlVGltZSIsICJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERhdGVUaW1lIik7Ci0gICAgICAgIHNldHVwQnVpbHRpbihTY2hlbWFUeXBlLkJUQ19USU1FLCAidGltZSIsICJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFRpbWUiKTsKLSAgICAgICAgc2V0dXBCdWlsdGluKFNjaGVtYVR5cGUuQlRDX0RBVEUsICJkYXRlIiwgIm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRGF0ZSIpOwotICAgICAgICBzZXR1cEJ1aWx0aW4oU2NoZW1hVHlwZS5CVENfR19ZRUFSX01PTlRILCAiZ1llYXJNb250aCIsICJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEdZZWFyTW9udGgiKTsKLSAgICAgICAgc2V0dXBCdWlsdGluKFNjaGVtYVR5cGUuQlRDX0dfWUVBUiwgImdZZWFyIiwgIm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sR1llYXIiKTsKLSAgICAgICAgc2V0dXBCdWlsdGluKFNjaGVtYVR5cGUuQlRDX0dfTU9OVEhfREFZLCAiZ01vbnRoRGF5IiwgIm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sR01vbnRoRGF5Iik7Ci0gICAgICAgIHNldHVwQnVpbHRpbihTY2hlbWFUeXBlLkJUQ19HX0RBWSwgImdEYXkiLCAib3JnLmFwYWNoZS54bWxiZWFucy5YbWxHRGF5Iik7Ci0gICAgICAgIHNldHVwQnVpbHRpbihTY2hlbWFUeXBlLkJUQ19HX01PTlRILCAiZ01vbnRoIiwgIm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sR01vbnRoIik7Ci0KLSAgICAgICAgLy8gZGVyaXZlZCBudW1lcmljcwotICAgICAgICBzZXR1cEJ1aWx0aW4oU2NoZW1hVHlwZS5CVENfSU5URUdFUiwgImludGVnZXIiLCAib3JnLmFwYWNoZS54bWxiZWFucy5YbWxJbnRlZ2VyIik7Ci0gICAgICAgIHNldHVwQnVpbHRpbihTY2hlbWFUeXBlLkJUQ19MT05HLCAibG9uZyIsICJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbExvbmciKTsKLSAgICAgICAgc2V0dXBCdWlsdGluKFNjaGVtYVR5cGUuQlRDX0lOVCwgImludCIsICJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEludCIpOwotICAgICAgICBzZXR1cEJ1aWx0aW4oU2NoZW1hVHlwZS5CVENfU0hPUlQsICJzaG9ydCIsICJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFNob3J0Iik7Ci0gICAgICAgIHNldHVwQnVpbHRpbihTY2hlbWFUeXBlLkJUQ19CWVRFLCAiYnl0ZSIsICJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJ5dGUiKTsKLSAgICAgICAgc2V0dXBCdWlsdGluKFNjaGVtYVR5cGUuQlRDX05PTl9QT1NJVElWRV9JTlRFR0VSLCAibm9uUG9zaXRpdmVJbnRlZ2VyIiwgIm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sTm9uUG9zaXRpdmVJbnRlZ2VyIik7Ci0gICAgICAgIHNldHVwQnVpbHRpbihTY2hlbWFUeXBlLkJUQ19ORUdBVElWRV9JTlRFR0VSLCAibmVnYXRpdmVJbnRlZ2VyIiwgIm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sTmVnYXRpdmVJbnRlZ2VyIik7Ci0gICAgICAgIHNldHVwQnVpbHRpbihTY2hlbWFUeXBlLkJUQ19OT05fTkVHQVRJVkVfSU5URUdFUiwgIm5vbk5lZ2F0aXZlSW50ZWdlciIsICJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE5vbk5lZ2F0aXZlSW50ZWdlciIpOwotICAgICAgICBzZXR1cEJ1aWx0aW4oU2NoZW1hVHlwZS5CVENfUE9TSVRJVkVfSU5URUdFUiwgInBvc2l0aXZlSW50ZWdlciIsICJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFBvc2l0aXZlSW50ZWdlciIpOwotICAgICAgICBzZXR1cEJ1aWx0aW4oU2NoZW1hVHlwZS5CVENfVU5TSUdORURfTE9ORywgInVuc2lnbmVkTG9uZyIsICJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFVuc2lnbmVkTG9uZyIpOwotICAgICAgICBzZXR1cEJ1aWx0aW4oU2NoZW1hVHlwZS5CVENfVU5TSUdORURfSU5ULCAidW5zaWduZWRJbnQiLCAib3JnLmFwYWNoZS54bWxiZWFucy5YbWxVbnNpZ25lZEludCIpOwotICAgICAgICBzZXR1cEJ1aWx0aW4oU2NoZW1hVHlwZS5CVENfVU5TSUdORURfU0hPUlQsICJ1bnNpZ25lZFNob3J0IiwgIm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sVW5zaWduZWRTaG9ydCIpOwotICAgICAgICBzZXR1cEJ1aWx0aW4oU2NoZW1hVHlwZS5CVENfVU5TSUdORURfQllURSwgInVuc2lnbmVkQnl0ZSIsICJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFVuc2lnbmVkQnl0ZSIpOwotCi0gICAgICAgIC8vIGRlcml2ZWQgc3RyaW5ncwotICAgICAgICBzZXR1cEJ1aWx0aW4oU2NoZW1hVHlwZS5CVENfTk9STUFMSVpFRF9TVFJJTkcsICJub3JtYWxpemVkU3RyaW5nIiwgIm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sTm9ybWFsaXplZFN0cmluZyIpOwotICAgICAgICBzZXR1cEJ1aWx0aW4oU2NoZW1hVHlwZS5CVENfVE9LRU4sICJ0b2tlbiIsICJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFRva2VuIik7Ci0gICAgICAgIHNldHVwQnVpbHRpbihTY2hlbWFUeXBlLkJUQ19OQU1FLCAiTmFtZSIsICJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE5hbWUiKTsKLSAgICAgICAgc2V0dXBCdWlsdGluKFNjaGVtYVR5cGUuQlRDX05DTkFNRSwgIk5DTmFtZSIsICJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE5DTmFtZSIpOwotICAgICAgICBzZXR1cEJ1aWx0aW4oU2NoZW1hVHlwZS5CVENfTEFOR1VBR0UsICJsYW5ndWFnZSIsICJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbExhbmd1YWdlIik7Ci0gICAgICAgIHNldHVwQnVpbHRpbihTY2hlbWFUeXBlLkJUQ19JRCwgIklEIiwgIm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sSUQiKTsKLSAgICAgICAgc2V0dXBCdWlsdGluKFNjaGVtYVR5cGUuQlRDX0lEUkVGLCAiSURSRUYiLCAib3JnLmFwYWNoZS54bWxiZWFucy5YbWxJRFJFRiIpOwotICAgICAgICBzZXR1cEJ1aWx0aW4oU2NoZW1hVHlwZS5CVENfSURSRUZTLCAiSURSRUZTIiwgIm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sSURSRUZTIik7Ci0gICAgICAgIHNldHVwQnVpbHRpbihTY2hlbWFUeXBlLkJUQ19FTlRJVFksICJFTlRJVFkiLCAib3JnLmFwYWNoZS54bWxiZWFucy5YbWxFTlRJVFkiKTsKLSAgICAgICAgc2V0dXBCdWlsdGluKFNjaGVtYVR5cGUuQlRDX0VOVElUSUVTLCAiRU5USVRJRVMiLCAib3JnLmFwYWNoZS54bWxiZWFucy5YbWxFTlRJVElFUyIpOwotICAgICAgICBzZXR1cEJ1aWx0aW4oU2NoZW1hVHlwZS5CVENfTk1UT0tFTiwgIk5NVE9LRU4iLCAib3JnLmFwYWNoZS54bWxiZWFucy5YbWxOTVRPS0VOIik7Ci0gICAgICAgIHNldHVwQnVpbHRpbihTY2hlbWFUeXBlLkJUQ19OTVRPS0VOUywgIk5NVE9LRU5TIiwgIm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sTk1UT0tFTlMiKTsKLQotICAgICAgICAvLyB0aGUgbm8tdHlwZQotICAgICAgICBzZXR1cEJ1aWx0aW4oU2NoZW1hVHlwZS5CVENfTk9UX0JVSUxUSU4sIG51bGwsIG51bGwpOwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGlzIGxvYWRlci4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICJzY2hlbWEudHlwZXN5c3RlbS5idWlsdGluIjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc05hbWVzcGFjZURlZmluZWQoU3RyaW5nIG5hbWVzcGFjZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuYW1lc3BhY2UuZXF1YWxzKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIpOwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFUeXBlIGZpbmRUeXBlKFFOYW1lIG5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gKFNjaGVtYVR5cGUpX3R5cGVNYXAuZ2V0KG5hbWUpOwotICAgIH0KLQotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgZmluZERvY3VtZW50VHlwZShRTmFtZSBuYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgZmluZEF0dHJpYnV0ZVR5cGUoUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFHbG9iYWxFbGVtZW50IGZpbmRFbGVtZW50KFFOYW1lIG5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hR2xvYmFsQXR0cmlidXRlIGZpbmRBdHRyaWJ1dGUoUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFUeXBlLlJlZiBmaW5kVHlwZVJlZihRTmFtZSBuYW1lKQotICAgIHsKLSAgICAgICAgU2NoZW1hVHlwZSB0eXBlID0gZmluZFR5cGUobmFtZSk7Ci0gICAgICAgIHJldHVybiAodHlwZSA9PSBudWxsID8gbnVsbCA6IHR5cGUuZ2V0UmVmKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFUeXBlLlJlZiBmaW5kRG9jdW1lbnRUeXBlUmVmKFFOYW1lIG5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hVHlwZS5SZWYgZmluZEF0dHJpYnV0ZVR5cGVSZWYoUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFHbG9iYWxFbGVtZW50LlJlZiBmaW5kRWxlbWVudFJlZihRTmFtZSBuYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWYgZmluZEF0dHJpYnV0ZVJlZihRTmFtZSBuYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYU1vZGVsR3JvdXAuUmVmIGZpbmRNb2RlbEdyb3VwUmVmKFFOYW1lIG5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmIGZpbmRBdHRyaWJ1dGVHcm91cFJlZihRTmFtZSBuYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWYgZmluZElkZW50aXR5Q29uc3RyYWludFJlZihRTmFtZSBuYW1lKSAKLSAgICB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFUeXBlIHR5cGVGb3JDbGFzc25hbWUoU3RyaW5nIGNsYXNzbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoU2NoZW1hVHlwZSlfdHlwZXNCeUNsYXNzbmFtZS5nZXQoY2xhc3NuYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSW5wdXRTdHJlYW0gZ2V0U291cmNlQXNTdHJlYW0oU3RyaW5nIHNvdXJjZU5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gbnVsbDsgLy8gYnVpbHRpbiBzY2hlbWEgdHlwZSBzeXN0ZW0gaGFzIG5vIHNvdXJjZS4KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBnbG9iYWwgdHlwZXMgZGVmaW5lZCBpbiB0aGlzIGxvYWRlci4KLSAgICAgKi8KLSAgICBwdWJsaWMgU2NoZW1hVHlwZVtdIGdsb2JhbFR5cGVzKCkKLSAgICB7Ci0gICAgICAgIFNjaGVtYVR5cGVbXSByZXN1bHQgPSBuZXcgU2NoZW1hVHlwZVtfdHlwZUFycmF5Lmxlbmd0aCAtIDFdOwotICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KF90eXBlQXJyYXksIDEsIHJlc3VsdCwgMCwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgZG9jdW1lbnQgdHlwZXMgZGVmaW5lZCBpbiB0aGlzIGxvYWRlci4KLSAgICAgKi8KLSAgICBwdWJsaWMgU2NoZW1hVHlwZVtdIGRvY3VtZW50VHlwZXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEVNUFRZX1NDSEVNQVRZUEVfQVJSQVk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgYXR0cmlidXRlIHR5cGVzIGRlZmluZWQgaW4gdGhpcyBsb2FkZXIuCi0gICAgICovCi0gICAgcHVibGljIFNjaGVtYVR5cGVbXSBhdHRyaWJ1dGVUeXBlcygpCi0gICAgewotICAgICAgICByZXR1cm4gRU1QVFlfU0NIRU1BVFlQRV9BUlJBWTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBnbG9iYWwgZWxlbWVudHMgZGVmaW5lZCBpbiB0aGlzIGxvYWRlci4KLSAgICAgKi8KLSAgICBwdWJsaWMgU2NoZW1hR2xvYmFsRWxlbWVudFtdIGdsb2JhbEVsZW1lbnRzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBFTVBUWV9TQ0hFTUFFTEVNRU5UX0FSUkFZOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGdsb2JhbCBhdHRyaWJ1dGVzIGRlZmluZWQgaW4gdGhpcyBsb2FkZXIuCi0gICAgICovCi0gICAgcHVibGljIFNjaGVtYUdsb2JhbEF0dHJpYnV0ZVtdIGdsb2JhbEF0dHJpYnV0ZXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEVNUFRZX1NDSEVNQUFUVFJJQlVURV9BUlJBWTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBtb2RlbCBncm91cHMgZGVmaW5lZCBpbiB0aGlzIGxvYWRlci4KLSAgICAgKi8KLSAgICBwdWJsaWMgU2NoZW1hTW9kZWxHcm91cFtdIG1vZGVsR3JvdXBzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBFTVBUWV9TQ0hFTUFNT0RFTEdST1VQX0FSUkFZOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGF0dHJpYnV0ZSBncm91cHMgZGVmaW5lZCBpbiB0aGlzIGxvYWRlci4KLSAgICAgKi8KLSAgICBwdWJsaWMgU2NoZW1hQXR0cmlidXRlR3JvdXBbXSBhdHRyaWJ1dGVHcm91cHMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEVNUFRZX1NDSEVNQUFUVFJJQlVURUdST1VQX0FSUkFZOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGhhbmRsZSBmb3IgdGhlIGdpdmVuIHR5cGUgd2l0aGluIHRoaXMgbG9hZGVyLgotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgaGFuZGxlRm9yVHlwZShTY2hlbWFUeXBlIHR5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gKFN0cmluZylfb2JqZWN0c1RvSGFuZGxlcy5nZXQodHlwZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgY2xhc3Nsb2FkZXIgdXNlZCBieSB0aGlzIGxvYWRlciBmb3IgcmVzb2x2aW5nIHR5cGVzLgotICAgICAqLwotICAgIHB1YmxpYyBDbGFzc0xvYWRlciBnZXRDbGFzc0xvYWRlcigpCi0gICAgewotICAgICAgICByZXR1cm4gQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTYXZlcyB0aGlzIHR5cGUgdG8gYSBkaXJlY3RvcnkuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2F2ZVRvRGlyZWN0b3J5KEZpbGUgY2xhc3NEaXIpCi0gICAgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlRoZSBidWlsdGluIHNjaGVtYSB0eXBlIHN5c3RlbSBjYW5ub3QgYmUgc2F2ZWQuIik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgWG1sVmFsdWVSZWYgYnVpbGRfd3NzdHJpbmcoaW50IHdzcikKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAod3NyKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuV1NfUFJFU0VSVkU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFhNTFNUUl9QUkVTRVJWRTsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5XU19SRVBMQUNFOgotICAgICAgICAgICAgICAgIHJldHVybiBYTUxTVFJfUkVQTEFDRTsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5XU19DT0xMQVBTRToKLSAgICAgICAgICAgICAgICByZXR1cm4gWE1MU1RSX0NPTExBUFNFOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFhtbFZhbHVlUmVmIGJ1aWxkTm5JbnRlZ2VyKEJpZ0ludGVnZXIgYmlnSW50KQotICAgIHsKLSAgICAgICAgaWYgKGJpZ0ludCA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIGlmIChiaWdJbnQuc2lnbnVtKCkgPCAwKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxJbnRlZ2VySW1wbCBpID0gbmV3IFhtbEludGVnZXJJbXBsKCk7Ci0gICAgICAgICAgICBpLnNldChiaWdJbnQpOwotICAgICAgICAgICAgaS5zZXRJbW11dGFibGUoKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgWG1sVmFsdWVSZWYoaSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFhtbFZhbHVlUmVmIGJ1aWxkSW50ZWdlcihCaWdJbnRlZ2VyIGJpZ0ludCkKLSAgICB7Ci0gICAgICAgIGlmIChiaWdJbnQgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgWG1sSW50ZWdlckltcGwgaSA9IG5ldyBYbWxJbnRlZ2VySW1wbCgpOwotICAgICAgICAgICAgaS5zZXQoYmlnSW50KTsKLSAgICAgICAgICAgIGkuc2V0SW1tdXRhYmxlKCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFhtbFZhbHVlUmVmKGkpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChYbWxWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBYbWxWYWx1ZVJlZiBidWlsZFN0cmluZyhTdHJpbmcgc3RyKQotICAgIHsKLSAgICAgICAgaWYgKHN0ciA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFhtbFN0cmluZ0ltcGwgaSA9IG5ldyBYbWxTdHJpbmdJbXBsKCk7Ci0gICAgICAgICAgICBpLnNldChzdHIpOwotICAgICAgICAgICAgaS5zZXRJbW11dGFibGUoKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgWG1sVmFsdWVSZWYoaSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzZXR1cEJ1aWx0aW4oaW50IGJ0YywgU3RyaW5nIGxvY2FsbmFtZSwgU3RyaW5nIGNsYXNzbmFtZSkKLSAgICB7Ci0gICAgICAgIFNjaGVtYVR5cGVJbXBsIHJlc3VsdCA9IG5ldyBTY2hlbWFUeXBlSW1wbCh0aGlzLCB0cnVlKTsKLSAgICAgICAgUU5hbWUgbmFtZSA9IGxvY2FsbmFtZSA9PSBudWxsID8gbnVsbCA6IFFOYW1lSGVscGVyLmZvckxOUyhsb2NhbG5hbWUsICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIpOwotICAgICAgICBTdHJpbmcgaGFuZGxlID0gIl9CSV8iICsgKGxvY2FsbmFtZSA9PSBudWxsID8gIk5PX1RZUEUiIDogbG9jYWxuYW1lKTsKLSAgICAgICAgcmVzdWx0LnNldE5hbWUobmFtZSk7Ci0gICAgICAgIHJlc3VsdC5zZXRCdWlsdGluVHlwZUNvZGUoYnRjKTsKLSAgICAgICAgaWYgKGNsYXNzbmFtZSAhPSBudWxsKQotICAgICAgICAgICAgcmVzdWx0LnNldEZ1bGxKYXZhTmFtZShjbGFzc25hbWUpOwotCi0gICAgICAgIF90eXBlQXJyYXlbYnRjXSA9IHJlc3VsdDsKLSAgICAgICAgX3R5cGVNYXAucHV0KG5hbWUsIHJlc3VsdCk7Ci0gICAgICAgIF9oYW5kbGVzVG9PYmplY3RzLnB1dChoYW5kbGUsIHJlc3VsdCk7Ci0gICAgICAgIF9vYmplY3RzVG9IYW5kbGVzLnB1dChyZXN1bHQsIGhhbmRsZSk7Ci0gICAgICAgIGlmIChjbGFzc25hbWUgIT0gbnVsbCkKLSAgICAgICAgICAgIF90eXBlc0J5Q2xhc3NuYW1lLnB1dChjbGFzc25hbWUsIHJlc3VsdCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgcmVzb2x2ZSgpCi0gICAgewotICAgICAgICAvLyB3ZSdyZSBib3JuIHJlc29sdmVkIGFuZCBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLgotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFUeXBlIHR5cGVGb3JIYW5kbGUoU3RyaW5nIGhhbmRsZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoU2NoZW1hVHlwZSlfaGFuZGxlc1RvT2JqZWN0cy5nZXQoaGFuZGxlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hQ29tcG9uZW50IHJlc29sdmVIYW5kbGUoU3RyaW5nIGhhbmRsZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoU2NoZW1hQ29tcG9uZW50KV9oYW5kbGVzVG9PYmplY3RzLmdldChoYW5kbGUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIExpbmtzIGEgdHlwZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBmaWxsSW5UeXBlKGludCBidGMpCi0gICAgewotICAgICAgICBTY2hlbWFUeXBlSW1wbCByZXN1bHQgPSBnZXRCdWlsdGluVHlwZShidGMpOwotICAgICAgICBTY2hlbWFUeXBlIGJhc2U7Ci0gICAgICAgIFNjaGVtYVR5cGUgaXRlbSA9IG51bGw7Ci0gICAgICAgIGludCB2YXJpZXR5ID0gU2NoZW1hVHlwZS5BVE9NSUM7Ci0gICAgICAgIGludCBkZXJpdmF0aW9uVHlwZSA9IFNjaGVtYVR5cGUuRFRfUkVTVFJJQ1RJT047Ci0KLSAgICAgICAgc3dpdGNoIChidGMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfTk9UX0JVSUxUSU46Ci0gICAgICAgICAgICAgICAgdmFyaWV0eSA9IFNjaGVtYVR5cGUuTk9UX1NJTVBMRTsKLSAgICAgICAgICAgICAgICBiYXNlID0gU1RfQU5ZX1RZUEU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfQU5ZX1RZUEU6Ci0gICAgICAgICAgICAgICAgdmFyaWV0eSA9IFNjaGVtYVR5cGUuTk9UX1NJTVBMRTsKLSAgICAgICAgICAgICAgICBiYXNlID0gbnVsbDsKLSAgICAgICAgICAgICAgICBkZXJpdmF0aW9uVHlwZSA9IFNjaGVtYVR5cGUuRFRfUkVTVFJJQ1RJT047Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19BTllfU0lNUExFOgotICAgICAgICAgICAgICAgIGJhc2UgPSBTVF9BTllfVFlQRTsgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfQk9PTEVBTjoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfQkFTRV82NF9CSU5BUlk6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0hFWF9CSU5BUlk6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0FOWV9VUkk6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1FOQU1FOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19OT1RBVElPTjoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfRkxPQVQ6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RPVUJMRToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfREVDSU1BTDoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfU1RSSU5HOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19EVVJBVElPTjoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfREFURV9USU1FOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19USU1FOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19EQVRFOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX1lFQVJfTU9OVEg6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfWUVBUjoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19NT05USF9EQVk6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfREFZOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX01PTlRIOgotICAgICAgICAgICAgICAgIGJhc2UgPSBTVF9BTllfU0lNUExFOyBicmVhazsKLQotICAgICAgICAgICAgLy8gZGVyaXZlZCBudW1lcmljcwotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19JTlRFR0VSOgotICAgICAgICAgICAgICAgIGJhc2UgPSBTVF9ERUNJTUFMOyBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19MT05HOgotICAgICAgICAgICAgICAgIGJhc2UgPSBTVF9JTlRFR0VSOyBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19JTlQ6Ci0gICAgICAgICAgICAgICAgYmFzZSA9IFNUX0xPTkc7IGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1NIT1JUOgotICAgICAgICAgICAgICAgIGJhc2UgPSBTVF9JTlQ7IGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0JZVEU6Ci0gICAgICAgICAgICAgICAgYmFzZSA9IFNUX1NIT1JUOyBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19OT05fUE9TSVRJVkVfSU5URUdFUjoKLSAgICAgICAgICAgICAgICBiYXNlID0gU1RfSU5URUdFUjsgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfTkVHQVRJVkVfSU5URUdFUjoKLSAgICAgICAgICAgICAgICBiYXNlID0gU1RfTk9OX1BPU0lUSVZFX0lOVEVHRVI7IGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX05PTl9ORUdBVElWRV9JTlRFR0VSOgotICAgICAgICAgICAgICAgIGJhc2UgPSBTVF9JTlRFR0VSOyBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19QT1NJVElWRV9JTlRFR0VSOgotICAgICAgICAgICAgICAgIGJhc2UgPSBTVF9OT05fTkVHQVRJVkVfSU5URUdFUjsgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfVU5TSUdORURfTE9ORzoKLSAgICAgICAgICAgICAgICBiYXNlID0gU1RfTk9OX05FR0FUSVZFX0lOVEVHRVI7IGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1VOU0lHTkVEX0lOVDoKLSAgICAgICAgICAgICAgICBiYXNlID0gU1RfVU5TSUdORURfTE9ORzsgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfVU5TSUdORURfU0hPUlQ6Ci0gICAgICAgICAgICAgICAgYmFzZSA9IFNUX1VOU0lHTkVEX0lOVDsgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfVU5TSUdORURfQllURToKLSAgICAgICAgICAgICAgICBiYXNlID0gU1RfVU5TSUdORURfU0hPUlQ7IGJyZWFrOwotCi0gICAgICAgICAgICAvLyBkZXJpdmVkIHN0cmluZ3MKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfTk9STUFMSVpFRF9TVFJJTkc6Ci0gICAgICAgICAgICAgICAgYmFzZSA9IFNUX1NUUklORzsgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfVE9LRU46Ci0gICAgICAgICAgICAgICAgYmFzZSA9IFNUX05PUk1BTElaRURfU1RSSU5HOyBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19OQU1FOgotICAgICAgICAgICAgICAgIGJhc2UgPSBTVF9UT0tFTjsgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfTkNOQU1FOgotICAgICAgICAgICAgICAgIGJhc2UgPSBTVF9OQU1FOyBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19JRDoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfSURSRUY6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0VOVElUWToKLSAgICAgICAgICAgICAgICBiYXNlID0gU1RfTkNOQU1FOyBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19MQU5HVUFHRToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfTk1UT0tFTjoKLSAgICAgICAgICAgICAgICBiYXNlID0gU1RfVE9LRU47IGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0lEUkVGUzoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfRU5USVRJRVM6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX05NVE9LRU5TOgotICAgICAgICAgICAgICAgIHZhcmlldHkgPSBTY2hlbWFUeXBlLkxJU1Q7Ci0gICAgICAgICAgICAgICAgYmFzZSA9IFNUX0FOWV9TSU1QTEU7Ci0gICAgICAgICAgICAgICAgaWYgKGJ0YyA9PSBTY2hlbWFUeXBlLkJUQ19JRFJFRlMpCi0gICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBTVF9JRFJFRjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChidGMgPT0gU2NoZW1hVHlwZS5CVENfRU5USVRJRVMpCi0gICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBTVF9FTlRJVFk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBpdGVtID0gU1RfTk1UT0tFTjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJlc3VsdC5zZXREZXJpdmF0aW9uVHlwZShkZXJpdmF0aW9uVHlwZSk7Ci0gICAgICAgIHJlc3VsdC5zZXRTaW1wbGVUeXBlVmFyaWV0eSh2YXJpZXR5KTsKLSAgICAgICAgaWYgKHZhcmlldHkgIT0gU2NoZW1hVHlwZS5OT1RfU0lNUExFKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQuc2V0U2ltcGxlVHlwZSh0cnVlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFzc2VydCAoYnRjID09IFNjaGVtYVR5cGUuQlRDX0FOWV9UWVBFIHx8IGJ0YyA9PSBTY2hlbWFUeXBlLkJUQ19OT1RfQlVJTFRJTik7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzdWx0LnNldEJhc2VUeXBlUmVmKGJhc2UgPT0gbnVsbCA/IG51bGwgOiBiYXNlLmdldFJlZigpKTsKLSAgICAgICAgcmVzdWx0LnNldEJhc2VEZXB0aChiYXNlID09IG51bGwgPyAwIDogKChTY2hlbWFUeXBlSW1wbCliYXNlKS5nZXRCYXNlRGVwdGgoKSArIDEpOwotICAgICAgICByZXN1bHQuc2V0TGlzdEl0ZW1UeXBlUmVmKGl0ZW0gPT0gbnVsbCA/IG51bGwgOiBpdGVtLmdldFJlZigpKTsKLSAgICAgICAgaWYgKGJ0YyA+PSBTY2hlbWFUeXBlLkJUQ19GSVJTVF9QUklNSVRJVkUgJiYgYnRjIDw9IFNjaGVtYVR5cGUuQlRDX0xBU1RfUFJJTUlUSVZFKQotICAgICAgICAgICAgcmVzdWx0LnNldFByaW1pdGl2ZVR5cGVSZWYocmVzdWx0LmdldFJlZigpKTsKLSAgICAgICAgZWxzZSBpZiAodmFyaWV0eSA9PSBTY2hlbWFUeXBlLkFUT01JQykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGJhc2UgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJCYXNlIHdhcyBudWxsIGZvciAiICsgYnRjKTsKLSAgICAgICAgICAgIGlmIChiYXNlLmdldFByaW1pdGl2ZVR5cGUoKSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkJhc2UuZ3B0IHdhcyBudWxsIGZvciAiICsgYnRjKTsKLSAgICAgICAgICAgIHJlc3VsdC5zZXRQcmltaXRpdmVUeXBlUmVmKGJhc2UuZ2V0UHJpbWl0aXZlVHlwZSgpLmdldFJlZigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIFhtbFZhbHVlUmVmW10gZmFjZXRzOwotICAgICAgICBib29sZWFuW10gZml4ZWRmOwotICAgICAgICBpbnQgd3NyID0gU2NoZW1hVHlwZS5XU19DT0xMQVBTRTsKLSAgICAgICAgaW50IGRlY2ltYWxTaXplID0gU2NoZW1hVHlwZS5OT1RfREVDSU1BTDsKLQotICAgICAgICAvLyBub3cgc2V0IHVwIGZhY2V0cwotICAgICAgICBzd2l0Y2ggKGJ0YykKLSAgICAgICAgewotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0FOWV9UWVBFOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19BTllfU0lNUExFOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19OT1RfQlVJTFRJTjoKLSAgICAgICAgICAgICAgICBmYWNldHMgPSBGQUNFVFNfTk9ORTsKLSAgICAgICAgICAgICAgICBmaXhlZGYgPSBGSVhFRF9GQUNFVFNfTk9ORTsKLSAgICAgICAgICAgICAgICB3c3IgPSBTY2hlbWFUeXBlLldTX1VOU1BFQ0lGSUVEOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1NUUklORzoKLSAgICAgICAgICAgICAgICBmYWNldHMgPSBGQUNFVFNfV1NfUFJFU0VSVkU7Ci0gICAgICAgICAgICAgICAgZml4ZWRmID0gRklYRURfRkFDRVRTX05PTkU7Ci0gICAgICAgICAgICAgICAgd3NyID0gU2NoZW1hVHlwZS5XU19QUkVTRVJWRTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19CT09MRUFOOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19CQVNFXzY0X0JJTkFSWToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfSEVYX0JJTkFSWToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfQU5ZX1VSSToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfUU5BTUU6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0ZMT0FUOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19ET1VCTEU6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX05PVEFUSU9OOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19EVVJBVElPTjoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfREFURV9USU1FOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19USU1FOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19EQVRFOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX1lFQVJfTU9OVEg6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfWUVBUjoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19NT05USF9EQVk6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfREFZOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX01PTlRIOgotICAgICAgICAgICAgICAgIGZhY2V0cyA9IEZBQ0VUU19XU19DT0xMQVBTRTsKLSAgICAgICAgICAgICAgICBmaXhlZGYgPSBGSVhFRF9GQUNFVFNfV1M7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfREVDSU1BTDoKLSAgICAgICAgICAgICAgICBmYWNldHMgPSBGQUNFVFNfV1NfQ09MTEFQU0U7Ci0gICAgICAgICAgICAgICAgZml4ZWRmID0gRklYRURfRkFDRVRTX1dTOwotICAgICAgICAgICAgICAgIGRlY2ltYWxTaXplID0gU2NoZW1hVHlwZS5TSVpFX0JJR19ERUNJTUFMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAvLyBkZXJpdmVkIG51bWVyaWNzCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0lOVEVHRVI6Ci0gICAgICAgICAgICAgICAgZmFjZXRzID0gRkFDRVRTX0lOVEVHRVI7Ci0gICAgICAgICAgICAgICAgZml4ZWRmID0gRklYRURfRkFDRVRTX0lOVEVHRVI7Ci0gICAgICAgICAgICAgICAgZGVjaW1hbFNpemUgPSBTY2hlbWFUeXBlLlNJWkVfQklHX0lOVEVHRVI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfTE9ORzoKLSAgICAgICAgICAgICAgICBmYWNldHMgPSBGQUNFVFNfTE9ORzsKLSAgICAgICAgICAgICAgICBmaXhlZGYgPSBGSVhFRF9GQUNFVFNfSU5URUdFUjsKLSAgICAgICAgICAgICAgICBkZWNpbWFsU2l6ZSA9IFNjaGVtYVR5cGUuU0laRV9MT05HOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0lOVDoKLSAgICAgICAgICAgICAgICBmYWNldHMgPSBGQUNFVFNfSU5UOwotICAgICAgICAgICAgICAgIGZpeGVkZiA9IEZJWEVEX0ZBQ0VUU19JTlRFR0VSOwotICAgICAgICAgICAgICAgIGRlY2ltYWxTaXplID0gU2NoZW1hVHlwZS5TSVpFX0lOVDsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19TSE9SVDoKLSAgICAgICAgICAgICAgICBmYWNldHMgPSBGQUNFVFNfU0hPUlQ7Ci0gICAgICAgICAgICAgICAgZml4ZWRmID0gRklYRURfRkFDRVRTX0lOVEVHRVI7Ci0gICAgICAgICAgICAgICAgZGVjaW1hbFNpemUgPSBTY2hlbWFUeXBlLlNJWkVfU0hPUlQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfQllURToKLSAgICAgICAgICAgICAgICBmYWNldHMgPSBGQUNFVFNfQllURTsKLSAgICAgICAgICAgICAgICBmaXhlZGYgPSBGSVhFRF9GQUNFVFNfSU5URUdFUjsKLSAgICAgICAgICAgICAgICBkZWNpbWFsU2l6ZSA9IFNjaGVtYVR5cGUuU0laRV9CWVRFOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX05PTl9QT1NJVElWRV9JTlRFR0VSOgotICAgICAgICAgICAgICAgIGZhY2V0cyA9IEZBQ0VUU19OT05QT1NJVElWRTsKLSAgICAgICAgICAgICAgICBmaXhlZGYgPSBGSVhFRF9GQUNFVFNfSU5URUdFUjsKLSAgICAgICAgICAgICAgICBkZWNpbWFsU2l6ZSA9IFNjaGVtYVR5cGUuU0laRV9CSUdfSU5URUdFUjsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19ORUdBVElWRV9JTlRFR0VSOgotICAgICAgICAgICAgICAgIGZhY2V0cyA9IEZBQ0VUU19ORUdBVElWRTsKLSAgICAgICAgICAgICAgICBmaXhlZGYgPSBGSVhFRF9GQUNFVFNfSU5URUdFUjsKLSAgICAgICAgICAgICAgICBkZWNpbWFsU2l6ZSA9IFNjaGVtYVR5cGUuU0laRV9CSUdfSU5URUdFUjsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19OT05fTkVHQVRJVkVfSU5URUdFUjoKLSAgICAgICAgICAgICAgICBmYWNldHMgPSBGQUNFVFNfTk9OTkVHQVRJVkU7Ci0gICAgICAgICAgICAgICAgZml4ZWRmID0gRklYRURfRkFDRVRTX0lOVEVHRVI7Ci0gICAgICAgICAgICAgICAgZGVjaW1hbFNpemUgPSBTY2hlbWFUeXBlLlNJWkVfQklHX0lOVEVHRVI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfUE9TSVRJVkVfSU5URUdFUjoKLSAgICAgICAgICAgICAgICBmYWNldHMgPSBGQUNFVFNfUE9TSVRJVkU7Ci0gICAgICAgICAgICAgICAgZml4ZWRmID0gRklYRURfRkFDRVRTX0lOVEVHRVI7Ci0gICAgICAgICAgICAgICAgZGVjaW1hbFNpemUgPSBTY2hlbWFUeXBlLlNJWkVfQklHX0lOVEVHRVI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfVU5TSUdORURfTE9ORzoKLSAgICAgICAgICAgICAgICBmYWNldHMgPSBGQUNFVFNfVU5TSUdORURfTE9ORzsKLSAgICAgICAgICAgICAgICBmaXhlZGYgPSBGSVhFRF9GQUNFVFNfSU5URUdFUjsKLSAgICAgICAgICAgICAgICBkZWNpbWFsU2l6ZSA9IFNjaGVtYVR5cGUuU0laRV9CSUdfSU5URUdFUjsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19VTlNJR05FRF9JTlQ6Ci0gICAgICAgICAgICAgICAgZmFjZXRzID0gRkFDRVRTX1VOU0lHTkVEX0lOVDsKLSAgICAgICAgICAgICAgICBmaXhlZGYgPSBGSVhFRF9GQUNFVFNfSU5URUdFUjsKLSAgICAgICAgICAgICAgICBkZWNpbWFsU2l6ZSA9IFNjaGVtYVR5cGUuU0laRV9MT05HOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgICAgICAgIGZhY2V0cyA9IEZBQ0VUU19VTlNJR05FRF9TSE9SVDsKLSAgICAgICAgICAgICAgICBmaXhlZGYgPSBGSVhFRF9GQUNFVFNfSU5URUdFUjsKLSAgICAgICAgICAgICAgICBkZWNpbWFsU2l6ZSA9IFNjaGVtYVR5cGUuU0laRV9JTlQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfVU5TSUdORURfQllURToKLSAgICAgICAgICAgICAgICBmYWNldHMgPSBGQUNFVFNfVU5TSUdORURfQllURTsKLSAgICAgICAgICAgICAgICBmaXhlZGYgPSBGSVhFRF9GQUNFVFNfSU5URUdFUjsKLSAgICAgICAgICAgICAgICBkZWNpbWFsU2l6ZSA9IFNjaGVtYVR5cGUuU0laRV9TSE9SVDsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotCi0gICAgICAgICAgICAvLyBkZXJpdmVkIHN0cmluZ3MKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfTk9STUFMSVpFRF9TVFJJTkc6Ci0gICAgICAgICAgICAgICAgZmFjZXRzID0gRkFDRVRTX1dTX1JFUExBQ0U7Ci0gICAgICAgICAgICAgICAgZml4ZWRmID0gRklYRURfRkFDRVRTX05PTkU7Ci0gICAgICAgICAgICAgICAgd3NyID0gU2NoZW1hVHlwZS5XU19SRVBMQUNFOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1RPS0VOOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19OQU1FOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19OQ05BTUU6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0xBTkdVQUdFOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19JRDoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfSURSRUY6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0lEUkVGUzoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfRU5USVRZOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19OTVRPS0VOOgotICAgICAgICAgICAgICAgIGZhY2V0cyA9IEZBQ0VUU19XU19DT0xMQVBTRTsKLSAgICAgICAgICAgICAgICBmaXhlZGYgPSBGSVhFRF9GQUNFVFNfTk9ORTsKLSAgICAgICAgICAgICAgICB3c3IgPSBTY2hlbWFUeXBlLldTX0NPTExBUFNFOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0VOVElUSUVTOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19OTVRPS0VOUzoKLSAgICAgICAgICAgICAgICBmYWNldHMgPSBGQUNFVFNfQlVJTFRJTl9MSVNUOwotICAgICAgICAgICAgICAgIGZpeGVkZiA9IEZJWEVEX0ZBQ0VUU19OT05FOwotICAgICAgICAgICAgICAgIHdzciA9IFNjaGVtYVR5cGUuV1NfVU5TUEVDSUZJRUQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBmdW5kYW1lbnRhbCBmYWNldHMKLSAgICAgICAgaW50IG9yZGVyZWQgPSBTY2hlbWFUeXBlLlVOT1JERVJFRDsKLSAgICAgICAgYm9vbGVhbiBpc051bWVyaWMgPSBmYWxzZTsKLSAgICAgICAgYm9vbGVhbiBpc0Zpbml0ZSA9IGZhbHNlOwotICAgICAgICBib29sZWFuIGlzQm91bmRlZCA9IGZhbHNlOwotCi0gICAgICAgIHN3aXRjaCAoYnRjKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSk7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfQU5ZX1RZUEU6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX05PVF9CVUlMVElOOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19BTllfU0lNUExFOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19TVFJJTkc6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0JBU0VfNjRfQklOQVJZOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19IRVhfQklOQVJZOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19BTllfVVJJOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19RTkFNRToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfTk9UQVRJT046Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX05PUk1BTElaRURfU1RSSU5HOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19UT0tFTjoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfTkFNRToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfTkNOQU1FOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19MQU5HVUFHRToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfSUQ6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0lEUkVGOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19JRFJFRlM6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0VOVElUWToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfTk1UT0tFTjoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfRU5USVRJRVM6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX05NVE9LRU5TOgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0JPT0xFQU46Ci0gICAgICAgICAgICAgICAgaXNGaW5pdGUgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfRkxPQVQ6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RPVUJMRToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfREVDSU1BTDoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfSU5URUdFUjoKLSAgICAgICAgICAgICAgICBpc051bWVyaWMgPSB0cnVlOwotICAgICAgICAgICAgICAgIG9yZGVyZWQgPSBTY2hlbWFUeXBlLlRPVEFMX09SREVSOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RVUkFUSU9OOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19EQVRFX1RJTUU6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1RJTUU6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RBVEU6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfWUVBUl9NT05USDoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19ZRUFSOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX01PTlRIX0RBWToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19EQVk6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfTU9OVEg6Ci0gICAgICAgICAgICAgICAgb3JkZXJlZCA9IFNjaGVtYVR5cGUuUEFSVElBTF9PUkRFUjsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19MT05HOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19JTlQ6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1NIT1JUOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19CWVRFOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19OT05fUE9TSVRJVkVfSU5URUdFUjoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfTkVHQVRJVkVfSU5URUdFUjoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfTk9OX05FR0FUSVZFX0lOVEVHRVI6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1BPU0lUSVZFX0lOVEVHRVI6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1VOU0lHTkVEX0xPTkc6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1VOU0lHTkVEX0lOVDoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfVU5TSUdORURfU0hPUlQ6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgaXNOdW1lcmljID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBvcmRlcmVkID0gU2NoZW1hVHlwZS5UT1RBTF9PUkRFUjsKLSAgICAgICAgICAgICAgICBpc0Zpbml0ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaXNCb3VuZGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJlc3VsdC5zZXRCYXNpY0ZhY2V0cyhmYWNldHMsIGZpeGVkZik7Ci0gICAgICAgIHJlc3VsdC5zZXRXaGl0ZVNwYWNlUnVsZSh3c3IpOwotICAgICAgICByZXN1bHQuc2V0T3JkZXJlZChvcmRlcmVkKTsKLSAgICAgICAgcmVzdWx0LnNldEJvdW5kZWQoaXNCb3VuZGVkKTsKLSAgICAgICAgcmVzdWx0LnNldE51bWVyaWMoaXNOdW1lcmljKTsKLSAgICAgICAgcmVzdWx0LnNldEZpbml0ZShpc0Zpbml0ZSk7Ci0gICAgICAgIHJlc3VsdC5zZXREZWNpbWFsU2l6ZShkZWNpbWFsU2l6ZSk7Ci0gICAgICAgIHJlc3VsdC5zZXRBbm9ueW1vdXNUeXBlUmVmcyhFTVBUWV9TQ0hFTUFUWVBFUkVGX0FSUkFZKTsKLQotICAgICAgICAvLyBUT0RPOiBzZXQgdXAgcGF0dGVybnMgZm9yIE5DTkFNRSwgbGFuZ3VhZ2UsIGV0Yy4KLQotICAgICAgICBTdHJpbmcgcGF0dGVybiA9IG51bGw7Ci0gICAgICAgIGJvb2xlYW4gaGFzUGF0dGVybiA9IGZhbHNlOwotCi0gICAgICAgIHN3aXRjaCAoYnRjKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0xBTkdVQUdFOgotICAgICAgICAgICAgICAgIHBhdHRlcm4gPSAiW2EtekEtWl17MSw4fSgtW2EtekEtWjAtOV17MSw4fSkqIjsgLy8gd2UgdXNlZCB0byBoYXZlIChbYS16QS1aXXsyfXxbaUldLVthLXpBLVpdK3xbeFhdLVthLXpBLVpdezEsOH0pKC1bYS16QS1aXXsxLDh9KSoiLCBidXQgczRzIHVzZXMgdGhlIG1vcmUgbGVuaWVudCBwYXR0ZXJuIHRvIHRoZSBsZWZ0LiAKLSAgICAgICAgICAgICAgICBoYXNQYXR0ZXJuID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfTk1UT0tFTjoKLSAgICAgICAgICAgICAgICBwYXR0ZXJuID0gIlxcYysiOyAKLSAgICAgICAgICAgICAgICBoYXNQYXR0ZXJuID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfTkFNRToKLSAgICAgICAgICAgICAgICBwYXR0ZXJuID0gIlxcaVxcYyoiOwotICAgICAgICAgICAgICAgIGhhc1BhdHRlcm4gPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19OQ05BTUU6Ci0gICAgICAgICAgICAgICAgcGF0dGVybiA9ICJbXFxpLVs6XV1bXFxjLVs6XV0qIjsKLSAgICAgICAgICAgICAgICBoYXNQYXR0ZXJuID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgLy8gVGhlc2UgdHlwZXMgaW5oZXJpdCB0aGVpciBwYXR0ZXJucwotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19JRDoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfSURSRUY6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0VOVElUWToKLSAgICAgICAgICAgICAgICBoYXNQYXR0ZXJuID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwYXR0ZXJuICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5yZWdleC5SZWd1bGFyRXhwcmVzc2lvbiBwID0gbnVsbDsKLSAgICAgICAgICAgIHRyeSB7IHAgPSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwucmVnZXguU2NoZW1hUmVndWxhckV4cHJlc3Npb24uZm9yUGF0dGVybihwYXR0ZXJuKTsgfQotICAgICAgICAgICAgY2F0Y2ggKG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5yZWdleC5QYXJzZUV4Y2VwdGlvbiBlKSB7IGFzc2VydCBmYWxzZTsgfQotICAgICAgICAgICAgcmVzdWx0LnNldFBhdHRlcm5zKG5ldyBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwucmVnZXguUmVndWxhckV4cHJlc3Npb25bXSB7cH0pOwotICAgICAgICB9Ci0gICAgICAgIHJlc3VsdC5zZXRQYXR0ZXJuRmFjZXQoaGFzUGF0dGVybik7Ci0KLQotCi0gICAgICAgIC8vIEFOWV9UWVBFIGhhcyB0byBiZSBhYmxlIHRvIGFjdCBsaWtlIGEgY29tcGxleCB0eXBlCi0gICAgICAgIGlmIChidGMgPT0gU2NoZW1hVHlwZS5CVENfQU5ZX1RZUEUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYVBhcnRpY2xlSW1wbCBjb250ZW50TW9kZWwgPSBuZXcgU2NoZW1hUGFydGljbGVJbXBsKCk7Ci0gICAgICAgICAgICBjb250ZW50TW9kZWwuc2V0UGFydGljbGVUeXBlKFNjaGVtYVBhcnRpY2xlLldJTERDQVJEKTsKLSAgICAgICAgICAgIGNvbnRlbnRNb2RlbC5zZXRXaWxkY2FyZFNldChRTmFtZVNldC5BTEwpOwotICAgICAgICAgICAgY29udGVudE1vZGVsLnNldFdpbGRjYXJkUHJvY2VzcyhTY2hlbWFQYXJ0aWNsZS5MQVgpOwotICAgICAgICAgICAgY29udGVudE1vZGVsLnNldE1pbk9jY3VycyhCaWdJbnRlZ2VyLlpFUk8pOwotICAgICAgICAgICAgY29udGVudE1vZGVsLnNldE1heE9jY3VycyhudWxsKTsKLSAgICAgICAgICAgIGNvbnRlbnRNb2RlbC5zZXRUcmFuc2l0aW9uUnVsZXMoUU5hbWVTZXQuQUxMLCB0cnVlKTsKLSAgICAgICAgICAgIGNvbnRlbnRNb2RlbC5zZXRUcmFuc2l0aW9uTm90ZXMoUU5hbWVTZXQuQUxMLCB0cnVlKTsKLQotICAgICAgICAgICAgU2NoZW1hQXR0cmlidXRlTW9kZWxJbXBsIGF0dHJNb2RlbCA9IG5ldyBTY2hlbWFBdHRyaWJ1dGVNb2RlbEltcGwoKTsKLSAgICAgICAgICAgIGF0dHJNb2RlbC5zZXRXaWxkY2FyZFByb2Nlc3MoU2NoZW1hQXR0cmlidXRlTW9kZWwuTEFYKTsKLSAgICAgICAgICAgIGF0dHJNb2RlbC5zZXRXaWxkY2FyZFNldChRTmFtZVNldC5BTEwpOwotCi0gICAgICAgICAgICByZXN1bHQuc2V0Q29tcGxleFR5cGVWYXJpZXR5KFNjaGVtYVR5cGUuTUlYRURfQ09OVEVOVCk7Ci0gICAgICAgICAgICByZXN1bHQuc2V0Q29udGVudE1vZGVsKGNvbnRlbnRNb2RlbCwgYXR0ck1vZGVsLCBDb2xsZWN0aW9ucy5FTVBUWV9NQVAsIENvbGxlY3Rpb25zLkVNUFRZX01BUCwgZmFsc2UpOwotICAgICAgICAgICAgcmVzdWx0LnNldEFub255bW91c1R5cGVSZWZzKEVNUFRZX1NDSEVNQVRZUEVSRUZfQVJSQVkpOwotICAgICAgICAgICAgcmVzdWx0LnNldFdpbGRjYXJkU3VtbWFyeShRTmFtZVNldC5BTEwsIHRydWUsIFFOYW1lU2V0LkFMTCwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoYnRjID09IFNjaGVtYVR5cGUuQlRDX05PVF9CVUlMVElOKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBzbyBkb2VzIHRoZSBub190eXBlIDogaXQgcGVybWl0cyBubyBjb250ZW50cyAoYW5kIGV2ZW4gZW1wdHkgY29udGVudHMgaXMgaW52YWxpZCwgYnV0IHRoYXQncyBzcGVjaWFsLWNhc2VkKQotICAgICAgICAgICAgU2NoZW1hUGFydGljbGVJbXBsIGNvbnRlbnRNb2RlbCA9IG51bGw7IC8vIGVtcHR5Ci0gICAgICAgICAgICBTY2hlbWFBdHRyaWJ1dGVNb2RlbEltcGwgYXR0ck1vZGVsID0gbmV3IFNjaGVtYUF0dHJpYnV0ZU1vZGVsSW1wbCgpOyAvLyBlbXB0eQotICAgICAgICAgICAgcmVzdWx0LnNldENvbXBsZXhUeXBlVmFyaWV0eShTY2hlbWFUeXBlLkVNUFRZX0NPTlRFTlQpOwotICAgICAgICAgICAgcmVzdWx0LnNldENvbnRlbnRNb2RlbChjb250ZW50TW9kZWwsIGF0dHJNb2RlbCwgQ29sbGVjdGlvbnMuRU1QVFlfTUFQLCBDb2xsZWN0aW9ucy5FTVBUWV9NQVAsIGZhbHNlKTsKLSAgICAgICAgICAgIHJlc3VsdC5zZXRBbm9ueW1vdXNUeXBlUmVmcyhFTVBUWV9TQ0hFTUFUWVBFUkVGX0FSUkFZKTsKLSAgICAgICAgICAgIHJlc3VsdC5zZXRXaWxkY2FyZFN1bW1hcnkoUU5hbWVTZXQuRU1QVFksIGZhbHNlLCBRTmFtZVNldC5FTVBUWSwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0LnNldE9yZGVyU2Vuc2l0aXZlKGZhbHNlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFNjaGVtYVR5cGUgZ2V0Tm9UeXBlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBTVF9OT19UWVBFOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL0NsYXNzTG9hZGVyUmVzb3VyY2VMb2FkZXIuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL0NsYXNzTG9hZGVyUmVzb3VyY2VMb2FkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzYxNTMyZC4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9DbGFzc0xvYWRlclJlc291cmNlTG9hZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zY2hlbWE7Ci0KLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi1wdWJsaWMgY2xhc3MgQ2xhc3NMb2FkZXJSZXNvdXJjZUxvYWRlciBpbXBsZW1lbnRzIFJlc291cmNlTG9hZGVyCi17Ci0gICAgQ2xhc3NMb2FkZXIgX2NsYXNzTG9hZGVyOwotCi0gICAgQ2xhc3NMb2FkZXJSZXNvdXJjZUxvYWRlcihDbGFzc0xvYWRlciBjbGFzc0xvYWRlcikKLSAgICB7Ci0gICAgICAgIF9jbGFzc0xvYWRlciA9IGNsYXNzTG9hZGVyOwotICAgIH0KLQotICAgIHB1YmxpYyBJbnB1dFN0cmVhbSBnZXRSZXNvdXJjZUFzU3RyZWFtKFN0cmluZyByZXNvdXJjZU5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gX2NsYXNzTG9hZGVyLmdldFJlc291cmNlQXNTdHJlYW0ocmVzb3VyY2VOYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHt9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9GaWxlUmVzb3VyY2VMb2FkZXIuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL0ZpbGVSZXNvdXJjZUxvYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTNjZjU1Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL0ZpbGVSZXNvdXJjZUxvYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnNjaGVtYTsKLQotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBGaWxlOwotaW1wb3J0IGphdmEudXRpbC56aXAuWmlwRW50cnk7Ci0KLXB1YmxpYyBjbGFzcyBGaWxlUmVzb3VyY2VMb2FkZXIgaW1wbGVtZW50cyBSZXNvdXJjZUxvYWRlcgotewotICAgIHByaXZhdGUgRmlsZSBfZGlyZWN0b3J5OwotICAgIHByaXZhdGUgWmlwRmlsZSBfemlwZmlsZTsKLQotICAgIHB1YmxpYyBGaWxlUmVzb3VyY2VMb2FkZXIoRmlsZSBmaWxlKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGlmIChmaWxlLmlzRGlyZWN0b3J5KCkpCi0gICAgICAgICAgICBfZGlyZWN0b3J5ID0gZmlsZTsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBfemlwZmlsZSA9IG5ldyBaaXBGaWxlKGZpbGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIElucHV0U3RyZWFtIGdldFJlc291cmNlQXNTdHJlYW0oU3RyaW5nIHJlc291cmNlTmFtZSkKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX3ppcGZpbGUgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBaaXBFbnRyeSBlbnRyeSA9IF96aXBmaWxlLmdldEVudHJ5KHJlc291cmNlTmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGVudHJ5ID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgIHJldHVybiBfemlwZmlsZS5nZXRJbnB1dFN0cmVhbShlbnRyeSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGaWxlSW5wdXRTdHJlYW0obmV3IEZpbGUoX2RpcmVjdG9yeSwgcmVzb3VyY2VOYW1lKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgY2xvc2UoKQotICAgIHsKLSAgICAgICAgaWYgKF96aXBmaWxlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF96aXBmaWxlLmNsb3NlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBvaCB3ZWxsLgotICAgICAgICAgICAgfQotICAgICAgICAgICAgX3ppcGZpbGUgPSBudWxsOwotICAgICAgICB9Ci0gICAgfQotfQotCmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9QYXRoUmVzb3VyY2VMb2FkZXIuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1BhdGhSZXNvdXJjZUxvYWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODU2N2U4Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1BhdGhSZXNvdXJjZUxvYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnNjaGVtYTsKLQotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotcHVibGljIGNsYXNzIFBhdGhSZXNvdXJjZUxvYWRlciBpbXBsZW1lbnRzIFJlc291cmNlTG9hZGVyCi17Ci0gICAgcHJpdmF0ZSBSZXNvdXJjZUxvYWRlcltdIF9wYXRoOwotCi0gICAgcHVibGljIFBhdGhSZXNvdXJjZUxvYWRlcihSZXNvdXJjZUxvYWRlcltdIGxvYWRlcnBhdGgpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgX3BhdGggPSBuZXcgUmVzb3VyY2VMb2FkZXJbbG9hZGVycGF0aC5sZW5ndGhdOwotICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGxvYWRlcnBhdGgsIDAsIF9wYXRoLCAwLCBfcGF0aC5sZW5ndGgpOwotICAgIH0KLQotICAgIHB1YmxpYyBQYXRoUmVzb3VyY2VMb2FkZXIoRmlsZVtdIGZpbGVwYXRoKQotICAgIHsKLSAgICAgICAgTGlzdCBwYXRobGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlcGF0aC5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkZXIgcGF0aCA9IG5ldyBGaWxlUmVzb3VyY2VMb2FkZXIoZmlsZXBhdGhbaV0pOwotICAgICAgICAgICAgICAgIHBhdGhsaXN0LmFkZChwYXRoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBjYW4ndCByZWFkIGEgZmlsZSBvbiBjbGFzc3BhdGg/IHNraXAgaXQuCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgX3BhdGggPSAoUmVzb3VyY2VMb2FkZXJbXSlwYXRobGlzdC50b0FycmF5KG5ldyBSZXNvdXJjZUxvYWRlcltwYXRobGlzdC5zaXplKCldKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSW5wdXRTdHJlYW0gZ2V0UmVzb3VyY2VBc1N0cmVhbShTdHJpbmcgcmVzb3VyY2VOYW1lKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfcGF0aC5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgSW5wdXRTdHJlYW0gcmVzdWx0ID0gX3BhdGhbaV0uZ2V0UmVzb3VyY2VBc1N0cmVhbShyZXNvdXJjZU5hbWUpOwotICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgY2xvc2UoKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfcGF0aC5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX3BhdGhbaV0uY2xvc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBvaCB3ZWxsLgotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvUmVzb3VyY2VMb2FkZXIuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1Jlc291cmNlTG9hZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwODM1ZTYuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvUmVzb3VyY2VMb2FkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnNjaGVtYTsKLQotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLXB1YmxpYyBpbnRlcmZhY2UgUmVzb3VyY2VMb2FkZXIKLXsKLSAgICBJbnB1dFN0cmVhbSBnZXRSZXNvdXJjZUFzU3RyZWFtKFN0cmluZyByZXNvdXJjZU5hbWUpOwotICAgIHZvaWQgY2xvc2UoKTsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1NjaGVtYUF0dHJpYnV0ZUdyb3VwSW1wbC5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU2NoZW1hQXR0cmlidXRlR3JvdXBJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2OWZhMzcuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU2NoZW1hQXR0cmlidXRlR3JvdXBJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUF0dHJpYnV0ZUdyb3VwOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVN5c3RlbTsKLQotcHVibGljIGNsYXNzIFNjaGVtYUF0dHJpYnV0ZUdyb3VwSW1wbCBpbXBsZW1lbnRzIFNjaGVtYUF0dHJpYnV0ZUdyb3VwCi17Ci0gICAgcHJpdmF0ZSBTY2hlbWFUeXBlU3lzdGVtIF90eXBlU3lzdGVtOwotICAgIHByaXZhdGUgUU5hbWUgX25hbWU7Ci0gICAgcHJpdmF0ZSBYbWxPYmplY3QgX3BhcnNlT2JqZWN0OwotICAgIHByaXZhdGUgU3RyaW5nIF9wYXJzZVROUzsKLSAgICBwcml2YXRlIGJvb2xlYW4gX2NoYW1lbGVvbjsKLSAgICBwcml2YXRlIGJvb2xlYW4gX3JlZGVmaW5pdGlvbjsKLQotICAgIHB1YmxpYyBTY2hlbWFBdHRyaWJ1dGVHcm91cEltcGwoU2NoZW1hVHlwZVN5c3RlbSB0eXBlU3lzdGVtKQotICAgIHsKLSAgICAgICAgX3R5cGVTeXN0ZW0gPSB0eXBlU3lzdGVtOwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFBdHRyaWJ1dGVHcm91cEltcGwoU2NoZW1hVHlwZVN5c3RlbSB0eXBlU3lzdGVtLCBRTmFtZSBuYW1lKQotICAgIHsKLSAgICAgICAgdGhpcyh0eXBlU3lzdGVtKTsKLSAgICAgICAgX25hbWUgPSBuYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGluaXQoUU5hbWUgbmFtZSwgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSwgYm9vbGVhbiBjaGFtZWxlb24sIGJvb2xlYW4gcmVkZWZpbml0aW9uLCBYbWxPYmplY3QgeCkKLSAgICB7Ci0gICAgICAgIGFzc2VydCBfbmFtZSA9PSBudWxsIHx8IG5hbWUuZXF1YWxzKCBfbmFtZSApOwotCi0gICAgICAgIF9uYW1lID0gbmFtZTsKLSAgICAgICAgX3BhcnNlVE5TID0gdGFyZ2V0TmFtZXNwYWNlOwotICAgICAgICBfY2hhbWVsZW9uID0gY2hhbWVsZW9uOwotICAgICAgICBfcmVkZWZpbml0aW9uID0gcmVkZWZpbml0aW9uOwotICAgICAgICBfcGFyc2VPYmplY3QgPSB4OwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFUeXBlU3lzdGVtIGdldFR5cGVTeXN0ZW0oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF90eXBlU3lzdGVtOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0Q29tcG9uZW50VHlwZSgpCi0gICAgICAgIHsgcmV0dXJuIFNjaGVtYUNvbXBvbmVudC5BVFRSSUJVVEVfR1JPVVA7IH0KLQotICAgIHB1YmxpYyBRTmFtZSBnZXROYW1lKCkKLSAgICAgICAgeyByZXR1cm4gX25hbWU7IH0KLQotICAgIHB1YmxpYyBYbWxPYmplY3QgZ2V0UGFyc2VPYmplY3QoKQotICAgICAgICB7IHJldHVybiBfcGFyc2VPYmplY3Q7IH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFyZ2V0TmFtZXNwYWNlKCkKLSAgICAgICAgeyByZXR1cm4gX3BhcnNlVE5TOyB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldENoYW1lbGVvbk5hbWVzcGFjZSgpCi0gICAgICAgIHsgcmV0dXJuIF9jaGFtZWxlb24gPyBfcGFyc2VUTlMgOiBudWxsOyB9Ci0KLSAgICBwcml2YXRlIFNjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZiBfc2VsZnJlZiA9IG5ldyBTY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWYodGhpcyk7Ci0gICAgCi0gICAgcHVibGljIFNjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZiBnZXRSZWYoKQotICAgICAgICB7IHJldHVybiBfc2VsZnJlZjsgfQotCi0gICAgcHVibGljIFNjaGVtYUNvbXBvbmVudC5SZWYgZ2V0Q29tcG9uZW50UmVmKCkKLSAgICAgICAgeyByZXR1cm4gZ2V0UmVmKCk7IH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzUmVkZWZpbml0aW9uKCkKLSAgICAgICAgeyByZXR1cm4gX3JlZGVmaW5pdGlvbjsgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU2NoZW1hQXR0cmlidXRlTW9kZWxJbXBsLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TY2hlbWFBdHRyaWJ1dGVNb2RlbEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjJkOTkyYS4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TY2hlbWFBdHRyaWJ1dGVNb2RlbEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zY2hlbWE7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUF0dHJpYnV0ZU1vZGVsOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hR2xvYmFsQXR0cmlidXRlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldEJ1aWxkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFMb2NhbEF0dHJpYnV0ZTsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKLQotcHVibGljIGNsYXNzIFNjaGVtYUF0dHJpYnV0ZU1vZGVsSW1wbCBpbXBsZW1lbnRzIFNjaGVtYUF0dHJpYnV0ZU1vZGVsCi17Ci0gICAgcHJpdmF0ZSBNYXAgYXR0ck1hcDsKLSAgICBwcml2YXRlIFFOYW1lU2V0IHdjU2V0OwotICAgIHByaXZhdGUgaW50IHdjUHJvY2VzczsKLQotICAgIHB1YmxpYyBTY2hlbWFBdHRyaWJ1dGVNb2RlbEltcGwoKQotICAgIHsKLSAgICAgICAgYXR0ck1hcCA9IG5ldyBMaW5rZWRIYXNoTWFwKCk7Ci0gICAgICAgIHdjU2V0ID0gbnVsbDsKLSAgICAgICAgd2NQcm9jZXNzID0gTk9ORTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hQXR0cmlidXRlTW9kZWxJbXBsKFNjaGVtYUF0dHJpYnV0ZU1vZGVsIHNhbSkKLSAgICB7Ci0gICAgICAgIGF0dHJNYXAgPSBuZXcgTGlua2VkSGFzaE1hcCgpOwotICAgICAgICBpZiAoc2FtID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHdjU2V0ID0gbnVsbDsKLSAgICAgICAgICAgIHdjUHJvY2VzcyA9IE5PTkU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBTY2hlbWFMb2NhbEF0dHJpYnV0ZVtdIGF0dHJzID0gc2FtLmdldEF0dHJpYnV0ZXMoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXR0ck1hcC5wdXQoYXR0cnNbaV0uZ2V0TmFtZSgpLCBhdHRyc1tpXSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChzYW0uZ2V0V2lsZGNhcmRQcm9jZXNzKCkgIT0gU2NoZW1hQXR0cmlidXRlTW9kZWwuTk9ORSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB3Y1NldCA9IHNhbS5nZXRXaWxkY2FyZFNldCgpOwotICAgICAgICAgICAgICAgIHdjUHJvY2VzcyA9IHNhbS5nZXRXaWxkY2FyZFByb2Nlc3MoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTY2hlbWFMb2NhbEF0dHJpYnV0ZVtdIEVNUFRZX1NMQV9BUlJBWSA9IG5ldyBTY2hlbWFMb2NhbEF0dHJpYnV0ZVswXTsKLQotICAgIHB1YmxpYyBTY2hlbWFMb2NhbEF0dHJpYnV0ZVtdIGdldEF0dHJpYnV0ZXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChTY2hlbWFMb2NhbEF0dHJpYnV0ZVtdKWF0dHJNYXAudmFsdWVzKCkudG9BcnJheShFTVBUWV9TTEFfQVJSQVkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFMb2NhbEF0dHJpYnV0ZSBnZXRBdHRyaWJ1dGUoUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoU2NoZW1hTG9jYWxBdHRyaWJ1dGUpYXR0ck1hcC5nZXQobmFtZSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYWRkQXR0cmlidXRlKFNjaGVtYUxvY2FsQXR0cmlidXRlIGF0dHJ1c2UpCi0gICAgewotICAgICAgICBhdHRyTWFwLnB1dChhdHRydXNlLmdldE5hbWUoKSwgYXR0cnVzZSk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZVByb2hpYml0ZWRBdHRyaWJ1dGUoUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIGF0dHJNYXAucmVtb3ZlKG5hbWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBRTmFtZVNldCBnZXRXaWxkY2FyZFNldCgpCi0gICAgewotICAgICAgICByZXR1cm4gd2NTZXQgPT0gbnVsbCA/IFFOYW1lU2V0LkVNUFRZIDogd2NTZXQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0V2lsZGNhcmRTZXQoUU5hbWVTZXQgc2V0KQotICAgIHsKLSAgICAgICAgd2NTZXQgPSBzZXQ7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRXaWxkY2FyZFByb2Nlc3MoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHdjUHJvY2VzczsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRXaWxkY2FyZFByb2Nlc3MoaW50IHByb2MpCi0gICAgewotICAgICAgICB3Y1Byb2Nlc3MgPSBwcm9jOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1NjaGVtYUdsb2JhbEF0dHJpYnV0ZUltcGwuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1NjaGVtYUdsb2JhbEF0dHJpYnV0ZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ4YmMyMy4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TY2hlbWFHbG9iYWxBdHRyaWJ1dGVJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFHbG9iYWxBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlU3lzdGVtOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotCi1wdWJsaWMgY2xhc3MgU2NoZW1hR2xvYmFsQXR0cmlidXRlSW1wbCBleHRlbmRzIFNjaGVtYUxvY2FsQXR0cmlidXRlSW1wbAotICAgICAgICBpbXBsZW1lbnRzIFNjaGVtYUdsb2JhbEF0dHJpYnV0ZQotewotICAgIFNjaGVtYVR5cGVTeXN0ZW0gX3R5cGVTeXN0ZW07Ci0gICAgU3RyaW5nIF9maWxlbmFtZTsKLSAgICBwcml2YXRlIFN0cmluZyBfcGFyc2VUTlM7Ci0gICAgcHJpdmF0ZSBib29sZWFuIF9jaGFtZWxlb247Ci0KLSAgICBwdWJsaWMgU2NoZW1hR2xvYmFsQXR0cmlidXRlSW1wbChTY2hlbWFUeXBlU3lzdGVtIHR5cGVTeXN0ZW0pCi0gICAgewotICAgICAgICBfdHlwZVN5c3RlbSA9IHR5cGVTeXN0ZW07Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGVTeXN0ZW0gZ2V0VHlwZVN5c3RlbSgpCi0gICAgewotICAgICAgICByZXR1cm4gX3R5cGVTeXN0ZW07Ci0gICAgfQotCi0KLSAgICBwdWJsaWMgaW50IGdldENvbXBvbmVudFR5cGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFNjaGVtYUNvbXBvbmVudC5BVFRSSUJVVEU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTb3VyY2VOYW1lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfZmlsZW5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RmlsZW5hbWUoU3RyaW5nIGZpbGVuYW1lKQotICAgIHsKLSAgICAgICAgX2ZpbGVuYW1lID0gZmlsZW5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UGFyc2VDb250ZXh0KFhtbE9iamVjdCBwYXJzZU9iamVjdCwgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSwgYm9vbGVhbiBjaGFtZWxlb24pCi0gICAgewotICAgICAgICBfcGFyc2VPYmplY3QgPSBwYXJzZU9iamVjdDsKLSAgICAgICAgX3BhcnNlVE5TID0gdGFyZ2V0TmFtZXNwYWNlOwotICAgICAgICBfY2hhbWVsZW9uID0gY2hhbWVsZW9uOwotICAgIH0KLQotICAgIHB1YmxpYyBYbWxPYmplY3QgZ2V0UGFyc2VPYmplY3QoKQotICAgICAgICB7IHJldHVybiBfcGFyc2VPYmplY3Q7IH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFyZ2V0TmFtZXNwYWNlKCkKLSAgICAgICAgeyByZXR1cm4gX3BhcnNlVE5TOyB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldENoYW1lbGVvbk5hbWVzcGFjZSgpCi0gICAgICAgIHsgcmV0dXJuIF9jaGFtZWxlb24gPyBfcGFyc2VUTlMgOiBudWxsOyB9Ci0KLSAgICBwcml2YXRlIFNjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWYgX3NlbGZyZWYgPSBuZXcgU2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZih0aGlzKTsKLQotICAgIHB1YmxpYyBTY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmIGdldFJlZigpCi0gICAgICAgIHsgcmV0dXJuIF9zZWxmcmVmOyB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hQ29tcG9uZW50LlJlZiBnZXRDb21wb25lbnRSZWYoKQotICAgICAgICB7IHJldHVybiBnZXRSZWYoKTsgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU2NoZW1hR2xvYmFsRWxlbWVudEltcGwuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1NjaGVtYUdsb2JhbEVsZW1lbnRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYjI2ZjMuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU2NoZW1hR2xvYmFsRWxlbWVudEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zY2hlbWE7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUdsb2JhbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlU3lzdGVtOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1wdWJsaWMgY2xhc3MgU2NoZW1hR2xvYmFsRWxlbWVudEltcGwgZXh0ZW5kcyBTY2hlbWFMb2NhbEVsZW1lbnRJbXBsCi0gICAgICAgIGltcGxlbWVudHMgU2NoZW1hR2xvYmFsRWxlbWVudAotewotICAgIHByaXZhdGUgU2V0IF9zZ01lbWJlcnMgPSBuZXcgTGlua2VkSGFzaFNldCgpOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFFOYW1lW10gX25hbWVhcnJheSA9IG5ldyBRTmFtZVswXTsKLSAgICBwcml2YXRlIGJvb2xlYW4gX2ZpbmFsRXh0OwotICAgIHByaXZhdGUgYm9vbGVhbiBfZmluYWxSZXN0OwotICAgIHByaXZhdGUgU2NoZW1hVHlwZVN5c3RlbSBfdHlwZVN5c3RlbTsKLSAgICBwcml2YXRlIFN0cmluZyBfZmlsZW5hbWU7Ci0gICAgLy8gcHJpdmF0ZSBYbWxPYmplY3QgX3BhcnNlT2JqZWN0OyBub3cgaW5oZXJpdGVkIGZyb20gYmFzZQotICAgIHByaXZhdGUgU3RyaW5nIF9wYXJzZVROUzsKLSAgICBwcml2YXRlIGJvb2xlYW4gX2NoYW1lbGVvbjsKLSAgICBwcml2YXRlIFNjaGVtYUdsb2JhbEVsZW1lbnQuUmVmIF9zZzsKLQotICAgIHB1YmxpYyBTY2hlbWFHbG9iYWxFbGVtZW50SW1wbChTY2hlbWFUeXBlU3lzdGVtIHR5cGVTeXN0ZW0pCi0gICAgewotICAgICAgICBfdHlwZVN5c3RlbSA9IHR5cGVTeXN0ZW07Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGVTeXN0ZW0gZ2V0VHlwZVN5c3RlbSgpCi0gICAgewotICAgICAgICByZXR1cm4gX3R5cGVTeXN0ZW07Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTb3VyY2VOYW1lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfZmlsZW5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RmlsZW5hbWUoU3RyaW5nIGZpbGVuYW1lKQotICAgIHsKLSAgICAgICAgX2ZpbGVuYW1lID0gZmlsZW5hbWU7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRGaW5hbChib29sZWFuIGZpbmFsRXh0LCBib29sZWFuIGZpbmFsUmVzdCkKLSAgICB7Ci0gICAgICAgIG11dGF0ZSgpOyBfZmluYWxFeHQgPSBmaW5hbEV4dDsgX2ZpbmFsUmVzdCA9IGZpbmFsUmVzdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldENvbXBvbmVudFR5cGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFNjaGVtYUNvbXBvbmVudC5FTEVNRU5UOwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFHbG9iYWxFbGVtZW50IHN1YnN0aXR1dGlvbkdyb3VwKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfc2cgPT0gbnVsbCA/IG51bGwgOiBfc2cuZ2V0KCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0U3Vic3RpdHV0aW9uR3JvdXAoU2NoZW1hR2xvYmFsRWxlbWVudC5SZWYgc2cpIAotICAgIHsKLSAgICAgICAgX3NnID0gc2c7Ci0gICAgfQotCi0gICAgcHVibGljIFFOYW1lW10gc3Vic3RpdHV0aW9uR3JvdXBNZW1iZXJzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoUU5hbWVbXSlfc2dNZW1iZXJzLnRvQXJyYXkoX25hbWVhcnJheSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYWRkU3Vic3RpdHV0aW9uR3JvdXBNZW1iZXIoUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIG11dGF0ZSgpOyBfc2dNZW1iZXJzLmFkZChuYW1lKTsKLSAgICB9Ci0KLQotICAgIHB1YmxpYyBib29sZWFuIGZpbmFsRXh0ZW5zaW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfZmluYWxFeHQ7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gZmluYWxSZXN0cmljdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gX2ZpbmFsUmVzdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRQYXJzZUNvbnRleHQoWG1sT2JqZWN0IHBhcnNlT2JqZWN0LCBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlLCBib29sZWFuIGNoYW1lbGVvbikKLSAgICB7Ci0gICAgICAgIF9wYXJzZU9iamVjdCA9IHBhcnNlT2JqZWN0OwotICAgICAgICBfcGFyc2VUTlMgPSB0YXJnZXROYW1lc3BhY2U7Ci0gICAgICAgIF9jaGFtZWxlb24gPSBjaGFtZWxlb247Ci0gICAgfQotCi0gICAgcHVibGljIFhtbE9iamVjdCBnZXRQYXJzZU9iamVjdCgpCi0gICAgICAgIHsgcmV0dXJuIF9wYXJzZU9iamVjdDsgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRUYXJnZXROYW1lc3BhY2UoKQotICAgICAgICB7IHJldHVybiBfcGFyc2VUTlM7IH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2hhbWVsZW9uTmFtZXNwYWNlKCkKLSAgICAgICAgeyByZXR1cm4gX2NoYW1lbGVvbiA/IF9wYXJzZVROUyA6IG51bGw7IH0KLQotICAgIHByaXZhdGUgU2NoZW1hR2xvYmFsRWxlbWVudC5SZWYgX3NlbGZyZWYgPSBuZXcgU2NoZW1hR2xvYmFsRWxlbWVudC5SZWYodGhpcyk7Ci0KLSAgICBwdWJsaWMgU2NoZW1hR2xvYmFsRWxlbWVudC5SZWYgZ2V0UmVmKCkKLSAgICAgICAgeyByZXR1cm4gX3NlbGZyZWY7IH0KLQotICAgIHB1YmxpYyBTY2hlbWFDb21wb25lbnQuUmVmIGdldENvbXBvbmVudFJlZigpCi0gICAgICAgIHsgcmV0dXJuIGdldFJlZigpOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnRJbXBsLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YjZiODMuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIzICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnNjaGVtYTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVN5c3RlbTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlhQYXRoOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci0KLXB1YmxpYyBjbGFzcyBTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnRJbXBsIGltcGxlbWVudHMgU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Ci17Ci0gICAgcHJpdmF0ZSBTY2hlbWFUeXBlU3lzdGVtIF90eXBlU3lzdGVtOwotICAgIHByaXZhdGUgU3RyaW5nIF9zZWxlY3RvcjsKLSAgICBwcml2YXRlIFN0cmluZ1tdIF9maWVsZHM7Ci0gICAgcHJpdmF0ZSBTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmIF9rZXk7Ci0gICAgcHJpdmF0ZSBRTmFtZSBfbmFtZTsKLSAgICBwcml2YXRlIGludCBfdHlwZTsKLSAgICBwcml2YXRlIFhtbE9iamVjdCBfcGFyc2U7Ci0gICAgcHJpdmF0ZSBNYXAgX25zTWFwID0gQ29sbGVjdGlvbnMuRU1QVFlfTUFQOwotICAgIHByaXZhdGUgU3RyaW5nIF9wYXJzZVROUzsKLSAgICBwcml2YXRlIGJvb2xlYW4gX2NoYW1lbGVvbjsKLQotICAgIC8vIExhemlseSBjb21wdXRlZCBwYXRocwotICAgIHByaXZhdGUgdm9sYXRpbGUgWFBhdGggX3NlbGVjdG9yUGF0aDsKLSAgICBwcml2YXRlIHZvbGF0aWxlIFhQYXRoW10gX2ZpZWxkUGF0aHM7Ci0KLSAgICBwdWJsaWMgU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50SW1wbChTY2hlbWFUeXBlU3lzdGVtIHN5cykgewotICAgICAgICBfdHlwZVN5c3RlbSA9IHN5czsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFNlbGVjdG9yKCkgewotICAgICAgICByZXR1cm4gX3NlbGVjdG9yOwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3QgZ2V0U2VsZWN0b3JQYXRoKCkgewotICAgICAgICBYUGF0aCBwID0gX3NlbGVjdG9yUGF0aDsKLSAgICAgICAgaWYgKHAgPT0gbnVsbCkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBidWlsZFBhdGhzKCk7Ci0gICAgICAgICAgICAgICAgcCA9IF9zZWxlY3RvclBhdGg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoWFBhdGguWFBhdGhDb21waWxlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQgZmFsc2U6ICJGYWlsZWQgdG8gY29tcGlsZSB4cGF0aC4gU2hvdWxkIGJlIGNhdWdodCBieSBjb21waWxlciAiICsgZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXROU01hcChNYXAgbnNNYXApIHsKLSAgICAgICAgX25zTWFwID0gbnNNYXA7Ci0gICAgfQotCi0gICAgcHVibGljIE1hcCBnZXROU01hcCgpIHsKLSAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZU1hcChfbnNNYXApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFNlbGVjdG9yKFN0cmluZyBzZWxlY3RvcikgewotICAgICAgICBhc3NlcnQgc2VsZWN0b3IgIT0gbnVsbDsKLSAgICAgICAgX3NlbGVjdG9yID0gc2VsZWN0b3I7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RmllbGRzKFN0cmluZ1tdIGZpZWxkcykgewotICAgICAgICBhc3NlcnQgZmllbGRzICE9IG51bGwgJiYgZmllbGRzLmxlbmd0aCA+IDA7Ci0gICAgICAgIF9maWVsZHMgPSBmaWVsZHM7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZ1tdIGdldEZpZWxkcygpIHsKLSAgICAgICAgU3RyaW5nW10gZmllbGRzID0gbmV3IFN0cmluZ1tfZmllbGRzLmxlbmd0aF07Ci0gICAgICAgIFN5c3RlbS5hcnJheWNvcHkoX2ZpZWxkcywgMCwgZmllbGRzLCAwLCBmaWVsZHMubGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIGZpZWxkczsKLSAgICB9Ci0KLSAgICBwdWJsaWMgT2JqZWN0IGdldEZpZWxkUGF0aChpbnQgaW5kZXgpIHsKLSAgICAgICAgWFBhdGhbXSBwID0gX2ZpZWxkUGF0aHM7Ci0gICAgICAgIGlmIChwID09IG51bGwpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgYnVpbGRQYXRocygpOwotICAgICAgICAgICAgICAgIHAgPSBfZmllbGRQYXRoczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChYUGF0aC5YUGF0aENvbXBpbGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIGFzc2VydCBmYWxzZTogIkZhaWxlZCB0byBjb21waWxlIHhwYXRoLiBTaG91bGQgYmUgY2F1Z2h0IGJ5IGNvbXBpbGVyICIgKyBlOwotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwW2luZGV4XTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBidWlsZFBhdGhzKCkgdGhyb3dzIFhQYXRoLlhQYXRoQ29tcGlsZUV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE86IE5lZWQgdGhlIG5hbWVzcGFjZSBtYXAgLSByZXF1aXJlcyBzdG9yZSBzdXBwb3J0Ci0gICAgICAgIF9zZWxlY3RvclBhdGggPSBYUGF0aC5jb21waWxlWFBhdGgoX3NlbGVjdG9yLCBfbnNNYXApOwotCi0gICAgICAgIF9maWVsZFBhdGhzID0gbmV3IFhQYXRoW19maWVsZHMubGVuZ3RoXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgX2ZpZWxkUGF0aHMubGVuZ3RoIDsgaSsrKQotICAgICAgICAgICAgX2ZpZWxkUGF0aHNbaV0gPSBYUGF0aC5jb21waWxlWFBhdGgoX2ZpZWxkc1tpXSwgX25zTWFwKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRSZWZlcmVuY2VkS2V5KFNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWYga2V5KSB7Ci0gICAgICAgIF9rZXkgPSBrZXk7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYUlkZW50aXR5Q29uc3RyYWludCBnZXRSZWZlcmVuY2VkS2V5KCkgewotICAgICAgICByZXR1cm4gX2tleS5nZXQoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDb25zdHJhaW50Q2F0ZWdvcnkoaW50IHR5cGUpIHsKLSAgICAgICAgYXNzZXJ0IHR5cGUgPj0gQ0NfS0VZICYmIHR5cGUgPD0gQ0NfVU5JUVVFOwotICAgICAgICBfdHlwZSA9IHR5cGU7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRDb25zdHJhaW50Q2F0ZWdvcnkoKSB7Ci0gICAgICAgIHJldHVybiBfdHlwZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFFOYW1lIG5hbWUpIHsKLSAgICAgICAgYXNzZXJ0IG5hbWUgIT0gbnVsbDsKLSAgICAgICAgX25hbWUgPSBuYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyBRTmFtZSBnZXROYW1lKCkgewotICAgICAgICByZXR1cm4gX25hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRDb21wb25lbnRUeXBlKCkgewotICAgICAgICByZXR1cm4gSURFTlRJVFlfQ09OU1RSQUlOVDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hVHlwZVN5c3RlbSBnZXRUeXBlU3lzdGVtKCkgewotICAgICAgICByZXR1cm4gX3R5cGVTeXN0ZW07Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UGFyc2VDb250ZXh0KFhtbE9iamVjdCBvLCBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlLCBib29sZWFuIGNoYW1lbGVvbikgewotICAgICAgICBfcGFyc2UgPSBvOwotICAgICAgICBfcGFyc2VUTlMgPSB0YXJnZXROYW1lc3BhY2U7Ci0gICAgICAgIF9jaGFtZWxlb24gPSBjaGFtZWxlb247Ci0gICAgfQotCi0gICAgcHVibGljIFhtbE9iamVjdCBnZXRQYXJzZU9iamVjdCgpIHsKLSAgICAgICAgcmV0dXJuIF9wYXJzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFRhcmdldE5hbWVzcGFjZSgpIHsKLSAgICAgICAgcmV0dXJuIF9wYXJzZVROUzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldENoYW1lbGVvbk5hbWVzcGFjZSgpIHsKLSAgICAgICAgcmV0dXJuIF9jaGFtZWxlb24gPyBfcGFyc2VUTlMgOiBudWxsOwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogT25seSBhcHBsaWNhYmxlIHRvIGtleXJlZnMuIE90aGVyIHR5cGVzIGFyZSBpbXBsaWNpdGx5IHJlc29sdmVkLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzUmVzb2x2ZWQoKSB7Ci0gICAgICAgIHJldHVybiBnZXRDb25zdHJhaW50Q2F0ZWdvcnkoKSAhPSBDQ19LRVlSRUYgfHwgX2tleSAhPSBudWxsOwotICAgIH0KLQotICAgIHByaXZhdGUgU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZiBfc2VsZnJlZiA9IG5ldyBTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmKHRoaXMpOwotCi0gICAgcHVibGljIFNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWYgZ2V0UmVmKCkKLSAgICAgICAgeyByZXR1cm4gX3NlbGZyZWY7IH0KLQotICAgIHB1YmxpYyBTY2hlbWFDb21wb25lbnQuUmVmIGdldENvbXBvbmVudFJlZigpCi0gICAgICAgIHsgcmV0dXJuIGdldFJlZigpOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TY2hlbWFMb2NhbEF0dHJpYnV0ZUltcGwuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1NjaGVtYUxvY2FsQXR0cmlidXRlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTkxZTU1Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1NjaGVtYUxvY2FsQXR0cmlidXRlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc1ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnNjaGVtYTsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hTG9jYWxBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sUU5hbWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5zb2FwLlNPQVBBcnJheVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5zb2FwLlNjaGVtYVdTRExBcnJheVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5OYW1lc3BhY2VDb250ZXh0OwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLXB1YmxpYyBjbGFzcyBTY2hlbWFMb2NhbEF0dHJpYnV0ZUltcGwgaW1wbGVtZW50cyBTY2hlbWFMb2NhbEF0dHJpYnV0ZSwgU2NoZW1hV1NETEFycmF5VHlwZQotewotICAgIHB1YmxpYyBTY2hlbWFMb2NhbEF0dHJpYnV0ZUltcGwoKQotICAgIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBpbml0KFFOYW1lIG5hbWUsIFNjaGVtYVR5cGUuUmVmIHR5cGVyZWYsIGludCB1c2UsIFN0cmluZyBkZWZ0ZXh0LCBYbWxPYmplY3QgcGFyc2VPYmplY3QsIFhtbFZhbHVlUmVmIGRlZnZhbHVlLCBib29sZWFuIGlzRml4ZWQsIFNPQVBBcnJheVR5cGUgd3NkbEFycmF5KQotICAgIHsKLSAgICAgICAgaWYgKF94bWxOYW1lICE9IG51bGwgfHwgX3R5cGVyZWYgIT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkFscmVhZHkgaW5pdGlhbGl6ZWQiKTsKLSAgICAgICAgX3VzZSA9IHVzZTsKLSAgICAgICAgX3R5cGVyZWYgPSB0eXBlcmVmOwotICAgICAgICBfZGVmYXVsdFRleHQgPSBkZWZ0ZXh0OwotICAgICAgICBfcGFyc2VPYmplY3QgPSBwYXJzZU9iamVjdDsKLSAgICAgICAgX2RlZmF1bHRWYWx1ZSA9IGRlZnZhbHVlOwotICAgICAgICBfaXNEZWZhdWx0ID0gKGRlZnRleHQgIT0gbnVsbCk7Ci0gICAgICAgIF9pc0ZpeGVkID0gaXNGaXhlZDsKLSAgICAgICAgX3htbE5hbWUgPSBuYW1lOwotICAgICAgICBfd3NkbEFycmF5VHlwZSA9IHdzZGxBcnJheTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFN0cmluZyBfZGVmYXVsdFRleHQ7Ci0gICAgLyogcGFja2FnZSAqLyBYbWxWYWx1ZVJlZiBfZGVmYXVsdFZhbHVlOwotICAgIHByaXZhdGUgYm9vbGVhbiBfaXNGaXhlZDsKLSAgICBwcml2YXRlIGJvb2xlYW4gX2lzRGVmYXVsdDsKLSAgICBwcml2YXRlIFFOYW1lIF94bWxOYW1lOwotICAgIHByaXZhdGUgU2NoZW1hVHlwZS5SZWYgX3R5cGVyZWY7Ci0gICAgcHJpdmF0ZSBTT0FQQXJyYXlUeXBlIF93c2RsQXJyYXlUeXBlOwotICAgIHByaXZhdGUgaW50IF91c2U7Ci0gICAgcHJvdGVjdGVkIFhtbE9iamVjdCBfcGFyc2VPYmplY3Q7IC8vIGZvciBRTmFtZSByZXNvbHV0aW9uCi0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1R5cGVSZXNvbHZlZCgpCi0gICAgewotICAgICAgICByZXR1cm4gKF90eXBlcmVmICE9IG51bGwpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJlc29sdmVUeXBlUmVmKFNjaGVtYVR5cGUuUmVmIHR5cGVyZWYpCi0gICAgewotICAgICAgICBpZiAoX3R5cGVyZWYgIT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLSAgICAgICAgX3R5cGVyZWYgPSB0eXBlcmVmOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0VXNlKCkKLSAgICAgICAgeyByZXR1cm4gX3VzZTsgfQotCi0gICAgcHVibGljIFFOYW1lIGdldE5hbWUoKQotICAgICAgICB7IHJldHVybiBfeG1sTmFtZTsgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0VGV4dCgpCi0gICAgICAgIHsgcmV0dXJuIF9kZWZhdWx0VGV4dDsgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNEZWZhdWx0KCkKLSAgICAgICAgeyByZXR1cm4gX2lzRGVmYXVsdDsgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNGaXhlZCgpCi0gICAgICAgIHsgcmV0dXJuIF9pc0ZpeGVkOyB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0F0dHJpYnV0ZSgpCi0gICAgICAgIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHB1YmxpYyBTY2hlbWFUeXBlIGdldFR5cGUoKQotICAgICAgICB7IHJldHVybiBfdHlwZXJlZi5nZXQoKTsgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGUuUmVmIGdldFR5cGVSZWYoKQotICAgICAgICB7IHJldHVybiBfdHlwZXJlZjsgfQotCi0gICAgcHVibGljIEJpZ0ludGVnZXIgZ2V0TWluT2NjdXJzKCkKLSAgICAgICAgeyByZXR1cm4gX3VzZSA9PSBSRVFVSVJFRCA/IEJpZ0ludGVnZXIuT05FIDogQmlnSW50ZWdlci5aRVJPOyB9Ci0KLSAgICBwdWJsaWMgQmlnSW50ZWdlciBnZXRNYXhPY2N1cnMoKQotICAgICAgICB7IHJldHVybiBfdXNlID09IFBST0hJQklURUQgPyBCaWdJbnRlZ2VyLlpFUk8gOiBCaWdJbnRlZ2VyLk9ORTsgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNOaWxsYWJsZSgpCi0gICAgICAgIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICBwdWJsaWMgU09BUEFycmF5VHlwZSBnZXRXU0RMQXJyYXlUeXBlKCkKLSAgICAgICAgeyByZXR1cm4gX3dzZGxBcnJheVR5cGU7IH0KLSAgICAKLSAgICBwdWJsaWMgWG1sQW55U2ltcGxlVHlwZSBnZXREZWZhdWx0VmFsdWUoKQotICAgIHsKLSAgICAgICAgaWYgKF9kZWZhdWx0VmFsdWUgIT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBfZGVmYXVsdFZhbHVlLmdldCgpOwotICAgICAgICBpZiAoX2RlZmF1bHRUZXh0ICE9IG51bGwgJiYgWG1sQW55U2ltcGxlVHlwZS50eXBlLmlzQXNzaWduYWJsZUZyb20oZ2V0VHlwZSgpKSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKF9wYXJzZU9iamVjdCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgTmFtZXNwYWNlQ29udGV4dC5wdXNoKG5ldyBOYW1lc3BhY2VDb250ZXh0KF9wYXJzZU9iamVjdCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0VHlwZSgpLm5ld1ZhbHVlKF9kZWZhdWx0VGV4dCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZpbmFsbHkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIE5hbWVzcGFjZUNvbnRleHQucG9wKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGdldFR5cGUoKS5uZXdWYWx1ZShfZGVmYXVsdFRleHQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldERlZmF1bHRWYWx1ZShYbWxWYWx1ZVJlZiBkZWZhdWx0UmVmKQotICAgICAgICB7IF9kZWZhdWx0VmFsdWUgPSBkZWZhdWx0UmVmOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TY2hlbWFMb2NhbEVsZW1lbnRJbXBsLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TY2hlbWFMb2NhbEVsZW1lbnRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMjIzYWQuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU2NoZW1hTG9jYWxFbGVtZW50SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnNjaGVtYTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hTG9jYWxFbGVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hUGFydGljbGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5zb2FwLlNPQVBBcnJheVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5zb2FwLlNjaGVtYVdTRExBcnJheVR5cGU7Ci0KLXB1YmxpYyBjbGFzcyBTY2hlbWFMb2NhbEVsZW1lbnRJbXBsIGV4dGVuZHMgU2NoZW1hUGFydGljbGVJbXBsCi0gICAgICAgIGltcGxlbWVudHMgU2NoZW1hTG9jYWxFbGVtZW50LCBTY2hlbWFXU0RMQXJyYXlUeXBlCi17Ci0gICAgcHJpdmF0ZSBib29sZWFuIF9ibG9ja0V4dDsKLSAgICBwcml2YXRlIGJvb2xlYW4gX2Jsb2NrUmVzdDsKLSAgICBwcml2YXRlIGJvb2xlYW4gX2Jsb2NrU3Vic3Q7Ci0gICAgcHJvdGVjdGVkIGJvb2xlYW4gX2FiczsKLSAgICBwcml2YXRlIFNPQVBBcnJheVR5cGUgX3dzZGxBcnJheVR5cGU7Ci0gICAgcHJpdmF0ZSBTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmW10gX2NvbnN0cmFpbnRzID0gbmV3IFNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWZbMF07Ci0KLQotICAgIHB1YmxpYyBTY2hlbWFMb2NhbEVsZW1lbnRJbXBsKCkKLSAgICB7Ci0gICAgICAgIHNldFBhcnRpY2xlVHlwZShTY2hlbWFQYXJ0aWNsZS5FTEVNRU5UKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBibG9ja0V4dGVuc2lvbigpCi0gICAgewotICAgICAgICByZXR1cm4gX2Jsb2NrRXh0OwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGJsb2NrUmVzdHJpY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9ibG9ja1Jlc3Q7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gYmxvY2tTdWJzdGl0dXRpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9ibG9ja1N1YnN0OwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzQWJzdHJhY3QoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9hYnM7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0QWJzdHJhY3QoYm9vbGVhbiBhYnMpCi0gICAgewotICAgICAgICBfYWJzID0gYWJzOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEJsb2NrKGJvb2xlYW4gZXh0ZW5zaW9uLCBib29sZWFuIHJlc3RyaWN0aW9uLCBib29sZWFuIHN1YnN0aXR1dGlvbikKLSAgICB7Ci0gICAgICAgIG11dGF0ZSgpOwotICAgICAgICBfYmxvY2tFeHQgPSBleHRlbnNpb247Ci0gICAgICAgIF9ibG9ja1Jlc3QgPSByZXN0cmljdGlvbjsKLSAgICAgICAgX2Jsb2NrU3Vic3QgPSBzdWJzdGl0dXRpb247Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0V3NkbEFycmF5VHlwZShTT0FQQXJyYXlUeXBlIGFycmF5VHlwZSkKLSAgICB7Ci0gICAgICAgIF93c2RsQXJyYXlUeXBlID0gYXJyYXlUeXBlOwotICAgIH0KLQotICAgIHB1YmxpYyBTT0FQQXJyYXlUeXBlIGdldFdTRExBcnJheVR5cGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF93c2RsQXJyYXlUeXBlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldElkZW50aXR5Q29uc3RyYWludHMoU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZltdIGNvbnN0cmFpbnRzKSB7Ci0gICAgICAgIG11dGF0ZSgpOwotICAgICAgICBfY29uc3RyYWludHMgPSBjb25zdHJhaW50czsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50W10gZ2V0SWRlbnRpdHlDb25zdHJhaW50cygpIHsKLSAgICAgICAgU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50W10gcmVzdWx0ID0gbmV3IFNjaGVtYUlkZW50aXR5Q29uc3RyYWludFtfY29uc3RyYWludHMubGVuZ3RoXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgcmVzdWx0Lmxlbmd0aCA7IGkrKykKLSAgICAgICAgICAgIHJlc3VsdFtpXSA9IF9jb25zdHJhaW50c1tpXS5nZXQoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZltdIGdldElkZW50aXR5Q29uc3RyYWludFJlZnMoKSB7Ci0gICAgICAgIFNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWZbXSByZXN1bHQgPSBuZXcgU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZltfY29uc3RyYWludHMubGVuZ3RoXTsKLSAgICAgICAgU3lzdGVtLmFycmF5Y29weShfY29uc3RyYWludHMsIDAsIHJlc3VsdCwgMCwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TY2hlbWFNb2RlbEdyb3VwSW1wbC5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU2NoZW1hTW9kZWxHcm91cEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJhNTUyMS4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TY2hlbWFNb2RlbEdyb3VwSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnNjaGVtYTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hTW9kZWxHcm91cDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVTeXN0ZW07Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotcHVibGljIGNsYXNzIFNjaGVtYU1vZGVsR3JvdXBJbXBsIGltcGxlbWVudHMgU2NoZW1hTW9kZWxHcm91cAotewotICAgIHByaXZhdGUgU2NoZW1hVHlwZVN5c3RlbSBfdHlwZVN5c3RlbTsKLSAgICBwcml2YXRlIFFOYW1lIF9uYW1lOwotICAgIHByaXZhdGUgWG1sT2JqZWN0IF9wYXJzZU9iamVjdDsKLSAgICBwcml2YXRlIFN0cmluZyBfcGFyc2VUTlM7Ci0gICAgcHJpdmF0ZSBib29sZWFuIF9jaGFtZWxlb247Ci0gICAgcHJpdmF0ZSBib29sZWFuIF9yZWRlZmluaXRpb247Ci0KLSAgICBwdWJsaWMgU2NoZW1hTW9kZWxHcm91cEltcGwoU2NoZW1hVHlwZVN5c3RlbSB0eXBlU3lzdGVtKQotICAgIHsKLSAgICAgICAgX3R5cGVTeXN0ZW0gPSB0eXBlU3lzdGVtOwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFNb2RlbEdyb3VwSW1wbChTY2hlbWFUeXBlU3lzdGVtIHR5cGVTeXN0ZW0sIFFOYW1lIG5hbWUpCi0gICAgewotICAgICAgICB0aGlzKHR5cGVTeXN0ZW0pOwotICAgICAgICBfbmFtZSA9IG5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW5pdChRTmFtZSBuYW1lLCBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlLCBib29sZWFuIGNoYW1lbGVvbiwgYm9vbGVhbiByZWRlZmluaXRpb24sIFhtbE9iamVjdCB4KQotICAgIHsKLSAgICAgICAgYXNzZXJ0IF9uYW1lID09IG51bGwgfHwgbmFtZS5lcXVhbHMoIF9uYW1lICk7Ci0gICAgICAgIAotICAgICAgICBfbmFtZSA9IG5hbWU7Ci0gICAgICAgIF9wYXJzZVROUyA9IHRhcmdldE5hbWVzcGFjZTsKLSAgICAgICAgX2NoYW1lbGVvbiA9IGNoYW1lbGVvbjsKLSAgICAgICAgX3JlZGVmaW5pdGlvbiA9IHJlZGVmaW5pdGlvbjsKLSAgICAgICAgX3BhcnNlT2JqZWN0ID0geDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hVHlwZVN5c3RlbSBnZXRUeXBlU3lzdGVtKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfdHlwZVN5c3RlbTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldENvbXBvbmVudFR5cGUoKQotICAgICAgICB7IHJldHVybiBTY2hlbWFDb21wb25lbnQuTU9ERUxfR1JPVVA7IH0KLQotICAgIHB1YmxpYyBRTmFtZSBnZXROYW1lKCkKLSAgICAgICAgeyByZXR1cm4gX25hbWU7IH0KLQotICAgIHB1YmxpYyBYbWxPYmplY3QgZ2V0UGFyc2VPYmplY3QoKQotICAgICAgICB7IHJldHVybiBfcGFyc2VPYmplY3Q7IH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFyZ2V0TmFtZXNwYWNlKCkKLSAgICAgICAgeyByZXR1cm4gX3BhcnNlVE5TOyB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldENoYW1lbGVvbk5hbWVzcGFjZSgpCi0gICAgICAgIHsgcmV0dXJuIF9jaGFtZWxlb24gPyBfcGFyc2VUTlMgOiBudWxsOyB9Ci0gICAgCi0gICAgcHVibGljIGJvb2xlYW4gaXNSZWRlZmluaXRpb24oKQotICAgICAgICB7IHJldHVybiBfcmVkZWZpbml0aW9uOyB9Ci0KLSAgICBwcml2YXRlIFNjaGVtYU1vZGVsR3JvdXAuUmVmIF9zZWxmcmVmID0gbmV3IFNjaGVtYU1vZGVsR3JvdXAuUmVmKHRoaXMpOwotICAgIAotICAgIHB1YmxpYyBTY2hlbWFNb2RlbEdyb3VwLlJlZiBnZXRSZWYoKQotICAgICAgICB7IHJldHVybiBfc2VsZnJlZjsgfQotCi0gICAgcHVibGljIFNjaGVtYUNvbXBvbmVudC5SZWYgZ2V0Q29tcG9uZW50UmVmKCkKLSAgICAgICAgeyByZXR1cm4gZ2V0UmVmKCk7IH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1NjaGVtYVBhcnRpY2xlSW1wbC5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU2NoZW1hUGFydGljbGVJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2ZWEyZDMuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU2NoZW1hUGFydGljbGVJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODEgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQYXJ0aWNsZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlFOYW1lU2V0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxRTmFtZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLk5hbWVzcGFjZUNvbnRleHQ7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLXB1YmxpYyBjbGFzcyBTY2hlbWFQYXJ0aWNsZUltcGwgaW1wbGVtZW50cyBTY2hlbWFQYXJ0aWNsZQotewotICAgIHByaXZhdGUgaW50IF9wYXJ0aWNsZVR5cGU7Ci0gICAgcHJpdmF0ZSBCaWdJbnRlZ2VyIF9taW5PY2N1cnM7Ci0gICAgcHJpdmF0ZSBCaWdJbnRlZ2VyIF9tYXhPY2N1cnM7Ci0gICAgcHJpdmF0ZSBTY2hlbWFQYXJ0aWNsZVtdIF9wYXJ0aWNsZUNoaWxkcmVuOwotICAgIHByaXZhdGUgYm9vbGVhbiBfaXNJbW11dGFibGU7Ci0gICAgcHJpdmF0ZSBRTmFtZVNldCBfc3RhcnRTZXQ7Ci0gICAgcHJpdmF0ZSBRTmFtZVNldCBfZXhjbHVkZU5leHRTZXQ7Ci0gICAgcHJpdmF0ZSBib29sZWFuIF9pc1NraXBwYWJsZTsKLSAgICBwcml2YXRlIGJvb2xlYW4gX2lzRGV0ZXJtaW5pc3RpYzsKLSAgICBwcml2YXRlIGludCBfaW50TWluT2NjdXJzOwotICAgIHByaXZhdGUgaW50IF9pbnRNYXhPY2N1cnM7Ci0gICAgcHJpdmF0ZSBRTmFtZVNldCBfd2lsZGNhcmRTZXQ7Ci0gICAgcHJpdmF0ZSBpbnQgX3dpbGRjYXJkUHJvY2VzczsKLSAgICBwcml2YXRlIFN0cmluZyBfZGVmYXVsdFRleHQ7Ci0gICAgcHJpdmF0ZSBib29sZWFuIF9pc0RlZmF1bHQ7Ci0gICAgcHJpdmF0ZSBib29sZWFuIF9pc0ZpeGVkOwotICAgIHByaXZhdGUgUU5hbWUgX3FOYW1lOwotICAgIHByaXZhdGUgYm9vbGVhbiBfaXNOaWxsYWJsZTsKLSAgICBwcml2YXRlIFNjaGVtYVR5cGUuUmVmIF90eXBlcmVmOwotICAgIHByb3RlY3RlZCBYbWxPYmplY3QgX3BhcnNlT2JqZWN0OwotICAgIHByaXZhdGUgWG1sVmFsdWVSZWYgX2RlZmF1bHRWYWx1ZTsKLQotICAgIHByb3RlY3RlZCB2b2lkIG11dGF0ZSgpCi0gICAgICAgIHsgaWYgKF9pc0ltbXV0YWJsZSkgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOyB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRJbW11dGFibGUoKQotICAgICAgICB7IG11dGF0ZSgpOyBfaXNJbW11dGFibGUgPSB0cnVlOyB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNUcmFuc2l0aW9uUnVsZXMoKQotICAgICAgICB7IHJldHVybiAoX3N0YXJ0U2V0ICE9IG51bGwpOyB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNUcmFuc2l0aW9uTm90ZXMoKQotICAgICAgICB7IHJldHVybiAoX2V4Y2x1ZGVOZXh0U2V0ICE9IG51bGwpOyB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRUcmFuc2l0aW9uUnVsZXMoUU5hbWVTZXQgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNTa2lwcGFibGUpCi0gICAgewotICAgICAgICBfc3RhcnRTZXQgPSBzdGFydDsKLSAgICAgICAgX2lzU2tpcHBhYmxlID0gaXNTa2lwcGFibGU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VHJhbnNpdGlvbk5vdGVzKFFOYW1lU2V0IGV4Y2x1ZGVOZXh0LCBib29sZWFuIGlzRGV0ZXJtaW5pc3RpYykKLSAgICB7Ci0gICAgICAgIF9leGNsdWRlTmV4dFNldCA9IGV4Y2x1ZGVOZXh0OwotICAgICAgICBfaXNEZXRlcm1pbmlzdGljID0gaXNEZXRlcm1pbmlzdGljOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGNhblN0YXJ0V2l0aEVsZW1lbnQoUU5hbWUgbmFtZSkKLSAgICAgICAgeyByZXR1cm4gbmFtZSAhPSBudWxsICYmIF9zdGFydFNldC5jb250YWlucyhuYW1lKTsgfQotCi0gICAgcHVibGljIFFOYW1lU2V0IGFjY2VwdGVkU3RhcnROYW1lcygpCi0gICAgICAgIHsgcmV0dXJuIF9zdGFydFNldDsgfQotCi0gICAgcHVibGljIFFOYW1lU2V0IGdldEV4Y2x1ZGVOZXh0U2V0KCkKLSAgICAgICAgeyByZXR1cm4gX2V4Y2x1ZGVOZXh0U2V0OyB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1NraXBwYWJsZSgpCi0gICAgICAgIHsgcmV0dXJuIF9pc1NraXBwYWJsZTsgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNEZXRlcm1pbmlzdGljKCkKLSAgICAgICAgeyByZXR1cm4gX2lzRGV0ZXJtaW5pc3RpYzsgfQotCi0gICAgcHVibGljIGludCBnZXRQYXJ0aWNsZVR5cGUoKQotICAgICAgICB7IHJldHVybiBfcGFydGljbGVUeXBlOyB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRQYXJ0aWNsZVR5cGUoaW50IHBUeXBlKQotICAgICAgICB7IG11dGF0ZSgpOyBfcGFydGljbGVUeXBlID0gcFR5cGU7IH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzU2luZ2xldG9uKCkKLSAgICAgICAgeyByZXR1cm4gX21heE9jY3VycyAhPSBudWxsICYmCi0gICAgICAgICAgICAgICAgIF9tYXhPY2N1cnMuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKSA9PSAwICYmCi0gICAgICAgICAgICAgICAgIF9taW5PY2N1cnMuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKSA9PSAwOyB9Ci0KLSAgICBwdWJsaWMgQmlnSW50ZWdlciBnZXRNaW5PY2N1cnMoKQotICAgICAgICB7IHJldHVybiBfbWluT2NjdXJzOyB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRNaW5PY2N1cnMoQmlnSW50ZWdlciBtaW4pCi0gICAgICAgIHsgbXV0YXRlKCk7IF9taW5PY2N1cnMgPSBtaW47IF9pbnRNaW5PY2N1cnMgPSBwZWdCaWdJbnRlZ2VyKG1pbik7IH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0SW50TWluT2NjdXJzKCkKLSAgICAgICAgeyByZXR1cm4gX2ludE1pbk9jY3VyczsgfQotCi0gICAgcHVibGljIEJpZ0ludGVnZXIgZ2V0TWF4T2NjdXJzKCkKLSAgICAgICAgeyByZXR1cm4gX21heE9jY3VyczsgfQotCi0gICAgcHVibGljIGludCBnZXRJbnRNYXhPY2N1cnMoKQotICAgICAgICB7IHJldHVybiBfaW50TWF4T2NjdXJzOyB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRNYXhPY2N1cnMoQmlnSW50ZWdlciBtYXgpCi0gICAgICAgIHsgbXV0YXRlKCk7IF9tYXhPY2N1cnMgPSBtYXg7IF9pbnRNYXhPY2N1cnMgPSBwZWdCaWdJbnRlZ2VyKG1heCk7IH0KLQotICAgIHB1YmxpYyBTY2hlbWFQYXJ0aWNsZVtdIGdldFBhcnRpY2xlQ2hpbGRyZW4oKQotICAgIHsKLSAgICAgICAgU2NoZW1hUGFydGljbGVbXSByZXN1bHQgPSBuZXcgU2NoZW1hUGFydGljbGVbX3BhcnRpY2xlQ2hpbGRyZW4ubGVuZ3RoXTsKLSAgICAgICAgU3lzdGVtLmFycmF5Y29weShfcGFydGljbGVDaGlsZHJlbiwgMCwgcmVzdWx0LCAwLCBfcGFydGljbGVDaGlsZHJlbi5sZW5ndGgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFBhcnRpY2xlQ2hpbGRyZW4oU2NoZW1hUGFydGljbGVbXSBjaGlsZHJlbikKLSAgICAgICAgeyBtdXRhdGUoKTsgX3BhcnRpY2xlQ2hpbGRyZW4gPSBjaGlsZHJlbjsgfQotCi0gICAgcHVibGljIFNjaGVtYVBhcnRpY2xlIGdldFBhcnRpY2xlQ2hpbGQoaW50IGkpCi0gICAgICAgIHsgcmV0dXJuIF9wYXJ0aWNsZUNoaWxkcmVuW2ldOyB9Ci0KLSAgICBwdWJsaWMgaW50IGNvdW50T2ZQYXJ0aWNsZUNoaWxkKCkKLSAgICAgICAgeyByZXR1cm4gX3BhcnRpY2xlQ2hpbGRyZW4gPT0gbnVsbCA/IDAgOiBfcGFydGljbGVDaGlsZHJlbi5sZW5ndGg7IH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFdpbGRjYXJkU2V0KFFOYW1lU2V0IHNldCkKLSAgICAgICAgeyBtdXRhdGUoKTsgX3dpbGRjYXJkU2V0ID0gc2V0OyB9Ci0KLSAgICBwdWJsaWMgUU5hbWVTZXQgZ2V0V2lsZGNhcmRTZXQoKQotICAgICAgICB7IHJldHVybiBfd2lsZGNhcmRTZXQ7IH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFdpbGRjYXJkUHJvY2VzcyhpbnQgcHJvY2VzcykKLSAgICAgICAgeyBtdXRhdGUoKTsgX3dpbGRjYXJkUHJvY2VzcyA9IHByb2Nlc3M7IH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0V2lsZGNhcmRQcm9jZXNzKCkKLSAgICAgICAgeyByZXR1cm4gX3dpbGRjYXJkUHJvY2VzczsgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQmlnSW50ZWdlciBfbWF4aW50ID0gQmlnSW50ZWdlci52YWx1ZU9mKEludGVnZXIuTUFYX1ZBTFVFKTsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBwZWdCaWdJbnRlZ2VyKEJpZ0ludGVnZXIgYmkpCi0gICAgewotICAgICAgICBpZiAoYmkgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBJbnRlZ2VyLk1BWF9WQUxVRTsKLSAgICAgICAgaWYgKGJpLnNpZ251bSgpIDw9IDApCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYgKGJpLmNvbXBhcmVUbyhfbWF4aW50KSA+PSAwKQotICAgICAgICAgICAgcmV0dXJuIEludGVnZXIuTUFYX1ZBTFVFOwotICAgICAgICByZXR1cm4gYmkuaW50VmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUU5hbWUgZ2V0TmFtZSgpCi0gICAgICAgIHsgcmV0dXJuIF9xTmFtZTsgfQotCi0gICAgcHVibGljIHZvaWQgc2V0TmFtZUFuZFR5cGVSZWYoUU5hbWUgZm9ybW5hbWUsIFNjaGVtYVR5cGUuUmVmIHR5cGVyZWYpCi0gICAgICAgIHsgbXV0YXRlKCk7IF9xTmFtZSA9IGZvcm1uYW1lOyBfdHlwZXJlZiA9IHR5cGVyZWY7IH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzVHlwZVJlc29sdmVkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoX3R5cGVyZWYgIT0gbnVsbCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgcmVzb2x2ZVR5cGVSZWYoU2NoZW1hVHlwZS5SZWYgdHlwZXJlZikKLSAgICB7Ci0gICAgICAgIGlmIChfdHlwZXJlZiAhPSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotICAgICAgICBfdHlwZXJlZiA9IHR5cGVyZWY7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNBdHRyaWJ1dGUoKQotICAgICAgICB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgZ2V0VHlwZSgpCi0gICAgICAgIHsgaWYgKF90eXBlcmVmID09IG51bGwpIHJldHVybiBudWxsOyByZXR1cm4gX3R5cGVyZWYuZ2V0KCk7IH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdFRleHQoKQotICAgICAgICB7IHJldHVybiBfZGVmYXVsdFRleHQ7IH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzRGVmYXVsdCgpCi0gICAgICAgIHsgcmV0dXJuIF9pc0RlZmF1bHQ7IH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzRml4ZWQoKQotICAgICAgICB7IHJldHVybiBfaXNGaXhlZDsgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RGVmYXVsdChTdHJpbmcgZGVmdGV4dCwgYm9vbGVhbiBpc0ZpeGVkLCBYbWxPYmplY3QgcGFyc2VPYmplY3QpCi0gICAgewotICAgICAgICBtdXRhdGUoKTsKLSAgICAgICAgX2RlZmF1bHRUZXh0ID0gZGVmdGV4dDsKLSAgICAgICAgX2lzRGVmYXVsdCA9IChkZWZ0ZXh0ICE9IG51bGwpOwotICAgICAgICBfaXNGaXhlZCA9IGlzRml4ZWQ7Ci0gICAgICAgIF9wYXJzZU9iamVjdCA9IHBhcnNlT2JqZWN0OwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzTmlsbGFibGUoKQotICAgICAgICB7IHJldHVybiBfaXNOaWxsYWJsZTsgfQotCi0gICAgcHVibGljIHZvaWQgc2V0TmlsbGFibGUoYm9vbGVhbiBuaWxsYWJsZSkKLSAgICAgICAgeyBtdXRhdGUoKTsgX2lzTmlsbGFibGUgPSBuaWxsYWJsZTsgfQotCi0gICAgcHVibGljIFhtbEFueVNpbXBsZVR5cGUgZ2V0RGVmYXVsdFZhbHVlKCkKLSAgICB7Ci0gICAgICAgIGlmIChfZGVmYXVsdFZhbHVlICE9IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gX2RlZmF1bHRWYWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKF9kZWZhdWx0VGV4dCAhPSBudWxsICYmIFhtbEFueVNpbXBsZVR5cGUudHlwZS5pc0Fzc2lnbmFibGVGcm9tKGdldFR5cGUoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfcGFyc2VPYmplY3QgIT0gbnVsbCAmJiBYbWxRTmFtZS50eXBlLmlzQXNzaWduYWJsZUZyb20oZ2V0VHlwZSgpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIE5hbWVzcGFjZUNvbnRleHQucHVzaChuZXcgTmFtZXNwYWNlQ29udGV4dChfcGFyc2VPYmplY3QpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFR5cGUoKS5uZXdWYWx1ZShfZGVmYXVsdFRleHQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmaW5hbGx5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBOYW1lc3BhY2VDb250ZXh0LnBvcCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBnZXRUeXBlKCkubmV3VmFsdWUoX2RlZmF1bHRUZXh0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgc2V0RGVmYXVsdFZhbHVlKFhtbFZhbHVlUmVmIGRlZmF1bHRSZWYpCi0gICAgewotICAgICAgICBtdXRhdGUoKTsKLSAgICAgICAgX2RlZmF1bHRWYWx1ZSA9IGRlZmF1bHRSZWY7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU2NoZW1hUHJvcGVydHlJbXBsLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TY2hlbWFQcm9wZXJ0eUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc4MTRjNi4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TY2hlbWFQcm9wZXJ0eUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzOCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zY2hlbWE7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFHbG9iYWxFbGVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hR2xvYmFsQXR0cmlidXRlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hUHJvcGVydHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFGaWVsZDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlFOYW1lU2V0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFFOYW1lOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuTmFtZXNwYWNlQ29udGV4dDsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1wdWJsaWMgY2xhc3MgU2NoZW1hUHJvcGVydHlJbXBsIGltcGxlbWVudHMgU2NoZW1hUHJvcGVydHkKLXsKLSAgICBwcml2YXRlIFFOYW1lIF9uYW1lOwotICAgIHByaXZhdGUgU2NoZW1hVHlwZS5SZWYgX3R5cGVyZWY7Ci0gICAgcHJpdmF0ZSBib29sZWFuIF9pc0F0dHJpYnV0ZTsKLSAgICBwcml2YXRlIFNjaGVtYVR5cGUuUmVmIF9jb250YWluZXJUeXBlUmVmOwotICAgIHByaXZhdGUgU3RyaW5nIF9qYXZhUHJvcGVydHlOYW1lOwotICAgIHByaXZhdGUgQmlnSW50ZWdlciBfbWluT2NjdXJzOwotICAgIHByaXZhdGUgQmlnSW50ZWdlciBfbWF4T2NjdXJzOwotICAgIHByaXZhdGUgaW50IF9oYXNOaWxsYWJsZTsKLSAgICBwcml2YXRlIGludCBfaGFzRGVmYXVsdDsKLSAgICBwcml2YXRlIGludCBfaGFzRml4ZWQ7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgX2RlZmF1bHRUZXh0OwotICAgIHByaXZhdGUgYm9vbGVhbiBfaXNJbW11dGFibGU7Ci0gICAgcHJpdmF0ZSBTY2hlbWFUeXBlLlJlZiBfamF2YUJhc2VkT25UeXBlUmVmOwotICAgIHByaXZhdGUgYm9vbGVhbiBfZXh0ZW5kc1NpbmdsZXRvbjsKLSAgICBwcml2YXRlIGJvb2xlYW4gX2V4dGVuZHNBcnJheTsKLSAgICBwcml2YXRlIGJvb2xlYW4gX2V4dGVuZHNPcHRpb247Ci0gICAgcHJpdmF0ZSBpbnQgX2phdmFUeXBlQ29kZTsKLSAgICBwcml2YXRlIFFOYW1lU2V0IF9qYXZhU2V0dGVyRGVsaW1pdGVyOwotICAgIHByaXZhdGUgWG1sVmFsdWVSZWYgX2RlZmF1bHRWYWx1ZTsKLSAgICBwcml2YXRlIFNldCBfYWNjZXB0ZWROYW1lczsKLQotICAgIHByaXZhdGUgdm9pZCBtdXRhdGUoKQotICAgICAgICB7IGlmIChfaXNJbW11dGFibGUpIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsgfQotCi0gICAgcHVibGljIHZvaWQgc2V0SW1tdXRhYmxlKCkKLSAgICAgICAgeyBtdXRhdGUoKTsgX2lzSW1tdXRhYmxlID0gdHJ1ZTsgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgZ2V0Q29udGFpbmVyVHlwZSgpCi0gICAgICAgIHsgcmV0dXJuIF9jb250YWluZXJUeXBlUmVmLmdldCgpOyB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDb250YWluZXJUeXBlUmVmKFNjaGVtYVR5cGUuUmVmIHR5cGVyZWYpCi0gICAgICAgIHsgbXV0YXRlKCk7IF9jb250YWluZXJUeXBlUmVmID0gdHlwZXJlZjsgfQotCi0gICAgcHVibGljIFFOYW1lIGdldE5hbWUoKQotICAgICAgICB7IHJldHVybiBfbmFtZTsgfQotCi0gICAgcHVibGljIHZvaWQgc2V0TmFtZShRTmFtZSBuYW1lKQotICAgICAgICB7IG11dGF0ZSgpOyBfbmFtZSA9IG5hbWU7IH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0SmF2YVByb3BlcnR5TmFtZSgpCi0gICAgICAgIHsgcmV0dXJuIF9qYXZhUHJvcGVydHlOYW1lOyB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRKYXZhUHJvcGVydHlOYW1lKFN0cmluZyBuYW1lKQotICAgICAgICB7IG11dGF0ZSgpOyBfamF2YVByb3BlcnR5TmFtZSA9IG5hbWU7IH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzQXR0cmlidXRlKCkKLSAgICAgICAgeyByZXR1cm4gX2lzQXR0cmlidXRlOyB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRBdHRyaWJ1dGUoYm9vbGVhbiBpc0F0dHJpYnV0ZSkKLSAgICAgICAgeyBtdXRhdGUoKTsgX2lzQXR0cmlidXRlID0gaXNBdHRyaWJ1dGU7IH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzUmVhZE9ubHkoKQotICAgICAgICB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgZ2V0VHlwZSgpCi0gICAgICAgIHsgcmV0dXJuIF90eXBlcmVmLmdldCgpOyB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRUeXBlUmVmKFNjaGVtYVR5cGUuUmVmIHR5cGVyZWYpCi0gICAgICAgIHsgbXV0YXRlKCk7IF90eXBlcmVmID0gdHlwZXJlZjsgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgamF2YUJhc2VkT25UeXBlKCkKLSAgICAgICAgeyByZXR1cm4gX2phdmFCYXNlZE9uVHlwZVJlZi5nZXQoKTsgfQotCi0gICAgcHVibGljIGJvb2xlYW4gZXh0ZW5kc0phdmFTaW5nbGV0b24oKQotICAgICAgICB7IHJldHVybiBfZXh0ZW5kc1NpbmdsZXRvbjsgfQotCi0gICAgcHVibGljIGJvb2xlYW4gZXh0ZW5kc0phdmFBcnJheSgpCi0gICAgICAgIHsgcmV0dXJuIF9leHRlbmRzQXJyYXk7IH0KLQotICAgIHB1YmxpYyBib29sZWFuIGV4dGVuZHNKYXZhT3B0aW9uKCkKLSAgICAgICAgeyByZXR1cm4gX2V4dGVuZHNPcHRpb247IH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEV4dGVuZHNKYXZhKFNjaGVtYVR5cGUuUmVmIGphdmFCYXNlZE9uVHlwZVJlZiwgYm9vbGVhbiBzaW5nbGV0b24sIGJvb2xlYW4gb3B0aW9uLCBib29sZWFuIGFycmF5KQotICAgIHsKLSAgICAgICAgbXV0YXRlKCk7Ci0gICAgICAgIF9qYXZhQmFzZWRPblR5cGVSZWYgPSBqYXZhQmFzZWRPblR5cGVSZWY7Ci0gICAgICAgIF9leHRlbmRzU2luZ2xldG9uID0gc2luZ2xldG9uOwotICAgICAgICBfZXh0ZW5kc09wdGlvbiA9IG9wdGlvbjsKLSAgICAgICAgX2V4dGVuZHNBcnJheSA9IGFycmF5OwotICAgIH0KLQotICAgIHB1YmxpYyBRTmFtZVNldCBnZXRKYXZhU2V0dGVyRGVsaW1pdGVyKCkKLSAgICAgICAgeyByZXR1cm4gX2phdmFTZXR0ZXJEZWxpbWl0ZXIgPT0gbnVsbCA/IFFOYW1lU2V0LkVNUFRZIDogX2phdmFTZXR0ZXJEZWxpbWl0ZXI7IH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEphdmFTZXR0ZXJEZWxpbWl0ZXIoUU5hbWVTZXQgc2V0KQotICAgICAgICB7IG11dGF0ZSgpOyBfamF2YVNldHRlckRlbGltaXRlciA9IHNldDsgfQotCi0gICAgcHVibGljIFFOYW1lW10gYWNjZXB0ZWROYW1lcygpCi0gICAgeyAKLSAgICAgICAgaWYgKF9hY2NlcHRlZE5hbWVzID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbmV3IFFOYW1lW10geyBfbmFtZSB9OwotCi0gICAgICAgIHJldHVybiAoUU5hbWVbXSlfYWNjZXB0ZWROYW1lcy50b0FycmF5KG5ldyBRTmFtZVtfYWNjZXB0ZWROYW1lcy5zaXplKCldKTsgCi0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0QWNjZXB0ZWROYW1lcyhTZXQgc2V0KQotICAgIHsKLSAgICAgICAgbXV0YXRlKCk7IAotICAgICAgICBfYWNjZXB0ZWROYW1lcyA9IHNldDsKLSAgICB9Ci0gICAgcHVibGljIHZvaWQgc2V0QWNjZXB0ZWROYW1lcyhRTmFtZVNldCBzZXQpCi0gICAgeyAKLSAgICAgICAgbXV0YXRlKCk7IAotICAgICAgICBfYWNjZXB0ZWROYW1lcyA9IHNldC5pbmNsdWRlZFFOYW1lc0luRXhjbHVkZWRVUklzKCk7Ci0gICAgfQotCi0gICAgcHVibGljIEJpZ0ludGVnZXIgZ2V0TWluT2NjdXJzKCkKLSAgICAgICAgeyByZXR1cm4gX21pbk9jY3VyczsgfQotCi0gICAgcHVibGljIHZvaWQgc2V0TWluT2NjdXJzKEJpZ0ludGVnZXIgbWluKQotICAgICAgICB7IG11dGF0ZSgpOyBfbWluT2NjdXJzID0gbWluOyB9Ci0KLSAgICBwdWJsaWMgQmlnSW50ZWdlciBnZXRNYXhPY2N1cnMoKQotICAgICAgICB7IHJldHVybiBfbWF4T2NjdXJzOyB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRNYXhPY2N1cnMoQmlnSW50ZWdlciBtYXgpCi0gICAgICAgIHsgbXV0YXRlKCk7IF9tYXhPY2N1cnMgPSBtYXg7IH0KLQotICAgIHB1YmxpYyBpbnQgaGFzTmlsbGFibGUoKQotICAgICAgICB7IHJldHVybiBfaGFzTmlsbGFibGU7IH0KLQotICAgIHB1YmxpYyB2b2lkIHNldE5pbGxhYmxlKGludCB3aGVuKQotICAgICAgICB7IG11dGF0ZSgpOyBfaGFzTmlsbGFibGUgPSB3aGVuOyB9Ci0KLSAgICBwdWJsaWMgaW50IGhhc0RlZmF1bHQoKQotICAgICAgICB7IHJldHVybiBfaGFzRGVmYXVsdDsgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RGVmYXVsdChpbnQgd2hlbikKLSAgICAgICAgeyBtdXRhdGUoKTsgX2hhc0RlZmF1bHQgPSB3aGVuOyB9Ci0KLSAgICBwdWJsaWMgaW50IGhhc0ZpeGVkKCkKLSAgICAgICAgeyByZXR1cm4gX2hhc0ZpeGVkOyB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRGaXhlZChpbnQgd2hlbikKLSAgICAgICAgeyBtdXRhdGUoKTsgX2hhc0ZpeGVkID0gd2hlbjsgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0VGV4dCgpCi0gICAgICAgIHsgcmV0dXJuIF9kZWZhdWx0VGV4dDsgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RGVmYXVsdFRleHQoU3RyaW5nIHZhbCkKLSAgICAgICAgeyBtdXRhdGUoKTsgX2RlZmF1bHRUZXh0ID0gdmFsOyB9Ci0KLSAgICBwdWJsaWMgWG1sQW55U2ltcGxlVHlwZSBnZXREZWZhdWx0VmFsdWUoKQotICAgIHsKLSAgICAgICAgaWYgKF9kZWZhdWx0VmFsdWUgIT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBfZGVmYXVsdFZhbHVlLmdldCgpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgc2V0RGVmYXVsdFZhbHVlKFhtbFZhbHVlUmVmIGRlZmF1bHRSZWYpCi0gICAgewotICAgICAgICBtdXRhdGUoKTsKLSAgICAgICAgX2RlZmF1bHRWYWx1ZSA9IGRlZmF1bHRSZWY7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRKYXZhVHlwZUNvZGUoKQotICAgICAgICB7IHJldHVybiBfamF2YVR5cGVDb2RlOyB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRKYXZhVHlwZUNvZGUoaW50IGNvZGUpCi0gICAgICAgIHsgbXV0YXRlKCk7IF9qYXZhVHlwZUNvZGUgPSBjb2RlOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TY2hlbWFTdHJpbmdFbnVtRW50cnlJbXBsLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TY2hlbWFTdHJpbmdFbnVtRW50cnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1NmI4ODYuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU2NoZW1hU3RyaW5nRW51bUVudHJ5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFTdHJpbmdFbnVtRW50cnk7Ci0KLXB1YmxpYyBjbGFzcyBTY2hlbWFTdHJpbmdFbnVtRW50cnlJbXBsIGltcGxlbWVudHMgU2NoZW1hU3RyaW5nRW51bUVudHJ5Ci17Ci0gICAgcHJpdmF0ZSBTdHJpbmcgX3N0cmluZzsKLSAgICBwcml2YXRlIGludCBfaW50OwotICAgIHByaXZhdGUgU3RyaW5nIF9lbnVtTmFtZTsKLQotICAgIHB1YmxpYyBTY2hlbWFTdHJpbmdFbnVtRW50cnlJbXBsKFN0cmluZyBzdHIsIGludCBpLCBTdHJpbmcgZW51bU5hbWUpCi0gICAgewotICAgICAgICBfc3RyaW5nID0gc3RyOwotICAgICAgICBfaW50ID0gaTsKLSAgICAgICAgX2VudW1OYW1lID0gZW51bU5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTdHJpbmcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9zdHJpbmc7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRJbnRWYWx1ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gX2ludDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEVudW1OYW1lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfZW51bU5hbWU7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU2NoZW1hVHlwZUNvZGVQcmludGVyLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TY2hlbWFUeXBlQ29kZVByaW50ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc1YWY0Ny4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TY2hlbWFUeXBlQ29kZVByaW50ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMzQgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hOwotCi1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLk5hbWVVdGlsOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVTeXN0ZW07Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQcm9wZXJ0eTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVN0cmluZ0VudW1FbnRyeTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLQotLyoqCi0gKiBQcmludHMgdGhlIGphdmEgY29kZSBmb3IgYSBzaW5nbGUgc2NoZW1hIHR5cGUKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFNjaGVtYVR5cGVDb2RlUHJpbnRlcgotewotICAgIFdyaXRlciBfd3JpdGVyOwotICAgIGludCAgICBfaW5kZW50OwotCi0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBMSU5FX1NFUEFSQVRPUiA9Ci0gICAgICAgIFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSA9PSBudWxsCi0gICAgICAgICAgICA/ICJcbiIKLSAgICAgICAgICAgIDogU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOwotCi0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBNQVhfU1BBQ0VTID0gIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgSU5ERU5UX0lOQ1JFTUVOVCA9IDQ7Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTkRFWF9DTEFTU05BTUUgPSAiVHlwZVN5c3RlbUhvbGRlciI7Ci0KLSAgICBwdWJsaWMgU2NoZW1hVHlwZUNvZGVQcmludGVyICggV3JpdGVyIHdyaXRlciApCi0gICAgewotICAgICAgICBfd3JpdGVyID0gd3JpdGVyOwotICAgICAgICBfaW5kZW50ID0gMDsKLSAgICB9Ci0KLSAgICB2b2lkIGluZGVudCgpCi0gICAgewotICAgICAgICBfaW5kZW50ICs9IElOREVOVF9JTkNSRU1FTlQ7Ci0gICAgfQotCi0gICAgdm9pZCBvdXRkZW50KCkKLSAgICB7Ci0gICAgICAgIF9pbmRlbnQgLT0gSU5ERU5UX0lOQ1JFTUVOVDsKLSAgICB9Ci0KLSAgICBTdHJpbmcgZW5jb2RlU3RyaW5nICggU3RyaW5nIHMgKQotICAgIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0gICAgICAgIHNiLmFwcGVuZCggJyInICk7Ci0KLSAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IHMubGVuZ3RoKCkgOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyIGNoID0gcy5jaGFyQXQoIGkgKTsKLQotICAgICAgICAgICAgaWYgKGNoID09ICciJykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoICdcXCcgKTsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoICdcIicgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGNoID09ICdcXCcpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKCAnXFwnICk7Ci0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKCAnXFwnICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnXHInKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggJ1xcJyApOwotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggJ3InICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnXG4nKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggJ1xcJyApOwotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggJ24nICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnXHQnKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggJ1xcJyApOwotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggJ3QnICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKCBjaCApOwotICAgICAgICB9Ci0KLSAgICAgICAgc2IuYXBwZW5kKCAnIicgKTsKLQotICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGVtaXQoU3RyaW5nIHMpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgaW50IGluZGVudCA9IF9pbmRlbnQ7Ci0gICAgICAgIAotICAgICAgICBpZiAoaW5kZW50ID4gTUFYX1NQQUNFUy5sZW5ndGgoKSAvIDIpCi0gICAgICAgICAgICBpbmRlbnQgPSBNQVhfU1BBQ0VTLmxlbmd0aCgpIC8gNCArIGluZGVudCAvIDI7Ci0gICAgICAgIAotICAgICAgICBpZiAoaW5kZW50ID4gTUFYX1NQQUNFUy5sZW5ndGgoKSkKLSAgICAgICAgICAgIGluZGVudCA9IE1BWF9TUEFDRVMubGVuZ3RoKCk7Ci0gICAgICAgIAotICAgICAgICBfd3JpdGVyLndyaXRlKE1BWF9TUEFDRVMuc3Vic3RyaW5nKDAsIGluZGVudCkpOwotICAgICAgICBfd3JpdGVyLndyaXRlKHMpOwotICAgICAgICBfd3JpdGVyLndyaXRlKExJTkVfU0VQQVJBVE9SKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnQoTUFYX1NQQUNFUy5zdWJzdHJpbmcoMCwgaW5kZW50KSk7Ci0gICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbihzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRUeXBlSW1wbCAoIFdyaXRlciB3cml0ZXIsIFNjaGVtYVR5cGUgc1R5cGUgKQotICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIG5ldyBTY2hlbWFUeXBlQ29kZVByaW50ZXIoIHdyaXRlciApLnByaW50VHlwZUltcGwoIHNUeXBlLCBzVHlwZS5nZXRUeXBlU3lzdGVtKCkgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRUeXBlICggV3JpdGVyIHdyaXRlciwgU2NoZW1hVHlwZSBzVHlwZSApCi0gICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgbmV3IFNjaGVtYVR5cGVDb2RlUHJpbnRlciggd3JpdGVyICkuIHByaW50VHlwZSggc1R5cGUsIHNUeXBlLmdldFR5cGVTeXN0ZW0oKSApOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludExvYWRlciAoIFdyaXRlciB3cml0ZXIsIFNjaGVtYVR5cGVTeXN0ZW0gc3lzdGVtICkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBuZXcgU2NoZW1hVHlwZUNvZGVQcmludGVyKCB3cml0ZXIgKS5wcmludEluZGV4VHlwZSggc3lzdGVtICk7Ci0gICAgfQotCi0gICAgdm9pZCBwcmludFR5cGUoU2NoZW1hVHlwZSBzVHlwZSwgU2NoZW1hVHlwZVN5c3RlbSBzeXN0ZW0pIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgcHJpbnRUb3BDb21tZW50KHNUeXBlKTsKLSAgICAgICAgcHJpbnRQYWNrYWdlKHNUeXBlLCB0cnVlKTsKLSAgICAgICAgZW1pdCgiIik7Ci0gICAgICAgIHByaW50SW5uZXJUeXBlKHNUeXBlLCBzeXN0ZW0pOwotICAgICAgICBfd3JpdGVyLmZsdXNoKCk7Ci0gICAgfQotCi0gICAgdm9pZCBwcmludFR5cGVJbXBsKFNjaGVtYVR5cGUgc1R5cGUsIFNjaGVtYVR5cGVTeXN0ZW0gc3lzdGVtKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHByaW50VG9wQ29tbWVudChzVHlwZSk7Ci0gICAgICAgIHByaW50UGFja2FnZShzVHlwZSwgZmFsc2UpOwotICAgICAgICBwcmludElubmVyVHlwZUltcGwoc1R5cGUsIHN5c3RlbSwgZmFsc2UpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNpbmNlIG5vdCBhbGwgc2NoZW1hIHR5cGVzIGhhdmUgamF2YSB0eXBlcywgdGhpcyBza2lwcwotICAgICAqIG92ZXIgYW55IHRoYXQgZG9uJ3QgYW5kIGdpdmVzIHlvdSB0aGUgbmVhcmVzdCBqYXZhIGJhc2UgdHlwZS4KLSAgICAgKi8KLSAgICBTdHJpbmcgZmluZEphdmFUeXBlICggU2NoZW1hVHlwZSBzVHlwZSApCi0gICAgewotICAgICAgICB3aGlsZSAoIHNUeXBlLmdldEZ1bGxKYXZhTmFtZSgpID09IG51bGwgKQotICAgICAgICAgICAgc1R5cGUgPSBzVHlwZS5nZXRCYXNlVHlwZSgpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHNUeXBlLmdldEZ1bGxKYXZhTmFtZSgpOwotICAgIH0KLQotICAgIHN0YXRpYyBTdHJpbmcgcHJldHR5UU5hbWUoUU5hbWUgcW5hbWUpCi0gICAgewotICAgICAgICBTdHJpbmcgcmVzdWx0ID0gcW5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgIGlmIChxbmFtZS5nZXROYW1lc3BhY2VVUkkoKSAhPSBudWxsKQotICAgICAgICAgICAgcmVzdWx0ICs9ICIoQCIgKyBxbmFtZS5nZXROYW1lc3BhY2VVUkkoKSArICIpIjsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICB2b2lkIHByaW50SW5uZXJUeXBlSmF2YURvYyhTY2hlbWFUeXBlIHNUeXBlKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFFOYW1lIG5hbWUgPSBzVHlwZS5nZXROYW1lKCk7Ci0gICAgICAgIGlmIChuYW1lID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzVHlwZS5pc0RvY3VtZW50VHlwZSgpKQotICAgICAgICAgICAgICAgIG5hbWUgPSBzVHlwZS5nZXREb2N1bWVudEVsZW1lbnROYW1lKCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChzVHlwZS5pc0F0dHJpYnV0ZVR5cGUoKSkKLSAgICAgICAgICAgICAgICBuYW1lID0gc1R5cGUuZ2V0QXR0cmlidXRlVHlwZUF0dHJpYnV0ZU5hbWUoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHNUeXBlLmdldENvbnRhaW5lckZpZWxkKCkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBuYW1lID0gc1R5cGUuZ2V0Q29udGFpbmVyRmllbGQoKS5nZXROYW1lKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBlbWl0KCIvKioiKTsKLSAgICAgICAgaWYgKHNUeXBlLmlzRG9jdW1lbnRUeXBlKCkpCi0gICAgICAgICAgICBlbWl0KCIgKiBBIGRvY3VtZW50IGNvbnRhaW5pbmcgb25lICIgKyBwcmV0dHlRTmFtZShuYW1lKSArICIgZWxlbWVudC4iKTsKLSAgICAgICAgZWxzZSBpZiAoc1R5cGUuaXNBdHRyaWJ1dGVUeXBlKCkpCi0gICAgICAgICAgICBlbWl0KCIgKiBBIGRvY3VtZW50IGNvbnRhaW5pbmcgb25lICIgKyBwcmV0dHlRTmFtZShuYW1lKSArICIgYXR0cmlidXRlLiIpOwotICAgICAgICBlbHNlIGlmIChuYW1lICE9IG51bGwpCi0gICAgICAgICAgICBlbWl0KCIgKiBBbiBYTUwgIiArIHByZXR0eVFOYW1lKG5hbWUpICsgIi4iKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZW1pdCgiICogQW4gYW5vbnltb3VzIGlubmVyIFhNTCB0eXBlLiIpOwotICAgICAgICBlbWl0KCIgKiIpOwotICAgICAgICBzd2l0Y2ggKHNUeXBlLmdldFNpbXBsZVZhcmlldHkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLk5PVF9TSU1QTEU6Ci0gICAgICAgICAgICAgICAgZW1pdCgiICogVGhpcyBpcyBhIGNvbXBsZXggdHlwZS4iKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5BVE9NSUM6Ci0gICAgICAgICAgICAgICAgZW1pdCgiICogVGhpcyBpcyBhbiBhdG9taWMgdHlwZSB0aGF0IGlzIGEgcmVzdHJpY3Rpb24gb2YgIiArIHNUeXBlLmdldEJhc2VUeXBlKCkuZ2V0RnVsbEphdmFOYW1lKCkgKyAiLiIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkxJU1Q6Ci0gICAgICAgICAgICAgICAgZW1pdCgiICogVGhpcyBpcyBhIGxpc3QgdHlwZSB3aG9zZSBpdGVtcyBhcmUgIiArIHNUeXBlLmdldExpc3RJdGVtVHlwZSgpLmdldEZ1bGxKYXZhTmFtZSgpICsgIi4iKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5VTklPTjoKLSAgICAgICAgICAgICAgICBlbWl0KCIgKiBUaGlzIGlzIGEgdW5pb24gdHlwZS4gSW5zdGFuY2VzIGFyZSBvZiBvbmUgb2YgdGhlIGZvbGxvd2luZyB0eXBlczoiKTsKLSAgICAgICAgICAgICAgICBTY2hlbWFUeXBlW10gbWVtYmVycyA9IHNUeXBlLmdldFVuaW9uQ29uc3RpdHVlbnRUeXBlcygpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWVtYmVycy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgZW1pdCgiICogICAgICIgKyBtZW1iZXJzW2ldLmdldEZ1bGxKYXZhTmFtZSgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBlbWl0KCIgKi8iKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBpbmRleENsYXNzRm9yU3lzdGVtKFNjaGVtYVR5cGVTeXN0ZW0gc3lzdGVtKQotICAgIHsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBzeXN0ZW0uZ2V0TmFtZSgpOwotICAgICAgICByZXR1cm4gbmFtZSArICIuIiArIElOREVYX0NMQVNTTkFNRTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgU3RyaW5nIHNob3J0SW5kZXhDbGFzc0ZvclN5c3RlbShTY2hlbWFUeXBlU3lzdGVtIHN5c3RlbSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBJTkRFWF9DTEFTU05BTUU7Ci0gICAgfQotCi0gICAgdm9pZCBwcmludFN0YXRpY1R5cGVEZWNsYXJhdGlvbihTY2hlbWFUeXBlIHNUeXBlLCBTY2hlbWFUeXBlU3lzdGVtIHN5c3RlbSkgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBlbWl0KCJwdWJsaWMgc3RhdGljIGZpbmFsIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSB0eXBlID0gKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiICsKLSAgICAgICAgICAgICAgICBpbmRleENsYXNzRm9yU3lzdGVtKHN5c3RlbSkgKwotICAgICAgICAgICAgICAgICIudHlwZVN5c3RlbS5yZXNvbHZlSGFuZGxlKFwiIiArCi0gICAgICAgICAgICAgICAgKChTY2hlbWFUeXBlU3lzdGVtSW1wbClzeXN0ZW0pLmhhbmRsZUZvclR5cGUoc1R5cGUpICsgIlwiKTsiKTsKLSAgICB9Ci0KLSAgICB2b2lkIHByaW50SW5kZXhUeXBlKFNjaGVtYVR5cGVTeXN0ZW0gc3lzdGVtKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFN0cmluZyBzaG9ydE5hbWUgPSBzaG9ydEluZGV4Q2xhc3NGb3JTeXN0ZW0oc3lzdGVtKTsKLSAgICAgICAgZW1pdCgicGFja2FnZSAiICsgc3lzdGVtLmdldE5hbWUoKSArICI7Iik7Ci0gICAgICAgIGVtaXQoIiIpOwotICAgICAgICBlbWl0KCJwdWJsaWMgZmluYWwgY2xhc3MgIiArIHNob3J0TmFtZSk7Ci0gICAgICAgIGVtaXQoInsiKTsKLSAgICAgICAgaW5kZW50KCk7Ci0gICAgICAgIGVtaXQoInByaXZhdGUgIiArIHNob3J0TmFtZSArICIoKSB7IH0iKTsKLSAgICAgICAgZW1pdCgicHVibGljIHN0YXRpYyBmaW5hbCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVTeXN0ZW0gdHlwZVN5c3RlbSA9IGxvYWRUeXBlU3lzdGVtKCk7Iik7Ci0gICAgICAgIGVtaXQoInN0YXRpYyB7IHR5cGVTeXN0ZW0ucmVzb2x2ZSgpOyB9Iik7Ci0gICAgICAgIGVtaXQoInByaXZhdGUgc3RhdGljIGZpbmFsIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVN5c3RlbSBsb2FkVHlwZVN5c3RlbSgpIik7Ci0gICAgICAgIGVtaXQoInsiKTsKLSAgICAgICAgaW5kZW50KCk7Ci0gICAgICAgIGVtaXQoInRyeSB7IHJldHVybiAob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlU3lzdGVtKUNsYXNzLmZvck5hbWUoXCJvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hLlNjaGVtYVR5cGVTeXN0ZW1JbXBsXCIsIHRydWUsICIgKyBzaG9ydE5hbWUgKyAiLmNsYXNzLmdldENsYXNzTG9hZGVyKCkpLmdldENvbnN0cnVjdG9yKG5ldyBDbGFzc1tdIHsgQ2xhc3MuY2xhc3MgfSkubmV3SW5zdGFuY2UobmV3IE9iamVjdFtdIHsgIiArIHNob3J0TmFtZSArICIuY2xhc3MgfSk7IH0iKTsKLSAgICAgICAgZW1pdCgiY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgeyB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihcIkNhbm5vdCBsb2FkIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5TY2hlbWFUeXBlU3lzdGVtSW1wbDogbWFrZSBzdXJlIHhiZWFuLmphciBpcyBvbiB0aGUgY2xhc3NwYXRoLlwiLCBlKTsgfSIpOwotICAgICAgICBlbWl0KCJjYXRjaCAoRXhjZXB0aW9uIGUpIHsgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oXCJDb3VsZCBub3QgaW5zdGFudGlhdGUgU2NoZW1hVHlwZVN5c3RlbUltcGwgKFwiICsgZS50b1N0cmluZygpICsgXCIpOiBpcyB0aGUgdmVyc2lvbiBvZiB4YmVhbi5qYXIgY29ycmVjdD9cIiwgZSk7IH0iKTsKLSAgICAgICAgb3V0ZGVudCgpOwotICAgICAgICBlbWl0KCJ9Iik7Ci0gICAgICAgIG91dGRlbnQoKTsKLSAgICAgICAgZW1pdCgifSIpOwotICAgIH0KLQotICAgIHZvaWQgcHJpbnRJbm5lclR5cGUoU2NoZW1hVHlwZSBzVHlwZSwgU2NoZW1hVHlwZVN5c3RlbSBzeXN0ZW0pIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgZW1pdCgiIik7Ci0KLSAgICAgICAgcHJpbnRJbm5lclR5cGVKYXZhRG9jKHNUeXBlKTsKLQotICAgICAgICBzdGFydEludGVyZmFjZShzVHlwZSk7Ci0gICAgICAgIAotICAgICAgICBwcmludFN0YXRpY1R5cGVEZWNsYXJhdGlvbihzVHlwZSwgc3lzdGVtKTsKLQotICAgICAgICBpZiAoc1R5cGUuaXNTaW1wbGVUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzVHlwZS5oYXNTdHJpbmdFbnVtVmFsdWVzKCkpCi0gICAgICAgICAgICAgICAgcHJpbnRTdHJpbmdFbnVtZXJhdGlvbihzVHlwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBTY2hlbWFQcm9wZXJ0eVtdIHByb3BzID0gc1R5cGUuZ2V0RGVyaXZlZFByb3BlcnRpZXMoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2NoZW1hUHJvcGVydHkgcHJvcCA9IHByb3BzW2ldOwotCi0gICAgICAgICAgICAgICAgcHJpbnRQcm9wZXJ0eUdldHRlcnMoCi0gICAgICAgICAgICAgICAgICAgIHByb3AuZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICBwcm9wLmlzQXR0cmlidXRlKCksCi0gICAgICAgICAgICAgICAgICAgIHByb3AuZ2V0SmF2YVByb3BlcnR5TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICBwcm9wLmdldEphdmFUeXBlQ29kZSgpLAotICAgICAgICAgICAgICAgICAgICBqYXZhVHlwZUZvclByb3BlcnR5KHByb3ApLAotICAgICAgICAgICAgICAgICAgICB4bWxUeXBlRm9yUHJvcGVydHkocHJvcCksCi0gICAgICAgICAgICAgICAgICAgIHByb3AuaGFzTmlsbGFibGUoKSAhPSBTY2hlbWFQcm9wZXJ0eS5ORVZFUiwKLSAgICAgICAgICAgICAgICAgICAgcHJvcC5leHRlbmRzSmF2YU9wdGlvbigpLAotICAgICAgICAgICAgICAgICAgICBwcm9wLmV4dGVuZHNKYXZhQXJyYXkoKSwKLSAgICAgICAgICAgICAgICAgICAgcHJvcC5leHRlbmRzSmF2YVNpbmdsZXRvbigpCi0gICAgICAgICAgICAgICAgKTsKLQotICAgICAgICAgICAgICAgIGlmICghcHJvcC5pc1JlYWRPbmx5KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBwcmludFByb3BlcnR5U2V0dGVycygKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3AuZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcC5pc0F0dHJpYnV0ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcC5nZXRKYXZhUHJvcGVydHlOYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wLmdldEphdmFUeXBlQ29kZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgamF2YVR5cGVGb3JQcm9wZXJ0eShwcm9wKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHhtbFR5cGVGb3JQcm9wZXJ0eShwcm9wKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3AuaGFzTmlsbGFibGUoKSAhPSBTY2hlbWFQcm9wZXJ0eS5ORVZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3AuZXh0ZW5kc0phdmFPcHRpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3AuZXh0ZW5kc0phdmFBcnJheSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcC5leHRlbmRzSmF2YVNpbmdsZXRvbigpCi0gICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHByaW50TmVzdGVkSW5uZXJUeXBlcyhzVHlwZSwgc3lzdGVtKTsKLQotICAgICAgICBwcmludEZhY3Rvcnkoc1R5cGUpOwotCi0gICAgICAgIGVuZEJsb2NrKCk7Ci0gICAgfQotCi0gICAgdm9pZCBwcmludEZhY3RvcnkoU2NoZW1hVHlwZSBzVHlwZSkgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICAvLyBPbmx5IG5lZWQgZnVsbCBmYWN0b3JpZXMgZm9yIHRvcC1sZXZlbCB0eXBlcwotICAgICAgICBib29sZWFuIGZ1bGxGYWN0b3J5ID0gdHJ1ZTsKLSAgICAgICAgaWYgKHNUeXBlLmlzQW5vbnltb3VzVHlwZSgpICYmICEgc1R5cGUuaXNEb2N1bWVudFR5cGUoKSAmJiAhc1R5cGUuaXNBdHRyaWJ1dGVUeXBlKCkpCi0gICAgICAgICAgICBmdWxsRmFjdG9yeSA9IGZhbHNlOwotCi0gICAgICAgIFN0cmluZyBmdWxsTmFtZSA9IHNUeXBlLmdldEZ1bGxKYXZhTmFtZSgpLnJlcGxhY2UoJyQnLCAnLicpOwotCi0gICAgICAgIGVtaXQoIiIpOwotICAgICAgICBlbWl0KCIvKioiKTsKLSAgICAgICAgZW1pdCgiICogQSBmYWN0b3J5IGNsYXNzIHdpdGggc3RhdGljIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcyIpOwotICAgICAgICBlbWl0KCIgKiBvZiB0aGlzIHR5cGUuIik7Ci0gICAgICAgIGVtaXQoIiAqLyIpOwotICAgICAgICBlbWl0KCIiKTsKLSAgICAgICAgLy8gQlVHQlVHIC0gQ2FuIEkgdXNlIHRoZSBuYW1lIGxvYWRlciBoZXJlPyAgY291bGQgaXQgYmUgYQotICAgICAgICAvLyBuZXN0ZWQgdHlwZSBuYW1lPyAgSXQgaXMgbG93ZXIgY2FzZSEKLSAgICAgICAgZW1pdCgicHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBGYWN0b3J5Iik7Ci0gICAgICAgIGVtaXQoInsiKTsKLSAgICAgICAgaW5kZW50KCk7Ci0KLSAgICAgICAgaWYgKHNUeXBlLmlzU2ltcGxlVHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbWl0KCJwdWJsaWMgc3RhdGljICIgKyBmdWxsTmFtZSArICIgbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCBvYmopIHsiKTsKLSAgICAgICAgICAgIGVtaXQoIiAgcmV0dXJuICgiICsgZnVsbE5hbWUgKyAiKSB0eXBlLm5ld1ZhbHVlKCBvYmogKTsgfSIpOwotICAgICAgICAgICAgZW1pdCgiIik7Ci0gICAgICAgIH0KLQotICAgICAgICBlbWl0KCJwdWJsaWMgc3RhdGljICIgKyBmdWxsTmFtZSArICIgbmV3SW5zdGFuY2UoKSB7Iik7Ci0gICAgICAgIGVtaXQoIiAgcmV0dXJuICgiICsgZnVsbE5hbWUgKyAiKSBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG51bGwgKTsgfSIpOwotICAgICAgICBlbWl0KCIiKTsKLQotICAgICAgICBlbWl0KCJwdWJsaWMgc3RhdGljICIgKyBmdWxsTmFtZSArICIgbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHsiKTsKLSAgICAgICAgZW1pdCgiICByZXR1cm4gKCIgKyBmdWxsTmFtZSArICIpIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgb3B0aW9ucyApOyB9Iik7Ci0gICAgICAgIGVtaXQoIiIpOwotCi0gICAgICAgIGlmIChmdWxsRmFjdG9yeSkKLSAgICAgICAgewotICAgICAgICAgICAgZW1pdCgicHVibGljIHN0YXRpYyAiICsgZnVsbE5hbWUgKyAiIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsiKTsKLSAgICAgICAgICAgIGVtaXQoIiAgcmV0dXJuICgiICsgZnVsbE5hbWUgKyAiKSBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHMsIHR5cGUsIG51bGwgKTsgfSIpOwotICAgICAgICAgICAgZW1pdCgiIik7Ci0KLSAgICAgICAgICAgIGVtaXQoInB1YmxpYyBzdGF0aWMgIiArIGZ1bGxOYW1lICsgIiBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24geyIpOwotICAgICAgICAgICAgZW1pdCgiICByZXR1cm4gKCIgKyBmdWxsTmFtZSArICIpIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgb3B0aW9ucyApOyB9Iik7Ci0gICAgICAgICAgICBlbWl0KCIiKTsKLQotICAgICAgICAgICAgZW1pdCgicHVibGljIHN0YXRpYyAiICsgZnVsbE5hbWUgKyAiIHBhcnNlKGphdmEuaW8uRmlsZSBmKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24geyIpOwotICAgICAgICAgICAgZW1pdCgiICByZXR1cm4gKCIgKyBmdWxsTmFtZSArICIpIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgbnVsbCApOyB9Iik7Ci0gICAgICAgICAgICBlbWl0KCIiKTsKLQotICAgICAgICAgICAgZW1pdCgicHVibGljIHN0YXRpYyAiICsgZnVsbE5hbWUgKyAiIHBhcnNlKGphdmEuaW8uRmlsZSBmLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsiKTsKLSAgICAgICAgICAgIGVtaXQoIiAgcmV0dXJuICgiICsgZnVsbE5hbWUgKyAiKSBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG9wdGlvbnMgKTsgfSIpOwotICAgICAgICAgICAgZW1pdCgiIik7Ci0KLSAgICAgICAgICAgIGVtaXQoInB1YmxpYyBzdGF0aWMgIiArIGZ1bGxOYW1lICsgIiBwYXJzZShqYXZhLm5ldC5VUkwgdSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsiKTsKLSAgICAgICAgICAgIGVtaXQoIiAgcmV0dXJuICgiICsgZnVsbE5hbWUgKyAiKSBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG51bGwgKTsgfSIpOwotICAgICAgICAgICAgZW1pdCgiIik7Ci0KLSAgICAgICAgICAgIGVtaXQoInB1YmxpYyBzdGF0aWMgIiArIGZ1bGxOYW1lICsgIiBwYXJzZShqYXZhLm5ldC5VUkwgdSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Iik7Ci0gICAgICAgICAgICBlbWl0KCIgIHJldHVybiAoIiArIGZ1bGxOYW1lICsgIikgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBvcHRpb25zICk7IH0iKTsKLSAgICAgICAgICAgIGVtaXQoIiIpOwotCi0gICAgICAgICAgICBlbWl0KCJwdWJsaWMgc3RhdGljICIgKyBmdWxsTmFtZSArICIgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsiKTsKLSAgICAgICAgICAgIGVtaXQoIiAgcmV0dXJuICgiICsgZnVsbE5hbWUgKyAiKSBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBudWxsICk7IH0iKTsKLSAgICAgICAgICAgIGVtaXQoIiIpOwotCi0gICAgICAgICAgICBlbWl0KCJwdWJsaWMgc3RhdGljICIgKyBmdWxsTmFtZSArICIgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Iik7Ci0gICAgICAgICAgICBlbWl0KCIgIHJldHVybiAoIiArIGZ1bGxOYW1lICsgIikgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgb3B0aW9ucyApOyB9Iik7Ci0gICAgICAgICAgICBlbWl0KCIiKTsKLQotICAgICAgICAgICAgZW1pdCgicHVibGljIHN0YXRpYyAiICsgZnVsbE5hbWUgKyAiIHBhcnNlKGphdmEuaW8uUmVhZGVyIHIpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Iik7Ci0gICAgICAgICAgICBlbWl0KCIgIHJldHVybiAoIiArIGZ1bGxOYW1lICsgIikgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBudWxsICk7IH0iKTsKLSAgICAgICAgICAgIGVtaXQoIiIpOwotCi0gICAgICAgICAgICBlbWl0KCJwdWJsaWMgc3RhdGljICIgKyBmdWxsTmFtZSArICIgcGFyc2UoamF2YS5pby5SZWFkZXIgciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Iik7Ci0gICAgICAgICAgICBlbWl0KCIgIHJldHVybiAoIiArIGZ1bGxOYW1lICsgIikgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBvcHRpb25zICk7IH0iKTsKLSAgICAgICAgICAgIGVtaXQoIiIpOwotCi0gICAgICAgICAgICBlbWl0KCJwdWJsaWMgc3RhdGljICIgKyBmdWxsTmFtZSArICIgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24geyIpOwotICAgICAgICAgICAgZW1pdCgiICByZXR1cm4gKCIgKyBmdWxsTmFtZSArICIpIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgbnVsbCApOyB9Iik7Ci0gICAgICAgICAgICBlbWl0KCIiKTsKLQotICAgICAgICAgICAgZW1pdCgicHVibGljIHN0YXRpYyAiICsgZnVsbE5hbWUgKyAiIHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Iik7Ci0gICAgICAgICAgICBlbWl0KCIgIHJldHVybiAoIiArIGZ1bGxOYW1lICsgIikgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBvcHRpb25zICk7IH0iKTsKLSAgICAgICAgICAgIGVtaXQoIiIpOwotCi0gICAgICAgICAgICBlbWl0KCJwdWJsaWMgc3RhdGljICIgKyBmdWxsTmFtZSArICIgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24geyIpOwotICAgICAgICAgICAgZW1pdCgiICByZXR1cm4gKCIgKyBmdWxsTmFtZSArICIpIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBudWxsICk7IH0iKTsKLSAgICAgICAgICAgIGVtaXQoIiIpOwotCi0gICAgICAgICAgICBlbWl0KCJwdWJsaWMgc3RhdGljICIgKyBmdWxsTmFtZSArICIgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsiKTsKLSAgICAgICAgICAgIGVtaXQoIiAgcmV0dXJuICgiICsgZnVsbE5hbWUgKyAiKSBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Iik7Ci0gICAgICAgICAgICBlbWl0KCIiKTsKLQotICAgICAgICAgICAgZW1pdCgicHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Iik7Ci0gICAgICAgICAgICBlbWl0KCIgIHJldHVybiBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG51bGwgKTsgfSIpOwotICAgICAgICAgICAgZW1pdCgiIik7Ci0KLSAgICAgICAgICAgIGVtaXQoInB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsiKTsKLSAgICAgICAgICAgIGVtaXQoIiAgcmV0dXJuIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Iik7Ci0gICAgICAgICAgICBlbWl0KCIiKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVtaXQoInByaXZhdGUgRmFjdG9yeSgpIHsgfSAvLyBObyBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGFsbG93ZWQiKTsKLSAgICAgICAgb3V0ZGVudCgpOwotICAgICAgICBlbWl0KCJ9Iik7Ci0gICAgfQotCi0gICAgdm9pZCBwcmludE5lc3RlZElubmVyVHlwZXMoU2NoZW1hVHlwZSBzVHlwZSwgU2NoZW1hVHlwZVN5c3RlbSBzeXN0ZW0pIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgU2NoZW1hVHlwZVtdIGFub25UeXBlcyA9IHNUeXBlLmdldEFub255bW91c1R5cGVzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYW5vblR5cGVzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYW5vblR5cGVzW2ldLmlzU2tpcHBlZEFub255bW91c1R5cGUoKSkKLSAgICAgICAgICAgICAgICBwcmludE5lc3RlZElubmVyVHlwZXMoYW5vblR5cGVzW2ldLCBzeXN0ZW0pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByaW50SW5uZXJUeXBlKGFub25UeXBlc1tpXSwgc3lzdGVtKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgcHJpbnRUb3BDb21tZW50KFNjaGVtYVR5cGUgc1R5cGUpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgZW1pdCgiLyoiKTsKLSAgICAgICAgaWYgKHNUeXBlLmdldE5hbWUoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbWl0KCIgKiBYTUwgVHlwZTogICIgKyBzVHlwZS5nZXROYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpOwotICAgICAgICAgICAgZW1pdCgiICogTmFtZXNwYWNlOiAiICsgc1R5cGUuZ2V0TmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIFFOYW1lIHRoZW5hbWUgPSBudWxsOwotCi0gICAgICAgICAgICBpZiAoc1R5cGUuaXNEb2N1bWVudFR5cGUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aGVuYW1lID0gc1R5cGUuZ2V0RG9jdW1lbnRFbGVtZW50TmFtZSgpOwotICAgICAgICAgICAgICAgIGVtaXQoIiAqIEFuIFhNTCBkb2N1bWVudCB0eXBlLiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoc1R5cGUuaXNBdHRyaWJ1dGVUeXBlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhlbmFtZSA9IHNUeXBlLmdldEF0dHJpYnV0ZVR5cGVBdHRyaWJ1dGVOYW1lKCk7Ci0gICAgICAgICAgICAgICAgZW1pdCgiICogQW4gWE1MIGF0dHJpYnV0ZSB0eXBlLiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGFzc2VydCBmYWxzZTsKLQotICAgICAgICAgICAgYXNzZXJ0KCB0aGVuYW1lICE9IG51bGwgKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZW1pdCgiICogTG9jYWxuYW1lOiAiICsgdGhlbmFtZS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICAgICAgICBlbWl0KCIgKiBOYW1lc3BhY2U6ICIgKyB0aGVuYW1lLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICAgICAgfQotICAgICAgICBlbWl0KCIgKiBKYXZhIHR5cGU6ICIgKyBzVHlwZS5nZXRGdWxsSmF2YU5hbWUoKSk7Ci0gICAgICAgIGVtaXQoIiAqIik7Ci0gICAgICAgIGVtaXQoIiAqIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIC0gZG8gbm90IG1vZGlmeS4iKTsKLSAgICAgICAgZW1pdCgiICovIik7Ci0gICAgfQotCi0gICAgdm9pZCBwcmludFBhY2thZ2UoU2NoZW1hVHlwZSBzVHlwZSwgYm9vbGVhbiBpbnRmKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFN0cmluZyBmcWpuOwotICAgICAgICBpZiAoaW50ZikKLSAgICAgICAgICAgIGZxam4gPSBzVHlwZS5nZXRGdWxsSmF2YU5hbWUoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZnFqbiA9IHNUeXBlLmdldEZ1bGxKYXZhSW1wbE5hbWUoKTsKLQotICAgICAgICBpbnQgbGFzdGRvdCA9IGZxam4ubGFzdEluZGV4T2YoJy4nKTsKLSAgICAgICAgaWYgKGxhc3Rkb3QgPCAwKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBTdHJpbmcgcGtnID0gZnFqbi5zdWJzdHJpbmcoMCwgbGFzdGRvdCk7Ci0gICAgICAgIGVtaXQoInBhY2thZ2UgIiArIHBrZyArICI7Iik7Ci0gICAgfQotCi0gICAgdm9pZCBzdGFydEludGVyZmFjZShTY2hlbWFUeXBlIHNUeXBlKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFN0cmluZyBzaG9ydE5hbWUgPSBzVHlwZS5nZXRTaG9ydEphdmFOYW1lKCk7Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcgYmFzZUludGVyZmFjZSA9IGZpbmRKYXZhVHlwZShzVHlwZS5nZXRCYXNlVHlwZSgpKTsKLQotICAgICAgICAvKgotICAgICAgICBTdHJpbmdCdWZmZXIgc3BlY2lhbGl6ZWRJbnRlcmZhY2VzID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0gICAgICAgIGlmIChzVHlwZS5nZXRTaW1wbGVWYXJpZXR5KCkgPT0gU2NoZW1hVHlwZS5BVE9NSUMgJiYKLSAgICAgICAgICAgIHNUeXBlLmdldFByaW1pdGl2ZVR5cGUoKS5nZXRCdWlsdGluVHlwZUNvZGUoKSA9PSBTY2hlbWFUeXBlLkJUQ19ERUNJTUFMKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgYml0cyA9IHNUeXBlLmdldERlY2ltYWxTaXplKCk7Ci0gICAgICAgICAgICBpZiAoYml0cyA9PSBTY2hlbWFUeXBlLlNJWkVfQklHX0lOVEVHRVIpCi0gICAgICAgICAgICAgICAgc3BlY2lhbGl6ZWRJbnRlcmZhY2VzLmFwcGVuZCgiLCBvcmcuYXBhY2hlLnhtbGJlYW5zLkJpZ0ludGVnZXJWYWx1ZSIpOwotICAgICAgICAgICAgaWYgKGJpdHMgPT0gU2NoZW1hVHlwZS5TSVpFX0xPTkcpCi0gICAgICAgICAgICAgICAgc3BlY2lhbGl6ZWRJbnRlcmZhY2VzLmFwcGVuZCgiLCBvcmcuYXBhY2hlLnhtbGJlYW5zLkxvbmdWYWx1ZSIpOwotICAgICAgICAgICAgaWYgKGJpdHMgPD0gU2NoZW1hVHlwZS5TSVpFX0lOVCkKLSAgICAgICAgICAgICAgICBzcGVjaWFsaXplZEludGVyZmFjZXMuYXBwZW5kKCIsIG9yZy5hcGFjaGUueG1sYmVhbnMuSW50VmFsdWUiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc1R5cGUuZ2V0U2ltcGxlVmFyaWV0eSgpID09IFNjaGVtYVR5cGUuTElTVCkKLSAgICAgICAgICAgIHNwZWNpYWxpemVkSW50ZXJmYWNlcy5hcHBlbmQoIiwgb3JnLmFwYWNoZS54bWxiZWFucy5MaXN0VmFsdWUiKTsKLQotICAgICAgICBpZiAoc1R5cGUuZ2V0U2ltcGxlVmFyaWV0eSgpID09IFNjaGVtYVR5cGUuVU5JT04pCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYVR5cGUgY3R5cGUgPSBzVHlwZS5nZXRVbmlvbkNvbW1vbkJhc2VUeXBlKCk7Ci0gICAgICAgICAgICBTdHJpbmcgamF2YVR5cGVIb2xkZXIgPSBqYXZhVHlwZUhvbGRlckZvclR5cGUoY3R5cGUpOwotICAgICAgICAgICAgaWYgKGphdmFUeXBlSG9sZGVyICE9IG51bGwpCi0gICAgICAgICAgICAgICAgc3BlY2lhbGl6ZWRJbnRlcmZhY2VzLmFwcGVuZCgiLCAiICsgamF2YVR5cGVIb2xkZXIpOwotICAgICAgICB9Ci0gICAgICAgICovCi0KLSAgICAgICAgZW1pdCgicHVibGljIGludGVyZmFjZSAiICsgc2hvcnROYW1lICsgIiBleHRlbmRzICIgKyBiYXNlSW50ZXJmYWNlKTsKLSAgICAgICAgZW1pdCgieyIpOwotICAgICAgICBpbmRlbnQoKTsKLSAgICAgICAgZW1pdFNwZWNpYWxpemVkQWNjZXNzb3JzKHNUeXBlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgZW1pdFNwZWNpYWxpemVkQWNjZXNzb3JzKFNjaGVtYVR5cGUgc1R5cGUpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgaWYgKHNUeXBlLmdldFNpbXBsZVZhcmlldHkoKSA9PSBTY2hlbWFUeXBlLkFUT01JQyAmJgotICAgICAgICAgICAgc1R5cGUuZ2V0UHJpbWl0aXZlVHlwZSgpLmdldEJ1aWx0aW5UeXBlQ29kZSgpID09IFNjaGVtYVR5cGUuQlRDX0RFQ0lNQUwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBiaXRzID0gc1R5cGUuZ2V0RGVjaW1hbFNpemUoKTsKLSAgICAgICAgICAgIGludCBwYXJlbnRCaXRzID0gc1R5cGUuZ2V0QmFzZVR5cGUoKS5nZXREZWNpbWFsU2l6ZSgpOwotICAgICAgICAgICAgaWYgKGJpdHMgIT0gcGFyZW50Qml0cyB8fCBzVHlwZS5nZXRCYXNlVHlwZSgpLmdldEZ1bGxKYXZhTmFtZSgpID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGJpdHMgPT0gU2NoZW1hVHlwZS5TSVpFX0JJR19JTlRFR0VSKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZW1pdCgiamF2YS5tYXRoLkJpZ0ludGVnZXIgZ2V0QmlnSW50ZWdlclZhbHVlKCk7Iik7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXQoInNldEJpZ0ludGVnZXJWYWx1ZShqYXZhLm1hdGguQmlnSW50ZWdlciBiaSk7Iik7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXQoIi8qKiBAZGVwcmVjYXRlZCAqLyIpOwotICAgICAgICAgICAgICAgICAgICBlbWl0KCJqYXZhLm1hdGguQmlnSW50ZWdlciBiaWdJbnRlZ2VyVmFsdWUoKTsiKTsKLSAgICAgICAgICAgICAgICAgICAgZW1pdCgiLyoqIEBkZXByZWNhdGVkICovIik7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXQoInZvaWQgc2V0KGphdmEubWF0aC5CaWdJbnRlZ2VyIGJpKTsiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoYml0cyA9PSBTY2hlbWFUeXBlLlNJWkVfTE9ORykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXQoImxvbmcgZ2V0TG9uZ1ZhbHVlKCk7Iik7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXQoInZvaWQgc2V0TG9uZ1ZhbHVlKGxvbmcgbCk7Iik7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXQoIi8qKiBAZGVwcmVjYXRlZCAqLyIpOwotICAgICAgICAgICAgICAgICAgICBlbWl0KCJsb25nIGxvbmdWYWx1ZSgpOyIpOwotICAgICAgICAgICAgICAgICAgICBlbWl0KCIvKiogQGRlcHJlY2F0ZWQgKi8iKTsKLSAgICAgICAgICAgICAgICAgICAgZW1pdCgidm9pZCBzZXQobG9uZyBsKTsiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoYml0cyA9PSBTY2hlbWFUeXBlLlNJWkVfSU5UKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZW1pdCgiaW50IGdldEludFZhbHVlKCk7Iik7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXQoInZvaWQgc2V0SW50VmFsdWUoaW50IGkpOyIpOwotICAgICAgICAgICAgICAgICAgICBlbWl0KCIvKiogQGRlcHJlY2F0ZWQgKi8iKTsKLSAgICAgICAgICAgICAgICAgICAgZW1pdCgiaW50IGludFZhbHVlKCk7Iik7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXQoIi8qKiBAZGVwcmVjYXRlZCAqLyIpOwotICAgICAgICAgICAgICAgICAgICBlbWl0KCJ2b2lkIHNldChpbnQgaSk7Iik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGJpdHMgPT0gU2NoZW1hVHlwZS5TSVpFX1NIT1JUKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZW1pdCgic2hvcnQgZ2V0U2hvcnRWYWx1ZSgpOyIpOwotICAgICAgICAgICAgICAgICAgICBlbWl0KCJ2b2lkIHNldFNob3J0VmFsdWUoc2hvcnQgcyk7Iik7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXQoIi8qKiBAZGVwcmVjYXRlZCAqLyIpOwotICAgICAgICAgICAgICAgICAgICBlbWl0KCJzaG9ydCBzaG9ydFZhbHVlKCk7Iik7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXQoIi8qKiBAZGVwcmVjYXRlZCAqLyIpOwotICAgICAgICAgICAgICAgICAgICBlbWl0KCJ2b2lkIHNldChzaG9ydCBzKTsiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoYml0cyA9PSBTY2hlbWFUeXBlLlNJWkVfQllURSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXQoImJ5dGUgZ2V0Qnl0ZVZhbHVlKCk7Iik7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXQoInZvaWQgc2V0Qnl0ZVZhbHVlKGJ5dGUgYik7Iik7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXQoIi8qKiBAZGVwcmVjYXRlZCAqLyIpOwotICAgICAgICAgICAgICAgICAgICBlbWl0KCJieXRlIGJ5dGVWYWx1ZSgpOyIpOwotICAgICAgICAgICAgICAgICAgICBlbWl0KCIvKiogQGRlcHJlY2F0ZWQgKi8iKTsKLSAgICAgICAgICAgICAgICAgICAgZW1pdCgidm9pZCBzZXQoYnl0ZSBiKTsiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc1R5cGUuZ2V0U2ltcGxlVmFyaWV0eSgpID09IFNjaGVtYVR5cGUuVU5JT04pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVtaXQoImphdmEubGFuZy5PYmplY3QgZ2V0T2JqZWN0VmFsdWUoKTsiKTsKLSAgICAgICAgICAgIGVtaXQoInZvaWQgc2V0T2JqZWN0VmFsdWUoamF2YS5sYW5nLk9iamVjdCB2YWwpOyIpOwotICAgICAgICAgICAgZW1pdCgiLyoqIEBkZXByZWNhdGVkICovIik7Ci0gICAgICAgICAgICBlbWl0KCJqYXZhLmxhbmcuT2JqZWN0IG9iamVjdFZhbHVlKCk7Iik7Ci0gICAgICAgICAgICBlbWl0KCIvKiogQGRlcHJlY2F0ZWQgKi8iKTsKLSAgICAgICAgICAgIGVtaXQoInZvaWQgb2JqZWN0U2V0KGphdmEubGFuZy5PYmplY3QgdmFsKTsiKTsKLSAgICAgICAgICAgIGVtaXQoIm9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSBpbnN0YW5jZVR5cGUoKTsiKTsKLSAgICAgICAgICAgIFNjaGVtYVR5cGUgY3R5cGUgPSBzVHlwZS5nZXRVbmlvbkNvbW1vbkJhc2VUeXBlKCk7Ci0gICAgICAgICAgICBpZiAoY3R5cGUgIT0gbnVsbCAmJiBjdHlwZS5nZXRTaW1wbGVWYXJpZXR5KCkgIT0gU2NoZW1hVHlwZS5VTklPTik7Ci0gICAgICAgICAgICAgICAgZW1pdFNwZWNpYWxpemVkQWNjZXNzb3JzKGN0eXBlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzVHlwZS5nZXRTaW1wbGVWYXJpZXR5KCkgPT0gU2NoZW1hVHlwZS5MSVNUKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbWl0KCJqYXZhLnV0aWwuTGlzdCBnZXRMaXN0VmFsdWUoKTsiKTsKLSAgICAgICAgICAgIGVtaXQoImphdmEudXRpbC5MaXN0IHhnZXRMaXN0VmFsdWUoKTsiKTsKLSAgICAgICAgICAgIGVtaXQoInZvaWQgc2V0TGlzdFZhbHVlKGphdmEudXRpbC5MaXN0IGxpc3QpOyIpOwotICAgICAgICAgICAgZW1pdCgiLyoqIEBkZXByZWNhdGVkICovIik7Ci0gICAgICAgICAgICBlbWl0KCJqYXZhLnV0aWwuTGlzdCBsaXN0VmFsdWUoKTsiKTsKLSAgICAgICAgICAgIGVtaXQoIi8qKiBAZGVwcmVjYXRlZCAqLyIpOwotICAgICAgICAgICAgZW1pdCgiamF2YS51dGlsLkxpc3QgeGxpc3RWYWx1ZSgpOyIpOwotICAgICAgICAgICAgZW1pdCgiLyoqIEBkZXByZWNhdGVkICovIik7Ci0gICAgICAgICAgICBlbWl0KCJ2b2lkIHNldChqYXZhLnV0aWwuTGlzdCBsaXN0KTsiKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgc3RhcnRCbG9jaygpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgZW1pdCgieyIpOwotICAgICAgICBpbmRlbnQoKTsKLSAgICB9Ci0gICAgdm9pZCBlbmRCbG9jaygpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgb3V0ZGVudCgpOwotICAgICAgICBlbWl0KCJ9Iik7Ci0gICAgfQotCi0gICAgdm9pZCBwcmludEphdmFEb2MoU3RyaW5nIHNlbnRlbmNlKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGVtaXQoIiIpOwotICAgICAgICBlbWl0KCIvKioiKTsKLSAgICAgICAgZW1pdCgiICogIiArIHNlbnRlbmNlKTsKLSAgICAgICAgZW1pdCgiICovIik7Ci0gICAgfQotCi0gICAgdm9pZCBwcmludFNob3J0SmF2YURvYyhTdHJpbmcgc2VudGVuY2UpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgZW1pdCgiLyoqICIgKyBzZW50ZW5jZSArICIgKi8iKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgU2NoZW1hVHlwZSBmaW5kQmFzZUVudW1UeXBlKFNjaGVtYVR5cGUgc1R5cGUpCi0gICAgewotICAgICAgICB3aGlsZSAoc1R5cGUuZ2V0QmFzZVR5cGUoKS5oYXNTdHJpbmdFbnVtVmFsdWVzKCkpCi0gICAgICAgICAgICBzVHlwZSA9IHNUeXBlLmdldEJhc2VUeXBlKCk7Ci0gICAgICAgIHJldHVybiBzVHlwZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBqYXZhU3RyaW5nRXNjYXBlKFN0cmluZyBzdHIpCi0gICAgewotICAgICAgICAvLyBmb3JiaWRkZW46IFxuLCBcciwgXCIsIFxcLgotICAgICAgICB0ZXN0OiB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0ci5sZW5ndGgoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RyLmNoYXJBdChpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1xuJzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnXHInOgotICAgICAgICAgICAgICAgICAgICBjYXNlICdcIic6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1xcJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHRlc3Q7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHN0cjsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyLmxlbmd0aCgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIgY2ggPSBzdHIuY2hhckF0KGkpOwotICAgICAgICAgICAgc3dpdGNoIChjaCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoY2gpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlICdcbic6Ci0gICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgiXFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgJ1xyJzoKLSAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCJcXHIiKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnXCInOgotICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIlxcXCIiKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnXFwnOgotICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIlxcXFwiKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgdm9pZCBwcmludFN0cmluZ0VudW1lcmF0aW9uKFNjaGVtYVR5cGUgc1R5cGUpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgU2NoZW1hVHlwZSBiYXNlRW51bVR5cGUgPSBmaW5kQmFzZUVudW1UeXBlKHNUeXBlKTsKLSAgICAgICAgU3RyaW5nIGJhc2VFbnVtQ2xhc3MgPSBiYXNlRW51bVR5cGUuZ2V0RnVsbEphdmFOYW1lKCk7Ci0KLSAgICAgICAgaWYgKGJhc2VFbnVtVHlwZSA9PSBzVHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgZW1pdCgiIik7Ci0gICAgICAgICAgICBlbWl0KCJvcmcuYXBhY2hlLnhtbGJlYW5zLlN0cmluZ0VudW1BYnN0cmFjdEJhc2UgZW51bVZhbHVlKCk7Iik7Ci0gICAgICAgICAgICBlbWl0KCJ2b2lkIHNldChvcmcuYXBhY2hlLnhtbGJlYW5zLlN0cmluZ0VudW1BYnN0cmFjdEJhc2UgZSk7Iik7Ci0gICAgICAgIH0KLQotICAgICAgICBlbWl0KCIiKTsKLSAgICAgICAgU2NoZW1hU3RyaW5nRW51bUVudHJ5W10gZW50cmllcyA9IHNUeXBlLmdldFN0cmluZ0VudW1FbnRyaWVzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIGVudW1WYWx1ZSA9IGVudHJpZXNbaV0uZ2V0U3RyaW5nKCk7Ci0gICAgICAgICAgICBTdHJpbmcgY29uc3ROYW1lID0gZW50cmllc1tpXS5nZXRFbnVtTmFtZSgpOwotICAgICAgICAgICAgaWYgKGJhc2VFbnVtVHlwZSAhPSBzVHlwZSkKLSAgICAgICAgICAgICAgICBlbWl0KCJzdGF0aWMgZmluYWwgIiArIGJhc2VFbnVtQ2xhc3MgKyAiLkVudW0gIiArIGNvbnN0TmFtZSArICIgPSAiICsgYmFzZUVudW1DbGFzcyArICIuIiArIGNvbnN0TmFtZSArICI7Iik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdCgic3RhdGljIGZpbmFsIEVudW0gIiArIGNvbnN0TmFtZSArICIgPSBFbnVtLmZvclN0cmluZyhcIiIgKyBqYXZhU3RyaW5nRXNjYXBlKGVudW1WYWx1ZSkgKyAiXCIpOyIpOwotICAgICAgICB9Ci0gICAgICAgIGVtaXQoIiIpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBjb25zdE5hbWUgPSAiSU5UXyIgKyBlbnRyaWVzW2ldLmdldEVudW1OYW1lKCk7Ci0gICAgICAgICAgICBpZiAoYmFzZUVudW1UeXBlICE9IHNUeXBlKQotICAgICAgICAgICAgICAgIGVtaXQoInN0YXRpYyBmaW5hbCBpbnQgIiArIGNvbnN0TmFtZSArICIgPSAiICsgYmFzZUVudW1DbGFzcyArICIuIiArIGNvbnN0TmFtZSArICI7Iik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdCgic3RhdGljIGZpbmFsIGludCAiICsgY29uc3ROYW1lICsgIiA9IEVudW0uIiArIGNvbnN0TmFtZSArICI7Iik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGJhc2VFbnVtVHlwZSA9PSBzVHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgZW1pdCgiIik7Ci0gICAgICAgICAgICBlbWl0KCIvKioiKTsKLSAgICAgICAgICAgIGVtaXQoIiAqIEVudW1lcmF0aW9uIHZhbHVlIGNsYXNzIGZvciAiICsgYmFzZUVudW1DbGFzcyArICIuIik7Ci0gICAgICAgICAgICBlbWl0KCIgKiBUaGVzZSBlbnVtIHZhbHVlcyBjYW4gYmUgdXNlZCBhcyBmb2xsb3dzOiIpOwotICAgICAgICAgICAgZW1pdCgiICogPHByZT4iKTsKLSAgICAgICAgICAgIGVtaXQoIiAqIGVudW0udG9TdHJpbmcoKTsgLy8gcmV0dXJucyB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZSBlbnVtIik7Ci0gICAgICAgICAgICBlbWl0KCIgKiBlbnVtLmludFZhbHVlKCk7IC8vIHJldHVybnMgYW4gaW50IHZhbHVlLCB1c2VmdWwgZm9yIHN3aXRjaGVzIik7Ci0gICAgICAgICAgICBpZiAoZW50cmllcy5sZW5ndGggPiAwKQotICAgICAgICAgICAgZW1pdCgiICogLy8gZS5nLiwgY2FzZSBFbnVtLklOVF8iICsgZW50cmllc1swXS5nZXRFbnVtTmFtZSgpKTsKLSAgICAgICAgICAgIGVtaXQoIiAqIEVudW0uZm9yU3RyaW5nKHMpOyAvLyByZXR1cm5zIHRoZSBlbnVtIHZhbHVlIGZvciBhIHN0cmluZyIpOwotICAgICAgICAgICAgZW1pdCgiICogRW51bS5mb3JJbnQoaSk7IC8vIHJldHVybnMgdGhlIGVudW0gdmFsdWUgZm9yIGFuIGludCIpOwotICAgICAgICAgICAgZW1pdCgiICogPC9wcmU+Iik7Ci0gICAgICAgICAgICBlbWl0KCIgKiBFbnVtZXJhdGlvbiBvYmplY3RzIGFyZSBpbW11dGFibGUgc2luZ2xldG9uIG9iamVjdHMgdGhhdCIpOwotICAgICAgICAgICAgZW1pdCgiICogY2FuIGJlIGNvbXBhcmVkIHVzaW5nID09IG9iamVjdCBlcXVhbGl0eS4gVGhleSBoYXZlIG5vIik7Ci0gICAgICAgICAgICBlbWl0KCIgKiBwdWJsaWMgY29uc3RydWN0b3IuIFNlZSB0aGUgY29uc3RhbnRzIGRlZmluZWQgd2l0aGluIHRoaXMiKTsKLSAgICAgICAgICAgIGVtaXQoIiAqIGNsYXNzIGZvciBhbGwgdGhlIHZhbGlkIHZhbHVlcy4iKTsKLSAgICAgICAgICAgIGVtaXQoIiAqLyIpOwotICAgICAgICAgICAgZW1pdCgic3RhdGljIGZpbmFsIGNsYXNzIEVudW0gZXh0ZW5kcyBvcmcuYXBhY2hlLnhtbGJlYW5zLlN0cmluZ0VudW1BYnN0cmFjdEJhc2UiKTsKLSAgICAgICAgICAgIGVtaXQoInsiKTsKLSAgICAgICAgICAgIGluZGVudCgpOwotICAgICAgICAgICAgZW1pdCgiLyoqIik7Ci0gICAgICAgICAgICBlbWl0KCIgKiBSZXR1cm5zIHRoZSBlbnVtIHZhbHVlIGZvciBhIHN0cmluZywgb3IgbnVsbCBpZiBub25lLiIpOwotICAgICAgICAgICAgZW1pdCgiICovIik7Ci0gICAgICAgICAgICBlbWl0KCJwdWJsaWMgc3RhdGljIEVudW0gZm9yU3RyaW5nKGphdmEubGFuZy5TdHJpbmcgcykiKTsKLSAgICAgICAgICAgIGVtaXQoIiAgICB7IHJldHVybiAoRW51bSl0YWJsZS5mb3JTdHJpbmcocyk7IH0iKTsKLSAgICAgICAgICAgIGVtaXQoIi8qKiIpOwotICAgICAgICAgICAgZW1pdCgiICogUmV0dXJucyB0aGUgZW51bSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGFuIGludCwgb3IgbnVsbCBpZiBub25lLiIpOwotICAgICAgICAgICAgZW1pdCgiICovIik7Ci0gICAgICAgICAgICBlbWl0KCJwdWJsaWMgc3RhdGljIEVudW0gZm9ySW50KGludCBpKSIpOwotICAgICAgICAgICAgZW1pdCgiICAgIHsgcmV0dXJuIChFbnVtKXRhYmxlLmZvckludChpKTsgfSIpOwotICAgICAgICAgICAgZW1pdCgiIik7Ci0gICAgICAgICAgICBlbWl0KCJwcml2YXRlIEVudW0oamF2YS5sYW5nLlN0cmluZyBzLCBpbnQgaSkiKTsKLSAgICAgICAgICAgIGVtaXQoIiAgICB7IHN1cGVyKHMsIGkpOyB9Iik7Ci0gICAgICAgICAgICBlbWl0KCIiKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgY29uc3ROYW1lID0gIklOVF8iICsgZW50cmllc1tpXS5nZXRFbnVtTmFtZSgpOwotICAgICAgICAgICAgICAgIGludCBpbnRWYWx1ZSA9IGVudHJpZXNbaV0uZ2V0SW50VmFsdWUoKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJzdGF0aWMgZmluYWwgaW50ICIgKyBjb25zdE5hbWUgKyAiID0gIiArIGludFZhbHVlICsgIjsiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVtaXQoIiIpOwotICAgICAgICAgICAgZW1pdCgicHVibGljIHN0YXRpYyBmaW5hbCBvcmcuYXBhY2hlLnhtbGJlYW5zLlN0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGUgdGFibGUgPSIpOwotICAgICAgICAgICAgZW1pdCgiICAgIG5ldyBvcmcuYXBhY2hlLnhtbGJlYW5zLlN0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGUiKTsKLSAgICAgICAgICAgIGVtaXQoIigiKTsKLSAgICAgICAgICAgIGluZGVudCgpOwotICAgICAgICAgICAgZW1pdCgibmV3IEVudW1bXSIpOwotICAgICAgICAgICAgZW1pdCgieyIpOwotICAgICAgICAgICAgaW5kZW50KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGVudW1WYWx1ZSA9IGVudHJpZXNbaV0uZ2V0U3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGNvbnN0TmFtZSA9ICJJTlRfIiArIGVudHJpZXNbaV0uZ2V0RW51bU5hbWUoKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJuZXcgRW51bShcIiIgKyBqYXZhU3RyaW5nRXNjYXBlKGVudW1WYWx1ZSkgKyAiXCIsICIgKyBjb25zdE5hbWUgKyAiKSwiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG91dGRlbnQoKTsKLSAgICAgICAgICAgIGVtaXQoIn0iKTsKLSAgICAgICAgICAgIG91dGRlbnQoKTsKLSAgICAgICAgICAgIGVtaXQoIik7Iik7Ci0gICAgICAgICAgICBlbWl0KCJwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsiKTsKLSAgICAgICAgICAgIGVtaXQoInByaXZhdGUgT2JqZWN0IHJlYWRSZXNvbHZlKCkgeyByZXR1cm4gZm9ySW50KGludFZhbHVlKCkpOyB9ICIpOwotICAgICAgICAgICAgb3V0ZGVudCgpOwotICAgICAgICAgICAgZW1pdCgifSIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgU3RyaW5nIHhtbFR5cGVGb3JQcm9wZXJ0eShTY2hlbWFQcm9wZXJ0eSBzUHJvcCkKLSAgICB7Ci0gICAgICAgIFNjaGVtYVR5cGUgc1R5cGUgPSBzUHJvcC5qYXZhQmFzZWRPblR5cGUoKTsKLSAgICAgICAgcmV0dXJuIGZpbmRKYXZhVHlwZShzVHlwZSkucmVwbGFjZSgnJCcsICcuJyk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2xlYW4geG1sVHlwZUZvclByb3BlcnR5SXNVbmlvbihTY2hlbWFQcm9wZXJ0eSBzUHJvcCkKLSAgICB7Ci0gICAgICAgIFNjaGVtYVR5cGUgc1R5cGUgPSBzUHJvcC5qYXZhQmFzZWRPblR5cGUoKTsKLSAgICAgICAgcmV0dXJuIChzVHlwZS5pc1NpbXBsZVR5cGUoKSAmJiBzVHlwZS5nZXRTaW1wbGVWYXJpZXR5KCkgPT0gU2NoZW1hVHlwZS5VTklPTik7Ci0gICAgfQotCi0gICAgU3RyaW5nIGphdmFUeXBlRm9yUHJvcGVydHkoU2NoZW1hUHJvcGVydHkgc1Byb3ApCi0gICAgewotICAgICAgICAvLyBUaGUgdHlwZSB0byB1c2UgaXMgdGhlIFhNTCBvYmplY3QuLi4uCi0gICAgICAgIGlmIChzUHJvcC5nZXRKYXZhVHlwZUNvZGUoKSA9PSBTY2hlbWFQcm9wZXJ0eS5YTUxfT0JKRUNUKQotICAgICAgICB7Ci0gICAgICAgICAgICBTY2hlbWFUeXBlIHNUeXBlID0gc1Byb3AuamF2YUJhc2VkT25UeXBlKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmluZEphdmFUeXBlKHNUeXBlKS5yZXBsYWNlKCckJywgJy4nKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoc1Byb3AuZ2V0SmF2YVR5cGVDb2RlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9CT09MRUFOOgotICAgICAgICAgICAgICAgIHJldHVybiAiYm9vbGVhbiI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfRkxPQVQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdCI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfRE9VQkxFOgotICAgICAgICAgICAgICAgIHJldHVybiAiZG91YmxlIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9CWVRFOgotICAgICAgICAgICAgICAgIHJldHVybiAiYnl0ZSI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfU0hPUlQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJzaG9ydCI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfSU5UOgotICAgICAgICAgICAgICAgIHJldHVybiAiaW50IjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9MT05HOgotICAgICAgICAgICAgICAgIHJldHVybiAibG9uZyI7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9CSUdfREVDSU1BTDoKLSAgICAgICAgICAgICAgICByZXR1cm4gImphdmEubWF0aC5CaWdEZWNpbWFsIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9CSUdfSU5URUdFUjoKLSAgICAgICAgICAgICAgICByZXR1cm4gImphdmEubWF0aC5CaWdJbnRlZ2VyIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9TVFJJTkc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJqYXZhLmxhbmcuU3RyaW5nIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9CWVRFX0FSUkFZOgotICAgICAgICAgICAgICAgIHJldHVybiAiYnl0ZVtdIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9HREFURToKLSAgICAgICAgICAgICAgICByZXR1cm4gIm9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUiOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0dEVVJBVElPTjoKLSAgICAgICAgICAgICAgICByZXR1cm4gIm9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9EQVRFOgotICAgICAgICAgICAgICAgIHJldHVybiAiamF2YS51dGlsLkRhdGUiOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX1FOQU1FOgotICAgICAgICAgICAgICAgIHJldHVybiAiamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfTElTVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gImphdmEudXRpbC5MaXN0IjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9DQUxFTkRBUjoKLSAgICAgICAgICAgICAgICByZXR1cm4gImphdmEudXRpbC5DYWxlbmRhciI7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9FTlVNOgotICAgICAgICAgICAgICAgIFNjaGVtYVR5cGUgc1R5cGUgPSBzUHJvcC5qYXZhQmFzZWRPblR5cGUoKS5nZXRCYXNlRW51bVR5cGUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmluZEphdmFUeXBlKHNUeXBlKS5yZXBsYWNlKCckJywgJy4nKSArICIuRW51bSI7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9PQkpFQ1Q6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJqYXZhLmxhbmcuT2JqZWN0IjsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOwotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgcHJpbnRQcm9wZXJ0eUdldHRlcnMoUU5hbWUgcU5hbWUsIGJvb2xlYW4gaXNBdHRyLAotICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJvcGVydHlOYW1lLCBpbnQgamF2YVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB0eXBlLCBTdHJpbmcgeHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gbmlsbGFibGUsIGJvb2xlYW4gb3B0aW9uYWwsCi0gICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gc2V2ZXJhbCwgYm9vbGVhbiBzaW5nbGV0b24pCi0gICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBTdHJpbmcgcHJvcGRlc2MgPSAiXCIiICsgcU5hbWUuZ2V0TG9jYWxQYXJ0KCkgKyAiXCIiICsgKGlzQXR0ciA/ICIgYXR0cmlidXRlIiA6ICIgZWxlbWVudCIpOwotICAgICAgICBib29sZWFuIHhtbHR5cGUgPSAoamF2YVR5cGUgPT0gU2NoZW1hUHJvcGVydHkuWE1MX09CSkVDVCk7Ci0KLSAgICAgICAgaWYgKHNpbmdsZXRvbikKLSAgICAgICAgewotICAgICAgICAgICAgcHJpbnRKYXZhRG9jKChzZXZlcmFsID8gIkdldHMgZmlyc3QgIiA6ICJHZXRzIHRoZSAiKSArIHByb3BkZXNjKTsKLSAgICAgICAgICAgIGVtaXQodHlwZSArICIgZ2V0IiArIHByb3BlcnR5TmFtZSArICIoKTsiKTsKLQotICAgICAgICAgICAgaWYgKCF4bWx0eXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByaW50SmF2YURvYygoc2V2ZXJhbCA/ICJHZXRzIChhcyB4bWwpIGZpcnN0ICIgOiAiR2V0cyAoYXMgeG1sKSB0aGUgIikgKyBwcm9wZGVzYyk7Ci0gICAgICAgICAgICAgICAgZW1pdCh4dHlwZSArICIgeGdldCIgKyBwcm9wZXJ0eU5hbWUgKyAiKCk7Iik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChuaWxsYWJsZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcmludEphdmFEb2MoKHNldmVyYWwgPyAiVGVzdHMgZm9yIG5pbCBmaXJzdCAiIDogIlRlc3RzIGZvciBuaWwgIikgKyBwcm9wZGVzYyk7Ci0gICAgICAgICAgICAgICAgZW1pdCgiYm9vbGVhbiBpc05pbCIgKyBwcm9wZXJ0eU5hbWUgKyAiKCk7Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAob3B0aW9uYWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByaW50SmF2YURvYygoc2V2ZXJhbCA/ICJUcnVlIGlmIGhhcyBhdCBsZWFzdCBvbmUgIiA6ICJUcnVlIGlmIGhhcyAiKSArIHByb3BkZXNjKTsKLSAgICAgICAgICAgIGVtaXQoImJvb2xlYW4gaXNTZXQiICsgcHJvcGVydHlOYW1lICsgIigpOyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNldmVyYWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBhcnJheU5hbWUgPSBwcm9wZXJ0eU5hbWUgKyAiQXJyYXkiOwotCi0gICAgICAgICAgICBwcmludEphdmFEb2MoIkdldHMgYXJyYXkgb2YgYWxsICIgKyBwcm9wZGVzYyArICJzIik7Ci0gICAgICAgICAgICBlbWl0KHR5cGUgKyAiW10gZ2V0IiArIGFycmF5TmFtZSArICIoKTsiKTsKLQotICAgICAgICAgICAgcHJpbnRKYXZhRG9jKCJHZXRzIGl0aCAiICsgcHJvcGRlc2MpOwotICAgICAgICAgICAgZW1pdCh0eXBlICsgIiBnZXQiICsgYXJyYXlOYW1lICsgIihpbnQgaSk7Iik7Ci0KLSAgICAgICAgICAgIGlmICgheG1sdHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcmludEphdmFEb2MoIkdldHMgKGFzIHhtbCkgYXJyYXkgb2YgYWxsICIgKyBwcm9wZGVzYyArICJzIik7Ci0gICAgICAgICAgICAgICAgZW1pdCh4dHlwZSArICJbXSB4Z2V0IiArIGFycmF5TmFtZSArICIoKTsiKTsKLQotICAgICAgICAgICAgICAgIHByaW50SmF2YURvYygiR2V0cyAoYXMgeG1sKSBpdGggIiArIHByb3BkZXNjKTsKLSAgICAgICAgICAgICAgICBlbWl0KHh0eXBlICsgIiB4Z2V0IiArIGFycmF5TmFtZSArICIoaW50IGkpOyIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobmlsbGFibGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRKYXZhRG9jKCJUZXN0cyBmb3IgbmlsIGl0aCAiICsgcHJvcGRlc2MpOwotICAgICAgICAgICAgICAgIGVtaXQoImJvb2xlYW4gaXNOaWwiICsgYXJyYXlOYW1lICsgIihpbnQgaSk7Iik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHByaW50SmF2YURvYygiUmV0dXJucyBudW1iZXIgb2YgIiArIHByb3BkZXNjKTsKLSAgICAgICAgICAgIGVtaXQoImludCBzaXplT2YiICsgYXJyYXlOYW1lICsgIigpOyIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBwcmludFByb3BlcnR5U2V0dGVycyhRTmFtZSBxTmFtZSwgYm9vbGVhbiBpc0F0dHIsCi0gICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwcm9wZXJ0eU5hbWUsIGludCBqYXZhVHlwZSwgU3RyaW5nIHR5cGUsIFN0cmluZyB4dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBuaWxsYWJsZSwgYm9vbGVhbiBvcHRpb25hbCwKLSAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBzZXZlcmFsLCBib29sZWFuIHNpbmdsZXRvbikKLSAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFN0cmluZyBzYWZlVmFyTmFtZSA9IE5hbWVVdGlsLm5vbkphdmFLZXl3b3JkKE5hbWVVdGlsLmxvd2VyQ2FtZWxDYXNlKHByb3BlcnR5TmFtZSkpOwotICAgICAgICBpZiAoc2FmZVZhck5hbWUuZXF1YWxzKCJpIikpCi0gICAgICAgICAgICBzYWZlVmFyTmFtZSA9ICJpVmFsdWUiOwotICAgICAgICBib29sZWFuIHhtbHR5cGUgPSAoamF2YVR5cGUgPT0gU2NoZW1hUHJvcGVydHkuWE1MX09CSkVDVCk7Ci0KLSAgICAgICAgU3RyaW5nIHByb3BkZXNjID0gIlwiIiArIHFOYW1lLmdldExvY2FsUGFydCgpICsgIlwiIiArIChpc0F0dHIgPyAiIGF0dHJpYnV0ZSIgOiAiIGVsZW1lbnQiKTsKLQotICAgICAgICBpZiAoc2luZ2xldG9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBwcmludEphdmFEb2MoKHNldmVyYWwgPyAiU2V0cyBmaXJzdCAiIDogIlNldHMgdGhlICIpICsgcHJvcGRlc2MpOwotICAgICAgICAgICAgZW1pdCgidm9pZCBzZXQiICsgcHJvcGVydHlOYW1lICsgIigiICsgdHlwZSArICIgIiArIHNhZmVWYXJOYW1lICsgIik7Iik7Ci0KLSAgICAgICAgICAgIGlmICgheG1sdHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcmludEphdmFEb2MoKHNldmVyYWwgPyAiU2V0cyAoYXMgeG1sKSBmaXJzdCAiIDogIlNldHMgKGFzIHhtbCkgdGhlICIpICsgcHJvcGRlc2MpOwotICAgICAgICAgICAgICAgIGVtaXQoInZvaWQgeHNldCIgKyBwcm9wZXJ0eU5hbWUgKyAiKCIgKyB4dHlwZSArICIgIiArIHNhZmVWYXJOYW1lICsgIik7Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh4bWx0eXBlICYmICFzZXZlcmFsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByaW50SmF2YURvYygiQXBwZW5kcyBhbmQgcmV0dXJucyBhIG5ldyBlbXB0eSAiICsgcHJvcGRlc2MpOwotICAgICAgICAgICAgICAgIGVtaXQoeHR5cGUgKyAiIGFkZE5ldyIgKyBwcm9wZXJ0eU5hbWUgKyAiKCk7Iik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChuaWxsYWJsZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcmludEphdmFEb2MoKHNldmVyYWwgPyAiTmlscyB0aGUgZmlyc3QgIiA6ICJOaWxzIHRoZSAiKSArIHByb3BkZXNjKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJ2b2lkIHNldE5pbCIgKyBwcm9wZXJ0eU5hbWUgKyAiKCk7Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAob3B0aW9uYWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByaW50SmF2YURvYygoc2V2ZXJhbCA/ICJSZW1vdmVzIGZpcnN0ICIgOiAiVW5zZXRzIHRoZSAiKSArIHByb3BkZXNjKTsKLSAgICAgICAgICAgIGVtaXQoInZvaWQgdW5zZXQiICsgcHJvcGVydHlOYW1lICsgIigpOyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNldmVyYWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBhcnJheU5hbWUgPSBwcm9wZXJ0eU5hbWUgKyAiQXJyYXkiOwotCi0gICAgICAgICAgICBwcmludEphdmFEb2MoIlNldHMgYXJyYXkgb2YgYWxsICIgKyBwcm9wZGVzYyk7Ci0gICAgICAgICAgICBlbWl0KCJ2b2lkIHNldCIgKyBhcnJheU5hbWUgKyAiKCIgKyB0eXBlICsgIltdICIgKyBzYWZlVmFyTmFtZSArICJBcnJheSk7Iik7Ci0KLSAgICAgICAgICAgIHByaW50SmF2YURvYygiU2V0cyBpdGggIiArIHByb3BkZXNjKTsKLSAgICAgICAgICAgIGVtaXQoInZvaWQgc2V0IiArIGFycmF5TmFtZSArICIoaW50IGksICIgKyB0eXBlICsgIiAiICsgc2FmZVZhck5hbWUgKyAiKTsiKTsKLQotICAgICAgICAgICAgaWYgKCF4bWx0eXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByaW50SmF2YURvYygiU2V0cyAoYXMgeG1sKSBhcnJheSBvZiBhbGwgIiArIHByb3BkZXNjKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJ2b2lkIHhzZXQiICsgYXJyYXlOYW1lICsgIigiICsgeHR5cGUgKyAiW10iICsgc2FmZVZhck5hbWUgKyAiQXJyYXkpOyIpOwotCi0gICAgICAgICAgICAgICAgcHJpbnRKYXZhRG9jKCJTZXRzIChhcyB4bWwpIGl0aCAiICsgcHJvcGRlc2MpOwotICAgICAgICAgICAgICAgIGVtaXQoInZvaWQgeHNldCIgKyBhcnJheU5hbWUgKyAiKGludCBpLCAiICsgeHR5cGUgKyAiICIgKyBzYWZlVmFyTmFtZSArICIpOyIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobmlsbGFibGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRKYXZhRG9jKCJOaWxzIHRoZSBpdGggIiArIHByb3BkZXNjKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJ2b2lkIHNldE5pbCIgKyBhcnJheU5hbWUgKyAiKGludCBpKTsiKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCF4bWx0eXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByaW50SmF2YURvYygiSW5zZXJ0cyB0aGUgdmFsdWUgYXMgdGhlIGl0aCAiICsgcHJvcGRlc2MpOwotICAgICAgICAgICAgICAgIGVtaXQoInZvaWQgaW5zZXJ0IiArIHByb3BlcnR5TmFtZSArICIoaW50IGksICIgKyB0eXBlICsgIiAiICsgc2FmZVZhck5hbWUgKyAiKTsiKTsKLQotICAgICAgICAgICAgICAgIHByaW50SmF2YURvYygiQXBwZW5kcyB0aGUgdmFsdWUgYXMgdGhlIGxhc3QgIiArIHByb3BkZXNjKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJ2b2lkIGFkZCIgKyBwcm9wZXJ0eU5hbWUgKyAiKCIgKyB0eXBlICsgIiAiICsgc2FmZVZhck5hbWUgKyAiKTsiKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHhtbHR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRKYXZhRG9jKCJJbnNlcnRzIGFuZCByZXR1cm5zIGEgbmV3IGVtcHR5IHZhbHVlIChhcyB4bWwpIGFzIHRoZSBpdGggIiArIHByb3BkZXNjKTsKLSAgICAgICAgICAgICAgICBlbWl0KHh0eXBlICsgIiBpbnNlcnROZXciICsgcHJvcGVydHlOYW1lICsgIihpbnQgaSk7Iik7Ci0gICAgCi0gICAgICAgICAgICAgICAgcHJpbnRKYXZhRG9jKCJBcHBlbmRzIGFuZCByZXR1cm5zIGEgbmV3IGVtcHR5IHZhbHVlIChhcyB4bWwpIGFzIHRoZSBsYXN0ICIgKyBwcm9wZGVzYyk7Ci0gICAgICAgICAgICAgICAgZW1pdCh4dHlwZSArICIgYWRkTmV3IiArIHByb3BlcnR5TmFtZSArICIoKTsiKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJpbnRKYXZhRG9jKCJSZW1vdmVzIHRoZSBpdGggIiArIHByb3BkZXNjKTsKLSAgICAgICAgICAgIGVtaXQoInZvaWQgcmVtb3ZlIiArIHByb3BlcnR5TmFtZSArICIoaW50IGkpOyIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgU3RyaW5nIGdldEF0b21pY1Jlc3RyaWN0aW9uVHlwZShTY2hlbWFUeXBlIHNUeXBlKSB7Ci0gICAgICAgIFNjaGVtYVR5cGUgcFR5cGUgPSBzVHlwZS5nZXRQcmltaXRpdmVUeXBlKCk7Ci0gICAgICAgIHN3aXRjaCAocFR5cGUuZ2V0QnVpbHRpblR5cGVDb2RlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfQU5ZX1NJTVBMRToKLSAgICAgICAgICAgICAgICByZXR1cm4gIm9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuWG1sQW55U2ltcGxlVHlwZUltcGwiOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19CT09MRUFOOgotICAgICAgICAgICAgICAgIHJldHVybiAib3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5KYXZhQm9vbGVhbkhvbGRlckV4IjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfQkFTRV82NF9CSU5BUlk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFCYXNlNjRIb2xkZXJFeCI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0hFWF9CSU5BUlk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFIZXhCaW5hcnlIb2xkZXJFeCI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0FOWV9VUkk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFVcmlIb2xkZXJFeCI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1FOQU1FOgotICAgICAgICAgICAgICAgIHJldHVybiAib3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5KYXZhUU5hbWVIb2xkZXJFeCI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX05PVEFUSU9OOgotICAgICAgICAgICAgICAgIHJldHVybiAib3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5KYXZhTm90YXRpb25Ib2xkZXJFeCI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0ZMT0FUOgotICAgICAgICAgICAgICAgIHJldHVybiAib3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5KYXZhRmxvYXRIb2xkZXJFeCI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RPVUJMRToKLSAgICAgICAgICAgICAgICByZXR1cm4gIm9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuSmF2YURvdWJsZUhvbGRlckV4IjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfREVDSU1BTDoKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHNUeXBlLmdldERlY2ltYWxTaXplKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLlNJWkVfQklHX0RFQ0lNQUw6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIm9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuSmF2YURlY2ltYWxIb2xkZXJFeCI7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5TSVpFX0JJR19JTlRFR0VSOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFJbnRlZ2VySG9sZGVyRXgiOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuU0laRV9MT05HOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFMb25nSG9sZGVyRXgiOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuU0laRV9JTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5TSVpFX1NIT1JUOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuU0laRV9CWVRFOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFJbnRIb2xkZXJFeCI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19TVFJJTkc6Ci0gICAgICAgICAgICAgICAgaWYgKHNUeXBlLmhhc1N0cmluZ0VudW1WYWx1ZXMoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFTdHJpbmdFbnVtZXJhdGlvbkhvbGRlckV4IjsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAib3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5KYXZhU3RyaW5nSG9sZGVyRXgiOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RBVEVfVElNRToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfVElNRToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfREFURToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19ZRUFSX01PTlRIOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX1lFQVI6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfTU9OVEhfREFZOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX0RBWToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19NT05USDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIm9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuSmF2YUdEYXRlSG9sZGVyRXgiOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RVUkFUSU9OOgotICAgICAgICAgICAgICAgIHJldHVybiAib3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5KYXZhR0R1cmF0aW9uSG9sZGVyRXgiOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UpIDogInVucmVjb2duaXplZCBwcmltaXRpdmUgdHlwZSI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgU2NoZW1hVHlwZSBmaW5kQmFzZVR5cGUoU2NoZW1hVHlwZSBzVHlwZSkKLSAgICB7Ci0gICAgICAgIHdoaWxlIChzVHlwZS5nZXRGdWxsSmF2YU5hbWUoKSA9PSBudWxsKQotICAgICAgICAgICAgc1R5cGUgPSBzVHlwZS5nZXRCYXNlVHlwZSgpOwotICAgICAgICByZXR1cm4gc1R5cGU7Ci0gICAgfQotCi0gICAgU3RyaW5nIGdldEJhc2VDbGFzcyhTY2hlbWFUeXBlIHNUeXBlKSB7Ci0gICAgICAgIFNjaGVtYVR5cGUgYmFzZVR5cGUgPSBmaW5kQmFzZVR5cGUoc1R5cGUuZ2V0QmFzZVR5cGUoKSk7Ci0KLSAgICAgICAgc3dpdGNoIChzVHlwZS5nZXRTaW1wbGVWYXJpZXR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5OT1RfU0lNUExFOgotICAgICAgICAgICAgICAgIC8vIG5vbi1zaW1wbGUtY29udGVudDogaW5oZXJpdCBmcm9tIGJhc2UgdHlwZSBpbXBsCi0gICAgICAgICAgICAgICAgaWYgKCFYbWxPYmplY3QudHlwZS5lcXVhbHMoYmFzZVR5cGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZVR5cGUuZ2V0RnVsbEphdmFJbXBsTmFtZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiAib3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5YbWxDb21wbGV4Q29udGVudEltcGwiOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQVRPTUlDOgotICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBvbmx5IGdldCBjYWxsZWQgZm9yIHJlc3RyaWN0aW9ucwotICAgICAgICAgICAgICAgIGFzc2VydCghIHNUeXBlLmlzQnVpbHRpblR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdldEF0b21pY1Jlc3RyaWN0aW9uVHlwZShzVHlwZSk7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5MSVNUOgotICAgICAgICAgICAgICAgIHJldHVybiAib3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5YbWxMaXN0SW1wbCI7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5VTklPTjoKLSAgICAgICAgICAgICAgICByZXR1cm4gIm9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuWG1sVW5pb25JbXBsIjsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIHByaW50Q29uc3RydWN0b3IoU2NoZW1hVHlwZSBzVHlwZSwgU3RyaW5nIHNob3J0TmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgZW1pdCgiIik7Ci0gICAgICAgIGVtaXQoInB1YmxpYyAiICsgc2hvcnROYW1lICsgIihvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUgc1R5cGUpIik7Ci0gICAgICAgIHN0YXJ0QmxvY2soKTsKLSAgICAgICAgZW1pdCgic3VwZXIoc1R5cGUiICsgKHNUeXBlLmdldFNpbXBsZVZhcmlldHkoKSA9PSBTY2hlbWFUeXBlLk5PVF9TSU1QTEUgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwgIiArICFzVHlwZS5pc1NpbXBsZVR5cGUoKSkgKwotICAgICAgICAgICAgICIpOyIpOwotICAgICAgICBlbmRCbG9jaygpOwotCi0gICAgICAgIGlmIChzVHlwZS5nZXRTaW1wbGVWYXJpZXR5KCkgIT0gU2NoZW1hVHlwZS5OT1RfU0lNUExFKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbWl0KCIiKTsKLSAgICAgICAgICAgIGVtaXQoInByb3RlY3RlZCAiICsgc2hvcnROYW1lICsgIihvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUgc1R5cGUsIGJvb2xlYW4gYikiKTsKLSAgICAgICAgICAgIHN0YXJ0QmxvY2soKTsKLSAgICAgICAgICAgIGVtaXQoInN1cGVyKHNUeXBlLCBiKTsiKTsKLSAgICAgICAgICAgIGVuZEJsb2NrKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIHN0YXJ0Q2xhc3MoU2NoZW1hVHlwZSBzVHlwZSwgYm9vbGVhbiBpc0lubmVyKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFN0cmluZyBzaG9ydE5hbWUgPSBzVHlwZS5nZXRTaG9ydEphdmFJbXBsTmFtZSgpOwotICAgICAgICBTdHJpbmcgYmFzZUNsYXNzID0gZ2V0QmFzZUNsYXNzKHNUeXBlKTsKLSAgICAgICAgU3RyaW5nQnVmZmVyIGludGVyZmFjZXMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIGludGVyZmFjZXMuYXBwZW5kKHNUeXBlLmdldEZ1bGxKYXZhTmFtZSgpLnJlcGxhY2UoJyQnLCAnLicpKTsKLQotICAgICAgICBpZiAoc1R5cGUuZ2V0U2ltcGxlVmFyaWV0eSgpID09IFNjaGVtYVR5cGUuVU5JT04pIHsKLSAgICAgICAgICAgIFNjaGVtYVR5cGVbXSBtZW1iZXJUeXBlcyA9IHNUeXBlLmdldFVuaW9uTWVtYmVyVHlwZXMoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IG1lbWJlclR5cGVzLmxlbmd0aCA7IGkrKykKLSAgICAgICAgICAgICAgICBpbnRlcmZhY2VzLmFwcGVuZCgiLCAiICsgbWVtYmVyVHlwZXNbaV0uZ2V0RnVsbEphdmFOYW1lKCkucmVwbGFjZSgnJCcsICcuJykpOwotICAgICAgICB9Ci0KLSAgICAgICAgZW1pdCgicHVibGljICIgKyAoIGlzSW5uZXIgPyAic3RhdGljICI6ICIiICkgKyAiY2xhc3MgIiArIHNob3J0TmFtZSArCi0gICAgICAgICAgICAiIGV4dGVuZHMgIiArIGJhc2VDbGFzcyArICIgaW1wbGVtZW50cyAiICsgaW50ZXJmYWNlcy50b1N0cmluZygpKTsKLQotICAgICAgICBzdGFydEJsb2NrKCk7Ci0gICAgfQotCi0gICAgdm9pZCBtYWtlQXR0cmlidXRlRGVmYXVsdFZhbHVlKFN0cmluZyBqdGFyZ2V0VHlwZSwgU2NoZW1hUHJvcGVydHkgcHJvcCwgU3RyaW5nIGlkZW50aWZpZXIpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgU3RyaW5nIGZ1bGxOYW1lID0ganRhcmdldFR5cGU7Ci0gICAgICAgIGlmIChmdWxsTmFtZSA9PSBudWxsKQotICAgICAgICAgICAgZnVsbE5hbWUgPSBwcm9wLmphdmFCYXNlZE9uVHlwZSgpLmdldEZ1bGxKYXZhTmFtZSgpLnJlcGxhY2UoJyQnLCAnLicpOwotCi0gICAgICAgIGVtaXQoInRhcmdldCA9ICgiICsgZnVsbE5hbWUgKyAiKWdldF9kZWZhdWx0X2F0dHJpYnV0ZV92YWx1ZSgiICsgaWRlbnRpZmllciArICIpOyIpOwotICAgIH0KLQotICAgIHZvaWQgbWFrZU1pc3NpbmdWYWx1ZShpbnQgamF2YVR5cGUpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgc3dpdGNoIChqYXZhVHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0JPT0xFQU46Ci0gICAgICAgICAgICAgICAgZW1pdCgicmV0dXJuIGZhbHNlOyIpOyBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0ZMT0FUOgotICAgICAgICAgICAgICAgIGVtaXQoInJldHVybiAwLjBmOyIpOyBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0RPVUJMRToKLSAgICAgICAgICAgICAgICBlbWl0KCJyZXR1cm4gMC4wOyIpOyBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0JZVEU6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfU0hPUlQ6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfSU5UOgotICAgICAgICAgICAgICAgIGVtaXQoInJldHVybiAwOyIpOyBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0xPTkc6Ci0gICAgICAgICAgICAgICAgZW1pdCgicmV0dXJuIDBMOyIpOyBicmVhazsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuWE1MX09CSkVDVDoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9CSUdfREVDSU1BTDoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9CSUdfSU5URUdFUjoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9TVFJJTkc6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfQllURV9BUlJBWToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9HREFURToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9HRFVSQVRJT046Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfREFURToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9RTkFNRToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9MSVNUOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0NBTEVOREFSOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0VOVU06Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfT0JKRUNUOgotICAgICAgICAgICAgICAgIGVtaXQoInJldHVybiBudWxsOyIpOyBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgcHJpbnRKR2V0QXJyYXlWYWx1ZShpbnQgamF2YVR5cGUsIFN0cmluZyB0eXBlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBzd2l0Y2ggKGphdmFUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LlhNTF9PQkpFQ1Q6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfRU5VTToKLSAgICAgICAgICAgICAgICBlbWl0KHR5cGUgKyAiW10gcmVzdWx0ID0gbmV3ICIgKyB0eXBlICsgIlt0YXJnZXRMaXN0LnNpemUoKV07Iik7Ci0gICAgICAgICAgICAgICAgZW1pdCgidGFyZ2V0TGlzdC50b0FycmF5KHJlc3VsdCk7Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9CT09MRUFOOgotICAgICAgICAgICAgICAgIGVtaXQoImJvb2xlYW5bXSByZXN1bHQgPSBuZXcgYm9vbGVhblt0YXJnZXRMaXN0LnNpemUoKV07Iik7Ci0gICAgICAgICAgICAgICAgZW1pdCgiZm9yIChpbnQgaSA9IDAsIGxlbiA9IHRhcmdldExpc3Quc2l6ZSgpIDsgaSA8IGxlbiA7IGkrKykiKTsKLSAgICAgICAgICAgICAgICBlbWl0KCIgICAgcmVzdWx0W2ldID0gKChvcmcuYXBhY2hlLnhtbGJlYW5zLlNpbXBsZVZhbHVlKXRhcmdldExpc3QuZ2V0KGkpKS5nZXRCb29sZWFuVmFsdWUoKTsiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0ZMT0FUOgotICAgICAgICAgICAgICAgIGVtaXQoImZsb2F0W10gcmVzdWx0ID0gbmV3IGZsb2F0W3RhcmdldExpc3Quc2l6ZSgpXTsiKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJmb3IgKGludCBpID0gMCwgbGVuID0gdGFyZ2V0TGlzdC5zaXplKCkgOyBpIDwgbGVuIDsgaSsrKSIpOwotICAgICAgICAgICAgICAgIGVtaXQoIiAgICByZXN1bHRbaV0gPSAoKG9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWUpdGFyZ2V0TGlzdC5nZXQoaSkpLmdldEZsb2F0VmFsdWUoKTsiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0RPVUJMRToKLSAgICAgICAgICAgICAgICBlbWl0KCJkb3VibGVbXSByZXN1bHQgPSBuZXcgZG91YmxlW3RhcmdldExpc3Quc2l6ZSgpXTsiKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJmb3IgKGludCBpID0gMCwgbGVuID0gdGFyZ2V0TGlzdC5zaXplKCkgOyBpIDwgbGVuIDsgaSsrKSIpOwotICAgICAgICAgICAgICAgIGVtaXQoIiAgICByZXN1bHRbaV0gPSAoKG9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWUpdGFyZ2V0TGlzdC5nZXQoaSkpLmdldERvdWJsZVZhbHVlKCk7Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9CWVRFOgotICAgICAgICAgICAgICAgIGVtaXQoImJ5dGVbXSByZXN1bHQgPSBuZXcgYnl0ZVt0YXJnZXRMaXN0LnNpemUoKV07Iik7Ci0gICAgICAgICAgICAgICAgZW1pdCgiZm9yIChpbnQgaSA9IDAsIGxlbiA9IHRhcmdldExpc3Quc2l6ZSgpIDsgaSA8IGxlbiA7IGkrKykiKTsKLSAgICAgICAgICAgICAgICBlbWl0KCIgICAgcmVzdWx0W2ldID0gKChvcmcuYXBhY2hlLnhtbGJlYW5zLlNpbXBsZVZhbHVlKXRhcmdldExpc3QuZ2V0KGkpKS5nZXRCeXRlVmFsdWUoKTsiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX1NIT1JUOgotICAgICAgICAgICAgICAgIGVtaXQoInNob3J0W10gcmVzdWx0ID0gbmV3IHNob3J0W3RhcmdldExpc3Quc2l6ZSgpXTsiKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJmb3IgKGludCBpID0gMCwgbGVuID0gdGFyZ2V0TGlzdC5zaXplKCkgOyBpIDwgbGVuIDsgaSsrKSIpOwotICAgICAgICAgICAgICAgIGVtaXQoIiAgICByZXN1bHRbaV0gPSAoKG9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWUpdGFyZ2V0TGlzdC5nZXQoaSkpLmdldFNob3J0VmFsdWUoKTsiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0lOVDoKLSAgICAgICAgICAgICAgICBlbWl0KCJpbnRbXSByZXN1bHQgPSBuZXcgaW50W3RhcmdldExpc3Quc2l6ZSgpXTsiKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJmb3IgKGludCBpID0gMCwgbGVuID0gdGFyZ2V0TGlzdC5zaXplKCkgOyBpIDwgbGVuIDsgaSsrKSIpOwotICAgICAgICAgICAgICAgIGVtaXQoIiAgICByZXN1bHRbaV0gPSAoKG9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWUpdGFyZ2V0TGlzdC5nZXQoaSkpLmdldEludFZhbHVlKCk7Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9MT05HOgotICAgICAgICAgICAgICAgIGVtaXQoImxvbmdbXSByZXN1bHQgPSBuZXcgbG9uZ1t0YXJnZXRMaXN0LnNpemUoKV07Iik7Ci0gICAgICAgICAgICAgICAgZW1pdCgiZm9yIChpbnQgaSA9IDAsIGxlbiA9IHRhcmdldExpc3Quc2l6ZSgpIDsgaSA8IGxlbiA7IGkrKykiKTsKLSAgICAgICAgICAgICAgICBlbWl0KCIgICAgcmVzdWx0W2ldID0gKChvcmcuYXBhY2hlLnhtbGJlYW5zLlNpbXBsZVZhbHVlKXRhcmdldExpc3QuZ2V0KGkpKS5nZXRMb25nVmFsdWUoKTsiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0JJR19ERUNJTUFMOgotICAgICAgICAgICAgICAgIGVtaXQoImphdmEubWF0aC5CaWdEZWNpbWFsW10gcmVzdWx0ID0gbmV3IGphdmEubWF0aC5CaWdEZWNpbWFsW3RhcmdldExpc3Quc2l6ZSgpXTsiKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJmb3IgKGludCBpID0gMCwgbGVuID0gdGFyZ2V0TGlzdC5zaXplKCkgOyBpIDwgbGVuIDsgaSsrKSIpOwotICAgICAgICAgICAgICAgIGVtaXQoIiAgICByZXN1bHRbaV0gPSAoKG9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWUpdGFyZ2V0TGlzdC5nZXQoaSkpLmdldEJpZ0RlY2ltYWxWYWx1ZSgpOyIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfQklHX0lOVEVHRVI6Ci0gICAgICAgICAgICAgICAgZW1pdCgiamF2YS5tYXRoLkJpZ0ludGVnZXJbXSByZXN1bHQgPSBuZXcgamF2YS5tYXRoLkJpZ0ludGVnZXJbdGFyZ2V0TGlzdC5zaXplKCldOyIpOwotICAgICAgICAgICAgICAgIGVtaXQoImZvciAoaW50IGkgPSAwLCBsZW4gPSB0YXJnZXRMaXN0LnNpemUoKSA7IGkgPCBsZW4gOyBpKyspIik7Ci0gICAgICAgICAgICAgICAgZW1pdCgiICAgIHJlc3VsdFtpXSA9ICgob3JnLmFwYWNoZS54bWxiZWFucy5TaW1wbGVWYWx1ZSl0YXJnZXRMaXN0LmdldChpKSkuZ2V0QmlnSW50ZWdlclZhbHVlKCk7Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9TVFJJTkc6Ci0gICAgICAgICAgICAgICAgZW1pdCgiamF2YS5sYW5nLlN0cmluZ1tdIHJlc3VsdCA9IG5ldyBqYXZhLmxhbmcuU3RyaW5nW3RhcmdldExpc3Quc2l6ZSgpXTsiKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJmb3IgKGludCBpID0gMCwgbGVuID0gdGFyZ2V0TGlzdC5zaXplKCkgOyBpIDwgbGVuIDsgaSsrKSIpOwotICAgICAgICAgICAgICAgIGVtaXQoIiAgICByZXN1bHRbaV0gPSAoKG9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWUpdGFyZ2V0TGlzdC5nZXQoaSkpLmdldFN0cmluZ1ZhbHVlKCk7Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9CWVRFX0FSUkFZOgotICAgICAgICAgICAgICAgIGVtaXQoImJ5dGVbXVtdIHJlc3VsdCA9IG5ldyBieXRlW3RhcmdldExpc3Quc2l6ZSgpXVtdOyIpOwotICAgICAgICAgICAgICAgIGVtaXQoImZvciAoaW50IGkgPSAwLCBsZW4gPSB0YXJnZXRMaXN0LnNpemUoKSA7IGkgPCBsZW4gOyBpKyspIik7Ci0gICAgICAgICAgICAgICAgZW1pdCgiICAgIHJlc3VsdFtpXSA9ICgob3JnLmFwYWNoZS54bWxiZWFucy5TaW1wbGVWYWx1ZSl0YXJnZXRMaXN0LmdldChpKSkuZ2V0Qnl0ZUFycmF5VmFsdWUoKTsiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0NBTEVOREFSOgotICAgICAgICAgICAgICAgIGVtaXQoImphdmEudXRpbC5DYWxlbmRhcltdIHJlc3VsdCA9IG5ldyBqYXZhLnV0aWwuQ2FsZW5kYXJbdGFyZ2V0TGlzdC5zaXplKCldOyIpOwotICAgICAgICAgICAgICAgIGVtaXQoImZvciAoaW50IGkgPSAwLCBsZW4gPSB0YXJnZXRMaXN0LnNpemUoKSA7IGkgPCBsZW4gOyBpKyspIik7Ci0gICAgICAgICAgICAgICAgZW1pdCgiICAgIHJlc3VsdFtpXSA9ICgob3JnLmFwYWNoZS54bWxiZWFucy5TaW1wbGVWYWx1ZSl0YXJnZXRMaXN0LmdldChpKSkuZ2V0Q2FsZW5kYXJWYWx1ZSgpOyIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfREFURToKLSAgICAgICAgICAgICAgICBlbWl0KCJqYXZhLnV0aWwuRGF0ZVtdIHJlc3VsdCA9IG5ldyBqYXZhLnV0aWwuRGF0ZVt0YXJnZXRMaXN0LnNpemUoKV07Iik7Ci0gICAgICAgICAgICAgICAgZW1pdCgiZm9yIChpbnQgaSA9IDAsIGxlbiA9IHRhcmdldExpc3Quc2l6ZSgpIDsgaSA8IGxlbiA7IGkrKykiKTsKLSAgICAgICAgICAgICAgICBlbWl0KCIgICAgcmVzdWx0W2ldID0gKChvcmcuYXBhY2hlLnhtbGJlYW5zLlNpbXBsZVZhbHVlKXRhcmdldExpc3QuZ2V0KGkpKS5nZXREYXRlVmFsdWUoKTsiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0dEQVRFOgotICAgICAgICAgICAgICAgIGVtaXQoIm9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVbXSByZXN1bHQgPSBuZXcgb3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVt0YXJnZXRMaXN0LnNpemUoKV07Iik7Ci0gICAgICAgICAgICAgICAgZW1pdCgiZm9yIChpbnQgaSA9IDAsIGxlbiA9IHRhcmdldExpc3Quc2l6ZSgpIDsgaSA8IGxlbiA7IGkrKykiKTsKLSAgICAgICAgICAgICAgICBlbWl0KCIgICAgcmVzdWx0W2ldID0gKChvcmcuYXBhY2hlLnhtbGJlYW5zLlNpbXBsZVZhbHVlKXRhcmdldExpc3QuZ2V0KGkpKS5nZXRHRGF0ZVZhbHVlKCk7Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9HRFVSQVRJT046Ci0gICAgICAgICAgICAgICAgZW1pdCgib3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb25bXSByZXN1bHQgPSBuZXcgb3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb25bdGFyZ2V0TGlzdC5zaXplKCldOyIpOwotICAgICAgICAgICAgICAgIGVtaXQoImZvciAoaW50IGkgPSAwLCBsZW4gPSB0YXJnZXRMaXN0LnNpemUoKSA7IGkgPCBsZW4gOyBpKyspIik7Ci0gICAgICAgICAgICAgICAgZW1pdCgiICAgIHJlc3VsdFtpXSA9ICgob3JnLmFwYWNoZS54bWxiZWFucy5TaW1wbGVWYWx1ZSl0YXJnZXRMaXN0LmdldChpKSkuZ2V0R0R1cmF0aW9uVmFsdWUoKTsiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX1FOQU1FOgotICAgICAgICAgICAgICAgIGVtaXQoImphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWVbXSByZXN1bHQgPSBuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZVt0YXJnZXRMaXN0LnNpemUoKV07Iik7Ci0gICAgICAgICAgICAgICAgZW1pdCgiZm9yIChpbnQgaSA9IDAsIGxlbiA9IHRhcmdldExpc3Quc2l6ZSgpIDsgaSA8IGxlbiA7IGkrKykiKTsKLSAgICAgICAgICAgICAgICBlbWl0KCIgICAgcmVzdWx0W2ldID0gKChvcmcuYXBhY2hlLnhtbGJlYW5zLlNpbXBsZVZhbHVlKXRhcmdldExpc3QuZ2V0KGkpKS5nZXRRTmFtZVZhbHVlKCk7Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9MSVNUOgotICAgICAgICAgICAgICAgIGVtaXQoImphdmEudXRpbC5MaXN0W10gcmVzdWx0ID0gbmV3IGphdmEudXRpbC5MaXN0W3RhcmdldExpc3Quc2l6ZSgpXTsiKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJmb3IgKGludCBpID0gMCwgbGVuID0gdGFyZ2V0TGlzdC5zaXplKCkgOyBpIDwgbGVuIDsgaSsrKSIpOwotICAgICAgICAgICAgICAgIGVtaXQoIiAgICByZXN1bHRbaV0gPSAoKG9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWUpdGFyZ2V0TGlzdC5nZXQoaSkpLmdldExpc3RWYWx1ZSgpOyIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfT0JKRUNUOgotICAgICAgICAgICAgICAgIGVtaXQoIk9iamVjdFtdIHJlc3VsdCA9IG5ldyBPYmplY3RbdGFyZ2V0TGlzdC5zaXplKCldOyIpOwotICAgICAgICAgICAgICAgIGVtaXQoImZvciAoaW50IGkgPSAwLCBsZW4gPSB0YXJnZXRMaXN0LnNpemUoKSA7IGkgPCBsZW4gOyBpKyspIik7Ci0gICAgICAgICAgICAgICAgZW1pdCgiICAgIHJlc3VsdFtpXSA9ICgob3JnLmFwYWNoZS54bWxiZWFucy5TaW1wbGVWYWx1ZSl0YXJnZXRMaXN0LmdldChpKSkuZ2V0T2JqZWN0VmFsdWUoKTsiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICB9Ci0gICAgICAgIGVtaXQoInJldHVybiByZXN1bHQ7Iik7Ci0gICAgfQotICAgIHZvaWQgcHJpbnRKR2V0VmFsdWUoaW50IGphdmFUeXBlLCBTdHJpbmcgdHlwZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgc3dpdGNoIChqYXZhVHlwZSkKLSAgICAgICAgewotICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LlhNTF9PQkpFQ1Q6Ci0gICAgICAgICAgICBlbWl0KCJyZXR1cm4gdGFyZ2V0OyIpOyBicmVhazsKLQotICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfQk9PTEVBTjoKLSAgICAgICAgICAgIGVtaXQoInJldHVybiB0YXJnZXQuZ2V0Qm9vbGVhblZhbHVlKCk7Iik7IGJyZWFrOwotCi0gICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9GTE9BVDoKLSAgICAgICAgICAgIGVtaXQoInJldHVybiB0YXJnZXQuZ2V0RmxvYXRWYWx1ZSgpOyIpOyBicmVhazsKLQotICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfRE9VQkxFOgotICAgICAgICAgICAgZW1pdCgicmV0dXJuIHRhcmdldC5nZXREb3VibGVWYWx1ZSgpOyIpOyBicmVhazsKLQotICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfQllURToKLSAgICAgICAgICAgIGVtaXQoInJldHVybiB0YXJnZXQuZ2V0Qnl0ZVZhbHVlKCk7Iik7IGJyZWFrOwotCi0gICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9TSE9SVDoKLSAgICAgICAgICAgIGVtaXQoInJldHVybiB0YXJnZXQuZ2V0U2hvcnRWYWx1ZSgpOyIpOyBicmVhazsKLQotICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfSU5UOgotICAgICAgICAgICAgZW1pdCgicmV0dXJuIHRhcmdldC5nZXRJbnRWYWx1ZSgpOyIpOyBicmVhazsKLQotICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfTE9ORzoKLSAgICAgICAgICAgIGVtaXQoInJldHVybiB0YXJnZXQuZ2V0TG9uZ1ZhbHVlKCk7Iik7IGJyZWFrOwotCi0gICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9CSUdfREVDSU1BTDoKLSAgICAgICAgICAgIGVtaXQoInJldHVybiB0YXJnZXQuZ2V0QmlnRGVjaW1hbFZhbHVlKCk7Iik7IGJyZWFrOwotCi0gICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9CSUdfSU5URUdFUjoKLSAgICAgICAgICAgIGVtaXQoInJldHVybiB0YXJnZXQuZ2V0QmlnSW50ZWdlclZhbHVlKCk7Iik7IGJyZWFrOwotCi0gICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9TVFJJTkc6Ci0gICAgICAgICAgICBlbWl0KCJyZXR1cm4gdGFyZ2V0LmdldFN0cmluZ1ZhbHVlKCk7Iik7IGJyZWFrOwotCi0gICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9CWVRFX0FSUkFZOgotICAgICAgICAgICAgZW1pdCgicmV0dXJuIHRhcmdldC5nZXRCeXRlQXJyYXlWYWx1ZSgpOyIpOyBicmVhazsKLQotICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfR0RBVEU6Ci0gICAgICAgICAgICBlbWl0KCJyZXR1cm4gdGFyZ2V0LmdldEdEYXRlVmFsdWUoKTsiKTsgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0dEVVJBVElPTjoKLSAgICAgICAgICAgIGVtaXQoInJldHVybiB0YXJnZXQuZ2V0R0R1cmF0aW9uVmFsdWUoKTsiKTsgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0NBTEVOREFSOgotICAgICAgICAgICAgZW1pdCgicmV0dXJuIHRhcmdldC5nZXRDYWxlbmRhclZhbHVlKCk7Iik7IGJyZWFrOwotCi0gICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9EQVRFOgotICAgICAgICAgICAgZW1pdCgicmV0dXJuIHRhcmdldC5nZXREYXRlVmFsdWUoKTsiKTsgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX1FOQU1FOgotICAgICAgICAgICAgZW1pdCgicmV0dXJuIHRhcmdldC5nZXRRTmFtZVZhbHVlKCk7Iik7IGJyZWFrOwotCi0gICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9MSVNUOgotICAgICAgICAgICAgZW1pdCgicmV0dXJuIHRhcmdldC5nZXRMaXN0VmFsdWUoKTsiKTsgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0VOVU06Ci0gICAgICAgICAgICBlbWl0KCJyZXR1cm4gKCIgKyB0eXBlICsgIil0YXJnZXQuZ2V0RW51bVZhbHVlKCk7Iik7IGJyZWFrOwotCi0gICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9PQkpFQ1Q6Ci0gICAgICAgICAgICBlbWl0KCJyZXR1cm4gdGFyZ2V0LmdldE9iamVjdFZhbHVlKCk7Iik7IGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgU3RyaW5nIGpzZXRNZXRob2QoaW50IGphdmFUeXBlKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoamF2YVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuWE1MX09CSkVDVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gInRhcmdldC5zZXQiOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfQk9PTEVBTjoKLSAgICAgICAgICAgICAgICByZXR1cm4gInRhcmdldC5zZXRCb29sZWFuVmFsdWUiOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfRkxPQVQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJ0YXJnZXQuc2V0RmxvYXRWYWx1ZSI7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9ET1VCTEU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJ0YXJnZXQuc2V0RG91YmxlVmFsdWUiOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfQllURToKLSAgICAgICAgICAgICAgICByZXR1cm4gInRhcmdldC5zZXRCeXRlVmFsdWUiOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfU0hPUlQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJ0YXJnZXQuc2V0U2hvcnRWYWx1ZSI7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9JTlQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJ0YXJnZXQuc2V0SW50VmFsdWUiOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfTE9ORzoKLSAgICAgICAgICAgICAgICByZXR1cm4gInRhcmdldC5zZXRMb25nVmFsdWUiOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfQklHX0RFQ0lNQUw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJ0YXJnZXQuc2V0QmlnRGVjaW1hbFZhbHVlIjsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0JJR19JTlRFR0VSOgotICAgICAgICAgICAgICAgIHJldHVybiAidGFyZ2V0LnNldEJpZ0ludGVnZXJWYWx1ZSI7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9TVFJJTkc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJ0YXJnZXQuc2V0U3RyaW5nVmFsdWUiOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfQllURV9BUlJBWToKLSAgICAgICAgICAgICAgICByZXR1cm4gInRhcmdldC5zZXRCeXRlQXJyYXlWYWx1ZSI7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9HREFURToKLSAgICAgICAgICAgICAgICByZXR1cm4gInRhcmdldC5zZXRHRGF0ZVZhbHVlIjsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0dEVVJBVElPTjoKLSAgICAgICAgICAgICAgICByZXR1cm4gInRhcmdldC5zZXRHRHVyYXRpb25WYWx1ZSI7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9DQUxFTkRBUjoKLSAgICAgICAgICAgICAgICByZXR1cm4gInRhcmdldC5zZXRDYWxlbmRhclZhbHVlIjsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0RBVEU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJ0YXJnZXQuc2V0RGF0ZVZhbHVlIjsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX1FOQU1FOgotICAgICAgICAgICAgICAgIHJldHVybiAidGFyZ2V0LnNldFFOYW1lVmFsdWUiOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfTElTVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gInRhcmdldC5zZXRMaXN0VmFsdWUiOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfRU5VTToKLSAgICAgICAgICAgICAgICByZXR1cm4gInRhcmdldC5zZXRFbnVtVmFsdWUiOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfT0JKRUNUOgotICAgICAgICAgICAgICAgIHJldHVybiAidGFyZ2V0LnNldE9iamVjdFZhbHVlIjsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBTdHJpbmcgZ2V0SWRlbnRpZmllcihNYXAgcU5hbWVNYXAsIFFOYW1lIHFOYW1lKSB7Ci0gICAgICAgIHJldHVybiAoKFN0cmluZ1tdKXFOYW1lTWFwLmdldChxTmFtZSkpWzBdOwotICAgIH0KLQotICAgIFN0cmluZyBnZXRTZXRJZGVudGlmaWVyKE1hcCBxTmFtZU1hcCwgUU5hbWUgcU5hbWUpIHsKLSAgICAgICAgU3RyaW5nW10gaWRlbnRpZmllcnMgPSAoU3RyaW5nW10pcU5hbWVNYXAuZ2V0KHFOYW1lKTsKLSAgICAgICAgcmV0dXJuIGlkZW50aWZpZXJzWzFdID09IG51bGwgPyBpZGVudGlmaWVyc1swXSA6IGlkZW50aWZpZXJzWzFdOwotICAgIH0KLQotICAgIE1hcCBwcmludFN0YXRpY0ZpZWxkcyhTY2hlbWFQcm9wZXJ0eVtdIHByb3BlcnRpZXMpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIE1hcCByZXN1bHRzID0gbmV3IEhhc2hNYXAoKTsKLQotICAgICAgICBlbWl0KCIiKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmaW5hbCBTdHJpbmdbXSBpZGVudGlmaWVycyA9IG5ldyBTdHJpbmdbMl07Ci0gICAgICAgICAgICBmaW5hbCBTY2hlbWFQcm9wZXJ0eSBwcm9wID0gcHJvcGVydGllc1tpXTsKLSAgICAgICAgICAgIGZpbmFsIFFOYW1lIG5hbWUgPSBwcm9wLmdldE5hbWUoKTsKLSAgICAgICAgICAgIHJlc3VsdHMucHV0KG5hbWUsIGlkZW50aWZpZXJzKTsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBqYXZhTmFtZSA9IHByb3AuZ2V0SmF2YVByb3BlcnR5TmFtZSgpOwotICAgICAgICAgICAgaWRlbnRpZmllcnNbMF0gPSAoamF2YU5hbWUgKyAiJCIgKyAoaSAqIDIpKS50b1VwcGVyQ2FzZSgpOwotICAgICAgICAgICAgZmluYWwgU3RyaW5nIHVyaVN0cmluZyA9ICAiXCIiICsgbmFtZS5nZXROYW1lc3BhY2VVUkkoKSArICJcIiI7Ci0KLSAgICAgICAgICAgIGVtaXQoInByaXZhdGUgc3RhdGljIGZpbmFsIGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUgIiArIGlkZW50aWZpZXJzWzBdICsKLSAgICAgICAgICAgICAgICAgIiA9ICIgKTsKLSAgICAgICAgICAgIGluZGVudCgpOwotICAgICAgICAgICAgZW1pdCgibmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoIiArCi0gICAgICAgICAgICAgICAgIHVyaVN0cmluZyArICIsIFwiIiArIG5hbWUuZ2V0TG9jYWxQYXJ0KCkgKyAiXCIpOyIpOwotICAgICAgICAgICAgb3V0ZGVudCgpOwotCi0gICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXS5hY2NlcHRlZE5hbWVzKCkgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmaW5hbCBRTmFtZVtdIHFuYW1lcyA9IHByb3BlcnRpZXNbaV0uYWNjZXB0ZWROYW1lcygpOwotCi0gICAgICAgICAgICAgICAgaWYgKHFuYW1lcy5sZW5ndGggPiAxKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcnNbMV0gPSAoamF2YU5hbWUgKyAiJCIgKyAoaSoyKzEpKS50b1VwcGVyQ2FzZSgpOwotCi0gICAgICAgICAgICAgICAgICAgIGVtaXQoInByaXZhdGUgc3RhdGljIGZpbmFsIG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXQgIiArIGlkZW50aWZpZXJzWzFdICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIgPSBvcmcuYXBhY2hlLnhtbGJlYW5zLlFOYW1lU2V0LmZvckFycmF5KCBuZXcgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZVtdIHsgIiApOwotICAgICAgICAgICAgICAgICAgICBpbmRlbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDAgOyBqIDwgcW5hbWVzLmxlbmd0aCA7IGorKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZW1pdCgibmV3IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUoXCIiICsgcW5hbWVzW2pdLmdldE5hbWVzcGFjZVVSSSgpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIsIFwiIiArIHFuYW1lc1tqXS5nZXRMb2NhbFBhcnQoKSArICJcIiksIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBvdXRkZW50KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZW1pdCgifSk7Iik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVtaXQoIiIpOwotICAgICAgICByZXR1cm4gcmVzdWx0czsKLSAgICB9Ci0KLSAgICB2b2lkIGVtaXRJbXBsZW1lbnRhdGlvblByZWFtYmxlKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBlbWl0KCJzeW5jaHJvbml6ZWQgKG1vbml0b3IoKSkiKTsKLSAgICAgICAgZW1pdCgieyIpOwotICAgICAgICBpbmRlbnQoKTsKLSAgICAgICAgZW1pdCgiY2hlY2tfb3JwaGFuZWQoKTsiKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBlbWl0SW1wbGVtZW50YXRpb25Qb3N0YW1ibGUoKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIG91dGRlbnQoKTsKLSAgICAgICAgZW1pdCgifSIpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGVtaXRBZGRUYXJnZXQoU3RyaW5nIGlkZW50aWZpZXIsIGJvb2xlYW4gaXNBdHRyLCBib29sZWFuIGRlY2xhcmVUYXJnZXQsIFN0cmluZyB4dHlwZSkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBpZiAoZGVjbGFyZVRhcmdldCkKLSAgICAgICAgICAgIGVtaXQoeHR5cGUgKyAiIHRhcmdldDsiKTsKLSAgICAgICAgaWYgKGlzQXR0cikKLSAgICAgICAgICAgIGVtaXQoInRhcmdldCA9ICgiICsgeHR5cGUgKyAiKWdldF9zdG9yZSgpLmFkZF9hdHRyaWJ1dGVfdXNlcigiICsgaWRlbnRpZmllciArICIpOyIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlbWl0KCJ0YXJnZXQgPSAoIiArIHh0eXBlICsgIilnZXRfc3RvcmUoKS5hZGRfZWxlbWVudF91c2VyKCIgKyBpZGVudGlmaWVyICsgIik7Iik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5PVEhJTkcgPSAxOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBRERfTkVXX1ZBTFVFID0gMzsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVEhST1dfRVhDRVBUSU9OID0gNDsKLQotICAgIHZvaWQgZW1pdEdldFRhcmdldChTdHJpbmcgc2V0SWRlbnRpZmllciwgCi0gICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBpZGVudGlmaWVyLAotICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzQXR0ciwgCi0gICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBpbmRleCwgCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBudWxsQmVoYXZpb3VyLAotICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgeHR5cGUpCi0gICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgYXNzZXJ0IHNldElkZW50aWZpZXIgIT0gbnVsbCAmJiBpZGVudGlmaWVyICE9IG51bGw7Ci0KLSAgICAgICAgZW1pdCh4dHlwZSArICIgdGFyZ2V0ID0gbnVsbDsiKTsKLQotICAgICAgICBpZiAoaXNBdHRyKQotICAgICAgICAgICAgZW1pdCgidGFyZ2V0ID0gKCIgKyB4dHlwZSArICIpZ2V0X3N0b3JlKCkuZmluZF9hdHRyaWJ1dGVfdXNlcigiICsgaWRlbnRpZmllciArICIpOyIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlbWl0KCJ0YXJnZXQgPSAoIiArIHh0eXBlICsgIilnZXRfc3RvcmUoKS5maW5kX2VsZW1lbnRfdXNlcigiICsgc2V0SWRlbnRpZmllciArICIsICIgKyBpbmRleCArICIpOyIpOwotCi0gICAgICAgIGlmIChudWxsQmVoYXZpb3VyID09IE5PVEhJTkcpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZW1pdCgiaWYgKHRhcmdldCA9PSBudWxsKSIpOwotCi0gICAgICAgIHN0YXJ0QmxvY2soKTsKLQotICAgICAgICBzd2l0Y2ggKG51bGxCZWhhdmlvdXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgQUREX05FV19WQUxVRToKLSAgICAgICAgICAgICAgICBlbWl0QWRkVGFyZ2V0KGlkZW50aWZpZXIsIGlzQXR0ciwgZmFsc2UsIHh0eXBlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBUSFJPV19FWENFUFRJT046Ci0gICAgICAgICAgICAgICAgZW1pdCgidGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oKTsiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBOT1RISU5HOgotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGFzc2VydCBmYWxzZSA6ICJCYWQgYmVoYXZpb3VyIHR5cGU6ICIgKyBudWxsQmVoYXZpb3VyOwotICAgICAgICB9Ci0KLSAgICAgICAgZW5kQmxvY2soKTsKLSAgICB9Ci0KLSAgICB2b2lkIHByaW50R2V0dGVySW1wbHMoCi0gICAgICAgIFNjaGVtYVByb3BlcnR5IHByb3AsIFFOYW1lIHFOYW1lLCBib29sZWFuIGlzQXR0ciwgU3RyaW5nIHByb3BlcnR5TmFtZSwKLSAgICAgICAgaW50IGphdmFUeXBlLCBTdHJpbmcgdHlwZSwgU3RyaW5nIHh0eXBlLCBib29sZWFuIG5pbGxhYmxlLAotICAgICAgICBib29sZWFuIG9wdGlvbmFsLCBib29sZWFuIHNldmVyYWwsIGJvb2xlYW4gc2luZ2xldG9uLAotICAgICAgICBib29sZWFuIGlzdW5pb24sCi0gICAgICAgIFN0cmluZyBpZGVudGlmaWVyLCBTdHJpbmcgc2V0SWRlbnRpZmllciApCi0gICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFN0cmluZyBwcm9wZGVzYyA9ICJcIiIgKyBxTmFtZS5nZXRMb2NhbFBhcnQoKSArICJcIiIgKyAoaXNBdHRyID8gIiBhdHRyaWJ1dGUiIDogIiBlbGVtZW50Iik7Ci0gICAgICAgIGJvb2xlYW4geG1sdHlwZSA9IChqYXZhVHlwZSA9PSBTY2hlbWFQcm9wZXJ0eS5YTUxfT0JKRUNUKTsKLSAgICAgICAgU3RyaW5nIGp0YXJnZXRUeXBlID0gKGlzdW5pb24gfHwgIXhtbHR5cGUpID8gIm9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWUiIDogeHR5cGU7Ci0KLSAgICAgICAgaWYgKHNpbmdsZXRvbikKLSAgICAgICAgewotICAgICAgICAgICAgLy8gVmFsdWUgZ2V0UHJvcCgpCi0gICAgICAgICAgICBwcmludEphdmFEb2MoKHNldmVyYWwgPyAiR2V0cyBmaXJzdCAiIDogIkdldHMgdGhlICIpICsgcHJvcGRlc2MpOwotICAgICAgICAgICAgZW1pdCgicHVibGljICIgKyB0eXBlICsgIiBnZXQiICsgcHJvcGVydHlOYW1lICsgIigpIik7Ci0gICAgICAgICAgICBzdGFydEJsb2NrKCk7Ci0gICAgICAgICAgICBlbWl0SW1wbGVtZW50YXRpb25QcmVhbWJsZSgpOwotCi0gICAgICAgICAgICBlbWl0R2V0VGFyZ2V0KHNldElkZW50aWZpZXIsIGlkZW50aWZpZXIsIGlzQXR0ciwgIjAiLCBOT1RISU5HLCBqdGFyZ2V0VHlwZSk7Ci0KLSAgICAgICAgICAgIGlmIChpc0F0dHIgJiYgKHByb3AuaGFzRGVmYXVsdCgpID09IFNjaGVtYVByb3BlcnR5LkNPTlNJU1RFTlRMWSB8fAotICAgICAgICAgICAgICAgICAgICBwcm9wLmhhc0ZpeGVkKCkgPT0gU2NoZW1hUHJvcGVydHkuQ09OU0lTVEVOVExZKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlbWl0KCJpZiAodGFyZ2V0ID09IG51bGwpIik7Ci0gICAgICAgICAgICAgICAgc3RhcnRCbG9jaygpOwotICAgICAgICAgICAgICAgIG1ha2VBdHRyaWJ1dGVEZWZhdWx0VmFsdWUoanRhcmdldFR5cGUsIHByb3AsIGlkZW50aWZpZXIpOwotICAgICAgICAgICAgICAgIGVuZEJsb2NrKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbWl0KCJpZiAodGFyZ2V0ID09IG51bGwpIik7Ci0gICAgICAgICAgICBzdGFydEJsb2NrKCk7Ci0gICAgICAgICAgICBtYWtlTWlzc2luZ1ZhbHVlKGphdmFUeXBlKTsKLSAgICAgICAgICAgIGVuZEJsb2NrKCk7Ci0KLQotICAgICAgICAgICAgcHJpbnRKR2V0VmFsdWUoamF2YVR5cGUsIHR5cGUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBlbWl0SW1wbGVtZW50YXRpb25Qb3N0YW1ibGUoKTsKLQotICAgICAgICAgICAgZW5kQmxvY2soKTsKLQotICAgICAgICAgICAgaWYgKCF4bWx0eXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIFZhbHVlIHhnZXRQcm9wKCkKLSAgICAgICAgICAgICAgICBwcmludEphdmFEb2MoKHNldmVyYWwgPyAiR2V0cyAoYXMgeG1sKSBmaXJzdCAiIDogIkdldHMgKGFzIHhtbCkgdGhlICIpICsgcHJvcGRlc2MpOwotICAgICAgICAgICAgICAgIGVtaXQoInB1YmxpYyAiICsgeHR5cGUgKyAiIHhnZXQiICsgcHJvcGVydHlOYW1lICsgIigpIik7Ci0gICAgICAgICAgICAgICAgc3RhcnRCbG9jaygpOwotICAgICAgICAgICAgICAgIGVtaXRJbXBsZW1lbnRhdGlvblByZWFtYmxlKCk7Ci0gICAgICAgICAgICAgICAgZW1pdEdldFRhcmdldChzZXRJZGVudGlmaWVyLCBpZGVudGlmaWVyLCBpc0F0dHIsICIwIiwgTk9USElORywgeHR5cGUpOwotCi0gICAgICAgICAgICAgICAgaWYgKGlzQXR0ciAmJiAocHJvcC5oYXNEZWZhdWx0KCkgPT0gU2NoZW1hUHJvcGVydHkuQ09OU0lTVEVOVExZIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wLmhhc0ZpeGVkKCkgPT0gU2NoZW1hUHJvcGVydHkuQ09OU0lTVEVOVExZKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXQoImlmICh0YXJnZXQgPT0gbnVsbCkiKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRCbG9jaygpOwotICAgICAgICAgICAgICAgICAgICBtYWtlQXR0cmlidXRlRGVmYXVsdFZhbHVlKHh0eXBlLCBwcm9wLCBpZGVudGlmaWVyKTsKLSAgICAgICAgICAgICAgICAgICAgZW5kQmxvY2soKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBlbWl0KCJyZXR1cm4gdGFyZ2V0OyIpOwotICAgICAgICAgICAgICAgIGVtaXRJbXBsZW1lbnRhdGlvblBvc3RhbWJsZSgpOwotICAgICAgICAgICAgICAgIGVuZEJsb2NrKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChuaWxsYWJsZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBib29sZWFuIGlzTmlsUHJvcCgpCi0gICAgICAgICAgICAgICAgcHJpbnRKYXZhRG9jKChzZXZlcmFsID8gIlRlc3RzIGZvciBuaWwgZmlyc3QgIiA6ICJUZXN0cyBmb3IgbmlsICIpICsgcHJvcGRlc2MpOwotICAgICAgICAgICAgICAgIGVtaXQoInB1YmxpYyBib29sZWFuIGlzTmlsIiArIHByb3BlcnR5TmFtZSArICIoKSIpOwotICAgICAgICAgICAgICAgIHN0YXJ0QmxvY2soKTsKLSAgICAgICAgICAgICAgICBlbWl0SW1wbGVtZW50YXRpb25QcmVhbWJsZSgpOwotICAgICAgICAgICAgICAgIGVtaXRHZXRUYXJnZXQoc2V0SWRlbnRpZmllciwgaWRlbnRpZmllciwgaXNBdHRyLCAiMCIsIE5PVEhJTkcsIHh0eXBlKTsKLQotICAgICAgICAgICAgICAgIGVtaXQoImlmICh0YXJnZXQgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOyIpOwotICAgICAgICAgICAgICAgIGVtaXQoInJldHVybiB0YXJnZXQuaXNOaWwoKTsiKTsKLSAgICAgICAgICAgICAgICBlbWl0SW1wbGVtZW50YXRpb25Qb3N0YW1ibGUoKTsKLSAgICAgICAgICAgICAgICBlbmRCbG9jaygpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG9wdGlvbmFsKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBib29sZWFuIGlzU2V0UHJvcCgpCi0gICAgICAgICAgICBwcmludEphdmFEb2MoKHNldmVyYWwgPyAiVHJ1ZSBpZiBoYXMgYXQgbGVhc3Qgb25lICIgOiAiVHJ1ZSBpZiBoYXMgIikgKyBwcm9wZGVzYyk7Ci0gICAgICAgICAgICBlbWl0KCJwdWJsaWMgYm9vbGVhbiBpc1NldCIgKyBwcm9wZXJ0eU5hbWUgKyAiKCkiKTsKLQotICAgICAgICAgICAgc3RhcnRCbG9jaygpOwotICAgICAgICAgICAgZW1pdEltcGxlbWVudGF0aW9uUHJlYW1ibGUoKTsKLQotICAgICAgICAgICAgaWYgKGlzQXR0cikKLSAgICAgICAgICAgICAgICBlbWl0KCJyZXR1cm4gZ2V0X3N0b3JlKCkuZmluZF9hdHRyaWJ1dGVfdXNlcigiICsgaWRlbnRpZmllciArIikgIT0gbnVsbDsiKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0KCJyZXR1cm4gZ2V0X3N0b3JlKCkuY291bnRfZWxlbWVudHMoIiArIHNldElkZW50aWZpZXIgKyAiKSAhPSAwOyIpOwotCi0gICAgICAgICAgICBlbWl0SW1wbGVtZW50YXRpb25Qb3N0YW1ibGUoKTsKLSAgICAgICAgICAgIGVuZEJsb2NrKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2V2ZXJhbCkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIGFycmF5TmFtZSA9IHByb3BlcnR5TmFtZSArICJBcnJheSI7Ci0KLSAgICAgICAgICAgIC8vIFZhbHVlW10gZ2V0UHJvcCgpCi0gICAgICAgICAgICBwcmludEphdmFEb2MoIkdldHMgYXJyYXkgb2YgYWxsICIgKyBwcm9wZGVzYyArICJzIik7Ci0gICAgICAgICAgICBlbWl0KCJwdWJsaWMgIiArIHR5cGUgKyAiW10gZ2V0IiArIGFycmF5TmFtZSArICIoKSIpOwotICAgICAgICAgICAgc3RhcnRCbG9jaygpOwotICAgICAgICAgICAgZW1pdEltcGxlbWVudGF0aW9uUHJlYW1ibGUoKTsKLQotICAgICAgICAgICAgZW1pdCgiamF2YS51dGlsLkxpc3QgdGFyZ2V0TGlzdCA9IG5ldyBqYXZhLnV0aWwuQXJyYXlMaXN0KCk7Iik7Ci0gICAgICAgICAgICBlbWl0KCJnZXRfc3RvcmUoKS5maW5kX2FsbF9lbGVtZW50X3VzZXJzKCIgKyBzZXRJZGVudGlmaWVyICsgIiwgdGFyZ2V0TGlzdCk7Iik7Ci0KLSAgICAgICAgICAgIHByaW50SkdldEFycmF5VmFsdWUoamF2YVR5cGUsIHR5cGUpOwotCi0gICAgICAgICAgICBlbWl0SW1wbGVtZW50YXRpb25Qb3N0YW1ibGUoKTsKLSAgICAgICAgICAgIGVuZEJsb2NrKCk7Ci0KLSAgICAgICAgICAgIC8vIFZhbHVlIGdldFByb3AoaW50IGkpCi0gICAgICAgICAgICBwcmludEphdmFEb2MoIkdldHMgaXRoICIgKyBwcm9wZGVzYyk7Ci0gICAgICAgICAgICBlbWl0KCJwdWJsaWMgIiArIHR5cGUgKyAiIGdldCIgKyBhcnJheU5hbWUgKyAiKGludCBpKSIpOwotICAgICAgICAgICAgc3RhcnRCbG9jaygpOwotICAgICAgICAgICAgZW1pdEltcGxlbWVudGF0aW9uUHJlYW1ibGUoKTsKLQotICAgICAgICAgICAgZW1pdEdldFRhcmdldChzZXRJZGVudGlmaWVyLCBpZGVudGlmaWVyLCBpc0F0dHIsICJpIiwgVEhST1dfRVhDRVBUSU9OLCBqdGFyZ2V0VHlwZSk7Ci0gICAgICAgICAgICBwcmludEpHZXRWYWx1ZShqYXZhVHlwZSwgdHlwZSk7Ci0KLSAgICAgICAgICAgIGVtaXRJbXBsZW1lbnRhdGlvblBvc3RhbWJsZSgpOwotICAgICAgICAgICAgZW5kQmxvY2soKTsKLQotICAgICAgICAgICAgaWYgKCF4bWx0eXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIFZhbHVlW10geGdldFByb3AoKQotICAgICAgICAgICAgICAgIHByaW50SmF2YURvYygiR2V0cyAoYXMgeG1sKSBhcnJheSBvZiBhbGwgIiArIHByb3BkZXNjICsgInMiKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJwdWJsaWMgIiArIHh0eXBlICsgIltdIHhnZXQiICsgYXJyYXlOYW1lICsgIigpIik7Ci0gICAgICAgICAgICAgICAgc3RhcnRCbG9jaygpOwotICAgICAgICAgICAgICAgIGVtaXRJbXBsZW1lbnRhdGlvblByZWFtYmxlKCk7Ci0gICAgICAgICAgICAgICAgZW1pdCgiamF2YS51dGlsLkxpc3QgdGFyZ2V0TGlzdCA9IG5ldyBqYXZhLnV0aWwuQXJyYXlMaXN0KCk7Iik7Ci0gICAgICAgICAgICAgICAgZW1pdCgiZ2V0X3N0b3JlKCkuZmluZF9hbGxfZWxlbWVudF91c2VycygiICsgc2V0SWRlbnRpZmllciArICIsIHRhcmdldExpc3QpOyIpOwotICAgICAgICAgICAgICAgIGVtaXQoeHR5cGUgKyAiW10gcmVzdWx0ID0gbmV3ICIgKyB4dHlwZSArICJbdGFyZ2V0TGlzdC5zaXplKCldOyIpOwotICAgICAgICAgICAgICAgIGVtaXQoInRhcmdldExpc3QudG9BcnJheShyZXN1bHQpOyIpOwotICAgICAgICAgICAgICAgIGVtaXQoInJldHVybiByZXN1bHQ7Iik7Ci0gICAgICAgICAgICAgICAgZW1pdEltcGxlbWVudGF0aW9uUG9zdGFtYmxlKCk7Ci0gICAgICAgICAgICAgICAgZW5kQmxvY2soKTsKLQotICAgICAgICAgICAgICAgIC8vIFZhbHVlIHhnZXRQcm9wKGludCBpKQotICAgICAgICAgICAgICAgIHByaW50SmF2YURvYygiR2V0cyAoYXMgeG1sKSBpdGggIiArIHByb3BkZXNjKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJwdWJsaWMgIiArIHh0eXBlICsgIiB4Z2V0IiArIGFycmF5TmFtZSArICIoaW50IGkpIik7Ci0gICAgICAgICAgICAgICAgc3RhcnRCbG9jaygpOwotICAgICAgICAgICAgICAgIGVtaXRJbXBsZW1lbnRhdGlvblByZWFtYmxlKCk7Ci0gICAgICAgICAgICAgICAgZW1pdEdldFRhcmdldChzZXRJZGVudGlmaWVyLCBpZGVudGlmaWVyLCBpc0F0dHIsICJpIiwgVEhST1dfRVhDRVBUSU9OLCB4dHlwZSk7Ci0gICAgICAgICAgICAgICAgZW1pdCgicmV0dXJuICgiICsgeHR5cGUgKyAiKXRhcmdldDsiKTsKLSAgICAgICAgICAgICAgICBlbWl0SW1wbGVtZW50YXRpb25Qb3N0YW1ibGUoKTsKLSAgICAgICAgICAgICAgICBlbmRCbG9jaygpOwotCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChuaWxsYWJsZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBib29sZWFuIGlzTmlsKGludCBpKTsKLSAgICAgICAgICAgICAgICBwcmludEphdmFEb2MoIlRlc3RzIGZvciBuaWwgaXRoICIgKyBwcm9wZGVzYyk7Ci0gICAgICAgICAgICAgICAgZW1pdCgicHVibGljIGJvb2xlYW4gaXNOaWwiICsgYXJyYXlOYW1lICsgIihpbnQgaSkiKTsKLSAgICAgICAgICAgICAgICBzdGFydEJsb2NrKCk7Ci0gICAgICAgICAgICAgICAgZW1pdEltcGxlbWVudGF0aW9uUHJlYW1ibGUoKTsKLSAgICAgICAgICAgICAgICBlbWl0R2V0VGFyZ2V0KHNldElkZW50aWZpZXIsIGlkZW50aWZpZXIsIGlzQXR0ciwgImkiLCBUSFJPV19FWENFUFRJT04sIHh0eXBlKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJyZXR1cm4gdGFyZ2V0LmlzTmlsKCk7Iik7Ci0gICAgICAgICAgICAgICAgZW1pdEltcGxlbWVudGF0aW9uUG9zdGFtYmxlKCk7Ci0gICAgICAgICAgICAgICAgZW5kQmxvY2soKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gaW50IGNvdW50UHJvcCgpOwotICAgICAgICAgICAgcHJpbnRKYXZhRG9jKCJSZXR1cm5zIG51bWJlciBvZiAiICsgcHJvcGRlc2MpOwotICAgICAgICAgICAgZW1pdCgicHVibGljIGludCBzaXplT2YiICsgYXJyYXlOYW1lICsgIigpIik7Ci0gICAgICAgICAgICBzdGFydEJsb2NrKCk7Ci0gICAgICAgICAgICBlbWl0SW1wbGVtZW50YXRpb25QcmVhbWJsZSgpOwotICAgICAgICAgICAgZW1pdCgicmV0dXJuIGdldF9zdG9yZSgpLmNvdW50X2VsZW1lbnRzKCIgKyBzZXRJZGVudGlmaWVyICsiKTsiKTsKLSAgICAgICAgICAgIGVtaXRJbXBsZW1lbnRhdGlvblBvc3RhbWJsZSgpOwotICAgICAgICAgICAgZW5kQmxvY2soKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgcHJpbnRTZXR0ZXJJbXBscyhRTmFtZSBxTmFtZSwgYm9vbGVhbiBpc0F0dHIsCi0gICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwcm9wZXJ0eU5hbWUsIGludCBqYXZhVHlwZSwgU3RyaW5nIHR5cGUsIFN0cmluZyB4dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBuaWxsYWJsZSwgYm9vbGVhbiBvcHRpb25hbCwKLSAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBzZXZlcmFsLCBib29sZWFuIHNpbmdsZXRvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc3VuaW9uLAotICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaWRlbnRpZmllciwgU3RyaW5nIHNldElkZW50aWZpZXIpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgU3RyaW5nIHNhZmVWYXJOYW1lID0gTmFtZVV0aWwubm9uSmF2YUtleXdvcmQoTmFtZVV0aWwubG93ZXJDYW1lbENhc2UocHJvcGVydHlOYW1lKSk7Ci0gICAgICAgIGlmIChzYWZlVmFyTmFtZS5lcXVhbHMoImkiKSkKLSAgICAgICAgICAgIHNhZmVWYXJOYW1lID0gImlWYWx1ZSI7Ci0gICAgICAgIGVsc2UgaWYgKHNhZmVWYXJOYW1lLmVxdWFscygidGFyZ2V0IikpCi0gICAgICAgICAgICBzYWZlVmFyTmFtZSA9ICJ0YXJnZXRWYWx1ZSI7Ci0KLSAgICAgICAgYm9vbGVhbiB4bWx0eXBlID0gKGphdmFUeXBlID09IFNjaGVtYVByb3BlcnR5LlhNTF9PQkpFQ1QpOwotICAgICAgICBib29sZWFuIGlzb2JqID0gKGphdmFUeXBlID09IFNjaGVtYVByb3BlcnR5LkpBVkFfT0JKRUNUKTsKLSAgICAgICAgYm9vbGVhbiBpc1N1YnN0R3JvdXAgPSBpZGVudGlmaWVyICE9IHNldElkZW50aWZpZXI7Ci0gICAgICAgIFN0cmluZyBqU2V0ID0ganNldE1ldGhvZChqYXZhVHlwZSk7Ci0gICAgICAgIFN0cmluZyBqdGFyZ2V0VHlwZSA9IChpc3VuaW9uIHx8ICF4bWx0eXBlKSA/ICJvcmcuYXBhY2hlLnhtbGJlYW5zLlNpbXBsZVZhbHVlIiA6IHh0eXBlOwotCi0gICAgICAgIFN0cmluZyBwcm9wZGVzYyA9ICJcIiIgKyBxTmFtZS5nZXRMb2NhbFBhcnQoKSArICJcIiIgKyAoaXNBdHRyID8gIiBhdHRyaWJ1dGUiIDogIiBlbGVtZW50Iik7Ci0KLSAgICAgICAgaWYgKHNpbmdsZXRvbikKLSAgICAgICAgewotICAgICAgICAgICAgLy8gdm9pZCBzZXRQcm9wKFZhbHVlIHYpOwotICAgICAgICAgICAgcHJpbnRKYXZhRG9jKChzZXZlcmFsID8gIlNldHMgZmlyc3QgIiA6ICJTZXRzIHRoZSAiKSArIHByb3BkZXNjKTsKLSAgICAgICAgICAgIGVtaXQoInB1YmxpYyB2b2lkIHNldCIgKyBwcm9wZXJ0eU5hbWUgKyAiKCIgKyB0eXBlICsgIiAiICsgc2FmZVZhck5hbWUgKyAiKSIpOwotICAgICAgICAgICAgc3RhcnRCbG9jaygpOwotICAgICAgICAgICAgZW1pdEltcGxlbWVudGF0aW9uUHJlYW1ibGUoKTsKLSAgICAgICAgICAgIGVtaXRHZXRUYXJnZXQoc2V0SWRlbnRpZmllciwgaWRlbnRpZmllciwgaXNBdHRyLCAiMCIsIEFERF9ORVdfVkFMVUUsIGp0YXJnZXRUeXBlKTsKLSAgICAgICAgICAgIGVtaXQoalNldCArICIoIiArIHNhZmVWYXJOYW1lICsgIik7Iik7Ci0gICAgICAgICAgICBlbWl0SW1wbGVtZW50YXRpb25Qb3N0YW1ibGUoKTsKLSAgICAgICAgICAgIGVuZEJsb2NrKCk7Ci0KLSAgICAgICAgICAgIGlmICgheG1sdHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyB2b2lkIHhzZXRQcm9wKFZhbHVlIHYpCi0gICAgICAgICAgICAgICAgcHJpbnRKYXZhRG9jKChzZXZlcmFsID8gIlNldHMgKGFzIHhtbCkgZmlyc3QgIiA6ICJTZXRzIChhcyB4bWwpIHRoZSAiKSArIHByb3BkZXNjKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJwdWJsaWMgdm9pZCB4c2V0IiArIHByb3BlcnR5TmFtZSArICIoIiArIHh0eXBlICsgIiAiICsgc2FmZVZhck5hbWUgKyAiKSIpOwotICAgICAgICAgICAgICAgIHN0YXJ0QmxvY2soKTsKLSAgICAgICAgICAgICAgICBlbWl0SW1wbGVtZW50YXRpb25QcmVhbWJsZSgpOwotICAgICAgICAgICAgICAgIGVtaXRHZXRUYXJnZXQoc2V0SWRlbnRpZmllciwgaWRlbnRpZmllciwgaXNBdHRyLCAiMCIsIEFERF9ORVdfVkFMVUUsIHh0eXBlKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJ0YXJnZXQuc2V0KCIgKyBzYWZlVmFyTmFtZSArICIpOyIpOwotICAgICAgICAgICAgICAgIGVtaXRJbXBsZW1lbnRhdGlvblBvc3RhbWJsZSgpOwotICAgICAgICAgICAgICAgIGVuZEJsb2NrKCk7Ci0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHhtbHR5cGUgJiYgIXNldmVyYWwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gVmFsdWUgYWRkTmV3UHJvcCgpCi0gICAgICAgICAgICAgICAgcHJpbnRKYXZhRG9jKCJBcHBlbmRzIGFuZCByZXR1cm5zIGEgbmV3IGVtcHR5ICIgKyBwcm9wZGVzYyk7Ci0gICAgICAgICAgICAgICAgZW1pdCgicHVibGljICIgKyB4dHlwZSArICIgYWRkTmV3IiArIHByb3BlcnR5TmFtZSArICIoKSIpOwotICAgICAgICAgICAgICAgIHN0YXJ0QmxvY2soKTsKLSAgICAgICAgICAgICAgICBlbWl0SW1wbGVtZW50YXRpb25QcmVhbWJsZSgpOwotICAgICAgICAgICAgICAgIGVtaXRBZGRUYXJnZXQoaWRlbnRpZmllciwgaXNBdHRyLCB0cnVlLCB4dHlwZSk7Ci0gICAgICAgICAgICAgICAgZW1pdCgicmV0dXJuIHRhcmdldDsiKTsKLSAgICAgICAgICAgICAgICBlbWl0SW1wbGVtZW50YXRpb25Qb3N0YW1ibGUoKTsKLSAgICAgICAgICAgICAgICBlbmRCbG9jaygpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobmlsbGFibGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRKYXZhRG9jKChzZXZlcmFsID8gIk5pbHMgdGhlIGZpcnN0ICIgOiAiTmlscyB0aGUgIikgKyBwcm9wZGVzYyk7Ci0gICAgICAgICAgICAgICAgZW1pdCgicHVibGljIHZvaWQgc2V0TmlsIiArIHByb3BlcnR5TmFtZSArICIoKSIpOwotICAgICAgICAgICAgICAgIHN0YXJ0QmxvY2soKTsKLSAgICAgICAgICAgICAgICBlbWl0SW1wbGVtZW50YXRpb25QcmVhbWJsZSgpOwotICAgICAgICAgICAgICAgIGVtaXRHZXRUYXJnZXQoc2V0SWRlbnRpZmllciwgaWRlbnRpZmllciwgaXNBdHRyLCAiMCIsIEFERF9ORVdfVkFMVUUsIHh0eXBlKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJ0YXJnZXQuc2V0TmlsKCk7Iik7Ci0gICAgICAgICAgICAgICAgZW1pdEltcGxlbWVudGF0aW9uUG9zdGFtYmxlKCk7Ci0gICAgICAgICAgICAgICAgZW5kQmxvY2soKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChvcHRpb25hbCkKLSAgICAgICAgewotICAgICAgICAgICAgcHJpbnRKYXZhRG9jKChzZXZlcmFsID8gIlJlbW92ZXMgZmlyc3QgIiA6ICJVbnNldHMgdGhlICIpICsgcHJvcGRlc2MpOwotICAgICAgICAgICAgZW1pdCgicHVibGljIHZvaWQgdW5zZXQiICsgcHJvcGVydHlOYW1lICsgIigpIik7Ci0gICAgICAgICAgICBzdGFydEJsb2NrKCk7Ci0gICAgICAgICAgICBlbWl0SW1wbGVtZW50YXRpb25QcmVhbWJsZSgpOwotICAgICAgICAgICAgaWYgKGlzQXR0cikKLSAgICAgICAgICAgICAgICBlbWl0KCJnZXRfc3RvcmUoKS5yZW1vdmVfYXR0cmlidXRlKCIgKyBpZGVudGlmaWVyICsgIik7Iik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdCgiZ2V0X3N0b3JlKCkucmVtb3ZlX2VsZW1lbnQoIiArIHNldElkZW50aWZpZXIgKyAiLCAwKTsiKTsKLSAgICAgICAgICAgIGVtaXRJbXBsZW1lbnRhdGlvblBvc3RhbWJsZSgpOwotICAgICAgICAgICAgZW5kQmxvY2soKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzZXZlcmFsKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgYXJyYXlOYW1lID0gcHJvcGVydHlOYW1lICsgIkFycmF5IjsKLQotICAgICAgICAgICAgLy8gSlNFVF9JTkRFWAotICAgICAgICAgICAgcHJpbnRKYXZhRG9jKCJTZXRzIGFycmF5IG9mIGFsbCAiICsgcHJvcGRlc2MpOwotICAgICAgICAgICAgZW1pdCgicHVibGljIHZvaWQgc2V0IiArIGFycmF5TmFtZSArICIoIiArIHR5cGUgKyAiW10gIiArIHNhZmVWYXJOYW1lICsgIkFycmF5KSIpOwotICAgICAgICAgICAgc3RhcnRCbG9jaygpOwotICAgICAgICAgICAgZW1pdEltcGxlbWVudGF0aW9uUHJlYW1ibGUoKTsKLQotICAgICAgICAgICAgaWYgKGlzb2JqKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghaXNTdWJzdEdyb3VwKQotICAgICAgICAgICAgICAgICAgICBlbWl0KCJ1bmlvbkFycmF5U2V0dGVySGVscGVyKCIgKyBzYWZlVmFyTmFtZSArICJBcnJheSIgKyAiLCAiICsgaWRlbnRpZmllciArICIpOyIgKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXQoInVuaW9uQXJyYXlTZXR0ZXJIZWxwZXIoIiArIHNhZmVWYXJOYW1lICsgIkFycmF5IiArICIsICIgKyBpZGVudGlmaWVyICsgIiwgIiArIHNldElkZW50aWZpZXIgKyAiKTsiICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc1N1YnN0R3JvdXApCi0gICAgICAgICAgICAgICAgICAgIGVtaXQoImFycmF5U2V0dGVySGVscGVyKCIgKyBzYWZlVmFyTmFtZSArICJBcnJheSIgKyAiLCAiICsgaWRlbnRpZmllciArICIpOyIgKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGVtaXQoImFycmF5U2V0dGVySGVscGVyKCIgKyBzYWZlVmFyTmFtZSArICJBcnJheSIgKyAiLCAiICsgaWRlbnRpZmllciArICIsICIgKyBzZXRJZGVudGlmaWVyICsgIik7IiApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZW1pdEltcGxlbWVudGF0aW9uUG9zdGFtYmxlKCk7Ci0gICAgICAgICAgICBlbmRCbG9jaygpOwotCi0gICAgICAgICAgICBwcmludEphdmFEb2MoIlNldHMgaXRoICIgKyBwcm9wZGVzYyk7Ci0gICAgICAgICAgICBlbWl0KCJwdWJsaWMgdm9pZCBzZXQiICsgYXJyYXlOYW1lICsgIihpbnQgaSwgIiArIHR5cGUgKyAiICIgKyBzYWZlVmFyTmFtZSArICIpIik7Ci0gICAgICAgICAgICBzdGFydEJsb2NrKCk7Ci0gICAgICAgICAgICBlbWl0SW1wbGVtZW50YXRpb25QcmVhbWJsZSgpOwotICAgICAgICAgICAgZW1pdEdldFRhcmdldChzZXRJZGVudGlmaWVyLCBpZGVudGlmaWVyLCBpc0F0dHIsICJpIiwgVEhST1dfRVhDRVBUSU9OLCBqdGFyZ2V0VHlwZSk7Ci0gICAgICAgICAgICBlbWl0KGpTZXQgKyAiKCIgKyBzYWZlVmFyTmFtZSArICIpOyIpOwotICAgICAgICAgICAgZW1pdEltcGxlbWVudGF0aW9uUG9zdGFtYmxlKCk7Ci0gICAgICAgICAgICBlbmRCbG9jaygpOwotCi0gICAgICAgICAgICBpZiAoIXhtbHR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRKYXZhRG9jKCJTZXRzIChhcyB4bWwpIGFycmF5IG9mIGFsbCAiICsgcHJvcGRlc2MpOwotICAgICAgICAgICAgICAgIGVtaXQoInB1YmxpYyB2b2lkIHhzZXQiICsgYXJyYXlOYW1lICsgIigiICsgeHR5cGUgKyAiW10iICsgc2FmZVZhck5hbWUgKyAiQXJyYXkpIik7Ci0gICAgICAgICAgICAgICAgc3RhcnRCbG9jaygpOwotICAgICAgICAgICAgICAgIGVtaXRJbXBsZW1lbnRhdGlvblByZWFtYmxlKCk7Ci0gICAgICAgICAgICAgICAgZW1pdCgiYXJyYXlTZXR0ZXJIZWxwZXIoIiArIHNhZmVWYXJOYW1lICsgIkFycmF5IiArICIsICIgKyBpZGVudGlmaWVyICsgIik7IiApOwotCi0gICAgICAgICAgICAgICAgZW1pdEltcGxlbWVudGF0aW9uUG9zdGFtYmxlKCk7Ci0gICAgICAgICAgICAgICAgZW5kQmxvY2soKTsKLQotICAgICAgICAgICAgICAgIHByaW50SmF2YURvYygiU2V0cyAoYXMgeG1sKSBpdGggIiArIHByb3BkZXNjKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJwdWJsaWMgdm9pZCB4c2V0IiArIGFycmF5TmFtZSArICIoaW50IGksICIgKyB4dHlwZSArICIgIiArIHNhZmVWYXJOYW1lICsgIikiKTsKLSAgICAgICAgICAgICAgICBzdGFydEJsb2NrKCk7Ci0gICAgICAgICAgICAgICAgZW1pdEltcGxlbWVudGF0aW9uUHJlYW1ibGUoKTsKLSAgICAgICAgICAgICAgICBlbWl0R2V0VGFyZ2V0KHNldElkZW50aWZpZXIsIGlkZW50aWZpZXIsIGlzQXR0ciwgImkiLCBUSFJPV19FWENFUFRJT04sIHh0eXBlKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJ0YXJnZXQuc2V0KCIgKyBzYWZlVmFyTmFtZSArICIpOyIpOwotICAgICAgICAgICAgICAgIGVtaXRJbXBsZW1lbnRhdGlvblBvc3RhbWJsZSgpOwotICAgICAgICAgICAgICAgIGVuZEJsb2NrKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChuaWxsYWJsZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcmludEphdmFEb2MoIk5pbHMgdGhlIGl0aCAiICsgcHJvcGRlc2MpOwotICAgICAgICAgICAgICAgIGVtaXQoInB1YmxpYyB2b2lkIHNldE5pbCIgKyBhcnJheU5hbWUgKyAiKGludCBpKSIpOwotICAgICAgICAgICAgICAgIHN0YXJ0QmxvY2soKTsKLSAgICAgICAgICAgICAgICBlbWl0SW1wbGVtZW50YXRpb25QcmVhbWJsZSgpOwotICAgICAgICAgICAgICAgIGVtaXRHZXRUYXJnZXQoc2V0SWRlbnRpZmllciwgaWRlbnRpZmllciwgaXNBdHRyLCAiaSIsIFRIUk9XX0VYQ0VQVElPTiwgeHR5cGUpOwotICAgICAgICAgICAgICAgIGVtaXQoInRhcmdldC5zZXROaWwoKTsiKTsKLSAgICAgICAgICAgICAgICBlbWl0SW1wbGVtZW50YXRpb25Qb3N0YW1ibGUoKTsKLSAgICAgICAgICAgICAgICBlbmRCbG9jaygpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXhtbHR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRKYXZhRG9jKCJJbnNlcnRzIHRoZSB2YWx1ZSBhcyB0aGUgaXRoICIgKyBwcm9wZGVzYyk7Ci0gICAgICAgICAgICAgICAgZW1pdCgicHVibGljIHZvaWQgaW5zZXJ0IiArIHByb3BlcnR5TmFtZSArICIoaW50IGksICIgKyB0eXBlICsgIiAiICsgc2FmZVZhck5hbWUgKyAiKSIpOwotICAgICAgICAgICAgICAgIHN0YXJ0QmxvY2soKTsKLSAgICAgICAgICAgICAgICBlbWl0SW1wbGVtZW50YXRpb25QcmVhbWJsZSgpOwotICAgICAgICAgICAgICAgIGVtaXQoanRhcmdldFR5cGUgKyAiIHRhcmdldCA9ICIpOwotICAgICAgICAgICAgICAgIGluZGVudCgpOwotICAgICAgICAgICAgICAgIGlmICghaXNTdWJzdEdyb3VwKQotICAgICAgICAgICAgICAgICAgICBlbWl0KCIoIiArIGp0YXJnZXRUeXBlICsgIilnZXRfc3RvcmUoKS5pbnNlcnRfZWxlbWVudF91c2VyKCIgKyBpZGVudGlmaWVyICsgIiwgaSk7Iik7Ci0gICAgICAgICAgICAgICAgZWxzZSAvLyBUaGlzIGlzIGEgc3Vic3QgZ3JvdXAgY2FzZQotICAgICAgICAgICAgICAgICAgICBlbWl0ICgiKCIgKyBqdGFyZ2V0VHlwZSArIilnZXRfc3RvcmUoKS5pbnNlcnRfZWxlbWVudF91c2VyKCIgKyBzZXRJZGVudGlmaWVyICsgIiwgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllciArICIsIGkpOyIpOwotICAgICAgICAgICAgICAgIG91dGRlbnQoKTsKLSAgICAgICAgICAgICAgICBlbWl0KGpTZXQgKyAiKCIgKyBzYWZlVmFyTmFtZSArICIpOyIpOwotICAgICAgICAgICAgICAgIGVtaXRJbXBsZW1lbnRhdGlvblBvc3RhbWJsZSgpOwotICAgICAgICAgICAgICAgIGVuZEJsb2NrKCk7Ci0KLSAgICAgICAgICAgICAgICBwcmludEphdmFEb2MoIkFwcGVuZHMgdGhlIHZhbHVlIGFzIHRoZSBsYXN0ICIgKyBwcm9wZGVzYyk7Ci0gICAgICAgICAgICAgICAgZW1pdCgicHVibGljIHZvaWQgYWRkIiArIHByb3BlcnR5TmFtZSArICIoIiArIHR5cGUgKyAiICIgKyBzYWZlVmFyTmFtZSArICIpIik7Ci0gICAgICAgICAgICAgICAgc3RhcnRCbG9jaygpOwotICAgICAgICAgICAgICAgIGVtaXRJbXBsZW1lbnRhdGlvblByZWFtYmxlKCk7Ci0gICAgICAgICAgICAgICAgZW1pdEFkZFRhcmdldChpZGVudGlmaWVyLCBpc0F0dHIsIHRydWUsIGp0YXJnZXRUeXBlKTsKLSAgICAgICAgICAgICAgICBlbWl0KGpTZXQgKyAiKCIgKyBzYWZlVmFyTmFtZSArICIpOyIpOwotICAgICAgICAgICAgICAgIGVtaXRJbXBsZW1lbnRhdGlvblBvc3RhbWJsZSgpOwotICAgICAgICAgICAgICAgIGVuZEJsb2NrKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh4bWx0eXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByaW50SmF2YURvYygiSW5zZXJ0cyBhbmQgcmV0dXJucyBhIG5ldyBlbXB0eSB2YWx1ZSAoYXMgeG1sKSBhcyB0aGUgaXRoICIgKyBwcm9wZGVzYyk7Ci0gICAgICAgICAgICAgICAgZW1pdCgicHVibGljICIgKyB4dHlwZSArICIgaW5zZXJ0TmV3IiArIHByb3BlcnR5TmFtZSArICIoaW50IGkpIik7Ci0gICAgICAgICAgICAgICAgc3RhcnRCbG9jaygpOwotICAgICAgICAgICAgICAgIGVtaXRJbXBsZW1lbnRhdGlvblByZWFtYmxlKCk7Ci0gICAgICAgICAgICAgICAgZW1pdCh4dHlwZSArICIgdGFyZ2V0OyIpOwotICAgICAgICAgICAgICAgIGVtaXQoInRhcmdldCA9ICgiICsgeHR5cGUgKyAiKWdldF9zdG9yZSgpLmluc2VydF9lbGVtZW50X3VzZXIoIiArIGlkZW50aWZpZXIgKyAiLCBpKTsiKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJyZXR1cm4gdGFyZ2V0OyIpOwotICAgICAgICAgICAgICAgIGVtaXRJbXBsZW1lbnRhdGlvblBvc3RhbWJsZSgpOwotICAgICAgICAgICAgICAgIGVuZEJsb2NrKCk7Ci0gICAgCi0gICAgICAgICAgICAgICAgcHJpbnRKYXZhRG9jKCJBcHBlbmRzIGFuZCByZXR1cm5zIGEgbmV3IGVtcHR5IHZhbHVlIChhcyB4bWwpIGFzIHRoZSBsYXN0ICIgKyBwcm9wZGVzYyk7Ci0gICAgICAgICAgICAgICAgZW1pdCgicHVibGljICIgKyB4dHlwZSArICIgYWRkTmV3IiArIHByb3BlcnR5TmFtZSArICIoKSIpOwotICAgICAgICAgICAgICAgIHN0YXJ0QmxvY2soKTsKLSAgICAgICAgICAgICAgICBlbWl0SW1wbGVtZW50YXRpb25QcmVhbWJsZSgpOwotICAgICAgICAgICAgICAgIGVtaXRBZGRUYXJnZXQoaWRlbnRpZmllciwgaXNBdHRyLCB0cnVlLCB4dHlwZSk7Ci0gICAgICAgICAgICAgICAgZW1pdCgicmV0dXJuIHRhcmdldDsiKTsKLSAgICAgICAgICAgICAgICBlbWl0SW1wbGVtZW50YXRpb25Qb3N0YW1ibGUoKTsKLSAgICAgICAgICAgICAgICBlbmRCbG9jaygpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcmludEphdmFEb2MoIlJlbW92ZXMgdGhlIGl0aCAiICsgcHJvcGRlc2MpOwotICAgICAgICAgICAgZW1pdCgicHVibGljIHZvaWQgcmVtb3ZlIiArIHByb3BlcnR5TmFtZSArICIoaW50IGkpIik7Ci0gICAgICAgICAgICBzdGFydEJsb2NrKCk7Ci0gICAgICAgICAgICBlbWl0SW1wbGVtZW50YXRpb25QcmVhbWJsZSgpOwotICAgICAgICAgICAgZW1pdCgiZ2V0X3N0b3JlKCkucmVtb3ZlX2VsZW1lbnQoIiArIHNldElkZW50aWZpZXIgKyAiLCBpKTsiKTsKLSAgICAgICAgICAgIGVtaXRJbXBsZW1lbnRhdGlvblBvc3RhbWJsZSgpOwotICAgICAgICAgICAgZW5kQmxvY2soKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGdldFR5cGVOYW1lKENsYXNzIGMsIFN0cmluZ0J1ZmZlciBzYikgewotICAgICAgICBpbnQgYXJyYXlDb3VudCA9IDA7Ci0gICAgICAgIHdoaWxlIChjLmlzQXJyYXkoKSkgewotICAgICAgICAgICAgYyA9IGMuZ2V0Q29tcG9uZW50VHlwZSgpOwotICAgICAgICAgICAgYXJyYXlDb3VudCsrOwotICAgICAgICB9Ci0KLSAgICAgICAgc2IuYXBwZW5kKGMuZ2V0TmFtZSgpKTsKLQotICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCBhcnJheUNvdW50OyBpKyspCi0gICAgICAgICAgICBzYi5hcHBlbmQoIltdIik7Ci0KLSAgICB9Ci0KLSAgICB2b2lkIHByaW50SW5uZXJUeXBlSW1wbCgKLSAgICAgICAgU2NoZW1hVHlwZSBzVHlwZSwgU2NoZW1hVHlwZVN5c3RlbSBzeXN0ZW0sIGJvb2xlYW4gaXNJbm5lciApIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgU3RyaW5nIHNob3J0TmFtZSA9IHNUeXBlLmdldFNob3J0SmF2YUltcGxOYW1lKCk7Ci0KLSAgICAgICAgcHJpbnRJbm5lclR5cGVKYXZhRG9jKHNUeXBlKTsKLQotICAgICAgICBzdGFydENsYXNzKHNUeXBlLCBpc0lubmVyKTsKLQotICAgICAgICBwcmludENvbnN0cnVjdG9yKHNUeXBlLCBzaG9ydE5hbWUpOwotCi0gICAgICAgIGlmICghc1R5cGUuaXNTaW1wbGVUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYVByb3BlcnR5W10gcHJvcGVydGllczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHNUeXBlLmdldENvbnRlbnRUeXBlKCkgPT0gU2NoZW1hVHlwZS5TSU1QTEVfQ09OVEVOVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBzaW1wbGUgY29udGVudCB0eXBlcyBpbXBscyBkZXJpdmUgZGlyZWN0bHkgZnJvbSAiaG9sZGVyIiBpbXBscwotICAgICAgICAgICAgICAgIC8vIGluIG9yZGVyIHRvIGhhbmRsZSB0aGUgY2FzZSAoZm9yIGludHMgb3Igc3RyaW5nIGVudW1zIGUuZy4pIHdoZXJlCi0gICAgICAgICAgICAgICAgLy8gdGhlcmUgaXMgYSBzaW1wbGUgdHlwZSByZXN0cmljdGlvbi4gIFNvIHByb3BlcnR5IGdldHRlcnMgbmVlZCB0bwotICAgICAgICAgICAgICAgIC8vIGJlIGltcGxlbWVudGVkICJmcm9tIHNjcmF0Y2giIGZvciBlYWNoIGRlcml2ZWQgY29tcGxleCB0eXBlCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHNUeXBlLmdldFByb3BlcnRpZXMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBjb21wbGV4IGNvbnRlbnQgdHlwZSBpbXBsZW1lbnRhdGlvbnMgZGVyaXZlIGZyb20gYmFzZSB0eXBlIGltcGxzCi0gICAgICAgICAgICAgICAgLy8gc28gZGVyaXZlZCBwcm9wZXJ0eSBpbXBscyBjYW4gYmUgcmV1c2VkCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcHJvcGVydGllcyA9IHNUeXBlLmdldERlcml2ZWRQcm9wZXJ0aWVzKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hcCBxTmFtZU1hcCA9IHByaW50U3RhdGljRmllbGRzKHByb3BlcnRpZXMpOwotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2NoZW1hUHJvcGVydHkgcHJvcCA9IHByb3BlcnRpZXNbaV07Ci0KLSAgICAgICAgICAgICAgICBRTmFtZSBuYW1lID0gcHJvcC5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHhtbFR5cGUgPSB4bWxUeXBlRm9yUHJvcGVydHkoIHByb3AgKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBwcmludEdldHRlckltcGxzKAotICAgICAgICAgICAgICAgICAgICBwcm9wLAotICAgICAgICAgICAgICAgICAgICBuYW1lLAotICAgICAgICAgICAgICAgICAgICBwcm9wLmlzQXR0cmlidXRlKCksCi0gICAgICAgICAgICAgICAgICAgIHByb3AuZ2V0SmF2YVByb3BlcnR5TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICBwcm9wLmdldEphdmFUeXBlQ29kZSgpLAotICAgICAgICAgICAgICAgICAgICBqYXZhVHlwZUZvclByb3BlcnR5KHByb3ApLAotICAgICAgICAgICAgICAgICAgICB4bWxUeXBlLAotICAgICAgICAgICAgICAgICAgICBwcm9wLmhhc05pbGxhYmxlKCkgIT0gU2NoZW1hUHJvcGVydHkuTkVWRVIsCi0gICAgICAgICAgICAgICAgICAgIHByb3AuZXh0ZW5kc0phdmFPcHRpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgcHJvcC5leHRlbmRzSmF2YUFycmF5KCksCi0gICAgICAgICAgICAgICAgICAgIHByb3AuZXh0ZW5kc0phdmFTaW5nbGV0b24oKSwKLSAgICAgICAgICAgICAgICAgICAgeG1sVHlwZUZvclByb3BlcnR5SXNVbmlvbihwcm9wKSwKLSAgICAgICAgICAgICAgICAgICAgZ2V0SWRlbnRpZmllcihxTmFtZU1hcCwgbmFtZSksCi0gICAgICAgICAgICAgICAgICAgIGdldFNldElkZW50aWZpZXIocU5hbWVNYXAsIG5hbWUpCi0gICAgICAgICAgICAgICAgKTsKLQotICAgICAgICAgICAgICAgIGlmICghcHJvcC5pc1JlYWRPbmx5KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBwcmludFNldHRlckltcGxzKAotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3AuaXNBdHRyaWJ1dGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3AuZ2V0SmF2YVByb3BlcnR5TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcC5nZXRKYXZhVHlwZUNvZGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGphdmFUeXBlRm9yUHJvcGVydHkocHJvcCksCi0gICAgICAgICAgICAgICAgICAgICAgICB4bWxUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcC5oYXNOaWxsYWJsZSgpICE9IFNjaGVtYVByb3BlcnR5Lk5FVkVSLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcC5leHRlbmRzSmF2YU9wdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcC5leHRlbmRzSmF2YUFycmF5KCksCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wLmV4dGVuZHNKYXZhU2luZ2xldG9uKCksCi0gICAgICAgICAgICAgICAgICAgICAgICB4bWxUeXBlRm9yUHJvcGVydHlJc1VuaW9uKHByb3ApLAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SWRlbnRpZmllcihxTmFtZU1hcCwgbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICBnZXRTZXRJZGVudGlmaWVyKHFOYW1lTWFwLCBuYW1lKQotICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaW50TmVzdGVkVHlwZUltcGxzKHNUeXBlLCBzeXN0ZW0pOwotCi0gICAgICAgIGVuZEJsb2NrKCk7Ci0gICAgfQotICAgIHZvaWQgcHJpbnROZXN0ZWRUeXBlSW1wbHMoU2NoZW1hVHlwZSBzVHlwZSwgU2NoZW1hVHlwZVN5c3RlbSBzeXN0ZW0pIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgU2NoZW1hVHlwZVtdIGFub25UeXBlcyA9IHNUeXBlLmdldEFub255bW91c1R5cGVzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYW5vblR5cGVzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYW5vblR5cGVzW2ldLmlzU2tpcHBlZEFub255bW91c1R5cGUoKSkKLSAgICAgICAgICAgICAgICBwcmludE5lc3RlZFR5cGVJbXBscyhhbm9uVHlwZXNbaV0sIHN5c3RlbSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcHJpbnRJbm5lclR5cGVJbXBsKGFub25UeXBlc1tpXSwgc3lzdGVtLCB0cnVlKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1NjaGVtYVR5cGVJbXBsLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TY2hlbWFUeXBlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTNiNTNlLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1NjaGVtYVR5cGVJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDAwICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnNjaGVtYTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuKjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwucmVnZXguUmVndWxhckV4cHJlc3Npb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5RTmFtZUhlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUdsb2JhbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFGaWVsZDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQYXJ0aWNsZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUdsb2JhbEF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUF0dHJpYnV0ZU1vZGVsOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVN5c3RlbTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVByb3BlcnR5OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFMb2NhbEF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUxvY2FsRWxlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hU3RyaW5nRW51bUVudHJ5OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlcjsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkNvbnN0cnVjdG9yOwotaW1wb3J0IGphdmEudXRpbC4qOwotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotcHVibGljIGZpbmFsIGNsYXNzIFNjaGVtYVR5cGVJbXBsIGltcGxlbWVudHMgU2NoZW1hVHlwZSwgVHlwZVN0b3JlVXNlckZhY3RvcnkKLXsKLSAgICAvLyBnbG9iYWwgdHlwZXMgaGF2ZSBuYW1lcwotICAgIHByaXZhdGUgUU5hbWUgX25hbWU7Ci0KLSAgICAvLyBjb21waWxhdGlvbiBzdXBwb3J0Ci0gICAgcHJpdmF0ZSBpbnQgX3Jlc29sdmVQaGFzZTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVU5SRVNPTFZFRCA9IDA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJFU09MVklOR19TR1MgPSAxOyAvLyBGb3IgZG9jdW1lbnQgdHlwZXMgb25seQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBSRVNPTFZFRF9TR1MgPSAyOyAgLy8gRm9yIGRvY3VtZW50IHR5cGVzIG9ubHkKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUkVTT0xWSU5HID0gMzsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUkVTT0xWRUQgPSA0OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBKQVZBSVpJTkcgPSA1OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBKQVZBSVpFRCA9IDY7Ci0KLSAgICAvLyBhbm9ueW1vdXMgdHlwZSBzdXBwb3J0Ci0gICAgcHJpdmF0ZSBTY2hlbWFUeXBlLlJlZiBfb3V0ZXJTY2hlbWFUeXBlUmVmOwotICAgIHByaXZhdGUgdm9sYXRpbGUgU2NoZW1hQ29tcG9uZW50LlJlZiBfY29udGFpbmVyRmllbGRSZWY7Ci0gICAgcHJpdmF0ZSB2b2xhdGlsZSBTY2hlbWFGaWVsZCBfY29udGFpbmVyRmllbGQ7Ci0gICAgcHJpdmF0ZSB2b2xhdGlsZSBpbnQgX2NvbnRhaW5lckZpZWxkQ29kZTsKLSAgICBwcml2YXRlIHZvbGF0aWxlIGludCBfY29udGFpbmVyRmllbGRJbmRleDsKLSAgICBwcml2YXRlIFNjaGVtYVR5cGUuUmVmW10gX2Fub255bW91c1R5cGVyZWZzOwotICAgIHByaXZhdGUgYm9vbGVhbiBfaXNEb2N1bWVudFR5cGU7Ci0gICAgcHJpdmF0ZSBib29sZWFuIF9pc0F0dHJpYnV0ZVR5cGU7Ci0gICAgLy8gcHJpdmF0ZSBib29sZWFuIF9za2lwcGVkQW5vbnltb3VzVHlwZTsKLQotICAgIC8vIGNvbXBpbGV0aW1lIGphdmEgdHlwZSBzdXBwb3J0Ci0gICAgcHJpdmF0ZSBib29sZWFuIF9pc0NvbXBpbGVkOwotICAgIHByaXZhdGUgU3RyaW5nIF9zaG9ydEphdmFOYW1lOwotICAgIHByaXZhdGUgU3RyaW5nIF9mdWxsSmF2YU5hbWU7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgX3Nob3J0SmF2YUltcGxOYW1lOwotICAgIHByaXZhdGUgU3RyaW5nIF9mdWxsSmF2YUltcGxOYW1lOwotCi0gICAgLy8gcnVudGltZSBqYXZhIHR5cGUgc3VwcG9ydDogdm9sYXRpbGUgYmVjYXVzZSB0aGV5J3JlIGNhY2hlZAotICAgIHByaXZhdGUgdm9sYXRpbGUgQ2xhc3MgX2phdmFDbGFzczsKLSAgICBwcml2YXRlIHZvbGF0aWxlIENsYXNzIF9qYXZhRW51bUNsYXNzOwotICAgIHByaXZhdGUgdm9sYXRpbGUgQ2xhc3MgX2phdmFJbXBsQ2xhc3M7Ci0gICAgcHJpdmF0ZSB2b2xhdGlsZSBDb25zdHJ1Y3RvciBfamF2YUltcGxDb25zdHJ1Y3RvcjsKLSAgICBwcml2YXRlIHZvbGF0aWxlIENvbnN0cnVjdG9yIF9qYXZhSW1wbENvbnN0cnVjdG9yMjsKLSAgICBwcml2YXRlIHZvbGF0aWxlIGJvb2xlYW4gX2ltcGxOb3RBdmFpbGFibGU7Ci0KLSAgICBwcml2YXRlIGZpbmFsIE9iamVjdFtdIF9jdHJBcmdzID0gbmV3IE9iamVjdFtdIHsgdGhpcyB9OwotCi0gICAgLy8gcmVmbGVjdGl2ZSBzdXBwb3J0Ci0gICAgcHJpdmF0ZSBTY2hlbWFUeXBlU3lzdGVtIF90eXBlU3lzdGVtOwotICAgIHByaXZhdGUgU3RyaW5nIF9maWxlbmFtZTsKLQotICAgIC8vIGNvbXBsZXggY29udGVudCBzdXBwb3J0Ci0gICAgcHJpdmF0ZSBTY2hlbWFQYXJ0aWNsZSBfY29udGVudE1vZGVsOwotICAgIHByaXZhdGUgdm9sYXRpbGUgU2NoZW1hTG9jYWxFbGVtZW50W10gX2xvY2FsRWx0czsgLy8gbGF6aWx5IGNvbXB1dGVkCi0gICAgcHJpdmF0ZSB2b2xhdGlsZSBNYXAgX2VsdFRvSW5kZXhNYXA7IC8vIGxhemlseSBjb21wdXRlZAotICAgIHByaXZhdGUgdm9sYXRpbGUgTWFwIF9hdHRyVG9JbmRleE1hcDsgLy8gbGF6aWx5IGNvbXB1dGVkCi0gICAgcHJpdmF0ZSBNYXAgX3Byb3BlcnR5TW9kZWxCeUVsZW1lbnROYW1lOwotICAgIHByaXZhdGUgTWFwIF9wcm9wZXJ0eU1vZGVsQnlBdHRyaWJ1dGVOYW1lOwotICAgIHByaXZhdGUgYm9vbGVhbiBfaGFzQWxsQ29udGVudDsKLSAgICBwcml2YXRlIGJvb2xlYW4gX29yZGVyU2Vuc2l0aXZlOwotICAgIHByaXZhdGUgUU5hbWVTZXQgX3R5cGVkV2lsZGNhcmRFbGVtZW50czsKLSAgICBwcml2YXRlIFFOYW1lU2V0IF90eXBlZFdpbGRjYXJkQXR0cmlidXRlczsKLSAgICBwcml2YXRlIGJvb2xlYW4gX2hhc1dpbGRjYXJkRWxlbWVudHM7Ci0gICAgcHJpdmF0ZSBib29sZWFuIF9oYXNXaWxkY2FyZEF0dHJpYnV0ZXM7Ci0gICAgLy8gc2V0IG9mIHZhbGlkIFFOYW1lcyB0aGF0IGNhbiBiZSBzdWJzdGl0dXRlZCBmb3IgYSBwcm9wZXJ0eQotICAgIHByaXZhdGUgU2V0IF92YWxpZFN1YnN0aXR1dGlvbnMgPSBDb2xsZWN0aW9ucy5FTVBUWV9TRVQ7Ci0KLSAgICAvLyBzaW1wbGUgY29udGVudCBzdXBwb3J0Ci0gICAgcHJpdmF0ZSBpbnQgX2NvbXBsZXhUeXBlVmFyaWV0eTsKLSAgICBwcml2YXRlIFNjaGVtYUF0dHJpYnV0ZU1vZGVsIF9hdHRyaWJ1dGVNb2RlbDsKLQotICAgIC8vIHNpbXBsZSB0eXBlIHN1cHBvcnQKLSAgICBwcml2YXRlIGludCBfYnVpbHRpblR5cGVDb2RlOwotCi0gICAgcHJpdmF0ZSBpbnQgX3NpbXBsZVR5cGVWYXJpZXR5OwotICAgIHByaXZhdGUgYm9vbGVhbiBfaXNTaW1wbGVUeXBlOwotCi0gICAgcHJpdmF0ZSBTY2hlbWFUeXBlLlJlZiBfYmFzZVR5cGVyZWY7IC8vIHZpYSByZXN0cmljdGlvbiBvciBleHRlbnNpb24KLSAgICBwcml2YXRlIGludCBfYmFzZURlcHRoOyAvLyBob3cgbWFueSBpbmhlcml0YW5jZSBzdGVwcyB0byBBbnlUeXBlCi0gICAgcHJpdmF0ZSBpbnQgX2Rlcml2YXRpb25UeXBlOwotCi0gICAgLy8gZmFjZXRzCi0gICAgcHJpdmF0ZSBYbWxWYWx1ZVJlZltdIF9mYWNldEFycmF5OwotICAgIHByaXZhdGUgYm9vbGVhbltdIF9maXhlZEZhY2V0QXJyYXk7Ci0KLSAgICAvLyBmdW5kYW1lbnRhbCBmYWNldHMKLSAgICBwcml2YXRlIGludCBfb3JkZXJlZDsKLSAgICBwcml2YXRlIGJvb2xlYW4gX2lzRmluaXRlOwotICAgIHByaXZhdGUgYm9vbGVhbiBfaXNCb3VuZGVkOwotICAgIHByaXZhdGUgYm9vbGVhbiBfaXNOdW1lcmljOwotCi0gICAgcHJpdmF0ZSBib29sZWFuIF9hYnM7Ci0gICAgcHJpdmF0ZSBib29sZWFuIF9maW5hbEV4dDsKLSAgICBwcml2YXRlIGJvb2xlYW4gX2ZpbmFsUmVzdDsKLSAgICBwcml2YXRlIGJvb2xlYW4gX2ZpbmFsTGlzdDsKLSAgICBwcml2YXRlIGJvb2xlYW4gX2ZpbmFsVW5pb247Ci0gICAgcHJpdmF0ZSBib29sZWFuIF9ibG9ja0V4dDsKLSAgICBwcml2YXRlIGJvb2xlYW4gX2Jsb2NrUmVzdDsKLQotICAgIC8vIHdoaXRlc3BhY2UgZmFjZXQKLSAgICBwcml2YXRlIGludCBfd2hpdGVTcGFjZVJ1bGU7Ci0KLSAgICAvLyByZWdleCBwYXR0ZXJucwotICAgIHByaXZhdGUgYm9vbGVhbiBfaGFzUGF0dGVybnM7IC8vIGFsc28gdGFrZXMgaW50byBhY2NvdW50IGJhc2UgY2xhc3NlcwotICAgIHByaXZhdGUgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnJlZ2V4LlJlZ3VsYXJFeHByZXNzaW9uW10gX3BhdHRlcm5zOwotCi0gICAgLy8gZW51bWVyYXRlZCB2YWx1ZXMKLSAgICBwcml2YXRlIFhtbFZhbHVlUmVmW10gX2VudW1lcmF0aW9uVmFsdWVzOwotICAgIHByaXZhdGUgU2NoZW1hVHlwZS5SZWYgX2Jhc2VFbnVtVHlwZXJlZjsKLSAgICBwcml2YXRlIGJvb2xlYW4gX3N0cmluZ0VudW1FbnN1cmVkOwotICAgIHByaXZhdGUgdm9sYXRpbGUgTWFwIF9sb29rdXBTdHJpbmdFbnVtOwotICAgIHByaXZhdGUgdm9sYXRpbGUgTGlzdCBfbGlzdE9mU3RyaW5nRW51bTsKLSAgICBwcml2YXRlIHZvbGF0aWxlIE1hcCBfbG9va3VwU3RyaW5nRW51bUVudHJ5OwotICAgIHByaXZhdGUgU2NoZW1hU3RyaW5nRW51bUVudHJ5W10gX3N0cmluZ0VudW1FbnRyaWVzOwotCi0gICAgLy8gZm9yIGxpc3RzIG9ubHkKLSAgICBwcml2YXRlIFNjaGVtYVR5cGUuUmVmIF9saXN0SXRlbVR5cGVyZWY7Ci0KLSAgICAvLyBmb3IgdW5pb25zIG9ubHkKLSAgICBwcml2YXRlIGJvb2xlYW4gX2lzVW5pb25PZkxpc3RzOwotICAgIHByaXZhdGUgU2NoZW1hVHlwZS5SZWZbXSBfdW5pb25NZW1iZXJUeXBlcmVmczsKLSAgICBwcml2YXRlIGludCBfYW5vbnltb3VzVW5pb25NZW1iZXJPcmRpbmFsOwotICAgIHByaXZhdGUgdm9sYXRpbGUgU2NoZW1hVHlwZVtdIF91bmlvbkNvbnN0aXR1ZW50VHlwZXM7Ci0gICAgcHJpdmF0ZSB2b2xhdGlsZSBTY2hlbWFUeXBlW10gX3VuaW9uU3ViVHlwZXM7Ci0gICAgcHJpdmF0ZSB2b2xhdGlsZSBTY2hlbWFUeXBlIF91bmlvbkNvbW1vbkJhc2VUeXBlOwotCi0gICAgLy8gZm9yIGF0b21pYyB0eXBlcyBvbmx5Ci0gICAgcHJpdmF0ZSBTY2hlbWFUeXBlLlJlZiBfcHJpbWl0aXZlVHlwZVJlZjsKLQotICAgIC8vIGZvciBkZWNpbWFsIHJlc3RyaWN0aW9ucyBvbmx5Ci0gICAgcHJpdmF0ZSBpbnQgX2RlY2ltYWxTaXplOwotCi0gICAgLy8gbGF6eSBsb2FkaW5nIHN1cHBvcnQKLSAgICBwcml2YXRlIHZvbGF0aWxlIGJvb2xlYW4gX3VubG9hZGVkOwotCi0gICAgLy8gZm9yIGRvY3VtZW50IHR5cGVzIG9ubHkgLSBvbmx5IHZhbGlkIGR1cmluZyBjb21waWxhdGlvbgotICAgIHByaXZhdGUgUU5hbWUgX3NnOwotICAgIHByaXZhdGUgTGlzdCBfc2dNZW1iZXJzID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgcHVibGljIGJvb2xlYW4gaXNVbmxvYWRlZCgpCi0gICAgewotICAgICAgICByZXR1cm4gX3VubG9hZGVkOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGZpbmlzaExvYWRpbmcoKQotICAgIHsKLSAgICAgICAgX3VubG9hZGVkID0gZmFsc2U7Ci0gICAgfQotCi0KLQotICAgIFNjaGVtYVR5cGVJbXBsKFNjaGVtYVR5cGVTeXN0ZW0gdHlwZVN5c3RlbSkKLSAgICB7Ci0gICAgICAgIF90eXBlU3lzdGVtID0gdHlwZVN5c3RlbTsKLSAgICB9Ci0KLSAgICBTY2hlbWFUeXBlSW1wbChTY2hlbWFUeXBlU3lzdGVtIHR5cGVTeXN0ZW0sIGJvb2xlYW4gdW5sb2FkZWQpCi0gICAgewotICAgICAgICBfdHlwZVN5c3RlbSA9IHR5cGVTeXN0ZW07Ci0gICAgICAgIF91bmxvYWRlZCA9IHVubG9hZGVkOwotICAgICAgICBpZiAodW5sb2FkZWQpCi0gICAgICAgICAgICBmaW5pc2hRdWljaygpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzU0dSZXNvbHZlZCgpCi0gICAgICAgIHsgcmV0dXJuIF9yZXNvbHZlUGhhc2UgPj0gUkVTT0xWRURfU0dTOyB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1NHUmVzb2x2aW5nKCkKLSAgICAgICAgeyByZXR1cm4gX3Jlc29sdmVQaGFzZSA+PSBSRVNPTFZJTkdfU0dTOyB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1Jlc29sdmVkKCkKLSAgICAgICAgeyByZXR1cm4gX3Jlc29sdmVQaGFzZSA+PSBSRVNPTFZFRDsgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNSZXNvbHZpbmcoKQotICAgICAgICB7IHJldHVybiBfcmVzb2x2ZVBoYXNlID09IFJFU09MVklORzsgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNVbmphdmFpemVkKCkKLSAgICAgICAgeyByZXR1cm4gX3Jlc29sdmVQaGFzZSA8IEpBVkFJWkVEOyB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0phdmFpemVkKCkKLSAgICAgICAgeyByZXR1cm4gX3Jlc29sdmVQaGFzZSA9PSBKQVZBSVpFRDsgfQotCi0gICAgcHVibGljIHZvaWQgc3RhcnRSZXNvbHZpbmdTR3MoKQotICAgIHsKLSAgICAgICAgaWYgKF9yZXNvbHZlUGhhc2UgIT0gVU5SRVNPTFZFRCkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLSAgICAgICAgX3Jlc29sdmVQaGFzZSA9IFJFU09MVklOR19TR1M7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZmluaXNoUmVzb2x2aW5nU0dzKCkKLSAgICB7Ci0gICAgICAgIGlmIChfcmVzb2x2ZVBoYXNlICE9IFJFU09MVklOR19TR1MpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7Ci0gICAgICAgIF9yZXNvbHZlUGhhc2UgPSBSRVNPTFZFRF9TR1M7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc3RhcnRSZXNvbHZpbmcoKQotICAgIHsKLSAgICAgICAgaWYgKCAoX2lzRG9jdW1lbnRUeXBlICYmIF9yZXNvbHZlUGhhc2UgIT0gUkVTT0xWRURfU0dTKSB8fAotICAgICAgICAgICAgICghX2lzRG9jdW1lbnRUeXBlICYmIF9yZXNvbHZlUGhhc2UgIT0gVU5SRVNPTFZFRCkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7Ci0gICAgICAgIF9yZXNvbHZlUGhhc2UgPSBSRVNPTFZJTkc7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZmluaXNoUmVzb2x2aW5nKCkKLSAgICB7Ci0gICAgICAgIGlmIChfcmVzb2x2ZVBoYXNlICE9IFJFU09MVklORykKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLSAgICAgICAgX3Jlc29sdmVQaGFzZSA9IFJFU09MVkVEOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHN0YXJ0SmF2YWl6aW5nKCkKLSAgICB7Ci0gICAgICAgIGlmIChfcmVzb2x2ZVBoYXNlICE9IFJFU09MVkVEKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotICAgICAgICBfcmVzb2x2ZVBoYXNlID0gSkFWQUlaSU5HOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGZpbmlzaEphdmFpemluZygpCi0gICAgewotICAgICAgICBpZiAoX3Jlc29sdmVQaGFzZSAhPSBKQVZBSVpJTkcpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7Ci0gICAgICAgIF9yZXNvbHZlUGhhc2UgPSBKQVZBSVpFRDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgZmluaXNoUXVpY2soKQotICAgIHsKLSAgICAgICAgX3Jlc29sdmVQaGFzZSA9IEpBVkFJWkVEOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBhc3NlcnRVbnJlc29sdmVkKCkKLSAgICB7Ci0gICAgICAgIGlmIChfcmVzb2x2ZVBoYXNlICE9IFVOUkVTT0xWRUQgJiYgIV91bmxvYWRlZCkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgYXNzZXJ0U0dSZXNvbHZpbmcoKQotICAgIHsKLSAgICAgICAgaWYgKF9yZXNvbHZlUGhhc2UgIT0gUkVTT0xWSU5HX1NHUyAmJiAhX3VubG9hZGVkKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBhc3NlcnRTR1Jlc29sdmVkKCkKLSAgICB7Ci0gICAgICAgIGlmIChfcmVzb2x2ZVBoYXNlICE9IFJFU09MVkVEX1NHUyAmJiAhX3VubG9hZGVkKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBhc3NlcnRSZXNvbHZpbmcoKQotICAgIHsKLSAgICAgICAgaWYgKF9yZXNvbHZlUGhhc2UgIT0gUkVTT0xWSU5HICYmICFfdW5sb2FkZWQpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGFzc2VydFJlc29sdmVkKCkKLSAgICB7Ci0gICAgICAgIGlmIChfcmVzb2x2ZVBoYXNlICE9IFJFU09MVkVEICYmICFfdW5sb2FkZWQpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGFzc2VydEphdmFpemluZygpCi0gICAgewotICAgICAgICBpZiAoX3Jlc29sdmVQaGFzZSAhPSBKQVZBSVpJTkcgJiYgIV91bmxvYWRlZCkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUU5hbWUgZ2V0TmFtZSgpCi0gICAgICAgIHsgcmV0dXJuIF9uYW1lOyB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFFOYW1lIG5hbWUpCi0gICAgICAgIHsgYXNzZXJ0VW5yZXNvbHZlZCgpOyBfbmFtZSA9IG5hbWU7IH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U291cmNlTmFtZSgpCi0gICAgewotICAgICAgICBpZiAoX2ZpbGVuYW1lICE9IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gX2ZpbGVuYW1lOwotICAgICAgICBpZiAoZ2V0T3V0ZXJUeXBlKCkgIT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBnZXRPdXRlclR5cGUoKS5nZXRTb3VyY2VOYW1lKCk7Ci0KLSAgICAgICAgU2NoZW1hRmllbGQgZmllbGQgPSBnZXRDb250YWluZXJGaWVsZCgpOwotICAgICAgICBpZiAoZmllbGQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGZpZWxkIGluc3RhbmNlb2YgU2NoZW1hR2xvYmFsRWxlbWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gKChTY2hlbWFHbG9iYWxFbGVtZW50KWZpZWxkKS5nZXRTb3VyY2VOYW1lKCk7Ci0gICAgICAgICAgICBpZiAoZmllbGQgaW5zdGFuY2VvZiBTY2hlbWFHbG9iYWxBdHRyaWJ1dGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuICgoU2NoZW1hR2xvYmFsQXR0cmlidXRlKWZpZWxkKS5nZXRTb3VyY2VOYW1lKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RmlsZW5hbWUoU3RyaW5nIGZpbGVuYW1lKQotICAgICAgICB7IGFzc2VydFVucmVzb2x2ZWQoKTsgX2ZpbGVuYW1lID0gZmlsZW5hbWU7IH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0Q29tcG9uZW50VHlwZSgpCi0gICAgICAgIHsgcmV0dXJuIFNjaGVtYUNvbXBvbmVudC5UWVBFOyB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0Fub255bW91c1R5cGUoKQotICAgICAgICB7IHJldHVybiBfbmFtZSA9PSBudWxsOyB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0RvY3VtZW50VHlwZSgpCi0gICAgICAgIHsgcmV0dXJuIF9pc0RvY3VtZW50VHlwZTsgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNBdHRyaWJ1dGVUeXBlKCkKLSAgICAgICAgeyByZXR1cm4gX2lzQXR0cmlidXRlVHlwZTsgfQotCi0gICAgcHVibGljIFFOYW1lIGdldERvY3VtZW50RWxlbWVudE5hbWUoKQotICAgIHsKLSAgICAgICAgaWYgKF9pc0RvY3VtZW50VHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgU2NoZW1hUGFydGljbGUgc3AgPSBnZXRDb250ZW50TW9kZWwoKTsKLSAgICAgICAgICAgIGlmIChzcCAhPSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBzcC5nZXROYW1lKCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUU5hbWUgZ2V0QXR0cmlidXRlVHlwZUF0dHJpYnV0ZU5hbWUoKQotICAgIHsKLSAgICAgICAgaWYgKF9pc0F0dHJpYnV0ZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYUF0dHJpYnV0ZU1vZGVsIHNhbSA9IGdldEF0dHJpYnV0ZU1vZGVsKCk7Ci0gICAgICAgICAgICBpZiAoc2FtICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2NoZW1hTG9jYWxBdHRyaWJ1dGVbXSBzbGFBcnJheSA9IHNhbS5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHNsYUFycmF5ICE9IG51bGwgJiYgc2xhQXJyYXkubGVuZ3RoID4gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFNjaGVtYUxvY2FsQXR0cmlidXRlIHNsYSA9IHNsYUFycmF5WzBdOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2xhLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXREb2N1bWVudFR5cGUoYm9vbGVhbiBpc0RvY3VtZW50KQotICAgICAgICB7IGFzc2VydFVucmVzb2x2ZWQoKTsgX2lzRG9jdW1lbnRUeXBlID0gaXNEb2N1bWVudDsgfQotCi0gICAgcHVibGljIHZvaWQgc2V0QXR0cmlidXRlVHlwZShib29sZWFuIGlzQXR0cmlidXRlKQotICAgICAgICB7IGFzc2VydFVucmVzb2x2ZWQoKTsgX2lzQXR0cmlidXRlVHlwZSA9IGlzQXR0cmlidXRlOyB9Ci0KLSAgICBwdWJsaWMgaW50IGdldENvbnRlbnRUeXBlKCkKLSAgICAgICAgeyByZXR1cm4gX2NvbXBsZXhUeXBlVmFyaWV0eTsgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q29tcGxleFR5cGVWYXJpZXR5KGludCBjb21wbGV4VHlwZVZhcmlldHkpCi0gICAgICAgIHsgYXNzZXJ0UmVzb2x2aW5nKCk7IF9jb21wbGV4VHlwZVZhcmlldHkgPSBjb21wbGV4VHlwZVZhcmlldHk7IH0KLQotICAgIC8qKiBTZXQgdGhlIGFic3RyYWN0IGFuZCBmaW5hbCBmbGFncyBmb3IgYSBjb21wbGV4IHR5cGUgKi8KLSAgICB2b2lkIHNldEFic3RyYWN0RmluYWwoCi0gICAgICAgIGJvb2xlYW4gYWJzLCBib29sZWFuIGZpbmFsRXh0LCBib29sZWFuIGZpbmFsUmVzdCwgYm9vbGVhbiBmaW5hbExpc3QsIGJvb2xlYW4gZmluYWxVbmlvbikKLSAgICB7Ci0gICAgICAgIGFzc2VydFJlc29sdmluZygpOwotICAgICAgICBfYWJzID0gYWJzOwotICAgICAgICBfZmluYWxFeHQgPSBmaW5hbEV4dDsgX2ZpbmFsUmVzdCA9IGZpbmFsUmVzdDsKLSAgICAgICAgX2ZpbmFsTGlzdCA9IGZpbmFsTGlzdDsgX2ZpbmFsVW5pb24gPSBmaW5hbFVuaW9uOwotICAgIH0KLQotICAgIC8qKiBTZXQgdGhlIGZpbmFsIGZsYWdzIGZvciBhIHNpbXBsZSB0eXBlICovCi0gICAgdm9pZCBzZXRTaW1wbGVGaW5hbChib29sZWFuIGZpbmFsUmVzdCwgYm9vbGVhbiBmaW5hbExpc3QsIGJvb2xlYW4gZmluYWxVbmlvbikKLSAgICB7Ci0gICAgICAgIGFzc2VydFJlc29sdmluZygpOyBfZmluYWxSZXN0ID0gZmluYWxSZXN0OyBfZmluYWxMaXN0ID0gZmluYWxMaXN0IDsgX2ZpbmFsVW5pb24gPSBmaW5hbFVuaW9uOwotICAgIH0KLQotICAgIHZvaWQgc2V0QmxvY2soYm9vbGVhbiBibG9ja0V4dCwgYm9vbGVhbiBibG9ja1Jlc3QpCi0gICAgewotICAgICAgICBhc3NlcnRSZXNvbHZpbmcoKTsgX2Jsb2NrRXh0ID0gYmxvY2tFeHQgOyBfYmxvY2tSZXN0ID0gYmxvY2tSZXN0OwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGJsb2NrUmVzdHJpY3Rpb24oKQotICAgIHsgcmV0dXJuIF9ibG9ja1Jlc3Q7IH0KLQotICAgIHB1YmxpYyBib29sZWFuIGJsb2NrRXh0ZW5zaW9uKCkKLSAgICB7IHJldHVybiBfYmxvY2tFeHQ7IH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzQWJzdHJhY3QoKQotICAgIHsgcmV0dXJuIF9hYnM7IH0KLQotICAgIHB1YmxpYyBib29sZWFuIGZpbmFsRXh0ZW5zaW9uKCkKLSAgICB7IHJldHVybiBfZmluYWxFeHQ7IH0KLQotICAgIHB1YmxpYyBib29sZWFuIGZpbmFsUmVzdHJpY3Rpb24oKQotICAgIHsgcmV0dXJuIF9maW5hbFJlc3Q7IH0KLQotICAgIHB1YmxpYyBib29sZWFuIGZpbmFsTGlzdCgpCi0gICAgeyByZXR1cm4gX2ZpbmFsTGlzdDsgfQotCi0gICAgcHVibGljIGJvb2xlYW4gZmluYWxVbmlvbigpCi0gICAgeyByZXR1cm4gX2ZpbmFsVW5pb247IH0KLQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgU2NoZW1hRmllbGQgZ2V0Q29udGFpbmVyRmllbGQoKQotICAgIHsKLSAgICAgICAgaWYgKF9jb250YWluZXJGaWVsZENvZGUgIT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYVR5cGUgb3V0ZXIgPSBnZXRPdXRlclR5cGUoKTsKLSAgICAgICAgICAgIGlmIChfY29udGFpbmVyRmllbGRDb2RlID09IDApCi0gICAgICAgICAgICAgICAgX2NvbnRhaW5lckZpZWxkID0gX2NvbnRhaW5lckZpZWxkUmVmID09IG51bGwgPyBudWxsIDogKFNjaGVtYUZpZWxkKV9jb250YWluZXJGaWVsZFJlZi5nZXRDb21wb25lbnQoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKF9jb250YWluZXJGaWVsZENvZGUgPT0gMSkKLSAgICAgICAgICAgICAgICBfY29udGFpbmVyRmllbGQgPSBvdXRlci5nZXRBdHRyaWJ1dGVNb2RlbCgpLmdldEF0dHJpYnV0ZXMoKVtfY29udGFpbmVyRmllbGRJbmRleF07Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgX2NvbnRhaW5lckZpZWxkID0gKChTY2hlbWFUeXBlSW1wbClvdXRlcikuZ2V0TG9jYWxFbGVtZW50QnlJbmRleChfY29udGFpbmVyRmllbGRJbmRleCk7Ci0gICAgICAgICAgICBfY29udGFpbmVyRmllbGRDb2RlID0gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIF9jb250YWluZXJGaWVsZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDb250YWluZXJGaWVsZChTY2hlbWFGaWVsZCBmaWVsZCkKLSAgICB7Ci0gICAgICAgIGFzc2VydFVucmVzb2x2ZWQoKTsKLSAgICAgICAgX2NvbnRhaW5lckZpZWxkID0gZmllbGQ7Ci0gICAgICAgIF9jb250YWluZXJGaWVsZENvZGUgPSAtMTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDb250YWluZXJGaWVsZFJlZihTY2hlbWFDb21wb25lbnQuUmVmIHJlZikKLSAgICB7Ci0gICAgICAgIGFzc2VydFVucmVzb2x2ZWQoKTsKLSAgICAgICAgX2NvbnRhaW5lckZpZWxkUmVmID0gcmVmOwotICAgICAgICBfY29udGFpbmVyRmllbGRDb2RlID0gMDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRDb250YWluZXJGaWVsZEluZGV4KHNob3J0IGNvZGUsIGludCBpbmRleCkKLSAgICB7Ci0gICAgICAgIGFzc2VydFVucmVzb2x2ZWQoKTsKLSAgICAgICAgX2NvbnRhaW5lckZpZWxkQ29kZSA9IGNvZGU7Ci0gICAgICAgIF9jb250YWluZXJGaWVsZEluZGV4ID0gaW5kZXg7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgZ2V0T3V0ZXJUeXBlKCkKLSAgICAgICAgeyByZXR1cm4gX291dGVyU2NoZW1hVHlwZVJlZiA9PSBudWxsID8gbnVsbCA6IF9vdXRlclNjaGVtYVR5cGVSZWYuZ2V0KCk7IH0KLQotICAgIHB1YmxpYyB2b2lkIHNldE91dGVyU2NoZW1hVHlwZVJlZihTY2hlbWFUeXBlLlJlZiB0eXBlcmVmKQotICAgICAgICB7IGFzc2VydFVucmVzb2x2ZWQoKTsgX291dGVyU2NoZW1hVHlwZVJlZiA9IHR5cGVyZWY7IH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzQ29tcGlsZWQoKQotICAgICAgICB7IHJldHVybiBfaXNDb21waWxlZDsgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q29tcGlsZWQoYm9vbGVhbiBmKQotICAgICAgICB7IGFzc2VydEphdmFpemluZygpOyBfaXNDb21waWxlZCA9IGY7IH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzU2tpcHBlZEFub255bW91c1R5cGUoKQotICAgICAgICB7IHJldHVybiBfb3V0ZXJTY2hlbWFUeXBlUmVmLmdldCgpLmdldEJhc2VUeXBlKCkgPT0gdGhpczsgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTaG9ydEphdmFOYW1lKCkKLSAgICAgICAgeyByZXR1cm4gX3Nob3J0SmF2YU5hbWU7IH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFNob3J0SmF2YU5hbWUoU3RyaW5nIG5hbWUpCi0gICAgewotICAgICAgICBhc3NlcnRSZXNvbHZlZCgpOwotICAgICAgICBfc2hvcnRKYXZhTmFtZSA9IG5hbWU7Ci0gICAgICAgIFNjaGVtYVR5cGUgb3V0ZXIgPSBfb3V0ZXJTY2hlbWFUeXBlUmVmLmdldCgpOwotICAgICAgICB3aGlsZSAob3V0ZXIuZ2V0RnVsbEphdmFOYW1lKCkgPT0gbnVsbCkKLSAgICAgICAgICAgIG91dGVyID0gb3V0ZXIuZ2V0T3V0ZXJUeXBlKCk7Ci0KLSAgICAgICAgX2Z1bGxKYXZhTmFtZSA9IG91dGVyLmdldEZ1bGxKYXZhTmFtZSgpICsgIiQiICsgX3Nob3J0SmF2YU5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGdWxsSmF2YU5hbWUoKQotICAgICAgICB7IHJldHVybiBfZnVsbEphdmFOYW1lOyB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRGdWxsSmF2YU5hbWUoU3RyaW5nIG5hbWUpCi0gICAgewotICAgICAgICBhc3NlcnRSZXNvbHZlZCgpOwotICAgICAgICBfZnVsbEphdmFOYW1lID0gbmFtZTsKLSAgICAgICAgaW50IGluZGV4ID0gTWF0aC5tYXgoX2Z1bGxKYXZhTmFtZS5sYXN0SW5kZXhPZignJCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZnVsbEphdmFOYW1lLmxhc3RJbmRleE9mKCcuJykpICsgMTsKLSAgICAgICAgX3Nob3J0SmF2YU5hbWUgPSBfZnVsbEphdmFOYW1lLnN1YnN0cmluZyhpbmRleCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0U2hvcnRKYXZhSW1wbE5hbWUoU3RyaW5nIG5hbWUpCi0gICAgewotICAgICAgICBhc3NlcnRSZXNvbHZlZCgpOwotICAgICAgICBfc2hvcnRKYXZhSW1wbE5hbWUgPSBuYW1lOwotICAgICAgICBTY2hlbWFUeXBlIG91dGVyID0gX291dGVyU2NoZW1hVHlwZVJlZi5nZXQoKTsKLSAgICAgICAgd2hpbGUgKG91dGVyLmdldEZ1bGxKYXZhSW1wbE5hbWUoKSA9PSBudWxsKQotICAgICAgICAgICAgb3V0ZXIgPSBvdXRlci5nZXRPdXRlclR5cGUoKTsKLQotICAgICAgICBfZnVsbEphdmFJbXBsTmFtZSA9IG91dGVyLmdldEZ1bGxKYXZhSW1wbE5hbWUoKSArICIkIiArIF9zaG9ydEphdmFJbXBsTmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRGdWxsSmF2YUltcGxOYW1lKFN0cmluZyBuYW1lKQotICAgIHsKLSAgICAgICAgYXNzZXJ0UmVzb2x2ZWQoKTsKLSAgICAgICAgX2Z1bGxKYXZhSW1wbE5hbWUgPSBuYW1lOwotICAgICAgICBpbnQgaW5kZXggPSBNYXRoLm1heChfZnVsbEphdmFJbXBsTmFtZS5sYXN0SW5kZXhPZignJCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZnVsbEphdmFJbXBsTmFtZS5sYXN0SW5kZXhPZignLicpKSArIDE7Ci0gICAgICAgIF9zaG9ydEphdmFJbXBsTmFtZSA9IF9mdWxsSmF2YUltcGxOYW1lLnN1YnN0cmluZyhpbmRleCk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRGdWxsSmF2YUltcGxOYW1lKCkgeyByZXR1cm4gX2Z1bGxKYXZhSW1wbE5hbWU7fQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2hvcnRKYXZhSW1wbE5hbWUoKSB7IHJldHVybiBfc2hvcnRKYXZhSW1wbE5hbWU7fQotCi0gICAgcHVibGljIFNjaGVtYVR5cGVTeXN0ZW0gZ2V0VHlwZVN5c3RlbSgpCi0gICAgICAgIHsgcmV0dXJuIF90eXBlU3lzdGVtOyB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hUGFydGljbGUgZ2V0Q29udGVudE1vZGVsKCkKLSAgICAgICAgeyByZXR1cm4gX2NvbnRlbnRNb2RlbDsgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBidWlsZEVsdExpc3QoTGlzdCBlbHRMaXN0LCBTY2hlbWFQYXJ0aWNsZSBjb250ZW50TW9kZWwpCi0gICAgewotICAgICAgICBpZiAoY29udGVudE1vZGVsID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgc3dpdGNoIChjb250ZW50TW9kZWwuZ2V0UGFydGljbGVUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuRUxFTUVOVDoKLSAgICAgICAgICAgICAgICBlbHRMaXN0LmFkZChjb250ZW50TW9kZWwpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQUxMOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5DSE9JQ0U6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLlNFUVVFTkNFOgotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudE1vZGVsLmNvdW50T2ZQYXJ0aWNsZUNoaWxkKCk7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRFbHRMaXN0KGVsdExpc3QsIGNvbnRlbnRNb2RlbC5nZXRQYXJ0aWNsZUNoaWxkKGkpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBidWlsZExvY2FsRWx0cygpCi0gICAgewotICAgICAgICBMaXN0IGVsdExpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIGJ1aWxkRWx0TGlzdChlbHRMaXN0LCBfY29udGVudE1vZGVsKTsKLSAgICAgICAgX2xvY2FsRWx0cyA9IChTY2hlbWFMb2NhbEVsZW1lbnRbXSllbHRMaXN0LnRvQXJyYXkobmV3IFNjaGVtYUxvY2FsRWxlbWVudFtlbHRMaXN0LnNpemUoKV0pOwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFMb2NhbEVsZW1lbnQgZ2V0TG9jYWxFbGVtZW50QnlJbmRleChpbnQgaSkKLSAgICB7Ci0gICAgICAgIFNjaGVtYUxvY2FsRWxlbWVudFtdIGVsdHMgPSBfbG9jYWxFbHRzOwotICAgICAgICBpZiAoZWx0cyA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBidWlsZExvY2FsRWx0cygpOwotICAgICAgICAgICAgZWx0cyA9IF9sb2NhbEVsdHM7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGVsdHNbaV07Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRJbmRleEZvckxvY2FsRWxlbWVudChTY2hlbWFMb2NhbEVsZW1lbnQgZWx0KQotICAgIHsKLSAgICAgICAgTWFwIGxvY2FsRWx0TWFwID0gX2VsdFRvSW5kZXhNYXA7Ci0gICAgICAgIGlmIChsb2NhbEVsdE1hcCA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX2xvY2FsRWx0cyA9PSBudWxsKQotICAgICAgICAgICAgICAgIGJ1aWxkTG9jYWxFbHRzKCk7Ci0gICAgICAgICAgICBsb2NhbEVsdE1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IF9sb2NhbEVsdHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbG9jYWxFbHRNYXAucHV0KF9sb2NhbEVsdHNbaV0sIG5ldyBJbnRlZ2VyKGkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF9lbHRUb0luZGV4TWFwID0gbG9jYWxFbHRNYXA7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICgoSW50ZWdlcilsb2NhbEVsdE1hcC5nZXQoZWx0KSkuaW50VmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldEluZGV4Rm9yTG9jYWxBdHRyaWJ1dGUoU2NoZW1hTG9jYWxBdHRyaWJ1dGUgYXR0cikKLSAgICB7Ci0gICAgICAgIE1hcCBsb2NhbEF0dHJNYXAgPSBfYXR0clRvSW5kZXhNYXA7Ci0gICAgICAgIGlmIChsb2NhbEF0dHJNYXAgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgbG9jYWxBdHRyTWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgICAgIFNjaGVtYUxvY2FsQXR0cmlidXRlW10gYXR0cnMgPSB0aGlzLl9hdHRyaWJ1dGVNb2RlbC5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvY2FsQXR0ck1hcC5wdXQoYXR0cnNbaV0sIG5ldyBJbnRlZ2VyKGkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF9hdHRyVG9JbmRleE1hcCA9IGxvY2FsQXR0ck1hcDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gKChJbnRlZ2VyKWxvY2FsQXR0ck1hcC5nZXQoYXR0cikpLmludFZhbHVlKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYUF0dHJpYnV0ZU1vZGVsIGdldEF0dHJpYnV0ZU1vZGVsKCkKLSAgICAgICAgeyByZXR1cm4gX2F0dHJpYnV0ZU1vZGVsOyB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hUHJvcGVydHlbXSBnZXRQcm9wZXJ0aWVzKCkKLSAgICB7Ci0gICAgICAgIGlmIChfcHJvcGVydHlNb2RlbEJ5RWxlbWVudE5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBnZXRBdHRyaWJ1dGVQcm9wZXJ0aWVzKCk7Ci0KLSAgICAgICAgaWYgKF9wcm9wZXJ0eU1vZGVsQnlBdHRyaWJ1dGVOYW1lID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gZ2V0RWxlbWVudFByb3BlcnRpZXMoKTsKLQotICAgICAgICBMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIGxpc3QuYWRkQWxsKF9wcm9wZXJ0eU1vZGVsQnlFbGVtZW50TmFtZS52YWx1ZXMoKSk7Ci0gICAgICAgIGxpc3QuYWRkQWxsKF9wcm9wZXJ0eU1vZGVsQnlBdHRyaWJ1dGVOYW1lLnZhbHVlcygpKTsKLSAgICAgICAgcmV0dXJuIChTY2hlbWFQcm9wZXJ0eVtdKWxpc3QudG9BcnJheShuZXcgU2NoZW1hUHJvcGVydHlbbGlzdC5zaXplKCldKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTY2hlbWFQcm9wZXJ0eVtdIE5PX1BST1BFUlRJRVMgPSBuZXcgU2NoZW1hUHJvcGVydHlbMF07Ci0KLSAgICBwdWJsaWMgU2NoZW1hUHJvcGVydHlbXSBnZXREZXJpdmVkUHJvcGVydGllcygpCi0gICAgewotICAgICAgICBTY2hlbWFUeXBlIGJhc2VUeXBlID0gZ2V0QmFzZVR5cGUoKTsKLSAgICAgICAgaWYgKGJhc2VUeXBlID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gZ2V0UHJvcGVydGllcygpOwotCi0gICAgICAgIExpc3QgcmVzdWx0cyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgICAgICBpZiAoX3Byb3BlcnR5TW9kZWxCeUVsZW1lbnROYW1lICE9IG51bGwpCi0gICAgICAgICAgICByZXN1bHRzLmFkZEFsbChfcHJvcGVydHlNb2RlbEJ5RWxlbWVudE5hbWUudmFsdWVzKCkpOwotCi0gICAgICAgIGlmIChfcHJvcGVydHlNb2RlbEJ5QXR0cmlidXRlTmFtZSAhPSBudWxsKQotICAgICAgICAgICAgcmVzdWx0cy5hZGRBbGwoX3Byb3BlcnR5TW9kZWxCeUF0dHJpYnV0ZU5hbWUudmFsdWVzKCkpOwotCi0gICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSByZXN1bHRzLml0ZXJhdG9yKCkgOyBpdC5oYXNOZXh0KCkgOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYVByb3BlcnR5IHByb3AgPSAoU2NoZW1hUHJvcGVydHkpaXQubmV4dCgpOwotICAgICAgICAgICAgU2NoZW1hUHJvcGVydHkgYmFzZVByb3AgPSBwcm9wLmlzQXR0cmlidXRlKCkgPwotICAgICAgICAgICAgICAgIGJhc2VUeXBlLmdldEF0dHJpYnV0ZVByb3BlcnR5KHByb3AuZ2V0TmFtZSgpKSA6Ci0gICAgICAgICAgICAgICAgYmFzZVR5cGUuZ2V0RWxlbWVudFByb3BlcnR5KHByb3AuZ2V0TmFtZSgpKTsKLQotCi0gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGRlcml2ZWQgcHJvcGVydHkgZnJvbSB0aGUgcmVzdWx0cyBpZiBpdCBpcwotICAgICAgICAgICAgLy8gQSkgcHJlc2VudCBpbiB0aGUgYmFzZSB0eXBlIGFuZAotICAgICAgICAgICAgLy8gQikgYWxsIHRoZSBkZXRhaWxzIGFyZSB0aGUgc2FtZSAoY2FyZGluYWxpdHksIG5pbGxhYmlsaXR5KQotCi0gICAgICAgICAgICBpZiAoYmFzZVByb3AgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIGVxKHByb3AuZ2V0TWluT2NjdXJzKCksIGJhc2VQcm9wLmdldE1pbk9jY3VycygpKSAmJgotICAgICAgICAgICAgICAgICAgICAgZXEocHJvcC5nZXRNYXhPY2N1cnMoKSwgYmFzZVByb3AuZ2V0TWF4T2NjdXJzKCkpICYmCi0gICAgICAgICAgICAgICAgICAgICBwcm9wLmhhc05pbGxhYmxlKCkgPT0gYmFzZVByb3AuaGFzTmlsbGFibGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGl0LnJlbW92ZSgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gKFNjaGVtYVByb3BlcnR5W10pcmVzdWx0cy50b0FycmF5KG5ldyBTY2hlbWFQcm9wZXJ0eVtyZXN1bHRzLnNpemUoKV0pOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZXEoQmlnSW50ZWdlciBhLCBCaWdJbnRlZ2VyIGIpCi0gICAgewotICAgICAgICBpZiAoYSA9PSBudWxsICYmIGIgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoYT09IG51bGwgfHwgYiA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gYS5lcXVhbHMoYik7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYVByb3BlcnR5W10gZ2V0RWxlbWVudFByb3BlcnRpZXMoKQotICAgIHsKLSAgICAgICAgaWYgKF9wcm9wZXJ0eU1vZGVsQnlFbGVtZW50TmFtZSA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIE5PX1BST1BFUlRJRVM7Ci0KLSAgICAgICAgcmV0dXJuIChTY2hlbWFQcm9wZXJ0eVtdKQotICAgICAgICAgICAgICAgIF9wcm9wZXJ0eU1vZGVsQnlFbGVtZW50TmFtZS52YWx1ZXMoKS50b0FycmF5KG5ldyBTY2hlbWFQcm9wZXJ0eVtfcHJvcGVydHlNb2RlbEJ5RWxlbWVudE5hbWUuc2l6ZSgpXSk7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYVByb3BlcnR5W10gZ2V0QXR0cmlidXRlUHJvcGVydGllcygpCi0gICAgewotICAgICAgICBpZiAoX3Byb3BlcnR5TW9kZWxCeUF0dHJpYnV0ZU5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBOT19QUk9QRVJUSUVTOwotCi0gICAgICAgIHJldHVybiAoU2NoZW1hUHJvcGVydHlbXSkKLSAgICAgICAgICAgICAgICBfcHJvcGVydHlNb2RlbEJ5QXR0cmlidXRlTmFtZS52YWx1ZXMoKS50b0FycmF5KG5ldyBTY2hlbWFQcm9wZXJ0eVtfcHJvcGVydHlNb2RlbEJ5QXR0cmlidXRlTmFtZS5zaXplKCldKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hUHJvcGVydHkgZ2V0RWxlbWVudFByb3BlcnR5KFFOYW1lIGVsdE5hbWUpCi0gICAgICAgIHsgcmV0dXJuIF9wcm9wZXJ0eU1vZGVsQnlFbGVtZW50TmFtZSA9PSBudWxsID8gbnVsbCA6IChTY2hlbWFQcm9wZXJ0eSlfcHJvcGVydHlNb2RlbEJ5RWxlbWVudE5hbWUuZ2V0KGVsdE5hbWUpOyB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hUHJvcGVydHkgZ2V0QXR0cmlidXRlUHJvcGVydHkoUU5hbWUgYXR0ck5hbWUpCi0gICAgICAgIHsgcmV0dXJuIF9wcm9wZXJ0eU1vZGVsQnlBdHRyaWJ1dGVOYW1lID09IG51bGwgPyBudWxsIDogKFNjaGVtYVByb3BlcnR5KV9wcm9wZXJ0eU1vZGVsQnlBdHRyaWJ1dGVOYW1lLmdldChhdHRyTmFtZSk7IH0KLQotICAgIHB1YmxpYyBib29sZWFuIGhhc0FsbENvbnRlbnQoKQotICAgICAgICB7IHJldHVybiBfaGFzQWxsQ29udGVudDsgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNPcmRlclNlbnNpdGl2ZSgpCi0gICAgICAgIHsgcmV0dXJuIF9vcmRlclNlbnNpdGl2ZTsgfQotCi0gICAgcHVibGljIHZvaWQgc2V0T3JkZXJTZW5zaXRpdmUoYm9vbGVhbiBzZW5zaXRpdmUpCi0gICAgICAgIHsgYXNzZXJ0SmF2YWl6aW5nKCk7IF9vcmRlclNlbnNpdGl2ZSA9IHNlbnNpdGl2ZTsgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q29udGVudE1vZGVsKAotICAgICAgICAgICAgU2NoZW1hUGFydGljbGUgY29udGVudE1vZGVsLAotICAgICAgICAgICAgU2NoZW1hQXR0cmlidXRlTW9kZWwgYXR0ck1vZGVsLAotICAgICAgICAgICAgTWFwIHByb3BlcnR5TW9kZWxCeUVsZW1lbnROYW1lLAotICAgICAgICAgICAgTWFwIHByb3BlcnR5TW9kZWxCeUF0dHJpYnV0ZU5hbWUsCi0gICAgICAgICAgICBib29sZWFuIGlzQWxsKQotICAgIHsKLSAgICAgICAgYXNzZXJ0UmVzb2x2aW5nKCk7Ci0gICAgICAgIF9jb250ZW50TW9kZWwgPSBjb250ZW50TW9kZWw7Ci0gICAgICAgIF9hdHRyaWJ1dGVNb2RlbCA9IGF0dHJNb2RlbDsKLSAgICAgICAgX3Byb3BlcnR5TW9kZWxCeUVsZW1lbnROYW1lID0gcHJvcGVydHlNb2RlbEJ5RWxlbWVudE5hbWU7Ci0gICAgICAgIF9wcm9wZXJ0eU1vZGVsQnlBdHRyaWJ1dGVOYW1lID0gcHJvcGVydHlNb2RlbEJ5QXR0cmlidXRlTmFtZTsKLSAgICAgICAgX2hhc0FsbENvbnRlbnQgPSBpc0FsbDsKLQotCi0gICAgICAgIC8vIEFkZCBlbnRyaWVzIGZvciBlYWNoIGVsZW1lbnQgcHJvcGVydHkgZm9yIHN1YnN0aXR1dGlvbiBncm91cCBtZW1iZXJzCi0gICAgICAgIGlmIChfcHJvcGVydHlNb2RlbEJ5RWxlbWVudE5hbWUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgX3ZhbGlkU3Vic3RpdHV0aW9ucyA9IG5ldyBMaW5rZWRIYXNoU2V0KCk7Ci0gICAgICAgICAgICBDb2xsZWN0aW9uIGVsdFByb3BzID0gX3Byb3BlcnR5TW9kZWxCeUVsZW1lbnROYW1lLnZhbHVlcygpOwotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IGVsdFByb3BzLml0ZXJhdG9yKCkgOyBpdC5oYXNOZXh0KCkgOyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2NoZW1hUHJvcGVydHkgcHJvcCA9IChTY2hlbWFQcm9wZXJ0eSlpdC5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgUU5hbWVbXSBuYW1lcyA9IHByb3AuYWNjZXB0ZWROYW1lcygpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IG5hbWVzLmxlbmd0aCA7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghIF9wcm9wZXJ0eU1vZGVsQnlFbGVtZW50TmFtZS5jb250YWluc0tleShuYW1lc1tpXSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBfdmFsaWRTdWJzdGl0dXRpb25zLmFkZChuYW1lc1tpXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGNvbnRhaW5zRWxlbWVudHMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdldENvbnRlbnRUeXBlKCkgPT0gRUxFTUVOVF9DT05URU5UIHx8Ci0gICAgICAgICAgICAgICBnZXRDb250ZW50VHlwZSgpID09IE1JWEVEX0NPTlRFTlQ7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaGFzQXR0cmlidXRlV2lsZGNhcmRzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfaGFzV2lsZGNhcmRBdHRyaWJ1dGVzOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGhhc0VsZW1lbnRXaWxkY2FyZHMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9oYXNXaWxkY2FyZEVsZW1lbnRzOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzVmFsaWRTdWJzdGl0dXRpb24oUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfdmFsaWRTdWJzdGl0dXRpb25zLmNvbnRhaW5zKG5hbWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFUeXBlIGdldEVsZW1lbnRUeXBlKFFOYW1lIGVsdE5hbWUsIFFOYW1lIHhzaVR5cGUsIFNjaGVtYVR5cGVMb2FkZXIgd2lsZGNhcmRUeXBlTG9hZGVyKQotICAgIHsKLSAgICAgICAgaWYgKGlzU2ltcGxlVHlwZSgpIHx8ICFjb250YWluc0VsZW1lbnRzKCkgfHwgaXNOb1R5cGUoKSkKLSAgICAgICAgICAgIHJldHVybiBCdWlsdGluU2NoZW1hVHlwZVN5c3RlbS5TVF9OT19UWVBFOwotCi0gICAgICAgIFNjaGVtYVR5cGUgdHlwZTsKLSAgICAgICAgU2NoZW1hUHJvcGVydHkgcHJvcCA9IChTY2hlbWFQcm9wZXJ0eSlfcHJvcGVydHlNb2RlbEJ5RWxlbWVudE5hbWUuZ2V0KGVsdE5hbWUpOwotICAgICAgICBpZiAocHJvcCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICB0eXBlID0gcHJvcC5nZXRUeXBlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIV90eXBlZFdpbGRjYXJkRWxlbWVudHMuY29udGFpbnMoZWx0TmFtZSkgfHwgd2lsZGNhcmRUeXBlTG9hZGVyID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLlNUX05PX1RZUEU7Ci0KLSAgICAgICAgICAgIFNjaGVtYUdsb2JhbEVsZW1lbnQgZWx0ID0gd2lsZGNhcmRUeXBlTG9hZGVyLmZpbmRFbGVtZW50KGVsdE5hbWUpOwotICAgICAgICAgICAgaWYgKGVsdCA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBCdWlsdGluU2NoZW1hVHlwZVN5c3RlbS5TVF9OT19UWVBFOwotICAgICAgICAgICAgdHlwZSA9IGVsdC5nZXRUeXBlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoeHNpVHlwZSAhPSBudWxsICYmIHdpbGRjYXJkVHlwZUxvYWRlciAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBTY2hlbWFUeXBlIGl0eXBlID0gd2lsZGNhcmRUeXBlTG9hZGVyLmZpbmRUeXBlKHhzaVR5cGUpOwotICAgICAgICAgICAgaWYgKGl0eXBlID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLlNUX05PX1RZUEU7Ci0gICAgICAgICAgICBpZiAodHlwZS5pc0Fzc2lnbmFibGVGcm9tKGl0eXBlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaXR5cGU7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLlNUX05PX1RZUEU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHlwZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hVHlwZSBnZXRBdHRyaWJ1dGVUeXBlKFFOYW1lIGF0dHJOYW1lLCBTY2hlbWFUeXBlTG9hZGVyIHdpbGRjYXJkVHlwZUxvYWRlcikKLSAgICB7Ci0gICAgICAgIGlmIChpc1NpbXBsZVR5cGUoKSB8fCBpc05vVHlwZSgpKQotICAgICAgICAgICAgcmV0dXJuIEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLlNUX05PX1RZUEU7Ci0KLSAgICAgICAgaWYgKGlzVVJUeXBlKCkpCi0gICAgICAgICAgICByZXR1cm4gQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfQU5ZX1NJTVBMRTsKLQotICAgICAgICBTY2hlbWFQcm9wZXJ0eSBwcm9wID0gKFNjaGVtYVByb3BlcnR5KV9wcm9wZXJ0eU1vZGVsQnlBdHRyaWJ1dGVOYW1lLmdldChhdHRyTmFtZSk7Ci0gICAgICAgIGlmIChwcm9wICE9IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gcHJvcC5nZXRUeXBlKCk7Ci0KLSAgICAgICAgaWYgKCFfdHlwZWRXaWxkY2FyZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpIHx8IHdpbGRjYXJkVHlwZUxvYWRlciA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLlNUX05PX1RZUEU7Ci0KLSAgICAgICAgU2NoZW1hR2xvYmFsQXR0cmlidXRlIGF0dHIgPSB3aWxkY2FyZFR5cGVMb2FkZXIuZmluZEF0dHJpYnV0ZShhdHRyTmFtZSk7Ci0gICAgICAgIGlmIChhdHRyID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfTk9fVFlQRTsKLSAgICAgICAgcmV0dXJuIGF0dHIuZ2V0VHlwZSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBYbWxPYmplY3QgY3JlYXRlRWxlbWVudFR5cGUoUU5hbWUgZWx0TmFtZSwgUU5hbWUgeHNpVHlwZSwgU2NoZW1hVHlwZUxvYWRlciB3aWxkY2FyZFR5cGVMb2FkZXIpCi0gICAgewotICAgICAgICBTY2hlbWFUeXBlIHR5cGUgPSBudWxsOwotICAgICAgICBTY2hlbWFQcm9wZXJ0eSBwcm9wID0gbnVsbDsKLSAgICAgICAgaWYgKGlzU2ltcGxlVHlwZSgpIHx8ICFjb250YWluc0VsZW1lbnRzKCkgfHwgaXNOb1R5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgdHlwZSA9IEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLlNUX05PX1RZUEU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBwcm9wID0gKFNjaGVtYVByb3BlcnR5KV9wcm9wZXJ0eU1vZGVsQnlFbGVtZW50TmFtZS5nZXQoZWx0TmFtZSk7Ci0gICAgICAgICAgICBpZiAocHJvcCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHR5cGUgPSBwcm9wLmdldFR5cGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKCFfdHlwZWRXaWxkY2FyZEVsZW1lbnRzLmNvbnRhaW5zKGVsdE5hbWUpICYmCi0gICAgICAgICAgICAgICAgICAgICAhX3ZhbGlkU3Vic3RpdHV0aW9ucy5jb250YWlucyhlbHROYW1lKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0eXBlID0gQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfTk9fVFlQRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTY2hlbWFHbG9iYWxFbGVtZW50IGVsdCA9IHdpbGRjYXJkVHlwZUxvYWRlci5maW5kRWxlbWVudChlbHROYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAoZWx0ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBlbHQuZ2V0VHlwZSgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLlNUX05PX1RZUEU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh4c2lUeXBlICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2NoZW1hVHlwZSBpdHlwZSA9IHdpbGRjYXJkVHlwZUxvYWRlci5maW5kVHlwZSh4c2lUeXBlKTsKLSAgICAgICAgICAgICAgICBpZiAoaXR5cGUgPT0gbnVsbCB8fCAhdHlwZS5pc0Fzc2lnbmFibGVGcm9tKGl0eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgdHlwZSA9IEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLlNUX05PX1RZUEU7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB0eXBlID0gaXR5cGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodHlwZSAhPSBudWxsKQotICAgICAgICAgICAgcmV0dXJuICgoU2NoZW1hVHlwZUltcGwpdHlwZSkuY3JlYXRlVW5hdHRhY2hlZE5vZGUocHJvcCk7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBYbWxPYmplY3QgY3JlYXRlQXR0cmlidXRlVHlwZShRTmFtZSBhdHRyTmFtZSwgU2NoZW1hVHlwZUxvYWRlciB3aWxkY2FyZFR5cGVMb2FkZXIpCi0gICAgewotICAgICAgICBTY2hlbWFUeXBlSW1wbCB0eXBlID0gbnVsbDsKLSAgICAgICAgU2NoZW1hUHJvcGVydHkgcHJvcCA9IG51bGw7Ci0gICAgICAgIGlmIChpc1NpbXBsZVR5cGUoKSB8fCBpc05vVHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICB0eXBlID0gQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfTk9fVFlQRTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpc1VSVHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICB0eXBlID0gQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfQU5ZX1NJTVBMRTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByb3AgPSAoU2NoZW1hUHJvcGVydHkpX3Byb3BlcnR5TW9kZWxCeUF0dHJpYnV0ZU5hbWUuZ2V0KGF0dHJOYW1lKTsKLSAgICAgICAgICAgIGlmIChwcm9wICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHlwZSA9IChTY2hlbWFUeXBlSW1wbClwcm9wLmdldFR5cGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKCFfdHlwZWRXaWxkY2FyZEF0dHJpYnV0ZXMuY29udGFpbnMoYXR0ck5hbWUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHR5cGUgPSBCdWlsdGluU2NoZW1hVHlwZVN5c3RlbS5TVF9OT19UWVBFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNjaGVtYUdsb2JhbEF0dHJpYnV0ZSBhdHRyID0gd2lsZGNhcmRUeXBlTG9hZGVyLmZpbmRBdHRyaWJ1dGUoYXR0ck5hbWUpOwotICAgICAgICAgICAgICAgIGlmIChhdHRyICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHR5cGUgPSAoU2NoZW1hVHlwZUltcGwpYXR0ci5nZXRUeXBlKCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB0eXBlID0gQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfTk9fVFlQRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0eXBlICE9IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gdHlwZS5jcmVhdGVVbmF0dGFjaGVkTm9kZShwcm9wKTsKLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRXaWxkY2FyZFN1bW1hcnkoUU5hbWVTZXQgZWxlbWVudFNldCwgYm9vbGVhbiBoYXN3Y0VsdCwgUU5hbWVTZXQgYXR0cmlidXRlU2V0LCBib29sZWFuIGhhc3djQXR0KQotICAgIHsKLSAgICAgICAgYXNzZXJ0UmVzb2x2aW5nKCk7IF90eXBlZFdpbGRjYXJkRWxlbWVudHMgPSBlbGVtZW50U2V0OyBfaGFzV2lsZGNhcmRFbGVtZW50cyA9IGhhc3djRWx0OyBfdHlwZWRXaWxkY2FyZEF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVTZXQ7IF9oYXNXaWxkY2FyZEF0dHJpYnV0ZXMgPSBoYXN3Y0F0dDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hVHlwZVtdIGdldEFub255bW91c1R5cGVzKCkKLSAgICB7Ci0gICAgICAgIFNjaGVtYVR5cGVbXSByZXN1bHQgPSBuZXcgU2NoZW1hVHlwZVtfYW5vbnltb3VzVHlwZXJlZnMubGVuZ3RoXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICByZXN1bHRbaV0gPSBfYW5vbnltb3VzVHlwZXJlZnNbaV0uZ2V0KCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0QW5vbnltb3VzVHlwZVJlZnMoU2NoZW1hVHlwZS5SZWZbXSBhbm9ueW1vdXNUeXBlcmVmcykKLSAgICB7Ci0gICAgICAgIF9hbm9ueW1vdXNUeXBlcmVmcyA9IGFub255bW91c1R5cGVyZWZzOwotICAgIH0KLQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2NoZW1hVHlwZVtdIHN0YUNvcHkoU2NoZW1hVHlwZVtdIGEpCi0gICAgewotICAgICAgICBpZiAoYSA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgU2NoZW1hVHlwZVtdIHJlc3VsdCA9IG5ldyBTY2hlbWFUeXBlW2EubGVuZ3RoXTsKLSAgICAgICAgU3lzdGVtLmFycmF5Y29weShhLCAwLCByZXN1bHQsIDAsIGEubGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuW10gYm9hQ29weShib29sZWFuW10gYSkKLSAgICB7Ci0gICAgICAgIGlmIChhID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICBib29sZWFuW10gcmVzdWx0ID0gbmV3IGJvb2xlYW5bYS5sZW5ndGhdOwotICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGEsIDAsIHJlc3VsdCwgMCwgYS5sZW5ndGgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotCi0KLSAgICBwdWJsaWMgdm9pZCBzZXRTaW1wbGVUeXBlVmFyaWV0eShpbnQgdmFyaWV0eSkKLSAgICAgICAgeyBhc3NlcnRSZXNvbHZpbmcoKTsgX3NpbXBsZVR5cGVWYXJpZXR5ID0gdmFyaWV0eTsgfQotCi0gICAgcHVibGljIGludCBnZXRTaW1wbGVWYXJpZXR5KCkKLSAgICAgICAgeyByZXR1cm4gX3NpbXBsZVR5cGVWYXJpZXR5OyB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1VSVHlwZSgpCi0gICAgICAgIHsgcmV0dXJuIF9idWlsdGluVHlwZUNvZGUgPT0gQlRDX0FOWV9UWVBFIHx8IF9idWlsdGluVHlwZUNvZGUgPT0gQlRDX0FOWV9TSU1QTEU7IH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzTm9UeXBlKCkKLSAgICAgICAgeyByZXR1cm4gdGhpcyA9PSBCdWlsdGluU2NoZW1hVHlwZVN5c3RlbS5TVF9OT19UWVBFOyB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1NpbXBsZVR5cGUoKQotICAgICAgICB7IHJldHVybiBfaXNTaW1wbGVUeXBlOyB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRTaW1wbGVUeXBlKGJvb2xlYW4gZikKLSAgICAgICAgeyBhc3NlcnRVbnJlc29sdmVkKCk7IF9pc1NpbXBsZVR5cGUgPSBmOyB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1VuaW9uT2ZMaXN0cygpCi0gICAgICAgIHsgcmV0dXJuIF9pc1VuaW9uT2ZMaXN0czsgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VW5pb25PZkxpc3RzKGJvb2xlYW4gZikKLSAgICAgICAgeyBhc3NlcnRSZXNvbHZpbmcoKTsgX2lzVW5pb25PZkxpc3RzID0gZjsgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgZ2V0UHJpbWl0aXZlVHlwZSgpCi0gICAgICAgIHsgcmV0dXJuIF9wcmltaXRpdmVUeXBlUmVmID09IG51bGwgPyBudWxsIDogX3ByaW1pdGl2ZVR5cGVSZWYuZ2V0KCk7IH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFByaW1pdGl2ZVR5cGVSZWYoU2NoZW1hVHlwZS5SZWYgdHlwZXJlZikKLSAgICAgICAgeyBhc3NlcnRSZXNvbHZpbmcoKTsgX3ByaW1pdGl2ZVR5cGVSZWYgPSB0eXBlcmVmOyB9Ci0KLSAgICBwdWJsaWMgaW50IGdldERlY2ltYWxTaXplKCkKLSAgICAgICAgeyByZXR1cm4gX2RlY2ltYWxTaXplOyB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXREZWNpbWFsU2l6ZShpbnQgYml0cykKLSAgICAgICAgeyBhc3NlcnRSZXNvbHZpbmcoKTsgX2RlY2ltYWxTaXplID0gYml0czsgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgZ2V0QmFzZVR5cGUoKQotICAgICAgICB7IHJldHVybiBfYmFzZVR5cGVyZWYgPT0gbnVsbCA/IG51bGwgOiBfYmFzZVR5cGVyZWYuZ2V0KCk7IH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEJhc2VUeXBlUmVmKFNjaGVtYVR5cGUuUmVmIHR5cGVyZWYpCi0gICAgICAgIHsgYXNzZXJ0UmVzb2x2aW5nKCk7IF9iYXNlVHlwZXJlZiA9IHR5cGVyZWY7IH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0QmFzZURlcHRoKCkKLSAgICAgICAgeyByZXR1cm4gX2Jhc2VEZXB0aDsgfQotCi0gICAgcHVibGljIHZvaWQgc2V0QmFzZURlcHRoKGludCBkZXB0aCkKLSAgICAgICAgeyBhc3NlcnRSZXNvbHZpbmcoKTsgX2Jhc2VEZXB0aCA9IGRlcHRoOyB9Ci0KLSAgICBwdWJsaWMgaW50IGdldERlcml2YXRpb25UeXBlKCkKLSAgICAgICAgeyByZXR1cm4gX2Rlcml2YXRpb25UeXBlOyB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXREZXJpdmF0aW9uVHlwZShpbnQgdHlwZSkKLSAgICAgICAgeyBhc3NlcnRSZXNvbHZpbmcoKTsgX2Rlcml2YXRpb25UeXBlID0gdHlwZTsgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgZ2V0TGlzdEl0ZW1UeXBlKCkKLSAgICAgICAgeyByZXR1cm4gX2xpc3RJdGVtVHlwZXJlZiA9PSBudWxsID8gbnVsbCA6IF9saXN0SXRlbVR5cGVyZWYuZ2V0KCk7IH0KLQotICAgIHB1YmxpYyB2b2lkIHNldExpc3RJdGVtVHlwZVJlZihTY2hlbWFUeXBlLlJlZiB0eXBlcmVmKQotICAgICAgICB7IGFzc2VydFJlc29sdmluZygpOyBfbGlzdEl0ZW1UeXBlcmVmID0gdHlwZXJlZjsgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGVbXSBnZXRVbmlvbk1lbWJlclR5cGVzKCkKLSAgICB7Ci0gICAgICAgIFNjaGVtYVR5cGVbXSByZXN1bHQgPSBuZXcgU2NoZW1hVHlwZVtfdW5pb25NZW1iZXJUeXBlcmVmcy5sZW5ndGhdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHJlc3VsdFtpXSA9IF91bmlvbk1lbWJlclR5cGVyZWZzW2ldLmdldCgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFVuaW9uTWVtYmVyVHlwZVJlZnMoU2NoZW1hVHlwZS5SZWZbXSB0eXBlcmVmcykKLSAgICAgICAgeyBhc3NlcnRSZXNvbHZpbmcoKTsgX3VuaW9uTWVtYmVyVHlwZXJlZnMgPSB0eXBlcmVmczsgfQotCi0gICAgcHVibGljIGludCBnZXRBbm9ueW1vdXNVbmlvbk1lbWJlck9yZGluYWwoKQotICAgICAgICB7IHJldHVybiBfYW5vbnltb3VzVW5pb25NZW1iZXJPcmRpbmFsOyB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRBbm9ueW1vdXNVbmlvbk1lbWJlck9yZGluYWwoaW50IGkpCi0gICAgICAgIHsgYXNzZXJ0VW5yZXNvbHZlZCgpOyBfYW5vbnltb3VzVW5pb25NZW1iZXJPcmRpbmFsID0gaTsgfQotCi0gICAgcHVibGljIHN5bmNocm9uaXplZCBTY2hlbWFUeXBlW10gZ2V0VW5pb25Db25zdGl0dWVudFR5cGVzKCkKLSAgICB7Ci0gICAgICAgIGlmIChfdW5pb25Db21tb25CYXNlVHlwZSA9PSBudWxsKQotICAgICAgICAgICAgY29tcHV0ZUZsYXRVbmlvbk1vZGVsKCk7Ci0gICAgICAgIHJldHVybiBzdGFDb3B5KF91bmlvbkNvbnN0aXR1ZW50VHlwZXMpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzZXRVbmlvbkNvbnN0aXR1ZW50VHlwZXMoU2NoZW1hVHlwZVtdIHR5cGVzKQotICAgICAgICB7IF91bmlvbkNvbnN0aXR1ZW50VHlwZXMgPSB0eXBlczsgfQotCi0gICAgcHVibGljIHN5bmNocm9uaXplZCBTY2hlbWFUeXBlW10gZ2V0VW5pb25TdWJUeXBlcygpCi0gICAgewotICAgICAgICBpZiAoX3VuaW9uQ29tbW9uQmFzZVR5cGUgPT0gbnVsbCkKLSAgICAgICAgICAgIGNvbXB1dGVGbGF0VW5pb25Nb2RlbCgpOwotICAgICAgICByZXR1cm4gc3RhQ29weShfdW5pb25TdWJUeXBlcyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNldFVuaW9uU3ViVHlwZXMoU2NoZW1hVHlwZVtdIHR5cGVzKQotICAgICAgICB7IF91bmlvblN1YlR5cGVzID0gdHlwZXM7IH0KLQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgU2NoZW1hVHlwZSBnZXRVbmlvbkNvbW1vbkJhc2VUeXBlKCkKLSAgICB7Ci0gICAgICAgIGlmIChfdW5pb25Db21tb25CYXNlVHlwZSA9PSBudWxsKQotICAgICAgICAgICAgY29tcHV0ZUZsYXRVbmlvbk1vZGVsKCk7Ci0gICAgICAgIHJldHVybiBfdW5pb25Db21tb25CYXNlVHlwZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2V0VW5pb25Db21tb25CYXNlVHlwZShTY2hlbWFUeXBlIHR5cGUpCi0gICAgICAgIHsgX3VuaW9uQ29tbW9uQmFzZVR5cGUgPSB0eXBlOyB9Ci0KLSAgICBwcml2YXRlIHZvaWQgY29tcHV0ZUZsYXRVbmlvbk1vZGVsKCkKLSAgICB7Ci0gICAgICAgIFNldCBjb25zdGl0dWVudE1lbWJlclR5cGVzID0gbmV3IExpbmtlZEhhc2hTZXQoKTsKLSAgICAgICAgU2V0IGFsbFN1YlR5cGVzID0gbmV3IExpbmtlZEhhc2hTZXQoKTsKLSAgICAgICAgU2NoZW1hVHlwZSBjb21tb25CYXNlVHlwZSA9IG51bGw7Ci0KLSAgICAgICAgYWxsU3ViVHlwZXMuYWRkKHRoaXMpOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX3VuaW9uTWVtYmVyVHlwZXJlZnMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYVR5cGVJbXBsIG1JbXBsID0gKFNjaGVtYVR5cGVJbXBsKV91bmlvbk1lbWJlclR5cGVyZWZzW2ldLmdldCgpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKG1JbXBsLmdldFNpbXBsZVZhcmlldHkoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuTElTVDoKLSAgICAgICAgICAgICAgICAgICAgY29uc3RpdHVlbnRNZW1iZXJUeXBlcy5hZGQobUltcGwpOwotICAgICAgICAgICAgICAgICAgICBhbGxTdWJUeXBlcy5hZGQobUltcGwpOwotICAgICAgICAgICAgICAgICAgICBjb21tb25CYXNlVHlwZSA9IG1JbXBsLmdldENvbW1vbkJhc2VUeXBlKGNvbW1vbkJhc2VUeXBlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLlVOSU9OOgotICAgICAgICAgICAgICAgICAgICBjb25zdGl0dWVudE1lbWJlclR5cGVzLmFkZEFsbChBcnJheXMuYXNMaXN0KG1JbXBsLmdldFVuaW9uQ29uc3RpdHVlbnRUeXBlcygpKSk7Ci0gICAgICAgICAgICAgICAgICAgIGFsbFN1YlR5cGVzLmFkZEFsbChBcnJheXMuYXNMaXN0KG1JbXBsLmdldFVuaW9uU3ViVHlwZXMoKSkpOwotICAgICAgICAgICAgICAgICAgICBTY2hlbWFUeXBlIG90aGVyQ29tbW9uQmFzZVR5cGUgPSBtSW1wbC5nZXRVbmlvbkNvbW1vbkJhc2VUeXBlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvdGhlckNvbW1vbkJhc2VUeXBlICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21tb25CYXNlVHlwZSA9IG90aGVyQ29tbW9uQmFzZVR5cGUuZ2V0Q29tbW9uQmFzZVR5cGUoY29tbW9uQmFzZVR5cGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQVRPTUlDOgotICAgICAgICAgICAgICAgICAgICBjb25zdGl0dWVudE1lbWJlclR5cGVzLmFkZChtSW1wbCk7Ci0gICAgICAgICAgICAgICAgICAgIGFsbFN1YlR5cGVzLmFkZChtSW1wbCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbW1vbkJhc2VUeXBlID0gbUltcGwuZ2V0Q29tbW9uQmFzZVR5cGUoY29tbW9uQmFzZVR5cGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgc2V0VW5pb25Db25zdGl0dWVudFR5cGVzKChTY2hlbWFUeXBlW10pCi0gICAgICAgICAgICAgICAgY29uc3RpdHVlbnRNZW1iZXJUeXBlcy50b0FycmF5KFN0c2NTdGF0ZS5FTVBUWV9TVF9BUlJBWSkpOwotICAgICAgICBzZXRVbmlvblN1YlR5cGVzKChTY2hlbWFUeXBlW10pCi0gICAgICAgICAgICAgICAgYWxsU3ViVHlwZXMudG9BcnJheShTdHNjU3RhdGUuRU1QVFlfU1RfQVJSQVkpKTsKLSAgICAgICAgc2V0VW5pb25Db21tb25CYXNlVHlwZShjb21tb25CYXNlVHlwZSk7Ci0gICAgfQotCi0gICAgcHVibGljIFFOYW1lIGdldFN1YnN0aXR1dGlvbkdyb3VwKCkKLSAgICAgICAgeyByZXR1cm4gX3NnOyB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRTdWJzdGl0dXRpb25Hcm91cChRTmFtZSBzZykKLSAgICAgICAgeyBhc3NlcnRTR1Jlc29sdmluZygpOyBfc2cgPSBzZzsgfQotCi0gICAgcHVibGljIHZvaWQgYWRkU3Vic3RpdHV0aW9uR3JvdXBNZW1iZXIoUU5hbWUgbWVtYmVyKQotICAgICAgICB7IGFzc2VydFNHUmVzb2x2ZWQoKTsgX3NnTWVtYmVycy5hZGQobWVtYmVyKTsgfQotCi0gICAgcHVibGljIFFOYW1lW10gZ2V0U3Vic3RpdHV0aW9uR3JvdXBNZW1iZXJzKCkKLSAgICB7Ci0gICAgICAgIFFOYW1lW10gcmVzdWx0ID0gbmV3IFFOYW1lW19zZ01lbWJlcnMuc2l6ZSgpXTsKLSAgICAgICAgcmV0dXJuIChRTmFtZVtdKV9zZ01lbWJlcnMudG9BcnJheShyZXN1bHQpOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0V2hpdGVTcGFjZVJ1bGUoKQotICAgICAgICB7IHJldHVybiBfd2hpdGVTcGFjZVJ1bGU7IH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFdoaXRlU3BhY2VSdWxlKGludCB3cykKLSAgICAgICAgeyBhc3NlcnRSZXNvbHZpbmcoKTsgX3doaXRlU3BhY2VSdWxlID0gd3M7IH0KLQotICAgIHB1YmxpYyBYbWxBbnlTaW1wbGVUeXBlIGdldEZhY2V0KGludCBmYWNldENvZGUpCi0gICAgewotICAgICAgICBpZiAoX2ZhY2V0QXJyYXkgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICBYbWxWYWx1ZVJlZiByZWYgPSBfZmFjZXRBcnJheVtmYWNldENvZGVdOwotICAgICAgICBpZiAocmVmID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgcmV0dXJuIHJlZi5nZXQoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0ZhY2V0Rml4ZWQoaW50IGZhY2V0Q29kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfZml4ZWRGYWNldEFycmF5W2ZhY2V0Q29kZV07Ci0gICAgfQotCi0gICAgcHVibGljIFhtbEFueVNpbXBsZVR5cGVbXSBnZXRCYXNpY0ZhY2V0cygpCi0gICAgewotICAgICAgICBYbWxBbnlTaW1wbGVUeXBlW10gcmVzdWx0ID0gbmV3IFhtbEFueVNpbXBsZVR5cGVbU2NoZW1hVHlwZS5MQVNUX0ZBQ0VUICsgMV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IFNjaGVtYVR5cGUuTEFTVF9GQUNFVDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHRbaV0gPSBnZXRGYWNldChpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuW10gZ2V0Rml4ZWRGYWNldHMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJvYUNvcHkoX2ZpeGVkRmFjZXRBcnJheSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0QmFzaWNGYWNldHMoWG1sVmFsdWVSZWZbXSB2YWx1ZXMsIGJvb2xlYW5bXSBmaXhlZCkKLSAgICB7Ci0gICAgICAgIGFzc2VydFJlc29sdmluZygpOwotICAgICAgICBfZmFjZXRBcnJheSA9IHZhbHVlczsKLSAgICAgICAgX2ZpeGVkRmFjZXRBcnJheSA9IGZpeGVkOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgb3JkZXJlZCgpCi0gICAgICAgIHsgcmV0dXJuIF9vcmRlcmVkOyB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRPcmRlcmVkKGludCBvcmRlcmluZykKLSAgICAgICAgeyBhc3NlcnRSZXNvbHZpbmcoKTsgX29yZGVyZWQgPSBvcmRlcmluZzsgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNCb3VuZGVkKCkKLSAgICAgICAgeyByZXR1cm4gX2lzQm91bmRlZDsgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Qm91bmRlZChib29sZWFuIGYpCi0gICAgICAgIHsgYXNzZXJ0UmVzb2x2aW5nKCk7IF9pc0JvdW5kZWQgPSBmOyB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0Zpbml0ZSgpCi0gICAgICAgIHsgcmV0dXJuIF9pc0Zpbml0ZTsgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RmluaXRlKGJvb2xlYW4gZikKLSAgICAgICAgeyBhc3NlcnRSZXNvbHZpbmcoKTsgX2lzRmluaXRlID0gZjsgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNOdW1lcmljKCkKLSAgICAgICAgeyByZXR1cm4gX2lzTnVtZXJpYzsgfQotCi0gICAgcHVibGljIHZvaWQgc2V0TnVtZXJpYyhib29sZWFuIGYpCi0gICAgICAgIHsgYXNzZXJ0UmVzb2x2aW5nKCk7IF9pc051bWVyaWMgPSBmOyB9Ci0KLQotICAgIHB1YmxpYyBib29sZWFuIGhhc1BhdHRlcm5GYWNldCgpCi0gICAgICAgIHsgcmV0dXJuIF9oYXNQYXR0ZXJuczsgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UGF0dGVybkZhY2V0KGJvb2xlYW4gaGFzUGF0dGVybnMpCi0gICAgICAgIHsgYXNzZXJ0UmVzb2x2aW5nKCk7IF9oYXNQYXR0ZXJucyA9IGhhc1BhdHRlcm5zOyB9Ci0KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIGJvb2xlYW4gbWF0Y2hQYXR0ZXJuRmFjZXQoU3RyaW5nIHMpCi0gICAgewotICAgICAgICBpZiAoIV9oYXNQYXR0ZXJucykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGlmIChfcGF0dGVybnMgIT0gbnVsbCAmJiBfcGF0dGVybnMubGVuZ3RoID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGk7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgX3BhdHRlcm5zLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChfcGF0dGVybnNbaV0ubWF0Y2hlcyhzKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaSA+PSBfcGF0dGVybnMubGVuZ3RoKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBnZXRCYXNlVHlwZSgpLm1hdGNoUGF0dGVybkZhY2V0KHMpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRQYXR0ZXJucygpCi0gICAgewotICAgICAgICBpZiAoX3BhdHRlcm5zID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICAgICAgU3RyaW5nW10gcGF0dGVybnMgPSBuZXcgU3RyaW5nW19wYXR0ZXJucy5sZW5ndGhdOwotICAgICAgICBmb3IgKGludCBpPTA7IGk8IF9wYXR0ZXJucy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHBhdHRlcm5zW2ldID0gX3BhdHRlcm5zW2ldLmdldFBhdHRlcm4oKTsKLSAgICAgICAgcmV0dXJuIHBhdHRlcm5zOwotICAgIH0KLQotICAgIHB1YmxpYyBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwucmVnZXguUmVndWxhckV4cHJlc3Npb25bXSBnZXRQYXR0ZXJuRXhwcmVzc2lvbnMoKQotICAgIHsKLSAgICAgICAgaWYgKF9wYXR0ZXJucyA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG5ldyBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwucmVnZXguUmVndWxhckV4cHJlc3Npb25bMF07Ci0gICAgICAgIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5yZWdleC5SZWd1bGFyRXhwcmVzc2lvbltdIHJlc3VsdCA9IG5ldyBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwucmVnZXguUmVndWxhckV4cHJlc3Npb25bX3BhdHRlcm5zLmxlbmd0aF07Ci0gICAgICAgIFN5c3RlbS5hcnJheWNvcHkoX3BhdHRlcm5zLCAwLCByZXN1bHQsIDAsIF9wYXR0ZXJucy5sZW5ndGgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFBhdHRlcm5zKG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5yZWdleC5SZWd1bGFyRXhwcmVzc2lvbltdIGxpc3QpCi0gICAgICAgIHsgYXNzZXJ0UmVzb2x2aW5nKCk7IF9wYXR0ZXJucyA9IGxpc3Q7IH0KLQotICAgIHB1YmxpYyBYbWxBbnlTaW1wbGVUeXBlW10gZ2V0RW51bWVyYXRpb25WYWx1ZXMoKQotICAgIHsKLSAgICAgICAgaWYgKF9lbnVtZXJhdGlvblZhbHVlcyA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIFhtbEFueVNpbXBsZVR5cGVbXSByZXN1bHQgPSBuZXcgWG1sQW55U2ltcGxlVHlwZVtfZW51bWVyYXRpb25WYWx1ZXMubGVuZ3RoXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFhtbFZhbHVlUmVmIHJlZiA9IF9lbnVtZXJhdGlvblZhbHVlc1tpXTsKLSAgICAgICAgICAgIHJlc3VsdFtpXSA9IChyZWYgPT0gbnVsbCA/IG51bGwgOiByZWYuZ2V0KCkpOwotCi0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRFbnVtZXJhdGlvblZhbHVlcyhYbWxWYWx1ZVJlZltdIGEpCi0gICAgICAgIHsgYXNzZXJ0UmVzb2x2aW5nKCk7IF9lbnVtZXJhdGlvblZhbHVlcyA9IGE7IH0KLQotICAgIHB1YmxpYyBTdHJpbmdFbnVtQWJzdHJhY3RCYXNlIGVudW1Gb3JTdHJpbmcoU3RyaW5nIHMpCi0gICAgewotICAgICAgICBlbnN1cmVTdHJpbmdFbnVtSW5mbygpOwotICAgICAgICBpZiAoX2xvb2t1cFN0cmluZ0VudW0gPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICByZXR1cm4gKFN0cmluZ0VudW1BYnN0cmFjdEJhc2UpX2xvb2t1cFN0cmluZ0VudW0uZ2V0KHMpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmdFbnVtQWJzdHJhY3RCYXNlIGVudW1Gb3JJbnQoaW50IGkpCi0gICAgewotICAgICAgICBlbnN1cmVTdHJpbmdFbnVtSW5mbygpOwotICAgICAgICBpZiAoX2xpc3RPZlN0cmluZ0VudW0gPT0gbnVsbCB8fCBpIDwgMCB8fCBpID49IF9saXN0T2ZTdHJpbmdFbnVtLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICByZXR1cm4gKFN0cmluZ0VudW1BYnN0cmFjdEJhc2UpX2xpc3RPZlN0cmluZ0VudW0uZ2V0KGkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFTdHJpbmdFbnVtRW50cnkgZW51bUVudHJ5Rm9yU3RyaW5nKFN0cmluZyBzKQotICAgIHsKLSAgICAgICAgZW5zdXJlU3RyaW5nRW51bUluZm8oKTsKLSAgICAgICAgaWYgKF9sb29rdXBTdHJpbmdFbnVtRW50cnkgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICByZXR1cm4gKFNjaGVtYVN0cmluZ0VudW1FbnRyeSlfbG9va3VwU3RyaW5nRW51bUVudHJ5LmdldChzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hVHlwZSBnZXRCYXNlRW51bVR5cGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9iYXNlRW51bVR5cGVyZWYgPT0gbnVsbCA/IG51bGwgOiBfYmFzZUVudW1UeXBlcmVmLmdldCgpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEJhc2VFbnVtVHlwZVJlZihTY2hlbWFUeXBlLlJlZiBiYXNlRW51bVR5cGVyZWYpCi0gICAgewotICAgICAgICBfYmFzZUVudW1UeXBlcmVmID0gYmFzZUVudW1UeXBlcmVmOwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFTdHJpbmdFbnVtRW50cnlbXSBnZXRTdHJpbmdFbnVtRW50cmllcygpCi0gICAgewotICAgICAgICBpZiAoX3N0cmluZ0VudW1FbnRyaWVzID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgU2NoZW1hU3RyaW5nRW51bUVudHJ5W10gcmVzdWx0ID0gbmV3IFNjaGVtYVN0cmluZ0VudW1FbnRyeVtfc3RyaW5nRW51bUVudHJpZXMubGVuZ3RoXTsKLSAgICAgICAgU3lzdGVtLmFycmF5Y29weShfc3RyaW5nRW51bUVudHJpZXMsIDAsIHJlc3VsdCwgMCwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0U3RyaW5nRW51bUVudHJpZXMoU2NoZW1hU3RyaW5nRW51bUVudHJ5IHNFbnVtc1tdKQotICAgIHsKLSAgICAgICAgYXNzZXJ0SmF2YWl6aW5nKCk7Ci0gICAgICAgIF9zdHJpbmdFbnVtRW50cmllcyA9IHNFbnVtczsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgZW5zdXJlU3RyaW5nRW51bUluZm8oKQotICAgIHsKLSAgICAgICAgaWYgKF9zdHJpbmdFbnVtRW5zdXJlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBTY2hlbWFTdHJpbmdFbnVtRW50cnlbXSBzRW51bXMgPSBfc3RyaW5nRW51bUVudHJpZXM7Ci0gICAgICAgIGlmIChzRW51bXMgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgX3N0cmluZ0VudW1FbnN1cmVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIE1hcCBsb29rdXBTdHJpbmdFbnVtID0gbmV3IEhhc2hNYXAoc0VudW1zLmxlbmd0aCk7Ci0gICAgICAgIExpc3QgbGlzdE9mU3RyaW5nRW51bSA9IG5ldyBBcnJheUxpc3Qoc0VudW1zLmxlbmd0aCArIDEpOwotICAgICAgICBNYXAgbG9va3VwU3RyaW5nRW51bUVudHJ5ID0gbmV3IEhhc2hNYXAoc0VudW1zLmxlbmd0aCk7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzRW51bXMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvb2t1cFN0cmluZ0VudW1FbnRyeS5wdXQoc0VudW1zW2ldLmdldFN0cmluZygpLCBzRW51bXNbaV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgQ2xhc3MgamMgPSBfYmFzZUVudW1UeXBlcmVmLmdldCgpLmdldEVudW1KYXZhQ2xhc3MoKTsKLSAgICAgICAgaWYgKGpjICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGUgdGFibGUgPSAoU3RyaW5nRW51bUFic3RyYWN0QmFzZS5UYWJsZSlqYy5nZXRGaWVsZCgidGFibGUiKS5nZXQobnVsbCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzRW51bXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbnQgaiA9IHNFbnVtc1tpXS5nZXRJbnRWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICBTdHJpbmdFbnVtQWJzdHJhY3RCYXNlIGVudW1WYWwgPSB0YWJsZS5mb3JJbnQoaik7Ci0gICAgICAgICAgICAgICAgICAgIGxvb2t1cFN0cmluZ0VudW0ucHV0KHNFbnVtc1tpXS5nZXRTdHJpbmcoKSwgZW51bVZhbCk7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChsaXN0T2ZTdHJpbmdFbnVtLnNpemUoKSA8PSBqKQotICAgICAgICAgICAgICAgICAgICAgICAgbGlzdE9mU3RyaW5nRW51bS5hZGQobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIGxpc3RPZlN0cmluZ0VudW0uc2V0KGosIGVudW1WYWwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlNvbWV0aGluZyB3cm9uZzogY291bGQgbm90IGxvY2F0ZSBlbnVtIHRhYmxlIGZvciAiICsgamMpOwotICAgICAgICAgICAgICAgIGpjID0gbnVsbDsKLSAgICAgICAgICAgICAgICBsb29rdXBTdHJpbmdFbnVtLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgbGlzdE9mU3RyaW5nRW51bS5jbGVhcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGpjID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc0VudW1zLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBqID0gc0VudW1zW2ldLmdldEludFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHMgPSBzRW51bXNbaV0uZ2V0U3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nRW51bUFic3RyYWN0QmFzZSBlbnVtVmFsID0gbmV3IFN0cmluZ0VudW1WYWx1ZShzLCBqKTsKLSAgICAgICAgICAgICAgICBsb29rdXBTdHJpbmdFbnVtLnB1dChzLCBlbnVtVmFsKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAobGlzdE9mU3RyaW5nRW51bS5zaXplKCkgPD0gaikKLSAgICAgICAgICAgICAgICAgICAgbGlzdE9mU3RyaW5nRW51bS5hZGQobnVsbCk7Ci0gICAgICAgICAgICAgICAgbGlzdE9mU3RyaW5nRW51bS5zZXQoaiwgZW51bVZhbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghX3N0cmluZ0VudW1FbnN1cmVkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9sb29rdXBTdHJpbmdFbnVtID0gbG9va3VwU3RyaW5nRW51bTsKLSAgICAgICAgICAgICAgICBfbGlzdE9mU3RyaW5nRW51bSA9IGxpc3RPZlN0cmluZ0VudW07Ci0gICAgICAgICAgICAgICAgX2xvb2t1cFN0cmluZ0VudW1FbnRyeSA9IGxvb2t1cFN0cmluZ0VudW1FbnRyeTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBIQUNLSEFDSzogdHdvIHN5bmNyaG9uaXplZCBibG9ja3MgZm9yY2UgYSBtZW1vcnkgYmFycmllcjoKLSAgICAgICAgLy8gQlVHQlVHOiB0aGlzIGJlaGF2aW9yIGlzIGxpa2VseSB0byBjaGFuZ2UgaW4gZnV0dXJlIFZNcwotICAgICAgICBzeW5jaHJvbml6ZWQgKHRoaXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9zdHJpbmdFbnVtRW5zdXJlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNTdHJpbmdFbnVtVmFsdWVzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfc3RyaW5nRW51bUVudHJpZXMgIT0gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBjb3B5RW51bWVyYXRpb25WYWx1ZXMoU2NoZW1hVHlwZUltcGwgYmFzZUltcGwpCi0gICAgewotICAgICAgICBhc3NlcnRSZXNvbHZpbmcoKTsKLSAgICAgICAgX2VudW1lcmF0aW9uVmFsdWVzID0gYmFzZUltcGwuX2VudW1lcmF0aW9uVmFsdWVzOwotICAgICAgICBfYmFzZUVudW1UeXBlcmVmID0gYmFzZUltcGwuX2Jhc2VFbnVtVHlwZXJlZjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldEJ1aWx0aW5UeXBlQ29kZSgpCi0gICAgICAgIHsgcmV0dXJuIF9idWlsdGluVHlwZUNvZGU7IH0gLy8gc3BlY2lhbDogc2V0IHVwIHByZS1pbml0Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRCdWlsdGluVHlwZUNvZGUoaW50IGJ1aWx0aW5UeXBlQ29kZSkKLSAgICAgICAgeyBhc3NlcnRSZXNvbHZpbmcoKTsgX2J1aWx0aW5UeXBlQ29kZSA9IGJ1aWx0aW5UeXBlQ29kZTsgfQotCi0gICAgcHVibGljIENsYXNzIGdldEphdmFDbGFzcygpCi0gICAgewotICAgICAgICAvLyBUaGlzIGZpZWxkIGlzIGRlY2xhcmVkIHZvbGF0aWxlIGFuZCBDbGFzcyBpcyBpbW11dGFibGUgc28gdGhpcyBpcyBhbGxvd2VkLgotICAgICAgICBpZiAoX2phdmFDbGFzcyA9PSBudWxsICYmIGdldEZ1bGxKYXZhTmFtZSgpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgIHsgX2phdmFDbGFzcyA9IENsYXNzLmZvck5hbWUoZ2V0RnVsbEphdmFOYW1lKCksIGZhbHNlLCBfdHlwZVN5c3RlbS5nZXRDbGFzc0xvYWRlcigpKTsgfQotICAgICAgICAgICAgY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNvdWxkIG5vdCBmaW5kIGNsYXNzIG5hbWUgIiArIGdldEZ1bGxKYXZhTmFtZSgpKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlNlYXJjaGVkIGluIGNsYXNzbG9hZGVyICIgKyBfdHlwZVN5c3RlbS5nZXRDbGFzc0xvYWRlcigpKTsKLSAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKLSAgICAgICAgICAgICAgICBfamF2YUNsYXNzID0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBfamF2YUNsYXNzOwotICAgIH0KLQotICAgIHB1YmxpYyBDbGFzcyBnZXRKYXZhSW1wbENsYXNzKCkgewotICAgICAgICBpZiAoX2ltcGxOb3RBdmFpbGFibGUpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICBpZiAoX2phdmFJbXBsQ2xhc3MgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBpZiAoZ2V0RnVsbEphdmFJbXBsTmFtZSgpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIF9qYXZhSW1wbENsYXNzID0gQ2xhc3MuZm9yTmFtZShnZXRGdWxsSmF2YUltcGxOYW1lKCksIGZhbHNlLCBfdHlwZVN5c3RlbS5nZXRDbGFzc0xvYWRlcigpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIF9pbXBsTm90QXZhaWxhYmxlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBfaW1wbE5vdEF2YWlsYWJsZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gX2phdmFJbXBsQ2xhc3M7Ci0gICAgfQotCi0gICAgcHVibGljIENvbnN0cnVjdG9yIGdldEphdmFJbXBsQ29uc3RydWN0b3IoKQotICAgIHsKLSAgICAgICAgaWYgKF9qYXZhSW1wbENvbnN0cnVjdG9yID09IG51bGwgJiYgIV9pbXBsTm90QXZhaWxhYmxlKQotICAgICAgICB7Ci0gICAgICAgICAgICBmaW5hbCBDbGFzcyBpbXBsID0gZ2V0SmF2YUltcGxDbGFzcygpOwotICAgICAgICAgICAgaWYgKGltcGwgPT0gbnVsbCkgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfamF2YUltcGxDb25zdHJ1Y3RvciA9IGltcGwuZ2V0Q29uc3RydWN0b3IobmV3IENsYXNzW10geyBTY2hlbWFUeXBlLmNsYXNzIH0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gX2phdmFJbXBsQ29uc3RydWN0b3I7Ci0KLSAgICB9Ci0KLSAgICBwdWJsaWMgQ29uc3RydWN0b3IgZ2V0SmF2YUltcGxDb25zdHJ1Y3RvcjIoKQotICAgIHsKLSAgICAgICAgaWYgKF9qYXZhSW1wbENvbnN0cnVjdG9yMiA9PSBudWxsICYmICFfaW1wbE5vdEF2YWlsYWJsZSkKLSAgICAgICAgewotICAgICAgICAgICAgZmluYWwgQ2xhc3MgaW1wbCA9IGdldEphdmFJbXBsQ2xhc3MoKTsKLSAgICAgICAgICAgIGlmIChpbXBsID09IG51bGwpIHJldHVybiBudWxsOwotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2phdmFJbXBsQ29uc3RydWN0b3IyID0gaW1wbC5nZXRDb25zdHJ1Y3RvcihuZXcgQ2xhc3NbXSB7IFNjaGVtYVR5cGUuY2xhc3MsIGJvb2xlYW4uY2xhc3MgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBfamF2YUltcGxDb25zdHJ1Y3RvcjI7Ci0KLSAgICB9Ci0KLSAgICBwdWJsaWMgQ2xhc3MgZ2V0RW51bUphdmFDbGFzcygpCi0gICAgewotICAgICAgICAvLyBUaGlzIGZpZWxkIGlzIGRlY2xhcmVkIHZvbGF0aWxlIGFuZCBDbGFzcyBpcyBpbW11dGFibGUgc28gdGhpcyBpcyBhbGxvd2VkLgotICAgICAgICBpZiAoX2phdmFFbnVtQ2xhc3MgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgeyBfamF2YUVudW1DbGFzcyA9IENsYXNzLmZvck5hbWUoZ2V0QmFzZUVudW1UeXBlKCkuZ2V0RnVsbEphdmFOYW1lKCkgKyAiJEVudW0iLCBmYWxzZSwgX3R5cGVTeXN0ZW0uZ2V0Q2xhc3NMb2FkZXIoKSk7IH0KLSAgICAgICAgICAgIGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICAgICAgeyBfamF2YUVudW1DbGFzcyA9IG51bGw7IH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBfamF2YUVudW1DbGFzczsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRKYXZhQ2xhc3MoQ2xhc3MgamF2YUNsYXNzKQotICAgIHsKLSAgICAgICAgYXNzZXJ0UmVzb2x2ZWQoKTsKLSAgICAgICAgX2phdmFDbGFzcyA9IGphdmFDbGFzczsKLSAgICAgICAgc2V0RnVsbEphdmFOYW1lKGphdmFDbGFzcy5nZXROYW1lKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzUHJpbWl0aXZlVHlwZSgpCi0gICAgewotICAgICAgICByZXR1cm4gKGdldEJ1aWx0aW5UeXBlQ29kZSgpID49IEJUQ19GSVJTVF9QUklNSVRJVkUgJiYKLSAgICAgICAgICAgICAgICBnZXRCdWlsdGluVHlwZUNvZGUoKSA8PSBCVENfTEFTVF9QUklNSVRJVkUpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzQnVpbHRpblR5cGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdldEJ1aWx0aW5UeXBlQ29kZSgpICE9IDA7Ci0gICAgfQotCi0gICAgcHVibGljIFhtbE9iamVjdCBjcmVhdGVVbndyYXBwZWROb2RlKCkKLSAgICB7Ci0gICAgICAgIC8vIFRvZG86IGF0dGFjaCBhIG5ldyB4bWwgc3RvcmUhCi0gICAgICAgIFhtbE9iamVjdCByZXN1bHQgPSBjcmVhdGVVbmF0dGFjaGVkTm9kZShudWxsKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUeXBlU3RvcmVVc2VyRmFjdG9yeSBpbXBsZW1lbnRhdGlvbgotICAgICAqLwotICAgIHB1YmxpYyBUeXBlU3RvcmVVc2VyIGNyZWF0ZVR5cGVTdG9yZVVzZXIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChUeXBlU3RvcmVVc2VyKWNyZWF0ZVVuYXR0YWNoZWROb2RlKG51bGwpOwotICAgIH0KLQotCi0gICAgcHVibGljIFhtbEFueVNpbXBsZVR5cGUgbmV3VmFsaWRhdGluZ1ZhbHVlKE9iamVjdCBvYmopCi0gICAgewotICAgICAgICByZXR1cm4gbmV3VmFsdWUob2JqLCB0cnVlKTsKLSAgICB9Ci0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhbiBpbW11dGFibGUgc2ltcGxlIHZhbHVlLgotICAgICAqLwotICAgIHB1YmxpYyBYbWxBbnlTaW1wbGVUeXBlIG5ld1ZhbHVlKE9iamVjdCBvYmopCi0gICAgewotICAgICAgICByZXR1cm4gbmV3VmFsdWUob2JqLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcHVibGljIFhtbEFueVNpbXBsZVR5cGUgbmV3VmFsdWUoT2JqZWN0IG9iaiwgYm9vbGVhbiB2YWxpZGF0ZU9uU2V0KQotICAgIHsKLSAgICAgICAgaWYgKCFpc1NpbXBsZVR5cGUoKSAmJiBnZXRDb250ZW50VHlwZSgpICE9IFNjaGVtYVR5cGUuU0lNUExFX0NPTlRFTlQpCi0gICAgICAgICAgICB0aHJvdyBuZXcgWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uKCk7IC8vIHZhbHVlcyBtdXN0IGJlIHNpbXBsZQotCi0gICAgICAgIFhtbE9iamVjdEJhc2UgcmVzdWx0ID0gKFhtbE9iamVjdEJhc2UpY3JlYXRlVW5hdHRhY2hlZE5vZGUobnVsbCk7Ci0gICAgICAgIGlmICh2YWxpZGF0ZU9uU2V0KQotICAgICAgICAgICAgcmVzdWx0LnNldFZhbGlkYXRlT25TZXQoKTsKLQotICAgICAgICAvLyBJbiB0aGUgY2FzZSBvZiB0cmVlIGNvcHksIG5lZWQgdG8gY2FsbCBhIHNwZWNsYSBzZXR0ZXIgdG8gYXZvaWQKLSAgICAgICAgLy8gc2V0KFhtbE9iamVjdCkKLSAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFhtbE9iamVjdCkKLSAgICAgICAgICAgIHJlc3VsdC5zZXRfbmV3VmFsdWUoKFhtbE9iamVjdClvYmopOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHQub2JqZWN0U2V0KG9iaik7Ci0KLSAgICAgICAgcmVzdWx0LmNoZWNrX2RhdGVkKCk7Ci0gICAgICAgIHJlc3VsdC5zZXRJbW11dGFibGUoKTsKLQotICAgICAgICByZXR1cm4gKFhtbEFueVNpbXBsZVR5cGUpIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoaXMgdHlwZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIFhtbE9iamVjdCBjcmVhdGVVbmF0dGFjaGVkTm9kZShTY2hlbWFQcm9wZXJ0eSBwcm9wKQotICAgIHsKLSAgICAgICAgWG1sT2JqZWN0IHJlc3VsdCA9IG51bGw7Ci0KLSAgICAgICAgaWYgKCFpc0J1aWx0aW5UeXBlKCkgJiYgIWlzTm9UeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiQXR0ZW1wdGluZyB0byBsb2FkIGltcGwgY2xhc3M6ICIgKyBnZXRGdWxsSmF2YUltcGxOYW1lKCkpOwotICAgICAgICAgICAgQ29uc3RydWN0b3IgY3RyID0gZ2V0SmF2YUltcGxDb25zdHJ1Y3RvcigpOwotICAgICAgICAgICAgaWYgKGN0ciAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCJTdWNjZWVkZWQhIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoWG1sT2JqZWN0KWN0ci5uZXdJbnN0YW5jZShfY3RyQXJncyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIHRyeWluZyB0byBpbnN0YW50aWF0ZSBpbXBsIGNsYXNzLiIpOwotICAgICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGNyZWF0ZUJ1aWx0aW5JbnN0YW5jZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaWYgbm8gcmVzdWx0LCB3ZSBtdXN0IGJlIGEgcmVzdHJpY3Rpb24gb2Ygc29tZSBjb21waWxlZCB0eXBlCi0gICAgICAgIGZvciAoU2NoZW1hVHlwZSBzVHlwZSA9IHRoaXM7IHJlc3VsdCA9PSBudWxsOyBzVHlwZSA9IHNUeXBlLmdldEJhc2VUeXBlKCkpCi0gICAgICAgICAgICByZXN1bHQgPSAoKFNjaGVtYVR5cGVJbXBsKXNUeXBlKS5jcmVhdGVVbmF0dGFjaGVkU3ViY2xhc3ModGhpcyk7Ci0KLSAgICAgICAgKChYbWxPYmplY3RCYXNlKXJlc3VsdCkuaW5pdF9mbGFncyhwcm9wKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFhtbE9iamVjdCBjcmVhdGVVbmF0dGFjaGVkU3ViY2xhc3MoU2NoZW1hVHlwZSBzVHlwZSkKLSAgICB7Ci0gICAgICAgIGlmICghaXNCdWlsdGluVHlwZSgpICYmICFpc05vVHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIkF0dGVtcHRpbmcgdG8gbG9hZCBpbXBsIGNsYXNzOiAiICsgZ2V0RnVsbEphdmFJbXBsTmFtZSgpKTsKLSAgICAgICAgICAgIENvbnN0cnVjdG9yIGN0ciA9IGdldEphdmFJbXBsQ29uc3RydWN0b3IyKCk7Ci0gICAgICAgICAgICBpZiAoY3RyICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIlN1Y2NlZWRlZCEiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChYbWxPYmplY3QpY3RyLm5ld0luc3RhbmNlKG5ldyBPYmplY3RbXSB7IHNUeXBlLCBzVHlwZS5pc1NpbXBsZVR5cGUoKSA/IEJvb2xlYW4uRkFMU0UgOiBCb29sZWFuLlRSVUUgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXhjZXB0aW9uIHRyeWluZyB0byBpbnN0YW50aWF0ZSBpbXBsIGNsYXNzLiIpOwotICAgICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1aWx0aW5TdWJjbGFzcyhzVHlwZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIFhtbE9iamVjdCBjcmVhdGVCdWlsdGluSW5zdGFuY2UoKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChnZXRCdWlsdGluVHlwZUNvZGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBCVENfTk9UX0JVSUxUSU46Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxBbnlUeXBlSW1wbChCdWlsdGluU2NoZW1hVHlwZVN5c3RlbS5TVF9OT19UWVBFKTsKLSAgICAgICAgICAgIGNhc2UgQlRDX0FOWV9UWVBFOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sQW55VHlwZUltcGwoKTsKLSAgICAgICAgICAgIGNhc2UgQlRDX0FOWV9TSU1QTEU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxBbnlTaW1wbGVUeXBlSW1wbCgpOwotICAgICAgICAgICAgY2FzZSBCVENfQk9PTEVBTjoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbEJvb2xlYW5JbXBsKCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19CQVNFXzY0X0JJTkFSWToKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbEJhc2U2NEJpbmFyeUltcGwoKTsKLSAgICAgICAgICAgIGNhc2UgQlRDX0hFWF9CSU5BUlk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxIZXhCaW5hcnlJbXBsKCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19BTllfVVJJOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sQW55VXJpSW1wbCgpOwotICAgICAgICAgICAgY2FzZSBCVENfUU5BTUU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxRTmFtZUltcGwoKTsKLSAgICAgICAgICAgIGNhc2UgQlRDX05PVEFUSU9OOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sTm90YXRpb25JbXBsKCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19GTE9BVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbEZsb2F0SW1wbCgpOwotICAgICAgICAgICAgY2FzZSBCVENfRE9VQkxFOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sRG91YmxlSW1wbCgpOwotICAgICAgICAgICAgY2FzZSBCVENfREVDSU1BTDoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbERlY2ltYWxJbXBsKCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19TVFJJTkc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxTdHJpbmdJbXBsKCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19EVVJBVElPTjoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbER1cmF0aW9uSW1wbCgpOwotICAgICAgICAgICAgY2FzZSBCVENfREFURV9USU1FOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sRGF0ZVRpbWVJbXBsKCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19USU1FOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sVGltZUltcGwoKTsKLSAgICAgICAgICAgIGNhc2UgQlRDX0RBVEU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxEYXRlSW1wbCgpOwotICAgICAgICAgICAgY2FzZSBCVENfR19ZRUFSX01PTlRIOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sR1llYXJNb250aEltcGwoKTsKLSAgICAgICAgICAgIGNhc2UgQlRDX0dfWUVBUjoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbEdZZWFySW1wbCgpOwotICAgICAgICAgICAgY2FzZSBCVENfR19NT05USF9EQVk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxHTW9udGhEYXlJbXBsKCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19HX0RBWToKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbEdEYXlJbXBsKCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19HX01PTlRIOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sR01vbnRoSW1wbCgpOwotICAgICAgICAgICAgY2FzZSBCVENfSU5URUdFUjoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbEludGVnZXJJbXBsKCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19MT05HOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sTG9uZ0ltcGwoKTsKLSAgICAgICAgICAgIGNhc2UgQlRDX0lOVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbEludEltcGwoKTsKLSAgICAgICAgICAgIGNhc2UgQlRDX1NIT1JUOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sU2hvcnRJbXBsKCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19CWVRFOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sQnl0ZUltcGwoKTsKLSAgICAgICAgICAgIGNhc2UgQlRDX05PTl9QT1NJVElWRV9JTlRFR0VSOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sTm9uUG9zaXRpdmVJbnRlZ2VySW1wbCgpOwotICAgICAgICAgICAgY2FzZSBCVENfTkVHQVRJVkVfSU5URUdFUjoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbE5lZ2F0aXZlSW50ZWdlckltcGwoKTsKLSAgICAgICAgICAgIGNhc2UgQlRDX05PTl9ORUdBVElWRV9JTlRFR0VSOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sTm9uTmVnYXRpdmVJbnRlZ2VySW1wbCgpOwotICAgICAgICAgICAgY2FzZSBCVENfUE9TSVRJVkVfSU5URUdFUjoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbFBvc2l0aXZlSW50ZWdlckltcGwoKTsKLSAgICAgICAgICAgIGNhc2UgQlRDX1VOU0lHTkVEX0xPTkc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxVbnNpZ25lZExvbmdJbXBsKCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19VTlNJR05FRF9JTlQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxVbnNpZ25lZEludEltcGwoKTsKLSAgICAgICAgICAgIGNhc2UgQlRDX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sVW5zaWduZWRTaG9ydEltcGwoKTsKLSAgICAgICAgICAgIGNhc2UgQlRDX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxVbnNpZ25lZEJ5dGVJbXBsKCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19OT1JNQUxJWkVEX1NUUklORzoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbE5vcm1hbGl6ZWRTdHJpbmdJbXBsKCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19UT0tFTjoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbFRva2VuSW1wbCgpOwotICAgICAgICAgICAgY2FzZSBCVENfTkFNRToKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbE5hbWVJbXBsKCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19OQ05BTUU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxOQ05hbWVJbXBsKCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19MQU5HVUFHRToKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbExhbmd1YWdlSW1wbCgpOwotICAgICAgICAgICAgY2FzZSBCVENfSUQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxJZEltcGwoKTsKLSAgICAgICAgICAgIGNhc2UgQlRDX0lEUkVGOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sSWRSZWZJbXBsKCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19JRFJFRlM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxJZFJlZnNJbXBsKCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19FTlRJVFk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxFbnRpdHlJbXBsKCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19FTlRJVElFUzoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbEVudGl0aWVzSW1wbCgpOwotICAgICAgICAgICAgY2FzZSBCVENfTk1UT0tFTjoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbE5tVG9rZW5JbXBsKCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19OTVRPS0VOUzoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbE5tVG9rZW5zSW1wbCgpOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJVbnJlY29nbml6ZWQgYnVpbHRpbiB0eXBlOiAiICsgZ2V0QnVpbHRpblR5cGVDb2RlKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBYbWxPYmplY3QgY3JlYXRlQnVpbHRpblN1YmNsYXNzKFNjaGVtYVR5cGUgc1R5cGUpCi0gICAgewotICAgICAgICBib29sZWFuIGNvbXBsZXggPSAhc1R5cGUuaXNTaW1wbGVUeXBlKCk7Ci0gICAgICAgIHN3aXRjaCAoZ2V0QnVpbHRpblR5cGVDb2RlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgQlRDX05PVF9CVUlMVElOOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sQW55VHlwZUltcGwoQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfTk9fVFlQRSk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19BTllfVFlQRToKLSAgICAgICAgICAgIGNhc2UgQlRDX0FOWV9TSU1QTEU6Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChzVHlwZS5nZXRTaW1wbGVWYXJpZXR5KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjYXNlIE5PVF9TSU1QTEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbENvbXBsZXhDb250ZW50SW1wbChzVHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQVRPTUlDOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxBbnlTaW1wbGVUeXBlUmVzdHJpY3Rpb24oc1R5cGUsIGNvbXBsZXgpOwotICAgICAgICAgICAgICAgICAgICBjYXNlIExJU1Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbExpc3RJbXBsKHNUeXBlLCBjb21wbGV4KTsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBVTklPTjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sVW5pb25JbXBsKHNUeXBlLCBjb21wbGV4KTsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIEJUQ19CT09MRUFOOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sQm9vbGVhblJlc3RyaWN0aW9uKHNUeXBlLCBjb21wbGV4KTsKLSAgICAgICAgICAgIGNhc2UgQlRDX0JBU0VfNjRfQklOQVJZOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sQmFzZTY0QmluYXJ5UmVzdHJpY3Rpb24oc1R5cGUsIGNvbXBsZXgpOwotICAgICAgICAgICAgY2FzZSBCVENfSEVYX0JJTkFSWToKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbEhleEJpbmFyeVJlc3RyaWN0aW9uKHNUeXBlLCBjb21wbGV4KTsKLSAgICAgICAgICAgIGNhc2UgQlRDX0FOWV9VUkk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxBbnlVcmlSZXN0cmljdGlvbihzVHlwZSwgY29tcGxleCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19RTkFNRToKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbFFOYW1lUmVzdHJpY3Rpb24oc1R5cGUsIGNvbXBsZXgpOwotICAgICAgICAgICAgY2FzZSBCVENfTk9UQVRJT046Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxOb3RhdGlvblJlc3RyaWN0aW9uKHNUeXBlLCBjb21wbGV4KTsKLSAgICAgICAgICAgIGNhc2UgQlRDX0ZMT0FUOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sRmxvYXRSZXN0cmljdGlvbihzVHlwZSwgY29tcGxleCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19ET1VCTEU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxEb3VibGVSZXN0cmljdGlvbihzVHlwZSwgY29tcGxleCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19ERUNJTUFMOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sRGVjaW1hbFJlc3RyaWN0aW9uKHNUeXBlLCBjb21wbGV4KTsKLSAgICAgICAgICAgIGNhc2UgQlRDX1NUUklORzoKLSAgICAgICAgICAgICAgICBpZiAoc1R5cGUuaGFzU3RyaW5nRW51bVZhbHVlcygpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbFN0cmluZ0VudW1lcmF0aW9uKHNUeXBlLCBjb21wbGV4KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sU3RyaW5nUmVzdHJpY3Rpb24oc1R5cGUsIGNvbXBsZXgpOwotICAgICAgICAgICAgY2FzZSBCVENfRFVSQVRJT046Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxEdXJhdGlvbkltcGwoc1R5cGUsIGNvbXBsZXgpOwotICAgICAgICAgICAgY2FzZSBCVENfREFURV9USU1FOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sRGF0ZVRpbWVJbXBsKHNUeXBlLCBjb21wbGV4KTsKLSAgICAgICAgICAgIGNhc2UgQlRDX1RJTUU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxUaW1lSW1wbChzVHlwZSwgY29tcGxleCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19EQVRFOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sRGF0ZUltcGwoc1R5cGUsIGNvbXBsZXgpOwotICAgICAgICAgICAgY2FzZSBCVENfR19ZRUFSX01PTlRIOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sR1llYXJNb250aEltcGwoc1R5cGUsIGNvbXBsZXgpOwotICAgICAgICAgICAgY2FzZSBCVENfR19ZRUFSOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sR1llYXJJbXBsKHNUeXBlLCBjb21wbGV4KTsKLSAgICAgICAgICAgIGNhc2UgQlRDX0dfTU9OVEhfREFZOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sR01vbnRoRGF5SW1wbChzVHlwZSwgY29tcGxleCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19HX0RBWToKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbEdEYXlJbXBsKHNUeXBlLCBjb21wbGV4KTsKLSAgICAgICAgICAgIGNhc2UgQlRDX0dfTU9OVEg6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxHTW9udGhJbXBsKHNUeXBlLCBjb21wbGV4KTsKLSAgICAgICAgICAgIGNhc2UgQlRDX0lOVEVHRVI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxJbnRlZ2VyUmVzdHJpY3Rpb24oc1R5cGUsIGNvbXBsZXgpOwotICAgICAgICAgICAgY2FzZSBCVENfTE9ORzoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbExvbmdSZXN0cmljdGlvbihzVHlwZSwgY29tcGxleCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19JTlQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxJbnRSZXN0cmljdGlvbihzVHlwZSwgY29tcGxleCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19TSE9SVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbFNob3J0SW1wbChzVHlwZSwgY29tcGxleCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19CWVRFOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sQnl0ZUltcGwoc1R5cGUsIGNvbXBsZXgpOwotICAgICAgICAgICAgY2FzZSBCVENfTk9OX1BPU0lUSVZFX0lOVEVHRVI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxOb25Qb3NpdGl2ZUludGVnZXJJbXBsKHNUeXBlLCBjb21wbGV4KTsKLSAgICAgICAgICAgIGNhc2UgQlRDX05FR0FUSVZFX0lOVEVHRVI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxOZWdhdGl2ZUludGVnZXJJbXBsKHNUeXBlLCBjb21wbGV4KTsKLSAgICAgICAgICAgIGNhc2UgQlRDX05PTl9ORUdBVElWRV9JTlRFR0VSOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sTm9uTmVnYXRpdmVJbnRlZ2VySW1wbChzVHlwZSwgY29tcGxleCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19QT1NJVElWRV9JTlRFR0VSOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sUG9zaXRpdmVJbnRlZ2VySW1wbChzVHlwZSwgY29tcGxleCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19VTlNJR05FRF9MT05HOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sVW5zaWduZWRMb25nSW1wbChzVHlwZSwgY29tcGxleCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19VTlNJR05FRF9JTlQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxVbnNpZ25lZEludEltcGwoc1R5cGUsIGNvbXBsZXgpOwotICAgICAgICAgICAgY2FzZSBCVENfVU5TSUdORURfU0hPUlQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxVbnNpZ25lZFNob3J0SW1wbChzVHlwZSwgY29tcGxleCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sVW5zaWduZWRCeXRlSW1wbChzVHlwZSwgY29tcGxleCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19OT1JNQUxJWkVEX1NUUklORzoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbE5vcm1hbGl6ZWRTdHJpbmdJbXBsKHNUeXBlLCBjb21wbGV4KTsKLSAgICAgICAgICAgIGNhc2UgQlRDX1RPS0VOOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sVG9rZW5JbXBsKHNUeXBlLCBjb21wbGV4KTsKLSAgICAgICAgICAgIGNhc2UgQlRDX05BTUU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxOYW1lSW1wbChzVHlwZSwgY29tcGxleCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19OQ05BTUU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxOQ05hbWVJbXBsKHNUeXBlLCBjb21wbGV4KTsKLSAgICAgICAgICAgIGNhc2UgQlRDX0xBTkdVQUdFOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sTGFuZ3VhZ2VJbXBsKHNUeXBlLCBjb21wbGV4KTsKLSAgICAgICAgICAgIGNhc2UgQlRDX0lEOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sSWRJbXBsKHNUeXBlLCBjb21wbGV4KTsKLSAgICAgICAgICAgIGNhc2UgQlRDX0lEUkVGOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sSWRSZWZJbXBsKHNUeXBlLCBjb21wbGV4KTsKLSAgICAgICAgICAgIGNhc2UgQlRDX0lEUkVGUzoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbElkUmVmc0ltcGwoc1R5cGUsIGNvbXBsZXgpOwotICAgICAgICAgICAgY2FzZSBCVENfRU5USVRZOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sRW50aXR5SW1wbChzVHlwZSwgY29tcGxleCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19FTlRJVElFUzoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbEVudGl0aWVzSW1wbChzVHlwZSwgY29tcGxleCk7Ci0gICAgICAgICAgICBjYXNlIEJUQ19OTVRPS0VOOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sTm1Ub2tlbkltcGwoc1R5cGUsIGNvbXBsZXgpOwotICAgICAgICAgICAgY2FzZSBCVENfTk1UT0tFTlM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxObVRva2Vuc0ltcGwoc1R5cGUsIGNvbXBsZXgpOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJVbnJlY29nbml6ZWQgYnVpbHRpbiB0eXBlOiAiICsgZ2V0QnVpbHRpblR5cGVDb2RlKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgZ2V0Q29tbW9uQmFzZVR5cGUoU2NoZW1hVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgLy8gbnVsbCB0eXBlIGlzIHRyZWF0ZWQgYXMgdGhlIG5vLXR5cGUKLSAgICAgICAgaWYgKHRoaXMgPT0gQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfQU5ZX1RZUEUgfHwgdHlwZSA9PSBudWxsIHx8IHR5cGUuaXNOb1R5cGUoKSkKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotCi0gICAgICAgIC8vIGFueSB0eXBlIGlzIHRoZSB1bml2ZXJzYWwgYmFzZSB0eXBlOyBub1R5cGUgaXMgdGhlIHVuaXZlcnNhbCBkZXJpdmVkIHR5cGUKLSAgICAgICAgaWYgKHR5cGUgPT0gQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfQU5ZX1RZUEUgfHwgaXNOb1R5cGUoKSkKLSAgICAgICAgICAgIHJldHVybiB0eXBlOwotCi0gICAgICAgIC8vIHRoZSByZWd1bGFyIGNhc2U6Ci0gICAgICAgIFNjaGVtYVR5cGVJbXBsIHNJbXBsMSA9IChTY2hlbWFUeXBlSW1wbCl0eXBlOwotICAgICAgICB3aGlsZSAoc0ltcGwxLmdldEJhc2VEZXB0aCgpID4gZ2V0QmFzZURlcHRoKCkpCi0gICAgICAgICAgICBzSW1wbDEgPSAoU2NoZW1hVHlwZUltcGwpc0ltcGwxLmdldEJhc2VUeXBlKCk7Ci0gICAgICAgIFNjaGVtYVR5cGVJbXBsIHNJbXBsMiA9IHRoaXM7Ci0gICAgICAgIHdoaWxlIChzSW1wbDIuZ2V0QmFzZURlcHRoKCkgPiBzSW1wbDEuZ2V0QmFzZURlcHRoKCkpCi0gICAgICAgICAgICBzSW1wbDIgPSAoU2NoZW1hVHlwZUltcGwpc0ltcGwyLmdldEJhc2VUeXBlKCk7Ci0gICAgICAgIGZvciAoOzspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzSW1wbDEuZXF1YWxzKHNJbXBsMikpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBzSW1wbDEgPSAoU2NoZW1hVHlwZUltcGwpc0ltcGwxLmdldEJhc2VUeXBlKCk7Ci0gICAgICAgICAgICBzSW1wbDIgPSAoU2NoZW1hVHlwZUltcGwpc0ltcGwyLmdldEJhc2VUeXBlKCk7Ci0gICAgICAgICAgICBhc3NlcnQoc0ltcGwxICE9IG51bGwgJiYgc0ltcGwyICE9IG51bGwpOyAvLyBtdXN0IG1lZXQgYXQgYW55VHlwZQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzSW1wbDE7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNBc3NpZ25hYmxlRnJvbShTY2hlbWFUeXBlIHR5cGUpCi0gICAgewotICAgICAgICBpZiAodHlwZSA9PSBudWxsIHx8IHR5cGUuaXNOb1R5cGUoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGlmIChpc05vVHlwZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGludCBkZXB0aCA9ICgoU2NoZW1hVHlwZUltcGwpdHlwZSkuZ2V0QmFzZURlcHRoKCkgLSBnZXRCYXNlRGVwdGgoKTsKLSAgICAgICAgaWYgKGRlcHRoIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgd2hpbGUgKGRlcHRoID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgdHlwZSA9IHR5cGUuZ2V0QmFzZVR5cGUoKTsKLSAgICAgICAgICAgIGRlcHRoIC09IDE7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICh0eXBlLmVxdWFscyh0aGlzKSk7Ci0gICAgfQotCi0KLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIGlmIChnZXROYW1lKCkgIT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiAiVD0iICsgUU5hbWVIZWxwZXIucHJldHR5KGdldE5hbWUoKSk7Ci0KLSAgICAgICAgaWYgKGlzRG9jdW1lbnRUeXBlKCkpCi0gICAgICAgICAgICByZXR1cm4gIkQ9IiArIFFOYW1lSGVscGVyLnByZXR0eShnZXREb2N1bWVudEVsZW1lbnROYW1lKCkpOwotCi0gICAgICAgIGlmIChpc0F0dHJpYnV0ZVR5cGUoKSkKLSAgICAgICAgICAgIHJldHVybiAiUj0iICsgUU5hbWVIZWxwZXIucHJldHR5KGdldEF0dHJpYnV0ZVR5cGVBdHRyaWJ1dGVOYW1lKCkpOwotCi0gICAgICAgIFN0cmluZyBwcmVmaXg7Ci0KLSAgICAgICAgaWYgKGdldENvbnRhaW5lckZpZWxkKCkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgcHJlZml4ID0gKGdldENvbnRhaW5lckZpZWxkKCkuZ2V0TmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpLmxlbmd0aCgpID4gMCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdldENvbnRhaW5lckZpZWxkKCkuaXNBdHRyaWJ1dGUoKSA/ICJRPSIgOiAiRT0iKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdldENvbnRhaW5lckZpZWxkKCkuaXNBdHRyaWJ1dGUoKSA/ICJBPSIgOiAiVT0iKSkKLSAgICAgICAgICAgICAgICAgICAgKyBnZXRDb250YWluZXJGaWVsZCgpLmdldE5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICAgIGlmIChnZXRPdXRlclR5cGUoKSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyAiQCIgKyBnZXRDb250YWluZXJGaWVsZCgpLmdldE5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpc05vVHlwZSgpKQotICAgICAgICAgICAgcmV0dXJuICJOPSI7Ci0gICAgICAgIGVsc2UgaWYgKGdldE91dGVyVHlwZSgpID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gIm5vb3V0ZXIiOwotICAgICAgICBlbHNlIGlmIChnZXRPdXRlclR5cGUoKS5nZXRCYXNlVHlwZSgpID09IHRoaXMpCi0gICAgICAgICAgICBwcmVmaXggPSAiQj0iOwotICAgICAgICBlbHNlIGlmIChnZXRPdXRlclR5cGUoKS5nZXRTaW1wbGVWYXJpZXR5KCkgPT0gU2NoZW1hVHlwZS5MSVNUKQotICAgICAgICAgICAgcHJlZml4ID0gIkk9IjsKLSAgICAgICAgZWxzZSBpZiAoZ2V0T3V0ZXJUeXBlKCkuZ2V0U2ltcGxlVmFyaWV0eSgpID09IFNjaGVtYVR5cGUuVU5JT04pCi0gICAgICAgICAgICBwcmVmaXggPSAiTT0iICsgZ2V0QW5vbnltb3VzVW5pb25NZW1iZXJPcmRpbmFsKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHByZWZpeCA9ICJzdHJhbmdlPSI7Ci0KLSAgICAgICAgcmV0dXJuIHByZWZpeCArICJ8IiArIGdldE91dGVyVHlwZSgpLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBYbWxPYmplY3QgX3BhcnNlT2JqZWN0OwotICAgIHByaXZhdGUgU3RyaW5nIF9wYXJzZVROUzsKLSAgICBwcml2YXRlIGJvb2xlYW4gX2NoYW1lbGVvbjsKLSAgICBwcml2YXRlIGJvb2xlYW4gX3JlZGVmaW5pdGlvbjsKLQotICAgIHB1YmxpYyB2b2lkIHNldFBhcnNlQ29udGV4dChYbWxPYmplY3QgcGFyc2VPYmplY3QsIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsIGJvb2xlYW4gY2hhbWVsZW9uLCBib29sZWFuIHJlZGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICAgIF9wYXJzZU9iamVjdCA9IHBhcnNlT2JqZWN0OwotICAgICAgICBfcGFyc2VUTlMgPSB0YXJnZXROYW1lc3BhY2U7Ci0gICAgICAgIF9jaGFtZWxlb24gPSBjaGFtZWxlb247Ci0gICAgICAgIF9yZWRlZmluaXRpb24gPSByZWRlZmluaXRpb247Ci0gICAgfQotCi0gICAgcHVibGljIFhtbE9iamVjdCBnZXRQYXJzZU9iamVjdCgpCi0gICAgICAgIHsgcmV0dXJuIF9wYXJzZU9iamVjdDsgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRUYXJnZXROYW1lc3BhY2UoKQotICAgICAgICB7IHJldHVybiBfcGFyc2VUTlM7IH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzQ2hhbWVsZW9uICggKQotICAgICAgICB7IHJldHVybiBfY2hhbWVsZW9uOyB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldENoYW1lbGVvbk5hbWVzcGFjZSgpCi0gICAgICAgIHsgcmV0dXJuIF9jaGFtZWxlb24gPyBfcGFyc2VUTlMgOiBudWxsOyB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1JlZGVmaW5pdGlvbigpCi0gICAgICAgIHsgcmV0dXJuIF9yZWRlZmluaXRpb247IH0KLQotICAgIHByaXZhdGUgU2NoZW1hVHlwZS5SZWYgX3NlbGZyZWYgPSBuZXcgU2NoZW1hVHlwZS5SZWYodGhpcyk7Ci0KLSAgICBwdWJsaWMgU2NoZW1hVHlwZS5SZWYgZ2V0UmVmKCkKLSAgICAgICAgeyByZXR1cm4gX3NlbGZyZWY7IH0KLQotICAgIHB1YmxpYyBTY2hlbWFDb21wb25lbnQuUmVmIGdldENvbXBvbmVudFJlZigpCi0gICAgICAgIHsgcmV0dXJuIGdldFJlZigpOyB9Ci0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1NjaGVtYVR5cGVMb2FkZXJCYXNlLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TY2hlbWFUeXBlTG9hZGVyQmFzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjcxNzg4Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1NjaGVtYVR5cGVMb2FkZXJCYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MjMgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5RTmFtZUhlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLlhtbFN0b3JlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWxpZGF0b3IuVmFsaWRhdGluZ1hNTElucHV0U3RyZWFtOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFBdHRyaWJ1dGVHcm91cDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUZpZWxkOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hR2xvYmFsQXR0cmlidXRlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hR2xvYmFsRWxlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYU1vZGVsR3JvdXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFNheEhhbmRsZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRmFjdG9yeUhvb2s7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEubmV0LlVSTENvbm5lY3Rpb247Ci1pbXBvcnQgamF2YS5uZXQuSHR0cFVSTENvbm5lY3Rpb247Ci1pbXBvcnQgamF2YS5zZWN1cml0eS5EaWdlc3RJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnNlY3VyaXR5Lk1lc3NhZ2VEaWdlc3Q7Ci1pbXBvcnQgamF2YS5zZWN1cml0eS5Ob1N1Y2hBbGdvcml0aG1FeGNlcHRpb247Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOwotCi1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW07Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb247Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBTY2hlbWFUeXBlTG9hZGVyQmFzZSBpbXBsZW1lbnRzIFNjaGVtYVR5cGVMb2FkZXIKLXsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNZXRob2QgX3Jvb3RCdWlsZGVyID0gZ2V0TWV0aG9kKCAib3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnN0b3JlLlJvb3QiLCAibmV3U3RvcmUiLCBuZXcgQ2xhc3NbXSB7IFNjaGVtYVR5cGVMb2FkZXIuY2xhc3MsIFNjaGVtYVR5cGUuY2xhc3MsIFhtbE9wdGlvbnMuY2xhc3MgfSApOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE1ldGhvZCBfcGF0aENvbXBpbGVyID0gZ2V0TWV0aG9kKCAib3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnN0b3JlLlBhdGgiLCAiZ2V0Q29tcGlsZWRQYXRoIiwgbmV3IENsYXNzW10geyBTdHJpbmcuY2xhc3MsIFhtbE9wdGlvbnMuY2xhc3MgfSApOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE1ldGhvZCBfcXVlcnlDb21waWxlciA9IGdldE1ldGhvZCggIm9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zdG9yZS5QYXRoIiwgImdldENvbXBpbGVkUXVlcnkiLCBuZXcgQ2xhc3NbXSB7IFN0cmluZy5jbGFzcywgWG1sT3B0aW9ucy5jbGFzcyB9ICk7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBNZXRob2QgZ2V0TWV0aG9kICggU3RyaW5nIGNsYXNzTmFtZSwgU3RyaW5nIG1ldGhvZE5hbWUsIENsYXNzW10gYXJncyApCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgQ2xhc3MuZm9yTmFtZSggY2xhc3NOYW1lICkuCi0gICAgICAgICAgICAgICAgICAgIGdldERlY2xhcmVkTWV0aG9kKCBtZXRob2ROYW1lLCBhcmdzICk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICJDYW5ub3QgZmluZCAiICsgY2xhc3NOYW1lICsgIi4iICsgbWV0aG9kTmFtZSArCi0gICAgICAgICAgICAgICAgICAgICIuICB2ZXJpZnkgdGhhdCB4bWxzdG9yZSAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIoZnJvbSB4YmVhbi5qYXIpIGlzIG9uIGNsYXNzcGF0aCIgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIE9iamVjdCBpbnZva2VNZXRob2QgKCBNZXRob2QgbWV0aG9kLCBPYmplY3RbXSBhcmdzICkKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbWV0aG9kLmludm9rZSggbWV0aG9kLCBhcmdzICk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKCBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaXNlID0gbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiggZS5nZXRDYXVzZSgpLmdldE1lc3NhZ2UoKSApOwotICAgICAgICAgICAgaXNlLmluaXRDYXVzZSggZSApOwotICAgICAgICAgICAgdGhyb3cgaXNlOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoICggRXhjZXB0aW9uIGUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaXNlID0gbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiggZS5nZXRNZXNzYWdlKCkgKTsKLSAgICAgICAgICAgIGlzZS5pbml0Q2F1c2UoIGUgKTsKLSAgICAgICAgICAgIHRocm93IGlzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgWG1sU3RvcmUgY3JlYXRlTmV3U3RvcmUgKCBTY2hlbWFUeXBlIHR5cGUsIFhtbE9wdGlvbnMgb3B0aW9ucyApCi0gICAgewotICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIChYbWxTdG9yZSkKLSAgICAgICAgICAgICAgICBpbnZva2VNZXRob2QoIF9yb290QnVpbGRlciwgbmV3IE9iamVjdFtdIHsgdGhpcywgdHlwZSwgb3B0aW9ucyB9ICk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRvQ29tcGlsZVBhdGggKCBTdHJpbmcgcGF0aEV4cHIsIFhtbE9wdGlvbnMgb3B0aW9ucyApIHsgcmV0dXJuIChTdHJpbmcpIGludm9rZU1ldGhvZCggX3BhdGhDb21waWxlciwgbmV3IE9iamVjdFtdIHsgcGF0aEV4cHIsIG9wdGlvbnMgfSApOyB9Ci0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRvQ29tcGlsZVF1ZXJ5ICggU3RyaW5nIHF1ZXJ5RXhwciwgWG1sT3B0aW9ucyBvcHRpb25zICkgeyByZXR1cm4gKFN0cmluZykgaW52b2tlTWV0aG9kKCBfcXVlcnlDb21waWxlciwgbmV3IE9iamVjdFtdIHsgcXVlcnlFeHByLCBvcHRpb25zIH0gKTsgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgZmluZFR5cGUoUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIFNjaGVtYVR5cGUuUmVmIHJlZiA9IGZpbmRUeXBlUmVmKG5hbWUpOwotICAgICAgICBpZiAocmVmID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgU2NoZW1hVHlwZSByZXN1bHQgPSByZWYuZ2V0KCk7Ci0gICAgICAgIGFzc2VydChyZXN1bHQgIT0gbnVsbCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgZmluZERvY3VtZW50VHlwZShRTmFtZSBuYW1lKQotICAgIHsKLSAgICAgICAgU2NoZW1hVHlwZS5SZWYgcmVmID0gZmluZERvY3VtZW50VHlwZVJlZihuYW1lKTsKLSAgICAgICAgaWYgKHJlZiA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIFNjaGVtYVR5cGUgcmVzdWx0ID0gcmVmLmdldCgpOwotICAgICAgICBhc3NlcnQocmVzdWx0ICE9IG51bGwpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFUeXBlIGZpbmRBdHRyaWJ1dGVUeXBlKFFOYW1lIG5hbWUpCi0gICAgewotICAgICAgICBTY2hlbWFUeXBlLlJlZiByZWYgPSBmaW5kQXR0cmlidXRlVHlwZVJlZihuYW1lKTsKLSAgICAgICAgaWYgKHJlZiA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIFNjaGVtYVR5cGUgcmVzdWx0ID0gcmVmLmdldCgpOwotICAgICAgICBhc3NlcnQocmVzdWx0ICE9IG51bGwpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFNb2RlbEdyb3VwIGZpbmRNb2RlbEdyb3VwKFFOYW1lIG5hbWUpCi0gICAgewotICAgICAgICBTY2hlbWFNb2RlbEdyb3VwLlJlZiByZWYgPSBmaW5kTW9kZWxHcm91cFJlZihuYW1lKTsKLSAgICAgICAgaWYgKHJlZiA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIFNjaGVtYU1vZGVsR3JvdXAgcmVzdWx0ID0gcmVmLmdldCgpOwotICAgICAgICBhc3NlcnQocmVzdWx0ICE9IG51bGwpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFBdHRyaWJ1dGVHcm91cCBmaW5kQXR0cmlidXRlR3JvdXAoUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIFNjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZiByZWYgPSBmaW5kQXR0cmlidXRlR3JvdXBSZWYobmFtZSk7Ci0gICAgICAgIGlmIChyZWYgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICBTY2hlbWFBdHRyaWJ1dGVHcm91cCByZXN1bHQgPSByZWYuZ2V0KCk7Ci0gICAgICAgIGFzc2VydChyZXN1bHQgIT0gbnVsbCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYUdsb2JhbEVsZW1lbnQgZmluZEVsZW1lbnQoUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIFNjaGVtYUdsb2JhbEVsZW1lbnQuUmVmIHJlZiA9IGZpbmRFbGVtZW50UmVmKG5hbWUpOwotICAgICAgICBpZiAocmVmID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgU2NoZW1hR2xvYmFsRWxlbWVudCByZXN1bHQgPSByZWYuZ2V0KCk7Ci0gICAgICAgIGFzc2VydChyZXN1bHQgIT0gbnVsbCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYUdsb2JhbEF0dHJpYnV0ZSBmaW5kQXR0cmlidXRlKFFOYW1lIG5hbWUpCi0gICAgewotICAgICAgICBTY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmIHJlZiA9IGZpbmRBdHRyaWJ1dGVSZWYobmFtZSk7Ci0gICAgICAgIGlmIChyZWYgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICBTY2hlbWFHbG9iYWxBdHRyaWJ1dGUgcmVzdWx0ID0gcmVmLmdldCgpOwotICAgICAgICBhc3NlcnQocmVzdWx0ICE9IG51bGwpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8vCi0gICAgLy8KLSAgICAvLwotCi0gICAgcHVibGljIFhtbE9iamVjdCBuZXdJbnN0YW5jZSAoIFNjaGVtYVR5cGUgdHlwZSwgWG1sT3B0aW9ucyBvcHRpb25zICkKLSAgICB7Ci0gICAgICAgIFhtbEZhY3RvcnlIb29rIGhvb2sgPSBYbWxGYWN0b3J5SG9vay5UaHJlYWRDb250ZXh0LmdldEhvb2soKTsKLSAgICAgICAgaWYgKGhvb2sgIT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBob29rLm5ld0luc3RhbmNlKCB0aGlzLCB0eXBlLCBvcHRpb25zICk7Ci0KLSAgICAgICAgcmV0dXJuIGNyZWF0ZU5ld1N0b3JlKCB0eXBlLCBvcHRpb25zICkuZ2V0T2JqZWN0KCk7Ci0gICAgfQotCi0gICAgcHVibGljIFhtbE9iamVjdCBwYXJzZSAoIFN0cmluZyB4bWxUZXh0LCBTY2hlbWFUeXBlIHR5cGUsIFhtbE9wdGlvbnMgb3B0aW9ucyApIHRocm93cyBYbWxFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbEZhY3RvcnlIb29rIGhvb2sgPSBYbWxGYWN0b3J5SG9vay5UaHJlYWRDb250ZXh0LmdldEhvb2soKTsKLSAgICAgICAgaWYgKGhvb2sgIT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBob29rLnBhcnNlKCB0aGlzLCB4bWxUZXh0LCB0eXBlLCBvcHRpb25zICk7Ci0KLSAgICAgICAgcmV0dXJuIGNyZWF0ZU5ld1N0b3JlKCBudWxsLCBvcHRpb25zICkubG9hZFhtbCggeG1sVGV4dCwgdHlwZSwgb3B0aW9ucyApOwotICAgIH0KLQotICAgIHB1YmxpYyBYbWxPYmplY3QgcGFyc2UgKCBYTUxJbnB1dFN0cmVhbSB4aXMsIFNjaGVtYVR5cGUgdHlwZSwgWG1sT3B0aW9ucyBvcHRpb25zICkgdGhyb3dzIFhtbEV4Y2VwdGlvbiwgWE1MU3RyZWFtRXhjZXB0aW9uCi0gICAgewotICAgICAgICBYbWxGYWN0b3J5SG9vayBob29rID0gWG1sRmFjdG9yeUhvb2suVGhyZWFkQ29udGV4dC5nZXRIb29rKCk7Ci0gICAgICAgIGlmIChob29rICE9IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gaG9vay5wYXJzZSggdGhpcywgeGlzLCB0eXBlLCBvcHRpb25zICk7Ci0KLSAgICAgICAgcmV0dXJuIGNyZWF0ZU5ld1N0b3JlKCBudWxsLCBvcHRpb25zICkubG9hZFhtbCggeGlzLCB0eXBlLCBvcHRpb25zICk7Ci0gICAgfQotCi0gICAgcHVibGljIFhtbE9iamVjdCBwYXJzZSAoIEZpbGUgZmlsZSwgU2NoZW1hVHlwZSB0eXBlLCBYbWxPcHRpb25zIG9wdGlvbnMgKSB0aHJvd3MgWG1sRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgb3B0aW9ucyA9IG5ldyBYbWxPcHRpb25zKCk7Ci0gICAgICAgICAgICBvcHRpb25zLnB1dCggWG1sT3B0aW9ucy5ET0NVTUVOVF9TT1VSQ0VfTkFNRSwgZmlsZS50b1VSSSgpLm5vcm1hbGl6ZSgpLnRvU3RyaW5nKCkgKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVsc2UgaWYgKCEgb3B0aW9ucy5oYXNPcHRpb24oWG1sT3B0aW9ucy5ET0NVTUVOVF9TT1VSQ0VfTkFNRSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG9wdGlvbnMgPSBuZXcgWG1sT3B0aW9ucyggb3B0aW9ucyApOwotICAgICAgICAgICAgb3B0aW9ucy5wdXQoIFhtbE9wdGlvbnMuRE9DVU1FTlRfU09VUkNFX05BTUUsIGZpbGUudG9VUkkoKS5ub3JtYWxpemUoKS50b1N0cmluZygpICk7Ci0gICAgICAgIH0KLQotICAgICAgICBJbnB1dFN0cmVhbSBmaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKCBmaWxlICk7Ci0KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBwYXJzZSggZmlzLCB0eXBlLCBvcHRpb25zICk7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWxseQotICAgICAgICB7Ci0gICAgICAgICAgICBmaXMuY2xvc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBYbWxPYmplY3QgcGFyc2UgKCBVUkwgdXJsLCBTY2hlbWFUeXBlIHR5cGUsIFhtbE9wdGlvbnMgb3B0aW9ucyApIHRocm93cyBYbWxFeGNlcHRpb24sIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBvcHRpb25zID0gbmV3IFhtbE9wdGlvbnMoKTsKLSAgICAgICAgICAgIG9wdGlvbnMucHV0KCBYbWxPcHRpb25zLkRPQ1VNRU5UX1NPVVJDRV9OQU1FLCB1cmwudG9TdHJpbmcoKSApOwotICAgICAgICB9Ci0KLSAgICAgICAgZWxzZSBpZiAoISBvcHRpb25zLmhhc09wdGlvbihYbWxPcHRpb25zLkRPQ1VNRU5UX1NPVVJDRV9OQU1FKSkKLSAgICAgICAgewotICAgICAgICAgICAgb3B0aW9ucyA9IG5ldyBYbWxPcHRpb25zKCBvcHRpb25zICk7Ci0gICAgICAgICAgICBvcHRpb25zLnB1dCggWG1sT3B0aW9ucy5ET0NVTUVOVF9TT1VSQ0VfTkFNRSwgdXJsLnRvU3RyaW5nKCkgKTsKLSAgICAgICAgfQotCi0gICAgICAgIFVSTENvbm5lY3Rpb24gY29ubiA9IG51bGw7Ci0gICAgICAgIElucHV0U3RyZWFtIHN0cmVhbSA9IG51bGw7Ci0gICAgICAgIGRvd25sb2FkOiB0cnkKLSAgICAgICAgewotCi0gICAgICAgICAgICBib29sZWFuIHJlZGlyZWN0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGludCBjb3VudCA9IDA7Ci0KLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBjb25uID0gdXJsLm9wZW5Db25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgY29ubi5hZGRSZXF1ZXN0UHJvcGVydHkoIlVzZXItQWdlbnQiLCAiQkVBIFhNTCBCZWFucy8xLjAiKTsKLSAgICAgICAgICAgICAgICBjb25uLmFkZFJlcXVlc3RQcm9wZXJ0eSgiQWNjZXB0IiwgImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwsICovKiIpOwotICAgICAgICAgICAgICAgIGlmIChjb25uIGluc3RhbmNlb2YgSHR0cFVSTENvbm5lY3Rpb24pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBIdHRwVVJMQ29ubmVjdGlvbiBodHRwY29uID0gKEh0dHBVUkxDb25uZWN0aW9uKWNvbm47Ci0gICAgICAgICAgICAgICAgICAgIGludCBjb2RlID0gaHR0cGNvbi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RlZCA9IChjb2RlID09IEh0dHBVUkxDb25uZWN0aW9uLkhUVFBfTU9WRURfUEVSTSB8fCBjb2RlID09IEh0dHBVUkxDb25uZWN0aW9uLkhUVFBfTU9WRURfVEVNUCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZWRpcmVjdGVkICYmIGNvdW50ID4gNSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0ZWQgPSBmYWxzZTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAocmVkaXJlY3RlZCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5ld0xvY2F0aW9uID0gaHR0cGNvbi5nZXRIZWFkZXJGaWVsZCgiTG9jYXRpb24iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdMb2NhdGlvbiA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBuZXcgVVJMKG5ld0xvY2F0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCArKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gd2hpbGUgKHJlZGlyZWN0ZWQpOwotCi0gICAgICAgICAgICBzdHJlYW0gPSBjb25uLmdldElucHV0U3RyZWFtKCk7Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2UoIHN0cmVhbSwgdHlwZSwgb3B0aW9ucyApOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsbHkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHN0cmVhbSAhPSBudWxsKQotICAgICAgICAgICAgICAgIHN0cmVhbS5jbG9zZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFhtbE9iamVjdCBwYXJzZSAoIFhNTFN0cmVhbVJlYWRlciB4c3IsIFNjaGVtYVR5cGUgdHlwZSwgWG1sT3B0aW9ucyBvcHRpb25zICkgdGhyb3dzIFhtbEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgWG1sRmFjdG9yeUhvb2sgaG9vayA9IFhtbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQuZ2V0SG9vaygpOwotICAgICAgICBpZiAoaG9vayAhPSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIGhvb2sucGFyc2UoIHRoaXMsIHhzciwgdHlwZSwgb3B0aW9ucyApOwotCi0gICAgICAgIHJldHVybiBjcmVhdGVOZXdTdG9yZSggbnVsbCwgb3B0aW9ucyApLmxvYWRYbWwoIHhzciwgdHlwZSwgb3B0aW9ucyApOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgWG1sT2JqZWN0IHBhcnNlICggSW5wdXRTdHJlYW0gamlvaXMsIFNjaGVtYVR5cGUgdHlwZSwgWG1sT3B0aW9ucyBvcHRpb25zICkgdGhyb3dzIFhtbEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbEZhY3RvcnlIb29rIGhvb2sgPSBYbWxGYWN0b3J5SG9vay5UaHJlYWRDb250ZXh0LmdldEhvb2soKTsKLSAgICAgICAgRGlnZXN0SW5wdXRTdHJlYW0gZGlnZXN0U3RyZWFtID0gbnVsbDsKLSAgICAgICAgc2V0dXBEaWdlc3Q6IGlmIChvcHRpb25zICE9IG51bGwgJiYgb3B0aW9ucy5oYXNPcHRpb24oWG1sT3B0aW9ucy5MT0FEX01FU1NBR0VfRElHRVNUKSkKLSAgICAgICAgewotICAgICAgICAgICAgTWVzc2FnZURpZ2VzdCBzaGE7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzaGEgPSBNZXNzYWdlRGlnZXN0LmdldEluc3RhbmNlKCJTSEEiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChOb1N1Y2hBbGdvcml0aG1FeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBicmVhayBzZXR1cERpZ2VzdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGlnZXN0U3RyZWFtID0gbmV3IERpZ2VzdElucHV0U3RyZWFtKGppb2lzLCBzaGEpOwotICAgICAgICAgICAgamlvaXMgPSBkaWdlc3RTdHJlYW07Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaG9vayAhPSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIGhvb2sucGFyc2UoIHRoaXMsIGppb2lzLCB0eXBlLCBvcHRpb25zICk7Ci0KLSAgICAgICAgWG1sT2JqZWN0IHJlc3VsdCA9IGNyZWF0ZU5ld1N0b3JlKCBudWxsLCBvcHRpb25zICkubG9hZFhtbCggamlvaXMsIHR5cGUsIG9wdGlvbnMgKTsKLQotICAgICAgICBpZiAoZGlnZXN0U3RyZWFtICE9IG51bGwpCi0gICAgICAgICAgICByZXN1bHQuZG9jdW1lbnRQcm9wZXJ0aWVzKCkuc2V0TWVzc2FnZURpZ2VzdChkaWdlc3RTdHJlYW0uZ2V0TWVzc2FnZURpZ2VzdCgpLmRpZ2VzdCgpKTsKLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBYbWxPYmplY3QgcGFyc2UgKCBSZWFkZXIgamlvciwgU2NoZW1hVHlwZSB0eXBlLCBYbWxPcHRpb25zIG9wdGlvbnMgKSB0aHJvd3MgWG1sRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgWG1sRmFjdG9yeUhvb2sgaG9vayA9IFhtbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQuZ2V0SG9vaygpOwotICAgICAgICBpZiAoaG9vayAhPSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIGhvb2sucGFyc2UoIHRoaXMsIGppb3IsIHR5cGUsIG9wdGlvbnMgKTsKLQotICAgICAgICByZXR1cm4gY3JlYXRlTmV3U3RvcmUoIG51bGwsIG9wdGlvbnMgKS5sb2FkWG1sKCBqaW9yLCB0eXBlLCBvcHRpb25zICk7Ci0gICAgfQotCi0gICAgcHVibGljIFhtbE9iamVjdCBwYXJzZSAoIE5vZGUgbm9kZSwgU2NoZW1hVHlwZSB0eXBlLCBYbWxPcHRpb25zIG9wdGlvbnMgKSB0aHJvd3MgWG1sRXhjZXB0aW9uCi0gICAgewotICAgICAgICBYbWxGYWN0b3J5SG9vayBob29rID0gWG1sRmFjdG9yeUhvb2suVGhyZWFkQ29udGV4dC5nZXRIb29rKCk7Ci0gICAgICAgIGlmIChob29rICE9IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gaG9vay5wYXJzZSggdGhpcywgbm9kZSwgdHlwZSwgb3B0aW9ucyApOwotCi0gICAgICAgIHJldHVybiBjcmVhdGVOZXdTdG9yZSggbnVsbCwgb3B0aW9ucyApLmxvYWRYbWwoIG5vZGUsIHR5cGUsIG9wdGlvbnMgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgWG1sU2F4SGFuZGxlciBuZXdYbWxTYXhIYW5kbGVyICggU2NoZW1hVHlwZSB0eXBlLCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgIHsKLSAgICAgICAgWG1sRmFjdG9yeUhvb2sgaG9vayA9IFhtbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQuZ2V0SG9vaygpOwotICAgICAgICBpZiAoaG9vayAhPSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIGhvb2submV3WG1sU2F4SGFuZGxlciggdGhpcywgdHlwZSwgb3B0aW9ucyApOwotCi0gICAgICAgIHJldHVybiBjcmVhdGVOZXdTdG9yZSggbnVsbCwgb3B0aW9ucyApLm5ld1NheEhhbmRsZXIoIHR5cGUsIG9wdGlvbnMgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtICggWE1MSW5wdXRTdHJlYW0geGlzLCBTY2hlbWFUeXBlIHR5cGUsIFhtbE9wdGlvbnMgb3B0aW9ucyApIHRocm93cyBYbWxFeGNlcHRpb24sIFhNTFN0cmVhbUV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdGhpcywgdHlwZSwgb3B0aW9ucyApOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8KLSAgICAvLwotCi0gICAgcHVibGljIFN0cmluZyBjb21waWxlUGF0aCAoIFN0cmluZyBwYXRoRXhwciApCi0gICAgewotICAgICAgICByZXR1cm4gY29tcGlsZVBhdGgoIHBhdGhFeHByLCBudWxsICk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBjb21waWxlUGF0aCAoIFN0cmluZyBwYXRoRXhwciwgWG1sT3B0aW9ucyBvcHRpb25zICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBkb0NvbXBpbGVQYXRoKCBwYXRoRXhwciwgb3B0aW9ucyApOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgY29tcGlsZVF1ZXJ5ICggU3RyaW5nIHF1ZXJ5RXhwciApCi0gICAgewotICAgICAgICByZXR1cm4gY29tcGlsZVF1ZXJ5KCBxdWVyeUV4cHIsIG51bGwgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGNvbXBpbGVRdWVyeSAoIFN0cmluZyBxdWVyeUV4cHIsIFhtbE9wdGlvbnMgb3B0aW9ucyApCi0gICAgewotICAgICAgICByZXR1cm4gZG9Db21waWxlUXVlcnkoIHF1ZXJ5RXhwciwgb3B0aW9ucyApOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFV0aWxpdHkgZnVuY3Rpb24gdG8gbG9hZCBhIHR5cGUgZnJvbSBhIHNpZ25hdHVyZS4KLSAgICAgKgotICAgICAqIEEgc2lnbmF0dXJlIGlzIHRoZSBzdHJpbmcgeW91IGdldCBmcm9tIHR5cGUudG9TdHJpbmcoKS4KLSAgICAgKi8KLSAgICBwdWJsaWMgU2NoZW1hVHlwZSB0eXBlRm9yU2lnbmF0dXJlKFN0cmluZyBzaWduYXR1cmUpCi0gICAgewotICAgICAgICBpbnQgZW5kID0gc2lnbmF0dXJlLmluZGV4T2YoJ0AnKTsKLSAgICAgICAgU3RyaW5nIHVyaTsKLQotICAgICAgICBpZiAoZW5kIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgdXJpID0gIiI7Ci0gICAgICAgICAgICBlbmQgPSBzaWduYXR1cmUubGVuZ3RoKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICB1cmkgPSBzaWduYXR1cmUuc3Vic3RyaW5nKGVuZCArIDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgTGlzdCBwYXJ0cyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZW5kOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBuZXh0YyA9IHNpZ25hdHVyZS5pbmRleE9mKCc6JywgaW5kZXgpOwotICAgICAgICAgICAgaW50IG5leHRkID0gc2lnbmF0dXJlLmluZGV4T2YoJ3wnLCBpbmRleCk7Ci0gICAgICAgICAgICBpbnQgbmV4dCA9IChuZXh0YyA8IDAgPyBuZXh0ZCA6IG5leHRkIDwgMCA/IG5leHRjIDogbmV4dGMgPCBuZXh0ZCA/IG5leHRjIDogbmV4dGQpOwotICAgICAgICAgICAgaWYgKG5leHQgPCAwIHx8IG5leHQgPiBlbmQpCi0gICAgICAgICAgICAgICAgbmV4dCA9IGVuZDsKLSAgICAgICAgICAgIFN0cmluZyBwYXJ0ID0gc2lnbmF0dXJlLnN1YnN0cmluZyhpbmRleCwgbmV4dCk7Ci0gICAgICAgICAgICBwYXJ0cy5hZGQocGFydCk7Ci0gICAgICAgICAgICBpbmRleCA9IG5leHQgKyAxOwotICAgICAgICB9Ci0KLSAgICAgICAgU2NoZW1hVHlwZSBjdXJUeXBlID0gbnVsbDsKLQotICAgICAgICBvdXRlcjogZm9yIChpbnQgaSA9IHBhcnRzLnNpemUoKSAtIDE7IGkgPj0gMDsgaSAtPSAxKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgcGFydCA9IChTdHJpbmcpcGFydHMuZ2V0KGkpOwotICAgICAgICAgICAgaWYgKHBhcnQubGVuZ3RoKCkgPCAxKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAocGFydC5sZW5ndGgoKSA+PSAyICYmIHBhcnQuY2hhckF0KDEpID09ICc9JykgPyAyIDogMTsKLSAgICAgICAgICAgIGNhc2VzOiBzd2l0Y2ggKHBhcnQuY2hhckF0KDApKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgJ1QnOgotICAgICAgICAgICAgICAgICAgICBpZiAoY3VyVHlwZSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOwotICAgICAgICAgICAgICAgICAgICBjdXJUeXBlID0gZmluZFR5cGUoUU5hbWVIZWxwZXIuZm9yTE5TKHBhcnQuc3Vic3RyaW5nKG9mZnNldCksIHVyaSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY3VyVHlwZSA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSAnRCc6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJUeXBlICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIGN1clR5cGUgPSBmaW5kRG9jdW1lbnRUeXBlKFFOYW1lSGVscGVyLmZvckxOUyhwYXJ0LnN1YnN0cmluZyhvZmZzZXQpLCB1cmkpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1clR5cGUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgJ0MnOiAvLyBkZXByZWNhdGVkCi0gICAgICAgICAgICAgICAgY2FzZSAnUic6IC8vIGN1cnJlbnQKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1clR5cGUgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgY3VyVHlwZSA9IGZpbmRBdHRyaWJ1dGVUeXBlKFFOYW1lSGVscGVyLmZvckxOUyhwYXJ0LnN1YnN0cmluZyhvZmZzZXQpLCB1cmkpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1clR5cGUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgJ0UnOgotICAgICAgICAgICAgICAgIGNhc2UgJ1UnOiAvLyBkaXN0aW5ndWlzaCBxdWFsaWZpZWQvdW5xdWFsaWZpZWQgVEJECi0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJUeXBlICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJUeXBlLmdldENvbnRlbnRUeXBlKCkgPCBTY2hlbWFUeXBlLkVMRU1FTlRfQ09OVEVOVCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIFNjaGVtYVR5cGVbXSBzdWJUeXBlcyA9IGN1clR5cGUuZ2V0QW5vbnltb3VzVHlwZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBsb2NhbE5hbWUgPSBwYXJ0LnN1YnN0cmluZyhvZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzdWJUeXBlcy5sZW5ndGg7IGorKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY2hlbWFGaWVsZCBmaWVsZCA9IHN1YlR5cGVzW2pdLmdldENvbnRhaW5lckZpZWxkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkICE9IG51bGwgJiYgIWZpZWxkLmlzQXR0cmlidXRlKCkgJiYgZmllbGQuZ2V0TmFtZSgpLmdldExvY2FsUGFydCgpLmVxdWFscyhsb2NhbE5hbWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyVHlwZSA9IHN1YlR5cGVzW2pdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBjYXNlczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFNjaGVtYUdsb2JhbEVsZW1lbnQgZWx0ID0gZmluZEVsZW1lbnQoUU5hbWVIZWxwZXIuZm9yTE5TKHBhcnQuc3Vic3RyaW5nKG9mZnNldCksIHVyaSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsdCA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgY3VyVHlwZSA9IGVsdC5nZXRUeXBlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlICdBJzoKLSAgICAgICAgICAgICAgICBjYXNlICdRJzogLy8gZGlzdGluZ3Vpc2ggcXVhbGlmaWVkL3VucXVhbGlmaWVkIFRCRAotICAgICAgICAgICAgICAgICAgICBpZiAoY3VyVHlwZSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyVHlwZS5pc1NpbXBsZVR5cGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIFNjaGVtYVR5cGVbXSBzdWJUeXBlcyA9IGN1clR5cGUuZ2V0QW5vbnltb3VzVHlwZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBsb2NhbE5hbWUgPSBwYXJ0LnN1YnN0cmluZyhvZmZzZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzdWJUeXBlcy5sZW5ndGg7IGorKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY2hlbWFGaWVsZCBmaWVsZCA9IHN1YlR5cGVzW2pdLmdldENvbnRhaW5lckZpZWxkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkICE9IG51bGwgJiYgZmllbGQuaXNBdHRyaWJ1dGUoKSAmJiBmaWVsZC5nZXROYW1lKCkuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKGxvY2FsTmFtZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJUeXBlID0gc3ViVHlwZXNbal07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGNhc2VzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgU2NoZW1hR2xvYmFsQXR0cmlidXRlIGF0dHIgPSBmaW5kQXR0cmlidXRlKFFOYW1lSGVscGVyLmZvckxOUyhwYXJ0LnN1YnN0cmluZyhvZmZzZXQpLCB1cmkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJUeXBlID0gYXR0ci5nZXRUeXBlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlICdCJzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1clR5cGUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1clR5cGUuZ2V0U2ltcGxlVmFyaWV0eSgpICE9IFNjaGVtYVR5cGUuQVRPTUlDKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgU2NoZW1hVHlwZVtdIHN1YlR5cGVzID0gY3VyVHlwZS5nZXRBbm9ueW1vdXNUeXBlcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1YlR5cGVzLmxlbmd0aCAhPSAxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgY3VyVHlwZSA9IHN1YlR5cGVzWzBdOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSAnSSc6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJUeXBlID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJUeXBlLmdldFNpbXBsZVZhcmlldHkoKSAhPSBTY2hlbWFUeXBlLkxJU1QpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTY2hlbWFUeXBlW10gc3ViVHlwZXMgPSBjdXJUeXBlLmdldEFub255bW91c1R5cGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViVHlwZXMubGVuZ3RoICE9IDEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJUeXBlID0gc3ViVHlwZXNbMF07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlICdNJzoKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1clR5cGUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBJbnRlZ2VyLnBhcnNlSW50KHBhcnQuc3Vic3RyaW5nKG9mZnNldCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1clR5cGUuZ2V0U2ltcGxlVmFyaWV0eSgpICE9IFNjaGVtYVR5cGUuVU5JT04pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTY2hlbWFUeXBlW10gc3ViVHlwZXMgPSBjdXJUeXBlLmdldEFub255bW91c1R5cGVzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViVHlwZXMubGVuZ3RoIDw9IGluZGV4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgY3VyVHlwZSA9IHN1YlR5cGVzW2luZGV4XTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gY3VyVHlwZTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TY2hlbWFUeXBlTG9hZGVySW1wbC5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU2NoZW1hVHlwZUxvYWRlckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA2NjViYi4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TY2hlbWFUeXBlTG9hZGVySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQ2ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnNjaGVtYTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFHbG9iYWxFbGVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hR2xvYmFsQXR0cmlidXRlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hTW9kZWxHcm91cDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUF0dHJpYnV0ZUdyb3VwOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVN5c3RlbTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUlkZW50aXR5Q29uc3RyYWludDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlFOYW1lSGVscGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uWEJlYW5EZWJ1ZzsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5JZGVudGl0eUhhc2hNYXA7Ci0KLXB1YmxpYyBjbGFzcyBTY2hlbWFUeXBlTG9hZGVySW1wbCBleHRlbmRzIFNjaGVtYVR5cGVMb2FkZXJCYXNlCi17Ci0gICAgcHJpdmF0ZSBSZXNvdXJjZUxvYWRlciBfcmVzb3VyY2VMb2FkZXI7Ci0gICAgcHJpdmF0ZSBDbGFzc0xvYWRlciBfY2xhc3NMb2FkZXI7Ci0gICAgcHJpdmF0ZSBTY2hlbWFUeXBlTG9hZGVyW10gX3NlYXJjaFBhdGg7Ci0KLSAgICBwcml2YXRlIE1hcCBfY2xhc3NwYXRoVHlwZVN5c3RlbXM7Ci0gICAgcHJpdmF0ZSBNYXAgX2NsYXNzTG9hZGVyVHlwZVN5c3RlbXM7Ci0gICAgcHJpdmF0ZSBNYXAgX2VsZW1lbnRDYWNoZTsKLSAgICBwcml2YXRlIE1hcCBfYXR0cmlidXRlQ2FjaGU7Ci0gICAgcHJpdmF0ZSBNYXAgX21vZGVsR3JvdXBDYWNoZTsKLSAgICBwcml2YXRlIE1hcCBfYXR0cmlidXRlR3JvdXBDYWNoZTsKLSAgICBwcml2YXRlIE1hcCBfaWRDb25zdHJhaW50Q2FjaGU7Ci0gICAgcHJpdmF0ZSBNYXAgX3R5cGVDYWNoZTsKLSAgICBwcml2YXRlIE1hcCBfZG9jdW1lbnRDYWNoZTsKLSAgICBwcml2YXRlIE1hcCBfY2xhc3NuYW1lQ2FjaGU7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTY2hlbWFUeXBlTG9hZGVySW1wbCBidWlsZENvbnRleHRUeXBlTG9hZGVyKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgU2NoZW1hVHlwZUxvYWRlckltcGwobmV3IFNjaGVtYVR5cGVMb2FkZXJbXSB7IEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLmdldCgpIH0gLCBudWxsLCBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBUaHJlYWRMb2NhbCBfdGhyZWFkVHlwZVN5c3RlbSA9Ci0gICAgICAgIG5ldyBUaHJlYWRMb2NhbCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByb3RlY3RlZCBPYmplY3QgaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gYnVpbGRDb250ZXh0VHlwZUxvYWRlcigpOyB9Ci0gICAgICAgIH07Ci0KLSAgICBwdWJsaWMgc3RhdGljIFNjaGVtYVR5cGVMb2FkZXJJbXBsIGdldENvbnRleHRUeXBlTG9hZGVyKCkKLSAgICB7Ci0gICAgICAgIFNjaGVtYVR5cGVMb2FkZXJJbXBsIGNhbmRpZGF0ZSA9IChTY2hlbWFUeXBlTG9hZGVySW1wbClfdGhyZWFkVHlwZVN5c3RlbS5nZXQoKTsKLSAgICAgICAgaWYgKGNhbmRpZGF0ZS5fY2xhc3NMb2FkZXIgIT0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FuZGlkYXRlID0gYnVpbGRDb250ZXh0VHlwZUxvYWRlcigpOwotICAgICAgICAgICAgX3RocmVhZFR5cGVTeXN0ZW0uc2V0KGNhbmRpZGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFNjaGVtYVR5cGVMb2FkZXIgYnVpbGQoU2NoZW1hVHlwZUxvYWRlcltdIHNlYXJjaFBhdGgsIFJlc291cmNlTG9hZGVyIHJlc291cmNlTG9hZGVyLCBDbGFzc0xvYWRlciBjbGFzc0xvYWRlcikKLSAgICB7Ci0gICAgICAgIGlmIChzZWFyY2hQYXRoID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNlYXJjaFBhdGggPSBFTVBUWV9TQ0hFTUFUWVBFTE9BREVSX0FSUkFZOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgLy8gYXNzZW1ibGUgYSBmbGF0dGVuZWQgc2VhcmNoIHBhdGggd2l0aCBubyBkdXBsaWNhdGVzCi0gICAgICAgICAgICBTdWJMb2FkZXJMaXN0IGxpc3QgPSBuZXcgU3ViTG9hZGVyTGlzdCgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZWFyY2hQYXRoLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzZWFyY2hQYXRoW2ldID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInNlYXJjaFBhdGhbIiArIGkgKyAiXSBpcyBudWxsIik7Ci0gICAgICAgICAgICAgICAgaWYgKCEoc2VhcmNoUGF0aFtpXSBpbnN0YW5jZW9mIFNjaGVtYVR5cGVMb2FkZXJJbXBsKSkKLSAgICAgICAgICAgICAgICAgICAgbGlzdC5hZGQoc2VhcmNoUGF0aFtpXSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU2NoZW1hVHlwZUxvYWRlckltcGwgc3ViID0gKFNjaGVtYVR5cGVMb2FkZXJJbXBsKXNlYXJjaFBhdGhbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdWIuX2NsYXNzTG9hZGVyICE9IG51bGwgfHwgc3ViLl9yZXNvdXJjZUxvYWRlciAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC5hZGQoc3ViKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBmb3IgKGludCBqID0gMDsgaiA8IHN1Yi5fc2VhcmNoUGF0aC5sZW5ndGg7IGorKykKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QuYWRkKHN1Yi5fc2VhcmNoUGF0aFtqXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2VhcmNoUGF0aCA9IGxpc3QudG9BcnJheSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNlYXJjaFBhdGgubGVuZ3RoID09IDEgJiYgcmVzb3VyY2VMb2FkZXIgPT0gbnVsbCAmJiBjbGFzc0xvYWRlciA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIHNlYXJjaFBhdGhbMF07Ci0KLSAgICAgICAgcmV0dXJuIG5ldyBTY2hlbWFUeXBlTG9hZGVySW1wbChzZWFyY2hQYXRoLCByZXNvdXJjZUxvYWRlciwgY2xhc3NMb2FkZXIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEp1c3QgdXNlZCB0byBhdm9pZCBkdXBsaWNhdGUgcGF0aCBlbnRyaWVzCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU3ViTG9hZGVyTGlzdAotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBMaXN0IHRoZUxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIHByaXZhdGUgTWFwIHNlZW4gPSBuZXcgSWRlbnRpdHlIYXNoTWFwKCk7Ci0KLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIGFkZChTY2hlbWFUeXBlTG9hZGVyIGxvYWRlcikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHNlZW4uY29udGFpbnNLZXkobG9hZGVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB0aGVMaXN0LmFkZChsb2FkZXIpOwotICAgICAgICAgICAgc2Vlbi5wdXQobG9hZGVyLCBudWxsKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBTY2hlbWFUeXBlTG9hZGVyW10gdG9BcnJheSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAoU2NoZW1hVHlwZUxvYWRlcltdKXRoZUxpc3QudG9BcnJheShFTVBUWV9TQ0hFTUFUWVBFTE9BREVSX0FSUkFZKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYSBTY2hlbWFUeXBlTG9hZGVySW1wbCB0aGF0IHNlYXJjaGVzIGZvciBvYmplY3RzCi0gICAgICogaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKLSAgICAgKgotICAgICAqICgxKSBGaXJzdCBvbiB0aGUgc2VhcmNoUGF0aCBvZiBvdGhlciBTY2hlbWFUeXBlU3lzdGVtcyBzdXBwbGllZCwKLSAgICAgKiAgICAgaW4gb3JkZXIgdGhhdCB0aGV5IGFyZSBsaXN0ZWQuCi0gICAgICogKDIpIE5leHQgb24gdGhlIGNsYXNzcGF0aCBvZiAuamFyIGZpbGVzIG9yIGRpcmVjdG9yaWVzIHN1cHBsaWVkLAotICAgICAqICAgICBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IGFyZSBsaXN0ZWQuIFdoZW4gdHlwZXMgYXJlIHJldHVybmVkIGluCi0gICAgICogICAgIHRoaXMgd2F5LCB0aGV5IGFyZSBpbnN0YW50aWF0ZWQgZnJvbSBhIHByaXZhdGUgdHlwZXN5c3RlbS4KLSAgICAgKiAgICAgSW4gb3RoZXIgd29yZHMsIGlmIGEgdHlwZSBpcyBsb2FkZWQgZnJvbSBhbm90aGVyIFNjaGVtYVR5cGVMb2FkZXJJbXBsCi0gICAgICogICAgIHRoYXQgd2FzIGluaXRpYWxpemVkIG9uIHRoZSBzYW1lIGZpbGUsIHRoZSBpbnN0YW5jZSBvZiB0aGUgdHlwZSB3aWxsCi0gICAgICogICAgIGJlIGRpZmZlcmVudC4KLSAgICAgKiAoMykgRmluYWxseSBvbiB0aGUgY2xhc3Nsb2FkZXIgc3VwcGxpZWQuCi0gICAgICovCi0gICAgcHJpdmF0ZSBTY2hlbWFUeXBlTG9hZGVySW1wbChTY2hlbWFUeXBlTG9hZGVyW10gc2VhcmNoUGF0aCwgUmVzb3VyY2VMb2FkZXIgcmVzb3VyY2VMb2FkZXIsIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyKQotICAgIHsKLSAgICAgICAgaWYgKHNlYXJjaFBhdGggPT0gbnVsbCkKLSAgICAgICAgICAgIF9zZWFyY2hQYXRoID0gRU1QVFlfU0NIRU1BVFlQRUxPQURFUl9BUlJBWTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgX3NlYXJjaFBhdGggPSBzZWFyY2hQYXRoOwotICAgICAgICBfcmVzb3VyY2VMb2FkZXIgPSByZXNvdXJjZUxvYWRlcjsKLSAgICAgICAgX2NsYXNzTG9hZGVyID0gY2xhc3NMb2FkZXI7Ci0KLSAgICAgICAgaW5pdENhY2hlcygpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEluaXRpYWxpemVzIHRoZSBjYWNoZXMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCB2b2lkIGluaXRDYWNoZXMoKQotICAgIHsKLSAgICAgICAgX2NsYXNzcGF0aFR5cGVTeXN0ZW1zID0gQ29sbGVjdGlvbnMuc3luY2hyb25pemVkTWFwKG5ldyBIYXNoTWFwKCkpOwotICAgICAgICBfY2xhc3NMb2FkZXJUeXBlU3lzdGVtcyA9IENvbGxlY3Rpb25zLnN5bmNocm9uaXplZE1hcChuZXcgSGFzaE1hcCgpKTsKLSAgICAgICAgX2VsZW1lbnRDYWNoZSA9IENvbGxlY3Rpb25zLnN5bmNocm9uaXplZE1hcChuZXcgSGFzaE1hcCgpKTsKLSAgICAgICAgX2F0dHJpYnV0ZUNhY2hlID0gQ29sbGVjdGlvbnMuc3luY2hyb25pemVkTWFwKG5ldyBIYXNoTWFwKCkpOwotICAgICAgICBfbW9kZWxHcm91cENhY2hlID0gQ29sbGVjdGlvbnMuc3luY2hyb25pemVkTWFwKG5ldyBIYXNoTWFwKCkpOwotICAgICAgICBfYXR0cmlidXRlR3JvdXBDYWNoZSA9IENvbGxlY3Rpb25zLnN5bmNocm9uaXplZE1hcChuZXcgSGFzaE1hcCgpKTsKLSAgICAgICAgX2lkQ29uc3RyYWludENhY2hlID0gQ29sbGVjdGlvbnMuc3luY2hyb25pemVkTWFwKG5ldyBIYXNoTWFwKCkpOwotICAgICAgICBfdHlwZUNhY2hlID0gQ29sbGVjdGlvbnMuc3luY2hyb25pemVkTWFwKG5ldyBIYXNoTWFwKCkpOwotICAgICAgICBfZG9jdW1lbnRDYWNoZSA9IENvbGxlY3Rpb25zLnN5bmNocm9uaXplZE1hcChuZXcgSGFzaE1hcCgpKTsKLSAgICAgICAgX2NsYXNzbmFtZUNhY2hlID0gQ29sbGVjdGlvbnMuc3luY2hyb25pemVkTWFwKG5ldyBIYXNoTWFwKCkpOwotICAgIH0KLQotICAgIFNjaGVtYVR5cGVTeXN0ZW1JbXBsIHR5cGVTeXN0ZW1Gb3JDb21wb25lbnQoU3RyaW5nIHNlYXJjaGRpciwgUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIFN0cmluZyBzZWFyY2hmb3IgPSBzZWFyY2hkaXIgKyBRTmFtZUhlbHBlci5oZXhzYWZlZGlyKG5hbWUpICsgIi54c2IiOwotICAgICAgICBTdHJpbmcgdHNuYW1lID0gbnVsbDsKLQotICAgICAgICBpZiAoX3Jlc291cmNlTG9hZGVyICE9IG51bGwpCi0gICAgICAgICAgICB0c25hbWUgPSBjcmFja0VudHJ5KF9yZXNvdXJjZUxvYWRlciwgc2VhcmNoZm9yKTsKLQotICAgICAgICBpZiAoX2NsYXNzTG9hZGVyICE9IG51bGwpCi0gICAgICAgICAgICB0c25hbWUgPSBjcmFja0VudHJ5KF9jbGFzc0xvYWRlciwgc2VhcmNoZm9yKTsKLQotICAgICAgICBpZiAodHNuYW1lICE9IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gKFNjaGVtYVR5cGVTeXN0ZW1JbXBsKXR5cGVTeXN0ZW1Gb3JOYW1lKHRzbmFtZSk7Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGVTeXN0ZW0gdHlwZVN5c3RlbUZvck5hbWUoU3RyaW5nIG5hbWUpCi0gICAgewotICAgICAgICBpZiAoX3Jlc291cmNlTG9hZGVyICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYVR5cGVTeXN0ZW0gcmVzdWx0ID0gZ2V0VHlwZVN5c3RlbU9uQ2xhc3NwYXRoKG5hbWUpOwotICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoX2NsYXNzTG9hZGVyICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYVR5cGVTeXN0ZW0gcmVzdWx0ID0gZ2V0VHlwZVN5c3RlbU9uQ2xhc3Nsb2FkZXIobmFtZSk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBTY2hlbWFUeXBlU3lzdGVtSW1wbCB0eXBlU3lzdGVtRm9yQ2xhc3NuYW1lKFN0cmluZyBzZWFyY2hkaXIsIFN0cmluZyBuYW1lKQotICAgIHsKLSAgICAgICAgU3RyaW5nIHNlYXJjaGZvciA9IHNlYXJjaGRpciArIG5hbWUucmVwbGFjZSgnLicsICcvJykgKyAiLnhzYiI7Ci0KLSAgICAgICAgaWYgKF9yZXNvdXJjZUxvYWRlciAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgdHNuYW1lID0gY3JhY2tFbnRyeShfcmVzb3VyY2VMb2FkZXIsIHNlYXJjaGZvcik7Ci0gICAgICAgICAgICBpZiAodHNuYW1lICE9IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGdldFR5cGVTeXN0ZW1PbkNsYXNzcGF0aCh0c25hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKF9jbGFzc0xvYWRlciAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgdHNuYW1lID0gY3JhY2tFbnRyeShfY2xhc3NMb2FkZXIsIHNlYXJjaGZvcik7Ci0gICAgICAgICAgICBpZiAodHNuYW1lICE9IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGdldFR5cGVTeXN0ZW1PbkNsYXNzbG9hZGVyKHRzbmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBTY2hlbWFUeXBlU3lzdGVtSW1wbCBnZXRUeXBlU3lzdGVtT25DbGFzc3BhdGgoU3RyaW5nIG5hbWUpCi0gICAgewotICAgICAgICBTY2hlbWFUeXBlU3lzdGVtSW1wbCByZXN1bHQgPSAoU2NoZW1hVHlwZVN5c3RlbUltcGwpX2NsYXNzcGF0aFR5cGVTeXN0ZW1zLmdldChuYW1lKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBuZXcgU2NoZW1hVHlwZVN5c3RlbUltcGwoX3Jlc291cmNlTG9hZGVyLCBuYW1lLCB0aGlzKTsKLSAgICAgICAgICAgIF9jbGFzc3BhdGhUeXBlU3lzdGVtcy5wdXQobmFtZSwgcmVzdWx0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIFNjaGVtYVR5cGVTeXN0ZW1JbXBsIGdldFR5cGVTeXN0ZW1PbkNsYXNzbG9hZGVyKFN0cmluZyBuYW1lKQotICAgIHsKLSAgICAgICAgWEJlYW5EZWJ1Zy50cmFjZShYQmVhbkRlYnVnLlRSQUNFX1NDSEVNQV9MT0FESU5HLCAiRmluZGluZyB0eXBlIHN5c3RlbSAiICsgbmFtZSArICIgb24gY2xhc3Nsb2FkZXIiLCAwKTsKLSAgICAgICAgU2NoZW1hVHlwZVN5c3RlbUltcGwgcmVzdWx0ID0gKFNjaGVtYVR5cGVTeXN0ZW1JbXBsKV9jbGFzc0xvYWRlclR5cGVTeXN0ZW1zLmdldChuYW1lKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBYQmVhbkRlYnVnLnRyYWNlKFhCZWFuRGVidWcuVFJBQ0VfU0NIRU1BX0xPQURJTkcsICJUeXBlIHN5c3RlbSAiICsgbmFtZSArICIgbm90IGNhY2hlZCAtIGNvbnN1bHRpbmcgZmllbGQiLCAwKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IFNjaGVtYVR5cGVTeXN0ZW1JbXBsLmZvck5hbWUobmFtZSwgX2NsYXNzTG9hZGVyKTsKLSAgICAgICAgICAgIF9jbGFzc0xvYWRlclR5cGVTeXN0ZW1zLnB1dChuYW1lLCByZXN1bHQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cmluZyBjcmFja0VudHJ5KFJlc291cmNlTG9hZGVyIGxvYWRlciwgU3RyaW5nIHNlYXJjaGZvcikKLSAgICB7Ci0gICAgICAgIElucHV0U3RyZWFtIGlzID0gbG9hZGVyLmdldFJlc291cmNlQXNTdHJlYW0oc2VhcmNoZm9yKTsKLSAgICAgICAgaWYgKGlzID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgcmV0dXJuIGNyYWNrUG9pbnRlcihpcyk7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cmluZyBjcmFja0VudHJ5KENsYXNzTG9hZGVyIGxvYWRlciwgU3RyaW5nIHNlYXJjaGZvcikKLSAgICB7Ci0gICAgICAgIElucHV0U3RyZWFtIHN0cmVhbSA9IGxvYWRlci5nZXRSZXNvdXJjZUFzU3RyZWFtKHNlYXJjaGZvcik7Ci0gICAgICAgIGlmIChzdHJlYW0gPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICByZXR1cm4gY3JhY2tQb2ludGVyKHN0cmVhbSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cmluZyBjcmFja1BvaW50ZXIoSW5wdXRTdHJlYW0gc3RyZWFtKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFNjaGVtYVR5cGVTeXN0ZW1JbXBsLmNyYWNrUG9pbnRlcihzdHJlYW0pOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzTmFtZXNwYWNlRGVmaW5lZChTdHJpbmcgbmFtZXNwYWNlKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfc2VhcmNoUGF0aC5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIGlmIChfc2VhcmNoUGF0aFtpXS5pc05hbWVzcGFjZURlZmluZWQobmFtZXNwYWNlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIFNjaGVtYVR5cGVTeXN0ZW0gc3RzID0gdHlwZVN5c3RlbUZvckNvbXBvbmVudCgic2NoZW1hL25hbWVzcGFjZS8iLCBuZXcgUU5hbWUobmFtZXNwYWNlLCAieG1sbnMiKSk7Ci0gICAgICAgIHJldHVybiAoc3RzICE9IG51bGwpOwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFUeXBlLlJlZiBmaW5kVHlwZVJlZihRTmFtZSBuYW1lKQotICAgIHsKLSAgICAgICAgU2NoZW1hVHlwZS5SZWYgcmVzdWx0ID0gKFNjaGVtYVR5cGUuUmVmKV90eXBlQ2FjaGUuZ2V0KG5hbWUpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgIV90eXBlQ2FjaGUuY29udGFpbnNLZXkobmFtZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX3NlYXJjaFBhdGgubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgaWYgKG51bGwgIT0gKHJlc3VsdCA9IF9zZWFyY2hQYXRoW2ldLmZpbmRUeXBlUmVmKG5hbWUpKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2NoZW1hVHlwZVN5c3RlbSB0cyA9IHR5cGVTeXN0ZW1Gb3JDb21wb25lbnQoInNjaGVtYS90eXBlLyIsIG5hbWUpOwotICAgICAgICAgICAgICAgIGlmICh0cyAhPSBudWxsKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHMuZmluZFR5cGVSZWYobmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydChyZXN1bHQgIT0gbnVsbCkgOiAiVHlwZSBzeXN0ZW0gcmVnaXN0ZXJlZCB0eXBlICIgKyBRTmFtZUhlbHBlci5wcmV0dHkobmFtZSkgKyAiIGJ1dCBkb2VzIG5vdCByZXR1cm4gaXQiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF90eXBlQ2FjaGUucHV0KG5hbWUsIHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hVHlwZSB0eXBlRm9yQ2xhc3NuYW1lKFN0cmluZyBjbGFzc25hbWUpCi0gICAgewotICAgICAgICBjbGFzc25hbWUgPSBjbGFzc25hbWUucmVwbGFjZSgnJCcsICcuJyk7Ci0KLSAgICAgICAgU2NoZW1hVHlwZSByZXN1bHQgPSAoU2NoZW1hVHlwZSlfY2xhc3NuYW1lQ2FjaGUuZ2V0KGNsYXNzbmFtZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCAmJiAhX2NsYXNzbmFtZUNhY2hlLmNvbnRhaW5zS2V5KGNsYXNzbmFtZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX3NlYXJjaFBhdGgubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgaWYgKG51bGwgIT0gKHJlc3VsdCA9IF9zZWFyY2hQYXRoW2ldLnR5cGVGb3JDbGFzc25hbWUoY2xhc3NuYW1lKSkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNjaGVtYVR5cGVTeXN0ZW0gdHMgPSB0eXBlU3lzdGVtRm9yQ2xhc3NuYW1lKCJzY2hlbWEvamF2YW5hbWUvIiwgY2xhc3NuYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAodHMgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRzLnR5cGVGb3JDbGFzc25hbWUoY2xhc3NuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlc3VsdCAhPSBudWxsKSA6ICJUeXBlIHN5c3RlbSByZWdpc3RlcmVkIHR5cGUgIiArIGNsYXNzbmFtZSArICIgYnV0IGRvZXMgbm90IHJldHVybiBpdCI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgX2NsYXNzbmFtZUNhY2hlLnB1dChjbGFzc25hbWUsIHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hVHlwZS5SZWYgZmluZERvY3VtZW50VHlwZVJlZihRTmFtZSBuYW1lKQotICAgIHsKLSAgICAgICAgU2NoZW1hVHlwZS5SZWYgcmVzdWx0ID0gKFNjaGVtYVR5cGUuUmVmKV9kb2N1bWVudENhY2hlLmdldChuYW1lKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsICYmICFfZG9jdW1lbnRDYWNoZS5jb250YWluc0tleShuYW1lKSkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfc2VhcmNoUGF0aC5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICBpZiAobnVsbCAhPSAocmVzdWx0ID0gX3NlYXJjaFBhdGhbaV0uZmluZERvY3VtZW50VHlwZVJlZihuYW1lKSkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNjaGVtYVR5cGVTeXN0ZW0gdHMgPSB0eXBlU3lzdGVtRm9yQ29tcG9uZW50KCJzY2hlbWEvZWxlbWVudC8iLCBuYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAodHMgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRzLmZpbmREb2N1bWVudFR5cGVSZWYobmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydChyZXN1bHQgIT0gbnVsbCkgOiAiVHlwZSBzeXN0ZW0gcmVnaXN0ZXJlZCBlbGVtZW50ICIgKyBRTmFtZUhlbHBlci5wcmV0dHkobmFtZSkgKyAiIGJ1dCBkb2VzIG5vdCBjb250YWluIGRvY3VtZW50IHR5cGUiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF9kb2N1bWVudENhY2hlLnB1dChuYW1lLCByZXN1bHQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGUuUmVmIGZpbmRBdHRyaWJ1dGVUeXBlUmVmKFFOYW1lIG5hbWUpCi0gICAgewotICAgICAgICBTY2hlbWFUeXBlLlJlZiByZXN1bHQgPSAoU2NoZW1hVHlwZS5SZWYpX2F0dHJpYnV0ZUNhY2hlLmdldChuYW1lKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsICYmICFfYXR0cmlidXRlQ2FjaGUuY29udGFpbnNLZXkobmFtZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX3NlYXJjaFBhdGgubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgaWYgKG51bGwgIT0gKHJlc3VsdCA9IF9zZWFyY2hQYXRoW2ldLmZpbmRBdHRyaWJ1dGVUeXBlUmVmKG5hbWUpKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2NoZW1hVHlwZVN5c3RlbSB0cyA9IHR5cGVTeXN0ZW1Gb3JDb21wb25lbnQoInNjaGVtYS9hdHRyaWJ1dGUvIiwgbmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRzICE9IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cy5maW5kQXR0cmlidXRlVHlwZVJlZihuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlc3VsdCAhPSBudWxsKSA6ICJUeXBlIHN5c3RlbSByZWdpc3RlcmVkIGF0dHJpYnV0ZSAiICsgUU5hbWVIZWxwZXIucHJldHR5KG5hbWUpICsgIiBidXQgZG9lcyBub3QgY29udGFpbiBhdHRyaWJ1dGUgdHlwZSI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgX2F0dHJpYnV0ZUNhY2hlLnB1dChuYW1lLCByZXN1bHQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYUdsb2JhbEVsZW1lbnQuUmVmIGZpbmRFbGVtZW50UmVmKFFOYW1lIG5hbWUpCi0gICAgewotICAgICAgICBTY2hlbWFHbG9iYWxFbGVtZW50LlJlZiByZXN1bHQgPSAoU2NoZW1hR2xvYmFsRWxlbWVudC5SZWYpX2VsZW1lbnRDYWNoZS5nZXQobmFtZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCAmJiAhX2VsZW1lbnRDYWNoZS5jb250YWluc0tleShuYW1lKSkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfc2VhcmNoUGF0aC5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICBpZiAobnVsbCAhPSAocmVzdWx0ID0gX3NlYXJjaFBhdGhbaV0uZmluZEVsZW1lbnRSZWYobmFtZSkpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTY2hlbWFUeXBlU3lzdGVtIHRzID0gdHlwZVN5c3RlbUZvckNvbXBvbmVudCgic2NoZW1hL2VsZW1lbnQvIiwgbmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRzICE9IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cy5maW5kRWxlbWVudFJlZihuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlc3VsdCAhPSBudWxsKSA6ICJUeXBlIHN5c3RlbSByZWdpc3RlcmVkIGVsZW1lbnQgIiArIFFOYW1lSGVscGVyLnByZXR0eShuYW1lKSArICIgYnV0IGRvZXMgbm90IHJldHVybiBpdCI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgX2VsZW1lbnRDYWNoZS5wdXQobmFtZSwgcmVzdWx0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmIGZpbmRBdHRyaWJ1dGVSZWYoUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIFNjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWYgcmVzdWx0ID0gKFNjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWYpX2F0dHJpYnV0ZUNhY2hlLmdldChuYW1lKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsICYmICFfYXR0cmlidXRlQ2FjaGUuY29udGFpbnNLZXkobmFtZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX3NlYXJjaFBhdGgubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgaWYgKG51bGwgIT0gKHJlc3VsdCA9IF9zZWFyY2hQYXRoW2ldLmZpbmRBdHRyaWJ1dGVSZWYobmFtZSkpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTY2hlbWFUeXBlU3lzdGVtIHRzID0gdHlwZVN5c3RlbUZvckNvbXBvbmVudCgic2NoZW1hL2F0dHJpYnV0ZS8iLCBuYW1lKTsKLSAgICAgICAgICAgICAgICBpZiAodHMgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRzLmZpbmRBdHRyaWJ1dGVSZWYobmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydChyZXN1bHQgIT0gbnVsbCkgOiAiVHlwZSBzeXN0ZW0gcmVnaXN0ZXJlZCBhdHRyaWJ1dGUgIiArIFFOYW1lSGVscGVyLnByZXR0eShuYW1lKSArICIgYnV0IGRvZXMgbm90IHJldHVybiBpdCI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgX2F0dHJpYnV0ZUNhY2hlLnB1dChuYW1lLCByZXN1bHQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYU1vZGVsR3JvdXAuUmVmIGZpbmRNb2RlbEdyb3VwUmVmKFFOYW1lIG5hbWUpCi0gICAgewotICAgICAgICBTY2hlbWFNb2RlbEdyb3VwLlJlZiByZXN1bHQgPSAoU2NoZW1hTW9kZWxHcm91cC5SZWYpX21vZGVsR3JvdXBDYWNoZS5nZXQobmFtZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCAmJiAhX21vZGVsR3JvdXBDYWNoZS5jb250YWluc0tleShuYW1lKSkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfc2VhcmNoUGF0aC5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICBpZiAobnVsbCAhPSAocmVzdWx0ID0gX3NlYXJjaFBhdGhbaV0uZmluZE1vZGVsR3JvdXBSZWYobmFtZSkpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTY2hlbWFUeXBlU3lzdGVtIHRzID0gdHlwZVN5c3RlbUZvckNvbXBvbmVudCgic2NoZW1hL21vZGVsZ3JvdXAvIiwgbmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRzICE9IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cy5maW5kTW9kZWxHcm91cFJlZihuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlc3VsdCAhPSBudWxsKSA6ICJUeXBlIHN5c3RlbSByZWdpc3RlcmVkIG1vZGVsIGdyb3VwICIgKyBRTmFtZUhlbHBlci5wcmV0dHkobmFtZSkgKyAiIGJ1dCBkb2VzIG5vdCByZXR1cm4gaXQiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF9tb2RlbEdyb3VwQ2FjaGUucHV0KG5hbWUsIHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmIGZpbmRBdHRyaWJ1dGVHcm91cFJlZihRTmFtZSBuYW1lKQotICAgIHsKLSAgICAgICAgU2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmIHJlc3VsdCA9IChTY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWYpX2F0dHJpYnV0ZUdyb3VwQ2FjaGUuZ2V0KG5hbWUpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgIV9hdHRyaWJ1dGVHcm91cENhY2hlLmNvbnRhaW5zS2V5KG5hbWUpKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IF9zZWFyY2hQYXRoLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIGlmIChudWxsICE9IChyZXN1bHQgPSBfc2VhcmNoUGF0aFtpXS5maW5kQXR0cmlidXRlR3JvdXBSZWYobmFtZSkpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTY2hlbWFUeXBlU3lzdGVtIHRzID0gdHlwZVN5c3RlbUZvckNvbXBvbmVudCgic2NoZW1hL2F0dHJpYnV0ZWdyb3VwLyIsIG5hbWUpOwotICAgICAgICAgICAgICAgIGlmICh0cyAhPSBudWxsKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHMuZmluZEF0dHJpYnV0ZUdyb3VwUmVmKG5hbWUpOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnQocmVzdWx0ICE9IG51bGwpIDogIlR5cGUgc3lzdGVtIHJlZ2lzdGVyZWQgYXR0cmlidXRlIGdyb3VwICIgKyBRTmFtZUhlbHBlci5wcmV0dHkobmFtZSkgKyAiIGJ1dCBkb2VzIG5vdCByZXR1cm4gaXQiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF9hdHRyaWJ1dGVHcm91cENhY2hlLnB1dChuYW1lLCByZXN1bHQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWYgZmluZElkZW50aXR5Q29uc3RyYWludFJlZihRTmFtZSBuYW1lKQotICAgIHsKLSAgICAgICAgU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZiByZXN1bHQgPSAoU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZilfaWRDb25zdHJhaW50Q2FjaGUuZ2V0KG5hbWUpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgIV9pZENvbnN0cmFpbnRDYWNoZS5jb250YWluc0tleShuYW1lKSkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfc2VhcmNoUGF0aC5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICBpZiAobnVsbCAhPSAocmVzdWx0ID0gX3NlYXJjaFBhdGhbaV0uZmluZElkZW50aXR5Q29uc3RyYWludFJlZihuYW1lKSkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNjaGVtYVR5cGVTeXN0ZW0gdHMgPSB0eXBlU3lzdGVtRm9yQ29tcG9uZW50KCJzY2hlbWEvaWRlbnRpdHljb25zdHJhaW50LyIsIG5hbWUpOwotICAgICAgICAgICAgICAgIGlmICh0cyAhPSBudWxsKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHMuZmluZElkZW50aXR5Q29uc3RyYWludFJlZihuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlc3VsdCAhPSBudWxsKSA6ICJUeXBlIHN5c3RlbSByZWdpc3RlcmVkIGlkZW50aXR5IGNvbnN0cmFpbnQgIiArIFFOYW1lSGVscGVyLnByZXR0eShuYW1lKSArICIgYnV0IGRvZXMgbm90IHJldHVybiBpdCI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgX2lkQ29uc3RyYWludENhY2hlLnB1dChuYW1lLCByZXN1bHQpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcHVibGljIElucHV0U3RyZWFtIGdldFNvdXJjZUFzU3RyZWFtKFN0cmluZyBzb3VyY2VOYW1lKQotICAgIHsKLSAgICAgICAgSW5wdXRTdHJlYW0gcmVzdWx0ID0gbnVsbDsKLQotICAgICAgICBpZiAoIXNvdXJjZU5hbWUuc3RhcnRzV2l0aCgiLyIpKQotICAgICAgICAgICAgc291cmNlTmFtZSA9ICIvIiArIHNvdXJjZU5hbWU7Ci0KLSAgICAgICAgaWYgKF9yZXNvdXJjZUxvYWRlciAhPSBudWxsKQotICAgICAgICAgICAgcmVzdWx0ID0gX3Jlc291cmNlTG9hZGVyLmdldFJlc291cmNlQXNTdHJlYW0oInNjaGVtYS9zcmMiICsgc291cmNlTmFtZSk7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsICYmIF9jbGFzc0xvYWRlciAhPSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIF9jbGFzc0xvYWRlci5nZXRSZXNvdXJjZUFzU3RyZWFtKCJzY2hlbWEvc3JjIiArIHNvdXJjZU5hbWUpOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZUxvYWRlcltdIEVNUFRZX1NDSEVNQVRZUEVMT0FERVJfQVJSQVkgPSBuZXcgU2NoZW1hVHlwZUxvYWRlclswXTsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1NjaGVtYVR5cGVTeXN0ZW1Db21waWxlci5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU2NoZW1hVHlwZVN5c3RlbUNvbXBpbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllMGE4NDMuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU2NoZW1hVHlwZVN5c3RlbUNvbXBpbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjYgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9uczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVTeXN0ZW07Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci0KLWltcG9ydCBvcmcudzMueDIwMDEueG1sU2NoZW1hLlNjaGVtYURvY3VtZW50LlNjaGVtYTsKLWltcG9ydCBvcmcudzMueDIwMDEueG1sU2NoZW1hLlNjaGVtYURvY3VtZW50OwotaW1wb3J0IGNvbS5iZWEueDIwMDIueDA5LnhiZWFuLmNvbmZpZy5Db25maWdEb2N1bWVudC5Db25maWc7Ci1pbXBvcnQgY29tLmJlYS54MjAwMi54MDkueGJlYW4uY29uZmlnLkNvbmZpZ0RvY3VtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uWG1sRXJyb3JXYXRjaGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb25maWcuU2NoZW1hQ29uZmlnOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBTY2hlbWFUeXBlU3lzdGVtQ29tcGlsZXIKLXsKLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFBhcmFtZXRlcnMKLSAgICB7Ci0gICAgICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7Ci0gICAgICAgIHByaXZhdGUgU2NoZW1hW10gc2NoZW1hczsKLSAgICAgICAgcHJpdmF0ZSBDb25maWdbXSBjb25maWdzOwotICAgICAgICBwcml2YXRlIFNjaGVtYVR5cGVMb2FkZXIgbGlua1RvOwotICAgICAgICBwcml2YXRlIFhtbE9wdGlvbnMgb3B0aW9uczsKLSAgICAgICAgcHJpdmF0ZSBDb2xsZWN0aW9uIGVycm9yTGlzdGVuZXI7Ci0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBqYXZhaXplOwotICAgICAgICBwcml2YXRlIFVSSSBiYXNlVVJJOwotICAgICAgICBwcml2YXRlIE1hcCBzb3VyY2VzVG9Db3B5TWFwOwotCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuYW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBTY2hlbWFEb2N1bWVudC5TY2hlbWFbXSBnZXRTY2hlbWFzKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHNjaGVtYXM7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRTY2hlbWFzKFNjaGVtYURvY3VtZW50LlNjaGVtYVtdIHNjaGVtYXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuc2NoZW1hcyA9IHNjaGVtYXM7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgQ29uZmlnRG9jdW1lbnQuQ29uZmlnW10gZ2V0Q29uZmlncygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBjb25maWdzOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0Q29uZmlncyhDb25maWdEb2N1bWVudC5Db25maWdbXSBjb25maWdzKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLmNvbmZpZ3MgPSBjb25maWdzOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFNjaGVtYVR5cGVMb2FkZXIgZ2V0TGlua1RvKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGxpbmtUbzsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldExpbmtUbyhTY2hlbWFUeXBlTG9hZGVyIGxpbmtUbykKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5saW5rVG8gPSBsaW5rVG87Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgWG1sT3B0aW9ucyBnZXRPcHRpb25zKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnM7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRPcHRpb25zKFhtbE9wdGlvbnMgb3B0aW9ucykKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBDb2xsZWN0aW9uIGdldEVycm9yTGlzdGVuZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3JMaXN0ZW5lcjsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldEVycm9yTGlzdGVuZXIoQ29sbGVjdGlvbiBlcnJvckxpc3RlbmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLmVycm9yTGlzdGVuZXIgPSBlcnJvckxpc3RlbmVyOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gaXNKYXZhaXplKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGphdmFpemU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRKYXZhaXplKGJvb2xlYW4gamF2YWl6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5qYXZhaXplID0gamF2YWl6ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBVUkkgZ2V0QmFzZVVSSSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBiYXNlVVJJOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0QmFzZVVSSShVUkkgYmFzZVVSSSkKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5iYXNlVVJJID0gYmFzZVVSSTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBNYXAgZ2V0U291cmNlc1RvQ29weU1hcCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzb3VyY2VzVG9Db3B5TWFwOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0U291cmNlc1RvQ29weU1hcChNYXAgc291cmNlc1RvQ29weU1hcCkKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5zb3VyY2VzVG9Db3B5TWFwID0gc291cmNlc1RvQ29weU1hcDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU2NoZW1hVHlwZVN5c3RlbSBjb21waWxlKFBhcmFtZXRlcnMgcGFyYW1zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbXBpbGVJbXBsKHBhcmFtcy5nZXROYW1lKCksIHBhcmFtcy5nZXRTY2hlbWFzKCksIHBhcmFtcy5nZXRDb25maWdzKCksIHBhcmFtcy5nZXRMaW5rVG8oKSwgcGFyYW1zLmdldE9wdGlvbnMoKSwgcGFyYW1zLmdldEVycm9yTGlzdGVuZXIoKSwgcGFyYW1zLmlzSmF2YWl6ZSgpLCBwYXJhbXMuZ2V0QmFzZVVSSSgpLCBwYXJhbXMuZ2V0U291cmNlc1RvQ29weU1hcCgpKTsKLSAgICB9Ci0gICAgCi0gICAgLyogcGFja2FnZSEhISAqLyBzdGF0aWMgU2NoZW1hVHlwZVN5c3RlbUltcGwgY29tcGlsZUltcGwoCi0gICAgICAgIFN0cmluZyBuYW1lLCBTY2hlbWFbXSBzY2hlbWFzLCBDb25maWdbXSBjb25maWdzLAotICAgICAgICBTY2hlbWFUeXBlTG9hZGVyIGxpbmtUbywgWG1sT3B0aW9ucyBvcHRpb25zLCBDb2xsZWN0aW9uIG91dHNpZGVFcnJvcnMsIGJvb2xlYW4gamF2YWl6ZSwgVVJJIGJhc2VVUkksIE1hcCBzb3VyY2VzVG9Db3B5TWFwKQotICAgIHsKLSAgICAgICAgaWYgKGxpbmtUbyA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTXVzdCBzdXBwbHkgbGlua1RvIik7Ci0KLSAgICAgICAgWG1sRXJyb3JXYXRjaGVyIGVycm9yV2F0Y2hlciA9IG5ldyBYbWxFcnJvcldhdGNoZXIob3V0c2lkZUVycm9ycyk7Ci0KLSAgICAgICAgLy8gY29uc3RydWN0IHRoZSBzdGF0ZQotICAgICAgICBTdHNjU3RhdGUgc3RhdGUgPSBTdHNjU3RhdGUuc3RhcnQoKTsKLSAgICAgICAgYm9vbGVhbiB2YWxpZGF0ZSA9IChvcHRpb25zID09IG51bGwgfHwgIW9wdGlvbnMuaGFzT3B0aW9uKFhtbE9wdGlvbnMuQ09NUElMRV9OT19WQUxJREFUSU9OKSk7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0ZS5zZXRFcnJvckxpc3RlbmVyKGVycm9yV2F0Y2hlcik7Ci0gICAgICAgICAgICBzdGF0ZS5zZXRTY2hlbWFDb25maWcoU2NoZW1hQ29uZmlnLmZvckNvbmZpZ0RvY3VtZW50cyhjb25maWdzKSk7Ci0gICAgICAgICAgICBzdGF0ZS5zZXRPcHRpb25zKG9wdGlvbnMpOwotICAgICAgICAgICAgc3RhdGUuc2V0R2l2ZW5UeXBlU3lzdGVtTmFtZShuYW1lKTsKLSAgICAgICAgICAgIGlmIChiYXNlVVJJICE9IG51bGwpCi0gICAgICAgICAgICAgICAgc3RhdGUuc2V0QmFzZVVyaShiYXNlVVJJKTsKLQotICAgICAgICAgICAgLy8gY29uc3RydWN0IHRoZSBjbGFzc3BhdGggKHlvdSBhbHdheXMgZ2V0IHRoZSBidWlsdGluIHR5cGVzKQotICAgICAgICAgICAgbGlua1RvID0gU2NoZW1hVHlwZUxvYWRlckltcGwuYnVpbGQobmV3IFNjaGVtYVR5cGVMb2FkZXJbXSB7IEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLmdldCgpLCBsaW5rVG8gfSwgbnVsbCwgbnVsbCk7Ci0gICAgICAgICAgICBzdGF0ZS5zZXRJbXBvcnRpbmdUeXBlTG9hZGVyKGxpbmtUbyk7Ci0KLSAgICAgICAgICAgIExpc3QgdmFsaWRTY2hlbWFzID0gbmV3IEFycmF5TGlzdChzY2hlbWFzLmxlbmd0aCk7Ci0KLSAgICAgICAgICAgIC8vIGxvYWQgYWxsIHRoZSB4c2QgZmlsZXMgaW50byBpdAotICAgICAgICAgICAgaWYgKHZhbGlkYXRlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2NoZW1hcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWFzW2ldLnZhbGlkYXRlKG5ldyBYbWxPcHRpb25zKCkuc2V0RXJyb3JMaXN0ZW5lcihlcnJvcldhdGNoZXIpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkU2NoZW1hcy5hZGQoc2NoZW1hc1tpXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhbGlkU2NoZW1hcy5hZGRBbGwoQXJyYXlzLmFzTGlzdChzY2hlbWFzKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNjaGVtYVtdIHN0YXJ0V2l0aCA9IChTY2hlbWFbXSl2YWxpZFNjaGVtYXMudG9BcnJheShuZXcgU2NoZW1hW3ZhbGlkU2NoZW1hcy5zaXplKCldKTsKLQotICAgICAgICAgICAgLy8gZGVhbCB3aXRoIGltcG9ydHMgYW5kIGluY2x1ZGVzCi0gICAgICAgICAgICBTdHNjSW1wb3J0ZXIuU2NoZW1hVG9Qcm9jZXNzW10gc2NoZW1hc0FuZENoYW1lbGVvbnMgPSBTdHNjSW1wb3J0ZXIucmVzb2x2ZUltcG9ydHNBbmRJbmNsdWRlcyhzdGFydFdpdGgpOwotCi0gICAgICAgICAgICAvLyBjYWxsIHRoZSB0cmFuc2xhdG9yIHNvIHRoYXQgaXQgbWF5IGFsc28gcGVyZm9ybSBtYWdpYwotICAgICAgICAgICAgU3RzY1RyYW5zbGF0b3IuYWRkQWxsRGVmaW5pdGlvbnMoc2NoZW1hc0FuZENoYW1lbGVvbnMpOwotCi0gICAgICAgICAgICAvLyBjYWxsIHRoZSByZXNvbHZlciB0byBkbyBpdHMgbWFnaWMKLSAgICAgICAgICAgIFN0c2NSZXNvbHZlci5yZXNvbHZlQWxsKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIGNhbGwgdGhlIGNoZWNrZXIgdG8gY2hlY2sgYm90aCByZXN0cmljdGlvbnMgYW5kIGRlZmF1bHRzCi0gICAgICAgICAgICBTdHNjQ2hlY2tlci5jaGVja0FsbCgpOwotCi0gICAgICAgICAgICAvLyBjYWxsIHRoZSBqYXZhaXplciB0byBkbyBpdHMgbWFnaWMKLSAgICAgICAgICAgIFN0c2NKYXZhaXplci5qYXZhaXplQWxsVHlwZXMoamF2YWl6ZSk7Ci0KLSAgICAgICAgICAgIC8vIGNvbnN0cnVjdCB0aGUgbG9hZGVyIG91dCBvZiB0aGUgc3RhdGUKLSAgICAgICAgICAgIHN0YXRlLmdldCgpLnN0cygpLmxvYWRGcm9tU3RzY1N0YXRlKHN0YXRlKTsKLQotICAgICAgICAgICAgLy8gZmlsbCBpbiB0aGUgc291cmNlLWNvcHkgbWFwCi0gICAgICAgICAgICBpZiAoc291cmNlc1RvQ29weU1hcCAhPSBudWxsKQotICAgICAgICAgICAgICAgIHNvdXJjZXNUb0NvcHlNYXAucHV0QWxsKHN0YXRlLnNvdXJjZUNvcHlNYXAoKSk7Ci0KLSAgICAgICAgICAgIC8vIGlmIGFueSBlcnJvcnMsIHJldHVybiBudWxsCi0gICAgICAgICAgICBpZiAoZXJyb3JXYXRjaGVyLmhhc0Vycm9yKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgICAgIHJldHVybiBzdGF0ZS5nZXQoKS5zdHMoKTsKLSAgICAgICAgfQotICAgICAgICBmaW5hbGx5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFN0c2NTdGF0ZS5lbmQoKTsKLSAgICAgICAgfQotICAgIH0KLQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TY2hlbWFUeXBlU3lzdGVtSW1wbC5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU2NoZW1hVHlwZVN5c3RlbUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM0NTcyMy4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TY2hlbWFUeXBlU3lzdGVtSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzE2MCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zY2hlbWE7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uTmFtZVV0aWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5RTmFtZUhlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlhCZWFuRGVidWc7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5YbWxFcnJvcldhdGNoZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRGF0YUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRGF0YU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLio7Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBGaWxlOwotaW1wb3J0IGphdmEudXRpbC56aXAuWmlwRW50cnk7Ci1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5yZWdleC5SZWd1bGFyRXhwcmVzc2lvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudXRpbC5IZXhCaW47Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5YbWxPYmplY3RCYXNlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9uczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUdsb2JhbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hUGFydGljbGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFHbG9iYWxBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFNb2RlbEdyb3VwOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQXR0cmlidXRlR3JvdXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFBdHRyaWJ1dGVNb2RlbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQcm9wZXJ0eTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlFOYW1lU2V0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hTG9jYWxBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFMb2NhbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hU3RyaW5nRW51bUVudHJ5OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVN5c3RlbTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUlkZW50aXR5Q29uc3RyYWludDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNpbXBsZVZhbHVlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUZpZWxkOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuc29hcC5TT0FQQXJyYXlUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuc29hcC5TY2hlbWFXU0RMQXJyYXlUeXBlOwotaW1wb3J0IGNvbS5iZWEueDIwMDIueDA5LnhiZWFuLmNvbmZpZy5Db25maWdEb2N1bWVudC5Db25maWc7Ci1pbXBvcnQgY29tLmJlYS54MjAwMi54MDkueGJlYW4uY29uZmlnLkNvbmZpZ0RvY3VtZW50OwotaW1wb3J0IG9yZy53My54MjAwMS54bWxTY2hlbWEuU2NoZW1hRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczLngyMDAxLnhtbFNjaGVtYS5Hcm91cERvY3VtZW50OwotaW1wb3J0IG9yZy53My54MjAwMS54bWxTY2hlbWEuQXR0cmlidXRlR3JvdXBEb2N1bWVudDsKLWltcG9ydCBvcmcudzMueDIwMDEueG1sU2NoZW1hLlNjaGVtYURvY3VtZW50LlNjaGVtYTsKLQotcHVibGljIGNsYXNzIFNjaGVtYVR5cGVTeXN0ZW1JbXBsIGV4dGVuZHMgU2NoZW1hVHlwZUxvYWRlckJhc2UgaW1wbGVtZW50cyBTY2hlbWFUeXBlU3lzdGVtCi17Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgREFUQV9CQUJFID0gMHhEQTdBQkFCRTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQUpPUl9WRVJTSU9OID0gMjsgIC8vIG11c3QgbWF0Y2ggPT0gdG8gYmUgY29tcGF0aWJsZQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTk9SX1ZFUlNJT04gPSAxODsgLy8gbXVzdCBiZSA8PSB0byBiZSBjb21wYXRpYmxlCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgUkVMRUFTRV9OVU1CRVIgPSAwOyAvLyBzaG91bGQgYmUgY29tcGF0aWJsZSBldmVuIGlmIDwgb3IgPgotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRklMRVRZUEVfU0NIRU1BSU5ERVggPSAxOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZJTEVUWVBFX1NDSEVNQVRZUEUgPSAyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZJTEVUWVBFX1NDSEVNQUVMRU1FTlQgPSAzOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZJTEVUWVBFX1NDSEVNQUFUVFJJQlVURSA9IDQ7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRklMRVRZUEVfU0NIRU1BUE9JTlRFUiA9IDU7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRklMRVRZUEVfU0NIRU1BTU9ERUxHUk9VUCA9IDY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRklMRVRZUEVfU0NIRU1BQVRUUklCVVRFR1JPVVAgPSA3OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZJTEVUWVBFX1NDSEVNQUlERU5USVRZQ09OU1RSQUlOVCA9IDg7Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX1BBUlRfU0tJUFBBQkxFID0gMTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX1BBUlRfRklYRUQgPSA0OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfUEFSVF9OSUxMQUJMRSA9IDg7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19QQVJUX0JMT0NLRVhUID0gMTY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19QQVJUX0JMT0NLUkVTVCA9IDMyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfUEFSVF9CTE9DS1NVQlNUID0gNjQ7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19QQVJUX0FCU1RSQUNUID0gMTI4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfUEFSVF9GSU5BTEVYVCA9IDI1NjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX1BBUlRfRklOQUxSRVNUID0gNTEyOwotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19QUk9QX0lTQVRUUiA9IDE7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19QUk9QX0pBVkFTSU5HTEVUT04gPSAyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfUFJPUF9KQVZBT1BUSU9OQUwgPSA0OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfUFJPUF9KQVZBQVJSQVkgPSA4OwotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRklFTERfTk9ORSA9IDA7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRklFTERfR0xPQkFMID0gMTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGSUVMRF9MT0NBTEFUVFIgPSAyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZJRUxEX0xPQ0FMRUxUID0gMzsKLQotICAgIC8vIHR5cGUgZmxhZ3MKLSAgICBzdGF0aWMgZmluYWwgaW50IEZMQUdfU0lNUExFX1RZUEUgICAgID0gMHgxOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19ET0NVTUVOVF9UWVBFICAgPSAweDI7Ci0gICAgc3RhdGljIGZpbmFsIGludCBGTEFHX09SREVSRUQgICAgICAgICA9IDB4NDsKLSAgICBzdGF0aWMgZmluYWwgaW50IEZMQUdfQk9VTkRFRCAgICAgICAgID0gMHg4OwotICAgIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19GSU5JVEUgICAgICAgICAgPSAweDEwOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19OVU1FUklDICAgICAgICAgPSAweDIwOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19TVFJJTkdFTlVNICAgICAgPSAweDQwOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19VTklPTl9PRl9MSVNUUyAgPSAweDgwOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19IQVNfUEFUVEVSTiAgICAgPSAweDEwMDsKLSAgICBzdGF0aWMgZmluYWwgaW50IEZMQUdfT1JERVJfU0VOU0lUSVZFID0gMHgyMDA7Ci0gICAgc3RhdGljIGZpbmFsIGludCBGTEFHX1RPVEFMX09SREVSICAgICA9IDB4NDAwOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19DT01QSUxFRCAgICAgICAgPSAweDgwMDsKLSAgICBzdGF0aWMgZmluYWwgaW50IEZMQUdfQkxPQ0tfRVhUICAgICAgID0gMHgxMDAwOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19CTE9DS19SRVNUICAgICAgPSAweDIwMDA7Ci0gICAgc3RhdGljIGZpbmFsIGludCBGTEFHX0ZJTkFMX0VYVCAgICAgICA9IDB4NDAwMDsKLSAgICBzdGF0aWMgZmluYWwgaW50IEZMQUdfRklOQUxfUkVTVCAgICAgID0gMHg4MDAwOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19GSU5BTF9VTklPTiAgICAgPSAweDEwMDAwOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19GSU5BTF9MSVNUICAgICAgPSAweDIwMDAwOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19BQlNUUkFDVCAgICAgICAgPSAweDQwMDAwOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19BVFRSSUJVVEVfVFlQRSAgPSAweDgwMDAwOwotCi0KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgbmFtZVRvUGF0aFN0cmluZyhTdHJpbmcgbmFtZUZvclN5c3RlbSkKLSAgICB7Ci0gICAgICAgIG5hbWVGb3JTeXN0ZW0gPSBuYW1lRm9yU3lzdGVtLnJlcGxhY2UoJy4nLCAnLycpOwotCi0gICAgICAgIGlmICghbmFtZUZvclN5c3RlbS5lbmRzV2l0aCgiLyIpICYmIG5hbWVGb3JTeXN0ZW0ubGVuZ3RoKCkgPiAwKQotICAgICAgICAgICAgbmFtZUZvclN5c3RlbSA9IG5hbWVGb3JTeXN0ZW0gKyAiLyI7Ci0KLSAgICAgICAgcmV0dXJuIG5hbWVGb3JTeXN0ZW07Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGVTeXN0ZW1JbXBsKENsYXNzIGluZGV4Y2xhc3MpCi0gICAgewotICAgICAgICBTdHJpbmcgZnVsbG5hbWUgPSBpbmRleGNsYXNzLmdldE5hbWUoKTsKLSAgICAgICAgX25hbWUgPSBmdWxsbmFtZS5zdWJzdHJpbmcoMCwgZnVsbG5hbWUubGFzdEluZGV4T2YoJy4nKSk7Ci0gICAgICAgIFhCZWFuRGVidWcudHJhY2UoWEJlYW5EZWJ1Zy5UUkFDRV9TQ0hFTUFfTE9BRElORywgIkxvYWRpbmcgdHlwZSBzeXN0ZW0gIiArIF9uYW1lLCAxKTsKLSAgICAgICAgX2Jhc2VQYWNrYWdlID0gbmFtZVRvUGF0aFN0cmluZyhfbmFtZSk7Ci0gICAgICAgIF9jbGFzc2xvYWRlciA9IGluZGV4Y2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKTsKLSAgICAgICAgX2xpbmtlciA9IFNjaGVtYVR5cGVMb2FkZXJJbXBsLmJ1aWxkKG51bGwsIG51bGwsIF9jbGFzc2xvYWRlcik7Ci0gICAgICAgIF9yZXNvdXJjZUxvYWRlciA9IG5ldyBDbGFzc0xvYWRlclJlc291cmNlTG9hZGVyKF9jbGFzc2xvYWRlcik7Ci0gICAgICAgIGluaXRGcm9tSGVhZGVyKCk7Ci0gICAgICAgIFhCZWFuRGVidWcudHJhY2UoWEJlYW5EZWJ1Zy5UUkFDRV9TQ0hFTUFfTE9BRElORywgIkZpbmlzaGVkIGxvYWRpbmcgdHlwZSBzeXN0ZW0gIiArIF9uYW1lLCAtMSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU2NoZW1hW10gRU1QVFlfU0NIRU1BX0FSUkFZID0gbmV3IFNjaGVtYVswXTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBDb25maWdbXSBFTVBUWV9DT05GSUdfQVJSQVkgPSBuZXcgQ29uZmlnWzBdOwotCi0gICAgcHVibGljIHN0YXRpYyBTY2hlbWFUeXBlU3lzdGVtSW1wbCBmb3JTY2hlbWFYbWwoCi0gICAgICAgIFhtbE9iamVjdFtdIGlucHV0LCBTY2hlbWFUeXBlTG9hZGVyIGxpbmtUbywgWG1sT3B0aW9ucyBvcHRpb25zKQotICAgICAgICAgICAgdGhyb3dzIFhtbEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgb3B0aW9ucyA9IFhtbE9wdGlvbnMubWFza051bGwob3B0aW9ucyk7Ci0gICAgICAgIEFycmF5TGlzdCBzY2hlbWFzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBBcnJheUxpc3QgY29uZmlncyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaW5wdXRbaV0gaW5zdGFuY2VvZiBTY2hlbWEpCi0gICAgICAgICAgICAgICAgc2NoZW1hcy5hZGQoaW5wdXRbaV0pOwotICAgICAgICAgICAgZWxzZSBpZiAoaW5wdXRbaV0gaW5zdGFuY2VvZiBTY2hlbWFEb2N1bWVudCAmJiAoKFNjaGVtYURvY3VtZW50KWlucHV0W2ldKS5nZXRTY2hlbWEoKSAhPSBudWxsKQotICAgICAgICAgICAgICAgIHNjaGVtYXMuYWRkKCgoU2NoZW1hRG9jdW1lbnQpaW5wdXRbaV0pLmdldFNjaGVtYSgpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0W2ldIGluc3RhbmNlb2YgQ29uZmlnKQotICAgICAgICAgICAgICAgIGNvbmZpZ3MuYWRkKGlucHV0W2ldKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlucHV0W2ldIGluc3RhbmNlb2YgQ29uZmlnRG9jdW1lbnQgJiYgKChDb25maWdEb2N1bWVudClpbnB1dFtpXSkuZ2V0Q29uZmlnKCkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBjb25maWdzLmFkZCgoKENvbmZpZ0RvY3VtZW50KWlucHV0W2ldKS5nZXRDb25maWcoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFhtbEV4Y2VwdGlvbigiVGhyZWFkICIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldE5hbWUoKSArICAiOiBUaGUgIiArIGkgKyAidGggc3VwcGxpZWQgaW5wdXQgaXMgbm90IGEgc2NoZW1hIG9yIGEgY29uZmlnIGRvY3VtZW50OiBpdHMgdHlwZSBpcyAiICsgaW5wdXRbaV0uc2NoZW1hVHlwZSgpKTsKLSAgICAgICAgfQotCi0KLQotICAgICAgICBDb2xsZWN0aW9uIHVzZXJFcnJvcnMgPSAoQ29sbGVjdGlvbilvcHRpb25zLmdldChYbWxPcHRpb25zLkVSUk9SX0xJU1RFTkVSKTsKLSAgICAgICAgWG1sRXJyb3JXYXRjaGVyIGVycm9yV2F0Y2hlciA9IG5ldyBYbWxFcnJvcldhdGNoZXIodXNlckVycm9ycyk7Ci0KLSAgICAgICAgU2NoZW1hVHlwZVN5c3RlbUltcGwgc3RzaSA9Ci0gICAgICAgICAgICBTY2hlbWFUeXBlU3lzdGVtQ29tcGlsZXIuY29tcGlsZUltcGwoCi0gICAgICAgICAgICAgICAgbnVsbCwgKFNjaGVtYVtdKXNjaGVtYXMudG9BcnJheShFTVBUWV9TQ0hFTUFfQVJSQVkpLAotICAgICAgICAgICAgICAgIChDb25maWdbXSljb25maWdzLnRvQXJyYXkoRU1QVFlfQ09ORklHX0FSUkFZKSwgbGlua1RvLCBvcHRpb25zLCBlcnJvcldhdGNoZXIsIGZhbHNlLCBudWxsLCBudWxsKTsKLQotICAgICAgICBpZiAoZXJyb3JXYXRjaGVyLmhhc0Vycm9yKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBYbWxFeGNlcHRpb24oZXJyb3JXYXRjaGVyLmZpcnN0RXJyb3IoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gc3RzaTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZmlsZUNvbnRhaW5zVHlwZVN5c3RlbShGaWxlIGZpbGUsIFN0cmluZyBuYW1lKQotICAgIHsKLSAgICAgICAgU3RyaW5nIGluZGV4bmFtZSA9IG5hbWVUb1BhdGhTdHJpbmcobmFtZSkgKyAiaW5kZXgueHNiIjsKLQotICAgICAgICBpZiAoZmlsZS5pc0RpcmVjdG9yeSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKG5ldyBGaWxlKGZpbGUsIGluZGV4bmFtZSkpLmlzRmlsZSgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgWmlwRmlsZSB6aXBmaWxlID0gbnVsbDsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHppcGZpbGUgPSBuZXcgWmlwRmlsZShmaWxlKTsKLSAgICAgICAgICAgICAgICBaaXBFbnRyeSBlbnRyeSA9IHppcGZpbGUuZ2V0RW50cnkoaW5kZXhuYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKGVudHJ5ICE9IG51bGwgJiYgIWVudHJ5LmlzRGlyZWN0b3J5KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgWEJlYW5EZWJ1Zy5sb2coIlByb2JsZW0gbG9hZGluZyBTY2hlbWFUeXBlU3lzdGVtLCB6aXBmaWxlbmFtZSAiICsgZmlsZSk7Ci0gICAgICAgICAgICAgICAgWEJlYW5EZWJ1Zy5sb2dFeGNlcHRpb24oZSk7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIG5hbWUsICJpbmRleCIsIFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uSU9fRVhDRVBUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbmFsbHkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoemlwZmlsZSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICB0cnkgeyB6aXBmaWxlLmNsb3NlKCk7IH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFNjaGVtYVR5cGVTeXN0ZW1JbXBsIGZvck5hbWUoU3RyaW5nIG5hbWUsIENsYXNzTG9hZGVyIGxvYWRlcikKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBDbGFzcyBjID0gQ2xhc3MuZm9yTmFtZShuYW1lICsgIi4iICsgU2NoZW1hVHlwZUNvZGVQcmludGVyLklOREVYX0NMQVNTTkFNRSwgdHJ1ZSwgbG9hZGVyKTsKLSAgICAgICAgICAgIHJldHVybiAoU2NoZW1hVHlwZVN5c3RlbUltcGwpYy5nZXRGaWVsZCgidHlwZVN5c3RlbSIpLmdldChudWxsKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGVTeXN0ZW1JbXBsKFJlc291cmNlTG9hZGVyIHJlc291cmNlTG9hZGVyLCBTdHJpbmcgbmFtZSwgU2NoZW1hVHlwZUxvYWRlciBsaW5rZXIpCi0gICAgewotICAgICAgICBfbmFtZSA9IG5hbWU7Ci0gICAgICAgIF9iYXNlUGFja2FnZSA9IG5hbWVUb1BhdGhTdHJpbmcoX25hbWUpOwotICAgICAgICBfbGlua2VyID0gbGlua2VyOwotICAgICAgICBfcmVzb3VyY2VMb2FkZXIgPSByZXNvdXJjZUxvYWRlcjsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGluaXRGcm9tSGVhZGVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgWEJlYW5EZWJ1Zy5sb2dFeGNlcHRpb24oZSk7Ci0gICAgICAgICAgICB0aHJvdyBlOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFcnJvciBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBYQmVhbkRlYnVnLmxvZ0V4Y2VwdGlvbihlKTsKLSAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5pdEZyb21IZWFkZXIoKQotICAgIHsKLSAgICAgICAgWEJlYW5EZWJ1Zy50cmFjZShYQmVhbkRlYnVnLlRSQUNFX1NDSEVNQV9MT0FESU5HLCAiUmVhZGluZyB1bnJlc29sdmVkIGhhbmRsZXMgZm9yIHR5cGUgc3lzdGVtICIgKyBfbmFtZSwgMCk7Ci0gICAgICAgIFhzYlJlYWRlciByZWFkZXIgPSBudWxsOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gUmVhZCB0aGUgaW5kZXggZmlsZSwgd2hpY2ggc3RhcnRzIHdpdGggYSBoZWFkZXIuCi0gICAgICAgICAgICByZWFkZXIgPSBuZXcgWHNiUmVhZGVyKCJpbmRleCIsIEZJTEVUWVBFX1NDSEVNQUlOREVYKTsKLQotICAgICAgICAgICAgLy8gaGFzIGEgaGFuZGxlIHBvb2wgKGNvdW50LCBoYW5kbGUvdHlwZSwgaGFuZGxlL3R5cGUuLi4pCi0gICAgICAgICAgICBfbG9jYWxIYW5kbGVzID0gbmV3IEhhbmRsZVBvb2woKTsKLSAgICAgICAgICAgIHJlYWRlci5yZWFkSGFuZGxlUG9vbChfbG9jYWxIYW5kbGVzKTsKLQotICAgICAgICAgICAgLy8gdGhlbiBhIHFuYW1lIG1hcCBvZiBnbG9iYWwgZWxlbWVudHMgKGNvdW50LCBxbmFtZS9oYW5kbGUsIHFuYW1lL2hhbmRsZS4uLikKLSAgICAgICAgICAgIF9nbG9iYWxFbGVtZW50cyA9IHJlYWRlci5yZWFkUU5hbWVSZWZNYXAoKTsKLQotICAgICAgICAgICAgLy8gcW5hbWUgbWFwIG9mIGdsb2JhbCBhdHRyaWJ1dGVzCi0gICAgICAgICAgICBfZ2xvYmFsQXR0cmlidXRlcyA9IHJlYWRlci5yZWFkUU5hbWVSZWZNYXAoKTsKLQotICAgICAgICAgICAgLy8gcW5hbWUgbWFwIG9mIG1vZGVsIGdyb3VwcwotICAgICAgICAgICAgX21vZGVsR3JvdXBzID0gcmVhZGVyLnJlYWRRTmFtZVJlZk1hcCgpOwotCi0gICAgICAgICAgICAvLyBxbmFtZSBtYXAgb2YgYXR0cmlidXRlIGdyb3VwcwotICAgICAgICAgICAgX2F0dHJpYnV0ZUdyb3VwcyA9IHJlYWRlci5yZWFkUU5hbWVSZWZNYXAoKTsKLQotICAgICAgICAgICAgX2lkZW50aXR5Q29uc3RyYWludHMgPSByZWFkZXIucmVhZFFOYW1lUmVmTWFwKCk7Ci0KLSAgICAgICAgICAgIC8vIHFuYW1lIG1hcCBvZiBnbG9iYWwgdHlwZXMKLSAgICAgICAgICAgIF9nbG9iYWxUeXBlcyA9IHJlYWRlci5yZWFkUU5hbWVSZWZNYXAoKTsKLQotICAgICAgICAgICAgLy8gcW5hbWUgbWFwIG9mIGRvY3VtZW50IHR5cGVzLCBieSB0aGUgcW5hbWUgb2YgdGhlIGNvbnRhaW5lZCBlbGVtZW50Ci0gICAgICAgICAgICBfZG9jdW1lbnRUeXBlcyA9IHJlYWRlci5yZWFkUU5hbWVSZWZNYXAoKTsKLQotICAgICAgICAgICAgLy8gcW5hbWUgbWFwZSBvZiBhdHRyaWJ1dGUgdHlwZXMsIGJ5IHRoZSBxbmFtZSBvZiB0aGUgY29udGFpbmVkIGF0dHJpYnV0ZQotICAgICAgICAgICAgX2F0dHJpYnV0ZVR5cGVzID0gcmVhZGVyLnJlYWRRTmFtZVJlZk1hcCgpOwotCi0gICAgICAgICAgICAvLyBzdHJpbmcgbWFwIG9mIGFsbCB0eXBlcywgYnkgZnVsbHkgcXVhbGlmaWVkIGNsYXNzbmFtZQotICAgICAgICAgICAgX3R5cGVSZWZzQnlDbGFzc25hbWUgPSByZWFkZXIucmVhZENsYXNzbmFtZVJlZk1hcCgpOwotCi0gICAgICAgICAgICBfbmFtZXNwYWNlcyA9IHJlYWRlci5yZWFkTmFtZXNwYWNlcygpOwotCi0gICAgICAgICAgICAvLyBzdXBwb3J0IGZvciByZWRlZmluZSwgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZQotICAgICAgICAgICAgaWYgKHJlYWRlci5hdExlYXN0KDIsIDE1LCAwKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfcmVkZWZpbmVkR2xvYmFsVHlwZXMgPSByZWFkZXIucmVhZFFOYW1lUmVmTWFwKCk7Ci0gICAgICAgICAgICAgICAgX3JlZGVmaW5lZE1vZGVsR3JvdXBzID0gcmVhZGVyLnJlYWRRTmFtZVJlZk1hcCgpOwotICAgICAgICAgICAgICAgIF9yZWRlZmluZWRBdHRyaWJ1dGVHcm91cHMgPSByZWFkZXIucmVhZFFOYW1lUmVmTWFwKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWxseQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocmVhZGVyICE9IG51bGwpCi0gICAgICAgICAgICAgICAgcmVhZGVyLnJlYWRFbmQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgc2F2ZUluZGV4KCkKLSAgICB7Ci0gICAgICAgIFN0cmluZyBoYW5kbGUgPSAiaW5kZXgiOwotICAgICAgICBYc2JSZWFkZXIgc2F2ZXIgPSBuZXcgWHNiUmVhZGVyKGhhbmRsZSk7Ci0gICAgICAgIHNhdmVyLndyaXRlSW5kZXhEYXRhKCk7Ci0gICAgICAgIHNhdmVyLndyaXRlUmVhbEhlYWRlcihoYW5kbGUsIEZJTEVUWVBFX1NDSEVNQUlOREVYKTsKLSAgICAgICAgc2F2ZXIud3JpdGVJbmRleERhdGEoKTsKLSAgICAgICAgc2F2ZXIud3JpdGVFbmQoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNhdmVQb2ludGVycygpCi0gICAgewotICAgICAgICBzYXZlUG9pbnRlcnNGb3JDb21wb25lbnRzKGdsb2JhbEVsZW1lbnRzKCksICJzY2hlbWEvZWxlbWVudC8iKTsKLSAgICAgICAgc2F2ZVBvaW50ZXJzRm9yQ29tcG9uZW50cyhnbG9iYWxBdHRyaWJ1dGVzKCksICJzY2hlbWEvYXR0cmlidXRlLyIpOwotICAgICAgICBzYXZlUG9pbnRlcnNGb3JDb21wb25lbnRzKG1vZGVsR3JvdXBzKCksICJzY2hlbWEvbW9kZWxncm91cC8iKTsKLSAgICAgICAgc2F2ZVBvaW50ZXJzRm9yQ29tcG9uZW50cyhhdHRyaWJ1dGVHcm91cHMoKSwgInNjaGVtYS9hdHRyaWJ1dGVncm91cC8iKTsKLSAgICAgICAgc2F2ZVBvaW50ZXJzRm9yQ29tcG9uZW50cyhnbG9iYWxUeXBlcygpLCAic2NoZW1hL3R5cGUvIik7Ci0gICAgICAgIHNhdmVQb2ludGVyc0ZvckNvbXBvbmVudHMoaWRlbnRpdHlDb25zdHJhaW50cygpLCAic2NoZW1hL2lkZW50aXR5Y29uc3RyYWludC8iKTsKLSAgICAgICAgc2F2ZVBvaW50ZXJzRm9yTmFtZXNwYWNlcyhfbmFtZXNwYWNlcywgInNjaGVtYS9uYW1lc3BhY2UvIik7Ci0gICAgICAgIHNhdmVQb2ludGVyc0ZvckNsYXNzbmFtZXMoX3R5cGVSZWZzQnlDbGFzc25hbWUua2V5U2V0KCksICJzY2hlbWEvamF2YW5hbWUvIik7Ci0gICAgICAgIHNhdmVQb2ludGVyc0ZvckNvbXBvbmVudHMocmVkZWZpbmVkTW9kZWxHcm91cHMoKSwgInNjaGVtYS9yZWRlZmluZWRtb2RlbGdyb3VwLyIpOwotICAgICAgICBzYXZlUG9pbnRlcnNGb3JDb21wb25lbnRzKHJlZGVmaW5lZEF0dHJpYnV0ZUdyb3VwcygpLCAic2NoZW1hL3JlZGVmaW5lZGF0dHJpYnV0ZWdyb3VwLyIpOwotICAgICAgICBzYXZlUG9pbnRlcnNGb3JDb21wb25lbnRzKHJlZGVmaW5lZEdsb2JhbFR5cGVzKCksICJzY2hlbWEvcmVkZWZpbmVkdHlwZS8iKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNhdmVQb2ludGVyc0ZvckNvbXBvbmVudHMoU2NoZW1hQ29tcG9uZW50W10gY29tcG9uZW50cywgU3RyaW5nIGRpcikKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29tcG9uZW50cy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgc2F2ZVBvaW50ZXJGaWxlKGRpciArIFFOYW1lSGVscGVyLmhleHNhZmVkaXIoY29tcG9uZW50c1tpXS5nZXROYW1lKCkpLCBfbmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIHNhdmVQb2ludGVyc0ZvckNsYXNzbmFtZXMoU2V0IGNsYXNzbmFtZXMsIFN0cmluZyBkaXIpCi0gICAgewotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBjbGFzc25hbWVzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBjbGFzc25hbWUgPSAoU3RyaW5nKWkubmV4dCgpOwotICAgICAgICAgICAgc2F2ZVBvaW50ZXJGaWxlKGRpciArIGNsYXNzbmFtZS5yZXBsYWNlKCcuJywgJy8nKSwgX25hbWUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBzYXZlUG9pbnRlcnNGb3JOYW1lc3BhY2VzKFNldCBuYW1lc3BhY2VzLCBTdHJpbmcgZGlyKQotICAgIHsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gbmFtZXNwYWNlcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgbnMgPSAoU3RyaW5nKWkubmV4dCgpOwotICAgICAgICAgICAgc2F2ZVBvaW50ZXJGaWxlKGRpciArIFFOYW1lSGVscGVyLmhleHNhZmVkaXIobmV3IFFOYW1lKG5zLCAieG1sbnMiKSksIF9uYW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgc2F2ZVBvaW50ZXJGaWxlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIG5hbWUpCi0gICAgewotICAgICAgICBYc2JSZWFkZXIgc2F2ZXIgPSBuZXcgWHNiUmVhZGVyKGZpbGVuYW1lKTsKLSAgICAgICAgc2F2ZXIud3JpdGVTdHJpbmcobmFtZSk7Ci0gICAgICAgIHNhdmVyLndyaXRlUmVhbEhlYWRlcihmaWxlbmFtZSwgRklMRVRZUEVfU0NIRU1BUE9JTlRFUik7Ci0gICAgICAgIHNhdmVyLndyaXRlU3RyaW5nKG5hbWUpOwotICAgICAgICBzYXZlci53cml0ZUVuZCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIE9ubHkgdXNlZCBpbiB0aGUgbm9uYm9vdHN0cmFwcGVkIGNhc2UuCi0gICAgICovCi0gICAgcHJpdmF0ZSBNYXAgYnVpbGRUeXBlUmVmc0J5Q2xhc3NuYW1lKCkKLSAgICB7Ci0gICAgICAgIExpc3QgYWxsU2VlblR5cGVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBNYXAgcmVzdWx0ID0gbmV3IExpbmtlZEhhc2hNYXAoKTsKLSAgICAgICAgYWxsU2VlblR5cGVzLmFkZEFsbChBcnJheXMuYXNMaXN0KGRvY3VtZW50VHlwZXMoKSkpOwotICAgICAgICBhbGxTZWVuVHlwZXMuYWRkQWxsKEFycmF5cy5hc0xpc3QoYXR0cmlidXRlVHlwZXMoKSkpOwotICAgICAgICBhbGxTZWVuVHlwZXMuYWRkQWxsKEFycmF5cy5hc0xpc3QoZ2xvYmFsVHlwZXMoKSkpOwotCi0gICAgICAgIC8vIG5vdyBmdWxseSBqYXZhaXplIGV2ZXJ5dGhpbmcgZGVlcGx5LgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFsbFNlZW5UeXBlcy5zaXplKCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgU2NoZW1hVHlwZSBnVHlwZSA9IChTY2hlbWFUeXBlKWFsbFNlZW5UeXBlcy5nZXQoaSk7Ci0gICAgICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gZ1R5cGUuZ2V0RnVsbEphdmFOYW1lKCk7Ci0gICAgICAgICAgICBpZiAoY2xhc3NOYW1lICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnB1dChjbGFzc05hbWUucmVwbGFjZSgnJCcsICcuJyksIGdUeXBlLmdldFJlZigpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFsbFNlZW5UeXBlcy5hZGRBbGwoQXJyYXlzLmFzTGlzdChnVHlwZS5nZXRBbm9ueW1vdXNUeXBlcygpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIE1hcCBidWlsZFR5cGVSZWZzQnlDbGFzc25hbWUoTWFwIHR5cGVzQnlDbGFzc25hbWUpCi0gICAgewotICAgICAgICBNYXAgcmVzdWx0ID0gbmV3IExpbmtlZEhhc2hNYXAoKTsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gdHlwZXNCeUNsYXNzbmFtZS5rZXlTZXQoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gKFN0cmluZylpLm5leHQoKTsKLSAgICAgICAgICAgIHJlc3VsdC5wdXQoY2xhc3NOYW1lLCAoKFNjaGVtYVR5cGUpdHlwZXNCeUNsYXNzbmFtZS5nZXQoY2xhc3NOYW1lKSkuZ2V0UmVmKCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgTWFwIGJ1aWxkQ29tcG9uZW50UmVmTWFwKFNjaGVtYUNvbXBvbmVudFtdIGNvbXBvbmVudHMpCi0gICAgewotICAgICAgICBNYXAgcmVzdWx0ID0gbmV3IExpbmtlZEhhc2hNYXAoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb21wb25lbnRzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgcmVzdWx0LnB1dChjb21wb25lbnRzW2ldLmdldE5hbWUoKSwgY29tcG9uZW50c1tpXS5nZXRDb21wb25lbnRSZWYoKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgTWFwIGJ1aWxkRG9jdW1lbnRNYXAoU2NoZW1hVHlwZVtdIHR5cGVzKQotICAgIHsKLSAgICAgICAgTWFwIHJlc3VsdCA9IG5ldyBMaW5rZWRIYXNoTWFwKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICByZXN1bHQucHV0KHR5cGVzW2ldLmdldERvY3VtZW50RWxlbWVudE5hbWUoKSwgdHlwZXNbaV0uZ2V0UmVmKCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIE1hcCBidWlsZEF0dHJpYnV0ZVR5cGVNYXAoU2NoZW1hVHlwZVtdIHR5cGVzKQotICAgIHsKLSAgICAgICAgTWFwIHJlc3VsdCA9IG5ldyBMaW5rZWRIYXNoTWFwKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICByZXN1bHQucHV0KHR5cGVzW2ldLmdldEF0dHJpYnV0ZVR5cGVBdHRyaWJ1dGVOYW1lKCksIHR5cGVzW2ldLmdldFJlZigpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBSYW5kb20gX3JhbmRvbTsKLSAgICBwcml2YXRlIHN0YXRpYyBieXRlW10gX21hc2sgPSBuZXcgYnl0ZVsxMjggLyA4XTsKLQotICAgIC8qKgotICAgICAqIEZ1biwgZnVuLiAgUHJvZHVjZSAxMjggYml0cyBvZiB1bmlxdWVuZXNzIHJhbmRvbWx5LgotICAgICAqIFdlIHVzZWQgdG8gdXNlIFNlY3VyZVJhbmRvbSwgYnV0IG5vdyB3ZSBkb24ndCBiZWNhdXNlIFNlY3VyZVJhbmRvbQotICAgICAqIGhpdHMgdGhlIGZpbGVzeXN0ZW0gYW5kIGhhbmdzIHVzIG9uIGEgZmlsZXN5c3RlbSBsb2NrLiAgSXQgYWxzbyBlYXRzCi0gICAgICogYSB0aHJlYWQgYW5kIG90aGVyIGV4cGVuc2l2ZSByZXNvdXJjZXMuLiA6LSkuCi0gICAgICoKLSAgICAgKiBXZSBkb24ndCByZWFsbHkgY2FyZSB0aGF0IG5vbi1zZWN1cmUgUmFuZG9tKCkgY2FuIG9ubHkgZG8gNDggYml0cyBvZgotICAgICAqIHJhbmRvbW5lc3MsIHNpbmNlIHdlJ3JlIGNlcnRhaW5seSBub3QgZ29pbmcgdG8gYmUgY2FsbGVkIG1vcmUgdGhhbiAyXjQ4Ci0gICAgICogdGltZXMgd2l0aGluIG91ciBwcm9jZXNzIGxpZmV0aW1lLgotICAgICAqCi0gICAgICogT3VyIHJlYWwgY29uY2VybiBpcyB0aGF0IGJ5IHNlZWRpbmcgUmFuZG9tKCkgd2l0aCB0aGUgY3VycmVudAotICAgICAqIHRpbWUsIHR3byB1c2VycyB3aWxsIGVuZCB1cCB3aXRoIHRoZSBzYW1lIGJpdHMgaWYgdGhleSBzdGFydCBhCi0gICAgICogc2NoZW1hIGNvbXBpbGF0aW9uIHdpdGhpbiB0aGUgc2FtZSBtaWxsaXNlY29uZC4gIFRoYXQgbWFrZXMgdGhlCi0gICAgICogcHJvYmFiaWxpdHkgb2YgY29sbGlzaW9uIGluIHRoZSByZWFsIHdvcmxkIHNsaWdodGx5IHRvbyBoaWdoLgotICAgICAqIFdlJ3JlIGdvaW5nIHRvIGhhdmUgbWlsbGlvbnMgb2YgdXNlcnMsIHJlbWVtYmVyPyAgV2l0aCBhIG1pbGxpb24KLSAgICAgKiB1c2VycywgYW5kIG9uZS1jb21waWxhdGlvbi1wZXItZGF5IGVhY2gsIHdlJ2Qgc2VlIGEgY29sbGlzaW9uIGV2ZXJ5Ci0gICAgICogZmV3IG1vbnRocy4KLSAgICAgKgotICAgICAqIFNvIHdlJ2xsIGp1c3QgeG9yIHRoZSByZXN1bHRzIG9mIHJhbmRvbSB3aXRoIG91ciBmZXcgZXh0cmEKLSAgICAgKiBiaXRzIG9mIGluZm9ybWF0aW9uIGNvbXB1dGVkIGJlbG93IHRvIGhlbHAgcmVkdWNlIHRoZSBwcm9iYWJpbGl0eQotICAgICAqIG9mIGNvbGxpc2lvbiBieSBhIGZldyBkZWNpbWFsIHBsYWNlcy4gIFRvIGNvbGxpZGUsIHlvdSB3aWxsIGhhdmUgaGFkCi0gICAgICogdG8gaGF2ZSB0aGUgc2FtZSBhbW91bnQgb2YgZnJlZSBtZW1vcnksIHRoZSBzYW1lIHVzZXIgbmFtZSwgdGltZXpvbmUsCi0gICAgICogYW5kIGNvdW50cnksIHRoZSBzYW1lIGN1cnJlbnQgZGlyZWN0b3J5LCB0aGUgc2FtZSBqYXZhIGNsYXNzcGF0aCwKLSAgICAgKiB0aGUgc2FtZSBvcGVyYXRpbmcgc3lzdGVtIGFuZCBqdm0gdmVyc2lvbiwgYW5kIHRoZSBzYW1lIGNob2ljZXMgb2YKLSAgICAgKiBpZGVudGl0eSBoYXNoY29kZXMgZm9yIGEgZmV3IG9iamVjdHMuIEFuZCBiZSBzdGFydGVkIHdpdGhpbiB0aGUgc2FtZQotICAgICAqIG1pbGxpc2Vjb25kLiBPciB5b3UgY2FuIGNvbGxpZGUgaWYgeW91IGhhdmUgYSBjb3NtaWMgMTI4LWJpdCBtYXRoZW1hdGljYWwKLSAgICAgKiBjb2luY2lkZW5jZS4gTm8gd29ycmllcy4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBuZXh0Qnl0ZXMoYnl0ZVtdIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIGlmIChfcmFuZG9tID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBiYW9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotICAgICAgICAgICAgICAgIERhdGFPdXRwdXRTdHJlYW0gZGFvcyA9IG5ldyBEYXRhT3V0cHV0U3RyZWFtKGJhb3MpOwotCi0gICAgICAgICAgICAgICAgLy8gYXQgbGVhc3QgMTAgYml0cyBvZiB1bnFpZXVlbmVzcywgcmlnaHQ/ICBNYXliZSBldmVuIDUwIG9yIDYwLgotICAgICAgICAgICAgICAgIGRhb3Mud3JpdGVJbnQoU3lzdGVtLmlkZW50aXR5SGFzaENvZGUoU2NoZW1hVHlwZVN5c3RlbUltcGwuY2xhc3MpKTsKLSAgICAgICAgICAgICAgICBTdHJpbmdbXSBwcm9wcyA9IG5ldyBTdHJpbmdbXSB7ICJ1c2VyLm5hbWUiLCAidXNlci5kaXIiLCAidXNlci50aW1lem9uZSIsICJ1c2VyLmNvdW50cnkiLCAiamF2YS5jbGFzcy5wYXRoIiwgImphdmEuaG9tZSIsICJqYXZhLnZlbmRvciIsICJqYXZhLnZlcnNpb24iLCAib3MudmVyc2lvbiIgfTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHByb3AgPSBTeXN0ZW0uZ2V0UHJvcGVydHkocHJvcHNbaV0pOwotICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYW9zLndyaXRlVVRGKHByb3ApOwotICAgICAgICAgICAgICAgICAgICAgICAgZGFvcy53cml0ZUludChTeXN0ZW0uaWRlbnRpdHlIYXNoQ29kZShwcm9wKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGFvcy53cml0ZUxvbmcoUnVudGltZS5nZXRSdW50aW1lKCkuZnJlZU1lbW9yeSgpKTsKLSAgICAgICAgICAgICAgICBkYW9zLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgYnl0ZVtdIGJ5dGVzID0gYmFvcy50b0J5dGVBcnJheSgpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbnQgaiA9IGkgJSBfbWFzay5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIF9tYXNrW2pdICo9IDIxOwotICAgICAgICAgICAgICAgICAgICBfbWFza1tqXSArPSBpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFhCZWFuRGVidWcubG9nRXhjZXB0aW9uKGUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBfcmFuZG9tID0gbmV3IFJhbmRvbShTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgX3JhbmRvbS5uZXh0Qnl0ZXMocmVzdWx0KTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBqID0gaSAmIF9tYXNrLmxlbmd0aDsKLSAgICAgICAgICAgIHJlc3VsdFtpXSBePSBfbWFza1tqXTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFUeXBlU3lzdGVtSW1wbChTdHJpbmcgbmFtZUZvclN5c3RlbSkKLSAgICB7Ci0gICAgICAgIC8vIGlmIHdlIGhhdmUgbm8gbmFtZSwgc2VsZWN0IGEgcmFuZG9tIG9uZQotICAgICAgICBpZiAobmFtZUZvclN5c3RlbSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBnZXQgMTI4IHJhbmRvbSBiaXRzICh0aGF0J2xsIGJlIDMyIGhleCBkaWdpdHMpCi0gICAgICAgICAgICBieXRlW10gYnl0ZXMgPSBuZXcgYnl0ZVsxMjgvOF07Ci0gICAgICAgICAgICBuZXh0Qnl0ZXMoYnl0ZXMpOwotICAgICAgICAgICAgbmFtZUZvclN5c3RlbSA9ICJzIiArIG5ldyBTdHJpbmcoSGV4QmluLmVuY29kZShieXRlcykpOwotICAgICAgICB9Ci0KLSAgICAgICAgX25hbWUgPSAic2NoZW1hLnN5c3RlbS4iICsgbmFtZUZvclN5c3RlbTsKLSAgICAgICAgX2Jhc2VQYWNrYWdlID0gbmFtZVRvUGF0aFN0cmluZyhfbmFtZSk7Ci0gICAgICAgIF9jbGFzc2xvYWRlciA9IG51bGw7Ci0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBsb2FkRnJvbUJ1aWxkZXIoU2NoZW1hR2xvYmFsRWxlbWVudFtdIGdsb2JhbEVsZW1lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY2hlbWFHbG9iYWxBdHRyaWJ1dGVbXSBnbG9iYWxBdHRyaWJ1dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY2hlbWFUeXBlW10gZ2xvYmFsVHlwZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjaGVtYVR5cGVbXSBkb2N1bWVudFR5cGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY2hlbWFUeXBlW10gYXR0cmlidXRlVHlwZXMpCi0gICAgewotICAgICAgICBhc3NlcnQoX2NsYXNzbG9hZGVyID09IG51bGwpOwotICAgICAgICBfbG9jYWxIYW5kbGVzID0gbmV3IEhhbmRsZVBvb2woKTsKLSAgICAgICAgX2dsb2JhbEVsZW1lbnRzID0gYnVpbGRDb21wb25lbnRSZWZNYXAoZ2xvYmFsRWxlbWVudHMpOwotICAgICAgICBfZ2xvYmFsQXR0cmlidXRlcyA9IGJ1aWxkQ29tcG9uZW50UmVmTWFwKGdsb2JhbEF0dHJpYnV0ZXMpOwotICAgICAgICBfZ2xvYmFsVHlwZXMgPSBidWlsZENvbXBvbmVudFJlZk1hcChnbG9iYWxUeXBlcyk7Ci0gICAgICAgIF9kb2N1bWVudFR5cGVzID0gYnVpbGREb2N1bWVudE1hcChkb2N1bWVudFR5cGVzKTsKLSAgICAgICAgX2F0dHJpYnV0ZVR5cGVzID0gYnVpbGREb2N1bWVudE1hcChhdHRyaWJ1dGVUeXBlcyk7Ci0gICAgICAgIF90eXBlUmVmc0J5Q2xhc3NuYW1lID0gYnVpbGRUeXBlUmVmc0J5Q2xhc3NuYW1lKCk7Ci0gICAgICAgIF9uYW1lc3BhY2VzID0gbmV3IEhhc2hTZXQoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBsb2FkRnJvbVN0c2NTdGF0ZShTdHNjU3RhdGUgc3RhdGUpCi0gICAgewotICAgICAgICBhc3NlcnQoX2NsYXNzbG9hZGVyID09IG51bGwpOwotICAgICAgICBfbG9jYWxIYW5kbGVzID0gbmV3IEhhbmRsZVBvb2woKTsKLSAgICAgICAgX2dsb2JhbEVsZW1lbnRzID0gYnVpbGRDb21wb25lbnRSZWZNYXAoc3RhdGUuZ2xvYmFsRWxlbWVudHMoKSk7Ci0gICAgICAgIF9nbG9iYWxBdHRyaWJ1dGVzID0gYnVpbGRDb21wb25lbnRSZWZNYXAoc3RhdGUuZ2xvYmFsQXR0cmlidXRlcygpKTsKLSAgICAgICAgX21vZGVsR3JvdXBzID0gYnVpbGRDb21wb25lbnRSZWZNYXAoc3RhdGUubW9kZWxHcm91cHMoKSk7Ci0gICAgICAgIF9yZWRlZmluZWRNb2RlbEdyb3VwcyA9IGJ1aWxkQ29tcG9uZW50UmVmTWFwKHN0YXRlLnJlZGVmaW5lZE1vZGVsR3JvdXBzKCkpOwotICAgICAgICBfYXR0cmlidXRlR3JvdXBzID0gYnVpbGRDb21wb25lbnRSZWZNYXAoc3RhdGUuYXR0cmlidXRlR3JvdXBzKCkpOwotICAgICAgICBfcmVkZWZpbmVkQXR0cmlidXRlR3JvdXBzID0gYnVpbGRDb21wb25lbnRSZWZNYXAoc3RhdGUucmVkZWZpbmVkQXR0cmlidXRlR3JvdXBzKCkpOwotICAgICAgICBfZ2xvYmFsVHlwZXMgPSBidWlsZENvbXBvbmVudFJlZk1hcChzdGF0ZS5nbG9iYWxUeXBlcygpKTsKLSAgICAgICAgX3JlZGVmaW5lZEdsb2JhbFR5cGVzID0gYnVpbGRDb21wb25lbnRSZWZNYXAoc3RhdGUucmVkZWZpbmVkR2xvYmFsVHlwZXMoKSk7Ci0gICAgICAgIF9kb2N1bWVudFR5cGVzID0gYnVpbGREb2N1bWVudE1hcChzdGF0ZS5kb2N1bWVudFR5cGVzKCkpOwotICAgICAgICBfYXR0cmlidXRlVHlwZXMgPSBidWlsZEF0dHJpYnV0ZVR5cGVNYXAoc3RhdGUuYXR0cmlidXRlVHlwZXMoKSk7Ci0gICAgICAgIF90eXBlUmVmc0J5Q2xhc3NuYW1lID0gYnVpbGRUeXBlUmVmc0J5Q2xhc3NuYW1lKHN0YXRlLnR5cGVzQnlDbGFzc25hbWUoKSk7Ci0gICAgICAgIF9pZGVudGl0eUNvbnN0cmFpbnRzID0gYnVpbGRDb21wb25lbnRSZWZNYXAoc3RhdGUuaWRDb25zdHJhaW50cygpKTsKLSAgICAgICAgX25hbWVzcGFjZXMgPSBuZXcgSGFzaFNldChBcnJheXMuYXNMaXN0KHN0YXRlLmdldE5hbWVzcGFjZXMoKSkpOwotICAgIH0KLQotICAgIGZpbmFsIFNjaGVtYVR5cGVTeXN0ZW1JbXBsIGdldFR5cGVTeXN0ZW0oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgfQotCi0gICAgc3RhdGljIGNsYXNzIFN0cmluZ1Bvb2wKLSAgICB7Ci0gICAgICAgIHByaXZhdGUgTGlzdCBpbnRzVG9TdHJpbmdzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBwcml2YXRlIE1hcCBzdHJpbmdzVG9JbnRzID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgcHJpdmF0ZSBTdHJpbmcgX2hhbmRsZTsKLSAgICAgICAgcHJpdmF0ZSBTdHJpbmcgX25hbWU7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENvbnN0cnVjdHMgYW4gZW1wdHkgU3RyaW5nUG9vbCB0byBiZSBmaWxsZWQgd2l0aCBzdHJpbmdzLgotICAgICAgICAgKi8KLSAgICAgICAgU3RyaW5nUG9vbChTdHJpbmcgaGFuZGxlLCBTdHJpbmcgbmFtZSkKLSAgICAgICAgewotICAgICAgICAgICAgX2hhbmRsZSA9IGhhbmRsZTsKLSAgICAgICAgICAgIF9uYW1lID0gbmFtZTsKLSAgICAgICAgICAgIGludHNUb1N0cmluZ3MuYWRkKG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGNvZGVGb3JTdHJpbmcoU3RyaW5nIHN0cikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHN0ciA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgSW50ZWdlciByZXN1bHQgPSAoSW50ZWdlcilzdHJpbmdzVG9JbnRzLmdldChzdHIpOwotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBJbnRlZ2VyKGludHNUb1N0cmluZ3Muc2l6ZSgpKTsKLSAgICAgICAgICAgICAgICBpbnRzVG9TdHJpbmdzLmFkZChzdHIpOwotICAgICAgICAgICAgICAgIHN0cmluZ3NUb0ludHMucHV0KHN0ciwgcmVzdWx0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQuaW50VmFsdWUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBzdHJpbmdGb3JDb2RlKGludCBjb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY29kZSA9PSAwKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgcmV0dXJuIChTdHJpbmcpaW50c1RvU3RyaW5ncy5nZXQoY29kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHdyaXRlVG8oRGF0YU91dHB1dFN0cmVhbSBvdXRwdXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpbnRzVG9TdHJpbmdzLnNpemUoKSA+IFNob3J0Lk1BWF9WQUxVRSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbigiVG9vIG1hbnkgc3RyaW5ncyAoIiArIGludHNUb1N0cmluZ3Muc2l6ZSgpICsgIikiLCBfbmFtZSwgX2hhbmRsZSwgU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5JTlRfVE9PX0xBUkdFKTsKLQotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0cHV0LndyaXRlU2hvcnQoaW50c1RvU3RyaW5ncy5zaXplKCkpOwotICAgICAgICAgICAgICAgIEl0ZXJhdG9yIGkgPSBpbnRzVG9TdHJpbmdzLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpLm5leHQoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdHIgPSAoU3RyaW5nKWkubmV4dCgpOwotICAgICAgICAgICAgICAgICAgICBvdXRwdXQud3JpdGVVVEYoc3RyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgX25hbWUsIF9oYW5kbGUsIFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uSU9fRVhDRVBUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgcmVhZEZyb20oRGF0YUlucHV0U3RyZWFtIGlucHV0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaW50c1RvU3RyaW5ncy5zaXplKCkgIT0gMSB8fCBzdHJpbmdzVG9JbnRzLnNpemUoKSAhPSAwKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLQotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHNpemUgPSBpbnB1dC5yZWFkU2hvcnQoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IHNpemU7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdHIgPSBpbnB1dC5yZWFkVVRGKCkuaW50ZXJuKCk7Ci0gICAgICAgICAgICAgICAgICAgIGludCBjb2RlID0gY29kZUZvclN0cmluZyhzdHIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSAhPSBpKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpID09IG51bGwgPyBlLmdldE1lc3NhZ2UoKSA6ICJJTyBFeGNlcHRpb24iLCBfbmFtZSwgX2hhbmRsZSwgU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5JT19FWENFUFRJT04sIGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xhc3MgSGFuZGxlUG9vbAotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBNYXAgX2hhbmRsZXNUb1JlZnMgPSBuZXcgTGlua2VkSGFzaE1hcCgpOwotICAgICAgICBwcml2YXRlIE1hcCBfY29tcG9uZW50c1RvSGFuZGxlcyA9IG5ldyBMaW5rZWRIYXNoTWFwKCk7IC8vIHBvcHVsYXRlZCBvbiB3cml0ZQotICAgICAgICBwcml2YXRlIGJvb2xlYW4gX3N0YXJ0ZWQ7Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIENvbnN0cnVjdHMgYW4gZW1wdHkgSGFuZGxlUG9vbCB0byBiZSBwb3B1bGF0ZWQuCi0gICAgICAgICAqLwotICAgICAgICBIYW5kbGVQb29sKCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBTdHJpbmcgYWRkVW5pcXVlSGFuZGxlKFNjaGVtYUNvbXBvbmVudCBvYmosIFN0cmluZyBiYXNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBiYXNlID0gYmFzZS50b0xvd2VyQ2FzZSgpOyAgLy8gd2UgbG93ZXJjYXNlIGhhbmRsZXMgYmVjYXVzZSBvZiBjYXNlLWluc2Vuc2l0aXZlIFdpbmRvd3MgZmlsZW5hbWVzISEhCi0gICAgICAgICAgICBTdHJpbmcgaGFuZGxlID0gYmFzZTsKLSAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMjsgX2hhbmRsZXNUb1JlZnMuY29udGFpbnNLZXkoaGFuZGxlKTsgaW5kZXgrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBoYW5kbGUgPSBiYXNlICsgaW5kZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBfaGFuZGxlc1RvUmVmcy5wdXQoaGFuZGxlLCBvYmouZ2V0Q29tcG9uZW50UmVmKCkpOwotICAgICAgICAgICAgX2NvbXBvbmVudHNUb0hhbmRsZXMucHV0KG9iaiwgaGFuZGxlKTsKLSAgICAgICAgICAgIHJldHVybiBoYW5kbGU7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgaGFuZGxlRm9yQ29tcG9uZW50KFNjaGVtYUNvbXBvbmVudCBjb21wKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY29tcCA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgaWYgKGNvbXAuZ2V0VHlwZVN5c3RlbSgpICE9IGdldFR5cGVTeXN0ZW0oKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDYW5ub3Qgc3VwcGx5IGhhbmRsZXMgZm9yIHR5cGVzIGZyb20gYW5vdGhlciB0eXBlIHN5c3RlbSIpOwotICAgICAgICAgICAgaWYgKGNvbXAgaW5zdGFuY2VvZiBTY2hlbWFUeXBlKQotICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVGb3JUeXBlKChTY2hlbWFUeXBlKWNvbXApOwotICAgICAgICAgICAgaWYgKGNvbXAgaW5zdGFuY2VvZiBTY2hlbWFHbG9iYWxFbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVGb3JFbGVtZW50KChTY2hlbWFHbG9iYWxFbGVtZW50KWNvbXApOwotICAgICAgICAgICAgaWYgKGNvbXAgaW5zdGFuY2VvZiBTY2hlbWFHbG9iYWxBdHRyaWJ1dGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUZvckF0dHJpYnV0ZSgoU2NoZW1hR2xvYmFsQXR0cmlidXRlKWNvbXApOwotICAgICAgICAgICAgaWYgKGNvbXAgaW5zdGFuY2VvZiBTY2hlbWFNb2RlbEdyb3VwKQotICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVGb3JNb2RlbEdyb3VwKChTY2hlbWFNb2RlbEdyb3VwKWNvbXApOwotICAgICAgICAgICAgaWYgKGNvbXAgaW5zdGFuY2VvZiBTY2hlbWFBdHRyaWJ1dGVHcm91cCkKLSAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlRm9yQXR0cmlidXRlR3JvdXAoKFNjaGVtYUF0dHJpYnV0ZUdyb3VwKWNvbXApOwotICAgICAgICAgICAgaWYgKGNvbXAgaW5zdGFuY2VvZiBTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUZvcklkZW50aXR5Q29uc3RyYWludCgoU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50KWNvbXApOwotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQ29tcG9uZW50IHR5cGUgY2Fubm90IGhhdmUgYSBoYW5kbGUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBoYW5kbGVGb3JFbGVtZW50KFNjaGVtYUdsb2JhbEVsZW1lbnQgZWxlbWVudCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIGlmIChlbGVtZW50LmdldFR5cGVTeXN0ZW0oKSAhPSBnZXRUeXBlU3lzdGVtKCkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ2Fubm90IHN1cHBseSBoYW5kbGVzIGZvciB0eXBlcyBmcm9tIGFub3RoZXIgdHlwZSBzeXN0ZW0iKTsKLSAgICAgICAgICAgIFN0cmluZyBoYW5kbGUgPSAoU3RyaW5nKV9jb21wb25lbnRzVG9IYW5kbGVzLmdldChlbGVtZW50KTsKLSAgICAgICAgICAgIGlmIChoYW5kbGUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICBoYW5kbGUgPSBhZGRVbmlxdWVIYW5kbGUoZWxlbWVudCwgTmFtZVV0aWwudXBwZXJDYW1lbENhc2UoZWxlbWVudC5nZXROYW1lKCkuZ2V0TG9jYWxQYXJ0KCkpICsgIkVsZW1lbnQiKTsKLSAgICAgICAgICAgIHJldHVybiBoYW5kbGU7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgaGFuZGxlRm9yQXR0cmlidXRlKFNjaGVtYUdsb2JhbEF0dHJpYnV0ZSBhdHRyaWJ1dGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUuZ2V0VHlwZVN5c3RlbSgpICE9IGdldFR5cGVTeXN0ZW0oKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDYW5ub3Qgc3VwcGx5IGhhbmRsZXMgZm9yIHR5cGVzIGZyb20gYW5vdGhlciB0eXBlIHN5c3RlbSIpOwotICAgICAgICAgICAgU3RyaW5nIGhhbmRsZSA9IChTdHJpbmcpX2NvbXBvbmVudHNUb0hhbmRsZXMuZ2V0KGF0dHJpYnV0ZSk7Ci0gICAgICAgICAgICBpZiAoaGFuZGxlID09IG51bGwpCi0gICAgICAgICAgICAgICAgaGFuZGxlID0gYWRkVW5pcXVlSGFuZGxlKGF0dHJpYnV0ZSwgTmFtZVV0aWwudXBwZXJDYW1lbENhc2UoYXR0cmlidXRlLmdldE5hbWUoKS5nZXRMb2NhbFBhcnQoKSkgKyAiQXR0cmlidXRlIik7Ci0gICAgICAgICAgICByZXR1cm4gaGFuZGxlOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIGhhbmRsZUZvck1vZGVsR3JvdXAoU2NoZW1hTW9kZWxHcm91cCBncm91cCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGdyb3VwID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICBpZiAoZ3JvdXAuZ2V0VHlwZVN5c3RlbSgpICE9IGdldFR5cGVTeXN0ZW0oKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDYW5ub3Qgc3VwcGx5IGhhbmRsZXMgZm9yIHR5cGVzIGZyb20gYW5vdGhlciB0eXBlIHN5c3RlbSIpOwotICAgICAgICAgICAgU3RyaW5nIGhhbmRsZSA9IChTdHJpbmcpX2NvbXBvbmVudHNUb0hhbmRsZXMuZ2V0KGdyb3VwKTsKLSAgICAgICAgICAgIGlmIChoYW5kbGUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICBoYW5kbGUgPSBhZGRVbmlxdWVIYW5kbGUoZ3JvdXAsIE5hbWVVdGlsLnVwcGVyQ2FtZWxDYXNlKGdyb3VwLmdldE5hbWUoKS5nZXRMb2NhbFBhcnQoKSkgKyAiTW9kZWxHcm91cCIpOwotICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBoYW5kbGVGb3JBdHRyaWJ1dGVHcm91cChTY2hlbWFBdHRyaWJ1dGVHcm91cCBncm91cCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGdyb3VwID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICBpZiAoZ3JvdXAuZ2V0VHlwZVN5c3RlbSgpICE9IGdldFR5cGVTeXN0ZW0oKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDYW5ub3Qgc3VwcGx5IGhhbmRsZXMgZm9yIHR5cGVzIGZyb20gYW5vdGhlciB0eXBlIHN5c3RlbSIpOwotICAgICAgICAgICAgU3RyaW5nIGhhbmRsZSA9IChTdHJpbmcpX2NvbXBvbmVudHNUb0hhbmRsZXMuZ2V0KGdyb3VwKTsKLSAgICAgICAgICAgIGlmIChoYW5kbGUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICBoYW5kbGUgPSBhZGRVbmlxdWVIYW5kbGUoZ3JvdXAsIE5hbWVVdGlsLnVwcGVyQ2FtZWxDYXNlKGdyb3VwLmdldE5hbWUoKS5nZXRMb2NhbFBhcnQoKSkgKyAiQXR0cmlidXRlR3JvdXAiKTsKLSAgICAgICAgICAgIHJldHVybiBoYW5kbGU7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgaGFuZGxlRm9ySWRlbnRpdHlDb25zdHJhaW50KFNjaGVtYUlkZW50aXR5Q29uc3RyYWludCBpZGMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpZGMgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIGlmIChpZGMuZ2V0VHlwZVN5c3RlbSgpICE9IGdldFR5cGVTeXN0ZW0oKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDYW5ub3Qgc3VwcGx5IGhhbmRsZXMgZm9yIHR5cGVzIGZyb20gYW5vdGhlciB0eXBlIHN5c3RlbSIpOwotICAgICAgICAgICAgU3RyaW5nIGhhbmRsZSA9IChTdHJpbmcpX2NvbXBvbmVudHNUb0hhbmRsZXMuZ2V0KGlkYyk7Ci0gICAgICAgICAgICBpZiAoaGFuZGxlID09IG51bGwpCi0gICAgICAgICAgICAgICAgaGFuZGxlID0gYWRkVW5pcXVlSGFuZGxlKGlkYywgTmFtZVV0aWwudXBwZXJDYW1lbENhc2UoaWRjLmdldE5hbWUoKS5nZXRMb2NhbFBhcnQoKSkgKyAiSWRlbnRpdHlDb25zdHJhaW50Iik7Ci0gICAgICAgICAgICByZXR1cm4gaGFuZGxlOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIGhhbmRsZUZvclR5cGUoU2NoZW1hVHlwZSB0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodHlwZSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgaWYgKHR5cGUuZ2V0VHlwZVN5c3RlbSgpICE9IGdldFR5cGVTeXN0ZW0oKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJDYW5ub3Qgc3VwcGx5IGhhbmRsZXMgZm9yIHR5cGVzIGZyb20gYW5vdGhlciB0eXBlIHN5c3RlbSIpOwotICAgICAgICAgICAgU3RyaW5nIGhhbmRsZSA9IChTdHJpbmcpX2NvbXBvbmVudHNUb0hhbmRsZXMuZ2V0KHR5cGUpOwotICAgICAgICAgICAgaWYgKGhhbmRsZSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFFOYW1lIG5hbWUgPSB0eXBlLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgc3VmZml4ID0gIiI7Ci0gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlLmlzRG9jdW1lbnRUeXBlKCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSB0eXBlLmdldERvY3VtZW50RWxlbWVudE5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeCA9ICJEb2MiOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUuaXNBdHRyaWJ1dGVUeXBlKCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSB0eXBlLmdldEF0dHJpYnV0ZVR5cGVBdHRyaWJ1dGVOYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXggPSAiQXR0clR5cGUiOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUuZ2V0Q29udGFpbmVyRmllbGQoKSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gdHlwZS5nZXRDb250YWluZXJGaWVsZCgpLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeCA9IHR5cGUuZ2V0Q29udGFpbmVyRmllbGQoKS5pc0F0dHJpYnV0ZSgpID8gIkF0dHIiIDogIkVsZW0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgU3RyaW5nIGJhc2VOYW1lOwotICAgICAgICAgICAgICAgIFN0cmluZyB1bmlxID0gSW50ZWdlci50b0hleFN0cmluZyh0eXBlLnRvU3RyaW5nKCkuaGFzaENvZGUoKSB8IDB4ODAwMDAwMDApLnN1YnN0cmluZyg0KS50b1VwcGVyQ2FzZSgpOwotICAgICAgICAgICAgICAgIGlmIChuYW1lID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIGJhc2VOYW1lID0gIkFub24iICsgdW5pcSArICJUeXBlIjsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJhc2VOYW1lID0gTmFtZVV0aWwudXBwZXJDYW1lbENhc2UobmFtZS5nZXRMb2NhbFBhcnQoKSkgKyB1bmlxICsgc3VmZml4ICsgIlR5cGUiOwotCi0gICAgICAgICAgICAgICAgaGFuZGxlID0gYWRkVW5pcXVlSGFuZGxlKHR5cGUsIGJhc2VOYW1lKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTsKLSAgICAgICAgfQotCi0gICAgICAgIFNjaGVtYUNvbXBvbmVudC5SZWYgcmVmRm9ySGFuZGxlKFN0cmluZyBoYW5kbGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChoYW5kbGUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAgICAgcmV0dXJuIChTY2hlbWFDb21wb25lbnQuUmVmKV9oYW5kbGVzVG9SZWZzLmdldChoYW5kbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgU2V0IGdldEFsbEhhbmRsZXMoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gX2hhbmRsZXNUb1JlZnMua2V5U2V0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHN0YXJ0V3JpdGVNb2RlKCkKLSAgICAgICAgewotICAgICAgICAgICAgX3N0YXJ0ZWQgPSB0cnVlOwotICAgICAgICAgICAgX2NvbXBvbmVudHNUb0hhbmRsZXMgPSBuZXcgTGlua2VkSGFzaE1hcCgpOwotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpID0gX2hhbmRsZXNUb1JlZnMua2V5U2V0KCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgaGFuZGxlID0gKFN0cmluZylpLm5leHQoKTsKLS8vICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiV3JpdGluZyBwcmVleGlzdGluZyBoYW5kbGUgIiArIGhhbmRsZSk7Ci0gICAgICAgICAgICAgICAgU2NoZW1hQ29tcG9uZW50IGNvbXAgPSAoKFNjaGVtYUNvbXBvbmVudC5SZWYpX2hhbmRsZXNUb1JlZnMuZ2V0KGhhbmRsZSkpLmdldENvbXBvbmVudCgpOwotICAgICAgICAgICAgICAgIF9jb21wb25lbnRzVG9IYW5kbGVzLnB1dChjb21wLCBoYW5kbGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICB9Ci0KLSAgICBwcml2YXRlIFN0cmluZyBfbmFtZTsKLSAgICBwcml2YXRlIFN0cmluZyBfYmFzZVBhY2thZ2U7Ci0KLSAgICAvLyBjbGFzc2xvYWRlciBpcyBhdmFpbGFibGUgZm9yIHN0cydzIHRoYXQgd2VyZSBjb21waWxlZCBhbmQgbG9hZGVkLCBub3QgZHluYW1pYyBvbmVzCi0gICAgcHJpdmF0ZSBDbGFzc0xvYWRlciBfY2xhc3Nsb2FkZXI7Ci0KLSAgICAvLyB0aGUgbG9hZGVyIGZvciBsb2FkaW5nIC54c2IgcmVzb3VyY2VzCi0gICAgcHJpdmF0ZSBSZXNvdXJjZUxvYWRlciBfcmVzb3VyY2VMb2FkZXI7Ci0KLSAgICAvLyB0aGUgZm9sbG93aW5nIGlzIHVzZWQgdG8gbGluayByZWZlcmVuY2VzIGR1cmluZyBsb2FkCi0gICAgU2NoZW1hVHlwZUxvYWRlciBfbGlua2VyOwotCi0gICAgcHJpdmF0ZSBIYW5kbGVQb29sIF9sb2NhbEhhbmRsZXM7Ci0gICAgcHJpdmF0ZSBGaWxlIF9iYXNlU2F2ZURpcjsKLQotICAgIC8vIGFjdHVhbCB0eXBlIHN5c3RlbSBkYXRhLCBtYXAgUU5hbWVzIC0+IFNjaGVtYUNvbXBvbmVudC5SZWYKLSAgICBwcml2YXRlIE1hcCBfcmVkZWZpbmVkTW9kZWxHcm91cHM7Ci0gICAgcHJpdmF0ZSBNYXAgX3JlZGVmaW5lZEF0dHJpYnV0ZUdyb3VwczsKLSAgICBwcml2YXRlIE1hcCBfcmVkZWZpbmVkR2xvYmFsVHlwZXM7Ci0KLSAgICBwcml2YXRlIE1hcCBfZ2xvYmFsRWxlbWVudHM7Ci0gICAgcHJpdmF0ZSBNYXAgX2dsb2JhbEF0dHJpYnV0ZXM7Ci0gICAgcHJpdmF0ZSBNYXAgX21vZGVsR3JvdXBzOwotICAgIHByaXZhdGUgTWFwIF9hdHRyaWJ1dGVHcm91cHM7Ci0gICAgcHJpdmF0ZSBNYXAgX2dsb2JhbFR5cGVzOwotICAgIHByaXZhdGUgTWFwIF9kb2N1bWVudFR5cGVzOwotICAgIHByaXZhdGUgTWFwIF9hdHRyaWJ1dGVUeXBlczsKLSAgICBwcml2YXRlIE1hcCBfaWRlbnRpdHlDb25zdHJhaW50cyA9IENvbGxlY3Rpb25zLkVNUFRZX01BUDsKLSAgICBwcml2YXRlIE1hcCBfdHlwZVJlZnNCeUNsYXNzbmFtZSA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgcHJpdmF0ZSBTZXQgX25hbWVzcGFjZXM7Ci0KLSAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBTY2hlbWFUeXBlW10gRU1QVFlfU1RfQVJSQVkgPSBuZXcgU2NoZW1hVHlwZVswXTsKLSAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBTY2hlbWFHbG9iYWxFbGVtZW50W10gRU1QVFlfR0VfQVJSQVkgPSBuZXcgU2NoZW1hR2xvYmFsRWxlbWVudFswXTsKLSAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBTY2hlbWFHbG9iYWxBdHRyaWJ1dGVbXSBFTVBUWV9HQV9BUlJBWSA9IG5ldyBTY2hlbWFHbG9iYWxBdHRyaWJ1dGVbMF07Ci0gICAgc3RhdGljIHByaXZhdGUgZmluYWwgU2NoZW1hTW9kZWxHcm91cFtdIEVNUFRZX01HX0FSUkFZID0gbmV3IFNjaGVtYU1vZGVsR3JvdXBbMF07Ci0gICAgc3RhdGljIHByaXZhdGUgZmluYWwgU2NoZW1hQXR0cmlidXRlR3JvdXBbXSBFTVBUWV9BR19BUlJBWSA9IG5ldyBTY2hlbWFBdHRyaWJ1dGVHcm91cFswXTsKLSAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnRbXSBFTVBUWV9JQ19BUlJBWSA9IG5ldyBTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnRbMF07Ci0KLSAgICBwdWJsaWMgdm9pZCBzYXZlVG9EaXJlY3RvcnkoRmlsZSBjbGFzc0RpcikKLSAgICB7Ci0gICAgICAgIF9iYXNlU2F2ZURpciA9IGNsYXNzRGlyOwotCi0gICAgICAgIF9sb2NhbEhhbmRsZXMuc3RhcnRXcml0ZU1vZGUoKTsKLSAgICAgICAgc2F2ZVR5cGVzUmVjdXJzaXZlbHkoZ2xvYmFsVHlwZXMoKSk7Ci0gICAgICAgIHNhdmVUeXBlc1JlY3Vyc2l2ZWx5KGRvY3VtZW50VHlwZXMoKSk7Ci0gICAgICAgIHNhdmVUeXBlc1JlY3Vyc2l2ZWx5KGF0dHJpYnV0ZVR5cGVzKCkpOwotICAgICAgICBzYXZlR2xvYmFsRWxlbWVudHMoZ2xvYmFsRWxlbWVudHMoKSk7Ci0gICAgICAgIHNhdmVHbG9iYWxBdHRyaWJ1dGVzKGdsb2JhbEF0dHJpYnV0ZXMoKSk7Ci0gICAgICAgIHNhdmVNb2RlbEdyb3Vwcyhtb2RlbEdyb3VwcygpKTsKLSAgICAgICAgc2F2ZUF0dHJpYnV0ZUdyb3VwcyhhdHRyaWJ1dGVHcm91cHMoKSk7Ci0gICAgICAgIHNhdmVJZGVudGl0eUNvbnN0cmFpbnRzKGlkZW50aXR5Q29uc3RyYWludHMoKSk7Ci0KLSAgICAgICAgc2F2ZVR5cGVzUmVjdXJzaXZlbHkocmVkZWZpbmVkR2xvYmFsVHlwZXMoKSk7Ci0gICAgICAgIHNhdmVNb2RlbEdyb3VwcyhyZWRlZmluZWRNb2RlbEdyb3VwcygpKTsKLSAgICAgICAgc2F2ZUF0dHJpYnV0ZUdyb3VwcyhyZWRlZmluZWRBdHRyaWJ1dGVHcm91cHMoKSk7Ci0KLSAgICAgICAgc2F2ZUluZGV4KCk7Ci0gICAgICAgIHNhdmVQb2ludGVycygpOwotICAgIH0KLQotICAgIHZvaWQgc2F2ZVR5cGVzUmVjdXJzaXZlbHkoU2NoZW1hVHlwZVtdIHR5cGVzKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHR5cGVzW2ldLmdldFR5cGVTeXN0ZW0oKSAhPSBnZXRUeXBlU3lzdGVtKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzYXZlVHlwZSh0eXBlc1tpXSk7Ci0gICAgICAgICAgICBzYXZlVHlwZXNSZWN1cnNpdmVseSh0eXBlc1tpXS5nZXRBbm9ueW1vdXNUeXBlcygpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNhdmVHbG9iYWxFbGVtZW50cyhTY2hlbWFHbG9iYWxFbGVtZW50W10gZWx0cykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZWx0cy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgc2F2ZUdsb2JhbEVsZW1lbnQoZWx0c1tpXSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzYXZlR2xvYmFsQXR0cmlidXRlcyhTY2hlbWFHbG9iYWxBdHRyaWJ1dGVbXSBhdHRycykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNhdmVHbG9iYWxBdHRyaWJ1dGUoYXR0cnNbaV0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2F2ZU1vZGVsR3JvdXBzKFNjaGVtYU1vZGVsR3JvdXBbXSBncm91cHMpCi0gICAgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgc2F2ZU1vZGVsR3JvdXAoZ3JvdXBzW2ldKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNhdmVBdHRyaWJ1dGVHcm91cHMoU2NoZW1hQXR0cmlidXRlR3JvdXBbXSBncm91cHMpCi0gICAgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgc2F2ZUF0dHJpYnV0ZUdyb3VwKGdyb3Vwc1tpXSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzYXZlSWRlbnRpdHlDb25zdHJhaW50cyhTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnRbXSBpZGNzKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpZGNzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBzYXZlSWRlbnRpdHlDb25zdHJhaW50KGlkY3NbaV0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2F2ZUdsb2JhbEVsZW1lbnQoU2NoZW1hR2xvYmFsRWxlbWVudCBlbHQpCi0gICAgewotICAgICAgICBTdHJpbmcgaGFuZGxlID0gX2xvY2FsSGFuZGxlcy5oYW5kbGVGb3JFbGVtZW50KGVsdCk7Ci0gICAgICAgIFhzYlJlYWRlciBzYXZlciA9IG5ldyBYc2JSZWFkZXIoaGFuZGxlKTsKLSAgICAgICAgc2F2ZXIud3JpdGVQYXJ0aWNsZURhdGEoKFNjaGVtYVBhcnRpY2xlKWVsdCk7Ci0gICAgICAgIHNhdmVyLndyaXRlU3RyaW5nKGVsdC5nZXRTb3VyY2VOYW1lKCkpOwotICAgICAgICBzYXZlci53cml0ZVJlYWxIZWFkZXIoaGFuZGxlLCBGSUxFVFlQRV9TQ0hFTUFFTEVNRU5UKTsKLSAgICAgICAgc2F2ZXIud3JpdGVQYXJ0aWNsZURhdGEoKFNjaGVtYVBhcnRpY2xlKWVsdCk7Ci0gICAgICAgIHNhdmVyLndyaXRlU3RyaW5nKGVsdC5nZXRTb3VyY2VOYW1lKCkpOwotICAgICAgICBzYXZlci53cml0ZUVuZCgpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNhdmVHbG9iYWxBdHRyaWJ1dGUoU2NoZW1hR2xvYmFsQXR0cmlidXRlIGF0dHIpCi0gICAgewotICAgICAgICBTdHJpbmcgaGFuZGxlID0gX2xvY2FsSGFuZGxlcy5oYW5kbGVGb3JBdHRyaWJ1dGUoYXR0cik7Ci0gICAgICAgIFhzYlJlYWRlciBzYXZlciA9IG5ldyBYc2JSZWFkZXIoaGFuZGxlKTsKLSAgICAgICAgc2F2ZXIud3JpdGVBdHRyaWJ1dGVEYXRhKGF0dHIpOwotICAgICAgICBzYXZlci53cml0ZVN0cmluZyhhdHRyLmdldFNvdXJjZU5hbWUoKSk7Ci0gICAgICAgIHNhdmVyLndyaXRlUmVhbEhlYWRlcihoYW5kbGUsIEZJTEVUWVBFX1NDSEVNQUFUVFJJQlVURSk7Ci0gICAgICAgIHNhdmVyLndyaXRlQXR0cmlidXRlRGF0YShhdHRyKTsKLSAgICAgICAgc2F2ZXIud3JpdGVTdHJpbmcoYXR0ci5nZXRTb3VyY2VOYW1lKCkpOwotICAgICAgICBzYXZlci53cml0ZUVuZCgpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNhdmVNb2RlbEdyb3VwKFNjaGVtYU1vZGVsR3JvdXAgZ3JwKQotICAgIHsKLSAgICAgICAgU3RyaW5nIGhhbmRsZSA9IF9sb2NhbEhhbmRsZXMuaGFuZGxlRm9yTW9kZWxHcm91cChncnApOwotICAgICAgICBYc2JSZWFkZXIgc2F2ZXIgPSBuZXcgWHNiUmVhZGVyKGhhbmRsZSk7Ci0gICAgICAgIHNhdmVyLndyaXRlTW9kZWxHcm91cERhdGEoZ3JwKTsKLSAgICAgICAgc2F2ZXIud3JpdGVSZWFsSGVhZGVyKGhhbmRsZSwgRklMRVRZUEVfU0NIRU1BTU9ERUxHUk9VUCk7Ci0gICAgICAgIHNhdmVyLndyaXRlTW9kZWxHcm91cERhdGEoZ3JwKTsKLSAgICAgICAgc2F2ZXIud3JpdGVFbmQoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzYXZlQXR0cmlidXRlR3JvdXAoU2NoZW1hQXR0cmlidXRlR3JvdXAgZ3JwKQotICAgIHsKLSAgICAgICAgU3RyaW5nIGhhbmRsZSA9IF9sb2NhbEhhbmRsZXMuaGFuZGxlRm9yQXR0cmlidXRlR3JvdXAoZ3JwKTsKLSAgICAgICAgWHNiUmVhZGVyIHNhdmVyID0gbmV3IFhzYlJlYWRlcihoYW5kbGUpOwotICAgICAgICBzYXZlci53cml0ZUF0dHJpYnV0ZUdyb3VwRGF0YShncnApOwotICAgICAgICBzYXZlci53cml0ZVJlYWxIZWFkZXIoaGFuZGxlLCBGSUxFVFlQRV9TQ0hFTUFBVFRSSUJVVEVHUk9VUCk7Ci0gICAgICAgIHNhdmVyLndyaXRlQXR0cmlidXRlR3JvdXBEYXRhKGdycCk7Ci0gICAgICAgIHNhdmVyLndyaXRlRW5kKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2F2ZUlkZW50aXR5Q29uc3RyYWludChTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQgaWRjKQotICAgIHsKLSAgICAgICAgU3RyaW5nIGhhbmRsZSA9IF9sb2NhbEhhbmRsZXMuaGFuZGxlRm9ySWRlbnRpdHlDb25zdHJhaW50KGlkYyk7Ci0gICAgICAgIFhzYlJlYWRlciBzYXZlciA9IG5ldyBYc2JSZWFkZXIoaGFuZGxlKTsKLSAgICAgICAgc2F2ZXIud3JpdGVJZENvbnN0cmFpbnREYXRhKGlkYyk7Ci0gICAgICAgIHNhdmVyLndyaXRlUmVhbEhlYWRlcihoYW5kbGUsIEZJTEVUWVBFX1NDSEVNQUlERU5USVRZQ09OU1RSQUlOVCk7Ci0gICAgICAgIHNhdmVyLndyaXRlSWRDb25zdHJhaW50RGF0YShpZGMpOwotICAgICAgICBzYXZlci53cml0ZUVuZCgpOwotICAgIH0KLQotICAgIHZvaWQgc2F2ZVR5cGUoU2NoZW1hVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgU3RyaW5nIGhhbmRsZSA9IF9sb2NhbEhhbmRsZXMuaGFuZGxlRm9yVHlwZSh0eXBlKTsKLSAgICAgICAgWHNiUmVhZGVyIHNhdmVyID0gbmV3IFhzYlJlYWRlcihoYW5kbGUpOwotICAgICAgICBzYXZlci53cml0ZVR5cGVEYXRhKHR5cGUpOwotICAgICAgICBzYXZlci53cml0ZVJlYWxIZWFkZXIoaGFuZGxlLCBGSUxFVFlQRV9TQ0hFTUFUWVBFKTsKLSAgICAgICAgc2F2ZXIud3JpdGVUeXBlRGF0YSh0eXBlKTsKLSAgICAgICAgc2F2ZXIud3JpdGVFbmQoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBjcmFja1BvaW50ZXIoSW5wdXRTdHJlYW0gc3RyZWFtKQotICAgIHsKLSAgICAgICAgRGF0YUlucHV0U3RyZWFtIGlucHV0ID0gbnVsbDsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlucHV0ID0gbmV3IERhdGFJbnB1dFN0cmVhbShzdHJlYW0pOwotCi0gICAgICAgICAgICBpbnQgbWFnaWMgPSBpbnB1dC5yZWFkSW50KCk7Ci0gICAgICAgICAgICBpZiAobWFnaWMgIT0gREFUQV9CQUJFKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgICAgICBpbnQgbWFqb3J2ZXIgPSBpbnB1dC5yZWFkU2hvcnQoKTsKLSAgICAgICAgICAgIGludCBtaW5vcnZlciA9IGlucHV0LnJlYWRTaG9ydCgpOwotCi0gICAgICAgICAgICBpZiAobWFqb3J2ZXIgIT0gTUFKT1JfVkVSU0lPTikKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAgICAgaWYgKG1pbm9ydmVyID4gTUlOT1JfVkVSU0lPTikKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAgICAgaWYgKG1ham9ydmVyID4gMiB8fCBtYWpvcnZlciA9PSAyICYmIG1pbm9ydmVyID49IDE4KQotICAgICAgICAgICAgICAgIGlucHV0LnJlYWRTaG9ydCgpOyAvLyByZWxlYXNlIG51bWJlciBwcmVzZW50IGluIGF0TGVhc3QoMiwgMTgsIDApCi0KLSAgICAgICAgICAgIGludCBhY3R1YWxmaWxldHlwZSA9IGlucHV0LnJlYWRTaG9ydCgpOwotICAgICAgICAgICAgaWYgKGFjdHVhbGZpbGV0eXBlICE9IEZJTEVUWVBFX1NDSEVNQVBPSU5URVIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgICAgIFN0cmluZ1Bvb2wgc3RyaW5nUG9vbCA9IG5ldyBTdHJpbmdQb29sKCJwb2ludGVyIiwgInVuayIpOwotICAgICAgICAgICAgc3RyaW5nUG9vbC5yZWFkRnJvbShpbnB1dCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBzdHJpbmdQb29sLnN0cmluZ0ZvckNvZGUoaW5wdXQucmVhZFNob3J0KCkpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBmaW5hbGx5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpbnB1dCAhPSBudWxsKQotICAgICAgICAgICAgICAgIHRyeSB7IGlucHV0LmNsb3NlKCk7IH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGNsYXNzIFhzYlJlYWRlcgotICAgIHsKLSAgICAgICAgRGF0YUlucHV0U3RyZWFtIF9pbnB1dDsKLSAgICAgICAgRGF0YU91dHB1dFN0cmVhbSBfb3V0cHV0OwotICAgICAgICBTdHJpbmdQb29sIF9zdHJpbmdQb29sOwotICAgICAgICBTdHJpbmcgX2hhbmRsZTsKLSAgICAgICAgcHJpdmF0ZSBpbnQgX21ham9ydmVyOwotICAgICAgICBwcml2YXRlIGludCBfbWlub3J2ZXI7Ci0gICAgICAgIHByaXZhdGUgaW50IF9yZWxlYXNlbm87Ci0gICAgICAgIGludCBfYWN0dWFsZmlsZXR5cGU7Ci0KLSAgICAgICAgcHVibGljIFhzYlJlYWRlcihTdHJpbmcgaGFuZGxlLCBpbnQgZmlsZXR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyByZXNvdXJjZW5hbWUgPSBfYmFzZVBhY2thZ2UgKyBoYW5kbGUgKyAiLnhzYiI7Ci0gICAgICAgICAgICBJbnB1dFN0cmVhbSByYXdpbnB1dCA9IGdldExvYWRlclN0cmVhbShyZXNvdXJjZW5hbWUpOwotICAgICAgICAgICAgaWYgKHJhd2lucHV0ID09IG51bGwpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24oIlhNTC1CRUFOUyBjb21waWxlZCBzY2hlbWE6IENvdWxkIG5vdCBsb2NhdGUgY29tcGlsZWQgc2NoZW1hIHJlc291cmNlICIgKyByZXNvdXJjZW5hbWUsIF9uYW1lLCBoYW5kbGUsIFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uTk9fUkVTT1VSQ0UpOwotCi0gICAgICAgICAgICBfaW5wdXQgPSBuZXcgRGF0YUlucHV0U3RyZWFtKHJhd2lucHV0KTsKLSAgICAgICAgICAgIF9oYW5kbGUgPSBoYW5kbGU7Ci0KLSAgICAgICAgICAgIGludCBtYWdpYyA9IHJlYWRJbnQoKTsKLSAgICAgICAgICAgIGlmIChtYWdpYyAhPSBEQVRBX0JBQkUpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24oIlhNTC1CRUFOUyBjb21waWxlZCBzY2hlbWE6IFdyb25nIG1hZ2ljIGNvb2tpZSIsIF9uYW1lLCBoYW5kbGUsIFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uV1JPTkdfTUFHSUNfQ09PS0lFKTsKLQotICAgICAgICAgICAgX21ham9ydmVyID0gcmVhZFNob3J0KCk7Ci0gICAgICAgICAgICBfbWlub3J2ZXIgPSByZWFkU2hvcnQoKTsKLQotICAgICAgICAgICAgaWYgKF9tYWpvcnZlciAhPSBNQUpPUl9WRVJTSU9OKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uKCJYTUwtQkVBTlMgY29tcGlsZWQgc2NoZW1hOiBXcm9uZyBtYWpvciB2ZXJzaW9uIC0gZXhwZWN0aW5nICIgKyBNQUpPUl9WRVJTSU9OICsgIiwgZ290ICIgKyBfbWFqb3J2ZXIsIF9uYW1lLCBoYW5kbGUsIFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uV1JPTkdfTUFKT1JfVkVSU0lPTik7Ci0KLSAgICAgICAgICAgIGlmIChfbWlub3J2ZXIgPiBNSU5PUl9WRVJTSU9OKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uKCJYTUwtQkVBTlMgY29tcGlsZWQgc2NoZW1hOiBJbmNvbXBhdGlibGUgbWlub3IgdmVyc2lvbiAtIGV4cGVjdGluZyB1cCB0byAiICsgTUlOT1JfVkVSU0lPTiArICIsIGdvdCAiICsgX21pbm9ydmVyLCBfbmFtZSwgaGFuZGxlLCBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLldST05HX01JTk9SX1ZFUlNJT04pOwotCi0gICAgICAgICAgICAvLyBDbGlwIHRvIDE0IGJlY2F1c2Ugd2UncmUgbm90IGJhY2t3YXJkIGNvbXBhdGlibGUgd2l0aCBlYXJsaWVyCi0gICAgICAgICAgICAvLyBtaW5vciB2ZXJzaW9ucy4gIFJlbW92ZSB0aGlzIHdoZW4gdXBncmFkaW5nIHRvIGEgbmV3IG1ham9yCi0gICAgICAgICAgICAvLyB2ZXJzaW9uCi0KLSAgICAgICAgICAgIGlmIChfbWlub3J2ZXIgPCAxNCkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbigiWE1MLUJFQU5TIGNvbXBpbGVkIHNjaGVtYTogSW5jb21wYXRpYmxlIG1pbm9yIHZlcnNpb24gLSBleHBlY3RpbmcgYXQgbGVhc3QgMTQsIGdvdCAiICsgX21pbm9ydmVyLCBfbmFtZSwgaGFuZGxlLCBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLldST05HX01JTk9SX1ZFUlNJT04pOwotCi0gICAgICAgICAgICBpZiAoYXRMZWFzdCgyLCAxOCwgMCkpCi0gICAgICAgICAgICAgICAgX3JlbGVhc2VubyA9IHJlYWRTaG9ydCgpOwotCi0gICAgICAgICAgICBpbnQgYWN0dWFsZmlsZXR5cGUgPSByZWFkU2hvcnQoKTsKLSAgICAgICAgICAgIGlmIChhY3R1YWxmaWxldHlwZSAhPSBmaWxldHlwZSAmJiBmaWxldHlwZSAhPSAtMSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbigiWE1MLUJFQU5TIGNvbXBpbGVkIHNjaGVtYTogRmlsZSBoYXMgdGhlIHdyb25nIHR5cGUgLSBleHBlY3RpbmcgdHlwZSAiICsgZmlsZXR5cGUgKyAiLCBnb3QgdHlwZSAiICsgYWN0dWFsZmlsZXR5cGUsIF9uYW1lLCBoYW5kbGUsIFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uV1JPTkdfRklMRV9UWVBFKTsKLQotICAgICAgICAgICAgX3N0cmluZ1Bvb2wgPSBuZXcgU3RyaW5nUG9vbChfaGFuZGxlLCBfbmFtZSk7Ci0gICAgICAgICAgICBfc3RyaW5nUG9vbC5yZWFkRnJvbShfaW5wdXQpOwotCi0gICAgICAgICAgICBfYWN0dWFsZmlsZXR5cGUgPSBhY3R1YWxmaWxldHlwZTsKLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCBib29sZWFuIGF0TGVhc3QoaW50IG1ham9ydmVyLCBpbnQgbWlub3J2ZXIsIGludCByZWxlYXNlbm8pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfbWFqb3J2ZXIgPiBtYWpvcnZlcikKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChfbWFqb3J2ZXIgPCBtYWpvcnZlcikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoX21pbm9ydmVyID4gbWlub3J2ZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBpZiAoX21pbm9ydmVyIDwgbWlub3J2ZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIChfcmVsZWFzZW5vID49IHJlbGVhc2Vubyk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgYm9vbGVhbiBhdE1vc3QoaW50IG1ham9ydmVyLCBpbnQgbWlub3J2ZXIsIGludCByZWxlYXNlbm8pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfbWFqb3J2ZXIgPiBtYWpvcnZlcikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoX21ham9ydmVyIDwgbWFqb3J2ZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBpZiAoX21pbm9ydmVyID4gbWlub3J2ZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKF9taW5vcnZlciA8IG1pbm9ydmVyKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIChfcmVsZWFzZW5vIDw9IHJlbGVhc2Vubyk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgZ2V0QWN0dWFsRmlsZXR5cGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gX2FjdHVhbGZpbGV0eXBlOwotICAgICAgICB9Ci0KLSAgICAgICAgWHNiUmVhZGVyKFN0cmluZyBoYW5kbGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9oYW5kbGUgPSBoYW5kbGU7Ci0gICAgICAgICAgICBfc3RyaW5nUG9vbCA9IG5ldyBTdHJpbmdQb29sKF9oYW5kbGUsIF9uYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgd3JpdGVSZWFsSGVhZGVyKFN0cmluZyBoYW5kbGUsIGludCBmaWxldHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gaGFja2Vyb286IGlmIGhhbmRsZSBjb250YWlucyBhICIvIiBpdCdzIG5vdCByZWxhdGl2ZS4KLSAgICAgICAgICAgIFN0cmluZyByZXNvdXJjZW5hbWU7Ci0KLSAgICAgICAgICAgIGlmIChoYW5kbGUuaW5kZXhPZignLycpID49IDApCi0gICAgICAgICAgICAgICAgcmVzb3VyY2VuYW1lID0gaGFuZGxlICsgIi54c2IiOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc291cmNlbmFtZSA9IF9iYXNlUGFja2FnZSArIGhhbmRsZSArICIueHNiIjsKLQotICAgICAgICAgICAgT3V0cHV0U3RyZWFtIHJhd291dHB1dCA9IGdldFNhdmVyU3RyZWFtKHJlc291cmNlbmFtZSk7Ci0gICAgICAgICAgICBpZiAocmF3b3V0cHV0ID09IG51bGwpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24oIkNvdWxkIG5vdCB3cml0ZSBjb21waWxlZCBzY2hlbWEgcmVzb3VyY2UgIiArIHJlc291cmNlbmFtZSwgX25hbWUsIGhhbmRsZSwgU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5OT1RfV1JJVEVBQkxFKTsKLQotICAgICAgICAgICAgX291dHB1dCA9IG5ldyBEYXRhT3V0cHV0U3RyZWFtKHJhd291dHB1dCk7Ci0gICAgICAgICAgICBfaGFuZGxlID0gaGFuZGxlOwotCi0gICAgICAgICAgICB3cml0ZUludChEQVRBX0JBQkUpOwotICAgICAgICAgICAgd3JpdGVTaG9ydChNQUpPUl9WRVJTSU9OKTsKLSAgICAgICAgICAgIHdyaXRlU2hvcnQoTUlOT1JfVkVSU0lPTik7Ci0gICAgICAgICAgICB3cml0ZVNob3J0KFJFTEVBU0VfTlVNQkVSKTsKLSAgICAgICAgICAgIHdyaXRlU2hvcnQoZmlsZXR5cGUpOwotCi0gICAgICAgICAgICBfc3RyaW5nUG9vbC53cml0ZVRvKF9vdXRwdXQpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCByZWFkRW5kKCkKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKF9pbnB1dCAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICBfaW5wdXQuY2xvc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIG9oLCB3ZWxsLgotICAgICAgICAgICAgfQotICAgICAgICAgICAgX2lucHV0ID0gbnVsbDsKLSAgICAgICAgICAgIF9zdHJpbmdQb29sID0gbnVsbDsKLSAgICAgICAgICAgIF9oYW5kbGUgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB3cml0ZUVuZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChfb3V0cHV0ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBfb3V0cHV0LmZsdXNoKCk7Ci0gICAgICAgICAgICAgICAgICAgIF9vdXRwdXQuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgX25hbWUsIF9oYW5kbGUsIFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uSU9fRVhDRVBUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF9vdXRwdXQgPSBudWxsOwotICAgICAgICAgICAgX3N0cmluZ1Bvb2wgPSBudWxsOwotICAgICAgICAgICAgX2hhbmRsZSA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgZmlsZVR5cGVGcm9tQ29tcG9uZW50VHlwZShpbnQgY29tcG9uZW50VHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChjb21wb25lbnRUeXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hQ29tcG9uZW50LlRZUEU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTY2hlbWFUeXBlU3lzdGVtSW1wbC5GSUxFVFlQRV9TQ0hFTUFUWVBFOwotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hQ29tcG9uZW50LkVMRU1FTlQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTY2hlbWFUeXBlU3lzdGVtSW1wbC5GSUxFVFlQRV9TQ0hFTUFFTEVNRU5UOwotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hQ29tcG9uZW50LkFUVFJJQlVURToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNjaGVtYVR5cGVTeXN0ZW1JbXBsLkZJTEVUWVBFX1NDSEVNQUFUVFJJQlVURTsKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYUNvbXBvbmVudC5NT0RFTF9HUk9VUDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNjaGVtYVR5cGVTeXN0ZW1JbXBsLkZJTEVUWVBFX1NDSEVNQU1PREVMR1JPVVA7Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFDb21wb25lbnQuQVRUUklCVVRFX0dST1VQOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2NoZW1hVHlwZVN5c3RlbUltcGwuRklMRVRZUEVfU0NIRU1BQVRUUklCVVRFR1JPVVA7Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFDb21wb25lbnQuSURFTlRJVFlfQ09OU1RSQUlOVDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNjaGVtYVR5cGVTeXN0ZW1JbXBsLkZJTEVUWVBFX1NDSEVNQUlERU5USVRZQ09OU1RSQUlOVDsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJVbmV4cGVjdGVkIGNvbXBvbmVudCB0eXBlIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHdyaXRlSW5kZXhEYXRhKCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gaGFzIGEgaGFuZGxlIHBvb2wgKGNvdW50LCBoYW5kbGUvdHlwZSwgaGFuZGxlL3R5cGUuLi4pCi0gICAgICAgICAgICB3cml0ZUhhbmRsZVBvb2woX2xvY2FsSGFuZGxlcyk7Ci0KLSAgICAgICAgICAgIC8vIHRoZW4gYSBxbmFtZSBtYXAgb2YgZ2xvYmFsIGVsZW1lbnRzIChjb3VudCwgcW5hbWUvaGFuZGxlLCBxbmFtZS9oYW5kbGUuLi4pCi0gICAgICAgICAgICB3cml0ZVFOYW1lTWFwKGdsb2JhbEVsZW1lbnRzKCkpOwotCi0gICAgICAgICAgICAvLyBxbmFtZSBtYXAgb2YgZ2xvYmFsIGF0dHJpYnV0ZXMKLSAgICAgICAgICAgIHdyaXRlUU5hbWVNYXAoZ2xvYmFsQXR0cmlidXRlcygpKTsKLQotICAgICAgICAgICAgLy8gcW5hbWUgbWFwIG9mIG1vZGVsIGdyb3VwcwotICAgICAgICAgICAgd3JpdGVRTmFtZU1hcChtb2RlbEdyb3VwcygpKTsKLQotICAgICAgICAgICAgLy8gcW5hbWUgbWFwIG9mIGF0dHJpYnV0ZSBncm91cHMKLSAgICAgICAgICAgIHdyaXRlUU5hbWVNYXAoYXR0cmlidXRlR3JvdXBzKCkpOwotCi0gICAgICAgICAgICAvLyBxbmFtZSBtYXAgb2YgaWRlbnRpdHkgY29uc3RyYWludHMKLSAgICAgICAgICAgIHdyaXRlUU5hbWVNYXAoaWRlbnRpdHlDb25zdHJhaW50cygpKTsKLQotICAgICAgICAgICAgLy8gcW5hbWUgbWFwIG9mIGdsb2JhbCB0eXBlcwotICAgICAgICAgICAgd3JpdGVRTmFtZU1hcChnbG9iYWxUeXBlcygpKTsKLQotICAgICAgICAgICAgLy8gcW5hbWUgbWFwIG9mIGRvY3VtZW50IHR5cGVzLCBieSB0aGUgcW5hbWUgb2YgdGhlIGNvbnRhaW5lZCBlbGVtZW50Ci0gICAgICAgICAgICB3cml0ZURvY3VtZW50VHlwZU1hcChkb2N1bWVudFR5cGVzKCkpOwotCi0gICAgICAgICAgICAvLyBxbmFtZSBtYXAgb2YgYXR0cmlidXRlIHR5cGVzLCBieSB0aGUgcW5hbWUgb2YgdGhlIGNvbnRhaW5lZCBhdHRyaWJ1dGUKLSAgICAgICAgICAgIHdyaXRlQXR0cmlidXRlVHlwZU1hcChhdHRyaWJ1dGVUeXBlcygpKTsKLQotICAgICAgICAgICAgLy8gYWxsIHRoZSB0eXBlcyBieSBjbGFzc25hbWUKLSAgICAgICAgICAgIHdyaXRlQ2xhc3NuYW1lTWFwKF90eXBlUmVmc0J5Q2xhc3NuYW1lKTsKLQotICAgICAgICAgICAgLy8gYWxsIHRoZSBuYW1lc3BhY2VzCi0gICAgICAgICAgICB3cml0ZU5hbWVzcGFjZXMoX25hbWVzcGFjZXMpOwotCi0gICAgICAgICAgICAvLyBWRVJTSU9OIDIuMTUgYW5kIG5ld2VyIGJlbG93Ci0gICAgICAgICAgICB3cml0ZVFOYW1lTWFwKHJlZGVmaW5lZEdsb2JhbFR5cGVzKCkpOwotICAgICAgICAgICAgd3JpdGVRTmFtZU1hcChyZWRlZmluZWRNb2RlbEdyb3VwcygpKTsKLSAgICAgICAgICAgIHdyaXRlUU5hbWVNYXAocmVkZWZpbmVkQXR0cmlidXRlR3JvdXBzKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB3cml0ZUhhbmRsZVBvb2woSGFuZGxlUG9vbCBwb29sKQotICAgICAgICB7Ci0gICAgICAgICAgICB3cml0ZVNob3J0KHBvb2wuX2NvbXBvbmVudHNUb0hhbmRsZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IHBvb2wuX2NvbXBvbmVudHNUb0hhbmRsZXMua2V5U2V0KCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTY2hlbWFDb21wb25lbnQgY29tcCA9IChTY2hlbWFDb21wb25lbnQpaS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGhhbmRsZSA9IChTdHJpbmcpcG9vbC5fY29tcG9uZW50c1RvSGFuZGxlcy5nZXQoY29tcCk7Ci0gICAgICAgICAgICAgICAgaW50IGNvZGUgPSBmaWxlVHlwZUZyb21Db21wb25lbnRUeXBlKGNvbXAuZ2V0Q29tcG9uZW50VHlwZSgpKTsKLSAgICAgICAgICAgICAgICB3cml0ZVN0cmluZyhoYW5kbGUpOwotICAgICAgICAgICAgICAgIHdyaXRlU2hvcnQoY29kZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHJlYWRIYW5kbGVQb29sKEhhbmRsZVBvb2wgcG9vbCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHBvb2wuX2hhbmRsZXNUb1JlZnMuc2l6ZSgpICE9IDAgfHwgcG9vbC5fc3RhcnRlZCkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJOb25lbXB0eSBoYW5kbGUgc2V0IGJlZm9yZSByZWFkIik7Ci0KLSAgICAgICAgICAgIGludCBzaXplID0gcmVhZFNob3J0KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgaGFuZGxlID0gcmVhZFN0cmluZygpOwotICAgICAgICAgICAgICAgIHNob3J0IGNvZGUgPSByZWFkU2hvcnQoKTsKLSAgICAgICAgICAgICAgICBPYmplY3QgcmVzdWx0OwotICAgICAgICAgICAgICAgIHN3aXRjaCAoY29kZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRklMRVRZUEVfU0NIRU1BVFlQRToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBTY2hlbWFUeXBlLlJlZihnZXRUeXBlU3lzdGVtKCksIGhhbmRsZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBGSUxFVFlQRV9TQ0hFTUFFTEVNRU5UOgotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFNjaGVtYUdsb2JhbEVsZW1lbnQuUmVmKGdldFR5cGVTeXN0ZW0oKSwgaGFuZGxlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEZJTEVUWVBFX1NDSEVNQUFUVFJJQlVURToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBTY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmKGdldFR5cGVTeXN0ZW0oKSwgaGFuZGxlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEZJTEVUWVBFX1NDSEVNQU1PREVMR1JPVVA6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBuZXcgU2NoZW1hTW9kZWxHcm91cC5SZWYoZ2V0VHlwZVN5c3RlbSgpLCBoYW5kbGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRklMRVRZUEVfU0NIRU1BQVRUUklCVVRFR1JPVVA6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBuZXcgU2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmKGdldFR5cGVTeXN0ZW0oKSwgaGFuZGxlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEZJTEVUWVBFX1NDSEVNQUlERU5USVRZQ09OU1RSQUlOVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmKGdldFR5cGVTeXN0ZW0oKSwgaGFuZGxlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24oIlNjaGVtYSBpbmRleCBoYXMgYW4gdW5yZWNvZ25pemVkIGVudHJ5IG9mIHR5cGUgIiArIGNvZGUsIF9uYW1lLCBoYW5kbGUsIFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uVU5SRUNPR05JWkVEX0lOREVYX0VOVFJZKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcG9vbC5faGFuZGxlc1RvUmVmcy5wdXQoaGFuZGxlLCByZXN1bHQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgc2hvcnQgcmVhZFNob3J0KCkKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9pbnB1dC5yZWFkU2hvcnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpLCBfbmFtZSwgX2hhbmRsZSwgU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5JT19FWENFUFRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB3cml0ZVNob3J0KGludCBzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocyA+IFNob3J0Lk1BWF9WQUxVRSB8fCBzIDwgU2hvcnQuTUlOX1ZBTFVFKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uKCJWYWx1ZSAiICsgcyArICIgb3V0IG9mIHJhbmdlOiBtdXN0IGZpdCBpbiBhIDE2LWJpdCBzaG9ydC4iLCBfbmFtZSwgX2hhbmRsZSwgU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5JTlRfVE9PX0xBUkdFKTsKLSAgICAgICAgICAgIGlmIChfb3V0cHV0ICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBfb3V0cHV0LndyaXRlU2hvcnQocyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIF9uYW1lLCBfaGFuZGxlLCBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLklPX0VYQ0VQVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHJlYWRJbnQoKQotICAgICAgICB7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gX2lucHV0LnJlYWRJbnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpLCBfbmFtZSwgX2hhbmRsZSwgU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5JT19FWENFUFRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB3cml0ZUludChpbnQgaSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKF9vdXRwdXQgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIF9vdXRwdXQud3JpdGVJbnQoaSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIF9uYW1lLCBfaGFuZGxlLCBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLklPX0VYQ0VQVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIHJlYWRTdHJpbmcoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gX3N0cmluZ1Bvb2wuc3RyaW5nRm9yQ29kZShyZWFkU2hvcnQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHdyaXRlU3RyaW5nKFN0cmluZyBzdHIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBjb2RlID0gX3N0cmluZ1Bvb2wuY29kZUZvclN0cmluZyhzdHIpOwotICAgICAgICAgICAgd3JpdGVTaG9ydChjb2RlKTsKLSAgICAgICAgfQotCi0gICAgICAgIFFOYW1lIHJlYWRRTmFtZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSByZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICBTdHJpbmcgbG9jYWxuYW1lID0gcmVhZFN0cmluZygpOwotICAgICAgICAgICAgaWYgKGxvY2FsbmFtZSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBRTmFtZShuYW1lc3BhY2UsIGxvY2FsbmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHdyaXRlUU5hbWUoUU5hbWUgcW5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChxbmFtZSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdyaXRlU3RyaW5nKG51bGwpOwotICAgICAgICAgICAgICAgIHdyaXRlU3RyaW5nKG51bGwpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdyaXRlU3RyaW5nKHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpKTsKLSAgICAgICAgICAgIHdyaXRlU3RyaW5nKHFuYW1lLmdldExvY2FsUGFydCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIFNPQVBBcnJheVR5cGUgcmVhZFNPQVBBcnJheVR5cGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBRTmFtZSBxTmFtZSA9IHJlYWRRTmFtZSgpOwotICAgICAgICAgICAgU3RyaW5nIGRpbWVuc2lvbnMgPSByZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICBpZiAocU5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIHJldHVybiBuZXcgU09BUEFycmF5VHlwZShxTmFtZSwgZGltZW5zaW9ucyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHdyaXRlU09BUEFycmF5VHlwZShTT0FQQXJyYXlUeXBlIGFycmF5VHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGFycmF5VHlwZSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdyaXRlUU5hbWUobnVsbCk7Ci0gICAgICAgICAgICAgICAgd3JpdGVTdHJpbmcobnVsbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgd3JpdGVRTmFtZShhcnJheVR5cGUuZ2V0UU5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgd3JpdGVTdHJpbmcoYXJyYXlUeXBlLnNvYXAxMURpbWVuc2lvblN0cmluZygpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFNjaGVtYUNvbXBvbmVudC5SZWYgcmVhZEhhbmRsZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBoYW5kbGUgPSByZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICBpZiAoaGFuZGxlID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgICAgIGlmIChoYW5kbGUuY2hhckF0KDApICE9ICdfJykKLSAgICAgICAgICAgICAgICByZXR1cm4gX2xvY2FsSGFuZGxlcy5yZWZGb3JIYW5kbGUoaGFuZGxlKTsKLQotICAgICAgICAgICAgc3dpdGNoIChoYW5kbGUuY2hhckF0KDIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgJ0knOiAvLyBfQklfIC0gYnVpbHQtaW4gc2NoZW1hIHR5cGUgc3lzdGVtCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoKFNjaGVtYVR5cGUpQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uZ2V0KCkucmVzb2x2ZUhhbmRsZShoYW5kbGUpKS5nZXRSZWYoKTsKLSAgICAgICAgICAgICAgICBjYXNlICdUJzogLy8gX1hUXyAtIGV4dGVybmFsIHR5cGUKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9saW5rZXIuZmluZFR5cGVSZWYoUU5hbWVIZWxwZXIuZm9yUHJldHR5KGhhbmRsZSwgNCkpOwotICAgICAgICAgICAgICAgIGNhc2UgJ0UnOiAvLyBfWEVfIC0gZXh0ZXJuYWwgZWxlbWVudAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2xpbmtlci5maW5kRWxlbWVudFJlZihRTmFtZUhlbHBlci5mb3JQcmV0dHkoaGFuZGxlLCA0KSk7Ci0gICAgICAgICAgICAgICAgY2FzZSAnQSc6IC8vIF9YQV8gLSBleHRlcm5hbCBhdHRyaWJ1dGUKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9saW5rZXIuZmluZEF0dHJpYnV0ZVJlZihRTmFtZUhlbHBlci5mb3JQcmV0dHkoaGFuZGxlLCA0KSk7Ci0gICAgICAgICAgICAgICAgY2FzZSAnTSc6IC8vIF9YTV8gLSBleHRlcm5hbCBtb2RlbCBncm91cAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2xpbmtlci5maW5kTW9kZWxHcm91cFJlZihRTmFtZUhlbHBlci5mb3JQcmV0dHkoaGFuZGxlLCA0KSk7Ci0gICAgICAgICAgICAgICAgY2FzZSAnTic6IC8vIF9YTl8gLSBleHRlcm5hbCBhdHRyaWJ1dGUgZ3JvdXAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9saW5rZXIuZmluZEF0dHJpYnV0ZUdyb3VwUmVmKFFOYW1lSGVscGVyLmZvclByZXR0eShoYW5kbGUsIDQpKTsKLSAgICAgICAgICAgICAgICBjYXNlICdEJzogLy8gX1hEXyAtIGV4dGVybmFsIGlkZW50aXR5IGNvbnN0cmFpbnQKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9saW5rZXIuZmluZElkZW50aXR5Q29uc3RyYWludFJlZihRTmFtZUhlbHBlci5mb3JQcmV0dHkoaGFuZGxlLCA0KSk7Ci0gICAgICAgICAgICAgICAgY2FzZSAnUic6IC8vIF9YUl8gLSBleHRlcm5hbCByZWYgdG8gYXR0cmlidXRlJ3MgdHlwZQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2xpbmtlci5maW5kQXR0cmlidXRlKFFOYW1lSGVscGVyLmZvclByZXR0eShoYW5kbGUsIDQpKS5nZXRUeXBlKCkuZ2V0UmVmKCk7Ci0gICAgICAgICAgICAgICAgY2FzZSAnUyc6IC8vIF9YU18gLSBleHRlcm5hbCByZWYgdG8gZWxlbWVudCdzIHR5cGUKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9saW5rZXIuZmluZEVsZW1lbnQoUU5hbWVIZWxwZXIuZm9yUHJldHR5KGhhbmRsZSwgNCkpLmdldFR5cGUoKS5nZXRSZWYoKTsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbigiQ2Fubm90IHJlc29sdmUgaGFuZGxlICIgKyBoYW5kbGUsIF9uYW1lLCBfaGFuZGxlLCBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLkJBRF9IQU5ETEUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB3cml0ZUhhbmRsZShTY2hlbWFDb21wb25lbnQgY29tcCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGNvbXAgPT0gbnVsbCB8fCBjb21wLmdldFR5cGVTeXN0ZW0oKSA9PSBnZXRUeXBlU3lzdGVtKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgd3JpdGVTdHJpbmcoX2xvY2FsSGFuZGxlcy5oYW5kbGVGb3JDb21wb25lbnQoY29tcCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChjb21wLmdldENvbXBvbmVudFR5cGUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYUNvbXBvbmVudC5BVFRSSUJVVEU6Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyaW5nKCJfWEFfIiArIFFOYW1lSGVscGVyLnByZXR0eShjb21wLmdldE5hbWUoKSkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFDb21wb25lbnQuTU9ERUxfR1JPVVA6Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyaW5nKCJfWE1fIiArIFFOYW1lSGVscGVyLnByZXR0eShjb21wLmdldE5hbWUoKSkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFDb21wb25lbnQuQVRUUklCVVRFX0dST1VQOgotICAgICAgICAgICAgICAgICAgICB3cml0ZVN0cmluZygiX1hOXyIgKyBRTmFtZUhlbHBlci5wcmV0dHkoY29tcC5nZXROYW1lKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hQ29tcG9uZW50LkVMRU1FTlQ6Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyaW5nKCJfWEVfIiArIFFOYW1lSGVscGVyLnByZXR0eShjb21wLmdldE5hbWUoKSkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFDb21wb25lbnQuSURFTlRJVFlfQ09OU1RSQUlOVDoKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJpbmcoIl9YRF8iICsgUU5hbWVIZWxwZXIucHJldHR5KGNvbXAuZ2V0TmFtZSgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYUNvbXBvbmVudC5UWVBFOgotICAgICAgICAgICAgICAgICAgICBTY2hlbWFUeXBlIHR5cGUgPSAoU2NoZW1hVHlwZSljb21wOwotICAgICAgICAgICAgICAgICAgICBpZiAodHlwZS5pc0J1aWx0aW5UeXBlKCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyaW5nKCJfQklfIiArIHR5cGUuZ2V0TmFtZSgpLmdldExvY2FsUGFydCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIGZpeCBmb3IgQ1IxMjA3NTkgLSBhZGRlZCBvdXRwdXQgb2YgdHlwZXMgX1hSXyAmIF9YU18KLSAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBhbiBhdHRyaWJ1dGUgKF9YUl8pIG9yIGVsZW1lbnQgKF9YU18pIGRlY2xhcmF0aW9uCi0gICAgICAgICAgICAgICAgICAgIC8vIHVzZXMgcmVmIHRvIHJlZmVyIHRvIGFuIGF0dHJpYnV0ZSBvciBlbGVtZW50IGluIGFub3RoZXIKLSAgICAgICAgICAgICAgICAgICAgLy8gc2NoZW1hIGFuZCB0aGUgdHlwZSBvZiB0aGF0IGF0dHJpYnV0ZSBvciBlbGVtZW50Ci0gICAgICAgICAgICAgICAgICAgIC8vIGlzIGFuIGFub255bW91cyAobG9jYWwpIHR5cGUKLSAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUuZ2V0TmFtZSgpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyaW5nKCJfWFRfIiArIFFOYW1lSGVscGVyLnByZXR0eSh0eXBlLmdldE5hbWUoKSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgU2NoZW1hRmllbGQgc2YgPSB0eXBlLmdldENvbnRhaW5lckZpZWxkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgKHNmICE9IG51bGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNmLmlzQXR0cmlidXRlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJpbmcoIl9YUl8iICsgUU5hbWVIZWxwZXIucHJldHR5KHNmLmdldE5hbWUoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyaW5nKCJfWFNfIiArIFFOYW1lSGVscGVyLnByZXR0eShzZi5nZXROYW1lKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uKCJDYW5ub3Qgd3JpdGUgaGFuZGxlIGZvciBjb21wb25lbnQgIiArIGNvbXAsIF9uYW1lLCBfaGFuZGxlLCBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLkJBRF9IQU5ETEUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgU2NoZW1hVHlwZS5SZWYgcmVhZFR5cGVSZWYoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKFNjaGVtYVR5cGUuUmVmKXJlYWRIYW5kbGUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgd3JpdGVUeXBlKFNjaGVtYVR5cGUgdHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgd3JpdGVIYW5kbGUodHlwZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBNYXAgcmVhZFFOYW1lUmVmTWFwKCkKLSAgICAgICAgewotICAgICAgICAgICAgTWFwIHJlc3VsdCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgICAgICBpbnQgc2l6ZSA9IHJlYWRTaG9ydCgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUU5hbWUgbmFtZSA9IHJlYWRRTmFtZSgpOwotICAgICAgICAgICAgICAgIFNjaGVtYUNvbXBvbmVudC5SZWYgb2JqID0gcmVhZEhhbmRsZSgpOwotICAgICAgICAgICAgICAgIHJlc3VsdC5wdXQobmFtZSwgb2JqKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHdyaXRlUU5hbWVNYXAoU2NoZW1hQ29tcG9uZW50W10gY29tcG9uZW50cykKLSAgICAgICAgewotICAgICAgICAgICAgd3JpdGVTaG9ydChjb21wb25lbnRzLmxlbmd0aCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbXBvbmVudHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgd3JpdGVRTmFtZShjb21wb25lbnRzW2ldLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgd3JpdGVIYW5kbGUoY29tcG9uZW50c1tpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHdyaXRlRG9jdW1lbnRUeXBlTWFwKFNjaGVtYVR5cGVbXSBkb2N0eXBlcykKLSAgICAgICAgewotICAgICAgICAgICAgd3JpdGVTaG9ydChkb2N0eXBlcy5sZW5ndGgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkb2N0eXBlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB3cml0ZVFOYW1lKGRvY3R5cGVzW2ldLmdldERvY3VtZW50RWxlbWVudE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgd3JpdGVIYW5kbGUoZG9jdHlwZXNbaV0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB3cml0ZUF0dHJpYnV0ZVR5cGVNYXAoU2NoZW1hVHlwZVtdIGF0dHJ0eXBlcykKLSAgICAgICAgewotICAgICAgICAgICAgd3JpdGVTaG9ydChhdHRydHlwZXMubGVuZ3RoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cnR5cGVzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdyaXRlUU5hbWUoYXR0cnR5cGVzW2ldLmdldEF0dHJpYnV0ZVR5cGVBdHRyaWJ1dGVOYW1lKCkpOwotICAgICAgICAgICAgICAgIHdyaXRlSGFuZGxlKGF0dHJ0eXBlc1tpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBTY2hlbWFUeXBlLlJlZltdIHJlYWRUeXBlUmVmQXJyYXkoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgc2l6ZSA9IHJlYWRTaG9ydCgpOwotICAgICAgICAgICAgU2NoZW1hVHlwZS5SZWZbXSByZXN1bHQgPSBuZXcgU2NoZW1hVHlwZS5SZWZbc2l6ZV07Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHRbaV0gPSByZWFkVHlwZVJlZigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgd3JpdGVUeXBlQXJyYXkoU2NoZW1hVHlwZVtdIGFycmF5KQotICAgICAgICB7Ci0gICAgICAgICAgICB3cml0ZVNob3J0KGFycmF5Lmxlbmd0aCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdyaXRlSGFuZGxlKGFycmF5W2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIE1hcCByZWFkQ2xhc3NuYW1lUmVmTWFwKCkKLSAgICAgICAgewotICAgICAgICAgICAgTWFwIHJlc3VsdCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgICAgICBpbnQgc2l6ZSA9IHJlYWRTaG9ydCgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSByZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgU2NoZW1hQ29tcG9uZW50LlJlZiBvYmogPSByZWFkSGFuZGxlKCk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnB1dChuYW1lLCBvYmopOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgd3JpdGVDbGFzc25hbWVNYXAoTWFwIHR5cGVzQnlDbGFzcykKLSAgICAgICAgewotICAgICAgICAgICAgd3JpdGVTaG9ydCh0eXBlc0J5Q2xhc3Muc2l6ZSgpKTsKLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IHR5cGVzQnlDbGFzcy5rZXlTZXQoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSAoU3RyaW5nKWkubmV4dCgpOwotICAgICAgICAgICAgICAgIHdyaXRlU3RyaW5nKGNsYXNzTmFtZSk7Ci0gICAgICAgICAgICAgICAgd3JpdGVIYW5kbGUoKChTY2hlbWFUeXBlLlJlZil0eXBlc0J5Q2xhc3MuZ2V0KGNsYXNzTmFtZSkpLmdldCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFNldCByZWFkTmFtZXNwYWNlcygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNldCByZXN1bHQgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICAgICAgaW50IHNpemUgPSByZWFkU2hvcnQoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBucyA9IHJlYWRTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICByZXN1bHQuYWRkKG5zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHdyaXRlTmFtZXNwYWNlcyhTZXQgbmFtZXNwYWNlcykKLSAgICAgICAgewotICAgICAgICAgICAgd3JpdGVTaG9ydChuYW1lc3BhY2VzLnNpemUoKSk7Ci0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBuYW1lc3BhY2VzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5zID0gKFN0cmluZylpLm5leHQoKTsKLSAgICAgICAgICAgICAgICB3cml0ZVN0cmluZyhucyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBPdXRwdXRTdHJlYW0gZ2V0U2F2ZXJTdHJlYW0oU3RyaW5nIG5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZpbGUgdGFyZ2V0RmlsZSA9IG5ldyBGaWxlKF9iYXNlU2F2ZURpciwgbmFtZSk7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0YXJnZXRGaWxlLmdldFBhcmVudEZpbGUoKS5ta2RpcnMoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVPdXRwdXRTdHJlYW0odGFyZ2V0RmlsZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgX25hbWUsIF9oYW5kbGUsIFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uSU9fRVhDRVBUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIElucHV0U3RyZWFtIGdldExvYWRlclN0cmVhbShTdHJpbmcgcmVzb3VyY2VuYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gX3Jlc291cmNlTG9hZGVyLmdldFJlc291cmNlQXNTdHJlYW0ocmVzb3VyY2VuYW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBGaW5pc2hlcyBsb2FkaW5nIGFuIGVsZW1lbnQgYWZ0ZXIgdGhlIGhlYWRlciBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZC4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBTY2hlbWFHbG9iYWxFbGVtZW50IGZpbmlzaExvYWRpbmdFbGVtZW50KCkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIGhhbmRsZSA9IG51bGw7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTY2hlbWFHbG9iYWxFbGVtZW50SW1wbCBpbXBsID0gbmV3IFNjaGVtYUdsb2JhbEVsZW1lbnRJbXBsKGdldFR5cGVTeXN0ZW0oKSk7Ci0gICAgICAgICAgICAgICAgc2hvcnQgcGFydGljbGVUeXBlID0gcmVhZFNob3J0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcnRpY2xlVHlwZSAhPSBTY2hlbWFQYXJ0aWNsZS5FTEVNRU5UKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbigiV3JvbmcgcGFydGljbGUgdHlwZSAiLCBfbmFtZSwgX2hhbmRsZSwgU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5CQURfUEFSVElDTEVfVFlQRSk7Ci0gICAgICAgICAgICAgICAgbG9hZFBhcnRpY2xlKGltcGwsIFNjaGVtYVBhcnRpY2xlLkVMRU1FTlQsIHRydWUpOwotICAgICAgICAgICAgICAgIGltcGwuc2V0RmlsZW5hbWUocmVhZFN0cmluZygpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gaW1wbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbigiQ2Fubm90IGxvYWQgdHlwZSBmcm9tIHR5cGVzeXN0ZW0iLCBfbmFtZSwgaGFuZGxlLCBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLk5FU1RFRF9FWENFUFRJT04sIGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmluYWxseQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlYWRFbmQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBTY2hlbWFHbG9iYWxBdHRyaWJ1dGUgZmluaXNoTG9hZGluZ0F0dHJpYnV0ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYUdsb2JhbEF0dHJpYnV0ZUltcGwgaW1wbCA9IG5ldyBTY2hlbWFHbG9iYWxBdHRyaWJ1dGVJbXBsKGdldFR5cGVTeXN0ZW0oKSk7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsb2FkQXR0cmlidXRlKGltcGwpOwotICAgICAgICAgICAgICAgIGltcGwuc2V0RmlsZW5hbWUocmVhZFN0cmluZygpKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBpbXBsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uKCJDYW5ub3QgbG9hZCB0eXBlIGZyb20gdHlwZXN5c3RlbSIsIF9uYW1lLCBfaGFuZGxlLCBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLk5FU1RFRF9FWENFUFRJT04sIGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmluYWxseQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlYWRFbmQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFNjaGVtYU1vZGVsR3JvdXAgZmluaXNoTG9hZGluZ01vZGVsR3JvdXAoKQotICAgICAgICB7Ci0gICAgICAgICAgICBTY2hlbWFNb2RlbEdyb3VwSW1wbCBpbXBsID0gbmV3IFNjaGVtYU1vZGVsR3JvdXBJbXBsKGdldFR5cGVTeXN0ZW0oKSk7Ci0KLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvYWRNb2RlbEdyb3VwKGltcGwpOwotICAgICAgICAgICAgICAgIHJldHVybiBpbXBsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uKCJDYW5ub3QgbG9hZCB0eXBlIGZyb20gdHlwZXN5c3RlbSIsIF9uYW1lLCBfaGFuZGxlLCBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLk5FU1RFRF9FWENFUFRJT04sIGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmluYWxseQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlYWRFbmQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFNjaGVtYUlkZW50aXR5Q29uc3RyYWludCBmaW5pc2hMb2FkaW5nSWRlbnRpdHlDb25zdHJhaW50KCkKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnRJbXBsIGltcGwgPSBuZXcgU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50SW1wbChnZXRUeXBlU3lzdGVtKCkpOwotICAgICAgICAgICAgICAgIGltcGwuc2V0TmFtZShyZWFkUU5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgaW1wbC5zZXRDb25zdHJhaW50Q2F0ZWdvcnkocmVhZFNob3J0KCkpOwotICAgICAgICAgICAgICAgIGltcGwuc2V0U2VsZWN0b3IocmVhZFN0cmluZygpKTsKLQotICAgICAgICAgICAgICAgIFN0cmluZ1tdIGZpZWxkcyA9IG5ldyBTdHJpbmdbcmVhZFNob3J0KCldOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IGZpZWxkcy5sZW5ndGggOyBpKyspCi0gICAgICAgICAgICAgICAgICAgIGZpZWxkc1tpXSA9IHJlYWRTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBpbXBsLnNldEZpZWxkcyhmaWVsZHMpOwotCi0gICAgICAgICAgICAgICAgaWYgKGltcGwuZ2V0Q29uc3RyYWludENhdGVnb3J5KCkgPT0gU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LkNDX0tFWVJFRikKLSAgICAgICAgICAgICAgICAgICAgaW1wbC5zZXRSZWZlcmVuY2VkS2V5KChTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmKXJlYWRIYW5kbGUoKSk7Ci0KLSAgICAgICAgICAgICAgICBpbnQgbWFwQ291bnQgPSByZWFkU2hvcnQoKTsKLSAgICAgICAgICAgICAgICBNYXAgbnNNYXBwaW5ncyA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgbWFwQ291bnQgOyBpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gcmVhZFN0cmluZygpOwotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdXJpID0gcmVhZFN0cmluZygpOwotICAgICAgICAgICAgICAgICAgICBuc01hcHBpbmdzLnB1dChwcmVmaXgsIHVyaSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGltcGwuc2V0TlNNYXAobnNNYXBwaW5ncyk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gaW1wbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbigiQ2Fubm90IGxvYWQgdHlwZSBmcm9tIHR5cGVzeXN0ZW0iLCBfbmFtZSwgX2hhbmRsZSwgU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5ORVNURURfRVhDRVBUSU9OLCBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbmFsbHkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZWFkRW5kKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBTY2hlbWFBdHRyaWJ1dGVHcm91cCBmaW5pc2hMb2FkaW5nQXR0cmlidXRlR3JvdXAoKQotICAgICAgICB7Ci0gICAgICAgICAgICBTY2hlbWFBdHRyaWJ1dGVHcm91cEltcGwgaW1wbCA9IG5ldyBTY2hlbWFBdHRyaWJ1dGVHcm91cEltcGwoZ2V0VHlwZVN5c3RlbSgpKTsKLQotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbG9hZEF0dHJpYnV0ZUdyb3VwKGltcGwpOwotICAgICAgICAgICAgICAgIHJldHVybiBpbXBsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uKCJDYW5ub3QgbG9hZCB0eXBlIGZyb20gdHlwZXN5c3RlbSIsIF9uYW1lLCBfaGFuZGxlLCBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLk5FU1RFRF9FWENFUFRJT04sIGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmluYWxseQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlYWRFbmQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBTY2hlbWFUeXBlIGZpbmlzaExvYWRpbmdUeXBlKCkKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2NoZW1hVHlwZUltcGwgaW1wbCA9IG5ldyBTY2hlbWFUeXBlSW1wbChnZXRUeXBlU3lzdGVtKCksIHRydWUpOwotICAgICAgICAgICAgICAgIGltcGwuc2V0TmFtZShyZWFkUU5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgaW1wbC5zZXRPdXRlclNjaGVtYVR5cGVSZWYocmVhZFR5cGVSZWYoKSk7Ci0gICAgICAgICAgICAgICAgaW1wbC5zZXRCYXNlRGVwdGgocmVhZFNob3J0KCkpOwotICAgICAgICAgICAgICAgIGltcGwuc2V0QmFzZVR5cGVSZWYocmVhZFR5cGVSZWYoKSk7Ci0gICAgICAgICAgICAgICAgaW1wbC5zZXREZXJpdmF0aW9uVHlwZShyZWFkU2hvcnQoKSk7Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlYWRTaG9ydCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9HTE9CQUw6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbXBsLnNldENvbnRhaW5lckZpZWxkUmVmKHJlYWRIYW5kbGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBGSUVMRF9MT0NBTEFUVFI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbXBsLnNldENvbnRhaW5lckZpZWxkSW5kZXgoKHNob3J0KTEsIHJlYWRTaG9ydCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEZJRUxEX0xPQ0FMRUxUOgotICAgICAgICAgICAgICAgICAgICAgICAgaW1wbC5zZXRDb250YWluZXJGaWVsZEluZGV4KChzaG9ydCkyLCByZWFkU2hvcnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaW1wbC5zZXRGdWxsSmF2YU5hbWUocmVhZFN0cmluZygpKTsKLSAgICAgICAgICAgICAgICBpbXBsLnNldEZ1bGxKYXZhSW1wbE5hbWUocmVhZFN0cmluZygpKTsKLQotICAgICAgICAgICAgICAgIGltcGwuc2V0QW5vbnltb3VzVHlwZVJlZnMocmVhZFR5cGVSZWZBcnJheSgpKTsKLQotICAgICAgICAgICAgICAgIGltcGwuc2V0QW5vbnltb3VzVW5pb25NZW1iZXJPcmRpbmFsKHJlYWRTaG9ydCgpKTsKLQotICAgICAgICAgICAgICAgIGludCBmbGFnczsKLSAgICAgICAgICAgICAgICBmbGFncyA9IHJlYWRJbnQoKTsKLQotCi0gICAgICAgICAgICAgICAgYm9vbGVhbiBpc0NvbXBsZXhUeXBlID0gKChmbGFncyAmIEZMQUdfU0lNUExFX1RZUEUpID09IDApOwotICAgICAgICAgICAgICAgIGltcGwuc2V0Q29tcGlsZWQoKGZsYWdzICYgRkxBR19DT01QSUxFRCkgIT0gMCk7Ci0gICAgICAgICAgICAgICAgaW1wbC5zZXREb2N1bWVudFR5cGUoKGZsYWdzICYgRkxBR19ET0NVTUVOVF9UWVBFKSAhPSAwKTsKLSAgICAgICAgICAgICAgICBpbXBsLnNldEF0dHJpYnV0ZVR5cGUoKGZsYWdzICYgRkxBR19BVFRSSUJVVEVfVFlQRSkgIT0gMCk7Ci0gICAgICAgICAgICAgICAgaW1wbC5zZXRTaW1wbGVUeXBlKCFpc0NvbXBsZXhUeXBlKTsKLQotICAgICAgICAgICAgICAgIHNob3J0IGNvbXBsZXhWYXJpZXR5ID0gU2NoZW1hVHlwZS5OT1RfQ09NUExFWF9UWVBFOwotICAgICAgICAgICAgICAgIGlmIChpc0NvbXBsZXhUeXBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW1wbC5zZXRBYnN0cmFjdEZpbmFsKChmbGFncyAmIEZMQUdfQUJTVFJBQ1QpICE9IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAoZmxhZ3MgJiBGTEFHX0ZJTkFMX0VYVCkgIT0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIChmbGFncyAmIEZMQUdfRklOQUxfUkVTVCkgIT0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIChmbGFncyAmIEZMQUdfRklOQUxfTElTVCkgIT0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIChmbGFncyAmIEZMQUdfRklOQUxfVU5JT04pICE9IDApOwotICAgICAgICAgICAgICAgICAgICBpbXBsLnNldEJsb2NrKChmbGFncyAmIEZMQUdfQkxPQ0tfRVhUKSAhPSAwLAotICAgICAgICAgICAgICAgICAgICAgICAgKGZsYWdzICYgRkxBR19CTE9DS19SRVNUKSAhPSAwKTsKLQotICAgICAgICAgICAgICAgICAgICBpbXBsLnNldE9yZGVyU2Vuc2l0aXZlKChmbGFncyAmIEZMQUdfT1JERVJfU0VOU0lUSVZFKSAhPSAwKTsKLSAgICAgICAgICAgICAgICAgICAgY29tcGxleFZhcmlldHkgPSByZWFkU2hvcnQoKTsKLSAgICAgICAgICAgICAgICAgICAgaW1wbC5zZXRDb21wbGV4VHlwZVZhcmlldHkoY29tcGxleFZhcmlldHkpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIEF0dHJpYnV0ZSBNb2RlbCBUYWJsZQotICAgICAgICAgICAgICAgICAgICBTY2hlbWFBdHRyaWJ1dGVNb2RlbEltcGwgYXR0ck1vZGVsID0gbmV3IFNjaGVtYUF0dHJpYnV0ZU1vZGVsSW1wbCgpOwotCi0gICAgICAgICAgICAgICAgICAgIHNob3J0IGF0dHJDb3VudCA9IHJlYWRTaG9ydCgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHJDb3VudDsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgYXR0ck1vZGVsLmFkZEF0dHJpYnV0ZShyZWFkQXR0cmlidXRlRGF0YSgpKTsKLQotICAgICAgICAgICAgICAgICAgICBhdHRyTW9kZWwuc2V0V2lsZGNhcmRTZXQocmVhZFFOYW1lU2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBhdHRyTW9kZWwuc2V0V2lsZGNhcmRQcm9jZXNzKHJlYWRTaG9ydCgpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBBdHRyaWJ1dGUgUHJvcGVydHkgVGFibGUKLSAgICAgICAgICAgICAgICAgICAgTWFwIGF0dHJQcm9wZXJ0aWVzID0gbmV3IExpbmtlZEhhc2hNYXAoKTsKLSAgICAgICAgICAgICAgICAgICAgc2hvcnQgYXR0clByb3BDb3VudCA9IHJlYWRTaG9ydCgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHJQcm9wQ291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgU2NoZW1hUHJvcGVydHkgcHJvcCA9IHJlYWRQcm9wZXJ0eURhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvcC5pc0F0dHJpYnV0ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uKCJBdHRyaWJ1dGUgcHJvcGVydHkgIiArIGkgKyAiIGlzIG5vdCBhbiBhdHRyaWJ1dGUiLCBfbmFtZSwgX2hhbmRsZSwgU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5XUk9OR19QUk9QRVJUWV9UWVBFKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJQcm9wZXJ0aWVzLnB1dChwcm9wLmdldE5hbWUoKSwgcHJvcCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBTY2hlbWFQYXJ0aWNsZSBjb250ZW50TW9kZWwgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBNYXAgZWxlbVByb3BlcnRpZXMgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBzaG9ydCBpc0FsbCA9IDA7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBsZXhWYXJpZXR5ID09IFNjaGVtYVR5cGUuRUxFTUVOVF9DT05URU5UIHx8IGNvbXBsZXhWYXJpZXR5ID09IFNjaGVtYVR5cGUuTUlYRURfQ09OVEVOVCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udGVudCBNb2RlbCBUcmVlCi0gICAgICAgICAgICAgICAgICAgICAgICBpc0FsbCA9IHJlYWRTaG9ydCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgU2NoZW1hUGFydGljbGVbXSBwYXJ0cyA9IHJlYWRQYXJ0aWNsZUFycmF5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFydHMubGVuZ3RoID09IDEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudE1vZGVsID0gcGFydHNbMF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChwYXJ0cy5sZW5ndGggPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50TW9kZWwgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uKCJDb250ZW50IG1vZGVsIG5vdCB3ZWxsLWZvcm1lZCIsIF9uYW1lLCBfaGFuZGxlLCBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLk1BTEZPUk1FRF9DT05URU5UX01PREVMKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRWxlbWVudCBQcm9wZXJ0eSBUYWJsZQotCi0gICAgICAgICAgICAgICAgICAgICAgICBlbGVtUHJvcGVydGllcyA9IG5ldyBMaW5rZWRIYXNoTWFwKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBlbGVtUHJvcENvdW50ID0gcmVhZFNob3J0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVsZW1Qcm9wQ291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY2hlbWFQcm9wZXJ0eSBwcm9wID0gcmVhZFByb3BlcnR5RGF0YSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wLmlzQXR0cmlidXRlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uKCJFbGVtZW50IHByb3BlcnR5ICIgKyBpICsgIiBpcyBub3QgYW4gZWxlbWVudCIsIF9uYW1lLCBfaGFuZGxlLCBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLldST05HX1BST1BFUlRZX1RZUEUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1Qcm9wZXJ0aWVzLnB1dChwcm9wLmdldE5hbWUoKSwgcHJvcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpbXBsLnNldENvbnRlbnRNb2RlbChjb250ZW50TW9kZWwsIGF0dHJNb2RlbCwgZWxlbVByb3BlcnRpZXMsIGF0dHJQcm9wZXJ0aWVzLCBpc0FsbCA9PSAxKTsKLSAgICAgICAgICAgICAgICAgICAgU3RzY0NvbXBsZXhUeXBlUmVzb2x2ZXIuV2lsZGNhcmRSZXN1bHQgd2NFbHQgPSBTdHNjQ29tcGxleFR5cGVSZXNvbHZlci5zdW1tYXJpemVFbHRXaWxkY2FyZHMoY29udGVudE1vZGVsKTsKLSAgICAgICAgICAgICAgICAgICAgU3RzY0NvbXBsZXhUeXBlUmVzb2x2ZXIuV2lsZGNhcmRSZXN1bHQgd2NBdHRyID0gU3RzY0NvbXBsZXhUeXBlUmVzb2x2ZXIuc3VtbWFyaXplQXR0cldpbGRjYXJkcyhhdHRyTW9kZWwpOwotICAgICAgICAgICAgICAgICAgICBpbXBsLnNldFdpbGRjYXJkU3VtbWFyeSh3Y0VsdC50eXBlZFdpbGRjYXJkcywgd2NFbHQuaGFzV2lsZGNhcmRzLCB3Y0F0dHIudHlwZWRXaWxkY2FyZHMsIHdjQXR0ci5oYXNXaWxkY2FyZHMpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghaXNDb21wbGV4VHlwZSB8fCBjb21wbGV4VmFyaWV0eSA9PSBTY2hlbWFUeXBlLlNJTVBMRV9DT05URU5UKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc2hvcnQgc2ltcGxlVmFyaWV0eSA9IHJlYWRTaG9ydCgpOwotICAgICAgICAgICAgICAgICAgICBpbXBsLnNldFNpbXBsZVR5cGVWYXJpZXR5KHNpbXBsZVZhcmlldHkpOwotCi0gICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNTdHJpbmdFbnVtID0gKChmbGFncyAmIEZMQUdfU1RSSU5HRU5VTSkgIT0gMCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaW1wbC5zZXRPcmRlcmVkKChmbGFncyAmIEZMQUdfT1JERVJFRCkgIT0gMCA/IFNjaGVtYVR5cGUuVU5PUkRFUkVEIDogKChmbGFncyAmIEZMQUdfVE9UQUxfT1JERVIpICE9IDAgPyBTY2hlbWFUeXBlLlRPVEFMX09SREVSIDogU2NoZW1hVHlwZS5QQVJUSUFMX09SREVSKSk7Ci0gICAgICAgICAgICAgICAgICAgIGltcGwuc2V0Qm91bmRlZCgoZmxhZ3MgJiBGTEFHX0JPVU5ERUQpICE9IDApOwotICAgICAgICAgICAgICAgICAgICBpbXBsLnNldEZpbml0ZSgoZmxhZ3MgJiBGTEFHX0ZJTklURSkgIT0gMCk7Ci0gICAgICAgICAgICAgICAgICAgIGltcGwuc2V0TnVtZXJpYygoZmxhZ3MgJiBGTEFHX05VTUVSSUMpICE9IDApOwotICAgICAgICAgICAgICAgICAgICBpbXBsLnNldFVuaW9uT2ZMaXN0cygoZmxhZ3MgJiBGTEFHX1VOSU9OX09GX0xJU1RTKSAhPSAwKTsKLSAgICAgICAgICAgICAgICAgICAgaW1wbC5zZXRTaW1wbGVGaW5hbCgoZmxhZ3MgJiBGTEFHX0ZJTkFMX1JFU1QpICE9IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAoZmxhZ3MgJiBGTEFHX0ZJTkFMX0xJU1QpICE9IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAoZmxhZ3MgJiBGTEFHX0ZJTkFMX1VOSU9OKSAhPSAwKTsKLQotICAgICAgICAgICAgICAgICAgICBYbWxWYWx1ZVJlZltdIGZhY2V0cyA9IG5ldyBYbWxWYWx1ZVJlZltTY2hlbWFUeXBlLkxBU1RfRkFDRVQgKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgYm9vbGVhbltdIGZpeGVkRmFjZXRzID0gbmV3IGJvb2xlYW5bU2NoZW1hVHlwZS5MQVNUX0ZBQ0VUICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIHNob3J0IGZhY2V0Q291bnQgPSByZWFkU2hvcnQoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmYWNldENvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IGZhY2V0Q29kZSA9IHJlYWRTaG9ydCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZmFjZXRzW2ZhY2V0Q29kZV0gPSByZWFkWG1sVmFsdWVPYmplY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkRmFjZXRzW2ZhY2V0Q29kZV0gPSAocmVhZFNob3J0KCkgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaW1wbC5zZXRCYXNpY0ZhY2V0cyhmYWNldHMsIGZpeGVkRmFjZXRzKTsKLQotICAgICAgICAgICAgICAgICAgICBpbXBsLnNldFdoaXRlU3BhY2VSdWxlKHJlYWRTaG9ydCgpKTsKLQotICAgICAgICAgICAgICAgICAgICBpbXBsLnNldFBhdHRlcm5GYWNldCgoZmxhZ3MgJiBGTEFHX0hBU19QQVRURVJOKSAhPSAwKTsKLQotICAgICAgICAgICAgICAgICAgICBzaG9ydCBwYXR0ZXJuQ291bnQgPSByZWFkU2hvcnQoKTsKLSAgICAgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnJlZ2V4LlJlZ3VsYXJFeHByZXNzaW9uW10gcGF0dGVybnMgPSBuZXcgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnJlZ2V4LlJlZ3VsYXJFeHByZXNzaW9uW3BhdHRlcm5Db3VudF07Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGF0dGVybkNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5zW2ldID0gbmV3IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5yZWdleC5SZWd1bGFyRXhwcmVzc2lvbihyZWFkU3RyaW5nKCksICJYIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaW1wbC5zZXRQYXR0ZXJucyhwYXR0ZXJucyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc2hvcnQgZW51bUNvdW50ID0gcmVhZFNob3J0KCk7Ci0gICAgICAgICAgICAgICAgICAgIFhtbFZhbHVlUmVmW10gZW51bVZhbHVlcyA9IG5ldyBYbWxWYWx1ZVJlZltlbnVtQ291bnRdOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVudW1Db3VudDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbnVtVmFsdWVzW2ldID0gcmVhZFhtbFZhbHVlT2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaW1wbC5zZXRFbnVtZXJhdGlvblZhbHVlcyhlbnVtQ291bnQgPT0gMCA/IG51bGwgOiBlbnVtVmFsdWVzKTsKLQotICAgICAgICAgICAgICAgICAgICBpbXBsLnNldEJhc2VFbnVtVHlwZVJlZihyZWFkVHlwZVJlZigpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3RyaW5nRW51bSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgc2VDb3VudCA9IHJlYWRTaG9ydCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgU2NoZW1hU3RyaW5nRW51bUVudHJ5W10gZW50cmllcyA9IG5ldyBTY2hlbWFTdHJpbmdFbnVtRW50cnlbc2VDb3VudF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlQ291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzW2ldID0gbmV3IFNjaGVtYVN0cmluZ0VudW1FbnRyeUltcGwocmVhZFN0cmluZygpLCByZWFkU2hvcnQoKSwgcmVhZFN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGltcGwuc2V0U3RyaW5nRW51bUVudHJpZXMoZW50cmllcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHNpbXBsZVZhcmlldHkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5BVE9NSUM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbC5zZXRQcmltaXRpdmVUeXBlUmVmKHJlYWRUeXBlUmVmKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGwuc2V0RGVjaW1hbFNpemUocmVhZEludCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkxJU1Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbC5zZXRQcmltaXRpdmVUeXBlUmVmKEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLlNUX0FOWV9TSU1QTEUuZ2V0UmVmKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGwuc2V0TGlzdEl0ZW1UeXBlUmVmKHJlYWRUeXBlUmVmKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuVU5JT046Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbC5zZXRQcmltaXRpdmVUeXBlUmVmKEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLlNUX0FOWV9TSU1QTEUuZ2V0UmVmKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGwuc2V0VW5pb25NZW1iZXJUeXBlUmVmcyhyZWFkVHlwZVJlZkFycmF5KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uKCJTaW1wbGUgdHlwZSBkb2VzIG5vdCBoYXZlIGEgcmVjb2duaXplZCB2YXJpZXR5IiwgX25hbWUsIF9oYW5kbGUsIFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uV1JPTkdfU0lNUExFX1ZBUklFVFkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaW1wbC5zZXRGaWxlbmFtZShyZWFkU3RyaW5nKCkpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIGltcGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24oIkNhbm5vdCBsb2FkIHR5cGUgZnJvbSB0eXBlc3lzdGVtIiwgX25hbWUsIF9oYW5kbGUsIFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uTkVTVEVEX0VYQ0VQVElPTiwgZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbGx5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVhZEVuZCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB3cml0ZVR5cGVEYXRhKFNjaGVtYVR5cGUgdHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgd3JpdGVRTmFtZSh0eXBlLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICB3cml0ZVR5cGUodHlwZS5nZXRPdXRlclR5cGUoKSk7Ci0gICAgICAgICAgICB3cml0ZVNob3J0KCgoU2NoZW1hVHlwZUltcGwpdHlwZSkuZ2V0QmFzZURlcHRoKCkpOwotICAgICAgICAgICAgd3JpdGVUeXBlKHR5cGUuZ2V0QmFzZVR5cGUoKSk7Ci0gICAgICAgICAgICB3cml0ZVNob3J0KHR5cGUuZ2V0RGVyaXZhdGlvblR5cGUoKSk7Ci0gICAgICAgICAgICBpZiAodHlwZS5nZXRDb250YWluZXJGaWVsZCgpID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgd3JpdGVTaG9ydChGSUVMRF9OT05FKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUuZ2V0T3V0ZXJUeXBlKCkuaXNBdHRyaWJ1dGVUeXBlKCkgfHwgdHlwZS5nZXRPdXRlclR5cGUoKS5pc0RvY3VtZW50VHlwZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdyaXRlU2hvcnQoRklFTERfR0xPQkFMKTsKLSAgICAgICAgICAgICAgICB3cml0ZUhhbmRsZSgoU2NoZW1hQ29tcG9uZW50KXR5cGUuZ2V0Q29udGFpbmVyRmllbGQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh0eXBlLmdldENvbnRhaW5lckZpZWxkKCkuaXNBdHRyaWJ1dGUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB3cml0ZVNob3J0KEZJRUxEX0xPQ0FMQVRUUik7Ci0gICAgICAgICAgICAgICAgd3JpdGVTaG9ydCgoKFNjaGVtYVR5cGVJbXBsKXR5cGUuZ2V0T3V0ZXJUeXBlKCkpLmdldEluZGV4Rm9yTG9jYWxBdHRyaWJ1dGUoKFNjaGVtYUxvY2FsQXR0cmlidXRlKXR5cGUuZ2V0Q29udGFpbmVyRmllbGQoKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdyaXRlU2hvcnQoRklFTERfTE9DQUxFTFQpOwotICAgICAgICAgICAgICAgIHdyaXRlU2hvcnQoKChTY2hlbWFUeXBlSW1wbCl0eXBlLmdldE91dGVyVHlwZSgpKS5nZXRJbmRleEZvckxvY2FsRWxlbWVudCgoU2NoZW1hTG9jYWxFbGVtZW50KXR5cGUuZ2V0Q29udGFpbmVyRmllbGQoKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgd3JpdGVTdHJpbmcodHlwZS5nZXRGdWxsSmF2YU5hbWUoKSk7Ci0gICAgICAgICAgICB3cml0ZVN0cmluZyh0eXBlLmdldEZ1bGxKYXZhSW1wbE5hbWUoKSk7Ci0gICAgICAgICAgICB3cml0ZVR5cGVBcnJheSh0eXBlLmdldEFub255bW91c1R5cGVzKCkpOwotICAgICAgICAgICAgd3JpdGVTaG9ydCh0eXBlLmdldEFub255bW91c1VuaW9uTWVtYmVyT3JkaW5hbCgpKTsKLQotICAgICAgICAgICAgaW50IGZsYWdzID0gMDsKLSAgICAgICAgICAgIGlmICh0eXBlLmlzU2ltcGxlVHlwZSgpKQotICAgICAgICAgICAgICAgIGZsYWdzIHw9IEZMQUdfU0lNUExFX1RZUEU7Ci0gICAgICAgICAgICBpZiAodHlwZS5pc0RvY3VtZW50VHlwZSgpKQotICAgICAgICAgICAgICAgIGZsYWdzIHw9IEZMQUdfRE9DVU1FTlRfVFlQRTsKLSAgICAgICAgICAgIGlmICh0eXBlLmlzQXR0cmlidXRlVHlwZSgpKQotICAgICAgICAgICAgICAgIGZsYWdzIHw9IEZMQUdfQVRUUklCVVRFX1RZUEU7Ci0gICAgICAgICAgICBpZiAodHlwZS5vcmRlcmVkKCkgIT0gU2NoZW1hVHlwZS5VTk9SREVSRUQpCi0gICAgICAgICAgICAgICAgZmxhZ3MgfD0gRkxBR19PUkRFUkVEOwotICAgICAgICAgICAgaWYgKHR5cGUub3JkZXJlZCgpID09IFNjaGVtYVR5cGUuVE9UQUxfT1JERVIpCi0gICAgICAgICAgICAgICAgZmxhZ3MgfD0gRkxBR19UT1RBTF9PUkRFUjsKLSAgICAgICAgICAgIGlmICh0eXBlLmlzQm91bmRlZCgpKQotICAgICAgICAgICAgICAgIGZsYWdzIHw9IEZMQUdfQk9VTkRFRDsKLSAgICAgICAgICAgIGlmICh0eXBlLmlzRmluaXRlKCkpCi0gICAgICAgICAgICAgICAgZmxhZ3MgfD0gRkxBR19GSU5JVEU7Ci0gICAgICAgICAgICBpZiAodHlwZS5pc051bWVyaWMoKSkKLSAgICAgICAgICAgICAgICBmbGFncyB8PSBGTEFHX05VTUVSSUM7Ci0gICAgICAgICAgICBpZiAodHlwZS5oYXNTdHJpbmdFbnVtVmFsdWVzKCkpCi0gICAgICAgICAgICAgICAgZmxhZ3MgfD0gRkxBR19TVFJJTkdFTlVNOwotICAgICAgICAgICAgaWYgKCgoU2NoZW1hVHlwZUltcGwpdHlwZSkuaXNVbmlvbk9mTGlzdHMoKSkKLSAgICAgICAgICAgICAgICBmbGFncyB8PSBGTEFHX1VOSU9OX09GX0xJU1RTOwotICAgICAgICAgICAgaWYgKHR5cGUuaGFzUGF0dGVybkZhY2V0KCkpCi0gICAgICAgICAgICAgICAgZmxhZ3MgfD0gRkxBR19IQVNfUEFUVEVSTjsKLSAgICAgICAgICAgIGlmICh0eXBlLmlzT3JkZXJTZW5zaXRpdmUoKSkKLSAgICAgICAgICAgICAgICBmbGFncyB8PSBGTEFHX09SREVSX1NFTlNJVElWRTsKLQotICAgICAgICAgICAgaWYgKHR5cGUuYmxvY2tFeHRlbnNpb24oKSkKLSAgICAgICAgICAgICAgICBmbGFncyB8PSBGTEFHX0JMT0NLX0VYVDsKLSAgICAgICAgICAgIGlmICh0eXBlLmJsb2NrUmVzdHJpY3Rpb24oKSkKLSAgICAgICAgICAgICAgICBmbGFncyB8PSBGTEFHX0JMT0NLX1JFU1Q7Ci0gICAgICAgICAgICBpZiAodHlwZS5maW5hbEV4dGVuc2lvbigpKQotICAgICAgICAgICAgICAgIGZsYWdzIHw9IEZMQUdfRklOQUxfRVhUOwotICAgICAgICAgICAgaWYgKHR5cGUuZmluYWxSZXN0cmljdGlvbigpKQotICAgICAgICAgICAgICAgIGZsYWdzIHw9IEZMQUdfRklOQUxfRVhUOwotICAgICAgICAgICAgaWYgKHR5cGUuZmluYWxMaXN0KCkpCi0gICAgICAgICAgICAgICAgZmxhZ3MgfD0gRkxBR19GSU5BTF9MSVNUOwotICAgICAgICAgICAgaWYgKHR5cGUuZmluYWxVbmlvbigpKQotICAgICAgICAgICAgICAgIGZsYWdzIHw9IEZMQUdfRklOQUxfVU5JT047Ci0gICAgICAgICAgICBpZiAodHlwZS5pc0Fic3RyYWN0KCkpCi0gICAgICAgICAgICAgICAgZmxhZ3MgfD0gRkxBR19BQlNUUkFDVDsKLQotICAgICAgICAgICAgd3JpdGVJbnQoZmxhZ3MpOwotCi0gICAgICAgICAgICBpZiAoIXR5cGUuaXNTaW1wbGVUeXBlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgd3JpdGVTaG9ydCh0eXBlLmdldENvbnRlbnRUeXBlKCkpOwotCi0gICAgICAgICAgICAgICAgLy8gQXR0cmlidXRlIE1vZGVsIFRhYmxlCi0gICAgICAgICAgICAgICAgU2NoZW1hQXR0cmlidXRlTW9kZWwgYXR0ck1vZGVsID0gdHlwZS5nZXRBdHRyaWJ1dGVNb2RlbCgpOwotICAgICAgICAgICAgICAgIFNjaGVtYUxvY2FsQXR0cmlidXRlW10gYXR0cnMgPSBhdHRyTW9kZWwuZ2V0QXR0cmlidXRlcygpOwotCi0gICAgICAgICAgICAgICAgd3JpdGVTaG9ydChhdHRycy5sZW5ndGgpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHdyaXRlQXR0cmlidXRlRGF0YShhdHRyc1tpXSk7Ci0KLSAgICAgICAgICAgICAgICB3cml0ZVFOYW1lU2V0KGF0dHJNb2RlbC5nZXRXaWxkY2FyZFNldCgpKTsKLSAgICAgICAgICAgICAgICB3cml0ZVNob3J0KGF0dHJNb2RlbC5nZXRXaWxkY2FyZFByb2Nlc3MoKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBBdHRyaWJ1dGUgUHJvcGVydHkgVGFibGUKLSAgICAgICAgICAgICAgICBTY2hlbWFQcm9wZXJ0eVtdIGF0dHJQcm9wZXJ0aWVzID0gdHlwZS5nZXRBdHRyaWJ1dGVQcm9wZXJ0aWVzKCk7Ci0gICAgICAgICAgICAgICAgd3JpdGVTaG9ydChhdHRyUHJvcGVydGllcy5sZW5ndGgpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0clByb3BlcnRpZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHdyaXRlUHJvcGVydHlEYXRhKGF0dHJQcm9wZXJ0aWVzW2ldKTsKLQotICAgICAgICAgICAgICAgIGlmICh0eXBlLmdldENvbnRlbnRUeXBlKCkgPT0gU2NoZW1hVHlwZS5FTEVNRU5UX0NPTlRFTlQgfHwKLSAgICAgICAgICAgICAgICAgICAgdHlwZS5nZXRDb250ZW50VHlwZSgpID09IFNjaGVtYVR5cGUuTUlYRURfQ09OVEVOVCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIENvbnRlbnQgTW9kZWwgVHJlZQotICAgICAgICAgICAgICAgICAgICB3cml0ZVNob3J0KHR5cGUuaGFzQWxsQ29udGVudCgpID8gMSA6IDApOwotICAgICAgICAgICAgICAgICAgICBTY2hlbWFQYXJ0aWNsZVtdIHBhcnRzOwotICAgICAgICAgICAgICAgICAgICBpZiAodHlwZS5nZXRDb250ZW50TW9kZWwoKSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMgPSBuZXcgU2NoZW1hUGFydGljbGVbXSB7IHR5cGUuZ2V0Q29udGVudE1vZGVsKCkgfTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcGFydHMgPSBuZXcgU2NoZW1hUGFydGljbGVbMF07Ci0KLSAgICAgICAgICAgICAgICAgICAgd3JpdGVQYXJ0aWNsZUFycmF5KHBhcnRzKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBFbGVtZW50IFByb3BlcnR5IFRhYmxlCi0gICAgICAgICAgICAgICAgICAgIFNjaGVtYVByb3BlcnR5W10gZWx0UHJvcGVydGllcyA9IHR5cGUuZ2V0RWxlbWVudFByb3BlcnRpZXMoKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVTaG9ydChlbHRQcm9wZXJ0aWVzLmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZWx0UHJvcGVydGllcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlUHJvcGVydHlEYXRhKGVsdFByb3BlcnRpZXNbaV0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHR5cGUuaXNTaW1wbGVUeXBlKCkgfHwgdHlwZS5nZXRDb250ZW50VHlwZSgpID09IFNjaGVtYVR5cGUuU0lNUExFX0NPTlRFTlQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgd3JpdGVTaG9ydCh0eXBlLmdldFNpbXBsZVZhcmlldHkoKSk7Ci0KLSAgICAgICAgICAgICAgICBpbnQgZmFjZXRDb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gU2NoZW1hVHlwZS5MQVNUX0ZBQ0VUOyBpKyspCi0gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlLmdldEZhY2V0KGkpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICBmYWNldENvdW50Kys7Ci0gICAgICAgICAgICAgICAgd3JpdGVTaG9ydChmYWNldENvdW50KTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSBTY2hlbWFUeXBlLkxBU1RfRkFDRVQ7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFhtbEFueVNpbXBsZVR5cGUgZmFjZXQgPSB0eXBlLmdldEZhY2V0KGkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZmFjZXQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVTaG9ydChpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlWG1sVmFsdWVPYmplY3QoZmFjZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVTaG9ydCh0eXBlLmlzRmFjZXRGaXhlZChpKSA/IDEgOiAwKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHdyaXRlU2hvcnQodHlwZS5nZXRXaGl0ZVNwYWNlUnVsZSgpKTsKLQotICAgICAgICAgICAgICAgIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5yZWdleC5SZWd1bGFyRXhwcmVzc2lvbltdIHBhdHRlcm5zID0gKChTY2hlbWFUeXBlSW1wbCl0eXBlKS5nZXRQYXR0ZXJuRXhwcmVzc2lvbnMoKTsKLSAgICAgICAgICAgICAgICB3cml0ZVNob3J0KHBhdHRlcm5zLmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXR0ZXJucy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJpbmcocGF0dGVybnNbaV0uZ2V0UGF0dGVybigpKTsKLQotICAgICAgICAgICAgICAgIFhtbEFueVNpbXBsZVR5cGVbXSBlbnVtVmFsdWVzID0gdHlwZS5nZXRFbnVtZXJhdGlvblZhbHVlcygpOwotICAgICAgICAgICAgICAgIGlmIChlbnVtVmFsdWVzID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHdyaXRlU2hvcnQoMCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVTaG9ydChlbnVtVmFsdWVzLmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZW51bVZhbHVlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlWG1sVmFsdWVPYmplY3QoZW51bVZhbHVlc1tpXSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gbmV3IGZvciB2ZXJzaW9uIDIuMwotICAgICAgICAgICAgICAgIHdyaXRlVHlwZSh0eXBlLmdldEJhc2VFbnVtVHlwZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZS5oYXNTdHJpbmdFbnVtVmFsdWVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTY2hlbWFTdHJpbmdFbnVtRW50cnlbXSBlbnRyaWVzID0gdHlwZS5nZXRTdHJpbmdFbnVtRW50cmllcygpOwotICAgICAgICAgICAgICAgICAgICB3cml0ZVNob3J0KGVudHJpZXMubGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVN0cmluZyhlbnRyaWVzW2ldLmdldFN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlU2hvcnQoZW50cmllc1tpXS5nZXRJbnRWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlU3RyaW5nKGVudHJpZXNbaV0uZ2V0RW51bU5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0U2ltcGxlVmFyaWV0eSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkFUT01JQzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlVHlwZSh0eXBlLmdldFByaW1pdGl2ZVR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUludCh0eXBlLmdldERlY2ltYWxTaXplKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkxJU1Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVR5cGUodHlwZS5nZXRMaXN0SXRlbVR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuVU5JT046Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVR5cGVBcnJheSh0eXBlLmdldFVuaW9uTWVtYmVyVHlwZXMoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHdyaXRlU3RyaW5nKHR5cGUuZ2V0U291cmNlTmFtZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgcmVhZEV4dGVuc2lvbnNMaXN0KCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGNvdW50ID0gcmVhZFNob3J0KCk7Ci0gICAgICAgICAgICBhc3NlcnQgY291bnQgPT0gMDsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlYWRTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICByZWFkU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgcmVhZFN0cmluZygpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgU2NoZW1hTG9jYWxBdHRyaWJ1dGUgcmVhZEF0dHJpYnV0ZURhdGEoKQotICAgICAgICB7Ci0gICAgICAgICAgICBTY2hlbWFMb2NhbEF0dHJpYnV0ZUltcGwgcmVzdWx0ID0gbmV3IFNjaGVtYUxvY2FsQXR0cmlidXRlSW1wbCgpOwotICAgICAgICAgICAgbG9hZEF0dHJpYnV0ZShyZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgbG9hZE1vZGVsR3JvdXAoU2NoZW1hTW9kZWxHcm91cEltcGwgcmVzdWx0KQotICAgICAgICB7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuaW5pdChyZWFkUU5hbWUoKSwgcmVhZFN0cmluZygpLCByZWFkU2hvcnQoKSA9PSAxLCBhdExlYXN0KDIsIDE1LCAwKSA/IHJlYWRTaG9ydCgpID09IDEgOiBmYWxzZSwgR3JvdXBEb2N1bWVudC5GYWN0b3J5LnBhcnNlKCByZWFkU3RyaW5nKCkgKS5nZXRHcm91cCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoICggWG1sRXhjZXB0aW9uIGUgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCBlLmdldE1lc3NhZ2UoKSwgZSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBsb2FkQXR0cmlidXRlR3JvdXAoU2NoZW1hQXR0cmlidXRlR3JvdXBJbXBsIHJlc3VsdCkKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmluaXQoIHJlYWRRTmFtZSgpLCByZWFkU3RyaW5nKCksIHJlYWRTaG9ydCgpID09IDEsIGF0TGVhc3QoMiwgMTUsIDApID8gcmVhZFNob3J0KCkgPT0gMSA6IGZhbHNlLCBBdHRyaWJ1dGVHcm91cERvY3VtZW50LkZhY3RvcnkucGFyc2UoIHJlYWRTdHJpbmcoKSApLmdldEF0dHJpYnV0ZUdyb3VwKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKCBYbWxFeGNlcHRpb24gZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIGUuZ2V0TWVzc2FnZSgpLCBlICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGxvYWRBdHRyaWJ1dGUoU2NoZW1hTG9jYWxBdHRyaWJ1dGVJbXBsIHJlc3VsdCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gbmFtZSwgdHlwZSwgdXNlLCBkZWZ0ZXh0LCBkZWZ2YWwsIGZpeGVkLCBzb2FwYXJyYXl0eXBlCi0gICAgICAgICAgICByZXN1bHQuaW5pdChyZWFkUU5hbWUoKSwgcmVhZFR5cGVSZWYoKSwgcmVhZFNob3J0KCksIHJlYWRTdHJpbmcoKSwgbnVsbCwgYXRMZWFzdCgyLCAxNiwgMCkgPyByZWFkWG1sVmFsdWVPYmplY3QoKSA6IG51bGwsIHJlYWRTaG9ydCgpID09IDEsIHJlYWRTT0FQQXJyYXlUeXBlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB3cml0ZUF0dHJpYnV0ZURhdGEoU2NoZW1hTG9jYWxBdHRyaWJ1dGUgYXR0cikKLSAgICAgICAgewotICAgICAgICAgICAgd3JpdGVRTmFtZShhdHRyLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICB3cml0ZVR5cGUoYXR0ci5nZXRUeXBlKCkpOwotICAgICAgICAgICAgd3JpdGVTaG9ydChhdHRyLmdldFVzZSgpKTsKLSAgICAgICAgICAgIHdyaXRlU3RyaW5nKGF0dHIuZ2V0RGVmYXVsdFRleHQoKSk7Ci0gICAgICAgICAgICB3cml0ZVhtbFZhbHVlT2JqZWN0KGF0dHIuZ2V0RGVmYXVsdFZhbHVlKCkpOwotICAgICAgICAgICAgd3JpdGVTaG9ydChhdHRyLmlzRml4ZWQoKSA/IDEgOiAwKTsKLSAgICAgICAgICAgIHdyaXRlU09BUEFycmF5VHlwZSgoKFNjaGVtYVdTRExBcnJheVR5cGUpYXR0cikuZ2V0V1NETEFycmF5VHlwZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgd3JpdGVJZENvbnN0cmFpbnREYXRhKFNjaGVtYUlkZW50aXR5Q29uc3RyYWludCBpZGMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHdyaXRlUU5hbWUoaWRjLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICB3cml0ZVNob3J0KGlkYy5nZXRDb25zdHJhaW50Q2F0ZWdvcnkoKSk7Ci0gICAgICAgICAgICB3cml0ZVN0cmluZyhpZGMuZ2V0U2VsZWN0b3IoKSk7Ci0KLSAgICAgICAgICAgIFN0cmluZ1tdIGZpZWxkcyA9IGlkYy5nZXRGaWVsZHMoKTsKLSAgICAgICAgICAgIHdyaXRlU2hvcnQoZmllbGRzLmxlbmd0aCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCBmaWVsZHMubGVuZ3RoIDsgaSsrKQotICAgICAgICAgICAgICAgIHdyaXRlU3RyaW5nKGZpZWxkc1tpXSk7Ci0KLQotICAgICAgICAgICAgaWYgKGlkYy5nZXRDb25zdHJhaW50Q2F0ZWdvcnkoKSA9PSBTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuQ0NfS0VZUkVGKQotICAgICAgICAgICAgICAgIHdyaXRlSGFuZGxlKGlkYy5nZXRSZWZlcmVuY2VkS2V5KCkpOwotCi0gICAgICAgICAgICBTZXQgbWFwcGluZ3MgPSBpZGMuZ2V0TlNNYXAoKS5lbnRyeVNldCgpOwotICAgICAgICAgICAgd3JpdGVTaG9ydChtYXBwaW5ncy5zaXplKCkpOwotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpdCA9IG1hcHBpbmdzLml0ZXJhdG9yKCkgOyBpdC5oYXNOZXh0KCkgOyApIHsKLSAgICAgICAgICAgICAgICBNYXAuRW50cnkgZSA9IChNYXAuRW50cnkpaXQubmV4dCgpOwotICAgICAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPSAoU3RyaW5nKWUuZ2V0S2V5KCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHVyaSA9IChTdHJpbmcpZS5nZXRWYWx1ZSgpOwotCi0gICAgICAgICAgICAgICAgd3JpdGVTdHJpbmcocHJlZml4KTsKLSAgICAgICAgICAgICAgICB3cml0ZVN0cmluZyh1cmkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLQotICAgICAgICBTY2hlbWFQYXJ0aWNsZVtdIHJlYWRQYXJ0aWNsZUFycmF5KCkKLSAgICAgICAgewotICAgICAgICAgICAgU2NoZW1hUGFydGljbGVbXSByZXN1bHQgPSBuZXcgU2NoZW1hUGFydGljbGVbcmVhZFNob3J0KCldOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gcmVhZFBhcnRpY2xlRGF0YSgpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgd3JpdGVQYXJ0aWNsZUFycmF5KFNjaGVtYVBhcnRpY2xlW10gc3BhKQotICAgICAgICB7Ci0gICAgICAgICAgICB3cml0ZVNob3J0KHNwYS5sZW5ndGgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzcGEubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgd3JpdGVQYXJ0aWNsZURhdGEoc3BhW2ldKTsKLSAgICAgICAgfQotCi0gICAgICAgIFNjaGVtYVBhcnRpY2xlIHJlYWRQYXJ0aWNsZURhdGEoKQotICAgICAgICB7Ci0gICAgICAgICAgICBzaG9ydCBwYXJ0aWNsZVR5cGUgPSByZWFkU2hvcnQoKTsKLSAgICAgICAgICAgIFNjaGVtYVBhcnRpY2xlSW1wbCByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAocGFydGljbGVUeXBlICE9IFNjaGVtYVBhcnRpY2xlLkVMRU1FTlQpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFNjaGVtYVBhcnRpY2xlSW1wbCgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBTY2hlbWFMb2NhbEVsZW1lbnRJbXBsKCk7Ci0gICAgICAgICAgICBsb2FkUGFydGljbGUocmVzdWx0LCBwYXJ0aWNsZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGxvYWRQYXJ0aWNsZShTY2hlbWFQYXJ0aWNsZUltcGwgcmVzdWx0LCBpbnQgcGFydGljbGVUeXBlLCBib29sZWFuIGdsb2JhbCkKLSAgICAgICAgewotICAgICAgICAgICAgc2hvcnQgcGFydGljbGVGbGFncyA9IHJlYWRTaG9ydCgpOwotCi0gICAgICAgICAgICByZXN1bHQuc2V0UGFydGljbGVUeXBlKHBhcnRpY2xlVHlwZSk7Ci0gICAgICAgICAgICByZXN1bHQuc2V0TWluT2NjdXJzKHJlYWRCaWdJbnRlZ2VyKCkpOwotICAgICAgICAgICAgcmVzdWx0LnNldE1heE9jY3VycyhyZWFkQmlnSW50ZWdlcigpKTsKLQotICAgICAgICAgICAgcmVzdWx0LnNldFRyYW5zaXRpb25SdWxlcyhyZWFkUU5hbWVTZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcnRpY2xlRmxhZ3MgJiBGTEFHX1BBUlRfU0tJUFBBQkxFKSAhPSAwKTsKLQotICAgICAgICAgICAgc3dpdGNoIChwYXJ0aWNsZVR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5XSUxEQ0FSRDoKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNldFdpbGRjYXJkU2V0KHJlYWRRTmFtZVNldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNldFdpbGRjYXJkUHJvY2VzcyhyZWFkU2hvcnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5FTEVNRU5UOgotICAgICAgICAgICAgICAgICAgICBTY2hlbWFMb2NhbEVsZW1lbnRJbXBsIGxyZXN1bHQgPSAoU2NoZW1hTG9jYWxFbGVtZW50SW1wbClyZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIGxyZXN1bHQuc2V0TmFtZUFuZFR5cGVSZWYocmVhZFFOYW1lKCksIHJlYWRUeXBlUmVmKCkpOwotICAgICAgICAgICAgICAgICAgICBscmVzdWx0LnNldERlZmF1bHQocmVhZFN0cmluZygpLCAocGFydGljbGVGbGFncyAmIEZMQUdfUEFSVF9GSVhFRCkgIT0gMCwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdExlYXN0KDIsIDE2LCAwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGxyZXN1bHQuc2V0RGVmYXVsdFZhbHVlKHJlYWRYbWxWYWx1ZU9iamVjdCgpKTsKLSAgICAgICAgICAgICAgICAgICAgbHJlc3VsdC5zZXROaWxsYWJsZSgocGFydGljbGVGbGFncyAmIEZMQUdfUEFSVF9OSUxMQUJMRSkgIT0gMCk7Ci0gICAgICAgICAgICAgICAgICAgIGxyZXN1bHQuc2V0QmxvY2soKHBhcnRpY2xlRmxhZ3MgJiBGTEFHX1BBUlRfQkxPQ0tFWFQpICE9IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhcnRpY2xlRmxhZ3MgJiBGTEFHX1BBUlRfQkxPQ0tSRVNUKSAhPSAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJ0aWNsZUZsYWdzICYgRkxBR19QQVJUX0JMT0NLU1VCU1QpICE9IDApOwotICAgICAgICAgICAgICAgICAgICBscmVzdWx0LnNldFdzZGxBcnJheVR5cGUocmVhZFNPQVBBcnJheVR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGxyZXN1bHQuc2V0QWJzdHJhY3QoKHBhcnRpY2xlRmxhZ3MgJiBGTEFHX1BBUlRfQUJTVFJBQ1QpICE9IDApOwotICAgICAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTY2hlbWFHbG9iYWxFbGVtZW50SW1wbCBncmVzdWx0ID0gKFNjaGVtYUdsb2JhbEVsZW1lbnRJbXBsKWxyZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBncmVzdWx0LnNldEZpbmFsKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJ0aWNsZUZsYWdzICYgRkxBR19QQVJUX0ZJTkFMRVhUKSAhPSAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXJ0aWNsZUZsYWdzICYgRkxBR19QQVJUX0ZJTkFMUkVTVCkgIT0gMCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdExlYXN0KDIsIDE3LCAwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmVzdWx0LnNldFN1YnN0aXR1dGlvbkdyb3VwKChTY2hlbWFHbG9iYWxFbGVtZW50LlJlZilyZWFkSGFuZGxlKCkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBzdWJzdEdyb3VwQ291bnQgPSByZWFkU2hvcnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3Vic3RHcm91cENvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Jlc3VsdC5hZGRTdWJzdGl0dXRpb25Hcm91cE1lbWJlcihyZWFkUU5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmW10gaWRjcyA9IG5ldyBTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmW3JlYWRTaG9ydCgpXTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCBpZGNzLmxlbmd0aCA7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkY3NbaV0gPSAoU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZilyZWFkSGFuZGxlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgbHJlc3VsdC5zZXRJZGVudGl0eUNvbnN0cmFpbnRzKGlkY3MpOwotCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5BTEw6Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5TRVFVRU5DRToKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLkNIT0lDRToKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNldFBhcnRpY2xlQ2hpbGRyZW4ocmVhZFBhcnRpY2xlQXJyYXkoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24oIlVucmVjb2duaXplZCBwYXJ0aWNsZSB0eXBlICIsIF9uYW1lLCBfaGFuZGxlLCBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLkJBRF9QQVJUSUNMRV9UWVBFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgd3JpdGVQYXJ0aWNsZURhdGEoU2NoZW1hUGFydGljbGUgcGFydCkKLSAgICAgICAgewotICAgICAgICAgICAgd3JpdGVTaG9ydChwYXJ0LmdldFBhcnRpY2xlVHlwZSgpKTsKLSAgICAgICAgICAgIHNob3J0IGZsYWdzID0gMDsKLSAgICAgICAgICAgIGlmIChwYXJ0LmlzU2tpcHBhYmxlKCkpCi0gICAgICAgICAgICAgICAgZmxhZ3MgfD0gRkxBR19QQVJUX1NLSVBQQUJMRTsKLSAgICAgICAgICAgIGlmIChwYXJ0LmdldFBhcnRpY2xlVHlwZSgpID09IFNjaGVtYVBhcnRpY2xlLkVMRU1FTlQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2NoZW1hTG9jYWxFbGVtZW50IGxwYXJ0ID0gKFNjaGVtYUxvY2FsRWxlbWVudClwYXJ0OwotICAgICAgICAgICAgICAgIGlmIChscGFydC5pc0ZpeGVkKCkpCi0gICAgICAgICAgICAgICAgICAgIGZsYWdzIHw9IEZMQUdfUEFSVF9GSVhFRDsKLSAgICAgICAgICAgICAgICBpZiAobHBhcnQuaXNOaWxsYWJsZSgpKQotICAgICAgICAgICAgICAgICAgICBmbGFncyB8PSBGTEFHX1BBUlRfTklMTEFCTEU7Ci0gICAgICAgICAgICAgICAgaWYgKGxwYXJ0LmJsb2NrRXh0ZW5zaW9uKCkpCi0gICAgICAgICAgICAgICAgICAgIGZsYWdzIHw9IEZMQUdfUEFSVF9CTE9DS0VYVDsKLSAgICAgICAgICAgICAgICBpZiAobHBhcnQuYmxvY2tSZXN0cmljdGlvbigpKQotICAgICAgICAgICAgICAgICAgICBmbGFncyB8PSBGTEFHX1BBUlRfQkxPQ0tSRVNUOwotICAgICAgICAgICAgICAgIGlmIChscGFydC5ibG9ja1N1YnN0aXR1dGlvbigpKQotICAgICAgICAgICAgICAgICAgICBmbGFncyB8PSBGTEFHX1BBUlRfQkxPQ0tTVUJTVDsKLSAgICAgICAgICAgICAgICBpZiAobHBhcnQuaXNBYnN0cmFjdCgpKQotICAgICAgICAgICAgICAgICAgICBmbGFncyB8PSBGTEFHX1BBUlRfQUJTVFJBQ1Q7Ci0KLSAgICAgICAgICAgICAgICBpZiAobHBhcnQgaW5zdGFuY2VvZiBTY2hlbWFHbG9iYWxFbGVtZW50KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU2NoZW1hR2xvYmFsRWxlbWVudCBncGFydCA9IChTY2hlbWFHbG9iYWxFbGVtZW50KWxwYXJ0OwotICAgICAgICAgICAgICAgICAgICBpZiAoZ3BhcnQuZmluYWxFeHRlbnNpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzIHw9IEZMQUdfUEFSVF9GSU5BTEVYVDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGdwYXJ0LmZpbmFsUmVzdHJpY3Rpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzIHw9IEZMQUdfUEFSVF9GSU5BTFJFU1Q7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgd3JpdGVTaG9ydChmbGFncyk7Ci0gICAgICAgICAgICB3cml0ZUJpZ0ludGVnZXIocGFydC5nZXRNaW5PY2N1cnMoKSk7Ci0gICAgICAgICAgICB3cml0ZUJpZ0ludGVnZXIocGFydC5nZXRNYXhPY2N1cnMoKSk7Ci0gICAgICAgICAgICB3cml0ZVFOYW1lU2V0KHBhcnQuYWNjZXB0ZWRTdGFydE5hbWVzKCkpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHBhcnQuZ2V0UGFydGljbGVUeXBlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5XSUxEQ0FSRDoKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVRTmFtZVNldChwYXJ0LmdldFdpbGRjYXJkU2V0KCkpOwotICAgICAgICAgICAgICAgICAgICB3cml0ZVNob3J0KHBhcnQuZ2V0V2lsZGNhcmRQcm9jZXNzKCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuRUxFTUVOVDoKLSAgICAgICAgICAgICAgICAgICAgU2NoZW1hTG9jYWxFbGVtZW50IGxwYXJ0ID0gKFNjaGVtYUxvY2FsRWxlbWVudClwYXJ0OwotICAgICAgICAgICAgICAgICAgICB3cml0ZVFOYW1lKGxwYXJ0LmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlVHlwZShscGFydC5nZXRUeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICB3cml0ZVN0cmluZyhscGFydC5nZXREZWZhdWx0VGV4dCgpKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVYbWxWYWx1ZU9iamVjdChscGFydC5nZXREZWZhdWx0VmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlU09BUEFycmF5VHlwZSgoKFNjaGVtYVdTRExBcnJheVR5cGUpbHBhcnQpLmdldFdTRExBcnJheVR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChscGFydCBpbnN0YW5jZW9mIFNjaGVtYUdsb2JhbEVsZW1lbnQpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFNjaGVtYUdsb2JhbEVsZW1lbnQgZ3BhcnQgPSAoU2NoZW1hR2xvYmFsRWxlbWVudClscGFydDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVIYW5kbGUoZ3BhcnQuc3Vic3RpdHV0aW9uR3JvdXAoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIFFOYW1lW10gc3Vic3RHcm91cE1lbWJlcnMgPSBncGFydC5zdWJzdGl0dXRpb25Hcm91cE1lbWJlcnMoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlU2hvcnQoc3Vic3RHcm91cE1lbWJlcnMubGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3Vic3RHcm91cE1lbWJlcnMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVRTmFtZShzdWJzdEdyb3VwTWVtYmVyc1tpXSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnRbXSBpZGNzID0gbHBhcnQuZ2V0SWRlbnRpdHlDb25zdHJhaW50cygpOwotCi0gICAgICAgICAgICAgICAgICAgIHdyaXRlU2hvcnQoaWRjcy5sZW5ndGgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCBpZGNzLmxlbmd0aCA7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlSGFuZGxlKGlkY3NbaV0pOwotCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5BTEw6Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5TRVFVRU5DRToKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLkNIT0lDRToKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVQYXJ0aWNsZUFycmF5KHBhcnQuZ2V0UGFydGljbGVDaGlsZHJlbigpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbigiVW5yZWNvZ25pemVkIHBhcnRpY2xlIHR5cGUgIiwgX25hbWUsIF9oYW5kbGUsIFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uQkFEX1BBUlRJQ0xFX1RZUEUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgU2NoZW1hUHJvcGVydHkgcmVhZFByb3BlcnR5RGF0YSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYVByb3BlcnR5SW1wbCBwcm9wID0gbmV3IFNjaGVtYVByb3BlcnR5SW1wbCgpOwotICAgICAgICAgICAgcHJvcC5zZXROYW1lKHJlYWRRTmFtZSgpKTsKLSAgICAgICAgICAgIHByb3Auc2V0VHlwZVJlZihyZWFkVHlwZVJlZigpKTsKLSAgICAgICAgICAgIHNob3J0IHByb3BmbGFncyA9IHJlYWRTaG9ydCgpOwotICAgICAgICAgICAgcHJvcC5zZXRBdHRyaWJ1dGUoKHByb3BmbGFncyAmIEZMQUdfUFJPUF9JU0FUVFIpICE9IDApOwotICAgICAgICAgICAgcHJvcC5zZXRDb250YWluZXJUeXBlUmVmKHJlYWRUeXBlUmVmKCkpOwotICAgICAgICAgICAgcHJvcC5zZXRNaW5PY2N1cnMocmVhZEJpZ0ludGVnZXIoKSk7Ci0gICAgICAgICAgICBwcm9wLnNldE1heE9jY3VycyhyZWFkQmlnSW50ZWdlcigpKTsKLSAgICAgICAgICAgIHByb3Auc2V0TmlsbGFibGUocmVhZFNob3J0KCkpOwotICAgICAgICAgICAgcHJvcC5zZXREZWZhdWx0KHJlYWRTaG9ydCgpKTsKLSAgICAgICAgICAgIHByb3Auc2V0Rml4ZWQocmVhZFNob3J0KCkpOwotICAgICAgICAgICAgcHJvcC5zZXREZWZhdWx0VGV4dChyZWFkU3RyaW5nKCkpOwotCi0gICAgICAgICAgICBwcm9wLnNldEphdmFQcm9wZXJ0eU5hbWUocmVhZFN0cmluZygpKTsKLSAgICAgICAgICAgIHByb3Auc2V0SmF2YVR5cGVDb2RlKHJlYWRTaG9ydCgpKTsKLSAgICAgICAgICAgIHByb3Auc2V0RXh0ZW5kc0phdmEocmVhZFR5cGVSZWYoKSwKLSAgICAgICAgICAgICAgICAgICAgKHByb3BmbGFncyAmIEZMQUdfUFJPUF9KQVZBU0lOR0xFVE9OKSAhPSAwLAotICAgICAgICAgICAgICAgICAgICAocHJvcGZsYWdzICYgRkxBR19QUk9QX0pBVkFPUFRJT05BTCkgIT0gMCwKLSAgICAgICAgICAgICAgICAgICAgKHByb3BmbGFncyAmIEZMQUdfUFJPUF9KQVZBQVJSQVkpICE9IDApOwotICAgICAgICAgICAgcHJvcC5zZXRKYXZhU2V0dGVyRGVsaW1pdGVyKHJlYWRRTmFtZVNldCgpKTsKLSAgICAgICAgICAgIGlmIChhdExlYXN0KDIsIDE2LCAwKSkKLSAgICAgICAgICAgICAgICBwcm9wLnNldERlZmF1bHRWYWx1ZShyZWFkWG1sVmFsdWVPYmplY3QoKSk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvcC5pc0F0dHJpYnV0ZSgpICYmIGF0TGVhc3QoMiwgMTcsIDApKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNob3J0IHNpemUgPSByZWFkU2hvcnQoKTsKLSAgICAgICAgICAgICAgICBMaW5rZWRIYXNoU2V0IHFuYW1lcyA9IG5ldyBMaW5rZWRIYXNoU2V0KHNpemUpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IHNpemUgOyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHFuYW1lcy5hZGQocmVhZFFOYW1lKCkpOwotICAgICAgICAgICAgICAgIHByb3Auc2V0QWNjZXB0ZWROYW1lcyhxbmFtZXMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJvcC5zZXRJbW11dGFibGUoKTsKLSAgICAgICAgICAgIHJldHVybiBwcm9wOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB3cml0ZVByb3BlcnR5RGF0YShTY2hlbWFQcm9wZXJ0eSBwcm9wKQotICAgICAgICB7Ci0gICAgICAgICAgICB3cml0ZVFOYW1lKHByb3AuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIHdyaXRlVHlwZShwcm9wLmdldFR5cGUoKSk7Ci0gICAgICAgICAgICB3cml0ZVNob3J0KChwcm9wLmlzQXR0cmlidXRlKCkgPyBGTEFHX1BST1BfSVNBVFRSIDogMCkgfAotICAgICAgICAgICAgICAgICAgICAgICAocHJvcC5leHRlbmRzSmF2YVNpbmdsZXRvbigpID8gRkxBR19QUk9QX0pBVkFTSU5HTEVUT04gOiAwKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgIChwcm9wLmV4dGVuZHNKYXZhT3B0aW9uKCkgPyBGTEFHX1BST1BfSkFWQU9QVElPTkFMIDogMCkgfAotICAgICAgICAgICAgICAgICAgICAgICAocHJvcC5leHRlbmRzSmF2YUFycmF5KCkgPyBGTEFHX1BST1BfSkFWQUFSUkFZIDogMCkpOwotICAgICAgICAgICAgd3JpdGVUeXBlKHByb3AuZ2V0Q29udGFpbmVyVHlwZSgpKTsKLSAgICAgICAgICAgIHdyaXRlQmlnSW50ZWdlcihwcm9wLmdldE1pbk9jY3VycygpKTsKLSAgICAgICAgICAgIHdyaXRlQmlnSW50ZWdlcihwcm9wLmdldE1heE9jY3VycygpKTsKLSAgICAgICAgICAgIHdyaXRlU2hvcnQocHJvcC5oYXNOaWxsYWJsZSgpKTsKLSAgICAgICAgICAgIHdyaXRlU2hvcnQocHJvcC5oYXNEZWZhdWx0KCkpOwotICAgICAgICAgICAgd3JpdGVTaG9ydChwcm9wLmhhc0ZpeGVkKCkpOwotICAgICAgICAgICAgd3JpdGVTdHJpbmcocHJvcC5nZXREZWZhdWx0VGV4dCgpKTsKLQotICAgICAgICAgICAgd3JpdGVTdHJpbmcocHJvcC5nZXRKYXZhUHJvcGVydHlOYW1lKCkpOwotICAgICAgICAgICAgd3JpdGVTaG9ydChwcm9wLmdldEphdmFUeXBlQ29kZSgpKTsKLSAgICAgICAgICAgIHdyaXRlVHlwZShwcm9wLmphdmFCYXNlZE9uVHlwZSgpKTsKLSAgICAgICAgICAgIHdyaXRlUU5hbWVTZXQocHJvcC5nZXRKYXZhU2V0dGVyRGVsaW1pdGVyKCkpOwotICAgICAgICAgICAgd3JpdGVYbWxWYWx1ZU9iamVjdChwcm9wLmdldERlZmF1bHRWYWx1ZSgpKTsKLQotICAgICAgICAgICAgaWYgKCEgcHJvcC5pc0F0dHJpYnV0ZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFFOYW1lW10gbmFtZXMgPSBwcm9wLmFjY2VwdGVkTmFtZXMoKTsKLSAgICAgICAgICAgICAgICB3cml0ZVNob3J0KG5hbWVzLmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgbmFtZXMubGVuZ3RoIDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB3cml0ZVFOYW1lKG5hbWVzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgd3JpdGVNb2RlbEdyb3VwRGF0YShTY2hlbWFNb2RlbEdyb3VwIGdycCkKLSAgICAgICAgewotICAgICAgICAgICAgU2NoZW1hTW9kZWxHcm91cEltcGwgaW1wbCA9IChTY2hlbWFNb2RlbEdyb3VwSW1wbClncnA7Ci0gICAgICAgICAgICB3cml0ZVFOYW1lKGltcGwuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIHdyaXRlU3RyaW5nKGltcGwuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkpOwotICAgICAgICAgICAgd3JpdGVTaG9ydChpbXBsLmdldENoYW1lbGVvbk5hbWVzcGFjZSgpICE9IG51bGwgPyAxIDogMCk7Ci0gICAgICAgICAgICB3cml0ZVNob3J0KGltcGwuaXNSZWRlZmluaXRpb24oKSA/IDEgOiAwKTsgLy8gbmV3IGZvciB2ZXJzaW9uIDIuMTUKLSAgICAgICAgICAgIHdyaXRlU3RyaW5nKGltcGwuZ2V0UGFyc2VPYmplY3QoKS54bWxUZXh0KG5ldyBYbWxPcHRpb25zKCkuc2V0U2F2ZU91dGVyKCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgd3JpdGVBdHRyaWJ1dGVHcm91cERhdGEoU2NoZW1hQXR0cmlidXRlR3JvdXAgZ3JwKQotICAgICAgICB7Ci0gICAgICAgICAgICBTY2hlbWFBdHRyaWJ1dGVHcm91cEltcGwgaW1wbCA9IChTY2hlbWFBdHRyaWJ1dGVHcm91cEltcGwpZ3JwOwotICAgICAgICAgICAgd3JpdGVRTmFtZShpbXBsLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICB3cml0ZVN0cmluZyhpbXBsLmdldFRhcmdldE5hbWVzcGFjZSgpKTsKLSAgICAgICAgICAgIHdyaXRlU2hvcnQoaW1wbC5nZXRDaGFtZWxlb25OYW1lc3BhY2UoKSAhPSBudWxsID8gMSA6IDApOwotICAgICAgICAgICAgd3JpdGVTaG9ydChpbXBsLmlzUmVkZWZpbml0aW9uKCkgPyAxIDogMCk7IC8vIG5ldyBmb3IgdmVyc2lvbiAyLjE1Ci0gICAgICAgICAgICB3cml0ZVN0cmluZyhpbXBsLmdldFBhcnNlT2JqZWN0KCkueG1sVGV4dChuZXcgWG1sT3B0aW9ucygpLnNldFNhdmVPdXRlcigpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBYbWxWYWx1ZVJlZiByZWFkWG1sVmFsdWVPYmplY3QoKQotICAgICAgICB7Ci0gICAgICAgICAgICBTY2hlbWFUeXBlLlJlZiB0eXBlcmVmID0gcmVhZFR5cGVSZWYoKTsKLSAgICAgICAgICAgIGlmICh0eXBlcmVmID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICBpbnQgYnRjID0gcmVhZFNob3J0KCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGJ0YykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOwotICAgICAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxWYWx1ZVJlZih0eXBlcmVmLCBudWxsKTsKLSAgICAgICAgICAgICAgICBjYXNlIC0xOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSA9IHJlYWRTaG9ydCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCB2YWx1ZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVNob3J0KHZhbHVlcy5zaXplKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmFkZChyZWFkWG1sVmFsdWVPYmplY3QoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbFZhbHVlUmVmKHR5cGVyZWYsIHZhbHVlcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotCi0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19BTllfU0lNUExFOgotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfQU5ZX1VSSToKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1NUUklORzoKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RVUkFUSU9OOgotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfREFURV9USU1FOgotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfVElNRToKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RBVEU6Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX1lFQVJfTU9OVEg6Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX1lFQVI6Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX01PTlRIX0RBWToKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfREFZOgotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19NT05USDoKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RFQ0lNQUw6Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19CT09MRUFOOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbFZhbHVlUmVmKHR5cGVyZWYsIHJlYWRTdHJpbmcoKSk7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0JBU0VfNjRfQklOQVJZOgotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfSEVYX0JJTkFSWToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYbWxWYWx1ZVJlZih0eXBlcmVmLCByZWFkQnl0ZUFycmF5KCkpOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19RTkFNRToKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX05PVEFUSU9OOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhtbFZhbHVlUmVmKHR5cGVyZWYsIHJlYWRRTmFtZSgpKTsKLQotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfRkxPQVQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19ET1VCTEU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWG1sVmFsdWVSZWYodHlwZXJlZiwgbmV3IERvdWJsZShyZWFkRG91YmxlKCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgd3JpdGVYbWxWYWx1ZU9iamVjdChYbWxBbnlTaW1wbGVUeXBlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBTY2hlbWFUeXBlIHR5cGUgPSB2YWx1ZSA9PSBudWxsID8gbnVsbCA6IHZhbHVlLnNjaGVtYVR5cGUoKTsKLSAgICAgICAgICAgIHdyaXRlVHlwZSh0eXBlKTsKLSAgICAgICAgICAgIGlmICh0eXBlID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBTY2hlbWFUeXBlIGlUeXBlID0gKChTaW1wbGVWYWx1ZSl2YWx1ZSkuaW5zdGFuY2VUeXBlKCk7Ci0gICAgICAgICAgICBpZiAoaVR5cGUgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB3cml0ZVNob3J0KDApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoaVR5cGUuZ2V0U2ltcGxlVmFyaWV0eSgpID09IFNjaGVtYVR5cGUuTElTVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB3cml0ZVNob3J0KC0xKTsKLSAgICAgICAgICAgICAgICBMaXN0IHZhbHVlcyA9ICgoWG1sT2JqZWN0QmFzZSl2YWx1ZSkueGdldExpc3RWYWx1ZSgpOwotICAgICAgICAgICAgICAgIHdyaXRlU2hvcnQodmFsdWVzLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpID0gdmFsdWVzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB3cml0ZVhtbFZhbHVlT2JqZWN0KChYbWxBbnlTaW1wbGVUeXBlKWkubmV4dCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IGJ0YyA9IGlUeXBlLmdldFByaW1pdGl2ZVR5cGUoKS5nZXRCdWlsdGluVHlwZUNvZGUoKTsKLSAgICAgICAgICAgICAgICB3cml0ZVNob3J0KGJ0Yyk7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChidGMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0FOWV9TSU1QTEU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfQU5ZX1VSSToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19TVFJJTkc6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfRFVSQVRJT046Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfREFURV9USU1FOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1RJTUU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfREFURToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX1lFQVJfTU9OVEg6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19ZRUFSOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfTU9OVEhfREFZOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfREFZOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfTU9OVEg6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfREVDSU1BTDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19CT09MRUFOOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVTdHJpbmcodmFsdWUuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0JBU0VfNjRfQklOQVJZOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0hFWF9CSU5BUlk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUJ5dGVBcnJheSgoKFNpbXBsZVZhbHVlKXZhbHVlKS5nZXRCeXRlQXJyYXlWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfUU5BTUU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfTk9UQVRJT046Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVFOYW1lKCgoU2ltcGxlVmFsdWUpdmFsdWUpLmdldFFOYW1lVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0ZMT0FUOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVEb3VibGUoKChTaW1wbGVWYWx1ZSl2YWx1ZSkuZ2V0RmxvYXRWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfRE9VQkxFOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVEb3VibGUoKChTaW1wbGVWYWx1ZSl2YWx1ZSkuZ2V0RG91YmxlVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBkb3VibGUgcmVhZERvdWJsZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBfaW5wdXQucmVhZERvdWJsZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIF9uYW1lLCBfaGFuZGxlLCBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLklPX0VYQ0VQVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHdyaXRlRG91YmxlKGRvdWJsZSBkKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX291dHB1dCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgX291dHB1dC53cml0ZURvdWJsZShkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgX25hbWUsIF9oYW5kbGUsIFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uSU9fRVhDRVBUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBRTmFtZVNldCByZWFkUU5hbWVTZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBzaG9ydCBmbGFnID0gcmVhZFNob3J0KCk7Ci0KLSAgICAgICAgICAgIFNldCB1cmlTZXQgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICAgICAgc2hvcnQgdXJpQ291bnQgPSByZWFkU2hvcnQoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXJpQ291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICB1cmlTZXQuYWRkKHJlYWRTdHJpbmcoKSk7Ci0KLSAgICAgICAgICAgIFNldCBxbmFtZVNldDEgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICAgICAgc2hvcnQgcW5jb3VudDEgPSByZWFkU2hvcnQoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcW5jb3VudDE7IGkrKykKLSAgICAgICAgICAgICAgICBxbmFtZVNldDEuYWRkKHJlYWRRTmFtZSgpKTsKLQotICAgICAgICAgICAgU2V0IHFuYW1lU2V0MiA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICAgICAgICBzaG9ydCBxbmNvdW50MiA9IHJlYWRTaG9ydCgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBxbmNvdW50MjsgaSsrKQotICAgICAgICAgICAgICAgIHFuYW1lU2V0Mi5hZGQocmVhZFFOYW1lKCkpOwotCi0gICAgICAgICAgICBpZiAoZmxhZyA9PSAxKQotICAgICAgICAgICAgICAgIHJldHVybiBRTmFtZVNldC5mb3JTZXRzKHVyaVNldCwgbnVsbCwgcW5hbWVTZXQxLCBxbmFtZVNldDIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiBRTmFtZVNldC5mb3JTZXRzKG51bGwsIHVyaVNldCwgcW5hbWVTZXQyLCBxbmFtZVNldDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB3cml0ZVFOYW1lU2V0KFFOYW1lU2V0IHNldCkKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbGVhbiBpbnZlcnQgPSAoc2V0LmV4Y2x1ZGVkVVJJcygpICE9IG51bGwpOwotICAgICAgICAgICAgd3JpdGVTaG9ydChpbnZlcnQgPyAxIDogMCk7Ci0KLSAgICAgICAgICAgIFNldCB1cmlTZXQgPSBpbnZlcnQgPyBzZXQuZXhjbHVkZWRVUklzKCkgOiBzZXQuaW5jbHVkZWRVUklzKCk7Ci0gICAgICAgICAgICB3cml0ZVNob3J0KHVyaVNldC5zaXplKCkpOwotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpID0gdXJpU2V0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgICAgICAgICAgd3JpdGVTdHJpbmcoKFN0cmluZylpLm5leHQoKSk7Ci0KLSAgICAgICAgICAgIFNldCBxbmFtZVNldDEgPSBpbnZlcnQgPyBzZXQuZXhjbHVkZWRRTmFtZXNJbkluY2x1ZGVkVVJJcygpIDogc2V0LmluY2x1ZGVkUU5hbWVzSW5FeGNsdWRlZFVSSXMoKTsKLSAgICAgICAgICAgIHdyaXRlU2hvcnQocW5hbWVTZXQxLnNpemUoKSk7Ci0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBxbmFtZVNldDEuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgICAgICAgICB3cml0ZVFOYW1lKChRTmFtZSlpLm5leHQoKSk7Ci0KLSAgICAgICAgICAgIFNldCBxbmFtZVNldDIgPSBpbnZlcnQgPyBzZXQuaW5jbHVkZWRRTmFtZXNJbkV4Y2x1ZGVkVVJJcygpIDogc2V0LmV4Y2x1ZGVkUU5hbWVzSW5JbmNsdWRlZFVSSXMoKTsKLSAgICAgICAgICAgIHdyaXRlU2hvcnQocW5hbWVTZXQyLnNpemUoKSk7Ci0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBxbmFtZVNldDIuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgICAgICAgICB3cml0ZVFOYW1lKChRTmFtZSlpLm5leHQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBieXRlW10gcmVhZEJ5dGVBcnJheSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNob3J0IGxlbiA9IF9pbnB1dC5yZWFkU2hvcnQoKTsKLSAgICAgICAgICAgICAgICBieXRlW10gcmVzdWx0ID0gbmV3IGJ5dGVbbGVuXTsKLSAgICAgICAgICAgICAgICBfaW5wdXQucmVhZEZ1bGx5KHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpLCBfbmFtZSwgX2hhbmRsZSwgU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5JT19FWENFUFRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB3cml0ZUJ5dGVBcnJheShieXRlW10gYmEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdyaXRlU2hvcnQoYmEubGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBpZiAoX291dHB1dCAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICBfb3V0cHV0LndyaXRlKGJhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpLCBfbmFtZSwgX2hhbmRsZSwgU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5JT19FWENFUFRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQmlnSW50ZWdlciByZWFkQmlnSW50ZWdlcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJ5dGVbXSByZXN1bHQgPSByZWFkQnl0ZUFycmF5KCk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PSAwKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPT0gMSAmJiByZXN1bHRbMF0gPT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gQmlnSW50ZWdlci5aRVJPOwotICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPT0gMSAmJiByZXN1bHRbMF0gPT0gMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gQmlnSW50ZWdlci5PTkU7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEJpZ0ludGVnZXIocmVzdWx0KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgd3JpdGVCaWdJbnRlZ2VyKEJpZ0ludGVnZXIgYmkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChiaSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdyaXRlU2hvcnQoMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChiaS5zaWdudW0oKSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdyaXRlQnl0ZUFycmF5KFNJTkdMRV9aRVJPX0JZVEUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdyaXRlQnl0ZUFycmF5KGJpLnRvQnl0ZUFycmF5KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICB9Ci0KLSAgICBzdGF0aWMgZmluYWwgYnl0ZVtdIFNJTkdMRV9aRVJPX0JZVEUgPSBuZXcgYnl0ZVtdIHsgKGJ5dGUpMCB9OwotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgdHlwZUZvckhhbmRsZShTdHJpbmcgaGFuZGxlKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkIChfcmVzb2x2ZWRIYW5kbGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKFNjaGVtYVR5cGUpX3Jlc29sdmVkSGFuZGxlcy5nZXQoaGFuZGxlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFUeXBlIHR5cGVGb3JDbGFzc25hbWUoU3RyaW5nIGNsYXNzbmFtZSkKLSAgICB7Ci0gICAgICAgIFNjaGVtYVR5cGUuUmVmIHJlZiA9IChTY2hlbWFUeXBlLlJlZilfdHlwZVJlZnNCeUNsYXNzbmFtZS5nZXQoY2xhc3NuYW1lKTsKLSAgICAgICAgcmV0dXJuIChyZWYgIT0gbnVsbCkgPyByZWYuZ2V0KCkgOiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFDb21wb25lbnQgcmVzb2x2ZUhhbmRsZShTdHJpbmcgaGFuZGxlKQotICAgIHsKLSAgICAgICAgU2NoZW1hQ29tcG9uZW50IHJlc3VsdDsKLQotICAgICAgICBzeW5jaHJvbml6ZWQgKF9yZXNvbHZlZEhhbmRsZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IChTY2hlbWFDb21wb25lbnQpX3Jlc29sdmVkSGFuZGxlcy5nZXQoaGFuZGxlKTsKLSAgICAgICAgfQotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFhzYlJlYWRlciByZWFkZXIgPSBuZXcgWHNiUmVhZGVyKGhhbmRsZSwgLTEpOwotICAgICAgICAgICAgaW50IGZpbGV0eXBlID0gcmVhZGVyLmdldEFjdHVhbEZpbGV0eXBlKCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGZpbGV0eXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgRklMRVRZUEVfU0NIRU1BVFlQRToKLSAgICAgICAgICAgICAgICAgICAgWEJlYW5EZWJ1Zy50cmFjZShYQmVhbkRlYnVnLlRSQUNFX1NDSEVNQV9MT0FESU5HLCAiUmVzb2x2aW5nIHR5cGUgZm9yIGhhbmRsZSAiICsgaGFuZGxlLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVhZGVyLmZpbmlzaExvYWRpbmdUeXBlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgRklMRVRZUEVfU0NIRU1BRUxFTUVOVDoKLSAgICAgICAgICAgICAgICAgICAgWEJlYW5EZWJ1Zy50cmFjZShYQmVhbkRlYnVnLlRSQUNFX1NDSEVNQV9MT0FESU5HLCAiUmVzb2x2aW5nIGVsZW1lbnQgZm9yIGhhbmRsZSAiICsgaGFuZGxlLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVhZGVyLmZpbmlzaExvYWRpbmdFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgRklMRVRZUEVfU0NIRU1BQVRUUklCVVRFOgotICAgICAgICAgICAgICAgICAgICBYQmVhbkRlYnVnLnRyYWNlKFhCZWFuRGVidWcuVFJBQ0VfU0NIRU1BX0xPQURJTkcsICJSZXNvbHZpbmcgYXR0cmlidXRlIGZvciBoYW5kbGUgIiArIGhhbmRsZSwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlYWRlci5maW5pc2hMb2FkaW5nQXR0cmlidXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgRklMRVRZUEVfU0NIRU1BTU9ERUxHUk9VUDoKLSAgICAgICAgICAgICAgICAgICAgWEJlYW5EZWJ1Zy50cmFjZShYQmVhbkRlYnVnLlRSQUNFX1NDSEVNQV9MT0FESU5HLCAiUmVzb2x2aW5nIG1vZGVsIGdyb3VwIGZvciBoYW5kbGUgIiArIGhhbmRsZSwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlYWRlci5maW5pc2hMb2FkaW5nTW9kZWxHcm91cCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEZJTEVUWVBFX1NDSEVNQUFUVFJJQlVURUdST1VQOgotICAgICAgICAgICAgICAgICAgICBYQmVhbkRlYnVnLnRyYWNlKFhCZWFuRGVidWcuVFJBQ0VfU0NIRU1BX0xPQURJTkcsICJSZXNvbHZpbmcgYXR0cmlidXRlIGdyb3VwIGZvciBoYW5kbGUgIiArIGhhbmRsZSwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlYWRlci5maW5pc2hMb2FkaW5nQXR0cmlidXRlR3JvdXAoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBGSUxFVFlQRV9TQ0hFTUFJREVOVElUWUNPTlNUUkFJTlQ6Ci0gICAgICAgICAgICAgICAgICAgIFhCZWFuRGVidWcudHJhY2UoWEJlYW5EZWJ1Zy5UUkFDRV9TQ0hFTUFfTE9BRElORywgIlJlc29sdmluZyBpZCBjb25zdHJhaW50IGZvciBoYW5kbGUgIiArIGhhbmRsZSwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlYWRlci5maW5pc2hMb2FkaW5nSWRlbnRpdHlDb25zdHJhaW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIklsbGVnYWwgaGFuZGxlIHR5cGUiKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3luY2hyb25pemVkIChfcmVzb2x2ZWRIYW5kbGVzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghX3Jlc29sdmVkSGFuZGxlcy5jb250YWluc0tleShoYW5kbGUpKQotICAgICAgICAgICAgICAgICAgICBfcmVzb2x2ZWRIYW5kbGVzLnB1dChoYW5kbGUsIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAoU2NoZW1hQ29tcG9uZW50KV9yZXNvbHZlZEhhbmRsZXMuZ2V0KGhhbmRsZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGZpbmFsIE1hcCBfcmVzb2x2ZWRIYW5kbGVzID0gbmV3IEhhc2hNYXAoKTsKLSAgICBwcml2YXRlIGJvb2xlYW4gX2FsbE5vbkdyb3VwSGFuZGxlc1Jlc29sdmVkID0gZmFsc2U7Ci0KLSAgICBwdWJsaWMgdm9pZCByZXNvbHZlKCkKLSAgICB7Ci0gICAgICAgIFhCZWFuRGVidWcudHJhY2UoWEJlYW5EZWJ1Zy5UUkFDRV9TQ0hFTUFfTE9BRElORywgIlJlc29sdmUgY2FsbGVkIHR5cGUgc3lzdGVtICIgKyBfbmFtZSwgMCk7Ci0gICAgICAgIGlmIChfYWxsTm9uR3JvdXBIYW5kbGVzUmVzb2x2ZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgWEJlYW5EZWJ1Zy50cmFjZShYQmVhbkRlYnVnLlRSQUNFX1NDSEVNQV9MT0FESU5HLCAiUmVzb2x2aW5nIGFsbCBoYW5kbGVzIGZvciB0eXBlIHN5c3RlbSAiICsgX25hbWUsIDEpOwotCi0gICAgICAgIExpc3QgcmVmcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgcmVmcy5hZGRBbGwoX2dsb2JhbEVsZW1lbnRzLnZhbHVlcygpKTsKLSAgICAgICAgcmVmcy5hZGRBbGwoX2dsb2JhbEF0dHJpYnV0ZXMudmFsdWVzKCkpOwotICAgICAgICByZWZzLmFkZEFsbChfZ2xvYmFsVHlwZXMudmFsdWVzKCkpOwotICAgICAgICByZWZzLmFkZEFsbChfZG9jdW1lbnRUeXBlcy52YWx1ZXMoKSk7Ci0gICAgICAgIHJlZnMuYWRkQWxsKF9hdHRyaWJ1dGVUeXBlcy52YWx1ZXMoKSk7Ci0gICAgICAgIHJlZnMuYWRkQWxsKF9pZGVudGl0eUNvbnN0cmFpbnRzLnZhbHVlcygpKTsKLQotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSByZWZzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYUNvbXBvbmVudC5SZWYgcmVmID0gKFNjaGVtYUNvbXBvbmVudC5SZWYpaS5uZXh0KCk7Ci0gICAgICAgICAgICByZWYuZ2V0Q29tcG9uZW50KCk7IC8vIEZvcmNlcyByZWYgdG8gYmUgcmVzb2x2ZWQKLSAgICAgICAgfQotCi0gICAgICAgIFhCZWFuRGVidWcudHJhY2UoWEJlYW5EZWJ1Zy5UUkFDRV9TQ0hFTUFfTE9BRElORywgIkZpbmlzaGVkIHJlc29sdmluZyB0eXBlIHN5c3RlbSAiICsgX25hbWUsIC0xKTsKLSAgICAgICAgX2FsbE5vbkdyb3VwSGFuZGxlc1Jlc29sdmVkID0gdHJ1ZTsKLSAgICB9Ci0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzTmFtZXNwYWNlRGVmaW5lZChTdHJpbmcgbmFtZXNwYWNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9uYW1lc3BhY2VzLmNvbnRhaW5zKG5hbWVzcGFjZSk7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGUuUmVmIGZpbmRUeXBlUmVmKFFOYW1lIG5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gKFNjaGVtYVR5cGUuUmVmKV9nbG9iYWxUeXBlcy5nZXQobmFtZSk7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGUuUmVmIGZpbmREb2N1bWVudFR5cGVSZWYoUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoU2NoZW1hVHlwZS5SZWYpX2RvY3VtZW50VHlwZXMuZ2V0KG5hbWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFUeXBlLlJlZiBmaW5kQXR0cmlidXRlVHlwZVJlZihRTmFtZSBuYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChTY2hlbWFUeXBlLlJlZilfYXR0cmlidXRlVHlwZXMuZ2V0KG5hbWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFHbG9iYWxFbGVtZW50LlJlZiBmaW5kRWxlbWVudFJlZihRTmFtZSBuYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChTY2hlbWFHbG9iYWxFbGVtZW50LlJlZilfZ2xvYmFsRWxlbWVudHMuZ2V0KG5hbWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmIGZpbmRBdHRyaWJ1dGVSZWYoUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoU2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZilfZ2xvYmFsQXR0cmlidXRlcy5nZXQobmFtZSk7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYU1vZGVsR3JvdXAuUmVmIGZpbmRNb2RlbEdyb3VwUmVmKFFOYW1lIG5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gKFNjaGVtYU1vZGVsR3JvdXAuUmVmKV9tb2RlbEdyb3Vwcy5nZXQobmFtZSk7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZiBmaW5kQXR0cmlidXRlR3JvdXBSZWYoUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoU2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmKV9hdHRyaWJ1dGVHcm91cHMuZ2V0KG5hbWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmIGZpbmRJZGVudGl0eUNvbnN0cmFpbnRSZWYoUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZilfaWRlbnRpdHlDb25zdHJhaW50cy5nZXQobmFtZSk7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGVbXSBnbG9iYWxUeXBlcygpCi0gICAgewotICAgICAgICBpZiAoX2dsb2JhbFR5cGVzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVF9BUlJBWTsKLQotICAgICAgICBTY2hlbWFUeXBlW10gcmVzdWx0ID0gbmV3IFNjaGVtYVR5cGVbX2dsb2JhbFR5cGVzLnNpemUoKV07Ci0gICAgICAgIGludCBqID0gMDsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gX2dsb2JhbFR5cGVzLnZhbHVlcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyBqKyspCi0gICAgICAgICAgICByZXN1bHRbal0gPSAoKFNjaGVtYVR5cGUuUmVmKWkubmV4dCgpKS5nZXQoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hVHlwZVtdIHJlZGVmaW5lZEdsb2JhbFR5cGVzKCkKLSAgICB7Ci0gICAgICAgIGlmIChfcmVkZWZpbmVkR2xvYmFsVHlwZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NUX0FSUkFZOwotCi0gICAgICAgIFNjaGVtYVR5cGVbXSByZXN1bHQgPSBuZXcgU2NoZW1hVHlwZVtfcmVkZWZpbmVkR2xvYmFsVHlwZXMuc2l6ZSgpXTsKLSAgICAgICAgaW50IGogPSAwOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBfcmVkZWZpbmVkR2xvYmFsVHlwZXMudmFsdWVzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7IGorKykKLSAgICAgICAgICAgIHJlc3VsdFtqXSA9ICgoU2NoZW1hVHlwZS5SZWYpaS5uZXh0KCkpLmdldCgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBJbnB1dFN0cmVhbSBnZXRTb3VyY2VBc1N0cmVhbShTdHJpbmcgc291cmNlTmFtZSkKLSAgICB7Ci0gICAgICAgIGlmICghc291cmNlTmFtZS5zdGFydHNXaXRoKCIvIikpCi0gICAgICAgICAgICBzb3VyY2VOYW1lID0gIi8iICsgc291cmNlTmFtZTsKLQotICAgICAgICByZXR1cm4gX3Jlc291cmNlTG9hZGVyLmdldFJlc291cmNlQXNTdHJlYW0oInNjaGVtYS9zcmMiICsgc291cmNlTmFtZSk7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGVbXSBkb2N1bWVudFR5cGVzKCkKLSAgICB7Ci0gICAgICAgIGlmIChfZG9jdW1lbnRUeXBlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gRU1QVFlfU1RfQVJSQVk7Ci0KLSAgICAgICAgU2NoZW1hVHlwZVtdIHJlc3VsdCA9IG5ldyBTY2hlbWFUeXBlW19kb2N1bWVudFR5cGVzLnNpemUoKV07Ci0gICAgICAgIGludCBqID0gMDsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gX2RvY3VtZW50VHlwZXMudmFsdWVzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7IGorKykKLSAgICAgICAgICAgIHJlc3VsdFtqXSA9ICgoU2NoZW1hVHlwZS5SZWYpaS5uZXh0KCkpLmdldCgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFUeXBlW10gYXR0cmlidXRlVHlwZXMoKQotICAgIHsKLSAgICAgICAgaWYgKF9hdHRyaWJ1dGVUeXBlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gRU1QVFlfU1RfQVJSQVk7Ci0KLSAgICAgICAgU2NoZW1hVHlwZVtdIHJlc3VsdCA9IG5ldyBTY2hlbWFUeXBlW19hdHRyaWJ1dGVUeXBlcy5zaXplKCldOwotICAgICAgICBpbnQgaiA9IDA7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IF9hdHRyaWJ1dGVUeXBlcy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgaisrKQotICAgICAgICAgICAgcmVzdWx0W2pdID0gKChTY2hlbWFUeXBlLlJlZilpLm5leHQoKSkuZ2V0KCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYUdsb2JhbEVsZW1lbnRbXSBnbG9iYWxFbGVtZW50cygpCi0gICAgewotICAgICAgICBpZiAoX2dsb2JhbEVsZW1lbnRzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBFTVBUWV9HRV9BUlJBWTsKLQotICAgICAgICBTY2hlbWFHbG9iYWxFbGVtZW50W10gcmVzdWx0ID0gbmV3IFNjaGVtYUdsb2JhbEVsZW1lbnRbX2dsb2JhbEVsZW1lbnRzLnNpemUoKV07Ci0gICAgICAgIGludCBqID0gMDsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gX2dsb2JhbEVsZW1lbnRzLnZhbHVlcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyBqKyspCi0gICAgICAgICAgICByZXN1bHRbal0gPSAoKFNjaGVtYUdsb2JhbEVsZW1lbnQuUmVmKWkubmV4dCgpKS5nZXQoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hR2xvYmFsQXR0cmlidXRlW10gZ2xvYmFsQXR0cmlidXRlcygpCi0gICAgewotICAgICAgICBpZiAoX2dsb2JhbEF0dHJpYnV0ZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0dBX0FSUkFZOwotCi0gICAgICAgIFNjaGVtYUdsb2JhbEF0dHJpYnV0ZVtdIHJlc3VsdCA9IG5ldyBTY2hlbWFHbG9iYWxBdHRyaWJ1dGVbX2dsb2JhbEF0dHJpYnV0ZXMuc2l6ZSgpXTsKLSAgICAgICAgaW50IGogPSAwOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBfZ2xvYmFsQXR0cmlidXRlcy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgaisrKQotICAgICAgICAgICAgcmVzdWx0W2pdID0gKChTY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmKWkubmV4dCgpKS5nZXQoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hTW9kZWxHcm91cFtdIG1vZGVsR3JvdXBzKCkKLSAgICB7Ci0gICAgICAgIGlmIChfbW9kZWxHcm91cHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIEVNUFRZX01HX0FSUkFZOwotCi0gICAgICAgIFNjaGVtYU1vZGVsR3JvdXBbXSByZXN1bHQgPSBuZXcgU2NoZW1hTW9kZWxHcm91cFtfbW9kZWxHcm91cHMuc2l6ZSgpXTsKLSAgICAgICAgaW50IGogPSAwOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBfbW9kZWxHcm91cHMudmFsdWVzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7IGorKykKLSAgICAgICAgICAgIHJlc3VsdFtqXSA9ICgoU2NoZW1hTW9kZWxHcm91cC5SZWYpaS5uZXh0KCkpLmdldCgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFNb2RlbEdyb3VwW10gcmVkZWZpbmVkTW9kZWxHcm91cHMoKQotICAgIHsKLSAgICAgICAgaWYgKF9yZWRlZmluZWRNb2RlbEdyb3Vwcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gRU1QVFlfTUdfQVJSQVk7Ci0KLSAgICAgICAgU2NoZW1hTW9kZWxHcm91cFtdIHJlc3VsdCA9IG5ldyBTY2hlbWFNb2RlbEdyb3VwW19yZWRlZmluZWRNb2RlbEdyb3Vwcy5zaXplKCldOwotICAgICAgICBpbnQgaiA9IDA7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IF9yZWRlZmluZWRNb2RlbEdyb3Vwcy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgaisrKQotICAgICAgICAgICAgcmVzdWx0W2pdID0gKChTY2hlbWFNb2RlbEdyb3VwLlJlZilpLm5leHQoKSkuZ2V0KCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYUF0dHJpYnV0ZUdyb3VwW10gYXR0cmlidXRlR3JvdXBzKCkKLSAgICB7Ci0gICAgICAgIGlmIChfYXR0cmlidXRlR3JvdXBzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBFTVBUWV9BR19BUlJBWTsKLQotICAgICAgICBTY2hlbWFBdHRyaWJ1dGVHcm91cFtdIHJlc3VsdCA9IG5ldyBTY2hlbWFBdHRyaWJ1dGVHcm91cFtfYXR0cmlidXRlR3JvdXBzLnNpemUoKV07Ci0gICAgICAgIGludCBqID0gMDsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gX2F0dHJpYnV0ZUdyb3Vwcy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgaisrKQotICAgICAgICAgICAgcmVzdWx0W2pdID0gKChTY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWYpaS5uZXh0KCkpLmdldCgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFBdHRyaWJ1dGVHcm91cFtdIHJlZGVmaW5lZEF0dHJpYnV0ZUdyb3VwcygpCi0gICAgewotICAgICAgICBpZiAoX3JlZGVmaW5lZEF0dHJpYnV0ZUdyb3Vwcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gRU1QVFlfQUdfQVJSQVk7Ci0KLSAgICAgICAgU2NoZW1hQXR0cmlidXRlR3JvdXBbXSByZXN1bHQgPSBuZXcgU2NoZW1hQXR0cmlidXRlR3JvdXBbX3JlZGVmaW5lZEF0dHJpYnV0ZUdyb3Vwcy5zaXplKCldOwotICAgICAgICBpbnQgaiA9IDA7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IF9yZWRlZmluZWRBdHRyaWJ1dGVHcm91cHMudmFsdWVzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7IGorKykKLSAgICAgICAgICAgIHJlc3VsdFtqXSA9ICgoU2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmKWkubmV4dCgpKS5nZXQoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50W10gaWRlbnRpdHlDb25zdHJhaW50cygpCi0gICAgewotICAgICAgICBpZiAoX2lkZW50aXR5Q29uc3RyYWludHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0lDX0FSUkFZOwotCi0gICAgICAgIFNjaGVtYUlkZW50aXR5Q29uc3RyYWludFtdIHJlc3VsdCA9IG5ldyBTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnRbX2lkZW50aXR5Q29uc3RyYWludHMuc2l6ZSgpXTsKLSAgICAgICAgaW50IGogPSAwOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBfaWRlbnRpdHlDb25zdHJhaW50cy52YWx1ZXMoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgaisrKQotICAgICAgICAgICAgcmVzdWx0W2pdID0gKChTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmKWkubmV4dCgpKS5nZXQoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ2xhc3NMb2FkZXIgZ2V0Q2xhc3NMb2FkZXIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9jbGFzc2xvYWRlcjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIElOVEVSTkFMTFkgT05MWSBieSB0aGUgY29kZSBnZW5lcmF0b3IgQUZURVIgdGhlIHR5cGUgc3lzdGVtIGhhcwotICAgICAqIGJlZW4gc2F2ZWQgYW5kIGEgaGFuZGxlIGhhcyBiZWVuIGVzdGFibGlzaGVkIGZvciBlYWNoIHR5cGUuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBoYW5kbGVGb3JUeXBlKFNjaGVtYVR5cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfbG9jYWxIYW5kbGVzLmhhbmRsZUZvclR5cGUodHlwZSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfbmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hVHlwZVN5c3RlbSB0eXBlU3lzdGVtRm9yTmFtZShTdHJpbmcgbmFtZSkKLSAgICB7Ci0gICAgICAgIGlmIChfbmFtZSAhPSBudWxsICYmIG5hbWUuZXF1YWxzKF9uYW1lKSkKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1NjaGVtYVR5cGVWaXNpdG9ySW1wbC5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU2NoZW1hVHlwZVZpc2l0b3JJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MjI4MTUuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU2NoZW1hVHlwZVZpc2l0b3JJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OTkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5UeXBlU3RvcmVWaXNpdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuVHlwZVN0b3JlOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQYXJ0aWNsZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUxvY2FsRWxlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUZpZWxkOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLQotLyoqCi0gKiBUaGlzIHN0YXRlIG1hY2hpbmUgdmFsaWRhdGVzIGVsZW1lbnQgb3JkZXIgYmFzZWQgb24gYSBkZXRlcm1pbmlzdGljCi0gKiBjb250ZW50IG1vZGVsLgotICovCi1wdWJsaWMgY2xhc3MgU2NoZW1hVHlwZVZpc2l0b3JJbXBsIGltcGxlbWVudHMgVHlwZVN0b3JlVmlzaXRvcgotewotICAgIC8qKgotICAgICAqIENvbnN0cnVjdCBpdCBieSBwYXNzaW5nIHRoZSByb290IG9mIHRoZSBjb250ZW50IG1vZGVsLgotICAgICAqLwotICAgIHB1YmxpYyBTY2hlbWFUeXBlVmlzaXRvckltcGwoU2NoZW1hUGFydGljbGUgcGFydCkKLSAgICB7Ci0gICAgICAgIGluaXQocGFydCk7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGVWaXNpdG9ySW1wbCgpCi0gICAgewotCi0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW5pdChTY2hlbWFQYXJ0aWNsZSBwYXJ0KQotICAgIHsKLSAgICAgICAgaWYgKF9zdGFjayA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBfc3RhY2sgPSBleHBhbmQobnVsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKF9yb2xsYmFjayA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBfcm9sbGJhY2sgPSBleHBhbmQobnVsbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBfc3RhY2tTaXplID0gMDsKLSAgICAgICAgX3JvbGxiYWNrU2l6ZSA9IDA7Ci0KLSAgICAgICAgaWYgKHBhcnQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgcHVzaChwYXJ0KTsKLSAgICAgICAgICAgIF9yb2xsYmFja0luZGV4ID0gMTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBWaXNpdG9yU3RhdGVbXSBleHBhbmQoVmlzaXRvclN0YXRlW10gb3JpZykKLSAgICB7Ci0gICAgICAgIGludCBuZXdzaXplID0gKG9yaWcgPT0gbnVsbCA/IDQgOiBvcmlnLmxlbmd0aCAqIDIpOwotICAgICAgICBWaXNpdG9yU3RhdGVbXSByZXN1bHQgPSBuZXcgVmlzaXRvclN0YXRlW25ld3NpemVdOwotICAgICAgICBpZiAob3JpZyAhPSBudWxsKQotICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weShvcmlnLCAwLCByZXN1bHQsIDAsIG9yaWcubGVuZ3RoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IChvcmlnID09IG51bGwgPyAwIDogb3JpZy5sZW5ndGgpOyBpIDwgbmV3c2l6ZTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHRbaV0gPSBuZXcgVmlzaXRvclN0YXRlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLQotCi0gICAgcHJpdmF0ZSBWaXNpdG9yU3RhdGVbXSBfc3RhY2s7Ci0gICAgcHJpdmF0ZSBWaXNpdG9yU3RhdGVbXSBfcm9sbGJhY2s7Ci0gICAgaW50IF9zdGFja1NpemU7Ci0gICAgaW50IF9yb2xsYmFja1NpemU7Ci0gICAgcHJpdmF0ZSBib29sZWFuIF9pc1ZhbGlkOwotICAgIHByaXZhdGUgU2NoZW1hUGFydGljbGUgX21hdGNoZWRQYXJ0aWNsZTsKLSAgICBwcml2YXRlIFZpc2l0b3JTdGF0ZSBfdG9wOwotICAgIHByaXZhdGUgaW50IF9yb2xsYmFja0luZGV4OwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVmlzaXRvclN0YXRlCi0gICAgewotICAgICAgICBwdWJsaWMgdm9pZCBjb3B5KFZpc2l0b3JTdGF0ZSBvcmlnKQotICAgICAgICB7Ci0gICAgICAgICAgICBfY3VyUGFydCA9IG9yaWcuX2N1clBhcnQ7Ci0gICAgICAgICAgICBfY3VyQ291bnQgPSBvcmlnLl9jdXJDb3VudDsKLSAgICAgICAgICAgIF9jdXJNaW4gPSBvcmlnLl9jdXJNaW47Ci0gICAgICAgICAgICBfY3VyTWF4ID0gb3JpZy5fY3VyTWF4OwotICAgICAgICAgICAgX3Byb2Nlc3NlZENoaWxkQ291bnQgPSBvcmlnLl9wcm9jZXNzZWRDaGlsZENvdW50OwotICAgICAgICAgICAgX2NoaWxkQ291bnQgPSBvcmlnLl9jaGlsZENvdW50OwotICAgICAgICAgICAgX3NlZW4gPSBvcmlnLl9zZWVuOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgaW5pdChTY2hlbWFQYXJ0aWNsZSBwYXJ0KQotICAgICAgICB7Ci0gICAgICAgICAgICBfY3VyUGFydCA9IHBhcnQ7Ci0gICAgICAgICAgICBfY3VyTWluID0gcGFydC5nZXRJbnRNaW5PY2N1cnMoKTsKLSAgICAgICAgICAgIF9jdXJNYXggPSBwYXJ0LmdldEludE1heE9jY3VycygpOwotICAgICAgICAgICAgX2N1ckNvdW50ID0gMDsKLSAgICAgICAgICAgIF9wcm9jZXNzZWRDaGlsZENvdW50ID0gMDsKLSAgICAgICAgICAgIF9jaGlsZENvdW50ID0gcGFydC5jb3VudE9mUGFydGljbGVDaGlsZCgpOwotICAgICAgICAgICAgX3NlZW4gPSBwYXJ0LmdldFBhcnRpY2xlVHlwZSgpID09IFNjaGVtYVBhcnRpY2xlLkFMTCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgYm9vbGVhbltfY2hpbGRDb3VudF0gOiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgU2NoZW1hUGFydGljbGUgX2N1clBhcnQ7Ci0gICAgICAgIGludCBfY3VyQ291bnQ7Ci0gICAgICAgIGludCBfY3VyTWF4OwotICAgICAgICBpbnQgX2N1ck1pbjsKLSAgICAgICAgaW50IF9wcm9jZXNzZWRDaGlsZENvdW50OwotICAgICAgICBpbnQgX2NoaWxkQ291bnQ7Ci0gICAgICAgIGJvb2xlYW5bXSBfc2VlbjsKLSAgICB9Ci0KLSAgICBWaXNpdG9yU3RhdGUgdG9wUmVmKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfc3RhY2tbX3N0YWNrU2l6ZSAtIDFdOwotICAgIH0KLQotICAgIHZvaWQgc2F2ZUNvcHkoVmlzaXRvclN0YXRlIHJlZikKLSAgICB7Ci0gICAgICAgIGlmIChfcm9sbGJhY2subGVuZ3RoID09IF9yb2xsYmFja1NpemUpCi0gICAgICAgICAgICBfcm9sbGJhY2sgPSBleHBhbmQoX3JvbGxiYWNrKTsKLQotICAgICAgICBfcm9sbGJhY2tbX3JvbGxiYWNrU2l6ZV0uY29weShyZWYpOwotICAgICAgICBfcm9sbGJhY2tTaXplICs9IDE7Ci0gICAgfQotCi0gICAgdm9pZCBhZGRQYXJ0aWNsZShTY2hlbWFQYXJ0aWNsZSBwYXJ0KQotICAgIHsKLSAgICAgICAgaWYgKF9zdGFjay5sZW5ndGggPT0gX3N0YWNrU2l6ZSkKLSAgICAgICAgICAgIF9zdGFjayA9IGV4cGFuZChfc3RhY2spOwotICAgICAgICBfc3RhY2tbX3N0YWNrU2l6ZV0uaW5pdChwYXJ0KTsKLSAgICAgICAgX3N0YWNrU2l6ZSArPSAxOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByZWNvbmRpdGlvbjoKLSAgICAgKiBzdGFjazogICAgKFIxIFIyIFIzIFI0KQotICAgICAqIHRvcDogICAgICBudWxsIG9yIGRpc2NhcmRhYmxlIGR1ZSB0byBwb3AgaW4gcHJvZ3Jlc3MKLSAgICAgKiByb2xsYmFjazogKFI4IFI3IFI2IFI1KSAoZW1wdHkgYXQgdGhlIHN0YXJ0IG9mICJ2aXNpdCIpCi0gICAgICoKLSAgICAgKiBQb3N0Y29uZGl0aW9uOgotICAgICAqIHN0YWNrOiAgICAoUjEgUjIgUjMpCi0gICAgICogdG9wOiAgICAgIEQ0ID0gbXV0YWJsZSBjb3B5IG9mIFI0Ci0gICAgICogcm9sbGJhY2sgIChSOCBSNyBSNiBSNSBSNCkKLSAgICAgKi8KLSAgICBib29sZWFuIHByZXBhcmUoKQotICAgIHsKLSAgICAgICAgaWYgKF9yb2xsYmFja0luZGV4ID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIF90b3AgPSBudWxsOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgX3RvcCA9IHRvcFJlZigpOwotICAgICAgICBzYXZlQ29weShfdG9wKTsKLSAgICAgICAgX3JvbGxiYWNrSW5kZXggPSBfc3RhY2tTaXplIC0gMTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUHJlY29uZGl0aW9uOgotICAgICAqIHN0YWNrOiAgICAoUjEgUjIgUjMgUjQgRDUgRDYpCi0gICAgICogdG9wOiAgICAgIEQ3Ci0gICAgICogcm9sbGJhY2s6IChSOCBSNyBSNiBSNSkKLSAgICAgKgotICAgICAqIFBvc3Rjb25kaXRpb246Ci0gICAgICogc3RhY2s6ICAgIChSMSBSMiBSMyBSNCBENSBENiBENykKLSAgICAgKiB0b3A6ICAgICAgRDggPSBuZXcgc3RhdGUgYmFzZWQgb24gcGFydAotICAgICAqIHJvbGxiYWNrICAoUjggUjcgUjYgUjUpCi0gICAgICovCi0gICAgdm9pZCBwdXNoKFNjaGVtYVBhcnRpY2xlIHBhcnQpCi0gICAgewotICAgICAgICBhZGRQYXJ0aWNsZShwYXJ0KTsKLSAgICAgICAgX3RvcCA9IHRvcFJlZigpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByZWNvbmRpdGlvbjoKLSAgICAgKiBzdGFjazogICAgKFIxIFIyIFIzIFI0IEQ1IEQ2KQotICAgICAqIHRvcDogICAgICBENyBpcyBkaXNjYXJkYWJsZQotICAgICAqIHJvbGxiYWNrOiAoUjggUjcgUjYgUjUpCi0gICAgICoKLSAgICAgKiBQb3N0Y29uZGl0aW9uOgotICAgICAqIHN0YWNrOiAgICAoUjEgUjIgUjMgUjQgRDUpCi0gICAgICogdG9wOiAgICAgIEQ2IChzZWUgcHJlcGFyZSBpbiBjYXNlIGl0J3MgYW4gUiBzdGF0ZSkKLSAgICAgKiByb2xsYmFjayAgKFI4IFI3IFI2IFI1KQotICAgICAqLwotICAgIGJvb2xlYW4gcG9wKCkKLSAgICB7Ci0gICAgICAgIF9zdGFja1NpemUgLT0gMTsKLSAgICAgICAgaWYgKF9zdGFja1NpemUgPD0gX3JvbGxiYWNrSW5kZXgpCi0gICAgICAgICAgICByZXR1cm4gcHJlcGFyZSgpOwotICAgICAgICBfdG9wID0gdG9wUmVmKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByZWNvbmRpdGlvbjoKLSAgICAgKiBzdGFjazogICAgKFIxIFIyIFIzIFI0IEQ1IEQ2KQotICAgICAqIHRvcDogICAgICBENwotICAgICAqIHJvbGxiYWNrOiAoUjggUjcgUjYgUjUpCi0gICAgICoKLSAgICAgKiBQb3N0Y29uZGl0aW9uOgotICAgICAqIHN0YWNrOiAgICAoUjEgUjIgUjMgUjQgRDUgRDYgRDcpIC0+IGFuZCByZW5hbWUgdG8gRCdzIHRvIFIncwotICAgICAqIHRvcDogICAgICBudWxsCi0gICAgICogcm9sbGJhY2sgICgpCi0gICAgICovCi0gICAgdm9pZCBjb21taXQoKQotICAgIHsKLSAgICAgICAgX3RvcCA9IG51bGw7Ci0gICAgICAgIF9yb2xsYmFja0luZGV4ID0gX3N0YWNrU2l6ZTsKLSAgICAgICAgX3JvbGxiYWNrU2l6ZSA9IDA7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUHJlY29uZGl0aW9uOgotICAgICAqIHN0YWNrOiAgICAoUjEgUjIgUjMgUjQgRDUgRDYpCi0gICAgICogdG9wOiAgICAgIEQ3IGlzIGRpc2NhcmRhYmxlCi0gICAgICogcm9sbGJhY2s6IChSOCBSNyBSNiBSNSkKLSAgICAgKgotICAgICAqIFBvc3Rjb25kaXRpb246Ci0gICAgICogc3RhY2s6ICAgIChSMSBSMiBSMyBSNCBSNSBSNiBSNyBSOCkKLSAgICAgKiB0b3A6ICAgICAgbnVsbAotICAgICAqIHJvbGxiYWNrICAoKQotICAgICAqLwotICAgIHZvaWQgcm9sbGJhY2soKQotICAgIHsKLSAgICAgICAgd2hpbGUgKF9yb2xsYmFja1NpemUgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBfcm9sbGJhY2tTaXplIC09IDE7Ci0gICAgICAgICAgICBWaXNpdG9yU3RhdGUgdGVtcCA9IF9zdGFja1tfcm9sbGJhY2tJbmRleF07Ci0gICAgICAgICAgICBfc3RhY2tbX3JvbGxiYWNrSW5kZXhdID0gX3JvbGxiYWNrW19yb2xsYmFja1NpemVdOwotICAgICAgICAgICAgX3JvbGxiYWNrW19yb2xsYmFja1NpemVdID0gdGVtcDsKLSAgICAgICAgICAgIF9yb2xsYmFja0luZGV4ICs9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgX3N0YWNrU2l6ZSA9IF9yb2xsYmFja0luZGV4OwotICAgICAgICBfdG9wID0gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBXaGVuIG5vIHZhbGlkIG5leHQgc3RhdGUgY2FuIGJlIGZvdW5kLCB0aGVuICJub3RWYWxpZCIKLSAgICAgKiBpcyByZXR1cm5lZC4gSXQgcm9sbHMgYmFjayBhbnkgY2hhbmdlcyB0byB0aGUgc3RhdGUKLSAgICAgKiBtYWNoaW5lIHN0YWNrLCBzZXRzIHRvIGZhbHNlIHRoZSB2YWxpZCBiaXQsIGFuZCBjbGVhcnMKLSAgICAgKiB0aGUgbWF0Y2hlZCBlbGVtZW50IHN0YXRlIGJlZm9yZSByZXR1cm5pbmcgZmFsc2UuCi0gICAgICovCi0gICAgYm9vbGVhbiBub3RWYWxpZCgpCi0gICAgewotICAgICAgICBfaXNWYWxpZCA9IGZhbHNlOwotICAgICAgICBfbWF0Y2hlZFBhcnRpY2xlID0gbnVsbDsKLSAgICAgICAgcm9sbGJhY2soKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFdoZW4gYSB2YWxpZCBzdGF0ZSB0cmFuc2l0aW9uIGhhcyBiZWVuIGRvbmUsIHRoZW4gIm9rIgotICAgICAqIGlzIHJldHVybmVkLiBJdCBjb21taXRzIHRoZSBjaGFuZ2VkIHN0YXRlIG1hY2hpbmUgc3RhdGUsCi0gICAgICogc3RvcmVzIHRoZSBtYXRjaGVkIGVsZW1lbnQgc3RhdGUsIGFuZCByZXR1cm5zIHRydWUuCi0gICAgICovCi0gICAgYm9vbGVhbiBvayhTY2hlbWFQYXJ0aWNsZSBwYXJ0KQotICAgIHsKLSAgICAgICAgX21hdGNoZWRQYXJ0aWNsZSA9IHBhcnQ7Ci0gICAgICAgIGNvbW1pdCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKj09IFZJU0lUT1IgSU1QTEVNRU5UQVRJT04gPT0qLwotCi0gICAgLyoqCi0gICAgICogVHJhdmVyc2VzIGEgZGV0ZXJtaW5pc3RpYyBjb250ZW50IG1vZGVsLCBjaGVja2luZyBmb3IKLSAgICAgKiB2YWxpZGl0eSBhdCBhbnkgZ2l2ZW4gcG9pbnQuCi0gICAgICoKLSAgICAgKiBDYWxsIHZpc2l0KG51bGwpIG9uY2UgYXQgdGhlIGVuZCBpZiB5b3UncmUgY2hlY2tpbmcgZm9yCi0gICAgICogY29tcGxldGUgdmFsaWRpdHkgb2YgdGhlIHNlcXVlbmNlIG9mIGVsZW1lbnRzLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIHZpc2l0KFFOYW1lIGVsdE5hbWUpCi0gICAgewotICAgICAgICBpZiAoIXByZXBhcmUoKSkKLSAgICAgICAgICAgIHJldHVybiBub3RWYWxpZCgpOwotCi0gICAgICAgIHRyYXZlcnNpbmc6IGZvciAoOzspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHdoaWxlIChfdG9wLl9jdXJDb3VudCA+PSBfdG9wLl9jdXJNYXgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFwb3AoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsgdHJhdmVyc2luZzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbWlubWF4OiBzd2l0Y2ggKF90b3AuX2N1clBhcnQuZ2V0UGFydGljbGVUeXBlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKLQotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuV0lMRENBUkQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmICghX3RvcC5fY3VyUGFydC5jYW5TdGFydFdpdGhFbGVtZW50KGVsdE5hbWUpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RvcC5fY3VyQ291bnQgPCBfdG9wLl9jdXJNaW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vdFZhbGlkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhayBtaW5tYXg7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgX3RvcC5fY3VyQ291bnQrKzsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9rKF90b3AuX2N1clBhcnQpOwotCi0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5FTEVNRU5UOgotICAgICAgICAgICAgICAgICAgICBpZiAoIV90b3AuX2N1clBhcnQuY2FuU3RhcnRXaXRoRWxlbWVudChlbHROYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90b3AuX2N1ckNvdW50IDwgX3RvcC5fY3VyTWluKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub3RWYWxpZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbWlubWF4OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIF90b3AuX2N1ckNvdW50Kys7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBvayhfdG9wLl9jdXJQYXJ0KTsKLQotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuU0VRVUVOQ0U6Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBfdG9wLl9wcm9jZXNzZWRDaGlsZENvdW50OyBpIDwgX3RvcC5fY2hpbGRDb3VudDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTY2hlbWFQYXJ0aWNsZSBjYW5kaWRhdGUgPSBfdG9wLl9jdXJQYXJ0LmdldFBhcnRpY2xlQ2hpbGQoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlLmNhblN0YXJ0V2l0aEVsZW1lbnQoZWx0TmFtZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RvcC5fcHJvY2Vzc2VkQ2hpbGRDb3VudCA9IGkgKyAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goY2FuZGlkYXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSB0cmF2ZXJzaW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUuaXNTa2lwcGFibGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RvcC5fcHJvY2Vzc2VkQ2hpbGRDb3VudCAhPSAwIHx8IF90b3AuX2N1ckNvdW50IDwgX3RvcC5fY3VyTWluKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm90VmFsaWQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBtaW5tYXg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgX3RvcC5fY3VyQ291bnQrKzsKLSAgICAgICAgICAgICAgICAgICAgX3RvcC5fcHJvY2Vzc2VkQ2hpbGRDb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHRyYXZlcnNpbmc7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLkNIT0lDRToKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfdG9wLl9jaGlsZENvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFNjaGVtYVBhcnRpY2xlIGNhbmRpZGF0ZSA9IF90b3AuX2N1clBhcnQuZ2V0UGFydGljbGVDaGlsZChpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUuY2FuU3RhcnRXaXRoRWxlbWVudChlbHROYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdG9wLl9jdXJDb3VudCsrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goY2FuZGlkYXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSB0cmF2ZXJzaW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChfdG9wLl9jdXJDb3VudCA8IF90b3AuX2N1ck1pbiAmJiAhX3RvcC5fY3VyUGFydC5pc1NraXBwYWJsZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vdFZhbGlkKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrIG1pbm1heDsKLQotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQUxMOgotCi0gICAgICAgICAgICAgICAgICAgIGludCBza2lwcGVkID0gX3RvcC5fcHJvY2Vzc2VkQ2hpbGRDb3VudDsKLSAgICAgICAgICAgICAgICAgICAgYWxsc2NhbjogZm9yIChpbnQgaSA9IDA7IGkgPCBfdG9wLl9jaGlsZENvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdG9wLl9zZWVuW2ldKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGFsbHNjYW47Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIFNjaGVtYVBhcnRpY2xlIGNhbmRpZGF0ZSA9IF90b3AuX2N1clBhcnQuZ2V0UGFydGljbGVDaGlsZChpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5kaWRhdGUuY2FuU3RhcnRXaXRoRWxlbWVudChlbHROYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdG9wLl9wcm9jZXNzZWRDaGlsZENvdW50Kys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RvcC5fc2VlbltpXSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChjYW5kaWRhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIHRyYXZlcnNpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjYW5kaWRhdGUuaXNTa2lwcGFibGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwcGVkICs9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNraXBwZWQgPCBfdG9wLl9jaGlsZENvdW50KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RvcC5fY3VyQ291bnQgPCBfdG9wLl9jdXJNaW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vdFZhbGlkKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhayBtaW5tYXg7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgX3RvcC5fY3VyQ291bnQrKzsKLSAgICAgICAgICAgICAgICAgICAgX3RvcC5fcHJvY2Vzc2VkQ2hpbGRDb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIEFycmF5cy5maWxsKF90b3AuX3NlZW4sIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUgdHJhdmVyc2luZzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gc29tZWJvZHkgY2FsbGVkICJicmVhayBtaW5tYXgiLCBzbyBwb3Agb3V0IG9mIGxvb3AKLSAgICAgICAgICAgIGlmICghcG9wKCkpCi0gICAgICAgICAgICAgICAgYnJlYWsgdHJhdmVyc2luZzsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHdlJ3ZlIGNvbXBsZXRlZCB0aGUgb3V0ZXJtb3N0IGxvb3AKLSAgICAgICAgaWYgKGVsdE5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBvayhudWxsKTsKLQotICAgICAgICAvLyB0aGlzIG1lYW5zIHdlIGhhdmUgZXh0cmEgZWxlbWVudHMgYXQgdGhlIGVuZAotICAgICAgICByZXR1cm4gbm90VmFsaWQoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGVsZW1lbnRmbGFncwotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0X2VsZW1lbnRmbGFncygpCi0gICAgewotICAgICAgICBpZiAoY3VycmVudFBhcnRpY2xlKCkgPT0gbnVsbCB8fCBjdXJyZW50UGFydGljbGUoKS5nZXRQYXJ0aWNsZVR5cGUoKSAhPSBTY2hlbWFQYXJ0aWNsZS5FTEVNRU5UKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgU2NoZW1hTG9jYWxFbGVtZW50IGVsdCA9IChTY2hlbWFMb2NhbEVsZW1lbnQpY3VycmVudFBhcnRpY2xlKCk7Ci0KLSAgICAgICAgcmV0dXJuIChlbHQuaXNOaWxsYWJsZSgpID8gVHlwZVN0b3JlLk5JTExBQkxFIDogMCkgfAotICAgICAgICAgICAgICAgKGVsdC5pc0RlZmF1bHQoKSA/IFR5cGVTdG9yZS5IQVNERUZBVUxUIDogMCkgfAotICAgICAgICAgICAgICAgKGVsdC5pc0ZpeGVkKCkgPyBUeXBlU3RvcmUuRklYRUQgOiAwKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGRlZmF1bHQgdGV4dAotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0X2RlZmF1bHRfdGV4dCgpCi0gICAgewotICAgICAgICBpZiAoY3VycmVudFBhcnRpY2xlKCkgPT0gbnVsbCB8fCBjdXJyZW50UGFydGljbGUoKS5nZXRQYXJ0aWNsZVR5cGUoKSAhPSBTY2hlbWFQYXJ0aWNsZS5FTEVNRU5UKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgcmV0dXJuICgoU2NoZW1hTG9jYWxFbGVtZW50KWN1cnJlbnRQYXJ0aWNsZSgpKS5nZXREZWZhdWx0VGV4dCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHNjaGVtYSBmaWVsZCBmb3IgdGhpcyBmaWVsZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgU2NoZW1hRmllbGQgZ2V0X3NjaGVtYV9maWVsZCgpIHsKLSAgICAgICAgaWYgKGN1cnJlbnRQYXJ0aWNsZSgpIGluc3RhbmNlb2YgU2NoZW1hRmllbGQpCi0gICAgICAgICAgICByZXR1cm4gKFNjaGVtYUZpZWxkKWN1cnJlbnRQYXJ0aWNsZSgpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBzY2hlbWEgZWxlbWVudAotICAgICAqLwotICAgIHB1YmxpYyBTY2hlbWFQYXJ0aWNsZSBjdXJyZW50UGFydGljbGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9tYXRjaGVkUGFydGljbGU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbnRpcmUgY29udGVudCB1cCB0byBub3cgaXMgdmFsaWQuCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNBbGxWYWxpZCgpCi0gICAgewotICAgICAgICByZXR1cm4gX2lzVmFsaWQ7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU3RzY0NoZWNrZXIuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1N0c2NDaGVja2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjODVkYTguLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU3RzY0NoZWNrZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MTQgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hUGFydGljbGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFcnJvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUxvY2FsRWxlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUlkZW50aXR5Q29uc3RyYWludDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUF0dHJpYnV0ZU1vZGVsOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hTG9jYWxBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFHbG9iYWxFbGVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sSUQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uWG1sRXJyb3JDb250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uWEJlYW5EZWJ1ZzsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlFOYW1lSGVscGVyOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLXB1YmxpYyBjbGFzcyBTdHNjQ2hlY2tlcgotewotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBjaGVja0FsbCgpCi0gICAgewotICAgICAgICAvLyB3YWxrIHRoZSB0cmVlIG9mIHR5cGVzCi0gICAgICAgIFN0c2NTdGF0ZSBzdGF0ZSA9IFN0c2NTdGF0ZS5nZXQoKTsKLQotICAgICAgICBMaXN0IGFsbFNlZW5UeXBlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgYWxsU2VlblR5cGVzLmFkZEFsbChBcnJheXMuYXNMaXN0KHN0YXRlLmRvY3VtZW50VHlwZXMoKSkpOwotICAgICAgICBhbGxTZWVuVHlwZXMuYWRkQWxsKEFycmF5cy5hc0xpc3Qoc3RhdGUuYXR0cmlidXRlVHlwZXMoKSkpOwotICAgICAgICBhbGxTZWVuVHlwZXMuYWRkQWxsKEFycmF5cy5hc0xpc3Qoc3RhdGUucmVkZWZpbmVkR2xvYmFsVHlwZXMoKSkpOwotICAgICAgICBhbGxTZWVuVHlwZXMuYWRkQWxsKEFycmF5cy5hc0xpc3Qoc3RhdGUuZ2xvYmFsVHlwZXMoKSkpOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWxsU2VlblR5cGVzLnNpemUoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBTY2hlbWFUeXBlIGdUeXBlID0gKFNjaGVtYVR5cGUpYWxsU2VlblR5cGVzLmdldChpKTsKLSAgICAgICAgICAgIGlmICghc3RhdGUubm9QdnIoKSAmJiAgLy8gb3B0aW9uIHRvIHR1cm4gb2ZmIHBhcnRpY2xlIHJlc3RyaWN0aW9uIGNoZWNraW5nCi0gICAgICAgICAgICAgICAgIWdUeXBlLmlzRG9jdW1lbnRUeXBlKCkpIC8vIERvbid0IGNoZWNrIGRvYyB0eXBlcyBmb3IgcmVzdHJpY3Rpb24uIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNoZWNrUmVzdHJpY3Rpb24oKFNjaGVtYVR5cGVJbXBsKWdUeXBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNoZWNrRmllbGRzKChTY2hlbWFUeXBlSW1wbClnVHlwZSk7Ci0gICAgICAgICAgICBhbGxTZWVuVHlwZXMuYWRkQWxsKEFycmF5cy5hc0xpc3QoZ1R5cGUuZ2V0QW5vbnltb3VzVHlwZXMoKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgY2hlY2tTdWJzdGl0dXRpb25Hcm91cHMoc3RhdGUuZ2xvYmFsRWxlbWVudHMoKSk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIFRoZSBmb2xsb3dpbmcgY29kZSBjaGVja3MgcnVsZSAjNSBvZiBodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jY29zcy1jdAotICAgICAqIGFzIHdlbGwgYXMgYXR0cmlidXRlICsgZWxlbWVudCBkZWZhdWx0L2ZpeGVkIHZhbGlkaXR5LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBjaGVja0ZpZWxkcyhTY2hlbWFUeXBlSW1wbCBzVHlwZSkKLSAgICB7Ci0gICAgICAgIGlmIChzVHlwZS5pc1NpbXBsZVR5cGUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIFhtbE9iamVjdCBsb2NhdGlvbiA9IHNUeXBlLmdldFBhcnNlT2JqZWN0KCk7Ci0gICAgICAgIAotICAgICAgICBTY2hlbWFBdHRyaWJ1dGVNb2RlbCBzQXR0ck1vZGVsID0gc1R5cGUuZ2V0QXR0cmlidXRlTW9kZWwoKTsKLSAgICAgICAgaWYgKHNBdHRyTW9kZWwgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgU2NoZW1hTG9jYWxBdHRyaWJ1dGVbXSBzQXR0cnMgID0gc0F0dHJNb2RlbC5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgICAgICAgICBRTmFtZSBpZEF0dHIgPSBudWxsOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzQXR0cnMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKFhtbElELnR5cGUuaXNBc3NpZ25hYmxlRnJvbShzQXR0cnNbaV0uZ2V0VHlwZSgpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpZEF0dHIgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlkQXR0ciA9IHNBdHRyc1tpXS5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0c2NTdGF0ZS5nZXQoKS5lcnJvcigiQm90aCAiICsgUU5hbWVIZWxwZXIucHJldHR5KGlkQXR0cikgKyAiIGFuZCAiICsgc0F0dHJzW2ldLmdldE5hbWUoKSArICIgYXJlIHhzOklEIGF0dHJpYnV0ZXM7IG9ubHkgb25lIElEIGF0dHJpYnV0ZSBpcyBhbGxvd2VkIG9uIGEgdHlwZS4iLCBYbWxFcnJvckNvbnRleHQuR0VORVJJQ19FUlJPUiwgbG9jYXRpb24pOwotICAgICAgICAgICAgICAgICAgICBpZiAoc0F0dHJzW2ldLmdldERlZmF1bHRUZXh0KCkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0c2NTdGF0ZS5nZXQoKS5lcnJvcigiQW4gYXR0cmlidXRlIG9mIHR5cGUgeHM6SUQgaXMgbm90IGFsbG93ZWQgdG8gaGF2ZSBhIGRlZmF1bHQgb3IgZml4ZWQgY29uc3RyYWludC4iLCBYbWxFcnJvckNvbnRleHQuR0VORVJJQ19FUlJPUiwgbG9jYXRpb24pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWVDb25zdHJhaW50ID0gc0F0dHJzW2ldLmdldERlZmF1bHRUZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZUNvbnN0cmFpbnQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1sQW55U2ltcGxlVHlwZSB2YWwgPSBzQXR0cnNbaV0uZ2V0RGVmYXVsdFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWwudmFsaWRhdGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjaGVtYVByb3BlcnR5SW1wbCBzUHJvcCA9IChTY2hlbWFQcm9wZXJ0eUltcGwpc1R5cGUuZ2V0QXR0cmlidXRlUHJvcGVydHkoc0F0dHJzW2ldLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNQcm9wICE9IG51bGwgJiYgc1Byb3AuZ2V0RGVmYXVsdFRleHQoKSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1Byb3Auc2V0RGVmYXVsdFZhbHVlKG5ldyBYbWxWYWx1ZVJlZih2YWwpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNBdHRyc1tpXS5pc0ZpeGVkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0c2NTdGF0ZS5nZXQoKS5lcnJvcigiVGhlICIgKyBRTmFtZUhlbHBlci5wcmV0dHkoc0F0dHJzW2ldLmdldE5hbWUoKSkgKyAiIGVsZW1lbnQgZml4ZWQgdmFsdWUgJyIgKyB2YWx1ZUNvbnN0cmFpbnQgKyAiJyBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNBdHRyc1tpXS5nZXRUeXBlKCkpLCBYbWxFcnJvckNvbnRleHQuR0VORVJJQ19FUlJPUiwgbG9jYXRpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RzY1N0YXRlLmdldCgpLmVycm9yKCJUaGUgIiArIFFOYW1lSGVscGVyLnByZXR0eShzQXR0cnNbaV0uZ2V0TmFtZSgpKSArICIgZWxlbWVudCBkZWZhdWx0IHZhbHVlICciICsgdmFsdWVDb25zdHJhaW50ICsgIicgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzQXR0cnNbaV0uZ2V0VHlwZSgpKSwgWG1sRXJyb3JDb250ZXh0LkdFTkVSSUNfRVJST1IsIGxvY2F0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY2hlY2tFbGVtZW50RGVmYXVsdHMoc1R5cGUuZ2V0Q29udGVudE1vZGVsKCksIGxvY2F0aW9uLCBzVHlwZSk7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgY2hlY2tFbGVtZW50RGVmYXVsdHMoU2NoZW1hUGFydGljbGUgbW9kZWwsIFhtbE9iamVjdCBsb2NhdGlvbiwgU2NoZW1hVHlwZSBwYXJlbnRUeXBlKQotICAgIHsKLSAgICAgICAgaWYgKG1vZGVsID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN3aXRjaCAobW9kZWwuZ2V0UGFydGljbGVUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuU0VRVUVOQ0U6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLkNIT0lDRToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQUxMOgotICAgICAgICAgICAgICAgIFNjaGVtYVBhcnRpY2xlW10gY2hpbGRyZW4gPSBtb2RlbC5nZXRQYXJ0aWNsZUNoaWxkcmVuKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNoZWNrRWxlbWVudERlZmF1bHRzKGNoaWxkcmVuW2ldLCBsb2NhdGlvbiwgcGFyZW50VHlwZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLkVMRU1FTlQ6Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlQ29uc3RyYWludCA9IG1vZGVsLmdldERlZmF1bHRUZXh0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlQ29uc3RyYWludCAhPSBudWxsKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGVsLmdldFR5cGUoKS5pc1NpbXBsZVR5cGUoKSB8fCBtb2RlbC5nZXRUeXBlKCkuZ2V0Q29udGVudFR5cGUoKSA9PSBTY2hlbWFUeXBlLlNJTVBMRV9DT05URU5UKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbWxBbnlTaW1wbGVUeXBlIHZhbCA9IG1vZGVsLmdldERlZmF1bHRWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsLnZhbGlkYXRlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY2hlbWFQcm9wZXJ0eUltcGwgc1Byb3AgPSAoU2NoZW1hUHJvcGVydHlJbXBsKXBhcmVudFR5cGUuZ2V0RWxlbWVudFByb3BlcnR5KG1vZGVsLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNQcm9wICE9IG51bGwgJiYgc1Byb3AuZ2V0RGVmYXVsdFRleHQoKSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1Byb3Auc2V0RGVmYXVsdFZhbHVlKG5ldyBYbWxWYWx1ZVJlZih2YWwpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGVsLmlzRml4ZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RzY1N0YXRlLmdldCgpLmVycm9yKCJUaGUgIiArIFFOYW1lSGVscGVyLnByZXR0eShtb2RlbC5nZXROYW1lKCkpICsgIiBlbGVtZW50IGZpeGVkIHZhbHVlICciICsgdmFsdWVDb25zdHJhaW50ICsgIicgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShtb2RlbC5nZXRUeXBlKCkpLCBYbWxFcnJvckNvbnRleHQuR0VORVJJQ19FUlJPUiwgbG9jYXRpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RzY1N0YXRlLmdldCgpLmVycm9yKCJUaGUgIiArIFFOYW1lSGVscGVyLnByZXR0eShtb2RlbC5nZXROYW1lKCkpICsgIiBlbGVtZW50IGRlZmF1bHQgdmFsdWUgJyIgKyB2YWx1ZUNvbnN0cmFpbnQgKyAiJyBpcyBub3QgYSB2YWxpZCB2YWx1ZSBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKG1vZGVsLmdldFR5cGUoKSksIFhtbEVycm9yQ29udGV4dC5HRU5FUklDX0VSUk9SLCBsb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobW9kZWwuZ2V0VHlwZSgpLmdldENvbnRlbnRUeXBlKCkgPT0gU2NoZW1hVHlwZS5FTEVNRU5UX0NPTlRFTlQpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0c2NTdGF0ZS5nZXQoKS5lcnJvcigiVGhlICIgKyBRTmFtZUhlbHBlci5wcmV0dHkobW9kZWwuZ2V0TmFtZSgpKSArICIgZWxlbWVudCBjYW5ub3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgJyIgKyB2YWx1ZUNvbnN0cmFpbnQgKyAiJyBiZWNhdXNlIGl0cyB0eXBlIGhhcyBlbGVtZW50IGNvbnRlbnQgb25seS4iLCBYbWxFcnJvckNvbnRleHQuR0VORVJJQ19FUlJPUiwgbG9jYXRpb24pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1vZGVsLmdldFR5cGUoKS5nZXRDb250ZW50VHlwZSgpID09IFNjaGVtYVR5cGUuRU1QVFlfQ09OVEVOVCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgU3RzY1N0YXRlLmdldCgpLmVycm9yKCJUaGUgIiArIFFOYW1lSGVscGVyLnByZXR0eShtb2RlbC5nZXROYW1lKCkpICsgIiBlbGVtZW50IGNhbm5vdCBoYXZlIGEgZGVmYXVsdCB2YWx1ZSAnIiArIHZhbHVlQ29uc3RyYWludCArICInIGJlY2F1c2UgaXRzIHR5cGUgaGFzIGVtcHR5IGNvbnRlbnQgb25seS4iLCBYbWxFcnJvckNvbnRleHQuR0VORVJJQ19FUlJPUiwgbG9jYXRpb24pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIC8vIG5vdGhpbmcgdG8gZG8uCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogVGhlIGZvbGxvd2luZyBjb2RlIG9ubHkgY2hlY2tzIHJ1bGUgIzUgb2YgaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2Rlcml2YXRpb24tb2stcmVzdHJpY3Rpb24KLSAgICAgKiAgKEV2ZXJ5dGhpbmcgZWxzZSBjYW4gYW5kIHNob3VsZCBiZSBkb25lIGluIFN0c2NSZXNvbHZlciwgYmVjYXVzZSB3ZSBjYW4gZ2l2ZSBtb3JlIGRldGFpbGVkIGxpbmUgIyBpbmZvIHRoZXJlCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIGNoZWNrUmVzdHJpY3Rpb24oU2NoZW1hVHlwZUltcGwgc1R5cGUpCi0gICAgewotICAgICAgICBpZiAoc1R5cGUuZ2V0RGVyaXZhdGlvblR5cGUoKSA9PSBTY2hlbWFUeXBlLkRUX1JFU1RSSUNUSU9OICYmICFzVHlwZS5pc1NpbXBsZVR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgU3RzY1N0YXRlIHN0YXRlID0gU3RzY1N0YXRlLmdldCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyB3ZSBkb24ndCByZW1lbWJlciB2ZXJ5IHByZWNpc2UgbGluZSBudW1iZXIgaW5mb3JtYXRpb24sIGJ1dCBpdCdzIGJldHRlciB0aGFuIG5vdGhpbi4KLSAgICAgICAgICAgIFhtbE9iamVjdCBsb2NhdGlvbiA9IHNUeXBlLmdldFBhcnNlT2JqZWN0KCk7Ci0gICAgICAgIAotICAgICAgICAgICAgU2NoZW1hVHlwZSBiYXNlVHlwZSA9IHNUeXBlLmdldEJhc2VUeXBlKCk7Ci0gICAgICAgICAgICBpZiAoYmFzZVR5cGUuaXNTaW1wbGVUeXBlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIlRoZSBiYXNlIHR5cGUgb2YgYSBjb21wbGV4IHR5cGUgcmVzdHJpY3Rpb24gbXVzdCBiZSBhIGNvbXBsZXggdHlwZS4iLCBYbWxFcnJvckNvbnRleHQuSUxMRUdBTF9SRVNUUklDVElPTiwgbG9jYXRpb24pOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gNSBUaGUgYXBwcm9wcmlhdGUgY2FzZSBhbW9uZyB0aGUgZm9sbG93aW5nIG11c3QgYmUgdHJ1ZToKLSAgICAgICAgICAgIHN3aXRjaCAoc1R5cGUuZ2V0Q29udGVudFR5cGUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuU0lNUExFX0NPTlRFTlQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIDUuMSBJZiB0aGUge2NvbnRlbnQgdHlwZX0gb2YgdGhlIGNvbXBsZXggdHlwZSBkZWZpbml0aW9uIGlzIGEgc2ltcGxlIHR5cGUgZGVmaW5pdGlvbiwgdGhlbiBvbmUgb2YgdGhlIGZvbGxvd2luZyBtdXN0IGJlIHRydWU6Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYmFzZVR5cGUuZ2V0Q29udGVudFR5cGUoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLlNJTVBMRV9DT05URU5UOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDUuMS4xIFRoZSB7Y29udGVudCB0eXBlfSBvZiB0aGUge2Jhc2UgdHlwZSBkZWZpbml0aW9ufSBtdXN0IGJlIGEgc2ltcGxlIHR5cGUgZGVmaW5pdGlvbiBvZiB3aGljaCB0aGUge2NvbnRlbnQgdHlwZX0gaXMgYSC3dmFsaWQgcmVzdHJpY3Rpb263IGFzIGRlZmluZWQgaW4gRGVyaXZhdGlvbiBWYWxpZCAoUmVzdHJpY3Rpb24sIFNpbXBsZSkgKKczLjE0LjYpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvZG86IHdlIGRvbid0IGFsbG93IHRoZSBjb250ZW50IHR5cGUgdG8gYmUgYW4gIm9uIHRoZSBzaWRlIiBzaW1wbGUgdHlwZSwgc28gbm90aGluZyBmYW5jeSB0byBjaGVjayBoZXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuTUlYRURfQ09OVEVOVDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA1LjEuMiBUaGUge2Jhc2UgdHlwZSBkZWZpbml0aW9ufSBtdXN0IGJlIG1peGVkIGFuZCBoYXZlIGEgcGFydGljbGUgd2hpY2ggaXMgt2VtcHRpYWJsZbcgYXMgZGVmaW5lZCBpbiBQYXJ0aWNsZSBFbXB0aWFibGUgKKczLjkuNikuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2VUeXBlLmdldENvbnRlbnRNb2RlbCgpICE9IG51bGwgJiYgIWJhc2VUeXBlLmdldENvbnRlbnRNb2RlbCgpLmlzU2tpcHBhYmxlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvcigiQSB0eXBlIHdpdGggYSBzaW1wbGUgY29udGVudCBtb2RlbCBjYW4gb25seSByZXN0cmljdCBhIG1peGVkIGNvbnRlbnQgbW9kZWwgdGhhdCBoYXMgc2tpcHBhYmxlIGVsZW1lbnRzLiIsIFhtbEVycm9yQ29udGV4dC5JTExFR0FMX1JFU1RSSUNUSU9OLCBsb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJBIHR5cGUgd2l0aCBhIHNpbXBsZSBjb250ZW50IG1vZGVsIGNhbiBvbmx5IHJlc3RyaWN0IGEgc2ltcGxlIG9yIG1peGVkIGNvbnRlbnQgbW9kZWwuIiwgWG1sRXJyb3JDb250ZXh0LklMTEVHQUxfUkVTVFJJQ1RJT04sIGxvY2F0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5FTVBUWV9DT05URU5UOgotICAgICAgICAgICAgICAgICAgICAvLyA1LjIgSWYgdGhlIHtjb250ZW50IHR5cGV9IG9mIHRoZSBjb21wbGV4IHR5cGUgaXRzZWxmIGlzIGVtcHR5ICwgdGhlbiBvbmUgb2YgdGhlIGZvbGxvd2luZyBtdXN0IGJlIHRydWU6Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYmFzZVR5cGUuZ2V0Q29udGVudFR5cGUoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkVNUFRZX0NPTlRFTlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNS4yLjEgVGhlIHtjb250ZW50IHR5cGV9IG9mIHRoZSB7YmFzZSB0eXBlIGRlZmluaXRpb259IG11c3QgYWxzbyBiZSBlbXB0eS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5NSVhFRF9DT05URU5UOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkVMRU1FTlRfQ09OVEVOVDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA1LjIuMiBUaGUge2NvbnRlbnQgdHlwZX0gb2YgdGhlIHtiYXNlIHR5cGUgZGVmaW5pdGlvbn0gbXVzdCBiZSBlbGVtZW50T25seSBvciBtaXhlZCBhbmQgaGF2ZSBhIHBhcnRpY2xlIHdoaWNoIGlzILdlbXB0aWFibGW3IGFzIGRlZmluZWQgaW4gUGFydGljbGUgRW1wdGlhYmxlICinMy45LjYpLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlVHlwZS5nZXRDb250ZW50TW9kZWwoKSAhPSBudWxsICYmICFiYXNlVHlwZS5nZXRDb250ZW50TW9kZWwoKS5pc1NraXBwYWJsZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkEgdHlwZSB3aXRoIGFuIGVtcHR5IGNvbnRlbnQgbW9kZWwgY2FuIG9ubHkgcmVzdHJpY3QgYSBjb250ZW50IG1vZGVsIHRoYXQgaGFzIHNraXBwYWJsZSBlbGVtZW50cy4iLCBYbWxFcnJvckNvbnRleHQuSUxMRUdBTF9SRVNUUklDVElPTiwgbG9jYXRpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkEgdHlwZSB3aXRoIGFuIGVtcHR5IGNvbnRlbnQgbW9kZWwgY2Fubm90IHJlc3RyaWN0IGEgdHlwZSB3aXRoIGEgc2ltcGxlIGNvbnRlbnQgbW9kZWwuIiwgWG1sRXJyb3JDb250ZXh0LklMTEVHQUxfUkVTVFJJQ1RJT04sIGxvY2F0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5NSVhFRF9DT05URU5UOgotICAgICAgICAgICAgICAgICAgICAvLyA1LjMgSWYgdGhlIHtjb250ZW50IHR5cGV9IG9mIHRoZSB7YmFzZSB0eXBlIGRlZmluaXRpb259IGlzIG1peGVkLi4uCi0gICAgICAgICAgICAgICAgICAgIGlmIChiYXNlVHlwZS5nZXRDb250ZW50VHlwZSgpICE9IFNjaGVtYVR5cGUuTUlYRURfQ09OVEVOVCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkEgdHlwZSB3aXRoIGEgbWl4ZWQgY29udGVudCBtb2RlbCBjYW4gb25seSByZXN0cmljdCBhbm90aGVyIHR5cGUgd2l0aCBhIG1peGVkIGNvbnRlbnQgbW9kZWwuIiwgWG1sRXJyb3JDb250ZXh0LklMTEVHQUxfUkVTVFJJQ1RJT04sIGxvY2F0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gRkFMTFRIUk9VR0gKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRUxFTUVOVF9DT05URU5UOgotICAgICAgICAgICAgICAgICAgICAvLyA1LjMgLi4uIG9yIHRoZSB7Y29udGVudCB0eXBlfSBvZiB0aGUgY29tcGxleCB0eXBlIGRlZmluaXRpb24gaXRzZWxmIGlzIGVsZW1lbnQtb25seSwuLi4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2VUeXBlLmdldENvbnRlbnRUeXBlKCkgPT0gU2NoZW1hVHlwZS5FTVBUWV9DT05URU5UKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvcigiQSB0eXBlIHdpdGggZWxlbWVudCBvciBtaXhlZCBjb250ZW50IGNhbm5vdCByZXN0cmljdCBhbiBlbXB0eSB0eXBlLiIsIFhtbEVycm9yQ29udGV4dC5JTExFR0FMX1JFU1RSSUNUSU9OLCBsb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2VUeXBlLmdldENvbnRlbnRUeXBlKCkgPT0gU2NoZW1hVHlwZS5TSU1QTEVfQ09OVEVOVCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkEgdHlwZSB3aXRoIGVsZW1lbnQgb3IgbWl4ZWQgY29udGVudCBjYW5ub3QgcmVzdHJpY3QgYSBzaW1wbGUgdHlwZS4iLCBYbWxFcnJvckNvbnRleHQuSUxMRUdBTF9SRVNUUklDVElPTiwgbG9jYXRpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyA1LjMgLi4uIHRoZW4gdGhlIHBhcnRpY2xlIG9mIHRoZSBjb21wbGV4IHR5cGUgZGVmaW5pdGlvbiBpdHNlbGYgbXVzdCBiZSBhILd2YWxpZCByZXN0cmljdGlvbrcgb2YgdGhlIHBhcnRpY2xlIG9mIHRoZSB7Y29udGVudCB0eXBlfSBvZiB0aGUge2Jhc2UgdHlwZSBkZWZpbml0aW9ufQotICAgICAgICAgICAgICAgICAgICBTY2hlbWFQYXJ0aWNsZSBiYXNlTW9kZWwgPSBiYXNlVHlwZS5nZXRDb250ZW50TW9kZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgU2NoZW1hUGFydGljbGUgZGVyaXZlZE1vZGVsID0gc1R5cGUuZ2V0Q29udGVudE1vZGVsKCk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydChiYXNlTW9kZWwgIT0gbnVsbCAmJiBkZXJpdmVkTW9kZWwgIT0gbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiYXNlTW9kZWwgPT0gbnVsbCB8fCBkZXJpdmVkTW9kZWwgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgWEJlYW5EZWJ1Zy5sb2dTdGFja1RyYWNlKCJOdWxsIG1vZGVscyB0aGF0IHdlcmVuJ3QgY2F1Z2h0IGJ5IEVNUFRZX0NPTlRFTlQ6ICIgKyBiYXNlVHlwZSArICIgKCIgKyBiYXNlTW9kZWwgKyAiKSwgIiArIHNUeXBlICsgIiAoIiArIGRlcml2ZWRNb2RlbCArICIpIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvcigiSWxsZWdhbCByZXN0cmljdGlvbi4iLCBYbWxFcnJvckNvbnRleHQuSUxMRUdBTF9SRVNUUklDVElPTiwgbG9jYXRpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyA1LjMgLi4uICBhcyBkZWZpbmVkIGluIFBhcnRpY2xlIFZhbGlkIChSZXN0cmljdGlvbikgKKczLjkuNikuCi0gICAgICAgICAgICAgICAgICAgIExpc3QgZXJyb3JzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzVmFsaWQgPSBpc1BhcnRpY2xlVmFsaWRSZXN0cmljdGlvbihiYXNlTW9kZWwsIGRlcml2ZWRNb2RlbCwgZXJyb3JzLCBsb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2Ugb25seSBhZGQgdGhlIGxhc3QgZXJyb3IsIGJlY2F1c2UgaXNQYXJ0aWNsZVZhbGlkUmVzdHJpY3Rpb24gbWF5IGFkZCBlcnJvcnMKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBjb2xsZWN0aW9uIHRoYXQgaXQgbGF0ZXIgY2hhbmdlcyBpdHMgbWluZCBhYm91dCwgb3IgaXQgbWF5IChpbmFkdmVydGVudGx5KQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9yZ2V0IHRvIGRlc2NyaWJlIGFuIGVycm9yIGludG8gdGhlIGNvbGxlY3Rpb24uLi4uCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JzLnNpemUoKSA9PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJJbnZhbGlkIHJlc3RyaWN0aW9uLiIsIFhtbEVycm9yQ29udGV4dC5JTExFR0FMX1JFU1RSSUNUSU9OLCBsb2NhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZ2V0RXJyb3JMaXN0ZW5lcigpLmFkZChlcnJvcnMuZ2V0KGVycm9ycy5zaXplKCkgLSAxKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogVGhpcyBmdW5jdGlvbiB0YWtlcyBpbiB0d28gc2NoZW1hIHBhcnRpY2xlIHR5cGVzLCBhIGJhc2VNb2RlbCwgYW5kIGEgZGVyaXZlZCBtb2RlbCBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZQotICAgICAqIGRlcml2ZWRNb2RlbCBjYW4gYmUgZWdpdGltYXRlbHkgYmUgdXNlZCBmb3IgcmVzdHJpY3Rpb24uICBFcnJvcnMgYXJlIHB1dCBpbnRvIHRoZSBlcnJvcnMgY29sbGVjdGlvbnMuCi0gICAgICogQHBhcmFtIGJhc2VNb2RlbCAtIFRoZSBiYXNlIHNjaGVtYSBwYXJ0aWNsZQotICAgICAqIEBwYXJhbSBkZXJpdmVkTW9kZWwgLSBUaGUgZGVyaXZlZCAocmVzdHJpY3RlZCkgc2NoZW1hIHBhcnRpY2xlCi0gICAgICogQHBhcmFtIGVycm9ycyAtIEludmFsaWQgcmVzdHJpY3Rpb24gZXJyb3JzIGFyZSBwdXQgaW50byB0aGlzIGNvbGxlY3Rpb24KLSAgICAgKiBAcGFyYW0gY29udGV4dAotICAgICAqIEByZXR1cm4gYm9vbGVhbiwgdHJ1ZSBpZiB2YWxpZCByZXN0cnVjdGlvbiwgZmFsc2UgaWYgaW52YWxpZCByZXN0cmljdGlvbgotICAgICAqIEAKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNQYXJ0aWNsZVZhbGlkUmVzdHJpY3Rpb24oU2NoZW1hUGFydGljbGUgYmFzZU1vZGVsLCBTY2hlbWFQYXJ0aWNsZSBkZXJpdmVkTW9kZWwsIENvbGxlY3Rpb24gZXJyb3JzLCBYbWxPYmplY3QgY29udGV4dCkgIHsKLSAgICAgICAgYm9vbGVhbiByZXN0cmljdGlvblZhbGlkID0gZmFsc2U7Ci0gICAgICAgIC8vIDEgVGhleSBhcmUgdGhlIHNhbWUgcGFydGljbGUuCi0gICAgICAgIGlmIChiYXNlTW9kZWwuZXF1YWxzKGRlcml2ZWRNb2RlbCkpIHsKLSAgICAgICAgICAgIHJlc3RyaWN0aW9uVmFsaWQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gSW1wbGVtZW50IHRhYmxlIGRlZmluZWQgaW4gc2NoZW1hIHNwZWMgb24gcmVzdHJpY3Rpb25zIGF0OgotICAgICAgICAgICAgLy8gICBodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jY29zLXBhcnRpY2xlLXJlc3RyaWN0Ci0gICAgICAgICAgICBzd2l0Y2ggKGJhc2VNb2RlbC5nZXRQYXJ0aWNsZVR5cGUoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuRUxFTUVOVDoKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChkZXJpdmVkTW9kZWwuZ2V0UGFydGljbGVUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuRUxFTUVOVDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0cmljdGlvblZhbGlkID0gbmFtZUFuZFR5cGVPSygoU2NoZW1hTG9jYWxFbGVtZW50KSBiYXNlTW9kZWwsIChTY2hlbWFMb2NhbEVsZW1lbnQpIGRlcml2ZWRNb2RlbCwgZXJyb3JzLCBjb250ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuV0lMRENBUkQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLmFkZChYbWxFcnJvci5mb3JPYmplY3QoZm9ybWF0SW52YWxpZENvbWJpbmF0aW9uRXJyb3IoYmFzZU1vZGVsLCBkZXJpdmVkTW9kZWwpLCBjb250ZXh0KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb25WYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5BTEw6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLmFkZChYbWxFcnJvci5mb3JPYmplY3QoZm9ybWF0SW52YWxpZENvbWJpbmF0aW9uRXJyb3IoYmFzZU1vZGVsLCBkZXJpdmVkTW9kZWwpLCBjb250ZXh0KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb25WYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5DSE9JQ0U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLmFkZChYbWxFcnJvci5mb3JPYmplY3QoZm9ybWF0SW52YWxpZENvbWJpbmF0aW9uRXJyb3IoYmFzZU1vZGVsLCBkZXJpdmVkTW9kZWwpLCBjb250ZXh0KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb25WYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5TRVFVRU5DRToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMuYWRkKFhtbEVycm9yLmZvck9iamVjdChmb3JtYXRJbnZhbGlkQ29tYmluYXRpb25FcnJvcihiYXNlTW9kZWwsIGRlcml2ZWRNb2RlbCksIGNvbnRleHQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0cmljdGlvblZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBmYWxzZSA6IFhCZWFuRGVidWcubG9nU3RhY2tUcmFjZSgiVW5rbm93biBzY2hlbWEgdHlwZSBmb3IgRGVyaXZlZCBUeXBlIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5XSUxEQ0FSRDoKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChkZXJpdmVkTW9kZWwuZ2V0UGFydGljbGVUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuRUxFTUVOVDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0cmljdGlvblZhbGlkID0gbnNDb21wYXQoYmFzZU1vZGVsLCAoU2NoZW1hTG9jYWxFbGVtZW50KSBkZXJpdmVkTW9kZWwsIGVycm9ycywgY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLldJTERDQVJEOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uVmFsaWQgPSBuc1N1YnNldChiYXNlTW9kZWwsIGRlcml2ZWRNb2RlbCwgZXJyb3JzLCBjb250ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQUxMOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uVmFsaWQgPSBuc1JlY3Vyc2VDaGVja0NhcmRpbmFsaXR5KGJhc2VNb2RlbCwgZGVyaXZlZE1vZGVsLCBlcnJvcnMsIGNvbnRleHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5DSE9JQ0U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb25WYWxpZCA9IG5zUmVjdXJzZUNoZWNrQ2FyZGluYWxpdHkoYmFzZU1vZGVsLCBkZXJpdmVkTW9kZWwsIGVycm9ycywgY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLlNFUVVFTkNFOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uVmFsaWQgPSBuc1JlY3Vyc2VDaGVja0NhcmRpbmFsaXR5KGJhc2VNb2RlbCwgZGVyaXZlZE1vZGVsLCBlcnJvcnMsIGNvbnRleHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgZmFsc2UgOiBYQmVhbkRlYnVnLmxvZ1N0YWNrVHJhY2UoIlVua25vd24gc2NoZW1hIHR5cGUgZm9yIERlcml2ZWQgVHlwZSIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQUxMOgotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGRlcml2ZWRNb2RlbC5nZXRQYXJ0aWNsZVR5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5FTEVNRU5UOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uVmFsaWQgPSByZWN1cnNlQXNJZkdyb3VwKGJhc2VNb2RlbCwgZGVyaXZlZE1vZGVsLCBlcnJvcnMsIGNvbnRleHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5XSUxEQ0FSRDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMuYWRkKFhtbEVycm9yLmZvck9iamVjdChmb3JtYXRJbnZhbGlkQ29tYmluYXRpb25FcnJvcihiYXNlTW9kZWwsIGRlcml2ZWRNb2RlbCksIGNvbnRleHQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0cmljdGlvblZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLkFMTDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0cmljdGlvblZhbGlkID0gcmVjdXJzZShiYXNlTW9kZWwsIGRlcml2ZWRNb2RlbCwgZXJyb3JzLCBjb250ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQ0hPSUNFOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5hZGQoWG1sRXJyb3IuZm9yT2JqZWN0KGZvcm1hdEludmFsaWRDb21iaW5hdGlvbkVycm9yKGJhc2VNb2RlbCwgZGVyaXZlZE1vZGVsKSwgY29udGV4dCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuU0VRVUVOQ0U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb25WYWxpZCA9IHJlY3Vyc2VVbm9yZGVyZWQoYmFzZU1vZGVsLCBkZXJpdmVkTW9kZWwsIGVycm9ycywgY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBmYWxzZSA6IFhCZWFuRGVidWcubG9nU3RhY2tUcmFjZSgiVW5rbm93biBzY2hlbWEgdHlwZSBmb3IgRGVyaXZlZCBUeXBlIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5DSE9JQ0U6Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGVyaXZlZE1vZGVsLmdldFBhcnRpY2xlVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLkVMRU1FTlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb25WYWxpZCA9IHJlY3Vyc2VBc0lmR3JvdXAoYmFzZU1vZGVsLCBkZXJpdmVkTW9kZWwsIGVycm9ycywgY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLldJTERDQVJEOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5hZGQoWG1sRXJyb3IuZm9yT2JqZWN0KGZvcm1hdEludmFsaWRDb21iaW5hdGlvbkVycm9yKGJhc2VNb2RlbCwgZGVyaXZlZE1vZGVsKSwgY29udGV4dCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQUxMOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5hZGQoWG1sRXJyb3IuZm9yT2JqZWN0KGZvcm1hdEludmFsaWRDb21iaW5hdGlvbkVycm9yKGJhc2VNb2RlbCwgZGVyaXZlZE1vZGVsKSwgY29udGV4dCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQ0hPSUNFOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uVmFsaWQgPSByZWN1cnNlTGF4KGJhc2VNb2RlbCwgZGVyaXZlZE1vZGVsLCBlcnJvcnMsIGNvbnRleHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5TRVFVRU5DRToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0cmljdGlvblZhbGlkID0gbWFwQW5kU3VtKGJhc2VNb2RlbCwgZGVyaXZlZE1vZGVsLCBlcnJvcnMsIGNvbnRleHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgZmFsc2UgOiBYQmVhbkRlYnVnLmxvZ1N0YWNrVHJhY2UoIlVua25vd24gc2NoZW1hIHR5cGUgZm9yIERlcml2ZWQgVHlwZSIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuU0VRVUVOQ0U6Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGVyaXZlZE1vZGVsLmdldFBhcnRpY2xlVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLkVMRU1FTlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb25WYWxpZCA9IHJlY3Vyc2VBc0lmR3JvdXAoYmFzZU1vZGVsLCBkZXJpdmVkTW9kZWwsIGVycm9ycywgY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLldJTERDQVJEOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5hZGQoWG1sRXJyb3IuZm9yT2JqZWN0KGZvcm1hdEludmFsaWRDb21iaW5hdGlvbkVycm9yKGJhc2VNb2RlbCwgZGVyaXZlZE1vZGVsKSwgY29udGV4dCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQUxMOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5hZGQoWG1sRXJyb3IuZm9yT2JqZWN0KGZvcm1hdEludmFsaWRDb21iaW5hdGlvbkVycm9yKGJhc2VNb2RlbCwgZGVyaXZlZE1vZGVsKSwgY29udGV4dCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQ0hPSUNFOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5hZGQoWG1sRXJyb3IuZm9yT2JqZWN0KGZvcm1hdEludmFsaWRDb21iaW5hdGlvbkVycm9yKGJhc2VNb2RlbCwgZGVyaXZlZE1vZGVsKSwgY29udGV4dCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuU0VRVUVOQ0U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb25WYWxpZCA9IHJlY3Vyc2UoYmFzZU1vZGVsLCBkZXJpdmVkTW9kZWwsIGVycm9ycywgY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBmYWxzZSA6IFhCZWFuRGVidWcubG9nU3RhY2tUcmFjZSgiVW5rbm93biBzY2hlbWEgdHlwZSBmb3IgRGVyaXZlZCBUeXBlIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGZhbHNlIDogWEJlYW5EZWJ1Zy5sb2dTdGFja1RyYWNlKCJVbmtub3duIHNjaGVtYSB0eXBlIGZvciBCYXNlIFR5cGUiKTsKLQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlc3RyaWN0aW9uVmFsaWQ7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBtYXBBbmRTdW0oU2NoZW1hUGFydGljbGUgYmFzZU1vZGVsLCBTY2hlbWFQYXJ0aWNsZSBkZXJpdmVkTW9kZWwsIENvbGxlY3Rpb24gZXJyb3JzLCBYbWxPYmplY3QgY29udGV4dCkgIHsKLSAgICAgICAgLy8gbWFwQW5kU3VtIGlzIGNhbGwgaWYgYmFzZTogQ0hPSUNFLCBkZXJpdmVkOiBTRVFVRU5DRQotICAgICAgICBhc3NlcnQgYmFzZU1vZGVsLmdldFBhcnRpY2xlVHlwZSgpID09IFNjaGVtYVBhcnRpY2xlLkNIT0lDRTsKLSAgICAgICAgYXNzZXJ0IGRlcml2ZWRNb2RlbC5nZXRQYXJ0aWNsZVR5cGUoKSA9PSBTY2hlbWFQYXJ0aWNsZS5TRVFVRU5DRTsKLSAgICAgICAgYm9vbGVhbiBtYXBBbmRTdW1WYWxpZCA9IHRydWU7Ci0gICAgICAgIC8vIFNjaGVtYSBDb21wb25lbnQgQ29uc3RyYWludDogUGFydGljbGUgRGVyaXZhdGlvbiBPSyAoU2VxdWVuY2U6Q2hvaWNlIC0tIE1hcEFuZFN1bSkKLSAgICAgICAgLy8gRm9yIGEgc2VxdWVuY2UgZ3JvdXAgcGFydGljbGUgdG8gYmUgYSC3dmFsaWQgcmVzdHJpY3Rpb263IG9mIGEgY2hvaWNlIGdyb3VwIHBhcnRpY2xlIGFsbCBvZiB0aGUgZm9sbG93aW5nCi0gICAgICAgIC8vIG11c3QgYmUgdHJ1ZToKLSAgICAgICAgLy8gMSBUaGVyZSBpcyBhIGNvbXBsZXRlIGZ1bmN0aW9uYWwgbWFwcGluZyBmcm9tIHRoZSBwYXJ0aWNsZXMgaW4gdGhlIHtwYXJ0aWNsZXN9IG9mIFIgdG8gdGhlIHBhcnRpY2xlcyBpbiB0aGUKLSAgICAgICAgLy8ge3BhcnRpY2xlc30gb2YgQiBzdWNoIHRoYXQgZWFjaCBwYXJ0aWNsZSBpbiB0aGUge3BhcnRpY2xlc30gb2YgUiBpcyBhILd2YWxpZCByZXN0cmljdGlvbrcgb2YgdGhlIHBhcnRpY2xlIGluCi0gICAgICAgIC8vIHRoZSB7cGFydGljbGVzfSBvZiBCIGl0IG1hcHMgdG8gYXMgZGVmaW5lZCBieSBQYXJ0aWNsZSBWYWxpZCAoUmVzdHJpY3Rpb24pICinMy45LjYpLgotICAgICAgICAvLyBpbnRlcnByZXRhdGlvbjogIGVhY2ggcGFydGljbGUgY2hpbGQgaW4gZGVyaXZlZCBzaG91bGQgaGF2ZSBhIG1hdGNoIGluIGJhc2UuCi0gICAgICAgIC8vIDIgVGhlIHBhaXIgY29uc2lzdGluZyBvZiB0aGUgcHJvZHVjdCBvZiB0aGUge21pbiBvY2N1cnN9IG9mIFIgYW5kIHRoZSBsZW5ndGggb2YgaXRzIHtwYXJ0aWNsZXN9IGFuZCB1bmJvdW5kZWQKLSAgICAgICAgLy8gaWYge21heCBvY2N1cnN9IGlzIHVuYm91bmRlZCBvdGhlcndpc2UgdGhlIHByb2R1Y3Qgb2YgdGhlIHttYXggb2NjdXJzfSBvZiBSIGFuZCB0aGUgbGVuZ3RoIG9mIGl0cyB7cGFydGljbGVzfQotICAgICAgICAvLyBpcyBhIHZhbGlkIHJlc3RyaWN0aW9uIG9mIEIncyBvY2N1cnJlbmNlIHJhbmdlIGFzIGRlZmluZWQgYnkgT2NjdXJyZW5jZSBSYW5nZSBPSyAopzMuOS42KS4KLSAgICAgICAgLy8gTk9URTogVGhpcyBjbGF1c2UgaXMgaW4gcHJpbmNpcGxlIG1vcmUgcmVzdHJpY3RpdmUgdGhhbiBhYnNvbHV0ZWx5IG5lY2Vzc2FyeSwgYnV0IGluIHByYWN0aWNlIHdpbGwgY292ZXIKLSAgICAgICAgLy8gYWxsIHRoZSBsaWtlbHkgY2FzZXMsIGFuZCBpcyBtdWNoIGVhc2llciB0byBzcGVjaWZ5IHRoYW4gdGhlIGZ1bGx5IGdlbmVyYWwgdmVyc2lvbi4KLSAgICAgICAgLy8gTk9URTogVGhpcyBjYXNlIGFsbG93cyB0aGUgInVuZm9sZGluZyIgb2YgaXRlcmF0ZWQgZGlzanVuY3Rpb25zIGludG8gc2VxdWVuY2VzLiBJdCBtYXkgYmUgcGFydGljdWxhcmx5IHVzZWZ1bAotICAgICAgICAvLyB3aGVuIHRoZSBkaXNqdW5jdGlvbiBpcyBhbiBpbXBsaWNpdCBvbmUgYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2Ygc3Vic3RpdHV0aW9uIGdyb3Vwcy4KLQotICAgICAgICAvLyBNYXAgc3RlcCAtIGZvciBlYWNoIG1lbWJlciBvZiB0aGUgZGVyaXZlZCBtb2RlbCdzIHBhcnRpY2xlIGNoaWxkcmVuIHNlYXJjaCBiYXNlIG1vZGVsJ3MgcGFydGljbGUgY2hpbGRyZW4KLSAgICAgICAgLy8gIGZvciBtYXRjaAotICAgICAgICBTY2hlbWFQYXJ0aWNsZVtdIGRlcml2ZWRQYXJ0aWNsZUFycmF5ID0gZGVyaXZlZE1vZGVsLmdldFBhcnRpY2xlQ2hpbGRyZW4oKTsKLSAgICAgICAgU2NoZW1hUGFydGljbGVbXSBiYXNlUGFydGljbGVBcnJheSA9IGJhc2VNb2RlbC5nZXRQYXJ0aWNsZUNoaWxkcmVuKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVyaXZlZFBhcnRpY2xlQXJyYXkubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIFNjaGVtYVBhcnRpY2xlIGRlcml2ZWRQYXJ0aWNsZSA9IGRlcml2ZWRQYXJ0aWNsZUFycmF5W2ldOwotICAgICAgICAgICAgYm9vbGVhbiBmb3VuZE1hdGNoID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGJhc2VQYXJ0aWNsZUFycmF5Lmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAgICAgICAgU2NoZW1hUGFydGljbGUgYmFzZVBhcnRpY2xlID0gYmFzZVBhcnRpY2xlQXJyYXlbal07Ci0gICAgICAgICAgICAgICAgLy8gcmVjdXJzZSB0byBjaGVjayBpZiB0aGVyZSBpcyBhIG1hdGNoCi0gICAgICAgICAgICAgICAgaWYgKGlzUGFydGljbGVWYWxpZFJlc3RyaWN0aW9uKGJhc2VQYXJ0aWNsZSwgZGVyaXZlZFBhcnRpY2xlLCBlcnJvcnMsIGNvbnRleHQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIGEgbWF0Y2ggdGhlbiBubyBuZWVkIHRvIGNoZWNrIGJhc2UgcGFydGljbGVzIGFueW1vcmUKLSAgICAgICAgICAgICAgICAgICAgZm91bmRNYXRjaCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghZm91bmRNYXRjaCkgewotICAgICAgICAgICAgICAgIG1hcEFuZFN1bVZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZXJyb3JzLmFkZChYbWxFcnJvci5mb3JPYmplY3QoZm9ybWF0TWFwcGluZ0Vycm9yKCksIGNvbnRleHQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFN1bSBzdGVwCi0gICAgICAgIEJpZ0ludGVnZXIgZGVyaXZlZFJhbmdlTWluID0gZGVyaXZlZE1vZGVsLmdldE1pbk9jY3VycygpLm11bHRpcGx5KEJpZ0ludGVnZXIudmFsdWVPZihkZXJpdmVkTW9kZWwuZ2V0UGFydGljbGVDaGlsZHJlbigpLmxlbmd0aCkpOwotICAgICAgICBCaWdJbnRlZ2VyIGRlcml2ZWRSYW5nZU1heCA9IG51bGw7Ci0gICAgICAgIEJpZ0ludGVnZXIgVU5CT1VOREVEID0gbnVsbDsKLSAgICAgICAgaWYgKGRlcml2ZWRNb2RlbC5nZXRNYXhPY2N1cnMoKSA9PSBVTkJPVU5ERUQpIHsKLSAgICAgICAgICAgIGRlcml2ZWRSYW5nZU1heCA9IG51bGw7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkZXJpdmVkUmFuZ2VNYXggPSBkZXJpdmVkTW9kZWwuZ2V0TWF4T2NjdXJzKCkubXVsdGlwbHkoQmlnSW50ZWdlci52YWx1ZU9mKGRlcml2ZWRNb2RlbC5nZXRQYXJ0aWNsZUNoaWxkcmVuKCkubGVuZ3RoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBOb3cgY2hlY2sgZGVyaXZlZFJhbmdlIChkZXJpdmVkUmFuZ2VNaW4gYW5kIGRlcml2ZWRSYW5nZU1heCkgYWdhaW5zdCBiYXNlIG1vZGVsIG9jY3VycmVuY2UgcmFuZ2UKLSAgICAgICAgLy8gU2NoZW1hIENvbXBvbmVudCBDb25zdHJhaW50OiBPY2N1cnJlbmNlIFJhbmdlIE9LCi0gICAgICAgIC8vIEZvciBhIHBhcnRpY2xlJ3Mgb2NjdXJyZW5jZSByYW5nZSB0byBiZSBhIHZhbGlkIHJlc3RyaWN0aW9uIG9mIGFub3RoZXIncyBvY2N1cnJlbmNlIHJhbmdlIGFsbCBvZiB0aGUgZm9sbG93aW5nIG11c3QgYmUgdHJ1ZToKLSAgICAgICAgLy8gMSBJdHMge21pbiBvY2N1cnN9IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgb3RoZXIncyB7bWluIG9jY3Vyc30uCi0gICAgICAgIC8vIDIgb25lIG9mIHRoZSBmb2xsb3dpbmcgbXVzdCBiZSB0cnVlOgotICAgICAgICAvLyAgIDIuMSBUaGUgb3RoZXIncyB7bWF4IG9jY3Vyc30gaXMgdW5ib3VuZGVkLgotICAgICAgICAvLyAgIDIuMiBCb3RoIHttYXggb2NjdXJzfSBhcmUgbnVtYmVycywgYW5kIHRoZSBwYXJ0aWNsZSdzIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgb3RoZXIncy4KLQotICAgICAgICBpZiAoZGVyaXZlZFJhbmdlTWluLmNvbXBhcmVUbyhiYXNlTW9kZWwuZ2V0TWluT2NjdXJzKCkpIDwgMCkgewotICAgICAgICAgICAgbWFwQW5kU3VtVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGVycm9ycy5hZGQoWG1sRXJyb3IuZm9yT2JqZWN0KGZvcm1hdE9jY3VyZW5jZVJhbmdlTWluRXJyb3JDaG9pY2VTZXF1ZW5jZShkZXJpdmVkUmFuZ2VNaW4sIGJhc2VNb2RlbCksIGNvbnRleHQpKTsKLSAgICAgICAgfSBlbHNlIGlmIChiYXNlTW9kZWwuZ2V0TWF4T2NjdXJzKCkgPT0gVU5CT1VOREVEIHx8IGRlcml2ZWRSYW5nZU1heCAhPSBVTkJPVU5ERUQgJiYgZGVyaXZlZFJhbmdlTWF4LmNvbXBhcmVUbyhiYXNlTW9kZWwuZ2V0TWF4T2NjdXJzKCkpID4gMCkgewotICAgICAgICAgICAgbWFwQW5kU3VtVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGVycm9ycy5hZGQoWG1sRXJyb3IuZm9yT2JqZWN0KGZvcm1hdE9jY3VyZW5jZVJhbmdlTWF4RXJyb3JDaG9pY2VTZXF1ZW5jZShkZXJpdmVkUmFuZ2VNYXgsIGJhc2VNb2RlbCksIGNvbnRleHQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtYXBBbmRTdW1WYWxpZDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm9ybWF0T2NjdXJlbmNlUmFuZ2VNaW5FcnJvckNob2ljZVNlcXVlbmNlKEJpZ0ludGVnZXIgZGVyaXZlZFJhbmdlTWluLCBTY2hlbWFQYXJ0aWNsZSBiYXNlTW9kZWwpIHsKLSAgICAgICAgcmV0dXJuICJJbnZhbGlkIFJlc3RyaWN0aW9uLiAgVGhlIHRvdGFsIG1pbk9jY3VycyBmb3IgdGhlIGRlcml2ZWQgPHNlcXVlbmNlPidzIGVsZW1lbnRzOiAiCi0gICAgICAgICAgICAgICAgKyBkZXJpdmVkUmFuZ2VNaW4udG9TdHJpbmcoKQotICAgICAgICAgICAgICAgICsgIm11c3Qgbm90IGJlIGxlc3MgdGhhbiB0aGUgYmFzZSA8Y2hvaWNlPidzIG1pbk9jY3VycyAoIgotICAgICAgICAgICAgICAgICsgYmFzZU1vZGVsLmdldE1pbk9jY3VycygpLnRvU3RyaW5nKCkgKyAiKSI7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZvcm1hdE9jY3VyZW5jZVJhbmdlTWF4RXJyb3JDaG9pY2VTZXF1ZW5jZShCaWdJbnRlZ2VyIGRlcml2ZWRSYW5nZU1heCwgU2NoZW1hUGFydGljbGUgYmFzZU1vZGVsKSB7Ci0gICAgICAgIHJldHVybiAiSW52YWxpZCBSZXN0cmljdGlvbi4gIFRoZSB0b3RhbCBtYXhPY2N1cnMgZm9yIHRoZSBkZXJpdmVkIDxzZXF1ZW5jZT4ncyBlbGVtZW50cyAoIgotICAgICAgICAgICAgICAgICsgZGVyaXZlZFJhbmdlTWF4LnRvU3RyaW5nKCkKLSAgICAgICAgICAgICAgICArICIpIG11c3Qgbm90IGJlIGdyZWF0ZXIgdGhhbiB0aGUgYmFzZSA8Y2hvaWNlPidzIG1heE9jY3VycyAoIgotICAgICAgICAgICAgICAgICsgcHJpbnRNYXhPY2N1cnMoYmFzZU1vZGVsLmdldE1heE9jY3VycygpKSArICIpIjsKLSAgICAgICAKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm9ybWF0TWFwcGluZ0Vycm9yKCkgewotICAgICAgICByZXR1cm4gIkludmFsaWQgUmVzdHJpY3Rpb24uICBBdCBsZWFzdCBvbmUgcmVzdHJpY3RlZCB0eXBlIGRvZXMgbm90IG1hdGNoLiI7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiByZWN1cnNlQXNJZkdyb3VwKFNjaGVtYVBhcnRpY2xlIGJhc2VNb2RlbCwgU2NoZW1hUGFydGljbGUgZGVyaXZlZE1vZGVsLCBDb2xsZWN0aW9uIGVycm9ycywgWG1sT2JqZWN0IGNvbnRleHQpIHsKLSAgICAgICAgLy8gcmVjdXJzZUFzSWZHcm91cCBpcyBjYWxsZWQgaWY6Ci0gICAgICAgIC8vIGJhc2U6IEFMTCwgZGVyaXZlZDogRUxFTUVOVAotICAgICAgICAvLyBiYXNlOiBDSE9JQ0UsIGRlcml2ZWQ6IEVMRU1FTlQKLSAgICAgICAgLy8gYmFzZTogU0VRVUVOQ0UsIGRlcml2ZWQ6IEVMRU1FTlQKLSAgICAgICAgYXNzZXJ0IChiYXNlTW9kZWwuZ2V0UGFydGljbGVUeXBlKCkgPT0gU2NoZW1hUGFydGljbGUuQUxMICYmIGRlcml2ZWRNb2RlbC5nZXRQYXJ0aWNsZVR5cGUoKSA9PSBTY2hlbWFQYXJ0aWNsZS5FTEVNRU5UKQotICAgICAgICAgICAgICAgIHx8IChiYXNlTW9kZWwuZ2V0UGFydGljbGVUeXBlKCkgPT0gU2NoZW1hUGFydGljbGUuQ0hPSUNFICYmIGRlcml2ZWRNb2RlbC5nZXRQYXJ0aWNsZVR5cGUoKSA9PSBTY2hlbWFQYXJ0aWNsZS5FTEVNRU5UKQotICAgICAgICAgICAgICAgIHx8IChiYXNlTW9kZWwuZ2V0UGFydGljbGVUeXBlKCkgPT0gU2NoZW1hUGFydGljbGUuU0VRVUVOQ0UgJiYgZGVyaXZlZE1vZGVsLmdldFBhcnRpY2xlVHlwZSgpID09IFNjaGVtYVBhcnRpY2xlLkVMRU1FTlQpOwotICAgICAgICAvLyBTY2hlbWEgQ29tcG9uZW50IENvbnN0cmFpbnQ6IFBhcnRpY2xlIERlcml2YXRpb24gT0sgKEVsdDpBbGwvQ2hvaWNlL1NlcXVlbmNlIC0tIFJlY3Vyc2VBc0lmR3JvdXApCi0KLSAgICAgICAgLy8gRm9yIGFuIGVsZW1lbnQgZGVjbGFyYXRpb24gcGFydGljbGUgdG8gYmUgYSC3dmFsaWQgcmVzdHJpY3Rpb263IG9mIGEgZ3JvdXAgcGFydGljbGUKLSAgICAgICAgLy8gKGFsbCwgY2hvaWNlIG9yIHNlcXVlbmNlKSBhIGdyb3VwIHBhcnRpY2xlIG9mIHRoZSB2YXJpZXR5IGNvcnJlc3BvbmRpbmcgdG8gQidzLCB3aXRoIHttaW4gb2NjdXJzfSBhbmQKLSAgICAgICAgLy8ge21heCBvY2N1cnN9IG9mIDEgYW5kIHdpdGgge3BhcnRpY2xlc30gY29uc2lzdGluZyBvZiBhIHNpbmdsZSBwYXJ0aWNsZSB0aGUgc2FtZSBhcyB0aGUgZWxlbWVudCBkZWNsYXJhdGlvbgotICAgICAgICAvLyBtdXN0IGJlIGEgt3ZhbGlkIHJlc3RyaWN0aW9utyBvZiB0aGUgZ3JvdXAgYXMgZGVmaW5lZCBieSBQYXJ0aWNsZSBEZXJpdmF0aW9uIE9LCi0gICAgICAgIC8vIChBbGw6QWxsLFNlcXVlbmNlOlNlcXVlbmNlIC0tIFJlY3Vyc2UpICinMy45LjYpLCBQYXJ0aWNsZSBEZXJpdmF0aW9uIE9LIChDaG9pY2U6Q2hvaWNlIC0tIFJlY3Vyc2VMYXgpCi0gICAgICAgIC8vICinMy45LjYpIG9yIFBhcnRpY2xlIERlcml2YXRpb24gT0sgKEFsbDpBbGwsU2VxdWVuY2U6U2VxdWVuY2UgLS0gUmVjdXJzZSkgKKczLjkuNiksIGRlcGVuZGluZyBvbiB3aGV0aGVyCi0gICAgICAgIC8vIHRoZSBncm91cCBpcyBhbGwsIGNob2ljZSBvciBzZXF1ZW5jZQotCi0gICAgICAgIC8vIGludGVycHJldGF0aW9uOiAgbWFrZSBhIGZha2UgZ3JvdXAgb2YgdGhlIHJpZ2h0IHR5cGUsIHdpdGggbWluIG9jY3VycyBhbmQgbWF4IG9jY3VycyBvZiAxCi0gICAgICAgIFNjaGVtYVBhcnRpY2xlSW1wbCBhc0lmUGFydCA9IG5ldyBTY2hlbWFQYXJ0aWNsZUltcGwoKTsKLSAgICAgICAgYXNJZlBhcnQuc2V0UGFydGljbGVUeXBlKGJhc2VNb2RlbC5nZXRQYXJ0aWNsZVR5cGUoKSk7Ci0gICAgICAgIGFzSWZQYXJ0LnNldE1pbk9jY3VycyhCaWdJbnRlZ2VyLk9ORSk7Ci0gICAgICAgIGFzSWZQYXJ0LnNldE1heE9jY3VycyhCaWdJbnRlZ2VyLk9ORSk7Ci0gICAgICAgIGFzSWZQYXJ0LnNldFBhcnRpY2xlQ2hpbGRyZW4obmV3IFNjaGVtYVBhcnRpY2xlW10geyBkZXJpdmVkTW9kZWwgfSk7Ci0gICAgICAgIAotICAgICAgICAvLyB0aGUgcmVjdXJzZQotICAgICAgICByZXR1cm4gaXNQYXJ0aWNsZVZhbGlkUmVzdHJpY3Rpb24oYmFzZU1vZGVsLCBhc0lmUGFydCwgZXJyb3JzLCBjb250ZXh0KTsgCi0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiByZWN1cnNlTGF4KFNjaGVtYVBhcnRpY2xlIGJhc2VNb2RlbCwgU2NoZW1hUGFydGljbGUgZGVyaXZlZE1vZGVsLCBDb2xsZWN0aW9uIGVycm9ycywgWG1sT2JqZWN0IGNvbnRleHQpICB7Ci0gICAgICAgIC8vIHJlY3Vyc2VMYXggaXMgY2FsbGVkIGlmIGJhc2U6IENIT0lDRSwgZGVyaXZlZDogQ0hPSUNFCi0gICAgICAgIGFzc2VydCBiYXNlTW9kZWwuZ2V0UGFydGljbGVUeXBlKCkgPT0gU2NoZW1hUGFydGljbGUuQ0hPSUNFICYmIGRlcml2ZWRNb2RlbC5nZXRQYXJ0aWNsZVR5cGUoKSA9PSBTY2hlbWFQYXJ0aWNsZS5DSE9JQ0U7Ci0gICAgICAgIGJvb2xlYW4gcmVjdXJzZUxheFZhbGlkID0gdHJ1ZTsKLSAgICAgICAgLy9TY2hlbWEgQ29tcG9uZW50IENvbnN0cmFpbnQ6IFBhcnRpY2xlIERlcml2YXRpb24gT0sgKENob2ljZTpDaG9pY2UgLS0gUmVjdXJzZUxheCkKLSAgICAgICAgLy8gRm9yIGEgY2hvaWNlIGdyb3VwIHBhcnRpY2xlIHRvIGJlIGEgt3ZhbGlkIHJlc3RyaWN0aW9utyBvZiBhbm90aGVyIGNob2ljZSBncm91cCBwYXJ0aWNsZSBhbGwgb2YgdGhlCi0gICAgICAgIC8vIGZvbGxvd2luZyBtdXN0IGJlIHRydWU6Ci0gICAgICAgIC8vIDEgUidzIG9jY3VycmVuY2UgcmFuZ2UgaXMgYSB2YWxpZCByZXN0cmljdGlvbiBvZiBCJ3Mgb2NjdXJyZW5jZSByYW5nZSBhcyBkZWZpbmVkIGJ5IE9jY3VycmVuY2UKLSAgICAgICAgLy8gUmFuZ2UgT0sgKKczLjkuNik7Ci0gICAgICAgIC8vIDIgVGhlcmUgaXMgYSBjb21wbGV0ZSC3b3JkZXItcHJlc2VydmluZ7cgZnVuY3Rpb25hbCBtYXBwaW5nIGZyb20gdGhlIHBhcnRpY2xlcyBpbiB0aGUge3BhcnRpY2xlc30gb2YgUgotICAgICAgICAvLyB0byB0aGUgcGFydGljbGVzIGluIHRoZSB7cGFydGljbGVzfSBvZiBCIHN1Y2ggdGhhdCBlYWNoIHBhcnRpY2xlIGluIHRoZSB7cGFydGljbGVzfSBvZiBSIGlzIGEKLSAgICAgICAgLy8gt3ZhbGlkIHJlc3RyaWN0aW9utyBvZiB0aGUgcGFydGljbGUgaW4gdGhlIHtwYXJ0aWNsZXN9IG9mIEIgaXQgbWFwcyB0byBhcyBkZWZpbmVkIGJ5Ci0gICAgICAgIC8vIFBhcnRpY2xlIFZhbGlkIChSZXN0cmljdGlvbikgKKczLjkuNikuCi0gICAgICAgIC8vIE5PVEU6IEFsdGhvdWdoIHRoZSC3dmFsaWRhdGlvbrcgc2VtYW50aWNzIG9mIGEgY2hvaWNlIGdyb3VwIGRvZXMgbm90IGRlcGVuZCBvbiB0aGUgb3JkZXIgb2YgaXRzIHBhcnRpY2xlcywKLSAgICAgICAgLy8gZGVyaXZlZCBjaG9pY2UgZ3JvdXBzIGFyZSByZXF1aXJlZCB0byBtYXRjaCB0aGUgb3JkZXIgb2YgdGhlaXIgYmFzZSBpbiBvcmRlciB0byBzaW1wbGlmeQotICAgICAgICAvLyBjaGVja2luZyB0aGF0IHRoZSBkZXJpdmF0aW9uIGlzIE9LLgotICAgICAgICAvLyBpbnRlcnByZXRhdGlvbjogIGNoZWNrIGRlcml2ZWQgY2hvaWNlcyBmb3IgbWF0Y2ggaW4gb3JkZXIsIG11c3QgZ2V0IGFuIGluIG9yZGVyIG1hdGNoIG9uIGEgYmFzZSBwYXJ0aWNsZSwKLSAgICAgICAgLy8gICAgICAgICAgICAgICAgICBkb24ndCBuZWVkIHRvIGNoZWNrIGlmIGJhc2UgcGFydGljbGVzIGFyZSBza2lwcGFibGUuICBhIGxvdCBsaWtlIHJlY3Vyc2UKLQotICAgICAgICBpZiAoIW9jY3VycmVuY2VSYW5nZU9LKGJhc2VNb2RlbCwgZGVyaXZlZE1vZGVsLCBlcnJvcnMsIGNvbnRleHQpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gY3ljbGUgdGhydSBib3RoIGRlcml2ZWQgcGFydGljbGUgY2hpbGRyZW4gYW5kIGJhc2UgcGFydGljbGUgY2hpbGRyZW4gbG9va2luZyBmb3IgbWF0Y2hlcwotICAgICAgICAvLyAgaWYgdGhlIGRlcml2ZWQgcGFydGljbGUgZG9lcyBub3QgbWF0Y2ggdGhlIGJhc2UgcGFydGljbGUgdGhlbiBiYXNlIHBhcnRpY2xlIGNhbiBiZSBza2lwcGVkCi0KLSAgICAgICAgU2NoZW1hUGFydGljbGVbXSBkZXJpdmVkUGFydGljbGVBcnJheSA9IGRlcml2ZWRNb2RlbC5nZXRQYXJ0aWNsZUNoaWxkcmVuKCk7Ci0gICAgICAgIFNjaGVtYVBhcnRpY2xlW10gYmFzZVBhcnRpY2xlQXJyYXkgPSBiYXNlTW9kZWwuZ2V0UGFydGljbGVDaGlsZHJlbigpOwotICAgICAgICBpbnQgaSA9IDAsIGogPSAwOwotICAgICAgICBmb3IgKDsgaSA8IGRlcml2ZWRQYXJ0aWNsZUFycmF5Lmxlbmd0aCAmJiBqIDwgYmFzZVBhcnRpY2xlQXJyYXkubGVuZ3RoOykgewotICAgICAgICAgICAgU2NoZW1hUGFydGljbGUgZGVyaXZlZFBhcnRpY2xlID0gZGVyaXZlZFBhcnRpY2xlQXJyYXlbaV07Ci0gICAgICAgICAgICBTY2hlbWFQYXJ0aWNsZSBiYXNlUGFydGljbGUgPSBiYXNlUGFydGljbGVBcnJheVtqXTsKLSAgICAgICAgICAgIC8vIHRyeSB0byBtYXRjaCB0aGUgdHdvIHBhcnRpY2xlcyBieSByZWN1cnNpbmcKLSAgICAgICAgICAgIGlmIChpc1BhcnRpY2xlVmFsaWRSZXN0cmljdGlvbihiYXNlUGFydGljbGUsIGRlcml2ZWRQYXJ0aWNsZSwgZXJyb3JzLCBjb250ZXh0KSkgewotICAgICAgICAgICAgICAgIC8vIGNvb2wgZm91bmQgYSBtYXRjaCwgaW5jcmVtZW50IGJvdGggaW5kZXhlcwotICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgICAgICBqKys7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIGRpZCBub3QgbWF0Y2gsIGluY3JlbWVudCB0aGUgYmFzZSBwYXJ0aWNsZSBhcnJheSBpbmRleCBvbmx5Ci0gICAgICAgICAgICAgICAgLy8gT2ssIGxldCdzIHNraXAgdGhpcyBiYXNlIHBhcnRpY2xlLCBpbmNyZW1lbnQgYmFzZSBwYXJ0aWNsZSBhcnJheSBpbmRleCBvbmx5Ci0gICAgICAgICAgICAgICAgaisrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gb2ssIGdvdCB0byB0aGUgZW5kIG9mIG9uZSBvZiB0aGUgYXJyYXlzCi0gICAgICAgIC8vIGlmIGF0IGVuZCBvZiBiYXNlIHBhcnRpY2xlIGFycmF5IGFuZCBub3QgYXQgdGhlIGVuZCBvZiBkZXJpdmVkIHBhcnRpY2xlIGFycmF5IHRoZW4gcmVtYWluaW5nIGRlcml2ZWQKLSAgICAgICAgLy8gIHBhcnRpY2xlcyBtdXN0IG5vdCBtYXRjaAotICAgICAgICBpZiAoaSA8IGRlcml2ZWRQYXJ0aWNsZUFycmF5Lmxlbmd0aCkgewotICAgICAgICAgICAgcmVjdXJzZUxheFZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9ICJGb3VuZCBkZXJpdmVkIHBhcnRpY2xlcyB0aGF0IGFyZSBub3QgbWF0Y2hlZCBpbiB0aGUgYmFzZSBjb250ZW50IG1vZGVsLiI7Ci0gICAgICAgICAgICBlcnJvcnMuYWRkKFhtbEVycm9yLmZvck9iamVjdChmb3JtYXREZXJpdmVkTWFwcGluZ0Vycm9yKG1lc3NhZ2UsIGJhc2VNb2RlbCwgZGVyaXZlZE1vZGVsKSwgY29udGV4dCkpOwotICAgICAgICB9Ci0KLQotICAgICAgICByZXR1cm4gcmVjdXJzZUxheFZhbGlkOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gcmVjdXJzZVVub3JkZXJlZChTY2hlbWFQYXJ0aWNsZSBiYXNlTW9kZWwsIFNjaGVtYVBhcnRpY2xlIGRlcml2ZWRNb2RlbCwgQ29sbGVjdGlvbiBlcnJvcnMsIFhtbE9iamVjdCBjb250ZXh0KSB7Ci0gICAgICAgIC8vIHJlY3Vyc2VVbm9yZGVyIGlzIGNhbGxlZCB3aGVuIGJhc2U6IEFMTCBhbmQgZGVyaXZlZDogU0VRCi0gICAgICAgIGFzc2VydCBiYXNlTW9kZWwuZ2V0UGFydGljbGVUeXBlKCkgPT0gU2NoZW1hUGFydGljbGUuQUxMICYmIGRlcml2ZWRNb2RlbC5nZXRQYXJ0aWNsZVR5cGUoKSA9PSBTY2hlbWFQYXJ0aWNsZS5TRVFVRU5DRTsKLSAgICAgICAgYm9vbGVhbiByZWN1cnNlVW5vcmRlcmVkVmFsaWQgPSB0cnVlOwotICAgICAgICAvLyBTY2hlbWEgQ29tcG9uZW50IENvbnN0cmFpbnQ6IFBhcnRpY2xlIERlcml2YXRpb24gT0sgKFNlcXVlbmNlOkFsbCAtLSBSZWN1cnNlVW5vcmRlcmVkKQotICAgICAgICAvLyBGb3IgYSBzZXF1ZW5jZSBncm91cCBwYXJ0aWNsZSB0byBiZSBhILd2YWxpZCByZXN0cmljdGlvbrcgb2YgYW4gYWxsIGdyb3VwIHBhcnRpY2xlIGFsbCBvZiB0aGUKLSAgICAgICAgLy8gZm9sbG93aW5nIG11c3QgYmUgdHJ1ZToKLSAgICAgICAgLy8gMSBSJ3Mgb2NjdXJyZW5jZSByYW5nZSBpcyBhIHZhbGlkIHJlc3RyaWN0aW9uIG9mIEIncyBvY2N1cnJlbmNlIHJhbmdlIGFzIGRlZmluZWQgYnkKLSAgICAgICAgLy8gT2NjdXJyZW5jZSBSYW5nZSBPSyAopzMuOS42KS4KLSAgICAgICAgLy8gMiBUaGVyZSBpcyBhIGNvbXBsZXRlIGZ1bmN0aW9uYWwgbWFwcGluZyBmcm9tIHRoZSBwYXJ0aWNsZXMgaW4gdGhlIHtwYXJ0aWNsZXN9IG9mIFIgdG8gdGhlIHBhcnRpY2xlcwotICAgICAgICAvLyBpbiB0aGUge3BhcnRpY2xlc30gb2YgQiBzdWNoIHRoYXQgYWxsIG9mIHRoZSBmb2xsb3dpbmcgbXVzdCBiZSB0cnVlOgotICAgICAgICAvLyAyLjEgTm8gcGFydGljbGUgaW4gdGhlIHtwYXJ0aWNsZXN9IG9mIEIgaXMgbWFwcGVkIHRvIGJ5IG1vcmUgdGhhbiBvbmUgb2YgdGhlIHBhcnRpY2xlcyBpbgotICAgICAgICAvLyB0aGUge3BhcnRpY2xlc30gb2YgUjsKLSAgICAgICAgLy8gMi4yIEVhY2ggcGFydGljbGUgaW4gdGhlIHtwYXJ0aWNsZXN9IG9mIFIgaXMgYSC3dmFsaWQgcmVzdHJpY3Rpb263IG9mIHRoZSBwYXJ0aWNsZSBpbiB0aGUge3BhcnRpY2xlc30gb2YgQgotICAgICAgICAvLyBpdCBtYXBzIHRvIGFzIGRlZmluZWQgYnkgUGFydGljbGUgVmFsaWQgKFJlc3RyaWN0aW9uKSAopzMuOS42KTsKLSAgICAgICAgLy8gMi4zIEFsbCBwYXJ0aWNsZXMgaW4gdGhlIHtwYXJ0aWNsZXN9IG9mIEIgd2hpY2ggYXJlIG5vdCBtYXBwZWQgdG8gYnkgYW55IHBhcnRpY2xlIGluIHRoZSB7cGFydGljbGVzfQotICAgICAgICAvLyBvZiBSIGFyZSC3ZW1wdGlhYmxltyBhcyBkZWZpbmVkIGJ5IFBhcnRpY2xlIEVtcHRpYWJsZSAopzMuOS42KS4KLSAgICAgICAgLy8gTk9URTogQWx0aG91Z2ggdGhpcyBjbGF1c2UgYWxsb3dzIHJlb3JkZXJpbmcsIGJlY2F1c2Ugb2YgdGhlIGxpbWl0cyBvbiB0aGUgY29udGVudHMgb2YgYWxsIGdyb3VwcyB0aGUKLSAgICAgICAgLy8gY2hlY2tpbmcgcHJvY2VzcyBjYW4gc3RpbGwgYmUgZGV0ZXJtaW5pc3RpYy4KLSAgICAgICAgLy8gMSwgMi4yLCBhbmQgMi4zIGFyZSB0aGUgc2FtZSBhcyByZWN1cnNlLCBzbyBkbyAyLjEgYW5kIHRoZW4gY2FsbCByZWN1cnNlCi0KLSAgICAgICAgaWYgKCFvY2N1cnJlbmNlUmFuZ2VPSyhiYXNlTW9kZWwsIGRlcml2ZWRNb2RlbCwgZXJyb3JzLCBjb250ZXh0KSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gcmVhZCBiYXNlUGFydGljbGUgYXJyYXkgUU5hbWVzIGludG8gaGFzaG1hcAotICAgICAgICBTY2hlbWFQYXJ0aWNsZVtdIGJhc2VQYXJ0aWNsZXMgPSBiYXNlTW9kZWwuZ2V0UGFydGljbGVDaGlsZHJlbigpOwotICAgICAgICBIYXNoTWFwIGJhc2VQYXJ0aWNsZU1hcCA9IG5ldyBIYXNoTWFwKDEwKTsKLSAgICAgICAgT2JqZWN0IE1BUFBFRCA9IG5ldyBPYmplY3QoKTsKLSAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgaGFzaG1hcAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJhc2VQYXJ0aWNsZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICBiYXNlUGFydGljbGVNYXAucHV0KGJhc2VQYXJ0aWNsZXNbaV0uZ2V0TmFtZSgpLCBiYXNlUGFydGljbGVzW2ldKTsKLSAgICAgICAgCi0gICAgICAgIC8vIGdvIHRocnUgdGhlIHNlcXVlbmNlIChkZXJpdmVkIG1vZGVsJ3MgY2hpbGRyZW4pIGFuZCBjaGVjayBvZmYgZnJvbSBiYXNlIHBhcnRpY2xlIG1hcAotICAgICAgICBTY2hlbWFQYXJ0aWNsZVtdIGRlcml2ZWRQYXJ0aWNsZXMgPSBkZXJpdmVkTW9kZWwuZ2V0UGFydGljbGVDaGlsZHJlbigpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlcml2ZWRQYXJ0aWNsZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIFNjaGVtYVBhcnRpY2xlIG1hdGNoZWRCYXNlUGFydGljbGUgPSAoU2NoZW1hUGFydGljbGUpIGJhc2VQYXJ0aWNsZU1hcC5nZXQoZGVyaXZlZFBhcnRpY2xlc1tpXS5nZXROYW1lKCkpOwotICAgICAgICAgICAgaWYgKG1hdGNoZWRCYXNlUGFydGljbGUgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJlY3Vyc2VVbm9yZGVyZWRWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGVycm9ycy5hZGQoWG1sRXJyb3IuZm9yT2JqZWN0KGZvcm1hdEludmFsaWRBbGxTZXFNYXBwaW5nRXJyb3IoKSwgY29udGV4dCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBnb3QgYSBtYXRjaAotICAgICAgICAgICAgICAgIGlmIChtYXRjaGVkQmFzZVBhcnRpY2xlID09IE1BUFBFRCkgewotICAgICAgICAgICAgICAgICAgICAvLyB3aG9hLCB0aGlzIGJhc2UgcGFydGljbGUgaGFzIGFscmVhZHkgYmVlbiBtYXRjaGVkIChzZWUgMi4xIGFib3ZlKQotICAgICAgICAgICAgICAgICAgICByZWN1cnNlVW5vcmRlcmVkVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgZXJyb3JzLmFkZChYbWxFcnJvci5mb3JPYmplY3QoZm9ybWF0TWFwcGVkTW9yZVRoYW5PbmNlRXJyb3IoYmFzZU1vZGVsLCBkZXJpdmVkTW9kZWwpLCBjb250ZXh0KSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkZXJpdmVkUGFydGljbGVzW2ldLmdldE1heE9jY3VycygpID09IG51bGwgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXJpdmVkUGFydGljbGVzW2ldLmdldE1heE9jY3VycygpLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBkZXJpdmVkIHBhcnRpY2xlcyBjYW4gaGF2ZSBhIG1heCBvY2N1cnMgZ3JlYXRlciB0aGFuIDEKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2VVbm9yZGVyZWRWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLmFkZChYbWxFcnJvci5mb3JPYmplY3QoZm9ybWF0QWxsU2VxTWF4T2NjdXJzR3JlYXRlclRoYW4xRXJyb3IoZGVyaXZlZFBhcnRpY2xlc1tpXSksIGNvbnRleHQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNQYXJ0aWNsZVZhbGlkUmVzdHJpY3Rpb24obWF0Y2hlZEJhc2VQYXJ0aWNsZSwgZGVyaXZlZFBhcnRpY2xlc1tpXSwgZXJyb3JzLCBjb250ZXh0KSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxyZWFkeSBoYXZlIGFuIGVycm9yCi0gICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNlVW5vcmRlcmVkVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vIGV2ZXJ5dGhpbmcgaXMgY29vbCwgZ290IGEgbWF0Y2gsIHVwZGF0ZSB0byBNQVBQRUQKLSAgICAgICAgICAgICAgICAgICAgYmFzZVBhcnRpY2xlTWFwLnB1dChkZXJpdmVkUGFydGljbGVzW2ldLmdldE5hbWUoKSwgTUFQUEVEKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBpZiBldmVyeXRoaW5nIGlzIGNvb2wgc28gZmFyIHRoZW4gY2hlY2sgdG8gc2VlIGlmIGFueSBiYXNlIHBhcnRpY2xlcyBhcmUgbm90IG1hdGNoZWQKLSAgICAgICAgaWYgKHJlY3Vyc2VVbm9yZGVyZWRWYWxpZCkgewotICAgICAgICAgICAgLy8gZ2V0IGFsbCB0aGUgaGFzaG1hcCBrZXlzIGFuZCBsb29wIHRocnUgbG9va2luZyBmb3IgTk9UX01BUFBFRAotICAgICAgICAgICAgU2V0IGJhc2VQYXJ0aWNsZUNvbGxlY3Rpb24gPSBiYXNlUGFydGljbGVNYXAua2V5U2V0KCk7Ci0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXJhdG9yID0gYmFzZVBhcnRpY2xlQ29sbGVjdGlvbi5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KSB7Ci0gICAgICAgICAgICAgICAgUU5hbWUgYmFzZVBhcnRpY2xlUU5hbWUgPSAoUU5hbWUpIGl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgICAgICAgICBpZiAoYmFzZVBhcnRpY2xlTWFwLmdldChiYXNlUGFydGljbGVRTmFtZSkgIT0gTUFQUEVEICYmICEoKFNjaGVtYVBhcnRpY2xlKWJhc2VQYXJ0aWNsZU1hcC5nZXQoYmFzZVBhcnRpY2xlUU5hbWUpKS5pc1NraXBwYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgYmFzZSBwYXJ0aWNsZSB3YXMgbm90IG1hcHBlZCBhbmQgaXMgbm90ICJwYXJ0aWNsZSBlbXB0aWFibGUiIChza2lwcGFibGUpCi0gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2VVbm9yZGVyZWRWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBlcnJvcnMuYWRkKFhtbEVycm9yLmZvck9iamVjdChmb3JtYXRHcm91cE1hcHBpbmdFcnJvcihiYXNlTW9kZWwsIGRlcml2ZWRNb2RlbCksIGNvbnRleHQpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVjdXJzZVVub3JkZXJlZFZhbGlkOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBmb3JtYXRBbGxTZXFNYXhPY2N1cnNHcmVhdGVyVGhhbjFFcnJvcihTY2hlbWFQYXJ0aWNsZSBkZXJpdmVkTW9kZWwpIHsKLSAgICAgICAgcmV0dXJuICJJbnZhbGlkIFJlc3RyaWN0aW9uLiAgVGhlICIKLSAgICAgICAgICAgICAgICArIHByaW50UGFydGljbGUoZGVyaXZlZE1vZGVsKQotICAgICAgICAgICAgICAgICsgIiBoYXMgYSBtYXhPY2N1cnMgZ3JlYXQgdGhhbiAxICgiCi0gICAgICAgICAgICAgICAgKyBwcmludE1heE9jY3VycyhkZXJpdmVkTW9kZWwuZ2V0TWF4T2NjdXJzKCkpCi0gICAgICAgICAgICAgICAgKyAiKS4gIFdoZW4gcmVzdHJpY3RpbmcgYW4gPGFsbD4gd2l0aCBhIDxzZXF1ZW5jZT4sIG5vIDxlbGVtZW50PiBjYW4gaGF2ZSBhIG1heE9jY3VycyA+IDEiOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBmb3JtYXRJbnZhbGlkQWxsU2VxTWFwcGluZ0Vycm9yKCkgewotICAgICAgICByZXR1cm4gIkludmFsaWQgUmVzdHJpY3Rpb24uICBFYWNoIGVsZW1lbnQgaW4gdGhlIGRlcml2ZWQgY29udGVudCBtb2RlbCBtdXN0IG1hdGNoIGFuIGVsZW1lbnQgaW4gdGhlIGJhc2UgIgotICAgICAgICAgICAgICAgICsgImNvbnRlbnQgbW9kZWwuIjsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm9ybWF0R3JvdXBNYXBwaW5nRXJyb3IoU2NoZW1hUGFydGljbGUgYmFzZU1vZGVsLCBTY2hlbWFQYXJ0aWNsZSBkZXJpdmVkTW9kZWwpIHsKLSAgICAgICAgcmV0dXJuICJJbnZhbGlkIFJlc3RyaWN0aW9uLiAgVGhlIG1lbWJlcnMgb2YgdGhlIGRlcml2ZWQgY29udGVudCBtb2RlbCBtdXN0IG1hdGNoIHRoZSBtZW1iZXJzIG9mIHRoZSBiYXNlICIKLSAgICAgICAgICAgICAgICArICIgY29udGVudCBtb2RlbCB1bmxlc3MgdGhlIG1lbWJlciBvZiB0aGUgYmFzZSBjb250ZW50IG1vZGVsIGlzIG9wdGlvbmFsIChwYXJ0aWNsZSBlbXB0aWFibGUpLiI7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZvcm1hdE1hcHBlZE1vcmVUaGFuT25jZUVycm9yKFNjaGVtYVBhcnRpY2xlIGJhc2VNb2RlbCwgU2NoZW1hUGFydGljbGUgZGVyaXZlZE1vZGVsKSB7Ci0gICAgICAgIHJldHVybiAiSW52YWxpZCBSZXN0cmljdGlvbi4gIFdoZW4gdXNpbmcgYSA8c2VxdWVuY2U+IHRvIHJlc3RyaWN0IGFuIDxhbGw+IHRoZSBlbGVtZW50cyBpbiB0aGUgPGFsbD4gY2FuIGJlIG1hcHBlZCBvbmx5IG9uY2UuICIKLSAgICAgICAgICAgICAgICArICIgRm91bmQgZWxlbWVudCBpbiB0aGUgPHNlcXVlbmNlPiB0aGF0IG1hcHMgYW4gZWxlbWVudCBpbiB0aGUgPGFsbD4gbW9yZSB0aGFuIG9uY2UuIjsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHJlY3Vyc2UoU2NoZW1hUGFydGljbGUgYmFzZU1vZGVsLCBTY2hlbWFQYXJ0aWNsZSBkZXJpdmVkTW9kZWwsIENvbGxlY3Rpb24gZXJyb3JzLCBYbWxPYmplY3QgY29udGV4dCkgewotICAgICAgICAvLyByZWN1cnNlIGlzIGNhbGxlZCB3aGVuIGJhc2U6IEFMTCBkZXJpdmVkOiBBTEwgb3IgYmFzZTogU0VRVUVOQ0UgZGVyaXZlZDogU0VRVUVOQ0UKLSAgICAgICAgYm9vbGVhbiByZWN1cnNlVmFsaWQgPSB0cnVlOwotICAgICAgICAvLyBGb3IgYW4gYWxsIG9yIHNlcXVlbmNlIGdyb3VwIHBhcnRpY2xlIHRvIGJlIGEgt3ZhbGlkIHJlc3RyaWN0aW9utyBvZiBhbm90aGVyIGdyb3VwIHBhcnRpY2xlIHdpdGggdGhlIHNhbWUKLSAgICAgICAgLy8ge2NvbXBvc2l0b3J9IGFsbCBvZiB0aGUgZm9sbG93aW5nIG11c3QgYmUgdHJ1ZToKLSAgICAgICAgLy8gMSBSJ3Mgb2NjdXJyZW5jZSByYW5nZSBpcyBhIHZhbGlkIHJlc3RyaWN0aW9uIG9mIEIncyBvY2N1cnJlbmNlIHJhbmdlIGFzIGRlZmluZWQgYnkKLSAgICAgICAgLy8gT2NjdXJyZW5jZSBSYW5nZSBPSyAopzMuOS42KS4KLSAgICAgICAgLy8gMiBUaGVyZSBpcyBhIGNvbXBsZXRlILdvcmRlci1wcmVzZXJ2aW5ntyBmdW5jdGlvbmFsIG1hcHBpbmcgZnJvbSB0aGUgcGFydGljbGVzIGluIHRoZSB7cGFydGljbGVzfSBvZiBSIHRvCi0gICAgICAgIC8vIHRoZSBwYXJ0aWNsZXMgaW4gdGhlIHtwYXJ0aWNsZXN9IG9mIEIgc3VjaCB0aGF0IGFsbCBvZiB0aGUgZm9sbG93aW5nIG11c3QgYmUgdHJ1ZToKLSAgICAgICAgLy8gICAyLjEgRWFjaCBwYXJ0aWNsZSBpbiB0aGUge3BhcnRpY2xlc30gb2YgUiBpcyBhILd2YWxpZCByZXN0cmljdGlvbrcgb2YgdGhlIHBhcnRpY2xlIGluIHRoZSB7cGFydGljbGVzfQotICAgICAgICAvLyAgIG9mIEIgaXQgbWFwcyB0byBhcyBkZWZpbmVkIGJ5IFBhcnRpY2xlIFZhbGlkIChSZXN0cmljdGlvbikgKKczLjkuNikuCi0gICAgICAgIC8vICAgMi4yIEFsbCBwYXJ0aWNsZXMgaW4gdGhlIHtwYXJ0aWNsZXN9IG9mIEIgd2hpY2ggYXJlIG5vdCBtYXBwZWQgdG8gYnkgYW55IHBhcnRpY2xlIGluIHRoZSB7cGFydGljbGVzfQotICAgICAgICAvLyAgIG9mIFIgYXJlILdlbXB0aWFibGW3IGFzIGRlZmluZWQgYnkgUGFydGljbGUgRW1wdGlhYmxlICinMy45LjYpLgotICAgICAgICAvLyBOT1RFOiBBbHRob3VnaCB0aGUgt3ZhbGlkYXRpb263IHNlbWFudGljcyBvZiBhbiBhbGwgZ3JvdXAgZG9lcyBub3QgZGVwZW5kIG9uIHRoZSBvcmRlciBvZiBpdHMgcGFydGljbGVzLAotICAgICAgICAvLyBkZXJpdmVkIGFsbCBncm91cHMgYXJlIHJlcXVpcmVkIHRvIG1hdGNoIHRoZSBvcmRlciBvZiB0aGVpciBiYXNlIGluIG9yZGVyIHRvIHNpbXBsaWZ5IGNoZWNraW5nIHRoYXQKLSAgICAgICAgLy8gdGhlIGRlcml2YXRpb24gaXMgT0suCi0gICAgICAgIC8vIFtEZWZpbml0aW9uOl0gIEEgY29tcGxldGUgZnVuY3Rpb25hbCBtYXBwaW5nIGlzIG9yZGVyLXByZXNlcnZpbmcgaWYgZWFjaCBwYXJ0aWNsZSByIGluIHRoZSBkb21haW4gUiBtYXBzCi0gICAgICAgIC8vIHRvIGEgcGFydGljbGUgYiBpbiB0aGUgcmFuZ2UgQiB3aGljaCBmb2xsb3dzIChub3QgbmVjZXNzYXJpbHkgaW1tZWRpYXRlbHkpIHRoZSBwYXJ0aWNsZSBpbiB0aGUgcmFuZ2UgQgotICAgICAgICAvLyBtYXBwZWQgdG8gYnkgdGhlIHByZWRlY2Vzc29yIG9mIHIsIGlmIGFueSwgd2hlcmUgInByZWRlY2Vzc29yIiBhbmQgImZvbGxvd3MiIGFyZSBkZWZpbmVkIHdpdGggcmVzcGVjdCB0bwotICAgICAgICAvLyB0aGUgb3JkZXIgb2YgdGhlIGxpc3RzIHdoaWNoIGNvbnN0aXR1dGUgUiBhbmQgQi4KLQotICAgICAgICBpZiAoIW9jY3VycmVuY2VSYW5nZU9LKGJhc2VNb2RlbCwgZGVyaXZlZE1vZGVsLCBlcnJvcnMsIGNvbnRleHQpKSB7Ci0gICAgICAgICAgICAvLyBlcnJvciBtZXNzYWdlIGlzIGZvcm1hdHRlZCBpbiBvY2N1cnJlbmNSYW5nZU9LIC4uLgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIC8vIGN5Y2xlIHRocnUgYm90aCBkZXJpdmVkIHBhcnRpY2xlIGNoaWxkcmVuIGFuZCBiYXNlIHBhcnRpY2xlIGNoaWxkcmVuIGxvb2tpbmcgZm9yIG1hdGNoZXMKLSAgICAgICAgLy8gIGlmIHRoZSBkZXJpdmVkIHBhcnRpY2xlIGRvZXMgbm90IG1hdGNoIHRoZSBiYXNlIHBhcnRpY2xlIHRoZW4gYmFzZSBwYXJ0aWNsZSBjYW4gYmUgc2tpcHBlZCBpZiBpdCBpcwotICAgICAgICAvLyAgc2tpcHBhYmxlIChzYW1lIGFzICJwYXJ0aWNsZSBlbXB0aWFibGUiKSBvdGhlcndpc2UgaXMgYW4gaW52YWxpZCByZXN0cmljdGlvbi4KLSAgICAgICAgLy8gYWZ0ZXIgdGhlIGRlcml2ZWQgcGFydGljbGVzIGhhdmUgYmVlbiBjeWNsZWQgaWYgdGhlcmUgYXJlIGFueSBiYXNlIHBhcnRpY2xlcyBsZWZ0IG92ZXIgdGhlbiB0aGV5Ci0gICAgICAgIC8vICBtdXN0IGJlIHNraXBwYWJsZSBvciBpbnZhbGlkIHJlc3RyaWN0aW9uCi0KLSAgICAgICAgU2NoZW1hUGFydGljbGVbXSBkZXJpdmVkUGFydGljbGVBcnJheSA9IGRlcml2ZWRNb2RlbC5nZXRQYXJ0aWNsZUNoaWxkcmVuKCk7Ci0gICAgICAgIFNjaGVtYVBhcnRpY2xlW10gYmFzZVBhcnRpY2xlQXJyYXkgPSBiYXNlTW9kZWwuZ2V0UGFydGljbGVDaGlsZHJlbigpOwotICAgICAgICBpbnQgaSA9IDAsIGogPSAwOwotICAgICAgICBmb3IgKDsgaSA8IGRlcml2ZWRQYXJ0aWNsZUFycmF5Lmxlbmd0aCAmJiBqIDwgYmFzZVBhcnRpY2xlQXJyYXkubGVuZ3RoOykgewotICAgICAgICAgICAgU2NoZW1hUGFydGljbGUgZGVyaXZlZFBhcnRpY2xlID0gZGVyaXZlZFBhcnRpY2xlQXJyYXlbaV07Ci0gICAgICAgICAgICBTY2hlbWFQYXJ0aWNsZSBiYXNlUGFydGljbGUgPSBiYXNlUGFydGljbGVBcnJheVtqXTsKLSAgICAgICAgICAgIC8vIHRyeSB0byBtYXRjaCB0aGUgdHdvIHBhcnRpY2xlcyBieSByZWN1cnNpbmcKLSAgICAgICAgICAgIGlmIChpc1BhcnRpY2xlVmFsaWRSZXN0cmljdGlvbihiYXNlUGFydGljbGUsIGRlcml2ZWRQYXJ0aWNsZSwgZXJyb3JzLCBjb250ZXh0KSkgewotICAgICAgICAgICAgICAgIC8vIGNvb2wgZm91bmQgYSBtYXRjaCwgaW5jcmVtZW50IGJvdGggaW5kZXhlcwotICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgICAgICBqKys7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIGRpZCBub3QgbWF0Y2gsIGluY3JlbWVudCB0aGUgYmFzZSBwYXJ0aWNsZSBhcnJheSBpbmRleCBvbmx5Ci0gICAgICAgICAgICAgICAgLy8gIHRoYXQncyBvayBpZiB0aGUgYmFzZSBwYXJ0aWNsZSBpcyBza2lwcGFibGUKLSAgICAgICAgICAgICAgICBpZiAoYmFzZVBhcnRpY2xlLmlzU2tpcHBhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gT2ssIGxldCdzIHNraXAgdGhpcyBiYXNlIHBhcnRpY2xlLCBpbmNyZW1lbnQgYmFzZSBwYXJ0aWNsZSBhcnJheSBpbmRleCBvbmx5Ci0gICAgICAgICAgICAgICAgICAgIGorKzsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyB3aG9hLCBwYXJ0aWNsZXMgYXJlIG5vdCB2YWxpZCByZXN0cmljdGlvbnMgYW5kIGJhc2UgaXMgbm90IHNraXBwYWJsZSAtIEVSUk9SCi0gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2VWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9ICJGb3VuZCBub24tb3B0aW9uYWwgcGFydGljbGUgdGhhdCBpcyBub3QgbWFwcGVkIGluIGJhc2UgY29udGVudCBtb2RlbC4iOwotICAgICAgICAgICAgICAgICAgICBlcnJvcnMuYWRkKFhtbEVycm9yLmZvck9iamVjdChmb3JtYXREZXJpdmVkTWFwcGluZ0Vycm9yKG1lc3NhZ2UsIGJhc2VNb2RlbCwgZGVyaXZlZE1vZGVsKSwgY29udGV4dCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBvaywgZ290IHRvIHRoZSBlbmQgb2Ygb25lIG9mIHRoZSBhcnJheXMKLSAgICAgICAgLy8gaWYgYXQgZW5kIG9mIGJhc2UgcGFydGljbGUgYXJyYXkgYW5kIG5vdCBhdCB0aGUgZW5kIG9mIGRlcml2ZWQgcGFydGljbGUgYXJyYXkgdGhlbiByZW1haW5pbmcgZGVyaXZlZAotICAgICAgICAvLyAgcGFydGljbGVzIG11c3Qgbm90IG1hdGNoCi0gICAgICAgIGlmIChpIDwgZGVyaXZlZFBhcnRpY2xlQXJyYXkubGVuZ3RoKSB7Ci0gICAgICAgICAgICByZWN1cnNlVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gIkZvdW5kIGRlcml2ZWQgcGFydGljbGVzIHRoYXQgYXJlIG5vdCBtYXRjaGVkIGluIHRoZSBiYXNlIGNvbnRlbnQgbW9kZWwuIjsKLSAgICAgICAgICAgIGVycm9ycy5hZGQoWG1sRXJyb3IuZm9yT2JqZWN0KGZvcm1hdERlcml2ZWRNYXBwaW5nRXJyb3IobWVzc2FnZSwgYmFzZU1vZGVsLCBkZXJpdmVkTW9kZWwpLCBjb250ZXh0KSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBpZiBhdCBlbmQgb2YgZGVyaXZlZCBwYXJ0aWNsZSBhcnJheSBhbmQgbm90IGF0IGVuZCBvZiBiYXNlIHBhcnRpY2xlIGFycmF5IHRoZW4gY2hjayByZW1haW5pbmcKLSAgICAgICAgICAgIC8vICBiYXNlIHBhcnRpY2xlcyB0byBhc3N1cmUgdGhleSBhcmUgc2tpcHBhYmxlCi0gICAgICAgICAgICBpZiAoaiA8IGJhc2VQYXJ0aWNsZUFycmF5Lmxlbmd0aCkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSBqOyBrIDwgYmFzZVBhcnRpY2xlQXJyYXkubGVuZ3RoOyBrKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFiYXNlUGFydGljbGVBcnJheVtrXS5pc1NraXBwYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNlVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gIkZvdW5kIHRyYWlsaW5nIGJhc2UgcGFydGljbGVzIHRoYXQgYXJlIG5vdCBvcHRpb25hbCBhbmQgYXJlIG5vdCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlcHJlc2VudGVkIGluIHRoZSBkZXJpdmVkIGNvbnRlbnQgbW9kZWwuIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5hZGQoWG1sRXJyb3IuZm9yT2JqZWN0KGZvcm1hdERlcml2ZWRNYXBwaW5nRXJyb3IobWVzc2FnZSwgYmFzZU1vZGVsLCBkZXJpdmVkTW9kZWwpLCBjb250ZXh0KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZWN1cnNlVmFsaWQ7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZvcm1hdERlcml2ZWRNYXBwaW5nRXJyb3IoU3RyaW5nIG1lc3NhZ2UsIFNjaGVtYVBhcnRpY2xlIGJhc2VNb2RlbCwgU2NoZW1hUGFydGljbGUgZGVyaXZlZE1vZGVsKSB7Ci0gICAgICAgIHJldHVybiAiSW52YWxpZCBSZXN0cmljdGlvbi4gIFRoZSBkZXJpdmVkIChyZXN0cmljdGVkKSBjb250ZW50IG1vZGVsIG11c3QgbWF0Y2ggdGhlIGJhc2UgY29udGVudCBtb2RlbCB1bmxlc3MgIgotICAgICAgICAgICAgICAgICsgInRoZSBwYXJ0IG9mIHRoZSBiYXNlIGNvbnRlbnQgbW9kZWwgdGhhdCBkb2VzIG5vdCBtYXRjaCBpcyBvcHRpb25hbC4gIEEgbWlzbWF0Y2ggZm91bmQgYmV0d2VlbiBhIGJhc2UgIiArCi0gICAgICAgICAgICAgICAgcHJpbnRQYXJ0aWNsZShiYXNlTW9kZWwpICsgIiBhbmQgYSBkZXJpdmVkICIgKyBwcmludFBhcnRpY2xlKGRlcml2ZWRNb2RlbCkgKyAiLiAgIiArIG1lc3NhZ2U7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBuc1JlY3Vyc2VDaGVja0NhcmRpbmFsaXR5KFNjaGVtYVBhcnRpY2xlIGJhc2VNb2RlbCwgU2NoZW1hUGFydGljbGUgZGVyaXZlZE1vZGVsLCBDb2xsZWN0aW9uIGVycm9ycywgWG1sT2JqZWN0IGNvbnRleHQpIHsKLSAgICAgICAgLy8gbnNSZWN1cnNlQ2hlY2tDYXJkaW5hbGl0eSBpcyBjYWxsZWQgd2hlbjoKLSAgICAgICAgLy8gYmFzZTogQU5ZLCBkZXJpdmVkOiBBTEwKLSAgICAgICAgLy8gYmFzZTogQU5ZLCBkZXJpdmVkOiBDSE9JQ0UKLSAgICAgICAgLy8gYmFzZTogQU5ZLCBkZXJpdmVkOiBTRVFVRU5DRQotICAgICAgICBhc3NlcnQgYmFzZU1vZGVsLmdldFBhcnRpY2xlVHlwZSgpID09IFNjaGVtYVBhcnRpY2xlLldJTERDQVJEOwotICAgICAgICBhc3NlcnQgKGRlcml2ZWRNb2RlbC5nZXRQYXJ0aWNsZVR5cGUoKSA9PSBTY2hlbWFQYXJ0aWNsZS5BTEwpCi0gICAgICAgICAgICAgICAgfHwgKGRlcml2ZWRNb2RlbC5nZXRQYXJ0aWNsZVR5cGUoKSA9PSBTY2hlbWFQYXJ0aWNsZS5DSE9JQ0UpCi0gICAgICAgICAgICAgICAgfHwgKGRlcml2ZWRNb2RlbC5nZXRQYXJ0aWNsZVR5cGUoKSA9PSBTY2hlbWFQYXJ0aWNsZS5TRVFVRU5DRSk7Ci0gICAgICAgIGJvb2xlYW4gbnNSZWN1cnNlQ2hlY2tDYXJkaW5hbGl0eSA9IHRydWU7Ci0gICAgICAgIC8vIEZvciBhIGdyb3VwIHBhcnRpY2xlIHRvIGJlIGEgt3ZhbGlkIHJlc3RyaWN0aW9utyBvZiBhIHdpbGRjYXJkIHBhcnRpY2xlIGFsbCBvZiB0aGUgZm9sbG93aW5nIG11c3QgYmUgdHJ1ZToKLSAgICAgICAgLy8gMSBFdmVyeSBtZW1iZXIgb2YgdGhlIHtwYXJ0aWNsZXN9IG9mIHRoZSBncm91cCBpcyBhILd2YWxpZCByZXN0cmljdGlvbrcgb2YgdGhlIHdpbGRjYXJkIGFzIGRlZmluZWQgYnkgUGFydGljbGUgVmFsaWQgKFJlc3RyaWN0aW9uKSAopzMuOS42KS4KLSAgICAgICAgLy8gIE5vdGU6ICBub3QgcG9zaXRpdmUgd2hhdCB0aGlzIG1lYW5zLiAgSW50ZXJwcmV0aW5nIHRvIG1lYW4gdGhhdCBldmVyeSBwYXJ0aWNsZSBvZiB0aGUgZ3JvdXAgbXVzdCBhZGhlcmUgdG8gd2lsZGNhcmQgZGVyaXZhdGlvbiBydWxlcwotICAgICAgICAvLyAgICAgICAgIGluIGEgcmVjdXJzaXZlIG1hbm5lcgotICAgICAgICAvLyAgTG9vcCB0aHJ1IHRoZSBjaGlsZHJlbiBwYXJ0aWNsZXMgb2YgdGhlIGdyb3VwIGFuZCBpbnZva2UgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIHRvIGNoZWNrIGZvciB3aWxkY2FyZCByZXN0cmljdGlvbiB2YWxpZGl0eQotICAgICAgICAKLSAgICAgICAgLy8gQkFVIC0gYW4gZXJyYXRhIHNob3VsZCBiZSBzdWJtaXR0ZWQgb24gdGhpcyBjbGF1c2Ugb2YgdGhlIHNwZWMsIGJlY2F1c2UgdGhlCi0gICAgICAgIC8vIHNwZWMgbWFrZXMgbm8gc2Vuc2UsIGFzIHRoZSB4c3RjIHBhcnRpY2xlc1IwMTMueHNkIHRlc3QgZXhlbXBsaWZpZXMuCi0gICAgICAgIC8vIHdoYXQgd2UgX3Nob3VsZF8gc28gaXMgYW4gImFzIGlmIiBvbiB0aGUgd2lsZGNhcmQsIGFsbG93aW5nIGl0IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiCi0gICAgICAgIC8vIGJlZm9yZSByZWN1cnNpbmcKLSAgICAgICAgU2NoZW1hUGFydGljbGVJbXBsIGFzSWZQYXJ0ID0gbmV3IFNjaGVtYVBhcnRpY2xlSW1wbCgpOwotICAgICAgICBhc0lmUGFydC5zZXRQYXJ0aWNsZVR5cGUoYmFzZU1vZGVsLmdldFBhcnRpY2xlVHlwZSgpKTsKLSAgICAgICAgYXNJZlBhcnQuc2V0V2lsZGNhcmRQcm9jZXNzKGJhc2VNb2RlbC5nZXRXaWxkY2FyZFByb2Nlc3MoKSk7Ci0gICAgICAgIGFzSWZQYXJ0LnNldFdpbGRjYXJkU2V0KGJhc2VNb2RlbC5nZXRXaWxkY2FyZFNldCgpKTsKLSAgICAgICAgYXNJZlBhcnQuc2V0TWluT2NjdXJzKEJpZ0ludGVnZXIuWkVSTyk7Ci0gICAgICAgIGFzSWZQYXJ0LnNldE1heE9jY3VycyhudWxsKTsKLSAgICAgICAgYXNJZlBhcnQuc2V0VHJhbnNpdGlvblJ1bGVzKGJhc2VNb2RlbC5nZXRXaWxkY2FyZFNldCgpLCB0cnVlKTsKLSAgICAgICAgYXNJZlBhcnQuc2V0VHJhbnNpdGlvbk5vdGVzKGJhc2VNb2RlbC5nZXRXaWxkY2FyZFNldCgpLCB0cnVlKTsKLQotICAgICAgICBTY2hlbWFQYXJ0aWNsZVtdIHBhcnRpY2xlQ2hpbGRyZW4gPSBkZXJpdmVkTW9kZWwuZ2V0UGFydGljbGVDaGlsZHJlbigpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcnRpY2xlQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIFNjaGVtYVBhcnRpY2xlIHBhcnRpY2xlID0gcGFydGljbGVDaGlsZHJlbltpXTsKLSAgICAgICAgICAgIHN3aXRjaCAocGFydGljbGUuZ2V0UGFydGljbGVUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLkVMRU1FTlQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciB2YWxpZCBXaWxkY2FyZC9FbGVtZW50IGRlcml2YXRpb24KLSAgICAgICAgICAgICAgICAgICAgbnNSZWN1cnNlQ2hlY2tDYXJkaW5hbGl0eSA9IG5zQ29tcGF0KGFzSWZQYXJ0LCAoU2NoZW1hTG9jYWxFbGVtZW50KSBwYXJ0aWNsZSwgZXJyb3JzLCBjb250ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5XSUxEQ0FSRDoKLSAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHZhbGlkIFdpbGRjYXJkL1dpbGRjYXJkIGRlcml2YXRpb24KLSAgICAgICAgICAgICAgICAgICAgbnNSZWN1cnNlQ2hlY2tDYXJkaW5hbGl0eSA9IG5zU3Vic2V0KGFzSWZQYXJ0LCBwYXJ0aWNsZSwgZXJyb3JzLCBjb250ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5BTEw6Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5DSE9JQ0U6Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5TRVFVRU5DRToKLSAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHZhbGlkIFdpbGRjYXJkL0dyb3VwIGRlcml2YXRpb24KLSAgICAgICAgICAgICAgICAgICAgbnNSZWN1cnNlQ2hlY2tDYXJkaW5hbGl0eSA9IG5zUmVjdXJzZUNoZWNrQ2FyZGluYWxpdHkoYXNJZlBhcnQsIGRlcml2ZWRNb2RlbCwgZXJyb3JzLCBjb250ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBJZiBhbnkgcGFydGljbGUgaXMgaW52YWxpZCB0aGVuIGJyZWFrIHRoZSBsb29wCi0gICAgICAgICAgICBpZiAoIW5zUmVjdXJzZUNoZWNrQ2FyZGluYWxpdHkpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIDIgVGhlIGVmZmVjdGl2ZSB0b3RhbCByYW5nZSBvZiB0aGUgZ3JvdXAsIGFzIGRlZmluZWQgYnkgRWZmZWN0aXZlIFRvdGFsIFJhbmdlIChhbGwgYW5kIHNlcXVlbmNlKSAopzMuOC42KQotICAgICAgICAvLyAoaWYgdGhlIGdyb3VwIGlzIGFsbCBvciBzZXF1ZW5jZSkgb3IgRWZmZWN0aXZlIFRvdGFsIFJhbmdlIChjaG9pY2UpICinMy44LjYpIChpZiBpdCBpcyBjaG9pY2UpIGlzIGEgdmFsaWQKLSAgICAgICAgLy8gcmVzdHJpY3Rpb24gb2YgQidzIG9jY3VycmVuY2UgcmFuZ2UgYXMgZGVmaW5lZCBieSBPY2N1cnJlbmNlIFJhbmdlIE9LICinMy45LjYpLgotCi0gICAgICAgIGlmIChuc1JlY3Vyc2VDaGVja0NhcmRpbmFsaXR5KSB7Ci0gICAgICAgICAgICBuc1JlY3Vyc2VDaGVja0NhcmRpbmFsaXR5ID0gY2hlY2tHcm91cE9jY3VycmVuY2VPSyhiYXNlTW9kZWwsIGRlcml2ZWRNb2RlbCwgZXJyb3JzLCBjb250ZXh0KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBuc1JlY3Vyc2VDaGVja0NhcmRpbmFsaXR5OwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gY2hlY2tHcm91cE9jY3VycmVuY2VPSyhTY2hlbWFQYXJ0aWNsZSBiYXNlTW9kZWwsIFNjaGVtYVBhcnRpY2xlIGRlcml2ZWRNb2RlbCwgQ29sbGVjdGlvbiBlcnJvcnMsIFhtbE9iamVjdCBjb250ZXh0KSB7Ci0gICAgICAgIGJvb2xlYW4gZ3JvdXBPY2N1cnJlbmNlT0sgPSB0cnVlOwotICAgICAgICBCaWdJbnRlZ2VyIG1pblJhbmdlID0gQmlnSW50ZWdlci5aRVJPOwotICAgICAgICBCaWdJbnRlZ2VyIG1heFJhbmdlID0gQmlnSW50ZWdlci5aRVJPOwotICAgICAgICBzd2l0Y2ggKGRlcml2ZWRNb2RlbC5nZXRQYXJ0aWNsZVR5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5BTEw6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLlNFUVVFTkNFOgotICAgICAgICAgICAgICAgIG1pblJhbmdlID0gZ2V0RWZmZWN0aXZlTWluUmFuZ2VBbGxTZXEoZGVyaXZlZE1vZGVsKTsKLSAgICAgICAgICAgICAgICBtYXhSYW5nZSA9IGdldEVmZmVjdGl2ZU1heFJhbmdlQWxsU2VxKGRlcml2ZWRNb2RlbCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLkNIT0lDRToKLSAgICAgICAgICAgICAgICBtaW5SYW5nZSA9IGdldEVmZmVjdGl2ZU1pblJhbmdlQ2hvaWNlKGRlcml2ZWRNb2RlbCk7Ci0gICAgICAgICAgICAgICAgbWF4UmFuZ2UgPSBnZXRFZmZlY3RpdmVNYXhSYW5nZUNob2ljZShkZXJpdmVkTW9kZWwpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQ2hlY2sgbWluIG9jY3VycyBmb3IgdmFsaWRpdHkKLSAgICAgICAgLy8gZGVyaXZlZCBtaW4gb2NjdXJzIGlzIHZhbGlkIGlmIGl0cyB7bWluIG9jY3Vyc30gaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBvdGhlcidzIHttaW4gb2NjdXJzfS4KLSAgICAgICAgaWYgKG1pblJhbmdlLmNvbXBhcmVUbyhiYXNlTW9kZWwuZ2V0TWluT2NjdXJzKCkpIDwgMCkgewotICAgICAgICAgICAgZ3JvdXBPY2N1cnJlbmNlT0sgPSBmYWxzZTsKLSAgICAgICAgICAgIGVycm9ycy5hZGQoWG1sRXJyb3IuZm9yT2JqZWN0KGZvcm1hdEdyb3VwTWluT2NjdXJzRXJyb3IoZGVyaXZlZE1vZGVsLCBiYXNlTW9kZWwpLCBjb250ZXh0KSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gQ2hlY2sgbWF4IG9jY3VycyBmb3IgdmFsaWRpdHkKLSAgICAgICAgLy8gb25lIG9mIHRoZSBmb2xsb3dpbmcgbXVzdCBiZSB0cnVlOgotICAgICAgICAvLyBUaGUgYmFzZSBtb2RlbCdzIHttYXggb2NjdXJzfSBpcyB1bmJvdW5kZWQuCi0gICAgICAgIC8vIG9yIGJvdGgge21heCBvY2N1cnN9IGFyZSBudW1iZXJzLCBhbmQgdGhlIHBhcnRpY2xlJ3MgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBvdGhlcidzCi0gICAgICAgIEJpZ0ludGVnZXIgVU5CT1VOREVEID0gbnVsbDsKLSAgICAgICAgaWYgKGJhc2VNb2RlbC5nZXRNYXhPY2N1cnMoKSAhPSBVTkJPVU5ERUQpIHsKLSAgICAgICAgICAgIGlmIChtYXhSYW5nZSA9PSBVTkJPVU5ERUQpIHsKLSAgICAgICAgICAgICAgICBncm91cE9jY3VycmVuY2VPSyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGVycm9ycy5hZGQoWG1sRXJyb3IuZm9yT2JqZWN0KGZvcm1hdEdyb3VwTWF4T2NjdXJzRXJyb3IoZGVyaXZlZE1vZGVsLCBiYXNlTW9kZWwpLCBjb250ZXh0KSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChtYXhSYW5nZS5jb21wYXJlVG8oYmFzZU1vZGVsLmdldE1heE9jY3VycygpKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZ3JvdXBPY2N1cnJlbmNlT0sgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgZXJyb3JzLmFkZChYbWxFcnJvci5mb3JPYmplY3QoZm9ybWF0R3JvdXBNYXhPY2N1cnNFcnJvcihkZXJpdmVkTW9kZWwsIGJhc2VNb2RlbCksIGNvbnRleHQpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGdyb3VwT2NjdXJyZW5jZU9LOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBmb3JtYXRHcm91cE1heE9jY3Vyc0Vycm9yKFNjaGVtYVBhcnRpY2xlIGRlcml2ZWRNb2RlbCwgU2NoZW1hUGFydGljbGUgYmFzZU1vZGVsKSB7Ci0gICAgICAgIHJldHVybiAiSW52YWxpZCBSZXN0cmljdGlvbi4gIFRoZSBtYXhPY2N1cnMgZm9yIHRoZSBkZXJpdmVkIGdyb3VwICIKLSAgICAgICAgICAgICAgICArIHByaW50UGFydGljbGUoZGVyaXZlZE1vZGVsKQotICAgICAgICAgICAgICAgICsgIiBpcyBncmVhdCB0aGFuIHRoZSBiYXNlIG1heE9jY3VycyBvZiAiCi0gICAgICAgICAgICAgICAgKyBwcmludE1heE9jY3VycyhiYXNlTW9kZWwuZ2V0TWF4T2NjdXJzKCkpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBmb3JtYXRHcm91cE1pbk9jY3Vyc0Vycm9yKFNjaGVtYVBhcnRpY2xlIGRlcml2ZWRNb2RlbCwgU2NoZW1hUGFydGljbGUgYmFzZU1vZGVsKSB7Ci0gICAgICAgIHJldHVybiAiSW52YWxpZCBSZXN0cmljdGlvbi4gIFRoZSBtaW5PY2N1cnMgZm9yIHRoZSBkZXJpdmVkIGdyb3VwICIKLSAgICAgICAgICAgICAgICArIHByaW50UGFydGljbGUoZGVyaXZlZE1vZGVsKQotICAgICAgICAgICAgICAgICsgIiBpcyBsZXNzIHRoYW4gdGhlIGJhc2UgbWluT2NjdXJzIG9mICIKLSAgICAgICAgICAgICAgICArIGJhc2VNb2RlbC5nZXRNaW5PY2N1cnMoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBCaWdJbnRlZ2VyIGdldEVmZmVjdGl2ZU1heFJhbmdlQ2hvaWNlKFNjaGVtYVBhcnRpY2xlIGRlcml2ZWRNb2RlbCkgewotICAgICAgICBCaWdJbnRlZ2VyIG1heFJhbmdlID0gQmlnSW50ZWdlci5aRVJPOwotICAgICAgICBCaWdJbnRlZ2VyIFVOQk9VTkRFRCA9IG51bGw7Ci0gICAgICAgIC8vIFNjaGVtYSBDb21wb25lbnQgQ29uc3RyYWludDogRWZmZWN0aXZlIFRvdGFsIFJhbmdlIChjaG9pY2UpCi0gICAgICAgIC8vIFRoZSBlZmZlY3RpdmUgdG90YWwgcmFuZ2Ugb2YgYSBwYXJ0aWNsZSB3aG9zZSB7dGVybX0gaXMgYSBncm91cCB3aG9zZSB7Y29tcG9zaXRvcn0gaXMgY2hvaWNlCi0gICAgICAgIC8vIGlzIGEgcGFpciBvZiBtaW5pbXVtIGFuZCBtYXhpbXVtLCBhcyBmb2xsb3dzOgotICAgICAgICAvLyBNQVhJTVVNCi0gICAgICAgIC8vIDEpIHVuYm91bmRlZCBpZiB0aGUge21heCBvY2N1cnN9IG9mIGFueSB3aWxkY2FyZCBvciBlbGVtZW50IGRlY2xhcmF0aW9uIHBhcnRpY2xlIGluIHRoZSBncm91cCdzIHtwYXJ0aWNsZXN9IG9yCi0gICAgICAgIC8vIHRoZSBtYXhpbXVtIHBhcnQgb2YgdGhlIGVmZmVjdGl2ZSB0b3RhbCByYW5nZSBvZiBhbnkgb2YgdGhlIGdyb3VwIHBhcnRpY2xlcyBpbiB0aGUgZ3JvdXAncyB7cGFydGljbGVzfSBpcwotICAgICAgICAvLyB1bmJvdW5kZWQgKG5vdGU6IHNlZW1zIHRvIGJlIHRoZSBzYW1lIGFzIE1heCBSYW5nZSBBbGwgb3IgU2VxdWVuY2UpLAotICAgICAgICAvLyBvciAyKSBpZiBhbnkgb2YgdGhvc2UgaXMgbm9uLXplcm8gYW5kIHRoZSB7bWF4IG9jY3Vyc30gb2YgdGhlIHBhcnRpY2xlIGl0c2VsZiBpcyB1bmJvdW5kZWQsCi0gICAgICAgIC8vIG90aGVyd2lzZSAzKSB0aGUgcHJvZHVjdCBvZiB0aGUgcGFydGljbGUncyB7bWF4IG9jY3Vyc30gYW5kIHRoZSBtYXhpbXVtIG9mIHRoZSB7bWF4IG9jY3Vyc30gb2YgZXZlcnkKLSAgICAgICAgLy8gd2lsZGNhcmQgb3IgZWxlbWVudCBkZWNsYXJhdGlvbiBwYXJ0aWNsZSBpbiB0aGUgZ3JvdXAncyB7cGFydGljbGVzfSBhbmQgdGhlICptYXhpbXVtKiAobm90ZTogdGhpcyBpcyB0aGUgZGlmZmVyZW5jZQotICAgICAgICAvLyBiZXR3ZWVuIE1heFJhbmdlIENob2ljZSBhbnMgTWF4UmFuZ2UgQWxsIG9yIFNlcXVlbmNlKSBwYXJ0IG9mIHRoZQotICAgICAgICAvLyBlZmZlY3RpdmUgdG90YWwgcmFuZ2Ugb2YgZWFjaCBvZiB0aGUgZ3JvdXAgcGFydGljbGVzIGluIHRoZSBncm91cCdzIHtwYXJ0aWNsZXN9Ci0gICAgICAgIC8vIChvciAwIGlmIHRoZXJlIGFyZSBubyB7cGFydGljbGVzfSkuCi0KLSAgICAgICAgYm9vbGVhbiBub25aZXJvUGFydGljbGVDaGlsZEZvdW5kID0gZmFsc2U7Ci0gICAgICAgIEJpZ0ludGVnZXIgbWF4T2NjdXJzSW5XaWxkQ2FyZE9yRWxlbWVudCA9IEJpZ0ludGVnZXIuWkVSTzsKLSAgICAgICAgQmlnSW50ZWdlciBtYXhPY2N1cnNJbkdyb3VwID0gQmlnSW50ZWdlci5aRVJPOwotICAgICAgICBTY2hlbWFQYXJ0aWNsZVtdIHBhcnRpY2xlQ2hpbGRyZW4gPSBkZXJpdmVkTW9kZWwuZ2V0UGFydGljbGVDaGlsZHJlbigpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcnRpY2xlQ2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgIFNjaGVtYVBhcnRpY2xlIHBhcnRpY2xlID0gcGFydGljbGVDaGlsZHJlbltpXTsKLSAgICAgICAgICAgIHN3aXRjaCAocGFydGljbGUuZ2V0UGFydGljbGVUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLldJTERDQVJEOgotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuRUxFTUVOVDoKLSAgICAgICAgICAgICAgICAgICAgLy8gaWYgdW5ib3VuZGVkIHRoZW4gbWF4b2NjdXJzIHdpbGwgYmUgbnVsbAotICAgICAgICAgICAgICAgICAgICBpZiAocGFydGljbGUuZ2V0TWF4T2NjdXJzKCkgPT0gVU5CT1VOREVEKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXhSYW5nZSA9IFVOQk9VTkRFRDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJ0aWNsZS5nZXRJbnRNYXhPY2N1cnMoKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaG93IHRodCBhdCBsZWFzdCBvbmUgbm9uLXplcm8gcGFydGljbGUgaXMgZm91bmQgZm9yIGxhdGVyIHRlc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25aZXJvUGFydGljbGVDaGlsZEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFydGljbGUuZ2V0TWF4T2NjdXJzKCkuY29tcGFyZVRvKG1heE9jY3Vyc0luV2lsZENhcmRPckVsZW1lbnQpID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnNJbldpbGRDYXJkT3JFbGVtZW50ID0gcGFydGljbGUuZ2V0TWF4T2NjdXJzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQUxMOgotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuU0VRVUVOQ0U6Ci0gICAgICAgICAgICAgICAgICAgIG1heFJhbmdlID0gZ2V0RWZmZWN0aXZlTWF4UmFuZ2VBbGxTZXEoZGVyaXZlZE1vZGVsKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1heFJhbmdlICE9IFVOQk9VTkRFRCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2VlcCBoaWdoZXN0IG1heG9jY3VycyBmb3VuZAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heFJhbmdlLmNvbXBhcmVUbyhtYXhPY2N1cnNJbkdyb3VwKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnNJbkdyb3VwID0gbWF4UmFuZ2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5DSE9JQ0U6Ci0gICAgICAgICAgICAgICAgICAgIG1heFJhbmdlID0gZ2V0RWZmZWN0aXZlTWF4UmFuZ2VDaG9pY2UoZGVyaXZlZE1vZGVsKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1heFJhbmdlICE9IFVOQk9VTkRFRCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2VlcCBoaWdoZXN0IG1heG9jY3VycyBmb3VuZAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heFJhbmdlLmNvbXBhcmVUbyhtYXhPY2N1cnNJbkdyb3VwKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnNJbkdyb3VwID0gbWF4UmFuZ2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBpZiBhbiB1bmJvdW5kZWQgaGFzIGJlZW4gZm91bmQgdGhlbiB3ZSBhcmUgZG9uZQotICAgICAgICAgICAgaWYgKG1heFJhbmdlID09IFVOQk9VTkRFRCkgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMSkgdW5ib3VuZGVkIGlmIHRoZSB7bWF4IG9jY3Vyc30gb2YgYW55IHdpbGRjYXJkIG9yIGVsZW1lbnQgZGVjbGFyYXRpb24gcGFydGljbGUgaW4gdGhlIGdyb3VwJ3Mge3BhcnRpY2xlc30gb3IKLSAgICAgICAgLy8gdGhlIG1heGltdW0gcGFydCBvZiB0aGUgZWZmZWN0aXZlIHRvdGFsIHJhbmdlIG9mIGFueSBvZiB0aGUgZ3JvdXAgcGFydGljbGVzIGluIHRoZSBncm91cCdzIHtwYXJ0aWNsZXN9IGlzCi0gICAgICAgIC8vIHVuYm91bmRlZAotICAgICAgICBpZiAobWF4UmFuZ2UgIT0gVU5CT1VOREVEKSB7Ci0gICAgICAgICAgICAvLyAyKSBpZiBhbnkgb2YgdGhvc2UgaXMgbm9uLXplcm8gYW5kIHRoZSB7bWF4IG9jY3Vyc30gb2YgdGhlIHBhcnRpY2xlIGl0c2VsZiBpcyB1bmJvdW5kZWQKLSAgICAgICAgICAgIGlmIChub25aZXJvUGFydGljbGVDaGlsZEZvdW5kICYmIGRlcml2ZWRNb2RlbC5nZXRNYXhPY2N1cnMoKSA9PSBVTkJPVU5ERUQpIHsKLSAgICAgICAgICAgICAgICBtYXhSYW5nZSA9IFVOQk9VTkRFRDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gMykgdGhlIHByb2R1Y3Qgb2YgdGhlIHBhcnRpY2xlJ3Mge21heCBvY2N1cnN9IGFuZCB0aGUgbWF4aW11bSBvZiB0aGUge21heCBvY2N1cnN9IG9mIGV2ZXJ5Ci0gICAgICAgICAgICAgICAgLy8gd2lsZGNhcmQgb3IgZWxlbWVudCBkZWNsYXJhdGlvbiBwYXJ0aWNsZSBpbiB0aGUgZ3JvdXAncyB7cGFydGljbGVzfSBhbmQgdGhlICptYXhpbXVtKgotICAgICAgICAgICAgICAgIC8vIHBhcnQgb2YgdGhlIGVmZmVjdGl2ZSB0b3RhbCByYW5nZSBvZiBlYWNoIG9mIHRoZSBncm91cCBwYXJ0aWNsZXMgaW4gdGhlIGdyb3VwJ3Mge3BhcnRpY2xlc30KLSAgICAgICAgICAgICAgICBtYXhSYW5nZSA9IGRlcml2ZWRNb2RlbC5nZXRNYXhPY2N1cnMoKS5tdWx0aXBseShtYXhPY2N1cnNJbldpbGRDYXJkT3JFbGVtZW50LmFkZChtYXhPY2N1cnNJbkdyb3VwKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbWF4UmFuZ2U7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgQmlnSW50ZWdlciBnZXRFZmZlY3RpdmVNYXhSYW5nZUFsbFNlcShTY2hlbWFQYXJ0aWNsZSBkZXJpdmVkTW9kZWwpIHsKLSAgICAgICAgQmlnSW50ZWdlciBtYXhSYW5nZSA9IEJpZ0ludGVnZXIuWkVSTzsKLSAgICAgICAgQmlnSW50ZWdlciBVTkJPVU5ERUQgPSBudWxsOwotICAgICAgICAvLyBTY2hlbWEgQ29tcG9uZW50IENvbnN0cmFpbnQ6IEVmZmVjdGl2ZSBUb3RhbCBSYW5nZSAoYWxsIGFuZCBzZXF1ZW5jZSkKLSAgICAgICAgLy8gVGhlIGVmZmVjdGl2ZSB0b3RhbCByYW5nZSBvZiBhIHBhcnRpY2xlIHdob3NlIHt0ZXJtfSBpcyBhIGdyb3VwIHdob3NlIHtjb21wb3NpdG9yfSBpcyBhbGwgb3Igc2VxdWVuY2UgaXMgYQotICAgICAgICAvLyBwYWlyIG9mIG1pbmltdW0gYW5kIG1heGltdW0sIGFzIGZvbGxvd3M6Ci0gICAgICAgIC8vIE1BWElNVU0KLSAgICAgICAgLy8gMSkgdW5ib3VuZGVkIGlmIHRoZSB7bWF4IG9jY3Vyc30gb2YgYW55IHdpbGRjYXJkIG9yIGVsZW1lbnQgZGVjbGFyYXRpb24gcGFydGljbGUgaW4gdGhlIGdyb3VwJ3Mge3BhcnRpY2xlc30gb3IKLSAgICAgICAgLy8gdGhlIG1heGltdW0gcGFydCBvZiB0aGUgZWZmZWN0aXZlIHRvdGFsIHJhbmdlIG9mIGFueSBvZiB0aGUgZ3JvdXAgcGFydGljbGVzIGluIHRoZSBncm91cCdzIHtwYXJ0aWNsZXN9IGlzCi0gICAgICAgIC8vIHVuYm91bmRlZCwgb3IgMikgaWYgYW55IG9mIHRob3NlIGlzIG5vbi16ZXJvIGFuZCB0aGUge21heCBvY2N1cnN9IG9mIHRoZSBwYXJ0aWNsZSBpdHNlbGYgaXMgdW5ib3VuZGVkLCBvdGhlcndpc2UKLSAgICAgICAgLy8gMykgdGhlIHByb2R1Y3Qgb2YgdGhlIHBhcnRpY2xlJ3Mge21heCBvY2N1cnN9IGFuZCB0aGUgKnN1bSogb2YgdGhlIHttYXggb2NjdXJzfSBvZiBldmVyeSB3aWxkY2FyZCBvciBlbGVtZW50Ci0gICAgICAgIC8vIGRlY2xhcmF0aW9uIHBhcnRpY2xlIGluIHRoZSBncm91cCdzIHtwYXJ0aWNsZXN9IGFuZCB0aGUgbWF4aW11bSBwYXJ0IG9mIHRoZSBlZmZlY3RpdmUgdG90YWwgcmFuZ2Ugb2YgZWFjaCBvZgotICAgICAgICAvLyB0aGUgZ3JvdXAgcGFydGljbGVzIGluIHRoZSBncm91cCdzIHtwYXJ0aWNsZXN9IChvciAwIGlmIHRoZXJlIGFyZSBubyB7cGFydGljbGVzfSkuCi0KLSAgICAgICAgYm9vbGVhbiBub25aZXJvUGFydGljbGVDaGlsZEZvdW5kID0gZmFsc2U7Ci0gICAgICAgIEJpZ0ludGVnZXIgbWF4T2NjdXJzVG90YWwgPSBCaWdJbnRlZ2VyLlpFUk87Ci0gICAgICAgIEJpZ0ludGVnZXIgbWF4T2NjdXJzSW5Hcm91cCA9IEJpZ0ludGVnZXIuWkVSTzsKLSAgICAgICAgU2NoZW1hUGFydGljbGVbXSBwYXJ0aWNsZUNoaWxkcmVuID0gZGVyaXZlZE1vZGVsLmdldFBhcnRpY2xlQ2hpbGRyZW4oKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0aWNsZUNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBTY2hlbWFQYXJ0aWNsZSBwYXJ0aWNsZSA9IHBhcnRpY2xlQ2hpbGRyZW5baV07Ci0gICAgICAgICAgICBzd2l0Y2ggKHBhcnRpY2xlLmdldFBhcnRpY2xlVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5XSUxEQ0FSRDoKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLkVMRU1FTlQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIGlmIHVuYm91bmRlZCB0aGVuIG1heG9jY3VycyB3aWxsIGJlIG51bGwKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnRpY2xlLmdldE1heE9jY3VycygpID09IFVOQk9VTkRFRCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWF4UmFuZ2UgPSBVTkJPVU5ERUQ7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFydGljbGUuZ2V0SW50TWF4T2NjdXJzKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2hvdyB0aHQgYXQgbGVhc3Qgb25lIG5vbi16ZXJvIHBhcnRpY2xlIGlzIGZvdW5kIGZvciBsYXRlciB0ZXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uWmVyb1BhcnRpY2xlQ2hpbGRGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzVG90YWwgPSBtYXhPY2N1cnNUb3RhbC5hZGQocGFydGljbGUuZ2V0TWF4T2NjdXJzKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQUxMOgotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuU0VRVUVOQ0U6Ci0gICAgICAgICAgICAgICAgICAgIG1heFJhbmdlID0gZ2V0RWZmZWN0aXZlTWF4UmFuZ2VBbGxTZXEoZGVyaXZlZE1vZGVsKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1heFJhbmdlICE9IFVOQk9VTkRFRCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2VlcCBoaWdoZXN0IG1heG9jY3VycyBmb3VuZAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heFJhbmdlLmNvbXBhcmVUbyhtYXhPY2N1cnNJbkdyb3VwKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnNJbkdyb3VwID0gbWF4UmFuZ2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5DSE9JQ0U6Ci0gICAgICAgICAgICAgICAgICAgIG1heFJhbmdlID0gZ2V0RWZmZWN0aXZlTWF4UmFuZ2VDaG9pY2UoZGVyaXZlZE1vZGVsKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1heFJhbmdlICE9IFVOQk9VTkRFRCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2VlcCBoaWdoZXN0IG1heG9jY3VycyBmb3VuZAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heFJhbmdlLmNvbXBhcmVUbyhtYXhPY2N1cnNJbkdyb3VwKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnNJbkdyb3VwID0gbWF4UmFuZ2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBpZiBhbiB1bmJvdW5kZWQgaGFzIGJlZW4gZm91bmQgdGhlbiB3ZSBhcmUgZG9uZQotICAgICAgICAgICAgaWYgKG1heFJhbmdlID09IFVOQk9VTkRFRCkgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gMSkgdW5ib3VuZGVkIGlmIHRoZSB7bWF4IG9jY3Vyc30gb2YgYW55IHdpbGRjYXJkIG9yIGVsZW1lbnQgZGVjbGFyYXRpb24gcGFydGljbGUgaW4gdGhlIGdyb3VwJ3Mge3BhcnRpY2xlc30gb3IKLSAgICAgICAgLy8gdGhlIG1heGltdW0gcGFydCBvZiB0aGUgZWZmZWN0aXZlIHRvdGFsIHJhbmdlIG9mIGFueSBvZiB0aGUgZ3JvdXAgcGFydGljbGVzIGluIHRoZSBncm91cCdzIHtwYXJ0aWNsZXN9IGlzCi0gICAgICAgIC8vIHVuYm91bmRlZAotICAgICAgICBpZiAobWF4UmFuZ2UgIT0gVU5CT1VOREVEKSB7Ci0gICAgICAgICAgICAvLyAyKSBpZiBhbnkgb2YgdGhvc2UgaXMgbm9uLXplcm8gYW5kIHRoZSB7bWF4IG9jY3Vyc30gb2YgdGhlIHBhcnRpY2xlIGl0c2VsZiBpcyB1bmJvdW5kZWQKLSAgICAgICAgICAgIGlmIChub25aZXJvUGFydGljbGVDaGlsZEZvdW5kICYmIGRlcml2ZWRNb2RlbC5nZXRNYXhPY2N1cnMoKSA9PSBVTkJPVU5ERUQpIHsKLSAgICAgICAgICAgICAgICBtYXhSYW5nZSA9IFVOQk9VTkRFRDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gMykgdGhlIHByb2R1Y3Qgb2YgdGhlIHBhcnRpY2xlJ3Mge21heCBvY2N1cnN9IGFuZCB0aGUgc3VtIG9mIHRoZSB7bWF4IG9jY3Vyc30gb2YgZXZlcnkgd2lsZGNhcmQgb3IgZWxlbWVudAotICAgICAgICAgICAgICAgIC8vIGRlY2xhcmF0aW9uIHBhcnRpY2xlIGluIHRoZSBncm91cCdzIHtwYXJ0aWNsZXN9IGFuZCB0aGUgbWF4aW11bSBwYXJ0IG9mIHRoZSBlZmZlY3RpdmUgdG90YWwgcmFuZ2Ugb2YgZWFjaCBvZgotICAgICAgICAgICAgICAgIC8vIHRoZSBncm91cCBwYXJ0aWNsZXMgaW4gdGhlIGdyb3VwJ3Mge3BhcnRpY2xlc30KLSAgICAgICAgICAgICAgICBtYXhSYW5nZSA9IGRlcml2ZWRNb2RlbC5nZXRNYXhPY2N1cnMoKS5tdWx0aXBseShtYXhPY2N1cnNUb3RhbC5hZGQobWF4T2NjdXJzSW5Hcm91cCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1heFJhbmdlOwotCi0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgQmlnSW50ZWdlciBnZXRFZmZlY3RpdmVNaW5SYW5nZUNob2ljZShTY2hlbWFQYXJ0aWNsZSBkZXJpdmVkTW9kZWwpIHsKLSAgICAgICAgLy8gU2NoZW1hIENvbXBvbmVudCBDb25zdHJhaW50OiBFZmZlY3RpdmUgVG90YWwgUmFuZ2UgKGNob2ljZSkKLSAgICAgICAgLy8gVGhlIGVmZmVjdGl2ZSB0b3RhbCByYW5nZSBvZiBhIHBhcnRpY2xlIHdob3NlIHt0ZXJtfSBpcyBhIGdyb3VwIHdob3NlIHtjb21wb3NpdG9yfSBpcyBjaG9pY2UgaXMgYSBwYWlyIG9mCi0gICAgICAgIC8vIG1pbmltdW0gYW5kIG1heGltdW0sIGFzIGZvbGxvd3M6Ci0gICAgICAgIC8vIE1JTklNVU0KLSAgICAgICAgLy8gVGhlIHByb2R1Y3Qgb2YgdGhlIHBhcnRpY2xlJ3Mge21pbiBvY2N1cnN9Ci0gICAgICAgIC8vIGFuZCB0aGUgKm1pbmltdW0qIG9mIHRoZSB7bWluIG9jY3Vyc30gb2YgZXZlcnkgd2lsZGNhcmQgb3IgZWxlbWVudAotICAgICAgICAvLyBkZWNsYXJhdGlvbiBwYXJ0aWNsZSBpbiB0aGUgZ3JvdXAncyB7cGFydGljbGVzfSBhbmQgdGhlIG1pbmltdW0gcGFydCBvZiB0aGUgZWZmZWN0aXZlIHRvdGFsIHJhbmdlIG9mIGVhY2ggb2YKLSAgICAgICAgLy8gdGhlIGdyb3VwIHBhcnRpY2xlcyBpbiB0aGUgZ3JvdXAncyB7cGFydGljbGVzfSAob3IgMCBpZiB0aGVyZSBhcmUgbm8ge3BhcnRpY2xlc30pLgotICAgICAgICBTY2hlbWFQYXJ0aWNsZVtdIHBhcnRpY2xlQ2hpbGRyZW4gPSBkZXJpdmVkTW9kZWwuZ2V0UGFydGljbGVDaGlsZHJlbigpOwotICAgICAgICBpZiAocGFydGljbGVDaGlsZHJlbi5sZW5ndGggPT0gMCkKLSAgICAgICAgICAgIHJldHVybiBCaWdJbnRlZ2VyLlpFUk87Ci0gICAgICAgIEJpZ0ludGVnZXIgbWluUmFuZ2UgPSBudWxsOwotICAgICAgICAvLyBnZXQgdGhlIG1pbmltdW0gb2YgZXZlcnkgd2lsZGNhcmQgb3IgZWxlbWVudAotICAgICAgICAvLyB0b3RhbCB1cCB0aGUgZWZmZWN0aXZlIHRvdGFsIHJhbmdlIGZvciBlYWNoIGdyb3VwCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFydGljbGVDaGlsZHJlbi5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgU2NoZW1hUGFydGljbGUgcGFydGljbGUgPSBwYXJ0aWNsZUNoaWxkcmVuW2ldOwotICAgICAgICAgICAgc3dpdGNoIChwYXJ0aWNsZS5nZXRQYXJ0aWNsZVR5cGUoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuV0lMRENBUkQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5FTEVNRU5UOgotICAgICAgICAgICAgICAgICAgICBpZiAobWluUmFuZ2UgPT0gbnVsbCB8fCBtaW5SYW5nZS5jb21wYXJlVG8ocGFydGljbGUuZ2V0TWluT2NjdXJzKCkpID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWluUmFuZ2UgPSBwYXJ0aWNsZS5nZXRNaW5PY2N1cnMoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLkFMTDoKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLlNFUVVFTkNFOgotICAgICAgICAgICAgICAgICAgICBCaWdJbnRlZ2VyIG1ycyA9IGdldEVmZmVjdGl2ZU1pblJhbmdlQWxsU2VxKGRlcml2ZWRNb2RlbCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtaW5SYW5nZSA9PSBudWxsIHx8IG1pblJhbmdlLmNvbXBhcmVUbyhtcnMpID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWluUmFuZ2UgPSBtcnM7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5DSE9JQ0U6Ci0gICAgICAgICAgICAgICAgICAgIEJpZ0ludGVnZXIgbXJjID0gZ2V0RWZmZWN0aXZlTWluUmFuZ2VDaG9pY2UoZGVyaXZlZE1vZGVsKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1pblJhbmdlID09IG51bGwgfHwgbWluUmFuZ2UuY29tcGFyZVRvKG1yYykgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtaW5SYW5nZSA9IG1yYzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAobWluUmFuZ2UgPT0gbnVsbCkKLSAgICAgICAgICAgIG1pblJhbmdlID0gQmlnSW50ZWdlci5aRVJPOwotCi0gICAgICAgIC8vIGNhbGN1bGF0ZSB0aGUgdG90YWwKLSAgICAgICAgbWluUmFuZ2UgPSBkZXJpdmVkTW9kZWwuZ2V0TWluT2NjdXJzKCkubXVsdGlwbHkobWluUmFuZ2UpOwotICAgICAgICByZXR1cm4gbWluUmFuZ2U7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgQmlnSW50ZWdlciBnZXRFZmZlY3RpdmVNaW5SYW5nZUFsbFNlcShTY2hlbWFQYXJ0aWNsZSBkZXJpdmVkTW9kZWwpIHsKLSAgICAgICAgQmlnSW50ZWdlciBtaW5SYW5nZSA9IEJpZ0ludGVnZXIuWkVSTzsKLSAgICAgICAgLy8gU2NoZW1hIENvbXBvbmVudCBDb25zdHJhaW50OiBFZmZlY3RpdmUgVG90YWwgUmFuZ2UgKGFsbCBhbmQgc2VxdWVuY2UpCi0gICAgICAgIC8vIFRoZSBlZmZlY3RpdmUgdG90YWwgcmFuZ2Ugb2YgYSBwYXJ0aWNsZSB3aG9zZSB7dGVybX0gaXMgYSBncm91cCB3aG9zZSB7Y29tcG9zaXRvcn0gaXMgYWxsIG9yIHNlcXVlbmNlIGlzIGEKLSAgICAgICAgLy8gcGFpciBvZiBtaW5pbXVtIGFuZCBtYXhpbXVtLCBhcyBmb2xsb3dzOgotICAgICAgICAvLyBNSU5JTVVNCi0gICAgICAgIC8vIFRoZSBwcm9kdWN0IG9mIHRoZSBwYXJ0aWNsZSdzIHttaW4gb2NjdXJzfQotICAgICAgICAvLyBhbmQgdGhlICpzdW0qIG9mIHRoZSB7bWluIG9jY3Vyc30gb2YgZXZlcnkgd2lsZGNhcmQgb3IgZWxlbWVudAotICAgICAgICAvLyBkZWNsYXJhdGlvbiBwYXJ0aWNsZSBpbiB0aGUgZ3JvdXAncyB7cGFydGljbGVzfQotICAgICAgICAvLyBhbmQgdGhlIG1pbmltdW0gcGFydCBvZiB0aGUgZWZmZWN0aXZlIHRvdGFsIHJhbmdlIG9mIGVhY2gKLSAgICAgICAgLy8gb2YgdGhlIGdyb3VwIHBhcnRpY2xlcyBpbiB0aGUgZ3JvdXAncyB7cGFydGljbGVzfSAob3IgMCBpZiB0aGVyZSBhcmUgbm8ge3BhcnRpY2xlc30pLgotICAgICAgICBTY2hlbWFQYXJ0aWNsZVtdIHBhcnRpY2xlQ2hpbGRyZW4gPSBkZXJpdmVkTW9kZWwuZ2V0UGFydGljbGVDaGlsZHJlbigpOwotICAgICAgICBCaWdJbnRlZ2VyIHBhcnRpY2xlVG90YWxNaW5PY2N1cnMgPSBCaWdJbnRlZ2VyLlpFUk87Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFydGljbGVDaGlsZHJlbi5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgU2NoZW1hUGFydGljbGUgcGFydGljbGUgPSBwYXJ0aWNsZUNoaWxkcmVuW2ldOwotICAgICAgICAgICAgc3dpdGNoIChwYXJ0aWNsZS5nZXRQYXJ0aWNsZVR5cGUoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuV0lMRENBUkQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5FTEVNRU5UOgotICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZVRvdGFsTWluT2NjdXJzID0gcGFydGljbGVUb3RhbE1pbk9jY3Vycy5hZGQocGFydGljbGUuZ2V0TWluT2NjdXJzKCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLkFMTDoKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLlNFUVVFTkNFOgotICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZVRvdGFsTWluT2NjdXJzID0gcGFydGljbGVUb3RhbE1pbk9jY3Vycy5hZGQoZ2V0RWZmZWN0aXZlTWluUmFuZ2VBbGxTZXEoZGVyaXZlZE1vZGVsKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQ0hPSUNFOgotICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZVRvdGFsTWluT2NjdXJzID0gcGFydGljbGVUb3RhbE1pbk9jY3Vycy5hZGQoZ2V0RWZmZWN0aXZlTWluUmFuZ2VDaG9pY2UoZGVyaXZlZE1vZGVsKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbWluUmFuZ2UgPSBkZXJpdmVkTW9kZWwuZ2V0TWluT2NjdXJzKCkubXVsdGlwbHkocGFydGljbGVUb3RhbE1pbk9jY3Vycyk7Ci0KLSAgICAgICAgcmV0dXJuIG1pblJhbmdlOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gbnNTdWJzZXQoU2NoZW1hUGFydGljbGUgYmFzZU1vZGVsLCBTY2hlbWFQYXJ0aWNsZSBkZXJpdmVkTW9kZWwsIENvbGxlY3Rpb24gZXJyb3JzLCBYbWxPYmplY3QgY29udGV4dCkgewotICAgICAgICAvLyBuc1N1YnNldCBpcyBjYWxsZWQgd2hlbiBiYXNlOiBBTlksIGRlcml2ZWQ6IEFOWQotICAgICAgICBhc3NlcnQgYmFzZU1vZGVsLmdldFBhcnRpY2xlVHlwZSgpID09IFNjaGVtYVBhcnRpY2xlLldJTERDQVJEOwotICAgICAgICBhc3NlcnQgZGVyaXZlZE1vZGVsLmdldFBhcnRpY2xlVHlwZSgpID09IFNjaGVtYVBhcnRpY2xlLldJTERDQVJEOwotICAgICAgICBib29sZWFuIG5zU3Vic2V0ID0gZmFsc2U7Ci0gICAgICAgIC8vIEZvciBhIHdpbGRjYXJkIHBhcnRpY2xlIHRvIGJlIGEgt3ZhbGlkIHJlc3RyaWN0aW9utyBvZiBhbm90aGVyIHdpbGRjYXJkIHBhcnRpY2xlIGFsbCBvZiB0aGUgZm9sbG93aW5nIG11c3QgYmUgdHJ1ZToKLSAgICAgICAgLy8gMSBSJ3Mgb2NjdXJyZW5jZSByYW5nZSBtdXN0IGJlIGEgdmFsaWQgcmVzdHJpY3Rpb24gb2YgQidzIG9jY3VycmVuY2UgcmFuZ2UgYXMgZGVmaW5lZCBieSBPY2N1cnJlbmNlIFJhbmdlIE9LICinMy45LjYpLgotICAgICAgICBpZiAob2NjdXJyZW5jZVJhbmdlT0soYmFzZU1vZGVsLCBkZXJpdmVkTW9kZWwsIGVycm9ycywgY29udGV4dCkpIHsKLSAgICAgICAgICAgIC8vIDIgUidzIHtuYW1lc3BhY2UgY29uc3RyYWludH0gbXVzdCBiZSBhbiBpbnRlbnNpb25hbCBzdWJzZXQgb2YgQidzIHtuYW1lc3BhY2UgY29uc3RyYWludH0gYXMgZGVmaW5lZAotICAgICAgICAgICAgLy8gYnkgV2lsZGNhcmQgU3Vic2V0ICinMy4xMC42KS4KLSAgICAgICAgICAgIGlmIChiYXNlTW9kZWwuZ2V0V2lsZGNhcmRTZXQoKS5pbnZlcnNlKCkuaXNEaXNqb2ludChkZXJpdmVkTW9kZWwuZ2V0V2lsZGNhcmRTZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBuc1N1YnNldCA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG5zU3Vic2V0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZXJyb3JzLmFkZChYbWxFcnJvci5mb3JPYmplY3QoZm9ybWF0TlNJc05vdFN1YnNldEVycm9yKGJhc2VNb2RlbCwgZGVyaXZlZE1vZGVsKSwgY29udGV4dCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbnNTdWJzZXQgPSBmYWxzZTsKLSAgICAgICAgICAgIGVycm9ycy5hZGQoWG1sRXJyb3IuZm9yT2JqZWN0KGZvcm1hdE5TSXNOb3RTdWJzZXRFcnJvcihiYXNlTW9kZWwsIGRlcml2ZWRNb2RlbCksIGNvbnRleHQpKTsKLSAgICAgICAgfQotCi0KLSAgICAgICAgcmV0dXJuIG5zU3Vic2V0OwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gbnNDb21wYXQoU2NoZW1hUGFydGljbGUgYmFzZU1vZGVsLCBTY2hlbWFMb2NhbEVsZW1lbnQgZGVyaXZlZEVsZW1lbnQsIENvbGxlY3Rpb24gZXJyb3JzLCBYbWxPYmplY3QgY29udGV4dCkgewotICAgICAgICAvLyBuc0NvbXBhdCBpcyBjYWxsZWQgd2hlbiBiYXNlOiBBTlksIGRlcml2ZWQ6IEVMRU1FTlQKLSAgICAgICAgYXNzZXJ0IGJhc2VNb2RlbC5nZXRQYXJ0aWNsZVR5cGUoKSA9PSBTY2hlbWFQYXJ0aWNsZS5XSUxEQ0FSRDsKLSAgICAgICAgYm9vbGVhbiBuc0NvbXBhdCA9IGZhbHNlOwotICAgICAgICAvLyBGb3IgYW4gZWxlbWVudCBkZWNsYXJhdGlvbiBwYXJ0aWNsZSB0byBiZSBhILd2YWxpZCByZXN0cmljdGlvbrcgb2YgYSB3aWxkY2FyZCBwYXJ0aWNsZSBhbGwgb2YgdGhlIGZvbGxvd2luZyBtdXN0IGJlIHRydWU6Ci0gICAgICAgIC8vIDEgVGhlIGVsZW1lbnQgZGVjbGFyYXRpb24ncyB7dGFyZ2V0IG5hbWVzcGFjZX0gaXMgt3ZhbGlktyB3aXRoIHJlc3BlY3QgdG8gdGhlIHdpbGRjYXJkJ3Mge25hbWVzcGFjZSBjb25zdHJhaW50fQotICAgICAgICAvLyBhcyBkZWZpbmVkIGJ5IFdpbGRjYXJkIGFsbG93cyBOYW1lc3BhY2UgTmFtZSAopzMuMTAuNCkuCi0gICAgICAgIGlmIChiYXNlTW9kZWwuZ2V0V2lsZGNhcmRTZXQoKS5jb250YWlucyhkZXJpdmVkRWxlbWVudC5nZXROYW1lKCkpKSB7Ci0gICAgICAgICAgICAvLyAyIFIncyBvY2N1cnJlbmNlIHJhbmdlIGlzIGEgdmFsaWQgcmVzdHJpY3Rpb24gb2YgQidzIG9jY3VycmVuY2UgcmFuZ2UgYXMgZGVmaW5lZCBieSBPY2N1cnJlbmNlIFJhbmdlIE9LICinMy45LjYpLgotICAgICAgICAgICAgaWYgKG9jY3VycmVuY2VSYW5nZU9LKGJhc2VNb2RlbCwgKFNjaGVtYVBhcnRpY2xlKSBkZXJpdmVkRWxlbWVudCwgZXJyb3JzLCBjb250ZXh0KSkgewotICAgICAgICAgICAgICAgIG5zQ29tcGF0ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZXJyb3JzLmFkZChYbWxFcnJvci5mb3JPYmplY3QoZm9ybWF0T2NjdXJlbmNlUmFuZ2VNaW5FcnJvcihiYXNlTW9kZWwsIChTY2hlbWFQYXJ0aWNsZSkgZGVyaXZlZEVsZW1lbnQpLCBjb250ZXh0KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBuc0NvbXBhdCA9IGZhbHNlOwotICAgICAgICAgICAgZXJyb3JzLmFkZChYbWxFcnJvci5mb3JPYmplY3QoZm9ybWF0TlNJc05vdFN1YnNldEVycm9yKGJhc2VNb2RlbCwgKFNjaGVtYVBhcnRpY2xlKSBkZXJpdmVkRWxlbWVudCksIGNvbnRleHQpKTsKLSAgICAgICAgfQotCi0KLSAgICAgICAgcmV0dXJuIG5zQ29tcGF0OwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBmb3JtYXROU0lzTm90U3Vic2V0RXJyb3IoU2NoZW1hUGFydGljbGUgYmFzZVBhcnRpY2xlLCBTY2hlbWFQYXJ0aWNsZSBkZXJpdmVkUGFydGljbGUpIHsKLSAgICAgICAgcmV0dXJuICJJbnZhbGlkIFJlc3RyaWN0aW9uLiBUaGUgbmFtZXNwYWNlKHMpIG9mIHRoZSBkZXJpdmVkIGZpZWxkOiAiICsgcHJpbnRQYXJ0aWNsZShkZXJpdmVkUGFydGljbGUpCi0gICAgICAgICAgICAgICAgKyAiIGFyZSBub3QgYSBzdWJzZXQgb2YgdGhlIG5hbWVzcGFjZShzKSBvZiB0aGUgYmFzZSBmaWVsZDogIiArIHByaW50UGFydGljbGUoYmFzZVBhcnRpY2xlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm9ybWF0SW52YWxpZENvbWJpbmF0aW9uRXJyb3IoU2NoZW1hUGFydGljbGUgYmFzZU1vZGVsLCBTY2hlbWFQYXJ0aWNsZSBkZXJpdmVkTW9kZWwpIHsKLSAgICAgICAgcmV0dXJuICJJbnZhbGlkIFJlc3RyaWN0aW9uLiAgVGhlIGRlcml2ZWQgY29udGVudCBtb2RlbCAiCi0gICAgICAgICAgICAgICAgKyBwcmludFBhcnRpY2xlKGRlcml2ZWRNb2RlbCkKLSAgICAgICAgICAgICAgICArICIgY2Fubm90IHJlc3RyaWN0IGJhc2UgY29udGVudCBtb2RlbCAiCi0gICAgICAgICAgICAgICAgKyBwcmludFBhcnRpY2xlKGJhc2VNb2RlbCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBuYW1lQW5kVHlwZU9LKFNjaGVtYUxvY2FsRWxlbWVudCBiYXNlRWxlbWVudCwgU2NoZW1hTG9jYWxFbGVtZW50IGRlcml2ZWRFbGVtZW50LCBDb2xsZWN0aW9uIGVycm9ycywgWG1sT2JqZWN0IGNvbnRleHQpIHsKLSAgICAgICAgLy8gbmFtZUFuZFR5cGVPSyBjYWxsZWQgd2hlbiBiYXNlOiBFTEVNRU5UIGFuZCBkZXJpdmVkOiBFTEVNRU5UCi0gICAgICAgIGJvb2xlYW4gbmFtZUFuZFR5cGVPSyA9IGZhbHNlOwotICAgICAgICAvLyBTY2hlbWEgQ29tcG9uZW50IENvbnN0cmFpbnQ6IFBhcnRpY2xlIFJlc3RyaWN0aW9uIE9LIChFbHQ6RWx0IC0tIE5hbWVBbmRUeXBlT0spCi0gICAgICAgIC8vIDEgVGhlIGRlY2xhcmF0aW9ucycge25hbWV9cyBhbmQge3RhcmdldCBuYW1lc3BhY2V9cyBhcmUgdGhlIHNhbWUuCi0gICAgICAgIGlmICgoKFNjaGVtYVBhcnRpY2xlKWJhc2VFbGVtZW50KS5jYW5TdGFydFdpdGhFbGVtZW50KGRlcml2ZWRFbGVtZW50LmdldE5hbWUoKSkpIHsKLSAgICAgICAgICAgIC8vIDIgRWl0aGVyIEIncyB7bmlsbGFibGV9IGlzIHRydWUgb3IgUidzIHtuaWxsYWJsZX0gaXMgZmFsc2UuCi0gICAgICAgICAgICBpZiAoYmFzZUVsZW1lbnQuaXNOaWxsYWJsZSgpIHx8ICFkZXJpdmVkRWxlbWVudC5pc05pbGxhYmxlKCkpIHsKLSAgICAgICAgICAgICAgICAvLyAzIFIncyBvY2N1cnJlbmNlIHJhbmdlIGlzIGEgdmFsaWQgcmVzdHJpY3Rpb24gb2YgQidzIG9jY3VycmVuY2UgcmFuZ2UgYXMgZGVmaW5lZCBieSBPY2N1cnJlbmNlIFJhbmdlIE9LICinMy45LjYpLgotICAgICAgICAgICAgICAgIGlmIChvY2N1cnJlbmNlUmFuZ2VPSygoU2NoZW1hUGFydGljbGUpIGJhc2VFbGVtZW50LCAoU2NoZW1hUGFydGljbGUpIGRlcml2ZWRFbGVtZW50LCBlcnJvcnMsIGNvbnRleHQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIDQgZWl0aGVyIEIncyBkZWNsYXJhdGlvbidzIHt2YWx1ZSBjb25zdHJhaW50fSBpcyBhYnNlbnQsIG9yIGlzIG5vdCBmaXhlZCwKLSAgICAgICAgICAgICAgICAgICAgLy8gb3IgUidzIGRlY2xhcmF0aW9uJ3Mge3ZhbHVlIGNvbnN0cmFpbnR9IGlzIGZpeGVkIHdpdGggdGhlIHNhbWUgdmFsdWUuCi0gICAgICAgICAgICAgICAgICAgIG5hbWVBbmRUeXBlT0sgPSBjaGVja0ZpeGVkKGJhc2VFbGVtZW50LCBkZXJpdmVkRWxlbWVudCwgZXJyb3JzLCBjb250ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWVBbmRUeXBlT0spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIDUgUidzIGRlY2xhcmF0aW9uJ3Mge2lkZW50aXR5LWNvbnN0cmFpbnQgZGVmaW5pdGlvbnN9IGlzIGEgc3Vic2V0IG9mIEIncyBkZWNsYXJhdGlvbidzIHtpZGVudGl0eS1jb25zdHJhaW50IGRlZmluaXRpb25zfSwgaWYgYW55LgotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZUFuZFR5cGVPSyA9IGNoZWNrSWRlbnRpdHlDb25zdHJhaW50cyhiYXNlRWxlbWVudCwgZGVyaXZlZEVsZW1lbnQsIGVycm9ycywgY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZUFuZFR5cGVPSykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDcgUidzIHt0eXBlIGRlZmluaXRpb259IGlzIHZhbGlkbHkgZGVyaXZlZCBnaXZlbiB7ZXh0ZW5zaW9uLCBsaXN0LCB1bmlvbn0gZnJvbSBCJ3Mge3R5cGUgZGVmaW5pdGlvbn0gYXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWZpbmVkIGJ5IFR5cGUgRGVyaXZhdGlvbiBPSyAoQ29tcGxleCkgKKczLjQuNikgb3IgVHlwZSBEZXJpdmF0aW9uIE9LIChTaW1wbGUpICinMy4xNC42KSwgYXMgYXBwcm9wcmlhdGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZUFuZFR5cGVPSyA9IHR5cGVEZXJpdmF0aW9uT0soYmFzZUVsZW1lbnQuZ2V0VHlwZSgpLCBkZXJpdmVkRWxlbWVudC5nZXRUeXBlKCksIGVycm9ycywgY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWVBbmRUeXBlT0spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gNiBSJ3MgZGVjbGFyYXRpb24ncyB7ZGlzYWxsb3dlZCBzdWJzdGl0dXRpb25zfSBpcyBhIHN1cGVyc2V0IG9mIEIncyBkZWNsYXJhdGlvbidzIHtkaXNhbGxvd2VkIHN1YnN0aXR1dGlvbnN9LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lQW5kVHlwZU9LID0gYmxvY2tTZXRPSyhiYXNlRWxlbWVudCwgZGVyaXZlZEVsZW1lbnQsIGVycm9ycywgY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuYW1lQW5kVHlwZU9LOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGJsb2NrU2V0T0soU2NoZW1hTG9jYWxFbGVtZW50IGJhc2VFbGVtZW50LCBTY2hlbWFMb2NhbEVsZW1lbnQgZGVyaXZlZEVsZW1lbnQsIENvbGxlY3Rpb24gZXJyb3JzLCBYbWxPYmplY3QgY29udGV4dCkKLSAgICB7Ci0gICAgICAgIGlmIChiYXNlRWxlbWVudC5ibG9ja1Jlc3RyaWN0aW9uKCkgJiYgIWRlcml2ZWRFbGVtZW50LmJsb2NrUmVzdHJpY3Rpb24oKSkKLSAgICAgICAgewotICAgICAgICAgICAgZXJyb3JzLmFkZChYbWxFcnJvci5mb3JPYmplY3QoIlJlc3RyaWN0aW9uIEludmFsaWQuICBEZXJpdmVkICIgKyBwcmludFBhcnRpY2xlKChTY2hlbWFQYXJ0aWNsZSlkZXJpdmVkRWxlbWVudCkgKyAiIGRvZXMgbm90IGJsb2NrIHJlc3RyaWN0aW9uIGFzIGRvZXMgdGhlIGJhc2UgIiArIHByaW50UGFydGljbGUoKFNjaGVtYVBhcnRpY2xlKWJhc2VFbGVtZW50KSwgY29udGV4dCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChiYXNlRWxlbWVudC5ibG9ja0V4dGVuc2lvbigpICYmICFkZXJpdmVkRWxlbWVudC5ibG9ja0V4dGVuc2lvbigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBlcnJvcnMuYWRkKFhtbEVycm9yLmZvck9iamVjdCgiUmVzdHJpY3Rpb24gSW52YWxpZC4gIERlcml2ZWQgIiArIHByaW50UGFydGljbGUoKFNjaGVtYVBhcnRpY2xlKWRlcml2ZWRFbGVtZW50KSArICIgZG9lcyBub3QgYmxvY2sgZXh0ZW5zaW9uIGFzIGRvZXMgdGhlIGJhc2UgIiArIHByaW50UGFydGljbGUoKFNjaGVtYVBhcnRpY2xlKWJhc2VFbGVtZW50KSwgY29udGV4dCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChiYXNlRWxlbWVudC5ibG9ja1N1YnN0aXR1dGlvbigpICYmICFkZXJpdmVkRWxlbWVudC5ibG9ja1N1YnN0aXR1dGlvbigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBlcnJvcnMuYWRkKFhtbEVycm9yLmZvck9iamVjdCgiUmVzdHJpY3Rpb24gSW52YWxpZC4gIERlcml2ZWQgIiArIHByaW50UGFydGljbGUoKFNjaGVtYVBhcnRpY2xlKWRlcml2ZWRFbGVtZW50KSArICIgZG9lcyBub3QgYmxvY2sgc3Vic3RpdHV0aW9uIGFzIGRvZXMgdGhlIGJhc2UgIiArIHByaW50UGFydGljbGUoKFNjaGVtYVBhcnRpY2xlKWJhc2VFbGVtZW50KSwgY29udGV4dCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOyAgICAKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHR5cGVEZXJpdmF0aW9uT0soU2NoZW1hVHlwZSBiYXNlVHlwZSwgU2NoZW1hVHlwZSBkZXJpdmVkVHlwZSwgQ29sbGVjdGlvbiBlcnJvcnMsIFhtbE9iamVjdCBjb250ZXh0KSB7Ci0gICAgICAgIGJvb2xlYW4gdHlwZURlcml2YXRpb25PSyA9IGZhbHNlOwotICAgICAgICAvLyAxIElmIEIgYW5kIEQgYXJlIG5vdCB0aGUgc2FtZSB0eXBlIGRlZmluaXRpb24sIHRoZW4gdGhlIHtkZXJpdmF0aW9uIG1ldGhvZH0gb2YgRCBtdXN0IG5vdCBiZSBpbiB0aGUgc3Vic2V0LgotICAgICAgICAvLyAyIE9uZSBvZiB0aGUgZm9sbG93aW5nIG11c3QgYmUgdHJ1ZToKLSAgICAgICAgLy8gMi4xIEIgYW5kIEQgbXVzdCBiZSB0aGUgc2FtZSB0eXBlIGRlZmluaXRpb24uCi0gICAgICAgIC8vIDIuMiBCIG11c3QgYmUgRCdzIHtiYXNlIHR5cGUgZGVmaW5pdGlvbn0uCi0gICAgICAgIC8vIDIuMyBBbGwgb2YgdGhlIGZvbGxvd2luZyBtdXN0IGJlIHRydWU6Ci0gICAgICAgIC8vIDIuMy4xIEQncyB7YmFzZSB0eXBlIGRlZmluaXRpb259IG11c3Qgbm90IGJlIHRoZSC3dXItdHlwZSBkZWZpbml0aW9uty4KLSAgICAgICAgLy8gMi4zLjIgVGhlIGFwcHJvcHJpYXRlIGNhc2UgYW1vbmcgdGhlIGZvbGxvd2luZyBtdXN0IGJlIHRydWU6Ci0gICAgICAgIC8vIDIuMy4yLjEgSWYgRCdzIHtiYXNlIHR5cGUgZGVmaW5pdGlvbn0gaXMgY29tcGxleCwgdGhlbiBpdCBtdXN0IGJlIHZhbGlkbHkgZGVyaXZlZCBmcm9tIEIgZ2l2ZW4gdGhlIHN1YnNldCBhcyBkZWZpbmVkIGJ5IHRoaXMgY29uc3RyYWludC4KLSAgICAgICAgLy8gMi4zLjIuMiBJZiBEJ3Mge2Jhc2UgdHlwZSBkZWZpbml0aW9ufSBpcyBzaW1wbGUsIHRoZW4gaXQgbXVzdCBiZSB2YWxpZGx5IGRlcml2ZWQgZnJvbSBCIGdpdmVuIHRoZSBzdWJzZXQgYXMgZGVmaW5lZCBpbiBUeXBlIERlcml2YXRpb24gT0sgKFNpbXBsZSkgKKczLjE0LjYpLgotICAgICAgICAvLyAgIFRoaXMgbGluZSB3aWxsIGNoZWNrIGlmIGRlcml2ZWRUeXBlIGlzIGEgc3ViVHlwZSBvZiBiYXNlVHlwZSAoc2hvdWxkIGhhbmRsZSBhbGwgb2YgdGhlIDIueHggY2hlY2tzIGFib3ZlKQotICAgICAgICBpZiAoYmFzZVR5cGUuaXNBc3NpZ25hYmxlRnJvbShkZXJpdmVkVHlwZSkpIHsKLSAgICAgICAgICAgIC8vIE9rIGRlcml2ZWQgdHlwZSBpcyBzdWJ0eXBlIGJ1dCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbCBvZiB0aGUgZGVyaXZhdGlvbnMgYmV0d2VlbiB0aGUgdHdvIHR5cGVzIGFyZSBieQotICAgICAgICAgICAgLy8gUmVzdHJpY3Rpb24uCi0gICAgICAgICAgICB0eXBlRGVyaXZhdGlvbk9LID0gY2hlY2tBbGxEZXJpdmF0aW9uc0ZvclJlc3RyaWN0aW9uKGJhc2VUeXBlLCBkZXJpdmVkVHlwZSwgZXJyb3JzLCBjb250ZXh0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIGRlcml2ZWQgdHlwZSBpcyBub3QgYSBzdWItdHlwZSBvZiBiYXNlIHR5cGUKLSAgICAgICAgICAgIHR5cGVEZXJpdmF0aW9uT0sgPSBmYWxzZTsKLSAgICAgICAgICAgIGVycm9ycy5hZGQoWG1sRXJyb3IuZm9yT2JqZWN0KGZvcm1hdERlcml2ZWRUeXBlTm90U3ViVHlwZUVycm9yKGJhc2VUeXBlLCBkZXJpdmVkVHlwZSksIGNvbnRleHQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0eXBlRGVyaXZhdGlvbk9LOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBmb3JtYXREZXJpdmVkVHlwZU5vdFN1YlR5cGVFcnJvcihTY2hlbWFUeXBlIGJhc2VUeXBlLCBTY2hlbWFUeXBlIGRlcml2ZWRUeXBlKSB7Ci0gICAgICAgIHJldHVybiAiUmVzdHJpY3Rpb24gSW52YWxpZC4gIERlcml2ZWQgVHlwZTogIiArIHByaW50VHlwZShkZXJpdmVkVHlwZSkgKyAiIGlzIG5vdCBhIHN1Yi10eXBlIG9mIEJhc2UgVHlwZTogIiArIHByaW50VHlwZShiYXNlVHlwZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBjaGVja0FsbERlcml2YXRpb25zRm9yUmVzdHJpY3Rpb24oU2NoZW1hVHlwZSBiYXNlVHlwZSwgU2NoZW1hVHlwZSBkZXJpdmVkVHlwZSwgQ29sbGVjdGlvbiBlcnJvcnMsIFhtbE9iamVjdCBjb250ZXh0KSB7Ci0KLSAgICAgICAgYm9vbGVhbiBhbGxEZXJpdmF0aW9uc0FyZVJlc3RyaWN0aW9ucyA9IHRydWU7Ci0gICAgICAgIFNjaGVtYVR5cGUgY3VycmVudFR5cGUgPSBkZXJpdmVkVHlwZTsKLSAgICAgICAgLy8gcnVuIHVwIHRoZSB0eXBlcyBoaWVyYXJjaHkgZnJvbSBkZXJpdmVkIFR5cGUgdG8gYmFzZSBUeXBlIGFuZCBtYWtlIHN1cmUgdGhhdCBhbGwgYXJlIGRlcml2ZWQgYnkKLSAgICAgICAgLy8gICByZXN0cmljdGlvbi4gIElmIGFueSBhcmUgbm90IHRoZW4gdGhpcyBpcyBub3QgYSB2YWxpZCByZXN0cmljdGlvbi4KLSAgICAgICAgd2hpbGUgKCFiYXNlVHlwZS5lcXVhbHMoY3VycmVudFR5cGUpKSB7Ci0gICAgICAgICAgICBpZiAoY3VycmVudFR5cGUuZ2V0RGVyaXZhdGlvblR5cGUoKSA9PSBTY2hlbWFUeXBlLkRUX1JFU1RSSUNUSU9OKSB7Ci0gICAgICAgICAgICAgICAgY3VycmVudFR5cGUgPSBjdXJyZW50VHlwZS5nZXRCYXNlVHlwZSgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBhbGxEZXJpdmF0aW9uc0FyZVJlc3RyaWN0aW9ucyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGVycm9ycy5hZGQoWG1sRXJyb3IuZm9yT2JqZWN0KGZvcm1hdEFsbERlcml2YXRpb25zQXJlTm90UmVzdHJpY3Rpb25zRXJyb3IoYmFzZVR5cGUsIGRlcml2ZWRUeXBlLCBjdXJyZW50VHlwZSksIGNvbnRleHQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYWxsRGVyaXZhdGlvbnNBcmVSZXN0cmljdGlvbnM7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGZvcm1hdEFsbERlcml2YXRpb25zQXJlTm90UmVzdHJpY3Rpb25zRXJyb3IoU2NoZW1hVHlwZSBiYXNlVHlwZSwgU2NoZW1hVHlwZSBkZXJpdmVkVHlwZSwgU2NoZW1hVHlwZSBjdXJyZW50VHlwZSkgewotICAgICAgICByZXR1cm4gIkludmFsaWQgUmVzdHJpY3Rpb24uICBUaGUgdHlwZSAiICsgcHJpbnRUeXBlKGRlcml2ZWRUeXBlKSArICIgZGVyaXZlZCBmcm9tIGJhc2UgdHlwZSAiCi0gICAgICAgICAgICAgICAgKyBwcmludFR5cGUoYmFzZVR5cGUpICsgIiBoYXMgYW4gaW50ZXJtZWRpYXJ5IHR5cGUgIiArIHByaW50VHlwZShjdXJyZW50VHlwZSkKLSAgICAgICAgICAgICAgICArICJ0aGF0IGlzIG5vdCBkZXJpdmVkIGJ5IHJlc3RyaWN0aW9uLiI7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBjaGVja0lkZW50aXR5Q29uc3RyYWludHMoU2NoZW1hTG9jYWxFbGVtZW50IGJhc2VFbGVtZW50LCBTY2hlbWFMb2NhbEVsZW1lbnQgZGVyaXZlZEVsZW1lbnQsIENvbGxlY3Rpb24gZXJyb3JzLCBYbWxPYmplY3QgY29udGV4dCkgewotICAgICAgICAvLyA1IFIncyBkZWNsYXJhdGlvbidzIHtpZGVudGl0eS1jb25zdHJhaW50IGRlZmluaXRpb25zfSBpcyBhIHN1YnNldCBvZiBCJ3MgZGVjbGFyYXRpb24ncyB7aWRlbnRpdHktY29uc3RyYWludCBkZWZpbml0aW9uc30sIGlmIGFueS4KLSAgICAgICAgYm9vbGVhbiBpZGVudGl0eUNvbnN0cmFpbnRzT0sgPSB0cnVlOwotCi0gICAgICAgIFNjaGVtYUlkZW50aXR5Q29uc3RyYWludFtdIGJhc2VDb25zdHJhaW50cyA9IGJhc2VFbGVtZW50LmdldElkZW50aXR5Q29uc3RyYWludHMoKTsKLSAgICAgICAgU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50W10gZGVyaXZlZENvbnN0cmFpbnRzID0gZGVyaXZlZEVsZW1lbnQuZ2V0SWRlbnRpdHlDb25zdHJhaW50cygpOwotICAgICAgICAvLyBjeWNsZSB0aHJ1IGRlcml2ZWQncyBpZGVudGl0eSBjb25zdHJhaW50cyBhbmQgY2hlY2sgZWFjaCB0byBhc3N1cmUgdGhleSBpbiB0aGUgYXJyYXkgb2YgYmFzZSBjb25zdHJhaW50cwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlcml2ZWRDb25zdHJhaW50cy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50IGRlcml2ZWRDb25zdHJhaW50ID0gZGVyaXZlZENvbnN0cmFpbnRzW2ldOwotICAgICAgICAgICAgaWYgKGNoZWNrRm9ySWRlbnRpdHlDb25zdHJhaW50RXhpc3RlbmNlKGJhc2VDb25zdHJhaW50cywgZGVyaXZlZENvbnN0cmFpbnQpKSB7Ci0gICAgICAgICAgICAgICAgaWRlbnRpdHlDb25zdHJhaW50c09LID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZXJyb3JzLmFkZChYbWxFcnJvci5mb3JPYmplY3QoZm9ybWF0SWRlbnRpdHlDb25zdHJhaW50c05vdFN1YnNldEVycm9yKGJhc2VFbGVtZW50LCBkZXJpdmVkRWxlbWVudCksIGNvbnRleHQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gaWRlbnRpdHlDb25zdHJhaW50c09LOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBmb3JtYXRJZGVudGl0eUNvbnN0cmFpbnRzTm90U3Vic2V0RXJyb3IoU2NoZW1hTG9jYWxFbGVtZW50IGJhc2VFbGVtZW50LCBTY2hlbWFMb2NhbEVsZW1lbnQgZGVyaXZlZEVsZW1lbnQpIHsKLSAgICAgICAgcmV0dXJuICJSZXN0cmljdGlvbiBJbnZhbGlkLiAgVGhlIGlkZW50aXR5IGNvbnN0cmFpbnRzIGZvciAiICsgcHJpbnRQYXJ0aWNsZSgoU2NoZW1hUGFydGljbGUpZGVyaXZlZEVsZW1lbnQpCi0gICAgICAgICAgICAgICAgKyAiIGFyZSBub3QgYSBzdWJzZXQgb2YgdGhlIGlkZW50aXR5IGNvbnN0cmFpbnRzIGZvciAiICsgcHJpbnRQYXJ0aWNsZSgoU2NoZW1hUGFydGljbGUpYmFzZUVsZW1lbnQpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gY2hlY2tGb3JJZGVudGl0eUNvbnN0cmFpbnRFeGlzdGVuY2UoU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50W10gYmFzZUNvbnN0cmFpbnRzLCBTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQgZGVyaXZlZENvbnN0cmFpbnQpIHsKLSAgICAgICAgLy8gc3BpbiB0aHJ1IHRoZSBiYXNlIGlkZW50aXR5IGNvbnN0cmFpbnRzIGNoZWNrIHRvIHNlZSBpZiBkZXJpdmVkIGNvbnN0cmFpbnQgZXhpc3RzCi0gICAgICAgIGJvb2xlYW4gaWRlbnRpdHlDb25zdHJhaW50RXhpc3RzID0gZmFsc2U7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmFzZUNvbnN0cmFpbnRzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICBTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQgYmFzZUNvbnN0cmFpbnQgPSBiYXNlQ29uc3RyYWludHNbaV07Ci0gICAgICAgICAgICBpZiAoYmFzZUNvbnN0cmFpbnQuZ2V0TmFtZSgpLmVxdWFscyhkZXJpdmVkQ29uc3RyYWludC5nZXROYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgaWRlbnRpdHlDb25zdHJhaW50RXhpc3RzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gaWRlbnRpdHlDb25zdHJhaW50RXhpc3RzOwotICAgIH0KLQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBjaGVja0ZpeGVkKFNjaGVtYUxvY2FsRWxlbWVudCBiYXNlTW9kZWwsIFNjaGVtYUxvY2FsRWxlbWVudCBkZXJpdmVkTW9kZWwsIENvbGxlY3Rpb24gZXJyb3JzLCBYbWxPYmplY3QgY29udGV4dCkgewotICAgICAgICAvLyA0IGVpdGhlciBCJ3MgZGVjbGFyYXRpb24ncyB7dmFsdWUgY29uc3RyYWludH0gaXMgYWJzZW50LCBvciBpcyBub3QgZml4ZWQsCi0gICAgICAgIC8vIG9yIFIncyBkZWNsYXJhdGlvbidzIHt2YWx1ZSBjb25zdHJhaW50fSBpcyBmaXhlZCB3aXRoIHRoZSBzYW1lIHZhbHVlLgotICAgICAgICBib29sZWFuIGNoZWNrRml4ZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGJhc2VNb2RlbC5pc0ZpeGVkKCkpIHsKLSAgICAgICAgICAgIGlmIChiYXNlTW9kZWwuZ2V0RGVmYXVsdFRleHQoKS5lcXVhbHMoZGVyaXZlZE1vZGVsLmdldERlZmF1bHRUZXh0KCkpKSB7Ci0gICAgICAgICAgICAgICAgLy8gIFIncyBkZWNsYXJhdGlvbidzIHt2YWx1ZSBjb25zdHJhaW50fSBpcyBmaXhlZCB3aXRoIHRoZSBzYW1lIHZhbHVlLgotICAgICAgICAgICAgICAgIGNoZWNrRml4ZWQgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgZGVyaXZlZCBlbGVtZW50IGhhcyBhIGZpeGVkIHZhbHVlIHRoYXQgaXMgZGlmZmVyZW50IHRoYW4gdGhlIGJhc2UgZWxlbWVudAotICAgICAgICAgICAgICAgIGVycm9ycy5hZGQoWG1sRXJyb3IuZm9yT2JqZWN0KGZvcm1hdEludmFsaWRGaXhlZEVycm9yKGJhc2VNb2RlbCwgZGVyaXZlZE1vZGVsKSwgY29udGV4dCkpOwotICAgICAgICAgICAgICAgIGNoZWNrRml4ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vICBCJ3MgZGVjbGFyYXRpb24ncyB7dmFsdWUgY29uc3RyYWludH0gaXMgYWJzZW50LCBvciBpcyBub3QgZml4ZWQsCi0gICAgICAgICAgICBjaGVja0ZpeGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gY2hlY2tGaXhlZDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm9ybWF0SW52YWxpZEZpeGVkRXJyb3IoU2NoZW1hTG9jYWxFbGVtZW50IGJhc2VNb2RlbCwgU2NoZW1hTG9jYWxFbGVtZW50IGRlcml2ZWRNb2RlbCkgewotICAgICAgICByZXR1cm4gIlRoZSBEZXJpdmVkIENvbnRlbnQgTW9kZWwgb24gRWxlbWVudDogJyIKLSAgICAgICAgICAgICAgICArIHByaW50UGFydGljbGUoKFNjaGVtYVBhcnRpY2xlKWRlcml2ZWRNb2RlbCkKLSAgICAgICAgICAgICAgICArICInIGhhcyBhIGZpeGVkIHZhbHVlIG9mOiAnIgotICAgICAgICAgICAgICAgICsgZGVyaXZlZE1vZGVsLmdldERlZmF1bHRUZXh0KCkKLSAgICAgICAgICAgICAgICArICInIHdoaWNoIGRvZXMgbm90IG1hdGNoIHRoZSBCYXNlIENvbnRlbnQgTW9kZWw6ICciCi0gICAgICAgICAgICAgICAgKyBwcmludFBhcnRpY2xlKChTY2hlbWFQYXJ0aWNsZSliYXNlTW9kZWwpCi0gICAgICAgICAgICAgICAgKyAiJyB3aGF0IGhhcyBhIGZpeGVkIHZhbHVlIG9mOiAnIgotICAgICAgICAgICAgICAgICsgYmFzZU1vZGVsLmdldERlZmF1bHRUZXh0KCkgKyAiJyI7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBvY2N1cnJlbmNlUmFuZ2VPSyhTY2hlbWFQYXJ0aWNsZSBiYXNlUGFydGljbGUsIFNjaGVtYVBhcnRpY2xlIGRlcml2ZWRQYXJ0aWNsZSwgQ29sbGVjdGlvbiBlcnJvcnMsIFhtbE9iamVjdCBjb250ZXh0KSB7Ci0gICAgICAgIGJvb2xlYW4gb2NjdXJyZW5jZVJhbmdlT0sgPSBmYWxzZTsKLSAgICAgICAgLy8gTm90ZTogaW4gdGhlIGZvbGxvd2luZyBjb21tZW50cyAoZnJvbSB0aGUgc2NoZW1hIHNwZWMpIG90aGVyIGlzIHRoZSBiYXNlTW9kZWwKLSAgICAgICAgLy8gMSBJdHMge21pbiBvY2N1cnN9IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgb3RoZXIncyB7bWluIG9jY3Vyc30uCi0gICAgICAgIGlmIChkZXJpdmVkUGFydGljbGUuZ2V0TWluT2NjdXJzKCkuY29tcGFyZVRvKGJhc2VQYXJ0aWNsZS5nZXRNaW5PY2N1cnMoKSkgPj0gMCkgewotICAgICAgICAgICAgLy8gMiBvbmUgb2YgdGhlIGZvbGxvd2luZyBtdXN0IGJlIHRydWU6Ci0gICAgICAgICAgICAvLyAyLjEgVGhlIG90aGVyJ3Mge21heCBvY2N1cnN9IGlzIHVuYm91bmRlZC4KLSAgICAgICAgICAgIGlmIChiYXNlUGFydGljbGUuZ2V0TWF4T2NjdXJzKCkgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIG9jY3VycmVuY2VSYW5nZU9LID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gMi4yIEJvdGgge21heCBvY2N1cnN9IGFyZSBudW1iZXJzLCBhbmQgdGhlIHBhcnRpY2xlJ3MgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBvdGhlcidzLgotICAgICAgICAgICAgICAgIGlmIChkZXJpdmVkUGFydGljbGUuZ2V0TWF4T2NjdXJzKCkgIT0gbnVsbCAmJiBiYXNlUGFydGljbGUuZ2V0TWF4T2NjdXJzKCkgIT0gbnVsbCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgZGVyaXZlZFBhcnRpY2xlLmdldE1heE9jY3VycygpLmNvbXBhcmVUbyhiYXNlUGFydGljbGUuZ2V0TWF4T2NjdXJzKCkpIDw9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgb2NjdXJyZW5jZVJhbmdlT0sgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG9jY3VycmVuY2VSYW5nZU9LID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiYXNlUGFydGljbGUuZ2V0TmFtZSgpID09IG51bGwgfHwgZGVyaXZlZFBhcnRpY2xlLmdldE5hbWUoKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMuYWRkKFhtbEVycm9yLmZvck9iamVjdChmb3JtYXRPY2N1cmVuY2VSYW5nZU1heEVycm9yR3JvdXAoYmFzZVBhcnRpY2xlLCBkZXJpdmVkUGFydGljbGUpLCBjb250ZXh0KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMuYWRkKFhtbEVycm9yLmZvck9iamVjdChmb3JtYXRPY2N1cmVuY2VSYW5nZU1heEVycm9yKGJhc2VQYXJ0aWNsZSwgZGVyaXZlZFBhcnRpY2xlKSwgY29udGV4dCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgb2NjdXJyZW5jZVJhbmdlT0sgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChiYXNlUGFydGljbGUuZ2V0TmFtZSgpID09IG51bGwgfHwgZGVyaXZlZFBhcnRpY2xlLmdldE5hbWUoKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgZXJyb3JzLmFkZChYbWxFcnJvci5mb3JPYmplY3QoZm9ybWF0T2NjdXJlbmNlUmFuZ2VNaW5FcnJvckdyb3VwKGJhc2VQYXJ0aWNsZSwgZGVyaXZlZFBhcnRpY2xlKSwgY29udGV4dCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBlcnJvcnMuYWRkKFhtbEVycm9yLmZvck9iamVjdChmb3JtYXRPY2N1cmVuY2VSYW5nZU1pbkVycm9yKGJhc2VQYXJ0aWNsZSwgZGVyaXZlZFBhcnRpY2xlKSwgY29udGV4dCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBvY2N1cnJlbmNlUmFuZ2VPSzsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm9ybWF0T2NjdXJlbmNlUmFuZ2VNYXhFcnJvckdyb3VwKFNjaGVtYVBhcnRpY2xlIGJhc2VQYXJ0aWNsZSwgU2NoZW1hUGFydGljbGUgZGVyaXZlZFBhcnRpY2xlKSB7Ci0gICAgICAgIHJldHVybiAiSW52YWxpZCBSZXN0cmljdGlvbi4gIFRoZSBtYXhPY2N1cnMgZm9yIHRoZSAiCi0gICAgICAgICAgICAgICAgKyBwcmludFBhcnRpY2xlKGRlcml2ZWRQYXJ0aWNsZSkKLSAgICAgICAgICAgICAgICArICIgKCIgKyBwcmludE1heE9jY3VycyhkZXJpdmVkUGFydGljbGUuZ2V0TWF4T2NjdXJzKCkpCi0gICAgICAgICAgICAgICAgKyAiKSBpcyBncmVhdGVyIHRoYW4gdGhhbiB0aGUgbWF4T2NjdXJzIGZvciB0aGUgYmFzZSAiCi0gICAgICAgICAgICAgICAgKyBwcmludFBhcnRpY2xlKGJhc2VQYXJ0aWNsZSkKLSAgICAgICAgICAgICAgICArICIgKCIgKyBwcmludE1heE9jY3VycyhiYXNlUGFydGljbGUuZ2V0TWF4T2NjdXJzKCkpICsgIikiOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBmb3JtYXRPY2N1cmVuY2VSYW5nZU1pbkVycm9yR3JvdXAoU2NoZW1hUGFydGljbGUgYmFzZVBhcnRpY2xlLCBTY2hlbWFQYXJ0aWNsZSBkZXJpdmVkUGFydGljbGUpIHsKLSAgICAgICAgcmV0dXJuICJJbnZhbGlkIFJlc3RyaWN0aW9uLiAgVGhlIG1pbk9jY3VycyBmb3IgdGhlICIKLSAgICAgICAgICAgICAgICArIHByaW50UGFydGljbGUoZGVyaXZlZFBhcnRpY2xlKQotICAgICAgICAgICAgICAgICsgIiAoIiArIGRlcml2ZWRQYXJ0aWNsZS5nZXRNaW5PY2N1cnMoKS50b1N0cmluZygpCi0gICAgICAgICAgICAgICAgKyAiKSBpcyBsZXNzIHRoYW4gdGhhbiB0aGUgbWluT2NjdXJzIGZvciB0aGUgYmFzZSAiCi0gICAgICAgICAgICAgICAgKyBwcmludFBhcnRpY2xlKGJhc2VQYXJ0aWNsZSkKLSAgICAgICAgICAgICAgICArICIgKCIgKyBiYXNlUGFydGljbGUuZ2V0TWluT2NjdXJzKCkudG9TdHJpbmcoKSArICIpIjsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm9ybWF0T2NjdXJlbmNlUmFuZ2VNaW5FcnJvcihTY2hlbWFQYXJ0aWNsZSBiYXNlRmllbGQsIFNjaGVtYVBhcnRpY2xlIGRlcml2ZWRGaWVsZCkgewotICAgICAgICByZXR1cm4gIkludmFsaWQgUmVzdHJpY3Rpb24uICBUaGUgbWluT2NjdXJzIGZvciB0aGUgZWxlbWVudDogJyIKLSAgICAgICAgICAgICAgICArIHByaW50UGFydGljbGUoZGVyaXZlZEZpZWxkKQotICAgICAgICAgICAgICAgICsgIicgKCIgKyBkZXJpdmVkRmllbGQuZ2V0TWluT2NjdXJzKCkudG9TdHJpbmcoKQotICAgICAgICAgICAgICAgICsgIikgaXMgbGVzcyB0aGFuIHRoYW4gdGhlIG1pbk9jY3VycyBmb3IgdGhlIGJhc2UgZWxlbWVudDogJyIKLSAgICAgICAgICAgICAgICArIHByaW50UGFydGljbGUoYmFzZUZpZWxkKQotICAgICAgICAgICAgICAgICsgIicgKCIgKyBiYXNlRmllbGQuZ2V0TWluT2NjdXJzKCkudG9TdHJpbmcoKSArICIpIjsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZm9ybWF0T2NjdXJlbmNlUmFuZ2VNYXhFcnJvcihTY2hlbWFQYXJ0aWNsZSBiYXNlRmllbGQsIFNjaGVtYVBhcnRpY2xlIGRlcml2ZWRGaWVsZCkgewotICAgICAgICByZXR1cm4gIkludmFsaWQgUmVzdHJpY3Rpb24uICBUaGUgbWF4T2NjdXJzIGZvciB0aGUgZWxlbWVudDogJyIKLSAgICAgICAgICAgICAgICArIHByaW50UGFydGljbGUoZGVyaXZlZEZpZWxkKQotICAgICAgICAgICAgICAgICsgIicgKCIgKyBwcmludE1heE9jY3VycyhkZXJpdmVkRmllbGQuZ2V0TWF4T2NjdXJzKCkpCi0gICAgICAgICAgICAgICAgKyAiKSBpcyBncmVhdGVyIHRoYW4gdGhhbiB0aGUgbWF4T2NjdXJzIGZvciB0aGUgYmFzZSBlbGVtZW50OiAnIgotICAgICAgICAgICAgICAgICsgcHJpbnRQYXJ0aWNsZShiYXNlRmllbGQpICsgIicgKCIgKyBwcmludE1heE9jY3VycyhiYXNlRmllbGQuZ2V0TWF4T2NjdXJzKCkpICsgIikiOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcHJpbnRQYXJ0aWNsZShTY2hlbWFQYXJ0aWNsZSBwYXJ0KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChwYXJ0LmdldFBhcnRpY2xlVHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLkFMTDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIjxhbGw+IjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQ0hPSUNFOgotICAgICAgICAgICAgICAgIHJldHVybiAiPGNob2ljZT4iOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5FTEVNRU5UOgotICAgICAgICAgICAgICAgIHJldHVybiAiPGVsZW1lbnQgbmFtZT1cIiIgKyBRTmFtZUhlbHBlci5wcmV0dHkocGFydC5nZXROYW1lKCkpICsgIlwiPiI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLlNFUVVFTkNFOgotICAgICAgICAgICAgICAgIHJldHVybiAiPHNlcXVlbmNlPiI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLldJTERDQVJEOgotICAgICAgICAgICAgICAgIHJldHVybiAiPGFueT4iOwotICAgICAgICAgICAgZGVmYXVsdCA6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICI/PyI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHByaW50TWF4T2NjdXJzKEJpZ0ludGVnZXIgYmkpCi0gICAgewotICAgICAgICBpZiAoYmkgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiAidW5ib3VuZGVkIjsKLSAgICAgICAgcmV0dXJuIGJpLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBwcmludFR5cGUoU2NoZW1hVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgaWYgKHR5cGUuZ2V0TmFtZSgpICE9IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gUU5hbWVIZWxwZXIucHJldHR5KHR5cGUuZ2V0TmFtZSgpKTsKLSAgICAgICAgcmV0dXJuIHR5cGUudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGNoZWNrU3Vic3RpdHV0aW9uR3JvdXBzKFNjaGVtYUdsb2JhbEVsZW1lbnRbXSBlbHRzKQotICAgIHsKLSAgICAgICAgU3RzY1N0YXRlIHN0YXRlID0gU3RzY1N0YXRlLmdldCgpOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IGVsdHMubGVuZ3RoIDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBTY2hlbWFHbG9iYWxFbGVtZW50IGVsdCA9IGVsdHNbaV07Ci0gICAgICAgICAgICBTY2hlbWFHbG9iYWxFbGVtZW50IGhlYWQgPSBlbHQuc3Vic3RpdHV0aW9uR3JvdXAoKTsKLQotICAgICAgICAgICAgaWYgKGhlYWQgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTY2hlbWFUeXBlIGhlYWRUeXBlID0gaGVhZC5nZXRUeXBlKCk7Ci0gICAgICAgICAgICAgICAgU2NoZW1hVHlwZSB0YWlsVHlwZSA9IGVsdC5nZXRUeXBlKCk7Ci0gICAgICAgICAgICAgICAgWG1sT2JqZWN0IHBhcnNlVHJlZSA9ICgoU2NoZW1hR2xvYmFsRWxlbWVudEltcGwpZWx0KS5fcGFyc2VPYmplY3Q7Ci0KLSAgICAgICAgICAgICAgICBpZiAoISBoZWFkVHlwZS5pc0Fzc2lnbmFibGVGcm9tKHRhaWxUeXBlKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJFbGVtZW50ICIgKyBRTmFtZUhlbHBlci5wcmV0dHkoZWx0LmdldE5hbWUoKSkgKwotICAgICAgICAgICAgICAgICAgICAgICAgIiBtdXN0IGhhdmUgYSB0eXBlIHRoYXQgaXMgZGVyaXZlZCBmcm9tIHRoZSB0eXBlIG9mIGl0cyBzdWJzdGl0dXRpb24gZ3JvdXAuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFhtbEVycm9yQ29udGV4dC5JTkNPTlNJU1RFTlRfVFlQRSwgcGFyc2VUcmVlKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhlYWQuZmluYWxFeHRlbnNpb24oKSAmJiBoZWFkLmZpbmFsUmVzdHJpY3Rpb24oKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJFbGVtZW50ICIgKyBRTmFtZUhlbHBlci5wcmV0dHkoZWx0LmdldE5hbWUoKSkgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICIgY2Fubm90IGJlIHN1YnN0aXR1dGVkIGZvciBlbGVtZW50IHdpdGggZmluYWw9JyNhbGwnIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFhtbEVycm9yQ29udGV4dC5DQU5OT1RfREVSSVZFX0ZJTkFMLCBwYXJzZVRyZWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICghIGhlYWRUeXBlLmVxdWFscyh0YWlsVHlwZSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoaGVhZC5maW5hbEV4dGVuc2lvbigpICYmIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWlsVHlwZS5nZXREZXJpdmF0aW9uVHlwZSgpID09IFNjaGVtYVR5cGUuRFRfRVhURU5TSU9OKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvcigiRWxlbWVudCAiICsgUU5hbWVIZWxwZXIucHJldHR5KGVsdC5nZXROYW1lKCkpICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBjYW5ub3QgYmUgc3Vic3RpdHV0ZWQgZm9yIGVsZW1lbnQgd2l0aCBmaW5hbD0nZXh0ZW5zaW9uJyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1sRXJyb3JDb250ZXh0LkNBTk5PVF9ERVJJVkVfRklOQUwsIHBhcnNlVHJlZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaGVhZC5maW5hbFJlc3RyaWN0aW9uKCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFpbFR5cGUuZ2V0RGVyaXZhdGlvblR5cGUoKSA9PSBTY2hlbWFUeXBlLkRUX1JFU1RSSUNUSU9OKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvcigiRWxlbWVudCAiICsgUU5hbWVIZWxwZXIucHJldHR5KGVsdC5nZXROYW1lKCkpICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBjYW5ub3QgYmUgc3Vic3RpdHV0ZWQgZm9yIGVsZW1lbnQgd2l0aCBmaW5hbD0ncmVzdHJpY3Rpb24nIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbWxFcnJvckNvbnRleHQuQ0FOTk9UX0RFUklWRV9GSU5BTCwgcGFyc2VUcmVlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU3RzY0NvbXBsZXhUeXBlUmVzb2x2ZXIuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1N0c2NDb21wbGV4VHlwZVJlc29sdmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMzM5MzkuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU3RzY0NvbXBsZXhUeXBlUmVzb2x2ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwMDMgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcudzMueDIwMDEueG1sU2NoZW1hLio7Ci1pbXBvcnQgb3JnLnczLngyMDAxLnhtbFNjaGVtYS5TY2hlbWFEb2N1bWVudC5TY2hlbWE7Ci1pbXBvcnQgb3JnLnczLngyMDAxLnhtbFNjaGVtYS5BbnlEb2N1bWVudC5Bbnk7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlhtbEVycm9yQ29udGV4dDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlFOYW1lSGVscGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRCdWlsZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sSW50ZWdlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUZpZWxkOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVBhcnRpY2xlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQXR0cmlidXRlTW9kZWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQcm9wZXJ0eTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlFOYW1lU2V0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sTm9uTmVnYXRpdmVJbnRlZ2VyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hTG9jYWxBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFMb2NhbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldFNwZWNpZmljYXRpb247Ci0KLXB1YmxpYyBjbGFzcyBTdHNjQ29tcGxleFR5cGVSZXNvbHZlcgotewotICAgIHB1YmxpYyBzdGF0aWMgR3JvdXAgZ2V0Q29udGVudE1vZGVsKENvbXBsZXhUeXBlIHBhcnNlQ3QpCi0gICAgewotICAgICAgICBpZiAocGFyc2VDdC5nZXRBbGwoKSAhPSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ3QuZ2V0QWxsKCk7Ci0KLSAgICAgICAgaWYgKHBhcnNlQ3QuZ2V0U2VxdWVuY2UoKSAhPSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ3QuZ2V0U2VxdWVuY2UoKTsKLQotICAgICAgICBpZiAocGFyc2VDdC5nZXRDaG9pY2UoKSAhPSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ3QuZ2V0Q2hvaWNlKCk7Ci0KLSAgICAgICAgaWYgKHBhcnNlQ3QuZ2V0R3JvdXAoKSAhPSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ3QuZ2V0R3JvdXAoKTsKLQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEdyb3VwIGdldENvbnRlbnRNb2RlbChDb21wbGV4UmVzdHJpY3Rpb25UeXBlIHBhcnNlUmVzdCkKLSAgICB7Ci0gICAgICAgIGlmIChwYXJzZVJlc3QuZ2V0QWxsKCkgIT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBwYXJzZVJlc3QuZ2V0QWxsKCk7Ci0KLSAgICAgICAgaWYgKHBhcnNlUmVzdC5nZXRTZXF1ZW5jZSgpICE9IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VSZXN0LmdldFNlcXVlbmNlKCk7Ci0KLSAgICAgICAgaWYgKHBhcnNlUmVzdC5nZXRDaG9pY2UoKSAhPSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIHBhcnNlUmVzdC5nZXRDaG9pY2UoKTsKLQotICAgICAgICBpZiAocGFyc2VSZXN0LmdldEdyb3VwKCkgIT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBwYXJzZVJlc3QuZ2V0R3JvdXAoKTsKLQotICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgR3JvdXAgZ2V0Q29udGVudE1vZGVsKEV4dGVuc2lvblR5cGUgcGFyc2VFeHQpCi0gICAgewotICAgICAgICBpZiAocGFyc2VFeHQuZ2V0QWxsKCkgIT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUV4dC5nZXRBbGwoKTsKLQotICAgICAgICBpZiAocGFyc2VFeHQuZ2V0U2VxdWVuY2UoKSAhPSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIHBhcnNlRXh0LmdldFNlcXVlbmNlKCk7Ci0KLSAgICAgICAgaWYgKHBhcnNlRXh0LmdldENob2ljZSgpICE9IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VFeHQuZ2V0Q2hvaWNlKCk7Ci0KLSAgICAgICAgaWYgKHBhcnNlRXh0LmdldEdyb3VwKCkgIT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUV4dC5nZXRHcm91cCgpOwotCi0gICAgICAgIHJldHVybiBudWxsOwotCi0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2NoZW1hIGdldFNjaGVtYShYbWxPYmplY3QgbykKLSAgICB7Ci0gICAgICAgIFhtbEN1cnNvciBjID0gby5uZXdDdXJzb3IoKTsKLSAgICAgICAgCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICB3aGlsZSAoIGMudG9QYXJlbnQoKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbyA9IGMuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG8uc2NoZW1hVHlwZSgpLmVxdWFscyhTY2hlbWEudHlwZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoU2NoZW1hKSBvOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZpbmFsbHkKLSAgICAgICAgewotICAgICAgICAgICAgYy5kaXNwb3NlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCByZXNvbHZlQ29tcGxleFR5cGUoU2NoZW1hVHlwZUltcGwgc0ltcGwpCi0gICAgewotICAgICAgICBDb21wbGV4VHlwZSBwYXJzZUN0ID0gKENvbXBsZXhUeXBlKXNJbXBsLmdldFBhcnNlT2JqZWN0KCk7Ci0gICAgICAgIFN0c2NTdGF0ZSBzdGF0ZSA9IFN0c2NTdGF0ZS5nZXQoKTsKLSAgICAgICAgU2NoZW1hIHNjaGVtYSA9IGdldFNjaGVtYShwYXJzZUN0KTsKLQotICAgICAgICAvLyBTZXQgYWJzdHJhY3QgJiBmaW5hbCBmbGFncwotICAgICAgICBib29sZWFuIGFicyA9IHBhcnNlQ3QuaXNTZXRBYnN0cmFjdCgpID8gcGFyc2VDdC5nZXRBYnN0cmFjdCgpIDogZmFsc2U7Ci0gICAgICAgIGJvb2xlYW4gZmluYWxFeHQgPSBmYWxzZTsKLSAgICAgICAgYm9vbGVhbiBmaW5hbFJlc3QgPSBmYWxzZTsKLSAgICAgICAgYm9vbGVhbiBmaW5hbExpc3QgPSBmYWxzZTsKLSAgICAgICAgYm9vbGVhbiBmaW5hbFVuaW9uID0gZmFsc2U7Ci0KLSAgICAgICAgT2JqZWN0IGRzID0gbnVsbDsKLSAgICAgICAgaWYgKHBhcnNlQ3QuaXNTZXRGaW5hbCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBkcyA9IHBhcnNlQ3QuZ2V0RmluYWwoKTsKLSAgICAgICAgfQotICAgICAgICAvLyBJbnNwZWN0IHRoZSBmaW5hbCBkZWZhdWx0IGF0dHJpYnV0ZSBvbiB0aGUgc2NoZW1hCi0gICAgICAgIGVsc2UgaWYgKHNjaGVtYSAhPSBudWxsICYmIHNjaGVtYS5pc1NldEZpbmFsRGVmYXVsdCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBkcyA9IHNjaGVtYS5nZXRGaW5hbERlZmF1bHQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZHMgaW5zdGFuY2VvZiBTdHJpbmcgJiYgZHMuZXF1YWxzKCIjYWxsIikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gI0FMTCB2YWx1ZQotICAgICAgICAgICAgICAgIGZpbmFsRXh0ID0gZmluYWxSZXN0ID0gZmluYWxMaXN0ID0gZmluYWxVbmlvbiA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChkcyBpbnN0YW5jZW9mIExpc3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCgoTGlzdClkcykuY29udGFpbnMoImV4dGVuc2lvbiIpKQotICAgICAgICAgICAgICAgICAgICBmaW5hbEV4dCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCgoTGlzdClkcykuY29udGFpbnMoInJlc3RyaWN0aW9uIikpCi0gICAgICAgICAgICAgICAgICAgIGZpbmFsUmVzdCA9IHRydWU7Ci0KLS8vIFNpbmNlIGNvbXBsZXggdHlwZXMgZG9uJ3QgcGFydGljaXBhdGUgaW4gbGlzdCBhbmQgdW5pb25zLCB0aGVzZSBjYW4gcmVtYWluCi0vLyBmYWxzZS4gIFBlcmhhcHMgd2Ugc2hvdWxkIHRocm93IGFuIGVycm9yLgotCi0vLyAgICAgICAgICAgICAgICBpZiAoKChMaXN0KWRzKS5jb250YWlucygibGlzdCIpKQotLy8gICAgICAgICAgICAgICAgICAgIGZpbmFsTGlzdCA9IHRydWU7Ci0vLyAgICAgICAgICAgICAgICAKLS8vICAgICAgICAgICAgICAgIGlmICgoKExpc3QpZHMpLmNvbnRhaW5zKCJ1bmlvbiIpKQotLy8gICAgICAgICAgICAgICAgICAgIGZpbmFsVW5pb24gPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgc0ltcGwuc2V0QWJzdHJhY3RGaW5hbChhYnMsIGZpbmFsRXh0LCBmaW5hbFJlc3QsIGZpbmFsTGlzdCwgZmluYWxVbmlvbik7Ci0KLSAgICAgICAgLy8gU2V0IGJsb2NrIGZsYWdzCi0gICAgICAgIGJvb2xlYW4gYmxvY2tFeHQgPSBmYWxzZTsKLSAgICAgICAgYm9vbGVhbiBibG9ja1Jlc3QgPSBmYWxzZTsKLSAgICAgICAgT2JqZWN0IGJsb2NrID0gbnVsbDsKLQotICAgICAgICBpZiAocGFyc2VDdC5pc1NldEJsb2NrKCkpCi0gICAgICAgICAgICBibG9jayA9IHBhcnNlQ3QuZ2V0QmxvY2soKTsKLSAgICAgICAgZWxzZSBpZiAoc2NoZW1hICE9IG51bGwgJiYgc2NoZW1hLmlzU2V0QmxvY2tEZWZhdWx0KCkpCi0gICAgICAgICAgICBibG9jayA9IHNjaGVtYS5nZXRCbG9ja0RlZmF1bHQoKTsKLQotICAgICAgICBpZiAoYmxvY2sgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGJsb2NrIGluc3RhbmNlb2YgU3RyaW5nICYmIGJsb2NrLmVxdWFscygiI2FsbCIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vICNBTEwgdmFsdWUKLSAgICAgICAgICAgICAgICBibG9ja0V4dCA9IGJsb2NrUmVzdCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChibG9jayBpbnN0YW5jZW9mIExpc3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCgoTGlzdClibG9jaykuY29udGFpbnMoImV4dGVuc2lvbiIpKQotICAgICAgICAgICAgICAgICAgICBibG9ja0V4dCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKCgoTGlzdClibG9jaykuY29udGFpbnMoInJlc3RyaWN0aW9uIikpCi0gICAgICAgICAgICAgICAgICAgIGJsb2NrUmVzdCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBzSW1wbC5zZXRCbG9jayhibG9ja0V4dCwgYmxvY2tSZXN0KTsKLQotICAgICAgICAvLyBWZXJpZnk6IGhhdmUgc2ltcGxlQ29udGVudCwgY29tcGxleENvbnRlbnQsIG9yIGRpcmVjdCBzdHVmZgotICAgICAgICBDb21wbGV4Q29udGVudERvY3VtZW50LkNvbXBsZXhDb250ZW50IHBhcnNlQ2MgPSBwYXJzZUN0LmdldENvbXBsZXhDb250ZW50KCk7Ci0gICAgICAgIFNpbXBsZUNvbnRlbnREb2N1bWVudC5TaW1wbGVDb250ZW50IHBhcnNlU2MgPSBwYXJzZUN0LmdldFNpbXBsZUNvbnRlbnQoKTsKLSAgICAgICAgR3JvdXAgcGFyc2VHcm91cCA9IGdldENvbnRlbnRNb2RlbChwYXJzZUN0KTsKLSAgICAgICAgaW50IGNvdW50ID0KLSAgICAgICAgICAgICAgICAocGFyc2VDYyAhPSBudWxsID8gMSA6IDApICsKLSAgICAgICAgICAgICAgICAocGFyc2VTYyAhPSBudWxsID8gMSA6IDApICsKLSAgICAgICAgICAgICAgICAocGFyc2VHcm91cCAhPSBudWxsID8gMSA6IDApOwotICAgICAgICBpZiAoY291bnQgPiAxKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0ZS5lcnJvcigiQSBjb21wbGV4IHR5cGUgbXVzdCBkZWZpbmUgZWl0aGVyIGEgY29udGVudCBtb2RlbCwgIiArCi0gICAgICAgICAgICAgICAgICAgICAgIm9yIGEgc2ltcGxlQ29udGVudCBvciBjb21wbGV4Q29udGVudCBkZXJpdmF0aW9uOiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAibW9yZSB0aGFuIG9uZSBmb3VuZC4iLAotICAgICAgICAgICAgICAgICAgICBYbWxFcnJvckNvbnRleHQuUkVEVU5EQU5UX0NPTlRFTlRfTU9ERUwsIHBhcnNlQ3QpOwotICAgICAgICAgICAgLy8gcmVjb3Zlcnk6IHRyZWF0IGl0IGFzIHRoZSBmaXJzdCBvZiBjb21wbGV4Q29udGVudCwgc2ltcGxlQ29udGVudCwgbW9kZWwKLSAgICAgICAgICAgIHBhcnNlR3JvdXAgPSBudWxsOwotICAgICAgICAgICAgaWYgKHBhcnNlQ2MgIT0gbnVsbCAmJiBwYXJzZVNjICE9IG51bGwpCi0gICAgICAgICAgICAgICAgcGFyc2VTYyA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChwYXJzZUNjICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChwYXJzZUNjLmdldEV4dGVuc2lvbigpICE9IG51bGwgJiYgcGFyc2VDYy5nZXRSZXN0cmljdGlvbigpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIlJlc3RyaWN0aW9uIGNvbmZsaWN0cyB3aXRoIGV4dGVuc2lvbiIsIFhtbEVycm9yQ29udGV4dC5SRURVTkRBTlRfQ09OVEVOVF9NT0RFTCwgcGFyc2VDYy5nZXRSZXN0cmljdGlvbigpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gTWl4ZWQgY2FuIGJlIHNwZWNpZmllZCBpbiB0d28gcGxhY2VzOiB0aGUgcnVsZXMgYXJlIHRoYXQgQ2Mgd2lucyBvdmVyIEN0IGlmIHByZXNlbnQKLSAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNjLW12ZQotICAgICAgICAgICAgYm9vbGVhbiBtaXhlZCA9IHBhcnNlQ2MuaXNTZXRNaXhlZCgpID8gcGFyc2VDYy5nZXRNaXhlZCgpIDogcGFyc2VDdC5nZXRNaXhlZCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAocGFyc2VDYy5nZXRFeHRlbnNpb24oKSAhPSBudWxsKQotICAgICAgICAgICAgICAgIHJlc29sdmVDY0V4dGVuc2lvbihzSW1wbCwgcGFyc2VDYy5nZXRFeHRlbnNpb24oKSwgbWl4ZWQpOwotICAgICAgICAgICAgZWxzZSBpZiAocGFyc2VDYy5nZXRSZXN0cmljdGlvbigpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgcmVzb2x2ZUNjUmVzdHJpY3Rpb24oc0ltcGwsIHBhcnNlQ2MuZ2V0UmVzdHJpY3Rpb24oKSwgbWl4ZWQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJNaXNzaW5nIHJlc3RyaWN0aW9uIG9yIGV4dGVuc2lvbiIsIFhtbEVycm9yQ29udGV4dC5NSVNTSU5HX1JFU1RSSUNUSU9OX09SX0VYVEVOU0lPTiwgcGFyc2VDYyk7Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZUVycm9yVHlwZShzSW1wbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAocGFyc2VTYyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocGFyc2VTYy5nZXRFeHRlbnNpb24oKSAhPSBudWxsICYmIHBhcnNlU2MuZ2V0UmVzdHJpY3Rpb24oKSAhPSBudWxsKQotICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJSZXN0cmljdGlvbiBjb25mbGljdHMgd2l0aCBleHRlbnNpb24iLCBYbWxFcnJvckNvbnRleHQuUkVEVU5EQU5UX0NPTlRFTlRfTU9ERUwsIHBhcnNlU2MuZ2V0UmVzdHJpY3Rpb24oKSk7Ci0KLSAgICAgICAgICAgIGlmIChwYXJzZVNjLmdldEV4dGVuc2lvbigpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgcmVzb2x2ZVNjRXh0ZW5zaW9uKHNJbXBsLCBwYXJzZVNjLmdldEV4dGVuc2lvbigpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHBhcnNlU2MuZ2V0UmVzdHJpY3Rpb24oKSAhPSBudWxsKQotICAgICAgICAgICAgICAgIHJlc29sdmVTY1Jlc3RyaWN0aW9uKHNJbXBsLCBwYXJzZVNjLmdldFJlc3RyaWN0aW9uKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJNaXNzaW5nIHJlc3RyaWN0aW9uIG9yIGV4dGVuc2lvbiIsIFhtbEVycm9yQ29udGV4dC5NSVNTSU5HX1JFU1RSSUNUSU9OX09SX0VYVEVOU0lPTiwgcGFyc2VTYyk7Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZUVycm9yVHlwZShzSW1wbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzb2x2ZUJhc2ljQ29tcGxleFR5cGUoc0ltcGwpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHJlc29sdmVFcnJvclR5cGUoU2NoZW1hVHlwZUltcGwgc0ltcGwpCi0gICAgewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVGhpcyB0eXBlIG9mIGVycm9yIHJlY292ZXJ5IG5vdCB5ZXQgaW1wbGVtZW50ZWQuIik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2NoZW1hVHlwZS5SZWZbXSBtYWtlUmVmQXJyYXkoQ29sbGVjdGlvbiB0eXBlTGlzdCkKLSAgICB7Ci0gICAgICAgIFNjaGVtYVR5cGUuUmVmW10gcmVzdWx0ID0gbmV3IFNjaGVtYVR5cGUuUmVmW3R5cGVMaXN0LnNpemUoKV07Ci0gICAgICAgIGludCBqID0gMDsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gdHlwZUxpc3QuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7IGorKykKLSAgICAgICAgICAgIHJlc3VsdFtqXSA9ICgoU2NoZW1hVHlwZSlpLm5leHQoKSkuZ2V0UmVmKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0KLSAgICBzdGF0aWMgdm9pZCByZXNvbHZlQmFzaWNDb21wbGV4VHlwZShTY2hlbWFUeXBlSW1wbCBzSW1wbCkKLSAgICB7Ci0gICAgICAgIExpc3QgYW5vbnltb3VzVHlwZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIENvbXBsZXhUeXBlIHBhcnNlVHJlZSA9IChDb21wbGV4VHlwZSlzSW1wbC5nZXRQYXJzZU9iamVjdCgpOwotICAgICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gc0ltcGwuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICAgIGJvb2xlYW4gY2hhbWVsZW9uID0gKHNJbXBsLmdldENoYW1lbGVvbk5hbWVzcGFjZSgpICE9IG51bGwpOwotICAgICAgICBHcm91cCBwYXJzZUdyb3VwID0gZ2V0Q29udGVudE1vZGVsKHBhcnNlVHJlZSk7Ci0KLSAgICAgICAgaWYgKHNJbXBsLmlzUmVkZWZpbml0aW9uKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0c2NTdGF0ZS5nZXQoKS5lcnJvcigiQSB0eXBlIHJlZGVmaW5pdGlvbiBtdXN0IGV4dGVuZCBvciByZXN0cmljdCB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbiBvZiB0aGUgdHlwZS4iLCBYbWxFcnJvckNvbnRleHQuR0VORVJJQ19FUlJPUiwgcGFyc2VUcmVlKTsKLSAgICAgICAgICAgIC8vIHJlY292ZXJ5OiBvaCB3ZWxsLgotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHBhcnRpY2xlQ29kZSA9IHRyYW5zbGF0ZVBhcnRpY2xlQ29kZShwYXJzZUdyb3VwKTsKLQotICAgICAgICAvLyB1c2VkIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSAoZG9lc24ndCBiZWNvbWUgcGFydCBvZiB0aGUgcmVzdWx0KQotICAgICAgICBNYXAgZWxlbWVudE1vZGVsID0gbmV3IExpbmtlZEhhc2hNYXAoKTsKLQotICAgICAgICAvLyBidWlsZCBjb250ZW50IG1vZGVsIGFuZCBhbm9ueW1vdXMgdHlwZXMKLSAgICAgICAgU2NoZW1hUGFydGljbGUgY29udGVudE1vZGVsID0gdHJhbnNsYXRlQ29udGVudE1vZGVsKHNJbXBsLCBwYXJzZUdyb3VwLCB0YXJnZXROYW1lc3BhY2UsIGNoYW1lbGVvbiwgcGFydGljbGVDb2RlLCBhbm9ueW1vdXNUeXBlcywgZWxlbWVudE1vZGVsLCBmYWxzZSwgbnVsbCk7Ci0KLSAgICAgICAgLy8gZGV0ZWN0IHRoZSBub25lbXB0eSAiYWxsIiBjYXNlIChlbXB0eSA8YWxsPiBkb2Vzbid0IGNvdW50IC0gaXQgbmVlZHMgdG8gYmUgZWxpbWluYXRlZCB0byBtYXRjaCBYU0QgdGVzdCBjYXNlcykKLSAgICAgICAgYm9vbGVhbiBpc0FsbCA9IGNvbnRlbnRNb2RlbCAhPSBudWxsICYmIGNvbnRlbnRNb2RlbC5nZXRQYXJ0aWNsZVR5cGUoKSA9PSBTY2hlbWFQYXJ0aWNsZS5BTEw7Ci0gICAgICAgIAotICAgICAgICAvLyBidWlsZCBhdHRyIG1vZGVsIGFuZCBhbm9ueW1vdXMgdHlwZXMKLSAgICAgICAgU2NoZW1hQXR0cmlidXRlTW9kZWxJbXBsIGF0dHJNb2RlbCA9IG5ldyBTY2hlbWFBdHRyaWJ1dGVNb2RlbEltcGwoKTsKLSAgICAgICAgdHJhbnNsYXRlQXR0cmlidXRlTW9kZWwocGFyc2VUcmVlLCB0YXJnZXROYW1lc3BhY2UsIGNoYW1lbGVvbiwgYW5vbnltb3VzVHlwZXMsIHNJbXBsLCBudWxsLCBhdHRyTW9kZWwsIG51bGwsIHRydWUsIG51bGwpOwotCi0gICAgICAgIC8vIHN1bW1hcml6ZSB3aWxkY2FyZCBpbmZvcm1hdGlvbgotICAgICAgICBXaWxkY2FyZFJlc3VsdCB3Y0VsdCA9IHN1bW1hcml6ZUVsdFdpbGRjYXJkcyhjb250ZW50TW9kZWwpOwotICAgICAgICBXaWxkY2FyZFJlc3VsdCB3Y0F0dHIgPSBzdW1tYXJpemVBdHRyV2lsZGNhcmRzKGF0dHJNb2RlbCk7Ci0KLSAgICAgICAgLy8gYnVpbGQgc3RhdGUgbWFjaGluZSBhbmQgdmVyaWZ5IHRoYXQgY29udGVudCBtb2RlbCBpcyBkZXRlcm1pbmlzdGljCi0gICAgICAgIGlmIChjb250ZW50TW9kZWwgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgYnVpbGRTdGF0ZU1hY2hpbmUoY29udGVudE1vZGVsKTsKLSAgICAgICAgICAgIGlmICghU3RzY1N0YXRlLmdldCgpLm5vVXBhKCkgJiYgISgoU2NoZW1hUGFydGljbGVJbXBsKWNvbnRlbnRNb2RlbCkuaXNEZXRlcm1pbmlzdGljKCkpCi0gICAgICAgICAgICAgICAgU3RzY1N0YXRlLmdldCgpLmVycm9yKCJDb250ZW50IG1vZGVsIHZpb2xhdGVzIHRoZSB1bmlxdWUgcGFydGljbGUgYXR0cmlidXRpb24gcnVsZSIsIFhtbEVycm9yQ29udGV4dC5OT05ERVRFUk1JTklTVElDX01PREVMLCBwYXJzZUdyb3VwKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGJ1aWxkIHByb3BlcnR5IG1vZGVsCi0gICAgICAgIC8vIGVtaXREQkcoIkJ1aWxkaW5nIGNvbnRlbnQgTW9kZWwgZm9yICIgKyBzSW1wbCk7Ci0gICAgICAgIE1hcCBlbGVtZW50UHJvcGVydHlNb2RlbCA9IGJ1aWxkQ29udGVudFByb3BlcnR5TW9kZWxCeVFOYW1lKGNvbnRlbnRNb2RlbCwgc0ltcGwpOwotCi0gICAgICAgIC8vIGFkZCBhdHRyaWJ1dGUgcHJvcGVydHkgbW9kZWwKLSAgICAgICAgTWFwIGF0dHJpYnV0ZVByb3BlcnR5TW9kZWwgPSBidWlsZEF0dHJpYnV0ZVByb3BlcnR5TW9kZWxCeVFOYW1lKGF0dHJNb2RlbCwgc0ltcGwpOwotCi0gICAgICAgIC8vIGZpZ3VyZSBvdXQgY29udGVudCB0eXBlCi0gICAgICAgIGludCBjb21wbGV4VmFyaWV0eSA9Ci0gICAgICAgICAgICBwYXJzZVRyZWUuZ2V0TWl4ZWQoKQotICAgICAgICAgICAgICAgID8gU2NoZW1hVHlwZS5NSVhFRF9DT05URU5UCi0gICAgICAgICAgICAgICAgOiBjb250ZW50TW9kZWwgPT0gbnVsbAotICAgICAgICAgICAgICAgICAgICA/IFNjaGVtYVR5cGUuRU1QVFlfQ09OVEVOVAotICAgICAgICAgICAgICAgICAgICA6IFNjaGVtYVR5cGUuRUxFTUVOVF9DT05URU5UOwotCi0gICAgICAgIC8vIG5vdyBmaWxsIGluIHRoZSBhY3R1YWwgc2NoZW1hIHR5cGUgaW1wbGVtZW50YXRpb24KLSAgICAgICAgc0ltcGwuc2V0QmFzZVR5cGVSZWYoQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfQU5ZX1RZUEUuZ2V0UmVmKCkpOwotICAgICAgICBzSW1wbC5zZXRCYXNlRGVwdGgoQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfQU5ZX1RZUEUuZ2V0QmFzZURlcHRoKCkgKyAxKTsKLSAgICAgICAgc0ltcGwuc2V0RGVyaXZhdGlvblR5cGUoU2NoZW1hVHlwZS5EVF9FWFRFTlNJT04pOwotICAgICAgICBzSW1wbC5zZXRDb21wbGV4VHlwZVZhcmlldHkoY29tcGxleFZhcmlldHkpOwotICAgICAgICBzSW1wbC5zZXRDb250ZW50TW9kZWwoY29udGVudE1vZGVsLCBhdHRyTW9kZWwsIGVsZW1lbnRQcm9wZXJ0eU1vZGVsLCBhdHRyaWJ1dGVQcm9wZXJ0eU1vZGVsLCBpc0FsbCk7Ci0gICAgICAgIHNJbXBsLnNldEFub255bW91c1R5cGVSZWZzKG1ha2VSZWZBcnJheShhbm9ueW1vdXNUeXBlcykpOwotICAgICAgICBzSW1wbC5zZXRXaWxkY2FyZFN1bW1hcnkod2NFbHQudHlwZWRXaWxkY2FyZHMsIHdjRWx0Lmhhc1dpbGRjYXJkcywgd2NBdHRyLnR5cGVkV2lsZGNhcmRzLCB3Y0F0dHIuaGFzV2lsZGNhcmRzKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCByZXNvbHZlQ2NSZXN0cmljdGlvbihTY2hlbWFUeXBlSW1wbCBzSW1wbCwgQ29tcGxleFJlc3RyaWN0aW9uVHlwZSBwYXJzZVRyZWUsIGJvb2xlYW4gbWl4ZWQpCi0gICAgewotICAgICAgICBTdHNjU3RhdGUgc3RhdGUgPSBTdHNjU3RhdGUuZ2V0KCk7Ci0gICAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBzSW1wbC5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgICAgYm9vbGVhbiBjaGFtZWxlb24gPSAoc0ltcGwuZ2V0Q2hhbWVsZW9uTmFtZXNwYWNlKCkgIT0gbnVsbCk7Ci0KLSAgICAgICAgLy8gQlVHQlVHOiBOT1QgWUVUIFJFQUxMWSBJTVBMRU1FTlRFRAotICAgICAgICAvLyB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiTm90IHlldCBpbXBsZW1lbnRlZC4iKTsKLQotICAgICAgICBTY2hlbWFUeXBlIGJhc2VUeXBlOwotICAgICAgICBpZiAocGFyc2VUcmVlLmdldEJhc2UoKSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0ZS5lcnJvcigiQSBjb21wbGV4Q29udGVudCBtdXN0IGRlZmluZSBhIGJhc2UgdHlwZSIsIFhtbEVycm9yQ29udGV4dC5NSVNTSU5HX0JBU0UsIHBhcnNlVHJlZSk7Ci0gICAgICAgICAgICBiYXNlVHlwZSA9IG51bGw7IC8vIHJlY292ZXJ5OiBubyBpbmhlcml0YW5jZS4KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzSW1wbC5pc1JlZGVmaW5pdGlvbigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJhc2VUeXBlID0gc3RhdGUuZmluZFJlZGVmaW5lZEdsb2JhbFR5cGUocGFyc2VUcmVlLmdldEJhc2UoKSwgc0ltcGwuZ2V0Q2hhbWVsZW9uTmFtZXNwYWNlKCksIHNJbXBsLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VUeXBlICE9IG51bGwgJiYgIWJhc2VUeXBlLmdldE5hbWUoKS5lcXVhbHMoc0ltcGwuZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkEgdHlwZSByZWRlZmluaXRpb24gbXVzdCBleHRlbmQgdGhlIG9yaWdpbmFsIHR5cGUgZGVmaW5pdGlvbiIsIFhtbEVycm9yQ29udGV4dC5HRU5FUklDX0VSUk9SLCBwYXJzZVRyZWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJhc2VUeXBlID0gc3RhdGUuZmluZEdsb2JhbFR5cGUocGFyc2VUcmVlLmdldEJhc2UoKSwgc0ltcGwuZ2V0Q2hhbWVsZW9uTmFtZXNwYWNlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoYmFzZVR5cGUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICBzdGF0ZS5ub3RGb3VuZEVycm9yKHBhcnNlVHJlZS5nZXRCYXNlKCksIFhtbEVycm9yQ29udGV4dC5UWVBFX05PVF9GT1VORCwgcGFyc2VUcmVlLnhnZXRCYXNlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJhc2VUeXBlID09IG51bGwpCi0gICAgICAgICAgICBiYXNlVHlwZSA9IEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLlNUX0FOWV9UWVBFOwotCi0gICAgICAgIGlmIChiYXNlVHlwZSAhPSBudWxsICYmIGJhc2VUeXBlLmZpbmFsUmVzdHJpY3Rpb24oKSkKLSAgICAgICAgewotICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkNhbm5vdCByZXN0cmljdCBhIGZpbmFsIHR5cGUiLCBYbWxFcnJvckNvbnRleHQuQ0FOTk9UX0RFUklWRV9GSU5BTCwgcGFyc2VUcmVlLnhnZXRCYXNlKCkpOwotICAgICAgICAgICAgLy8gcmVjb3Zlcnk6IGp1c3Qga2VlcCBnb2luZwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVjdXJzaW9uCi0gICAgICAgIGlmIChiYXNlVHlwZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIVN0c2NSZXNvbHZlci5yZXNvbHZlVHlwZSgoU2NoZW1hVHlwZUltcGwpYmFzZVR5cGUpKQotICAgICAgICAgICAgICAgIGJhc2VUeXBlID0gbnVsbDsgLy8gY2lyY3VsYXIgZGVwZW5kZW5jeTogbm8gaW5oZXJpdGFuY2UKLSAgICAgICAgfQotCi0gICAgICAgIExpc3QgYW5vbnltb3VzVHlwZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIEdyb3VwIHBhcnNlRWcgPSBnZXRDb250ZW50TW9kZWwocGFyc2VUcmVlKTsKLQotICAgICAgICAvLyBkZXRlY3QgdGhlICJhbGwiIGNhc2UKLSAgICAgICAgaW50IHBhcnRpY2xlQ29kZSA9IHRyYW5zbGF0ZVBhcnRpY2xlQ29kZShwYXJzZUVnKTsKLQotICAgICAgICAvLyB1c2VkIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSAoZG9lc24ndCBiZWNvbWUgcGFydCBvZiB0aGUgcmVzdWx0KQotICAgICAgICBNYXAgZWxlbWVudE1vZGVsID0gbmV3IExpbmtlZEhhc2hNYXAoKTsKLQotICAgICAgICAvLyBidWlsZCBjb250ZW50IG1vZGVsIGFuZCBhbm9ueW1vdXMgdHlwZXMKLSAgICAgICAgU2NoZW1hUGFydGljbGUgY29udGVudE1vZGVsID0gdHJhbnNsYXRlQ29udGVudE1vZGVsKAotICAgICAgICAgICAgc0ltcGwsIHBhcnNlRWcsIHRhcmdldE5hbWVzcGFjZSwgY2hhbWVsZW9uLCBwYXJ0aWNsZUNvZGUsIGFub255bW91c1R5cGVzLCBlbGVtZW50TW9kZWwsIGZhbHNlLCBudWxsKTsKLQotICAgICAgICAvLyBkZXRlY3QgdGhlIG5vbmVtcHR5ICJhbGwiIGNhc2UgKGVtcHR5IDxhbGw+IGRvZXNuJ3QgY291bnQgLSBpdCBuZWVkcyB0byBiZSBlbGltaW5hdGVkIHRvIG1hdGNoIFhTRCB0ZXN0IGNhc2VzKQotICAgICAgICBib29sZWFuIGlzQWxsID0gY29udGVudE1vZGVsICE9IG51bGwgJiYgY29udGVudE1vZGVsLmdldFBhcnRpY2xlVHlwZSgpID09IFNjaGVtYVBhcnRpY2xlLkFMTDsKLSAgICAgICAgCi0gICAgICAgIC8vIGJ1aWxkIGF0dHIgbW9kZWwgYW5kIGFub255bW91cyB0eXBlcwotICAgICAgICBTY2hlbWFBdHRyaWJ1dGVNb2RlbEltcGwgYXR0ck1vZGVsOwotICAgICAgICBpZiAoYmFzZVR5cGUgPT0gbnVsbCkKLSAgICAgICAgICAgIGF0dHJNb2RlbCA9IG5ldyBTY2hlbWFBdHRyaWJ1dGVNb2RlbEltcGwoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXR0ck1vZGVsID0gbmV3IFNjaGVtYUF0dHJpYnV0ZU1vZGVsSW1wbChiYXNlVHlwZS5nZXRBdHRyaWJ1dGVNb2RlbCgpKTsKLSAgICAgICAgdHJhbnNsYXRlQXR0cmlidXRlTW9kZWwocGFyc2VUcmVlLCB0YXJnZXROYW1lc3BhY2UsIGNoYW1lbGVvbiwgYW5vbnltb3VzVHlwZXMsIHNJbXBsLCBudWxsLCBhdHRyTW9kZWwsIGJhc2VUeXBlLCBmYWxzZSwgbnVsbCk7Ci0KLSAgICAgICAgLy8gc3VtbWFyaXplIHdpbGRjYXJkIGluZm9ybWF0aW9uCi0gICAgICAgIFdpbGRjYXJkUmVzdWx0IHdjRWx0ID0gc3VtbWFyaXplRWx0V2lsZGNhcmRzKGNvbnRlbnRNb2RlbCk7Ci0gICAgICAgIFdpbGRjYXJkUmVzdWx0IHdjQXR0ciA9IHN1bW1hcml6ZUF0dHJXaWxkY2FyZHMoYXR0ck1vZGVsKTsKLQotICAgICAgICAvLyBidWlsZCBzdGF0ZSBtYWNoaW5lIGFuZCB2ZXJpZnkgdGhhdCBjb250ZW50IG1vZGVsIGlzIGRldGVybWluaXN0aWMKLSAgICAgICAgaWYgKGNvbnRlbnRNb2RlbCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBidWlsZFN0YXRlTWFjaGluZShjb250ZW50TW9kZWwpOwotICAgICAgICAgICAgaWYgKCFTdHNjU3RhdGUuZ2V0KCkubm9VcGEoKSAmJiAhKChTY2hlbWFQYXJ0aWNsZUltcGwpY29udGVudE1vZGVsKS5pc0RldGVybWluaXN0aWMoKSkKLSAgICAgICAgICAgICAgICBTdHNjU3RhdGUuZ2V0KCkuZXJyb3IoIkNvbnRlbnQgbW9kZWwgdmlvbGF0ZXMgdGhlIHVuaXF1ZSBwYXJ0aWNsZSBhdHRyaWJ1dGlvbiBydWxlIiwgWG1sRXJyb3JDb250ZXh0Lk5PTkRFVEVSTUlOSVNUSUNfTU9ERUwsIHBhcnNlRWcpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gYnVpbGQgcHJvcGVydHkgbW9kZWwKLSAgICAgICAgLy8gZW1pdERCRygiQnVpbGRpbmcgY29udGVudCBNb2RlbCBmb3IgIiArIHNJbXBsKTsKLSAgICAgICAgTWFwIGVsZW1lbnRQcm9wZXJ0eU1vZGVsID0gYnVpbGRDb250ZW50UHJvcGVydHlNb2RlbEJ5UU5hbWUoY29udGVudE1vZGVsLCBzSW1wbCk7Ci0KLSAgICAgICAgLy8gYWRkIGF0dHJpYnV0ZSBwcm9wZXJ0eSBtb2RlbAotICAgICAgICBNYXAgYXR0cmlidXRlUHJvcGVydHlNb2RlbCA9IGJ1aWxkQXR0cmlidXRlUHJvcGVydHlNb2RlbEJ5UU5hbWUoYXR0ck1vZGVsLCBzSW1wbCk7Ci0KLSAgICAgICAgLy8gY29tcHV0ZSBlbXB0eS9lbGVtZW50L21peGVkCi0gICAgICAgIGludCBjb21wbGV4VmFyaWV0eSA9IChjb250ZW50TW9kZWwgPT0gbnVsbCA/IFNjaGVtYVR5cGUuRU1QVFlfQ09OVEVOVCA6Ci0gICAgICAgICAgICAobWl4ZWQgPyBTY2hlbWFUeXBlLk1JWEVEX0NPTlRFTlQgOiBTY2hlbWFUeXBlLkVMRU1FTlRfQ09OVEVOVCkpOwotCi0gICAgICAgIC8vIG5vdyBmaWxsIGluIHRoZSBhY3R1YWwgc2NoZW1hIHR5cGUgaW1wbGVtZW50YXRpb24KLSAgICAgICAgc0ltcGwuc2V0QmFzZVR5cGVSZWYoYmFzZVR5cGUuZ2V0UmVmKCkpOwotICAgICAgICBzSW1wbC5zZXRCYXNlRGVwdGgoKChTY2hlbWFUeXBlSW1wbCliYXNlVHlwZSkuZ2V0QmFzZURlcHRoKCkgKyAxKTsKLSAgICAgICAgc0ltcGwuc2V0RGVyaXZhdGlvblR5cGUoU2NoZW1hVHlwZS5EVF9SRVNUUklDVElPTik7Ci0gICAgICAgIHNJbXBsLnNldENvbXBsZXhUeXBlVmFyaWV0eShjb21wbGV4VmFyaWV0eSk7Ci0gICAgICAgIHNJbXBsLnNldENvbnRlbnRNb2RlbChjb250ZW50TW9kZWwsIGF0dHJNb2RlbCwgZWxlbWVudFByb3BlcnR5TW9kZWwsIGF0dHJpYnV0ZVByb3BlcnR5TW9kZWwsIGlzQWxsKTsKLSAgICAgICAgc0ltcGwuc2V0QW5vbnltb3VzVHlwZVJlZnMobWFrZVJlZkFycmF5KGFub255bW91c1R5cGVzKSk7Ci0gICAgICAgIHNJbXBsLnNldFdpbGRjYXJkU3VtbWFyeSh3Y0VsdC50eXBlZFdpbGRjYXJkcywgd2NFbHQuaGFzV2lsZGNhcmRzLCB3Y0F0dHIudHlwZWRXaWxkY2FyZHMsIHdjQXR0ci5oYXNXaWxkY2FyZHMpOwotICAgIH0KLQotICAgIHN0YXRpYyBNYXAgZXh0cmFjdEVsZW1lbnRNb2RlbChTY2hlbWFUeXBlIHNUeXBlKQotICAgIHsKLSAgICAgICAgTWFwIGVsZW1lbnRNb2RlbCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgIGlmIChzVHlwZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBTY2hlbWFQcm9wZXJ0eVtdIHNQcm9wcyA9IHNUeXBlLmdldFByb3BlcnRpZXMoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc1Byb3BzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzUHJvcHNbaV0uaXNBdHRyaWJ1dGUoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgZWxlbWVudE1vZGVsLnB1dChzUHJvcHNbaV0uZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1Byb3BzW2ldLmdldFR5cGUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGVsZW1lbnRNb2RlbDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCByZXNvbHZlQ2NFeHRlbnNpb24oU2NoZW1hVHlwZUltcGwgc0ltcGwsIEV4dGVuc2lvblR5cGUgcGFyc2VUcmVlLCBib29sZWFuIG1peGVkKQotICAgIHsKLSAgICAgICAgU2NoZW1hVHlwZSBiYXNlVHlwZTsKLSAgICAgICAgU3RzY1N0YXRlIHN0YXRlID0gU3RzY1N0YXRlLmdldCgpOwotICAgICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gc0ltcGwuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICAgIGJvb2xlYW4gY2hhbWVsZW9uID0gKHNJbXBsLmdldENoYW1lbGVvbk5hbWVzcGFjZSgpICE9IG51bGwpOwotCi0gICAgICAgIGlmIChwYXJzZVRyZWUuZ2V0QmFzZSgpID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0YXRlLmVycm9yKCJBIGNvbXBsZXhDb250ZW50IG11c3QgZGVmaW5lIGEgYmFzZSB0eXBlIiwgWG1sRXJyb3JDb250ZXh0Lk1JU1NJTkdfQkFTRSwgcGFyc2VUcmVlKTsKLSAgICAgICAgICAgIGJhc2VUeXBlID0gbnVsbDsgLy8gcmVjb3Zlcnk6IG5vIGluaGVyaXRhbmNlLgotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHNJbXBsLmlzUmVkZWZpbml0aW9uKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYmFzZVR5cGUgPSBzdGF0ZS5maW5kUmVkZWZpbmVkR2xvYmFsVHlwZShwYXJzZVRyZWUuZ2V0QmFzZSgpLCBzSW1wbC5nZXRDaGFtZWxlb25OYW1lc3BhY2UoKSwgc0ltcGwuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoYmFzZVR5cGUgIT0gbnVsbCAmJiAhYmFzZVR5cGUuZ2V0TmFtZSgpLmVxdWFscyhzSW1wbC5nZXROYW1lKCkpKQotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvcigiQSB0eXBlIHJlZGVmaW5pdGlvbiBtdXN0IGV4dGVuZCB0aGUgb3JpZ2luYWwgdHlwZSBkZWZpbml0aW9uIiwgWG1sRXJyb3JDb250ZXh0LkdFTkVSSUNfRVJST1IsIHBhcnNlVHJlZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYmFzZVR5cGUgPSBzdGF0ZS5maW5kR2xvYmFsVHlwZShwYXJzZVRyZWUuZ2V0QmFzZSgpLCBzSW1wbC5nZXRDaGFtZWxlb25OYW1lc3BhY2UoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYmFzZVR5cGUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICBzdGF0ZS5ub3RGb3VuZEVycm9yKHBhcnNlVHJlZS5nZXRCYXNlKCksIFhtbEVycm9yQ29udGV4dC5UWVBFX05PVF9GT1VORCwgcGFyc2VUcmVlLnhnZXRCYXNlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVjdXJzaW9uCi0gICAgICAgIGlmIChiYXNlVHlwZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIVN0c2NSZXNvbHZlci5yZXNvbHZlVHlwZSgoU2NoZW1hVHlwZUltcGwpYmFzZVR5cGUpKQotICAgICAgICAgICAgICAgIGJhc2VUeXBlID0gbnVsbDsgLy8gY2lyY3VsYXIgZGVwZW5kZW5jeTogbm8gaW5oZXJpdGFuY2UKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChiYXNlVHlwZSAhPSBudWxsICYmIChiYXNlVHlwZS5pc1NpbXBsZVR5cGUoKSB8fCBiYXNlVHlwZS5nZXRDb250ZW50VHlwZSgpID09IFNjaGVtYVR5cGUuU0lNUExFX0NPTlRFTlQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0ZS5lcnJvcigiVGhlIHNwZWNpZmllZCBiYXNlIHR5cGUgaXMgbm90IGEgY29tcGxleCB0eXBlIHdpdGggY29tcGxleCBjb250ZW50LiIsIFhtbEVycm9yQ29udGV4dC5DT01QTEVYX0JBU0VfTk9UX0NPTVBMRVgsIHBhcnNlVHJlZS54Z2V0QmFzZSgpKTsKLSAgICAgICAgICAgIGJhc2VUeXBlID0gbnVsbDsgLy8gcmVjb3Zlcnk6IG5vIGluaGVyaXRhbmNlLgotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJhc2VUeXBlICE9IG51bGwgJiYgYmFzZVR5cGUuZmluYWxFeHRlbnNpb24oKSkKLSAgICAgICAgewotICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkNhbm5vdCBleHRlbmQgYSBmaW5hbCB0eXBlIiwgWG1sRXJyb3JDb250ZXh0LkNBTk5PVF9ERVJJVkVfRklOQUwsIHBhcnNlVHJlZS54Z2V0QmFzZSgpKTsKLSAgICAgICAgICAgIC8vIHJlY292ZXJ5OiBqdXN0IGtlZXAgZ29pbmcKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gZ2V0IGJhc2UgY29udGVudCBtb2RlbAotICAgICAgICBTY2hlbWFQYXJ0aWNsZSBiYXNlQ29udGVudE1vZGVsID0gKGJhc2VUeXBlID09IG51bGwgPyBudWxsIDogYmFzZVR5cGUuZ2V0Q29udGVudE1vZGVsKCkpOwotICAgICAgICAvLyBUT0RPOiBhdHRyaWJ1dGUgbW9kZWwgYWxzbwotCi0gICAgICAgIExpc3QgYW5vbnltb3VzVHlwZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIE1hcCBiYXNlRWxlbWVudE1vZGVsID0gZXh0cmFjdEVsZW1lbnRNb2RlbChiYXNlVHlwZSk7Ci0gICAgICAgIEdyb3VwIHBhcnNlRWcgPSBnZXRDb250ZW50TW9kZWwocGFyc2VUcmVlKTsKLSAgICAgICAgCi0gICAgICAgIC8vIGJ1aWxkIGV4dGVuc2lvbiBtb2RlbAotICAgICAgICBTY2hlbWFQYXJ0aWNsZSBleHRlbnNpb25Nb2RlbCA9IHRyYW5zbGF0ZUNvbnRlbnRNb2RlbCgKLSAgICAgICAgICAgICAgICBzSW1wbCwgcGFyc2VFZywgdGFyZ2V0TmFtZXNwYWNlLCBjaGFtZWxlb24sIHRyYW5zbGF0ZVBhcnRpY2xlQ29kZShwYXJzZUVnKSwKLSAgICAgICAgICAgICAgICBhbm9ueW1vdXNUeXBlcywgYmFzZUVsZW1lbnRNb2RlbCwgZmFsc2UsIG51bGwpOwotICAgICAgICAKLSAgICAgICAgLy8gYXBwbHkgcnVsZSAjMiBuZWFyIGh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNjLW12ZTogZW1wdHkgZXh0IG1vZGVsIC0+IG1peGVkIHRha2VuIGZyb20gYmFzZQotICAgICAgICBpZiAoZXh0ZW5zaW9uTW9kZWwgPT0gbnVsbCAmJiAhbWl4ZWQpCi0gICAgICAgICAgICBtaXhlZCA9IChiYXNlVHlwZS5nZXRDb250ZW50VHlwZSgpID09IFNjaGVtYVR5cGUuTUlYRURfQ09OVEVOVCk7Ci0gICAgICAgIAotICAgICAgICAvLyBhcHBseSBEZXJpdmF0aW9uIFZhbGlkIChFeHRlbnNpb24pIHJ1bGUgMS40LjIuMgotICAgICAgICBpZiAoYmFzZVR5cGUgIT0gbnVsbCAmJiAoYmFzZVR5cGUuZ2V0Q29udGVudFR5cGUoKSAhPSBTY2hlbWFUeXBlLkVNUFRZX0NPTlRFTlQpICYmCi0gICAgICAgICAgICAgICAgKChiYXNlVHlwZS5nZXRDb250ZW50VHlwZSgpID09IFNjaGVtYVR5cGUuTUlYRURfQ09OVEVOVCkgIT0gbWl4ZWQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0ZS5lcnJvcigiQ2Fubm90IGV4dGVuZCBhbiBlbGVtZW50LW9ubHkgdHlwZSB3aXRoIGEgbWl4ZWQgdHlwZSBvciB2aWNlLXZlcnNhIiwgWG1sRXJyb3JDb250ZXh0LklOQ09OU0lTVEVOVF9UWVBFLCBwYXJzZVRyZWUueGdldEJhc2UoKSk7Ci0gICAgICAgICAgICAvLyByZWNvdmVyeToganVzdCBrZWVwIGdvaW5nCi0gICAgICAgIH0KLQotICAgICAgICAvLyBkZXRlY3QgdGhlICJhbGwiIGJhc2UgY2FzZQotICAgICAgICBpZiAoYmFzZVR5cGUgIT0gbnVsbCAmJiBiYXNlVHlwZS5oYXNBbGxDb250ZW50KCkgJiYgZXh0ZW5zaW9uTW9kZWwgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkNhbm5vdCBleHRlbmQgYSB0eXBlIHdpdGggJ2FsbCcgY29udGVudCBtb2RlbCIsIFhtbEVycm9yQ29udGV4dC5DQU5OT1RfRVhURU5EX0FMTCwgcGFyc2VUcmVlLnhnZXRCYXNlKCkpOwotICAgICAgICAgICAgZXh0ZW5zaW9uTW9kZWwgPSBudWxsOyAvLyByZWNvdmVyeTogZHJvcCBleHRlbnNpb24KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGJ1aWxkIGNvbnRlbnQgbW9kZWwgYW5kIGFub255bW91cyB0eXBlcwotICAgICAgICBTY2hlbWFQYXJ0aWNsZSBjb250ZW50TW9kZWwgPSBleHRlbmRDb250ZW50TW9kZWwoYmFzZUNvbnRlbnRNb2RlbCwgZXh0ZW5zaW9uTW9kZWwsIHBhcnNlVHJlZSk7Ci0KLSAgICAgICAgLy8gZGV0ZWN0IHRoZSBub25lbXB0eSAiYWxsIiBjYXNlIChlbXB0eSA8YWxsPiBkb2Vzbid0IGNvdW50IC0gaXQgbmVlZHMgdG8gYmUgZWxpbWluYXRlZCB0byBtYXRjaCBYU0QgdGVzdCBjYXNlcykKLSAgICAgICAgYm9vbGVhbiBpc0FsbCA9IGNvbnRlbnRNb2RlbCAhPSBudWxsICYmIGNvbnRlbnRNb2RlbC5nZXRQYXJ0aWNsZVR5cGUoKSA9PSBTY2hlbWFQYXJ0aWNsZS5BTEw7Ci0gICAgICAgIAotICAgICAgICAvLyBidWlsZCBhdHRyIG1vZGVsIGFuZCBhbm9ueW1vdXMgdHlwZXMKLSAgICAgICAgU2NoZW1hQXR0cmlidXRlTW9kZWxJbXBsIGF0dHJNb2RlbDsKLSAgICAgICAgaWYgKGJhc2VUeXBlID09IG51bGwpCi0gICAgICAgICAgICBhdHRyTW9kZWwgPSBuZXcgU2NoZW1hQXR0cmlidXRlTW9kZWxJbXBsKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGF0dHJNb2RlbCA9IG5ldyBTY2hlbWFBdHRyaWJ1dGVNb2RlbEltcGwoYmFzZVR5cGUuZ2V0QXR0cmlidXRlTW9kZWwoKSk7Ci0gICAgICAgIHRyYW5zbGF0ZUF0dHJpYnV0ZU1vZGVsKHBhcnNlVHJlZSwgdGFyZ2V0TmFtZXNwYWNlLCBjaGFtZWxlb24sIGFub255bW91c1R5cGVzLCBzSW1wbCwgbnVsbCwgYXR0ck1vZGVsLCBiYXNlVHlwZSwgdHJ1ZSwgbnVsbCk7Ci0KLSAgICAgICAgLy8gc3VtbWFyaXplIHdpbGRjYXJkIGluZm9ybWF0aW9uCi0gICAgICAgIFdpbGRjYXJkUmVzdWx0IHdjRWx0ID0gc3VtbWFyaXplRWx0V2lsZGNhcmRzKGNvbnRlbnRNb2RlbCk7Ci0gICAgICAgIFdpbGRjYXJkUmVzdWx0IHdjQXR0ciA9IHN1bW1hcml6ZUF0dHJXaWxkY2FyZHMoYXR0ck1vZGVsKTsKLQotICAgICAgICAvLyBidWlsZCBzdGF0ZSBtYWNoaW5lIGFuZCB2ZXJpZnkgdGhhdCBjb250ZW50IG1vZGVsIGlzIGRldGVybWluaXN0aWMKLSAgICAgICAgaWYgKGNvbnRlbnRNb2RlbCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBidWlsZFN0YXRlTWFjaGluZShjb250ZW50TW9kZWwpOwotICAgICAgICAgICAgaWYgKCFTdHNjU3RhdGUuZ2V0KCkubm9VcGEoKSAmJiAhKChTY2hlbWFQYXJ0aWNsZUltcGwpY29udGVudE1vZGVsKS5pc0RldGVybWluaXN0aWMoKSkKLSAgICAgICAgICAgICAgICBTdHNjU3RhdGUuZ2V0KCkuZXJyb3IoIkNvbnRlbnQgbW9kZWwgdmlvbGF0ZXMgdGhlIHVuaXF1ZSBwYXJ0aWNsZSBhdHRyaWJ1dGlvbiBydWxlIiwgWG1sRXJyb3JDb250ZXh0Lk5PTkRFVEVSTUlOSVNUSUNfTU9ERUwsIHBhcnNlRWcpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gYnVpbGQgcHJvcGVydHkgbW9kZWwKLSAgICAgICAgLy8gZW1pdERCRygiQnVpbGRpbmcgY29udGVudCBNb2RlbCBmb3IgIiArIHNJbXBsKTsKLSAgICAgICAgTWFwIGVsZW1lbnRQcm9wZXJ0eU1vZGVsID0gYnVpbGRDb250ZW50UHJvcGVydHlNb2RlbEJ5UU5hbWUoY29udGVudE1vZGVsLCBzSW1wbCk7Ci0KLSAgICAgICAgLy8gYWRkIGF0dHJpYnV0ZSBwcm9wZXJ0eSBtb2RlbAotICAgICAgICBNYXAgYXR0cmlidXRlUHJvcGVydHlNb2RlbCA9IGJ1aWxkQXR0cmlidXRlUHJvcGVydHlNb2RlbEJ5UU5hbWUoYXR0ck1vZGVsLCBzSW1wbCk7Ci0KLSAgICAgICAgLy8gY29tcHV0ZSBlbXB0eS9lbGVtZW50L21peGVkCi0gICAgICAgIGludCBjb21wbGV4VmFyaWV0eSA9ICAoIG1peGVkID8gU2NoZW1hVHlwZS5NSVhFRF9DT05URU5UIDoKLSAgICAgICAgICAgIChjb250ZW50TW9kZWwgPT0gbnVsbCA/IFNjaGVtYVR5cGUuRU1QVFlfQ09OVEVOVCA6IFNjaGVtYVR5cGUuRUxFTUVOVF9DT05URU5UKSk7Ci0KLSAgICAgICAgLy8gbm93IGZpbGwgaW4gdGhlIGFjdHVhbCBzY2hlbWEgdHlwZSBpbXBsZW1lbnRhdGlvbgotICAgICAgICBpZiAoYmFzZVR5cGUgPT0gbnVsbCkKLSAgICAgICAgICAgIGJhc2VUeXBlID0gWG1sT2JqZWN0LnR5cGU7Ci0gICAgICAgIHNJbXBsLnNldEJhc2VUeXBlUmVmKGJhc2VUeXBlLmdldFJlZigpKTsKLSAgICAgICAgc0ltcGwuc2V0QmFzZURlcHRoKCgoU2NoZW1hVHlwZUltcGwpYmFzZVR5cGUpLmdldEJhc2VEZXB0aCgpICsgMSk7Ci0gICAgICAgIHNJbXBsLnNldERlcml2YXRpb25UeXBlKFNjaGVtYVR5cGUuRFRfRVhURU5TSU9OKTsKLSAgICAgICAgc0ltcGwuc2V0Q29tcGxleFR5cGVWYXJpZXR5KGNvbXBsZXhWYXJpZXR5KTsKLSAgICAgICAgc0ltcGwuc2V0Q29udGVudE1vZGVsKGNvbnRlbnRNb2RlbCwgYXR0ck1vZGVsLCBlbGVtZW50UHJvcGVydHlNb2RlbCwgYXR0cmlidXRlUHJvcGVydHlNb2RlbCwgaXNBbGwpOwotICAgICAgICBzSW1wbC5zZXRBbm9ueW1vdXNUeXBlUmVmcyhtYWtlUmVmQXJyYXkoYW5vbnltb3VzVHlwZXMpKTsKLSAgICAgICAgc0ltcGwuc2V0V2lsZGNhcmRTdW1tYXJ5KHdjRWx0LnR5cGVkV2lsZGNhcmRzLCB3Y0VsdC5oYXNXaWxkY2FyZHMsIHdjQXR0ci50eXBlZFdpbGRjYXJkcywgd2NBdHRyLmhhc1dpbGRjYXJkcyk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgcmVzb2x2ZVNjUmVzdHJpY3Rpb24oU2NoZW1hVHlwZUltcGwgc0ltcGwsIFNpbXBsZVJlc3RyaWN0aW9uVHlwZSBwYXJzZVRyZWUpCi0gICAgewotICAgICAgICBTY2hlbWFUeXBlIGJhc2VUeXBlOwotICAgICAgICBTdHNjU3RhdGUgc3RhdGUgPSBTdHNjU3RhdGUuZ2V0KCk7Ci0gICAgICAgIFN0cmluZyB0YXJnZXROYW1lc3BhY2UgPSBzSW1wbC5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgICAgYm9vbGVhbiBjaGFtZWxlb24gPSAoc0ltcGwuZ2V0Q2hhbWVsZW9uTmFtZXNwYWNlKCkgIT0gbnVsbCk7Ci0gICAgICAgIGlmIChwYXJzZVRyZWUuZ2V0U2ltcGxlVHlwZSgpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0YXRlLndhcm5pbmcoIk5lc3RlZCBzaW1wbGUgdHlwZXMgaW5zaWRlIHNpbXBsZSBjb250ZW50IHJlc3RyaWN0aW9ucyBhcmUgdW5zdXBwb3J0ZWQgLSBpZ25vcmluZyIsIFhtbEVycm9yQ29udGV4dC5JTExFR0FMX1JFU1RSSUNUSU9OLCBwYXJzZVRyZWUpOwotICAgICAgICAgICAgLy8gcmVjb3Zlcnk6IGlnbm9yZSB0aGUgbmVzdGVkIHNpbXBsZSB0eXBlIGVsZW1lbnQuCi0gICAgICAgIH0KLSAgICAgICAgaWYgKHBhcnNlVHJlZS5nZXRCYXNlKCkgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkEgc2ltcGxlQ29udGVudCByZXN0cmljdGlvbiBtdXN0IGRlZmluZSBhIGJhc2UgdHlwZSIsIFhtbEVycm9yQ29udGV4dC5NSVNTSU5HX0JBU0UsIHBhcnNlVHJlZSk7Ci0gICAgICAgICAgICAvLyByZWNvdmVyeTogZXh0ZW5kcyBBTllfU0lNUExFIHR5cGUKLSAgICAgICAgICAgIGJhc2VUeXBlID0gQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfQU5ZX1NJTVBMRTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzSW1wbC5pc1JlZGVmaW5pdGlvbigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJhc2VUeXBlID0gc3RhdGUuZmluZFJlZGVmaW5lZEdsb2JhbFR5cGUocGFyc2VUcmVlLmdldEJhc2UoKSwgc0ltcGwuZ2V0Q2hhbWVsZW9uTmFtZXNwYWNlKCksIHNJbXBsLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VUeXBlICE9IG51bGwgJiYgIWJhc2VUeXBlLmdldE5hbWUoKS5lcXVhbHMoc0ltcGwuZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkEgdHlwZSByZWRlZmluaXRpb24gbXVzdCByZXN0cmljdCB0aGUgb3JpZ2luYWwgdHlwZSBkZWZpbml0aW9uIiwgWG1sRXJyb3JDb250ZXh0LkdFTkVSSUNfRVJST1IsIHBhcnNlVHJlZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYmFzZVR5cGUgPSBzdGF0ZS5maW5kR2xvYmFsVHlwZShwYXJzZVRyZWUuZ2V0QmFzZSgpLCBzSW1wbC5nZXRDaGFtZWxlb25OYW1lc3BhY2UoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYmFzZVR5cGUgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdGF0ZS5ub3RGb3VuZEVycm9yKHBhcnNlVHJlZS5nZXRCYXNlKCksIFhtbEVycm9yQ29udGV4dC5UWVBFX05PVF9GT1VORCwgcGFyc2VUcmVlLnhnZXRCYXNlKCkpOwotICAgICAgICAgICAgICAgIC8vIHJlY292ZXJ5OiBleHRlbmRzIEFOWV9TSU1QTEUgdHlwZQotICAgICAgICAgICAgICAgIGJhc2VUeXBlID0gQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfQU5ZX1NJTVBMRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJlY3Vyc2lvbgotICAgICAgICBTdHNjUmVzb2x2ZXIucmVzb2x2ZVR5cGUoKFNjaGVtYVR5cGVJbXBsKWJhc2VUeXBlKTsKLQotICAgICAgICBpZiAoYmFzZVR5cGUuaXNTaW1wbGVUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0YXRlLmVycm9yKCJTaW1wbGUgdHlwZSAnIiArIGJhc2VUeXBlLmdldE5hbWUoKSArICInIGNhbm5vdCBiZSB1c2VkIGFzIHRoZSBiYXNlIHR5cGUgb2YgYSBzaW1wbGUgY29udGVudCByZXN0cmljdGlvbi4gKFVzZSBleHRlbnNpb24gaW5zdGVhZC4pIiwgWG1sRXJyb3JDb250ZXh0LlNJTVBMRV9CQVNFX05PVF9TSU1QTEUsIHBhcnNlVHJlZSk7Ci0gICAgICAgICAgICAvLyByZWNvdmVyeTogZXh0ZW5kcyBBTllfU0lNUExFIHR5cGUKLSAgICAgICAgICAgIGJhc2VUeXBlID0gQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfQU5ZX1NJTVBMRTsKLSAgICAgICAgfQotICAgICAgICAvLyBCVUdCVUc6IGNhbiByZXN0cmljdCBtaXhlZCBjb250ZW50IGFzIGxvbmcgYXMgYWxsIGNoaWxkIGVsZW1lbnRzIGFyZSBvcHRpb25hbAotICAgICAgICBlbHNlIGlmIChiYXNlVHlwZS5nZXRDb250ZW50VHlwZSgpICE9IFNjaGVtYVR5cGUuU0lNUExFX0NPTlRFTlQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0YXRlLmVycm9yKCJUaGUgc3BlY2lmaWVkIGJhc2UgdHlwZSAiICsgYmFzZVR5cGUudG9TdHJpbmcoKSArICIgZG9lcyBub3QgaGF2ZSBzaW1wbGUgY29udGVudC4iLCBYbWxFcnJvckNvbnRleHQuU0lNUExFX0JBU0VfTk9UX1NJTVBMRSwgcGFyc2VUcmVlKTsKLSAgICAgICAgICAgIC8vIHJlY292ZXJ5OiBleHRlbmRzIEFOWV9TSU1QTEUgdHlwZQotICAgICAgICAgICAgYmFzZVR5cGUgPSBCdWlsdGluU2NoZW1hVHlwZVN5c3RlbS5TVF9BTllfU0lNUExFOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJhc2VUeXBlICE9IG51bGwgJiYgYmFzZVR5cGUuZmluYWxSZXN0cmljdGlvbigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0ZS5lcnJvcigiQ2Fubm90IHJlc3RyaWN0IGEgZmluYWwgdHlwZSIsIFhtbEVycm9yQ29udGV4dC5DQU5OT1RfREVSSVZFX0ZJTkFMLCBwYXJzZVRyZWUueGdldEJhc2UoKSk7Ci0gICAgICAgICAgICAvLyByZWNvdmVyeToganVzdCBrZWVwIGdvaW5nCi0gICAgICAgIH0KLQotICAgICAgICAvLyBidWlsZCBhdHRyIG1vZGVsIGFuZCBhbm9ueW1vdXMgdHlwZXMKLSAgICAgICAgTGlzdCBhbm9ueW1vdXNUeXBlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgU2NoZW1hQXR0cmlidXRlTW9kZWxJbXBsIGF0dHJNb2RlbDsKLSAgICAgICAgaWYgKGJhc2VUeXBlID09IG51bGwpCi0gICAgICAgICAgICBhdHRyTW9kZWwgPSBuZXcgU2NoZW1hQXR0cmlidXRlTW9kZWxJbXBsKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGF0dHJNb2RlbCA9IG5ldyBTY2hlbWFBdHRyaWJ1dGVNb2RlbEltcGwoYmFzZVR5cGUuZ2V0QXR0cmlidXRlTW9kZWwoKSk7Ci0gICAgICAgIHRyYW5zbGF0ZUF0dHJpYnV0ZU1vZGVsKHBhcnNlVHJlZSwgdGFyZ2V0TmFtZXNwYWNlLCBjaGFtZWxlb24sIGFub255bW91c1R5cGVzLCBzSW1wbCwgbnVsbCwgYXR0ck1vZGVsLCBiYXNlVHlwZSwgZmFsc2UsIG51bGwpOwotCi0gICAgICAgIC8vIHN1bW1hcml6ZSB3aWxkY2FyZCBpbmZvcm1hdGlvbgotICAgICAgICBXaWxkY2FyZFJlc3VsdCB3Y0F0dHIgPSBzdW1tYXJpemVBdHRyV2lsZGNhcmRzKGF0dHJNb2RlbCk7Ci0KLSAgICAgICAgLy8gYWRkIGF0dHJpYnV0ZSBwcm9wZXJ0eSBtb2RlbAotICAgICAgICBNYXAgYXR0cmlidXRlUHJvcGVydHlNb2RlbCA9IGJ1aWxkQXR0cmlidXRlUHJvcGVydHlNb2RlbEJ5UU5hbWUoYXR0ck1vZGVsLCBzSW1wbCk7Ci0KLSAgICAgICAgLy8gbm93IGZpbGwgaW4gdGhlIGFjdHVhbCBzY2hlbWEgdHlwZSBpbXBsZW1lbnRhdGlvbgotICAgICAgICBzSW1wbC5zZXRCYXNlVHlwZVJlZihiYXNlVHlwZS5nZXRSZWYoKSk7Ci0gICAgICAgIHNJbXBsLnNldEJhc2VEZXB0aCgoKFNjaGVtYVR5cGVJbXBsKWJhc2VUeXBlKS5nZXRCYXNlRGVwdGgoKSArIDEpOwotICAgICAgICBzSW1wbC5zZXREZXJpdmF0aW9uVHlwZShTY2hlbWFUeXBlLkRUX1JFU1RSSUNUSU9OKTsKLSAgICAgICAgc0ltcGwuc2V0QW5vbnltb3VzVHlwZVJlZnMobWFrZVJlZkFycmF5KGFub255bW91c1R5cGVzKSk7Ci0gICAgICAgIHNJbXBsLnNldFdpbGRjYXJkU3VtbWFyeShRTmFtZVNldC5FTVBUWSwgZmFsc2UsIHdjQXR0ci50eXBlZFdpbGRjYXJkcywgd2NBdHRyLmhhc1dpbGRjYXJkcyk7Ci0gICAgICAgIHNJbXBsLnNldENvbXBsZXhUeXBlVmFyaWV0eShTY2hlbWFUeXBlLlNJTVBMRV9DT05URU5UKTsKLSAgICAgICAgc0ltcGwuc2V0Q29udGVudE1vZGVsKG51bGwsIGF0dHJNb2RlbCwgbnVsbCwgYXR0cmlidXRlUHJvcGVydHlNb2RlbCwgZmFsc2UpOwotICAgICAgICBzSW1wbC5zZXRTaW1wbGVUeXBlVmFyaWV0eShiYXNlVHlwZS5nZXRTaW1wbGVWYXJpZXR5KCkpOwotICAgICAgICBzSW1wbC5zZXRQcmltaXRpdmVUeXBlUmVmKGJhc2VUeXBlLmdldFByaW1pdGl2ZVR5cGUoKSA9PSBudWxsID8gbnVsbCA6IGJhc2VUeXBlLmdldFByaW1pdGl2ZVR5cGUoKS5nZXRSZWYoKSk7Ci0gICAgICAgIHN3aXRjaCAoc0ltcGwuZ2V0U2ltcGxlVmFyaWV0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuTElTVDoKLSAgICAgICAgICAgICAgICBzSW1wbC5zZXRMaXN0SXRlbVR5cGVSZWYoYmFzZVR5cGUuZ2V0TGlzdEl0ZW1UeXBlKCkuZ2V0UmVmKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuVU5JT046Ci0gICAgICAgICAgICAgICAgc0ltcGwuc2V0VW5pb25NZW1iZXJUeXBlUmVmcyhtYWtlUmVmQXJyYXkoQXJyYXlzLmFzTGlzdChiYXNlVHlwZS5nZXRVbmlvbk1lbWJlclR5cGVzKCkpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBkZWFsIHdpdGggZmFjZXRzCi0gICAgICAgIFN0c2NTaW1wbGVUeXBlUmVzb2x2ZXIucmVzb2x2ZUZhY2V0cyhzSW1wbCwgcGFyc2VUcmVlLCAoU2NoZW1hVHlwZUltcGwpYmFzZVR5cGUpOwotCi0gICAgICAgIC8vIG5vdyBjb21wdXRlIG91ciBpbnRyaW5zaWMgcHJvcGVydGllcwotICAgICAgICBTdHNjU2ltcGxlVHlwZVJlc29sdmVyLnJlc29sdmVGdW5kYW1lbnRhbEZhY2V0cyhzSW1wbCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgcmVzb2x2ZVNjRXh0ZW5zaW9uKFNjaGVtYVR5cGVJbXBsIHNJbXBsLCBTaW1wbGVFeHRlbnNpb25UeXBlIHBhcnNlVHJlZSkKLSAgICB7Ci0gICAgICAgIFNjaGVtYVR5cGUgYmFzZVR5cGU7Ci0gICAgICAgIFN0c2NTdGF0ZSBzdGF0ZSA9IFN0c2NTdGF0ZS5nZXQoKTsKLSAgICAgICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IHNJbXBsLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgICBib29sZWFuIGNoYW1lbGVvbiA9IChzSW1wbC5nZXRDaGFtZWxlb25OYW1lc3BhY2UoKSAhPSBudWxsKTsKLSAgICAgICAgaWYgKHBhcnNlVHJlZS5nZXRCYXNlKCkgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkEgc2ltcGxlQ29udGVudCBleHRlbnNpb24gbXVzdCBkZWZpbmUgYSBiYXNlIHR5cGUiLCBYbWxFcnJvckNvbnRleHQuTUlTU0lOR19CQVNFLCBwYXJzZVRyZWUpOwotICAgICAgICAgICAgLy8gcmVjb3Zlcnk6IGV4dGVuZHMgQU5ZX1NJTVBMRSB0eXBlCi0gICAgICAgICAgICBiYXNlVHlwZSA9IEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLlNUX0FOWV9TSU1QTEU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoc0ltcGwuaXNSZWRlZmluaXRpb24oKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBiYXNlVHlwZSA9IHN0YXRlLmZpbmRSZWRlZmluZWRHbG9iYWxUeXBlKHBhcnNlVHJlZS5nZXRCYXNlKCksIHNJbXBsLmdldENoYW1lbGVvbk5hbWVzcGFjZSgpLCBzSW1wbC5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgIGlmIChiYXNlVHlwZSAhPSBudWxsICYmICFiYXNlVHlwZS5nZXROYW1lKCkuZXF1YWxzKHNJbXBsLmdldE5hbWUoKSkpCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJBIHR5cGUgcmVkZWZpbml0aW9uIG11c3QgZXh0ZW5kIHRoZSBvcmlnaW5hbCB0eXBlIGRlZmluaXRpb24iLCBYbWxFcnJvckNvbnRleHQuR0VORVJJQ19FUlJPUiwgcGFyc2VUcmVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBiYXNlVHlwZSA9IHN0YXRlLmZpbmRHbG9iYWxUeXBlKHBhcnNlVHJlZS5nZXRCYXNlKCksIHNJbXBsLmdldENoYW1lbGVvbk5hbWVzcGFjZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChiYXNlVHlwZSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN0YXRlLm5vdEZvdW5kRXJyb3IocGFyc2VUcmVlLmdldEJhc2UoKSwgWG1sRXJyb3JDb250ZXh0LlRZUEVfTk9UX0ZPVU5ELCBwYXJzZVRyZWUueGdldEJhc2UoKSk7Ci0gICAgICAgICAgICAgICAgLy8gcmVjb3Zlcnk6IGV4dGVuZHMgQU5ZX1NJTVBMRSB0eXBlCi0gICAgICAgICAgICAgICAgYmFzZVR5cGUgPSBCdWlsdGluU2NoZW1hVHlwZVN5c3RlbS5TVF9BTllfU0lNUExFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVjdXJzaW9uCi0gICAgICAgIFN0c2NSZXNvbHZlci5yZXNvbHZlVHlwZSgoU2NoZW1hVHlwZUltcGwpYmFzZVR5cGUpOwotCi0gICAgICAgIGlmICghYmFzZVR5cGUuaXNTaW1wbGVUeXBlKCkgJiYgYmFzZVR5cGUuZ2V0Q29udGVudFR5cGUoKSAhPSBTY2hlbWFUeXBlLlNJTVBMRV9DT05URU5UKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0ZS5lcnJvcigiVGhlIHNwZWNpZmllZCBiYXNlIHR5cGUgIiArIGJhc2VUeXBlLnRvU3RyaW5nKCkgKyAiIGRvZXMgbm90IGhhdmUgc2ltcGxlIGNvbnRlbnQuIiwgWG1sRXJyb3JDb250ZXh0LlNJTVBMRV9CQVNFX05PVF9TSU1QTEUsIHBhcnNlVHJlZSk7Ci0gICAgICAgICAgICAvLyByZWNvdmVyeTogZXh0ZW5kcyBBTllfU0lNUExFIHR5cGUKLSAgICAgICAgICAgIGJhc2VUeXBlID0gQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfQU5ZX1NJTVBMRTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChiYXNlVHlwZSAhPSBudWxsICYmIGJhc2VUeXBlLmZpbmFsRXh0ZW5zaW9uKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0YXRlLmVycm9yKCJDYW5ub3QgZXh0ZW5kIGEgZmluYWwgdHlwZSIsIFhtbEVycm9yQ29udGV4dC5DQU5OT1RfREVSSVZFX0ZJTkFMLCBwYXJzZVRyZWUueGdldEJhc2UoKSk7Ci0gICAgICAgICAgICAvLyByZWNvdmVyeToganVzdCBrZWVwIGdvaW5nCi0gICAgICAgIH0KLQotICAgICAgICAvLyBidWlsZCBhdHRyIG1vZGVsIGFuZCBhbm9ueW1vdXMgdHlwZXMKLSAgICAgICAgTGlzdCBhbm9ueW1vdXNUeXBlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgU2NoZW1hQXR0cmlidXRlTW9kZWxJbXBsIGF0dHJNb2RlbDsKLSAgICAgICAgYXR0ck1vZGVsID0gbmV3IFNjaGVtYUF0dHJpYnV0ZU1vZGVsSW1wbChiYXNlVHlwZS5nZXRBdHRyaWJ1dGVNb2RlbCgpKTsKLSAgICAgICAgdHJhbnNsYXRlQXR0cmlidXRlTW9kZWwocGFyc2VUcmVlLCB0YXJnZXROYW1lc3BhY2UsIGNoYW1lbGVvbiwgYW5vbnltb3VzVHlwZXMsIHNJbXBsLCBudWxsLCBhdHRyTW9kZWwsIGJhc2VUeXBlLCB0cnVlLCBudWxsKTsKLQotICAgICAgICAvLyBzdW1tYXJpemUgd2lsZGNhcmQgaW5mb3JtYXRpb24KLSAgICAgICAgV2lsZGNhcmRSZXN1bHQgd2NBdHRyID0gc3VtbWFyaXplQXR0cldpbGRjYXJkcyhhdHRyTW9kZWwpOwotCi0gICAgICAgIC8vIGFkZCBhdHRyaWJ1dGUgcHJvcGVydHkgbW9kZWwKLSAgICAgICAgTWFwIGF0dHJpYnV0ZVByb3BlcnR5TW9kZWwgPSBidWlsZEF0dHJpYnV0ZVByb3BlcnR5TW9kZWxCeVFOYW1lKGF0dHJNb2RlbCwgc0ltcGwpOwotCi0gICAgICAgIC8vIG5vdyBmaWxsIGluIHRoZSBhY3R1YWwgc2NoZW1hIHR5cGUgaW1wbGVtZW50YXRpb24KLSAgICAgICAgc0ltcGwuc2V0QmFzZVR5cGVSZWYoYmFzZVR5cGUuZ2V0UmVmKCkpOwotICAgICAgICBzSW1wbC5zZXRCYXNlRGVwdGgoKChTY2hlbWFUeXBlSW1wbCliYXNlVHlwZSkuZ2V0QmFzZURlcHRoKCkgKyAxKTsKLSAgICAgICAgc0ltcGwuc2V0RGVyaXZhdGlvblR5cGUoU2NoZW1hVHlwZS5EVF9FWFRFTlNJT04pOwotICAgICAgICBzSW1wbC5zZXRBbm9ueW1vdXNUeXBlUmVmcyhtYWtlUmVmQXJyYXkoYW5vbnltb3VzVHlwZXMpKTsKLSAgICAgICAgc0ltcGwuc2V0V2lsZGNhcmRTdW1tYXJ5KFFOYW1lU2V0LkVNUFRZLCBmYWxzZSwgd2NBdHRyLnR5cGVkV2lsZGNhcmRzLCB3Y0F0dHIuaGFzV2lsZGNhcmRzKTsKLSAgICAgICAgc0ltcGwuc2V0Q29tcGxleFR5cGVWYXJpZXR5KFNjaGVtYVR5cGUuU0lNUExFX0NPTlRFTlQpOwotICAgICAgICBzSW1wbC5zZXRDb250ZW50TW9kZWwobnVsbCwgYXR0ck1vZGVsLCBudWxsLCBhdHRyaWJ1dGVQcm9wZXJ0eU1vZGVsLCBmYWxzZSk7Ci0gICAgICAgIHNJbXBsLnNldFNpbXBsZVR5cGVWYXJpZXR5KGJhc2VUeXBlLmdldFNpbXBsZVZhcmlldHkoKSk7Ci0gICAgICAgIHNJbXBsLnNldFByaW1pdGl2ZVR5cGVSZWYoYmFzZVR5cGUuZ2V0UHJpbWl0aXZlVHlwZSgpID09IG51bGwgPyBudWxsIDogYmFzZVR5cGUuZ2V0UHJpbWl0aXZlVHlwZSgpLmdldFJlZigpKTsKLSAgICAgICAgc3dpdGNoIChzSW1wbC5nZXRTaW1wbGVWYXJpZXR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5MSVNUOgotICAgICAgICAgICAgICAgIHNJbXBsLnNldExpc3RJdGVtVHlwZVJlZihiYXNlVHlwZS5nZXRMaXN0SXRlbVR5cGUoKS5nZXRSZWYoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5VTklPTjoKLSAgICAgICAgICAgICAgICBzSW1wbC5zZXRVbmlvbk1lbWJlclR5cGVSZWZzKG1ha2VSZWZBcnJheShBcnJheXMuYXNMaXN0KGJhc2VUeXBlLmdldFVuaW9uTWVtYmVyVHlwZXMoKSkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGRlYWwgd2l0aCBmYWNldHMKLSAgICAgICAgU3RzY1NpbXBsZVR5cGVSZXNvbHZlci5yZXNvbHZlRmFjZXRzKHNJbXBsLCBudWxsLCAoU2NoZW1hVHlwZUltcGwpYmFzZVR5cGUpOwotCi0gICAgICAgIC8vIG5vdyBjb21wdXRlIG91ciBpbnRyaW5zaWMgcHJvcGVydGllcwotICAgICAgICBTdHNjU2ltcGxlVHlwZVJlc29sdmVyLnJlc29sdmVGdW5kYW1lbnRhbEZhY2V0cyhzSW1wbCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGNsYXNzIFdpbGRjYXJkUmVzdWx0Ci0gICAgewotICAgICAgICBXaWxkY2FyZFJlc3VsdChRTmFtZVNldCB0eXBlZFdpbGRjYXJkcywgYm9vbGVhbiBoYXNXaWxkY2FyZHMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMudHlwZWRXaWxkY2FyZHMgPSB0eXBlZFdpbGRjYXJkczsKLSAgICAgICAgICAgIHRoaXMuaGFzV2lsZGNhcmRzID0gaGFzV2lsZGNhcmRzOwotICAgICAgICB9Ci0gICAgICAgIFFOYW1lU2V0IHR5cGVkV2lsZGNhcmRzOwotICAgICAgICBib29sZWFuIGhhc1dpbGRjYXJkczsKLSAgICB9Ci0KLSAgICBzdGF0aWMgV2lsZGNhcmRSZXN1bHQgc3VtbWFyaXplQXR0cldpbGRjYXJkcyhTY2hlbWFBdHRyaWJ1dGVNb2RlbCBhdHRyTW9kZWwpCi0gICAgewotICAgICAgICBpZiAoYXR0ck1vZGVsLmdldFdpbGRjYXJkUHJvY2VzcygpID09IFNjaGVtYUF0dHJpYnV0ZU1vZGVsLk5PTkUpCi0gICAgICAgICAgICByZXR1cm4gbmV3IFdpbGRjYXJkUmVzdWx0KFFOYW1lU2V0LkVNUFRZLCBmYWxzZSk7Ci0gICAgICAgIGlmIChhdHRyTW9kZWwuZ2V0V2lsZGNhcmRQcm9jZXNzKCkgPT0gU2NoZW1hQXR0cmlidXRlTW9kZWwuU0tJUCkKLSAgICAgICAgICAgIHJldHVybiBuZXcgV2lsZGNhcmRSZXN1bHQoUU5hbWVTZXQuRU1QVFksIHRydWUpOwotICAgICAgICByZXR1cm4gbmV3IFdpbGRjYXJkUmVzdWx0KGF0dHJNb2RlbC5nZXRXaWxkY2FyZFNldCgpLCB0cnVlKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgV2lsZGNhcmRSZXN1bHQgc3VtbWFyaXplRWx0V2lsZGNhcmRzKFNjaGVtYVBhcnRpY2xlIGNvbnRlbnRNb2RlbCkKLSAgICB7Ci0gICAgICAgIGlmIChjb250ZW50TW9kZWwgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBXaWxkY2FyZFJlc3VsdChRTmFtZVNldC5FTVBUWSwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChjb250ZW50TW9kZWwuZ2V0UGFydGljbGVUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQUxMOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5TRVFVRU5DRToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQ0hPSUNFOgotICAgICAgICAgICAgICAgIFFOYW1lU2V0QnVpbGRlciBzZXQgPSBuZXcgUU5hbWVTZXRCdWlsZGVyKCk7Ci0gICAgICAgICAgICAgICAgYm9vbGVhbiBoYXNXaWxkY2FyZHMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRNb2RlbC5jb3VudE9mUGFydGljbGVDaGlsZCgpOyBpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBXaWxkY2FyZFJlc3VsdCBpbm5lciA9IHN1bW1hcml6ZUVsdFdpbGRjYXJkcyhjb250ZW50TW9kZWwuZ2V0UGFydGljbGVDaGlsZChpKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNldC5hZGRBbGwoaW5uZXIudHlwZWRXaWxkY2FyZHMpOwotICAgICAgICAgICAgICAgICAgICBoYXNXaWxkY2FyZHMgfD0gaW5uZXIuaGFzV2lsZGNhcmRzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdpbGRjYXJkUmVzdWx0KHNldC50b1FOYW1lU2V0KCksIGhhc1dpbGRjYXJkcyk7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLldJTERDQVJEOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV2lsZGNhcmRSZXN1bHQoCi0gICAgICAgICAgICAgICAgICAgIChjb250ZW50TW9kZWwuZ2V0V2lsZGNhcmRQcm9jZXNzKCkgPT0gU2NoZW1hUGFydGljbGUuU0tJUCkgPwotICAgICAgICAgICAgICAgICAgICBRTmFtZVNldC5FTVBUWSA6IGNvbnRlbnRNb2RlbC5nZXRXaWxkY2FyZFNldCgpLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UgZmFsbHRocm91Z2gKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdpbGRjYXJkUmVzdWx0KFFOYW1lU2V0LkVNUFRZLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCB0cmFuc2xhdGVBdHRyaWJ1dGVNb2RlbCgKLSAgICAgICAgICAgIFhtbE9iamVjdCBwYXJzZVRyZWUsIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsIGJvb2xlYW4gY2hhbWVsZW9uLAotICAgICAgICAgICAgTGlzdCBhbm9ueW1vdXNUeXBlcywgU2NoZW1hVHlwZSBvdXRlclR5cGUsCi0gICAgICAgICAgICBTZXQgc2VlbkF0dHJpYnV0ZXMsIFNjaGVtYUF0dHJpYnV0ZU1vZGVsSW1wbCByZXN1bHQsIFNjaGVtYVR5cGUgYmFzZVR5cGUsIGJvb2xlYW4gZXh0ZW5zaW9uLCBRTmFtZSByZWRlZmluaXRpb25Gb3IpCi0gICAgewotICAgICAgICBTdHNjU3RhdGUgc3RhdGUgPSBTdHNjU3RhdGUuZ2V0KCk7Ci0gICAgICAgIGlmIChzZWVuQXR0cmlidXRlcyA9PSBudWxsKQotICAgICAgICAgICAgc2VlbkF0dHJpYnV0ZXMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICBib29sZWFuIHNlZW5XaWxkY2FyZCA9IGZhbHNlOwotICAgICAgICBib29sZWFuIHNlZW5SZWRlZmluaXRpb24gPSBmYWxzZTsKLSAgICAgICAgU2NoZW1hQXR0cmlidXRlTW9kZWwgYmFzZU1vZGVsID0gbnVsbDsKLSAgICAgICAgaWYgKGJhc2VUeXBlICE9IG51bGwpCi0gICAgICAgICAgICBiYXNlTW9kZWwgPSBiYXNlVHlwZS5nZXRBdHRyaWJ1dGVNb2RlbCgpOwotCi0gICAgICAgIFhtbEN1cnNvciBjdXIgPSBwYXJzZVRyZWUubmV3Q3Vyc29yKCk7Ci0KLSAgICAgICAgZm9yIChib29sZWFuIG1vcmUgPSBjdXIudG9GaXJzdENoaWxkKCk7IG1vcmU7IG1vcmUgPSBjdXIudG9OZXh0U2libGluZygpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHRyYW5zbGF0ZUF0dHJpYnV0ZUNvZGUoY3VyLmdldE5hbWUoKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBBVFRSSUJVVEVfQ09ERToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSB4c2RhdHRyID0gKEF0dHJpYnV0ZSljdXIuZ2V0T2JqZWN0KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgU2NoZW1hTG9jYWxBdHRyaWJ1dGUgc0F0dHIgPSBTdHNjVHJhbnNsYXRvci50cmFuc2xhdGVBdHRyaWJ1dGUoeHNkYXR0ciwgdGFyZ2V0TmFtZXNwYWNlLCBjaGFtZWxlb24sIGFub255bW91c1R5cGVzLCBvdXRlclR5cGUsIGJhc2VNb2RlbCwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzQXR0ciA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNlZW5BdHRyaWJ1dGVzLmNvbnRhaW5zKHNBdHRyLmdldE5hbWUoKSkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJBdHRyaWJ1dGUgd2l0aCB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZGVmaW5lZCAiLCBYbWxFcnJvckNvbnRleHQuRFVQTElDQVRFX0FUVFJJQlVURV9OQU1FLCB4c2RhdHRyLnhnZXROYW1lKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIGlnbm9yZSB0aGUgZHVwbGljYXRlIGF0dHIKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHNlZW5BdHRyaWJ1dGVzLmFkZChzQXR0ci5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2VNb2RlbCAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTY2hlbWFMb2NhbEF0dHJpYnV0ZSBiYXNlQXR0ciA9IGJhc2VNb2RlbC5nZXRBdHRyaWJ1dGUoc0F0dHIuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlQXR0ciA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZXh0ZW5zaW9uKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFiYXNlTW9kZWwuZ2V0V2lsZGNhcmRTZXQoKS5jb250YWlucyhzQXR0ci5nZXROYW1lKCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkEgcmVzdHJpY3Rpb24gY2Fubm90IGludHJvZHVjZSBhIG5ldyBhdHRyaWJ1dGUgdGhhdCB3b3VsZCBub3QgYmUgYWxsb3dlZCBpbiB0aGUgYmFzZSB0eXBlLiIsIFhtbEVycm9yQ29udGV4dC5EVVBMSUNBVEVfQVRUUklCVVRFX05BTUUsIHhzZGF0dHIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9uKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNBdHRyLmdldFVzZSgpID09IFNjaGVtYUxvY2FsQXR0cmlidXRlLlBST0hJQklURUQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvcigiQW4gZXh0ZW5zaW9uIGNhbm5vdCBwcm9oaWJpdCBhbiBhdHRyaWJ1dGUgZnJvbSB0aGUgYmFzZSB0eXBlOyB1c2UgcmVzdHJpY3Rpb24gaW5zdGVhZC4iLCBYbWxFcnJvckNvbnRleHQuRFVQTElDQVRFX0FUVFJJQlVURV9OQU1FLCB4c2RhdHRyLnhnZXRVc2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzQXR0ci5nZXRVc2UoKSAhPSBTY2hlbWFMb2NhbEF0dHJpYnV0ZS5SRVFVSVJFRCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2VBdHRyLmdldFVzZSgpID09IFNjaGVtYUxvY2FsQXR0cmlidXRlLlJFUVVJUkVEKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJBIHJlc3RyaWN0aW9uIGNhbm5vdCBtb2RpZnkgYW4gYXR0cmlidXRlIHRoYXQgaXMgcmVxdWlyZWQgaW4gdGhlIGJhc2UgdHlwZSB0byBiZSBwcm9oaWJpdGVkIG9yIG9wdGlvbmFsLiIsIFhtbEVycm9yQ29udGV4dC5EVVBMSUNBVEVfQVRUUklCVVRFX05BTUUsIHhzZGF0dHIueGdldFVzZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNBdHRyLmdldFVzZSgpID09IFNjaGVtYUxvY2FsQXR0cmlidXRlLlBST0hJQklURUQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnJlbW92ZVByb2hpYml0ZWRBdHRyaWJ1dGUoc0F0dHIuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChzQXR0ci5nZXRVc2UoKSAhPSBTY2hlbWFMb2NhbEF0dHJpYnV0ZS5QUk9ISUJJVEVEKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEF0dHJpYnV0ZShzQXR0cik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNBdHRyLmdldERlZmF1bHRUZXh0KCkgIT0gbnVsbCAmJiAhc0F0dHIuaXNGaXhlZCgpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc0F0dHIuZ2V0VXNlKCkgIT0gU2NoZW1hTG9jYWxBdHRyaWJ1dGUuT1BUSU9OQUwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkFuIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbiBtdXN0IGJlIG9wdGlvbmFsIGluIG9yZGVyIHRvIHNwZWNpZnkgYSBkZWZhdWx0IiwgWG1sRXJyb3JDb250ZXh0LkdFTkVSSUNfRVJST1IsIHhzZGF0dHIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBBTllfQVRUUklCVVRFX0NPREU6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBXaWxkY2FyZCB4c2R3YyA9IChXaWxkY2FyZCljdXIuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZWVuV2lsZGNhcmQpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJPbmx5IG9uZSBhdHRyaWJ1dGUgd2lsZGNhcmQgYWxsb3dlZCIsIFhtbEVycm9yQ29udGV4dC5EVVBMSUNBVEVfQU5ZX0FUVFJJQlVURSwgeHNkd2MpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIGlnbm9yZSB0aGUgZXh0cmEgd2lsZGNhcmQKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBzZWVuV2lsZGNhcmQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBOYW1lc3BhY2VMaXN0IG5zTGlzdCA9IHhzZHdjLnhnZXROYW1lc3BhY2UoKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5zVGV4dDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5zTGlzdCA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgbnNUZXh0ID0gIiMjYW55IjsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgbnNUZXh0ID0gbnNMaXN0LmdldFN0cmluZ1ZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgIFFOYW1lU2V0IHdjc2V0ID0gUU5hbWVTZXQuZm9yV2lsZGNhcmROYW1lc3BhY2VTdHJpbmcobnNUZXh0LCB0YXJnZXROYW1lc3BhY2UpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2VNb2RlbCAhPSBudWxsICYmICFleHRlbnNpb24pCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlTW9kZWwuZ2V0V2lsZGNhcmRTZXQoKSA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJBIHJlc3RyaWN0aW9uIGNhbm5vdCBhZGQgYW55QXR0cmlidXRlIHdoZW4gdGhlIGJhc2UgdHlwZSBkb2VzIG5vdCBoYXZlIGFueUF0dHJpYnV0ZSIsIFhtbEVycm9yQ29udGV4dC5EVVBMSUNBVEVfQU5ZX0FUVFJJQlVURSwgeHNkd2MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBpZ25vcmUgdGhlIGV4dHJhIHdpbGRjYXJkCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghYmFzZU1vZGVsLmdldFdpbGRjYXJkU2V0KCkuY29udGFpbnNBbGwod2NzZXQpKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJUaGUgYW55QXR0cmlidXRlIG5hbWVzcGFjZT0nIiArIG5zVGV4dCArICInIGlzIG5vdCBhIHN1YnNldCBvZiB0aGUgYmFzZSB0eXBlIGFueUF0dHJpYnV0ZSIsIFhtbEVycm9yQ29udGV4dC5EVVBMSUNBVEVfQU5ZX0FUVFJJQlVURSwgeHNkd2MpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBpZ25vcmUgdGhlIHJlc3RyaWN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGludCB3Y3Byb2Nlc3MgPSB0cmFuc2xhdGVXaWxkY2FyZFByb2Nlc3MoeHNkd2MueGdldFByb2Nlc3NDb250ZW50cygpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5nZXRXaWxkY2FyZFByb2Nlc3MoKSA9PSBTY2hlbWFBdHRyaWJ1dGVNb2RlbC5OT05FKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2V0V2lsZGNhcmRTZXQod2NzZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNldFdpbGRjYXJkUHJvY2Vzcyh3Y3Byb2Nlc3MpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dGVuc2lvbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2V0V2lsZGNhcmRTZXQod2NzZXQudW5pb24ocmVzdWx0LmdldFdpbGRjYXJkU2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2V0V2lsZGNhcmRQcm9jZXNzKHdjcHJvY2Vzcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNldFdpbGRjYXJkU2V0KHdjc2V0LmludGVyc2VjdChyZXN1bHQuZ2V0V2lsZGNhcmRTZXQoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtlZXAgb2xkIHByb2Nlc3MKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSBBVFRSSUJVVEVfR1JPVVBfQ09ERToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUdyb3VwUmVmIHhzZGFnID0gKEF0dHJpYnV0ZUdyb3VwUmVmKWN1ci5nZXRPYmplY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgUU5hbWUgcmVmID0geHNkYWcuZ2V0UmVmKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZWYgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkF0dHJpYnV0ZSBncm91cCByZWZlcmVuY2UgbXVzdCBoYXZlIGEgcmVmIGF0dHJpYnV0ZSIsIFhtbEVycm9yQ29udGV4dC5BVFRSSUJVVEVfR1JPVVBfTUlTU0lOR19SRUYsIHhzZGFnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIFNjaGVtYUF0dHJpYnV0ZUdyb3VwSW1wbCBncm91cDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlZGVmaW5pdGlvbkZvciAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBncm91cCA9IHN0YXRlLmZpbmRSZWRlZmluZWRBdHRyaWJ1dGVHcm91cChyZWYsIGNoYW1lbGVvbiA/IHRhcmdldE5hbWVzcGFjZSA6IG51bGwsIHJlZGVmaW5pdGlvbkZvcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXAgIT0gbnVsbCAmJiByZWRlZmluaXRpb25Gb3IuZXF1YWxzKGdyb3VwLmdldE5hbWUoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlZW5SZWRlZmluaXRpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJBbiBhdHRyaWJ1dGUgZ3JvdXAgcmVkZWZpbml0aW9uIG11c3QgaW5jbHVkZSBhdCBtb3N0IG9uZSByZWZlcmVuY2UgdG8gdGhlIG9yaWdpbmFsIGRlZmluaXRpb24uIiwgWG1sRXJyb3JDb250ZXh0LkdFTkVSSUNfRVJST1IsIHhzZGFnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVuUmVkZWZpbml0aW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwID0gc3RhdGUuZmluZEF0dHJpYnV0ZUdyb3VwKHJlZiwgY2hhbWVsZW9uID8gdGFyZ2V0TmFtZXNwYWNlIDogbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLm5vdEZvdW5kRXJyb3IocmVmLCBYbWxFcnJvckNvbnRleHQuQVRUUklCVVRFX0dST1VQX05PVF9GT1VORCwgeHNkYWcueGdldFJlZigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5pc1Byb2Nlc3NpbmcoZ3JvdXApKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvcigiQXR0cmlidXRlIGdyb3VwICIgKyBRTmFtZUhlbHBlci5wcmV0dHkoZ3JvdXAuZ2V0TmFtZSgpKSArICIgcmVmZXJlbmNlcyBpdHNlbGYiLCBYbWxFcnJvckNvbnRleHQuQ1lDTElDX0RFUEVOREVOQ1ksIGdyb3VwLmdldFBhcnNlT2JqZWN0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN1YlRhcmdldE5hbWVzcGFjZSA9IHRhcmdldE5hbWVzcGFjZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwLmdldFRhcmdldE5hbWVzcGFjZSgpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1YlRhcmdldE5hbWVzcGFjZSA9IGdyb3VwLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgY2hhbWVsZW9uID0gZ3JvdXAuZ2V0Q2hhbWVsZW9uTmFtZXNwYWNlKCkgIT0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0YXJ0UHJvY2Vzc2luZyhncm91cCk7Ci0gICAgICAgICAgICAgICAgICAgIFFOYW1lIG5lc3RlZFJlZGVmaW5pdGlvbkZvciA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChncm91cC5pc1JlZGVmaW5pdGlvbigpKQotICAgICAgICAgICAgICAgICAgICAgICAgbmVzdGVkUmVkZWZpbml0aW9uRm9yID0gZ3JvdXAuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVBdHRyaWJ1dGVNb2RlbChncm91cC5nZXRQYXJzZU9iamVjdCgpLCBzdWJUYXJnZXROYW1lc3BhY2UsIGNoYW1lbGVvbiwgYW5vbnltb3VzVHlwZXMsIG91dGVyVHlwZSwgc2VlbkF0dHJpYnV0ZXMsIHJlc3VsdCwgYmFzZVR5cGUsIGV4dGVuc2lvbiwgbmVzdGVkUmVkZWZpbml0aW9uRm9yKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuZmluaXNoUHJvY2Vzc2luZyhncm91cCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIHNraXAgdGhpbmdzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBhdHRyaWJ1dGUgbW9kZWwuCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIFNjaGVtYVBhcnRpY2xlIGV4dGVuZENvbnRlbnRNb2RlbChTY2hlbWFQYXJ0aWNsZSBiYXNlQ29udGVudE1vZGVsLCBTY2hlbWFQYXJ0aWNsZSBleHRlbmRlZENvbnRlbnRNb2RlbCwgWG1sT2JqZWN0IHBhcnNlVHJlZSkKLSAgICB7Ci0gICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LWNvbXBsZXhDb250ZW50OjpleHRlbnNpb24KLSAgICAgICAgCi0gICAgICAgIC8vIDIuMSBJZiB0aGUgt2V4cGxpY2l0IGNvbnRlbnS3IGlzIGVtcHR5LCB0aGVuIHRoZSB7Y29udGVudCB0eXBlfSBvZiB0aGUgdHlwZSBkZWZpbml0aW9uILdyZXNvbHZlZLcgdG8gYnkgdGhlILdhY3R1YWwgdmFsdWW3IG9mIHRoZSBiYXNlIFthdHRyaWJ1dGVdIAotICAgICAgICBpZiAoZXh0ZW5kZWRDb250ZW50TW9kZWwgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBiYXNlQ29udGVudE1vZGVsOwotICAgICAgICAKLSAgICAgICAgLy8gMi4yIElmIHRoZSB0eXBlIGRlZmluaXRpb24gt3Jlc29sdmVktyB0byBieSB0aGUgt2FjdHVhbCB2YWx1Zbcgb2YgdGhlIGJhc2UgW2F0dHJpYnV0ZV0gaGFzIGEge2NvbnRlbnQgdHlwZX0gb2YgZW1wdHksIHRoZW4gYSBwYWlyIG9mIG1peGVkIG9yIGVsZW1lbnRPbmx5IChkZXRlcm1pbmVkIGFzIHBlciBjbGF1c2UgMS4yLjEgYWJvdmUpIGFuZCB0aGUgt2V4cGxpY2l0IGNvbnRlbnS3IGl0c2VsZjsKLSAgICAgICAgaWYgKGJhc2VDb250ZW50TW9kZWwgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBleHRlbmRlZENvbnRlbnRNb2RlbDsKLSAgICAgICAgCi0gICAgICAgIC8vIDIuMyBvdGhlcndpc2UgYSBwYWlyIG9mIG1peGVkIG9yIGVsZW1lbnRPbmx5IChkZXRlcm1pbmVkIGFzIHBlciBjbGF1c2UgMS4yLjEgYWJvdmUpIGFuZCBhIHBhcnRpY2xlIHdob3NlIHByb3BlcnRpZXMgYXJlIGFzIGZvbGxvd3M6ICAKLSAgICAgICAgU2NoZW1hUGFydGljbGVJbXBsIHNQYXJ0ID0gbmV3IFNjaGVtYVBhcnRpY2xlSW1wbCgpOwotICAgICAgICBzUGFydC5zZXRQYXJ0aWNsZVR5cGUoU2NoZW1hUGFydGljbGUuU0VRVUVOQ0UpOwotCi0gICAgICAgIExpc3QgYWNjdW11bGF0ZSA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgYWRkTWludXNQb2ludGxlc3NQYXJ0aWNsZXMoYWNjdW11bGF0ZSwgYmFzZUNvbnRlbnRNb2RlbCwgU2NoZW1hUGFydGljbGUuU0VRVUVOQ0UpOwotICAgICAgICBhZGRNaW51c1BvaW50bGVzc1BhcnRpY2xlcyhhY2N1bXVsYXRlLCBleHRlbmRlZENvbnRlbnRNb2RlbCwgU2NoZW1hUGFydGljbGUuU0VRVUVOQ0UpOwotICAgICAgICBzUGFydC5zZXRNaW5PY2N1cnMoQmlnSW50ZWdlci5PTkUpOwotICAgICAgICBzUGFydC5zZXRNYXhPY2N1cnMoQmlnSW50ZWdlci5PTkUpOwotICAgICAgICBzUGFydC5zZXRQYXJ0aWNsZUNoaWxkcmVuKChTY2hlbWFQYXJ0aWNsZVtdKQotICAgICAgICAgICAgICAgIGFjY3VtdWxhdGUudG9BcnJheShuZXcgU2NoZW1hUGFydGljbGVbYWNjdW11bGF0ZS5zaXplKCldKSk7Ci0KLSAgICAgICAgcmV0dXJuIGZpbHRlclBvaW50bGVzc1BhcnRpY2xlc0FuZFZlcmlmeUFsbFBhcnRpY2xlcyhzUGFydCwgcGFyc2VUcmVlKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgQmlnSW50ZWdlciBleHRyYWN0TWluT2NjdXJzKFhtbE5vbk5lZ2F0aXZlSW50ZWdlciBubmkpCi0gICAgewotICAgICAgICBpZiAobm5pID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gQmlnSW50ZWdlci5PTkU7Ci0gICAgICAgIEJpZ0ludGVnZXIgcmVzdWx0ID0gbm5pLmdldEJpZ0ludGVnZXJWYWx1ZSgpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gQmlnSW50ZWdlci5PTkU7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgc3RhdGljIEJpZ0ludGVnZXIgZXh0cmFjdE1heE9jY3VycyhBbGxOTkkgYWxsTk5JKQotICAgIHsKLSAgICAgICAgaWYgKGFsbE5OSSA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIEJpZ0ludGVnZXIuT05FOwotCi0gICAgICAgIGlmIChhbGxOTkkuaW5zdGFuY2VUeXBlKCkuZ2V0UHJpbWl0aXZlVHlwZSgpLmdldEJ1aWx0aW5UeXBlQ29kZSgpID09IFNjaGVtYVR5cGUuQlRDX0RFQ0lNQUwpCi0gICAgICAgICAgICByZXR1cm4gKChYbWxJbnRlZ2VyKWFsbE5OSSkuZ2V0QmlnSW50ZWdlclZhbHVlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBSZWRlZmluaXRpb25Gb3JHcm91cAotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBRTmFtZSBncm91cE5hbWU7Ci0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBzZWVuUmVkZWZpbml0aW9uID0gZmFsc2U7Ci0KLSAgICAgICAgcHVibGljIFJlZGVmaW5pdGlvbkZvckdyb3VwKFFOYW1lIGdyb3VwTmFtZSkKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5ncm91cE5hbWUgPSBncm91cE5hbWU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgUU5hbWUgZ2V0R3JvdXBOYW1lKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdyb3VwTmFtZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzU2VlblJlZGVmaW5pdGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzZWVuUmVkZWZpbml0aW9uOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0U2VlblJlZGVmaW5pdGlvbihib29sZWFuIHNlZW5SZWRlZmluaXRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuc2VlblJlZGVmaW5pdGlvbiA9IHNlZW5SZWRlZmluaXRpb247Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgU2NoZW1hUGFydGljbGUgdHJhbnNsYXRlQ29udGVudE1vZGVsKAotICAgICAgICAgICAgU2NoZW1hVHlwZSBvdXRlclR5cGUsCi0gICAgICAgICAgICBYbWxPYmplY3QgcGFyc2VUcmVlLCBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlLCBib29sZWFuIGNoYW1lbGVvbiwKLSAgICAgICAgICAgIGludCBwYXJ0aWNsZUNvZGUsCi0gICAgICAgICAgICBMaXN0IGFub255bW91c1R5cGVzLCBNYXAgZWxlbWVudE1vZGVsLAotICAgICAgICAgICAgYm9vbGVhbiBhbGxvd0VsdCwgUmVkZWZpbml0aW9uRm9yR3JvdXAgcmVkZWZpbml0aW9uRm9yKQotICAgIHsKLSAgICAgICAgaWYgKHBhcnNlVHJlZSA9PSBudWxsIHx8IHBhcnRpY2xlQ29kZSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgU3RzY1N0YXRlIHN0YXRlID0gU3RzY1N0YXRlLmdldCgpOwotCi0gICAgICAgIC8vIGVtaXREQkcoIlRyYW5zbGF0aW5nIGNvbnRlbnQgbW9kZWwgZm9yICIgKyBvdXRlclR5cGUpOwotICAgICAgICAvLyBpbmRlbnREQkcoKTsKLSAgICAgICAgYXNzZXJ0KHBhcnRpY2xlQ29kZSAhPSAwKTsKLQotICAgICAgICBib29sZWFuIGhhc0NoaWxkcmVuID0gZmFsc2U7Ci0gICAgICAgIEJpZ0ludGVnZXIgbWluT2NjdXJzOwotICAgICAgICBCaWdJbnRlZ2VyIG1heE9jY3VyczsKLSAgICAgICAgU2NoZW1hTW9kZWxHcm91cEltcGwgZ3JvdXAgPSBudWxsOwotCi0gICAgICAgIFNjaGVtYVBhcnRpY2xlSW1wbCBzUGFydDsKLQotICAgICAgICBpZiAocGFydGljbGVDb2RlID09IFNjaGVtYVBhcnRpY2xlLkVMRU1FTlQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghYWxsb3dFbHQpCi0gICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIk11c3QgYmUgYSBzZXF1ZW5jZSwgY2hvaWNlIG9yIGFsbCBoZXJlIiwgWG1sRXJyb3JDb250ZXh0LkVYUExJQ0lUX0dST1VQX05FRURFRCwgcGFyc2VUcmVlKTsKLQotICAgICAgICAgICAgLy8gVE9ETzogZGV0ZWN0IHN1YnN0aXR1dGlvbiBncm91cCBmb3IgdGhpcyBlbGVtZW50IGFuZCBjb25zdHJ1Y3QgYSBjaG9pY2UKLQotICAgICAgICAgICAgTG9jYWxFbGVtZW50IHBhcnNlRWx0ID0gKExvY2FsRWxlbWVudClwYXJzZVRyZWU7Ci0gICAgICAgICAgICBzUGFydCA9IFN0c2NUcmFuc2xhdG9yLnRyYW5zbGF0ZUVsZW1lbnQocGFyc2VFbHQsIHRhcmdldE5hbWVzcGFjZSwgY2hhbWVsZW9uLCBhbm9ueW1vdXNUeXBlcywgb3V0ZXJUeXBlKTsKLSAgICAgICAgICAgIGlmIChzUGFydCA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgbWluT2NjdXJzID0gZXh0cmFjdE1pbk9jY3VycyhwYXJzZUVsdC54Z2V0TWluT2NjdXJzKCkpOwotICAgICAgICAgICAgbWF4T2NjdXJzID0gZXh0cmFjdE1heE9jY3VycyhwYXJzZUVsdC54Z2V0TWF4T2NjdXJzKCkpOwotCi0gICAgICAgICAgICBTY2hlbWFUeXBlIG9sZFR5cGUgPSAoU2NoZW1hVHlwZSllbGVtZW50TW9kZWwuZ2V0KHNQYXJ0LmdldE5hbWUoKSk7Ci0gICAgICAgICAgICBpZiAob2xkVHlwZSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGVsZW1lbnRNb2RlbC5wdXQoc1BhcnQuZ2V0TmFtZSgpLCBzUGFydC5nZXRUeXBlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoIXNQYXJ0LmdldFR5cGUoKS5lcXVhbHMob2xkVHlwZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIlR5cGUgb2YgIiArIFFOYW1lSGVscGVyLnByZXR0eShzUGFydC5nZXROYW1lKCkpICsgIiBpcyBpbmNvbnNpc3RlbnQgd2l0aCBhbm90aGVyIGVsZW1lbnQgd2l0aCB0aGUgc2FtZSBuYW1lIGluIHRoaXMgY29udGVudCBtb2RlbCIsIFhtbEVycm9yQ29udGV4dC5JTkNPTlNJU1RFTlRfVFlQRSwgcGFyc2VUcmVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChwYXJ0aWNsZUNvZGUgPT0gU2NoZW1hUGFydGljbGUuV0lMRENBUkQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghYWxsb3dFbHQpCi0gICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIk11c3QgYmUgYSBzZXF1ZW5jZSwgY2hvaWNlIG9yIGFsbCBoZXJlIiwgWG1sRXJyb3JDb250ZXh0LkVYUExJQ0lUX0dST1VQX05FRURFRCwgcGFyc2VUcmVlKTsKLSAgICAgICAgICAgIEFueSBwYXJzZUFueSA9IChBbnkpcGFyc2VUcmVlOwotICAgICAgICAgICAgc1BhcnQgPSBuZXcgU2NoZW1hUGFydGljbGVJbXBsKCk7Ci0gICAgICAgICAgICBzUGFydC5zZXRQYXJ0aWNsZVR5cGUoU2NoZW1hUGFydGljbGUuV0lMRENBUkQpOwotICAgICAgICAgICAgUU5hbWVTZXQgd2NzZXQ7Ci0gICAgICAgICAgICBOYW1lc3BhY2VMaXN0IG5zbGlzdCA9IHBhcnNlQW55LnhnZXROYW1lc3BhY2UoKTsKLSAgICAgICAgICAgIGlmIChuc2xpc3QgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICB3Y3NldCA9IFFOYW1lU2V0LkFMTDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB3Y3NldCA9IFFOYW1lU2V0LmZvcldpbGRjYXJkTmFtZXNwYWNlU3RyaW5nKG5zbGlzdC5nZXRTdHJpbmdWYWx1ZSgpLCB0YXJnZXROYW1lc3BhY2UpOwotICAgICAgICAgICAgc1BhcnQuc2V0V2lsZGNhcmRTZXQod2NzZXQpOwotICAgICAgICAgICAgc1BhcnQuc2V0V2lsZGNhcmRQcm9jZXNzKHRyYW5zbGF0ZVdpbGRjYXJkUHJvY2VzcyhwYXJzZUFueS54Z2V0UHJvY2Vzc0NvbnRlbnRzKCkpKTsKLSAgICAgICAgICAgIG1pbk9jY3VycyA9IGV4dHJhY3RNaW5PY2N1cnMocGFyc2VBbnkueGdldE1pbk9jY3VycygpKTsKLSAgICAgICAgICAgIG1heE9jY3VycyA9IGV4dHJhY3RNYXhPY2N1cnMocGFyc2VBbnkueGdldE1heE9jY3VycygpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdyb3VwIHBhcnNlR3JvdXAgPSAoR3JvdXApcGFyc2VUcmVlOwotICAgICAgICAgICAgc1BhcnQgPSBuZXcgU2NoZW1hUGFydGljbGVJbXBsKCk7Ci0KLSAgICAgICAgICAgIC8vIGdyYWIgbWluL21heE9jY3VycyBiZWZvcmUgZGVyZWZlcmVuY2lnbiBncm91cCByZWYKLSAgICAgICAgICAgIG1pbk9jY3VycyA9IGV4dHJhY3RNaW5PY2N1cnMocGFyc2VHcm91cC54Z2V0TWluT2NjdXJzKCkpOwotICAgICAgICAgICAgbWF4T2NjdXJzID0gZXh0cmFjdE1heE9jY3VycyhwYXJzZUdyb3VwLnhnZXRNYXhPY2N1cnMoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChwYXJ0aWNsZUNvZGUgPT0gTU9ERUxfR1JPVVBfQ09ERSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBRTmFtZSByZWYgPSBwYXJzZUdyb3VwLmdldFJlZigpOwotICAgICAgICAgICAgICAgIGlmIChyZWYgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJHcm91cCByZWZlcmVuY2UgbXVzdCBoYXZlIGEgcmVmIGF0dHJpYnV0ZSIsIFhtbEVycm9yQ29udGV4dC5HUk9VUF9NSVNTSU5HX1JFRiwgcGFyc2VUcmVlKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChyZWRlZmluaXRpb25Gb3IgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGdyb3VwID0gc3RhdGUuZmluZFJlZGVmaW5lZE1vZGVsR3JvdXAocmVmLCBjaGFtZWxlb24gPyB0YXJnZXROYW1lc3BhY2UgOiBudWxsLCByZWRlZmluaXRpb25Gb3IuZ2V0R3JvdXBOYW1lKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXAgIT0gbnVsbCAmJiBncm91cC5nZXROYW1lKCkuZXF1YWxzKHJlZGVmaW5pdGlvbkZvci5nZXRHcm91cE5hbWUoKSkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWRlZmluaXRpb25Gb3IuaXNTZWVuUmVkZWZpbml0aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkdyb3VwIHJlZGVmaW5pdGlvbiBtdXN0IHJlZmVyIHRvIHRoZSBvcmlnaW5hbCBkZWZpbml0aW9uIGF0IG1vc3Qgb25jZSIsIFhtbEVycm9yQ29udGV4dC5HRU5FUklDX0VSUk9SLCBwYXJzZVRyZWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFCaWdJbnRlZ2VyLk9ORS5lcXVhbHMobWF4T2NjdXJzKSB8fCAhQmlnSW50ZWdlci5PTkUuZXF1YWxzKG1pbk9jY3VycykpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIldoZW4gcmVmZXJlbmNpbmcgdGhlIG9yaWdpbmFsIGdyb3VwIGRlZmluaXRpb24gaW4gYSByZWRlZmluaXRpb24sIG1heE9jY3VycyBhbmQgbWluT2NjdXJzIG11c3QgYmUgMSIsIFhtbEVycm9yQ29udGV4dC5HRU5FUklDX0VSUk9SLCBwYXJzZVRyZWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVkZWZpbml0aW9uRm9yLnNldFNlZW5SZWRlZmluaXRpb24odHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSBzdGF0ZS5maW5kTW9kZWxHcm91cChyZWYsIGNoYW1lbGVvbiA/IHRhcmdldE5hbWVzcGFjZSA6IG51bGwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoZ3JvdXAgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLm5vdEZvdW5kRXJyb3IocmVmLCBYbWxFcnJvckNvbnRleHQuTU9ERUxfR1JPVVBfTk9UX0ZPVU5ELCAoKEdyb3VwKXBhcnNlVHJlZSkueGdldFJlZigpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5pc1Byb2Nlc3NpbmcoZ3JvdXApKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIk1vZGVsIGdyb3VwICIgKyBRTmFtZUhlbHBlci5wcmV0dHkoZ3JvdXAuZ2V0TmFtZSgpKSArICIgcmVmZXJlbmNlcyBpdHNlbGYiLCBYbWxFcnJvckNvbnRleHQuQ1lDTElDX0RFUEVOREVOQ1ksIGdyb3VwLmdldFBhcnNlT2JqZWN0KCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gbm8gZ28gdG8gdGhlIGNoaWxkLgotICAgICAgICAgICAgICAgIFhtbEN1cnNvciBjdXIgPSBncm91cC5nZXRQYXJzZU9iamVjdCgpLm5ld0N1cnNvcigpOwotICAgICAgICAgICAgICAgIGZvciAoYm9vbGVhbiBtb3JlID0gY3VyLnRvRmlyc3RDaGlsZCgpOyBtb3JlOyBtb3JlID0gY3VyLnRvTmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlQ29kZSA9IHRyYW5zbGF0ZVBhcnRpY2xlQ29kZShjdXIuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnRpY2xlQ29kZSAhPSAwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRyZWUgPSBwYXJzZUdyb3VwID0gKEdyb3VwKWN1ci5nZXRPYmplY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChwYXJ0aWNsZUNvZGUgPT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJNb2RlbCBncm91cCAiICsgUU5hbWVIZWxwZXIucHJldHR5KGdyb3VwLmdldE5hbWUoKSkgKyAiIGlzIGVtcHR5IiwgWG1sRXJyb3JDb250ZXh0LkVYUExJQ0lUX0dST1VQX05FRURFRCwgZ3JvdXAuZ2V0UGFyc2VPYmplY3QoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAocGFydGljbGVDb2RlICE9IFNjaGVtYVBhcnRpY2xlLkFMTCAmJiBwYXJ0aWNsZUNvZGUgIT0gU2NoZW1hUGFydGljbGUuU0VRVUVOQ0UgJiYgcGFydGljbGVDb2RlICE9IFNjaGVtYVBhcnRpY2xlLkNIT0lDRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJNb2RlbCBncm91cCAiICsgUU5hbWVIZWxwZXIucHJldHR5KGdyb3VwLmdldE5hbWUoKSkgKyAiIGlzIG5vdCBhIHNlcXVlbmNlLCBhbGwsIG9yIGNob2ljZSIsIFhtbEVycm9yQ29udGV4dC5FWFBMSUNJVF9HUk9VUF9ORUVERUQsIGdyb3VwLmdldFBhcnNlT2JqZWN0KCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBTdHJpbmcgbmV3VGFyZ2V0TmFtZXNwYWNlID0gZ3JvdXAuZ2V0VGFyZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG5ld1RhcmdldE5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICB0YXJnZXROYW1lc3BhY2UgPSBuZXdUYXJnZXROYW1lc3BhY2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAocGFydGljbGVDb2RlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQUxMOgotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuU0VRVUVOQ0U6Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5DSE9JQ0U6Ci0gICAgICAgICAgICAgICAgICAgIHNQYXJ0LnNldFBhcnRpY2xlVHlwZShwYXJ0aWNsZUNvZGUpOwotICAgICAgICAgICAgICAgICAgICBoYXNDaGlsZHJlbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1heE9jY3VycyAhPSBudWxsICYmIG1pbk9jY3Vycy5jb21wYXJlVG8obWF4T2NjdXJzKSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0YXRlLmVycm9yKCJtYXhPY2N1cnMgbXVzdCBub3QgYmUgbGVzcyB0aGFuIG1pbk9jY3VycyIsIFhtbEVycm9yQ29udGV4dC5NSU5fTUFYX09DQ1VSUywgcGFyc2VUcmVlKTsKLSAgICAgICAgICAgIG1heE9jY3VycyA9IG1pbk9jY3VyczsgLy8gcmVtZWR5OiBwaW4gbWF4IHVwIHRvIG1pbgotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1heE9jY3VycyAhPSBudWxsICYmIG1heE9jY3Vycy5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7IC8vIG1heE9jY3VycyA9PSBtaW5PY2N1cnMgPT0gMCwgc2FtZSBhcyBubyBwYXJ0aWNsZSBhdCBhbGwuCi0gICAgICAgIH0KLQotICAgICAgICBzUGFydC5zZXRNaW5PY2N1cnMobWluT2NjdXJzKTsKLSAgICAgICAgc1BhcnQuc2V0TWF4T2NjdXJzKG1heE9jY3Vycyk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZ3JvdXAgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgc3RhdGUuc3RhcnRQcm9jZXNzaW5nKGdyb3VwKTsKLSAgICAgICAgICAgIHJlZGVmaW5pdGlvbkZvciA9IG51bGw7Ci0gICAgICAgICAgICBpZiAoZ3JvdXAuaXNSZWRlZmluaXRpb24oKSkKLSAgICAgICAgICAgICAgICByZWRlZmluaXRpb25Gb3IgPSBuZXcgUmVkZWZpbml0aW9uRm9yR3JvdXAoZ3JvdXAuZ2V0TmFtZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChoYXNDaGlsZHJlbikKLSAgICAgICAgewotICAgICAgICAgICAgWG1sQ3Vyc29yIGN1ciA9IHBhcnNlVHJlZS5uZXdDdXJzb3IoKTsKLSAgICAgICAgICAgIExpc3QgYWNjdW11bGF0ZSA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgICAgIGZvciAoYm9vbGVhbiBtb3JlID0gY3VyLnRvRmlyc3RDaGlsZCgpOyBtb3JlOyBtb3JlID0gY3VyLnRvTmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgY29kZSA9IHRyYW5zbGF0ZVBhcnRpY2xlQ29kZShjdXIuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSAwKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBhZGRNaW51c1BvaW50bGVzc1BhcnRpY2xlcyhhY2N1bXVsYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlQ29udGVudE1vZGVsKG91dGVyVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyLmdldE9iamVjdCgpLCB0YXJnZXROYW1lc3BhY2UsIGNoYW1lbGVvbiwgY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5vbnltb3VzVHlwZXMsIGVsZW1lbnRNb2RlbCwgdHJ1ZSwgcmVkZWZpbml0aW9uRm9yKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNQYXJ0LmdldFBhcnRpY2xlVHlwZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNQYXJ0LnNldFBhcnRpY2xlQ2hpbGRyZW4oKFNjaGVtYVBhcnRpY2xlW10pCi0gICAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdGUudG9BcnJheShuZXcgU2NoZW1hUGFydGljbGVbYWNjdW11bGF0ZS5zaXplKCldKSk7Ci0gICAgICAgICAgICBjdXIuZGlzcG9zZSgpOwotICAgICAgICB9Ci0gICAgICAgIAotCi0gICAgICAgIFNjaGVtYVBhcnRpY2xlIHJlc3VsdCA9IGZpbHRlclBvaW50bGVzc1BhcnRpY2xlc0FuZFZlcmlmeUFsbFBhcnRpY2xlcyhzUGFydCwgcGFyc2VUcmVlKTsKLQotICAgICAgICBpZiAoZ3JvdXAgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgc3RhdGUuZmluaXNoUHJvY2Vzc2luZyhncm91cCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gb3V0ZGVudERCRygpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgaW50IHRyYW5zbGF0ZVdpbGRjYXJkUHJvY2VzcyhBbnkuUHJvY2Vzc0NvbnRlbnRzIHByb2Nlc3MpCi0gICAgewotICAgICAgICBpZiAocHJvY2VzcyA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIFNjaGVtYVBhcnRpY2xlLlNUUklDVDsKLQotICAgICAgICBTdHJpbmcgcHJvY2Vzc1ZhbHVlID0gcHJvY2Vzcy5nZXRTdHJpbmdWYWx1ZSgpOwotCi0gICAgICAgIGlmICgibGF4Ii5lcXVhbHMocHJvY2Vzc1ZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBTY2hlbWFQYXJ0aWNsZS5MQVg7Ci0KLSAgICAgICAgaWYgKCJza2lwIi5lcXVhbHMocHJvY2Vzc1ZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBTY2hlbWFQYXJ0aWNsZS5TS0lQOwotCi0gICAgICAgIHJldHVybiBTY2hlbWFQYXJ0aWNsZS5TVFJJQ1Q7Ci0gICAgfQotCi0gICAgc3RhdGljIFNjaGVtYVBhcnRpY2xlIGZpbHRlclBvaW50bGVzc1BhcnRpY2xlc0FuZFZlcmlmeUFsbFBhcnRpY2xlcyhTY2hlbWFQYXJ0aWNsZSBwYXJ0LCBYbWxPYmplY3QgcGFyc2VUcmVlKQotICAgIHsKLSAgICAgICAgaWYgKHBhcnQuZ2V0TWF4T2NjdXJzKCkgIT0gbnVsbCAmJiBwYXJ0LmdldE1heE9jY3VycygpLnNpZ251bSgpID09IDApCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICBzd2l0Y2ggKHBhcnQuZ2V0UGFydGljbGVUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuU0VRVUVOQ0U6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLkFMTDoKLSAgICAgICAgICAgICAgICBpZiAocGFydC5nZXRQYXJ0aWNsZUNoaWxkcmVuKCkubGVuZ3RoID09IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgIGlmIChwYXJ0LmlzU2luZ2xldG9uKCkgJiYgcGFydC5jb3VudE9mUGFydGljbGVDaGlsZCgpID09IDEpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJ0LmdldFBhcnRpY2xlQ2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQ0hPSUNFOgotICAgICAgICAgICAgICAgIGlmIChwYXJ0LmdldFBhcnRpY2xlQ2hpbGRyZW4oKS5sZW5ndGggPT0gMCAmJgotICAgICAgICAgICAgICAgICAgICBwYXJ0LmdldE1pbk9jY3VycygpLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLlpFUk8pID09IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgIGlmIChwYXJ0LmlzU2luZ2xldG9uKCkgJiYgcGFydC5jb3VudE9mUGFydGljbGVDaGlsZCgpID09IDEpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJ0LmdldFBhcnRpY2xlQ2hpbGQoMCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuRUxFTUVOVDoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuV0lMRENBUkQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnQ7Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGJvb2xlYW4gaXNBbGwgPSBwYXJ0LmdldFBhcnRpY2xlVHlwZSgpID09IFNjaGVtYVBhcnRpY2xlLkFMTDsKLSAgICAgICAgCi0gICAgICAgIGlmIChpc0FsbCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2Nvcy1hbGwtbGltaXRlZAotICAgICAgICAgICAgaWYgKHBhcnQuZ2V0TWF4T2NjdXJzKCkgPT0gbnVsbCB8fCBwYXJ0LmdldE1heE9jY3VycygpLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkgPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0c2NTdGF0ZS5nZXQoKS5lcnJvcigiQW4gYWxsIGdyb3VwIG11c3QgaGF2ZSBtYXhPY2N1cnMgPD0gMSIsIFhtbEVycm9yQ29udGV4dC5BTExfQ09OVEVOVFMsIHBhcnNlVHJlZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFydC5jb3VudE9mUGFydGljbGVDaGlsZCgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYVBhcnRpY2xlIGNoaWxkID0gcGFydC5nZXRQYXJ0aWNsZUNoaWxkKGkpOwotICAgICAgICAgICAgaWYgKGNoaWxkLmdldFBhcnRpY2xlVHlwZSgpID09IFNjaGVtYVBhcnRpY2xlLkFMTCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHNjU3RhdGUuZ2V0KCkuZXJyb3IoIkFuIGFsbCBncm91cCBpcyBvbmx5IGFsbG93ZWQgYXQgdGhlIHRvcCBsZXZlbCBvZiB0aGUgY29udGVudCBtb2RlbCIsIFhtbEVycm9yQ29udGV4dC5DQU5OT1RfRVhURU5EX0FMTCwgcGFyc2VUcmVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGlzQWxsICYmIChjaGlsZC5nZXRQYXJ0aWNsZVR5cGUoKSAhPSBTY2hlbWFQYXJ0aWNsZS5FTEVNRU5UIHx8IGNoaWxkLmdldE1heE9jY3VycygpID09IG51bGwgfHwgY2hpbGQuZ2V0TWF4T2NjdXJzKCkuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKSA+IDApKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0c2NTdGF0ZS5nZXQoKS5lcnJvcigiQW4gYWxsIGdyb3VwIGNhbiBjb250YWluIG9ubHkgZWxlbWVudCBwYXJ0aWNsZXMgd2l0aCBtYXhPY2N1cnMgPD0gMSIsIFhtbEVycm9yQ29udGV4dC5BTExfQ09OVEVOVFMsIHBhcnNlVHJlZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBwYXJ0OwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFkZE1pbnVzUG9pbnRsZXNzUGFydGljbGVzKAotICAgICAgICAgICAgTGlzdCBsaXN0LCBTY2hlbWFQYXJ0aWNsZSBwYXJ0LCBpbnQgcGFyZW50UGFydGljbGVUeXBlKQotICAgIHsKLSAgICAgICAgaWYgKHBhcnQgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBzd2l0Y2ggKHBhcnQuZ2V0UGFydGljbGVUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuU0VRVUVOQ0U6Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmVudFBhcnRpY2xlVHlwZSA9PSBTY2hlbWFQYXJ0aWNsZS5TRVFVRU5DRSAmJiBwYXJ0LmlzU2luZ2xldG9uKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBlbWl0REJHKCJkcm9wcGluZyByZWR1bmRhbnQgc2VxdWVuY2UiKTsKLSAgICAgICAgICAgICAgICAgICAgbGlzdC5hZGRBbGwoQXJyYXlzLmFzTGlzdChwYXJ0LmdldFBhcnRpY2xlQ2hpbGRyZW4oKSkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLkNIT0lDRToKLSAgICAgICAgICAgICAgICBpZiAocGFyZW50UGFydGljbGVUeXBlID09IFNjaGVtYVBhcnRpY2xlLkNIT0lDRSAmJiBwYXJ0LmlzU2luZ2xldG9uKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBlbWl0REJHKCJkcm9wcGluZyByZWR1bmRhbnQgY2hvaWNlIik7Ci0gICAgICAgICAgICAgICAgICAgIGxpc3QuYWRkQWxsKEFycmF5cy5hc0xpc3QocGFydC5nZXRQYXJ0aWNsZUNoaWxkcmVuKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQUxMOgotICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgbGlzdC5hZGQocGFydCk7Ci0gICAgfQotCi0gICAgc3RhdGljIE1hcCBidWlsZEF0dHJpYnV0ZVByb3BlcnR5TW9kZWxCeVFOYW1lKFNjaGVtYUF0dHJpYnV0ZU1vZGVsIGF0dHJNb2RlbCwgU2NoZW1hVHlwZSBvd25lcikKLSAgICB7Ci0gICAgICAgIE1hcCByZXN1bHQgPSBuZXcgTGlua2VkSGFzaE1hcCgpOwotICAgICAgICBTY2hlbWFMb2NhbEF0dHJpYnV0ZVtdIGF0dHJ1c2VzID0gYXR0ck1vZGVsLmdldEF0dHJpYnV0ZXMoKTsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHJ1c2VzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgcmVzdWx0LnB1dChhdHRydXNlc1tpXS5nZXROYW1lKCksIGJ1aWxkVXNlUHJvcGVydHkoYXR0cnVzZXNbaV0sIG93bmVyKSk7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgTWFwIGJ1aWxkQ29udGVudFByb3BlcnR5TW9kZWxCeVFOYW1lKFNjaGVtYVBhcnRpY2xlIHBhcnQsIFNjaGVtYVR5cGUgb3duZXIpCi0gICAgewotICAgICAgICBpZiAocGFydCA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLkVNUFRZX01BUDsKLQotICAgICAgICBib29sZWFuIGFzU2VxdWVuY2UgPSBmYWxzZTsKLSAgICAgICAgTWFwIG1vZGVsID0gbnVsbDsKLQotICAgICAgICBzd2l0Y2ggKHBhcnQuZ2V0UGFydGljbGVUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQUxMOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5TRVFVRU5DRToKLSAgICAgICAgICAgICAgICBhc1NlcXVlbmNlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQ0hPSUNFOgotICAgICAgICAgICAgICAgIGFzU2VxdWVuY2UgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuRUxFTUVOVDoKLSAgICAgICAgICAgICAgICBtb2RlbCA9IGJ1aWxkRWxlbWVudFByb3BlcnR5TW9kZWwoKFNjaGVtYUxvY2FsRWxlbWVudClwYXJ0LCBvd25lcik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLldJTERDQVJEOgotICAgICAgICAgICAgICAgIG1vZGVsID0gQ29sbGVjdGlvbnMuRU1QVFlfTUFQOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOwotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtb2RlbCA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBidWlsZCBtb2RlbCBmb3IgY2hpbGRyZW4KLSAgICAgICAgICAgIG1vZGVsID0gbmV3IExpbmtlZEhhc2hNYXAoKTsKLSAgICAgICAgICAgIFNjaGVtYVBhcnRpY2xlW10gY2hpbGRyZW4gPSBwYXJ0LmdldFBhcnRpY2xlQ2hpbGRyZW4oKTsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBpbmRlbnREQkcoKTsKLSAgICAgICAgICAgICAgICBNYXAgY2hpbGRNb2RlbCA9IGJ1aWxkQ29udGVudFByb3BlcnR5TW9kZWxCeVFOYW1lKGNoaWxkcmVuW2ldLCBvd25lcik7Ci0gICAgICAgICAgICAgICAgLy8gb3V0ZGVudERCRygpOwotICAgICAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaiA9IGNoaWxkTW9kZWwudmFsdWVzKCkuaXRlcmF0b3IoKTsgai5oYXNOZXh0KCk7ICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFNjaGVtYVByb3BlcnR5IGlQcm9wID0gKFNjaGVtYVByb3BlcnR5KWoubmV4dCgpOwotICAgICAgICAgICAgICAgICAgICBTY2hlbWFQcm9wZXJ0eUltcGwgb1Byb3AgPSAoU2NoZW1hUHJvcGVydHlJbXBsKW1vZGVsLmdldChpUHJvcC5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAob1Byb3AgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhc1NlcXVlbmNlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU2NoZW1hUHJvcGVydHlJbXBsKWlQcm9wKS5zZXRNaW5PY2N1cnMoQmlnSW50ZWdlci5aRVJPKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsLnB1dChpUHJvcC5nZXROYW1lKCksIGlQcm9wKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNpc3RlbmN5IHZlcmlmaWVkIGluIGFuIGVhcmxpZXIgc3RlcAotICAgICAgICAgICAgICAgICAgICBhc3NlcnQob1Byb3AuZ2V0VHlwZSgpLmVxdWFscyhpUHJvcC5nZXRUeXBlKCkpKTsKLQotICAgICAgICAgICAgICAgICAgICBtZXJnZVByb3BlcnRpZXMob1Byb3AsIGlQcm9wLCBhc1NlcXVlbmNlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGZpbmFsbHkgZGVhbCB3aXRoIG1pbk9jY3VycywgbWF4T2NjdXJzIG92ZXIgd2hvbGUgZ3JvdXAKLSAgICAgICAgICAgIEJpZ0ludGVnZXIgbWluID0gcGFydC5nZXRNaW5PY2N1cnMoKTsKLSAgICAgICAgICAgIEJpZ0ludGVnZXIgbWF4ID0gcGFydC5nZXRNYXhPY2N1cnMoKTsKLQotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBqID0gbW9kZWwudmFsdWVzKCkuaXRlcmF0b3IoKTsgai5oYXNOZXh0KCk7ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTY2hlbWFQcm9wZXJ0eSBvUHJvcCA9IChTY2hlbWFQcm9wZXJ0eSlqLm5leHQoKTsKLSAgICAgICAgICAgICAgICBCaWdJbnRlZ2VyIG1pbk9jY3VycyA9IG9Qcm9wLmdldE1pbk9jY3VycygpOwotICAgICAgICAgICAgICAgIEJpZ0ludGVnZXIgbWF4T2NjdXJzID0gb1Byb3AuZ2V0TWF4T2NjdXJzKCk7Ci0KLSAgICAgICAgICAgICAgICBtaW5PY2N1cnMgPSBtaW5PY2N1cnMubXVsdGlwbHkobWluKTsKLSAgICAgICAgICAgICAgICBpZiAobWF4ICE9IG51bGwgJiYgbWF4LmVxdWFscyhCaWdJbnRlZ2VyLlpFUk8pKQotICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnMgPSBCaWdJbnRlZ2VyLlpFUk87Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobWF4T2NjdXJzICE9IG51bGwgJiYgIW1heE9jY3Vycy5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKSkKLSAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzID0gbWF4ID09IG51bGwgPyBudWxsIDogbWF4T2NjdXJzLm11bHRpcGx5KG1heCk7Ci0KLSAgICAgICAgICAgICAgICAoKFNjaGVtYVByb3BlcnR5SW1wbClvUHJvcCkuc2V0TWluT2NjdXJzKG1pbk9jY3Vycyk7Ci0gICAgICAgICAgICAgICAgKChTY2hlbWFQcm9wZXJ0eUltcGwpb1Byb3ApLnNldE1heE9jY3VycyhtYXhPY2N1cnMpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1vZGVsOwotICAgIH0KLQotICAgIHN0YXRpYyBNYXAgYnVpbGRFbGVtZW50UHJvcGVydHlNb2RlbChTY2hlbWFMb2NhbEVsZW1lbnQgZXBhcnQsIFNjaGVtYVR5cGUgb3duZXIpCi0gICAgewotICAgICAgICBNYXAgcmVzdWx0ID0gbmV3IEhhc2hNYXAoMSk7Ci0KLSAgICAgICAgU2NoZW1hUHJvcGVydHkgc1Byb3AgPSBidWlsZFVzZVByb3BlcnR5KGVwYXJ0LCBvd25lcik7Ci0gICAgICAgIHJlc3VsdC5wdXQoc1Byb3AuZ2V0TmFtZSgpLCBzUHJvcCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgc3RhdGljIFNjaGVtYVByb3BlcnR5IGJ1aWxkVXNlUHJvcGVydHkoU2NoZW1hRmllbGQgdXNlLCBTY2hlbWFUeXBlIG93bmVyKQotICAgIHsKLSAgICAgICAgU2NoZW1hUHJvcGVydHlJbXBsIHNQcm9wSW1wbCA9IG5ldyBTY2hlbWFQcm9wZXJ0eUltcGwoKTsKLSAgICAgICAgc1Byb3BJbXBsLnNldE5hbWUodXNlLmdldE5hbWUoKSk7Ci0gICAgICAgIHNQcm9wSW1wbC5zZXRDb250YWluZXJUeXBlUmVmKG93bmVyLmdldFJlZigpKTsKLSAgICAgICAgc1Byb3BJbXBsLnNldFR5cGVSZWYodXNlLmdldFR5cGUoKS5nZXRSZWYoKSk7Ci0gICAgICAgIHNQcm9wSW1wbC5zZXRBdHRyaWJ1dGUodXNlLmlzQXR0cmlidXRlKCkpOwotICAgICAgICBzUHJvcEltcGwuc2V0RGVmYXVsdCh1c2UuaXNEZWZhdWx0KCkgPyBTY2hlbWFQcm9wZXJ0eS5DT05TSVNURU5UTFkgOiBTY2hlbWFQcm9wZXJ0eS5ORVZFUik7Ci0gICAgICAgIHNQcm9wSW1wbC5zZXRGaXhlZCh1c2UuaXNGaXhlZCgpID8gU2NoZW1hUHJvcGVydHkuQ09OU0lTVEVOVExZIDogU2NoZW1hUHJvcGVydHkuTkVWRVIpOwotICAgICAgICBzUHJvcEltcGwuc2V0TmlsbGFibGUodXNlLmlzTmlsbGFibGUoKSA/IFNjaGVtYVByb3BlcnR5LkNPTlNJU1RFTlRMWSA6IFNjaGVtYVByb3BlcnR5Lk5FVkVSKTsKLSAgICAgICAgc1Byb3BJbXBsLnNldERlZmF1bHRUZXh0KHVzZS5nZXREZWZhdWx0VGV4dCgpKTsKLSAgICAgICAgc1Byb3BJbXBsLnNldE1pbk9jY3Vycyh1c2UuZ2V0TWluT2NjdXJzKCkpOwotICAgICAgICBzUHJvcEltcGwuc2V0TWF4T2NjdXJzKHVzZS5nZXRNYXhPY2N1cnMoKSk7Ci0KLSAgICAgICAgaWYgKHVzZSBpbnN0YW5jZW9mIFNjaGVtYUxvY2FsRWxlbWVudEltcGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYUxvY2FsRWxlbWVudEltcGwgZWx0ID0gKFNjaGVtYUxvY2FsRWxlbWVudEltcGwpdXNlOwotICAgICAgICAgICAgc1Byb3BJbXBsLnNldEFjY2VwdGVkTmFtZXMoZWx0LmFjY2VwdGVkU3RhcnROYW1lcygpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzUHJvcEltcGw7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgbWVyZ2VQcm9wZXJ0aWVzKFNjaGVtYVByb3BlcnR5SW1wbCBpbnRvLCBTY2hlbWFQcm9wZXJ0eSBmcm9tLCBib29sZWFuIGFzU2VxdWVuY2UpCi0gICAgewotICAgICAgICAvLyBtaW5vY2N1ciwgbWF4b2NjdXIKLSAgICAgICAgQmlnSW50ZWdlciBtaW5PY2N1cnMgPSBpbnRvLmdldE1pbk9jY3VycygpOwotICAgICAgICBCaWdJbnRlZ2VyIG1heE9jY3VycyA9IGludG8uZ2V0TWF4T2NjdXJzKCk7Ci0gICAgICAgIGlmIChhc1NlcXVlbmNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBtaW5PY2N1cnMgPSBtaW5PY2N1cnMuYWRkKGZyb20uZ2V0TWluT2NjdXJzKCkpOwotICAgICAgICAgICAgaWYgKG1heE9jY3VycyAhPSBudWxsKQotICAgICAgICAgICAgICAgIG1heE9jY3VycyA9IChmcm9tLmdldE1heE9jY3VycygpID09IG51bGwgPyBudWxsIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnMuYWRkKGZyb20uZ2V0TWF4T2NjdXJzKCkpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1pbk9jY3VycyA9IG1pbk9jY3Vycy5taW4oZnJvbS5nZXRNaW5PY2N1cnMoKSk7Ci0gICAgICAgICAgICBpZiAobWF4T2NjdXJzICE9IG51bGwpCi0gICAgICAgICAgICAgICAgbWF4T2NjdXJzID0gKGZyb20uZ2V0TWF4T2NjdXJzKCkgPT0gbnVsbCA/IG51bGwgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnMubWF4KGZyb20uZ2V0TWF4T2NjdXJzKCkpKTsKLSAgICAgICAgfQotICAgICAgICBpbnRvLnNldE1pbk9jY3VycyhtaW5PY2N1cnMpOwotICAgICAgICBpbnRvLnNldE1heE9jY3VycyhtYXhPY2N1cnMpOwotCi0gICAgICAgIC8vIG5pbGxhYmxlLCBkZWZhdWx0LCBmaXhlZAotICAgICAgICBpZiAoZnJvbS5oYXNOaWxsYWJsZSgpICE9IGludG8uaGFzTmlsbGFibGUoKSkKLSAgICAgICAgICAgIGludG8uc2V0TmlsbGFibGUoU2NoZW1hUHJvcGVydHkuVkFSSUFCTEUpOwotICAgICAgICBpZiAoZnJvbS5oYXNEZWZhdWx0KCkgIT0gaW50by5oYXNEZWZhdWx0KCkpCi0gICAgICAgICAgICBpbnRvLnNldERlZmF1bHQoU2NoZW1hUHJvcGVydHkuVkFSSUFCTEUpOwotICAgICAgICBpZiAoZnJvbS5oYXNGaXhlZCgpICE9IGludG8uaGFzRml4ZWQoKSkKLSAgICAgICAgICAgIGludG8uc2V0Rml4ZWQoU2NoZW1hUHJvcGVydHkuVkFSSUFCTEUpOwotCi0gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUKLSAgICAgICAgaWYgKGludG8uZ2V0RGVmYXVsdFRleHQoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZnJvbS5nZXREZWZhdWx0VGV4dCgpID09IG51bGwgfHwKLSAgICAgICAgICAgICAgICAhaW50by5nZXREZWZhdWx0VGV4dCgpLmVxdWFscyhmcm9tLmdldERlZmF1bHRUZXh0KCkpKQotICAgICAgICAgICAgICAgIGludG8uc2V0RGVmYXVsdFRleHQobnVsbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgU2NoZW1hUGFydGljbGVbXSBlbnN1cmVTdGF0ZU1hY2hpbmUoU2NoZW1hUGFydGljbGVbXSBjaGlsZHJlbikKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJ1aWxkU3RhdGVNYWNoaW5lKGNoaWxkcmVuW2ldKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gY2hpbGRyZW47Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgYnVpbGRTdGF0ZU1hY2hpbmUoU2NoZW1hUGFydGljbGUgY29udGVudE1vZGVsKQotICAgIHsKLSAgICAgICAgaWYgKGNvbnRlbnRNb2RlbCA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFNjaGVtYVBhcnRpY2xlSW1wbCBwYXJ0SW1wbCA9IChTY2hlbWFQYXJ0aWNsZUltcGwpY29udGVudE1vZGVsOwotICAgICAgICBpZiAocGFydEltcGwuaGFzVHJhbnNpdGlvbk5vdGVzKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgUU5hbWVTZXRCdWlsZGVyIHN0YXJ0ID0gbmV3IFFOYW1lU2V0QnVpbGRlcigpOwotICAgICAgICBRTmFtZVNldEJ1aWxkZXIgZXhjbHVkZW5leHQgPSBuZXcgUU5hbWVTZXRCdWlsZGVyKCk7Ci0gICAgICAgIGJvb2xlYW4gZGV0ZXJtaW5pc3RpYyA9IHRydWU7Ci0gICAgICAgIFNjaGVtYVBhcnRpY2xlW10gY2hpbGRyZW4gPSBudWxsOwotICAgICAgICBib29sZWFuIGNhbnNraXAgPSAocGFydEltcGwuZ2V0TWluT2NjdXJzKCkuc2lnbnVtKCkgPT0gMCk7Ci0KLSAgICAgICAgc3dpdGNoIChwYXJ0SW1wbC5nZXRQYXJ0aWNsZVR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5FTEVNRU5UOgotICAgICAgICAgICAgICAgIC8vIGNvbXB1dGUgc3RhcnQgYW5kIGV4Y2x1ZGVOZXh0OyBjYW5za2lwIGlzIGFscmVhZHkgY29ycmVjdAotICAgICAgICAgICAgICAgIGlmIChwYXJ0SW1wbC5oYXNUcmFuc2l0aW9uUnVsZXMoKSkKLSAgICAgICAgICAgICAgICAgICAgc3RhcnQuYWRkQWxsKHBhcnRJbXBsLmFjY2VwdGVkU3RhcnROYW1lcygpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHN0YXJ0LmFkZChwYXJ0SW1wbC5nZXROYW1lKCkpOwotCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuV0lMRENBUkQ6Ci0gICAgICAgICAgICAgICAgLy8gY29tcHV0ZSBzdGFydCBhbmQgZXhjbHVkZU5leHQ7IGNhbnNraXAgaXMgYWxyZWFkeSBjb3JyZWN0Ci0gICAgICAgICAgICAgICAgc3RhcnQuYWRkQWxsKHBhcnRJbXBsLmdldFdpbGRjYXJkU2V0KCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLlNFUVVFTkNFOgotICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gZW5zdXJlU3RhdGVNYWNoaW5lKHBhcnRJbXBsLmdldFBhcnRpY2xlQ2hpbGRyZW4oKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBhZGp1c3QgY2Fuc2tpcCBpZiBhbGwgY2hpbGRyZW4gYXJlIHNraXBwYWJsZQotICAgICAgICAgICAgICAgIGNhbnNraXAgPSB0cnVlOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBjYW5za2lwICYmIGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghKGNoaWxkcmVuW2ldKS5pc1NraXBwYWJsZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgY2Fuc2tpcCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBidWJibGUgdXAgbm9uZGV0ZXJtaW5pc3RpYyBiaXQKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgZGV0ZXJtaW5pc3RpYyAmJiBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoISgoU2NoZW1hUGFydGljbGVJbXBsKWNoaWxkcmVuW2ldKS5pc0RldGVybWluaXN0aWMoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldGVybWluaXN0aWMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gdmVyaWZ5IGRldGVybWluaXN0aWMgYW5kIGNvbXB1dGUgZXhjbHVkZU5leHQgc2V0Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVuZXh0LmFkZEFsbCgoKFNjaGVtYVBhcnRpY2xlSW1wbCljaGlsZHJlbltpIC0gMV0pLmdldEV4Y2x1ZGVOZXh0U2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZGV0ZXJtaW5pc3RpYyAmJiAhZXhjbHVkZW5leHQuaXNEaXNqb2ludCgoY2hpbGRyZW5baV0pLmFjY2VwdGVkU3RhcnROYW1lcygpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldGVybWluaXN0aWMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChjaGlsZHJlbltpXSkuaXNTa2lwcGFibGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVuZXh0LmFkZEFsbCgoY2hpbGRyZW5baV0pLmFjY2VwdGVkU3RhcnROYW1lcygpKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZW5leHQuY2xlYXIoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBuZXh0LCBjb21wdXRlIHN0YXJ0IHNldAotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGFydC5hZGRBbGwoKGNoaWxkcmVuW2ldKS5hY2NlcHRlZFN0YXJ0TmFtZXMoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghKGNoaWxkcmVuW2ldKS5pc1NraXBwYWJsZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLkNIT0lDRToKLSAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IGVuc3VyZVN0YXRlTWFjaGluZShwYXJ0SW1wbC5nZXRQYXJ0aWNsZUNoaWxkcmVuKCkpOwotCi0gICAgICAgICAgICAgICAgLy8gYWRqdXN0IGNhbnNraXAgaWYgYW55IGNoaWxkcmVuIGFyZSBza2lwcGFibGUKLSAgICAgICAgICAgICAgICBjYW5za2lwID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7ICFjYW5za2lwICYmIGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoY2hpbGRyZW5baV0pLmlzU2tpcHBhYmxlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjYW5za2lwID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBidWJibGUgdXAgbm9uZGV0ZXJtaW5pc3RpYyBiaXQKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgZGV0ZXJtaW5pc3RpYyAmJiBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoISgoU2NoZW1hUGFydGljbGVJbXBsKWNoaWxkcmVuW2ldKS5pc0RldGVybWluaXN0aWMoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldGVybWluaXN0aWMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gY29tcHV0ZSBzdGFydCBhbmQgZXhjbHVkZU5leHQgc2V0cywgdmVyaWZ5IGRldGVybWluaXN0aWMKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRldGVybWluaXN0aWMgJiYgIXN0YXJ0LmlzRGlzam9pbnQoKGNoaWxkcmVuW2ldKS5hY2NlcHRlZFN0YXJ0TmFtZXMoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmlzdGljID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0LmFkZEFsbCgoY2hpbGRyZW5baV0pLmFjY2VwdGVkU3RhcnROYW1lcygpKTsKLSAgICAgICAgICAgICAgICAgICAgZXhjbHVkZW5leHQuYWRkQWxsKCgoU2NoZW1hUGFydGljbGVJbXBsKWNoaWxkcmVuW2ldKS5nZXRFeGNsdWRlTmV4dFNldCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5BTEw6Ci0gICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBlbnN1cmVTdGF0ZU1hY2hpbmUocGFydEltcGwuZ2V0UGFydGljbGVDaGlsZHJlbigpKTsKLQotICAgICAgICAgICAgICAgIC8vIGFkanVzdCBjYW5za2lwIGlmIGFsbCBjaGlsZHJlbiBhcmUgc2tpcHBhYmxlCi0gICAgICAgICAgICAgICAgY2Fuc2tpcCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7ICFjYW5za2lwICYmIGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghKGNoaWxkcmVuW2ldKS5pc1NraXBwYWJsZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgY2Fuc2tpcCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIGJ1YmJsZSB1cCBub25kZXRlcm1pbmlzdGljIGJpdAotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBkZXRlcm1pbmlzdGljICYmIGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghKChTY2hlbWFQYXJ0aWNsZUltcGwpY2hpbGRyZW5baV0pLmlzRGV0ZXJtaW5pc3RpYygpKQotICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5pc3RpYyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBjb21wdXRlIHN0YXJ0IGFuZCBleGNsdWRlTmV4dCBzZXRzLCB2ZXJpZnkgZGV0ZXJtaW5pc3RpYwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoZGV0ZXJtaW5pc3RpYyAmJiAhc3RhcnQuaXNEaXNqb2ludCgoY2hpbGRyZW5baV0pLmFjY2VwdGVkU3RhcnROYW1lcygpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldGVybWluaXN0aWMgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnQuYWRkQWxsKChjaGlsZHJlbltpXSkuYWNjZXB0ZWRTdGFydE5hbWVzKCkpOwotICAgICAgICAgICAgICAgICAgICBleGNsdWRlbmV4dC5hZGRBbGwoKChTY2hlbWFQYXJ0aWNsZUltcGwpY2hpbGRyZW5baV0pLmdldEV4Y2x1ZGVOZXh0U2V0KCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY2Fuc2tpcCkKLSAgICAgICAgICAgICAgICAgICAgZXhjbHVkZW5leHQuYWRkQWxsKHN0YXJ0KTsKLQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIC8vIHdpbGRjYXJkLCBhbGwgY2FzZXMgbnlpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVW5yZWNvZ25pemVkIHNjaGVtYSBwYXJ0aWNsZSIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gYXBwbHkgbG9vcGluZyBsb2dpYwotCi0gICAgICAgIEJpZ0ludGVnZXIgbWluT2NjdXJzID0gcGFydEltcGwuZ2V0TWluT2NjdXJzKCk7Ci0gICAgICAgIEJpZ0ludGVnZXIgbWF4T2NjdXJzID0gcGFydEltcGwuZ2V0TWF4T2NjdXJzKCk7Ci0gICAgICAgIGJvb2xlYW4gY2FubG9vcCA9IChtYXhPY2N1cnMgPT0gbnVsbCB8fCBtYXhPY2N1cnMuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKSA+IDApOwotICAgICAgICBib29sZWFuIHZhcmxvb3AgPSAobWF4T2NjdXJzID09IG51bGwgfHwgbWluT2NjdXJzLmNvbXBhcmVUbyhtYXhPY2N1cnMpIDwgMCk7Ci0KLSAgICAgICAgaWYgKGNhbmxvb3AgJiYgZGV0ZXJtaW5pc3RpYyAmJiAhZXhjbHVkZW5leHQuaXNEaXNqb2ludChzdGFydCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIHdlIGhhdmUgYSBwb3NzaWJsZSBsb29waW5nIG5vbmRldGVybWluaXNtLgotICAgICAgICAgICAgLy8gbGV0J3MgdGFrZSBzb21lIHRpbWUgbm93IHRvIHNlZSBpZiBpdCdzIGFjdHVhbGx5IGNhdXNlZAotICAgICAgICAgICAgLy8gYnkgbm9uLXVuaXF1ZS1wYXJ0aWNsZS1hdHRyaWJ1dGUgb3Igbm90LgotICAgICAgICAgICAgUU5hbWVTZXQgc3VzcGVjdFNldCA9IGV4Y2x1ZGVuZXh0LmludGVyc2VjdChzdGFydCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIGNvbXB1dGUgdGhlIHNldCBvZiBhbGwgcGFydGljbGVzIHRoYXQgY291bGQgc3RhcnQgdGhpcyBncm91cAotICAgICAgICAgICAgTWFwIHN0YXJ0TWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgICAgIHBhcnRpY2xlc01hdGNoaW5nU3RhcnQocGFydEltcGwsIHN1c3BlY3RTZXQsIHN0YXJ0TWFwLCBuZXcgUU5hbWVTZXRCdWlsZGVyKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBjb21wdXRlIHRoZSBzZXQgb2YgYWxsIHBhcnRpY2xlcyB0aGF0IGNvdWxkIGhhdmUgYmVlbiByZXBlYXRlZCByYXRoZXIgdGhhbiBlbmRpbmcgdGhpcyBncm91cAotICAgICAgICAgICAgTWFwIGFmdGVyTWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgICAgIHBhcnRpY2xlc01hdGNoaW5nQWZ0ZXIocGFydEltcGwsIHN1c3BlY3RTZXQsIGFmdGVyTWFwLCBuZXcgUU5hbWVTZXRCdWlsZGVyKCksIHRydWUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBzZWUgaWYgd2UgY2FuIGZpbmQgYSBtZW1iZXIgb2YgYWZ0ZXIgdGhhdCBpcyBub3QgYSBtZW1iZXIgb2Ygc3RhcnQKLSAgICAgICAgICAgIC8vIGlmIHdlIGNhbiwgdGhlbiBwYXJ0aWNsZSBhdHRyaWJ1dGlvbiBpcyBub3QgdW5pcXVlCi0gICAgICAgICAgICBkZXRlcm1pbmlzdGljID0gYWZ0ZXJNYXBTdWJzdW1lZEJ5U3RhcnRNYXAoc3RhcnRNYXAsIGFmdGVyTWFwKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh2YXJsb29wKQotICAgICAgICAgICAgZXhjbHVkZW5leHQuYWRkQWxsKHN0YXJ0KTsKLQotICAgICAgICBjYW5za2lwID0gY2Fuc2tpcCB8fCBtaW5PY2N1cnMuc2lnbnVtKCkgPT0gMDsKLQotICAgICAgICBwYXJ0SW1wbC5zZXRUcmFuc2l0aW9uUnVsZXMoc3RhcnQudG9RTmFtZVNldCgpLCBjYW5za2lwKTsKLSAgICAgICAgcGFydEltcGwuc2V0VHJhbnNpdGlvbk5vdGVzKGV4Y2x1ZGVuZXh0LnRvUU5hbWVTZXQoKSwgZGV0ZXJtaW5pc3RpYyk7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gYWZ0ZXJNYXBTdWJzdW1lZEJ5U3RhcnRNYXAoTWFwIHN0YXJ0TWFwLCBNYXAgYWZ0ZXJNYXApCi0gICAgewotICAgICAgICBpZiAoYWZ0ZXJNYXAuc2l6ZSgpID4gc3RhcnRNYXAuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgaWYgKGFmdGVyTWFwLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gc3RhcnRNYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgU2NoZW1hUGFydGljbGUgcGFydCA9IChTY2hlbWFQYXJ0aWNsZSlpLm5leHQoKTsKLSAgICAgICAgICAgIGlmIChwYXJ0LmdldFBhcnRpY2xlVHlwZSgpID09IFNjaGVtYVBhcnRpY2xlLldJTERDQVJEKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChhZnRlck1hcC5jb250YWluc0tleShwYXJ0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFFOYW1lU2V0IHN0YXJ0U2V0ID0gKFFOYW1lU2V0KXN0YXJ0TWFwLmdldChwYXJ0KTsKLSAgICAgICAgICAgICAgICAgICAgUU5hbWVTZXQgYWZ0ZXJTZXQgPSAoUU5hbWVTZXQpYWZ0ZXJNYXAuZ2V0KHBhcnQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0U2V0LmNvbnRhaW5zQWxsKGFmdGVyU2V0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhZnRlck1hcC5yZW1vdmUocGFydCk7Ci0gICAgICAgICAgICBpZiAoYWZ0ZXJNYXAuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAoYWZ0ZXJNYXAuaXNFbXB0eSgpKTsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBwYXJ0aWNsZXNNYXRjaGluZ1N0YXJ0KFNjaGVtYVBhcnRpY2xlIHBhcnQsIFFOYW1lU2V0U3BlY2lmaWNhdGlvbiBzdXNwZWN0U2V0LCBNYXAgcmVzdWx0LCBRTmFtZVNldEJ1aWxkZXIgZWxpbWluYXRlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChwYXJ0LmdldFBhcnRpY2xlVHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLkVMRU1FTlQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFzdXNwZWN0U2V0LmNvbnRhaW5zKHBhcnQuZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIHJlc3VsdC5wdXQocGFydCwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgZWxpbWluYXRlLmFkZChwYXJ0LmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5XSUxEQ0FSRDoKLSAgICAgICAgICAgICAgICBpZiAoc3VzcGVjdFNldC5pc0Rpc2pvaW50KHBhcnQuZ2V0V2lsZGNhcmRTZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICByZXN1bHQucHV0KHBhcnQsIHBhcnQuZ2V0V2lsZGNhcmRTZXQoKS5pbnRlcnNlY3Qoc3VzcGVjdFNldCkpOwotICAgICAgICAgICAgICAgIGVsaW1pbmF0ZS5hZGRBbGwocGFydC5nZXRXaWxkY2FyZFNldCgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLkNIT0lDRToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQUxMOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU2NoZW1hUGFydGljbGVbXSBjaGlsZHJlbiA9IHBhcnQuZ2V0UGFydGljbGVDaGlsZHJlbigpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgcGFydGljbGVzTWF0Y2hpbmdTdGFydChjaGlsZHJlbltpXSwgc3VzcGVjdFNldCwgcmVzdWx0LCBlbGltaW5hdGUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5TRVFVRU5DRToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFNjaGVtYVBhcnRpY2xlW10gY2hpbGRyZW4gPSBwYXJ0LmdldFBhcnRpY2xlQ2hpbGRyZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkcmVuWzBdLmlzU2tpcHBhYmxlKCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlc01hdGNoaW5nU3RhcnQoY2hpbGRyZW5bMF0sIHN1c3BlY3RTZXQsIHJlc3VsdCwgZWxpbWluYXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBRTmFtZVNldEJ1aWxkZXIgcmVtYWluaW5nU3VzcGVjdHMgPSBuZXcgUU5hbWVTZXRCdWlsZGVyKHN1c3BlY3RTZXQpOwotICAgICAgICAgICAgICAgICAgICBRTmFtZVNldEJ1aWxkZXIgc3VzcGVjdHNUb0VsaW1pbmF0ZSA9IG5ldyBRTmFtZVNldEJ1aWxkZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFydGljbGVzTWF0Y2hpbmdTdGFydChjaGlsZHJlbltpXSwgcmVtYWluaW5nU3VzcGVjdHMsIHJlc3VsdCwgc3VzcGVjdHNUb0VsaW1pbmF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbGltaW5hdGUuYWRkQWxsKHN1c3BlY3RzVG9FbGltaW5hdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZHJlbltpXS5pc1NraXBwYWJsZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ1N1c3BlY3RzLnJlbW92ZUFsbChzdXNwZWN0c1RvRWxpbWluYXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW1haW5pbmdTdXNwZWN0cy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgc3VzcGVjdHNUb0VsaW1pbmF0ZS5jbGVhcigpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBwYXJ0aWNsZXNNYXRjaGluZ0FmdGVyKFNjaGVtYVBhcnRpY2xlIHBhcnQsIFFOYW1lU2V0U3BlY2lmaWNhdGlvbiBzdXNwZWN0U2V0LCBNYXAgcmVzdWx0LCBRTmFtZVNldEJ1aWxkZXIgZWxpbWluYXRlLCBib29sZWFuIHRvcCkKLSAgICB7Ci0gICAgICAgIHJlY3Vyc2U6IHN3aXRjaCAocGFydC5nZXRQYXJ0aWNsZVR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5DSE9JQ0U6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLkFMTDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFNjaGVtYVBhcnRpY2xlW10gY2hpbGRyZW4gPSBwYXJ0LmdldFBhcnRpY2xlQ2hpbGRyZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpY2xlc01hdGNoaW5nQWZ0ZXIoY2hpbGRyZW5baV0sIHN1c3BlY3RTZXQsIHJlc3VsdCwgZWxpbWluYXRlLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrIHJlY3Vyc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5TRVFVRU5DRToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFNjaGVtYVBhcnRpY2xlW10gY2hpbGRyZW4gPSBwYXJ0LmdldFBhcnRpY2xlQ2hpbGRyZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcmVjdXJzZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS5pc1NraXBwYWJsZSgpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZXNNYXRjaGluZ0FmdGVyKGNoaWxkcmVuWzBdLCBzdXNwZWN0U2V0LCByZXN1bHQsIGVsaW1pbmF0ZSwgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgcmVjdXJzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBRTmFtZVNldEJ1aWxkZXIgcmVtYWluaW5nU3VzcGVjdHMgPSBuZXcgUU5hbWVTZXRCdWlsZGVyKHN1c3BlY3RTZXQpOwotICAgICAgICAgICAgICAgICAgICBRTmFtZVNldEJ1aWxkZXIgc3VzcGVjdHNUb0VsaW1pbmF0ZSA9IG5ldyBRTmFtZVNldEJ1aWxkZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWNsZXNNYXRjaGluZ0FmdGVyKGNoaWxkcmVuW2ldLCByZW1haW5pbmdTdXNwZWN0cywgcmVzdWx0LCBzdXNwZWN0c1RvRWxpbWluYXRlLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbGltaW5hdGUuYWRkQWxsKHN1c3BlY3RzVG9FbGltaW5hdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZHJlbltpXS5pc1NraXBwYWJsZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHJlY3Vyc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdTdXNwZWN0cy5yZW1vdmVBbGwoc3VzcGVjdHNUb0VsaW1pbmF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVtYWluaW5nU3VzcGVjdHMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHJlY3Vyc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdXNwZWN0c1RvRWxpbWluYXRlLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWsgcmVjdXJzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXRvcCkKLSAgICAgICAgewotICAgICAgICAgICAgQmlnSW50ZWdlciBtaW5PY2N1cnMgPSBwYXJ0LmdldE1pbk9jY3VycygpOwotICAgICAgICAgICAgQmlnSW50ZWdlciBtYXhPY2N1cnMgPSBwYXJ0LmdldE1heE9jY3VycygpOwotICAgICAgICAgICAgYm9vbGVhbiB2YXJsb29wID0gKG1heE9jY3VycyA9PSBudWxsIHx8IG1pbk9jY3Vycy5jb21wYXJlVG8obWF4T2NjdXJzKSA8IDApOwotICAgICAgICAgICAgaWYgKHZhcmxvb3ApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcGFydGljbGVzTWF0Y2hpbmdTdGFydChwYXJ0LCBzdXNwZWN0U2V0LCByZXN1bHQsIGVsaW1pbmF0ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBDb2RlRm9yTmFtZUVudHJ5Ci0gICAgewotICAgICAgICBDb2RlRm9yTmFtZUVudHJ5KFFOYW1lIG5hbWUsIGludCBjb2RlKQotICAgICAgICAgICAgeyB0aGlzLm5hbWUgPSBuYW1lOyB0aGlzLmNvZGUgPSBjb2RlOyB9Ci0gICAgICAgIHB1YmxpYyBRTmFtZSBuYW1lOwotICAgICAgICBwdWJsaWMgaW50IGNvZGU7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1PREVMX0dST1VQX0NPREUgPSAxMDA7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBDb2RlRm9yTmFtZUVudHJ5W10gcGFydGljbGVDb2RlcyA9IG5ldyBDb2RlRm9yTmFtZUVudHJ5W10KLSAgICB7Ci0gICAgICAgIG5ldyBDb2RlRm9yTmFtZUVudHJ5KFFOYW1lSGVscGVyLmZvckxOUygiYWxsIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiksIFNjaGVtYVBhcnRpY2xlLkFMTCksCi0gICAgICAgIG5ldyBDb2RlRm9yTmFtZUVudHJ5KFFOYW1lSGVscGVyLmZvckxOUygic2VxdWVuY2UiLCAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiKSwgU2NoZW1hUGFydGljbGUuU0VRVUVOQ0UpLAotICAgICAgICBuZXcgQ29kZUZvck5hbWVFbnRyeShRTmFtZUhlbHBlci5mb3JMTlMoImNob2ljZSIsICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIpLCBTY2hlbWFQYXJ0aWNsZS5DSE9JQ0UpLAotICAgICAgICBuZXcgQ29kZUZvck5hbWVFbnRyeShRTmFtZUhlbHBlci5mb3JMTlMoImVsZW1lbnQiLCAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiKSwgU2NoZW1hUGFydGljbGUuRUxFTUVOVCksCi0gICAgICAgIG5ldyBDb2RlRm9yTmFtZUVudHJ5KFFOYW1lSGVscGVyLmZvckxOUygiYW55IiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiksIFNjaGVtYVBhcnRpY2xlLldJTERDQVJEKSwKLSAgICAgICAgbmV3IENvZGVGb3JOYW1lRW50cnkoUU5hbWVIZWxwZXIuZm9yTE5TKCJncm91cCIsICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIpLCBNT0RFTF9HUk9VUF9DT0RFKSwKLSAgICB9OwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgTWFwIHBhcnRpY2xlQ29kZU1hcCA9IGJ1aWxkUGFydGljbGVDb2RlTWFwKCk7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBNYXAgYnVpbGRQYXJ0aWNsZUNvZGVNYXAoKQotICAgIHsKLSAgICAgICAgTWFwIHJlc3VsdCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFydGljbGVDb2Rlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHJlc3VsdC5wdXQocGFydGljbGVDb2Rlc1tpXS5uYW1lLCAgbmV3IEludGVnZXIocGFydGljbGVDb2Rlc1tpXS5jb2RlKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IHRyYW5zbGF0ZVBhcnRpY2xlQ29kZShHcm91cCBwYXJzZUVnKQotICAgIHsKLSAgICAgICAgaWYgKHBhcnNlRWcgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gdHJhbnNsYXRlUGFydGljbGVDb2RlKHBhcnNlRWcubmV3Q3Vyc29yKCkuZ2V0TmFtZSgpKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgdHJhbnNsYXRlUGFydGljbGVDb2RlKFFOYW1lIG5hbWUpCi0gICAgewotICAgICAgICBJbnRlZ2VyIHJlc3VsdCA9IChJbnRlZ2VyKXBhcnRpY2xlQ29kZU1hcC5nZXQobmFtZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gcmVzdWx0LmludFZhbHVlKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFUVFJJQlVURV9DT0RFID0gMTAwOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBVFRSSUJVVEVfR1JPVVBfQ09ERSA9IDEwMTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQU5ZX0FUVFJJQlVURV9DT0RFID0gMTAyOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgQ29kZUZvck5hbWVFbnRyeVtdIGF0dHJpYnV0ZUNvZGVzID0gbmV3IENvZGVGb3JOYW1lRW50cnlbXQotICAgIHsKLSAgICAgICAgbmV3IENvZGVGb3JOYW1lRW50cnkoUU5hbWVIZWxwZXIuZm9yTE5TKCJhdHRyaWJ1dGUiLCAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiKSwgQVRUUklCVVRFX0NPREUpLAotICAgICAgICBuZXcgQ29kZUZvck5hbWVFbnRyeShRTmFtZUhlbHBlci5mb3JMTlMoImF0dHJpYnV0ZUdyb3VwIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiksIEFUVFJJQlVURV9HUk9VUF9DT0RFKSwKLSAgICAgICAgbmV3IENvZGVGb3JOYW1lRW50cnkoUU5hbWVIZWxwZXIuZm9yTE5TKCJhbnlBdHRyaWJ1dGUiLCAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiKSwgQU5ZX0FUVFJJQlVURV9DT0RFKSwKLSAgICB9OwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgTWFwIGF0dHJpYnV0ZUNvZGVNYXAgPSBidWlsZEF0dHJpYnV0ZUNvZGVNYXAoKTsKLQotICAgIHByaXZhdGUgc3RhdGljIE1hcCBidWlsZEF0dHJpYnV0ZUNvZGVNYXAoKQotICAgIHsKLSAgICAgICAgTWFwIHJlc3VsdCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlQ29kZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICByZXN1bHQucHV0KGF0dHJpYnV0ZUNvZGVzW2ldLm5hbWUsICBuZXcgSW50ZWdlcihhdHRyaWJ1dGVDb2Rlc1tpXS5jb2RlKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgc3RhdGljIGludCB0cmFuc2xhdGVBdHRyaWJ1dGVDb2RlKFFOYW1lIGN1cnJlbnROYW1lKQotICAgIHsKLSAgICAgICAgSW50ZWdlciByZXN1bHQgPSAoSW50ZWdlcilhdHRyaWJ1dGVDb2RlTWFwLmdldChjdXJyZW50TmFtZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gcmVzdWx0LmludFZhbHVlKCk7Ci0gICAgfQotCi0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1N0c2NJbXBvcnRlci5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU3RzY0ltcG9ydGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzOGEzZTYuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU3RzY0ltcG9ydGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NDggKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hOwotCi1pbXBvcnQgb3JnLnczLngyMDAxLnhtbFNjaGVtYS5SZWRlZmluZURvY3VtZW50LlJlZGVmaW5lOwotaW1wb3J0IG9yZy53My54MjAwMS54bWxTY2hlbWEuU2NoZW1hRG9jdW1lbnQuU2NoZW1hOwotaW1wb3J0IG9yZy53My54MjAwMS54bWxTY2hlbWEuU2NoZW1hRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczLngyMDAxLnhtbFNjaGVtYS5JbXBvcnREb2N1bWVudC5JbXBvcnQ7Ci1pbXBvcnQgb3JnLnczLngyMDAxLnhtbFNjaGVtYS5JbmNsdWRlRG9jdW1lbnQuSW5jbHVkZTsKLQotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEubmV0LlVSSTsKLWltcG9ydCBqYXZhLm5ldC5VUklTeW50YXhFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uWG1sRXJyb3JDb250ZXh0OwotaW1wb3J0IG9yZy54bWwuc2F4LkVudGl0eVJlc29sdmVyOwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLQotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uU291cmNlOwotCi1wdWJsaWMgY2xhc3MgU3RzY0ltcG9ydGVyCi17Ci0gICAgcHVibGljIHN0YXRpYyBTY2hlbWFUb1Byb2Nlc3NbXSByZXNvbHZlSW1wb3J0c0FuZEluY2x1ZGVzKFNjaGVtYVtdIHN0YXJ0V2l0aCkKLSAgICB7Ci0gICAgICAgIERvd25sb2FkVGFibGUgZW5naW5lID0gbmV3IERvd25sb2FkVGFibGUoc3RhcnRXaXRoKTsKLSAgICAgICAgcmV0dXJuIGVuZ2luZS5yZXNvbHZlSW1wb3J0c0FuZEluY2x1ZGVzKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBTY2hlbWFUb1Byb2Nlc3MKLSAgICB7Ci0gICAgICAgIHByaXZhdGUgU2NoZW1hIHNjaGVtYTsKLSAgICAgICAgcHJpdmF0ZSBTdHJpbmcgY2hhbWVsZW9uTmFtZXNwYWNlOwotICAgICAgICBwcml2YXRlIFJlZGVmaW5lIHJlZGVmaW5lOwotCi0gICAgICAgIHB1YmxpYyBTY2hlbWFUb1Byb2Nlc3MoU2NoZW1hIHNjaGVtYSwgU3RyaW5nIGNoYW1lbGVvbk5hbWVzcGFjZSwgUmVkZWZpbmUgcmVkZWZpbmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuc2NoZW1hID0gc2NoZW1hOwotICAgICAgICAgICAgdGhpcy5jaGFtZWxlb25OYW1lc3BhY2UgPSBjaGFtZWxlb25OYW1lc3BhY2U7Ci0gICAgICAgICAgICB0aGlzLnJlZGVmaW5lID0gcmVkZWZpbmU7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogVGhlIHNjaGVtYSB0byBwYXJzZS4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBTY2hlbWEgZ2V0U2NoZW1hKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHNjaGVtYTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBUaGUgYmFzZSBVUkkgZm9yIHRoaXMgc3RwCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFNvdXJjZU5hbWUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc2NoZW1hLmRvY3VtZW50UHJvcGVydGllcygpLmdldFNvdXJjZU5hbWUoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIFRoZSByZWRlZmluZSBlbGVtZW50LCBpZiBwcm9jZXNzZWQgdmlhIHJlZGVmaW5lCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgUmVkZWZpbmUgZ2V0UmVkZWZpbmUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gcmVkZWZpbmU7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogVGhlIGNoYW1lbGVvbiBuYW1lc3BhY2UuIE51bGwgaWYgdGhpcyBzY2hlbWEgaXMgbm90IGJlaW5nIHRyZWF0ZWQKLSAgICAgICAgICogYXMgYSBjaGFtZWxlb24uIChUaGUgb3JkaW5hcnkgdGFyZ2V0TmFtZXNwYWNlIHdpbGwganVzdCBiZSBleHRyYWN0ZWQKLSAgICAgICAgICogZnJvbSB0aGUgc3ludGF4IG9mIHRoZSBzY2hlbWEuKQotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIFN0cmluZyBnZXRDaGFtZWxlb25OYW1lc3BhY2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gY2hhbWVsZW9uTmFtZXNwYWNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodGhpcyA9PSBvKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGlmICghKG8gaW5zdGFuY2VvZiBTY2hlbWFUb1Byb2Nlc3MpKSByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGZpbmFsIFNjaGVtYVRvUHJvY2VzcyBzY2hlbWFUb1Byb2Nlc3MgPSAoU2NoZW1hVG9Qcm9jZXNzKSBvOwotCi0gICAgICAgICAgICBpZiAoY2hhbWVsZW9uTmFtZXNwYWNlICE9IG51bGwgPyAhY2hhbWVsZW9uTmFtZXNwYWNlLmVxdWFscyhzY2hlbWFUb1Byb2Nlc3MuY2hhbWVsZW9uTmFtZXNwYWNlKSA6IHNjaGVtYVRvUHJvY2Vzcy5jaGFtZWxlb25OYW1lc3BhY2UgIT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKHJlZGVmaW5lICE9IG51bGwgPyAhcmVkZWZpbmUuZXF1YWxzKHNjaGVtYVRvUHJvY2Vzcy5yZWRlZmluZSkgOiBzY2hlbWFUb1Byb2Nlc3MucmVkZWZpbmUgIT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKCFzY2hlbWEuZXF1YWxzKHNjaGVtYVRvUHJvY2Vzcy5zY2hlbWEpKSByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGludCBoYXNoQ29kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCByZXN1bHQ7Ci0gICAgICAgICAgICByZXN1bHQgPSBzY2hlbWEuaGFzaENvZGUoKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IDI5ICogcmVzdWx0ICsgKGNoYW1lbGVvbk5hbWVzcGFjZSAhPSBudWxsID8gY2hhbWVsZW9uTmFtZXNwYWNlLmhhc2hDb2RlKCkgOiAwKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IDI5ICogcmVzdWx0ICsgKHJlZGVmaW5lICE9IG51bGwgPyByZWRlZmluZS5oYXNoQ29kZSgpIDogMCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST0pFQ1RfVVJMX1BSRUZJWCA9ICJwcm9qZWN0Oi8vbG9jYWwiOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGJhc2VVUkxGb3JEb2MoWG1sT2JqZWN0IG9iaikKLSAgICB7Ci0gICAgICAgIFN0cmluZyBwYXRoID0gb2JqLmRvY3VtZW50UHJvcGVydGllcygpLmdldFNvdXJjZU5hbWUoKTsKLQotICAgICAgICBpZiAocGF0aCA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aCgiLyIpKQotICAgICAgICAgICAgcmV0dXJuIFBST0pFQ1RfVVJMX1BSRUZJWCArIHBhdGgucmVwbGFjZSgnXFwnLCAnLycpOwotCi0gICAgICAgIC8vIGxvb2tzIGxpa2UgYSBVUkw/Ci0gICAgICAgIGludCBjb2xvbiA9IHBhdGguaW5kZXhPZignOicpOwotICAgICAgICBpZiAoY29sb24gPiAxICYmIHBhdGguc3Vic3RyaW5nKDAsIGNvbG9uKS5tYXRjaGVzKCJeXFx3KyQiKSkKLSAgICAgICAgICAgIHJldHVybiBwYXRoOwotCi0gICAgICAgIHJldHVybiBQUk9KRUNUX1VSTF9QUkVGSVggKyAiLyIgKyBwYXRoLnJlcGxhY2UoJ1xcJywgJy8nKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBVUkkgcGFyc2VVUkkoU3RyaW5nIHMpCi0gICAgewotICAgICAgICBpZiAocyA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgVVJJKHMpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChVUklTeW50YXhFeGNlcHRpb24gc3ludGF4KQotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy93b3JrYXJvdW5kIGZvciBTdW4gYnVnICMgNDcyMzcyNgotICAgIHByaXZhdGUgc3RhdGljIFVSSSByZXNvbHZlKFVSSSBiYXNlLCBTdHJpbmcgY2hpbGQpCi0gICAgewotICAgICAgICBVUkkgcnVyaSA9IGJhc2UucmVzb2x2ZShjaGlsZCk7Ci0gICAgICAgIAotICAgICAgICAvL2ZpeCB1cCBub3JtYWxpemF0aW9uIGJ1ZwotICAgICAgICBpZiAoImZpbGUiLmVxdWFscyhydXJpLmdldFNjaGVtZSgpKSAmJiAhIGNoaWxkLmVxdWFscyhydXJpKSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGJhc2UuZ2V0UGF0aCgpLnN0YXJ0c1dpdGgoIi8vIikgJiYgIXJ1cmkuZ2V0UGF0aCgpLnN0YXJ0c1dpdGgoIi8vIikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHBhdGggPSAiLy8vIi5jb25jYXQocnVyaS5nZXRQYXRoKCkpOwotICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcnVyaSA9IG5ldyBVUkkoImZpbGUiLCBudWxsLCBwYXRoLCBydXJpLmdldFF1ZXJ5KCksIHJ1cmkuZ2V0RnJhZ21lbnQoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhdGNoKFVSSVN5bnRheEV4Y2VwdGlvbiB1cmlzKQotICAgICAgICAgICAgICAgIHt9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJ1cmk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBEb3dubG9hZFRhYmxlCi0gICAgewotICAgICAgICAvKioKLSAgICAgICAgICogTmFtZXNwYWNlL3NjaGVtYUxvY2F0aW9uIHBhaXIuCi0gICAgICAgICAqCi0gICAgICAgICAqIERvd25sb2FkZWQgc2NoZW1hcyBhcmUgaW5kZXhlZCBieSBuYW1lc3BhY2UsIHNjaGVtYUxvY2F0aW9uLCBhbmQgYm90aC4KLSAgICAgICAgICoKLSAgICAgICAgICogQSBwZXJmZWN0IG1hdGNoIGlzIHByZWZlcnJlZCwgYnV0IGEgbWF0Y2gtYnktbmFtZXNwYWNlIGlzIGFjY2VwdGVkLgotICAgICAgICAgKiBBIG1hdGNoLWJ5LXNjaGVtYUxvY2F0aW9uIGlzIG9ubHkgYWNjZXB0ZWQgZm9yIGluY2x1ZGVzIChub3QgaW1wb3J0cykuCi0gICAgICAgICAqLwotICAgICAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBOc0xvY1BhaXIKLSAgICAgICAgewotICAgICAgICAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZXNwYWNlVVJJOwotICAgICAgICAgICAgcHJpdmF0ZSBTdHJpbmcgbG9jYXRpb25VUkw7Ci0KLSAgICAgICAgICAgIHB1YmxpYyBOc0xvY1BhaXIoU3RyaW5nIG5hbWVzcGFjZVVSSSwgU3RyaW5nIGxvY2F0aW9uVVJMKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRoaXMubmFtZXNwYWNlVVJJID0gbmFtZXNwYWNlVVJJOwotICAgICAgICAgICAgICAgIHRoaXMubG9jYXRpb25VUkwgPSBsb2NhdGlvblVSTDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyoqCi0gICAgICAgICAgICAgKiBFbXB0eSBzdHJpbmcgZm9yIG5vLW5hbWVzcGFjZSwgbnVsbCBmb3IgbmFtZXNwYWNlLW5vdC1wYXJ0LW9mLWtleQotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZVVSSSgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWVzcGFjZVVSSTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIFN0cmluZyBnZXRMb2NhdGlvblVSTCgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uVVJMOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMgPT0gbykgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKCEobyBpbnN0YW5jZW9mIE5zTG9jUGFpcikpIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgICAgIGZpbmFsIE5zTG9jUGFpciBuc0xvY1BhaXIgPSAoTnNMb2NQYWlyKSBvOwotCi0gICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uVVJMICE9IG51bGwgPyAhbG9jYXRpb25VUkwuZXF1YWxzKG5zTG9jUGFpci5sb2NhdGlvblVSTCkgOiBuc0xvY1BhaXIubG9jYXRpb25VUkwgIT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGlmIChuYW1lc3BhY2VVUkkgIT0gbnVsbCA/ICFuYW1lc3BhY2VVUkkuZXF1YWxzKG5zTG9jUGFpci5uYW1lc3BhY2VVUkkpIDogbnNMb2NQYWlyLm5hbWVzcGFjZVVSSSAhPSBudWxsKSByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIGludCBoYXNoQ29kZSgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHJlc3VsdDsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSAobmFtZXNwYWNlVVJJICE9IG51bGwgPyBuYW1lc3BhY2VVUkkuaGFzaENvZGUoKSA6IDApOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IDI5ICogcmVzdWx0ICsgKGxvY2F0aW9uVVJMICE9IG51bGwgPyBsb2NhdGlvblVSTC5oYXNoQ29kZSgpIDogMCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIERpZ2VzdEtleQotICAgICAgICB7Ci0gICAgICAgICAgICBieXRlW10gX2RpZ2VzdDsKLSAgICAgICAgICAgIGludCBfaGFzaENvZGU7Ci0gICAgICAgICAgICBEaWdlc3RLZXkoYnl0ZVtdIGRpZ2VzdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfZGlnZXN0ID0gZGlnZXN0OwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNCAmJiBpIDwgZGlnZXN0Lmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgX2hhc2hDb2RlID0gX2hhc2hDb2RlIDw8IDg7Ci0gICAgICAgICAgICAgICAgICAgIF9oYXNoQ29kZSA9IF9oYXNoQ29kZSArIGRpZ2VzdFtpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcyA9PSBvKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoIShvIGluc3RhbmNlb2YgRGlnZXN0S2V5KSkgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIHJldHVybiBBcnJheXMuZXF1YWxzKF9kaWdlc3QsICgoRGlnZXN0S2V5KW8pLl9kaWdlc3QpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gX2hhc2hDb2RlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBNYXAgc2NoZW1hQnlOc0xvY1BhaXIgPSBuZXcgSGFzaE1hcCgpOwotICAgICAgICBwcml2YXRlIE1hcCBzY2hlbWFCeURpZ2VzdEtleSA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgIHByaXZhdGUgTGlua2VkTGlzdCBzY2FuTmVlZGVkID0gbmV3IExpbmtlZExpc3QoKTsKLSAgICAgICAgcHJpdmF0ZSBTZXQgZW1wdHlOYW1lc3BhY2VTY2hlbWFzID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgcHJpdmF0ZSBTZXQgc2Nhbm5lZEFscmVhZHkgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICBwcml2YXRlIFNldCBmYWlsZWREb3dubG9hZHMgPSBuZXcgSGFzaFNldCgpOwotCi0gICAgICAgIHByaXZhdGUgU2NoZW1hIGRvd25sb2FkU2NoZW1hKFhtbE9iamVjdCByZWZlcmVuY2VkQnksIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsIFN0cmluZyBsb2NhdGlvblVSTCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gbm8gbG9jYXRpb24gVVJMIHByb3ZpZGVkPyAgVGhlbiBub3RoaW5nIHRvIGRvLgotICAgICAgICAgICAgaWYgKGxvY2F0aW9uVVJMID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZpcnN0IHJlc29sdmUgcmVsYXRpdmUgVVJMcyB3aXRoIHJlc3BlY3QgdG8gYmFzZSBVUkwgZm9yIGRvYwotICAgICAgICAgICAgVVJJIGJhc2VVUkkgPSBwYXJzZVVSSShiYXNlVVJMRm9yRG9jKHJlZmVyZW5jZWRCeSkpOwotICAgICAgICAgICAgU3RyaW5nIGFic29sdXRlVVJMID0gYmFzZVVSSSA9PSBudWxsID8gbG9jYXRpb25VUkwgOiByZXNvbHZlKGJhc2VVUkksIGxvY2F0aW9uVVJMKS50b1N0cmluZygpOwotCi0gICAgICAgICAgICAvLyBwcm9iZSAxOiBucyt1cmwgLSBwZXJmZWN0IG1hdGNoCi0gICAgICAgICAgICBpZiAoYWJzb2x1dGVVUkwgIT0gbnVsbCAmJiB0YXJnZXROYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTY2hlbWEgcmVzdWx0ID0gKFNjaGVtYSlzY2hlbWFCeU5zTG9jUGFpci5nZXQobmV3IE5zTG9jUGFpcih0YXJnZXROYW1lc3BhY2UsIGFic29sdXRlVVJMKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTdHNjU3RhdGUgc3RhdGUgPSBTdHNjU3RhdGUuZ2V0KCk7Ci0KLSAgICAgICAgICAgIC8vIHByb2JlIDI6IHdlIGhhdmUgcHJlZXhpc3Rpbmcga25vd2xlZGdlIG9mIHRoaXMgbmFtZXNwYWNlLAotICAgICAgICAgICAgLy8gZWl0aGVyIGZyb20gYW5vdGhlciBzY2hlbWEgZmlsZSBvciBmcm9tIHRoZSBsaW5rZXIuCi0gICAgICAgICAgICAvLyBJZiB3ZSdyZSBub3QgZG93bmxvYWRpbmcgdGhlIGdpdmVuIFVSTCwgc2tpcCBpdCBzaWxlbnRseSBpZiB0aGUKLSAgICAgICAgICAgIC8vIG5hbWVzcGFjZSBpcyBhbHJlYWR5IHJlcHJlc2VudGVkIGJ5IGEgZmlsZSB3ZSBoYXZlLgotICAgICAgICAgICAgLy8gQWxzbywgc3VwcHJlc3MgZG93bmxvYWRzIG9mIFVSTHMgdG8gbmFtZXNwYWNlcyB0aGF0IGFyZSBhbHJlYWR5Ci0gICAgICAgICAgICAvLyBrbm93biBieSB0aGUgbGlua2VyLgotICAgICAgICAgICAgLy8gKFdlIG5ldmVyIGFzc3VtZSBwcmVleGlzdGluZyBrbm93bGVkZ2Ugb2YgdGhlIG5vLW5hbWVzcGFjZSwKLSAgICAgICAgICAgIC8vIGV2ZW4gaWYgd2UgaGF2ZSBzb21lIGRlZmluaXRpb25zLCBzaW5jZSBpdCdzIGxpa2VseSB0aGF0Ci0gICAgICAgICAgICAvLyBtb3JlIHRoYW4gb25lIHBlcnNvbiBpcyBwbGF5aW5nIGluIHRoZSBuby1uYW1lc3BhY2UgYXQgb25jZS4pCi0gICAgICAgICAgICBpZiAodGFyZ2V0TmFtZXNwYWNlICE9IG51bGwgJiYgIXRhcmdldE5hbWVzcGFjZS5lcXVhbHMoIiIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIHRoZSBVUkwgaXMgbm90IG9uZSB0byBkb3dubG9hZDsgc2hvdWxkIHdlIGFzc3VtZSB3ZSBrbm93IGFib3V0IHRoZSBuYW1lc3BhY2U/Ci0gICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS5zaG91bGREb3dubG9hZFVSSShhYnNvbHV0ZVVSTCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgYSBzY2hlbWEgcmVwcmVzZW50aW5nIHRoaXMgbmFtZXNwYWNlLAotICAgICAgICAgICAgICAgICAgICAvLyB0aGVuIHNraXAgdGhpcyBVUkwgc2lsZW50bHkgd2l0aG91dCBwcm9kdWNpbmcgYW4gZXJyb3IuCi0gICAgICAgICAgICAgICAgICAgIFNjaGVtYSByZXN1bHQgPSAoU2NoZW1hKXNjaGVtYUJ5TnNMb2NQYWlyLmdldChuZXcgTnNMb2NQYWlyKHRhcmdldE5hbWVzcGFjZSwgbnVsbCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIElmIHRoZSBsaW5rZXIgYWxyZWFkeSBrbm93cyBhYm91dCB0aGlzIG5hbWVzcGFjZSwgc2tpcAotICAgICAgICAgICAgICAgIC8vIHRoaXMgVVJMLgotICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5saW5rZXJEZWZpbmVzTmFtZXNwYWNlKHRhcmdldE5hbWVzcGFjZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBwcm9iZSAzOiB1cmwgb25seQotICAgICAgICAgICAgaWYgKGFic29sdXRlVVJMICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2NoZW1hIHJlc3VsdCA9IChTY2hlbWEpc2NoZW1hQnlOc0xvY1BhaXIuZ2V0KG5ldyBOc0xvY1BhaXIobnVsbCwgYWJzb2x1dGVVUkwpKTsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIG5vIG1hdGNoOiBlcnJvciBpZiB3ZSBjYW4ndCBvciB3b24ndCBkb3dubG9hZC4KLSAgICAgICAgICAgIGlmIChhYnNvbHV0ZVVSTCA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJDb3VsZCBub3QgZmluZCByZXNvdXJjZSAtIG5vIHZhbGlkIGxvY2F0aW9uIFVSTC4iLCBYbWxFcnJvckNvbnRleHQuQ0FOTk9UX0ZJTkRfUkVTT1VSQ0UsIHJlZmVyZW5jZWRCeSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChwcmV2aW91c2x5RmFpbGVkVG9Eb3dubG9hZChhYnNvbHV0ZVVSTCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gYW4gZXJyb3IgbWVzc2FnZSBoYXMgYWxyZWFkeSBiZWVuIHByb2R1Y2VkLgotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXN0YXRlLnNob3VsZERvd25sb2FkVVJJKGFic29sdXRlVVJMKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvcigiQ291bGQgbm90IGxvYWQgcmVzb3VyY2UgXCIiICsgYWJzb2x1dGVVUkwgKyAiXCIgKG5ldHdvcmsgZG93bmxvYWRzIGRpc2FibGVkKS4iLCBYbWxFcnJvckNvbnRleHQuQ0FOTk9UX0ZJTkRfUkVTT1VSQ0UsIHJlZmVyZW5jZWRCeSk7Ci0gICAgICAgICAgICAgICAgYWRkRmFpbGVkRG93bmxvYWQoYWJzb2x1dGVVUkwpOwotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyB0cnkgdG8gZG93bmxvYWQKLSAgICAgICAgICAgIGRvd25sb2FkOiB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBYbWxPYmplY3QgeGRvYyA9IGRvd25sb2FkRG9jdW1lbnQoc3RhdGUuZ2V0UzRTTG9hZGVyKCksIHRhcmdldE5hbWVzcGFjZSwgYWJzb2x1dGVVUkwpOwotCi0gICAgICAgICAgICAgICAgU2NoZW1hIHJlc3VsdCA9IGZpbmRNYXRjaEJ5RGlnZXN0KHhkb2MpOwotICAgICAgICAgICAgICAgIFN0cmluZyBzaG9ydG5hbWUgPSBzdGF0ZS5yZWxhdGl2aXplKGFic29sdXRlVVJMKTsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBpZiBhbiBleGFjdGx5LXRoZS1zYW1lIGRvY3VtZW50IGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkLCB1c2UgdGhlIG9yaWdpbmFsIGFuZCBzcGV3Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBkdXBuYW1lID0gc3RhdGUucmVsYXRpdml6ZShyZXN1bHQuZG9jdW1lbnRQcm9wZXJ0aWVzKCkuZ2V0U291cmNlTmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGR1cG5hbWUgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmluZm8oc2hvcnRuYW1lICsgIiBpcyB0aGUgc2FtZSBhcyAiICsgZHVwbmFtZSArICIgKGlnbm9yaW5nIHRoZSBkdXBsaWNhdGUgZmlsZSkiKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuaW5mbyhzaG9ydG5hbWUgKyAiIGlzIHRoZSBzYW1lIGFzIGFub3RoZXIgc2NoZW1hIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgaXQncyBhIG5ldyBkb2N1bWVudDogdmFsaWRhdGUgaXQgYW5kIGdyYWIgdGhlIGNvbnRlbnRzCi0gICAgICAgICAgICAgICAgICAgIFhtbE9wdGlvbnMgdm9wdGlvbnMgPSBuZXcgWG1sT3B0aW9ucygpOwotICAgICAgICAgICAgICAgICAgICB2b3B0aW9ucy5zZXRFcnJvckxpc3RlbmVyKHN0YXRlLmdldEVycm9yTGlzdGVuZXIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghKHhkb2MgaW5zdGFuY2VvZiBTY2hlbWFEb2N1bWVudCkgfHwgIXhkb2MudmFsaWRhdGUodm9wdGlvbnMpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvcigiUmVmZXJlbmNlZCBkb2N1bWVudCBpcyBub3QgYSB2YWxpZCBzY2hlbWEiLCBYbWxFcnJvckNvbnRleHQuQ0FOTk9UX0ZJTkRfUkVTT1VSQ0UsIHJlZmVyZW5jZWRCeSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhayBkb3dubG9hZDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIFNjaGVtYURvY3VtZW50IHNEb2MgPSAoU2NoZW1hRG9jdW1lbnQpeGRvYzsKLQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzRG9jLmdldFNjaGVtYSgpOwotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5pbmZvKCJMb2FkaW5nIHJlZmVyZW5jZWQgZmlsZSAiICsgc2hvcnRuYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgTnNMb2NQYWlyIGtleSA9IG5ldyBOc0xvY1BhaXIoZW1wdHlTdHJpbmdJZk51bGwocmVzdWx0LmdldFRhcmdldE5hbWVzcGFjZSgpKSwgYWJzb2x1dGVVUkwpOwotICAgICAgICAgICAgICAgIGFkZFN1Y2Nlc3NmdWxEb3dubG9hZChrZXksIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gbWFsZm9ybWVkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJVUkwgXCIiICsgYWJzb2x1dGVVUkwgKyAiXCIgaXMgbm90IHdlbGwtZm9ybWVkIiwgWG1sRXJyb3JDb250ZXh0LkNBTk5PVF9GSU5EX1JFU09VUkNFLCByZWZlcmVuY2VkQnkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGNvbm5lY3Rpb25Qcm9ibGVtKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKGNvbm5lY3Rpb25Qcm9ibGVtLnRvU3RyaW5nKCksIFhtbEVycm9yQ29udGV4dC5DQU5OT1RfRklORF9SRVNPVVJDRSwgcmVmZXJlbmNlZEJ5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChYbWxFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvcigiUHJvYmxlbSBwYXJzaW5nIHJlZmVyZW5jZWQgWE1MIHJlc291cmNlIC0gIiArIGUuZ2V0TWVzc2FnZSgpLCBYbWxFcnJvckNvbnRleHQuQ0FOTk9UX0ZJTkRfUkVTT1VSQ0UsIHJlZmVyZW5jZWRCeSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHJlY29yZCBmYWlsdXJlIHNvIHRoYXQgd2UgZG9uJ3QgdHJ5IHRvIGRvd25sb2FkIHRoaXMgVVJMIGFnYWluCi0gICAgICAgICAgICBhZGRGYWlsZWREb3dubG9hZChhYnNvbHV0ZVVSTCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBYbWxPYmplY3QgZG93bmxvYWREb2N1bWVudChTY2hlbWFUeXBlTG9hZGVyIGxvYWRlciwgU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIGFic29sdXRlVVJMKQotICAgICAgICAgICAgICAgIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBYbWxFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgICAgU3RzY1N0YXRlIHN0YXRlID0gU3RzY1N0YXRlLmdldCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBFbnRpdHlSZXNvbHZlciByZXNvbHZlciA9IHN0YXRlLmdldEVudGl0eVJlc29sdmVyKCk7Ci0gICAgICAgICAgICBpZiAocmVzb2x2ZXIgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBJbnB1dFNvdXJjZSBzb3VyY2U7Ci0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSByZXNvbHZlci5yZXNvbHZlRW50aXR5KG5hbWVzcGFjZSwgYWJzb2x1dGVVUkwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXRjaCAoU0FYRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWG1sRXhjZXB0aW9uKGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gZmlyc3QgcHJlZmVyZW5jZSBmb3IgSW5wdXRTb3VyY2UgY29udHJhY3Q6IGNoYXJhY3RlciBzdHJlYW0KLSAgICAgICAgICAgICAgICBSZWFkZXIgcmVhZGVyID0gc291cmNlLmdldENoYXJhY3RlclN0cmVhbSgpOwotICAgICAgICAgICAgICAgIGlmIChyZWFkZXIgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFhtbE9wdGlvbnMgb3B0aW9ucyA9IG5ldyBYbWxPcHRpb25zKCk7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2V0TG9hZExpbmVOdW1iZXJzKCk7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2V0RG9jdW1lbnRTb3VyY2VOYW1lKGFic29sdXRlVVJMKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRlci5wYXJzZShyZWFkZXIsIG51bGwsIG9wdGlvbnMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBzZWNvbmQgcHJlZmVyZW5jZSBmb3IgSW5wdXRTb3VyY2UgY29udHJhY3Q6IAotICAgICAgICAgICAgICAgIElucHV0U3RyZWFtIGJ5dGVzID0gc291cmNlLmdldEJ5dGVTdHJlYW0oKTsKLSAgICAgICAgICAgICAgICBpZiAoYnl0ZXMgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBlbmNvZGluZyA9IHNvdXJjZS5nZXRFbmNvZGluZygpOwotICAgICAgICAgICAgICAgICAgICBYbWxPcHRpb25zIG9wdGlvbnMgPSBuZXcgWG1sT3B0aW9ucygpOwotICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnNldExvYWRMaW5lTnVtYmVycygpOwotICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnNldExvYWRNZXNzYWdlRGlnZXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2V0RG9jdW1lbnRTb3VyY2VOYW1lKGFic29sdXRlVVJMKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVuY29kaW5nICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnNldENoYXJhY3RlckVuY29kaW5nKGVuY29kaW5nKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRlci5wYXJzZShieXRlcywgbnVsbCwgb3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIHRoaXJkIHByZWZlcmVuY2U6IHVzZSB0aGUgKHBvc3NpYmx5IHJlZGlyZWN0ZWQpIHVybAotICAgICAgICAgICAgICAgIFN0cmluZyB1cmxUb0xvYWQgPSBzb3VyY2UuZ2V0U3lzdGVtSWQoKTsKLSAgICAgICAgICAgICAgICBpZiAodXJsVG9Mb2FkID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJT0V4Y2VwdGlvbigiRW50aXR5UmVzb2x2ZXIgdW5hYmxlIHRvIHJlc29sdmUgIiArIGFic29sdXRlVVJMICsgIiAoZm9yIG5hbWVzcGFjZSAiICsgbmFtZXNwYWNlICsgIikiKTsKLSAgICAgICAgICAgICAgICBYbWxPcHRpb25zIG9wdGlvbnMgPSBuZXcgWG1sT3B0aW9ucygpOwotICAgICAgICAgICAgICAgIG9wdGlvbnMuc2V0TG9hZExpbmVOdW1iZXJzKCk7Ci0gICAgICAgICAgICAgICAgb3B0aW9ucy5zZXRMb2FkTWVzc2FnZURpZ2VzdCgpOwotICAgICAgICAgICAgICAgIG9wdGlvbnMuc2V0RG9jdW1lbnRTb3VyY2VOYW1lKGFic29sdXRlVVJMKTsKLSAgICAgICAgICAgICAgICBVUkwgdXJsRG93bmxvYWQgPSBuZXcgVVJMKHVybFRvTG9hZCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRlci5wYXJzZSh1cmxEb3dubG9hZCwgbnVsbCwgb3B0aW9ucyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIG5vIHJlc29sdmVyIC0ganVzdCB1c2UgdGhlIFVSTCBkaXJlY3RseSwgbm8gc3Vic3RpdHV0aW9uCi0gICAgICAgICAgICBYbWxPcHRpb25zIG9wdGlvbnMgPSBuZXcgWG1sT3B0aW9ucygpOwotICAgICAgICAgICAgb3B0aW9ucy5zZXRMb2FkTGluZU51bWJlcnMoKTsKLSAgICAgICAgICAgIG9wdGlvbnMuc2V0TG9hZE1lc3NhZ2VEaWdlc3QoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIFVSTCB1cmxEb3dubG9hZCA9IG5ldyBVUkwoYWJzb2x1dGVVUkwpOwotICAgICAgICAgICAgcmV0dXJuIGxvYWRlci5wYXJzZSh1cmxEb3dubG9hZCwgbnVsbCwgb3B0aW9ucyk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgYWRkU3VjY2Vzc2Z1bERvd25sb2FkKE5zTG9jUGFpciBrZXksIFNjaGVtYSBzY2hlbWEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJ5dGVbXSBkaWdlc3QgPSBzY2hlbWEuZG9jdW1lbnRQcm9wZXJ0aWVzKCkuZ2V0TWVzc2FnZURpZ2VzdCgpOwotICAgICAgICAgICAgaWYgKGRpZ2VzdCA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0c2NTdGF0ZS5nZXQoKS5hZGRTY2hlbWFEaWdlc3QobnVsbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRGlnZXN0S2V5IGRrID0gbmV3IERpZ2VzdEtleShkaWdlc3QpOwotICAgICAgICAgICAgICAgIGlmICghc2NoZW1hQnlEaWdlc3RLZXkuY29udGFpbnNLZXkoZGspKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc2NoZW1hQnlEaWdlc3RLZXkucHV0KG5ldyBEaWdlc3RLZXkoZGlnZXN0KSwgc2NoZW1hKTsKLSAgICAgICAgICAgICAgICAgICAgU3RzY1N0YXRlLmdldCgpLmFkZFNjaGVtYURpZ2VzdChkaWdlc3QpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2NoZW1hQnlOc0xvY1BhaXIucHV0KGtleSwgc2NoZW1hKTsKLSAgICAgICAgICAgIE5zTG9jUGFpciBrZXkxID0gbmV3IE5zTG9jUGFpcihrZXkuZ2V0TmFtZXNwYWNlVVJJKCksIG51bGwpOwotICAgICAgICAgICAgaWYgKCFzY2hlbWFCeU5zTG9jUGFpci5jb250YWluc0tleShrZXkxKSkKLSAgICAgICAgICAgICAgICBzY2hlbWFCeU5zTG9jUGFpci5wdXQoa2V5MSwgc2NoZW1hKTsKLSAgICAgICAgICAgIE5zTG9jUGFpciBrZXkyID0gbmV3IE5zTG9jUGFpcihudWxsLCBrZXkuZ2V0TG9jYXRpb25VUkwoKSk7Ci0gICAgICAgICAgICBpZiAoIXNjaGVtYUJ5TnNMb2NQYWlyLmNvbnRhaW5zS2V5KGtleTIpKQotICAgICAgICAgICAgICAgIHNjaGVtYUJ5TnNMb2NQYWlyLnB1dChrZXkyLCBzY2hlbWEpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBTY2hlbWEgZmluZE1hdGNoQnlEaWdlc3QoWG1sT2JqZWN0IG9yaWdpbmFsKQotICAgICAgICB7Ci0gICAgICAgICAgICBieXRlW10gZGlnZXN0ID0gb3JpZ2luYWwuZG9jdW1lbnRQcm9wZXJ0aWVzKCkuZ2V0TWVzc2FnZURpZ2VzdCgpOwotICAgICAgICAgICAgaWYgKGRpZ2VzdCA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgcmV0dXJuIChTY2hlbWEpc2NoZW1hQnlEaWdlc3RLZXkuZ2V0KG5ldyBEaWdlc3RLZXkoZGlnZXN0KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgYWRkRmFpbGVkRG93bmxvYWQoU3RyaW5nIGxvY2F0aW9uVVJMKQotICAgICAgICB7Ci0gICAgICAgICAgICBmYWlsZWREb3dubG9hZHMuYWRkKGxvY2F0aW9uVVJMKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBwcmV2aW91c2x5RmFpbGVkVG9Eb3dubG9hZChTdHJpbmcgbG9jYXRpb25VUkwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWlsZWREb3dubG9hZHMuY29udGFpbnMobG9jYXRpb25VUkwpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBudWxsYWJsZVN0cmluZ3NNYXRjaChTdHJpbmcgczEsIFN0cmluZyBzMikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHMxID09IG51bGwgJiYgczIgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChzMSA9PSBudWxsIHx8IHMyID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIChzMS5lcXVhbHMoczIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBlbXB0eVN0cmluZ0lmTnVsbChTdHJpbmcgcykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHMgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gIiI7Ci0gICAgICAgICAgICByZXR1cm4gczsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBhZGRTY2FuTmVlZGVkKFNjaGVtYVRvUHJvY2VzcyBzdHApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghc2Nhbm5lZEFscmVhZHkuY29udGFpbnMoc3RwKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzY2FubmVkQWxyZWFkeS5hZGQoc3RwKTsKLSAgICAgICAgICAgICAgICBzY2FuTmVlZGVkLmFkZChzdHApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGFkZEVtcHR5TmFtZXNwYWNlU2NoZW1hKFNjaGVtYSBzKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbXB0eU5hbWVzcGFjZVNjaGVtYXMuYWRkKHMpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIHVzZWRFbXB0eU5hbWVzcGFjZVNjaGVtYShTY2hlbWEgcykKLSAgICAgICAgewotICAgICAgICAgICAgZW1wdHlOYW1lc3BhY2VTY2hlbWFzLnJlbW92ZShzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBmZXRjaFJlbWFpbmluZ0VtcHR5TmFtZXNwYWNlU2NoZW1hcygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlbXB0eU5hbWVzcGFjZVNjaGVtYXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpID0gZW1wdHlOYW1lc3BhY2VTY2hlbWFzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTY2hlbWEgc2NoZW1hID0gKFNjaGVtYSlpLm5leHQoKTsKLSAgICAgICAgICAgICAgICBhZGRTY2FuTmVlZGVkKG5ldyBTY2hlbWFUb1Byb2Nlc3Moc2NoZW1hLCBudWxsLCBudWxsKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVtcHR5TmFtZXNwYWNlU2NoZW1hcy5jbGVhcigpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGJvb2xlYW4gaGFzTmV4dFRvU2NhbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAhc2Nhbk5lZWRlZC5pc0VtcHR5KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIFNjaGVtYVRvUHJvY2VzcyBuZXh0VG9TY2FuKCkKLSAgICAgICAgewotICAgICAgICAgICAgU2NoZW1hVG9Qcm9jZXNzIG5leHQgPSAoU2NoZW1hVG9Qcm9jZXNzKXNjYW5OZWVkZWQucmVtb3ZlRmlyc3QoKTsKLSAgICAgICAgICAgIHJldHVybiBuZXh0OwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIERvd25sb2FkVGFibGUoU2NoZW1hW10gc3RhcnRXaXRoKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0YXJ0V2l0aC5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gc3RhcnRXaXRoW2ldLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgICAgICAgICAgIE5zTG9jUGFpciBrZXkgPSBuZXcgTnNMb2NQYWlyKHRhcmdldE5hbWVzcGFjZSwgYmFzZVVSTEZvckRvYyhzdGFydFdpdGhbaV0pKTsKLSAgICAgICAgICAgICAgICBhZGRTdWNjZXNzZnVsRG93bmxvYWQoa2V5LCBzdGFydFdpdGhbaV0pOwotICAgICAgICAgICAgICAgIGlmICh0YXJnZXROYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgYWRkU2Nhbk5lZWRlZChuZXcgU2NoZW1hVG9Qcm9jZXNzKHN0YXJ0V2l0aFtpXSwgbnVsbCwgbnVsbCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYWRkRW1wdHlOYW1lc3BhY2VTY2hlbWEoc3RhcnRXaXRoW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBTY2hlbWFUb1Byb2Nlc3NbXSByZXNvbHZlSW1wb3J0c0FuZEluY2x1ZGVzKCkKLSAgICAgICAgewotICAgICAgICAgICAgU3RzY1N0YXRlIHN0YXRlID0gU3RzY1N0YXRlLmdldCgpOwotICAgICAgICAgICAgTGlzdCByZXN1bHQgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICAgICAgICAgIC8vIGFsZ29yaXRobSBpcyB0byBzY2FuIHRocm91Z2ggZWFjaCBzY2hlbWEgZG9jdW1lbnQgYW5kCi0gICAgICAgICAgICAvLyAxLiBkb3dubG9hZCBlYWNoIGltcG9ydCBhbmQgaW5jbHVkZSAoaWYgbm90IGFscmVhZHkgZG93bmxvYWRlZCkKLSAgICAgICAgICAgIC8vIDIuIHF1ZXVlIGVhY2ggaW1wb3J0ZWQgb3IgaW5jbHVkZWQgc2NoZW1hIHRvIGJlIHByb2Nlc3MgKGlmIG5vdCBhbHJlYWR5IHF1ZXVlZCkKLQotICAgICAgICAgICAgLy8gVGhlIGFsZ29yaXRobSBpcyBydW4gdHdpY2UgdHdpY2U6IGZpcnN0IHdlIGJlZ2luIHdpdGggbm9uLWVtcHR5Ci0gICAgICAgICAgICAvLyBuYW1lc3BhY2Ugc2NoZW1hcyBvbmx5LiAgVGhlbiB3ZSByZXBlYXQgc3RhcnRpbmcgd2l0aCBhbnkKLSAgICAgICAgICAgIC8vIGVtcHR5IGVtcHR5LW5hbWVzcGFjZSBzY2hlbWFzIHRoYXQgaGF2ZSBOT1QgYmVlbiBjaGFtZWxlb24tCi0gICAgICAgICAgICAvLyBpbmNsdWRlZCBieSBvdGhlciBzY2hlbWFzIGFuZCBwcm9jZXNzIHRoZW0uCi0KLSAgICAgICAgICAgIGZvciAoOzspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGhhc05leHRUb1NjYW4oKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFNjaGVtYVRvUHJvY2VzcyBzdHAgPSBuZXh0VG9TY2FuKCk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFkZFNvdXJjZVVyaShzdHAuZ2V0U291cmNlTmFtZSgpLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChzdHApOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIGltcG9ydHMKLSAgICAgICAgICAgICAgICAgICAgICAgIEltcG9ydFtdIGltcG9ydHMgPSBzdHAuZ2V0U2NoZW1hKCkuZ2V0SW1wb3J0QXJyYXkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW1wb3J0cy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY2hlbWEgaW1wb3J0ZWQgPSBkb3dubG9hZFNjaGVtYShpbXBvcnRzW2ldLCBlbXB0eVN0cmluZ0lmTnVsbChpbXBvcnRzW2ldLmdldE5hbWVzcGFjZSgpKSwgaW1wb3J0c1tpXS5nZXRTY2hlbWFMb2NhdGlvbigpKTsKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBkb3dubG9hZCBmYWlscywgYW4gZXJyb3IgaGFzIGFscmVhZHkgYmVlbiByZXBvcnRlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1wb3J0ZWQgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFudWxsYWJsZVN0cmluZ3NNYXRjaChpbXBvcnRlZC5nZXRUYXJnZXROYW1lc3BhY2UoKSwgaW1wb3J0c1tpXS5nZXROYW1lc3BhY2UoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHNjU3RhdGUuZ2V0KCkuZXJyb3IoIkltcG9ydGVkIHNjaGVtYSBoYXMgYSB0YXJnZXQgbmFtZXNwYWNlIFwiIiArIGltcG9ydGVkLmdldFRhcmdldE5hbWVzcGFjZSgpICsgIlwiIHRoYXQgZG9lcyBub3QgbWF0Y2ggdGhlIHNwZWNpZmllZCBcIiIgKyBpbXBvcnRzW2ldLmdldE5hbWVzcGFjZSgpICsgIlwiIiwgWG1sRXJyb3JDb250ZXh0Lk1JU01BVENIRURfVEFSR0VUX05BTUVTUEFDRSwgaW1wb3J0c1tpXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFNjYW5OZWVkZWQobmV3IFNjaGVtYVRvUHJvY2VzcyhpbXBvcnRlZCwgbnVsbCwgbnVsbCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIGluY2x1ZGVzCi0gICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlW10gaW5jbHVkZXMgPSBzdHAuZ2V0U2NoZW1hKCkuZ2V0SW5jbHVkZUFycmF5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc291cmNlTmFtZXNwYWNlID0gc3RwLmdldENoYW1lbGVvbk5hbWVzcGFjZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZU5hbWVzcGFjZSA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5hbWVzcGFjZSA9IGVtcHR5U3RyaW5nSWZOdWxsKHN0cC5nZXRTY2hlbWEoKS5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0gICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGluY2x1ZGVzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjaGVtYSBpbmNsdWRlZCA9IGRvd25sb2FkU2NoZW1hKGluY2x1ZGVzW2ldLCBudWxsLCBpbmNsdWRlc1tpXS5nZXRTY2hlbWFMb2NhdGlvbigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBkb3dubG9hZCBmYWlscywgYW4gZXJyb3IgaGFzIGFscmVhZHkgYmVlbiByZXBvcnRlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5jbHVkZWQgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcHR5U3RyaW5nSWZOdWxsKGluY2x1ZGVkLmdldFRhcmdldE5hbWVzcGFjZSgpKS5lcXVhbHMoc291cmNlTmFtZXNwYWNlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vbi1jaGFtZWxlb24gY2FzZSAtIGp1c3QgbGlrZSBhbiBpbXBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkU2Nhbk5lZWRlZChuZXcgU2NoZW1hVG9Qcm9jZXNzKGluY2x1ZGVkLCBudWxsLCBudWxsKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGluY2x1ZGVkLmdldFRhcmdldE5hbWVzcGFjZSgpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbGxlZ2FsIGluY2x1ZGU6IGluY2x1ZGVkIHNjaGVtYSBpbiB3cm9uZyBuYW1lc3BhY2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0c2NTdGF0ZS5nZXQoKS5lcnJvcigiSW5jbHVkZWQgc2NoZW1hIGhhcyBhIHRhcmdldCBuYW1lc3BhY2UgXCIiICsgaW5jbHVkZWQuZ2V0VGFyZ2V0TmFtZXNwYWNlKCkgKyAiXCIgdGhhdCBkb2VzIG5vdCBtYXRjaCB0aGUgc291cmNlIG5hbWVzcGFjZSBcIiIgKyBzb3VyY2VOYW1lc3BhY2UgKyAiXCIiLCBYbWxFcnJvckNvbnRleHQuTUlTTUFUQ0hFRF9UQVJHRVRfTkFNRVNQQUNFLCBpbmNsdWRlc1tpXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW1lbGVvbiBpbmNsdWRlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFNjYW5OZWVkZWQobmV3IFNjaGVtYVRvUHJvY2VzcyhpbmNsdWRlZCwgc291cmNlTmFtZXNwYWNlLCBudWxsKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRFbXB0eU5hbWVzcGFjZVNjaGVtYShpbmNsdWRlZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgcmVkZWZpbmVzCi0gICAgICAgICAgICAgICAgICAgICAgICBSZWRlZmluZVtdIHJlZGVmaW5lcyA9IHN0cC5nZXRTY2hlbWEoKS5nZXRSZWRlZmluZUFycmF5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc291cmNlTmFtZXNwYWNlID0gc3RwLmdldENoYW1lbGVvbk5hbWVzcGFjZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZU5hbWVzcGFjZSA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5hbWVzcGFjZSA9IGVtcHR5U3RyaW5nSWZOdWxsKHN0cC5nZXRTY2hlbWEoKS5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlZGVmaW5lcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY2hlbWEgcmVkZWZpbmVkID0gZG93bmxvYWRTY2hlbWEocmVkZWZpbmVzW2ldLCBudWxsLCByZWRlZmluZXNbaV0uZ2V0U2NoZW1hTG9jYXRpb24oKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgZG93bmxvYWQgZmFpbHMsIGFuIGVycm9yIGhhcyBhbHJlYWR5IGJlZW4gcmVwb3J0ZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZGVmaW5lZCA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW1wdHlTdHJpbmdJZk51bGwocmVkZWZpbmVkLmdldFRhcmdldE5hbWVzcGFjZSgpKS5lcXVhbHMoc291cmNlTmFtZXNwYWNlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vbi1jaGFtZWxlb24gY2FzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRTY2FuTmVlZGVkKG5ldyBTY2hlbWFUb1Byb2Nlc3MocmVkZWZpbmVkLCBudWxsLCByZWRlZmluZXNbaV0pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVkZWZpbmVkLmdldFRhcmdldE5hbWVzcGFjZSgpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbGxlZ2FsIGluY2x1ZGU6IGluY2x1ZGVkIHNjaGVtYSBpbiB3cm9uZyBuYW1lc3BhY2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0c2NTdGF0ZS5nZXQoKS5lcnJvcigiUmVkZWZpbmVkIHNjaGVtYSBoYXMgYSB0YXJnZXQgbmFtZXNwYWNlIFwiIiArIHJlZGVmaW5lZC5nZXRUYXJnZXROYW1lc3BhY2UoKSArICJcIiB0aGF0IGRvZXMgbm90IG1hdGNoIHRoZSBzb3VyY2UgbmFtZXNwYWNlIFwiIiArIHNvdXJjZU5hbWVzcGFjZSArICJcIiIsIFhtbEVycm9yQ29udGV4dC5NSVNNQVRDSEVEX1RBUkdFVF9OQU1FU1BBQ0UsIHJlZGVmaW5lc1tpXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW1lbGVvbiByZWRlZmluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRTY2FuTmVlZGVkKG5ldyBTY2hlbWFUb1Byb2Nlc3MocmVkZWZpbmVkLCBzb3VyY2VOYW1lc3BhY2UsIHJlZGVmaW5lc1tpXSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkRW1wdHlOYW1lc3BhY2VTY2hlbWEocmVkZWZpbmVkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWZldGNoUmVtYWluaW5nRW1wdHlOYW1lc3BhY2VTY2hlbWFzKCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gKFNjaGVtYVRvUHJvY2Vzc1tdKXJlc3VsdC50b0FycmF5KG5ldyBTY2hlbWFUb1Byb2Nlc3NbcmVzdWx0LnNpemUoKV0pOwotICAgICAgICB9Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TdHNjSmF2YWl6ZXIuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1N0c2NKYXZhaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjEzN2UzLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1N0c2NKYXZhaXplci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTEyICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnNjaGVtYTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uTmFtZVV0aWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldEJ1aWxkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFGaWVsZDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQYXJ0aWNsZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVByb3BlcnR5OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hU3RyaW5nRW51bUVudHJ5OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQnl0ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFNob3J0OwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1wdWJsaWMgY2xhc3MgU3RzY0phdmFpemVyCi17Ci0gICAgLyoqCi0gICAgICogRG9lcyBhIHRvcG8gd2FsayBvZiBhbGwgdGhlIHR5cGVzIHRvIHJlc29sdmUgdGhlbS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgamF2YWl6ZUFsbFR5cGVzKGJvb2xlYW4gamF2YWl6ZSkKLSAgICB7Ci0gICAgICAgIFN0c2NTdGF0ZSBzdGF0ZSA9IFN0c2NTdGF0ZS5nZXQoKTsKLQotICAgICAgICBMaXN0IGFsbFNlZW5UeXBlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgYWxsU2VlblR5cGVzLmFkZEFsbChBcnJheXMuYXNMaXN0KHN0YXRlLmRvY3VtZW50VHlwZXMoKSkpOwotICAgICAgICBhbGxTZWVuVHlwZXMuYWRkQWxsKEFycmF5cy5hc0xpc3Qoc3RhdGUuYXR0cmlidXRlVHlwZXMoKSkpOwotICAgICAgICBhbGxTZWVuVHlwZXMuYWRkQWxsKEFycmF5cy5hc0xpc3Qoc3RhdGUuZ2xvYmFsVHlwZXMoKSkpOwotCi0gICAgICAgIC8vIEZpcnN0IGRpc3RyaWJ1dGUgdGhlIGdsb2JhbCBuYW1lcyBhbW9uZyB0aGUgdG9wIGVudGl0aWVzLgotICAgICAgICBpZiAoamF2YWl6ZSkKLSAgICAgICAgICAgIGFzc2lnbkdsb2JhbEphdmFOYW1lcyhhbGxTZWVuVHlwZXMpOwotCi0gICAgICAgIC8vIG5vdyBmdWxseSBqYXZhaXplIGV2ZXJ5dGhpbmcgZGVlcGx5LgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFsbFNlZW5UeXBlcy5zaXplKCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgU2NoZW1hVHlwZSBnVHlwZSA9IChTY2hlbWFUeXBlKWFsbFNlZW5UeXBlcy5nZXQoaSk7Ci0gICAgICAgICAgICBpZiAoamF2YWl6ZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBqYXZhaXplVHlwZSgoU2NoZW1hVHlwZUltcGwpZ1R5cGUpOwotICAgICAgICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBnVHlwZS5nZXRGdWxsSmF2YU5hbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoY2xhc3NOYW1lICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFkZENsYXNzbmFtZShjbGFzc05hbWUucmVwbGFjZSgnJCcsICcuJyksIGdUeXBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBza2lwSmF2YWl6aW5nVHlwZSgoU2NoZW1hVHlwZUltcGwpZ1R5cGUpOwotICAgICAgICAgICAgYWxsU2VlblR5cGVzLmFkZEFsbChBcnJheXMuYXNMaXN0KGdUeXBlLmdldEFub255bW91c1R5cGVzKCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFzc2lnbkdsb2JhbEphdmFOYW1lcyhDb2xsZWN0aW9uIHNjaGVtYVR5cGVzKQotICAgIHsKLSAgICAgICAgSGFzaFNldCB1c2VkTmFtZXMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICBTdHNjU3RhdGUgc3RhdGUgPSBTdHNjU3RhdGUuZ2V0KCk7Ci0KLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gc2NoZW1hVHlwZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgU2NoZW1hVHlwZUltcGwgc0ltcGwgPSAoU2NoZW1hVHlwZUltcGwpaS5uZXh0KCk7Ci0gICAgICAgICAgICBRTmFtZSB0b3BOYW1lID0gZmluZFRvcE5hbWUoc0ltcGwpOwotICAgICAgICAgICAgU3RyaW5nIHBpY2tlZE5hbWUgPSBzdGF0ZS5nZXRKYXZhbmFtZSh0b3BOYW1lKTsKLSAgICAgICAgICAgIGlmIChzSW1wbC5pc1VuamF2YWl6ZWQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzSW1wbC5zZXRGdWxsSmF2YU5hbWUocGlja0Z1bGxKYXZhQ2xhc3NOYW1lKHVzZWROYW1lcywgZmluZFRvcE5hbWUoc0ltcGwpLCBwaWNrZWROYW1lLCBzSW1wbC5pc0RvY3VtZW50VHlwZSgpLCBzSW1wbC5pc0F0dHJpYnV0ZVR5cGUoKSkpOwotICAgICAgICAgICAgICAgIHNJbXBsLnNldEZ1bGxKYXZhSW1wbE5hbWUocGlja0Z1bGxKYXZhSW1wbE5hbWUodXNlZE5hbWVzLCBzSW1wbC5nZXRGdWxsSmF2YU5hbWUoKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1N0cmluZ1R5cGUoU2NoZW1hVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgaWYgKHR5cGUgPT0gbnVsbCB8fCB0eXBlLmdldFNpbXBsZVZhcmlldHkoKSAhPSBTY2hlbWFUeXBlLkFUT01JQykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuICh0eXBlLmdldFByaW1pdGl2ZVR5cGUoKS5nZXRCdWlsdGluVHlwZUNvZGUoKSA9PSBTY2hlbWFUeXBlLkJUQ19TVFJJTkcpOwotICAgIH0KLQotICAgIHN0YXRpYyBTdHJpbmcgcGlja0NvbnN0YW50TmFtZShTZXQgdXNlZE5hbWVzLCBTdHJpbmcgd29yZHMpCi0gICAgewotICAgICAgICBTdHJpbmcgYmFzZSA9IE5hbWVVdGlsLnVwcGVyQ2FzZVVuZGVyYmFyKHdvcmRzKTsKLQotICAgICAgICBpZiAoYmFzZS5sZW5ndGgoKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBiYXNlID0gIlgiOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJhc2Uuc3RhcnRzV2l0aCgiSU5UXyIpKSAvLyByZXNlcnZlZCBmb3IgaW50IGNvZGVzCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJhc2UgPSAiWF8iICsgYmFzZTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyB1bmlxTmFtZTsKLSAgICAgICAgaW50IGluZGV4ID0gMTsKLSAgICAgICAgZm9yICh1bmlxTmFtZSA9IGJhc2U7IHVzZWROYW1lcy5jb250YWlucyh1bmlxTmFtZSk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgICAgIHVuaXFOYW1lID0gYmFzZSArICJfIiArIGluZGV4OwotICAgICAgICB9Ci0KLSAgICAgICAgdXNlZE5hbWVzLmFkZCh1bmlxTmFtZSk7Ci0KLSAgICAgICAgcmV0dXJuIHVuaXFOYW1lOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHNraXBKYXZhaXppbmdUeXBlKFNjaGVtYVR5cGVJbXBsIHNJbXBsKQotICAgIHsKLSAgICAgICAgaWYgKHNJbXBsLmlzSmF2YWl6ZWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc0ltcGwuc3RhcnRKYXZhaXppbmcoKTsKLSAgICAgICAgc2Vjb25kUGFzc1Byb2Nlc3NUeXBlKHNJbXBsKTsKLSAgICAgICAgc0ltcGwuZmluaXNoSmF2YWl6aW5nKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgc2Vjb25kUGFzc1Byb2Nlc3NUeXBlKFNjaGVtYVR5cGVJbXBsIHNJbXBsKQotICAgIHsKLSAgICAgICAgaWYgKGlzU3RyaW5nVHlwZShzSW1wbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFhtbEFueVNpbXBsZVR5cGVbXSBlbnVtVmFscyA9IHNJbXBsLmdldEVudW1lcmF0aW9uVmFsdWVzKCk7Ci0KLSAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYW4gZW51bWVyYXRlZCBzdHJpbmcgdHlwZSwgdmFsdWVzIGFyZSB0byBiZQotICAgICAgICAgICAgLy8gamF2YWl6ZWQgYXMgY29uc3RhbnRzLgotICAgICAgICAgICAgaWYgKGVudW1WYWxzICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2NoZW1hU3RyaW5nRW51bUVudHJ5W10gZW50cnlBcnJheSA9IG5ldyBTY2hlbWFTdHJpbmdFbnVtRW50cnlbZW51bVZhbHMubGVuZ3RoXTsKLSAgICAgICAgICAgICAgICBTY2hlbWFUeXBlIGJhc2VkT24gPSBzSW1wbC5nZXRCYXNlRW51bVR5cGUoKTsKLSAgICAgICAgICAgICAgICBpZiAoYmFzZWRPbiA9PSBzSW1wbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFNldCB1c2VkTmFtZXMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVudW1WYWxzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdmFsID0gZW51bVZhbHNbaV0uZ2V0U3RyaW5nVmFsdWUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlBcnJheVtpXSA9IG5ldyBTY2hlbWFTdHJpbmdFbnVtRW50cnlJbXBsKHZhbCwgaSArIDEsIHBpY2tDb25zdGFudE5hbWUodXNlZE5hbWVzLCB2YWwpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVudW1WYWxzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdmFsID0gZW51bVZhbHNbaV0uZ2V0U3RyaW5nVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5QXJyYXlbaV0gPSBiYXNlZE9uLmVudW1FbnRyeUZvclN0cmluZyh2YWwpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNJbXBsLnNldFN0cmluZ0VudW1FbnRyaWVzKGVudHJ5QXJyYXkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgamF2YWl6ZVR5cGUoU2NoZW1hVHlwZUltcGwgc0ltcGwpCi0gICAgewotICAgICAgICBpZiAoc0ltcGwuaXNKYXZhaXplZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFNjaGVtYVR5cGVJbXBsIGJhc2VUeXBlID0gKFNjaGVtYVR5cGVJbXBsKXNJbXBsLmdldEJhc2VUeXBlKCk7Ci0gICAgICAgIGlmIChiYXNlVHlwZSAhPSBudWxsKQotICAgICAgICAgICAgamF2YWl6ZVR5cGUoYmFzZVR5cGUpOwotCi0gICAgICAgIHNJbXBsLnN0YXJ0SmF2YWl6aW5nKCk7Ci0KLSAgICAgICAgc0ltcGwuc2V0Q29tcGlsZWQodHJ1ZSk7Ci0KLSAgICAgICAgc2Vjb25kUGFzc1Byb2Nlc3NUeXBlKHNJbXBsKTsKLQotICAgICAgICBpZiAoIXNJbXBsLmlzU2ltcGxlVHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBTY2hlbWFQcm9wZXJ0eVtdIGVsdFByb3BzID0gc0ltcGwuZ2V0RWxlbWVudFByb3BlcnRpZXMoKTsKLSAgICAgICAgICAgIFNjaGVtYVByb3BlcnR5W10gYXR0clByb3BzID0gc0ltcGwuZ2V0QXR0cmlidXRlUHJvcGVydGllcygpOwotCi0gICAgICAgICAgICAvLyBlbGVtZW50IHNldHRlcnMgcmVzdWx0IGZyb20gYSBjb21wdXRhdGlvbgotICAgICAgICAgICAgaWYgKGVsdFByb3BzLmxlbmd0aCA+IDApCi0gICAgICAgICAgICAgICAgYXNzaWduSmF2YUVsZW1lbnRTZXR0ZXJNb2RlbChlbHRQcm9wcywgc0ltcGwuZ2V0Q29udGVudE1vZGVsKCkpOwotCi0gICAgICAgICAgICAvLyBIYW5kaW5nIG91dCBqYXZhIG5hbWVzIC0gdGhpcyBwZXJtaXRzIHVzIHRvIGF2b2lkIGNvbGxpc2lvbnMuCi0gICAgICAgICAgICBTZXQgdXNlZFByb3BOYW1lcyA9IG5ldyBIYXNoU2V0KCk7Ci0KLSAgICAgICAgICAgIC8vIEFzc2lnbiBuYW1lcyBpbiB0d28gcGFzc2VzOiBmaXJzdCBpbmhlcml0ZWQgbmFtZXMsIHRoZW4gb3RoZXJzLgotICAgICAgICAgICAgZm9yIChib29sZWFuIGRvSW5oZXJpdGVkID0gdHJ1ZTsgOyBkb0luaGVyaXRlZCA9IGZhbHNlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChlbHRQcm9wcy5sZW5ndGggPiAwKQotICAgICAgICAgICAgICAgICAgICBhc3NpZ25KYXZhUHJvcGVydHlOYW1lcyh1c2VkUHJvcE5hbWVzLCBlbHRQcm9wcywgYmFzZVR5cGUsIGRvSW5oZXJpdGVkKTsKLQotICAgICAgICAgICAgICAgIGFzc2lnbkphdmFQcm9wZXJ0eU5hbWVzKHVzZWRQcm9wTmFtZXMsIGF0dHJQcm9wcywgYmFzZVR5cGUsIGRvSW5oZXJpdGVkKTsKLQotICAgICAgICAgICAgICAgIGlmIChkb0luaGVyaXRlZCA9PSBmYWxzZSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNjaGVtYVByb3BlcnR5W10gYWxscHJvcHMgPSBzSW1wbC5nZXRQcm9wZXJ0aWVzKCk7Ci0KLSAgICAgICAgICAgIC8vIGRldGVybWluZSB3aGV0aGVyIG9yZGVyIGluc2Vuc2l0aXZlCi0gICAgICAgICAgICBib29sZWFuIGluc2Vuc2l0aXZlID0gaXNQcm9wZXJ0eU1vZGVsT3JkZXJJbnNlbnNpdGl2ZShhbGxwcm9wcyk7Ci0KLSAgICAgICAgICAgIC8vIEZpbGwgaW4gdGhlIGphdmEgdHlwZSBjb2RlcyBub3cuCi0gICAgICAgICAgICAvLyBUaGlzIGRlcGVuZHMgb24gcmVjdXJzaXZlIHR5cGUgaW5mb3JtYXRpb24sIHNvIGl0J3MgZG9uZSBpbiB0eXBlY2hlY2tpbmcKLSAgICAgICAgICAgIGFzc2lnbkphdmFUeXBlQ29kZXMoYWxscHJvcHMpOwotCi0gICAgICAgICAgICBzSW1wbC5zZXRPcmRlclNlbnNpdGl2ZSghaW5zZW5zaXRpdmUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gYXNzaWduIGphdmEgdHlwZSBuYW1lcyB0byBhbm9ueW1vdXMgdHlwZXMKLSAgICAgICAgYXNzaWduSmF2YUFub255bW91c1R5cGVOYW1lcyhzSW1wbCk7Ci0KLSAgICAgICAgc0ltcGwuZmluaXNoSmF2YWl6aW5nKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgYXNzaWduSmF2YUFub255bW91c1R5cGVOYW1lcyhTY2hlbWFUeXBlSW1wbCBvdXRlclR5cGUpCi0gICAgewotICAgICAgICBTZXQgdXNlZFR5cGVOYW1lcyA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICAgIFNjaGVtYVR5cGVbXSBhbm9ueW1vdXNUeXBlcyA9IG91dGVyVHlwZS5nZXRBbm9ueW1vdXNUeXBlcygpOwotICAgICAgICBTdHNjU3RhdGUgc3RhdGUgPSBTdHNjU3RhdGUuZ2V0KCk7Ci0KLSAgICAgICAgLy8gQmVjYXVzZSB3ZSBnZW5lcmF0ZSBuZXN0ZWQgamF2YSBpbnRlcmZhY2VzLCBhbmQgbmVzdGVkCi0gICAgICAgIC8vIGludGVyZmFjZSBuYW1lcyBtdXN0IG5vdCBiZSB0aGUgc2FtZSBhcyBhbiBhbmNlc3RvciwgdXNlIHVwCi0gICAgICAgIC8vIHRoZSBhbmNlc3RvcnMKLQotICAgICAgICBmb3IgKCBTY2hlbWFUeXBlIHNjYW5PdXRlclR5cGUgPSBvdXRlclR5cGUgOwotICAgICAgICAgICAgICBzY2FuT3V0ZXJUeXBlICE9IG51bGwgOwotICAgICAgICAgICAgICBzY2FuT3V0ZXJUeXBlID0gc2Nhbk91dGVyVHlwZS5nZXRPdXRlclR5cGUoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVzZWRUeXBlTmFtZXMuYWRkKCBzY2FuT3V0ZXJUeXBlLmdldFNob3J0SmF2YU5hbWUoKSApOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICggU2NoZW1hVHlwZSBzY2FuT3V0ZXJUeXBlID0gb3V0ZXJUeXBlIDsKLSAgICAgICAgICAgICAgc2Nhbk91dGVyVHlwZSAhPSBudWxsIDsKLSAgICAgICAgICAgICAgc2Nhbk91dGVyVHlwZSA9IHNjYW5PdXRlclR5cGUuZ2V0T3V0ZXJUeXBlKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICB1c2VkVHlwZU5hbWVzLmFkZCggc2Nhbk91dGVyVHlwZS5nZXRTaG9ydEphdmFJbXBsTmFtZSgpICk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBhbmQgYmVjYXVzZSB0aGluZ3MgYXJlIHByb2JsZW1hdGljIGlmIGFuIGlubmVyIHR5cGUgbmFtZQotICAgICAgICAvLyBpcyB0aGUgc2FtZSBhcyBhIHRvcC1sZXZlbCBwYWNrYWdlIG5hbWUsIGFsc28gZ2V0IHJpZCBvZiB0aGF0Ci0gICAgICAgIC8vIGNvbGxpc2lvbgotICAgICAgICB1c2VkVHlwZU5hbWVzLmFkZChnZXRPdXRlcm1vc3RQYWNrYWdlKG91dGVyVHlwZS5nZXRGdWxsSmF2YU5hbWUoKSkpOwotCi0gICAgICAgIC8vIGFzc2lnbiBuYW1lcwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFub255bW91c1R5cGVzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBTY2hlbWFUeXBlSW1wbCBzSW1wbCA9IChTY2hlbWFUeXBlSW1wbClhbm9ueW1vdXNUeXBlc1tpXTsKLSAgICAgICAgICAgIGlmIChzSW1wbCA9PSBudWxsKSAvLyBhbHJlYWR5IGhhbmRsZWQgaW4gZmlyc3QgcGFzcwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKHNJbXBsLmlzU2tpcHBlZEFub255bW91c1R5cGUoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIFN0cmluZyBsb2NhbG5hbWUgPSBudWxsOwotICAgICAgICAgICAgU3RyaW5nIGphdmFuYW1lID0gbnVsbDsKLQotICAgICAgICAgICAgU2NoZW1hRmllbGQgY29udGFpbmVyRmllbGQgPSBzSW1wbC5nZXRDb250YWluZXJGaWVsZCgpOwotICAgICAgICAgICAgaWYgKGNvbnRhaW5lckZpZWxkICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUU5hbWUgcW5hbWUgPSBzSW1wbC5nZXRDb250YWluZXJGaWVsZCgpLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICBsb2NhbG5hbWUgPSBxbmFtZS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICAgICAgICBqYXZhbmFtZSA9IHN0YXRlLmdldEphdmFuYW1lKHNJbXBsLmdldENvbnRhaW5lckZpZWxkKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBub3QgZGVmaW5lZCBpbnNpZGUgYW4gRWx0IG9yIEF0dHI6IG11c3QgYmUgYSBuZXN0ZWQgc2ltcGxlIHR5cGUKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHNJbXBsLmdldE91dGVyVHlwZSgpLmdldFNpbXBsZVZhcmlldHkoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5VTklPTjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGphdmFuYW1lID0gIk1lbWJlciI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuTElTVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGphdmFuYW1lID0gIkl0ZW0iOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkFUT01JQzoKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSkgOiAiV2VpcmQgdHlwZSAiICsgc0ltcGwudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGphdmFuYW1lID0gIkJhc2UiOyBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzSW1wbC5zZXRTaG9ydEphdmFOYW1lKAotICAgICAgICAgICAgICAgICAgICBwaWNrSW5uZXJKYXZhQ2xhc3NOYW1lKHVzZWRUeXBlTmFtZXMsIGxvY2FsbmFtZSwgamF2YW5hbWUpKTsKLSAgICAgICAgICAgIHNJbXBsLnNldFNob3J0SmF2YUltcGxOYW1lKAotICAgICAgICAgICAgICAgICAgICBwaWNrSW5uZXJKYXZhSW1wbE5hbWUodXNlZFR5cGVOYW1lcywgbG9jYWxuYW1lLCBqYXZhbmFtZSA9PSBudWxsID8gbnVsbCA6IGphdmFuYW1lICsgIkltcGwiKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIHRvIGNvbXB1dGUgdGhlIHNldHRlciBtb2RlbC4KLSAgICAgKgotICAgICAqIFJldHVybnMgdGhlIHNldCBvZiBhbGwgUU5hbWVzIG9mIGVsZW1lbnRzIHRoYXQgY291bGQgcG9zc2libHkgYmUKLSAgICAgKiBjb250YWluZWQgaW4gdGhlIGdpdmVuIGNvbnRlbnRNb2RlbC4gVGhlIHN0YXRlIHZhcmlhYmxlIGlzIHVzZWQKLSAgICAgKiB0byByZWNvcmQgdGhlIHJlc3VsdHMsIHNvIHRoYXQgaWYgdGhleSBhcmUgbmVlZGVkIGFnYWluIGxhdGVyLAotICAgICAqIHRoZXkgZG8gbm90IG5lZWQgdG8gYmUgcmVjb21wdXRlZC4KLSAgICAgKi8KLSAgICBzdGF0aWMgUU5hbWVTZXQgY29tcHV0ZUFsbENvbnRhaW5lZEVsZW1lbnRzKFNjaGVtYVBhcnRpY2xlIGNvbnRlbnRNb2RlbCwgTWFwIHN0YXRlKQotICAgIHsKLSAgICAgICAgLy8gUmVtZW1iZXIgcHJldmlvdXNseSBjb21wdXRlZCByZXN1bHRzIHRvIGF2b2lkIGNvbXBsZXhpdHkgZXhwbG9zaW9uCi0gICAgICAgIFFOYW1lU2V0IHJlc3VsdCA9IChRTmFtZVNldClzdGF0ZS5nZXQoY29udGVudE1vZGVsKTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICBRTmFtZVNldEJ1aWxkZXIgYnVpbGRlcjsKLQotICAgICAgICBzd2l0Y2ggKGNvbnRlbnRNb2RlbC5nZXRQYXJ0aWNsZVR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5BTEw6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLkNIT0lDRToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuU0VRVUVOQ0U6Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJ1aWxkZXIgPSBuZXcgUU5hbWVTZXRCdWlsZGVyKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50TW9kZWwuY291bnRPZlBhcnRpY2xlQ2hpbGQoKTsgaSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hZGRBbGwoY29tcHV0ZUFsbENvbnRhaW5lZEVsZW1lbnRzKGNvbnRlbnRNb2RlbC5nZXRQYXJ0aWNsZUNoaWxkKGkpLCBzdGF0ZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXN1bHQgPSBidWlsZGVyLnRvUU5hbWVTZXQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5XSUxEQ0FSRDoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBjb250ZW50TW9kZWwuZ2V0V2lsZGNhcmRTZXQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5FTEVNRU5UOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IFFOYW1lU2V0LnNpbmdsZXRvbihjb250ZW50TW9kZWwuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBzdGF0ZS5wdXQoY29udGVudE1vZGVsLCByZXN1bHQpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gY29tcHV0ZSBzZXR0ZXIgbW9kZWwuCi0gICAgICoKLSAgICAgKiBSZXR1cm5zIHRoZSBRTmFtZVNldCBvZiBhbGwgZWxlbWVudHMgdGhhdCBjYW4gcG9zc2libHkgY29tZSBiZWZvcmUgYW4KLSAgICAgKiBlbGVtZW50IHdob3NlIG5hbWUgaXMgZ2l2ZW4gYnkgdGhlIHRhcmdldCBpbiBhIHZhbGlkIGluc3RhbmNlIG9mIHRoZQotICAgICAqIGNvbnRlbnRNb2RlbC4gIFdoZW4gYXBwZW5kaW5nIGFuIGVsZW1lbnQsIGl0IGNvbWVzIGJlZm9yZSB0aGUgZmlyc3QKLSAgICAgKiBvbmUgdGhhdCBpcyBub3QgaW4gdGhpcyBzZXQuCi0gICAgICovCi0gICAgc3RhdGljIFFOYW1lU2V0IGNvbXB1dGVOb25kZWxpbWl0aW5nRWxlbWVudHMoUU5hbWUgdGFyZ2V0LCBTY2hlbWFQYXJ0aWNsZSBjb250ZW50TW9kZWwsIE1hcCBzdGF0ZSkKLSAgICB7Ci0gICAgICAgIFFOYW1lU2V0IGFsbENvbnRlbnRzID0gY29tcHV0ZUFsbENvbnRhaW5lZEVsZW1lbnRzKGNvbnRlbnRNb2RlbCwgc3RhdGUpOwotICAgICAgICBpZiAoIWFsbENvbnRlbnRzLmNvbnRhaW5zKHRhcmdldCkpCi0gICAgICAgICAgICByZXR1cm4gUU5hbWVTZXQuRU1QVFk7Ci0KLSAgICAgICAgLy8gSWYgaXRlcmF0ZWQsIHRoZW4gYWxsIGNvbnRlbnRzIGFyZSBkZWxpbWl0aW5nLgotICAgICAgICBpZiAoY29udGVudE1vZGVsLmdldE1heE9jY3VycygpID09IG51bGwgfHwKLSAgICAgICAgICAgIGNvbnRlbnRNb2RlbC5nZXRNYXhPY2N1cnMoKS5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpID4gMCkKLSAgICAgICAgICAgIHJldHVybiBhbGxDb250ZW50czsKLQotICAgICAgICBRTmFtZVNldEJ1aWxkZXIgYnVpbGRlcjsKLQotICAgICAgICBzd2l0Y2ggKGNvbnRlbnRNb2RlbC5nZXRQYXJ0aWNsZVR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5BTEw6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLkVMRU1FTlQ6Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBhbGxDb250ZW50czsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5XSUxEQ0FSRDoKLSAgICAgICAgICAgICAgICByZXR1cm4gUU5hbWVTZXQuc2luZ2xldG9uKHRhcmdldCk7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQ0hPSUNFOgotICAgICAgICAgICAgICAgIGJ1aWxkZXIgPSBuZXcgUU5hbWVTZXRCdWlsZGVyKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50TW9kZWwuY291bnRPZlBhcnRpY2xlQ2hpbGQoKTsgaSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgUU5hbWVTZXQgY2hpbGRDb250ZW50cyA9IGNvbXB1dGVBbGxDb250YWluZWRFbGVtZW50cyhjb250ZW50TW9kZWwuZ2V0UGFydGljbGVDaGlsZChpKSwgc3RhdGUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRDb250ZW50cy5jb250YWlucyh0YXJnZXQpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hZGRBbGwoY29tcHV0ZU5vbmRlbGltaXRpbmdFbGVtZW50cyh0YXJnZXQsIGNvbnRlbnRNb2RlbC5nZXRQYXJ0aWNsZUNoaWxkKGkpLCBzdGF0ZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gYnVpbGRlci50b1FOYW1lU2V0KCk7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuU0VRVUVOQ0U6Ci0gICAgICAgICAgICAgICAgYnVpbGRlciA9IG5ldyBRTmFtZVNldEJ1aWxkZXIoKTsKLSAgICAgICAgICAgICAgICBib29sZWFuIHNlZW5UYXJnZXQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gY29udGVudE1vZGVsLmNvdW50T2ZQYXJ0aWNsZUNoaWxkKCk7IGkgPiAwOyApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICAgICAgICAgIFFOYW1lU2V0IGNoaWxkQ29udGVudHMgPSBjb21wdXRlQWxsQ29udGFpbmVkRWxlbWVudHMoY29udGVudE1vZGVsLmdldFBhcnRpY2xlQ2hpbGQoaSksIHN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNlZW5UYXJnZXQpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkQWxsKGNoaWxkQ29udGVudHMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkQ29udGVudHMuY29udGFpbnModGFyZ2V0KSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hZGRBbGwoY29tcHV0ZUFsbENvbnRhaW5lZEVsZW1lbnRzKGNvbnRlbnRNb2RlbC5nZXRQYXJ0aWNsZUNoaWxkKGkpLCBzdGF0ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2VlblRhcmdldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9RTmFtZVNldCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgYXNzaWduSmF2YUVsZW1lbnRTZXR0ZXJNb2RlbChTY2hlbWFQcm9wZXJ0eVtdIGVsdFByb3BzLCBTY2hlbWFQYXJ0aWNsZSBjb250ZW50TW9kZWwpCi0gICAgewotICAgICAgICAvLyBUbyBjb21wdXRlIHRoZSBlbGVtZW50IHNldHRlciBtb2RlbCwgd2UgbmVlZCB0byBjb21wdXRlIHRoZQotICAgICAgICAvLyBkZWxpbWl0aW5nIGVsZW1lbnRzIGZvciBlYWNoIGVsZW1lbnQuCi0KLSAgICAgICAgTWFwIHN0YXRlID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgUU5hbWVTZXQgYWxsQ29udGVudHMgPSBjb21wdXRlQWxsQ29udGFpbmVkRWxlbWVudHMoY29udGVudE1vZGVsLCBzdGF0ZSk7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbHRQcm9wcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgU2NoZW1hUHJvcGVydHlJbXBsIHNJbXBsID0gKFNjaGVtYVByb3BlcnR5SW1wbCllbHRQcm9wc1tpXTsKLSAgICAgICAgICAgIFFOYW1lU2V0IG5kZSA9IGNvbXB1dGVOb25kZWxpbWl0aW5nRWxlbWVudHMoc0ltcGwuZ2V0TmFtZSgpLCBjb250ZW50TW9kZWwsIHN0YXRlKTsKLSAgICAgICAgICAgIFFOYW1lU2V0QnVpbGRlciBidWlsZGVyID0gbmV3IFFOYW1lU2V0QnVpbGRlcihhbGxDb250ZW50cyk7Ci0gICAgICAgICAgICBidWlsZGVyLnJlbW92ZUFsbChuZGUpOwotICAgICAgICAgICAgc0ltcGwuc2V0SmF2YVNldHRlckRlbGltaXRlcihidWlsZGVyLnRvUU5hbWVTZXQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhc3NpZ25KYXZhUHJvcGVydHlOYW1lcyhTZXQgdXNlZE5hbWVzLCBTY2hlbWFQcm9wZXJ0eVtdIHByb3BzLCBTY2hlbWFUeXBlIGJhc2VUeXBlLCBib29sZWFuIGRvSW5oZXJpdGVkKQotICAgIHsKLSAgICAgICAgU3RzY1N0YXRlIHN0YXRlID0gU3RzY1N0YXRlLmdldCgpOwotCi0gICAgICAgIC8vIHR3byBwYXNzZXM6IGZpcnN0IGRlYWwgd2l0aCBpbmhlcml0ZWQgcHJvcGVydGllcywgdGhlbiB3aXRoIG5ldyBvbmVzLgotICAgICAgICAvLyB0aGlzIGVuc3VyZXMgdGhhdCB3ZSBtYXRjaCB1cCB3aXRoIGJhc2UgY2xhc3MgZGVmaW5pdGlvbnMgY2xlYW5seQotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYVByb3BlcnR5SW1wbCBzSW1wbCA9IChTY2hlbWFQcm9wZXJ0eUltcGwpcHJvcHNbaV07Ci0KLSAgICAgICAgICAgIFNjaGVtYVByb3BlcnR5IGJhc2VQcm9wID0KLSAgICAgICAgICAgICAgIChzSW1wbC5pc0F0dHJpYnV0ZSgpID8KLSAgICAgICAgICAgICAgICAgICAgYmFzZVR5cGUuZ2V0QXR0cmlidXRlUHJvcGVydHkoc0ltcGwuZ2V0TmFtZSgpKSA6Ci0gICAgICAgICAgICAgICAgICAgIGJhc2VUeXBlLmdldEVsZW1lbnRQcm9wZXJ0eShzSW1wbC5nZXROYW1lKCkpKTsKLQotICAgICAgICAgICAgaWYgKChiYXNlUHJvcCAhPSBudWxsKSAhPSBkb0luaGVyaXRlZCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgUU5hbWUgcHJvcFFOYW1lID0gc0ltcGwuZ2V0TmFtZSgpOwotCi0gICAgICAgICAgICBTdHJpbmcgdGhlTmFtZTsKLQotICAgICAgICAgICAgaWYgKGJhc2VQcm9wID09IG51bGwpCi0gICAgICAgICAgICAgICAgdGhlTmFtZSA9IHBpY2tKYXZhUHJvcGVydHlOYW1lKHVzZWROYW1lcywgcHJvcFFOYW1lLmdldExvY2FsUGFydCgpLCBzdGF0ZS5nZXRKYXZhbmFtZShwcm9wUU5hbWUpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aGVOYW1lID0gYmFzZVByb3AuZ2V0SmF2YVByb3BlcnR5TmFtZSgpOwotICAgICAgICAgICAgICAgIGFzc2VydCghdXNlZE5hbWVzLmNvbnRhaW5zKHRoZU5hbWUpKTsKLSAgICAgICAgICAgICAgICB1c2VkTmFtZXMuYWRkKHRoZU5hbWUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzSW1wbC5zZXRKYXZhUHJvcGVydHlOYW1lKHRoZU5hbWUpOwotCi0gICAgICAgICAgICBib29sZWFuIGlzQXJyYXkgPSAoc0ltcGwuZ2V0TWF4T2NjdXJzKCkgPT0gbnVsbCB8fAotICAgICAgICAgICAgICAgIHNJbXBsLmdldE1heE9jY3VycygpLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkgPiAwKTsKLSAgICAgICAgICAgIGJvb2xlYW4gaXNTaW5nbGV0b24gPSAhaXNBcnJheSAmJiAoc0ltcGwuZ2V0TWF4T2NjdXJzKCkuc2lnbnVtKCkgPiAwKTsKLSAgICAgICAgICAgIGJvb2xlYW4gaXNPcHRpb24gPSBpc1NpbmdsZXRvbiAmJiAoc0ltcGwuZ2V0TWluT2NjdXJzKCkuc2lnbnVtKCkgPT0gMCk7Ci0gICAgICAgICAgICBTY2hlbWFUeXBlIGphdmFCYXNlZE9uVHlwZSA9IHNJbXBsLmdldFR5cGUoKTsKLQotICAgICAgICAgICAgaWYgKGJhc2VQcm9wICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VQcm9wLmV4dGVuZHNKYXZhQXJyYXkoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlzU2luZ2xldG9uID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGlzT3B0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGlzQXJyYXkgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoYmFzZVByb3AuZXh0ZW5kc0phdmFTaW5nbGV0b24oKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlzU2luZ2xldG9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VQcm9wLmV4dGVuZHNKYXZhT3B0aW9uKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpc09wdGlvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGphdmFCYXNlZE9uVHlwZSA9IGJhc2VQcm9wLmphdmFCYXNlZE9uVHlwZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzSW1wbC5zZXRFeHRlbmRzSmF2YShqYXZhQmFzZWRPblR5cGUuZ2V0UmVmKCksIGlzU2luZ2xldG9uLCBpc09wdGlvbiwgaXNBcnJheSk7Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFzc2lnbkphdmFUeXBlQ29kZXMoU2NoZW1hUHJvcGVydHlbXSBwcm9wZXJ0aWVzKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBTY2hlbWFQcm9wZXJ0eUltcGwgc0ltcGwgPSAoU2NoZW1hUHJvcGVydHlJbXBsKXByb3BlcnRpZXNbaV07Ci0gICAgICAgICAgICBTY2hlbWFUeXBlIHNUeXBlID0gc0ltcGwuamF2YUJhc2VkT25UeXBlKCk7Ci0gICAgICAgICAgICBzSW1wbC5zZXRKYXZhVHlwZUNvZGUoamF2YVR5cGVDb2RlRm9yVHlwZShzVHlwZSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGludCBqYXZhVHlwZUNvZGVJbkNvbW1vbihTY2hlbWFUeXBlW10gdHlwZXMpCi0gICAgewotICAgICAgICBpZiAodHlwZXMgPT0gbnVsbCB8fCB0eXBlcy5sZW5ndGggPT0gMCkKLSAgICAgICAgICAgIHJldHVybiBTY2hlbWFQcm9wZXJ0eS5YTUxfT0JKRUNUOwotCi0gICAgICAgIGludCBjb2RlID0gamF2YVR5cGVDb2RlRm9yVHlwZSh0eXBlc1swXSk7Ci0gICAgICAgIGlmIChjb2RlID09IFNjaGVtYVByb3BlcnR5LkpBVkFfT0JKRUNUKQotICAgICAgICAgICAgcmV0dXJuIGNvZGU7Ci0gICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGlmIGFueSB0d28gYXJlIGRpZmZlcmVudCwgdGhlIGFuc3dlciBpcyBqYXZhLmxhbmcuT2JqZWN0Ci0gICAgICAgICAgICBpZiAoY29kZSAhPSBqYXZhVHlwZUNvZGVGb3JUeXBlKHR5cGVzW2ldKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2NoZW1hUHJvcGVydHkuSkFWQV9PQkpFQ1Q7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGNvZGU7Ci0gICAgfQotCi0gICAgc3RhdGljIGludCBqYXZhVHlwZUNvZGVGb3JUeXBlKFNjaGVtYVR5cGUgc1R5cGUpCi0gICAgewotICAgICAgICBpZiAoIXNUeXBlLmlzU2ltcGxlVHlwZSgpKQotICAgICAgICAgICAgcmV0dXJuIFNjaGVtYVByb3BlcnR5LlhNTF9PQkpFQ1Q7Ci0KLSAgICAgICAgaWYgKHNUeXBlLmdldFNpbXBsZVZhcmlldHkoKSA9PSBTY2hlbWFUeXBlLlVOSU9OKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBzZWUgaWYgd2UgY2FuIGZpbmQgYW4gaW50ZXJlc3RpbmcgY29tbW9uIGJhc2UgdHlwZSwgZS5nLiwgZm9yIHN0cmluZyBlbnVtcwotICAgICAgICAgICAgU2NoZW1hVHlwZSBiYXNlVHlwZSA9IHNUeXBlLmdldFVuaW9uQ29tbW9uQmFzZVR5cGUoKTsKLSAgICAgICAgICAgIGlmIChiYXNlVHlwZSAhPSBudWxsICYmICFiYXNlVHlwZS5pc1VSVHlwZSgpKQotICAgICAgICAgICAgICAgIHNUeXBlID0gYmFzZVR5cGU7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIGphdmFUeXBlQ29kZUluQ29tbW9uKHNUeXBlLmdldFVuaW9uQ29uc3RpdHVlbnRUeXBlcygpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzVHlwZS5nZXRTaW1wbGVWYXJpZXR5KCkgPT0gU2NoZW1hVHlwZS5MSVNUKQotICAgICAgICAgICAgcmV0dXJuIFNjaGVtYVByb3BlcnR5LkpBVkFfTElTVDsKLQotICAgICAgICBpZiAoc1R5cGUuaXNVUlR5cGUoKSkKLSAgICAgICAgICAgIHJldHVybiBTY2hlbWFQcm9wZXJ0eS5YTUxfT0JKRUNUOwotCi0gICAgICAgIHN3aXRjaCAoc1R5cGUuZ2V0UHJpbWl0aXZlVHlwZSgpLmdldEJ1aWx0aW5UeXBlQ29kZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0FOWV9TSU1QTEU6Ci0gICAgICAgICAgICAgICAgLy8gcmV0dXJuIFNjaGVtYVByb3BlcnR5LlhNTF9PQkpFQ1Q7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNjaGVtYVByb3BlcnR5LkpBVkFfU1RSSU5HOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0JPT0xFQU46Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNjaGVtYVByb3BlcnR5LkpBVkFfQk9PTEVBTjsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19CQVNFXzY0X0JJTkFSWToKLSAgICAgICAgICAgICAgICByZXR1cm4gU2NoZW1hUHJvcGVydHkuSkFWQV9CWVRFX0FSUkFZOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0hFWF9CSU5BUlk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNjaGVtYVByb3BlcnR5LkpBVkFfQllURV9BUlJBWTsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19BTllfVVJJOgotICAgICAgICAgICAgICAgIHJldHVybiBTY2hlbWFQcm9wZXJ0eS5KQVZBX1NUUklORzsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19RTkFNRToKLSAgICAgICAgICAgICAgICByZXR1cm4gU2NoZW1hUHJvcGVydHkuSkFWQV9RTkFNRTsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19OT1RBVElPTjoKLSAgICAgICAgICAgICAgICByZXR1cm4gU2NoZW1hUHJvcGVydHkuWE1MX09CSkVDVDsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19GTE9BVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gU2NoZW1hUHJvcGVydHkuSkFWQV9GTE9BVDsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19ET1VCTEU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNjaGVtYVByb3BlcnR5LkpBVkFfRE9VQkxFOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RFQ0lNQUw6Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChzVHlwZS5nZXREZWNpbWFsU2l6ZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLlNJWkVfQllURToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTY2hlbWFQcm9wZXJ0eS5KQVZBX0JZVEU7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5TSVpFX1NIT1JUOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNjaGVtYVByb3BlcnR5LkpBVkFfU0hPUlQ7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5TSVpFX0lOVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTY2hlbWFQcm9wZXJ0eS5KQVZBX0lOVDsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLlNJWkVfTE9ORzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTY2hlbWFQcm9wZXJ0eS5KQVZBX0xPTkc7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5TSVpFX0JJR19JTlRFR0VSOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNjaGVtYVByb3BlcnR5LkpBVkFfQklHX0lOVEVHRVI7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5TSVpFX0JJR19ERUNJTUFMOgotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNjaGVtYVByb3BlcnR5LkpBVkFfQklHX0RFQ0lNQUw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1NUUklORzoKLSAgICAgICAgICAgICAgICBpZiAoaXNTdHJpbmdUeXBlKHNUeXBlLmdldEJhc2VFbnVtVHlwZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNjaGVtYVByb3BlcnR5LkpBVkFfRU5VTTsKLSAgICAgICAgICAgICAgICByZXR1cm4gU2NoZW1hUHJvcGVydHkuSkFWQV9TVFJJTkc7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfRFVSQVRJT046Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNjaGVtYVByb3BlcnR5LkpBVkFfR0RVUkFUSU9OOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RBVEVfVElNRToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfREFURToKLSAgICAgICAgICAgICAgICAvLyByZXR1cm4gU2NoZW1hUHJvcGVydHkuSkFWQV9EQVRFOyAvLyBjb252ZXJ0ZWQgdG8gY2FsZW5kYXIKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19USU1FOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX1lFQVJfTU9OVEg6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfWUVBUjoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19NT05USF9EQVk6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfREFZOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX01PTlRIOgotICAgICAgICAgICAgICAgIC8vIHJldHVybiBTY2hlbWFQcm9wZXJ0eS5KQVZBX0dEQVRFOyAvLyBjb252ZXJ0ZWQgdG8gY2FsZW5kYXIgKEpBWC1CKQotICAgICAgICAgICAgICAgIHJldHVybiBTY2hlbWFQcm9wZXJ0eS5KQVZBX0NBTEVOREFSOwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSkgOiAidW5yZWNvZ25pemVkIGNvZGUgIiArIHNUeXBlLmdldFByaW1pdGl2ZVR5cGUoKS5nZXRCdWlsdGluVHlwZUNvZGUoKTsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJ1bnJlY29nbml6ZWQgY29kZSAiICsgc1R5cGUuZ2V0UHJpbWl0aXZlVHlwZSgpLmdldEJ1aWx0aW5UeXBlQ29kZSgpICsgIiBvZiAiICsgc1R5cGUuZ2V0UHJpbWl0aXZlVHlwZSgpLmdldE5hbWUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbGVhbiBpc1Byb3BlcnR5TW9kZWxPcmRlckluc2Vuc2l0aXZlKFNjaGVtYVByb3BlcnR5W10gcHJvcGVydGllcykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgU2NoZW1hUHJvcGVydHkgcHJvcCA9IHByb3BlcnRpZXNbaV07Ci0gICAgICAgICAgICBpZiAocHJvcC5oYXNOaWxsYWJsZSgpID09IFNjaGVtYVByb3BlcnR5LlZBUklBQkxFKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChwcm9wLmhhc0RlZmF1bHQoKSA9PSBTY2hlbWFQcm9wZXJ0eS5WQVJJQUJMRSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAocHJvcC5oYXNGaXhlZCgpID09IFNjaGVtYVByb3BlcnR5LlZBUklBQkxFKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChwcm9wLmhhc0RlZmF1bHQoKSAhPSBTY2hlbWFQcm9wZXJ0eS5ORVZFUiAmJgotICAgICAgICAgICAgICAgIHByb3AuZ2V0RGVmYXVsdFRleHQoKSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbGVhbiBwcm90ZWN0UmVzZXJ2ZWRHbG9iYWxDbGFzc05hbWVzKFN0cmluZyBuYW1lKQotICAgIHsKLSAgICAgICAgaW50IGkgPSBuYW1lLmxhc3RJbmRleE9mKCcuJyk7Ci0gICAgICAgIFN0cmluZyBsYXN0U2VnbWVudCA9IG5hbWUuc3Vic3RyaW5nKGkgKyAxKTsKLSAgICAgICAgaWYgKGxhc3RTZWdtZW50LmVuZHNXaXRoKCJEb2N1bWVudCIpICYmICFsYXN0U2VnbWVudC5lcXVhbHMoIkRvY3VtZW50IikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHN0YXRpYyBib29sZWFuIHByb3RlY3RSZXNlcnZlZElubmVyQ2xhc3NOYW1lcyhTdHJpbmcgbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAobmFtZS5lcXVhbHMoIkVudW0iKSB8fCBuYW1lLmVxdWFscygiRmFjdG9yeSIpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgU3RyaW5nW10gUFJPVEVDVEVEX1BST1BFUlRJRVMgPSB7Ci0gICAgICAgICJTdHJpbmdWYWx1ZSIsCi0gICAgICAgICJCb29sZWFuVmFsdWUiLAotICAgICAgICAiQnl0ZVZhbHVlIiwKLSAgICAgICAgIlNob3J0VmFsdWUiLAotICAgICAgICAiSW50VmFsdWUiLAotICAgICAgICAiTG9uZ1ZhbHVlIiwKLSAgICAgICAgIkJpZ0ludGVnZXJWYWx1ZSIsCi0gICAgICAgICJCaWdEZWNpbWFsVmFsdWUiLAotICAgICAgICAiRmxvYXRWYWx1ZSIsCi0gICAgICAgICJEb3VibGVWYWx1ZSIsCi0gICAgICAgICJCeXRlQXJyYXlWYWx1ZSIsCi0gICAgICAgICJFbnVtVmFsdWUiLAotICAgICAgICAiQ2FsZW5kYXJWYWx1ZSIsCi0gICAgICAgICJEYXRlVmFsdWUiLAotICAgICAgICAiR0RhdGVWYWx1ZSIsCi0gICAgICAgICJHRHVyYXRpb25WYWx1ZSIsCi0gICAgICAgICJRTmFtZVZhbHVlIiwKLSAgICAgICAgIkxpc3RWYWx1ZSIsCi0gICAgICAgICJPYmplY3RWYWx1ZSIsCi0gICAgICAgICJDbGFzcyIsCi0gICAgfTsKLSAgICBzdGF0aWMgU2V0IFBST1RFQ1RFRF9QUk9QRVJUSUVTX1NFVCA9IG5ldyBIYXNoU2V0KEFycmF5cy5hc0xpc3QoUFJPVEVDVEVEX1BST1BFUlRJRVMpKTsKLQotICAgIHN0YXRpYyBib29sZWFuIHByb3RlY3RSZXNlcnZlZFByb3BlcnR5TmFtZXMoU3RyaW5nIG5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gUFJPVEVDVEVEX1BST1BFUlRJRVNfU0VULmNvbnRhaW5zKG5hbWUpIHx8Ci0gICAgICAgICAgICAobmFtZS5lbmRzV2l0aCgiQXJyYXkiKSAmJiAhbmFtZS5lcXVhbHMoIkFycmF5IikpOwotICAgIH0KLQotICAgIHN0YXRpYyBTdHJpbmcgcGlja0Z1bGxKYXZhQ2xhc3NOYW1lKFNldCB1c2VkTmFtZXMsIFFOYW1lIHFOYW1lLCBTdHJpbmcgY29uZmlnbmFtZSwgYm9vbGVhbiBpc0RvY3VtZW50LCBib29sZWFuIGlzQXR0clR5cGUpCi0gICAgewotICAgICAgICBTdHJpbmcgYmFzZTsKLSAgICAgICAgYm9vbGVhbiBwcm90ZWN0OwotCi0gICAgICAgIGlmIChjb25maWduYW1lICE9IG51bGwgJiYgY29uZmlnbmFtZS5pbmRleE9mKCcuJykgPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gYSBjb25maWduYW1lIHdpdGggZG90cyBkZWZpbmVzIHRoZSBmdWxseSBxdWFsaWZpZWQgamF2YSBjbGFzcyBuYW1lCi0gICAgICAgICAgICBiYXNlID0gY29uZmlnbmFtZTsKLSAgICAgICAgICAgIHByb3RlY3QgPSBwcm90ZWN0UmVzZXJ2ZWRHbG9iYWxDbGFzc05hbWVzKGJhc2UpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgU3RzY1N0YXRlIHN0YXRlID0gU3RzY1N0YXRlLmdldCgpOwotICAgICAgICAgICAgU3RyaW5nIHVyaSA9IHFOYW1lLmdldE5hbWVzcGFjZVVSSSgpOwotCi0gICAgICAgICAgICBiYXNlID0gTmFtZVV0aWwuZ2V0Q2xhc3NOYW1lRnJvbVFOYW1lKHFOYW1lKTsKLQotICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSBtYXBwaW5nIGZyb20gbmFtZXNwYWNlIFVSSSB0byBKYXZhIHBhY2thZ2UKLSAgICAgICAgICAgIC8vIG5hbWUuIElmIHNvLCBhcHBseSB0aGUgbWFwcGVkIHBhY2thZ2UgcHJlZml4IGF0IHRoZSBiZWdpbm5pbmcgb2YKLSAgICAgICAgICAgIC8vIHRoZSBiYXNlIG5hbWUKLQotICAgICAgICAgICAgU3RyaW5nIHBrZ1ByZWZpeCA9IHN0YXRlLmdldFBhY2thZ2VPdmVycmlkZSh1cmkpOwotCi0gICAgICAgICAgICBpZiAocGtnUHJlZml4ICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gRm9ybSB0aGUgbmV3IHF1YWxpZmllZCBjbGFzcyBuYW1lIGZyb20gdGhlIG5ldyBwYWNrYWdlIG5hbWUKLSAgICAgICAgICAgICAgICAvLyBhbmQgdGhlIG9sZCBjbGFzcyBuYW1lCi0gICAgICAgICAgICAgICAgYmFzZSA9IHBrZ1ByZWZpeCArICIuIiArIGJhc2Uuc3Vic3RyaW5nKGJhc2UubGFzdEluZGV4T2YoJy4nKSArIDEpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUgaXMgYSBwcmVmaXguLi4KLSAgICAgICAgICAgIFN0cmluZyBqYXZhUHJlZml4ID0gc3RhdGUuZ2V0SmF2YVByZWZpeCh1cmkpOwotICAgICAgICAgICAgaWYgKGphdmFQcmVmaXggIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBiYXNlID0gYmFzZS5zdWJzdHJpbmcoMCwgYmFzZS5sYXN0SW5kZXhPZignLicpICsgMSkgKyBqYXZhUHJlZml4ICsgYmFzZS5zdWJzdHJpbmcoYmFzZS5sYXN0SW5kZXhPZignLicpICsgMSk7Ci0KLSAgICAgICAgICAgIC8vIGEgY29uZmlnbmFtZSB3aXRob3V0IGRvdHMgbWF5IG92ZXJyaWRlIHRoZSBzaG9ydG5hbWUgcGFydC4KLSAgICAgICAgICAgIGlmIChjb25maWduYW1lICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYmFzZSA9IGJhc2Uuc3Vic3RyaW5nKDAsIGJhc2UubGFzdEluZGV4T2YoJy4nKSArIDEpICsgY29uZmlnbmFtZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJvdGVjdCA9IHByb3RlY3RSZXNlcnZlZEdsb2JhbENsYXNzTmFtZXMoYmFzZSk7Ci0gICAgICAgICAgICBpZiAoY29uZmlnbmFtZSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIGFkZCBzcGVjaWFsIHN1ZmZpeAotICAgICAgICAgICAgICAgIGlmIChpc0RvY3VtZW50KQotICAgICAgICAgICAgICAgICAgICBiYXNlID0gYmFzZSArICJEb2N1bWVudCI7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNBdHRyVHlwZSkKLSAgICAgICAgICAgICAgICAgICAgYmFzZSA9IGJhc2UgKyAiQXR0cmlidXRlIjsKLQotICAgICAgICAgICAgICAgIC8vIGFkZCBjb25maWd1cmVkIHN1ZmZpeAotICAgICAgICAgICAgICAgIFN0cmluZyBqYXZhU3VmZml4ID0gc3RhdGUuZ2V0SmF2YVN1ZmZpeCh1cmkpOwotICAgICAgICAgICAgICAgIGlmIChqYXZhU3VmZml4ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIGJhc2UgPSBiYXNlICsgamF2YVN1ZmZpeDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBvdXRlcm1vc3RQa2cgPSBnZXRPdXRlcm1vc3RQYWNrYWdlKGJhc2UpOwotCi0gICAgICAgIGludCBpbmRleCA9IDE7Ci0gICAgICAgIFN0cmluZyB1bmlxTmFtZTsKLSAgICAgICAgaWYgKHByb3RlY3QpCi0gICAgICAgICAgICB1bmlxTmFtZSA9IGJhc2UgKyBpbmRleDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdW5pcU5hbWUgPSBiYXNlOwotICAgICAgICB3aGlsZSAodXNlZE5hbWVzLmNvbnRhaW5zKHVuaXFOYW1lLnRvTG93ZXJDYXNlKCkpIHx8IHVuaXFOYW1lLmVxdWFscyhvdXRlcm1vc3RQa2cpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmRleCsrOwotICAgICAgICAgICAgdW5pcU5hbWUgPSBiYXNlICsgaW5kZXg7Ci0gICAgICAgIH0KLQotICAgICAgICB1c2VkTmFtZXMuYWRkKHVuaXFOYW1lLnRvTG93ZXJDYXNlKCkpOwotCi0gICAgICAgIHJldHVybiB1bmlxTmFtZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgU3RyaW5nIGdldE91dGVybW9zdFBhY2thZ2UoU3RyaW5nIGZxY24pCi0gICAgewotICAgICAgICBpZiAoZnFjbiA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuICIiOwotCi0gICAgICAgIC8vIHJlbW92ZSBjbGFzcyBuYW1lCi0gICAgICAgIGludCBsYXN0ZG90ID0gZnFjbi5pbmRleE9mKCcuJyk7Ci0gICAgICAgIGlmIChsYXN0ZG90IDwgMCkKLSAgICAgICAgICAgIHJldHVybiAiIjsKLQotICAgICAgICAvLyByZW1vdmUgb3V0ZXIgcGFja2FnZSBuYW1lcwotICAgICAgICByZXR1cm4gZnFjbi5zdWJzdHJpbmcoMCwgbGFzdGRvdCk7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cmluZyBwaWNrRnVsbEphdmFJbXBsTmFtZShTZXQgdXNlZE5hbWVzLCBTdHJpbmcgaW50Zk5hbWUpCi0gICAgewotICAgICAgICAvLyBTdHJpcCBvZmYgdGhlIHBhY2thZ2UgZnJvbSB0aGUgY2xhc3MgbmFtZSBzbyB3ZSBjYW4gcmVwbGFjZSBpdAotICAgICAgICBTdHJpbmcgY2xhc3NOYW1lID0gaW50Zk5hbWU7Ci0gICAgICAgIFN0cmluZyBwa2dOYW1lID0gbnVsbDsKLSAgICAgICAgaW50IGluZGV4ID0gaW50Zk5hbWUubGFzdEluZGV4T2YoJy4nKTsKLSAgICAgICAgaWYgKGluZGV4ID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNsYXNzTmFtZSA9IGludGZOYW1lLnN1YnN0cmluZyhpbmRleCArIDEpOwotICAgICAgICAgICAgcGtnTmFtZSA9IGludGZOYW1lLnN1YnN0cmluZygwLCBpbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGb3JtIHRoZSBuZXcgcXVhbGlmaWVkIGNsYXNzIG5hbWUgZnJvbSB0aGUgbmV3IHBhY2thZ2UgbmFtZQotICAgICAgICAvLyBhbmQgdGhlIG9sZCBjbGFzcyBuYW1lCi0gICAgICAgIFN0cmluZyBiYXNlID0gcGtnTmFtZSArICIuaW1wbC4iICsgY2xhc3NOYW1lICsgIkltcGwiOwotCi0gICAgICAgIGluZGV4ID0gMTsKLSAgICAgICAgU3RyaW5nIHVuaXFOYW1lID0gYmFzZTsKLSAgICAgICAgd2hpbGUgKHVzZWROYW1lcy5jb250YWlucyh1bmlxTmFtZS50b0xvd2VyQ2FzZSgpKSkKLSAgICAgICAgewotICAgICAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgICAgIHVuaXFOYW1lID0gYmFzZSArIGluZGV4OwotICAgICAgICB9Ci0KLSAgICAgICAgdXNlZE5hbWVzLmFkZCh1bmlxTmFtZS50b0xvd2VyQ2FzZSgpKTsKLQotICAgICAgICByZXR1cm4gdW5pcU5hbWU7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cmluZyBwaWNrSmF2YVByb3BlcnR5TmFtZShTZXQgdXNlZE5hbWVzLCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgamF2YU5hbWUpCi0gICAgewotICAgICAgICBpZiAoamF2YU5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgIGphdmFOYW1lID0gTmFtZVV0aWwudXBwZXJDYW1lbENhc2UobG9jYWxOYW1lKTsKLSAgICAgICAgYm9vbGVhbiBwcm90ZWN0ID0gcHJvdGVjdFJlc2VydmVkUHJvcGVydHlOYW1lcyhqYXZhTmFtZSk7Ci0gICAgICAgIFN0cmluZyB1bmlxTmFtZTsKLSAgICAgICAgaW50IGluZGV4ID0gMTsKLSAgICAgICAgaWYgKHByb3RlY3QpCi0gICAgICAgICAgICB1bmlxTmFtZSA9IGphdmFOYW1lICsgaW5kZXg7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHVuaXFOYW1lID0gamF2YU5hbWU7Ci0gICAgICAgIHdoaWxlICh1c2VkTmFtZXMuY29udGFpbnModW5pcU5hbWUpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmRleCsrOwotICAgICAgICAgICAgdW5pcU5hbWUgPSBqYXZhTmFtZSArIGluZGV4OwotICAgICAgICB9Ci0KLSAgICAgICAgdXNlZE5hbWVzLmFkZCh1bmlxTmFtZSk7Ci0KLSAgICAgICAgcmV0dXJuIHVuaXFOYW1lOwotICAgIH0KLQotICAgIHN0YXRpYyBTdHJpbmcgcGlja0lubmVySmF2YUNsYXNzTmFtZShTZXQgdXNlZE5hbWVzLCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgamF2YU5hbWUpCi0gICAgewotICAgICAgICBpZiAoamF2YU5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgIGphdmFOYW1lID0gTmFtZVV0aWwudXBwZXJDYW1lbENhc2UobG9jYWxOYW1lKTsKLSAgICAgICAgYm9vbGVhbiBwcm90ZWN0ID0gcHJvdGVjdFJlc2VydmVkSW5uZXJDbGFzc05hbWVzKGphdmFOYW1lKTsKLSAgICAgICAgU3RyaW5nIHVuaXFOYW1lOwotICAgICAgICBpbnQgaW5kZXggPSAxOwotICAgICAgICBpZiAocHJvdGVjdCkKLSAgICAgICAgICAgIHVuaXFOYW1lID0gamF2YU5hbWUgKyBpbmRleDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdW5pcU5hbWUgPSBqYXZhTmFtZTsKLSAgICAgICAgd2hpbGUgKHVzZWROYW1lcy5jb250YWlucyh1bmlxTmFtZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAgICAgICB1bmlxTmFtZSA9IGphdmFOYW1lICsgaW5kZXg7Ci0gICAgICAgIH0KLQotICAgICAgICB1c2VkTmFtZXMuYWRkKHVuaXFOYW1lKTsKLQotICAgICAgICByZXR1cm4gdW5pcU5hbWU7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cmluZyBwaWNrSW5uZXJKYXZhSW1wbE5hbWUoU2V0IHVzZWROYW1lcywgU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIGphdmFOYW1lKQotICAgIHsKLSAgICAgICAgaWYgKGphdmFOYW1lID09IG51bGwpCi0gICAgICAgICAgICBqYXZhTmFtZSA9IE5hbWVVdGlsLnVwcGVyQ2FtZWxDYXNlKGxvY2FsTmFtZSkgKyAiSW1wbCI7Ci0gICAgICAgIFN0cmluZyB1bmlxTmFtZSA9IGphdmFOYW1lOwotICAgICAgICBpbnQgaW5kZXggPSAxOwotICAgICAgICB3aGlsZSAodXNlZE5hbWVzLmNvbnRhaW5zKHVuaXFOYW1lKSkKLSAgICAgICAgewotICAgICAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgICAgIHVuaXFOYW1lID0gamF2YU5hbWUgKyBpbmRleDsKLSAgICAgICAgfQotCi0gICAgICAgIHVzZWROYW1lcy5hZGQodW5pcU5hbWUpOwotCi0gICAgICAgIHJldHVybiB1bmlxTmFtZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUU5hbWUgZmluZFRvcE5hbWUoU2NoZW1hVHlwZSBzVHlwZSkKLSAgICB7Ci0gICAgICAgIGlmIChzVHlwZS5nZXROYW1lKCkgIT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBzVHlwZS5nZXROYW1lKCk7Ci0KLSAgICAgICAgaWYgKHNUeXBlLmlzRG9jdW1lbnRUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEEgZG9jdW1lbnQgdHlwZSBtdXN0IGhhdmUgYSBjb250ZW50IG1vZGVsIGNvbnNpc3Rpbmcgb2YgYSBzaW5nbGUgZWx0Ci0gICAgICAgICAgICBpZiAoc1R5cGUuZ2V0Q29udGVudE1vZGVsKCkgPT0gbnVsbCB8fCBzVHlwZS5nZXRDb250ZW50TW9kZWwoKS5nZXRQYXJ0aWNsZVR5cGUoKSAhPSBTY2hlbWFQYXJ0aWNsZS5FTEVNRU5UKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLSAgICAgICAgICAgIHJldHVybiAoc1R5cGUuZ2V0RG9jdW1lbnRFbGVtZW50TmFtZSgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzVHlwZS5pc0F0dHJpYnV0ZVR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHNUeXBlLmdldEF0dHJpYnV0ZU1vZGVsKCkgPT0gbnVsbCB8fCBzVHlwZS5nZXRBdHRyaWJ1dGVNb2RlbCgpLmdldEF0dHJpYnV0ZXMoKS5sZW5ndGggIT0gMSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICByZXR1cm4gc1R5cGUuZ2V0QXR0cmlidXRlVHlwZUF0dHJpYnV0ZU5hbWUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFNjaGVtYUZpZWxkIHNFbHQgPSBzVHlwZS5nZXRDb250YWluZXJGaWVsZCgpOwotICAgICAgICBhc3NlcnQoc0VsdCAhPSBudWxsKTsKLSAgICAgICAgYXNzZXJ0KHNUeXBlLmdldE91dGVyVHlwZSgpID09IG51bGwpOwotICAgICAgICByZXR1cm4gc0VsdC5nZXROYW1lKCk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TdHNjUmVzb2x2ZXIuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1N0c2NSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxY2IzMWIwLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1N0c2NSZXNvbHZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQ0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnNjaGVtYTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVBhcnRpY2xlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXQ7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotCi1pbXBvcnQgb3JnLnczLngyMDAxLnhtbFNjaGVtYS5Ub3BMZXZlbEVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczLngyMDAxLnhtbFNjaGVtYS5Ub3BMZXZlbEF0dHJpYnV0ZTsKLWltcG9ydCBvcmcudzMueDIwMDEueG1sU2NoZW1hLlNpbXBsZVR5cGU7Ci1pbXBvcnQgb3JnLnczLngyMDAxLnhtbFNjaGVtYS5BdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLnczLngyMDAxLnhtbFNjaGVtYS5FbGVtZW50OwotaW1wb3J0IG9yZy53My54MjAwMS54bWxTY2hlbWEuS2V5cmVmRG9jdW1lbnQuS2V5cmVmOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uWG1sRXJyb3JDb250ZXh0OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLXB1YmxpYyBjbGFzcyBTdHNjUmVzb2x2ZXIKLXsKLSAgICAvKioKLSAgICAgKiBEb2VzIGEgdG9wbyB3YWxrIG9mIGFsbCB0aGUgdHlwZXMgdG8gcmVzb2x2ZSB0aGVtLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCByZXNvbHZlQWxsKCkKLSAgICB7Ci0gICAgICAgIC8vIHJlc29sdmUgdHJlZSBvZiB0eXBlcwotICAgICAgICBTdHNjU3RhdGUgc3RhdGUgPSBTdHNjU3RhdGUuZ2V0KCk7Ci0KLSAgICAgICAgU2NoZW1hVHlwZVtdIGRvY3VtZW50VHlwZXMgPSBzdGF0ZS5kb2N1bWVudFR5cGVzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IGRvY3VtZW50VHlwZXMubGVuZ3RoIDsgaSsrKQotICAgICAgICAgICAgcmVzb2x2ZVN1YnN0aXR1dGlvbkdyb3VwKChTY2hlbWFUeXBlSW1wbClkb2N1bWVudFR5cGVzW2ldKTsKLQotICAgICAgICBMaXN0IGFsbFNlZW5UeXBlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgYWxsU2VlblR5cGVzLmFkZEFsbChBcnJheXMuYXNMaXN0KHN0YXRlLmRvY3VtZW50VHlwZXMoKSkpOwotICAgICAgICBhbGxTZWVuVHlwZXMuYWRkQWxsKEFycmF5cy5hc0xpc3Qoc3RhdGUuYXR0cmlidXRlVHlwZXMoKSkpOwotICAgICAgICBhbGxTZWVuVHlwZXMuYWRkQWxsKEFycmF5cy5hc0xpc3Qoc3RhdGUucmVkZWZpbmVkR2xvYmFsVHlwZXMoKSkpOwotICAgICAgICBhbGxTZWVuVHlwZXMuYWRkQWxsKEFycmF5cy5hc0xpc3Qoc3RhdGUuZ2xvYmFsVHlwZXMoKSkpOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWxsU2VlblR5cGVzLnNpemUoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBTY2hlbWFUeXBlIGdUeXBlID0gKFNjaGVtYVR5cGUpYWxsU2VlblR5cGVzLmdldChpKTsKLSAgICAgICAgICAgIHJlc29sdmVUeXBlKChTY2hlbWFUeXBlSW1wbClnVHlwZSk7Ci0gICAgICAgICAgICBhbGxTZWVuVHlwZXMuYWRkQWxsKEFycmF5cy5hc0xpc3QoZ1R5cGUuZ2V0QW5vbnltb3VzVHlwZXMoKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVzb2x2ZSBhbGwga2V5cmVmIHJlZnMKLSAgICAgICAgcmVzb2x2ZUlkZW50aXR5Q29uc3RyYWludHMoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcmVzb2x2ZVR5cGUoU2NoZW1hVHlwZUltcGwgc0ltcGwpCi0gICAgewotICAgICAgICBpZiAoc0ltcGwuaXNSZXNvbHZlZCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChzSW1wbC5pc1Jlc29sdmluZygpKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHNjU3RhdGUuZ2V0KCkuZXJyb3IoIkN5Y2xpYyBkZXBlbmRlbmN5IGVycm9yIiwgWG1sRXJyb3JDb250ZXh0LkNZQ0xJQ19ERVBFTkRFTkNZLCBzSW1wbC5nZXRQYXJzZU9iamVjdCgpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gY3ljbGljIGRlcGVuZGVuY3kgZXJyb3IKLSAgICAgICAgfQotICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc29sdmluZyAiICsgc0ltcGwpOwotCi0gICAgICAgIHNJbXBsLnN0YXJ0UmVzb2x2aW5nKCk7Ci0KLSAgICAgICAgaWYgKHNJbXBsLmlzRG9jdW1lbnRUeXBlKCkpCi0gICAgICAgICAgICByZXNvbHZlRG9jdW1lbnRUeXBlKHNJbXBsKTsKLSAgICAgICAgZWxzZSBpZiAoc0ltcGwuaXNBdHRyaWJ1dGVUeXBlKCkpCi0gICAgICAgICAgICByZXNvbHZlQXR0cmlidXRlVHlwZShzSW1wbCk7Ci0gICAgICAgIGVsc2UgaWYgKHNJbXBsLmlzU2ltcGxlVHlwZSgpKQotICAgICAgICAgICAgU3RzY1NpbXBsZVR5cGVSZXNvbHZlci5yZXNvbHZlU2ltcGxlVHlwZShzSW1wbCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFN0c2NDb21wbGV4VHlwZVJlc29sdmVyLnJlc29sdmVDb21wbGV4VHlwZShzSW1wbCk7Ci0KLSAgICAgICAgc0ltcGwuZmluaXNoUmVzb2x2aW5nKCk7Ci0gICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiRmluaXNoZWQgcmVzb2x2aW5nICIgKyBzSW1wbCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiByZXNvbHZlU3Vic3RpdHV0aW9uR3JvdXAoU2NoZW1hVHlwZUltcGwgc0ltcGwpCi0gICAgewotICAgICAgICBhc3NlcnQgc0ltcGwuaXNEb2N1bWVudFR5cGUoKTsKLQotICAgICAgICBpZiAoc0ltcGwuaXNTR1Jlc29sdmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKHNJbXBsLmlzU0dSZXNvbHZpbmcoKSkKLSAgICAgICAgewotICAgICAgICAgICAgU3RzY1N0YXRlLmdldCgpLmVycm9yKCJDeWNsaWMgZGVwZW5kZW5jeSBlcnJvciIsIFhtbEVycm9yQ29udGV4dC5DWUNMSUNfREVQRU5ERU5DWSwgc0ltcGwuZ2V0UGFyc2VPYmplY3QoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGN5Y2xpYyBkZXBlbmRlbmN5IGVycm9yCi0gICAgICAgIH0KLQotICAgICAgICBzSW1wbC5zdGFydFJlc29sdmluZ1NHcygpOwotCi0gICAgICAgIC8vIFJlc29sdmUgc3Vic3RpdHV0aW9uIGdyb3VwCi0KLSAgICAgICAgVG9wTGV2ZWxFbGVtZW50IGVsdCA9IChUb3BMZXZlbEVsZW1lbnQpc0ltcGwuZ2V0UGFyc2VPYmplY3QoKTsKLSAgICAgICAgU2NoZW1hVHlwZUltcGwgc3Vic3RpdHV0aW9uR3JvdXAgPSBudWxsOwotICAgICAgICBRTmFtZSBlbHROYW1lID0gbmV3IFFOYW1lKHNJbXBsLmdldFRhcmdldE5hbWVzcGFjZSgpLCBlbHQuZ2V0TmFtZSgpKTsKLQotICAgICAgICAvLyBCVUc6IEhvdyBkbyBJIHRlbGwgaWYgdGhlIHR5cGUgaXMgaW4gdGhpcyBjb21waWxhdGlvbiB1bml0PwotICAgICAgICBpZiAoZWx0LmlzU2V0U3Vic3RpdHV0aW9uR3JvdXAoKSkKLSAgICAgICAgewotICAgICAgICAgICAgc3Vic3RpdHV0aW9uR3JvdXAgPSBTdHNjU3RhdGUuZ2V0KCkuZmluZERvY3VtZW50VHlwZShlbHQuZ2V0U3Vic3RpdHV0aW9uR3JvdXAoKSwgCi0gICAgICAgICAgICAgICAgc0ltcGwuZ2V0Q2hhbWVsZW9uTmFtZXNwYWNlKCkpOwotCi0gICAgICAgICAgICBpZiAoc3Vic3RpdHV0aW9uR3JvdXAgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICBTdHNjU3RhdGUuZ2V0KCkubm90Rm91bmRFcnJvcihlbHQuZ2V0U3Vic3RpdHV0aW9uR3JvdXAoKSwgWG1sRXJyb3JDb250ZXh0LkVMRU1FTlRfUkVGX05PVF9GT1VORCwgZWx0LnhnZXRTdWJzdGl0dXRpb25Hcm91cCgpKTsKLSAgICAgICAgICAgICAgICAvLyByZWNvdmVyeSAtIGlnbm9yZSBzdWJzdGl0dXRpb24gZ3JvdXAKLSAgICAgICAgICAgIGVsc2UgaWYgKCEgcmVzb2x2ZVN1YnN0aXR1dGlvbkdyb3VwKHN1YnN0aXR1dGlvbkdyb3VwKSApCi0gICAgICAgICAgICAgICAgc3Vic3RpdHV0aW9uR3JvdXAgPSBudWxsOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNJbXBsLnNldFN1YnN0aXR1dGlvbkdyb3VwKGVsdC5nZXRTdWJzdGl0dXRpb25Hcm91cCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdhbGsgdXAgdGhlIGNoYWluIG9mIHN1YnRpdHV0aW9uIGdyb3VwcyBhZGRpbmcgdGhpcyBzY2hlbWF0eXBlIHRvIGVhY2ggaGVhZCdzCi0gICAgICAgIC8vIG1lbWJlciBsaXN0Ci0gICAgICAgIHdoaWxlIChzdWJzdGl0dXRpb25Hcm91cCAhPSBudWxsKQotICAgICAgICB7Ci0KLSAgICAgICAgICAgIHN1YnN0aXR1dGlvbkdyb3VwLmFkZFN1YnN0aXR1dGlvbkdyb3VwTWVtYmVyKGVsdE5hbWUpOwotCi0gICAgICAgICAgICBpZiAoc3Vic3RpdHV0aW9uR3JvdXAuZ2V0U3Vic3RpdHV0aW9uR3JvdXAoKSA9PSBudWxsKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBzdWJzdGl0dXRpb25Hcm91cCA9IFN0c2NTdGF0ZS5nZXQoKS5maW5kRG9jdW1lbnRUeXBlKAotICAgICAgICAgICAgICAgIHN1YnN0aXR1dGlvbkdyb3VwLmdldFN1YnN0aXR1dGlvbkdyb3VwKCksIHN1YnN0aXR1dGlvbkdyb3VwLmdldENoYW1lbGVvbk5hbWVzcGFjZSgpKTsKLQotICAgICAgICAgICAgYXNzZXJ0IHN1YnN0aXR1dGlvbkdyb3VwICE9IG51bGwgOiAiQ291bGQgbm90IGZpbmQgZG9jdW1lbnQgdHlwZSBmb3I6ICIgKyBzdWJzdGl0dXRpb25Hcm91cC5nZXRTdWJzdGl0dXRpb25Hcm91cCgpOwotCi0gICAgICAgICAgICBpZiAoISByZXNvbHZlU3Vic3RpdHV0aW9uR3JvdXAoc3Vic3RpdHV0aW9uR3JvdXApICkKLSAgICAgICAgICAgICAgICBzdWJzdGl0dXRpb25Hcm91cCA9IG51bGw7IC8vIGN5Y2xpYyBkZXBlbmRlbmN5IC0gbm8gc3Vic3QgZ3JvdXAKLQotICAgICAgICB9Ci0KLSAgICAgICAgc0ltcGwuZmluaXNoUmVzb2x2aW5nU0dzKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHJlc29sdmVEb2N1bWVudFR5cGUgKCBTY2hlbWFUeXBlSW1wbCBzSW1wbCApCi0gICAgewotICAgICAgICBhc3NlcnQgc0ltcGwuaXNSZXNvbHZpbmcoKTsKLSAgICAgICAgCi0gICAgICAgIGFzc2VydCBzSW1wbC5pc0RvY3VtZW50VHlwZSgpOwotICAgICAgICAKLQotICAgICAgICAvLyB0cmFuc2xhdGUgdGhlIGdsb2JhbCBlbGVtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRvY3VtZW50IHR5cGUKLSAgICAgICAgLy8gYW5kIGNvbnN0cnVjdCBhIGNvbnRlbnQgbW9kZWwgd2hpY2ggYWxsb3dzIGp1c3QgdGhhdCBlbGVtZW50Ci0gICAgICAgIAotICAgICAgICBMaXN0IGFub25UeXBlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgICAgICBTY2hlbWFHbG9iYWxFbGVtZW50SW1wbCBlbGVtZW50ID0KLSAgICAgICAgICAgIChTY2hlbWFHbG9iYWxFbGVtZW50SW1wbCkKLSAgICAgICAgICAgICAgICBTdHNjVHJhbnNsYXRvci50cmFuc2xhdGVFbGVtZW50KAotICAgICAgICAgICAgICAgICAgICAoRWxlbWVudCkgc0ltcGwuZ2V0UGFyc2VPYmplY3QoKSwKLSAgICAgICAgICAgICAgICAgICAgc0ltcGwuZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIHNJbXBsLmlzQ2hhbWVsZW9uKCksCi0gICAgICAgICAgICAgICAgICAgIGFub25UeXBlcywgc0ltcGwgKTsKLQotICAgICAgICBTY2hlbWFMb2NhbEVsZW1lbnRJbXBsIGNvbnRlbnRNb2RlbCA9IG51bGw7Ci0KLSAgICAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgU3RzY1N0YXRlLmdldCgpLmFkZEdsb2JhbEVsZW1lbnQoIGVsZW1lbnQgKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjb250ZW50TW9kZWwgPSBuZXcgU2NoZW1hTG9jYWxFbGVtZW50SW1wbCgpOwotICAgICAgICAKLSAgICAgICAgICAgIGNvbnRlbnRNb2RlbC5zZXRQYXJ0aWNsZVR5cGUoIFNjaGVtYVBhcnRpY2xlLkVMRU1FTlQgKTsKLSAgICAgICAgICAgIFN0c2NUcmFuc2xhdG9yLmNvcHlHbG9iYWxFbGVtZW50VG9Mb2NhbEVsZW1lbnQoIGVsZW1lbnQsIGNvbnRlbnRNb2RlbCApOwotICAgICAgICAgICAgY29udGVudE1vZGVsLnNldE1pbk9jY3VycyggQmlnSW50ZWdlci5PTkUgKTsKLSAgICAgICAgICAgIGNvbnRlbnRNb2RlbC5zZXRNYXhPY2N1cnMoIEJpZ0ludGVnZXIuT05FICk7Ci0KLSAgICAgICAgICAgIGNvbnRlbnRNb2RlbC5zZXRUcmFuc2l0aW9uTm90ZXMoUU5hbWVTZXQuRU1QVFksIHRydWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgTWFwIGVsZW1lbnRQcm9wZXJ0eU1vZGVsID0KLSAgICAgICAgICAgIFN0c2NDb21wbGV4VHlwZVJlc29sdmVyLmJ1aWxkQ29udGVudFByb3BlcnR5TW9kZWxCeVFOYW1lKAotICAgICAgICAgICAgICAgIGNvbnRlbnRNb2RlbCwgc0ltcGwgKTsKLQotICAgICAgICBTY2hlbWFUeXBlSW1wbCBiYXNlVHlwZSA9IHNJbXBsLmdldFN1YnN0aXR1dGlvbkdyb3VwKCkgPT0gbnVsbCA/Ci0gICAgICAgICAgICBCdWlsdGluU2NoZW1hVHlwZVN5c3RlbS5TVF9BTllfVFlQRSA6Ci0gICAgICAgICAgICBTdHNjU3RhdGUuZ2V0KCkuZmluZERvY3VtZW50VHlwZShzSW1wbC5nZXRTdWJzdGl0dXRpb25Hcm91cCgpLCAKLSAgICAgICAgICAgICAgICAgc0ltcGwuaXNDaGFtZWxlb24oKSA/IHNJbXBsLmdldFRhcmdldE5hbWVzcGFjZSgpIDogbnVsbCkKLSAgICAgICAgICAgIDsKLQotICAgICAgICBzSW1wbC5zZXRCYXNlVHlwZVJlZiggYmFzZVR5cGUuZ2V0UmVmKCkgKTsKLSAgICAgICAgc0ltcGwuc2V0QmFzZURlcHRoKCBiYXNlVHlwZS5nZXRCYXNlRGVwdGgoKSArIDEgKTsKLSAgICAgICAgc0ltcGwuc2V0RGVyaXZhdGlvblR5cGUoIFNjaGVtYVR5cGUuRFRfUkVTVFJJQ1RJT04gKTsKLSAgICAgICAgc0ltcGwuc2V0Q29tcGxleFR5cGVWYXJpZXR5KCBTY2hlbWFUeXBlLkVMRU1FTlRfQ09OVEVOVCApOwotCi0gICAgICAgIHNJbXBsLnNldENvbnRlbnRNb2RlbCgKLSAgICAgICAgICAgIGNvbnRlbnRNb2RlbCwgbmV3IFNjaGVtYUF0dHJpYnV0ZU1vZGVsSW1wbCgpLAotICAgICAgICAgICAgZWxlbWVudFByb3BlcnR5TW9kZWwsIENvbGxlY3Rpb25zLkVNUFRZX01BUCwgZmFsc2UgKTsKLSAgICAgICAgCi0gICAgICAgIHNJbXBsLnNldFdpbGRjYXJkU3VtbWFyeSgKLSAgICAgICAgICAgIFFOYW1lU2V0LkVNUFRZLCBmYWxzZSwgUU5hbWVTZXQuRU1QVFksIGZhbHNlICk7Ci0KLSAgICAgICAgc0ltcGwuc2V0QW5vbnltb3VzVHlwZVJlZnMoIG1ha2VSZWZBcnJheSggYW5vblR5cGVzICkgKTsKLQotCi0KLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHJlc29sdmVBdHRyaWJ1dGVUeXBlICggU2NoZW1hVHlwZUltcGwgc0ltcGwgKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IHNJbXBsLmlzUmVzb2x2aW5nKCk7Ci0KLSAgICAgICAgYXNzZXJ0IHNJbXBsLmlzQXR0cmlidXRlVHlwZSgpOwotICAgICAgICAKLSAgICAgICAgTGlzdCBhbm9uVHlwZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICAgICAgU2NoZW1hR2xvYmFsQXR0cmlidXRlSW1wbCBhdHRyaWJ1dGUgPQotICAgICAgICAgICAgKFNjaGVtYUdsb2JhbEF0dHJpYnV0ZUltcGwpIFN0c2NUcmFuc2xhdG9yLnRyYW5zbGF0ZUF0dHJpYnV0ZSgKLSAgICAgICAgICAgICAgICAoQXR0cmlidXRlKSBzSW1wbC5nZXRQYXJzZU9iamVjdCgpLCBzSW1wbC5nZXRUYXJnZXROYW1lc3BhY2UoKSwKLSAgICAgICAgICAgICAgICBzSW1wbC5pc0NoYW1lbGVvbigpLCBhbm9uVHlwZXMsIHNJbXBsLCBudWxsLCBmYWxzZSApOwotCi0gICAgICAgIFNjaGVtYUF0dHJpYnV0ZU1vZGVsSW1wbCBhdHRyaWJ1dGVNb2RlbCA9IG5ldyBTY2hlbWFBdHRyaWJ1dGVNb2RlbEltcGwoKTsKLQotICAgICAgICBpZiAoYXR0cmlidXRlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0c2NTdGF0ZS5nZXQoKS5hZGRHbG9iYWxBdHRyaWJ1dGUoIGF0dHJpYnV0ZSApOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBTY2hlbWFMb2NhbEF0dHJpYnV0ZUltcGwgYXR0cmlidXRlQ29weSA9IG5ldyBTY2hlbWFMb2NhbEF0dHJpYnV0ZUltcGwoKTsKLSAgICAgICAgICAgIFN0c2NUcmFuc2xhdG9yLmNvcHlHbG9iYWxBdHRyaWJ1dGVUb0xvY2FsQXR0cmlidXRlKCBhdHRyaWJ1dGUsIGF0dHJpYnV0ZUNvcHkgKTsKLSAgICAgICAgICAgIGF0dHJpYnV0ZU1vZGVsLmFkZEF0dHJpYnV0ZSggYXR0cmlidXRlQ29weSApOwotICAgICAgICB9Ci0KLSAgICAgICAgc0ltcGwuc2V0QmFzZVR5cGVSZWYoIEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLlNUX0FOWV9UWVBFLmdldFJlZigpICk7Ci0gICAgICAgIHNJbXBsLnNldEJhc2VEZXB0aCggc0ltcGwuZ2V0QmFzZURlcHRoKCkgKyAxICk7Ci0gICAgICAgIHNJbXBsLnNldERlcml2YXRpb25UeXBlKCBTY2hlbWFUeXBlLkRUX1JFU1RSSUNUSU9OICk7Ci0gICAgICAgIHNJbXBsLnNldENvbXBsZXhUeXBlVmFyaWV0eSggU2NoZW1hVHlwZS5FTVBUWV9DT05URU5UICk7Ci0gICAgICAgIAotICAgICAgICBNYXAgYXR0cmlidXRlUHJvcGVydHlNb2RlbCA9Ci0gICAgICAgICAgICBTdHNjQ29tcGxleFR5cGVSZXNvbHZlci5idWlsZEF0dHJpYnV0ZVByb3BlcnR5TW9kZWxCeVFOYW1lKAotICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU1vZGVsLCBzSW1wbCApOwotCi0gICAgICAgIHNJbXBsLnNldENvbnRlbnRNb2RlbCgKLSAgICAgICAgICAgIG51bGwsIGF0dHJpYnV0ZU1vZGVsLCBDb2xsZWN0aW9ucy5FTVBUWV9NQVAsIGF0dHJpYnV0ZVByb3BlcnR5TW9kZWwsIGZhbHNlICk7Ci0KLSAgICAgICAgc0ltcGwuc2V0V2lsZGNhcmRTdW1tYXJ5KAotICAgICAgICAgICAgUU5hbWVTZXQuRU1QVFksIGZhbHNlLCBRTmFtZVNldC5FTVBUWSwgZmFsc2UgKTsKLSAgICAgICAgCi0gICAgICAgIHNJbXBsLnNldEFub255bW91c1R5cGVSZWZzKCBtYWtlUmVmQXJyYXkoIGFub25UeXBlcyApICk7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIFNjaGVtYVR5cGUuUmVmW10gbWFrZVJlZkFycmF5KENvbGxlY3Rpb24gdHlwZUxpc3QpCi0gICAgewotICAgICAgICBTY2hlbWFUeXBlLlJlZltdIHJlc3VsdCA9IG5ldyBTY2hlbWFUeXBlLlJlZlt0eXBlTGlzdC5zaXplKCldOwotICAgICAgICBpbnQgaiA9IDA7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IHR5cGVMaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyBqKyspCi0gICAgICAgICAgICByZXN1bHRbal0gPSAoKFNjaGVtYVR5cGUpaS5uZXh0KCkpLmdldFJlZigpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHJlc29sdmVJZGVudGl0eUNvbnN0cmFpbnRzKCkKLSAgICB7Ci0gICAgICAgIFN0c2NTdGF0ZSBzdGF0ZSA9IFN0c2NTdGF0ZS5nZXQoKTsKLSAgICAgICAgU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50SW1wbFtdIGlkY3MgPSBzdGF0ZS5pZENvbnN0cmFpbnRzKCk7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgaWRjcy5sZW5ndGggOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghaWRjc1tpXS5pc1Jlc29sdmVkKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgS2V5cmVmIHhzZGtyID0gKEtleXJlZilpZGNzW2ldLmdldFBhcnNlT2JqZWN0KCk7Ci0gICAgICAgICAgICAgICAgUU5hbWUga2V5TmFtZSA9IHhzZGtyLmdldFJlZmVyKCk7Ci0gICAgICAgICAgICAgICAgU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50SW1wbCBrZXkgPSBudWxsOwotCi0gICAgICAgICAgICAgICAga2V5ID0gc3RhdGUuZmluZElkQ29uc3RyYWludChrZXlOYW1lLCBpZGNzW2ldLmdldENoYW1lbGVvbk5hbWVzcGFjZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoa2V5ID09IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5ub3RGb3VuZEVycm9yKGtleU5hbWUsIFhtbEVycm9yQ29udGV4dC5JRENfTk9UX0ZPVU5ELCB4c2Rrcik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LmdldENvbnN0cmFpbnRDYXRlZ29yeSgpID09IFNjaGVtYUlkZW50aXR5Q29uc3RyYWludEltcGwuQ0NfS0VZUkVGKQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIktleXJlZiBjYW5ub3QgcmVmZXIgdG8gYW5vdGhlciBrZXlyZWYuIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1sRXJyb3JDb250ZXh0LklEQ19OT1RfRk9VTkQsIGlkY3NbaV0uZ2V0UGFyc2VPYmplY3QoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5nZXRGaWVsZHMoKS5sZW5ndGggIT0gaWRjc1tpXS5nZXRGaWVsZHMoKS5sZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvcigiS2V5cmVmIGRvZXMgbm90IGhhdmUgc2FtZSBudW1iZXIgb2YgZmllbGRzIGFzIGtleSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWG1sRXJyb3JDb250ZXh0LklEQ19OT1RfRk9VTkQsIGlkY3NbaV0uZ2V0UGFyc2VPYmplY3QoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWRjc1tpXS5zZXRSZWZlcmVuY2VkS2V5KGtleS5nZXRSZWYoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TdHNjU2ltcGxlVHlwZVJlc29sdmVyLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TdHNjU2ltcGxlVHlwZVJlc29sdmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMDFjMTkuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU3RzY1NpbXBsZVR5cGVSZXNvbHZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE0MSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zY2hlbWE7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5YbWxWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnJlZ2V4LlJlZ3VsYXJFeHByZXNzaW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uUU5hbWVIZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5YbWxFcnJvckNvbnRleHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxJbnRlZ2VyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TaW1wbGVWYWx1ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJ5dGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxTaG9ydDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFVuc2lnbmVkQnl0ZTsKLWltcG9ydCBvcmcudzMueDIwMDEueG1sU2NoZW1hLio7Ci0KLXB1YmxpYyBjbGFzcyBTdHNjU2ltcGxlVHlwZVJlc29sdmVyCi17Ci0KLSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAgKiBTSU1QTEUgVFlQRSBSRVNPTFVUSU9OIEhFUkUKLSAgICAgKgotICAgICAqIFNpbXBsZSB0eXBlcyBjYW4gYmUgZGVjbGFyZWQgYXMgbGlzdHMsIHVuaW9ucywgb3IgcmVzdHJpY3Rpb25zLgotICAgICAqIFRoZXNlIHRocmVlIGNhc2VzIGFyZSB0cmVhdGVkIHNlcGFyYXRlbHkgaW4gcmVzb2x2ZUxpc3RUeXBlLAotICAgICAqIHJlc29sdmVVbmlvblR5cGUsIGFuZCByZXNvbHZlU2ltcGxlUmVzdHJpY3Rpb25UeXBlLgotICAgICAqCi0gICAgICogVGhlIGludHJpY2F0ZSB3b3JrIHdpdGggZmFjZXRzIGlzIGRvbmUgaW4gdGhlIHJlc3RyaWN0aW9uIGNhc2UsCi0gICAgICogdXNpbmcgbWV0aG9kIGNhbGxlZCByZXNvbHZlRmFjZXRzICh0aGUgdW5pb24gYW5kIGxpc3QgY2FzZXMgaGF2ZQotICAgICAqIHRyaXZpYWwgZmFjZXQgcnVsZXMpLiBUaGVuIGFsbCBzaW1wbGUgdHlwZXMgY2FsbCByZXNvbHZlUHJvcGVydGllcwotICAgICAqIGluIHRoZSBlbmQgdG8gaGF2ZSB0aGVpciAiZnVuZGFtZW50YWwgZmFjZXRzIiByZXNvbHZlZC4KLSAgICAgKi8KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCByZXNvbHZlU2ltcGxlVHlwZShTY2hlbWFUeXBlSW1wbCBzSW1wbCkKLSAgICB7Ci0gICAgICAgIFNpbXBsZVR5cGUgcGFyc2VTdCA9IChTaW1wbGVUeXBlKXNJbXBsLmdldFBhcnNlT2JqZWN0KCk7Ci0gICAgICAgIAotICAgICAgICBhc3NlcnQgc0ltcGwuaXNTaW1wbGVUeXBlKCk7Ci0KLSAgICAgICAgLy8gVmVyaWZ5OiBoYXZlIGxpc3QsIHVuaW9uLCBvciByZXN0cmljdGlvbiwgYnV0IG5vdCBtb3JlIHRoYW4gb25lCi0gICAgICAgIGludCBjb3VudCA9Ci0gICAgICAgICAgICAgICAgKHBhcnNlU3QuaXNTZXRMaXN0KCkgPyAxIDogMCkgKwotICAgICAgICAgICAgICAgIChwYXJzZVN0LmlzU2V0VW5pb24oKSA/IDEgOiAwKSArCi0gICAgICAgICAgICAgICAgKHBhcnNlU3QuaXNTZXRSZXN0cmljdGlvbigpID8gMSA6IDApOwotICAgICAgICBpZiAoY291bnQgPiAxKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHNjU3RhdGUuZ2V0KCkuZXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICJBIHNpbXBsZSB0eXBlIG11c3QgZGVmaW5lIGVpdGhlciBhIGxpc3QsIGEgdW5pb24sIG9yIGEgcmVzdHJpY3Rpb246IG1vcmUgdGhhbiBvbmUgZm91bmQuIiwKLSAgICAgICAgICAgICAgICAgICAgWG1sRXJyb3JDb250ZXh0Lk1BTEZPUk1FRF9TSU1QTEVfVFlQRV9ERUZOLAotICAgICAgICAgICAgICAgICAgICBwYXJzZVN0KTsKLSAgICAgICAgICAgIC8vIHJlY292ZXJ5OiB0cmVhdCBpdCBhcyB0aGUgZmlyc3Qgb2YgbGlzdCwgdW5pb24sIHJlc3RyCi0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoY291bnQgPCAxKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHNjU3RhdGUuZ2V0KCkuZXJyb3IoIkEgc2ltcGxlIHR5cGUgbXVzdCBkZWZpbmUgZWl0aGVyIGEgbGlzdCwgYSB1bmlvbiwgb3IgYSByZXN0cmljdGlvbjogbm9uZSB3YXMgZm91bmQuIiwKLSAgICAgICAgICAgICAgICAgICAgWG1sRXJyb3JDb250ZXh0Lk1BTEZPUk1FRF9TSU1QTEVfVFlQRV9ERUZOLAotICAgICAgICAgICAgICAgICAgICBwYXJzZVN0KTsKLSAgICAgICAgICAgIC8vIHJlY292ZXJ5OiB0cmVhdCBpdCBhcyByZXN0cmljdGlvbiBvZiBhbnlTaW1wbGVUeXBlCi0gICAgICAgICAgICByZXNvbHZlRXJyb3JTaW1wbGVUeXBlKHNJbXBsKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNldCBmaW5hbCBmbGFncwotICAgICAgICBib29sZWFuIGZpbmFsUmVzdCA9IGZhbHNlOwotICAgICAgICBib29sZWFuIGZpbmFsTGlzdCA9IGZhbHNlOwotICAgICAgICBib29sZWFuIGZpbmFsVW5pb24gPSBmYWxzZTsKLQotICAgICAgICBpZiAocGFyc2VTdC5pc1NldEZpbmFsKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHBhcnNlU3QuZ2V0RmluYWwoKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5lcXVhbHMoIiNhbGwiKSkKLSAgICAgICAgICAgICAgICBmaW5hbFJlc3QgPSBmaW5hbExpc3QgPSBmaW5hbFVuaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmVxdWFscygicmVzdHJpY3Rpb24iKSkKLSAgICAgICAgICAgICAgICBmaW5hbFJlc3QgPSB0cnVlOwotICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuZXF1YWxzKCJsaXN0IikpCi0gICAgICAgICAgICAgICAgZmluYWxMaXN0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLmVxdWFscygidW5pb24iKSkKLSAgICAgICAgICAgICAgICBmaW5hbFVuaW9uID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBzSW1wbC5zZXRTaW1wbGVGaW5hbChmaW5hbFJlc3QsIGZpbmFsTGlzdCwgZmluYWxVbmlvbik7Ci0KLSAgICAgICAgTGlzdCBhbm9uVHlwZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICAgICAgaWYgKHBhcnNlU3QuZ2V0TGlzdCgpICE9IG51bGwpCi0gICAgICAgICAgICByZXNvbHZlTGlzdFR5cGUoc0ltcGwsIHBhcnNlU3QuZ2V0TGlzdCgpLCBhbm9uVHlwZXMpOwotICAgICAgICBlbHNlIGlmIChwYXJzZVN0LmdldFVuaW9uKCkgIT0gbnVsbCkKLSAgICAgICAgICAgIHJlc29sdmVVbmlvblR5cGUoc0ltcGwsIHBhcnNlU3QuZ2V0VW5pb24oKSwgYW5vblR5cGVzKTsKLSAgICAgICAgZWxzZSBpZiAocGFyc2VTdC5nZXRSZXN0cmljdGlvbigpICE9IG51bGwpCi0gICAgICAgICAgICByZXNvbHZlU2ltcGxlUmVzdHJpY3Rpb25UeXBlKHNJbXBsLCBwYXJzZVN0LmdldFJlc3RyaWN0aW9uKCksIGFub25UeXBlcyk7Ci0KLSAgICAgICAgc0ltcGwuc2V0QW5vbnltb3VzVHlwZVJlZnMobWFrZVJlZkFycmF5KGFub25UeXBlcykpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFNjaGVtYVR5cGUuUmVmW10gbWFrZVJlZkFycmF5KENvbGxlY3Rpb24gdHlwZUxpc3QpCi0gICAgewotICAgICAgICBTY2hlbWFUeXBlLlJlZltdIHJlc3VsdCA9IG5ldyBTY2hlbWFUeXBlLlJlZlt0eXBlTGlzdC5zaXplKCldOwotICAgICAgICBpbnQgaiA9IDA7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IHR5cGVMaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyBqKyspCi0gICAgICAgICAgICByZXN1bHRbal0gPSAoKFNjaGVtYVR5cGUpaS5uZXh0KCkpLmdldFJlZigpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHJlc29sdmVFcnJvclNpbXBsZVR5cGUoU2NoZW1hVHlwZUltcGwgc0ltcGwpCi0gICAgewotICAgICAgICBzSW1wbC5zZXRTaW1wbGVUeXBlVmFyaWV0eShTY2hlbWFUeXBlLkFUT01JQyk7Ci0gICAgICAgIHNJbXBsLnNldEJhc2VUeXBlUmVmKEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLlNUX0FOWV9TSU1QTEUuZ2V0UmVmKCkpOwotICAgICAgICBzSW1wbC5zZXRCYXNlRGVwdGgoQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfQU5ZX1NJTVBMRS5nZXRCYXNlRGVwdGgoKSArIDEpOwotICAgICAgICBzSW1wbC5zZXRQcmltaXRpdmVUeXBlUmVmKEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLlNUX0FOWV9TSU1QTEUuZ2V0UmVmKCkpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHJlc29sdmVMaXN0VHlwZShTY2hlbWFUeXBlSW1wbCBzSW1wbCwgb3JnLnczLngyMDAxLnhtbFNjaGVtYS5MaXN0RG9jdW1lbnQuTGlzdCBwYXJzZUxpc3QsIExpc3QgYW5vblR5cGVzKQotICAgIHsKLSAgICAgICAgU3RzY1N0YXRlIHN0YXRlID0gU3RzY1N0YXRlLmdldCgpOwotCi0gICAgICAgIHNJbXBsLnNldFNpbXBsZVR5cGVWYXJpZXR5KFNjaGVtYVR5cGUuTElTVCk7Ci0gICAgICAgIHNJbXBsLnNldEJhc2VUeXBlUmVmKEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLlNUX0FOWV9TSU1QTEUuZ2V0UmVmKCkpOwotICAgICAgICBzSW1wbC5zZXRCYXNlRGVwdGgoQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfQU5ZX1NJTVBMRS5nZXRCYXNlRGVwdGgoKSArIDEpOwotICAgICAgICBzSW1wbC5zZXREZXJpdmF0aW9uVHlwZShTY2hlbWFUeXBlLkRUX1JFU1RSSUNUSU9OKTsKLQotICAgICAgICBpZiAoc0ltcGwuaXNSZWRlZmluaXRpb24oKSkKLSAgICAgICAgewotICAgICAgICAgICAgU3RzY1N0YXRlLmdldCgpLmVycm9yKCJBIHR5cGUgcmVkZWZpbml0aW9uIG11c3QgcmVzdHJpY3QgdGhlIG9yaWdpbmFsIGRlZmluaXRpb24gb2YgdGhlIHR5cGUuIiwgWG1sRXJyb3JDb250ZXh0LkdFTkVSSUNfRVJST1IsIHBhcnNlTGlzdCk7Ci0gICAgICAgICAgICAvLyByZWNvdmVyeTogb2ggd2VsbC4KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUU5hbWUgaXRlbU5hbWUgPSBwYXJzZUxpc3QuZ2V0SXRlbVR5cGUoKTsKLSAgICAgICAgTG9jYWxTaW1wbGVUeXBlIHBhcnNlSW5uZXIgPSBwYXJzZUxpc3QuZ2V0U2ltcGxlVHlwZSgpOwotCi0gICAgICAgIGlmIChpdGVtTmFtZSAhPSBudWxsICYmIHBhcnNlSW5uZXIgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkxpc3QgdHlwZSBkZWZpbml0aW9ucyBwcm92aWRlIGVpdGhlciBhbiBpdGVtVHlwZSBhdHRyaWJ1dGUgIiArCi0gICAgICAgICAgICAgICAgICAgICJvciBjb250YWluIGEgbmVzdGVkIHNpbXBsZVR5cGU6IGJvdGggd2VyZSBmb3VuZC4iLAotICAgICAgICAgICAgICAgICAgICBYbWxFcnJvckNvbnRleHQuUkVEVU5EQU5UX05FU1RFRF9UWVBFLAotICAgICAgICAgICAgICAgICAgICBwYXJzZUxpc3QpOwotICAgICAgICAgICAgLy8gcmVjb3Zlcnk6IGlnbm9yZSB0aGUgaW5uZXIgc2ltcGxlIHR5cGUuCi0gICAgICAgICAgICBwYXJzZUlubmVyID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIFNjaGVtYVR5cGVJbXBsIGl0ZW1JbXBsOwotICAgICAgICBYbWxPYmplY3QgZXJyb3JMb2M7Ci0KLSAgICAgICAgaWYgKGl0ZW1OYW1lICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGl0ZW1JbXBsID0gc3RhdGUuZmluZEdsb2JhbFR5cGUoaXRlbU5hbWUsIHNJbXBsLmdldENoYW1lbGVvbk5hbWVzcGFjZSgpKTsKLSAgICAgICAgICAgIGVycm9yTG9jID0gcGFyc2VMaXN0LnhnZXRJdGVtVHlwZSgpOwotICAgICAgICAgICAgaWYgKGl0ZW1JbXBsID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3RhdGUubm90Rm91bmRFcnJvcihpdGVtTmFtZSwgWG1sRXJyb3JDb250ZXh0LlRZUEVfTk9UX0ZPVU5ELCBwYXJzZUxpc3QueGdldEl0ZW1UeXBlKCkpOwotICAgICAgICAgICAgICAgIC8vIHJlY292ZXJ5OiB0cmVhdCBpdCBhcyBhIGxpc3Qgb2YgYW55U2ltcGxlVHlwZQotICAgICAgICAgICAgICAgIGl0ZW1JbXBsID0gQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfQU5ZX1NJTVBMRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChwYXJzZUlubmVyICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGl0ZW1JbXBsID0gbmV3IFNjaGVtYVR5cGVJbXBsKHN0YXRlLnN0cygpKTsKLSAgICAgICAgICAgIGVycm9yTG9jID0gcGFyc2VJbm5lcjsKLSAgICAgICAgICAgIGl0ZW1JbXBsLnNldFNpbXBsZVR5cGUodHJ1ZSk7Ci0gICAgICAgICAgICBpdGVtSW1wbC5zZXRQYXJzZUNvbnRleHQocGFyc2VJbm5lciwgc0ltcGwuZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIHNJbXBsLmdldENoYW1lbGVvbk5hbWVzcGFjZSgpICE9IG51bGwsIGZhbHNlKTsKLSAgICAgICAgICAgIGl0ZW1JbXBsLnNldE91dGVyU2NoZW1hVHlwZVJlZihzSW1wbC5nZXRSZWYoKSk7Ci0gICAgICAgICAgICBhbm9uVHlwZXMuYWRkKGl0ZW1JbXBsKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0YXRlLmVycm9yKCJMaXN0IHR5cGUgZGVmaW5pdGlvbnMgcHJvdmlkZSBlaXRoZXIgYW4gaXRlbVR5cGUgYXR0cmlidXRlICIgKwotICAgICAgICAgICAgICAgICAgICAib3IgY29udGFpbiBhIG5lc3RlZCBzaW1wbGVUeXBlOiBuZWl0aGVyIHdhcyBmb3VuZC4iLAotICAgICAgICAgICAgICAgICAgICBYbWxFcnJvckNvbnRleHQuTElTVF9NSVNTSU5HX0lURU0sCi0gICAgICAgICAgICAgICAgICAgIHBhcnNlTGlzdCk7Ci0gICAgICAgICAgICAvLyByZWNvdmVyeTogdHJlYXQgaXQgYXMgYW4gZXh0ZW5zaW9uIG9mIGFueVNpbXBsZVR5cGUKLSAgICAgICAgICAgIHJlc29sdmVFcnJvclNpbXBsZVR5cGUoc0ltcGwpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVmVyaWZ5IGZpbmFsIHJlc3RyaWN0aW9ucwotICAgICAgICBpZiAoaXRlbUltcGwuZmluYWxMaXN0KCkpCi0gICAgICAgICAgICBzdGF0ZS5lcnJvcigiQ2Fubm90IGRlcml2ZSBieSBsaXN0IGEgZmluYWwgdHlwZS4iLCBYbWxFcnJvckNvbnRleHQuQ0FOTk9UX0RFUklWRV9GSU5BTCwgcGFyc2VMaXN0KTsKLQotICAgICAgICAvLyBSZWN1cnNpb24uLi4KLSAgICAgICAgU3RzY1Jlc29sdmVyLnJlc29sdmVUeXBlKGl0ZW1JbXBsKTsKLQotICAgICAgICBpZiAoIWl0ZW1JbXBsLmlzU2ltcGxlVHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0ZS5lcnJvcigiSXRlbSB0eXBlIGZvciB0aGlzIGxpc3QgdHlwZSBpcyBub3Qgc2ltcGxlIiwKLSAgICAgICAgICAgICAgICAgICAgWG1sRXJyb3JDb250ZXh0LkxJU1RfSVRFTV9OT1RfU0lNUExFLCBlcnJvckxvYyk7Ci0gICAgICAgICAgICAvLyByZWNvdmVyeTogdHJlYXQgdGhlIGl0ZW0gdHlwZSBhcyBhbnlTaW1wbGVUeXBlCi0gICAgICAgICAgICBzSW1wbCA9IEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLlNUX0FOWV9TSU1QTEU7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGl0ZW1JbXBsLmdldFNpbXBsZVZhcmlldHkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkxJU1Q6Ci0gICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIlRoaXMgaXRlbSB0eXBlIGlzIGFub3RoZXIgbGlzdCB0eXBlOyBsaXN0cyBvZiBsaXN0cyBhcmUgbm90IGFsbG93ZWQuIiwgWG1sRXJyb3JDb250ZXh0LkxJU1RfT0ZfTElTVCwgZXJyb3JMb2MpOwotICAgICAgICAgICAgICAgIC8vIHJlY292ZXJ5OiB0cmVhdCB0aGUgbGlzdCBhcyBhbiBhbnlTaW1wbGVUeXBlCi0gICAgICAgICAgICAgICAgcmVzb2x2ZUVycm9yU2ltcGxlVHlwZShzSW1wbCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLlVOSU9OOgotICAgICAgICAgICAgICAgIGlmIChpdGVtSW1wbC5pc1VuaW9uT2ZMaXN0cygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIlRoaXMgaXRlbSB0eXBlIGlzIGEgdW5pb24gY29udGFpbmluZyBhIGxpc3Q7IGxpc3RzIG9mIGxpc3RzIGFyZSBub3QgYWxsb3dlZC4iLCBYbWxFcnJvckNvbnRleHQuTElTVF9PRl9MSVNULCBlcnJvckxvYyk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc29sdmVFcnJvclNpbXBsZVR5cGUoc0ltcGwpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIGZhbGx0aHJvdWdoOiBub25saXN0IHVuaW9ucyBhcmUganVzdCBsaWtlIGF0b21pYyBpdGVtcwotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkFUT01JQzoKLSAgICAgICAgICAgICAgICBzSW1wbC5zZXRMaXN0SXRlbVR5cGVSZWYoaXRlbUltcGwuZ2V0UmVmKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOwotICAgICAgICAgICAgICAgIHNJbXBsLnNldExpc3RJdGVtVHlwZVJlZihCdWlsdGluU2NoZW1hVHlwZVN5c3RlbS5TVF9BTllfU0lNUExFLmdldFJlZigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG5vdyBkZWFsIHdpdGggZmFjZXRzCi0gICAgICAgIHNJbXBsLnNldEJhc2ljRmFjZXRzKFN0c2NTdGF0ZS5GQUNFVFNfTElTVCwgU3RzY1N0YXRlLkZJWEVEX0ZBQ0VUU19MSVNUKTsKLSAgICAgICAgc0ltcGwuc2V0V2hpdGVTcGFjZVJ1bGUoIFNjaGVtYVR5cGUuV1NfQ09MTEFQU0UgKTsKLQotICAgICAgICAvLyBub3cgY29tcHV0ZSBvdXIgaW50cmluc2ljIHByb3BlcnRpZXMKLSAgICAgICAgcmVzb2x2ZUZ1bmRhbWVudGFsRmFjZXRzKHNJbXBsKTsKLSAgICB9Ci0KLQotCi0KLSAgICBzdGF0aWMgdm9pZCByZXNvbHZlVW5pb25UeXBlKFNjaGVtYVR5cGVJbXBsIHNJbXBsLCBVbmlvbkRvY3VtZW50LlVuaW9uIHBhcnNlVW5pb24sIExpc3QgYW5vblR5cGVzKQotICAgIHsKLSAgICAgICAgc0ltcGwuc2V0U2ltcGxlVHlwZVZhcmlldHkoU2NoZW1hVHlwZS5VTklPTik7Ci0gICAgICAgIHNJbXBsLnNldEJhc2VUeXBlUmVmKEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLlNUX0FOWV9TSU1QTEUuZ2V0UmVmKCkpOwotICAgICAgICBzSW1wbC5zZXRCYXNlRGVwdGgoQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfQU5ZX1NJTVBMRS5nZXRCYXNlRGVwdGgoKSArIDEpOwotICAgICAgICBzSW1wbC5zZXREZXJpdmF0aW9uVHlwZShTY2hlbWFUeXBlLkRUX1JFU1RSSUNUSU9OKTsKLQotICAgICAgICBTdHNjU3RhdGUgc3RhdGUgPSBTdHNjU3RhdGUuZ2V0KCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoc0ltcGwuaXNSZWRlZmluaXRpb24oKSkKLSAgICAgICAgewotICAgICAgICAgICAgU3RzY1N0YXRlLmdldCgpLmVycm9yKCJBIHR5cGUgcmVkZWZpbml0aW9uIG11c3QgcmVzdHJpY3QgdGhlIG9yaWdpbmFsIGRlZmluaXRpb24gb2YgdGhlIHR5cGUuIiwgWG1sRXJyb3JDb250ZXh0LkdFTkVSSUNfRVJST1IsIHBhcnNlVW5pb24pOwotICAgICAgICAgICAgLy8gcmVjb3Zlcnk6IG9oIHdlbGwuCi0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIExpc3QgbWVtYmVyVHlwZXMgPSBwYXJzZVVuaW9uLmdldE1lbWJlclR5cGVzKCk7Ci0gICAgICAgIFNpbXBsZVR5cGVbXSBzaW1wbGVUeXBlcyA9IHBhcnNlVW5pb24uZ2V0U2ltcGxlVHlwZUFycmF5KCk7Ci0KLSAgICAgICAgTGlzdCBtZW1iZXJJbXBsTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzaW1wbGVUeXBlcy5sZW5ndGggPT0gMCAmJiAobWVtYmVyVHlwZXMgPT0gbnVsbCB8fCBtZW1iZXJUeXBlcy5zaXplKCkgPT0gMCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0YXRlLmVycm9yKCJBIHVuaW9uIHR5cGUgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBtZW1iZXIgdHlwZSIsIFhtbEVycm9yQ29udGV4dC5VTklPTl9NRU1CRVJfTk9UX1NJTVBMRSwgcGFyc2VVbmlvbik7Ci0gICAgICAgICAgICAvLyByZWNvdmVyeTogb2ggd2VsbCwgemVybyBtZW1iZXIgdHlwZXMgaXMgZmluZS4KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtZW1iZXJUeXBlcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIG1OYW1lcyA9IG1lbWJlclR5cGVzLml0ZXJhdG9yKCk7IG1OYW1lcy5oYXNOZXh0KCk7ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBRTmFtZSBtTmFtZSA9IChRTmFtZSltTmFtZXMubmV4dCgpOwotICAgICAgICAgICAgICAgIFNjaGVtYVR5cGVJbXBsIG1lbWJlckltcGwgPSBzdGF0ZS5maW5kR2xvYmFsVHlwZShtTmFtZSwgc0ltcGwuZ2V0Q2hhbWVsZW9uTmFtZXNwYWNlKCkpOwotICAgICAgICAgICAgICAgIGlmIChtZW1iZXJJbXBsID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIC8vIHJlY292ZXJ5OiBza2lwIG1lbWJlcgotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5ub3RGb3VuZEVycm9yKG1OYW1lLCBYbWxFcnJvckNvbnRleHQuVFlQRV9OT1RfRk9VTkQsIHBhcnNlVW5pb24ueGdldE1lbWJlclR5cGVzKCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbWVtYmVySW1wbExpc3QuYWRkKG1lbWJlckltcGwpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaW1wbGVUeXBlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgLy8gQlVHQlVHOiBzZWUgaWYgbm9uPHNpbXBsZVR5cGU+IGNoaWxkcmVuIGNhbiBsZWFrIHRocm91Z2gKLSAgICAgICAgICAgIFNjaGVtYVR5cGVJbXBsIG1JbXBsID0gbmV3IFNjaGVtYVR5cGVJbXBsKHN0YXRlLnN0cygpKTsKLSAgICAgICAgICAgIG1JbXBsLnNldFNpbXBsZVR5cGUodHJ1ZSk7Ci0gICAgICAgICAgICBtSW1wbC5zZXRQYXJzZUNvbnRleHQoc2ltcGxlVHlwZXNbaV0sIHNJbXBsLmdldFRhcmdldE5hbWVzcGFjZSgpLCBzSW1wbC5nZXRDaGFtZWxlb25OYW1lc3BhY2UoKSAhPSBudWxsLCBmYWxzZSk7Ci0gICAgICAgICAgICBtZW1iZXJJbXBsTGlzdC5hZGQobUltcGwpOwotICAgICAgICAgICAgbUltcGwuc2V0T3V0ZXJTY2hlbWFUeXBlUmVmKHNJbXBsLmdldFJlZigpKTsKLSAgICAgICAgICAgIG1JbXBsLnNldEFub255bW91c1VuaW9uTWVtYmVyT3JkaW5hbChpICsgMSk7Ci0gICAgICAgICAgICBhbm9uVHlwZXMuYWRkKG1JbXBsKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJlY3Vyc2UgYW5kIHJlc29sdmUgYWxsIG1lbWJlciB0eXBlcwotICAgICAgICBmb3IgKEl0ZXJhdG9yIG1JbXBscyA9IG1lbWJlckltcGxMaXN0Lml0ZXJhdG9yKCk7IG1JbXBscy5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgU2NoZW1hVHlwZUltcGwgbUltcGwgPSAoU2NoZW1hVHlwZUltcGwpbUltcGxzLm5leHQoKTsKLSAgICAgICAgICAgIGlmICghU3RzY1Jlc29sdmVyLnJlc29sdmVUeXBlKG1JbXBsKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobUltcGwuZ2V0T3V0ZXJUeXBlKCkuZXF1YWxzKHNJbXBsKSkKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIk1lbWJlciBoYXMgYSBjeWNsaWMgZGVwZW5kZW5jeSBvbiB0aGUgY29udGFpbmluZyB1bmlvbiIsICBYbWxFcnJvckNvbnRleHQuQ1lDTElDX0RFUEVOREVOQ1ksIG1JbXBsLmdldFBhcnNlT2JqZWN0KCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIk1lbWJlciAiICsgUU5hbWVIZWxwZXIucHJldHR5KG1JbXBsLmdldE5hbWUoKSkgKyAiIGhhcyBhIGN5Y2xpYyBkZXBlbmRlbmN5IG9uIHRoZSB1bmlvbiIsIFhtbEVycm9yQ29udGV4dC5DWUNMSUNfREVQRU5ERU5DWSwgcGFyc2VVbmlvbi54Z2V0TWVtYmVyVHlwZXMoKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyByZWNvdmVyeTogaWdub3JlIHRoZSBlcnJhbnQgdW5pb24gbWVtYmVyCi0gICAgICAgICAgICAgICAgbUltcGxzLnJlbW92ZSgpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTm93IHZlcmlmeSBtZW1iZXJzCi0gICAgICAgIGJvb2xlYW4gaXNVbmlvbk9mTGlzdHMgPSBmYWxzZTsKLQotICAgICAgICBmb3IgKEl0ZXJhdG9yIG1JbXBscyA9IG1lbWJlckltcGxMaXN0Lml0ZXJhdG9yKCk7IG1JbXBscy5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgU2NoZW1hVHlwZUltcGwgbUltcGwgPSAoU2NoZW1hVHlwZUltcGwpbUltcGxzLm5leHQoKTsKLQotICAgICAgICAgICAgaWYgKCFtSW1wbC5pc1NpbXBsZVR5cGUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobUltcGwuZ2V0T3V0ZXJUeXBlKCkgIT0gbnVsbCAmJiBtSW1wbC5nZXRPdXRlclR5cGUoKS5lcXVhbHMoc0ltcGwpKQotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvcigiTWVtYmVyIGlzIG5vdCBzaW1wbGUiLCBYbWxFcnJvckNvbnRleHQuVU5JT05fTUVNQkVSX05PVF9TSU1QTEUsIG1JbXBsLmdldFBhcnNlT2JqZWN0KCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIk1lbWJlciAiICsgUU5hbWVIZWxwZXIucHJldHR5KG1JbXBsLmdldE5hbWUoKSkgKyAiIGlzIG5vdCBzaW1wbGUiLCBYbWxFcnJvckNvbnRleHQuVU5JT05fTUVNQkVSX05PVF9TSU1QTEUsIHBhcnNlVW5pb24ueGdldE1lbWJlclR5cGVzKCkpOwotCi0gICAgICAgICAgICAgICAgLy8gcmVjb3Zlcnk6IGlnbm9yZSB0aGUgZXJyYW50IHVuaW9uIG1lbWJlcgotICAgICAgICAgICAgICAgIG1JbXBscy5yZW1vdmUoKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1JbXBsLmdldFNpbXBsZVZhcmlldHkoKSA9PSBTY2hlbWFUeXBlLkxJU1QgfHwKLSAgICAgICAgICAgICAgICBtSW1wbC5nZXRTaW1wbGVWYXJpZXR5KCkgPT0gU2NoZW1hVHlwZS5VTklPTiAmJiBtSW1wbC5pc1VuaW9uT2ZMaXN0cygpKQotICAgICAgICAgICAgICAgIGlzVW5pb25PZkxpc3RzID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFZlcmlmeSBhbnkgZmluYWwgcmVzdHJpY3Rpb25zCi0gICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IG1lbWJlckltcGxMaXN0LnNpemUoKSA7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgU2NoZW1hVHlwZUltcGwgbUltcGwgPSAoU2NoZW1hVHlwZUltcGwpbWVtYmVySW1wbExpc3QuZ2V0KGkpOwotICAgICAgICAgICAgaWYgKG1JbXBsLmZpbmFsVW5pb24oKSkKLSAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvcigiQ2Fubm90IGRlcml2ZSBieSB1bmlvbiBhIGZpbmFsIHR5cGUuIiwgWG1sRXJyb3JDb250ZXh0LkNBTk5PVF9ERVJJVkVfRklOQUwsIHBhcnNlVW5pb24pOwotICAgICAgICB9Ci0KLSAgICAgICAgc0ltcGwuc2V0VW5pb25PZkxpc3RzKGlzVW5pb25PZkxpc3RzKTsKLQotICAgICAgICBzSW1wbC5zZXRVbmlvbk1lbWJlclR5cGVSZWZzKG1ha2VSZWZBcnJheShtZW1iZXJJbXBsTGlzdCkpOwotCi0gICAgICAgIC8vIG5vdyBkZWFsIHdpdGggZmFjZXRzCi0gICAgICAgIHNJbXBsLnNldEJhc2ljRmFjZXRzKFN0c2NTdGF0ZS5GQUNFVFNfVU5JT04sIFN0c2NTdGF0ZS5GSVhFRF9GQUNFVFNfVU5JT04pOwotCi0gICAgICAgIC8vIG5vdyBjb21wdXRlIG91ciBpbnRyaW5zaWMgcHJvcGVydGllcwotICAgICAgICByZXNvbHZlRnVuZGFtZW50YWxGYWNldHMoc0ltcGwpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHJlc29sdmVTaW1wbGVSZXN0cmljdGlvblR5cGUoU2NoZW1hVHlwZUltcGwgc0ltcGwsIFJlc3RyaWN0aW9uRG9jdW1lbnQuUmVzdHJpY3Rpb24gcGFyc2VSZXN0ciwgTGlzdCBhbm9uVHlwZXMpCi0gICAgewotICAgICAgICBRTmFtZSBiYXNlTmFtZSA9IHBhcnNlUmVzdHIuZ2V0QmFzZSgpOwotICAgICAgICBTaW1wbGVUeXBlIHBhcnNlSW5uZXIgPSBwYXJzZVJlc3RyLmdldFNpbXBsZVR5cGUoKTsKLSAgICAgICAgU3RzY1N0YXRlIHN0YXRlID0gU3RzY1N0YXRlLmdldCgpOwotCi0gICAgICAgIGlmIChiYXNlTmFtZSAhPSBudWxsICYmIHBhcnNlSW5uZXIgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgc3RhdGUuZXJyb3IoIlNpbXBsZSB0eXBlIHJlc3RyaWN0aW9ucyBtdXN0IG5hbWUgYSBiYXNlIHR5cGUgIiArCi0gICAgICAgICAgICAgICAgICAgICJvciBjb250YWluIGEgbmVzdGVkIHNpbXBsZSB0eXBlOiBib3RoIHdlcmUgZm91bmQuIiwKLSAgICAgICAgICAgICAgICAgICAgWG1sRXJyb3JDb250ZXh0LlJFU1RSSUNUSU9OX1JFRFVOREFOVF9CQVNFLAotICAgICAgICAgICAgICAgICAgICBwYXJzZVJlc3RyKTsKLSAgICAgICAgICAgIC8vIHJlY292ZXJ5OiBpZ25vcmUgdGhlIGlubmVyIHNpbXBsZSB0eXBlLgotICAgICAgICAgICAgcGFyc2VJbm5lciA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBTY2hlbWFUeXBlSW1wbCBiYXNlSW1wbDsKLQotICAgICAgICBpZiAoYmFzZU5hbWUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHNJbXBsLmlzUmVkZWZpbml0aW9uKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYmFzZUltcGwgPSBzdGF0ZS5maW5kUmVkZWZpbmVkR2xvYmFsVHlwZShwYXJzZVJlc3RyLmdldEJhc2UoKSwgc0ltcGwuZ2V0Q2hhbWVsZW9uTmFtZXNwYWNlKCksIHNJbXBsLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGJhc2VJbXBsICE9IG51bGwgJiYgIWJhc2VJbXBsLmdldE5hbWUoKS5lcXVhbHMoc0ltcGwuZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkEgdHlwZSByZWRlZmluaXRpb24gbXVzdCByZXN0cmljdCB0aGUgb3JpZ2luYWwgdHlwZSBkZWZpbml0aW9uIiwgWG1sRXJyb3JDb250ZXh0LkdFTkVSSUNfRVJST1IsIHBhcnNlUmVzdHIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJhc2VJbXBsID0gc3RhdGUuZmluZEdsb2JhbFR5cGUoYmFzZU5hbWUsIHNJbXBsLmdldENoYW1lbGVvbk5hbWVzcGFjZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChiYXNlSW1wbCA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN0YXRlLm5vdEZvdW5kRXJyb3IoYmFzZU5hbWUsIFhtbEVycm9yQ29udGV4dC5UWVBFX05PVF9GT1VORCwgcGFyc2VSZXN0ci54Z2V0QmFzZSgpKTsKLSAgICAgICAgICAgICAgICAvLyByZWNvdmVyeTogdHJlYXQgaXQgYXMgYW4gZXh0ZW5zaW9uIG9mIGFueVNpbXBsZVR5cGUKLSAgICAgICAgICAgICAgICBiYXNlSW1wbCA9IEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLlNUX0FOWV9TSU1QTEU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAocGFyc2VJbm5lciAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoc0ltcGwuaXNSZWRlZmluaXRpb24oKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHNjU3RhdGUuZ2V0KCkuZXJyb3IoIkEgdHlwZSByZWRlZmluaXRpb24gbXVzdCByZXN0cmljdCB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbiBvZiB0aGUgdHlwZS4iLCBYbWxFcnJvckNvbnRleHQuR0VORVJJQ19FUlJPUiwgcGFyc2VJbm5lcik7Ci0gICAgICAgICAgICAgICAgLy8gcmVjb3Zlcnk6IG9oIHdlbGwuCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJhc2VJbXBsID0gbmV3IFNjaGVtYVR5cGVJbXBsKHN0YXRlLnN0cygpKTsKLSAgICAgICAgICAgIGJhc2VJbXBsLnNldFNpbXBsZVR5cGUodHJ1ZSk7Ci0gICAgICAgICAgICBiYXNlSW1wbC5zZXRQYXJzZUNvbnRleHQocGFyc2VJbm5lciwgc0ltcGwuZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIHNJbXBsLmdldENoYW1lbGVvbk5hbWVzcGFjZSgpICE9IG51bGwsIGZhbHNlKTsKLSAgICAgICAgICAgIC8vIGJhc2VJbXBsLnNldFNraXBwZWRBbm9ueW1vdXNUeXBlKHRydWUpOwotICAgICAgICAgICAgYmFzZUltcGwuc2V0T3V0ZXJTY2hlbWFUeXBlUmVmKHNJbXBsLmdldFJlZigpKTsKLSAgICAgICAgICAgIGFub25UeXBlcy5hZGQoYmFzZUltcGwpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgc3RhdGUuZXJyb3IoIlNpbXBsZSB0eXBlIHJlc3RyaWN0aW9ucyBtdXN0IG5hbWUgYSBiYXNlIHR5cGUgIiArCi0gICAgICAgICAgICAgICAgICAgICJvciBjb250YWluIGEgbmVzdGVkIHNpbXBsZSB0eXBlOiBuZWl0aGVyIHdlcmUgZm91bmQuIiwKLSAgICAgICAgICAgICAgICAgICAgWG1sRXJyb3JDb250ZXh0LlJFU1RSSUNUSU9OX01JU1NJTkdfQkFTRSwKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VSZXN0cik7Ci0gICAgICAgICAgICAvLyByZWNvdmVyeTogdHJlYXQgaXQgYXMgYW4gZXh0ZW5zaW9uIG9mIGFueVNpbXBsZVR5cGUKLSAgICAgICAgICAgIGJhc2VJbXBsID0gQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfQU5ZX1NJTVBMRTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJlY3Vyc2lvbiEKLSAgICAgICAgaWYgKCFTdHNjUmVzb2x2ZXIucmVzb2x2ZVR5cGUoYmFzZUltcGwpKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBjeWNsaWMgZGVwZW5kZW5jeSByZWNvdmVyeTogdHJlYXQgaXQgYXMgYW4gZXh0ZW5zaW9uIG9mIGFueVNpbXBsZVR5cGUKLSAgICAgICAgICAgIGJhc2VJbXBsID0gQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfQU5ZX1NJTVBMRTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChiYXNlSW1wbC5maW5hbFJlc3RyaWN0aW9uKCkpCi0gICAgICAgICAgICBzdGF0ZS5lcnJvcigiQ2Fubm90IHJlc3RyaWN0IGEgZmluYWwgdHlwZSIsIFhtbEVycm9yQ29udGV4dC5DQU5OT1RfREVSSVZFX0ZJTkFMLCBwYXJzZVJlc3RyKTsKLQotICAgICAgICBzSW1wbC5zZXRCYXNlVHlwZVJlZihiYXNlSW1wbC5nZXRSZWYoKSk7Ci0gICAgICAgIHNJbXBsLnNldEJhc2VEZXB0aChiYXNlSW1wbC5nZXRCYXNlRGVwdGgoKSArIDEpOwotICAgICAgICBzSW1wbC5zZXREZXJpdmF0aW9uVHlwZShTY2hlbWFUeXBlLkRUX1JFU1RSSUNUSU9OKTsKLQotICAgICAgICBpZiAoIWJhc2VJbXBsLmlzU2ltcGxlVHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0ZS5lcnJvcigiQmFzZSB0eXBlIGZvciB0aGlzIHNpbXBsZSB0eXBlIHJlc3RyaWN0aW9uIGlzIG5vdCBzaW1wbGUiLAotICAgICAgICAgICAgICAgICAgICBYbWxFcnJvckNvbnRleHQuU0lNUExFX1JFU1RSSUNUSU9OX05PVF9TSU1QTEUsCi0gICAgICAgICAgICAgICAgICAgIHBhcnNlUmVzdHIueGdldEJhc2UoKSk7Ci0gICAgICAgICAgICAvLyByZWNvdmVyeTogdHJlYXQgaXQgYXMgYSByZXN0cmljdGlvbiBvZiBhbnlTaW1wbGVUeXBlCi0gICAgICAgICAgICByZXNvbHZlRXJyb3JTaW1wbGVUeXBlKHNJbXBsKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHNJbXBsLnNldFNpbXBsZVR5cGVWYXJpZXR5KGJhc2VJbXBsLmdldFNpbXBsZVZhcmlldHkoKSk7Ci0KLSAgICAgICAgLy8gY29weSB2YXJpZXR5LXNwZWNpZmljIHByb3BlcnRpZXMKLSAgICAgICAgc3dpdGNoIChiYXNlSW1wbC5nZXRTaW1wbGVWYXJpZXR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5BVE9NSUM6Ci0gICAgICAgICAgICAgICAgc0ltcGwuc2V0UHJpbWl0aXZlVHlwZVJlZihiYXNlSW1wbC5nZXRQcmltaXRpdmVUeXBlKCkuZ2V0UmVmKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLlVOSU9OOgotICAgICAgICAgICAgICAgIHNJbXBsLnNldFVuaW9uT2ZMaXN0cyhiYXNlSW1wbC5pc1VuaW9uT2ZMaXN0cygpKTsKLSAgICAgICAgICAgICAgICBzSW1wbC5zZXRVbmlvbk1lbWJlclR5cGVSZWZzKG1ha2VSZWZBcnJheShBcnJheXMuYXNMaXN0KGJhc2VJbXBsLmdldFVuaW9uTWVtYmVyVHlwZXMoKSkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5MSVNUOgotICAgICAgICAgICAgICAgIHNJbXBsLnNldExpc3RJdGVtVHlwZVJlZihiYXNlSW1wbC5nZXRMaXN0SXRlbVR5cGUoKS5nZXRSZWYoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBkZWFsIHdpdGggZmFjZXRzCi0gICAgICAgIHJlc29sdmVGYWNldHMoc0ltcGwsIHBhcnNlUmVzdHIsIGJhc2VJbXBsKTsKLQotICAgICAgICAvLyBub3cgY29tcHV0ZSBvdXIgaW50cmluc2ljIHByb3BlcnRpZXMKLSAgICAgICAgcmVzb2x2ZUZ1bmRhbWVudGFsRmFjZXRzKHNJbXBsKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgaW50IHRyYW5zbGF0ZVdoaXRlc3BhY2VDb2RlKFhtbEFueVNpbXBsZVR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICAvLyBCVUdCVUc6IGFkZCB3aGl0ZXNwYWNlIHJ1bGUgdG8gdGV4dHZhbHVlLgotICAgICAgICBTdHJpbmcgdGV4dHZhbCA9IHZhbHVlLmdldFN0cmluZ1ZhbHVlKCk7Ci0KLSAgICAgICAgaWYgKHRleHR2YWwuZXF1YWxzKCJjb2xsYXBzZSIpKQotICAgICAgICAgICAgcmV0dXJuIFNjaGVtYVR5cGUuV1NfQ09MTEFQU0U7Ci0KLSAgICAgICAgaWYgKHRleHR2YWwuZXF1YWxzKCJwcmVzZXJ2ZSIpKQotICAgICAgICAgICAgcmV0dXJuIFNjaGVtYVR5cGUuV1NfUFJFU0VSVkU7Ci0KLSAgICAgICAgaWYgKHRleHR2YWwuZXF1YWxzKCJyZXBsYWNlIikpCi0gICAgICAgICAgICByZXR1cm4gU2NoZW1hVHlwZS5XU19SRVBMQUNFOwotCi0gICAgICAgIFN0c2NTdGF0ZS5nZXQoKS5lcnJvcigiVW5yZWNvZ25pemVkIHdoaXRlc3BhY2UgdmFsdWUgXCIiICsgdGV4dHZhbCArICJcIiIsIFhtbEVycm9yQ29udGV4dC5GQUNFVF9WQUxVRV9NQUxGT1JNRUQsIHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIFNjaGVtYVR5cGUuV1NfVU5TUEVDSUZJRUQ7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2xlYW4gaXNNdWx0aXBsZUZhY2V0KGludCBmYWNldGNvZGUpCi0gICAgewotICAgICAgICByZXR1cm4gKGZhY2V0Y29kZSA9PSBTY2hlbWFUeXBlLkZBQ0VUX0VOVU1FUkFUSU9OIHx8Ci0gICAgICAgICAgICAgICAgZmFjZXRjb2RlID09IFNjaGVtYVR5cGUuRkFDRVRfUEFUVEVSTik7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2xlYW4gZmFjZXRBcHBsaWVzVG9UeXBlKGludCBmYWNldENvZGUsIFNjaGVtYVR5cGVJbXBsIGJhc2VJbXBsKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChiYXNlSW1wbC5nZXRTaW1wbGVWYXJpZXR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5MSVNUOgotICAgICAgICAgICAgICAgIHN3aXRjaCAoZmFjZXRDb2RlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkZBQ0VUX0xFTkdUSDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkZBQ0VUX01JTl9MRU5HVEg6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5GQUNFVF9NQVhfTEVOR1RIOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRkFDRVRfRU5VTUVSQVRJT046Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5GQUNFVF9QQVRURVJOOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRkFDRVRfV0hJVEVfU1BBQ0U6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuVU5JT046Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChmYWNldENvZGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRkFDRVRfRU5VTUVSQVRJT046Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5GQUNFVF9QQVRURVJOOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHRoZSBhdG9taWMgY2FzZQotCi0gICAgICAgIHN3aXRjaCAoYmFzZUltcGwuZ2V0UHJpbWl0aXZlVHlwZSgpLmdldEJ1aWx0aW5UeXBlQ29kZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0FOWV9TSU1QTEU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0JPT0xFQU46Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChmYWNldENvZGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRkFDRVRfUEFUVEVSTjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkZBQ0VUX1dISVRFX1NQQUNFOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19GTE9BVDoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfRE9VQkxFOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19EVVJBVElPTjoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfREFURV9USU1FOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19USU1FOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19EQVRFOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX1lFQVJfTU9OVEg6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfWUVBUjoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19NT05USF9EQVk6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfREFZOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX01PTlRIOgotICAgICAgICAgICAgICAgIHN3aXRjaCAoZmFjZXRDb2RlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkZBQ0VUX01JTl9FWENMVVNJVkU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5GQUNFVF9NSU5fSU5DTFVTSVZFOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRkFDRVRfTUFYX0lOQ0xVU0lWRToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkZBQ0VUX01BWF9FWENMVVNJVkU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5GQUNFVF9FTlVNRVJBVElPTjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkZBQ0VUX1BBVFRFUk46Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5GQUNFVF9XSElURV9TUEFDRToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfREVDSU1BTDoKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGZhY2V0Q29kZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5GQUNFVF9NSU5fRVhDTFVTSVZFOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRkFDRVRfTUlOX0lOQ0xVU0lWRToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkZBQ0VUX01BWF9JTkNMVVNJVkU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5GQUNFVF9NQVhfRVhDTFVTSVZFOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRkFDRVRfVE9UQUxfRElHSVRTOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRkFDRVRfRlJBQ1RJT05fRElHSVRTOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRkFDRVRfRU5VTUVSQVRJT046Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5GQUNFVF9QQVRURVJOOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRkFDRVRfV0hJVEVfU1BBQ0U6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0JBU0VfNjRfQklOQVJZOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19IRVhfQklOQVJZOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19BTllfVVJJOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19RTkFNRToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfTk9UQVRJT046Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1NUUklORzoKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGZhY2V0Q29kZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5GQUNFVF9MRU5HVEg6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5GQUNFVF9NSU5fTEVOR1RIOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRkFDRVRfTUFYX0xFTkdUSDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkZBQ0VUX0VOVU1FUkFUSU9OOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRkFDRVRfUEFUVEVSTjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkZBQ0VUX1dISVRFX1NQQUNFOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgb3RoZXJfc2ltaWxhcl9saW1pdChpbnQgZmFjZXRjb2RlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChmYWNldGNvZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5GQUNFVF9NSU5fRVhDTFVTSVZFOgotICAgICAgICAgICAgICAgIHJldHVybiBTY2hlbWFUeXBlLkZBQ0VUX01JTl9JTkNMVVNJVkU7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRkFDRVRfTUlOX0lOQ0xVU0lWRToKLSAgICAgICAgICAgICAgICByZXR1cm4gU2NoZW1hVHlwZS5GQUNFVF9NSU5fRVhDTFVTSVZFOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkZBQ0VUX01BWF9JTkNMVVNJVkU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNjaGVtYVR5cGUuRkFDRVRfTUFYX0VYQ0xVU0lWRTsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5GQUNFVF9NQVhfRVhDTFVTSVZFOgotICAgICAgICAgICAgICAgIHJldHVybiBTY2hlbWFUeXBlLkZBQ0VUX01BWF9JTkNMVVNJVkU7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgcmVzb2x2ZUZhY2V0cyhTY2hlbWFUeXBlSW1wbCBzSW1wbCwgWG1sT2JqZWN0IHJlc3RyaWN0aW9uLCBTY2hlbWFUeXBlSW1wbCBiYXNlSW1wbCkKLSAgICB7Ci0gICAgICAgIFN0c2NTdGF0ZSBzdGF0ZSA9IFN0c2NTdGF0ZS5nZXQoKTsKLQotICAgICAgICBib29sZWFuW10gc2VlbkZhY2V0ID0gbmV3IGJvb2xlYW5bU2NoZW1hVHlwZS5MQVNUX0ZBQ0VUICsgMV07Ci0gICAgICAgIFhtbEFueVNpbXBsZVR5cGVbXSBteUZhY2V0cyA9IGJhc2VJbXBsLmdldEJhc2ljRmFjZXRzKCk7IC8vIG1ha2VzIGEgY29weQotICAgICAgICBib29sZWFuW10gZml4ZWRGYWNldHMgPSBiYXNlSW1wbC5nZXRGaXhlZEZhY2V0cygpOwotICAgICAgICBpbnQgd3NyID0gU2NoZW1hVHlwZS5XU19VTlNQRUNJRklFRDsKLSAgICAgICAgTGlzdCBlbnVtZXJhdGVkVmFsdWVzID0gbnVsbDsKLSAgICAgICAgTGlzdCBwYXR0ZXJucyA9IG51bGw7Ci0KLSAgICAgICAgaWYgKHJlc3RyaWN0aW9uICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFhtbEN1cnNvciBjdXIgPSByZXN0cmljdGlvbi5uZXdDdXJzb3IoKTsKLSAgICAgICAgICAgIGZvciAoYm9vbGVhbiBtb3JlID0gY3VyLnRvRmlyc3RDaGlsZCgpOyBtb3JlOyBtb3JlID0gY3VyLnRvTmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgY29kZSA9IHRyYW5zbGF0ZUZhY2V0Q29kZShjdXIuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICBGYWNldCBmYWNldCA9IChGYWNldCljdXIuZ2V0T2JqZWN0KCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWZhY2V0QXBwbGllc1RvVHlwZShjb2RlLCBiYXNlSW1wbCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvcigiVGhlIGZhY2V0ICIgKyBmYWNldC5uZXdDdXJzb3IoKS5nZXROYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgKyAiIGRvZXMgbm90IGFwcGx5IHRvIHRoZSBiYXNlIHR5cGUgIiArIGJhc2VJbXBsLCBYbWxFcnJvckNvbnRleHQuRkFDRVRfRE9FU19OT1RfQVBQTFksIGZhY2V0KTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChzZWVuRmFjZXRbY29kZV0gJiYgIWlzTXVsdGlwbGVGYWNldChjb2RlKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJGYWNldCBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMiLCBYbWxFcnJvckNvbnRleHQuRkFDRVRfRFVQTElDQVRFRCwgZmFjZXQpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc2VlbkZhY2V0W2NvZGVdID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIHN3aXRjaCAoY29kZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5GQUNFVF9MRU5HVEg6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobXlGYWNldHNbU2NoZW1hVHlwZS5GQUNFVF9NSU5fTEVOR1RIXSAhPSBudWxsIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlGYWNldHNbU2NoZW1hVHlwZS5GQUNFVF9NQVhfTEVOR1RIXSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJDYW5ub3Qgc3BlY2lmeSBsZW5ndGggaW4gYWRkaXRpb24gdG8gbWluTGVuZ3RoIG9yIG1heExlbmd0aCIsIFhtbEVycm9yQ29udGV4dC5GQUNFVF9EVVBMSUNBVEVELCBmYWNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBYbWxJbnRlZ2VyIGxlbiA9IFN0c2NUcmFuc2xhdG9yLmJ1aWxkTm5JbnRlZ2VyKGZhY2V0LmdldFZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJNdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIsIFhtbEVycm9yQ29udGV4dC5GQUNFVF9WQUxVRV9NQUxGT1JNRUQsIGZhY2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXhlZEZhY2V0c1tjb2RlXSAmJiAhbXlGYWNldHNbY29kZV0udmFsdWVFcXVhbHMobGVuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvcigiVGhpcyBmYWNldCBpcyBmaXhlZCBhbmQgY2Fubm90IGJlIG92ZXJyaWRkZW4iLCBYbWxFcnJvckNvbnRleHQuRkFDRVRfRklYRUQsIGZhY2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIG15RmFjZXRzW2NvZGVdID0gbGVuOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkZBQ0VUX01JTl9MRU5HVEg6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5GQUNFVF9NQVhfTEVOR1RIOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG15RmFjZXRzW1NjaGVtYVR5cGUuRkFDRVRfTEVOR1RIXSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJDYW5ub3Qgc3BlY2lmeSBtaW5MZW5ndGggb3IgbWF4TGVuZ3RoIGluIGFkZGl0aW9uIHRvIGxlbmd0aCIsIFhtbEVycm9yQ29udGV4dC5GQUNFVF9EVVBMSUNBVEVELCBmYWNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBYbWxJbnRlZ2VyIG1sZW4gPSBTdHNjVHJhbnNsYXRvci5idWlsZE5uSW50ZWdlcihmYWNldC5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtbGVuID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIk11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIiwgWG1sRXJyb3JDb250ZXh0LkZBQ0VUX1ZBTFVFX01BTEZPUk1FRCwgZmFjZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpeGVkRmFjZXRzW2NvZGVdICYmICFteUZhY2V0c1tjb2RlXS52YWx1ZUVxdWFscyhtbGVuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvcigiVGhpcyBmYWNldCBpcyBmaXhlZCBhbmQgY2Fubm90IGJlIG92ZXJyaWRkZW4iLCBYbWxFcnJvckNvbnRleHQuRkFDRVRfRklYRUQsIGZhY2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChteUZhY2V0c1tTY2hlbWFUeXBlLkZBQ0VUX01BWF9MRU5HVEhdICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1sZW4uY29tcGFyZVZhbHVlKG15RmFjZXRzW1NjaGVtYVR5cGUuRkFDRVRfTUFYX0xFTkdUSF0pID4gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJMYXJnZXIgdGhhbiBwcmlvciBtYXhMZW5ndGgiLCBYbWxFcnJvckNvbnRleHQuRkFDRVRfVkFMVUVfTUFMRk9STUVELCBmYWNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChteUZhY2V0c1tTY2hlbWFUeXBlLkZBQ0VUX01JTl9MRU5HVEhdICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1sZW4uY29tcGFyZVZhbHVlKG15RmFjZXRzW1NjaGVtYVR5cGUuRkFDRVRfTUlOX0xFTkdUSF0pIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJTbWFsbGVyIHRoYW4gcHJpb3IgbWluTGVuZ3RoIiwgWG1sRXJyb3JDb250ZXh0LkZBQ0VUX1ZBTFVFX01BTEZPUk1FRCwgZmFjZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBteUZhY2V0c1tjb2RlXSA9IG1sZW47Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRkFDRVRfVE9UQUxfRElHSVRTOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRkFDRVRfRlJBQ1RJT05fRElHSVRTOgotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc3RvdGFsZGlnID0gKGNvZGUgPT0gU2NoZW1hVHlwZS5GQUNFVF9UT1RBTF9ESUdJVFMpOwotICAgICAgICAgICAgICAgICAgICAgICAgWG1sSW50ZWdlciBkaWcgPSBTdHNjVHJhbnNsYXRvci5idWlsZE5uSW50ZWdlcihmYWNldC5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaWcgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvcigiTXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiLCBYbWxFcnJvckNvbnRleHQuRkFDRVRfVkFMVUVfTUFMRk9STUVELCBmYWNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZml4ZWRGYWNldHNbY29kZV0gJiYgIW15RmFjZXRzW2NvZGVdLnZhbHVlRXF1YWxzKGRpZykpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIlRoaXMgZmFjZXQgaXMgZml4ZWQgYW5kIGNhbm5vdCBiZSBvdmVycmlkZGVuIiwgWG1sRXJyb3JDb250ZXh0LkZBQ0VUX0ZJWEVELCBmYWNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobXlGYWNldHNbU2NoZW1hVHlwZS5GQUNFVF9UT1RBTF9ESUdJVFNdICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpZy5jb21wYXJlVmFsdWUobXlGYWNldHNbU2NoZW1hVHlwZS5GQUNFVF9UT1RBTF9ESUdJVFNdKSA+IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJMYXJnZXIgdGhhbiBwcmlvciB0b3RhbERpZ2l0cyIsIFhtbEVycm9yQ29udGV4dC5GQUNFVF9WQUxVRV9NQUxGT1JNRUQsIGZhY2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXN0b3RhbGRpZyAmJiBteUZhY2V0c1tTY2hlbWFUeXBlLkZBQ0VUX0ZSQUNUSU9OX0RJR0lUU10gIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlnLmNvbXBhcmVWYWx1ZShteUZhY2V0c1tTY2hlbWFUeXBlLkZBQ0VUX0ZSQUNUSU9OX0RJR0lUU10pID4gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkxhcmdlciB0aGFuIHByaW9yIGZyYWN0aW9uRGlnaXRzIiwgWG1sRXJyb3JDb250ZXh0LkZBQ0VUX1ZBTFVFX01BTEZPUk1FRCwgZmFjZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgbXlGYWNldHNbY29kZV0gPSBkaWc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRkFDRVRfTUlOX0VYQ0xVU0lWRToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkZBQ0VUX01JTl9JTkNMVVNJVkU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5GQUNFVF9NQVhfSU5DTFVTSVZFOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRkFDRVRfTUFYX0VYQ0xVU0lWRToKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlZW5GYWNldFtvdGhlcl9zaW1pbGFyX2xpbWl0KGNvZGUpXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvcigiQ2Fubm90IGRlZmluZSBib3RoIGluY2x1c2l2ZSBhbmQgZXhjbHVzaXZlIGxpbWl0IGluIHRoZSBzYW1lIHJlc3RyaWNpdG9uIiwgWG1sRXJyb3JDb250ZXh0LkZBQ0VUX0RVUExJQ0FURUQsIGZhY2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNtaW4gPSAoY29kZSA9PSBTY2hlbWFUeXBlLkZBQ0VUX01JTl9FWENMVVNJVkUgfHwgY29kZSA9PSBTY2hlbWFUeXBlLkZBQ0VUX01JTl9JTkNMVVNJVkUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpc2V4Y2x1c2l2ZSA9IChjb2RlID09IFNjaGVtYVR5cGUuRkFDRVRfTUlOX0VYQ0xVU0lWRSB8fCBjb2RlID09IFNjaGVtYVR5cGUuRkFDRVRfTUFYX0VYQ0xVU0lWRSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIFhtbEFueVNpbXBsZVR5cGUgbGltaXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCA9IGJhc2VJbXBsLm5ld1ZhbHVlKGZhY2V0LmdldFZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdGU6IHRoaXMgZ3VhcmFudGVlcyB0aGF0IHRoZSBsaW1pdCBpcyBhIHZhbGlkIG51bWJlciBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiYXNlIGRhdGEgdHlwZSEhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIk11c3QgYmUgdmFsaWQgdmFsdWUgaW4gYmFzZSB0eXBlIiwgWG1sRXJyb3JDb250ZXh0LkZBQ0VUX1ZBTFVFX01BTEZPUk1FRCwgZmFjZXQpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQlVHQlVHOiBpZiB0aGVyZSBhcmUgYWN0dWFsIHNjaGVtYXMgdGhhdCByZWRlZmluZSBtaW4vbWF4RXhjbHVzaXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZXkgd2lsbCBuZWVkIHRoaXMgcnVsZSByZWxheGVkIGZvciB0aGVtISEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXhlZEZhY2V0c1tjb2RlXSAmJiAhbXlGYWNldHNbY29kZV0udmFsdWVFcXVhbHMobGltaXQpKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJUaGlzIGZhY2V0IGlzIGZpeGVkIGFuZCBjYW5ub3QgYmUgb3ZlcnJpZGRlbiIsIFhtbEVycm9yQ29udGV4dC5GQUNFVF9GSVhFRCwgZmFjZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG15RmFjZXRzW2NvZGVdICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbXBhcmlzb24gPSBsaW1pdC5jb21wYXJlVmFsdWUobXlGYWNldHNbY29kZV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wYXJpc29uID09IDIgfHwgY29tcGFyaXNvbiA9PSAoaXNtaW4gPyAtMSA6IDEpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoaXNtaW4gPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpc2V4Y2x1c2l2ZSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBwcmV2aW91cyBtaW5FeGNsdXNpdmUiIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHByZXZpb3VzIG1pbkluY2x1c2l2ZSIpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXNleGNsdXNpdmUgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcHJldmlvdXMgbWF4RXhjbHVzaXZlIiA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBwcmV2aW91cyBtYXhJbmNsdXNpdmUiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbWxFcnJvckNvbnRleHQuRkFDRVRfVkFMVUVfTUFMRk9STUVELCBmYWNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIG15RmFjZXRzW2NvZGVdID0gbGltaXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBteUZhY2V0c1tvdGhlcl9zaW1pbGFyX2xpbWl0KGNvZGUpXSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRkFDRVRfV0hJVEVfU1BBQ0U6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3c3IgPSB0cmFuc2xhdGVXaGl0ZXNwYWNlQ29kZShmYWNldC5nZXRWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlSW1wbC5nZXRXaGl0ZVNwYWNlUnVsZSgpID4gd3NyKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdzciA9IFNjaGVtYVR5cGUuV1NfVU5TUEVDSUZJRUQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkNhbm5vdCBhcHBseSB0aGlzIHdoaXRlc3BhY2UgZmFjZXQgb3ZlciB0aGUgcHJldmlvdXMgb25lIiwgWG1sRXJyb3JDb250ZXh0LkZBQ0VUX1ZBTFVFX01BTEZPUk1FRCwgZmFjZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgbXlGYWNldHNbY29kZV0gPSBTdHNjU3RhdGUuYnVpbGRfd3NzdHJpbmcod3NyKS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5GQUNFVF9FTlVNRVJBVElPTjoKLSAgICAgICAgICAgICAgICAgICAgICAgIFhtbE9iamVjdCBlbnVtdmFsOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bXZhbCA9IGJhc2VJbXBsLm5ld1ZhbHVlKGZhY2V0LmdldFZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVudW12YWwuc2V0KGZhY2V0LmdldFZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICgoWG1sT2JqZWN0QmFzZSllbnVtdmFsKS5zZXRJbW11dGFibGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChYbWxWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvcigiRW51bWVyYXRlZCB2YWx1ZSBpbnZhbGlkIGluIGJhc2UgdHlwZSIsIFhtbEVycm9yQ29udGV4dC5GQUNFVF9WQUxVRV9NQUxGT1JNRUQsIGZhY2V0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnVtZXJhdGVkVmFsdWVzID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYXRlZFZhbHVlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmF0ZWRWYWx1ZXMuYWRkKGVudW12YWwpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkZBQ0VUX1BBVFRFUk46Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwucmVnZXguUmVndWxhckV4cHJlc3Npb24gcDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7IHAgPSBuZXcgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnJlZ2V4LlJlZ3VsYXJFeHByZXNzaW9uKGZhY2V0LmdldFZhbHVlKCkuZ2V0U3RyaW5nVmFsdWUoKSwgIlgiKTsgfQotICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5yZWdleC5QYXJzZUV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJNYWxmb3JtZWQgcmVndWxhciBleHByZXNzaW9uIiwgWG1sRXJyb3JDb250ZXh0LkZBQ0VUX1ZBTFVFX01BTEZPUk1FRCwgZmFjZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhdHRlcm5zID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJucy5hZGQocCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoZmFjZXQuZ2V0Rml4ZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgZml4ZWRGYWNldHNbY29kZV0gPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU3RvcmUgdGhlIGFycmF5IG9mIGJhc2ljIGZhY2V0cwotCi0gICAgICAgIHNJbXBsLnNldEJhc2ljRmFjZXRzKG1ha2VWYWx1ZVJlZkFycmF5KG15RmFjZXRzKSwgZml4ZWRGYWNldHMpOwotCi0gICAgICAgIC8vIFVwZGF0ZSB0aGUgbnVtZXJpYyB3aGl0ZXNwYWNlIHJ1bGUKLSAgICAgICAgaWYgKHdzciA9PSBTY2hlbWFUeXBlLldTX1VOU1BFQ0lGSUVEKQotICAgICAgICAgICAgd3NyID0gYmFzZUltcGwuZ2V0V2hpdGVTcGFjZVJ1bGUoKTsKLSAgICAgICAgc0ltcGwuc2V0V2hpdGVTcGFjZVJ1bGUod3NyKTsKLQotICAgICAgICAvLyBzdG9yZSBhd2F5IHRoZSBlbnVtZXJhdGVkIHZhbHVlcwotICAgICAgICBpZiAoZW51bWVyYXRlZFZhbHVlcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBzSW1wbC5zZXRFbnVtZXJhdGlvblZhbHVlcyhtYWtlVmFsdWVSZWZBcnJheSgoWG1sQW55U2ltcGxlVHlwZVtdKQotICAgICAgICAgICAgICAgIGVudW1lcmF0ZWRWYWx1ZXMudG9BcnJheShuZXcgWG1sQW55U2ltcGxlVHlwZVtlbnVtZXJhdGVkVmFsdWVzLnNpemUoKV0pKSk7Ci0KLSAgICAgICAgICAgIFNjaGVtYVR5cGUgYmVUeXBlID0gc0ltcGw7Ci0gICAgICAgICAgICBpZiAoc0ltcGwuZ2V0QmFzZVR5cGUoKS5nZXRCYXNlRW51bVR5cGUoKSAhPSBudWxsKQotICAgICAgICAgICAgICAgIGJlVHlwZSA9IHNJbXBsLmdldEJhc2VUeXBlKCkuZ2V0QmFzZUVudW1UeXBlKCk7Ci0gICAgICAgICAgICBzSW1wbC5zZXRCYXNlRW51bVR5cGVSZWYoYmVUeXBlLmdldFJlZigpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNJbXBsLmNvcHlFbnVtZXJhdGlvblZhbHVlcyhiYXNlSW1wbCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBzdG9yZSB0aGUgcGF0dGVybiBsaXN0Ci0gICAgICAgIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5yZWdleC5SZWd1bGFyRXhwcmVzc2lvbltdIHBhdHRlcm5BcnJheTsKLSAgICAgICAgaWYgKHBhdHRlcm5zICE9IG51bGwpCi0gICAgICAgICAgICBwYXR0ZXJuQXJyYXkgPSAob3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnJlZ2V4LlJlZ3VsYXJFeHByZXNzaW9uW10pcGF0dGVybnMudG9BcnJheShFTVBUWV9SRUdFWF9BUlJBWSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhdHRlcm5BcnJheSA9IEVNUFRZX1JFR0VYX0FSUkFZOwotICAgICAgICBzSW1wbC5zZXRQYXR0ZXJuRmFjZXQoKHBhdHRlcm5BcnJheS5sZW5ndGggPiAwIHx8IGJhc2VJbXBsLmhhc1BhdHRlcm5GYWNldCgpKSk7Ci0gICAgICAgIHNJbXBsLnNldFBhdHRlcm5zKHBhdHRlcm5BcnJheSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgWG1sVmFsdWVSZWZbXSBtYWtlVmFsdWVSZWZBcnJheShYbWxBbnlTaW1wbGVUeXBlW10gc291cmNlKQotICAgIHsKLSAgICAgICAgWG1sVmFsdWVSZWZbXSByZXN1bHQgPSBuZXcgWG1sVmFsdWVSZWZbc291cmNlLmxlbmd0aF07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgcmVzdWx0W2ldID0gKHNvdXJjZVtpXSA9PSBudWxsID8gbnVsbCA6IG5ldyBYbWxWYWx1ZVJlZihzb3VyY2VbaV0pKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwucmVnZXguUmVndWxhckV4cHJlc3Npb25bXSBFTVBUWV9SRUdFWF9BUlJBWSA9IG5ldyBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwucmVnZXguUmVndWxhckV4cHJlc3Npb25bMF07Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzRGlzY3JldGVUeXBlKFNjaGVtYVR5cGVJbXBsIHNJbXBsKQotICAgIHsKLSAgICAgICAgaWYgKHNJbXBsLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfRlJBQ1RJT05fRElHSVRTKSAhPSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIC8vIEJVR0JVRzogc3BlYyBpcyBzaWxlbnQgb24gZW51bWVyYXRpb25zOyB0aGV5J3JlIGZpbml0ZSB0b28uCi0gICAgICAgIHN3aXRjaCAoc0ltcGwuZ2V0UHJpbWl0aXZlVHlwZSgpLmdldEJ1aWx0aW5UeXBlQ29kZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RBVEU6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfWUVBUl9NT05USDoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19ZRUFSOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX01PTlRIX0RBWToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19EQVk6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfTU9OVEg6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0JPT0xFQU46Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNOdW1lcmljUHJpbWl0aXZlKFNjaGVtYVR5cGUgc0ltcGwpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHNJbXBsLmdldEJ1aWx0aW5UeXBlQ29kZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RFQ0lNQUw6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0ZMT0FUOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19ET1VCTEU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGludCBkZWNpbWFsU2l6ZU9mVHlwZShTY2hlbWFUeXBlSW1wbCBzSW1wbCkKLSAgICB7Ci0gICAgICAgIGludCBzaXplID0gbWF0aGVtYXRpY2FsU2l6ZU9mVHlwZShzSW1wbCk7Ci0gICAgICAgIAotICAgICAgICAvLyBieXRlIGFuZCBzaG9ydCBhcmUgaW5jb252ZW5pZW50LCBiZWNhdXNlIHNldEJ5dGUoKGJ5dGUpNCkgcmVxdWlyZXMgYSBjYXN0LgotICAgICAgICAvLyBTbyB1c2UgImludCIgdW5sZXNzIHlvdSdyZSByZWFsbHkgYSB4czpieXRlLCB4czpzaG9ydCwgb3IgYW4geHM6dW5zaWduZWRCeXRlCi0gICAgICAgIC8vICh0aGUgbGFzdCBjYXNlIGlzIGluY2x1ZGVkIGZvciBhbGlnbm1lbnQgd2l0aCBKQVhCKQotICAgICAgICAKLSAgICAgICAgaWYgKHNpemUgPT0gU2NoZW1hVHlwZS5TSVpFX0JZVEUgJiYgIVhtbEJ5dGUudHlwZS5pc0Fzc2lnbmFibGVGcm9tKHNJbXBsKSkKLSAgICAgICAgICAgIHNpemUgPSBTY2hlbWFUeXBlLlNJWkVfU0hPUlQ7Ci0gICAgICAgIGlmIChzaXplID09IFNjaGVtYVR5cGUuU0laRV9TSE9SVCAmJiAhWG1sU2hvcnQudHlwZS5pc0Fzc2lnbmFibGVGcm9tKHNJbXBsKSAmJiAhWG1sVW5zaWduZWRCeXRlLnR5cGUuaXNBc3NpZ25hYmxlRnJvbShzSW1wbCkpCi0gICAgICAgICAgICBzaXplID0gU2NoZW1hVHlwZS5TSVpFX0lOVDsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBzaXplOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgbWF0aGVtYXRpY2FsU2l6ZU9mVHlwZShTY2hlbWFUeXBlSW1wbCBzSW1wbCkKLSAgICB7Ci0gICAgICAgIGlmIChzSW1wbC5nZXRQcmltaXRpdmVUeXBlKCkuZ2V0QnVpbHRpblR5cGVDb2RlKCkgIT0gU2NoZW1hVHlwZS5CVENfREVDSU1BTCkKLSAgICAgICAgICAgIHJldHVybiBTY2hlbWFUeXBlLk5PVF9ERUNJTUFMOwotCi0gICAgICAgIGlmIChzSW1wbC5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX0ZSQUNUSU9OX0RJR0lUUykgPT0gbnVsbCB8fAotICAgICAgICAgICAgKChTaW1wbGVWYWx1ZSlzSW1wbC5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX0ZSQUNUSU9OX0RJR0lUUykpLmdldEJpZ0ludGVnZXJWYWx1ZSgpLnNpZ251bSgpICE9IDApCi0gICAgICAgICAgICByZXR1cm4gU2NoZW1hVHlwZS5TSVpFX0JJR19ERUNJTUFMOwotCi0gICAgICAgIEJpZ0ludGVnZXIgbWluID0gbnVsbDsKLSAgICAgICAgQmlnSW50ZWdlciBtYXggPSBudWxsOwotCi0gICAgICAgIGlmIChzSW1wbC5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX01JTl9FWENMVVNJVkUpICE9IG51bGwpCi0gICAgICAgICAgICBtaW4gPSAoKFNpbXBsZVZhbHVlKXNJbXBsLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfTUlOX0VYQ0xVU0lWRSkpLmdldEJpZ0ludGVnZXJWYWx1ZSgpOyAvLyAuYWRkKEJpZ0ludGVnZXIuT05FKTsKLSAgICAgICAgaWYgKHNJbXBsLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfTUlOX0lOQ0xVU0lWRSkgIT0gbnVsbCkKLSAgICAgICAgICAgIG1pbiA9ICgoU2ltcGxlVmFsdWUpc0ltcGwuZ2V0RmFjZXQoU2NoZW1hVHlwZS5GQUNFVF9NSU5fSU5DTFVTSVZFKSkuZ2V0QmlnSW50ZWdlclZhbHVlKCk7Ci0gICAgICAgIGlmIChzSW1wbC5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX01BWF9JTkNMVVNJVkUpICE9IG51bGwpCi0gICAgICAgICAgICBtYXggPSAoKFNpbXBsZVZhbHVlKXNJbXBsLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfTUFYX0lOQ0xVU0lWRSkpLmdldEJpZ0ludGVnZXJWYWx1ZSgpOwotICAgICAgICBpZiAoc0ltcGwuZ2V0RmFjZXQoU2NoZW1hVHlwZS5GQUNFVF9NQVhfRVhDTFVTSVZFKSAhPSBudWxsKQotICAgICAgICAgICAgbWF4ID0gKChTaW1wbGVWYWx1ZSlzSW1wbC5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX01BWF9FWENMVVNJVkUpKS5nZXRCaWdJbnRlZ2VyVmFsdWUoKTsgLy8gLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKTsKLQotICAgICAgICBpZiAoc0ltcGwuZ2V0RmFjZXQoU2NoZW1hVHlwZS5GQUNFVF9UT1RBTF9ESUdJVFMpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJpZ0ludGVnZXIgcGVnID0gbnVsbDsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEJpZ0ludGVnZXIgdG90YWxEaWdpdHMgPSAoKFNpbXBsZVZhbHVlKXNJbXBsLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfVE9UQUxfRElHSVRTKSkuZ2V0QmlnSW50ZWdlclZhbHVlKCk7Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHRvdGFsRGlnaXRzLmludFZhbHVlKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogY2FzZSAyOgotICAgICAgICAgICAgICAgICAgICAgICAgIHBlZyA9IEJpZ0ludGVnZXIudmFsdWVPZig5OUwpOyAvLyBCWVRFIHNpemUKLSAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgcGVnID0gQmlnSW50ZWdlci52YWx1ZU9mKDk5OTlMKTsgLy8gU0hPUlQgc2l6ZQotICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IGNhc2UgNjogY2FzZSA3OiBjYXNlIDg6IGNhc2UgOToKLSAgICAgICAgICAgICAgICAgICAgICAgICBwZWcgPSBCaWdJbnRlZ2VyLnZhbHVlT2YoOTk5OTk5OTk5TCk7IC8vIElOVCBzaXplCi0gICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6IGNhc2UgMTE6IGNhc2UgMTI6IGNhc2UgMTM6IGNhc2UgMTQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMTU6IGNhc2UgMTY6IGNhc2UgMTc6IGNhc2UgMTg6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgcGVnID0gQmlnSW50ZWdlci52YWx1ZU9mKDk5OTk5OTk5OTk5OTk5OTk5OUwpOyAvLyBMT05HIHNpemUKLSAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uIGUpIHt9Ci0gICAgICAgICAgICBpZiAocGVnICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbWluID0gKG1pbiA9PSBudWxsID8gcGVnLm5lZ2F0ZSgpIDogbWluLm1heChwZWcubmVnYXRlKCkpKTsKLSAgICAgICAgICAgICAgICBtYXggPSAobWF4ID09IG51bGwgPyBwZWcgOiBtYXgubWluKHBlZykpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1pbiAhPSBudWxsICYmIG1heCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBmaW5kIHRoZSBsYXJnZXN0ICJhYnNvbHV0ZSB2YWx1ZSIgbnVtYmVyIHRoYXQgbXVzdCBiZSBkZWFsdCB3aXRoCi0gICAgICAgICAgICBpZiAobWluLnNpZ251bSgpIDwgMCkKLSAgICAgICAgICAgICAgICBtaW4gPSBtaW4ubmVnYXRlKCkuc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpOwotICAgICAgICAgICAgaWYgKG1heC5zaWdudW0oKSA8IDApCi0gICAgICAgICAgICAgICAgbWF4ID0gbWF4Lm5lZ2F0ZSgpLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKTsKLQotICAgICAgICAgICAgbWF4ID0gbWF4Lm1heChtaW4pOwotICAgICAgICAgICAgaWYgKG1heC5jb21wYXJlVG8oQmlnSW50ZWdlci52YWx1ZU9mKEJ5dGUuTUFYX1ZBTFVFKSkgPD0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2NoZW1hVHlwZS5TSVpFX0JZVEU7Ci0gICAgICAgICAgICBpZiAobWF4LmNvbXBhcmVUbyhCaWdJbnRlZ2VyLnZhbHVlT2YoU2hvcnQuTUFYX1ZBTFVFKSkgPD0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2NoZW1hVHlwZS5TSVpFX1NIT1JUOwotICAgICAgICAgICAgaWYgKG1heC5jb21wYXJlVG8oQmlnSW50ZWdlci52YWx1ZU9mKEludGVnZXIuTUFYX1ZBTFVFKSkgPD0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2NoZW1hVHlwZS5TSVpFX0lOVDsKLSAgICAgICAgICAgIGlmIChtYXguY29tcGFyZVRvKEJpZ0ludGVnZXIudmFsdWVPZihMb25nLk1BWF9WQUxVRSkpIDw9IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNjaGVtYVR5cGUuU0laRV9MT05HOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFNjaGVtYVR5cGUuU0laRV9CSUdfSU5URUdFUjsKLSAgICB9Ci0KLQotICAgIHN0YXRpYyB2b2lkIHJlc29sdmVGdW5kYW1lbnRhbEZhY2V0cyhTY2hlbWFUeXBlSW1wbCBzSW1wbCkKLSAgICB7Ci0gICAgICAgIC8vIGRlYWwgd2l0aCwgaXNPcmRlcmVkLCBpc0JvdW5kZWQsIGlzRmluaXRlLCBpc051bWVyaWMKLSAgICAgICAgLy8gYWxzbyBkZWFsIHdpdGgKLSAgICAgICAgc3dpdGNoIChzSW1wbC5nZXRTaW1wbGVWYXJpZXR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5BVE9NSUM6Ci0gICAgICAgICAgICAgICAgU2NoZW1hVHlwZUltcGwgYmFzZUltcGwgPSAoU2NoZW1hVHlwZUltcGwpc0ltcGwuZ2V0QmFzZVR5cGUoKTsKLSAgICAgICAgICAgICAgICBzSW1wbC5zZXRPcmRlcmVkKGJhc2VJbXBsLm9yZGVyZWQoKSk7Ci0gICAgICAgICAgICAgICAgc0ltcGwuc2V0Qm91bmRlZCgKLSAgICAgICAgICAgICAgICAgICAgKHNJbXBsLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfTUlOX0VYQ0xVU0lWRSkgIT0gbnVsbCB8fAotICAgICAgICAgICAgICAgICAgICAgc0ltcGwuZ2V0RmFjZXQoU2NoZW1hVHlwZS5GQUNFVF9NSU5fSU5DTFVTSVZFKSAhPSBudWxsKSAmJgotICAgICAgICAgICAgICAgICAgICAoc0ltcGwuZ2V0RmFjZXQoU2NoZW1hVHlwZS5GQUNFVF9NQVhfSU5DTFVTSVZFKSAhPSBudWxsIHx8Ci0gICAgICAgICAgICAgICAgICAgICBzSW1wbC5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX01BWF9FWENMVVNJVkUpICE9IG51bGwpKTsKLSAgICAgICAgICAgICAgICBzSW1wbC5zZXRGaW5pdGUoYmFzZUltcGwuaXNGaW5pdGUoKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzSW1wbC5pc0JvdW5kZWQoKSAmJiBpc0Rpc2NyZXRlVHlwZShzSW1wbCkpOwotICAgICAgICAgICAgICAgIHNJbXBsLnNldE51bWVyaWMoYmFzZUltcGwuaXNOdW1lcmljKCkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNOdW1lcmljUHJpbWl0aXZlKHNJbXBsLmdldFByaW1pdGl2ZVR5cGUoKSkpOwotICAgICAgICAgICAgICAgIHNJbXBsLnNldERlY2ltYWxTaXplKGRlY2ltYWxTaXplT2ZUeXBlKHNJbXBsKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuVU5JT046Ci0gICAgICAgICAgICAgICAgU2NoZW1hVHlwZVtdIG1UeXBlcyA9IHNJbXBsLmdldFVuaW9uTWVtYmVyVHlwZXMoKTsKLSAgICAgICAgICAgICAgICBpbnQgb3JkZXJlZCA9IFNjaGVtYVR5cGUuVU5PUkRFUkVEOwotICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNCb3VuZGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBib29sZWFuIGlzRmluaXRlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBib29sZWFuIGlzTnVtZXJpYyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgLy8gb3JkZXJlZCBpZiBhbnkgaXMgb3JkZXJlZCwgYm91bmRlZCBpZiBhbGwgYXJlIGJvdW5kZWQuCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtVHlwZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAobVR5cGVzW2ldLm9yZGVyZWQoKSAhPSBTY2hlbWFUeXBlLlVOT1JERVJFRCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyZWQgPSBTY2hlbWFUeXBlLlBBUlRJQUxfT1JERVI7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbVR5cGVzW2ldLmlzQm91bmRlZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgaXNCb3VuZGVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbVR5cGVzW2ldLmlzRmluaXRlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBpc0Zpbml0ZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1UeXBlc1tpXS5pc051bWVyaWMoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlzTnVtZXJpYyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzSW1wbC5zZXRPcmRlcmVkKG9yZGVyZWQpOwotICAgICAgICAgICAgICAgIHNJbXBsLnNldEJvdW5kZWQoaXNCb3VuZGVkKTsKLSAgICAgICAgICAgICAgICBzSW1wbC5zZXRGaW5pdGUoaXNGaW5pdGUpOwotICAgICAgICAgICAgICAgIHNJbXBsLnNldE51bWVyaWMoaXNOdW1lcmljKTsKLSAgICAgICAgICAgICAgICBzSW1wbC5zZXREZWNpbWFsU2l6ZShTY2hlbWFUeXBlLk5PVF9ERUNJTUFMKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5MSVNUOgotICAgICAgICAgICAgICAgIHNJbXBsLnNldE9yZGVyZWQoU2NoZW1hVHlwZS5VTk9SREVSRUQpOwotICAgICAgICAgICAgICAgIC8vIEJVR0JVRzogdGhlIHNjaGVtYSBzcGVjIGlzIHdyb25nIGhlcmU6IE1JTl9MRU5HVEggaXMgbm90IG5lZWRlZCwgYmVhdXNlIGxlbiA+PTAKLSAgICAgICAgICAgICAgICBzSW1wbC5zZXRCb3VuZGVkKHNJbXBsLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfTEVOR1RIKSAhPSBudWxsIHx8Ci0gICAgICAgICAgICAgICAgICAgIHNJbXBsLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfTUFYX0xFTkdUSCkgIT0gbnVsbCk7Ci0gICAgICAgICAgICAgICAgLy8gQlVHQlVHOiB0aGUgc2NoZW1hIHNwZWMgaXMgd3JvbmcgaGVyZTogZmluaXRlIGNhcmRpbmFsaXR5IHJlcXVpcmVzIGl0ZW0gdHlwZSBpcyBmaW5pdGUKLSAgICAgICAgICAgICAgICBzSW1wbC5zZXRGaW5pdGUoc0ltcGwuZ2V0TGlzdEl0ZW1UeXBlKCkuaXNGaW5pdGUoKSAmJiBzSW1wbC5pc0JvdW5kZWQoKSk7Ci0gICAgICAgICAgICAgICAgc0ltcGwuc2V0TnVtZXJpYyhmYWxzZSk7Ci0gICAgICAgICAgICAgICAgc0ltcGwuc2V0RGVjaW1hbFNpemUoU2NoZW1hVHlwZS5OT1RfREVDSU1BTCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBDb2RlRm9yTmFtZUVudHJ5Ci0gICAgewotICAgICAgICBDb2RlRm9yTmFtZUVudHJ5KFFOYW1lIG5hbWUsIGludCBjb2RlKQotICAgICAgICAgICAgeyB0aGlzLm5hbWUgPSBuYW1lOyB0aGlzLmNvZGUgPSBjb2RlOyB9Ci0gICAgICAgIHB1YmxpYyBRTmFtZSBuYW1lOwotICAgICAgICBwdWJsaWMgaW50IGNvZGU7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgQ29kZUZvck5hbWVFbnRyeVtdIGZhY2V0Q29kZXMgPSBuZXcgQ29kZUZvck5hbWVFbnRyeVtdCi0gICAgewotICAgICAgICBuZXcgQ29kZUZvck5hbWVFbnRyeShRTmFtZUhlbHBlci5mb3JMTlMoImxlbmd0aCIsICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIpLCBTY2hlbWFUeXBlLkZBQ0VUX0xFTkdUSCksCi0gICAgICAgIG5ldyBDb2RlRm9yTmFtZUVudHJ5KFFOYW1lSGVscGVyLmZvckxOUygibWluTGVuZ3RoIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiksIFNjaGVtYVR5cGUuRkFDRVRfTUlOX0xFTkdUSCksCi0gICAgICAgIG5ldyBDb2RlRm9yTmFtZUVudHJ5KFFOYW1lSGVscGVyLmZvckxOUygibWF4TGVuZ3RoIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiksIFNjaGVtYVR5cGUuRkFDRVRfTUFYX0xFTkdUSCksCi0gICAgICAgIG5ldyBDb2RlRm9yTmFtZUVudHJ5KFFOYW1lSGVscGVyLmZvckxOUygicGF0dGVybiIsICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIpLCBTY2hlbWFUeXBlLkZBQ0VUX1BBVFRFUk4pLAotICAgICAgICBuZXcgQ29kZUZvck5hbWVFbnRyeShRTmFtZUhlbHBlci5mb3JMTlMoImVudW1lcmF0aW9uIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiksIFNjaGVtYVR5cGUuRkFDRVRfRU5VTUVSQVRJT04pLAotICAgICAgICBuZXcgQ29kZUZvck5hbWVFbnRyeShRTmFtZUhlbHBlci5mb3JMTlMoIndoaXRlU3BhY2UiLCAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiKSwgU2NoZW1hVHlwZS5GQUNFVF9XSElURV9TUEFDRSksCi0gICAgICAgIG5ldyBDb2RlRm9yTmFtZUVudHJ5KFFOYW1lSGVscGVyLmZvckxOUygibWF4SW5jbHVzaXZlIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiksIFNjaGVtYVR5cGUuRkFDRVRfTUFYX0lOQ0xVU0lWRSksCi0gICAgICAgIG5ldyBDb2RlRm9yTmFtZUVudHJ5KFFOYW1lSGVscGVyLmZvckxOUygibWF4RXhjbHVzaXZlIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiksIFNjaGVtYVR5cGUuRkFDRVRfTUFYX0VYQ0xVU0lWRSksCi0gICAgICAgIG5ldyBDb2RlRm9yTmFtZUVudHJ5KFFOYW1lSGVscGVyLmZvckxOUygibWluSW5jbHVzaXZlIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiksIFNjaGVtYVR5cGUuRkFDRVRfTUlOX0lOQ0xVU0lWRSksCi0gICAgICAgIG5ldyBDb2RlRm9yTmFtZUVudHJ5KFFOYW1lSGVscGVyLmZvckxOUygibWluRXhjbHVzaXZlIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiksIFNjaGVtYVR5cGUuRkFDRVRfTUlOX0VYQ0xVU0lWRSksCi0gICAgICAgIG5ldyBDb2RlRm9yTmFtZUVudHJ5KFFOYW1lSGVscGVyLmZvckxOUygidG90YWxEaWdpdHMiLCAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiKSwgU2NoZW1hVHlwZS5GQUNFVF9UT1RBTF9ESUdJVFMpLAotICAgICAgICBuZXcgQ29kZUZvck5hbWVFbnRyeShRTmFtZUhlbHBlci5mb3JMTlMoImZyYWN0aW9uRGlnaXRzIiwgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiksIFNjaGVtYVR5cGUuRkFDRVRfRlJBQ1RJT05fRElHSVRTKSwKLSAgICB9OwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWFwIGZhY2V0Q29kZU1hcCA9IGJ1aWxkRmFjZXRDb2RlTWFwKCk7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBNYXAgYnVpbGRGYWNldENvZGVNYXAoKQotICAgIHsKLSAgICAgICAgTWFwIHJlc3VsdCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmFjZXRDb2Rlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHJlc3VsdC5wdXQoZmFjZXRDb2Rlc1tpXS5uYW1lLCAgbmV3IEludGVnZXIoZmFjZXRDb2Rlc1tpXS5jb2RlKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IHRyYW5zbGF0ZUZhY2V0Q29kZShRTmFtZSBuYW1lKQotICAgIHsKLSAgICAgICAgSW50ZWdlciByZXN1bHQgPSAoKEludGVnZXIpZmFjZXRDb2RlTWFwLmdldChuYW1lKSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5pbnRWYWx1ZSgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1N0c2NTdGF0ZS5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU3RzY1N0YXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhNDgzMDYuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvU3RzY1N0YXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTA0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnNjaGVtYTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uWG1sRXJyb3JDb250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uUU5hbWVIZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbmZpZy5TY2hlbWFDb25maWc7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFHbG9iYWxFbGVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQ29tcG9uZW50OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUdsb2JhbEF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUF0dHJpYnV0ZUdyb3VwOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hTW9kZWxHcm91cDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFcnJvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJlYW5zOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9uczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLlhtbFN0cmluZ0ltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5YbWxWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnV0aWwuSGV4QmluOwotCi1pbXBvcnQgamF2YS51dGlsLio7Ci1pbXBvcnQgamF2YS5uZXQuVVJJU3ludGF4RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSSTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcudzMueDIwMDEueG1sU2NoZW1hLlNjaGVtYURvY3VtZW50OwotaW1wb3J0IG9yZy54bWwuc2F4LkVudGl0eVJlc29sdmVyOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyB0aGUgc3RhdGUgb2YgdGhlIFNjaGVtYVR5cGVTeXN0ZW1Db21waWxlciBhcyBpdCdzCi0gKiBnb2luZy4KLSAqLwotcHVibGljIGNsYXNzIFN0c2NTdGF0ZQotewotICAgIHByaXZhdGUgU3RyaW5nIF9naXZlblN0c05hbWU7Ci0gICAgcHJpdmF0ZSBDb2xsZWN0aW9uIF9lcnJvckxpc3RlbmVyOwotICAgIHByaXZhdGUgU2NoZW1hVHlwZVN5c3RlbUltcGwgX3RhcmdldDsKLSAgICBwcml2YXRlIFNjaGVtYUNvbmZpZyBfY29uZmlnOwotICAgIHByaXZhdGUgTWFwIF9jb21wYXRNYXA7Ci0gICAgcHJpdmF0ZSBib29sZWFuIF9kb2luZ0Rvd25sb2FkczsKLSAgICBwcml2YXRlIGJ5dGVbXSBfZGlnZXN0ID0gbnVsbDsKLSAgICBwcml2YXRlIGJvb2xlYW4gX25vRGlnZXN0ID0gZmFsc2U7Ci0KLSAgICBwcml2YXRlIFNjaGVtYVR5cGVMb2FkZXIgX2ltcG9ydGluZ0xvYWRlcjsKLQotICAgIHByaXZhdGUgTWFwIF9yZWRlZmluZWRHbG9iYWxUeXBlcyAgICAgICAgPSBuZXcgTGlua2VkSGFzaE1hcCgpOwotICAgIHByaXZhdGUgTWFwIF9yZWRlZmluZWRNb2RlbEdyb3VwcyAgICAgICAgPSBuZXcgTGlua2VkSGFzaE1hcCgpOwotICAgIHByaXZhdGUgTWFwIF9yZWRlZmluZWRBdHRyaWJ1dGVHcm91cHMgICAgPSBuZXcgTGlua2VkSGFzaE1hcCgpOwotICAgICAgICAKLSAgICBwcml2YXRlIE1hcCBfZ2xvYmFsVHlwZXMgICAgICAgID0gbmV3IExpbmtlZEhhc2hNYXAoKTsKLSAgICBwcml2YXRlIE1hcCBfZ2xvYmFsRWxlbWVudHMgICAgID0gbmV3IExpbmtlZEhhc2hNYXAoKTsKLSAgICBwcml2YXRlIE1hcCBfZ2xvYmFsQXR0cmlidXRlcyAgID0gbmV3IExpbmtlZEhhc2hNYXAoKTsKLSAgICBwcml2YXRlIE1hcCBfbW9kZWxHcm91cHMgICAgICAgID0gbmV3IExpbmtlZEhhc2hNYXAoKTsKLSAgICBwcml2YXRlIE1hcCBfYXR0cmlidXRlR3JvdXBzICAgID0gbmV3IExpbmtlZEhhc2hNYXAoKTsKLSAgICBwcml2YXRlIE1hcCBfZG9jdW1lbnRUeXBlcyAgICAgID0gbmV3IExpbmtlZEhhc2hNYXAoKTsKLSAgICBwcml2YXRlIE1hcCBfYXR0cmlidXRlVHlwZXMgICAgID0gbmV3IExpbmtlZEhhc2hNYXAoKTsKLSAgICBwcml2YXRlIE1hcCBfdHlwZXNCeUNsYXNzbmFtZSAgID0gbmV3IExpbmtlZEhhc2hNYXAoKTsKLSAgICBwcml2YXRlIE1hcCBfbWlzc3BlbGxlZE5hbWVzICAgID0gbmV3IEhhc2hNYXAoKTsKLSAgICBwcml2YXRlIFNldCBfcHJvY2Vzc2luZ0dyb3VwcyAgID0gbmV3IEhhc2hTZXQoKTsKLSAgICBwcml2YXRlIE1hcCBfaWRDb25zdHJhaW50cyAgICAgID0gbmV3IExpbmtlZEhhc2hNYXAoKTsKLSAgICBwcml2YXRlIFNldCBfbmFtZXNwYWNlcyAgICAgICAgID0gbmV3IEhhc2hTZXQoKTsKLSAgICBwcml2YXRlIGJvb2xlYW4gX25vVXBhOwotICAgIHByaXZhdGUgYm9vbGVhbiBfbm9QdnI7Ci0gICAgcHJpdmF0ZSBTZXQgX21kZWZOYW1lc3BhY2VzICAgICA9IGJ1aWxkRGVmYXVsdE1kZWZOYW1lc3BhY2VzKCk7Ci0gICAgcHJpdmF0ZSBFbnRpdHlSZXNvbHZlciBfZW50aXR5UmVzb2x2ZXI7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTZXQgYnVpbGREZWZhdWx0TWRlZk5hbWVzcGFjZXMoKQotICAgIHsKLSAgICAgICAgLy8gbmFtZXNwYWNlcyB3aGljaCBhcmUga25vd24gdG8gYXBwZWFyIGluIFdTRExzIHJlZHVuZGFudGx5Ci0gICAgICAgIHJldHVybiBuZXcgSGFzaFNldCgKLSAgICAgICAgICAgICAgICBBcnJheXMuYXNMaXN0KCBuZXcgU3RyaW5nW10gewotICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5vcGVudXJpLm9yZy8yMDAyLzA0L3NvYXAvY29udmVyc2F0aW9uLyIsCi0gICAgICAgICAgICAgICAgfSkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gc3RvcmUgdGhlIG5ldyB0YXJnZXQgbmFtZXNwYWNlIGZvciBhIGNoYW1lbGVvbgotICAgICAqIGluY2x1ZGVkIHNjaGVtYS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIE9iamVjdCBDSEFNRUxFT05fSU5DTFVERV9VUkkgPSBuZXcgT2JqZWN0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBPbmx5IGNvbnN0cnVjdGVkIHZpYSBTdHNjU3RhdGUuc3RhcnQoKS4KLSAgICAgKi8KLSAgICBwcml2YXRlIFN0c2NTdGF0ZSgpCi0gICAgewotICAgIH0KLQotICAgIC8qKgotICAgICAqIEluaXRpYWxpemVyIGZvciBzY2hlbWF0eXBlcGF0aAotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEltcG9ydGluZ1R5cGVMb2FkZXIoU2NoZW1hVHlwZUxvYWRlciBsb2FkZXIpCi0gICAgewotICAgICAgICBfaW1wb3J0aW5nTG9hZGVyID0gbG9hZGVyOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEluaXRpYWxpemVyIGZvciBlcnJvciBoYW5kbGluZy4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRFcnJvckxpc3RlbmVyKENvbGxlY3Rpb24gZXJyb3JMaXN0ZW5lcikKLSAgICAgICAgeyBfZXJyb3JMaXN0ZW5lciA9IGVycm9yTGlzdGVuZXI7IH0KLQotICAgIC8qKgotICAgICAqIFBhc3NlcyBhbiBlcnJvciBvbiB0byB0aGUgY3VycmVudCBYbWxFcnJvckNvbnRleHQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZXJyb3IoU3RyaW5nIG1lc3NhZ2UsIGludCBjb2RlLCBYbWxPYmplY3QgbG9jKQotICAgICAgICB7IGFkZEVycm9yKF9lcnJvckxpc3RlbmVyLCBtZXNzYWdlLCBjb2RlLCBsb2MpOyB9Ci0KLSAgICAvKioKLSAgICAgKiBQYXNzZXMgYSB3YXJuaW5nIG9uIHRvIHRoZSBjdXJyZW50IFhtbEVycm9yQ29udGV4dC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB3YXJuaW5nKFN0cmluZyBtZXNzYWdlLCBpbnQgY29kZSwgWG1sT2JqZWN0IGxvYykKLSAgICB7Ci0gICAgICAgIC8vIGl0J3MgT0sgZm9yIFhNTFNjaGVtYS54c2QgaXRzZWxmIHRvIGhhdmUgcmVzZXJ2ZWQgdHlwZSBuYW1lcwotICAgICAgICBpZiAoY29kZSA9PSBYbWxFcnJvckNvbnRleHQuUkVTRVJWRURfVFlQRV9OQU1FICYmCi0gICAgICAgICAgICAgICAgbG9jLmRvY3VtZW50UHJvcGVydGllcygpLmdldFNvdXJjZU5hbWUoKSAhPSBudWxsICYmCi0gICAgICAgICAgICAgICAgbG9jLmRvY3VtZW50UHJvcGVydGllcygpLmdldFNvdXJjZU5hbWUoKS5pbmRleE9mKCJYTUxTY2hlbWEueHNkIikgPiAwKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGFkZFdhcm5pbmcoX2Vycm9yTGlzdGVuZXIsIG1lc3NhZ2UsIGNvZGUsIGxvYyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUGFzc2VzIGEgd2FybmluZyBvbiB0byB0aGUgY3VycmVudCBYbWxFcnJvckNvbnRleHQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgaW5mbyhTdHJpbmcgbWVzc2FnZSkKLSAgICAgICAgeyBhZGRJbmZvKF9lcnJvckxpc3RlbmVyLCBtZXNzYWdlKTsgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGFkZEVycm9yKENvbGxlY3Rpb24gZXJyb3JMaXN0ZW5lciwgU3RyaW5nIG1lc3NhZ2UsIGludCBjb2RlLCBYbWxPYmplY3QgbG9jYXRpb24pCi0gICAgewotICAgICAgICBYbWxFcnJvciBlcnIgPQotICAgICAgICAgICAgWG1sRXJyb3IuZm9yT2JqZWN0KAotICAgICAgICAgICAgICBtZXNzYWdlLAotICAgICAgICAgICAgICBYbWxFcnJvci5TRVZFUklUWV9FUlJPUiwKLSAgICAgICAgICAgICAgbG9jYXRpb24pOwotICAgICAgICBlcnJvckxpc3RlbmVyLmFkZChlcnIpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBhZGRFcnJvcihDb2xsZWN0aW9uIGVycm9yTGlzdGVuZXIsIFN0cmluZyBtZXNzYWdlLCBpbnQgY29kZSwgRmlsZSBsb2NhdGlvbikKLSAgICB7Ci0gICAgICAgIFhtbEVycm9yIGVyciA9Ci0gICAgICAgICAgICBYbWxFcnJvci5mb3JMb2NhdGlvbigKLSAgICAgICAgICAgICAgbWVzc2FnZSwKLSAgICAgICAgICAgICAgWG1sRXJyb3IuU0VWRVJJVFlfRVJST1IsCi0gICAgICAgICAgICAgIGxvY2F0aW9uLnRvVVJJKCkudG9TdHJpbmcoKSwgMCwgMCwgMCk7Ci0gICAgICAgIGVycm9yTGlzdGVuZXIuYWRkKGVycik7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGFkZFdhcm5pbmcoQ29sbGVjdGlvbiBlcnJvckxpc3RlbmVyLCBTdHJpbmcgbWVzc2FnZSwgaW50IGNvZGUsIFhtbE9iamVjdCBsb2NhdGlvbikKLSAgICB7Ci0gICAgICAgIFhtbEVycm9yIGVyciA9Ci0gICAgICAgICAgICBYbWxFcnJvci5mb3JPYmplY3QoCi0gICAgICAgICAgICAgIG1lc3NhZ2UsCi0gICAgICAgICAgICAgIFhtbEVycm9yLlNFVkVSSVRZX1dBUk5JTkcsCi0gICAgICAgICAgICAgIGxvY2F0aW9uKTsKLSAgICAgICAgZXJyb3JMaXN0ZW5lci5hZGQoZXJyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgYWRkSW5mbyhDb2xsZWN0aW9uIGVycm9yTGlzdGVuZXIsIFN0cmluZyBtZXNzYWdlKQotICAgIHsKLSAgICAgICAgWG1sRXJyb3IgZXJyID0gWG1sRXJyb3IuZm9yTWVzc2FnZShtZXNzYWdlLCBYbWxFcnJvci5TRVZFUklUWV9JTkZPKTsKLSAgICAgICAgZXJyb3JMaXN0ZW5lci5hZGQoZXJyKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgc2V0R2l2ZW5UeXBlU3lzdGVtTmFtZShTdHJpbmcgbmFtZSkKLSAgICAgICAgeyBfZ2l2ZW5TdHNOYW1lID0gbmFtZTsgfQotCi0gICAgLyoqCi0gICAgICogSW5pdGlhbGl6ZXIgZm9yIHJlZmVyZW5jZXMgdG8gdGhlIFNjaGVtYVR5cGVMb2FkZXIKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRUYXJnZXRTY2hlbWFUeXBlU3lzdGVtKFNjaGVtYVR5cGVTeXN0ZW1JbXBsIHRhcmdldCkKLSAgICAgICAgeyBfdGFyZ2V0ID0gdGFyZ2V0OyB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQWNjdW11bGF0ZXMgYSBzY2hlbWEgZGlnZXN0Li4uCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgYWRkU2NoZW1hRGlnZXN0KGJ5dGVbXSBkaWdlc3QpCi0gICAgewotICAgICAgICBpZiAoX25vRGlnZXN0KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKGRpZ2VzdCA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBfbm9EaWdlc3QgPSB0cnVlOwotICAgICAgICAgICAgX2RpZ2VzdCA9IG51bGw7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChfZGlnZXN0ID09IG51bGwpCi0gICAgICAgICAgICBfZGlnZXN0ID0gbmV3IGJ5dGVbMTI4LzhdOyAvLyAxMjggYml0cy4KLSAgICAgICAgaW50IGxlbiA9IF9kaWdlc3QubGVuZ3RoOwotICAgICAgICBpZiAoZGlnZXN0Lmxlbmd0aCA8IGxlbikKLSAgICAgICAgICAgIGxlbiA9IGRpZ2VzdC5sZW5ndGg7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspCi0gICAgICAgICAgICBfZGlnZXN0W2ldIF49IGRpZ2VzdFtpXTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogVGhlIFNjaGVtYVR5cGVTeXN0ZW0gd2hpY2ggd2UncmUgYnVpbGRpbmcgdHlwZXMgb24gYmVoYWxmIG9mLgotICAgICAqLwotICAgIHB1YmxpYyBTY2hlbWFUeXBlU3lzdGVtSW1wbCBzdHMoKQotICAgIHsKLSAgICAgICAgaWYgKF90YXJnZXQgIT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBfdGFyZ2V0OwotICAgICAgICAKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBfZ2l2ZW5TdHNOYW1lOwotICAgICAgICBpZiAobmFtZSA9PSBudWxsICYmIF9kaWdlc3QgIT0gbnVsbCkKLSAgICAgICAgICAgIG5hbWUgPSAicyIgKyBuZXcgU3RyaW5nKEhleEJpbi5lbmNvZGUoX2RpZ2VzdCkpOwotICAgICAgICAKLSAgICAgICAgX3RhcmdldCA9IG5ldyBTY2hlbWFUeXBlU3lzdGVtSW1wbChuYW1lKTsKLSAgICAgICAgcmV0dXJuIF90YXJnZXQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGUgZ2l2ZW4gVVJJIGlzIGEgbG9jYWwgZmlsZQotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIHNob3VsZERvd25sb2FkVVJJKFN0cmluZyB1cmlTdHJpbmcpCi0gICAgewotICAgICAgICBpZiAoX2RvaW5nRG93bmxvYWRzKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgaWYgKHVyaVN0cmluZyA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBVUkkgdXJpID0gbmV3IFVSSSh1cmlTdHJpbmcpOwotICAgICAgICAgICAgcmV0dXJuIHVyaS5nZXRTY2hlbWUoKS5lcXVhbHNJZ25vcmVDYXNlKCJmaWxlIik7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbml0aWFsaXplciBmb3IgY29tcGF0TWFwLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldE9wdGlvbnMoWG1sT3B0aW9ucyBvcHRpb25zKQotICAgIHsKLSAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOyAvLyBkZWZhdWx0cyBhcmUgYWxsIGZhbHNlLiAKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgX2NvbXBhdE1hcCA9IChNYXApb3B0aW9ucy5nZXQoWG1sT3B0aW9ucy5DT01QSUxFX1NVQlNUSVRVVEVfTkFNRVMpOwotICAgICAgICBfbm9VcGEgPSBvcHRpb25zLmhhc09wdGlvbihYbWxPcHRpb25zLkNPTVBJTEVfTk9fVVBBX1JVTEUpID8gdHJ1ZSA6Ci0gICAgICAgICAgICAgICAgISJ0cnVlIi5lcXVhbHMoU3lzdGVtLmdldFByb3BlcnR5KCJ4bWxiZWFuLnVuaXF1ZXBhcnRpY2xlYXR0cmlidXRpb24iLCAidHJ1ZSIpKTsKLSAgICAgICAgX25vUHZyID0gb3B0aW9ucy5oYXNPcHRpb24oWG1sT3B0aW9ucy5DT01QSUxFX05PX1BWUl9SVUxFKSA/IHRydWUgOgotICAgICAgICAgICAgICAgICEidHJ1ZSIuZXF1YWxzKFN5c3RlbS5nZXRQcm9wZXJ0eSgieG1sYmVhbi5wYXJ0aWNsZXJlc3RyaWN0aW9uIiwgInRydWUiKSk7Ci0gICAgICAgIF9kb2luZ0Rvd25sb2FkcyA9IG9wdGlvbnMuaGFzT3B0aW9uKFhtbE9wdGlvbnMuQ09NUElMRV9ET1dOTE9BRF9VUkxTKSA/IHRydWUgOgotICAgICAgICAgICAgICAgICJ0cnVlIi5lcXVhbHMoU3lzdGVtLmdldFByb3BlcnR5KCJ4bWxiZWFuLmRvd25sb2FkdXJscyIsICJmYWxzZSIpKTsKLSAgICAgICAgX2VudGl0eVJlc29sdmVyID0gKEVudGl0eVJlc29sdmVyKW9wdGlvbnMuZ2V0KFhtbE9wdGlvbnMuRU5USVRZX1JFU09MVkVSKTsKLSAgICAgICAgaWYgKF9lbnRpdHlSZXNvbHZlciAhPSBudWxsKQotICAgICAgICAgICAgX2RvaW5nRG93bmxvYWRzID0gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChvcHRpb25zLmhhc09wdGlvbihYbWxPcHRpb25zLkNPTVBJTEVfTURFRl9OQU1FU1BBQ0VTKSkKLSAgICAgICAgICAgIF9tZGVmTmFtZXNwYWNlcy5hZGRBbGwoKENvbGxlY3Rpb24pb3B0aW9ucy5nZXQoWG1sT3B0aW9ucy5DT01QSUxFX01ERUZfTkFNRVNQQUNFUykpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBNYXkgcmV0dXJuIG51bGwgaWYgdGhlcmUgaXMgbm8gY3VzdG9tIGVudGl0eSByZXNvbHZlci4KLSAgICAgKi8gCi0gICAgcHVibGljIEVudGl0eVJlc29sdmVyIGdldEVudGl0eVJlc29sdmVyKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfZW50aXR5UmVzb2x2ZXI7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIFRydWUgaWYgbm8gdW5pcXVlIHBhcnRpY2xlIGF0dHJpYnV0aW9uIG9wdGlvbiBpcyBzZXQKLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBub1VwYSgpCi0gICAgewotICAgICAgICByZXR1cm4gX25vVXBhOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBUcnVlIGlmIG5vIHBhcnRpY2xlIHZhbGlkIChyZXN0cmljaXRvbikgb3B0aW9uIGlzIHNldAotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIG5vUHZyKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfbm9QdnI7Ci0gICAgfQotICAgIAotCi0gICAgLyoqCi0gICAgICogSW50ZXJjZXB0cyBYTUwgbmFtZXMgYW5kIHRyYW5zbGF0ZXMgdGhlbQotICAgICAqIHRocm91Z2ggdGhlIGNvbXBhdCBtYXAsIGlmIGFueS4KLSAgICAgKgotICAgICAqIEFsc28gbG9va3MgZm9yIGEgZGVmYXVsdCBuYW1lc3BhY2UgZm9yIGdsb2JhbCBkZWZpbml0aW9ucy4KLSAgICAgKi8KLSAgICBwcml2YXRlIFFOYW1lIGNvbXBhdE5hbWUoUU5hbWUgbmFtZSwgU3RyaW5nIGNoYW1lbGVvbk5hbWVzcGFjZSkKLSAgICB7Ci0gICAgICAgIC8vIGZpcnN0IGNoZWNrIGZvciBhIGNoYW1lbGVvbk5hbWVzcGFjZSBuYW1lc3BhY2UKLSAgICAgICAgaWYgKG5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkubGVuZ3RoKCkgPT0gMCAmJiBjaGFtZWxlb25OYW1lc3BhY2UgIT0gbnVsbCAmJiBjaGFtZWxlb25OYW1lc3BhY2UubGVuZ3RoKCkgPiAwKQotICAgICAgICAgICAgbmFtZSA9IG5ldyBRTmFtZShjaGFtZWxlb25OYW1lc3BhY2UsIG5hbWUuZ2V0TG9jYWxQYXJ0KCkpOwotCi0gICAgICAgIGlmIChfY29tcGF0TWFwID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbmFtZTsKLQotICAgICAgICBRTmFtZSBzdWJzdCA9IChRTmFtZSlfY29tcGF0TWFwLmdldChuYW1lKTsKLSAgICAgICAgaWYgKHN1YnN0ID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbmFtZTsKLSAgICAgICAgcmV0dXJuIHN1YnN0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEluaXRpYWxpemVyIGZvciB0aGUgc2NoZW1hIGNvbmZpZyBvYmplY3QuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0U2NoZW1hQ29uZmlnKFNjaGVtYUNvbmZpZyBjb25maWcpCi0gICAgICAgIHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIF9jb25maWcgPSBjb25maWc7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogTG9va3MgdXAgcGFja2FnZSBvdmVycmlkZSBmb3IgYSBuYW1lc3BhY2UgVVJJCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRQYWNrYWdlT3ZlcnJpZGUoU3RyaW5nIG5hbWVzcGFjZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfY29uZmlnLmxvb2t1cFBhY2thZ2VGb3JOYW1lc3BhY2UobmFtZXNwYWNlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBMb29rcyB1cCBwYWNrYWdlIG92ZXJyaWRlIGZvciBhIG5hbWVzcGFjZSBVUkkKLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldEphdmFQcmVmaXgoU3RyaW5nIG5hbWVzcGFjZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfY29uZmlnLmxvb2t1cFByZWZpeEZvck5hbWVzcGFjZShuYW1lc3BhY2UpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIExvb2tzIHVwIHBhY2thZ2Ugb3ZlcnJpZGUgZm9yIGEgbmFtZXNwYWNlIFVSSQotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0SmF2YVN1ZmZpeChTdHJpbmcgbmFtZXNwYWNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9jb25maWcubG9va3VwU3VmZml4Rm9yTmFtZXNwYWNlKG5hbWVzcGFjZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogTG9va3MgdXAgY29uZmlndXJlZCBqYXZhIG5hbWUgZm9yIHRoZSBnaXZlbiBxbmFtZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldEphdmFuYW1lKFFOYW1lIHFuYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9jb25maWcubG9va3VwSmF2YW5hbWVGb3JRTmFtZShxbmFtZSk7Ci0gICAgfQotCi0gICAgLyogU1BFTExJTkdTID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY3J1bmNoTmFtZShRTmFtZSBuYW1lKQotICAgIHsKLSAgICAgICAgLy8gbG93ZXJjYXNlLCBhbmQgZHJvcCBuYW1lc3BhY2UuCi0gICAgICAgIHJldHVybiBuYW1lLmdldExvY2FsUGFydCgpLnRvTG93ZXJDYXNlKCk7Ci0gICAgfQotCi0gICAgdm9pZCBhZGRTcGVsbGluZyhRTmFtZSBuYW1lLCBTY2hlbWFDb21wb25lbnQgY29tcCkKLSAgICB7Ci0gICAgICAgIF9taXNzcGVsbGVkTmFtZXMucHV0KGNydW5jaE5hbWUobmFtZSksIGNvbXApOwotICAgIH0KLQotICAgIFNjaGVtYUNvbXBvbmVudCBmaW5kU3BlbGxpbmcoUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoU2NoZW1hQ29tcG9uZW50KV9taXNzcGVsbGVkTmFtZXMuZ2V0KGNydW5jaE5hbWUobmFtZSkpOwotICAgIH0KLQotICAgIC8qIE5BTUVTUEFDRVMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotICAgIHZvaWQgYWRkTmFtZXNwYWNlKFN0cmluZyB0YXJnZXROYW1lc3BhY2UpCi0gICAgewotICAgICAgICBfbmFtZXNwYWNlcy5hZGQodGFyZ2V0TmFtZXNwYWNlKTsKLSAgICB9Ci0KLSAgICBTdHJpbmdbXSBnZXROYW1lc3BhY2VzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoU3RyaW5nW10pX25hbWVzcGFjZXMudG9BcnJheShuZXcgU3RyaW5nW19uYW1lc3BhY2VzLnNpemUoKV0pOwotICAgIH0KLQotICAgIGJvb2xlYW4gbGlua2VyRGVmaW5lc05hbWVzcGFjZShTdHJpbmcgbmFtZXNwYWNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9pbXBvcnRpbmdMb2FkZXIuaXNOYW1lc3BhY2VEZWZpbmVkKG5hbWVzcGFjZSk7Ci0gICAgfQotCi0gICAgLyogVFlQRVMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLSAgICBTY2hlbWFUeXBlSW1wbCBmaW5kR2xvYmFsVHlwZShRTmFtZSBuYW1lLCBTdHJpbmcgY2hhbWVsZW9uTmFtZXNwYWNlKQotICAgIHsKLSAgICAgICAgbmFtZSA9IGNvbXBhdE5hbWUobmFtZSwgY2hhbWVsZW9uTmFtZXNwYWNlKTsKLSAgICAgICAgU2NoZW1hVHlwZUltcGwgcmVzdWx0ID0gKFNjaGVtYVR5cGVJbXBsKV9nbG9iYWxUeXBlcy5nZXQobmFtZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICAgIHJlc3VsdCA9IChTY2hlbWFUeXBlSW1wbClfaW1wb3J0aW5nTG9hZGVyLmZpbmRUeXBlKG5hbWUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBTY2hlbWFUeXBlSW1wbCBmaW5kUmVkZWZpbmVkR2xvYmFsVHlwZShRTmFtZSBuYW1lLCBTdHJpbmcgY2hhbWVsZW9uTmFtZXNwYWNlLCBRTmFtZSByZWRlZmluZWROYW1lKQotICAgIHsKLSAgICAgICAgbmFtZSA9IGNvbXBhdE5hbWUobmFtZSwgY2hhbWVsZW9uTmFtZXNwYWNlKTsKLSAgICAgICAgaWYgKG5hbWUuZXF1YWxzKHJlZGVmaW5lZE5hbWUpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKFNjaGVtYVR5cGVJbXBsKV9yZWRlZmluZWRHbG9iYWxUeXBlcy5nZXQobmFtZSk7Ci0gICAgICAgICAgICAvLyBCVUdCVUc6IHNob3VsZCBhbHNvIGxpbmsgYWdhaW5zdCBfaW1wb3J0aW5nTG9hZGVyLmZpbmRSZWRlZmluZWRUeXBlCi0gICAgICAgIH0KLSAgICAgICAgU2NoZW1hVHlwZUltcGwgcmVzdWx0ID0gKFNjaGVtYVR5cGVJbXBsKV9nbG9iYWxUeXBlcy5nZXQobmFtZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICAgIHJlc3VsdCA9IChTY2hlbWFUeXBlSW1wbClfaW1wb3J0aW5nTG9hZGVyLmZpbmRUeXBlKG5hbWUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHZvaWQgYWRkR2xvYmFsVHlwZShTY2hlbWFUeXBlSW1wbCB0eXBlLCBib29sZWFuIHJlZGVmaW5lZCkKLSAgICB7Ci0gICAgICAgIGlmICh0eXBlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFFOYW1lIG5hbWUgPSB0eXBlLmdldE5hbWUoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHJlZGVmaW5lZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoX3JlZGVmaW5lZEdsb2JhbFR5cGVzLmNvbnRhaW5zS2V5KG5hbWUpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpZ25vcmVNZGVmKG5hbWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IoIkR1cGxpY2F0ZSBnbG9iYWwgdHlwZTogIiArIFFOYW1lSGVscGVyLnByZXR0eShuYW1lKSwgWG1sRXJyb3JDb250ZXh0LkRVUExJQ0FURV9HTE9CQUxfVFlQRSwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgX3JlZGVmaW5lZEdsb2JhbFR5cGVzLnB1dChuYW1lLCB0eXBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoX2dsb2JhbFR5cGVzLmNvbnRhaW5zS2V5KG5hbWUpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpZ25vcmVNZGVmKG5hbWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IoIkR1cGxpY2F0ZSBnbG9iYWwgdHlwZTogIiArIFFOYW1lSGVscGVyLnByZXR0eShuYW1lKSwgWG1sRXJyb3JDb250ZXh0LkRVUExJQ0FURV9HTE9CQUxfVFlQRSwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIF9nbG9iYWxUeXBlcy5wdXQobmFtZSwgdHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZFNwZWxsaW5nKG5hbWUsIHR5cGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiBpZ25vcmVNZGVmKFFOYW1lIG5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gX21kZWZOYW1lc3BhY2VzLmNvbnRhaW5zKG5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpOwotICAgIH0KLQotICAgIFNjaGVtYVR5cGVbXSBnbG9iYWxUeXBlcygpCi0gICAgICAgIHsgcmV0dXJuIChTY2hlbWFUeXBlW10pX2dsb2JhbFR5cGVzLnZhbHVlcygpLnRvQXJyYXkobmV3IFNjaGVtYVR5cGVbX2dsb2JhbFR5cGVzLnNpemUoKV0pOyB9Ci0KLSAgICBTY2hlbWFUeXBlW10gcmVkZWZpbmVkR2xvYmFsVHlwZXMoKQotICAgICAgICB7IHJldHVybiAoU2NoZW1hVHlwZVtdKV9yZWRlZmluZWRHbG9iYWxUeXBlcy52YWx1ZXMoKS50b0FycmF5KG5ldyBTY2hlbWFUeXBlW19yZWRlZmluZWRHbG9iYWxUeXBlcy5zaXplKCldKTsgfQotICAgIAotICAgIC8qIERPQ1VNRU5UIFRZUEVTID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0gICAgU2NoZW1hVHlwZUltcGwgZmluZERvY3VtZW50VHlwZShRTmFtZSBuYW1lLCBTdHJpbmcgY2hhbWVsZW9uTmFtZXNwYWNlKQotICAgIHsKLSAgICAgICAgbmFtZSA9IGNvbXBhdE5hbWUobmFtZSwgY2hhbWVsZW9uTmFtZXNwYWNlKTsKLSAgICAgICAgU2NoZW1hVHlwZUltcGwgcmVzdWx0ID0gKFNjaGVtYVR5cGVJbXBsKV9kb2N1bWVudFR5cGVzLmdldChuYW1lKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKQotICAgICAgICAgICAgcmVzdWx0ID0gKFNjaGVtYVR5cGVJbXBsKV9pbXBvcnRpbmdMb2FkZXIuZmluZERvY3VtZW50VHlwZShuYW1lKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICB2b2lkIGFkZERvY3VtZW50VHlwZShTY2hlbWFUeXBlSW1wbCB0eXBlLCBRTmFtZSBuYW1lKQotICAgIHsKLSAgICAgICAgaWYgKF9kb2N1bWVudFR5cGVzLmNvbnRhaW5zS2V5KG5hbWUpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWlnbm9yZU1kZWYobmFtZSkpCi0gICAgICAgICAgICAgICAgZXJyb3IoIkR1cGxpY2F0ZSBnbG9iYWwgZWxlbWVudDogIiArIFFOYW1lSGVscGVyLnByZXR0eShuYW1lKSwgWG1sRXJyb3JDb250ZXh0LkRVUExJQ0FURV9HTE9CQUxfRUxFTUVOVCwgbnVsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgX2RvY3VtZW50VHlwZXMucHV0KG5hbWUsIHR5cGUpOwotICAgIH0KLQotICAgIFNjaGVtYVR5cGVbXSBkb2N1bWVudFR5cGVzKCkKLSAgICAgICAgeyByZXR1cm4gKFNjaGVtYVR5cGVbXSlfZG9jdW1lbnRUeXBlcy52YWx1ZXMoKS50b0FycmF5KG5ldyBTY2hlbWFUeXBlW19kb2N1bWVudFR5cGVzLnNpemUoKV0pOyB9Ci0KLSAgICAvKiBBVFRSSUJVVEUgVFlQRVMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLSAgICBTY2hlbWFUeXBlSW1wbCBmaW5kQXR0cmlidXRlVHlwZShRTmFtZSBuYW1lLCBTdHJpbmcgY2hhbWVsZW9uTmFtZXNwYWNlKQotICAgIHsKLSAgICAgICAgbmFtZSA9IGNvbXBhdE5hbWUobmFtZSwgY2hhbWVsZW9uTmFtZXNwYWNlKTsKLSAgICAgICAgU2NoZW1hVHlwZUltcGwgcmVzdWx0ID0gKFNjaGVtYVR5cGVJbXBsKV9hdHRyaWJ1dGVUeXBlcy5nZXQobmFtZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICAgIHJlc3VsdCA9IChTY2hlbWFUeXBlSW1wbClfaW1wb3J0aW5nTG9hZGVyLmZpbmRBdHRyaWJ1dGVUeXBlKG5hbWUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHZvaWQgYWRkQXR0cmlidXRlVHlwZShTY2hlbWFUeXBlSW1wbCB0eXBlLCBRTmFtZSBuYW1lKQotICAgIHsKLSAgICAgICAgaWYgKF9hdHRyaWJ1dGVUeXBlcy5jb250YWluc0tleShuYW1lKSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFpZ25vcmVNZGVmKG5hbWUpKQotICAgICAgICAgICAgICAgIGVycm9yKCJEdXBsaWNhdGUgZ2xvYmFsIGF0dHJpYnV0ZTogIiArIFFOYW1lSGVscGVyLnByZXR0eShuYW1lKSwgWG1sRXJyb3JDb250ZXh0LkRVUExJQ0FURV9HTE9CQUxfQVRUUklCVVRFLCBudWxsKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBfYXR0cmlidXRlVHlwZXMucHV0KG5hbWUsIHR5cGUpOwotICAgIH0KLQotICAgIFNjaGVtYVR5cGVbXSBhdHRyaWJ1dGVUeXBlcygpCi0gICAgICAgIHsgcmV0dXJuIChTY2hlbWFUeXBlW10pX2F0dHJpYnV0ZVR5cGVzLnZhbHVlcygpLnRvQXJyYXkobmV3IFNjaGVtYVR5cGVbX2F0dHJpYnV0ZVR5cGVzLnNpemUoKV0pOyB9Ci0KLSAgICAvKiBBVFRSSUJVVEVTID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotICAgIFNjaGVtYUdsb2JhbEF0dHJpYnV0ZUltcGwgZmluZEdsb2JhbEF0dHJpYnV0ZShRTmFtZSBuYW1lLCBTdHJpbmcgY2hhbWVsZW9uTmFtZXNwYWNlKQotICAgIHsKLSAgICAgICAgbmFtZSA9IGNvbXBhdE5hbWUobmFtZSwgY2hhbWVsZW9uTmFtZXNwYWNlKTsKLSAgICAgICAgU2NoZW1hR2xvYmFsQXR0cmlidXRlSW1wbCByZXN1bHQgPSAoU2NoZW1hR2xvYmFsQXR0cmlidXRlSW1wbClfZ2xvYmFsQXR0cmlidXRlcy5nZXQobmFtZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICAgIHJlc3VsdCA9IChTY2hlbWFHbG9iYWxBdHRyaWJ1dGVJbXBsKV9pbXBvcnRpbmdMb2FkZXIuZmluZEF0dHJpYnV0ZShuYW1lKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICB2b2lkIGFkZEdsb2JhbEF0dHJpYnV0ZShTY2hlbWFHbG9iYWxBdHRyaWJ1dGVJbXBsIGF0dHJpYnV0ZSkKLSAgICB7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgUU5hbWUgbmFtZSA9IGF0dHJpYnV0ZS5nZXROYW1lKCk7Ci0gICAgICAgICAgICBfZ2xvYmFsQXR0cmlidXRlcy5wdXQobmFtZSwgYXR0cmlidXRlKTsKLSAgICAgICAgICAgIGFkZFNwZWxsaW5nKG5hbWUsIGF0dHJpYnV0ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBTY2hlbWFHbG9iYWxBdHRyaWJ1dGVbXSBnbG9iYWxBdHRyaWJ1dGVzKCkKLSAgICAgICAgeyByZXR1cm4gKFNjaGVtYUdsb2JhbEF0dHJpYnV0ZVtdKV9nbG9iYWxBdHRyaWJ1dGVzLnZhbHVlcygpLnRvQXJyYXkobmV3IFNjaGVtYUdsb2JhbEF0dHJpYnV0ZVtfZ2xvYmFsQXR0cmlidXRlcy5zaXplKCldKTsgfQotCi0gICAgLyogRUxFTUVOVFMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLSAgICBTY2hlbWFHbG9iYWxFbGVtZW50SW1wbCBmaW5kR2xvYmFsRWxlbWVudChRTmFtZSBuYW1lLCBTdHJpbmcgY2hhbWVsZW9uTmFtZXNwYWNlKQotICAgIHsKLSAgICAgICAgbmFtZSA9IGNvbXBhdE5hbWUobmFtZSwgY2hhbWVsZW9uTmFtZXNwYWNlKTsKLSAgICAgICAgU2NoZW1hR2xvYmFsRWxlbWVudEltcGwgcmVzdWx0ID0gKFNjaGVtYUdsb2JhbEVsZW1lbnRJbXBsKV9nbG9iYWxFbGVtZW50cy5nZXQobmFtZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICAgIHJlc3VsdCA9IChTY2hlbWFHbG9iYWxFbGVtZW50SW1wbClfaW1wb3J0aW5nTG9hZGVyLmZpbmRFbGVtZW50KG5hbWUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHZvaWQgYWRkR2xvYmFsRWxlbWVudChTY2hlbWFHbG9iYWxFbGVtZW50SW1wbCBlbGVtZW50KQotICAgIHsKLSAgICAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgUU5hbWUgbmFtZSA9IGVsZW1lbnQuZ2V0TmFtZSgpOwotICAgICAgICAgICAgX2dsb2JhbEVsZW1lbnRzLnB1dChuYW1lLCBlbGVtZW50KTsKLSAgICAgICAgICAgIGFkZFNwZWxsaW5nKG5hbWUsIGVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgU2NoZW1hR2xvYmFsRWxlbWVudFtdIGdsb2JhbEVsZW1lbnRzKCkKLSAgICAgICAgeyByZXR1cm4gKFNjaGVtYUdsb2JhbEVsZW1lbnRbXSlfZ2xvYmFsRWxlbWVudHMudmFsdWVzKCkudG9BcnJheShuZXcgU2NoZW1hR2xvYmFsRWxlbWVudFtfZ2xvYmFsRWxlbWVudHMuc2l6ZSgpXSk7IH0KLQotICAgIC8qIEFUVFJJQlVURSBHUk9VUFMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0gICAgU2NoZW1hQXR0cmlidXRlR3JvdXBJbXBsIGZpbmRBdHRyaWJ1dGVHcm91cChRTmFtZSBuYW1lLCBTdHJpbmcgY2hhbWVsZW9uTmFtZXNwYWNlKQotICAgIHsKLSAgICAgICAgbmFtZSA9IGNvbXBhdE5hbWUobmFtZSwgY2hhbWVsZW9uTmFtZXNwYWNlKTsKLSAgICAgICAgU2NoZW1hQXR0cmlidXRlR3JvdXBJbXBsIHJlc3VsdCA9IChTY2hlbWFBdHRyaWJ1dGVHcm91cEltcGwpX2F0dHJpYnV0ZUdyb3Vwcy5nZXQobmFtZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICAgIHJlc3VsdCA9IChTY2hlbWFBdHRyaWJ1dGVHcm91cEltcGwpX2ltcG9ydGluZ0xvYWRlci5maW5kQXR0cmlidXRlR3JvdXAobmFtZSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgU2NoZW1hQXR0cmlidXRlR3JvdXBJbXBsIGZpbmRSZWRlZmluZWRBdHRyaWJ1dGVHcm91cChRTmFtZSBuYW1lLCBTdHJpbmcgY2hhbWVsZW9uTmFtZXNwYWNlLCBRTmFtZSByZWRlZmluaXRpb25Gb3IpCi0gICAgewotICAgICAgICBuYW1lID0gY29tcGF0TmFtZShuYW1lLCBjaGFtZWxlb25OYW1lc3BhY2UpOwotICAgICAgICBpZiAobmFtZS5lcXVhbHMocmVkZWZpbml0aW9uRm9yKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChTY2hlbWFBdHRyaWJ1dGVHcm91cEltcGwpX3JlZGVmaW5lZEF0dHJpYnV0ZUdyb3Vwcy5nZXQobmFtZSk7Ci0gICAgICAgICAgICAvLyBCVUdCVUc6IHNob3VsZCBhbHNvIGxpbmsgYWdhaW5zdCBfaW1wb3J0aW5nTG9hZGVyLmZpbmRSZWRlZmluZWRBdHRyaWJ1dGVHcm91cAotICAgICAgICB9Ci0gICAgICAgIFNjaGVtYUF0dHJpYnV0ZUdyb3VwSW1wbCByZXN1bHQgPSAoU2NoZW1hQXR0cmlidXRlR3JvdXBJbXBsKV9hdHRyaWJ1dGVHcm91cHMuZ2V0KG5hbWUpOwotICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpCi0gICAgICAgICAgICByZXN1bHQgPSAoU2NoZW1hQXR0cmlidXRlR3JvdXBJbXBsKV9pbXBvcnRpbmdMb2FkZXIuZmluZEF0dHJpYnV0ZUdyb3VwKG5hbWUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHZvaWQgYWRkQXR0cmlidXRlR3JvdXAoU2NoZW1hQXR0cmlidXRlR3JvdXBJbXBsIGF0dHJpYnV0ZUdyb3VwLCBib29sZWFuIHJlZGVmaW5lZCkKLSAgICB7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVHcm91cCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBRTmFtZSBuYW1lID0gYXR0cmlidXRlR3JvdXAuZ2V0TmFtZSgpOwotICAgICAgICAgICAgaWYgKHJlZGVmaW5lZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoX3JlZGVmaW5lZEF0dHJpYnV0ZUdyb3Vwcy5jb250YWluc0tleShuYW1lKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaWdub3JlTWRlZihuYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKCJEdXBsaWNhdGUgYXR0cmlidXRlIGdyb3VwOiAiICsgUU5hbWVIZWxwZXIucHJldHR5KG5hbWUpLCBYbWxFcnJvckNvbnRleHQuRFVQTElDQVRFX0dMT0JBTF9UWVBFLCBudWxsKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBfcmVkZWZpbmVkQXR0cmlidXRlR3JvdXBzLnB1dChuYW1lLCBhdHRyaWJ1dGVHcm91cCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKF9hdHRyaWJ1dGVHcm91cHMuY29udGFpbnNLZXkoIG5hbWUgKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaWdub3JlTWRlZihuYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKCJEdXBsaWNhdGUgYXR0cmlidXRlIGdyb3VwOiAiICsgUU5hbWVIZWxwZXIucHJldHR5KG5hbWUpLCBYbWxFcnJvckNvbnRleHQuRFVQTElDQVRFX0dMT0JBTF9UWVBFLCBudWxsKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgX2F0dHJpYnV0ZUdyb3Vwcy5wdXQoYXR0cmlidXRlR3JvdXAuZ2V0TmFtZSgpLCBhdHRyaWJ1dGVHcm91cCk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZFNwZWxsaW5nKGF0dHJpYnV0ZUdyb3VwLmdldE5hbWUoKSwgYXR0cmlidXRlR3JvdXApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIFNjaGVtYUF0dHJpYnV0ZUdyb3VwW10gYXR0cmlidXRlR3JvdXBzKCkKLSAgICAgICAgeyByZXR1cm4gKFNjaGVtYUF0dHJpYnV0ZUdyb3VwW10pX2F0dHJpYnV0ZUdyb3Vwcy52YWx1ZXMoKS50b0FycmF5KG5ldyBTY2hlbWFBdHRyaWJ1dGVHcm91cFtfYXR0cmlidXRlR3JvdXBzLnNpemUoKV0pOyB9Ci0KLSAgICBTY2hlbWFBdHRyaWJ1dGVHcm91cFtdIHJlZGVmaW5lZEF0dHJpYnV0ZUdyb3VwcygpCi0gICAgICAgIHsgcmV0dXJuIChTY2hlbWFBdHRyaWJ1dGVHcm91cFtdKV9yZWRlZmluZWRBdHRyaWJ1dGVHcm91cHMudmFsdWVzKCkudG9BcnJheShuZXcgU2NoZW1hQXR0cmlidXRlR3JvdXBbX3JlZGVmaW5lZEF0dHJpYnV0ZUdyb3Vwcy5zaXplKCldKTsgfQotCi0gICAgLyogTU9ERUwgR1JPVVBTID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLSAgICBTY2hlbWFNb2RlbEdyb3VwSW1wbCBmaW5kTW9kZWxHcm91cChRTmFtZSBuYW1lLCBTdHJpbmcgY2hhbWVsZW9uTmFtZXNwYWNlKQotICAgIHsKLSAgICAgICAgbmFtZSA9IGNvbXBhdE5hbWUobmFtZSwgY2hhbWVsZW9uTmFtZXNwYWNlKTsKLSAgICAgICAgU2NoZW1hTW9kZWxHcm91cEltcGwgcmVzdWx0ID0gKFNjaGVtYU1vZGVsR3JvdXBJbXBsKV9tb2RlbEdyb3Vwcy5nZXQobmFtZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICAgIHJlc3VsdCA9IChTY2hlbWFNb2RlbEdyb3VwSW1wbClfaW1wb3J0aW5nTG9hZGVyLmZpbmRNb2RlbEdyb3VwKG5hbWUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIFNjaGVtYU1vZGVsR3JvdXBJbXBsIGZpbmRSZWRlZmluZWRNb2RlbEdyb3VwKFFOYW1lIG5hbWUsIFN0cmluZyBjaGFtZWxlb25OYW1lc3BhY2UsIFFOYW1lIHJlZGVmaW5pdGlvbkZvcikKLSAgICB7Ci0gICAgICAgIG5hbWUgPSBjb21wYXROYW1lKG5hbWUsIGNoYW1lbGVvbk5hbWVzcGFjZSk7Ci0gICAgICAgIGlmIChuYW1lLmVxdWFscyhyZWRlZmluaXRpb25Gb3IpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKFNjaGVtYU1vZGVsR3JvdXBJbXBsKV9yZWRlZmluZWRNb2RlbEdyb3Vwcy5nZXQobmFtZSk7Ci0gICAgICAgICAgICAvLyBCVUdCVUc6IHNob3VsZCBhbHNvIGxpbmsgYWdhaW5zdCBfaW1wb3J0aW5nTG9hZGVyLmZpbmRSZWRlZmluZWRNb2RlbEdyb3VwCi0gICAgICAgIH0KLSAgICAgICAgU2NoZW1hTW9kZWxHcm91cEltcGwgcmVzdWx0ID0gKFNjaGVtYU1vZGVsR3JvdXBJbXBsKV9tb2RlbEdyb3Vwcy5nZXQobmFtZSk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICAgIHJlc3VsdCA9IChTY2hlbWFNb2RlbEdyb3VwSW1wbClfaW1wb3J0aW5nTG9hZGVyLmZpbmRNb2RlbEdyb3VwKG5hbWUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHZvaWQgYWRkTW9kZWxHcm91cChTY2hlbWFNb2RlbEdyb3VwSW1wbCBtb2RlbEdyb3VwLCBib29sZWFuIHJlZGVmaW5lZCkKLSAgICB7Ci0gICAgICAgIGlmIChtb2RlbEdyb3VwICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFFOYW1lIG5hbWUgPSBtb2RlbEdyb3VwLmdldE5hbWUoKTsKLSAgICAgICAgICAgIGlmIChyZWRlZmluZWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKF9yZWRlZmluZWRNb2RlbEdyb3Vwcy5jb250YWluc0tleShuYW1lKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaWdub3JlTWRlZihuYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKCJEdXBsaWNhdGUgbW9kZWwgZ3JvdXA6ICIgKyBRTmFtZUhlbHBlci5wcmV0dHkobmFtZSksIFhtbEVycm9yQ29udGV4dC5EVVBMSUNBVEVfR0xPQkFMX1RZUEUsIG51bGwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIF9yZWRlZmluZWRNb2RlbEdyb3Vwcy5wdXQobmFtZSwgbW9kZWxHcm91cCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKF9tb2RlbEdyb3Vwcy5jb250YWluc0tleShuYW1lKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaWdub3JlTWRlZihuYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKCJEdXBsaWNhdGUgbW9kZWwgZ3JvdXA6ICIgKyBRTmFtZUhlbHBlci5wcmV0dHkobmFtZSksIFhtbEVycm9yQ29udGV4dC5EVVBMSUNBVEVfR0xPQkFMX1RZUEUsIG51bGwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBfbW9kZWxHcm91cHMucHV0KG1vZGVsR3JvdXAuZ2V0TmFtZSgpLCBtb2RlbEdyb3VwKTsKLSAgICAgICAgICAgICAgICAgICAgYWRkU3BlbGxpbmcobW9kZWxHcm91cC5nZXROYW1lKCksIG1vZGVsR3JvdXApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIFNjaGVtYU1vZGVsR3JvdXBbXSBtb2RlbEdyb3VwcygpCi0gICAgICAgIHsgcmV0dXJuIChTY2hlbWFNb2RlbEdyb3VwW10pX21vZGVsR3JvdXBzLnZhbHVlcygpLnRvQXJyYXkobmV3IFNjaGVtYU1vZGVsR3JvdXBbX21vZGVsR3JvdXBzLnNpemUoKV0pOyB9Ci0gICAgCi0gICAgU2NoZW1hTW9kZWxHcm91cFtdIHJlZGVmaW5lZE1vZGVsR3JvdXBzKCkKLSAgICAgICAgeyByZXR1cm4gKFNjaGVtYU1vZGVsR3JvdXBbXSlfcmVkZWZpbmVkTW9kZWxHcm91cHMudmFsdWVzKCkudG9BcnJheShuZXcgU2NoZW1hTW9kZWxHcm91cFtfcmVkZWZpbmVkTW9kZWxHcm91cHMuc2l6ZSgpXSk7IH0KLQotICAgIC8qIElERU5USVRZIENPTlNUUkFJTlRTID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0gICAgU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50SW1wbCBmaW5kSWRDb25zdHJhaW50KFFOYW1lIG5hbWUsIFN0cmluZyBjaGFtZWxlb25OYW1lc3BhY2UpCi0gICAgewotICAgICAgICBuYW1lID0gY29tcGF0TmFtZShuYW1lLCBjaGFtZWxlb25OYW1lc3BhY2UpOwotICAgICAgICByZXR1cm4gKFNjaGVtYUlkZW50aXR5Q29uc3RyYWludEltcGwpX2lkQ29uc3RyYWludHMuZ2V0KG5hbWUpOwotICAgIH0KLQotICAgIHZvaWQgYWRkSWRDb25zdHJhaW50KFNjaGVtYUlkZW50aXR5Q29uc3RyYWludEltcGwgaWRjKQotICAgIHsKLSAgICAgICAgaWYgKGlkYyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBfaWRDb25zdHJhaW50cy5wdXQoaWRjLmdldE5hbWUoKSwgaWRjKTsKLSAgICAgICAgICAgIGFkZFNwZWxsaW5nKGlkYy5nZXROYW1lKCksIGlkYyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnRJbXBsW10gaWRDb25zdHJhaW50cygpCi0gICAgICAgIHsgcmV0dXJuIChTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnRJbXBsW10pX2lkQ29uc3RyYWludHMudmFsdWVzKCkudG9BcnJheShuZXcgU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50SW1wbFtfaWRDb25zdHJhaW50cy5zaXplKCldKTsgfQotCi0gICAgLyogUkVDVVJTSU9OIEFWT0lEQU5DRSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0gICAgYm9vbGVhbiBpc1Byb2Nlc3NpbmcoT2JqZWN0IG9iaikKLSAgICB7Ci0gICAgICAgIHJldHVybiBfcHJvY2Vzc2luZ0dyb3Vwcy5jb250YWlucyhvYmopOwotICAgIH0KLQotICAgIHZvaWQgc3RhcnRQcm9jZXNzaW5nKE9iamVjdCBvYmopCi0gICAgewotICAgICAgICBhc3NlcnQoIV9wcm9jZXNzaW5nR3JvdXBzLmNvbnRhaW5zKG9iaikpOwotICAgICAgICBfcHJvY2Vzc2luZ0dyb3Vwcy5hZGQob2JqKTsKLSAgICB9Ci0KLSAgICB2b2lkIGZpbmlzaFByb2Nlc3NpbmcoT2JqZWN0IG9iaikKLSAgICB7Ci0gICAgICAgIGFzc2VydChfcHJvY2Vzc2luZ0dyb3Vwcy5jb250YWlucyhvYmopKTsKLSAgICAgICAgX3Byb2Nlc3NpbmdHcm91cHMucmVtb3ZlKG9iaik7Ci0gICAgfQotCi0gICAgLyogSkFWQUlaQVRJT04gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLSAgICBNYXAgdHlwZXNCeUNsYXNzbmFtZSgpCi0gICAgICAgIHsgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZU1hcChfdHlwZXNCeUNsYXNzbmFtZSk7IH0KLQotICAgIHZvaWQgYWRkQ2xhc3NuYW1lKFN0cmluZyBjbGFzc25hbWUsIFNjaGVtYVR5cGUgdHlwZSkKLSAgICAgICAgeyBfdHlwZXNCeUNsYXNzbmFtZS5wdXQoY2xhc3NuYW1lLCB0eXBlKTsgfQotCi0KLQotICAgIC8qKgotICAgICAqIFN0YWNrIG1hbmFnZW1lbnQgaWYgKGhlYXZlbiBoZWxwIHVzKSB3ZSBldmVyIG5lZWQgdG8gZG8KLSAgICAgKiBuZXN0ZWQgY29tcGlsYXRpb24gb2Ygc2NoZW1hIHR5cGUgc3lzdGVtLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIFN0c2NTdGFjawotICAgIHsKLSAgICAgICAgU3RzY1N0YXRlIGN1cnJlbnQ7Ci0gICAgICAgIEFycmF5TGlzdCBzdGFjayA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgZmluYWwgU3RzY1N0YXRlIHB1c2goKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGFjay5hZGQoY3VycmVudCk7Ci0gICAgICAgICAgICBjdXJyZW50ID0gbmV3IFN0c2NTdGF0ZSgpOwotICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWwgdm9pZCBwb3AoKQotICAgICAgICB7Ci0gICAgICAgICAgICBjdXJyZW50ID0gKFN0c2NTdGF0ZSlzdGFjay5nZXQoc3RhY2suc2l6ZSgpIC0gMSk7Ci0gICAgICAgICAgICBzdGFjay5yZW1vdmUoc3RhY2suc2l6ZSgpIC0gMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBUaHJlYWRMb2NhbCBzdHNjU3RhY2sgPSBuZXcgVGhyZWFkTG9jYWwoKQotICAgIHsKLSAgICAgICAgcHJvdGVjdGVkIE9iamVjdCBpbml0aWFsVmFsdWUoKSB7IHJldHVybiBuZXcgU3RzY1N0YWNrKCk7IH0KLSAgICB9OwotCi0gICAgcHVibGljIHN0YXRpYyBTdHNjU3RhdGUgc3RhcnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgoU3RzY1N0YWNrKXN0c2NTdGFjay5nZXQoKSkucHVzaCgpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RzY1N0YXRlIGdldCgpCi0gICAgewotICAgICAgICByZXR1cm4gKChTdHNjU3RhY2spc3RzY1N0YWNrLmdldCgpKS5jdXJyZW50OwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBlbmQoKQotICAgIHsKLSAgICAgICAgKChTdHNjU3RhY2spc3RzY1N0YWNrLmdldCgpKS5wb3AoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBYbWxWYWx1ZVJlZiBYTUxTVFJfUFJFU0VSVkUgPSBidWlsZFN0cmluZygicHJlc2VydmUiKTsKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBYbWxWYWx1ZVJlZiBYTUxTVFJfUkVQTEFDRSA9IGJ1aWxkU3RyaW5nKCJwcmVzZXJ2ZSIpOwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFhtbFZhbHVlUmVmIFhNTFNUUl9DT0xMQVBTRSA9IGJ1aWxkU3RyaW5nKCJwcmVzZXJ2ZSIpOwotCi0gICAgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGVbXSBFTVBUWV9TVF9BUlJBWSA9IG5ldyBTY2hlbWFUeXBlWzBdOwotICAgIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlLlJlZltdIEVNUFRZX1NUUkVGX0FSUkFZID0gbmV3IFNjaGVtYVR5cGUuUmVmWzBdOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgWG1sVmFsdWVSZWZbXSBGQUNFVFNfTk9ORSA9IG5ldyBYbWxWYWx1ZVJlZltdCi0gICAgICAgIHsgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwKLSAgICAgICAgICBudWxsLCBudWxsLCBudWxsIH07Ci0KLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBib29sZWFuW10gRklYRURfRkFDRVRTX05PTkUgPSBuZXcgYm9vbGVhbltdCi0gICAgICAgIHsgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKLSAgICAgICAgICBmYWxzZSwgZmFsc2UsIGZhbHNlIH07Ci0KLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBYbWxWYWx1ZVJlZltdIEZBQ0VUU19XU19DT0xMQVBTRSA9IG5ldyBYbWxWYWx1ZVJlZltdCi0gICAgICAgIHsgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwKLSAgICAgICAgICBidWlsZF93c3N0cmluZyhTY2hlbWFUeXBlLldTX0NPTExBUFNFKSwgbnVsbCwgbnVsbCB9OwotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgYm9vbGVhbltdIEZJWEVEX0ZBQ0VUU19XUyA9IG5ldyBib29sZWFuW10KLSAgICAgICAgeyBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAotICAgICAgICAgIHRydWUsIGZhbHNlLCBmYWxzZSB9OwotCi0gICAgZmluYWwgc3RhdGljIFhtbFZhbHVlUmVmW10gRkFDRVRTX1VOSU9OID0gRkFDRVRTX05PTkU7Ci0gICAgZmluYWwgc3RhdGljIGJvb2xlYW5bXSBGSVhFRF9GQUNFVFNfVU5JT04gPSBGSVhFRF9GQUNFVFNfTk9ORTsKLSAgICBmaW5hbCBzdGF0aWMgWG1sVmFsdWVSZWZbXSBGQUNFVFNfTElTVCA9IEZBQ0VUU19XU19DT0xMQVBTRTsKLSAgICBmaW5hbCBzdGF0aWMgYm9vbGVhbltdIEZJWEVEX0ZBQ0VUU19MSVNUID0gRklYRURfRkFDRVRTX1dTOwotCi0gICAgc3RhdGljIFhtbFZhbHVlUmVmIGJ1aWxkX3dzc3RyaW5nKGludCB3c3IpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHdzcikKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLldTX1BSRVNFUlZFOgotICAgICAgICAgICAgICAgIHJldHVybiBYTUxTVFJfUFJFU0VSVkU7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuV1NfUkVQTEFDRToKLSAgICAgICAgICAgICAgICByZXR1cm4gWE1MU1RSX1JFUExBQ0U7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuV1NfQ09MTEFQU0U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFhNTFNUUl9DT0xMQVBTRTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgWG1sVmFsdWVSZWYgYnVpbGRTdHJpbmcoU3RyaW5nIHN0cikKLSAgICB7Ci0gICAgICAgIGlmIChzdHIgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxTdHJpbmdJbXBsIGkgPSBuZXcgWG1sU3RyaW5nSW1wbCgpOwotICAgICAgICAgICAgaS5zZXQoc3RyKTsKLSAgICAgICAgICAgIGkuc2V0SW1tdXRhYmxlKCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFhtbFZhbHVlUmVmKGkpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChYbWxWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBub3RGb3VuZEVycm9yKFFOYW1lIGl0ZW1OYW1lLCBpbnQgY29kZSwgWG1sT2JqZWN0IGxvYykKLSAgICB7Ci0gICAgICAgIFN0cmluZyBiYXNpY01lc3NhZ2U7Ci0KLSAgICAgICAgc3dpdGNoIChjb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFhtbEVycm9yQ29udGV4dC5UWVBFX05PVF9GT1VORDoKLSAgICAgICAgICAgICAgICBiYXNpY01lc3NhZ2UgPSAiVHlwZSAiICsgUU5hbWVIZWxwZXIucHJldHR5KGl0ZW1OYW1lKSArICIgbm90IGZvdW5kLiI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFhtbEVycm9yQ29udGV4dC5FTEVNRU5UX1JFRl9OT1RfRk9VTkQ6Ci0gICAgICAgICAgICAgICAgYmFzaWNNZXNzYWdlID0gIkVsZW1lbnQgIiArIFFOYW1lSGVscGVyLnByZXR0eShpdGVtTmFtZSkgKyAiIG5vdCBmb3VuZC4iOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBYbWxFcnJvckNvbnRleHQuQVRUUklCVVRFX1JFRl9OT1RfRk9VTkQ6Ci0gICAgICAgICAgICAgICAgYmFzaWNNZXNzYWdlID0gIkF0dHJpYnV0ZSAiICsgUU5hbWVIZWxwZXIucHJldHR5KGl0ZW1OYW1lKSArICIgbm90IGZvdW5kLiI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFhtbEVycm9yQ29udGV4dC5NT0RFTF9HUk9VUF9OT1RfRk9VTkQ6Ci0gICAgICAgICAgICAgICAgYmFzaWNNZXNzYWdlID0gIk1vZGVsIGdyb3VwICIgKyBRTmFtZUhlbHBlci5wcmV0dHkoaXRlbU5hbWUpICsgIiBub3QgZm91bmQuIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgWG1sRXJyb3JDb250ZXh0LkFUVFJJQlVURV9HUk9VUF9OT1RfRk9VTkQ6Ci0gICAgICAgICAgICAgICAgYmFzaWNNZXNzYWdlID0gIkF0dHJpYnV0ZSBncm91cCAiICsgUU5hbWVIZWxwZXIucHJldHR5KGl0ZW1OYW1lKSArICIgbm90IGZvdW5kLiI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFhtbEVycm9yQ29udGV4dC5JRENfTk9UX0ZPVU5EOgotICAgICAgICAgICAgICAgIGJhc2ljTWVzc2FnZSA9ICJJZGVudGl0eSBjb25zdHJhaW50ICciICsgUU5hbWVIZWxwZXIucHJldHR5KGl0ZW1OYW1lKSArICInIG5vdCBmb3VuZC4iOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UpOwotICAgICAgICAgICAgICAgIGJhc2ljTWVzc2FnZSA9ICJEZWZpbml0aW9uICIgKyBRTmFtZUhlbHBlci5wcmV0dHkoaXRlbU5hbWUpICsgIiBub3QgZm91bmQuIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBoZWxwZnVsTWVzc2FnZSA9ICIiOwotICAgICAgICBTY2hlbWFDb21wb25lbnQgZm91bmRDb21wb25lbnQgPSBmaW5kU3BlbGxpbmcoaXRlbU5hbWUpOwotICAgICAgICBRTmFtZSBuYW1lOwotICAgICAgICBpZiAoZm91bmRDb21wb25lbnQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgbmFtZSA9IGZvdW5kQ29tcG9uZW50LmdldE5hbWUoKTsKLSAgICAgICAgICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHNvdXJjZU5hbWUgPSBudWxsOwotICAgICAgICAgICAgICAgIHN3aXRjaCAoZm91bmRDb21wb25lbnQuZ2V0Q29tcG9uZW50VHlwZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFDb21wb25lbnQuVFlQRToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5hbWUgPSAoKFNjaGVtYVR5cGUpZm91bmRDb21wb25lbnQpLmdldFNvdXJjZU5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYUNvbXBvbmVudC5FTEVNRU5UOgotICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTmFtZSA9ICgoU2NoZW1hR2xvYmFsRWxlbWVudClmb3VuZENvbXBvbmVudCkuZ2V0U291cmNlTmFtZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hQ29tcG9uZW50LkFUVFJJQlVURToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5hbWUgPSAoKFNjaGVtYUdsb2JhbEF0dHJpYnV0ZSlmb3VuZENvbXBvbmVudCkuZ2V0U291cmNlTmFtZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFN0cmluZyBzb3VyY2UgPSAiIjsKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlTmFtZSAhPSBudWxsKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc291cmNlID0gIiAoaW4gIiArICBzb3VyY2VOYW1lLnN1YnN0cmluZyhzb3VyY2VOYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKSArICIpIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG5hbWUuZXF1YWxzKGl0ZW1OYW1lKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZm91bmRDb21wb25lbnQuZ2V0Q29tcG9uZW50VHlwZSgpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYUNvbXBvbmVudC5UWVBFOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBmdWxNZXNzYWdlID0gIiAgRG8geW91IG1lYW4gdG8gcmVmZXIgdG8gdGhlIHR5cGUgd2l0aCB0aGF0IG5hbWUiICsgc291cmNlICsgIj8iOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFDb21wb25lbnQuRUxFTUVOVDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwZnVsTWVzc2FnZSA9ICIgIERvIHlvdSBtZWFuIHRvIHJlZmVyIHRvIHRoZSBlbGVtZW50IHdpdGggdGhhdCBuYW1lIiArIHNvdXJjZSArICI/IjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hQ29tcG9uZW50LkFUVFJJQlVURToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwZnVsTWVzc2FnZSA9ICIgIERvIHlvdSBtZWFuIHRvIHJlZmVyIHRvIHRoZSBhdHRyaWJ1dGUgd2l0aCB0aGF0IG5hbWUiICsgc291cmNlICsgIj8iOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFDb21wb25lbnQuQVRUUklCVVRFX0dST1VQOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBmdWxNZXNzYWdlID0gIiAgRG8geW91IG1lYW4gdG8gcmVmZXIgdG8gdGhlIGF0dHJpYnV0ZSBncm91cCB3aXRoIHRoYXQgbmFtZSIgKyBzb3VyY2UgKyAiPyI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYUNvbXBvbmVudC5NT0RFTF9HUk9VUDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwZnVsTWVzc2FnZSA9ICIgIERvIHlvdSBtZWFuIHRvIHJlZmVyIHRvIHRoZSBtb2RlbCBncm91cCB3aXRoIHRoYXQgbmFtZSIgKyBzb3VyY2UgKyAiPyI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChmb3VuZENvbXBvbmVudC5nZXRDb21wb25lbnRUeXBlKCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hQ29tcG9uZW50LlRZUEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscGZ1bE1lc3NhZ2UgPSAiICBEbyB5b3UgbWVhbiB0byByZWZlciB0byB0aGUgdHlwZSBuYW1lZCAiICsgUU5hbWVIZWxwZXIucHJldHR5KG5hbWUpICsgc291cmNlICsgIj8iOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFDb21wb25lbnQuRUxFTUVOVDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwZnVsTWVzc2FnZSA9ICIgIERvIHlvdSBtZWFuIHRvIHJlZmVyIHRvIHRoZSBlbGVtZW50IG5hbWVkICIgKyBRTmFtZUhlbHBlci5wcmV0dHkobmFtZSkgKyBzb3VyY2UgKyAiPyI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYUNvbXBvbmVudC5BVFRSSUJVVEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscGZ1bE1lc3NhZ2UgPSAiICBEbyB5b3UgbWVhbiB0byByZWZlciB0byB0aGUgYXR0cmlidXRlIG5hbWVkICIgKyBRTmFtZUhlbHBlci5wcmV0dHkobmFtZSkgKyBzb3VyY2UgKyAiPyI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYUNvbXBvbmVudC5BVFRSSUJVVEVfR1JPVVA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscGZ1bE1lc3NhZ2UgPSAiICBEbyB5b3UgbWVhbiB0byByZWZlciB0byB0aGUgYXR0cmlidXRlIGdyb3VwIG5hbWVkICIgKyBRTmFtZUhlbHBlci5wcmV0dHkobmFtZSkgKyBzb3VyY2UgKyAiPyI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYUNvbXBvbmVudC5NT0RFTF9HUk9VUDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwZnVsTWVzc2FnZSA9ICIgIERvIHlvdSBtZWFuIHRvIHJlZmVyIHRvIHRoZSBtb2RlbCBncm91cCBuYW1lZCAiICsgUU5hbWVIZWxwZXIucHJldHR5KG5hbWUpICsgc291cmNlICsgIj8iOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZXJyb3IoYmFzaWNNZXNzYWdlICsgaGVscGZ1bE1lc3NhZ2UsIGNvZGUsIGxvYyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUHJvZHVjZXMgdGhlICJzb3VyY2VOYW1lIiAodG8gYmUgdXNlZCB3aXRoaW4gdGhlIHNjaGVtYSBwcm9qZWN0Ci0gICAgICogc291cmNlIGZpbGUgY29waWVzKSBmcm9tIHRoZSBVUkkgb2YgdGhlIG9yaWdpbmFsIHNvdXJjZS4KLSAgICAgKgotICAgICAqIFJldHVybnMgbnVsbCBpZiBub25lLgotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgc291cmNlTmFtZUZvclVyaShTdHJpbmcgdXJpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChTdHJpbmcpX3NvdXJjZUZvclVyaS5nZXQodXJpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB3aG9sZSBzb3VyY2VDb3B5TWFwLCBtYXBwaW5nIFVSSSdzIHRoYXQgaGF2ZQotICAgICAqIGJlZW4gcmVhZCB0byAic291cmNlTmFtZSIgbG9jYWwgbmFtZXMgdGhhdCBoYXZlIGJlZW4gdXNlZAotICAgICAqIHRvIHRhZyB0aGUgdHlwZXMuCi0gICAgICovCi0gICAgcHVibGljIE1hcCBzb3VyY2VDb3B5TWFwKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVNYXAoX3NvdXJjZUZvclVyaSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhlIGJhc2UgVVJJIHRvIHVzZSBmb3IgbmljZSBmaWxlbmFtZXMgd2hlbiBzYXZpbmcgc291cmNlcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRCYXNlVXJpKFVSSSB1cmkpCi0gICAgewotICAgICAgICBfYmFzZVVSSSA9IHVyaTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgUFJPSkVDVF9VUkxfUFJFRklYID0gInByb2plY3Q6Ly9sb2NhbCI7Ci0gICAgCi0gICAgcHVibGljIFN0cmluZyByZWxhdGl2aXplKFN0cmluZyB1cmkpCi0gICAgewotICAgICAgICByZXR1cm4gcmVsYXRpdml6ZSh1cmksIGZhbHNlKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIFN0cmluZyBjb21wdXRlU2F2ZWRGaWxlbmFtZShTdHJpbmcgdXJpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlbGF0aXZpemUodXJpLCB0cnVlKTsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBTdHJpbmcgcmVsYXRpdml6ZShTdHJpbmcgdXJpLCBib29sZWFuIGZvclNhdmVkRmlsZW5hbWUpCi0gICAgewotICAgICAgICBpZiAodXJpID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAvLyBkZWFsIHdpdGggdGhpbmdzIHRoYXQgZG8gbm90IGxvb2sgbGlrZSBhYnNvbHV0ZSB1cmlzCi0gICAgICAgIGlmICh1cmkuc3RhcnRzV2l0aCgiLyIpKQotICAgICAgICB7Ci0gICAgICAgICAgICB1cmkgPSBQUk9KRUNUX1VSTF9QUkVGSVggKyB1cmkucmVwbGFjZSgnXFwnLCAnLycpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgLy8gbG9va3MgbGlrZSBhIFVSTD8KLSAgICAgICAgICAgIGludCBjb2xvbiA9IHVyaS5pbmRleE9mKCc6Jyk7Ci0gICAgICAgICAgICBpZiAoY29sb24gPD0gMSB8fCAhdXJpLnN1YnN0cmluZygwLCBjb2xvbikubWF0Y2hlcygiXlxcdyskIikpCi0gICAgICAgICAgICAgICAgdXJpID0gUFJPSkVDVF9VUkxfUFJFRklYICsgIi8iICsgdXJpLnJlcGxhY2UoJ1xcJywgJy8nKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG5vdyByZWxhdGl2aXplIGFnYWluc3QgdGhhdC4uLgotICAgICAgICBpZiAoX2Jhc2VVUkkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVVJJIHJlbGF0aXZlID0gX2Jhc2VVUkkucmVsYXRpdml6ZShuZXcgVVJJKHVyaSkpOwotICAgICAgICAgICAgICAgIGlmICghcmVsYXRpdmUuaXNBYnNvbHV0ZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVsYXRpdmUudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHVyaSA9IHJlbGF0aXZlLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoVVJJU3ludGF4RXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghZm9yU2F2ZWRGaWxlbmFtZSkKLSAgICAgICAgICAgIHJldHVybiB1cmk7Ci0KLSAgICAgICAgaW50IGxhc3RzbGFzaCA9IHVyaS5sYXN0SW5kZXhPZignLycpOwotICAgICAgICBTdHJpbmcgZGlyID0gUU5hbWVIZWxwZXIuaGV4c2FmZShsYXN0c2xhc2ggPT0gLTEgPyAiIiA6IHVyaS5zdWJzdHJpbmcoMCwgbGFzdHNsYXNoKSk7Ci0gICAgICAgIHJldHVybiBkaXIgKyAiLyIgKyB1cmkuc3Vic3RyaW5nKGxhc3RzbGFzaCArIDEpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIE5vdGVzIGFub3RoZXIgVVJJIHRoYXQgaGFzIGJlZW4gY29uc3VtZWQgZHVyaW5nIGNvbXBpbGF0aW9uCi0gICAgICogKHRoaXMgaXMgdGhlIFVSSSB0aGF0IGlzIGluIHRoZSBkb2N1bWVudCAuTkFNRSBwcm9wZXJ0eSkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBhZGRTb3VyY2VVcmkoU3RyaW5nIHVyaSwgU3RyaW5nIG5hbWVUb1VzZSkKLSAgICB7Ci0gICAgICAgIGlmICh1cmkgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAobmFtZVRvVXNlID09IG51bGwpCi0gICAgICAgICAgICBuYW1lVG9Vc2UgPSBjb21wdXRlU2F2ZWRGaWxlbmFtZSh1cmkpOwotCi0gICAgICAgIF9zb3VyY2VGb3JVcmkucHV0KHVyaSwgbmFtZVRvVXNlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBlcnJvciBsaXN0ZW5lciBiZWluZyBmaWxsZWQgaW4gZHVyaW5nIHRoaXMgY29tcGlsYXRpb24KLSAgICAgKi8KLSAgICBwdWJsaWMgQ29sbGVjdGlvbiBnZXRFcnJvckxpc3RlbmVyKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfZXJyb3JMaXN0ZW5lcjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBzY2hlbWEgdHlwZSBsb2FkZXIgdG8gdXNlIGZvciBwcm9jZXNzaW5nIHM0cwotICAgICAqLwotICAgIHB1YmxpYyBTY2hlbWFUeXBlTG9hZGVyIGdldFM0U0xvYWRlcigpCi0gICAgewotICAgICAgICByZXR1cm4gX3M0c2xvYWRlcjsKLSAgICB9Ci0KLSAgICBNYXAgX3NvdXJjZUZvclVyaSA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgVVJJIF9iYXNlVVJJID0gVVJJLmNyZWF0ZShQUk9KRUNUX1VSTF9QUkVGSVggKyAiLyIpOwotICAgIFNjaGVtYVR5cGVMb2FkZXIgX3M0c2xvYWRlciA9IFhtbEJlYW5zLnR5cGVMb2FkZXJGb3JDbGFzc0xvYWRlcihTY2hlbWFEb2N1bWVudC5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1N0c2NUcmFuc2xhdG9yLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9TdHNjVHJhbnNsYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzE2NmQ1Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc2NoZW1hL1N0c2NUcmFuc2xhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTI2ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnNjaGVtYTsKLQotaW1wb3J0IGphdmEudXRpbC4qOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotCi1pbXBvcnQgb3JnLnczLngyMDAxLnhtbFNjaGVtYS4qOwotaW1wb3J0IG9yZy53My54MjAwMS54bWxTY2hlbWEuU2NoZW1hRG9jdW1lbnQuU2NoZW1hOwotaW1wb3J0IG9yZy53My54MjAwMS54bWxTY2hlbWEuUmVkZWZpbmVEb2N1bWVudC5SZWRlZmluZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uWG1sRXJyb3JDb250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uUU5hbWVIZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5YTUxDaGFyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uWFBhdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5YbWxJbnRlZ2VySW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLlhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLk5hbWVzcGFjZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnJlZ2V4LlJlZ3VsYXJFeHByZXNzaW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuc29hcC5TT0FQQXJyYXlUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hR2xvYmFsRWxlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQYXJ0aWNsZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlFOYW1lU2V0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRCdWlsZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQXR0cmlidXRlTW9kZWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFMb2NhbEF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUdsb2JhbEF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxJbnRlZ2VyOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotcHVibGljIGNsYXNzIFN0c2NUcmFuc2xhdG9yCi17Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUU5hbWUgV1NETF9BUlJBWVRZUEVfTkFNRSA9Ci0gICAgICAgIFFOYW1lSGVscGVyLmZvckxOUygiYXJyYXlUeXBlIiwgImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIik7Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgYWRkQWxsRGVmaW5pdGlvbnMoU3RzY0ltcG9ydGVyLlNjaGVtYVRvUHJvY2Vzc1tdIHNjaGVtYXNBbmRDaGFtZWxlb25zKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzY2hlbWFzQW5kQ2hhbWVsZW9ucy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgYWRkQWxsRGVmaW5pdGlvbnMoCi0gICAgICAgICAgICAgICAgc2NoZW1hc0FuZENoYW1lbGVvbnNbaV0uZ2V0U2NoZW1hKCksCi0gICAgICAgICAgICAgICAgc2NoZW1hc0FuZENoYW1lbGVvbnNbaV0uZ2V0Q2hhbWVsZW9uTmFtZXNwYWNlKCksCi0gICAgICAgICAgICAgICAgc2NoZW1hc0FuZENoYW1lbGVvbnNbaV0uZ2V0UmVkZWZpbmUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgYWRkQWxsRGVmaW5pdGlvbnMoU2NoZW1hIHNjaGVtYSwgU3RyaW5nIGdpdmVuVGFyZ2V0TmFtZXNwYWNlLCBSZWRlZmluZSByZWRlZmluZSkKLSAgICB7Ci0gICAgICAgIFN0c2NTdGF0ZSBzdGF0ZSA9IFN0c2NTdGF0ZS5nZXQoKTsKLQotICAgICAgICAvLyBxdWljayBjaGVjayBmb3IgYSBmZXcgdW5zdXBwb3J0ZWQgZmVhdHVyZXMKLQotICAgICAgICBpZiAoc2NoZW1hLnNpemVPZk5vdGF0aW9uQXJyYXkoKSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0YXRlLndhcm5pbmcoIlNjaGVtYSA8bm90YXRpb24+IGlzIG5vdCB5ZXQgc3VwcG9ydGVkIGZvciB0aGlzIHJlbGVhc2UuIiwgWG1sRXJyb3JDb250ZXh0LlVOU1VQUE9SVEVEX0ZFQVRVUkUsIHNjaGVtYS5nZXROb3RhdGlvbkFycmF5KDApKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gZmlndXJlIG5hbWVzcGFjZSAodGFraW5nIGludG8gYWNjb3VudCBjaGFtZWxlb25zKQotICAgICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gc2NoZW1hLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgICBib29sZWFuIGNoYW1lbGVvbiA9IGZhbHNlOwotICAgICAgICBpZiAoZ2l2ZW5UYXJnZXROYW1lc3BhY2UgIT0gbnVsbCAmJiB0YXJnZXROYW1lc3BhY2UgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlID0gZ2l2ZW5UYXJnZXROYW1lc3BhY2U7Ci0gICAgICAgICAgICBjaGFtZWxlb24gPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0YXJnZXROYW1lc3BhY2UgPT0gbnVsbCkKLSAgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZSA9ICIiOwotICAgICAgICAKLSAgICAgICAgc3RhdGUuYWRkTmFtZXNwYWNlKHRhcmdldE5hbWVzcGFjZSk7Ci0KLSAgICAgICAgLy8gbWFrZSBhIG5vdGUgb2YgYWxsIHJlZGVmaW5pdGlvbnMKLSAgICAgICAgUmVkZWZpbml0aW9uSG9sZGVyIHJlZGVmaW5pdGlvbnMgPSBuZXcgUmVkZWZpbml0aW9uSG9sZGVyKHJlZGVmaW5lKTsKLQotICAgICAgICBUb3BMZXZlbENvbXBsZXhUeXBlW10gY29tcGxleFR5cGVzID0gc2NoZW1hLmdldENvbXBsZXhUeXBlQXJyYXkoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb21wbGV4VHlwZXMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRvcExldmVsQ29tcGxleFR5cGUgcmVkZWYgPSByZWRlZmluaXRpb25zLnJlZGVmaW5lQ29tcGxleFR5cGUoY29tcGxleFR5cGVzW2ldLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICBzdGF0ZS5hZGRHbG9iYWxUeXBlKHRyYW5zbGF0ZUdsb2JhbENvbXBsZXhUeXBlKGNvbXBsZXhUeXBlc1tpXSwgdGFyZ2V0TmFtZXNwYWNlLCBjaGFtZWxlb24sIGZhbHNlKSwgcmVkZWYgIT0gbnVsbCk7Ci0gICAgICAgICAgICBpZiAocmVkZWYgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBzdGF0ZS5hZGRHbG9iYWxUeXBlKHRyYW5zbGF0ZUdsb2JhbENvbXBsZXhUeXBlKHJlZGVmLCB0YXJnZXROYW1lc3BhY2UsIGNoYW1lbGVvbiwgdHJ1ZSksIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIFRvcExldmVsU2ltcGxlVHlwZVtdIHNpbXBsZVR5cGVzID0gc2NoZW1hLmdldFNpbXBsZVR5cGVBcnJheSgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpbXBsZVR5cGVzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBUb3BMZXZlbFNpbXBsZVR5cGUgcmVkZWYgPSByZWRlZmluaXRpb25zLnJlZGVmaW5lU2ltcGxlVHlwZShzaW1wbGVUeXBlc1tpXS5nZXROYW1lKCkpOwotICAgICAgICAgICAgc3RhdGUuYWRkR2xvYmFsVHlwZSh0cmFuc2xhdGVHbG9iYWxTaW1wbGVUeXBlKHNpbXBsZVR5cGVzW2ldLCB0YXJnZXROYW1lc3BhY2UsIGNoYW1lbGVvbiwgZmFsc2UpLCByZWRlZiAhPSBudWxsKTsKLSAgICAgICAgICAgIGlmIChyZWRlZiAhPSBudWxsKQotICAgICAgICAgICAgICAgIHN0YXRlLmFkZEdsb2JhbFR5cGUodHJhbnNsYXRlR2xvYmFsU2ltcGxlVHlwZShyZWRlZiwgdGFyZ2V0TmFtZXNwYWNlLCBjaGFtZWxlb24sIHRydWUpLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBUb3BMZXZlbEVsZW1lbnRbXSBlbGVtZW50cyA9IHNjaGVtYS5nZXRFbGVtZW50QXJyYXkoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgVG9wTGV2ZWxFbGVtZW50IGVsZW1lbnQgPSBlbGVtZW50c1tpXTsKLSAgICAgICAgICAgIHN0YXRlLmFkZERvY3VtZW50VHlwZSh0cmFuc2xhdGVEb2N1bWVudFR5cGUoZWxlbWVudCwgdGFyZ2V0TmFtZXNwYWNlLCBjaGFtZWxlb24pLCBRTmFtZUhlbHBlci5mb3JMTlMoZWxlbWVudC5nZXROYW1lKCksIHRhcmdldE5hbWVzcGFjZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgVG9wTGV2ZWxBdHRyaWJ1dGVbXSBhdHRyaWJ1dGVzID0gc2NoZW1hLmdldEF0dHJpYnV0ZUFycmF5KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlcy5sZW5ndGggOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRvcExldmVsQXR0cmlidXRlIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXNbaV07Ci0gICAgICAgICAgICBzdGF0ZS5hZGRBdHRyaWJ1dGVUeXBlKHRyYW5zbGF0ZUF0dHJpYnV0ZVR5cGUoYXR0cmlidXRlLCB0YXJnZXROYW1lc3BhY2UsIGNoYW1lbGVvbiksIFFOYW1lSGVscGVyLmZvckxOUyhhdHRyaWJ1dGUuZ2V0TmFtZSgpLCB0YXJnZXROYW1lc3BhY2UpKTsKLSAgICAgICAgfQotCi0gICAgICAgIE5hbWVkR3JvdXBbXSBtb2RlbGdyb3VwcyA9IHNjaGVtYS5nZXRHcm91cEFycmF5KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbW9kZWxncm91cHMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIE5hbWVkR3JvdXAgcmVkZWYgPSByZWRlZmluaXRpb25zLnJlZGVmaW5lTW9kZWxHcm91cChtb2RlbGdyb3Vwc1tpXS5nZXROYW1lKCkpOwotICAgICAgICAgICAgc3RhdGUuYWRkTW9kZWxHcm91cCh0cmFuc2xhdGVNb2RlbEdyb3VwKG1vZGVsZ3JvdXBzW2ldLCB0YXJnZXROYW1lc3BhY2UsIGNoYW1lbGVvbiwgZmFsc2UpLCByZWRlZiAhPSBudWxsKTsKLSAgICAgICAgICAgIGlmIChyZWRlZiAhPSBudWxsKQotICAgICAgICAgICAgICAgIHN0YXRlLmFkZE1vZGVsR3JvdXAodHJhbnNsYXRlTW9kZWxHcm91cChyZWRlZiwgdGFyZ2V0TmFtZXNwYWNlLCBjaGFtZWxlb24sIHRydWUpLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBOYW1lZEF0dHJpYnV0ZUdyb3VwW10gYXR0cmdyb3VwcyA9IHNjaGVtYS5nZXRBdHRyaWJ1dGVHcm91cEFycmF5KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cmdyb3Vwcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgTmFtZWRBdHRyaWJ1dGVHcm91cCByZWRlZiA9IHJlZGVmaW5pdGlvbnMucmVkZWZpbmVBdHRyaWJ1dGVHcm91cChhdHRyZ3JvdXBzW2ldLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICBzdGF0ZS5hZGRBdHRyaWJ1dGVHcm91cCh0cmFuc2xhdGVBdHRyaWJ1dGVHcm91cChhdHRyZ3JvdXBzW2ldLCB0YXJnZXROYW1lc3BhY2UsIGNoYW1lbGVvbiwgZmFsc2UpLCByZWRlZiAhPSBudWxsKTsKLSAgICAgICAgICAgIGlmIChyZWRlZiAhPSBudWxsKQotICAgICAgICAgICAgICAgIHN0YXRlLmFkZEF0dHJpYnV0ZUdyb3VwKHRyYW5zbGF0ZUF0dHJpYnV0ZUdyb3VwKHJlZGVmLCB0YXJnZXROYW1lc3BhY2UsIGNoYW1lbGVvbiwgdHJ1ZSksIGZhbHNlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmVkZWZpbml0aW9ucy5jb21wbGFpbkFib3V0TWlzc2luZ0RlZmluaXRpb25zKCk7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFJlZGVmaW5pdGlvbkhvbGRlcgotICAgIHsKLSAgICAgICAgLy8gcmVjb3JkIHJlZGVmaW5pdGlvbnMKLSAgICAgICAgcHJpdmF0ZSBNYXAgc3RSZWRlZmluaXRpb25zID0gQ29sbGVjdGlvbnMuRU1QVFlfTUFQOwotICAgICAgICBwcml2YXRlIE1hcCBjdFJlZGVmaW5pdGlvbnMgPSBDb2xsZWN0aW9ucy5FTVBUWV9NQVA7Ci0gICAgICAgIHByaXZhdGUgTWFwIGFnUmVkZWZpbml0aW9ucyA9IENvbGxlY3Rpb25zLkVNUFRZX01BUDsKLSAgICAgICAgcHJpdmF0ZSBNYXAgbWdSZWRlZmluaXRpb25zID0gQ29sbGVjdGlvbnMuRU1QVFlfTUFQOwotICAgICAgICBwcml2YXRlIFN0cmluZyBzY2hlbWFMb2NhdGlvbiA9ICIiOwotICAgICAgICAKLSAgICAgICAgLy8gZmlyc3QgYnVpbGQgc2V0IG9mIHJlZGVmaW5lZCBjb21wb25lbnRzCi0gICAgICAgIFJlZGVmaW5pdGlvbkhvbGRlcihSZWRlZmluZSByZWRlZmluZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlZGVmaW5lICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RzY1N0YXRlIHN0YXRlID0gU3RzY1N0YXRlLmdldCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3RSZWRlZmluaXRpb25zID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgICAgICAgICBjdFJlZGVmaW5pdGlvbnMgPSBuZXcgSGFzaE1hcCgpOwotICAgICAgICAgICAgICAgIGFnUmVkZWZpbml0aW9ucyA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgICAgICAgICAgbWdSZWRlZmluaXRpb25zID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgICAgICAgICBpZiAocmVkZWZpbmUuZ2V0U2NoZW1hTG9jYXRpb24oKSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICBzY2hlbWFMb2NhdGlvbiA9IHJlZGVmaW5lLmdldFNjaGVtYUxvY2F0aW9uKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgVG9wTGV2ZWxDb21wbGV4VHlwZVtdIGNvbXBsZXhUeXBlcyA9IHJlZGVmaW5lLmdldENvbXBsZXhUeXBlQXJyYXkoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbXBsZXhUeXBlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV4VHlwZXNbaV0uZ2V0TmFtZSgpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdFJlZGVmaW5pdGlvbnMuY29udGFpbnNLZXkoY29tcGxleFR5cGVzW2ldLmdldE5hbWUoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkR1cGxpY2F0ZSB0eXBlIHJlZGVmaW5pdGlvbjogIiArIGNvbXBsZXhUeXBlc1tpXS5nZXROYW1lKCksIFhtbEVycm9yQ29udGV4dC5EVVBMSUNBVEVfR0xPQkFMX1RZUEUsIG51bGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0UmVkZWZpbml0aW9ucy5wdXQoY29tcGxleFR5cGVzW2ldLmdldE5hbWUoKSwgY29tcGxleFR5cGVzW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAKLSAgICAgICAgICAgICAgICBUb3BMZXZlbFNpbXBsZVR5cGVbXSBzaW1wbGVUeXBlcyA9IHJlZGVmaW5lLmdldFNpbXBsZVR5cGVBcnJheSgpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2ltcGxlVHlwZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2ltcGxlVHlwZXNbaV0uZ2V0TmFtZSgpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdFJlZGVmaW5pdGlvbnMuY29udGFpbnNLZXkoc2ltcGxlVHlwZXNbaV0uZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvcigiRHVwbGljYXRlIHR5cGUgcmVkZWZpbml0aW9uOiAiICsgc2ltcGxlVHlwZXNbaV0uZ2V0TmFtZSgpLCBYbWxFcnJvckNvbnRleHQuRFVQTElDQVRFX0dMT0JBTF9UWVBFLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdFJlZGVmaW5pdGlvbnMucHV0KHNpbXBsZVR5cGVzW2ldLmdldE5hbWUoKSwgc2ltcGxlVHlwZXNbaV0pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5hbWVkR3JvdXBbXSBtb2RlbGdyb3VwcyA9IHJlZGVmaW5lLmdldEdyb3VwQXJyYXkoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1vZGVsZ3JvdXBzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGVsZ3JvdXBzW2ldLmdldE5hbWUoKSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWdSZWRlZmluaXRpb25zLmNvbnRhaW5zS2V5KG1vZGVsZ3JvdXBzW2ldLmdldE5hbWUoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkR1cGxpY2F0ZSB0eXBlIHJlZGVmaW5pdGlvbjogIiArIG1vZGVsZ3JvdXBzW2ldLmdldE5hbWUoKSwgWG1sRXJyb3JDb250ZXh0LkRVUExJQ0FURV9HTE9CQUxfVFlQRSwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWdSZWRlZmluaXRpb25zLnB1dChtb2RlbGdyb3Vwc1tpXS5nZXROYW1lKCksIG1vZGVsZ3JvdXBzW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAKLSAgICAgICAgICAgICAgICBOYW1lZEF0dHJpYnV0ZUdyb3VwW10gYXR0cmdyb3VwcyA9IHJlZGVmaW5lLmdldEF0dHJpYnV0ZUdyb3VwQXJyYXkoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHJncm91cHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmdyb3Vwc1tpXS5nZXROYW1lKCkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFnUmVkZWZpbml0aW9ucy5jb250YWluc0tleShhdHRyZ3JvdXBzW2ldLmdldE5hbWUoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkR1cGxpY2F0ZSB0eXBlIHJlZGVmaW5pdGlvbjogIiArIGF0dHJncm91cHNbaV0uZ2V0TmFtZSgpLCBYbWxFcnJvckNvbnRleHQuRFVQTElDQVRFX0dMT0JBTF9UWVBFLCBudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ1JlZGVmaW5pdGlvbnMucHV0KGF0dHJncm91cHNbaV0uZ2V0TmFtZSgpLCBhdHRyZ3JvdXBzW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHVibGljIFRvcExldmVsU2ltcGxlVHlwZSByZWRlZmluZVNpbXBsZVR5cGUoU3RyaW5nIG5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChuYW1lID09IG51bGwgfHwgIXN0UmVkZWZpbml0aW9ucy5jb250YWluc0tleShuYW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIHJldHVybiAoVG9wTGV2ZWxTaW1wbGVUeXBlKXN0UmVkZWZpbml0aW9ucy5yZW1vdmUobmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHB1YmxpYyBUb3BMZXZlbENvbXBsZXhUeXBlIHJlZGVmaW5lQ29tcGxleFR5cGUoU3RyaW5nIG5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChuYW1lID09IG51bGwgfHwgIWN0UmVkZWZpbml0aW9ucy5jb250YWluc0tleShuYW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIHJldHVybiAoVG9wTGV2ZWxDb21wbGV4VHlwZSljdFJlZGVmaW5pdGlvbnMucmVtb3ZlKG5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwdWJsaWMgTmFtZWRHcm91cCByZWRlZmluZU1vZGVsR3JvdXAoU3RyaW5nIG5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChuYW1lID09IG51bGwgfHwgIW1nUmVkZWZpbml0aW9ucy5jb250YWluc0tleShuYW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIHJldHVybiAoTmFtZWRHcm91cCltZ1JlZGVmaW5pdGlvbnMucmVtb3ZlKG5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwdWJsaWMgTmFtZWRBdHRyaWJ1dGVHcm91cCByZWRlZmluZUF0dHJpYnV0ZUdyb3VwKFN0cmluZyBuYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobmFtZSA9PSBudWxsIHx8ICFhZ1JlZGVmaW5pdGlvbnMuY29udGFpbnNLZXkobmFtZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICByZXR1cm4gKE5hbWVkQXR0cmlidXRlR3JvdXApYWdSZWRlZmluaXRpb25zLnJlbW92ZShuYW1lKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHVibGljIHZvaWQgY29tcGxhaW5BYm91dE1pc3NpbmdEZWZpbml0aW9ucygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzdFJlZGVmaW5pdGlvbnMuaXNFbXB0eSgpICYmIGN0UmVkZWZpbml0aW9ucy5pc0VtcHR5KCkgJiYKLSAgICAgICAgICAgICAgICAgICAgYWdSZWRlZmluaXRpb25zLmlzRW1wdHkoKSAmJiBtZ1JlZGVmaW5pdGlvbnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgU3RzY1N0YXRlIHN0YXRlID0gU3RzY1N0YXRlLmdldCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBzdFJlZGVmaW5pdGlvbnMua2V5U2V0KCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBRTmFtZSBuYW1lID0gKFFOYW1lKWkubmV4dCgpOwotICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJSZWRlZmluZWQgc2ltcGxlIHR5cGUgIiArIFFOYW1lSGVscGVyLnByZXR0eShuYW1lKSArICIgbm90IGZvdW5kIGluICIgKyBzY2hlbWFMb2NhdGlvbiwgWG1sRXJyb3JDb250ZXh0LkdFTkVSSUNfRVJST1IsIChYbWxPYmplY3Qpc3RSZWRlZmluaXRpb25zLmdldChuYW1lKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGN0UmVkZWZpbml0aW9ucy5rZXlTZXQoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFFOYW1lIG5hbWUgPSAoUU5hbWUpaS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIlJlZGVmaW5lZCBjb21wbGV4IHR5cGUgIiArIFFOYW1lSGVscGVyLnByZXR0eShuYW1lKSArICIgbm90IGZvdW5kIGluICIgKyBzY2hlbWFMb2NhdGlvbiwgWG1sRXJyb3JDb250ZXh0LkdFTkVSSUNfRVJST1IsIChYbWxPYmplY3QpY3RSZWRlZmluaXRpb25zLmdldChuYW1lKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGFnUmVkZWZpbml0aW9ucy5rZXlTZXQoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFFOYW1lIG5hbWUgPSAoUU5hbWUpaS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIlJlZGVmaW5lZCBhdHRyaWJ1dGUgZ3JvdXAgIiArIFFOYW1lSGVscGVyLnByZXR0eShuYW1lKSArICIgbm90IGZvdW5kIGluICIgKyBzY2hlbWFMb2NhdGlvbiwgWG1sRXJyb3JDb250ZXh0LkdFTkVSSUNfRVJST1IsIChYbWxPYmplY3QpYWdSZWRlZmluaXRpb25zLmdldChuYW1lKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IG1nUmVkZWZpbml0aW9ucy5rZXlTZXQoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFFOYW1lIG5hbWUgPSAoUU5hbWUpaS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIlJlZGVmaW5lZCBtb2RlbCBncm91cCAiICsgUU5hbWVIZWxwZXIucHJldHR5KG5hbWUpICsgIiBub3QgZm91bmQgaW4gIiArIHNjaGVtYUxvY2F0aW9uLCBYbWxFcnJvckNvbnRleHQuR0VORVJJQ19FUlJPUiwgKFhtbE9iamVjdCltZ1JlZGVmaW5pdGlvbnMuZ2V0KG5hbWUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBmaW5kRmlsZW5hbWUoWG1sT2JqZWN0IHhvYmopCi0gICAgewotICAgICAgICByZXR1cm4gU3RzY1N0YXRlLmdldCgpLnNvdXJjZU5hbWVGb3JVcmkoeG9iai5kb2N1bWVudFByb3BlcnRpZXMoKS5nZXRTb3VyY2VOYW1lKCkpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFNjaGVtYVR5cGVJbXBsIHRyYW5zbGF0ZURvY3VtZW50VHlwZSAoIFRvcExldmVsRWxlbWVudCB4c2RUeXBlLCBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlLCBib29sZWFuIGNoYW1lbGVvbiApCi0gICAgewotICAgICAgICBTY2hlbWFUeXBlSW1wbCBzVHlwZSA9IG5ldyBTY2hlbWFUeXBlSW1wbCggU3RzY1N0YXRlLmdldCgpLnN0cygpICk7Ci0gICAgICAgIAotICAgICAgICBzVHlwZS5zZXREb2N1bWVudFR5cGUodHJ1ZSk7Ci0gICAgICAgIHNUeXBlLnNldFBhcnNlQ29udGV4dCggeHNkVHlwZSwgdGFyZ2V0TmFtZXNwYWNlLCBjaGFtZWxlb24sIGZhbHNlKTsKLSAgICAgICAgc1R5cGUuc2V0RmlsZW5hbWUoIGZpbmRGaWxlbmFtZSggeHNkVHlwZSApICk7Ci0KLSAgICAgICAgcmV0dXJuIHNUeXBlOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBTY2hlbWFUeXBlSW1wbCB0cmFuc2xhdGVBdHRyaWJ1dGVUeXBlICggVG9wTGV2ZWxBdHRyaWJ1dGUgeHNkVHlwZSwgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSwgYm9vbGVhbiBjaGFtZWxlb24gKQotICAgIHsKLSAgICAgICAgU2NoZW1hVHlwZUltcGwgc1R5cGUgPSBuZXcgU2NoZW1hVHlwZUltcGwoIFN0c2NTdGF0ZS5nZXQoKS5zdHMoKSApOwotICAgICAgICAKLSAgICAgICAgc1R5cGUuc2V0QXR0cmlidXRlVHlwZSh0cnVlKTsKLSAgICAgICAgc1R5cGUuc2V0UGFyc2VDb250ZXh0KCB4c2RUeXBlLCB0YXJnZXROYW1lc3BhY2UsIGNoYW1lbGVvbiwgZmFsc2UpOwotICAgICAgICBzVHlwZS5zZXRGaWxlbmFtZSggZmluZEZpbGVuYW1lKCB4c2RUeXBlICkgKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBzVHlwZTsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2NoZW1hVHlwZUltcGwgdHJhbnNsYXRlR2xvYmFsQ29tcGxleFR5cGUoVG9wTGV2ZWxDb21wbGV4VHlwZSB4c2RUeXBlLCBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlLCBib29sZWFuIGNoYW1lbGVvbiwgYm9vbGVhbiByZWRlZmluaXRpb24pCi0gICAgewotICAgICAgICBTdHNjU3RhdGUgc3RhdGUgPSBTdHNjU3RhdGUuZ2V0KCk7Ci0KLSAgICAgICAgU3RyaW5nIGxvY2FsbmFtZSA9IHhzZFR5cGUuZ2V0TmFtZSgpOwotICAgICAgICBpZiAobG9jYWxuYW1lID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0YXRlLmVycm9yKCJHbG9iYWwgdHlwZSBtaXNzaW5nIGEgbmFtZSIsIFhtbEVycm9yQ29udGV4dC5HTE9CQUxfVFlQRV9NSVNTSU5HX05BTUUsIHhzZFR5cGUpOwotICAgICAgICAgICAgLy8gcmVjb3Zlcnk6IGlnbm9yZSB1bm5hbWVkIHR5cGVzLgotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFYTUxDaGFyLmlzVmFsaWROQ05hbWUobG9jYWxuYW1lKSkKLSAgICAgICAgewotICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkludmFsaWQgdHlwZSBuYW1lIFwiIiArIGxvY2FsbmFtZSArICJcIiIsIFhtbEVycm9yQ29udGV4dC5JTlZBTElEX05BTUUsIHhzZFR5cGUueGdldE5hbWUoKSk7Ci0gICAgICAgICAgICAvLyByZWNvdmVyeTogbGV0IHRoZSBuYW1lIGdvIHRocm91Z2ggYW55d2F5LgotICAgICAgICB9Ci0KLSAgICAgICAgUU5hbWUgbmFtZSA9IFFOYW1lSGVscGVyLmZvckxOUyhsb2NhbG5hbWUsIHRhcmdldE5hbWVzcGFjZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNSZXNlcnZlZFR5cGVOYW1lKG5hbWUpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0ZS53YXJuaW5nKCJTa2lwcGluZyBkZWZpbml0aW9uIG9mIGJ1aWx0LWluIHR5cGUgIiArIFFOYW1lSGVscGVyLnByZXR0eShuYW1lKSwgWG1sRXJyb3JDb250ZXh0LlJFU0VSVkVEX1RZUEVfTkFNRSwgeHNkVHlwZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICAvLyBTeXN0ZW0uZXJyLnByaW50bG4oIlJlY29yZGluZyB0eXBlICIgKyBRTmFtZUhlbHBlci5wcmV0dHkobmFtZSkpOwotCi0gICAgICAgIFNjaGVtYVR5cGVJbXBsIHNUeXBlID0gbmV3IFNjaGVtYVR5cGVJbXBsKHN0YXRlLnN0cygpKTsKLSAgICAgICAgc1R5cGUuc2V0UGFyc2VDb250ZXh0KHhzZFR5cGUsIHRhcmdldE5hbWVzcGFjZSwgY2hhbWVsZW9uLCByZWRlZmluaXRpb24pOwotICAgICAgICBzVHlwZS5zZXRGaWxlbmFtZShmaW5kRmlsZW5hbWUoeHNkVHlwZSkpOwotICAgICAgICBzVHlwZS5zZXROYW1lKFFOYW1lSGVscGVyLmZvckxOUyhsb2NhbG5hbWUsIHRhcmdldE5hbWVzcGFjZSkpOwotICAgICAgICByZXR1cm4gc1R5cGU7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2NoZW1hVHlwZUltcGwgdHJhbnNsYXRlR2xvYmFsU2ltcGxlVHlwZShUb3BMZXZlbFNpbXBsZVR5cGUgeHNkVHlwZSwgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSwgYm9vbGVhbiBjaGFtZWxlb24sIGJvb2xlYW4gcmVkZWZpbml0aW9uKQotICAgIHsKLSAgICAgICAgU3RzY1N0YXRlIHN0YXRlID0gU3RzY1N0YXRlLmdldCgpOwotCi0gICAgICAgIFN0cmluZyBsb2NhbG5hbWUgPSB4c2RUeXBlLmdldE5hbWUoKTsKLSAgICAgICAgaWYgKGxvY2FsbmFtZSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0ZS5lcnJvcigiR2xvYmFsIHR5cGUgbWlzc2luZyBhIG5hbWUiLCBYbWxFcnJvckNvbnRleHQuR0xPQkFMX1RZUEVfTUlTU0lOR19OQU1FLCB4c2RUeXBlKTsKLSAgICAgICAgICAgIC8vIHJlY292ZXJ5OiBpZ25vcmUgdW5uYW1lZCB0eXBlcy4KLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGlmICghWE1MQ2hhci5pc1ZhbGlkTkNOYW1lKGxvY2FsbmFtZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0YXRlLmVycm9yKCJJbnZhbGlkIHR5cGUgbmFtZSBcIiIgKyBsb2NhbG5hbWUgKyAiXCIiLCBYbWxFcnJvckNvbnRleHQuSU5WQUxJRF9OQU1FLCB4c2RUeXBlLnhnZXROYW1lKCkpOwotICAgICAgICAgICAgLy8gcmVjb3Zlcnk6IGxldCB0aGUgbmFtZSBnbyB0aHJvdWdoIGFueXdheS4KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUU5hbWUgbmFtZSA9IFFOYW1lSGVscGVyLmZvckxOUyhsb2NhbG5hbWUsIHRhcmdldE5hbWVzcGFjZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNSZXNlcnZlZFR5cGVOYW1lKG5hbWUpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0ZS53YXJuaW5nKCJTa2lwcGluZyBkZWZpbml0aW9uIG9mIGJ1aWx0LWluIHR5cGUgIiArIFFOYW1lSGVscGVyLnByZXR0eShuYW1lKSwgWG1sRXJyb3JDb250ZXh0LlJFU0VSVkVEX1RZUEVfTkFNRSwgeHNkVHlwZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICAvLyBTeXN0ZW0uZXJyLnByaW50bG4oIlJlY29yZGluZyB0eXBlICIgKyBRTmFtZUhlbHBlci5wcmV0dHkobmFtZSkpOwotCi0gICAgICAgIFNjaGVtYVR5cGVJbXBsIHNUeXBlID0gbmV3IFNjaGVtYVR5cGVJbXBsKHN0YXRlLnN0cygpKTsKLSAgICAgICAgc1R5cGUuc2V0U2ltcGxlVHlwZSh0cnVlKTsKLSAgICAgICAgc1R5cGUuc2V0UGFyc2VDb250ZXh0KHhzZFR5cGUsIHRhcmdldE5hbWVzcGFjZSwgY2hhbWVsZW9uLCByZWRlZmluaXRpb24pOwotICAgICAgICBzVHlwZS5zZXRGaWxlbmFtZShmaW5kRmlsZW5hbWUoeHNkVHlwZSkpOwotICAgICAgICBzVHlwZS5zZXROYW1lKG5hbWUpOwotICAgICAgICByZXR1cm4gc1R5cGU7Ci0gICAgfQotCi0gICAgc3RhdGljIEZvcm1DaG9pY2UgZmluZEVsZW1lbnRGb3JtRGVmYXVsdChYbWxPYmplY3Qgb2JqKQotICAgIHsKLSAgICAgICAgWG1sQ3Vyc29yIGN1ciA9IG9iai5uZXdDdXJzb3IoKTsKLSAgICAgICAgd2hpbGUgKGN1ci5nZXRPYmplY3QoKS5zY2hlbWFUeXBlKCkgIT0gU2NoZW1hLnR5cGUpCi0gICAgICAgICAgICBpZiAoIWN1ci50b1BhcmVudCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICByZXR1cm4gKChTY2hlbWEpY3VyLmdldE9iamVjdCgpKS54Z2V0RWxlbWVudEZvcm1EZWZhdWx0KCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIHVyaU1hdGNoKFN0cmluZyBzMSwgU3RyaW5nIHMyKQotICAgIHsKLSAgICAgICAgaWYgKHMxID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gczIgPT0gbnVsbCB8fCBzMi5lcXVhbHMoIiIpOwotICAgICAgICBpZiAoczIgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBzMS5lcXVhbHMoIiIpOwotICAgICAgICByZXR1cm4gczEuZXF1YWxzKHMyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgY29weUdsb2JhbEVsZW1lbnRUb0xvY2FsRWxlbWVudChTY2hlbWFHbG9iYWxFbGVtZW50IHJlZmVyZW5jZWQsIFNjaGVtYUxvY2FsRWxlbWVudEltcGwgdGFyZ2V0ICkKLSAgICB7Ci0KLSAgICAgICAgdGFyZ2V0LnNldE5hbWVBbmRUeXBlUmVmKHJlZmVyZW5jZWQuZ2V0TmFtZSgpLCByZWZlcmVuY2VkLmdldFR5cGUoKS5nZXRSZWYoKSk7Ci0gICAgICAgIHRhcmdldC5zZXROaWxsYWJsZShyZWZlcmVuY2VkLmlzTmlsbGFibGUoKSk7Ci0gICAgICAgIHRhcmdldC5zZXREZWZhdWx0KHJlZmVyZW5jZWQuZ2V0RGVmYXVsdFRleHQoKSwgcmVmZXJlbmNlZC5pc0ZpeGVkKCksICgoU2NoZW1hR2xvYmFsRWxlbWVudEltcGwpcmVmZXJlbmNlZCkuZ2V0UGFyc2VPYmplY3QoKSk7Ci0gICAgICAgIHRhcmdldC5zZXRJZGVudGl0eUNvbnN0cmFpbnRzKCgoU2NoZW1hTG9jYWxFbGVtZW50SW1wbClyZWZlcmVuY2VkKS5nZXRJZGVudGl0eUNvbnN0cmFpbnRSZWZzKCkpOwotICAgICAgICB0YXJnZXQuc2V0QmxvY2socmVmZXJlbmNlZC5ibG9ja0V4dGVuc2lvbigpLCAgcmVmZXJlbmNlZC5ibG9ja1Jlc3RyaWN0aW9uKCksICByZWZlcmVuY2VkLmJsb2NrU3Vic3RpdHV0aW9uKCkpOwotICAgICAgICB0YXJnZXQuc2V0QWJzdHJhY3QocmVmZXJlbmNlZC5pc0Fic3RyYWN0KCkpOwotICAgICAgICB0YXJnZXQuc2V0VHJhbnNpdGlvblJ1bGVzKCgoU2NoZW1hUGFydGljbGUpcmVmZXJlbmNlZCkuYWNjZXB0ZWRTdGFydE5hbWVzKCksCi0gICAgICAgICAgICAoKFNjaGVtYVBhcnRpY2xlKXJlZmVyZW5jZWQpLmlzU2tpcHBhYmxlKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBjb3B5R2xvYmFsQXR0cmlidXRlVG9Mb2NhbEF0dHJpYnV0ZShTY2hlbWFHbG9iYWxBdHRyaWJ1dGVJbXBsIHJlZmVyZW5jZWQsIFNjaGVtYUxvY2FsQXR0cmlidXRlSW1wbCB0YXJnZXQgKQotICAgIHsKLSAgICAgICAgdGFyZ2V0LmluaXQoCi0gICAgICAgICAgICByZWZlcmVuY2VkLmdldE5hbWUoKSwgcmVmZXJlbmNlZC5nZXRUeXBlUmVmKCksIHJlZmVyZW5jZWQuZ2V0VXNlKCksCi0gICAgICAgICAgICByZWZlcmVuY2VkLmdldERlZmF1bHRUZXh0KCksCi0gICAgICAgICAgICAgICAgcmVmZXJlbmNlZC5nZXRQYXJzZU9iamVjdCgpLCByZWZlcmVuY2VkLl9kZWZhdWx0VmFsdWUsCi0gICAgICAgICAgICByZWZlcmVuY2VkLmlzRml4ZWQoKSwKLSAgICAgICAgICAgIHJlZmVyZW5jZWQuZ2V0V1NETEFycmF5VHlwZSgpICk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVHJhbnNsYXRlcyBhIGxvY2FsIG9yIGdsb2JhbCBzY2hlbWEgZWxlbWVudC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFNjaGVtYUxvY2FsRWxlbWVudEltcGwgdHJhbnNsYXRlRWxlbWVudCgKLSAgICAgICAgRWxlbWVudCB4c2RFbHQsIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsIGJvb2xlYW4gY2hhbWVsZW9uLAotICAgICAgICBMaXN0IGFub255bW91c1R5cGVzLCBTY2hlbWFUeXBlIG91dGVyVHlwZSkKLSAgICB7Ci0gICAgICAgIFN0c2NTdGF0ZSBzdGF0ZSA9IFN0c2NTdGF0ZS5nZXQoKTsKLQotICAgICAgICBTY2hlbWFUeXBlSW1wbCBzZ0hlYWQgPSBudWxsOwotCi0gICAgICAgIC8vIHRyYW5zbGF0ZSBzZyBoZWFkCi0gICAgICAgIGlmICh4c2RFbHQuaXNTZXRTdWJzdGl0dXRpb25Hcm91cCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzZ0hlYWQgPSBzdGF0ZS5maW5kRG9jdW1lbnRUeXBlKHhzZEVsdC5nZXRTdWJzdGl0dXRpb25Hcm91cCgpLAotICAgICAgICAgICAgICAgICgoU2NoZW1hVHlwZUltcGwpb3V0ZXJUeXBlKS5nZXRDaGFtZWxlb25OYW1lc3BhY2UoKSk7Ci0KLSAgICAgICAgICAgIGlmIChzZ0hlYWQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBTdHNjUmVzb2x2ZXIucmVzb2x2ZVR5cGUoc2dIZWFkKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBuYW1lID0geHNkRWx0LmdldE5hbWUoKTsKLSAgICAgICAgUU5hbWUgcmVmID0geHNkRWx0LmdldFJlZigpOwotCi0KLQotICAgICAgICBpZiAocmVmICE9IG51bGwgJiYgbmFtZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBpZiAobmFtZS5lcXVhbHMocmVmLmdldExvY2FsUGFydCgpKSAmJiB1cmlNYXRjaCh0YXJnZXROYW1lc3BhY2UsIHJlZi5nZXROYW1lc3BhY2VVUkkoKSkpCi0gICAgICAgICAgICAvLyAgICAgc3RhdGUud2FybmluZygiRWxlbWVudCAiICsgbmFtZSArICIgc3BlY2lmaWVzIGJvdGggYSByZWYgYW5kIGEgbmFtZSIsIFhtbEVycm9yQ29udGV4dC5FTEVNRU5UX0VYVFJBX1JFRiwgeHNkRWx0LnhnZXRSZWYoKSk7Ci0gICAgICAgICAgICAvLyBlbHNlCi0gICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkVsZW1lbnQgIiArIG5hbWUgKyAiIHNwZWNpZmllcyBib3RoIGEgcmVmIGFuZCBhIG5hbWUiLCBYbWxFcnJvckNvbnRleHQuRUxFTUVOVF9FWFRSQV9SRUYsIHhzZEVsdC54Z2V0UmVmKCkpOwotICAgICAgICAgICAgLy8gaWdub3JlIG5hbWUKLSAgICAgICAgICAgIG5hbWUgPSBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZWYgPT0gbnVsbCAmJiBuYW1lID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0YXRlLmVycm9yKCJFbGVtZW50IGhhcyBubyBuYW1lIiwgWG1sRXJyb3JDb250ZXh0LkVMRU1FTlRfTUlTU0lOR19OQU1FLCB4c2RFbHQpOwotICAgICAgICAgICAgLy8gcmVjb3Zlcnk6IGlnbm9yZSB0aGlzIGVsZW1lbnQKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChuYW1lICE9IG51bGwgJiYgIVhNTENoYXIuaXNWYWxpZE5DTmFtZShuYW1lKSkKLSAgICAgICAgewotICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkludmFsaWQgZWxlbWVudCBuYW1lIFwiIiArIG5hbWUgKyAiXCIiLCBYbWxFcnJvckNvbnRleHQuSU5WQUxJRF9OQU1FLCB4c2RFbHQueGdldE5hbWUoKSk7Ci0gICAgICAgICAgICAvLyByZWNvdmVyeTogbGV0IHRoZSBuYW1lIGdvIHRocm91Z2ggYW55d2F5LgotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlZiAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoeHNkRWx0LmdldFR5cGUoKSAhPSBudWxsIHx8IHhzZEVsdC5nZXRTaW1wbGVUeXBlKCkgIT0gbnVsbCB8fCB4c2RFbHQuZ2V0Q29tcGxleFR5cGUoKSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJFbGVtZW50IHJlZmVyZW5jZSBjYW5ub3QgYWxzbyBzcGVjaWZ5IGEgdHlwZSIsIFhtbEVycm9yQ29udGV4dC5JTlZBTElEX05BTUUsIHhzZEVsdC54Z2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAvLyByZWNvdmVyeTogbGV0IHRoZSBuYW1lIGdvIHRocm91Z2ggYW55d2F5LgotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoeHNkRWx0LmdldEZvcm0oKSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJFbGVtZW50IHJlZmVyZW5jZSBjYW5ub3QgYWxzbyBzcGVjaWZ5IGZvcm0iLCBYbWxFcnJvckNvbnRleHQuSU5WQUxJRF9OQU1FLCB4c2RFbHQueGdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgLy8gcmVjb3Zlcnk6IGxldCB0aGUgbmFtZSBnbyB0aHJvdWdoIGFueXdheS4KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXNzZXJ0KHhzZEVsdCBpbnN0YW5jZW9mIExvY2FsRWxlbWVudCk7Ci0gICAgICAgICAgICBTY2hlbWFHbG9iYWxFbGVtZW50IHJlZmVyZW5jZWQgPSBzdGF0ZS5maW5kR2xvYmFsRWxlbWVudChyZWYsIGNoYW1lbGVvbiA/IHRhcmdldE5hbWVzcGFjZSA6IG51bGwpOwotICAgICAgICAgICAgaWYgKHJlZmVyZW5jZWQgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdGF0ZS5ub3RGb3VuZEVycm9yKHJlZiwgWG1sRXJyb3JDb250ZXh0LkVMRU1FTlRfUkVGX05PVF9GT1VORCwgeHNkRWx0LnhnZXRSZWYoKSk7Ci0gICAgICAgICAgICAgICAgLy8gcmVjb3Zlcnk6IGlnbm9yZSB0aGlzIGVsZW1lbnQKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFNjaGVtYUxvY2FsRWxlbWVudEltcGwgdGFyZ2V0ID0gbmV3IFNjaGVtYUxvY2FsRWxlbWVudEltcGwoKTsKLSAgICAgICAgICAgIHRhcmdldC5zZXRQYXJ0aWNsZVR5cGUoU2NoZW1hUGFydGljbGUuRUxFTUVOVCk7Ci0gICAgICAgICAgICBjb3B5R2xvYmFsRWxlbWVudFRvTG9jYWxFbGVtZW50KCByZWZlcmVuY2VkLCB0YXJnZXQgKTsKLSAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICBRTmFtZSBxbmFtZTsKLSAgICAgICAgU2NoZW1hTG9jYWxFbGVtZW50SW1wbCBpbXBsOwotICAgICAgICBTY2hlbWFUeXBlIHNUeXBlID0gbnVsbDsKLQotICAgICAgICBpZiAoeHNkRWx0IGluc3RhbmNlb2YgTG9jYWxFbGVtZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBpbXBsID0gbmV3IFNjaGVtYUxvY2FsRWxlbWVudEltcGwoKTsKLSAgICAgICAgICAgIEZvcm1DaG9pY2UgZm9ybSA9IHhzZEVsdC54Z2V0Rm9ybSgpOwotICAgICAgICAgICAgaWYgKGZvcm0gPT0gbnVsbCkKLSAgICAgICAgICAgICAgICBmb3JtID0gZmluZEVsZW1lbnRGb3JtRGVmYXVsdCh4c2RFbHQpOwotICAgICAgICAgICAgaWYgKGZvcm0gPT0gbnVsbCB8fCBmb3JtLmdldFN0cmluZ1ZhbHVlKCkuZXF1YWxzKCJ1bnF1YWxpZmllZCIpKQotICAgICAgICAgICAgICAgIHFuYW1lID0gUU5hbWVIZWxwZXIuZm9yTE4obmFtZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcW5hbWUgPSBRTmFtZUhlbHBlci5mb3JMTlMobmFtZSwgdGFyZ2V0TmFtZXNwYWNlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYUdsb2JhbEVsZW1lbnRJbXBsIGdlbHQgPSBuZXcgU2NoZW1hR2xvYmFsRWxlbWVudEltcGwoc3RhdGUuc3RzKCkpOwotICAgICAgICAgICAgaW1wbCA9IGdlbHQ7Ci0KLSAgICAgICAgICAgIC8vIFNldCBzdWJzdCBncm91cCBoZWFkCi0gICAgICAgICAgICBpZiAoc2dIZWFkICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2NoZW1hR2xvYmFsRWxlbWVudEltcGwgaGVhZCA9IHN0YXRlLmZpbmRHbG9iYWxFbGVtZW50KHhzZEVsdC5nZXRTdWJzdGl0dXRpb25Hcm91cCgpLCBjaGFtZWxlb24gPyB0YXJnZXROYW1lc3BhY2UgOiBudWxsKTsKLSAgICAgICAgICAgICAgICBpZiAoaGVhZCAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICBnZWx0LnNldFN1YnN0aXR1dGlvbkdyb3VwKGhlYWQuZ2V0UmVmKCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBTZXQgc3Vic3QgZ3JvdXAgbWVtYmVycwotICAgICAgICAgICAgcW5hbWUgPSBRTmFtZUhlbHBlci5mb3JMTlMobmFtZSwgdGFyZ2V0TmFtZXNwYWNlKTsKLSAgICAgICAgICAgIFNjaGVtYVR5cGVJbXBsIGRvY1R5cGUgPSAoU2NoZW1hVHlwZUltcGwpb3V0ZXJUeXBlOwotCi0gICAgICAgICAgICBRTmFtZVtdIHNnTWVtYmVycyA9IGRvY1R5cGUuZ2V0U3Vic3RpdHV0aW9uR3JvdXBNZW1iZXJzKCk7Ci0gICAgICAgICAgICBRTmFtZVNldEJ1aWxkZXIgdHJhbnNpdGlvblJ1bGVzID0gbmV3IFFOYW1lU2V0QnVpbGRlcigpOwotICAgICAgICAgICAgdHJhbnNpdGlvblJ1bGVzLmFkZChxbmFtZSk7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IHNnTWVtYmVycy5sZW5ndGggOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2VsdC5hZGRTdWJzdGl0dXRpb25Hcm91cE1lbWJlcihzZ01lbWJlcnNbaV0pOwotICAgICAgICAgICAgICAgIHRyYW5zaXRpb25SdWxlcy5hZGQoc2dNZW1iZXJzW2ldKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaW1wbC5zZXRUcmFuc2l0aW9uUnVsZXMoUU5hbWVTZXQuZm9yU3BlY2lmaWNhdGlvbih0cmFuc2l0aW9uUnVsZXMpLCBmYWxzZSk7Ci0gICAgICAgICAgICBpbXBsLnNldFRyYW5zaXRpb25Ob3RlcyhRTmFtZVNldC5FTVBUWSwgdHJ1ZSk7Ci0KLSAgICAgICAgICAgIGJvb2xlYW4gZmluYWxFeHQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2xlYW4gZmluYWxSZXN0ID0gZmFsc2U7Ci0gICAgICAgICAgICBPYmplY3QgZHMgPSB4c2RFbHQuZ2V0RmluYWwoKTsKLSAgICAgICAgICAgIGlmIChkcyAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChkcyBpbnN0YW5jZW9mIFN0cmluZyAmJiBkcy5lcXVhbHMoIiNhbGwiKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vICNBTEwgdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgZmluYWxFeHQgPSBmaW5hbFJlc3QgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChkcyBpbnN0YW5jZW9mIExpc3QpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoKChMaXN0KWRzKS5jb250YWlucygiZXh0ZW5zaW9uIikpCi0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbEV4dCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoKExpc3QpZHMpLmNvbnRhaW5zKCJyZXN0cmljdGlvbiIpKQotICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxSZXN0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdlbHQuc2V0RmluYWwoZmluYWxFeHQsIGZpbmFsUmVzdCk7Ci0gICAgICAgICAgICBnZWx0LnNldEFic3RyYWN0KHhzZEVsdC5nZXRBYnN0cmFjdCgpKTsKLSAgICAgICAgICAgIGdlbHQuc2V0RmlsZW5hbWUoZmluZEZpbGVuYW1lKHhzZEVsdCkpOwotICAgICAgICAgICAgZ2VsdC5zZXRQYXJzZUNvbnRleHQoeHNkRWx0LCB0YXJnZXROYW1lc3BhY2UsIGNoYW1lbGVvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoeHNkRWx0LmdldFR5cGUoKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBzVHlwZSA9IHN0YXRlLmZpbmRHbG9iYWxUeXBlKHhzZEVsdC5nZXRUeXBlKCksIGNoYW1lbGVvbiA/IHRhcmdldE5hbWVzcGFjZSA6IG51bGwgKTsKLSAgICAgICAgICAgIGlmIChzVHlwZSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHN0YXRlLm5vdEZvdW5kRXJyb3IoeHNkRWx0LmdldFR5cGUoKSwgWG1sRXJyb3JDb250ZXh0LlRZUEVfTk9UX0ZPVU5ELCB4c2RFbHQueGdldFR5cGUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sZWFuIHNpbXBsZVR5cGVkZWYgPSBmYWxzZTsKLSAgICAgICAgWG1sT2JqZWN0IHR5cGVkZWYgPSB4c2RFbHQuZ2V0Q29tcGxleFR5cGUoKTsKLSAgICAgICAgaWYgKHR5cGVkZWYgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgdHlwZWRlZiA9IHhzZEVsdC5nZXRTaW1wbGVUeXBlKCk7Ci0gICAgICAgICAgICBzaW1wbGVUeXBlZGVmID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgoc1R5cGUgIT0gbnVsbCkgJiYgdHlwZWRlZiAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0ZS5lcnJvcigiSWxsZWdhbCB0byBkZWZpbmUgYSBuZXN0ZWQgdHlwZSB3aGVuIGEgdHlwZSBhdHRyaWJ1dGUgaXMgc3BlY2lmaWVkIiwgWG1sRXJyb3JDb250ZXh0LlJFRFVOREFOVF9ORVNURURfVFlQRSwgdHlwZWRlZik7Ci0gICAgICAgICAgICB0eXBlZGVmID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0eXBlZGVmICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYVR5cGVJbXBsIHNUeXBlSW1wbCA9IG5ldyBTY2hlbWFUeXBlSW1wbChzdGF0ZS5zdHMoKSk7Ci0gICAgICAgICAgICBzVHlwZSA9IHNUeXBlSW1wbDsKLSAgICAgICAgICAgIHNUeXBlSW1wbC5zZXRDb250YWluZXJGaWVsZChpbXBsKTsKLSAgICAgICAgICAgIHNUeXBlSW1wbC5zZXRPdXRlclNjaGVtYVR5cGVSZWYob3V0ZXJUeXBlID09IG51bGwgPyBudWxsIDogb3V0ZXJUeXBlLmdldFJlZigpKTsKLSAgICAgICAgICAgIC8vIGxlYXZlIHRoZSBhbm9ueW1vdXMgdHlwZSB1bnJlc29sdmVkOiBpdCB3aWxsIGJlIHJlc29sdmVkIGxhdGVyLgotICAgICAgICAgICAgYW5vbnltb3VzVHlwZXMuYWRkKHNUeXBlKTsKLSAgICAgICAgICAgIHNUeXBlSW1wbC5zZXRTaW1wbGVUeXBlKHNpbXBsZVR5cGVkZWYpOwotICAgICAgICAgICAgc1R5cGVJbXBsLnNldFBhcnNlQ29udGV4dCh0eXBlZGVmLCB0YXJnZXROYW1lc3BhY2UsIGNoYW1lbGVvbiwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNUeXBlID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIHR5cGUgbWF5IGluaGVyaXQgZnJvbSBzdWJzdGl0dXRpb24gZ3JvdXAgaGVhZAotICAgICAgICAgICAgaWYgKHNnSGVhZCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNjaGVtYUdsb2JhbEVsZW1lbnQgaGVhZCA9IHN0YXRlLmZpbmRHbG9iYWxFbGVtZW50KHhzZEVsdC5nZXRTdWJzdGl0dXRpb25Hcm91cCgpLCBjaGFtZWxlb24gPyB0YXJnZXROYW1lc3BhY2UgOiBudWxsKTsKLQotICAgICAgICAgICAgICAgIC8vIEJ1ZyAtIERvIEkgbmVlZCB0byBjb3B5IHRoZSB0eXBlIGlmIGl0J3MgYW5vbnltb3VzPwotICAgICAgICAgICAgICAgIC8vIElmIGVsZW1lbnQgZG9lcyBub3QgZXhpc3QsIGVycm9yIGhhcyBhbHJlYWR5IGJlZW4gcmVwb3J0ZWQKLSAgICAgICAgICAgICAgICBpZiAoaGVhZCAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICBzVHlwZSA9IGhlYWQuZ2V0VHlwZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLQotCi0KLSAgICAgICAgaWYgKHNUeXBlID09IG51bGwpCi0gICAgICAgICAgICBzVHlwZSA9IEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLlNUX0FOWV9UWVBFOwotCi0gICAgICAgIFNPQVBBcnJheVR5cGUgd2F0ID0gbnVsbDsKLSAgICAgICAgWG1sQ3Vyc29yIGMgPSB4c2RFbHQubmV3Q3Vyc29yKCk7Ci0gICAgICAgIFN0cmluZyBhcnJheVR5cGUgPSBjLmdldEF0dHJpYnV0ZVRleHQoV1NETF9BUlJBWVRZUEVfTkFNRSk7Ci0gICAgICAgIGMuZGlzcG9zZSgpOwotICAgICAgICBpZiAoYXJyYXlUeXBlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHdhdCA9IG5ldyBTT0FQQXJyYXlUeXBlKGFycmF5VHlwZSwgbmV3IE5hbWVzcGFjZUNvbnRleHQoeHNkRWx0KSk7Ci0gICAgICAgIH0KLSAgICAgICAgaW1wbC5zZXRXc2RsQXJyYXlUeXBlKHdhdCk7Ci0KLSAgICAgICAgYm9vbGVhbiBpc0ZpeGVkID0geHNkRWx0LmlzU2V0Rml4ZWQoKTsKLSAgICAgICAgaWYgKHhzZEVsdC5pc1NldERlZmF1bHQoKSAmJiBpc0ZpeGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0ZS5lcnJvcigiU2hvdWxkIG5vdCBzZXQgYm90aCBkZWZhdWx0IGFuZCBmaXhlZCBvbiB0aGUgc2FtZSBlbGVtZW50IiwgWG1sRXJyb3JDb250ZXh0LlJFRFVOREFOVF9ERUZBVUxUX0ZJWEVELCB4c2RFbHQueGdldEZpeGVkKCkpOwotICAgICAgICAgICAgLy8gcmVjb3Zlcnk6IGlnbm9yZSBmaXhlZAotICAgICAgICAgICAgaXNGaXhlZCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGltcGwuc2V0UGFydGljbGVUeXBlKFNjaGVtYVBhcnRpY2xlLkVMRU1FTlQpOwotICAgICAgICBpbXBsLnNldE5hbWVBbmRUeXBlUmVmKHFuYW1lLCBzVHlwZS5nZXRSZWYoKSk7Ci0gICAgICAgIGltcGwuc2V0TmlsbGFibGUoeHNkRWx0LmdldE5pbGxhYmxlKCkpOwotICAgICAgICBpbXBsLnNldERlZmF1bHQoaXNGaXhlZCA/IHhzZEVsdC5nZXRGaXhlZCgpIDogeHNkRWx0LmdldERlZmF1bHQoKSwgaXNGaXhlZCwgeHNkRWx0KTsKLQotICAgICAgICBPYmplY3QgYmxvY2sgPSB4c2RFbHQuZ2V0QmxvY2soKTsKLSAgICAgICAgYm9vbGVhbiBibG9ja0V4dCA9IGZhbHNlOwotICAgICAgICBib29sZWFuIGJsb2NrUmVzdCA9IGZhbHNlOwotICAgICAgICBib29sZWFuIGJsb2NrU3Vic3QgPSBmYWxzZTsKLQotICAgICAgICBpZiAoYmxvY2sgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGJsb2NrIGluc3RhbmNlb2YgU3RyaW5nICYmIGJsb2NrLmVxdWFscygiI2FsbCIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vICNBTEwgdmFsdWUKLSAgICAgICAgICAgICAgICBibG9ja0V4dCA9IGJsb2NrUmVzdCA9IGJsb2NrU3Vic3QgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoYmxvY2sgaW5zdGFuY2VvZiBMaXN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICgoKExpc3QpYmxvY2spLmNvbnRhaW5zKCJleHRlbnNpb24iKSkKLSAgICAgICAgICAgICAgICAgICAgYmxvY2tFeHQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmICgoKExpc3QpYmxvY2spLmNvbnRhaW5zKCJyZXN0cmljdGlvbiIpKQotICAgICAgICAgICAgICAgICAgICBibG9ja1Jlc3QgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmICgoKExpc3QpYmxvY2spLmNvbnRhaW5zKCJzdWJzdGl0dXRpb24iKSkKLSAgICAgICAgICAgICAgICAgICAgYmxvY2tTdWJzdCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGltcGwuc2V0QmxvY2soYmxvY2tFeHQsIGJsb2NrUmVzdCwgYmxvY2tTdWJzdCk7Ci0KLSAgICAgICAgYm9vbGVhbiBjb25zdHJhaW50RmFpbGVkID0gZmFsc2U7Ci0KLSAgICAgICAgLy8gVHJhbnNsYXRlIElkZW50aXR5IGNvbnN0cmFpbnRzCi0KLSAgICAgICAgaW50IGxlbmd0aCA9IHhzZEVsdC5zaXplT2ZLZXlBcnJheSgpICsgeHNkRWx0LnNpemVPZktleXJlZkFycmF5KCkgKyB4c2RFbHQuc2l6ZU9mVW5pcXVlQXJyYXkoKTsKLSAgICAgICAgU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50SW1wbFtdIGNvbnN0cmFpbnRzID0gbmV3IFNjaGVtYUlkZW50aXR5Q29uc3RyYWludEltcGxbbGVuZ3RoXTsKLSAgICAgICAgaW50IGN1ciA9IDA7Ci0KLSAgICAgICAgLy8gSGFuZGxlIGtleSBjb25zdHJhaW50cwotICAgICAgICBLZXliYXNlW10ga2V5cyA9IHhzZEVsdC5nZXRLZXlBcnJheSgpOwotICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCBrZXlzLmxlbmd0aCA7IGkrKywgY3VyKyspIHsKLSAgICAgICAgICAgIGNvbnN0cmFpbnRzW2N1cl0gPSB0cmFuc2xhdGVJZGVudGl0eUNvbnN0cmFpbnQoa2V5c1tpXSwgdGFyZ2V0TmFtZXNwYWNlLCBjaGFtZWxlb24pOwotICAgICAgICAgICAgaWYgKGNvbnN0cmFpbnRzW2N1cl0gIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBjb25zdHJhaW50c1tjdXJdLnNldENvbnN0cmFpbnRDYXRlZ29yeShTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuQ0NfS0VZKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb25zdHJhaW50RmFpbGVkID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEhhbmRsZSB1bmlxdWUgY29uc3RyYWludHMKLSAgICAgICAgS2V5YmFzZVtdIHVjID0geHNkRWx0LmdldFVuaXF1ZUFycmF5KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IHVjLmxlbmd0aCA7IGkrKywgY3VyKyspIHsKLSAgICAgICAgICAgIGNvbnN0cmFpbnRzW2N1cl0gPSB0cmFuc2xhdGVJZGVudGl0eUNvbnN0cmFpbnQodWNbaV0sIHRhcmdldE5hbWVzcGFjZSwgY2hhbWVsZW9uKTsKLSAgICAgICAgICAgIGlmIChjb25zdHJhaW50c1tjdXJdICE9IG51bGwpCi0gICAgICAgICAgICAgICAgY29uc3RyYWludHNbY3VyXS5zZXRDb25zdHJhaW50Q2F0ZWdvcnkoU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LkNDX1VOSVFVRSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29uc3RyYWludEZhaWxlZCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBIYW5kbGUga2V5cmVmIGNvbnN0cmFpbnRzCi0gICAgICAgIEtleXJlZkRvY3VtZW50LktleXJlZltdIGtycyA9IHhzZEVsdC5nZXRLZXlyZWZBcnJheSgpOwotICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCBrcnMubGVuZ3RoIDsgaSsrLCBjdXIrKykgewotICAgICAgICAgICAgY29uc3RyYWludHNbY3VyXSA9IHRyYW5zbGF0ZUlkZW50aXR5Q29uc3RyYWludChrcnNbaV0sIHRhcmdldE5hbWVzcGFjZSwgY2hhbWVsZW9uKTsKLSAgICAgICAgICAgIGlmIChjb25zdHJhaW50c1tjdXJdICE9IG51bGwpCi0gICAgICAgICAgICAgICAgY29uc3RyYWludHNbY3VyXS5zZXRDb25zdHJhaW50Q2F0ZWdvcnkoU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LkNDX0tFWVJFRik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29uc3RyYWludEZhaWxlZCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWNvbnN0cmFpbnRGYWlsZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWZbXSByZWZzID0gbmV3IFNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWZbbGVuZ3RoXTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IHJlZnMubGVuZ3RoIDsgaSsrKQotICAgICAgICAgICAgICAgIHJlZnNbaV0gPSBjb25zdHJhaW50c1tpXS5nZXRSZWYoKTsKLQotICAgICAgICAgICAgaW1wbC5zZXRJZGVudGl0eUNvbnN0cmFpbnRzKHJlZnMpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGltcGw7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyByZW1vdmVXaGl0ZXNwYWNlKFN0cmluZyB4cGF0aCkKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB4cGF0aC5sZW5ndGgoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyIGNoID0geHBhdGguY2hhckF0KGkpOwotICAgICAgICAgICAgaWYgKFhNTENoYXIuaXNTcGFjZShjaCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBzYi5hcHBlbmQoY2gpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5yZWdleC5SZWd1bGFyRXhwcmVzc2lvbiBYUEFUSF9SRUdFWFAgPSBuZXcgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnJlZ2V4LlJlZ3VsYXJFeHByZXNzaW9uKCIoXFwuLy8pPygoKChjaGlsZDo6KT8oKFxcaVxcYyo6KT8oXFxpXFxjKnxcXCopKSl8XFwuKS8pKigoKChjaGlsZDo6KT8oKFxcaVxcYyo6KT8oXFxpXFxjKnxcXCopKSl8XFwuKXwoKGF0dHJpYnV0ZTo6fEApKChcXGlcXGMqOik/KFxcaVxcYyp8XFwqKSkpKShcXHwoXFwuLy8pPygoKChjaGlsZDo6KT8oKFxcaVxcYyo6KT8oXFxpXFxjKnxcXCopKSl8XFwuKS8pKigoKChjaGlsZDo6KT8oKFxcaVxcYyo6KT8oXFxpXFxjKnxcXCopKSl8XFwuKXwoKGF0dHJpYnV0ZTo6fEApKChcXGlcXGMqOik/KFxcaVxcYyp8XFwqKSkpKSkqIiwgIlgiKTsKLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGNoZWNrWFBhdGhTeW50YXgoU3RyaW5nIHhwYXRoKQotICAgIHsKLSAgICAgICAgaWYgKHhwYXRoID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICAvLyBzdHJpcCB3aGl0ZXNwYWNlIGZyb20geHBhdGgKLSAgICAgICAgeHBhdGggPSByZW1vdmVXaGl0ZXNwYWNlKHhwYXRoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIGFwcGx5IHJlZ2V4cAotICAgICAgICBzeW5jaHJvbml6ZWQgKFhQQVRIX1JFR0VYUCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChYUEFUSF9SRUdFWFAubWF0Y2hlcyh4cGF0aCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50SW1wbCB0cmFuc2xhdGVJZGVudGl0eUNvbnN0cmFpbnQoS2V5YmFzZSBwYXJzZUlDLCAKLSAgICAgICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSwgYm9vbGVhbiBjaGFtZWxlb24pCi0gICAgewotICAgICAgICBTdHNjU3RhdGUgc3RhdGUgPSBTdHNjU3RhdGUuZ2V0KCk7Ci0gICAgICAgIAotICAgICAgICAvLyBmaXJzdCBkbyBzb21lIGNoZWNraW5nCi0gICAgICAgIFN0cmluZyBzZWxlY3RvciA9IHBhcnNlSUMuZ2V0U2VsZWN0b3IoKSA9PSBudWxsID8gbnVsbCA6IHBhcnNlSUMuZ2V0U2VsZWN0b3IoKS5nZXRYcGF0aCgpOwotICAgICAgICBpZiAoIWNoZWNrWFBhdGhTeW50YXgoc2VsZWN0b3IpKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHNjU3RhdGUuZ2V0KCkuZXJyb3IoIkludmFsaWQgeHBhdGggaW4gc2VsZWN0b3IuIiwKLSAgICAgICAgICAgICAgICBYbWxFcnJvckNvbnRleHQuWFBBVEhfQ09NUElMQVRJT05fRkFJTFVSRSwgcGFyc2VJQy5nZXRTZWxlY3RvcigpLnhnZXRYcGF0aCgpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBGaWVsZERvY3VtZW50LkZpZWxkW10gZmllbGRFbHRzID0gcGFyc2VJQy5nZXRGaWVsZEFycmF5KCk7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZmllbGRFbHRzLmxlbmd0aDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWNoZWNrWFBhdGhTeW50YXgoZmllbGRFbHRzW2pdLmdldFhwYXRoKCkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0c2NTdGF0ZS5nZXQoKS5lcnJvcigiSW52YWxpZCB4cGF0aCBpbiBmaWVsZC4iLAotICAgICAgICAgICAgICAgICAgICBYbWxFcnJvckNvbnRleHQuWFBBVEhfQ09NUElMQVRJT05fRkFJTFVSRSwgZmllbGRFbHRzW2pdLnhnZXRYcGF0aCgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gdGhlbiB0cmFuc2xhdGUuCi0gICAgICAgIFNjaGVtYUlkZW50aXR5Q29uc3RyYWludEltcGwgaWMgPSBuZXcgU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50SW1wbChzdGF0ZS5zdHMoKSk7Ci0gICAgICAgIGljLnNldE5hbWUoUU5hbWVIZWxwZXIuZm9yTE5TKHBhcnNlSUMuZ2V0TmFtZSgpLCB0YXJnZXROYW1lc3BhY2UpKTsKLSAgICAgICAgaWMuc2V0U2VsZWN0b3IocGFyc2VJQy5nZXRTZWxlY3RvcigpLmdldFhwYXRoKCkpOwotICAgICAgICBpYy5zZXRQYXJzZUNvbnRleHQocGFyc2VJQywgdGFyZ2V0TmFtZXNwYWNlLCBjaGFtZWxlb24pOwotCi0gICAgICAgIC8vIFNldCB0aGUgbnMgbWFwCi0gICAgICAgIFhtbEN1cnNvciBjID0gcGFyc2VJQy5uZXdDdXJzb3IoKTsKLSAgICAgICAgTWFwIG5zTWFwID0gbmV3IEhhc2hNYXAoKTsKLQotICAgICAgICBjLmdldEFsbE5hbWVzcGFjZXMobnNNYXApOwotICAgICAgICBuc01hcC5yZW1vdmUoIiIpOyAvLyBSZW1vdmUgdGhlIGRlZmF1bHQgbWFwcGluZy4gVGhpcyBjYW5ub3QgYmUgdXNlZCBieSB0aGUgeHBhdGggZXhwcmVzc2lvbnMuCi0gICAgICAgIGljLnNldE5TTWFwKG5zTWFwKTsKLSAgICAgICAgYy5kaXNwb3NlKCk7Ci0KLSAgICAgICAgU3RyaW5nW10gZmllbGRzID0gbmV3IFN0cmluZ1tmaWVsZEVsdHMubGVuZ3RoXTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDAgOyBqIDwgZmllbGRzLmxlbmd0aCA7IGorKykKLSAgICAgICAgICAgIGZpZWxkc1tqXSA9IGZpZWxkRWx0c1tqXS5nZXRYcGF0aCgpOwotICAgICAgICBpYy5zZXRGaWVsZHMoZmllbGRzKTsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgaWMuYnVpbGRQYXRocygpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChYUGF0aC5YUGF0aENvbXBpbGVFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgU3RzY1N0YXRlLmdldCgpLmVycm9yKCJJbnZhbGlkIHhwYXRoIGluIGlkZW50aXR5IGNvbnN0cmFpbnQ6ICIgKyBlLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgICBYbWxFcnJvckNvbnRleHQuWFBBVEhfQ09NUElMQVRJT05fRkFJTFVSRSwgcGFyc2VJQyk7Ci0KLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGUuYWRkSWRDb25zdHJhaW50KGljKTsKLQotICAgICAgICByZXR1cm4gaWM7Ci0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFNjaGVtYU1vZGVsR3JvdXBJbXBsIHRyYW5zbGF0ZU1vZGVsR3JvdXAoTmFtZWRHcm91cCBuYW1lZEdyb3VwLCBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlLCBib29sZWFuIGNoYW1lbGVvbiwgYm9vbGVhbiByZWRlZmluaXRpb24pCi0gICAgewotICAgICAgICBTdHJpbmcgbmFtZSA9IG5hbWVkR3JvdXAuZ2V0TmFtZSgpOwotICAgICAgICBpZiAobmFtZSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHNjU3RhdGUuZ2V0KCkuZXJyb3IoIk1vZGVsIGdyb3VwcyBtdXN0IGJlIG5hbWVkIiwgWG1sRXJyb3JDb250ZXh0Lk1PREVMX0dST1VQX01JU1NJTkdfTkFNRSwgbmFtZWRHcm91cCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICBTY2hlbWFNb2RlbEdyb3VwSW1wbCByZXN1bHQgPSBuZXcgU2NoZW1hTW9kZWxHcm91cEltcGwoU3RzY1N0YXRlLmdldCgpLnN0cygpKTsKLSAgICAgICAgcmVzdWx0LmluaXQoUU5hbWVIZWxwZXIuZm9yTE5TKG5hbWUsIHRhcmdldE5hbWVzcGFjZSksIHRhcmdldE5hbWVzcGFjZSwgY2hhbWVsZW9uLCByZWRlZmluaXRpb24sIG5hbWVkR3JvdXApOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU2NoZW1hQXR0cmlidXRlR3JvdXBJbXBsIHRyYW5zbGF0ZUF0dHJpYnV0ZUdyb3VwKEF0dHJpYnV0ZUdyb3VwIGF0dHJHcm91cCwgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSwgYm9vbGVhbiBjaGFtZWxlb24sIGJvb2xlYW4gcmVkZWZpbml0aW9uKQotICAgIHsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBhdHRyR3JvdXAuZ2V0TmFtZSgpOwotICAgICAgICBpZiAobmFtZSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHNjU3RhdGUuZ2V0KCkuZXJyb3IoIkF0dHJpYnV0ZSBncm91cHMgbXVzdCBiZSBuYW1lZCIsIFhtbEVycm9yQ29udGV4dC5BVFRSSUJVVEVfR1JPVVBfTUlTU0lOR19OQU1FLCBhdHRyR3JvdXApOwotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgU2NoZW1hQXR0cmlidXRlR3JvdXBJbXBsIHJlc3VsdCA9IG5ldyBTY2hlbWFBdHRyaWJ1dGVHcm91cEltcGwoU3RzY1N0YXRlLmdldCgpLnN0cygpKTsKLSAgICAgICAgcmVzdWx0LmluaXQoUU5hbWVIZWxwZXIuZm9yTE5TKG5hbWUsIHRhcmdldE5hbWVzcGFjZSksIHRhcmdldE5hbWVzcGFjZSwgY2hhbWVsZW9uLCByZWRlZmluaXRpb24sIGF0dHJHcm91cCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgc3RhdGljIEZvcm1DaG9pY2UgZmluZEF0dHJpYnV0ZUZvcm1EZWZhdWx0KFhtbE9iamVjdCBvYmopCi0gICAgewotICAgICAgICBYbWxDdXJzb3IgY3VyID0gb2JqLm5ld0N1cnNvcigpOwotICAgICAgICB3aGlsZSAoY3VyLmdldE9iamVjdCgpLnNjaGVtYVR5cGUoKSAhPSBTY2hlbWEudHlwZSkKLSAgICAgICAgICAgIGlmICghY3VyLnRvUGFyZW50KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHJldHVybiAoKFNjaGVtYSljdXIuZ2V0T2JqZWN0KCkpLnhnZXRBdHRyaWJ1dGVGb3JtRGVmYXVsdCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBTY2hlbWFMb2NhbEF0dHJpYnV0ZUltcGwgdHJhbnNsYXRlQXR0cmlidXRlKAotICAgICAgICBBdHRyaWJ1dGUgeHNkQXR0ciwgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSwgYm9vbGVhbiBjaGFtZWxlb24sIExpc3QgYW5vbnltb3VzVHlwZXMsCi0gICAgICAgIFNjaGVtYVR5cGUgb3V0ZXJUeXBlLCBTY2hlbWFBdHRyaWJ1dGVNb2RlbCBiYXNlTW9kZWwsIGJvb2xlYW4gbG9jYWwpCi0gICAgewotICAgICAgICBTdHNjU3RhdGUgc3RhdGUgPSBTdHNjU3RhdGUuZ2V0KCk7Ci0KLSAgICAgICAgU3RyaW5nIG5hbWUgPSB4c2RBdHRyLmdldE5hbWUoKTsKLSAgICAgICAgUU5hbWUgcmVmID0geHNkQXR0ci5nZXRSZWYoKTsKLQotICAgICAgICBpZiAocmVmICE9IG51bGwgJiYgbmFtZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobmFtZS5lcXVhbHMocmVmLmdldExvY2FsUGFydCgpKSAmJiB1cmlNYXRjaCh0YXJnZXROYW1lc3BhY2UsIHJlZi5nZXROYW1lc3BhY2VVUkkoKSkpCi0gICAgICAgICAgICAgICAgc3RhdGUud2FybmluZygiQXR0cmlidXRlICIgKyBuYW1lICsgIiBzcGVjaWZpZXMgYm90aCBhIHJlZiBhbmQgYSBuYW1lIiwgWG1sRXJyb3JDb250ZXh0LkVMRU1FTlRfRVhUUkFfUkVGLCB4c2RBdHRyLnhnZXRSZWYoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkF0dHJpYnV0ZSAiICsgbmFtZSArICIgc3BlY2lmaWVzIGJvdGggYSByZWYgYW5kIGEgbmFtZSIsIFhtbEVycm9yQ29udGV4dC5FTEVNRU5UX0VYVFJBX1JFRiwgeHNkQXR0ci54Z2V0UmVmKCkpOwotICAgICAgICAgICAgLy8gaWdub3JlIG5hbWUKLSAgICAgICAgICAgIG5hbWUgPSBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZWYgPT0gbnVsbCAmJiBuYW1lID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0YXRlLmVycm9yKCJBdHRyaWJ1dGUgaGFzIG5vIG5hbWUiLCBYbWxFcnJvckNvbnRleHQuRUxFTUVOVF9NSVNTSU5HX05BTUUsIHhzZEF0dHIpOwotICAgICAgICAgICAgLy8gcmVjb3Zlcnk6IGlnbm9yZSB0aGlzIGVsZW1lbnQKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGlmIChuYW1lICE9IG51bGwgJiYgIVhNTENoYXIuaXNWYWxpZE5DTmFtZShuYW1lKSkKLSAgICAgICAgewotICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkludmFsaWQgYXR0cmlidXRlIG5hbWUgXCIiICsgbmFtZSArICJcIiIsIFhtbEVycm9yQ29udGV4dC5JTlZBTElEX05BTUUsIHhzZEF0dHIueGdldE5hbWUoKSk7Ci0gICAgICAgICAgICAvLyByZWNvdmVyeTogbGV0IHRoZSBuYW1lIGdvIHRocm91Z2ggYW55d2F5LgotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbGVhbiBpc0ZpeGVkID0gZmFsc2U7Ci0gICAgICAgIFN0cmluZyBkZWZ0ZXh0ID0gbnVsbDsKLSAgICAgICAgUU5hbWUgcW5hbWU7Ci0gICAgICAgIFNjaGVtYUxvY2FsQXR0cmlidXRlSW1wbCBzQXR0cjsKLSAgICAgICAgU2NoZW1hVHlwZSBzVHlwZSA9IG51bGw7Ci0gICAgICAgIGludCB1c2UgPSBTY2hlbWFMb2NhbEF0dHJpYnV0ZS5PUFRJT05BTDsKLQotICAgICAgICBpZiAobG9jYWwpCi0gICAgICAgICAgICBzQXR0ciA9IG5ldyBTY2hlbWFMb2NhbEF0dHJpYnV0ZUltcGwoKTsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBzQXR0ciA9IG5ldyBTY2hlbWFHbG9iYWxBdHRyaWJ1dGVJbXBsKHN0YXRlLnN0cygpKTsKLSAgICAgICAgICAgICgoU2NoZW1hR2xvYmFsQXR0cmlidXRlSW1wbClzQXR0cikuc2V0UGFyc2VDb250ZXh0KHhzZEF0dHIsIHRhcmdldE5hbWVzcGFjZSwgY2hhbWVsZW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZWYgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHhzZEF0dHIuZ2V0VHlwZSgpICE9IG51bGwgfHwgeHNkQXR0ci5nZXRTaW1wbGVUeXBlKCkgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvcigiQXR0cmlidXRlIHJlZmVyZW5jZSBjYW5ub3QgYWxzbyBzcGVjaWZ5IHR5cGUiLCBYbWxFcnJvckNvbnRleHQuSU5WQUxJRF9OQU1FLCB4c2RBdHRyKTsKLSAgICAgICAgICAgICAgICAvLyByZWNvdmVyeTogaWdub3JlIHR5cGUsIHNpbXBsZVR5cGUKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHhzZEF0dHIuZ2V0Rm9ybSgpICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkF0dHJpYnV0ZSByZWZlcmVuY2UgY2Fubm90IGFsc28gc3BlY2lmeSBmb3JtIiwgWG1sRXJyb3JDb250ZXh0LklOVkFMSURfTkFNRSwgeHNkQXR0cik7Ci0gICAgICAgICAgICAgICAgLy8gcmVjb3Zlcnk6IGlnbm9yZSBmb3JtCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFNjaGVtYUdsb2JhbEF0dHJpYnV0ZSByZWZlcmVuY2VkID0gc3RhdGUuZmluZEdsb2JhbEF0dHJpYnV0ZShyZWYsIGNoYW1lbGVvbiA/IHRhcmdldE5hbWVzcGFjZSA6IG51bGwpOwotICAgICAgICAgICAgaWYgKHJlZmVyZW5jZWQgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdGF0ZS5ub3RGb3VuZEVycm9yKHJlZiwgWG1sRXJyb3JDb250ZXh0LkFUVFJJQlVURV9SRUZfTk9UX0ZPVU5ELCB4c2RBdHRyLnhnZXRSZWYoKSk7Ci0gICAgICAgICAgICAgICAgLy8gcmVjb3Zlcnk6IGlnbm9yZSB0aGlzIGVsZW1lbnQKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcW5hbWUgPSByZWY7Ci0gICAgICAgICAgICB1c2UgPSByZWZlcmVuY2VkLmdldFVzZSgpOwotICAgICAgICAgICAgc1R5cGUgPSByZWZlcmVuY2VkLmdldFR5cGUoKTsKLSAgICAgICAgICAgIGRlZnRleHQgPSByZWZlcmVuY2VkLmdldERlZmF1bHRUZXh0KCk7Ci0gICAgICAgICAgICBpZiAoZGVmdGV4dCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlzRml4ZWQgPSByZWZlcmVuY2VkLmlzRml4ZWQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChsb2NhbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBGb3JtQ2hvaWNlIGZvcm0gPSB4c2RBdHRyLnhnZXRGb3JtKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGZvcm0gPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgZm9ybSA9IGZpbmRBdHRyaWJ1dGVGb3JtRGVmYXVsdCh4c2RBdHRyKTsKLSAgICAgICAgICAgICAgICBpZiAoZm9ybSA9PSBudWxsIHx8IGZvcm0uZ2V0U3RyaW5nVmFsdWUoKS5lcXVhbHMoInVucXVhbGlmaWVkIikpCi0gICAgICAgICAgICAgICAgICAgIHFuYW1lID0gUU5hbWVIZWxwZXIuZm9yTE4obmFtZSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBxbmFtZSA9IFFOYW1lSGVscGVyLmZvckxOUyhuYW1lLCB0YXJnZXROYW1lc3BhY2UpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHFuYW1lID0gUU5hbWVIZWxwZXIuZm9yTE5TKG5hbWUsIHRhcmdldE5hbWVzcGFjZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh4c2RBdHRyLmdldFR5cGUoKSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNUeXBlID0gc3RhdGUuZmluZEdsb2JhbFR5cGUoeHNkQXR0ci5nZXRUeXBlKCksIGNoYW1lbGVvbiA/IHRhcmdldE5hbWVzcGFjZSA6IG51bGwgKTsKLSAgICAgICAgICAgICAgICBpZiAoc1R5cGUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUubm90Rm91bmRFcnJvcih4c2RBdHRyLmdldFR5cGUoKSwgWG1sRXJyb3JDb250ZXh0LlRZUEVfTk9UX0ZPVU5ELCB4c2RBdHRyLnhnZXRUeXBlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAocW5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJJbGxlZ2FsIG5hbWVzcGFjZSBmb3IgYXR0cmlidXRlIGRlY2xhcmF0aW9uLiIsIFhtbEVycm9yQ29udGV4dC5JTlZBTElEX05BTUUsIHhzZEF0dHIueGdldE5hbWUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChxbmFtZS5nZXROYW1lc3BhY2VVUkkoKS5sZW5ndGgoKSA9PSAwICYmIHFuYW1lLmdldExvY2FsUGFydCgpLmVxdWFscygieG1sbnMiKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvcigiSWxsZWdhbCBuYW1lIGZvciBhdHRyaWJ1dGUgZGVjbGFyYXRpb24uIiwgWG1sRXJyb3JDb250ZXh0LklOVkFMSURfTkFNRSwgeHNkQXR0ci54Z2V0TmFtZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgWG1sT2JqZWN0IHR5cGVkZWYgPSB4c2RBdHRyLmdldFNpbXBsZVR5cGUoKTsKLQotICAgICAgICAgICAgaWYgKChzVHlwZSAhPSBudWxsKSAmJiB0eXBlZGVmICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIklsbGVnYWwgdG8gZGVmaW5lIGEgbmVzdGVkIHR5cGUgd2hlbiBhIHR5cGUgYXR0cmlidXRlIGlzIHNwZWNpZmllZCIsIFhtbEVycm9yQ29udGV4dC5SRURVTkRBTlRfTkVTVEVEX1RZUEUsIHR5cGVkZWYpOwotICAgICAgICAgICAgICAgIHR5cGVkZWYgPSBudWxsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodHlwZWRlZiAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNjaGVtYVR5cGVJbXBsIHNUeXBlSW1wbCA9IG5ldyBTY2hlbWFUeXBlSW1wbChzdGF0ZS5zdHMoKSk7Ci0gICAgICAgICAgICAgICAgc1R5cGUgPSBzVHlwZUltcGw7Ci0gICAgICAgICAgICAgICAgc1R5cGVJbXBsLnNldENvbnRhaW5lckZpZWxkKHNBdHRyKTsKLSAgICAgICAgICAgICAgICBzVHlwZUltcGwuc2V0T3V0ZXJTY2hlbWFUeXBlUmVmKG91dGVyVHlwZSA9PSBudWxsID8gbnVsbCA6IG91dGVyVHlwZS5nZXRSZWYoKSk7Ci0gICAgICAgICAgICAgICAgLy8gbGVhdmUgdGhlIGFub255bW91cyB0eXBlIHVucmVzb2x2ZWQ6IGl0IHdpbGwgYmUgcmVzb2x2ZWQgbGF0ZXIuCi0gICAgICAgICAgICAgICAgYW5vbnltb3VzVHlwZXMuYWRkKHNUeXBlKTsKLSAgICAgICAgICAgICAgICBzVHlwZUltcGwuc2V0U2ltcGxlVHlwZSh0cnVlKTsKLSAgICAgICAgICAgICAgICBzVHlwZUltcGwuc2V0UGFyc2VDb250ZXh0KHR5cGVkZWYsIHRhcmdldE5hbWVzcGFjZSwgY2hhbWVsZW9uLCBmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzVHlwZSA9PSBudWxsICYmIGJhc2VNb2RlbCAhPSBudWxsICYmIGJhc2VNb2RlbC5nZXRBdHRyaWJ1dGUocW5hbWUpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgc1R5cGUgPSBiYXNlTW9kZWwuZ2V0QXR0cmlidXRlKHFuYW1lKS5nZXRUeXBlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc1R5cGUgPT0gbnVsbCkKLSAgICAgICAgICAgIHNUeXBlID0gQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfQU5ZX1NJTVBMRTsKLQotICAgICAgICBpZiAoIXNUeXBlLmlzU2ltcGxlVHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0ZS5lcnJvcigiQXR0cmlidXRlcyBtdXN0IGhhdmUgYSBzaW1wbGUgdHlwZSAobm90IGNvbXBsZXgpLiIsIFhtbEVycm9yQ29udGV4dC5JTlZBTElEX1NDSEVNQSwgeHNkQXR0cik7Ci0gICAgICAgICAgICAvLyByZWNvdmVyeTogc3dpdGNoIHRvIHRoZSBhbnktdHlwZQotICAgICAgICAgICAgc1R5cGUgPSBCdWlsdGluU2NoZW1hVHlwZVN5c3RlbS5TVF9BTllfU0lNUExFOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoeHNkQXR0ci5pc1NldFVzZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICB1c2UgPSB0cmFuc2xhdGVVc2VDb2RlKHhzZEF0dHIueGdldFVzZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gaWdub3JlIHJlZmVyZW5jZWQgZGVmYXVsdCBpZiBubyBsb25nZXIgb3B0aW9uYWwKLSAgICAgICAgICAgIGlmICh1c2UgIT0gU2NoZW1hTG9jYWxBdHRyaWJ1dGUuT1BUSU9OQUwgJiYgIWlzRml4ZWQpCi0gICAgICAgICAgICAgICAgZGVmdGV4dCA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICh4c2RBdHRyLmlzU2V0RGVmYXVsdCgpIHx8IHhzZEF0dHIuaXNTZXRGaXhlZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXNGaXhlZCAmJiAheHNkQXR0ci5pc1NldEZpeGVkKCkpCi0gICAgICAgICAgICAgICAgc3RhdGUuZXJyb3IoIkEgdXNlIG9mIGEgZml4ZWQgYXR0cmlidXRlIGRlZmluaXRpb24gbXVzdCBhbHNvIGJlIGZpeGVkIiwgWG1sRXJyb3JDb250ZXh0LlJFRFVOREFOVF9ERUZBVUxUX0ZJWEVELCB4c2RBdHRyLnhnZXRGaXhlZCgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaXNGaXhlZCA9IHhzZEF0dHIuaXNTZXRGaXhlZCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoeHNkQXR0ci5pc1NldERlZmF1bHQoKSAmJiBpc0ZpeGVkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN0YXRlLmVycm9yKCJTaG91bGQgbm90IHNldCBib3RoIGRlZmF1bHQgYW5kIGZpeGVkIG9uIHRoZSBzYW1lIGF0dHJpYnV0ZSIsIFhtbEVycm9yQ29udGV4dC5SRURVTkRBTlRfREVGQVVMVF9GSVhFRCwgeHNkQXR0ci54Z2V0Rml4ZWQoKSk7Ci0gICAgICAgICAgICAgICAgLy8gcmVjb3Zlcnk6IGlnbm9yZSBmaXhlZAotICAgICAgICAgICAgICAgIGlzRml4ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZnRleHQgPSBpc0ZpeGVkID8geHNkQXR0ci5nZXRGaXhlZCgpIDogeHNkQXR0ci5nZXREZWZhdWx0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWxvY2FsKQotICAgICAgICB7Ci0gICAgICAgICAgICAoKFNjaGVtYUdsb2JhbEF0dHJpYnV0ZUltcGwpc0F0dHIpLnNldEZpbGVuYW1lKGZpbmRGaWxlbmFtZSh4c2RBdHRyKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBTT0FQQXJyYXlUeXBlIHdhdCA9IG51bGw7Ci0gICAgICAgIFhtbEN1cnNvciBjID0geHNkQXR0ci5uZXdDdXJzb3IoKTsKLSAgICAgICAgU3RyaW5nIGFycmF5VHlwZSA9IGMuZ2V0QXR0cmlidXRlVGV4dChXU0RMX0FSUkFZVFlQRV9OQU1FKTsKLSAgICAgICAgYy5kaXNwb3NlKCk7Ci0gICAgICAgIGlmIChhcnJheVR5cGUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgd2F0ID0gbmV3IFNPQVBBcnJheVR5cGUoYXJyYXlUeXBlLCBuZXcgTmFtZXNwYWNlQ29udGV4dCh4c2RBdHRyKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzQXR0ci5pbml0KAotICAgICAgICAgICAgcW5hbWUsCi0gICAgICAgICAgICBzVHlwZS5nZXRSZWYoKSwKLSAgICAgICAgICAgIHVzZSwKLSAgICAgICAgICAgIGRlZnRleHQsIHhzZEF0dHIsIG51bGwsIGlzRml4ZWQsCi0gICAgICAgICAgICB3YXQpOwotCi0gICAgICAgIHJldHVybiBzQXR0cjsKLSAgICB9Ci0KLSAgICBzdGF0aWMgaW50IHRyYW5zbGF0ZVVzZUNvZGUoQXR0cmlidXRlLlVzZSBhdHRydXNlKQotICAgIHsKLSAgICAgICAgaWYgKGF0dHJ1c2UgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBTY2hlbWFMb2NhbEF0dHJpYnV0ZS5PUFRJT05BTDsKLQotICAgICAgICBTdHJpbmcgdmFsID0gYXR0cnVzZS5nZXRTdHJpbmdWYWx1ZSgpOwotICAgICAgICBpZiAodmFsLmVxdWFscygib3B0aW9uYWwiKSkKLSAgICAgICAgICAgIHJldHVybiBTY2hlbWFMb2NhbEF0dHJpYnV0ZS5PUFRJT05BTDsKLSAgICAgICAgaWYgKHZhbC5lcXVhbHMoInJlcXVpcmVkIikpCi0gICAgICAgICAgICByZXR1cm4gU2NoZW1hTG9jYWxBdHRyaWJ1dGUuUkVRVUlSRUQ7Ci0gICAgICAgIGlmICh2YWwuZXF1YWxzKCJwcm9oaWJpdGVkIikpCi0gICAgICAgICAgICByZXR1cm4gU2NoZW1hTG9jYWxBdHRyaWJ1dGUuUFJPSElCSVRFRDsKLSAgICAgICAgcmV0dXJuIFNjaGVtYUxvY2FsQXR0cmlidXRlLk9QVElPTkFMOwotICAgIH0KLQotICAgIHN0YXRpYyBYbWxJbnRlZ2VyIGJ1aWxkTm5JbnRlZ2VyKFhtbEFueVNpbXBsZVR5cGUgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICBTdHJpbmcgdGV4dCA9IHZhbHVlLmdldFN0cmluZ1ZhbHVlKCk7Ci0gICAgICAgIEJpZ0ludGVnZXIgYmlnSW50OwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgYmlnSW50ID0gbmV3IEJpZ0ludGVnZXIodGV4dCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHNjU3RhdGUuZ2V0KCkuZXJyb3IoIk11c3QgYmUgbm9ubmVnYXRpdmUgaW50ZWdlciIsIFhtbEVycm9yQ29udGV4dC5NQUxGT1JNRURfTlVNQkVSLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChiaWdJbnQuc2lnbnVtKCkgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHNjU3RhdGUuZ2V0KCkuZXJyb3IoIk11c3QgYmUgbm9ubmVnYXRpdmUgaW50ZWdlciIsIFhtbEVycm9yQ29udGV4dC5NQUxGT1JNRURfTlVNQkVSLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgWG1sSW50ZWdlckltcGwgaSA9IG5ldyBYbWxJbnRlZ2VySW1wbCgpOwotICAgICAgICAgICAgaS5zZXQoYmlnSW50KTsKLSAgICAgICAgICAgIGkuc2V0SW1tdXRhYmxlKCk7Ci0gICAgICAgICAgICByZXR1cm4gaTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0c2NTdGF0ZS5nZXQoKS5lcnJvcigiSW50ZXJuYWwgZXJyb3IgcHJvY2Vzc2luZyBudW1iZXIiLCBYbWxFcnJvckNvbnRleHQuTUFMRk9STUVEX05VTUJFUiwgdmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzUmVzZXJ2ZWRUeXBlTmFtZShRTmFtZSBuYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChCdWlsdGluU2NoZW1hVHlwZVN5c3RlbS5nZXQoKS5maW5kVHlwZShuYW1lKSAhPSBudWxsKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9YbWxWYWx1ZVJlZi5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zY2hlbWEvWG1sVmFsdWVSZWYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM5ZmRlNi4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3NjaGVtYS9YbWxWYWx1ZVJlZi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnNjaGVtYTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotcHVibGljIGNsYXNzIFhtbFZhbHVlUmVmCi17Ci0gICAgWG1sQW55U2ltcGxlVHlwZSBfb2JqOwotICAgIFNjaGVtYVR5cGUuUmVmIF90eXBlcmVmOwotICAgIE9iamVjdCBfaW5pdFZhbDsKLQotICAgIFhtbFZhbHVlUmVmKFhtbEFueVNpbXBsZVR5cGUgeG9iaikKLSAgICB7Ci0gICAgICAgIGlmICh4b2JqID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7Ci0gICAgICAgIF9vYmogPSB4b2JqOwotICAgIH0KLQotICAgIFhtbFZhbHVlUmVmKFNjaGVtYVR5cGUuUmVmIHR5cGVyZWYsIE9iamVjdCBpbml0VmFsKQotICAgIHsKLSAgICAgICAgaWYgKHR5cGVyZWYgPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLSAgICAgICAgX3R5cGVyZWYgPSB0eXBlcmVmOwotICAgICAgICBfaW5pdFZhbCA9IGluaXRWYWw7Ci0gICAgfQotCi0gICAgc3luY2hyb25pemVkIFhtbEFueVNpbXBsZVR5cGUgZ2V0KCkKLSAgICB7Ci0gICAgICAgIGlmIChfb2JqID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYVR5cGUgdHlwZSA9IF90eXBlcmVmLmdldCgpOwotICAgICAgICAgICAgaWYgKHR5cGUuZ2V0U2ltcGxlVmFyaWV0eSgpICE9IFNjaGVtYVR5cGUuTElTVCkKLSAgICAgICAgICAgICAgICBfb2JqID0gdHlwZS5uZXdWYWx1ZShfaW5pdFZhbCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTGlzdCBhY3R1YWxWYWxzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9ICgoTGlzdClfaW5pdFZhbCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFhtbFZhbHVlUmVmIHJlZiA9IChYbWxWYWx1ZVJlZilpLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgYWN0dWFsVmFscy5hZGQocmVmLmdldCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgX29iaiA9IHR5cGUubmV3VmFsdWUoYWN0dWFsVmFscyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIF9vYmo7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC91dGlsL0Jhc2U2NC5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC91dGlsL0Jhc2U2NC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjgyYTQ1Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdXRpbC9CYXNlNjQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwMiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC51dGlsOwotCi1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotLyoqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGVuY29kZS9kZWNvZGUgZm9yIFJGQyAyMDQ1IEJhc2U2NCBhcwotICogZGVmaW5lZCBieSBSRkMgMjA0NSwgTi4gRnJlZWQgYW5kIE4uIEJvcmVuc3RlaW4uCi0gKiBSRkMgMjA0NTogTXVsdGlwdXJwb3NlIEludGVybmV0IE1haWwgRXh0ZW5zaW9ucyAoTUlNRSkKLSAqIFBhcnQgT25lOiBGb3JtYXQgb2YgSW50ZXJuZXQgTWVzc2FnZSBCb2RpZXMuIFJlZmVyZW5jZQotICogMTk5NiBBdmFpbGFibGUgYXQ6IGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzIwNDUudHh0Ci0gKiBUaGlzIGNsYXNzIGlzIHVzZWQgYnkgWE1MIFNjaGVtYSBiaW5hcnkgZm9ybWF0IHZhbGlkYXRpb24KLSAqCi0gKiBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGVuY29kZS9kZWNvZGUgc3RyZWFtaW5nCi0gKiBkYXRhLiBZb3UgbmVlZCB0aGUgZGF0YSB0aGF0IHlvdSB3aWxsIGVuY29kZS9kZWNvZGUKLSAqIGFscmVhZHkgb24gYSBieXRlIGFycnJheS4KLSAqCi0gKiBAYXV0aG9yIEplZmZyZXkgUm9kcmlndWV6Ci0gKiBAYXV0aG9yIFNhbmR5IEdhbwotICogQHZlcnNpb24gJElkOiBCYXNlNjQuamF2YSx2IDEuMSAyMDAzLzA5LzI2IDIxOjIzOjI5IGVyaWN2YXMgRXhwICQKLSAqLwotcHVibGljIGZpbmFsIGNsYXNzICBCYXNlNjQgewotCi0gICAgc3RhdGljIHByaXZhdGUgZmluYWwgaW50ICBCQVNFTEVOR1RIICAgICAgICAgPSAyNTU7Ci0gICAgc3RhdGljIHByaXZhdGUgZmluYWwgaW50ICBMT09LVVBMRU5HVEggICAgICAgPSA2NDsKLSAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBpbnQgIFRXRU5UWUZPVVJCSVRHUk9VUCA9IDI0OwotICAgIHN0YXRpYyBwcml2YXRlIGZpbmFsIGludCAgRUlHSFRCSVQgICAgICAgICAgID0gODsKLSAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBpbnQgIFNJWFRFRU5CSVQgICAgICAgICA9IDE2OwotICAgIC8vc3RhdGljIHByaXZhdGUgZmluYWwgaW50ICBTSVhCSVQgICAgICAgICAgICAgPSA2OwotICAgIHN0YXRpYyBwcml2YXRlIGZpbmFsIGludCAgRk9VUkJZVEUgICAgICAgICAgID0gNDsKLSAgICBzdGF0aWMgcHJpdmF0ZSBmaW5hbCBpbnQgIFNJR04gICAgICAgICAgICAgICA9IC0xMjg7Ci0gICAgc3RhdGljIHByaXZhdGUgZmluYWwgYnl0ZSBQQUQgICAgICAgICAgICAgICAgPSAoIGJ5dGUgKSAnPSc7Ci0gICAgc3RhdGljIHByaXZhdGUgZmluYWwgYm9vbGVhbiBmRGVidWcgICAgICAgICAgPSBmYWxzZTsKLSAgICBzdGF0aWMgcHJpdmF0ZSBieXRlIFtdIGJhc2U2NEFscGhhYmV0ICAgICAgICA9IG5ldyBieXRlW0JBU0VMRU5HVEhdOwotICAgIHN0YXRpYyBwcml2YXRlIGJ5dGUgW10gbG9va1VwQmFzZTY0QWxwaGFiZXQgID0gbmV3IGJ5dGVbTE9PS1VQTEVOR1RIXTsKLQotICAgIHN0YXRpYyB7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGk8QkFTRUxFTkdUSDsgaSsrKSB7Ci0gICAgICAgICAgICBiYXNlNjRBbHBoYWJldFtpXSA9IC0xOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaW50IGkgPSAnWic7IGkgPj0gJ0EnOyBpLS0pIHsKLSAgICAgICAgICAgIGJhc2U2NEFscGhhYmV0W2ldID0gKGJ5dGUpIChpLSdBJyk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChpbnQgaSA9ICd6JzsgaT49ICdhJzsgaS0tKSB7Ci0gICAgICAgICAgICBiYXNlNjRBbHBoYWJldFtpXSA9IChieXRlKSAoIGktJ2EnICsgMjYpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9ICc5JzsgaSA+PSAnMCc7IGktLSkgewotICAgICAgICAgICAgYmFzZTY0QWxwaGFiZXRbaV0gPSAoYnl0ZSkgKGktJzAnICsgNTIpOwotICAgICAgICB9Ci0KLSAgICAgICAgYmFzZTY0QWxwaGFiZXRbJysnXSAgPSA2MjsKLSAgICAgICAgYmFzZTY0QWxwaGFiZXRbJy8nXSAgPSA2MzsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaTw9MjU7IGkrKykKLSAgICAgICAgICAgIGxvb2tVcEJhc2U2NEFscGhhYmV0W2ldID0gKGJ5dGUpICgnQScraSApOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAyNiwgIGogPSAwOyBpPD01MTsgaSsrLCBqKyspCi0gICAgICAgICAgICBsb29rVXBCYXNlNjRBbHBoYWJldFtpXSA9IChieXRlKSAoJ2EnKyBqICk7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDUyLCAgaiA9IDA7IGk8PTYxOyBpKyssIGorKykKLSAgICAgICAgICAgIGxvb2tVcEJhc2U2NEFscGhhYmV0W2ldID0gKGJ5dGUpICgnMCcgKyBqICk7Ci0gICAgICAgIGxvb2tVcEJhc2U2NEFscGhhYmV0WzYyXSA9IChieXRlKSAnKyc7Ci0gICAgICAgIGxvb2tVcEJhc2U2NEFscGhhYmV0WzYzXSA9IChieXRlKSAnLyc7Ci0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gaXNXaGl0ZVNwYWNlKGJ5dGUgb2N0ZWN0KSB7Ci0gICAgICAgIHJldHVybiAob2N0ZWN0ID09IDB4MjAgfHwgb2N0ZWN0ID09IDB4ZCB8fCBvY3RlY3QgPT0gMHhhIHx8IG9jdGVjdCA9PSAweDkpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBpc1BhZChieXRlIG9jdGVjdCkgewotICAgICAgICByZXR1cm4gKG9jdGVjdCA9PSBQQUQpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBpc0RhdGEoYnl0ZSBvY3RlY3QpIHsKLSAgICAgICAgcmV0dXJuIChiYXNlNjRBbHBoYWJldFtvY3RlY3RdICE9IC0xKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gaXNCYXNlNjQoYnl0ZSBvY3RlY3QpIHsKLSAgICAgICAgcmV0dXJuIChpc1doaXRlU3BhY2Uob2N0ZWN0KSB8fCBpc1BhZChvY3RlY3QpIHx8IGlzRGF0YShvY3RlY3QpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBFbmNvZGVzIGhleCBvY3RlY3RzIGludG8gQmFzZTY0Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gYmluYXJ5RGF0YSBBcnJheSBjb250YWluaW5nIGJpbmFyeURhdGEKLSAgICAgKiBAcmV0dXJuIEVuY29kZWQgQmFzZTY0IGFycmF5Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBieXRlW10gZW5jb2RlKGJ5dGVbXSBiaW5hcnlEYXRhKSB7Ci0KLSAgICAgICAgaWYgKGJpbmFyeURhdGEgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIGludCAgICAgIGxlbmd0aERhdGFCaXRzICAgID0gYmluYXJ5RGF0YS5sZW5ndGgqRUlHSFRCSVQ7Ci0gICAgICAgIGludCAgICAgIGZld2VyVGhhbjI0Yml0cyAgID0gbGVuZ3RoRGF0YUJpdHMlVFdFTlRZRk9VUkJJVEdST1VQOwotICAgICAgICBpbnQgICAgICBudW1iZXJUcmlwbGV0cyAgICA9IGxlbmd0aERhdGFCaXRzL1RXRU5UWUZPVVJCSVRHUk9VUDsKLSAgICAgICAgYnl0ZSAgICAgZW5jb2RlZERhdGFbXSAgICAgPSBudWxsOwotCi0gICAgICAgIGlmIChmZXdlclRoYW4yNGJpdHMgIT0gMCkgLy9kYXRhIG5vdCBkaXZpc2libGUgYnkgMjQgYml0Ci0gICAgICAgICAgICBlbmNvZGVkRGF0YSA9IG5ldyBieXRlWyAobnVtYmVyVHJpcGxldHMgKyAxICkqNCAgXTsKLSAgICAgICAgZWxzZSAvLyAxNiBvciA4IGJpdAotICAgICAgICAgICAgZW5jb2RlZERhdGEgPSBuZXcgYnl0ZVsgbnVtYmVyVHJpcGxldHMqNCBdOwotCi0gICAgICAgIGJ5dGUgaz0wLCBsPTAsIGIxPTAsYjI9MCxiMz0wOwotCi0gICAgICAgIGludCBlbmNvZGVkSW5kZXggPSAwOwotICAgICAgICBpbnQgZGF0YUluZGV4ICAgPSAwOwotICAgICAgICBpbnQgaSAgICAgICAgICAgPSAwOwotICAgICAgICBpZiAoZkRlYnVnKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm51bWJlciBvZiB0cmlwbGV0cyA9ICIgKyBudW1iZXJUcmlwbGV0cyApOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaSA9IDA7IGk8bnVtYmVyVHJpcGxldHM7IGkrKykgewotCi0gICAgICAgICAgICBkYXRhSW5kZXggPSBpKjM7Ci0gICAgICAgICAgICBiMSA9IGJpbmFyeURhdGFbZGF0YUluZGV4XTsKLSAgICAgICAgICAgIGIyID0gYmluYXJ5RGF0YVtkYXRhSW5kZXggKyAxXTsKLSAgICAgICAgICAgIGIzID0gYmluYXJ5RGF0YVtkYXRhSW5kZXggKyAyXTsKLQotICAgICAgICAgICAgaWYgKGZEZWJ1ZykgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggImIxPSAiICsgYjEgKyIsIGIyPSAiICsgYjIgKyAiLCBiMz0gIiArIGIzICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGwgID0gKGJ5dGUpKGIyICYgMHgwZik7Ci0gICAgICAgICAgICBrICA9IChieXRlKShiMSAmIDB4MDMpOwotCi0gICAgICAgICAgICBlbmNvZGVkSW5kZXggPSBpKjQ7Ci0gICAgICAgICAgICBieXRlIHZhbDEgPSAoKGIxICYgU0lHTik9PTApPyhieXRlKShiMT4+Mik6KGJ5dGUpKChiMSk+PjJeMHhjMCk7Ci0KLSAgICAgICAgICAgIGJ5dGUgdmFsMiA9ICgoYjIgJiBTSUdOKT09MCk/KGJ5dGUpKGIyPj40KTooYnl0ZSkoKGIyKT4+NF4weGYwKTsKLSAgICAgICAgICAgIGJ5dGUgdmFsMyA9ICgoYjMgJiBTSUdOKT09MCk/KGJ5dGUpKGIzPj42KTooYnl0ZSkoKGIzKT4+Nl4weGZjKTsKLQotICAgICAgICAgICAgZW5jb2RlZERhdGFbZW5jb2RlZEluZGV4XSAgID0gbG9va1VwQmFzZTY0QWxwaGFiZXRbIHZhbDEgXTsKLSAgICAgICAgICAgIGlmIChmRGVidWcpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJ2YWwyID0gIiArIHZhbDIgKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJrNCAgID0gIiArIChrPDw0KSk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAidmFrICA9ICIgKyAodmFsMiB8IChrPDw0KSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBlbmNvZGVkRGF0YVtlbmNvZGVkSW5kZXgrMV0gPSBsb29rVXBCYXNlNjRBbHBoYWJldFsgdmFsMiB8ICggazw8NCApXTsKLSAgICAgICAgICAgIGVuY29kZWREYXRhW2VuY29kZWRJbmRleCsyXSA9IGxvb2tVcEJhc2U2NEFscGhhYmV0WyAobCA8PDIgKSB8IHZhbDMgXTsKLSAgICAgICAgICAgIGVuY29kZWREYXRhW2VuY29kZWRJbmRleCszXSA9IGxvb2tVcEJhc2U2NEFscGhhYmV0WyBiMyAmIDB4M2YgXTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGZvcm0gaW50ZWdyYWwgbnVtYmVyIG9mIDYtYml0IGdyb3VwcwotICAgICAgICBkYXRhSW5kZXggICAgPSBpKjM7Ci0gICAgICAgIGVuY29kZWRJbmRleCA9IGkqNDsKLSAgICAgICAgaWYgKGZld2VyVGhhbjI0Yml0cyA9PSBFSUdIVEJJVCkgewotICAgICAgICAgICAgYjEgPSBiaW5hcnlEYXRhW2RhdGFJbmRleF07Ci0gICAgICAgICAgICBrID0gKGJ5dGUpICggYjEgJjB4MDMgKTsKLSAgICAgICAgICAgIGlmIChmRGVidWcpIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImIxPSIgKyBiMSk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJiMTw8MiA9ICIgKyAoYjE+PjIpICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBieXRlIHZhbDEgPSAoKGIxICYgU0lHTik9PTApPyhieXRlKShiMT4+Mik6KGJ5dGUpKChiMSk+PjJeMHhjMCk7Ci0gICAgICAgICAgICBlbmNvZGVkRGF0YVtlbmNvZGVkSW5kZXhdICAgICA9IGxvb2tVcEJhc2U2NEFscGhhYmV0WyB2YWwxIF07Ci0gICAgICAgICAgICBlbmNvZGVkRGF0YVtlbmNvZGVkSW5kZXggKyAxXSA9IGxvb2tVcEJhc2U2NEFscGhhYmV0WyBrPDw0IF07Ci0gICAgICAgICAgICBlbmNvZGVkRGF0YVtlbmNvZGVkSW5kZXggKyAyXSA9IFBBRDsKLSAgICAgICAgICAgIGVuY29kZWREYXRhW2VuY29kZWRJbmRleCArIDNdID0gUEFEOwotICAgICAgICB9IGVsc2UgaWYgKGZld2VyVGhhbjI0Yml0cyA9PSBTSVhURUVOQklUKSB7Ci0KLSAgICAgICAgICAgIGIxID0gYmluYXJ5RGF0YVtkYXRhSW5kZXhdOwotICAgICAgICAgICAgYjIgPSBiaW5hcnlEYXRhW2RhdGFJbmRleCArMSBdOwotICAgICAgICAgICAgbCA9ICggYnl0ZSApICggYjIgJjB4MGYgKTsKLSAgICAgICAgICAgIGsgPSAoIGJ5dGUgKSAoIGIxICYweDAzICk7Ci0KLSAgICAgICAgICAgIGJ5dGUgdmFsMSA9ICgoYjEgJiBTSUdOKT09MCk/KGJ5dGUpKGIxPj4yKTooYnl0ZSkoKGIxKT4+Ml4weGMwKTsKLSAgICAgICAgICAgIGJ5dGUgdmFsMiA9ICgoYjIgJiBTSUdOKT09MCk/KGJ5dGUpKGIyPj40KTooYnl0ZSkoKGIyKT4+NF4weGYwKTsKLQotICAgICAgICAgICAgZW5jb2RlZERhdGFbZW5jb2RlZEluZGV4XSAgICAgPSBsb29rVXBCYXNlNjRBbHBoYWJldFsgdmFsMSBdOwotICAgICAgICAgICAgZW5jb2RlZERhdGFbZW5jb2RlZEluZGV4ICsgMV0gPSBsb29rVXBCYXNlNjRBbHBoYWJldFsgdmFsMiB8ICggazw8NCApXTsKLSAgICAgICAgICAgIGVuY29kZWREYXRhW2VuY29kZWRJbmRleCArIDJdID0gbG9va1VwQmFzZTY0QWxwaGFiZXRbIGw8PDIgXTsKLSAgICAgICAgICAgIGVuY29kZWREYXRhW2VuY29kZWRJbmRleCArIDNdID0gUEFEOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGVuY29kZWREYXRhOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIERlY29kZXMgQmFzZTY0IGRhdGEgaW50byBvY3RlY3RzCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYmFzZTY0RGF0YSBCeXRlIGFycmF5IGNvbnRhaW5pbmcgQmFzZTY0IGRhdGEKLSAgICAgKiBAcmV0dXJuIEFycmF5IGNvbnRhaW5pbmQgZGVjb2RlZCBkYXRhLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgYnl0ZVtdIGRlY29kZShieXRlW10gYmFzZTY0RGF0YSkgewotCi0gICAgICAgIGlmIChiYXNlNjREYXRhID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAvLyByZW1vdmUgd2hpdGUgc3BhY2VzCi0gICAgICAgIGJhc2U2NERhdGEgPSByZW1vdmVXaGl0ZVNwYWNlKGJhc2U2NERhdGEpOwotCi0gICAgICAgIGlmIChiYXNlNjREYXRhLmxlbmd0aCVGT1VSQllURSAhPSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsvL3Nob3VsZCBiZSBkaXZpc2libGUgYnkgZm91cgotICAgICAgICB9Ci0KLSAgICAgICAgaW50ICAgICAgbnVtYmVyUXVhZHJ1cGxlICAgID0gKGJhc2U2NERhdGEubGVuZ3RoL0ZPVVJCWVRFICk7Ci0KLSAgICAgICAgaWYgKG51bWJlclF1YWRydXBsZSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIG5ldyBieXRlWzBdOwotCi0gICAgICAgIGJ5dGUgICAgIGRlY29kZWREYXRhW10gICAgICA9IG51bGw7Ci0gICAgICAgIGJ5dGUgICAgIGIxPTAsYjI9MCxiMz0wLCBiND0wOy8vLCBtYXJrZXIwPTAsIG1hcmtlcjE9MDsKLSAgICAgICAgYnl0ZSAgICAgZDE9MCxkMj0wLGQzPTAsZDQ9MDsKLQotICAgICAgICAvLyBUaHJvdyBhd2F5IGFueXRoaW5nIG5vdCBpbiBub3JtYWxpemVkQmFzZTY0RGF0YQotICAgICAgICAvLyBBZGp1c3Qgc2l6ZQotICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAgIGludCBlbmNvZGVkSW5kZXggPSAwOwotICAgICAgICBpbnQgZGF0YUluZGV4ICAgID0gMDsKLSAgICAgICAgZGVjb2RlZERhdGEgICAgICA9IG5ldyBieXRlWyAobnVtYmVyUXVhZHJ1cGxlKSozXTsKLQotICAgICAgICBmb3IgKDsgaTxudW1iZXJRdWFkcnVwbGUtMTsgaSsrKSB7Ci0KLSAgICAgICAgICAgIGlmICghaXNEYXRhKCAoZDEgPSBiYXNlNjREYXRhW2RhdGFJbmRleCsrXSkgKXx8Ci0gICAgICAgICAgICAgICAgIWlzRGF0YSggKGQyID0gYmFzZTY0RGF0YVtkYXRhSW5kZXgrK10pICl8fAotICAgICAgICAgICAgICAgICFpc0RhdGEoIChkMyA9IGJhc2U2NERhdGFbZGF0YUluZGV4KytdKSApfHwKLSAgICAgICAgICAgICAgICAhaXNEYXRhKCAoZDQgPSBiYXNlNjREYXRhW2RhdGFJbmRleCsrXSkgKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsvL2lmIGZvdW5kICJubyBkYXRhIiBqdXN0IHJldHVybiBudWxsCi0KLSAgICAgICAgICAgIGIxID0gYmFzZTY0QWxwaGFiZXRbZDFdOwotICAgICAgICAgICAgYjIgPSBiYXNlNjRBbHBoYWJldFtkMl07Ci0gICAgICAgICAgICBiMyA9IGJhc2U2NEFscGhhYmV0W2QzXTsKLSAgICAgICAgICAgIGI0ID0gYmFzZTY0QWxwaGFiZXRbZDRdOwotCi0gICAgICAgICAgICBkZWNvZGVkRGF0YVtlbmNvZGVkSW5kZXgrK10gPSAoYnl0ZSkoICBiMSA8PDIgfCBiMj4+NCApIDsKLSAgICAgICAgICAgIGRlY29kZWREYXRhW2VuY29kZWRJbmRleCsrXSA9IChieXRlKSgoKGIyICYgMHhmKTw8NCApIHwoIChiMz4+MikgJiAweGYpICk7Ci0gICAgICAgICAgICBkZWNvZGVkRGF0YVtlbmNvZGVkSW5kZXgrK10gPSAoYnl0ZSkoIGIzPDw2IHwgYjQgKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaXNEYXRhKCAoZDEgPSBiYXNlNjREYXRhW2RhdGFJbmRleCsrXSkgKSB8fAotICAgICAgICAgICAgIWlzRGF0YSggKGQyID0gYmFzZTY0RGF0YVtkYXRhSW5kZXgrK10pICkpIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOy8vaWYgZm91bmQgIm5vIGRhdGEiIGp1c3QgcmV0dXJuIG51bGwKLSAgICAgICAgfQotCi0gICAgICAgIGIxID0gYmFzZTY0QWxwaGFiZXRbZDFdOwotICAgICAgICBiMiA9IGJhc2U2NEFscGhhYmV0W2QyXTsKLQotICAgICAgICBkMyA9IGJhc2U2NERhdGFbZGF0YUluZGV4KytdOwotICAgICAgICBkNCA9IGJhc2U2NERhdGFbZGF0YUluZGV4KytdOwotICAgICAgICBpZiAoIWlzRGF0YSggKGQzICkgKSB8fAotICAgICAgICAgICAgIWlzRGF0YSggKGQ0ICkgKSkgey8vQ2hlY2sgaWYgdGhleSBhcmUgUEFEIGNoYXJhY3RlcnMKLSAgICAgICAgICAgIGlmIChpc1BhZCggZDMgKSAmJiBpc1BhZCggZDQpKSB7ICAgICAgICAgICAgICAgLy9Ud28gUEFEIGUuZy4gM2NbUGFkXVtQYWRdCi0gICAgICAgICAgICAgICAgaWYgKChiMiAmIDB4ZikgIT0gMCkvL2xhc3QgNCBiaXRzIHNob3VsZCBiZSB6ZXJvCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgIGJ5dGVbXSB0bXAgPSBuZXcgYnl0ZVsgaSozICsgMSBdOwotICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoIGRlY29kZWREYXRhLCAwLCB0bXAsIDAsIGkqMyApOwotICAgICAgICAgICAgICAgIHRtcFtlbmNvZGVkSW5kZXhdICAgPSAoYnl0ZSkoICBiMSA8PDIgfCBiMj4+NCApIDsKLSAgICAgICAgICAgICAgICByZXR1cm4gdG1wOwotICAgICAgICAgICAgfSBlbHNlIGlmICghaXNQYWQoIGQzKSAmJiBpc1BhZChkNCkpIHsgICAgICAgICAgICAgICAvL09uZSBQQUQgIGUuZy4gM2NRW1BhZF0KLSAgICAgICAgICAgICAgICBiMyA9IGJhc2U2NEFscGhhYmV0WyBkMyBdOwotICAgICAgICAgICAgICAgIGlmICgoYjMgJiAweDMgKSAhPSAwKS8vbGFzdCAyIGJpdHMgc2hvdWxkIGJlIHplcm8KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgYnl0ZVtdIHRtcCA9IG5ldyBieXRlWyBpKjMgKyAyIF07Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSggZGVjb2RlZERhdGEsIDAsIHRtcCwgMCwgaSozICk7Ci0gICAgICAgICAgICAgICAgdG1wW2VuY29kZWRJbmRleCsrXSA9IChieXRlKSggIGIxIDw8MiB8IGIyPj40ICk7Ci0gICAgICAgICAgICAgICAgdG1wW2VuY29kZWRJbmRleF0gICA9IChieXRlKSgoKGIyICYgMHhmKTw8NCApIHwoIChiMz4+MikgJiAweGYpICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRtcDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ly9hbiBlcnJvciAgbGlrZSAiM2NbUGFkXXIiLCAiM2NkWCIsICIzY1hkIiwgIjNjWFgiIHdoZXJlIFggaXMgbm9uIGRhdGEKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsgLy9ObyBQQUQgZS5nIDNjUWwKLSAgICAgICAgICAgIGIzID0gYmFzZTY0QWxwaGFiZXRbIGQzIF07Ci0gICAgICAgICAgICBiNCA9IGJhc2U2NEFscGhhYmV0WyBkNCBdOwotICAgICAgICAgICAgZGVjb2RlZERhdGFbZW5jb2RlZEluZGV4KytdID0gKGJ5dGUpKCAgYjEgPDwyIHwgYjI+PjQgKSA7Ci0gICAgICAgICAgICBkZWNvZGVkRGF0YVtlbmNvZGVkSW5kZXgrK10gPSAoYnl0ZSkoKChiMiAmIDB4Zik8PDQgKSB8KCAoYjM+PjIpICYgMHhmKSApOwotICAgICAgICAgICAgZGVjb2RlZERhdGFbZW5jb2RlZEluZGV4KytdID0gKGJ5dGUpKCBiMzw8NiB8IGI0ICk7Ci0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkZWNvZGVkRGF0YTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBEZWNvZGVzIEJhc2U2NCBkYXRhIGludG8gb2N0ZWN0cwotICAgICAqCi0gICAgICogQHBhcmFtIGJhc2U2NERhdGEgU3RyaW5nIGNvbnRhaW5pbmcgQmFzZTY0IGRhdGEKLSAgICAgKiBAcmV0dXJuIHN0cmluZyBjb250YWluaW5nIGRlY29kZWQgZGF0YS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBkZWNvZGUoU3RyaW5nIGJhc2U2NERhdGEpIHsKLSAgICAgICAgaWYgKGJhc2U2NERhdGEgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIGJ5dGVbXSBkZWNvZGVkID0gbnVsbDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGRlY29kZWQgPSBkZWNvZGUoYmFzZTY0RGF0YS5nZXRCeXRlcygidXRmLTgiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWxseSB7Ci0gICAgICAgICAgICByZXR1cm4gZGVjb2RlZCA9PSBudWxsID8gbnVsbCA6IG5ldyBTdHJpbmcoZGVjb2RlZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBFbmNvZGVzIG9jdGVjdHMgKHVzaW5nIHV0Zi04KSBpbnRvIEJhc2U2NCBkYXRhCi0gICAgICoKLSAgICAgKiBAcGFyYW0gYmluYXJ5RGF0YSBTdHJpbmcgY29udGFpbmluZyBIZXggZGF0YQotICAgICAqIEByZXR1cm4gc3RyaW5nIGNvbnRhaW5pbmcgZGVjb2RlZCBkYXRhLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGVuY29kZShTdHJpbmcgYmluYXJ5RGF0YSkgewotICAgICAgICBpZiAoYmluYXJ5RGF0YSA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgYnl0ZVtdIGVuY29kZWQgPSBudWxsOwotICAgICAgICAgdHJ5IHsKLSAgICAgICAgICBlbmNvZGVkID0gZW5jb2RlKGJpbmFyeURhdGEuZ2V0Qnl0ZXMoInV0Zi04IikpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZSkge30KLSAgICAgICAgZmluYWxseSB7Ci0gICAgICAgICAgICByZXR1cm4gZW5jb2RlZCA9PSBudWxsID8gbnVsbCA6IG5ldyBTdHJpbmcoZW5jb2RlZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiByZW1vdmUgV2hpdGVTcGFjZSBmcm9tIE1JTUUgY29udGFpbmluZyBlbmNvZGVkIEJhc2U2NCBkYXRhLgotICAgICAqCi0gICAgICogQHBhcmFtIGRhdGEgIHRoZSBieXRlIGFycmF5IG9mIGJhc2U2NCBkYXRhICh3aXRoIFdTKQotICAgICAqIEByZXR1cm4gICAgICB0aGUgYnl0ZSBhcnJheSBvZiBiYXNlNjQgZGF0YSAod2l0aG91dCBXUykKLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgc3RhdGljIGJ5dGVbXSByZW1vdmVXaGl0ZVNwYWNlKGJ5dGVbXSBkYXRhKSB7Ci0gICAgICAgIGlmIChkYXRhID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAvLyBjb3VudCBjaGFyYWN0ZXJzIHRoYXQncyBub3Qgd2hpdGVzcGFjZQotICAgICAgICBpbnQgbmV3U2l6ZSA9IDA7Ci0gICAgICAgIGludCBsZW4gPSBkYXRhLmxlbmd0aDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICAgICAgaWYgKCFpc1doaXRlU3BhY2UoZGF0YVtpXSkpCi0gICAgICAgICAgICAgICAgbmV3U2l6ZSsrOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaWYgbm8gd2hpdGVzcGFjZSwganVzdCByZXR1cm4gdGhlIGlucHV0IGFycmF5Ci0gICAgICAgIGlmIChuZXdTaXplID09IGxlbikKLSAgICAgICAgICAgIHJldHVybiBkYXRhOwotCi0gICAgICAgIC8vIGNyZWF0ZSB0aGUgYXJyYXkgdG8gcmV0dXJuCi0gICAgICAgIGJ5dGVbXSBuZXdBcnJheSA9IG5ldyBieXRlW25ld1NpemVdOwotCi0gICAgICAgIGludCBqID0gMDsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICAgICAgaWYgKCFpc1doaXRlU3BhY2UoZGF0YVtpXSkpCi0gICAgICAgICAgICAgICAgbmV3QXJyYXlbaisrXSA9IGRhdGFbaV07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ld0FycmF5OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdXRpbC9IZXhCaW4uamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdXRpbC9IZXhCaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ2NmMxNy4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3V0aWwvSGV4QmluLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDAgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLS8qKgotICogZm9ybWF0IHZhbGlkYXRpb24KLSAqCi0gKiBUaGlzIGNsYXNzIGVuY29kZXMvZGVjb2RlcyBoZXhhZGVjaW1hbCBkYXRhCi0gKiBAYXV0aG9yIEplZmZyZXkgUm9kcmlndWV6Ci0gKiBAdmVyc2lvbiAkSWQ6IEhleEJpbi5qYXZhLHYgMS4xIDIwMDMvMDkvMjYgMjE6MjM6MjkgZXJpY3ZhcyBFeHAgJAotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgIEhleEJpbiB7Ci0gICAgc3RhdGljIHByaXZhdGUgZmluYWwgaW50ICBCQVNFTEVOR1RIICAgPSAyNTU7Ci0gICAgc3RhdGljIHByaXZhdGUgZmluYWwgaW50ICBMT09LVVBMRU5HVEggPSAxNjsKLSAgICBzdGF0aWMgcHJpdmF0ZSBieXRlIFtdIGhleE51bWJlclRhYmxlICAgID0gbmV3IGJ5dGVbQkFTRUxFTkdUSF07Ci0gICAgc3RhdGljIHByaXZhdGUgYnl0ZSBbXSBsb29rVXBIZXhBbHBoYWJldCA9IG5ldyBieXRlW0xPT0tVUExFTkdUSF07Ci0KLQotICAgIHN0YXRpYyB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpPEJBU0VMRU5HVEg7IGkrKyApIHsKLSAgICAgICAgICAgIGhleE51bWJlclRhYmxlW2ldID0gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICggaW50IGkgPSAnOSc7IGkgPj0gJzAnOyBpLS0pIHsKLSAgICAgICAgICAgIGhleE51bWJlclRhYmxlW2ldID0gKGJ5dGUpIChpLScwJyk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICggaW50IGkgPSAnRic7IGk+PSAnQSc7IGktLSkgewotICAgICAgICAgICAgaGV4TnVtYmVyVGFibGVbaV0gPSAoYnl0ZSkgKCBpLSdBJyArIDEwICk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICggaW50IGkgPSAnZic7IGk+PSAnYSc7IGktLSkgewotICAgICAgICAgICBoZXhOdW1iZXJUYWJsZVtpXSA9IChieXRlKSAoIGktJ2EnICsgMTAgKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvcihpbnQgaSA9IDA7IGk8MTA7IGkrKyApCi0gICAgICAgICAgICBsb29rVXBIZXhBbHBoYWJldFtpXSA9IChieXRlKSAoJzAnK2kgKTsKLSAgICAgICAgZm9yKGludCBpID0gMTA7IGk8PTE1OyBpKysgKQotICAgICAgICAgICAgbG9va1VwSGV4QWxwaGFiZXRbaV0gPSAoYnl0ZSkgKCdBJytpIC0xMCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogYnl0ZSB0byBiZSB0ZXN0ZWQgaWYgaXQgaXMgQmFzZTY0IGFscGhhYmV0Ci0gICAgICoKLSAgICAgKiBAcGFyYW0gb2N0ZWN0Ci0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHN0YXRpYyBib29sZWFuIGlzSGV4KGJ5dGUgb2N0ZWN0KSB7Ci0gICAgICAgIHJldHVybiAoaGV4TnVtYmVyVGFibGVbb2N0ZWN0XSAhPSAtMSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29udmVydHMgYnl0ZXMgdG8gYSBoZXggc3RyaW5nCi0gICAgICovCi0gICAgc3RhdGljIHB1YmxpYyBTdHJpbmcgYnl0ZXNUb1N0cmluZyhieXRlW10gYmluYXJ5RGF0YSkKLSAgICB7Ci0gICAgICAgIGlmIChiaW5hcnlEYXRhID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoZW5jb2RlKGJpbmFyeURhdGEpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb252ZXJ0cyBhIGhleCBzdHJpbmcgdG8gYSBieXRlIGFycmF5LgotICAgICAqLwotICAgIHN0YXRpYyBwdWJsaWMgYnl0ZVtdIHN0cmluZ1RvQnl0ZXMoU3RyaW5nIGhleEVuY29kZWQpCi0gICAgewotICAgICAgICByZXR1cm4gZGVjb2RlKGhleEVuY29kZWQuZ2V0Qnl0ZXMoKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogYXJyYXkgb2YgYnl0ZSB0byBlbmNvZGUKLSAgICAgKgotICAgICAqIEBwYXJhbSBiaW5hcnlEYXRhCi0gICAgICogQHJldHVybiByZXR1cm4gZW5jb2RlIGJpbmFyeSBhcnJheQotICAgICAqLwotICAgIHN0YXRpYyBwdWJsaWMgYnl0ZVtdIGVuY29kZShieXRlW10gYmluYXJ5RGF0YSkgewotICAgICAgICBpZiAoYmluYXJ5RGF0YSA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIGludCBsZW5ndGhEYXRhICAgPSBiaW5hcnlEYXRhLmxlbmd0aDsKLSAgICAgICAgaW50IGxlbmd0aEVuY29kZSA9IGxlbmd0aERhdGEgKiAyOwotICAgICAgICBieXRlW10gZW5jb2RlZERhdGEgPSBuZXcgYnl0ZVtsZW5ndGhFbmNvZGVdOwotICAgICAgICBmb3IoIGludCBpID0gMDsgaTxsZW5ndGhEYXRhOyBpKysgKXsKLSAgICAgICAgICAgIGVuY29kZWREYXRhW2kqMl0gPSBsb29rVXBIZXhBbHBoYWJldFsoYmluYXJ5RGF0YVtpXSA+PiA0KSAmIDB4Zl07Ci0gICAgICAgICAgICBlbmNvZGVkRGF0YVtpKjIrMV0gPSBsb29rVXBIZXhBbHBoYWJldFsgYmluYXJ5RGF0YVtpXSAmIDB4Zl07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGVuY29kZWREYXRhOwotICAgIH0KLQotICAgIHN0YXRpYyBwdWJsaWMgYnl0ZVtdIGRlY29kZShieXRlW10gYmluYXJ5RGF0YSkgewotICAgICAgICBpZiAoYmluYXJ5RGF0YSA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIGludCBsZW5ndGhEYXRhICAgPSBiaW5hcnlEYXRhLmxlbmd0aDsKLSAgICAgICAgaWYgKGxlbmd0aERhdGEgJSAyICE9IDApCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICBpbnQgbGVuZ3RoRGVjb2RlID0gbGVuZ3RoRGF0YSAvIDI7Ci0gICAgICAgIGJ5dGVbXSBkZWNvZGVkRGF0YSA9IG5ldyBieXRlW2xlbmd0aERlY29kZV07Ci0gICAgICAgIGZvciggaW50IGkgPSAwOyBpPGxlbmd0aERlY29kZTsgaSsrICl7Ci0gICAgICAgICAgICBpZiAoIWlzSGV4KGJpbmFyeURhdGFbaSoyXSkgfHwgIWlzSGV4KGJpbmFyeURhdGFbaSoyKzFdKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVjb2RlZERhdGFbaV0gPSAoYnl0ZSkoKGhleE51bWJlclRhYmxlW2JpbmFyeURhdGFbaSoyXV0gPDwgNCkgfCBoZXhOdW1iZXJUYWJsZVtiaW5hcnlEYXRhW2kqMisxXV0pOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBkZWNvZGVkRGF0YTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBEZWNvZGVzIEhleCBkYXRhIGludG8gb2N0ZWN0cwotICAgICAqCi0gICAgICogQHBhcmFtIGJpbmFyeURhdGEgU3RyaW5nIGNvbnRhaW5pbmcgSGV4IGRhdGEKLSAgICAgKiBAcmV0dXJuIHN0cmluZyBjb250YWluaW5nIGRlY29kZWQgZGF0YS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBkZWNvZGUoU3RyaW5nIGJpbmFyeURhdGEpIHsKLSAgICAgICAgaWYgKGJpbmFyeURhdGEgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIGJ5dGVbXSBkZWNvZGVkID0gbnVsbDsKLSAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgZGVjb2RlZCA9IGRlY29kZShiaW5hcnlEYXRhLmdldEJ5dGVzKCJ1dGYtOCIpKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgIH0KLSAgICAgICAgZmluYWxseSB7Ci0gICAgICAgIHJldHVybiBkZWNvZGVkID09IG51bGwgPyBudWxsIDogbmV3IFN0cmluZyhkZWNvZGVkKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEVuY29kZXMgb2N0ZWN0cyAodXNpbmcgdXRmLTgpIGludG8gSGV4IGRhdGEKLSAgICAgKgotICAgICAqIEBwYXJhbSBiaW5hcnlEYXRhIFN0cmluZyBjb250YWluaW5nIEhleCBkYXRhCi0gICAgICogQHJldHVybiBzdHJpbmcgY29udGFpbmluZyBkZWNvZGVkIGRhdGEuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZW5jb2RlKFN0cmluZyBiaW5hcnlEYXRhKSB7Ci0gICAgICAgIGlmIChiaW5hcnlEYXRhID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICBieXRlW10gZW5jb2RlZCA9IG51bGw7Ci0gICAgICAgICB0cnkgewotICAgICAgICAgIGVuY29kZWQgPSBlbmNvZGUoYmluYXJ5RGF0YS5nZXRCeXRlcygidXRmLTgiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKSB7fQotICAgICAgICBmaW5hbGx5IHsKLSAgICAgICAgICAgIHJldHVybiBlbmNvZGVkID09IG51bGwgPyBudWxsIDogbmV3IFN0cmluZyhlbmNvZGVkKTsKLSAgICAgICAgfQotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWxpZGF0b3IvVmFsaWRhdGluZ1hNTElucHV0U3RyZWFtLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbGlkYXRvci9WYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA5MWQxMy4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbGlkYXRvci9WYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyMCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWxpZGF0b3I7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLkNoYXJzOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uWE1MTmFtZUhlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLkdlbmVyaWNYbWxJbnB1dFN0cmVhbTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlZhbGlkYXRvckxpc3RlbmVyLkV2ZW50OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uVmFsaWRhdG9yTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5YbWxXaGl0ZXNwYWNlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zY2hlbWEuQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW07Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEVycm9yOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9uczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhNTFN0cmVhbVZhbGlkYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuQWJzdHJhY3RDb2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci0KLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLkF0dHJpYnV0ZTsKLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLkF0dHJpYnV0ZUl0ZXJhdG9yOwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uQ2hhcmFjdGVyRGF0YTsKLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLlN0YXJ0RWxlbWVudDsKLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTEV2ZW50OwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW07Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5YTUxOYW1lOwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0KLSAgICBleHRlbmRzIEdlbmVyaWNYbWxJbnB1dFN0cmVhbSBpbXBsZW1lbnRzIEV2ZW50Ci17Ci0gICAgcHVibGljIFZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSAoCi0gICAgICAgIFhNTElucHV0U3RyZWFtIHhpcywKLSAgICAgICAgU2NoZW1hVHlwZUxvYWRlciB0eXBlTG9hZGVyLCBTY2hlbWFUeXBlIHNUeXBlLCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgICAgICAgICAgdGhyb3dzIFhNTFN0cmVhbUV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgX3NvdXJjZSA9IHhpczsKLQotICAgICAgICAvLyBGaWd1cmUgb3V0IHRoZSByb290IHR5cGUKLQotICAgICAgICBvcHRpb25zID0gWG1sT3B0aW9ucy5tYXNrTnVsbCggb3B0aW9ucyApOwotICAgICAgICAKLSAgICAgICAgU2NoZW1hVHlwZSB0eXBlID0gKFNjaGVtYVR5cGUpIG9wdGlvbnMuZ2V0KCBYbWxPcHRpb25zLkRPQ1VNRU5UX1RZUEUgKTsKLQotICAgICAgICBpZiAodHlwZSA9PSBudWxsKQotICAgICAgICAgICAgdHlwZSA9IHNUeXBlOwotCi0gICAgICAgIGlmICh0eXBlID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHR5cGUgPSBCdWlsdGluU2NoZW1hVHlwZVN5c3RlbS5TVF9BTllfVFlQRTsKLQotICAgICAgICAgICAgeGlzID0geGlzLmdldFN1YlN0cmVhbSgpOwotCi0gICAgICAgICAgICBpZiAoeGlzLnNraXAoIFhNTEV2ZW50LlNUQVJUX0VMRU1FTlQgKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTY2hlbWFUeXBlIGRvY1R5cGUgPQotICAgICAgICAgICAgICAgICAgICB0eXBlTG9hZGVyLmZpbmREb2N1bWVudFR5cGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBYTUxOYW1lSGVscGVyLmdldFFOYW1lKCB4aXMubmV4dCgpLmdldE5hbWUoKSApICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZG9jVHlwZSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICB0eXBlID0gZG9jVHlwZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgeGlzLmNsb3NlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBDcmVhdGUgdGhlIHZhbGlkYXRvcgotCi0gICAgICAgIF92YWxpZGF0b3IgPQotICAgICAgICAgICAgbmV3IFZhbGlkYXRvcigKLSAgICAgICAgICAgICAgICB0eXBlLCBudWxsLCB0eXBlTG9hZGVyLCBvcHRpb25zLCBuZXcgRXhjZXB0aW9uWG1sRXJyb3JMaXN0ZW5lcigpICk7Ci0KLSAgICAgICAgbmV4dEV2ZW50KCBWYWxpZGF0b3JMaXN0ZW5lci5CRUdJTiApOwotICAgIH0KLQotICAgIC8vIFRPRE8gLSB0aGlzIGlzIHRoZSBxdWljayBhbmQgZGlydHkgaW1wbCBvZiBzdHJlYW1pbmcgdmFsaWRhdGlvbiwKLSAgICAvLyBtYXkgb2JqZWN0cyBhcmUgY3JlYXRlZCAobGlrZSBzdHJpbmdzKSB3aGljaCBjYW4gYmUgb3B0aW1pemVkCi0gICAgCi0gICAgcHJvdGVjdGVkIFhNTEV2ZW50IG5leHRFdmVudCAoICkgdGhyb3dzIFhNTFN0cmVhbUV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgWE1MRXZlbnQgZSA9IF9zb3VyY2UubmV4dCgpOwotCi0gICAgICAgIGlmIChlID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghX2ZpbmlzaGVkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZsdXNoVGV4dCgpOwotICAgICAgICAgICAgICAgIG5leHRFdmVudCggVmFsaWRhdG9yTGlzdGVuZXIuRU5EICk7Ci0gICAgICAgICAgICAgICAgX2ZpbmlzaGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAoIGUuZ2V0VHlwZSgpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgWE1MRXZlbnQuQ0hBUkFDVEVSX0RBVEEgOgotICAgICAgICAgICAgY2FzZSBYTUxFdmVudC5TUEFDRSA6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ2hhcmFjdGVyRGF0YSBjZCA9IChDaGFyYWN0ZXJEYXRhKSBlOwotCi0gICAgICAgICAgICAgICAgaWYgKGNkLmhhc0NvbnRlbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgX3RleHQuYXBwZW5kKCBjZC5nZXRDb250ZW50KCkgKTsKLQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBYTUxFdmVudC5TVEFSVF9FTEVNRU5UIDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdGFydEVsZW1lbnQgc2UgPSAoU3RhcnRFbGVtZW50KSBlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZsdXNoVGV4dCgpOwotCi0gICAgICAgICAgICAgICAgLy8gVXNlZCBmb3IgcHJlZml4IHRvIG5hbWVzcGFjZSBtYXBwaW5nCi0gICAgICAgICAgICAgICAgX3N0YXJ0RWxlbWVudCA9IHNlOwotCi0gICAgICAgICAgICAgICAgLy8gUHJlcGFyZSB0aGUgeHNpOiogdmFsdWVzCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQXR0cmlidXRlSXRlcmF0b3IgYXR0cnMgPSBzZS5nZXRBdHRyaWJ1dGVzKCk7Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAoIGF0dHJzLmhhc05leHQoKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGUgYXR0ciA9IGF0dHJzLm5leHQoKTsKLQotICAgICAgICAgICAgICAgICAgICBYTUxOYW1lIGF0dHJOYW1lID0gYXR0ci5nZXROYW1lKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIuZXF1YWxzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJOYW1lLmdldE5hbWVzcGFjZVVyaSgpICkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBsb2NhbCA9IGF0dHJOYW1lLmdldExvY2FsTmFtZSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWwuZXF1YWxzKCAidHlwZSIgKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfeHNpVHlwZSA9IGF0dHIuZ2V0VmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxvY2FsLmVxdWFscyggIm5pbCIgKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfeHNpTmlsID0gYXR0ci5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobG9jYWwuZXF1YWxzKCAic2NoZW1hTG9jYXRpb24iICkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3hzaUxvYyA9IGF0dHIuZ2V0VmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxvY2FsLmVxdWFscyggIm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb24iICkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3hzaU5vTG9jID0gYXR0ci5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gRW1pdCB0aGUgU1RBUlQKLQotICAgICAgICAgICAgICAgIC8vIFRPRE8gLSBzaG91bGQgZGVsYXkgdGhlIGFxdWlzaXRpb24gb2YgdGhlIG5hbWUKLSAgICAgICAgICAgICAgICBfbmFtZSA9IGUuZ2V0TmFtZSgpOwotCi0gICAgICAgICAgICAgICAgbmV4dEV2ZW50KCBWYWxpZGF0b3JMaXN0ZW5lci5CRUdJTiApOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIEVtaXQgdGhlIGF0dHJzCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYXR0cnMgPSBzZS5nZXRBdHRyaWJ1dGVzKCk7Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAoIGF0dHJzLmhhc05leHQoKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGUgYXR0ciA9IGF0dHJzLm5leHQoKTsKLQotICAgICAgICAgICAgICAgICAgICBYTUxOYW1lIGF0dHJOYW1lID0gYXR0ci5nZXROYW1lKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIuZXF1YWxzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJOYW1lLmdldE5hbWVzcGFjZVVyaSgpICkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBsb2NhbCA9IGF0dHJOYW1lLmdldExvY2FsTmFtZSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWwuZXF1YWxzKCAidHlwZSIgKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxvY2FsLmVxdWFscyggIm5pbCIgKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxvY2FsLmVxdWFscyggInNjaGVtYUxvY2F0aW9uIiApKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobG9jYWwuZXF1YWxzKCAibm9OYW1lc3BhY2VTY2hlbWFMb2NhdGlvbiIgKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gLSBHb2QsIHRoaXMgaXMgbGFtZSA6LSkKLQotICAgICAgICAgICAgICAgICAgICBfdGV4dC5hcHBlbmQoIGF0dHIuZ2V0VmFsdWUoKSApOwotICAgICAgICAgICAgICAgICAgICBfbmFtZSA9IGF0dHIuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbmV4dEV2ZW50KCBWYWxpZGF0b3JMaXN0ZW5lci5BVFRSICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY2xlYXJUZXh0KCk7Ci0KLSAgICAgICAgICAgICAgICBfc3RhcnRFbGVtZW50ID0gbnVsbDsKLQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIFhNTEV2ZW50LkVORF9FTEVNRU5UIDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmbHVzaFRleHQoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBuZXh0RXZlbnQoIFZhbGlkYXRvckxpc3RlbmVyLkVORCApOwotCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgY2xlYXJUZXh0ICggKQotICAgIHsKLSAgICAgICAgX3RleHQuZGVsZXRlKCAwLCBfdGV4dC5sZW5ndGgoKSApOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgZmx1c2hUZXh0ICggKSB0aHJvd3MgWE1MU3RyZWFtRXhjZXB0aW9uCi0gICAgewotICAgICAgICBpZiAoX3RleHQubGVuZ3RoKCkgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBuZXh0RXZlbnQoIFZhbGlkYXRvckxpc3RlbmVyLlRFWFQgKTsKLSAgICAgICAgICAgIGNsZWFyVGV4dCgpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlRm9yUHJlZml4ICggU3RyaW5nIHByZWZpeCApCi0gICAgewotICAgICAgICBpZiAoX3N0YXJ0RWxlbWVudCA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgTWFwIG1hcCA9IF9zdGFydEVsZW1lbnQuZ2V0TmFtZXNwYWNlTWFwKCk7Ci0KLSAgICAgICAgaWYgKG1hcCA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgcmV0dXJuIChTdHJpbmcpIG1hcC5nZXQoIHByZWZpeCApOwotICAgIH0KLQotICAgIHB1YmxpYyBYbWxDdXJzb3IgZ2V0TG9jYXRpb25Bc0N1cnNvciAoICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiBnZXRYc2lUeXBlICggQ2hhcnMgY2hhcnMgKQotICAgIHsKLSAgICAgICAgaWYgKF94c2lUeXBlID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgY2hhcnMuc3RyaW5nID0gX3hzaVR5cGU7Ci0gICAgICAgIGNoYXJzLmJ1ZmZlciA9IG51bGw7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBib29sZWFuIGdldFhzaU5pbCAoIENoYXJzIGNoYXJzICkKLSAgICB7Ci0gICAgICAgIGlmIChfeHNpTmlsID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgY2hhcnMuc3RyaW5nID0gX3hzaU5pbDsKLSAgICAgICAgY2hhcnMuYnVmZmVyID0gbnVsbDsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBnZXRYc2lMb2MgKCBDaGFycyBjaGFycyApCi0gICAgewotICAgICAgICBpZiAoX3hzaUxvYyA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGNoYXJzLnN0cmluZyA9IF94c2lMb2M7Ci0gICAgICAgIGNoYXJzLmJ1ZmZlciA9IG51bGw7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0WHNpTm9Mb2MgKCBDaGFycyBjaGFycyApCi0gICAgewotICAgICAgICBpZiAoX3hzaU5vTG9jID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgY2hhcnMuc3RyaW5nID0gX3hzaU5vTG9jOwotICAgICAgICBjaGFycy5idWZmZXIgPSBudWxsOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBRTmFtZSBnZXROYW1lICggKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFhNTE5hbWVIZWxwZXIuZ2V0UU5hbWUoIF9uYW1lICk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZ2V0VGV4dCAoIENoYXJzIGNoYXJzICkKLSAgICB7Ci0gICAgICAgIGNoYXJzLnN0cmluZyA9IF90ZXh0LnRvU3RyaW5nKCk7Ci0gICAgICAgIGNoYXJzLmJ1ZmZlciA9IG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZ2V0VGV4dCAoIENoYXJzIGNoYXJzLCBpbnQgd3NyICkKLSAgICB7Ci0gICAgICAgIGNoYXJzLnN0cmluZyA9IFhtbFdoaXRlc3BhY2UuY29sbGFwc2UoIF90ZXh0LnRvU3RyaW5nKCksIHdzciApOwotICAgICAgICBjaGFycy5idWZmZXIgPSBudWxsOwotICAgIH0KLQotICAgIC8vIFRPRE8gLSB2ZXJ5IGV4cGVuc2l2ZSB0byBnZXQgYSBzdHJpbmcgaGVyZQotICAgIHB1YmxpYyBib29sZWFuIHRleHRJc1doaXRlc3BhY2UgKCApCi0gICAgewotICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgX3RleHQubGVuZ3RoKCkgOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKCBfdGV4dC5jaGFyQXQoIGkgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSAnICc6Ci0gICAgICAgICAgICAgICAgY2FzZSAnXG4nOgotICAgICAgICAgICAgICAgIGNhc2UgJ1xyJzoKLSAgICAgICAgICAgICAgICBjYXNlICdcdCc6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgZGVmYXVsdCA6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgZmluYWwgY2xhc3MgRXhjZXB0aW9uWG1sRXJyb3JMaXN0ZW5lciBleHRlbmRzIEFic3RyYWN0Q29sbGVjdGlvbgotICAgIHsKLSAgICAgICAgcHVibGljIGJvb2xlYW4gYWRkKE9iamVjdCBvKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgVmFsaWRhdGluZ1hNTElucHV0U3RyZWFtLnRoaXMuX2V4Y2VwdGlvbiA9PSBudWxsOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0udGhpcy5fZXhjZXB0aW9uID0gCi0gICAgICAgICAgICAgICAgbmV3IFhNTFN0cmVhbVZhbGlkYXRpb25FeGNlcHRpb24oIChYbWxFcnJvcilvICk7Ci0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBJdGVyYXRvciBpdGVyYXRvcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9MSVNULml0ZXJhdG9yKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgaW50IHNpemUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBuZXh0RXZlbnQgKCBpbnQga2luZCApCi0gICAgICAgIHRocm93cyBYTUxTdHJlYW1FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGFzc2VydCBfZXhjZXB0aW9uID09IG51bGw7Ci0gICAgICAgIAotICAgICAgICBfdmFsaWRhdG9yLm5leHRFdmVudCgga2luZCwgdGhpcyApOwotCi0gICAgICAgIGlmIChfZXhjZXB0aW9uICE9IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBfZXhjZXB0aW9uOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIFhNTFN0cmVhbVZhbGlkYXRpb25FeGNlcHRpb24gX2V4Y2VwdGlvbjsKLQotICAgIHByaXZhdGUgWE1MSW5wdXRTdHJlYW0gX3NvdXJjZTsKLSAgICBwcml2YXRlIFZhbGlkYXRvciAgICAgIF92YWxpZGF0b3I7Ci0gICAgcHJpdmF0ZSBTdHJpbmdCdWZmZXIgICBfdGV4dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICBwcml2YXRlIGJvb2xlYW4gICAgICAgIF9maW5pc2hlZDsKLSAgICBwcml2YXRlIFN0cmluZyAgICAgICAgIF94c2lUeXBlOwotICAgIHByaXZhdGUgU3RyaW5nICAgICAgICAgX3hzaU5pbDsKLSAgICBwcml2YXRlIFN0cmluZyAgICAgICAgIF94c2lMb2M7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgICAgICAgICBfeHNpTm9Mb2M7Ci0gICAgcHJpdmF0ZSBYTUxOYW1lICAgICAgICBfbmFtZTsKLSAgICBwcml2YXRlIFN0YXJ0RWxlbWVudCAgIF9zdGFydEVsZW1lbnQ7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWxpZGF0b3IvVmFsaWRhdG9yLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbGlkYXRvci9WYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg1YjI2MC4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbGlkYXRvci9WYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNzEgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsaWRhdG9yOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5DaGFyczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLklkZW50aXR5Q29uc3RyYWludDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlFOYW1lSGVscGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uVmFsaWRhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5WYWxpZGF0b3JMaXN0ZW5lci5FdmVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlZhbGlkYXRvckxpc3RlbmVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uWG1sV2hpdGVzcGFjZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hLlNjaGVtYVR5cGVWaXNpdG9ySW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hLlNjaGVtYVR5cGVJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuTmFtZXNwYWNlQ29udGV4dDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFVcmlIb2xkZXJFeDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFCYXNlNjRIb2xkZXJFeDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFCb29sZWFuSG9sZGVyRXg7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5YbWxEYXRlSW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFEZWNpbWFsSG9sZGVyRXg7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5KYXZhRG91YmxlSG9sZGVyRXg7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5YbWxEdXJhdGlvbkltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5KYXZhRmxvYXRIb2xkZXJFeDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFIZXhCaW5hcnlIb2xkZXJFeDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLkphdmFCb29sZWFuSG9sZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuWG1sUU5hbWVJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuSmF2YVFOYW1lSG9sZGVyRXg7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5KYXZhU3RyaW5nRW51bWVyYXRpb25Ib2xkZXJFeDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLlhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLlhtbExpc3RJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFFOYW1lOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQXR0cmlidXRlTW9kZWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFGaWVsZDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUxvY2FsQXR0cmlidXRlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hTG9jYWxFbGVtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hR2xvYmFsRWxlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVBhcnRpY2xlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFcnJvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TaW1wbGVWYWx1ZTsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBWYWxpZGF0b3IKLSAgICBpbXBsZW1lbnRzIFZhbGlkYXRvckxpc3RlbmVyCi17Ci0gICAgcHVibGljIFZhbGlkYXRvciAoCi0gICAgICAgIFNjaGVtYVR5cGUgdHlwZSwgU2NoZW1hRmllbGQgZmllbGQsIFNjaGVtYVR5cGVMb2FkZXIgZ2xvYmFsTG9hZGVyLAotICAgICAgICBYbWxPcHRpb25zIG9wdGlvbnMsIENvbGxlY3Rpb24gZGVmYXVsdEVycm9yTGlzdGVuZXIgKQotICAgIHsKLSAgICAgICAgb3B0aW9ucyA9IFhtbE9wdGlvbnMubWFza051bGwob3B0aW9ucyk7Ci0gICAgICAgIF9lcnJvckxpc3RlbmVyID0gKENvbGxlY3Rpb24pIG9wdGlvbnMuZ2V0KFhtbE9wdGlvbnMuRVJST1JfTElTVEVORVIpOwotCi0gICAgICAgIGlmIChfZXJyb3JMaXN0ZW5lciA9PSBudWxsKQotICAgICAgICAgICAgX2Vycm9yTGlzdGVuZXIgPSBkZWZhdWx0RXJyb3JMaXN0ZW5lcjsKLQotICAgICAgICBfY29uc3RyYWludEVuZ2luZSA9IG5ldyBJZGVudGl0eUNvbnN0cmFpbnQoX2Vycm9yTGlzdGVuZXIsIHR5cGUuaXNEb2N1bWVudFR5cGUoKSk7Ci0KLSAgICAgICAgX2dsb2JhbFR5cGVzID0gZ2xvYmFsTG9hZGVyOwotICAgICAgICBfY2hhcnMgPSBuZXcgQ2hhcnMoKTsKLSAgICAgICAgX3Jvb3RUeXBlID0gdHlwZTsKLSAgICAgICAgX3Jvb3RGaWVsZCA9IGZpZWxkOwotCi0gICAgICAgIF92YyA9IG5ldyBWYWxpZGF0b3JWQygpOwotICAgIH0KLQotICAgIHByaXZhdGUgY2xhc3MgVmFsaWRhdG9yVkMgaW1wbGVtZW50cyBWYWxpZGF0aW9uQ29udGV4dAotICAgIHsKLSAgICAgICAgcHVibGljIHZvaWQgaW52YWxpZCAoIFN0cmluZyBtZXNzYWdlICkKLSAgICAgICAgewotICAgICAgICAgICAgVmFsaWRhdG9yLnRoaXMuZW1pdEVycm9yKCBfZXZlbnQsIG1lc3NhZ2UgKTsKLSAgICAgICAgfQotCi0gICAgICAgIEV2ZW50IF9ldmVudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkICggKQotICAgIHsKLSAgICAgICAgcmV0dXJuICFfaW52YWxpZCAmJiBfY29uc3RyYWludEVuZ2luZS5pc1ZhbGlkKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGVtaXRFcnJvciAoIEV2ZW50IGV2ZW50LCBTdHJpbmcgbXNnICkKLSAgICB7Ci0gICAgICAgIGVtaXRFcnJvcihldmVudCwgbXNnLCBYbWxFcnJvci5TRVZFUklUWV9FUlJPUik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGVtaXRFcnJvciAoIEV2ZW50IGV2ZW50LCBTdHJpbmcgbXNnLCBpbnQgc2V2ZXJpdHkgKQotICAgIHsKLSAgICAgICAgX2Vycm9yU3RhdGUrKzsKLQotICAgICAgICBpZiAoX3N1c3BlbmRFcnJvcnMgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHNldmVyaXR5ID09IFhtbEVycm9yLlNFVkVSSVRZX0VSUk9SKQotICAgICAgICAgICAgICAgIF9pbnZhbGlkID0gdHJ1ZTsKLQotICAgICAgICAgICAgaWYgKF9lcnJvckxpc3RlbmVyICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IGV2ZW50ICE9IG51bGw7Ci0KLSAgICAgICAgICAgICAgICBfZXJyb3JMaXN0ZW5lci5hZGQoCi0gICAgICAgICAgICAgICAgICAgIFhtbEVycm9yLmZvckN1cnNvciggbXNnLCBzZXZlcml0eSwgZXZlbnQuZ2V0TG9jYXRpb25Bc0N1cnNvcigpICkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBlbWl0RmllbGRFcnJvciAoIEV2ZW50IGV2ZW50LCBTdHJpbmcgbXNnLCBRTmFtZSBuYW1lICkKLSAgICB7Ci0gICAgICAgIGVtaXRGaWVsZEVycm9yKCBldmVudCwgbXNnICsgIiAiICsgUU5hbWVIZWxwZXIucHJldHR5KCBuYW1lICkgKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgZW1pdEZpZWxkRXJyb3IgKCBFdmVudCBldmVudCwgU3RyaW5nIG1zZyApCi0gICAgewotICAgICAgICBlbWl0RmllbGRFcnJvcihldmVudCwgbXNnLCBYbWxFcnJvci5TRVZFUklUWV9FUlJPUik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGVtaXRGaWVsZEVycm9yICggRXZlbnQgZXZlbnQsIFN0cmluZyBtc2csIGludCBzZXZlcml0eSApCi0gICAgewotICAgICAgICBpZiAoX3N0YXRlU3RhY2sgIT0gbnVsbCAmJiBfc3RhdGVTdGFjay5fZmllbGQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgbXNnICs9Ci0gICAgICAgICAgICAgICAgIiBpbiBlbGVtZW50ICIgKyBRTmFtZUhlbHBlci5wcmV0dHkoIF9zdGF0ZVN0YWNrLl9maWVsZC5nZXROYW1lKCkgKTsKLSAgICAgICAgfQotCi0gICAgICAgIFZhbGlkYXRvci50aGlzLmVtaXRFcnJvciggZXZlbnQsIG1zZywgc2V2ZXJpdHkgKTsKLSAgICB9Ci0KLSAgICAvLyBGb3IgWG1sRXZlbnRMaXN0ZW5lci5lcnJvcgotCi0gICAgcHVibGljIHZvaWQgZXJyb3IgKCBYbWxFcnJvciBlcnJvciApCi0gICAgewotICAgICAgICBfZXJyb3JTdGF0ZSsrOwotCi0gICAgICAgIGlmIChfc3VzcGVuZEVycm9ycyA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBfaW52YWxpZCA9IHRydWU7Ci0KLSAgICAgICAgICAgIGlmIChfZXJyb3JMaXN0ZW5lciAhPSBudWxsKQotICAgICAgICAgICAgICAgIF9lcnJvckxpc3RlbmVyLmFkZCggZXJyb3IgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIG5leHRFdmVudCAoIGludCBraW5kLCBFdmVudCBldmVudCApCi0gICAgewotICAgICAgICBpZiAoX2VhdENvbnRlbnQgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKCBraW5kICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgRU5EICAgOiBfZWF0Q29udGVudC0tOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQkVHSU4gOiBfZWF0Q29udGVudCsrOyBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFzc2VydAotICAgICAgICAgICAgICAgIGtpbmQgPT0gQkVHSU4gfHwga2luZCA9PSBBVFRSIHx8Ci0gICAgICAgICAgICAgICAgICAgIGtpbmQgPT0gRU5EIHx8IGtpbmQgPT0gVEVYVCB8fCBraW5kID09IEVOREFUVFJTOwotCi0gICAgICAgICAgICBzd2l0Y2ggKCBraW5kICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgQkVHSU4gICAgOiBiZWdpbkV2ZW50KCAgICBldmVudCApOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQVRUUiAgICAgOiBhdHRyRXZlbnQoICAgICBldmVudCApOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRU5EQVRUUlMgOiBlbmRBdHRyc0V2ZW50KCBldmVudCApOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVEVYVCAgICAgOiB0ZXh0RXZlbnQoICAgICBldmVudCApOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRU5EICAgICAgOiBlbmRFdmVudCggICAgICBldmVudCApOyBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBiZWdpbkV2ZW50ICggRXZlbnQgZXZlbnQgKQotICAgIHsKLSAgICAgICAgU3RhdGUgc3RhdGUgPSB0b3BTdGF0ZSgpOwotCi0gICAgICAgIFNjaGVtYVR5cGUgIGVsZW1lbnRUeXBlICA9IG51bGw7Ci0gICAgICAgIFNjaGVtYUZpZWxkIGVsZW1lbnRGaWVsZCA9IG51bGw7Ci0KLSAgICAgICAgaWYgKHN0YXRlID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVsZW1lbnRUeXBlID0gX3Jvb3RUeXBlOwotICAgICAgICAgICAgZWxlbWVudEZpZWxkID0gX3Jvb3RGaWVsZDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLQotICAgICAgICAgICAgUU5hbWUgbmFtZSA9IGV2ZW50LmdldE5hbWUoKTsKLQotICAgICAgICAgICAgYXNzZXJ0IG5hbWUgIT0gbnVsbDsKLQotICAgICAgICAgICAgc3RhdGUuX2lzRW1wdHkgPSBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKHN0YXRlLl9pc05pbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlbWl0RmllbGRFcnJvcihldmVudCwgICJOaWwgZWxlbWVudCBjYW5ub3QgaGF2ZSBlbGVtZW50IGNvbnRlbnQiKTsKLSAgICAgICAgICAgICAgICBfZWF0Q29udGVudCA9IDE7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXN0YXRlLnZpc2l0KCBuYW1lICkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZW1pdEZpZWxkRXJyb3IoIGV2ZW50LCAiRWxlbWVudCBub3QgYWxsb3dlZDoiLCBuYW1lICk7Ci0gICAgICAgICAgICAgICAgX2VhdENvbnRlbnQgPSAxOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU2NoZW1hUGFydGljbGUgY3VycmVudFBhcnRpY2xlID0gc3RhdGUuY3VycmVudFBhcnRpY2xlKCk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJyZW50UGFydGljbGUuZ2V0UGFydGljbGVUeXBlKCkgPT0gU2NoZW1hUGFydGljbGUuV0lMRENBUkQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUU5hbWVTZXQgZWxlbVdpbGRjYXJkU2V0ID0gY3VycmVudFBhcnRpY2xlLmdldFdpbGRjYXJkU2V0KCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWVsZW1XaWxkY2FyZFNldC5jb250YWlucyggbmFtZSApKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZW1pdEZpZWxkRXJyb3IoIGV2ZW50LCAiRWxlbWVudCBub3QgYWxsb3dlZDoiLCBuYW1lICk7Ci0gICAgICAgICAgICAgICAgICAgIF9lYXRDb250ZW50ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGludCB3aWxkY2FyZFByb2Nlc3MgPSBjdXJyZW50UGFydGljbGUuZ2V0V2lsZGNhcmRQcm9jZXNzKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAod2lsZGNhcmRQcm9jZXNzID09IFNjaGVtYVBhcnRpY2xlLlNLSVApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBfZWF0Q29udGVudCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBlbGVtZW50RmllbGQgPSBfZ2xvYmFsVHlwZXMuZmluZEVsZW1lbnQoIG5hbWUgKTsKLQotICAgICAgICAgICAgICAgIGlmIChlbGVtZW50RmllbGQgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh3aWxkY2FyZFByb2Nlc3MgPT0gU2NoZW1hUGFydGljbGUuU1RSSUNUKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbWl0RmllbGRFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCwgIkVsZW1lbnQgbm90IGFsbG93ZWQgKHN0cmljdCB3aWxkY2FyZCwgYW5kIG5vIGRlZmluaXRpb24gZm91bmQpOiIsIG5hbWUgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIF9lYXRDb250ZW50ID0gMTsKLQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFzc2VydAotICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFydGljbGUuZ2V0UGFydGljbGVUeXBlKCkgPT0gU2NoZW1hUGFydGljbGUuRUxFTUVOVDsKLQotICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGVsZW1lbnQgcGFydGljbGUgbmFtZSBkb2VzIG5vdCBtYXRjaCB0aGUgbmFtZQotICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBldmVudCwgdGhlbiB0aGUgY3VycmVudCBlbGVtZW50IGlzIGEgc3Vic3RpdHV0ZSBmb3IKLSAgICAgICAgICAgICAgICAvLyB0aGUgY3VycmVudCBwYXJ0aWNsZS4gUmVwbGFjZSB0aGUgZmllbGQgd2l0aCB0aGUgZ2xvYmFsCi0gICAgICAgICAgICAgICAgLy8gZWxlbWVudCBmb3IgdGhlIHJlcGxhY2VtZW50Ci0KLSAgICAgICAgICAgICAgICBpZiAoISBjdXJyZW50UGFydGljbGUuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoKFNjaGVtYUxvY2FsRWxlbWVudCljdXJyZW50UGFydGljbGUpLmJsb2NrU3Vic3RpdHV0aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRGaWVsZEVycm9yKGV2ZW50LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRWxlbWVudCBzdWJzdGl0dXRpb24gbm90IGFsbG93ZWQgd2hlbiBncm91cCBoZWFkIGhhcyBibG9jaz0nc3Vic3RpdHV0aW9uJyIsIG5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgX2VhdENvbnRlbnQgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgU2NoZW1hR2xvYmFsRWxlbWVudCBuZXdGaWVsZCA9IF9nbG9iYWxUeXBlcy5maW5kRWxlbWVudChuYW1lKTsKLQotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgbmV3RmllbGQgIT0gbnVsbDsKLQotICAgICAgICAgICAgICAgICAgICBpZiAobmV3RmllbGQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRGaWVsZCA9IG5ld0ZpZWxkOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRGaWVsZCA9IChTY2hlbWFGaWVsZCkgY3VycmVudFBhcnRpY2xlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZWxlbWVudFR5cGUgPSBlbGVtZW50RmllbGQuZ2V0VHlwZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYXNzZXJ0IGVsZW1lbnRUeXBlICE9IG51bGw7Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gdGhlIG5vLXR5cGUgaXMgYWx3YXlzIGludmFsaWQgKGV2ZW4gaWYgdGhlcmUgaXMgYW4geHNpOnR5cGUpCi0gICAgICAgIC8vCi0KLSAgICAgICAgaWYgKGVsZW1lbnRUeXBlLmlzTm9UeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVtaXRGaWVsZEVycm9yKGV2ZW50LCAiSW52YWxpZCB0eXBlLiIpOwotICAgICAgICAgICAgX2VhdENvbnRlbnQgPSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gU2VlIGlmIHRoZSBlbGVtZW50IGhhcyBhbiB4c2k6dHlwZSBvbiBpdAotICAgICAgICAvLwotCi0gICAgICAgIFNjaGVtYVR5cGUgeHNpVHlwZSA9IG51bGw7Ci0KLSAgICAgICAgaWYgKGV2ZW50LmdldFhzaVR5cGUoIF9jaGFycyApKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBfY2hhcnMuYXNTdHJpbmcoKTsKLQotICAgICAgICAgICAgLy8gVHVybiBvZmYgdGhlIGxpc3RlbmVyIHNvIGEgcHVibGljIGVycm9yIG1lc3NhZ2UKLSAgICAgICAgICAgIC8vIGRvZXMgbm90IGdldCBnZW5lcmF0ZWQsIGJ1dCBJIGNhbiBzZWUgaWYgdGhlcmUgd2FzCi0gICAgICAgICAgICAvLyBhbiBlcnJvciB0aHJvdWdoIHRoZSBlcnJvciBzdGF0ZQotCi0gICAgICAgICAgICBpbnQgb3JpZ2luYWxFcnJvclN0YXRlID0gX2Vycm9yU3RhdGU7Ci0KLSAgICAgICAgICAgIF9zdXNwZW5kRXJyb3JzKys7Ci0KLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF92Yy5fZXZlbnQgPSBudWxsOwotCi0gICAgICAgICAgICAgICAgeHNpVHlwZSA9Ci0gICAgICAgICAgICAgICAgICAgIF9nbG9iYWxUeXBlcy5maW5kVHlwZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIFhtbFFOYW1lSW1wbC52YWxpZGF0ZUxleGljYWwoIHZhbHVlLCBfdmMsIGV2ZW50ICkgKTsKLQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKCBUaHJvd2FibGUgdCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2Vycm9yU3RhdGUrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbmFsbHkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfc3VzcGVuZEVycm9ycy0tOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAob3JpZ2luYWxFcnJvclN0YXRlICE9IF9lcnJvclN0YXRlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGVtaXRGaWVsZEVycm9yKAotICAgICAgICAgICAgICAgICAgICBldmVudCwgIkludmFsaWQgeHNpOnR5cGUgcW5hbWU6ICciICsgdmFsdWUgKyAiJyIgKTsKLQotICAgICAgICAgICAgICAgIF9lYXRDb250ZW50ID0gMTsKLQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHhzaVR5cGUgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlbWl0RXJyb3IoZXZlbnQsICAiQ291bGQgbm90IGZpbmQgeHNpOnR5cGU6ICciICsgdmFsdWUgKyAiJyIpOwotCi0gICAgICAgICAgICAgICAgX2VhdENvbnRlbnQgPSAxOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHhzaVR5cGUgIT0gbnVsbCAmJiAheHNpVHlwZS5lcXVhbHMoZWxlbWVudFR5cGUpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWVsZW1lbnRUeXBlLmlzQXNzaWduYWJsZUZyb20oeHNpVHlwZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZW1pdEZpZWxkRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgIGV2ZW50LAotICAgICAgICAgICAgICAgICAgICAiVHlwZSAnIiArIHhzaVR5cGUgKwotICAgICAgICAgICAgICAgICAgICAgICAgIicgaXMgbm90IGRlcml2ZWQgZnJvbSAnIiArIGVsZW1lbnRUeXBlICsgIiciICk7Ci0KLSAgICAgICAgICAgICAgICBfZWF0Q29udGVudCA9IDE7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChlbGVtZW50VHlwZS5ibG9ja0V4dGVuc2lvbigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoIFNjaGVtYVR5cGUgdCA9IHhzaVR5cGUgOyAhIHQuZXF1YWxzKCBlbGVtZW50VHlwZSApIDsKLSAgICAgICAgICAgICAgICAgICAgICB0ID0gdC5nZXRCYXNlVHlwZSgpICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0LmdldERlcml2YXRpb25UeXBlKCkgPT0gU2NoZW1hVHlwZS5EVF9FWFRFTlNJT04pCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRGaWVsZEVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeHRlbnNpb24gdHlwZTogJyIgKyB4c2lUeXBlICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIicgbWF5IG5vdCBiZSBzdWJzdGl0dXRlZCBmb3I6ICciICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRUeXBlICsgIiciICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIF9lYXRDb250ZW50ID0gMTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZWxlbWVudFR5cGUuYmxvY2tSZXN0cmljdGlvbigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoIFNjaGVtYVR5cGUgdCA9IHhzaVR5cGUgOyAhIHQuZXF1YWxzKCBlbGVtZW50VHlwZSApIDsKLSAgICAgICAgICAgICAgICAgICAgICB0ID0gdC5nZXRCYXNlVHlwZSgpICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0LmdldERlcml2YXRpb25UeXBlKCkgPT0gU2NoZW1hVHlwZS5EVF9SRVNUUklDVElPTikKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZW1pdEZpZWxkRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlc3RyaWN0aW9uIHR5cGU6ICciICsgeHNpVHlwZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInIG1heSBub3QgYmUgc3Vic3RpdHV0ZWQgZm9yOiAnIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50VHlwZSArICInIiApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBfZWF0Q29udGVudCA9IDE7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGVsZW1lbnRGaWVsZCBpbnN0YW5jZW9mIFNjaGVtYUxvY2FsRWxlbWVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTY2hlbWFMb2NhbEVsZW1lbnQgc2xlICA9IChTY2hlbWFMb2NhbEVsZW1lbnQpZWxlbWVudEZpZWxkOwotCi0gICAgICAgICAgICAgICAgaWYgKHNsZS5ibG9ja0V4dGVuc2lvbigpIHx8IHNsZS5ibG9ja1Jlc3RyaWN0aW9uKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBmb3IgKCBTY2hlbWFUeXBlIHQgPSB4c2lUeXBlIDsgISB0LmVxdWFscyggZWxlbWVudFR5cGUgKSA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB0LmdldEJhc2VUeXBlKCkgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHQuZ2V0RGVyaXZhdGlvblR5cGUoKSA9PSBTY2hlbWFUeXBlLkRUX1JFU1RSSUNUSU9OICYmIHNsZS5ibG9ja1Jlc3RyaWN0aW9uKCkpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHQuZ2V0RGVyaXZhdGlvblR5cGUoKSA9PSBTY2hlbWFUeXBlLkRUX0VYVEVOU0lPTiAmJiBzbGUuYmxvY2tFeHRlbnNpb24oKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdEVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRlcml2ZWQgdHlwZTogJyIgKyB4c2lUeXBlICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInIG1heSBub3QgYmUgc3Vic3RpdHV0ZWQgZm9yIGVsZW1lbnQgJyIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUU5hbWVIZWxwZXIucHJldHR5KHNsZS5nZXROYW1lKCkpICsgIiciICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZWF0Q29udGVudCA9IDE7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZWxlbWVudFR5cGUgPSB4c2lUeXBlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVsZW1lbnRGaWVsZCBpbnN0YW5jZW9mIFNjaGVtYUxvY2FsRWxlbWVudCkKLSAgICAgICAgewotICAgICAgICAgICAgU2NoZW1hTG9jYWxFbGVtZW50IHNsZSA9IChTY2hlbWFMb2NhbEVsZW1lbnQpZWxlbWVudEZpZWxkOwotCi0gICAgICAgICAgICBpZiAoc2xlLmlzQWJzdHJhY3QoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlbWl0RXJyb3IoZXZlbnQsICAiRWxlbWVudCAnIiArIFFOYW1lSGVscGVyLnByZXR0eShzbGUuZ2V0TmFtZSgpKSArCi0gICAgICAgICAgICAgICAgICAgICInIGlzIGFic3RyYWN0IGFuZCBjYW5ub3QgYmUgdXNlZCBpbiBhbiBpbnN0YW5jZS4iKTsKLSAgICAgICAgICAgICAgICBfZWF0Q29udGVudCA9IDE7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGVsZW1lbnRUeXBlICE9IG51bGwgJiYgZWxlbWVudFR5cGUuaXNBYnN0cmFjdCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbWl0RmllbGRFcnJvcigKLSAgICAgICAgICAgICAgICBldmVudCwKLSAgICAgICAgICAgICAgICAiQWJzdHJhY3QgdHlwZTogIiArIGVsZW1lbnRUeXBlICsKLSAgICAgICAgICAgICAgICAgICAgIiBjYW5ub3QgYmUgdXNlZCBpbiBhbiBpbnN0YW5jZSIgKTsKLQotICAgICAgICAgICAgX2VhdENvbnRlbnQgPSAxOwotCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBib29sZWFuIGlzTmlsID0gZmFsc2U7Ci0gICAgICAgIGJvb2xlYW4gaGFzTmlsID0gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGV2ZW50LmdldFhzaU5pbChfY2hhcnMpKQotICAgICAgICB7Ci0gICAgICAgICAgICBfdmMuX2V2ZW50ID0gZXZlbnQ7Ci0gICAgICAgICAgICBpc05pbCA9IEphdmFCb29sZWFuSG9sZGVyLnZhbGlkYXRlTGV4aWNhbChfY2hhcnMuYXNTdHJpbmcoKSwgX3ZjKTsKLSAgICAgICAgICAgIGhhc05pbCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIG5vdGUgaW4gc2NoZW1hIHNwZWMgMy4zLjQsIHlvdSdyZSBub3QgZXZlbiBhbGxvd2VkIHRvIHNheSB4c2k6bmlsPSJmYWxzZSIgaWYgeW91J3JlIG5vdCBuaWxsYWJsZSEKLSAgICAgICAgaWYgKGhhc05pbCAmJiAhZWxlbWVudEZpZWxkLmlzTmlsbGFibGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgZW1pdEZpZWxkRXJyb3IoZXZlbnQsICAiRWxlbWVudCBoYXMgeHNpOm5pbCBhdHRyaWJ1dGUgYnV0IGlzIG5vdCBuaWxsYWJsZSIpOwotCi0gICAgICAgICAgICBfZWF0Q29udGVudCA9IDE7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBuZXdTdGF0ZSggZWxlbWVudFR5cGUsIGVsZW1lbnRGaWVsZCwgaXNOaWwgKTsKLQotICAgICAgICAvLyBEaXNwYXRjaCB0aGlzIGVsZW1lbnQgZXZlbnQgdG8gYW55IGlkZW50aXR5IGNvbnN0cmFpbnRzCi0gICAgICAgIC8vIEFzIHdlbGwgYXMgYWRkaW5nIGFueSBuZXcgaWRlbnRpdHkgY29uc3RyYWludHMgdGhhdCBleGlzdAotCi0gICAgICAgIF9jb25zdHJhaW50RW5naW5lLmVsZW1lbnQoCi0gICAgICAgICAgICBldmVudCwKLSAgICAgICAgICAgIGVsZW1lbnRUeXBlLAotICAgICAgICAgICAgZWxlbWVudEZpZWxkIGluc3RhbmNlb2YgU2NoZW1hTG9jYWxFbGVtZW50Ci0gICAgICAgICAgICAgICAgPyAoKFNjaGVtYUxvY2FsRWxlbWVudCkgZWxlbWVudEZpZWxkKS5nZXRJZGVudGl0eUNvbnN0cmFpbnRzKCkKLSAgICAgICAgICAgICAgICA6IG51bGwgKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgYXR0ckV2ZW50ICggRXZlbnQgZXZlbnQgKQotICAgIHsKLSAgICAgICAgUU5hbWUgYXR0ck5hbWUgPSBldmVudC5nZXROYW1lKCk7Ci0KLSAgICAgICAgU3RhdGUgc3RhdGUgPSB0b3BTdGF0ZSgpOwotCi0gICAgICAgIGlmIChzdGF0ZS5fYXR0cnMgPT0gbnVsbCkKLSAgICAgICAgICAgIHN0YXRlLl9hdHRycyA9IG5ldyBIYXNoU2V0KCk7Ci0KLSAgICAgICAgaWYgKHN0YXRlLl9hdHRycy5jb250YWlucyggYXR0ck5hbWUgKSkKLSAgICAgICAgewotICAgICAgICAgICAgZW1pdEZpZWxkRXJyb3IoCi0gICAgICAgICAgICAgICAgZXZlbnQsCi0gICAgICAgICAgICAgICAgIkR1cGxpY2F0ZSBhdHRyaWJ1dGU6ICIgKyBRTmFtZUhlbHBlci5wcmV0dHkoIGF0dHJOYW1lICkgKTsKLQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGUuX2F0dHJzLmFkZCggYXR0ck5hbWUgKTsKLQotICAgICAgICBpZiAoIXN0YXRlLl9jYW5IYXZlQXR0cnMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVtaXRGaWVsZEVycm9yKCBldmVudCwgIkNhbid0IGhhdmUgYXR0cmlidXRlcyIgKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFNjaGVtYUxvY2FsQXR0cmlidXRlIGF0dHJTY2hlbWEgPQotICAgICAgICAgICAgc3RhdGUuX2F0dHJNb2RlbCA9PSBudWxsCi0gICAgICAgICAgICAgICAgPyBudWxsCi0gICAgICAgICAgICAgICAgOiBzdGF0ZS5fYXR0ck1vZGVsLmdldEF0dHJpYnV0ZSggYXR0ck5hbWUgKTsKLQotICAgICAgICBpZiAoYXR0clNjaGVtYSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYXR0clNjaGVtYS5nZXRVc2UoKSA9PSBTY2hlbWFMb2NhbEF0dHJpYnV0ZS5QUk9ISUJJVEVEKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGVtaXRGaWVsZEVycm9yKAotICAgICAgICAgICAgICAgICAgICBldmVudCwKLSAgICAgICAgICAgICAgICAgICAgIkF0dHJpYnV0ZSBpcyBwcm9oaWJpdGVkOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICArIFFOYW1lSGVscGVyLnByZXR0eSggYXR0ck5hbWUgKSApOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTdHJpbmcgdmFsdWUgPQotICAgICAgICAgICAgICAgIHZhbGlkYXRlU2ltcGxlVHlwZSgKLSAgICAgICAgICAgICAgICAgICAgYXR0clNjaGVtYS5nZXRUeXBlKCksIGF0dHJTY2hlbWEsIGV2ZW50LCBmYWxzZSwgZmFsc2UgKTsKLQotICAgICAgICAgICAgX2NvbnN0cmFpbnRFbmdpbmUuYXR0ciggZXZlbnQsIGF0dHJOYW1lLCBhdHRyU2NoZW1hLmdldFR5cGUoKSwgdmFsdWUgKTsKLQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHdpbGRjYXJkUHJvY2VzcyA9IHN0YXRlLl9hdHRyTW9kZWwuZ2V0V2lsZGNhcmRQcm9jZXNzKCk7Ci0KLSAgICAgICAgaWYgKHdpbGRjYXJkUHJvY2VzcyA9PSBTY2hlbWFBdHRyaWJ1dGVNb2RlbC5OT05FKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbWl0RmllbGRFcnJvcigKLSAgICAgICAgICAgICAgICBldmVudCwKLSAgICAgICAgICAgICAgICAiQXR0cmlidXRlIG5vdCBhbGxvd2VkIChubyB3aWxkY2FyZHMgYWxsb3dlZCk6ICIKLSAgICAgICAgICAgICAgICAgICAgKyBRTmFtZUhlbHBlci5wcmV0dHkoIGF0dHJOYW1lICkgKTsKLQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgUU5hbWVTZXQgYXR0cldpbGRjYXJkU2V0ID0gc3RhdGUuX2F0dHJNb2RlbC5nZXRXaWxkY2FyZFNldCgpOwotCi0gICAgICAgIGlmICghYXR0cldpbGRjYXJkU2V0LmNvbnRhaW5zKCBhdHRyTmFtZSApKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbWl0RmllbGRFcnJvcigKLSAgICAgICAgICAgICAgICBldmVudCwKLSAgICAgICAgICAgICAgICAiQXR0cmlidXRlIG5vdCBhbGxvd2VkOiAiICsgUU5hbWVIZWxwZXIucHJldHR5KCBhdHRyTmFtZSApICk7Ci0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3aWxkY2FyZFByb2Nlc3MgPT0gU2NoZW1hQXR0cmlidXRlTW9kZWwuU0tJUCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBhdHRyU2NoZW1hID0gX2dsb2JhbFR5cGVzLmZpbmRBdHRyaWJ1dGUoIGF0dHJOYW1lICk7Ci0KLSAgICAgICAgaWYgKGF0dHJTY2hlbWEgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHdpbGRjYXJkUHJvY2VzcyA9PSBTY2hlbWFBdHRyaWJ1dGVNb2RlbC5MQVgpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBhc3NlcnQgd2lsZGNhcmRQcm9jZXNzID09IFNjaGVtYUF0dHJpYnV0ZU1vZGVsLlNUUklDVDsKLQotICAgICAgICAgICAgZW1pdEZpZWxkRXJyb3IoCi0gICAgICAgICAgICAgICAgZXZlbnQsCi0gICAgICAgICAgICAgICAgIkF0dHJpYnV0ZSBub3QgYWxsb3dlZCAoc3RyaWN0IHdpbGRjYXJkLCBhbmQgbm8gZGVmaW5pdGlvbiBmb3VuZCk6ICIgKyBRTmFtZUhlbHBlci5wcmV0dHkoIGF0dHJOYW1lICkgKTsKLQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIHZhbHVlID0KLSAgICAgICAgICAgIHZhbGlkYXRlU2ltcGxlVHlwZSgKLSAgICAgICAgICAgICAgICBhdHRyU2NoZW1hLmdldFR5cGUoKSwgYXR0clNjaGVtYSwgZXZlbnQsIGZhbHNlLCBmYWxzZSApOwotCi0gICAgICAgIF9jb25zdHJhaW50RW5naW5lLmF0dHIoIGV2ZW50LCBhdHRyTmFtZSwgYXR0clNjaGVtYS5nZXRUeXBlKCksIHZhbHVlICk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGVuZEF0dHJzRXZlbnQgKCBFdmVudCBldmVudCApCi0gICAgewotICAgICAgICBTdGF0ZSBzdGF0ZSA9IHRvcFN0YXRlKCk7Ci0KLSAgICAgICAgaWYgKHN0YXRlLl9hdHRyTW9kZWwgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgU2NoZW1hTG9jYWxBdHRyaWJ1dGVbXSBhdHRycyA9IHN0YXRlLl9hdHRyTW9kZWwuZ2V0QXR0cmlidXRlcygpOwotCi0gICAgICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgYXR0cnMubGVuZ3RoIDsgaSsrICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTY2hlbWFMb2NhbEF0dHJpYnV0ZSBzbGEgPSBhdHRyc1sgaSBdOwotCi0gICAgICAgICAgICAgICAgaWYgKHN0YXRlLl9hdHRycyA9PSBudWxsIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAhc3RhdGUuX2F0dHJzLmNvbnRhaW5zKCBzbGEuZ2V0TmFtZSgpICkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2xhLmdldFVzZSgpID09IFNjaGVtYUxvY2FsQXR0cmlidXRlLlJFUVVJUkVEKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbWl0RmllbGRFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCwgIkV4cGVjdGVkIGF0dHJpYnV0ZTogIiwgc2xhLmdldE5hbWUoKSApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNsYS5pc0RlZmF1bHQoKSB8fCBzbGEuaXNGaXhlZCgpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBfY29uc3RyYWludEVuZ2luZS5hdHRyKGV2ZW50LCBzbGEuZ2V0TmFtZSgpLCBzbGEuZ2V0VHlwZSgpLCBzbGEuZ2V0RGVmYXVsdFRleHQoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gdmFsaWRhdGUgYXR0cmlidXRlIGRlZmF1bHRzIGJlY2F1c2UgdGhpcyBpcyBkb25lIGF0IGNvbXBpbGV0aW1lLgotICAgICAgICAgICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHNsYS5nZXREZWZhdWx0VGV4dCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgU2NoZW1hVHlwZSB0eXBlID0gc2xhLmdldFR5cGUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFhtbFFOYW1lLnR5cGUuaXNBc3NpZ25hYmxlRnJvbSh0eXBlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0RmllbGRFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGVmYXVsdCBRTmFtZSB2YWx1ZXMgYXJlIHVuc3VwcG9ydGVkIGZvciBhdHRyaWJ1dGU6ICIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFOYW1lSGVscGVyLnByZXR0eShzbGEuZ2V0TmFtZSgpKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtbEVycm9yLlNFVkVSSVRZX0lORk8pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIAotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlU2ltcGxlVHlwZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgc2xhLmdldERlZmF1bHRUZXh0KCksIGV2ZW50ICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29uc3RyYWludEVuZ2luZS5hdHRyKCBldmVudCwgdHlwZSwgdmFsdWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgZW5kRXZlbnQgKCBFdmVudCBldmVudCApCi0gICAgewotICAgICAgICBTdGF0ZSBzdGF0ZSA9IHRvcFN0YXRlKCk7Ci0KLSAgICAgICAgaWYgKCFzdGF0ZS5faXNOaWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghc3RhdGUuZW5kKCkpCi0gICAgICAgICAgICAgICAgZW1pdEZpZWxkRXJyb3IoIGV2ZW50LCAiRXhwZWN0ZWQgZWxlbWVudChzKSIgKTsKLQotICAgICAgICAgICAgLy8gVGhpcyBlbmQgZXZlbnQgaGFzIG5vIHRleHQsIHVzZSB0aGlzIGZhY3QgdG8gcGFzcyBubyB0ZXh0IHRvCi0gICAgICAgICAgICAvLyBoYW5kbGVUZXh0Ci0KLSAgICAgICAgICAgIGlmIChzdGF0ZS5faXNFbXB0eSkKLSAgICAgICAgICAgICAgICBoYW5kbGVUZXh0KCBldmVudCwgdHJ1ZSwgc3RhdGUuX2ZpZWxkICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwb3BTdGF0ZSggZXZlbnQgKTsKLQotICAgICAgICBfY29uc3RyYWludEVuZ2luZS5lbmRFbGVtZW50KCBldmVudCApOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB0ZXh0RXZlbnQgKCBFdmVudCBldmVudCApCi0gICAgewotICAgICAgICBTdGF0ZSBzdGF0ZSA9IHRvcFN0YXRlKCk7Ci0KLSAgICAgICAgaWYgKHN0YXRlLl9pc05pbCkKLSAgICAgICAgICAgIGVtaXRGaWVsZEVycm9yKGV2ZW50LCAiTmlsIGVsZW1lbnQgY2Fubm90IGhhdmUgc2ltcGxlIGNvbnRlbnQiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaGFuZGxlVGV4dCggZXZlbnQsIGZhbHNlLCBzdGF0ZS5fZmllbGQgKTsKLQotICAgICAgICBzdGF0ZS5faXNFbXB0eSA9IGZhbHNlOwotICAgIH0KLQotCi0gICAgcHJpdmF0ZSB2b2lkIGhhbmRsZVRleHQgKAotICAgICAgICBFdmVudCBldmVudCwgYm9vbGVhbiBlbXB0eUNvbnRlbnQsIFNjaGVtYUZpZWxkIGZpZWxkICkKLSAgICB7Ci0gICAgICAgIFN0YXRlIHN0YXRlID0gdG9wU3RhdGUoKTsKLQotICAgICAgICBpZiAoIXN0YXRlLl9zYXdUZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuX2hhc1NpbXBsZUNvbnRlbnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0KLSAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVTaW1wbGVUeXBlKAotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuX3R5cGUsIGZpZWxkLCBldmVudCwgZW1wdHlDb250ZW50LCB0cnVlICk7Ci0KLSAgICAgICAgICAgICAgICBfY29uc3RyYWludEVuZ2luZS50ZXh0KCBldmVudCwgc3RhdGUuX3R5cGUsIHZhbHVlLCBmYWxzZSApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZW1wdHlDb250ZW50KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9jb25zdHJhaW50RW5naW5lLnRleHQoIGV2ZW50LCBzdGF0ZS5fdHlwZSwgbnVsbCwgdHJ1ZSApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIF9jb25zdHJhaW50RW5naW5lLnRleHQoIGV2ZW50LCBzdGF0ZS5fdHlwZSwgIiIsIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghZW1wdHlDb250ZW50ICYmICFzdGF0ZS5fY2FuSGF2ZU1peGVkQ29udGVudCAmJiAKLSAgICAgICAgICAgICFldmVudC50ZXh0SXNXaGl0ZXNwYWNlKCkgJiAhc3RhdGUuX2hhc1NpbXBsZUNvbnRlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChmaWVsZCBpbnN0YW5jZW9mIFNjaGVtYUxvY2FsRWxlbWVudCkgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU2NoZW1hTG9jYWxFbGVtZW50IGUgPSAoU2NoZW1hTG9jYWxFbGVtZW50KWZpZWxkOwotICAgICAgICAgICAgICAgIGVtaXRFcnJvcihldmVudCwgIkVsZW1lbnQ6ICciICsgUU5hbWVIZWxwZXIucHJldHR5KGUuZ2V0TmFtZSgpKSArICInIGNhbm5vdCBoYXZlIG1peGVkIGNvbnRlbnQuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEVycm9yKCBldmVudCwgIkNhbid0IGhhdmUgbWl4ZWQgY29udGVudCIgKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghZW1wdHlDb250ZW50KQotICAgICAgICAgICAgc3RhdGUuX3Nhd1RleHQgPSB0cnVlOwotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwgY2xhc3MgU3RhdGUKLSAgICB7Ci0gICAgICAgIGJvb2xlYW4gdmlzaXQgKCBRTmFtZSBuYW1lICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIF9jYW5IYXZlRWxlbWVudHMgJiYgX3Zpc2l0b3IudmlzaXQoIG5hbWUgKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2xlYW4gZW5kICggKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gIV9jYW5IYXZlRWxlbWVudHMgfHwgX3Zpc2l0b3IudmlzaXQoIG51bGwgKTsKLSAgICAgICAgfQotCi0gICAgICAgIFNjaGVtYVBhcnRpY2xlIGN1cnJlbnRQYXJ0aWNsZSAoICkKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0IF92aXNpdG9yICE9IG51bGw7Ci0gICAgICAgICAgICByZXR1cm4gX3Zpc2l0b3IuY3VycmVudFBhcnRpY2xlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBTY2hlbWFUeXBlICBfdHlwZTsKLSAgICAgICAgU2NoZW1hRmllbGQgX2ZpZWxkOwotCi0gICAgICAgIGJvb2xlYW4gX2NhbkhhdmVBdHRyczsKLSAgICAgICAgYm9vbGVhbiBfY2FuSGF2ZU1peGVkQ29udGVudDsKLSAgICAgICAgYm9vbGVhbiBfaGFzU2ltcGxlQ29udGVudDsKLQotICAgICAgICBib29sZWFuIF9zYXdUZXh0OwotICAgICAgICBib29sZWFuIF9pc0VtcHR5OwotICAgICAgICBib29sZWFuIF9pc05pbDsKLQotICAgICAgICBTY2hlbWFUeXBlVmlzaXRvckltcGwgX3Zpc2l0b3I7Ci0gICAgICAgIGJvb2xlYW4gX2NhbkhhdmVFbGVtZW50czsKLQotICAgICAgICBTY2hlbWFBdHRyaWJ1dGVNb2RlbCBfYXR0ck1vZGVsOwotCi0gICAgICAgIEhhc2hTZXQgX2F0dHJzOwotCi0gICAgICAgIFN0YXRlIF9uZXh0OwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBuZXdTdGF0ZSAoIFNjaGVtYVR5cGUgdHlwZSwgU2NoZW1hRmllbGQgZmllbGQsIGJvb2xlYW4gaXNOaWwgKQotICAgIHsKLSAgICAgICAgU3RhdGUgc3RhdGUgPSBuZXcgU3RhdGUoKTsKLQotICAgICAgICBzdGF0ZS5fdHlwZSA9IHR5cGU7Ci0gICAgICAgIHN0YXRlLl9maWVsZCA9IGZpZWxkOwotICAgICAgICBzdGF0ZS5faXNFbXB0eSA9IHRydWU7Ci0gICAgICAgIHN0YXRlLl9pc05pbCA9IGlzTmlsOwotCi0gICAgICAgIGlmICh0eXBlLmlzU2ltcGxlVHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0ZS5faGFzU2ltcGxlQ29udGVudCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0ZS5fY2FuSGF2ZUF0dHJzID0gdHJ1ZTsKLSAgICAgICAgICAgIHN0YXRlLl9hdHRyTW9kZWwgPSB0eXBlLmdldEF0dHJpYnV0ZU1vZGVsKCk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoIHR5cGUuZ2V0Q29udGVudFR5cGUoKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRU1QVFlfQ09OVEVOVCA6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5TSU1QTEVfQ09OVEVOVCA6Ci0gICAgICAgICAgICAgICAgc3RhdGUuX2hhc1NpbXBsZUNvbnRlbnQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuTUlYRURfQ09OVEVOVCA6Ci0gICAgICAgICAgICAgICAgc3RhdGUuX2NhbkhhdmVNaXhlZENvbnRlbnQgPSB0cnVlOwotICAgICAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaAotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRUxFTUVOVF9DT05URU5UIDoKLQotICAgICAgICAgICAgICAgIFNjaGVtYVBhcnRpY2xlIHBhcnRpY2xlID0gdHlwZS5nZXRDb250ZW50TW9kZWwoKTsKLQotICAgICAgICAgICAgICAgIHN0YXRlLl9jYW5IYXZlRWxlbWVudHMgPSBwYXJ0aWNsZSAhPSBudWxsOwotCi0gICAgICAgICAgICAgICAgaWYgKHN0YXRlLl9jYW5IYXZlRWxlbWVudHMpCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLl92aXNpdG9yID0gaW5pdFZpc2l0b3IoIHBhcnRpY2xlICk7Ci0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgZGVmYXVsdCA6Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oICJVbmV4cGVjdGVkIGNvbnRlbnQgdHlwZSIgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1c2hTdGF0ZSggc3RhdGUgKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgcG9wU3RhdGUgKCBFdmVudCBlICkKLSAgICB7Ci0gICAgICAgIGlmIChfc3RhdGVTdGFjay5fdmlzaXRvciAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBwb29sVmlzaXRvciggX3N0YXRlU3RhY2suX3Zpc2l0b3IgKTsKLSAgICAgICAgICAgIF9zdGF0ZVN0YWNrLl92aXNpdG9yID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIF9zdGF0ZVN0YWNrID0gX3N0YXRlU3RhY2suX25leHQ7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHB1c2hTdGF0ZSAoIFN0YXRlIHN0YXRlICkKLSAgICB7Ci0gICAgICAgIHN0YXRlLl9uZXh0ID0gX3N0YXRlU3RhY2s7Ci0gICAgICAgIF9zdGF0ZVN0YWNrID0gc3RhdGU7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBMaW5rZWRMaXN0IF92aXNpdG9yUG9vbCA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0KLSAgICBwcml2YXRlIHZvaWQgcG9vbFZpc2l0b3IoIFNjaGVtYVR5cGVWaXNpdG9ySW1wbCB2aXNpdG9yICkKLSAgICB7Ci0gICAgICAgIF92aXNpdG9yUG9vbC5hZGQoIHZpc2l0b3IgKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFNjaGVtYVR5cGVWaXNpdG9ySW1wbCBpbml0VmlzaXRvciggU2NoZW1hUGFydGljbGUgcGFydGljbGUgKQotICAgIHsKLSAgICAgICAgaWYgKF92aXNpdG9yUG9vbC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gbmV3IFNjaGVtYVR5cGVWaXNpdG9ySW1wbCggcGFydGljbGUgKTsKLQotICAgICAgICBTY2hlbWFUeXBlVmlzaXRvckltcGwgcmVzdWx0ID0KLSAgICAgICAgICAgIChTY2hlbWFUeXBlVmlzaXRvckltcGwpIF92aXNpdG9yUG9vbC5yZW1vdmVMYXN0KCk7Ci0KLSAgICAgICAgcmVzdWx0LmluaXQoIHBhcnRpY2xlICk7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFN0YXRlIHRvcFN0YXRlICggKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9zdGF0ZVN0YWNrOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8gU2ltcGxlIFR5cGUgVmFsaWRhdGlvbgotICAgIC8vCi0gICAgLy8gZW1wdHlDb250ZW50IG1lYW5zIHRoYXQgeW91IGNhbid0IHVzZSB0aGUgZXZlbnQgdG8gZ2V0IHRleHQ6IHRoZXJlIGlzCi0gICAgLy8gbm90IHRleHQsIGJ1dCB5b3UgY2FuIHVzZSB0aGUgZXZlbnQgdG8gZG8gcHJlZml4IHJlc29sdXRpb24gKGluIHRoZSBjYXNlCi0gICAgLy8gd2hlcmUgdGhlIGRlZmF1bHQgaXMgYSBxbmFtZSkKLSAgICAvLwotCi0gICAgcHJpdmF0ZSBTdHJpbmcgdmFsaWRhdGVTaW1wbGVUeXBlICgKLSAgICAgICAgU2NoZW1hVHlwZSB0eXBlLCBTY2hlbWFGaWVsZCBmaWVsZCwgRXZlbnQgZXZlbnQsCi0gICAgICAgIGJvb2xlYW4gZW1wdHlDb250ZW50LCBib29sZWFuIGNhbkFwcGx5RGVmYXVsdCApCi0gICAgewotICAgICAgICBpZiAoIXR5cGUuaXNTaW1wbGVUeXBlKCkgJiYKLSAgICAgICAgICAgICAgICB0eXBlLmdldENvbnRlbnRUeXBlKCkgIT0gU2NoZW1hVHlwZS5TSU1QTEVfQ09OVEVOVCkKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0IGZhbHNlOwotICAgICAgICAgICAgLy8gdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oICJOb3QgYSBzaW1wbGUgdHlwZSIgKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBzaG91bGQgbmV2ZXIgaGFwcGVuCi0gICAgICAgIH0KLQotICAgICAgICAvLwotICAgICAgICAvLyB0aGUgbm8tdHlwZSBpcyBhbHdheXMgaW52YWxpZAotICAgICAgICAvLwotCi0gICAgICAgIGlmICh0eXBlLmlzTm9UeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVtaXRFcnJvcihldmVudCwgIkludmFsaWQgdHlwZS4iKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLQotCi0gICAgICAgIC8vIEdldCB0aGUgdmFsdWUgYXMgYSBzdHJpbmcgKGFzIG5vcm1hbGl6ZWQgYnkgdGhlIHdoaXRlIHNwYWNlIHJ1bGUKLSAgICAgICAgLy8gVE9ETyAtIHdpbGwgd2FudCB0byBvcHRpbWl6ZSB0aGlzIGxhdGVyCi0KLSAgICAgICAgU3RyaW5nIHZhbHVlID0gIiI7Ci0KLSAgICAgICAgaWYgKCFlbXB0eUNvbnRlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGV2ZW50LmdldFRleHQoIF9jaGFycywgdHlwZS5nZXRXaGl0ZVNwYWNlUnVsZSgpICk7Ci0gICAgICAgICAgICB2YWx1ZSA9IF9jaGFycy5hc1N0cmluZygpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU2VlIGlmIEkgY2FuIGFwcGx5IGEgZGVmYXVsdC9maXhlZCB2YWx1ZQotCi0gICAgICAgIGlmICh2YWx1ZS5sZW5ndGgoKSA9PSAwICYmIGNhbkFwcGx5RGVmYXVsdCAmJiBmaWVsZCAhPSBudWxsICYmCi0gICAgICAgICAgICAgICAgKGZpZWxkLmlzRGVmYXVsdCgpIHx8IGZpZWxkLmlzRml4ZWQoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChYbWxRTmFtZS50eXBlLmlzQXNzaWduYWJsZUZyb20odHlwZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZW1pdEVycm9yKAotICAgICAgICAgICAgICAgICAgICBldmVudCwKLSAgICAgICAgICAgICAgICAgICAgIkRlZmF1bHQgUU5hbWUgdmFsdWVzIGFyZSB1bnN1cHBvcnRlZCBmb3IgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICBRTmFtZUhlbHBlci5yZWFkYWJsZSh0eXBlKSArICIgLSBpZ25vcmluZy4iLAotICAgICAgICAgICAgICAgICAgICBYbWxFcnJvci5TRVZFUklUWV9JTkZPKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTdHJpbmcgZGVmYXVsdFZhbHVlID0KLSAgICAgICAgICAgICAgICBYbWxXaGl0ZXNwYWNlLmNvbGxhcHNlKAotICAgICAgICAgICAgICAgICAgICBmaWVsZC5nZXREZWZhdWx0VGV4dCgpLCB0eXBlLmdldFdoaXRlU3BhY2VSdWxlKCkgKTsKLQotLy8gQlVHQlVHIC0gc2hvdWxkIHZhbGlkYXRlIGRlZmF1bHRWYWx1ZSBhdCBjb21waWxlIHRpbWUKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgIHZhbGlkYXRlU2ltcGxlVHlwZSggdHlwZSwgZGVmYXVsdFZhbHVlLCBldmVudCApCi0gICAgICAgICAgICAgICAgICAgID8gZGVmYXVsdFZhbHVlCi0gICAgICAgICAgICAgICAgICAgIDogbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghdmFsaWRhdGVTaW1wbGVUeXBlKCB0eXBlLCB2YWx1ZSwgZXZlbnQgKSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIGlmIChmaWVsZCAhPSBudWxsICYmIGZpZWxkLmlzRml4ZWQoKSkKLSAgICAgICAgewotLy8gVE9ETyAtIGZpeGVkIHZhbHVlIHNob3VsZCBoYXZlIGJlZW4gY29va2VkIGF0IGNvbXBpbGUgdGltZQotICAgICAgICAgICAgU3RyaW5nIGZpeGVkVmFsdWUgPQotICAgICAgICAgICAgICAgIFhtbFdoaXRlc3BhY2UuY29sbGFwc2UoCi0gICAgICAgICAgICAgICAgICAgIGZpZWxkLmdldERlZmF1bHRUZXh0KCksIHR5cGUuZ2V0V2hpdGVTcGFjZVJ1bGUoKSApOwotCi0gICAgICAgICAgICBpZiAoIXZhbGlkYXRlU2ltcGxlVHlwZSggdHlwZSwgZml4ZWRWYWx1ZSwgZXZlbnQgKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAgICAgWG1sT2JqZWN0IHZhbCA9IHR5cGUubmV3VmFsdWUoIHZhbHVlICk7Ci0gICAgICAgICAgICBYbWxPYmplY3QgZGVmID0gdHlwZS5uZXdWYWx1ZSggZml4ZWRWYWx1ZSApOwotCi0gICAgICAgICAgICBpZiAoIXZhbC52YWx1ZUVxdWFscyggZGVmICkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gQlVHQlVHIC0gbWFrZSB0aGlzIG1vcmUgdmVyYm9zZQotCi0gICAgICAgICAgICAgICAgZW1pdEVycm9yKAotICAgICAgICAgICAgICAgICAgICBldmVudCwKLSAgICAgICAgICAgICAgICAgICAgIlZhbHVlIG5vdCBlcXVhbCB0byBmaXhlZCB2YWx1ZS4gIiArIHZhbHVlICk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gdmFsaWRhdGVTaW1wbGVUeXBlICgKLSAgICAgICAgU2NoZW1hVHlwZSB0eXBlLCBTdHJpbmcgdmFsdWUsIEV2ZW50IGV2ZW50ICkKLSAgICB7Ci0gICAgICAgIGlmICghdHlwZS5pc1NpbXBsZVR5cGUoKSAmJgotICAgICAgICAgICAgICAgIHR5cGUuZ2V0Q29udGVudFR5cGUoKSAhPSBTY2hlbWFUeXBlLlNJTVBMRV9DT05URU5UKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgZmFsc2U7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbiggIk5vdCBhIHNpbXBsZSB0eXBlIiApOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHJldFN0YXRlID0gX2Vycm9yU3RhdGU7Ci0KLSAgICAgICAgc3dpdGNoICggdHlwZS5nZXRTaW1wbGVWYXJpZXR5KCkgKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgU2NoZW1hVHlwZS5BVE9NSUMgOiB2YWxpZGF0ZUF0b21pY1R5cGUoIHR5cGUsIHZhbHVlLCBldmVudCApO2JyZWFrOwotICAgICAgICBjYXNlIFNjaGVtYVR5cGUuVU5JT04gIDogdmFsaWRhdGVVbmlvblR5cGUoICB0eXBlLCB2YWx1ZSwgZXZlbnQgKTticmVhazsKLSAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkxJU1QgICA6IHZhbGlkYXRlTGlzdFR5cGUoICAgdHlwZSwgdmFsdWUsIGV2ZW50ICk7YnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdCA6IHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCAiVW5leHBlY3RlZCBzaW1wbGUgdmFyaWV0eSIgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXRTdGF0ZSA9PSBfZXJyb3JTdGF0ZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdmFsaWRhdGVBdG9taWNUeXBlICgKLSAgICAgICAgU2NoZW1hVHlwZSB0eXBlLCBTdHJpbmcgdmFsdWUsIEV2ZW50IGV2ZW50ICkKLSAgICB7Ci0gICAgICAgIC8vIE5vdyB3ZSBzaG91bGQgaGF2ZSBvbmx5IGFuIGF0b21pYyB0eXBlIHRvIHZhbGlkYXRlCi0KLSAgICAgICAgYXNzZXJ0IHR5cGUuZ2V0U2ltcGxlVmFyaWV0eSgpID09IFNjaGVtYVR5cGUuQVRPTUlDOwotCi0gICAgICAgIC8vIFJlY29yZCB0aGUgY3VycmVudCBlcnJvciBzdGF0ZSB0byBzZWUgaWYgYW55IG5ldyBlcnJvcnMgYXJlIG1hZGUKLSAgICAgICAgaW50IGVycm9yU3RhdGUgPSBfZXJyb3JTdGF0ZTsKLSAgICAgICAgX3ZjLl9ldmVudCA9IGV2ZW50OwotCi0gICAgICAgIHN3aXRjaCAoIHR5cGUuZ2V0UHJpbWl0aXZlVHlwZSgpLmdldEJ1aWx0aW5UeXBlQ29kZSgpICkKLSAgICAgICAgewotICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0FOWV9TSU1QTEUgOgotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBBbHdheXMgdmFsaWQhCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1NUUklORyA6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEphdmFTdHJpbmdFbnVtZXJhdGlvbkhvbGRlckV4LnZhbGlkYXRlTGV4aWNhbCggdmFsdWUsIHR5cGUsIF92YyApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19ERUNJTUFMIDoKLSAgICAgICAgewotICAgICAgICAgICAgSmF2YURlY2ltYWxIb2xkZXJFeC52YWxpZGF0ZUxleGljYWwoIHZhbHVlLCB0eXBlLCBfdmMgKTsKLQotICAgICAgICAgICAgaWYgKGVycm9yU3RhdGUgPT0gX2Vycm9yU3RhdGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSmF2YURlY2ltYWxIb2xkZXJFeC52YWxpZGF0ZVZhbHVlKAotICAgICAgICAgICAgICAgICAgICBuZXcgQmlnRGVjaW1hbCggdmFsdWUgKSwgdHlwZSwgX3ZjICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfQk9PTEVBTiA6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEphdmFCb29sZWFuSG9sZGVyRXgudmFsaWRhdGVMZXhpY2FsKCB2YWx1ZSwgdHlwZSwgX3ZjICk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0ZMT0FUIDoKLSAgICAgICAgewotICAgICAgICAgICAgZmxvYXQgZiA9Ci0gICAgICAgICAgICAgICAgSmF2YUZsb2F0SG9sZGVyRXgudmFsaWRhdGVMZXhpY2FsKCB2YWx1ZSwgdHlwZSwgX3ZjICk7Ci0KLSAgICAgICAgICAgIGlmIChlcnJvclN0YXRlID09IF9lcnJvclN0YXRlKQotICAgICAgICAgICAgICAgIEphdmFGbG9hdEhvbGRlckV4LnZhbGlkYXRlVmFsdWUoIGYsIHR5cGUsIF92YyApOwotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RPVUJMRSA6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRvdWJsZSBkID0KLSAgICAgICAgICAgICAgICBKYXZhRG91YmxlSG9sZGVyRXgudmFsaWRhdGVMZXhpY2FsKCB2YWx1ZSwgdHlwZSwgX3ZjICk7Ci0KLSAgICAgICAgICAgIGlmIChlcnJvclN0YXRlID09IF9lcnJvclN0YXRlKQotICAgICAgICAgICAgICAgIEphdmFEb3VibGVIb2xkZXJFeC52YWxpZGF0ZVZhbHVlKCBkLCB0eXBlLCBfdmMgKTsKLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19RTkFNRSA6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFFOYW1lIG4gPQotICAgICAgICAgICAgICAgIEphdmFRTmFtZUhvbGRlckV4LnZhbGlkYXRlTGV4aWNhbCgKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUsIHR5cGUsIF92YywgZXZlbnQgKTsKLQotICAgICAgICAgICAgaWYgKGVycm9yU3RhdGUgPT0gX2Vycm9yU3RhdGUpCi0gICAgICAgICAgICAgICAgSmF2YVFOYW1lSG9sZGVyRXgudmFsaWRhdGVWYWx1ZSggbiwgdHlwZSwgX3ZjICk7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfQU5ZX1VSSSA6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEphdmFVcmlIb2xkZXJFeC52YWxpZGF0ZUxleGljYWwoIHZhbHVlLCB0eXBlLCBfdmMgKTsKLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19EQVRFX1RJTUUgOgotICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1RJTUUgOgotICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RBVEUgOgotICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfWUVBUl9NT05USCA6Ci0gICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19ZRUFSIDoKLSAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX01PTlRIX0RBWSA6Ci0gICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19EQVkgOgotICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfTU9OVEggOgotICAgICAgICB7Ci0gICAgICAgICAgICBHRGF0ZSBkID0gWG1sRGF0ZUltcGwudmFsaWRhdGVMZXhpY2FsKCB2YWx1ZSwgdHlwZSwgX3ZjICk7Ci0KLSAgICAgICAgICAgIGlmIChkICE9IG51bGwpCi0gICAgICAgICAgICAgICAgWG1sRGF0ZUltcGwudmFsaWRhdGVWYWx1ZSggZCwgdHlwZSwgX3ZjICk7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfRFVSQVRJT04gOgotICAgICAgICB7Ci0gICAgICAgICAgICBHRHVyYXRpb24gZCA9IFhtbER1cmF0aW9uSW1wbC52YWxpZGF0ZUxleGljYWwoIHZhbHVlLCB0eXBlLCBfdmMgKTsKLQotICAgICAgICAgICAgaWYgKGQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBYbWxEdXJhdGlvbkltcGwudmFsaWRhdGVWYWx1ZSggZCwgdHlwZSwgX3ZjICk7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfQkFTRV82NF9CSU5BUlkgOgotICAgICAgICB7Ci0gICAgICAgICAgICBieXRlW10gdiA9Ci0gICAgICAgICAgICAgICAgSmF2YUJhc2U2NEhvbGRlckV4LnZhbGlkYXRlTGV4aWNhbCggdmFsdWUsIHR5cGUsIF92YyApOwotCi0gICAgICAgICAgICBpZiAodiAhPSBudWxsKQotICAgICAgICAgICAgICAgIEphdmFCYXNlNjRIb2xkZXJFeC52YWxpZGF0ZVZhbHVlKCB2LCB0eXBlLCBfdmMgKTsKLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19IRVhfQklOQVJZIDoKLSAgICAgICAgewotICAgICAgICAgICAgYnl0ZVtdIHYgPQotICAgICAgICAgICAgICAgIEphdmFIZXhCaW5hcnlIb2xkZXJFeC52YWxpZGF0ZUxleGljYWwoIHZhbHVlLCB0eXBlLCBfdmMgKTsKLQotICAgICAgICAgICAgaWYgKHYgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBKYXZhSGV4QmluYXJ5SG9sZGVyRXgudmFsaWRhdGVWYWx1ZSggdiwgdHlwZSwgX3ZjICk7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfTk9UQVRJT04gOgotICAgICAgICAgICAgLy8gVW5pbXBsZW1lbnRlZC4gCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBkZWZhdWx0IDoKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCAiVW5leHBlY3RlZCBwcmltaXRpdmUgdHlwZSBjb2RlIiApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlTGlzdFR5cGUgKAotICAgICAgICBTY2hlbWFUeXBlIHR5cGUsIFN0cmluZyB2YWx1ZSwgRXZlbnQgZXZlbnQgKQotICAgIHsKLSAgICAgICAgaW50IGVycm9yU3RhdGUgPSBfZXJyb3JTdGF0ZTsKLQotICAgICAgICBpZiAoIXR5cGUubWF0Y2hQYXR0ZXJuRmFjZXQoIHZhbHVlICkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVtaXRFcnJvcigKLSAgICAgICAgICAgICAgICBldmVudCwKLSAgICAgICAgICAgICAgICAiTGlzdCAnIiArIHZhbHVlICsgIicgZG9lcyBub3QgbWF0Y2ggcGF0dGVybiBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHR5cGUpICk7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmdbXSBpdGVtcyA9IFhtbExpc3RJbXBsLnNwbGl0X2xpc3QodmFsdWUpOwotCi0gICAgICAgIAotICAgICAgICBpbnQgaTsKLSAgICAgICAgWG1sT2JqZWN0IG87Ci0KLSAgICAgICAgaWYgKChvID0gdHlwZS5nZXRGYWNldCggU2NoZW1hVHlwZS5GQUNFVF9MRU5HVEggKSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKChpID0gKChTaW1wbGVWYWx1ZSlvKS5nZXRJbnRWYWx1ZSgpKSAhPSBpdGVtcy5sZW5ndGgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZW1pdEVycm9yKAotICAgICAgICAgICAgICAgICAgICBldmVudCwKLSAgICAgICAgICAgICAgICAgICAgIkxpc3QgKCIgKyB2YWx1ZSArICIpIGRvZXMgbm90IGhhdmUgIiArIGkgKwotICAgICAgICAgICAgICAgICAgICAgICAgIiBpdGVtcyBwZXIgbGVuZ3RoIGZhY2V0IGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUodHlwZSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKChvID0gdHlwZS5nZXRGYWNldCggU2NoZW1hVHlwZS5GQUNFVF9NSU5fTEVOR1RIICkpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICgoaSA9ICgoU2ltcGxlVmFsdWUpbykuZ2V0SW50VmFsdWUoKSkgPiBpdGVtcy5sZW5ndGgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZW1pdEVycm9yKAotICAgICAgICAgICAgICAgICAgICBldmVudCwKLSAgICAgICAgICAgICAgICAgICAgIkxpc3QgKCIgKyB2YWx1ZSArICIpIGhhcyBvbmx5ICIgKyBpdGVtcy5sZW5ndGggKwotICAgICAgICAgICAgICAgICAgICAgICAgIiBpdGVtcywgZmV3ZXIgdGhhbiBtaW4gbGVuZ3RoIGZhY2V0ICgiICsgaSArICIpIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUodHlwZSkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKChvID0gdHlwZS5nZXRGYWNldCggU2NoZW1hVHlwZS5GQUNFVF9NQVhfTEVOR1RIICkpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICgoaSA9ICgoU2ltcGxlVmFsdWUpbykuZ2V0SW50VmFsdWUoKSkgPCBpdGVtcy5sZW5ndGgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZW1pdEVycm9yKAotICAgICAgICAgICAgICAgICAgICBldmVudCwKLSAgICAgICAgICAgICAgICAgICAgIkxpc3QgKCIgKyB2YWx1ZSArICIpIGhhcyAiICsgaXRlbXMubGVuZ3RoICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIgaXRlbXMsIG1vcmUgdGhhbiBtYXggbGVuZ3RoIGZhY2V0ICgiICsgaSArICIpIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUodHlwZSkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFNjaGVtYVR5cGUgaXRlbVR5cGUgPSB0eXBlLmdldExpc3RJdGVtVHlwZSgpOwotCi0gICAgICAgIGZvciAoIGkgPSAwIDsgaSA8IGl0ZW1zLmxlbmd0aCA7IGkrKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbGlkYXRlU2ltcGxlVHlwZSgKLSAgICAgICAgICAgICAgICBpdGVtVHlwZSwgaXRlbXNbaV0sIGV2ZW50ICk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiBubyBlcnJvcnMgdXAgdG8gdGhpcyBwb2ludCwgdGhlbiBJIGNhbiBjcmVhdGUgYW4KLSAgICAgICAgLy8gWG1sTGlzdCBmcm9tIHRoaXMgdmFsdWUgYW5kIGNhbXBhcmUgaXQgYWdhaW4gZW51bXMuCi0KLSAgICAgICAgaWYgKGVycm9yU3RhdGUgPT0gX2Vycm9yU3RhdGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0eXBlLmdldEVudW1lcmF0aW9uVmFsdWVzKCkgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBMaXN0cyB3aGljaCBjb250YWluIFFOYW1lcyB3aWxsIG5lZWQgYSByZXNvbHZlcgotCi0gICAgICAgICAgICAgICAgTmFtZXNwYWNlQ29udGV4dC5wdXNoKAotICAgICAgICAgICAgICAgICAgICBuZXcgTmFtZXNwYWNlQ29udGV4dCggZXZlbnQgKSApOwotCi0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBYbWxPYmplY3QgbGlzdFZhbHVlID0gKCAoU2NoZW1hVHlwZUltcGwpIHR5cGUpLm5ld1ZhbGlkYXRpbmdWYWx1ZSggdmFsdWUgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZW1pdEVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAiTGlzdCB2YWx1ZSAoIiArIHZhbHVlICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKSBpcyBub3QgYSB2YWxpZCBlbnVtZXJhdGlvbiB2YWx1ZSBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHR5cGUpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZmluYWxseQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgTmFtZXNwYWNlQ29udGV4dC5wb3AoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdmFsaWRhdGVVbmlvblR5cGUgKAotICAgICAgICBTY2hlbWFUeXBlIHR5cGUsIFN0cmluZyB2YWx1ZSwgRXZlbnQgZXZlbnQgKQotICAgIHsKLSAgICAgICAgLy8gVE9ETyAtIGlmIHhzaTp0eXBlIGlzIHNwZWNpZmllZCBvbiBhIHVuaW9uLCBpdCBzZWxlY3RzCi0gICAgICAgIC8vIHRoYXQgdW5pb24gbWVtYmVyIHR5cGUKLQotICAgICAgICBpZiAoIXR5cGUubWF0Y2hQYXR0ZXJuRmFjZXQoIHZhbHVlICkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVtaXRFcnJvcigKLSAgICAgICAgICAgICAgICBldmVudCwKLSAgICAgICAgICAgICAgICAiVW5pb24gJyIgKyB2YWx1ZSArICInIGRvZXMgbm90IG1hdGNoIHBhdHRlcm4gZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZSh0eXBlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgY3VycmVudFdzciA9IFNjaGVtYVR5cGUuV1NfUFJFU0VSVkU7Ci0gICAgICAgIFN0cmluZyBjdXJyZW50VmFsdWUgPSB2YWx1ZTsKLQotICAgICAgICBTY2hlbWFUeXBlW10gdHlwZXMgPSB0eXBlLmdldFVuaW9uTWVtYmVyVHlwZXMoKTsKLQotICAgICAgICBpbnQgb3JpZ2luYWxTdGF0ZSA9IF9lcnJvclN0YXRlOwotCi0gICAgICAgIGludCBpOwotICAgICAgICBmb3IgKCBpID0gMCA7IGkgPCB0eXBlcy5sZW5ndGggOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbWVtYmVyV3NyID0gdHlwZXNbIGkgXS5nZXRXaGl0ZVNwYWNlUnVsZSgpOwotCi0gICAgICAgICAgICBpZiAobWVtYmVyV3NyID09IFNjaGVtYVR5cGUuV1NfVU5TUEVDSUZJRUQpCi0gICAgICAgICAgICAgICAgbWVtYmVyV3NyID0gU2NoZW1hVHlwZS5XU19QUkVTRVJWRTsKLQotICAgICAgICAgICAgaWYgKG1lbWJlcldzciAhPSBjdXJyZW50V3NyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGN1cnJlbnRXc3IgPSBtZW1iZXJXc3I7Ci0gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlID0gWG1sV2hpdGVzcGFjZS5jb2xsYXBzZSggdmFsdWUsIGN1cnJlbnRXc3IgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaW50IG9yaWdpbmFsRXJyb3JTdGF0ZSA9IF9lcnJvclN0YXRlOwotCi0gICAgICAgICAgICBfc3VzcGVuZEVycm9ycysrOwotCi0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YWxpZGF0ZVNpbXBsZVR5cGUoIHR5cGVzWyBpIF0sIGN1cnJlbnRWYWx1ZSwgZXZlbnQgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbmFsbHkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfc3VzcGVuZEVycm9ycy0tOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAob3JpZ2luYWxFcnJvclN0YXRlID09IF9lcnJvclN0YXRlKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgX2Vycm9yU3RhdGUgPSBvcmlnaW5hbFN0YXRlOwotCi0gICAgICAgIGlmIChpID49IHR5cGVzLmxlbmd0aCkKLSAgICAgICAgewotICAgICAgICAgICAgZW1pdEVycm9yKAotICAgICAgICAgICAgICAgIGV2ZW50LAotICAgICAgICAgICAgICAgICJVbmlvbiAnIiArIHZhbHVlICsgIicgZG9lcyBub3QgbWF0Y2ggYW55IG1lbWJlcnMgb2YgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHR5cGUpICk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxPYmplY3RbXSB1bmlvbkVudW12YWxzID0gdHlwZS5nZXRFbnVtZXJhdGlvblZhbHVlcygpOwotCi0gICAgICAgICAgICBpZiAodW5pb25FbnVtdmFscyAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIFVuaW9ucyB3aGljaCBjb250YWluIFFOYW1lcyB3aWxsIG5lZWQgYSByZXNvbHZlcgotCi0gICAgICAgICAgICAgICAgTmFtZXNwYWNlQ29udGV4dC5wdXNoKCBuZXcgTmFtZXNwYWNlQ29udGV4dCggZXZlbnQgKSApOwotCi0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBYbWxPYmplY3QgdW5pb25WYWx1ZSA9IHR5cGUubmV3VmFsdWUoIHZhbHVlICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICggaSA9IDAgOyBpIDwgdW5pb25FbnVtdmFscy5sZW5ndGggOyBpKysgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pb25WYWx1ZS52YWx1ZUVxdWFscyggdW5pb25FbnVtdmFsc1sgaSBdICkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSB1bmlvbkVudW12YWxzLmxlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZW1pdEVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmlvbiAnIiArIHZhbHVlICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIicgaXMgbm90IGEgdmFsaWQgZW51bWVyYXRpb24gdmFsdWUgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZSh0eXBlKSApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhdGNoIChYbWxWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGFjdHVhbGx5LCB0aGUgY3VycmVudCB1bmlvbiBjb2RlIGFsd2F5cyBlbmRzIHVwIGhlcmUgd2hlbiBpbnZhbGlkCi0gICAgICAgICAgICAgICAgICAgIGVtaXRFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgIlVuaW9uICciICsgdmFsdWUgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICInIGlzIG5vdCBhIHZhbGlkIGVudW1lcmF0aW9uIHZhbHVlIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUodHlwZSkgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZmluYWxseQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgTmFtZXNwYWNlQ29udGV4dC5wb3AoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLQotICAgIC8vCi0gICAgLy8gTWVtYmVycyBvZiB0aGUgdmFsaWRhdG9yIGNsYXNzCi0gICAgLy8KLQotICAgIHByaXZhdGUgYm9vbGVhbiAgICAgICAgICAgIF9pbnZhbGlkOwotICAgIHByaXZhdGUgU2NoZW1hVHlwZSAgICAgICAgIF9yb290VHlwZTsKLSAgICBwcml2YXRlIFNjaGVtYUZpZWxkICAgICAgICBfcm9vdEZpZWxkOwotICAgIHByaXZhdGUgU2NoZW1hVHlwZUxvYWRlciAgIF9nbG9iYWxUeXBlczsKLSAgICBwcml2YXRlIENoYXJzICAgICAgICAgICAgICBfY2hhcnM7Ci0gICAgcHJpdmF0ZSBTdGF0ZSAgICAgICAgICAgICAgX3N0YXRlU3RhY2s7Ci0gICAgcHJpdmF0ZSBpbnQgICAgICAgICAgICAgICAgX2Vycm9yU3RhdGU7Ci0gICAgcHJpdmF0ZSBDb2xsZWN0aW9uICAgICAgICAgX2Vycm9yTGlzdGVuZXI7Ci0gICAgcHJpdmF0ZSBWYWxpZGF0b3JWQyAgICAgICAgX3ZjOwotICAgIHByaXZhdGUgaW50ICAgICAgICAgICAgICAgIF9zdXNwZW5kRXJyb3JzOwotICAgIHByaXZhdGUgSWRlbnRpdHlDb25zdHJhaW50IF9jb25zdHJhaW50RW5naW5lOwotICAgIHByaXZhdGUgaW50ICAgICAgICAgICAgICAgIF9lYXRDb250ZW50OwotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YUJhc2U2NEhvbGRlci5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YUJhc2U2NEhvbGRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDFlOTYyLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL0phdmFCYXNlNjRIb2xkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hLkJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnV0aWwuQmFzZTY0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQmFzZTY0QmluYXJ5OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlZhbGlkYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uUU5hbWVIZWxwZXI7Ci0KLWltcG9ydCBqYXZhLnNlY3VyaXR5Lk1lc3NhZ2VEaWdlc3Q7Ci1pbXBvcnQgamF2YS5zZWN1cml0eS5Ob1N1Y2hBbGdvcml0aG1FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBKYXZhQmFzZTY0SG9sZGVyIGV4dGVuZHMgWG1sT2JqZWN0QmFzZQotewotICAgIHB1YmxpYyBTY2hlbWFUeXBlIHNjaGVtYVR5cGUoKQotICAgICAgICB7IHJldHVybiBCdWlsdGluU2NoZW1hVHlwZVN5c3RlbS5TVF9CQVNFXzY0X0JJTkFSWTsgfQotCi0gICAgcHJvdGVjdGVkIGJ5dGVbXSBfdmFsdWU7Ci0KLSAgICAvLyBTSU1QTEUgVkFMVUUgQUNDRVNTT1JTIEJFTE9XIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8vIGdldHMgcmF3IHRleHQgdmFsdWUKLSAgICBwcm90ZWN0ZWQgU3RyaW5nIGNvbXB1dGVfdGV4dChOYW1lc3BhY2VNYW5hZ2VyIG5zbSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RyaW5nKEJhc2U2NC5lbmNvZGUoX3ZhbHVlKSk7Ci0gICAgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldF90ZXh0KFN0cmluZyBzKQotICAgIHsKLSAgICAgICAgX2hhc2hjYWNoZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKF92YWxpZGF0ZU9uU2V0KCkpCi0gICAgICAgICAgICBfdmFsdWUgPSB2YWxpZGF0ZUxleGljYWwocywgc2NoZW1hVHlwZSgpLCBfdm9vclZjKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgX3ZhbHVlID0gbGV4KHMsIF92b29yVmMpOwotICAgIH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfbmlsKCkKLSAgICB7Ci0gICAgICAgIF9oYXNoY2FjaGVkID0gZmFsc2U7Ci0gICAgICAgIF92YWx1ZSA9IG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBieXRlW10gbGV4KFN0cmluZyB2LCBWYWxpZGF0aW9uQ29udGV4dCBjKQotICAgIHsKLSAgICAgICAgYnl0ZVtdIHZCeXRlcyA9IG51bGw7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICB2Qnl0ZXMgPSB2LmdldEJ5dGVzKCJVVEYtOCIpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gdWVlKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBzaG91bGQgbmV2ZXIgaGFwcGVuIC0gVVRGLTggaXMgYWx3YXlzIHN1cHBvcnRlZAotICAgICAgICB9Ci0gICAgICAgIGZpbmFsIGJ5dGVbXSBieXRlcyA9IEJhc2U2NC5kZWNvZGUodkJ5dGVzKTsKLQotICAgICAgICBpZiAoYnl0ZXMgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gVE9ETyAtIGdldCBhIGRlY2VudCBlcnJvciB3aXRoIGxpbmUgbnVtYmVycyBhbmQgc3VjaCBoZXJlCi0gICAgICAgICAgICBjLmludmFsaWQoIkJhc2UgNjQgZW5jb2RlZCBkYXRhIG5vdCBlbmNvZGVkIHByb3Blcmx5Iik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gYnl0ZXM7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBieXRlW10gdmFsaWRhdGVMZXhpY2FsKFN0cmluZyB2LCBTY2hlbWFUeXBlIHNUeXBlLCBWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0KQotICAgIHsKLSAgICAgICAgZmluYWwgYnl0ZVtdIGJ5dGVzID0gbGV4KHYsIGNvbnRleHQpOwotICAgICAgICBpZiAoYnl0ZXMgPT0gbnVsbCkgcmV0dXJuIG51bGw7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXNUeXBlLm1hdGNoUGF0dGVybkZhY2V0KHYpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LmludmFsaWQoICJCYXNlIDY0IGVuY29kZWQgZGF0YSBkb2VzIG5vdCBtYXRjaCBwYXR0ZXJuIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUoc1R5cGUpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGJ5dGVzOwotICAgIH0KLQotICAgIHB1YmxpYyBieXRlW10gYnl0ZUFycmF5VmFsdWUoKQotICAgIHsKLSAgICAgICAgY2hlY2tfZGF0ZWQoKTsKLSAgICAgICAgaWYgKF92YWx1ZSA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgYnl0ZVtdIHJlc3VsdCA9IG5ldyBieXRlW192YWx1ZS5sZW5ndGhdOwotICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KF92YWx1ZSwgMCwgcmVzdWx0LCAwLCBfdmFsdWUubGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvLyBzZXR0ZXJzCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X0J5dGVBcnJheShieXRlW10gYmEpCi0gICAgewotICAgICAgICBfaGFzaGNhY2hlZCA9IGZhbHNlOwotICAgICAgICBfdmFsdWUgPSBuZXcgYnl0ZVtiYS5sZW5ndGhdOwotICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGJhLCAwLCBfdmFsdWUsIDAsIGJhLmxlbmd0aCk7Ci0gICAgfQotCi0gICAgLy8gY29tcGFyYXRvcnMKLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBlcXVhbF90byhYbWxPYmplY3QgaSkKLSAgICB7Ci0gICAgICAgIGJ5dGVbXSBpdmFsID0gKChYbWxCYXNlNjRCaW5hcnkpIGkpLmdldEJ5dGVBcnJheVZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBBcnJheXMuZXF1YWxzKF92YWx1ZSwgaXZhbCk7Ci0gICAgfQotCi0gICAgLy9iZWNhdXNlIGNvbXB1dGluZyBoYXNoY29kZSBpcyBleHBlbnNpdmUgd2UnbGwgY2FjaGUgaXQKLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBfaGFzaGNhY2hlZCA9IGZhbHNlOwotICAgIHByb3RlY3RlZCBpbnQgaGFzaGNvZGUgPSAwOwotICAgIHByb3RlY3RlZCBzdGF0aWMgTWVzc2FnZURpZ2VzdCBtZDU7Ci0gICAgc3RhdGljCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgbWQ1ID0gTWVzc2FnZURpZ2VzdC5nZXRJbnN0YW5jZSgiTUQ1Iik7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2goIE5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbiBlICkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQ2Fubm90IGZpbmQgTUQ1IGhhc2ggQWxnb3JpdGhtIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgaW50IHZhbHVlX2hhc2hfY29kZSgpCi0gICAgewotICAgICAgICBpZiggX2hhc2hjYWNoZWQgKQotICAgICAgICAgICAgcmV0dXJuIGhhc2hjb2RlOwotCi0gICAgICAgIF9oYXNoY2FjaGVkID0gdHJ1ZTsKLQotICAgICAgICBpZiggX3ZhbHVlID09IG51bGwgKQotICAgICAgICAgICAgcmV0dXJuIGhhc2hjb2RlID0gMDsKLQotICAgICAgICBieXRlW10gcmVzID0gbWQ1LmRpZ2VzdChfdmFsdWUpOwotICAgICAgICByZXR1cm4gaGFzaGNvZGUgPSByZXNbMF08PDI0ICsgcmVzWzFdPDwxNiArIHJlc1syXTw8OCArIHJlc1szXTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhQmFzZTY0SG9sZGVyRXguamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL0phdmFCYXNlNjRIb2xkZXJFeC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjcwNzE0Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL0phdmFCYXNlNjRIb2xkZXJFeC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlZhbGlkYXRpb25Db250ZXh0OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSmF2YUJhc2U2NEhvbGRlckV4IGV4dGVuZHMgSmF2YUJhc2U2NEhvbGRlcgotewotICAgIHByaXZhdGUgU2NoZW1hVHlwZSBfc2NoZW1hVHlwZTsKLQotICAgIHB1YmxpYyBTY2hlbWFUeXBlIHNjaGVtYVR5cGUoKQotICAgICAgICB7IHJldHVybiBfc2NoZW1hVHlwZTsgfQotCi0gICAgcHVibGljIEphdmFCYXNlNjRIb2xkZXJFeChTY2hlbWFUeXBlIHR5cGUsIGJvb2xlYW4gY29tcGxleCkKLSAgICAgICAgeyBfc2NoZW1hVHlwZSA9IHR5cGU7IGluaXRDb21wbGV4VHlwZShjb21wbGV4LCBmYWxzZSk7IH0KLQotICAgIHByb3RlY3RlZCBpbnQgZ2V0X3dzY2Fub25fcnVsZSgpCi0gICAgewotICAgICAgICByZXR1cm4gc2NoZW1hVHlwZSgpLmdldFdoaXRlU3BhY2VSdWxlKCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X3RleHQoU3RyaW5nIHMpCi0gICAgewotICAgICAgICBmaW5hbCBieXRlW10gdjsKLQotICAgICAgICBpZiAoX3ZhbGlkYXRlT25TZXQoKSkKLSAgICAgICAgICAgIHYgPSB2YWxpZGF0ZUxleGljYWwocywgc2NoZW1hVHlwZSgpLCBfdm9vclZjKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdiA9IGxleChzLCBfdm9vclZjKTsKLQotICAgICAgICBpZiAodiAhPSBudWxsICYmIF92YWxpZGF0ZU9uU2V0KCkpCi0gICAgICAgICAgICB2YWxpZGF0ZVZhbHVlKHYsIHNjaGVtYVR5cGUoKSwgWG1sT2JqZWN0QmFzZS5fdm9vclZjKTsKLSAgICAgICAgCi0gICAgICAgIHN1cGVyLnNldF9CeXRlQXJyYXkodik7Ci0gICAgfQotCi0gICAgLy8gc2V0dGVycwotICAgIHByb3RlY3RlZCB2b2lkIHNldF9CeXRlQXJyYXkoYnl0ZVtdIHYpCi0gICAgewotICAgICAgICBpZiAoX3ZhbGlkYXRlT25TZXQoKSkKLSAgICAgICAgICAgIHZhbGlkYXRlVmFsdWUodiwgc2NoZW1hVHlwZSgpLCBfdm9vclZjKTsKLSAgICAgICAgCi0gICAgICAgIHN1cGVyLnNldF9CeXRlQXJyYXkodik7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHZhbGlkYXRlVmFsdWUoYnl0ZVtdIHYsIFNjaGVtYVR5cGUgc1R5cGUsIFZhbGlkYXRpb25Db250ZXh0IGNvbnRleHQpCi0gICAgewotICAgICAgICBpbnQgaTsKLSAgICAgICAgWG1sT2JqZWN0IG87Ci0KLSAgICAgICAgaWYgKChvID0gc1R5cGUuZ2V0RmFjZXQoU2NoZW1hVHlwZS5GQUNFVF9MRU5HVEgpKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoKGkgPSAoKFhtbE9iamVjdEJhc2UpbykuYmlnSW50ZWdlclZhbHVlKCkuaW50VmFsdWUoKSkgIT0gdi5sZW5ndGgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKAotICAgICAgICAgICAgICAgICAgICAiQmFzZSA2NCBlbmNvZGVkIGRhdGEgZG9lcyBub3QgaGF2ZSAiICsgaSArCi0gICAgICAgICAgICAgICAgICAgICAgICAiIGJ5dGVzIHBlciBsZW5ndGggZmFjZXQiICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKG8gPSBzVHlwZS5nZXRGYWNldCggU2NoZW1hVHlwZS5GQUNFVF9NSU5fTEVOR1RIICkpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICgoaSA9ICgoWG1sT2JqZWN0QmFzZSlvKS5iaWdJbnRlZ2VyVmFsdWUoKS5pbnRWYWx1ZSgpKSA+IHYubGVuZ3RoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgKLSAgICAgICAgICAgICAgICAgICAgIkJhc2UgNjQgZW5jb2RlZCBkYXRhIGhhcyBvbmx5ICIgKyB2Lmxlbmd0aCArCi0gICAgICAgICAgICAgICAgICAgICAgICAiIGJ5dGVzLCBmZXdlciB0aGFuIG1pbiBsZW5ndGggZmFjZXQiICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKG8gPSBzVHlwZS5nZXRGYWNldCggU2NoZW1hVHlwZS5GQUNFVF9NQVhfTEVOR1RIICkpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICgoaSA9ICgoWG1sT2JqZWN0QmFzZSlvKS5iaWdJbnRlZ2VyVmFsdWUoKS5pbnRWYWx1ZSgpKSA8IHYubGVuZ3RoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgKLSAgICAgICAgICAgICAgICAgICAgIkJhc2UgNjQgZW5jb2RlZCBkYXRhIGhhcyAiICsgdi5sZW5ndGggKwotICAgICAgICAgICAgICAgICAgICAgICAgIiBieXRlcywgbW9yZSB0aGFuIG1heCBsZW5ndGggZmFjZXQiICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFhtbE9iamVjdFtdIHZhbHMgPSBzVHlwZS5nZXRFbnVtZXJhdGlvblZhbHVlcygpOwotCi0gICAgICAgIGlmICh2YWxzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVudW1Mb29wOiBmb3IgKCBpID0gMCA7IGkgPCB2YWxzLmxlbmd0aCA7IGkrKyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnl0ZVtdIGVudW1CeXRlcyA9ICgoWG1sT2JqZWN0QmFzZSl2YWxzW2ldKS5ieXRlQXJyYXlWYWx1ZSgpOwotCi0gICAgICAgICAgICAgICAgaWYgKGVudW1CeXRlcy5sZW5ndGggIT0gdi5sZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgZm9yICggaW50IGogPSAwIDsgaiA8IGVudW1CeXRlcy5sZW5ndGggOyBqKysgKQotICAgICAgICAgICAgICAgICAgICBpZiAoZW51bUJ5dGVzW2pdICE9IHZbal0pCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBlbnVtTG9vcDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGkgPj0gdmFscy5sZW5ndGgpCi0gICAgICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKCJCYXNlIDY0IGVuY29kZWQgZGF0YSBkb2VzIG5vdCBtYXRjaCBhbnkgb2YgdGhlIGVudW1lcmF0aW9uIHZhbHVlcyIpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlX3NpbXBsZXZhbChTdHJpbmcgbGV4aWNhbCwgVmFsaWRhdGlvbkNvbnRleHQgY3R4KQotICAgIHsKLSAgICAgICAgdmFsaWRhdGVMZXhpY2FsKGxleGljYWwsIHNjaGVtYVR5cGUoKSwgY3R4KTsKLSAgICAgICAgdmFsaWRhdGVWYWx1ZShieXRlQXJyYXlWYWx1ZSgpLCBzY2hlbWFUeXBlKCksIGN0eCk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhQm9vbGVhbkhvbGRlci5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YUJvb2xlYW5Ib2xkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNhNzFiOS4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhQm9vbGVhbkhvbGRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zY2hlbWEuQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW07Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQm9vbGVhbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlZhbGlkYXRpb25Db250ZXh0OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSmF2YUJvb2xlYW5Ib2xkZXIgZXh0ZW5kcyBYbWxPYmplY3RCYXNlCi17Ci0gICAgcHVibGljIFNjaGVtYVR5cGUgc2NoZW1hVHlwZSgpCi0gICAgICAgIHsgcmV0dXJuIEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLlNUX0JPT0xFQU47IH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiBfdmFsdWU7Ci0KLSAgICAvLyBTSU1QTEUgVkFMVUUgQUNDRVNTT1JTIEJFTE9XIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8vIGdldHMgcmF3IHRleHQgdmFsdWUKLSAgICBwcm90ZWN0ZWQgU3RyaW5nIGNvbXB1dGVfdGV4dChOYW1lc3BhY2VNYW5hZ2VyIG5zbSkgeyByZXR1cm4gX3ZhbHVlID8gInRydWUiIDogImZhbHNlIjsgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldF90ZXh0KFN0cmluZyBzKQotICAgIHsKLSAgICAgICAgX3ZhbHVlID0gdmFsaWRhdGVMZXhpY2FsKHMsIF92b29yVmMpOwotICAgIH0KLSAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gdmFsaWRhdGVMZXhpY2FsKFN0cmluZyB2LCBWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0KQotICAgIHsKLSAgICAgICAgaWYgKHYuZXF1YWxzKCJ0cnVlIikgfHwgdi5lcXVhbHMoIjEiKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKHYuZXF1YWxzKCJmYWxzZSIpIHx8IHYuZXF1YWxzKCIwIikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgY29udGV4dC5pbnZhbGlkKCJJbnZhbGlkIHZhbHVlIGZvciBib29sZWFuOiAiICsgdik7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfbmlsKCkKLSAgICB7Ci0gICAgICAgIF92YWx1ZSA9IGZhbHNlOwotICAgIH0KLSAgICAvLyBudW1lcmljczogZnJhY3Rpb25hbAotICAgIHB1YmxpYyBib29sZWFuIGJvb2xlYW5WYWx1ZSgpIHsgY2hlY2tfZGF0ZWQoKTsgcmV0dXJuIF92YWx1ZTsgfQotCi0gICAgLy8gc2V0dGVycwotICAgIHByb3RlY3RlZCB2b2lkIHNldF9ib29sZWFuKGJvb2xlYW4gZikKLSAgICB7Ci0gICAgICAgIF92YWx1ZSA9IGY7Ci0gICAgfQotCi0gICAgLy8gY29tcGFyYXRvcnMKLSAgICBwcm90ZWN0ZWQgaW50IGNvbXBhcmVfdG8oWG1sT2JqZWN0IGkpCi0gICAgewotICAgICAgICAvLyBubyBvcmRlcmluZyBkZWZpbmVkIGJldHdlZW4gdHJ1ZSBhbmQgZmFsc2UKLSAgICAgICAgcmV0dXJuIF92YWx1ZSA9PSAoKFhtbEJvb2xlYW4paSkuZ2V0Qm9vbGVhblZhbHVlKCkgPyAwIDogMjsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBlcXVhbF90byhYbWxPYmplY3QgaSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfdmFsdWUgPT0gKChYbWxCb29sZWFuKWkpLmdldEJvb2xlYW5WYWx1ZSgpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBpbnQgdmFsdWVfaGFzaF9jb2RlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfdmFsdWUgPyA5NTczNzk1NTQgOiA2NzYzMzU5NzU7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YUJvb2xlYW5Ib2xkZXJFeC5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YUJvb2xlYW5Ib2xkZXJFeC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmY2Y2RiLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL0phdmFCb29sZWFuSG9sZGVyRXguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlZhbGlkYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uUU5hbWVIZWxwZXI7Ci0KLQotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSmF2YUJvb2xlYW5Ib2xkZXJFeCBleHRlbmRzIEphdmFCb29sZWFuSG9sZGVyCi17Ci0gICAgcHJpdmF0ZSBTY2hlbWFUeXBlIF9zY2hlbWFUeXBlOwotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgc2NoZW1hVHlwZSgpCi0gICAgICAgIHsgcmV0dXJuIF9zY2hlbWFUeXBlOyB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgdmFsaWRhdGVMZXhpY2FsKFN0cmluZyB2LCBTY2hlbWFUeXBlIHNUeXBlLCBWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0KQotICAgIHsKLSAgICAgICAgSmF2YUJvb2xlYW5Ib2xkZXIudmFsaWRhdGVMZXhpY2FsKHYsIGNvbnRleHQpOwotICAgICAgICB2YWxpZGF0ZVBhdHRlcm4odiwgc1R5cGUsIGNvbnRleHQpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgdmFsaWRhdGVQYXR0ZXJuKFN0cmluZyB2LCBTY2hlbWFUeXBlIHNUeXBlLCBWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0KQotICAgIHsKLSAgICAgICAgLy8gdGhlIG9ubHkgbmV3IGZhY2V0IHRoYXQgY2FuIGFwcGx5IHRvIGJvb2xlYW5zIGlzIHBhdHRlcm4hCi0gICAgICAgIGlmICghc1R5cGUubWF0Y2hQYXR0ZXJuRmFjZXQodikpCi0gICAgICAgICAgICBjb250ZXh0LmludmFsaWQoIkJvb2xlYW4gKCIgKyB2ICsgIikgZG9lcyBub3QgbWF0Y2ggcGF0dGVybiBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNUeXBlKSk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBKYXZhQm9vbGVhbkhvbGRlckV4KFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IF9zY2hlbWFUeXBlID0gdHlwZTsgaW5pdENvbXBsZXhUeXBlKGNvbXBsZXgsIGZhbHNlKTsgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X3RleHQoU3RyaW5nIHMpCi0gICAgewotICAgICAgICBpZiAoX3ZhbGlkYXRlT25TZXQoKSkKLSAgICAgICAgICAgIHZhbGlkYXRlUGF0dGVybihzLCBfc2NoZW1hVHlwZSwgX3Zvb3JWYyk7Ci0gICAgICAgIHN1cGVyLnNldF90ZXh0KHMpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlX3NpbXBsZXZhbChTdHJpbmcgbGV4aWNhbCwgVmFsaWRhdGlvbkNvbnRleHQgY3R4KQotICAgIHsKLSAgICAgICAgdmFsaWRhdGVMZXhpY2FsKGxleGljYWwsIHNjaGVtYVR5cGUoKSwgY3R4KTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhRGVjaW1hbEhvbGRlci5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YURlY2ltYWxIb2xkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJjMjE3ZC4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhRGVjaW1hbEhvbGRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEzICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uVmFsaWRhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnNjaGVtYS5CdWlsdGluU2NoZW1hVHlwZVN5c3RlbTsKLQotcHVibGljIGNsYXNzIEphdmFEZWNpbWFsSG9sZGVyIGV4dGVuZHMgWG1sT2JqZWN0QmFzZQotewotICAgIHB1YmxpYyBTY2hlbWFUeXBlIHNjaGVtYVR5cGUoKQotICAgICAgICB7IHJldHVybiBCdWlsdGluU2NoZW1hVHlwZVN5c3RlbS5TVF9ERUNJTUFMOyB9Ci0KLSAgICBwcml2YXRlIEJpZ0RlY2ltYWwgX3ZhbHVlOwotCi0gICAgLy8gU0lNUExFIFZBTFVFIEFDQ0VTU09SUyBCRUxPVyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvLyBzZXRzL2dldHMgcmF3IHRleHQgdmFsdWUKLSAgICBwcm90ZWN0ZWQgU3RyaW5nIGNvbXB1dGVfdGV4dChOYW1lc3BhY2VNYW5hZ2VyIG5zbSkgeyByZXR1cm4gX3ZhbHVlLnRvU3RyaW5nKCk7IH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfdGV4dChTdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIGlmIChfdmFsaWRhdGVPblNldCgpKQotICAgICAgICAgICAgdmFsaWRhdGVMZXhpY2FsKHMsIF92b29yVmMpOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBzZXRfQmlnRGVjaW1hbChuZXcgQmlnRGVjaW1hbChzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBfdm9vclZjLmludmFsaWQoIkludmFsaWQgRGVjaW1hbCIpOwotICAgICAgICB9Ci0gICAgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldF9uaWwoKQotICAgIHsKLSAgICAgICAgX3ZhbHVlID0gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQZXJmb3JtcyBsZXhpY2FsIHZhbGlkYXRpb24gb25seS4KLSAgICAgKi8KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB2YWxpZGF0ZUxleGljYWwoU3RyaW5nIHYsIFZhbGlkYXRpb25Db250ZXh0IGNvbnRleHQpCi0gICAgewotICAgICAgICAvLyBUT0RPIC0gd2lsbCB3YW50IHRvIHZhbGlkYXRlIENoYXJzIHdpdGggYnVpbHQgaW4gd2hpdGUgc3BhY2UgaGFuZGxpbmcKLSAgICAgICAgLy8gICAgICAgIEhvd2V2ZXIsIHRoaXMgZmNuIHNvbWV0aW1lcyB0YWtlcyBhIHZhbHVlIHdpdGggd3NyIGFwcGxpZWQKLSAgICAgICAgLy8gICAgICAgIGFscmVhZHkKLSAgICAgICAgaW50IGwgPSB2Lmxlbmd0aCgpOwotICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAgIAotICAgICAgICBpZiAoaSA8IGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBjaCA9IHYuY2hhckF0KGkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoY2ggPT0gJysnIHx8IGNoID09ICctJykKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGJvb2xlYW4gc2F3RG90ID0gZmFsc2U7Ci0gICAgICAgIGJvb2xlYW4gc2F3RGlnaXQgPSBmYWxzZTsKLQotICAgICAgICBmb3IgKCA7IGkgPCBsIDsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGNoID0gdi5jaGFyQXQoaSk7Ci0KLSAgICAgICAgICAgIGlmIChjaCA9PSAnLicpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHNhd0RvdCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgiSWxsZWdhbCBkZWNpbWFsLCBzYXcgJy4nIG1vcmUgdGhhbiBvbmNlIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzYXdEb3QgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzYXdEaWdpdCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gVE9ETyAtIG1heSBuZWVkIHRvIGVzY2FwZSBlcnJvciBjaGFyCi0gICAgICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKCJJbGxlZ2FsIGRlY2ltYWwsIHVuZXhwZWN0ZWQgY2hhcjogIiArIGNoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXNhd0RpZ2l0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LmludmFsaWQoIklsbGVnYWwgZGVjaW1hbCwgZXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGRpZ2l0Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBudW1lcmljczogZnJhY3Rpb25hbAotICAgIHB1YmxpYyBCaWdEZWNpbWFsIGJpZ0RlY2ltYWxWYWx1ZSgpIHsgY2hlY2tfZGF0ZWQoKTsgcmV0dXJuIF92YWx1ZTsgfQotCi0gICAgLy8gc2V0dGVycwotICAgIHByb3RlY3RlZCB2b2lkIHNldF9CaWdEZWNpbWFsKEJpZ0RlY2ltYWwgdikgeyBfdmFsdWUgPSB2OyB9Ci0KLSAgICAvLyBjb21wYXJhdG9ycwotICAgIHByb3RlY3RlZCBpbnQgY29tcGFyZV90byhYbWxPYmplY3QgZGVjaW1hbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfdmFsdWUuY29tcGFyZVRvKCgoWG1sT2JqZWN0QmFzZSlkZWNpbWFsKS5iaWdEZWNpbWFsVmFsdWUoKSk7Ci0gICAgfQotICAgIHByb3RlY3RlZCBib29sZWFuIGVxdWFsX3RvKFhtbE9iamVjdCBkZWNpbWFsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChfdmFsdWUuY29tcGFyZVRvKCgoWG1sT2JqZWN0QmFzZSlkZWNpbWFsKS5iaWdEZWNpbWFsVmFsdWUoKSkpID09IDA7Ci0gICAgfQotCi0gICAgc3RhdGljIHByaXZhdGUgQmlnSW50ZWdlciBfbWF4bG9uZyA9IEJpZ0ludGVnZXIudmFsdWVPZihMb25nLk1BWF9WQUxVRSk7Ci0gICAgc3RhdGljIHByaXZhdGUgQmlnSW50ZWdlciBfbWlubG9uZyA9IEJpZ0ludGVnZXIudmFsdWVPZihMb25nLk1JTl9WQUxVRSk7Ci0KLSAgICAvKioKLSAgICAgKiBOb3RlLCB0aGlzIGlzIGNhcmVmdWxseSBhbGlnbmVkIHdpdGggaGFzaCBjb2RlcyBmb3IgYWxsIHhzZDpkZWNpbWFsCi0gICAgICogcHJpbWl0aXZlcy4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgaW50IHZhbHVlX2hhc2hfY29kZSgpCi0gICAgewotICAgICAgICBpZiAoX3ZhbHVlLnNjYWxlKCkgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX3ZhbHVlLnNldFNjYWxlKDAsIEJpZ0RlY2ltYWwuUk9VTkRfRE9XTikuY29tcGFyZVRvKF92YWx1ZSkgIT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZGVjaW1hbEhhc2hDb2RlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBCaWdJbnRlZ2VyIGludHZhbCA9IF92YWx1ZS50b0JpZ0ludGVnZXIoKTsKLQotICAgICAgICBpZiAoaW50dmFsLmNvbXBhcmVUbyhfbWF4bG9uZykgPiAwIHx8Ci0gICAgICAgICAgICBpbnR2YWwuY29tcGFyZVRvKF9taW5sb25nKSA8IDApCi0gICAgICAgICAgICByZXR1cm4gaW50dmFsLmhhc2hDb2RlKCk7Ci0KLSAgICAgICAgbG9uZyBsb25ndmFsID0gaW50dmFsLmxvbmdWYWx1ZSgpOwotCi0gICAgICAgIHJldHVybiAoaW50KSgobG9uZ3ZhbCA+PiAzMikgKiAxOSArIGxvbmd2YWwpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgaGFzIEJpZ0RlY2ltYWxzIHdpdGggdGhlIHNhbWUgYXJpdGhtZXRpYyB2YWx1ZSB0bwotICAgICAqIHRoZSBzYW1lIGhhc2ggY29kZSAoZWcsIDIuMyAmIDIuMzAgd2lsbCBoYXZlIHRoZSBzYW1lIGhhc2guKQotICAgICAqIFRoaXMgZGlmZmVycyBmcm9tIEJpZ0RlY2ltYWwuaGFzaENvZGUoKQotICAgICAqLwotICAgIHByb3RlY3RlZCBpbnQgZGVjaW1hbEhhc2hDb2RlKCkgewotICAgICAgICBhc3NlcnQgX3ZhbHVlLnNjYWxlKCkgPiAwOwotCi0gICAgICAgIC8vIEdldCBkZWNpbWFsIHZhbHVlIGFzIHN0cmluZywgYW5kIHN0cmlwIG9mZiB6ZXJvZXMgb24gdGhlIHJpZ2h0Ci0gICAgICAgIFN0cmluZyBzdHJWYWx1ZSA9IF92YWx1ZS50b1N0cmluZygpOwotICAgICAgICBpbnQgaTsKLSAgICAgICAgZm9yIChpID0gc3RyVmFsdWUubGVuZ3RoKCkgLSAxIDsgaSA+PSAwIDsgaSAtLSkKLSAgICAgICAgICAgIGlmIChzdHJWYWx1ZS5jaGFyQXQoaSkgIT0gJzAnKSBicmVhazsKLQotICAgICAgICBhc3NlcnQgc3RyVmFsdWUuaW5kZXhPZignLicpIDwgaTsKLQotICAgICAgICAvLyBSZXR1cm4gdGhlIGNhbm9uaWNhbGl6ZWQgc3RyaW5nIGhhc2hjb2RlCi0gICAgICAgIHJldHVybiBzdHJWYWx1ZS5zdWJzdHJpbmcoMCwgaSArIDEpLmhhc2hDb2RlKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YURlY2ltYWxIb2xkZXJFeC5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YURlY2ltYWxIb2xkZXJFeC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjk0ZTRjLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL0phdmFEZWNpbWFsSG9sZGVyRXguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzMCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5WYWxpZGF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlFOYW1lSGVscGVyOwotCi0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEphdmFEZWNpbWFsSG9sZGVyRXggZXh0ZW5kcyBKYXZhRGVjaW1hbEhvbGRlcgotewotICAgIHByaXZhdGUgU2NoZW1hVHlwZSBfc2NoZW1hVHlwZTsKLQotICAgIHB1YmxpYyBTY2hlbWFUeXBlIHNjaGVtYVR5cGUoKQotICAgICAgICB7IHJldHVybiBfc2NoZW1hVHlwZTsgfQotCi0gICAgcHVibGljIEphdmFEZWNpbWFsSG9sZGVyRXgoU2NoZW1hVHlwZSB0eXBlLCBib29sZWFuIGNvbXBsZXgpCi0gICAgICAgIHsgX3NjaGVtYVR5cGUgPSB0eXBlOyBpbml0Q29tcGxleFR5cGUoY29tcGxleCwgZmFsc2UpOyB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfdGV4dChTdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIGlmIChfdmFsaWRhdGVPblNldCgpKQotICAgICAgICAgICAgdmFsaWRhdGVMZXhpY2FsKHMsIF9zY2hlbWFUeXBlLCBfdm9vclZjKTsKLQotICAgICAgICBCaWdEZWNpbWFsIHYgPSBudWxsOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgdiA9IG5ldyBCaWdEZWNpbWFsKHMpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgX3Zvb3JWYy5pbnZhbGlkKCJJbnZhbGlkIERlY2ltYWwiKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChfdmFsaWRhdGVPblNldCgpKQotICAgICAgICAgICAgdmFsaWRhdGVWYWx1ZSh2LCBfc2NoZW1hVHlwZSwgX3Zvb3JWYyk7Ci0KLSAgICAgICAgc3VwZXIuc2V0X0JpZ0RlY2ltYWwodik7Ci0gICAgfQotICAgIAotICAgIHByb3RlY3RlZCB2b2lkIHNldF9CaWdEZWNpbWFsKEJpZ0RlY2ltYWwgdikKLSAgICB7Ci0gICAgICAgIGlmIChfdmFsaWRhdGVPblNldCgpKQotICAgICAgICAgICAgdmFsaWRhdGVWYWx1ZSh2LCBfc2NoZW1hVHlwZSwgX3Zvb3JWYyk7Ci0gICAgICAgIHN1cGVyLnNldF9CaWdEZWNpbWFsKHYpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgdmFsaWRhdGVMZXhpY2FsKFN0cmluZyB2LCBTY2hlbWFUeXBlIHNUeXBlLCBWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0KQotICAgIHsKLSAgICAgICAgSmF2YURlY2ltYWxIb2xkZXIudmFsaWRhdGVMZXhpY2FsKHYsIGNvbnRleHQpOwotICAgICAgICAKLSAgICAgICAgLy8gY2hlY2sgcGF0dGVybgotICAgICAgICBpZiAoc1R5cGUuaGFzUGF0dGVybkZhY2V0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghc1R5cGUubWF0Y2hQYXR0ZXJuRmFjZXQodikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gVE9ETyAtIGRlc2NyaWJlIHN0cmluZyBhbmQgcGF0dGVybiBoZXJlIGluIGVycm9yCi0gICAgICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKCJEZWNpbWFsICgiICsgdiArICIpIGRvZXMgbm90IG1hdGNoIHBhdHRlcm4gZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIFBlcmZvcm1zIGZhY2V0IHZhbGlkYXRpb24gb25seS4KLSAgICAgKi8KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB2YWxpZGF0ZVZhbHVlKEJpZ0RlY2ltYWwgdiwgU2NoZW1hVHlwZSBzVHlwZSwgVmFsaWRhdGlvbkNvbnRleHQgY29udGV4dCkKLSAgICB7Ci0gICAgICAgIC8vIGZyYWN0aW9uYWwgZGlnaXRzCi0gICAgICAgIFhtbE9iamVjdCBmZCA9IHNUeXBlLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfRlJBQ1RJT05fRElHSVRTKTsKLSAgICAgICAgaWYgKGZkICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBzY2FsZSA9ICgoWG1sT2JqZWN0QmFzZSlmZCkuYmlnSW50ZWdlclZhbHVlKCkuaW50VmFsdWUoKTsKLSAgICAgICAgICAgIGlmICh2LnNjYWxlKCkgPiBzY2FsZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmludmFsaWQoCi0gICAgICAgICAgICAgICAgICAgICJEZWNpbWFsIGZyYWN0aW9uYWwgZGlnaXRzICgiICsgdi5zY2FsZSgpICsgIikgZG9lcyBub3QgbWF0Y2ggIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAiZnJhY3Rpb25hbCBkaWdpdHMgZmFjZXQgKCIgKyBzY2FsZSArICIpIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUoc1R5cGUpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyB0b3RhbCBkaWdpdHMKLSAgICAgICAgWG1sT2JqZWN0IHRkID0gc1R5cGUuZ2V0RmFjZXQoU2NoZW1hVHlwZS5GQUNFVF9UT1RBTF9ESUdJVFMpOwotICAgICAgICBpZiAodGQgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHRlbXAgPSB2LnVuc2NhbGVkVmFsdWUoKS50b1N0cmluZygpOwotICAgICAgICAgICAgaW50IHRkZiA9ICgoWG1sT2JqZWN0QmFzZSl0ZCkuYmlnSW50ZWdlclZhbHVlKCkuaW50VmFsdWUoKTsKLSAgICAgICAgICAgIGludCBsZW4gPSB0ZW1wLmxlbmd0aCgpOwotICAgICAgICAgICAgaWYgKGxlbiA+IDAgJiYgdGVtcC5jaGFyQXQoMCkgPT0gJy0nKQotICAgICAgICAgICAgICAgIGxlbiAtPSAxOwotICAgICAgICAgICAgaWYgKGxlbiA+IHRkZikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmludmFsaWQoCi0gICAgICAgICAgICAgICAgICAgICJEZWNpbWFsIHRvdGFsIGRpZ2l0cyAoIiArIHRlbXAgKyAiKSBpcyBncmVhdGVyIHRoYW4gIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAidG90YWwgZGlnaXRzIGZhY2V0ICgiICsgdGRmICsgIikgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIG1pbiBleAotICAgICAgICBYbWxPYmplY3QgbWluZSA9IHNUeXBlLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfTUlOX0VYQ0xVU0lWRSk7Ci0gICAgICAgIGlmIChtaW5lICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJpZ0RlY2ltYWwgbSA9ICgoWG1sT2JqZWN0QmFzZSltaW5lKS5iaWdEZWNpbWFsVmFsdWUoKTsKLSAgICAgICAgICAgIGlmICh2LmNvbXBhcmVUbyhtKSA8PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgKLSAgICAgICAgICAgICAgICAgICAgIkRlY2ltYWwgKCIgKyB2ICsgIikgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIm1pbiBleGNsdXNpdmUgZmFjZXQgKCIgKyBtICsgIikgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIG1pbiBpbgotICAgICAgICBYbWxPYmplY3QgbWluaSA9IHNUeXBlLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfTUlOX0lOQ0xVU0lWRSk7Ci0gICAgICAgIGlmIChtaW5pICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJpZ0RlY2ltYWwgbSA9ICgoWG1sT2JqZWN0QmFzZSltaW5pKS5iaWdEZWNpbWFsVmFsdWUoKTsKLSAgICAgICAgICAgIGlmICh2LmNvbXBhcmVUbyhtKSA8IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKAotICAgICAgICAgICAgICAgICAgICAiRGVjaW1hbCAoIiArIHYgKyAiKSBpcyBsZXNzIHRoYW4gIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAibWluIGluY2x1c2l2ZSBmYWNldCAoIiArIG0gKyAiKSBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNUeXBlKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbWF4IGluCi0gICAgICAgIFhtbE9iamVjdCBtYXhpID0gc1R5cGUuZ2V0RmFjZXQoU2NoZW1hVHlwZS5GQUNFVF9NQVhfSU5DTFVTSVZFKTsKLSAgICAgICAgaWYgKG1heGkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgQmlnRGVjaW1hbCBtID0gKChYbWxPYmplY3RCYXNlKW1heGkpLmJpZ0RlY2ltYWxWYWx1ZSgpOwotICAgICAgICAgICAgaWYgKHYuY29tcGFyZVRvKG0pID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmludmFsaWQoCi0gICAgICAgICAgICAgICAgICAgICJEZWNpbWFsICgiICsgdiArICIpIGlzIGdyZWF0ZXIgdGhhbiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJtYXggaW5jbHVzaXZlIGZhY2V0ICgiICsgbSArICIpIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUoc1R5cGUpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBtYXggZXgKLSAgICAgICAgWG1sT2JqZWN0IG1heGUgPSBzVHlwZS5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX01BWF9FWENMVVNJVkUpOwotICAgICAgICBpZiAobWF4ZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBCaWdEZWNpbWFsIG0gPSAoKFhtbE9iamVjdEJhc2UpbWF4ZSkuYmlnRGVjaW1hbFZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAodi5jb21wYXJlVG8obSkgPj0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmludmFsaWQoCi0gICAgICAgICAgICAgICAgICAgICJEZWNpbWFsICgiICsgdiArICIpIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJtYXggZXhjbHVzaXZlIGZhY2V0ICgiICsgbSArICIpIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUoc1R5cGUpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBlbnVtZXJhdGlvbgotICAgICAgICBYbWxPYmplY3RbXSB2YWxzID0gc1R5cGUuZ2V0RW51bWVyYXRpb25WYWx1ZXMoKTsKLSAgICAgICAgaWYgKHZhbHMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWxzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIGlmICh2LmVxdWFscygoKFhtbE9iamVjdEJhc2UpdmFsc1tpXSkuYmlnRGVjaW1hbFZhbHVlKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb250ZXh0LmludmFsaWQoIkRlY2ltYWwgKCIgKyB2ICsgIikgZG9lcyBub3QgbWF0Y2ggYW55IGVudW1lcmF0aW9uIHZhbHVlcyBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNUeXBlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgdmFsaWRhdGVfc2ltcGxldmFsKFN0cmluZyBsZXhpY2FsLCBWYWxpZGF0aW9uQ29udGV4dCBjdHgpCi0gICAgewotICAgICAgICB2YWxpZGF0ZUxleGljYWwobGV4aWNhbCwgc2NoZW1hVHlwZSgpLCBjdHgpOwotICAgICAgICB2YWxpZGF0ZVZhbHVlKGJpZ0RlY2ltYWxWYWx1ZSgpLCBzY2hlbWFUeXBlKCksIGN0eCk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhRG91YmxlSG9sZGVyLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhRG91YmxlSG9sZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZWU3N2UuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YURvdWJsZUhvbGRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hLkJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uVmFsaWRhdGlvbkNvbnRleHQ7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEphdmFEb3VibGVIb2xkZXIgZXh0ZW5kcyBYbWxPYmplY3RCYXNlCi17Ci0gICAgcHVibGljIFNjaGVtYVR5cGUgc2NoZW1hVHlwZSgpCi0gICAgICAgIHsgcmV0dXJuIEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLlNUX0RPVUJMRTsgfQotCi0gICAgZG91YmxlIF92YWx1ZTsKLQotICAgIC8vIFNJTVBMRSBWQUxVRSBBQ0NFU1NPUlMgQkVMT1cgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgLy8gZ2V0cy9zZXRzIHJhdyB0ZXh0IHZhbHVlCi0gICAgcHJvdGVjdGVkIFN0cmluZyBjb21wdXRlX3RleHQoTmFtZXNwYWNlTWFuYWdlciBuc20pIHsgcmV0dXJuIHNlcmlhbGl6ZShfdmFsdWUpOyB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBzZXJpYWxpemUoZG91YmxlIGQpCi0gICAgewotICAgICAgICBpZiAoZCA9PSBEb3VibGUuUE9TSVRJVkVfSU5GSU5JVFkpCi0gICAgICAgICAgICByZXR1cm4gIklORiI7Ci0gICAgICAgIGVsc2UgaWYgKGQgPT0gRG91YmxlLk5FR0FUSVZFX0lORklOSVRZKQotICAgICAgICAgICAgcmV0dXJuICItSU5GIjsKLSAgICAgICAgZWxzZSBpZiAoZCA9PSBEb3VibGUuTmFOKQotICAgICAgICAgICAgcmV0dXJuICJOYU4iOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gRG91YmxlLnRvU3RyaW5nKGQpOwotICAgIH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfdGV4dChTdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIHNldF9kb3VibGUodmFsaWRhdGVMZXhpY2FsKHMsX3Zvb3JWYykpOwotICAgIH0KLSAgICBwdWJsaWMgc3RhdGljIGRvdWJsZSB2YWxpZGF0ZUxleGljYWwoU3RyaW5nIHYsIFZhbGlkYXRpb25Db250ZXh0IGNvbnRleHQpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIERvdWJsZS5wYXJzZURvdWJsZSh2KTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHYuZXF1YWxzKCJJTkYiKSkgIHJldHVybiBEb3VibGUuUE9TSVRJVkVfSU5GSU5JVFk7Ci0gICAgICAgICAgICBpZiAodi5lcXVhbHMoIi1JTkYiKSkgcmV0dXJuIERvdWJsZS5ORUdBVElWRV9JTkZJTklUWTsKLSAgICAgICAgICAgIGlmICh2LmVxdWFscygiTmFOIikpICByZXR1cm4gRG91YmxlLk5hTjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKCJJbnZhbGlkIGRvdWJsZSB2YWx1ZSIpOwotCi0gICAgICAgICAgICByZXR1cm4gRG91YmxlLk5hTjsKLSAgICAgICAgfQotICAgIH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfbmlsKCkKLSAgICB7Ci0gICAgICAgIF92YWx1ZSA9IDAuMDsKLSAgICB9Ci0KLSAgICAvLyBudW1lcmljczogZnJhY3Rpb25hbAotICAgIHB1YmxpYyBCaWdEZWNpbWFsIGJpZ0RlY2ltYWxWYWx1ZSgpIHsgY2hlY2tfZGF0ZWQoKTsgcmV0dXJuIG5ldyBCaWdEZWNpbWFsKF92YWx1ZSk7IH0KLSAgICBwdWJsaWMgZG91YmxlIGRvdWJsZVZhbHVlKCkgeyBjaGVja19kYXRlZCgpOyByZXR1cm4gX3ZhbHVlOyB9Ci0gICAgcHVibGljIGZsb2F0IGZsb2F0VmFsdWUoKSB7IGNoZWNrX2RhdGVkKCk7IHJldHVybiAoZmxvYXQpX3ZhbHVlOyB9Ci0KLSAgICAvLyBzZXR0ZXJzCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X2RvdWJsZShkb3VibGUgdikgeyBfdmFsdWUgPSB2OyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X2Zsb2F0KGZsb2F0IHYpIHsgc2V0X2RvdWJsZSgoZG91YmxlKXYpOyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X2xvbmcobG9uZyB2KSB7IHNldF9kb3VibGUoKGRvdWJsZSl2KTsgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldF9CaWdEZWNpbWFsKEJpZ0RlY2ltYWwgdikgeyBzZXRfZG91YmxlKHYuZG91YmxlVmFsdWUoKSk7IH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfQmlnSW50ZWdlcihCaWdJbnRlZ2VyIHYpIHsgc2V0X2RvdWJsZSh2LmRvdWJsZVZhbHVlKCkpOyB9Ci0KLSAgICAvLyBjb21wYXJhdG9ycwotICAgIHByb3RlY3RlZCBpbnQgY29tcGFyZV90byhYbWxPYmplY3QgZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb21wYXJlKF92YWx1ZSwoKFhtbE9iamVjdEJhc2UpZCkuZG91YmxlVmFsdWUoKSk7Ci0gICAgfQotICAgIHN0YXRpYyBpbnQgY29tcGFyZShkb3VibGUgdGhpc1ZhbHVlLCBkb3VibGUgdGhhdFZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXNWYWx1ZSA8IHRoYXRWYWx1ZSkgcmV0dXJuIC0xOwotICAgICAgICBpZiAodGhpc1ZhbHVlID4gdGhhdFZhbHVlKSByZXR1cm4gIDE7Ci0KLSAgICAgICAgbG9uZyB0aGlzQml0cyA9IERvdWJsZS5kb3VibGVUb0xvbmdCaXRzKHRoaXNWYWx1ZSk7Ci0gICAgICAgIGxvbmcgdGhhdEJpdHMgPSBEb3VibGUuZG91YmxlVG9Mb25nQml0cyh0aGF0VmFsdWUpOwotCi0gICAgICAgIHJldHVybiB0aGlzQml0cyA9PSB0aGF0Qml0cyA/IDAgOiB0aGlzQml0cyA8IHRoYXRCaXRzID8gLTEgOiAxOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBib29sZWFuIGVxdWFsX3RvKFhtbE9iamVjdCBkKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbXBhcmUoX3ZhbHVlLCAoKFhtbE9iamVjdEJhc2UpZCkuZG91YmxlVmFsdWUoKSkgPT0gMDsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgaW50IHZhbHVlX2hhc2hfY29kZSgpCi0gICAgewotICAgICAgICBsb25nIHYgPSBEb3VibGUuZG91YmxlVG9Mb25nQml0cyhfdmFsdWUpOwotICAgICAgICByZXR1cm4gKGludCkoKHYgPj4gMzIpICogMTkgKyB2KTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhRG91YmxlSG9sZGVyRXguamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL0phdmFEb3VibGVIb2xkZXJFeC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmJiM2U0Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL0phdmFEb3VibGVIb2xkZXJFeC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUzICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlZhbGlkYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uUU5hbWVIZWxwZXI7Ci0KLQotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSmF2YURvdWJsZUhvbGRlckV4IGV4dGVuZHMgSmF2YURvdWJsZUhvbGRlcgotewotICAgIHB1YmxpYyBKYXZhRG91YmxlSG9sZGVyRXgoU2NoZW1hVHlwZSB0eXBlLCBib29sZWFuIGNvbXBsZXgpCi0gICAgICAgIHsgX3NjaGVtYVR5cGUgPSB0eXBlOyBpbml0Q29tcGxleFR5cGUoY29tcGxleCwgZmFsc2UpOyB9Ci0gICAgCi0gICAgcHJpdmF0ZSBTY2hlbWFUeXBlIF9zY2hlbWFUeXBlOwotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgc2NoZW1hVHlwZSgpCi0gICAgICAgIHsgcmV0dXJuIF9zY2hlbWFUeXBlOyB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfZG91YmxlKGRvdWJsZSB2KQotICAgIHsKLSAgICAgICAgaWYgKF92YWxpZGF0ZU9uU2V0KCkpCi0gICAgICAgICAgICB2YWxpZGF0ZVZhbHVlKHYsIF9zY2hlbWFUeXBlLCBfdm9vclZjKTsKLSAgICAgICAgc3VwZXIuc2V0X2RvdWJsZSh2KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGRvdWJsZSB2YWxpZGF0ZUxleGljYWwoU3RyaW5nIHYsIFNjaGVtYVR5cGUgc1R5cGUsIFZhbGlkYXRpb25Db250ZXh0IGNvbnRleHQpCi0gICAgewotICAgICAgICBkb3VibGUgZCA9IEphdmFEb3VibGVIb2xkZXIudmFsaWRhdGVMZXhpY2FsKHYsIGNvbnRleHQpOwotCi0gICAgICAgIGlmICghc1R5cGUubWF0Y2hQYXR0ZXJuRmFjZXQodikpCi0gICAgICAgICAgICBjb250ZXh0LmludmFsaWQoIkRvdWJsZSAoIiArIHYgKyAiKSBkb2VzIG5vdCBtYXRjaCBwYXR0ZXJuIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUoc1R5cGUpKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBkOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgdmFsaWRhdGVWYWx1ZShkb3VibGUgdiwgU2NoZW1hVHlwZSBzVHlwZSwgVmFsaWRhdGlvbkNvbnRleHQgY29udGV4dCkKLSAgICB7Ci0gICAgICAgIFhtbE9iamVjdCB4OwotICAgICAgICBkb3VibGUgZDsKLQotICAgICAgICBpZiAoKHggPSBzVHlwZS5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX01JTl9FWENMVVNJVkUpKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY29tcGFyZSh2LCBkID0gKChYbWxPYmplY3RCYXNlKXgpLmRvdWJsZVZhbHVlKCkpIDw9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKAotICAgICAgICAgICAgICAgICAgICAiRG91YmxlICgiICsgdiArICIpIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJtaW4gZXhjbHVzaXZlIGZhY2V0ICgiICsgZCArICIpIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUoc1R5cGUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICgoeCA9IHNUeXBlLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfTUlOX0lOQ0xVU0lWRSkpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjb21wYXJlKHYsIGQgPSAoKFhtbE9iamVjdEJhc2UpeCkuZG91YmxlVmFsdWUoKSkgPCAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgKLSAgICAgICAgICAgICAgICAgICAgIkRvdWJsZSAoIiArIHYgKyAiKSBpcyBsZXNzIHRoYW4gIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAibWluIGluY2x1c2l2ZSBmYWNldCAoIiArIGQgKyAiKSBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNUeXBlKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICgoeCA9IHNUeXBlLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfTUFYX0lOQ0xVU0lWRSkpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjb21wYXJlKHYsIGQgPSAoKFhtbE9iamVjdEJhc2UpeCkuZG91YmxlVmFsdWUoKSkgPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgKLSAgICAgICAgICAgICAgICAgICAgIkRvdWJsZSAoIiArIHYgKyAiKSBpcyBncmVhdGVyIHRoYW4gIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAibWF4IGluY2x1c2l2ZSBmYWNldCAoIiArIGQgKyAiKSBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNUeXBlKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICgoeCA9IHNUeXBlLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfTUFYX0VYQ0xVU0lWRSkpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjb21wYXJlKHYsIGQgPSAoKFhtbE9iamVjdEJhc2UpeCkuZG91YmxlVmFsdWUoKSkgPj0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmludmFsaWQoCi0gICAgICAgICAgICAgICAgICAgICJEb3VibGUgKCIgKyB2ICsgIikgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIm1heCBleGNsdXNpdmUgZmFjZXQgKCIgKyBkICsgIikgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBYbWxPYmplY3RbXSB2YWxzID0gc1R5cGUuZ2V0RW51bWVyYXRpb25WYWx1ZXMoKTsKLSAgICAgICAgaWYgKHZhbHMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWxzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKHYsICgoWG1sT2JqZWN0QmFzZSl2YWxzW2ldKS5kb3VibGVWYWx1ZSgpKSA9PSAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb250ZXh0LmludmFsaWQoIkRvdWJsZSAoIiArIHYgKyAiKSBpcyBub3QgYSB2YWxpZCBlbnVtZXJhdGVkIHZhbHVlIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUoc1R5cGUpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlX3NpbXBsZXZhbChTdHJpbmcgbGV4aWNhbCwgVmFsaWRhdGlvbkNvbnRleHQgY3R4KQotICAgIHsKLSAgICAgICAgdmFsaWRhdGVMZXhpY2FsKGxleGljYWwsIHNjaGVtYVR5cGUoKSwgY3R4KTsKLSAgICAgICAgdmFsaWRhdGVWYWx1ZShkb3VibGVWYWx1ZSgpLCBzY2hlbWFUeXBlKCksIGN0eCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YUZsb2F0SG9sZGVyLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhRmxvYXRIb2xkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQyZjY4ZS4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhRmxvYXRIb2xkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnNjaGVtYS5CdWlsdGluU2NoZW1hVHlwZVN5c3RlbTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlZhbGlkYXRpb25Db250ZXh0OwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7Ci1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBKYXZhRmxvYXRIb2xkZXIgZXh0ZW5kcyBYbWxPYmplY3RCYXNlCi17Ci0gICAgcHVibGljIFNjaGVtYVR5cGUgc2NoZW1hVHlwZSgpCi0gICAgICAgIHsgcmV0dXJuIEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLlNUX0ZMT0FUOyB9Ci0KLSAgICBwcml2YXRlIGZsb2F0IF92YWx1ZTsKLQotICAgIC8vIFNJTVBMRSBWQUxVRSBBQ0NFU1NPUlMgQkVMT1cgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgLy8gZ2V0cytzZXRzIHJhdyB0ZXh0IHZhbHVlCi0gICAgcHJvdGVjdGVkIFN0cmluZyBjb21wdXRlX3RleHQoTmFtZXNwYWNlTWFuYWdlciBuc20pIHsKLSAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShfdmFsdWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIHNlcmlhbGl6ZShmbG9hdCBmKQotICAgIHsKLSAgICAgICAgaWYgKGYgPT0gRmxvYXQuUE9TSVRJVkVfSU5GSU5JVFkpCi0gICAgICAgICAgICByZXR1cm4gIklORiI7Ci0gICAgICAgIGVsc2UgaWYgKGYgPT0gRmxvYXQuTkVHQVRJVkVfSU5GSU5JVFkpCi0gICAgICAgICAgICByZXR1cm4gIi1JTkYiOwotICAgICAgICBlbHNlIGlmIChmID09IEZsb2F0Lk5hTikKLSAgICAgICAgICAgIHJldHVybiAiTmFOIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIEZsb2F0LnRvU3RyaW5nKGYpOwotICAgIH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfdGV4dChTdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIHNldF9mbG9hdCh2YWxpZGF0ZUxleGljYWwocyxfdm9vclZjKSk7Ci0gICAgfQotICAgIHB1YmxpYyBzdGF0aWMgZmxvYXQgdmFsaWRhdGVMZXhpY2FsKFN0cmluZyB2LCBWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0KQotICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBGbG9hdC5wYXJzZUZsb2F0KHYpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodi5lcXVhbHMoIklORiIpKSAgcmV0dXJuIEZsb2F0LlBPU0lUSVZFX0lORklOSVRZOwotICAgICAgICAgICAgaWYgKHYuZXF1YWxzKCItSU5GIikpIHJldHVybiBGbG9hdC5ORUdBVElWRV9JTkZJTklUWTsKLSAgICAgICAgICAgIGlmICh2LmVxdWFscygiTmFOIikpICByZXR1cm4gRmxvYXQuTmFOOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBjb250ZXh0LmludmFsaWQoIkludmFsaWQgZmxvYXQgdmFsdWUiKTsKLQotICAgICAgICAgICAgcmV0dXJuIEZsb2F0Lk5hTjsKLSAgICAgICAgfQotICAgIH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfbmlsKCkKLSAgICB7Ci0gICAgICAgIF92YWx1ZSA9IDAuMGY7Ci0gICAgfQotICAgIC8vIG51bWVyaWNzOiBmcmFjdGlvbmFsCi0gICAgcHVibGljIEJpZ0RlY2ltYWwgYmlnRGVjaW1hbFZhbHVlKCkgeyBjaGVja19kYXRlZCgpOyByZXR1cm4gbmV3IEJpZ0RlY2ltYWwoX3ZhbHVlKTsgfQotICAgIHB1YmxpYyBkb3VibGUgZG91YmxlVmFsdWUoKSB7IGNoZWNrX2RhdGVkKCk7IHJldHVybiBfdmFsdWU7IH0KLSAgICBwdWJsaWMgZmxvYXQgZmxvYXRWYWx1ZSgpIHsgY2hlY2tfZGF0ZWQoKTsgcmV0dXJuIF92YWx1ZTsgfQotCi0gICAgLy8gc2V0dGVycwotICAgIHByb3RlY3RlZCB2b2lkIHNldF9kb3VibGUoZG91YmxlIHYpIHsgc2V0X2Zsb2F0KChmbG9hdCl2KTsgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldF9mbG9hdChmbG9hdCB2KSB7IF92YWx1ZSA9IHY7IH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfbG9uZyhsb25nIHYpIHsgc2V0X2Zsb2F0KChmbG9hdCl2KTsgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldF9CaWdEZWNpbWFsKEJpZ0RlY2ltYWwgdikgeyBzZXRfZmxvYXQodi5mbG9hdFZhbHVlKCkpOyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X0JpZ0ludGVnZXIoQmlnSW50ZWdlciB2KSB7IHNldF9mbG9hdCh2LmZsb2F0VmFsdWUoKSk7IH0KLQotICAgIC8vIGNvbXBhcmF0b3JzCi0gICAgcHJvdGVjdGVkIGludCBjb21wYXJlX3RvKFhtbE9iamVjdCBmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbXBhcmUoX3ZhbHVlLCgoWG1sT2JqZWN0QmFzZSlmKS5mbG9hdFZhbHVlKCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBpbnQgY29tcGFyZShmbG9hdCB0aGlzVmFsdWUsIGZsb2F0IHRoYXRWYWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzVmFsdWUgPCB0aGF0VmFsdWUpIHJldHVybiAtMTsKLSAgICAgICAgaWYgKHRoaXNWYWx1ZSA+IHRoYXRWYWx1ZSkgcmV0dXJuICAxOwotCi0gICAgICAgIGludCB0aGlzQml0cyA9IEZsb2F0LmZsb2F0VG9JbnRCaXRzKHRoaXNWYWx1ZSk7Ci0gICAgICAgIGludCB0aGF0Qml0cyA9IEZsb2F0LmZsb2F0VG9JbnRCaXRzKHRoYXRWYWx1ZSk7Ci0KLSAgICAgICAgcmV0dXJuIHRoaXNCaXRzID09IHRoYXRCaXRzID8gMCA6IHRoaXNCaXRzIDwgdGhhdEJpdHMgPyAtMSA6IDE7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIGJvb2xlYW4gZXF1YWxfdG8oWG1sT2JqZWN0IGYpCi0gICAgewotICAgICAgICByZXR1cm4gY29tcGFyZShfdmFsdWUsICgoWG1sT2JqZWN0QmFzZSlmKS5mbG9hdFZhbHVlKCkpID09IDA7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIGludCB2YWx1ZV9oYXNoX2NvZGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEZsb2F0LmZsb2F0VG9JbnRCaXRzKF92YWx1ZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YUZsb2F0SG9sZGVyRXguamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL0phdmFGbG9hdEhvbGRlckV4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NGUxOGMuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YUZsb2F0SG9sZGVyRXguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5WYWxpZGF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlFOYW1lSGVscGVyOwotCi0KLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEphdmFGbG9hdEhvbGRlckV4IGV4dGVuZHMgSmF2YUZsb2F0SG9sZGVyCi17Ci0gICAgcHVibGljIEphdmFGbG9hdEhvbGRlckV4KFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IF9zY2hlbWFUeXBlID0gdHlwZTsgaW5pdENvbXBsZXhUeXBlKGNvbXBsZXgsIGZhbHNlKTsgfQotICAgIAotICAgIHByaXZhdGUgU2NoZW1hVHlwZSBfc2NoZW1hVHlwZTsKLQotICAgIHB1YmxpYyBTY2hlbWFUeXBlIHNjaGVtYVR5cGUoKQotICAgICAgICB7IHJldHVybiBfc2NoZW1hVHlwZTsgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X2Zsb2F0KGZsb2F0IHYpCi0gICAgewotICAgICAgICBpZiAoX3ZhbGlkYXRlT25TZXQoKSkKLSAgICAgICAgICAgIHZhbGlkYXRlVmFsdWUodiwgX3NjaGVtYVR5cGUsIF92b29yVmMpOwotICAgICAgICBzdXBlci5zZXRfZmxvYXQodik7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgZmxvYXQgdmFsaWRhdGVMZXhpY2FsKFN0cmluZyB2LCBTY2hlbWFUeXBlIHNUeXBlLCBWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0KQotICAgIHsKLSAgICAgICAgZmxvYXQgZiA9IEphdmFGbG9hdEhvbGRlci52YWxpZGF0ZUxleGljYWwodiwgY29udGV4dCk7Ci0KLSAgICAgICAgaWYgKCFzVHlwZS5tYXRjaFBhdHRlcm5GYWNldCh2KSkKLSAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgiRmxvYXQgKCIgKyB2ICsgIikgZG9lcyBub3QgbWF0Y2ggcGF0dGVybiBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNUeXBlKSk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gZjsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHZhbGlkYXRlVmFsdWUoZmxvYXQgdiwgU2NoZW1hVHlwZSBzVHlwZSwgVmFsaWRhdGlvbkNvbnRleHQgY29udGV4dCkKLSAgICB7Ci0gICAgICAgIFhtbE9iamVjdCB4OwotICAgICAgICBmbG9hdCBmOwotCi0gICAgICAgIGlmICgoeCA9IHNUeXBlLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfTUlOX0VYQ0xVU0lWRSkpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjb21wYXJlKHYsIGYgPSAoKFhtbE9iamVjdEJhc2UpeCkuZmxvYXRWYWx1ZSgpKSA8PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgKLSAgICAgICAgICAgICAgICAgICAgIkZsb2F0ICgiICsgdiArICIpIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJtaW4gZXhjbHVzaXZlIGZhY2V0ICgiICsgZiArICIpIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUoc1R5cGUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICgoeCA9IHNUeXBlLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfTUlOX0lOQ0xVU0lWRSkpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjb21wYXJlKHYsIGYgPSAoKFhtbE9iamVjdEJhc2UpeCkuZmxvYXRWYWx1ZSgpKSA8IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKAotICAgICAgICAgICAgICAgICAgICAiRmxvYXQgKCIgKyB2ICsgIikgaXMgbGVzcyB0aGFuICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIm1pbiBpbmNsdXNpdmUgZmFjZXQgKCIgKyBmICsgIikgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoKHggPSBzVHlwZS5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX01BWF9JTkNMVVNJVkUpKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY29tcGFyZSh2LCBmID0gKChYbWxPYmplY3RCYXNlKXgpLmZsb2F0VmFsdWUoKSkgPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgKLSAgICAgICAgICAgICAgICAgICAgIkZsb2F0ICgiICsgdiArICIpIGlzIGdyZWF0ZXIgdGhhbiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJtYXggaW5jbHVzaXZlIGZhY2V0ICgiICsgZiArICIpIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUoc1R5cGUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCh4ID0gc1R5cGUuZ2V0RmFjZXQoU2NoZW1hVHlwZS5GQUNFVF9NQVhfRVhDTFVTSVZFKSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGNvbXBhcmUodiwgZiA9ICgoWG1sT2JqZWN0QmFzZSl4KS5mbG9hdFZhbHVlKCkpID49IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKAotICAgICAgICAgICAgICAgICAgICAiRmxvYXQgKCIgKyB2ICsgIikgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIm1heCBleGNsdXNpdmUgZmFjZXQgKCIgKyBmICsgIikgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBYbWxPYmplY3RbXSB2YWxzID0gc1R5cGUuZ2V0RW51bWVyYXRpb25WYWx1ZXMoKTsKLSAgICAgICAgaWYgKHZhbHMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWxzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIGlmIChjb21wYXJlKHYsICgoWG1sT2JqZWN0QmFzZSl2YWxzW2ldKS5mbG9hdFZhbHVlKCkpID09IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgiRmxvYXQgKCIgKyB2ICsgIikgaXMgbm90IGEgdmFsaWQgZW51bWVyYXRlZCB2YWx1ZSBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNUeXBlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgdmFsaWRhdGVfc2ltcGxldmFsKFN0cmluZyBsZXhpY2FsLCBWYWxpZGF0aW9uQ29udGV4dCBjdHgpCi0gICAgewotICAgICAgICB2YWxpZGF0ZUxleGljYWwobGV4aWNhbCwgc2NoZW1hVHlwZSgpLCBjdHgpOwotICAgICAgICB2YWxpZGF0ZVZhbHVlKGZsb2F0VmFsdWUoKSwgc2NoZW1hVHlwZSgpLCBjdHgpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YUdEYXRlSG9sZGVyRXguamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL0phdmFHRGF0ZUhvbGRlckV4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ZmU4ZDIuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YUdEYXRlSG9sZGVyRXguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1MyArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVCdWlsZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlZhbGlkYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uUU5hbWVIZWxwZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBKYXZhR0RhdGVIb2xkZXJFeCBleHRlbmRzIFhtbE9iamVjdEJhc2UKLXsKLSAgICBwdWJsaWMgSmF2YUdEYXRlSG9sZGVyRXgoU2NoZW1hVHlwZSB0eXBlLCBib29sZWFuIGNvbXBsZXgpCi0gICAgewotICAgICAgICBfc2NoZW1hVHlwZSA9IHR5cGU7Ci0gICAgICAgIGluaXRDb21wbGV4VHlwZShjb21wbGV4LCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgc2NoZW1hVHlwZSgpCi0gICAgICAgIHsgcmV0dXJuIF9zY2hlbWFUeXBlOyB9Ci0KLSAgICBwcml2YXRlIFNjaGVtYVR5cGUgX3NjaGVtYVR5cGU7Ci0gICAgcHJpdmF0ZSBHRGF0ZSBfdmFsdWU7Ci0KLSAgICAvLyBTSU1QTEUgVkFMVUUgQUNDRVNTT1JTIEJFTE9XIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8vIHNldHMvZ2V0cyByYXcgdGV4dCB2YWx1ZQotICAgIHByb3RlY3RlZCBTdHJpbmcgY29tcHV0ZV90ZXh0KE5hbWVzcGFjZU1hbmFnZXIgbnNtKQotICAgICAgICB7IHJldHVybiBfdmFsdWUgPT0gbnVsbCA/ICIiIDogX3ZhbHVlLnRvU3RyaW5nKCk7IH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHNldF90ZXh0KFN0cmluZyBzKQotICAgIHsKLSAgICAgICAgR0RhdGUgbmV3VmFsOwotICAgICAgICBpZiAoX3ZhbGlkYXRlT25TZXQoKSkKLSAgICAgICAgICAgIG5ld1ZhbCA9IHZhbGlkYXRlTGV4aWNhbChzLCBfc2NoZW1hVHlwZSwgX3Zvb3JWYyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ld1ZhbCA9IGxleChzLCBfc2NoZW1hVHlwZSwgX3Zvb3JWYyk7Ci0KLSAgICAgICAgaWYgKF92YWxpZGF0ZU9uU2V0KCkgJiYgbmV3VmFsICE9IG51bGwpCi0gICAgICAgICAgICB2YWxpZGF0ZVZhbHVlKG5ld1ZhbCwgX3NjaGVtYVR5cGUsIF92b29yVmMpOwotCi0gICAgICAgIF92YWx1ZSA9IG5ld1ZhbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEdEYXRlIGxleChTdHJpbmcgdiwgU2NoZW1hVHlwZSBzVHlwZSwgVmFsaWRhdGlvbkNvbnRleHQgY29udGV4dCkKLSAgICB7Ci0gICAgICAgIEdEYXRlIGRhdGUgPSBudWxsOwotICAgICAgICAKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRhdGUgPSBuZXcgR0RhdGUodik7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LmludmFsaWQoIkRhdGUgdmFsdWUgaXMgbWFsZm9ybWVkOiAiK3YpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRhdGUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGRhdGUuZ2V0QnVpbHRpblR5cGVDb2RlKCkgIT0gc1R5cGUuZ2V0UHJpbWl0aXZlVHlwZSgpLmdldEJ1aWx0aW5UeXBlQ29kZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgiRGF0ZSB2YWx1ZSBpcyBvZiB3cm9uZyB0eXBlOiAiICsgdik7Ci0gICAgICAgICAgICAgICAgZGF0ZSA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICghZGF0ZS5pc1ZhbGlkKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKCJEYXRlIHZhbHVlIGlzIGludmFsaWQ6ICIgKyB2KTsKLSAgICAgICAgICAgICAgICBkYXRlID0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBkYXRlOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgR0RhdGUgdmFsaWRhdGVMZXhpY2FsKFN0cmluZyB2LCBTY2hlbWFUeXBlIHNUeXBlLCBWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0KQotICAgIHsKLQotICAgICAgICBHRGF0ZSBkYXRlID0gbGV4KHYsIHNUeXBlLCBjb250ZXh0KTsKLQotICAgICAgICBpZiAoZGF0ZSAhPSBudWxsICYmIHNUeXBlLmhhc1BhdHRlcm5GYWNldCgpKQotICAgICAgICAgICAgaWYgKCFzVHlwZS5tYXRjaFBhdHRlcm5GYWNldCh2KSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmludmFsaWQoIkRhdGUgKCcgKyB2ICsgJykgZG9lcyBub3QgbWF0Y2ggcGF0dGVybiBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNUeXBlKSk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gZGF0ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgdmFsaWRhdGVWYWx1ZShHRGF0ZVNwZWNpZmljYXRpb24gdiwgU2NoZW1hVHlwZSBzVHlwZSwgVmFsaWRhdGlvbkNvbnRleHQgY29udGV4dCkKLSAgICB7Ci0gICAgICAgIFhtbE9iamVjdCB4OwotICAgICAgICBHRGF0ZSBnOwotICAgICAgICAKLSAgICAgICAgaWYgKHYuZ2V0QnVpbHRpblR5cGVDb2RlKCkgIT0gc1R5cGUuZ2V0UHJpbWl0aXZlVHlwZSgpLmdldEJ1aWx0aW5UeXBlQ29kZSgpKQotICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKCJEYXRlICgiICsgdiArICIpIGRvZXMgbm90IGhhdmUgdGhlIHNldCBvZiBmaWVsZHMgcmVxdWlyZWQgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkpOwotCi0gICAgICAgIGlmICgoeCA9IHNUeXBlLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfTUlOX0VYQ0xVU0lWRSkpICE9IG51bGwpCi0gICAgICAgICAgICBpZiAodi5jb21wYXJlVG9HRGF0ZShnID0gKChYbWxPYmplY3RCYXNlKXgpLmdEYXRlVmFsdWUoKSkgPD0gMCkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmludmFsaWQoIkRhdGUgKCIgKyB2ICsgIikgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIG1pbiBleGNsdXNpdmUgZmFjZXQgKCIgKyBnICsgIikgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkgKTsKLSAgICAgICAgCi0gICAgICAgIGlmICgoeCA9IHNUeXBlLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfTUlOX0lOQ0xVU0lWRSkpICE9IG51bGwpCi0gICAgICAgICAgICBpZiAodi5jb21wYXJlVG9HRGF0ZShnID0gKChYbWxPYmplY3RCYXNlKXgpLmdEYXRlVmFsdWUoKSkgPCAwKQotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgiRGF0ZSAoIiArIHYgKyAiKSBpcyBsZXNzIHRoYW4gbWluIGluY2x1c2l2ZSBmYWNldCAoIiArIGcgKyAiKSBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNUeXBlKSApOwotICAgICAgICAKLSAgICAgICAgaWYgKCh4ID0gc1R5cGUuZ2V0RmFjZXQoU2NoZW1hVHlwZS5GQUNFVF9NQVhfRVhDTFVTSVZFKSkgIT0gbnVsbCkKLSAgICAgICAgICAgIGlmICh2LmNvbXBhcmVUb0dEYXRlKGcgPSAoKFhtbE9iamVjdEJhc2UpeCkuZ0RhdGVWYWx1ZSgpKSA+PSAwKQotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgiRGF0ZSAoIiArIHYgKyAiKSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbWF4IGV4Y2x1c2l2ZSBmYWNldCAoIiArIGcgKyAiKSBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNUeXBlKSApOwotICAgICAgICAKLSAgICAgICAgaWYgKCh4ID0gc1R5cGUuZ2V0RmFjZXQoU2NoZW1hVHlwZS5GQUNFVF9NQVhfSU5DTFVTSVZFKSkgIT0gbnVsbCkKLSAgICAgICAgICAgIGlmICh2LmNvbXBhcmVUb0dEYXRlKGcgPSAoKFhtbE9iamVjdEJhc2UpeCkuZ0RhdGVWYWx1ZSgpKSA+IDApCi0gICAgICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKCJEYXRlICgiICsgdiArICIpIGlzIGdyZWF0ZXIgdGhhbiBtYXggaW5jbHVzaXZlIGZhY2V0ICgiICsgZyArICIpIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUoc1R5cGUpICk7Ci0gICAgICAgIAotICAgICAgICBYbWxPYmplY3RbXSB2YWxzID0gc1R5cGUuZ2V0RW51bWVyYXRpb25WYWx1ZXMoKTsKLSAgICAgICAgaWYgKHZhbHMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWxzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgICAgIGlmICh2LmNvbXBhcmVUb0dEYXRlKCgoWG1sT2JqZWN0QmFzZSl2YWxzW2ldKS5nRGF0ZVZhbHVlKCkpID09IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgiRGF0ZSAoIiArIHYgKyAiKSBpcyBub3QgYSB2YWxpZCBlbnVtZXJhdGlvbiB2YWx1ZSBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNUeXBlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfbmlsKCkKLSAgICB7Ci0gICAgICAgIF92YWx1ZSA9IG51bGw7Ci0gICAgfQotCi0gICAgLy8gbnVtZXJpY3M6IGdZZWFyLCBnTW9udGgsIGdEYXkgYWNjZXB0IGFuIGludGVnZXIKLSAgICBwdWJsaWMgaW50IGludFZhbHVlKCkKLSAgICB7Ci0gICAgICAgIGludCBjb2RlID0gc2NoZW1hVHlwZSgpLmdldFByaW1pdGl2ZVR5cGUoKS5nZXRCdWlsdGluVHlwZUNvZGUoKTsKLQotICAgICAgICBpZiAoY29kZSAhPSBTY2hlbWFUeXBlLkJUQ19HX0RBWSAmJgotICAgICAgICAgICAgICAgIGNvZGUgIT0gU2NoZW1hVHlwZS5CVENfR19NT05USCAmJgotICAgICAgICAgICAgICAgIGNvZGUgIT0gU2NoZW1hVHlwZS5CVENfR19ZRUFSKQotICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOwotCi0gICAgICAgIGNoZWNrX2RhdGVkKCk7Ci0KLSAgICAgICAgaWYgKF92YWx1ZSA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgc3dpdGNoIChjb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfREFZOgotICAgICAgICAgICAgICAgIHJldHVybiBfdmFsdWUuZ2V0RGF5KCk7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfTU9OVEg6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF92YWx1ZS5nZXRNb250aCgpOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX1lFQVI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF92YWx1ZS5nZXRZZWFyKCk7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIEdEYXRlIGdEYXRlVmFsdWUoKQotICAgIHsKLSAgICAgICAgY2hlY2tfZGF0ZWQoKTsKLQotICAgICAgICBpZiAoX3ZhbHVlID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICByZXR1cm4gX3ZhbHVlOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgQ2FsZW5kYXIgY2FsZW5kYXJWYWx1ZSgpCi0gICAgewotICAgICAgICBjaGVja19kYXRlZCgpOwotCi0gICAgICAgIGlmIChfdmFsdWUgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIHJldHVybiBfdmFsdWUuZ2V0Q2FsZW5kYXIoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRGF0ZSBkYXRlVmFsdWUoKQotICAgIHsKLSAgICAgICAgY2hlY2tfZGF0ZWQoKTsKLQotICAgICAgICBpZiAoX3ZhbHVlID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICByZXR1cm4gX3ZhbHVlLmdldERhdGUoKTsKLSAgICB9Ci0KLSAgICAvLyBzZXR0ZXJzCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X2ludChpbnQgdikKLSAgICB7Ci0gICAgICAgIGludCBjb2RlID0gc2NoZW1hVHlwZSgpLmdldFByaW1pdGl2ZVR5cGUoKS5nZXRCdWlsdGluVHlwZUNvZGUoKTsKLQotICAgICAgICBpZiAoY29kZSAhPSBTY2hlbWFUeXBlLkJUQ19HX0RBWSAmJgotICAgICAgICAgICAgICAgIGNvZGUgIT0gU2NoZW1hVHlwZS5CVENfR19NT05USCAmJgotICAgICAgICAgICAgICAgIGNvZGUgIT0gU2NoZW1hVHlwZS5CVENfR19ZRUFSKQotICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOwotCi0gICAgICAgIEdEYXRlQnVpbGRlciB2YWx1ZSA9IG5ldyBHRGF0ZUJ1aWxkZXIoKTsKLQotICAgICAgICBzd2l0Y2ggKGNvZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19EQVk6Ci0gICAgICAgICAgICAgICAgdmFsdWUuc2V0RGF5KHYpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19NT05USDoKLSAgICAgICAgICAgICAgICB2YWx1ZS5zZXRNb250aCh2KTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfWUVBUjoKLSAgICAgICAgICAgICAgICB2YWx1ZS5zZXRZZWFyKHYpOyBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChfdmFsaWRhdGVPblNldCgpKQotICAgICAgICAgICAgdmFsaWRhdGVWYWx1ZSh2YWx1ZSwgX3NjaGVtYVR5cGUsIF92b29yVmMpOwotCi0gICAgICAgIF92YWx1ZSA9IHZhbHVlLnRvR0RhdGUoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfR0RhdGUoR0RhdGVTcGVjaWZpY2F0aW9uIHYpCi0gICAgewotICAgICAgICBpbnQgY29kZSA9IHNjaGVtYVR5cGUoKS5nZXRQcmltaXRpdmVUeXBlKCkuZ2V0QnVpbHRpblR5cGVDb2RlKCk7Ci0KLSAgICAgICAgR0RhdGUgY2FuZGlkYXRlOwotCi0gICAgICAgIGlmICh2LmlzSW1tdXRhYmxlKCkgJiYgKHYgaW5zdGFuY2VvZiBHRGF0ZSkgJiYgdi5nZXRCdWlsdGluVHlwZUNvZGUoKSA9PSBjb2RlKQotICAgICAgICAgICAgY2FuZGlkYXRlID0gKEdEYXRlKXY7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgLy8gdHJ1bmNhdGUgZXh0cmEgZmllbGRzIGZyb20gdGhlIGRhdGUgaWYgbmVjZXNzYXJ5LgotICAgICAgICAgICAgaWYgKHYuZ2V0QnVpbHRpblR5cGVDb2RlKCkgIT0gY29kZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBHRGF0ZUJ1aWxkZXIgZ0RhdGVCdWlsZGVyID0gbmV3IEdEYXRlQnVpbGRlcih2KTsKLSAgICAgICAgICAgICAgICBnRGF0ZUJ1aWxkZXIuc2V0QnVpbHRpblR5cGVDb2RlKGNvZGUpOwotICAgICAgICAgICAgICAgIHYgPSBnRGF0ZUJ1aWxkZXI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYW5kaWRhdGUgPSBuZXcgR0RhdGUodik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoX3ZhbGlkYXRlT25TZXQoKSkKLSAgICAgICAgICAgIHZhbGlkYXRlVmFsdWUoY2FuZGlkYXRlLCBfc2NoZW1hVHlwZSwgX3Zvb3JWYyk7Ci0KLSAgICAgICAgX3ZhbHVlID0gY2FuZGlkYXRlOwotICAgIH0KLSAgICAKLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfQ2FsZW5kYXIoQ2FsZW5kYXIgYykKLSAgICB7Ci0gICAgICAgIGludCBjb2RlID0gc2NoZW1hVHlwZSgpLmdldFByaW1pdGl2ZVR5cGUoKS5nZXRCdWlsdGluVHlwZUNvZGUoKTsKLQotICAgICAgICBHRGF0ZUJ1aWxkZXIgZ0RhdGVCdWlsZGVyID0gbmV3IEdEYXRlQnVpbGRlcihjKTsKLSAgICAgICAgZ0RhdGVCdWlsZGVyLnNldEJ1aWx0aW5UeXBlQ29kZShjb2RlKTsKLSAgICAgICAgR0RhdGUgdmFsdWUgPSBnRGF0ZUJ1aWxkZXIudG9HRGF0ZSgpOwotIAotICAgICAgICBpZiAoX3ZhbGlkYXRlT25TZXQoKSkKLSAgICAgICAgICAgIHZhbGlkYXRlVmFsdWUodmFsdWUsIF9zY2hlbWFUeXBlLCBfdm9vclZjKTsKLQotICAgICAgICBfdmFsdWUgPSB2YWx1ZTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfRGF0ZShEYXRlIHYpCi0gICAgewotICAgICAgICBpbnQgY29kZSA9IHNjaGVtYVR5cGUoKS5nZXRQcmltaXRpdmVUeXBlKCkuZ2V0QnVpbHRpblR5cGVDb2RlKCk7Ci0KLSAgICAgICAgaWYgKGNvZGUgIT0gU2NoZW1hVHlwZS5CVENfREFURSAmJiBjb2RlICE9IFNjaGVtYVR5cGUuQlRDX0RBVEVfVElNRSB8fAotICAgICAgICAgICAgdiA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOwotCi0gICAgICAgIEdEYXRlQnVpbGRlciBnRGF0ZUJ1aWxkZXIgPSBuZXcgR0RhdGVCdWlsZGVyKHYpOwotICAgICAgICBnRGF0ZUJ1aWxkZXIuc2V0QnVpbHRpblR5cGVDb2RlKGNvZGUpOwotICAgICAgICBHRGF0ZSB2YWx1ZSA9IGdEYXRlQnVpbGRlci50b0dEYXRlKCk7Ci0gCi0gICAgICAgIGlmIChfdmFsaWRhdGVPblNldCgpKQotICAgICAgICAgICAgdmFsaWRhdGVWYWx1ZSh2YWx1ZSwgX3NjaGVtYVR5cGUsIF92b29yVmMpOwotCi0gICAgICAgIF92YWx1ZSA9IHZhbHVlOwotICAgIH0KLQotCi0gICAgLy8gY29tcGFyYXRvcnMKLSAgICBwcm90ZWN0ZWQgaW50IGNvbXBhcmVfdG8oWG1sT2JqZWN0IG9iaikKLSAgICB7Ci0gICAgICAgIHJldHVybiBfdmFsdWUuY29tcGFyZVRvR0RhdGUoKChYbWxPYmplY3RCYXNlKW9iaikuZ0RhdGVWYWx1ZSgpKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBlcXVhbF90byhYbWxPYmplY3Qgb2JqKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF92YWx1ZS5lcXVhbHMoKChYbWxPYmplY3RCYXNlKW9iaikuZ0RhdGVWYWx1ZSgpKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgaW50IHZhbHVlX2hhc2hfY29kZSgpCi0gICAgewotICAgICAgICByZXR1cm4gX3ZhbHVlLmhhc2hDb2RlKCk7Ci0gICAgfQotICAgIAotICAgIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlX3NpbXBsZXZhbChTdHJpbmcgbGV4aWNhbCwgVmFsaWRhdGlvbkNvbnRleHQgY3R4KQotICAgIHsKLSAgICAgICAgdmFsaWRhdGVMZXhpY2FsKGxleGljYWwsIHNjaGVtYVR5cGUoKSwgY3R4KTsKLSAgICAgICAgdmFsaWRhdGVWYWx1ZShnRGF0ZVZhbHVlKCksIHNjaGVtYVR5cGUoKSwgY3R4KTsKLSAgICB9Ci0gICAgCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhR0R1cmF0aW9uSG9sZGVyRXguamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL0phdmFHRHVyYXRpb25Ib2xkZXJFeC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjZhMTUyLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL0phdmFHRHVyYXRpb25Ib2xkZXJFeC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uU3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5WYWxpZGF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlFOYW1lSGVscGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSmF2YUdEdXJhdGlvbkhvbGRlckV4IGV4dGVuZHMgWG1sT2JqZWN0QmFzZQotewotICAgIHB1YmxpYyBKYXZhR0R1cmF0aW9uSG9sZGVyRXgoU2NoZW1hVHlwZSB0eXBlLCBib29sZWFuIGNvbXBsZXgpCi0gICAgICAgIHsgX3NjaGVtYVR5cGUgPSB0eXBlOyBpbml0Q29tcGxleFR5cGUoY29tcGxleCwgZmFsc2UpOyB9Ci0KLSAgICBHRHVyYXRpb24gX3ZhbHVlOwotICAgIHByaXZhdGUgU2NoZW1hVHlwZSBfc2NoZW1hVHlwZTsKLQotICAgIHB1YmxpYyBTY2hlbWFUeXBlIHNjaGVtYVR5cGUoKSB7IHJldHVybiBfc2NoZW1hVHlwZTsgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X3RleHQoU3RyaW5nIHMpCi0gICAgewotICAgICAgICBHRHVyYXRpb24gbmV3VmFsOwotICAgICAgICBpZiAoX3ZhbGlkYXRlT25TZXQoKSkKLSAgICAgICAgICAgIG5ld1ZhbCA9IHZhbGlkYXRlTGV4aWNhbChzLCBfc2NoZW1hVHlwZSwgX3Zvb3JWYyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ld1ZhbCA9IGxleChzLCBfdm9vclZjKTsKLQotICAgICAgICBpZiAoX3ZhbGlkYXRlT25TZXQoKSAmJiBuZXdWYWwgIT0gbnVsbCkKLSAgICAgICAgICAgIHZhbGlkYXRlVmFsdWUobmV3VmFsLCBfc2NoZW1hVHlwZSwgX3Zvb3JWYyk7Ci0KLSAgICAgICAgX3ZhbHVlID0gbmV3VmFsOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHNldF9HRHVyYXRpb24oR0R1cmF0aW9uU3BlY2lmaWNhdGlvbiB2KQotICAgIHsKLSAgICAgICAgaWYgKF92YWxpZGF0ZU9uU2V0KCkpCi0gICAgICAgICAgICB2YWxpZGF0ZVZhbHVlKHYsIF9zY2hlbWFUeXBlLCBfdm9vclZjKTsKLSAgICAgICAgCi0gICAgICAgIGlmICh2LmlzSW1tdXRhYmxlKCkgJiYgKHYgaW5zdGFuY2VvZiBHRHVyYXRpb24pKQotICAgICAgICAgICAgX3ZhbHVlID0gKEdEdXJhdGlvbil2OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBfdmFsdWUgPSBuZXcgR0R1cmF0aW9uKHYpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBTdHJpbmcgY29tcHV0ZV90ZXh0KE5hbWVzcGFjZU1hbmFnZXIgbnNtKQotICAgICAgICB7IHJldHVybiBfdmFsdWUgPT0gbnVsbCA/ICIiIDogX3ZhbHVlLnRvU3RyaW5nKCk7IH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHNldF9uaWwoKQotICAgIHsKLSAgICAgICAgX3ZhbHVlID0gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgR0R1cmF0aW9uIGdEdXJhdGlvblZhbHVlKCkKLSAgICB7Ci0gICAgICAgIGNoZWNrX2RhdGVkKCk7Ci0KLSAgICAgICAgcmV0dXJuIF92YWx1ZSA9PSBudWxsID8gbnVsbCA6IF92YWx1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEdEdXJhdGlvbiBsZXgoU3RyaW5nIHYsIFZhbGlkYXRpb25Db250ZXh0IGNvbnRleHQpCi0gICAgewotICAgICAgICBHRHVyYXRpb24gZHVyYXRpb24gPSBudWxsOwotICAgICAgICAKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGR1cmF0aW9uID0gbmV3IEdEdXJhdGlvbih2KTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgiRHVyYXRpb24gdmFsdWUgaXMgbWFsZm9ybWVkOiAiK3YpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGR1cmF0aW9uOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgR0R1cmF0aW9uIHZhbGlkYXRlTGV4aWNhbChTdHJpbmcgdiwgU2NoZW1hVHlwZSBzVHlwZSwgVmFsaWRhdGlvbkNvbnRleHQgY29udGV4dCkKLSAgICB7Ci0gICAgICAgIEdEdXJhdGlvbiBkdXJhdGlvbiA9IGxleCh2LCBjb250ZXh0KTsKLQotICAgICAgICBpZiAoZHVyYXRpb24gIT0gbnVsbCAmJiBzVHlwZS5oYXNQYXR0ZXJuRmFjZXQoKSkKLSAgICAgICAgICAgIGlmICghc1R5cGUubWF0Y2hQYXR0ZXJuRmFjZXQodikpCi0gICAgICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKCJEdXJhdGlvbiAoIiArIHYgKyAiKSBkb2VzIG5vdCBtYXRjaCBwYXR0ZXJuIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUoc1R5cGUpKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBkdXJhdGlvbjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgdmFsaWRhdGVWYWx1ZShHRHVyYXRpb25TcGVjaWZpY2F0aW9uIHYsIFNjaGVtYVR5cGUgc1R5cGUsIFZhbGlkYXRpb25Db250ZXh0IGNvbnRleHQpCi0gICAgewotICAgICAgICBYbWxPYmplY3QgeDsKLSAgICAgICAgR0R1cmF0aW9uIGc7Ci0gICAgICAgIAotICAgICAgICBpZiAoKHggPSBzVHlwZS5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX01JTl9FWENMVVNJVkUpKSAhPSBudWxsKQotICAgICAgICAgICAgaWYgKHYuY29tcGFyZVRvR0R1cmF0aW9uKGcgPSAoKFhtbE9iamVjdEJhc2UpeCkuZ0R1cmF0aW9uVmFsdWUoKSkgPD0gMCkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmludmFsaWQoIkR1cmF0aW9uICgiICsgdiArICIpIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBtaW4gZXhjbHVzaXZlIGZhY2V0ICgiICsgZyArICIpIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUoc1R5cGUpICk7Ci0gICAgICAgIAotICAgICAgICBpZiAoKHggPSBzVHlwZS5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX01JTl9JTkNMVVNJVkUpKSAhPSBudWxsKQotICAgICAgICAgICAgaWYgKHYuY29tcGFyZVRvR0R1cmF0aW9uKGcgPSAoKFhtbE9iamVjdEJhc2UpeCkuZ0R1cmF0aW9uVmFsdWUoKSkgPCAwKQotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgiRHVyYXRpb24gKCIgKyB2ICsgIikgaXMgbGVzcyB0aGFuIG1pbiBpbmNsdXNpdmUgZmFjZXQgKCIgKyBnICsgIikgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkgKTsKLSAgICAgICAgCi0gICAgICAgIGlmICgoeCA9IHNUeXBlLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfTUFYX0VYQ0xVU0lWRSkpICE9IG51bGwpCi0gICAgICAgICAgICBpZiAodi5jb21wYXJlVG9HRHVyYXRpb24oZyA9ICgoWG1sT2JqZWN0QmFzZSl4KS5nRHVyYXRpb25WYWx1ZSgpKSA+PSAwKQotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgiRHVyYXRpb24gKCIgKyB2ICsgIikgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIG1heCBleGNsdXNpdmUgZmFjZXQgKCIgKyBnICsgIikgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkgKTsKLSAgICAgICAgCi0gICAgICAgIGlmICgoeCA9IHNUeXBlLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfTUFYX0lOQ0xVU0lWRSkpICE9IG51bGwpCi0gICAgICAgICAgICBpZiAodi5jb21wYXJlVG9HRHVyYXRpb24oZyA9ICgoWG1sT2JqZWN0QmFzZSl4KS5nRHVyYXRpb25WYWx1ZSgpKSA+IDApCi0gICAgICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKCJEdXJhdGlvbiAoIiArIHYgKyAiKSBpcyBncmVhdGVyIHRoYW4gbWF4IGluY2x1c2l2ZSBmYWNldCAoIiArIGcgKyAiKSBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNUeXBlKSApOwotICAgICAgICAKLSAgICAgICAgWG1sT2JqZWN0W10gdmFscyA9IHNUeXBlLmdldEVudW1lcmF0aW9uVmFsdWVzKCk7Ci0gICAgICAgIGlmICh2YWxzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFscy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICBpZiAodi5jb21wYXJlVG9HRHVyYXRpb24oKChYbWxPYmplY3RCYXNlKXZhbHNbaV0pLmdEdXJhdGlvblZhbHVlKCkpID09IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgiRHVyYXRpb24gKCIgKyB2ICsgIikgaXMgbm90IGEgdmFsaWQgZW51bWVyYXRpb24gdmFsdWUgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHByb3RlY3RlZCBpbnQgY29tcGFyZV90byhYbWxPYmplY3QgZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfdmFsdWUuY29tcGFyZVRvR0R1cmF0aW9uKCgoWG1sT2JqZWN0QmFzZSkgZCkuZ0R1cmF0aW9uVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIGJvb2xlYW4gZXF1YWxfdG8oWG1sT2JqZWN0IGQpCi0gICAgewotICAgICAgICByZXR1cm4gX3ZhbHVlLmVxdWFscygoKFhtbE9iamVjdEJhc2UpIGQpLmdEdXJhdGlvblZhbHVlKCkpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBpbnQgdmFsdWVfaGFzaF9jb2RlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfdmFsdWUuaGFzaENvZGUoKTsKLSAgICB9Ci0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgdmFsaWRhdGVfc2ltcGxldmFsKFN0cmluZyBsZXhpY2FsLCBWYWxpZGF0aW9uQ29udGV4dCBjdHgpCi0gICAgewotICAgICAgICB2YWxpZGF0ZUxleGljYWwobGV4aWNhbCwgc2NoZW1hVHlwZSgpLCBjdHgpOwotICAgICAgICB2YWxpZGF0ZVZhbHVlKGdEdXJhdGlvblZhbHVlKCksIHNjaGVtYVR5cGUoKSwgY3R4KTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhSGV4QmluYXJ5SG9sZGVyLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhSGV4QmluYXJ5SG9sZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZGJmZjcuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YUhleEJpbmFyeUhvbGRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk1ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zY2hlbWEuQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW07Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudXRpbC5IZXhCaW47Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxIZXhCaW5hcnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uVmFsaWRhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5RTmFtZUhlbHBlcjsKLQotaW1wb3J0IGphdmEuc2VjdXJpdHkuTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuc2VjdXJpdHkuTWVzc2FnZURpZ2VzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIEphdmFIZXhCaW5hcnlIb2xkZXIgZXh0ZW5kcyBYbWxPYmplY3RCYXNlCi17Ci0gICAgcHVibGljIFNjaGVtYVR5cGUgc2NoZW1hVHlwZSgpCi0gICAgICAgIHsgcmV0dXJuIEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLlNUX0hFWF9CSU5BUlk7IH0KLQotICAgIHByb3RlY3RlZCBieXRlW10gX3ZhbHVlOwotCi0gICAgLy8gU0lNUExFIFZBTFVFIEFDQ0VTU09SUyBCRUxPVyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvLyBnZXRzIHJhdyB0ZXh0IHZhbHVlCi0gICAgcHJvdGVjdGVkIFN0cmluZyBjb21wdXRlX3RleHQoTmFtZXNwYWNlTWFuYWdlciBuc20pCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhIZXhCaW4uZW5jb2RlKF92YWx1ZSkpOwotICAgIH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfdGV4dChTdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIF9oYXNoY2FjaGVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChfdmFsaWRhdGVPblNldCgpKQotICAgICAgICAgICAgX3ZhbHVlID0gdmFsaWRhdGVMZXhpY2FsKHMsIHNjaGVtYVR5cGUoKSwgX3Zvb3JWYyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIF92YWx1ZSA9IGxleChzLCBfdm9vclZjKTsKLSAgICB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X25pbCgpCi0gICAgewotICAgICAgICBfaGFzaGNhY2hlZCA9IGZhbHNlOwotICAgICAgICBfdmFsdWUgPSBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgYnl0ZVtdIGxleChTdHJpbmcgdiwgVmFsaWRhdGlvbkNvbnRleHQgY29udGV4dCkKLSAgICB7Ci0gICAgICAgIGJ5dGVbXSB2Qnl0ZXMgPSBudWxsOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgdkJ5dGVzID0gdi5nZXRCeXRlcygiVVRGLTgiKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIHVlZSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gc2hvdWxkIG5ldmVyIGhhcHBlbiAtIFVURi04IGlzIGFsd2F5cyBzdXBwb3J0ZWQKLSAgICAgICAgfQotICAgICAgICBieXRlW10gYnl0ZXMgPSBIZXhCaW4uZGVjb2RlKHZCeXRlcyk7Ci0KLSAgICAgICAgaWYgKGJ5dGVzID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFRPRE8gLSBnZXQgYSBkZWNlbnQgZXJyb3Igd2l0aCBsaW5lIG51bWJlcnMgYW5kIHN1Y2ggaGVyZQotICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKCJIZXggZW5jb2RlZCBkYXRhIG5vdCBlbmNvZGVkIHByb3Blcmx5Iik7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gYnl0ZXM7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBieXRlW10gdmFsaWRhdGVMZXhpY2FsKFN0cmluZyB2LCBTY2hlbWFUeXBlIHNUeXBlLCBWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0KQotICAgIHsKLSAgICAgICAgYnl0ZVtdIGJ5dGVzID0gbGV4KHYsIGNvbnRleHQpOwotCi0gICAgICAgIGlmIChieXRlcyA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXNUeXBlLm1hdGNoUGF0dGVybkZhY2V0KHYpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LmludmFsaWQoICJIZXggZW5jb2RlZCBkYXRhIGRvZXMgbm90IG1hdGNoIHBhdHRlcm4gZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkpOwotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gYnl0ZXM7Ci0gICAgfQotCi0gICAgcHVibGljIGJ5dGVbXSBieXRlQXJyYXlWYWx1ZSgpCi0gICAgewotICAgICAgICBjaGVja19kYXRlZCgpOwotICAgICAgICBpZiAoX3ZhbHVlID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICBieXRlW10gcmVzdWx0ID0gbmV3IGJ5dGVbX3ZhbHVlLmxlbmd0aF07Ci0gICAgICAgIFN5c3RlbS5hcnJheWNvcHkoX3ZhbHVlLCAwLCByZXN1bHQsIDAsIF92YWx1ZS5sZW5ndGgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8vIHNldHRlcnMKLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfQnl0ZUFycmF5KGJ5dGVbXSBiYSkKLSAgICB7Ci0gICAgICAgIF9oYXNoY2FjaGVkID0gZmFsc2U7Ci0gICAgICAgIF92YWx1ZSA9IG5ldyBieXRlW2JhLmxlbmd0aF07Ci0gICAgICAgIFN5c3RlbS5hcnJheWNvcHkoYmEsIDAsIF92YWx1ZSwgMCwgYmEubGVuZ3RoKTsKLSAgICB9Ci0KLSAgICAvLyBjb21wYXJhdG9ycwotICAgIHByb3RlY3RlZCBib29sZWFuIGVxdWFsX3RvKFhtbE9iamVjdCBpKQotICAgIHsKLSAgICAgICAgYnl0ZVtdIGl2YWwgPSAoKFhtbEhleEJpbmFyeSkgaSkuZ2V0Qnl0ZUFycmF5VmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIEFycmF5cy5lcXVhbHMoX3ZhbHVlLCBpdmFsKTsKLSAgICB9Ci0KLSAgICAvL2JlY2F1c2UgY29tcHV0aW5nIGhhc2hjb2RlIGlzIGV4cGVuc2l2ZSB3ZSdsbCBjYWNoZSBpdAotICAgIHByb3RlY3RlZCBib29sZWFuIF9oYXNoY2FjaGVkID0gZmFsc2U7Ci0gICAgcHJvdGVjdGVkIGludCBoYXNoY29kZSA9IDA7Ci0gICAgcHJvdGVjdGVkIHN0YXRpYyBNZXNzYWdlRGlnZXN0IG1kNTsKLSAgICBzdGF0aWMKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBtZDUgPSBNZXNzYWdlRGlnZXN0LmdldEluc3RhbmNlKCJNRDUiKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCggTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uIGUgKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDYW5ub3QgZmluZCBNRDUgaGFzaCBBbGdvcml0aG0iKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCBpbnQgdmFsdWVfaGFzaF9jb2RlKCkKLSAgICB7Ci0gICAgICAgIGlmKCBfaGFzaGNhY2hlZCApCi0gICAgICAgICAgICByZXR1cm4gaGFzaGNvZGU7Ci0KLSAgICAgICAgX2hhc2hjYWNoZWQgPSB0cnVlOwotCi0gICAgICAgIGlmKCBfdmFsdWUgPT0gbnVsbCApCi0gICAgICAgICAgICByZXR1cm4gaGFzaGNvZGUgPSAwOwotCi0gICAgICAgIGJ5dGVbXSByZXMgPSBtZDUuZGlnZXN0KF92YWx1ZSk7Ci0gICAgICAgIHJldHVybiBoYXNoY29kZSA9IHJlc1swXTw8MjQgKyByZXNbMV08PDE2ICsgcmVzWzJdPDw4ICsgcmVzWzNdOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YUhleEJpbmFyeUhvbGRlckV4LmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhSGV4QmluYXJ5SG9sZGVyRXguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDkwY2E5Yi4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhSGV4QmluYXJ5SG9sZGVyRXguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5WYWxpZGF0aW9uQ29udGV4dDsKLQotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSmF2YUhleEJpbmFyeUhvbGRlckV4IGV4dGVuZHMgSmF2YUhleEJpbmFyeUhvbGRlcgotewotICAgIHByaXZhdGUgU2NoZW1hVHlwZSBfc2NoZW1hVHlwZTsKLQotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgc2NoZW1hVHlwZSgpCi0gICAgICAgIHsgcmV0dXJuIF9zY2hlbWFUeXBlOyB9Ci0KLSAgICBwdWJsaWMgSmF2YUhleEJpbmFyeUhvbGRlckV4KFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IF9zY2hlbWFUeXBlID0gdHlwZTsgaW5pdENvbXBsZXhUeXBlKGNvbXBsZXgsIGZhbHNlKTsgfQotCi0gICAgcHJvdGVjdGVkIGludCBnZXRfd3NjYW5vbl9ydWxlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzY2hlbWFUeXBlKCkuZ2V0V2hpdGVTcGFjZVJ1bGUoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfdGV4dChTdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIGJ5dGVbXSB2OwotCi0gICAgICAgIGlmIChfdmFsaWRhdGVPblNldCgpKQotICAgICAgICAgICAgdiA9IHZhbGlkYXRlTGV4aWNhbChzLCBzY2hlbWFUeXBlKCksIF92b29yVmMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2ID0gbGV4KHMsIF92b29yVmMpOwotCi0gICAgICAgIGlmIChfdmFsaWRhdGVPblNldCgpICYmIHYgIT0gbnVsbCkKLSAgICAgICAgICAgIHZhbGlkYXRlVmFsdWUodiwgc2NoZW1hVHlwZSgpLCBYbWxPYmplY3RCYXNlLl92b29yVmMpOwotICAgICAgICAKLSAgICAgICAgc3VwZXIuc2V0X0J5dGVBcnJheSh2KTsKLQotICAgICAgICBfdmFsdWUgPSB2OwotICAgIH0KLQotICAgIC8vIHNldHRlcnMKLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfQnl0ZUFycmF5KGJ5dGVbXSB2KQotICAgIHsKLSAgICAgICAgaWYgKF92YWxpZGF0ZU9uU2V0KCkpCi0gICAgICAgICAgICB2YWxpZGF0ZVZhbHVlKHYsIHNjaGVtYVR5cGUoKSwgX3Zvb3JWYyk7Ci0gICAgICAgIAotICAgICAgICBzdXBlci5zZXRfQnl0ZUFycmF5KHYpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB2YWxpZGF0ZVZhbHVlKGJ5dGVbXSB2LCBTY2hlbWFUeXBlIHNUeXBlLCBWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0KQotICAgIHsKLSAgICAgICAgaW50IGk7Ci0gICAgICAgIFhtbE9iamVjdCBvOwotCi0gICAgICAgIGlmICgobyA9IHNUeXBlLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfTEVOR1RIKSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKChpID0gKChYbWxPYmplY3RCYXNlKW8pLmJpZ0ludGVnZXJWYWx1ZSgpLmludFZhbHVlKCkpICE9IHYubGVuZ3RoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgKLSAgICAgICAgICAgICAgICAgICAgIkhleCBlbmNvZGVkIGRhdGEgZG9lcyBub3QgaGF2ZSAiICsgaSArCi0gICAgICAgICAgICAgICAgICAgICAgICAiIGJ5dGVzIHBlciBsZW5ndGggZmFjZXQiICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKG8gPSBzVHlwZS5nZXRGYWNldCggU2NoZW1hVHlwZS5GQUNFVF9NSU5fTEVOR1RIICkpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICgoaSA9ICgoWG1sT2JqZWN0QmFzZSlvKS5iaWdJbnRlZ2VyVmFsdWUoKS5pbnRWYWx1ZSgpKSA+IHYubGVuZ3RoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgKLSAgICAgICAgICAgICAgICAgICAgIkhleCBlbmNvZGVkIGRhdGEgaGFzIG9ubHkgIiArIHYubGVuZ3RoICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIgYnl0ZXMsIGZld2VyIHRoYW4gbWluIGxlbmd0aCBmYWNldCIgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICgobyA9IHNUeXBlLmdldEZhY2V0KCBTY2hlbWFUeXBlLkZBQ0VUX01BWF9MRU5HVEggKSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKChpID0gKChYbWxPYmplY3RCYXNlKW8pLmJpZ0ludGVnZXJWYWx1ZSgpLmludFZhbHVlKCkpIDwgdi5sZW5ndGgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKAotICAgICAgICAgICAgICAgICAgICAiSGV4IGVuY29kZWQgZGF0YSBoYXMgIiArIHYubGVuZ3RoICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIgYnl0ZXMsIG1vcmUgdGhhbiBtYXggbGVuZ3RoIGZhY2V0IiApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBYbWxPYmplY3RbXSB2YWxzID0gc1R5cGUuZ2V0RW51bWVyYXRpb25WYWx1ZXMoKTsKLQotICAgICAgICBpZiAodmFscyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbnVtTG9vcDogZm9yICggaSA9IDAgOyBpIDwgdmFscy5sZW5ndGggOyBpKysgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJ5dGVbXSBlbnVtQnl0ZXMgPSAoKFhtbE9iamVjdEJhc2UpdmFsc1tpXSkuYnl0ZUFycmF5VmFsdWUoKTsKLQotICAgICAgICAgICAgICAgIGlmIChlbnVtQnl0ZXMubGVuZ3RoICE9IHYubGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIGZvciAoIGludCBqID0gMCA7IGogPCBlbnVtQnl0ZXMubGVuZ3RoIDsgaisrICkKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVudW1CeXRlc1tqXSAhPSB2W2pdKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgZW51bUxvb3A7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpID49IHZhbHMubGVuZ3RoKQotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgiSGV4IGVuY29kZWQgZGF0YSBkb2VzIG5vdCBtYXRjaCBhbnkgb2YgdGhlIGVudW1lcmF0aW9uIHZhbHVlcyIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgdmFsaWRhdGVfc2ltcGxldmFsKFN0cmluZyBsZXhpY2FsLCBWYWxpZGF0aW9uQ29udGV4dCBjdHgpCi0gICAgewotICAgICAgICB2YWxpZGF0ZUxleGljYWwobGV4aWNhbCwgc2NoZW1hVHlwZSgpLCBjdHgpOwotICAgICAgICB2YWxpZGF0ZVZhbHVlKGJ5dGVBcnJheVZhbHVlKCksIHNjaGVtYVR5cGUoKSwgY3R4KTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhSW50SG9sZGVyLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhSW50SG9sZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhMTdjYmQuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YUludEhvbGRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNpbXBsZVZhbHVlOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7Ci1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hLkJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSmF2YUludEhvbGRlciBleHRlbmRzIFhtbE9iamVjdEJhc2UKLXsKLSAgICBwdWJsaWMgU2NoZW1hVHlwZSBzY2hlbWFUeXBlKCkKLSAgICAgICAgeyByZXR1cm4gQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfSU5UOyB9Ci0KLSAgICBwcml2YXRlIGludCBfdmFsdWU7Ci0KLSAgICAvLyBTSU1QTEUgVkFMVUUgQUNDRVNTT1JTIEJFTE9XIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8vIGdldHMgcmF3IHRleHQgdmFsdWUKLSAgICBwdWJsaWMgU3RyaW5nIGNvbXB1dGVfdGV4dChOYW1lc3BhY2VNYW5hZ2VyIG5zbSkgeyByZXR1cm4gTG9uZy50b1N0cmluZyhfdmFsdWUpOyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X3RleHQoU3RyaW5nIHMpCi0gICAgewotICAgICAgICB0cnkgeyBzZXRfaW50KEludGVnZXIucGFyc2VJbnQocykpOyB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeyB0aHJvdyBuZXcgWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uKCk7IH0KLSAgICB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X25pbCgpCi0gICAgewotICAgICAgICBfdmFsdWUgPSAwOwotICAgIH0KLSAgICAvLyBudW1lcmljczogZnJhY3Rpb25hbAotICAgIHB1YmxpYyBCaWdEZWNpbWFsIGJpZ0RlY2ltYWxWYWx1ZSgpIHsgY2hlY2tfZGF0ZWQoKTsgcmV0dXJuIG5ldyBCaWdEZWNpbWFsKF92YWx1ZSk7IH0KLSAgICBwdWJsaWMgQmlnSW50ZWdlciBiaWdJbnRlZ2VyVmFsdWUoKSB7IGNoZWNrX2RhdGVkKCk7IHJldHVybiBCaWdJbnRlZ2VyLnZhbHVlT2YoX3ZhbHVlKTsgfQotICAgIHB1YmxpYyBsb25nIGxvbmdWYWx1ZSgpIHsgY2hlY2tfZGF0ZWQoKTsgcmV0dXJuIF92YWx1ZTsgfQotICAgIHB1YmxpYyBpbnQgaW50VmFsdWUoKSB7IGNoZWNrX2RhdGVkKCk7IHJldHVybiBfdmFsdWU7IH0KLQotICAgIHN0YXRpYyBmaW5hbCBCaWdJbnRlZ2VyIF9tYXggPSBCaWdJbnRlZ2VyLnZhbHVlT2YoSW50ZWdlci5NQVhfVkFMVUUpOwotICAgIHN0YXRpYyBmaW5hbCBCaWdJbnRlZ2VyIF9taW4gPSBCaWdJbnRlZ2VyLnZhbHVlT2YoSW50ZWdlci5NSU5fVkFMVUUpOwotCi0gICAgLy8gc2V0dGVycwotICAgIHByb3RlY3RlZCB2b2lkIHNldF9CaWdEZWNpbWFsKEJpZ0RlY2ltYWwgdikgeyBzZXRfQmlnSW50ZWdlcih2LnRvQmlnSW50ZWdlcigpKTsgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldF9CaWdJbnRlZ2VyKEJpZ0ludGVnZXIgdikKLSAgICB7Ci0gICAgICAgIGlmICh2LmNvbXBhcmVUbyhfbWF4KSA+IDAgfHwgdi5jb21wYXJlVG8oX21pbikgPCAwKQotICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOwotICAgICAgICBzZXRfaW50KHYuaW50VmFsdWUoKSk7Ci0gICAgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldF9sb25nKGxvbmcgbCkKLSAgICB7Ci0gICAgICAgIGlmIChsID4gSW50ZWdlci5NQVhfVkFMVUUgfHwgbCA8IEludGVnZXIuTUlOX1ZBTFVFKQotICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOwotICAgICAgICBzZXRfaW50KChpbnQpbCk7Ci0gICAgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldF9pbnQoaW50IGkpCi0gICAgewotICAgICAgICBfdmFsdWUgPSBpOwotICAgIH0KLQotICAgIC8vIGNvbXBhcmF0b3JzCi0gICAgcHJvdGVjdGVkIGludCBjb21wYXJlX3RvKFhtbE9iamVjdCBpKQotICAgIHsKLSAgICAgICAgaWYgKCgoU2ltcGxlVmFsdWUpaSkuaW5zdGFuY2VUeXBlKCkuZ2V0RGVjaW1hbFNpemUoKSA+IFNjaGVtYVR5cGUuU0laRV9JTlQpCi0gICAgICAgICAgICByZXR1cm4gLWkuY29tcGFyZVRvKHRoaXMpOwotCi0gICAgICAgIHJldHVybiBfdmFsdWUgPT0gKChYbWxPYmplY3RCYXNlKWkpLmludFZhbHVlKCkgPyAwIDoKLSAgICAgICAgICAgICAgIF92YWx1ZSA8ICgoWG1sT2JqZWN0QmFzZSlpKS5pbnRWYWx1ZSgpID8gLTEgOiAxOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBib29sZWFuIGVxdWFsX3RvKFhtbE9iamVjdCBpKQotICAgIHsKLSAgICAgICAgaWYgKCgoU2ltcGxlVmFsdWUpaSkuaW5zdGFuY2VUeXBlKCkuZ2V0RGVjaW1hbFNpemUoKSA+IFNjaGVtYVR5cGUuU0laRV9JTlQpCi0gICAgICAgICAgICByZXR1cm4gaS52YWx1ZUVxdWFscyh0aGlzKTsKLQotICAgICAgICByZXR1cm4gX3ZhbHVlID09ICgoWG1sT2JqZWN0QmFzZSlpKS5pbnRWYWx1ZSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIE5vdGUsIHRoaXMgaXMgY2FyZWZ1bGx5IGFsaWduZWQgd2l0aCBoYXNoIGNvZGVzIGZvciBhbGwgeHNkOmRlY2ltYWwKLSAgICAgKiBwcmltaXRpdmVzLgotICAgICAqLwotICAgIHByb3RlY3RlZCBpbnQgdmFsdWVfaGFzaF9jb2RlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfdmFsdWU7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YUludEhvbGRlckV4LmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhSW50SG9sZGVyRXguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNjY2JhZi4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhSW50SG9sZGVyRXguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5WYWxpZGF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlFOYW1lSGVscGVyOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSmF2YUludEhvbGRlckV4IGV4dGVuZHMgSmF2YUludEhvbGRlcgotewotICAgIHB1YmxpYyBKYXZhSW50SG9sZGVyRXgoU2NoZW1hVHlwZSB0eXBlLCBib29sZWFuIGNvbXBsZXgpCi0gICAgICAgIHsgX3NjaGVtYVR5cGUgPSB0eXBlOyBpbml0Q29tcGxleFR5cGUoY29tcGxleCwgZmFsc2UpOyB9Ci0gICAgICAgIAotICAgIHByaXZhdGUgU2NoZW1hVHlwZSBfc2NoZW1hVHlwZTsKLQotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgc2NoZW1hVHlwZSgpCi0gICAgICAgIHsgcmV0dXJuIF9zY2hlbWFUeXBlOyB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfdGV4dChTdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIGludCB2OwotCi0gICAgICAgIHRyeSB7IHYgPSBJbnRlZ2VyLnBhcnNlSW50KHMpOyB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeyB0aHJvdyBuZXcgWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uKCk7IH0KLSAgICAgICAgCi0gICAgICAgIGlmIChfdmFsaWRhdGVPblNldCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICB2YWxpZGF0ZVZhbHVlKHYsIF9zY2hlbWFUeXBlLCBfdm9vclZjKTsKLSAgICAgICAgICAgIHZhbGlkYXRlTGV4aWNhbChzLCBfc2NoZW1hVHlwZSwgX3Zvb3JWYyk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdXBlci5zZXRfaW50KHYpOwotICAgIH0KLSAgICAKLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfaW50KGludCB2KQotICAgIHsKLSAgICAgICAgaWYgKF92YWxpZGF0ZU9uU2V0KCkpCi0gICAgICAgICAgICB2YWxpZGF0ZVZhbHVlKHYsIF9zY2hlbWFUeXBlLCBfdm9vclZjKTsKLQotICAgICAgICBzdXBlci5zZXRfaW50KHYpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgdmFsaWRhdGVMZXhpY2FsKFN0cmluZyB2LCBTY2hlbWFUeXBlIHNUeXBlLCBWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0KQotICAgIHsKLSAgICAgICAgSmF2YURlY2ltYWxIb2xkZXIudmFsaWRhdGVMZXhpY2FsKHYsIGNvbnRleHQpOwotICAgICAgICAKLSAgICAgICAgLy8gY2hlY2sgcGF0dGVybgotICAgICAgICBpZiAoc1R5cGUuaGFzUGF0dGVybkZhY2V0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghc1R5cGUubWF0Y2hQYXR0ZXJuRmFjZXQodikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKCJJbnRlZ2VyICgiICsgdiArICIpIGRvZXMgbm90IG1hdGNoIHBhdHRlcm4gZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgdmFsaWRhdGVWYWx1ZShpbnQgdiwgU2NoZW1hVHlwZSBzVHlwZSwgVmFsaWRhdGlvbkNvbnRleHQgY29udGV4dCkKLSAgICB7Ci0gICAgICAgIC8vIHRvdGFsIGRpZ2l0cwotICAgICAgICBYbWxPYmplY3QgdGQgPSBzVHlwZS5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX1RPVEFMX0RJR0lUUyk7Ci0gICAgICAgIGlmICh0ZCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgdGVtcCA9IEludGVnZXIudG9TdHJpbmcodik7Ci0gICAgICAgICAgICBpbnQgbGVuID0gdGVtcC5sZW5ndGgoKTsKLSAgICAgICAgICAgIGlmIChsZW4gPiAwICYmIHRlbXAuY2hhckF0KDApID09ICctJykKLSAgICAgICAgICAgICAgICBsZW4gLT0gMTsKLSAgICAgICAgICAgIGludCBtID0gZ2V0SW50VmFsdWUodGQpOwotICAgICAgICAgICAgaWYgKGxlbiA+IG0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKAotICAgICAgICAgICAgICAgICAgICAiSW50ZWdlciB0b3RhbCBkaWdpdHMgKCIgKyB0ZW1wICsgIikgaXMgZ3JlYXRlciB0aGFuICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgInRvdGFsIGRpZ2l0cyBmYWNldCAoIiArIGdldEludFZhbHVlKHRkKSArICIpIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUoc1R5cGUpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBtaW4gZXgKLSAgICAgICAgWG1sT2JqZWN0IG1pbmUgPSBzVHlwZS5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX01JTl9FWENMVVNJVkUpOwotICAgICAgICBpZiAobWluZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbSA9IGdldEludFZhbHVlKG1pbmUpOwotICAgICAgICAgICAgaWYgKCEodiA+IG0pKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgKLSAgICAgICAgICAgICAgICAgICAgIkludGVnZXIgKCIgKyB2ICsgIikgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIm1pbiBleGNsdXNpdmUgZmFjZXQgKCIgKyBtICsgIikgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIG1pbiBpbgotICAgICAgICBYbWxPYmplY3QgbWluaSA9IHNUeXBlLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfTUlOX0lOQ0xVU0lWRSk7Ci0gICAgICAgIGlmIChtaW5pICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBtID0gZ2V0SW50VmFsdWUobWluaSk7Ci0gICAgICAgICAgICBpZiAoISh2ID49IG0pKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgKLSAgICAgICAgICAgICAgICAgICAgIkludGVnZXIgKCIgKyB2ICsgIikgaXMgbGVzcyB0aGFuICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIm1pbiBpbmNsdXNpdmUgZmFjZXQgKCIgKyBtICsgIikgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIG1heCBpbgotICAgICAgICBYbWxPYmplY3QgbWF4aSA9IHNUeXBlLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfTUFYX0lOQ0xVU0lWRSk7Ci0gICAgICAgIGlmIChtYXhpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBtID0gZ2V0SW50VmFsdWUobWF4aSk7Ci0gICAgICAgICAgICBpZiAoISh2IDw9IG0pKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgKLSAgICAgICAgICAgICAgICAgICAgIkludGVnZXIgKCIgKyB2ICsgIikgaXMgZ3JlYXRlciB0aGFuICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIm1heCBpbmNsdXNpdmUgZmFjZXQgKCIgKyBtICsgIikgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIG1heCBleAotICAgICAgICBYbWxPYmplY3QgbWF4ZSA9IHNUeXBlLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfTUFYX0VYQ0xVU0lWRSk7Ci0gICAgICAgIGlmIChtYXhlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBtID0gZ2V0SW50VmFsdWUobWF4ZSk7Ci0gICAgICAgICAgICBpZiAoISh2IDwgbSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKAotICAgICAgICAgICAgICAgICAgICAiSW50ZWdlciAoIiArIHYgKyAiKSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAibWF4IGV4Y2x1c2l2ZSBmYWNldCAoIiArIG0gKyAiKSBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNUeXBlKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gZW51bWVyYXRpb24KLSAgICAgICAgWG1sT2JqZWN0W10gdmFscyA9IHNUeXBlLmdldEVudW1lcmF0aW9uVmFsdWVzKCk7Ci0gICAgICAgIGlmICh2YWxzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFscy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAodiA9PSBnZXRJbnRWYWx1ZSh2YWxzW2ldKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKCJJbnRlZ2VyICgiICsgdiArICIpIGRvZXMgbm90IG1hdGNoIGFueSBlbnVtZXJhdGlvbiB2YWx1ZXMgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IGdldEludFZhbHVlKFhtbE9iamVjdCBvKSB7Ci0gICAgICAgIFNjaGVtYVR5cGUgcyA9IG8uc2NoZW1hVHlwZSgpOwotICAgICAgICBzd2l0Y2ggKHMuZ2V0RGVjaW1hbFNpemUoKSkgCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5TSVpFX0JJR19ERUNJTUFMOgotICAgICAgICAgICAgICAgIHJldHVybiAoKFhtbE9iamVjdEJhc2UpbykuYmlnRGVjaW1hbFZhbHVlKCkuaW50VmFsdWUoKTsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5TSVpFX0JJR19JTlRFR0VSOgotICAgICAgICAgICAgICAgIHJldHVybiAoKFhtbE9iamVjdEJhc2UpbykuYmlnSW50ZWdlclZhbHVlKCkuaW50VmFsdWUoKTsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5TSVpFX0xPTkc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChpbnQpKChYbWxPYmplY3RCYXNlKW8pLmxvbmdWYWx1ZSgpOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gKChYbWxPYmplY3RCYXNlKW8pLmludFZhbHVlKCk7Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHZhbGlkYXRlX3NpbXBsZXZhbChTdHJpbmcgbGV4aWNhbCwgVmFsaWRhdGlvbkNvbnRleHQgY3R4KQotICAgIHsKLSAgICAgICAgdmFsaWRhdGVMZXhpY2FsKGxleGljYWwsIHNjaGVtYVR5cGUoKSwgY3R4KTsKLSAgICAgICAgdmFsaWRhdGVWYWx1ZShpbnRWYWx1ZSgpLCBzY2hlbWFUeXBlKCksIGN0eCk7Ci0gICAgfQotICAgIAotfQotCmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhSW50ZWdlckhvbGRlci5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YUludGVnZXJIb2xkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM0ZjgwNi4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhSW50ZWdlckhvbGRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNpbXBsZVZhbHVlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uVmFsaWRhdGlvbkNvbnRleHQ7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zY2hlbWEuQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW07Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBKYXZhSW50ZWdlckhvbGRlciBleHRlbmRzIFhtbE9iamVjdEJhc2UKLXsKLSAgICBwdWJsaWMgU2NoZW1hVHlwZSBzY2hlbWFUeXBlKCkKLSAgICAgICAgeyByZXR1cm4gQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfSU5URUdFUjsgfQotCi0gICAgcHJpdmF0ZSBCaWdJbnRlZ2VyIF92YWx1ZTsKLQotICAgIC8vIFNJTVBMRSBWQUxVRSBBQ0NFU1NPUlMgQkVMT1cgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgLy8gZ2V0cy9zZXRzIHJhdyB0ZXh0IHZhbHVlCi0gICAgcHJvdGVjdGVkIFN0cmluZyBjb21wdXRlX3RleHQoTmFtZXNwYWNlTWFuYWdlciBuc20pIHsgcmV0dXJuIF92YWx1ZS50b1N0cmluZygpOyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X3RleHQoU3RyaW5nIHMpCi0gICAgewotICAgICAgICBzZXRfQmlnSW50ZWdlcihsZXgocywgX3Zvb3JWYykpOwotICAgIH0KLSAgICBwdWJsaWMgc3RhdGljIEJpZ0ludGVnZXIgbGV4KFN0cmluZyBzLCBWYWxpZGF0aW9uQ29udGV4dCB2YykgCi0gICAgewotICAgICAgICBpZiAocy5sZW5ndGgoKSA+IDAgJiYgcy5jaGFyQXQoIDAgKSA9PSAnKycgKQotICAgICAgICAgICAgcyA9IHMuc3Vic3RyaW5nKDEpOwotCi0gICAgICAgIHRyeSB7IHJldHVybiBuZXcgQmlnSW50ZWdlcihzKTsgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgdmMuaW52YWxpZCgiTm90IGEgdmFsaWQgaW50ZWdlcjogIiArIHMpOyByZXR1cm4gbnVsbDsgfQotICAgIH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfbmlsKCkKLSAgICB7Ci0gICAgICAgIF92YWx1ZSA9IG51bGw7Ci0gICAgfQotICAgIC8vIG51bWVyaWNzOiBmcmFjdGlvbmFsCi0gICAgcHVibGljIEJpZ0RlY2ltYWwgYmlnRGVjaW1hbFZhbHVlKCkgeyBjaGVja19kYXRlZCgpOyByZXR1cm4gX3ZhbHVlID09IG51bGwgPyBudWxsIDogbmV3IEJpZ0RlY2ltYWwoX3ZhbHVlKTsgfQotICAgIHB1YmxpYyBCaWdJbnRlZ2VyIGJpZ0ludGVnZXJWYWx1ZSgpIHsgY2hlY2tfZGF0ZWQoKTsgcmV0dXJuIF92YWx1ZTsgfQotCi0gICAgLy8gc2V0dGVycwotICAgIHByb3RlY3RlZCB2b2lkIHNldF9CaWdEZWNpbWFsKEJpZ0RlY2ltYWwgdikgeyBfdmFsdWUgPSB2LnRvQmlnSW50ZWdlcigpOyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X0JpZ0ludGVnZXIoQmlnSW50ZWdlciB2KSB7IF92YWx1ZSA9IHY7IH0KLQotICAgIC8vIGNvbXBhcmF0b3JzCi0gICAgcHJvdGVjdGVkIGludCBjb21wYXJlX3RvKFhtbE9iamVjdCBpKQotICAgIHsKLSAgICAgICAgaWYgKCgoU2ltcGxlVmFsdWUpaSkuaW5zdGFuY2VUeXBlKCkuZ2V0RGVjaW1hbFNpemUoKSA+IFNjaGVtYVR5cGUuU0laRV9CSUdfSU5URUdFUikKLSAgICAgICAgICAgIHJldHVybiAtaS5jb21wYXJlVG8odGhpcyk7Ci0KLSAgICAgICAgcmV0dXJuIF92YWx1ZS5jb21wYXJlVG8oKChYbWxPYmplY3RCYXNlKWkpLmJpZ0ludGVnZXJWYWx1ZSgpKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBlcXVhbF90byhYbWxPYmplY3QgaSkKLSAgICB7Ci0gICAgICAgIGlmICgoKFNpbXBsZVZhbHVlKWkpLmluc3RhbmNlVHlwZSgpLmdldERlY2ltYWxTaXplKCkgPiBTY2hlbWFUeXBlLlNJWkVfQklHX0lOVEVHRVIpCi0gICAgICAgICAgICByZXR1cm4gaS52YWx1ZUVxdWFscyh0aGlzKTsKLQotICAgICAgICByZXR1cm4gX3ZhbHVlLmVxdWFscygoKFhtbE9iamVjdEJhc2UpaSkuYmlnSW50ZWdlclZhbHVlKCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBwcml2YXRlIEJpZ0ludGVnZXIgX21heGxvbmcgPSBCaWdJbnRlZ2VyLnZhbHVlT2YoTG9uZy5NQVhfVkFMVUUpOwotICAgIHN0YXRpYyBwcml2YXRlIEJpZ0ludGVnZXIgX21pbmxvbmcgPSBCaWdJbnRlZ2VyLnZhbHVlT2YoTG9uZy5NSU5fVkFMVUUpOwotCi0gICAgLyoqCi0gICAgICogTm90ZSwgdGhpcyBpcyBjYXJlZnVsbHkgYWxpZ25lZCB3aXRoIGhhc2ggY29kZXMgZm9yIGFsbCB4c2Q6ZGVjaW1hbAotICAgICAqIHByaW1pdGl2ZXMuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIGludCB2YWx1ZV9oYXNoX2NvZGUoKQotICAgIHsKLSAgICAgICAgaWYgKF92YWx1ZS5jb21wYXJlVG8oX21heGxvbmcpID4gMCB8fAotICAgICAgICAgICAgX3ZhbHVlLmNvbXBhcmVUbyhfbWlubG9uZykgPCAwKQotICAgICAgICAgICAgcmV0dXJuIF92YWx1ZS5oYXNoQ29kZSgpOwotCi0gICAgICAgIGxvbmcgbG9uZ3ZhbCA9IF92YWx1ZS5sb25nVmFsdWUoKTsKLQotICAgICAgICByZXR1cm4gKGludCkoKGxvbmd2YWwgPj4gMzIpICogMTkgKyBsb25ndmFsKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhSW50ZWdlckhvbGRlckV4LmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhSW50ZWdlckhvbGRlckV4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiZTJlMjUuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YUludGVnZXJIb2xkZXJFeC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIxICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sSW50OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uVmFsaWRhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5RTmFtZUhlbHBlcjsKLQotcHVibGljIGNsYXNzIEphdmFJbnRlZ2VySG9sZGVyRXggZXh0ZW5kcyBKYXZhSW50ZWdlckhvbGRlcgotewotICAgIHB1YmxpYyBKYXZhSW50ZWdlckhvbGRlckV4KFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IF9zY2hlbWFUeXBlID0gdHlwZTsgaW5pdENvbXBsZXhUeXBlKGNvbXBsZXgsIGZhbHNlKTsgfQotICAgIAotICAgIHByaXZhdGUgU2NoZW1hVHlwZSBfc2NoZW1hVHlwZTsKLQotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgc2NoZW1hVHlwZSgpCi0gICAgICAgIHsgcmV0dXJuIF9zY2hlbWFUeXBlOyB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfdGV4dChTdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIEJpZ0ludGVnZXIgdiA9IGxleChzLCBfdm9vclZjKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChfdmFsaWRhdGVPblNldCgpKQotICAgICAgICAgICAgdmFsaWRhdGVWYWx1ZSh2LCBfc2NoZW1hVHlwZSwgX3Zvb3JWYyk7Ci0gICAgCi0gICAgICAgIGlmIChfdmFsaWRhdGVPblNldCgpKQotICAgICAgICAgICAgdmFsaWRhdGVMZXhpY2FsKHMsIF9zY2hlbWFUeXBlLCBfdm9vclZjKTsKLQotICAgICAgICBzdXBlci5zZXRfQmlnSW50ZWdlcih2KTsKLSAgICB9Ci0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X0JpZ0ludGVnZXIoQmlnSW50ZWdlciB2KQotICAgIHsKLSAgICAgICAgaWYgKF92YWxpZGF0ZU9uU2V0KCkpCi0gICAgICAgICAgICB2YWxpZGF0ZVZhbHVlKHYsIF9zY2hlbWFUeXBlLCBfdm9vclZjKTsKLQotICAgICAgICBzdXBlci5zZXRfQmlnSW50ZWdlcih2KTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHZhbGlkYXRlTGV4aWNhbChTdHJpbmcgdiwgU2NoZW1hVHlwZSBzVHlwZSwgVmFsaWRhdGlvbkNvbnRleHQgY29udGV4dCkKLSAgICB7Ci0gICAgICAgIEphdmFEZWNpbWFsSG9sZGVyLnZhbGlkYXRlTGV4aWNhbCh2LCBjb250ZXh0KTsKLSAgICAgICAgCi0gICAgICAgIC8vIGNoZWNrIHBhdHRlcm4KLSAgICAgICAgaWYgKHNUeXBlLmhhc1BhdHRlcm5GYWNldCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIXNUeXBlLm1hdGNoUGF0dGVybkZhY2V0KHYpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgiSW50ZWdlciAoIiArIHYgKyAiKSBkb2VzIG5vdCBtYXRjaCBwYXR0ZXJuIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUoc1R5cGUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgdmFsaWRhdGVWYWx1ZShCaWdJbnRlZ2VyIHYsIFNjaGVtYVR5cGUgc1R5cGUsIFZhbGlkYXRpb25Db250ZXh0IGNvbnRleHQpCi0gICAgewotICAgICAgICAvLyB0b3RhbCBkaWdpdHMKLSAgICAgICAgWG1sSW50IHRkID0gKFhtbEludClzVHlwZS5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX1RPVEFMX0RJR0lUUyk7Ci0gICAgICAgIGlmICh0ZCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgdGVtcCA9IHYudG9TdHJpbmcoKTsKLSAgICAgICAgICAgIGludCBsZW4gPSB0ZW1wLmxlbmd0aCgpOwotICAgICAgICAgICAgaWYgKGxlbiA+IDAgJiYgdGVtcC5jaGFyQXQoMCkgPT0gJy0nKQotICAgICAgICAgICAgICAgIGxlbiAtPSAxOwotICAgICAgICAgICAgaWYgKGxlbiA+IHRkLmdldEludFZhbHVlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKAotICAgICAgICAgICAgICAgICAgICAiSW50ZWdlciB0b3RhbCBkaWdpdHMgKCIgKyB0ZW1wICsgIikgaXMgZ3JlYXRlciB0aGFuICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgInRvdGFsIGRpZ2l0cyBmYWNldCAoIiArIHRkLmdldEludFZhbHVlKCkgKyAiKSBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNUeXBlKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbWluIGV4Ci0gICAgICAgIFhtbE9iamVjdCBtaW5lID0gc1R5cGUuZ2V0RmFjZXQoU2NoZW1hVHlwZS5GQUNFVF9NSU5fRVhDTFVTSVZFKTsKLSAgICAgICAgaWYgKG1pbmUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgQmlnSW50ZWdlciBtID0gZ2V0QmlnSW50ZWdlclZhbHVlKG1pbmUpOwotICAgICAgICAgICAgaWYgKCEodi5jb21wYXJlVG8obSkgPiAwKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmludmFsaWQoCi0gICAgICAgICAgICAgICAgICAgICJJbnRlZ2VyICgiICsgdiArICIpIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJtaW4gZXhjbHVzaXZlIGZhY2V0ICgiICsgbSArICIpIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUoc1R5cGUpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBtaW4gaW4KLSAgICAgICAgWG1sT2JqZWN0IG1pbmkgPSBzVHlwZS5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX01JTl9JTkNMVVNJVkUpOwotICAgICAgICBpZiAobWluaSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBCaWdJbnRlZ2VyIG0gPSBnZXRCaWdJbnRlZ2VyVmFsdWUobWluaSk7Ci0gICAgICAgICAgICBpZiAoISh2LmNvbXBhcmVUbyhtKSA+PSAwKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmludmFsaWQoCi0gICAgICAgICAgICAgICAgICAgICJJbnRlZ2VyICgiICsgdiArICIpIGlzIGxlc3MgdGhhbiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJtaW4gaW5jbHVzaXZlIGZhY2V0ICgiICsgbSArICIpIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUoc1R5cGUpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBtYXggaW4KLSAgICAgICAgWG1sT2JqZWN0IG1heGkgPSBzVHlwZS5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX01BWF9JTkNMVVNJVkUpOwotICAgICAgICBpZiAobWF4aSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBCaWdJbnRlZ2VyIG0gPSBnZXRCaWdJbnRlZ2VyVmFsdWUobWF4aSk7Ci0gICAgICAgICAgICBpZiAoISh2LmNvbXBhcmVUbyhtKSA8PSAwKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmludmFsaWQoCi0gICAgICAgICAgICAgICAgICAgICJJbnRlZ2VyICgiICsgdiArICIpIGlzIGdyZWF0ZXIgdGhhbiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJtYXggaW5jbHVzaXZlIGZhY2V0ICgiICsgbSArICIpIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUoc1R5cGUpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBtYXggZXgKLSAgICAgICAgWG1sT2JqZWN0IG1heGUgPSBzVHlwZS5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX01BWF9FWENMVVNJVkUpOwotICAgICAgICBpZiAobWF4ZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBCaWdJbnRlZ2VyIG0gPSBnZXRCaWdJbnRlZ2VyVmFsdWUobWF4ZSk7Ci0gICAgICAgICAgICBpZiAoISh2LmNvbXBhcmVUbyhtKSA8IDApKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgKLSAgICAgICAgICAgICAgICAgICAgIkludGVnZXIgKCIgKyB2ICsgIikgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIm1heCBleGNsdXNpdmUgZmFjZXQgKCIgKyBtICsgIikgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGVudW1lcmF0aW9uCi0gICAgICAgIFhtbE9iamVjdFtdIHZhbHMgPSBzVHlwZS5nZXRFbnVtZXJhdGlvblZhbHVlcygpOwotICAgICAgICBpZiAodmFscyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHYuZXF1YWxzKGdldEJpZ0ludGVnZXJWYWx1ZSh2YWxzW2ldKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgiSW50ZWdlciAoIiArIHYgKyAiKSBkb2VzIG5vdCBtYXRjaCBhbnkgZW51bWVyYXRpb24gdmFsdWVzIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUoc1R5cGUpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIEJpZ0ludGVnZXIgZ2V0QmlnSW50ZWdlclZhbHVlKFhtbE9iamVjdCBvKQotICAgIHsKLSAgICAgICAgU2NoZW1hVHlwZSBzID0gby5zY2hlbWFUeXBlKCk7Ci0gICAgICAgIHN3aXRjaCAocy5nZXREZWNpbWFsU2l6ZSgpKSAKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLlNJWkVfQklHX0RFQ0lNQUw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgoWG1sT2JqZWN0QmFzZSlvKS5iaWdEZWNpbWFsVmFsdWUoKS50b0JpZ0ludGVnZXIoKTsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5TSVpFX0JJR19JTlRFR0VSOgotICAgICAgICAgICAgICAgIHJldHVybiAoKFhtbE9iamVjdEJhc2UpbykuYmlnSW50ZWdlclZhbHVlKCk7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkJhZCBmYWNldCB0eXBlIGZvciBCaWcgSW50OiAiICsgcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZV9zaW1wbGV2YWwoU3RyaW5nIGxleGljYWwsIFZhbGlkYXRpb25Db250ZXh0IGN0eCkKLSAgICB7Ci0gICAgICAgIHZhbGlkYXRlTGV4aWNhbChsZXhpY2FsLCBzY2hlbWFUeXBlKCksIGN0eCk7Ci0gICAgICAgIHZhbGlkYXRlVmFsdWUoYmlnSW50ZWdlclZhbHVlKCksIHNjaGVtYVR5cGUoKSwgY3R4KTsKLSAgICB9Ci0gICAgCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhTG9uZ0hvbGRlci5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YUxvbmdIb2xkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYzMWU0Ny4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhTG9uZ0hvbGRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNpbXBsZVZhbHVlOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hLkJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSmF2YUxvbmdIb2xkZXIgZXh0ZW5kcyBYbWxPYmplY3RCYXNlCi17Ci0gICAgcHVibGljIFNjaGVtYVR5cGUgc2NoZW1hVHlwZSgpCi0gICAgICAgIHsgcmV0dXJuIEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtLlNUX0xPTkc7IH0KLQotICAgIHByaXZhdGUgbG9uZyBfdmFsdWU7Ci0KLSAgICAvLyBTSU1QTEUgVkFMVUUgQUNDRVNTT1JTIEJFTE9XIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIC8vIGdldHMgcmF3IHRleHQgdmFsdWUKLSAgICBwcm90ZWN0ZWQgU3RyaW5nIGNvbXB1dGVfdGV4dChOYW1lc3BhY2VNYW5hZ2VyIG5zbSkgeyByZXR1cm4gTG9uZy50b1N0cmluZyhfdmFsdWUpOyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X3RleHQoU3RyaW5nIHMpCi0gICAgewotICAgICAgICB0cnkgeyBzZXRfbG9uZyhMb25nLnBhcnNlTG9uZyhzKSk7IH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7IHRocm93IG5ldyBYbWxWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb24oKTsgfQotICAgIH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfbmlsKCkKLSAgICB7Ci0gICAgICAgIF92YWx1ZSA9IDBMOwotICAgIH0KLQotICAgIC8vIG51bWVyaWNzOiBmcmFjdGlvbmFsCi0gICAgcHVibGljIEJpZ0RlY2ltYWwgYmlnRGVjaW1hbFZhbHVlKCkgeyBjaGVja19kYXRlZCgpOyByZXR1cm4gQmlnRGVjaW1hbC52YWx1ZU9mKF92YWx1ZSk7IH0KLSAgICBwdWJsaWMgQmlnSW50ZWdlciBiaWdJbnRlZ2VyVmFsdWUoKSB7IGNoZWNrX2RhdGVkKCk7IHJldHVybiBCaWdJbnRlZ2VyLnZhbHVlT2YoX3ZhbHVlKTsgfQotICAgIHB1YmxpYyBsb25nIGxvbmdWYWx1ZSgpIHsgY2hlY2tfZGF0ZWQoKTsgcmV0dXJuIF92YWx1ZTsgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQmlnSW50ZWdlciBfbWF4ID0gQmlnSW50ZWdlci52YWx1ZU9mKExvbmcuTUFYX1ZBTFVFKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBCaWdJbnRlZ2VyIF9taW4gPSBCaWdJbnRlZ2VyLnZhbHVlT2YoTG9uZy5NSU5fVkFMVUUpOwotCi0gICAgLy8gc2V0dGVycwotICAgIHByb3RlY3RlZCB2b2lkIHNldF9CaWdEZWNpbWFsKEJpZ0RlY2ltYWwgdikgeyBzZXRfQmlnSW50ZWdlcih2LnRvQmlnSW50ZWdlcigpKTsgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldF9CaWdJbnRlZ2VyKEJpZ0ludGVnZXIgdikKLSAgICB7Ci0gICAgICAgIGlmICh2LmNvbXBhcmVUbyhfbWF4KSA+IDAgfHwgdi5jb21wYXJlVG8oX21pbikgPCAwKQotICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOwotICAgICAgICBfdmFsdWUgPSB2LmxvbmdWYWx1ZSgpOwotICAgIH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfbG9uZyhsb25nIGwpIHsgX3ZhbHVlID0gbDsgfQotCi0gICAgLy8gY29tcGFyYXRvcnMKLSAgICBwcm90ZWN0ZWQgaW50IGNvbXBhcmVfdG8oWG1sT2JqZWN0IGwpCi0gICAgewotICAgICAgICBpZiAoKChTaW1wbGVWYWx1ZSlsKS5pbnN0YW5jZVR5cGUoKS5nZXREZWNpbWFsU2l6ZSgpID4gU2NoZW1hVHlwZS5TSVpFX0xPTkcpCi0gICAgICAgICAgICByZXR1cm4gLWwuY29tcGFyZVRvKHRoaXMpOwotCi0gICAgICAgIHJldHVybiBfdmFsdWUgPT0gKChYbWxPYmplY3RCYXNlKWwpLmxvbmdWYWx1ZSgpID8gMCA6Ci0gICAgICAgICAgICAgICBfdmFsdWUgPCAoKFhtbE9iamVjdEJhc2UpbCkubG9uZ1ZhbHVlKCkgPyAtMSA6IDE7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIGJvb2xlYW4gZXF1YWxfdG8oWG1sT2JqZWN0IGwpCi0gICAgewotICAgICAgICBpZiAoKChTaW1wbGVWYWx1ZSlsKS5pbnN0YW5jZVR5cGUoKS5nZXREZWNpbWFsU2l6ZSgpID4gU2NoZW1hVHlwZS5TSVpFX0xPTkcpCi0gICAgICAgICAgICByZXR1cm4gbC52YWx1ZUVxdWFscyh0aGlzKTsKLQotICAgICAgICByZXR1cm4gX3ZhbHVlID09ICgoWG1sT2JqZWN0QmFzZSlsKS5sb25nVmFsdWUoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBOb3RlLCB0aGlzIGlzIGNhcmVmdWxseSBhbGlnbmVkIHdpdGggaGFzaCBjb2RlcyBmb3IgYWxsIHhzZDpkZWNpbWFsCi0gICAgICogcHJpbWl0aXZlcy4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgaW50IHZhbHVlX2hhc2hfY29kZSgpCi0gICAgewotICAgICAgICByZXR1cm4gKGludCkoKF92YWx1ZSA+PiAzMikgKiAxOSArIF92YWx1ZSk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhTG9uZ0hvbGRlckV4LmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhTG9uZ0hvbGRlckV4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjNDlkZDEuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YUxvbmdIb2xkZXJFeC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIzICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlZhbGlkYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uUU5hbWVIZWxwZXI7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBKYXZhTG9uZ0hvbGRlckV4IGV4dGVuZHMgSmF2YUxvbmdIb2xkZXIKLXsKLSAgICBwdWJsaWMgSmF2YUxvbmdIb2xkZXJFeChTY2hlbWFUeXBlIHR5cGUsIGJvb2xlYW4gY29tcGxleCkKLSAgICAgICAgeyBfc2NoZW1hVHlwZSA9IHR5cGU7IGluaXRDb21wbGV4VHlwZShjb21wbGV4LCBmYWxzZSk7IH0KLSAgICAgICAgCi0gICAgcHJpdmF0ZSBTY2hlbWFUeXBlIF9zY2hlbWFUeXBlOwotCi0KLSAgICBwdWJsaWMgU2NoZW1hVHlwZSBzY2hlbWFUeXBlKCkKLSAgICAgICAgeyByZXR1cm4gX3NjaGVtYVR5cGU7IH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHNldF90ZXh0KFN0cmluZyBzKQotICAgIHsKLSAgICAgICAgbG9uZyB2OwotCi0gICAgICAgIHRyeSB7IHYgPSBMb25nLnBhcnNlTG9uZyhzKTsgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpIHsgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOyB9Ci0gICAgICAgIAotICAgICAgICBpZiAoX3ZhbGlkYXRlT25TZXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgdmFsaWRhdGVWYWx1ZSh2LCBfc2NoZW1hVHlwZSwgX3Zvb3JWYyk7Ci0gICAgICAgICAgICB2YWxpZGF0ZUxleGljYWwocywgX3NjaGVtYVR5cGUsIF92b29yVmMpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3VwZXIuc2V0X2xvbmcodik7Ci0gICAgfQotICAgIAotICAgIHByb3RlY3RlZCB2b2lkIHNldF9sb25nKGxvbmcgdikKLSAgICB7Ci0gICAgICAgIGlmIChfdmFsaWRhdGVPblNldCgpKQotICAgICAgICAgICAgdmFsaWRhdGVWYWx1ZSh2LCBfc2NoZW1hVHlwZSwgX3Zvb3JWYyk7Ci0KLSAgICAgICAgc3VwZXIuc2V0X2xvbmcodik7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHZhbGlkYXRlTGV4aWNhbChTdHJpbmcgdiwgU2NoZW1hVHlwZSBzVHlwZSwgVmFsaWRhdGlvbkNvbnRleHQgY29udGV4dCkKLSAgICB7Ci0gICAgICAgIEphdmFEZWNpbWFsSG9sZGVyLnZhbGlkYXRlTGV4aWNhbCh2LCBjb250ZXh0KTsKLSAgICAgICAgCi0gICAgICAgIC8vIGNoZWNrIHBhdHRlcm4KLSAgICAgICAgaWYgKHNUeXBlLmhhc1BhdHRlcm5GYWNldCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIXNUeXBlLm1hdGNoUGF0dGVybkZhY2V0KHYpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgiSW50ZWdlciAoIiArIHYgKyAiKSBkb2VzIG5vdCBtYXRjaCBwYXR0ZXJuIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUoc1R5cGUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHZhbGlkYXRlVmFsdWUobG9uZyB2LCBTY2hlbWFUeXBlIHNUeXBlLCBWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0KQotICAgIHsKLSAgICAgICAgLy8gdG90YWwgZGlnaXRzCi0gICAgICAgIFhtbE9iamVjdCB0ZCA9IHNUeXBlLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfVE9UQUxfRElHSVRTKTsKLSAgICAgICAgaWYgKHRkICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvbmcgbSA9IGdldExvbmdWYWx1ZSh0ZCk7Ci0gICAgICAgICAgICBTdHJpbmcgdGVtcCA9IExvbmcudG9TdHJpbmcodik7Ci0gICAgICAgICAgICBpbnQgbGVuID0gdGVtcC5sZW5ndGgoKTsKLSAgICAgICAgICAgIGlmIChsZW4gPiAwICYmIHRlbXAuY2hhckF0KDApID09ICctJykKLSAgICAgICAgICAgICAgICBsZW4gLT0gMTsKLSAgICAgICAgICAgIGlmIChsZW4gPiBtKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgKLSAgICAgICAgICAgICAgICAgICAgIkludGVnZXIgdG90YWwgZGlnaXRzICgiICsgdGVtcCArICIpIGlzIGdyZWF0ZXIgdGhhbiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJ0b3RhbCBkaWdpdHMgZmFjZXQgKCIgKyBtICsgIikgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIG1pbiBleAotICAgICAgICBYbWxPYmplY3QgbWluZSA9IHNUeXBlLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfTUlOX0VYQ0xVU0lWRSk7Ci0gICAgICAgIGlmIChtaW5lICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvbmcgbSA9IGdldExvbmdWYWx1ZShtaW5lKTsKLSAgICAgICAgICAgIGlmICghKHYgPiBtKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmludmFsaWQoCi0gICAgICAgICAgICAgICAgICAgICJJbnRlZ2VyICgiICsgdiArICIpIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJtaW4gZXhjbHVzaXZlIGZhY2V0ICgiICsgbSArICIpIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUoc1R5cGUpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBtaW4gaW4KLSAgICAgICAgWG1sT2JqZWN0IG1pbmkgPSBzVHlwZS5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX01JTl9JTkNMVVNJVkUpOwotICAgICAgICBpZiAobWluaSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBsb25nIG0gPSBnZXRMb25nVmFsdWUobWluaSk7Ci0gICAgICAgICAgICBpZiAoISh2ID49IG0pKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgKLSAgICAgICAgICAgICAgICAgICAgIkludGVnZXIgKCIgKyB2ICsgIikgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIm1pbiBleGNsdXNpdmUgZmFjZXQgKCIgKyBtICsgIikgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIG1heCBpbgotICAgICAgICBYbWxPYmplY3QgbWF4aSA9IHNUeXBlLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfTUFYX0lOQ0xVU0lWRSk7Ci0gICAgICAgIGlmIChtYXhpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvbmcgbSA9IGdldExvbmdWYWx1ZShtYXhpKTsKLSAgICAgICAgICAgIGlmICghKHYgPD0gbSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKAotICAgICAgICAgICAgICAgICAgICAiSW50ZWdlciAoIiArIHYgKyAiKSBpcyBsZXNzIHRoYW4gIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAibWluIGluY2x1c2l2ZSBmYWNldCAoIiArIG0gKyAiKSBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNUeXBlKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbWF4IGV4Ci0gICAgICAgIFhtbE9iamVjdCBtYXhlID0gc1R5cGUuZ2V0RmFjZXQoU2NoZW1hVHlwZS5GQUNFVF9NQVhfRVhDTFVTSVZFKTsKLSAgICAgICAgaWYgKG1heGUgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgbG9uZyBtID0gZ2V0TG9uZ1ZhbHVlKG1heGUpOwotICAgICAgICAgICAgaWYgKCEodiA8IG0pKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgKLSAgICAgICAgICAgICAgICAgICAgIkludGVnZXIgKCIgKyB2ICsgIikgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgIm1heCBleGNsdXNpdmUgZmFjZXQgKCIgKyBtICsgIikgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGVudW1lcmF0aW9uCi0gICAgICAgIFhtbE9iamVjdFtdIHZhbHMgPSBzVHlwZS5nZXRFbnVtZXJhdGlvblZhbHVlcygpOwotICAgICAgICBpZiAodmFscyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHYgPT0gZ2V0TG9uZ1ZhbHVlKHZhbHNbaV0pKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250ZXh0LmludmFsaWQoIkludGVnZXIgKCIgKyB2ICsgIikgZG9lcyBub3QgbWF0Y2ggYW55IGVudW1lcmF0aW9uIHZhbHVlcyBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNUeXBlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBsb25nIGdldExvbmdWYWx1ZShYbWxPYmplY3QgbykgewotICAgICAgICBTY2hlbWFUeXBlIHMgPSBvLnNjaGVtYVR5cGUoKTsKLSAgICAgICAgc3dpdGNoIChzLmdldERlY2ltYWxTaXplKCkpIAotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuU0laRV9CSUdfREVDSU1BTDoKLSAgICAgICAgICAgICAgICByZXR1cm4gKChYbWxPYmplY3RCYXNlKW8pLmJpZ0RlY2ltYWxWYWx1ZSgpLmxvbmdWYWx1ZSgpOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLlNJWkVfQklHX0lOVEVHRVI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgoWG1sT2JqZWN0QmFzZSlvKS5iaWdJbnRlZ2VyVmFsdWUoKS5sb25nVmFsdWUoKTsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5TSVpFX0xPTkc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgoWG1sT2JqZWN0QmFzZSlvKS5sb25nVmFsdWUoKTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQmFkIGZhY2V0IHR5cGU6ICIgKyBzKTsKLSAgICAgICAgfQotCi0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgdmFsaWRhdGVfc2ltcGxldmFsKFN0cmluZyBsZXhpY2FsLCBWYWxpZGF0aW9uQ29udGV4dCBjdHgpCi0gICAgewotICAgICAgICB2YWxpZGF0ZUxleGljYWwobGV4aWNhbCwgc2NoZW1hVHlwZSgpLCBjdHgpOwotICAgICAgICB2YWxpZGF0ZVZhbHVlKGxvbmdWYWx1ZSgpLCBzY2hlbWFUeXBlKCksIGN0eCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YU5vdGF0aW9uSG9sZGVyLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhTm90YXRpb25Ib2xkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQwZjM1NS4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhTm90YXRpb25Ib2xkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zY2hlbWEuQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW07Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBKYXZhTm90YXRpb25Ib2xkZXIgZXh0ZW5kcyBYbWxRTmFtZUltcGwKLXsKLSAgICBwdWJsaWMgU2NoZW1hVHlwZSBzY2hlbWFUeXBlKCkKLSAgICAgICAgeyByZXR1cm4gQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfTk9UQVRJT047IH0KLQotLy8gICAgcHJvdGVjdGVkIGludCBnZXRfd3NjYW5vbl9ydWxlKCkKLS8vICAgICAgICB7IHJldHVybiBTY2hlbWFUeXBlLldTX1BSRVNFUlZFOyB9Ci0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL0phdmFOb3RhdGlvbkhvbGRlckV4LmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhTm90YXRpb25Ib2xkZXJFeC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzRkZjgzLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL0phdmFOb3RhdGlvbkhvbGRlckV4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSmF2YU5vdGF0aW9uSG9sZGVyRXggZXh0ZW5kcyBKYXZhTm90YXRpb25Ib2xkZXIKLXsKLSAgICBwcml2YXRlIFNjaGVtYVR5cGUgX3NjaGVtYVR5cGU7Ci0KLQotICAgIHB1YmxpYyBTY2hlbWFUeXBlIHNjaGVtYVR5cGUoKQotICAgICAgICB7IHJldHVybiBfc2NoZW1hVHlwZTsgfQotCi0gICAgcHVibGljIEphdmFOb3RhdGlvbkhvbGRlckV4KFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IF9zY2hlbWFUeXBlID0gdHlwZTsgaW5pdENvbXBsZXhUeXBlKGNvbXBsZXgsIGZhbHNlKTsgfQotCi0gICAgcHJvdGVjdGVkIGludCBnZXRfd3NjYW5vbl9ydWxlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzY2hlbWFUeXBlKCkuZ2V0V2hpdGVTcGFjZVJ1bGUoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfdGV4dChTdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIGlmIChfdmFsaWRhdGVPblNldCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWNoZWNrKHMsIF9zY2hlbWFUeXBlKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uKCk7Ci0KLSAgICAgICAgICAgIGlmICghX3NjaGVtYVR5cGUubWF0Y2hQYXR0ZXJuRmFjZXQocykpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3VwZXIuc2V0X3RleHQocyk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X25vdGF0aW9uKFN0cmluZyB2KQotICAgIHsgc2V0X3RleHQodik7IH0KLQotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gY2hlY2soU3RyaW5nIHYsIFNjaGVtYVR5cGUgc1R5cGUpCi0gICAgewotICAgICAgICAvLyBjaGVjayBhZ2FpbnN0IGxlbmd0aAotICAgICAgICBYbWxPYmplY3QgbGVuID0gc1R5cGUuZ2V0RmFjZXQoU2NoZW1hVHlwZS5GQUNFVF9MRU5HVEgpOwotICAgICAgICBpZiAobGVuICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBtID0gKChYbWxPYmplY3RCYXNlKWxlbikuYmlnSW50ZWdlclZhbHVlKCkuaW50VmFsdWUoKTsKLSAgICAgICAgICAgIGlmICghKHYubGVuZ3RoKCkgIT0gbSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gY2hlY2sgYWdhaW5zdCBtaW4gbGVuZ3RoCi0gICAgICAgIFhtbE9iamVjdCBtaW4gPSBzVHlwZS5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX01JTl9MRU5HVEgpOwotICAgICAgICBpZiAobWluICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBtID0gKChYbWxPYmplY3RCYXNlKW1pbikuYmlnSW50ZWdlclZhbHVlKCkuaW50VmFsdWUoKTsKLSAgICAgICAgICAgIGlmICghKHYubGVuZ3RoKCkgPj0gbSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gY2hlY2sgYWdhaW5zdCBtaW4gbGVuZ3RoCi0gICAgICAgIFhtbE9iamVjdCBtYXggPSBzVHlwZS5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX01BWF9MRU5HVEgpOwotICAgICAgICBpZiAobWF4ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBtID0gKChYbWxPYmplY3RCYXNlKW1heCkuYmlnSW50ZWdlclZhbHVlKCkuaW50VmFsdWUoKTsKLSAgICAgICAgICAgIGlmICghKHYubGVuZ3RoKCkgPD0gbSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhUU5hbWVIb2xkZXIuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL0phdmFRTmFtZUhvbGRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTdkYWVlLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL0phdmFRTmFtZUhvbGRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI3ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uUHJlZml4UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnNjaGVtYS5CdWlsdGluU2NoZW1hVHlwZVN5c3RlbTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uVmFsaWRhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5YTUxDaGFyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uUU5hbWVIZWxwZXI7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuTmFtZXNwYWNlQ29udGV4dDsKLSAgIAotcHVibGljIGNsYXNzIEphdmFRTmFtZUhvbGRlciBleHRlbmRzIFhtbE9iamVjdEJhc2UKLXsKLSAgICBwdWJsaWMgSmF2YVFOYW1lSG9sZGVyKCkge30KLQotICAgIHB1YmxpYyBTY2hlbWFUeXBlIHNjaGVtYVR5cGUoKQotICAgICAgICB7IHJldHVybiBCdWlsdGluU2NoZW1hVHlwZVN5c3RlbS5TVF9RTkFNRTsgfQotCi0gICAgcHJpdmF0ZSBRTmFtZSBfdmFsdWU7Ci0KLSAgICBwcm90ZWN0ZWQgaW50IGdldF93c2Nhbm9uX3J1bGUoKQotICAgICAgICB7IHJldHVybiBTY2hlbWFUeXBlLldTX1BSRVNFUlZFOyB9Ci0gICAgCi0gICAgLy8gYW4gZXJnb25vbWljIHByZWZpeGVyIHNvIHRoYXQgeW91IGNhbiBzYXkgc3RyaW5nVmFsdWUoKSBvbiBhIGZyZWUtZmxvYXRpbmcgUU5hbWUuCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTmFtZXNwYWNlTWFuYWdlciBQUkVUVFlfUFJFRklYRVIgPSBuZXcgUHJldHR5TmFtZXNwYWNlTWFuYWdlcigpOwotICAgIAotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFByZXR0eU5hbWVzcGFjZU1hbmFnZXIgaW1wbGVtZW50cyBOYW1lc3BhY2VNYW5hZ2VyCi0gICAgewotICAgICAgICBwdWJsaWMgU3RyaW5nIGZpbmRfcHJlZml4X2Zvcl9uc3VyaShTdHJpbmcgbnN1cmksIFN0cmluZyBzdWdnZXN0ZWRfcHJlZml4KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUU5hbWVIZWxwZXIuc3VnZ2VzdFByZWZpeChzdWdnZXN0ZWRfcHJlZml4KTsKLSAgICAgICAgfQotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZUZvclByZWZpeChTdHJpbmcgcHJlZml4KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gcHJlZml4OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gU0lNUExFIFZBTFVFIEFDQ0VTU09SUyBCRUxPVyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgcHVibGljIFN0cmluZyBjb21wdXRlX3RleHQoTmFtZXNwYWNlTWFuYWdlciBuc20pCi0gICAgewotICAgICAgICBpZiAobnNtID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIHdlIHVzZWQgdG86IHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNhbm5vdCBjcmVhdGUgUU5hbWUgcHJlZml4IG91dHNpZGUgb2YgYSBkb2N1bWVudCIpOwotICAgICAgICAgICAgLy8gYnV0IGl0J3Mgbm90IG5pY2UgdG8gdGhyb3cgb24gc3RyaW5nVmFsdWUoKQotICAgICAgICAgICAgbnNtID0gUFJFVFRZX1BSRUZJWEVSOwotICAgICAgICB9Ci0KLS8vIFRPRE8gLSB3aGF0IEkgcmVhbGx5IG5lZWQgdG8gZG8gaGVyZSBpcyB0aGF0IGlmIHRoZXJlIGlzIG5vCi0vLyBuYW1lc3BhY2UgZm9yIHRoaXMgcW5hbWUsIHRoZW4gaW5zdGVhZCBvZiBmaW5kaW5nIHRoZSBwcmVmaXggZm9yIHRoZQotLy8gdXJpLCBJIHNob3VsZCBtYWtlIGEgY2FsbCB0byBzZXQgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIGZvciB0aGUKLS8vIGltbWVkaWF0ZSBjb250ZXh0IGZvciB0aGlzIHFuYW1lIHRvIGJlICIiLiAgCi0gICAKLSAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IF92YWx1ZS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgICAgU3RyaW5nIGxvY2FsUGFydCA9IF92YWx1ZS5nZXRMb2NhbFBhcnQoKTsKLQotICAgICAgICBpZiAobmFtZXNwYWNlID09IG51bGwgfHwgbmFtZXNwYWNlLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICByZXR1cm4gbG9jYWxQYXJ0OwotICAgICAgICAKLSAgICAgICAgU3RyaW5nIHByZWZpeCA9IG5zbS5maW5kX3ByZWZpeF9mb3JfbnN1cmkoIG5hbWVzcGFjZSwgbnVsbCApOwotCi0gICAgICAgIGFzc2VydCBwcmVmaXggIT0gbnVsbDsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBwcmVmaXggKyAiOiIgKyBsb2NhbFBhcnQ7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBRTmFtZSB2YWxpZGF0ZUxleGljYWwoCi0gICAgICAgIFN0cmluZyB2LCBWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0LCBQcmVmaXhSZXNvbHZlciByZXNvbHZlcikKLSAgICB7Ci0gICAgICAgIFFOYW1lIG5hbWU7Ci0gICAgICAgIAotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgbmFtZSA9IHBhcnNlKHYsIHJlc29sdmVyKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoIFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbiBlICkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgIG5hbWUgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIFFOYW1lIHBhcnNlKFN0cmluZyB2LCBQcmVmaXhSZXNvbHZlciByZXNvbHZlcikKLSAgICB7Ci0gICAgICAgIFN0cmluZyBwcmVmaXgsIGxvY2FsbmFtZTsKLSAgICAgICAgaW50IHN0YXJ0OwotICAgICAgICBpbnQgZW5kOwotICAgICAgICBmb3IgKGVuZCA9IHYubGVuZ3RoKCk7IGVuZCA+IDA7IGVuZCAtPSAxKQotICAgICAgICAgICAgaWYgKCFYTUxDaGFyLmlzU3BhY2Uodi5jaGFyQXQoZW5kLTEpKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgZm9yIChzdGFydCA9IDA7IHN0YXJ0IDwgZW5kOyBzdGFydCArPSAxKQotICAgICAgICAgICAgaWYgKCFYTUxDaGFyLmlzU3BhY2Uodi5jaGFyQXQoc3RhcnQpKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpbnQgZmlyc3Rjb2xvbiA9IHYuaW5kZXhPZignOicsIHN0YXJ0KTsKLSAgICAgICAgaWYgKGZpcnN0Y29sb24gPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcHJlZml4ID0gdi5zdWJzdHJpbmcoc3RhcnQsIGZpcnN0Y29sb24pOwotICAgICAgICAgICAgbG9jYWxuYW1lID0gdi5zdWJzdHJpbmcoZmlyc3Rjb2xvbiArIDEsIGVuZCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBwcmVmaXggPSAiIjsKLSAgICAgICAgICAgIGxvY2FsbmFtZSA9IHYuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcgdXJpID0KLSAgICAgICAgICAgIHJlc29sdmVyID09IG51bGwgPyBudWxsIDogcmVzb2x2ZXIuZ2V0TmFtZXNwYWNlRm9yUHJlZml4KHByZWZpeCk7Ci0gICAgICAgIAotICAgICAgICBpZiAodXJpID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChwcmVmaXgubGVuZ3RoKCkgPiAwKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBYbWxWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb24oIkNhbid0IHJlc29sdmUgcHJlZml4OiAiICsgcHJlZml4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgdXJpID0gIiI7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbmV3IFFOYW1lKCB1cmksIGxvY2FsbmFtZSApOwotICAgIH0KLSAgICAKLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfdGV4dChTdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIFByZWZpeFJlc29sdmVyIHJlc29sdmVyID0gTmFtZXNwYWNlQ29udGV4dC5nZXRDdXJyZW50KCk7Ci0KLSAgICAgICAgaWYgKHJlc29sdmVyID09IG51bGwgJiYgaGFzX3N0b3JlKCkpCi0gICAgICAgICAgICByZXNvbHZlciA9IGdldF9zdG9yZSgpOwotICAgICAgICAKLSAgICAgICAgX3ZhbHVlID0gcGFyc2UocywgcmVzb2x2ZXIpOwotICAgIH0KLQotICAgIC8vIEJVR0JVRyAtIGhhdmluZyBwcmVmaXggaGVyZSBtYXkgbm90IHdvcmsKLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfUU5hbWUoUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIGFzc2VydCBuYW1lICE9IG51bGw7Ci0gICAgICAgIAotICAgICAgICAvLyBTeW5jIGZvcmNlIG9mIGNyZWF0aW9uIG9mIG5hbWVzYXBjZSBtYXBwaW5nIC4uCi0gICAgICAgIAotICAgICAgICBpZiAoaGFzX3N0b3JlKCkpCi0gICAgICAgICAgICBnZXRfc3RvcmUoKS5maW5kX3ByZWZpeF9mb3JfbnN1cmkoIG5hbWUuZ2V0TmFtZXNwYWNlVVJJKCksIG51bGwgKTsKLSAgICAgICAgCi0gICAgICAgIF92YWx1ZSA9IG5hbWU7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X3htbGFueXNpbXBsZShYbWxBbnlTaW1wbGVUeXBlIHZhbHVlKQotICAgIHsKLSAgICAgICAgX3ZhbHVlID0gcGFyc2UodmFsdWUuZ2V0U3RyaW5nVmFsdWUoKSwgTmFtZXNwYWNlQ29udGV4dC5nZXRDdXJyZW50KCkpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHNldF9uaWwoKSB7IF92YWx1ZSA9IG51bGw7IH0KLQotICAgIC8vIHNldHRlcnMsIGdldHRlcnMgKHNldHRlciBhbHJlYWR5IGhhbmRsZWQgdmlhIHNldF90ZXh0KQotCi0gICAgcHVibGljIFFOYW1lIHFOYW1lVmFsdWUoKQotICAgICAgICB7IGNoZWNrX2RhdGVkKCk7IHJldHVybiBfdmFsdWU7IH0KLQotICAgIC8vIGNvbXBhcmF0b3JzCi0gICAgcHJvdGVjdGVkIGJvb2xlYW4gZXF1YWxfdG8oWG1sT2JqZWN0IG9iaikKLSAgICB7Ci0gICAgICAgIHJldHVybiBfdmFsdWUuZXF1YWxzKCgoWG1sT2JqZWN0QmFzZSlvYmopLnFOYW1lVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIGludCB2YWx1ZV9oYXNoX2NvZGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF92YWx1ZS5oYXNoQ29kZSgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL0phdmFRTmFtZUhvbGRlckV4LmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhUU5hbWVIb2xkZXJFeC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDA3NDkzLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL0phdmFRTmFtZUhvbGRlckV4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzUgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlZhbGlkYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uUHJlZml4UmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5RTmFtZUhlbHBlcjsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBKYXZhUU5hbWVIb2xkZXJFeCBleHRlbmRzIEphdmFRTmFtZUhvbGRlcgotewotICAgIHByaXZhdGUgU2NoZW1hVHlwZSBfc2NoZW1hVHlwZTsKLQotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgc2NoZW1hVHlwZSgpCi0gICAgICAgIHsgcmV0dXJuIF9zY2hlbWFUeXBlOyB9Ci0KLSAgICBwdWJsaWMgSmF2YVFOYW1lSG9sZGVyRXgoU2NoZW1hVHlwZSB0eXBlLCBib29sZWFuIGNvbXBsZXgpCi0gICAgICAgIHsgX3NjaGVtYVR5cGUgPSB0eXBlOyBpbml0Q29tcGxleFR5cGUoY29tcGxleCwgZmFsc2UpOyB9Ci0KLSAgICBwcm90ZWN0ZWQgaW50IGdldF93c2Nhbm9uX3J1bGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHNjaGVtYVR5cGUoKS5nZXRXaGl0ZVNwYWNlUnVsZSgpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHNldF90ZXh0KFN0cmluZyBzKQotICAgIHsKLSAgICAgICAgUHJlZml4UmVzb2x2ZXIgcmVzb2x2ZXIgPSBOYW1lc3BhY2VDb250ZXh0LmdldEN1cnJlbnQoKTsKLQotICAgICAgICBpZiAocmVzb2x2ZXIgPT0gbnVsbCAmJiBoYXNfc3RvcmUoKSkKLSAgICAgICAgICAgIHJlc29sdmVyID0gZ2V0X3N0b3JlKCk7Ci0KLSAgICAgICAgUU5hbWUgdjsKLSAgICAgICAgaWYgKF92YWxpZGF0ZU9uU2V0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHYgPSB2YWxpZGF0ZUxleGljYWwocywgX3NjaGVtYVR5cGUsIF92b29yVmMsIHJlc29sdmVyKTsKLSAgICAgICAgICAgIGlmICh2ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgdmFsaWRhdGVWYWx1ZSh2LCBfc2NoZW1hVHlwZSwgX3Zvb3JWYyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdiA9IEphdmFRTmFtZUhvbGRlci52YWxpZGF0ZUxleGljYWwocywgX3Zvb3JWYywgcmVzb2x2ZXIpOwotCi0gICAgICAgIHN1cGVyLnNldF9RTmFtZSh2KTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfUU5hbWUoUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIGlmIChfdmFsaWRhdGVPblNldCgpKQotICAgICAgICAgICAgdmFsaWRhdGVWYWx1ZShuYW1lLCBfc2NoZW1hVHlwZSwgX3Zvb3JWYyk7Ci0gICAgICAgIHN1cGVyLnNldF9RTmFtZSggbmFtZSApOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHNldF94bWxhbnlzaW1wbGUoWG1sQW55U2ltcGxlVHlwZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIFFOYW1lIHY7Ci0gICAgICAgIGlmIChfdmFsaWRhdGVPblNldCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICB2ID0gdmFsaWRhdGVMZXhpY2FsKHZhbHVlLmdldFN0cmluZ1ZhbHVlKCksIF9zY2hlbWFUeXBlLCBfdm9vclZjLCBOYW1lc3BhY2VDb250ZXh0LmdldEN1cnJlbnQoKSk7Ci0KLSAgICAgICAgICAgIGlmICh2ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgdmFsaWRhdGVWYWx1ZSh2LCBfc2NoZW1hVHlwZSwgX3Zvb3JWYyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdiA9IEphdmFRTmFtZUhvbGRlci52YWxpZGF0ZUxleGljYWwodmFsdWUuZ2V0U3RyaW5nVmFsdWUoKSwgX3Zvb3JWYywgTmFtZXNwYWNlQ29udGV4dC5nZXRDdXJyZW50KCkpOwotCi0gICAgICAgIHN1cGVyLnNldF9RTmFtZSh2KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFFOYW1lIHZhbGlkYXRlTGV4aWNhbChTdHJpbmcgdiwgU2NoZW1hVHlwZSBzVHlwZSwgVmFsaWRhdGlvbkNvbnRleHQgY29udGV4dCwgUHJlZml4UmVzb2x2ZXIgcmVzb2x2ZXIpCi0gICAgewotICAgICAgICBRTmFtZSBuYW1lID0gSmF2YVFOYW1lSG9sZGVyLnZhbGlkYXRlTGV4aWNhbCh2LCBjb250ZXh0LCByZXNvbHZlcik7Ci0gICAgICAgIAotICAgICAgICAvLyBjaGVjayBwYXR0ZXJuCi0gICAgICAgIGlmIChzVHlwZS5oYXNQYXR0ZXJuRmFjZXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFzVHlwZS5tYXRjaFBhdHRlcm5GYWNldCh2KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBUT0RPIC0gZGVzY3JpYmUgc3RyaW5nIGFuZCBwYXR0ZXJuIGhlcmUgaW4gZXJyb3IKLSAgICAgICAgICAgICAgICBjb250ZXh0LmludmFsaWQoIlFOYW1lICciICsgdiArICInIGRvZXMgbm90IG1hdGNoIHBhdHRlcm4gZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgWG1sT2JqZWN0IHg7Ci0KLSAgICAgICAgaWYgKCh4ID0gc1R5cGUuZ2V0RmFjZXQoU2NoZW1hVHlwZS5GQUNFVF9MRU5HVEgpKSAhPSBudWxsKQotICAgICAgICAgICAgaWYgKCgoKFhtbE9iamVjdEJhc2UpeCkuYmlnSW50ZWdlclZhbHVlKCkuaW50VmFsdWUoKSkgIT0gdi5sZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmludmFsaWQoIlFOYW1lICciICsgdiArICInIGRvZXMgbm90IG1hdGNoIGxlbmd0aCBmYWNldCBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNUeXBlKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoKHggPSBzVHlwZS5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX01JTl9MRU5HVEgpKSAhPSBudWxsKQotICAgICAgICAgICAgaWYgKCgoKFhtbE9iamVjdEJhc2UpeCkuYmlnSW50ZWdlclZhbHVlKCkuaW50VmFsdWUoKSkgPiB2Lmxlbmd0aCgpKQotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgiUU5hbWUgJyIgKyB2ICsgIicgZG9lcyBub3QgbWF0Y2ggbWluIGxlbmd0aCBmYWNldCBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNUeXBlKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoKHggPSBzVHlwZS5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX01BWF9MRU5HVEgpKSAhPSBudWxsKQotICAgICAgICAgICAgaWYgKCgoKFhtbE9iamVjdEJhc2UpeCkuYmlnSW50ZWdlclZhbHVlKCkuaW50VmFsdWUoKSkgPCB2Lmxlbmd0aCgpKQotICAgICAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgiUU5hbWUgJyIgKyB2ICsgIicgZG9lcyBub3QgbWF0Y2ggbWF4IGxlbmd0aCBmYWNldCBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNUeXBlKSk7Ci0KLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHZhbGlkYXRlVmFsdWUoUU5hbWUgdiwgU2NoZW1hVHlwZSBzVHlwZSwgVmFsaWRhdGlvbkNvbnRleHQgY29udGV4dCkKLSAgICB7Ci0gICAgICAgIFhtbE9iamVjdFtdIHZhbHMgPSBzVHlwZS5nZXRFbnVtZXJhdGlvblZhbHVlcygpOwotICAgICAgICBpZiAodmFscyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgaWYgKHYuZXF1YWxzKCgoWG1sT2JqZWN0QmFzZSl2YWxzW2ldKS5xTmFtZVZhbHVlKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjb250ZXh0LmludmFsaWQoIlFOYW1lICciICsgdiArICInIGlzIG5vdCBhIHZhbGlkIGVudWVtcmF0ZWQgdmFsdWUgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgdmFsaWRhdGVfc2ltcGxldmFsKFN0cmluZyBsZXhpY2FsLCBWYWxpZGF0aW9uQ29udGV4dCBjdHgpCi0gICAgewotICAgICAgICB2YWxpZGF0ZVZhbHVlKHFOYW1lVmFsdWUoKSwgc2NoZW1hVHlwZSgpLCBjdHgpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YVN0cmluZ0VudW1lcmF0aW9uSG9sZGVyRXguamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL0phdmFTdHJpbmdFbnVtZXJhdGlvbkhvbGRlckV4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwOGVhYmIuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YVN0cmluZ0VudW1lcmF0aW9uSG9sZGVyRXguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uVmFsaWRhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5RTmFtZUhlbHBlcjsKLQotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSmF2YVN0cmluZ0VudW1lcmF0aW9uSG9sZGVyRXggZXh0ZW5kcyBKYXZhU3RyaW5nSG9sZGVyRXgKLXsKLSAgICBwdWJsaWMgSmF2YVN0cmluZ0VudW1lcmF0aW9uSG9sZGVyRXgoU2NoZW1hVHlwZSB0eXBlLCBib29sZWFuIGNvbXBsZXgpCi0gICAgewotICAgICAgICBzdXBlcih0eXBlLCBjb21wbGV4KTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFN0cmluZ0VudW1BYnN0cmFjdEJhc2UgX3ZhbDsKLQotICAgIC8vIHVwZGF0ZSB0aGUgaW50dmFsIHdoZW4gc2V0dGluZyB2aWEgdGV4dCwgbmlsLgotICAgIHByb3RlY3RlZCB2b2lkIHNldF90ZXh0KFN0cmluZyBzKQotICAgIHsKLSAgICAgICAgU3RyaW5nRW51bUFic3RyYWN0QmFzZSBlbnVtID0gc2NoZW1hVHlwZSgpLmVudW1Gb3JTdHJpbmcocyk7Ci0gICAgICAgIGlmIChlbnVtID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uKCJTdHJpbmcgJyIgKyBzICsgIicgaXMgbm90IGEgdmFsaWQgZW51bWVyYXRlZCB2YWx1ZSBmb3IgIiArIHNjaGVtYVR5cGUoKSk7Ci0KLSAgICAgICAgc3VwZXIuc2V0X3RleHQocyk7Ci0gICAgICAgIF92YWwgPSBlbnVtOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB2YWxpZGF0ZUxleGljYWwoU3RyaW5nIHYsIFNjaGVtYVR5cGUgc1R5cGUsIFZhbGlkYXRpb25Db250ZXh0IGNvbnRleHQpCi0gICAgewotICAgICAgICBKYXZhU3RyaW5nSG9sZGVyRXgudmFsaWRhdGVMZXhpY2FsKHYsIHNUeXBlLCBjb250ZXh0KTsKLQotICAgICAgICBpZiAoc1R5cGUuaGFzU3RyaW5nRW51bVZhbHVlcygpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoc1R5cGUuZW51bUZvclN0cmluZyh2KSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmludmFsaWQoIlN0cmluZyAnIiArIHYgKyAiJyBpcyBub3QgYSB2YWxpZCBlbnVtZXJhdGVkIHZhbHVlIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUoc1R5cGUpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X25pbCgpCi0gICAgewotICAgICAgICBfdmFsID0gbnVsbDsKLSAgICAgICAgc3VwZXIuc2V0X25pbCgpOwotICAgIH0KLQotICAgIC8vIHNldC9nZXQgdGhlIGVudW0KLSAgICBwdWJsaWMgU3RyaW5nRW51bUFic3RyYWN0QmFzZSBlbnVtVmFsdWUoKQotICAgIHsKLSAgICAgICAgY2hlY2tfZGF0ZWQoKTsKLSAgICAgICAgcmV0dXJuIF92YWw7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X2VudW0oU3RyaW5nRW51bUFic3RyYWN0QmFzZSBlbnVtKQotICAgIHsKLSAgICAgICAgQ2xhc3MgZWpjID0gc2NoZW1hVHlwZSgpLmdldEVudW1KYXZhQ2xhc3MoKTsKLSAgICAgICAgaWYgKGVqYyAhPSBudWxsICYmICFlbnVtLmdldENsYXNzKCkuZXF1YWxzKGVqYykpCi0gICAgICAgICAgICB0aHJvdyBuZXcgWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uKCk7Ci0KLSAgICAgICAgc3VwZXIuc2V0X3RleHQoZW51bS50b1N0cmluZygpKTsKLSAgICAgICAgX3ZhbCA9IGVudW07Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL0phdmFTdHJpbmdIb2xkZXIuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL0phdmFTdHJpbmdIb2xkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I3ZDllOC4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhU3RyaW5nSG9sZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hLkJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtOwotCi1wdWJsaWMgY2xhc3MgSmF2YVN0cmluZ0hvbGRlciBleHRlbmRzIFhtbE9iamVjdEJhc2UKLXsKLSAgICBwdWJsaWMgSmF2YVN0cmluZ0hvbGRlcigpIHt9Ci0KLSAgICBwdWJsaWMgU2NoZW1hVHlwZSBzY2hlbWFUeXBlKCkKLSAgICAgICAgeyByZXR1cm4gQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfU1RSSU5HOyB9Ci0KLSAgICBwcml2YXRlIFN0cmluZyBfdmFsdWU7Ci0KLSAgICBwcm90ZWN0ZWQgaW50IGdldF93c2Nhbm9uX3J1bGUoKQotICAgICAgICB7IHJldHVybiBTY2hlbWFUeXBlLldTX1BSRVNFUlZFOyB9Ci0KLSAgICAvLyBTSU1QTEUgVkFMVUUgQUNDRVNTT1JTIEJFTE9XIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICBwdWJsaWMgU3RyaW5nIGNvbXB1dGVfdGV4dChOYW1lc3BhY2VNYW5hZ2VyIG5zbSkgeyByZXR1cm4gX3ZhbHVlOyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X3RleHQoU3RyaW5nIHMpIHsgX3ZhbHVlID0gczsgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldF9uaWwoKSB7IF92YWx1ZSA9IG51bGw7IH0KLQotICAgIC8vIHN0cmluZyBzZXR0ZXIgYW5kIGdldHRlciBhbHJlYWR5IGhhbmRsZWQgYnkgWG1sT2JqZWN0QmFzZQotCi0gICAgLy8gY29tcGFyYXRvcnMKLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBlcXVhbF90byhYbWxPYmplY3Qgb2JqKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF92YWx1ZS5lcXVhbHMoKChYbWxPYmplY3RCYXNlKW9iaikuc3RyaW5nVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIGludCB2YWx1ZV9oYXNoX2NvZGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF92YWx1ZS5oYXNoQ29kZSgpOwotICAgIH0KLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc19kZWZhdWx0YWJsZV93cyhTdHJpbmcgdikKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhU3RyaW5nSG9sZGVyRXguamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL0phdmFTdHJpbmdIb2xkZXJFeC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjAxZmViLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL0phdmFTdHJpbmdIb2xkZXJFeC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlZhbGlkYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uUU5hbWVIZWxwZXI7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBKYXZhU3RyaW5nSG9sZGVyRXggZXh0ZW5kcyBKYXZhU3RyaW5nSG9sZGVyCi17Ci0gICAgcHJpdmF0ZSBTY2hlbWFUeXBlIF9zY2hlbWFUeXBlOwotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgc2NoZW1hVHlwZSgpCi0gICAgICAgIHsgcmV0dXJuIF9zY2hlbWFUeXBlOyB9Ci0KLSAgICBwdWJsaWMgSmF2YVN0cmluZ0hvbGRlckV4KFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IF9zY2hlbWFUeXBlID0gdHlwZTsgaW5pdENvbXBsZXhUeXBlKGNvbXBsZXgsIGZhbHNlKTsgfQotCi0gICAgcHJvdGVjdGVkIGludCBnZXRfd3NjYW5vbl9ydWxlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzY2hlbWFUeXBlKCkuZ2V0V2hpdGVTcGFjZVJ1bGUoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfdGV4dChTdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIGlmIChfdmFsaWRhdGVPblNldCgpKQotICAgICAgICAgICAgdmFsaWRhdGVMZXhpY2FsKHMsIF9zY2hlbWFUeXBlLCBfdm9vclZjKTsKLSAgICAgICAgICAgICAgICAgCi0gICAgICAgIHN1cGVyLnNldF90ZXh0KHMpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBib29sZWFuIGlzX2RlZmF1bHRhYmxlX3dzKFN0cmluZyB2KSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2YWxpZGF0ZUxleGljYWwodiwgX3NjaGVtYVR5cGUsIF92b29yVmMpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChYbWxWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgdmFsaWRhdGVMZXhpY2FsKFN0cmluZyB2LCBTY2hlbWFUeXBlIHNUeXBlLCBWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0KQotICAgIHsKLSAgICAgICAgLy8gY2hlY2sgYWdhaW5zdCBwYXR0ZXJuCi0gICAgICAgIGlmICghc1R5cGUubWF0Y2hQYXR0ZXJuRmFjZXQodikpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCggIlN0cmluZzogJyIgKyB2ICsgIicgZG9lcyBub3QgbWF0Y2ggcGF0dGVybiBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNUeXBlKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjaGVjayBhZ2FpbnN0IGxlbmd0aAotICAgICAgICBYbWxPYmplY3QgbGVuID0gc1R5cGUuZ2V0RmFjZXQoU2NoZW1hVHlwZS5GQUNFVF9MRU5HVEgpOwotICAgICAgICBpZiAobGVuICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBtID0gKChYbWxPYmplY3RCYXNlKWxlbikuYmlnSW50ZWdlclZhbHVlKCkuaW50VmFsdWUoKTsKLSAgICAgICAgICAgIGlmICh2Lmxlbmd0aCgpICE9IG0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKAotICAgICAgICAgICAgICAgICAgICAiU3RyaW5nIGxlbmd0aCAoIiArIHYubGVuZ3RoKCkgKyAiKSBkb2VzIG5vdCBtYXRjaCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJsZW5ndGggZmFjZXQgKCIgKyBtICsgIikgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGNoZWNrIGFnYWluc3QgbWluIGxlbmd0aAotICAgICAgICBYbWxPYmplY3QgbWluID0gc1R5cGUuZ2V0RmFjZXQoU2NoZW1hVHlwZS5GQUNFVF9NSU5fTEVOR1RIKTsKLSAgICAgICAgaWYgKG1pbiAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbSA9ICgoWG1sT2JqZWN0QmFzZSltaW4pLmJpZ0ludGVnZXJWYWx1ZSgpLmludFZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAodi5sZW5ndGgoKSA8IG0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKAotICAgICAgICAgICAgICAgICAgICAiU3RyaW5nIGxlbmd0aCAoIiArIHYubGVuZ3RoKCkgKyAiKSBpcyBsZXNzIHRoYW4gIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAibWluIGxlbmd0aCBmYWNldCAoIiArIG0gKyAiKSBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNUeXBlKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gY2hlY2sgYWdhaW5zdCBtaW4gbGVuZ3RoCi0gICAgICAgIFhtbE9iamVjdCBtYXggPSBzVHlwZS5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX01BWF9MRU5HVEgpOwotICAgICAgICBpZiAobWF4ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBtID0gKChYbWxPYmplY3RCYXNlKW1heCkuYmlnSW50ZWdlclZhbHVlKCkuaW50VmFsdWUoKTsKLSAgICAgICAgICAgIGlmICh2Lmxlbmd0aCgpID4gbSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmludmFsaWQoCi0gICAgICAgICAgICAgICAgICAgICJTdHJpbmcgbGVuZ3RoICgiICsgdi5sZW5ndGgoKSArICIpIGlzIGdyZWF0ZXIgdGhhbiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICJtYXggbGVuZ3RoIGZhY2V0ICgiICsgbSArICIpIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUoc1R5cGUpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgdmFsaWRhdGVfc2ltcGxldmFsKFN0cmluZyBsZXhpY2FsLCBWYWxpZGF0aW9uQ29udGV4dCBjdHgpCi0gICAgewotICAgICAgICB2YWxpZGF0ZUxleGljYWwoc3RyaW5nVmFsdWUoKSwgc2NoZW1hVHlwZSgpLCBjdHgpOwotICAgIH0KLSAgICAKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL0phdmFVcmlIb2xkZXIuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL0phdmFVcmlIb2xkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2YwMzFjMy4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9KYXZhVXJpSG9sZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55VVJJOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uVmFsaWRhdGlvbkNvbnRleHQ7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hLkJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgSmF2YVVyaUhvbGRlciBleHRlbmRzIFhtbE9iamVjdEJhc2UKLXsKLSAgICBwdWJsaWMgSmF2YVVyaUhvbGRlcigpIHt9Ci0KLSAgICBwdWJsaWMgU2NoZW1hVHlwZSBzY2hlbWFUeXBlKCkKLSAgICAgICAgeyByZXR1cm4gQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0uU1RfQU5ZX1VSSTsgfQotCi0gICAgcHJpdmF0ZSBTdHJpbmcgX3ZhbHVlOwotCi0gICAgcHVibGljIFN0cmluZyBjb21wdXRlX3RleHQoTmFtZXNwYWNlTWFuYWdlciBuc20pIHsgcmV0dXJuIF92YWx1ZSA9PSBudWxsID8gIiIgOiBfdmFsdWU7IH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfdGV4dChTdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIGlmIChfdmFsaWRhdGVPblNldCgpKQotICAgICAgICAgICAgdmFsaWRhdGVMZXhpY2FsKHMsIF92b29yVmMpOwotICAgICAgICBfdmFsdWUgPSBzOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB2YWxpZGF0ZUxleGljYWwoU3RyaW5nIHYsIFZhbGlkYXRpb25Db250ZXh0IGNvbnRleHQpCi0gICAgewotICAgICAgICAvLyBFbm91Z2ggdmFsaWRhdGlvbiB0byBnZXQgc2NoZW1hIGZvciBzY2hlbWEgd29ya2luZwotCi0gICAgICAgIGlmICh2LnN0YXJ0c1dpdGgoICIjIyIgKSkKLSAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgiWG1sQW55VVJJIGlzIG1hbGZvcm1lZDogIiArIHYgKTsKLQotICAgIH0KLSAgICAKLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfbmlsKCkgeyBfdmFsdWUgPSBudWxsOyB9Ci0KLSAgICAvLyBzdHJpbmcgc2V0dGVyIGFuZCBnZXR0ZXIgYWxyZWFkeSBoYW5kbGVkIGJ5IFhtbE9iamVjdEJhc2UKLQotICAgIC8vIGNvbXBhcmF0b3JzCi0gICAgcHJvdGVjdGVkIGJvb2xlYW4gZXF1YWxfdG8oWG1sT2JqZWN0IG9iaikKLSAgICB7Ci0gICAgICAgIHJldHVybiBfdmFsdWUuZXF1YWxzKCgoWG1sQW55VVJJKW9iaikuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIGludCB2YWx1ZV9oYXNoX2NvZGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF92YWx1ZS5oYXNoQ29kZSgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL0phdmFVcmlIb2xkZXJFeC5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YVVyaUhvbGRlckV4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0ZmZlZDQuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvSmF2YVVyaUhvbGRlckV4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODcgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5WYWxpZGF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlFOYW1lSGVscGVyOwotCi1wdWJsaWMgY2xhc3MgSmF2YVVyaUhvbGRlckV4IGV4dGVuZHMgSmF2YVVyaUhvbGRlcgotewotICAgIHByaXZhdGUgU2NoZW1hVHlwZSBfc2NoZW1hVHlwZTsKLQotICAgIHB1YmxpYyBTY2hlbWFUeXBlIHNjaGVtYVR5cGUoKQotICAgICAgICB7IHJldHVybiBfc2NoZW1hVHlwZTsgfQotCi0gICAgcHVibGljIEphdmFVcmlIb2xkZXJFeChTY2hlbWFUeXBlIHR5cGUsIGJvb2xlYW4gY29tcGxleCkKLSAgICAgICAgeyBfc2NoZW1hVHlwZSA9IHR5cGU7IGluaXRDb21wbGV4VHlwZShjb21wbGV4LCBmYWxzZSk7IH0KLQotICAgIHByb3RlY3RlZCBpbnQgZ2V0X3dzY2Fub25fcnVsZSgpCi0gICAgewotICAgICAgICByZXR1cm4gc2NoZW1hVHlwZSgpLmdldFdoaXRlU3BhY2VSdWxlKCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X3RleHQoU3RyaW5nIHMpCi0gICAgewotICAgICAgICBpZiAoX3ZhbGlkYXRlT25TZXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFjaGVjayhzLCBfc2NoZW1hVHlwZSkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOwotCi0gICAgICAgICAgICBpZiAoIV9zY2hlbWFUeXBlLm1hdGNoUGF0dGVybkZhY2V0KHMpKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBYbWxWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN1cGVyLnNldF90ZXh0KHMpOwotICAgIH0KLQotLy8gICAgLy8gc2V0dGVycwotLy8gICAgcHJvdGVjdGVkIHZvaWQgc2V0X3VyaShVUkkgdXJpKQotLy8gICAgewotLy8gICAgICAgIGlmICghY2hlY2sodXJpLnRvU3RyaW5nKCksIF9zY2hlbWFUeXBlKSkKLS8vICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOwotLy8KLS8vICAgICAgICBzdXBlci5zZXRfdXJpKHVyaSk7Ci0vLyAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgdmFsaWRhdGVMZXhpY2FsKFN0cmluZyB2LCBTY2hlbWFUeXBlIHNUeXBlLCBWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0KQotICAgIHsKLSAgICAgICAgWG1sQW55VXJpSW1wbC52YWxpZGF0ZUxleGljYWwodiwgY29udGV4dCk7Ci0gICAgICAgIAotICAgICAgICBYbWxPYmplY3RbXSB2YWxzID0gc1R5cGUuZ2V0RW51bWVyYXRpb25WYWx1ZXMoKTsKLQotICAgICAgICBpZiAodmFscyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgaTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICggaSA9IDAgOyBpIDwgdmFscy5sZW5ndGggOyBpKysgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBlID0gKChTaW1wbGVWYWx1ZSl2YWxzW2ldKS5nZXRTdHJpbmdWYWx1ZSgpOwotCi0gICAgICAgICAgICAgICAgaWYgKGUuZXF1YWxzKCB2ICkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaSA+PSB2YWxzLmxlbmd0aCkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmludmFsaWQoImFueVVSSSAnIiArIHYgKyAiJyBpcyBub3QgYSB2YWxpZCBlbnVtZXJhdGVkIHZhbHVlIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUoc1R5cGUpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gY2hlY2sgcGF0dGVybgotICAgICAgICBpZiAoc1R5cGUuaGFzUGF0dGVybkZhY2V0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghc1R5cGUubWF0Y2hQYXR0ZXJuRmFjZXQodikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gVE9ETyAtIGRlc2NyaWJlIHN0cmluZyBhbmQgcGF0dGVybiBoZXJlIGluIGVycm9yCi0gICAgICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKCJhbnlVUkkgdmFsdWUgJyIgKyB2ICsgIicgZG9lcyBub3QgbWF0Y2ggcGF0dGVybiBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNUeXBlKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBYbWxPYmplY3QgeDsKLQotICAgICAgICBpZiAoKHggPSBzVHlwZS5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX0xFTkdUSCkpICE9IG51bGwpCi0gICAgICAgICAgICBpZiAoKCgoU2ltcGxlVmFsdWUpeCkuZ2V0QmlnSW50ZWdlclZhbHVlKCkuaW50VmFsdWUoKSkgIT0gdi5sZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmludmFsaWQoImFueVVSSSB2YWx1ZSAnIiArIHYgKyAiJyBkb2VzIG5vdCBtYXRjaCBsZW5ndGggZmFjZXQgKCIgKyAoKFNpbXBsZVZhbHVlKXgpLmdldEJpZ0ludGVnZXJWYWx1ZSgpICsgIikgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkpOwotICAgICAgICAKLSAgICAgICAgaWYgKCh4ID0gc1R5cGUuZ2V0RmFjZXQoU2NoZW1hVHlwZS5GQUNFVF9NSU5fTEVOR1RIKSkgIT0gbnVsbCkKLSAgICAgICAgICAgIGlmICgoKChTaW1wbGVWYWx1ZSl4KS5nZXRCaWdJbnRlZ2VyVmFsdWUoKS5pbnRWYWx1ZSgpKSA+IHYubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKCJhbnlVUkkgdmFsdWUgJyIgKyB2ICsgIicgZG9lcyBub3QgbWF0Y2ggbWluIGxlbmd0aCBmYWNldCAoIiArICgoU2ltcGxlVmFsdWUpeCkuZ2V0QmlnSW50ZWdlclZhbHVlKCkgKyAiKSBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNUeXBlKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoKHggPSBzVHlwZS5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX01BWF9MRU5HVEgpKSAhPSBudWxsKQotICAgICAgICAgICAgaWYgKCgoKFNpbXBsZVZhbHVlKXgpLmdldEJpZ0ludGVnZXJWYWx1ZSgpLmludFZhbHVlKCkpIDwgdi5sZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmludmFsaWQoImFueVVSSSB2YWx1ZSAnIiArIHYgKyAiJyBkb2VzIG5vdCBtYXRjaCBtYXggbGVuZ3RoIGZhY2V0ICgiICsgKChTaW1wbGVWYWx1ZSl4KS5nZXRCaWdJbnRlZ2VyVmFsdWUoKSArICIpIGZvciAiICsgUU5hbWVIZWxwZXIucmVhZGFibGUoc1R5cGUpKTsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBjaGVjayhTdHJpbmcgdiwgU2NoZW1hVHlwZSBzVHlwZSkKLSAgICB7Ci0gICAgICAgIGludCBsZW5ndGggPSB2PT1udWxsID8gMCA6IHYubGVuZ3RoKCk7Ci0gICAgICAgIC8vIGNoZWNrIGFnYWluc3QgbGVuZ3RoCi0gICAgICAgIFhtbE9iamVjdCBsZW4gPSBzVHlwZS5nZXRGYWNldChTY2hlbWFUeXBlLkZBQ0VUX0xFTkdUSCk7Ci0gICAgICAgIGlmIChsZW4gIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IG0gPSAoKFNpbXBsZVZhbHVlKWxlbikuZ2V0QmlnSW50ZWdlclZhbHVlKCkuaW50VmFsdWUoKTsKLSAgICAgICAgICAgIGlmICghKGxlbmd0aCAhPSBtKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjaGVjayBhZ2FpbnN0IG1pbiBsZW5ndGgKLSAgICAgICAgWG1sT2JqZWN0IG1pbiA9IHNUeXBlLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfTUlOX0xFTkdUSCk7Ci0gICAgICAgIGlmIChtaW4gIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IG0gPSAoKFNpbXBsZVZhbHVlKW1pbikuZ2V0QmlnSW50ZWdlclZhbHVlKCkuaW50VmFsdWUoKTsKLSAgICAgICAgICAgIGlmICghKGxlbmd0aCA+PSBtKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjaGVjayBhZ2FpbnN0IG1pbiBsZW5ndGgKLSAgICAgICAgWG1sT2JqZWN0IG1heCA9IHNUeXBlLmdldEZhY2V0KFNjaGVtYVR5cGUuRkFDRVRfTUFYX0xFTkdUSCk7Ci0gICAgICAgIGlmIChtYXggIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IG0gPSAoKFNpbXBsZVZhbHVlKW1heCkuZ2V0QmlnSW50ZWdlclZhbHVlKCkuaW50VmFsdWUoKTsKLSAgICAgICAgICAgIGlmICghKGxlbmd0aCA8PSBtKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZV9zaW1wbGV2YWwoU3RyaW5nIGxleGljYWwsIFZhbGlkYXRpb25Db250ZXh0IGN0eCkKLSAgICB7Ci0gICAgICAgIHZhbGlkYXRlTGV4aWNhbChzdHJpbmdWYWx1ZSgpLCBzY2hlbWFUeXBlKCksIGN0eCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvTmFtZXNwYWNlQ29udGV4dC5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvTmFtZXNwYWNlQ29udGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTRjMzU1Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL05hbWVzcGFjZUNvbnRleHQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlByZWZpeFJlc29sdmVyOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuUHJveHk7Ci0KLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLlN0YXJ0RWxlbWVudDsKLQotcHVibGljIGNsYXNzIE5hbWVzcGFjZUNvbnRleHQgaW1wbGVtZW50cyBQcmVmaXhSZXNvbHZlcgotewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUWVBFX1NUT1JFICAgID0gMTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgWE1MX09CSkVDVCAgICA9IDI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BUCAgICAgICAgICAgPSAzOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFSVF9FTEVNRU5UID0gNDsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUkVTT0xWRVIgICAgICA9IDU7Ci0KLSAgICBwcml2YXRlIE9iamVjdCBfb2JqOwotICAgIHByaXZhdGUgaW50IF9jb2RlOwotCi0gICAgcHVibGljIE5hbWVzcGFjZUNvbnRleHQoTWFwIHByZWZpeFRvVXJpTWFwKQotICAgIHsKLSAgICAgICAgX2NvZGUgPSBNQVA7Ci0gICAgICAgIF9vYmogPSBwcmVmaXhUb1VyaU1hcDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTmFtZXNwYWNlQ29udGV4dChUeXBlU3RvcmUgdHlwZVN0b3JlKQotICAgIHsKLSAgICAgICAgX2NvZGUgPSBUWVBFX1NUT1JFOwotICAgICAgICBfb2JqID0gdHlwZVN0b3JlOwotICAgIH0KLQotICAgIHB1YmxpYyBOYW1lc3BhY2VDb250ZXh0KFhtbE9iamVjdCB4bWxPYmplY3QpCi0gICAgewotICAgICAgICBfY29kZSA9IFhNTF9PQkpFQ1Q7Ci0gICAgICAgIF9vYmogPSB4bWxPYmplY3Q7Ci0gICAgfQotCi0gICAgcHVibGljIE5hbWVzcGFjZUNvbnRleHQoU3RhcnRFbGVtZW50IHN0YXJ0KQotICAgIHsKLSAgICAgICAgX2NvZGUgPSBTVEFSVF9FTEVNRU5UOwotICAgICAgICBfb2JqID0gc3RhcnQ7Ci0gICAgfQotCi0gICAgcHVibGljIE5hbWVzcGFjZUNvbnRleHQoUHJlZml4UmVzb2x2ZXIgcmVzb2x2ZXIpCi0gICAgewotICAgICAgICBfY29kZSA9IFJFU09MVkVSOwotICAgICAgICBfb2JqID0gcmVzb2x2ZXI7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU3RhY2sgbWFuYWdlbWVudCBpZiAoaGVhdmVuIGhlbHAgdXMpIHdlIGV2ZXIgbmVlZCB0byBkbwotICAgICAqIG5lc3RlZCBjb21waWxhdGlvbiBvZiBzY2hlbWEgdHlwZSBzeXN0ZW0uCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgTmFtZXNwYWNlQ29udGV4dFN0YWNrCi0gICAgewotICAgICAgICBOYW1lc3BhY2VDb250ZXh0IGN1cnJlbnQ7Ci0gICAgICAgIEFycmF5TGlzdCBzdGFjayA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgZmluYWwgdm9pZCBwdXNoKE5hbWVzcGFjZUNvbnRleHQgbmV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgc3RhY2suYWRkKGN1cnJlbnQpOwotICAgICAgICAgICAgY3VycmVudCA9IG5leHQ7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWwgdm9pZCBwb3AoKQotICAgICAgICB7Ci0gICAgICAgICAgICBjdXJyZW50ID0gKE5hbWVzcGFjZUNvbnRleHQpc3RhY2suZ2V0KHN0YWNrLnNpemUoKSAtIDEpOwotICAgICAgICAgICAgc3RhY2sucmVtb3ZlKHN0YWNrLnNpemUoKSAtIDEpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgVGhyZWFkTG9jYWwgTmFtZXNwYWNlQ29udGV4dFN0YWNrID0gbmV3IFRocmVhZExvY2FsKCkKLSAgICB7Ci0gICAgICAgIHByb3RlY3RlZCBPYmplY3QgaW5pdGlhbFZhbHVlKCkgeyByZXR1cm4gbmV3IE5hbWVzcGFjZUNvbnRleHRTdGFjaygpOyB9Ci0gICAgfTsKLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBwdXNoKE5hbWVzcGFjZUNvbnRleHQgbmV4dCkKLSAgICB7Ci0gICAgICAgICgoTmFtZXNwYWNlQ29udGV4dFN0YWNrKU5hbWVzcGFjZUNvbnRleHRTdGFjay5nZXQoKSkucHVzaChuZXh0KTsKLSAgICB9Ci0gICAgICAgICAgICAKLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZUZvclByZWZpeChTdHJpbmcgcHJlZml4KQotICAgIHsKLSAgICAgICAgaWYgKHByZWZpeCAhPSBudWxsICYmIHByZWZpeC5lcXVhbHMoInhtbCIpKQotICAgICAgICAgICAgcmV0dXJuICJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiOwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChfY29kZSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBYTUxfT0JKRUNUOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFR5cGVTdG9yZVVzZXIgaW1wbDsKLSAgICAgICAgICAgICAgICBPYmplY3Qgb2JqID0gX29iajsKLSAgICAgICAgICAgICAgICBpZiAoUHJveHkuaXNQcm94eUNsYXNzKG9iai5nZXRDbGFzcygpKSkKLSAgICAgICAgICAgICAgICAgICAgb2JqID0gUHJveHkuZ2V0SW52b2NhdGlvbkhhbmRsZXIob2JqKTsKLQotICAgICAgICAgICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBUeXBlU3RvcmVVc2VyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKChUeXBlU3RvcmVVc2VyKW9iaikuZ2V0X3N0b3JlKCkuZ2V0TmFtZXNwYWNlRm9yUHJlZml4KHByZWZpeCk7Ci0KLSAgICAgICAgICAgICAgICBYbWxDdXJzb3IgY3VyID0gKChYbWxPYmplY3QpX29iaikubmV3Q3Vyc29yKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGN1ciAhPSBudWxsKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1ci5jdXJyZW50VG9rZW5UeXBlKCkgPT0gWG1sQ3Vyc29yLlRva2VuVHlwZS5BVFRSKQotICAgICAgICAgICAgICAgICAgICAgICAgY3VyLnRvUGFyZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7IHJldHVybiBjdXIubmFtZXNwYWNlRm9yUHJlZml4KHByZWZpeCk7IH0KLSAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGN1ci5kaXNwb3NlKCk7IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgTUFQOgotICAgICAgICAgICAgICAgIHJldHVybiAoU3RyaW5nKSgoTWFwKV9vYmopLmdldChwcmVmaXgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBUWVBFX1NUT1JFOgotICAgICAgICAgICAgICAgIHJldHVybiAoKFR5cGVTdG9yZSlfb2JqKS5nZXROYW1lc3BhY2VGb3JQcmVmaXgocHJlZml4KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgU1RBUlRfRUxFTUVOVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gKChTdGFydEVsZW1lbnQpX29iaikuZ2V0TmFtZXNwYWNlVXJpKHByZWZpeCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFJFU09MVkVSOgotICAgICAgICAgICAgICAgIHJldHVybiAoKFByZWZpeFJlc29sdmVyKV9vYmopLmdldE5hbWVzcGFjZUZvclByZWZpeChwcmVmaXgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBhc3NlcnQgZmFsc2UgOiAiSW1wcm9wZXJseSBpbml0aWFsaXplZCBOYW1lc3BhY2VDb250ZXh0LiI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFByZWZpeFJlc29sdmVyIGdldEN1cnJlbnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgoTmFtZXNwYWNlQ29udGV4dFN0YWNrKU5hbWVzcGFjZUNvbnRleHRTdGFjay5nZXQoKSkuY3VycmVudDsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHBvcCgpCi0gICAgewotICAgICAgICAoKE5hbWVzcGFjZUNvbnRleHRTdGFjaylOYW1lc3BhY2VDb250ZXh0U3RhY2suZ2V0KCkpLnBvcCgpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvU3RyaW5nRW51bVZhbHVlLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9TdHJpbmdFbnVtVmFsdWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI4NGZiOS4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9TdHJpbmdFbnVtVmFsdWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU3RyaW5nRW51bUFic3RyYWN0QmFzZTsKLQotcHVibGljIGNsYXNzIFN0cmluZ0VudW1WYWx1ZSBleHRlbmRzIFN0cmluZ0VudW1BYnN0cmFjdEJhc2UKLXsKLSAgICBwdWJsaWMgU3RyaW5nRW51bVZhbHVlKFN0cmluZyBzLCBpbnQgaSkKLSAgICAgICAgeyBzdXBlcihzLCBpKTsgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sQW55U2ltcGxlVHlwZUltcGwuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbEFueVNpbXBsZVR5cGVJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3ZjM5YTEuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sQW55U2ltcGxlVHlwZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zY2hlbWEuQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW07Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBhbnlTaW1wbGVUeXBlIGZvciBYTUwuCi0gKgotICovCi1wdWJsaWMgY2xhc3MgWG1sQW55U2ltcGxlVHlwZUltcGwgZXh0ZW5kcyBYbWxPYmplY3RCYXNlIGltcGxlbWVudHMgWG1sQW55U2ltcGxlVHlwZQotewotICAgIHB1YmxpYyBYbWxBbnlTaW1wbGVUeXBlSW1wbChTY2hlbWFUeXBlIHR5cGUsIGJvb2xlYW4gY29tcGxleCkKLSAgICAgICAgeyBfc2NoZW1hVHlwZSA9IHR5cGU7IGluaXRDb21wbGV4VHlwZShjb21wbGV4LCBmYWxzZSk7IH0KLQotICAgIHB1YmxpYyBYbWxBbnlTaW1wbGVUeXBlSW1wbCgpCi0gICAgICAgIHsgX3NjaGVtYVR5cGUgPSBCdWlsdGluU2NoZW1hVHlwZVN5c3RlbS5TVF9BTllfU0lNUExFOyB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hVHlwZSBzY2hlbWFUeXBlKCkKLSAgICAgICAgeyByZXR1cm4gX3NjaGVtYVR5cGU7IH0KLQotICAgIHByaXZhdGUgU2NoZW1hVHlwZSBfc2NoZW1hVHlwZTsKLQotICAgIFN0cmluZyBfdGV4dHZhbHVlID0gIiI7Ci0KLSAgICBwcm90ZWN0ZWQgaW50IGdldF93c2Nhbm9uX3J1bGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFNjaGVtYVR5cGUuV1NfUFJFU0VSVkU7Ci0gICAgfQotCi0gICAgLy8gU0lNUExFIFZBTFVFIEFDQ0VTU09SUyBCRUxPVyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgLy8gZ2V0cyByYXcgdGV4dCB2YWx1ZQotICAgIHByb3RlY3RlZCBTdHJpbmcgY29tcHV0ZV90ZXh0KE5hbWVzcGFjZU1hbmFnZXIgbnNtKSB7IHJldHVybiBfdGV4dHZhbHVlOyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X3RleHQoU3RyaW5nIHMpCi0gICAgewotICAgICAgICBfdGV4dHZhbHVlID0gczsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfbmlsKCkKLSAgICB7Ci0gICAgICAgIF90ZXh0dmFsdWUgPSBudWxsOwotICAgIH0KLQotICAgIC8vIGNvbXBhcmF0b3JzCi0gICAgcHJvdGVjdGVkIGJvb2xlYW4gZXF1YWxfdG8oWG1sT2JqZWN0IG9iaikKLSAgICB7Ci0gICAgICAgIC8vIGNvbXBhcmVzIGFnYWluc3QgYW5vdGhlciBhbnlTaW1wbGVUeXBlCi0gICAgICAgIC8vIHJ1bGUgaXM6IGxleGljYWwgdmFsdWVzIG11c3QgbWF0Y2guCi0gICAgICAgIHJldHVybiBfdGV4dHZhbHVlLmVxdWFscygoKFhtbEFueVNpbXBsZVR5cGUpb2JqKS5nZXRTdHJpbmdWYWx1ZSgpKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgaW50IHZhbHVlX2hhc2hfY29kZSgpCi0gICAgewotICAgICAgICAvLyBtYXRjaGVzIEphdmFTdHJpbmdIb2xkZXIncyB2YWx1ZV9oYXNoX2NvZGUsIHNvIHdlIGNhbiBiZSBoYXNlZCBhZ2FpbnN0IHN0cmluZ3MKLSAgICAgICAgcmV0dXJuIChfdGV4dHZhbHVlID09IG51bGwgPyAwIDogX3RleHR2YWx1ZS5oYXNoQ29kZSgpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxBbnlTaW1wbGVUeXBlUmVzdHJpY3Rpb24uamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbEFueVNpbXBsZVR5cGVSZXN0cmljdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzQ3MGU5Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbEFueVNpbXBsZVR5cGVSZXN0cmljdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotCi1wdWJsaWMgY2xhc3MgWG1sQW55U2ltcGxlVHlwZVJlc3RyaWN0aW9uIGV4dGVuZHMgWG1sQW55U2ltcGxlVHlwZUltcGwKLXsKLSAgICBwdWJsaWMgWG1sQW55U2ltcGxlVHlwZVJlc3RyaWN0aW9uKFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IF9zY2hlbWFUeXBlID0gdHlwZTsgaW5pdENvbXBsZXhUeXBlKGNvbXBsZXgsIGZhbHNlKTsgfQotCi0gICAgcHJpdmF0ZSBTY2hlbWFUeXBlIF9zY2hlbWFUeXBlOwotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgc2NoZW1hVHlwZSgpCi0gICAgICAgIHsgcmV0dXJuIF9zY2hlbWFUeXBlOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxBbnlUeXBlSW1wbC5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sQW55VHlwZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBmN2U2OC4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxBbnlUeXBlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgYW55VHlwZSBmb3IgWE1MLgotICoKLSAqLwotcHVibGljIGNsYXNzIFhtbEFueVR5cGVJbXBsIGV4dGVuZHMgWG1sQ29tcGxleENvbnRlbnRJbXBsIGltcGxlbWVudHMgWG1sT2JqZWN0Ci17Ci0gICAgcHVibGljIFhtbEFueVR5cGVJbXBsKCkKLSAgICAgICAgeyBzdXBlcih0eXBlKTsgfQotCi0gICAgcHVibGljIFhtbEFueVR5cGVJbXBsKFNjaGVtYVR5cGUgdHlwZSkKLSAgICAgICAgeyBzdXBlcih0eXBlKTsgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sQW55VXJpSW1wbC5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sQW55VXJpSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYjUzM2IwLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbEFueVVyaUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotcHVibGljIGNsYXNzIFhtbEFueVVyaUltcGwgZXh0ZW5kcyBKYXZhVXJpSG9sZGVyIGltcGxlbWVudHMgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlVUkkKLXsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbEFueVVyaVJlc3RyaWN0aW9uLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxBbnlVcmlSZXN0cmljdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODU1MzJmLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbEFueVVyaVJlc3RyaWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci0KLXB1YmxpYyBjbGFzcyBYbWxBbnlVcmlSZXN0cmljdGlvbiBleHRlbmRzIEphdmFVcmlIb2xkZXJFeCBpbXBsZW1lbnRzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55VVJJCi17Ci0gICAgcHVibGljIFhtbEFueVVyaVJlc3RyaWN0aW9uKFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IHN1cGVyKHR5cGUsIGNvbXBsZXgpOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxCYXNlNjRCaW5hcnlJbXBsLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxCYXNlNjRCaW5hcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2YWI5ZjMuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sQmFzZTY0QmluYXJ5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQmFzZTY0QmluYXJ5OwotCi0KLXB1YmxpYyBjbGFzcyBYbWxCYXNlNjRCaW5hcnlJbXBsIGV4dGVuZHMgSmF2YUJhc2U2NEhvbGRlciBpbXBsZW1lbnRzIFhtbEJhc2U2NEJpbmFyeQotewotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sQmFzZTY0QmluYXJ5UmVzdHJpY3Rpb24uamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbEJhc2U2NEJpbmFyeVJlc3RyaWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MGZiMmYuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sQmFzZTY0QmluYXJ5UmVzdHJpY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJhc2U2NEJpbmFyeTsKLQotcHVibGljIGNsYXNzIFhtbEJhc2U2NEJpbmFyeVJlc3RyaWN0aW9uIGV4dGVuZHMgSmF2YUJhc2U2NEhvbGRlckV4IGltcGxlbWVudHMgWG1sQmFzZTY0QmluYXJ5Ci17Ci0gICAgcHVibGljIFhtbEJhc2U2NEJpbmFyeVJlc3RyaWN0aW9uKFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IHN1cGVyKHR5cGUsIGNvbXBsZXgpOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxCb29sZWFuSW1wbC5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sQm9vbGVhbkltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjk4OWE0Ny4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxCb29sZWFuSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxCb29sZWFuOwotCi1wdWJsaWMgY2xhc3MgWG1sQm9vbGVhbkltcGwgZXh0ZW5kcyBKYXZhQm9vbGVhbkhvbGRlciBpbXBsZW1lbnRzIFhtbEJvb2xlYW4KLXsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbEJvb2xlYW5SZXN0cmljdGlvbi5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sQm9vbGVhblJlc3RyaWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjOTY0M2MuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sQm9vbGVhblJlc3RyaWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJvb2xlYW47Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotCi1wdWJsaWMgY2xhc3MgWG1sQm9vbGVhblJlc3RyaWN0aW9uIGV4dGVuZHMgSmF2YUJvb2xlYW5Ib2xkZXJFeCBpbXBsZW1lbnRzIFhtbEJvb2xlYW4KLXsKLSAgICBwdWJsaWMgWG1sQm9vbGVhblJlc3RyaWN0aW9uKFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IHN1cGVyKHR5cGUsIGNvbXBsZXgpOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxCeXRlSW1wbC5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sQnl0ZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZhMTA1Zi4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxCeXRlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxCeXRlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLQotCi1wdWJsaWMgY2xhc3MgWG1sQnl0ZUltcGwgZXh0ZW5kcyBKYXZhSW50SG9sZGVyRXggaW1wbGVtZW50cyBYbWxCeXRlCi17Ci0gICAgcHVibGljIFhtbEJ5dGVJbXBsKCkKLSAgICAgICAgeyBzdXBlcihYbWxCeXRlLnR5cGUsIGZhbHNlKTsgfQotICAgIHB1YmxpYyBYbWxCeXRlSW1wbChTY2hlbWFUeXBlIHR5cGUsIGJvb2xlYW4gY29tcGxleCkKLSAgICAgICAgeyBzdXBlcih0eXBlLCBjb21wbGV4KTsgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sQ29tcGxleENvbnRlbnRJbXBsLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxDb21wbGV4Q29udGVudEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNkNjA0ZS4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxDb21wbGV4Q29udGVudEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMjMgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy4qOwotCi1pbXBvcnQgamF2YS5sYW5nLlN0cmluZzsKLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnNjaGVtYS5TY2hlbWFUeXBlSW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hLlNjaGVtYVR5cGVWaXNpdG9ySW1wbDsKLQotcHVibGljIGNsYXNzIFhtbENvbXBsZXhDb250ZW50SW1wbCBleHRlbmRzIFhtbE9iamVjdEJhc2UKLXsKLSAgICBwdWJsaWMgWG1sQ29tcGxleENvbnRlbnRJbXBsKFNjaGVtYVR5cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIF9zY2hlbWFUeXBlID0gKFNjaGVtYVR5cGVJbXBsKXR5cGU7Ci0gICAgICAgIGluaXRDb21wbGV4VHlwZSh0cnVlLCB0cnVlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hVHlwZSBzY2hlbWFUeXBlKCkKLSAgICAgICAgeyByZXR1cm4gX3NjaGVtYVR5cGU7IH0KLQotICAgIHByaXZhdGUgU2NoZW1hVHlwZUltcGwgX3NjaGVtYVR5cGU7Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGNvbXB1dGVfdGV4dChOYW1lc3BhY2VNYW5hZ2VyIG5zbSkKLSAgICAgICAgeyByZXR1cm4gbnVsbDsgfQotCi0gICAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgc2V0X1N0cmluZyhTdHJpbmcgdikKLSAgICB7Ci0gICAgICAgIGFzc2VydCBfc2NoZW1hVHlwZS5nZXRDb250ZW50VHlwZSgpICE9IFNjaGVtYVR5cGUuU0lNUExFX0NPTlRFTlQ7Ci0KLSAgICAgICAgaWYgKF9zY2hlbWFUeXBlLmdldENvbnRlbnRUeXBlKCkgIT0gU2NoZW1hVHlwZS5NSVhFRF9DT05URU5UICYmCi0gICAgICAgICAgICAgICAgIV9zY2hlbWFUeXBlLmlzTm9UeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgIlR5cGUgZG9lcyBub3QgYWxsb3cgZm9yIHRleHR1YWwgY29udGVudDogIiArIF9zY2hlbWFUeXBlICk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdXBlci5zZXRfU3RyaW5nKHYpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRfdGV4dChTdHJpbmcgc3RyKQotICAgIHsKLSAgICAgICAgYXNzZXJ0Ci0gICAgICAgICAgICBfc2NoZW1hVHlwZS5nZXRDb250ZW50VHlwZSgpID09IFNjaGVtYVR5cGUuTUlYRURfQ09OVEVOVCB8fAotICAgICAgICAgICAgICAgIF9zY2hlbWFUeXBlLmlzTm9UeXBlKCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgdXBkYXRlX2Zyb21fY29tcGxleF9jb250ZW50KCkKLSAgICB7Ci0gICAgICAgIC8vIE5vIGNvbXBsZXggY2FjaGluZyB5ZXQgLi4uCi0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHNldF9uaWwoKQotICAgICAgICB7IC8qIEJVR0JVRzogd2hhdCB0byBkbz8gKi8gfQotCi0gICAgLy8gTEVGVAotICAgIHB1YmxpYyBib29sZWFuIGVxdWFsX3RvKFhtbE9iamVjdCBjb21wbGV4T2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKCFfc2NoZW1hVHlwZS5lcXVhbHMoY29tcGxleE9iamVjdC5zY2hlbWFUeXBlKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIEJVR0JVRzogYnktdmFsdWUgc3RydWN0dXJlIGNvbXBhcmlzb24gdW5kb25lCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vIExFRlQKLSAgICBwcm90ZWN0ZWQgaW50IHZhbHVlX2hhc2hfY29kZSgpCi0gICAgewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDb21wbGV4IHR5cGVzIGNhbm5vdCBiZSB1c2VkIGFzIGhhc2gga2V5cyIpOwotICAgIH0KLQotICAgIC8vIERPTkUKLSAgICBwdWJsaWMgVHlwZVN0b3JlVmlzaXRvciBuZXdfdmlzaXRvcigpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IFNjaGVtYVR5cGVWaXNpdG9ySW1wbChfc2NoZW1hVHlwZS5nZXRDb250ZW50TW9kZWwoKSk7Ci0gICAgfQotCi0gICAgLy8gRE9ORQotICAgIHB1YmxpYyBib29sZWFuIGlzX2NoaWxkX2VsZW1lbnRfb3JkZXJfc2Vuc2l0aXZlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzY2hlbWFUeXBlKCkuaXNPcmRlclNlbnNpdGl2ZSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0X2VsZW1lbnRmbGFncyhRTmFtZSBlbHROYW1lKQotICAgIHsKLSAgICAgICAgU2NoZW1hUHJvcGVydHkgcHJvcCA9IHNjaGVtYVR5cGUoKS5nZXRFbGVtZW50UHJvcGVydHkoZWx0TmFtZSk7Ci0gICAgICAgIGlmIChwcm9wID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYgKHByb3AuaGFzRGVmYXVsdCgpID09IFNjaGVtYVByb3BlcnR5LlZBUklBQkxFIHx8Ci0gICAgICAgICAgICBwcm9wLmhhc0ZpeGVkKCkgPT0gU2NoZW1hUHJvcGVydHkuVkFSSUFCTEUgfHwKLSAgICAgICAgICAgIHByb3AuaGFzTmlsbGFibGUoKSA9PSBTY2hlbWFQcm9wZXJ0eS5WQVJJQUJMRSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAocHJvcC5oYXNEZWZhdWx0KCkgPT0gU2NoZW1hUHJvcGVydHkuTkVWRVIgPyAwIDogVHlwZVN0b3JlLkhBU0RFRkFVTFQpIHwKLSAgICAgICAgICAgIChwcm9wLmhhc0ZpeGVkKCkgPT0gU2NoZW1hUHJvcGVydHkuTkVWRVIgPyAwIDogVHlwZVN0b3JlLkZJWEVEKSB8Ci0gICAgICAgICAgICAocHJvcC5oYXNOaWxsYWJsZSgpID09IFNjaGVtYVByb3BlcnR5Lk5FVkVSID8gMCA6IFR5cGVTdG9yZS5OSUxMQUJMRSk7Ci0gICAgfQotCi0gICAgLy8gRE9ORQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0X2RlZmF1bHRfYXR0cmlidXRlX3RleHQoUU5hbWUgYXR0ck5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gc3VwZXIuZ2V0X2RlZmF1bHRfYXR0cmlidXRlX3RleHQoYXR0ck5hbWUpOwotICAgIH0KLQotICAgIC8vIERPTkUKLSAgICBwdWJsaWMgU3RyaW5nIGdldF9kZWZhdWx0X2VsZW1lbnRfdGV4dChRTmFtZSBlbHROYW1lKQotICAgIHsKLSAgICAgICAgU2NoZW1hUHJvcGVydHkgcHJvcCA9IHNjaGVtYVR5cGUoKS5nZXRFbGVtZW50UHJvcGVydHkoZWx0TmFtZSk7Ci0gICAgICAgIGlmIChwcm9wID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gIiI7Ci0gICAgICAgIHJldHVybiBwcm9wLmdldERlZmF1bHRUZXh0KCk7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBDb2RlIGdlbiBoZWxwZXJzCi0gICAgLy8KLSAgICAvLyBTbyBtdWNoIHJlZHVuZGFudCBjb2RlIC4uLi4uIHdoYXQgSSdkIGdpdmUgZm9yIGdlbmVyaWNzIQotICAgIC8vCi0KLSAgICBwcm90ZWN0ZWQgdm9pZCB1bmlvbkFycmF5U2V0dGVySGVscGVyICggT2JqZWN0W10gc291cmNlcywgUU5hbWUgZWxlbU5hbWUgKQotICAgIHsKLSAgICAgICAgaW50IG4gPSBzb3VyY2VzID09IG51bGwgPyAwIDogc291cmNlcy5sZW5ndGg7Ci0KLSAgICAgICAgVHlwZVN0b3JlIHN0b3JlID0gZ2V0X3N0b3JlKCk7Ci0KLSAgICAgICAgaW50IG0gPSBzdG9yZS5jb3VudF9lbGVtZW50cyggZWxlbU5hbWUgKTsKLQotICAgICAgICBmb3IgKCA7IG0gPiBuIDsgbS0tICkKLSAgICAgICAgICAgIHN0b3JlLnJlbW92ZV9lbGVtZW50KCBlbGVtTmFtZSwgbSAtIDEgKTsKLQotICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgbiA7IGkrKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFR5cGVTdG9yZVVzZXIgdXNlcjsKLQotICAgICAgICAgICAgaWYgKGkgPj0gbSkKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuYWRkX2VsZW1lbnRfdXNlciggZWxlbU5hbWUgKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuZmluZF9lbGVtZW50X3VzZXIoIGVsZW1OYW1lLCBpICk7Ci0KLSAgICAgICAgICAgICgoWG1sT2JqZWN0QmFzZSkgdXNlcikub2JqZWN0U2V0KCBzb3VyY2VzWyBpIF0gKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGFycmF5U2V0dGVySGVscGVyICggYm9vbGVhbltdIHNvdXJjZXMsIFFOYW1lIGVsZW1OYW1lICkKLSAgICB7Ci0gICAgICAgIGludCBuID0gc291cmNlcyA9PSBudWxsID8gMCA6IHNvdXJjZXMubGVuZ3RoOwotCi0gICAgICAgIFR5cGVTdG9yZSBzdG9yZSA9IGdldF9zdG9yZSgpOwotCi0gICAgICAgIGludCBtID0gc3RvcmUuY291bnRfZWxlbWVudHMoIGVsZW1OYW1lICk7Ci0KLSAgICAgICAgZm9yICggOyBtID4gbiA7IG0tLSApCi0gICAgICAgICAgICBzdG9yZS5yZW1vdmVfZWxlbWVudCggZWxlbU5hbWUsIG0gLSAxICk7Ci0KLSAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IG4gOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBUeXBlU3RvcmVVc2VyIHVzZXI7Ci0KLSAgICAgICAgICAgIGlmIChpID49IG0pCi0gICAgICAgICAgICAgICAgdXNlciA9IHN0b3JlLmFkZF9lbGVtZW50X3VzZXIoIGVsZW1OYW1lICk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdXNlciA9IHN0b3JlLmZpbmRfZWxlbWVudF91c2VyKCBlbGVtTmFtZSwgaSApOwotCi0gICAgICAgICAgICAoKFhtbE9iamVjdEJhc2UpIHVzZXIpLnNldCggc291cmNlc1sgaSBdICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBhcnJheVNldHRlckhlbHBlciAoIGZsb2F0W10gc291cmNlcywgUU5hbWUgZWxlbU5hbWUgKQotICAgIHsKLSAgICAgICAgaW50IG4gPSBzb3VyY2VzID09IG51bGwgPyAwIDogc291cmNlcy5sZW5ndGg7Ci0gICAgICAgIAotICAgICAgICBUeXBlU3RvcmUgc3RvcmUgPSBnZXRfc3RvcmUoKTsKLQotICAgICAgICBpbnQgbSA9IHN0b3JlLmNvdW50X2VsZW1lbnRzKCBlbGVtTmFtZSApOwotCi0gICAgICAgIGZvciAoIDsgbSA+IG4gOyBtLS0gKQotICAgICAgICAgICAgc3RvcmUucmVtb3ZlX2VsZW1lbnQoIGVsZW1OYW1lLCBtIC0gMSApOwotCi0gICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCBuIDsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgVHlwZVN0b3JlVXNlciB1c2VyOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaSA+PSBtKQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5hZGRfZWxlbWVudF91c2VyKCBlbGVtTmFtZSApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5maW5kX2VsZW1lbnRfdXNlciggZWxlbU5hbWUsIGkgKTsKLQotICAgICAgICAgICAgKChYbWxPYmplY3RCYXNlKSB1c2VyKS5zZXQoIHNvdXJjZXNbIGkgXSApOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHByb3RlY3RlZCB2b2lkIGFycmF5U2V0dGVySGVscGVyICggZG91YmxlW10gc291cmNlcywgUU5hbWUgZWxlbU5hbWUgKQotICAgIHsKLSAgICAgICAgaW50IG4gPSBzb3VyY2VzID09IG51bGwgPyAwIDogc291cmNlcy5sZW5ndGg7Ci0gICAgICAgIAotICAgICAgICBUeXBlU3RvcmUgc3RvcmUgPSBnZXRfc3RvcmUoKTsKLQotICAgICAgICBpbnQgbSA9IHN0b3JlLmNvdW50X2VsZW1lbnRzKCBlbGVtTmFtZSApOwotCi0gICAgICAgIGZvciAoIDsgbSA+IG4gOyBtLS0gKQotICAgICAgICAgICAgc3RvcmUucmVtb3ZlX2VsZW1lbnQoIGVsZW1OYW1lLCBtIC0gMSApOwotCi0gICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCBuIDsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgVHlwZVN0b3JlVXNlciB1c2VyOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaSA+PSBtKQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5hZGRfZWxlbWVudF91c2VyKCBlbGVtTmFtZSApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5maW5kX2VsZW1lbnRfdXNlciggZWxlbU5hbWUsIGkgKTsKLQotICAgICAgICAgICAgKChYbWxPYmplY3RCYXNlKSB1c2VyKS5zZXQoIHNvdXJjZXNbIGkgXSApOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHByb3RlY3RlZCB2b2lkIGFycmF5U2V0dGVySGVscGVyICggYnl0ZVtdIHNvdXJjZXMsIFFOYW1lIGVsZW1OYW1lICkKLSAgICB7Ci0gICAgICAgIGludCBuID0gc291cmNlcyA9PSBudWxsID8gMCA6IHNvdXJjZXMubGVuZ3RoOwotICAgICAgICAKLSAgICAgICAgVHlwZVN0b3JlIHN0b3JlID0gZ2V0X3N0b3JlKCk7Ci0KLSAgICAgICAgaW50IG0gPSBzdG9yZS5jb3VudF9lbGVtZW50cyggZWxlbU5hbWUgKTsKLQotICAgICAgICBmb3IgKCA7IG0gPiBuIDsgbS0tICkKLSAgICAgICAgICAgIHN0b3JlLnJlbW92ZV9lbGVtZW50KCBlbGVtTmFtZSwgbSAtIDEgKTsKLQotICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgbiA7IGkrKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFR5cGVTdG9yZVVzZXIgdXNlcjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGkgPj0gbSkKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuYWRkX2VsZW1lbnRfdXNlciggZWxlbU5hbWUgKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuZmluZF9lbGVtZW50X3VzZXIoIGVsZW1OYW1lLCBpICk7Ci0KLSAgICAgICAgICAgICgoWG1sT2JqZWN0QmFzZSkgdXNlcikuc2V0KCBzb3VyY2VzWyBpIF0gKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGFycmF5U2V0dGVySGVscGVyICggc2hvcnRbXSBzb3VyY2VzLCBRTmFtZSBlbGVtTmFtZSApCi0gICAgewotICAgICAgICBpbnQgbiA9IHNvdXJjZXMgPT0gbnVsbCA/IDAgOiBzb3VyY2VzLmxlbmd0aDsKLSAgICAgICAgCi0gICAgICAgIFR5cGVTdG9yZSBzdG9yZSA9IGdldF9zdG9yZSgpOwotCi0gICAgICAgIGludCBtID0gc3RvcmUuY291bnRfZWxlbWVudHMoIGVsZW1OYW1lICk7Ci0KLSAgICAgICAgZm9yICggOyBtID4gbiA7IG0tLSApCi0gICAgICAgICAgICBzdG9yZS5yZW1vdmVfZWxlbWVudCggZWxlbU5hbWUsIG0gLSAxICk7Ci0KLSAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IG4gOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBUeXBlU3RvcmVVc2VyIHVzZXI7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpID49IG0pCi0gICAgICAgICAgICAgICAgdXNlciA9IHN0b3JlLmFkZF9lbGVtZW50X3VzZXIoIGVsZW1OYW1lICk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdXNlciA9IHN0b3JlLmZpbmRfZWxlbWVudF91c2VyKCBlbGVtTmFtZSwgaSApOwotCi0gICAgICAgICAgICAoKFhtbE9iamVjdEJhc2UpIHVzZXIpLnNldCggc291cmNlc1sgaSBdICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBhcnJheVNldHRlckhlbHBlciAoIGludFtdIHNvdXJjZXMsIFFOYW1lIGVsZW1OYW1lICkKLSAgICB7Ci0gICAgICAgIGludCBuID0gc291cmNlcyA9PSBudWxsID8gMCA6IHNvdXJjZXMubGVuZ3RoOwotICAgICAgICAKLSAgICAgICAgVHlwZVN0b3JlIHN0b3JlID0gZ2V0X3N0b3JlKCk7Ci0KLSAgICAgICAgaW50IG0gPSBzdG9yZS5jb3VudF9lbGVtZW50cyggZWxlbU5hbWUgKTsKLQotICAgICAgICBmb3IgKCA7IG0gPiBuIDsgbS0tICkKLSAgICAgICAgICAgIHN0b3JlLnJlbW92ZV9lbGVtZW50KCBlbGVtTmFtZSwgbSAtIDEgKTsKLQotICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgbiA7IGkrKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFR5cGVTdG9yZVVzZXIgdXNlcjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGkgPj0gbSkKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuYWRkX2VsZW1lbnRfdXNlciggZWxlbU5hbWUgKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuZmluZF9lbGVtZW50X3VzZXIoIGVsZW1OYW1lLCBpICk7Ci0KLSAgICAgICAgICAgICgoWG1sT2JqZWN0QmFzZSkgdXNlcikuc2V0KCBzb3VyY2VzWyBpIF0gKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwcm90ZWN0ZWQgdm9pZCBhcnJheVNldHRlckhlbHBlciAoIGxvbmdbXSBzb3VyY2VzLCBRTmFtZSBlbGVtTmFtZSApCi0gICAgewotICAgICAgICBpbnQgbiA9IHNvdXJjZXMgPT0gbnVsbCA/IDAgOiBzb3VyY2VzLmxlbmd0aDsKLSAgICAgICAgCi0gICAgICAgIFR5cGVTdG9yZSBzdG9yZSA9IGdldF9zdG9yZSgpOwotCi0gICAgICAgIGludCBtID0gc3RvcmUuY291bnRfZWxlbWVudHMoIGVsZW1OYW1lICk7Ci0KLSAgICAgICAgZm9yICggOyBtID4gbiA7IG0tLSApCi0gICAgICAgICAgICBzdG9yZS5yZW1vdmVfZWxlbWVudCggZWxlbU5hbWUsIG0gLSAxICk7Ci0KLSAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IG4gOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBUeXBlU3RvcmVVc2VyIHVzZXI7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpID49IG0pCi0gICAgICAgICAgICAgICAgdXNlciA9IHN0b3JlLmFkZF9lbGVtZW50X3VzZXIoIGVsZW1OYW1lICk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdXNlciA9IHN0b3JlLmZpbmRfZWxlbWVudF91c2VyKCBlbGVtTmFtZSwgaSApOwotCi0gICAgICAgICAgICAoKFhtbE9iamVjdEJhc2UpIHVzZXIpLnNldCggc291cmNlc1sgaSBdICk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgYXJyYXlTZXR0ZXJIZWxwZXIgKCBCaWdEZWNpbWFsW10gc291cmNlcywgUU5hbWUgZWxlbU5hbWUgKQotICAgIHsKLSAgICAgICAgaW50IG4gPSBzb3VyY2VzID09IG51bGwgPyAwIDogc291cmNlcy5sZW5ndGg7Ci0gICAgICAgIAotICAgICAgICBUeXBlU3RvcmUgc3RvcmUgPSBnZXRfc3RvcmUoKTsKLQotICAgICAgICBpbnQgbSA9IHN0b3JlLmNvdW50X2VsZW1lbnRzKCBlbGVtTmFtZSApOwotCi0gICAgICAgIGZvciAoIDsgbSA+IG4gOyBtLS0gKQotICAgICAgICAgICAgc3RvcmUucmVtb3ZlX2VsZW1lbnQoIGVsZW1OYW1lLCBtIC0gMSApOwotCi0gICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCBuIDsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgVHlwZVN0b3JlVXNlciB1c2VyOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaSA+PSBtKQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5hZGRfZWxlbWVudF91c2VyKCBlbGVtTmFtZSApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5maW5kX2VsZW1lbnRfdXNlciggZWxlbU5hbWUsIGkgKTsKLQotICAgICAgICAgICAgKChYbWxPYmplY3RCYXNlKSB1c2VyKS5zZXQoIHNvdXJjZXNbIGkgXSApOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHByb3RlY3RlZCB2b2lkIGFycmF5U2V0dGVySGVscGVyICggQmlnSW50ZWdlcltdIHNvdXJjZXMsIFFOYW1lIGVsZW1OYW1lICkKLSAgICB7Ci0gICAgICAgIGludCBuID0gc291cmNlcyA9PSBudWxsID8gMCA6IHNvdXJjZXMubGVuZ3RoOwotICAgICAgICAKLSAgICAgICAgVHlwZVN0b3JlIHN0b3JlID0gZ2V0X3N0b3JlKCk7Ci0KLSAgICAgICAgaW50IG0gPSBzdG9yZS5jb3VudF9lbGVtZW50cyggZWxlbU5hbWUgKTsKLQotICAgICAgICBmb3IgKCA7IG0gPiBuIDsgbS0tICkKLSAgICAgICAgICAgIHN0b3JlLnJlbW92ZV9lbGVtZW50KCBlbGVtTmFtZSwgbSAtIDEgKTsKLQotICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgbiA7IGkrKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFR5cGVTdG9yZVVzZXIgdXNlcjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGkgPj0gbSkKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuYWRkX2VsZW1lbnRfdXNlciggZWxlbU5hbWUgKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuZmluZF9lbGVtZW50X3VzZXIoIGVsZW1OYW1lLCBpICk7Ci0KLSAgICAgICAgICAgICgoWG1sT2JqZWN0QmFzZSkgdXNlcikuc2V0KCBzb3VyY2VzWyBpIF0gKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGFycmF5U2V0dGVySGVscGVyICggU3RyaW5nW10gc291cmNlcywgUU5hbWUgZWxlbU5hbWUgKQotICAgIHsKLSAgICAgICAgaW50IG4gPSBzb3VyY2VzID09IG51bGwgPyAwIDogc291cmNlcy5sZW5ndGg7Ci0gICAgICAgIAotICAgICAgICBUeXBlU3RvcmUgc3RvcmUgPSBnZXRfc3RvcmUoKTsKLQotICAgICAgICBpbnQgbSA9IHN0b3JlLmNvdW50X2VsZW1lbnRzKCBlbGVtTmFtZSApOwotCi0gICAgICAgIGZvciAoIDsgbSA+IG4gOyBtLS0gKQotICAgICAgICAgICAgc3RvcmUucmVtb3ZlX2VsZW1lbnQoIGVsZW1OYW1lLCBtIC0gMSApOwotCi0gICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCBuIDsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgVHlwZVN0b3JlVXNlciB1c2VyOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaSA+PSBtKQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5hZGRfZWxlbWVudF91c2VyKCBlbGVtTmFtZSApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5maW5kX2VsZW1lbnRfdXNlciggZWxlbU5hbWUsIGkgKTsKLQotICAgICAgICAgICAgKChYbWxPYmplY3RCYXNlKSB1c2VyKS5zZXQoIHNvdXJjZXNbIGkgXSApOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHByb3RlY3RlZCB2b2lkIGFycmF5U2V0dGVySGVscGVyICggYnl0ZVtdW10gc291cmNlcywgUU5hbWUgZWxlbU5hbWUgKQotICAgIHsKLSAgICAgICAgaW50IG4gPSBzb3VyY2VzID09IG51bGwgPyAwIDogc291cmNlcy5sZW5ndGg7Ci0gICAgICAgIAotICAgICAgICBUeXBlU3RvcmUgc3RvcmUgPSBnZXRfc3RvcmUoKTsKLQotICAgICAgICBpbnQgbSA9IHN0b3JlLmNvdW50X2VsZW1lbnRzKCBlbGVtTmFtZSApOwotCi0gICAgICAgIGZvciAoIDsgbSA+IG4gOyBtLS0gKQotICAgICAgICAgICAgc3RvcmUucmVtb3ZlX2VsZW1lbnQoIGVsZW1OYW1lLCBtIC0gMSApOwotCi0gICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCBuIDsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgVHlwZVN0b3JlVXNlciB1c2VyOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaSA+PSBtKQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5hZGRfZWxlbWVudF91c2VyKCBlbGVtTmFtZSApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5maW5kX2VsZW1lbnRfdXNlciggZWxlbU5hbWUsIGkgKTsKLQotICAgICAgICAgICAgKChYbWxPYmplY3RCYXNlKSB1c2VyKS5zZXQoIHNvdXJjZXNbIGkgXSApOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHByb3RlY3RlZCB2b2lkIGFycmF5U2V0dGVySGVscGVyICggR0RhdGVbXSBzb3VyY2VzLCBRTmFtZSBlbGVtTmFtZSApCi0gICAgewotICAgICAgICBpbnQgbiA9IHNvdXJjZXMgPT0gbnVsbCA/IDAgOiBzb3VyY2VzLmxlbmd0aDsKLSAgICAgICAgCi0gICAgICAgIFR5cGVTdG9yZSBzdG9yZSA9IGdldF9zdG9yZSgpOwotCi0gICAgICAgIGludCBtID0gc3RvcmUuY291bnRfZWxlbWVudHMoIGVsZW1OYW1lICk7Ci0KLSAgICAgICAgZm9yICggOyBtID4gbiA7IG0tLSApCi0gICAgICAgICAgICBzdG9yZS5yZW1vdmVfZWxlbWVudCggZWxlbU5hbWUsIG0gLSAxICk7Ci0KLSAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IG4gOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBUeXBlU3RvcmVVc2VyIHVzZXI7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpID49IG0pCi0gICAgICAgICAgICAgICAgdXNlciA9IHN0b3JlLmFkZF9lbGVtZW50X3VzZXIoIGVsZW1OYW1lICk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdXNlciA9IHN0b3JlLmZpbmRfZWxlbWVudF91c2VyKCBlbGVtTmFtZSwgaSApOwotCi0gICAgICAgICAgICAoKFhtbE9iamVjdEJhc2UpIHVzZXIpLnNldCggc291cmNlc1sgaSBdICk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgYXJyYXlTZXR0ZXJIZWxwZXIgKCBHRHVyYXRpb25bXSBzb3VyY2VzLCBRTmFtZSBlbGVtTmFtZSApCi0gICAgewotICAgICAgICBpbnQgbiA9IHNvdXJjZXMgPT0gbnVsbCA/IDAgOiBzb3VyY2VzLmxlbmd0aDsKLSAgICAgICAgCi0gICAgICAgIFR5cGVTdG9yZSBzdG9yZSA9IGdldF9zdG9yZSgpOwotCi0gICAgICAgIGludCBtID0gc3RvcmUuY291bnRfZWxlbWVudHMoIGVsZW1OYW1lICk7Ci0KLSAgICAgICAgZm9yICggOyBtID4gbiA7IG0tLSApCi0gICAgICAgICAgICBzdG9yZS5yZW1vdmVfZWxlbWVudCggZWxlbU5hbWUsIG0gLSAxICk7Ci0KLSAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IG4gOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBUeXBlU3RvcmVVc2VyIHVzZXI7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpID49IG0pCi0gICAgICAgICAgICAgICAgdXNlciA9IHN0b3JlLmFkZF9lbGVtZW50X3VzZXIoIGVsZW1OYW1lICk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdXNlciA9IHN0b3JlLmZpbmRfZWxlbWVudF91c2VyKCBlbGVtTmFtZSwgaSApOwotCi0gICAgICAgICAgICAoKFhtbE9iamVjdEJhc2UpIHVzZXIpLnNldCggc291cmNlc1sgaSBdICk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgYXJyYXlTZXR0ZXJIZWxwZXIgKCBDYWxlbmRhcltdIHNvdXJjZXMsIFFOYW1lIGVsZW1OYW1lICkKLSAgICB7Ci0gICAgICAgIGludCBuID0gc291cmNlcyA9PSBudWxsID8gMCA6IHNvdXJjZXMubGVuZ3RoOwotICAgICAgICAKLSAgICAgICAgVHlwZVN0b3JlIHN0b3JlID0gZ2V0X3N0b3JlKCk7Ci0KLSAgICAgICAgaW50IG0gPSBzdG9yZS5jb3VudF9lbGVtZW50cyggZWxlbU5hbWUgKTsKLQotICAgICAgICBmb3IgKCA7IG0gPiBuIDsgbS0tICkKLSAgICAgICAgICAgIHN0b3JlLnJlbW92ZV9lbGVtZW50KCBlbGVtTmFtZSwgbSAtIDEgKTsKLQotICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgbiA7IGkrKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFR5cGVTdG9yZVVzZXIgdXNlcjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGkgPj0gbSkKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuYWRkX2VsZW1lbnRfdXNlciggZWxlbU5hbWUgKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuZmluZF9lbGVtZW50X3VzZXIoIGVsZW1OYW1lLCBpICk7Ci0KLSAgICAgICAgICAgICgoWG1sT2JqZWN0QmFzZSkgdXNlcikuc2V0KCBzb3VyY2VzWyBpIF0gKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwcm90ZWN0ZWQgdm9pZCBhcnJheVNldHRlckhlbHBlciAoIERhdGVbXSBzb3VyY2VzLCBRTmFtZSBlbGVtTmFtZSApCi0gICAgewotICAgICAgICBpbnQgbiA9IHNvdXJjZXMgPT0gbnVsbCA/IDAgOiBzb3VyY2VzLmxlbmd0aDsKLSAgICAgICAgCi0gICAgICAgIFR5cGVTdG9yZSBzdG9yZSA9IGdldF9zdG9yZSgpOwotCi0gICAgICAgIGludCBtID0gc3RvcmUuY291bnRfZWxlbWVudHMoIGVsZW1OYW1lICk7Ci0KLSAgICAgICAgZm9yICggOyBtID4gbiA7IG0tLSApCi0gICAgICAgICAgICBzdG9yZS5yZW1vdmVfZWxlbWVudCggZWxlbU5hbWUsIG0gLSAxICk7Ci0KLSAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IG4gOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBUeXBlU3RvcmVVc2VyIHVzZXI7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpID49IG0pCi0gICAgICAgICAgICAgICAgdXNlciA9IHN0b3JlLmFkZF9lbGVtZW50X3VzZXIoIGVsZW1OYW1lICk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdXNlciA9IHN0b3JlLmZpbmRfZWxlbWVudF91c2VyKCBlbGVtTmFtZSwgaSApOwotCi0gICAgICAgICAgICAoKFhtbE9iamVjdEJhc2UpIHVzZXIpLnNldCggc291cmNlc1sgaSBdICk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgYXJyYXlTZXR0ZXJIZWxwZXIgKCBRTmFtZVtdIHNvdXJjZXMsIFFOYW1lIGVsZW1OYW1lICkKLSAgICB7Ci0gICAgICAgIGludCBuID0gc291cmNlcyA9PSBudWxsID8gMCA6IHNvdXJjZXMubGVuZ3RoOwotCi0gICAgICAgIFR5cGVTdG9yZSBzdG9yZSA9IGdldF9zdG9yZSgpOwotCi0gICAgICAgIGludCBtID0gc3RvcmUuY291bnRfZWxlbWVudHMoIGVsZW1OYW1lICk7Ci0KLSAgICAgICAgZm9yICggOyBtID4gbiA7IG0tLSApCi0gICAgICAgICAgICBzdG9yZS5yZW1vdmVfZWxlbWVudCggZWxlbU5hbWUsIG0gLSAxICk7Ci0KLSAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IG4gOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBUeXBlU3RvcmVVc2VyIHVzZXI7Ci0KLSAgICAgICAgICAgIGlmIChpID49IG0pCi0gICAgICAgICAgICAgICAgdXNlciA9IHN0b3JlLmFkZF9lbGVtZW50X3VzZXIoIGVsZW1OYW1lICk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdXNlciA9IHN0b3JlLmZpbmRfZWxlbWVudF91c2VyKCBlbGVtTmFtZSwgaSApOwotCi0gICAgICAgICAgICAoKFhtbE9iamVjdEJhc2UpIHVzZXIpLnNldCggc291cmNlc1sgaSBdICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBhcnJheVNldHRlckhlbHBlciAoIFN0cmluZ0VudW1BYnN0cmFjdEJhc2VbXSBzb3VyY2VzLCBRTmFtZSBlbGVtTmFtZSApCi0gICAgewotICAgICAgICBpbnQgbiA9IHNvdXJjZXMgPT0gbnVsbCA/IDAgOiBzb3VyY2VzLmxlbmd0aDsKLQotICAgICAgICBUeXBlU3RvcmUgc3RvcmUgPSBnZXRfc3RvcmUoKTsKLQotICAgICAgICBpbnQgbSA9IHN0b3JlLmNvdW50X2VsZW1lbnRzKCBlbGVtTmFtZSApOwotCi0gICAgICAgIGZvciAoIDsgbSA+IG4gOyBtLS0gKQotICAgICAgICAgICAgc3RvcmUucmVtb3ZlX2VsZW1lbnQoIGVsZW1OYW1lLCBtIC0gMSApOwotCi0gICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCBuIDsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgVHlwZVN0b3JlVXNlciB1c2VyOwotCi0gICAgICAgICAgICBpZiAoaSA+PSBtKQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5hZGRfZWxlbWVudF91c2VyKCBlbGVtTmFtZSApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5maW5kX2VsZW1lbnRfdXNlciggZWxlbU5hbWUsIGkgKTsKLQotICAgICAgICAgICAgKChYbWxPYmplY3RCYXNlKSB1c2VyKS5zZXQoIHNvdXJjZXNbIGkgXSApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgYXJyYXlTZXR0ZXJIZWxwZXIgKCBMaXN0W10gc291cmNlcywgUU5hbWUgZWxlbU5hbWUgKQotICAgIHsKLSAgICAgICAgaW50IG4gPSBzb3VyY2VzID09IG51bGwgPyAwIDogc291cmNlcy5sZW5ndGg7Ci0KLSAgICAgICAgVHlwZVN0b3JlIHN0b3JlID0gZ2V0X3N0b3JlKCk7Ci0KLSAgICAgICAgaW50IG0gPSBzdG9yZS5jb3VudF9lbGVtZW50cyggZWxlbU5hbWUgKTsKLQotICAgICAgICBmb3IgKCA7IG0gPiBuIDsgbS0tICkKLSAgICAgICAgICAgIHN0b3JlLnJlbW92ZV9lbGVtZW50KCBlbGVtTmFtZSwgbSAtIDEgKTsKLQotICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgbiA7IGkrKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFR5cGVTdG9yZVVzZXIgdXNlcjsKLQotICAgICAgICAgICAgaWYgKGkgPj0gbSkKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuYWRkX2VsZW1lbnRfdXNlciggZWxlbU5hbWUgKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuZmluZF9lbGVtZW50X3VzZXIoIGVsZW1OYW1lLCBpICk7Ci0KLSAgICAgICAgICAgICgoWG1sT2JqZWN0QmFzZSkgdXNlcikuc2V0KCBzb3VyY2VzWyBpIF0gKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHVuaW9uQXJyYXlTZXR0ZXJIZWxwZXIgKCBPYmplY3RbXSBzb3VyY2VzLCBRTmFtZSBlbGVtTmFtZSwgUU5hbWVTZXQgc2V0ICkKLSAgICB7Ci0gICAgICAgIGludCBuID0gc291cmNlcyA9PSBudWxsID8gMCA6IHNvdXJjZXMubGVuZ3RoOwotCi0gICAgICAgIFR5cGVTdG9yZSBzdG9yZSA9IGdldF9zdG9yZSgpOwotCi0gICAgICAgIGludCBtID0gc3RvcmUuY291bnRfZWxlbWVudHMoIHNldCApOwotCi0gICAgICAgIGZvciAoIDsgbSA+IG4gOyBtLS0gKQotICAgICAgICAgICAgc3RvcmUucmVtb3ZlX2VsZW1lbnQoIHNldCwgbSAtIDEgKTsKLQotICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgbiA7IGkrKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFR5cGVTdG9yZVVzZXIgdXNlcjsKLQotICAgICAgICAgICAgaWYgKGkgPj0gbSkKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuYWRkX2VsZW1lbnRfdXNlciggZWxlbU5hbWUgKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuZmluZF9lbGVtZW50X3VzZXIoIHNldCwgaSApOwotCi0gICAgICAgICAgICAoKFhtbE9iamVjdEJhc2UpIHVzZXIpLm9iamVjdFNldCggc291cmNlc1sgaSBdICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBhcnJheVNldHRlckhlbHBlciAoIGJvb2xlYW5bXSBzb3VyY2VzLCBRTmFtZSBlbGVtTmFtZSwgUU5hbWVTZXQgc2V0ICkKLSAgICB7Ci0gICAgICAgIGludCBuID0gc291cmNlcyA9PSBudWxsID8gMCA6IHNvdXJjZXMubGVuZ3RoOwotCi0gICAgICAgIFR5cGVTdG9yZSBzdG9yZSA9IGdldF9zdG9yZSgpOwotCi0gICAgICAgIGludCBtID0gc3RvcmUuY291bnRfZWxlbWVudHMoIHNldCApOwotCi0gICAgICAgIGZvciAoIDsgbSA+IG4gOyBtLS0gKQotICAgICAgICAgICAgc3RvcmUucmVtb3ZlX2VsZW1lbnQoIHNldCwgbSAtIDEgKTsKLQotICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgbiA7IGkrKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFR5cGVTdG9yZVVzZXIgdXNlcjsKLQotICAgICAgICAgICAgaWYgKGkgPj0gbSkKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuYWRkX2VsZW1lbnRfdXNlciggZWxlbU5hbWUgKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuZmluZF9lbGVtZW50X3VzZXIoIHNldCwgaSApOwotCi0gICAgICAgICAgICAoKFhtbE9iamVjdEJhc2UpIHVzZXIpLnNldCggc291cmNlc1sgaSBdICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBhcnJheVNldHRlckhlbHBlciAoIGZsb2F0W10gc291cmNlcywgUU5hbWUgZWxlbU5hbWUsIFFOYW1lU2V0IHNldCApCi0gICAgewotICAgICAgICBpbnQgbiA9IHNvdXJjZXMgPT0gbnVsbCA/IDAgOiBzb3VyY2VzLmxlbmd0aDsKLQotICAgICAgICBUeXBlU3RvcmUgc3RvcmUgPSBnZXRfc3RvcmUoKTsKLQotICAgICAgICBpbnQgbSA9IHN0b3JlLmNvdW50X2VsZW1lbnRzKCBzZXQgKTsKLQotICAgICAgICBmb3IgKCA7IG0gPiBuIDsgbS0tICkKLSAgICAgICAgICAgIHN0b3JlLnJlbW92ZV9lbGVtZW50KCBzZXQsIG0gLSAxICk7Ci0KLSAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IG4gOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBUeXBlU3RvcmVVc2VyIHVzZXI7Ci0KLSAgICAgICAgICAgIGlmIChpID49IG0pCi0gICAgICAgICAgICAgICAgdXNlciA9IHN0b3JlLmFkZF9lbGVtZW50X3VzZXIoIGVsZW1OYW1lICk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdXNlciA9IHN0b3JlLmZpbmRfZWxlbWVudF91c2VyKCBzZXQsIGkgKTsKLQotICAgICAgICAgICAgKChYbWxPYmplY3RCYXNlKSB1c2VyKS5zZXQoIHNvdXJjZXNbIGkgXSApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgYXJyYXlTZXR0ZXJIZWxwZXIgKCBkb3VibGVbXSBzb3VyY2VzLCBRTmFtZSBlbGVtTmFtZSwgUU5hbWVTZXQgc2V0ICkKLSAgICB7Ci0gICAgICAgIGludCBuID0gc291cmNlcyA9PSBudWxsID8gMCA6IHNvdXJjZXMubGVuZ3RoOwotCi0gICAgICAgIFR5cGVTdG9yZSBzdG9yZSA9IGdldF9zdG9yZSgpOwotCi0gICAgICAgIGludCBtID0gc3RvcmUuY291bnRfZWxlbWVudHMoIHNldCApOwotCi0gICAgICAgIGZvciAoIDsgbSA+IG4gOyBtLS0gKQotICAgICAgICAgICAgc3RvcmUucmVtb3ZlX2VsZW1lbnQoIHNldCwgbSAtIDEgKTsKLQotICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgbiA7IGkrKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFR5cGVTdG9yZVVzZXIgdXNlcjsKLQotICAgICAgICAgICAgaWYgKGkgPj0gbSkKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuYWRkX2VsZW1lbnRfdXNlciggZWxlbU5hbWUgKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuZmluZF9lbGVtZW50X3VzZXIoIHNldCwgaSApOwotCi0gICAgICAgICAgICAoKFhtbE9iamVjdEJhc2UpIHVzZXIpLnNldCggc291cmNlc1sgaSBdICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBhcnJheVNldHRlckhlbHBlciAoIGJ5dGVbXSBzb3VyY2VzLCBRTmFtZSBlbGVtTmFtZSwgUU5hbWVTZXQgc2V0ICkKLSAgICB7Ci0gICAgICAgIGludCBuID0gc291cmNlcyA9PSBudWxsID8gMCA6IHNvdXJjZXMubGVuZ3RoOwotCi0gICAgICAgIFR5cGVTdG9yZSBzdG9yZSA9IGdldF9zdG9yZSgpOwotCi0gICAgICAgIGludCBtID0gc3RvcmUuY291bnRfZWxlbWVudHMoIHNldCApOwotCi0gICAgICAgIGZvciAoIDsgbSA+IG4gOyBtLS0gKQotICAgICAgICAgICAgc3RvcmUucmVtb3ZlX2VsZW1lbnQoIHNldCwgbSAtIDEgKTsKLQotICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgbiA7IGkrKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFR5cGVTdG9yZVVzZXIgdXNlcjsKLQotICAgICAgICAgICAgaWYgKGkgPj0gbSkKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuYWRkX2VsZW1lbnRfdXNlciggZWxlbU5hbWUgKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuZmluZF9lbGVtZW50X3VzZXIoIHNldCwgaSApOwotCi0gICAgICAgICAgICAoKFhtbE9iamVjdEJhc2UpIHVzZXIpLnNldCggc291cmNlc1sgaSBdICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBhcnJheVNldHRlckhlbHBlciAoIHNob3J0W10gc291cmNlcywgUU5hbWUgZWxlbU5hbWUsIFFOYW1lU2V0IHNldCApCi0gICAgewotICAgICAgICBpbnQgbiA9IHNvdXJjZXMgPT0gbnVsbCA/IDAgOiBzb3VyY2VzLmxlbmd0aDsKLQotICAgICAgICBUeXBlU3RvcmUgc3RvcmUgPSBnZXRfc3RvcmUoKTsKLQotICAgICAgICBpbnQgbSA9IHN0b3JlLmNvdW50X2VsZW1lbnRzKCBzZXQgKTsKLQotICAgICAgICBmb3IgKCA7IG0gPiBuIDsgbS0tICkKLSAgICAgICAgICAgIHN0b3JlLnJlbW92ZV9lbGVtZW50KCBzZXQsIG0gLSAxICk7Ci0KLSAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IG4gOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBUeXBlU3RvcmVVc2VyIHVzZXI7Ci0KLSAgICAgICAgICAgIGlmIChpID49IG0pCi0gICAgICAgICAgICAgICAgdXNlciA9IHN0b3JlLmFkZF9lbGVtZW50X3VzZXIoIGVsZW1OYW1lICk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdXNlciA9IHN0b3JlLmZpbmRfZWxlbWVudF91c2VyKCBzZXQsIGkgKTsKLQotICAgICAgICAgICAgKChYbWxPYmplY3RCYXNlKSB1c2VyKS5zZXQoIHNvdXJjZXNbIGkgXSApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgYXJyYXlTZXR0ZXJIZWxwZXIgKCBpbnRbXSBzb3VyY2VzLCBRTmFtZSBlbGVtTmFtZSwgUU5hbWVTZXQgc2V0ICkKLSAgICB7Ci0gICAgICAgIGludCBuID0gc291cmNlcyA9PSBudWxsID8gMCA6IHNvdXJjZXMubGVuZ3RoOwotCi0gICAgICAgIFR5cGVTdG9yZSBzdG9yZSA9IGdldF9zdG9yZSgpOwotCi0gICAgICAgIGludCBtID0gc3RvcmUuY291bnRfZWxlbWVudHMoIHNldCApOwotCi0gICAgICAgIGZvciAoIDsgbSA+IG4gOyBtLS0gKQotICAgICAgICAgICAgc3RvcmUucmVtb3ZlX2VsZW1lbnQoIHNldCwgbSAtIDEgKTsKLQotICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgbiA7IGkrKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFR5cGVTdG9yZVVzZXIgdXNlcjsKLQotICAgICAgICAgICAgaWYgKGkgPj0gbSkKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuYWRkX2VsZW1lbnRfdXNlciggZWxlbU5hbWUgKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuZmluZF9lbGVtZW50X3VzZXIoIHNldCwgaSApOwotCi0gICAgICAgICAgICAoKFhtbE9iamVjdEJhc2UpIHVzZXIpLnNldCggc291cmNlc1sgaSBdICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBhcnJheVNldHRlckhlbHBlciAoIGxvbmdbXSBzb3VyY2VzLCBRTmFtZSBlbGVtTmFtZSwgUU5hbWVTZXQgc2V0ICkKLSAgICB7Ci0gICAgICAgIGludCBuID0gc291cmNlcyA9PSBudWxsID8gMCA6IHNvdXJjZXMubGVuZ3RoOwotCi0gICAgICAgIFR5cGVTdG9yZSBzdG9yZSA9IGdldF9zdG9yZSgpOwotCi0gICAgICAgIGludCBtID0gc3RvcmUuY291bnRfZWxlbWVudHMoIHNldCApOwotCi0gICAgICAgIGZvciAoIDsgbSA+IG4gOyBtLS0gKQotICAgICAgICAgICAgc3RvcmUucmVtb3ZlX2VsZW1lbnQoIHNldCwgbSAtIDEgKTsKLQotICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgbiA7IGkrKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFR5cGVTdG9yZVVzZXIgdXNlcjsKLQotICAgICAgICAgICAgaWYgKGkgPj0gbSkKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuYWRkX2VsZW1lbnRfdXNlciggZWxlbU5hbWUgKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuZmluZF9lbGVtZW50X3VzZXIoIHNldCwgaSApOwotCi0gICAgICAgICAgICAoKFhtbE9iamVjdEJhc2UpIHVzZXIpLnNldCggc291cmNlc1sgaSBdICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBhcnJheVNldHRlckhlbHBlciAoIEJpZ0RlY2ltYWxbXSBzb3VyY2VzLCBRTmFtZSBlbGVtTmFtZSwgUU5hbWVTZXQgc2V0ICkKLSAgICB7Ci0gICAgICAgIGludCBuID0gc291cmNlcyA9PSBudWxsID8gMCA6IHNvdXJjZXMubGVuZ3RoOwotCi0gICAgICAgIFR5cGVTdG9yZSBzdG9yZSA9IGdldF9zdG9yZSgpOwotCi0gICAgICAgIGludCBtID0gc3RvcmUuY291bnRfZWxlbWVudHMoIHNldCApOwotCi0gICAgICAgIGZvciAoIDsgbSA+IG4gOyBtLS0gKQotICAgICAgICAgICAgc3RvcmUucmVtb3ZlX2VsZW1lbnQoIHNldCwgbSAtIDEgKTsKLQotICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgbiA7IGkrKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFR5cGVTdG9yZVVzZXIgdXNlcjsKLQotICAgICAgICAgICAgaWYgKGkgPj0gbSkKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuYWRkX2VsZW1lbnRfdXNlciggZWxlbU5hbWUgKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuZmluZF9lbGVtZW50X3VzZXIoIHNldCwgaSApOwotCi0gICAgICAgICAgICAoKFhtbE9iamVjdEJhc2UpIHVzZXIpLnNldCggc291cmNlc1sgaSBdICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBhcnJheVNldHRlckhlbHBlciAoIEJpZ0ludGVnZXJbXSBzb3VyY2VzLCBRTmFtZSBlbGVtTmFtZSwgUU5hbWVTZXQgc2V0ICkKLSAgICB7Ci0gICAgICAgIGludCBuID0gc291cmNlcyA9PSBudWxsID8gMCA6IHNvdXJjZXMubGVuZ3RoOwotCi0gICAgICAgIFR5cGVTdG9yZSBzdG9yZSA9IGdldF9zdG9yZSgpOwotCi0gICAgICAgIGludCBtID0gc3RvcmUuY291bnRfZWxlbWVudHMoIHNldCApOwotCi0gICAgICAgIGZvciAoIDsgbSA+IG4gOyBtLS0gKQotICAgICAgICAgICAgc3RvcmUucmVtb3ZlX2VsZW1lbnQoIHNldCwgbSAtIDEgKTsKLQotICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgbiA7IGkrKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFR5cGVTdG9yZVVzZXIgdXNlcjsKLQotICAgICAgICAgICAgaWYgKGkgPj0gbSkKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuYWRkX2VsZW1lbnRfdXNlciggZWxlbU5hbWUgKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuZmluZF9lbGVtZW50X3VzZXIoIHNldCwgaSApOwotCi0gICAgICAgICAgICAoKFhtbE9iamVjdEJhc2UpIHVzZXIpLnNldCggc291cmNlc1sgaSBdICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBhcnJheVNldHRlckhlbHBlciAoIFN0cmluZ1tdIHNvdXJjZXMsIFFOYW1lIGVsZW1OYW1lLCBRTmFtZVNldCBzZXQgKQotICAgIHsKLSAgICAgICAgaW50IG4gPSBzb3VyY2VzID09IG51bGwgPyAwIDogc291cmNlcy5sZW5ndGg7Ci0KLSAgICAgICAgVHlwZVN0b3JlIHN0b3JlID0gZ2V0X3N0b3JlKCk7Ci0KLSAgICAgICAgaW50IG0gPSBzdG9yZS5jb3VudF9lbGVtZW50cyggc2V0ICk7Ci0KLSAgICAgICAgZm9yICggOyBtID4gbiA7IG0tLSApCi0gICAgICAgICAgICBzdG9yZS5yZW1vdmVfZWxlbWVudCggc2V0LCBtIC0gMSApOwotCi0gICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCBuIDsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgVHlwZVN0b3JlVXNlciB1c2VyOwotCi0gICAgICAgICAgICBpZiAoaSA+PSBtKQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5hZGRfZWxlbWVudF91c2VyKCBlbGVtTmFtZSApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5maW5kX2VsZW1lbnRfdXNlciggc2V0LCBpICk7Ci0KLSAgICAgICAgICAgICgoWG1sT2JqZWN0QmFzZSkgdXNlcikuc2V0KCBzb3VyY2VzWyBpIF0gKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGFycmF5U2V0dGVySGVscGVyICggYnl0ZVtdW10gc291cmNlcywgUU5hbWUgZWxlbU5hbWUsIFFOYW1lU2V0IHNldCApCi0gICAgewotICAgICAgICBpbnQgbiA9IHNvdXJjZXMgPT0gbnVsbCA/IDAgOiBzb3VyY2VzLmxlbmd0aDsKLQotICAgICAgICBUeXBlU3RvcmUgc3RvcmUgPSBnZXRfc3RvcmUoKTsKLQotICAgICAgICBpbnQgbSA9IHN0b3JlLmNvdW50X2VsZW1lbnRzKCBzZXQgKTsKLQotICAgICAgICBmb3IgKCA7IG0gPiBuIDsgbS0tICkKLSAgICAgICAgICAgIHN0b3JlLnJlbW92ZV9lbGVtZW50KCBzZXQsIG0gLSAxICk7Ci0KLSAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IG4gOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBUeXBlU3RvcmVVc2VyIHVzZXI7Ci0KLSAgICAgICAgICAgIGlmIChpID49IG0pCi0gICAgICAgICAgICAgICAgdXNlciA9IHN0b3JlLmFkZF9lbGVtZW50X3VzZXIoIGVsZW1OYW1lICk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdXNlciA9IHN0b3JlLmZpbmRfZWxlbWVudF91c2VyKCBzZXQsIGkgKTsKLQotICAgICAgICAgICAgKChYbWxPYmplY3RCYXNlKSB1c2VyKS5zZXQoIHNvdXJjZXNbIGkgXSApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgYXJyYXlTZXR0ZXJIZWxwZXIgKCBHRGF0ZVtdIHNvdXJjZXMsIFFOYW1lIGVsZW1OYW1lLCBRTmFtZVNldCBzZXQgKQotICAgIHsKLSAgICAgICAgaW50IG4gPSBzb3VyY2VzID09IG51bGwgPyAwIDogc291cmNlcy5sZW5ndGg7Ci0KLSAgICAgICAgVHlwZVN0b3JlIHN0b3JlID0gZ2V0X3N0b3JlKCk7Ci0KLSAgICAgICAgaW50IG0gPSBzdG9yZS5jb3VudF9lbGVtZW50cyggc2V0ICk7Ci0KLSAgICAgICAgZm9yICggOyBtID4gbiA7IG0tLSApCi0gICAgICAgICAgICBzdG9yZS5yZW1vdmVfZWxlbWVudCggc2V0LCBtIC0gMSApOwotCi0gICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCBuIDsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgVHlwZVN0b3JlVXNlciB1c2VyOwotCi0gICAgICAgICAgICBpZiAoaSA+PSBtKQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5hZGRfZWxlbWVudF91c2VyKCBlbGVtTmFtZSApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5maW5kX2VsZW1lbnRfdXNlciggc2V0LCBpICk7Ci0KLSAgICAgICAgICAgICgoWG1sT2JqZWN0QmFzZSkgdXNlcikuc2V0KCBzb3VyY2VzWyBpIF0gKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGFycmF5U2V0dGVySGVscGVyICggR0R1cmF0aW9uW10gc291cmNlcywgUU5hbWUgZWxlbU5hbWUsIFFOYW1lU2V0IHNldCApCi0gICAgewotICAgICAgICBpbnQgbiA9IHNvdXJjZXMgPT0gbnVsbCA/IDAgOiBzb3VyY2VzLmxlbmd0aDsKLQotICAgICAgICBUeXBlU3RvcmUgc3RvcmUgPSBnZXRfc3RvcmUoKTsKLQotICAgICAgICBpbnQgbSA9IHN0b3JlLmNvdW50X2VsZW1lbnRzKCBzZXQgKTsKLQotICAgICAgICBmb3IgKCA7IG0gPiBuIDsgbS0tICkKLSAgICAgICAgICAgIHN0b3JlLnJlbW92ZV9lbGVtZW50KCBzZXQsIG0gLSAxICk7Ci0KLSAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IG4gOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBUeXBlU3RvcmVVc2VyIHVzZXI7Ci0KLSAgICAgICAgICAgIGlmIChpID49IG0pCi0gICAgICAgICAgICAgICAgdXNlciA9IHN0b3JlLmFkZF9lbGVtZW50X3VzZXIoIGVsZW1OYW1lICk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdXNlciA9IHN0b3JlLmZpbmRfZWxlbWVudF91c2VyKCBzZXQsIGkgKTsKLQotICAgICAgICAgICAgKChYbWxPYmplY3RCYXNlKSB1c2VyKS5zZXQoIHNvdXJjZXNbIGkgXSApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgYXJyYXlTZXR0ZXJIZWxwZXIgKCBDYWxlbmRhcltdIHNvdXJjZXMsIFFOYW1lIGVsZW1OYW1lLCBRTmFtZVNldCBzZXQgKQotICAgIHsKLSAgICAgICAgaW50IG4gPSBzb3VyY2VzID09IG51bGwgPyAwIDogc291cmNlcy5sZW5ndGg7Ci0KLSAgICAgICAgVHlwZVN0b3JlIHN0b3JlID0gZ2V0X3N0b3JlKCk7Ci0KLSAgICAgICAgaW50IG0gPSBzdG9yZS5jb3VudF9lbGVtZW50cyggc2V0ICk7Ci0KLSAgICAgICAgZm9yICggOyBtID4gbiA7IG0tLSApCi0gICAgICAgICAgICBzdG9yZS5yZW1vdmVfZWxlbWVudCggc2V0LCBtIC0gMSApOwotCi0gICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCBuIDsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgVHlwZVN0b3JlVXNlciB1c2VyOwotCi0gICAgICAgICAgICBpZiAoaSA+PSBtKQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5hZGRfZWxlbWVudF91c2VyKCBlbGVtTmFtZSApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5maW5kX2VsZW1lbnRfdXNlciggc2V0LCBpICk7Ci0KLSAgICAgICAgICAgICgoWG1sT2JqZWN0QmFzZSkgdXNlcikuc2V0KCBzb3VyY2VzWyBpIF0gKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGFycmF5U2V0dGVySGVscGVyICggRGF0ZVtdIHNvdXJjZXMsIFFOYW1lIGVsZW1OYW1lLCBRTmFtZVNldCBzZXQgKQotICAgIHsKLSAgICAgICAgaW50IG4gPSBzb3VyY2VzID09IG51bGwgPyAwIDogc291cmNlcy5sZW5ndGg7Ci0KLSAgICAgICAgVHlwZVN0b3JlIHN0b3JlID0gZ2V0X3N0b3JlKCk7Ci0KLSAgICAgICAgaW50IG0gPSBzdG9yZS5jb3VudF9lbGVtZW50cyggc2V0ICk7Ci0KLSAgICAgICAgZm9yICggOyBtID4gbiA7IG0tLSApCi0gICAgICAgICAgICBzdG9yZS5yZW1vdmVfZWxlbWVudCggc2V0LCBtIC0gMSApOwotCi0gICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCBuIDsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgVHlwZVN0b3JlVXNlciB1c2VyOwotCi0gICAgICAgICAgICBpZiAoaSA+PSBtKQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5hZGRfZWxlbWVudF91c2VyKCBlbGVtTmFtZSApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5maW5kX2VsZW1lbnRfdXNlciggc2V0LCBpICk7Ci0KLSAgICAgICAgICAgICgoWG1sT2JqZWN0QmFzZSkgdXNlcikuc2V0KCBzb3VyY2VzWyBpIF0gKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGFycmF5U2V0dGVySGVscGVyICggUU5hbWVbXSBzb3VyY2VzLCBRTmFtZSBlbGVtTmFtZSwgUU5hbWVTZXQgc2V0ICkKLSAgICB7Ci0gICAgICAgIGludCBuID0gc291cmNlcyA9PSBudWxsID8gMCA6IHNvdXJjZXMubGVuZ3RoOwotICAgICAgICAKLSAgICAgICAgVHlwZVN0b3JlIHN0b3JlID0gZ2V0X3N0b3JlKCk7Ci0KLSAgICAgICAgaW50IG0gPSBzdG9yZS5jb3VudF9lbGVtZW50cyggc2V0ICk7Ci0KLSAgICAgICAgZm9yICggOyBtID4gbiA7IG0tLSApCi0gICAgICAgICAgICBzdG9yZS5yZW1vdmVfZWxlbWVudCggc2V0LCBtIC0gMSApOwotCi0gICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCBuIDsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgVHlwZVN0b3JlVXNlciB1c2VyOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaSA+PSBtKQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5hZGRfZWxlbWVudF91c2VyKCBlbGVtTmFtZSApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5maW5kX2VsZW1lbnRfdXNlciggc2V0LCBpICk7Ci0KLSAgICAgICAgICAgICgoWG1sT2JqZWN0QmFzZSkgdXNlcikuc2V0KCBzb3VyY2VzWyBpIF0gKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwcm90ZWN0ZWQgdm9pZCBhcnJheVNldHRlckhlbHBlciAoIFN0cmluZ0VudW1BYnN0cmFjdEJhc2VbXSBzb3VyY2VzLCBRTmFtZSBlbGVtTmFtZSwgUU5hbWVTZXQgc2V0ICkKLSAgICB7Ci0gICAgICAgIGludCBuID0gc291cmNlcyA9PSBudWxsID8gMCA6IHNvdXJjZXMubGVuZ3RoOwotICAgICAgICAKLSAgICAgICAgVHlwZVN0b3JlIHN0b3JlID0gZ2V0X3N0b3JlKCk7Ci0KLSAgICAgICAgaW50IG0gPSBzdG9yZS5jb3VudF9lbGVtZW50cyggc2V0ICk7Ci0KLSAgICAgICAgZm9yICggOyBtID4gbiA7IG0tLSApCi0gICAgICAgICAgICBzdG9yZS5yZW1vdmVfZWxlbWVudCggc2V0LCBtIC0gMSApOwotCi0gICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCBuIDsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgVHlwZVN0b3JlVXNlciB1c2VyOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaSA+PSBtKQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5hZGRfZWxlbWVudF91c2VyKCBlbGVtTmFtZSApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5maW5kX2VsZW1lbnRfdXNlciggc2V0LCBpICk7Ci0KLSAgICAgICAgICAgICgoWG1sT2JqZWN0QmFzZSkgdXNlcikuc2V0KCBzb3VyY2VzWyBpIF0gKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwcm90ZWN0ZWQgdm9pZCBhcnJheVNldHRlckhlbHBlciAoIExpc3RbXSBzb3VyY2VzLCBRTmFtZSBlbGVtTmFtZSwgUU5hbWVTZXQgc2V0ICkKLSAgICB7Ci0gICAgICAgIGludCBuID0gc291cmNlcyA9PSBudWxsID8gMCA6IHNvdXJjZXMubGVuZ3RoOwotICAgICAgICAKLSAgICAgICAgVHlwZVN0b3JlIHN0b3JlID0gZ2V0X3N0b3JlKCk7Ci0KLSAgICAgICAgaW50IG0gPSBzdG9yZS5jb3VudF9lbGVtZW50cyggc2V0ICk7Ci0KLSAgICAgICAgZm9yICggOyBtID4gbiA7IG0tLSApCi0gICAgICAgICAgICBzdG9yZS5yZW1vdmVfZWxlbWVudCggc2V0LCBtIC0gMSApOwotCi0gICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCBuIDsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgVHlwZVN0b3JlVXNlciB1c2VyOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaSA+PSBtKQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5hZGRfZWxlbWVudF91c2VyKCBlbGVtTmFtZSApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHVzZXIgPSBzdG9yZS5maW5kX2VsZW1lbnRfdXNlciggc2V0LCBpICk7Ci0KLSAgICAgICAgICAgICgoWG1sT2JqZWN0QmFzZSkgdXNlcikuc2V0KCBzb3VyY2VzWyBpIF0gKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGFycmF5U2V0dGVySGVscGVyICggWG1sT2JqZWN0W10gc291cmNlcywgUU5hbWUgZWxlbU5hbWUgKQotICAgIHsKLSAgICAgICAgZ2V0X3N0b3JlKCkuYXJyYXlfc2V0dGVyKCBzb3VyY2VzLCBlbGVtTmFtZSApOwotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIGFycmF5U2V0dGVySGVscGVyICggWG1sT2JqZWN0W10gc291cmNlcywgUU5hbWUgZWxlbU5hbWUsIFFOYW1lU2V0IHNldCApCi0gICAgewotICAgICAgICBpbnQgbiA9IHNvdXJjZXMgPT0gbnVsbCA/IDAgOiBzb3VyY2VzLmxlbmd0aDsKLSAgICAgICAgCi0gICAgICAgIFR5cGVTdG9yZSBzdG9yZSA9IGdldF9zdG9yZSgpOwotCi0gICAgICAgIGludCBtID0gc3RvcmUuY291bnRfZWxlbWVudHMoIHNldCApOwotCi0gICAgICAgIGZvciAoIDsgbSA+IG4gOyBtLS0gKQotICAgICAgICAgICAgc3RvcmUucmVtb3ZlX2VsZW1lbnQoIHNldCwgbSAtIDEgKTsKLQotICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgbiA7IGkrKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFR5cGVTdG9yZVVzZXIgdXNlcjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGkgPj0gbSkKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuYWRkX2VsZW1lbnRfdXNlciggZWxlbU5hbWUgKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB1c2VyID0gc3RvcmUuZmluZF9lbGVtZW50X3VzZXIoIHNldCwgaSApOwotCi0gICAgICAgICAgICAoKFhtbE9iamVjdEJhc2UpIHVzZXIpLnNldCggc291cmNlc1sgaSBdICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbERhdGVJbXBsLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxEYXRlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTc3ZjI1Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbERhdGVJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERhdGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotCi0KLXB1YmxpYyBjbGFzcyBYbWxEYXRlSW1wbCBleHRlbmRzIEphdmFHRGF0ZUhvbGRlckV4IGltcGxlbWVudHMgWG1sRGF0ZQotewotICAgIHB1YmxpYyBYbWxEYXRlSW1wbCgpCi0gICAgICAgIHsgc3VwZXIoWG1sRGF0ZS50eXBlLCBmYWxzZSk7IH0KLSAgICBwdWJsaWMgWG1sRGF0ZUltcGwoU2NoZW1hVHlwZSB0eXBlLCBib29sZWFuIGNvbXBsZXgpCi0gICAgICAgIHsgc3VwZXIodHlwZSwgY29tcGxleCk7IH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbERhdGVUaW1lSW1wbC5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sRGF0ZVRpbWVJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NzAyN2QuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sRGF0ZVRpbWVJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxEYXRlVGltZTsKLQotCi1wdWJsaWMgY2xhc3MgWG1sRGF0ZVRpbWVJbXBsIGV4dGVuZHMgSmF2YUdEYXRlSG9sZGVyRXggaW1wbGVtZW50cyBYbWxEYXRlVGltZQotewotICAgIHB1YmxpYyBYbWxEYXRlVGltZUltcGwoKQotICAgICAgICB7IHN1cGVyKFhtbERhdGVUaW1lLnR5cGUsIGZhbHNlKTsgfQotICAgIHB1YmxpYyBYbWxEYXRlVGltZUltcGwoU2NoZW1hVHlwZSB0eXBlLCBib29sZWFuIGNvbXBsZXgpCi0gICAgICAgIHsgc3VwZXIodHlwZSwgY29tcGxleCk7IH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbERlY2ltYWxJbXBsLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxEZWNpbWFsSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjIzMzUwLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbERlY2ltYWxJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERlY2ltYWw7Ci0KLXB1YmxpYyBjbGFzcyBYbWxEZWNpbWFsSW1wbCBleHRlbmRzIEphdmFEZWNpbWFsSG9sZGVyIGltcGxlbWVudHMgWG1sRGVjaW1hbAotewotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sRGVjaW1hbFJlc3RyaWN0aW9uLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxEZWNpbWFsUmVzdHJpY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVlNzlkMC4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxEZWNpbWFsUmVzdHJpY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRGVjaW1hbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci0KLXB1YmxpYyBjbGFzcyBYbWxEZWNpbWFsUmVzdHJpY3Rpb24gZXh0ZW5kcyBKYXZhRGVjaW1hbEhvbGRlckV4IGltcGxlbWVudHMgWG1sRGVjaW1hbAotewotICAgIHB1YmxpYyBYbWxEZWNpbWFsUmVzdHJpY3Rpb24oU2NoZW1hVHlwZSB0eXBlLCBib29sZWFuIGNvbXBsZXgpCi0gICAgICAgIHsgc3VwZXIodHlwZSwgY29tcGxleCk7IH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbERvdWJsZUltcGwuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbERvdWJsZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZlMWNiMy4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxEb3VibGVJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERvdWJsZTsKLQotcHVibGljIGNsYXNzIFhtbERvdWJsZUltcGwgZXh0ZW5kcyBKYXZhRG91YmxlSG9sZGVyIGltcGxlbWVudHMgWG1sRG91YmxlCi17Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxEb3VibGVSZXN0cmljdGlvbi5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sRG91YmxlUmVzdHJpY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE2OWIwNS4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxEb3VibGVSZXN0cmljdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxEb3VibGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotCi1wdWJsaWMgY2xhc3MgWG1sRG91YmxlUmVzdHJpY3Rpb24gZXh0ZW5kcyBKYXZhRG91YmxlSG9sZGVyRXggaW1wbGVtZW50cyBYbWxEb3VibGUKLXsKLSAgICBwdWJsaWMgWG1sRG91YmxlUmVzdHJpY3Rpb24oU2NoZW1hVHlwZSB0eXBlLCBib29sZWFuIGNvbXBsZXgpCi0gICAgICAgIHsgc3VwZXIodHlwZSwgY29tcGxleCk7IH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbER1cmF0aW9uSW1wbC5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sRHVyYXRpb25JbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NjdlYjMuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sRHVyYXRpb25JbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbER1cmF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLQotCi1wdWJsaWMgY2xhc3MgWG1sRHVyYXRpb25JbXBsIGV4dGVuZHMgSmF2YUdEdXJhdGlvbkhvbGRlckV4IGltcGxlbWVudHMgWG1sRHVyYXRpb24KLXsKLSAgICBwdWJsaWMgWG1sRHVyYXRpb25JbXBsKCkKLSAgICAgICAgeyBzdXBlcihYbWxEdXJhdGlvbi50eXBlLCBmYWxzZSk7IH0KLSAgICBwdWJsaWMgWG1sRHVyYXRpb25JbXBsKFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IHN1cGVyKHR5cGUsIGNvbXBsZXgpOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxFbnRpdGllc0ltcGwuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbEVudGl0aWVzSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjBiZDFmLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbEVudGl0aWVzSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRU5USVRJRVM7Ci0KLQotcHVibGljIGNsYXNzIFhtbEVudGl0aWVzSW1wbCBleHRlbmRzIFhtbExpc3RJbXBsIGltcGxlbWVudHMgWG1sRU5USVRJRVMKLXsKLSAgICBwdWJsaWMgWG1sRW50aXRpZXNJbXBsKCkKLSAgICAgICAgeyBzdXBlcihYbWxFTlRJVElFUy50eXBlLCBmYWxzZSk7IH0KLSAgICBwdWJsaWMgWG1sRW50aXRpZXNJbXBsKFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IHN1cGVyKHR5cGUsIGNvbXBsZXgpOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxFbnRpdHlJbXBsLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxFbnRpdHlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhZTE1ZGQuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sRW50aXR5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFTlRJVFk7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotCi0KLXB1YmxpYyBjbGFzcyBYbWxFbnRpdHlJbXBsIGV4dGVuZHMgSmF2YVN0cmluZ0hvbGRlckV4IGltcGxlbWVudHMgWG1sRU5USVRZCi17Ci0gICAgcHVibGljIFhtbEVudGl0eUltcGwoKQotICAgICAgICB7IHN1cGVyKFhtbEVOVElUWS50eXBlLCBmYWxzZSk7IH0KLSAgICBwdWJsaWMgWG1sRW50aXR5SW1wbChTY2hlbWFUeXBlIHR5cGUsIGJvb2xlYW4gY29tcGxleCkKLSAgICAgICAgeyBzdXBlcih0eXBlLCBjb21wbGV4KTsgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sRmxvYXRJbXBsLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxGbG9hdEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgxOTU5Ni4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxGbG9hdEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRmxvYXQ7Ci0KLQotcHVibGljIGNsYXNzIFhtbEZsb2F0SW1wbCBleHRlbmRzIEphdmFGbG9hdEhvbGRlciBpbXBsZW1lbnRzIFhtbEZsb2F0Ci17Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxGbG9hdFJlc3RyaWN0aW9uLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxGbG9hdFJlc3RyaWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwODAwMDcuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sRmxvYXRSZXN0cmljdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxGbG9hdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci0KLXB1YmxpYyBjbGFzcyBYbWxGbG9hdFJlc3RyaWN0aW9uIGV4dGVuZHMgSmF2YUZsb2F0SG9sZGVyRXggaW1wbGVtZW50cyBYbWxGbG9hdAotewotICAgIHB1YmxpYyBYbWxGbG9hdFJlc3RyaWN0aW9uKFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IHN1cGVyKHR5cGUsIGNvbXBsZXgpOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxHRGF5SW1wbC5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sR0RheUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhhYTdlYy4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxHRGF5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxHRGF5OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLQotCi1wdWJsaWMgY2xhc3MgWG1sR0RheUltcGwgZXh0ZW5kcyBKYXZhR0RhdGVIb2xkZXJFeCBpbXBsZW1lbnRzIFhtbEdEYXkKLXsKLSAgICBwdWJsaWMgWG1sR0RheUltcGwoKQotICAgICAgICB7IHN1cGVyKFhtbEdEYXkudHlwZSwgZmFsc2UpOyB9Ci0gICAgcHVibGljIFhtbEdEYXlJbXBsKFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IHN1cGVyKHR5cGUsIGNvbXBsZXgpOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxHTW9udGhEYXlJbXBsLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxHTW9udGhEYXlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1YWM3ZGIuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sR01vbnRoRGF5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sR01vbnRoRGF5OwotCi1wdWJsaWMgY2xhc3MgWG1sR01vbnRoRGF5SW1wbCBleHRlbmRzIEphdmFHRGF0ZUhvbGRlckV4IGltcGxlbWVudHMgWG1sR01vbnRoRGF5Ci17Ci0gICAgcHVibGljIFhtbEdNb250aERheUltcGwoKQotICAgICAgICB7IHN1cGVyKFhtbEdNb250aERheS50eXBlLCBmYWxzZSk7IH0KLSAgICBwdWJsaWMgWG1sR01vbnRoRGF5SW1wbChTY2hlbWFUeXBlIHR5cGUsIGJvb2xlYW4gY29tcGxleCkKLSAgICAgICAgeyBzdXBlcih0eXBlLCBjb21wbGV4KTsgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sR01vbnRoSW1wbC5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sR01vbnRoSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDcxZjM5Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbEdNb250aEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEdNb250aDsgCi0KLXB1YmxpYyBjbGFzcyBYbWxHTW9udGhJbXBsIGV4dGVuZHMgSmF2YUdEYXRlSG9sZGVyRXggaW1wbGVtZW50cyBYbWxHTW9udGgKLXsKLSAgICBwdWJsaWMgWG1sR01vbnRoSW1wbCgpCi0gICAgICAgIHsgc3VwZXIoWG1sR01vbnRoLnR5cGUsIGZhbHNlKTsgfQotICAgIHB1YmxpYyBYbWxHTW9udGhJbXBsKFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IHN1cGVyKHR5cGUsIGNvbXBsZXgpOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxHWWVhckltcGwuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbEdZZWFySW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTNlZDU0Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbEdZZWFySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sR1llYXI7Ci0KLXB1YmxpYyBjbGFzcyBYbWxHWWVhckltcGwgZXh0ZW5kcyBKYXZhR0RhdGVIb2xkZXJFeCBpbXBsZW1lbnRzIFhtbEdZZWFyCi17Ci0gICAgcHVibGljIFhtbEdZZWFySW1wbCgpCi0gICAgICAgIHsgc3VwZXIoWG1sR1llYXIudHlwZSwgZmFsc2UpOyB9Ci0gICAgcHVibGljIFhtbEdZZWFySW1wbChTY2hlbWFUeXBlIHR5cGUsIGJvb2xlYW4gY29tcGxleCkKLSAgICAgICAgeyBzdXBlcih0eXBlLCBjb21wbGV4KTsgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sR1llYXJNb250aEltcGwuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbEdZZWFyTW9udGhJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwYmY4YWIuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sR1llYXJNb250aEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEdZZWFyTW9udGg7IAotCi1wdWJsaWMgY2xhc3MgWG1sR1llYXJNb250aEltcGwgZXh0ZW5kcyBKYXZhR0RhdGVIb2xkZXJFeCBpbXBsZW1lbnRzIFhtbEdZZWFyTW9udGgKLXsKLSAgICBwdWJsaWMgWG1sR1llYXJNb250aEltcGwoKQotICAgICAgICB7IHN1cGVyKFhtbEdZZWFyTW9udGgudHlwZSwgZmFsc2UpOyB9Ci0gICAgcHVibGljIFhtbEdZZWFyTW9udGhJbXBsKFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IHN1cGVyKHR5cGUsIGNvbXBsZXgpOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxIZXhCaW5hcnlJbXBsLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxIZXhCaW5hcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5Yzg5OGQuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sSGV4QmluYXJ5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxIZXhCaW5hcnk7Ci0KLQotcHVibGljIGNsYXNzIFhtbEhleEJpbmFyeUltcGwgZXh0ZW5kcyBKYXZhSGV4QmluYXJ5SG9sZGVyIGltcGxlbWVudHMgWG1sSGV4QmluYXJ5Ci17Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxIZXhCaW5hcnlSZXN0cmljdGlvbi5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sSGV4QmluYXJ5UmVzdHJpY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjA2MzMzOC4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxIZXhCaW5hcnlSZXN0cmljdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sSGV4QmluYXJ5OwotCi1wdWJsaWMgY2xhc3MgWG1sSGV4QmluYXJ5UmVzdHJpY3Rpb24gZXh0ZW5kcyBKYXZhSGV4QmluYXJ5SG9sZGVyRXggaW1wbGVtZW50cyBYbWxIZXhCaW5hcnkKLXsKLSAgICBwdWJsaWMgWG1sSGV4QmluYXJ5UmVzdHJpY3Rpb24oU2NoZW1hVHlwZSB0eXBlLCBib29sZWFuIGNvbXBsZXgpCi0gICAgICAgIHsgc3VwZXIodHlwZSwgY29tcGxleCk7IH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbElkSW1wbC5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sSWRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwMjZjYTEuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sSWRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxJRDsKLQotCi1wdWJsaWMgY2xhc3MgWG1sSWRJbXBsIGV4dGVuZHMgSmF2YVN0cmluZ0hvbGRlckV4IGltcGxlbWVudHMgWG1sSUQKLXsKLSAgICBwdWJsaWMgWG1sSWRJbXBsKCkKLSAgICAgICAgeyBzdXBlcihYbWxJRC50eXBlLCBmYWxzZSk7IH0KLSAgICBwdWJsaWMgWG1sSWRJbXBsKFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IHN1cGVyKHR5cGUsIGNvbXBsZXgpOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxJZFJlZkltcGwuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbElkUmVmSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOThlNjYzLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbElkUmVmSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sSURSRUY7Ci0KLQotcHVibGljIGNsYXNzIFhtbElkUmVmSW1wbCBleHRlbmRzIEphdmFTdHJpbmdIb2xkZXJFeCBpbXBsZW1lbnRzIFhtbElEUkVGCi17Ci0gICAgcHVibGljIFhtbElkUmVmSW1wbCgpCi0gICAgICAgIHsgc3VwZXIoWG1sSURSRUYudHlwZSwgZmFsc2UpOyB9Ci0gICAgcHVibGljIFhtbElkUmVmSW1wbChTY2hlbWFUeXBlIHR5cGUsIGJvb2xlYW4gY29tcGxleCkKLSAgICAgICAgeyBzdXBlcih0eXBlLCBjb21wbGV4KTsgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sSWRSZWZzSW1wbC5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sSWRSZWZzSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2YzNTdjLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbElkUmVmc0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbElEUkVGUzsKLQotcHVibGljIGNsYXNzIFhtbElkUmVmc0ltcGwgZXh0ZW5kcyBYbWxMaXN0SW1wbCBpbXBsZW1lbnRzIFhtbElEUkVGUwotewotICAgIHB1YmxpYyBYbWxJZFJlZnNJbXBsKCkKLSAgICAgICAgeyBzdXBlcihYbWxJRFJFRlMudHlwZSwgZmFsc2UpOyB9Ci0gICAgcHVibGljIFhtbElkUmVmc0ltcGwoU2NoZW1hVHlwZSB0eXBlLCBib29sZWFuIGNvbXBsZXgpCi0gICAgICAgIHsgc3VwZXIodHlwZSwgY29tcGxleCk7IH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbEludEltcGwuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbEludEltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FiMDRkZi4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxJbnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEludDsKLQotCi1wdWJsaWMgY2xhc3MgWG1sSW50SW1wbCBleHRlbmRzIEphdmFJbnRIb2xkZXIgaW1wbGVtZW50cyBYbWxJbnQKLXsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbEludFJlc3RyaWN0aW9uLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxJbnRSZXN0cmljdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Mzg1MjhhLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbEludFJlc3RyaWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxJbnQ7Ci0KLXB1YmxpYyBjbGFzcyBYbWxJbnRSZXN0cmljdGlvbiBleHRlbmRzIEphdmFJbnRIb2xkZXJFeCBpbXBsZW1lbnRzIFhtbEludAotewotICAgIHB1YmxpYyBYbWxJbnRSZXN0cmljdGlvbihTY2hlbWFUeXBlIHR5cGUsIGJvb2xlYW4gY29tcGxleCkKLSAgICAgICAgeyBzdXBlcih0eXBlLCBjb21wbGV4KTsgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sSW50ZWdlckltcGwuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbEludGVnZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkYmE5ZGUuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sSW50ZWdlckltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sSW50ZWdlcjsKLQotCi1wdWJsaWMgY2xhc3MgWG1sSW50ZWdlckltcGwgZXh0ZW5kcyBKYXZhSW50ZWdlckhvbGRlciBpbXBsZW1lbnRzIFhtbEludGVnZXIKLXsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbEludGVnZXJSZXN0cmljdGlvbi5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sSW50ZWdlclJlc3RyaWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliODg5M2MuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sSW50ZWdlclJlc3RyaWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxJbnRlZ2VyOwotCi1wdWJsaWMgY2xhc3MgWG1sSW50ZWdlclJlc3RyaWN0aW9uIGV4dGVuZHMgSmF2YUludGVnZXJIb2xkZXJFeCBpbXBsZW1lbnRzIFhtbEludGVnZXIKLXsKLSAgICBwdWJsaWMgWG1sSW50ZWdlclJlc3RyaWN0aW9uKFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IHN1cGVyKHR5cGUsIGNvbXBsZXgpOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxMYW5ndWFnZUltcGwuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbExhbmd1YWdlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzkzZTRmLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbExhbmd1YWdlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxMYW5ndWFnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci0KLXB1YmxpYyBjbGFzcyBYbWxMYW5ndWFnZUltcGwgZXh0ZW5kcyBKYXZhU3RyaW5nSG9sZGVyRXggaW1wbGVtZW50cyBYbWxMYW5ndWFnZQotewotICAgIHB1YmxpYyBYbWxMYW5ndWFnZUltcGwoKQotICAgICAgICB7IHN1cGVyKFhtbExhbmd1YWdlLnR5cGUsIGZhbHNlKTsgfQotICAgIHB1YmxpYyBYbWxMYW5ndWFnZUltcGwoU2NoZW1hVHlwZSB0eXBlLCBib29sZWFuIGNvbXBsZXgpCi0gICAgICAgIHsgc3VwZXIodHlwZSwgY29tcGxleCk7IH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbExpc3RJbXBsLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxMaXN0SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzhmM2I4Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbExpc3RJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MDAgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNpbXBsZVZhbHVlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sU2ltcGxlTGlzdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlZhbGlkYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uUU5hbWVIZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5QcmVmaXhSZXNvbHZlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlhNTENoYXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBYbWxMaXN0SW1wbCBleHRlbmRzIFhtbE9iamVjdEJhc2UgaW1wbGVtZW50cyBYbWxBbnlTaW1wbGVUeXBlCi17Ci0gICAgcHVibGljIFhtbExpc3RJbXBsKFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IF9zY2hlbWFUeXBlID0gdHlwZTsgaW5pdENvbXBsZXhUeXBlKGNvbXBsZXgsIGZhbHNlKTsgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgc2NoZW1hVHlwZSgpCi0gICAgICAgIHsgcmV0dXJuIF9zY2hlbWFUeXBlOyB9Ci0KLSAgICBwcml2YXRlIFNjaGVtYVR5cGUgX3NjaGVtYVR5cGU7Ci0gICAgcHJpdmF0ZSBYbWxTaW1wbGVMaXN0IF92YWx1ZTsKLSAgICBwcml2YXRlIFhtbFNpbXBsZUxpc3QgX2p2YWx1ZTsKLQotCi0KLSAgICAvLyBTSU1QTEUgVkFMVUUgQUNDRVNTT1JTIEJFTE9XIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAvLyBnZXRzIHJhdyB0ZXh0IHZhbHVlCi0KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgbnVsbEFzRW1wdHkoU3RyaW5nIHMpCi0gICAgewotICAgICAgICBpZiAocyA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuICIiOwotICAgICAgICByZXR1cm4gczsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY29tcHV0ZV9saXN0X3RleHQoTGlzdCB4TGlzdCkKLSAgICB7Ci0gICAgICAgIGlmICh4TGlzdC5zaXplKCkgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiAiIjsKLQotICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIHNiLmFwcGVuZChudWxsQXNFbXB0eSgoKFNpbXBsZVZhbHVlKXhMaXN0LmdldCgwKSkuZ2V0U3RyaW5nVmFsdWUoKSkpOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgeExpc3Quc2l6ZSgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNiLmFwcGVuZCgnICcpOwotICAgICAgICAgICAgc2IuYXBwZW5kKG51bGxBc0VtcHR5KCgoU2ltcGxlVmFsdWUpeExpc3QuZ2V0KGkpKS5nZXRTdHJpbmdWYWx1ZSgpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgU3RyaW5nIGNvbXB1dGVfdGV4dChOYW1lc3BhY2VNYW5hZ2VyIG5zbSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb21wdXRlX2xpc3RfdGV4dChfdmFsdWUpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBib29sZWFuIGlzX2RlZmF1bHRhYmxlX3dzKFN0cmluZyB2KSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBYbWxTaW1wbGVMaXN0IHNhdmVkVmFsdWUgPSBfdmFsdWU7Ci0gICAgICAgICAgICBzZXRfdGV4dCh2KTsKLQotICAgICAgICAgICAgLy8gcmVzdG9yZSB0aGUgc2F2ZWQgdmFsdWUKLSAgICAgICAgICAgIF92YWx1ZSA9IHNhdmVkVmFsdWU7Ci0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X3RleHQoU3RyaW5nIHMpCi0gICAgewotICAgICAgICAvLyBmaXJzdCBjaGVjayBhZ2FpbnN0IGFueSBwYXR0ZXJucy4uLgotICAgICAgICBpZiAoX3ZhbGlkYXRlT25TZXQoKSAmJiAhX3NjaGVtYVR5cGUubWF0Y2hQYXR0ZXJuRmFjZXQocykpCi0gICAgICAgICAgICB0aHJvdyBuZXcgWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uKCk7Ci0KLSAgICAgICAgU2NoZW1hVHlwZSBpdGVtVHlwZSA9IF9zY2hlbWFUeXBlLmdldExpc3RJdGVtVHlwZSgpOwotCi0gICAgICAgIFhtbFNpbXBsZUxpc3QgbmV3dmFsID0gbGV4KHMsIGl0ZW1UeXBlLCBfdm9vclZjLCBoYXNfc3RvcmUoKSA/IGdldF9zdG9yZSgpIDogbnVsbCk7Ci0KLSAgICAgICAgLy8gY2hlY2sgZW51bWVyYXRpb24KLSAgICAgICAgaWYgKF92YWxpZGF0ZU9uU2V0KCkpCi0gICAgICAgICAgICB2YWxpZGF0ZVZhbHVlKG5ld3ZhbCwgX3NjaGVtYVR5cGUsIF92b29yVmMpOwotCi0gICAgICAgIC8vIHdlIG1hZGUgaXQgYWxsIHRoZSB3YXkgdGhyb3VnaDsgc28gd2UncmUgT0suCi0gICAgICAgIF92YWx1ZSA9IG5ld3ZhbDsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gRU1QVFlfU1RSSU5HQVJSQVkgPSBuZXcgU3RyaW5nWzBdOwotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nW10gc3BsaXRfbGlzdChTdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIGlmIChzLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICByZXR1cm4gRU1QVFlfU1RSSU5HQVJSQVk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIExpc3QgcmVzdWx0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAgIGludCBzdGFydCA9IDA7Ci0gICAgICAgIGZvciAoOzspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHdoaWxlIChpIDwgcy5sZW5ndGgoKSAmJiBYTUxDaGFyLmlzU3BhY2Uocy5jaGFyQXQoaSkpKQotICAgICAgICAgICAgICAgIGkgKz0gMTsKLSAgICAgICAgICAgIGlmIChpID49IHMubGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIChTdHJpbmdbXSlyZXN1bHQudG9BcnJheShFTVBUWV9TVFJJTkdBUlJBWSk7Ci0gICAgICAgICAgICBzdGFydCA9IGk7Ci0gICAgICAgICAgICB3aGlsZSAoaSA8IHMubGVuZ3RoKCkgJiYgIVhNTENoYXIuaXNTcGFjZShzLmNoYXJBdChpKSkpCi0gICAgICAgICAgICAgICAgaSArPSAxOwotICAgICAgICAgICAgcmVzdWx0LmFkZChzLnN1YnN0cmluZyhzdGFydCwgaSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgWG1sU2ltcGxlTGlzdCBsZXgoU3RyaW5nIHMsIFNjaGVtYVR5cGUgaXRlbVR5cGUsIFZhbGlkYXRpb25Db250ZXh0IGN0eCwgUHJlZml4UmVzb2x2ZXIgcmVzb2x2ZXIpCi0gICAgewotICAgICAgICBTdHJpbmdbXSBwYXJ0cyA9IHNwbGl0X2xpc3Qocyk7Ci0KLSAgICAgICAgWG1sQW55U2ltcGxlVHlwZVtdIG5ld0FycmF5ID0gbmV3IFhtbEFueVNpbXBsZVR5cGVbcGFydHMubGVuZ3RoXTsKLSAgICAgICAgYm9vbGVhbiBwdXNoZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKHJlc29sdmVyICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIE5hbWVzcGFjZUNvbnRleHQucHVzaChuZXcgTmFtZXNwYWNlQ29udGV4dChyZXNvbHZlcikpOwotICAgICAgICAgICAgcHVzaGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBuZXdBcnJheVtpXSA9IGl0ZW1UeXBlLm5ld1ZhbHVlKHBhcnRzW2ldKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY3R4LmludmFsaWQoIkxpc3QgaXRlbSAnIiArIHBhcnRzW2ldICsgIicgaXMgbm90IGEgdmFsaWQgdmFsdWUgb2YgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKGl0ZW1UeXBlKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZpbmFsbHkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHB1c2hlZCkKLSAgICAgICAgICAgICAgICBOYW1lc3BhY2VDb250ZXh0LnBvcCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuZXcgWG1sU2ltcGxlTGlzdChBcnJheXMuYXNMaXN0KG5ld0FycmF5KSk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X25pbCgpCi0gICAgewotICAgICAgICBfdmFsdWUgPSBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBMaXN0IHhsaXN0VmFsdWUoKQotICAgIHsKLSAgICAgICAgY2hlY2tfZGF0ZWQoKTsKLSAgICAgICAgcmV0dXJuIF92YWx1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTGlzdCBsaXN0VmFsdWUoKQotICAgIHsKLSAgICAgICAgY2hlY2tfZGF0ZWQoKTsKLSAgICAgICAgaWYgKF92YWx1ZSA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIGlmIChfanZhbHVlICE9IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gX2p2YWx1ZTsKLSAgICAgICAgTGlzdCBqYXZhUmVzdWx0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IF92YWx1ZS5zaXplKCk7IGkrKykKLSAgICAgICAgICAgIGphdmFSZXN1bHQuYWRkKGphdmFfdmFsdWUoKFhtbE9iamVjdClfdmFsdWUuZ2V0KGkpKSk7Ci0gICAgICAgIF9qdmFsdWUgPSBuZXcgWG1sU2ltcGxlTGlzdChqYXZhUmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIF9qdmFsdWU7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBwZXJtaXRzX2lubmVyX3NwYWNlKFhtbE9iamVjdCBvYmopCi0gICAgewotICAgICAgICBzd2l0Y2ggKCgoU2ltcGxlVmFsdWUpb2JqKS5pbnN0YW5jZVR5cGUoKS5nZXRQcmltaXRpdmVUeXBlKCkuZ2V0QnVpbHRpblR5cGVDb2RlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfU1RSSU5HOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19BTllfVVJJOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19BTllfU0lNUExFOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19BTllfVFlQRToKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBjb250YWluc193aGl0ZV9zcGFjZShTdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBzLmluZGV4T2YoJyAnKSA+PSAwIHx8Ci0gICAgICAgICAgICAgICAgcy5pbmRleE9mKCdcdCcpID49IDAgfHwKLSAgICAgICAgICAgICAgICBzLmluZGV4T2YoJ1xuJykgPj0gMCB8fAotICAgICAgICAgICAgICAgIHMuaW5kZXhPZignXHInKSA+PSAwOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldF9saXN0KExpc3QgbGlzdCkKLSAgICB7Ci0gICAgICAgIFNjaGVtYVR5cGUgaXRlbVR5cGUgPSBfc2NoZW1hVHlwZS5nZXRMaXN0SXRlbVR5cGUoKTsKLSAgICAgICAgWG1sU2ltcGxlTGlzdCB4TGlzdDsKLQotICAgICAgICBib29sZWFuIHB1c2hlZCA9IGZhbHNlOwotICAgICAgICBpZiAoaGFzX3N0b3JlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIE5hbWVzcGFjZUNvbnRleHQucHVzaChuZXcgTmFtZXNwYWNlQ29udGV4dChnZXRfc3RvcmUoKSkpOwotICAgICAgICAgICAgcHVzaGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFhtbEFueVNpbXBsZVR5cGVbXSBuZXd2YWwgPSBuZXcgWG1sQW55U2ltcGxlVHlwZVtsaXN0LnNpemUoKV07Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0IGVudHJ5ID0gbGlzdC5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKChlbnRyeSBpbnN0YW5jZW9mIFhtbE9iamVjdCkgJiYgcGVybWl0c19pbm5lcl9zcGFjZSgoWG1sT2JqZWN0KWxpc3QuZ2V0KGkpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdHJpbmdyZXAgPSBsaXN0LmdldChpKS50b1N0cmluZygpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY29udGFpbnNfd2hpdGVfc3BhY2Uoc3RyaW5ncmVwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBYbWxWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbmV3dmFsW2ldID0gaXRlbVR5cGUubmV3VmFsdWUoZW50cnkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgeExpc3QgPSBuZXcgWG1sU2ltcGxlTGlzdChBcnJheXMuYXNMaXN0KG5ld3ZhbCkpOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsbHkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHB1c2hlZCkKLSAgICAgICAgICAgICAgICBOYW1lc3BhY2VDb250ZXh0LnBvcCgpOwotICAgICAgICB9Ci0gICAgICAgIAotCi0gICAgICAgIGlmIChfdmFsaWRhdGVPblNldCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBjaGVjayBlbnVtZXJhdGlvbiArIG1pbi9tYXgvZXRjCi0gICAgICAgICAgICB2YWxpZGF0ZVZhbHVlKHhMaXN0LCBfc2NoZW1hVHlwZSwgX3Zvb3JWYyk7Ci0gICAgICAgIH0KLQotICAgICAgICBfdmFsdWUgPSB4TGlzdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgdmFsaWRhdGVWYWx1ZShYbWxTaW1wbGVMaXN0IGl0ZW1zLCBTY2hlbWFUeXBlIHNUeXBlLCBWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0KQotICAgIHsKLSAgICAgICAgWG1sT2JqZWN0W10gZW51bXZhbHMgPSBzVHlwZS5nZXRFbnVtZXJhdGlvblZhbHVlcygpOwotICAgICAgICBjaGVja0VudW06IGlmIChlbnVtdmFscyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVudW12YWxzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChlcXVhbF94bWxMaXN0cyhpdGVtcywgKChYbWxPYmplY3RCYXNlKWVudW12YWxzW2ldKS54bGlzdFZhbHVlKCkpKQotICAgICAgICAgICAgICAgICAgICBicmVhayBjaGVja0VudW07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250ZXh0LmludmFsaWQoIkxpc3QgKCIgKyBpdGVtcyArICIpIGlzIG5vdCBhIHZhbGlkIGVudW1lcmF0ZWQgdmFsdWUgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgWG1sT2JqZWN0IG87Ci0gICAgICAgIGludCBpOwotCi0gICAgICAgIGlmICgobyA9IHNUeXBlLmdldEZhY2V0KCBTY2hlbWFUeXBlLkZBQ0VUX0xFTkdUSCApKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoKGkgPSAoKFNpbXBsZVZhbHVlKW8pLmdldEludFZhbHVlKCkpICE9IGl0ZW1zLnNpemUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmludmFsaWQoCi0gICAgICAgICAgICAgICAgICAgICJMaXN0ICgiICsgaXRlbXMgKyAiKSBkb2VzIG5vdCBoYXZlICIgKyBpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIgaXRlbXMgcGVyIGxlbmd0aCBmYWNldCBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNUeXBlKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKG8gPSBzVHlwZS5nZXRGYWNldCggU2NoZW1hVHlwZS5GQUNFVF9NSU5fTEVOR1RIICkpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICgoaSA9ICgoU2ltcGxlVmFsdWUpbykuZ2V0SW50VmFsdWUoKSkgPiBpdGVtcy5zaXplKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5pbnZhbGlkKAotICAgICAgICAgICAgICAgICAgICAiTGlzdCAoIiArIGl0ZW1zICsgIikgaGFzIG9ubHkgIiArIGl0ZW1zLnNpemUoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAiIGl0ZW1zLCBmZXdlciB0aGFuIG1pbiBsZW5ndGggZmFjZXQgKCIgKyBpICsgIikgZm9yICIgKyBRTmFtZUhlbHBlci5yZWFkYWJsZShzVHlwZSkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICgobyA9IHNUeXBlLmdldEZhY2V0KCBTY2hlbWFUeXBlLkZBQ0VUX01BWF9MRU5HVEggKSkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKChpID0gKChTaW1wbGVWYWx1ZSlvKS5nZXRJbnRWYWx1ZSgpKSA8IGl0ZW1zLnNpemUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmludmFsaWQoCi0gICAgICAgICAgICAgICAgICAgICJMaXN0ICgiICsgaXRlbXMgKyAiKSBoYXMgIiArIGl0ZW1zLnNpemUoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAiIGl0ZW1zLCBtb3JlIHRoYW4gbWF4IGxlbmd0aCBmYWNldCAoIiArIGkgKyAiKSBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNUeXBlKSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gY29tcGFyYXRvcnMKLSAgICAvLyBwcm90ZWN0ZWQgaW50IGNvbXBhcmVfdG8oWG1sT2JqZWN0IGkpIC0gbm8gc29ydGluZyBvcmRlcjsgaW5oZXJpdCBmcm9tIGJhc2UKLQotICAgIHByb3RlY3RlZCBib29sZWFuIGVxdWFsX3RvKFhtbE9iamVjdCBvYmopCi0gICAgewotICAgICAgICByZXR1cm4gZXF1YWxfeG1sTGlzdHMoX3ZhbHVlLCAoKFhtbE9iamVjdEJhc2Upb2JqKS54bGlzdFZhbHVlKCkpOwotICAgIH0KLQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBlcXVhbF94bWxMaXN0cyhMaXN0IGEsIExpc3QgYikKLSAgICB7Ci0gICAgICAgIGlmIChhLnNpemUoKSAhPSBiLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhLnNpemUoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWEuZ2V0KGkpLmVxdWFscyhiLmdldChpKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBpbnQgdmFsdWVfaGFzaF9jb2RlKCkKLSAgICB7Ci0gICAgICAgIGlmIChfdmFsdWUgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIC8vIGhhc2ggY29kZSBwcm9iZXMgOSBkaXN0cmlidXRlZCB2YWx1ZXMsIHBsdXMgdGhlIGxhc3QKLSAgICAgICAgaW50IGhhc2ggPSBfdmFsdWUuc2l6ZSgpOwotICAgICAgICBpbnQgaW5jciA9IF92YWx1ZS5zaXplKCkgLyA5OwotICAgICAgICBpZiAoaW5jciA8IDEpCi0gICAgICAgICAgICBpbmNyID0gMTsKLQotICAgICAgICBpbnQgaTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IF92YWx1ZS5zaXplKCk7IGkgKz0gaW5jcikKLSAgICAgICAgewotICAgICAgICAgICAgaGFzaCAqPSAxOTsKLSAgICAgICAgICAgIGhhc2ggKz0gX3ZhbHVlLmdldChpKS5oYXNoQ29kZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGkgPCBfdmFsdWUuc2l6ZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBoYXNoICo9IDE5OwotICAgICAgICAgICAgaGFzaCArPSBfdmFsdWUuZ2V0KGkpLmhhc2hDb2RlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gaGFzaDsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZV9zaW1wbGV2YWwoU3RyaW5nIGxleGljYWwsIFZhbGlkYXRpb25Db250ZXh0IGN0eCkKLSAgICB7Ci0gICAgICAgIHZhbGlkYXRlVmFsdWUoKFhtbFNpbXBsZUxpc3QpeGxpc3RWYWx1ZSgpLCBzY2hlbWFUeXBlKCksIGN0eCk7Ci0gICAgfQotICAgIAotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sTG9uZ0ltcGwuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbExvbmdJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiZDgzNWYuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sTG9uZ0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sTG9uZzsKLQotCi1wdWJsaWMgY2xhc3MgWG1sTG9uZ0ltcGwgZXh0ZW5kcyBKYXZhTG9uZ0hvbGRlciBpbXBsZW1lbnRzIFhtbExvbmcKLXsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbExvbmdSZXN0cmljdGlvbi5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sTG9uZ1Jlc3RyaWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlM2IyY2EuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sTG9uZ1Jlc3RyaWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxMb25nOwotCi1wdWJsaWMgY2xhc3MgWG1sTG9uZ1Jlc3RyaWN0aW9uIGV4dGVuZHMgSmF2YUxvbmdIb2xkZXJFeCBpbXBsZW1lbnRzIFhtbExvbmcKLXsKLSAgICBwdWJsaWMgWG1sTG9uZ1Jlc3RyaWN0aW9uKFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IHN1cGVyKHR5cGUsIGNvbXBsZXgpOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxOQ05hbWVJbXBsLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxOQ05hbWVJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MDM1ZjQuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sTkNOYW1lSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxOQ05hbWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uVmFsaWRhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5YTUxDaGFyOwotCi1wdWJsaWMgY2xhc3MgWG1sTkNOYW1lSW1wbCBleHRlbmRzIEphdmFTdHJpbmdIb2xkZXJFeCBpbXBsZW1lbnRzIFhtbE5DTmFtZQotewotICAgIHB1YmxpYyBYbWxOQ05hbWVJbXBsKCkKLSAgICAgICAgeyBzdXBlcihYbWxOQ05hbWUudHlwZSwgZmFsc2UpOyB9Ci0gICAgcHVibGljIFhtbE5DTmFtZUltcGwoU2NoZW1hVHlwZSB0eXBlLCBib29sZWFuIGNvbXBsZXgpCi0gICAgICAgIHsgc3VwZXIodHlwZSwgY29tcGxleCk7IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB2YWxpZGF0ZUxleGljYWwoU3RyaW5nIHYsIFZhbGlkYXRpb25Db250ZXh0IGNvbnRleHQpCi0gICAgewotICAgICAgICBpZiAoICFYTUxDaGFyLmlzVmFsaWROQ05hbWUodikgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LmludmFsaWQoIlZhbHVlICciICsgdiArICInIGl0J3Mgbm90IGEgdmFsaWQgTkNOYW1lLiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbE5hbWVJbXBsLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxOYW1lSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmE5ODhlLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbE5hbWVJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxOYW1lOwotCi0KLXB1YmxpYyBjbGFzcyBYbWxOYW1lSW1wbCBleHRlbmRzIEphdmFTdHJpbmdIb2xkZXJFeCBpbXBsZW1lbnRzIFhtbE5hbWUKLXsKLSAgICBwdWJsaWMgWG1sTmFtZUltcGwoKQotICAgICAgICB7IHN1cGVyKFhtbE5hbWUudHlwZSwgZmFsc2UpOyB9Ci0gICAgcHVibGljIFhtbE5hbWVJbXBsKFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IHN1cGVyKHR5cGUsIGNvbXBsZXgpOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxOZWdhdGl2ZUludGVnZXJJbXBsLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxOZWdhdGl2ZUludGVnZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjN2NhNWEuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sTmVnYXRpdmVJbnRlZ2VySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sTmVnYXRpdmVJbnRlZ2VyOwotCi0KLXB1YmxpYyBjbGFzcyBYbWxOZWdhdGl2ZUludGVnZXJJbXBsIGV4dGVuZHMgSmF2YUludGVnZXJIb2xkZXJFeCBpbXBsZW1lbnRzIFhtbE5lZ2F0aXZlSW50ZWdlcgotewotICAgIHB1YmxpYyBYbWxOZWdhdGl2ZUludGVnZXJJbXBsKCkKLSAgICAgICAgeyBzdXBlcihYbWxOZWdhdGl2ZUludGVnZXIudHlwZSwgZmFsc2UpOyB9Ci0gICAgcHVibGljIFhtbE5lZ2F0aXZlSW50ZWdlckltcGwoU2NoZW1hVHlwZSB0eXBlLCBib29sZWFuIGNvbXBsZXgpCi0gICAgICAgIHsgc3VwZXIodHlwZSwgY29tcGxleCk7IH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbE5tVG9rZW5JbXBsLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxObVRva2VuSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGQ1MTNlLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbE5tVG9rZW5JbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE5NVE9LRU47Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uVmFsaWRhdGlvbkNvbnRleHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5YTUxDaGFyOwotCi0KLXB1YmxpYyBjbGFzcyBYbWxObVRva2VuSW1wbCBleHRlbmRzIEphdmFTdHJpbmdIb2xkZXJFeCBpbXBsZW1lbnRzIFhtbE5NVE9LRU4KLXsKLSAgICBwdWJsaWMgWG1sTm1Ub2tlbkltcGwoKQotICAgICAgICB7IHN1cGVyKFhtbE5NVE9LRU4udHlwZSwgZmFsc2UpOyB9Ci0gICAgcHVibGljIFhtbE5tVG9rZW5JbXBsKFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IHN1cGVyKHR5cGUsIGNvbXBsZXgpOyB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgdmFsaWRhdGVMZXhpY2FsKFN0cmluZyB2LCBWYWxpZGF0aW9uQ29udGV4dCBjb250ZXh0KQotICAgIHsKLSAgICAgICAgaWYgKCAhWE1MQ2hhci5pc1ZhbGlkTm10b2tlbih2KSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQuaW52YWxpZCgiVmFsdWUgJyIgKyB2ICsgIicgaXQncyBub3QgYSB2YWxpZCBOTVRPS0VOLiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sTm1Ub2tlbnNJbXBsLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxObVRva2Vuc0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJhMzAwOC4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxObVRva2Vuc0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE5NVE9LRU5TOwotCi0KLXB1YmxpYyBjbGFzcyBYbWxObVRva2Vuc0ltcGwgZXh0ZW5kcyBYbWxMaXN0SW1wbCBpbXBsZW1lbnRzIFhtbE5NVE9LRU5TCi17Ci0gICAgcHVibGljIFhtbE5tVG9rZW5zSW1wbCgpCi0gICAgICAgIHsgc3VwZXIoWG1sTk1UT0tFTlMudHlwZSwgZmFsc2UpO30KLSAgICBwdWJsaWMgWG1sTm1Ub2tlbnNJbXBsKFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IHN1cGVyKHR5cGUsIGNvbXBsZXgpOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxOb25OZWdhdGl2ZUludGVnZXJJbXBsLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxOb25OZWdhdGl2ZUludGVnZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2OWVmZGYuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxOb25OZWdhdGl2ZUludGVnZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotCi0KLXB1YmxpYyBjbGFzcyBYbWxOb25OZWdhdGl2ZUludGVnZXJJbXBsIGV4dGVuZHMgSmF2YUludGVnZXJIb2xkZXJFeCBpbXBsZW1lbnRzIFhtbE5vbk5lZ2F0aXZlSW50ZWdlcgotewotICAgIHB1YmxpYyBYbWxOb25OZWdhdGl2ZUludGVnZXJJbXBsKCkKLSAgICAgICAgeyBzdXBlcihYbWxOb25OZWdhdGl2ZUludGVnZXIudHlwZSwgZmFsc2UpOyB9Ci0gICAgcHVibGljIFhtbE5vbk5lZ2F0aXZlSW50ZWdlckltcGwoU2NoZW1hVHlwZSB0eXBlLCBib29sZWFuIGNvbXBsZXgpCi0gICAgICAgIHsgc3VwZXIodHlwZSwgY29tcGxleCk7IH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbE5vblBvc2l0aXZlSW50ZWdlckltcGwuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbE5vblBvc2l0aXZlSW50ZWdlckltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWFiMWRhNi4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxOb25Qb3NpdGl2ZUludGVnZXJJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxOb25Qb3NpdGl2ZUludGVnZXI7Ci0KLQotcHVibGljIGNsYXNzIFhtbE5vblBvc2l0aXZlSW50ZWdlckltcGwgZXh0ZW5kcyBKYXZhSW50ZWdlckhvbGRlckV4IGltcGxlbWVudHMgWG1sTm9uUG9zaXRpdmVJbnRlZ2VyCi17Ci0gICAgcHVibGljIFhtbE5vblBvc2l0aXZlSW50ZWdlckltcGwoKQotICAgICAgICB7IHN1cGVyKFhtbE5vblBvc2l0aXZlSW50ZWdlci50eXBlLCBmYWxzZSk7IH0KLSAgICBwdWJsaWMgWG1sTm9uUG9zaXRpdmVJbnRlZ2VySW1wbChTY2hlbWFUeXBlIHR5cGUsIGJvb2xlYW4gY29tcGxleCkKLSAgICAgICAgeyBzdXBlcih0eXBlLCBjb21wbGV4KTsgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sTm9ybWFsaXplZFN0cmluZ0ltcGwuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbE5vcm1hbGl6ZWRTdHJpbmdJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0YTYzYTMuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sTm9ybWFsaXplZFN0cmluZ0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE5vcm1hbGl6ZWRTdHJpbmc7Ci0KLXB1YmxpYyBjbGFzcyBYbWxOb3JtYWxpemVkU3RyaW5nSW1wbCBleHRlbmRzIEphdmFTdHJpbmdIb2xkZXJFeCBpbXBsZW1lbnRzIFhtbE5vcm1hbGl6ZWRTdHJpbmcKLXsKLSAgICBwdWJsaWMgWG1sTm9ybWFsaXplZFN0cmluZ0ltcGwoKQotICAgICAgICB7IHN1cGVyKFhtbE5vcm1hbGl6ZWRTdHJpbmcudHlwZSwgZmFsc2UpOyB9Ci0gICAgcHVibGljIFhtbE5vcm1hbGl6ZWRTdHJpbmdJbXBsKFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IHN1cGVyKHR5cGUsIGNvbXBsZXgpOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxOb3RhdGlvbkltcGwuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbE5vdGF0aW9uSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmRlOTBmLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbE5vdGF0aW9uSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxOT1RBVElPTjsKLQotcHVibGljIGNsYXNzIFhtbE5vdGF0aW9uSW1wbCBleHRlbmRzIEphdmFOb3RhdGlvbkhvbGRlciBpbXBsZW1lbnRzIFhtbE5PVEFUSU9OCi17Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxOb3RhdGlvblJlc3RyaWN0aW9uLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxOb3RhdGlvblJlc3RyaWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0NGVmNDQuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sTm90YXRpb25SZXN0cmljdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxOT1RBVElPTjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci0KLXB1YmxpYyBjbGFzcyBYbWxOb3RhdGlvblJlc3RyaWN0aW9uIGV4dGVuZHMgSmF2YU5vdGF0aW9uSG9sZGVyRXggaW1wbGVtZW50cyBYbWxOT1RBVElPTgotewotICAgIHB1YmxpYyBYbWxOb3RhdGlvblJlc3RyaWN0aW9uKFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IHN1cGVyKHR5cGUsIGNvbXBsZXgpOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxPYmplY3RCYXNlLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxPYmplY3RCYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmOGViZGEuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sT2JqZWN0QmFzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjY4NyArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcwotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOwotCi1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbTsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwotaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5PYmplY3RJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk9iamVjdE91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk9iamVjdFN0cmVhbUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRGF0YUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkFycmF5OwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlhtbFdoaXRlc3BhY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5WYWxpZGF0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLkdsb2JhbExvY2s7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5YbWxFcnJvcldhdGNoZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5RTmFtZUhlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hLlNjaGVtYVR5cGVJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zY2hlbWEuU2NoZW1hVHlwZVZpc2l0b3JJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWxpZGF0b3IuVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuWG1sVmFsdWVOb3ROaWxsYWJsZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUF0dHJpYnV0ZU1vZGVsOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxEb2N1bWVudFByb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TaW1wbGVWYWx1ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFGaWVsZDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVByb3BlcnR5OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sUnVudGltZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlFOYW1lU2V0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb25TcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU3RyaW5nRW51bUFic3RyYWN0QmFzZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJlYW5zOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXJyb3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFMb2NhbEF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLkZpbHRlclhtbE9iamVjdDsKLQotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLWltcG9ydCBvcmcueG1sLnNheC5Db250ZW50SGFuZGxlcjsKLWltcG9ydCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgWG1sT2JqZWN0QmFzZSBpbXBsZW1lbnRzIFR5cGVTdG9yZVVzZXIsIFNlcmlhbGl6YWJsZSwgWG1sT2JqZWN0LCBTaW1wbGVWYWx1ZQotewotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgc2hvcnQgTUFKT1JfVkVSU0lPTl9OVU1CRVIgPSAoc2hvcnQpIDE7IC8vIGZvciBzZXJpYWxpemF0aW9uCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBzaG9ydCBNSU5PUl9WRVJTSU9OX05VTUJFUiA9IChzaG9ydCkgMTsgLy8gZm9yIHNlcmlhbGl6YXRpb24KLQotICAgIHB1YmxpYyBmaW5hbCBPYmplY3QgbW9uaXRvcigpCi0gICAgewotICAgICAgICBpZiAoaGFzX3N0b3JlKCkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0X3N0b3JlKCkuZ2V0X3Jvb3Rfb2JqZWN0KCk7Ci0gICAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBYbWxPYmplY3RCYXNlIHVuZGVybHlpbmcoWG1sT2JqZWN0IG9iaikKLSAgICB7Ci0gICAgICAgIGlmIChvYmogPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgWG1sT2JqZWN0QmFzZSkKLSAgICAgICAgICAgIHJldHVybiAoWG1sT2JqZWN0QmFzZSlvYmo7Ci0gICAgICAgIHdoaWxlIChvYmogaW5zdGFuY2VvZiBGaWx0ZXJYbWxPYmplY3QpCi0gICAgICAgICAgICBvYmogPSAoKEZpbHRlclhtbE9iamVjdClvYmopLnVuZGVybHlpbmdYbWxPYmplY3QoKTsKLSAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFhtbE9iamVjdEJhc2UpCi0gICAgICAgICAgICByZXR1cm4gKFhtbE9iamVjdEJhc2Upb2JqOwotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJOb24tbmF0aXZlIGltcGxlbWVudGF0aW9ucyBvZiBYbWxPYmplY3Qgc2hvdWxkIGV4dGVuZCBGaWx0ZXJYbWxPYmplY3QiKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgWG1sT2JqZWN0IGNvcHkoKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGltbXV0YWJsZSBvYmplY3RzIGRvbid0IGdldCBjb3BpZWQuIFRoZXkncmUgaW1tdXRhYmxlCi0gICAgICAgICAgICBpZiAoaXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKLQotICAgICAgICAgICAgY2hlY2tfb3JwaGFuZWQoKTsKLQotICAgICAgICAgICAgLy8gY29weSB0aGUgdHlwZQotICAgICAgICAgICAgWG1sT2JqZWN0IHJlc3VsdCA9IGdldF9zdG9yZSgpLmdldF9zY2hlbWF0eXBlbG9hZGVyKCkubmV3SW5zdGFuY2Uoc2NoZW1hVHlwZSgpLCBudWxsKTsKLSAgICAgICAgICAgIAotCi0gICAgICAgICAgICAvLyBjb3B5IHRoZSBkYXRhCi0gICAgICAgICAgICBYbWxPYmplY3RCYXNlIHRhcmdldCA9IHVuZGVybHlpbmcocmVzdWx0KTsKLSAgICAgICAgICAgIHRhcmdldC5nZXRfc3RvcmUoKS5jb3B5X2NvbnRlbnRzX2Zyb20oZ2V0X3N0b3JlKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFhtbERvY3VtZW50UHJvcGVydGllcyBkb2N1bWVudFByb3BlcnRpZXMoKQotICAgICAgICB7IFhtbEN1cnNvciBjdXIgPSBuZXdDdXJzb3JGb3JjZSgpOyB0cnkgeyByZXR1cm4gY3VyLmRvY3VtZW50UHJvcGVydGllcygpOyB9IGZpbmFsbHkgeyBjdXIuZGlzcG9zZSgpOyB9IH0KLQotICAgIHB1YmxpYyBYTUxJbnB1dFN0cmVhbSBuZXdYTUxJbnB1dFN0cmVhbSgpCi0gICAgICAgIHsgcmV0dXJuIG5ld1hNTElucHV0U3RyZWFtKG51bGwpOyB9Ci0KLSAgICBwdWJsaWMgWE1MSW5wdXRTdHJlYW0gbmV3WE1MSW5wdXRTdHJlYW0oWG1sT3B0aW9ucyBvcHRpb25zKQotICAgICAgICB7IFhtbEN1cnNvciBjdXIgPSBuZXdDdXJzb3JGb3JjZSgpOyB0cnkgeyByZXR1cm4gY3VyLm5ld1hNTElucHV0U3RyZWFtKG1ha2VJbm5lck9wdGlvbnMob3B0aW9ucykpOyB9IGZpbmFsbHkgeyBjdXIuZGlzcG9zZSgpOyB9IH0KLQotICAgIHB1YmxpYyBYTUxTdHJlYW1SZWFkZXIgbmV3WE1MU3RyZWFtUmVhZGVyKCkKLSAgICAgICAgeyByZXR1cm4gbmV3WE1MU3RyZWFtUmVhZGVyKG51bGwpOyB9Ci0gICAgCi0gICAgcHVibGljIFhNTFN0cmVhbVJlYWRlciBuZXdYTUxTdHJlYW1SZWFkZXIoWG1sT3B0aW9ucyBvcHRpb25zKQotICAgICAgICB7IFhtbEN1cnNvciBjdXIgPSBuZXdDdXJzb3JGb3JjZSgpOyB0cnkgeyByZXR1cm4gY3VyLm5ld1hNTFN0cmVhbVJlYWRlcihtYWtlSW5uZXJPcHRpb25zKG9wdGlvbnMpKTsgfSBmaW5hbGx5IHsgY3VyLmRpc3Bvc2UoKTsgfSB9Ci0KLSAgICBwdWJsaWMgSW5wdXRTdHJlYW0gbmV3SW5wdXRTdHJlYW0oKQotICAgICAgICB7IHJldHVybiBuZXdJbnB1dFN0cmVhbShudWxsKTsgfQotCi0gICAgcHVibGljIElucHV0U3RyZWFtIG5ld0lucHV0U3RyZWFtKFhtbE9wdGlvbnMgb3B0aW9ucykKLSAgICAgICAgeyBYbWxDdXJzb3IgY3VyID0gbmV3Q3Vyc29yRm9yY2UoKTsgdHJ5IHsgcmV0dXJuIGN1ci5uZXdJbnB1dFN0cmVhbShtYWtlSW5uZXJPcHRpb25zKG9wdGlvbnMpKTsgfSBmaW5hbGx5IHsgY3VyLmRpc3Bvc2UoKTsgfSB9Ci0KLSAgICBwdWJsaWMgUmVhZGVyIG5ld1JlYWRlcigpCi0gICAgICAgIHsgcmV0dXJuIG5ld1JlYWRlcihudWxsKTsgfQotCi0gICAgcHVibGljIFJlYWRlciBuZXdSZWFkZXIoWG1sT3B0aW9ucyBvcHRpb25zKQotICAgICAgICB7IFhtbEN1cnNvciBjdXIgPSBuZXdDdXJzb3JGb3JjZSgpOyB0cnkgeyByZXR1cm4gY3VyLm5ld1JlYWRlcihtYWtlSW5uZXJPcHRpb25zKG9wdGlvbnMpKTsgfSBmaW5hbGx5IHsgY3VyLmRpc3Bvc2UoKTsgfSB9Ci0KLSAgICBwdWJsaWMgTm9kZSBuZXdEb21Ob2RlKCkKLSAgICAgICAgeyByZXR1cm4gbmV3RG9tTm9kZShudWxsKTsgfQotCi0gICAgcHVibGljIE5vZGUgbmV3RG9tTm9kZShYbWxPcHRpb25zIG9wdGlvbnMpCi0gICAgICAgIHsgWG1sQ3Vyc29yIGN1ciA9IG5ld0N1cnNvckZvcmNlKCk7IHRyeSB7IHJldHVybiBjdXIubmV3RG9tTm9kZShtYWtlSW5uZXJPcHRpb25zKG9wdGlvbnMpKTsgfSBmaW5hbGx5IHsgY3VyLmRpc3Bvc2UoKTsgfSB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzYXZlKENvbnRlbnRIYW5kbGVyIGNoLCBMZXhpY2FsSGFuZGxlciBsaCwgWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gICAgICAgIHsgWG1sQ3Vyc29yIGN1ciA9IG5ld0N1cnNvckZvcmNlKCk7IHRyeSB7IGN1ci5zYXZlKGNoLCBsaCwgbWFrZUlubmVyT3B0aW9ucyhvcHRpb25zKSk7IH0gZmluYWxseSB7IGN1ci5kaXNwb3NlKCk7IH0gfQotCi0gICAgcHVibGljIHZvaWQgc2F2ZShGaWxlIGZpbGUsIFhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgICAgIHsgWG1sQ3Vyc29yIGN1ciA9IG5ld0N1cnNvckZvcmNlKCk7IHRyeSB7IGN1ci5zYXZlKGZpbGUsIG1ha2VJbm5lck9wdGlvbnMob3B0aW9ucykpOyB9IGZpbmFsbHkgeyBjdXIuZGlzcG9zZSgpOyB9IH0KLQotICAgIHB1YmxpYyB2b2lkIHNhdmUoT3V0cHV0U3RyZWFtIG9zLCBYbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgICAgICB7IFhtbEN1cnNvciBjdXIgPSBuZXdDdXJzb3JGb3JjZSgpOyB0cnkgeyBjdXIuc2F2ZShvcywgbWFrZUlubmVyT3B0aW9ucyhvcHRpb25zKSk7IH0gZmluYWxseSB7IGN1ci5kaXNwb3NlKCk7IH0gfQotCi0gICAgcHVibGljIHZvaWQgc2F2ZShXcml0ZXIgdywgWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICAgICAgeyBYbWxDdXJzb3IgY3VyID0gbmV3Q3Vyc29yRm9yY2UoKTsgdHJ5IHsgY3VyLnNhdmUodywgbWFrZUlubmVyT3B0aW9ucyhvcHRpb25zKSk7IH0gZmluYWxseSB7IGN1ci5kaXNwb3NlKCk7IH0gfQotCi0gICAgcHVibGljIHZvaWQgc2F2ZShDb250ZW50SGFuZGxlciBjaCwgTGV4aWNhbEhhbmRsZXIgbGgpIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICAgICAgeyBzYXZlKCBjaCwgbGgsIG51bGwgKTsgfQotCi0gICAgcHVibGljIHZvaWQgc2F2ZShGaWxlIGZpbGUpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgICAgICB7IHNhdmUoIGZpbGUsIG51bGwgKTsgfQotCi0gICAgcHVibGljIHZvaWQgc2F2ZShPdXRwdXRTdHJlYW0gb3MpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgICAgICB7IHNhdmUoIG9zLCBudWxsICk7IH0KLQotICAgIHB1YmxpYyB2b2lkIHNhdmUoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgICAgICB7IHNhdmUoIHcsIG51bGwgKTsgfQotCi0gICAgcHVibGljIFhtbEN1cnNvciBuZXdDdXJzb3JGb3JjZSgpCi0gICAgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1vbml0b3IoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVuc3VyZVN0b3JlKCkubmV3Q3Vyc29yKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIFhtbE9iamVjdCBlbnN1cmVTdG9yZSgpCi0gICAgewotICAgICAgICBpZiAoKF9mbGFncyAmIEZMQUdfU1RPUkUpICE9IDApCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKLQotICAgICAgICBjaGVja19kYXRlZCgpOwotCi0gICAgICAgIFN0cmluZyB2YWx1ZSA9Ci0gICAgICAgICAgICAoX2ZsYWdzICYgRkxBR19OSUwpICE9IDAKLSAgICAgICAgICAgICAgICA/ICIiCi0gICAgICAgICAgICAgICAgOiBjb21wdXRlX3RleHQoIGhhc19zdG9yZSgpID8gZ2V0X3N0b3JlKCkgOiBudWxsICk7Ci0KLSAgICAgICAgWG1sT3B0aW9ucyBvcHRpb25zID0gbmV3IFhtbE9wdGlvbnMoKS5zZXREb2N1bWVudFR5cGUoc2NoZW1hVHlwZSgpKTsKLQotICAgICAgICBYbWxPYmplY3QgeCA9IFhtbE9iamVjdC5GYWN0b3J5Lm5ld0luc3RhbmNlKCBvcHRpb25zICk7Ci0KLSAgICAgICAgWG1sQ3Vyc29yIGMgPSB4Lm5ld0N1cnNvcigpOwotICAgICAgICBjLnRvTmV4dFRva2VuKCk7Ci0gICAgICAgIGMuaW5zZXJ0Q2hhcnMoIHZhbHVlICk7Ci0KLSAgICAgICAgcmV0dXJuIHg7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgWG1sT3B0aW9ucyBtYWtlSW5uZXJPcHRpb25zKFhtbE9wdGlvbnMgb3B0aW9ucykKLSAgICB7Ci0gICAgICAgIFhtbE9wdGlvbnMgaW5uZXJPcHRpb25zID0gbmV3IFhtbE9wdGlvbnMoIG9wdGlvbnMgKTsKLSAgICAgICAgaW5uZXJPcHRpb25zLnB1dCggWG1sT3B0aW9ucy5TQVZFX0lOTkVSICk7Ci0gICAgICAgIHJldHVybiBpbm5lck9wdGlvbnM7Ci0gICAgfQotCi0gICAgcHVibGljIFhtbEN1cnNvciBuZXdDdXJzb3IoKQotICAgIHsKLSAgICAgICAgaWYgKChfZmxhZ3MgJiBGTEFHX1NUT1JFKSA9PSAwKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiWE1MIFZhbHVlIE9iamVjdHMgY2Fubm90IGNyZWF0ZSBjdXJzb3JzIik7Ci0KLSAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrX29ycGhhbmVkKCk7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0X3N0b3JlKCkubmV3X2N1cnNvcigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGFic3RyYWN0IFNjaGVtYVR5cGUgc2NoZW1hVHlwZSgpOwotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgaW5zdGFuY2VUeXBlKCkKLSAgICAgICAgeyBzeW5jaHJvbml6ZWQgKG1vbml0b3IoKSkgeyByZXR1cm4gaXNOaWwoKSA/IG51bGwgOiBzY2hlbWFUeXBlKCk7IH0gfQotCi0gICAgcHJpdmF0ZSBTY2hlbWFGaWVsZCBzY2hlbWFGaWVsZCgpIHsKLSAgICAgICAgU2NoZW1hVHlwZSBzdCA9IHNjaGVtYVR5cGUoKTsKLSAgICAgICAgU2NoZW1hRmllbGQgZmllbGQ7Ci0KLSAgICAgICAgLy8gRmlyc3QgY2hlY2sgaWYgdGhpcyBmaWVsZCBoYXMgYW4gYW5vbnltb3VzIHR5cGUKLSAgICAgICAgZmllbGQgPSBzdC5nZXRDb250YWluZXJGaWVsZCgpOwotCi0gICAgICAgIGlmIChmaWVsZCA9PSBudWxsKQotICAgICAgICAgICAgZmllbGQgPSBnZXRfc3RvcmUoKS5nZXRfc2NoZW1hX2ZpZWxkKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZpZWxkOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFVzZSBfdm9vclZjIHdoZW4geW91IHdhbnQgdG8gdGhyb3cgYSBWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb24gd2hlbgotICAgICAqIHZhbGlkYXRpbmcgYSBzaW1wbGUgdHlwZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBWYWx1ZU91dE9mUmFuZ2VWYWxpZGF0aW9uQ29udGV4dCBpbXBsZW1lbnRzIFZhbGlkYXRpb25Db250ZXh0Ci0gICAgewotICAgICAgICBwdWJsaWMgdm9pZCBpbnZhbGlkKFN0cmluZyBtZXNzYWdlKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uKCBtZXNzYWdlICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIHRvIHN1cHBseSB2YWxpZGF0aW9uIGNvbnRleHQgZm9yIHRoZSB2YWxpZGF0ZV92YWx1ZSBtZXRob2RzCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgSW1tdXRhYmxlVmFsdWVWYWxpZGF0aW9uQ29udGV4dCBpbXBsZW1lbnRzIFZhbGlkYXRpb25Db250ZXh0Ci0gICAgewotICAgICAgICBwcml2YXRlIFhtbE9iamVjdCBfbG9jOwotICAgICAgICBwcml2YXRlIENvbGxlY3Rpb24gX2NvbGw7Ci0gICAgICAgIEltbXV0YWJsZVZhbHVlVmFsaWRhdGlvbkNvbnRleHQoQ29sbGVjdGlvbiBjb2xsLCBYbWxPYmplY3QgbG9jKQotICAgICAgICB7Ci0gICAgICAgICAgICBfY29sbCA9IGNvbGw7Ci0gICAgICAgICAgICBfbG9jID0gbG9jOwotICAgICAgICB9Ci0gICAgICAgIHB1YmxpYyB2b2lkIGludmFsaWQoU3RyaW5nIG1lc3NhZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgX2NvbGwuYWRkKFhtbEVycm9yLmZvck9iamVjdChtZXNzYWdlLCBfbG9jKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFZhbGlkYXRpb25Db250ZXh0IF92b29yVmMgPSBuZXcgVmFsdWVPdXRPZlJhbmdlVmFsaWRhdGlvbkNvbnRleHQoKTsKLQotICAgIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlKCkKLSAgICAgICAgeyByZXR1cm4gdmFsaWRhdGUobnVsbCk7IH0KLQotICAgIHB1YmxpYyBib29sZWFuIHZhbGlkYXRlKFhtbE9wdGlvbnMgb3B0aW9ucykKLSAgICB7Ci0gICAgICAgIGlmICgoX2ZsYWdzICYgRkxBR19TVE9SRSkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKChfZmxhZ3MgJiBGTEFHX0lNTVVUQUJMRSkgIT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVfaW1tdXRhYmxlKG9wdGlvbnMpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAiWE1MIG9iamVjdHMgd2l0aCBubyB1bmRlcmx5aW5nIHN0b3JlIGNhbm5vdCBiZSB2YWxpZGF0ZWQiKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN5bmNocm9uaXplZCAobW9uaXRvcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoKF9mbGFncyAmIEZMQUdfT1JQSEFORUQpICE9IDApCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFZhbHVlRGlzY29ubmVjdGVkRXhjZXB0aW9uKCk7Ci0KLSAgICAgICAgICAgIFNjaGVtYUZpZWxkIGZpZWxkID0gc2NoZW1hRmllbGQoKTsKLSAgICAgICAgICAgIFNjaGVtYVR5cGUgdHlwZSA9IHNjaGVtYVR5cGUoKTsKLQotICAgICAgICAgICAgVHlwZVN0b3JlIHR5cGVTdG9yZSA9IGdldF9zdG9yZSgpOwotCi0gICAgICAgICAgICBWYWxpZGF0b3IgdmFsaWRhdG9yID0KLSAgICAgICAgICAgICAgICBuZXcgVmFsaWRhdG9yKAotICAgICAgICAgICAgICAgICAgICB0eXBlLCBmaWVsZCwgdHlwZVN0b3JlLmdldF9zY2hlbWF0eXBlbG9hZGVyKCksIG9wdGlvbnMsIG51bGwpOwotCi0gICAgICAgICAgICB0eXBlU3RvcmUudmFsaWRhdGUoIHZhbGlkYXRvciApOwotCi0gICAgICAgICAgICByZXR1cm4gdmFsaWRhdG9yLmlzVmFsaWQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiB2YWxpZGF0ZV9pbW11dGFibGUoWG1sT3B0aW9ucyBvcHRpb25zKQotICAgIHsKLSAgICAgICAgQ29sbGVjdGlvbiBlcnJvckxpc3RlbmVyID0gb3B0aW9ucyA9PSBudWxsID8gbnVsbCA6IChDb2xsZWN0aW9uKW9wdGlvbnMuZ2V0KFhtbE9wdGlvbnMuRVJST1JfTElTVEVORVIpOwotICAgICAgICBYbWxFcnJvcldhdGNoZXIgd2F0Y2hlciA9IG5ldyBYbWxFcnJvcldhdGNoZXIoZXJyb3JMaXN0ZW5lcik7Ci0gICAgICAgIGlmICghc2NoZW1hVHlwZSgpLmlzU2ltcGxlVHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBjYW5ub3QgaGF2ZSBhbnkgcmVxdWlyZWQgYXR0cmlidXRlcyBvciBlbGVtZW50cwotICAgICAgICAgICAgU2NoZW1hUHJvcGVydHlbXSBwcm9wZXJ0aWVzID0gc2NoZW1hVHlwZSgpLmdldFByb3BlcnRpZXMoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXS5nZXRNaW5PY2N1cnMoKS5zaWdudW0oKSA+IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXS5pc0F0dHJpYnV0ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgd2F0Y2hlci5hZGQoWG1sRXJyb3IuZm9yT2JqZWN0KCJNaXNzaW5nIHJlcXVpcmVkIGF0dHJpYnV0ZSAiICsgUU5hbWVIZWxwZXIucHJldHR5KHByb3BlcnRpZXNbaV0uZ2V0TmFtZSgpKSwgdGhpcykpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICB3YXRjaGVyLmFkZChYbWxFcnJvci5mb3JPYmplY3QoIk1pc3NpbmcgcmVxdWlyZWQgZWxlbWVudCAiICsgUU5hbWVIZWxwZXIucHJldHR5KHByb3BlcnRpZXNbaV0uZ2V0TmFtZSgpKSwgdGhpcykpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHNjaGVtYVR5cGUoKS5nZXRDb250ZW50VHlwZSgpICE9IFNjaGVtYVR5cGUuU0lNUExFX0NPTlRFTlQpCi0gICAgICAgICAgICAgICAgcmV0dXJuICF3YXRjaGVyLmhhc0Vycm9yKCk7IC8vIGRvbid0IHZhbGlkYXRlIG5vbi1zaW1wbGUtY29udGVudAotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIHRleHQgPSAoU3RyaW5nKV90ZXh0c291cmNlOwotICAgICAgICBpZiAodGV4dCA9PSBudWxsKQotICAgICAgICAgICAgdGV4dCA9ICIiOwotICAgICAgICB2YWxpZGF0ZV9zaW1wbGV2YWwodGV4dCwgbmV3IEltbXV0YWJsZVZhbHVlVmFsaWRhdGlvbkNvbnRleHQod2F0Y2hlciwgdGhpcykpOwotICAgICAgICByZXR1cm4gIXdhdGNoZXIuaGFzRXJyb3IoKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZV9zaW1wbGV2YWwoU3RyaW5nIGxleGljYWwsIFZhbGlkYXRpb25Db250ZXh0IGN0eCkKLSAgICB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBYbWxPYmplY3RbXSBfdHlwZWRBcnJheShYbWxPYmplY3RbXSBpbnB1dCkKLSAgICB7Ci0gICAgICAgIGlmIChpbnB1dC5sZW5ndGggPT0gMCkKLSAgICAgICAgICAgIHJldHVybiBpbnB1dDsKLSAgICAgICAgU2NoZW1hVHlwZSBjb21tb25UeXBlID0gaW5wdXRbMF0uc2NoZW1hVHlwZSgpOwotICAgICAgICBpZiAoY29tbW9uVHlwZS5lcXVhbHMoWG1sT2JqZWN0LnR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIGlucHV0OwotICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb21tb25UeXBlID0gY29tbW9uVHlwZS5nZXRDb21tb25CYXNlVHlwZShpbnB1dFtpXS5zY2hlbWFUeXBlKCkpOwotICAgICAgICAgICAgaWYgKGNvbW1vblR5cGUuZXF1YWxzKFhtbE9iamVjdC50eXBlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQ7Ci0gICAgICAgIH0KLSAgICAgICAgQ2xhc3MgZGVzaXJlZENsYXNzID0gY29tbW9uVHlwZS5nZXRKYXZhQ2xhc3MoKTsKLSAgICAgICAgd2hpbGUgKGRlc2lyZWRDbGFzcyA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb21tb25UeXBlID0gY29tbW9uVHlwZS5nZXRCYXNlVHlwZSgpOwotICAgICAgICAgICAgaWYgKFhtbE9iamVjdC50eXBlLmVxdWFscyhjb21tb25UeXBlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQ7Ci0gICAgICAgICAgICBkZXNpcmVkQ2xhc3MgPSBjb21tb25UeXBlLmdldEphdmFDbGFzcygpOwotICAgICAgICB9Ci0KLSAgICAgICAgWG1sT2JqZWN0W10gcmVzdWx0ID0gKFhtbE9iamVjdFtdKUFycmF5Lm5ld0luc3RhbmNlKGRlc2lyZWRDbGFzcywgaW5wdXQubGVuZ3RoKTsKLSAgICAgICAgU3lzdGVtLmFycmF5Y29weShpbnB1dCwgMCwgcmVzdWx0LCAwLCBpbnB1dC5sZW5ndGgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBYbWxPYmplY3RbXSBzZWxlY3RQYXRoICggU3RyaW5nIHBhdGggKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHNlbGVjdFBhdGgoIHBhdGgsIG51bGwgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgWG1sT2JqZWN0W10gc2VsZWN0UGF0aCAoIFN0cmluZyBwYXRoLCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgIHsKLSAgICAgICAgWG1sT2JqZWN0IFtdIHNlbGVjdGlvbnM7Ci0KLSAgICAgICAgLy8gYWxsIHVzZXItbGV2ZWwgY29kZTsgZG9lc24ndCBuZWVkIHRvIGJlIHN5bmNocm9uaXplZAotCi0gICAgICAgIFhtbEN1cnNvciBjID0gbmV3Q3Vyc29yKCk7Ci0KLSAgICAgICAgaWYgKGMgPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBYbWxWYWx1ZURpc2Nvbm5lY3RlZEV4Y2VwdGlvbigpOwotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBjLnNlbGVjdFBhdGgoIHBhdGgsIG9wdGlvbnMgKTsKLQotICAgICAgICAgICAgaWYgKCFjLmhhc05leHRTZWxlY3Rpb24oKSkKLSAgICAgICAgICAgICAgICBzZWxlY3Rpb25zID0gbmV3IFhtbE9iamVjdFsgMCBdOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNlbGVjdGlvbnMgPSBuZXcgWG1sT2JqZWN0IFsgYy5nZXRTZWxlY3Rpb25Db3VudCgpIF07Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMCA7IGMudG9OZXh0U2VsZWN0aW9uKCkgOyBpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoKHNlbGVjdGlvbnNbIGkgXSA9IGMuZ2V0T2JqZWN0KCkpID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFhtbFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXRoIG11c3Qgc2VsZWN0IG9ubHkgZWxlbWVudHMgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW5kIGF0dHJpYnV0ZXMiICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWxseQotICAgICAgICB7Ci0gICAgICAgICAgICBjLmRpc3Bvc2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBfdHlwZWRBcnJheShzZWxlY3Rpb25zKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgWG1sT2JqZWN0W10gZXhlY1F1ZXJ5ICggU3RyaW5nIHBhdGggKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGV4ZWNRdWVyeSggcGF0aCwgbnVsbCApOwotICAgIH0KLQotICAgIHB1YmxpYyBYbWxPYmplY3RbXSBleGVjUXVlcnkgKCBTdHJpbmcgcXVlcnlFeHByLCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFR5cGVTdG9yZSB0eXBlU3RvcmUgPSBnZXRfc3RvcmUoKTsKLQotICAgICAgICAgICAgaWYgKHR5cGVTdG9yZSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93Ci0gICAgICAgICAgICAgICAgICAgIG5ldyBYbWxSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCBkbyBYUXVlcnkgb24gWE1MIFZhbHVlIE9iamVjdHMiICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBfdHlwZWRBcnJheSh0eXBlU3RvcmUuZXhlY19xdWVyeSggcXVlcnlFeHByLCBvcHRpb25zICkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFhtbEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBYbWxSdW50aW1lRXhjZXB0aW9uKCBlICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgWG1sT2JqZWN0IGNoYW5nZVR5cGUoU2NoZW1hVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgaWYgKHR5cGUgPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oICJJbnZhbGlkIHR5cGUgKG51bGwpIiApOwotCi0gICAgICAgIGlmICgoX2ZsYWdzICYgRkxBR19TVE9SRSkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cKLSAgICAgICAgICAgICAgICBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAiWE1MIFZhbHVlIE9iamVjdHMgY2Fubm90IGhhdmUgdGhpZXIgdHlwZSBjaGFuZ2VkIiApOwotICAgICAgICB9Ci0KLSAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrX29ycGhhbmVkKCk7Ci0gICAgICAgICAgICByZXR1cm4gKFhtbE9iamVjdCkgZ2V0X3N0b3JlKCkuY2hhbmdlX3R5cGUoIHR5cGUgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgaW50IF9mbGFnczsKLSAgICBwcml2YXRlIE9iamVjdCBfdGV4dHNvdXJjZTsKLQotICAgIHByb3RlY3RlZCBYbWxPYmplY3RCYXNlKCkKLSAgICB7Ci0gICAgICAgIF9mbGFncyA9IEZMQUdfTklMTEFCTEUgfCBGTEFHX05JTDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBpbml0X2ZsYWdzKFNjaGVtYVByb3BlcnR5IHByb3ApCi0gICAgewotICAgICAgICBpZiAocHJvcCA9PSBudWxsKSByZXR1cm47Ci0KLSAgICAgICAgaWYgKHByb3AuaGFzRGVmYXVsdCgpID09IFNjaGVtYVByb3BlcnR5LlZBUklBQkxFIHx8Ci0gICAgICAgICAgICBwcm9wLmhhc0ZpeGVkKCkgPT0gU2NoZW1hUHJvcGVydHkuVkFSSUFCTEUgfHwKLSAgICAgICAgICAgIHByb3AuaGFzTmlsbGFibGUoKSA9PSBTY2hlbWFQcm9wZXJ0eS5WQVJJQUJMRSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBfZmxhZ3MgfD0KLSAgICAgICAgICAgIChwcm9wLmhhc0RlZmF1bHQoKSA9PSBTY2hlbWFQcm9wZXJ0eS5ORVZFUiA/IDAgOiBUeXBlU3RvcmUuSEFTREVGQVVMVCkgfAotICAgICAgICAgICAgKHByb3AuaGFzRml4ZWQoKSA9PSBTY2hlbWFQcm9wZXJ0eS5ORVZFUiA/IDAgOiBUeXBlU3RvcmUuRklYRUQpIHwKLSAgICAgICAgICAgIChwcm9wLmhhc05pbGxhYmxlKCkgPT0gU2NoZW1hUHJvcGVydHkuTkVWRVIgPyAwIDogVHlwZVN0b3JlLk5JTExBQkxFKSB8Ci0gICAgICAgICAgICAoRkxBR19OT1RfVkFSSUFCTEUpOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgYXNzZXJ0IFR5cGVTdG9yZS5OSUxMQUJMRSAgID09IDE7Ci0gICAgICAgIGFzc2VydCBUeXBlU3RvcmUuSEFTREVGQVVMVCA9PSAyOwotICAgICAgICBhc3NlcnQgVHlwZVN0b3JlLkZJWEVEICAgICAgPT0gNDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19OSUxMQUJMRSAgICAgICAgPSBUeXBlU3RvcmUuTklMTEFCTEU7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZMQUdfSEFTREVGQVVMVCAgICAgID0gVHlwZVN0b3JlLkhBU0RFRkFVTFQ7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZMQUdfRklYRUQgICAgICAgICAgID0gVHlwZVN0b3JlLkZJWEVEOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGTEFHX0FUVFJJQlVURSAgICAgICA9ICAgICA4OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGTEFHX1NUT1JFICAgICAgICAgICA9ICAgIDE2OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGTEFHX1ZBTFVFX0RBVEVEICAgICA9ICAgIDMyOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGTEFHX05JTCAgICAgICAgICAgICA9ICAgIDY0OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGTEFHX05JTF9EQVRFRCAgICAgICA9ICAgMTI4OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGTEFHX0lTREVGQVVMVCAgICAgICA9ICAgMjU2OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGTEFHX0VMRU1FTlRfREFURUQgICA9ICAgNTEyOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGTEFHX1NFVFRJTkdERUZBVUxUICA9ICAxMDI0OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGTEFHX09SUEhBTkVEICAgICAgICA9ICAyMDQ4OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGTEFHX0lNTVVUQUJMRSAgICAgICA9ICA0MDk2OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGTEFHX0NPTVBMRVhUWVBFICAgICA9ICA4MTkyOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGTEFHX0NPTVBMRVhDT05URU5UICA9IDE2Mzg0OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGTEFHX05PVF9WQVJJQUJMRSAgICA9IDMyNzY4OwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGTEFHX1ZBTElEQVRFX09OX1NFVCA9IDY1NTM2OwotCi0KLSAgICAvKioKLSAgICAgKiBUaGUgdGhyZWUgZGF0ZWQgZmxhZ3MgYXJlIGFsd2F5cyBzdGFja2VkOgotICAgICAqICAgICBGTEFHX0VMRU1FTlRfREFURUQgaW1wbGllcyBGTEFHX05JTF9EQVRFRCBpcyBzZXQKLSAgICAgKiAgICAgRkxBR19OSUxfREFURUQgaW1wbGllcyBGTEFHX1RFWFRfREFURUQgaXMgc2V0LgotICAgICAqIGNoZWNrZXJzIHdvcmsgb24gdGhlIGZsYWdzIGZyb20gdG9wIHRvIGJvdHRvbS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRkxBR1NfREFURUQgPQotICAgICAgICAgICAgRkxBR19WQUxVRV9EQVRFRCB8IEZMQUdfTklMX0RBVEVEIHwgRkxBR19FTEVNRU5UX0RBVEVEOwotCi0gICAgLyoqCi0gICAgICogVGhlIHRocmVlIGVsZW1lbnQgc3RhdHVzIGZsYWdzIGhhdmUgb25lIGludGVycmxhdGlvbnNoaW9wOgotICAgICAqICAgICBGTEFHX0ZJWEVEIGltcGxpZXMgRkxBR19IQVNERUZBVUxUIGlzIHNldC4KLSAgICAgKiBUaGVzZSBmbGFncyBhcmUgdXNlZCB3aGVuIHNldHRpbmcgbmlscywgZGVmYXVsdHMsIHN0cmluZ3MuCi0gICAgICogU2luY2UgYW4gaW5pdGlhbCBnZXQgaW1wbGllcyBzZXR0aW5nIGZyb20gdGV4dCwgdGhleSdyZQotICAgICAqIGFsc28gdXNlZCBkdXJpbmcgZ2V0dGluZy4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRkxBR1NfRUxFTUVOVCA9Ci0gICAgICAgICAgICBGTEFHX05JTExBQkxFIHwgRkxBR19GSVhFRCB8IEZMQUdfSEFTREVGQVVMVDsKLQotCi0gICAgLyoqCi0gICAgICogQ2FsbGVkIGJ5IHJlc3RyaWN0aW9uIHN1YmNsYXNzZXMgd2l0aGluIHRoZWlyIGNvbnN0cnVjdG9ycyB0byBlbmFibGUKLSAgICAgKiBjb21wbGV4IHR5cGUgc3VwcG9ydC4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBpbml0Q29tcGxleFR5cGUoYm9vbGVhbiBjb21wbGV4VHlwZSwgYm9vbGVhbiBjb21wbGV4Q29udGVudCkKLSAgICB7Ci0gICAgICAgIF9mbGFncyB8PSAoY29tcGxleFR5cGUgPyBGTEFHX0NPTVBMRVhUWVBFIDogMCkgfAotICAgICAgICAgICAgICAgICAgKGNvbXBsZXhDb250ZW50ID8gRkxBR19DT01QTEVYQ09OVEVOVCA6IDApOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBib29sZWFuIF9pc0NvbXBsZXhUeXBlKCkKLSAgICAgICAgeyByZXR1cm4gKF9mbGFncyAmIEZMQUdfQ09NUExFWFRZUEUpICE9IDA7IH0KLQotICAgIHByb3RlY3RlZCBib29sZWFuIF9pc0NvbXBsZXhDb250ZW50KCkKLSAgICAgICAgeyByZXR1cm4gKF9mbGFncyAmIEZMQUdfQ09NUExFWENPTlRFTlQpICE9IDA7IH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFZhbGlkYXRlT25TZXQoKSB7Ci0gICAgICAgIF9mbGFncyB8PSBGTEFHX1ZBTElEQVRFX09OX1NFVDsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBfdmFsaWRhdGVPblNldCgpCi0gICAgICAgIHsgcmV0dXJuIChfZmxhZ3MgJiBGTEFHX1ZBTElEQVRFX09OX1NFVCkgIT0gMDsgfQotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgbmlsbGVkLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzTmlsKCkKLSAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobW9uaXRvcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja19kYXRlZCgpOwotICAgICAgICAgICAgcmV0dXJuICgoX2ZsYWdzICYgRkxBR19OSUwpICE9IDApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgZml4ZWQuCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNGaXhlZCgpCi0gICAgewotICAgICAgICBjaGVja19lbGVtZW50X2RhdGVkKCk7Ci0gICAgICAgIHJldHVybiAoKF9mbGFncyAmIEZMQUdfRklYRUQpICE9IDApOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhlIHZhbHVlIGlzIGFsbG93ZWQgdG8gYmUgbmlsLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzTmlsbGFibGUoKQotICAgIHsKLSAgICAgICAgY2hlY2tfZWxlbWVudF9kYXRlZCgpOwotICAgICAgICByZXR1cm4gKChfZmxhZ3MgJiBGTEFHX05JTExBQkxFKSAhPSAwKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBjdXJyZW50bHkgZGVmYXVsdGVkLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzRGVmYXVsdGFibGUoKQotICAgIHsKLSAgICAgICAgY2hlY2tfZWxlbWVudF9kYXRlZCgpOwotICAgICAgICByZXR1cm4gKChfZmxhZ3MgJiBGTEFHX0hBU0RFRkFVTFQpICE9IDApOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhlIHZhbHVlIGlzIGN1cnJlbnRseSBkZWZhdWx0ZWQuCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNEZWZhdWx0KCkKLSAgICB7Ci0gICAgICAgIGNoZWNrX2RhdGVkKCk7Ci0gICAgICAgIHJldHVybiAoKF9mbGFncyAmIEZMQUdfSVNERUZBVUxUKSAhPSAwKTsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIE5pbHMgdGhlIHZhbHVlLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldE5pbCgpCi0gICAgewotICAgICAgICBzeW5jaHJvbml6ZWQgKG1vbml0b3IoKSkKLSAgICAgICAgewotICAgICAgICAgICAgc2V0X3ByZXBhcmUoKTsKLQotICAgICAgICAgICAgLy8gaWYgd2UncmUgbm90IG5pbGxhYmxlLCB0aHJvdyBleGNlcHRpb24gb24gc2V0TmlsKHRydWUpCi0gICAgICAgICAgICBpZiAoKF9mbGFncyAmIEZMQUdfTklMTEFCTEUpID09IDApCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFZhbHVlTm90TmlsbGFibGVFeGNlcHRpb24oKTsKLQotICAgICAgICAgICAgLy8gdGhlIGltcGxlbWVudGF0aW9uIHNob3VsZCB6ZXJvIHRoZSB2YWx1ZSB0byByZWZsZWN0IG5pbAotICAgICAgICAgICAgc2V0X25pbCgpOwotCi0gICAgICAgICAgICAvLyBzZXQgdGhlIG5pbCBmbGFnCi0gICAgICAgICAgICBfZmxhZ3MgfD0gRkxBR19OSUw7Ci0KLSAgICAgICAgICAgIC8vIG9yZGluYXJ5IGNvbW1pdCBleGNlcHQgbm8gY2xlYXJpbmcgb2YgbmlsIGZsYWcKLSAgICAgICAgICAgIGlmICgoX2ZsYWdzICYgRkxBR19TVE9SRSkgIT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfZmxhZ3MgJj0gfkZMQUdTX0RBVEVEOwotICAgICAgICAgICAgICAgIGdldF9zdG9yZSgpLmludmFsaWRhdGVfbmlsKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX3RleHRzb3VyY2UgPSBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVXNlZCBmb3Igc2l0dWF0aW9ucyB3aGVyZSB0aGVzZSBmbGFncyBtdXN0IGJlIHBhc3NlZCBvbiB0bwotICAgICAqIGNoYWluZWQgdmFsdWVzLiAoU2VlIFhtbEFueVNpbXBsZVR5cGUgKGFsbFNpbXBsZVZhbHVlKSwgdW5pb24KLSAgICAgKiBpbXBsZW1lbnRhdGlvbnMpLgotICAgICAqLwotICAgIHByb3RlY3RlZCBpbnQgZWxlbWVudEZsYWdzKCkKLSAgICB7Ci0gICAgICAgIGNoZWNrX2VsZW1lbnRfZGF0ZWQoKTsKLSAgICAgICAgcmV0dXJuIChfZmxhZ3MgJiBGTEFHU19FTEVNRU5UKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIHRvIG1ha2UgYSBmcmVlLXN0YW5kaW5nIHhtbCBzaW1wbGUgdmFsdWUgaW5zdGFuY2UgaW1tdXRhYmxlLgotICAgICAqIFRoaXMgaXMgYSBvbmUtd2F5IHN0cmVldCwgYW5kIGl0IGlzIGlsbGVnYWwgdG8gYXR0ZW1wdCB0byBtYWtlIGEKLSAgICAgKiB2YWx1ZSB0aGF0IGlzIGVtYmVkZGVkIGluIGFuIHhtbCBkb2N1bWVudCBpbW11dGFibGUuCi0gICAgICoKLSAgICAgKiBPbmNlIGEgdmFsdWUgaXMgbWFya2VkIGFzIGltbXV0YWJsZSwgaXQgaXMgaWxsZWdhbCB0byBjYWxsIHNldHRlcnMKLSAgICAgKiBvZiBhbnkga2luZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRJbW11dGFibGUoKQotICAgIHsKLSAgICAgICAgaWYgKChfZmxhZ3MgJiAoRkxBR19JTU1VVEFCTEUgfCBGTEFHX1NUT1JFKSkgIT0gMCkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLQotICAgICAgICBfZmxhZ3MgfD0gRkxBR19JTU1VVEFCTEU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSXMgdGhpcyBpbnN0YW5jZSBhbiBpbW11dGFibGUgdmFsdWU/Ci0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNJbW11dGFibGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChfZmxhZ3MgJiBGTEFHX0lNTVVUQUJMRSkgIT0gMDsKLSAgICB9Ci0KLQotCi0KLSAgICAvLyBURVhUVVNFUiBpbXBsZW1lbnRhdGlvbgotCi0gICAgLyoqCi0gICAgICogQ2FsbGVkIHRvIGluaXRpYWxpemUgdGhlIFR5cGVTdG9yZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBYbWxPYmplY3QKLSAgICAgKiBpbXBsZW1lbnRhdGlvbi4gSWYgbm90IGNhbGxlZCwgdGhpcyBpcyBhIGZyZWUtZmxvYXRpbmcgdmFsdWUgaG9sZGVyLgotICAgICAqCi0gICAgICogV2hlbiBhIHZhbHVlIGlzIGZpcnN0IGF0dGFjaGVkLCBpdCBpcyBwdXQgaW4gYSBjb21wbGV0ZWx5IGludmFsaWRhdGVkCi0gICAgICogc3RhdGUuCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIHZvaWQgYXR0YWNoX3N0b3JlKFR5cGVTdG9yZSBzdG9yZSkKLSAgICB7Ci0gICAgICAgIF90ZXh0c291cmNlID0gc3RvcmU7Ci0gICAgICAgIGlmICgoX2ZsYWdzICYgRkxBR19JTU1VVEFCTEUpICE9IDApCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7Ci0gICAgICAgIF9mbGFncyB8PSBGTEFHX1NUT1JFIHwgRkxBR19WQUxVRV9EQVRFRCB8IEZMQUdfTklMX0RBVEVEIHwgRkxBR19FTEVNRU5UX0RBVEVEOwotCi0gICAgICAgIGlmIChzdG9yZS5pc19hdHRyaWJ1dGUoKSkKLSAgICAgICAgICAgIF9mbGFncyB8PSBGTEFHX0FUVFJJQlVURTsKLQotICAgICAgICBpZiAoc3RvcmUudmFsaWRhdGVfb25fc2V0KCkpCi0gICAgICAgICAgICBfZmxhZ3MgfD0gRkxBR19WQUxJREFURV9PTl9TRVQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2FsbGVkIGJ5IGEgVHlwZVN0b3JlIHRvIGluZGljYXRlIHRoYXQgdGhlIHRleHQgaGFzIGJlZW4KLSAgICAgKiBpbnZhbGlkYXRlZCBhbmQgc2hvdWxkIGJlIGZldGNoZWQgbmV4dCB0aW1lIHRoZSB2YWx1ZSBpcwotICAgICAqIG5lZWRlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgdm9pZCBpbnZhbGlkYXRlX3ZhbHVlKCkKLSAgICB7Ci0gICAgICAgIGFzc2VydCgoX2ZsYWdzICYgRkxBR19TVE9SRSkgIT0gMCk7Ci0gICAgICAgIF9mbGFncyB8PSBGTEFHX1ZBTFVFX0RBVEVEOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIHVzZXNfaW52YWxpZGF0ZV92YWx1ZSgpCi0gICAgewotICAgICAgICBTY2hlbWFUeXBlIHR5cGUgPSBzY2hlbWFUeXBlKCk7Ci0gICAgICAgIHJldHVybiB0eXBlLmlzU2ltcGxlVHlwZSgpIHx8IHR5cGUuZ2V0Q29udGVudFR5cGUoKSA9PSBTY2hlbWFUeXBlLlNJTVBMRV9DT05URU5UOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENhbGxlZCBieSBhIFR5cGVTdG9yZSB0byBpbmRpY2F0ZSB0aGF0IHRoZSB4c2k6bmlsIGF0dHJpYnV0ZQotICAgICAqIG9uIHRoZSBjb250YWluaW5nIGVsZW1lbnQgKGFuZCBwb3NzaWJseSB0aGUgdGV4dCkgaGFzIGJlZW4KLSAgICAgKiBpbnZhbGlkYXRlZCBhbmQgYm90aCBzaG91bGQgYmUgY29uc3VsdGVkIG5leHQgdGltZSB0aGUgdmFsdWUKLSAgICAgKiBpcyBuZWVkZWQuCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIHZvaWQgaW52YWxpZGF0ZV9uaWx2YWx1ZSgpCi0gICAgewotICAgICAgICBhc3NlcnQoKF9mbGFncyAmIEZMQUdfU1RPUkUpICE9IDApOwotICAgICAgICBfZmxhZ3MgfD0gRkxBR19WQUxVRV9EQVRFRCB8IEZMQUdfTklMX0RBVEVEOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENhbGxlZCBieSBhIFR5cGVTdG9yZSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBlbGVtZW50J3MgZGVmYXVsdAotICAgICAqIHZhbHVlLCBuaWxsYWJpbGl0eSwgZml4ZWRuZXNzLCBldGMsIG1heSBoYXZlIGNoYW5nZWQgYnkKLSAgICAgKiB2aXJ0dWUgb2YgdGhlIGVsZW1lbnQgb3JkZXIgY2hhbmdpbmcgKGFuZCB4c2k6bmlsIGFuZCB0aGUKLSAgICAgKiB0ZXh0IG1heSBoYXZlIGNoYW5nZWQgdG9vKTsgc28gdGhlIHN0b3JlIHNob3VsZCBiZSBjb25zdWx0ZWQKLSAgICAgKiBuZXh0IHRpbWUgYW55IHNldHRlciBvciBnZXR0ZXIgaXMgY2FsbGVkLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCB2b2lkIGludmFsaWRhdGVfZWxlbWVudF9vcmRlcigpCi0gICAgewotICAgICAgICBhc3NlcnQoKF9mbGFncyAmIEZMQUdfU1RPUkUpICE9IDApOwotICAgICAgICBfZmxhZ3MgfD0gRkxBR19WQUxVRV9EQVRFRCB8IEZMQUdfTklMX0RBVEVEIHwgRkxBR19FTEVNRU5UX0RBVEVEOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFVzZWQgYnkgdGhlIENvbXBsZXhUeXBlSW1wbCBzdWJjbGFzcyB0byBnZXQgZGlyZWN0IGFjY2VzcwotICAgICAqIHRvIHRoZSBzdG9yZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgVHlwZVN0b3JlIGdldF9zdG9yZSgpCi0gICAgewotICAgICAgICBhc3NlcnQoKF9mbGFncyAmIEZMQUdfU1RPUkUpICE9IDApOwotICAgICAgICByZXR1cm4gKFR5cGVTdG9yZSlfdGV4dHNvdXJjZTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiBoYXNfc3RvcmUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChfZmxhZ3MgJiBGTEFHX1NUT1JFKSAhPSAwOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENhbGxlZCBieSBhIFR5cGVTdG9yZSB0byBwdWxsIG91dCB0aGUgbW9zdCByZWFzb25hYmxlCi0gICAgICogdGV4dCB2YWx1ZSBmcm9tIHVzLiBUaGlzIGlzIGRvbmUgYWZ0ZXIgd2UgaGF2ZSBpbnZhbGlkYXRlZAotICAgICAqIHRoZSBzdG9yZSAodHlwaWNhbGx5IHdoZW4gb3VyIHZhbHVlIGhhcyBiZWVuIHNldCkuCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIFN0cmluZyBidWlsZF90ZXh0KE5hbWVzcGFjZU1hbmFnZXIgbnNtKQotICAgIHsKLSAgICAgICAgYXNzZXJ0KChfZmxhZ3MgJiBGTEFHX1NUT1JFKSAhPSAwKTsKLSAgICAgICAgYXNzZXJ0KChfZmxhZ3MgJiBGTEFHX1ZBTFVFX0RBVEVEKSA9PSAwKTsKLSAgICAgICAgaWYgKChfZmxhZ3MgJiAoRkxBR19OSUwgfCBGTEFHX0lTREVGQVVMVCkpICE9IDApCi0gICAgICAgICAgICByZXR1cm4gIiI7Ci0gICAgICAgIHJldHVybiBjb21wdXRlX3RleHQoCi0gICAgICAgICAgICAgICAgICAgIG5zbSA9PSBudWxsID8gaGFzX3N0b3JlKCkgPyBnZXRfc3RvcmUoKSA6IG51bGwgOiBuc20pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEEgc3RvcmUgd2lsbCBjYWxsIGJhY2sgb24gYnVpbGRfbmlsIGFmdGVyIHdlJ3ZlIGNhbGxlZCBpbnZhbGlkYXRlX25pbAotICAgICAqIGFuZCBpdCBuZWVkcyB0byBrbm93IHdoYXQgdGhlIG5pbCB2YWx1ZSBpcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBidWlsZF9uaWwoKQotICAgIHsKLSAgICAgICAgYXNzZXJ0KChfZmxhZ3MgJiBGTEFHX1NUT1JFKSAhPSAwKTsKLSAgICAgICAgYXNzZXJ0KChfZmxhZ3MgJiBGTEFHX1ZBTFVFX0RBVEVEKSA9PSAwKTsKLSAgICAgICAgcmV0dXJuIChfZmxhZ3MgJiBGTEFHX05JTCkgIT0gMDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBIHN0b3JlIHdpbGwgY2FsbCBiYWNrIG9uIHZhbGlkYXRlX25vdyB0byBmb3JjZSB1cyB0byBsb29rIGF0Ci0gICAgICogdGhlIHRleHQgaWYgd2UncmUgaW4gYW4gaW52YWxpZCBzdGF0ZS4gV2UncmUgYWxsb3dlZCB0byB0aHJvdwotICAgICAqIGFuIGV4Y2VwdGlvbiBpZiB0aGUgdGV4dCBpc24ndCB2YWxpZCBmb3Igb3VyIHR5cGUuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdmFsaWRhdGVfbm93KCkKLSAgICB7Ci0gICAgICAgIGNoZWNrX2RhdGVkKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQSBzdG9yZSBjYWxscyBiYWNrIGhlcmUgaW4gb3JkZXIgdG8gZm9yY2UgYSBkaXNjb25uZWN0LgotICAgICAqIEFmdGVyIHRoaXMgaXMgZG9uZSwgdGhlIG9iamVjdCBzaG91bGQgYmUgY29uc2lkZXJlZCBpbnZhbGlkLgotICAgICAqIEFueSBhdHRlbXB0IHRvIGFjY2VzcyBvciBzZXQgYSB2YWx1ZSBzaG91bGQgcmVzdWx0IGluIGFuCi0gICAgICogZXhjZXB0aW9uLgotICAgICAqCi0gICAgICogTm90ZSB0aGF0IHRoaXMgaXMgaG93IHdlIGhhbmRsZSBkZWxldGlvbnMgYW5kIHhzaTp0eXBlIGNoYW5nZXMuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgZGlzY29ubmVjdF9zdG9yZSgpCi0gICAgewotICAgICAgICBhc3NlcnQoKF9mbGFncyAmIEZMQUdfU1RPUkUpICE9IDApOwotICAgICAgICBfZmxhZ3MgfD0gRkxBR1NfREFURUQgfCBGTEFHX09SUEhBTkVEOwotICAgICAgICAvLyBkbyBOT1QgbnVsbCBvdXQgX3RleHRzb3VyY2UsIGJlY2F1c2Ugd2UgbmVlZCBpdCBub24tbnVsbCBmb3Igc3luY2hyb25pemF0aW9uCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogQSB0eXBlc3RvcmUgdXNlciBjYW4gY3JlYXRlIGEgbmV3IFR5cGVTdG9yZVVzZXIgaW5zdGFuY2UgZm9yCi0gICAgICogYSBnaXZlbiBlbGVtZW50IGNoaWxkIG5hbWUgYXMgbG9uZyBhcyB5b3UgYWxzbyBwYXNzIHRoZQotICAgICAqIHFuYW1lIGNvbnRhaW5lZCBieSB0aGUgeHNpOnR5cGUgYXR0cmlidXRlLCBpZiBhbnkuCi0gICAgICoKLSAgICAgKiBOb3RlIHRoYXQgd2Ugd2lsbCBpZ25vcmUgdGhlIHhzaVR5cGUgaWYgaXQgdHVybnMgb3V0IHRvIGJlIGludmFsaWQuCi0gICAgICoKLSAgICAgKiBSZXR1cm5zIG51bGwgaWYgdGhlcmUgaXMgbm8gc3Ryb25nbHkgdHlwZWQgaW5mb3JtYXRpb24gZm9yIHRoYXQKLSAgICAgKiBnaXZlbiBlbGVtZW50ICh3aGljaCBpbXBsaWVzLCByZWN1c2l2ZWx5LCBubyBzdHJvbmdseSB0eXBlZCBpbmZvcm1hdGlvbgotICAgICAqIGRvd253YXJkcykuCi0gICAgICovCi0gICAgcHVibGljIFR5cGVTdG9yZVVzZXIgY3JlYXRlX2VsZW1lbnRfdXNlcihRTmFtZSBlbHROYW1lLCBRTmFtZSB4c2lUeXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAoVHlwZVN0b3JlVXNlcikKLSAgICAgICAgICAgICAgICAoKFNjaGVtYVR5cGVJbXBsKSBzY2hlbWFUeXBlKCkpLmNyZWF0ZUVsZW1lbnRUeXBlKAotICAgICAgICAgICAgICAgICAgICBlbHROYW1lLCB4c2lUeXBlLCBnZXRfc3RvcmUoKS5nZXRfc2NoZW1hdHlwZWxvYWRlcigpICk7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgU2NoZW1hVHlwZUltcGwgc3R5cGUgPSAoU2NoZW1hVHlwZUltcGwpc2NoZW1hVHlwZSgpLmdldEVsZW1lbnRUeXBlKGVsdE5hbWUsIHhzaVR5cGUsIGdldF9zdG9yZSgpLmdldF9zY2hlbWF0eXBlbG9hZGVyKCkpOwotICAgICAgICBpZiAoc3R5cGUgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICByZXR1cm4gKFR5cGVTdG9yZVVzZXIpc3R5cGUuY3JlYXRlVW5hdHRhY2hlZE5vZGUoKTsKLSAgICAgICAgKi8KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBIHR5cGVzdG9yZSB1c2VyIGNhbiBjcmVhdGUgYSBuZXcgVHlwZVN0b3JlVXNlciBpbnN0YW5jZSBmb3IKLSAgICAgKiBhIGdpdmVuIGF0dHJpYnV0ZSBjaGlsZCwgYmFzZWQgb24gdGhlIGF0dHJpYnV0ZSBuYW1lLgotICAgICAqCi0gICAgICogUmV0dXJucyBudWxsIGlmIHRoZXJlIGlzIG5vIHN0cm9uZ2x5IHR5cGVkIGluZm9ybWF0aW9uIGZvciB0aGF0Ci0gICAgICogZ2l2ZW4gYXR0cmlidXRlcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgVHlwZVN0b3JlVXNlciBjcmVhdGVfYXR0cmlidXRlX3VzZXIoUU5hbWUgYXR0ck5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gKFR5cGVTdG9yZVVzZXIpKChTY2hlbWFUeXBlSW1wbClzY2hlbWFUeXBlKCkpLmNyZWF0ZUF0dHJpYnV0ZVR5cGUoYXR0ck5hbWUsIGdldF9zdG9yZSgpLmdldF9zY2hlbWF0eXBlbG9hZGVyKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFUeXBlIGdldF9zY2hlbWFfdHlwZSgpCi0gICAgewotICAgICAgICByZXR1cm4gc2NoZW1hVHlwZSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFUeXBlIGdldF9lbGVtZW50X3R5cGUoUU5hbWUgZWx0TmFtZSwgUU5hbWUgeHNpVHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzY2hlbWFUeXBlKCkuZ2V0RWxlbWVudFR5cGUoCi0gICAgICAgICAgICBlbHROYW1lLCB4c2lUeXBlLCBnZXRfc3RvcmUoKS5nZXRfc2NoZW1hdHlwZWxvYWRlcigpICk7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgZ2V0X2F0dHJpYnV0ZV90eXBlKFFOYW1lIGF0dHJOYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHNjaGVtYVR5cGUoKS5nZXRBdHRyaWJ1dGVUeXBlKAotICAgICAgICAgICAgYXR0ck5hbWUsIGdldF9zdG9yZSgpLmdldF9zY2hlbWF0eXBlbG9hZGVyKCkgKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IGVsZW1lbnQgdGV4dCwgaWYgaXQncyBjb25zaXN0ZW50LiBJZiBpdCdzCi0gICAgICogbm90IGNvbnNpc3RlbnQsIHJldHVybnMgbnVsbCwgYW5kIHJlcXVpcmVzIGEgdmlzaXRvciB3YWxrLgotICAgICAqCi0gICAgICogQWxzbyByZXR1cm5zIG51bGwgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdCBhdCBhbGwgKGFsdGhvdWdoCi0gICAgICogdGhhdCBjYW4gYWxzbyBiZSBkaXNjb3ZlcmVkIHZpYSBnZXRfZWxlbWVudGZsYWdzIHdpdGhvdXQKLSAgICAgKiBkb2luZyBhIHdhbGspLgotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0X2RlZmF1bHRfZWxlbWVudF90ZXh0KFFOYW1lIGVsdE5hbWUpCi0gICAgewotICAgICAgICBhc3NlcnQoX2lzQ29tcGxleENvbnRlbnQoKSk7Ci0gICAgICAgIGlmICghX2lzQ29tcGxleENvbnRlbnQoKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLQotICAgICAgICBTY2hlbWFQcm9wZXJ0eSBwcm9wID0gc2NoZW1hVHlwZSgpLmdldEVsZW1lbnRQcm9wZXJ0eShlbHROYW1lKTsKLSAgICAgICAgaWYgKHByb3AgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiAiIjsKLSAgICAgICAgcmV0dXJuIHByb3AuZ2V0RGVmYXVsdFRleHQoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZSB0ZXh0IGZvciB0aGUgYXR0cmlidXRlIHdpdGgKLSAgICAgKiB0aGUgZ2l2ZW4gbmFtZSwgb3IgbnVsbCBpZiBubyBkZWZhdWx0LgotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0X2RlZmF1bHRfYXR0cmlidXRlX3RleHQoUU5hbWUgYXR0ck5hbWUpCi0gICAgewotICAgICAgICBhc3NlcnQoX2lzQ29tcGxleFR5cGUoKSk7Ci0gICAgICAgIGlmICghX2lzQ29tcGxleFR5cGUoKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLQotICAgICAgICBTY2hlbWFQcm9wZXJ0eSBwcm9wID0gc2NoZW1hVHlwZSgpLmdldEF0dHJpYnV0ZVByb3BlcnR5KGF0dHJOYW1lKTsKLSAgICAgICAgaWYgKHByb3AgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiAiIjsKLSAgICAgICAgcmV0dXJuIHByb3AuZ2V0RGVmYXVsdFRleHQoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBlbGVtZW50ZmxhZ3MsIGlmIHRoZXkncmUgY29uc2lzdGVudC4gSWYgdGhleSdyZQotICAgICAqIG5vdCwgcmV0dXJucyAtMSwgYW5kIHJlcXVpcmVzIGEgdmlzdG9yIHdhbGsuCi0gICAgICovCi0gICAgcHVibGljIGludCBnZXRfZWxlbWVudGZsYWdzKFFOYW1lIGVsdE5hbWUpCi0gICAgewotICAgICAgICBpZiAoIV9pc0NvbXBsZXhDb250ZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBTY2hlbWFQcm9wZXJ0eSBwcm9wID0gc2NoZW1hVHlwZSgpLmdldEVsZW1lbnRQcm9wZXJ0eShlbHROYW1lKTsKLSAgICAgICAgaWYgKHByb3AgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpZiAocHJvcC5oYXNEZWZhdWx0KCkgPT0gU2NoZW1hUHJvcGVydHkuVkFSSUFCTEUgfHwKLSAgICAgICAgICAgIHByb3AuaGFzRml4ZWQoKSA9PSBTY2hlbWFQcm9wZXJ0eS5WQVJJQUJMRSB8fAotICAgICAgICAgICAgcHJvcC5oYXNOaWxsYWJsZSgpID09IFNjaGVtYVByb3BlcnR5LlZBUklBQkxFKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIChwcm9wLmhhc0RlZmF1bHQoKSA9PSBTY2hlbWFQcm9wZXJ0eS5ORVZFUiA/IDAgOiBUeXBlU3RvcmUuSEFTREVGQVVMVCkgfAotICAgICAgICAgICAgKHByb3AuaGFzRml4ZWQoKSA9PSBTY2hlbWFQcm9wZXJ0eS5ORVZFUiA/IDAgOiBUeXBlU3RvcmUuRklYRUQpIHwKLSAgICAgICAgICAgIChwcm9wLmhhc05pbGxhYmxlKCkgPT0gU2NoZW1hUHJvcGVydHkuTkVWRVIgPyAwIDogVHlwZVN0b3JlLk5JTExBQkxFKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBmbGFncyBmb3IgdGhlIGdpdmVuIGF0dHJpYnV0ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldF9hdHRyaWJ1dGVmbGFncyhRTmFtZSBhdHRyTmFtZSkKLSAgICB7Ci0gICAgICAgIGlmICghX2lzQ29tcGxleFR5cGUoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBTY2hlbWFQcm9wZXJ0eSBwcm9wID0gc2NoZW1hVHlwZSgpLmdldEF0dHJpYnV0ZVByb3BlcnR5KGF0dHJOYW1lKTsKLSAgICAgICAgaWYgKHByb3AgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIChwcm9wLmhhc0RlZmF1bHQoKSA9PSBTY2hlbWFQcm9wZXJ0eS5ORVZFUiA/IDAgOiBUeXBlU3RvcmUuSEFTREVGQVVMVCkgfAotICAgICAgICAgICAgKHByb3AuaGFzRml4ZWQoKSA9PSBTY2hlbWFQcm9wZXJ0eS5ORVZFUiA/IDAgOiBUeXBlU3RvcmUuRklYRUQpOwotICAgICAgICAvLyBCVUdCVUc6IHRvZG86IGhvb2sgdXAgcmVxdWlyZWQ/Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBmYWxzZSBpZiBjaGlsZCBlbGVtZW50cyBhcmUgaW5zZW5zaXRpdmUgdG8gb3JkZXI7Ci0gICAgICogaWYgaXQgcmV0dXJucyB0cnVlLCB5b3UncmUgcmVxdWlyZWQgdG8gY2FsbCBpbnZhbGlkYXRlX2VsZW1lbnRfb3JkZXIKLSAgICAgKiBvbiBjaGlsZHJlbiB0byB0aGUgcmlnaHQgb2YgYW55IGNoaWxkIG9yZGVyIHJlYXJyYW5nZW1lbnQuCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNfY2hpbGRfZWxlbWVudF9vcmRlcl9zZW5zaXRpdmUoKQotICAgIHsKLSAgICAgICAgaWYgKCFfaXNDb21wbGV4VHlwZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gc2NoZW1hVHlwZSgpLmlzT3JkZXJTZW5zaXRpdmUoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbnNlcnRpbmcgYSBuZXcgZWxlbWVudCBpcyBhbHdheXMgdW5hbWJpZ3VvdXMgZXhjZXB0IGluIG9uZQotICAgICAqIHNpdHVhdGlvbjogd2hlbiBhZGRpbmcgYW4gZWxlbWVudCBhZnRlciB0aGUgbGFzdCBvbmUgd2l0aAotICAgICAqIHRoYXQgbmFtZSAob3IgdGhlIGZpcnN0IG9uZSBpZiB0aGVyZSBhcmUgbm9uZSkuCi0gICAgICoKLSAgICAgKiBJbiB0aGF0IGNhc2UsIGFkZCB0aGUgZWxlbWVudCBhdCB0aGUgZmlyc3QgcG9zc2libGUgc2xvdAotICAgICAqIEJFRk9SRSBhbnkgZWxlbWVudCB3aG9zZSBxbmFtZSBpcyBjb250YWluZWQgaW4gdGhlIFFOYW1lU2V0Ci0gICAgICogZ2l2ZW4uIChJZiB0aGUgUU5hbWVTZXQgaXMgZW1wdHksIHRoYXQgbWVhbnMgYWRkIHRoZSBuZXcKLSAgICAgKiBlbGVtZW50IGF0IHRoZSB2ZXJ5IGVuZC4pCi0gICAgICoKLSAgICAgKiBJZiB0aGUgcmV0dXJuZWQgUU5hbWVTZXQgaXMgbnVsbCwgdHJlYXQgaXQgYXMgaWYgdGhlIFFOYW1lU2V0Ci0gICAgICogY29udGFpbmVkIGFsbCBRTmFtZXMsIGkuZS4sIGFkZCB0aGUgbmV3IGVsZW1lbnQgYXQgdGhlIHZlcnkKLSAgICAgKiBmaXJzdCBwb3NpdGlvbiBwb3NzaWJsZSAoYWRqYWNlbnQgdG8gdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUKLSAgICAgKiBzYW1lIG5hbWUsIG9yIGF0IHRoZSB2ZXJ5IGZpcnN0IHNsb3QgaWYgaXQgaXMgdGhlIGZpcnN0IGVsdAotICAgICAqIHdpdGggdGhhdCBuYW1lKS4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgUU5hbWVTZXQgZ2V0X2VsZW1lbnRfZW5kaW5nX2RlbGltaXRlcnMoUU5hbWUgZWx0bmFtZSkKLSAgICB7Ci0gICAgICAgIFNjaGVtYVByb3BlcnR5IHByb3AgPSBzY2hlbWFUeXBlKCkuZ2V0RWxlbWVudFByb3BlcnR5KGVsdG5hbWUpOwotICAgICAgICBpZiAocHJvcCA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHJldHVybiBwcm9wLmdldEphdmFTZXR0ZXJEZWxpbWl0ZXIoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBIHR5cGVzdG9yZSB1c2VyIGNhbiByZXR1cm4gYSB2aXNpdG9yIHRoYXQgaXMgdXNlZCB0byBjb21wdXRlCi0gICAgICogZGVmYXVsdCB0ZXh0IGFuZCBlbGVtZW50ZmxhZ3MgZm9yIGFuIGFyYml0cmFyeSBlbGVtZW50LgotICAgICAqLwotICAgIHB1YmxpYyBUeXBlU3RvcmVWaXNpdG9yIG5ld192aXNpdG9yKCkKLSAgICB7Ci0gICAgICAgIGlmICghX2lzQ29tcGxleENvbnRlbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICByZXR1cm4gbmV3IFNjaGVtYVR5cGVWaXNpdG9ySW1wbChzY2hlbWFUeXBlKCkuZ2V0Q29udGVudE1vZGVsKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFGaWVsZCBnZXRfYXR0cmlidXRlX2ZpZWxkKFFOYW1lIGF0dHJOYW1lKQotICAgIHsKLSAgICAgICAgU2NoZW1hQXR0cmlidXRlTW9kZWwgbW9kZWwgPSBzY2hlbWFUeXBlKCkuZ2V0QXR0cmlidXRlTW9kZWwoKTsKLSAgICAgICAgaWYgKG1vZGVsID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgcmV0dXJuIG1vZGVsLmdldEF0dHJpYnV0ZShhdHRyTmFtZSk7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBTZXR0aW5nIGEgc3RyaW5nIHByZXNlcnZlcyBhbnkgbm9uY2Fub25pY2FsIGxpdGVyYWwKLSAgICAgKiByZXByZXNlbnRhdGlvbi4gVGhpcyBpcyBkb25lIGJ5IHN0b3JpbmcgdGhlIGFjdHVhbAotICAgICAqIHN0cmluZyBpbiB0aGUgdW5kZXJseWluZyBzdG9yZSBhZnRlciBjaGVja2luZyBpdAotICAgICAqIGFnYWluc3QgdGhlIHByaW1pdGl2ZSB0eXBlIGZvciB2YWxpZGl0eS4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfU3RyaW5nKFN0cmluZyB2KQotICAgIHsKLSAgICAgICAgaWYgKChfZmxhZ3MgJiBGTEFHX0lNTVVUQUJMRSkgIT0gMCkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLQotICAgICAgICBib29sZWFuIHdhc05pbGxlZCA9ICgoX2ZsYWdzICYgRkxBR19OSUwpICE9IDApOwotCi0gICAgICAgIC8vIHVwZGF0ZSB0aGUgdW5kZXJseWluZyB2YWx1ZSBmcm9tIHRoZSBzdHJpbmcKLSAgICAgICAgU3RyaW5nIHdzY2Fub24gPSBhcHBseV93c2Nhbm9uKHYpOwotICAgICAgICB1cGRhdGVfZnJvbV93c2Nhbm9uX3RleHQod3NjYW5vbik7Ci0KLSAgICAgICAgLy8gTm93IHN0b3JlIHRoZSBsaXRlcmFsIHRleHQgaW1tZWRpYXRlbHkgaW4gdGhlIHVuZGVybHlpbmcKLSAgICAgICAgaWYgKChfZmxhZ3MgJiBGTEFHX1NUT1JFKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBfZmxhZ3MgJj0gfkZMQUdfVkFMVUVfREFURUQ7Ci0gICAgICAgICAgICBnZXRfc3RvcmUoKS5zdG9yZV90ZXh0KHYpOwotICAgICAgICAgICAgaWYgKHdhc05pbGxlZCkKLSAgICAgICAgICAgICAgICBnZXRfc3RvcmUoKS5pbnZhbGlkYXRlX25pbCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIF90ZXh0c291cmNlID0gdjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBVcGRhdGUgdGhlIHZhbHVlIGJhc2VkIG9uIGNvbXBsZXggY29udGVudC4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCB1cGRhdGVfZnJvbV9jb21wbGV4X2NvbnRlbnQoKQotICAgIHsKLSAgICAgICAgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFV0aWxpdHkgdG8gdXBkYXRlIHRoZSB2YWx1ZSBiYXNlZCBvbiBhIHN0cmluZyB0aGF0Ci0gICAgICogd2FzIHBhc3NlZCBlaXRoZXIgZnJvbSB0aGUgdGV4dCBzdG9yZSBvciBmcm9tIHRoZSB1c2VyLgotICAgICAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY2FzZXMgd2hlcmUgdGhlcmUgaXMgYSBkZWZhdWx0Ci0gICAgICogdGhhdCBtdXN0IGJlIGFwcGxpZWQsIGFuZCB3aGVyZSB0aGUgdmFsdWUgbXVzdCBtYXRjaAotICAgICAqIGEgZml4ZWQgdmFsdWUuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCB2b2lkIHVwZGF0ZV9mcm9tX3dzY2Fub25fdGV4dChTdHJpbmcgdikKLSAgICB7Ci0gICAgICAgIC8vIFdoaXRlc3BhY2UgaXMgZGVmYXVsdCBpZiB0aGlzIHR5cGUgdHJlYXRzIHRoaXMgc3BhY2UgYXMgZGVmYXVsdGFibGUKLSAgICAgICAgaWYgKChfZmxhZ3MgJiBGTEFHX0hBU0RFRkFVTFQpICE9IDAgJiYgIChfZmxhZ3MgJiBGTEFHX1NFVFRJTkdERUZBVUxUKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzbid0IHF1aXRlIGNvcnJlY3Qgc2luY2UgdGhlIC5lcXVhbHMoIiIpIHRlc3Qgc2hvdWxkIGJlCi0gICAgICAgICAgICAvLyBkb25lIG9uIHRoZSBhY3R1YWwgdGV4dCwgbm90IHRoZSB3c2Nhbm9uIHRleHQKLSAgICAgICAgICAgIGlmICgoX2ZsYWdzICYgRkxBR19BVFRSSUJVVEUpID09IDAgJiYgdi5lcXVhbHMoIiIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBkZWYgPSBnZXRfc3RvcmUoKS5jb21wdXRlX2RlZmF1bHRfdGV4dCgpOwotICAgICAgICAgICAgICAgIGlmIChkZWYgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOwotCi0gICAgICAgICAgICAgICAgLy8gcHJvdGVjdCBhZ2FpbnN0IHJlY3Vyc2lvbiB3aXRoIHRoaXMgZmxhZwotICAgICAgICAgICAgICAgIF9mbGFncyB8PSBGTEFHX1NFVFRJTkdERUZBVUxUOwotICAgICAgICAgICAgICAgIHRyeSB7IHRoaXMuc2V0KGRlZik7IH0KLSAgICAgICAgICAgICAgICBmaW5hbGx5IHsgX2ZsYWdzICY9IH5GTEFHX1NFVFRJTkdERUZBVUxUOyB9Ci0gICAgICAgICAgICAgICAgX2ZsYWdzICY9IH5GTEFHX05JTDsKLSAgICAgICAgICAgICAgICBfZmxhZ3MgfD0gRkxBR19JU0RFRkFVTFQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIElmIHdlIGhhdmVuJ3QgcmV0dXJuZWQgeWV0LCB0aGUgZGVmYXVsdCBkb2Vzbid0IGFwcGx5LgotCi0gICAgICAgIC8vIEFzayB1bmRlcmx5aW5nIGltcGwgdG8gcGFyc2Ugb3JkaW5hcnkgbm9uLWRlZmF1bHQgdGV4dAotICAgICAgICBzZXRfdGV4dCh2KTsKLSAgICAgICAgX2ZsYWdzICY9IH4oRkxBR19OSUwgfCBGTEFHX0lTREVGQVVMVCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVHlwZXMgc2hvdWxkIHJldHVybiBmYWxzZSBpZiB0aGV5IGRvbid0IHRyZWF0IHRoZSBnaXZlbgotICAgICAqIHdoaXRlc3BhY2UgYXMgYSBkZWZhdWx0IHZhbHVlLgotICAgICAqLwotICAgIHByb3RlY3RlZCBib29sZWFuIGlzX2RlZmF1bHRhYmxlX3dzKFN0cmluZyB2KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgd2hpdGVzcGFjZSBydWxlIHRoYXQgd2lsbCBiZSBhcHBsaWVkIGJlZm9yZQotICAgICAqIGJ1aWxkaW5nIGEgc3RyaW5nIHRvIHBhc3MgdG8gZ2V0X3RleHQoKS4KLSAgICAgKgotICAgICAqIE92ZXJyaWRkZW4gYnkgc3ViY2xhc3NlcyB0aGF0IGRvbid0IG5lZWQgdGhlaXIgdGV4dAotICAgICAqIGZvciBzZXRfdGV4dCBjYW5vbmljYWxpemVkOyBwZXJoYXBzIHRoZXkgYWxyZWFkeSBpbXBsZW1lbnQKLSAgICAgKiBzY2FubmVycyB0aGF0IGNhbiBkZWFsIHdpdGggd2hpdGVzcGFjZSwgYW5kIHRoZXkga25vdwotICAgICAqIHRoZXkgaGF2ZSBubyByZWdleCBwYXR0ZXJuIHJlc3RyaWN0aW9ucy4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgaW50IGdldF93c2Nhbm9uX3J1bGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFNjaGVtYVR5cGUuV1NfQ09MTEFQU0U7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2FsbGVkIHRvIGNhbm9uaWNhbGl6ZSB3aGl0ZXNwYWNlIGJlZm9yZSBjYWxsaW5nIHNldF90ZXh0LgotICAgICAqCi0gICAgICogVHJpZXMgdG8gYXZvaWQgYWxsb2NhdGlvbiB3aGVuIHRoZSBzdHJpbmcgaXMgYWxyZWFkeSBjYW5vbmljYWwsIGJ1dAotICAgICAqIG90aGVyd2lzZSB0aGlzIGlzIG5vdCBwYXJ0aWN1bGFybHkgZWZmaWNpZW50LiBIb3BlZnVsbHkgdGhlIGNvbW1vbgotICAgICAqIGNhc2UgaXMgdGhhdCB3ZSBwYXNzIG91ciB3c2Nhbm9uIHJ1bGUgdG8gdGhlIHN0b3JlIHZpYSBmZXRjaF90ZXh0Ci0gICAgICogYW5kIGl0J3MgY2Fub25pY2FsaXplZCBiZWZvcmUgd2UgZXZlbiBzZWUgaXQgYXMgYSBzdHJpbmcuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgYXBwbHlfd3NjYW5vbihTdHJpbmcgdikKLSAgICB7Ci0gICAgICAgIHJldHVybiBYbWxXaGl0ZXNwYWNlLmNvbGxhcHNlKHYsIGdldF93c2Nhbm9uX3J1bGUoKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2FsbGVkIGJlZm9yZSBldmVyeSBzZXQgYW5kIGdldCwgdG8gZW5zdXJlIHRoYXQgd2UgaGF2ZQotICAgICAqIGEgY29ycmVjdCBwaWN0dXJlIG9mIHdoZXRoZXIgd2UncmUgbmlsbGFibGUsIGZpeGVkLCBvcgotICAgICAqIGlmIHdlIGhhdmUgYSBkZWZhdWx0IHRoYXQgY2FuIGJlIGFwcGxpZWQuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCB2b2lkIGNoZWNrX2VsZW1lbnRfZGF0ZWQoKQotICAgIHsKLSAgICAgICAgaWYgKChfZmxhZ3MgJiBGTEFHX0VMRU1FTlRfREFURUQpICE9IDAgJiYKLSAgICAgICAgICAgIChfZmxhZ3MgJiBGTEFHX05PVF9WQVJJQUJMRSkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKChfZmxhZ3MgJiBGTEFHX09SUEhBTkVEKSAhPSAwKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBYbWxWYWx1ZURpc2Nvbm5lY3RlZEV4Y2VwdGlvbigpOwotCi0gICAgICAgICAgICBpbnQgZWx0ZmxhZ3MgPSBnZXRfc3RvcmUoKS5jb21wdXRlX2ZsYWdzKCk7Ci0gICAgICAgICAgICAvLyBpbnQgZWx0ZmxhZ3MgPSAwOwotICAgICAgICAgICAgX2ZsYWdzICY9IH4oRkxBR1NfRUxFTUVOVCB8IEZMQUdfRUxFTUVOVF9EQVRFRCk7Ci0gICAgICAgICAgICBfZmxhZ3MgfD0gZWx0ZmxhZ3M7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKChfZmxhZ3MgJiBGTEFHX05PVF9WQVJJQUJMRSkgIT0gMCkKLSAgICAgICAgICAgIF9mbGFncyAmPSB+KEZMQUdfRUxFTUVOVF9EQVRFRCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRGVzY3JpYmVzIHRoZSBvcnBoYW5lZCBzdGF0dXMgb2YgdGhpcyBvYmplY3QuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gaXNfb3JwaGFuZWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChfZmxhZ3MgJiBGTEFHX09SUEhBTkVEKSAhPSAwOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENhbGxlZCBiZWZvcmUgZXZlcnkgZ2V0dGVyIGFuZCBzZXR0ZXIgb24gdGhlIHN0cm9uZ2x5Ci0gICAgICogdHlwZWQgY2xhc3NlcyB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IGhhcyBub3QgYmVlbgotICAgICAqIG9ycGhhbmVkLgotICAgICAqLwotICAgIHByb3RlY3RlZCBmaW5hbCB2b2lkIGNoZWNrX29ycGhhbmVkKCkKLSAgICB7Ci0gICAgICAgIGlmIChpc19vcnBoYW5lZCgpKQotICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFZhbHVlRGlzY29ubmVjdGVkRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2FsbGVkIHByaW9yIHRvIGV2ZXJ5IGdldCBvcGVyYXRpb24sIHRvIGVuc3VyZQotICAgICAqIHRoYXQgdGhlIHZhbHVlIGJlaW5nIHJlYWQgaXMgdmFsaWQuIElmIHRoZSB2YWx1ZQotICAgICAqIGhhcyBiZWVuIGludmFsaWRhdGVkLCBpdCBpcyByZS1yZWFkIGZyb20gdGhlIHVuZGVybHlpbmcKLSAgICAgKiB0ZXh0IHN0b3JlLCBhbmQgdGhpcyBtYXkgY2F1c2UgYW4gb3V0IG9mIHJhbmdlIGV4Y2VwdGlvbi4KLSAgICAgKgotICAgICAqIFRoaXMgbWV0aG9kIGRlYWxzIHdpdGggbmlscywgbmlsbGFiaWxpdHksIGRlZmF1bHRzLCBldGMuCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIHZvaWQgY2hlY2tfZGF0ZWQoKQotICAgIHsKLSAgICAgICAgaWYgKChfZmxhZ3MgJiBGTEFHU19EQVRFRCkgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKChfZmxhZ3MgJiBGTEFHX09SUEhBTkVEKSAhPSAwKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBYbWxWYWx1ZURpc2Nvbm5lY3RlZEV4Y2VwdGlvbigpOwotCi0gICAgICAgICAgICBhc3NlcnQoKF9mbGFncyAmIEZMQUdfU1RPUkUpICE9IDApOwotCi0gICAgICAgICAgICBjaGVja19lbGVtZW50X2RhdGVkKCk7Ci0KLSAgICAgICAgICAgIGlmICgoX2ZsYWdzICYgRkxBR19FTEVNRU5UX0RBVEVEKSAhPSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBlbHRmbGFncyA9IGdldF9zdG9yZSgpLmNvbXB1dGVfZmxhZ3MoKTsKLSAgICAgICAgICAgICAgICBfZmxhZ3MgJj0gfihGTEFHU19FTEVNRU5UIHwgRkxBR19FTEVNRU5UX0RBVEVEKTsKLSAgICAgICAgICAgICAgICBfZmxhZ3MgfD0gZWx0ZmxhZ3M7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJvb2xlYW4gbmlsbGVkID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmICgoX2ZsYWdzICYgRkxBR19OSUxfREFURUQpICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGdldF9zdG9yZSgpLmZpbmRfbmlsKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoKF9mbGFncyAmIEZMQUdfTklMTEFCTEUpID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uKCk7IC8vIG5pbCBub3QgYWxsb3dlZAotCi0gICAgICAgICAgICAgICAgICAgIC8vIGxldCB0aGUgaW1wbGVtZW50YXRpb24ga25vdyB0aGF0IHdlJ3JlIG5pbCBub3cKLSAgICAgICAgICAgICAgICAgICAgc2V0X25pbCgpOwotCi0gICAgICAgICAgICAgICAgICAgIF9mbGFncyB8PSBGTEFHX05JTDsKLSAgICAgICAgICAgICAgICAgICAgbmlsbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgX2ZsYWdzICY9IH5GTEFHX05JTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgX2ZsYWdzICY9IH5GTEFHX05JTF9EQVRFRDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFuaWxsZWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHRleHQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAoKF9mbGFncyAmIEZMQUdfQ09NUExFWENPTlRFTlQpICE9IDAgfHwgKHRleHQgPSBnZXRfd3NjYW5vbl90ZXh0KCkpID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZV9mcm9tX2NvbXBsZXhfY29udGVudCgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIE5hbWVzcGFjZUNvbnRleHQucHVzaChuZXcgTmFtZXNwYWNlQ29udGV4dChnZXRfc3RvcmUoKSkpOwotICAgICAgICAgICAgICAgICAgICB0cnkgeyB1cGRhdGVfZnJvbV93c2Nhbm9uX3RleHQodGV4dCk7IH0KLSAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IE5hbWVzcGFjZUNvbnRleHQucG9wKCk7IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIF9mbGFncyAmPSB+RkxBR19WQUxVRV9EQVRFRDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENhbGxlZCBiZWZvcmUgZXZlcnkgc2V0IG9wZXJhdGlvbiAoZXhjZXB0IGZvciB0aGUKLSAgICAgKiBzcGVjaWFsIGNhc2Ugb2Ygc2V0dGluZyBhIHN0cmluZykgdG86Ci0gICAgICogKDEpIGdldCB0aGUgbmlsbGFibGUsIGZpeGVkLCBldGMgZmxhZ3MKLSAgICAgKiAoMikgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGl0J3MgZml4ZWQgKG5vdCBmb3Igc3RyaW5ncykKLSAgICAgKi8KLSAgICBwcml2YXRlIGZpbmFsIHZvaWQgc2V0X3ByZXBhcmUoKQotICAgIHsKLSAgICAgICAgY2hlY2tfZWxlbWVudF9kYXRlZCgpOwotICAgICAgICBpZiAoKF9mbGFncyAmIEZMQUdfSU1NVVRBQkxFKSAhPSAwKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENhbGxlZCBhZnRlciBldmVyeSBzZXQgb3BlcmF0aW9uIHRvIGludmFsaWRhdGUKLSAgICAgKiB0aGUgYXR0YWNoZWQgcmF3IHRleHQuIEFsc28sIGlmIHdlIHdlcmUgZGF0ZWQsCi0gICAgICogd2UgbWFrZSBhIG5vdGUgdGhhdCB3ZSdyZSBub3cgY3VycmVudCwgc2luY2UgdGhlCi0gICAgICogbGF0ZXN0IHNldCBiZWF0cyB0aGUgcHJldmlvdXMgaW52YWxpZGF0ZS4gQWxzbywKLSAgICAgKiBpZiB3ZSB3ZXJlIG5pbCwgd2UncmUgbm8gbG9uZ2VyLgotICAgICAqLwotICAgIHByaXZhdGUgZmluYWwgdm9pZCBzZXRfY29tbWl0KCkKLSAgICB7Ci0gICAgICAgIGJvb2xlYW4gd2FzTmlsbGVkID0gKChfZmxhZ3MgJiBGTEFHX05JTCkgIT0gMCk7Ci0gICAgICAgICAgX2ZsYWdzICY9IH4oRkxBR19OSUwgfCBGTEFHX0lTREVGQVVMVCk7Ci0KLSAgICAgICAgaWYgKChfZmxhZ3MgJiBGTEFHX1NUT1JFKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBfZmxhZ3MgJj0gfihGTEFHU19EQVRFRCk7Ci0gICAgICAgICAgICBnZXRfc3RvcmUoKS5pbnZhbGlkYXRlX3RleHQoKTsKLSAgICAgICAgICAgIGlmICh3YXNOaWxsZWQpCi0gICAgICAgICAgICAgICAgZ2V0X3N0b3JlKCkuaW52YWxpZGF0ZV9uaWwoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIF90ZXh0c291cmNlID0gbnVsbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdyYWJzIHRoZSB1bmRlbHlpbmcgbGl0cmFsIHJlcHJlc2VudGF0aW9uLCBhcHBseWluZyB0aGUKLSAgICAgKiBpbXBsZW1lbnRhdGlvbidzIHdzY2Fub24gcnVsZS4KLSAgICAgKiBOdWxsIGlmIG5vdCBzaW1wbGUgY29udGVudC4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGdldF93c2Nhbm9uX3RleHQoKQotICAgIHsKLSAgICAgICAgaWYgKChfZmxhZ3MgJiBGTEFHX1NUT1JFKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYXBwbHlfd3NjYW5vbigoU3RyaW5nKV90ZXh0c291cmNlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHJldHVybiBnZXRfc3RvcmUoKS5mZXRjaF90ZXh0KGdldF93c2Nhbm9uX3J1bGUoKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhpcyBzaG91bGQgc2V0IHRoZSB2YWx1ZSBvZiB0aGUgdHlwZSBmcm9tIHRleHQsCi0gICAgICogb3IgdGhyb3cgYW4gWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uIGlmIGl0IGNhbid0LgotICAgICAqLwotICAgIGFic3RyYWN0IHByb3RlY3RlZCB2b2lkIHNldF90ZXh0KFN0cmluZyB0ZXh0KTsKLQotICAgIC8qKgotICAgICAqIFRoaXMgc2hvdWxkIGNsZWFyIHRoZSB2YWx1ZSwgYW5kIHNldCBpdCB0byB3aGF0ZXZlcgotICAgICAqIGlzIHN1cHBvc2VkIHRvIGJlIHJldHVybmVkIHdoZW4gdGhlIHZhbHVlIGlzIG5pbGxlZC4KLSAgICAgKi8KLSAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgdm9pZCBzZXRfbmlsKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIHNob3VsZCByZXR1cm4gdGhlIGNhbm9uaWNhbCBzdHJpbmcgdmFsdWUgb2YgdGhlIHByaW1pdGl2ZS4KLSAgICAgKiBPbmx5IGNhbGxlZCB3aGVuIG5vbi1uaWwuCi0gICAgICovCi0gICAgYWJzdHJhY3QgcHJvdGVjdGVkIFN0cmluZyBjb21wdXRlX3RleHQoTmFtZXNwYWNlTWFuYWdlciBuc20pOwotCi0gICAgLy8gU0lNUExFIFZBTFVFIEFDQ0VTU09SUyBCRUxPVyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAvLyBudW1lcmljczogZnJhY3Rpb25hbAotICAgIHB1YmxpYyBmbG9hdCBmbG9hdFZhbHVlKCkKLSAgICAgICAgeyBCaWdEZWNpbWFsIGJkID0gYmlnRGVjaW1hbFZhbHVlKCk7IHJldHVybiBiZCA9PSBudWxsID8gMC4wZiA6IGJkLmZsb2F0VmFsdWUoKTsgfQotICAgIHB1YmxpYyBkb3VibGUgZG91YmxlVmFsdWUoKQotICAgICAgICB7IEJpZ0RlY2ltYWwgYmQgPSBiaWdEZWNpbWFsVmFsdWUoKTsgcmV0dXJuIGJkID09IG51bGwgPyAwLjAgOiBiZC5kb3VibGVWYWx1ZSgpOyB9Ci0gICAgcHVibGljIEJpZ0RlY2ltYWwgYmlnRGVjaW1hbFZhbHVlKCkKLSAgICAgICAgeyB0aHJvdyBuZXcgWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uKCk7IH0KLQotICAgIC8vIG51bWVyaWNzOiBpbnRlZ3JhbAotICAgIHB1YmxpYyBCaWdJbnRlZ2VyIGJpZ0ludGVnZXJWYWx1ZSgpCi0gICAgICAgIHsgQmlnRGVjaW1hbCBiZCA9IGJpZ0RlY2ltYWxWYWx1ZSgpOyByZXR1cm4gYmQgPT0gbnVsbCA/IG51bGwgOiBiZC50b0JpZ0ludGVnZXIoKTsgfQotCi0gICAgcHVibGljIGJ5dGUgYnl0ZVZhbHVlKCkKLSAgICB7Ci0gICAgICAgIGxvbmcgbCA9IGludFZhbHVlKCk7Ci0gICAgICAgIGlmIChsID4gQnl0ZS5NQVhfVkFMVUUpIHRocm93IG5ldyBYbWxWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb24oKTsKLSAgICAgICAgaWYgKGwgPCBCeXRlLk1JTl9WQUxVRSkgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOwotICAgICAgICByZXR1cm4gKGJ5dGUpbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc2hvcnQgc2hvcnRWYWx1ZSgpCi0gICAgewotICAgICAgICBsb25nIGwgPSBpbnRWYWx1ZSgpOwotICAgICAgICBpZiAobCA+IFNob3J0Lk1BWF9WQUxVRSkgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOwotICAgICAgICBpZiAobCA8IFNob3J0Lk1JTl9WQUxVRSkgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOwotICAgICAgICByZXR1cm4gKHNob3J0KWw7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBpbnRWYWx1ZSgpCi0gICAgewotICAgICAgICBsb25nIGwgPSBsb25nVmFsdWUoKTsKLSAgICAgICAgaWYgKGwgPiBJbnRlZ2VyLk1BWF9WQUxVRSkgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOwotICAgICAgICBpZiAobCA8IEludGVnZXIuTUlOX1ZBTFVFKSB0aHJvdyBuZXcgWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiAoaW50KWw7Ci0gICAgfQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEJpZ0ludGVnZXIgX21heCA9IEJpZ0ludGVnZXIudmFsdWVPZihMb25nLk1BWF9WQUxVRSk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQmlnSW50ZWdlciBfbWluID0gQmlnSW50ZWdlci52YWx1ZU9mKExvbmcuTUlOX1ZBTFVFKTsKLQotICAgIHB1YmxpYyBsb25nIGxvbmdWYWx1ZSgpCi0gICAgewotICAgICAgICBCaWdJbnRlZ2VyIGIgPSBiaWdJbnRlZ2VyVmFsdWUoKTsKLSAgICAgICAgaWYgKGIgPT0gbnVsbCkgcmV0dXJuIDBMOwotICAgICAgICBpZiAoYi5jb21wYXJlVG8oX21heCkgPj0gMCkgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoYi5jb21wYXJlVG8oX21pbikgPD0gMCkgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOwotICAgICAgICByZXR1cm4gYi5sb25nVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBYbWxPcHRpb25zIF90b1N0cmluZ09wdGlvbnMgPQotICAgICAgICBidWlsZElubmVyUHJldHR5T3B0aW9ucygpOwotCi0gICAgc3RhdGljIGZpbmFsIFhtbE9wdGlvbnMgYnVpbGRJbm5lclByZXR0eU9wdGlvbnMoKQotICAgIHsKLSAgICAgICAgWG1sT3B0aW9ucyBvcHRpb25zID0gbmV3IFhtbE9wdGlvbnMoKTsKLSAgICAgICAgb3B0aW9ucy5wdXQoIFhtbE9wdGlvbnMuU0FWRV9JTk5FUiApOwotICAgICAgICBvcHRpb25zLnB1dCggWG1sT3B0aW9ucy5TQVZFX1BSRVRUWV9QUklOVCApOwotICAgICAgICBvcHRpb25zLnB1dCggWG1sT3B0aW9ucy5TQVZFX0FHR1JFU1NJVkVfTkFNRVNQQUNFUyApOwotICAgICAgICBvcHRpb25zLnB1dCggWG1sT3B0aW9ucy5TQVZFX1VTRV9ERUZBVUxUX05BTUVTUEFDRSApOwotICAgICAgICByZXR1cm4gb3B0aW9uczsKLSAgICB9Ci0KLSAgICAvKgotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIHZvaWQgZHVtcFN0YWNrICggU3RyaW5nIG1zZyApCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG5ldyBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW0oICJDOlxcZWUudHh0IiwgdHJ1ZSApOwotICAgICAgICAgICAgamF2YS5pby5QcmludFN0cmVhbSBwcyA9IG5ldyBqYXZhLmlvLlByaW50U3RyZWFtKCBmb3MgKTsKLSAgICAgICAgICAgIHBzLnByaW50bG4oICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgKTsKLSAgICAgICAgICAgIHBzLnByaW50bG4oIG1zZyApOwotICAgICAgICAgICAgbmV3IEV4Y2VwdGlvbigpLnByaW50U3RhY2tUcmFjZSggcHMgKTsKLSAgICAgICAgICAgIHBzLmNsb3NlKCk7Ci0gICAgICAgICAgICBmb3MuY2xvc2UoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoIEV4Y2VwdGlvbiBlICkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICB9Ci0gICAgKi8KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgdG9TdHJpbmcoICkKLSAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobW9uaXRvcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZW5zdXJlU3RvcmUoKS54bWxUZXh0KF90b1N0cmluZ09wdGlvbnMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyB4bWxUZXh0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB4bWxUZXh0KG51bGwpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgeG1sVGV4dCAoWG1sT3B0aW9ucyBvcHRpb25zKQotICAgIHsKLSAgICAgICAgWG1sQ3Vyc29yIGN1ciA9IG5ld0N1cnNvckZvcmNlKCk7Ci0KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBjdXIueG1sVGV4dChtYWtlSW5uZXJPcHRpb25zKG9wdGlvbnMpKTsKLSAgICAgICAgfQotICAgICAgICBmaW5hbGx5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGN1ci5kaXNwb3NlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBlbnVtcwotICAgIHB1YmxpYyBTdHJpbmdFbnVtQWJzdHJhY3RCYXNlIGVudW1WYWx1ZSgpCi0gICAgICAgIHsgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOyB9Ci0KLSAgICAvLyB2YXJpb3VzCi0gICAgcHVibGljIFN0cmluZyBzdHJpbmdWYWx1ZSgpCi0gICAgewotICAgICAgICAvLyBTaW5jZSBjb21wbGV4LWNvbnRlbnQgdHlwZXMgZG9uJ3QgaGF2ZSBhICJuYXR1cmFsIiBzdHJpbmcgdmFsdWUsIHdlCi0gICAgICAgIC8vIGVtaXQgdGhlIGRlZXBseSBjb25jYXRlbmF0ZWQsIHRhZy1yZW1vdmVkIGNvbnRlbnQgb2YgdGhlIHRhZy4KLSAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfaXNDb21wbGV4Q29udGVudCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBnZXRfc3RvcmUoKS5mZXRjaF90ZXh0KFR5cGVTdG9yZS5XU19QUkVTRVJWRSk7Ci0KLSAgICAgICAgICAgIGNoZWNrX2RhdGVkKCk7Ci0gICAgICAgICAgICBpZiAoKF9mbGFncyAmIEZMQUdfTklMKSAhPSAwKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVfdGV4dChoYXNfc3RvcmUoKSA/IGdldF9zdG9yZSgpIDogbnVsbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFN0cmluZ1ZhbHVlKCkKLSAgICAgICAgeyByZXR1cm4gc3RyaW5nVmFsdWUoKTsgfQotICAgIHB1YmxpYyBib29sZWFuIGdldEJvb2xlYW5WYWx1ZSgpCi0gICAgICAgIHsgcmV0dXJuIGJvb2xlYW5WYWx1ZSgpOyB9Ci0gICAgcHVibGljIGJ5dGUgZ2V0Qnl0ZVZhbHVlKCkKLSAgICAgICAgeyByZXR1cm4gYnl0ZVZhbHVlKCk7IH0KLSAgICBwdWJsaWMgc2hvcnQgZ2V0U2hvcnRWYWx1ZSgpCi0gICAgICAgIHsgcmV0dXJuIHNob3J0VmFsdWUoKTsgfQotICAgIHB1YmxpYyBpbnQgZ2V0SW50VmFsdWUoKQotICAgICAgICB7IHJldHVybiBpbnRWYWx1ZSgpOyB9Ci0gICAgcHVibGljIGxvbmcgZ2V0TG9uZ1ZhbHVlKCkKLSAgICAgICAgeyByZXR1cm4gbG9uZ1ZhbHVlKCk7IH0KLSAgICBwdWJsaWMgQmlnSW50ZWdlciBnZXRCaWdJbnRlZ2VyVmFsdWUoKQotICAgICAgICB7IHJldHVybiBiaWdJbnRlZ2VyVmFsdWUoKTsgfQotICAgIHB1YmxpYyBCaWdEZWNpbWFsIGdldEJpZ0RlY2ltYWxWYWx1ZSgpCi0gICAgICAgIHsgcmV0dXJuIGJpZ0RlY2ltYWxWYWx1ZSgpOyB9Ci0gICAgcHVibGljIGZsb2F0IGdldEZsb2F0VmFsdWUoKQotICAgICAgICB7IHJldHVybiBmbG9hdFZhbHVlKCk7IH0KLSAgICBwdWJsaWMgZG91YmxlIGdldERvdWJsZVZhbHVlKCkKLSAgICAgICAgeyByZXR1cm4gZG91YmxlVmFsdWUoKTsgfQotICAgIHB1YmxpYyBieXRlW10gZ2V0Qnl0ZUFycmF5VmFsdWUoKQotICAgICAgICB7IHJldHVybiBieXRlQXJyYXlWYWx1ZSgpOyB9Ci0gICAgcHVibGljIFN0cmluZ0VudW1BYnN0cmFjdEJhc2UgZ2V0RW51bVZhbHVlKCkKLSAgICAgICAgeyByZXR1cm4gZW51bVZhbHVlKCk7IH0KLSAgICBwdWJsaWMgQ2FsZW5kYXIgZ2V0Q2FsZW5kYXJWYWx1ZSgpCi0gICAgICAgIHsgcmV0dXJuIGNhbGVuZGFyVmFsdWUoKTsgfQotICAgIHB1YmxpYyBEYXRlIGdldERhdGVWYWx1ZSgpCi0gICAgICAgIHsgcmV0dXJuIGRhdGVWYWx1ZSgpOyB9Ci0gICAgcHVibGljIEdEYXRlIGdldEdEYXRlVmFsdWUoKQotICAgICAgICB7IHJldHVybiBnRGF0ZVZhbHVlKCk7IH0KLSAgICBwdWJsaWMgR0R1cmF0aW9uIGdldEdEdXJhdGlvblZhbHVlKCkKLSAgICAgICAgeyByZXR1cm4gZ0R1cmF0aW9uVmFsdWUoKTsgfQotICAgIHB1YmxpYyBRTmFtZSBnZXRRTmFtZVZhbHVlKCkKLSAgICAgICAgeyByZXR1cm4gcU5hbWVWYWx1ZSgpOyB9Ci0gICAgcHVibGljIExpc3QgeGdldExpc3RWYWx1ZSgpCi0gICAgICAgIHsgcmV0dXJuIHhsaXN0VmFsdWUoKTsgfQotICAgIHB1YmxpYyBMaXN0IGdldExpc3RWYWx1ZSgpCi0gICAgICAgIHsgcmV0dXJuIGxpc3RWYWx1ZSgpOyB9Ci0gICAgcHVibGljIE9iamVjdCBnZXRPYmplY3RWYWx1ZSgpCi0gICAgICAgIHsgcmV0dXJuIG9iamVjdFZhbHVlKCk7IH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFN0cmluZ1ZhbHVlKFN0cmluZyBvYmopCi0gICAgICAgIHsgc2V0KG9iaik7IH0KLSAgICBwdWJsaWMgdm9pZCBzZXRCb29sZWFuVmFsdWUoYm9vbGVhbiB2KQotICAgICAgICB7IHNldCh2KTsgfQotICAgIHB1YmxpYyB2b2lkIHNldEJ5dGVWYWx1ZShieXRlIHYpCi0gICAgICAgIHsgc2V0KHYpOyB9Ci0gICAgcHVibGljIHZvaWQgc2V0U2hvcnRWYWx1ZShzaG9ydCB2KQotICAgICAgICB7IHNldCh2KTsgfQotICAgIHB1YmxpYyB2b2lkIHNldEludFZhbHVlKGludCB2KQotICAgICAgICB7IHNldCh2KTsgfQotICAgIHB1YmxpYyB2b2lkIHNldExvbmdWYWx1ZShsb25nIHYpCi0gICAgICAgIHsgc2V0KHYpOyB9Ci0gICAgcHVibGljIHZvaWQgc2V0QmlnSW50ZWdlclZhbHVlKEJpZ0ludGVnZXIgb2JqKQotICAgICAgICB7IHNldChvYmopOyB9Ci0gICAgcHVibGljIHZvaWQgc2V0QmlnRGVjaW1hbFZhbHVlKEJpZ0RlY2ltYWwgb2JqKQotICAgICAgICB7IHNldChvYmopOyB9Ci0gICAgcHVibGljIHZvaWQgc2V0RmxvYXRWYWx1ZShmbG9hdCB2KQotICAgICAgICB7IHNldCh2KTsgfQotICAgIHB1YmxpYyB2b2lkIHNldERvdWJsZVZhbHVlKGRvdWJsZSB2KQotICAgICAgICB7IHNldCh2KTsgfQotICAgIHB1YmxpYyB2b2lkIHNldEJ5dGVBcnJheVZhbHVlKGJ5dGVbXSBvYmopCi0gICAgICAgIHsgc2V0KG9iaik7IH0KLSAgICBwdWJsaWMgdm9pZCBzZXRFbnVtVmFsdWUoU3RyaW5nRW51bUFic3RyYWN0QmFzZSBvYmopCi0gICAgICAgIHsgc2V0KG9iaik7IH0KLSAgICBwdWJsaWMgdm9pZCBzZXRDYWxlbmRhclZhbHVlKENhbGVuZGFyIG9iaikKLSAgICAgICAgeyBzZXQob2JqKTsgfQotICAgIHB1YmxpYyB2b2lkIHNldERhdGVWYWx1ZShEYXRlIG9iaikKLSAgICAgICAgeyBzZXQob2JqKTsgfQotICAgIHB1YmxpYyB2b2lkIHNldEdEYXRlVmFsdWUoR0RhdGUgb2JqKQotICAgICAgICB7IHNldChvYmopOyB9Ci0gICAgcHVibGljIHZvaWQgc2V0R0R1cmF0aW9uVmFsdWUoR0R1cmF0aW9uIG9iaikKLSAgICAgICAgeyBzZXQob2JqKTsgfQotICAgIHB1YmxpYyB2b2lkIHNldFFOYW1lVmFsdWUoUU5hbWUgb2JqKQotICAgICAgICB7IHNldChvYmopOyB9Ci0gICAgcHVibGljIHZvaWQgc2V0TGlzdFZhbHVlKExpc3Qgb2JqKQotICAgICAgICB7IHNldChvYmopOyB9Ci0gICAgcHVibGljIHZvaWQgc2V0T2JqZWN0VmFsdWUoT2JqZWN0IG9iaikKLSAgICAgICAgeyBvYmplY3RTZXQob2JqKTsgfQotCi0gICAgcHVibGljIGJ5dGVbXSBieXRlQXJyYXlWYWx1ZSgpCi0gICAgICAgIHsgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOyB9Ci0gICAgcHVibGljIGJvb2xlYW4gYm9vbGVhblZhbHVlKCkKLSAgICAgICAgeyB0aHJvdyBuZXcgWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uKCk7IH0KLSAgICBwdWJsaWMgR0RhdGUgZ0RhdGVWYWx1ZSgpCi0gICAgICAgIHsgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOyB9Ci0gICAgcHVibGljIERhdGUgZGF0ZVZhbHVlKCkKLSAgICAgICAgeyB0aHJvdyBuZXcgWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uKCk7IH0KLSAgICBwdWJsaWMgQ2FsZW5kYXIgY2FsZW5kYXJWYWx1ZSgpCi0gICAgICAgIHsgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOyB9Ci0gICAgcHVibGljIEdEdXJhdGlvbiBnRHVyYXRpb25WYWx1ZSgpCi0gICAgICAgIHsgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOyB9Ci0gICAgcHVibGljIFFOYW1lIHFOYW1lVmFsdWUoKQotICAgICAgICB7IHRocm93IG5ldyBYbWxWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb24oKTsgfQotICAgIHB1YmxpYyBMaXN0IGxpc3RWYWx1ZSgpCi0gICAgICAgIHsgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOyB9Ci0gICAgcHVibGljIExpc3QgeGxpc3RWYWx1ZSgpCi0gICAgICAgIHsgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOyB9Ci0gICAgcHVibGljIE9iamVjdCBvYmplY3RWYWx1ZSgpCi0gICAgICAgIHsgcmV0dXJuIGphdmFfdmFsdWUodGhpcyk7IH0KLQotICAgIC8vIHNldCB0aGlzIHZhbHVlCi0gICAgcHVibGljIGZpbmFsIHZvaWQgc2V0KGJvb2xlYW4gdikKLSAgICAgICAgeyBzeW5jaHJvbml6ZWQgKG1vbml0b3IoKSkgeyBzZXRfcHJlcGFyZSgpOyBzZXRfYm9vbGVhbih2KTsgc2V0X2NvbW1pdCgpOyB9IH0KLSAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXQoYnl0ZSB2KQotICAgICAgICB7IHN5bmNocm9uaXplZCAobW9uaXRvcigpKSB7IHNldF9wcmVwYXJlKCk7IHNldF9ieXRlKHYpOyBzZXRfY29tbWl0KCk7IH0gfQotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldChzaG9ydCB2KQotICAgICAgICB7IHN5bmNocm9uaXplZCAobW9uaXRvcigpKSB7IHNldF9wcmVwYXJlKCk7IHNldF9zaG9ydCh2KTsgc2V0X2NvbW1pdCgpOyB9IH0KLSAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXQoaW50IHYpCi0gICAgICAgIHsgc3luY2hyb25pemVkIChtb25pdG9yKCkpIHsgc2V0X3ByZXBhcmUoKTsgc2V0X2ludCh2KTsgc2V0X2NvbW1pdCgpOyB9IH0KLSAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXQobG9uZyB2KQotICAgICAgICB7IHN5bmNocm9uaXplZCAobW9uaXRvcigpKSB7IHNldF9wcmVwYXJlKCk7IHNldF9sb25nKHYpOyBzZXRfY29tbWl0KCk7IH0gfQotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldChmbG9hdCB2KQotICAgICAgICB7IHN5bmNocm9uaXplZCAobW9uaXRvcigpKSB7IHNldF9wcmVwYXJlKCk7IHNldF9mbG9hdCh2KTsgc2V0X2NvbW1pdCgpOyB9IH0KLSAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXQoZG91YmxlIHYpCi0gICAgICAgIHsgc3luY2hyb25pemVkIChtb25pdG9yKCkpIHsgc2V0X3ByZXBhcmUoKTsgc2V0X2RvdWJsZSh2KTsgc2V0X2NvbW1pdCgpOyB9IH0KLSAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXQoYnl0ZVtdIG9iaikKLSAgICAgICAgeyBpZiAob2JqID09IG51bGwpIHNldE5pbCgpOyBlbHNlIHsgc3luY2hyb25pemVkIChtb25pdG9yKCkpIHsgc2V0X3ByZXBhcmUoKTsgc2V0X0J5dGVBcnJheShvYmopOyBzZXRfY29tbWl0KCk7IH0gfSB9Ci0gICAgcHVibGljIGZpbmFsIHZvaWQgc2V0KFN0cmluZ0VudW1BYnN0cmFjdEJhc2Ugb2JqKQotICAgICAgICB7IGlmIChvYmogPT0gbnVsbCkgc2V0TmlsKCk7IGVsc2UgeyBzeW5jaHJvbml6ZWQgKG1vbml0b3IoKSkgeyBzZXRfcHJlcGFyZSgpOyBzZXRfZW51bShvYmopOyBzZXRfY29tbWl0KCk7IH0gfSB9Ci0gICAgcHVibGljIGZpbmFsIHZvaWQgc2V0KEJpZ0ludGVnZXIgb2JqKQotICAgICAgICB7IGlmIChvYmogPT0gbnVsbCkgc2V0TmlsKCk7IGVsc2UgeyBzeW5jaHJvbml6ZWQgKG1vbml0b3IoKSkgeyBzZXRfcHJlcGFyZSgpOyBzZXRfQmlnSW50ZWdlcihvYmopOyBzZXRfY29tbWl0KCk7IH0gfSB9Ci0gICAgcHVibGljIGZpbmFsIHZvaWQgc2V0KEJpZ0RlY2ltYWwgb2JqKQotICAgICAgICB7IGlmIChvYmogPT0gbnVsbCkgc2V0TmlsKCk7IGVsc2UgeyBzeW5jaHJvbml6ZWQgKG1vbml0b3IoKSkgeyBzZXRfcHJlcGFyZSgpOyBzZXRfQmlnRGVjaW1hbChvYmopOyBzZXRfY29tbWl0KCk7IH0gfSB9Ci0gICAgcHVibGljIGZpbmFsIHZvaWQgc2V0KENhbGVuZGFyIG9iaikKLSAgICAgICAgeyBpZiAob2JqID09IG51bGwpIHNldE5pbCgpOyBlbHNlIHsgc3luY2hyb25pemVkIChtb25pdG9yKCkpIHsgc2V0X3ByZXBhcmUoKTsgc2V0X0NhbGVuZGFyKG9iaik7IHNldF9jb21taXQoKTsgfSB9IH0KLSAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXQoRGF0ZSBvYmopCi0gICAgICAgIHsgaWYgKG9iaiA9PSBudWxsKSBzZXROaWwoKTsgZWxzZSB7IHN5bmNocm9uaXplZCAobW9uaXRvcigpKSB7IHNldF9wcmVwYXJlKCk7IHNldF9EYXRlKG9iaik7IHNldF9jb21taXQoKTsgfSB9IH0KLSAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXQoR0RhdGVTcGVjaWZpY2F0aW9uIG9iaikKLSAgICAgICAgeyBpZiAob2JqID09IG51bGwpIHNldE5pbCgpOyBlbHNlIHsgc3luY2hyb25pemVkIChtb25pdG9yKCkpIHsgc2V0X3ByZXBhcmUoKTsgc2V0X0dEYXRlKG9iaik7IHNldF9jb21taXQoKTsgfSB9IH0KLSAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXQoR0R1cmF0aW9uU3BlY2lmaWNhdGlvbiBvYmopCi0gICAgICAgIHsgaWYgKG9iaiA9PSBudWxsKSBzZXROaWwoKTsgZWxzZSB7IHN5bmNocm9uaXplZCAobW9uaXRvcigpKSB7IHNldF9wcmVwYXJlKCk7IHNldF9HRHVyYXRpb24ob2JqKTsgc2V0X2NvbW1pdCgpOyB9IH0gfQotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldChRTmFtZSBvYmopCi0gICAgICAgIHsgaWYgKG9iaiA9PSBudWxsKSBzZXROaWwoKTsgZWxzZSB7IHN5bmNocm9uaXplZCAobW9uaXRvcigpKSB7IHNldF9wcmVwYXJlKCk7IHNldF9RTmFtZShvYmopOyBzZXRfY29tbWl0KCk7IH0gfSB9Ci0gICAgcHVibGljIGZpbmFsIHZvaWQgc2V0KExpc3Qgb2JqKQotICAgICAgICB7IGlmIChvYmogPT0gbnVsbCkgc2V0TmlsKCk7IGVsc2UgeyBzeW5jaHJvbml6ZWQgKG1vbml0b3IoKSkgeyBzZXRfcHJlcGFyZSgpOyBzZXRfbGlzdChvYmopOyBzZXRfY29tbWl0KCk7IH0gfSB9Ci0gICAgcHVibGljIGZpbmFsIHZvaWQgc2V0KFN0cmluZyBvYmopCi0gICAgICAgIHsgaWYgKG9iaiA9PSBudWxsKSBzZXROaWwoKTsgZWxzZSB7IHN5bmNocm9uaXplZCAobW9uaXRvcigpKSB7IHNldF9wcmVwYXJlKCk7IHNldF9TdHJpbmcob2JqKTsgLyogc3RyaW5ncyBhcmUgc3BlY2lhbCwgc28gc2V0X1N0cmluZyBkb2VzIGl0cyBvd24gY29tbWl0LiovIH0gfSB9Ci0KLSAgICBwdWJsaWMgdm9pZCBvYmplY3RTZXQoT2JqZWN0IG8pCi0gICAgewotICAgICAgICBpZiAobyA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBzZXROaWwoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChvIGluc3RhbmNlb2YgWG1sT2JqZWN0KQotICAgICAgICAgICAgc2V0KCAoWG1sT2JqZWN0KSBvICk7Ci0gICAgICAgIGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBTdHJpbmcpCi0gICAgICAgICAgICBzZXQoIChTdHJpbmcpIG8gKTsKLSAgICAgICAgZWxzZSBpZiAobyBpbnN0YW5jZW9mIFN0cmluZ0VudW1BYnN0cmFjdEJhc2UpCi0gICAgICAgICAgICBzZXQoIChTdHJpbmdFbnVtQWJzdHJhY3RCYXNlKSBvICk7Ci0gICAgICAgIGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBCaWdJbnRlZ2VyKQotICAgICAgICAgICAgc2V0KCAoQmlnSW50ZWdlcikgbyApOwotICAgICAgICBlbHNlIGlmIChvIGluc3RhbmNlb2YgQmlnRGVjaW1hbCkKLSAgICAgICAgICAgIHNldCggKEJpZ0RlY2ltYWwpIG8gKTsKLSAgICAgICAgZWxzZSBpZiAobyBpbnN0YW5jZW9mIEJ5dGUpCi0gICAgICAgICAgICBzZXQoICgoQnl0ZSlvKS5ieXRlVmFsdWUoKSApOwotICAgICAgICBlbHNlIGlmIChvIGluc3RhbmNlb2YgU2hvcnQpCi0gICAgICAgICAgICBzZXQoICgoU2hvcnQpbykuc2hvcnRWYWx1ZSgpICk7Ci0gICAgICAgIGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBJbnRlZ2VyKQotICAgICAgICAgICAgc2V0KCAoKEludGVnZXIpbykuaW50VmFsdWUoKSApOwotICAgICAgICBlbHNlIGlmIChvIGluc3RhbmNlb2YgTG9uZykKLSAgICAgICAgICAgIHNldCggKChMb25nKW8pLmxvbmdWYWx1ZSgpICk7Ci0gICAgICAgIGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBCb29sZWFuKQotICAgICAgICAgICAgc2V0KCAoKEJvb2xlYW4pbykuYm9vbGVhblZhbHVlKCkgKTsKLSAgICAgICAgZWxzZSBpZiAobyBpbnN0YW5jZW9mIEZsb2F0KQotICAgICAgICAgICAgc2V0KCAoKEZsb2F0KW8pLmZsb2F0VmFsdWUoKSApOwotICAgICAgICBlbHNlIGlmIChvIGluc3RhbmNlb2YgRG91YmxlKQotICAgICAgICAgICAgc2V0KCAoKERvdWJsZSlvKS5kb3VibGVWYWx1ZSgpICk7Ci0gICAgICAgIGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBDYWxlbmRhcikKLSAgICAgICAgICAgIHNldCggKChDYWxlbmRhcilvKSApOwotICAgICAgICBlbHNlIGlmIChvIGluc3RhbmNlb2YgRGF0ZSkKLSAgICAgICAgICAgIHNldCggKERhdGUpIG8gKTsKLSAgICAgICAgZWxzZSBpZiAobyBpbnN0YW5jZW9mIEdEYXRlU3BlY2lmaWNhdGlvbikKLSAgICAgICAgICAgIHNldCggKEdEYXRlU3BlY2lmaWNhdGlvbikgbyApOwotICAgICAgICBlbHNlIGlmIChvIGluc3RhbmNlb2YgR0R1cmF0aW9uU3BlY2lmaWNhdGlvbikKLSAgICAgICAgICAgIHNldCggKEdEdXJhdGlvblNwZWNpZmljYXRpb24pIG8gKTsKLSAgICAgICAgZWxzZSBpZiAobyBpbnN0YW5jZW9mIFFOYW1lKQotICAgICAgICAgICAgc2V0KCAoUU5hbWUpIG8gKTsKLSAgICAgICAgZWxzZSBpZiAobyBpbnN0YW5jZW9mIExpc3QpCi0gICAgICAgICAgICBzZXQoIChMaXN0KSBvICk7Ci0gICAgICAgIGVsc2UgaWYgKG8gaW5zdGFuY2VvZiBieXRlW10pCi0gICAgICAgICAgICBzZXQoIChieXRlW10pIG8gKTsKLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdwotICAgICAgICAgICAgICAgIG5ldyBYbWxWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICJDYW4ndCBzZXQgdW5pb24gb2JqZWN0IG9mIGNsYXNzIDogIiArCi0gICAgICAgICAgICAgICAgICAgICAgICBvLmdldENsYXNzKCkuZ2V0TmFtZSgpICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgdm9pZCBzZXRfbmV3VmFsdWUoWG1sT2JqZWN0IG9iaikKLSAgICB7Ci0gICAgICAgIGlmIChvYmogPT0gbnVsbCB8fCBvYmouaXNOaWwoKSkKLSAgICAgICAgewotICAgICAgICAgICAgc2V0TmlsKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBwcmltaXRpdmU6Ci0gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBYbWxBbnlTaW1wbGVUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxBbnlTaW1wbGVUeXBlIHYgPSAoWG1sQW55U2ltcGxlVHlwZSlvYmo7Ci0gICAgICAgICAgICBTY2hlbWFUeXBlIGluc3RhbmNlVHlwZSA9ICgoU2ltcGxlVmFsdWUpdikuaW5zdGFuY2VUeXBlKCk7Ci0gICAgICAgICAgICBhc3NlcnQoaW5zdGFuY2VUeXBlICE9IG51bGwpIDogIk5pbCBjYXNlIHNob3VsZCBoYXZlIGJlZW4gaGFuZGxlZCBhbHJlYWR5IjsKLQotICAgICAgICAgICAgLy8gaGFuZGxlIGxpc3RzCi0gICAgICAgICAgICBpZiAoaW5zdGFuY2VUeXBlLmdldFNpbXBsZVZhcmlldHkoKSA9PSBTY2hlbWFUeXBlLkxJU1QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzZXRfcHJlcGFyZSgpOwotICAgICAgICAgICAgICAgICAgICBzZXRfbGlzdCgoKFNpbXBsZVZhbHVlKXYpLnhnZXRMaXN0VmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNldF9jb21taXQoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gaGFuZGxlIGF0b21pYyB0eXBlcwotICAgICAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KGluc3RhbmNlVHlwZS5nZXRTaW1wbGVWYXJpZXR5KCkgPT0gU2NoZW1hVHlwZS5BVE9NSUMpOwotICAgICAgICAgICAgICAgIHN3aXRjaCAoaW5zdGFuY2VUeXBlLmdldFByaW1pdGl2ZVR5cGUoKS5nZXRCdWlsdGluVHlwZUNvZGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UpIDogImVuY291bnRlcmVkIG5vbnByaW1pdGl2ZSB0eXBlLiI7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGNhc2UgU2NoZW1hVHlwZS5CVENfQU5ZX1NJTVBMRTogIFRoaXMgaXMgaGFuZGxlZCBiZWxvdy4uLgotICAgICAgICAgICAgICAgICAgICAvLyBidXQgd2UgZXZlbnR1YWxseSB3YW50IHRvIGhhbmRsZSBpdCB3aXRoIGEgdHJlZWNvcHksIHNvCi0gICAgICAgICAgICAgICAgICAgIC8vIGV2ZW50dWFsbHkgd2Ugc2hvdWxkIGJyZWFrIGhlcmUuCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhayBwcmltaXRpdmU7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19CT09MRUFOOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGJvb2wgPSAoKFNpbXBsZVZhbHVlKXYpLmdldEJvb2xlYW5WYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3ByZXBhcmUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldF9ib29sZWFuKGJvb2wpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19CQVNFXzY0X0JJTkFSWToKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZVtdIGJ5dGVBcnIgPSAoKFNpbXBsZVZhbHVlKXYpLmdldEJ5dGVBcnJheVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRfcHJlcGFyZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2I2NChieXRlQXJyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfSEVYX0JJTkFSWToKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZVtdIGJ5dGVBcnIgPSAoKFNpbXBsZVZhbHVlKXYpLmdldEJ5dGVBcnJheVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRfcHJlcGFyZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2hleChieXRlQXJyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfUU5BTUU6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFFOYW1lIG5hbWUgPSAoKFNpbXBsZVZhbHVlKXYpLmdldFFOYW1lVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldF9wcmVwYXJlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRfUU5hbWUobmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0ZMT0FUOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBmID0gKChTaW1wbGVWYWx1ZSl2KS5nZXRGbG9hdFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRfcHJlcGFyZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2Zsb2F0KGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19ET1VCTEU6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBkID0gKChTaW1wbGVWYWx1ZSl2KS5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3ByZXBhcmUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldF9kb3VibGUoZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RFQ0lNQUw6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaW5zdGFuY2VUeXBlLmdldERlY2ltYWxTaXplKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLlNJWkVfQllURToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGUgYiA9ICgoU2ltcGxlVmFsdWUpdikuZ2V0Qnl0ZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9wcmVwYXJlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9ieXRlKGIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLlNJWkVfU0hPUlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBzID0gKChTaW1wbGVWYWx1ZSl2KS5nZXRTaG9ydFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9wcmVwYXJlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9zaG9ydChzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5TSVpFX0lOVDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpID0gKChTaW1wbGVWYWx1ZSl2KS5nZXRJbnRWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfcHJlcGFyZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfaW50KGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLlNJWkVfTE9ORzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbCA9ICgoU2ltcGxlVmFsdWUpdikuZ2V0TG9uZ1ZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9wcmVwYXJlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9sb25nKGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLlNJWkVfQklHX0lOVEVHRVI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWdJbnRlZ2VyIGJpID0gKChTaW1wbGVWYWx1ZSl2KS5nZXRCaWdJbnRlZ2VyVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3ByZXBhcmUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X0JpZ0ludGVnZXIoYmkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSkgOiAiaW52YWxpZCBudW1lcmljIGJpdCBjb3VudCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZhbGx0aHJvdWdoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5TSVpFX0JJR19ERUNJTUFMOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmlnRGVjaW1hbCBiZCA9ICgoU2ltcGxlVmFsdWUpdikuZ2V0QmlnRGVjaW1hbFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9wcmVwYXJlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9CaWdEZWNpbWFsKGJkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19BTllfVVJJOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdXJpID0gdi5nZXRTdHJpbmdWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3ByZXBhcmUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldF90ZXh0KHVyaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX05PVEFUSU9OOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcyA9IHYuZ2V0U3RyaW5nVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldF9wcmVwYXJlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRfbm90YXRpb24ocyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RVUkFUSU9OOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBHRHVyYXRpb24gZ2QgPSAoKFNpbXBsZVZhbHVlKXYpLmdldEdEdXJhdGlvblZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRfcHJlcGFyZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0X0dEdXJhdGlvbihnZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RBVEVfVElNRToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19USU1FOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RBVEU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19ZRUFSX01PTlRIOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfWUVBUjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX01PTlRIX0RBWToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX0RBWToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX01PTlRIOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBHRGF0ZSBnZCA9ICgoU2ltcGxlVmFsdWUpdikuZ2V0R0RhdGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0X3ByZXBhcmUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldF9HRGF0ZShnZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1NUUklORzoKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHMgPSB2LmdldFN0cmluZ1ZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRfcHJlcGFyZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0X1N0cmluZyhzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfQU5ZX1NJTVBMRToKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHB1c2hlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdi5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZXNwYWNlQ29udGV4dC5wdXNoKG5ldyBOYW1lc3BhY2VDb250ZXh0KHYpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfcHJlcGFyZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfeG1sYW55c2ltcGxlKHYpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHVzaGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZXNwYWNlQ29udGV4dC5wb3AoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNldF9jb21taXQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47IC8vIHByaW1pdGl2ZSBub2RlIHRyZWUgY29weSBoYW5kbGVkLgotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQ29tcGxleCB0eXBlIHVuZXhwZWN0ZWQiKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFR5cGVTdG9yZVVzZXIgc2V0dGVySGVscGVyICggWG1sT2JqZWN0QmFzZSBzcmMgKQotICAgIHsKLSAgICAgICAgY2hlY2tfb3JwaGFuZWQoKTsKLQotICAgICAgICBzcmMuY2hlY2tfb3JwaGFuZWQoKTsKLQotICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIGdldF9zdG9yZSgpLmNvcHlfY29udGVudHNfZnJvbSggc3JjLmdldF9zdG9yZSgpICkuCi0gICAgICAgICAgICAgICAgZ2V0X3N0b3JlKCkuY2hhbmdlX3R5cGUoIHNyYy5zY2hlbWFUeXBlKCkgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgWG1sT2JqZWN0IHNldChYbWxPYmplY3Qgc3JjKQotICAgIHsKLSAgICAgICAgaWYgKGlzSW1tdXRhYmxlKCkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDYW5ub3Qgc2V0IHRoZSB2YWx1ZSBvZiBhbiBpbW11dGFibGUgWG1sT2JqZWN0Iik7Ci0KLSAgICAgICAgWG1sT2JqZWN0QmFzZSBvYmogPSB1bmRlcmx5aW5nKHNyYyk7Ci0KLSAgICAgICAgVHlwZVN0b3JlVXNlciBuZXdPYmogPSB0aGlzOwotCi0gICAgICAgIGlmIChvYmogPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgc2V0TmlsKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChvYmouaXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgIHNldChvYmouc3RyaW5nVmFsdWUoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbGVhbiBhY3F1aXJlZCA9IGZhbHNlOwotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1vbml0b3IoKSA9PSBvYmoubW9uaXRvcigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld09iaiA9IHNldHRlckhlbHBlciggb2JqICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gYWJvdXQgdG8gZ3JhYiB0d28gbG9ja3M6IGRvbid0IGRlYWRsb2NrIG91cnNlbHZlcwotICAgICAgICAgICAgICAgICAgICBHbG9iYWxMb2NrLmFjcXVpcmUoKTsKLSAgICAgICAgICAgICAgICAgICAgYWNxdWlyZWQgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobW9uaXRvcigpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG9iai5tb25pdG9yKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsTG9jay5yZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNxdWlyZWQgPSBmYWxzZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld09iaiA9IHNldHRlckhlbHBlciggb2JqICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWG1sUnVudGltZUV4Y2VwdGlvbihlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbmFsbHkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoYWNxdWlyZWQpCi0gICAgICAgICAgICAgICAgICAgIEdsb2JhbExvY2sucmVsZWFzZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIChYbWxPYmplY3QpIG5ld09iajsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfbGlzdChMaXN0IGxpc3QpCi0gICAgICAgIHsgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X2Jvb2xlYW4oYm9vbGVhbiB2KQotICAgICAgICB7IHRocm93IG5ldyBYbWxWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb24oKTsgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldF9ieXRlKGJ5dGUgdikKLSAgICAgICAgeyBzZXRfaW50KChpbnQpIHYpOyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X3Nob3J0KHNob3J0IHYpCi0gICAgICAgIHsgc2V0X2ludCgoaW50KSB2KTsgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldF9pbnQoaW50IHYpCi0gICAgICAgIHsgc2V0X2xvbmcoKGxvbmcpIHYpOyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X2xvbmcobG9uZyB2KQotICAgICAgICB7IHNldF9CaWdJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZih2KSk7IH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfY2hhcihjaGFyIHYpCi0gICAgICAgIHsgc2V0X1N0cmluZyhDaGFyYWN0ZXIudG9TdHJpbmcodikpOyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X2Zsb2F0KGZsb2F0IHYpCi0gICAgICAgIHsgc2V0X0JpZ0RlY2ltYWwobmV3IEJpZ0RlY2ltYWwodikpOyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X2RvdWJsZShkb3VibGUgdikKLSAgICAgICAgeyBzZXRfQmlnRGVjaW1hbChuZXcgQmlnRGVjaW1hbCh2KSk7IH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHNldF9lbnVtKFN0cmluZ0VudW1BYnN0cmFjdEJhc2UgZSkKLSAgICAgICAgeyB0aHJvdyBuZXcgWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uKCk7IH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHNldF9CeXRlQXJyYXkoYnl0ZVtdIGIpCi0gICAgICAgIHsgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X2I2NChieXRlW10gYikKLSAgICAgICAgeyBzZXRfQnl0ZUFycmF5KGIpOyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X2hleChieXRlW10gYikKLSAgICAgICAgeyBzZXRfQnl0ZUFycmF5KGIpOyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X0JpZ0ludGVnZXIoQmlnSW50ZWdlciB2KQotICAgICAgICB7IHNldChuZXcgQmlnRGVjaW1hbCh2KSk7IH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfQmlnRGVjaW1hbChCaWdEZWNpbWFsIHYpCi0gICAgICAgIHsgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X0RhdGUoRGF0ZSB2KQotICAgICAgICB7IHRocm93IG5ldyBYbWxWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb24oKTsgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldF9DYWxlbmRhcihDYWxlbmRhciB2KQotICAgICAgICB7IHRocm93IG5ldyBYbWxWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb24oKTsgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldF9HRGF0ZShHRGF0ZVNwZWNpZmljYXRpb24gdikKLSAgICAgICAgeyB0aHJvdyBuZXcgWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uKCk7IH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfR0R1cmF0aW9uKEdEdXJhdGlvblNwZWNpZmljYXRpb24gdikKLSAgICAgICAgeyB0aHJvdyBuZXcgWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uKCk7IH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfQ29tcGxleFhtbChYbWxPYmplY3QgdikKLSAgICAgICAgeyB0aHJvdyBuZXcgWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uKCk7IH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfUU5hbWUoUU5hbWUgdikKLSAgICAgICAgeyB0aHJvdyBuZXcgWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uKCk7IH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHNldF9ub3RhdGlvbihTdHJpbmcgdikKLSAgICAgICAgeyB0aHJvdyBuZXcgWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uKCk7IH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHNldF94bWxhbnlzaW1wbGUoWG1sQW55U2ltcGxlVHlwZSB2KQotICAgICAgICB7IHNldF9TdHJpbmcodi5nZXRTdHJpbmdWYWx1ZSgpKTsgfQotCi0gICAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGNvbXBhcmFibGVfdmFsdWVfc3BhY2VzKFNjaGVtYVR5cGUgdDEsIFNjaGVtYVR5cGUgdDIpCi0gICAgewotICAgICAgICBhc3NlcnQodDEuZ2V0U2ltcGxlVmFyaWV0eSgpICE9IFNjaGVtYVR5cGUuVU5JT04gJiYgdDIuZ2V0U2ltcGxlVmFyaWV0eSgpICE9IFNjaGVtYVR5cGUuVU5JT04pOwotCi0gICAgICAgIGlmICghdDEuaXNTaW1wbGVUeXBlKCkgJiYgIXQyLmlzU2ltcGxlVHlwZSgpKQotICAgICAgICAgICAgcmV0dXJuICh0MS5nZXRDb250ZW50VHlwZSgpID09IHQyLmdldENvbnRlbnRUeXBlKCkpOwotCi0gICAgICAgIGlmICghdDEuaXNTaW1wbGVUeXBlKCkgfHwgIXQyLmlzU2ltcGxlVHlwZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICh0MS5nZXRTaW1wbGVWYXJpZXR5KCkgPT0gU2NoZW1hVHlwZS5MSVNUICYmIHQyLmdldFNpbXBsZVZhcmlldHkoKSA9PSBTY2hlbWFUeXBlLkxJU1QpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAodDEuZ2V0U2ltcGxlVmFyaWV0eSgpID09IFNjaGVtYVR5cGUuTElTVCB8fCB0Mi5nZXRTaW1wbGVWYXJpZXR5KCkgPT0gU2NoZW1hVHlwZS5MSVNUKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiAodDEuZ2V0UHJpbWl0aXZlVHlwZSgpLmVxdWFscyh0Mi5nZXRQcmltaXRpdmVUeXBlKCkpKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gdmFsdWVFcXVhbHNJbXBsKFhtbE9iamVjdCB4bWxvYmopCi0gICAgewotICAgICAgICBjaGVja19kYXRlZCgpOwotCi0gICAgICAgIFNjaGVtYVR5cGUgdHlwZXRoaXMgPSBpbnN0YW5jZVR5cGUoKTsKLSAgICAgICAgU2NoZW1hVHlwZSB0eXBlb3RoZXIgPSAoKFNpbXBsZVZhbHVlKXhtbG9iaikuaW5zdGFuY2VUeXBlKCk7Ci0KLSAgICAgICAgaWYgKHR5cGV0aGlzID09IG51bGwgJiYgdHlwZW90aGVyID09IG51bGwpIC8vIGRldGVjdHMgbmlsCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAodHlwZXRoaXMgPT0gbnVsbCB8fCB0eXBlb3RoZXIgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoIWNvbXBhcmFibGVfdmFsdWVfc3BhY2VzKHR5cGV0aGlzLCB0eXBlb3RoZXIpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICh4bWxvYmouc2NoZW1hVHlwZSgpLmdldFNpbXBsZVZhcmlldHkoKSA9PSBTY2hlbWFUeXBlLlVOSU9OKQotICAgICAgICAgICAgcmV0dXJuICh1bmRlcmx5aW5nKHhtbG9iaikpLmVxdWFsX3RvKHRoaXMpOwotCi0gICAgICAgIHJldHVybiBlcXVhbF90byh4bWxvYmopOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIHZhbHVlRXF1YWxzKFhtbE9iamVjdCB4bWxvYmopCi0gICAgewotICAgICAgICBib29sZWFuIGFjcXVpcmVkID0gZmFsc2U7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoeG1sb2JqLmlzSW1tdXRhYmxlKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVFcXVhbHNJbXBsKHhtbG9iaik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoeG1sb2JqLm1vbml0b3IoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlRXF1YWxzSW1wbCh4bWxvYmopOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICh4bWxvYmouaXNJbW11dGFibGUoKSB8fCBtb25pdG9yKCkgPT0geG1sb2JqLm1vbml0b3IoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobW9uaXRvcigpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVFcXVhbHNJbXBsKHhtbG9iaik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR2xvYmFsTG9jay5hY3F1aXJlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGFjcXVpcmVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoeG1sb2JqLm1vbml0b3IoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHbG9iYWxMb2NrLnJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3F1aXJlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZUVxdWFsc0ltcGwoeG1sb2JqKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgWG1sUnVudGltZUV4Y2VwdGlvbihlKTsKLSAgICAgICAgfQotICAgICAgICBmaW5hbGx5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChhY3F1aXJlZCkKLSAgICAgICAgICAgICAgICBHbG9iYWxMb2NrLnJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEltcGxlbWVudHMgQ29tcGFyYWJsZS4gVGhpcyBjb21wYXJlVG8gaXMgaW5jb25zaXN0ZW50IHdpdGgKLSAgICAgKiBlcXVhbHMgdW5sZXNzIGlzSW1tdXRhYmxlKCkgaXMgdHJ1ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgaW50IGNvbXBhcmVUbyhPYmplY3Qgb2JqKQotICAgIHsKLSAgICAgICAgaW50IHJlc3VsdCA9IGNvbXBhcmVWYWx1ZSgoWG1sT2JqZWN0KW9iaik7IC8vIGNhbiB0aHJvdyBDbGFzc0Nhc3QKLSAgICAgICAgaWYgKHJlc3VsdCA9PSAyKQotICAgICAgICAgICAgdGhyb3cgbmV3IENsYXNzQ2FzdEV4Y2VwdGlvbigpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFsbG93ZWQgdG8gcmV0dXJuIDIgZm9yIGluY29tcGFyYWJsZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIGZpbmFsIGludCBjb21wYXJlVmFsdWVJbXBsKFhtbE9iamVjdCB4bWxvYmopCi0gICAgewotICAgICAgICBTY2hlbWFUeXBlIHR5cGUxLCB0eXBlMjsKLQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgdHlwZTEgPSBpbnN0YW5jZVR5cGUoKTsKLSAgICAgICAgICAgIHR5cGUyID0gKChTaW1wbGVWYWx1ZSl4bWxvYmopLmluc3RhbmNlVHlwZSgpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChYbWxWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIDI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodHlwZTEgPT0gbnVsbCAmJiB0eXBlMiA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGlmICh0eXBlMSA9PSBudWxsIHx8IHR5cGUyID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gMjsKLQotICAgICAgICBpZiAoIXR5cGUxLmlzU2ltcGxlVHlwZSgpIHx8IHR5cGUxLmlzVVJUeXBlKCkpCi0gICAgICAgICAgICByZXR1cm4gMjsKLQotICAgICAgICBpZiAoIXR5cGUyLmlzU2ltcGxlVHlwZSgpIHx8IHR5cGUyLmlzVVJUeXBlKCkpCi0gICAgICAgICAgICByZXR1cm4gMjsKLQotICAgICAgICB0eXBlMSA9IHR5cGUxLmdldFByaW1pdGl2ZVR5cGUoKTsKLSAgICAgICAgdHlwZTIgPSB0eXBlMi5nZXRQcmltaXRpdmVUeXBlKCk7Ci0KLSAgICAgICAgLy8gRGlmZmVyZW50IHZhbHVlIHNwYWNlczogZGlmZmVyZW50Ci0gICAgICAgIGlmICh0eXBlMS5nZXRCdWlsdGluVHlwZUNvZGUoKSAhPSB0eXBlMi5nZXRCdWlsdGluVHlwZUNvZGUoKSkKLSAgICAgICAgICAgIHJldHVybiAyOwotCi0gICAgICAgIC8vIG5vdyB3ZSdsbCBkZXBlbmQgb24gb3VyIGltcGwgY2xhc3MgdG8gZG8gdGhlIHdvcmsKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVfdG8oeG1sb2JqKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgaW50IGNvbXBhcmVWYWx1ZShYbWxPYmplY3QgeG1sb2JqKQotICAgIHsKLSAgICAgICAgaWYgKHhtbG9iaiA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIDI7Ci0KLSAgICAgICAgYm9vbGVhbiBhY3F1aXJlZCA9IGZhbHNlOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzSW1tdXRhYmxlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHhtbG9iai5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVWYWx1ZUltcGwoeG1sb2JqKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkICh4bWxvYmoubW9uaXRvcigpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZVZhbHVlSW1wbCh4bWxvYmopOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICh4bWxvYmouaXNJbW11dGFibGUoKSB8fCBtb25pdG9yKCkgPT0geG1sb2JqLm1vbml0b3IoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobW9uaXRvcigpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZVZhbHVlSW1wbCh4bWxvYmopOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdsb2JhbExvY2suYWNxdWlyZSgpOwotICAgICAgICAgICAgICAgICAgICBhY3F1aXJlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobW9uaXRvcigpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKHhtbG9iai5tb25pdG9yKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsTG9jay5yZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNxdWlyZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZVZhbHVlSW1wbCh4bWxvYmopOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBYbWxSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsbHkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGFjcXVpcmVkKQotICAgICAgICAgICAgICAgIEdsb2JhbExvY2sucmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAgfQotICAgIC8qKgotICAgICAqIFRoaXMgaW1wbGVtZW50YXRpb24gb2YgY29tcGFyZV90byBpcyBhbGxvd2VkIHRvIGRvIHR3bwotICAgICAqIHVudXN1YWwgdGhpbmdzOgotICAgICAqICgxKSBpdCBjYW4gYXNzdW1lIHRoYXQgdGhlIHhtbG9iaiBwYXNzZWQgaGFzIGEgcHJpbWl0aXZlCi0gICAgICogICAgIHR5cGUgdW5kZXJseWluZyB0aGUgaW5zdGFuY2UgdHlwZSB0aGF0IG1hdGNoZXMgdGhlCi0gICAgICogICAgIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCB0aGF0IG5laXRoZXIgaXMgbmlsLgotICAgICAqICgyKSBpdCBpcyBhbGxvd2VkIHRvIHJldHVybiAyIGZvciAiaW5jb21wYXJhYmxlIjsKLSAgICAgKiAgICAgaXQgc2hvdWxkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24uCi0gICAgICovCi0gICAgcHJvdGVjdGVkIGludCBjb21wYXJlX3RvKFhtbE9iamVjdCB4bWxvYmopCi0gICAgewotICAgICAgICBpZiAoZXF1YWxfdG8oeG1sb2JqKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gMjsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgYm9vbGVhbiBlcXVhbF90byhYbWxPYmplY3QgeG1sb2JqKTsKLQotICAgIHByb3RlY3RlZCBhYnN0cmFjdCBpbnQgdmFsdWVfaGFzaF9jb2RlKCk7Ci0KLSAgICBwdWJsaWMgaW50IHZhbHVlSGFzaENvZGUoKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZV9oYXNoX2NvZGUoKTsKLSAgICAgICAgfQotICAgIH0KLQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNJbnN0YW5jZU9mKFNjaGVtYVR5cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIFNjaGVtYVR5cGUgbXlUeXBlOwotCi0gICAgICAgIGlmICh0eXBlLmdldFNpbXBsZVZhcmlldHkoKSAhPSBTY2hlbWFUeXBlLlVOSU9OKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKG15VHlwZSA9IGluc3RhbmNlVHlwZSgpOyBteVR5cGUgIT0gbnVsbDsgbXlUeXBlID0gbXlUeXBlLmdldEJhc2VUeXBlKCkpCi0gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gbXlUeXBlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNldCBjdHlwZXMgPSBuZXcgSGFzaFNldChBcnJheXMuYXNMaXN0KHR5cGUuZ2V0VW5pb25Db25zdGl0dWVudFR5cGVzKCkpKTsKLSAgICAgICAgICAgIGZvciAobXlUeXBlID0gaW5zdGFuY2VUeXBlKCk7IG15VHlwZSAhPSBudWxsOyBteVR5cGUgPSBteVR5cGUuZ2V0QmFzZVR5cGUoKSkKLSAgICAgICAgICAgICAgICBpZiAoY3R5cGVzLmNvbnRhaW5zKG15VHlwZSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopCi0gICAgewotICAgICAgICBpZiAoIWlzSW1tdXRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gc3VwZXIuZXF1YWxzKG9iaik7Ci0KLSAgICAgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgWG1sT2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBYbWxPYmplY3QgeG1sb2JqID0gKFhtbE9iamVjdClvYmo7Ci0gICAgICAgIGlmICgheG1sb2JqLmlzSW1tdXRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIHZhbHVlRXF1YWxzKHhtbG9iaik7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIGludCBoYXNoQ29kZSgpCi0gICAgewotICAgICAgICBpZiAoIWlzSW1tdXRhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gc3VwZXIuaGFzaENvZGUoKTsKLQotICAgICAgICBzeW5jaHJvbml6ZWQgKG1vbml0b3IoKSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzTmlsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgIHJldHVybiB2YWx1ZV9oYXNoX2NvZGUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoaXMgbWV0aG9kIGNhbiB3cml0ZVJlcGxhY2UgZWl0aGVyIGFuIHVud3JhcHBlZCBYbWxPYmplY3RCYXNlCi0gICAgICogb3IgYW4gWEJlYW4gcHJveHkuICBBICJ0cnVlIiBhcmd1bWVudCBtZWFucyB1bndyYXBwZWQuCi0gICAgICoKLSAgICAgKiBUaGUgc2VyaWFsaXphdGlvbiBzdHJhdGVneSBmb3IgWG1sT2JqZWN0cyBpcyB0aGlzOgotICAgICAqCi0gICAgICogKDEpIE9ubHkgdGhlIHJvb3QgWG1sT2JqZWN0IGZvciBhIGRvY3VtZW50IGFjdHVhbGx5IGdldHMKLSAgICAgKiAgICAgZnVsbHkgc2VyaWFsaXplZDsgaXQgaXMgc2VyaWFsaXplZCBhcyBhIFNlcmlhbGl6ZWRSb290T2JqZWN0LAotICAgICAqICAgICB3aGljaCBzaW1wbHkgc2F2ZXMgaXRzZWxmIGFzIFhNTCB0ZXh0LgotICAgICAqCi0gICAgICogKDIpIEludGVyaW9yIFhtbE9iamVjdHMgZ2V0IHNlcmlhbGl6ZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlCi0gICAgICogICAgIHJvb3QgWG1sT2JqZWN0IGZvciB0aGVpciBkb2N1bWVudCwgcGx1cyBhbiBpbnRlZ2VyIHdoaWNoCi0gICAgICogICAgIGluZGljYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIFhtbE9iamVjdCB3aXRoaW4gdGhlIG93bmVyCi0gICAgICogICAgIGRvY3VtZW50LiBUaGlzIHBhaXIgaXMgc3RvcmVkIGFzIGEgU2VyaWFsaXplZEludGVyaW9yT2JqZWN0LgotICAgICAqCi0gICAgICogQm90aCBvYmplY3RzIGNhbiBiZSBtYWtlZCBhcyB3cmFwcGVkIG9yIHVud3JhcHBlZC4gSWYgd3JhcHBlZCwKLSAgICAgKiB0aGVuIHRoZSBwcm94eSBpcyByZXR1cm5lZCB3aGVuIGRlc2VyaWFsaXppbmc7IGlmIHVud3JhcHBlZCwgdGhlbgotICAgICAqIHRoZSBwcm94eSBpcyBzdHJpcHBlZCB3aGVuIGRlc2VyaWFsaXppbmcuCi0gICAgICovCi0gICAgcHVibGljIE9iamVjdCB3cml0ZVJlcGxhY2UoKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc1Jvb3RYbWxPYmplY3QoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNlcmlhbGl6ZWRSb290T2JqZWN0KHRoaXMpOwotCi0gICAgICAgICAgICByZXR1cm4gbmV3IFNlcmlhbGl6ZWRJbnRlcmlvck9iamVjdCh0aGlzLCBnZXRSb290WG1sT2JqZWN0KCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGF0IHRoZSByb290IG9mIHRoZSBkb2N1bWVudC4KLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNSb290WG1sT2JqZWN0KCkKLSAgICB7Ci0gICAgICAgIFhtbEN1cnNvciBjdXIgPSBuZXdDdXJzb3IoKTsKLSAgICAgICAgaWYgKGN1ciA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gIWN1ci50b1BhcmVudCgpOwotICAgICAgICBjdXIuZGlzcG9zZSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHJvb3QgWG1sT2JqZWN0IGZvciB0aGlzIGRvY3VtZW50LgotICAgICAqLwotICAgIHByaXZhdGUgWG1sT2JqZWN0IGdldFJvb3RYbWxPYmplY3QoKQotICAgIHsKLSAgICAgICAgWG1sQ3Vyc29yIGN1ciA9IG5ld0N1cnNvcigpOwotICAgICAgICBpZiAoY3VyID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gdGhpczsKLSAgICAgICAgY3VyLnRvU3RhcnREb2MoKTsKLSAgICAgICAgWG1sT2JqZWN0IHJlc3VsdCA9IGN1ci5nZXRPYmplY3QoKTsKLSAgICAgICAgY3VyLmRpc3Bvc2UoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXJpYWxpemFibGUgcmV3cml0ZSBvYmplY3QgdGhhdCBrbm93cyBob3cgdG8gcmVzb2x2ZQotICAgICAqIHRvIGFuIFhtbE9iamVjdEJhc2Ugb3IgYSBwcm94eSBmb3IgdGhlIHJvb3Qgb2JqZWN0IG9mCi0gICAgICogYSBkb2N1bWVudC4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBTZXJpYWxpemVkUm9vdE9iamVjdCBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZQotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMTsKLQotICAgICAgICB0cmFuc2llbnQgQ2xhc3MgX3hiZWFuQ2xhc3M7Ci0gICAgICAgIHRyYW5zaWVudCBYbWxPYmplY3QgX2ltcGw7Ci0KLSAgICAgICAgcHJpdmF0ZSBTZXJpYWxpemVkUm9vdE9iamVjdCgpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgU2VyaWFsaXplZFJvb3RPYmplY3QoWG1sT2JqZWN0IGltcGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIF94YmVhbkNsYXNzID0gaW1wbC5zY2hlbWFUeXBlKCkuZ2V0SmF2YUNsYXNzKCk7Ci0gICAgICAgICAgICBfaW1wbCA9IGltcGw7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgd3JpdGVPYmplY3QoT2JqZWN0T3V0cHV0U3RyZWFtIG91dCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dC53cml0ZU9iamVjdChfeGJlYW5DbGFzcyk7Ci0gICAgICAgICAgICAvLyB0aGUgZmlyc3Qgc2hvcnQgaXMgd3JpdHRlbiBvdXQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5Ci0gICAgICAgICAgICAvLyBpdCB3aWxsIGFsd2F5cyBiZSB6ZXJvIGZvciBvYmplY3RzIHdyaXR0ZW4gd2l0aAotICAgICAgICAgICAgLy8gdGhpcyBjb2RlLCBidXQgaXQgdXNlZCB0byBiZSB0aGUgZmlyc3QgMiBieXRlcyBvZiB0aGUKLSAgICAgICAgICAgIC8vIHdyaXRlVVRGKCkgbWV0aG9kCi0gICAgICAgICAgICBvdXQud3JpdGVTaG9ydCgoc2hvcnQpMCk7Ci0gICAgICAgICAgICBvdXQud3JpdGVTaG9ydChNQUpPUl9WRVJTSU9OX05VTUJFUik7Ci0gICAgICAgICAgICBvdXQud3JpdGVTaG9ydChNSU5PUl9WRVJTSU9OX05VTUJFUik7Ci0gICAgICAgICAgICAvLyBDUjEyMjQwMSAtIG5lZWQgdG8gdXNlIHdyaXRlT2JqZWN0IGluc3RlYWQgb2Ygd3JpdGVVVEYKLSAgICAgICAgICAgIC8vIGZvciB4bWxUZXh0IGFzIHdyaXRlVVRGIGhhcyBhIGxlbmd0aCBsaW1pdGF0aW9uIG9mCi0gICAgICAgICAgICAvLyA2NTUzNSBieXRlcwotICAgICAgICAgICAgU3RyaW5nIHhtbFRleHQgPSBfaW1wbC54bWxUZXh0KCk7Ci0gICAgICAgICAgICBvdXQud3JpdGVPYmplY3QoeG1sVGV4dCk7Ci0gICAgICAgICAgICBvdXQud3JpdGVCb29sZWFuKGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCByZWFkT2JqZWN0KE9iamVjdElucHV0U3RyZWFtIGluKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gcmVhZCBjbGFzcyBvYmplY3QgZmlyc3QgLSB0aGlzIGlzCi0gICAgICAgICAgICAgICAgLy8gZmlyc3QganVzdCBmb3IgaGlzdG9yaWNhbCByZWFzb25zIC0gcmVhbGx5Ci0gICAgICAgICAgICAgICAgLy8gaXQgd291bGQgYmUgYmV0dGVyIHRvIGhhdmUgdGhlIHZlcnNpb24gbnVtYmVycwotICAgICAgICAgICAgICAgIC8vIGZpcnN0Ci0gICAgICAgICAgICAgICAgX3hiZWFuQ2xhc3MgPSAoQ2xhc3MpaW4ucmVhZE9iamVjdCgpOwotCi0gICAgICAgICAgICAgICAgaW50IHV0ZkJ5dGVzID0gaW4ucmVhZFVuc2lnbmVkU2hvcnQoKTsKLQotICAgICAgICAgICAgICAgIC8vIGRldGVybWluZSB2ZXJzaW9uIG51bWJlcnMKLSAgICAgICAgICAgICAgICAvLyBpZiB1dGZCeXRlcyBpcyBub24temVybyB0aGVuIHdlIGRlZmF1bHQgdG8gMC4wCi0gICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGV4cGVjdCBtYWpvciBhbmQgbWlub3IgdmVyc2lvbiBudW1iZXJzCi0gICAgICAgICAgICAgICAgLy8gdG8gYmUgbmV4dCBlbnRyaWVzIGluIHN0cmVhbQotICAgICAgICAgICAgICAgIGludCBtYWpvclZlcnNpb25OdW0gPSAwOwotICAgICAgICAgICAgICAgIGludCBtaW5vclZlcnNpb25OdW0gPSAwOwotICAgICAgICAgICAgICAgIGlmICh1dGZCeXRlcyA9PSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWFqb3JWZXJzaW9uTnVtID0gaW4ucmVhZFVuc2lnbmVkU2hvcnQoKTsKLSAgICAgICAgICAgICAgICAgICAgbWlub3JWZXJzaW9uTnVtID0gaW4ucmVhZFVuc2lnbmVkU2hvcnQoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBTdHJpbmcgeG1sVGV4dCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChtYWpvclZlcnNpb25OdW0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IC8vIG9yaWdpbmFsLCB1bm51bWJlcmVkIHZlcnNpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtaW5vclZlcnNpb25OdW0gaXMgYWx3YXlzIHplcm8KLSAgICAgICAgICAgICAgICAgICAgICAgIHhtbFRleHQgPSByZWFkT2JqZWN0VjAoaW4sIHV0ZkJ5dGVzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluLnJlYWRCb29sZWFuKCk7IC8vIGlnbm9yZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobWlub3JWZXJzaW9uTnVtKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sVGV4dCA9IChTdHJpbmcpaW4ucmVhZE9iamVjdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbi5yZWFkQm9vbGVhbigpOyAvLyBpZ25vcmVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJEZXNlcmlhbGl6YXRpb24gZXJyb3I6ICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2ZXJzaW9uIG51bWJlciAiICsgbWFqb3JWZXJzaW9uTnVtICsgIi4iICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5vclZlcnNpb25OdW0gKyAiIG5vdCBzdXBwb3J0ZWQuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJEZXNlcmlhbGl6YXRpb24gZXJyb3I6ICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmVyc2lvbiBudW1iZXIgIiArIG1ham9yVmVyc2lvbk51bSArICIuIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbm9yVmVyc2lvbk51bSArICIgbm90IHN1cHBvcnRlZC4iKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBYbWxPcHRpb25zIG9wdHMgPSBuZXcgWG1sT3B0aW9ucygpLnNldERvY3VtZW50VHlwZShYbWxCZWFucy50eXBlRm9yQ2xhc3MoX3hiZWFuQ2xhc3MpKTsKLSAgICAgICAgICAgICAgICBfaW1wbCA9IFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoeG1sVGV4dCwgbnVsbCwgb3B0cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgKElPRXhjZXB0aW9uKShuZXcgSU9FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpLmluaXRDYXVzZShlKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyB0aGlzIG1ldGhvZCBpcyBmb3IgcmVhZGluZyB0aGUgVVRGLTggU3RyaW5nIHRoYXQgdXNlZCB0byBiZQotICAgICAgICAvLyB3cml0dGVuIG91dCBmb3IgYSBzZXJpYWxpemVkIFhtbE9iamVjdCBhY2NvcmRpbmcgdG8gdGhlCi0gICAgICAgIC8vIG9yaWdpbmFsIGZvcm1hdCBiZWZvcmUgdGhpcyBmaXgsIGkuZS4gaXQgZXhwZWN0cyBpdAotICAgICAgICAvLyB0byBoYXZlIGJlZW4gd3JpdHRlbiB1c2luZyB0aGUgZm9sbG93aW5nIGFsZ29yaXRobToKLSAgICAgICAgLy8KLSAgICAgICAgLy8gd3JpdGVPYmplY3QoQ2xhc3Mgb2JqZWN0KQotICAgICAgICAvLyB3cml0ZVVURih4bWxUZXh0IG9mIG9iamVjdCBhcyBTdHJpbmcpCi0gICAgICAgIC8vIHdyaXRlQm9vbGVhbigpCi0gICAgICAgIC8vCi0gICAgICAgIC8vIHRoaXMgbWV0aG9kIGlzIHBhc3NlZCB0aGUgb3JpZ2luYWwgaW5wdXQgc3RyZWFtIHBvc2l0aW9uZWQgYXMgdGhvdWdoCi0gICAgICAgIC8vIGl0IGhhZCBqdXN0IHJlYWQgdGhlIGNsYXNzIG9iamVjdCBwbHVzIHRoZSBuZXh0IDIgYnl0ZXMuIFRob3NlIDIKLSAgICAgICAgLy8gYnl0ZXMgYXJlIGludGVycHJldGVkIGFzIGFuIHVuc2lnbmVkIHNob3J0IHNheWluZyBob3cgbWFueSBtb3JlCi0gICAgICAgIC8vIGJ5dGVzIHRoZXJlIGFyZSByZXByZXNlbnRpbmcgdGhlIGJ5dGVzIG9mIHRoZSBVVEYtOC1mb3JtYXR0ZWQgU3RyaW5nOwotICAgICAgICAvLyB0aGlzIHZhbHVlIGlzIHBhc3NlZCBpbiBhcyB0aGUgYXJndW1lbnQgdXRmQnl0ZXMKLSAgICAgICAgcHJpdmF0ZSBTdHJpbmcgcmVhZE9iamVjdFYwKE9iamVjdElucHV0U3RyZWFtIGluLCBpbnQgdXRmQnl0ZXMpCi0gICAgICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGFsbG93IGFuIGV4dHJhIDIgYnl0ZXMgdXAgZnJvbnQgZm9yIHRoZSB1bnNpZ25lZCBzaG9ydAotICAgICAgICAgICAgYnl0ZVtdIGJBcnJheSA9IG5ldyBieXRlW3V0ZkJ5dGVzKzJdOwotCi0gICAgICAgICAgICAvLyBmb3IgZm9ybWF0IG9mIHRoZXNlIGZpcnN0IDIgYnl0ZXMgc2VlCi0gICAgICAgICAgICAvLyBKYXZhIEFQSSBkb2NzIC0gRGF0YU91dHB1dFN0cmVhbS53cml0ZVNob3J0KCkKLSAgICAgICAgICAgIGJBcnJheVswXSA9IChieXRlKSggMHhmZiAmICh1dGZCeXRlcyA+PiA4KSApOwotICAgICAgICAgICAgYkFycmF5WzFdID0gKGJ5dGUpKCAweGZmICYgdXRmQnl0ZXMgKTsKLQotICAgICAgICAgICAgLy8gcmVhZCB0aGUgbmV4dCBudW1CeXRlcyBieXRlcyBmcm9tIHRoZSBpbnB1dCBzdHJlYW0KLSAgICAgICAgICAgIC8vIGludG8gdGhlIGJ5dGUgYXJyYXkgc3RhcnRpbmcgYXQgb2Zmc2V0IDI7IHRoaXMgbWF5Ci0gICAgICAgICAgICAvLyB0YWtlIG11bHRpcGxlIGNhbGxzIHRvIHJlYWQoKQotICAgICAgICAgICAgaW50IHRvdGFsQnl0ZXNSZWFkID0gMDsKLSAgICAgICAgICAgIGludCBudW1SZWFkOwotICAgICAgICAgICAgd2hpbGUgKHRvdGFsQnl0ZXNSZWFkIDwgdXRmQnl0ZXMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbnVtUmVhZCA9Ci0gICAgICAgICAgICAgICAgICAgIGluLnJlYWQoYkFycmF5LCAyK3RvdGFsQnl0ZXNSZWFkLCB1dGZCeXRlcy10b3RhbEJ5dGVzUmVhZCk7Ci0gICAgICAgICAgICAgICAgaWYgKG51bVJlYWQgPT0gLTEpIC8vIHJlYWNoZWQgZW5kIG9mIHN0cmVhbQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIHRvdGFsQnl0ZXNSZWFkICs9IG51bVJlYWQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0b3RhbEJ5dGVzUmVhZCAhPSB1dGZCeXRlcykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIkVycm9yIHJlYWRpbmcgYmFja3dhcmRzIGNvbXBhdGlibGUgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAiWG1sT2JqZWN0OiBudW1iZXIgb2YgYnl0ZXMgcmVhZCAoIiArIHRvdGFsQnl0ZXNSZWFkICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIpICE9IG51bWJlciBleHBlY3RlZCAoIiArIHV0ZkJ5dGVzICsgIikiICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIG5vdyBzZXQgdXAgYSBEYXRhSW5wdXRTdHJlYW0gdG8gcmVhZCB0aG9zZQotICAgICAgICAgICAgLy8gYnl0ZXMgYXMgYSBVVEYtOCBTdHJpbmcgaS5lLiBhcyB0aG91Z2ggd2UnZCBuZXZlcgotICAgICAgICAgICAgLy8gcmVhZCB0aGUgZmlyc3QgMiBieXRlcyBmcm9tIHRoZSBvcmlnaW5hbCBzdHJlYW0KLSAgICAgICAgICAgIERhdGFJbnB1dFN0cmVhbSBkaXMgPSBudWxsOwotICAgICAgICAgICAgU3RyaW5nIHN0ciA9IG51bGw7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkaXMgPSBuZXcgRGF0YUlucHV0U3RyZWFtKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShiQXJyYXkpKTsKLSAgICAgICAgICAgICAgICBzdHIgPSBkaXMucmVhZFVURigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmluYWxseQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChkaXMgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgZGlzLmNsb3NlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBzdHI7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIE9iamVjdCByZWFkUmVzb2x2ZSgpIHRocm93cyBPYmplY3RTdHJlYW1FeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIF9pbXBsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2VyaWFsaXphYmxlIHJld3JpdGUgb2JqZWN0IHRoYXQga25vd3MgaG93IHRvIHJlc29sdmUKLSAgICAgKiB0byBhbiBYbWxPYmplY3RCYXNlIG9yIGEgcHJveHkgZm9yIGFuIGludGVyaW9yIHBvc2l0aW9uCi0gICAgICogd2l0aGluIGEgZG9jdW1lbnQuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU2VyaWFsaXplZEludGVyaW9yT2JqZWN0IGltcGxlbWVudHMgU2VyaWFsaXphYmxlCi0gICAgewotICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxOwotCi0gICAgICAgIHRyYW5zaWVudCBYbWxPYmplY3QgX2ltcGw7Ci0gICAgICAgIHRyYW5zaWVudCBYbWxPYmplY3QgX3Jvb3Q7Ci0KLSAgICAgICAgcHJpdmF0ZSBTZXJpYWxpemVkSW50ZXJpb3JPYmplY3QoKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIFNlcmlhbGl6ZWRJbnRlcmlvck9iamVjdChYbWxPYmplY3QgaW1wbCwgWG1sT2JqZWN0IHJvb3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9pbXBsID0gaW1wbDsKLSAgICAgICAgICAgIF9yb290ID0gcm9vdDsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCB3cml0ZU9iamVjdChPYmplY3RPdXRwdXRTdHJlYW0gb3V0KSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgICAgb3V0LndyaXRlT2JqZWN0KF9yb290KTsKLSAgICAgICAgICAgIG91dC53cml0ZUJvb2xlYW4oZmFsc2UpOwotICAgICAgICAgICAgb3V0LndyaXRlSW50KGRpc3RhbmNlVG9Sb290KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIHJlYWRPYmplY3QoT2JqZWN0SW5wdXRTdHJlYW0gaW4pIHRocm93cyBJT0V4Y2VwdGlvbiwgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBfcm9vdCA9IChYbWxPYmplY3QpaW4ucmVhZE9iamVjdCgpOwotICAgICAgICAgICAgaW4ucmVhZEJvb2xlYW4oKTsKLSAgICAgICAgICAgIF9pbXBsID0gb2JqZWN0QXREaXN0YW5jZShpbi5yZWFkSW50KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBPYmplY3QgcmVhZFJlc29sdmUoKSB0aHJvd3MgT2JqZWN0U3RyZWFtRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBfaW1wbDsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgaW50IGRpc3RhbmNlVG9Sb290KCkKLSAgICAgICAgewotICAgICAgICAgICAgWG1sQ3Vyc29yIGN1ciA9IF9pbXBsLm5ld0N1cnNvcigpOwotICAgICAgICAgICAgaW50IGNvdW50ID0gMDsKLSAgICAgICAgICAgIHdoaWxlICghY3VyLnRvUHJldlRva2VuKCkuaXNOb25lKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjdXIuY3VycmVudFRva2VuVHlwZSgpLmlzTmFtZXNwYWNlKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb3VudCArPSAxOwotICAgICAgICAgICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdW50OiAiICsgY291bnQgKyAiICIgKyBjdXIuY3VycmVudFRva2VuVHlwZSgpLnRvU3RyaW5nKCkgKyAiICIgKyBRTmFtZS5wcmV0dHkoY3VyLmdldE5hbWUoKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN1ci5kaXNwb3NlKCk7Ci0gICAgICAgICAgICByZXR1cm4gY291bnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIFhtbE9iamVjdCBvYmplY3RBdERpc3RhbmNlKGludCBjb3VudCkKLSAgICAgICAgewotICAgICAgICAgICAgWG1sQ3Vyc29yIGN1ciA9IF9yb290Lm5ld0N1cnNvcigpOwotICAgICAgICAgICAgd2hpbGUgKGNvdW50ID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjdXIudG9OZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICBpZiAoIWN1ci5jdXJyZW50VG9rZW5UeXBlKCkuaXNOYW1lc3BhY2UoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvdW50IC09IDE7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiQ291bnQ6ICIgKyBjb3VudCArICIgIiArIGN1ci5jdXJyZW50VG9rZW5UeXBlKCkudG9TdHJpbmcoKSArICIgIiArIFFOYW1lLnByZXR0eShjdXIuZ2V0TmFtZSgpKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgWG1sT2JqZWN0IHJlc3VsdCA9IGN1ci5nZXRPYmplY3QoKTsKLSAgICAgICAgICAgIGN1ci5kaXNwb3NlKCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHN0YXRpYyBPYmplY3QgamF2YV92YWx1ZShYbWxPYmplY3Qgb2JqKQotICAgIHsKLSAgICAgICAgaWYgKG9iai5pc05pbCgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgWG1sQW55U2ltcGxlVHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gb2JqOwotCi0gICAgICAgIFNjaGVtYVR5cGUgaW5zdGFuY2VUeXBlID0gKChTaW1wbGVWYWx1ZSlvYmopLmluc3RhbmNlVHlwZSgpOwotICAgICAgICBhc3NlcnQoaW5zdGFuY2VUeXBlICE9IG51bGwpIDogIk5pbCBjYXNlIHNob3VsZCBoYXZlIGJlZW4gaGFuZGxlZCBhYm92ZSI7Ci0KLSAgICAgICAgLy8gaGFuZGxlIGxpc3RzCi0gICAgICAgIGlmIChpbnN0YW5jZVR5cGUuZ2V0U2ltcGxlVmFyaWV0eSgpID09IFNjaGVtYVR5cGUuTElTVCkKLSAgICAgICAgICAgIHJldHVybiAoKFNpbXBsZVZhbHVlKW9iaikuZ2V0TGlzdFZhbHVlKCk7Ci0KLSAgICAgICAgU2ltcGxlVmFsdWUgYmFzZSA9IChTaW1wbGVWYWx1ZSlvYmo7Ci0KLSAgICAgICAgc3dpdGNoIChpbnN0YW5jZVR5cGUuZ2V0UHJpbWl0aXZlVHlwZSgpLmdldEJ1aWx0aW5UeXBlQ29kZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0JPT0xFQU46Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJhc2UuZ2V0Qm9vbGVhblZhbHVlKCkgPyBCb29sZWFuLlRSVUUgOiBCb29sZWFuLkZBTFNFOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0JBU0VfNjRfQklOQVJZOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19IRVhfQklOQVJZOgotICAgICAgICAgICAgICAgIHJldHVybiBiYXNlLmdldEJ5dGVBcnJheVZhbHVlKCk7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfUU5BTUU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJhc2UuZ2V0UU5hbWVWYWx1ZSgpOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0ZMT0FUOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmxvYXQoYmFzZS5nZXRGbG9hdFZhbHVlKCkpOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RPVUJMRToKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERvdWJsZShiYXNlLmdldERvdWJsZVZhbHVlKCkpOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RFQ0lNQUw6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChpbnN0YW5jZVR5cGUuZ2V0RGVjaW1hbFNpemUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5TSVpFX0JZVEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJ5dGUoYmFzZS5nZXRCeXRlVmFsdWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLlNJWkVfU0hPUlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNob3J0KGJhc2UuZ2V0U2hvcnRWYWx1ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuU0laRV9JTlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEludGVnZXIoYmFzZS5nZXRJbnRWYWx1ZSgpKTsKLQotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuU0laRV9MT05HOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMb25nKGJhc2UuZ2V0TG9uZ1ZhbHVlKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5TSVpFX0JJR19JTlRFR0VSOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2UuZ2V0QmlnSW50ZWdlclZhbHVlKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSkgOiAiaW52YWxpZCBudW1lcmljIGJpdCBjb3VudCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBmYWxsdGhyb3VnaAotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuU0laRV9CSUdfREVDSU1BTDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlLmdldEJpZ0RlY2ltYWxWYWx1ZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfQU5ZX1VSSToKLSAgICAgICAgICAgICAgICByZXR1cm4gYmFzZS5nZXRTdHJpbmdWYWx1ZSgpOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RVUkFUSU9OOgotICAgICAgICAgICAgICAgIHJldHVybiBiYXNlLmdldEdEdXJhdGlvblZhbHVlKCk7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfREFURV9USU1FOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19USU1FOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19EQVRFOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX1lFQVJfTU9OVEg6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfWUVBUjoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19NT05USF9EQVk6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfREFZOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX01PTlRIOgotICAgICAgICAgICAgICAgIHJldHVybiBiYXNlLmdldENhbGVuZGFyVmFsdWUoKTsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UpIDogImVuY291bnRlcmVkIG5vbnByaW1pdGl2ZSB0eXBlLiI7Ci0gICAgICAgICAgICAgICAgLy8gZmFsbHRocm91Z2gKLQotICAgICAgICAgICAgLy8gTkI6IGZvciBzdHJpbmcgZW51bXMgd2UganVzdCBkbyBqYXZhLmxhbmcuU3RyaW5nCi0gICAgICAgICAgICAvLyB3aGVuIGluIHRoZSBjb250ZXh0IG9mIHVuaW9ucy4gSXQncyBlYXNpZXIgb24gdXNlcnMuCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX05PVEFUSU9OOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19TVFJJTkc6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0FOWV9TSU1QTEU6Ci0gICAgICAgICAgICAgICAgLy8gcmV0dXJuIGJhc2UuZ2V0U3RyaW5nVmFsdWUoKTsKLSAgICAgICAgICAgIHJldHVybiBiYXNlLmdldFN0cmluZ1ZhbHVlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsZWQgYnkgY29kZSBnZW5lcmF0ZWQgY29kZSB0byBnZXQgdGhlIGRlZmF1bHQgYXR0cmlidXRlIHZhbHVlCi0gICAgICogZm9yIGEgZ2l2ZW4gYXR0cmlidXRlIG5hbWUsIG9yIG51bGwgaWYgbm9uZS4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgWG1sQW55U2ltcGxlVHlwZSBnZXRfZGVmYXVsdF9hdHRyaWJ1dGVfdmFsdWUoUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIFNjaGVtYVR5cGUgc1R5cGUgPSBzY2hlbWFUeXBlKCk7Ci0gICAgICAgIFNjaGVtYUF0dHJpYnV0ZU1vZGVsIGFNb2RlbCA9IHNUeXBlLmdldEF0dHJpYnV0ZU1vZGVsKCk7Ci0gICAgICAgIGlmIChhTW9kZWwgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICBTY2hlbWFMb2NhbEF0dHJpYnV0ZSBzQXR0ciA9IGFNb2RlbC5nZXRBdHRyaWJ1dGUobmFtZSk7Ci0gICAgICAgIGlmIChzQXR0ciA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHJldHVybiBzQXR0ci5nZXREZWZhdWx0VmFsdWUoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxQb3NpdGl2ZUludGVnZXJJbXBsLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxQb3NpdGl2ZUludGVnZXJJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5Y2U2ZTMuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sUG9zaXRpdmVJbnRlZ2VySW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxQb3NpdGl2ZUludGVnZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotCi1wdWJsaWMgY2xhc3MgWG1sUG9zaXRpdmVJbnRlZ2VySW1wbCBleHRlbmRzIEphdmFJbnRlZ2VySG9sZGVyRXggaW1wbGVtZW50cyBYbWxQb3NpdGl2ZUludGVnZXIKLXsKLSAgICBwdWJsaWMgWG1sUG9zaXRpdmVJbnRlZ2VySW1wbCgpCi0gICAgICAgIHsgc3VwZXIoWG1sUG9zaXRpdmVJbnRlZ2VyLnR5cGUsIGZhbHNlKTsgfQotICAgIHB1YmxpYyBYbWxQb3NpdGl2ZUludGVnZXJJbXBsKFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IHN1cGVyKHR5cGUsIGNvbXBsZXgpOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxRTmFtZUltcGwuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbFFOYW1lSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Njk1YTE4Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbFFOYW1lSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxRTmFtZTsKLQotCi1wdWJsaWMgY2xhc3MgWG1sUU5hbWVJbXBsIGV4dGVuZHMgSmF2YVFOYW1lSG9sZGVyIGltcGxlbWVudHMgWG1sUU5hbWUKLXsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbFFOYW1lUmVzdHJpY3Rpb24uamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbFFOYW1lUmVzdHJpY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZhZDIwYy4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxRTmFtZVJlc3RyaWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxRTmFtZTsKLQotcHVibGljIGNsYXNzIFhtbFFOYW1lUmVzdHJpY3Rpb24gZXh0ZW5kcyBKYXZhUU5hbWVIb2xkZXJFeCBpbXBsZW1lbnRzIFhtbFFOYW1lCi17Ci0gICAgcHVibGljIFhtbFFOYW1lUmVzdHJpY3Rpb24oU2NoZW1hVHlwZSB0eXBlLCBib29sZWFuIGNvbXBsZXgpCi0gICAgICAgIHsgc3VwZXIodHlwZSwgY29tcGxleCk7IH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbFNob3J0SW1wbC5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sU2hvcnRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZTdjMDguLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sU2hvcnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFNob3J0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLQotCi1wdWJsaWMgY2xhc3MgWG1sU2hvcnRJbXBsIGV4dGVuZHMgSmF2YUludEhvbGRlckV4IGltcGxlbWVudHMgWG1sU2hvcnQKLXsKLSAgICBwdWJsaWMgWG1sU2hvcnRJbXBsKCkKLSAgICAgICAgeyBzdXBlcihYbWxTaG9ydC50eXBlLCBmYWxzZSk7IH0KLSAgICBwdWJsaWMgWG1sU2hvcnRJbXBsKFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IHN1cGVyKHR5cGUsIGNvbXBsZXgpOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxTdHJpbmdFbnVtZXJhdGlvbi5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sU3RyaW5nRW51bWVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzViZWIyYi4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxTdHJpbmdFbnVtZXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sU3RyaW5nOwotCi1wdWJsaWMgY2xhc3MgWG1sU3RyaW5nRW51bWVyYXRpb24gZXh0ZW5kcyBKYXZhU3RyaW5nRW51bWVyYXRpb25Ib2xkZXJFeCBpbXBsZW1lbnRzIFhtbFN0cmluZwotewotICAgIHB1YmxpYyBYbWxTdHJpbmdFbnVtZXJhdGlvbihTY2hlbWFUeXBlIHR5cGUsIGJvb2xlYW4gY29tcGxleCkKLSAgICAgICAgeyBzdXBlcih0eXBlLCBjb21wbGV4KTsgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sU3RyaW5nSW1wbC5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sU3RyaW5nSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTcxNmMyLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbFN0cmluZ0ltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sU3RyaW5nOwotCi0KLXB1YmxpYyBjbGFzcyBYbWxTdHJpbmdJbXBsIGV4dGVuZHMgSmF2YVN0cmluZ0hvbGRlciBpbXBsZW1lbnRzIFhtbFN0cmluZwotewotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sU3RyaW5nUmVzdHJpY3Rpb24uamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbFN0cmluZ1Jlc3RyaWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMTNiNDYuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sU3RyaW5nUmVzdHJpY3Rpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFN0cmluZzsKLQotcHVibGljIGNsYXNzIFhtbFN0cmluZ1Jlc3RyaWN0aW9uIGV4dGVuZHMgSmF2YVN0cmluZ0hvbGRlckV4IGltcGxlbWVudHMgWG1sU3RyaW5nCi17Ci0gICAgcHVibGljIFhtbFN0cmluZ1Jlc3RyaWN0aW9uKFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IHN1cGVyKHR5cGUsIGNvbXBsZXgpOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxUaW1lSW1wbC5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sVGltZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQxZmUzOC4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxUaW1lSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxUaW1lOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLQotCi1wdWJsaWMgY2xhc3MgWG1sVGltZUltcGwgZXh0ZW5kcyBKYXZhR0RhdGVIb2xkZXJFeCBpbXBsZW1lbnRzIFhtbFRpbWUKLXsKLSAgICBwdWJsaWMgWG1sVGltZUltcGwoKQotICAgICAgICB7IHN1cGVyKFhtbFRpbWUudHlwZSwgZmFsc2UpOyB9Ci0gICAgcHVibGljIFhtbFRpbWVJbXBsKFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IHN1cGVyKHR5cGUsIGNvbXBsZXgpOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxUb2tlbkltcGwuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbFRva2VuSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTMzMDMxLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbFRva2VuSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sVG9rZW47Ci0KLQotcHVibGljIGNsYXNzIFhtbFRva2VuSW1wbCBleHRlbmRzIEphdmFTdHJpbmdIb2xkZXJFeCBpbXBsZW1lbnRzIFhtbFRva2VuCi17Ci0gICAgcHVibGljIFhtbFRva2VuSW1wbCgpCi0gICAgICAgIHsgc3VwZXIoWG1sVG9rZW4udHlwZSwgZmFsc2UpOyB9Ci0gICAgcHVibGljIFhtbFRva2VuSW1wbChTY2hlbWFUeXBlIHR5cGUsIGJvb2xlYW4gY29tcGxleCkKLSAgICAgICAgeyBzdXBlcih0eXBlLCBjb21wbGV4KTsgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sVW5pb25JbXBsLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxVbmlvbkltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE2YTFkYy4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxVbmlvbkltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4OCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uU3BlY2lmaWNhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNpbXBsZVZhbHVlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnNjaGVtYS5TY2hlbWFUeXBlSW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlZhbGlkYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uUU5hbWVIZWxwZXI7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi0KLS8qKgotICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHNpbXBsZSB1bmlvbiB0eXBlcy4KLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBYbWxVbmlvbkltcGwgZXh0ZW5kcyBYbWxPYmplY3RCYXNlIGltcGxlbWVudHMgWG1sQW55U2ltcGxlVHlwZQotewotICAgIHB1YmxpYyBYbWxVbmlvbkltcGwoU2NoZW1hVHlwZSB0eXBlLCBib29sZWFuIGNvbXBsZXgpCi0gICAgICAgIHsgX3NjaGVtYVR5cGUgPSB0eXBlOyBpbml0Q29tcGxleFR5cGUoY29tcGxleCwgZmFsc2UpOyB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hVHlwZSBzY2hlbWFUeXBlKCkKLSAgICAgICAgeyByZXR1cm4gX3NjaGVtYVR5cGU7IH0KLQotICAgIHB1YmxpYyBTY2hlbWFUeXBlIGluc3RhbmNlVHlwZSgpCi0gICAgICAgIHsgY2hlY2tfZGF0ZWQoKTsgcmV0dXJuIF92YWx1ZSA9PSBudWxsID8gbnVsbCA6ICgoU2ltcGxlVmFsdWUpX3ZhbHVlKS5pbnN0YW5jZVR5cGUoKTsgfQotCi0gICAgcHJpdmF0ZSBTY2hlbWFUeXBlIF9zY2hlbWFUeXBlOwotICAgIHByaXZhdGUgWG1sQW55U2ltcGxlVHlwZSBfdmFsdWU7IC8vIHVuZGVybHlpbmcgdmFsdWUKLSAgICBwcml2YXRlIFN0cmluZyBfdGV4dHZhbHVlID0gIiI7IC8vIHRleHR1YWwgdmFsdWUKLQotCi0KLQotICAgIC8vIFNJTVBMRSBWQUxVRSBBQ0NFU1NPUlMgQkVMT1cgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIGdldHMgcmF3IHRleHQgdmFsdWUKLQotICAgIHByb3RlY3RlZCBTdHJpbmcgY29tcHV0ZV90ZXh0KE5hbWVzcGFjZU1hbmFnZXIgbnNtKQotICAgICAgICB7IHJldHVybiBfdGV4dHZhbHVlOyB9Ci0KLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc19kZWZhdWx0YWJsZV93cyhTdHJpbmcgdikgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgWG1sQW55U2ltcGxlVHlwZSBzYXZlZFZhbHVlID0gX3ZhbHVlOwotICAgICAgICAgICAgc2V0X3RleHQodik7Ci0KLSAgICAgICAgICAgIC8vIHJlc3RvcmUgdGhlIHNhdmVkIHZhbHVlCi0gICAgICAgICAgICBfdmFsdWUgPSBzYXZlZFZhbHVlOwotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHNldF90ZXh0KFN0cmluZyBzKQotICAgIHsKLSAgICAgICAgLy8gZmlyc3QgY2hlY2sgYWdhaW5zdCBhbnkgcGF0dGVybnMuLi4KLSAgICAgICAgaWYgKCFfc2NoZW1hVHlwZS5tYXRjaFBhdHRlcm5GYWNldChzKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBYbWxWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb24oKTsKLQotICAgICAgICAvLyBzYXZlIHN0YXRlIGZvciByb2xsYmFjawotICAgICAgICBTdHJpbmcgb3JpZ2luYWwgPSBfdGV4dHZhbHVlOwotICAgICAgICBfdGV4dHZhbHVlID0gczsKLQotICAgICAgICAvLyBpdGVyYXRlIHRocm91Z2ggdGhlIHR5cGVzLCB0cnlpbmcgdG8gY3JlYXRlIGEgdHlwZQotICAgICAgICBTY2hlbWFUeXBlW10gbWVtYmVycyA9IF9zY2hlbWFUeXBlLmdldFVuaW9uQ29uc3RpdHVlbnRUeXBlcygpOwotICAgICAgICBhc3NlcnQobWVtYmVycyAhPSBudWxsKTsKLQotICAgICAgICBib29sZWFuIHB1c2hlZCA9IGZhbHNlOwotICAgICAgICAvLyBib29sZWFuIHdhc3N0cmljdCA9IHNldF9zdHJpY3QodHJ1ZSk7IC8vIHRlbGwgdHlwZXMgdG8gY29tcGxhaW4gZmVydmVyZW50bHkgYWJvdXQgZXJyb3JzCi0gICAgICAgIGlmIChoYXNfc3RvcmUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgTmFtZXNwYWNlQ29udGV4dC5wdXNoKG5ldyBOYW1lc3BhY2VDb250ZXh0KGdldF9zdG9yZSgpKSk7Ci0gICAgICAgICAgICBwdXNoZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1lbWJlcnMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gRnJvbSB0aGUgcG9pbnQgb2YgdmlldyBvZiB0aGUgZm9sbG93aW5nIGNhbGwsICJ0aGlzIiBpcyBhIGdlbmVyaWMKLSAgICAgICAgICAgICAgICAvLyBYbWxBbnlTaW1wbGVUeXBlIGltcGxlbWVudGF0aW9uLCBmb3Igd2hpY2ggb25seSBnZXRUZXh0IGNhbiBiZSBjYWxsZWQuCi0gICAgICAgICAgICAgICAgLy8gKE5vdGUgdGhhdCAidGhpcyIgaXMgbm90IHdyYXBwZWQgaW4gdGhlIHByb3h5IG9iamVjdC4pCi0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBYbWxBbnlTaW1wbGVUeXBlIG5ld3ZhbCA9ICgoU2NoZW1hVHlwZUltcGwpbWVtYmVyc1tpXSkubmV3VmFsaWRhdGluZ1ZhbHVlKHMpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIG5vdyB3ZSBuZWVkIHRvIGNoZWNrIGFnYWluc3QgKGVudWVtcmF0aW9uKSByZXN0cmljdGlvbnMKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGVjayhuZXd2YWwsIF9zY2hlbWFUeXBlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIG9uZSB0aGF0IHdvcmtzIQotICAgICAgICAgICAgICAgICAgICBfdmFsdWUgPSBuZXd2YWw7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUcm91Ymxlc29tZSB1bmlvbiBleGNlcHRpb24gY2F1c2VkIGJ5IHVuZXhwZWN0ZWQgIiArIGUsIGUpOwotICAgICAgICAgICAgICAgICAgICAvLyBhc3NlcnQoZmFsc2UpIDogIlVuZXhwZWN0ZWQgIiArIGU7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmaW5hbGx5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChwdXNoZWQpCi0gICAgICAgICAgICAgICAgTmFtZXNwYWNlQ29udGV4dC5wb3AoKTsKLSAgICAgICAgICAgIC8vIHNldF9zdHJpY3Qod2Fzc3RyaWN0KTsKLSAgICAgICAgfQotCi0KLSAgICAgICAgLy8gZG9lc24ndCBtYXRjaCBhbnkgb2YgdGhlIG1lbWJlcnM7IHJvbGxiYWNrIGFuZCB0aHJvdwotICAgICAgICBfdGV4dHZhbHVlID0gb3JpZ2luYWw7Ci0gICAgICAgIHRocm93IG5ldyBYbWxWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb24oKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfbmlsKCkKLSAgICB7Ci0gICAgICAgIF92YWx1ZSA9IG51bGw7Ci0gICAgICAgIF90ZXh0dmFsdWUgPSBudWxsOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBpbnQgZ2V0X3dzY2Fub25fcnVsZSgpIHsgcmV0dXJuIFNjaGVtYVR5cGUuV1NfUFJFU0VSVkU7IH0KLQotCi0gICAgLy8gbnVtZXJpY3MKLSAgICBwdWJsaWMgZmxvYXQgZmxvYXRWYWx1ZSgpCi0gICAgICAgIHsgY2hlY2tfZGF0ZWQoKTsgcmV0dXJuIF92YWx1ZSA9PSBudWxsID8gMC4wZiA6ICgoU2ltcGxlVmFsdWUpX3ZhbHVlKS5mbG9hdFZhbHVlKCk7IH0KLQotICAgIHB1YmxpYyBkb3VibGUgZG91YmxlVmFsdWUoKQotICAgICAgICB7IGNoZWNrX2RhdGVkKCk7IHJldHVybiBfdmFsdWUgPT0gbnVsbCA/IDAuMCA6ICgoU2ltcGxlVmFsdWUpX3ZhbHVlKS5kb3VibGVWYWx1ZSgpOyB9Ci0KLSAgICBwdWJsaWMgQmlnRGVjaW1hbCBiaWdEZWNpbWFsVmFsdWUoKQotICAgICAgICB7IGNoZWNrX2RhdGVkKCk7IHJldHVybiBfdmFsdWUgPT0gbnVsbCA/IG51bGwgOiAoKFNpbXBsZVZhbHVlKV92YWx1ZSkuYmlnRGVjaW1hbFZhbHVlKCk7IH0KLQotICAgIHB1YmxpYyBCaWdJbnRlZ2VyIGJpZ0ludGVnZXJWYWx1ZSgpCi0gICAgICAgIHsgY2hlY2tfZGF0ZWQoKTsgcmV0dXJuIF92YWx1ZSA9PSBudWxsID8gbnVsbCA6ICgoU2ltcGxlVmFsdWUpX3ZhbHVlKS5iaWdJbnRlZ2VyVmFsdWUoKTsgfQotCi0gICAgcHVibGljIGJ5dGUgYnl0ZVZhbHVlKCkKLSAgICAgICAgeyBjaGVja19kYXRlZCgpOyByZXR1cm4gX3ZhbHVlID09IG51bGwgPyAwIDogKChTaW1wbGVWYWx1ZSlfdmFsdWUpLmJ5dGVWYWx1ZSgpOyB9Ci0KLSAgICBwdWJsaWMgc2hvcnQgc2hvcnRWYWx1ZSgpCi0gICAgICAgIHsgY2hlY2tfZGF0ZWQoKTsgcmV0dXJuIF92YWx1ZSA9PSBudWxsID8gMCA6ICgoU2ltcGxlVmFsdWUpX3ZhbHVlKS5zaG9ydFZhbHVlKCk7IH0KLQotICAgIHB1YmxpYyBpbnQgaW50VmFsdWUoKQotICAgICAgICB7IGNoZWNrX2RhdGVkKCk7IHJldHVybiBfdmFsdWUgPT0gbnVsbCA/IDAgOiAoKFNpbXBsZVZhbHVlKV92YWx1ZSkuaW50VmFsdWUoKTsgfQotCi0gICAgcHVibGljIGxvbmcgbG9uZ1ZhbHVlKCkKLSAgICAgICAgeyBjaGVja19kYXRlZCgpOyByZXR1cm4gX3ZhbHVlID09IG51bGwgPyAwIDogKChTaW1wbGVWYWx1ZSlfdmFsdWUpLmxvbmdWYWx1ZSgpOyB9Ci0KLQotICAgIC8vIHZhcmlvdXMKLSAgICBwdWJsaWMgYnl0ZVtdIGJ5dGVBcnJheVZhbHVlKCkKLSAgICAgICAgeyBjaGVja19kYXRlZCgpOyByZXR1cm4gX3ZhbHVlID09IG51bGwgPyBudWxsIDogKChTaW1wbGVWYWx1ZSlfdmFsdWUpLmJ5dGVBcnJheVZhbHVlKCk7IH0KLQotICAgIHB1YmxpYyBib29sZWFuIGJvb2xlYW5WYWx1ZSgpCi0gICAgICAgIHsgY2hlY2tfZGF0ZWQoKTsgcmV0dXJuIF92YWx1ZSA9PSBudWxsID8gZmFsc2UgOiAoKFNpbXBsZVZhbHVlKV92YWx1ZSkuYm9vbGVhblZhbHVlKCk7IH0KLQotICAgIHB1YmxpYyBDYWxlbmRhciBjYWxlbmRhclZhbHVlKCkKLSAgICAgICAgeyBjaGVja19kYXRlZCgpOyByZXR1cm4gX3ZhbHVlID09IG51bGwgPyBudWxsIDogKChTaW1wbGVWYWx1ZSlfdmFsdWUpLmNhbGVuZGFyVmFsdWUoKTsgfQotCi0gICAgcHVibGljIERhdGUgZGF0ZVZhbHVlKCkKLSAgICAgICAgeyBjaGVja19kYXRlZCgpOyByZXR1cm4gX3ZhbHVlID09IG51bGwgPyBudWxsIDogKChTaW1wbGVWYWx1ZSlfdmFsdWUpLmRhdGVWYWx1ZSgpOyB9Ci0KLSAgICBwdWJsaWMgR0RhdGUgZ0RhdGVWYWx1ZSgpCi0gICAgICAgIHsgY2hlY2tfZGF0ZWQoKTsgcmV0dXJuIF92YWx1ZSA9PSBudWxsID8gbnVsbCA6ICgoU2ltcGxlVmFsdWUpX3ZhbHVlKS5nRGF0ZVZhbHVlKCk7IH0KLQotICAgIHB1YmxpYyBHRHVyYXRpb24gZ0R1cmF0aW9uVmFsdWUoKQotICAgICAgICB7IGNoZWNrX2RhdGVkKCk7IHJldHVybiBfdmFsdWUgPT0gbnVsbCA/IG51bGwgOiAoKFNpbXBsZVZhbHVlKV92YWx1ZSkuZ0R1cmF0aW9uVmFsdWUoKTsgfQotCi0gICAgcHVibGljIFFOYW1lIHFOYW1lVmFsdWUoKQotICAgICAgICB7IGNoZWNrX2RhdGVkKCk7IHJldHVybiBfdmFsdWUgPT0gbnVsbCA/IG51bGwgOiAoKFNpbXBsZVZhbHVlKV92YWx1ZSkucU5hbWVWYWx1ZSgpOyB9Ci0KLSAgICBwdWJsaWMgTGlzdCBsaXN0VmFsdWUoKQotICAgICAgICB7IGNoZWNrX2RhdGVkKCk7IHJldHVybiBfdmFsdWUgPT0gbnVsbCA/IG51bGwgOiAoKFNpbXBsZVZhbHVlKV92YWx1ZSkubGlzdFZhbHVlKCk7IH0KLQotICAgIHB1YmxpYyBMaXN0IHhsaXN0VmFsdWUoKQotICAgICAgICB7IGNoZWNrX2RhdGVkKCk7IHJldHVybiBfdmFsdWUgPT0gbnVsbCA/IG51bGwgOiAoKFNpbXBsZVZhbHVlKV92YWx1ZSkueGxpc3RWYWx1ZSgpOyB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nRW51bUFic3RyYWN0QmFzZSBlbnVtVmFsdWUoKQotICAgICAgICB7IGNoZWNrX2RhdGVkKCk7IHJldHVybiBfdmFsdWUgPT0gbnVsbCA/IG51bGwgOiAoKFNpbXBsZVZhbHVlKV92YWx1ZSkuZW51bVZhbHVlKCk7IH0KLQotICAgIHB1YmxpYyBTdHJpbmcgc3RyaW5nVmFsdWUoKQotICAgICAgICB7IGNoZWNrX2RhdGVkKCk7IHJldHVybiBfdmFsdWUgPT0gbnVsbCA/IG51bGwgOiBfdmFsdWUuc3RyaW5nVmFsdWUoKTsgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGFjZSBvZiBjYW5vbmljYWwgbGV4aWNhbCBmb3JtcwotICAgICAqIG9mIHRoZSBmaXJzdCAoc291cmNlKSB0eXBlIG92ZXJsYXBzIHdpdGggdGhlIGZ1bGwgbGV4aWNhbCBzcGFjZQotICAgICAqIG9mIHRoZSBzZWNvbmQgKHRhcmdldCkgdHlwZS4gQm90aCB0eXBlcyBtdXN0IGJlIHByaW1pdGl2ZXMuCi0gICAgICovCi0gICAgc3RhdGljIGJvb2xlYW4gbGV4aWNhbF9vdmVybGFwKGludCBzb3VyY2UsIGludCB0YXJnZXQpCi0gICAgewotICAgICAgICAvLyB0eXBlcyBhcmUgdGhlIHNhbWUKLSAgICAgICAgaWYgKHNvdXJjZSA9PSB0YXJnZXQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAvLyBvbmUgb2YgdGhlIHR5cGVzIGhhcyB0aGUgZnVsbCBsZXhpY2FsIHNwYWNlCi0gICAgICAgIGlmIChzb3VyY2UgPT0gU2NoZW1hVHlwZS5CVENfQU5ZX1NJTVBMRSB8fAotICAgICAgICAgICAgdGFyZ2V0ID09IFNjaGVtYVR5cGUuQlRDX0FOWV9TSU1QTEUgfHwKLSAgICAgICAgICAgIHNvdXJjZSA9PSBTY2hlbWFUeXBlLkJUQ19TVFJJTkcgfHwKLSAgICAgICAgICAgIHRhcmdldCA9PSBTY2hlbWFUeXBlLkJUQ19TVFJJTkcgfHwKLSAgICAgICAgICAgIHNvdXJjZSA9PSBTY2hlbWFUeXBlLkJUQ19BTllfVVJJIHx8Ci0gICAgICAgICAgICB0YXJnZXQgPT0gU2NoZW1hVHlwZS5CVENfQU5ZX1VSSSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIHN3aXRjaCAoc291cmNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0JPT0xFQU46IHN3aXRjaCh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19RTkFNRTogICAgICAgLy8gInRydWUiIGlzIHZhbGlkIE5jTmFtZSBhbmQgdGhlcmVmb3JlIFFOYW1lCi0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19OT1RBVElPTjogICAgLy8gInRydWUiIGlzIHZhbGlkIE5DTmFtZQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0JBU0VfNjRfQklOQVJZOiBzd2l0Y2godGFyZ2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfQk9PTEVBTjogICAgIC8vICIwIiBpcyB2YWxpZCBib29sZWFuCi0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19IRVhfQklOQVJZOiAgLy8gIjAiIGlzIHZhbGlkIGhleAotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfUU5BTUU6ICAgICAgIC8vICJhIiBpcyB2YWxpZCBOY05hbWUgYW5kIHRoZXJlZm9yZSBRTmFtZQotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfTk9UQVRJT046ICAgIC8vICJhIiBpcyB2YWxpZCBOY05hbWUKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0ZMT0FUOiAgICAgICAvLyAiMCIgaXMgdmFsaWQgZmxvYXQKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RPVUJMRTogICAgICAvLyAiMCIgaXMgdmFsaWQgZG91YmxlCi0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19ERUNJTUFMOiAgICAgLy8gIjAiIGlzIHZhbGlkIGRlY2ltYWwKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RVUkFUSU9OOiAgICAvLyAiUDFZMk0zRFQxMEgzME0iIGlzIGJvdGggYjY0IGFuZCBkdXJhdGlvbgotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19ZRUFSOiAgICAgIC8vICIxOTk5IiBpcyB2YWxpZCB5ZWFyCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgIC8vICItIiBhbmQgIjoiIGNhbm5vdCBjb21lIGZyb20gYjY0Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0hFWF9CSU5BUlk6IHN3aXRjaCh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19CT09MRUFOOiAgICAgLy8gIjAiIGlzIHZhbGlkIGJvb2xlYW4KLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0JBU0VfNjRfQklOQVJZOiAgLy8gIjAiIGlzIHZhbGlkIGI2NAotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfUU5BTUU6ICAgICAgIC8vICJBIiBpcyB2YWxpZCBOY05hbWUgYW5kIHRoZXJlZm9yZSBRTmFtZQotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfTk9UQVRJT046ICAgIC8vICJBIiBpcyB2YWxpZCBOY05hbWUKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0ZMT0FUOiAgICAgICAvLyAiMCIgaXMgdmFsaWQgZmxvYXQKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RPVUJMRTogICAgICAvLyAiMCIgaXMgdmFsaWQgZG91YmxlCi0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19ERUNJTUFMOiAgICAgLy8gIjAiIGlzIHZhbGlkIGRlY2ltYWwKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfWUVBUjogICAgICAvLyAiMTk5OSIgaXMgdmFsaWQgeWVhcgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAvLyAiLSIgYW5kICI6IiBjYW5ub3QgY29tZSBmcm9tIGI2NAotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19RTkFNRToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfTk9UQVRJT046IHN3aXRjaCh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19CT09MRUFOOiAgICAgLy8gInRydWUiIGlzIHZhbGlkIGJvb2xlYW4KLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0JBU0VfNjRfQklOQVJZOiAgLy8gImEiIGlzIHZhbGlkIGI2NAotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfSEVYX0JJTkFSWTogIC8vICJhIiBpcyB2YWxpZCBoZXgKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1FOQU1FOiAgICAgICAvLyAiQSIgaXMgdmFsaWQgTmNOYW1lIGFuZCB0aGVyZWZvcmUgUU5hbWUKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX05PVEFUSU9OOiAgICAvLyAiQSIgaXMgdmFsaWQgTmNOYW1lIGFuZCB0aGVyZWZvcmUgUU5hbWUKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RVUkFUSU9OOiAgICAvLyAiUDFZMk0zRFQxMEgzME0iIGlzIGJvdGggTmNOYW1lIGFuZCBkdXJhdGlvbgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0ZMT0FUOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19ET1VCTEU6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RFQ0lNQUw6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfWUVBUjogc3dpdGNoKHRhcmdldCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0JBU0VfNjRfQklOQVJZOiAvLyAiMCIgaXMgdmFsaWQgYjY0Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19IRVhfQklOQVJZOiAgLy8gIjAiIGlzIHZhbGlkIGhleAotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfRkxPQVQ6ICAgICAgIC8vICIwIiBpcyB2YWxpZCBmbG9hdAotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfRE9VQkxFOiAgICAgIC8vICIwIiBpcyB2YWxpZCBkb3VibGUKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RFQ0lNQUw6ICAgICAvLyAiMCIgaXMgdmFsaWQgZGVjaW1hbAotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19ZRUFSOiAgICAgIC8vICIxOTk5IiBpcyB2YWxpZCB5ZWFyCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfRFVSQVRJT046IHN3aXRjaCh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19RTkFNRToKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX05PVEFUSU9OOgotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfQkFTRV82NF9CSU5BUlk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfREFURV9USU1FOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19USU1FOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19EQVRFOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX1lFQVJfTU9OVEg6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfTU9OVEhfREFZOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX0RBWToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19NT05USDoKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGUgZ2l2ZW4gc2NoZW1hIHR5cGUncyBsb2dpY2FsIHR5cGUgaXMgYSBtYXRjaCBmb3IKLSAgICAgKiB0aGUgZ2l2ZW4gY2F0ZWdvcnkgb2YgamF2YSBjb25jZXB0cy4KLSAgICAgKi8KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBKQVZBX05VTUJFUiA9IFNjaGVtYVR5cGUuQlRDX0xBU1RfQlVJTFRJTiArIDE7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEpBVkFfREFURSA9IFNjaGVtYVR5cGUuQlRDX0xBU1RfQlVJTFRJTiArIDI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEpBVkFfQ0FMRU5EQVIgPSBTY2hlbWFUeXBlLkJUQ19MQVNUX0JVSUxUSU4gKyAzOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBKQVZBX0JZVEVBUlJBWSA9IFNjaGVtYVR5cGUuQlRDX0xBU1RfQlVJTFRJTiArIDQ7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEpBVkFfTElTVCA9IFNjaGVtYVR5cGUuQlRDX0xBU1RfQlVJTFRJTiArIDU7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGxvZ2ljYWxfb3ZlcmxhcChTY2hlbWFUeXBlIHR5cGUsIGludCBqYXZhY29kZSkKLSAgICB7Ci0gICAgICAgIC8vIG5vbi11bmlvbiB0eXBlcyBiZWNhdXNlIGl0J3MgYmVpbmcgYXBwbGllZCBvbiBpcnJlZHVjaWJsZSB1bmlvbiBtZW1iZXJzIQotICAgICAgICBhc3NlcnQodHlwZS5nZXRTaW1wbGVWYXJpZXR5KCkgIT0gU2NoZW1hVHlwZS5VTklPTik7Ci0KLSAgICAgICAgaWYgKGphdmFjb2RlIDw9IFNjaGVtYVR5cGUuQlRDX0xBU1RfQlVJTFRJTikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHR5cGUuZ2V0U2ltcGxlVmFyaWV0eSgpICE9IFNjaGVtYVR5cGUuQVRPTUlDKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgcmV0dXJuICh0eXBlLmdldFByaW1pdGl2ZVR5cGUoKS5nZXRCdWlsdGluVHlwZUNvZGUoKSA9PSBqYXZhY29kZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGphdmFjb2RlKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgSkFWQV9OVU1CRVI6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGUuZ2V0U2ltcGxlVmFyaWV0eSgpICE9IFNjaGVtYVR5cGUuQVRPTUlDKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0UHJpbWl0aXZlVHlwZSgpLmdldEJ1aWx0aW5UeXBlQ29kZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19GTE9BVDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19ET1VCTEU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfREVDSU1BTDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX1lFQVI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19NT05USDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX0RBWToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIGNhc2UgSkFWQV9EQVRFOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICh0eXBlLmdldFNpbXBsZVZhcmlldHkoKSAhPSBTY2hlbWFUeXBlLkFUT01JQykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldFByaW1pdGl2ZVR5cGUoKS5nZXRCdWlsdGluVHlwZUNvZGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfREFURV9USU1FOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RBVEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICBjYXNlIEpBVkFfQ0FMRU5EQVI6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGUuZ2V0U2ltcGxlVmFyaWV0eSgpICE9IFNjaGVtYVR5cGUuQVRPTUlDKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0UHJpbWl0aXZlVHlwZSgpLmdldEJ1aWx0aW5UeXBlQ29kZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19EQVRFX1RJTUU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfREFURToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19USU1FOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfWUVBUl9NT05USDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX01PTlRIX0RBWToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX1lFQVI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19NT05USDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX0RBWToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgSkFWQV9CWVRFQVJSQVk6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGUuZ2V0U2ltcGxlVmFyaWV0eSgpICE9IFNjaGVtYVR5cGUuQVRPTUlDKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0UHJpbWl0aXZlVHlwZSgpLmdldEJ1aWx0aW5UeXBlQ29kZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19CQVNFXzY0X0JJTkFSWToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19IRVhfQklOQVJZOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSBKQVZBX0xJU1Q6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICh0eXBlLmdldFNpbXBsZVZhcmlldHkoKSA9PSBTY2hlbWFUeXBlLkxJU1QpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgYXNzZXJ0KGZhbHNlKSA6ICJtaXNzaW5nIGNhc2UiOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR3JhYnMgYSBjaGFpbmVkIHZhbHVlIG9mIHR5cGUgc3QsIGNyZWF0aW5nIGFuZCBhdHRhY2hpbmcKLSAgICAgKiBvbmUgaWYgbm90IHByZXNlbnQuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHNldF9wcmltaXRpdmUoaW50IHR5cGVjb2RlLCBPYmplY3QgdmFsKQotICAgIHsKLSAgICAgICAgU2NoZW1hVHlwZVtdIG1lbWJlcnMgPSBfc2NoZW1hVHlwZS5nZXRVbmlvbkNvbnN0aXR1ZW50VHlwZXMoKTsKLSAgICAgICAgYXNzZXJ0KG1lbWJlcnMgIT0gbnVsbCk7Ci0KLSAgICAgICAgYm9vbGVhbiBwdXNoZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGhhc19zdG9yZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBOYW1lc3BhY2VDb250ZXh0LnB1c2gobmV3IE5hbWVzcGFjZUNvbnRleHQoZ2V0X3N0b3JlKCkpKTsKLSAgICAgICAgICAgIHB1c2hlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG91dGVyOiBmb3IgKGludCBpID0gMDsgaSA8IG1lbWJlcnMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gY2FuZGlkYXRlcyBtdXN0IGJlIGEgbG9naWNhbCBtYXRjaCBmb3IgdGhlIGRlc2lyZWQgdHlwZWNvZGUKLSAgICAgICAgICAgICAgICBpZiAobG9naWNhbF9vdmVybGFwKG1lbWJlcnNbaV0sIHR5cGVjb2RlKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFhtbEFueVNpbXBsZVR5cGUgbmV3dmFsOwotCi0gICAgICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXd2YWwgPSBtZW1iZXJzW2ldLm5ld1ZhbHVlKHZhbCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBkb2Vzbid0IG1hdGNoIHRoaXMgdHlwZSBldmVuIHRob3VnaCBsb2dpY2FsIGNhdGVnb3JpZXMKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmUgdXAgKHByb2JhYmx5IGJlY2F1c2Ugb2YgcmVzdHJpY2l0b24pOyB0cnkgdGhlIG5leHQgdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKSA6ICJVbmV4cGVjdGVkICIgKyBlOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgb3V0ZXI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvKiBUT0RPOiByZXRoaW5rIHRoaXMgLSBkaXNhYmxpbmcgZm9yIG5vdy4KLQotICAgICAgICAgICAgICAgICAgICAvLyBPSywgbm93IHdlJ3ZlIGdvdCBhIG5ld3ZhbC4uLiBXZSBoYXZlIHRvIHZlcmlmeQotICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IGxleGljYWxseSBpdCBkb2Vzbid0IG92ZXJsYXAgd2l0aCBwcmV2aW91cyB0eXBlcwotCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBuZXd2YWx0ZXh0ID0gbnVsbDsKLQotICAgICAgICAgICAgICAgICAgICBpbm5lcjogZm9yIChpbnQgaiA9IDA7IGogPCBpOyBqKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZW1iZXJzW2pdLmdldFNpbXBsZVZhcmlldHkoKSA9PSBTY2hlbWFUeXBlLkxJU1QgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXhpY2FsX292ZXJsYXAobWVtYmVyc1tqXS5nZXRQcmltaXRpdmVUeXBlKCkuZ2V0QnVpbHRpblR5cGVDb2RlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3ZhbC5zY2hlbWFUeXBlKCkuZ2V0UHJpbWl0aXZlVHlwZSgpLmdldEJ1aWx0aW5UeXBlQ29kZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGVyZSBpcyBhIHByZWNlZGluZyB0eXBlIHRoYXQgbWF5IGxleGljYWxseSBvdmVybGFwIHdpdGggb3Vycy4uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGl0IGxleGljYWxseSBjb250YWlucyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIG91ciBuZXcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcm9wb3NlZCB2YWx1ZSwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIHRoZSB1bmlvbiB0byBoYXZlIG91cgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvZ2ljYWwgdmFsdWUgKGJlY2F1c2UgaXQgd291bGQgaGF2ZSBiZWVuIG1hc2tlZCkgYW5kIHRocm93IGFuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXJyb3IuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld3ZhbHRleHQgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3dmFsdGV4dCA9IG5ld3ZhbC5zdHJpbmdWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGlzY2FyZCByZXR1cm4gdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVyc1tpXS5uZXdWYWx1ZShuZXd2YWx0ZXh0KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvaCBiYWQsIHdlIHN1Y2NlZWRlZC4gT3VyIGluc3RhbmNlIGxleGljYWxseSBsb29rcyBsaWtlIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJldmlvdXMgdHlwZSwgYW5kIHRoaXMgaXNuJ3QgYSB2YWxpZCB2YWx1ZS4gS2VlcCBvbiBodW50aW5nLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBnb29kOiB0aGlzIGVycm9yIG1lYW5zIHRoYXQgb3VyIHZhbHVlIGRvZXNuJ3QgbG9vayBsaWtlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBvdGhlciB0eXBlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBpbm5lcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAgICAgICAgIC8vIE5vIGxleGljYWwgbWFza2luZzogd2UncmUgT0sKLSAgICAgICAgICAgICAgICAgICAgX3ZhbHVlID0gbmV3dmFsOwotICAgICAgICAgICAgICAgICAgICBfdGV4dHZhbHVlID0gX3ZhbHVlLnN0cmluZ1ZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWxseQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocHVzaGVkKQotICAgICAgICAgICAgICAgIE5hbWVzcGFjZUNvbnRleHQucG9wKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBoZXJlIGFyZSB0aGUgc2V0dGVycwotCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X2Jvb2xlYW4oYm9vbGVhbiB2KQotICAgICAgICB7IHNldF9wcmltaXRpdmUoU2NoZW1hVHlwZS5CVENfQk9PTEVBTiwgbmV3IEJvb2xlYW4odikpOyB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfYnl0ZShieXRlIHYpCi0gICAgICAgIHsgc2V0X3ByaW1pdGl2ZShKQVZBX05VTUJFUiwgbmV3IEJ5dGUodikpOyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X3Nob3J0KHNob3J0IHYpCi0gICAgICAgIHsgc2V0X3ByaW1pdGl2ZShKQVZBX05VTUJFUiwgbmV3IFNob3J0KHYpKTsgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldF9pbnQoaW50IHYpCi0gICAgICAgIHsgc2V0X3ByaW1pdGl2ZShKQVZBX05VTUJFUiwgbmV3IEludGVnZXIodikpOyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X2xvbmcobG9uZyB2KQotICAgICAgICB7IHNldF9wcmltaXRpdmUoSkFWQV9OVU1CRVIsIG5ldyBMb25nKHYpKTsgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldF9mbG9hdChmbG9hdCB2KQotICAgICAgICB7IHNldF9wcmltaXRpdmUoSkFWQV9OVU1CRVIsIG5ldyBGbG9hdCh2KSk7IH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfZG91YmxlKGRvdWJsZSB2KQotICAgICAgICB7IHNldF9wcmltaXRpdmUoSkFWQV9OVU1CRVIsIG5ldyBEb3VibGUodikpOyB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfQnl0ZUFycmF5KGJ5dGVbXSBiKQotICAgICAgICB7IHNldF9wcmltaXRpdmUoSkFWQV9CWVRFQVJSQVksIGIpOyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X2hleChieXRlW10gYikKLSAgICAgICAgeyBzZXRfcHJpbWl0aXZlKEpBVkFfQllURUFSUkFZLCBiKTsgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldF9iNjQoYnl0ZVtdIGIpCi0gICAgICAgIHsgc2V0X3ByaW1pdGl2ZShKQVZBX0JZVEVBUlJBWSwgYik7IH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfQmlnSW50ZWdlcihCaWdJbnRlZ2VyIHYpCi0gICAgICAgIHsgc2V0X3ByaW1pdGl2ZShKQVZBX05VTUJFUiwgdik7IH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfQmlnRGVjaW1hbChCaWdEZWNpbWFsIHYpCi0gICAgICAgIHsgc2V0X3ByaW1pdGl2ZShKQVZBX05VTUJFUiwgdik7IH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfUU5hbWUoUU5hbWUgdikKLSAgICAgICAgeyBzZXRfcHJpbWl0aXZlKFNjaGVtYVR5cGUuQlRDX1FOQU1FLCB2KTsgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X0NhbGVuZGFyKENhbGVuZGFyIGMpCi0gICAgICAgIHsgc2V0X3ByaW1pdGl2ZShKQVZBX0NBTEVOREFSLCBjKTsgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldF9EYXRlKERhdGUgZCkKLSAgICAgICAgeyBzZXRfcHJpbWl0aXZlKEpBVkFfREFURSwgZCk7IH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfR0RhdGUoR0RhdGVTcGVjaWZpY2F0aW9uIGQpCi0gICAgewotICAgICAgICBpbnQgYnRjID0gZC5nZXRCdWlsdGluVHlwZUNvZGUoKTsKLSAgICAgICAgaWYgKGJ0YyA8PSAwKQotICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOwotICAgICAgICBzZXRfcHJpbWl0aXZlKGJ0YywgZCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X0dEdXJhdGlvbihHRHVyYXRpb25TcGVjaWZpY2F0aW9uIGQpCi0gICAgICAgIHsgc2V0X3ByaW1pdGl2ZShTY2hlbWFUeXBlLkJUQ19EVVJBVElPTiwgZCk7IH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHNldF9lbnVtKFN0cmluZ0VudW1BYnN0cmFjdEJhc2UgZSkKLSAgICAgICAgeyBzZXRfcHJpbWl0aXZlKFNjaGVtYVR5cGUuQlRDX1NUUklORywgZSk7IH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHNldF9saXN0KExpc3QgdikKLSAgICAgICAgeyBzZXRfcHJpbWl0aXZlKEpBVkFfTElTVCwgdik7IH0KLQotCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X3htbGZsb2F0KFhtbE9iamVjdCB2KQotICAgICAgICB7IHNldF9wcmltaXRpdmUoU2NoZW1hVHlwZS5CVENfRkxPQVQsIHYpOyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X3htbGRvdWJsZShYbWxPYmplY3QgdikKLSAgICAgICAgeyBzZXRfcHJpbWl0aXZlKFNjaGVtYVR5cGUuQlRDX0RPVUJMRSwgdik7IH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfeG1sZGVjaW1hbChYbWxPYmplY3QgdikKLSAgICAgICAgeyBzZXRfcHJpbWl0aXZlKFNjaGVtYVR5cGUuQlRDX0RFQ0lNQUwsIHYpOyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X3htbGR1cmF0aW9uKFhtbE9iamVjdCB2KQotICAgICAgICB7IHNldF9wcmltaXRpdmUoU2NoZW1hVHlwZS5CVENfRFVSQVRJT04sIHYpOyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X3htbGRhdGV0aW1lKFhtbE9iamVjdCB2KQotICAgICAgICB7IHNldF9wcmltaXRpdmUoU2NoZW1hVHlwZS5CVENfREFURV9USU1FLCB2KTsgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldF94bWx0aW1lKFhtbE9iamVjdCB2KQotICAgICAgICB7IHNldF9wcmltaXRpdmUoU2NoZW1hVHlwZS5CVENfVElNRSwgdik7IH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfeG1sZGF0ZShYbWxPYmplY3QgdikKLSAgICAgICAgeyBzZXRfcHJpbWl0aXZlKFNjaGVtYVR5cGUuQlRDX0RBVEUsIHYpOyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X3htbGd5ZWFybW9udGgoWG1sT2JqZWN0IHYpCi0gICAgICAgIHsgc2V0X3ByaW1pdGl2ZShTY2hlbWFUeXBlLkJUQ19HX1lFQVJfTU9OVEgsIHYpOyB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0X3htbGd5ZWFyKFhtbE9iamVjdCB2KQotICAgICAgICB7IHNldF9wcmltaXRpdmUoU2NoZW1hVHlwZS5CVENfR19ZRUFSLCB2KTsgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldF94bWxnbW9udGhkYXkoWG1sT2JqZWN0IHYpCi0gICAgICAgIHsgc2V0X3ByaW1pdGl2ZShTY2hlbWFUeXBlLkJUQ19HX01PTlRIX0RBWSwgdik7IH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRfeG1sZ2RheShYbWxPYmplY3QgdikKLSAgICAgICAgeyBzZXRfcHJpbWl0aXZlKFNjaGVtYVR5cGUuQlRDX0dfREFZLCB2KTsgfQotICAgIHByb3RlY3RlZCB2b2lkIHNldF94bWxnbW9udGgoWG1sT2JqZWN0IHYpCi0gICAgICAgIHsgc2V0X3ByaW1pdGl2ZShTY2hlbWFUeXBlLkJUQ19HX01PTlRILCB2KTsgfQotCi0KLQotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gY2hlY2soWG1sT2JqZWN0IHYsIFNjaGVtYVR5cGUgc1R5cGUpCi0gICAgewotICAgICAgICBYbWxPYmplY3RbXSB2YWxzID0gc1R5cGUuZ2V0RW51bWVyYXRpb25WYWx1ZXMoKTsKLSAgICAgICAgaWYgKHZhbHMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWxzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICh2YWxzW2ldLnZhbHVlRXF1YWxzKHYpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBib29sZWFuIGVxdWFsX3RvKFhtbE9iamVjdCB4bWxvYmopCi0gICAgewotICAgICAgICByZXR1cm4gX3ZhbHVlLnZhbHVlRXF1YWxzKHhtbG9iaik7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIGludCB2YWx1ZV9oYXNoX2NvZGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF92YWx1ZS5oYXNoQ29kZSgpOwotICAgIH0KLSAgICAKLSAgICBwcm90ZWN0ZWQgdm9pZCB2YWxpZGF0ZV9zaW1wbGV2YWwoU3RyaW5nIGxleGljYWwsIFZhbGlkYXRpb25Db250ZXh0IGN0eCkKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja19kYXRlZCgpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgY3R4LmludmFsaWQoIlVuaW9uIHZhbHVlICIgKyBsZXhpY2FsICsgIiBkb2VzIG5vdCBtYXRjaCBhbnkgb2YgdGhlIG1lbWJlciB0eXBlcyBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNjaGVtYVR5cGUoKSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChfdmFsdWUgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgY3R4LmludmFsaWQoIlVuaW9uIHZhbHVlICIgKyBsZXhpY2FsICsgIiBkb2VzIG5vdCBtYXRjaCBhbnkgb2YgdGhlIG1lbWJlciB0eXBlcyBmb3IgIiArIFFOYW1lSGVscGVyLnJlYWRhYmxlKHNjaGVtYVR5cGUoKSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAoKFhtbE9iamVjdEJhc2UpX3ZhbHVlKS52YWxpZGF0ZV9zaW1wbGV2YWwobGV4aWNhbCwgIGN0eCk7Ci0gICAgfQotICAgIAotCi19Ci0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbFVuc2lnbmVkQnl0ZUltcGwuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbFVuc2lnbmVkQnl0ZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQyNDM1Ny4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxVbnNpZ25lZEJ5dGVJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFVuc2lnbmVkQnl0ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci0KLQotcHVibGljIGNsYXNzIFhtbFVuc2lnbmVkQnl0ZUltcGwgZXh0ZW5kcyBKYXZhSW50SG9sZGVyRXggaW1wbGVtZW50cyBYbWxVbnNpZ25lZEJ5dGUKLXsKLSAgICBwdWJsaWMgWG1sVW5zaWduZWRCeXRlSW1wbCgpCi0gICAgICAgIHsgc3VwZXIoWG1sVW5zaWduZWRCeXRlLnR5cGUsIGZhbHNlKTsgfQotICAgIHB1YmxpYyBYbWxVbnNpZ25lZEJ5dGVJbXBsKFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IHN1cGVyKHR5cGUsIGNvbXBsZXgpOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxVbnNpZ25lZEludEltcGwuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbFVuc2lnbmVkSW50SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWMyM2ZhLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbFVuc2lnbmVkSW50SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxVbnNpZ25lZEludDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci0KLQotcHVibGljIGNsYXNzIFhtbFVuc2lnbmVkSW50SW1wbCBleHRlbmRzIEphdmFMb25nSG9sZGVyRXggaW1wbGVtZW50cyBYbWxVbnNpZ25lZEludAotewotICAgIHB1YmxpYyBYbWxVbnNpZ25lZEludEltcGwoKQotICAgICAgICB7IHN1cGVyKFhtbFVuc2lnbmVkSW50LnR5cGUsIGZhbHNlKTsgfQotICAgIHB1YmxpYyBYbWxVbnNpZ25lZEludEltcGwoU2NoZW1hVHlwZSB0eXBlLCBib29sZWFuIGNvbXBsZXgpCi0gICAgICAgIHsgc3VwZXIodHlwZSwgY29tcGxleCk7IH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbFVuc2lnbmVkTG9uZ0ltcGwuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbFVuc2lnbmVkTG9uZ0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJiYjNmZS4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxVbnNpZ25lZExvbmdJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFVuc2lnbmVkTG9uZzsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci0KLQotcHVibGljIGNsYXNzIFhtbFVuc2lnbmVkTG9uZ0ltcGwgZXh0ZW5kcyBKYXZhSW50ZWdlckhvbGRlckV4IGltcGxlbWVudHMgWG1sVW5zaWduZWRMb25nCi17Ci0gICAgcHVibGljIFhtbFVuc2lnbmVkTG9uZ0ltcGwoKQotICAgICAgICB7IHN1cGVyKFhtbFVuc2lnbmVkTG9uZy50eXBlLCBmYWxzZSk7IH0KLSAgICBwdWJsaWMgWG1sVW5zaWduZWRMb25nSW1wbChTY2hlbWFUeXBlIHR5cGUsIGJvb2xlYW4gY29tcGxleCkKLSAgICAgICAgeyBzdXBlcih0eXBlLCBjb21wbGV4KTsgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sVW5zaWduZWRTaG9ydEltcGwuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbFVuc2lnbmVkU2hvcnRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkYjM0YWQuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sVW5zaWduZWRTaG9ydEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sVW5zaWduZWRTaG9ydDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci0KLXB1YmxpYyBjbGFzcyBYbWxVbnNpZ25lZFNob3J0SW1wbCBleHRlbmRzIEphdmFJbnRIb2xkZXJFeCBpbXBsZW1lbnRzIFhtbFVuc2lnbmVkU2hvcnQKLXsKLSAgICBwdWJsaWMgWG1sVW5zaWduZWRTaG9ydEltcGwoKQotICAgICAgICB7IHN1cGVyKFhtbFVuc2lnbmVkU2hvcnQudHlwZSwgZmFsc2UpOyB9Ci0gICAgcHVibGljIFhtbFVuc2lnbmVkU2hvcnRJbXBsKFNjaGVtYVR5cGUgdHlwZSwgYm9vbGVhbiBjb21wbGV4KQotICAgICAgICB7IHN1cGVyKHR5cGUsIGNvbXBsZXgpOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxWYWx1ZURpc2Nvbm5lY3RlZEV4Y2VwdGlvbi5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sVmFsdWVEaXNjb25uZWN0ZWRFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGMwNWRiYS4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxWYWx1ZURpc2Nvbm5lY3RlZEV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1wdWJsaWMgY2xhc3MgWG1sVmFsdWVEaXNjb25uZWN0ZWRFeGNlcHRpb24gZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uCi17Ci0gICAgWG1sVmFsdWVEaXNjb25uZWN0ZWRFeGNlcHRpb24gKCApCi0gICAgewotICAgIH0KLSAgICAKLSAgICBYbWxWYWx1ZURpc2Nvbm5lY3RlZEV4Y2VwdGlvbiAoIFN0cmluZyBtZXNzYWdlICkKLSAgICB7Ci0gICAgICAgIHN1cGVyKCBtZXNzYWdlICk7Ci0gICAgfQotICAgIAotICAgIFhtbFZhbHVlRGlzY29ubmVjdGVkRXhjZXB0aW9uICggU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBjYXVzZSApCi0gICAgewotICAgICAgICBzdXBlciggbWVzc2FnZSwgY2F1c2UgKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxWYWx1ZU5vdE5pbGxhYmxlRXhjZXB0aW9uLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxWYWx1ZU5vdE5pbGxhYmxlRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlMmUxMzUuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sVmFsdWVOb3ROaWxsYWJsZUV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1wdWJsaWMgY2xhc3MgWG1sVmFsdWVOb3ROaWxsYWJsZUV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24KLXsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1htbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbi5qYXZhIGIvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMTdiY2MuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLXB1YmxpYyBjbGFzcyBYbWxWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb24gZXh0ZW5kcyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KLXsKLSAgICBwdWJsaWMgWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uKCkge30KLSAgICBwdWJsaWMgWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlKSB7IHN1cGVyKG1lc3NhZ2UpOyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9zb2FwL1NPQVBBcnJheVR5cGUuamF2YSBiL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL3NvYXAvU09BUEFycmF5VHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDNiZmY3Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlaW1wbC9vcmcvYXBhY2hlL3htbGJlYW5zL3NvYXAvU09BUEFycmF5VHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDk4ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5zb2FwOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5YbWxWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5YbWxXaGl0ZXNwYWNlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uUU5hbWVIZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5QcmVmaXhSZXNvbHZlcjsKLQotcHVibGljIGZpbmFsIGNsYXNzIFNPQVBBcnJheVR5cGUKLXsKLSAgICAvLyBFeGFtcGxlIGZvbzpiYXJbLF1bXVssLF1bNyw5XQotICAgIC8vIC0+IF90eXBlID0gUU5hbWUoZm9vOmJhcikKLSAgICAvLyAtPiBfcmFua3MgPSB7MiwxLDN9Ci0gICAgLy8gLT4gX2RpbWVuc2lvbnMgPSB7Nyw5fQotICAgIHByaXZhdGUgUU5hbWUgX3R5cGU7Ci0gICAgcHJpdmF0ZSBpbnRbXSBfcmFua3M7IC8vIGlmIHJhbmtzIGlzIGVtcHR5LCBpdCBtZWFucyB0aGVyZSBhcmUgbm8gbmVzdGVkIGFycmF5cwotICAgIHByaXZhdGUgaW50W10gX2RpbWVuc2lvbnM7IC8vIEFueSBkaW1lbnNpb24gY2FuIGJlIC0xIHRvIGluZGljYXRlICJhbnkiLgotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGUgcmFua3MgZm9yIHRoZSBwYXNzZWQgU09BUEFycmF5VHlwZQotICAgICAqIGFyZSBlcXVhbCB0byB0aGlzIG9uZS4KLSAgICAgKgotICAgICAqIERvZXMgTk9UIGNvbXBhcmUgdGhlIF90eXBlIGZpZWxkcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1NhbWVSYW5rQXMoU09BUEFycmF5VHlwZSBvdGhlclR5cGUpCi0gICAgewotICAgICAgICBpZiAoX3JhbmtzLmxlbmd0aCAhPSBvdGhlclR5cGUuX3JhbmtzLmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfcmFua3MubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfcmFua3NbaV0gIT0gb3RoZXJUeXBlLl9yYW5rc1tpXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKF9kaW1lbnNpb25zLmxlbmd0aCAhPSBvdGhlclR5cGUuX2RpbWVuc2lvbnMubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHaXZlbiBTT0FQIDEuMS1mb3JtYXR0ZWQgaW5kZXggc3RyaW5nLCByZXR1cm5zIGFuIGFycmF5Ci0gICAgICogaW5kZXguICBGb3IgZXhhbXBsZSwgZ2l2ZW4gIls0LDMsNV0iLCByZXR1cm5zIGFuIGludCBhcnJheQotICAgICAqIGNvbnRhaW5pbmcgNCwgMywgYW5kIDUuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBpbnRbXSBwYXJzZVNvYXAxMUluZGV4KFN0cmluZyBpbmJyYWNlcykKLSAgICB7Ci0gICAgICAgIGluYnJhY2VzID0gWG1sV2hpdGVzcGFjZS5jb2xsYXBzZShpbmJyYWNlcywgWG1sV2hpdGVzcGFjZS5XU19DT0xMQVBTRSk7Ci0gICAgICAgIGlmICghaW5icmFjZXMuc3RhcnRzV2l0aCgiWyIpIHx8ICFpbmJyYWNlcy5lbmRzV2l0aCgiXSIpKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTWlzZm9ybWVkIFNPQVAgMS4xIGluZGV4OiBtdXN0IGJlIGNvbnRhaW5lZCBpbiBicmFjZXMgW10iKTsKLSAgICAgICAgcmV0dXJuIGludGVybmFsUGFyc2VDb21tYUludFN0cmluZyhpbmJyYWNlcy5zdWJzdHJpbmcoMSwgaW5icmFjZXMubGVuZ3RoKCkgLSAxKSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50W10gaW50ZXJuYWxQYXJzZUNvbW1hSW50U3RyaW5nKFN0cmluZyBjc2wpCi0gICAgewotICAgICAgICBMaXN0IGRpbVN0cmluZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIGludCBpID0gMDsKLSAgICAgICAgZm9yICg7OykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGogPSBjc2wuaW5kZXhPZignLCcsIGkpOwotICAgICAgICAgICAgaWYgKGogPCAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRpbVN0cmluZ3MuYWRkKGNzbC5zdWJzdHJpbmcoaSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGltU3RyaW5ncy5hZGQoY3NsLnN1YnN0cmluZyhpLCBqKSk7Ci0gICAgICAgICAgICBpID0gaiArIDE7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnRbXSByZXN1bHQgPSBuZXcgaW50W2RpbVN0cmluZ3Muc2l6ZSgpXTsKLSAgICAgICAgaSA9IDA7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaXQgPSBkaW1TdHJpbmdzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgZGltU3RyaW5nID0gWG1sV2hpdGVzcGFjZS5jb2xsYXBzZSgoU3RyaW5nKWl0Lm5leHQoKSwgWG1sV2hpdGVzcGFjZS5XU19DT0xMQVBTRSk7Ci0gICAgICAgICAgICBpZiAoZGltU3RyaW5nLmVxdWFscygiKiIpIHx8IGRpbVN0cmluZy5lcXVhbHMoIiIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gSW50ZWdlci5wYXJzZUludChkaW1TdHJpbmcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uKCJNYWxmb3JtZWQgaW50ZWdlciBpbiBTT0FQIGFycmF5IGluZGV4Iik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUGFyc2VzIGEgU09BUCAxLjEgYXJyYXkgdHlwZSBzdHJpbmcuCi0gICAgICoKLSAgICAgKiBTaW5jZSBhbiBhcnJheSB0eXBlIHN0cmluZyBjb250YWlucyBhIFFOYW1lLCBhIHByZWZpeCByZXNvbHZlcgotICAgICAqIG11c3QgYmUgcGFzc2VkLgotICAgICAqLwotICAgIHB1YmxpYyBTT0FQQXJyYXlUeXBlKFN0cmluZyBzLCBQcmVmaXhSZXNvbHZlciBtKQotICAgIHsKLSAgICAgICAgaW50IGZpcnN0YnJhY2UgPSBzLmluZGV4T2YoJ1snKTsKLSAgICAgICAgaWYgKGZpcnN0YnJhY2UgPCAwKQotICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOwotCi0gICAgICAgIC8vIGdyYWIgdGhlIFFOYW1lCi0gICAgICAgIFN0cmluZyBmaXJzdHBhcnQgPSBYbWxXaGl0ZXNwYWNlLmNvbGxhcHNlKHMuc3Vic3RyaW5nKDAsIGZpcnN0YnJhY2UpLCBYbWxXaGl0ZXNwYWNlLldTX0NPTExBUFNFKTsKLSAgICAgICAgaW50IGZpcnN0Y29sb24gPSBmaXJzdHBhcnQuaW5kZXhPZignOicpOwotICAgICAgICBTdHJpbmcgcHJlZml4ID0gIiI7Ci0gICAgICAgIGlmIChmaXJzdGNvbG9uID49IDApCi0gICAgICAgICAgICBwcmVmaXggPSBmaXJzdHBhcnQuc3Vic3RyaW5nKDAsIGZpcnN0Y29sb24pOwotCi0gICAgICAgIFN0cmluZyB1cmkgPSBtLmdldE5hbWVzcGFjZUZvclByZWZpeChwcmVmaXgpOwotICAgICAgICBpZiAodXJpID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uKCk7Ci0KLSAgICAgICAgX3R5cGUgPSBRTmFtZUhlbHBlci5mb3JMTlMoZmlyc3RwYXJ0LnN1YnN0cmluZyhmaXJzdGNvbG9uICsgMSksIHVyaSk7Ci0KLSAgICAgICAgaW5pdERpbWVuc2lvbnMocywgZmlyc3RicmFjZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50W10gRU1QVFlfSU5UX0FSUkFZID0gbmV3IGludFswXTsKLQotICAgIC8qKgotICAgICAqIFBhcnNlcyBTT0FQIDEuMShhZHZhbmNlZCkgYXJyYXkgdHlwZSBzdHJpbmdzLgotICAgICAqCi0gICAgICogU2luY2UgaW4gU09BUCAxLjEoYWR2YW5jZWQpIHRoZSBkaW1lbnNpb24gc3BlY2lmaWNhdGlvbiBpcyBzZXBhcmF0ZWQgZnJvbSB0aGUKLSAgICAgKiBRTmFtZSBmb3IgdGhlIHVuZGVybHlpbmcgdHlwZSwgdGhlc2UgYXJlIHBhc3NlZCBpbiBzZXBhcmF0ZQotICAgICAqIGFyZ3VtZW50cy4KLSAgICAgKi8KLSAgICBwdWJsaWMgU09BUEFycmF5VHlwZShRTmFtZSBuYW1lLCBTdHJpbmcgZGltZW5zaW9ucykKLSAgICB7Ci0gICAgICAgIGludCBmaXJzdGJyYWNlID0gZGltZW5zaW9ucy5pbmRleE9mKCdbJyk7Ci0gICAgICAgIGlmIChmaXJzdGJyYWNlIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgX3R5cGUgPSBuYW1lOwotICAgICAgICAgICAgX3JhbmtzID0gRU1QVFlfSU5UX0FSUkFZOwotICAgICAgICAgICAgZGltZW5zaW9ucyA9IFhtbFdoaXRlc3BhY2UuY29sbGFwc2UoZGltZW5zaW9ucywgWG1sV2hpdGVzcGFjZS5XU19DT0xMQVBTRSk7Ci0gICAgICAgICAgICBTdHJpbmdbXSBkaW1TdHJpbmdzID0gZGltZW5zaW9ucy5zcGxpdCgiICIpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaW1TdHJpbmdzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBkaW1TdHJpbmcgPSBkaW1TdHJpbmdzW2ldOwotICAgICAgICAgICAgICAgIGlmIChkaW1TdHJpbmcuZXF1YWxzKCIqIikpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBfZGltZW5zaW9uc1tpXSA9IC0xOwotICAgICAgICAgICAgICAgICAgICAvLyBfaGFzSW5kZXRlcm1pbmF0ZURpbWVuc2lvbnMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgX2RpbWVuc2lvbnNbaV0gPSBJbnRlZ2VyLnBhcnNlSW50KGRpbVN0cmluZ3NbaV0pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgX3R5cGUgPSBuYW1lOwotICAgICAgICAgICAgaW5pdERpbWVuc2lvbnMoZGltZW5zaW9ucywgZmlyc3RicmFjZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHaXZlbiBhIG5lc3RlZCBTT0FQQXJyYXlUeXBlIGFuZCBhIHNldCBvZiBkaW1lbnNpb25zIGZvciB0aGUgb3V0ZXJtb3N0Ci0gICAgICogYXJyYXksIGNvbWVzIHVwIHdpdGggdGhlIHJpZ2h0IFNPQVBBcnJheVR5cGUgZm9yIHRoZSB3aG9sZSB0aGluZy4KLSAgICAgKgotICAgICAqIEUuZy4sCi0gICAgICogTmVzdGVkIGZvbzpiYXJbLF1bXVssLF1bMSwyXQotICAgICAqIERpbWVuc2lvbnMgWzYsNyw4XQotICAgICAqIFJlc3VsdCAtPiBmb286YmFyWyxdW11bLCxdWyxdWzYsNyw4XQotICAgICAqLwotICAgIHB1YmxpYyBTT0FQQXJyYXlUeXBlKFNPQVBBcnJheVR5cGUgbmVzdGVkLCBpbnRbXSBkaW1lbnNpb25zKQotICAgIHsKLSAgICAgICAgX3R5cGUgPSBuZXN0ZWQuX3R5cGU7Ci0KLSAgICAgICAgX3JhbmtzID0gbmV3IGludFtuZXN0ZWQuX3JhbmtzLmxlbmd0aCArIDFdOwotICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KF9yYW5rcywgMCwgbmVzdGVkLl9yYW5rcywgMCwgbmVzdGVkLl9yYW5rcy5sZW5ndGgpOwotICAgICAgICBfcmFua3NbX3JhbmtzLmxlbmd0aCAtIDFdID0gbmVzdGVkLl9kaW1lbnNpb25zLmxlbmd0aDsKLQotICAgICAgICBfZGltZW5zaW9ucyA9IG5ldyBpbnRbZGltZW5zaW9ucy5sZW5ndGhdOwotICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGRpbWVuc2lvbnMsIDAsIF9kaW1lbnNpb25zLCAwLCBkaW1lbnNpb25zLmxlbmd0aCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW5pdGlhbGl6ZSBkaW1lbnNpb25zIGJhc2VkIG9uIFNPQVAxMSBwYXJzZWQgZGltZW5zaW9uIHN1YnN0cmluZwotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBpbml0RGltZW5zaW9ucyhTdHJpbmcgcywgaW50IGZpcnN0YnJhY2UpCi0gICAgewotICAgICAgICBMaXN0IGJyYWNlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgaW50IGxhc3RicmFjZSA9IC0xOwotICAgICAgICBmb3IgKGludCBpID0gZmlyc3RicmFjZTsgaSA+PSAwOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxhc3RicmFjZSA9IHMuaW5kZXhPZignXScsIGkpOwotICAgICAgICAgICAgaWYgKGxhc3RicmFjZSA8IDApCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOwotICAgICAgICAgICAgYnJhY2VzLmFkZChzLnN1YnN0cmluZyhpICsgMSwgbGFzdGJyYWNlKSk7Ci0gICAgICAgICAgICBpID0gcy5pbmRleE9mKCdbJywgbGFzdGJyYWNlKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyB0cmFpbGVyID0gcy5zdWJzdHJpbmcobGFzdGJyYWNlICsgMSk7Ci0gICAgICAgIGlmICghWG1sV2hpdGVzcGFjZS5pc0FsbFNwYWNlKHRyYWlsZXIpKQotICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOwotCi0gICAgICAgIC8vIG5vdyBmaWxsIGluIHJhbmsgYXJyYXkKLSAgICAgICAgX3JhbmtzID0gbmV3IGludFticmFjZXMuc2l6ZSgpIC0gMV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX3JhbmtzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgY29tbWFzID0gKFN0cmluZylicmFjZXMuZ2V0KGkpOwotICAgICAgICAgICAgaW50IGNvbW1hY291bnQgPSAwOwotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjb21tYXMubGVuZ3RoKCk7IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjaGFyIGNoID0gY29tbWFzLmNoYXJBdChqKTsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJywnKQotICAgICAgICAgICAgICAgICAgICBjb21tYWNvdW50ICs9IDE7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIVhtbFdoaXRlc3BhY2UuaXNTcGFjZShjaCkpCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBYbWxWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF9yYW5rc1tpXSA9IGNvbW1hY291bnQgKyAxOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gZmluYWxseSBmaWxsIGluIGRpbWVuc2lvbiBhcnJheQotICAgICAgICBfZGltZW5zaW9ucyA9IGludGVybmFsUGFyc2VDb21tYUludFN0cmluZygoU3RyaW5nKWJyYWNlcy5nZXQoYnJhY2VzLnNpemUoKSAtIDEpKTsKLQotICAgICAgICAvKgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IF9kaW1lbnNpb25zLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX2RpbWVuc2lvbnNbaV0gPCAwKQotICAgICAgICAgICAgICAgIF9oYXNJbmRldGVybWluYXRlRGltZW5zaW9ucyA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgKi8KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBRTmFtZSBmb3IgdGhlIHJlZmVyZW5jZWQgdHlwZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgUU5hbWUgZ2V0UU5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF90eXBlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGFycmF5IG9mIHJhbmtzIGZvciBpbm5lciBuZXN0ZWQgYXJyYXlzLgotICAgICAqIEluIFNPQVAgMS4xLWFkdmFuY2VkLCB0aGlzIGlzIGFsd2F5cyBhbiBhcnJheSBvZiBsZW5ndGggemVyby4KLSAgICAgKiBJbiBTT0FQIDEuMSwgdGhpcyBhcnJheSByZWZsZWN0cyB0aGUgcmFua3Mgb2YgbmVzdGVkCi0gICAgICogYXJyYXlzLiBGb3IgZXhhbXBsZSBmb286YmFyWyxdWywsXVtdWzUsNl0gd2lsbCBwcm9kdWNlCi0gICAgICogYSByYW5rcyByZXN1bHQgb2YgMiwgMywgMS4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50W10gZ2V0UmFua3MoKQotICAgIHsKLSAgICAgICAgaW50W10gcmVzdWx0ID0gbmV3IGludFtfcmFua3MubGVuZ3RoXTsKLSAgICAgICAgU3lzdGVtLmFycmF5Y29weShfcmFua3MsIDAsIHJlc3VsdCwgMCwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgYXJyYXkgb2YgZGltZW5zaW9ucy4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50W10gZ2V0RGltZW5zaW9ucygpCi0gICAgewotICAgICAgICBpbnRbXSByZXN1bHQgPSBuZXcgaW50W19kaW1lbnNpb25zLmxlbmd0aF07Ci0gICAgICAgIFN5c3RlbS5hcnJheWNvcHkoX2RpbWVuc2lvbnMsIDAsIHJlc3VsdCwgMCwgcmVzdWx0Lmxlbmd0aCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGlzIGFycmF5IGNvbnRhaW5zIG5lc3RlZCBhcnJheXMuIEVxdWl2YWxlbnQKLSAgICAgKiB0byAoZ2V0UmFua3MoKS5sZW5ndGggPiAwKS4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBjb250YWluc05lc3RlZEFycmF5cygpCi0gICAgewotICAgICAgICByZXR1cm4gKF9yYW5rcy5sZW5ndGggPiAwKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBkaW1lbnNpb25zIGFzIGEgc3RyaW5nLCBlLmcuLCBbLF1bMiwzLDRdCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBzb2FwMTFEaW1lbnNpb25TdHJpbmcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHNvYXAxMURpbWVuc2lvblN0cmluZyhfZGltZW5zaW9ucyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2l2ZW4gYW4gYWN0dWFsIHNldCBvZiBkaW1lbnNpb25zIHRoYXQgbWF5IGRpZmZlciBmcm9tCi0gICAgICogdGhlIGRlZmF1bHQgdGhhdCBpcyBzdG9yZWQsIG91dHB1dHMgdGhlIHNvYXAgYXJyYXlUeXBlCi0gICAgICogc3RyaW5nLgotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgc29hcDExRGltZW5zaW9uU3RyaW5nKGludFtdIGFjdHVhbERpbWVuc2lvbnMpCi0gICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX3JhbmtzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBzYi5hcHBlbmQoJ1snKTsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSAxOyBqIDwgX3JhbmtzW2ldOyBqKyspCi0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKCcsJyk7Ci0gICAgICAgICAgICBzYi5hcHBlbmQoJ10nKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNiLmFwcGVuZCgnWycpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFjdHVhbERpbWVuc2lvbnMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpID4gMCkKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoJywnKTsKLSAgICAgICAgICAgIGlmIChhY3R1YWxEaW1lbnNpb25zW2ldID49IDApCi0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKGFjdHVhbERpbWVuc2lvbnNbaV0pOwotICAgICAgICB9Ci0gICAgICAgIHNiLmFwcGVuZCgnXScpOwotICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFNPQVBBcnJheVR5cGUoKQotICAgIHsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTT0FQIDEuMgotICAgICAqIENvbnN0cnVjdHMgYSBTT0FQQXJyYXlUeXBlIGZyb20gc29hcC1lbmM6aXRlbVR5cGUgYW5kCi0gICAgICogc29hcC1lbmM6YXJyYXlTaXplIGF0dHJpYnV0ZXMKLSAgICAgKiBAcGFyYW0gaXRlbVR5cGUgdGhlIGl0ZW0gdHlwZSBRTmFtZQotICAgICAqIEBwYXJhbSBhcnJheVNpemUgYSBzdHJpbmcgd2l0aCBkaW1lbnRpb25zIGxpa2U6ICogMyA0Ci0gICAgICogQHJldHVybiBhIFNPQVBBcnJheVR5cGUgdG8gcmVwcmVzZW50IHRoaXMKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFNPQVBBcnJheVR5cGUgbmV3U29hcDEyQXJyYXkoUU5hbWUgaXRlbVR5cGUsIFN0cmluZyBhcnJheVNpemUpCi0gICAgewotICAgICAgICBpbnQgW10gcmFua3MgPSBFTVBUWV9JTlRfQVJSQVk7Ci0gICAgICAgIGFycmF5U2l6ZSA9IFhtbFdoaXRlc3BhY2UuY29sbGFwc2UoYXJyYXlTaXplLCBYbWxXaGl0ZXNwYWNlLldTX0NPTExBUFNFKTsKLSAgICAgICAgU3RyaW5nW10gZGltU3RyaW5ncyA9IGFycmF5U2l6ZS5zcGxpdCgiICIpOwotICAgICAgICBpbnRbXSBkaW1lbnNpb25zID0gbmV3IGludFtkaW1TdHJpbmdzLmxlbmd0aF07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGltU3RyaW5ncy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIGRpbVN0cmluZyA9IGRpbVN0cmluZ3NbaV07Ci0gICAgICAgICAgICBpZiAoaT09MCAmJiBkaW1TdHJpbmcuZXF1YWxzKCIqIikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGltZW5zaW9uc1tpXSA9IC0xOwotICAgICAgICAgICAgICAgIC8vIF9oYXNJbmRldGVybWluYXRlRGltZW5zaW9ucyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBkaW1lbnNpb25zW2ldID0gSW50ZWdlci5wYXJzZUludChkaW1TdHJpbmdzW2ldKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBTT0FQQXJyYXlUeXBlIHNvdCA9IG5ldyBTT0FQQXJyYXlUeXBlKCk7Ci0gICAgICAgIHNvdC5fcmFua3MgPSByYW5rczsKLSAgICAgICAgc290Ll90eXBlID0gaXRlbVR5cGU7Ci0gICAgICAgIHNvdC5fZGltZW5zaW9ucyA9IGRpbWVuc2lvbnM7Ci0gICAgICAgIHJldHVybiBzb3Q7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU09BUCAxLjIKLSAgICAgKiBHaXZlbiBhbiBhY3R1YWwgc2V0IG9mIGRpbWVuc2lvbnMgdGhhdCBtYXkgZGlmZmVyIGZyb20KLSAgICAgKiB0aGUgZGVmYXVsdCB0aGF0IGlzIHN0b3JlZCwgb3V0cHV0cyB0aGUgc29hcCBhcnJheVNpemUKLSAgICAgKiBzdHJpbmcuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBzb2FwMTJEaW1lbnNpb25TdHJpbmcoaW50W10gYWN0dWFsRGltZW5zaW9ucykKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFjdHVhbERpbWVuc2lvbnMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpID4gMCkKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoJyAnKTsKLSAgICAgICAgICAgIGlmIChhY3R1YWxEaW1lbnNpb25zW2ldID49IDApCi0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKGFjdHVhbERpbWVuc2lvbnNbaV0pOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYSBTT0FQQXJyYXlUeXBlIHJlZmxlY3RpbmcgdGhlIGRpbWVuc2lvbnMKLSAgICAgKiBvZiB0aGUgbmV4dCBuZXN0ZWQgYXJyYXkuCi0gICAgICovCi0gICAgcHVibGljIFNPQVBBcnJheVR5cGUgbmVzdGVkQXJyYXlUeXBlKCkKLSAgICB7Ci0gICAgICAgIGlmICghY29udGFpbnNOZXN0ZWRBcnJheXMoKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLQotICAgICAgICBTT0FQQXJyYXlUeXBlIHJlc3VsdCA9IG5ldyBTT0FQQXJyYXlUeXBlKCk7Ci0KLSAgICAgICAgcmVzdWx0Ll90eXBlID0gX3R5cGU7Ci0KLSAgICAgICAgcmVzdWx0Ll9yYW5rcyA9IG5ldyBpbnRbX3JhbmtzLmxlbmd0aCAtIDFdOwotICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KF9yYW5rcywgMCwgcmVzdWx0Ll9yYW5rcywgMCwgcmVzdWx0Ll9yYW5rcy5sZW5ndGgpOwotCi0gICAgICAgIHJlc3VsdC5fZGltZW5zaW9ucyA9IG5ldyBpbnRbX3JhbmtzW19yYW5rcy5sZW5ndGggLSAxXV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0Ll9kaW1lbnNpb25zLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgcmVzdWx0Ll9kaW1lbnNpb25zW2ldID0gLTE7Ci0KLSAgICAgICAgLy8gcmVzdWx0Ll9oYXNJbmRldGVybWluYXRlRGltZW5zaW9ucyA9IChyZXN1bHQuX2RpbWVuc2lvbnMubGVuZ3RoID4gMCk7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoX3R5cGUuaGFzaENvZGUoKSArIF9kaW1lbnNpb25zLmxlbmd0aCArIF9yYW5rcy5sZW5ndGggKyAoX2RpbWVuc2lvbnMubGVuZ3RoID09IDAgPyAwIDogX2RpbWVuc2lvbnNbMF0pKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikKLSAgICB7Ci0gICAgICAgIGlmIChvYmogPT0gdGhpcykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGlmICghb2JqLmdldENsYXNzKCkuZXF1YWxzKGdldENsYXNzKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFNPQVBBcnJheVR5cGUgc2F0ID0gKFNPQVBBcnJheVR5cGUpb2JqOwotCi0gICAgICAgIGlmICghX3R5cGUuZXF1YWxzKHNhdC5fdHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKF9yYW5rcy5sZW5ndGggIT0gc2F0Ll9yYW5rcy5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKF9kaW1lbnNpb25zLmxlbmd0aCAhPSBzYXQuX2RpbWVuc2lvbnMubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX3JhbmtzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgaWYgKF9yYW5rc1tpXSAhPSBzYXQuX3JhbmtzW2ldKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IF9kaW1lbnNpb25zLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgaWYgKF9kaW1lbnNpb25zW2ldICE9IHNhdC5fZGltZW5zaW9uc1tpXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVpbXBsL29yZy9hcGFjaGUveG1sYmVhbnMvc29hcC9TY2hlbWFXU0RMQXJyYXlUeXBlLmphdmEgYi92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9zb2FwL1NjaGVtYVdTRExBcnJheVR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZhYTc2OS4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZWltcGwvb3JnL2FwYWNoZS94bWxiZWFucy9zb2FwL1NjaGVtYVdTRExBcnJheVR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5zb2FwOwotCi0vKioKLSAqIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCBzY2hlbWEgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMKLSAqIGNhbiBiZSBjb2VyY2VkIHRvIHRoaXMgaW50ZXJmYWNlIGluIG9yZGVyIHRvIHJldHJpZXZlIHRoZSB2YWx1ZQotICogb2YgdGhlIHdzZGw6YXJyYXlUeXBlIGF0dHJpYnV0ZXMgb24gYXR0cmlidXRlcyBhbmQgZWxlbWVudHMuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgU2NoZW1hV1NETEFycmF5VHlwZQotewotICAgIFNPQVBBcnJheVR5cGUgZ2V0V1NETEFycmF5VHlwZSgpOwotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVzdG9yZS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL05hbWVzcGFjZU1hbmFnZXIuamF2YSBiL3YyL3NyYy90eXBlc3RvcmUvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9OYW1lc3BhY2VNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjNDY2NzkuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVzdG9yZS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL05hbWVzcGFjZU1hbmFnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uUHJlZml4UmVzb2x2ZXI7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgTmFtZXNwYWNlTWFuYWdlciBleHRlbmRzIFByZWZpeFJlc29sdmVyCi17Ci0gICAgLyoqCi0gICAgICogQ2FsZWQgd2hlbiB0aGUgdXNlciBuZWVkcyBhIHByZWZpeCBieSB3aGljaCB0byByZWZlcmVuY2UgYSBnaXZlbgotICAgICAqIFhtbCBuYW1lc3BhY2UuIEEgc3VnZ2VzdGVkIHByZWZpeCBpcyBwYXNzZWQsIHdoaWNoIG1heSBiZSBudWxsOwotICAgICAqIHRoZSBzdWdnZXN0aW9uIG1heSBiZSBpZ25vcmVkLgotICAgICAqLwotICAgIAotICAgIFN0cmluZyBmaW5kX3ByZWZpeF9mb3JfbnN1cmkgKCBTdHJpbmcgbnN1cmksIFN0cmluZyBzdWdnZXN0ZWRfcHJlZml4ICk7Ci19Ci0gICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZXN0b3JlL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvVHlwZVN0b3JlLmphdmEgYi92Mi9zcmMvdHlwZXN0b3JlL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvVHlwZVN0b3JlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjMTczYzEuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVzdG9yZS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1R5cGVTdG9yZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzc4ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hRmllbGQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uVmFsaWRhdG9yTGlzdGVuZXI7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgVHlwZVN0b3JlIGV4dGVuZHMgTmFtZXNwYWNlTWFuYWdlcgotewotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcgY3Vyc29yIHBvc2l0aW9uZWQganVzdCBiZWZvcmUgdGhlIHBhcnQgb2YgdGhlIHRyZWUKLSAgICAgKiB3aGVyZSB0aGlzIFR5cGVTdG9yZSBpcyBsb2NhdGVkLgotICAgICAqLwotICAgIFhtbEN1cnNvciBuZXdfY3Vyc29yKCk7Ci0KLSAgICAvKioKLSAgICAgKi8KLSAgICB2b2lkIHZhbGlkYXRlICggVmFsaWRhdG9yTGlzdGVuZXIgdkV2ZW50U2luayApOwotCi0gICAgLyoqCi0gICAgICogR2V0IHRoZSBTY2hlbWFUeXBlTG9hZGVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RvcmUgY29udGlhbmluZyB0aGlzCi0gICAgICogVHlwZVN0b3JlLgotICAgICAqLwotICAgIFNjaGVtYVR5cGVMb2FkZXIgZ2V0X3NjaGVtYXR5cGVsb2FkZXIgKCApOwotCi0gICAgLyoqCi0gICAgICogQ2hhbmdlIHRoZSB0eXBlIG9mIHRoaXMgc3RvcmUgKHBlcmhhcHMgYnkgYXBwbHlpbmcgeHNpOnR5cGUpIGFuZAotICAgICAqIHJldHVybiB0aGUgbmV3IFR5cGVTdG9yZVVzZXIgKG9yIG9sZCBvbmUgaWYgdGhlIG5ldyB0eXBlIGlzIG5vdAotICAgICAqIGRpZmZlcmVudCkuCi0gICAgICovCi0gICAgVHlwZVN0b3JlVXNlciBjaGFuZ2VfdHlwZSAoIFNjaGVtYVR5cGUgc1R5cGUgKTsKLQotICAgIC8qKgotICAgICAqIFRlbGxzIGlmIHRoaXMgc3RvcmUgaXMgYW4gYXR0cmlidXRlIG9yIG5vdAotICAgICAqLwotICAgIGJvb2xlYW4gaXNfYXR0cmlidXRlICggKTsKLQotICAgIC8qKgotICAgICAqIEdldCB0aGUgdmFsdWUgb2YgeHNpOnR5cGUuICBSZXR1cm4gbnVsbCBpZiBub25lIG9yIHRoaXMgaXMgYW4gYXR0cmlidXRlCi0gICAgICogc3RvcmUuCi0gICAgICovCi0gICAgUU5hbWUgZ2V0X3hzaV90eXBlICggKTsKLQotICAgIC8qKgotICAgICAqIEEgdXNlciBvZiBhIFR5cGVTdG9yZSBjYWxscyBpbnZhbGlkYXRlX3RleHQgd2hlbiB0aGUgdW5kZXJseWluZwotICAgICAqIHZhbHVlIGhhcyBjaGFuZ2VkIGFuZCBoZSB3YW50cyB0aGUgdGV4dHN0b3JlIHRvIGNhbGwgaGltIGJhY2sgd2l0aAotICAgICAqIGEgZmV0Y2hfdGV4dCAoVHlwZVN0b3JlL1R5cGVTdG9yZVVzZXJzIHdvcmsgaW4gcGFpcnMpLgotICAgICAqLwotICAgIHZvaWQgaW52YWxpZGF0ZV90ZXh0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBBIHVzZXIgb2YgYSBUeXBlU3RvcmUgY2FsbHMgZmV0Y2hfdGV4dCB3aGVuIGhlIGtub3dzIGhpcyB2aWV3Ci0gICAgICogb2YgdGhlIHRleHQgaXMgaW52YWxpZCBhbmQgaGUgd2FudHMgdG8gc2VlIHdoYXQgdGhlIGFjdHVhbCB0ZXh0Ci0gICAgICogdmFsdWUgaXMuCi0gICAgICovCi0gICAgLy8gQlVHQlVHIChlcmljdmFzKSAxMjExMQotICAgIFN0cmluZyBmZXRjaF90ZXh0KGludCB3aGl0ZXNwYWNlUnVsZSk7Ci0KLSAgICBwdWJsaWMgc3RhdGljIGludCBXU19VTlNQRUNJRklFRCA9IDA7Ci0gICAgcHVibGljIHN0YXRpYyBpbnQgV1NfUFJFU0VSVkUgPSAxOwotICAgIHB1YmxpYyBzdGF0aWMgaW50IFdTX1JFUExBQ0UgPSAyOwotICAgIHB1YmxpYyBzdGF0aWMgaW50IFdTX0NPTExBUFNFID0gMzsKLQotICAgIC8qKgotICAgICAqIEEgdXNlciBvZiBhIFR5cGVTdG9yZSBjYWxscyBzdG9yZV90ZXh0IHdoZW4gaGUgd2FudHMgdGhlIFR5cGVTdG9yZQotICAgICAqIHRvIHJlbWVtYmVyIHRoZSBnaXZlbiB0ZXh0IGltbWVkaWF0ZWx5LiBUaGlzIHR5cGljYWxseSBoYXBwZW5zIHdoZW4KLSAgICAgKiB0aGUgdXNlciBoYXMgYSBub25jYW5vbmljYWwgKGJ1dCB2YWxpZCkgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHRvIHNhdmUsCi0gICAgICogYnV0IGRvZXNuJ3QgaGF2ZSB0aGUgc3RvcmFnZSBpbiB3aGljaCB0byBzYXZlIGl0LgotICAgICAqLwotICAgIHZvaWQgc3RvcmVfdGV4dChTdHJpbmcgdGV4dCk7Ci0KLSAgICAvKioKLSAgICAgKiBIZXJlIHRoZSBUeXBlU3RvcmUgaXMgcmVzcG9uc2libGUgZm9yIGxvY2F0aW5nIHRoZSBkZWZhdWx0IHZhbHVlLgotICAgICAqIFRoaXMgaXMgZG9uZSBhcyBmb2xsb3dzCi0gICAgICogKDEpIGdvIHRvIHRoZSBwYXJlbnQgVHlwZVN0b3JlVXNlcgotICAgICAqICgyKSBhc2sgaXQgdG8gZ2V0X2RlZmF1bHRfZWxlbWVudF90ZXh0KHFuYW1lKSAob3IgX2F0dHJpYnV0ZV8pLCBhbmQgcmV0dXJuIGl0IGlmIG5vdCBudWxsLgotICAgICAqICgyKSBvdGhlcndpc2UsIGdyYWIgYSBuZXcgVHlwZVN0b3JlVXNlclZpc2l0b3IgdmlhIHYgPSBwYXJlbnR1c2VyLm5ld192aXNpdG9yKCk7Ci0gICAgICogKDMpIGNhbGwgdi52aXNpdChuYW1lKSBvbiBfZXZlcnlfIGVsZW1lbnQgcW5hbWUgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGlzIG9uZSBpbiBvcmRlcgotICAgICAqICg0KSByZXR1cm4gdGhlIHJlc3VsdCBvZiB2LmdldF9kZWZhdWx0X3RleHQoKS4KLSAgICAgKi8KLSAgICBTdHJpbmcgY29tcHV0ZV9kZWZhdWx0X3RleHQoKTsKLQotICAgIC8qKgotICAgICAqIEhlcmUgdGhlIFR5cGVTdG9yZSBpcyByZXNwb25zaWJsZSBmb3IgZmlndXJpbmcgaWYgdGhpcyB2YWx1ZSBpcwotICAgICAqIG5pbGxhYmxlIGFuZC9vciBmaXhlZC4gVGhpcyBpcyBkb25lIGJ5Ci0gICAgICogKDEpIGdvIHRvIHRoZSBwYXJlbnQgVHlwZVN0b3JlVXNlcgotICAgICAqICgyKSBhc2sgaXQgdG8gZ2V0X2VsZW1lbnRmbGFncyhxbmFtZSksIGFuZCByZXR1cm4gaXQgaWYgbm90IC0xLgotICAgICAqICgyKSBvdGhlcndpc2UsIGdyYWIgYSBuZXcgVHlwZVN0b3JlVXNlclZpc2l0b3IgdmlhIHYgPSBwYXJlbnR1c2VyLm5ld192aXNpdG9yKCk7Ci0gICAgICogKDMpIGNhbGwgdi52aXNpdChuYW1lKSBvbiBfZXZlcnlfIGVsZW1lbnQgcW5hbWUgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGlzIG9uZSBpbiBvcmRlcgotICAgICAqICg0KSByZXR1cm4gdGhlIHJlc3VsdCBvZiB2LmdldF9lbGVtZW50ZmxhZ3MoKS4KLSAgICAgKi8KLSAgICBpbnQgY29tcHV0ZV9mbGFncygpOwotCi0KLSAgICAvKioKLSAgICAgKiBUZWxscyBpZiB0aGlzIHN0b3JlIHdhcyBjcmVhdGVkIHdpdGggdGhpcyBvcHRpb24gd2hpY2ggdGVsbHMgdGhlIHN0cm9uZ2x5IHR5cGVkCi0gICAgICogb2JqZWN0cyB0byBwZXJmb3JtIGxleGljYWwgYW5kIHZhbHVlIHZhbGlkYXRpb24gYWZ0ZXIgYSBzZXR0ZXIgaXMgY2FsbGVkLgotICAgICAqLwotICAgIGJvb2xlYW4gdmFsaWRhdGVfb25fc2V0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBIZXJlIHRoZSB0eXBlc3RvcmUgaXMgcmVzcG9zaWJsZSBmb3IgZmluZGluZyB0aGUgc2NoZW1hIGZpZWxkIGZvcgotICAgICAqIHRoaXMgb2JqZWN0LiBUaGlzIGlzIGRvbmUgYnkKLSAgICAgKiAoMSkgb3RoZXJ3aXNlLCBncmFiIGEgbmV3IFR5cGVTdG9yZVVzZXJWaXNpdG9yIHZpYSB2ID0gcGFyZW50dXNlci5uZXdfdmlzaXRvcigpOwotICAgICAqICgyKSBjYWxsIHYudmlzaXQobmFtZSkgb24gX2V2ZXJ5XyBlbGVtZW50IHFuYW1lIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhpcyBvbmUgaW4gb3JkZXIKLSAgICAgKiAoMykgcmV0dXJuIHRoZSByZXN1bHQgb2Ygdi5nZXRfc2NoZW1hX2ZpZWxkKCkuCi0gICAgICovCi0gICAgU2NoZW1hRmllbGQgZ2V0X3NjaGVtYV9maWVsZCgpOwotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTklMTEFCTEUgPSAxOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEhBU0RFRkFVTFQgPSAyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZJWEVEID0gNDsgLy8gYWx3YXlzIHNldCB3aXRoIEhBU0RFRkFVTFQKLQotICAgIC8qKgotICAgICAqIENhbGxlZCB3aGVuIHRoZSB2YWx1ZSBoYXMgYmVlbiBuaWxsZWQgb3IgdW5uaWxsZWQsIHNvIHRoZSB0ZXh0c3RvcmUKLSAgICAgKiBrbm93cyBpdCBuZWVkcyB0byB1cGRhdGUgdGhlIHhzaTpuaWwgYXR0cmlidXRlLgotICAgICAqLwotICAgIHZvaWQgaW52YWxpZGF0ZV9uaWwoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBUeXBlU3RvcmUgaXMgcmVwb25zaWJsZSBmb3IgZGlzY292ZXJpbmcgaWYgdGhpcyB2YWx1ZSBpcyBuaWwuCi0gICAgICogVGhpcyBpcyBkb25lIGJ5ICgxKSBnb2luZyB0byB0aGUgZWxlbWVudCBhbmQgKDIpIGZpbmRpbmcgdGhlCi0gICAgICogeHNpOm5pbCBhdHRyaWJ1dGUgaWYgcHJlc2VudCBhbmQgKDMpIHJldHVybiB0cnVlIGlmIHRoZSBjb2xsYXBzZWQKLSAgICAgKiB0ZXh0dWFsIHZhbHVlIGlzIGVpdGhlciBleGFjdGx5IHRoZSBzdHJpbmcgInRydWUiIG9yICIxIi4KLSAgICAgKi8KLSAgICBib29sZWFuIGZpbmRfbmlsKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBjb3VudCBvZiBlbGVtZW50cyB3aXRoIHRoZSBnaXZlbiBuYW1lIG93bmVkIGJ5IHRoaXMKLSAgICAgKiB0ZXh0c3RvcmUuCi0gICAgICovCi0gICAgaW50IGNvdW50X2VsZW1lbnRzKFFOYW1lIG5hbWUpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgY291bnQgb2YgZWxlbWVudHMgdGhhdCBtYXRjaCBvZiB0aGUgbmFtZXMuCi0gICAgICovCi0gICAgaW50IGNvdW50X2VsZW1lbnRzKFFOYW1lU2V0IG5hbWVzKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIFR5cGVTdG9yZVVzZXIgdW5kZXJuZWF0aCB0aGUgaXRoIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4KLSAgICAgKiBuYW1lIG93bmVkIGJ5IHRoaXMgdGV4dHN0b3JlLCBvciBudWxsIGlmIG5vbmUgd2FzIGZvdW5kLgotICAgICAqCi0gICAgICogRG8gbm90IHRocm93IGFuIEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gaWYgaSBpcyBiYWQgLQotICAgICAqIHJldHVybiBudWxsIGluc3RlYWQuIFRoZSByZWFzb24gaXMgdG8gYWxsb3cgdXMgdG8gZmFpbAotICAgICAqIGFuZCB0aGVuIGZvbGxvdyB3aXRoIGFuIGFkZF9lbGVtZW50X2V0YyBpZiB3ZSBjaG9vc2UgdG8sCi0gICAgICogd2l0aG91dCByYW5kb21seSBjYXRjaGluZyBleGNlcHRpb25zLgotICAgICAqLwotLy8gQlVHQlVHIC0gdGhpcyBzaG91bGQgYmUgY2FsbGVkIGZpbmRfZWxlbWVudAotLy8gQlVHQlVHIC0gdGhpcyBzaG91bGQgYmUgY2FsbGVkIGZpbmRfZWxlbWVudAotLy8gQlVHQlVHIC0gdGhpcyBzaG91bGQgYmUgY2FsbGVkIGZpbmRfZWxlbWVudAotLy8gQlVHQlVHIC0gdGhpcyBzaG91bGQgYmUgY2FsbGVkIGZpbmRfZWxlbWVudAotLy8gQlVHQlVHIC0gdGhpcyBzaG91bGQgYmUgY2FsbGVkIGZpbmRfZWxlbWVudAotICAgIFR5cGVTdG9yZVVzZXIgZmluZF9lbGVtZW50X3VzZXIoUU5hbWUgbmFtZSwgaW50IGkpOwotCi0gICAgLyoqCi0gICAgICogTGlrZSBmaW5kX2VsZW1lbnRfdXNlciBidXQgYWNjZXB0cyBhIHNldCBvZiBuYW1lcyB0byBzZWFyY2ggZm9yLgotICAgICAqLwotICAgIFR5cGVTdG9yZVVzZXIgZmluZF9lbGVtZW50X3VzZXIoUU5hbWVTZXQgbmFtZXMsIGludCBpKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYWxsIHRoZSBUeXBlU3RvcmVVc2VycyBjb3JyZXNwb25kaW5nIHRvIGVsZW1lbnRzIHdpdGggdGhlCi0gICAgICogZ2l2ZW4gbmFtZSBvd25lZCBieSB0aGlzIHR5cGVzdG9yZSwgb3IgdGhlIGVtcHR5IGFycmF5IG9mCi0gICAgICogVHlwZVN0b3JlVXNlcnMgaWYgbm9uZSB3YXMgZm91bmQuCi0gICAgICovCi0vLyBCVUdCVUcgLSB0aGlzIHNob3VsZCBiZSBjYWxsZWQgZmluZF9hbGxfZWxlbWVudAotLy8gQlVHQlVHIC0gdGhpcyBzaG91bGQgYmUgY2FsbGVkIGZpbmRfYWxsX2VsZW1lbnQKLS8vIEJVR0JVRyAtIHRoaXMgc2hvdWxkIGJlIGNhbGxlZCBmaW5kX2FsbF9lbGVtZW50Ci0vLyBCVUdCVUcgLSB0aGlzIHNob3VsZCBiZSBjYWxsZWQgZmluZF9hbGxfZWxlbWVudAotICAgIHZvaWQgZmluZF9hbGxfZWxlbWVudF91c2VycyhRTmFtZSBuYW1lLCBMaXN0IGZpbGxNZVVwKTsKLQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhbGwgVHlwZVN0b3JlVXNlcnMgY29ycmVzcG9uZGluZyB0byBlbGVtZW50cyB3aXRoIG9uZQotICAgICAqIG9mIHRoZSBuYW1lcyBpcyB0aGUgUU5hbWVTZXQuCi0gICAgICovCi0gICAgdm9pZCBmaW5kX2FsbF9lbGVtZW50X3VzZXJzKFFOYW1lU2V0IG5hbWUsIExpc3QgZmlsbE1lVXApOwotCi0gICAgLyoqCi0gICAgICogSW5zZXJ0cyBhIG5ldyBlbGVtZW50IGF0IHRoZSBwb3NpdGlvbiB0aGF0IHdpbGwgbWFrZSBpdAotICAgICAqIHRoZSBpdGggZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBuYW1lIG93bmVkIGJ5IHRoaXMgdGV4dHN0b3JlLAotICAgICAqIGFuZCByZXR1cm5zIGEgVHlwZVN0b3JlVXNlciBmb3IgdGhhdCBlbGVtZW50LgotICAgICAqCi0gICAgICogTm90ZSB0aGF0IGlmIHRoZXJlIGFyZSBubyBleGlzdGluZyBlbGVtZW50cyBvZiB0aGUgZ2l2ZW4KLSAgICAgKiBuYW1lLCB5b3UgbWF5IG5lZWQgdG8gY2FsbCBiYWNrIHRvIGRpc2NvdmVyIHRoZSBwcm9wZXIKLSAgICAgKiBvcmRlcmluZyB0byB1c2UgdG8gaW5zZXJ0IHRoZSBmaXJzdCBvbmUuIE90aGVyd2lzZSwKLSAgICAgKiBpdCBzaG91bGQgYmUgaW5zZXJ0ZWQgYWRqYWNlbnQgdG8gZXhpc3RpbmcgZWxlbWVudHMgd2l0aAotICAgICAqIHRoZSBzYW1lIG5hbWUuCi0gICAgICoKLSAgICAgKiBTaG91bGQgdGhyb3cgYW4gSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpZiBpIDwgMAotICAgICAqIG9yIGlmIGkgPiAjIG9mIGVsdHMKLSAgICAgKi8KLQotLy8gQlVHQlVHIC0gdGhpcyBzaG91bGQgYmUgY2FsbGVkIGluc2VydF9lbGVtZW50Ci0vLyBCVUdCVUcgLSB0aGlzIHNob3VsZCBiZSBjYWxsZWQgaW5zZXJ0X2VsZW1lbnQKLS8vIEJVR0JVRyAtIHRoaXMgc2hvdWxkIGJlIGNhbGxlZCBpbnNlcnRfZWxlbWVudAotICAgIFR5cGVTdG9yZVVzZXIgaW5zZXJ0X2VsZW1lbnRfdXNlcihRTmFtZSBuYW1lLCBpbnQgaSk7Ci0KLSAgICAvKioKLSAgICAgKiBMaWtlIHRoZSBhYm92ZSBtZXRob2QsIGV4Y2VwdCB0aGF0IGl0IGluc2VydHMgYW4gZWxlbWVudCBuYW1lZAotICAgICAqIG5hbWUsIGFmdGVyIHRoZSBpdGggbWVtYmVyIG9mIHNldC4KLSAgICAgKi8KLSAgICBUeXBlU3RvcmVVc2VyIGluc2VydF9lbGVtZW50X3VzZXIoUU5hbWVTZXQgc2V0LCBRTmFtZSBuYW1lLCBpbnQgaSk7Ci0KLSAgICAvKioKLSAgICAgKiBBZGRzIGEgbmV3IGVsZW1lbnQgYXQgdGhlIGxhc3QgcG9zaXRpb24gYWRqYWNlbnQgdG8gZXhpc3RpbmcKLSAgICAgKiBlbGVtZW50cyBvZiB0aGUgc2FtZSBuYW1lLgotICAgICAqCi0gICAgICogTm90ZSB0aGF0IGlmIHRoZXJlIGFyZSBubyBleGlzdGluZyBlbGVtZW50cyBvZiB0aGUgZ2l2ZW4KLSAgICAgKiBuYW1lLCB0aGUgc2FtZSBjb21tZW50IGFwcGxpZXMgYXMgd2l0aCBpbnNlcnRfZWxlbWVudF91c2VyLgotICAgICAqLwotLy8gQlVHQlVHIC0gdGhpcyBzaG91bGQgYmUgY2FsbGVkIGFkZF9lbGVtZW50Ci0vLyBCVUdCVUcgLSB0aGlzIHNob3VsZCBiZSBjYWxsZWQgYWRkX2VsZW1lbnQKLS8vIEJVR0JVRyAtIHRoaXMgc2hvdWxkIGJlIGNhbGxlZCBhZGRfZWxlbWVudAotLy8gQlVHQlVHIC0gdGhpcyBzaG91bGQgYmUgY2FsbGVkIGFkZF9lbGVtZW50Ci0gICAgVHlwZVN0b3JlVXNlciBhZGRfZWxlbWVudF91c2VyKFFOYW1lIG5hbWUpOwotCi0gICAgLyoqCi0gICAgICogUmVtb3ZlcyB0aGUgaXRoIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLSAgICAgKgotICAgICAqIFNob3VsZCB0aHJvdyBhbiBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGlmIGkgPCAwCi0gICAgICogb3IgaWYgaSA+ICMgb2YgZWx0cy0xLgotICAgICAqLwotICAgIHZvaWQgcmVtb3ZlX2VsZW1lbnQoUU5hbWUgbmFtZSwgaW50IGkpOwotCi0gICAgLyoqCi0gICAgICogUmVtb3ZlcyB0aGUgaXRoIGVsZW1lbnQgdGhhdCBtYXRjaGVzIG5hbWVzLgotICAgICAqLwotICAgIHZvaWQgcmVtb3ZlX2VsZW1lbnQoUU5hbWVTZXQgbmFtZXMsIGludCBpKTsKLQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgVHlwZVN0b3JlVXNlciB1bmRlcm5lYXRoIHRoZSBhdHRyaWJ1dGUgd2l0aCB0aGUgZ2l2ZW4KLSAgICAgKiBuYW1lLCBvciBudWxsIGlmIHRoZXJlIGlzIG5vIHN1Y2ggYXR0cmlidXRlLgotICAgICAqLwotLy8gQlVHQlVHIC0gdGhpcyBzaG91bGQgYmUgY2FsbGVkIGZpbmRfYXR0cmlidXRlCi0vLyBCVUdCVUcgLSB0aGlzIHNob3VsZCBiZSBjYWxsZWQgZmluZF9hdHRyaWJ1dGUKLS8vIEJVR0JVRyAtIHRoaXMgc2hvdWxkIGJlIGNhbGxlZCBmaW5kX2F0dHJpYnV0ZQotLy8gQlVHQlVHIC0gdGhpcyBzaG91bGQgYmUgY2FsbGVkIGZpbmRfYXR0cmlidXRlCi0gICAgVHlwZVN0b3JlVXNlciBmaW5kX2F0dHJpYnV0ZV91c2VyKFFOYW1lIG5hbWUpOwotCi0gICAgLyoqCi0gICAgICogQWRkcyBhbiBhdHRyaWJ1dGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgcmV0dXJucyBhIFR5cGVTdG9yZVVzZXIKLSAgICAgKiB1bmRlcm5lYXRoIGl0LiBTaG91bGQgdGhyb3cgYW4gSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpZiB0aGVyZQotICAgICAqIGlzIGFscmVhZHkgYW4gZXhpc3RpbmcgYXR0cmlidXRlIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0gICAgICovCi0vLyBCVUdCVUcgLSB0aGlzIHNob3VsZCBiZSBjYWxsZWQgYWRkX2F0dHJpYnV0ZQotLy8gQlVHQlVHIC0gdGhpcyBzaG91bGQgYmUgY2FsbGVkIGFkZF9hdHRyaWJ1dGUKLS8vIEJVR0JVRyAtIHRoaXMgc2hvdWxkIGJlIGNhbGxlZCBhZGRfYXR0cmlidXRlCi0vLyBCVUdCVUcgLSB0aGlzIHNob3VsZCBiZSBjYWxsZWQgYWRkX2F0dHJpYnV0ZQotICAgIFR5cGVTdG9yZVVzZXIgYWRkX2F0dHJpYnV0ZV91c2VyKFFOYW1lIG5hbWUpOwotCi0gICAgLyoqCi0gICAgICogUmVtb3ZlcyB0aGUgYXR0cmlidXRlIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0gICAgICovCi0gICAgdm9pZCByZW1vdmVfYXR0cmlidXRlKFFOYW1lIG5hbWUpOwotCi0gICAgLyoqCi0gICAgICogQ29waWVzIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gVHlwZVN0b3JlIChpbmNsdWRpbmcgYXR0cmlidXRlcywKLSAgICAgKiBlbGVtZW50cywgYW5kIG1peGVkIGNvbnRlbnQpLCB0byB0aGUgdGFyZ2V0IHR5cGUgc3RvcmUuCi0gICAgICoKLSAgICAgKiBTUEVDSUFMIE5PVEU6IFRoZSB4c2k6dHlwZSBhdHRyaWJ1dGUgc2hvdWxkIG5vdCBiZSByZW1vdmVkIGZyb20KLSAgICAgKiB0aGUgdGFyZ2V0IG9yIGNvcGllZCBmcm9tIHRoZSBzb3J1Y2UsIGFuZCB0aGUgVHlwZVN0b3JlVXNlciBhdHRhY2hlZAotICAgICAqIHRvIHRoaXMgVHlwZVN0b3JlIHNob3VsZCBub3QgYmUgZGlzY29ubmVjdGVkLgotICAgICAqCi0gICAgICogVGhpcyBpcyBmb3IgaW1wbGVtZW50aW5nIG9iai5zZXQoZm9vKS4KLSAgICAgKi8KLSAgICBUeXBlU3RvcmVVc2VyIGNvcHlfY29udGVudHNfZnJvbShUeXBlU3RvcmUgc291cmNlKTsKLSAgICAKLS8vIEJVR0JVRyAtIE5lZWQgdG8gdXNlIHRoaXMgaW4gdGhlIGZ1dHVyZQotLy8gICAgLyoqCi0vLyAgICAgKiBDb3BpZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBUeXBlU3RvcmUgKGluY2x1ZGluZyBhdHRyaWJ1dGVzLAotLy8gICAgICogZWxlbWV0cywgbWl4ZWQgY29udGVudCksIHRvIHRoZSBjaGlsZCBlbGVtZW50IGdpdmVuIGJ5IHRoZSBnaXZlbgotLy8gICAgICogbmFtZSBhbmQgaW5kZXguIEFueSBUeXBlU3RvcmVVc2VyIHRoYXQgbWlnaHQgYmUgY3VycmVudGx5IGF0dGFjaGVkCi0vLyAgICAgKiB0byB0aGF0IGVsZW1lbnQgaXMgZGlzY29ubmVjdGVkLiAgVGhlIHhzaTp0eXBlIGF0dHJpYnV0ZSBvZiB0aGUKLS8vICAgICAqIGVsZW1lbnQgc2hvdWxkIGJlIHNldCBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIFFOYW1lIChvciBkZWxldGVkIGlmCi0vLyAgICAgKiB0aGUgeHNpdHlwZSBhcmd1bWVudCBpcyBudWxsKQotLy8gICAgICovCi0vLyAgICB2b2lkIGNvcHlfdG9fZWxlbWVudCgKLS8vICAgICAgICBUeXBlU3RvcmUgc291cmNlLCBRTmFtZSB4c2l0eXBlLCBRTmFtZSBuYW1lLCBpbnQgaSk7Ci0KLSAgICAvKioKLSAgICAgKiBDb3BpZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBhcnJheSBvZiBYbWxPYmplY3QgKGluY2x1ZGluZwotICAgICAqIGF0dHJpYnV0ZXMsIGVsZW1lbnRzLCBtaXhlZCBjb250ZW50KSwgb3ZlciBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoZQotICAgICAqIGdpdmVuIG5hbWUgdW5kZXIgdGhlIGN1cnJlbnQgdHlwZXN0b3JlLgotICAgICAqCi0gICAgICogVGhlIGxlbmd0aHMgb2YgdGhlIHR3byBhcnJheXMgdGhhdCBhcmUgcGFzc2VkIHNob3VsZCBiZSB0aGUgc2FtZS4KLSAgICAgKgotICAgICAqIElmIHRoZXJlIGFyZSBuIGN1cnJlbnQgZWxlbWVudHMgb2YgdGhlIGdpdmVuIG5hbWUgYW5kIG0gZWxlbWVudHMKLSAgICAgKiBpbiB0aGUgc291cmNlIGFycmF5LCB0aGVyZSBhcmUgc2V2ZXJhbCBjYXNlcyBmb3IgaW5kaXZpZHVhbCBlbGVtZW50czoKLSAgICAgKgotICAgICAqIDEuIElmIGkgPCBuIGFuZCBpIDwgbSwgdGhlbiB0aGUgY29udGVudHMgb2YgdGhlIGl0aCBzb3VyY2UgYXJlIGNvcGllZAotICAgICAqICAgIHVuZGVybmVhdGggdGhlIGl0aCBlbGVtZW50OyB0aGUgaXRoIGVsZW1lbnQgaXMgbm90IG1vdmVkLCBidXQgaXRzCi0gICAgICogICAgVHlwZVN0b3JlVXNlciBpcyBkaXNjb25uZWN0ZWQuCi0gICAgICogMi4gaWYgaSA+PSBuIGFuZCBpIDwgbSwgdGhlbiBmaXJzdCBlbm91Z2ggbmV3IGVsZW1lbnRzIGFyZSBhcHBlbmRlZAotICAgICAqICAgIHNvIHRoYXQgdGhlcmUgaXMgYW4gZWxlbWVudCB3aXRoIHRoZSBuYW1lIGksIHRoZW4gcnVsZSAjMSBpcyBmb2xsb3dlZC4KLSAgICAgKiAzLiBpZiBpID49IG0gYW5kIGkgPCBuLCB0aGVuIHRoZSBlbGVtZW50ICNpIGFuZCBhbGwgaXRzIGNvbnRlbnRzCi0gICAgICogICAgYXJlIHJlbW92ZWQuCi0gICAgICovCi0gICAgCi0gICAgdm9pZCBhcnJheV9zZXR0ZXIgKCBYbWxPYmplY3RbXSBzb3VyY2VzLCBRTmFtZSBlbGVtZW50TmFtZSApOwotCi0gICAgLyoqCi0gICAgICogVmlzaXRzIGFsbCB0aGUgZWxlbWVudHMgaW1tZWRpYXRlbHksIHVzaW5nIHRoZSBnaXZlbiB2aXNpdG9yLgotICAgICAqIEEgVHlwZVN0b3JlVXNlciBjYWxscyB0aGlzIHdoZW4gc29tZWJvZHkgaGFzIHJlcXVlc3RlZCB2YWxpZGF0aW9uLgotICAgICAqLwotICAgIHZvaWQgdmlzaXRfZWxlbWVudHMoVHlwZVN0b3JlVmlzaXRvciB2aXNpdG9yKTsKLQotICAgIFhtbE9iamVjdFtdIGV4ZWNfcXVlcnkgKCBTdHJpbmcgcXVlcnlFeHByLCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgICAgICB0aHJvd3MgWG1sRXhjZXB0aW9uOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbW9uaXRvciBvYmplY3QsIHVzZWQgZm9yIHN5bmNocm9uaXppbmcgYWNjZXNzIHRvIHRoZSBkb2MuCi0gICAgICovIAotICAgIE9iamVjdCBnZXRfcm9vdF9vYmplY3QoKTsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy90eXBlc3RvcmUvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9UeXBlU3RvcmVGYWN0b3J5LmphdmEgYi92Mi9zcmMvdHlwZXN0b3JlL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvVHlwZVN0b3JlRmFjdG9yeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2RhZDg1Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlc3RvcmUvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9UeXBlU3RvcmVGYWN0b3J5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXM7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotLyoqCi0gKiBUaGlzIGdpdmVzIHRoZSBub24gZGVmYXVsdCBiaW5kaW5ncyB0byB0YWtlIGNvbnRyb2wgb2YgVHlwZVN0b3JlVXNlcgotICogY3JlYXRpb24uIEl0IGlzIHNldCBvbmNlIHBlciBkb2N1bWVudCBhbmQgY2FsbGVkIGVhY2ggdGltZSBpbnN0ZWFkIG9mCi0gKiBUeXBlU3RvcmVVc2VyLmNyZWF0ZUVsZW1lbnRVc2VyKCkgYW5kIGNyZWF0ZUF0dHJpYnV0ZVVzZXIoKQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFR5cGVTdG9yZUZhY3RvcnkKLXsKLSAgICAvKiogQSBrZXkgdG8gcGFzcyBpbiBmb3IgdGhlIFhtbE9wdGlvbnMgdG8gc2V0IHRoZSBmYWN0b3J5ICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZID0gIlR5cGVTdG9yZUZhY3RvcnkiOwotCi0gICAgVHlwZVN0b3JlVXNlciBjcmVhdGVFbGVtZW50VXNlcihTY2hlbWFUeXBlIHBhcmVudFR5cGUsIFFOYW1lIG5hbWUsIFFOYW1lIHhzaVR5cGUpOwotCi0gICAgVHlwZVN0b3JlVXNlciBjcmVhdGVBdHRyaWJ1dGVVc2VyKFNjaGVtYVR5cGUgcGFyZW50VHlwZSwgUU5hbWUgbmFtZSk7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZXN0b3JlL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvVHlwZVN0b3JlVXNlci5qYXZhIGIvdjIvc3JjL3R5cGVzdG9yZS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1R5cGVTdG9yZVVzZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVmZWY1My4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZXN0b3JlL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvVHlwZVN0b3JlVXNlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI2ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFGaWVsZDsKLQotLyoqCi0gKiBSZXByZXNlbnRzIHRoZSBzdHJvbmdseS10eXBlZCB1c2VyIG9mIGEgdHlwZXN0b3JlLgotICogQSB0eXBlc3RvcmUgaXMgcmVzcG9uc2libGUgZm9yIGFsbCB0aGUgbGV4aWNhbCBhc3BlY3RzIG9mIFhNTCwgYW5kCi0gKiBhIHR5cGVzdG9yZSB1c2VyIGlzIHJlc3BvbnNpYmxlIGZvciBhbGwgc3Ryb25nbHktdHlwZWQgYXNwZWN0cy4KLSAqIFdoZXJlIHRoZXJlIGlzIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHR3byBtb2RlbHMsIGl0IGlzIHJlcHJlc2VudGVkCi0gKiBieSB0aGUgVHlwZVN0b3JlIGFuZCBUeXBlU3RvcmVVc2VyIGludGVyZmFjZXMuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgVHlwZVN0b3JlVXNlcgotewotICAgIC8qKgotICAgICAqIENhbGxlZCB0byBhdHRhY2ggdG8gdGhlIGdpdmVuIHRleHRTdG9yZS4gV2hlbiBhIFR5cGVTdG9yZVVzZXIgaXMKLSAgICAgKiBhdHRhY2hlZCwgaXQgaXMgcHV0IGludG8gYSBjb21wbGV0ZWx5IGludmFsaWRhdGVkIHN0YXRlLgotICAgICAqLwotICAgIHZvaWQgYXR0YWNoX3N0b3JlKFR5cGVTdG9yZSBzdG9yZSk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBzY2hlbWEgdHlwZSBvZiB0aGlzIHVzZXIKLSAgICAgKi8KLSAgICBTY2hlbWFUeXBlIGdldF9zY2hlbWFfdHlwZSgpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgc3RvcmUgdG8gd2hpY2ggdGhpcyB0eXBlc3RvcmV1c2VyIGlzIGF0dGFjaGVkLCBvcgotICAgICAqIG51bGwgaWYgbm9uZS4KLSAgICAgKi8KLSAgICBUeXBlU3RvcmUgZ2V0X3N0b3JlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBBIHN0b3JlIHdpbGwgY2FsbCBiYWNrIG9uIGludmFsaWRhdGVfdmFsdWUgd2hlbiBpdHMgdGV4dCBoYXMKLSAgICAgKiBjaGFuZ2VkIGFuZCBpdCB0aGVyZWZvcmUga25vd3MgdGhhdCBhbnkgY2FjaGVkIHR5cGUgdmFsdWUgaXMKLSAgICAgKiBpbnZhbGlkLiBJdCBpcyB0aGUgcmVzcG9uc2liaWx0eSBvZiB0aGUgdHlwZSB0byBjYWxsIGZldGNoX3RleHQKLSAgICAgKiBhbmQgcmVwYXJzZSBuZXh0IHRpbWUgdGhlIHVzZXIgZG9lcyBhIHN0cm9uZ2x5LXR5cGVkIGdldC4KLSAgICAgKi8KLSAgICB2b2lkIGludmFsaWRhdGVfdmFsdWUoKTsKLQotICAgIC8qKgotICAgICAqIEEgc3RvcmUgY2FuIGNhbGwgdXNlc19pbnZhbGlkYXRlX3ZhbHVlIHRvIGtub3cgaWYgY2FsbHMgdG8KLSAgICAgKiBpbnZhbGlkYXRlX3ZhbHVlIHdpbGwgYmUgZnJ1aXRmdWwuICBJZiB1c2VzX2ludmFsaWRhdGVfdmFsdWUKLSAgICAgKiByZXR1cm5zIGZhbHNlLCBpbnZhbGlkYXRlX3ZhbHVlIG5lZWQgbmV2ZXIgYmUgY2FsbGVkLgotICAgICAqLwotICAgIGJvb2xlYW4gdXNlc19pbnZhbGlkYXRlX3ZhbHVlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBBIHN0b3JlIHdpbGwgY2FsbCBiYWNrIG9uIGJ1aWxkX3RleHQgd2hlbiBpdCBrbm93cyBpdHMgb3duIHRleHQKLSAgICAgKiBpcyBpbnZhbGlkIGFuZCBuZWVkcyB0byBmaWxsIGl0IGluLiAgSWYgZm9yRXh0ZXJuYWwgaXMgdHJ1ZSwgdGhlbgotICAgICAqIHRoZSB2YWx1ZSByZXR1cm5lZCB3aWxsIGJlIHVzZWQgdG8gcmVwbGVuaXNoIHRoZSBzdG9yZSdzIGNhY2hlIG9mCi0gICAgICogdGhlIHZhbHVlLiAgT3RoZXJ3aXNlLCB0aGUgdmFsdWUgaXMgYmVpbmcgY29tcHV0ZWQgZm9yIHB1cnBvc2VzCi0gICAgICogb3RoZXIgdGhhbiB2YWxpZGF0aW9uLCBsaWtlIHBlcnNpc3RlbmNlLgotICAgICAqCi0gICAgICogQWxzbywgdGhlIG9ubHkgbWVtYmVyIG9uIFR5cGVTdG9yZSB3aGljaCBtYXkgYmUgY2FsbGVkIHdoaWxlIGJ1aWxkX3RleHQKLSAgICAgKiBpcyBvbiB0aGUgc3RhY2sgaXMgZmluZF9wcmVmaXhfZm9yX25zdXJpIHdoaWNoIG11c3QgaGF2ZSB0aGUKLSAgICAgKiBmb3JFeHRlcm5hbCBzdGF0ZSBwYXNzZWQgdG8gaXQgYXMgaXQgaXMgcGFzc2VkIGhlcmUuCi0gICAgICovCi0gICAgU3RyaW5nIGJ1aWxkX3RleHQoTmFtZXNwYWNlTWFuYWdlciBuc20pOwotCi0gICAgLyoqCi0gICAgICogQSBzdG9yZSB3aWxsIGNhbGwgYmFjayBvbiBidWlsZF9uaWwgYWZ0ZXIgeW91J3ZlIGNhbGxlZCBpbnZhbGlkYXRlX25pbAotICAgICAqIGFuZCBpdCBuZWVkcyB0byBrbm93IHdoYXQgdGhlIG5pbCB2YWx1ZSBpcy4KLSAgICAgKi8KLSAgICBib29sZWFuIGJ1aWxkX25pbCgpOwotCi0gICAgLyoqCi0gICAgICogQSBzdG9yZSBjYWxscyBiYWNrIG9uIGludmFsaWRhdGVfbmlsdmFsdWUgd2hlbiB0aGUgdmFsdWUgb2YKLSAgICAgKiB0aGUgeHNpOm5pbCB0YWcgaGFzIGNoYW5nZWQuCi0gICAgICovCi0gICAgdm9pZCBpbnZhbGlkYXRlX25pbHZhbHVlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBBIHN0b3JlIGNhbGxzIGJhY2sgb24gaW52YWxpZGF0ZV9lbGVtZW50X29yZGVyIHdoZW4gYSByZWFycmFuZ21lbnQKLSAgICAgKiBvZiBzaWJsaW5nIGVsZW1lbnRzIHRvIHRoZSBsZWZ0IG9mIHRoaXMgZWxlbWVudCBtZWFucyB0aGF0IHRoZQotICAgICAqIG5pbGxhYmxlIHZhbHVlIG1heSBubyBsb25nZXIgYmUgdmFsaWQuCi0gICAgICovCi0gICAgdm9pZCBpbnZhbGlkYXRlX2VsZW1lbnRfb3JkZXIoKTsKLQotICAgIC8qKgotICAgICAqIEEgc3RvcmUgd2lsbCBjYWxsIGJhY2sgb24gdmFsaWRhdGVfbm93IHRvIGZvcmNlIHVzIHRvIGxvb2sgYXQKLSAgICAgKiB0aGUgdGV4dCBpZiB3ZSdyZSBpbiBhbiBpbnZhbGlkIHN0YXRlLiBUaGlzIGZ1bmN0aW9uIGlzIGFsbG93ZWQKLSAgICAgKiBhbmQgZXhwZWN0ZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHRoZSB0ZXh0IGlzbid0IHZhbGlkIGZvcgotICAgICAqIG91ciB0eXBlLgotICAgICAqLwotICAgIHZvaWQgdmFsaWRhdGVfbm93KCk7Ci0KLSAgICAvKioKLSAgICAgKiBBIHN0b3JlIGNhbGxzIGJhY2sgb24gdGhpcyBjYWxsIGluIG9yZGVyIHRvIGZvcmNlIGEgZGlzY29ubmVjdC4KLSAgICAgKiBBZnRlciB0aGlzIGlzIGRvbmUsIHRoZSBvYmplY3Qgc2hvdWxkIGJlIGNvbnNpZGVyZWQgaW52YWxpZC4KLSAgICAgKi8KLSAgICB2b2lkIGRpc2Nvbm5lY3Rfc3RvcmUoKTsKLQotICAgIC8qKgotICAgICAqIEEgdHlwZXN0b3JlIHVzZXIgY2FuIGNyZWF0ZSBhIG5ldyBUeXBlU3RvcmVVc2VyIGluc3RhbmNlIGZvcgotICAgICAqIGEgZ2l2ZW4gZWxlbWVudCBjaGlsZCBuYW1lIGFzIGxvbmcgYXMgeW91IGFsc28gcGFzcyB0aGUKLSAgICAgKiBxbmFtZSBjb250YWluZWQgYnkgdGhlIHhzaTp0eXBlIGF0dHJpYnV0ZSwgaWYgYW55LgotICAgICAqCi0gICAgICogTm90ZSB0aGF0IHdlIHdpbGwgaWdub3JlIHRoZSB4c2lUeXBlIGlmIGl0IHR1cm5zIG91dCB0byBiZSBpbnZhbGlkLgotICAgICAqLwotICAgIFR5cGVTdG9yZVVzZXIgY3JlYXRlX2VsZW1lbnRfdXNlcihRTmFtZSBlbHROYW1lLCBRTmFtZSB4c2lUeXBlKTsKLQotICAgIC8qKgotICAgICAqIEEgdHlwZXN0b3JlIHVzZXIgY2FuIGNyZWF0ZSBhIG5ldyBUeXBlU3RvcmVVc2VyIGluc3RhbmNlIGZvcgotICAgICAqIGEgZ2l2ZW4gYXR0cmlidXRlIGNoaWxkLCBiYXNlZCBvbiB0aGUgYXR0cmlidXRlIG5hbWUuCi0gICAgICovCi0gICAgVHlwZVN0b3JlVXNlciBjcmVhdGVfYXR0cmlidXRlX3VzZXIoUU5hbWUgYXR0ck5hbWUpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJuIHRoZSBTY2hlbWFUeXBlIHdoaWNoIGEgY2hpbGQgZWxlbWVudCBvZiB0aGlzIG5hbWUgYW5kIHhzaTp0eXBlCi0gICAgICogd291bGQgYmUuCi0gICAgICovCi0KLSAgICBTY2hlbWFUeXBlIGdldF9lbGVtZW50X3R5cGUoUU5hbWUgZWx0TmFtZSwgUU5hbWUgeHNpVHlwZSk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJuIHRoZSBTY2hlbWFUeXBlIHdoaWNoIGFuIGF0dHJpYnV0ZSBvZiB0aGlzIG5hbWUgd291bGQgYmUuCi0gICAgICovCi0KLSAgICBTY2hlbWFUeXBlIGdldF9hdHRyaWJ1dGVfdHlwZShRTmFtZSBhdHRyTmFtZSk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IGVsZW1lbnQgdGV4dCwgaWYgaXQncyBjb25zaXN0ZW50LiBJZiBpdCdzCi0gICAgICogbm90IGNvbnNpc3RlbnQsIHJldHVybnMgbnVsbCwgYW5kIHJlcXVpcmVzIGEgdmlzaXRvciB3YWxrLgotICAgICAqLwotICAgIFN0cmluZyBnZXRfZGVmYXVsdF9lbGVtZW50X3RleHQoUU5hbWUgZWx0TmFtZSk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IGF0dHJpYnV0ZSB0ZXh0IGZvciB0aGUgYXR0cmlidXRlIHdpdGgKLSAgICAgKiB0aGUgZ2l2ZW4gbmFtZS4KLSAgICAgKi8KLSAgICBTdHJpbmcgZ2V0X2RlZmF1bHRfYXR0cmlidXRlX3RleHQoUU5hbWUgYXR0ck5hbWUpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgZWxlbWVudGZsYWdzLCBpZiB0aGV5J3JlIGNvbnNpc3RlbnQuIElmIHRoZXkncmUKLSAgICAgKiBub3QsIHJldHVybnMgLTEsIGFuZCByZXF1aXJlcyBhIHZpc3RvciB3YWxrLgotICAgICAqLwotICAgIGludCBnZXRfZWxlbWVudGZsYWdzKFFOYW1lIGVsdE5hbWUpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgZmxhZ3MgZm9yIGFuIGF0dHJpYnV0ZS4KLSAgICAgKi8KLSAgICBpbnQgZ2V0X2F0dHJpYnV0ZWZsYWdzKFFOYW1lIGF0dHJOYW1lKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHNjaGVtYSBmaWVsZCBmb3IgYW4gYXR0cmlidXRlCi0gICAgICovCi0gICAgU2NoZW1hRmllbGQgZ2V0X2F0dHJpYnV0ZV9maWVsZChRTmFtZSBhdHRyTmFtZSk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGZhbHNlIGlmIGNoaWxkIGVsZW1lbnRzIGFyZSBpbnNlbnNpdGl2ZSB0byBvcmRlcjsKLSAgICAgKiBpZiBpdCByZXR1cm5zIHRydWUsIHlvdSdyZSByZXF1aXJlZCB0byBjYWxsIGludmFsaWRhdGVfZWxlbWVudF9vcmRlcgotICAgICAqIG9uIGNoaWxkcmVuIHRvIHRoZSByaWdodCBvZiBhbnkgY2hpbGQgb3JkZXIgcmVhcnJhbmdlbWVudC4KLSAgICAgKi8KLSAgICBib29sZWFuIGlzX2NoaWxkX2VsZW1lbnRfb3JkZXJfc2Vuc2l0aXZlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBBIHR5cGVzdG9yZSB1c2VyIGNhbiByZXR1cm4gdGhlIGVsZW1lbnQgc29ydCBvcmRlciB0byB1c2UgZm9yCi0gICAgICogaW5zZXJ0aW9uIG9wZXJhdGlvbnMgaWYgbmVlZGVkLiBTZXR0YWJsZSBlbGVtZW50cyBzaG91bGQKLSAgICAgKiBiZSBzdG9yZWQgaW4gdGhpcyBvcmRlciBpZiBwb3NzaWJsZS4KLSAgICAgKi8KLSAgICBRTmFtZVNldCBnZXRfZWxlbWVudF9lbmRpbmdfZGVsaW1pdGVycyhRTmFtZSBlbHRuYW1lKTsKLQotICAgIC8qKgotICAgICAqIEEgdHlwZXN0b3JlIHVzZXIgY2FuIHJldHVybiBhIHZpc2l0b3IgdGhhdCBpcyB1c2VkIHRvIGNvbXB1dGUKLSAgICAgKiBkZWZhdWx0IHRleHQgYW5kIGVsZW1lbnRmbGFncyBmb3IgYW4gYXJiaXRyYXJ5IGVsZW1lbnQuCi0gICAgICovCi0gICAgVHlwZVN0b3JlVmlzaXRvciBuZXdfdmlzaXRvcigpOwotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVzdG9yZS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1R5cGVTdG9yZVVzZXJGYWN0b3J5LmphdmEgYi92Mi9zcmMvdHlwZXN0b3JlL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvVHlwZVN0b3JlVXNlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWUxNGZiOC4uMDAwMDAwMAotLS0gYS92Mi9zcmMvdHlwZXN0b3JlL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvVHlwZVN0b3JlVXNlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotLyoqCi0gKiBFdmVyeSBTY2hlbWFUeXBlTG9hZGVyIGlzIGFjdHVhbGx5IGEgVHlwZVN0b3JlVXNlckZhY3RvcnkuCi0gKgotICogVG8gZ2V0IGFuZCB1c2UgdGhlIGRlZmF1bHQgVHlwZVN0b3JlVXNlckZhY3RvcnksIGRvIHRoZSBmb2xsb3dpbmc6Ci0gKgotICogVHlwZVN0b3JlVXNlciB1c2VyID0gKChUeXBlU3RvcmVVc2VyRmFjdG9yeSlTY2hlbWFUeXBlTG9hZGVyLmdsb2JhbCgpKS5jcmVhdGVUeXBlU3RvcmVVc2VyKHN0b3JlKTsKLSAqLwotcHVibGljIGludGVyZmFjZSBUeXBlU3RvcmVVc2VyRmFjdG9yeQotewotICAgIFR5cGVTdG9yZVVzZXIgY3JlYXRlVHlwZVN0b3JlVXNlcigpOwotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3R5cGVzdG9yZS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1R5cGVTdG9yZVZpc2l0b3IuamF2YSBiL3YyL3NyYy90eXBlc3RvcmUvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9UeXBlU3RvcmVWaXNpdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwNTVmYTkuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3R5cGVzdG9yZS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdmFsdWVzL1R5cGVTdG9yZVZpc2l0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlczsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFGaWVsZDsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBpcyB1c2VkIGJ5IHRoZSBUeXBlU3RvcmUgdG8gdmlzaXQgZXZlcnkgZWxlbWVudCBpbiBvcmRlcgotICogdG8gY29tcHV0ZSBuaWxsYWJsZSBmbGFncyBhbmQgZGVmYXVsdCB2YWx1ZXMuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgVHlwZVN0b3JlVmlzaXRvcgotewotICAgIC8qKgotICAgICAqIFdoZW4gdXNpbmcgYSB2aXNpdG9yLCB5b3UgbXVzdCBjYWxsICJ2aXNpdCIgb24gZXZlcnkgcW5hbWUgb2YKLSAgICAgKiBldmVyeSBlbGVtZW50IGluIG9yZGVyIHVwIHRvIHRoZSBvbmUgeW91J3JlIGludGVyZXN0ZWQgaW4uCi0gICAgICoKLSAgICAgKiBJZiB5b3UncmUgdXNpbmcgaXQgZm9yIHZhbGlkYXRpb24sIGNhbGwgdmlzaXQobnVsbCkgYXQgdGhlIGVuZAotICAgICAqIG9mIHRoZSBzZXF1ZW5jZSBvZiBjaGlsZHJlbi4gSWYgeW91J3JlIG5vdCB2YWxpZGF0aW5nLCB5b3UgY2FuCi0gICAgICoganVzdCB3YWxrIGF3YXkgb25jZSB5b3UgZ2V0IHRoZSBpbmZvIHlvdSBuZWVkLgotICAgICAqLwotICAgIGJvb2xlYW4gdmlzaXQoUU5hbWUgZWx0TmFtZSk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBlbGVtZW50ZmxhZ3MgZm9yIHRoaXMgZWxlbWVudC4KLSAgICAgKi8KLSAgICBpbnQgZ2V0X2VsZW1lbnRmbGFncygpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgZGVmYXVsdCB0ZXh0IGZvciB0aGlzIGVsZW1lbnQuCi0gICAgICovCi0gICAgU3RyaW5nIGdldF9kZWZhdWx0X3RleHQoKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHNjaGVtYSBmaWVsZCBmb3IgdGhpcyBmaWVsZC4KLSAgICAgKi8KLSAgICBTY2hlbWFGaWVsZCBnZXRfc2NoZW1hX2ZpZWxkKCk7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMvdHlwZXN0b3JlL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC92YWx1ZXMvWG1sU3RvcmUuamF2YSBiL3YyL3NyYy90eXBlc3RvcmUvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxTdG9yZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGU2MWQ2Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy90eXBlc3RvcmUvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3ZhbHVlcy9YbWxTdG9yZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzOwotCi1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtOwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9uczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFNheEhhbmRsZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLkRPTUV4Y2VwdGlvbjsKLQotcHVibGljIGludGVyZmFjZSBYbWxTdG9yZQotewotICAgIC8vCi0gICAgLy8KLSAgICAvLwotCi0gICAgWG1sT2JqZWN0IGxvYWRYbWwgKCBTdHJpbmcgcywgICAgICAgICAgICBTY2hlbWFUeXBlIHR5cGUsIFhtbE9wdGlvbnMgb3B0aW9ucyApIHRocm93cyBYbWxFeGNlcHRpb247Ci0gICAgWG1sT2JqZWN0IGxvYWRYbWwgKCBJbnB1dFN0cmVhbSBpbiwgICAgICBTY2hlbWFUeXBlIHR5cGUsIFhtbE9wdGlvbnMgb3B0aW9ucyApIHRocm93cyBYbWxFeGNlcHRpb24sIElPRXhjZXB0aW9uOwotICAgIFhtbE9iamVjdCBsb2FkWG1sICggWE1MU3RyZWFtUmVhZGVyIHhzciwgU2NoZW1hVHlwZSB0eXBlLCBYbWxPcHRpb25zIG9wdGlvbnMgKSB0aHJvd3MgWG1sRXhjZXB0aW9uOwotICAgIFhtbE9iamVjdCBsb2FkWG1sICggUmVhZGVyIHIsICAgICAgICAgICAgU2NoZW1hVHlwZSB0eXBlLCBYbWxPcHRpb25zIG9wdGlvbnMgKSB0aHJvd3MgWG1sRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbjsKLSAgICBYbWxPYmplY3QgbG9hZFhtbCAoIFhNTElucHV0U3RyZWFtIHhpcywgIFNjaGVtYVR5cGUgdHlwZSwgWG1sT3B0aW9ucyBvcHRpb25zICkgdGhyb3dzIFhtbEV4Y2VwdGlvbiwgWE1MU3RyZWFtRXhjZXB0aW9uOwotICAgIFhtbE9iamVjdCBsb2FkWG1sICggTm9kZSBub2RlLCAgICAgICAgICAgU2NoZW1hVHlwZSB0eXBlLCBYbWxPcHRpb25zIG9wdGlvbnMgKSB0aHJvd3MgWG1sRXhjZXB0aW9uOwotICAgIAotICAgIFhtbFNheEhhbmRsZXIgbmV3U2F4SGFuZGxlciAoIFNjaGVtYVR5cGUgdHlwZSwgWG1sT3B0aW9ucyBvcHRpb25zICk7Ci0KLSAgICBYbWxPYmplY3QgZ2V0T2JqZWN0ICggKTsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92Mi9zcmMveG1sY29tcC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdG9vbC9CYXNlU2NoZW1hUmVzb3VyY2VNYW5hZ2VyLmphdmEgYi92Mi9zcmMveG1sY29tcC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdG9vbC9CYXNlU2NoZW1hUmVzb3VyY2VNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3OTIzOGEuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbGNvbXAvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3Rvb2wvQmFzZVNjaGVtYVJlc291cmNlTWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzU3ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnRvb2w7Ci0KLWltcG9ydCBjb20uYmVhLngyMDAzLngwMS54bWxiZWFuLnhzZG93bmxvYWQuRG93bmxvYWRlZFNjaGVtYXNEb2N1bWVudDsKLWltcG9ydCBjb20uYmVhLngyMDAzLngwMS54bWxiZWFuLnhzZG93bmxvYWQuRG93bmxvYWRlZFNjaGVtYUVudHJ5OwotaW1wb3J0IGNvbS5iZWEueDIwMDMueDAxLnhtbGJlYW4ueHNkb3dubG9hZC5Eb3dubG9hZGVkU2NoZW1hc0RvY3VtZW50LkRvd25sb2FkZWRTY2hlbWFzOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC51dGlsLkhleEJpbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLklPVXRpbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEubmV0LlVSSTsKLWltcG9ydCBqYXZhLm5ldC5VUklTeW50YXhFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEubmV0LlVSTENvbm5lY3Rpb247Ci1pbXBvcnQgamF2YS5zZWN1cml0eS5EaWdlc3RJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnNlY3VyaXR5Lk1lc3NhZ2VEaWdlc3Q7Ci1pbXBvcnQgamF2YS5zZWN1cml0eS5Ob1N1Y2hBbGdvcml0aG1FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcudzMueDIwMDEueG1sU2NoZW1hLlNjaGVtYURvY3VtZW50LlNjaGVtYTsKLWltcG9ydCBvcmcudzMueDIwMDEueG1sU2NoZW1hLlNjaGVtYURvY3VtZW50OwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQmFzZVNjaGVtYVJlc291cmNlTWFuYWdlciBleHRlbmRzIFNjaGVtYUltcG9ydFJlc29sdmVyCi17Ci0gICAgcHJpdmF0ZSBTdHJpbmcgX2RlZmF1bHRDb3B5RGlyZWN0b3J5OwotICAgIHByaXZhdGUgRG93bmxvYWRlZFNjaGVtYXNEb2N1bWVudCBfaW1wb3J0c0RvYzsKLSAgICBwcml2YXRlIE1hcCBfcmVzb3VyY2VGb3JGaWxlbmFtZSA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgcHJpdmF0ZSBNYXAgX3Jlc291cmNlRm9yVVJMID0gbmV3IEhhc2hNYXAoKTsKLSAgICBwcml2YXRlIE1hcCBfcmVzb3VyY2VGb3JOYW1lc3BhY2UgPSBuZXcgSGFzaE1hcCgpOwotICAgIHByaXZhdGUgTWFwIF9yZXNvdXJjZUZvckRpZ2VzdCA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgcHJpdmF0ZSBNYXAgX3Jlc291cmNlRm9yQ2FjaGVFbnRyeSA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgcHJpdmF0ZSBTZXQgX3JlZG93bmxvYWRTZXQgPSBuZXcgSGFzaFNldCgpOwotCi0gICAgcHJvdGVjdGVkIEJhc2VTY2hlbWFSZXNvdXJjZU1hbmFnZXIoKQotICAgIHsKLSAgICAgICAgLy8gY29uY3JldGUgc3ViY2xhc3NlcyBzaG91bGQgY2FsbCBpbml0IGluIHRoZWlyIGNvbnN0cnVjdG9ycwotICAgIH0KLQotICAgIHByb3RlY3RlZCBmaW5hbCB2b2lkIGluaXQoKQotICAgIHsKLSAgICAgICAgaWYgKGZpbGVFeGlzdHMoZ2V0SW5kZXhGaWxlbmFtZSgpKSkKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2ltcG9ydHNEb2MgPSBEb3dubG9hZGVkU2NoZW1hc0RvY3VtZW50LkZhY3RvcnkucGFyc2UoIGlucHV0U3RyZWFtRm9yRmlsZSggZ2V0SW5kZXhGaWxlbmFtZSgpICkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9pbXBvcnRzRG9jID0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uKShuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJQcm9ibGVtIHJlYWRpbmcgeHNkb3dubG9hZC54bWw6IHBsZWFzZSBmaXggb3IgZGVsZXRlIHRoaXMgZmlsZSIpKS5pbml0Q2F1c2UoZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKF9pbXBvcnRzRG9jID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9pbXBvcnRzRG9jID0gRG93bmxvYWRlZFNjaGVtYXNEb2N1bWVudC5GYWN0b3J5LnBhcnNlKAotICAgICAgICAgICAgICAgICAgICAiPGRsczpkb3dubG9hZGVkLXNjaGVtYXMgeG1sbnM6ZGxzPSdodHRwOi8vd3d3LmJlYS5jb20vMjAwMy8wMS94bWxiZWFuL3hzZG93bmxvYWQnIGRlZmF1bHREaXJlY3Rvcnk9JyIgKyBnZXREZWZhdWx0U2NoZW1hRGlyKCkgKyAiJy8+IgotICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbikobmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpKS5pbml0Q2F1c2UoZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgZGVmYXVsdERpciA9IF9pbXBvcnRzRG9jLmdldERvd25sb2FkZWRTY2hlbWFzKCkuZ2V0RGVmYXVsdERpcmVjdG9yeSgpOwotICAgICAgICBpZiAoZGVmYXVsdERpciA9PSBudWxsKQotICAgICAgICAgICAgZGVmYXVsdERpciA9IGdldERlZmF1bHRTY2hlbWFEaXIoKTs7Ci0gICAgICAgIF9kZWZhdWx0Q29weURpcmVjdG9yeSA9IGRlZmF1bHREaXI7Ci0KLSAgICAgICAgLy8gbm93IGluaXRpYWxpemUgZGF0YSBzdHJ1Y3R1cmVzCi0gICAgICAgIERvd25sb2FkZWRTY2hlbWFFbnRyeVtdIGVudHJpZXMgPSBfaW1wb3J0c0RvYy5nZXREb3dubG9hZGVkU2NoZW1hcygpLmdldEVudHJ5QXJyYXkoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB1cGRhdGVSZXNvdXJjZShlbnRyaWVzW2ldKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHdyaXRlQ2FjaGUoKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIElucHV0U3RyZWFtIGlucHV0ID0gX2ltcG9ydHNEb2MubmV3SW5wdXRTdHJlYW0obmV3IFhtbE9wdGlvbnMoKS5zZXRTYXZlUHJldHR5UHJpbnQoKSk7Ci0gICAgICAgIHdyaXRlSW5wdXRTdHJlYW1Ub0ZpbGUoaW5wdXQsIGdldEluZGV4RmlsZW5hbWUoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIHZvaWQgcHJvY2Vzc0FsbChib29sZWFuIHN5bmMsIGJvb2xlYW4gcmVmcmVzaCwgYm9vbGVhbiBpbXBvcnRzKQotICAgIHsKLSAgICAgICAgaWYgKHJlZnJlc2gpCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9yZWRvd25sb2FkU2V0ID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9yZWRvd25sb2FkU2V0ID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZ1tdIGFsbEZpbGVuYW1lcyA9IGdldEFsbFhTREZpbGVuYW1lcygpOwotCi0gICAgICAgIGlmIChzeW5jKQotICAgICAgICAgICAgc3luY0NhY2hlV2l0aExvY2FsWHNkRmlsZXMoYWxsRmlsZW5hbWVzLCBmYWxzZSk7Ci0KLSAgICAgICAgU2NoZW1hUmVzb3VyY2VbXSBzdGFydGVycyA9IChTY2hlbWFSZXNvdXJjZVtdKQotICAgICAgICAgICAgICAgIF9yZXNvdXJjZUZvckZpbGVuYW1lLnZhbHVlcygpLnRvQXJyYXkobmV3IFNjaGVtYVJlc291cmNlWzBdKTsKLQotICAgICAgICBpZiAocmVmcmVzaCkKLSAgICAgICAgICAgIHJlZG93bmxvYWRFbnRyaWVzKHN0YXJ0ZXJzKTsKLQotICAgICAgICBpZiAoaW1wb3J0cykKLSAgICAgICAgICAgIHJlc29sdmVJbXBvcnRzKHN0YXJ0ZXJzKTsKLQotICAgICAgICBfcmVkb3dubG9hZFNldCA9IG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIHZvaWQgcHJvY2VzcyhTdHJpbmdbXSB1cmlzLCBTdHJpbmdbXSBmaWxlbmFtZXMsIGJvb2xlYW4gc3luYywgYm9vbGVhbiByZWZyZXNoLCBib29sZWFuIGltcG9ydHMpCi0gICAgewotICAgICAgICBpZiAocmVmcmVzaCkKLSAgICAgICAgewotICAgICAgICAgICAgX3JlZG93bmxvYWRTZXQgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgX3JlZG93bmxvYWRTZXQgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGZpbGVuYW1lcy5sZW5ndGggPiAwKQotICAgICAgICAgICAgc3luY0NhY2hlV2l0aExvY2FsWHNkRmlsZXMoZmlsZW5hbWVzLCB0cnVlKTsKLSAgICAgICAgZWxzZSBpZiAoc3luYykKLSAgICAgICAgICAgIHN5bmNDYWNoZVdpdGhMb2NhbFhzZEZpbGVzKGdldEFsbFhTREZpbGVuYW1lcygpLCBmYWxzZSk7Ci0KLSAgICAgICAgU2V0IHN0YXJ0ZXJzZXQgPSBuZXcgSGFzaFNldCgpOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXJpcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgU2NoZW1hUmVzb3VyY2UgcmVzb3VyY2UgPSAoU2NoZW1hUmVzb3VyY2UpbG9va3VwUmVzb3VyY2UobnVsbCwgdXJpc1tpXSk7Ci0gICAgICAgICAgICBpZiAocmVzb3VyY2UgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBzdGFydGVyc2V0LmFkZChyZXNvdXJjZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVuYW1lcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgU2NoZW1hUmVzb3VyY2UgcmVzb3VyY2UgPSAoU2NoZW1hUmVzb3VyY2UpX3Jlc291cmNlRm9yRmlsZW5hbWUuZ2V0KGZpbGVuYW1lcyk7Ci0gICAgICAgICAgICBpZiAocmVzb3VyY2UgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBzdGFydGVyc2V0LmFkZChyZXNvdXJjZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBTY2hlbWFSZXNvdXJjZVtdIHN0YXJ0ZXJzID0gKFNjaGVtYVJlc291cmNlW10pCi0gICAgICAgICAgICAgICBzdGFydGVyc2V0LnRvQXJyYXkobmV3IFNjaGVtYVJlc291cmNlWzBdKTsKLQotICAgICAgICBpZiAocmVmcmVzaCkKLSAgICAgICAgICAgIHJlZG93bmxvYWRFbnRyaWVzKHN0YXJ0ZXJzKTsKLQotICAgICAgICBpZiAoaW1wb3J0cykKLSAgICAgICAgICAgIHJlc29sdmVJbXBvcnRzKHN0YXJ0ZXJzKTsKLQotICAgICAgICBfcmVkb3dubG9hZFNldCA9IG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQWRkcyBpdGVtcyB0byB0aGUgY2FjaGUgdGhhdCBwb2ludCB0byBuZXcgZmlsZXMgdGhhdCBhcmVuJ3QKLSAgICAgKiBkZXNjcmliZWQgaW4gdGhlIGNhY2hlLCBhbmQgb3B0aW9uYWxseSBkZWxldGVzIG9sZCBlbnRyaWVzLgotICAgICAqCi0gICAgICogSWYgYW4gb2xkIGZpbGUgaXMgZ29uZSBhbmQgYSBuZXcgZmlsZSBpcwotICAgICAqIGZvdW5kIHdpdGggZXhhY3RseSB0aGUgc2FtZSBjb250ZW50cywgdGhlIGNhY2hlIGVudHJ5IGlzIG1vdmVkCi0gICAgICogdG8gcG9pbnQgdG8gdGhlIG5ldyBmaWxlLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHN5bmNDYWNoZVdpdGhMb2NhbFhzZEZpbGVzKFN0cmluZ1tdIGZpbGVuYW1lcywgYm9vbGVhbiBkZWxldGVPbmx5TWVudGlvbmVkKQotICAgIHsKLSAgICAgICAgU2V0IHNlZW5SZXNvdXJjZXMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICBTZXQgdmFuaXNoZWRSZXNvdXJjZXMgPSBuZXcgSGFzaFNldCgpOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlsZW5hbWVzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlbmFtZXNbaV07Ci0KLSAgICAgICAgICAgIC8vIGZpcnN0LCBpZiB0aGUgZmlsZW5hbWUgbWF0Y2hlcyBleGFjdGx5LCB0cnVzdCB0aGUgZmlsZW5hbWUKLSAgICAgICAgICAgIFNjaGVtYVJlc291cmNlIHJlc291cmNlID0gKFNjaGVtYVJlc291cmNlKV9yZXNvdXJjZUZvckZpbGVuYW1lLmdldChmaWxlbmFtZSk7Ci0gICAgICAgICAgICBpZiAocmVzb3VyY2UgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoZmlsZUV4aXN0cyhmaWxlbmFtZSkpCi0gICAgICAgICAgICAgICAgICAgIHNlZW5SZXNvdXJjZXMuYWRkKHJlc291cmNlKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHZhbmlzaGVkUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIG5ldyBmaWxlIHRoYXQgaXMgbm90IGluIHRoZSBpbmRleD8KLSAgICAgICAgICAgIC8vIG5vdCBpZiB0aGUgZGlnZXN0IGlzIGtub3duIHRvIHRoZSBpbmRleCBhbmQgdGhlIG9yaWdpbmFsIGZpbGUgaXMgZ29uZSAtIHRoYXQncyBhIHJlbmFtZSEKLSAgICAgICAgICAgIFN0cmluZyBkaWdlc3QgPSBudWxsOwotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGlnZXN0ID0gc2hhRGlnZXN0Rm9yRmlsZShmaWxlbmFtZSk7Ci0gICAgICAgICAgICAgICAgcmVzb3VyY2UgPSAoU2NoZW1hUmVzb3VyY2UpX3Jlc291cmNlRm9yRGlnZXN0LmdldChkaWdlc3QpOwotICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZSAhPSBudWxsKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG9sZEZpbGVuYW1lID0gcmVzb3VyY2UuZ2V0RmlsZW5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWxlRXhpc3RzKG9sZEZpbGVuYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZygiRmlsZSAiICsgZmlsZW5hbWUgKyAiIGlzIGEgcmVuYW1lIG9mICIgKyBvbGRGaWxlbmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5zZXRGaWxlbmFtZShmaWxlbmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWVuUmVzb3VyY2VzLmFkZChyZXNvdXJjZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3Jlc291cmNlRm9yRmlsZW5hbWUuZ2V0KG9sZEZpbGVuYW1lKSA9PSByZXNvdXJjZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVzb3VyY2VGb3JGaWxlbmFtZS5yZW1vdmUob2xkRmlsZW5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9yZXNvdXJjZUZvckZpbGVuYW1lLmNvbnRhaW5zS2V5KGZpbGVuYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVzb3VyY2VGb3JGaWxlbmFtZS5wdXQoZmlsZW5hbWUsIHJlc291cmNlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gdW5hYmxlIHRvIHJlYWQgZGlnZXN0Li4uIG5vIHByb2JsZW0sIGlnbm9yZSB0aGVuCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIG9rLCB0aGlzIHJlYWxseSBpcyBhIG5ldyBYU0QgZmlsZSB0aGVuLCBvZiB1bmtub3duIFVSTCBvcmlnaW4KLSAgICAgICAgICAgIERvd25sb2FkZWRTY2hlbWFFbnRyeSBuZXdFbnRyeSA9IGFkZE5ld0VudHJ5KCk7Ci0gICAgICAgICAgICBuZXdFbnRyeS5zZXRGaWxlbmFtZShmaWxlbmFtZSk7Ci0gICAgICAgICAgICB3YXJuaW5nKCJDYWNoaW5nIGluZm9ybWF0aW9uIG9uIG5ldyBsb2NhbCBmaWxlICIgKyBmaWxlbmFtZSk7Ci0gICAgICAgICAgICBpZiAoZGlnZXN0ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgbmV3RW50cnkuc2V0U2hhMShkaWdlc3QpOwotCi0gICAgICAgICAgICBzZWVuUmVzb3VyY2VzLmFkZCh1cGRhdGVSZXNvdXJjZShuZXdFbnRyeSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRlbGV0ZU9ubHlNZW50aW9uZWQpCi0gICAgICAgICAgICBkZWxldGVSZXNvdXJjZXNJblNldCh2YW5pc2hlZFJlc291cmNlcywgdHJ1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRlbGV0ZVJlc291cmNlc0luU2V0KHNlZW5SZXNvdXJjZXMsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJdGVyYXRlcyB0aHJvdWdoIGV2ZXJ5IGVudHJ5IGFuZCByZWZldGNoZXMgaXQgZnJvbSBpdHMgcHJpbWFyeSBVUkwsCi0gICAgICogaWYga25vd24uICBSZXBsYWNlcyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgaWYgdGhlIGRhdGEgaXMgZGlmZmVyZW50LgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCByZWRvd25sb2FkRW50cmllcyhTY2hlbWFSZXNvdXJjZVtdIHJlc291cmNlcykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzb3VyY2VzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICByZWRvd25sb2FkUmVzb3VyY2UocmVzb3VyY2VzW2ldKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBkZWxldGVSZXNvdXJjZXNJblNldChTZXQgc2VlblJlc291cmNlcywgYm9vbGVhbiBzZXRUb0RlbGV0ZSkKLSAgICB7Ci0gICAgICAgIFNldCBzZWVuQ2FjaGVFbnRyaWVzID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gc2VlblJlc291cmNlcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICB7Ci0gICAgICAgICAgICBTY2hlbWFSZXNvdXJjZSByZXNvdXJjZSA9IChTY2hlbWFSZXNvdXJjZSlpLm5leHQoKTsKLSAgICAgICAgICAgIHNlZW5DYWNoZUVudHJpZXMuYWRkKHJlc291cmNlLl9jYWNoZUVudHJ5KTsKLSAgICAgICAgfQotCi0gICAgICAgIERvd25sb2FkZWRTY2hlbWFzIGRvd25sb2FkZWRTY2hlbWFzID0gX2ltcG9ydHNEb2MuZ2V0RG93bmxvYWRlZFNjaGVtYXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkb3dubG9hZGVkU2NoZW1hcy5zaXplT2ZFbnRyeUFycmF5KCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgRG93bmxvYWRlZFNjaGVtYUVudHJ5IGNhY2hlRW50cnkgPSBkb3dubG9hZGVkU2NoZW1hcy5nZXRFbnRyeUFycmF5KGkpOwotCi0gICAgICAgICAgICBpZiAoc2VlbkNhY2hlRW50cmllcy5jb250YWlucyhjYWNoZUVudHJ5KSA9PSBzZXRUb0RlbGV0ZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTY2hlbWFSZXNvdXJjZSByZXNvdXJjZSA9IChTY2hlbWFSZXNvdXJjZSlfcmVzb3VyY2VGb3JDYWNoZUVudHJ5LmdldChjYWNoZUVudHJ5KTsKLSAgICAgICAgICAgICAgICB3YXJuaW5nKCJSZW1vdmluZyBvYnNvbGV0ZSBjYWNoZSBlbnRyeSBmb3IgIiArIHJlc291cmNlLmdldEZpbGVuYW1lKCkpOwotCi0gICAgICAgICAgICAgICAgaWYgKHJlc291cmNlICE9IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBfcmVzb3VyY2VGb3JDYWNoZUVudHJ5LnJlbW92ZShjYWNoZUVudHJ5KTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAocmVzb3VyY2UgPT0gX3Jlc291cmNlRm9yRmlsZW5hbWUuZ2V0KHJlc291cmNlLmdldEZpbGVuYW1lKCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgX3Jlc291cmNlRm9yRmlsZW5hbWUucmVtb3ZlKHJlc291cmNlLmdldEZpbGVuYW1lKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZSA9PSBfcmVzb3VyY2VGb3JEaWdlc3QuZ2V0KHJlc291cmNlLmdldFNoYTEoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBfcmVzb3VyY2VGb3JEaWdlc3QucmVtb3ZlKHJlc291cmNlLmdldFNoYTEoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlc291cmNlID09IF9yZXNvdXJjZUZvck5hbWVzcGFjZS5nZXQocmVzb3VyY2UuZ2V0TmFtZXNwYWNlKCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgX3Jlc291cmNlRm9yTmFtZXNwYWNlLnJlbW92ZShyZXNvdXJjZS5nZXROYW1lc3BhY2UoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gRmluYWxseSwgYW55IG9yIGFsbCBVUklzCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZ1tdIHVybHMgPSByZXNvdXJjZS5nZXRTY2hlbWFMb2NhdGlvbkFycmF5KCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdXJscy5sZW5ndGg7IGorKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc291cmNlID09IF9yZXNvdXJjZUZvclVSTC5nZXQodXJsc1tqXSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Jlc291cmNlRm9yVVJMLnJlbW92ZSh1cmxzW2pdKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGRvd25sb2FkZWRTY2hlbWFzLnJlbW92ZUVudHJ5KGkpOwotICAgICAgICAgICAgICAgIGkgLT0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgU2NoZW1hUmVzb3VyY2UgdXBkYXRlUmVzb3VyY2UoRG93bmxvYWRlZFNjaGVtYUVudHJ5IGVudHJ5KQotICAgIHsKLSAgICAgICAgLy8gVGhlIGZpbGUKLSAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gZW50cnkuZ2V0RmlsZW5hbWUoKTsKLSAgICAgICAgaWYgKGZpbGVuYW1lID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICBTY2hlbWFSZXNvdXJjZSByZXNvdXJjZSA9IG5ldyBTY2hlbWFSZXNvdXJjZShlbnRyeSk7Ci0gICAgICAgIF9yZXNvdXJjZUZvckNhY2hlRW50cnkucHV0KGVudHJ5LCByZXNvdXJjZSk7Ci0KLSAgICAgICAgaWYgKCFfcmVzb3VyY2VGb3JGaWxlbmFtZS5jb250YWluc0tleShmaWxlbmFtZSkpCi0gICAgICAgICAgICBfcmVzb3VyY2VGb3JGaWxlbmFtZS5wdXQoZmlsZW5hbWUsIHJlc291cmNlKTsKLQotICAgICAgICAvLyBUaGUgZGlnZXN0Ci0gICAgICAgIFN0cmluZyBkaWdlc3QgPSByZXNvdXJjZS5nZXRTaGExKCk7Ci0gICAgICAgIGlmIChkaWdlc3QgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFfcmVzb3VyY2VGb3JEaWdlc3QuY29udGFpbnNLZXkoZGlnZXN0KSkKLSAgICAgICAgICAgICAgICBfcmVzb3VyY2VGb3JEaWdlc3QucHV0KGRpZ2VzdCwgcmVzb3VyY2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTmV4dCwgdGhlIG5hbWVzcGFjZQotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gcmVzb3VyY2UuZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICAgIGlmIChuYW1lc3BhY2UgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFfcmVzb3VyY2VGb3JOYW1lc3BhY2UuY29udGFpbnNLZXkobmFtZXNwYWNlKSkKLSAgICAgICAgICAgICAgICBfcmVzb3VyY2VGb3JOYW1lc3BhY2UucHV0KG5hbWVzcGFjZSwgcmVzb3VyY2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRmluYWxseSwgYW55IG9yIGFsbCBVUklzCi0gICAgICAgIFN0cmluZ1tdIHVybHMgPSByZXNvdXJjZS5nZXRTY2hlbWFMb2NhdGlvbkFycmF5KCk7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdXJscy5sZW5ndGg7IGorKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFfcmVzb3VyY2VGb3JVUkwuY29udGFpbnNLZXkodXJsc1tqXSkpCi0gICAgICAgICAgICAgICAgX3Jlc291cmNlRm9yVVJMLnB1dCh1cmxzW2pdLCByZXNvdXJjZSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVzb3VyY2U7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgRGlnZXN0SW5wdXRTdHJlYW0gZGlnZXN0SW5wdXRTdHJlYW0oSW5wdXRTdHJlYW0gaW5wdXQpCi0gICAgewotICAgICAgICBNZXNzYWdlRGlnZXN0IHNoYTsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHNoYSA9IE1lc3NhZ2VEaWdlc3QuZ2V0SW5zdGFuY2UoIlNIQSIpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChOb1N1Y2hBbGdvcml0aG1FeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbikobmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpLmluaXRDYXVzZShlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBEaWdlc3RJbnB1dFN0cmVhbSBzdHIgPSBuZXcgRGlnZXN0SW5wdXRTdHJlYW0oaW5wdXQsIHNoYSk7Ci0KLSAgICAgICAgcmV0dXJuIHN0cjsKLSAgICB9Ci0KLSAgICBwcml2YXRlIERvd25sb2FkZWRTY2hlbWFFbnRyeSBhZGROZXdFbnRyeSgpCi0gICAgewotICAgICAgICByZXR1cm4gX2ltcG9ydHNEb2MuZ2V0RG93bmxvYWRlZFNjaGVtYXMoKS5hZGROZXdFbnRyeSgpOwotICAgIH0KLQotICAgIHByaXZhdGUgY2xhc3MgU2NoZW1hUmVzb3VyY2UgaW1wbGVtZW50cyBTY2hlbWFJbXBvcnRSZXNvbHZlci5TY2hlbWFSZXNvdXJjZQotICAgIHsKLSAgICAgICAgU2NoZW1hUmVzb3VyY2UoRG93bmxvYWRlZFNjaGVtYUVudHJ5IGVudHJ5KQotICAgICAgICB7Ci0gICAgICAgICAgICBfY2FjaGVFbnRyeSA9IGVudHJ5OwotICAgICAgICB9Ci0KLSAgICAgICAgRG93bmxvYWRlZFNjaGVtYUVudHJ5IF9jYWNoZUVudHJ5OwotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldEZpbGVuYW1lKFN0cmluZyBmaWxlbmFtZSkKLSAgICAgICAgewotICAgICAgICAgICAgX2NhY2hlRW50cnkuc2V0RmlsZW5hbWUoZmlsZW5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFN0cmluZyBnZXRGaWxlbmFtZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBfY2FjaGVFbnRyeS5nZXRGaWxlbmFtZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFNjaGVtYSBnZXRTY2hlbWEoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWZpbGVFeGlzdHMoZ2V0RmlsZW5hbWUoKSkpCi0gICAgICAgICAgICAgICAgcmVkb3dubG9hZFJlc291cmNlKHRoaXMpOwotCi0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gU2NoZW1hRG9jdW1lbnQuRmFjdG9yeS5wYXJzZShpbnB1dFN0cmVhbUZvckZpbGUoZ2V0RmlsZW5hbWUoKSkpLmdldFNjaGVtYSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyByZXR1cm4gbnVsbCBpZiBfYW55XyBwcm9ibGVtcyByZWFkaW5nIHNjaGVtYSBmaWxlCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFNoYTEoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gX2NhY2hlRW50cnkuZ2V0U2hhMSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gX2NhY2hlRW50cnkuZ2V0TmFtZXNwYWNlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBzZXROYW1lc3BhY2UoU3RyaW5nIG5hbWVzcGFjZSkKLSAgICAgICAgewotICAgICAgICAgICAgX2NhY2hlRW50cnkuc2V0TmFtZXNwYWNlKG5hbWVzcGFjZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFNjaGVtYUxvY2F0aW9uKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKF9jYWNoZUVudHJ5LnNpemVPZlNjaGVtYUxvY2F0aW9uQXJyYXkoKSA+IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIF9jYWNoZUVudHJ5LmdldFNjaGVtYUxvY2F0aW9uQXJyYXkoMCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRTY2hlbWFMb2NhdGlvbkFycmF5KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIF9jYWNoZUVudHJ5LmdldFNjaGVtYUxvY2F0aW9uQXJyYXkoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0RmlsZW5hbWUoKS5oYXNoQ29kZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzID09IG9iaiB8fCBnZXRGaWxlbmFtZSgpLmVxdWFscygoKFNjaGVtYVJlc291cmNlKW9iaikuZ2V0RmlsZW5hbWUoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBhZGRTY2hlbWFMb2NhdGlvbihTdHJpbmcgc2NoZW1hTG9jYXRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9jYWNoZUVudHJ5LmFkZFNjaGVtYUxvY2F0aW9uKHNjaGVtYUxvY2F0aW9uKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENhbGxlZCB3aGVuIHRoZSBJbXBvcnRMb2FkZXIgd2lzaGVzIHRvIHJlc29sdmUgdGhlCi0gICAgICogZ2l2ZW4gaW1wb3J0LiAgU2hvdWxkIHJldHVybiBhIFNjaGVtYVJlc291cmNlIHdob3NlCi0gICAgICogImVxdWFscyIgcmVsYXRpb25zaGlwIHJldmVhbHMgd2hlbiBhIFNjaGVtYVJlc291cmNlIGlzCi0gICAgICogZHVwbGljYXRlZCBhbmQgc2hvdWxkbid0IGJlIGV4YW1pbmVkIGFnYWluLgotICAgICAqCi0gICAgICogUmV0dXJucyBudWxsIGlmIHRoZSByZXNvdXJjZSByZWZlcmVuY2Ugc2hvdWxkIGJlIGlnbm9yZWQuCi0gICAgICovCi0gICAgcHVibGljIFNjaGVtYUltcG9ydFJlc29sdmVyLlNjaGVtYVJlc291cmNlIGxvb2t1cFJlc291cmNlKFN0cmluZyBuc1VSSSwgU3RyaW5nIHNjaGVtYUxvY2F0aW9uKQotICAgIHsKLSAgICAgICAgU2NoZW1hUmVzb3VyY2UgcmVzdWx0ID0gZmV0Y2hGcm9tQ2FjaGUobnNVUkksIHNjaGVtYUxvY2F0aW9uKTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX3JlZG93bmxvYWRTZXQgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZWRvd25sb2FkUmVzb3VyY2UocmVzdWx0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2NoZW1hTG9jYXRpb24gPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgd2FybmluZygiTm8gY2FjaGVkIHNjaGVtYSBmb3IgbmFtZXNwYWNlICciICsgbnNVUkkgKyAiJywgYW5kIG5vIHVybCBzcGVjaWZpZWQiKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0ID0gY29weU9ySWRlbnRpZnlEdXBsaWNhdGVVUkwoc2NoZW1hTG9jYXRpb24sIG5zVVJJKTsKLSAgICAgICAgaWYgKF9yZWRvd25sb2FkU2V0ICE9IG51bGwpCi0gICAgICAgICAgICBfcmVkb3dubG9hZFNldC5hZGQocmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFNjaGVtYVJlc291cmNlIGZldGNoRnJvbUNhY2hlKFN0cmluZyBuc1VSSSwgU3RyaW5nIHNjaGVtYUxvY2F0aW9uKQotICAgIHsKLSAgICAgICAgU2NoZW1hUmVzb3VyY2UgcmVzdWx0OwotCi0gICAgICAgIGlmIChzY2hlbWFMb2NhdGlvbiAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSAoU2NoZW1hUmVzb3VyY2UpX3Jlc291cmNlRm9yVVJMLmdldChzY2hlbWFMb2NhdGlvbik7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChuc1VSSSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSAoU2NoZW1hUmVzb3VyY2UpX3Jlc291cmNlRm9yTmFtZXNwYWNlLmdldChuc1VSSSk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHByaXZhdGUgU3RyaW5nIHVuaXF1ZUZpbGVuYW1lRm9yVVJJKFN0cmluZyBzY2hlbWFMb2NhdGlvbikgdGhyb3dzIElPRXhjZXB0aW9uLCBVUklTeW50YXhFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFN0cmluZyBsb2NhbEZpbGVuYW1lID0gbmV3IFVSSSggc2NoZW1hTG9jYXRpb24gKS5nZXRSYXdQYXRoKCk7Ci0gICAgICAgIGludCBpID0gbG9jYWxGaWxlbmFtZS5sYXN0SW5kZXhPZignLycpOwotICAgICAgICBpZiAoaSA+PSAwKQotICAgICAgICAgICAgbG9jYWxGaWxlbmFtZSA9IGxvY2FsRmlsZW5hbWUuc3Vic3RyaW5nKGkgKyAxKTsKLSAgICAgICAgaWYgKGxvY2FsRmlsZW5hbWUuZW5kc1dpdGgoIi54c2QiKSkKLSAgICAgICAgICAgIGxvY2FsRmlsZW5hbWUgPSBsb2NhbEZpbGVuYW1lLnN1YnN0cmluZygwLCBsb2NhbEZpbGVuYW1lLmxlbmd0aCgpIC0gNCk7Ci0gICAgICAgIGlmIChsb2NhbEZpbGVuYW1lLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICBsb2NhbEZpbGVuYW1lID0gInNjaGVtYSI7Ci0KLSAgICAgICAgLy8gVE9ETzogcmVtb3ZlIG90aGVyIHVuc2FmZSBjaGFyYWN0ZXJzIGZvciBmaWxlbmFtZXM/Ci0KLSAgICAgICAgU3RyaW5nIGNhbmRpZGF0ZUZpbGVuYW1lID0gbG9jYWxGaWxlbmFtZTsKLSAgICAgICAgaW50IHN1ZmZpeCA9IDE7Ci0gICAgICAgIHdoaWxlIChzdWZmaXggPCAxMDAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgY2FuZGlkYXRlID0gX2RlZmF1bHRDb3B5RGlyZWN0b3J5ICsgIi8iICsgY2FuZGlkYXRlRmlsZW5hbWUgKyAiLnhzZCI7Ci0gICAgICAgICAgICBpZiAoIWZpbGVFeGlzdHMoY2FuZGlkYXRlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlOwotICAgICAgICAgICAgc3VmZml4ICs9IDE7Ci0gICAgICAgICAgICBjYW5kaWRhdGVGaWxlbmFtZSA9IGxvY2FsRmlsZW5hbWUgKyBzdWZmaXg7Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIlByb2JsZW0gd2l0aCBmaWxlbmFtZSAiICsgbG9jYWxGaWxlbmFtZSArICIueHNkIik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHJlZG93bmxvYWRSZXNvdXJjZShTY2hlbWFSZXNvdXJjZSByZXNvdXJjZSkKLSAgICB7Ci0gICAgICAgIGlmIChfcmVkb3dubG9hZFNldCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX3JlZG93bmxvYWRTZXQuY29udGFpbnMocmVzb3VyY2UpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIF9yZWRvd25sb2FkU2V0LmFkZChyZXNvdXJjZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSByZXNvdXJjZS5nZXRGaWxlbmFtZSgpOwotICAgICAgICBTdHJpbmcgc2NoZW1hTG9jYXRpb24gPSByZXNvdXJjZS5nZXRTY2hlbWFMb2NhdGlvbigpOwotICAgICAgICBTdHJpbmcgZGlnZXN0ID0gbnVsbDsKLQotICAgICAgICAvLyBub3RoaW5nIHRvIGRvPwotICAgICAgICBpZiAoc2NoZW1hTG9jYXRpb24gPT0gbnVsbCB8fCBmaWxlbmFtZSA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBidWZmZXIgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCBzY2hlbWFMb2NhdGlvbiApOwotICAgICAgICAgICAgVVJMQ29ubmVjdGlvbiBjb25uID0gdXJsLm9wZW5Db25uZWN0aW9uKCk7Ci0gICAgICAgICAgICBjb25uLmFkZFJlcXVlc3RQcm9wZXJ0eSgiVXNlci1BZ2VudCIsICJCRUEgWE1MIEJlYW5zLzEuMCIpOwotICAgICAgICAgICAgY29ubi5hZGRSZXF1ZXN0UHJvcGVydHkoIkFjY2VwdCIsICJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sLCAqLyoiKTsKLSAgICAgICAgICAgIERpZ2VzdElucHV0U3RyZWFtIGlucHV0ID0gZGlnZXN0SW5wdXRTdHJlYW0oY29ubi5nZXRJbnB1dFN0cmVhbSgpKTsKLSAgICAgICAgICAgIElPVXRpbC5jb3B5Q29tcGxldGVseShpbnB1dCwgYnVmZmVyKTsKLSAgICAgICAgICAgIGRpZ2VzdCA9IEhleEJpbi5ieXRlc1RvU3RyaW5nKGlucHV0LmdldE1lc3NhZ2VEaWdlc3QoKS5kaWdlc3QoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICB3YXJuaW5nKCJDb3VsZCBub3QgY29weSByZW1vdGUgcmVzb3VyY2UgIiArIHNjaGVtYUxvY2F0aW9uICsgIjoiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRpZ2VzdC5lcXVhbHMocmVzb3VyY2UuZ2V0U2hhMSgpKSAmJiBmaWxlRXhpc3RzKGZpbGVuYW1lKSkKLSAgICAgICAgewotICAgICAgICAgICAgd2FybmluZygiUmVzb3VyY2UgIiArIGZpbGVuYW1lICsgIiBpcyB1bmNoYW5nZWQgZnJvbSAiICsgc2NoZW1hTG9jYXRpb24gKyAiLiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIElucHV0U3RyZWFtIHNvdXJjZSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShidWZmZXIudG9CeXRlQXJyYXkoKSk7Ci0gICAgICAgICAgICB3cml0ZUlucHV0U3RyZWFtVG9GaWxlKHNvdXJjZSwgZmlsZW5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICB3YXJuaW5nKCJDb3VsZCBub3Qgd3JpdGUgdG8gZmlsZSAiICsgZmlsZW5hbWUgKyAiIGZvciAiICsgc2NoZW1hTG9jYXRpb24gKyAiOiIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB3YXJuaW5nKCJSZWZyZXNoZWQgIiArIGZpbGVuYW1lICsgIiBmcm9tICIgKyBzY2hlbWFMb2NhdGlvbik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBTY2hlbWFSZXNvdXJjZSBjb3B5T3JJZGVudGlmeUR1cGxpY2F0ZVVSTChTdHJpbmcgc2NoZW1hTG9jYXRpb24sIFN0cmluZyBuYW1lc3BhY2UpCi0gICAgewotICAgICAgICBTdHJpbmcgdGFyZ2V0RmlsZW5hbWU7Ci0gICAgICAgIFN0cmluZyBkaWdlc3Q7Ci0gICAgICAgIFNjaGVtYVJlc291cmNlIHJlc3VsdDsKLQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0RmlsZW5hbWUgPSB1bmlxdWVGaWxlbmFtZUZvclVSSShzY2hlbWFMb2NhdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFVSSVN5bnRheEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICB3YXJuaW5nKCJJbnZhbGlkIFVSSSAnIiArIHNjaGVtYUxvY2F0aW9uICsgIic6IiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICB3YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGxvY2FsIGZpbGUgZm9yICIgKyBzY2hlbWFMb2NhdGlvbiArICI6IiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCBzY2hlbWFMb2NhdGlvbiApOwotICAgICAgICAgICAgRGlnZXN0SW5wdXRTdHJlYW0gaW5wdXQgPSBkaWdlc3RJbnB1dFN0cmVhbSh1cmwub3BlblN0cmVhbSgpKTsKLSAgICAgICAgICAgIHdyaXRlSW5wdXRTdHJlYW1Ub0ZpbGUoaW5wdXQsIHRhcmdldEZpbGVuYW1lKTsKLSAgICAgICAgICAgIGRpZ2VzdCA9IEhleEJpbi5ieXRlc1RvU3RyaW5nKGlucHV0LmdldE1lc3NhZ2VEaWdlc3QoKS5kaWdlc3QoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICB3YXJuaW5nKCJDb3VsZCBub3QgY29weSByZW1vdGUgcmVzb3VyY2UgIiArIHNjaGVtYUxvY2F0aW9uICsgIjoiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQgPSAoU2NoZW1hUmVzb3VyY2UpX3Jlc291cmNlRm9yRGlnZXN0LmdldChkaWdlc3QpOwotICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlbGV0ZUZpbGUodGFyZ2V0RmlsZW5hbWUpOwotICAgICAgICAgICAgcmVzdWx0LmFkZFNjaGVtYUxvY2F0aW9uKHNjaGVtYUxvY2F0aW9uKTsKLSAgICAgICAgICAgIGlmICghX3Jlc291cmNlRm9yVVJMLmNvbnRhaW5zS2V5KHNjaGVtYUxvY2F0aW9uKSkKLSAgICAgICAgICAgICAgICBfcmVzb3VyY2VGb3JVUkwucHV0KHNjaGVtYUxvY2F0aW9uLCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIHdhcm5pbmcoIkRvd25sb2FkZWQgIiArIHNjaGVtYUxvY2F0aW9uICsgIiB0byAiICsgdGFyZ2V0RmlsZW5hbWUpOwotCi0gICAgICAgIERvd25sb2FkZWRTY2hlbWFFbnRyeSBuZXdFbnRyeSA9IGFkZE5ld0VudHJ5KCk7Ci0gICAgICAgIG5ld0VudHJ5LnNldEZpbGVuYW1lKHRhcmdldEZpbGVuYW1lKTsKLSAgICAgICAgbmV3RW50cnkuc2V0U2hhMShkaWdlc3QpOwotICAgICAgICBpZiAobmFtZXNwYWNlICE9IG51bGwpCi0gICAgICAgICAgICBuZXdFbnRyeS5zZXROYW1lc3BhY2UobmFtZXNwYWNlKTsKLSAgICAgICAgbmV3RW50cnkuYWRkU2NoZW1hTG9jYXRpb24oc2NoZW1hTG9jYXRpb24pOwotICAgICAgICByZXR1cm4gdXBkYXRlUmVzb3VyY2UobmV3RW50cnkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFVwZGF0ZXMgYWN0dWFsIG5hbWVzcGFjZSBpbiB0aGUgdGFibGUuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcmVwb3J0QWN0dWFsTmFtZXNwYWNlKFNjaGVtYUltcG9ydFJlc29sdmVyLlNjaGVtYVJlc291cmNlIHJyZXNvdXJjZSwgU3RyaW5nIGFjdHVhbE5hbWVzcGFjZSkKLSAgICB7Ci0gICAgICAgIFNjaGVtYVJlc291cmNlIHJlc291cmNlID0gKFNjaGVtYVJlc291cmNlKXJyZXNvdXJjZTsKLSAgICAgICAgU3RyaW5nIG9sZE5hbWVzcGFjZSA9IHJlc291cmNlLmdldE5hbWVzcGFjZSgpOwotICAgICAgICBpZiAob2xkTmFtZXNwYWNlICE9IG51bGwgJiYgX3Jlc291cmNlRm9yTmFtZXNwYWNlLmdldChvbGROYW1lc3BhY2UpID09IHJlc291cmNlKQotICAgICAgICAgICAgX3Jlc291cmNlRm9yTmFtZXNwYWNlLnJlbW92ZShvbGROYW1lc3BhY2UpOwotICAgICAgICBpZiAoIV9yZXNvdXJjZUZvck5hbWVzcGFjZS5jb250YWluc0tleShhY3R1YWxOYW1lc3BhY2UpKQotICAgICAgICAgICAgX3Jlc291cmNlRm9yTmFtZXNwYWNlLnB1dChhY3R1YWxOYW1lc3BhY2UsIHJlc291cmNlKTsKLSAgICAgICAgcmVzb3VyY2Uuc2V0TmFtZXNwYWNlKGFjdHVhbE5hbWVzcGFjZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBTdHJpbmcgc2hhRGlnZXN0Rm9yRmlsZShTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgRGlnZXN0SW5wdXRTdHJlYW0gc3RyID0gZGlnZXN0SW5wdXRTdHJlYW0oaW5wdXRTdHJlYW1Gb3JGaWxlKGZpbGVuYW1lKSk7Ci0KLSAgICAgICAgYnl0ZVtdIGR1bW15ID0gbmV3IGJ5dGVbNDA5Nl07Ci0gICAgICAgIGZvciAoaW50IGkgPSAxOyBpID4gMDsgaSA9IHN0ci5yZWFkKGR1bW15KSk7Ci0KLSAgICAgICAgc3RyLmNsb3NlKCk7Ci0KLSAgICAgICAgcmV0dXJuIEhleEJpbi5ieXRlc1RvU3RyaW5nKHN0ci5nZXRNZXNzYWdlRGlnZXN0KCkuZGlnZXN0KCkpOwotICAgIH0KLQotICAgIC8vIFNPTUUgTUVUSE9EUyBUTyBPVkVSUklERSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldEluZGV4RmlsZW5hbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICIuL3hzZG93bmxvYWQueG1sIjsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldERlZmF1bHRTY2hlbWFEaXIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICIuL3NjaGVtYSI7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUHJvZHVjZXMgZGlhZ25vc3RpYyBtZXNzYWdlcyBzdWNoIGFzICJkb3dubG9hZGluZyBYIHRvIGZpbGUgWSIuCi0gICAgICovCi0gICAgYWJzdHJhY3QgcHJvdGVjdGVkIHZvaWQgd2FybmluZyhTdHJpbmcgbXNnKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gZmlsZW5hbWUgZXhpc3RzLiAgVGhlIGZpbGVuYW1lcwotICAgICAqIGFyZSBvZiB0aGUgZm9ybSAiL2Zvby9iYXIvemVlLnhzZCIgYW5kIHNob3VsZCBiZSBjb25zdHJ1ZWQKLSAgICAgKiBhcyByb290ZWQgYXQgdGhlIHJvb3Qgb2YgdGhlIHByb2plY3QuCi0gICAgICovCi0gICAgYWJzdHJhY3QgcHJvdGVjdGVkIGJvb2xlYW4gZmlsZUV4aXN0cyhTdHJpbmcgZmlsZW5hbWUpOwotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgZGF0YSBpbiB0aGUgZ2l2ZW4gZmlsZW5hbWUgYXMgYW4gSW5wdXRTdHJlYW0uCi0gICAgICovCi0gICAgYWJzdHJhY3QgcHJvdGVjdGVkIElucHV0U3RyZWFtIGlucHV0U3RyZWFtRm9yRmlsZShTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbjsKLQotICAgIC8qKgotICAgICAqIFdyaXRlcyBhbiBlbnRpcmUgZmlsZSBpbiBvbmUgc3RlcC4gIEFuIElucHV0U3RyZWFtIGlzIHBhc3NlZCBhbmQKLSAgICAgKiBjb3BpZWQgdG8gdGhlIGZpbGUuCi0gICAgICovCi0gICAgYWJzdHJhY3QgcHJvdGVjdGVkIHZvaWQgd3JpdGVJbnB1dFN0cmVhbVRvRmlsZShJbnB1dFN0cmVhbSBpbnB1dCwgU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb247Ci0KLSAgICAvKioKLSAgICAgKiBEZWxldGVzIGEgZmlsZS4gIFNvbWV0aW1lcyBpbW1lZGlhdGVseSBhZnRlciB3cml0aW5nIGEgbmV3IGZpbGUKLSAgICAgKiB3ZSBub3RpY2UgdGhhdCBpdCdzIGV4YWN0bHkgdGhlIHNhbWUgYXMgYW4gZXhpc3RpbmcgZmlsZSBhbmQKLSAgICAgKiB3ZSBkZWxldGUgaXQuIFdlIG5ldmVyIGRlbGV0ZSBhIGZpbGUgdGhhdCB3YXMgZ2l2ZW4gdG8gdXMKLSAgICAgKiBieSB0aGUgdXNlci4KLSAgICAgKi8KLSAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgdm9pZCBkZWxldGVGaWxlKFN0cmluZyBmaWxlbmFtZSk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgdGhlIFhTRCBmaWxlc25hbWVzIGluIHRoZSBwcm9qZWN0LgotICAgICAqLwotICAgIGFic3RyYWN0IHByb3RlY3RlZCBTdHJpbmdbXSBnZXRBbGxYU0RGaWxlbmFtZXMoKTsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxjb21wL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC90b29sL0NvZGVHZW5VdGlsLmphdmEgYi92Mi9zcmMveG1sY29tcC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdG9vbC9Db2RlR2VuVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWM3MzcwLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxjb21wL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC90b29sL0NvZGVHZW5VdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NDUgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudG9vbDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uRmlsZUZpbHRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5uZXQuVVJJOwotaW1wb3J0IGphdmEubmV0LlVSSVN5bnRheEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIENvZGVHZW5VdGlsCi17Ci0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgREVGQVVMVF9NRU1fU1RBUlQgPSAiOG0iOwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIERFRkFVTFRfTUVNX01BWCA9ICIyNTZtIjsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBERUZBVUxUX0NPTVBJTEVSID0gImphdmFjIjsKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBERUZBVUxUX0pBUiA9ICJqYXIiOwotCi0gICAgLy93b3JrYXJvdW5kIGZvciBTdW4gYnVnICMgNDcyMzcyNgotICAgIHB1YmxpYyBzdGF0aWMgVVJJIHJlc29sdmUoVVJJIGJhc2UsIFVSSSBjaGlsZCkKLSAgICB7Ci0gICAgICAgIFVSSSBydXJpID0gYmFzZS5yZXNvbHZlKGNoaWxkKTsKLSAgICAgICAgCi0gICAgICAgIC8vZml4IHVwIG5vcm1hbGl6YXRpb24gYnVnCi0gICAgICAgIGlmICgiZmlsZSIuZXF1YWxzKHJ1cmkuZ2V0U2NoZW1lKCkpICYmICEgY2hpbGQuZXF1YWxzKHJ1cmkpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYmFzZS5nZXRQYXRoKCkuc3RhcnRzV2l0aCgiLy8iKSAmJiAhcnVyaS5nZXRQYXRoKCkuc3RhcnRzV2l0aCgiLy8iKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcGF0aCA9ICIvLy8iLmNvbmNhdChydXJpLmdldFBhdGgoKSk7Ci0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBydXJpID0gbmV3IFVSSSgiZmlsZSIsIG51bGwsIHBhdGgsIHJ1cmkuZ2V0UXVlcnkoKSwgcnVyaS5nZXRGcmFnbWVudCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2goVVJJU3ludGF4RXhjZXB0aW9uIHVyaXMpCi0gICAgICAgICAgICAgICAge30KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcnVyaTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIHZvaWQgYWRkQWxsSmF2YUZpbGVzKExpc3Qgc3JjRmlsZXMsIExpc3QgYXJncykKLSAgICB7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IHNyY0ZpbGVzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZpbGUgZiA9IChGaWxlKWkubmV4dCgpOwotICAgICAgICAgICAgaWYgKCFmLmlzRGlyZWN0b3J5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXJncy5hZGQocXVvdGVBbmRFc2NhcGVGaWxlbmFtZShmLmdldEFic29sdXRlUGF0aCgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTGlzdCBpbnNpZGUgPSAoQXJyYXlzLmFzTGlzdChmLmxpc3RGaWxlcygKLSAgICAgICAgICAgICAgICAgICAgbmV3IEZpbGVGaWx0ZXIoKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBmaWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIChmaWxlLmlzRmlsZSgpICYmIGZpbGUuZ2V0TmFtZSgpLmVuZHNXaXRoKCIuamF2YSIpKSB8fCBmaWxlLmlzRGlyZWN0b3J5KCk7IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICkpKTsKLSAgICAgICAgICAgICAgICBhZGRBbGxKYXZhRmlsZXMoaW5zaWRlLCBhcmdzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBwcml2YXRlIFN0cmluZyBxdW90ZUFuZEVzY2FwZUZpbGVuYW1lKFN0cmluZyBmaWxlbmFtZSkKLSAgICB7Ci0gICAgICAgIC8vIGRvbid0IHF1b3RlIGlmIHRoZXJlJ3Mgbm8gc3BhY2UKLSAgICAgICAgaWYgKGZpbGVuYW1lLmluZGV4T2YoIiAiKSA8IDApCi0gICAgICAgICAgICByZXR1cm4gZmlsZW5hbWU7Ci0KLSAgICAgICAgLy8gYml6YXJyZS4gIGphdmFjIGV4cGVjdHMgYmFja3NsYXNoIGVzY2FwaW5nIGlmIHdlIHF1b3RlIHRoZSBjbGFzc3BhdGgKLSAgICAgICAgLy8gYml6YXJyZSBhbHNvLiAgcmVwbGFjZUFsbCBleHBlY3RzIHJlcGxhY2VtZW50IGJhY2tzbGFzaGVzIHRvIGJlIGRvdWJsZSBlc2NhcGVkLgotICAgICAgICByZXR1cm4gIlwiIiArIGZpbGVuYW1lLnJlcGxhY2VBbGwoIlxcXFwiLCAiXFxcXFxcXFwiKSArICJcIiI7Ci0gICAgfQotCi0gICAgc3RhdGljIHByaXZhdGUgU3RyaW5nIHF1b3RlTm9Fc2NhcGVGaWxlbmFtZShTdHJpbmcgZmlsZW5hbWUpCi0gICAgewotICAgICAgICAvLyBkb24ndCBxdW90ZSBpZiB0aGVyZSdzIG5vIHNwYWNlLCBhbmQgZG9uJ3QgcXVvdGUgb24gbGludXgKLSAgICAgICAgaWYgKGZpbGVuYW1lLmluZGV4T2YoIiAiKSA8IDAgfHwgRmlsZS5zZXBhcmF0b3JDaGFyID09ICcvJykKLSAgICAgICAgICAgIHJldHVybiBmaWxlbmFtZTsKLQotICAgICAgICByZXR1cm4gIlwiIiArIGZpbGVuYW1lICsgIlwiIjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbnZva2VzIGphdmFjIG9uIHRoZSBnZW5lcmF0ZWQgc291cmNlIGZpbGVzIGluIG9yZGVyIHRvIHR1cm4gdGhlbQotICAgICAqIGludG8gYmluYXJ5IGZpbGVzIGluIHRoZSBvdXRwdXQgZGlyZWN0b3J5LiAgVGhpcyB3aWxsIHJldHVybiBhIGxpc3Qgb2YKLSAgICAgKiA8Y29kZT5HZW5GaWxlPC9jb2RlPnMgZm9yIGFsbCBvZiB0aGUgY2xhc3NlcyBwcm9kdWNlZCBvciBudWxsIGlmIGFuCi0gICAgICogZXJyb3Igb2NjdXJyZWQuCi0gICAgICoKLSAgICAgKiBAZGVwcmVjYXRlZAotICAgICAqLwotICAgIHN0YXRpYyBwdWJsaWMgYm9vbGVhbiBleHRlcm5hbENvbXBpbGUoTGlzdCBzcmNGaWxlcywgRmlsZSBvdXRkaXIsIEZpbGVbXSBjcCwgYm9vbGVhbiBkZWJ1ZykKLSAgICB7Ci0gICAgICAgIHJldHVybiBleHRlcm5hbENvbXBpbGUoc3JjRmlsZXMsIG91dGRpciwgY3AsIGRlYnVnLCBERUZBVUxUX0NPTVBJTEVSLCBERUZBVUxUX01FTV9TVEFSVCwgREVGQVVMVF9NRU1fTUFYLCBmYWxzZSwgZmFsc2UpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEludm9rZXMgamF2YWMgb24gdGhlIGdlbmVyYXRlZCBzb3VyY2UgZmlsZXMgaW4gb3JkZXIgdG8gdHVybiB0aGVtCi0gICAgICogaW50byBiaW5hcnkgZmlsZXMgaW4gdGhlIG91dHB1dCBkaXJlY3RvcnkuICBUaGlzIHdpbGwgcmV0dXJuIGEgbGlzdCBvZgotICAgICAqIDxjb2RlPkdlbkZpbGU8L2NvZGU+cyBmb3IgYWxsIG9mIHRoZSBjbGFzc2VzIHByb2R1Y2VkIG9yIG51bGwgaWYgYW4KLSAgICAgKiBlcnJvciBvY2N1cnJlZC4KLSAgICAgKi8KLSAgICBzdGF0aWMgcHVibGljIGJvb2xlYW4gZXh0ZXJuYWxDb21waWxlKExpc3Qgc3JjRmlsZXMsIEZpbGUgb3V0ZGlyLCBGaWxlW10gY3AsIGJvb2xlYW4gZGVidWcsIFN0cmluZyBqYXZhY1BhdGgsIFN0cmluZyBtZW1TdGFydCwgU3RyaW5nIG1lbU1heCwgIGJvb2xlYW4gcXVpZXQsIGJvb2xlYW4gdmVyYm9zZSkKLSAgICB7Ci0gICAgICAgIExpc3QgYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgICAgICBGaWxlIGphdmFjID0gZmluZEphdmFUb29sKGphdmFjUGF0aCA9PSBudWxsID8gREVGQVVMVF9DT01QSUxFUiA6IGphdmFjUGF0aCk7Ci0gICAgICAgIGFzc2VydCAoamF2YWMuZXhpc3RzKCkpIDogImNvbXBpbGVyIG5vdCBmb3VuZCAiICsgamF2YWM7Ci0gICAgICAgIGFyZ3MuYWRkKGphdmFjLmdldEFic29sdXRlUGF0aCgpKTsKLQotICAgICAgICBpZiAob3V0ZGlyID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dGRpciA9IG5ldyBGaWxlKCIuIik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBhcmdzLmFkZCgiLWQiKTsKLSAgICAgICAgICAgIGFyZ3MuYWRkKHF1b3RlQW5kRXNjYXBlRmlsZW5hbWUob3V0ZGlyLmdldEFic29sdXRlUGF0aCgpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY3AgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgY3AgPSBzeXN0ZW1DbGFzc3BhdGgoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjcC5sZW5ndGggPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmdCdWZmZXIgY2xhc3NQYXRoID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgICAgLy8gQWRkIHRoZSBvdXRwdXQgZGlyZWN0b3J5IHRvIHRoZSBjbGFzc3BhdGguICBXZSBkbyB0aGlzIHNvIHRoYXQKLSAgICAgICAgICAgIC8vIGphdmFjIHdpbGwgYmUgYWJsZSB0byBmaW5kIGNsYXNzZXMgdGhhdCB3ZXJlIGNvbXBpbGVkCi0gICAgICAgICAgICAvLyBwcmV2aW91c2x5IGJ1dCBhcmUgbm90IGluIHRoZSBsaXN0IG9mIHNvdXJjZXMgdGhpcyB0aW1lLgotICAgICAgICAgICAgY2xhc3NQYXRoLmFwcGVuZChvdXRkaXIuZ2V0QWJzb2x1dGVQYXRoKCkpOwotCi0gICAgICAgICAgICAvLyBBZGQgZXZlcnl0aGluZyBvbiBvdXIgY2xhc3NwYXRoLgotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjcC5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjbGFzc1BhdGguYXBwZW5kKEZpbGUucGF0aFNlcGFyYXRvcik7Ci0gICAgICAgICAgICAgICAgY2xhc3NQYXRoLmFwcGVuZChjcFtpXS5nZXRBYnNvbHV0ZVBhdGgoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGFyZ3MuYWRkKCItY2xhc3NwYXRoIik7Ci0KLSAgICAgICAgICAgIC8vIGJpemFycmUuICBqYXZhYyBleHBlY3RzIGJhY2tzbGFzaCBlc2NhcGluZyBpZiB3ZSBxdW90ZSB0aGUgY2xhc3NwYXRoCi0gICAgICAgICAgICBhcmdzLmFkZChxdW90ZUFuZEVzY2FwZUZpbGVuYW1lKGNsYXNzUGF0aC50b1N0cmluZygpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBhcmdzLmFkZCgiLXNvdXJjZSIpOwotICAgICAgICBhcmdzLmFkZCgiMS40Iik7Ci0KLSAgICAgICAgYXJncy5hZGQoZGVidWcgPyAiLWciIDogIi1nOm5vbmUiKTsKLQotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGFyZ3MuYWRkKCItdmVyYm9zZSIpOwotCi0gICAgICAgIGFkZEFsbEphdmFGaWxlcyhzcmNGaWxlcywgYXJncyk7Ci0KLSAgICAgICAgRmlsZSBjbEZpbGUgPSBudWxsOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgY2xGaWxlID0gRmlsZS5jcmVhdGVUZW1wRmlsZSgiamF2YWMiLCAiIik7Ci0gICAgICAgICAgICBGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoY2xGaWxlKTsKLSAgICAgICAgICAgIEl0ZXJhdG9yIGkgPSBhcmdzLml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICBmb3IgKGkubmV4dCgpOyBpLmhhc05leHQoKTspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGFyZyA9IChTdHJpbmcpaS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgZncud3JpdGUoYXJnKTsKLSAgICAgICAgICAgICAgICBmdy53cml0ZSgnXG4nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZ3LmNsb3NlKCk7Ci0gICAgICAgICAgICBMaXN0IG5ld2FyZ3MgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgICAgICBuZXdhcmdzLmFkZChhcmdzLmdldCgwKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtZW1TdGFydCAhPSBudWxsICYmIG1lbVN0YXJ0Lmxlbmd0aCgpICE9IDApCi0gICAgICAgICAgICAgICAgbmV3YXJncy5hZGQoIi1KLVhtcyIgKyBtZW1TdGFydCk7Ci0gICAgICAgICAgICBpZiAobWVtTWF4ICE9IG51bGwgJiYgbWVtTWF4Lmxlbmd0aCgpICE9IDApCi0gICAgICAgICAgICAgICAgbmV3YXJncy5hZGQoIi1KLVhteCIgKyBtZW1NYXgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBuZXdhcmdzLmFkZCgiQCIgKyBjbEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOwotICAgICAgICAgICAgYXJncyA9IG5ld2FyZ3M7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNvdWxkIG5vdCBjcmVhdGUgY29tbWFuZC1saW5lIGZpbGUgZm9yIGphdmFjIik7Ci0gICAgICAgIH0KLQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nW10gc3RyQXJncyA9IChTdHJpbmdbXSkgYXJncy50b0FycmF5KG5ldyBTdHJpbmdbYXJncy5zaXplKCldKTsKLQotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiY29tcGlsZSBjb21tYW5kOiIpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyQXJncy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICIgKyBzdHJBcmdzW2ldKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmluYWwgUHJvY2VzcyBwcm9jID0gUnVudGltZS5nZXRSdW50aW1lKCkuZXhlYyhzdHJBcmdzKTsKLQotICAgICAgICAgICAgU3RyaW5nQnVmZmVyIGVycm9yQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgICAgU3RyaW5nQnVmZmVyIG91dHB1dEJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQotICAgICAgICAgICAgVGhyZWFkZWRSZWFkZXIgb3V0ID0gbmV3IFRocmVhZGVkUmVhZGVyKHByb2MuZ2V0SW5wdXRTdHJlYW0oKSwgb3V0cHV0QnVmZmVyKTsKLSAgICAgICAgICAgIFRocmVhZGVkUmVhZGVyIGVyciA9IG5ldyBUaHJlYWRlZFJlYWRlcihwcm9jLmdldEVycm9yU3RyZWFtKCksIGVycm9yQnVmZmVyKTsKLQotICAgICAgICAgICAgcHJvYy53YWl0Rm9yKCk7Ci0KLSAgICAgICAgICAgIGlmICh2ZXJib3NlIHx8IHByb2MuZXhpdFZhbHVlKCkgIT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAob3V0cHV0QnVmZmVyLmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4ob3V0cHV0QnVmZmVyLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LmZsdXNoKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChlcnJvckJ1ZmZlci5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGVycm9yQnVmZmVyLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLmZsdXNoKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChwcm9jLmV4aXRWYWx1ZSgpICE9IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihlLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGUuZ2V0Q2F1c2UoKSk7Ci0gICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjbEZpbGUgIT0gbnVsbCkKLSAgICAgICAgICAgIGNsRmlsZS5kZWxldGUoKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEZpbGVbXSBzeXN0ZW1DbGFzc3BhdGgoKQotICAgIHsKLSAgICAgICAgTGlzdCBjcCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgU3RyaW5nW10gc3lzdGVtY3AgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEuY2xhc3MucGF0aCIpLnNwbGl0KEZpbGUucGF0aFNlcGFyYXRvcik7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3lzdGVtY3AubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNwLmFkZChuZXcgRmlsZShzeXN0ZW1jcFtpXSkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAoRmlsZVtdKWNwLnRvQXJyYXkobmV3IEZpbGVbY3Auc2l6ZSgpXSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHB1YmxpYyBib29sZWFuIGV4dGVybmFsSmFyKEZpbGUgc3JjZGlyLCBGaWxlIG91dGZpbGUpCi0gICAgewotICAgICAgICByZXR1cm4gZXh0ZXJuYWxKYXIoc3JjZGlyLCBvdXRmaWxlLCBERUZBVUxUX0pBUiwgZmFsc2UsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgcHVibGljIGJvb2xlYW4gZXh0ZXJuYWxKYXIoRmlsZSBzcmNkaXIsIEZpbGUgb3V0ZmlsZSwgU3RyaW5nIGphclBhdGgsIGJvb2xlYW4gcXVpZXQsIGJvb2xlYW4gdmVyYm9zZSkKLSAgICB7Ci0gICAgICAgIExpc3QgYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgICAgICBGaWxlIGphciA9IGZpbmRKYXZhVG9vbChqYXJQYXRoID09IG51bGwgPyBERUZBVUxUX0pBUiA6IGphclBhdGgpOwotICAgICAgICBhc3NlcnQgKGphci5leGlzdHMoKSkgOiAiamFyIG5vdCBmb3VuZCAiICsgamFyOwotICAgICAgICBhcmdzLmFkZChqYXIuZ2V0QWJzb2x1dGVQYXRoKCkpOwotCi0gICAgICAgIGFyZ3MuYWRkKCJjZiIgKyAodmVyYm9zZSA/ICJ2IiA6ICIiKSk7Ci0gICAgICAgIGFyZ3MuYWRkKHF1b3RlTm9Fc2NhcGVGaWxlbmFtZShvdXRmaWxlLmdldEFic29sdXRlUGF0aCgpKSk7Ci0KLSAgICAgICAgYXJncy5hZGQoIi1DIik7Ci0gICAgICAgIGFyZ3MuYWRkKHF1b3RlTm9Fc2NhcGVGaWxlbmFtZShzcmNkaXIuZ2V0QWJzb2x1dGVQYXRoKCkpKTsKLQotICAgICAgICBhcmdzLmFkZCgiLiIpOwotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmdbXSBzdHJBcmdzID0gKFN0cmluZ1tdKSBhcmdzLnRvQXJyYXkobmV3IFN0cmluZ1thcmdzLnNpemUoKV0pOwotCi0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJqYXIgY29tbWFuZDoiKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0ckFyZ3MubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiAiICsgc3RyQXJnc1tpXSk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpbmFsIFByb2Nlc3MgcHJvYyA9IFJ1bnRpbWUuZ2V0UnVudGltZSgpLmV4ZWMoc3RyQXJncyk7Ci0KLSAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBlcnJvckJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBvdXRwdXRCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLSAgICAgICAgICAgIFRocmVhZGVkUmVhZGVyIG91dCA9IG5ldyBUaHJlYWRlZFJlYWRlcihwcm9jLmdldElucHV0U3RyZWFtKCksIG91dHB1dEJ1ZmZlcik7Ci0gICAgICAgICAgICBUaHJlYWRlZFJlYWRlciBlcnIgPSBuZXcgVGhyZWFkZWRSZWFkZXIocHJvYy5nZXRFcnJvclN0cmVhbSgpLCBlcnJvckJ1ZmZlcik7Ci0KLSAgICAgICAgICAgIHByb2Mud2FpdEZvcigpOwotCi0gICAgICAgICAgICBpZiAodmVyYm9zZSB8fCBwcm9jLmV4aXRWYWx1ZSgpICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG91dHB1dEJ1ZmZlci5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG91dHB1dEJ1ZmZlci50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5mbHVzaCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoZXJyb3JCdWZmZXIubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbihlcnJvckJ1ZmZlci50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5mbHVzaCgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChwcm9jLmV4aXRWYWx1ZSgpICE9IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoVGhyb3dhYmxlIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIExvb2sgZm9yIHRvb2wgaW4gY3VycmVudCBkaXJlY3RvcnkgYW5kICR7SkFWQV9IT01FfS8uLi9iaW4gYW5kCi0gICAgICogdHJ5IHdpdGggLmV4ZSBmaWxlIGV4dGVuc2lvbi4KLSAgICAgKi8gCi0gICAgcHJpdmF0ZSBzdGF0aWMgRmlsZSBmaW5kSmF2YVRvb2woU3RyaW5nIHRvb2wpCi0gICAgewotICAgICAgICBGaWxlIHRvb2xGaWxlID0gbmV3IEZpbGUodG9vbCk7Ci0gICAgICAgIGlmICh0b29sRmlsZS5pc0ZpbGUoKSkgewotICAgICAgICAgICAgcmV0dXJuIHRvb2xGaWxlOwotICAgICAgICB9Ci0KLSAgICAgICAgRmlsZSByZXN1bHQgPSBuZXcgRmlsZSh0b29sICsgIi5leGUiKTsKLSAgICAgICAgaWYgKHJlc3VsdC5pc0ZpbGUoKSkgewotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3RyaW5nIGhvbWUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEuaG9tZSIpOwotCi0gICAgICAgIFN0cmluZyBzZXAgID0gRmlsZS5zZXBhcmF0b3I7Ci0gICAgICAgIHJlc3VsdCA9IG5ldyBGaWxlKGhvbWUgKyBzZXAgKyAiLi4iICsgc2VwICsgImJpbiIsIHRvb2wpOwotICAgICAgICAKLSAgICAgICAgaWYgKHJlc3VsdC5pc0ZpbGUoKSkgewotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmVzdWx0ID0gbmV3IEZpbGUocmVzdWx0LmdldFBhdGgoKSArICIuZXhlIik7Ci0gICAgICAgIGlmIChyZXN1bHQuaXNGaWxlKCkpIHsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQgPSBuZXcgRmlsZShob21lICsgc2VwICsgImJpbiIsIHRvb2wpOwotICAgICAgICBpZiAocmVzdWx0LmlzRmlsZSgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgcmVzdWx0ID0gbmV3IEZpbGUocmVzdWx0LmdldFBhdGgoKSArICIuZXhlIik7Ci0gICAgICAgIGlmIChyZXN1bHQuaXNGaWxlKCkpIHsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBqdXN0IHJldHVybiB0aGUgb3JpZ2luYWwgdG9vbEZpbGUgYW5kIGhvcGUgdGhhdCBpdCBpcyBvbiB0aGUgUEFUSC4KLSAgICAgICAgcmV0dXJuIHRvb2xGaWxlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlYWRzIHRoZSBnaXZlbiBpbnB1dCBzdHJlYW0gaW50byB0aGUgZ2l2ZW4gYnVmZmVyIHVudGlsIHRoZXJlIGlzCi0gICAgICogbm90aGluZyBsZWZ0IHRvIHJlYWQuCi0gICAgICovCi0gICAgc3RhdGljIHByaXZhdGUgY2xhc3MgVGhyZWFkZWRSZWFkZXIKLSAgICB7Ci0gICAgICAgIHB1YmxpYyBUaHJlYWRlZFJlYWRlcihJbnB1dFN0cmVhbSBzdHJlYW0sIGZpbmFsIFN0cmluZ0J1ZmZlciBvdXRwdXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZpbmFsIEJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9Ci0gICAgICAgICAgICAgICAgbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihzdHJlYW0pKTsKLQotICAgICAgICAgICAgVGhyZWFkIHJlYWRlclRocmVhZCA9IG5ldyBUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgczsKLSAgICAgICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgocyA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQocyArICJcbiIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgICAgICAge30KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJlYWRlclRocmVhZC5zdGFydCgpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbGNvbXAvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3Rvb2wvQ29tbWFuZExpbmUuamF2YSBiL3YyL3NyYy94bWxjb21wL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC90b29sL0NvbW1hbmRMaW5lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlMmFlMzcuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbGNvbXAvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3Rvb2wvQ29tbWFuZExpbmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC50b29sOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5JT1V0aWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlRmlsdGVyOwotaW1wb3J0IGphdmEubmV0LlVSSTsKLQotcHVibGljIGNsYXNzIENvbW1hbmRMaW5lCi17Ci0gICAgcHVibGljIENvbW1hbmRMaW5lKFN0cmluZ1tdIGFyZ3MsIENvbGxlY3Rpb24gc2NoZW1lKQotICAgIHsKLSAgICAgICAgX29wdGlvbnMgPSBuZXcgTGlua2VkSGFzaE1hcCgpOwotICAgICAgICBBcnJheUxpc3QgZW5kYXJncyA9IG5ldyBBcnJheUxpc3QoKTsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChhcmdzW2ldLmluZGV4T2YoJy0nKSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBvcHQgPSBhcmdzW2ldLnN1YnN0cmluZygxKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgdmFsID0gbnVsbDsKLSAgICAgICAgICAgICAgICBpZiAoc2NoZW1lICE9IG51bGwgJiYgc2NoZW1lLmNvbnRhaW5zKG9wdCkgJiYgaSA8IGFyZ3MubGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICB2YWwgPSBhcmdzWysraV07Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB2YWwgPSAiIjsKLQotICAgICAgICAgICAgICAgIF9vcHRpb25zLnB1dChvcHQsIHZhbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZW5kYXJncy5hZGQoYXJnc1tpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBfYXJncyA9IChTdHJpbmdbXSllbmRhcmdzLnRvQXJyYXkobmV3IFN0cmluZ1tlbmRhcmdzLnNpemUoKV0pOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRMaWNlbnNlKCkKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBJT1V0aWwuY29weUNvbXBsZXRlbHkoQ29tbWFuZExpbmUuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCJsaWNlbnNlLnR4dCIpLCBTeXN0ZW0ub3V0KTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTGljZW5zZSBhdmFpbGFibGUgaW4gdGhpcyBKQVIgaW4gbGljZW5zZS50eHQiKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgTWFwIF9vcHRpb25zOwotICAgIHByaXZhdGUgU3RyaW5nW10gX2FyZ3M7Ci0KLSAgICBwdWJsaWMgU3RyaW5nW10gYXJncygpCi0gICAgewotICAgICAgICBTdHJpbmdbXSByZXN1bHQgPSBuZXcgU3RyaW5nW19hcmdzLmxlbmd0aF07Ci0gICAgICAgIFN5c3RlbS5hcnJheWNvcHkoX2FyZ3MsIDAsIHJlc3VsdCwgMCwgX2FyZ3MubGVuZ3RoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldE9wdChTdHJpbmcgb3B0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIChTdHJpbmcpX29wdGlvbnMuZ2V0KG9wdCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgTGlzdCBjb2xsZWN0RmlsZXMoRmlsZVtdIGRpcnMpCi0gICAgewotICAgICAgICBMaXN0IGZpbGVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRpcnMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZpbGUgZiA9IGRpcnNbaV07Ci0gICAgICAgICAgICBpZiAoIWYuaXNEaXJlY3RvcnkoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmaWxlcy5hZGQoZik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmlsZXMuYWRkQWxsKGNvbGxlY3RGaWxlcyhmLmxpc3RGaWxlcygpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZpbGVzOwotICAgIH0KLQotICAgIHByaXZhdGUgTGlzdCBfZmlsZXM7Ci0gICAgcHJpdmF0ZSBGaWxlIF9iYXNlRGlyOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIEZpbGVbXSBFTVBUWV9GSUxFQVJSQVkgPSBuZXcgRmlsZVswXTsKLQotICAgIHByaXZhdGUgTGlzdCBnZXRGaWxlTGlzdCgpCi0gICAgewotICAgICAgICBpZiAoX2ZpbGVzID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZ1tdIGFyZ3MgPSBhcmdzKCk7Ci0gICAgICAgICAgICBGaWxlW10gZmlsZXMgPSBuZXcgRmlsZVthcmdzLmxlbmd0aF07Ci0gICAgICAgICAgICBib29sZWFuIG5vQmFzZURpciA9IGZhbHNlOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZpbGVzW2ldID0gbmV3IEZpbGUoYXJnc1tpXSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFub0Jhc2VEaXIgJiYgKF9iYXNlRGlyID09IG51bGwpKSAKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmaWxlc1tpXS5pc0RpcmVjdG9yeSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgX2Jhc2VEaXIgPSBmaWxlc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgX2Jhc2VEaXIgPSBmaWxlc1tpXS5nZXRQYXJlbnRGaWxlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFVSSSBjdXJyVXJpID0gZmlsZXNbaV0udG9VUkkoKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIEdpdmUgdXAgb24gdGhlIGJhc2VkaXIuIFRoZXJlIG1heSBiZSBub25lCi0gICAgICAgICAgICAgICAgICAgIGlmIChfYmFzZURpciAhPSBudWxsICYmIF9iYXNlRGlyLnRvVVJJKCkucmVsYXRpdml6ZShjdXJyVXJpKS5lcXVhbHMoY3VyclVyaSkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIF9iYXNlRGlyID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vQmFzZURpciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBfZmlsZXMgPSBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KGNvbGxlY3RGaWxlcyhmaWxlcykpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBfZmlsZXM7Ci0gICAgfQotCi0gICAgcHVibGljIEZpbGVbXSBnZXRGaWxlcygpCi0gICAgewotICAgICAgICByZXR1cm4gKEZpbGVbXSlnZXRGaWxlTGlzdCgpLnRvQXJyYXkoRU1QVFlfRklMRUFSUkFZKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRmlsZSBnZXRCYXNlRGlyKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfYmFzZURpcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRmlsZVtdIGZpbGVzRW5kaW5nV2l0aChTdHJpbmcgZXh0KQotICAgIHsKLSAgICAgICAgTGlzdCByZXN1bHQgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGdldEZpbGVMaXN0KCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgRmlsZSBmID0gKEZpbGUpaS5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAoZi5nZXROYW1lKCkuZW5kc1dpdGgoZXh0KSkKLSAgICAgICAgICAgICAgICByZXN1bHQuYWRkKGYpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAoRmlsZVtdKXJlc3VsdC50b0FycmF5KEVNUFRZX0ZJTEVBUlJBWSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbGNvbXAvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3Rvb2wvRXh0ZW5zaW9uLmphdmEgYi92Mi9zcmMveG1sY29tcC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdG9vbC9FeHRlbnNpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWE1ZmMxOS4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1sY29tcC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdG9vbC9FeHRlbnNpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC50b29sOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLQotCi0gLyoqCi0gICogQW4gZXh0ZW5zaW9uIGlzIGEgamF2YWJlYW4gdGhhdCByZXByZXNlbnRzIGEgU2NoZW1hQ29tcGlsZXJFeHRlbnNpb24gdG8gYmUgcGFzc2VkIGZvciBjYWxsYmFjayBpbnRvIHRoZQotICAqICBYbWxCZWFucyBTY2hlbWEgQ29tcGlsZXIuCi0gICovCi1wdWJsaWMgY2xhc3MgRXh0ZW5zaW9uIHsKLSAgICAgICAgcHJpdmF0ZSBDbGFzcyBjbGFzc05hbWU7Ci0gICAgICAgIHByaXZhdGUgTGlzdCBwYXJhbXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICAgICAgcHVibGljIENsYXNzIGdldENsYXNzTmFtZSgpIHsKLSAgICAgICAgICAgIHJldHVybiBjbGFzc05hbWU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRDbGFzc05hbWUoQ2xhc3MgY2xhc3NOYW1lKSB7Ci0gICAgICAgICAgICB0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKLSAgICAgICAgfQotICAgICAgICBwdWJsaWMgTGlzdCBnZXRQYXJhbXMoKSB7Ci0gICAgICAgICAgICByZXR1cm4gcGFyYW1zOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFBhcmFtIGNyZWF0ZVBhcmFtKCkgewotICAgICAgICAgICAgUGFyYW0gcCA9IG5ldyBQYXJhbSgpOwotICAgICAgICAgICAgcGFyYW1zLmFkZChwKTsKLSAgICAgICAgICAgIHJldHVybiBwOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIEEgUGFyYW0gaXMganVzdCBhIG5hbWUgdmFsdWUgcGFpciBhcHBsaWNhYmxlIHRvIHRoZSBleHRlbnNpb24uCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgY2xhc3MgUGFyYW0gewotICAgICAgICAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKLSAgICAgICAgICAgIHByaXZhdGUgU3RyaW5nIHZhbHVlOwotCi0gICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlKCkgewotICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIHZvaWQgc2V0VmFsdWUoU3RyaW5nIHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxjb21wL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC90b29sL0ZhY3RvckltcG9ydHMuamF2YSBiL3YyL3NyYy94bWxjb21wL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC90b29sL0ZhY3RvckltcG9ydHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQwMjBlZS4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1sY29tcC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdG9vbC9GYWN0b3JJbXBvcnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NzYgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudG9vbDsKLQotaW1wb3J0IG9yZy53My54MjAwMS54bWxTY2hlbWEuU2NoZW1hRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczLngyMDAxLnhtbFNjaGVtYS5Ub3BMZXZlbENvbXBsZXhUeXBlOwotaW1wb3J0IG9yZy53My54MjAwMS54bWxTY2hlbWEuVG9wTGV2ZWxTaW1wbGVUeXBlOwotaW1wb3J0IG9yZy53My54MjAwMS54bWxTY2hlbWEuVG9wTGV2ZWxFbGVtZW50OwotaW1wb3J0IG9yZy53My54MjAwMS54bWxTY2hlbWEuVG9wTGV2ZWxBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLnczLngyMDAxLnhtbFNjaGVtYS5OYW1lZEdyb3VwOwotaW1wb3J0IG9yZy53My54MjAwMS54bWxTY2hlbWEuTmFtZWRBdHRyaWJ1dGVHcm91cDsKLWltcG9ydCBvcmcudzMueDIwMDEueG1sU2NoZW1hLkZvcm1DaG9pY2U7Ci1pbXBvcnQgb3JnLnczLngyMDAxLnhtbFNjaGVtYS5JbmNsdWRlRG9jdW1lbnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJJOwotaW1wb3J0IGphdmEubmV0LlVSSVN5bnRheEV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9uczsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLS8qKgotICogVGhpcyBwcm9ncmFtIHRha2VzIGEgY29sbGVjdGlvbiBvZiAueHNkIGZpbGVzIGFzIGlucHV0LCBmaW5kcyBhbGwgZHVwbGljYXRlCi0gKiBuYW1lIGRlZmluaXRpb25zLCBhbmQgZmFjdG9ycyBvdXQgdGhlIGZpcnN0IGluc3RhbmNlIG9mIGVhY2ggb2YgdGhvc2UgaW50bwotICogYSBjb21tb24ueHNkIGZpbGUsIGFkZGluZyBhbiBhcHByb3ByaWF0ZSA8aW1wb3J0PiBzdGF0ZW1lbnQgaW4gdGhlIG9yaWdpbmFsCi0gKiB4c2QgZmlsZS4KLSAqLyAKLXB1YmxpYyBjbGFzcyBGYWN0b3JJbXBvcnRzCi17Ci0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgQ29tbWFuZExpbmUgY2wgPSBuZXcgQ29tbWFuZExpbmUoYXJncywgQXJyYXlzLmFzTGlzdChuZXcgU3RyaW5nW10geyJpbXBvcnQiLCAib3V0In0pKTsKLSAgICAgICAgaWYgKGNsLmdldE9wdCgibGljZW5zZSIpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENvbW1hbmRMaW5lLnByaW50TGljZW5zZSgpOwotICAgICAgICAgICAgU3lzdGVtLmV4aXQoMCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhcmdzID0gY2wuYXJncygpOwotICAgICAgICBpZiAoYXJncy5sZW5ndGggIT0gMSkKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZWZhY3RvcnMgYSBkaXJlY3Rvcnkgb2YgLnhzZCBmaWxlcyB0byByZW1vdmUgbmFtZSBjb25mbGljdHMiKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVXNhZ2U6Iik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInNmYWN0b3IgWy1pbXBvcnQgY29tbW9uLnhzZF0gWy1vdXQgb3V0cHV0ZGlyXSBpbnB1dGRpciIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgd2hlcmUgaW5wdXRkaXIgaXMgYSBkaXJlY3RvcnkgY29udGFpbmluZyAueHNkIGZpbGVzIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBhbmQgb3V0cHV0ZGlyIGlzIGEgZGlyZWN0b3J5IGludG8gd2hpY2ggbmV3IHhzZCBmaWxlcywiKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIHBsdXMgYSBjb21tb25seSBpbXBvcnRlZCBjb21tb24ueHNkLCBpcyBwbGFjZWQuIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAtbGljZW5zZSBwcmludHMgbGljZW5zZSBpbmZvcm1hdGlvbiIpOwotICAgICAgICAgICAgU3lzdGVtLmV4aXQoMCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBjb21tb25OYW1lID0gY2wuZ2V0T3B0KCJpbXBvcnQiKTsKLSAgICAgICAgaWYgKGNvbW1vbk5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgIGNvbW1vbk5hbWUgPSAiY29tbW9uLnhzZCI7Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcgb3V0ID0gY2wuZ2V0T3B0KCJvdXQiKTsKLSAgICAgICAgaWYgKG91dCA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVzaW5nIG91dHB1dCBkaXJlY3RvcnkgJ291dCciKTsKLSAgICAgICAgICAgIG91dCA9ICJvdXQiOwotICAgICAgICB9Ci0gICAgICAgIEZpbGUgb3V0ZGlyID0gbmV3IEZpbGUob3V0KTsKLSAgICAgICAgRmlsZSBiYXNlZGlyID0gbmV3IEZpbGUoYXJnc1swXSk7Ci0gICAgICAgIAotICAgICAgICAvLyBmaXJzdCwgcGFyc2UgYWxsIHRoZSBzY2hlbWEgZmlsZXMKLSAgICAgICAgRmlsZVtdIGZpbGVzID0gY2wuZ2V0RmlsZXMoKTsKLSAgICAgICAgTWFwIHNjaGVtYURvY3MgPSBuZXcgSGFzaE1hcCgpOwotICAgICAgICBTZXQgZWxlbWVudE5hbWVzID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgU2V0IGF0dHJpYnV0ZU5hbWVzID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgU2V0IHR5cGVOYW1lcyA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICAgIFNldCBtb2RlbEdyb3VwTmFtZXMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICBTZXQgYXR0ckdyb3VwTmFtZXMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICAKLSAgICAgICAgU2V0IGR1cGVFbGVtZW50TmFtZXMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICBTZXQgZHVwZUF0dHJpYnV0ZU5hbWVzID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgU2V0IGR1cGVUeXBlTmFtZXMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICBTZXQgZHVwZU1vZGVsR3JvdXBOYW1lcyA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICAgIFNldCBkdXBlQXR0ckdyb3VwTmFtZXMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICBTZXQgZHVwZU5hbWVzcGFjZXMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gbG9hZCBzY2hlbWEKLSAgICAgICAgICAgICAgICBTY2hlbWFEb2N1bWVudCBkb2MgPSBTY2hlbWFEb2N1bWVudC5GYWN0b3J5LnBhcnNlKGZpbGVzW2ldKTsKLSAgICAgICAgICAgICAgICBzY2hlbWFEb2NzLnB1dChkb2MsIGZpbGVzW2ldKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyB3YXJuIGFib3V0IGZvciBpbXBvcnRzLCBpbmNsdWRlcwotICAgICAgICAgICAgICAgIGlmIChkb2MuZ2V0U2NoZW1hKCkuc2l6ZU9mSW1wb3J0QXJyYXkoKSA+IDAgfHwgZG9jLmdldFNjaGVtYSgpLnNpemVPZkluY2x1ZGVBcnJheSgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ3YXJuaW5nOiAiICsgZmlsZXNbaV0gKyAiIGNvbnRhaW5zIGltcG9ydHMgb3IgaW5jbHVkZXMgdGhhdCBhcmUgYmVpbmcgaWdub3JlZC4iKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBjb2xsZWN0IHRvZ2V0aGVyIG5hbWVzCi0gICAgICAgICAgICAgICAgU3RyaW5nIHRhcmdldE5hbWVzcGFjZSA9IGRvYy5nZXRTY2hlbWEoKS5nZXRUYXJnZXROYW1lc3BhY2UoKTsKLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0TmFtZXNwYWNlID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZSA9ICIiOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFRvcExldmVsQ29tcGxleFR5cGUgY3RbXSA9IGRvYy5nZXRTY2hlbWEoKS5nZXRDb21wbGV4VHlwZUFycmF5KCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjdC5sZW5ndGg7IGorKykKLSAgICAgICAgICAgICAgICAgICAgbm90ZU5hbWUoY3Rbal0uZ2V0TmFtZSgpLCB0YXJnZXROYW1lc3BhY2UsIHR5cGVOYW1lcywgZHVwZVR5cGVOYW1lcywgZHVwZU5hbWVzcGFjZXMpOwotCi0gICAgICAgICAgICAgICAgVG9wTGV2ZWxTaW1wbGVUeXBlIHN0W10gPSBkb2MuZ2V0U2NoZW1hKCkuZ2V0U2ltcGxlVHlwZUFycmF5KCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzdC5sZW5ndGg7IGorKykKLSAgICAgICAgICAgICAgICAgICAgbm90ZU5hbWUoc3Rbal0uZ2V0TmFtZSgpLCB0YXJnZXROYW1lc3BhY2UsIHR5cGVOYW1lcywgZHVwZVR5cGVOYW1lcywgZHVwZU5hbWVzcGFjZXMpOwotCi0gICAgICAgICAgICAgICAgVG9wTGV2ZWxFbGVtZW50IGVsW10gPSBkb2MuZ2V0U2NoZW1hKCkuZ2V0RWxlbWVudEFycmF5KCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBlbC5sZW5ndGg7IGorKykKLSAgICAgICAgICAgICAgICAgICAgbm90ZU5hbWUoZWxbal0uZ2V0TmFtZSgpLCB0YXJnZXROYW1lc3BhY2UsIGVsZW1lbnROYW1lcywgZHVwZUVsZW1lbnROYW1lcywgZHVwZU5hbWVzcGFjZXMpOwotCi0gICAgICAgICAgICAgICAgVG9wTGV2ZWxBdHRyaWJ1dGUgYXRbXSA9IGRvYy5nZXRTY2hlbWEoKS5nZXRBdHRyaWJ1dGVBcnJheSgpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgYXQubGVuZ3RoOyBqKyspCi0gICAgICAgICAgICAgICAgICAgIG5vdGVOYW1lKGF0W2pdLmdldE5hbWUoKSwgdGFyZ2V0TmFtZXNwYWNlLCBhdHRyaWJ1dGVOYW1lcywgZHVwZUF0dHJpYnV0ZU5hbWVzLCBkdXBlTmFtZXNwYWNlcyk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTmFtZWRHcm91cCBncltdID0gZG9jLmdldFNjaGVtYSgpLmdldEdyb3VwQXJyYXkoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGdyLmxlbmd0aDsgaisrKQotICAgICAgICAgICAgICAgICAgICBub3RlTmFtZShncltqXS5nZXROYW1lKCksIHRhcmdldE5hbWVzcGFjZSwgbW9kZWxHcm91cE5hbWVzLCBkdXBlTW9kZWxHcm91cE5hbWVzLCBkdXBlTmFtZXNwYWNlcyk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTmFtZWRBdHRyaWJ1dGVHcm91cCBhZ1tdID0gZG9jLmdldFNjaGVtYSgpLmdldEF0dHJpYnV0ZUdyb3VwQXJyYXkoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFnLmxlbmd0aDsgaisrKQotICAgICAgICAgICAgICAgICAgICBub3RlTmFtZShhZ1tqXS5nZXROYW1lKCksIHRhcmdldE5hbWVzcGFjZSwgYXR0ckdyb3VwTmFtZXMsIGR1cGVBdHRyR3JvdXBOYW1lcywgZHVwZU5hbWVzcGFjZXMpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFhtbEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigid2FybmluZzogIiArIGZpbGVzW2ldICsgIiBpcyBub3QgYSBzY2hlbWEgZmlsZSAtICIgKyBlLmdldEVycm9yKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVuYWJsZSB0byBsb2FkICIgKyBmaWxlc1tpXSArICIgLSAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHNjaGVtYURvY3Muc2l6ZSgpID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gc2NoZW1hIGZpbGVzIGZvdW5kLiIpOwotICAgICAgICAgICAgU3lzdGVtLmV4aXQoMCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChkdXBlVHlwZU5hbWVzLnNpemUoKSArIGR1cGVFbGVtZW50TmFtZXMuc2l6ZSgpICsgZHVwZUF0dHJpYnV0ZU5hbWVzLnNpemUoKSArCi0gICAgICAgICAgICAgICAgZHVwZU1vZGVsR3JvdXBOYW1lcy5zaXplKCkgKyBkdXBlQXR0ckdyb3VwTmFtZXMuc2l6ZSgpID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm8gZHVwbGljYXRlIG5hbWVzIGZvdW5kLiIpOwotICAgICAgICAgICAgU3lzdGVtLmV4aXQoMCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIGNyZWF0ZSBhIHNjaGVtYSBkb2MgZm9yIGVhY2ggbmFtZXNwYWNlIHRvIGJlIGltcG9ydGVkCi0gICAgICAgIE1hcCBjb21tb25Eb2NzID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgTWFwIGNvbW1vbkZpbGVzID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgaW50IGNvdW50ID0gZHVwZU5hbWVzcGFjZXMuc2l6ZSgpID09IDEgPyAwIDogMTsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gZHVwZU5hbWVzcGFjZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIG5hbWVzcGFjZSA9IChTdHJpbmcpaS5uZXh0KCk7Ci0gICAgICAgICAgICBTY2hlbWFEb2N1bWVudCBjb21tb25Eb2MgPSBTY2hlbWFEb2N1bWVudC5GYWN0b3J5LnBhcnNlKAotICAgICAgICAgICAgICAgICAgICAiPHhzOnNjaGVtYSB4bWxuczp4cz0naHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEnLz4iCi0gICAgICAgICAgICApOwotICAgICAgICAgICAgaWYgKG5hbWVzcGFjZS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICAgICAgY29tbW9uRG9jLmdldFNjaGVtYSgpLnNldFRhcmdldE5hbWVzcGFjZShuYW1lc3BhY2UpOwotICAgICAgICAgICAgY29tbW9uRG9jLmdldFNjaGVtYSgpLnNldEVsZW1lbnRGb3JtRGVmYXVsdChGb3JtQ2hvaWNlLlFVQUxJRklFRCk7Ci0gICAgICAgICAgICBjb21tb25Eb2NzLnB1dChuYW1lc3BhY2UsIGNvbW1vbkRvYyk7Ci0gICAgICAgICAgICBjb21tb25GaWxlcy5wdXQoY29tbW9uRG9jLCBjb21tb25GaWxlRm9yKGNvbW1vbk5hbWUsIG5hbWVzcGFjZSwgY291bnQrKywgb3V0ZGlyKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIHB1bGwgb3V0IGFsbCB0aGUgZHVwbGljYXRlIGRlZmluaXRpb25zIGFuZCBkcm9wIHRoZW0gaW50byB0aGUgZmlsZQotICAgICAgICAvLyB3ZSByZXVzZSB0aGUgZWxlbWVudE5hbWVzIChldGMpIHNldHMgdG8ga2VlcCB0cmFjayBvZiB3aGljaCBkZWZpbml0aW9ucwotICAgICAgICAvLyB3ZSBoYXZlIGFscmVhZHkgaW5zZXJ0ZWQuCi0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IHNjaGVtYURvY3Mua2V5U2V0KCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgU2NoZW1hRG9jdW1lbnQgZG9jID0gKFNjaGVtYURvY3VtZW50KWkubmV4dCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBjb2xsZWN0IHRvZ2V0aGVyIG5hbWVzCi0gICAgICAgICAgICBTdHJpbmcgdGFyZ2V0TmFtZXNwYWNlID0gZG9jLmdldFNjaGVtYSgpLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgICAgICAgaWYgKHRhcmdldE5hbWVzcGFjZSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZSA9ICIiOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBTY2hlbWFEb2N1bWVudCBjb21tb25Eb2MgPSAoU2NoZW1hRG9jdW1lbnQpY29tbW9uRG9jcy5nZXQodGFyZ2V0TmFtZXNwYWNlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYm9vbGVhbiBuZWVkSW1wb3J0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBUb3BMZXZlbENvbXBsZXhUeXBlIGN0W10gPSBkb2MuZ2V0U2NoZW1hKCkuZ2V0Q29tcGxleFR5cGVBcnJheSgpOwotICAgICAgICAgICAgZm9yIChpbnQgaiA9IGN0Lmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghaXNEdXBsaWNhdGUoY3Rbal0uZ2V0TmFtZSgpLCB0YXJnZXROYW1lc3BhY2UsIGR1cGVUeXBlTmFtZXMpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAoaXNGaXJzdER1cGxpY2F0ZShjdFtqXS5nZXROYW1lKCksIHRhcmdldE5hbWVzcGFjZSwgdHlwZU5hbWVzLCBkdXBlVHlwZU5hbWVzKSkKLSAgICAgICAgICAgICAgICAgICAgY29tbW9uRG9jLmdldFNjaGVtYSgpLmFkZE5ld0NvbXBsZXhUeXBlKCkuc2V0KGN0W2pdKTsKLSAgICAgICAgICAgICAgICBuZWVkSW1wb3J0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBkb2MuZ2V0U2NoZW1hKCkucmVtb3ZlQ29tcGxleFR5cGUoaik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFRvcExldmVsU2ltcGxlVHlwZSBzdFtdID0gZG9jLmdldFNjaGVtYSgpLmdldFNpbXBsZVR5cGVBcnJheSgpOwotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzdC5sZW5ndGg7IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWlzRHVwbGljYXRlKHN0W2pdLmdldE5hbWUoKSwgdGFyZ2V0TmFtZXNwYWNlLCBkdXBlVHlwZU5hbWVzKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKGlzRmlyc3REdXBsaWNhdGUoc3Rbal0uZ2V0TmFtZSgpLCB0YXJnZXROYW1lc3BhY2UsIHR5cGVOYW1lcywgZHVwZVR5cGVOYW1lcykpCi0gICAgICAgICAgICAgICAgICAgIGNvbW1vbkRvYy5nZXRTY2hlbWEoKS5hZGROZXdTaW1wbGVUeXBlKCkuc2V0KHN0W2pdKTsKLSAgICAgICAgICAgICAgICBuZWVkSW1wb3J0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBkb2MuZ2V0U2NoZW1hKCkucmVtb3ZlU2ltcGxlVHlwZShqKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgVG9wTGV2ZWxFbGVtZW50IGVsW10gPSBkb2MuZ2V0U2NoZW1hKCkuZ2V0RWxlbWVudEFycmF5KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGVsLmxlbmd0aDsgaisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghaXNEdXBsaWNhdGUoZWxbal0uZ2V0TmFtZSgpLCB0YXJnZXROYW1lc3BhY2UsIGR1cGVFbGVtZW50TmFtZXMpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAoaXNGaXJzdER1cGxpY2F0ZShlbFtqXS5nZXROYW1lKCksIHRhcmdldE5hbWVzcGFjZSwgZWxlbWVudE5hbWVzLCBkdXBlRWxlbWVudE5hbWVzKSkKLSAgICAgICAgICAgICAgICAgICAgY29tbW9uRG9jLmdldFNjaGVtYSgpLmFkZE5ld0VsZW1lbnQoKS5zZXQoZWxbal0pOwotICAgICAgICAgICAgICAgIG5lZWRJbXBvcnQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGRvYy5nZXRTY2hlbWEoKS5yZW1vdmVFbGVtZW50KGopOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBUb3BMZXZlbEF0dHJpYnV0ZSBhdFtdID0gZG9jLmdldFNjaGVtYSgpLmdldEF0dHJpYnV0ZUFycmF5KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGF0Lmxlbmd0aDsgaisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghaXNEdXBsaWNhdGUoYXRbal0uZ2V0TmFtZSgpLCB0YXJnZXROYW1lc3BhY2UsIGR1cGVBdHRyaWJ1dGVOYW1lcykpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmIChpc0ZpcnN0RHVwbGljYXRlKGF0W2pdLmdldE5hbWUoKSwgdGFyZ2V0TmFtZXNwYWNlLCBhdHRyaWJ1dGVOYW1lcywgZHVwZUF0dHJpYnV0ZU5hbWVzKSkKLSAgICAgICAgICAgICAgICAgICAgY29tbW9uRG9jLmdldFNjaGVtYSgpLmFkZE5ld0VsZW1lbnQoKS5zZXQoYXRbal0pOwotICAgICAgICAgICAgICAgIG5lZWRJbXBvcnQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGRvYy5nZXRTY2hlbWEoKS5yZW1vdmVFbGVtZW50KGopOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBOYW1lZEdyb3VwIGdyW10gPSBkb2MuZ2V0U2NoZW1hKCkuZ2V0R3JvdXBBcnJheSgpOwotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBnci5sZW5ndGg7IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWlzRHVwbGljYXRlKGdyW2pdLmdldE5hbWUoKSwgdGFyZ2V0TmFtZXNwYWNlLCBkdXBlTW9kZWxHcm91cE5hbWVzKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKGlzRmlyc3REdXBsaWNhdGUoZ3Jbal0uZ2V0TmFtZSgpLCB0YXJnZXROYW1lc3BhY2UsIG1vZGVsR3JvdXBOYW1lcywgZHVwZU1vZGVsR3JvdXBOYW1lcykpCi0gICAgICAgICAgICAgICAgICAgIGNvbW1vbkRvYy5nZXRTY2hlbWEoKS5hZGROZXdFbGVtZW50KCkuc2V0KGdyW2pdKTsKLSAgICAgICAgICAgICAgICBuZWVkSW1wb3J0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBkb2MuZ2V0U2NoZW1hKCkucmVtb3ZlRWxlbWVudChqKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5hbWVkQXR0cmlidXRlR3JvdXAgYWdbXSA9IGRvYy5nZXRTY2hlbWEoKS5nZXRBdHRyaWJ1dGVHcm91cEFycmF5KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFnLmxlbmd0aDsgaisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghaXNEdXBsaWNhdGUoYWdbal0uZ2V0TmFtZSgpLCB0YXJnZXROYW1lc3BhY2UsIGR1cGVBdHRyR3JvdXBOYW1lcykpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmIChpc0ZpcnN0RHVwbGljYXRlKGFnW2pdLmdldE5hbWUoKSwgdGFyZ2V0TmFtZXNwYWNlLCBhdHRyR3JvdXBOYW1lcywgZHVwZUF0dHJHcm91cE5hbWVzKSkKLSAgICAgICAgICAgICAgICAgICAgY29tbW9uRG9jLmdldFNjaGVtYSgpLmFkZE5ld0VsZW1lbnQoKS5zZXQoYWdbal0pOwotICAgICAgICAgICAgICAgIG5lZWRJbXBvcnQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGRvYy5nZXRTY2hlbWEoKS5yZW1vdmVFbGVtZW50KGopOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobmVlZEltcG9ydCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBJbmNsdWRlRG9jdW1lbnQuSW5jbHVkZSBuZXdJbmNsdWRlID0gZG9jLmdldFNjaGVtYSgpLmFkZE5ld0luY2x1ZGUoKTsKLSAgICAgICAgICAgICAgICBGaWxlIGlucHV0RmlsZSA9IChGaWxlKXNjaGVtYURvY3MuZ2V0KGRvYyk7Ci0gICAgICAgICAgICAgICAgRmlsZSBvdXRwdXRGaWxlID0gb3V0cHV0RmlsZUZvcihpbnB1dEZpbGUsIGJhc2VkaXIsIG91dGRpcik7Ci0gICAgICAgICAgICAgICAgRmlsZSBjb21tb25GaWxlID0gKEZpbGUpY29tbW9uRmlsZXMuZ2V0KGNvbW1vbkRvYyk7Ci0gICAgICAgICAgICAgICAgaWYgKHRhcmdldE5hbWVzcGFjZSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICBuZXdJbmNsdWRlLnNldFNjaGVtYUxvY2F0aW9uKHJlbGF0aXZlVVJJRm9yKG91dHB1dEZpbGUsIGNvbW1vbkZpbGUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gbWFrZSB0aGUgZGlyZWN0b3J5IGZvciBvdXRwdXQKLSAgICAgICAgaWYgKCFvdXRkaXIuaXNEaXJlY3RvcnkoKSAmJiAhb3V0ZGlyLm1rZGlycygpKQotICAgICAgICB7Ci0gICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlVuYWJsZSB0byBtYWtlZGlyICIgKyBvdXRkaXIpOwotICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIG5vdyB3cml0ZSBhbGwgdGhvc2UgZG9jcyBiYWNrIG91dC4KLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gc2NoZW1hRG9jcy5rZXlTZXQoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICB7Ci0gICAgICAgICAgICBTY2hlbWFEb2N1bWVudCBkb2MgPSAoU2NoZW1hRG9jdW1lbnQpaS5uZXh0KCk7Ci0gICAgICAgICAgICBGaWxlIGlucHV0RmlsZSA9IChGaWxlKXNjaGVtYURvY3MuZ2V0KGRvYyk7Ci0gICAgICAgICAgICBGaWxlIG91dHB1dEZpbGUgPSBvdXRwdXRGaWxlRm9yKGlucHV0RmlsZSwgYmFzZWRpciwgb3V0ZGlyKTsKLSAgICAgICAgICAgIGlmIChvdXRwdXRGaWxlID09IG51bGwpCi0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYW5ub3QgY29weSAiICsgaW5wdXRGaWxlKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBkb2Muc2F2ZShvdXRwdXRGaWxlLCBuZXcgWG1sT3B0aW9ucygpLnNldFNhdmVQcmV0dHlQcmludCgpLnNldFNhdmVBZ2dyZXNpdmVOYW1lc3BhY2VzKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBjb21tb25GaWxlcy5rZXlTZXQoKS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICB7Ci0gICAgICAgICAgICBTY2hlbWFEb2N1bWVudCBkb2MgPSAoU2NoZW1hRG9jdW1lbnQpaS5uZXh0KCk7Ci0gICAgICAgICAgICBGaWxlIG91dHB1dEZpbGUgPSAoRmlsZSljb21tb25GaWxlcy5nZXQoZG9jKTsKLSAgICAgICAgICAgIGRvYy5zYXZlKG91dHB1dEZpbGUsIG5ldyBYbWxPcHRpb25zKCkuc2V0U2F2ZVByZXR0eVByaW50KCkuc2V0U2F2ZUFnZ3Jlc2l2ZU5hbWVzcGFjZXMoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIEZpbGUgb3V0cHV0RmlsZUZvcihGaWxlIGZpbGUsIEZpbGUgYmFzZURpciwgRmlsZSBvdXRkaXIpCi0gICAgewotICAgICAgICBVUkkgYmFzZSA9IGJhc2VEaXIuZ2V0QWJzb2x1dGVGaWxlKCkudG9VUkkoKTsKLSAgICAgICAgVVJJIGFicyA9IGZpbGUuZ2V0QWJzb2x1dGVGaWxlKCkudG9VUkkoKTsKLSAgICAgICAgVVJJIHJlbCA9IGJhc2UucmVsYXRpdml6ZShhYnMpOwotICAgICAgICBpZiAocmVsLmlzQWJzb2x1dGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDYW5ub3QgcmVsYXRpdml6ZSAiICsgZmlsZSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgVVJJIG91dGJhc2UgPSBvdXRkaXIudG9VUkkoKTsKLSAgICAgICAgVVJJIG91dCA9IENvZGVHZW5VdGlsLnJlc29sdmUob3V0YmFzZSwgcmVsKTsKLSAgICAgICAgcmV0dXJuIG5ldyBGaWxlKG91dCk7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIFVSSSBjb21tb25BbmNlc3RvcihVUkkgZmlyc3QsIFVSSSBzZWNvbmQpCi0gICAgewotICAgICAgICBTdHJpbmcgZmlyc3RTdHIgPSBmaXJzdC50b1N0cmluZygpOwotICAgICAgICBTdHJpbmcgc2Vjb25kU3RyID0gc2Vjb25kLnRvU3RyaW5nKCk7Ci0gICAgICAgIGludCBsZW4gPSBmaXJzdFN0ci5sZW5ndGgoKTsKLSAgICAgICAgaWYgKHNlY29uZFN0ci5sZW5ndGgoKSA8IGxlbikKLSAgICAgICAgICAgIGxlbiA9IHNlY29uZFN0ci5sZW5ndGgoKTsKLSAgICAgICAgaW50IGk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGZpcnN0U3RyLmNoYXJBdChpKSAhPSBzZWNvbmRTdHIuY2hhckF0KGkpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGkgLT0gMTsKLSAgICAgICAgaWYgKGkgPj0gMCkKLSAgICAgICAgICAgIGkgPSBmaXJzdFN0ci5sYXN0SW5kZXhPZignLycsIGkpOwotICAgICAgICBpZiAoaSA8IDApCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgVVJJKGZpcnN0U3RyLnN1YnN0cmluZygwLCBpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFVSSVN5bnRheEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcmVsYXRpdmVVUklGb3IoRmlsZSBzb3VyY2UsIEZpbGUgdGFyZ2V0KQotICAgIHsKLSAgICAgICAgVVJJIGJhc2UgPSBzb3VyY2UuZ2V0QWJzb2x1dGVGaWxlKCkudG9VUkkoKTsKLSAgICAgICAgVVJJIGFicyA9IHRhcmdldC5nZXRBYnNvbHV0ZUZpbGUoKS50b1VSSSgpOwotICAgICAgICAvLyBmaW5kIGNvbW1vbiBzdWJzdHJpbmcuLi4KLSAgICAgICAgVVJJIGNvbW1vbkJhc2UgPSBjb21tb25BbmNlc3RvcihiYXNlLCBhYnMpOwotICAgICAgICBpZiAoY29tbW9uQmFzZSA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIGFicy50b1N0cmluZygpOwotICAgICAgICAKLSAgICAgICAgVVJJIGJhc2VyZWwgPSBjb21tb25CYXNlLnJlbGF0aXZpemUoYmFzZSk7Ci0gICAgICAgIFVSSSB0YXJnZXRyZWwgPSBjb21tb25CYXNlLnJlbGF0aXZpemUoYWJzKTsKLSAgICAgICAgaWYgKGJhc2VyZWwuaXNBYnNvbHV0ZSgpIHx8IHRhcmdldHJlbC5pc0Fic29sdXRlKCkpCi0gICAgICAgICAgICByZXR1cm4gYWJzLnRvU3RyaW5nKCk7Ci0gICAgICAgIFN0cmluZyBwcmVmaXggPSAiIjsKLSAgICAgICAgU3RyaW5nIHNvdXJjZVJlbCA9IGJhc2VyZWwudG9TdHJpbmcoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzb3VyY2VSZWwubGVuZ3RoKCk7KQotICAgICAgICB7Ci0gICAgICAgICAgICBpID0gc291cmNlUmVsLmluZGV4T2YoJy8nLCBpKTsKLSAgICAgICAgICAgIGlmIChpIDwgMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHByZWZpeCArPSAiLi4vIjsKLSAgICAgICAgICAgIGkgKz0gMTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcHJlZml4ICsgdGFyZ2V0cmVsLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIEZpbGUgY29tbW9uRmlsZUZvcihTdHJpbmcgY29tbW9uTmFtZSwgU3RyaW5nIG5hbWVzcGFjZSwgaW50IGksIEZpbGUgb3V0ZGlyKQotICAgIHsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBjb21tb25OYW1lOwotICAgICAgICBpZiAoaSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBpbmRleCA9IGNvbW1vbk5hbWUubGFzdEluZGV4T2YoJy4nKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA8IDApCi0gICAgICAgICAgICAgICAgaW5kZXggPSBjb21tb25OYW1lLmxlbmd0aCgpOwotICAgICAgICAgICAgbmFtZSA9IGNvbW1vbk5hbWUuc3Vic3RyaW5nKDAsIGluZGV4KSArIGkgKyBjb21tb25OYW1lLnN1YnN0cmluZyhpbmRleCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyBGaWxlKG91dGRpciwgbmFtZSk7Ci0gICAgfQotICAgIAotICAgIAotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgbm90ZU5hbWUoU3RyaW5nIG5hbWUsIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsIFNldCBzZWVuLCBTZXQgZHVwZXMsIFNldCBkdXBlTmFtZXNwYWNlcykKLSAgICB7Ci0gICAgICAgIGlmIChuYW1lID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFFOYW1lIHFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgbmFtZSk7Ci0gICAgICAgIGlmIChzZWVuLmNvbnRhaW5zKHFOYW1lKSkKLSAgICAgICAgewotICAgICAgICAgICAgZHVwZXMuYWRkKHFOYW1lKTsKLSAgICAgICAgICAgIGR1cGVOYW1lc3BhY2VzLmFkZCh0YXJnZXROYW1lc3BhY2UpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNlZW4uYWRkKHFOYW1lKTsKLSAgICAgICAgCi0gICAgfQotICAgICAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzRmlyc3REdXBsaWNhdGUoU3RyaW5nIG5hbWUsIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsIFNldCBub3RzZWVuLCBTZXQgZHVwZXMpCi0gICAgewotICAgICAgICBpZiAobmFtZSA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBRTmFtZSBxTmFtZSA9IG5ldyBRTmFtZSh0YXJnZXROYW1lc3BhY2UsIG5hbWUpOwotICAgICAgICBpZiAoZHVwZXMuY29udGFpbnMocU5hbWUpICYmIG5vdHNlZW4uY29udGFpbnMocU5hbWUpKQotICAgICAgICB7Ci0gICAgICAgICAgICBub3RzZWVuLnJlbW92ZShxTmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNEdXBsaWNhdGUoU3RyaW5nIG5hbWUsIFN0cmluZyB0YXJnZXROYW1lc3BhY2UsIFNldCBkdXBlcykKLSAgICB7Ci0gICAgICAgIGlmIChuYW1lID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFFOYW1lIHFOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwgbmFtZSk7Ci0gICAgICAgIHJldHVybiAoZHVwZXMuY29udGFpbnMocU5hbWUpKTsKLSAgICB9Ci0gICAgICAgIAotICAgIAotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbGNvbXAvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3Rvb2wvSW5zdGFuY2VWYWxpZGF0b3IuamF2YSBiL3YyL3NyYy94bWxjb21wL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC90b29sL0luc3RhbmNlVmFsaWRhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZmI0ZDAuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbGNvbXAvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3Rvb2wvSW5zdGFuY2VWYWxpZGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC50b29sOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxCZWFuczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLQotcHVibGljIGNsYXNzIEluc3RhbmNlVmFsaWRhdG9yCi17Ci0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgICB7Ci0gICAgICAgIENvbW1hbmRMaW5lIGNsID0gbmV3IENvbW1hbmRMaW5lKGFyZ3MsIENvbGxlY3Rpb25zLkVNUFRZX1NFVCk7Ci0gICAgICAgIGlmIChjbC5nZXRPcHQoImxpY2Vuc2UiKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBDb21tYW5kTGluZS5wcmludExpY2Vuc2UoKTsKLSAgICAgICAgICAgIFN5c3RlbS5leGl0KDApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjbC5hcmdzKCkubGVuZ3RoID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVmFsaWRhdGVzIGEgc2NoZW1hIGRlZmludGlvbiBhbmQgaW5zdGFuY2VzIHdpdGhpbiB0aGUgc2NoZW1hLiIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVc2FnZTogdmFsaWRhdGUgW3N3aXRjaGVzXSBzY2hlbWEueHNkIGluc3RhbmNlLnhtbCIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTd2l0Y2hlczoiKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgIC1kbCAgICBlbmFibGUgbmV0d29yayBkb3dubG9hZHMgZm9yIGltcG9ydHMgYW5kIGluY2x1ZGVzIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAtbm9wdnIgZGlzYWJsZSBwYXJ0aWNsZSB2YWxpZCAocmVzdHJpY3Rpb24pIHJ1bGUiKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgIC1ub3VwYSBkaWFibGUgdW5pcXVlIHBhcnRpY2xlIGF0dHJpYnV0ZWlvbiBydWxlIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAtbGljZW5zZSBwcmludHMgbGljZW5zZSBpbmZvcm1hdGlvbiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBib29sZWFuIGRsID0gKGNsLmdldE9wdCgiZGwiKSAhPSBudWxsKTsKLSAgICAgICAgYm9vbGVhbiBub3B2ciA9IChjbC5nZXRPcHQoIm5vcHZyIikgIT0gbnVsbCk7Ci0gICAgICAgIGJvb2xlYW4gbm91cGEgPSAoY2wuZ2V0T3B0KCJub3VwYSIpICE9IG51bGwpOwotICAgICAgICAKLSAgICAgICAgRmlsZVtdIHNjaGVtYUZpbGVzID0gY2wuZmlsZXNFbmRpbmdXaXRoKCIueHNkIik7Ci0gICAgICAgIEZpbGVbXSBpbnN0YW5jZUZpbGVzID0gY2wuZmlsZXNFbmRpbmdXaXRoKCIueG1sIik7Ci0gICAgICAgIAotICAgICAgICBMaXN0IHNkb2NzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2NoZW1hRmlsZXMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNkb2NzLmFkZCgKLSAgICAgICAgICAgICAgICAgICAgWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoCi0gICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFGaWxlc1tpXSwgKG5ldyBYbWxPcHRpb25zKCkpLnNldExvYWRMaW5lTnVtYmVycygpLnNldExvYWRNZXNzYWdlRGlnZXN0KCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIHNjaGVtYUZpbGVzW2ldICsgIiBub3QgbG9hZGFibGU6ICIgKyBlICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBYbWxPYmplY3RbXSBzY2hlbWFzID0gKFhtbE9iamVjdFtdKXNkb2NzLnRvQXJyYXkobmV3IFhtbE9iamVjdFswXSk7Ci0KLSAgICAgICAgU2NoZW1hVHlwZUxvYWRlciBzTG9hZGVyOwotICAgICAgICBDb2xsZWN0aW9uIGNvbXBFcnJvcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIFhtbE9wdGlvbnMgc2NoZW1hT3B0aW9ucyA9IG5ldyBYbWxPcHRpb25zKCk7Ci0gICAgICAgIHNjaGVtYU9wdGlvbnMuc2V0RXJyb3JMaXN0ZW5lcihjb21wRXJyb3JzKTsKLSAgICAgICAgaWYgKGRsKQotICAgICAgICAgICAgc2NoZW1hT3B0aW9ucy5zZXRDb21waWxlRG93bmxvYWRVcmxzKCk7Ci0gICAgICAgIGlmIChub3B2cikKLSAgICAgICAgICAgIHNjaGVtYU9wdGlvbnMuc2V0Q29tcGlsZU5vUHZyUnVsZSgpOwotICAgICAgICBpZiAobm91cGEpCi0gICAgICAgICAgICBzY2hlbWFPcHRpb25zLnNldENvbXBpbGVOb1VwYVJ1bGUoKTsKLSAgICAgICAgCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBzTG9hZGVyID0gWG1sQmVhbnMubG9hZFhzZChzY2hlbWFzLCBzY2hlbWFPcHRpb25zKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjb21wRXJyb3JzLmlzRW1wdHkoKSB8fCAhKGUgaW5zdGFuY2VvZiBYbWxFeGNlcHRpb24pKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKFN5c3RlbS5lcnIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTY2hlbWEgaW52YWxpZCIpOwotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpID0gY29tcEVycm9ycy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpLm5leHQoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFuY2VGaWxlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgWG1sT2JqZWN0IHhvYmo7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHhvYmogPQotICAgICAgICAgICAgICAgICAgICBzTG9hZGVyLnBhcnNlKCBpbnN0YW5jZUZpbGVzW2ldLCBudWxsLCAobmV3IFhtbE9wdGlvbnMoKSkuc2V0TG9hZExpbmVOdW1iZXJzKCkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oaW5zdGFuY2VGaWxlc1tpXSArICIgbm90IGxvYWRhYmxlOiAiICsgZSk7Ci0gICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoU3lzdGVtLmVycik7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIENvbGxlY3Rpb24gZXJyb3JzID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgICAgICAgICBpZiAoeG9iai5zY2hlbWFUeXBlKCkgPT0gWG1sT2JqZWN0LnR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGluc3RhbmNlRmlsZXNbaV0gKyAiIE5PVCB2YWxpZC4gICIpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICBEb2N1bWVudCB0eXBlIG5vdCBmb3VuZC4iICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh4b2JqLnZhbGlkYXRlKG5ldyBYbWxPcHRpb25zKCkuc2V0RXJyb3JMaXN0ZW5lcihlcnJvcnMpKSkKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaW5zdGFuY2VGaWxlc1tpXSArICIgdmFsaWQuIik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGluc3RhbmNlRmlsZXNbaV0gKyAiIE5PVCB2YWxpZC4iKTsKLSAgICAgICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gZXJyb3JzLml0ZXJhdG9yKCk7IGl0Lmhhc05leHQoKTsgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGl0Lm5leHQoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbGNvbXAvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3Rvb2wvUHJldHR5UHJpbnRlci5qYXZhIGIvdjIvc3JjL3htbGNvbXAvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3Rvb2wvUHJldHR5UHJpbnRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjM5OGZhLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxjb21wL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC90b29sL1ByZXR0eVByaW50ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyMCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC50b29sOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgUHJldHR5UHJpbnRlcgotewotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gICAgewotICAgICAgICBDb21tYW5kTGluZSBjbCA9IG5ldyBDb21tYW5kTGluZShhcmdzLCBDb2xsZWN0aW9ucy5zaW5nbGV0b24oImluZGVudCIpKTsKLSAgICAgICAgaWYgKGNsLmdldE9wdCgibGljZW5zZSIpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENvbW1hbmRMaW5lLnByaW50TGljZW5zZSgpOwotICAgICAgICAgICAgU3lzdGVtLmV4aXQoMCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChjbC5hcmdzKCkubGVuZ3RoID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUHJldHR5IHByaW50cyBYTUwgZmlsZXMuIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVzYWdlOiB4cHJldHR5IFtzd2l0Y2hlc10gZmlsZS54bWwiKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3dpdGNoZXM6Iik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAtaW5kZW50ICMgICB1c2UgdGhlIGdpdmVuIGluZGVudCIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgLWxpY2Vuc2UgcHJpbnRzIGxpY2Vuc2UgaW5mb3JtYXRpb24iKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3RyaW5nIGluZGVudFN0ciA9IGNsLmdldE9wdCgiaW5kZW50Iik7Ci0gICAgICAgIGludCBpbmRlbnQ7Ci0gICAgICAgIGlmIChpbmRlbnRTdHIgPT0gbnVsbCkKLSAgICAgICAgICAgIGluZGVudCA9IDI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGluZGVudCA9IEludGVnZXIucGFyc2VJbnQoaW5kZW50U3RyKTsKLSAgICAgICAgCi0gICAgICAgIEZpbGVbXSBmaWxlcyA9IGNsLmdldEZpbGVzKCk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxPYmplY3QgZG9jOwotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZG9jID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoZmlsZXNbaV0sIChuZXcgWG1sT3B0aW9ucygpKS5zZXRMb2FkTGluZU51bWJlcnMoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKGZpbGVzW2ldICsgIiBub3QgbG9hZGFibGU6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRvYy5zYXZlKFN5c3RlbS5vdXQsIG5ldyBYbWxPcHRpb25zKCkuc2V0U2F2ZVByZXR0eVByaW50KCkuc2V0U2F2ZVByZXR0eVByaW50SW5kZW50KGluZGVudCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJVbmFibGUgdG8gcHJldHR5IHByaW50ICIgKyBmaWxlc1tpXSArICI6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1sY29tcC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdG9vbC9SdW5YUXVlcnkuamF2YSBiL3YyL3NyYy94bWxjb21wL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC90b29sL1J1blhRdWVyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTNmNDlkLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxjb21wL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC90b29sL1J1blhRdWVyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQ3ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnRvb2w7Ci0KLWltcG9ydCBqYXZhLmlvLio7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy4qOwotCi1wdWJsaWMgY2xhc3MgUnVuWFF1ZXJ5Ci17Ci0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKCBTdHJpbmdbXSBhcmdzICkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgQ29tbWFuZExpbmUgY2wgPQotICAgICAgICAgICAgbmV3IENvbW1hbmRMaW5lKAotICAgICAgICAgICAgICAgIGFyZ3MsCi0gICAgICAgICAgICAgICAgQXJyYXlzLmFzTGlzdCggbmV3IFN0cmluZ1tdIHsgInEiLCAicWYiIH0gKSApOwotICAgICAgICAKLSAgICAgICAgaWYgKGNsLmdldE9wdCgibGljZW5zZSIpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENvbW1hbmRMaW5lLnByaW50TGljZW5zZSgpOwotICAgICAgICAgICAgU3lzdGVtLmV4aXQoMCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhcmdzID0gY2wuYXJncygpOwotICAgICAgICAKLSAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUnVuIGFuIFhRdWVyeSBhZ2FpbnN0IGFuIFhNTCBpbnN0YW5jZSIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVc2FnZToiKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigieHF1ZXJ5IFstdmVyYm9zZV0gWy1wcmV0dHldIFstcSA8cXVlcnk+IHwgLXFmIHF1ZXJ5LnhxXSBbZmlsZS54bWxdKiIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgLXEgPHF1ZXJ5PiB0byBzcGVjaWZ5IGEgcXVlcnkgb24gdGhlIGNvbW1hbmQtbGluZSIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgLXFmIDxxdWVyeT4gdG8gc3BlY2lmeSBhIGZpbGUgY29udGFpbmluZyBhIHF1ZXJ5Iik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAtcHJldHR5IHByZXR0eS1wcmludHMgdGhlIHJlc3VsdHMiKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIC1saWNlbnNlIHByaW50cyBsaWNlbnNlIGluZm9ybWF0aW9uIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiB0aGUgcXVlcnkgaXMgcnVuIG9uIGVhY2ggWE1MIGZpbGUgc3BlY2lmaWVkIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiIpOwotICAgICAgICAgICAgU3lzdGVtLmV4aXQoMCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBib29sZWFuIHZlcmJvc2UgPSBjbC5nZXRPcHQoICJ2ZXJib3NlIiApICE9IG51bGw7Ci0gICAgICAgIGJvb2xlYW4gcHJldHR5ID0gY2wuZ2V0T3B0KCAicHJldHR5IiApICE9IG51bGw7Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gR2V0IGFuZCBjb21waWxlIHRoZSBxdWVyeQotICAgICAgICAvLwotICAgICAgICAKLSAgICAgICAgU3RyaW5nIHF1ZXJ5ID0gY2wuZ2V0T3B0KCAicSIgKTsKLSAgICAgICAgU3RyaW5nIHF1ZXJ5ZmlsZSA9IGNsLmdldE9wdCggInFmIiApOwotCi0gICAgICAgIGlmIChxdWVyeSA9PSBudWxsICYmIHF1ZXJ5ZmlsZSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oICJObyBxdWVyeSBzcGVjaWZpZWQiICk7Ci0gICAgICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHF1ZXJ5ICE9IG51bGwgJiYgcXVlcnlmaWxlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiggIlNwZWNpZnkgLXFmIG9yIC1xLCBub3QgYm90aC4iICk7Ci0gICAgICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChxdWVyeWZpbGUgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBGaWxlIHF1ZXJ5RmlsZSA9IG5ldyBGaWxlKCBxdWVyeWZpbGUgKTsKLSAgICAgICAgICAgICAgICBGaWxlSW5wdXRTdHJlYW0gaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKCBxdWVyeUZpbGUgKTsKLSAgICAgICAgICAgICAgICBJbnB1dFN0cmVhbVJlYWRlciByID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKCBpcyApOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQotICAgICAgICAgICAgICAgIGZvciAoIDsgOyApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbnQgY2ggPSByLnJlYWQoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCAoY2hhcikgY2ggKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgaXMuY2xvc2UoKTsKLQotICAgICAgICAgICAgICAgIHF1ZXJ5ID0gc2IudG9TdHJpbmcoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoIFRocm93YWJsZSBlICkKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiQ2Fubm90IHJlYWQgcXVlcnkgZmlsZTogIiArIGUuZ2V0TWVzc2FnZSgpICk7Ci0gICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJDb21waWxlIFF1ZXJ5OiIgKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggcXVlcnkgKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHF1ZXJ5PSBYbWxCZWFucy5jb21waWxlUXVlcnkoIHF1ZXJ5ICk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKCBFeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiggIkVycm9yIGNvbXBpbGluZyBxdWVyeTogIiArIGUuZ2V0TWVzc2FnZSgpICk7Ci0gICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEdldCB0aGUgaW5zdGFuY2UKLSAgICAgICAgLy8KLSAgICAgICAgCi0gICAgICAgIEZpbGVbXSBmaWxlcyA9IGNsLmdldEZpbGVzKCk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxPYmplY3QgeDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKCBmaWxlc1tpXSApOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoIDsgOyApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBjaCA9IGlzLnJlYWQoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC53cml0ZSggY2ggKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaXMuY2xvc2UoKTsKLQotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCBmaWxlc1tpXSApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKCBUaHJvd2FibGUgZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiRXJyb3IgcGFyc2luZyBpbnN0YW5jZTogIiArIGUuZ2V0TWVzc2FnZSgpICk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJFeGVjdXRpbmcgUXVlcnkuLi4iICk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCk7Ci0gICAgICAgICAgICB9Ci0gICAgCi0gICAgICAgICAgICBYbWxPYmplY3RbXSByZXN1bHQgPSBudWxsOwotICAgIAotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0geC5leGVjUXVlcnkoIHF1ZXJ5ICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoIFRocm93YWJsZSBlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oICJFcnJvciBleGVjdXRpbmcgcXVlcnk6ICIgKyBlLmdldE1lc3NhZ2UoKSApOwotICAgICAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIlF1ZXJ5IFJlc3VsdDoiICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFhtbE9wdGlvbnMgb3B0cyA9IG5ldyBYbWxPcHRpb25zKCk7Ci0gICAgICAgICAgICBvcHRzLnNldFNhdmVPdXRlcigpOwotICAgICAgICAgICAgaWYgKHByZXR0eSkKLSAgICAgICAgICAgICAgICBvcHRzLnNldFNhdmVQcmV0dHlQcmludCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJlc3VsdC5sZW5ndGg7IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHRbal0uc2F2ZSggU3lzdGVtLm91dCwgb3B0cyApOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxjb21wL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC90b29sL1NjaGVtYUNvZGVHZW5lcmF0b3IuamF2YSBiL3YyL3NyYy94bWxjb21wL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC90b29sL1NjaGVtYUNvZGVHZW5lcmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVkNDRmZC4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1sY29tcC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdG9vbC9TY2hlbWFDb2RlR2VuZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NDkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudG9vbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVN5c3RlbTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5YbWxFcnJvcldhdGNoZXI7Ci0KLWltcG9ydCBqYXZhLmlvLio7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnNjaGVtYS5TY2hlbWFUeXBlQ29kZVByaW50ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5JT1V0aWw7Ci0KLWltcG9ydCByZXBhY2thZ2UuUmVwYWNrYWdlcjsKLQotcHVibGljIGNsYXNzIFNjaGVtYUNvZGVHZW5lcmF0b3IKLXsKLSAgICAvLyBpbnB1dCBkaXJlY3RvcnksIG91dHB1dCBkaXIgZmlsZW5hbWUKLSAgICAvLyB0b2RvOiBvdXRwdXQgamFyCi0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIGNvbXBpbGVUeXBlU3lzdGVtKFNjaGVtYVR5cGVTeXN0ZW0gc2F2ZXIsIEZpbGUgc291cmNlZGlyLCBGaWxlW10gamF2YXNyYywgTWFwIHNvdXJjZXNUb0NvcHlNYXAsIEZpbGVbXSBjbGFzc3BhdGgsIEZpbGUgY2xhc3Nlc2RpciwgRmlsZSBvdXRwdXRKYXIsIGJvb2xlYW4gbm9qYXZhYywgYm9vbGVhbiBqYXhiLCBYbWxFcnJvcldhdGNoZXIgZXJyb3JzLCBTdHJpbmcgcmVwYWNrYWdlLCBib29sZWFuIHZlcmJvc2UsIExpc3Qgc291cmNlZmlsZXMgKQotICAgIHsKLQotICAgICAgICBpZiAoc291cmNlZGlyID09IG51bGwgfHwgY2xhc3Nlc2RpciA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiU291cmNlIGFuZCBjbGFzcyBnZW4gZGlyIG11c3Qgbm90IGJlIG51bGwuIik7Ci0KLSAgICAgICAgYm9vbGVhbiBmYWlsdXJlID0gZmFsc2U7Ci0KLSAgICAgICAgc2F2ZXIuc2F2ZVRvRGlyZWN0b3J5KGNsYXNzZXNkaXIpOwotCi0gICAgICAgIC8vIFNhdmUgdGhlIHNjaGVtYSBzb3VyY2VzIHRvIHRoZSBjbGFzc2VzIGRpcmVjdG9yeQotICAgICAgICBpZiAoKHNvdXJjZXNUb0NvcHlNYXAgIT0gbnVsbCkgJiYgKHNvdXJjZXNUb0NvcHlNYXAuc2l6ZSgpID4gMCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZpbGUgc2NoZW1hc2RpciA9IGNyZWF0ZURpcihjbGFzc2VzZGlyLCAic2NoZW1hL3NyYyIpOwotCi0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGl0ZXIgPSBzb3VyY2VzVG9Db3B5TWFwLmtleVNldCgpLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcga2V5ID0gKFN0cmluZylpdGVyLm5leHQoKTsKLQotICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoa2V5KTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHNjaGVtYWxvY2F0aW9uID0gKFN0cmluZylzb3VyY2VzVG9Db3B5TWFwLmdldChrZXkpOwotCi0gICAgICAgICAgICAgICAgICAgIEZpbGUgdGFyZ2V0RmlsZSA9IG5ldyBGaWxlKHNjaGVtYXNkaXIsIHNjaGVtYWxvY2F0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgRmlsZSBwYXJlbnREaXIgPSBuZXcgRmlsZSh0YXJnZXRGaWxlLmdldFBhcmVudCgpKTsKLSAgICAgICAgICAgICAgICAgICAgY3JlYXRlRGlyKHBhcmVudERpciwgbnVsbCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gQ29weSB0aGUgZmlsZSBmcm9tIGZpbGVwYXRoIHRvIHNjaGVtYS9zcmMvPHNjaGVtYUZpbGU+Ci0gICAgICAgICAgICAgICAgICAgIElucHV0U3RyZWFtIGluID0gdXJsLm9wZW5TdHJlYW0oKTsKLSAgICAgICAgICAgICAgICAgICAgRmlsZU91dHB1dFN0cmVhbSBvdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShuZXcgRmlsZShzY2hlbWFzZGlyLCBzY2hlbWFsb2NhdGlvbikpOwotICAgICAgICAgICAgICAgICAgICBJT1V0aWwuY29weUNvbXBsZXRlbHkoaW4sIG91dCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJJTyBFcnJvciAiICsgZSk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGZhaWx1cmUgPSB0cnVlOyAtIG5vdCBjYXVzZSBmb3IgZmFpbHVyZQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFJlcGFja2FnZXIgcmVwYWNrYWdlciA9IHJlcGFja2FnZSA9PSBudWxsID8gbnVsbCA6IG5ldyBSZXBhY2thZ2VyKCByZXBhY2thZ2UgKTsKLQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gU2NoZW1hVHlwZUNvZGVQcmludGVyLmluZGV4Q2xhc3NGb3JTeXN0ZW0oc2F2ZXIpLnJlcGxhY2UoJy4nLCBGaWxlLnNlcGFyYXRvckNoYXIpICsgIi5qYXZhIjsKLSAgICAgICAgICAgIEZpbGUgc291cmNlZmlsZSA9IG5ldyBGaWxlKHNvdXJjZWRpciwgZmlsZW5hbWUpOwotICAgICAgICAgICAgc291cmNlZmlsZS5nZXRQYXJlbnRGaWxlKCkubWtkaXJzKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFdyaXRlciB3cml0ZXIgPQotICAgICAgICAgICAgICAgIHJlcGFja2FnZXIgPT0gbnVsbAotICAgICAgICAgICAgICAgICAgICA/IChXcml0ZXIpIG5ldyBGaWxlV3JpdGVyKCBzb3VyY2VmaWxlICkKLSAgICAgICAgICAgICAgICAgICAgOiAoV3JpdGVyKSBuZXcgUmVwYWNrYWdpbmdXcml0ZXIoIHNvdXJjZWZpbGUsIHJlcGFja2FnZXIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIFNjaGVtYVR5cGVDb2RlUHJpbnRlci5wcmludExvYWRlcih3cml0ZXIsIHNhdmVyKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgd3JpdGVyLmNsb3NlKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNvdXJjZWZpbGVzLmFkZChzb3VyY2VmaWxlKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJJTyBFcnJvciAiICsgZSk7Ci0gICAgICAgICAgICBmYWlsdXJlID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghIGpheGIpCi0gICAgICAgICAgICBmYWlsdXJlICY9IGdlblR5cGVzKHNhdmVyLCBzb3VyY2VmaWxlcywgc291cmNlZGlyLCByZXBhY2thZ2VyLCB2ZXJib3NlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZmFpbHVyZSAmPSBqYXhiQ29kZUdlbmVyYXRvcihzYXZlciwgc291cmNlZmlsZXMsIHNvdXJjZWRpciwgY2xhc3Nlc2RpciwgZXJyb3JzKTsKLQotICAgICAgICBpZiAoZmFpbHVyZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGdlblR5cGVzKFNjaGVtYVR5cGVTeXN0ZW0gc2F2ZXIsIExpc3Qgc291cmNlZmlsZXMsIEZpbGUgc291cmNlZGlyLCBSZXBhY2thZ2VyIHJlcGFja2FnZXIsIGJvb2xlYW4gdmVyYm9zZSkKLSAgICB7Ci0gICAgICAgIGJvb2xlYW4gZmFpbHVyZSA9IGZhbHNlOwotCi0gICAgICAgIExpc3QgdHlwZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIHR5cGVzLmFkZEFsbChBcnJheXMuYXNMaXN0KHNhdmVyLmdsb2JhbFR5cGVzKCkpKTsKLSAgICAgICAgdHlwZXMuYWRkQWxsKEFycmF5cy5hc0xpc3Qoc2F2ZXIuZG9jdW1lbnRUeXBlcygpKSk7Ci0gICAgICAgIHR5cGVzLmFkZEFsbChBcnJheXMuYXNMaXN0KHNhdmVyLmF0dHJpYnV0ZVR5cGVzKCkpKTsKLQotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSB0eXBlcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICB7Ci0gICAgICAgICAgICBTY2hlbWFUeXBlIHR5cGUgPSAoU2NoZW1hVHlwZSlpLm5leHQoKTsKLSAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ29tcGlsaW5nIHR5cGUgIiArIHR5cGUpOwotICAgICAgICAgICAgaWYgKHR5cGUuaXNCdWlsdGluVHlwZSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKHR5cGUuZ2V0RnVsbEphdmFOYW1lKCkgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgU3RyaW5nIGZqbiA9IHR5cGUuZ2V0RnVsbEphdmFOYW1lKCk7Ci0KLSAgICAgICAgICAgIGlmIChmam4uaW5kZXhPZignJCcpID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmam4gPQotICAgICAgICAgICAgICAgICAgICBmam4uc3Vic3RyaW5nKCAwLCBmam4ubGFzdEluZGV4T2YoICcuJyApICkgKyAiLiIgKwotICAgICAgICAgICAgICAgICAgICAgICAgZmpuLnN1YnN0cmluZyggZmpuLmluZGV4T2YoICckJyApICsgMSApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSBmam4ucmVwbGFjZSgnLicsIEZpbGUuc2VwYXJhdG9yQ2hhcikgKyAiLmphdmEiOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBXcml0ZXIgd3JpdGVyID0gbnVsbDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRmlsZSBzb3VyY2VmaWxlID0gbmV3IEZpbGUoc291cmNlZGlyLCBmaWxlbmFtZSk7Ci0gICAgICAgICAgICAgICAgc291cmNlZmlsZS5nZXRQYXJlbnRGaWxlKCkubWtkaXJzKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiY3JlYXRlZCAiICsgc291cmNlZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSk7Ci0gICAgICAgICAgICAgICAgd3JpdGVyID0KLSAgICAgICAgICAgICAgICAgICAgcmVwYWNrYWdlciA9PSBudWxsCi0gICAgICAgICAgICAgICAgICAgICAgICA/IChXcml0ZXIpIG5ldyBGaWxlV3JpdGVyKCBzb3VyY2VmaWxlICkKLSAgICAgICAgICAgICAgICAgICAgICAgIDogKFdyaXRlcikgbmV3IFJlcGFja2FnaW5nV3JpdGVyKCBzb3VyY2VmaWxlLCByZXBhY2thZ2VyICk7Ci0gICAgICAgICAgICAgICAgCi0KLSAgICAgICAgICAgICAgICBTY2hlbWFUeXBlQ29kZVByaW50ZXIucHJpbnRUeXBlKHdyaXRlciwgdHlwZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgd3JpdGVyLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc291cmNlZmlsZXMuYWRkKHNvdXJjZWZpbGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJJTyBFcnJvciAiICsgZSk7Ci0gICAgICAgICAgICAgICAgZmFpbHVyZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICB0cnkgeyBpZiAod3JpdGVyICE9IG51bGwpIHdyaXRlci5jbG9zZSgpOyB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7fQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBJbXBsZW1lbnRhdGlvbiBjbGFzcwotICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gdHlwZS5nZXRGdWxsSmF2YUltcGxOYW1lKCkucmVwbGFjZSgnLicsIEZpbGUuc2VwYXJhdG9yQ2hhcikgKyAiLmphdmEiOwotICAgICAgICAgICAgICAgIEZpbGUgaW1wbEZpbGUgPSBuZXcgRmlsZShzb3VyY2VkaXIsICBmaWxlbmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiY3JlYXRlZCAiICsgaW1wbEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCkpOwotICAgICAgICAgICAgICAgIGltcGxGaWxlLmdldFBhcmVudEZpbGUoKS5ta2RpcnMoKTsKLQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHdyaXRlciA9Ci0gICAgICAgICAgICAgICAgICAgIHJlcGFja2FnZXIgPT0gbnVsbAotICAgICAgICAgICAgICAgICAgICAgICAgPyAoV3JpdGVyKSBuZXcgRmlsZVdyaXRlciggaW1wbEZpbGUgKQotICAgICAgICAgICAgICAgICAgICAgICAgOiAoV3JpdGVyKSBuZXcgUmVwYWNrYWdpbmdXcml0ZXIoIGltcGxGaWxlLCByZXBhY2thZ2VyICk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU2NoZW1hVHlwZUNvZGVQcmludGVyLnByaW50VHlwZUltcGwod3JpdGVyLCB0eXBlKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB3cml0ZXIuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzb3VyY2VmaWxlcy5hZGQoaW1wbEZpbGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJJTyBFcnJvciAiICsgZSk7Ci0gICAgICAgICAgICAgICAgZmFpbHVyZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbGx5IHsKLSAgICAgICAgICAgICAgICB0cnkgeyBpZiAod3JpdGVyICE9IG51bGwpIHdyaXRlci5jbG9zZSgpOyB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhaWx1cmU7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgSmF4YkNvZGVHZW5lcmF0b3JIb2xkZXIKLSAgICB7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE1ldGhvZCBfamF4YkNvZGVHZW5lcmF0b3JNZXRob2QgPSBidWlsZEpheGJDb2RlR2VuZXJhdG9yTWV0aG9kKCk7Ci0gICAgCi0gICAgICAgIHByaXZhdGUgc3RhdGljIE1ldGhvZCBidWlsZEpheGJDb2RlR2VuZXJhdG9yTWV0aG9kKCkKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENsYXNzLmZvck5hbWUoIm9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5qYXhiLmNvbXBpbGVyLkpheGJDb2RlR2VuZXJhdG9yIiwgZmFsc2UsIFNjaGVtYUNvZGVHZW5lcmF0b3IuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgLmdldE1ldGhvZCgiY29tcGlsZSIsIG5ldyBDbGFzc1tdIHtTY2hlbWFUeXBlU3lzdGVtLmNsYXNzLCBMaXN0LmNsYXNzLCBGaWxlLmNsYXNzLCBGaWxlLmNsYXNzLCBYbWxFcnJvcldhdGNoZXIuY2xhc3MgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUyID0gIG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNhbm5vdCBsb2FkIEpheGJDb2RlR2VuZXJhdG9yOiB2ZXJpZnkgdGhhdCB4YmVhbi5qYXIgaXMgb24gdGhlIGNsYXNzcGF0aCIpOwotICAgICAgICAgICAgICAgIGUyLmluaXRDYXVzZShlKTsKLSAgICAgICAgICAgICAgICB0aHJvdyBlMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gamF4YkNvZGVHZW5lcmF0b3IoU2NoZW1hVHlwZVN5c3RlbSBzYXZlciwgTGlzdCBzb3VyY2VmaWxlcywgRmlsZSBzb3VyY2VkaXIsIEZpbGUgY2xhc3Nlc2RpciwgWG1sRXJyb3JXYXRjaGVyIGVycm9ycykKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKChCb29sZWFuKUpheGJDb2RlR2VuZXJhdG9ySG9sZGVyLl9qYXhiQ29kZUdlbmVyYXRvck1ldGhvZC5pbnZva2UobnVsbCwgbmV3IE9iamVjdFtdIHsgc2F2ZXIsIHNvdXJjZWZpbGVzLCBzb3VyY2VkaXIsIGNsYXNzZXNkaXIsIGVycm9ycyB9KSkuYm9vbGVhblZhbHVlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUyID0gbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgICBlMi5pbml0Q2F1c2UoZSk7Ci0gICAgICAgICAgICB0aHJvdyBlMjsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZTIgPSBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgIGUyLmluaXRDYXVzZShlKTsKLSAgICAgICAgICAgIHRocm93IGUyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHN0YXRpYyBGaWxlIGNyZWF0ZURpcihGaWxlIHJvb3RkaXIsIFN0cmluZyBzdWJkaXIpCi0gICAgewotICAgICAgICBGaWxlIG5ld2RpciA9IChzdWJkaXIgPT0gbnVsbCkgPyByb290ZGlyIDogbmV3IEZpbGUocm9vdGRpciwgc3ViZGlyKTsKLSAgICAgICAgYm9vbGVhbiBjcmVhdGVkID0gKG5ld2Rpci5leGlzdHMoKSAmJiBuZXdkaXIuaXNEaXJlY3RvcnkoKSkgfHwgbmV3ZGlyLm1rZGlycygpOwotICAgICAgICBhc3NlcnQoY3JlYXRlZCkgOiAiQ291bGQgbm90IGNyZWF0ZSAiICsgbmV3ZGlyLmdldEFic29sdXRlUGF0aCgpOwotICAgICAgICByZXR1cm4gbmV3ZGlyOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBzdGF0aWMgRmlsZSBjcmVhdGVUZW1wRGlyKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBGaWxlIHRtcEZpbGUgPSBGaWxlLmNyZWF0ZVRlbXBGaWxlKCJ4YmVhbiIsIG51bGwpOwotICAgICAgICBTdHJpbmcgcGF0aCA9IHRtcEZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0gICAgICAgIGlmICghcGF0aC5lbmRzV2l0aCgiLnRtcCIpKQotICAgICAgICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJFcnJvcjogY3JlYXRlVGVtcEZpbGUgZGlkIG5vdCBjcmVhdGUgYSBmaWxlIGVuZGluZyB3aXRoIC50bXAiKTsKLSAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGVuZ3RoKCkgLSA0KTsKLSAgICAgICAgRmlsZSB0bXBTcmNEaXIgPSBudWxsOwotCi0gICAgICAgIGZvciAoaW50IGNvdW50ID0gMDsgY291bnQgPCAxMDA7IGNvdW50KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBuYW1lID0gcGF0aCArICIuZCIgKyAoY291bnQgPT0gMCA/ICIiIDogSW50ZWdlci50b1N0cmluZyhjb3VudCsrKSk7Ci0KLSAgICAgICAgICAgIHRtcFNyY0RpciA9IG5ldyBGaWxlKG5hbWUpOwotCi0gICAgICAgICAgICBpZiAoIXRtcFNyY0Rpci5leGlzdHMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sZWFuIGNyZWF0ZWQgPSB0bXBTcmNEaXIubWtkaXJzKCk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IGNyZWF0ZWQgOiAiQ291bGQgbm90IGNyZWF0ZSAiICsgdG1wU3JjRGlyLmdldEFic29sdXRlUGF0aCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHRtcEZpbGUuZGVsZXRlT25FeGl0KCk7Ci0KLSAgICAgICAgcmV0dXJuIHRtcFNyY0RpcjsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgc3RhdGljIHZvaWQgdHJ5SGFyZFRvRGVsZXRlKEZpbGUgZGlyKQotICAgIHsKLSAgICAgICAgdHJ5VG9EZWxldGUoZGlyKTsKLSAgICAgICAgaWYgKGRpci5leGlzdHMoKSkKLSAgICAgICAgICAgIHRyeVRvRGVsZXRlTGF0ZXIoZGlyKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHRyeVRvRGVsZXRlKEZpbGUgZGlyKQotICAgIHsKLSAgICAgICAgaWYgKGRpci5leGlzdHMoKSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGRpci5pc0RpcmVjdG9yeSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZ1tdIGxpc3QgPSBkaXIubGlzdCgpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgdHJ5VG9EZWxldGUobmV3IEZpbGUoZGlyLCBsaXN0W2ldKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWRpci5kZWxldGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47IC8vIGRvbid0IHRyeSB2ZXJ5IGhhcmQsIGJlY2F1c2Ugd2UncmUganVzdCBkZWxldGluZyB0bXAKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBTZXQgZGVsZXRlRmlsZVF1ZXVlID0gbmV3IEhhc2hTZXQoKTsKLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgdHJpZXNSZW1haW5pbmcgPSAwOwotICAgIAotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gdHJ5Tm93VGhhdEl0c0xhdGVyKCkKLSAgICB7Ci0gICAgICAgIExpc3QgZmlsZXM7Ci0gICAgICAgIAotICAgICAgICBzeW5jaHJvbml6ZWQgKGRlbGV0ZUZpbGVRdWV1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgZmlsZXMgPSBuZXcgQXJyYXlMaXN0KGRlbGV0ZUZpbGVRdWV1ZSk7Ci0gICAgICAgICAgICBkZWxldGVGaWxlUXVldWUuY2xlYXIoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTGlzdCByZXRyeSA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGZpbGVzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZpbGUgZmlsZSA9IChGaWxlKWkubmV4dCgpOwotICAgICAgICAgICAgdHJ5VG9EZWxldGUoZmlsZSk7Ci0gICAgICAgICAgICBpZiAoZmlsZS5leGlzdHMoKSkKLSAgICAgICAgICAgICAgICByZXRyeS5hZGQoZmlsZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN5bmNocm9uaXplZCAoZGVsZXRlRmlsZVF1ZXVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodHJpZXNSZW1haW5pbmcgPiAwKQotICAgICAgICAgICAgICAgIHRyaWVzUmVtYWluaW5nIC09IDE7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodHJpZXNSZW1haW5pbmcgPD0gMCB8fCByZXRyeS5zaXplKCkgPT0gMCkgLy8gZG9uZT8KLSAgICAgICAgICAgICAgICB0cmllc1JlbWFpbmluZyA9IDA7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZGVsZXRlRmlsZVF1ZXVlLmFkZEFsbChyZXRyeSk7IC8vIHRyeSBhZ2Fpbj8KLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuICh0cmllc1JlbWFpbmluZyA8PSAwKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGdpdmVVcCgpCi0gICAgewotICAgICAgICBzeW5jaHJvbml6ZWQgKGRlbGV0ZUZpbGVRdWV1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgZGVsZXRlRmlsZVF1ZXVlLmNsZWFyKCk7Ci0gICAgICAgICAgICB0cmllc1JlbWFpbmluZyA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB0cnlUb0RlbGV0ZUxhdGVyKEZpbGUgZGlyKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkIChkZWxldGVGaWxlUXVldWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlbGV0ZUZpbGVRdWV1ZS5hZGQoZGlyKTsKLSAgICAgICAgICAgIGlmICh0cmllc1JlbWFpbmluZyA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG5ldyBUaHJlYWQoKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVwZWF0cyB0cnlOb3cgdW50aWwgdHJpZXNSZW1haW5pbmcgPT0gMAotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7OykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cnlOb3dUaGF0SXRzTGF0ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gc3VjY2VlZGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcCgxMDAwICogMyk7IC8vIHdhaXQgdGhyZWUgc2Vjb25kcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmVVcCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHRyaWVzUmVtYWluaW5nIDwgMTApCi0gICAgICAgICAgICAgICAgdHJpZXNSZW1haW5pbmcgPSAxMDsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgY2xhc3MgUmVwYWNrYWdpbmdXcml0ZXIgZXh0ZW5kcyBTdHJpbmdXcml0ZXIKLSAgICB7Ci0gICAgICAgIHB1YmxpYyBSZXBhY2thZ2luZ1dyaXRlciAoIEZpbGUgZmlsZSwgUmVwYWNrYWdlciByZXBhY2thZ2VyICkKLSAgICAgICAgewotICAgICAgICAgICAgX2ZpbGUgPSBmaWxlOwotICAgICAgICAgICAgX3JlcGFja2FnZXIgPSByZXBhY2thZ2VyOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgY2xvc2UgKCApIHRocm93cyBJT0V4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBzdXBlci5jbG9zZSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBnZXRCdWZmZXIoKTsKLQotICAgICAgICAgICAgX3JlcGFja2FnZXIucmVwYWNrYWdlKCBzYiApOwotCi0gICAgICAgICAgICBGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoIF9maWxlICk7Ci0gICAgICAgICAgICBmdy53cml0ZSggc2IudG9TdHJpbmcoKSApOwotICAgICAgICAgICAgZncuY2xvc2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgRmlsZSBfZmlsZTsKLSAgICAgICAgcHJpdmF0ZSBSZXBhY2thZ2VyIF9yZXBhY2thZ2VyOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxjb21wL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC90b29sL1NjaGVtYUNvbXBpbGVyLmphdmEgYi92Mi9zcmMveG1sY29tcC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdG9vbC9TY2hlbWFDb21waWxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWMyODNiLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxjb21wL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC90b29sL1NjaGVtYUNvbXBpbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MzcgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudG9vbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zY2hlbWEuU2NoZW1hVHlwZVN5c3RlbUNvbXBpbGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zY2hlbWEuUGF0aFJlc291cmNlTG9hZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zY2hlbWEuUmVzb3VyY2VMb2FkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnNjaGVtYS5TdHNjU3RhdGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnNjaGVtYS5TY2hlbWFUeXBlTG9hZGVySW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlhtbEVycm9yUHJpbnRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlhtbEVycm9yV2F0Y2hlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlhtbEVycm9yQ29udGV4dDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLlhtbExpc3RJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVN5c3RlbTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxCZWFuczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TaW1wbGVWYWx1ZTsKLWltcG9ydCBjb20uYmVhLngyMDAyLngwOS54YmVhbi5jb25maWcuQ29uZmlnRG9jdW1lbnQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS51dGlsLio7Ci1pbXBvcnQgamF2YS5uZXQuVVJJOwotCi1pbXBvcnQgb3JnLnczLngyMDAxLnhtbFNjaGVtYS5TY2hlbWFEb2N1bWVudDsKLQotcHVibGljIGNsYXNzIFNjaGVtYUNvbXBpbGVyCi17Ci0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgICB7Ci0gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbXBpbGVzIGEgc2NoZW1hIGludG8gWE1MIEJlYW4gY2xhc3NlcyBhbmQgbWV0YWRhdGEuIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVzYWdlOiBzY29tcCBbb3B0c10gW2RpcnNdKiBbc2NoZW1hLnhzZF0qIFtzZXJ2aWNlLndzZGxdKiBbY29uZmlnLnhzZGNvbmZpZ10qIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk9wdGlvbnMgaW5jbHVkZToiKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgIC1jcCBbYTtiO2NdIC0gY2xhc3NwYXRoIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAtZCBbZGlyXSAtIHRhcmdldCBiaW5hcnkgZGlyZWN0b3J5IGZvciAuY2xhc3MgYW5kIC54c2IgZmlsZXMiKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgIC1zcmMgW2Rpcl0gLSB0YXJnZXQgZGlyZWN0b3J5IGZvciBnZW5lcmF0ZWQgLmphdmEgZmlsZXMiKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgIC1zcmNvbmx5IC0gZG8gbm90IGNvbXBpbGUgLmphdmEgZmlsZXMgb3IgamFyIHRoZSBvdXRwdXQuIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAtb3V0IFtyZXN1bHQuamFyXSAtIHRoZSBuYW1lIG9mIHRoZSBvdXRwdXQgamFyIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAtZGwgLSBwZXJtaXQgbmV0d29yayBkb3dubG9hZHMgZm9yIGltcG9ydHMgYW5kIGluY2x1ZGVzIChkZWZhdWx0IGlzIG9mZikiKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgIC1ub3VwYSAtIGRvIG5vdCBlbmZvcmNlIHRoZSB1bmlxdWUgcGFydGljbGUgYXR0cmlidXRpb24gcnVsZSIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgLW5vcHZyIC0gZG8gbm90IGVuZm9yY2UgdGhlIHBhcnRpY2xlIHZhbGlkIChyZXN0cmljdGlvbikgcnVsZSIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgLWNvbXBpbGVyIC0gcGF0aCB0byBleHRlcm5hbCBqYXZhIGNvbXBpbGVyIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAtamFyIC0gcGF0aCB0byBqYXIgdXRpbGl0eSIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgLW1zIC0gaW5pdGlhbCBtZW1vcnkgZm9yIGV4dGVybmFsIGphdmEgY29tcGlsZXIgKGRlZmF1bHQgJyIgKyBDb2RlR2VuVXRpbC5ERUZBVUxUX01FTV9TVEFSVCArICInKSIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgLW14IC0gbWF4aW11bSBtZW1vcnkgZm9yIGV4dGVybmFsIGphdmEgY29tcGlsZXIgKGRlZmF1bHQgJyIgKyBDb2RlR2VuVXRpbC5ERUZBVUxUX01FTV9NQVggKyAiJykiKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgIC1kZWJ1ZyAtIGNvbXBpbGUgd2l0aCBkZWJ1ZyBzeW1ib2xzIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAtcXVpZXQgLSBwcmludCBmZXdlciBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAtdmVyYm9zZSAtIHByaW50IG1vcmUgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgLWxpY2Vuc2UgLSBwcmludHMgbGljZW5zZSBpbmZvcm1hdGlvbiIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgLWFsbG93bWRlZiBcIltuc10gW25zXSBbbnNdXCIgLSBpZ25vcmVzIG11bHRpcGxlIGRlZnMgaW4gZ2l2ZW4gbmFtZXNwYWNlcyIpOwotICAgICAgICAgICAgLyogVW5kb2N1bWVudGVkIGZlYXR1cmUgLSBwYXNzIGluIG9uZSBzY2hlbWEgY29tcGlsZXIgZXh0ZW5zaW9uIGFuZCByZWxhdGVkIHBhcmFtZXRlcnMKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgIC1yZXBhY2thZ2UgLSByZXBhY2thZ2Ugc3BlY2lmaWNhdGlvbiIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICAgLWV4dGVuc2lvbiAtIHJlZ2lzdGVycyBhIHNjaGVtYSBjb21waWxlciBleHRlbnNpb24iKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgIC1leHRlbnNpb25QYXJtcyAtIHNwZWNpZnkgcGFyYW1ldGVycyBmb3IgdGhlIGNvbXBpbGVyIGV4dGVuc2lvbiIpOwotICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJZiB5b3UgcmVxdWlyZSBhIGRpZmZlcmVudCBqYXZhIGNvbXBpbGVyLCB1c2UgdGhlIFhNTEJlYW4gQW50IHRhc2sgaW5zdGVhZC4iKTsKLSAgICAgICAgICAgIFN5c3RlbS5leGl0KDApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgU2V0IG9wdHMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICBvcHRzLmFkZCgib3V0Iik7Ci0gICAgICAgIG9wdHMuYWRkKCJuYW1lIik7Ci0gICAgICAgIG9wdHMuYWRkKCJzcmMiKTsKLSAgICAgICAgb3B0cy5hZGQoImQiKTsKLSAgICAgICAgb3B0cy5hZGQoImNwIik7Ci0gICAgICAgIG9wdHMuYWRkKCJjb21waWxlciIpOwotICAgICAgICBvcHRzLmFkZCgiamFyIik7Ci0gICAgICAgIG9wdHMuYWRkKCJtcyIpOwotICAgICAgICBvcHRzLmFkZCgibXgiKTsKLSAgICAgICAgb3B0cy5hZGQoInJlcGFja2FnZSIpOwotICAgICAgICBvcHRzLmFkZCgiZXh0ZW5zaW9uIik7Ci0gICAgICAgIG9wdHMuYWRkKCJleHRlbnNpb25QYXJtcyIpOwotICAgICAgICBvcHRzLmFkZCgiYWxsb3dtZGVmIik7Ci0gICAgICAgIENvbW1hbmRMaW5lIGNsID0gbmV3IENvbW1hbmRMaW5lKGFyZ3MsIG9wdHMpOwotCi0gICAgICAgIGlmIChjbC5nZXRPcHQoImxpY2Vuc2UiKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBDb21tYW5kTGluZS5wcmludExpY2Vuc2UoKTsKLSAgICAgICAgICAgIFN5c3RlbS5leGl0KDApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgYXJncyA9IGNsLmFyZ3MoKTsKLSAgICAgICAgYm9vbGVhbiB2ZXJib3NlID0gKGNsLmdldE9wdCgidmVyYm9zZSIpICE9IG51bGwpOwotICAgICAgICBib29sZWFuIHF1aWV0ID0gKGNsLmdldE9wdCgicXVpZXQiKSAhPSBudWxsKTsKLSAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBxdWlldCA9IGZhbHNlOwotCi0gICAgICAgIFN0cmluZyBvdXRwdXRmaWxlbmFtZSA9IGNsLmdldE9wdCgib3V0Iik7Ci0KLSAgICAgICAgU3RyaW5nIHJlcGFja2FnZSA9IGNsLmdldE9wdCgicmVwYWNrYWdlIik7Ci0KLSAgICAgICAgU3RyaW5nIG5hbWUgPSBjbC5nZXRPcHQoIm5hbWUiKTsKLQotICAgICAgICBib29sZWFuIGRvd25sb2FkID0gKGNsLmdldE9wdCgiZGwiKSAhPSBudWxsKTsKLSAgICAgICAgYm9vbGVhbiBub1VwYSA9IChjbC5nZXRPcHQoIm5vdXBhIikgIT0gbnVsbCk7Ci0gICAgICAgIGJvb2xlYW4gbm9QdnIgPSAoY2wuZ2V0T3B0KCJub3B2ciIpICE9IG51bGwpOwotICAgICAgICBib29sZWFuIG5vamF2YWMgPSAoY2wuZ2V0T3B0KCJzcmNvbmx5IikgIT0gbnVsbCk7Ci0gICAgICAgIGJvb2xlYW4gZGVidWcgPSAoY2wuZ2V0T3B0KCJkZWJ1ZyIpICE9IG51bGwpOwotICAgICAgICBib29sZWFuIGpheGIgPSAoY2wuZ2V0T3B0KCJqYXhiIikgIT0gbnVsbCk7Ci0KLSAgICAgICAgU3RyaW5nIGFsbG93bWRlZiA9IGNsLmdldE9wdCgiYWxsb3dtZGVmIik7Ci0gICAgICAgIFNldCBtZGVmTmFtZXNwYWNlcyA9IChhbGxvd21kZWYgPT0gbnVsbCA/IENvbGxlY3Rpb25zLkVNUFRZX1NFVCA6Ci0gICAgICAgICAgICAgICAgbmV3IEhhc2hTZXQoQXJyYXlzLmFzTGlzdChYbWxMaXN0SW1wbC5zcGxpdF9saXN0KGFsbG93bWRlZikpKSk7Ci0KLSAgICAgICAgTGlzdCBleHRlbnNpb25zID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBpZiAoY2wuZ2V0T3B0KCJleHRlbnNpb24iKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIEV4dGVuc2lvbiBlID0gbmV3IEV4dGVuc2lvbigpOwotICAgICAgICAgICAgICAgIGUuc2V0Q2xhc3NOYW1lKENsYXNzLmZvck5hbWUoY2wuZ2V0T3B0KCJleHRlbnNpb24iKSwgZmFsc2UsIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCkpKTsKLSAgICAgICAgICAgICAgICBleHRlbnNpb25zLmFkZChlKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQ291bGQgbm90IGZpbmQgZXh0ZW5zaW9uIGNsYXNzOiAiICsgY2wuZ2V0T3B0KCJleHRlbnNpb24iKSArICIgIElzIGl0IG9uIHlvdXIgY2xhc3NwYXRoPyIpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGV4dGVuc2lvbnMuc2l6ZSgpID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gZXhhbXBsZTogLWV4dGVuc2lvblBhcm1zIHR5cGVNYXBwaW5nRmlsZUxvY2F0aW9uPWQ6XHR5cGVzCi0gICAgICAgICAgICBpZiAoY2wuZ2V0T3B0KCJleHRlbnNpb25QYXJtcyIpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBFeHRlbnNpb24gZSA9IChFeHRlbnNpb24pIGV4dGVuc2lvbnMuZ2V0KDApOwotICAgICAgICAgICAgICAgIC8vIGV4dGVuc2lvblBhcm1zIGFyZSBkZWxpbWl0ZWQgYnkgJzsnCi0gICAgICAgICAgICAgICAgU3RyaW5nVG9rZW5pemVyIHBhcm1Ub2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGNsLmdldE9wdCgiZXh0ZW5zaW9uUGFybXMiKSwgIjsiKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAocGFybVRva2Vucy5oYXNNb3JlVG9rZW5zKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IG5hbWUgdmFsdWUgcGFpciBmb3IgZWFjaCBleHRlbnNpb24gcGFybXMgYW5kIHN0aWNrIGludG8gZXh0ZW5zaW9uIHBhcm1zCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBudlBhaXIgPSBwYXJtVG9rZW5zLm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSBudlBhaXIuaW5kZXhPZignPScpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oImV4dGVuc2lvblBhcm1zIHNob3VsZCBiZSBuYW1lPXZhbHVlO25hbWU9dmFsdWUiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBuID0gbnZQYWlyLnN1YnN0cmluZygwLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyB2ID0gbnZQYWlyLnN1YnN0cmluZyhpbmRleCArIDEpOwotICAgICAgICAgICAgICAgICAgICBFeHRlbnNpb24uUGFyYW0gcGFyYW0gPSBlLmNyZWF0ZVBhcmFtKCk7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtLnNldE5hbWUobik7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtLnNldFZhbHVlKHYpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyBjbGFzc2VzZGlyID0gY2wuZ2V0T3B0KCJkIik7Ci0gICAgICAgIEZpbGUgY2xhc3NlcyA9IG51bGw7Ci0gICAgICAgIGlmIChjbGFzc2VzZGlyICE9IG51bGwpCi0gICAgICAgICAgICBjbGFzc2VzID0gbmV3IEZpbGUoY2xhc3Nlc2Rpcik7Ci0KLSAgICAgICAgU3RyaW5nIHNyY2RpciA9IGNsLmdldE9wdCgic3JjIik7Ci0gICAgICAgIEZpbGUgc3JjID0gbnVsbDsKLSAgICAgICAgaWYgKHNyY2RpciAhPSBudWxsKQotICAgICAgICAgICAgc3JjID0gbmV3IEZpbGUoc3JjZGlyKTsKLSAgICAgICAgaWYgKG5vamF2YWMgJiYgc3JjZGlyID09IG51bGwgJiYgY2xhc3NlcyAhPSBudWxsKQotICAgICAgICAgICAgc3JjID0gY2xhc3NlczsKLQotICAgICAgICAvLyBjcmVhdGUgdGVtcCBkaXJlY3RvcnkKLSAgICAgICAgRmlsZSB0ZW1wZGlyID0gbnVsbDsKLSAgICAgICAgaWYgKHNyYyA9PSBudWxsIHx8IGNsYXNzZXMgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGVtcGRpciA9IFNjaGVtYUNvZGVHZW5lcmF0b3IuY3JlYXRlVGVtcERpcigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKGphdmEuaW8uSU9FeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkVycm9yIGNyZWF0aW5nIHRlbXAgZGlyICIgKyBlKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIEZpbGUgamFyZmlsZSA9IG51bGw7Ci0gICAgICAgIGlmIChvdXRwdXRmaWxlbmFtZSA9PSBudWxsICYmIGNsYXNzZXMgPT0gbnVsbCAmJiAhbm9qYXZhYykKLSAgICAgICAgICAgIG91dHB1dGZpbGVuYW1lID0gInhtbHR5cGVzLmphciI7Ci0gICAgICAgIGlmIChvdXRwdXRmaWxlbmFtZSAhPSBudWxsKQotICAgICAgICAgICAgamFyZmlsZSA9IG5ldyBGaWxlKG91dHB1dGZpbGVuYW1lKTsKLQotICAgICAgICBpZiAoc3JjID09IG51bGwpCi0gICAgICAgICAgICBzcmMgPSBTY2hlbWFDb2RlR2VuZXJhdG9yLmNyZWF0ZURpcih0ZW1wZGlyLCAic3JjIik7Ci0gICAgICAgIGlmIChjbGFzc2VzID09IG51bGwpCi0gICAgICAgICAgICBjbGFzc2VzID0gU2NoZW1hQ29kZUdlbmVyYXRvci5jcmVhdGVEaXIodGVtcGRpciwgImNsYXNzZXMiKTsKLQotICAgICAgICBGaWxlW10gY2xhc3NwYXRoID0gbnVsbDsKLSAgICAgICAgU3RyaW5nIGNwU3RyaW5nID0gY2wuZ2V0T3B0KCJjcCIpOwotICAgICAgICBpZiAoY3BTdHJpbmcgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nW10gY3BwYXJ0cyA9IGNwU3RyaW5nLnNwbGl0KEZpbGUucGF0aFNlcGFyYXRvcik7Ci0gICAgICAgICAgICBMaXN0IGNwTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY3BwYXJ0cy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICBjcExpc3QuYWRkKG5ldyBGaWxlKGNwcGFydHNbaV0pKTsKLSAgICAgICAgICAgIGNsYXNzcGF0aCA9IChGaWxlW10pY3BMaXN0LnRvQXJyYXkobmV3IEZpbGVbY3BMaXN0LnNpemUoKV0pOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgY2xhc3NwYXRoID0gQ29kZUdlblV0aWwuc3lzdGVtQ2xhc3NwYXRoKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgY29tcGlsZXIgPSBjbC5nZXRPcHQoImNvbXBpbGVyIik7Ci0gICAgICAgIFN0cmluZyBqYXIgPSBjbC5nZXRPcHQoImphciIpOwotCi0gICAgICAgIFN0cmluZyBtZW1vcnlJbml0aWFsU2l6ZSA9IGNsLmdldE9wdCgibXMiKTsKLSAgICAgICAgU3RyaW5nIG1lbW9yeU1heGltdW1TaXplID0gY2wuZ2V0T3B0KCJteCIpOwotCi0gICAgICAgIEZpbGVbXSB4c2RGaWxlcyA9IGNsLmZpbGVzRW5kaW5nV2l0aCgiLnhzZCIpOwotICAgICAgICBGaWxlW10gd3NkbEZpbGVzID0gY2wuZmlsZXNFbmRpbmdXaXRoKCIud3NkbCIpOwotICAgICAgICBGaWxlW10gamF2YUZpbGVzID0gY2wuZmlsZXNFbmRpbmdXaXRoKCIuamF2YSIpOwotICAgICAgICBGaWxlW10gY29uZmlnRmlsZXMgPSBjbC5maWxlc0VuZGluZ1dpdGgoIi54c2Rjb25maWciKTsKLQotICAgICAgICBpZiAoeHNkRmlsZXMubGVuZ3RoICsgd3NkbEZpbGVzLmxlbmd0aCA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNvdWxkIG5vdCBmaW5kIGFueSB4c2Qgb3Igd3NkbCBmaWxlcyB0byBwcm9jZXNzLiIpOwotICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7Ci0gICAgICAgIH0KLSAgICAgICAgRmlsZSBiYXNlRGlyID0gY2wuZ2V0QmFzZURpcigpOwotICAgICAgICBVUkkgYmFzZVVSSSA9IGJhc2VEaXIgPT0gbnVsbCA/IG51bGwgOiBiYXNlRGlyLnRvVVJJKCk7Ci0KLSAgICAgICAgWG1sRXJyb3JQcmludGVyIGVyciA9IG5ldyBYbWxFcnJvclByaW50ZXIodmVyYm9zZSwgYmFzZVVSSSk7Ci0KLSAgICAgICAgUGFyYW1ldGVycyBwYXJhbXMgPSBuZXcgUGFyYW1ldGVycygpOwotICAgICAgICBwYXJhbXMuc2V0QmFzZURpcihiYXNlRGlyKTsKLSAgICAgICAgcGFyYW1zLnNldFhzZEZpbGVzKHhzZEZpbGVzKTsKLSAgICAgICAgcGFyYW1zLnNldFdzZGxGaWxlcyh3c2RsRmlsZXMpOwotICAgICAgICBwYXJhbXMuc2V0SmF2YUZpbGVzKGphdmFGaWxlcyk7Ci0gICAgICAgIHBhcmFtcy5zZXRDb25maWdGaWxlcyhjb25maWdGaWxlcyk7Ci0gICAgICAgIHBhcmFtcy5zZXRDbGFzc3BhdGgoY2xhc3NwYXRoKTsKLSAgICAgICAgcGFyYW1zLnNldE91dHB1dEphcihqYXJmaWxlKTsKLSAgICAgICAgcGFyYW1zLnNldE5hbWUobmFtZSk7Ci0gICAgICAgIHBhcmFtcy5zZXRTcmNEaXIoc3JjKTsKLSAgICAgICAgcGFyYW1zLnNldENsYXNzZXNEaXIoY2xhc3Nlcyk7Ci0gICAgICAgIHBhcmFtcy5zZXRDb21waWxlcihjb21waWxlcik7Ci0gICAgICAgIHBhcmFtcy5zZXRKYXIoamFyKTsKLSAgICAgICAgcGFyYW1zLnNldE1lbW9yeUluaXRpYWxTaXplKG1lbW9yeUluaXRpYWxTaXplKTsKLSAgICAgICAgcGFyYW1zLnNldE1lbW9yeU1heGltdW1TaXplKG1lbW9yeU1heGltdW1TaXplKTsKLSAgICAgICAgcGFyYW1zLnNldE5vamF2YWMobm9qYXZhYyk7Ci0gICAgICAgIHBhcmFtcy5zZXRRdWlldChxdWlldCk7Ci0gICAgICAgIHBhcmFtcy5zZXRWZXJib3NlKHZlcmJvc2UpOwotICAgICAgICBwYXJhbXMuc2V0RG93bmxvYWQoZG93bmxvYWQpOwotICAgICAgICBwYXJhbXMuc2V0Tm9VcGEobm9VcGEpOwotICAgICAgICBwYXJhbXMuc2V0Tm9QdnIobm9QdnIpOwotICAgICAgICBwYXJhbXMuc2V0RGVidWcoZGVidWcpOwotICAgICAgICBwYXJhbXMuc2V0RXJyb3JMaXN0ZW5lcihlcnIpOwotICAgICAgICBwYXJhbXMuc2V0UmVwYWNrYWdlKHJlcGFja2FnZSk7Ci0gICAgICAgIHBhcmFtcy5zZXRFeHRlbnNpb25zKGV4dGVuc2lvbnMpOwotICAgICAgICBwYXJhbXMuc2V0SmF4YihqYXhiKTsKLSAgICAgICAgcGFyYW1zLnNldE1kZWZOYW1lc3BhY2VzKG1kZWZOYW1lc3BhY2VzKTsKLQotICAgICAgICBib29sZWFuIHJlc3VsdCA9IGNvbXBpbGUocGFyYW1zKTsKLQotICAgICAgICBpZiAodGVtcGRpciAhPSBudWxsKQotICAgICAgICAgICAgU2NoZW1hQ29kZUdlbmVyYXRvci50cnlIYXJkVG9EZWxldGUodGVtcGRpcik7Ci0KLSAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKLQotICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFBhcmFtZXRlcnMKLSAgICB7Ci0gICAgICAgIHByaXZhdGUgRmlsZSBiYXNlRGlyOwotICAgICAgICBwcml2YXRlIEZpbGVbXSB4c2RGaWxlczsKLSAgICAgICAgcHJpdmF0ZSBGaWxlW10gd3NkbEZpbGVzOwotICAgICAgICBwcml2YXRlIEZpbGVbXSBqYXZhRmlsZXM7Ci0gICAgICAgIHByaXZhdGUgRmlsZVtdIGNvbmZpZ0ZpbGVzOwotICAgICAgICBwcml2YXRlIEZpbGVbXSBjbGFzc3BhdGg7Ci0gICAgICAgIHByaXZhdGUgRmlsZSBvdXRwdXRKYXI7Ci0gICAgICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7Ci0gICAgICAgIHByaXZhdGUgRmlsZSBzcmNEaXI7Ci0gICAgICAgIHByaXZhdGUgRmlsZSBjbGFzc2VzRGlyOwotICAgICAgICBwcml2YXRlIFN0cmluZyBtZW1vcnlJbml0aWFsU2l6ZTsKLSAgICAgICAgcHJpdmF0ZSBTdHJpbmcgbWVtb3J5TWF4aW11bVNpemU7Ci0gICAgICAgIHByaXZhdGUgU3RyaW5nIGNvbXBpbGVyOwotICAgICAgICBwcml2YXRlIFN0cmluZyBqYXI7Ci0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBub2phdmFjOwotICAgICAgICBwcml2YXRlIGJvb2xlYW4gcXVpZXQ7Ci0gICAgICAgIHByaXZhdGUgYm9vbGVhbiB2ZXJib3NlOwotICAgICAgICBwcml2YXRlIGJvb2xlYW4gZG93bmxvYWQ7Ci0gICAgICAgIHByaXZhdGUgQ29sbGVjdGlvbiBlcnJvckxpc3RlbmVyOwotICAgICAgICBwcml2YXRlIGJvb2xlYW4gbm9VcGE7Ci0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBub1B2cjsKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIGRlYnVnOwotICAgICAgICBwcml2YXRlIFN0cmluZyByZXBhY2thZ2U7Ci0gICAgICAgIHByaXZhdGUgTGlzdCBleHRlbnNpb25zID0gQ29sbGVjdGlvbnMuRU1QVFlfTElTVDsKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIGpheGI7Ci0gICAgICAgIHByaXZhdGUgU2V0IG1kZWZOYW1lc3BhY2VzID0gQ29sbGVjdGlvbnMuRU1QVFlfU0VUOwotCi0gICAgICAgIHB1YmxpYyBGaWxlIGdldEJhc2VEaXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYmFzZURpcjsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldEJhc2VEaXIoRmlsZSBiYXNlRGlyKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLmJhc2VEaXIgPSBiYXNlRGlyOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIEZpbGVbXSBnZXRYc2RGaWxlcygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB4c2RGaWxlczsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldFhzZEZpbGVzKEZpbGVbXSB4c2RGaWxlcykKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy54c2RGaWxlcyA9IHhzZEZpbGVzOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIEZpbGVbXSBnZXRXc2RsRmlsZXMoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gd3NkbEZpbGVzOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0V3NkbEZpbGVzKEZpbGVbXSB3c2RsRmlsZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMud3NkbEZpbGVzID0gd3NkbEZpbGVzOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIEZpbGVbXSBnZXRKYXZhRmlsZXMoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gamF2YUZpbGVzOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0SmF2YUZpbGVzKEZpbGVbXSBqYXZhRmlsZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuamF2YUZpbGVzID0gamF2YUZpbGVzOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIEZpbGVbXSBnZXRDb25maWdGaWxlcygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBjb25maWdGaWxlczsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldENvbmZpZ0ZpbGVzKEZpbGVbXSBjb25maWdGaWxlcykKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5jb25maWdGaWxlcyA9IGNvbmZpZ0ZpbGVzOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIEZpbGVbXSBnZXRDbGFzc3BhdGgoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gY2xhc3NwYXRoOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0Q2xhc3NwYXRoKEZpbGVbXSBjbGFzc3BhdGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuY2xhc3NwYXRoID0gY2xhc3NwYXRoOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIEZpbGUgZ2V0T3V0cHV0SmFyKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG91dHB1dEphcjsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldE91dHB1dEphcihGaWxlIG91dHB1dEphcikKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5vdXRwdXRKYXIgPSBvdXRwdXRKYXI7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmFtZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgRmlsZSBnZXRTcmNEaXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc3JjRGlyOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0U3JjRGlyKEZpbGUgc3JjRGlyKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLnNyY0RpciA9IHNyY0RpcjsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBGaWxlIGdldENsYXNzZXNEaXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gY2xhc3Nlc0RpcjsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldENsYXNzZXNEaXIoRmlsZSBjbGFzc2VzRGlyKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLmNsYXNzZXNEaXIgPSBjbGFzc2VzRGlyOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gaXNOb2phdmFjKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5vamF2YWM7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBzZXROb2phdmFjKGJvb2xlYW4gbm9qYXZhYykKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5ub2phdmFjID0gbm9qYXZhYzsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzUXVpZXQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gcXVpZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRRdWlldChib29sZWFuIHF1aWV0KQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLnF1aWV0ID0gcXVpZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc1ZlcmJvc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdmVyYm9zZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldFZlcmJvc2UoYm9vbGVhbiB2ZXJib3NlKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLnZlcmJvc2UgPSB2ZXJib3NlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gaXNEb3dubG9hZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBkb3dubG9hZDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldERvd25sb2FkKGJvb2xlYW4gZG93bmxvYWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuZG93bmxvYWQgPSBkb3dubG9hZDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzTm9VcGEoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbm9VcGE7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBzZXROb1VwYShib29sZWFuIG5vVXBhKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLm5vVXBhID0gbm9VcGE7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc05vUHZyKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5vUHZyOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0Tm9QdnIoYm9vbGVhbiBub1B2cikKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5ub1B2ciA9IG5vUHZyOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gaXNEZWJ1ZygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBkZWJ1ZzsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldERlYnVnKGJvb2xlYW4gZGVidWcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuZGVidWcgPSBkZWJ1ZzsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TWVtb3J5SW5pdGlhbFNpemUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbWVtb3J5SW5pdGlhbFNpemU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRNZW1vcnlJbml0aWFsU2l6ZShTdHJpbmcgbWVtb3J5SW5pdGlhbFNpemUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMubWVtb3J5SW5pdGlhbFNpemUgPSBtZW1vcnlJbml0aWFsU2l6ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TWVtb3J5TWF4aW11bVNpemUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbWVtb3J5TWF4aW11bVNpemU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRNZW1vcnlNYXhpbXVtU2l6ZShTdHJpbmcgbWVtb3J5TWF4aW11bVNpemUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMubWVtb3J5TWF4aW11bVNpemUgPSBtZW1vcnlNYXhpbXVtU2l6ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29tcGlsZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gY29tcGlsZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRDb21waWxlcihTdHJpbmcgY29tcGlsZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuY29tcGlsZXIgPSBjb21waWxlcjsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0SmFyKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGphcjsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldEphcihTdHJpbmcgamFyKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLmphciA9IGphcjsKLSAgICAgICAgfQotCi0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0SmF4Yihib29sZWFuIGpheGIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuamF4YiA9IGpheGI7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBnZXRKYXhiKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHRoaXMuamF4YjsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBDb2xsZWN0aW9uIGdldEVycm9yTGlzdGVuZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3JMaXN0ZW5lcjsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldEVycm9yTGlzdGVuZXIoQ29sbGVjdGlvbiBlcnJvckxpc3RlbmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLmVycm9yTGlzdGVuZXIgPSBlcnJvckxpc3RlbmVyOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFN0cmluZyBnZXRSZXBhY2thZ2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gcmVwYWNrYWdlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0UmVwYWNrYWdlKFN0cmluZyBuZXdSZXBhY2thZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlcGFja2FnZSA9IG5ld1JlcGFja2FnZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBMaXN0IGdldEV4dGVuc2lvbnMoKSB7Ci0gICAgICAgICAgICByZXR1cm4gZXh0ZW5zaW9uczsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldEV4dGVuc2lvbnMoTGlzdCBleHRlbnNpb25zKSB7Ci0gICAgICAgICAgICB0aGlzLmV4dGVuc2lvbnMgPSBleHRlbnNpb25zOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFNldCBnZXRNZGVmTmFtZXNwYWNlcygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtZGVmTmFtZXNwYWNlczsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldE1kZWZOYW1lc3BhY2VzKFNldCBtZGVmTmFtZXNwYWNlcykKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5tZGVmTmFtZXNwYWNlcyA9IG1kZWZOYW1lc3BhY2VzOwotICAgICAgICB9Ci0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTY2hlbWFUeXBlU3lzdGVtIGxvYWRUeXBlU3lzdGVtKAotICAgICAgICBTdHJpbmcgbmFtZSwgRmlsZVtdIHhzZEZpbGVzLAotICAgICAgICBGaWxlW10gd3NkbEZpbGVzLCBGaWxlW10gY29uZmlnRmlsZXMsIFJlc291cmNlTG9hZGVyIGNwUmVzb3VyY2VMb2FkZXIsCi0gICAgICAgIGJvb2xlYW4gZG93bmxvYWQsIGJvb2xlYW4gbm9VcGEsIGJvb2xlYW4gbm9QdnIsIFNldCBtZGVmTmFtZXNwYWNlcywKLSAgICAgICAgRmlsZSBiYXNlRGlyLCBNYXAgc291cmNlc1RvQ29weU1hcCwgQ29sbGVjdGlvbiBvdXRlckVycm9yTGlzdGVuZXIpCi0gICAgewotICAgICAgICBYbWxFcnJvcldhdGNoZXIgZXJyb3JMaXN0ZW5lciA9IG5ldyBYbWxFcnJvcldhdGNoZXIob3V0ZXJFcnJvckxpc3RlbmVyKTsKLQotICAgICAgICAvLyBGb3IgcGFyc2luZyBYU0QgYW5kIFdTREwgZmlsZXMsIHdlIHNob3VsZCB1c2UgdGhlIFNjaGVtYURvY3VtZW50Ci0gICAgICAgIC8vIGNsYXNzbG9hZGVyIHJhdGhlciB0aGFuIHRoZSB0aHJlYWQgY29udGV4dCBjbGFzc2xvYWRlci4gIFRoaXMgaXMKLSAgICAgICAgLy8gYmVjYXVzZSBpbiBzb21lIHNpdHVhdGlvbnMgKHN1Y2ggYXMgd2hlbiBiZWluZyBpbnZva2VkIGJ5IGFudAotICAgICAgICAvLyB1bmRlcm5lYXRoIHRoZSBpZGUpIHRoZSBjb250ZXh0IGNsYXNzbG9hZGVyIGlzIHBvdGVudGlhbGx5IHdlaXJkCi0gICAgICAgIC8vIChiZWNhdXNlIG9mIHRoZSBkZXNpZ24gb2YgYW50KS4KLQotICAgICAgICBTY2hlbWFUeXBlTG9hZGVyIGxvYWRlciA9IFhtbEJlYW5zLnR5cGVMb2FkZXJGb3JDbGFzc0xvYWRlcihTY2hlbWFEb2N1bWVudC5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsKLQotICAgICAgICAvLyBzdGVwIDEsIHBhcnNlIGFsbCB0aGUgWFNEIGZpbGVzLgotICAgICAgICBBcnJheUxpc3Qgc2NvbnRlbnRsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBpZiAoeHNkRmlsZXMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB4c2RGaWxlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFhtbE9wdGlvbnMgb3B0aW9ucyA9IG5ldyBYbWxPcHRpb25zKCk7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2V0TG9hZExpbmVOdW1iZXJzKCk7Ci0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2V0TG9hZE1lc3NhZ2VEaWdlc3QoKTsKLQotICAgICAgICAgICAgICAgICAgICBYbWxPYmplY3Qgc2NoZW1hZG9jID0gbG9hZGVyLnBhcnNlKHhzZEZpbGVzW2ldLCBudWxsLCBvcHRpb25zKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEoc2NoZW1hZG9jIGluc3RhbmNlb2YgU2NoZW1hRG9jdW1lbnQpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHNjU3RhdGUuYWRkRXJyb3IoZXJyb3JMaXN0ZW5lciwgIkRvY3VtZW50ICIgKyB4c2RGaWxlc1tpXSArICIgaXMgbm90IGEgc2NoZW1hIGZpbGUiLCBYbWxFcnJvckNvbnRleHQuQ0FOTk9UX0xPQURfWFNEX0ZJTEUsIHNjaGVtYWRvYyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHNjU3RhdGUuYWRkSW5mbyhlcnJvckxpc3RlbmVyLCAiTG9hZGluZyBzY2hlbWEgZmlsZSAiICsgeHNkRmlsZXNbaV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgWG1sT3B0aW9ucyBvcHRzID0gbmV3IFhtbE9wdGlvbnMoKS5zZXRFcnJvckxpc3RlbmVyKGVycm9yTGlzdGVuZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYWRvYy52YWxpZGF0ZShvcHRzKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29udGVudGxpc3QuYWRkKCgoU2NoZW1hRG9jdW1lbnQpc2NoZW1hZG9jKS5nZXRTY2hlbWEoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKFhtbEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZXJyb3JMaXN0ZW5lci5hZGQoZS5nZXRFcnJvcigpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3RzY1N0YXRlLmFkZEVycm9yKGVycm9yTGlzdGVuZXIsICJDYW5ub3QgbG9hZCBmaWxlICIgKyB4c2RGaWxlc1tpXSArICI6ICIgKyBlLCBYbWxFcnJvckNvbnRleHQuQ0FOTk9UX0xPQURfWFNEX0ZJTEUsIHhzZEZpbGVzW2ldKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBzdGVwIDIsIHBhcnNlIGFsbCBXU0RMIGZpbGVzCi0gICAgICAgIGlmICh3c2RsRmlsZXMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3c2RsRmlsZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBYbWxPcHRpb25zIG9wdGlvbnMgPSBuZXcgWG1sT3B0aW9ucygpOwotICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnNldExvYWRMaW5lTnVtYmVycygpOwotICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnNldExvYWRTdWJzdGl0dXRlTmFtZXNwYWNlcyhDb2xsZWN0aW9ucy5zaW5nbGV0b25NYXAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIiwgImh0dHA6Ly93d3cuYXBhY2hlLm9yZy9pbnRlcm5hbC94bWxiZWFucy93c2Rsc3Vic3QiCi0gICAgICAgICAgICAgICAgICAgICkpOwotCi0KLSAgICAgICAgICAgICAgICAgICAgWG1sT2JqZWN0IHdzZGxkb2MgPSBsb2FkZXIucGFyc2Uod3NkbEZpbGVzW2ldLCBudWxsLCBvcHRpb25zKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoISh3c2RsZG9jIGluc3RhbmNlb2Ygb3JnLmFwYWNoZS5pbnRlcm5hbC54bWxiZWFucy53c2Rsc3Vic3QuRGVmaW5pdGlvbnNEb2N1bWVudCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHNjU3RhdGUuYWRkRXJyb3IoZXJyb3JMaXN0ZW5lciwgIkRvY3VtZW50ICIgKyB3c2RsRmlsZXNbaV0gKyAiIGlzIG5vdCBhIHdzZGwgZmlsZSIsIFhtbEVycm9yQ29udGV4dC5DQU5OT1RfTE9BRF9YU0RfRklMRSwgd3NkbGRvYyk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdzZGxDb250YWluc0VuY29kZWQod3NkbGRvYykpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RzY1N0YXRlLmFkZFdhcm5pbmcoZXJyb3JMaXN0ZW5lciwgIlRoZSBXU0RMICIgKyB3c2RsRmlsZXNbaV0gKyAiIHVzZXMgU09BUCBlbmNvZGluZy4gU09BUCBlbmNvZGluZyBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGxpdGVyYWwgWE1MIFNjaGVtYS4iLCBYbWxFcnJvckNvbnRleHQuQ0FOTk9UX0xPQURfWFNEX0ZJTEUsIHdzZGxkb2MpOwotICAgICAgICAgICAgICAgICAgICAgICAgU3RzY1N0YXRlLmFkZEluZm8oZXJyb3JMaXN0ZW5lciwgIkxvYWRpbmcgd3NkbCBmaWxlICIgKyB3c2RsRmlsZXNbaV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgWG1sT2JqZWN0W10gdHlwZXMgPSAoKG9yZy5hcGFjaGUuaW50ZXJuYWwueG1sYmVhbnMud3NkbHN1YnN0LkRlZmluaXRpb25zRG9jdW1lbnQpd3NkbGRvYykuZ2V0RGVmaW5pdGlvbnMoKS5nZXRUeXBlc0FycmF5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB0eXBlcy5sZW5ndGg7IGorKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBleHBsaWNpdCBjYXN0IGZvciBwYXJhbm9pYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjaGVtYURvY3VtZW50LlNjaGVtYVtdIHNjaGVtYXMgPSAoU2NoZW1hRG9jdW1lbnQuU2NoZW1hW10pdHlwZXNbal0uc2VsZWN0UGF0aCgiZGVjbGFyZSBuYW1lc3BhY2UgeHM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYVwiIHhzOnNjaGVtYSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgc2NoZW1hcy5sZW5ndGg7IGsrKykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWFzW2tdLnZhbGlkYXRlKG5ldyBYbWxPcHRpb25zKCkuc2V0RXJyb3JMaXN0ZW5lcihlcnJvckxpc3RlbmVyKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29udGVudGxpc3QuYWRkKHNjaGVtYXNba10pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCArPSBzY2hlbWFzLmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIFN0c2NTdGF0ZS5hZGRJbmZvKGVycm9yTGlzdGVuZXIsICJQcm9jZXNzaW5nICIgKyBjb3VudCArICIgc2NoZW1hKHMpIGluICIgKyB3c2RsRmlsZXNbaV0udG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKFhtbEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZXJyb3JMaXN0ZW5lci5hZGQoZS5nZXRFcnJvcigpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3RzY1N0YXRlLmFkZEVycm9yKGVycm9yTGlzdGVuZXIsICJDYW5ub3QgbG9hZCBmaWxlICIgKyB3c2RsRmlsZXNbaV0gKyAiOiAiICsgZSwgWG1sRXJyb3JDb250ZXh0LkNBTk5PVF9MT0FEX1hTRF9GSUxFLCB3c2RsRmlsZXNbaV0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFNjaGVtYURvY3VtZW50LlNjaGVtYVtdIHNkb2NzID0gKFNjaGVtYURvY3VtZW50LlNjaGVtYVtdKXNjb250ZW50bGlzdC50b0FycmF5KG5ldyBTY2hlbWFEb2N1bWVudC5TY2hlbWFbc2NvbnRlbnRsaXN0LnNpemUoKV0pOwotCi0gICAgICAgIC8vIG5vdyB0aGUgY29uZmlnIGZpbGVzLgotICAgICAgICBBcnJheUxpc3QgY2RvY2xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIGlmIChjb25maWdGaWxlcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbmZpZ0ZpbGVzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgWG1sT3B0aW9ucyBvcHRpb25zID0gbmV3IFhtbE9wdGlvbnMoKTsKLSAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wdXQoIFhtbE9wdGlvbnMuTE9BRF9MSU5FX05VTUJFUlMgKTsKLQotICAgICAgICAgICAgICAgICAgICBYbWxPYmplY3QgY29uZmlnZG9jID0gbG9hZGVyLnBhcnNlKGNvbmZpZ0ZpbGVzW2ldLCBudWxsLCBvcHRpb25zKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEoY29uZmlnZG9jIGluc3RhbmNlb2YgQ29uZmlnRG9jdW1lbnQpKQotICAgICAgICAgICAgICAgICAgICAgICAgU3RzY1N0YXRlLmFkZEVycm9yKGVycm9yTGlzdGVuZXIsICJEb2N1bWVudCAiICsgY29uZmlnRmlsZXNbaV0gKyAiIGlzIG5vdCBhbiB4c2QgY29uZmlnIGZpbGUiLCBYbWxFcnJvckNvbnRleHQuQ0FOTk9UX0xPQURfWFNEX0ZJTEUsIGNvbmZpZ2RvYyk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgU3RzY1N0YXRlLmFkZEluZm8oZXJyb3JMaXN0ZW5lciwgIkxvYWRpbmcgY29uZmlnIGZpbGUgIiArIGNvbmZpZ0ZpbGVzW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWdkb2MudmFsaWRhdGUobmV3IFhtbE9wdGlvbnMoKS5zZXRFcnJvckxpc3RlbmVyKGVycm9yTGlzdGVuZXIpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZG9jbGlzdC5hZGQoKChDb25maWdEb2N1bWVudCljb25maWdkb2MpLmdldENvbmZpZygpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXRjaCAoWG1sRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBlcnJvckxpc3RlbmVyLmFkZChlLmdldEVycm9yKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTdHNjU3RhdGUuYWRkRXJyb3IoZXJyb3JMaXN0ZW5lciwgIkNhbm5vdCBsb2FkIHhzZCBjb25maWcgZmlsZSAiICsgY29uZmlnRmlsZXNbaV0gKyAiOiAiICsgZSwgWG1sRXJyb3JDb250ZXh0LkNBTk5PVF9MT0FEX1hTRF9DT05GSUdfRklMRSwgY29uZmlnRmlsZXNbaV0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBDb25maWdEb2N1bWVudC5Db25maWdbXSBjZG9jcyA9IChDb25maWdEb2N1bWVudC5Db25maWdbXSljZG9jbGlzdC50b0FycmF5KG5ldyBDb25maWdEb2N1bWVudC5Db25maWdbY2RvY2xpc3Quc2l6ZSgpXSk7Ci0KLSAgICAgICAgU2NoZW1hVHlwZUxvYWRlciBsaW5rVG8gPSBTY2hlbWFUeXBlTG9hZGVySW1wbC5idWlsZChudWxsLCBjcFJlc291cmNlTG9hZGVyLCBudWxsKTsKLQotICAgICAgICBVUkkgYmFzZVVSSSA9IG51bGw7Ci0gICAgICAgIGlmIChiYXNlRGlyICE9IG51bGwpCi0gICAgICAgICAgICBiYXNlVVJJID0gYmFzZURpci50b1VSSSgpOwotCi0gICAgICAgIFhtbE9wdGlvbnMgb3B0cyA9IG5ldyBYbWxPcHRpb25zKCk7Ci0gICAgICAgIGlmIChkb3dubG9hZCkKLSAgICAgICAgICAgIG9wdHMuc2V0Q29tcGlsZURvd25sb2FkVXJscygpOwotICAgICAgICBpZiAobm9VcGEpCi0gICAgICAgICAgICBvcHRzLnNldENvbXBpbGVOb1VwYVJ1bGUoKTsKLSAgICAgICAgaWYgKG5vUHZyKQotICAgICAgICAgICAgb3B0cy5zZXRDb21waWxlTm9QdnJSdWxlKCk7Ci0gICAgICAgIGlmIChtZGVmTmFtZXNwYWNlcyAhPSBudWxsKQotICAgICAgICAgICAgb3B0cy5zZXRDb21waWxlTWRlZk5hbWVzcGFjZXMobWRlZk5hbWVzcGFjZXMpOwotICAgICAgICBvcHRzLnNldENvbXBpbGVOb1ZhbGlkYXRpb24oKTsgLy8gYWxyZWFkeSB2YWxpZGF0ZWQgaGVyZQotCi0gICAgICAgIC8vIG5vdyBwYXNzIGl0IHRvIHRoZSBtYWluIGNvbXBpbGUgZnVuY3Rpb24KLSAgICAgICAgU2NoZW1hVHlwZVN5c3RlbUNvbXBpbGVyLlBhcmFtZXRlcnMgcGFyYW1zID0gbmV3IFNjaGVtYVR5cGVTeXN0ZW1Db21waWxlci5QYXJhbWV0ZXJzKCk7Ci0gICAgICAgIHBhcmFtcy5zZXROYW1lKG5hbWUpOwotICAgICAgICBwYXJhbXMuc2V0U2NoZW1hcyhzZG9jcyk7Ci0gICAgICAgIHBhcmFtcy5zZXRDb25maWdzKGNkb2NzKTsKLSAgICAgICAgcGFyYW1zLnNldExpbmtUbyhsaW5rVG8pOwotICAgICAgICBwYXJhbXMuc2V0T3B0aW9ucyhvcHRzKTsKLSAgICAgICAgcGFyYW1zLnNldEVycm9yTGlzdGVuZXIoZXJyb3JMaXN0ZW5lcik7Ci0gICAgICAgIHBhcmFtcy5zZXRKYXZhaXplKHRydWUpOwotICAgICAgICBwYXJhbXMuc2V0QmFzZVVSSShiYXNlVVJJKTsKLSAgICAgICAgcGFyYW1zLnNldFNvdXJjZXNUb0NvcHlNYXAoc291cmNlc1RvQ29weU1hcCk7Ci0gICAgICAgIHJldHVybiBTY2hlbWFUeXBlU3lzdGVtQ29tcGlsZXIuY29tcGlsZShwYXJhbXMpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBjb21waWxlKFBhcmFtZXRlcnMgcGFyYW1zKQotICAgIHsKLSAgICAgICAgRmlsZSBiYXNlRGlyID0gcGFyYW1zLmdldEJhc2VEaXIoKTsKLSAgICAgICAgRmlsZVtdIHhzZEZpbGVzID0gcGFyYW1zLmdldFhzZEZpbGVzKCk7Ci0gICAgICAgIEZpbGVbXSB3c2RsRmlsZXMgPSBwYXJhbXMuZ2V0V3NkbEZpbGVzKCk7Ci0gICAgICAgIEZpbGVbXSBqYXZhRmlsZXMgPSBwYXJhbXMuZ2V0SmF2YUZpbGVzKCk7Ci0gICAgICAgIEZpbGVbXSBjb25maWdGaWxlcyA9IHBhcmFtcy5nZXRDb25maWdGaWxlcygpOwotICAgICAgICBGaWxlW10gY2xhc3NwYXRoID0gcGFyYW1zLmdldENsYXNzcGF0aCgpOwotICAgICAgICBGaWxlIG91dHB1dEphciA9IHBhcmFtcy5nZXRPdXRwdXRKYXIoKTsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBwYXJhbXMuZ2V0TmFtZSgpOwotICAgICAgICBGaWxlIHNyY0RpciA9IHBhcmFtcy5nZXRTcmNEaXIoKTsKLSAgICAgICAgRmlsZSBjbGFzc2VzRGlyID0gcGFyYW1zLmdldENsYXNzZXNEaXIoKTsKLSAgICAgICAgU3RyaW5nIGNvbXBpbGVyID0gcGFyYW1zLmdldENvbXBpbGVyKCk7Ci0gICAgICAgIFN0cmluZyBqYXIgPSBwYXJhbXMuZ2V0SmFyKCk7Ci0gICAgICAgIFN0cmluZyBtZW1vcnlJbml0aWFsU2l6ZSA9IHBhcmFtcy5nZXRNZW1vcnlJbml0aWFsU2l6ZSgpOwotICAgICAgICBTdHJpbmcgbWVtb3J5TWF4aW11bVNpemUgPSBwYXJhbXMuZ2V0TWVtb3J5TWF4aW11bVNpemUoKTsKLSAgICAgICAgYm9vbGVhbiBub2phdmFjID0gcGFyYW1zLmlzTm9qYXZhYygpOwotICAgICAgICBib29sZWFuIGRlYnVnID0gcGFyYW1zLmlzRGVidWcoKTsKLSAgICAgICAgYm9vbGVhbiB2ZXJib3NlID0gcGFyYW1zLmlzVmVyYm9zZSgpOwotICAgICAgICBib29sZWFuIHF1aWV0ID0gcGFyYW1zLmlzUXVpZXQoKTsKLSAgICAgICAgYm9vbGVhbiBkb3dubG9hZCA9IHBhcmFtcy5pc0Rvd25sb2FkKCk7Ci0gICAgICAgIGJvb2xlYW4gbm9VcGEgPSBwYXJhbXMuaXNOb1VwYSgpOwotICAgICAgICBib29sZWFuIG5vUHZyID0gcGFyYW1zLmlzTm9QdnIoKTsKLSAgICAgICAgQ29sbGVjdGlvbiBvdXRlckVycm9yTGlzdGVuZXIgPSBwYXJhbXMuZ2V0RXJyb3JMaXN0ZW5lcigpOwotICAgICAgICBTdHJpbmcgcmVwYWNrYWdlID0gcGFyYW1zLmdldFJlcGFja2FnZSgpOwotICAgICAgICBMaXN0IGV4dGVuc2lvbnMgPSBwYXJhbXMuZ2V0RXh0ZW5zaW9ucygpOwotICAgICAgICBib29sZWFuIGpheGIgPSBwYXJhbXMuZ2V0SmF4YigpOwotICAgICAgICBTZXQgbWRlZk5hbWVzcGFjZXMgPSBwYXJhbXMuZ2V0TWRlZk5hbWVzcGFjZXMoKTsKLQotICAgICAgICBpZiAoc3JjRGlyID09IG51bGwgfHwgY2xhc3Nlc0RpciA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigic3JjIGFuZCBjbGFzcyBnZW4gZGlyZWN0b3JpZXMgbWF5IG5vdCBiZSBudWxsLiIpOwotCi0gICAgICAgIGxvbmcgc3RhcnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQotICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHVzZW5hbWVzIGJhc2VkIG9uIHRoZSByZWxhdGl2aXplZCBmaWxlbmFtZXMgb24gdGhlIGZpbGVzeXN0ZW0KLSAgICAgICAgaWYgKGJhc2VEaXIgPT0gbnVsbCkKLSAgICAgICAgICAgIGJhc2VEaXIgPSBuZXcgRmlsZShTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZXIuZGlyIikpOwotCi0gICAgICAgIFJlc291cmNlTG9hZGVyIGNwUmVzb3VyY2VMb2FkZXIgPSBudWxsOwotCi0gICAgICAgIE1hcCBzb3VyY2VzVG9Db3B5TWFwID0gbmV3IEhhc2hNYXAoKTsKLQotICAgICAgICBpZiAoY2xhc3NwYXRoICE9IG51bGwpCi0gICAgICAgICAgICBjcFJlc291cmNlTG9hZGVyID0gbmV3IFBhdGhSZXNvdXJjZUxvYWRlcihjbGFzc3BhdGgpOwotCi0gICAgICAgIGJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLQotICAgICAgICAvLyBidWlsZCB0aGUgaW4tbWVtb3J5IHR5cGUgc3lzdGVtCi0gICAgICAgIFhtbEVycm9yV2F0Y2hlciBlcnJvckxpc3RlbmVyID0gbmV3IFhtbEVycm9yV2F0Y2hlcihvdXRlckVycm9yTGlzdGVuZXIpOwotICAgICAgICBTY2hlbWFUeXBlU3lzdGVtIHN5c3RlbSA9IGxvYWRUeXBlU3lzdGVtKG5hbWUsIHhzZEZpbGVzLCB3c2RsRmlsZXMsIGNvbmZpZ0ZpbGVzLCBjcFJlc291cmNlTG9hZGVyLCBkb3dubG9hZCwgbm9VcGEsIG5vUHZyLCBtZGVmTmFtZXNwYWNlcywgYmFzZURpciwgc291cmNlc1RvQ29weU1hcCwgZXJyb3JMaXN0ZW5lcik7Ci0gICAgICAgIGlmIChlcnJvckxpc3RlbmVyLmhhc0Vycm9yKCkpCi0gICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgbG9uZyBmaW5pc2ggPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgICAgaWYgKCFxdWlldCkKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZSB0byBidWlsZCBzY2hlbWEgdHlwZSBzeXN0ZW06ICIgKyAoKGRvdWJsZSkoZmluaXNoIC0gc3RhcnQpIC8gMTAwMC4wKSArICIgc2Vjb25kcyIgKTsKLQotICAgICAgICAvLyBub3cgY29kZSBnZW5lcmF0ZSBhbmQgY29tcGlsZSB0aGUgSkFSCi0gICAgICAgIGlmIChyZXN1bHQgJiYgc3lzdGVtICE9IG51bGwpIC8vIHRvZG86IGRvbid0IGNoZWNrICJyZXN1bHQiIGhlcmUgaWYgd2Ugd2FudCB0byBjb21waWxlIGFueXdheSwgaWdub3JpbmcgaW52YWxpZCBzY2hlbWFzCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0KLSAgICAgICAgICAgIC8vIGdlbmVyYXRlIHNvdXJjZSBhbmQgLnhzYgotICAgICAgICAgICAgTGlzdCBzb3VyY2VmaWxlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgICAgIHJlc3VsdCAmPSBTY2hlbWFDb2RlR2VuZXJhdG9yLmNvbXBpbGVUeXBlU3lzdGVtKHN5c3RlbSwgc3JjRGlyLCBqYXZhRmlsZXMsIHNvdXJjZXNUb0NvcHlNYXAsIGNsYXNzcGF0aCwgY2xhc3Nlc0Rpciwgb3V0cHV0SmFyLCBub2phdmFjLCBqYXhiLCBlcnJvckxpc3RlbmVyLCByZXBhY2thZ2UsIHZlcmJvc2UsIHNvdXJjZWZpbGVzKTsKLSAgICAgICAgICAgIHJlc3VsdCAmPSAhZXJyb3JMaXN0ZW5lci5oYXNFcnJvcigpOwotCi0gICAgICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZpbmlzaCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgICAgICAgICAgICAgIGlmICghcXVpZXQpCi0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZSB0byBnZW5lcmF0ZSBjb2RlOiAiICsgKChkb3VibGUpKGZpbmlzaCAtIHN0YXJ0KSAvIDEwMDAuMCkgKyAiIHNlY29uZHMiICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGNvbXBpbGUgc291cmNlCi0gICAgICAgICAgICBpZiAocmVzdWx0ICYmICFub2phdmFjKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoamF2YUZpbGVzICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHNvdXJjZWZpbGVzLmFkZEFsbChqYXZhLnV0aWwuQXJyYXlzLmFzTGlzdChqYXZhRmlsZXMpKTsKLSAgICAgICAgICAgICAgICBpZiAoIUNvZGVHZW5VdGlsLmV4dGVybmFsQ29tcGlsZShzb3VyY2VmaWxlcywgY2xhc3Nlc0RpciwgY2xhc3NwYXRoLCBkZWJ1ZywgY29tcGlsZXIsIG1lbW9yeUluaXRpYWxTaXplLCBtZW1vcnlNYXhpbXVtU2l6ZSwgcXVpZXQsIHZlcmJvc2UpKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKLQotICAgICAgICAgICAgICAgIGZpbmlzaCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgIXBhcmFtcy5pc1F1aWV0KCkpCi0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZSB0byBjb21waWxlIGNvZGU6ICIgKyAoKGRvdWJsZSkoZmluaXNoIC0gc3RhcnQpIC8gMTAwMC4wKSArICIgc2Vjb25kcyIgKTsKLQotICAgICAgICAgICAgICAgIC8vIGphciBjbGFzc2VzIGFuZCAueHNiCi0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiBvdXRwdXRKYXIgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghQ29kZUdlblV0aWwuZXh0ZXJuYWxKYXIoY2xhc3Nlc0Rpciwgb3V0cHV0SmFyLCBqYXIsIHF1aWV0LCB2ZXJib3NlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgIXBhcmFtcy5pc1F1aWV0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvbXBpbGVkIHR5cGVzIHRvOiAiICsgb3V0cHV0SmFyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXJlc3VsdCAmJiAhcXVpZXQpCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkJVSUxEIEZBSUxFRCIpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIGNhbGwgc2NoZW1hIGNvbXBpbGVyIGV4dGVuc2lvbiBpZiByZWdpc3RlcmVkCi0gICAgICAgICAgICBydW5FeHRlbnNpb25zKGV4dGVuc2lvbnMsIHN5c3RlbSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY3BSZXNvdXJjZUxvYWRlciAhPSBudWxsKQotICAgICAgICAgICAgY3BSZXNvdXJjZUxvYWRlci5jbG9zZSgpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcnVuRXh0ZW5zaW9ucyhMaXN0IGV4dGVuc2lvbnMsIFNjaGVtYVR5cGVTeXN0ZW0gc3lzdGVtKQotICAgIHsKLSAgICAgICAgaWYgKGV4dGVuc2lvbnMgIT0gbnVsbCAmJiBleHRlbnNpb25zLnNpemUoKSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYUNvbXBpbGVyRXh0ZW5zaW9uIHNjZSA9IG51bGw7Ci0gICAgICAgICAgICBJdGVyYXRvciBpID0gZXh0ZW5zaW9ucy5pdGVyYXRvcigpOwotICAgICAgICAgICAgd2hpbGUgKGkuaGFzTmV4dCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEV4dGVuc2lvbiBleHRlbnNpb24gPSAoRXh0ZW5zaW9uKSBpLm5leHQoKTsKLSAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNjZSA9IChTY2hlbWFDb21waWxlckV4dGVuc2lvbikgZXh0ZW5zaW9uLmdldENsYXNzTmFtZSgpLm5ld0luc3RhbmNlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhdGNoIChJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVOQUJMRSB0byBpbnN0YW50aWF0ZSBzY2hlbWEgY29tcGlsZXIgZXh0ZW5zaW9uOiIgKyBleHRlbnNpb24uZ2V0Q2xhc3NOYW1lKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFWFRFTlNJT04gQ2xhc3Mgd2FzIG5vdCBydW4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSUxMRUdBTCBBQ0NFU1MgRXhjZXB0aW9uIHdoZW4gYXR0ZW1wdGluZyB0byBpbnN0YW50aWF0ZSBzY2hlbWEgY29tcGlsZXIgZXh0ZW5zaW9uOiAiICsgZXh0ZW5zaW9uLmdldENsYXNzTmFtZSgpLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRVhURU5TSU9OIENsYXNzIHdhcyBub3QgcnVuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUnVubmluZyBTY2hlbWEgQ29tcGlsZXIgRXh0ZW5zaW9uOiAiICsgc2NlLmdldEV4dGVuc2lvbk5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgTWFwIGV4dGVuc2lvblBhcm1zID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgICAgICAgICBJdGVyYXRvciBwYXJtc2kgPSBleHRlbnNpb24uZ2V0UGFyYW1zKCkuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAocGFybXNpLmhhc05leHQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEV4dGVuc2lvbi5QYXJhbSBwID0gKEV4dGVuc2lvbi5QYXJhbSkgcGFybXNpLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uUGFybXMucHV0KHAuZ2V0TmFtZSgpLCBwLmdldFZhbHVlKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzY2Uuc2NoZW1hQ29tcGlsZXJFeHRlbnNpb24oc3lzdGVtLCBleHRlbnNpb25QYXJtcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLQotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gd3NkbENvbnRhaW5zRW5jb2RlZChYbWxPYmplY3Qgd3NkbGRvYykKLSAgICB7Ci0gICAgICAgIC8vIHNlYXJjaCBmb3IgYW55IDxzb2FwOmJvZHkgdXNlPSJlbmNvZGVkIi8+IGV0Yy4KLSAgICAgICAgWG1sT2JqZWN0W10gdXNlQXR0cnMgPSB3c2RsZG9jLnNlbGVjdFBhdGgoCi0gICAgICAgICAgICAgICAgImRlY2xhcmUgbmFtZXNwYWNlIHNvYXA9J2h0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8nICIgKwotICAgICAgICAgICAgICAgICIuLy9zb2FwOmJvZHkvQHVzZXwuLy9zb2FwOmhlYWRlci9AdXNlfC4vL3NvYXA6ZmF1bHQvQHVzZSIpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVzZUF0dHJzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoImVuY29kZWQiLmVxdWFscygoKFNpbXBsZVZhbHVlKXVzZUF0dHJzW2ldKS5nZXRTdHJpbmdWYWx1ZSgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxjb21wL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC90b29sL1NjaGVtYUNvbXBpbGVyRXh0ZW5zaW9uLmphdmEgYi92Mi9zcmMveG1sY29tcC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdG9vbC9TY2hlbWFDb21waWxlckV4dGVuc2lvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzBjOWIyLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxjb21wL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC90b29sL1NjaGVtYUNvbXBpbGVyRXh0ZW5zaW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC50b29sOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlU3lzdGVtOwotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IFNjaGVtYSBDb21waWxlciBFeHRlbnNpb25zLiAgQnkgaW1wbGVtZW50aW5nIHRoaXMgY2xhc3MKLSAqICB5b3UgY2FuIHRoZW4gcGFzcyB0aGlzIGNsYXNzIHZpYSB0aGUgY29tbWFuZCBsaW5lIHBhcmFtIDxpPmV4dGVuc2lvbjwvaT4gdG8gdGhlIFNjaGVtYUNvbXBpbGVyIGNsYXNzCi0gKiAgd2hpY2ggd2lsbCB0aGVuIGluIHR1cm4gY2FsbCB0aGlzIGNsYXNzIGJhY2sgb25jZSB0aGUgY29tcGlsYXRpb24gaXMgY29tcGxldGUgd2l0aCB0aGUgcmVzdWx0aW5nCi0gKiAgU2NoZW1hVHlwZVN5c3RlbS4KLSAqLwotcHVibGljIGludGVyZmFjZSBTY2hlbWFDb21waWxlckV4dGVuc2lvbiB7Ci0gICAgLyoqCi0gICAgICogSW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGJhY2sgYnkgdGhlIFhtbEJlYW5zIFNjaGVtYSBDb21waWxlciB3aXRoCi0gICAgICogIHRoZSBTY2hlbWEgVHlwZSBTeXN0ZW0gdGhhdCBoYXMgYmVlbiBjcmVhdGVkIGFzIGEgcmVzdWx0IG9mIHRoZSBjb21waWxlLgotICAgICAqIEBwYXJhbSBzY2hlbWFUeXBlU3lzdGVtIC0gVGhlIHNjaGVtYSB0eXBlIHN5c3RlbXMgdGhhdCBoYXMgYmVlbiBjcmVhdGVkIGJ5IHRoZSBjb21waWxlciBqdXN0IHByaW9yIHRvIGNhbGxpbmcKLSAgICAgKiAgIHRoaXMgZXh0ZW5zaW9uIGNsYXNzLgotICAgICAqIEBwYXJhbSBwYXJtcyAtIG5hbWUgdmFsdWUgcGFpcnMgb2Ygb3B0aW9ucyB0byB0aGlzIHNjaGVtYSBjb21waWxlciBleHRlbnNpb24KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzY2hlbWFDb21waWxlckV4dGVuc2lvbihTY2hlbWFUeXBlU3lzdGVtIHNjaGVtYVR5cGVTeXN0ZW0sIE1hcCBwYXJtcyk7Ci0gICAgcHVibGljIFN0cmluZyBnZXRFeHRlbnNpb25OYW1lKCk7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1sY29tcC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdG9vbC9TY2hlbWFDb3B5LmphdmEgYi92Mi9zcmMveG1sY29tcC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdG9vbC9TY2hlbWFDb3B5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMmM2OTguLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbGNvbXAvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3Rvb2wvU2NoZW1hQ29weS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjg1ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnRvb2w7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5JT1V0aWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS5pbnRlcm5hbC54bWxiZWFucy53c2Rsc3Vic3QuRGVmaW5pdGlvbnNEb2N1bWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLmludGVybmFsLnhtbGJlYW5zLndzZGxzdWJzdC5USW1wb3J0OwotCi1pbXBvcnQgamF2YS5uZXQuVVJJOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLm5ldC5VUklTeW50YXhFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLQotaW1wb3J0IG9yZy53My54MjAwMS54bWxTY2hlbWEuU2NoZW1hRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczLngyMDAxLnhtbFNjaGVtYS5JbXBvcnREb2N1bWVudDsKLWltcG9ydCBvcmcudzMueDIwMDEueG1sU2NoZW1hLkluY2x1ZGVEb2N1bWVudDsKLQotcHVibGljIGNsYXNzIFNjaGVtYUNvcHkKLXsKLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gICAgewotICAgICAgICBpZiAoYXJncy5sZW5ndGggPCAxIHx8IGFyZ3MubGVuZ3RoID4gMikKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVc2FnZTogc2NoZW1hY29weSBzb3VyY2V1cmwgW3RhcmdldGZpbGVdIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBVUkkgc291cmNlID0gbnVsbDsKLSAgICAgICAgVVJJIHRhcmdldCA9IG51bGw7Ci0KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHNvdXJjZSA9IG5ldyBVUkkoYXJnc1swXSk7Ci0gICAgICAgICAgICBzb3VyY2UudG9VUkwoKTsgLy8gdG8gdHJpZ2dlciBleGNlcHRpb24KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiQmFkbHkgZm9ybWVkIFVSTCAiICsgc291cmNlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFVSSSBkaXIgPSBuZXcgRmlsZSgiLiIpLmdldENhbm9uaWNhbEZpbGUoKS50b1VSSSgpOwotICAgICAgICAgICAgICAgIFN0cmluZyBsYXN0UGFydCA9IHNvdXJjZS5nZXRQYXRoKCk7Ci0gICAgICAgICAgICAgICAgbGFzdFBhcnQgPSBsYXN0UGFydC5zdWJzdHJpbmcobGFzdFBhcnQubGFzdEluZGV4T2YoJy8nKSArIDEpOwotICAgICAgICAgICAgICAgIHRhcmdldCA9IENvZGVHZW5VdGlsLnJlc29sdmUoZGlyLCBVUkkuY3JlYXRlKGxhc3RQYXJ0KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJDYW5ub3QgY2Fub25pY2FsaXplIGN1cnJlbnQgZGlyZWN0b3J5Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3IFVSSShhcmdzWzFdKTsKLSAgICAgICAgICAgICAgICBpZiAoIXRhcmdldC5pc0Fic29sdXRlKCkpCi0gICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIXRhcmdldC5nZXRTY2hlbWUoKS5lcXVhbHMoImZpbGUiKSkKLSAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0YXJnZXQgPSBudWxsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXcgRmlsZSh0YXJnZXQpLmdldENhbm9uaWNhbEZpbGUoKS50b1VSSSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkNhbm5vdCBjYW5vbmljYWxpemUgY3VycmVudCBkaXJlY3RvcnkiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIE1hcCB0aGluZ3NUb0NvcHkgPSBmaW5kQWxsUmVsYXRpdmUoc291cmNlLCB0YXJnZXQpOwotICAgICAgICBjb3B5QWxsKHRoaW5nc1RvQ29weSwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjb3B5QWxsKE1hcCB1cmlNYXAsIGJvb2xlYW4gc3Rkb3V0KQotICAgIHsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gdXJpTWFwLmtleVNldCgpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFVSSSBzb3VyY2UgPSAoVVJJKWkubmV4dCgpOwotICAgICAgICAgICAgVVJJIHRhcmdldCA9IChVUkkpdXJpTWFwLmdldChzb3VyY2UpOwotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSU9VdGlsLmNvcHlDb21wbGV0ZWx5KHNvdXJjZSwgdGFyZ2V0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoc3Rkb3V0KQotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNvdWxkIG5vdCBjb3B5ICIgKyBzb3VyY2UgKyAiIC0+ICIgKyB0YXJnZXQpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHN0ZG91dCkKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29waWVkICIgKyBzb3VyY2UgKyAiIC0+ICIgKyB0YXJnZXQpOwotICAgICAgICB9Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBDb3BpZXMgdGhlIHNjaGVtYSBvciB3c2RsIGF0IHRoZSBzb3VyY2UgVVJJIHRvIHRoZSB0YXJnZXQgVVJJLCBhbG9uZwotICAgICAqIHdpdGggYW55IHJlbGF0aXZlIHJlZmVyZW5jZXMuICBUaGUgdGFyZ2V0IFVSSSBzaG91bGQgYmUgYSBmaWxlIFVSSS4KLSAgICAgKiBJZiBkb0NvcHkgaXMgZmFsc2UsIHRoZSBmaWxlIGNvcGllcyBhcmUgbm90IGFjdHVhbGx5IGRvbmU7IHRoZSBtYXAKLSAgICAgKiByZXR1cm5lZCBqdXN0IGRlc2NyaWJlcyB0aGUgY29waWVzIHRoYXQgd291bGQgaGF2ZSBiZWVuIGRvbmUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gc291cmNlIGFuIGFyYml0cmFyeSBVUkkgZGVzY3JpYmluZyBhIHNvdXJjZSBTY2hlbWEgb3IgV1NETAotICAgICAqIEBwYXJhbSB0YXJnZXQgYSBmaWxlIFVSSSBkZXNjcmliaW5nIGEgdGFyZ2V0IGZpbGVuYW1lCi0gICAgICogQHJldHVybiBhIG1hcCBvZiBhbGwgdGhlIHNvdXJjZS90YXJnZXQgVVJJcyBuZWVkZWQgdG8gY29weQotICAgICAqIHRoZSBmaWxlIGFsb25nIHdpdGggYWxsIGl0cyByZWxhdGl2ZSByZWZlcmVudHMuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBNYXAgZmluZEFsbFJlbGF0aXZlKFVSSSBzb3VyY2UsIFVSSSB0YXJnZXQpCi0gICAgewotICAgICAgICBNYXAgcmVzdWx0ID0gbmV3IExpbmtlZEhhc2hNYXAoKTsKLSAgICAgICAgcmVzdWx0LnB1dChzb3VyY2UsIHRhcmdldCk7Ci0KLSAgICAgICAgTGlua2VkTGlzdCBwcm9jZXNzID0gbmV3IExpbmtlZExpc3QoKTsKLSAgICAgICAgcHJvY2Vzcy5hZGQoc291cmNlKTsKLQotICAgICAgICB3aGlsZSAoIXByb2Nlc3MuaXNFbXB0eSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBVUkkgbmV4dFNvdXJjZSA9IChVUkkpcHJvY2Vzcy5yZW1vdmVGaXJzdCgpOwotICAgICAgICAgICAgVVJJIG5leHRUYXJnZXQgPSAoVVJJKXJlc3VsdC5nZXQobmV4dFNvdXJjZSk7Ci0gICAgICAgICAgICBNYXAgbmV4dFJlc3VsdHMgPSBmaW5kUmVsYXRpdmVJbk9uZShuZXh0U291cmNlLCBuZXh0VGFyZ2V0KTsKLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IG5leHRSZXN1bHRzLmtleVNldCgpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVVJJIG5ld1NvdXJjZSA9IChVUkkpaS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jb250YWluc0tleShuZXdTb3VyY2UpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICByZXN1bHQucHV0KG5ld1NvdXJjZSwgbmV4dFJlc3VsdHMuZ2V0KG5ld1NvdXJjZSkpOwotICAgICAgICAgICAgICAgIHByb2Nlc3MuYWRkKG5ld1NvdXJjZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBYbWxPcHRpb25zIGxvYWRPcHRpb25zID0gbmV3IFhtbE9wdGlvbnMoKS4KLSAgICAgICAgICAgIHNldExvYWRTdWJzdGl0dXRlTmFtZXNwYWNlcyhDb2xsZWN0aW9ucy5zaW5nbGV0b25NYXAoCi0gICAgICAgICAgICAgICAgICAgICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIsICJodHRwOi8vd3d3LmFwYWNoZS5vcmcvaW50ZXJuYWwveG1sYmVhbnMvd3NkbHN1YnN0IiAKLSAgICAgICAgICAgICkpOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgTWFwIGZpbmRSZWxhdGl2ZUluT25lKFVSSSBzb3VyY2UsIFVSSSB0YXJnZXQpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgVVJMIHNvdXJjZVVSTCA9IHNvdXJjZS50b1VSTCgpOwotICAgICAgICAgICAgWG1sT2JqZWN0IHhvYmogPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZShzb3VyY2VVUkwsIGxvYWRPcHRpb25zKTsKLSAgICAgICAgICAgIFhtbEN1cnNvciB4Y3VyID0geG9iai5uZXdDdXJzb3IoKTsKLSAgICAgICAgICAgIHhjdXIudG9GaXJzdENoaWxkKCk7Ci0KLSAgICAgICAgICAgIE1hcCByZXN1bHQgPSBuZXcgTGlua2VkSGFzaE1hcCgpOwotCi0gICAgICAgICAgICBpZiAoeG9iaiBpbnN0YW5jZW9mIFNjaGVtYURvY3VtZW50KQotICAgICAgICAgICAgICAgIHB1dE1hcHBpbmdzRnJvbVNjaGVtYShyZXN1bHQsIHNvdXJjZSwgdGFyZ2V0LCAoKFNjaGVtYURvY3VtZW50KXhvYmopLmdldFNjaGVtYSgpKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHhvYmogaW5zdGFuY2VvZiBEZWZpbml0aW9uc0RvY3VtZW50KQotICAgICAgICAgICAgICAgIHB1dE1hcHBpbmdzRnJvbVdzZGwocmVzdWx0LCBzb3VyY2UsIHRhcmdldCwgKChEZWZpbml0aW9uc0RvY3VtZW50KXhvYmopLmdldERlZmluaXRpb25zKCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGFueSBleGNlcHRpb25zIHBhcnNpbmcgdGhlIGdpdmVuIFVSTD8gIFRoZW4gc2tpcCB0aGlzIGZpbGUgc2lsZW50bHkKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMuRU1QVFlfTUFQOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcHV0TmV3TWFwcGluZyhNYXAgcmVzdWx0LCBVUkkgb3JpZ1NvdXJjZSwgVVJJIG9yaWdUYXJnZXQsIFN0cmluZyBsaXRlcmFsVVJJKQotICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChsaXRlcmFsVVJJID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgVVJJIG5ld1JlbGF0aXZlID0gbmV3IFVSSShsaXRlcmFsVVJJKTsKLSAgICAgICAgICAgIGlmIChuZXdSZWxhdGl2ZS5pc0Fic29sdXRlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgVVJJIG5ld1NvdXJjZSA9IENvZGVHZW5VdGlsLnJlc29sdmUob3JpZ1NvdXJjZSwgbmV3UmVsYXRpdmUpOwotICAgICAgICAgICAgVVJJIG5ld1RhcmdldCA9IENvZGVHZW5VdGlsLnJlc29sdmUob3JpZ1RhcmdldCwgbmV3UmVsYXRpdmUpOwotICAgICAgICAgICAgcmVzdWx0LnB1dChuZXdTb3VyY2UsIG5ld1RhcmdldCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFVSSVN5bnRheEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyB1cmkgc3ludGF4IHByb2JsZW0/IGRvIG5vdGhpbmcgc2lsZW50bHkuCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHB1dE1hcHBpbmdzRnJvbVNjaGVtYShNYXAgcmVzdWx0LCBVUkkgc291cmNlLCBVUkkgdGFyZ2V0LCBTY2hlbWFEb2N1bWVudC5TY2hlbWEgc2NoZW1hKQotICAgIHsKLSAgICAgICAgSW1wb3J0RG9jdW1lbnQuSW1wb3J0W10gaW1wb3J0cyA9IHNjaGVtYS5nZXRJbXBvcnRBcnJheSgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGltcG9ydHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICBwdXROZXdNYXBwaW5nKHJlc3VsdCwgc291cmNlLCB0YXJnZXQsIGltcG9ydHNbaV0uZ2V0U2NoZW1hTG9jYXRpb24oKSk7Ci0KLSAgICAgICAgSW5jbHVkZURvY3VtZW50LkluY2x1ZGVbXSBpbmNsdWRlcyA9IHNjaGVtYS5nZXRJbmNsdWRlQXJyYXkoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbmNsdWRlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHB1dE5ld01hcHBpbmcocmVzdWx0LCBzb3VyY2UsIHRhcmdldCwgaW5jbHVkZXNbaV0uZ2V0U2NoZW1hTG9jYXRpb24oKSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBwdXRNYXBwaW5nc0Zyb21Xc2RsKE1hcCByZXN1bHQsIFVSSSBzb3VyY2UsIFVSSSB0YXJnZXQsIERlZmluaXRpb25zRG9jdW1lbnQuRGVmaW5pdGlvbnMgd2RvYykKLSAgICB7Ci0gICAgICAgIFhtbE9iamVjdFtdIHR5cGVzID0gd2RvYy5nZXRUeXBlc0FycmF5KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYURvY3VtZW50LlNjaGVtYVtdIHNjaGVtYXMgPSAoU2NoZW1hRG9jdW1lbnQuU2NoZW1hW10pdHlwZXNbaV0uc2VsZWN0UGF0aCgiZGVjbGFyZSBuYW1lc3BhY2UgeHM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJyB4czpzY2hlbWEiKTsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2NoZW1hcy5sZW5ndGg7IGorKykKLSAgICAgICAgICAgICAgICBwdXRNYXBwaW5nc0Zyb21TY2hlbWEocmVzdWx0LCBzb3VyY2UsIHRhcmdldCwgc2NoZW1hc1tqXSk7Ci0gICAgICAgIH0KLQotICAgICAgICBUSW1wb3J0W10gaW1wb3J0cyA9IHdkb2MuZ2V0SW1wb3J0QXJyYXkoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbXBvcnRzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgcHV0TmV3TWFwcGluZyhyZXN1bHQsIHNvdXJjZSwgdGFyZ2V0LCBpbXBvcnRzW2ldLmdldExvY2F0aW9uKCkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxjb21wL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC90b29sL1NjaGVtYUltcG9ydFJlc29sdmVyLmphdmEgYi92Mi9zcmMveG1sY29tcC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdG9vbC9TY2hlbWFJbXBvcnRSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDNjODJmLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxjb21wL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC90b29sL1NjaGVtYUltcG9ydFJlc29sdmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODggKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudG9vbDsKLQotaW1wb3J0IG9yZy53My54MjAwMS54bWxTY2hlbWEuU2NoZW1hRG9jdW1lbnQuU2NoZW1hOwotaW1wb3J0IG9yZy53My54MjAwMS54bWxTY2hlbWEuSW1wb3J0RG9jdW1lbnQuSW1wb3J0OwotaW1wb3J0IG9yZy53My54MjAwMS54bWxTY2hlbWEuSW5jbHVkZURvY3VtZW50LkluY2x1ZGU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBTY2hlbWFJbXBvcnRSZXNvbHZlcgotewotICAgIC8qKgotICAgICAqIENhbGxlZCB3aGVuIHRoZSBJbXBvcnRMb2FkZXIgd2lzaGVzIHRvIHJlc29sdmUgdGhlCi0gICAgICogZ2l2ZW4gaW1wb3J0LiAgU2hvdWxkIHJldHVybiBhIFNjaGVtYVJlc291cmNlIHdob3NlCi0gICAgICogImVxdWFscyIgcmVsYXRpb25zaGlwIHJldmVhbHMgd2hlbiBhIFNjaGVtYVJlc291cmNlIGlzCi0gICAgICogZHVwbGljYXRlZCBhbmQgc2hvdWxkbid0IGJlIGV4YW1pbmVkIGFnYWluLgotICAgICAqCi0gICAgICogUmV0dXJucyBudWxsIGlmIHRoZSByZXNvdXJjZSByZWZlcmVuY2Ugc2hvdWxkIGJlIGlnbm9yZWQuCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IFNjaGVtYVJlc291cmNlIGxvb2t1cFJlc291cmNlKFN0cmluZyBuc1VSSSwgU3RyaW5nIFVSTCk7Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsZWQgdG8gbm90aWZ5IHRoYXQgdGhlIGV4cGVjdGVkIG5hbWVzcGFjZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUKLSAgICAgKiBhY3R1YWwgbmFtZXNwYWNlLCBvciBpZiBubyBuYW1lc3BhY2UgaXMga25vd24sIHRvIHJlcG9ydCB0aGUKLSAgICAgKiBkaXNjb3ZlcmVkIG5hbWVzcGFjZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCByZXBvcnRBY3R1YWxOYW1lc3BhY2UoU2NoZW1hUmVzb3VyY2UgcmVzb3VyY2UsIFN0cmluZyBhY3R1YWxOYW1lc3BhY2UpOwotCi0gICAgLyoqCi0gICAgICogVXNlZCB0byBzdXBwbHkgYSBzY2hlbWEgcmVzb3VyY2Ugd2l0aCBhbiBvcHRpb25hbCBhc3NvY2lhdGVkCi0gICAgICogZXhwZWN0ZWQtbmFtZXNwYWNlLVVSSSBhbmQgb3JpZ2luYWwtbG9jYXRpb24tVVJMLgotICAgICAqCi0gICAgICogVGhlIGVxdWFscyAoYW5kIGhhc2hDb2RlKSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIFNjaGVtYVJlc291cmNlCi0gICAgICogb2JqZWN0cyB3aWxsIGJlIHVzZWQgdG8gYXZvaWQgZXhhbWluaW5nIHRoZSBzYW1lIHJlc291cmNlIHR3aWNlOwotICAgICAqIHRoZXNlIG11c3QgYmUgaW1wbGVtZW50ZWQgYWNjb3JkaW5nIHRvIHRoZSBkZXNpcmVkIHJ1bGVzIGZvcgotICAgICAqIGRldGVybWluaW5nIHRoYXQgdHdvIHJlc291cmNlcyBhcmUgdGhlIHNhbWUuCi0gICAgICovCi0gICAgcHVibGljIGludGVyZmFjZSBTY2hlbWFSZXNvdXJjZQotICAgIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJldHVybnMgYSBwYXJzZWQgc2NoZW1hIG9iamVjdC4KLSAgICAgICAgICovCi0KLSAgICAgICAgcHVibGljIFNjaGVtYSBnZXRTY2hlbWEoKTsKLQotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZSgpOwotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFNjaGVtYUxvY2F0aW9uKCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgcmVzb2x2ZUltcG9ydHMoU2NoZW1hUmVzb3VyY2VbXSByZXNvdXJjZXMpCi0gICAgewotICAgICAgICBMaW5rZWRMaXN0IHF1ZXVlT2ZSZXNvdXJjZXMgPSBuZXcgTGlua2VkTGlzdChBcnJheXMuYXNMaXN0KHJlc291cmNlcykpOwotICAgICAgICBMaW5rZWRMaXN0IHF1ZXVlT2ZMb2NhdG9ycyA9IG5ldyBMaW5rZWRMaXN0KCk7Ci0gICAgICAgIFNldCBzZWVuUmVzb3VyY2VzID0gbmV3IEhhc2hTZXQoKTsKLQotICAgICAgICBmb3IgKDs7KQotICAgICAgICB7Ci0gICAgICAgICAgICBTY2hlbWFSZXNvdXJjZSBuZXh0UmVzb3VyY2U7Ci0KLSAgICAgICAgICAgIC8vIGZldGNoIG5leHQgcmVzb3VyY2UuCi0gICAgICAgICAgICBpZiAoIXF1ZXVlT2ZSZXNvdXJjZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIGVpdGhlciBvZmYgdGhlIGluaXRpYWwgcXVldWUKLSAgICAgICAgICAgICAgICBuZXh0UmVzb3VyY2UgPSAoU2NoZW1hUmVzb3VyY2UpcXVldWVPZlJlc291cmNlcy5yZW1vdmVGaXJzdCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoIXF1ZXVlT2ZMb2NhdG9ycy5pc0VtcHR5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gb3Igb2ZmIHRoZSBsaXN0IG9mIGxvY2F0b3JzCi0gICAgICAgICAgICAgICAgU2NoZW1hTG9jYXRvciBsb2NhdG9yID0gKFNjaGVtYUxvY2F0b3IpcXVldWVPZkxvY2F0b3JzLnJlbW92ZUZpcnN0KCk7Ci0gICAgICAgICAgICAgICAgbmV4dFJlc291cmNlID0gbG9va3VwUmVzb3VyY2UobG9jYXRvci5uYW1lc3BhY2UsIGxvY2F0b3Iuc2NoZW1hTG9jYXRpb24pOwotICAgICAgICAgICAgICAgIGlmIChuZXh0UmVzb3VyY2UgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gaWYgbm8gbW9yZSwgdGhlbiB0ZXJtaW5hdGUgbG9vcAotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyB0cmFjayBhbmQgc2tpcCBkdXBsaWNhdGVzCi0gICAgICAgICAgICBpZiAoc2VlblJlc291cmNlcy5jb250YWlucyhuZXh0UmVzb3VyY2UpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgc2VlblJlc291cmNlcy5hZGQobmV4dFJlc291cmNlKTsKLQotICAgICAgICAgICAgLy8gZ2V0IHJlc291cmNlIGNvbnRlbnRzCi0gICAgICAgICAgICBTY2hlbWEgc2NoZW1hID0gbmV4dFJlc291cmNlLmdldFNjaGVtYSgpOwotICAgICAgICAgICAgaWYgKHNjaGVtYSA9PSBudWxsKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAvLyBjaGVjayBhY3R1YWwgbmFtZXNwYWNlCi0gICAgICAgICAgICBTdHJpbmcgYWN0dWFsVGFyZ2V0TmFtZXNwYWNlID0gc2NoZW1hLmdldFRhcmdldE5hbWVzcGFjZSgpOwotICAgICAgICAgICAgaWYgKGFjdHVhbFRhcmdldE5hbWVzcGFjZSA9PSBudWxsKQotICAgICAgICAgICAgICAgIGFjdHVhbFRhcmdldE5hbWVzcGFjZSA9ICIiOwotCi0gICAgICAgICAgICAvLyByZXBvcnQgYWN0dWFsIG5hbWVzcGFjZQotICAgICAgICAgICAgU3RyaW5nIGV4cGVjdGVkVGFyZ2V0TmFtZXNwYWNlID0gbmV4dFJlc291cmNlLmdldE5hbWVzcGFjZSgpOwotICAgICAgICAgICAgaWYgKGV4cGVjdGVkVGFyZ2V0TmFtZXNwYWNlID09IG51bGwgfHwKLSAgICAgICAgICAgICAgICAgICAgIWFjdHVhbFRhcmdldE5hbWVzcGFjZS5lcXVhbHMoZXhwZWN0ZWRUYXJnZXROYW1lc3BhY2UpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlcG9ydEFjdHVhbE5hbWVzcGFjZShuZXh0UmVzb3VyY2UsIGFjdHVhbFRhcmdldE5hbWVzcGFjZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIG5vdyBnbyB0aHJvdWdoIGFuZCByZWNvcmQgYWxsIHRoZSBpbXBvcnRzCi0gICAgICAgICAgICBJbXBvcnRbXSBzY2hlbWFJbXBvcnRzID0gc2NoZW1hLmdldEltcG9ydEFycmF5KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNjaGVtYUltcG9ydHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcXVldWVPZkxvY2F0b3JzLmFkZChuZXcgU2NoZW1hTG9jYXRvcihzY2hlbWFJbXBvcnRzW2ldLmdldE5hbWVzcGFjZSgpID09IG51bGwgPyAiIiA6IHNjaGVtYUltcG9ydHNbaV0uZ2V0TmFtZXNwYWNlKCksIHNjaGVtYUltcG9ydHNbaV0uZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBhbmQgcmVjb3JkIGFsbCB0aGUgaW5jbHVkZXMgdG9vCi0gICAgICAgICAgICBJbmNsdWRlW10gc2NoZW1hSW5jbHVkZXMgPSBzY2hlbWEuZ2V0SW5jbHVkZUFycmF5KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNjaGVtYUluY2x1ZGVzLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHF1ZXVlT2ZMb2NhdG9ycy5hZGQobmV3IFNjaGVtYUxvY2F0b3IobnVsbCwgc2NoZW1hSW5jbHVkZXNbaV0uZ2V0U2NoZW1hTG9jYXRpb24oKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU2NoZW1hTG9jYXRvcgotICAgIHsKLSAgICAgICAgcHVibGljIFNjaGVtYUxvY2F0b3IoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIHNjaGVtYUxvY2F0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLm5hbWVzcGFjZSA9IG5hbWVzcGFjZTsKLSAgICAgICAgICAgIHRoaXMuc2NoZW1hTG9jYXRpb24gPSBzY2hlbWFMb2NhdGlvbjsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgbmFtZXNwYWNlOwotICAgICAgICBwdWJsaWMgZmluYWwgU3RyaW5nIHNjaGVtYUxvY2F0aW9uOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxjb21wL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC90b29sL1NjaGVtYVJlc291cmNlTWFuYWdlci5qYXZhIGIvdjIvc3JjL3htbGNvbXAvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3Rvb2wvU2NoZW1hUmVzb3VyY2VNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkODgyMzQuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbGNvbXAvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3Rvb2wvU2NoZW1hUmVzb3VyY2VNYW5hZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMTAgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudG9vbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uSU9VdGlsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlRmlsdGVyOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLXB1YmxpYyBjbGFzcyBTY2hlbWFSZXNvdXJjZU1hbmFnZXIgZXh0ZW5kcyBCYXNlU2NoZW1hUmVzb3VyY2VNYW5hZ2VyCi17Ci0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBpZiAoYXJncy5sZW5ndGggPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNYWludGFpbnMgXCJ4c2Rvd25sb2FkLnhtbFwiLCBhbiBpbmRleCBvZiBsb2NhbGx5IGRvd25sb2FkZWQgLnhzZCBmaWxlcyIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ1c2FnZTogc2Rvd25sb2FkIFstZGlyIGRpcmVjdG9yeV0gWy1yZWZyZXNoXSBbLXJlY3Vyc2VdIFstc3luY10gW3VybC9maWxlLi4uXSIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIiKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVVJMcyB0aGF0IGFyZSBzcGVjaWZpZWQgYXJlIGRvd25sb2FkZWQgaWYgdGhleSBhcmVuJ3QgYWxyZWFkeSBjYWNoZWQuIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkluIGFkZGl0aW9uOiIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIC1kaXIgc3BlY2lmaWVzIHRoZSBkaXJlY3RvcnkgZm9yIHRoZSB4c2Rvd25sb2FkLnhtbCBmaWxlIChkZWZhdWx0IC4pLiIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIC1zeW5jIHN5bmNocm9uaXplcyB0aGUgaW5kZXggdG8gYW55IGxvY2FsIC54c2QgZmlsZXMgaW4gdGhlIHRyZWUuIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgLXJlY3Vyc2UgcmVjdXJzaXZlbHkgZG93bmxvYWRzIGltcG9ydGVkIGFuZCBpbmNsdWRlZCAueHNkIGZpbGVzLiIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIC1yZWZyZXNoIHJlZG93bmxvYWRzIGFsbCBpbmRleGVkIC54c2QgZmlsZXMuIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIklmIG5vIGZpbGVzIG9yIFVSTHMgYXJlIHNwZWNpZmllZCwgYWxsIGluZGV4ZWQgZmlsZXMgYXJlIHJlbGV2YW50LiIpOwotICAgICAgICAgICAgU3lzdGVtLmV4aXQoMCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBTZXQgb3B0cyA9IG5ldyBIYXNoU2V0KCk7Ci0gICAgICAgIG9wdHMuYWRkKCJkaXIiKTsKLSAgICAgICAgQ29tbWFuZExpbmUgY2wgPSBuZXcgQ29tbWFuZExpbmUoYXJncywgb3B0cyk7Ci0gICAgICAgIGlmIChjbC5nZXRPcHQoImxpY2Vuc2UiKSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBDb21tYW5kTGluZS5wcmludExpY2Vuc2UoKTsKLSAgICAgICAgICAgIFN5c3RlbS5leGl0KDApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBhcmdzID0gY2wuYXJncygpOwotCi0gICAgICAgIGJvb2xlYW4gc3luYyA9IChjbC5nZXRPcHQoInN5bmMiKSAhPSBudWxsKTsKLSAgICAgICAgYm9vbGVhbiByZWZyZXNoID0gKGNsLmdldE9wdCgicmVmcmVzaCIpICE9IG51bGwpOwotICAgICAgICBib29sZWFuIGltcG9ydHMgPSAoY2wuZ2V0T3B0KCJyZWN1cnNlIikgIT0gbnVsbCk7Ci0gICAgICAgIFN0cmluZyBkaXIgPSBjbC5nZXRPcHQoImRpciIpOwotICAgICAgICBpZiAoZGlyID09IG51bGwpCi0gICAgICAgICAgICBkaXIgPSAiLiI7Ci0gICAgICAgIEZpbGUgZGlyZWN0b3J5ID0gbmV3IEZpbGUoZGlyKTsKLQotICAgICAgICBTY2hlbWFSZXNvdXJjZU1hbmFnZXIgbWdyOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgbWdyID0gbmV3IFNjaGVtYVJlc291cmNlTWFuYWdlcihkaXJlY3RvcnkpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGUuZ2V0TWVzc2FnZSgpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBMaXN0IHVyaUxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIExpc3QgZmlsZUxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGxvb2tzTGlrZVVSTChhcmdzW2ldKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1cmlMaXN0LmFkZChhcmdzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmaWxlTGlzdC5hZGQobmV3IEZpbGUoZGlyZWN0b3J5LCBhcmdzW2ldKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBkZWFsIHdpdGggZmlsZXMgdGhhdCBhcmUgbm90IGluIHRoZSBwcm9wZXIgZGlyZWN0b3J5Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGZpbGVMaXN0Lml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZpbGUgZmlsZSA9IChGaWxlKWkubmV4dCgpOwotICAgICAgICAgICAgaWYgKCFpc0luRGlyZWN0b3J5KGZpbGUsIGRpcmVjdG9yeSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJGaWxlIG5vdCB3aXRoaW4gZGlyZWN0b3J5OiAiICsgZmlsZSk7Ci0gICAgICAgICAgICAgICAgaS5yZW1vdmUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIGRlYWwgd2l0aCBkaXJlY3RvcmllcwotICAgICAgICBmaWxlTGlzdCA9IGNvbGxlY3RYU0RGaWxlcygoRmlsZVtdKWZpbGVMaXN0LnRvQXJyYXkobmV3IEZpbGVbMF0pKTsKLQotICAgICAgICBTdHJpbmdbXSB1cmlzID0gKFN0cmluZ1tdKXVyaUxpc3QudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKLSAgICAgICAgRmlsZVtdIGZpbGVzID0gKEZpbGVbXSlmaWxlTGlzdC50b0FycmF5KG5ldyBGaWxlWzBdKTsKLSAgICAgICAgU3RyaW5nW10gZmlsZW5hbWVzID0gcmVsYXRpdmVGaWxlbmFtZXMoZmlsZXMsIGRpcmVjdG9yeSk7Ci0KLSAgICAgICAgaWYgKHVyaXMubGVuZ3RoICsgZmlsZW5hbWVzLmxlbmd0aCA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1nci5wcm9jZXNzKHVyaXMsIGZpbGVuYW1lcywgc3luYywgcmVmcmVzaCwgaW1wb3J0cyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBtZ3IucHJvY2Vzc0FsbChzeW5jLCByZWZyZXNoLCBpbXBvcnRzKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1nci53cml0ZUNhY2hlKCk7Ci0gICAgICAgIFN5c3RlbS5leGl0KDApOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gbG9va3NMaWtlVVJMKFN0cmluZyBzdHIpCi0gICAgewotICAgICAgICByZXR1cm4gc3RyLnN0YXJ0c1dpdGgoImh0dHA6IikgfHwgc3RyLnN0YXJ0c1dpdGgoImh0dHBzOiIpIHx8IHN0ci5zdGFydHNXaXRoKCJmdHA6IikgfHwgc3RyLnN0YXJ0c1dpdGgoImZpbGU6Iik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHJlbGF0aXZlRmlsZW5hbWUoRmlsZSBmaWxlLCBGaWxlIGRpcmVjdG9yeSkKLSAgICB7Ci0gICAgICAgIGlmIChmaWxlID09IG51bGwgfHwgZmlsZS5lcXVhbHMoZGlyZWN0b3J5KSkKLSAgICAgICAgICAgIHJldHVybiAiLiI7Ci0gICAgICAgIHJldHVybiByZWxhdGl2ZUZpbGVuYW1lKGZpbGUuZ2V0UGFyZW50RmlsZSgpLCBkaXJlY3RvcnkpICsgIi8iICsgZmlsZS5nZXROYW1lKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gcmVsYXRpdmVGaWxlbmFtZXMoRmlsZVtdIGZpbGVzLCBGaWxlIGRpcmVjdG9yeSkKLSAgICB7Ci0gICAgICAgIFN0cmluZ1tdIHJlc3VsdCA9IG5ldyBTdHJpbmdbZmlsZXMubGVuZ3RoXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0W2ldID0gcmVsYXRpdmVGaWxlbmFtZShmaWxlc1tpXSwgZGlyZWN0b3J5KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbkRpcmVjdG9yeShGaWxlIGZpbGUsIEZpbGUgZGlyKQotICAgIHsKLSAgICAgICAgaWYgKGZpbGUgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGZpbGUuZXF1YWxzKGRpcikpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGlzSW5EaXJlY3RvcnkoZmlsZS5nZXRQYXJlbnRGaWxlKCksIGRpcik7Ci0gICAgfQotCi0KLQotCi0KLSAgICBwdWJsaWMgU2NoZW1hUmVzb3VyY2VNYW5hZ2VyKEZpbGUgZGlyZWN0b3J5KQotICAgIHsKLSAgICAgICAgX2RpcmVjdG9yeSA9IGRpcmVjdG9yeTsKLSAgICAgICAgaW5pdCgpOwotICAgIH0KLQotICAgIHByaXZhdGUgRmlsZSBfZGlyZWN0b3J5OwotCi0KLSAgICAvLyBTT01FIE1FVEhPRFMgVE8gT1ZFUlJJREUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gICAgLyoqCi0gICAgICogU2VuZHMgbWVzc2FnZXMgdG8gU3lzdGVtLm91dC4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCB3YXJuaW5nKFN0cmluZyBtc2cpCi0gICAgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obXNnKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGZpbGVuYW1lIGV4aXN0cy4gIFRoZSBmaWxlbmFtZXMKLSAgICAgKiBhcmUgb2YgdGhlIGZvcm0gIi9mb28vYmFyL3plZS54c2QiIGFuZCBzaG91bGQgYmUgY29uc3RydWVkCi0gICAgICogYXMgcm9vdGVkIGF0IHRoZSByb290IG9mIHRoZSBwcm9qZWN0LgotICAgICAqLwotICAgIHByb3RlY3RlZCBib29sZWFuIGZpbGVFeGlzdHMoU3RyaW5nIGZpbGVuYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChuZXcgRmlsZShfZGlyZWN0b3J5LCBmaWxlbmFtZSkpLmV4aXN0cygpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIGRhdGEgaW4gdGhlIGdpdmVuIGZpbGVuYW1lIGFzIGFuIElucHV0U3RyZWFtLgotICAgICAqLwotICAgIHByb3RlY3RlZCBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbUZvckZpbGUoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgRmlsZUlucHV0U3RyZWFtKG5ldyBGaWxlKF9kaXJlY3RvcnksIGZpbGVuYW1lKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogV3JpdGVzIGFuIGVudGlyZSBmaWxlIGluIG9uZSBzdGVwLiAgQW4gSW5wdXRTdHJlYW0gaXMgcGFzc2VkIGFuZAotICAgICAqIGNvcGllZCB0byB0aGUgZmlsZS4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZUlucHV0U3RyZWFtVG9GaWxlKElucHV0U3RyZWFtIGlucHV0LCBTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgRmlsZSB0YXJnZXRGaWxlID0gbmV3IEZpbGUoX2RpcmVjdG9yeSwgZmlsZW5hbWUpOwotCi0gICAgICAgIEZpbGUgcGFyZW50ID0gdGFyZ2V0RmlsZS5nZXRQYXJlbnRGaWxlKCk7Ci0gICAgICAgIGlmICghcGFyZW50LmV4aXN0cygpKQotICAgICAgICAgICAgcGFyZW50Lm1rZGlycygpOwotICAgICAgICBPdXRwdXRTdHJlYW0gb3V0cHV0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0odGFyZ2V0RmlsZSk7Ci0gICAgICAgIElPVXRpbC5jb3B5Q29tcGxldGVseShpbnB1dCwgb3V0cHV0KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBEZWxldGVzIGEgZmlsZS4gIFNvbWV0aW1lcyBpbW1lZGlhdGVseSBhZnRlciB3cml0aW5nIGEgbmV3IGZpbGUKLSAgICAgKiB3ZSBub3RpY2UgdGhhdCBpdCdzIGV4YWN0bHkgdGhlIHNhbWUgYXMgYW4gZXhpc3RpbmcgZmlsZSBhbmQKLSAgICAgKiB3ZSBkZWxldGUgaXQuIFdlIG5ldmVyIGRlbGV0ZSBhIGZpbGUgdGhhdCB3YXMgZ2l2ZW4gdG8gdXMKLSAgICAgKiBieSB0aGUgdXNlci4KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBkZWxldGVGaWxlKFN0cmluZyBmaWxlbmFtZSkKLSAgICB7Ci0gICAgICAgIG5ldyBGaWxlKF9kaXJlY3RvcnksIGZpbGVuYW1lKS5kZWxldGUoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgdGhlIFhTRCBmaWxlc25hbWVzIGluIHRoZSBwcm9qZWN0LgotICAgICAqLwotICAgIHByb3RlY3RlZCBTdHJpbmdbXSBnZXRBbGxYU0RGaWxlbmFtZXMoKQotICAgIHsKLSAgICAgICAgRmlsZVtdIGFsbEZpbGVzID0gKEZpbGVbXSljb2xsZWN0WFNERmlsZXMobmV3IEZpbGVbXSB7IF9kaXJlY3RvcnkgfSkudG9BcnJheShuZXcgRmlsZVswXSk7Ci0gICAgICAgIHJldHVybiByZWxhdGl2ZUZpbGVuYW1lcyhhbGxGaWxlcywgX2RpcmVjdG9yeSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2ltcGxlIHJlY3Vyc2l2ZSBmaWxlIGZpbHRlciB0byBkbyB0aGUgYWJvdmUuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgTGlzdCBjb2xsZWN0WFNERmlsZXMoRmlsZVtdIGRpcnMpCi0gICAgewotICAgICAgICBMaXN0IGZpbGVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRpcnMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZpbGUgZiA9IGRpcnNbaV07Ci0gICAgICAgICAgICBpZiAoIWYuaXNEaXJlY3RvcnkoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmaWxlcy5hZGQoZik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmlsZXMuYWRkQWxsKGNvbGxlY3RYU0RGaWxlcygKLSAgICAgICAgICAgICAgICAgICAgZi5saXN0RmlsZXMobmV3IEZpbGVGaWx0ZXIoKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBmaWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGZpbGUuaXNEaXJlY3RvcnkoKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5pc0ZpbGUoKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5nZXROYW1lKCkuZW5kc1dpdGgoIi54c2QiKTsgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmaWxlczsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxjb21wL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC90b29sL1R5cGVIaWVyYXJjaHlQcmludGVyLmphdmEgYi92Mi9zcmMveG1sY29tcC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdG9vbC9UeXBlSGllcmFyY2h5UHJpbnRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGUzNjMyLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxjb21wL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC90b29sL1R5cGVIaWVyYXJjaHlQcmludGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjEgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudG9vbDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9uczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJlYW5zOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVN5c3RlbTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5RTmFtZUhlbHBlcjsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotCi1pbXBvcnQgb3JnLnczLngyMDAxLnhtbFNjaGVtYS5TY2hlbWFEb2N1bWVudDsKLQotcHVibGljIGNsYXNzIFR5cGVIaWVyYXJjaHlQcmludGVyCi17Ci0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgQ29tbWFuZExpbmUgY2wgPSBuZXcgQ29tbWFuZExpbmUoYXJncywgQ29sbGVjdGlvbnMuRU1QVFlfU0VUKTsKLSAgICAgICAgaWYgKGNsLmdldE9wdCgibGljZW5zZSIpICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENvbW1hbmRMaW5lLnByaW50TGljZW5zZSgpOwotICAgICAgICAgICAgU3lzdGVtLmV4aXQoMCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNsLmFyZ3MoKS5sZW5ndGggPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQcmludHMgaW5oZXJpdGFuY2UgaGllcmFyY2h5IG9mIHR5cGVzIGRlZmluZWQgaW4gYSBzY2hlbWEuIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVzYWdlOiB4c2R0cmVlIFstbm9hbm9uXSBbLW5vcHZyXSBbLW5vdXBhXSBbLWxpY2Vuc2VdIGZpbGUxLnhzZCBmaWxlMi54c2QgLi4uIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGJvb2xlYW4gbm9hbm9uID0gKGNsLmdldE9wdCgibm9hbm9uIikgIT0gbnVsbCk7Ci0gICAgICAgIGJvb2xlYW4gbm9wdnIgPSAoY2wuZ2V0T3B0KCJub3B2ciIpICE9IG51bGwpOwotICAgICAgICBib29sZWFuIG5vdXBhID0gKGNsLmdldE9wdCgibm91cGEiKSAhPSBudWxsKTsKLSAgICAgICAgCi0gICAgICAgIEZpbGVbXSBzY2hlbWFGaWxlcyA9IGNsLmdldEZpbGVzKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBzdGVwIDE6IGxvYWQgYWxsIHRoZSBmaWxlcwotICAgICAgICBMaXN0IHNkb2NzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNjaGVtYUZpbGVzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzZG9jcy5hZGQoCi0gICAgICAgICAgICAgICAgICAgIFNjaGVtYURvY3VtZW50LkZhY3RvcnkucGFyc2UoCi0gICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFGaWxlc1tpXSwgKG5ldyBYbWxPcHRpb25zKCkpLnNldExvYWRMaW5lTnVtYmVycygpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCBzY2hlbWFGaWxlc1tpXSArICIgbm90IGxvYWRhYmxlOiAiICsgZSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotCi0gICAgICAgIFhtbE9iamVjdFtdIHNjaGVtYXMgPSAoWG1sT2JqZWN0W10pc2RvY3MudG9BcnJheShuZXcgWG1sT2JqZWN0WzBdKTsKLSAgICAgICAgCi0gICAgICAgIC8vIHN0ZXAgMjogY29tcGlsZSBhbGwgdGhlIHNjaGVtYXMKLSAgICAgICAgU2NoZW1hVHlwZVN5c3RlbSB0eXBlU3lzdGVtOwotICAgICAgICBDb2xsZWN0aW9uIGNvbXBFcnJvcnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIFhtbE9wdGlvbnMgc2NoZW1hT3B0aW9ucyA9IG5ldyBYbWxPcHRpb25zKCk7Ci0gICAgICAgIHNjaGVtYU9wdGlvbnMuc2V0RXJyb3JMaXN0ZW5lcihjb21wRXJyb3JzKTsKLSAgICAgICAgc2NoZW1hT3B0aW9ucy5zZXRDb21waWxlRG93bmxvYWRVcmxzKCk7Ci0gICAgICAgIGlmIChub3B2cikKLSAgICAgICAgICAgIHNjaGVtYU9wdGlvbnMuc2V0Q29tcGlsZU5vUHZyUnVsZSgpOwotICAgICAgICBpZiAobm91cGEpCi0gICAgICAgICAgICBzY2hlbWFPcHRpb25zLnNldENvbXBpbGVOb1VwYVJ1bGUoKTsKLSAgICAgICAgCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICB0eXBlU3lzdGVtID0gWG1sQmVhbnMuY29tcGlsZVhzZChzY2hlbWFzLCBYbWxCZWFucy5nZXRCdWlsdGluVHlwZVN5c3RlbSgpLCBzY2hlbWFPcHRpb25zKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoWG1sRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2NoZW1hIGludmFsaWQiKTsKLSAgICAgICAgICAgIGlmIChjb21wRXJyb3JzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgZWxzZSBmb3IgKEl0ZXJhdG9yIGkgPSBjb21wRXJyb3JzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkubmV4dCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gc3RlcCAzOiBnbyB0aHJvdWdoIGFsbCB0aGUgdHlwZXMsIGFuZCBub3RlIHRoZWlyIGJhc2UgdHlwZXMgYW5kIG5hbWVzcGFjZXMKLSAgICAgICAgTWFwIHByZWZpeGVzID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgcHJlZml4ZXMucHV0KCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCAieG1sIik7Ci0gICAgICAgIHByZWZpeGVzLnB1dCgiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCAieHMiKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ4bWxuczp4cz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hXCIiKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoaXMgd2lsbCBiZSBhIG1hcCBvZiAoYmFzZSBTY2hlbWFUeXBlIC0+IENvbGxlY3Rpb24gb2YgZGlyZWN0bHkgZGVydmllZCB0eXBlcykKLSAgICAgICAgTWFwIGNoaWxkVHlwZXMgPSBuZXcgSGFzaE1hcCgpOwotICAgICAgICAKLSAgICAgICAgLy8gYnJlYWR0aGZpcnN0IHRyYXZlcnNhbCBvZiB0aGUgdHlwZSBjb250YWlubWVudCB0cmVlCi0gICAgICAgIExpc3QgYWxsU2VlblR5cGVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBhbGxTZWVuVHlwZXMuYWRkQWxsKEFycmF5cy5hc0xpc3QodHlwZVN5c3RlbS5kb2N1bWVudFR5cGVzKCkpKTsKLSAgICAgICAgYWxsU2VlblR5cGVzLmFkZEFsbChBcnJheXMuYXNMaXN0KHR5cGVTeXN0ZW0uYXR0cmlidXRlVHlwZXMoKSkpOwotICAgICAgICBhbGxTZWVuVHlwZXMuYWRkQWxsKEFycmF5cy5hc0xpc3QodHlwZVN5c3RlbS5nbG9iYWxUeXBlcygpKSk7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbGxTZWVuVHlwZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYVR5cGUgc1R5cGUgPSAoU2NoZW1hVHlwZSlhbGxTZWVuVHlwZXMuZ2V0KGkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyByZWN1cnNlIHRocm91Z2ggbmVzdGVkIGFub255bW91cyB0eXBlcyBhcyB3ZWxsCi0gICAgICAgICAgICBpZiAoIW5vYW5vbikKLSAgICAgICAgICAgICAgICBhbGxTZWVuVHlwZXMuYWRkQWxsKEFycmF5cy5hc0xpc3Qoc1R5cGUuZ2V0QW5vbnltb3VzVHlwZXMoKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyB3ZSdyZSBub3QgaW50ZXJlc3RlZCBpbiBkb2N1bWVudCB0eXBlcywgYXR0cmlidXRlIHR5cGVzLCBvciBjaGFzaW5nIHRoZSBiYXNlIHR5cGUgb2YgYW55VHlwZQotICAgICAgICAgICAgaWYgKHNUeXBlLmlzRG9jdW1lbnRUeXBlKCkgfHwgc1R5cGUuaXNBdHRyaWJ1dGVUeXBlKCkgfHwgc1R5cGUgPT0gWG1sT2JqZWN0LnR5cGUpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIGFzc2lnbiBhIHByZWZpeCB0byB0aGUgbmFtZXNwYWNlIG9mIHRoaXMgdHlwZSBpZiBuZWVkZWQKLSAgICAgICAgICAgIG5vdGVOYW1lc3BhY2UocHJlZml4ZXMsIHNUeXBlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gZW50ZXIgdGhpcyB0eXBlIGluIHRoZSBsaXN0IG9mIGNoaWxkcmVuIG9mIGl0cyBiYXNlIHR5cGUKLSAgICAgICAgICAgIENvbGxlY3Rpb24gY2hpbGRyZW4gPSAoQ29sbGVjdGlvbiljaGlsZFR5cGVzLmdldChzVHlwZS5nZXRCYXNlVHlwZSgpKTsKLSAgICAgICAgICAgIGlmIChjaGlsZHJlbiA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAgICAgICAgIGNoaWxkVHlwZXMucHV0KHNUeXBlLmdldEJhc2VUeXBlKCksIGNoaWxkcmVuKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyB0aGUgZmlyc3QgdGltZSBhIGJ1aWx0aW4gdHlwZSBpcyBzZWVuLCBhZGQgaXQgdG9vICh0byBnZXQgYSBjb21wbGV0ZSB0cmVlIHVwIHRvIGFueVR5cGUpCi0gICAgICAgICAgICAgICAgaWYgKHNUeXBlLmdldEJhc2VUeXBlKCkuaXNCdWlsdGluVHlwZSgpKQotICAgICAgICAgICAgICAgICAgICBhbGxTZWVuVHlwZXMuYWRkKHNUeXBlLmdldEJhc2VUeXBlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2hpbGRyZW4uYWRkKHNUeXBlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gc3RlcCA0OiBwcmludCB0aGUgdHJlZSwgc3RhcnRpbmcgZnJvbSB4czphbnlUeXBlIChpLmUuLCBYbWxPYmplY3QudHlwZSkKLSAgICAgICAgTGlzdCB0eXBlc1RvUHJpbnQgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIHR5cGVzVG9QcmludC5hZGQoWG1sT2JqZWN0LnR5cGUpOwotICAgICAgICBTdHJpbmdCdWZmZXIgc3BhY2VzID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICB3aGlsZSAoIXR5cGVzVG9QcmludC5pc0VtcHR5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYVR5cGUgc1R5cGUgPSAoU2NoZW1hVHlwZSl0eXBlc1RvUHJpbnQucmVtb3ZlKHR5cGVzVG9QcmludC5zaXplKCkgLSAxKTsKLSAgICAgICAgICAgIGlmIChzVHlwZSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHNwYWNlcy5zZXRMZW5ndGgoTWF0aC5tYXgoMCwgc3BhY2VzLmxlbmd0aCgpIC0gMikpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzcGFjZXMgKyAiKy0iICsgUU5hbWVIZWxwZXIucmVhZGFibGUoc1R5cGUsIHByZWZpeGVzKSArIG5vdGVzKHNUeXBlKSk7Ci0gICAgICAgICAgICAgICAgQ29sbGVjdGlvbiBjaGlsZHJlbiA9IChDb2xsZWN0aW9uKWNoaWxkVHlwZXMuZ2V0KHNUeXBlKTsKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW4gIT0gbnVsbCAmJiBjaGlsZHJlbi5zaXplKCkgPiAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3BhY2VzLmFwcGVuZCh0eXBlc1RvUHJpbnQuc2l6ZSgpID09IDAgfHwgdHlwZXNUb1ByaW50LmdldCh0eXBlc1RvUHJpbnQuc2l6ZSgpIC0gMSkgPT0gbnVsbCA/ICIgICIgOiAifCAiKTsKLSAgICAgICAgICAgICAgICAgICAgdHlwZXNUb1ByaW50LmFkZChudWxsKTsKLSAgICAgICAgICAgICAgICAgICAgdHlwZXNUb1ByaW50LmFkZEFsbChjaGlsZHJlbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBub3RlcyhTY2hlbWFUeXBlIHNUeXBlKQotICAgIHsKLSAgICAgICAgaWYgKHNUeXBlLmlzQnVpbHRpblR5cGUoKSkKLSAgICAgICAgICAgIHJldHVybiAiIChidWlsdGluKSI7Ci0gICAgICAgIAotICAgICAgICBpZiAoc1R5cGUuaXNTaW1wbGVUeXBlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc1R5cGUuZ2V0U2ltcGxlVmFyaWV0eSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5MSVNUOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIiAobGlzdCkiOwotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5VTklPTjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICIgKHVuaW9uKSI7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNUeXBlLmdldEVudW1lcmF0aW9uVmFsdWVzKCkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiIChlbnVtZXJhdGlvbikiOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAoc1R5cGUuZ2V0Q29udGVudFR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLk1JWEVEX0NPTlRFTlQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICIgKG1peGVkKSI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuU0lNUExFX0NPTlRFTlQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICIgKGNvbXBsZXgpIjsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICIiOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgbm90ZU5hbWVzcGFjZShNYXAgcHJlZml4ZXMsIFNjaGVtYVR5cGUgc1R5cGUpCi0gICAgewotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gUU5hbWVIZWxwZXIubmFtZXNwYWNlKHNUeXBlKTsKLSAgICAgICAgaWYgKG5hbWVzcGFjZS5lcXVhbHMoIiIpIHx8IHByZWZpeGVzLmNvbnRhaW5zS2V5KG5hbWVzcGFjZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcgYmFzZSA9IFFOYW1lSGVscGVyLnN1Z2dlc3RQcmVmaXgobmFtZXNwYWNlKTsKLSAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGJhc2U7Ci0gICAgICAgIGZvciAoaW50IG4gPSAwOyBwcmVmaXhlcy5jb250YWluc1ZhbHVlKHJlc3VsdCk7IG4gKz0gMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gYmFzZSArIG47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHByZWZpeGVzLnB1dChuYW1lc3BhY2UsIHJlc3VsdCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigieG1sbnM6IiArIHJlc3VsdCArICI9XCIiICsgbmFtZXNwYWNlICsgIlwiIik7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbGNvbXAvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3Rvb2wvWE1MQmVhbi5qYXZhIGIvdjIvc3JjL3htbGNvbXAvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3Rvb2wvWE1MQmVhbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTE4ZmExLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxjb21wL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC90b29sL1hNTEJlYW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczNiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC50b29sOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQudHlwZXMuUGF0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC50eXBlcy5GaWxlU2V0OwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LnR5cGVzLlJlZmVyZW5jZTsKLWltcG9ydCBvcmcuYXBhY2hlLnRvb2xzLmFudC50YXNrZGVmcy5NYXRjaGluZ1Rhc2s7Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQudGFza2RlZnMuSmF2YWM7Ci1pbXBvcnQgb3JnLmFwYWNoZS50b29scy5hbnQudGFza2RlZnMuSmFyOwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LkJ1aWxkRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LkZpbGVTY2FubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUudG9vbHMuYW50LlByb2plY3Q7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEVycm9yOwotCi0vKioKLSAqIE1vZGVsZWQgYWZ0ZXIgQW50J3MgamF2YWMgYW5kIHppcCB0YXNrcy4KLSAqCi0gKiBTY2hlbWEgZmlsZXMgdG8gcHJvY2Vzcywgb3IgZGlyZWN0b3JpZXMgb2Ygc2NoZW1hIGZpbGVzLCBhcmUgc2V0IHdpdGggdGhlICdzY2hlbWEnCi0gKiBhdHRyaWJ1dGUsIGFuZCBjYW4gYmUgZmlsdGVyZWQgd2l0aCAnaW5jbHVkZXMnIGFuZCAnZXhjbHVkZXMnLgotICogQWx0ZXJuYXRpdmVseSwgb25lIG9yIG1vcmUgbmVzdGVkICZsdDtmaWxlc2V0Jmd0OyBlbGVtZW50cyBjYW4gc3BlY2lmeSB0aGUgCi0gKiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gYmUgdXNlZCB0byBnZW5lcmF0ZSB0aGlzIFhNTEJlYW4uCi0gKiBUaGUgaW5jbHVkZSBzZXQgY2FuIGFsc28gZGVmaW5lIC5qYXZhIGZpbGVzIHRoYXQgc2hvdWxkIGJlIGJ1aWx0IGFzIHdlbGwuICAKLSAqIFNlZSB0aGUgRmlsZVNldCBkb2N1bWVudGF0aW9uIGF0IGh0dHA6Ly9qYWthcnRhLmFwYWNoZS5vcmcvYW50L21hbnVhbC9pbmRleC5odG1sCi0gKiBmb3IgaW5zdHJ1Y3Rpb25zIG9uIEZpbGVTZXRzIGlmIHlvdSBhcmUgdW5mYW1pbGlhciB3aXRoIHRoZWlyIHVzYWdlLgotICovCi0KLXB1YmxpYyBjbGFzcyBYTUxCZWFuIGV4dGVuZHMgTWF0Y2hpbmdUYXNrCi17Ci0gICAgcHJpdmF0ZSBBcnJheUxpc3QgICBzY2hlbWFzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIAotICAgIHByaXZhdGUgUGF0aCAgICAgICAgY2xhc3NwYXRoOwotICAgIAotICAgIHByaXZhdGUgRmlsZSAgICAgICAgZGVzdGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWEsCi0gICAgICAgICAgICAgICAgICAgICAgICBzcmNnZW5kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2dlbmRpcjsKLSAgICAKLSAgICBwcml2YXRlIGJvb2xlYW4gICAgIHF1aWV0LAotICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnLAotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemUsCi0gICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNyY29ubHksCi0gICAgICAgICAgICAgICAgICAgICAgICBmYWlsb25lcnJvciA9IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3JrID0gdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVBbnRSdW50aW1lID0gdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVKYXZhUnVudGltZSA9IGZhbHNlOwotICAgIAotICAgIHByaXZhdGUgU3RyaW5nICAgICAgdHlwZXN5c3RlbW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3JrZWRFeGVjdXRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z0xldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5SW5pdGlhbFNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlNYXhpbXVtU2l6ZTsKLSAgICAKLSAgICBwcml2YXRlIExpc3QgICAgICAgIGV4dGVuc2lvbnMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICBwcml2YXRlIEhhc2hNYXAgICAgIF9leHRSb3V0ZXIgPSBuZXcgSGFzaE1hcCg1KTsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBYU0QgPSAiLnhzZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdTREwgPSAiLndzZGwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQVZBID0gIi5qYXZhIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWFNEQ09ORklHID0gIi54c2Rjb25maWciOwotCi0KLSAgICBwdWJsaWMgdm9pZCBleGVjdXRlKCkgdGhyb3dzIEJ1aWxkRXhjZXB0aW9uCi0gICAgewotICAgICAgICAvKiBWQUxJREFUSU9OICovCi0gICAgICAgIC8vcmVxdWlyZWQKLSAgICAgICAgaWYgKHNjaGVtYXMuc2l6ZSgpID09IDAKLSAgICAgICAgICAgICYmIHNjaGVtYSA9PSBudWxsCi0gICAgICAgICAgICAmJiBmaWxlc2V0LmdldERpcihwcm9qZWN0KSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgbXNnID0gIlRoZSAnc2NoZW1hJyBvciAnZGlyJyBhdHRyaWJ1dGUgb3IgYSBuZXN0ZWQgZmlsZXNldCBpcyByZXF1aXJlZC4iOwotICAgICAgICAgICAgaWYgKGZhaWxvbmVycm9yKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBCdWlsZEV4Y2VwdGlvbihtc2cpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGxvZyhtc2csIFByb2plY3QuTVNHX0VSUik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBfZXh0Um91dGVyLnB1dChYU0QsIG5ldyBIYXNoU2V0KCkpOwotICAgICAgICBfZXh0Um91dGVyLnB1dChXU0RMLCBuZXcgSGFzaFNldCgpKTsKLSAgICAgICAgX2V4dFJvdXRlci5wdXQoSkFWQSwgbmV3IEhhc2hTZXQoKSk7Ci0gICAgICAgIF9leHRSb3V0ZXIucHV0KFhTRENPTkZJRywgbmV3IEhhc2hTZXQoKSk7Ci0KLSAgICAgICAgRmlsZSB0aGVCYXNlZGlyID0gc2NoZW1hOwotCi0gICAgICAgIGlmIChzY2hlbWEgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHNjaGVtYS5pc0RpcmVjdG9yeSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEZpbGVTY2FubmVyIHNjYW5uZXIgPSBnZXREaXJlY3RvcnlTY2FubmVyKHNjaGVtYSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nW10gcGF0aHMgPSBzY2FubmVyLmdldEluY2x1ZGVkRmlsZXMoKTsKLSAgICAgICAgICAgICAgICBwcm9jZXNzUGF0aHMocGF0aHMsIHNjYW5uZXIuZ2V0QmFzZWRpcigpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aGVCYXNlZGlyID0gc2NoZW1hLmdldFBhcmVudEZpbGUoKTsKLSAgICAgICAgICAgICAgICBwcm9jZXNzUGF0aHMobmV3IFN0cmluZ1tdIHsgc2NoZW1hLmdldE5hbWUoKSB9LCB0aGVCYXNlZGlyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGZpbGVzZXQuZ2V0RGlyKHByb2plY3QpICE9IG51bGwpCi0gICAgICAgICAgICBzY2hlbWFzLmFkZChmaWxlc2V0KTsKLSAgICAgICAgCi0gICAgICAgIEl0ZXJhdG9yIHNpID0gc2NoZW1hcy5pdGVyYXRvcigpOwotICAgICAgICB3aGlsZSAoc2kuaGFzTmV4dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBGaWxlU2V0IGZzID0gKEZpbGVTZXQpIHNpLm5leHQoKTsKLSAgICAgICAgICAgIEZpbGVTY2FubmVyIHNjYW5uZXIgPSBmcy5nZXREaXJlY3RvcnlTY2FubmVyKHByb2plY3QpOwotICAgICAgICAgICAgRmlsZSBiYXNlZGlyID0gc2Nhbm5lci5nZXRCYXNlZGlyKCk7Ci0gICAgICAgICAgICBTdHJpbmdbXSBwYXRocyA9IHNjYW5uZXIuZ2V0SW5jbHVkZWRGaWxlcygpOwotCi0gICAgICAgICAgICBwcm9jZXNzUGF0aHMocGF0aHMsIGJhc2VkaXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgU2V0IHhzZExpc3QgPSAoU2V0KSBfZXh0Um91dGVyLmdldChYU0QpOwotICAgICAgICBTZXQgd3NkbExpc3QgPSAoU2V0KSBfZXh0Um91dGVyLmdldChXU0RMKTsKLSAgICAgICAgCi0gICAgICAgIGlmICh4c2RMaXN0LnNpemUoKSArIHdzZGxMaXN0LnNpemUoKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBsb2coIkNvdWxkIG5vdCBmaW5kIGFueSB4c2Qgb3Igd3NkbCBmaWxlcyB0byBwcm9jZXNzLiIsIFByb2plY3QuTVNHX1dBUk4pOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy9vcHRpb25hbAotICAgICAgICBTZXQgamF2YUxpc3QgPSAoU2V0KSBfZXh0Um91dGVyLmdldChKQVZBKTsKLSAgICAgICAgU2V0IHhzZGNvbmZpZ0xpc3QgPSAoU2V0KSBfZXh0Um91dGVyLmdldChYU0RDT05GSUcpOwotCi0gICAgICAgIGlmIChzcmNnZW5kaXIgPT0gbnVsbCAmJiBzcmNvbmx5KQotICAgICAgICAgICAgc3JjZ2VuZGlyID0gY2xhc3NnZW5kaXI7Ci0KLSAgICAgICAgaWYgKGRlc3RmaWxlID09IG51bGwgJiYgY2xhc3NnZW5kaXIgPT0gbnVsbCAmJiAhIHNyY29ubHkpCi0gICAgICAgICAgICBkZXN0ZmlsZSA9IG5ldyBGaWxlKCJ4bWx0eXBlcy5qYXIiKTsKLQotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIHF1aWV0ID0gZmFsc2U7Ci0KLSAgICAgICAgLyogRVhFQ1VUSU9OICovCi0KLSAgICAgICAgRmlsZVtdIHhzZEFycmF5ID0gKEZpbGVbXSkgeHNkTGlzdC50b0FycmF5KG5ldyBGaWxlW3hzZExpc3Quc2l6ZSgpXSk7Ci0gICAgICAgIEZpbGVbXSB3c2RsQXJyYXkgPSAoRmlsZVtdKSB3c2RsTGlzdC50b0FycmF5KG5ldyBGaWxlW3dzZGxMaXN0LnNpemUoKV0pOwotICAgICAgICBGaWxlW10gamF2YUFycmF5ID0gKEZpbGVbXSkgamF2YUxpc3QudG9BcnJheShuZXcgRmlsZVtqYXZhTGlzdC5zaXplKCldKTsKLSAgICAgICAgRmlsZVtdIHhzZGNvbmZpZ0FycmF5ID0gKEZpbGVbXSkgeHNkY29uZmlnTGlzdC50b0FycmF5KG5ldyBGaWxlW3hzZGNvbmZpZ0xpc3Quc2l6ZSgpXSk7Ci0gICAgICAgIEVycm9yTG9nZ2VyIGVyciA9IG5ldyBFcnJvckxvZ2dlcih2ZXJib3NlKTsKLQotICAgICAgICBib29sZWFuIHN1Y2Nlc3MgPSBmYWxzZTsKLQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gY3JlYXRlIGEgdGVtcCBkaXJlY3RvcnkKLSAgICAgICAgICAgIEZpbGUgdG1wZGlyID0gbnVsbDsKLSAgICAgICAgICAgIGlmIChzcmNnZW5kaXIgPT0gbnVsbCB8fCBjbGFzc2dlbmRpciA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRtcGRpciA9IFNjaGVtYUNvZGVHZW5lcmF0b3IuY3JlYXRlVGVtcERpcigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHNyY2dlbmRpciA9PSBudWxsKQotICAgICAgICAgICAgICAgIHNyY2dlbmRpciA9IFNjaGVtYUNvZGVHZW5lcmF0b3IuY3JlYXRlRGlyKHRtcGRpciwgInNyYyIpOwotICAgICAgICAgICAgaWYgKGNsYXNzZ2VuZGlyID09IG51bGwpCi0gICAgICAgICAgICAgICAgY2xhc3NnZW5kaXIgPSBTY2hlbWFDb2RlR2VuZXJhdG9yLmNyZWF0ZURpcih0bXBkaXIsICJjbGFzc2VzIik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIHVzZSB0aGUgc3lzdGVtIGNsYXNzcGF0aCBpZiB1c2VyIGRpZG4ndCBwcm92aWRlIGFueQotICAgICAgICAgICAgaWYgKGNsYXNzcGF0aCA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNsYXNzcGF0aCA9IG5ldyBQYXRoKHByb2plY3QpOwotICAgICAgICAgICAgICAgIGNsYXNzcGF0aC5jb25jYXRTeXN0ZW1DbGFzc3BhdGgoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAgICAvLyBwcmVwZW5kIHRoZSBvdXRwdXQgZGlyZWN0b3J5IG9uIHRoZSBjbGFzc3BhdGgKLSAgICAgICAgICAgIFBhdGguUGF0aEVsZW1lbnQgcGF0aEVsZW1lbnQgPSBjbGFzc3BhdGguY3JlYXRlUGF0aEVsZW1lbnQoKTsKLSAgICAgICAgICAgIHBhdGhFbGVtZW50LnNldExvY2F0aW9uKGNsYXNzZ2VuZGlyKTsKLSAgICAgICAgCi0gICAgICAgICAgICBTdHJpbmdbXSBwYXRocyA9IGNsYXNzcGF0aC5saXN0KCk7Ci0gICAgICAgICAgICBGaWxlW10gY3AgPSBuZXcgRmlsZVtwYXRocy5sZW5ndGhdOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXRocy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICBjcFtpXSA9IG5ldyBGaWxlKHBhdGhzW2ldKTsKLSAgICAgICAgCi0gICAgICAgICAgICAvLyBnZW5lcmF0ZSB0aGUgc291cmNlCi0gICAgICAgICAgICBTY2hlbWFDb21waWxlci5QYXJhbWV0ZXJzIHBhcmFtcyA9IG5ldyBTY2hlbWFDb21waWxlci5QYXJhbWV0ZXJzKCk7Ci0gICAgICAgICAgICBwYXJhbXMuc2V0QmFzZURpcih0aGVCYXNlZGlyKTsKLSAgICAgICAgICAgIHBhcmFtcy5zZXRYc2RGaWxlcyh4c2RBcnJheSk7Ci0gICAgICAgICAgICBwYXJhbXMuc2V0V3NkbEZpbGVzKHdzZGxBcnJheSk7Ci0gICAgICAgICAgICBwYXJhbXMuc2V0SmF2YUZpbGVzKGphdmFBcnJheSk7Ci0gICAgICAgICAgICBwYXJhbXMuc2V0Q29uZmlnRmlsZXMoeHNkY29uZmlnQXJyYXkpOwotICAgICAgICAgICAgcGFyYW1zLnNldENsYXNzcGF0aChjcCk7Ci0gICAgICAgICAgICAvL3BhcmFtcy5zZXRPdXRwdXRKYXIoZGVzdGZpbGUpOyAvLyBhbHdheXMgdXNlIHRoZSBqYXIgdGFzayBiZWxvdwotICAgICAgICAgICAgcGFyYW1zLnNldE5hbWUodHlwZXN5c3RlbW5hbWUpOwotICAgICAgICAgICAgcGFyYW1zLnNldFNyY0RpcihzcmNnZW5kaXIpOwotICAgICAgICAgICAgcGFyYW1zLnNldENsYXNzZXNEaXIoY2xhc3NnZW5kaXIpOwotICAgICAgICAgICAgcGFyYW1zLnNldE5vamF2YWModHJ1ZSk7IC8vIGFsd2F5cyBjb21waWxlIHVzaW5nIGphdmFjIHRhc2sgYmVsb3cKLSAgICAgICAgICAgIHBhcmFtcy5zZXREZWJ1ZyhkZWJ1Zyk7Ci0gICAgICAgICAgICBwYXJhbXMuc2V0VmVyYm9zZSh2ZXJib3NlKTsKLSAgICAgICAgICAgIHBhcmFtcy5zZXRRdWlldChxdWlldCk7Ci0gICAgICAgICAgICBwYXJhbXMuc2V0RG93bmxvYWQoZG93bmxvYWQpOwotICAgICAgICAgICAgcGFyYW1zLnNldEV4dGVuc2lvbnMoZXh0ZW5zaW9ucyk7Ci0gICAgICAgICAgICBwYXJhbXMuc2V0RXJyb3JMaXN0ZW5lcihlcnIpOwotICAgICAgICAgICAgc3VjY2VzcyA9IFNjaGVtYUNvbXBpbGVyLmNvbXBpbGUocGFyYW1zKTsKLQotICAgICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgIXNyY29ubHkpIHsKLSAgICAgICAgICAgICAgICBsb25nIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBjb21waWxlIHRoZSBzb3VyY2UKLSAgICAgICAgICAgICAgICBKYXZhYyBqYXZhYyA9IG5ldyBKYXZhYygpOwotICAgICAgICAgICAgICAgIGphdmFjLnNldFByb2plY3QocHJvamVjdCk7Ci0gICAgICAgICAgICAgICAgamF2YWMuc2V0VGFza05hbWUoZ2V0VGFza05hbWUoKSk7Ci0gICAgICAgICAgICAgICAgamF2YWMuc2V0Q2xhc3NwYXRoKGNsYXNzcGF0aCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbXBpbGVyICE9IG51bGwpIGphdmFjLnNldENvbXBpbGVyKGNvbXBpbGVyKTsKLSAgICAgICAgICAgICAgICBqYXZhYy5zZXREZWJ1ZyhkZWJ1Zyk7Ci0gICAgICAgICAgICAgICAgaWYgKGRlYnVnTGV2ZWwgIT0gbnVsbCkgamF2YWMuc2V0RGVidWdMZXZlbChkZWJ1Z0xldmVsKTsKLSAgICAgICAgICAgICAgICBqYXZhYy5zZXREZXN0ZGlyKGNsYXNzZ2VuZGlyKTsKLSAgICAgICAgICAgICAgICBqYXZhYy5zZXRFeGVjdXRhYmxlKGZvcmtlZEV4ZWN1dGFibGUpOwotICAgICAgICAgICAgICAgIGphdmFjLnNldEZhaWxvbmVycm9yKGZhaWxvbmVycm9yKTsKLSAgICAgICAgICAgICAgICBqYXZhYy5zZXRGb3JrKGZvcmspOwotICAgICAgICAgICAgICAgIGphdmFjLnNldEluY2x1ZGVhbnRydW50aW1lKGluY2x1ZGVBbnRSdW50aW1lKTsKLSAgICAgICAgICAgICAgICBqYXZhYy5zZXRJbmNsdWRlamF2YXJ1bnRpbWUoaW5jbHVkZUphdmFSdW50aW1lKTsKLSAgICAgICAgICAgICAgICBqYXZhYy5zZXRTcmNkaXIobmV3IFBhdGgocHJvamVjdCwgc3JjZ2VuZGlyLmdldEFic29sdXRlUGF0aCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1lbW9yeUluaXRpYWxTaXplICE9IG51bGwpIGphdmFjLnNldE1lbW9yeUluaXRpYWxTaXplKG1lbW9yeUluaXRpYWxTaXplKTsKLSAgICAgICAgICAgICAgICBpZiAobWVtb3J5TWF4aW11bVNpemUgIT0gbnVsbCkgamF2YWMuc2V0TWVtb3J5TWF4aW11bVNpemUobWVtb3J5TWF4aW11bVNpemUpOwotICAgICAgICAgICAgICAgIGphdmFjLnNldE9wdGltaXplKG9wdGltaXplKTsKLSAgICAgICAgICAgICAgICBqYXZhYy5zZXRWZXJib3NlKHZlcmJvc2UpOwotICAgICAgICAgICAgICAgIGphdmFjLmV4ZWN1dGUoKTsKLQotICAgICAgICAgICAgICAgIGxvbmcgZmluaXNoID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFxdWlldCkKLSAgICAgICAgICAgICAgICAgICAgbG9nKCJUaW1lIHRvIGNvbXBpbGUgY29kZTogIiArICgoZG91YmxlKShmaW5pc2ggLSBzdGFydCkgLyAxMDAwLjApICsgIiBzZWNvbmRzIik7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZGVzdGZpbGUgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGphciB0aGUgY29tcGlsZWQgY2xhc3NlcwotICAgICAgICAgICAgICAgICAgICBKYXIgamFyID0gbmV3IEphcigpOwotICAgICAgICAgICAgICAgICAgICBqYXIuc2V0UHJvamVjdChwcm9qZWN0KTsKLSAgICAgICAgICAgICAgICAgICAgamFyLnNldFRhc2tOYW1lKGdldFRhc2tOYW1lKCkpOwotICAgICAgICAgICAgICAgICAgICBqYXIuc2V0QmFzZWRpcihjbGFzc2dlbmRpcik7Ci0gICAgICAgICAgICAgICAgICAgIGphci5zZXREZXN0RmlsZShkZXN0ZmlsZSk7Ci0gICAgICAgICAgICAgICAgICAgIGphci5leGVjdXRlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodG1wZGlyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBTY2hlbWFDb2RlR2VuZXJhdG9yLnRyeUhhcmRUb0RlbGV0ZSh0bXBkaXIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChUaHJvd2FibGUgZSkKLSAgICAgICAgewotICAgICAgICAgICAgLy9pbnRlcnJ1cHRlZCBtZWFucyBjYW5jZWwKLSAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgSW50ZXJydXB0ZWRFeGNlcHRpb24pCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEJ1aWxkRXhjZXB0aW9uKGUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBsb2coIkV4Y2VwdGlvbiB3aGlsZSBidWlsZGluZyBzY2hlbWFzOiAiICsgZS5nZXRNZXNzYWdlKCksIFByb2plY3QuTVNHX0VSUik7Ci0gICAgICAgICAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZShuZXcgUHJpbnRXcml0ZXIoc3cpKTsKLSAgICAgICAgICAgIGxvZyhzdy50b1N0cmluZygpLCBQcm9qZWN0Lk1TR19WRVJCT1NFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghc3VjY2VzcyAmJiBmYWlsb25lcnJvcikKLSAgICAgICAgICAgIHRocm93IG5ldyBCdWlsZEV4Y2VwdGlvbigpOyAvL3N0b3AgdGhlIGJ1aWxkCi0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NQYXRocyhTdHJpbmdbXSBwYXRocywgRmlsZSBiYXNlRGlyKQotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXRocy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGRvdCA9IHBhdGhzW2ldLmxhc3RJbmRleE9mKCcuJyk7Ci0gICAgICAgICAgICBpZiAoZG90ID4gLTEpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHBhdGggPSBwYXRoc1tpXTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcG9zc0V4dCA9IHBhdGguc3Vic3RyaW5nKGRvdCkudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgICAgICAgICBTZXQgc2V0ID0gKFNldCkgX2V4dFJvdXRlci5nZXQocG9zc0V4dCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2V0ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHNldC5hZGQobmV3IEZpbGUoYmFzZURpciwgcGF0aCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYWRkRmlsZXNldChGaWxlU2V0IGZpbGVzZXQpCi0gICAgewotICAgICAgICBzY2hlbWFzLmFkZChmaWxlc2V0KTsKLSAgICB9Ci0KLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIC8vR2V0dGVyL1NldHRlcnMKLSAgICBwdWJsaWMgRmlsZSBnZXRTY2hlbWEoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHNjaGVtYTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBIGZpbGUgdGhhdCBwb2ludHMgdG8gZWl0aGVyIGFuIGluZGl2aWR1YWwgc2NoZW1hIGZpbGUgb3IgYSBkaXJlY3Rvcnkgb2YgZmlsZXMuCi0gICAgICogSXQgaXMgb3B0aW9uYWwgb25seSBpZiBvbmUgb3IgbW9yZSAmbHQ7ZmlsZXNldCZndDsgZWxlbWVudHMgYXJlIG5lc3RlZCBpbiB0aGlzCi0gICAgICogdGFzay4KLSAgICAgKiBAcGFyYW0gc2NoZW1hIFJlcXVpcmVkLCB1bmxlc3MgYSBmaWxlc2V0IGVsZW1lbnQgaXMgbmVzdGVkLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFNjaGVtYShGaWxlIHNjaGVtYSkKLSAgICB7Ci0gICAgICAgIHRoaXMuc2NoZW1hID0gc2NoZW1hOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoZSBjbGFzc3BhdGggdG8gdXNlIGlmIHNjaGVtYXMgaW4gdGhlIGZpbGVzZXQgaW1wb3J0IGRlZmluaXRpb25zIHRoYXQgYXJlCi0gICAgICogc3VwcGxpZWQgYnkgb3RoZXIgY29tcGlsZWQgeG1sIGJlYW5zIEpBUiBmaWxlcywgb3IgaWYgLmphdmEgZmlsZXMgYXJlIGluIHRoZQotICAgICAqIHNjaGVtYSBmaWxlc2V0LgotICAgICAqIEBwYXJhbSBjbGFzc3BhdGggT3B0aW9uYWwuCi0gICAgICovIAotICAgIHB1YmxpYyB2b2lkIHNldENsYXNzcGF0aChQYXRoIGNsYXNzcGF0aCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLmNsYXNzcGF0aCAhPSBudWxsKQotICAgICAgICAgICAgdGhpcy5jbGFzc3BhdGguYXBwZW5kKGNsYXNzcGF0aCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuY2xhc3NwYXRoID0gY2xhc3NwYXRoOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBBZGRzIGEgcGF0aCB0byB0aGUgY2xhc3NwYXRoLgotICAgICAqLwotICAgIHB1YmxpYyBQYXRoIGNyZWF0ZUNsYXNzcGF0aCgpIHsKLSAgICAgICAgaWYgKGNsYXNzcGF0aCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBjbGFzc3BhdGggPSBuZXcgUGF0aChwcm9qZWN0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gY2xhc3NwYXRoLmNyZWF0ZVBhdGgoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBZGRzIGEgcmVmZXJlbmNlIHRvIGEgY2xhc3NwYXRoIGRlZmluZWQgZWxzZXdoZXJlLgotICAgICAqIEBwYXJhbSBjbGFzc3BhdGhyZWYgT3B0aW9uYWwuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0Q2xhc3NwYXRoUmVmKFJlZmVyZW5jZSBjbGFzc3BhdGhyZWYpCi0gICAgewotICAgICAgICBpZiAoY2xhc3NwYXRoID09IG51bGwpCi0gICAgICAgICAgICBjbGFzc3BhdGggPSBuZXcgUGF0aChwcm9qZWN0KTsKLSAgICAgICAgCi0gICAgICAgIGNsYXNzcGF0aC5jcmVhdGVQYXRoKCkuc2V0UmVmaWQoY2xhc3NwYXRocmVmKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIFBhdGggZ2V0Q2xhc3NwYXRoKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjbGFzc3BhdGg7Ci0gICAgfQotCi0gICAgcHVibGljIEZpbGUgZ2V0RGVzdGZpbGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGRlc3RmaWxlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIERlZmluZSB0aGUgbmFtZSBvZiB0aGUgamFyIGZpbGUgY3JlYXRlZC4gIEZvciBpbnN0YW5jZSwgIm15WE1MQmVhbi5qYXIiCi0gICAgICogd2lsbCBvdXRwdXQgdGhlIHJlc3VsdHMgb2YgdGhpcyB0YXNrIGludG8gYSBqYXIgd2l0aCB0aGUgc2FtZSBuYW1lLgotICAgICAqIE9wdGlvbmFsLCBkZWZhdWx0cyB0byAieG1sdHlwZXMuamFyIi4KLSAgICAgKiBAcGFyYW0gZGVzdGZpbGUgT3B0aW9uYWwuCi0gICAgICovIAotICAgIHB1YmxpYyB2b2lkIHNldERlc3RmaWxlKEZpbGUgZGVzdGZpbGUpCi0gICAgewotICAgICAgICB0aGlzLmRlc3RmaWxlID0gZGVzdGZpbGU7Ci0gICAgfQotCi0gICAgcHVibGljIEZpbGUgZ2V0U3JjZ2VuZGlyKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzcmNnZW5kaXI7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0IGEgbG9jYXRpb24gdG8gZ2VuZXJhdGUgLmphdmEgZmlsZXMgaW50by4gIE9wdGlvbmFsLCBkZWZhdWx0cyB0bwotICAgICAqIGEgdGVtcCBkaXIuCi0gICAgICogQHBhcmFtIHNyY2dlbmRpciBPcHRpb25hbC4KLSAgICAgKi8gCi0gICAgcHVibGljIHZvaWQgc2V0U3JjZ2VuZGlyKEZpbGUgc3JjZ2VuZGlyKQotICAgIHsKLSAgICAgICAgdGhpcy5zcmNnZW5kaXIgPSBzcmNnZW5kaXI7Ci0gICAgfQotCi0gICAgcHVibGljIEZpbGUgZ2V0Q2xhc3NnZW5kaXIoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNsYXNzZ2VuZGlyOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldCBhIGxvY2F0aW9uIHRvIGdlbmVyYXRlIC5jbGFzcyBmaWxlcyBpbnRvLiAgT3B0aW9uYWwsIGRlZmF1bHRzIHRvCi0gICAgICogYSB0ZW1wIGRpci4KLSAgICAgKiBAcGFyYW0gY2xhc3NnZW5kaXIgT3B0aW9uYWwuCi0gICAgICovIAotICAgIHB1YmxpYyB2b2lkIHNldENsYXNzZ2VuZGlyKEZpbGUgY2xhc3NnZW5kaXIpCi0gICAgewotICAgICAgICB0aGlzLmNsYXNzZ2VuZGlyID0gY2xhc3NnZW5kaXI7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2hvb3NlIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBwYXJ0aWN1bGFyIHRhc2suCi0gICAgICoKLSAgICAgKiBAc2luY2UgQW50IDEuNQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldENvbXBpbGVyKFN0cmluZyBjb21waWxlcikKLSAgICB7Ci0gICAgICAgIHRoaXMuY29tcGlsZXIgPSBjb21waWxlcjsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIGJvb2xlYW4gaXNEb3dubG9hZCgpCi0gICAgewotICAgICAgICByZXR1cm4gZG93bmxvYWQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0IHRvIHRydWUgdG8gcGVybWl0IHRoZSBjb21waWxlciB0byBkb3dubG9hZCBVUkxzIGZvciBpbXBvcnRzCi0gICAgICogYW5kIGluY2x1ZGVzLiAgRGVmYXVsdHMgdG8gZmFsc2UsIG1lYW5pbmcgYWxsIGltcG9ydHMgYW5kIGluY2x1ZGVzCi0gICAgICogbXVzdCBiZSBjb3BpZWQgbG9jYWxseS4KLSAgICAgKiBAcGFyYW0gZG93bmxvYWQgT3B0aW9uYWwuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0RG93bmxvYWQoYm9vbGVhbiBkb3dubG9hZCkKLSAgICB7Ci0gICAgICAgIHRoaXMuZG93bmxvYWQgPSBkb3dubG9hZDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJZiB0cnVlLCBjb21waWxlcyB3aXRoIG9wdGltaXphdGlvbiBlbmFibGVkLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldE9wdGltaXplKGJvb2xlYW4gb3B0aW1pemUpIHsKLSAgICAgICAgdGhpcy5vcHRpbWl6ZSA9IG9wdGltaXplOwotICAgIH0KLQotICAgIC8qKiBHZXRzIHRoZSBvcHRpbWl6ZSBmbGFnLiAqLwotICAgIHB1YmxpYyBib29sZWFuIGdldE9wdGltaXplKCkgewotICAgICAgICByZXR1cm4gb3B0aW1pemU7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNWZXJib3NlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2ZXJib3NlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnRyb2xzIHRoZSBhbW91bnQgb2Ygb3V0cHV0LiAgRGVmYXVsdHMgdG8gdHJ1ZS4KLSAgICAgKiBAcGFyYW0gdmVyYm9zZSBPcHRpb25hbC4KLSAgICAgKi8gCi0gICAgcHVibGljIHZvaWQgc2V0VmVyYm9zZShib29sZWFuIHZlcmJvc2UpCi0gICAgewotICAgICAgICB0aGlzLnZlcmJvc2UgPSB2ZXJib3NlOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzUXVpZXQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHF1aWV0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnRyb2xzIHRoZSBhbW91bnQgb2Ygb3V0cHV0LiAgRGVmYXVsdHMgdG8gZmFsc2UuCi0gICAgICogQHBhcmFtIHF1aWV0IE9wdGlvbmFsLgotICAgICAqLyAKLSAgICBwdWJsaWMgdm9pZCBzZXRRdWlldChib29sZWFuIHF1aWV0KQotICAgIHsKLSAgICAgICAgdGhpcy5xdWlldCA9IHF1aWV0OwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzRGVidWcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGRlYnVnOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCB0aGUgdmFsdWUgb2YgZGVidWdMZXZlbC4KLSAgICAgKiBAcmV0dXJuIHZhbHVlIG9mIGRlYnVnTGV2ZWwuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXREZWJ1Z0xldmVsKCkgewotICAgICAgICByZXR1cm4gZGVidWdMZXZlbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBLZXl3b3JkIGxpc3QgdG8gYmUgYXBwZW5kZWQgdG8gdGhlIC1nIGNvbW1hbmQtbGluZSBzd2l0Y2guCi0gICAgICoKLSAgICAgKiBUaGlzIHdpbGwgYmUgaWdub3JlZCBieSBhbGwgaW1wbGVtZW50YXRpb25zIGV4Y2VwdCBtb2Rlcm4KLSAgICAgKiBhbmQgY2xhc3NpYyh2ZXIgPj0gMS4yKS4gTGVnYWwgdmFsdWVzIGFyZSBub25lIG9yIGEKLSAgICAgKiBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgZm9sbG93aW5nIGtleXdvcmRzOiBsaW5lcywgdmFycywKLSAgICAgKiBhbmQgc291cmNlLiBJZiBkZWJ1Z2xldmVsIGlzIG5vdCBzcGVjaWZpZWQsIGJ5IGRlZmF1bHQsIDpub25lCi0gICAgICogd2lsbCBiZSBhcHBlbmRlZCB0byAtZy4gSWYgZGVidWcgaXMgbm90IHR1cm5lZCBvbiwgdGhpcyBhdHRyaWJ1dGUKLSAgICAgKiB3aWxsIGJlIGlnbm9yZWQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdiAgVmFsdWUgdG8gYXNzaWduIHRvIGRlYnVnTGV2ZWwuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0RGVidWdMZXZlbChTdHJpbmcgIHYpIHsKLSAgICAgICAgdGhpcy5kZWJ1Z0xldmVsID0gdjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZW5lcmF0ZSBkZWJ1Z2dpbmcgc3ltYm9scy4KLSAgICAgKiBAcGFyYW0gZGVidWcgT3B0aW9uYWwuCi0gICAgICovIAotICAgIHB1YmxpYyB2b2lkIHNldERlYnVnKGJvb2xlYW4gZGVidWcpCi0gICAgewotICAgICAgICB0aGlzLmRlYnVnID0gZGVidWc7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSWYgdHJ1ZSwgZm9ya3MgdGhlIGphdmFjIGNvbXBpbGVyLgotICAgICAqCi0gICAgICogQHBhcmFtIGYgInRydWV8ZmFsc2V8b258b2ZmfHllc3xubyIKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRGb3JrKGJvb2xlYW4gZikgewotICAgICAgICBmb3JrID0gZjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSB0aGUgbmFtZSBvZiB0aGUgamF2YWMgZXhlY3V0YWJsZS4KLSAgICAgKgotICAgICAqIDxwPklnbm9yZWQgdW5sZXNzIGZvcmsgaXMgdHJ1ZSBvciBleHRKYXZhYyBoYXMgYmVlbiBzcGVjaWZpZWQKLSAgICAgKiBhcyB0aGUgY29tcGlsZXIuPC9wPgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEV4ZWN1dGFibGUoU3RyaW5nIGZvcmtFeGVjKSB7Ci0gICAgICAgIGZvcmtlZEV4ZWN1dGFibGUgPSBmb3JrRXhlYzsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEV4ZWN1dGFibGUoKSB7Ci0gICAgICAgIHJldHVybiBmb3JrZWRFeGVjdXRhYmxlOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzU3Jjb25seSgpCi0gICAgewotICAgICAgICByZXR1cm4gc3Jjb25seTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBIHZhbHVlIG9mIHRydWUgbWVhbnMgdGhhdCBvbmx5IHNvdXJjZSB3aWxsIGJlIGdlbmVyYXRlZC4gIE9wdGlvbmFsLAotICAgICAqIGRlZmF1bHQgaXMgZmFsc2UuCi0gICAgICogQHBhcmFtIHNyY29ubHkgT3B0aW9uYWwuCi0gICAgICovIAotICAgIHB1YmxpYyB2b2lkIHNldFNyY29ubHkoYm9vbGVhbiBzcmNvbmx5KQotICAgIHsKLSAgICAgICAgdGhpcy5zcmNvbmx5ID0gc3Jjb25seTsKLSAgICB9Ci0gCi0gICAgcHVibGljIFN0cmluZyBnZXRUeXBlc3lzdGVtbmFtZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdHlwZXN5c3RlbW5hbWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogT25lIG9yIG1vcmUgU2NoZW1hQ29tcGlsZXIgZXh0ZW5zaW9ucyBjYW4gYmUgcGFzc2VkIGluIHZpYSB0aGUgJmx0O2V4dGVuc2lvbj4gc3ViZWxlbWVudC4KLSAgICAgKiAgU2NoZW1hIENvbXBpbGVyIGV4dGVuc2lvbnMgbXVzdCBpbXBsZW1lbnQgdGhlIGludGVyZmFjZSBjb20ueGJlYW4udG9vLlNjaGVtYUNvbXBpbGVyRXh0ZW5zaW9uCi0gICAgICovCi0gICAgcHVibGljIEV4dGVuc2lvbiBjcmVhdGVFeHRlbnNpb24oKSB7Ci0gICAgICAgIEV4dGVuc2lvbiBlID0gbmV3IEV4dGVuc2lvbigpOwotICAgICAgICBleHRlbnNpb25zLmFkZChlKTsKLSAgICAgICAgcmV0dXJuIGU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgdGhhdCB0aGUgVHlwZVN5c3RlbUhvbGRlciBjbGFzcyBzaG91bGQgYmUgCi0gICAgICogZ2VuZXJhdGVkIGluLiBOb3JtYWxseSB0aGlzIHNob3VsZCBiZSBsZWZ0IHVuc3BlY2lmaWVkLiAgTm9uZSBvZgotICAgICAqIHRoZSB4bWwgYmVhbnMgYXJlIGdlbmVyYXRlZCBpbiB0aGlzIHBhY2thZ2UuCi0gICAgICogPEJSPjxCUj5Vc2UgLnhzZGNvbmZpZyBmaWxlcyB0byBtb2RpZnkgeG1sIGJlYW4gcGFja2FnZSBvciBjbGFzcyBuYW1lcy4KLSAgICAgKiBAcGFyYW0gdHlwZXN5c3RlbW5hbWUgT3B0aW9uYWwuCi0gICAgICovIAotICAgIHB1YmxpYyB2b2lkIHNldFR5cGVzeXN0ZW1uYW1lKFN0cmluZyB0eXBlc3lzdGVtbmFtZSkKLSAgICB7Ci0gICAgICAgIHRoaXMudHlwZXN5c3RlbW5hbWUgPSB0eXBlc3lzdGVtbmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0ZhaWxvbmVycm9yKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWlsb25lcnJvcjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZSBhbnQgdGFyZ2V0IHdpbGwgY29udGludWUgaWYgdGhlIFhNTEJlYW4KLSAgICAgKiBjcmVhdGlvbiBlbmNvdW50ZXJzIGEgYnVpbGQgZXJyb3IuICBEZWZhdWx0cyB0byB0cnVlLiAgT3B0aW9uYWwuCi0gICAgICogQHBhcmFtIGZhaWxvbmVycm9yIE9wdGlvbmFsLgotICAgICAqLyAKLSAgICBwdWJsaWMgdm9pZCBzZXRGYWlsb25lcnJvcihib29sZWFuIGZhaWxvbmVycm9yKQotICAgIHsKLSAgICAgICAgdGhpcy5mYWlsb25lcnJvciA9IGZhaWxvbmVycm9yOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzSW5jbHVkZUFudFJ1bnRpbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGluY2x1ZGVBbnRSdW50aW1lOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEluY2x1ZGVBbnRSdW50aW1lKGJvb2xlYW4gaW5jbHVkZUFudFJ1bnRpbWUpCi0gICAgewotICAgICAgICB0aGlzLmluY2x1ZGVBbnRSdW50aW1lID0gaW5jbHVkZUFudFJ1bnRpbWU7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNJbmNsdWRlSmF2YVJ1bnRpbWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGluY2x1ZGVKYXZhUnVudGltZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRJbmNsdWRlSmF2YVJ1bnRpbWUoYm9vbGVhbiBpbmNsdWRlSmF2YVJ1bnRpbWUpCi0gICAgewotICAgICAgICB0aGlzLmluY2x1ZGVKYXZhUnVudGltZSA9IGluY2x1ZGVKYXZhUnVudGltZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXQgdGhlIGluaXRpYWwgbWVtb3J5IHNpemUgb2YgdGhlIHVuZGVybHlpbmcgamF2YWMgcHJvY2Vzcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldE1lbW9yeUluaXRpYWxTaXplKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtZW1vcnlJbml0aWFsU2l6ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRNZW1vcnlJbml0aWFsU2l6ZShTdHJpbmcgbWVtb3J5SW5pdGlhbFNpemUpCi0gICAgewotICAgICAgICB0aGlzLm1lbW9yeUluaXRpYWxTaXplID0gbWVtb3J5SW5pdGlhbFNpemU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0IHRoZSBtYXhpbXVtIG1lbW9yeSBzaXplIG9mIHRoZSB1bmRlcmx5aW5nIGphdmFjIHByb2Nlc3MuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRNZW1vcnlNYXhpbXVtU2l6ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gbWVtb3J5TWF4aW11bVNpemU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0TWVtb3J5TWF4aW11bVNpemUoU3RyaW5nIG1lbW9yeU1heGltdW1TaXplKQotICAgIHsKLSAgICAgICAgdGhpcy5tZW1vcnlNYXhpbXVtU2l6ZSA9IG1lbW9yeU1heGltdW1TaXplOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFVSSSB1cmlGcm9tRmlsZShGaWxlIGYpCi0gICAgewotICAgICAgICBpZiAoZiA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmLmdldENhbm9uaWNhbEZpbGUoKS50b1VSSSgpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKGphdmEuaW8uSU9FeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gRG9uJ3Qgc3BpdCBvdXQgYW4gZXhjZXB0aW9uIGhlcmUgYmVjYXVzZSBvbiBXaW5kb3dzIHlvdSdsbCBnZXQgb25lCi0gICAgICAgICAgICAvLyBpZiB0aGUgZmlsZW5hbWUgaXMgImF1eCIsICJscHQxIiwgZXRjLiBJdCdzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eQotICAgICAgICAgICAgLy8gdG8gZGVhbCB3aXRoIHRob3NlIGNhc2VzIGNvcnJlY3RseSwgdXN1YWxseSBieSBjYWxsaW5nIEZpbGVTdmMuaW52YWxpZFBhdGhDaGVjaygpCi0gICAgICAgICAgICAvLyBNZXNzYWdlU3ZjLmdldCgpLmxvZ0V4Y2VwdGlvbihlKTsKLSAgICAgICAgICAgIHJldHVybiBmLmdldEFic29sdXRlRmlsZSgpLnRvVVJJKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgY2xhc3MgRXJyb3JMb2dnZXIgZXh0ZW5kcyBBYnN0cmFjdENvbGxlY3Rpb24KLSAgICB7Ci0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBfbm9pc3k7Ci0gICAgICAgIHByaXZhdGUgVVJJIF9iYXNlVVJJOwotCi0gICAgICAgIHB1YmxpYyBFcnJvckxvZ2dlcihib29sZWFuIG5vaXN5KQotICAgICAgICB7Ci0gICAgICAgICAgICBfbm9pc3kgPSBub2lzeTsKLSAgICAgICAgICAgIF9iYXNlVVJJID0gdXJpRnJvbUZpbGUocHJvamVjdC5nZXRCYXNlRGlyKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gYWRkKE9iamVjdCBvKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobyBpbnN0YW5jZW9mIFhtbEVycm9yKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFhtbEVycm9yIGVyciA9IChYbWxFcnJvcilvOwotICAgICAgICAgICAgICAgIGlmIChlcnIuZ2V0U2V2ZXJpdHkoKSA9PSBYbWxFcnJvci5TRVZFUklUWV9FUlJPUikKLSAgICAgICAgICAgICAgICAgICAgbG9nKGVyci50b1N0cmluZyhfYmFzZVVSSSksIFByb2plY3QuTVNHX0VSUik7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZXJyLmdldFNldmVyaXR5KCkgPT0gWG1sRXJyb3IuU0VWRVJJVFlfV0FSTklORykKLSAgICAgICAgICAgICAgICAgICAgbG9nKGVyci50b1N0cmluZyhfYmFzZVVSSSksIFByb2plY3QuTVNHX1dBUk4pOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9ub2lzeSkKLSAgICAgICAgICAgICAgICAgICAgbG9nKGVyci50b1N0cmluZyhfYmFzZVVSSSksIFByb2plY3QuTVNHX0lORk8pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIEl0ZXJhdG9yIGl0ZXJhdG9yKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLkVNUFRZX0xJU1QuaXRlcmF0b3IoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBpbnQgc2l6ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbGNvbXAvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3Rvb2wvWE1MQmVhblhTVENIYXJuZXNzLmphdmEgYi92Mi9zcmMveG1sY29tcC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdG9vbC9YTUxCZWFuWFNUQ0hhcm5lc3MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJhZmM5Yi4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1sY29tcC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdG9vbC9YTUxCZWFuWFNUQ0hhcm5lc3MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC50b29sOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQmVhbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVN5c3RlbTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBYTUxCZWFuWFNUQ0hhcm5lc3MgaW1wbGVtZW50cyBYU1RDVGVzdGVyLkhhcm5lc3MKLXsKLSAgICBwdWJsaWMgdm9pZCBydW5UZXN0Q2FzZShYU1RDVGVzdGVyLlRlc3RDYXNlUmVzdWx0IHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIFhTVENUZXN0ZXIuVGVzdENhc2UgdGVzdENhc2UgPSByZXN1bHQuZ2V0VGVzdENhc2UoKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiUnVubmluZyBjYXNlICIgKyB0ZXN0Q2FzZS5nZXREZXNjcmlwdGlvbigpKTsKLSAgICAgICAgCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBDb2xsZWN0aW9uIGVycm9ycyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgICAgIGJvb2xlYW4gc2NoZW1hVmFsaWQgPSB0cnVlOwotICAgICAgICAgICAgYm9vbGVhbiBpbnN0YW5jZVZhbGlkID0gdHJ1ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHRlc3RDYXNlLmdldFNjaGVtYUZpbGUoKSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gc3RlcCAxLCBsb2FkIHNjaGVtYSBmaWxlIGV0Yy4KLSAgICAgICAgICAgIFNjaGVtYVR5cGVMb2FkZXIgbG9hZGVyID0gbnVsbDsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFhtbE9iamVjdCBzY2hlbWEgPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSh0ZXN0Q2FzZS5nZXRTY2hlbWFGaWxlKCksIG5ldyBYbWxPcHRpb25zKCkuc2V0RXJyb3JMaXN0ZW5lcihlcnJvcnMpLnNldExvYWRMaW5lTnVtYmVycygpKTsKLSAgICAgICAgICAgICAgICBYbWxPYmplY3Qgc2NoZW1hMiA9IG51bGw7Ci0gICAgICAgICAgICAgICAgaWYgKHRlc3RDYXNlLmdldFJlc291cmNlRmlsZSgpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHNjaGVtYTIgPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSh0ZXN0Q2FzZS5nZXRSZXNvdXJjZUZpbGUoKSwgbmV3IFhtbE9wdGlvbnMoKS5zZXRFcnJvckxpc3RlbmVyKGVycm9ycykuc2V0TG9hZExpbmVOdW1iZXJzKCkpOwotICAgICAgICAgICAgICAgIFhtbE9iamVjdFtdIHNjaGVtYXMgPSBzY2hlbWEyID09IG51bGwgPyBuZXcgWG1sT2JqZWN0W10geyBzY2hlbWEgfSA6IG5ldyBYbWxPYmplY3RbXSB7IHNjaGVtYSwgc2NoZW1hMiB9OwotICAgICAgICAgICAgICAgIFNjaGVtYVR5cGVTeXN0ZW0gc3lzdGVtID0gWG1sQmVhbnMuY29tcGlsZVhzZChzY2hlbWFzLCBYbWxCZWFucy5nZXRCdWlsdGluVHlwZVN5c3RlbSgpLCBuZXcgWG1sT3B0aW9ucygpLnNldEVycm9yTGlzdGVuZXIoZXJyb3JzKSk7Ci0gICAgICAgICAgICAgICAgbG9hZGVyID0gWG1sQmVhbnMudHlwZUxvYWRlclVuaW9uKG5ldyBTY2hlbWFUeXBlTG9hZGVyW10geyBzeXN0ZW0sIFhtbEJlYW5zLmdldEJ1aWx0aW5UeXBlU3lzdGVtKCkgfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc2NoZW1hVmFsaWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBpZiAoIShlIGluc3RhbmNlb2YgWG1sRXhjZXB0aW9uKSB8fCBlcnJvcnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNldENyYXNoKHRydWUpOwotICAgICAgICAgICAgICAgICAgICBTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKG5ldyBQcmludFdyaXRlcihzdykpOwotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkU3ZNZXNzYWdlcyhDb2xsZWN0aW9ucy5zaW5nbGV0b24oc3cudG9TdHJpbmcoKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmVzdWx0LmFkZFN2TWVzc2FnZXMoZXJyb3JzKTsKLSAgICAgICAgICAgIHJlc3VsdC5zZXRTdkFjdHVhbChzY2hlbWFWYWxpZCk7Ci0gICAgICAgICAgICBlcnJvcnMuY2xlYXIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGxvYWRlciA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHRlc3RDYXNlLmdldEluc3RhbmNlRmlsZSgpID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBzdGVwIDIsIGxvYWQgaW5zdGFuY2UgZmlsZSBhbmQgdmFsaWRhdGUKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFhtbE9iamVjdCBpbnN0YW5jZSA9IGxvYWRlci5wYXJzZSh0ZXN0Q2FzZS5nZXRJbnN0YW5jZUZpbGUoKSwgbnVsbCwgbmV3IFhtbE9wdGlvbnMoKS5zZXRFcnJvckxpc3RlbmVyKGVycm9ycykuc2V0TG9hZExpbmVOdW1iZXJzKCkpOwotICAgICAgICAgICAgICAgIGlmICghaW5zdGFuY2UudmFsaWRhdGUobmV3IFhtbE9wdGlvbnMoKS5zZXRFcnJvckxpc3RlbmVyKGVycm9ycykpKQotICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZVZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW5zdGFuY2VWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBYbWxFeGNlcHRpb24pIHx8IGVycm9ycy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2V0Q3Jhc2godHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UobmV3IFByaW50V3JpdGVyKHN3KSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRJdk1lc3NhZ2VzKENvbGxlY3Rpb25zLnNpbmdsZXRvbihzdy50b1N0cmluZygpKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVzdWx0LmFkZEl2TWVzc2FnZXMoZXJyb3JzKTsKLSAgICAgICAgICAgIHJlc3VsdC5zZXRJdkFjdHVhbChpbnN0YW5jZVZhbGlkKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICAgICAgZmluYWxseQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4ocmVzdWx0LnN1Y2NlZWRlZCgpID8gIlN1Y2Nlc3MuIjogIkZhaWx1cmUuIik7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1sY29tcC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdG9vbC9YU1RDVGVzdGVyLmphdmEgYi92Mi9zcmMveG1sY29tcC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvdG9vbC9YU1RDVGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5MmQ2ODcuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbGNvbXAvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3Rvb2wvWFNUQ1Rlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDU2ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnRvb2w7Ci0KLWltcG9ydCBjb20uYmVhLngyMDAzLngwNS54bWxiZWFuLmx0Z2ZtdC5UZXN0c0RvY3VtZW50OwotaW1wb3J0IGNvbS5iZWEueDIwMDMueDA1LnhtbGJlYW4ubHRnZm10LkZpbGVEZXNjOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9uczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEVycm9yOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ2FsZW5kYXI7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47Ci1pbXBvcnQgamF2YS5uZXQuVVJJOwotCi1wdWJsaWMgY2xhc3MgWFNUQ1Rlc3RlcgotewotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgbG9uZyBzdGFydCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgICAgICAKLSAgICAgICAgQ29tbWFuZExpbmUgY2wgPSBuZXcgQ29tbWFuZExpbmUoYXJncywgQ29sbGVjdGlvbnMuRU1QVFlfU0VUKTsKLSAgICAgICAgYm9vbGVhbiBzaG93cGFzcyA9IChjbC5nZXRPcHQoInNob3dwYXNzIikgIT0gbnVsbCk7Ci0gICAgICAgIEZpbGVbXSBhbGxGaWxlcyA9IGNsLmdldEZpbGVzKCk7Ci0gICAgICAgIENvbGxlY3Rpb24gbHRnRmlsZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIEhhcm5lc3MgaGFybmVzcyA9IG5ldyBYTUxCZWFuWFNUQ0hhcm5lc3MoKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWxsRmlsZXMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChhbGxGaWxlc1tpXS5nZXROYW1lKCkuaW5kZXhPZigiTFRHIikgPj0gMCkKLSAgICAgICAgICAgICAgICBsdGdGaWxlcy5hZGQoYWxsRmlsZXNbaV0pOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBGaWxlIHJlc3VsdHNGaWxlID0gbmV3IEZpbGUoIm91dC5odG1sIik7Ci0gICAgICAgIFByaW50V3JpdGVyIHdyaXRlciA9IG5ldyBQcmludFdyaXRlcihuZXcgRmlsZVdyaXRlcihyZXN1bHRzRmlsZSkpOwotICAgICAgICB3cml0ZXIucHJpbnRsbigiPGh0bWw+Iik7Ci0gICAgICAgIHdyaXRlci5wcmludGxuKCI8c3R5bGU+dGQge2JvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFja30geG1wIHt3aGl0ZS1zcGFjZTogbm9ybWFsOyB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7IHdvcmQtYnJlYWs6IGJyZWFrLWFsbH0gPC9zdHlsZT4iKTsKLSAgICAgICAgd3JpdGVyLnByaW50bG4oIjxib2R5PiIpOwotCi0gICAgICAgIHdyaXRlci5wcmludGxuKCI8c2NyaXB0IGxhbmd1YWdlPSdKYXZhU2NyaXB0JyB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPiIpOwotICAgICAgICB3cml0ZXIucHJpbnRsbigidmFyIHc7Iik7Ci0gICAgICAgIHdyaXRlci5wcmludGxuKCJmdW5jdGlvbiBvcGVuV2luZG93KHNjaGVtYSwgaW5zdGFuY2UpIHsiKTsKLQkgICAgd3JpdGVyLnByaW50bG4oIiAgaWYgKHcgPT0gbnVsbCkgeyIpOwotICAgICAgICB3cml0ZXIucHJpbnRsbigiICAgIHcgPSB3aW5kb3cub3BlbignYWJvdXQ6YmxhbmsnLCAneHN0YycpOyIpOwotCSAgICB3cml0ZXIucHJpbnRsbigiICB9Iik7Ci0JICAgIHdyaXRlci5wcmludGxuKCIgIGlmICh3LmNsb3NlZCkgeyIpOwotCQl3cml0ZXIucHJpbnRsbigiICAgIHcgPSB3aW5kb3cub3BlbignYWJvdXQ6YmxhbmsnLCAneHN0YycpOyIpOwotCSAgICB3cml0ZXIucHJpbnRsbigiICB9Iik7Ci0JICAgIHdyaXRlci5wcmludGxuKCIgIHcuZG9jdW1lbnQub3BlbigpOyIpOwotCSAgICB3cml0ZXIucHJpbnRsbigiICB3LmRvY3VtZW50LndyaXRlKFwiPGZyYW1lc2V0IHJvd3M9KiwqPjxmcmFtZSBzcmM9J1wiICsgc2NoZW1hICsgXCInPjxmcmFtZSBzcmM9J1wiICsgaW5zdGFuY2UgKyBcIic+PC9mcmFtZXNldD5cIik7Iik7Ci0JICAgIHdyaXRlci5wcmludGxuKCIgIHcuZG9jdW1lbnQuY2xvc2UoKTsiKTsKLQkgICAgd3JpdGVyLnByaW50bG4oIiAgdy5mb2N1cygpOyIpOwotICAgICAgICB3cml0ZXIucHJpbnRsbigifSIpOwotICAgICAgICB3cml0ZXIucHJpbnRsbigiPC9zY3JpcHQ+Iik7Ci0KLSAgICAgICAgd3JpdGVyLnByaW50bG4oIjxoMT5YTUwgU2NoZW1hIFRlc3QgQ29sbGVjdGlvbiBSZXN1bHRzPC9oMT4iKTsKLSAgICAgICAgd3JpdGVyLnByaW50bG4oIjxwPlJ1biBvbiAiICsgKG5ldyBYbWxDYWxlbmRhcihuZXcgRGF0ZSgpKSkgKyAiPC9wPiIpOwotICAgICAgICB3cml0ZXIucHJpbnRsbigiPHRhYmxlIHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCBibGFjaycgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wPiIpOwotICAgICAgICB3cml0ZXIucHJpbnRsbigiPHRyPjx0ZCB3aWR0aD03NSU+RGVzY3JpcHRpb248L3RkPjx0ZCB3aWR0aD0xMi41JT5zY2ggdjwvdGQ+PHRkIHdpZHRoPTEyLjUlPmlucyB2PC90ZD48L3RyPiIpOwotICAgICAgICBpbnQgZmFpbHVyZXMgPSAwOwotICAgICAgICBpbnQgY2FzZXMgPSAwOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBsdGdGaWxlcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICB7Ci0gICAgICAgICAgICBGaWxlIGx0Z0ZpbGUgPSAoRmlsZSlpLm5leHQoKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUHJvY2Vzc2luZyB0ZXN0IGNhc2VzIGluICIgKyBsdGdGaWxlKTsKLSAgICAgICAgICAgIENvbGxlY3Rpb24gbHRnRXJyb3JzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAgICAgVGVzdENhc2VbXSB0ZXN0Q2FzZXMgPSBwYXJzZUxUR0ZpbGUobHRnRmlsZSwgbHRnRXJyb3JzKTsKLSAgICAgICAgICAgIENvbGxlY3Rpb24gcmVzdWx0cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgICAgIGlmICh0ZXN0Q2FzZXMgIT0gbnVsbCkgZm9yIChpbnQgaiA9IDA7IGogPCB0ZXN0Q2FzZXMubGVuZ3RoOyBqKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVGVzdENhc2VSZXN1bHQgcmVzdWx0ID0gbmV3IFRlc3RDYXNlUmVzdWx0KCk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnRlc3RDYXNlID0gdGVzdENhc2VzW2pdOwotICAgICAgICAgICAgICAgIGhhcm5lc3MucnVuVGVzdENhc2UocmVzdWx0KTsKLSAgICAgICAgICAgICAgICBjYXNlcyArPSAxOwotICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LnN1Y2NlZWRlZCgpKQotICAgICAgICAgICAgICAgICAgICBmYWlsdXJlcyArPSAxOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzaG93cGFzcykKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgcmVzdWx0cy5hZGQocmVzdWx0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8dHI+PHRkIGNvbHNwYW49MyBiZ2NvbG9yPXNreWJsdWU+IiArIGx0Z0ZpbGUgKyAiPC90ZD48L3RyPiIpOwotICAgICAgICAgICAgaWYgKCFsdGdFcnJvcnMuaXNFbXB0eSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8dHI+PHRkPkVycm9ycyB3aXRoaW4gdGhlIExURyBmaWxlOiIpOwotICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8eG1wPiIpOwotICAgICAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaiA9IGx0Z0Vycm9ycy5pdGVyYXRvcigpOyBqLmhhc05leHQoKTsgKQotICAgICAgICAgICAgICAgICAgICB3cml0ZXIucHJpbnRsbihqLm5leHQoKSk7Ci0gICAgICAgICAgICAgICAgd3JpdGVyLnByaW50bG4oIjwveG1wPiIpOwotICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8L3RkPjwvdHI+Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdHMuc2l6ZSgpID09IDApCi0gICAgICAgICAgICAgICAgICAgIHdyaXRlci5wcmludGxuKCI8dHI+PHRkIGNvbHNwYW49MyBiZ2NvbG9yPWdyZWVuPk5vdGhpbmcgdG8gcmVwb3J0PC90ZD48L3RyPiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJlc3VsdHMgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaiA9IHJlc3VsdHMuaXRlcmF0b3IoKTsgai5oYXNOZXh0KCkgOykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdW1tYXJpemVSZXN1bHRBc0hUTUxUYWJsZVJvd3MoKFRlc3RDYXNlUmVzdWx0KWoubmV4dCgpLCB3cml0ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHdyaXRlci5wcmludGxuKCI8dHI+PHRkIGNvbHNwYW49Mz5TdW1tYXJ5OiAiICsgZmFpbHVyZXMgKyAiIGZhaWx1cmVzIG91dCBvZiAiICsgY2FzZXMgKyAiIGNhc2VzIHJ1bi48L3RkPjwvdHI+Iik7Ci0gICAgICAgIHdyaXRlci5wcmludGxuKCI8L3RhYmxlPiIpOwotICAgICAgICB3cml0ZXIuY2xvc2UoKTsKLSAgICAgICAgCi0gICAgICAgIGxvbmcgZmluaXNoID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVGltZSBydW4gdGVzdHM6ICIgKyAoKGRvdWJsZSkoZmluaXNoIC0gc3RhcnQpIC8gMTAwMC4wKSArICIgc2Vjb25kcyIgKTsKLSAgICAgICAgCi0gICAgICAgIC8vIExhdW5jaCByZXN1bHRzCi0gICAgICAgIGlmIChTeXN0ZW0uZ2V0UHJvcGVydHkoIm9zLm5hbWUiKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIndpbmRvd3MiKSA+PSAwKQotICAgICAgICAgICAgUnVudGltZS5nZXRSdW50aW1lKCkuZXhlYygiY21kIC9jIHN0YXJ0IGlleHBsb3JlIFwiIiArIHJlc3VsdHNGaWxlLmdldEFic29sdXRlUGF0aCgpICsgIlwiIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzdWx0cyBvdXRwdXQgdG8gIiArIHJlc3VsdHNGaWxlKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBUZXN0Q2FzZQotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBGaWxlIGx0Z0ZpbGU7Ci0gICAgICAgIHByaXZhdGUgU3RyaW5nIGlkOwotICAgICAgICBwcml2YXRlIFN0cmluZyBvcmlnaW47Ci0gICAgICAgIHByaXZhdGUgU3RyaW5nIGRlc2NyaXB0aW9uOwotICAgICAgICBwcml2YXRlIEZpbGUgc2NoZW1hRmlsZTsKLSAgICAgICAgcHJpdmF0ZSBGaWxlIGluc3RhbmNlRmlsZTsKLSAgICAgICAgcHJpdmF0ZSBGaWxlIHJlc291cmNlRmlsZTsKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIHN2RXhwZWN0ZWQ7Ci0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBpdkV4cGVjdGVkOwotICAgICAgICBwcml2YXRlIGJvb2xlYW4gcnZFeHBlY3RlZDsKLQotICAgICAgICBwdWJsaWMgRmlsZSBnZXRMdGdGaWxlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGx0Z0ZpbGU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldElkKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGlkOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFN0cmluZyBnZXRPcmlnaW4oKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gb3JpZ2luOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFN0cmluZyBnZXREZXNjcmlwdGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbjsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBGaWxlIGdldFNjaGVtYUZpbGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc2NoZW1hRmlsZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBGaWxlIGdldEluc3RhbmNlRmlsZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZUZpbGU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgRmlsZSBnZXRSZXNvdXJjZUZpbGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gcmVzb3VyY2VGaWxlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gaXNTdkV4cGVjdGVkKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN2RXhwZWN0ZWQ7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0l2RXhwZWN0ZWQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gaXZFeHBlY3RlZDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzUnZFeHBlY3RlZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBydkV4cGVjdGVkOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVGVzdENhc2VSZXN1bHQKLSAgICB7Ci0gICAgICAgIHByaXZhdGUgVGVzdENhc2UgdGVzdENhc2U7Ci0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBzdkFjdHVhbDsKLSAgICAgICAgcHJpdmF0ZSBDb2xsZWN0aW9uIHN2TWVzc2FnZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBpdkFjdHVhbDsKLSAgICAgICAgcHJpdmF0ZSBDb2xsZWN0aW9uIGl2TWVzc2FnZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBjcmFzaDsKLQotICAgICAgICBwdWJsaWMgVGVzdENhc2UgZ2V0VGVzdENhc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdGVzdENhc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc1N2QWN0dWFsKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN2QWN0dWFsOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgc2V0U3ZBY3R1YWwoYm9vbGVhbiBzdkFjdHVhbCkKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5zdkFjdHVhbCA9IHN2QWN0dWFsOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gaXNJdkFjdHVhbCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpdkFjdHVhbDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldEl2QWN0dWFsKGJvb2xlYW4gaXZBY3R1YWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuaXZBY3R1YWwgPSBpdkFjdHVhbDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBDb2xsZWN0aW9uIGdldFN2TWVzc2FnZXMoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlQ29sbGVjdGlvbihzdk1lc3NhZ2VzKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIGFkZFN2TWVzc2FnZXMoQ29sbGVjdGlvbiBzdk1lc3NhZ2VzKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aGlzLnN2TWVzc2FnZXMuYWRkQWxsKHN2TWVzc2FnZXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIENvbGxlY3Rpb24gZ2V0SXZNZXNzYWdlcygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVDb2xsZWN0aW9uKGl2TWVzc2FnZXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgYWRkSXZNZXNzYWdlcyhDb2xsZWN0aW9uIGl2TWVzc2FnZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuaXZNZXNzYWdlcy5hZGRBbGwoaXZNZXNzYWdlcyk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldENyYXNoKGJvb2xlYW4gY3Jhc2gpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMuY3Jhc2ggPSBjcmFzaDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHVibGljIGJvb2xlYW4gaXNDcmFzaCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBjcmFzaDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHVibGljIGJvb2xlYW4gc3VjY2VlZGVkKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICFjcmFzaCAmJiAoaXNJdkFjdHVhbCgpID09IHRlc3RDYXNlLmlzSXZFeHBlY3RlZCgpKSAmJiAoaXNTdkFjdHVhbCgpID09IHRlc3RDYXNlLmlzU3ZFeHBlY3RlZCgpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBIYXJuZXNzCi0gICAgewotICAgICAgICBwdWJsaWMgdm9pZCBydW5UZXN0Q2FzZShUZXN0Q2FzZVJlc3VsdCByZXN1bHQpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyBtYWtlSFRNTExpbmsoRmlsZSBmaWxlLCBib29sZWFuIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKGZpbGUgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiAiJm5ic3A7IjsKLSAgICAgICAgVVJJIHVyaSA9IGZpbGUuZ2V0QWJzb2x1dGVGaWxlKCkudG9VUkkoKTsKLSAgICAgICAgcmV0dXJuICI8YSBocmVmPVwiIiArIHVyaSArICJcIiB0YXJnZXQ9X2JsYW5rPiIgKyBCb29sZWFuLnRvU3RyaW5nKHZhbHVlKSArICI8L2E+IjsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUGF0dGVybiBsZWFkaW5nU3BhY2UgPSBQYXR0ZXJuLmNvbXBpbGUoIl5cXHMrIiwgUGF0dGVybi5NVUxUSUxJTkUpOwotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIG1ha2VIVE1MRGVzY3JpcHRpb24oVGVzdENhc2UgdGVzdENhc2UpCi0gICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIHNiLmFwcGVuZCgiPGEgY2xhc3M9bm9saW5lIGhyZWY9J2phdmFzY3JpcHQ6b3BlbldpbmRvdyhcIiIpOwotICAgICAgICBpZiAodGVzdENhc2UuZ2V0U2NoZW1hRmlsZSgpID09IG51bGwpCi0gICAgICAgICAgICBzYi5hcHBlbmQoImFib3V0Ok5vIHNjaGVtYSIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzYi5hcHBlbmQodGVzdENhc2UuZ2V0U2NoZW1hRmlsZSgpLmdldEFic29sdXRlUGF0aCgpLnJlcGxhY2VBbGwoIlxcXFwiLCAiXFxcXFxcXFwiKSk7Ci0KLSAgICAgICAgc2IuYXBwZW5kKCJcIiwgXCIiKTsKLSAgICAgICAgaWYgKHRlc3RDYXNlLmdldEluc3RhbmNlRmlsZSgpID09IG51bGwpCi0gICAgICAgICAgICBzYi5hcHBlbmQoImFib3V0Ok5vIGluc3RhbmNlIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNiLmFwcGVuZCh0ZXN0Q2FzZS5nZXRJbnN0YW5jZUZpbGUoKS5nZXRBYnNvbHV0ZVBhdGgoKS5yZXBsYWNlQWxsKCJcXFxcIiwgIlxcXFxcXFxcIikpOwotICAgICAgICBzYi5hcHBlbmQoIlwiKSc+PHhtcD4iKTsKLSAgICAgICAgc2IuYXBwZW5kKGxlYWRpbmdTcGFjZS5tYXRjaGVyKHRlc3RDYXNlLmdldERlc2NyaXB0aW9uKCkpLnJlcGxhY2VBbGwoIiIpICsgIigiICsgdGVzdENhc2UuZ2V0SWQoKSArICIpIik7Ci0gICAgICAgIHNiLmFwcGVuZCgiPC94bXA+PC9hPiIpOwotICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHN1bW1hcml6ZVJlc3VsdEFzSFRNTFRhYmxlUm93cyhUZXN0Q2FzZVJlc3VsdCByZXN1bHQsIFByaW50V3JpdGVyIG91dCkKLSAgICB7Ci0gICAgICAgIFRlc3RDYXNlIHRlc3RDYXNlID0gcmVzdWx0LmdldFRlc3RDYXNlKCk7Ci0gICAgICAgIGJvb2xlYW4gc1JpZ2h0ID0gdGVzdENhc2UuZ2V0U2NoZW1hRmlsZSgpID09IG51bGwgfHwgdGVzdENhc2UuaXNTdkV4cGVjdGVkKCkgPT0gcmVzdWx0LmlzU3ZBY3R1YWwoKTsKLSAgICAgICAgYm9vbGVhbiBpUmlnaHQgPSB0ZXN0Q2FzZS5nZXRJbnN0YW5jZUZpbGUoKSA9PSBudWxsIHx8IHRlc3RDYXNlLmlzSXZFeHBlY3RlZCgpID09IHJlc3VsdC5pc0l2QWN0dWFsKCk7Ci0gICAgICAgIAotICAgICAgICBvdXQucHJpbnRsbihyZXN1bHQuaXNDcmFzaCgpID8gIjx0ciBiZ2NvbG9yPWJsYWNrIGNvbG9yPXdoaXRlPiIgOiAiPHRyPiIpOwotICAgICAgICBvdXQucHJpbnRsbigiPHRkIHZhbGlnbj10b3A+IiArIG1ha2VIVE1MRGVzY3JpcHRpb24odGVzdENhc2UpICsgIjwvdGQ+Iik7Ci0gICAgICAgIFN0cmluZyBzTGlua3M7Ci0gICAgICAgIGlmICh0ZXN0Q2FzZS5nZXRSZXNvdXJjZUZpbGUoKSA9PSBudWxsKQotICAgICAgICAgICAgc0xpbmtzID0gbWFrZUhUTUxMaW5rKHRlc3RDYXNlLmdldFNjaGVtYUZpbGUoKSwgcmVzdWx0LmlzU3ZBY3R1YWwoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNMaW5rcyA9IG1ha2VIVE1MTGluayh0ZXN0Q2FzZS5nZXRTY2hlbWFGaWxlKCksIHJlc3VsdC5pc1N2QWN0dWFsKCkpICsgIjxicj4iICsgbWFrZUhUTUxMaW5rKHRlc3RDYXNlLmdldFJlc291cmNlRmlsZSgpLCByZXN1bHQuaXNTdkFjdHVhbCgpKTsKLSAgICAgICAgCi0gICAgICAgIG91dC5wcmludGxuKChzUmlnaHQgPyAiPHRkIHZhbGlnbj10b3A+IiA6IHJlc3VsdC5pc1N2QWN0dWFsKCkgPyAiPHRkIGJnY29sb3I9b3JhbmdlIHZhbGlnbj10b3A+IiA6ICI8dGQgYmdjb2xvcj1yZWQgdmFsaWduPXRvcD4iKSArIHNMaW5rcyArICI8L3RkPiIpOwotICAgICAgICBvdXQucHJpbnRsbigoaVJpZ2h0ID8gIjx0ZCB2YWxpZ249dG9wPiIgOiByZXN1bHQuaXNJdkFjdHVhbCgpID8gIjx0ZCBiZ2NvbG9yPW9yYW5nZSB2YWxpZ249dG9wPiIgOiAiPHRkIGJnY29sb3I9cmVkIHZhbGlnbj10b3A+IikgKyBtYWtlSFRNTExpbmsodGVzdENhc2UuZ2V0SW5zdGFuY2VGaWxlKCksIHJlc3VsdC5pc0l2QWN0dWFsKCkpICsgIjwvdGQ+Iik7Ci0gICAgICAgIG91dC5wcmludGxuKCI8L3RyPiIpOwotICAgICAgICBpZiAoIXJlc3VsdC5nZXRJdk1lc3NhZ2VzKCkuaXNFbXB0eSgpIHx8ICFyZXN1bHQuZ2V0U3ZNZXNzYWdlcygpLmlzRW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFyZXN1bHQuc3VjY2VlZGVkKCkpCi0gICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0cj48dGQgY29sc3Bhbj0zIGJnY29sb3I9eWVsbG93Pjx4bXA+Iik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIjx0cj48dGQgY29sc3Bhbj0zPjx4bXA+Iik7Ci0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGogPSByZXN1bHQuZ2V0U3ZNZXNzYWdlcygpLml0ZXJhdG9yKCk7IGouaGFzTmV4dCgpOyApCi0gICAgICAgICAgICAgICAgb3V0LnByaW50bG4oai5uZXh0KCkpOwotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBqID0gcmVzdWx0LmdldEl2TWVzc2FnZXMoKS5pdGVyYXRvcigpOyBqLmhhc05leHQoKTsgKQotICAgICAgICAgICAgICAgIG91dC5wcmludGxuKGoubmV4dCgpKTsKLSAgICAgICAgICAgIG91dC5wcmludGxuKCI8L3htcD48L3RyPjwvdGQ+Iik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBUZXN0Q2FzZVtdIHBhcnNlTFRHRmlsZShGaWxlIGx0Z0ZpbGUsIENvbGxlY3Rpb24gb3V0ZXJFcnJvcnMpCi0gICAgewotICAgICAgICBDb2xsZWN0aW9uIGVycm9ycyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFhtbE9wdGlvbnMgbHRnT3B0aW9ucyA9IG5ldyBYbWxPcHRpb25zKCk7Ci0gICAgICAgICAgICBsdGdPcHRpb25zLnNldExvYWRTdWJzdGl0dXRlTmFtZXNwYWNlcyhDb2xsZWN0aW9ucy5zaW5nbGV0b25NYXAoIiIsICJodHRwOi8vd3d3LmJlYS5jb20vMjAwMy8wNS94bWxiZWFuL2x0Z2ZtdCIpKTsKLSAgICAgICAgICAgIGx0Z09wdGlvbnMuc2V0RXJyb3JMaXN0ZW5lcihlcnJvcnMpOwotICAgICAgICAgICAgbHRnT3B0aW9ucy5zZXRMb2FkTGluZU51bWJlcnMoKTsKLSAgICAgICAgICAgIFRlc3RzRG9jdW1lbnQgZG9jID0gVGVzdHNEb2N1bWVudC5GYWN0b3J5LnBhcnNlKGx0Z0ZpbGUsIGx0Z09wdGlvbnMpOwotICAgICAgICAgICAgaWYgKCFkb2MudmFsaWRhdGUobHRnT3B0aW9ucykpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiRG9jdW1lbnQgIiArIGx0Z0ZpbGUgKyAiIG5vdCB2YWxpZC4iKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY29tLmJlYS54MjAwMy54MDUueG1sYmVhbi5sdGdmbXQuVGVzdENhc2VbXSB0ZXN0Q2FzZXMgPSBkb2MuZ2V0VGVzdHMoKS5nZXRUZXN0QXJyYXkoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQ29sbGVjdGlvbiByZXN1bHQgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlc3RDYXNlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUZXN0Q2FzZSBuZXdDYXNlID0gbmV3IFRlc3RDYXNlKCk7Ci0gICAgICAgICAgICAgICAgbmV3Q2FzZS5sdGdGaWxlID0gbHRnRmlsZTsKLSAgICAgICAgICAgICAgICBuZXdDYXNlLmlkID0gdGVzdENhc2VzW2ldLmdldElkKCk7Ci0gICAgICAgICAgICAgICAgbmV3Q2FzZS5vcmlnaW4gPSB0ZXN0Q2FzZXNbaV0uZ2V0T3JpZ2luKCk7Ci0gICAgICAgICAgICAgICAgbmV3Q2FzZS5kZXNjcmlwdGlvbiA9IHRlc3RDYXNlc1tpXS5nZXREZXNjcmlwdGlvbigpOwotICAgICAgICAgICAgICAgIEZpbGVEZXNjW10gZmlsZWRlc2NzID0gdGVzdENhc2VzW2ldLmdldEZpbGVzKCkuZ2V0RmlsZUFycmF5KCk7Ci0gICAgICAgICAgICAgICAgdGVzdENhc2VzW2ldLmdldE9yaWdpbigpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgZmlsZWRlc2NzLmxlbmd0aDsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRpciA9IGZpbGVkZXNjc1tqXS5nZXRGb2xkZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVuYW1lID0gZmlsZWRlc2NzW2pdLmdldEZpbGVOYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIEZpbGUgdGhlRmlsZSA9IG5ldyBGaWxlKGx0Z0ZpbGUuZ2V0UGFyZW50RmlsZSgpLCBkaXIgKyAiLyIgKyBmaWxlbmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghdGhlRmlsZS5leGlzdHMoKSB8fCAhdGhlRmlsZS5pc0ZpbGUoKSB8fCAhdGhlRmlsZS5jYW5SZWFkKCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dGVyRXJyb3JzLmFkZChYbWxFcnJvci5mb3JPYmplY3QoIkNhbid0IHJlYWQgZmlsZSAiICsgdGhlRmlsZSwgZmlsZWRlc2NzW2pdKS50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZpbGVkZXNjc1tqXS5nZXRSb2xlKCkuaW50VmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGaWxlRGVzYy5Sb2xlLklOVF9JTlNUQU5DRToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3Q2FzZS5pbnN0YW5jZUZpbGUgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXJFcnJvcnMuYWRkKFhtbEVycm9yLmZvck9iamVjdCgiTW9yZSB0aGFuIG9uZSBpbnN0YW5jZSBmaWxlIHNwZWljaWZlZCAtIGlnbm9yaW5nIGFsbCBidXQgbGFzdCIsIGZpbGVkZXNjc1tqXSkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZS5pbnN0YW5jZUZpbGUgPSB0aGVGaWxlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Nhc2UuaXZFeHBlY3RlZCA9IGZpbGVkZXNjc1tqXS5nZXRWYWxpZGl0eSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBGaWxlRGVzYy5Sb2xlLklOVF9TQ0hFTUE6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0Nhc2Uuc2NoZW1hRmlsZSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRlckVycm9ycy5hZGQoWG1sRXJyb3IuZm9yT2JqZWN0KCJNb3JlIHRoYW4gb25lIHNjaGVtYSBmaWxlIHNwZWljaWZlZCAtIGlnbm9yaW5nIGFsbCBidXQgbGFzdCIsIGZpbGVkZXNjc1tqXSkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2FzZS5zY2hlbWFGaWxlID0gdGhlRmlsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDYXNlLnN2RXhwZWN0ZWQgPSBmaWxlZGVzY3Nbal0uZ2V0VmFsaWRpdHkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRmlsZURlc2MuUm9sZS5JTlRfUkVTT1VSQ0U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0Nhc2UucmVzb3VyY2VGaWxlICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGVyRXJyb3JzLmFkZChYbWxFcnJvci5mb3JPYmplY3QoIk1vcmUgdGhhbiBvbmUgcmVzb3VyY2UgZmlsZSBzcGVpY2lmZWQgLSBpZ25vcmluZyBhbGwgYnV0IGxhc3QiLCBmaWxlZGVzY3Nbal0pLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Nhc2UucmVzb3VyY2VGaWxlID0gdGhlRmlsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDYXNlLnJ2RXhwZWN0ZWQgPSBmaWxlZGVzY3Nbal0uZ2V0VmFsaWRpdHkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWG1sRXhjZXB0aW9uKFhtbEVycm9yLmZvck9iamVjdCgiVW5leHBlY3RlZCBmaWxlIHJvbGUiLCBmaWxlZGVzY3Nbal0pKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXN1bHQuYWRkKG5ld0Nhc2UpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIChUZXN0Q2FzZVtdKXJlc3VsdC50b0FycmF5KG5ldyBUZXN0Q2FzZVtyZXN1bHQuc2l6ZSgpXSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZXJyb3JzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBvdXRlckVycm9ycy5hZGQoZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgZWxzZSBmb3IgKEl0ZXJhdG9yIGkgPSBlcnJvcnMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgICAgICAgICBvdXRlckVycm9ycy5hZGQoaS5uZXh0KCkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxjb21wL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC90b29sL1hzYkR1bXBlci5qYXZhIGIvdjIvc3JjL3htbGNvbXAvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3Rvb2wvWHNiRHVtcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzZGYxMjkuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbGNvbXAvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3Rvb2wvWHNiRHVtcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjU3ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnRvb2w7Ci0KLWltcG9ydCBqYXZhLnV0aWwuKjsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcEZpbGU7Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBFbnRyeTsKLWltcG9ydCBqYXZhLmlvLio7Ci1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uUU5hbWVIZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnV0aWwuSGV4QmluOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFMb2NhbEF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVBhcnRpY2xlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hUHJvcGVydHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuc29hcC5TT0FQQXJyYXlUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9uczsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1wdWJsaWMgY2xhc3MgWHNiRHVtcGVyCi17Ci0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgZHVtcChuZXcgRmlsZShhcmdzW2ldKSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGR1bXAoRmlsZSBmaWxlLCBib29sZWFuIGZvcmNlKQotICAgIHsKLSAgICAgICAgaWYgKGZpbGUuaXNEaXJlY3RvcnkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgRmlsZVtdIGZpbGVzID0gZmlsZS5saXN0RmlsZXMoCi0gICAgICAgICAgICAgICAgbmV3IEZpbGVGaWx0ZXIoKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gYWNjZXB0KEZpbGUgZmlsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGZpbGUuaXNEaXJlY3RvcnkoKSB8fCBmaWxlLmlzRmlsZSgpICYmIGZpbGUuZ2V0TmFtZSgpLmVuZHNXaXRoKCIueHNiIik7IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICApOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkdW1wKGZpbGVzW2ldLCBmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZmlsZS5nZXROYW1lKCkuZW5kc1dpdGgoIi5qYXIiKSB8fCBmaWxlLmdldE5hbWUoKS5lbmRzV2l0aCgiLnppcCIpKQotICAgICAgICB7Ci0gICAgICAgICAgICBkdW1wWmlwKGZpbGUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGZvcmNlIHx8IGZpbGUuZ2V0TmFtZSgpLmVuZHNXaXRoKCIueHNiIikpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihmaWxlLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGR1bXAobmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKSwgIiAgIik7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgZHVtcFppcChGaWxlIGZpbGUpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgWmlwRmlsZSB6aXBGaWxlID0gbmV3IFppcEZpbGUoZmlsZSk7Ci0gICAgICAgICAgICBFbnVtZXJhdGlvbiBlID0gemlwRmlsZS5lbnRyaWVzKCk7Ci0gICAgICAgICAgICB3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBaaXBFbnRyeSBlbnRyeSA9IChaaXBFbnRyeSllLm5leHRFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGVudHJ5LmdldE5hbWUoKS5lbmRzV2l0aCgiLnhzYiIpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGVudHJ5LmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGR1bXAoemlwRmlsZS5nZXRJbnB1dFN0cmVhbShlbnRyeSksICIgICIpOwotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGR1bXAoSW5wdXRTdHJlYW0gaW5wdXQpCi0gICAgewotICAgICAgICBkdW1wKGlucHV0LCAiIik7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGR1bXAoSW5wdXRTdHJlYW0gaW5wdXQsIFN0cmluZyBpbmRlbnQpCi0gICAgewotICAgICAgICBYc2JEdW1wZXIgZHVtcGVyID0gbmV3IFhzYkR1bXBlcihpbnB1dCwgaW5kZW50KTsKLSAgICAgICAgZHVtcGVyLmR1bXBBbGwoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFhzYkR1bXBlcihJbnB1dFN0cmVhbSBzdHJlYW0sIFN0cmluZyBpbmRlbnQpCi0gICAgewotICAgICAgICBfaW5wdXQgPSBuZXcgRGF0YUlucHV0U3RyZWFtKHN0cmVhbSk7Ci0gICAgICAgIF9pbmRlbnQgPSBpbmRlbnQ7Ci0gICAgfQotCi0gICAgdm9pZCBmbHVzaCgpIHsgU3lzdGVtLm91dC5mbHVzaCgpOyB9Ci0gICAgdm9pZCBlbWl0KFN0cmluZyBzdHIpIHsgU3lzdGVtLm91dC5wcmludGxuKF9pbmRlbnQgKyBzdHIpOyBmbHVzaCgpOyB9Ci0gICAgdm9pZCBlbWl0KCkgeyBTeXN0ZW0ub3V0LnByaW50bG4oKTsgZmx1c2goKTsgfQotICAgIHZvaWQgZXJyb3IoRXhjZXB0aW9uIGUpIHsgU3lzdGVtLm91dC5wcmludGxuKGUudG9TdHJpbmcoKSk7IGZsdXNoKCk7IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlMiA9IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIGUuZ2V0TWVzc2FnZSgpICk7IGUyLmluaXRDYXVzZSggZSApOyB0aHJvdyBlMjsgfQotICAgIHZvaWQgZXJyb3IoU3RyaW5nIHN0cikgeyBTeXN0ZW0ub3V0LnByaW50bG4oc3RyKTsgZmx1c2goKTsgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUyID0gbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiggc3RyICk7IHRocm93IGUyOyB9Ci0gICAgcHJpdmF0ZSBTdHJpbmcgX2luZGVudDsKLSAgICB2b2lkIGluZGVudCgpIHsgX2luZGVudCArPSAiICAiOyB9Ci0gICAgdm9pZCBvdXRkZW50KCkgeyBfaW5kZW50ID0gX2luZGVudC5zdWJzdHJpbmcoMCwgX2luZGVudC5sZW5ndGgoKSAtIDIpOyB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEQVRBX0JBQkUgPSAweERBN0FCQUJFOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BSk9SX1ZFUlNJT04gPSAyOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1JTk9SX1ZFUlNJT04gPSAxNjsKLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZJTEVUWVBFX1NDSEVNQUlOREVYID0gMTsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGSUxFVFlQRV9TQ0hFTUFUWVBFID0gMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGSUxFVFlQRV9TQ0hFTUFFTEVNRU5UID0gMzsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGSUxFVFlQRV9TQ0hFTUFBVFRSSUJVVEUgPSA0OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZJTEVUWVBFX1NDSEVNQVBPSU5URVIgPSA1OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZJTEVUWVBFX1NDSEVNQU1PREVMR1JPVVAgPSA2OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZJTEVUWVBFX1NDSEVNQUFUVFJJQlVURUdST1VQID0gNzsKLQotICAgIHN0YXRpYyBTdHJpbmcgZmlsZXR5cGVTdHJpbmcoaW50IGNvZGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgRklMRVRZUEVfU0NIRU1BSU5ERVg6IHJldHVybiAiRklMRVRZUEVfU0NIRU1BSU5ERVgiOwotICAgICAgICAgICAgY2FzZSBGSUxFVFlQRV9TQ0hFTUFUWVBFOiByZXR1cm4gIkZJTEVUWVBFX1NDSEVNQVRZUEUiOwotICAgICAgICAgICAgY2FzZSBGSUxFVFlQRV9TQ0hFTUFFTEVNRU5UOiByZXR1cm4gIkZJTEVUWVBFX1NDSEVNQUVMRU1FTlQiOwotICAgICAgICAgICAgY2FzZSBGSUxFVFlQRV9TQ0hFTUFBVFRSSUJVVEU6IHJldHVybiAiRklMRVRZUEVfU0NIRU1BQVRUUklCVVRFIjsKLSAgICAgICAgICAgIGNhc2UgRklMRVRZUEVfU0NIRU1BUE9JTlRFUjogcmV0dXJuICJGSUxFVFlQRV9TQ0hFTUFQT0lOVEVSIjsKLSAgICAgICAgICAgIGNhc2UgRklMRVRZUEVfU0NIRU1BTU9ERUxHUk9VUDogcmV0dXJuICJGSUxFVFlQRV9TQ0hFTUFNT0RFTEdST1VQIjsKLSAgICAgICAgICAgIGNhc2UgRklMRVRZUEVfU0NIRU1BQVRUUklCVVRFR1JPVVA6IHJldHVybiAiRklMRVRZUEVfU0NIRU1BQVRUUklCVVRFR1JPVVAiOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIlVua25vd24gRklMRVRZUEUgKCIgKyBjb2RlICsgIikiOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19QQVJUX1NLSVBQQUJMRSA9IDE7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19QQVJUX0ZJWEVEID0gNDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX1BBUlRfTklMTEFCTEUgPSA4OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfUEFSVF9CTE9DS0VYVCA9IDE2OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfUEFSVF9CTE9DS1JFU1QgPSAzMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX1BBUlRfQkxPQ0tTVUJTVCA9IDY0OwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfUEFSVF9BQlNUUkFDVCA9IDEyODsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX1BBUlRfRklOQUxFWFQgPSAyNTY7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19QQVJUX0ZJTkFMUkVTVCA9IDUxMjsKLQotICAgIHN0YXRpYyBTdHJpbmcgcGFydGljbGVmbGFnc1N0cmluZyhpbnQgZmxhZ3MpCi0gICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBpZiAoKGZsYWdzICYgRkxBR19QQVJUX1NLSVBQQUJMRSkgIT0gMCkgcmVzdWx0LmFwcGVuZCgiRkxBR19QQVJUX1NLSVBQQUJMRSB8ICIpOwotICAgICAgICBpZiAoKGZsYWdzICYgRkxBR19QQVJUX0ZJWEVEKSAhPSAwKSByZXN1bHQuYXBwZW5kKCJGTEFHX1BBUlRfRklYRUQgfCAiKTsKLSAgICAgICAgaWYgKChmbGFncyAmIEZMQUdfUEFSVF9OSUxMQUJMRSkgIT0gMCkgcmVzdWx0LmFwcGVuZCgiRkxBR19QQVJUX05JTExBQkxFIHwgIik7Ci0gICAgICAgIGlmICgoZmxhZ3MgJiBGTEFHX1BBUlRfQkxPQ0tFWFQpICE9IDApIHJlc3VsdC5hcHBlbmQoIkZMQUdfUEFSVF9CTE9DS0VYVCB8ICIpOwotICAgICAgICBpZiAoKGZsYWdzICYgRkxBR19QQVJUX0JMT0NLUkVTVCkgIT0gMCkgcmVzdWx0LmFwcGVuZCgiRkxBR19QQVJUX0JMT0NLUkVTVCB8ICIpOwotICAgICAgICBpZiAoKGZsYWdzICYgRkxBR19QQVJUX0JMT0NLU1VCU1QpICE9IDApIHJlc3VsdC5hcHBlbmQoIkZMQUdfUEFSVF9CTE9DS1NVQlNUIHwgIik7Ci0gICAgICAgIGlmICgoZmxhZ3MgJiBGTEFHX1BBUlRfQUJTVFJBQ1QpICE9IDApIHJlc3VsdC5hcHBlbmQoIkZMQUdfUEFSVF9BQlNUUkFDVCB8ICIpOwotICAgICAgICBpZiAoKGZsYWdzICYgRkxBR19QQVJUX0ZJTkFMRVhUKSAhPSAwKSByZXN1bHQuYXBwZW5kKCJGTEFHX1BBUlRfRklOQUxFWFQgfCAiKTsKLSAgICAgICAgaWYgKChmbGFncyAmIEZMQUdfUEFSVF9GSU5BTFJFU1QpICE9IDApIHJlc3VsdC5hcHBlbmQoIkZMQUdfUEFSVF9GSU5BTFJFU1QgfCAiKTsKLSAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgoKSA9PSAwKSByZXN1bHQuYXBwZW5kKCIwIHwgIik7Ci0gICAgICAgIHJldHVybiByZXN1bHQuc3Vic3RyaW5nKDAsIHJlc3VsdC5sZW5ndGgoKSAtIDMpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfUFJPUF9JU0FUVFIgPSAxOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfUFJPUF9KQVZBU0lOR0xFVE9OID0gMjsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX1BST1BfSkFWQU9QVElPTkFMID0gNDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX1BST1BfSkFWQUFSUkFZID0gODsKLQotICAgIHN0YXRpYyBTdHJpbmcgcHJvcGVydHlmbGFnc1N0cmluZyhpbnQgZmxhZ3MpCi0gICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBpZiAoKGZsYWdzICYgRkxBR19QUk9QX0lTQVRUUikgIT0gMCkgcmVzdWx0LmFwcGVuZCgiRkxBR19QUk9QX0lTQVRUUiB8ICIpOwotICAgICAgICBpZiAoKGZsYWdzICYgRkxBR19QUk9QX0pBVkFTSU5HTEVUT04pICE9IDApIHJlc3VsdC5hcHBlbmQoIkZMQUdfUFJPUF9KQVZBU0lOR0xFVE9OIHwgIik7Ci0gICAgICAgIGlmICgoZmxhZ3MgJiBGTEFHX1BST1BfSkFWQU9QVElPTkFMKSAhPSAwKSByZXN1bHQuYXBwZW5kKCJGTEFHX1BST1BfSkFWQU9QVElPTkFMIHwgIik7Ci0gICAgICAgIGlmICgoZmxhZ3MgJiBGTEFHX1BST1BfSkFWQUFSUkFZKSAhPSAwKSByZXN1bHQuYXBwZW5kKCJGTEFHX1BST1BfSkFWQUFSUkFZIHwgIik7Ci0gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoKCkgPT0gMCkgcmVzdWx0LmFwcGVuZCgiMCB8ICIpOwotICAgICAgICByZXR1cm4gcmVzdWx0LnN1YnN0cmluZygwLCByZXN1bHQubGVuZ3RoKCkgLSAzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGSUVMRF9OT05FID0gMDsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGSUVMRF9HTE9CQUwgPSAxOwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZJRUxEX0xPQ0FMQVRUUiA9IDI7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRklFTERfTE9DQUxFTFQgPSAzOwotCi0gICAgc3RhdGljIFN0cmluZyBjb250YWluZXJmaWVsZFR5cGVTdHJpbmcoaW50IGNvZGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgRklFTERfTk9ORTogcmV0dXJuICJGSUVMRF9OT05FIjsKLSAgICAgICAgICAgIGNhc2UgRklFTERfR0xPQkFMOiByZXR1cm4gIkZJRUxEX0dMT0JBTCI7Ci0gICAgICAgICAgICBjYXNlIEZJRUxEX0xPQ0FMQVRUUjogcmV0dXJuICJGSUVMRF9MT0NBTEFUVFIiOwotICAgICAgICAgICAgY2FzZSBGSUVMRF9MT0NBTEVMVDogcmV0dXJuICJGSUVMRF9MT0NBTEVMVCI7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiAiVW5rbm93biBjb250YWluZXIgZmllbGQgdHlwZSAoIiArIGNvZGUgKyAiKSI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyB0eXBlIGZsYWdzCi0gICAgc3RhdGljIGZpbmFsIGludCBGTEFHX1NJTVBMRV9UWVBFICAgICA9IDB4MTsKLSAgICBzdGF0aWMgZmluYWwgaW50IEZMQUdfRE9DVU1FTlRfVFlQRSAgID0gMHgyOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19PUkRFUkVEICAgICAgICAgPSAweDQ7Ci0gICAgc3RhdGljIGZpbmFsIGludCBGTEFHX0JPVU5ERUQgICAgICAgICA9IDB4ODsKLSAgICBzdGF0aWMgZmluYWwgaW50IEZMQUdfRklOSVRFICAgICAgICAgID0gMHgxMDsKLSAgICBzdGF0aWMgZmluYWwgaW50IEZMQUdfTlVNRVJJQyAgICAgICAgID0gMHgyMDsKLSAgICBzdGF0aWMgZmluYWwgaW50IEZMQUdfU1RSSU5HRU5VTSAgICAgID0gMHg0MDsKLSAgICBzdGF0aWMgZmluYWwgaW50IEZMQUdfVU5JT05fT0ZfTElTVFMgID0gMHg4MDsKLSAgICBzdGF0aWMgZmluYWwgaW50IEZMQUdfSEFTX1BBVFRFUk4gICAgID0gMHgxMDA7Ci0gICAgc3RhdGljIGZpbmFsIGludCBGTEFHX09SREVSX1NFTlNJVElWRSA9IDB4MjAwOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19UT1RBTF9PUkRFUiAgICAgPSAweDQwMDsKLSAgICBzdGF0aWMgZmluYWwgaW50IEZMQUdfQ09NUElMRUQgICAgICAgID0gMHg4MDA7Ci0gICAgc3RhdGljIGZpbmFsIGludCBGTEFHX0JMT0NLX0VYVCAgICAgICA9IDB4MTAwMDsKLSAgICBzdGF0aWMgZmluYWwgaW50IEZMQUdfQkxPQ0tfUkVTVCAgICAgID0gMHgyMDAwOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19GSU5BTF9FWFQgICAgICAgPSAweDQwMDA7Ci0gICAgc3RhdGljIGZpbmFsIGludCBGTEFHX0ZJTkFMX1JFU1QgICAgICA9IDB4ODAwMDsKLSAgICBzdGF0aWMgZmluYWwgaW50IEZMQUdfRklOQUxfVU5JT04gICAgID0gMHgxMDAwMDsKLSAgICBzdGF0aWMgZmluYWwgaW50IEZMQUdfRklOQUxfTElTVCAgICAgID0gMHgyMDAwMDsKLSAgICBzdGF0aWMgZmluYWwgaW50IEZMQUdfQUJTVFJBQ1QgICAgICAgID0gMHg0MDAwMDsKLSAgICBzdGF0aWMgZmluYWwgaW50IEZMQUdfQVRUUklCVVRFX1RZUEUgID0gMHg4MDAwMDsKLQotICAgIHN0YXRpYyBTdHJpbmcgdHlwZWZsYWdzU3RyaW5nKGludCBmbGFncykKLSAgICB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIGlmICgoZmxhZ3MgJiBGTEFHX1NJTVBMRV9UWVBFKSAhPSAwKSByZXN1bHQuYXBwZW5kKCJGTEFHX1NJTVBMRV9UWVBFIHwgIik7Ci0gICAgICAgIGlmICgoZmxhZ3MgJiBGTEFHX0RPQ1VNRU5UX1RZUEUpICE9IDApIHJlc3VsdC5hcHBlbmQoIkZMQUdfRE9DVU1FTlRfVFlQRSB8ICIpOwotICAgICAgICBpZiAoKGZsYWdzICYgRkxBR19BVFRSSUJVVEVfVFlQRSkgIT0gMCkgcmVzdWx0LmFwcGVuZCgiRkxBR19BVFRSSUJVVEVfVFlQRSB8ICIpOwotICAgICAgICBpZiAoKGZsYWdzICYgRkxBR19PUkRFUkVEKSAhPSAwKSByZXN1bHQuYXBwZW5kKCJGTEFHX09SREVSRUQgfCAiKTsKLSAgICAgICAgaWYgKChmbGFncyAmIEZMQUdfQk9VTkRFRCkgIT0gMCkgcmVzdWx0LmFwcGVuZCgiRkxBR19CT1VOREVEIHwgIik7Ci0gICAgICAgIGlmICgoZmxhZ3MgJiBGTEFHX0ZJTklURSkgIT0gMCkgcmVzdWx0LmFwcGVuZCgiRkxBR19GSU5JVEUgfCAiKTsKLSAgICAgICAgaWYgKChmbGFncyAmIEZMQUdfTlVNRVJJQykgIT0gMCkgcmVzdWx0LmFwcGVuZCgiRkxBR19OVU1FUklDIHwgIik7Ci0gICAgICAgIGlmICgoZmxhZ3MgJiBGTEFHX1NUUklOR0VOVU0pICE9IDApIHJlc3VsdC5hcHBlbmQoIkZMQUdfU1RSSU5HRU5VTSB8ICIpOwotICAgICAgICBpZiAoKGZsYWdzICYgRkxBR19VTklPTl9PRl9MSVNUUykgIT0gMCkgcmVzdWx0LmFwcGVuZCgiRkxBR19VTklPTl9PRl9MSVNUUyB8ICIpOwotICAgICAgICBpZiAoKGZsYWdzICYgRkxBR19IQVNfUEFUVEVSTikgIT0gMCkgcmVzdWx0LmFwcGVuZCgiRkxBR19IQVNfUEFUVEVSTiB8ICIpOwotICAgICAgICBpZiAoKGZsYWdzICYgRkxBR19UT1RBTF9PUkRFUikgIT0gMCkgcmVzdWx0LmFwcGVuZCgiRkxBR19UT1RBTF9PUkRFUiB8ICIpOwotICAgICAgICBpZiAoKGZsYWdzICYgRkxBR19DT01QSUxFRCkgIT0gMCkgcmVzdWx0LmFwcGVuZCgiRkxBR19DT01QSUxFRCB8ICIpOwotICAgICAgICBpZiAoKGZsYWdzICYgRkxBR19CTE9DS19FWFQpICE9IDApIHJlc3VsdC5hcHBlbmQoIkZMQUdfQkxPQ0tfRVhUIHwgIik7Ci0gICAgICAgIGlmICgoZmxhZ3MgJiBGTEFHX0JMT0NLX1JFU1QpICE9IDApIHJlc3VsdC5hcHBlbmQoIkZMQUdfQkxPQ0tfUkVTVCB8ICIpOwotICAgICAgICBpZiAoKGZsYWdzICYgRkxBR19GSU5BTF9FWFQpICE9IDApIHJlc3VsdC5hcHBlbmQoIkZMQUdfRklOQUxfRVhUIHwgIik7Ci0gICAgICAgIGlmICgoZmxhZ3MgJiBGTEFHX0ZJTkFMX1JFU1QpICE9IDApIHJlc3VsdC5hcHBlbmQoIkZMQUdfRklOQUxfUkVTVCB8ICIpOwotICAgICAgICBpZiAoKGZsYWdzICYgRkxBR19GSU5BTF9VTklPTikgIT0gMCkgcmVzdWx0LmFwcGVuZCgiRkxBR19GSU5BTF9VTklPTiB8ICIpOwotICAgICAgICBpZiAoKGZsYWdzICYgRkxBR19GSU5BTF9MSVNUKSAhPSAwKSByZXN1bHQuYXBwZW5kKCJGTEFHX0ZJTkFMX0xJU1QgfCAiKTsKLSAgICAgICAgaWYgKChmbGFncyAmIEZMQUdfQUJTVFJBQ1QpICE9IDApIHJlc3VsdC5hcHBlbmQoIkZMQUdfQUJTVFJBQ1QgfCAiKTsKLSAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgoKSA9PSAwKSByZXN1bHQuYXBwZW5kKCIwIHwgIik7Ci0gICAgICAgIHJldHVybiByZXN1bHQuc3Vic3RyaW5nKDAsIHJlc3VsdC5sZW5ndGgoKSAtIDMpOwotICAgIH0KLQotICAgIHZvaWQgZHVtcEFsbCgpCi0gICAgewotICAgICAgICBpbnQgZmlsZXR5cGUgPSBkdW1wSGVhZGVyKCk7Ci0gICAgICAgIHN3aXRjaCAoZmlsZXR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgRklMRVRZUEVfU0NIRU1BSU5ERVg6Ci0gICAgICAgICAgICAgICAgZHVtcEluZGV4RGF0YSgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNhc2UgRklMRVRZUEVfU0NIRU1BVFlQRToKLSAgICAgICAgICAgICAgICBkdW1wVHlwZUZpbGVEYXRhKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZJTEVUWVBFX1NDSEVNQUVMRU1FTlQ6Ci0gICAgICAgICAgICAgICAgZHVtcFBhcnRpY2xlRGF0YSh0cnVlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRklMRVRZUEVfU0NIRU1BQVRUUklCVVRFOgotICAgICAgICAgICAgICAgIGR1bXBBdHRyaWJ1dGVEYXRhKHRydWUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGSUxFVFlQRV9TQ0hFTUFQT0lOVEVSOgotICAgICAgICAgICAgICAgIGR1bXBQb2ludGVyRGF0YSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGSUxFVFlQRV9TQ0hFTUFNT0RFTEdST1VQOgotICAgICAgICAgICAgICAgIGR1bXBNb2RlbEdyb3VwRGF0YSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGSUxFVFlQRV9TQ0hFTUFBVFRSSUJVVEVHUk9VUDoKLSAgICAgICAgICAgICAgICBkdW1wQXR0cmlidXRlR3JvdXBEYXRhKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmVhZEVuZCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBTdHJpbmcgaGV4MzJTdHJpbmcoaW50IGkpCi0gICAgewotICAgICAgICByZXR1cm4gSW50ZWdlci50b0hleFN0cmluZyhpKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgaW50IGR1bXBIZWFkZXIoKQotICAgIHsKLSAgICAgICAgaW50IG1hZ2ljID0gcmVhZEludCgpOwotICAgICAgICBlbWl0KCJNYWdpYyBjb29raWU6ICIgKyBoZXgzMlN0cmluZyhtYWdpYykpOwotCi0gICAgICAgIGlmIChtYWdpYyAhPSBEQVRBX0JBQkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVtaXQoIldyb25nIG1hZ2ljIGNvb2tpZS4iKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgX21ham9ydmVyID0gcmVhZFNob3J0KCk7Ci0gICAgICAgIF9taW5vcnZlciA9IHJlYWRTaG9ydCgpOwotICAgICAgICBpZiAoYXRMZWFzdCgyLCAxOCwgMCkpCi0gICAgICAgICAgICBfcmVsZWFzZW5vID0gcmVhZFNob3J0KCk7Ci0KLSAgICAgICAgZW1pdCgiTWFqb3IgdmVyc2lvbjogIiArIF9tYWpvcnZlcik7Ci0gICAgICAgIGVtaXQoIk1pbm9yIHZlcnNpb246ICIgKyBfbWlub3J2ZXIpOwotICAgICAgICBlbWl0KCJSZWxlYXNlIG51bWJlcjogIiArIF9yZWxlYXNlbm8pOwotCi0gICAgICAgIGlmIChfbWFqb3J2ZXIgIT0gTUFKT1JfVkVSU0lPTiB8fCBfbWlub3J2ZXIgPiBNSU5PUl9WRVJTSU9OKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbWl0KCJJbmNvbXBhdGlibGUgdmVyc2lvbi4iKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGFjdHVhbGZpbGV0eXBlID0gcmVhZFNob3J0KCk7Ci0gICAgICAgIGVtaXQoIkZpbGV0eXBlOiAiICsgZmlsZXR5cGVTdHJpbmcoYWN0dWFsZmlsZXR5cGUpKTsKLQotICAgICAgICBfc3RyaW5nUG9vbCA9IG5ldyBTdHJpbmdQb29sKCk7Ci0gICAgICAgIF9zdHJpbmdQb29sLnJlYWRGcm9tKF9pbnB1dCk7Ci0KLSAgICAgICAgcmV0dXJuIGFjdHVhbGZpbGV0eXBlOwotICAgIH0KLQotICAgIHZvaWQgZHVtcFBvaW50ZXJEYXRhKCkKLSAgICB7Ci0gICAgICAgIGVtaXQoIlR5cGUgc3lzdGVtOiAiICsgcmVhZFN0cmluZygpKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBkdW1wSW5kZXhEYXRhKCkKLSAgICB7Ci0gICAgICAgIC8vIGhhcyBhIGhhbmRsZSBwb29sIChjb3VudCwgaGFuZGxlL3R5cGUsIGhhbmRsZS90eXBlLi4uKQotICAgICAgICBpbnQgc2l6ZSA9IHJlYWRTaG9ydCgpOwotICAgICAgICBlbWl0KCJIYW5kbGUgcG9vbCAoIiArIHNpemUgKyAiKToiKTsKLSAgICAgICAgaW5kZW50KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgaGFuZGxlID0gcmVhZFN0cmluZygpOwotICAgICAgICAgICAgc2hvcnQgY29kZSA9IHJlYWRTaG9ydCgpOwotICAgICAgICAgICAgZW1pdChoYW5kbGUgKyAiICgiICsgZmlsZXR5cGVTdHJpbmcoY29kZSkgKyAiKSIpOwotICAgICAgICB9Ci0gICAgICAgIG91dGRlbnQoKTsKLQotICAgICAgICBkdW1wUU5hbWVNYXAoIkdsb2JhbCBlbGVtZW50cyIpOwotCi0gICAgICAgIC8vIHFuYW1lIG1hcCBvZiBnbG9iYWwgYXR0cmlidXRlcwotICAgICAgICBkdW1wUU5hbWVNYXAoIkdsb2JhbCBhdHRyaWJ1dGVzIik7Ci0KLSAgICAgICAgLy8gYXR0ciBncm91cHMgYW5kIG1vZGVsIGdyb3VwcwotICAgICAgICBkdW1wUU5hbWVNYXAoIk1vZGVsIGdyb3VwcyIpOwotICAgICAgICBkdW1wUU5hbWVNYXAoIkF0dHJpYnV0ZSBncm91cHMiKTsKLQotICAgICAgICBkdW1wUU5hbWVNYXAoIklkZW50aXR5IGNvbnN0cmFpbnRzIik7Ci0KLSAgICAgICAgLy8gcW5hbWUgbWFwIG9mIGdsb2JhbCB0eXBlcwotICAgICAgICBkdW1wUU5hbWVNYXAoIkdsb2JhbCB0eXBlcyIpOwotCi0gICAgICAgIC8vIHFuYW1lIG1hcCBvZiBkb2N1bWVudCB0eXBlcywgYnkgdGhlIHFuYW1lIG9mIHRoZSBjb250YWluZWQgZWxlbWVudAotICAgICAgICBkdW1wUU5hbWVNYXAoIkRvY3VtZW50IHR5cGVzIik7Ci0gICAgICAgIAotICAgICAgICAvLyBxbmFtZSBtYXAgb2YgYXR0cmlidXRlIHR5cGVzLCBieSB0aGUgcW5hbWUgb2YgdGhlIGNvbnRhaW5lZCBhdHRyaWJ1dGUKLSAgICAgICAgZHVtcFFOYW1lTWFwKCJBdHRyaWJ1dGUgdHlwZXMiKTsKLQotICAgICAgICAvLyBhbGwgdGhlIHR5cGVzIGluZGV4ZWQgYnkgY2xhc3NuYW1lCi0gICAgICAgIGR1bXBDbGFzc25hbWVJbmRleCgiQWxsIHR5cGVzIGJ5IGNsYXNzbmFtZSIpOwotCi0gICAgICAgIC8vIGFsbCB0aGUgbmFtZXNwYWNlcwotICAgICAgICBkdW1wU3RyaW5nQXJyYXkoIkRlZmluZWQgbmFtZXNwYWNlcyIpOwotICAgICAgICAKLSAgICAgICAgLy8gdmVyc2lvbiAxNSBzdHVmZiBmb3IgcmVkZWZpbmVzCi0gICAgICAgIGlmIChhdExlYXN0KDIsIDE1LCAwKSkKLSAgICAgICAgewotICAgICAgICAgICAgZHVtcFFOYW1lTWFwKCJSZWRlZmluZWQgZ2xvYmFsIHR5cGVzIik7Ci0gICAgICAgICAgICBkdW1wUU5hbWVNYXAoIlJlZGZpbmVkIG1vZGVsIGdyb3VwcyIpOwotICAgICAgICAgICAgZHVtcFFOYW1lTWFwKCJSZWRmaW5lZCBhdHRyaWJ1dGUgZ3JvdXBzIik7Ci0gICAgICAgIH0KLQotICAgICAgICByZWFkRW5kKCk7Ci0gICAgfQotCi0KLSAgICBjbGFzcyBTdHJpbmdQb29sCi0gICAgewotICAgICAgICBwcml2YXRlIExpc3QgaW50c1RvU3RyaW5ncyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgcHJpdmF0ZSBNYXAgc3RyaW5nc1RvSW50cyA9IG5ldyBIYXNoTWFwKCk7Ci0KLSAgICAgICAgU3RyaW5nUG9vbCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludHNUb1N0cmluZ3MuYWRkKG51bGwpOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIHN0cmluZ0ZvckNvZGUoaW50IGNvZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjb2RlID09IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICByZXR1cm4gKFN0cmluZylpbnRzVG9TdHJpbmdzLmdldChjb2RlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBjb2RlRm9yU3RyaW5nKFN0cmluZyBzdHIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzdHIgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIEludGVnZXIgcmVzdWx0ID0gKEludGVnZXIpc3RyaW5nc1RvSW50cy5nZXQoc3RyKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBuZXcgSW50ZWdlcihpbnRzVG9TdHJpbmdzLnNpemUoKSk7Ci0gICAgICAgICAgICAgICAgaW50c1RvU3RyaW5ncy5hZGQoc3RyKTsKLSAgICAgICAgICAgICAgICBzdHJpbmdzVG9JbnRzLnB1dChzdHIsIHJlc3VsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmludFZhbHVlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHJlYWRGcm9tKERhdGFJbnB1dFN0cmVhbSBpbnB1dCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGludHNUb1N0cmluZ3Muc2l6ZSgpICE9IDEgfHwgc3RyaW5nc1RvSW50cy5zaXplKCkgIT0gMCkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7Ci0KLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBzaXplID0gaW5wdXQucmVhZFNob3J0KCk7Ci0gICAgICAgICAgICAgICAgZW1pdCgiU3RyaW5nIHBvb2wgKCIgKyBzaXplICsgIik6Iik7Ci0gICAgICAgICAgICAgICAgaW5kZW50KCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBzaXplOyBpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3RyID0gaW5wdXQucmVhZFVURigpOwotICAgICAgICAgICAgICAgICAgICBpbnQgY29kZSA9IGNvZGVGb3JTdHJpbmcoc3RyKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgIT0gaSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgZW1pdChjb2RlICsgIiA9IFwiIiArIHN0ciArICJcIiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvdXRkZW50KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlbWl0KGUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBhY3RpdmUgd2hpbGUgbG9hZGluZyBvbmUgdHlwZS4KLSAgICBEYXRhSW5wdXRTdHJlYW0gX2lucHV0OwotICAgIFN0cmluZ1Bvb2wgX3N0cmluZ1Bvb2w7Ci0KLSAgICBzaG9ydCByZWFkU2hvcnQoKQotICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBfaW5wdXQucmVhZFNob3J0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKGUpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbnQgcmVhZEludCgpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIF9pbnB1dC5yZWFkSW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKGUpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBTdHJpbmcgcmVhZFN0cmluZygpCi0gICAgewotICAgICAgICByZXR1cm4gX3N0cmluZ1Bvb2wuc3RyaW5nRm9yQ29kZShyZWFkU2hvcnQoKSk7Ci0gICAgfQotCi0gICAgUU5hbWUgcmVhZFFOYW1lKCkKLSAgICB7Ci0gICAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSByZWFkU3RyaW5nKCk7Ci0gICAgICAgIFN0cmluZyBsb2NhbG5hbWUgPSByZWFkU3RyaW5nKCk7Ci0gICAgICAgIGlmIChsb2NhbG5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICByZXR1cm4gbmV3IFFOYW1lKG5hbWVzcGFjZSwgbG9jYWxuYW1lKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgcmVhZEhhbmRsZSgpCi0gICAgewotICAgICAgICByZXR1cm4gcmVhZFN0cmluZygpOwotICAgIH0KLQotICAgIFN0cmluZyByZWFkVHlwZSgpCi0gICAgewotICAgICAgICByZXR1cm4gcmVhZEhhbmRsZSgpOwotICAgIH0KLQotICAgIHN0YXRpYyBTdHJpbmcgcW5hbWVTdHJpbmcoUU5hbWUgcW5hbWUpCi0gICAgewotICAgICAgICBpZiAocW5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiAiKG51bGwpIjsKLSAgICAgICAgaWYgKHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpICE9IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gcW5hbWUuZ2V0TG9jYWxQYXJ0KCkgKyAiQCIgKyBxbmFtZS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIHFuYW1lLmdldExvY2FsUGFydCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBTdHJpbmcgcW5hbWVTZXRTdHJpbmcoUU5hbWVTZXQgc2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHNldC50b1N0cmluZygpOwotICAgIH0KLQotICAgIHZvaWQgZHVtcFFOYW1lTWFwKFN0cmluZyBmaWVsZG5hbWUpCi0gICAgewotICAgICAgICBpbnQgc2l6ZSA9IHJlYWRTaG9ydCgpOwotICAgICAgICBlbWl0KGZpZWxkbmFtZSArICIgKCIgKyBzaXplICsgIik6Iik7Ci0gICAgICAgIGluZGVudCgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgZW1pdChxbmFtZVN0cmluZyhyZWFkUU5hbWUoKSkgKyAiID0gIiArIHJlYWRIYW5kbGUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgb3V0ZGVudCgpOwotICAgIH0KLQotICAgIHZvaWQgZHVtcFR5cGVBcnJheShTdHJpbmcgZmllbGRuYW1lKQotICAgIHsKLSAgICAgICAgaW50IHNpemUgPSByZWFkU2hvcnQoKTsKLSAgICAgICAgZW1pdChmaWVsZG5hbWUgKyAiICgiICsgc2l6ZSArICIpOiIpOwotICAgICAgICBpbmRlbnQoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVtaXQoaSArICIgPSAiICsgcmVhZFR5cGUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgb3V0ZGVudCgpOwotICAgIH0KLQotICAgIHZvaWQgZHVtcENsYXNzbmFtZUluZGV4KFN0cmluZyBmaWVsZG5hbWUpCi0gICAgewotICAgICAgICBpbnQgc2l6ZSA9IHJlYWRTaG9ydCgpOwotICAgICAgICBlbWl0KGZpZWxkbmFtZSArICIgKCIgKyBzaXplICsgIik6Iik7Ci0gICAgICAgIGluZGVudCgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgZW1pdChyZWFkU3RyaW5nKCkgKyAiID0gIiArIHJlYWRUeXBlKCkpOwotICAgICAgICB9Ci0gICAgICAgIG91dGRlbnQoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGR1bXBTdHJpbmdBcnJheShTdHJpbmcgZmllbGRuYW1lKQotICAgIHsKLSAgICAgICAgaW50IHNpemUgPSByZWFkU2hvcnQoKTsKLSAgICAgICAgZW1pdChmaWVsZG5hbWUgKyAiICgiICsgc2l6ZSArICIpOiIpOwotICAgICAgICBpbmRlbnQoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVtaXQocmVhZFN0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgICBvdXRkZW50KCk7Ci0gICAgfQotCi0gICAgdm9pZCByZWFkRW5kKCkKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBfaW5wdXQuY2xvc2UoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gb2gsIHdlbGwuCi0gICAgICAgIH0KLSAgICAgICAgX2lucHV0ID0gbnVsbDsKLSAgICAgICAgX3N0cmluZ1Bvb2wgPSBudWxsOwotICAgIH0KLQotICAgIHN0YXRpYyBTdHJpbmcgcGFydGljbGVUeXBlU3RyaW5nKGludCBzcHQpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHNwdCkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5BTEw6IHJldHVybiAiQUxMIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQ0hPSUNFOiByZXR1cm4gIkNIT0lDRSI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLkVMRU1FTlQ6IHJldHVybiAiRUxFTUVOVCI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLlNFUVVFTkNFOiByZXR1cm4gIlNFUVVFTkNFIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuV0lMRENBUkQ6IHJldHVybiAiV0lMRENBUkQiOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIlVua25vd24gcGFydGljbGUgdHlwZSAoIiArIHNwdCArICIpIjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBTdHJpbmcgYmlnSW50ZWdlclN0cmluZyhCaWdJbnRlZ2VyIGJpZ2ludCkKLSAgICB7Ci0gICAgICAgIGlmIChiaWdpbnQgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiAiKG51bGwpIjsKLSAgICAgICAgcmV0dXJuIGJpZ2ludC50b1N0cmluZygpOwotICAgIH0KLQotICAgIHN0YXRpYyBTdHJpbmcgd2Nwcm9jZXNzU3RyaW5nKGludCBjb2RlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVBhcnRpY2xlLlNUUklDVDogcmV0dXJuICJTVFJJQ1QiOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5TS0lQOiByZXR1cm4gIlNLSVAiOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5MQVg6IHJldHVybiAiTEFYIjsKLSAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuICJOT1RfV0lMRENBUkQiOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIlVua25vd24gcHJvY2VzcyB0eXBlICgiICsgY29kZSArICIpIjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgZHVtcFBhcnRpY2xlRGF0YShib29sZWFuIGdsb2JhbCkKLSAgICB7Ci0gICAgICAgIHNob3J0IHBhcnRpY2xlVHlwZSA9IHJlYWRTaG9ydCgpOwotICAgICAgICBlbWl0KHBhcnRpY2xlVHlwZVN0cmluZyhwYXJ0aWNsZVR5cGUpICsgIjoiKTsKLSAgICAgICAgaW5kZW50KCk7Ci0gICAgICAgIHNob3J0IHBhcnRpY2xlRmxhZ3MgPSByZWFkU2hvcnQoKTsKLSAgICAgICAgZW1pdCgiRmxhZ3M6ICIgKyBwYXJ0aWNsZWZsYWdzU3RyaW5nKHBhcnRpY2xlRmxhZ3MpKTsKLQotICAgICAgICBlbWl0KCJNaW5PY2N1cnM6ICIgKyBiaWdJbnRlZ2VyU3RyaW5nKHJlYWRCaWdJbnRlZ2VyKCkpKTsKLSAgICAgICAgZW1pdCgiTWF4T2NjdXJzOiAiICsgYmlnSW50ZWdlclN0cmluZyhyZWFkQmlnSW50ZWdlcigpKSk7Ci0KLSAgICAgICAgZW1pdCgiVHJhbnNpdGlvbjogIiArIHFuYW1lU2V0U3RyaW5nKHJlYWRRTmFtZVNldCgpKSk7Ci0KLSAgICAgICAgc3dpdGNoIChwYXJ0aWNsZVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuV0lMRENBUkQ6Ci0gICAgICAgICAgICAgICAgZW1pdCgiV2lsZGNhcmQgc2V0OiAiICsgcW5hbWVTZXRTdHJpbmcocmVhZFFOYW1lU2V0KCkpKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJXaWxkY2FyZCBwcm9jZXNzOiAiICsgd2Nwcm9jZXNzU3RyaW5nKHJlYWRTaG9ydCgpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuRUxFTUVOVDoKLSAgICAgICAgICAgICAgICBlbWl0KCJOYW1lOiAiICsgcW5hbWVTdHJpbmcocmVhZFFOYW1lKCkpKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJUeXBlOiAiICsgcmVhZFR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgZW1pdCgiRGVmYXVsdDogIiArIHJlYWRTdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGF0TGVhc3QoMiwgMTYsIDApKQotICAgICAgICAgICAgICAgICAgICBlbWl0KCJEZWZhdWx0IHZhbHVlOiAiICsgcmVhZFhtbFZhbHVlT2JqZWN0KCkpOwotICAgICAgICAgICAgICAgIGVtaXQoIldzZGxBcnJheVR5cGU6ICIgKyBTT0FQQXJyYXlUeXBlU3RyaW5nKHJlYWRTT0FQQXJyYXlUeXBlKCkpKTsKLSAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc2hvcnQgc3Vic3RHcm91cENvdW50ID0gcmVhZFNob3J0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXQoIlN1YnN0aXR1dGlvbiBncm91cCBtZW1iZXJzICgiICsgc3Vic3RHcm91cENvdW50ICsgIikiKTsKLSAgICAgICAgICAgICAgICAgICAgaW5kZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3Vic3RHcm91cENvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVtaXQocW5hbWVTdHJpbmcocmVhZFFOYW1lKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBvdXRkZW50KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGludCBjb3VudCA9IHJlYWRTaG9ydCgpOwotICAgICAgICAgICAgICAgIGVtaXQoIklkZW50aXR5IGNvbnN0cmFpbnRzICgiICsgY291bnQgKyAiKToiKTsKLSAgICAgICAgICAgICAgICBpbmRlbnQoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBlbWl0KHJlYWRIYW5kbGUoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG91dGRlbnQoKTsKLSAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsKQotICAgICAgICAgICAgICAgICAgICBlbWl0KCJGaWxlbmFtZTogIiArIHJlYWRTdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQUxMOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFQYXJ0aWNsZS5TRVFVRU5DRToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUGFydGljbGUuQ0hPSUNFOgotICAgICAgICAgICAgICAgIGR1bXBQYXJ0aWNsZUFycmF5KCJQYXJ0aWNsZSBjaGlsZHJlbiIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGVycm9yKCJVbnJlY29nbml6ZWQgc2NoZW1hIHBhcnRpY2xlIHR5cGUiKTsKLSAgICAgICAgfQotICAgICAgICBvdXRkZW50KCk7Ci0gICAgfQotCi0gICAgdm9pZCBkdW1wUGFydGljbGVBcnJheShTdHJpbmcgZmllbGRuYW1lKQotICAgIHsKLSAgICAgICAgaW50IGNvdW50ID0gcmVhZFNob3J0KCk7Ci0gICAgICAgIGVtaXQoZmllbGRuYW1lICsgIigiICsgY291bnQgKyAiKToiKTsKLSAgICAgICAgaW5kZW50KCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgICAgIGR1bXBQYXJ0aWNsZURhdGEoZmFsc2UpOwotICAgICAgICBvdXRkZW50KCk7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cmluZyBjb21wbGV4VmFyaWV0eVN0cmluZyhpbnQgY29kZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29kZSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkVNUFRZX0NPTlRFTlQ6IHJldHVybiAiRU1QVFlfQ09OVEVOVCI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuU0lNUExFX0NPTlRFTlQ6IHJldHVybiAiU0lNUExFX0NPTlRFTlQiOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkVMRU1FTlRfQ09OVEVOVDogcmV0dXJuICJFTEVNRU5UX0NPTlRFTlQiOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLk1JWEVEX0NPTlRFTlQ6IHJldHVybiAiTUlYRURfQ09OVEVOVCI7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiAiVW5rbm93biBjb21wbGV4IHZhcmlldHkgKCIgKyBjb2RlICsgIikiOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cmluZyBzaW1wbGVWYXJpZXR5U3RyaW5nKGludCBjb2RlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQVRPTUlDOiByZXR1cm4gIkFUT01JQyI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuTElTVDogcmV0dXJuICJMSVNUIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5VTklPTjogcmV0dXJuICJVTklPTiI7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiAiVW5rbm93biBzaW1wbGUgdmFyaWV0eSAoIiArIGNvZGUgKyAiKSI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBTdHJpbmcgZmFjZXRDb2RlU3RyaW5nKGludCBjb2RlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRkFDRVRfTEVOR1RIOiByZXR1cm4gIkZBQ0VUX0xFTkdUSCI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRkFDRVRfTUlOX0xFTkdUSDogcmV0dXJuICJGQUNFVF9NSU5fTEVOR1RIIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5GQUNFVF9NQVhfTEVOR1RIOiByZXR1cm4gIkZBQ0VUX01BWF9MRU5HVEgiOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkZBQ0VUX01JTl9FWENMVVNJVkU6IHJldHVybiAiRkFDRVRfTUlOX0VYQ0xVU0lWRSI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRkFDRVRfTUlOX0lOQ0xVU0lWRTogcmV0dXJuICJGQUNFVF9NSU5fSU5DTFVTSVZFIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5GQUNFVF9NQVhfSU5DTFVTSVZFOiByZXR1cm4gIkZBQ0VUX01BWF9JTkNMVVNJVkUiOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkZBQ0VUX01BWF9FWENMVVNJVkU6IHJldHVybiAiRkFDRVRfTUFYX0VYQ0xVU0lWRSI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRkFDRVRfVE9UQUxfRElHSVRTOiByZXR1cm4gIkZBQ0VUX1RPVEFMX0RJR0lUUyI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRkFDRVRfRlJBQ1RJT05fRElHSVRTOiByZXR1cm4gIkZBQ0VUX0ZSQUNUSU9OX0RJR0lUUyI7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiAiVW5rbm93biBmYWNldCBjb2RlICgiICsgY29kZSArICIpIjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFN0cmluZyB3aGl0ZXNwYWNlQ29kZVN0cmluZyhpbnQgY29kZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY29kZSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLldTX0NPTExBUFNFOiByZXR1cm4gIldTX0NPTExBUFNFIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5XU19QUkVTRVJWRTogcmV0dXJuICJXU19QUkVTRVJWRSI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuV1NfUkVQTEFDRTogcmV0dXJuICJXU19SRVBMQUNFIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5XU19VTlNQRUNJRklFRDogcmV0dXJuICJXU19VTlNQRUNJRklFRCI7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiAiVW5rbm93biB3aGl0ZXNwYWNlIGNvZGUgKCIgKyBjb2RlICsgIikiOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgU3RyaW5nIGRlcml2YXRpb25UeXBlU3RyaW5nKGludCBjb2RlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuRFRfTk9UX0RFUklWRUQ6IHJldHVybiAiRFRfTk9UX0RFUklWRUQiOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkRUX1JFU1RSSUNUSU9OOiByZXR1cm4gIkRUX1JFU1RSSUNUSU9OIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5EVF9FWFRFTlNJT046IHJldHVybiAiRFRfRVhURU5TSU9OIjsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJVbmtub3duIGRlcml2YXRpb24gY29kZSAoIiArIGNvZGUgKyAiKSI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIGR1bXBUeXBlRmlsZURhdGEoKQotICAgIHsKLSAgICAgICAgZW1pdCgiTmFtZTogIiArIHFuYW1lU3RyaW5nKHJlYWRRTmFtZSgpKSk7Ci0gICAgICAgIGVtaXQoIk91dGVyIHR5cGU6ICIgKyByZWFkVHlwZSgpKTsKLSAgICAgICAgZW1pdCgiRGVwdGg6ICIgKyByZWFkU2hvcnQoKSk7Ci0gICAgICAgIGVtaXQoIkJhc2UgdHlwZTogIiArIHJlYWRUeXBlKCkpOwotICAgICAgICBlbWl0KCJEZXJpdmF0aW9uIHR5cGU6ICIgKyBkZXJpdmF0aW9uVHlwZVN0cmluZyhyZWFkU2hvcnQoKSkpOwotICAgICAgICAKLSAgICAgICAgZW1pdCgiQ29udGFpbmVyIGZpZWxkOiIpOwotICAgICAgICBpbmRlbnQoKTsKLSAgICAgICAgaW50IGNvbnRhaW5lcmZpZWxkdHlwZSA9IHJlYWRTaG9ydCgpOwotICAgICAgICBlbWl0KCJSZWZ0eXBlOiAiICsgY29udGFpbmVyZmllbGRUeXBlU3RyaW5nKGNvbnRhaW5lcmZpZWxkdHlwZSkpOwotICAgICAgICBzd2l0Y2ggKGNvbnRhaW5lcmZpZWxkdHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBGSUVMRF9HTE9CQUw6Ci0gICAgICAgICAgICAgICAgZW1pdCgiSGFuZGxlOiAiICsgcmVhZEhhbmRsZSgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRklFTERfTE9DQUxBVFRSOgotICAgICAgICAgICAgICAgIGVtaXQoIkluZGV4OiAiICsgcmVhZFNob3J0KCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBGSUVMRF9MT0NBTEVMVDoKLSAgICAgICAgICAgICAgICBlbWl0KCJJbmRleDogIiArIHJlYWRTaG9ydCgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBvdXRkZW50KCk7Ci0gICAgICAgIGVtaXQoIkphdmEgY2xhc3MgbmFtZTogIiArIHJlYWRTdHJpbmcoKSk7Ci0gICAgICAgIGVtaXQoIkphdmEgaW1wbCBjbGFzcyBuYW1lOiAiICsgcmVhZFN0cmluZygpKTsKLQotICAgICAgICBkdW1wVHlwZUFycmF5KCJBbm9ueW1vdXMgdHlwZXMiKTsKLQotICAgICAgICBlbWl0KCJBbm9ueW1vdXMgdW5pb24gbWVtYmVyIG9yZGluYWw6ICIgKyByZWFkU2hvcnQoKSk7Ci0KLSAgICAgICAgaW50IGZsYWdzOwotICAgICAgICBmbGFncyA9IHJlYWRJbnQoKTsKLSAgICAgICAgZW1pdCgiRmxhZ3M6ICIgKyB0eXBlZmxhZ3NTdHJpbmcoZmxhZ3MpKTsKLSAgICAgICAgYm9vbGVhbiBpc0NvbXBsZXhUeXBlID0gKChmbGFncyAmIEZMQUdfU0lNUExFX1RZUEUpID09IDApOwotCi0gICAgICAgIHNob3J0IGNvbXBsZXhWYXJpZXR5ID0gU2NoZW1hVHlwZS5OT1RfQ09NUExFWF9UWVBFOwotICAgICAgICBpZiAoaXNDb21wbGV4VHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgY29tcGxleFZhcmlldHkgPSByZWFkU2hvcnQoKTsKLSAgICAgICAgICAgIGVtaXQoIkNvbXBsZXggdmFyaWV0eTogIiArIGNvbXBsZXhWYXJpZXR5U3RyaW5nKGNvbXBsZXhWYXJpZXR5KSk7Ci0KLSAgICAgICAgICAgIHNob3J0IGF0dHJDb3VudCA9IHJlYWRTaG9ydCgpOwotICAgICAgICAgICAgZW1pdCgiQXR0cmlidXRlIG1vZGVsICgiICsgYXR0ckNvdW50ICsgIik6Iik7Ci0gICAgICAgICAgICBpbmRlbnQoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0ckNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgZHVtcEF0dHJpYnV0ZURhdGEoZmFsc2UpOwotCi0gICAgICAgICAgICBlbWl0KCJXaWxkY2FyZCBzZXQ6ICIgKyBxbmFtZVNldFN0cmluZyhyZWFkUU5hbWVTZXQoKSkpOwotICAgICAgICAgICAgZW1pdCgiV2lsZGNhcmQgcHJvY2VzczogIiArIHdjcHJvY2Vzc1N0cmluZyhyZWFkU2hvcnQoKSkpOwotICAgICAgICAgICAgb3V0ZGVudCgpOwotCi0gICAgICAgICAgICAvLyBBdHRyaWJ1dGUgUHJvcGVydHkgVGFibGUKLSAgICAgICAgICAgIHNob3J0IGF0dHJQcm9wQ291bnQgPSByZWFkU2hvcnQoKTsKLSAgICAgICAgICAgIGVtaXQoIkF0dHJpYnV0ZSBwcm9wZXJ0aWVzICgiICsgYXR0clByb3BDb3VudCArICIpOiIpOwotICAgICAgICAgICAgaW5kZW50KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHJQcm9wQ291bnQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkdW1wUHJvcGVydHlEYXRhKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBvdXRkZW50KCk7Ci0KLSAgICAgICAgICAgIGlmIChjb21wbGV4VmFyaWV0eSA9PSBTY2hlbWFUeXBlLkVMRU1FTlRfQ09OVEVOVCB8fCBjb21wbGV4VmFyaWV0eSA9PSBTY2hlbWFUeXBlLk1JWEVEX0NPTlRFTlQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZW1pdCgiSXNBbGw6ICIgKyByZWFkU2hvcnQoKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBDb250ZW50IG1vZGVsIHRyZWUKLSAgICAgICAgICAgICAgICBkdW1wUGFydGljbGVBcnJheSgiQ29udGVudCBtb2RlbCIpOwotCi0gICAgICAgICAgICAgICAgLy8gRWxlbWVudCBQcm9wZXJ0eSBUYWJsZQotICAgICAgICAgICAgICAgIHNob3J0IGVsZW1Qcm9wQ291bnQgPSByZWFkU2hvcnQoKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJFbGVtZW50IHByb3BlcnRpZXMgKCIgKyBlbGVtUHJvcENvdW50ICsgIik6Iik7Ci0gICAgICAgICAgICAgICAgaW5kZW50KCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtUHJvcENvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBkdW1wUHJvcGVydHlEYXRhKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG91dGRlbnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaXNDb21wbGV4VHlwZSB8fCBjb21wbGV4VmFyaWV0eSA9PSBTY2hlbWFUeXBlLlNJTVBMRV9DT05URU5UKQotICAgICAgICB7Ci0gICAgICAgICAgICBzaG9ydCBzaW1wbGVWYXJpZXR5ID0gcmVhZFNob3J0KCk7Ci0gICAgICAgICAgICBlbWl0KCJTaW1wbGUgdHlwZSB2YXJpZXR5OiAiICsgc2ltcGxlVmFyaWV0eVN0cmluZyhzaW1wbGVWYXJpZXR5KSk7Ci0KLSAgICAgICAgICAgIGJvb2xlYW4gaXNTdHJpbmdFbnVtID0gKChmbGFncyAmIEZMQUdfU1RSSU5HRU5VTSkgIT0gMCk7Ci0KLSAgICAgICAgICAgIHNob3J0IGZhY2V0Q291bnQgPSByZWFkU2hvcnQoKTsKLSAgICAgICAgICAgIGVtaXQoIkZhY2V0cyAoIiArIGZhY2V0Q291bnQgKyAiKToiKTsKLSAgICAgICAgICAgIGluZGVudCgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmYWNldENvdW50OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZW1pdChmYWNldENvZGVTdHJpbmcocmVhZFNob3J0KCkpKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJWYWx1ZTogIiArIHJlYWRYbWxWYWx1ZU9iamVjdCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0KCJGaXhlZDogIiArIHJlYWRTaG9ydCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG91dGRlbnQoKTsKLQotICAgICAgICAgICAgZW1pdCgiV2hpdGVzcGFjZSBydWxlOiAiICsgd2hpdGVzcGFjZUNvZGVTdHJpbmcocmVhZFNob3J0KCkpKTsKLQotICAgICAgICAgICAgc2hvcnQgcGF0dGVybkNvdW50ID0gcmVhZFNob3J0KCk7Ci0gICAgICAgICAgICBlbWl0KCJQYXR0ZXJucyAoIiArIHBhdHRlcm5Db3VudCArICIpOiIpOwotICAgICAgICAgICAgaW5kZW50KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhdHRlcm5Db3VudDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGVtaXQocmVhZFN0cmluZygpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG91dGRlbnQoKTsKLQotICAgICAgICAgICAgc2hvcnQgZW51bUNvdW50ID0gcmVhZFNob3J0KCk7Ci0gICAgICAgICAgICBlbWl0KCJFbnVtZXJhdGlvbiB2YWx1ZXMgKCIgKyBlbnVtQ291bnQgKyAiKToiKTsKLSAgICAgICAgICAgIGluZGVudCgpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbnVtQ291bnQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlbWl0KHJlYWRYbWxWYWx1ZU9iamVjdCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG91dGRlbnQoKTsKLQotICAgICAgICAgICAgZW1pdCgiQmFzZSBlbnVtIHR5cGU6ICIgKyByZWFkVHlwZSgpKTsKLSAgICAgICAgICAgIGlmIChpc1N0cmluZ0VudW0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc2hvcnQgc2VDb3VudCA9IHJlYWRTaG9ydCgpOwotICAgICAgICAgICAgICAgIGVtaXQoIlN0cmluZyBlbnVtIGVudHJpZXMgKCIgKyBzZUNvdW50ICsgIik6Iik7Ci0gICAgICAgICAgICAgICAgaW5kZW50KCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZUNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBlbWl0KCJcIiIgKyByZWFkU3RyaW5nKCkgKyAiXCIgLT4gIiArIHJlYWRTaG9ydCgpICsgIiA9ICIgKyByZWFkU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvdXRkZW50KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoc2ltcGxlVmFyaWV0eSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQVRPTUlDOgotICAgICAgICAgICAgICAgICAgICBlbWl0KCJQcmltaXRpdmUgdHlwZTogIiArIHJlYWRUeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICBlbWl0KCJEZWNpbWFsIHNpemU6ICIgKyByZWFkSW50KCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5MSVNUOgotICAgICAgICAgICAgICAgICAgICBlbWl0KCJMaXN0IGl0ZW0gdHlwZTogIiArIHJlYWRUeXBlKCkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5VTklPTjoKLSAgICAgICAgICAgICAgICAgICAgZHVtcFR5cGVBcnJheSgiVW5pb24gbWVtYmVycyIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGVycm9yKCJVbmtub3duIHNpbXBsZSB0eXBlIHZhcmlldHkiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGVtaXQoIkZpbGVuYW1lOiAiICsgcmVhZFN0cmluZygpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgU3RyaW5nIGF0dHJ1c2VDb2RlU3RyaW5nKGludCBjb2RlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChjb2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYUxvY2FsQXR0cmlidXRlLk9QVElPTkFMOiByZXR1cm4gIk9QVElPTkFMIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hTG9jYWxBdHRyaWJ1dGUuUkVRVUlSRUQ6IHJldHVybiAiUkVRVUlSRUQiOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFMb2NhbEF0dHJpYnV0ZS5QUk9ISUJJVEVEOiByZXR1cm4gIlBST0hJQklURUQiOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIlVua25vd24gdXNlIGNvZGUgKCIgKyBjb2RlICsgIikiOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBkdW1wQXR0cmlidXRlRGF0YShib29sZWFuIGdsb2JhbCkKLSAgICB7Ci0gICAgICAgIGVtaXQoIk5hbWU6ICIgKyBxbmFtZVN0cmluZyhyZWFkUU5hbWUoKSkpOwotICAgICAgICBlbWl0KCJUeXBlOiAiICsgcmVhZFR5cGUoKSk7Ci0gICAgICAgIGVtaXQoIlVzZTogIiArIGF0dHJ1c2VDb2RlU3RyaW5nKHJlYWRTaG9ydCgpKSk7Ci0gICAgICAgIGVtaXQoIkRlZmF1bHQ6ICIgKyByZWFkU3RyaW5nKCkpOwotICAgICAgICBpZiAoYXRMZWFzdCgyLCAxNiwgMCkpCi0gICAgICAgICAgICBlbWl0KCJEZWZhdWx0IHZhbHVlOiAiICsgcmVhZFhtbFZhbHVlT2JqZWN0KCkpOwotICAgICAgICBlbWl0KCJGaXhlZDogIiArIHJlYWRTaG9ydCgpKTsKLSAgICAgICAgZW1pdCgiV3NkbEFycmF5VHlwZTogIiArIFNPQVBBcnJheVR5cGVTdHJpbmcocmVhZFNPQVBBcnJheVR5cGUoKSkpOwotICAgICAgICBpZiAoZ2xvYmFsKQotICAgICAgICAgICAgZW1pdCgiRmlsZW5hbWU6ICIgKyByZWFkU3RyaW5nKCkpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFhtbE9wdGlvbnMgcHJldHR5T3B0aW9ucyA9Ci0gICAgICAgIG5ldyBYbWxPcHRpb25zKCkuc2V0U2F2ZVByZXR0eVByaW50KCk7Ci0gICAgCi0gICAgdm9pZCBkdW1wWG1sKCkKLSAgICB7Ci0gICAgICAgIFN0cmluZyB4bWwgPSByZWFkU3RyaW5nKCk7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBlbWl0KCBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSggeG1sICkueG1sVGV4dCggcHJldHR5T3B0aW9ucyApICk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKCBYbWxFeGNlcHRpb24geCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVtaXQoICIhISEhISEgQkFEIFhNTCAhISEhISIgKTsKLSAgICAgICAgICAgIGVtaXQoIHhtbCApOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgZHVtcE1vZGVsR3JvdXBEYXRhKCkKLSAgICB7Ci0gICAgICAgIGVtaXQoIk5hbWU6ICIgKyBxbmFtZVN0cmluZyhyZWFkUU5hbWUoKSkpOwotICAgICAgICBlbWl0KCJUYXJnZXQgbmFtZXNwYWNlOiAiICsgcmVhZFN0cmluZygpKTsKLSAgICAgICAgZW1pdCgiQ2hhbWVsZW9uOiAiICsgcmVhZFNob3J0KCkpOwotICAgICAgICBpZiAoYXRMZWFzdCgyLCAxNSwgMCkpCi0gICAgICAgICAgICBlbWl0KCJSZWRlZmluZTogIiArIHJlYWRTaG9ydCgpKTsKLSAgICAgICAgZW1pdCgiTW9kZWwgR3JvdXAgWG1sOiAiKTsKLSAgICAgICAgZHVtcFhtbCgpOwotICAgIH0KLQotICAgIHZvaWQgZHVtcEF0dHJpYnV0ZUdyb3VwRGF0YSgpCi0gICAgewotICAgICAgICBlbWl0KCJOYW1lOiAiICsgcW5hbWVTdHJpbmcocmVhZFFOYW1lKCkpKTsKLSAgICAgICAgZW1pdCgiVGFyZ2V0IG5hbWVzcGFjZTogIiArIHJlYWRTdHJpbmcoKSk7Ci0gICAgICAgIGVtaXQoIkNoYW1lbGVvbjogIiArIHJlYWRTaG9ydCgpKTsKLSAgICAgICAgaWYgKGF0TGVhc3QoMiwgMTUsIDApKQotICAgICAgICAgICAgZW1pdCgiUmVkZWZpbmU6ICIgKyByZWFkU2hvcnQoKSk7Ci0gICAgICAgIGVtaXQoIkF0dHJpYnV0ZSBHcm91cCBYbWw6ICIpOwotICAgICAgICBkdW1wWG1sKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cmluZyBhbHdheXNTdHJpbmcoaW50IGNvZGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuQ09OU0lTVEVOVExZOiByZXR1cm4gIkNPTlNJU1RFTlRMWSI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5Lk5FVkVSOiByZXR1cm4gIk5FVkVSIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuVkFSSUFCTEU6IHJldHVybiAiVkFSSUFCTEUiOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIlVua25vd24gZnJlcXVlbmN5IGNvZGUgKCIgKyBjb2RlICsgIikiOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cmluZyBqdGNTdHJpbmcoaW50IGNvZGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGNvZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuWE1MX09CSkVDVDogcmV0dXJuICJYTUxfT0JKRUNUIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9CT09MRUFOOiByZXR1cm4gIkpBVkFfQk9PTEVBTiI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfRkxPQVQ6IHJldHVybiAiSkFWQV9GTE9BVCI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfRE9VQkxFOiByZXR1cm4gIkpBVkFfRE9VQkxFIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9CWVRFOiByZXR1cm4gIkpBVkFfQllURSI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfU0hPUlQ6IHJldHVybiAiSkFWQV9TSE9SVCI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfSU5UOiByZXR1cm4gIkpBVkFfSU5UIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9MT05HOiByZXR1cm4gIkpBVkFfTE9ORyI7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9CSUdfREVDSU1BTDogcmV0dXJuICJKQVZBX0JJR19ERUNJTUFMIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9CSUdfSU5URUdFUjogcmV0dXJuICJKQVZBX0JJR19JTlRFR0VSIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9TVFJJTkc6IHJldHVybiAiSkFWQV9TVFJJTkciOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0JZVEVfQVJSQVk6IHJldHVybiAiSkFWQV9CWVRFX0FSUkFZIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9HREFURTogcmV0dXJuICJKQVZBX0dEQVRFIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9HRFVSQVRJT046IHJldHVybiAiSkFWQV9HRFVSQVRJT04iOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFQcm9wZXJ0eS5KQVZBX0RBVEU6IHJldHVybiAiSkFWQV9EQVRFIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9RTkFNRTogcmV0dXJuICJKQVZBX1FOQU1FIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9DQUxFTkRBUjogcmV0dXJuICJKQVZBX0NBTEVOREFSIjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9MSVNUOiByZXR1cm4gIkpBVkFfTElTVCI7Ci0KLSAgICAgICAgICAgIGNhc2UgU2NoZW1hUHJvcGVydHkuSkFWQV9FTlVNOiByZXR1cm4gIkpBVkFfRU5VTSI7Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVByb3BlcnR5LkpBVkFfT0JKRUNUOiByZXR1cm4gIkpBVkFfT0JKRUNUIjsKLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIlVua25vd24gamF2YSB0eXBlIGNvZGUgKCIgKyBjb2RlICsgIikiOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBkdW1wUHJvcGVydHlEYXRhKCkKLSAgICB7Ci0gICAgICAgIGVtaXQoIlByb3BlcnR5Iik7Ci0gICAgICAgIGluZGVudCgpOwotICAgICAgICBlbWl0KCJOYW1lOiAiICsgcW5hbWVTdHJpbmcocmVhZFFOYW1lKCkpKTsKLSAgICAgICAgZW1pdCgiVHlwZTogIiArIHJlYWRUeXBlKCkpOwotICAgICAgICBlbWl0KCJGbGFnczogIiArIHByb3BlcnR5ZmxhZ3NTdHJpbmcocmVhZFNob3J0KCkpKTsKLSAgICAgICAgZW1pdCgiQ29udGFpbmVyIHR5cGU6ICIgKyByZWFkVHlwZSgpKTsKLSAgICAgICAgZW1pdCgiTWluIG9jY3VyYW5jZXM6ICIgKyBiaWdJbnRlZ2VyU3RyaW5nKHJlYWRCaWdJbnRlZ2VyKCkpKTsKLSAgICAgICAgZW1pdCgiTWF4IG9jY3VyYW5jZXM6ICIgKyBiaWdJbnRlZ2VyU3RyaW5nKHJlYWRCaWdJbnRlZ2VyKCkpKTsKLSAgICAgICAgZW1pdCgiTmlsbGFibGU6ICIgKyBhbHdheXNTdHJpbmcocmVhZFNob3J0KCkpKTsKLSAgICAgICAgZW1pdCgiRGVmYXVsdDogIiArIGFsd2F5c1N0cmluZyhyZWFkU2hvcnQoKSkpOwotICAgICAgICBlbWl0KCJGaXhlZDogIiArIGFsd2F5c1N0cmluZyhyZWFkU2hvcnQoKSkpOwotICAgICAgICBlbWl0KCJEZWZhdWx0IHRleHQ6ICIgKyByZWFkU3RyaW5nKCkpOwotICAgICAgICBlbWl0KCJKYXZhIHByb3AgbmFtZTogIiArIHJlYWRTdHJpbmcoKSk7Ci0gICAgICAgIGVtaXQoIkphdmEgdHlwZSBjb2RlOiAiICsganRjU3RyaW5nKHJlYWRTaG9ydCgpKSk7Ci0gICAgICAgIGVtaXQoIlR5cGUgZm9yIGphdmEgc2lnbmF0dXJlOiAiICsgcmVhZFR5cGUoKSk7Ci0gICAgICAgIGVtaXQoIkphdmEgc2V0dGVyIGRlbGltaXRlcjogIiArIHFuYW1lU2V0U3RyaW5nKHJlYWRRTmFtZVNldCgpKSk7Ci0gICAgICAgIGlmIChhdExlYXN0KDIsIDE2LCAwKSkKLSAgICAgICAgICAgIGVtaXQoIkRlZmF1bHQgdmFsdWU6ICIgKyByZWFkWG1sVmFsdWVPYmplY3QoKSk7Ci0gICAgICAgIG91dGRlbnQoKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgcmVhZFhtbFZhbHVlT2JqZWN0KCkKLSAgICB7Ci0gICAgICAgIFN0cmluZyB0eXBlID0gcmVhZFR5cGUoKTsKLSAgICAgICAgaWYgKHR5cGUgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiAibnVsbCI7Ci0gICAgICAgIAotICAgICAgICBpbnQgYnRjID0gcmVhZFNob3J0KCk7Ci0gICAgICAgIFN0cmluZyB2YWx1ZTsKLSAgICAgICAgc3dpdGNoIChidGMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKLSAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICB2YWx1ZSA9ICJuaWwiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0FOWV9TSU1QTEU6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0FOWV9VUkk6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX1NUUklORzoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfRFVSQVRJT046Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RBVEVfVElNRToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfVElNRToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfREFURToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19ZRUFSX01PTlRIOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX1lFQVI6Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfTU9OVEhfREFZOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX0RBWToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19NT05USDoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfREVDSU1BTDoKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfQk9PTEVBTjoKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHJlYWRTdHJpbmcoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19CQVNFXzY0X0JJTkFSWToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfSEVYX0JJTkFSWToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbmV3IFN0cmluZyhIZXhCaW4uZW5jb2RlKHJlYWRCeXRlQXJyYXkoKSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoKCkgPiAxOSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3ViU2VxdWVuY2UoMCwgMTYpICsgIi4uLiI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19RTkFNRToKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfTk9UQVRJT046Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBRTmFtZUhlbHBlci5wcmV0dHkocmVhZFFOYW1lKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0ZMT0FUOgotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19ET1VCTEU6Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBEb3VibGUudG9TdHJpbmcocmVhZERvdWJsZSgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWUgKyAiICgiICsgdHlwZSArICI6ICIgKyBidGMgKyIpIjsKLSAgICB9Ci0KLSAgICBkb3VibGUgcmVhZERvdWJsZSgpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIF9pbnB1dC5yZWFkRG91YmxlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm9yKGUpOwotICAgICAgICAgICAgcmV0dXJuIDAuMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFN0cmluZyBTT0FQQXJyYXlUeXBlU3RyaW5nKFNPQVBBcnJheVR5cGUgdCkKLSAgICB7Ci0gICAgICAgIGlmICh0ID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gIm51bGwiOwotICAgICAgICByZXR1cm4gUU5hbWVIZWxwZXIucHJldHR5KHQuZ2V0UU5hbWUoKSkgKyB0LnNvYXAxMURpbWVuc2lvblN0cmluZygpOwotICAgIH0KLQotICAgIFNPQVBBcnJheVR5cGUgcmVhZFNPQVBBcnJheVR5cGUoKQotICAgIHsKLSAgICAgICAgUU5hbWUgcU5hbWUgPSByZWFkUU5hbWUoKTsKLSAgICAgICAgU3RyaW5nIGRpbWVuc2lvbnMgPSByZWFkU3RyaW5nKCk7Ci0gICAgICAgIGlmIChxTmFtZSA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIHJldHVybiBuZXcgU09BUEFycmF5VHlwZShxTmFtZSwgZGltZW5zaW9ucyk7Ci0gICAgfQotCi0gICAgUU5hbWVTZXQgcmVhZFFOYW1lU2V0KCkKLSAgICB7Ci0gICAgICAgIHNob3J0IGZsYWcgPSByZWFkU2hvcnQoKTsKLQotICAgICAgICBTZXQgdXJpU2V0ID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgc2hvcnQgdXJpQ291bnQgPSByZWFkU2hvcnQoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1cmlDb3VudDsgaSsrKQotICAgICAgICAgICAgdXJpU2V0LmFkZChyZWFkU3RyaW5nKCkpOwotCi0gICAgICAgIFNldCBxbmFtZVNldDEgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICBzaG9ydCBxbmNvdW50MSA9IHJlYWRTaG9ydCgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHFuY291bnQxOyBpKyspCi0gICAgICAgICAgICBxbmFtZVNldDEuYWRkKHJlYWRRTmFtZSgpKTsKLQotICAgICAgICBTZXQgcW5hbWVTZXQyID0gbmV3IEhhc2hTZXQoKTsKLSAgICAgICAgc2hvcnQgcW5jb3VudDIgPSByZWFkU2hvcnQoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBxbmNvdW50MjsgaSsrKQotICAgICAgICAgICAgcW5hbWVTZXQyLmFkZChyZWFkUU5hbWUoKSk7Ci0KLSAgICAgICAgaWYgKGZsYWcgPT0gMSkKLSAgICAgICAgICAgIHJldHVybiBRTmFtZVNldC5mb3JTZXRzKHVyaVNldCwgbnVsbCwgcW5hbWVTZXQxLCBxbmFtZVNldDIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gUU5hbWVTZXQuZm9yU2V0cyhudWxsLCB1cmlTZXQsIHFuYW1lU2V0MiwgcW5hbWVTZXQxKTsKLSAgICB9Ci0KLSAgICBieXRlW10gcmVhZEJ5dGVBcnJheSgpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgc2hvcnQgbGVuID0gX2lucHV0LnJlYWRTaG9ydCgpOwotICAgICAgICAgICAgYnl0ZVtdIHJlc3VsdCA9IG5ldyBieXRlW2xlbl07Ci0gICAgICAgICAgICBfaW5wdXQucmVhZEZ1bGx5KHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBlcnJvcihlKTsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQmlnSW50ZWdlciByZWFkQmlnSW50ZWdlcigpCi0gICAgewotICAgICAgICBieXRlW10gcmVzdWx0ID0gcmVhZEJ5dGVBcnJheSgpOwotICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09IDEgJiYgcmVzdWx0WzBdID09IDApCi0gICAgICAgICAgICByZXR1cm4gQmlnSW50ZWdlci5aRVJPOwotICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PSAxICYmIHJlc3VsdFswXSA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIEJpZ0ludGVnZXIuT05FOwotICAgICAgICByZXR1cm4gbmV3IEJpZ0ludGVnZXIocmVzdWx0KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZmluYWwgYnl0ZVtdIFNJTkdMRV9aRVJPX0JZVEUgPSBuZXcgYnl0ZVtdIHsgKGJ5dGUpMCB9OwotCi0gICAgcHJpdmF0ZSBpbnQgX21ham9ydmVyOwotICAgIHByaXZhdGUgaW50IF9taW5vcnZlcjsKLSAgICBwcml2YXRlIGludCBfcmVsZWFzZW5vOwotCi0KLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBhdExlYXN0KGludCBtYWpvcnZlciwgaW50IG1pbm9ydmVyLCBpbnQgcmVsZWFzZW5vKQotICAgIHsKLSAgICAgICAgaWYgKF9tYWpvcnZlciA+IG1ham9ydmVyKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChfbWFqb3J2ZXIgPCBtYWpvcnZlcikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKF9taW5vcnZlciA+IG1pbm9ydmVyKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChfbWlub3J2ZXIgPCBtaW5vcnZlcikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIChfcmVsZWFzZW5vID49IHJlbGVhc2Vubyk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIGJvb2xlYW4gYXRNb3N0KGludCBtYWpvcnZlciwgaW50IG1pbm9ydmVyLCBpbnQgcmVsZWFzZW5vKQotICAgIHsKLSAgICAgICAgaWYgKF9tYWpvcnZlciA+IG1ham9ydmVyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoX21ham9ydmVyIDwgbWFqb3J2ZXIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKF9taW5vcnZlciA+IG1pbm9ydmVyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoX21pbm9ydmVyIDwgbWlub3J2ZXIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIChfcmVsZWFzZW5vIDw9IHJlbGVhc2Vubyk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1sY29uZmlnL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb25maWcvU2NoZW1hQ29uZmlnLmphdmEgYi92Mi9zcmMveG1sY29uZmlnL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9jb25maWcvU2NoZW1hQ29uZmlnLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwN2RkNTEuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbGNvbmZpZy9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvY29uZmlnL1NjaGVtYUNvbmZpZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbmZpZzsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBjb20uYmVhLngyMDAyLngwOS54YmVhbi5jb25maWcuQ29uZmlnRG9jdW1lbnQuQ29uZmlnOwotaW1wb3J0IGNvbS5iZWEueDIwMDIueDA5LnhiZWFuLmNvbmZpZy5Oc2NvbmZpZzsKLWltcG9ydCBjb20uYmVhLngyMDAyLngwOS54YmVhbi5jb25maWcuUW5hbWVjb25maWc7Ci0KLXB1YmxpYyBjbGFzcyBTY2hlbWFDb25maWcKLXsKLSAgICBwcml2YXRlIE1hcCBfcGFja2FnZU1hcDsKLSAgICBwcml2YXRlIE1hcCBfcHJlZml4TWFwOwotICAgIHByaXZhdGUgTWFwIF9zdWZmaXhNYXA7Ci0gICAgcHJpdmF0ZSBNYXAgX3FuYW1lTWFwOwotCi0gICAgcHJpdmF0ZSBTY2hlbWFDb25maWcoKQotICAgIHsKLSAgICAgICAgX3BhY2thZ2VNYXAgPSBDb2xsZWN0aW9ucy5FTVBUWV9NQVA7Ci0gICAgICAgIF9wcmVmaXhNYXAgPSBDb2xsZWN0aW9ucy5FTVBUWV9NQVA7Ci0gICAgICAgIF9zdWZmaXhNYXAgPSBDb2xsZWN0aW9ucy5FTVBUWV9NQVA7Ci0gICAgICAgIF9xbmFtZU1hcCA9IENvbGxlY3Rpb25zLkVNUFRZX01BUDsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBTY2hlbWFDb25maWcgZm9yQ29uZmlnRG9jdW1lbnRzKENvbmZpZ1tdIGNvbmZpZ3MpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IFNjaGVtYUNvbmZpZyhjb25maWdzKTsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBTY2hlbWFDb25maWcoQ29uZmlnW10gY29uZmlncykKLSAgICB7Ci0gICAgICAgIF9wYWNrYWdlTWFwID0gbmV3IExpbmtlZEhhc2hNYXAoKTsKLSAgICAgICAgX3ByZWZpeE1hcCA9IG5ldyBMaW5rZWRIYXNoTWFwKCk7Ci0gICAgICAgIF9zdWZmaXhNYXAgPSBuZXcgTGlua2VkSGFzaE1hcCgpOwotICAgICAgICBfcW5hbWVNYXAgPSBuZXcgTGlua2VkSGFzaE1hcCgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbmZpZ3MubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIENvbmZpZyBjb25maWcgPSBjb25maWdzW2ldOwotICAgICAgICAgICAgTnNjb25maWdbXSBuc2EgPSBjb25maWcuZ2V0TmFtZXNwYWNlQXJyYXkoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnNhLmxlbmd0aDsgaisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlY29yZE5hbWVzcGFjZVNldHRpbmcobnNhW2pdLmdldFVyaSgpLCBuc2Fbal0uZ2V0UGFja2FnZSgpLCBfcGFja2FnZU1hcCk7Ci0gICAgICAgICAgICAgICAgcmVjb3JkTmFtZXNwYWNlU2V0dGluZyhuc2Fbal0uZ2V0VXJpKCksIG5zYVtqXS5nZXRQcmVmaXgoKSwgX3ByZWZpeE1hcCk7Ci0gICAgICAgICAgICAgICAgcmVjb3JkTmFtZXNwYWNlU2V0dGluZyhuc2Fbal0uZ2V0VXJpKCksIG5zYVtqXS5nZXRTdWZmaXgoKSwgX3N1ZmZpeE1hcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFFuYW1lY29uZmlnW10gcW5jID0gY29uZmlnLmdldFFuYW1lQXJyYXkoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcW5jLmxlbmd0aDsgaisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9xbmFtZU1hcC5wdXQocW5jW2pdLmdldE5hbWUoKSwgcW5jW2pdLmdldEphdmFuYW1lKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCByZWNvcmROYW1lc3BhY2VTZXR0aW5nKE9iamVjdCBrZXksIFN0cmluZyB2YWx1ZSwgTWFwIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gbnVsbCkKLSAgICAgICAgICAgIHJlc3VsdC5wdXQoIiIsIHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5IGluc3RhbmNlb2YgU3RyaW5nICYmICIjI2FueSIuZXF1YWxzKGtleSkpCi0gICAgICAgICAgICByZXN1bHQucHV0KGtleSwgdmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgaW5zdGFuY2VvZiBMaXN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSAoKExpc3Qpa2V5KS5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyB1cmkgPSAoU3RyaW5nKWkubmV4dCgpOwotICAgICAgICAgICAgICAgIGlmICgiIyNsb2NhbCIuZXF1YWxzKHVyaSkpCi0gICAgICAgICAgICAgICAgICAgIHVyaSA9ICIiOwotICAgICAgICAgICAgICAgIHJlc3VsdC5wdXQodXJpLCB2YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBTdHJpbmcgbG9va3VwKE1hcCBtYXAsIFN0cmluZyB1cmkpCi0gICAgewotICAgICAgICBpZiAodXJpID09IG51bGwpCi0gICAgICAgICAgICB1cmkgPSAiIjsKLSAgICAgICAgU3RyaW5nIHJlc3VsdCA9IChTdHJpbmcpbWFwLmdldCh1cmkpOwotICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICByZXR1cm4gKFN0cmluZyltYXAuZ2V0KCIjI2FueSIpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgbG9va3VwUGFja2FnZUZvck5hbWVzcGFjZShTdHJpbmcgdXJpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxvb2t1cChfcGFja2FnZU1hcCwgdXJpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGxvb2t1cFByZWZpeEZvck5hbWVzcGFjZShTdHJpbmcgdXJpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxvb2t1cChfcHJlZml4TWFwLCB1cmkpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgbG9va3VwU3VmZml4Rm9yTmFtZXNwYWNlKFN0cmluZyB1cmkpCi0gICAgewotICAgICAgICByZXR1cm4gbG9va3VwKF9zdWZmaXhNYXAsIHVyaSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBsb29rdXBKYXZhbmFtZUZvclFOYW1lKFFOYW1lIHFuYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChTdHJpbmcpX3FuYW1lTWFwLmdldChxbmFtZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbGlucHV0c3RyZWFtL3dlYmxvZ2ljL3V0aWxzL05lc3RlZFRocm93YWJsZS5qYXZhIGIvdjIvc3JjL3htbGlucHV0c3RyZWFtL3dlYmxvZ2ljL3V0aWxzL05lc3RlZFRocm93YWJsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjIyZjcxLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy91dGlscy9OZXN0ZWRUaHJvd2FibGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIHdlYmxvZ2ljLnV0aWxzOwotCi0vKioKLSAqIFRoZSBpbnRlcmZhY2UgaW1wbGVtZW50ZWQgYnkgTmVzdGVkRXhjZXB0aW9uLCBOZXN0ZWRFcnJvciwgYW5kCi0gKiBOZXN0ZWRSdW50aW1lRXhjZXB0aW9uIGxhcmdlbHkgc28gVXRpbCBjYW4gcHJvdmlkZSBhIHN0YW5kYXJkCi0gKiBpbXBsZW1lbnRhdGlvbiBvZiB0b1N0cmluZygpIGFuZCBwcmludFN0YWNrVHJhY2UoKQotICoKLSAqIEBkZXByZWNhdGVkIHVzZSBKREsgMS40IHN0eWxlIG5lc3RlZCB0aHJvd2FibGVzIHdoZXJlIHBvc3NpYmxlLgotICoKLSAqLwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci0KLXB1YmxpYyBpbnRlcmZhY2UgTmVzdGVkVGhyb3dhYmxlIHsKLQotICAvKiogR2V0IHRoZSBuZXN0ZWQgVGhyb3dhYmxlLiAqLwotICBUaHJvd2FibGUgZ2V0TmVzdGVkKCk7Ci0KLSAgLyoqIENhbGwgc3VwZXIudG9TdHJpbmcoKS4gW0tsdWRnZSBidXQgbmVjZXNzYXJ5Ll0gKi8KLSAgU3RyaW5nIHN1cGVyVG9TdHJpbmcoKTsKLQotICAvKiogQ2FsbCBzdXBlci5wcmludFN0YWNrVHJhY2UoKS4gW0tsdWRnZSBidXQgbmVjZXNzYXJ5Ll0gKi8KLSAgdm9pZCBzdXBlclByaW50U3RhY2tUcmFjZShQcmludFN0cmVhbSBwcyk7Ci0KLSAgLyoqIENhbGwgc3VwZXIucHJpbnRTdGFja1RyYWNlKCkuIFtLbHVkZ2UgYnV0IG5lY2Vzc2FyeS5dICovCi0gIHZvaWQgc3VwZXJQcmludFN0YWNrVHJhY2UoUHJpbnRXcml0ZXIgcG8pOwotCi0gIHN0YXRpYyBjbGFzcyBVdGlsIHsKLQotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBFT0wgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7Ci0KLSAgICAvKioKLSAgICAgKiBQcmludHMgdGhlIGV4Y2VwdGlvbiBtZXNzYWdlIGFuZCBpdHMgbmVzdGVkIGV4Y2VwdGlvbiBtZXNzYWdlLgotICAgICAqCi0gICAgICogQHJldHVybiAgICAgICAgICAgICAgICAgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBleGNlcHRpb24KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFN0cmluZyB0b1N0cmluZyhOZXN0ZWRUaHJvd2FibGUgbnQpIHsKLSAgICAgIFRocm93YWJsZSBuZXN0ZWQgPSBudC5nZXROZXN0ZWQoKTsKLSAgICAgIGlmIChuZXN0ZWQgPT0gbnVsbCkgewotICAgICAgICByZXR1cm4gbnQuc3VwZXJUb1N0cmluZygpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIG50LnN1cGVyVG9TdHJpbmcoKSArICIgLSB3aXRoIG5lc3RlZCBleGNlcHRpb246IiArIAotICAgICAgICAgIEVPTCArICJbIiArIG5lc3RlZFRvU3RyaW5nKG5lc3RlZCkgKyAiXSI7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIG5lc3RlZFRvU3RyaW5nKFRocm93YWJsZSBuZXN0ZWQpIHsKLSAgICAgIGlmIChuZXN0ZWQgaW5zdGFuY2VvZiBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uKSB7Ci0gICAgICAgIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gaXRlID0gKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24pIG5lc3RlZDsKLSAgICAgICAgcmV0dXJuIG5lc3RlZC50b1N0cmluZygpICsgIiAtIHdpdGggdGFyZ2V0IGV4Y2VwdGlvbjoiICsgCi0gICAgICAgICAgRU9MICsgIlsiICsgaXRlLmdldFRhcmdldEV4Y2VwdGlvbigpLnRvU3RyaW5nKCkgKwotICAgICAgICAgICJdIjsKLSAgICAgIH0KLSAgICAgIHJldHVybiBuZXN0ZWQudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBQcmludHMgdGhlIHN0YWNrIHRyYWNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGV4Y2VwdGlvbiBhbmQKLSAgICAgKiBpdHMgbmVzdGVkIGV4Y2VwdGlvbi4KLSAgICAgKgotICAgICAqIEBwYXJhbSBzICAgICAgICAgICAgICAgICBQcmludFN0cmVhbQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludFN0YWNrVHJhY2UoTmVzdGVkVGhyb3dhYmxlIG50LCBQcmludFN0cmVhbSBzKSB7IAotICAgICAgVGhyb3dhYmxlIG5lc3RlZCA9IG50LmdldE5lc3RlZCgpOwotICAgICAgaWYgKG5lc3RlZCAhPSBudWxsKSB7Ci0gICAgICAgIG5lc3RlZC5wcmludFN0YWNrVHJhY2Uocyk7Ci0gICAgICAgIHMucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tIG5lc3RlZCB3aXRoaW46IC0tLS0tLS0tLS0tLS0tLS0tLSIpOwotICAgICAgfQotICAgICAgbnQuc3VwZXJQcmludFN0YWNrVHJhY2Uocyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUHJpbnRzIHRoZSBzdGFjayB0cmFjZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBleGNlcHRpb24gYW5kCi0gICAgICogaXRzIG5lc3RlZCBleGNlcHRpb24uCi0gICAgICoKLSAgICAgKiBAcGFyYW0gdyAgICAgICAgICAgICAgICAgUHJpbnRXcml0ZXIKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRTdGFja1RyYWNlKE5lc3RlZFRocm93YWJsZSBudCwgUHJpbnRXcml0ZXIgdykgeyAKLSAgICAgIFRocm93YWJsZSBuZXN0ZWQgPSBudC5nZXROZXN0ZWQoKTsKLSAgICAgIGlmIChuZXN0ZWQgIT0gbnVsbCkgewotICAgICAgICBuZXN0ZWQucHJpbnRTdGFja1RyYWNlKHcpOwotICAgICAgICB3LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLSBuZXN0ZWQgd2l0aGluOiAtLS0tLS0tLS0tLS0tLS0tLS0iKTsKLSAgICAgIH0KLSAgICAgIG50LnN1cGVyUHJpbnRTdGFja1RyYWNlKHcpOwotICAgIH0KLSAgfQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9BdHRyaWJ1dGUuamF2YSBiL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy94bWwvc3RyZWFtL0F0dHJpYnV0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODc3NDE1Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy94bWwvc3RyZWFtL0F0dHJpYnV0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSB3ZWJsb2dpYy54bWwuc3RyZWFtOwotCi0vKioKLSAqIEFuIGludGVyZmFjZSB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGFuIGF0dHJpYnV0ZQotICoKLSAqIEBzaW5jZSBXZWJsb2dpYyBYTUwgSW5wdXQgU3RyZWFtIDEuMAotICogQHZlcnNpb24gMS4wCi0gKiBAc2VlIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MTmFtZQotICogQHNlZSB3ZWJsb2dpYy54bWwuc3RyZWFtLkF0dHJpYnV0ZQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEF0dHJpYnV0ZSB7Ci0gIC8qKgotICAgKiBHZXQgdGhlIFhNTE5hbWUgb2YgdGhlIGN1cnJlbnQgYXR0cmlidXRlLgotICAgKiBAc2VlIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MTmFtZQotICAgKi8KLSAgcHVibGljIFhNTE5hbWUgZ2V0TmFtZSgpOwotCi0gIC8qKgotICAgKiBHZXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBhdHRyaWJ1dGUuCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlKCk7Ci0KLSAgLyoqCi0gICAqIEdldCB0aGUgYXR0cmlidXRlIHR5cGUgb2YgdGhlIGN1cnJlbnQgYXR0cmlidXRlCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKTsKLQotICAvKioKLSAgICogR2V0IHRoZSBhdHRyaWJ1dGUgdHlwZSBvZiB0aGUgY3VycmVudCBhdHRyaWJ1dGUKLSAgICovCi0gIHB1YmxpYyBYTUxOYW1lIGdldFNjaGVtYVR5cGUoKTsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy94bWwvc3RyZWFtL0F0dHJpYnV0ZUl0ZXJhdG9yLmphdmEgYi92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9BdHRyaWJ1dGVJdGVyYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGEzNWExLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy94bWwvc3RyZWFtL0F0dHJpYnV0ZUl0ZXJhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIHdlYmxvZ2ljLnhtbC5zdHJlYW07Ci0KLS8qKgotICogVGhpcyBpbnRlcmZhY2Ugc3BlY2lmaWVzIG1ldGhvZHMgZm9yIGl0ZXJhdGluZyBvdmVyIGF0dHJpYnV0ZXMuCi0gKiBAc2luY2UgV2VibG9naWMgWE1MIElucHV0IFN0cmVhbSAxLjAKLSAqIEB2ZXJzaW9uIDEuMAotICogQHNlZSB3ZWJsb2dpYy54bWwuc3RyZWFtLkF0dHJpYnV0ZQotKi8KLQotcHVibGljIGludGVyZmFjZSBBdHRyaWJ1dGVJdGVyYXRvciB7Ci0gIC8qKgotICAgKiBHZXQgdGhlIG5leHQgQXR0cmlidXRlIG9uIHRoZSBzdHJlYW0KLSAgICogQHNlZSB3ZWJsb2dpYy54bWwuc3RyZWFtLkF0dHJpYnV0ZQotICAgKi8KLSAgcHVibGljIEF0dHJpYnV0ZSBuZXh0KCk7Ci0KLSAgLyoqCi0gICAqIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgYXR0cmlidXRlcyBvbiB0aGUgc3RyZWFtCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBoYXNOZXh0KCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0aGUgbmV4dCBlbGVtZW50IG9uIHRoZSBzdHJlYW0gd2l0aG91dCBzaGlmdGluZyBpdAotICAgKi8KLSAgcHVibGljIEF0dHJpYnV0ZSBwZWVrKCk7Ci0KLQotICAvKioKLSAgICogU2tpcCB0aGUgbmV4dCBlbGVtZW50IG9uIHRoZSBzdHJlYW0KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNraXAoKTsKLX0KLQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbGlucHV0c3RyZWFtL3dlYmxvZ2ljL3htbC9zdHJlYW0vQnVmZmVyZWRYTUxJbnB1dFN0cmVhbS5qYXZhIGIvdjIvc3JjL3htbGlucHV0c3RyZWFtL3dlYmxvZ2ljL3htbC9zdHJlYW0vQnVmZmVyZWRYTUxJbnB1dFN0cmVhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzMyYTNkLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy94bWwvc3RyZWFtL0J1ZmZlcmVkWE1MSW5wdXRTdHJlYW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugd2VibG9naWMueG1sLnN0cmVhbTsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0vKioKLSAqIEV4dGVuZHMgdGhlIFhNTElucHV0U3RyZWFtIHRvIGFsbG93IG1hcmtpbmcgYW5kIHJlc2V0aW5nIG9mIHRoZSBzdHJlYW0uCi0gKgotICogQHNpbmNlIFhNTElucHV0U3RyZWFtIDEuMAotICogQHZlcnNpb24gMS4wCi0gKiBAc2VlIHdlYmxvZ2ljLnhtbC5zdHJlYW0uQ2hhcmFjdGVyRGF0YQotICogQHNlZSB3ZWJsb2dpYy54bWwuc3RyZWFtLlByb2Nlc3NpbmdJbnN0cnVjdGlvbgotICogQHNlZSB3ZWJsb2dpYy54bWwuc3RyZWFtLlN0YXJ0RWxlbWVudAotICogQHNlZSB3ZWJsb2dpYy54bWwuc3RyZWFtLkVuZEVsZW1lbnQKLSAqIEBzZWUgd2VibG9naWMueG1sLnN0cmVhbS5DaGFyYWN0ZXJEYXRhCi0gKiBAc2VlIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MTmFtZQotICovCi1wdWJsaWMgaW50ZXJmYWNlIEJ1ZmZlcmVkWE1MSW5wdXRTdHJlYW0gZXh0ZW5kcyBYTUxJbnB1dFN0cmVhbSB7Ci0gIC8qKgotICAgKiBTZXRzIHRoZSBtYXJrcyBhIHBvaW50IHRvIHJldHVybiB0byBpbiB0aGUgc3RyZWFtLAotICAgKiB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBzdHJlYW0gZG9lcyBub3Qgc3VwcG9ydCBtYXJrLgotICAgKiBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGluIEJ1ZmZlcmVkU3RyZWFtcwotICAgKi8KLSAgcHVibGljIHZvaWQgbWFyaygpIHRocm93cyBYTUxTdHJlYW1FeGNlcHRpb247Ci0gIC8qKgotICAgKiBSZXNldHMgdGhlIHN0cmVhbSB0byB0aGUgcHJldmlvdXMgbWFyay4KLSAgICogdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgc3RyZWFtIGRvZXMgbm90IHN1cHBvcnQgbWFyazsKLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlc2V0KCkgdGhyb3dzIFhNTFN0cmVhbUV4Y2VwdGlvbjsKLX0KLQotCi0KLQotCmRpZmYgLS1naXQgYS92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9DaGFuZ2VQcmVmaXhNYXBwaW5nLmphdmEgYi92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9DaGFuZ2VQcmVmaXhNYXBwaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3NjU0OTMuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbGlucHV0c3RyZWFtL3dlYmxvZ2ljL3htbC9zdHJlYW0vQ2hhbmdlUHJlZml4TWFwcGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSB3ZWJsb2dpYy54bWwuc3RyZWFtOwotCi0vKioKLSAqIFRoaXMgZXZlbnQgc2lnbmFscyB0aGF0IGEgcHJlZml4IG1hcHBpbmcgaGFzIGNoYW5nZWQgZnJvbQotICogT2xkTmFtZXNwYWNlTmFtZSB0byB0aGUgTmV3TmFtZXNwYWNlTmFtZQotICoKLSAqIEBzaW5jZSBXZWJsb2dpYyBYTUwgSW5wdXQgU3RyZWFtIDEuMAotICogQHZlcnNpb24gMS4wCi0gKiBAc2VlIHdlYmxvZ2ljLnhtbC5zdHJlYW0uU3RhcnRQcmVmaXhNYXBwaW5nCi0gKiBAc2VlIHdlYmxvZ2ljLnhtbC5zdHJlYW0uRW5kUHJlZml4TWFwcGluZwotICovCi1wdWJsaWMgaW50ZXJmYWNlIENoYW5nZVByZWZpeE1hcHBpbmcgZXh0ZW5kcyBYTUxFdmVudCB7Ci0gIC8qCi0gICAqIHJldHVybnMgdGhlIHVyaSB0aGF0IHRoZSBwcmVmaXggd2FzIGJvdW5kIHRvCi0gICAqIEByZXR1cm4gU3RyaW5nIHZhbHVlIG9mIHRoZSB1cmkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0T2xkTmFtZXNwYWNlVXJpKCk7Ci0gIC8qCi0gICAqIHJldHVybnMgdGhlIG5ldyB1cmkgdGhhdCB0aGUgcHJlZml4IGlzIGJvdW5kIHRvCi0gICAqIEByZXR1cm4gU3RyaW5nIHZhbHVlIG9mIHRoZSB1cmkKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TmV3TmFtZXNwYWNlVXJpKCk7Ci0gIC8qCi0gICAqIHJldHVybnMgdGhlIHByZWZpeCB0aGF0IGlzIGJvdW5kCi0gICAqIEByZXR1cm4gU3RyaW5nIHZhbHVlIG9mIHRoZSBwcmVmaXgKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJlZml4KCk7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9DaGFyYWN0ZXJEYXRhLmphdmEgYi92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9DaGFyYWN0ZXJEYXRhLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiY2JkOGIuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbGlucHV0c3RyZWFtL3dlYmxvZ2ljL3htbC9zdHJlYW0vQ2hhcmFjdGVyRGF0YS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSB3ZWJsb2dpYy54bWwuc3RyZWFtOwotCi0vKioKLSAqIEEgbWFya2VyIGludGVyZmFjZSBmb3IgY2hhcmFjdGVyIGRhdGEKLSAqCi0gKiBAc2luY2UgV2VibG9naWMgWE1MIElucHV0IFN0cmVhbSAxLjAKLSAqIEB2ZXJzaW9uIDEuMAotICogQHNlZSB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTEV2ZW50Ci0qLwotcHVibGljIGludGVyZmFjZSBDaGFyYWN0ZXJEYXRhIGV4dGVuZHMgWE1MRXZlbnQgewotICAvKioKLSAgICogR2V0IHRoZSBjb250ZW50IG9mIHRoaXMgZWxlbWVudCwKLSAgICogcmV0dXJucyBudWxsIGlmIHRoZSBlbGVtZW50IGhhcyBubyBjb250ZW50Ci0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldENvbnRlbnQoKTsKLQotICAvKioKLSAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgZWxlbWVudCBoYXMgY29udGVudCBhbmQgZmFsc2Ugb3RoZXJ3aXNlCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBoYXNDb250ZW50KCk7Ci0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy94bWwvc3RyZWFtL0NvbW1lbnQuamF2YSBiL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy94bWwvc3RyZWFtL0NvbW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjUzYzZlMC4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9Db21tZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIHdlYmxvZ2ljLnhtbC5zdHJlYW07Ci0KLS8qKgotICogQSBtYXJrZXIgaW50ZXJmYWNlIGZvciBjb21tZW50IGRhdGEKLSAqCi0gKiBAc2luY2UgV2VibG9naWMgWE1MIElucHV0IFN0cmVhbSAxLjAKLSAqIEB2ZXJzaW9uIDEuMAotICogQHNlZSB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTEV2ZW50Ci0qLwotCi1wdWJsaWMgaW50ZXJmYWNlIENvbW1lbnQgZXh0ZW5kcyBDaGFyYWN0ZXJEYXRhIHsKLSAgLyoqCi0gICAqIE5vIG1ldGhvZHMgYXJlIGRlZmluZWQgaW4gdGhpcyBpbnRlcmZhY2UuCi0gICAqLwotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbGlucHV0c3RyZWFtL3dlYmxvZ2ljL3htbC9zdHJlYW0vRWxlbWVudEZpbHRlci5qYXZhIGIvdjIvc3JjL3htbGlucHV0c3RyZWFtL3dlYmxvZ2ljL3htbC9zdHJlYW0vRWxlbWVudEZpbHRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOWNlYTU3Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy94bWwvc3RyZWFtL0VsZW1lbnRGaWx0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugd2VibG9naWMueG1sLnN0cmVhbTsKLQotLyoqCi0gKgotICogVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyBhIGZpbHRlciBvbiBlbGVtZW50cwotICovCi0KLXB1YmxpYyBpbnRlcmZhY2UgRWxlbWVudEZpbHRlciB7Ci0gIC8qKgotICAgKiB0ZXN0cyB3aGV0aGVyIHRoaXMgZXZlbnQgaXMgcGFydCBvZiB0aGlzIHN0cmVhbSAKLSAgICovCi0gIGJvb2xlYW4gYWNjZXB0KFhNTEV2ZW50IGVsZW1lbnQpOwotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbGlucHV0c3RyZWFtL3dlYmxvZ2ljL3htbC9zdHJlYW0vRW5kRG9jdW1lbnQuamF2YSBiL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy94bWwvc3RyZWFtL0VuZERvY3VtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3ZGI3ZDAuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbGlucHV0c3RyZWFtL3dlYmxvZ2ljL3htbC9zdHJlYW0vRW5kRG9jdW1lbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugd2VibG9naWMueG1sLnN0cmVhbTsKLQotLyoqCi0gKiBBIG1hcmtlciBpbnRlcmZhY2UgZm9yIHRoZSBlbmQgb2YgYSBkb2N1bWVudAotICoKLSAqIEBzaW5jZSBXZWJsb2dpYyBYTUwgSW5wdXQgU3RyZWFtIDEuMAotICogQHZlcnNpb24gMS4wCi0gKiBAc2VlIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MRXZlbnQKLSovCi1wdWJsaWMgaW50ZXJmYWNlIEVuZERvY3VtZW50IGV4dGVuZHMgWE1MRXZlbnQgewotICAvKioKLSAgICogTm8gbWV0aG9kcyBhcmUgZGVmaW5lZCBpbiB0aGlzIGludGVyZmFjZS4KLSAgICovCi19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9FbmRFbGVtZW50LmphdmEgYi92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9FbmRFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlZmU0OTguLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbGlucHV0c3RyZWFtL3dlYmxvZ2ljL3htbC9zdHJlYW0vRW5kRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSB3ZWJsb2dpYy54bWwuc3RyZWFtOwotCi0vKioKLSAqIEEgbWFya2VyIGludGVyZmFjZSBmb3IgdGhlIGVuZCBlbGVtZW50IGV2ZW50LgotICogVGhlIG5hbWUgaXMgYXZhaWxhYmxlIGluIHRoZSBnZXROYW1lIG1ldGhvZCBvZgotICogd2VibG9naWMueG1sLnN0cmVhbS5YTUxFdmVudCBpbnRlcmZhY2UuCi0gKgotICogQHNpbmNlIFdlYmxvZ2ljIFhNTCBJbnB1dCBTdHJlYW0gMS4wCi0gKiBAdmVyc2lvbiAxLjAKLSAqIEBzZWUgd2VibG9naWMueG1sLnN0cmVhbS5YTUxFdmVudAotKi8KLXB1YmxpYyBpbnRlcmZhY2UgRW5kRWxlbWVudCBleHRlbmRzIFhNTEV2ZW50IHsKLSAgLyoqCi0gICAqIE5vIG1ldGhvZHMgYXJlIGRlZmluZWQgaW4gdGhpcyBpbnRlcmZhY2UuICAKLSAgICovCi19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9FbmRQcmVmaXhNYXBwaW5nLmphdmEgYi92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9FbmRQcmVmaXhNYXBwaW5nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2NTNkNGYuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbGlucHV0c3RyZWFtL3dlYmxvZ2ljL3htbC9zdHJlYW0vRW5kUHJlZml4TWFwcGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSB3ZWJsb2dpYy54bWwuc3RyZWFtOwotCi0vKioKLSAqIFRoaXMgZXZlbnQgc2lnbmFscyB0aGF0IGEgcHJlZml4IG1hcHBpbmcgaGFzIGdvbmUgb3V0IG9mIHNjb3BlCi0gKgotICogQHNpbmNlIFdlYmxvZ2ljIFhNTCBJbnB1dCBTdHJlYW0gMS4wCi0gKiBAdmVyc2lvbiAxLjAKLSAqIEBzZWUgd2VibG9naWMueG1sLnN0cmVhbS5TdGFydFByZWZpeE1hcHBpbmcKLSAqIEBzZWUgd2VibG9naWMueG1sLnN0cmVhbS5DaGFuZ2VQcmVmaXhNYXBwaW5nCi0gKi8KLQotcHVibGljIGludGVyZmFjZSBFbmRQcmVmaXhNYXBwaW5nIGV4dGVuZHMgWE1MRXZlbnQgewotICAvKiAKLSAgICogUmV0dXJucyB0aGUgcHJlZml4IHRoYXQgaGFzIGdvbmUgb3V0IG9mIHNjb3BlCi0gICAqIEByZXR1cm4gU3RyaW5nIHZhbHVlIG9mIHRoZSBwcmVmaXgKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJlZml4KCk7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9FbnRpdHlSZWZlcmVuY2UuamF2YSBiL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy94bWwvc3RyZWFtL0VudGl0eVJlZmVyZW5jZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmYyMTFlLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy94bWwvc3RyZWFtL0VudGl0eVJlZmVyZW5jZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSB3ZWJsb2dpYy54bWwuc3RyZWFtOwotCi0vKioKLSAqIEFuIGludGVyZmFjZSBmb3IgaGFuZGxpbmcgRW50aXR5IERlY2xhcmF0aW9ucwotICoKLSAqIEBzaW5jZSBXZWJsb2dpYyBYTUwgSW5wdXQgU3RyZWFtIDEuMAotICogQHZlcnNpb24gMS4wCi0gKi8KLQotcHVibGljIGludGVyZmFjZSBFbnRpdHlSZWZlcmVuY2UgZXh0ZW5kcyBYTUxFdmVudCB7Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBlbnRpdHkgd2FzIHNraXBwZWQKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHNraXBwZWQoKTsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy94bWwvc3RyZWFtL0xvY2F0aW9uLmphdmEgYi92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9Mb2NhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTUxODE0Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy94bWwvc3RyZWFtL0xvY2F0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIHdlYmxvZ2ljLnhtbC5zdHJlYW07Ci0KLS8qKgotICogUmV0dXJucyB0aGUgZG9jdW1lbnQgbG9jYXRpb24gb2YgdGhlIGV2ZW50LiAgVGhpcyBpcyBub3QKLSAqIHJlcXVpcmVkIHRvIGJlIGV4YWN0IGFuZCBpcyBpbmZvcm1hdGlvbmFsIG9ubHkuCi0gKiAKLSAqIEBzaW5jZSBXZWJsb2dpYyBYTUwgSW5wdXQgU3RyZWFtIDEuMAotICogQHZlcnNpb24gMS4wCi0gKgotICovCi1wdWJsaWMgaW50ZXJmYWNlIExvY2F0aW9uIHsKLSAgLyoKLSAgICogcmV0dXJucyB0aGUgY3VycmVudCBjb2x1bW4gbnVtYmVyCi0gICAqCi0gICAqIEByZXR1cm4gaW50ZWdlciB2YWx1ZSBvZiB0aGUgY3VycmVudCBjb2x1bW4gbnVtYmVyCi0gICAqLwotICBwdWJsaWMgaW50IGdldENvbHVtbk51bWJlcigpOyAKLSAgLyoKLSAgICogcmV0dXJucyB0aGUgY3VycmVudCBsaW5lCi0gICAqCi0gICAqIEByZXR1cm4gaW50ZWdlciB2YWx1ZSBvZiB0aGUgY3VycmVudCBsaW5lIG51bWJlcgotICAgKi8KLSAgcHVibGljIGludCBnZXRMaW5lTnVtYmVyKCk7Ci0gIC8qCi0gICAqIHJldHVybnMgdGhlIFN0cmluZyB2YWx1ZSBvZiB0aGUgcHVibGljIElECi0gICAqCi0gICAqIEByZXR1cm4gcHVibGljIElEIG9yIG51bGwgaWYgbm90IHNldAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRQdWJsaWNJZCgpOyAKLSAgLyoKLSAgICogcmV0dXJucyB0aGUgU3RyaW5nIHZhbHVlIG9mIHRoZSBzeXN0ZW0gSUQKLSAgICoKLSAgICogQHJldHVybiBzeXN0ZW0gSUQgb3IgbnVsbCBpZiBub3Qgc2V0Ci0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFN5c3RlbUlkKCk7Ci19Ci0KLQotCmRpZmYgLS1naXQgYS92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uamF2YSBiL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy94bWwvc3RyZWFtL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjdkNDYyLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy94bWwvc3RyZWFtL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSB3ZWJsb2dpYy54bWwuc3RyZWFtOwotCi0vKioKLSAqIEEgbWFya2VyIGludGVyZmFjZSBmb3IgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMKLSAqCi0gKiBAc2luY2UgV2VibG9naWMgWE1MIElucHV0IFN0cmVhbSAxLjAKLSAqIEB2ZXJzaW9uIDEuMAotICogQHNlZSB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTEV2ZW50Ci0qLwotcHVibGljIGludGVyZmFjZSBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gZXh0ZW5kcyBYTUxFdmVudCB7Ci0gIC8qCi0gICAqIHRoZSB0YXJnZXQgc2VjdGlvbiBvZiB0aGUgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbgotICAgKgotICAgKiBAcmV0dXJuIHRoZSBTdHJpbmcgdmFsdWUgb2YgdGhlIFBJIG9yIG51bGwKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0VGFyZ2V0KCk7Ci0gIC8qCi0gICAqIHRoZSBkYXRhIHNlY3Rpb24gb2YgdGhlIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24KLSAgICoKLSAgICogQHJldHVybiB0aGUgU3RyaW5nIHZhbHVlIG9mIHRoZSBQSSdzIGRhdGEgb3IgbnVsbAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXREYXRhKCk7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9SZWZlcmVuY2VSZXNvbHZlci5qYXZhIGIvdjIvc3JjL3htbGlucHV0c3RyZWFtL3dlYmxvZ2ljL3htbC9zdHJlYW0vUmVmZXJlbmNlUmVzb2x2ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVmNjdlMi4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9SZWZlcmVuY2VSZXNvbHZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSB3ZWJsb2dpYy54bWwuc3RyZWFtOwotCi1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbTsKLQotLyoqCi0gKiBUaGlzIGludGVyZmFjZSBjYW4gYmUgaW1wbGVtZW50ZWQgdG8gYWxsb3cgcmVzb2x1dGlvbiBvZiByZWZlcmVuY2VzCi0gKiBvbiBhIHN0cmVhbS4gIAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFJlZmVyZW5jZVJlc29sdmVyIHsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHhtbCBwb2ludGVkIHRvIGJ5IHRoaXMgaWRyZWYgYXMgYW4gWE1MSW5wdXRTdHJlYW0KLSAgICogQHBhcmFtIGlkcmVmCi0gICAqLwotICBYTUxJbnB1dFN0cmVhbSByZXNvbHZlKFN0cmluZyBpZHJlZikKLSAgICB0aHJvd3MgWE1MU3RyZWFtRXhjZXB0aW9uOwotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBpZCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoaXMgaWRyZWYKLSAgICogQHBhcmFtIGlkcmVmCi0gICAqLwotICBTdHJpbmcgZ2V0SWQoU3RyaW5nIGlkcmVmKTsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy94bWwvc3RyZWFtL1NwYWNlLmphdmEgYi92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9TcGFjZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGI1YzE0Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy94bWwvc3RyZWFtL1NwYWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIHdlYmxvZ2ljLnhtbC5zdHJlYW07Ci0KLS8qKgotICogVGhpcyBlbGVtZW50IHJldHVybnMgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHRvIGFsbG93IHNlcGFyYXRlCi0gKiBoYW5kbGluZyBieSB0aGUgYXBwbGljYXRpb24KLSAqCi0gKiBAc2luY2UgV2VibG9naWMgWE1MIElucHV0IFN0cmVhbSAxLjAKLSAqIEB2ZXJzaW9uIDEuMAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFNwYWNlIGV4dGVuZHMgQ2hhcmFjdGVyRGF0YSB7Ci0gIC8qKgotICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBpcyBpZ25vcmFibGUgd2hpdGVzcGFjZQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaWdub3JhYmxlKCk7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9TdGFydERvY3VtZW50LmphdmEgYi92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9TdGFydERvY3VtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkN2QxNjMuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbGlucHV0c3RyZWFtL3dlYmxvZ2ljL3htbC9zdHJlYW0vU3RhcnREb2N1bWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSB3ZWJsb2dpYy54bWwuc3RyZWFtOwotCi0vKioKLSAqIEFuIGludGVyZmFjZSBmb3IgdGhlIHN0YXJ0IGRvY3VtZW50IGV2ZW50Ci0gKgotICogQHNpbmNlIFdlYmxvZ2ljIFhNTCBJbnB1dCBTdHJlYW0gMS4wCi0gKiBAdmVyc2lvbiAxLjAKLSAqIEBzZWUgd2VibG9naWMueG1sLnN0cmVhbS5YTUxFdmVudAotKi8KLXB1YmxpYyBpbnRlcmZhY2UgU3RhcnREb2N1bWVudCBleHRlbmRzIFhNTEV2ZW50IHsKLSAgLyogCi0gICAqIFJldHVybnMgdGhlIHN5c3RlbSBpZCBvZiB0aGUgc3RyZWFtCi0gICAqIEByZXR1cm4gdGhlIHN5c3RlbSBpZCwgZGVmYXVsdHMgdG8gIiIKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0U3lzdGVtSWQoKTsKLSAgLyogCi0gICAqIFJldHVybnMgdGhlIGVuY29kaW5nIHN0eWxlIG9mIHRoaXMgWE1MIHN0cmVhbQotICAgKiBAcmV0dXJuIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcsIGRlZmF1bHRzIHRvICJVVEYtOCIKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Q2hhcmFjdGVyRW5jb2RpbmdTY2hlbWUoKTsKLSAgLyogCi0gICAqIFJldHVybnMgaWYgdGhpcyBYTUwgaXMgc3RhbmRhbG9uZQotICAgKiBAcmV0dXJuIHRoZSB2ZXJzaW9uIG9mIFhNTCwgZGVmYXVsdHMgdG8gInllcyIKLSAgICovCi0gIHB1YmxpYyBib29sZWFuIGlzU3RhbmRhbG9uZSgpOwotICAvKiAKLSAgICogUmV0dXJucyB0aGUgdmVyc2lvbiBvZiBYTUwgb2YgdGhpcyBYTUwgc3RyZWFtCi0gICAqIEByZXR1cm4gdGhlIHZlcnNpb24gb2YgWE1MLCBkZWZhdWx0cyB0byAiMS4wIgotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRWZXJzaW9uKCk7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9TdGFydEVsZW1lbnQuamF2YSBiL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy94bWwvc3RyZWFtL1N0YXJ0RWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTA3NjEzLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy94bWwvc3RyZWFtL1N0YXJ0RWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSB3ZWJsb2dpYy54bWwuc3RyZWFtOwotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLS8qKgotICogVGhlIFN0YXJ0RWxlbWVudCBpbnRlcmZhY2UgcHJvdmlkZXMgYWNjZXNzIHRvIGluZm9ybWF0aW9uIGFib3V0Ci0gKiBzdGFydCBlbGVtZW50cwotICoKLSAqIEBzaW5jZSBXZWJsb2dpYyBYTUwgSW5wdXQgU3RyZWFtIDEuMAotICogQHZlcnNpb24gMS4wCi0gKiBAc2VlIHdlYmxvZ2ljLnhtbC5zdHJlYW0uQXR0cmlidXRlSXRlcmF0b3IKLSAqLwotCi1wdWJsaWMgaW50ZXJmYWNlIFN0YXJ0RWxlbWVudCBleHRlbmRzIFhNTEV2ZW50IHsKLSAgLyoqCi0gICAqIFJldHVybnMgYW4gQXR0cmlidXRlSXRlcmF0b3Igb2Ygbm9uLW5hbWVzcGFjZSBkZWNsYXJlZCBhdHRyaWJ1dGVzCi0gICAqLwotICBwdWJsaWMgQXR0cmlidXRlSXRlcmF0b3IgZ2V0QXR0cmlidXRlcygpOwotICAvKioKLSAgICogUmV0dXJucyBhbiBBdHRyaWJ1dGVJdGVyYXRvciBvZiBuYW1lc3BhY2VzIGRlY2xhcmVkIGluIHRoaXMgZWxlbWVudAotICAgKi8KLSAgcHVibGljIEF0dHJpYnV0ZUl0ZXJhdG9yIGdldE5hbWVzcGFjZXMoKTsKLSAgLyoqCi0gICAqIFJldHVybnMgdGhlIHVuaW9uIG9mIGRlY2xhcmVkIGF0dHJpYnV0ZXMgYW5kIG5hbWVzcGFjZXMKLSAgICovCi0gIHB1YmxpYyBBdHRyaWJ1dGVJdGVyYXRvciBnZXRBdHRyaWJ1dGVzQW5kTmFtZXNwYWNlcygpOwotICAvKioKLSAgICogUmV0dXJucyB0aGUgYXR0cmlidXRlIHJlZmVycmVkIHRvIGJ5IHRoaXMgbmFtZQotICAgKi8KLSAgcHVibGljIEF0dHJpYnV0ZSBnZXRBdHRyaWJ1dGVCeU5hbWUoWE1MTmFtZSBuYW1lKTsKLSAgLyoqCi0gICAqIEdldHMgdGhlIHZhbHVlIHRoYXQgdGhlIHByZWZpeCBpcyBib3VuZCB0byBpbiB0aGUKLSAgICogY29udGV4dCBvZiB0aGlzIGVsZW1lbnQuICBSZXR1cm5zIG51bGwgaWYgCi0gICAqIHRoZSBwcmVmaXggaXMgbm90IGJvdW5kIGluIHRoaXMgY29udGV4dAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2VVcmkoU3RyaW5nIHByZWZpeCk7Ci0gIC8qKgotICAgKiBHZXRzIGEgamF2YS51dGlsLk1hcCBmcm9tIHByZWZpeGVzIHRvIFVSSXMgaW4gc2NvcGUgZm9yIHRoaXMKLSAgICogZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyBNYXAgZ2V0TmFtZXNwYWNlTWFwKCk7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9TdGFydFByZWZpeE1hcHBpbmcuamF2YSBiL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy94bWwvc3RyZWFtL1N0YXJ0UHJlZml4TWFwcGluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTkxOWJlLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy94bWwvc3RyZWFtL1N0YXJ0UHJlZml4TWFwcGluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSB3ZWJsb2dpYy54bWwuc3RyZWFtOwotCi0vKioKLSAqIFRoaXMgZXZlbnQgc2lnbmFscyB0aGF0IGEgcHJlZml4IG1hcHBpbmcgaGFzIGJlZ3VuIHNjb3BlCi0gKgotICogQHNpbmNlIFdlYmxvZ2ljIFhNTCBJbnB1dCBTdHJlYW0gMS4wCi0gKiBAdmVyc2lvbiAxLjAKLSAqIEBzZWUgd2VibG9naWMueG1sLnN0cmVhbS5FbmRQcmVmaXhNYXBwaW5nCi0gKiBAc2VlIHdlYmxvZ2ljLnhtbC5zdHJlYW0uQ2hhbmdlUHJlZml4TWFwcGluZwotICovCi0KLXB1YmxpYyBpbnRlcmZhY2UgU3RhcnRQcmVmaXhNYXBwaW5nIGV4dGVuZHMgWE1MRXZlbnQgewotICAvKiAKLSAgICogUmV0dXJucyB0aGUgdXJpIG9mIHRoZSBwcmVmaXggdGhhdCBpcyBpbiBzY29wZSBmb3IgdGhlIGZvbGxvd2luZyAKLSAgICogZWxlbWVudAotICAgKiBAcmV0dXJuIFN0cmluZyB2YWx1ZSBvZiB0aGUgdXJpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZVVyaSgpOwotICAvKiAKLSAgICogUmV0dXJucyB0aGUgcHJlZml4IHRoYXQgaXMgbm93IGluIHNjb3BlCi0gICAqIEByZXR1cm4gU3RyaW5nIHZhbHVlIG9mIHRoZSBwcmVmaXgKLSAgICovCi0gIHB1YmxpYyBTdHJpbmcgZ2V0UHJlZml4KCk7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9YTUxFdmVudC5qYXZhIGIvdjIvc3JjL3htbGlucHV0c3RyZWFtL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MRXZlbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmYxN2M5NS4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9YTUxFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugd2VibG9naWMueG1sLnN0cmVhbTsKLQotLyoqCi0gKiBUaGlzIGlzIHRoZSBiYXNlIGVsZW1lbnQgaW50ZXJmYWNlIGZvciBoYW5kbGluZyBtYXJrdXAgZXZlbnRzLgotICoKLSAqIEBzaW5jZSBXZWJsb2dpYyBYTUwgSW5wdXQgU3RyZWFtIDEuMAotICogQHZlcnNpb24gMS4wCi0gKiBAc2VlIHdlYmxvZ2ljLnhtbC5zdHJlYW0uQ2hhcmFjdGVyRGF0YQotICogQHNlZSB3ZWJsb2dpYy54bWwuc3RyZWFtLlByb2Nlc3NpbmdJbnN0cnVjdGlvbgotICogQHNlZSB3ZWJsb2dpYy54bWwuc3RyZWFtLlN0YXJ0RWxlbWVudAotICogQHNlZSB3ZWJsb2dpYy54bWwuc3RyZWFtLkVuZEVsZW1lbnQKLSAqIEBzZWUgd2VibG9naWMueG1sLnN0cmVhbS5DaGFyYWN0ZXJEYXRhCi0gKiBAc2VlIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MTmFtZQotICogQHNlZSB3ZWJsb2dpYy54bWwuc3RyZWFtLlN0YXJ0RG9jdW1lbnQKLSAqLwotCi1wdWJsaWMgaW50ZXJmYWNlIFhNTEV2ZW50IHsKLSAgLyoqCi0gICAqIEEgY29uc3RhbnQgd2hpY2ggaWRlbnRpZmllcyBhbiBYTUxFdmVudAotICAgKiBAc2VlIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MRXZlbnQKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFhNTF9FVkVOVD0weDAwMDAwMDAxOwotICAvKioKLSAgICogQSBjb25zdGFudCB3aGljaCBpZGVudGlmaWVzIGEgU3RhcnRFbGVtZW50Ci0gICAqIEBzZWUgd2VibG9naWMueG1sLnN0cmVhbS5TdGFydEVsZW1lbnQKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNUQVJUX0VMRU1FTlQ9MHgwMDAwMDAwMjsKLSAgLyoqCi0gICAqIEEgY29uc3RhbnQgd2hpY2ggaWRlbnRpZmllcyBhbiBFbmRFbGVtZW50Ci0gICAqIEBzZWUgd2VibG9naWMueG1sLnN0cmVhbS5FbmRFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTkRfRUxFTUVOVD0weDAwMDAwMDA0OwotICAvKioKLSAgICogQSBjb25zdGFudCB3aGljaCBpZGVudGlmaWVzIGEgUHJvY2Vzc2luZ0luc3RydWN0aW9uCi0gICAqIEBzZWUgd2VibG9naWMueG1sLnN0cmVhbS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST0NFU1NJTkdfSU5TVFJVQ1RJT049MHgwMDAwMDAwODsKLSAgLyoqCi0gICAqIEEgY29uc3RhbnQgd2hpY2ggaWRlbnRpZmllcyBhIENoYXJhY3RlckRhdGEgRXZlbnQKLSAgICogQHNlZSB3ZWJsb2dpYy54bWwuc3RyZWFtLkNoYXJhY3RlckRhdGEKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENIQVJBQ1RFUl9EQVRBPTB4MDAwMDAwMTA7Ci0gIC8qKgotICAgKiBBIGNvbnN0YW50IHdoaWNoIGlkZW50aWZpZXMgYSBDb21tZW50Ci0gICAqIEBzZWUgd2VibG9naWMueG1sLnN0cmVhbS5Db21tZW50Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDT01NRU5UPTB4MDAwMDAwMjA7Ci0gIC8qKgotICAgKiBBIGNvbnN0YW50IHdoaWNoIGlkZW50aWZpZXMgYSBTcGFjZQotICAgKiBAc2VlIHdlYmxvZ2ljLnhtbC5zdHJlYW0uU3BhY2UKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNQQUNFPTB4MDAwMDAwNDA7Ci0gIC8qKgotICAgKiBBIGNvbnN0YW50IHdoaWNoIGlkZW50aWZpZXMgYSBOdWxsRWxlbWVudAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTlVMTF9FTEVNRU5UPTB4MDAwMDAwODA7Ci0gIC8qKgotICAgKiBBIGNvbnN0YW50IHdoaWNoIGlkZW50aWZpZXMgYSBTdGFydERvY3VtZW50Ci0gICAqIEBzZWUgd2VibG9naWMueG1sLnN0cmVhbS5TdGFydERvY3VtZW50Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTVEFSVF9ET0NVTUVOVD0weDAwMDAwMTAwOwotICAvKioKLSAgICogQSBjb25zdGFudCB3aGljaCBpZGVudGlmaWVzIGFuIEVuZERvY3VtZW50Ci0gICAqIEBzZWUgd2VibG9naWMueG1sLnN0cmVhbS5FbmREb2N1bWVudAotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRU5EX0RPQ1VNRU5UPTB4MDAwMDAyMDA7Ci0gIC8qKgotICAgKiBBIGNvbnN0YW50IHdoaWNoIGlkZW50aWZpZXMgYSBTdGFydFByZWZpeE1hcHBpbmcKLSAgICogQHNlZSB3ZWJsb2dpYy54bWwuc3RyZWFtLlN0YXJ0UHJlZml4TWFwcGluZwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU1RBUlRfUFJFRklYX01BUFBJTkc9MHgwMDAwMDQwMDsKLSAgLyoqCi0gICAqIEEgY29uc3RhbnQgd2hpY2ggaWRlbnRpZmllcyBhIEVuZFByZWZpeE1hcHBpbmcKLSAgICogQHNlZSB3ZWJsb2dpYy54bWwuc3RyZWFtLkVuZFByZWZpeE1hcHBpbmcKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVORF9QUkVGSVhfTUFQUElORz0weDAwMDAwODAwOwotICAvKioKLSAgICogQSBjb25zdGFudCB3aGljaCBpZGVudGlmaWVzIGEgQ2hhbmdlUHJlZml4TWFwcGluZwotICAgKiBAc2VlIHdlYmxvZ2ljLnhtbC5zdHJlYW0uQ2hhbmdlUHJlZml4TWFwcGluZwotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0hBTkdFX1BSRUZJWF9NQVBQSU5HPTB4MDAwMDEwMDA7Ci0gIC8qKgotICAgKiBBIGNvbnN0YW50IHdoaWNoIGlkZW50aWZpZXMgYW4gRW50aXR5UmVmZXJlbmNlIAotICAgKiBAc2VlIHdlYmxvZ2ljLnhtbC5zdHJlYW0uRW50aXR5UmVmZXJlbmNlCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFTlRJVFlfUkVGRVJFTkNFPTB4MDAwMDIwMDA7Ci0gIC8qKgotICAgKiBHZXQgdGhlIGV2ZW50IHR5cGUgb2YgdGhlIGN1cnJlbnQgZWxlbWVudCwKLSAgICogcmV0dXJucyBhbiBpbnRlZ2VyIHNvIHRoYXQgc3dpdGNoIHN0YXRlbWVudHMKLSAgICogY2FuIGJlIHdyaXR0ZW4gb24gdGhlIHJlc3VsdAotICAgKi8KLSAgcHVibGljIGludCBnZXRUeXBlKCk7Ci0gIC8qKgotICAgKiBHZXQgdGhlIGV2ZW50IHR5cGUgb2YgdGhlIGN1cnJlbnQgZWxlbWVudCwKLSAgICogcmV0dXJucyBhbiBpbnRlZ2VyIHNvIHRoYXQgc3dpdGNoIHN0YXRlbWVudHMKLSAgICogY2FuIGJlIHdyaXR0ZW4gb24gdGhlIHJlc3VsdAotICAgKi8KLSAgcHVibGljIFhNTE5hbWUgZ2V0U2NoZW1hVHlwZSgpOwotICAvKioKLSAgICogR2V0IHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIHR5cGUgbmFtZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRUeXBlQXNTdHJpbmcoKTsKLSAgLyoqCi0gICAqIEdldCB0aGUgWE1MTmFtZSBvZiB0aGUgY3VycmVudCBlbGVtZW50Ci0gICAqIEBzZWUgd2VibG9naWMueG1sLnN0cmVhbS5YTUxOYW1lCi0gICAqLwotICBwdWJsaWMgWE1MTmFtZSBnZXROYW1lKCk7Ci0KLSAgLyoqCi0gICAqIENoZWNrIGlmIHRoaXMgRWxlbWVudCBoYXMgYSBuYW1lCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBoYXNOYW1lKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0aGUgbG9jYXRpb24gb2YgdGhpcyBFbGVtZW50Ci0gICAqLwotICBwdWJsaWMgTG9jYXRpb24gZ2V0TG9jYXRpb24oKTsKLQotICAvKioKLSAgICogTWV0aG9kIGFjY2VzcyB0byB0aGUgZWxlbWVudHMgdHlwZQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaXNTdGFydEVsZW1lbnQoKTsKLSAgcHVibGljIGJvb2xlYW4gaXNFbmRFbGVtZW50KCk7Ci0gIHB1YmxpYyBib29sZWFuIGlzRW50aXR5UmVmZXJlbmNlKCk7Ci0gIHB1YmxpYyBib29sZWFuIGlzU3RhcnRQcmVmaXhNYXBwaW5nKCk7Ci0gIHB1YmxpYyBib29sZWFuIGlzRW5kUHJlZml4TWFwcGluZygpOwotICBwdWJsaWMgYm9vbGVhbiBpc0NoYW5nZVByZWZpeE1hcHBpbmcoKTsKLSAgcHVibGljIGJvb2xlYW4gaXNQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oKTsKLSAgcHVibGljIGJvb2xlYW4gaXNDaGFyYWN0ZXJEYXRhKCk7Ci0gIHB1YmxpYyBib29sZWFuIGlzU3BhY2UoKTsKLSAgcHVibGljIGJvb2xlYW4gaXNOdWxsKCk7Ci0gIHB1YmxpYyBib29sZWFuIGlzU3RhcnREb2N1bWVudCgpOwotICBwdWJsaWMgYm9vbGVhbiBpc0VuZERvY3VtZW50KCk7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5qYXZhIGIvdjIvc3JjL3htbGlucHV0c3RyZWFtL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNlYTZmZS4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugd2VibG9naWMueG1sLnN0cmVhbTsKLQotLyoqCi0gKgotICogVGhpcyBpcyB0aGUgdG9wIGxldmVsIGludGVyZmFjZSBmb3IgaXRlcmF0aW5nIG92ZXIgWE1MIEV2ZW50cwotICogaW4gYW4gWE1MIGRvY3VtZW50LgotICoKLSAqIDxwPiBEaWZmZXJlbmNlIGZyb20gU0FYIDwvcD4KLSAqIDxwPiBBbiBldmVudCBzdHJlYW0gY2FuIGJlIHRob3VnaHQgb2YgZW5jYXBzdWxhdGluZyBTQVgKLSAqIGV2ZW50cy4gSXQgYXBwbGllcyBhbiBpdGVyYXRvci9wdWxsIG1ldGFwaG9yIHRvIHRoZSBwYXJzZXIgCi0gKiBhbGxvd2luZyBwcm9jZWR1cmFsLCBzdHJlYW0tYmFzZWQsIGhhbmRsaW5nIG9mIGlucHV0IFhNTCByYXRoZXIgdGhhbgotICogaGF2aW5nIHRvIHdyaXRlIGNoYWluZWQgZXZlbnQgaGFuZGxlcnMgdG8gaGFuZGxlIGNvbXBsZXggWE1MCi0gKiBkb2N1bWVudHMuCi0gKiA8cD4gRGlmZmVyZW5jZSBmcm9tIERPTSA8L3A+Ci0gKiA8cD5UaGUgcHVsbCBtZXRhcGhvciBhbGxvd3Mgc2luZ2xlLXBhc3MsIHN0cmVhbS1iYXNlZCAgcGFyc2luZyBvZiB0aGUgZG9jdW1lbnQgcmF0aGVyCi0gKiB0aGFuIHRyZWUgYmFzZWQgbWFuaXB1bGF0aW9uLjwvcD4KLSAqCi0gKiBAc2luY2UgWE1MSW5wdXRTdHJlYW0gMS4wCi0gKiBAdmVyc2lvbiAxLjAKLSAqIEBzZWUgd2VibG9naWMueG1sLnN0cmVhbS5YTUxFdmVudAotICogQHNlZSB3ZWJsb2dpYy54bWwuc3RyZWFtLkNoYXJhY3RlckRhdGEKLSAqIEBzZWUgd2VibG9naWMueG1sLnN0cmVhbS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24KLSAqIEBzZWUgd2VibG9naWMueG1sLnN0cmVhbS5TdGFydEVsZW1lbnQKLSAqIEBzZWUgd2VibG9naWMueG1sLnN0cmVhbS5FbmRFbGVtZW50Ci0gKiBAc2VlIHdlYmxvZ2ljLnhtbC5zdHJlYW0uQ2hhcmFjdGVyRGF0YQotICogQHNlZSB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTE5hbWUKLSAqLwotCi0vLyBSRVZJRVcgcGRhcGt1c0BiZWEuY29tIDIwMDItU2VwLTEzIC0tIHdoaWxlIEkgbGlrZSB0aGUgY29udmVuaWVuY2UKLS8vIG9mIG1hbnkgb2YgdGhlc2UgbWV0aG9kcywgaXQgc3RyaWtlcyBtZSB0aGF0IG1hbnkgb2YgdGhlc2UgbWV0aG9kcwotLy8gY291bGQgaW1wbGVtZW50ZWQgYXMgc3RhdGljIG1ldGhvZHMgaW4gYSB1dGlsaXR5IGNsYXNzLiAgdGhlIGRvd24KLS8vIHNpZGUgdG8gaGF2aW5nIHRoZW0gaW4gdGhpcyBiYXNlIGludGVyZmFjZSBpcyB0aGF0IGl0IG1ha2VzIHRoZQotLy8gY29udHJhY3QgZm9yIGltcGxlbWVudGVycyB1bm5lY2Vzc2FyaWx5IHN0ZWFwIGFuZCByZXN1bHRzIGluCi0vLyBkdXBsaWNhdGVkIGNvZGUgaW4gbWV0aG9kcyB0aGF0IGNhbid0IGV4dGVuZCBvbmUgb2YgdGhlIGNvbW1vbiBiYXNlCi0vLyBjbGFzc2VzLiAgCi0KLXB1YmxpYyBpbnRlcmZhY2UgWE1MSW5wdXRTdHJlYW0gewotICAvKioKLSAgICogR2V0IHRoZSBuZXh0IFhNTEV2ZW50IG9uIHRoZSBzdHJlYW0KLSAgICogQHNlZSB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTEV2ZW50Ci0gICAqLwotICBwdWJsaWMgWE1MRXZlbnQgbmV4dCgpIHRocm93cyBYTUxTdHJlYW1FeGNlcHRpb247Ci0gIC8qKgotICAgKiBDaGVjayBpZiB0aGVyZSBhcmUgbW9yZSBldmVudHMgdG8gcHVsbCBvZiB0aGUgc3RyZWFtCi0gICAqIEBzZWUgd2VibG9naWMueG1sLnN0cmVhbS5YTUxFdmVudAotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gaGFzTmV4dCgpIHRocm93cyBYTUxTdHJlYW1FeGNlcHRpb247Ci0gIC8qKgotICAgKiBTa2lwIHRoZSBuZXh0IHN0cmVhbSBldmVudAotICAgKi8KLSAgcHVibGljIHZvaWQgc2tpcCgpIHRocm93cyBYTUxTdHJlYW1FeGNlcHRpb247Ci0gIC8qKgotICAgKiBTa2lwcyB0aGUgZW50aXJlIG5leHQgc3RhcnQgdGFnIC8gZW5kIHRhZyBwYWlyLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2tpcEVsZW1lbnQoKSB0aHJvd3MgWE1MU3RyZWFtRXhjZXB0aW9uOwotICAvKioKLSAgICogQ2hlY2sgdGhlIG5leHQgWE1MRXZlbnQgd2l0aG91dCByZWFkaW5nIGl0IGZyb20gdGhlIHN0cmVhbS4KLSAgICogUmV0dXJucyBudWxsIGlmIHRoZSBzdHJlYW0gaXMgYXQgRU9GIG9yIGhhcyBubyBtb3JlIFhNTEV2ZW50cy4KLSAgICogQHNlZSB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTEV2ZW50Ci0gICAqLwotICBwdWJsaWMgWE1MRXZlbnQgcGVlaygpIHRocm93cyBYTUxTdHJlYW1FeGNlcHRpb247Ci0gIC8qKgotICAgKiBQb3NpdGlvbiB0aGUgc3RyZWFtIGF0IHRoZSBuZXh0IFhNTEV2ZW50IG9mIHRoaXMgdHlwZS4gIFRoZSBtZXRob2QKLSAgICogcmV0dXJucyB0cnVlIGlmIHRoZSBzdHJlYW0gY29udGFpbnMgYW5vdGhlciBYTUxFdmVudCBvZiB0aGlzIHR5cGUKLSAgICogYW5kIGZhbHNlIG90aGVyd2lzZS4KLSAgICogQHBhcmFtIGV2ZW50VHlwZSBBbiBpbnRlZ2VyIGNvZGUgdGhhdCBpbmRpY2F0ZXMgdGhlIGVsZW1lbnQgdHlwZS4KLSAgICogQHNlZSB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTEV2ZW50Ci0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBza2lwKGludCBldmVudFR5cGUpIHRocm93cyBYTUxTdHJlYW1FeGNlcHRpb247Ci0gIC8qKgotICAgKiBQb3NpdGlvbiB0aGUgc3RyZWFtIGF0IHRoZSBuZXh0IGVsZW1lbnQgb2YgdGhpcyBuYW1lLiAgVGhlIG1ldGhvZAotICAgKiByZXR1cm5zIHRydWUgaWYgdGhlIHN0cmVhbSBjb250YWlucyBhbm90aGVyIGVsZW1lbnQgd2l0aCB0aGlzIG5hbWUKLSAgICogYW5kIGZhbHNlIG90aGVyd2lzZS4gIFNraXAgaXMgYSBmb3J3YXJkIG9wZXJhdG9yIG9ubHkuICBJdCBkb2VzCi0gICAqIG5vdCBsb29rIGJhY2t3YXJkIGluIHRoZSBzdHJlYW0uCi0gICAqIEBwYXJhbSBuYW1lIEFuIG9iamVjdCB0aGF0IGRlZmluZXMgYW4gWE1MIG5hbWUuCi0gICAqIElmIHRoZSBYTUxOYW1lLmdldE5hbWVTcGFjZU5hbWUoKSBtZXRob2Qgb24gdGhlIFhNTE5hbWUgYXJndW1lbnQgcmV0dXJucwotICAgKiBudWxsIHRoZSBYTUxOYW1lIHdpbGwgbWF0Y2gganVzdCB0aGUgbG9jYWwgbmFtZS4gIFByZWZpeGVzIGFyZQotICAgKiBub3QgY2hlY2tlZCBmb3IgZXF1YWxpdHkuCi0gICAqIEBzZWUgd2VibG9naWMueG1sLnN0cmVhbS5YTUxOYW1lCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBza2lwKFhNTE5hbWUgbmFtZSkgdGhyb3dzIFhNTFN0cmVhbUV4Y2VwdGlvbjsKLSAgLyoqCi0gICAqIFBvc2l0aW9uIHRoZSBzdHJlYW0gYXQgdGhlIG5leHQgZWxlbWVudCBvZiB0aGlzIG5hbWUgYW5kIHRoaXMgdHlwZS4KLSAgICogVGhlIG1ldGhvZCByZXR1cm5zIHRydWUgaWYgdGhlIHN0cmVhbSBjb250YWlucyBhbm90aGVyIGVsZW1lbnQgCi0gICAqIHdpdGggdGhpcyBuYW1lIG9mIHRoaXMgdHlwZSBhbmQgZmFsc2Ugb3RoZXJ3aXNlLiAgCi0gICAqIEBwYXJhbSBuYW1lIEFuIG9iamVjdCB0aGF0IGRlZmluZXMgYW4gWE1MIG5hbWUuCi0gICAqIElmIHRoZSBYTUxOYW1lLmdldE5hbWVTcGFjZU5hbWUoKSBtZXRob2Qgb24gdGhlIFhNTE5hbWUgYXJndW1lbnQgcmV0dXJucwotICAgKiBudWxsIHRoZSBYTUxOYW1lIHdpbGwgbWF0Y2gganVzdCB0aGUgbG9jYWwgbmFtZS4gIFByZWZpeGVzIGFyZQotICAgKiBub3QgY2hlY2tlZCBmb3IgZXF1YWxpdHkuCi0gICAqIEBwYXJhbSBldmVudFR5cGUgQW4gaW50ZWdlciBjb2RlIHRoYXQgaW5kaWNhdGVzIHRoZSBlbGVtZW50IHR5cGUuCi0gICAqIEBzZWUgd2VibG9naWMueG1sLnN0cmVhbS5YTUxFdmVudAotICAgKiBAc2VlIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MTmFtZQotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gc2tpcChYTUxOYW1lIG5hbWUsIGludCBldmVudFR5cGUpIHRocm93cyBYTUxTdHJlYW1FeGNlcHRpb247Ci0gIC8qKgotICAgKiBnZXRTdWJTdHJlYW0oKSByZXR1cm5zIGEgc3RyZWFtIHdoaWNoIHBvaW50cyB0byB0aGUgZW50aXJlIG5leHQgZWxlbWVudCBpbiB0aGUKLSAgICogY3VycmVudCBzdHJlYW0uICBGb3IgZXhhbXBsZTogdGFrZSBhIGRvY3VtZW50IHRoYXQgaGFzIGEgcm9vdCBub2RlIEEsIHdoZXJlIHRoZSBjaGlsZHJlbgotICAgKiBvZiBBIGFyZSBCLCBDLCBhbmQgRC4gSWYgdGhlIHN0cmVhbSBpcyBwb2ludGluZyB0byB0aGUgc3RhcnQgZWxlbWVudCBvZiBBLCBnZXRTdWJTdHJlYW0oKSB3aWxsIHJldHVybiAKLSAgICogQSwgQiwgQyBhbmQgRCBpbmNsdWRpbmcgdGhlIHN0YXJ0IGVsZW1lbnQgb2YgQSBhbmQgdGhlIGVuZCBlbGVtZW50IG9mIEEuICBUaGUgcG9zaXRpb24gb2YgdGhlIHBhcmVudAotICAgKiBzdHJlYW0gaXMgbm90IGNoYW5nZWQgYW5kIHRoZSBldmVudHMgcmVhZCBieSB0aGUgc3Vic3RyZWFtIGFyZSB3cml0dGVuIGJhY2sgdG8gaXRzIHBhcmVudC4gICAKLSAgICovCi0gIHB1YmxpYyBYTUxJbnB1dFN0cmVhbSBnZXRTdWJTdHJlYW0oKSB0aHJvd3MgWE1MU3RyZWFtRXhjZXB0aW9uOwotICAvKioKLSAgICogQ2xvc2VzIHRoaXMgaW5wdXQgc3RyZWFtIGFuZCByZWxlYXNlcyBhbnkgc3lzdGVtIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHN0cmVhbS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIFhNTFN0cmVhbUV4Y2VwdGlvbjsKLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgcmVmZXJlbmNlIHJlc29sdmVyIHRoYXQgd2FzIHNldCBmb3IgdGhpcyBzdHJlYW0sCi0gICAqIHJldHVybnMgbnVsbCBpZiBubyBSZWZlcmVuY2VSZXNvbHZlciBoYXMgYmVlbiBzZXQuCi0gICAqIEBzZWUgd2VibG9naWMueG1sLnN0cmVhbS5SZWZlcmVuY2VSZXNvbHZlcgotICAgKi8KLSAgcHVibGljIFJlZmVyZW5jZVJlc29sdmVyIGdldFJlZmVyZW5jZVJlc29sdmVyKCk7Ci0gIC8qKgotICAgKiBQcm92aWRlcyBhIHdheSB0byBzZXQgdGhlIFJlZmVyZW5jZVJlc29sdmVyIG9mIHRoZSBzdHJlYW0sCi0gICAqIHRoaXMgaXMgbW9zdGx5IG5lZWRlZCBmb3IgaGFuZGxlIHJlZmVyZW5jZXMgdG8gb3RoZXIgcGFydHMgb2YgdGhlCi0gICAqIGRvY3VtZW50LgotICAgKiBAc2VlIHdlYmxvZ2ljLnhtbC5zdHJlYW0uUmVmZXJlbmNlUmVzb2x2ZXIKLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFJlZmVyZW5jZVJlc29sdmVyKFJlZmVyZW5jZVJlc29sdmVyIHJlc29sdmVyKTsKLX0KLQotCi0KLQotCmRpZmYgLS1naXQgYS92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9YTUxOYW1lLmphdmEgYi92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9YTUxOYW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMjM0YzYuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbGlucHV0c3RyZWFtL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MTmFtZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSB3ZWJsb2dpYy54bWwuc3RyZWFtOwotCi0vKioKLSAqIEVuY2Fwc3VsYXRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgUXVhbGlmaWVkIE5hbWUgb2YgYW4gWE1MIGV2ZW50LgotICoKLSAqIEBzaW5jZSBXZWJsb2dpYyBYTUwgSW5wdXQgU3RyZWFtIDEuMAotICogQHZlcnNpb24gMS4wCi0gKiBAc2VlIHdlYmxvZ2ljLnhtbC5zdHJlYW0uU3RhcnRFbGVtZW50Ci0gKiBAc2VlIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MRXZlbnQKLSAqLwotCi1wdWJsaWMgaW50ZXJmYWNlIFhNTE5hbWUgewotICAvKgotICAgKiByZXR1cm5zIHRoZSB1cmkgb2YgdGhlIHByZWZpeCBvZiB0aGlzIG5hbWUKLSAgICogCi0gICAqIEByZXR1cm4gcmV0dXJucyB0aGUgdXJpLCAKLSAgICogZW1wdHkgc3RyaW5nIGlmIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSBpcyBib3VuZCB0byBlbXB0eSBzdHJpbmcgCi0gICAqIG9yIG51bGwgaWYgdGhlIG5hbWUgZG9lcyBub3QgaGF2ZSBhIG5hbWVzcGFjZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2VVcmkoKTsKLSAgLyoKLSAgICogcmV0dXJucyB0aGUgbG9jYWxuYW1lIG9mIHRoZSB4bWwgbmFtZQotICAgKiAKLSAgICogQHJldHVybiB0aGUgbG9jYWxuYW1lLCBjYW5ub3QgYmUgbnVsbAotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRMb2NhbE5hbWUoKTsKLSAgLyoKLSAgICogcmV0dXJucyB0aGUgcHJlZml4IG9mIHRoZSB4bWwgbmFtZQotICAgKiAKLSAgICogQHJldHVybiB0aGUgcHJlZml4IG9mIHRoZSB4bWwgbmFtZSBvciBudWxsCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldFByZWZpeCgpOwotCi0gIC8qCi0gICAqIHJldHVybnMgdGhlIHByZWZpeCBvZiB0aGUgeG1sIG5hbWUgKyAnOicgKyB0aGUgbG9jYWwgbmFtZQotICAgKiBpZiB0aGUgcHJlZml4IGlzIG5vdCBudWxsCi0gICAqIHJldHVybnMgdGhlIGxvY2FsIG5hbWUgb3RoZXJ3aXNlCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBwcmVmaXggcGx1cyB0aGUgbG9jYWwgbmFtZQotICAgKi8KLSAgcHVibGljIFN0cmluZyBnZXRRdWFsaWZpZWROYW1lKCk7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uamF2YSBiL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTgwZGYzLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugd2VibG9naWMueG1sLnN0cmVhbTsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotCi1pbXBvcnQgd2VibG9naWMudXRpbHMuTmVzdGVkVGhyb3dhYmxlOwotCi0vKioKLSAqIFRoZSBiYXNlIGV4Y2VwdGlvbiBmb3IgdW5leHBlY3RlZCBpbnB1dCBkdXJpbmcgWE1MIGhhbmRsaW5nCi0gKgotICogQHNpbmNlIFdlYmxvZ2ljIFhNTCBJbnB1dCBTdHJlYW0gMS4wCi0gKiBAdmVyc2lvbiAxLjAKLSAqLwotCi1wdWJsaWMgY2xhc3MgWE1MU3RyZWFtRXhjZXB0aW9uIAotICBleHRlbmRzIElPRXhjZXB0aW9uIAotICBpbXBsZW1lbnRzIE5lc3RlZFRocm93YWJsZSAKLXsKLSAgcHJvdGVjdGVkIFRocm93YWJsZSB0aDsKLQotICBwdWJsaWMgWE1MU3RyZWFtRXhjZXB0aW9uKCkge30KLQotICBwdWJsaWMgWE1MU3RyZWFtRXhjZXB0aW9uKFN0cmluZyBtc2cpIHsgCi0gICAgc3VwZXIobXNnKTsgCi0gIH0KLQotICBwdWJsaWMgWE1MU3RyZWFtRXhjZXB0aW9uKFRocm93YWJsZSB0aCkgewotICAgIHRoaXMudGggPSB0aDsKLSAgICAKLSAgfQotCi0gIHB1YmxpYyBYTUxTdHJlYW1FeGNlcHRpb24oU3RyaW5nIG1zZywgVGhyb3dhYmxlIHRoKSB7Ci0gICAgc3VwZXIobXNnKTsKLSAgICB0aGlzLnRoID0gdGg7Ci0gIH0KLQotICAvKioKLSAgICogR2V0cyB0aGUgbmVzdGVkIGV4Y2VwdGlvbi4KLSAgICoKLSAgICogQHJldHVybiAgICAgICAgICAgICAgICAgTmVzdGVkIGV4Y2VwdGlvbgotICAgKi8KLSAgcHVibGljIFRocm93YWJsZSBnZXROZXN0ZWRFeGNlcHRpb24oKSB7Ci0gICAgcmV0dXJuIGdldE5lc3RlZCgpOwotICB9Ci0KLSAgLy90cnkgdG8gZG8gc29tZXRpbmcgdXNlZnVsCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpIHsKLSAgICBTdHJpbmcgbXNnID0gc3VwZXIuZ2V0TWVzc2FnZSgpOwotCi0gICAgaWYgKG1zZyA9PSBudWxsICYmIHRoICE9IG51bGwpIHsKLSAgICAgIHJldHVybiB0aC5nZXRNZXNzYWdlKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBtc2c7Ci0gICAgfQotICB9Ci0KLQotICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAvLyBOZXN0ZWRUaHJvd2FibGUgaW1wbGVtZW50YXRpb24uCi0KLSAgLyoqCi0gICAqIEdldHMgdGhlIG5lc3RlZCBUaHJvd2FibGUuCi0gICAqCi0gICAqIEByZXR1cm4gICAgICAgICAgICAgICAgIE5lc3RlZCBleGNlcHRpb24KLSAgICovCi0gIHB1YmxpYyBUaHJvd2FibGUgZ2V0TmVzdGVkKCkgewotICAgIHJldHVybiB0aDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgc3VwZXJUb1N0cmluZygpIHsKLSAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHN1cGVyUHJpbnRTdGFja1RyYWNlKFByaW50U3RyZWFtIHBzKSB7Ci0gICAgc3VwZXIucHJpbnRTdGFja1RyYWNlKHBzKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHN1cGVyUHJpbnRTdGFja1RyYWNlKFByaW50V3JpdGVyIHB3KSB7Ci0gICAgc3VwZXIucHJpbnRTdGFja1RyYWNlKHB3KTsKLSAgfQotCi0gIC8vIEVuZCBOZXN0ZWRUaHJvd2FibGUgaW1wbGVtZW50YXRpb24uCi0gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgLyoqCi0gICAqIFByaW50cyB0aGUgZXhjZXB0aW9uIG1lc3NhZ2UgYW5kIGl0cyBuZXN0ZWQgZXhjZXB0aW9uIG1lc3NhZ2UuCi0gICAqCi0gICAqIEByZXR1cm4gICAgICAgICAgICAgICAgIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXhjZXB0aW9uCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgIHJldHVybiBOZXN0ZWRUaHJvd2FibGUuVXRpbC50b1N0cmluZyh0aGlzKTsKLSAgfQotCi0gIC8qKgotICAgKiBQcmludHMgdGhlIHN0YWNrIHRyYWNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGV4Y2VwdGlvbiBhbmQKLSAgICogaXRzIG5lc3RlZCBleGNlcHRpb24uCi0gICAqCi0gICAqIEBwYXJhbSBzICAgICAgICAgICAgICAgICBQcmludFN0cmVhbQotICAgKi8KLSAgcHVibGljIHZvaWQgcHJpbnRTdGFja1RyYWNlKFByaW50U3RyZWFtIHMpIHsgCi0gICAgTmVzdGVkVGhyb3dhYmxlLlV0aWwucHJpbnRTdGFja1RyYWNlKHRoaXMsIHMpOwotICB9Ci0KLSAgLyoqCi0gICAqIFByaW50cyB0aGUgc3RhY2sgdHJhY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZXhjZXB0aW9uIGFuZAotICAgKiBpdHMgbmVzdGVkIGV4Y2VwdGlvbi4KLSAgICoKLSAgICogQHBhcmFtIHMgICAgICAgICAgICAgICAgIFByaW50U3RyZWFtCi0gICAqLwotICBwdWJsaWMgdm9pZCBwcmludFN0YWNrVHJhY2UoUHJpbnRXcml0ZXIgdykgeyAKLSAgICBOZXN0ZWRUaHJvd2FibGUuVXRpbC5wcmludFN0YWNrVHJhY2UodGhpcywgdyk7Ci0gIH0KLQotICAvKioKLSAgICogUHJpbnRzIHRoZSBzdGFjayB0cmFjZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBleGNlcHRpb24gYW5kCi0gICAqIGl0cyBuZXN0ZWQgZXhjZXB0aW9uIHRvIFN5c3RlbS5lcnIuCi0gICAqCi0gICAqIEBwYXJhbSBzICAgICAgICAgICAgICAgICBQcmludFN0cmVhbQotICAgKi8KLSAgcHVibGljIHZvaWQgcHJpbnRTdGFja1RyYWNlKCkgewotICAgIHByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsKLSAgfQotfQotCi0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy94bWwvc3RyZWFtL2V2ZW50cy9FbGVtZW50VHlwZU5hbWVzLmphdmEgYi92Mi9zcmMveG1saW5wdXRzdHJlYW0vd2VibG9naWMveG1sL3N0cmVhbS9ldmVudHMvRWxlbWVudFR5cGVOYW1lcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmQ2MGY5Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxpbnB1dHN0cmVhbS93ZWJsb2dpYy94bWwvc3RyZWFtL2V2ZW50cy9FbGVtZW50VHlwZU5hbWVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSB3ZWJsb2dpYy54bWwuc3RyZWFtLmV2ZW50czsKLQotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MRXZlbnQ7Ci0KLXB1YmxpYyBjbGFzcyBFbGVtZW50VHlwZU5hbWVzIHsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TmFtZShpbnQgdmFsKSB7IAotICAgIHN3aXRjaCh2YWwpIHsKLSAgICBjYXNlIFhNTEV2ZW50LlhNTF9FVkVOVDogcmV0dXJuICgiWE1MX0VWRU5UIik7Ci0gICAgY2FzZSBYTUxFdmVudC5TVEFSVF9FTEVNRU5UOiByZXR1cm4gKCJTVEFSVF9FTEVNRU5UIik7Ci0gICAgY2FzZSBYTUxFdmVudC5FTkRfRUxFTUVOVDogcmV0dXJuICgiRU5EX0VMRU1FTlQiKTsKLSAgICBjYXNlIFhNTEV2ZW50LlBST0NFU1NJTkdfSU5TVFJVQ1RJT046IHJldHVybiAoIlBST0NFU1NJTkdfSU5TVFJVQ1RJT04iKTsKLSAgICBjYXNlIFhNTEV2ZW50LkNIQVJBQ1RFUl9EQVRBOiByZXR1cm4gKCJDSEFSQUNURVJfREFUQSIpOwotICAgIGNhc2UgWE1MRXZlbnQuQ09NTUVOVDogcmV0dXJuICgiQ09NTUVOVCIpOwotICAgIGNhc2UgWE1MRXZlbnQuU1BBQ0U6IHJldHVybiAoIlNQQUNFIik7Ci0gICAgY2FzZSBYTUxFdmVudC5OVUxMX0VMRU1FTlQ6IHJldHVybiAoIk5VTExfRUxFTUVOVCIpOwotICAgIGNhc2UgWE1MRXZlbnQuU1RBUlRfRE9DVU1FTlQ6IHJldHVybiAoIlNUQVJUX0RPQ1VNRU5UIik7Ci0gICAgY2FzZSBYTUxFdmVudC5FTkRfRE9DVU1FTlQ6IHJldHVybiAoIkVORF9ET0NVTUVOVCIpOwotICAgIGNhc2UgWE1MRXZlbnQuU1RBUlRfUFJFRklYX01BUFBJTkc6IHJldHVybiAoIlNUQVJUX1BSRUZJWF9NQVBQSU5HIik7Ci0gICAgY2FzZSBYTUxFdmVudC5DSEFOR0VfUFJFRklYX01BUFBJTkc6IHJldHVybiAoIkNIQU5HRV9QUkVGSVhfTUFQUElORyIpOwotICAgIGNhc2UgWE1MRXZlbnQuRU5EX1BSRUZJWF9NQVBQSU5HOiByZXR1cm4gKCJFTkRfUFJFRklYX01BUFBJTkciKTsKLSAgICBjYXNlIFhNTEV2ZW50LkVOVElUWV9SRUZFUkVOQ0U6IHJldHVybiAoIkVOVElUWV9SRUZFUkVOQ0UiKTsKLSAgICBkZWZhdWx0OiByZXR1cm4gIiI7Ci0gICAgfQotICB9Ci0gIHB1YmxpYyBzdGF0aWMgaW50IGdldFR5cGUoU3RyaW5nIHZhbCkgewotICAgIGlmICh2YWwuZXF1YWxzKCJYTUxfRVZFTlQiKSkgCi0gICAgICByZXR1cm4gWE1MRXZlbnQuWE1MX0VWRU5UOwotICAgIGlmICh2YWwuZXF1YWxzICgiU1RBUlRfRUxFTUVOVCIpKSByZXR1cm4gCi0gICAgICAgIFhNTEV2ZW50LlNUQVJUX0VMRU1FTlQ7IAotICAgIGlmICh2YWwuZXF1YWxzICgiRU5EX0VMRU1FTlQiKSkgcmV0dXJuIFhNTEV2ZW50LkVORF9FTEVNRU5UOwotICAgIGlmICh2YWwuZXF1YWxzICgiUFJPQ0VTU0lOR19JTlNUUlVDVElPTiIpKQotICAgICAgcmV0dXJuIFhNTEV2ZW50LlBST0NFU1NJTkdfSU5TVFJVQ1RJT047IAotICAgIGlmICh2YWwuZXF1YWxzICgiQ0hBUkFDVEVSX0RBVEEiKSkKLSAgICAgIHJldHVybiBYTUxFdmVudC5DSEFSQUNURVJfREFUQTsgCi0gICAgaWYgKHZhbC5lcXVhbHMgKCJDT01NRU5UIikpCi0gICAgICByZXR1cm4gWE1MRXZlbnQuQ09NTUVOVDsgCi0gICAgaWYgKHZhbC5lcXVhbHMgKCJTUEFDRSIpKQotICAgICAgcmV0dXJuIFhNTEV2ZW50LlNQQUNFOyAKLSAgICBpZiAodmFsLmVxdWFscyAoIk5VTExfRUxFTUVOVCIpKQotICAgICAgcmV0dXJuIFhNTEV2ZW50Lk5VTExfRUxFTUVOVDsgCi0gICAgaWYgKHZhbC5lcXVhbHMgKCJTVEFSVF9ET0NVTUVOVCIpKQotICAgICAgcmV0dXJuIFhNTEV2ZW50LlNUQVJUX0RPQ1VNRU5UOyAKLSAgICBpZiAodmFsLmVxdWFscyAoIkVORF9ET0NVTUVOVCIpKQotICAgICAgcmV0dXJuIFhNTEV2ZW50LkVORF9ET0NVTUVOVDsgCi0gICAgaWYgKHZhbC5lcXVhbHMgKCJTVEFSVF9QUkVGSVhfTUFQUElORyIpKQotICAgICAgcmV0dXJuIFhNTEV2ZW50LlNUQVJUX1BSRUZJWF9NQVBQSU5HOyAKLSAgICBpZiAodmFsLmVxdWFscyAoIkNIQU5HRV9QUkVGSVhfTUFQUElORyIpKQotICAgICAgcmV0dXJuIFhNTEV2ZW50LkNIQU5HRV9QUkVGSVhfTUFQUElORzsKLSAgICBpZiAodmFsLmVxdWFscyAoIkVOVElUWV9SRUZFUkVOQ0UiKSkKLSAgICAgIHJldHVybiBYTUxFdmVudC5FTlRJVFlfUkVGRVJFTkNFOyAKLSAgICBpZiAodmFsLmVxdWFscyAoIkVORF9QUkVGSVhfTUFQUElORyIpKQotICAgICAgcmV0dXJuIFhNTEV2ZW50LkVORF9QUkVGSVhfTUFQUElORzsKLQotICAgIHJldHVybiBYTUxFdmVudC5OVUxMX0VMRU1FTlQ7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5YmEzNmQuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNjggKzAsMCBAQAotLyoKLSAqIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSAqCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotICogcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0gKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotICogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0gKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSAqICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSAqICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0gKgotICogNC4gVGhlIG5hbWVzICJBeGlzIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0Ci0gKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotICogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0gKgotICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSIsCi0gKiAgICBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSAqICAgIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICoKLSAqIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0gKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgRm9yIG1vcmUKLSAqIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiwgcGxlYXNlIHNlZQotICogPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotICovCi1wYWNrYWdlIGphdmF4LnhtbC5uYW1lc3BhY2U7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT2JqZWN0SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7Ci0KLS8qKgotICogPGNvZGU+UU5hbWU8L2NvZGU+IGNsYXNzIHJlcHJlc2VudHMgdGhlIHZhbHVlIG9mIGEgcXVhbGlmaWVkIG5hbWUKLSAqIGFzIHNwZWNpZmllZCBpbiA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jUU5hbWUiPlhNTAotICogU2NoZW1hIFBhcnQyOiBEYXRhdHlwZXMgc3BlY2lmaWNhdGlvbjwvYT4uCi0gKiA8cD4KLSAqIFRoZSB2YWx1ZSBvZiBhIFFOYW1lIGNvbnRhaW5zIGEgPGI+bmFtZXNwYWNlVVJJPC9iPiwgYSA8Yj5sb2NhbFBhcnQ8L2I+IGFuZCBhIDxiPnByZWZpeDwvYj4uCi0gKiBUaGUgbG9jYWxQYXJ0IHByb3ZpZGVzIHRoZSBsb2NhbCBwYXJ0IG9mIHRoZSBxdWFsaWZpZWQgbmFtZS4gVGhlCi0gKiBuYW1lc3BhY2VVUkkgaXMgYSBVUkkgcmVmZXJlbmNlIGlkZW50aWZ5aW5nIHRoZSBuYW1lc3BhY2UuCi0gKgotICogQHZlcnNpb24gMS4xCi0gKi8KLXB1YmxpYyBjbGFzcyBRTmFtZSBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZSB7Ci0KLSAgICAvKiogY29tbWVudC9zaGFyZWQgZW1wdHkgc3RyaW5nICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGVtcHR5U3RyaW5nID0gIiIuaW50ZXJuKCk7Ci0KLSAgICAvKiogRmllbGQgbmFtZXNwYWNlVVJJICovCi0gICAgcHJpdmF0ZSBTdHJpbmcgbmFtZXNwYWNlVVJJOwotCi0gICAgLyoqIEZpZWxkIGxvY2FsUGFydCAqLwotICAgIHByaXZhdGUgU3RyaW5nIGxvY2FsUGFydDsKLQotICAgIC8qKiBGaWVsZCBwcmVmaXggKi8KLSAgICBwcml2YXRlIFN0cmluZyBwcmVmaXg7Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RvciBmb3IgdGhlIFFOYW1lLgotICAgICAqCi0gICAgICogQHBhcmFtIGxvY2FsUGFydCBMb2NhbCBwYXJ0IG9mIHRoZSBRTmFtZQotICAgICAqLwotICAgIHB1YmxpYyBRTmFtZShTdHJpbmcgbG9jYWxQYXJ0KSB7Ci0gICAgICAgIHRoaXMoZW1wdHlTdHJpbmcsIGxvY2FsUGFydCwgZW1wdHlTdHJpbmcpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdG9yIGZvciB0aGUgUU5hbWUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbmFtZXNwYWNlVVJJIE5hbWVzcGFjZSBVUkkgZm9yIHRoZSBRTmFtZQotICAgICAqIEBwYXJhbSBsb2NhbFBhcnQgTG9jYWwgcGFydCBvZiB0aGUgUU5hbWUuCi0gICAgICovCi0gICAgcHVibGljIFFOYW1lKFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBsb2NhbFBhcnQpIHsKLSAgICAgICAgdGhpcyhuYW1lc3BhY2VVUkksIGxvY2FsUGFydCwgZW1wdHlTdHJpbmcpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdG9yIGZvciB0aGUgUU5hbWUuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbmFtZXNwYWNlVVJJIE5hbWVzcGFjZSBVUkkgZm9yIHRoZSBRTmFtZQotICAgICAqIEBwYXJhbSBsb2NhbFBhcnQgTG9jYWwgcGFydCBvZiB0aGUgUU5hbWUuCi0gICAgICogQHBhcmFtIHByZWZpeCBQcmVmaXggb2YgdGhlIFFOYW1lLgotICAgICAqLwotICAgIHB1YmxpYyBRTmFtZShTdHJpbmcgbmFtZXNwYWNlVVJJLCBTdHJpbmcgbG9jYWxQYXJ0LCBTdHJpbmcgcHJlZml4KSB7Ci0gICAgICAgIHRoaXMubmFtZXNwYWNlVVJJID0gKG5hbWVzcGFjZVVSSSA9PSBudWxsKQotICAgICAgICAgICAgICAgID8gZW1wdHlTdHJpbmcKLSAgICAgICAgICAgICAgICA6IG5hbWVzcGFjZVVSSS5pbnRlcm4oKTsKLSAgICAgICAgaWYgKGxvY2FsUGFydCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJpbnZhbGlkIFFOYW1lIGxvY2FsIHBhcnQiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRoaXMubG9jYWxQYXJ0ID0gbG9jYWxQYXJ0LmludGVybigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHByZWZpeCA9PSBudWxsKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJpbnZhbGlkIFFOYW1lIHByZWZpeCIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhpcy5wcmVmaXggPSBwcmVmaXguaW50ZXJuKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBOYW1lc3BhY2UgVVJJIGZvciB0aGlzIFFOYW1lCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIE5hbWVzcGFjZSBVUkkKLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZVVSSSgpIHsKLSAgICAgICAgcmV0dXJuIG5hbWVzcGFjZVVSSTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBMb2NhbCBwYXJ0IGZvciB0aGlzIFFOYW1lCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIExvY2FsIHBhcnQKLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldExvY2FsUGFydCgpIHsKLSAgICAgICAgcmV0dXJuIGxvY2FsUGFydDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBQcmVmaXggZm9yIHRoaXMgUU5hbWUKLSAgICAgKgotICAgICAqIEByZXR1cm4gUHJlZml4Ci0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRQcmVmaXgoKSB7Ci0gICAgICAgIHJldHVybiBwcmVmaXg7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIFFOYW1lCi0gICAgICoKLSAgICAgKiBAcmV0dXJuICBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgUU5hbWUKLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotCi0gICAgICAgIHJldHVybiAoKG5hbWVzcGFjZVVSSSA9PSBlbXB0eVN0cmluZykKLSAgICAgICAgICAgICAgICA/IGxvY2FsUGFydAotICAgICAgICAgICAgICAgIDogJ3snICsgbmFtZXNwYWNlVVJJICsgJ30nICsgbG9jYWxQYXJ0KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUZXN0cyB0aGlzIFFOYW1lIGZvciBlcXVhbGl0eSB3aXRoIGFub3RoZXIgb2JqZWN0LgotICAgICAqIDxwPgotICAgICAqIElmIHRoZSBnaXZlbiBvYmplY3QgaXMgbm90IGEgUU5hbWUgb3IgaXMgbnVsbCB0aGVuIHRoaXMgbWV0aG9kCi0gICAgICogcmV0dXJucyA8dHQ+ZmFsc2U8L3R0Pi4KLSAgICAgKiA8cD4KLSAgICAgKiBGb3IgdHdvIFFOYW1lcyB0byBiZSBjb25zaWRlcmVkIGVxdWFsIHJlcXVpcmVzIHRoYXQgYm90aAotICAgICAqIGxvY2FsUGFydCBhbmQgbmFtZXNwYWNlVVJJIG11c3QgYmUgZXF1YWwuIFRoaXMgbWV0aG9kIHVzZXMKLSAgICAgKiA8Y29kZT5TdHJpbmcuZXF1YWxzPC9jb2RlPiB0byBjaGVjayBlcXVhbGl0eSBvZiBsb2NhbFBhcnQKLSAgICAgKiBhbmQgbmFtZXNwYWNlVVJJLiBBbnkgY2xhc3MgdGhhdCBleHRlbmRzIFFOYW1lIGlzIHJlcXVpcmVkCi0gICAgICogdG8gc2F0aXNmeSB0aGlzIGVxdWFsaXR5IGNvbnRyYWN0LgotICAgICAqIDxwPgotICAgICAqIFRoaXMgbWV0aG9kIHNhdGlzZmllcyB0aGUgZ2VuZXJhbCBjb250cmFjdCBvZiB0aGUgPGNvZGU+T2JqZWN0LmVxdWFsczwvY29kZT4gbWV0aG9kLgotICAgICAqCi0gICAgICogQHBhcmFtIG9iaiB0aGUgcmVmZXJlbmNlIG9iamVjdCB3aXRoIHdoaWNoIHRvIGNvbXBhcmUKLSAgICAgKgotICAgICAqIEByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gaWYgdGhlIGdpdmVuIG9iamVjdCBpcyBpZGVudGljYWwgdG8gdGhpcwotICAgICAqICAgICAgUU5hbWU6IDxjb2RlPmZhbHNlPC9jb2RlPiBvdGhlcndpc2UuCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKLQotICAgICAgICBpZiAob2JqID09IHRoaXMpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgUU5hbWUpKSB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKG5hbWVzcGFjZVVSSSA9PSAoKFFOYW1lKSBvYmopLm5hbWVzcGFjZVVSSSkKLSAgICAgICAgICAgICAgICAmJiAobG9jYWxQYXJ0ID09ICgoUU5hbWUpIG9iaikubG9jYWxQYXJ0KSkgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIFFOYW1lIGhvbGRpbmcgdGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgU3RyaW5nLgotICAgICAqIDxwPgotICAgICAqIFRoZSBzdHJpbmcgbXVzdCBiZSBpbiB0aGUgZm9ybSByZXR1cm5lZCBieSB0aGUgUU5hbWUudG9TdHJpbmcoKQotICAgICAqIG1ldGhvZCwgaS5lLiAie25hbWVzcGFjZVVSSX1sb2NhbFBhcnQiLCB3aXRoIHRoZSAie25hbWVzcGFjZVVSSX0iCi0gICAgICogcGFydCBiZWluZyBvcHRpb25hbC4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGlzIG1ldGhvZCBkb2Vzbid0IGRvIGEgZnVsbCB2YWxpZGF0aW9uIG9mIHRoZSByZXN1bHRpbmcgUU5hbWUuCi0gICAgICogSW4gcGFydGljdWxhciwgaXQgZG9lc24ndCBjaGVjayB0aGF0IHRoZSByZXN1bHRpbmcgbmFtZXNwYWNlIFVSSQotICAgICAqIGlzIGEgbGVnYWwgVVJJIChwZXIgUkZDIDIzOTYgYW5kIFJGQyAyNzMyKSwgbm9yIHRoYXQgdGhlIHJlc3VsdGluZwotICAgICAqIGxvY2FsIHBhcnQgaXMgYSBsZWdhbCBOQ05hbWUgcGVyIHRoZSBYTUwgTmFtZXNwYWNlcyBzcGVjaWZpY2F0aW9uLgotICAgICAqCi0gICAgICogQHBhcmFtIHMgdGhlIHN0cmluZyB0byBiZSBwYXJzZWQKLSAgICAgKiBAdGhyb3dzIGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gSWYgdGhlIHNwZWNpZmllZCBTdHJpbmcgY2Fubm90IGJlIHBhcnNlZCBhcyBhIFFOYW1lCi0gICAgICogQHJldHVybiBRTmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBTdHJpbmcKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFFOYW1lIHZhbHVlT2YoU3RyaW5nIHMpIHsKLQotICAgICAgICBpZiAoKHMgPT0gbnVsbCkgfHwgcy5lcXVhbHMoIiIpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJpbnZhbGlkIFFOYW1lIGxpdGVyYWwiKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzLmNoYXJBdCgwKSA9PSAneycpIHsKLSAgICAgICAgICAgIGludCBpID0gcy5pbmRleE9mKCd9Jyk7Ci0KLSAgICAgICAgICAgIGlmIChpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiaW52YWxpZCBRTmFtZSBsaXRlcmFsIik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpID09IHMubGVuZ3RoKCkgLSAxKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiaW52YWxpZCBRTmFtZSBsaXRlcmFsIik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUU5hbWUocy5zdWJzdHJpbmcoMSwgaSksIHMuc3Vic3RyaW5nKGkgKyAxKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFFOYW1lKHMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIGhhc2ggY29kZSB2YWx1ZSBmb3IgdGhpcyBRTmFtZSBvYmplY3QuIFRoZSBoYXNoIGNvZGUKLSAgICAgKiBpcyBiYXNlZCBvbiBib3RoIHRoZSBsb2NhbFBhcnQgYW5kIG5hbWVzcGFjZVVSSSBwYXJ0cyBvZiB0aGUKLSAgICAgKiBRTmFtZS4gVGhpcyBtZXRob2Qgc2F0aXNmaWVzIHRoZSAgZ2VuZXJhbCBjb250cmFjdCBvZiB0aGUKLSAgICAgKiA8Y29kZT5PYmplY3QuaGFzaENvZGU8L2NvZGU+IG1ldGhvZC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gYSBoYXNoIGNvZGUgdmFsdWUgZm9yIHRoaXMgUW5hbWUgb2JqZWN0Ci0gICAgICovCi0gICAgcHVibGljIGZpbmFsIGludCBoYXNoQ29kZSgpIHsKLSAgICAgICAgcmV0dXJuIG5hbWVzcGFjZVVSSS5oYXNoQ29kZSgpIF4gbG9jYWxQYXJ0Lmhhc2hDb2RlKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRW5zdXJlIHRoYXQgZGVzZXJpYWxpemF0aW9uIHByb3Blcmx5IGludGVybnMgdGhlIHJlc3VsdHMuCi0gICAgICogQHBhcmFtIGluIHRoZSBPYmplY3RJbnB1dFN0cmVhbSB0byBiZSByZWFkCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHJlYWRPYmplY3QoT2JqZWN0SW5wdXRTdHJlYW0gaW4pIHRocm93cwotICAgICAgICAgICAgSU9FeGNlcHRpb24sIENsYXNzTm90Rm91bmRFeGNlcHRpb24gewotICAgICAgICBpbi5kZWZhdWx0UmVhZE9iamVjdCgpOwotCi0gICAgICAgIG5hbWVzcGFjZVVSSSA9IG5hbWVzcGFjZVVSSS5pbnRlcm4oKTsKLSAgICAgICAgbG9jYWxQYXJ0ID0gbG9jYWxQYXJ0LmludGVybigpOwotICAgICAgICBwcmVmaXggPSBwcmVmaXguaW50ZXJuKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWY0MjI5Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcwMCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtOwotCi1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXI7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOwotCi0vKioKLSAqIEEgRmlsdGVyWG1sT2JqZWN0IGRlbGVnYXRlcyB0byBzb21lIG90aGVyIFhtbE9iamVjdCwgd2hpY2ggaXQgY2FuIHVzZSBhcwotICogaXRzIGJhc2ljIHNvdXJjZSBvZiBkYXRhLCBwb3NzaWJseSB0cmFuc2Zvcm1pbmcgdGhlIGRhdGEgYWxvbmcgdGhlIHdheSBvcgotICogcHJvdmlkaW5nIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eS4gVGhlIGNsYXNzIEZpbHRlclhtbE9iamVjdCBpdHNlbGYKLSAqIHNpbXBseSBvdmVycmlkZXMgYWxsIG1ldGhvZHMgb2YgWG1sT2JqZWN0IHdpdGggdmVyc2lvbnMgdGhhdCBwYXNzIGFsbAotICogcmVxdWVzdHMgdG8gdGhlIHVuZGVybHlpbmcgWG1sT2JqZWN0LiBTdWJjbGFzc2VzIG9mIEZpbHRlclhtbE9iamVjdCBtYXkKLSAqIGZ1cnRoZXIgb3ZlcnJpZGUgc29tZSBvZiB0aGVzZSBtZXRob2RzIGFuZCBtYXkgYWxzbyBwcm92aWRlIGFkZGl0aW9uYWwKLSAqIG1ldGhvZHMgYW5kIGZpZWxkcy4KLSAqIDxwPgotICogTm90ZTogaXQgaXMgaW1wb3J0YW50IHRoYXQgRmlsdGVyWG1sT0JqZWN0IGhhcyBubyBzdG9yYWdlIChpLmUuLCBubwotICogbm9uLXRyYW5zaWVudCBmaWVsZHMpLCBiZWNhdXNlIHN1YmNsYXNzZXMgbWF5IGJlIHNlcmlhbGl6YWJsZSBhbmQKLSAqIGFkZGluZyBzdG9yYWdlIHdvdWxkIGJyZWFrIHRoZSBzZXJpYWxpemF0aW9uIGZvcm1hdC4KLSAqLyAKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBGaWx0ZXJYbWxPYmplY3QgaW1wbGVtZW50cyBYbWxPYmplY3QsIFNpbXBsZVZhbHVlCi17Ci0gICAgLyoqCi0gICAgICogVGhpcyBhYnN0cmFjdCBtZXRob2QgaXMgY2FsbGVkIHRvIG9idGFpbiB0aGUgdW5kZXJseWluZyBYbWxPYmplY3QuCi0gICAgICogT3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gc3VwcGx5IG9yIGNvbXB1dGUgdGhlIHdyYXBwZWQgb2JqZWN0LgotICAgICAqIDxwPgotICAgICAqIEV2ZXJ5IG90aGVyIG1ldGhvZCBvZiB0aGlzIGNsYXNzIGRlbGVnYXRlcyB0byB0aGUgb2JqZWN0IHJldHVybmVkCi0gICAgICogZnJvbSB0aGlzIG1ldGhvZC4gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBvYmplY3QgaW1wbGVtZW50cyBhbGwgdGhlCi0gICAgICogbWV0aG9kcyBvZiBib3RoIFhtbE9iamVjdCBhbmQgU2ltcGxlVmFsdWUuCi0gICAgICovIAotICAgIHB1YmxpYyBhYnN0cmFjdCBYbWxPYmplY3QgdW5kZXJseWluZ1htbE9iamVjdCgpOwotCi0gICAgcHVibGljIFNjaGVtYVR5cGUgc2NoZW1hVHlwZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdW5kZXJseWluZ1htbE9iamVjdCgpLnNjaGVtYVR5cGUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdW5kZXJseWluZ1htbE9iamVjdCgpLnZhbGlkYXRlKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGUoWG1sT3B0aW9ucyBvcHRpb25zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHVuZGVybHlpbmdYbWxPYmplY3QoKS52YWxpZGF0ZShvcHRpb25zKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgWG1sT2JqZWN0W10gc2VsZWN0UGF0aChTdHJpbmcgcGF0aCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB1bmRlcmx5aW5nWG1sT2JqZWN0KCkuc2VsZWN0UGF0aChwYXRoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgWG1sT2JqZWN0W10gc2VsZWN0UGF0aChTdHJpbmcgcGF0aCwgWG1sT3B0aW9ucyBvcHRpb25zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHVuZGVybHlpbmdYbWxPYmplY3QoKS5zZWxlY3RQYXRoKHBhdGgsIG9wdGlvbnMpOwotICAgIH0KLQotICAgIHB1YmxpYyBYbWxPYmplY3RbXSBleGVjUXVlcnkoU3RyaW5nIHF1ZXJ5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHVuZGVybHlpbmdYbWxPYmplY3QoKS5leGVjUXVlcnkocXVlcnkpOwotICAgIH0KLQotICAgIHB1YmxpYyBYbWxPYmplY3RbXSBleGVjUXVlcnkoU3RyaW5nIHF1ZXJ5LCBYbWxPcHRpb25zIG9wdGlvbnMpCi0gICAgewotICAgICAgICByZXR1cm4gdW5kZXJseWluZ1htbE9iamVjdCgpLmV4ZWNRdWVyeShxdWVyeSwgb3B0aW9ucyk7Ci0gICAgfQotCi0gICAgcHVibGljIFhtbE9iamVjdCBjaGFuZ2VUeXBlKFNjaGVtYVR5cGUgbmV3VHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB1bmRlcmx5aW5nWG1sT2JqZWN0KCkuY2hhbmdlVHlwZShuZXdUeXBlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc05pbCgpCi0gICAgewotICAgICAgICByZXR1cm4gdW5kZXJseWluZ1htbE9iamVjdCgpLmlzTmlsKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0TmlsKCkKLSAgICB7Ci0gICAgICAgIHVuZGVybHlpbmdYbWxPYmplY3QoKS5zZXROaWwoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0ltbXV0YWJsZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdW5kZXJseWluZ1htbE9iamVjdCgpLmlzSW1tdXRhYmxlKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFhtbE9iamVjdCBzZXQoWG1sT2JqZWN0IHNyY09iaikKLSAgICB7Ci0gICAgICAgIHJldHVybiB1bmRlcmx5aW5nWG1sT2JqZWN0KCkuc2V0KHNyY09iaik7Ci0gICAgfQotCi0gICAgcHVibGljIFhtbE9iamVjdCBjb3B5KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB1bmRlcmx5aW5nWG1sT2JqZWN0KCkuY29weSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHZhbHVlRXF1YWxzKFhtbE9iamVjdCBvYmopCi0gICAgewotICAgICAgICByZXR1cm4gdW5kZXJseWluZ1htbE9iamVjdCgpLnZhbHVlRXF1YWxzKG9iaik7Ci0gICAgfQotCi0gICAgcHVibGljIGludCB2YWx1ZUhhc2hDb2RlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB1bmRlcmx5aW5nWG1sT2JqZWN0KCkudmFsdWVIYXNoQ29kZSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgY29tcGFyZVRvKE9iamVjdCBvYmopCi0gICAgewotICAgICAgICByZXR1cm4gdW5kZXJseWluZ1htbE9iamVjdCgpLmNvbXBhcmVUbyhvYmopOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgY29tcGFyZVZhbHVlKFhtbE9iamVjdCBvYmopCi0gICAgewotICAgICAgICByZXR1cm4gdW5kZXJseWluZ1htbE9iamVjdCgpLmNvbXBhcmVWYWx1ZShvYmopOwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3QgbW9uaXRvcigpCi0gICAgewotICAgICAgICByZXR1cm4gdW5kZXJseWluZ1htbE9iamVjdCgpLm1vbml0b3IoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgWG1sRG9jdW1lbnRQcm9wZXJ0aWVzIGRvY3VtZW50UHJvcGVydGllcygpCi0gICAgewotICAgICAgICByZXR1cm4gdW5kZXJseWluZ1htbE9iamVjdCgpLmRvY3VtZW50UHJvcGVydGllcygpOwotICAgIH0KLQotICAgIHB1YmxpYyBYbWxDdXJzb3IgbmV3Q3Vyc29yKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB1bmRlcmx5aW5nWG1sT2JqZWN0KCkubmV3Q3Vyc29yKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFhNTElucHV0U3RyZWFtIG5ld1hNTElucHV0U3RyZWFtKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB1bmRlcmx5aW5nWG1sT2JqZWN0KCkubmV3WE1MSW5wdXRTdHJlYW0oKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgWE1MU3RyZWFtUmVhZGVyIG5ld1hNTFN0cmVhbVJlYWRlcigpCi0gICAgewotICAgICAgICByZXR1cm4gdW5kZXJseWluZ1htbE9iamVjdCgpLm5ld1hNTFN0cmVhbVJlYWRlcigpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgU3RyaW5nIHhtbFRleHQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHVuZGVybHlpbmdYbWxPYmplY3QoKS54bWxUZXh0KCk7Ci0gICAgfQotCi0gICAgcHVibGljIElucHV0U3RyZWFtIG5ld0lucHV0U3RyZWFtKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB1bmRlcmx5aW5nWG1sT2JqZWN0KCkubmV3SW5wdXRTdHJlYW0oKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUmVhZGVyIG5ld1JlYWRlcigpCi0gICAgewotICAgICAgICByZXR1cm4gdW5kZXJseWluZ1htbE9iamVjdCgpLm5ld1JlYWRlcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBOb2RlIG5ld0RvbU5vZGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHVuZGVybHlpbmdYbWxPYmplY3QoKS5uZXdEb21Ob2RlKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2F2ZShDb250ZW50SGFuZGxlciBjaCwgTGV4aWNhbEhhbmRsZXIgbGgpIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHVuZGVybHlpbmdYbWxPYmplY3QoKS5zYXZlKGNoLCBsaCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2F2ZShGaWxlIGZpbGUpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgdW5kZXJseWluZ1htbE9iamVjdCgpLnNhdmUoZmlsZSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2F2ZShPdXRwdXRTdHJlYW0gb3MpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgdW5kZXJseWluZ1htbE9iamVjdCgpLnNhdmUob3MpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNhdmUoV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgdW5kZXJseWluZ1htbE9iamVjdCgpLnNhdmUodyk7Ci0gICAgfQotCi0gICAgcHVibGljIFhNTElucHV0U3RyZWFtIG5ld1hNTElucHV0U3RyZWFtKFhtbE9wdGlvbnMgb3B0aW9ucykKLSAgICB7Ci0gICAgICAgIHJldHVybiB1bmRlcmx5aW5nWG1sT2JqZWN0KCkubmV3WE1MSW5wdXRTdHJlYW0ob3B0aW9ucyk7Ci0gICAgfQotCi0gICAgcHVibGljIFhNTFN0cmVhbVJlYWRlciBuZXdYTUxTdHJlYW1SZWFkZXIoWG1sT3B0aW9ucyBvcHRpb25zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHVuZGVybHlpbmdYbWxPYmplY3QoKS5uZXdYTUxTdHJlYW1SZWFkZXIob3B0aW9ucyk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBTdHJpbmcgeG1sVGV4dChYbWxPcHRpb25zIG9wdGlvbnMpCi0gICAgewotICAgICAgICByZXR1cm4gdW5kZXJseWluZ1htbE9iamVjdCgpLnhtbFRleHQob3B0aW9ucyk7Ci0gICAgfQotCi0gICAgcHVibGljIElucHV0U3RyZWFtIG5ld0lucHV0U3RyZWFtKFhtbE9wdGlvbnMgb3B0aW9ucykKLSAgICB7Ci0gICAgICAgIHJldHVybiB1bmRlcmx5aW5nWG1sT2JqZWN0KCkubmV3SW5wdXRTdHJlYW0ob3B0aW9ucyk7Ci0gICAgfQotCi0gICAgcHVibGljIFJlYWRlciBuZXdSZWFkZXIoWG1sT3B0aW9ucyBvcHRpb25zKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHVuZGVybHlpbmdYbWxPYmplY3QoKS5uZXdSZWFkZXIob3B0aW9ucyk7Ci0gICAgfQotCi0gICAgcHVibGljIE5vZGUgbmV3RG9tTm9kZShYbWxPcHRpb25zIG9wdGlvbnMpCi0gICAgewotICAgICAgICByZXR1cm4gdW5kZXJseWluZ1htbE9iamVjdCgpLm5ld0RvbU5vZGUob3B0aW9ucyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2F2ZShDb250ZW50SGFuZGxlciBjaCwgTGV4aWNhbEhhbmRsZXIgbGgsIFhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgdW5kZXJseWluZ1htbE9iamVjdCgpLnNhdmUoY2gsIGxoLCBvcHRpb25zKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzYXZlKEZpbGUgZmlsZSwgWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHVuZGVybHlpbmdYbWxPYmplY3QoKS5zYXZlKGZpbGUsIG9wdGlvbnMpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNhdmUoT3V0cHV0U3RyZWFtIG9zLCBYbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgdW5kZXJseWluZ1htbE9iamVjdCgpLnNhdmUob3MsIG9wdGlvbnMpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNhdmUoV3JpdGVyIHcsIFhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICB1bmRlcmx5aW5nWG1sT2JqZWN0KCkuc2F2ZSh3LCBvcHRpb25zKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2NoZW1hVHlwZSBpbnN0YW5jZVR5cGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5pbnN0YW5jZVR5cGUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHN0cmluZ1ZhbHVlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkuc3RyaW5nVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBib29sZWFuVmFsdWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5ib29sZWFuVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYnl0ZSBieXRlVmFsdWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5ieXRlVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc2hvcnQgc2hvcnRWYWx1ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gKChTaW1wbGVWYWx1ZSl1bmRlcmx5aW5nWG1sT2JqZWN0KCkpLnNob3J0VmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGludFZhbHVlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkuaW50VmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgbG9uZyBsb25nVmFsdWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5sb25nVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQmlnSW50ZWdlciBiaWdJbnRlZ2VyVmFsdWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5iaWdJbnRlZ2VyVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQmlnRGVjaW1hbCBiaWdEZWNpbWFsVmFsdWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5iaWdEZWNpbWFsVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmxvYXQgZmxvYXRWYWx1ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gKChTaW1wbGVWYWx1ZSl1bmRlcmx5aW5nWG1sT2JqZWN0KCkpLmZsb2F0VmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZG91YmxlIGRvdWJsZVZhbHVlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkuZG91YmxlVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYnl0ZVtdIGJ5dGVBcnJheVZhbHVlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkuYnl0ZUFycmF5VmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nRW51bUFic3RyYWN0QmFzZSBlbnVtVmFsdWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5lbnVtVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ2FsZW5kYXIgY2FsZW5kYXJWYWx1ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gKChTaW1wbGVWYWx1ZSl1bmRlcmx5aW5nWG1sT2JqZWN0KCkpLmNhbGVuZGFyVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRGF0ZSBkYXRlVmFsdWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5kYXRlVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgR0RhdGUgZ0RhdGVWYWx1ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gKChTaW1wbGVWYWx1ZSl1bmRlcmx5aW5nWG1sT2JqZWN0KCkpLmdEYXRlVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgR0R1cmF0aW9uIGdEdXJhdGlvblZhbHVlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkuZ0R1cmF0aW9uVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUU5hbWUgcU5hbWVWYWx1ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gKChTaW1wbGVWYWx1ZSl1bmRlcmx5aW5nWG1sT2JqZWN0KCkpLnFOYW1lVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTGlzdCBsaXN0VmFsdWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5saXN0VmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTGlzdCB4bGlzdFZhbHVlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkueGxpc3RWYWx1ZSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3Qgb2JqZWN0VmFsdWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5vYmplY3RWYWx1ZSgpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldChTdHJpbmcgb2JqKQotICAgIHsKLSAgICAgICAgKChTaW1wbGVWYWx1ZSl1bmRlcmx5aW5nWG1sT2JqZWN0KCkpLnNldChvYmopOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldChib29sZWFuIHYpCi0gICAgewotICAgICAgICAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkuc2V0KHYpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldChieXRlIHYpCi0gICAgewotICAgICAgICAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkuc2V0KHYpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldChzaG9ydCB2KQotICAgIHsKLSAgICAgICAgKChTaW1wbGVWYWx1ZSl1bmRlcmx5aW5nWG1sT2JqZWN0KCkpLnNldCh2KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXQoaW50IHYpCi0gICAgewotICAgICAgICAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkuc2V0KHYpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldChsb25nIHYpCi0gICAgewotICAgICAgICAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkuc2V0KHYpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldChCaWdJbnRlZ2VyIG9iaikKLSAgICB7Ci0gICAgICAgICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5zZXQob2JqKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXQoQmlnRGVjaW1hbCBvYmopCi0gICAgewotICAgICAgICAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkuc2V0KG9iaik7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0KGZsb2F0IHYpCi0gICAgewotICAgICAgICAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkuc2V0KHYpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldChkb3VibGUgdikKLSAgICB7Ci0gICAgICAgICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5zZXQodik7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0KGJ5dGVbXSBvYmopCi0gICAgewotICAgICAgICAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkuc2V0KG9iaik7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0KFN0cmluZ0VudW1BYnN0cmFjdEJhc2Ugb2JqKQotICAgIHsKLSAgICAgICAgKChTaW1wbGVWYWx1ZSl1bmRlcmx5aW5nWG1sT2JqZWN0KCkpLnNldChvYmopOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldChDYWxlbmRhciBvYmopCi0gICAgewotICAgICAgICAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkuc2V0KG9iaik7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0KERhdGUgb2JqKQotICAgIHsKLSAgICAgICAgKChTaW1wbGVWYWx1ZSl1bmRlcmx5aW5nWG1sT2JqZWN0KCkpLnNldChvYmopOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldChHRGF0ZVNwZWNpZmljYXRpb24gb2JqKQotICAgIHsKLSAgICAgICAgKChTaW1wbGVWYWx1ZSl1bmRlcmx5aW5nWG1sT2JqZWN0KCkpLnNldChvYmopOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldChHRHVyYXRpb25TcGVjaWZpY2F0aW9uIG9iaikKLSAgICB7Ci0gICAgICAgICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5zZXQob2JqKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXQoUU5hbWUgb2JqKQotICAgIHsKLSAgICAgICAgKChTaW1wbGVWYWx1ZSl1bmRlcmx5aW5nWG1sT2JqZWN0KCkpLnNldChvYmopOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldChMaXN0IG9iaikKLSAgICB7Ci0gICAgICAgICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5zZXQob2JqKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFN0cmluZ1ZhbHVlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkuZ2V0U3RyaW5nVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBnZXRCb29sZWFuVmFsdWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5nZXRCb29sZWFuVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYnl0ZSBnZXRCeXRlVmFsdWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5nZXRCeXRlVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc2hvcnQgZ2V0U2hvcnRWYWx1ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gKChTaW1wbGVWYWx1ZSl1bmRlcmx5aW5nWG1sT2JqZWN0KCkpLmdldFNob3J0VmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldEludFZhbHVlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkuZ2V0SW50VmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgbG9uZyBnZXRMb25nVmFsdWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5nZXRMb25nVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQmlnSW50ZWdlciBnZXRCaWdJbnRlZ2VyVmFsdWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5nZXRCaWdJbnRlZ2VyVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQmlnRGVjaW1hbCBnZXRCaWdEZWNpbWFsVmFsdWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5nZXRCaWdEZWNpbWFsVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmxvYXQgZ2V0RmxvYXRWYWx1ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gKChTaW1wbGVWYWx1ZSl1bmRlcmx5aW5nWG1sT2JqZWN0KCkpLmdldEZsb2F0VmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZG91YmxlIGdldERvdWJsZVZhbHVlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkuZ2V0RG91YmxlVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYnl0ZVtdIGdldEJ5dGVBcnJheVZhbHVlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkuZ2V0Qnl0ZUFycmF5VmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nRW51bUFic3RyYWN0QmFzZSBnZXRFbnVtVmFsdWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5nZXRFbnVtVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ2FsZW5kYXIgZ2V0Q2FsZW5kYXJWYWx1ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gKChTaW1wbGVWYWx1ZSl1bmRlcmx5aW5nWG1sT2JqZWN0KCkpLmdldENhbGVuZGFyVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgRGF0ZSBnZXREYXRlVmFsdWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5nZXREYXRlVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgR0RhdGUgZ2V0R0RhdGVWYWx1ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gKChTaW1wbGVWYWx1ZSl1bmRlcmx5aW5nWG1sT2JqZWN0KCkpLmdldEdEYXRlVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgR0R1cmF0aW9uIGdldEdEdXJhdGlvblZhbHVlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkuZ2V0R0R1cmF0aW9uVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUU5hbWUgZ2V0UU5hbWVWYWx1ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gKChTaW1wbGVWYWx1ZSl1bmRlcmx5aW5nWG1sT2JqZWN0KCkpLmdldFFOYW1lVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTGlzdCBnZXRMaXN0VmFsdWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5nZXRMaXN0VmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTGlzdCB4Z2V0TGlzdFZhbHVlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkueGdldExpc3RWYWx1ZSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3QgZ2V0T2JqZWN0VmFsdWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5nZXRPYmplY3RWYWx1ZSgpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFN0cmluZ1ZhbHVlKFN0cmluZyBvYmopCi0gICAgewotICAgICAgICAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkuc2V0U3RyaW5nVmFsdWUob2JqKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRCb29sZWFuVmFsdWUoYm9vbGVhbiB2KQotICAgIHsKLSAgICAgICAgKChTaW1wbGVWYWx1ZSl1bmRlcmx5aW5nWG1sT2JqZWN0KCkpLnNldEJvb2xlYW5WYWx1ZSh2KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRCeXRlVmFsdWUoYnl0ZSB2KQotICAgIHsKLSAgICAgICAgKChTaW1wbGVWYWx1ZSl1bmRlcmx5aW5nWG1sT2JqZWN0KCkpLnNldEJ5dGVWYWx1ZSh2KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRTaG9ydFZhbHVlKHNob3J0IHYpCi0gICAgewotICAgICAgICAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkuc2V0U2hvcnRWYWx1ZSh2KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRJbnRWYWx1ZShpbnQgdikKLSAgICB7Ci0gICAgICAgICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5zZXRJbnRWYWx1ZSh2KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRMb25nVmFsdWUobG9uZyB2KQotICAgIHsKLSAgICAgICAgKChTaW1wbGVWYWx1ZSl1bmRlcmx5aW5nWG1sT2JqZWN0KCkpLnNldExvbmdWYWx1ZSh2KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRCaWdJbnRlZ2VyVmFsdWUoQmlnSW50ZWdlciBvYmopCi0gICAgewotICAgICAgICAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkuc2V0QmlnSW50ZWdlclZhbHVlKG9iaik7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0QmlnRGVjaW1hbFZhbHVlKEJpZ0RlY2ltYWwgb2JqKQotICAgIHsKLSAgICAgICAgKChTaW1wbGVWYWx1ZSl1bmRlcmx5aW5nWG1sT2JqZWN0KCkpLnNldEJpZ0RlY2ltYWxWYWx1ZShvYmopOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEZsb2F0VmFsdWUoZmxvYXQgdikKLSAgICB7Ci0gICAgICAgICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5zZXRGbG9hdFZhbHVlKHYpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldERvdWJsZVZhbHVlKGRvdWJsZSB2KQotICAgIHsKLSAgICAgICAgKChTaW1wbGVWYWx1ZSl1bmRlcmx5aW5nWG1sT2JqZWN0KCkpLnNldERvdWJsZVZhbHVlKHYpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEJ5dGVBcnJheVZhbHVlKGJ5dGVbXSBvYmopCi0gICAgewotICAgICAgICAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkuc2V0Qnl0ZUFycmF5VmFsdWUob2JqKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRFbnVtVmFsdWUoU3RyaW5nRW51bUFic3RyYWN0QmFzZSBvYmopCi0gICAgewotICAgICAgICAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkuc2V0RW51bVZhbHVlKG9iaik7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0Q2FsZW5kYXJWYWx1ZShDYWxlbmRhciBvYmopCi0gICAgewotICAgICAgICAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkuc2V0Q2FsZW5kYXJWYWx1ZShvYmopOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldERhdGVWYWx1ZShEYXRlIG9iaikKLSAgICB7Ci0gICAgICAgICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5zZXREYXRlVmFsdWUob2JqKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRHRGF0ZVZhbHVlKEdEYXRlIG9iaikKLSAgICB7Ci0gICAgICAgICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5zZXRHRGF0ZVZhbHVlKG9iaik7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0R0R1cmF0aW9uVmFsdWUoR0R1cmF0aW9uIG9iaikKLSAgICB7Ci0gICAgICAgICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5zZXRHRHVyYXRpb25WYWx1ZShvYmopOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFFOYW1lVmFsdWUoUU5hbWUgb2JqKQotICAgIHsKLSAgICAgICAgKChTaW1wbGVWYWx1ZSl1bmRlcmx5aW5nWG1sT2JqZWN0KCkpLnNldFFOYW1lVmFsdWUob2JqKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRMaXN0VmFsdWUoTGlzdCBvYmopCi0gICAgewotICAgICAgICAoKFNpbXBsZVZhbHVlKXVuZGVybHlpbmdYbWxPYmplY3QoKSkuc2V0TGlzdFZhbHVlKG9iaik7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0T2JqZWN0VmFsdWUoT2JqZWN0IG9iaikKLSAgICB7Ci0gICAgICAgICgoU2ltcGxlVmFsdWUpdW5kZXJseWluZ1htbE9iamVjdCgpKS5zZXRPYmplY3RWYWx1ZShvYmopOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIG9iamVjdFNldChPYmplY3Qgb2JqKQotICAgIHsKLSAgICAgICAgKChTaW1wbGVWYWx1ZSl1bmRlcmx5aW5nWG1sT2JqZWN0KCkpLm9iamVjdFNldChvYmopOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNTBiY2IuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTA0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLWltcG9ydCBqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLlRpbWVab25lOwotCi0vKioKLSAqIFJlcHJlc2VudHMgYW4gWE1MIFNjaGVtYS1jb21wYXRpYmxlIEdyZWdvcmlhbiBkYXRlLgotICogPHA+Ci0gKiBUaGVyZSBhcmUgbWFueSBkYXRlIHR5cGVzIGluIFhNTCBTY2hlbWEsIGFuZCB0aGlzIHR5cGUKLSAqIHJlcHJlc2VudHMgdGhlIG5hdHVyYWwgdW5pb24gb2YgYWxsIHRob3NlIHR5cGVzLiAgQSBHRGF0ZQotICogY2FuIGhvbGQgYW55IHN1YnNldCBvZiBkYXRlIGZpZWxkcyAoWWVhciwgTW9udGgsIERheSwgVGltZSwKLSAqIFRpbWV6b25lLCBvciBzb21lIGNvbWJpbmF0aW9uKS4gV2hlcmV2ZXIgdGhlIHNwZWNpZmljYXRpb24KLSAqIHByb3ZpZGVzIGd1aWRhbmNlLCB0aGUgZ3VpZGVsaW5lcyBpbiB0aGUKLSAqIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8iPlhNTCBTY2hlbWEgMS4wIHNwZWNpZmljYXRpb248L2E+Ci0gKiAocGx1cyA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNS94bWxzY2hlbWEtZXJyYXRhIj5wdWJsaXNoZWQgZXJyYXRhPC9hPikgYXJlIGZvbGxvd2VkLgotICogPHA+Ci0gKiBJbnN0YW5jZXMgbWF5IHNlcGFyYXRlbHkgaGF2ZSB2YWx1ZXMgb3Igbm8gdmFsdWVzIGZvcgotICogdGhlIHllYXIsIG1vbnRoLCBkYXktb2YtbW9udGgsIGFuZCB0aW1lLW9mLWRheS4gTm90IGFsbAotICogb3BlcmF0aW9ucyBhcmUgbWVhbmluZ2Z1bCBvbiBhbGwgY29tYmluYXRpb25zLgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgR0RhdGUgaW1wbGVtZW50cyBHRGF0ZVNwZWNpZmljYXRpb24sIGphdmEuaW8uU2VyaWFsaXphYmxlCi17Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0gICAgCi0gICAgLy8gZm9yIGZhc3QgZXF1YWxpdHkgY29tcGFyaXNvbiwgaGFzaGluZywgYW5kIHNlcmlhbGl6YXRpb24KLSAgICBwcml2YXRlIHRyYW5zaWVudCBTdHJpbmcgX2Nhbm9uaWNhbFN0cmluZzsKLSAgICBwcml2YXRlIHRyYW5zaWVudCBTdHJpbmcgX3N0cmluZzsKLQotICAgIHByaXZhdGUgaW50IF9iaXRzOwotICAgIHByaXZhdGUgaW50IF9DWTsKLSAgICBwcml2YXRlIGludCBfTTsKLSAgICBwcml2YXRlIGludCBfRDsKLSAgICBwcml2YXRlIGludCBfaDsKLSAgICBwcml2YXRlIGludCBfbTsKLSAgICBwcml2YXRlIGludCBfczsKLSAgICBwcml2YXRlIEJpZ0RlY2ltYWwgX2ZzOwotICAgIHByaXZhdGUgaW50IF90enNpZ247Ci0gICAgcHJpdmF0ZSBpbnQgX3R6aDsKLSAgICBwcml2YXRlIGludCBfdHptOwotICAgIAotICAgIAotICAgIC8qIHBhY2thZ2UgKi8gc3RhdGljIGZpbmFsIEJpZ0RlY2ltYWwgX3plcm8gPSBCaWdEZWNpbWFsLnZhbHVlT2YoMCk7Ci0gICAgLyogcGFja2FnZSAqLyBzdGF0aWMgZmluYWwgQmlnRGVjaW1hbCBfb25lID0gQmlnRGVjaW1hbC52YWx1ZU9mKDEpOwotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhIEdEYXRlIGJhc2VkIG9uIGEgbGV4aWNhbCByZXByZXNlbnRhdGlvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgR0RhdGUoQ2hhclNlcXVlbmNlIHN0cmluZykKLSAgICB7Ci0gICAgICAgIC8vIGZpcnN0IHRyaW0gWE1MIHdoaXRlc3BhY2UKLSAgICAgICAgaW50IGxlbiA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICAgICAgaW50IHN0YXJ0ID0gMDsKLSAgICAgICAgd2hpbGUgKGxlbiA+IDAgJiYgaXNTcGFjZShzdHJpbmcuY2hhckF0KGxlbiAtIDEpKSkKLSAgICAgICAgICAgIGxlbiAtPSAxOwotICAgICAgICB3aGlsZSAoc3RhcnQgPCBsZW4gJiYgaXNTcGFjZShzdHJpbmcuY2hhckF0KHN0YXJ0KSkpCi0gICAgICAgICAgICBzdGFydCArPSAxOwotCi0gICAgICAgIC8vIHBpY2sgb3B0aW9uYWwgdGltZXpvbmUgb2ZmIHRoZSBlbmQKLSAgICAgICAgaWYgKGxlbiAtIHN0YXJ0ID49IDEgJiYgc3RyaW5nLmNoYXJBdChsZW4gLSAxKSA9PSAnWicpCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9iaXRzIHw9IEhBU19USU1FWk9ORTsKLSAgICAgICAgICAgIGxlbiAtPSAxOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGxlbiAtIHN0YXJ0ID49IDYpCi0gICAgICAgIHRpbWV6b25lOiB7Ci0gICAgICAgICAgICBpbnQgdHpzaWduOwotICAgICAgICAgICAgaW50IHR6aG91cjsKLSAgICAgICAgICAgIGludCB0em1pbnV0ZTsKLQotICAgICAgICAgICAgaWYgKHN0cmluZy5jaGFyQXQobGVuIC0gMykgIT0gJzonKQotICAgICAgICAgICAgICAgIGJyZWFrIHRpbWV6b25lOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHN0cmluZy5jaGFyQXQobGVuIC0gNikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSAnLSc6Ci0gICAgICAgICAgICAgICAgICAgIHR6c2lnbiA9IC0xOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlICcrJzoKLSAgICAgICAgICAgICAgICAgICAgdHpzaWduID0gMTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsgdGltZXpvbmU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHR6aG91ciA9IHR3b0RpZ2l0KHN0cmluZywgbGVuIC0gNSk7Ci0gICAgICAgICAgICB0em1pbnV0ZSA9IHR3b0RpZ2l0KHN0cmluZywgbGVuIC0gMik7Ci0gICAgICAgICAgICBpZiAodHpob3VyID4gMTQpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigidGltZSB6b25lIGhvdXIgbXVzdCBiZSB0d28gZGlnaXRzIGJldHdlZW4gLTE0IGFuZCArMTQiKTsKLSAgICAgICAgICAgIGlmICh0em1pbnV0ZSA+IDU5KQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInRpbWUgem9uZSBtaW51dGUgbXVzdCBiZSB0d28gZGlnaXRzIGJldHdlZW4gMDAgYW5kIDU5Iik7Ci0gICAgICAgICAgICBfYml0cyB8PSBIQVNfVElNRVpPTkU7Ci0gICAgICAgICAgICBfdHpzaWduID0gdHpzaWduOwotICAgICAgICAgICAgX3R6aCA9IHR6aG91cjsKLSAgICAgICAgICAgIF90em0gPSB0em1pbnV0ZTsKLSAgICAgICAgICAgIGxlbiAtPSA2OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gcGljayBkYXRlIGZpZWxkcyBvZmYgdGhlIGJlZ2lubmluZyBpZiBpdCBkb2Vzbid0IGxvb2sgbGlrZSBhIHRpbWUKLSAgICAgICAgaWYgKHN0YXJ0IDwgbGVuICYmIChzdGFydCArIDIgPj0gbGVuIHx8IHN0cmluZy5jaGFyQXQoc3RhcnQgKyAyKSAhPSAnOicpKQotICAgICAgICBzY2FuZGF0ZToKLSAgICAgICAgewotICAgICAgICAgICAgLy8gcGFyc2UgeWVhciBzaWduCi0gICAgICAgICAgICBib29sZWFuIG5lZ3llYXIgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChzdGFydCA8IGxlbiAmJiBzdHJpbmcuY2hhckF0KHN0YXJ0KSA9PSAnLScpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbmVneWVhciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgc3RhcnQgKz0gMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gc2NhbiB5ZWFyIGRpZ2l0cwotICAgICAgICAgICAgaW50IHZhbHVlID0gMDsKLSAgICAgICAgICAgIGludCBkaWdpdHMgPSAtc3RhcnQ7Ci0gICAgICAgICAgICBjaGFyIGNoOwotICAgICAgICAgICAgZm9yICg7OykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjaCA9IHN0YXJ0IDwgbGVuID8gc3RyaW5nLmNoYXJBdChzdGFydCkgOiAnXDAnOwotICAgICAgICAgICAgICAgIGlmICghaXNEaWdpdChjaCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKiAxMCArIGRpZ2l0VmFsKGNoKTsKLSAgICAgICAgICAgICAgICBzdGFydCArPSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGlnaXRzICs9IHN0YXJ0OwotICAgICAgICAgICAgaWYgKGRpZ2l0cyA+IDYpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigieWVhciB0b28gbG9uZyAodXAgdG8gNiBkaWdpdHMpIik7Ci0gICAgICAgICAgICBlbHNlIGlmIChkaWdpdHMgPj0gNCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfYml0cyB8PSBIQVNfWUVBUjsKLSAgICAgICAgICAgICAgICBfQ1kgPSAgbmVneWVhciA/IC12YWx1ZSA6IHZhbHVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZGlnaXRzID4gMCkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ5ZWFyIG11c3QgYmUgZm91ciBkaWdpdHMgKG1heSBwYWQgd2l0aCB6ZXJvZXMsIGUuZy4sIDA1NjApIik7Ci0KLSAgICAgICAgICAgIC8vIGh5cGhlbiBpbnRyb2R1Y2VzIGEgbW9udGgKLSAgICAgICAgICAgIGlmIChjaCAhPSAnLScpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG5lZ3llYXIgJiYgIWhhc1llYXIoKSkKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOyAvLyBhIHNpbmdsZSBtaW51cwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsgc2NhbmRhdGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGFydCArPSAxOwotCi0gICAgICAgICAgICAvLyB0d28tZGlnaXQgbW9udGgKLSAgICAgICAgICAgIGlmIChsZW4gLSBzdGFydCA+PSAyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhbHVlID0gdHdvRGlnaXQoc3RyaW5nLCBzdGFydCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlID49IDEgJiYgdmFsdWUgPD0gMTIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBfYml0cyB8PSBIQVNfTU9OVEg7Ci0gICAgICAgICAgICAgICAgICAgIF9NID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0ICs9IDI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBoeXBoZW4gaW50cm9kdWNlcyBhIGRheQotICAgICAgICAgICAgY2ggPSBzdGFydCA8IGxlbiA/IHN0cmluZy5jaGFyQXQoc3RhcnQpIDogJ1wwJzsKLSAgICAgICAgICAgIGlmIChjaCAhPSAnLScpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFoYXNNb250aCgpKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7IC8vIG1pbnVzIGFmdGVyIGEgeWVhcgotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsgc2NhbmRhdGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGFydCArPSAxOwotCi0gICAgICAgICAgICAvLyB0d28tZGlnaXQgZGF5Ci0gICAgICAgICAgICBpZiAobGVuIC0gc3RhcnQgPj0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHR3b0RpZ2l0KHN0cmluZywgc3RhcnQpOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+PSAxICYmIHZhbHVlIDw9IDMxKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgX2JpdHMgfD0gSEFTX0RBWTsKLSAgICAgICAgICAgICAgICAgICAgX0QgPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnQgKz0gMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghaGFzRGF5KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gZXJyb3IgaW4gdGhlIG9yaWdpbmFsIHNjaGVtYSBzcGVjIHBlcm1pdHMgYW4gZXh0cmEgJy0nIGhlcmUKLSAgICAgICAgICAgICAgICBpZiAoaGFzTW9udGgoKSAmJiAhaGFzWWVhcigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2ggPSBzdGFydCA8IGxlbiA/IHN0cmluZy5jaGFyQXQoc3RhcnQpIDogJ1wwJzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICctJykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgKz0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHNjYW5kYXRlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsgLy8gbWludXMgYWZ0ZXIgYSBtb250aAotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gdGltZQotICAgICAgICBpZiAoc3RhcnQgPCBsZW4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChoYXNZZWFyKCkgfHwgaGFzTW9udGgoKSB8fCBoYXNEYXkoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RyaW5nLmNoYXJBdChzdGFydCkgIT0gJ1QnKQotICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImRhdGUgYW5kIHRpbWUgbXVzdCBiZSBzZXBhcmF0ZWQgYnkgJ1QnIik7Ci0gICAgICAgICAgICAgICAgc3RhcnQgKz0gMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGxlbiA8IHN0YXJ0ICsgOCB8fCBzdHJpbmcuY2hhckF0KHN0YXJ0ICsgMikgIT0gJzonIHx8IHN0cmluZy5jaGFyQXQoc3RhcnQgKyA1KSAhPSAnOicpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOwotCi0gICAgICAgICAgICBpbnQgaCA9IHR3b0RpZ2l0KHN0cmluZywgc3RhcnQpOwotICAgICAgICAgICAgaWYgKGggPj0gMjQpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiaG91ciBtdXN0IGJlIGJldHdlZW4gMDAgYW5kIDIzIik7Ci0gICAgICAgICAgICBpbnQgbSA9IHR3b0RpZ2l0KHN0cmluZywgc3RhcnQgKyAzKTsKLSAgICAgICAgICAgIGlmIChtID49IDYwKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm1pbnV0ZSBtdXN0IGJlIGJldHdlZW4gMDAgYW5kIDU5Iik7Ci0gICAgICAgICAgICBpbnQgcyA9IHR3b0RpZ2l0KHN0cmluZywgc3RhcnQgKyA2KTsKLSAgICAgICAgICAgIGlmIChzID49IDYwKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInNlY29uZCBtdXN0IGJlIGJldHdlZW4gMDAgYW5kIDU5Iik7Ci0KLSAgICAgICAgICAgIHN0YXJ0ICs9IDg7Ci0KLSAgICAgICAgICAgIEJpZ0RlY2ltYWwgZnMgPSBfemVybzsKLSAgICAgICAgICAgIGlmIChzdGFydCA8IGxlbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoc3RyaW5nLmNoYXJBdChzdGFydCkgIT0gJy4nKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXJ0ICsgMSA8IGxlbikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSBzdGFydCArIDE7IGkgPCBsZW47IGkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0RpZ2l0KHN0cmluZy5jaGFyQXQoaSkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZnMgPSBuZXcgQmlnRGVjaW1hbChzdHJpbmcuc3ViU2VxdWVuY2Uoc3RhcnQsIGxlbikudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKFRocm93YWJsZSBlKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIF9iaXRzIHw9IEhBU19USU1FOwotICAgICAgICAgICAgX2ggPSBoOwotICAgICAgICAgICAgX20gPSBtOwotICAgICAgICAgICAgX3MgPSBzOwotICAgICAgICAgICAgX2ZzID0gZnM7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImludmFsaWQgZGF0ZSIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYSBHRGF0ZSB3aXRoIHRoZSBzcGVjaWZpZWQgeWVhciwgbW9udGgsIGRheSwKLSAgICAgKiBob3VycywgbWludXRlcywgc2Vjb25kcywgYW5kIG9wdGlvbmFsIGZyYWN0aW9uYWwgc2Vjb25kcywgaW4KLSAgICAgKiBhbiB1bnNwZWNpZmllZCB0aW1lem9uZS4KLSAgICAgKiA8cD4KLSAgICAgKiBOb3RlIHRoYXQgYnkgbm90IHNwZWNpZnlpbmcgdGhlIHRpbWV6b25lIHRoZSBHRGF0ZQotICAgICAqIGJlY29tZXMgcGFydGlhbGx5IHVub3JkZXJlZCB3aXRoIHJlc3BlY3QgdG8gdGltZXMgdGhhdAotICAgICAqIGRvIGhhdmUgYSBzcGVjaWZpZWQgdGltZXpvbmUuCi0gICAgICovCi0gICAgcHVibGljIEdEYXRlKAotICAgICAgICAgICAgaW50IHllYXIsCi0gICAgICAgICAgICBpbnQgbW9udGgsCi0gICAgICAgICAgICBpbnQgZGF5LAotICAgICAgICAgICAgaW50IGhvdXIsCi0gICAgICAgICAgICBpbnQgbWludXRlLAotICAgICAgICAgICAgaW50IHNlY29uZCwKLSAgICAgICAgICAgIEJpZ0RlY2ltYWwgZnJhY3Rpb24pCi0gICAgewotICAgICAgICBfYml0cyA9IEhBU19ZRUFSIHwgSEFTX01PTlRIIHwgSEFTX0RBWSB8IEhBU19USU1FOwotCi0gICAgICAgIF9DWSA9IHllYXI7Ci0gICAgICAgIF9NID0gbW9udGg7Ci0gICAgICAgIF9EID0gZGF5OwotICAgICAgICBfaCA9IGhvdXI7Ci0gICAgICAgIF9tID0gbWludXRlOwotICAgICAgICBfcyA9IHNlY29uZDsKLSAgICAgICAgX2ZzID0gZnJhY3Rpb24gPT0gbnVsbCA/IF96ZXJvIDogZnJhY3Rpb247Ci0KLSAgICAgICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhbiBhYnNvbHV0ZSBHRGF0ZSB3aXRoIHRoZSBzcGVjaWZpZWQgeWVhciwKLSAgICAgKiBtb250aCwgZGF5LCBob3VycywgbWludXRlcywgc2Vjb25kcywgYW5kIG9wdGlvbmFsIGZyYWN0aW9uYWwKLSAgICAgKiBzZWNvbmRzLCBhbmQgaW4gdGhlIHRpbWV6b25lIHNwZWNpZmllZC4KLSAgICAgKiA8cD4KLSAgICAgKiBJZiB5b3Ugd2lzaCB0byBoYXZlIGEgdGltZSBvciBkYXRlIHRoYXQgaXNuJ3QgaW4gYSBzcGVjaWZpZWQgdGltZXpvbmUsCi0gICAgICogdGhlbiB1c2UgdGhlIGNvbnN0cnVjdG9yIHRoYXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgdGltZXpvbmUgYXJndW1lbnRzLgotICAgICAqLwotICAgIHB1YmxpYyBHRGF0ZSgKLSAgICAgICAgICAgIGludCB5ZWFyLAotICAgICAgICAgICAgaW50IG1vbnRoLAotICAgICAgICAgICAgaW50IGRheSwKLSAgICAgICAgICAgIGludCBob3VyLAotICAgICAgICAgICAgaW50IG1pbnV0ZSwKLSAgICAgICAgICAgIGludCBzZWNvbmQsCi0gICAgICAgICAgICBCaWdEZWNpbWFsIGZyYWN0aW9uLAotICAgICAgICAgICAgaW50IHR6U2lnbiwKLSAgICAgICAgICAgIGludCB0ekhvdXIsCi0gICAgICAgICAgICBpbnQgdHpNaW51dGUpCi0gICAgewotICAgICAgICBfYml0cyA9IEhBU19USU1FWk9ORSB8IEhBU19ZRUFSIHwgSEFTX01PTlRIIHwgSEFTX0RBWSB8IEhBU19USU1FOwotCi0gICAgICAgIF9DWSA9IHllYXI7Ci0gICAgICAgIF9NID0gbW9udGg7Ci0gICAgICAgIF9EID0gZGF5OwotICAgICAgICBfaCA9IGhvdXI7Ci0gICAgICAgIF9tID0gbWludXRlOwotICAgICAgICBfcyA9IHNlY29uZDsKLSAgICAgICAgX2ZzID0gZnJhY3Rpb24gPT0gbnVsbCA/IF96ZXJvIDogZnJhY3Rpb247Ci0gICAgICAgIF90enNpZ24gPSB0elNpZ247Ci0gICAgICAgIF90emggPSB0ekhvdXI7Ci0gICAgICAgIF90em0gPSB0ek1pbnV0ZTsKLQotICAgICAgICBpZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGEgR0RhdGUgYmFzZWQgb24gYSBqYXZhLnV0aWwuRGF0ZS4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgY3VycmVudCBvZmZzZXQgb2YgdGhlIGRlZmF1bHQgdGltZXpvbmUgaXMgdXNlZCBhcyB0aGUgdGltZXpvbmUuCi0gICAgICogPHA+Ci0gICAgICogRm9yIGV4YW1wbGUsIGlmIGVhc3Rlcm4gZGF5bGlnaHQgdGltZSBpcyBpbiBlZmZlY3QgYXQgdGhlIGdpdmVuCi0gICAgICogZGF0ZSwgdGhlIHRpbWV6b25lIG9uIHRoZSBlYXN0IGNvYXN0IG9mIHRoZSB1bml0ZWQgc3RhdGVzCi0gICAgICogdHJhbnNsYXRlcyB0byBHTVQtMDU6MDAgKEVTVCkgKyAxOjAwIChEVCBvZmZzZXQpID09IEdNVC0wNDowMC4KLSAgICAgKi8KLSAgICBwdWJsaWMgR0RhdGUoRGF0ZSBkYXRlKQotICAgIHsKLSAgICAgICAgLy8gcmVxdWlyZXMgc29tZSBkYXRlIG1hdGgsIHNvIGN0b3IgbGl2ZXMgb24gR0RhdGVCdWlsZGVyCi0gICAgICAgIHRoaXMobmV3IEdEYXRlQnVpbGRlcihkYXRlKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhIEdEYXRlIGJhc2VkIG9uIGEgamF2YS51dGlsLkNhbGVuZGFyLgotICAgICAqIDxwPgotICAgICAqIElmIHRoZSBjYWxlbmRhciBkb2VzIG5vdCBoYXZlIHNvbWUgZmllbGRzIHNldCwgdGhlIHNhbWUgYWJzZW5jZQotICAgICAqIG9mIGluZm9ybWF0aW9uIGlzIHJlZmxlY3RlZCBpbiB0aGUgR0RhdGUuICBOb3RlIHRoYXQKLSAgICAgKiBqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXIgZmlsbHMgaW4gYWxsIGZpZWxkcyBhcyBzb29uIGFzIGFueQotICAgICAqIGFyZSBmZXRjaGVkLCBzbyBjb25zdHJ1Y3RpbmcgYSBHRGF0ZSB3aXRoIHRoZSBzYW1lIGNhbGVuZGFyIG9iamVjdAotICAgICAqIHR3aWNlIG1heSByZXN1bHQgaW4gYSBkaWZmZXJlbnQgR0RhdGUgYmVjYXVzZSBvZiBhIGNoYW5nZWQgY2FsZW5kYXIuCi0gICAgICogTm90ZSB0aGF0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ2FsZW5kYXIgaXMgc3RhYmxlIGlmIHlvdSByZS1nZXQgYSBzZXQgZmllbGQsCi0gICAgICogc28gaXQgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBwcm9ibGVtLgotICAgICAqLwotICAgIHB1YmxpYyBHRGF0ZShDYWxlbmRhciBjYWxlbmRhcikKLSAgICB7Ci0gICAgICAgIC8vIHdlIG11c3Qgc2NyYXBlIHRoZSAiaXNTZXQiIGluZm9ybWF0aW9uIG91dCBiZWZvcmUgYWNjZXNzaW5nIGFueXRoaW5nCi0gICAgICAgIGJvb2xlYW4gaXNTZXRZZWFyID0gY2FsZW5kYXIuaXNTZXQoQ2FsZW5kYXIuWUVBUik7Ci0gICAgICAgIGJvb2xlYW4gaXNTZXRFcmEgPSBjYWxlbmRhci5pc1NldChDYWxlbmRhci5FUkEpOwotICAgICAgICBib29sZWFuIGlzU2V0TW9udGggPSBjYWxlbmRhci5pc1NldChDYWxlbmRhci5NT05USCk7Ci0gICAgICAgIGJvb2xlYW4gaXNTZXREYXkgPSBjYWxlbmRhci5pc1NldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpOwotICAgICAgICBib29sZWFuIGlzU2V0SG91ck9mRGF5ID0gY2FsZW5kYXIuaXNTZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVkpOwotICAgICAgICBib29sZWFuIGlzU2V0SG91ciA9IGNhbGVuZGFyLmlzU2V0KENhbGVuZGFyLkhPVVIpOwotICAgICAgICBib29sZWFuIGlzU2V0QW1QbSA9IGNhbGVuZGFyLmlzU2V0KENhbGVuZGFyLkFNX1BNKTsKLSAgICAgICAgYm9vbGVhbiBpc1NldE1pbnV0ZSA9IGNhbGVuZGFyLmlzU2V0KENhbGVuZGFyLk1JTlVURSk7Ci0gICAgICAgIGJvb2xlYW4gaXNTZXRTZWNvbmQgPSBjYWxlbmRhci5pc1NldChDYWxlbmRhci5TRUNPTkQpOwotICAgICAgICBib29sZWFuIGlzU2V0TWlsbGlzID0gY2FsZW5kYXIuaXNTZXQoQ2FsZW5kYXIuTUlMTElTRUNPTkQpOwotICAgICAgICBib29sZWFuIGlzU2V0Wm9uZSA9IGNhbGVuZGFyLmlzU2V0KENhbGVuZGFyLlpPTkVfT0ZGU0VUKTsKLSAgICAgICAgYm9vbGVhbiBpc1NldERzdCA9IGNhbGVuZGFyLmlzU2V0KENhbGVuZGFyLkRTVF9PRkZTRVQpOwotCi0gICAgICAgIGlmIChpc1NldFllYXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB5ID0gY2FsZW5kYXIuZ2V0KENhbGVuZGFyLllFQVIpOwotICAgICAgICAgICAgaWYgKGlzU2V0RXJhICYmIGNhbGVuZGFyIGluc3RhbmNlb2YgR3JlZ29yaWFuQ2FsZW5kYXIpCi0gICAgICAgICAgICAgICAgaWYgKGNhbGVuZGFyLmdldChDYWxlbmRhci5FUkEpID09IEdyZWdvcmlhbkNhbGVuZGFyLkJDKQotICAgICAgICAgICAgICAgICAgICB5ID0gMSAtIHk7Ci0gICAgICAgICAgICBfYml0cyB8PSBIQVNfWUVBUjsKLSAgICAgICAgICAgIF9DWSA9IHk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzU2V0TW9udGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9iaXRzIHw9IEhBU19NT05USDsKLSAgICAgICAgICAgIF9NID0gY2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1PTlRIKSArIDE7IC8vICEhbm90ZQotICAgICAgICB9Ci0gICAgICAgIGlmIChpc1NldERheSkKLSAgICAgICAgewotICAgICAgICAgICAgX2JpdHMgfD0gSEFTX0RBWTsKLSAgICAgICAgICAgIF9EID0gY2FsZW5kYXIuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCk7Ci0gICAgICAgIH0KLSAgICAgICAgYm9vbGVhbiBnb3RUaW1lID0gZmFsc2U7Ci0KLSAgICAgICAgaW50IGggPSAwOwotICAgICAgICBpbnQgbSA9IDA7Ci0gICAgICAgIGludCBzID0gMDsKLSAgICAgICAgQmlnRGVjaW1hbCBmcyA9IF96ZXJvOwotCi0gICAgICAgIGlmIChpc1NldEhvdXJPZkRheSkKLSAgICAgICAgewotICAgICAgICAgICAgaCA9IGNhbGVuZGFyLmdldChDYWxlbmRhci5IT1VSX09GX0RBWSk7Ci0gICAgICAgICAgICBnb3RUaW1lID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpc1NldEhvdXIgJiYgaXNTZXRBbVBtKQotICAgICAgICB7Ci0gICAgICAgICAgICBoID0gY2FsZW5kYXIuZ2V0KENhbGVuZGFyLkhPVVIpICsgY2FsZW5kYXIuZ2V0KENhbGVuZGFyLkFNX1BNKSAqIDEyOwotICAgICAgICAgICAgZ290VGltZSA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNTZXRNaW51dGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG0gPSBjYWxlbmRhci5nZXQoQ2FsZW5kYXIuTUlOVVRFKTsKLSAgICAgICAgICAgIGdvdFRpbWUgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzU2V0U2Vjb25kKQotICAgICAgICB7Ci0gICAgICAgICAgICBzID0gY2FsZW5kYXIuZ2V0KENhbGVuZGFyLlNFQ09ORCk7Ci0gICAgICAgICAgICBnb3RUaW1lID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpc1NldE1pbGxpcykKLSAgICAgICAgewotICAgICAgICAgICAgZnMgPSBCaWdEZWNpbWFsLnZhbHVlT2YoY2FsZW5kYXIuZ2V0KENhbGVuZGFyLk1JTExJU0VDT05EKSwgMyk7Ci0gICAgICAgICAgICBnb3RUaW1lID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChnb3RUaW1lKQotICAgICAgICB7Ci0gICAgICAgICAgICBfYml0cyB8PSBIQVNfVElNRTsKLSAgICAgICAgICAgIF9oID0gaDsKLSAgICAgICAgICAgIF9tID0gbTsKLSAgICAgICAgICAgIF9zID0gczsKLSAgICAgICAgICAgIF9mcyA9IGZzOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzU2V0Wm9uZSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyA9IGNhbGVuZGFyLmdldChDYWxlbmRhci5aT05FX09GRlNFVCk7Ci0gICAgICAgICAgICBpZiAoaXNTZXREc3QpCi0gICAgICAgICAgICAgICAgem9uZU9mZnNldEluTWlsbGlzZWNvbmRzICs9IGNhbGVuZGFyLmdldChDYWxlbmRhci5EU1RfT0ZGU0VUKTsKLQotICAgICAgICAgICAgX2JpdHMgfD0gSEFTX1RJTUVaT05FOwotICAgICAgICAgICAgaWYgKHpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF90enNpZ24gPSAwOwotICAgICAgICAgICAgICAgIF90emggPSAwOwotICAgICAgICAgICAgICAgIF90em0gPSAwOwotICAgICAgICAgICAgICAgIFRpbWVab25lIHpvbmUgPSBjYWxlbmRhci5nZXRUaW1lWm9uZSgpOwotICAgICAgICAgICAgICAgIFN0cmluZyBpZCA9IHpvbmUuZ2V0SUQoKTsKLSAgICAgICAgICAgICAgICBpZiAoaWQgIT0gbnVsbCAmJiBpZC5sZW5ndGgoKSA+IDMpIHN3aXRjaCAoaWQuY2hhckF0KDMpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnKyc6IF90enNpZ24gPSAxOyBicmVhazsgICAvLyBHTVQrMDA6MDAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnLSc6IF90enNpZ24gPSAtMTsgYnJlYWs7ICAvLyBHTVQtMDA6MDAKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX3R6c2lnbiA9ICh6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMgPCAwID8gLTEgOiArMSk7Ci0gICAgICAgICAgICAgICAgem9uZU9mZnNldEluTWlsbGlzZWNvbmRzID0gem9uZU9mZnNldEluTWlsbGlzZWNvbmRzICogX3R6c2lnbjsKLSAgICAgICAgICAgICAgICBfdHpoID0gem9uZU9mZnNldEluTWlsbGlzZWNvbmRzIC8gMzYwMDAwMDsKLSAgICAgICAgICAgICAgICBfdHptID0gKHpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyAtIF90emggKiAzNjAwMDAwKSAvIDYwMDAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhIEdEYXRlIGJhc2VkIG9uIGFub3RoZXIgR0RhdGVTcGVjaWZpY2F0aW9uLgotICAgICAqLwotICAgIHB1YmxpYyBHRGF0ZShHRGF0ZVNwZWNpZmljYXRpb24gZ2RhdGUpCi0gICAgewotICAgICAgICBpZiAoZ2RhdGUuaGFzVGltZVpvbmUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgX2JpdHMgfD0gSEFTX1RJTUVaT05FOwotICAgICAgICAgICAgX3R6c2lnbiA9IGdkYXRlLmdldFRpbWVab25lU2lnbigpOwotICAgICAgICAgICAgX3R6aCA9IGdkYXRlLmdldFRpbWVab25lSG91cigpOwotICAgICAgICAgICAgX3R6bSA9IGdkYXRlLmdldFRpbWVab25lTWludXRlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZ2RhdGUuaGFzVGltZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBfYml0cyB8PSBIQVNfVElNRTsKLSAgICAgICAgICAgIF9oID0gZ2RhdGUuZ2V0SG91cigpOwotICAgICAgICAgICAgX20gPSBnZGF0ZS5nZXRNaW51dGUoKTsKLSAgICAgICAgICAgIF9zID0gZ2RhdGUuZ2V0U2Vjb25kKCk7Ci0gICAgICAgICAgICBfZnMgPSBnZGF0ZS5nZXRGcmFjdGlvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGdkYXRlLmhhc0RheSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBfYml0cyB8PSBIQVNfREFZOwotICAgICAgICAgICAgX0QgPSBnZGF0ZS5nZXREYXkoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChnZGF0ZS5oYXNNb250aCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBfYml0cyB8PSBIQVNfTU9OVEg7Ci0gICAgICAgICAgICBfTSA9IGdkYXRlLmdldE1vbnRoKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZ2RhdGUuaGFzWWVhcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBfYml0cyB8PSBIQVNfWUVBUjsKLSAgICAgICAgICAgIF9DWSA9IGdkYXRlLmdldFllYXIoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIHBhY2thZ2UgKi8gc3RhdGljIGZpbmFsIGJvb2xlYW4gaXNEaWdpdChjaGFyIGNoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgoY2hhcikoY2ggLSAnMCcpIDw9ICc5JyAtICcwJyk7IC8vIGNoYXIgaXMgdW5zaWduZWQKLSAgICB9Ci0KLSAgICAvKiBwYWNrYWdlICovIHN0YXRpYyBmaW5hbCBib29sZWFuIGlzU3BhY2UoY2hhciBjaCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY2gpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgJyAnOgotICAgICAgICAgICAgY2FzZSAnXHQnOgotICAgICAgICAgICAgY2FzZSAnXHInOgotICAgICAgICAgICAgY2FzZSAnXG4nOgotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBwYWNrYWdlICovIHN0YXRpYyBmaW5hbCBpbnQgZGlnaXRWYWwoY2hhciBjaCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoY2ggLSAnMCcpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCB0d29EaWdpdChDaGFyU2VxdWVuY2Ugc3RyLCBpbnQgaW5kZXgpCi0gICAgewotICAgICAgICBjaGFyIGNoMSA9IHN0ci5jaGFyQXQoaW5kZXgpOwotICAgICAgICBjaGFyIGNoMiA9IHN0ci5jaGFyQXQoaW5kZXggKyAxKTsKLSAgICAgICAgaWYgKCFpc0RpZ2l0KGNoMSkgfHwgIWlzRGlnaXQoY2gyKSkKLSAgICAgICAgICAgIHJldHVybiAxMDA7IC8vIG5vdCB0d28gZGlnaXRzCi0gICAgICAgIHJldHVybiBkaWdpdFZhbChjaDEpICogMTAgKyBkaWdpdFZhbChjaDIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdHJ1ZTogYWxsIEdEYXRlIGluc3RhbmNlcyBhcmUgaW1tdXRhYmxlLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzSW1tdXRhYmxlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBjb21iaW5hdGlvbiBvZiBmbGFncyBpbmRpY2F0aW5nIHRoZSBpbmZvcm1hdGlvbgotICAgICAqIGNvbnRhaW5lZCBieSB0aGlzIEdEYXRlLiAgVGhlIGZpdmUgZmxhZ3MgYXJlCi0gICAgICogSEFTX1RJTUVaT05FLCBIQVNfWUVBUiwgSEFTX01PTlRILCBIQVNfREFZLCBhbmQgSEFTX1RJTUUuCi0gICAgICovCi0gICAgcHVibGljIGludCBnZXRGbGFncygpCi0gICAgewotICAgICAgICByZXR1cm4gX2JpdHM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGlzIGRhdGUvdGltZSBzcGVjaWZpY2F0aW9uIHNwZWNpZmllcyBhIHRpbWV6b25lLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGhhc1RpbWVab25lKCkKLSAgICAgICAgeyByZXR1cm4gKChfYml0cyAmIEhBU19USU1FWk9ORSkgIT0gMCk7IH0KLQotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhpcyBkYXRlL3RpbWUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSB5ZWFyLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGhhc1llYXIoKQotICAgICAgICB7IHJldHVybiAoKF9iaXRzICYgSEFTX1lFQVIpICE9IDApOyB9Ci0KLSAgICAvKioKLSAgICAgKiBUcnVlIGlmIHRoaXMgZGF0ZS90aW1lIHNwZWNpZmljYXRpb24gc3BlY2lmaWVzIGEgbW9udGgtb2YteWVhci4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBoYXNNb250aCgpCi0gICAgICAgIHsgcmV0dXJuICgoX2JpdHMgJiBIQVNfTU9OVEgpICE9IDApOyB9Ci0KLSAgICAvKioKLSAgICAgKiBUcnVlIGlmIHRoaXMgZGF0ZS90aW1lIHNwZWNpZmljYXRpb24gc3BlY2lmaWVzIGEgZGF5LW9mLW1vbnRoLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGhhc0RheSgpCi0gICAgICAgIHsgcmV0dXJuICgoX2JpdHMgJiBIQVNfREFZKSAhPSAwKTsgfQotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGlzIGRhdGUvdGltZSBzcGVjaWZpY2F0aW9uIHNwZWNpZmllcyBhIHRpbWUtb2YtZGF5LgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGhhc1RpbWUoKQotICAgICAgICB7IHJldHVybiAoKF9iaXRzICYgSEFTX1RJTUUpICE9IDApOyB9Ci0KLSAgICAvKioKLSAgICAgKiBUcnVlIGlmIHRoaXMgZGF0ZS90aW1lIHNwZWNpZmljYXRpb24gc3BlY2lmaWVzIGEgZnVsbCBkYXRlICh5ZWFyLCBtb250aCwgZGF5KQotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGhhc0RhdGUoKQotICAgICAgICB7IHJldHVybiAoKF9iaXRzICYgKEhBU19EQVkgfCBIQVNfTU9OVEggfCBIQVNfWUVBUikpID09IChIQVNfREFZIHwgSEFTX01PTlRIIHwgSEFTX1lFQVIpKTsgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgeWVhci4gU2hvdWxkIGJlIGEgZm91ci1kaWdpdCB5ZWFyIHNwZWNpZmljYXRpb24uCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIGludCBnZXRZZWFyKCkKLSAgICAgICAgeyByZXR1cm4gX0NZOyAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgbW9udGgtb2YteWVhci4gSmFudWFyeSBpcyAxLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0TW9udGgoKQotICAgICAgICB7IHJldHVybiBfTTsgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIGRheS1vZi1tb250aC4gVGhlIGZpcnN0IGRheSBvZiBlYWNoIG1vbnRoIGlzIDEuCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIGludCBnZXREYXkoKQotICAgICAgICB7IHJldHVybiBfRDsgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgaG91ci1vZi1kYXkuIE1pZG5pZ2h0IGlzIDAsIGFuZCAxMVBNIGlzIDIzLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0SG91cigpCi0gICAgICAgIHsgcmV0dXJuIF9oOyB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBtaW51dGUtb2YtaG91ci4gUmFuZ2UgZnJvbSAwIHRvIDU5LgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0TWludXRlKCkKLSAgICAgICAgeyByZXR1cm4gX207IH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHNlY29uZC1vZi1taW51dGUuIFJhbmdlIGZyb20gMCB0byA1OS4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgaW50IGdldFNlY29uZCgpCi0gICAgICAgIHsgcmV0dXJuIF9zOyB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBmcmFjdGlvbi1vZi1zZWNvbmQuIFJhbmdlIGZyb20gMCAoaW5jbHVzaXZlKSB0byAxIChleGNsdXNpdmUpLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBCaWdEZWNpbWFsIGdldEZyYWN0aW9uKCkKLSAgICAgICAgeyByZXR1cm4gX2ZzOyB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSB0aW1lIHpvbmUgc2lnbi4gRm9yIHRpbWUgem9uZXMgZWFzdCBvZiBHTVQsCi0gICAgICogdGhpcyBpcyBwb3NpdGl2ZTsgZm9yIHRpbWUgem9uZXMgd2VzdCwgdGhpcyBpcyBuZWdhdGl2ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgaW50IGdldFRpbWVab25lU2lnbigpCi0gICAgICAgIHsgcmV0dXJuIF90enNpZ247IH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHRpbWUgem9uZSBob3VyLgotICAgICAqCi0gICAgICogVGhpcyBpcyBhbHdheXMgcG9zaXRpdmU6IGZvciB0aGUgc2lnbiwgbG9vayBhdAotICAgICAqIGdldFRpbWVab25lU2lnbigpLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0VGltZVpvbmVIb3VyKCkKLSAgICAgICAgeyByZXR1cm4gX3R6aDsgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgdGltZSB6b25lIG1pbnV0ZXMuCi0gICAgICoKLSAgICAgKiBUaGlzIGlzIGFsd2F5cyBwb3NpdGl2ZTogZm9yIHRoZSBzaWduLCBsb29rIGF0Ci0gICAgICogZ2V0VGltZVpvbmVTaWduKCkuCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIGludCBnZXRUaW1lWm9uZU1pbnV0ZSgpCi0gICAgICAgIHsgcmV0dXJuIF90em07IH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHJvdW5kZWQgbWlsbGlzZWNvbmQgdmFsdWUuIFJhbmdlIGZyb20gMCB0byA5OTkKLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldE1pbGxpc2Vjb25kKCkKLSAgICB7Ci0gICAgICAgIGlmIChfZnMgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gX2ZzLnNldFNjYWxlKDMsIEJpZ0RlY2ltYWwuUk9VTkRfSEFMRl9VUCkudW5zY2FsZWRWYWx1ZSgpLmludFZhbHVlKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhlIGNhbm9uaWNhbCBzdHJpbmcgcmVwcmVzZW50YXRpb24uIFNwZWNpZmljIG1vbWVudHMgb3IKLSAgICAgKiB0aW1lcy1vZi1kYXkgaW4gYSBzcGVjaWZpZWQgdGltZXpvbmUgYXJlIG5vcm1hbGl6ZWQgdG8KLSAgICAgKiBVVEMgdGltZSB0byBwcm9kdWNlIGEgY2Fub25pY2FsIHN0cmluZyBmb3JtIGZvciB0aGVtLgotICAgICAqIE90aGVyIHJlY3VycmluZyB0aW1lIHNwZWNpZmljYXRpb25zIGtlZXAgdGhlaXIgdGltZXpvbmUKLSAgICAgKiBpbmZvcm1hdGlvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGNhbm9uaWNhbFN0cmluZygpCi0gICAgewotICAgICAgICBlbnN1cmVDYW5vbmljYWxTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIF9jYW5vbmljYWxTdHJpbmc7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGlzIEdEYXRlIGNvcnJlc3BvbmRzIHRvIGEgdmFsaWQgZ3JlZ29yaWFuIGRhdGUgdmFsdWUKLSAgICAgKiBpbiBYTUwgc2NoZW1hLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzVmFsaWQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdEYXRlQnVpbGRlci5pc1ZhbGlkR0RhdGUodGhpcyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgSnVsaWFuIGRhdGUgY29ycmVzcG9uZGluZyB0byB0aGlzIEdyZWdvcmlhbiBkYXRlLgotICAgICAqIFRoZSBKdWxpYW4gZGF0ZSAoSkQpIGlzIGEgY29udGludW91cyBjb3VudCBvZiBkYXlzIGZyb20KLSAgICAgKiAxIEphbnVhcnkgNDcxMyBCQyAoPSAtNDcxMiBKYW51YXJ5IDEpLgotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0SnVsaWFuRGF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gR0RhdGVCdWlsZGVyLmp1bGlhbkRhdGVGb3JHRGF0ZSh0aGlzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IHRpbWUgYXMgYW4ge0BsaW5rIFhtbENhbGVuZGFyfS4KLSAgICAgKiA8cD4KLSAgICAgKiB7QGxpbmsgWG1sQ2FsZW5kYXJ9IGlzIGEgc3ViY2xhc3Mgb2Yge0BsaW5rIGphdmEudXRpbC5HcmVnb3JpYW5DYWxlbmRhcn0KLSAgICAgKiB3aGljaCBpcyBzbGlnaHRseSBjdXN0b21pemVkIHRvIG1hdGNoIFhNTCBzY2hlbWEgZGF0ZSBydWxlcy4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgcmV0dXJuZWQge0BsaW5rIFhtbENhbGVuZGFyfSBoYXMgb25seSB0aG9zZSB0aW1lIGFuZCBkYXRlIGZpZWxkcwotICAgICAqIHNldCB0aGF0IGFyZSByZWZsZWN0ZWQgaW4gdGhlIEdEYXRlIG9iamVjdC4gIEJlY2F1c2Ugb2YgdGhlIHdheSB0aGUKLSAgICAgKiB7QGxpbmsgamF2YS51dGlsLkNhbGVuZGFyfSBjb250cmFjdCB3b3JrcywgYW55IGluZm9ybWF0aW9uIGluIHRoZSBpc1NldCgpIHZhbmlzaGVzCi0gICAgICogYXMgc29vbiBhcyB5b3UgdmlldyBhbnkgdW5zZXQgZmllbGQgdXNpbmcgZ2V0KCkgbWV0aG9kcy4KLSAgICAgKiBUaGlzIG1lYW5zIHRoYXQgaWYgaXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hpY2ggZGF0ZSBmaWVsZHMKLSAgICAgKiBhcmUgc2V0LCB5b3UgbXVzdCBjYWxsIGlzU2V0KCkgZmlyc3QgYmVmb3JlIGdldCgpLgotICAgICAqLwotICAgIHB1YmxpYyBYbWxDYWxlbmRhciBnZXRDYWxlbmRhcigpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IFhtbENhbGVuZGFyKHRoaXMpOwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogUmV0cmlldmVzIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCB0aW1lIGFzIGEgamF2YS51dGlsLkRhdGUKLSAgICAgKiBpbnN0YW5jZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgRGF0ZSBnZXREYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBHRGF0ZUJ1aWxkZXIuZGF0ZUZvckdEYXRlKHRoaXMpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbXBhcmlzb24gdG8gYW5vdGhlciBHRGF0ZS4KLSAgICAgKiA8dWw+Ci0gICAgICogPGxpPlJldHVybnMgLTEgaWYgdGhpcyA8IGRhdGUuIChsZXNzLXRoYW4pCi0gICAgICogPGxpPlJldHVybnMgMCBpZiB0aGlzID09IGRhdGUuIChlcXVhbCkKLSAgICAgKiA8bGk+UmV0dXJucyAxIGlmIHRoaXMgPiBkYXRlLiAoZ3JlYXRlci10aGFuKQotICAgICAqIDxsaT5SZXR1cm5zIDIgaWYgdGhpcyA8PiBkYXRlLiAoaW5jb21wYXJhYmxlKQotICAgICAqIDwvdWw+Ci0gICAgICogVHdvIGluc3RhbmNlcyBhcmUgaW5jb21wYXJhYmxlIGlmIHRoZXkgaGF2ZSBkaWZmZXJlbnQgYW1vdW50cwotICAgICAqIG9mIGluZm9ybWF0aW9uLgotICAgICAqLwotICAgIHB1YmxpYyBpbnQgY29tcGFyZVRvR0RhdGUoR0RhdGVTcGVjaWZpY2F0aW9uIGRhdGVzcGVjKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdEYXRlQnVpbGRlci5jb21wYXJlR0RhdGUodGhpcywgZGF0ZXNwZWMpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGJ1aWx0aW4gdHlwZSBjb2RlIGZvciB0aGUgc2hhcGUgb2YgdGhlIGluZm9ybWF0aW9uCi0gICAgICogY29udGFpbmVkIGluIHRoaXMgaW5zdGFuY2UsIG9yIDAgaWYgdGhlCi0gICAgICogaW5zdGFuY2UgZG9lc24ndCBjb250YWluIGluZm9ybWF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gYQotICAgICAqIFNjaGVtYSB0eXBlLgotICAgICAqIDxwPiAKLSAgICAgKiBWYWx1ZSB3aWxsIGJlIGVxdWFsIHRvCi0gICAgICoge0BsaW5rIFNjaGVtYVR5cGUjQlRDX05PVF9CVUlMVElOfSwKLSAgICAgKiB7QGxpbmsgU2NoZW1hVHlwZSNCVENfR19ZRUFSfSwKLSAgICAgKiB7QGxpbmsgU2NoZW1hVHlwZSNCVENfR19ZRUFSX01PTlRIfSwKLSAgICAgKiB7QGxpbmsgU2NoZW1hVHlwZSNCVENfR19NT05USH0sCi0gICAgICoge0BsaW5rIFNjaGVtYVR5cGUjQlRDX0dfTU9OVEhfREFZfSwKLSAgICAgKiB7QGxpbmsgU2NoZW1hVHlwZSNCVENfR19EQVl9LAotICAgICAqIHtAbGluayBTY2hlbWFUeXBlI0JUQ19EQVRFfSwKLSAgICAgKiB7QGxpbmsgU2NoZW1hVHlwZSNCVENfREFURV9USU1FfSwgb3IKLSAgICAgKiB7QGxpbmsgU2NoZW1hVHlwZSNCVENfVElNRX0uCi0gICAgICovCi0gICAgcHVibGljIGludCBnZXRCdWlsdGluVHlwZUNvZGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdEYXRlQnVpbGRlci5idGNGb3JGbGFncyhfYml0cyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQWRkcyBhIGR1cmF0aW9uIHRvIHRoaXMgR0RhdGUsIGFuZCByZXR1cm5zIGEgbmV3IEdEYXRlLgotICAgICAqLwotICAgIHB1YmxpYyBHRGF0ZSBhZGQoR0R1cmF0aW9uU3BlY2lmaWNhdGlvbiBkdXJhdGlvbikKLSAgICB7Ci0gICAgICAgIEdEYXRlQnVpbGRlciBidWlsZGVyID0gbmV3IEdEYXRlQnVpbGRlcih0aGlzKTsKLSAgICAgICAgYnVpbGRlci5hZGRHRHVyYXRpb24oZHVyYXRpb24pOwotICAgICAgICByZXR1cm4gYnVpbGRlci50b0dEYXRlKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQWRkcyBhIGR1cmF0aW9uIHRvIHRoaXMgR0RhdGUsIGFuZCByZXR1cm5zIGEgbmV3IEdEYXRlLgotICAgICAqLwotICAgIHB1YmxpYyBHRGF0ZSBzdWJ0cmFjdChHRHVyYXRpb25TcGVjaWZpY2F0aW9uIGR1cmF0aW9uKQotICAgIHsKLSAgICAgICAgR0RhdGVCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgR0RhdGVCdWlsZGVyKHRoaXMpOwotICAgICAgICBidWlsZGVyLnN1YnRyYWN0R0R1cmF0aW9uKGR1cmF0aW9uKTsKLSAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9HRGF0ZSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdEYXRlIGlzIGFuIGltbXV0YWJsZSBjbGFzcywgYW5kIGVxdWFsaXR5IGlzIGNvbXB1dGVkIGJhc2VkCi0gICAgICogb24gaXRzIGNhbm9uaWNhbCB2YWx1ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikKLSAgICB7Ci0gICAgICAgIGlmIChvYmogPT0gdGhpcykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIShvYmogaW5zdGFuY2VvZiBHRGF0ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgZW5zdXJlQ2Fub25pY2FsU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiBfY2Fub25pY2FsU3RyaW5nLmVxdWFscygoKEdEYXRlKW9iaikuY2Fub25pY2FsU3RyaW5nKCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBoYXNoIGNvZGUgZm9yIHRoaXMgR0RhdGUuCi0gICAgICovCi0gICAgcHVibGljIGludCBoYXNoQ29kZSgpCi0gICAgewotICAgICAgICBlbnN1cmVDYW5vbmljYWxTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIF9jYW5vbmljYWxTdHJpbmcuaGFzaENvZGUoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgY2Fub25pY2FsIHN0cmluZyByZXByZXNlbnRhdGlvbi4gU3BlY2lmaWMgbW9tZW50cyBvcgotICAgICAqIHRpbWVzLW9mLWRheSBpbiBhIHNwZWNpZmllZCB0aW1lem9uZSBhcmUgbm9ybWFsaXplZCB0bwotICAgICAqIFVUQyB0aW1lIHRvIHByb2R1Y2UgYSBjYW5vbmljYWwgc3RyaW5nIGZvcm0gZm9yIHRoZW0uCi0gICAgICogT3RoZXIgcmVjdXJyaW5nIHRpbWUgc3BlY2lmaWNhdGlvbnMga2VlcCB0aGVpciB0aW1lem9uZQotICAgICAqIGluZm9ybWF0aW9uLgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBlbnN1cmVDYW5vbmljYWxTdHJpbmcoKQotICAgIHsKLSAgICAgICAgaWYgKF9jYW5vbmljYWxTdHJpbmcgIT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBib29sZWFuIG5lZWROb3JtYWxpemUgPQotICAgICAgICAgICAgKGhhc1RpbWVab25lKCkgJiYgZ2V0VGltZVpvbmVTaWduKCkgIT0gMCAmJiBoYXNUaW1lKCkgJiYKLSAgICAgICAgICAgICgoaGFzRGF5KCkgPT0gaGFzTW9udGgoKSAmJiBoYXNEYXkoKSA9PSBoYXNZZWFyKCkpKSk7Ci0KLSAgICAgICAgaWYgKCFuZWVkTm9ybWFsaXplICYmIGdldEZyYWN0aW9uKCkgIT0gbnVsbCAmJiBnZXRGcmFjdGlvbigpLnNjYWxlKCkgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBCaWdJbnRlZ2VyIGJpID0gZ2V0RnJhY3Rpb24oKS51bnNjYWxlZFZhbHVlKCk7Ci0gICAgICAgICAgICBuZWVkTm9ybWFsaXplID0gKGJpLm1vZChHRGF0ZUJ1aWxkZXIuVEVOKS5zaWdudW0oKSA9PSAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghbmVlZE5vcm1hbGl6ZSkKLSAgICAgICAgICAgIF9jYW5vbmljYWxTdHJpbmcgPSB0b1N0cmluZygpOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIEdEYXRlQnVpbGRlciBnZGIgPSBuZXcgR0RhdGVCdWlsZGVyKHRoaXMpOwotICAgICAgICAgICAgZ2RiLm5vcm1hbGl6ZSgpOwotICAgICAgICAgICAgX2Nhbm9uaWNhbFN0cmluZyA9IGdkYi50b1N0cmluZygpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhlIG5hdHVyYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiBUaGlzIHJlcHJlc2VudHMgdGhlIGluZm9ybWF0aW9uCi0gICAgICogdGhhdCBpcyBhdmFpbGFibGUsIGluY2x1ZGluZyB0aW1lem9uZS4gRm9yIHR5cGVzIHRoYXQgY29ycmVzcG9uZAotICAgICAqIHRvIGRlZmluZWQgc2NoZW1hIHR5cGVzIChzY2hlbWFCdWlsdGluVHlwZUNvZGUoKSA+IDApLAotICAgICAqIHRoaXMgcHJvdmlkZXMgdGhlIG5hdHVyYWwgbGV4aWNhbCByZXByZXNlbnRhdGlvbi4KLSAgICAgKiA8cD4KLSAgICAgKiBXaGVuIGJvdGggdGltZSBhbmQgdGltZXpvbmUgYXJlIHNwZWNpZmllZCwgdGhpcyBzdHJpbmcgaXMgbm90Ci0gICAgICogdGhlIGNhbm9uaWNhbCByZXByZXNlbnRhdGlvbiB1bmxlc3MgdGhlIHRpbWV6b25lIGlzIFVUQyAoWikKLSAgICAgKiAoc2luY2UgdGhlIHNhbWUgbW9tZW50IGluIHRpbWUgY2FuIGJlIGV4cHJlc3NlZCBpbiBkaWZmZXJlbnQKLSAgICAgKiB0aW1lem9uZXMpLiBUbyBnZXQgYSBjYW5vbmljYWwgc3RyaW5nLCB1c2UgdGhlIGNhbm9uaWNhbFN0cmluZygpCi0gICAgICogbWV0aG9kLgotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICAgIHsKLSAgICAgICAgaWYgKF9zdHJpbmcgPT0gbnVsbCkKLSAgICAgICAgICAgIF9zdHJpbmcgPSBmb3JtYXRHRGF0ZSh0aGlzKTsKLSAgICAgICAgcmV0dXJuIF9zdHJpbmc7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgY2hhcltdIF90ZW5zRGlnaXQgPQotICAgIHsKLSAgICAgICAgJzAnLCAnMCcsICcwJywgJzAnLCAnMCcsICcwJywgJzAnLCAnMCcsICcwJywgJzAnLAotICAgICAgICAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsICcxJywgJzEnLCAnMScsCi0gICAgICAgICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywgJzInLCAnMicsICcyJywKLSAgICAgICAgJzMnLCAnMycsICczJywgJzMnLCAnMycsICczJywgJzMnLCAnMycsICczJywgJzMnLAotICAgICAgICAnNCcsICc0JywgJzQnLCAnNCcsICc0JywgJzQnLCAnNCcsICc0JywgJzQnLCAnNCcsCi0gICAgICAgICc1JywgJzUnLCAnNScsICc1JywgJzUnLCAnNScsICc1JywgJzUnLCAnNScsICc1JywKLSAgICAgICAgJzYnLCAnNicsICc2JywgJzYnLCAnNicsICc2JywgJzYnLCAnNicsICc2JywgJzYnLAotICAgICAgICAnNycsICc3JywgJzcnLCAnNycsICc3JywgJzcnLCAnNycsICc3JywgJzcnLCAnNycsCi0gICAgICAgICc4JywgJzgnLCAnOCcsICc4JywgJzgnLCAnOCcsICc4JywgJzgnLCAnOCcsICc4JywKLSAgICAgICAgJzknLCAnOScsICc5JywgJzknLCAnOScsICc5JywgJzknLCAnOScsICc5JywgJzknLAotICAgIH07Ci0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgY2hhcltdIF9vbmVzRGlnaXQgPQotICAgIHsKLSAgICAgICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLAotICAgICAgICAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsCi0gICAgICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywKLSAgICAgICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLAotICAgICAgICAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsCi0gICAgICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywKLSAgICAgICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLAotICAgICAgICAnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsCi0gICAgICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywKLSAgICAgICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLAotICAgIH07Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgX3BhZFR3b0FwcGVuZChjaGFyW10gYiwgaW50IGksIGludCBuKQotICAgIHsKLSAgICAgICAgYXNzZXJ0KG4gPj0gMCAmJiBuIDwgMTAwKTsKLSAgICAgICAgYltpXSA9IF90ZW5zRGlnaXRbbl07Ci0gICAgICAgIGJbaSArIDFdID0gX29uZXNEaWdpdFtuXTsKLSAgICAgICAgcmV0dXJuIGkgKyAyOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBfcGFkRm91ckFwcGVuZChjaGFyW10gYiwgaW50IGksIGludCBuKQotICAgIHsKLSAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBiW2krK10gPSAnLSc7Ci0gICAgICAgICAgICBuID0gLW47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG4gPj0gMTAwMDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBzID0gSW50ZWdlci50b1N0cmluZyhuKTsKLSAgICAgICAgICAgIHMuZ2V0Q2hhcnMoMCwgcy5sZW5ndGgoKSwgYiwgaSk7Ci0gICAgICAgICAgICByZXR1cm4gaSArIHMubGVuZ3RoKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IHEgPSBuIC8gMTAwOwotICAgICAgICBpbnQgciA9IG4gLSBxICogMTAwOwotICAgICAgICBiW2ldID0gX3RlbnNEaWdpdFtxXTsKLSAgICAgICAgYltpICsgMV0gPSBfb25lc0RpZ2l0W3FdOwotICAgICAgICBiW2kgKyAyXSA9IF90ZW5zRGlnaXRbcl07Ci0gICAgICAgIGJbaSArIDNdID0gX29uZXNEaWdpdFtyXTsKLSAgICAgICAgcmV0dXJuIGkgKyA0OwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBUaW1lWm9uZSBHTVRaT05FID0gVGltZVpvbmUuZ2V0VGltZVpvbmUoIkdNVCIpOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFRpbWVab25lW10gTUlOVVNaT05FID0KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01ULTAwOjAwIiksCi0gICAgICAgICAgICAgICAgVGltZVpvbmUuZ2V0VGltZVpvbmUoIkdNVC0wMTowMCIpLAotICAgICAgICAgICAgICAgIFRpbWVab25lLmdldFRpbWVab25lKCJHTVQtMDI6MDAiKSwKLSAgICAgICAgICAgICAgICBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01ULTAzOjAwIiksCi0gICAgICAgICAgICAgICAgVGltZVpvbmUuZ2V0VGltZVpvbmUoIkdNVC0wNDowMCIpLAotICAgICAgICAgICAgICAgIFRpbWVab25lLmdldFRpbWVab25lKCJHTVQtMDU6MDAiKSwKLSAgICAgICAgICAgICAgICBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01ULTA2OjAwIiksCi0gICAgICAgICAgICAgICAgVGltZVpvbmUuZ2V0VGltZVpvbmUoIkdNVC0wNzowMCIpLAotICAgICAgICAgICAgICAgIFRpbWVab25lLmdldFRpbWVab25lKCJHTVQtMDg6MDAiKSwKLSAgICAgICAgICAgICAgICBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01ULTA5OjAwIiksCi0gICAgICAgICAgICAgICAgVGltZVpvbmUuZ2V0VGltZVpvbmUoIkdNVC0xMDowMCIpLAotICAgICAgICAgICAgICAgIFRpbWVab25lLmdldFRpbWVab25lKCJHTVQtMTE6MDAiKSwKLSAgICAgICAgICAgICAgICBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01ULTEyOjAwIiksCi0gICAgICAgICAgICAgICAgVGltZVpvbmUuZ2V0VGltZVpvbmUoIkdNVC0xMzowMCIpLAotICAgICAgICAgICAgICAgIFRpbWVab25lLmdldFRpbWVab25lKCJHTVQtMTQ6MDAiKSwKLSAgICAgICAgICAgIH07Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVGltZVpvbmVbXSBQTFVTWk9ORSA9Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVGltZVpvbmUuZ2V0VGltZVpvbmUoIkdNVCswMDowMCIpLAotICAgICAgICAgICAgICAgIFRpbWVab25lLmdldFRpbWVab25lKCJHTVQrMDE6MDAiKSwKLSAgICAgICAgICAgICAgICBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01UKzAyOjAwIiksCi0gICAgICAgICAgICAgICAgVGltZVpvbmUuZ2V0VGltZVpvbmUoIkdNVCswMzowMCIpLAotICAgICAgICAgICAgICAgIFRpbWVab25lLmdldFRpbWVab25lKCJHTVQrMDQ6MDAiKSwKLSAgICAgICAgICAgICAgICBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01UKzA1OjAwIiksCi0gICAgICAgICAgICAgICAgVGltZVpvbmUuZ2V0VGltZVpvbmUoIkdNVCswNjowMCIpLAotICAgICAgICAgICAgICAgIFRpbWVab25lLmdldFRpbWVab25lKCJHTVQrMDc6MDAiKSwKLSAgICAgICAgICAgICAgICBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01UKzA4OjAwIiksCi0gICAgICAgICAgICAgICAgVGltZVpvbmUuZ2V0VGltZVpvbmUoIkdNVCswOTowMCIpLAotICAgICAgICAgICAgICAgIFRpbWVab25lLmdldFRpbWVab25lKCJHTVQrMTA6MDAiKSwKLSAgICAgICAgICAgICAgICBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01UKzExOjAwIiksCi0gICAgICAgICAgICAgICAgVGltZVpvbmUuZ2V0VGltZVpvbmUoIkdNVCsxMjowMCIpLAotICAgICAgICAgICAgICAgIFRpbWVab25lLmdldFRpbWVab25lKCJHTVQrMTM6MDAiKSwKLSAgICAgICAgICAgICAgICBUaW1lWm9uZS5nZXRUaW1lWm9uZSgiR01UKzE0OjAwIiksCi0gICAgICAgICAgICB9OwotCi0gICAgLyogcGFja2FnZSAqLyBzdGF0aWMgZmluYWwgVGltZVpvbmUgdGltZVpvbmVGb3JHRGF0ZShHRGF0ZVNwZWNpZmljYXRpb24gZGF0ZSkKLSAgICB7Ci0gICAgICAgIC8vIHVzZSBhIGNhY2hlZCB0aW1lem9uZSBpZiBpbnRlZ3JhbDsgb3RoZXJ3aXNlIG1ha2UgYSBuZXcgb25lLgotICAgICAgICBpZiAoIWRhdGUuaGFzVGltZVpvbmUoKSkKLSAgICAgICAgICAgIHJldHVybiBUaW1lWm9uZS5nZXREZWZhdWx0KCk7Ci0gICAgICAgIGlmIChkYXRlLmdldFRpbWVab25lU2lnbigpID09IDApCi0gICAgICAgICAgICByZXR1cm4gR01UWk9ORTsKLSAgICAgICAgaWYgKGRhdGUuZ2V0VGltZVpvbmVNaW51dGUoKSA9PSAwICYmIGRhdGUuZ2V0VGltZVpvbmVIb3VyKCkgPD0gMTQgJiYgZGF0ZS5nZXRUaW1lWm9uZUhvdXIoKSA+PSAwKQotICAgICAgICAgICAgcmV0dXJuIGRhdGUuZ2V0VGltZVpvbmVTaWduKCkgPCAwID8gTUlOVVNaT05FW2RhdGUuZ2V0VGltZVpvbmVIb3VyKCldIDogUExVU1pPTkVbZGF0ZS5nZXRUaW1lWm9uZUhvdXIoKV07Ci0gICAgICAgIAotICAgICAgICBjaGFyW10gemIgPSBuZXcgY2hhcls5XTsKLSAgICAgICAgemJbMF0gPSAnRyc7Ci0gICAgICAgIHpiWzFdID0gJ00nOwotICAgICAgICB6YlsyXSA9ICdUJzsKLSAgICAgICAgemJbM10gPSAoZGF0ZS5nZXRUaW1lWm9uZVNpZ24oKSA8IDApID8gJy0nIDogJysnOwotICAgICAgICBHRGF0ZS5fcGFkVHdvQXBwZW5kKHpiLCA0LCBkYXRlLmdldFRpbWVab25lSG91cigpKTsKLSAgICAgICAgemJbNl0gPSAnOic7Ci0gICAgICAgIEdEYXRlLl9wYWRUd29BcHBlbmQoemIsIDcsIGRhdGUuZ2V0VGltZVpvbmVNaW51dGUoKSk7Ci0gICAgICAgIHJldHVybiBUaW1lWm9uZS5nZXRUaW1lWm9uZShuZXcgU3RyaW5nKHpiKSk7Ci0gICAgfQotICAgIAotICAgIC8qIHBhY2thZ2UgKi8gc3RhdGljIFN0cmluZyBmb3JtYXRHRGF0ZShHRGF0ZVNwZWNpZmljYXRpb24gc3BlYykKLSAgICB7Ci0gICAgICAgIC8vIFdlJ3ZlIHVzZWQgYSBjaGFyW10gcmF0aGVyIHRoYW4gYSBTdHJpbmdCdWZmZXIgZm9yIGEgNHggc3BlZWR1cAotICAgICAgICAvLyAtWVkoMTApWVktTU0tRERUSEg6TU06U1MuRkZGRkZGK1pIOlpNCi0gICAgICAgIC8vIDEgKyAxMCAgICsgMysgMysgMysgMysgMysxICsgcyArIDMrIDMgPSAzMyArIHMKLSAgICAgICAgQmlnRGVjaW1hbCBmcyA9IHNwZWMuZ2V0RnJhY3Rpb24oKTsKLSAgICAgICAgY2hhcltdIG1lc3NhZ2UgPSBuZXcgY2hhclszMyArIChmcyA9PSBudWxsID8gMCA6IGZzLnNjYWxlKCkpXTsKLSAgICAgICAgaW50IGkgPSAwOwotCi0gICAgICAgIGlmIChzcGVjLmhhc1llYXIoKSB8fCBzcGVjLmhhc01vbnRoKCkgfHwgc3BlYy5oYXNEYXkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgZG15OiB7Ci0gICAgICAgICAgICAgICAgaWYgKHNwZWMuaGFzWWVhcigpKQotICAgICAgICAgICAgICAgICAgICBpID0gX3BhZEZvdXJBcHBlbmQobWVzc2FnZSwgMCwgc3BlYy5nZXRZZWFyKCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVtpKytdID0gJy0nOwotCi0gICAgICAgICAgICAgICAgaWYgKCEoc3BlYy5oYXNNb250aCgpIHx8IHNwZWMuaGFzRGF5KCkpKQotICAgICAgICAgICAgICAgICAgICBicmVhayBkbXk7Ci0KLSAgICAgICAgICAgICAgICBtZXNzYWdlW2krK10gPSAnLSc7Ci0gICAgICAgICAgICAgICAgaWYgKHNwZWMuaGFzTW9udGgoKSkKLSAgICAgICAgICAgICAgICAgICAgaSA9IF9wYWRUd29BcHBlbmQobWVzc2FnZSwgaSwgc3BlYy5nZXRNb250aCgpKTsKLQotICAgICAgICAgICAgICAgIGlmICghc3BlYy5oYXNEYXkoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsgZG15OwotCi0gICAgICAgICAgICAgICAgbWVzc2FnZVtpKytdID0gJy0nOwotICAgICAgICAgICAgICAgIGkgPSBfcGFkVHdvQXBwZW5kKG1lc3NhZ2UsIGksIHNwZWMuZ2V0RGF5KCkpOwotICAgICAgICAgICAgICAgIGJyZWFrIGRteTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzcGVjLmhhc1RpbWUoKSkKLSAgICAgICAgICAgICAgICBtZXNzYWdlW2krK10gPSAnVCc7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3BlYy5oYXNUaW1lKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGkgPSBfcGFkVHdvQXBwZW5kKG1lc3NhZ2UsIGksIHNwZWMuZ2V0SG91cigpKTsKLSAgICAgICAgICAgIG1lc3NhZ2VbaSsrXSA9ICc6JzsKLSAgICAgICAgICAgIGkgPSBfcGFkVHdvQXBwZW5kKG1lc3NhZ2UsIGksIHNwZWMuZ2V0TWludXRlKCkpOwotICAgICAgICAgICAgbWVzc2FnZVtpKytdID0gJzonOwotICAgICAgICAgICAgaSA9IF9wYWRUd29BcHBlbmQobWVzc2FnZSwgaSwgc3BlYy5nZXRTZWNvbmQoKSk7Ci0gICAgICAgICAgICBpZiAoZnMgIT0gX3plcm8pIC8vIChvcHRpbWl6YXRpb24gfjMlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBmcmFjID0gc3BlYy5nZXRGcmFjdGlvbigpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgaW50IHBvaW50ID0gZnJhYy5pbmRleE9mKCcuJyk7Ci0gICAgICAgICAgICAgICAgaWYgKHBvaW50ID49IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBmcmFjLmdldENoYXJzKHBvaW50LCBmcmFjLmxlbmd0aCgpLCBtZXNzYWdlLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgaSArPSBmcmFjLmxlbmd0aCgpIC0gcG9pbnQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNwZWMuaGFzVGltZVpvbmUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHNwZWMuZ2V0VGltZVpvbmVTaWduKCkgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtZXNzYWdlW2krK10gPSAnWic7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZVtpKytdID0gc3BlYy5nZXRUaW1lWm9uZVNpZ24oKSA+IDAgPyAnKycgOiAnLSc7Ci0gICAgICAgICAgICAgICAgaSA9IF9wYWRUd29BcHBlbmQobWVzc2FnZSwgaSwgc3BlYy5nZXRUaW1lWm9uZUhvdXIoKSk7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZVtpKytdID0gJzonOwotICAgICAgICAgICAgICAgIGkgPSBfcGFkVHdvQXBwZW5kKG1lc3NhZ2UsIGksIHNwZWMuZ2V0VGltZVpvbmVNaW51dGUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBpdCB3b3VsZCBiZSBuaWNlIHRvIHVzZSAoMCwgaSwgbWVzc2FnZSkgY3RvciBpbnN0ZWFkCi0gICAgICAgIHJldHVybiBuZXcgU3RyaW5nKG1lc3NhZ2UsIDAsIGkpOwotICAgIH0KLQotfQotCmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMmI1YjMuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2MSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci1pbXBvcnQgamF2YS51dGlsLlRpbWVab25lOwotCi0vKioKLSAqIFVzZWQgdG8gYnVpbGQge0BsaW5rIEdEYXRlIEdEYXRlc30uCi0gKiA8cD4KLSAqIExpa2UgR0RhdGUsIGEgR0RhdGVCdWlsZGVyIHJlcHJlc2VudHMgYW4gR3JlZ29yaWFuIERhdGUsIFRpbWUsCi0gKiBhbmQgVGltZXpvbmUsIG9yIHN1YnNldCBvZiBpbmZvcm1hdGlvbiAoWWVhciwgTW9udGgsIERheSwKLSAqIFRpbWUsIFRpbWV6b25lLCBvciBzb21lIGNvbWJpbmF0aW9uKS4gV2hlcmV2ZXIgaXQgcHJvdmlkZXMKLSAqIGd1aWRhbmNlLCB0aGUgWE1MIFNjaGVtYSAxLjAgc3BlY2lmaWNhdGlvbiAocGx1cyBwdWJsaXNoZWQKLSAqIGVycmF0YSkgaXMgZm9sbG93ZWQuCi0gKiA8cD4KLSAqIEluc3RhbmNlcyBtYXkgc2VwYXJhdGVseSBzZXQgb3IgY2xlYXIgdGhlIHllYXIsIG1vbnRoLAotICogZGF5LW9mLW1vbnRoLCBhbmQgdGltZS1vZi1kYXkuIE5vdCBhbGwgb3BlcmF0aW9ucyBhcmUKLSAqIG1lYW5pbmdmdWwgb24gYWxsIGNvbWJpbmF0aW9ucy4gSW4gcGFydGljdWxhciwgdGltZXpvbmUKLSAqIG5vcm1hbGl6YXRpb24gaXMgb25seSBwb3NzaWJsZSBpZiB0aGVyZSBpcyBhIHRpbWUsIG9yCi0gKiBhIHRpbWUgdG9nZXRoZXIgd2l0aCBhIGZ1bGwgZGF0ZS4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIEdEYXRlQnVpbGRlciBpbXBsZW1lbnRzIEdEYXRlU3BlY2lmaWNhdGlvbiwgamF2YS5pby5TZXJpYWxpemFibGUKLXsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLSAgICAKLSAgICBwcml2YXRlIGludCBfYml0czsKLSAgICBwcml2YXRlIGludCBfQ1k7Ci0gICAgcHJpdmF0ZSBpbnQgX007Ci0gICAgcHJpdmF0ZSBpbnQgX0Q7Ci0gICAgcHJpdmF0ZSBpbnQgX2g7Ci0gICAgcHJpdmF0ZSBpbnQgX207Ci0gICAgcHJpdmF0ZSBpbnQgX3M7Ci0gICAgcHJpdmF0ZSBCaWdEZWNpbWFsIF9mczsKLSAgICBwcml2YXRlIGludCBfdHpzaWduOwotICAgIHByaXZhdGUgaW50IF90emg7Ci0gICAgcHJpdmF0ZSBpbnQgX3R6bTsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYSBHRGF0ZUJ1aWxkZXIgc3BlY2lmeWluZyBubyBkYXRlIG9yIHRpbWUKLSAgICAgKi8KLSAgICBwdWJsaWMgR0RhdGVCdWlsZGVyKCkKLSAgICB7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQnVpbGRzIGFub3RoZXIgR0RhdGVCdWlsZGVyIHdpdGggdGhlIHNhbWUgdmFsdWUKLSAgICAgKiBhcyB0aGlzIG9uZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgT2JqZWN0IGNsb25lKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgR0RhdGVCdWlsZGVyKHRoaXMpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEJ1aWxkcyBhIEdEYXRlIGZyb20gdGhpcyBHRGF0ZUJ1aWxkZXIuCi0gICAgICovCi0gICAgcHVibGljIEdEYXRlIHRvR0RhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBHRGF0ZSh0aGlzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1dHMgYSBHRGF0ZUJ1aWxkZXIgYnkgY29weWluZyBhbm90aGVyIEdEYXRlU3BlY2lmaWNhaXRvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgR0RhdGVCdWlsZGVyKEdEYXRlU3BlY2lmaWNhdGlvbiBnZGF0ZSkKLSAgICB7Ci0gICAgICAgIGlmIChnZGF0ZS5oYXNUaW1lWm9uZSgpKQotICAgICAgICAgICAgc2V0VGltZVpvbmUoZ2RhdGUuZ2V0VGltZVpvbmVTaWduKCksIGdkYXRlLmdldFRpbWVab25lSG91cigpLCBnZGF0ZS5nZXRUaW1lWm9uZU1pbnV0ZSgpKTsKLQotICAgICAgICBpZiAoZ2RhdGUuaGFzVGltZSgpKQotICAgICAgICAgICAgc2V0VGltZShnZGF0ZS5nZXRIb3VyKCksIGdkYXRlLmdldE1pbnV0ZSgpLCBnZGF0ZS5nZXRTZWNvbmQoKSwgZ2RhdGUuZ2V0RnJhY3Rpb24oKSk7Ci0KLSAgICAgICAgaWYgKGdkYXRlLmhhc0RheSgpKQotICAgICAgICAgICAgc2V0RGF5KGdkYXRlLmdldERheSgpKTsKLQotICAgICAgICBpZiAoZ2RhdGUuaGFzTW9udGgoKSkKLSAgICAgICAgICAgIHNldE1vbnRoKGdkYXRlLmdldE1vbnRoKCkpOwotCi0gICAgICAgIGlmIChnZGF0ZS5oYXNZZWFyKCkpCi0gICAgICAgICAgICBzZXRZZWFyKGdkYXRlLmdldFllYXIoKSk7Ci0gICAgfQotCi0gICAgLy8gRm9ybXM6Ci0KLSAgICAvLyBEYXRlIHBhcnQ6Ci0gICAgLy8gWWVhcjogICAgICAgKC0/XGR7NCx9KQotICAgIC8vIFllYXJNb250aDogICgtP1xkezQsfSktKFxkezJ9KQotICAgIC8vIERhdGU6ICAgICAgICgtP1xkezQsfSktKFxkezJ9KS0oXGR7Mn0pCi0gICAgLy8gTW9udGg6ICAgICAgLS0oXGR7Mn0pKC0tKT8gICAgICAgICAgICAgIC8vZXJyYXRhIFItNDgKLSAgICAvLyBNb250aERheTogICAtLShcZHsyfSktKFxkezJ9KQotICAgIC8vIERheTogICAgICAgIC0tLShcZHsyfSkKLQotICAgIC8vIFRpbWUgcGFydDoKLSAgICAvLyBUaW1lOiAgICAgICAoXGR7Mn0pOihcZHsyfSk6KFxkezJ9KSguXGQqKT8KLQotICAgIC8vIFRpbWV6b25lIHBhcnQ6Ci0gICAgLy8gVFo6ICAgICAgICAgKFopfChbKy1dXGR7Mn0pOihcZHsyfSkKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYSBHRGF0ZUJ1aWxkZXIgZnJvbSBhIGxleGljYWwKLSAgICAgKiByZXByZXNlbnRhdGlvbi4gVGhlIGxleGljYWwgc3BhY2UgY29udGFpbnMgdGhlCi0gICAgICogdW5pb24gb2YgdGhlIGxleGljYWwgc3BhY2VzIG9mIGFsbCB0aGUgc2NoZW1hCi0gICAgICogZGF0ZS90aW1lIHR5cGVzIChleGNlcHQgZm9yIGR1cmF0aW9uKS4KLSAgICAgKi8KLSAgICBwdWJsaWMgR0RhdGVCdWlsZGVyKENoYXJTZXF1ZW5jZSBzdHJpbmcpCi0gICAgewotICAgICAgICB0aGlzKG5ldyBHRGF0ZShzdHJpbmcpKTsKLSAgICB9Ci0KLQotICAgIHB1YmxpYyBHRGF0ZUJ1aWxkZXIoQ2FsZW5kYXIgY2FsZW5kYXIpCi0gICAgewotICAgICAgICB0aGlzKG5ldyBHRGF0ZShjYWxlbmRhcikpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYSBHRGF0ZUJ1aWxkZXIgd2l0aCB0aGUgc3BlY2lmaWVkIHllYXIsIG1vbnRoLCBkYXksCi0gICAgICogaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFuZCBvcHRpb25hbCBmcmFjdGlvbmFsIHNlY29uZHMsIGluCi0gICAgICogYW4gdW5zcGVjaWZpZWQgdGltZXpvbmUuCi0gICAgICogPHA+Ci0gICAgICogTm90ZSB0aGF0IGJ5IG5vdCBzcGVjaWZ5aW5nIHRoZSB0aW1lem9uZSB0aGUgR0RhdGVCdWlsZGVyCi0gICAgICogYmVjb21lcyBwYXJ0aWFsbHkgdW5vcmRlcmVkIHdpdGggcmVzcGVjdCB0byB0aW1lc3RoYXQgZG8gaGF2ZSBhCi0gICAgICogc3BlY2lmaWVkIHRpbWV6b25lLgotICAgICAqIAotICAgICAqIEBwYXJhbSB5ZWFyIFRoZSB5ZWFyCi0gICAgICogQHBhcmFtIG1vbnRoIFRoZSBtb250aCwgZnJvbSAxLTEyCi0gICAgICogQHBhcmFtIGRheSBUaGUgZGF5IG9mIG1vbnRoLCBmcm9tIDEtMzEKLSAgICAgKiBAcGFyYW0gaG91ciBUaGUgaG91ciBvZiBkYXksIGZyb20gMC0yMwotICAgICAqIEBwYXJhbSBtaW51dGUgVGhlIG1pbnV0ZSBvZiBob3VyLCBmcm9tIDAtNTkKLSAgICAgKiBAcGFyYW0gc2Vjb25kIFRoZSBzZWNvbmQgb2YgbWludXRlLCBmcm9tIDAtNTkKLSAgICAgKiBAcGFyYW0gZnJhY3Rpb24gVGhlIGZyYWN0aW9uIG9mIHNlY29uZCwgMC4wIHRvIDAuOTk5Li4uIChtYXkgYmUgbnVsbCkgCi0gICAgICovCi0gICAgcHVibGljIEdEYXRlQnVpbGRlcigKLSAgICAgICAgICAgIGludCB5ZWFyLAotICAgICAgICAgICAgaW50IG1vbnRoLAotICAgICAgICAgICAgaW50IGRheSwKLSAgICAgICAgICAgIGludCBob3VyLAotICAgICAgICAgICAgaW50IG1pbnV0ZSwKLSAgICAgICAgICAgIGludCBzZWNvbmQsCi0gICAgICAgICAgICBCaWdEZWNpbWFsIGZyYWN0aW9uKQotICAgIHsKLSAgICAgICAgX2JpdHMgPSBIQVNfWUVBUiB8IEhBU19NT05USCB8IEhBU19EQVkgfCBIQVNfVElNRTsKLQotICAgICAgICBfQ1kgPSB5ZWFyOwotICAgICAgICBfTSA9IG1vbnRoOwotICAgICAgICBfRCA9IGRheTsKLSAgICAgICAgX2ggPSBob3VyOwotICAgICAgICBfbSA9IG1pbnV0ZTsKLSAgICAgICAgX3MgPSBzZWNvbmQ7Ci0gICAgICAgIF9mcyA9IGZyYWN0aW9uID09IG51bGwgPyBHRGF0ZS5femVybyA6IGZyYWN0aW9uOwotCi0gICAgICAgIGlmICghaXNWYWxpZCgpKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYW4gYWJzb2x1dGUgR0RhdGVCdWlsZGVyIHdpdGggdGhlIHNwZWNpZmllZCB5ZWFyLAotICAgICAqIG1vbnRoLCBkYXksIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBhbmQgb3B0aW9uYWwgZnJhY3Rpb25hbAotICAgICAqIHNlY29uZHMsIGFuZCBpbiB0aGUgdGltZXpvbmUgc3BlY2lmaWVkLgotICAgICAqIDxwPgotICAgICAqIE5vdGUgdGhhdCB5b3UgY2FuIHJlZXhwcmVzcyB0aGUgR0RhdGVCdWlsZGVyIGluIGFueSB0aW1lem9uZSB1c2luZwotICAgICAqIG5vcm1hbGl6ZVRvVGltZVpvbmUoKS4gVGhlIG5vcm1hbGl6ZSgpIG1ldGhvZCBub3JtYWxpemVzIHRvIFVUQy4KLSAgICAgKiA8cD4KLSAgICAgKiBJZiB5b3Ugd2lzaCB0byBoYXZlIGEgdGltZSBvciBkYXRlIHRoYXQgaXNuJ3QgaW4gYSBzcGVjaWZpZWQgdGltZXpvbmUsCi0gICAgICogdGhlbiB1c2UgdGhlIGNvbnN0cnVjdG9yIHRoYXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgdGltZXpvbmUgYXJndW1lbnRzLgotICAgICAqCi0gICAgICogQHBhcmFtIHllYXIgdGhlIHllYXIKLSAgICAgKiBAcGFyYW0gbW9udGggdGhlIG1vbnRoLCBmcm9tIDEtMTIKLSAgICAgKiBAcGFyYW0gZGF5IHRoZSBkYXkgb2YgbW9udGgsIGZyb20gMS0zMQotICAgICAqIEBwYXJhbSBob3VyIHRoZSBob3VyIG9mIGRheSwgZnJvbSAwLTIzCi0gICAgICogQHBhcmFtIG1pbnV0ZSB0aGUgbWludXRlIG9mIGhvdXIsIGZyb20gMC01OQotICAgICAqIEBwYXJhbSBzZWNvbmQgdGhlIHNlY29uZCBvZiBtaW51dGUsIGZyb20gMC01OQotICAgICAqIEBwYXJhbSBmcmFjdGlvbiB0aGUgZnJhY3Rpb24gb2Ygc2Vjb25kLCAwLjAgdG8gMC45OTkuLi4gKG1heSBiZSBudWxsKQotICAgICAqIEBwYXJhbSB0elNpZ24gdGhlIHRpbWV6b25lIG9mZnNldCBzaWduLCBlaXRoZXIgKzEsIDAsIG9yIC0xCi0gICAgICogQHBhcmFtIHR6SG91ciB0aGUgdGltZXpvbmUgb2Zmc2V0IGhvdXIKLSAgICAgKiBAcGFyYW0gdHpNaW51dGUgdGhlIHRpbWV6b25lIG9mZnNldCBtaW51dGUgCi0gICAgICovCi0gICAgcHVibGljIEdEYXRlQnVpbGRlcigKLSAgICAgICAgICAgIGludCB5ZWFyLAotICAgICAgICAgICAgaW50IG1vbnRoLAotICAgICAgICAgICAgaW50IGRheSwKLSAgICAgICAgICAgIGludCBob3VyLAotICAgICAgICAgICAgaW50IG1pbnV0ZSwKLSAgICAgICAgICAgIGludCBzZWNvbmQsCi0gICAgICAgICAgICBCaWdEZWNpbWFsIGZyYWN0aW9uLAotICAgICAgICAgICAgaW50IHR6U2lnbiwKLSAgICAgICAgICAgIGludCB0ekhvdXIsCi0gICAgICAgICAgICBpbnQgdHpNaW51dGUpCi0gICAgewotICAgICAgICBfYml0cyA9IEhBU19USU1FWk9ORSB8IEhBU19ZRUFSIHwgSEFTX01PTlRIIHwgSEFTX0RBWSB8IEhBU19USU1FOwotCi0gICAgICAgIF9DWSA9IHllYXI7Ci0gICAgICAgIF9NID0gbW9udGg7Ci0gICAgICAgIF9EID0gZGF5OwotICAgICAgICBfaCA9IGhvdXI7Ci0gICAgICAgIF9tID0gbWludXRlOwotICAgICAgICBfcyA9IHNlY29uZDsKLSAgICAgICAgX2ZzID0gZnJhY3Rpb24gPT0gbnVsbCA/IEdEYXRlLl96ZXJvIDogZnJhY3Rpb247Ci0gICAgICAgIF90enNpZ24gPSB0elNpZ247Ci0gICAgICAgIF90emggPSB0ekhvdXI7Ci0gICAgICAgIF90em0gPSB0ek1pbnV0ZTsKLQotICAgICAgICBpZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGEgR0RhdGVCdWlsZGVyIGJhc2VkIG9uIGEgamF2YS51dGlsLkRhdGUuCi0gICAgICogPHA+Ci0gICAgICogVGhlIGN1cnJlbnQgb2Zmc2V0IG9mIHRoZSBkZWZhdWx0IHRpbWV6b25lIGlzIHVzZWQgYXMgdGhlIHRpbWV6b25lLgotICAgICAqIDxwPgotICAgICAqIEZvciBleGFtcGxlLCBpZiBlYXN0ZXJuIGRheWxpZ2h0IHRpbWUgaXMgaW4gZWZmZWN0IGF0IHRoZSBnaXZlbgotICAgICAqIGRhdGUsIHRoZSB0aW1lem9uZSBvbiB0aGUgZWFzdCBjb2FzdCBvZiB0aGUgdW5pdGVkIHN0YXRlcwotICAgICAqIHRyYW5zbGF0ZXMgdG8gR01ULTA1OjAwIChFU1QpICsgMTowMCAoRFQgb2Zmc2V0KSA9PSBHTVQtMDQ6MDAuCi0gICAgICogCi0gICAgICogQHBhcmFtIGRhdGUgdGhlIGRhdGUgb2JqZWN0IHRvIGNvcHkKLSAgICAgKi8KLSAgICBwdWJsaWMgR0RhdGVCdWlsZGVyKERhdGUgZGF0ZSkKLSAgICB7Ci0gICAgICAgIHNldERhdGUoZGF0ZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGUgaW5zdGFuY2UgaXMgaW1tdXRhYmxlLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzSW1tdXRhYmxlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgY29tYmluYXRpb24gb2YgZmxhZ3MgaW5kaWNhdGluZyB0aGUgaW5mb3JtYXRpb24KLSAgICAgKiBjb250YWluZWQgYnkgdGhpcyBHRGF0ZS4gIFRoZSBmaXZlIGZsYWdzIGFyZQotICAgICAqIEhBU19USU1FWk9ORSwgSEFTX1lFQVIsIEhBU19NT05USCwgSEFTX0RBWSwgYW5kIEhBU19USU1FLgotICAgICAqLwotICAgIHB1YmxpYyBpbnQgZ2V0RmxhZ3MoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9iaXRzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhpcyBkYXRlL3RpbWUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSB0aW1lem9uZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBoYXNUaW1lWm9uZSgpCi0gICAgICAgIHsgcmV0dXJuICgoX2JpdHMgJiBIQVNfVElNRVpPTkUpICE9IDApOyB9Ci0KLSAgICAvKioKLSAgICAgKiBUcnVlIGlmIHRoaXMgZGF0ZS90aW1lIHNwZWNpZmljYXRpb24gc3BlY2lmaWVzIGEgeWVhci4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBoYXNZZWFyKCkKLSAgICAgICAgeyByZXR1cm4gKChfYml0cyAmIEhBU19ZRUFSKSAhPSAwKTsgfQotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGlzIGRhdGUvdGltZSBzcGVjaWZpY2F0aW9uIHNwZWNpZmllcyBhIG1vbnRoLW9mLXllYXIuCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4gaGFzTW9udGgoKQotICAgICAgICB7IHJldHVybiAoKF9iaXRzICYgSEFTX01PTlRIKSAhPSAwKTsgfQotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGlzIGRhdGUvdGltZSBzcGVjaWZpY2F0aW9uIHNwZWNpZmllcyBhIGRheS1vZi1tb250aC4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBoYXNEYXkoKQotICAgICAgICB7IHJldHVybiAoKF9iaXRzICYgSEFTX0RBWSkgIT0gMCk7IH0KLQotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhpcyBkYXRlL3RpbWUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSB0aW1lLW9mLWRheS4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBoYXNUaW1lKCkKLSAgICAgICAgeyByZXR1cm4gKChfYml0cyAmIEhBU19USU1FKSAhPSAwKTsgfQotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGlzIGRhdGUvdGltZSBzcGVjaWZpY2F0aW9uIHNwZWNpZmllcyBhIGZ1bGwgZGF0ZSAoeWVhciwgbW9udGgsIGRheSkKLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBoYXNEYXRlKCkKLSAgICAgICAgeyByZXR1cm4gKChfYml0cyAmIChIQVNfREFZIHwgSEFTX01PTlRIIHwgSEFTX1lFQVIpKSA9PSAoSEFTX0RBWSB8IEhBU19NT05USCB8IEhBU19ZRUFSKSk7IH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHllYXIuIFNob3VsZCBiZSBhIGZvdXItZGlnaXQgeWVhciBzcGVjaWZpY2F0aW9uLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0WWVhcigpCi0gICAgICAgIHsgcmV0dXJuIF9DWTsgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIG1vbnRoLW9mLXllYXIuIEphbnVhcnkgaXMgMS4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgaW50IGdldE1vbnRoKCkKLSAgICAgICAgeyByZXR1cm4gX007ICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBkYXktb2YtbW9udGguIFRoZSBmaXJzdCBkYXkgb2YgZWFjaCBtb250aCBpcyAxLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0RGF5KCkKLSAgICAgICAgeyByZXR1cm4gX0Q7IH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIGhvdXItb2YtZGF5LiBNaWRuaWdodCBpcyAwLCBhbmQgMTFQTSBpcyAyMy4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgaW50IGdldEhvdXIoKQotICAgICAgICB7IHJldHVybiBfaDsgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgbWludXRlLW9mLWhvdXIuIFJhbmdlIGZyb20gMCB0byA1OS4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgaW50IGdldE1pbnV0ZSgpCi0gICAgICAgIHsgcmV0dXJuIF9tOyB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBzZWNvbmQtb2YtbWludXRlLiBSYW5nZSBmcm9tIDAgdG8gNTkuCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIGludCBnZXRTZWNvbmQoKQotICAgICAgICB7IHJldHVybiBfczsgfQotCi0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBmcmFjdGlvbi1vZi1zZWNvbmQuIFJhbmdlIGZyb20gMCAoaW5jbHVzaXZlKSB0byAxIChleGNsdXNpdmUpLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBCaWdEZWNpbWFsIGdldEZyYWN0aW9uKCkKLSAgICAgICAgeyByZXR1cm4gX2ZzOyB9Ci0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHJvdW5kZWQgbWlsbGlzZWNvbmQgdmFsdWUuIFJhbmdlIGZyb20gMCB0byA5OTkKLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgaW50IGdldE1pbGxpc2Vjb25kKCkKLSAgICB7Ci0gICAgICAgIGlmIChfZnMgPT0gbnVsbCB8fCBfZnMgPT0gR0RhdGUuX3plcm8pCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIF9mcy5zZXRTY2FsZSgzLCBCaWdEZWNpbWFsLlJPVU5EX0hBTEZfVVApLnVuc2NhbGVkVmFsdWUoKS5pbnRWYWx1ZSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHRpbWUgem9uZSBzaWduLiBGb3IgdGltZSB6b25lcyBlYXN0IG9mIEdNVCwKLSAgICAgKiB0aGlzIGlzIHBvc2l0aXZlOyBmb3IgdGltZSB6b25lcyB3ZXN0LCB0aGlzIGlzIG5lZ2F0aXZlLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0VGltZVpvbmVTaWduKCkKLSAgICAgICAgeyByZXR1cm4gX3R6c2lnbjsgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgdGltZSB6b25lIGhvdXIuCi0gICAgICogVGhpcyBpcyBhbHdheXMgcG9zaXRpdmU6IGZvciB0aGUgc2lnbiwgbG9vayBhdAotICAgICAqIGdldFRpbWVab25lU2lnbigpLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0VGltZVpvbmVIb3VyKCkKLSAgICAgICAgeyByZXR1cm4gX3R6aDsgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgdGltZSB6b25lIG1pbnV0ZXMuCi0gICAgICogVGhpcyBpcyBhbHdheXMgcG9zaXRpdmU6IGZvciB0aGUgc2lnbiwgbG9vayBhdAotICAgICAqIGdldFRpbWVab25lU2lnbigpLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0VGltZVpvbmVNaW51dGUoKQotICAgICAgICB7IHJldHVybiBfdHptOyB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSB5ZWFyLiBTaG91bGQgYmUgYSBmb3VyLWRpZ2l0IHllYXIgc3BlY2lmaWNhdGlvbi4KLSAgICAgKiBAcGFyYW0geWVhciB0aGUgeWVhcgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldFllYXIoaW50IHllYXIpCi0gICAgewotICAgICAgICBpZiAoeWVhciA8IC00NzEyIHx8IHllYXIgPiA5OTk5OTkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ5ZWFyIG91dCBvZiByYW5nZSIpOwotICAgICAgICBfYml0cyB8PSBIQVNfWUVBUjsgX0NZID0geWVhcjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBtb250aC1vZi15ZWFyLiBKYW51YXJ5IGlzIDEuCi0gICAgICogQHBhcmFtIG1vbnRoIHRoZSBtb250aCwgZnJvbSAxLTEyCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0TW9udGgoaW50IG1vbnRoKQotICAgIHsKLSAgICAgICAgaWYgKG1vbnRoIDwgMSB8fCBtb250aCA+IDEyKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibW9udGggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIF9iaXRzIHw9IEhBU19NT05USDsgX00gPSBtb250aDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBkYXktb2YtbW9udGguIFRoZSBmaXJzdCBkYXkgb2YgZWFjaCBtb250aCBpcyAxLgotICAgICAqIEBwYXJhbSBkYXkgdGhlIGRheSBvZiBtb250aCwgZnJvbSAxLTMxCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0RGF5KGludCBkYXkpCi0gICAgewotICAgICAgICBpZiAoZGF5IDwgMSB8fCBkYXkgPiAzMSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImRheSBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgX2JpdHMgfD0gSEFTX0RBWTsgX0QgPSBkYXk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgdGltZS4gSG91cnMgaW4gdGhlIGRheSByYW5nZSBmcm9tIDAgdG8gMjM7Ci0gICAgICogbWludXRlcyBhbmQgc2Vjb25kcyByYW5nZSBmcm9tIDAgdG8gNTk7IGFuZCBmcmFjdGlvbmFsCi0gICAgICogc2Vjb25kcyByYW5nZSBmcm9tIDAgKGluY2x1c2l2ZSkgdG8gMSAoZXhjbHVzaXZlKS4KLSAgICAgKiBUaGUgZnJhY3Rpb24gY2FuIGJlIG51bGwgYW5kIGlzIGFzc3VtZWQgdG8gYmUgemVyby4KLSAgICAgKiBAcGFyYW0gaG91ciB0aGUgaG91ciBvZiBkYXksIGZyb20gMC0yMwotICAgICAqIEBwYXJhbSBtaW51dGUgdGhlIG1pbnV0ZSBvZiBob3VyLCBmcm9tIDAtNTkKLSAgICAgKiBAcGFyYW0gc2Vjb25kIHRoZSBzZWNvbmQgb2YgbWludXRlLCBmcm9tIDAtNTkKLSAgICAgKiBAcGFyYW0gZnJhY3Rpb24gdGhlIGZyYWN0aW9uIG9mIHNlY29uZCwgMC4wIHRvIDAuOTk5Li4uIChtYXkgYmUgbnVsbCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRUaW1lKGludCBob3VyLCBpbnQgbWludXRlLCBpbnQgc2Vjb25kLCBCaWdEZWNpbWFsIGZyYWN0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKGhvdXIgPCAwIHx8IGhvdXIgPiAyMykKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImhvdXIgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIGlmIChtaW51dGUgPCAwIHx8IG1pbnV0ZSA+IDU5KQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibWludXRlIG91dCBvZiByYW5nZSIpOwotICAgICAgICBpZiAoc2Vjb25kIDwgMCB8fCBzZWNvbmQgPiA1OSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInNlY29uZCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgaWYgKGZyYWN0aW9uICE9IG51bGwgJiYgKGZyYWN0aW9uLnNpZ251bSgpIDwgMCB8fCBmcmFjdGlvbi5jb21wYXJlVG8oR0RhdGUuX29uZSkgPiAxKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImZyYWN0aW9uIG91dCBvZiByYW5nZSIpOwotICAgICAgICBfYml0cyB8PSBIQVNfVElNRTsKLSAgICAgICAgX2ggPSBob3VyOwotICAgICAgICBfbSA9IG1pbnV0ZTsKLSAgICAgICAgX3MgPSBzZWNvbmQ7Ci0gICAgICAgIF9mcyA9IGZyYWN0aW9uID09IG51bGwgPyBHRGF0ZS5femVybyA6IGZyYWN0aW9uOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIHRpbWUgem9uZSB3aXRob3V0IGNoYW5naW5nIHRoZSBvdGhlciB0aW1lCi0gICAgICogZmllbGRzLiBJZiB5b3Ugd2l0aCB0byBhZGp1c3Qgb3RoZXIgdGltZSBmaWVsZHMgdG8gZXhwcmVzcwotICAgICAqIHRoZSBzYW1lIGFjdHVhbCBtb21lbnQgaW4gdGltZSBpbiBhIGRpZmZlcmVudCB0aW1lIHpvbmUsCi0gICAgICogdXNlIG5vcm1hbGl6ZVRvVGltZVpvbmUuCi0gICAgICogPHA+Ci0gICAgICogVGltZXpvbmVzIG11c3QgYmUgYmV0d2VlbiAtMTQ6MDAgYW5kICsxNDowMC4gU2lnbgotICAgICAqIG11c3QgYmUgLTEgb3IgMSAob3IgMCBmb3IgVVRDIG9ubHkpLCBhbmQgdGhlIG9mZnNldCBob3VycwotICAgICAqIGFuZCBtaW51dGUgYXJndW1lbnRzIG11c3QgYmUgbm9ubmVnYXRpdmUuCi0gICAgICogCi0gICAgICogQHBhcmFtIHR6U2lnbiB0aGUgdGltZXpvbmUgb2Zmc2V0IHNpZ24sIGVpdGhlciArMSwgMCwgb3IgLTEKLSAgICAgKiBAcGFyYW0gdHpIb3VyIHRoZSB0aW1lem9uZSBvZmZzZXQgaG91cgotICAgICAqIEBwYXJhbSB0ek1pbnV0ZSB0aGUgdGltZXpvbmUgb2Zmc2V0IG1pbnV0ZSAKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRUaW1lWm9uZShpbnQgdHpTaWduLCBpbnQgdHpIb3VyLCBpbnQgdHpNaW51dGUpCi0gICAgewotICAgICAgICBpZiAoISgodHpTaWduID09IDAgJiYgdHpIb3VyID09IDAgJiYgdHpNaW51dGUgPT0gMCkgfHwKLSAgICAgICAgICAgICAgKCh0elNpZ24gPT0gLTEgfHwgdHpTaWduID09IDEpICYmCi0gICAgICAgICAgICAgICAodHpIb3VyID49IDAgJiYgdHpNaW51dGUgPj0gMCkgJiYKLSAgICAgICAgICAgICAgICh0ekhvdXIgPT0gMTQgJiYgdHpNaW51dGUgPT0gMCB8fCB0ekhvdXIgPCAxNCAmJiB0ek1pbnV0ZSA8IDYwKSkpKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigidGltZSB6b25lIG91dCBvZiByYW5nZSAoLTE0OjAwIHRvICsxNDowMCkuICgiICsKLSAgICAgICAgICAgICAgICAodHpTaWduPDAgPyAiLSIgOiAiKyIpICsgdHpIb3VyICsgIjoiICsgdHpNaW51dGUgKyAiKSIpOwotCi0gICAgICAgIF9iaXRzIHw9IEhBU19USU1FWk9ORTsKLSAgICAgICAgX3R6c2lnbiA9IHR6U2lnbjsKLSAgICAgICAgX3R6aCA9IHR6SG91cjsKLSAgICAgICAgX3R6bSA9IHR6TWludXRlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENsZWFycyB0aGUgeWVhci4gQWZ0ZXIgY2xlYXJpbmcsIGhhc1llYXIgcmV0dXJucyBmYWxzZSBhbmQgdGhlCi0gICAgICogdmFsdWUgb2YgZ2V0WWVhciBpcyB1bmRlZmluZWQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgY2xlYXJZZWFyKCkKLSAgICAgICAgeyBfYml0cyAmPSB+SEFTX1lFQVI7IF9DWSA9IDA7ICB9Ci0KLSAgICAvKioKLSAgICAgKiBDbGVhcnMgdGhlIG1vbnRoLW9mLXllYXIuIEFmdGVyIGNsZWFyaW5nLiBoYXNNb250aCByZXR1cm5zIGZhbHNlIGFuZAotICAgICAqIHRoZSB2YWx1ZSBvZiBnZXRNb250aCBpcyB1bmRlZmluZWQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgY2xlYXJNb250aCgpCi0gICAgICAgIHsgX2JpdHMgJj0gfkhBU19NT05USDsgX00gPSAwOyAgfQotCi0gICAgLyoqCi0gICAgICogQ2xlYXJzIHRoZSBkYXktb2YtbW9udGguIEFmdGVyIGNsZWFyaW5nLiBoYXNEYXkgcmV0dXJucyBmYWxzZSBhbmQKLSAgICAgKiB0aGUgdmFsdWUgb2YgZ2V0RGF5IGlzIHVuZGVmaW5lZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjbGVhckRheSgpCi0gICAgICAgIHsgX2JpdHMgJj0gfkhBU19EQVk7IF9EID0gMDsgIH0KLQotICAgIC8qKgotICAgICAqIENsZWFycyB0aGUgdGltZS1vZi1kYXkuCi0gICAgICogQWZ0ZXIgY2xlYXJpbmcuIGhhc1RpbWUgcmV0dXJucyBmYWxzZSBhbmQKLSAgICAgKiB0aGUgdmFsdWUgb2YgZ2V0VGltZSBpcyB1bmRlZmluZWQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgY2xlYXJUaW1lKCkKLSAgICB7Ci0gICAgICAgIF9iaXRzICY9IH5IQVNfVElNRTsKLSAgICAgICAgX2ggPSAwOwotICAgICAgICBfbSA9IDA7Ci0gICAgICAgIF9zID0gMDsKLSAgICAgICAgX2ZzID0gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDbGVhcnMgdGhlIHRpbWV6b25lLiBBZnRlciBjbGVhcmluZy4gaGFzVGltZVpvbmUgcmV0dXJucyBmYWxzZSBhbmQKLSAgICAgKiB0aGUgdmFsdWUgb2YgZ2V0VGltZVpvbmVIb3VyIGFuZCBnZXRUaW1lWm9uZU1pbnV0ZSBhcmUgdW5kZWZpbmVkLgotICAgICAqIERvZXMgbm90IGNoYW5nZSB0aGUgb3RoZXIgdGltZSBmaWVsZHMuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgY2xlYXJUaW1lWm9uZSgpCi0gICAgewotICAgICAgICBfYml0cyAmPSB+SEFTX1RJTUVaT05FOwotICAgICAgICBfdHpzaWduID0gMDsKLSAgICAgICAgX3R6aCA9IDA7Ci0gICAgICAgIF90em0gPSAwOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRydWUgaWYgYWxsIGRhdGUgZmllbGRzIGxpZSB3aXRoaW4gdGhlaXIgbGVnYWwgcmFuZ2VzLiAgQSBHRGF0ZUJ1aWxkZXIKLSAgICAgKiBjYW4gYmUgaW52YWxpZCwgZm9yIGV4YW1wbGUsIGlmIHlvdSBjaGFuZ2UgdGhlIG1vbnRoIHRvIEZlYnJ1YXJ5Ci0gICAgICogYW5kIHRoZSBkYXktb2YtbW9udGggaXMgMzEuCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNWYWxpZCgpCi0gICAgewotICAgICAgICByZXR1cm4gaXNWYWxpZEdEYXRlKHRoaXMpOwotICAgIH0KLQotICAgIC8qIHBhY2thZ2UgKi8gc3RhdGljIGZpbmFsIGJvb2xlYW4gaXNWYWxpZEdEYXRlKEdEYXRlU3BlY2lmaWNhdGlvbiBkYXRlKQotICAgIHsKLSAgICAgICAgaWYgKGRhdGUuaGFzTW9udGgoKSAmJiAoZGF0ZS5nZXRNb250aCgpIDwgMSB8fCBkYXRlLmdldE1vbnRoKCkgPiAxMikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGRhdGUuaGFzRGF5KCkgJiYgKGRhdGUuZ2V0RGF5KCkgPCAxIHx8IGRhdGUuZ2V0RGF5KCkgPiAzMSB8fAotICAgICAgICAgICAgZGF0ZS5nZXREYXkoKSA+IDI4ICYmIGRhdGUuaGFzTW9udGgoKSAmJgotICAgICAgICAgICAgICAgIChkYXRlLmhhc1llYXIoKSA/IGRhdGUuZ2V0RGF5KCkgPiBfbWF4RGF5SW5Nb250aEZvcihkYXRlLmdldFllYXIoKSwgZGF0ZS5nZXRNb250aCgpKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZS5nZXREYXkoKSA+IF9tYXhEYXlJbk1vbnRoKGRhdGUuZ2V0TW9udGgoKSkpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoZGF0ZS5oYXNUaW1lKCkgJiYgKGRhdGUuZ2V0SG91cigpIDwgMCB8fCBkYXRlLmdldEhvdXIoKSA+IDIzIHx8Ci0gICAgICAgICAgICBkYXRlLmdldE1pbnV0ZSgpIDwgMCB8fCBkYXRlLmdldE1pbnV0ZSgpID4gNTkgfHwKLSAgICAgICAgICAgIGRhdGUuZ2V0U2Vjb25kKCkgPCAwIHx8IGRhdGUuZ2V0U2Vjb25kKCkgPiA1OSB8fAotICAgICAgICAgICAgZGF0ZS5nZXRGcmFjdGlvbigpLnNpZ251bSgpIDwgMCB8fCBkYXRlLmdldEZyYWN0aW9uKCkuY29tcGFyZVRvKEdEYXRlLl9vbmUpID49IDApKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChkYXRlLmhhc1RpbWVab25lKCkgJiYKLSAgICAgICAgICAgICghKChkYXRlLmdldFRpbWVab25lU2lnbigpID09IDAgJiYgZGF0ZS5nZXRUaW1lWm9uZUhvdXIoKSA9PSAwICYmIGRhdGUuZ2V0VGltZVpvbmVNaW51dGUoKSA9PSAwKSB8fAotICAgICAgICAgICAgICAoKGRhdGUuZ2V0VGltZVpvbmVTaWduKCkgPT0gLTEgfHwgZGF0ZS5nZXRUaW1lWm9uZVNpZ24oKSA9PSArMSkgJiYKLSAgICAgICAgICAgICAgICAvLyBOQjogYWxsb3cgKzAwOjAwIGFuZCAtMDA6MDAKLSAgICAgICAgICAgICAgICAvLyAoZGF0ZS5nZXRUaW1lWm9uZUhvdXIoKSA9PSAwICYmIGRhdGUuZ2V0VGltZVpvbmVNaW51dGUoKSA+IDAgfHwgZGF0ZS5nZXRUaW1lWm9uZUhvdXIoKSA+IDAgJiYgZGF0ZS5nZXRUaW1lWm9uZU1pbnV0ZSgpID49IDApICYmCi0gICAgICAgICAgICAgICAoZGF0ZS5nZXRUaW1lWm9uZUhvdXIoKSA+PSAwICYmIGRhdGUuZ2V0VGltZVpvbmVNaW51dGUoKSA+PSAwKSAmJgotICAgICAgICAgICAgICAgKGRhdGUuZ2V0VGltZVpvbmVIb3VyKCkgPT0gMTQgJiYgZGF0ZS5nZXRUaW1lWm9uZU1pbnV0ZSgpID09IDAgfHwgZGF0ZS5nZXRUaW1lWm9uZUhvdXIoKSA8IDE0ICYmIGRhdGUuZ2V0VGltZVpvbmVNaW51dGUoKSA8IDYwKSkpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAvLyBldmVyeXRpbmcgbG9va3Mga29zaGVyCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogTm9ybWFsaXplcyB0aGUgaW5zdGFuY2UsIGVuc3VyaW5nIGRhdGUgYW5kIHRpbWUgZmllbGRzIGFyZSB3aXRoaW4KLSAgICAgKiB0aGVpciBub3JtYWwgcmFuZ2VzLgotICAgICAqIDxwPgotICAgICAqIElmIG5vIHRpbWV6b25lIG9yIG5vIHRpbWUgaXMgc3BlY2lmaWVkLCBvciBpZiBhIHBhcnRpYWwgZGF0ZSBpcyBzcGVjaWZpZWQsIHRoaXMKLSAgICAgKiBtZXRob2QgZG9lcyBub3RoaW5nLCBhbmQgbGVhdmVzIHRoZSB0aW1lem9uZSBpbmZvcm1hdGlvbiBhcy1pcy4KLSAgICAgKiA8cD4KLSAgICAgKiBJZiBhIHRpbWUgb3IgdGltZSBhbmQgZGF0ZSBpcyBzcGVjaWZpZWQsIHRoaXMgbWV0aG9kIG5vcm1hbGl6ZXMgdGhlIHRpbWV6b25lCi0gICAgICogdG8gVVRDLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG5vcm1hbGl6ZSgpCi0gICAgewotICAgICAgICAvLyBEYXRlVGltZSBvciBUaW1lLCB3aXRoIFRpbWVab25lOiBub3JtYWxpemUgdG8gVVRDLgotICAgICAgICAvLyBJbiB0aGUgcHJvY2VzcyBhbGwgdGhlIGZpZWxkcyB3aWxsIGJlIG5vcm1hbGl6ZWQuCi0gICAgICAgIGlmIChoYXNEYXkoKSA9PSBoYXNNb250aCgpICYmIGhhc0RheSgpID09IGhhc1llYXIoKSAmJgotICAgICAgICAgICAgaGFzVGltZVpvbmUoKSAmJiBoYXNUaW1lKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5vcm1hbGl6ZVRvVGltZVpvbmUoMCwgMCwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBObyB0aW1lem9uZSwgb3IgaW5jb21wbGV0ZSBkYXRlLgotICAgICAgICAgICAgbG9uZyBjYXJyeSA9IDA7Ci0KLSAgICAgICAgICAgIGlmIChoYXNUaW1lKCkpCi0gICAgICAgICAgICAgICAgY2FycnkgPSBfbm9ybWFsaXplVGltZSgpOwotCi0gICAgICAgICAgICBpZiAoaGFzRGF5KCkpCi0gICAgICAgICAgICAgICAgX0QgKz0gY2Fycnk7Ci0KLSAgICAgICAgICAgIGlmIChoYXNEYXRlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX25vcm1hbGl6ZURhdGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGhhc01vbnRoKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gd2l0aCBpbmNvbXBsZXRlIGRhdGVzLCBqdXN0IG1vbnRocyBjYW4gYmUgbm9ybWFsaXplZDoKLSAgICAgICAgICAgICAgICAvLyBkYXlzIHN0YXkgZGVub3JtYWxpemVkLgotICAgICAgICAgICAgICAgIGlmIChfTSA8IDEgfHwgX00gPiAxMikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGludCB0ZW1wID0gX007Ci0gICAgICAgICAgICAgICAgICAgIF9NID0gX21vZHVsbyh0ZW1wLCAxLCAxMyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNZZWFyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBfQ1kgPSBfQ1kgKyAoaW50KV9mUXVvdGllbnQodGVtcCwgMSwgMTMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvcyBmcm9tIGZyYWN0aW9uYWwgc2Vjb25kcwotICAgICAgICBpZiAoaGFzVGltZSgpICYmIF9mcyAhPSBudWxsICYmIF9mcy5zY2FsZSgpID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKF9mcy5zaWdudW0oKSA9PSAwKQotICAgICAgICAgICAgICAgIF9mcyA9IEdEYXRlLl96ZXJvOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEJpZ0ludGVnZXIgYmkgPSBfZnMudW5zY2FsZWRWYWx1ZSgpOwotICAgICAgICAgICAgICAgIFN0cmluZyBzdHIgPSBiaS50b1N0cmluZygpOwotICAgICAgICAgICAgICAgIGludCBsYXN0emVybzsKLSAgICAgICAgICAgICAgICBmb3IgKGxhc3R6ZXJvID0gc3RyLmxlbmd0aCgpOyBsYXN0emVybyA+IDA7IGxhc3R6ZXJvIC09IDEpCi0gICAgICAgICAgICAgICAgICAgIGlmIChzdHIuY2hhckF0KGxhc3R6ZXJvIC0gMSkgIT0gJzAnKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKGxhc3R6ZXJvIDwgc3RyLmxlbmd0aCgpKQotICAgICAgICAgICAgICAgICAgICBfZnMgPSBfZnMuc2V0U2NhbGUoX2ZzLnNjYWxlKCkgLSBzdHIubGVuZ3RoKCkgKyBsYXN0emVybyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJZiB0aGUgdGltZSBhbmQgdGltZXpvbmUgYXJlIGtub3duLCB0aGlzIG1ldGhvZCBjaGFuZ2VzIHRoZSB0aW1lem9uZSB0byB0aGUKLSAgICAgKiBzcGVjaWZpZWQgVVRDIG9mZnNldCwgYWx0ZXJpbmcgbWludXRlcywgaG91cnMsIGRheSwgbW9udGgsIGFuZCB5ZWFyIGFzCi0gICAgICogbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IHRoZSBhY3R1YWwgZGVzY3JpYmVkIG1vbWVudCBpbiB0aW1lIGlzIHRoZSBzYW1lLgotICAgICAqIDxwPgotICAgICAqIEl0IGlzIGFuIGVycm9yIHRvIG9wZXJhdGUgb24gaW5zdGFuY2VzIHdpdGhvdXQgYSB0aW1lIG9yIHRpbWV6b25lLCBvcgotICAgICAqIHdpdGggYSBwYXJ0aWFsbHkgc3BlY2lmaWVkIGRhdGUuCi0gICAgICogCi0gICAgICogQHBhcmFtIHR6U2lnbiB0aGUgdGltZXpvbmUgb2Zmc2V0IHNpZ24sIGVpdGhlciArMSwgMCwgb3IgLTEKLSAgICAgKiBAcGFyYW0gdHpIb3VyIHRoZSB0aW1lem9uZSBvZmZzZXQgaG91cgotICAgICAqIEBwYXJhbSB0ek1pbnV0ZSB0aGUgdGltZXpvbmUgb2Zmc2V0IG1pbnV0ZSAKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBub3JtYWxpemVUb1RpbWVab25lKGludCB0elNpZ24sIGludCB0ekhvdXIsIGludCB0ek1pbnV0ZSkKLSAgICB7Ci0gICAgICAgIGlmICghKCh0elNpZ24gPT0gMCAmJiB0ekhvdXIgPT0gMCAmJiB0ek1pbnV0ZSA9PSAwKSB8fAotICAgICAgICAgICAgICAoKHR6U2lnbiA9PSAtMSB8fCB0elNpZ24gPT0gMSkgJiYKLSAgICAgICAgICAgICAgICh0ekhvdXIgPT0gMCAmJiB0ek1pbnV0ZSA+IDAgfHwgdHpIb3VyID4gMCAmJiB0ek1pbnV0ZSA+PSAwKSAmJgotICAgICAgICAgICAgICAgKHR6SG91ciA9PSAxNCAmJiB0ek1pbnV0ZSA9PSAwIHx8IHR6SG91ciA8IDE0ICYmIHR6TWludXRlIDwgNjApKSkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ0aW1lIHpvbmUgbXVzdCBiZSBiZXR3ZW4gLTE0OjAwIGFuZCArMTQ6MDAiKTsKLQotICAgICAgICBpZiAoIWhhc1RpbWVab25lKCkgfHwgIWhhc1RpbWUoKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oImNhbm5vdCBub3JtYWxpemUgdGltZSB6b25lIHdpdGhvdXQgYm90aCB0aW1lIGFuZCB0aW1lem9uZSIpOwotCi0gICAgICAgIGlmICghKGhhc0RheSgpID09IGhhc01vbnRoKCkgJiYgaGFzRGF5KCkgPT0gaGFzWWVhcigpKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oImNhbm5vdCBkbyBkYXRlIG1hdGggd2l0aG91dCBhIGNvbXBsZXRlIGRhdGUiKTsKLQotICAgICAgICBpbnQgaHNoaWZ0ID0gdHpTaWduICogdHpIb3VyIC0gX3R6c2lnbiAqIF90emg7Ci0gICAgICAgIGludCBtc2hpZnQgPSB0elNpZ24gKiB0ek1pbnV0ZSAtIF90enNpZ24gKiBfdHptOwotCi0gICAgICAgIF90enNpZ24gPSB0elNpZ247Ci0gICAgICAgIF90emggPSB0ekhvdXI7Ci0gICAgICAgIF90em0gPSB0ek1pbnV0ZTsKLSAgICAgICAgYWRkRHVyYXRpb24oMSwgMCwgMCwgMCwgaHNoaWZ0LCBtc2hpZnQsIDAsIG51bGwpOwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogQWRkcyBhIGdpdmVuIGR1cmF0aW9uIHRvIHRoZSBkYXRlL3RpbWUuCi0gICAgICogCi0gICAgICogQHBhcmFtIGR1cmF0aW9uIHRoZSBkdXJhdGlvbiB0byBhZGQKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBhZGRHRHVyYXRpb24oR0R1cmF0aW9uU3BlY2lmaWNhdGlvbiBkdXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGFkZER1cmF0aW9uKGR1cmF0aW9uLmdldFNpZ24oKSwgZHVyYXRpb24uZ2V0WWVhcigpLCBkdXJhdGlvbi5nZXRNb250aCgpLCBkdXJhdGlvbi5nZXREYXkoKSwKLSAgICAgICAgICAgICAgICAgICAgZHVyYXRpb24uZ2V0SG91cigpLCBkdXJhdGlvbi5nZXRNaW51dGUoKSwgZHVyYXRpb24uZ2V0U2Vjb25kKCksIGR1cmF0aW9uLmdldEZyYWN0aW9uKCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN1YnRyYWN0cyBhIGdpdmVuIGR1cmF0aW9uIGZyb20gdGhlIGRhdGUvdGltZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gZHVyYXRpb24gdGhlIGR1cmF0aW9uIHRvIHN1YnRyYWN0Ci0gICAgICovCi0gICAgcHVibGljIHZvaWQgc3VidHJhY3RHRHVyYXRpb24oR0R1cmF0aW9uU3BlY2lmaWNhdGlvbiBkdXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGFkZER1cmF0aW9uKC1kdXJhdGlvbi5nZXRTaWduKCksIGR1cmF0aW9uLmdldFllYXIoKSwgZHVyYXRpb24uZ2V0TW9udGgoKSwgZHVyYXRpb24uZ2V0RGF5KCksCi0gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uLmdldEhvdXIoKSwgZHVyYXRpb24uZ2V0TWludXRlKCksIGR1cmF0aW9uLmdldFNlY29uZCgpLCBkdXJhdGlvbi5nZXRGcmFjdGlvbigpKTsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIE5vcm1hbGl6ZXMgdGhlIGRhdGUgYnkgY2Fycnlpbmcgb3ZlciB0byB0aGUgeWVhciBhbnkgbW9udGhzIG91dHNpZGUgMS4uMTIKLSAgICAgKiBhbmQgY2Fycnlpbmcgb3ZlciB0byB0aGUgbW9udGggYW55IGRheXMgb3V0c2lkZSAxLi4oZGF5cy1pbi1tb250aCkuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIF9ub3JtYWxpemVEYXRlKCkKLSAgICB7Ci0gICAgICAgIGlmIChfTSA8IDEgfHwgX00gPiAxMiB8fCBfRCA8IDEgfHwgX0QgPiBfbWF4RGF5SW5Nb250aEZvcihfQ1ksIF9NKSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gZml4IG1vbnRocyBmaXJzdAotICAgICAgICAgICAgaW50IHRlbXAgPSBfTTsKLSAgICAgICAgICAgIF9NID0gX21vZHVsbyh0ZW1wLCAxLCAxMyk7Ci0gICAgICAgICAgICBfQ1kgPSBfQ1kgKyAoaW50KV9mUXVvdGllbnQodGVtcCwgMSwgMTMpOwotCi0gICAgICAgICAgICAvLyB0aGVuIHB1bGwgZGF5cyBvdXQKLSAgICAgICAgICAgIGludCBleHRyYWRheXMgPSBfRCAtIDE7Ci0gICAgICAgICAgICBfRCA9IDE7Ci0KLSAgICAgICAgICAgIC8vIHRoZW4gdXNlIHRoZSBqdWxpYW4gZGF0ZSBmdW5jdGlvbiB0byBmaXgKLSAgICAgICAgICAgIHNldEp1bGlhbkRhdGUoZ2V0SnVsaWFuRGF0ZSgpICsgZXh0cmFkYXlzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIE5vcm1hbGl6ZXMgdGltZSBzbyB0aGF0IGZyYWN0aW9ucyBhcmUgMC4uMShleGMpLCBzZWNvbmRzL21pbnV0ZXMgMC4uNTksCi0gICAgICogYW5kIGhvdXJzIDAuLjI0LiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF5cyB0byBjYXJyeSBvdmVyIGZyb20gbm9ybWFsaXppbmcKLSAgICAgKiBhd2F5IG1vcmUgdGhhbiAyNCBob3Vycy4KLSAgICAgKi8KLSAgICBwcml2YXRlIGxvbmcgX25vcm1hbGl6ZVRpbWUoKQotICAgIHsKLSAgICAgICAgbG9uZyBjYXJyeSA9IDA7Ci0gICAgICAgIGxvbmcgdGVtcDsKLQotICAgICAgICAvLyBmcmFjdGlvbnMKLSAgICAgICAgaWYgKF9mcyAhPSBudWxsICYmIChfZnMuc2lnbnVtKCkgPCAwIHx8IF9mcy5jb21wYXJlVG8oR0RhdGUuX29uZSkgPj0gMCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJpZ0RlY2ltYWwgYmRjYXJyeSA9IF9mcy5zZXRTY2FsZSgwLCBCaWdEZWNpbWFsLlJPVU5EX0ZMT09SKTsKLSAgICAgICAgICAgIF9mcyA9IF9mcy5zdWJ0cmFjdChiZGNhcnJ5KTsKLSAgICAgICAgICAgIGNhcnJ5ID0gYmRjYXJyeS5sb25nVmFsdWUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjYXJyeSAhPSAwIHx8IF9zIDwgMCB8fCBfcyA+IDU5IHx8IF9tIDwgMCB8fCBfbSA+IDUwIHx8IF9oIDwgMCB8fCBfaCA+IDIzKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBzZWNvbmRzCi0gICAgICAgICAgICB0ZW1wID0gX3MgKyBjYXJyeTsKLSAgICAgICAgICAgIGNhcnJ5ID0gX2ZRdW90aWVudCh0ZW1wLCA2MCk7Ci0gICAgICAgICAgICBfcyA9IF9tb2QodGVtcCwgNjAsIGNhcnJ5KTsKLQotICAgICAgICAgICAgLy8gbWludXRlcwotICAgICAgICAgICAgdGVtcCA9IF9tICsgY2Fycnk7Ci0gICAgICAgICAgICBjYXJyeSA9IF9mUXVvdGllbnQodGVtcCwgNjApOwotICAgICAgICAgICAgX20gPSBfbW9kKHRlbXAsIDYwLCBjYXJyeSk7Ci0KLSAgICAgICAgICAgIC8vIGhvdXJzCi0gICAgICAgICAgICB0ZW1wID0gX2ggKyBjYXJyeTsKLSAgICAgICAgICAgIGNhcnJ5ID0gX2ZRdW90aWVudCh0ZW1wLCAyNCk7Ci0gICAgICAgICAgICBfaCA9IF9tb2QodGVtcCwgMjQsIGNhcnJ5KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBjYXJyeTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBZGRzIGEgZ2l2ZW4gZHVyYXRpb24gdG8gdGhlIGRhdGUvdGltZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gc2lnbiArMSB0byBhZGQsIC0xIHRvIHN1YnRyYWN0Ci0gICAgICogQHBhcmFtIHllYXIgdGhlIG51bWJlciBvZiB5ZWFycyB0byBhZGQKLSAgICAgKiBAcGFyYW0gbW9udGggdGhlIG51bWJlciBvZiBtb250aHMgdG8gYWRkCi0gICAgICogQHBhcmFtIGRheSB0aGUgbnVtYmVyIG9mIGRheXMgdG8gYWRkCi0gICAgICogQHBhcmFtIGhvdXIgdGhlIG51bWJlciBvZiBob3VycyB0byBhZGQKLSAgICAgKiBAcGFyYW0gbWludXRlIHRoZSBudW1iZXIgb2YgbWludXRlcyB0byBhZGQKLSAgICAgKiBAcGFyYW0gc2Vjb25kIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byBhZGQKLSAgICAgKiBAcGFyYW0gZnJhY3Rpb24gdGhlIG51bWJlciBvZiBmcmFjdGlvbmFsIHNlY29uZHMgdG8gYWRkIChtYXkgYmUgbnVsbCkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBhZGREdXJhdGlvbihpbnQgc2lnbiwgaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaG91ciwgaW50IG1pbnV0ZSwgaW50IHNlY29uZCwgQmlnRGVjaW1hbCBmcmFjdGlvbikKLSAgICB7Ci0gICAgICAgIGJvb2xlYW4gdGltZW1hdGggPSBob3VyICE9IDAgfHwgbWludXRlICE9IDAgfHwgc2Vjb25kICE9IDAgfHwgZnJhY3Rpb24gIT0gbnVsbCAmJiBmcmFjdGlvbi5zaWdudW0oKSAhPSAwOwotICAgICAgICBpZiAodGltZW1hdGggJiYgIWhhc1RpbWUoKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oImNhbm5vdCBkbyB0aW1lIG1hdGggd2l0aG91dCBhIGNvbXBsZXRlIHRpbWUiKTsKLSAgICAgICAgYm9vbGVhbiBkYXRlbWF0aCA9IGhhc0RheSgpICYmIChkYXkgIT0gMCB8fCB0aW1lbWF0aCk7Ci0gICAgICAgIGlmIChkYXRlbWF0aCAmJiAhaGFzRGF0ZSgpKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiY2Fubm90IGRvIGRhdGUgbWF0aCB3aXRob3V0IGEgY29tcGxldGUgZGF0ZSIpOwotCi0gICAgICAgIGludCB0ZW1wOwotCi0gICAgICAgIC8vIG1vbnRocyArIHllYXJzIGFyZSBlYXN5Ci0gICAgICAgIGlmIChtb250aCAhPSAwIHx8IHllYXIgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gUHJlcGFyZSB0aGUgX0QgdG8gYmUgcGVnZ2VkIGJlZm9yZSBjaGFuZ2luZyBtb250aAotICAgICAgICAgICAgaWYgKGhhc0RheSgpKQotICAgICAgICAgICAgICAgIF9ub3JtYWxpemVEYXRlKCk7Ci0KLSAgICAgICAgICAgIC8vIEFkZCBtb250aHMgYW5kIHllYXJzCi0gICAgICAgICAgICB0ZW1wID0gX00gKyBzaWduICogbW9udGg7Ci0gICAgICAgICAgICBfTSA9IF9tb2R1bG8odGVtcCwgMSwgMTMpOwotICAgICAgICAgICAgX0NZID0gX0NZICsgc2lnbiAqIHllYXIgKyAoaW50KV9mUXVvdGllbnQodGVtcCwgMSwgMTMpOwotCi0gICAgICAgICAgICAvLyBJbiBuZXcgbW9udGgsIGRheSBtYXkgbmVlZCB0byBiZSBwZWdnZWQgYmVmb3JlIHByb2NlZWRpbmcKLSAgICAgICAgICAgIGlmIChoYXNEYXkoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQoX0QgPj0gMSk7Ci0gICAgICAgICAgICAgICAgdGVtcCA9IF9tYXhEYXlJbk1vbnRoRm9yKF9DWSwgX00pOwotICAgICAgICAgICAgICAgIGlmIChfRCA+IHRlbXApCi0gICAgICAgICAgICAgICAgICAgIF9EID0gdGVtcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGxvbmcgY2FycnkgPSAwOwotCi0gICAgICAgIGlmICh0aW1lbWF0aCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gZnJhY3Rpb25zCi0gICAgICAgICAgICBpZiAoZnJhY3Rpb24gIT0gbnVsbCAmJiBmcmFjdGlvbi5zaWdudW0oKSAhPSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChfZnMuc2lnbnVtKCkgPT0gMCAmJiBzaWduID09IDEpCi0gICAgICAgICAgICAgICAgICAgIF9mcyA9IGZyYWN0aW9uOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgX2ZzID0gKHNpZ24gPT0gMSkgPyBfZnMuYWRkKGZyYWN0aW9uKSA6IF9mcy5zdWJ0cmFjdChmcmFjdGlvbik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHNlY29uZHMsIG1pbnV0ZXMsIGhvdXJzCi0gICAgICAgICAgICBfcyArPSBzaWduICogc2Vjb25kOwotICAgICAgICAgICAgX20gKz0gc2lnbiAqIG1pbnV0ZTsKLSAgICAgICAgICAgIF9oICs9IHNpZ24gKiBob3VyOwotCi0gICAgICAgICAgICAvLyBub3JtYWxpemUgdGltZQotICAgICAgICAgICAgY2FycnkgPSBfbm9ybWFsaXplVGltZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRhdGVtYXRoKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBkYXlzOiBtYXkgcmVxdWlyZSByZW5vcm1hbGl6YXRpb24KLSAgICAgICAgICAgIF9EICs9IHNpZ24gKiBkYXkgKyBjYXJyeTsKLSAgICAgICAgICAgIF9ub3JtYWxpemVEYXRlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHaXZlbiB7eWVhcixtb250aH0gY29tcHV0ZXMgbWF4aW11bQotICAgICAqIG51bWJlciBvZiBkYXlzIGZvciBnaXZlbiBtb250aAotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGludCBfbWF4RGF5SW5Nb250aEZvcihpbnQgeWVhciwgaW50IG1vbnRoKQotICAgIHsKLSAgICAgICAgaWYgKG1vbnRoID09IDQgfHwgbW9udGggPT0gNiB8fCBtb250aCA9PSA5IHx8IG1vbnRoID09IDExKQotICAgICAgICAgICAgcmV0dXJuIDMwOwotCi0gICAgICAgIGlmIChtb250aCA9PSAyKQotICAgICAgICAgICAgcmV0dXJuIChfaXNMZWFwWWVhcih5ZWFyKSA/IDI5IDogMjgpOwotCi0gICAgICAgIHJldHVybiAzMTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHaXZlbiB7eWVhcixtb250aH0gY29tcHV0ZXMgbWF4aW11bQotICAgICAqIG51bWJlciBvZiBkYXlzIGZvciBnaXZlbiBtb250aAotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGludCBfbWF4RGF5SW5Nb250aChpbnQgbW9udGgpCi0gICAgewotICAgICAgICBpZiAobW9udGggPT0gNCB8fCBtb250aCA9PSA2IHx8IG1vbnRoID09IDkgfHwgbW9udGggPT0gMTEpCi0gICAgICAgICAgICByZXR1cm4gMzA7Ci0KLSAgICAgICAgaWYgKG1vbnRoID09IDIpCi0gICAgICAgICAgICByZXR1cm4gMjk7Ci0KLSAgICAgICAgcmV0dXJuIDMxOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIEp1bGlhbiBkYXRlIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBHcmVnb3JpYW4gZGF0ZS4KLSAgICAgKiBUaGUgSnVsaWFuIGRhdGUgKEpEKSBpcyBhIGNvbnRpbnVvdXMgY291bnQgb2YgZGF5cyBmcm9tCi0gICAgICogMSBKYW51YXJ5IDQ3MTMgQkMgKD0gLTQ3MTIgSmFudWFyeSAxKS4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgaW50IGdldEp1bGlhbkRhdGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGp1bGlhbkRhdGVGb3JHRGF0ZSh0aGlzKTsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIEdyZWdvcmlhbiBkYXRlIGJhc2VkIG9uIHRoZSBnaXZlbiBKdWxpYW4gZGF0ZS4KLSAgICAgKiBUaGUgSnVsaWFuIGRhdGUgKEpEKSBpcyBhIGNvbnRpbnVvdXMgY291bnQgb2YgZGF5cyBmcm9tCi0gICAgICogMSBKYW51YXJ5IDQ3MTMgQkMgKD0gLTQ3MTIgSmFudWFyeSAxKS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0ganVsaWFuZGF5IHRoZSBqdWxpYW4gZGF5IG51bWJlcgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEp1bGlhbkRhdGUoaW50IGp1bGlhbmRheSkKLSAgICB7Ci0gICAgICAgIGlmIChqdWxpYW5kYXkgPCAwKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiZGF0ZSBiZWZvcmUgeWVhciAtNDcxMiIpOwotCi0gICAgICAgIGludCB0ZW1wOwotICAgICAgICBpbnQgcWVwb2M7Ci0KLSAgICAgICAgLy8gZnJvbSBodHRwOi8vYWEudXNuby5uYXZ5Lm1pbC9mYXEvZG9jcy9KRF9Gb3JtdWxhLmh0bWwKLSAgICAgICAgdGVtcCA9IGp1bGlhbmRheSArIDY4NTY5OwotICAgICAgICBxZXBvYyA9IDQgKiB0ZW1wIC8gMTQ2MDk3OwotICAgICAgICB0ZW1wID0gdGVtcCAtICgxNDYwOTcgKiBxZXBvYyArIDMpIC8gNDsKLSAgICAgICAgX0NZID0gNDAwMCAqICh0ZW1wICsgMSkgLyAxNDYxMDAxOwotICAgICAgICB0ZW1wID0gdGVtcCAtIDE0NjEgKiBfQ1kgLyA0ICsgMzE7Ci0gICAgICAgIF9NID0gODAgKiB0ZW1wIC8gMjQ0NzsKLSAgICAgICAgX0QgPSB0ZW1wIC0gMjQ0NyAqIF9NIC8gODA7Ci0gICAgICAgIHRlbXAgPSBfTSAvIDExOwotICAgICAgICBfTSA9IF9NICsgMiAtIDEyICogdGVtcDsKLSAgICAgICAgX0NZID0gMTAwICogKHFlcG9jIC0gNDkpICsgX0NZICsgdGVtcDsKLQotICAgICAgICBfYml0cyB8PSBIQVNfREFZIHwgSEFTX01PTlRIIHwgSEFTX1lFQVI7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBjdXJyZW50IHRpbWUgYW5kIGRhdGUgYmFzZWQgb24gYSBqYXZhLnV0aWwuRGF0ZSBpbnN0YW5jZS4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgdGltZXpvbmUgb2Zmc2V0IHVzZWQgaXMgYmFzZWQgb24gdGhlIGRlZmF1bHQgVGltZVpvbmUuIChUaGUKLSAgICAgKiBkZWZhdWx0IFRpbWVab25lIGlzIGNvbnN1bHRlZCB0byBpbmNvcnBvcmF0ZSBkYXlsaWdodCBzYXZpbmdzIG9mZnNldHMKLSAgICAgKiBpZiBhcHBsaWNhYmxlIGZvciB0aGUgY3VycmVudCBkYXRlIGFzIHdlbGwgYXMgdGhlIGJhc2UgdGltZXpvbmUgb2Zmc2V0LikKLSAgICAgKiA8cD4KLSAgICAgKiBJZiB5b3Ugd2lzaCB0byBub3JtYWxpemUgdGhlIHRpbWV6b25lLCBlLmcuLCB0byBVVEMsIGZvbGxvdyB0aGlzIHdpdGgKLSAgICAgKiBhIGNhbGwgdG8gbm9ybWFsaXplVG9UaW1lWm9uZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gZGF0ZSB0aGUgRGF0ZSBvYmplY3QgdG8gY29weQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldERhdGUoRGF0ZSBkYXRlKQotICAgIHsKLSAgICAgICAgLy8gRGVmYXVsdCB0aW1lem9uZQotICAgICAgICBUaW1lWm9uZSBkdHogPSBUaW1lWm9uZS5nZXREZWZhdWx0KCk7Ci0gICAgICAgIGludCBvZmZzZXQgPSBkdHouZ2V0T2Zmc2V0KGRhdGUuZ2V0VGltZSgpKTsKLSAgICAgICAgaW50IG9mZnNldHNpZ24gPSAxOwotICAgICAgICBpZiAob2Zmc2V0IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgb2Zmc2V0c2lnbiA9IC0xOwotICAgICAgICAgICAgb2Zmc2V0ID0gLW9mZnNldDsKLSAgICAgICAgfQotICAgICAgICBpbnQgb2Zmc2V0bWluID0gb2Zmc2V0IC8gKDEwMDAgKiA2MCk7Ci0gICAgICAgIGludCBvZmZzZXRociA9IG9mZnNldG1pbiAvIDYwOwotICAgICAgICBvZmZzZXRtaW4gPSBvZmZzZXRtaW4gLSBvZmZzZXRociAqIDYwOwotCi0gICAgICAgIHNldFRpbWVab25lKG9mZnNldHNpZ24sIG9mZnNldGhyLCBvZmZzZXRtaW4pOwotICAgICAgICAKLSAgICAgICAgLy8gcGFyYW5vaWE6IHR6LmdldE9mZnNldCBjYW4gcmV0dXJuIGZyYWN0aW9ucyBvZiBtaW51dGVzLCBidXQgd2UgbXVzdCByb3VuZAotICAgICAgICBpbnQgcm91bmRlZG9mZnNldCA9IG9mZnNldHNpZ24gKiAob2Zmc2V0aHIgKiA2MCArIG9mZnNldG1pbikgKiA2MCAqIDEwMDA7Ci0KLSAgICAgICAgLy8gbWlkbmlnaHQKLSAgICAgICAgc2V0VGltZSgwLCAwLCAwLCBHRGF0ZS5femVybyk7Ci0KLSAgICAgICAgLy8gU2V0IHRvIEphbnVhcnkgMSwgMTk3MC4KLSAgICAgICAgLy8gc2V0SnVsaWFuRGF0ZSgyNDQwNTg4KTsKLSAgICAgICAgX2JpdHMgfD0gSEFTX0RBWSB8IEhBU19NT05USCB8IEhBU19ZRUFSOwotICAgICAgICBfQ1kgPSAxOTcwOwotICAgICAgICBfTSA9IDE7Ci0gICAgICAgIF9EID0gMTsKLQotICAgICAgICAvLyBBZGQgYSBkdXJhdGlvbiByZXByZXNlbnRpbmcgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMKLSAgICAgICAgYWRkR0R1cmF0aW9uKG5ldyBHRHVyYXRpb24oMSwgMCwgMCwgMCwgMCwgMCwgMCwKLSAgICAgICAgICAgICAgICBCaWdEZWNpbWFsLnZhbHVlT2YoZGF0ZS5nZXRUaW1lKCkgKyByb3VuZGVkb2Zmc2V0LCAzKSkpOwotCi0gICAgICAgIC8vIHNwZWNpYWwgY2FzZTogc3MuMDAwIC0+IHNzCi0gICAgICAgIGlmIChfZnMuc2lnbnVtKCkgPT0gMCkKLSAgICAgICAgICAgIF9mcyA9IEdEYXRlLl96ZXJvOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDb3BpZXMgYSBHRGF0ZVNwZWNpZmljYXRpb24sIGNvbXBsZXRlbHkgcmVwbGFjaW5nIHRoZSBjdXJyZW50Ci0gICAgICogaW5mb3JtYXRpb24gaW4gdGhpcyBHRGF0ZUJ1aWxkZXIuCi0gICAgICogCi0gICAgICogQHBhcmFtIGdkYXRlIHRoZSBHRGF0ZVNwZWNpZmljYXRpb24gdG8gY29weQotICAgICAqLyAKLSAgICBwdWJsaWMgdm9pZCBzZXRHRGF0ZShHRGF0ZVNwZWNpZmljYXRpb24gZ2RhdGUpCi0gICAgewotICAgICAgICBfYml0cyA9IGdkYXRlLmdldEZsYWdzKCkgJiAoSEFTX1RJTUVaT05FIHwgSEFTX1lFQVIgfCBIQVNfTU9OVEggfCBIQVNfREFZIHwgSEFTX1RJTUUpOwotICAgICAgICBfQ1kgPSBnZGF0ZS5nZXRZZWFyKCk7Ci0gICAgICAgIF9NID0gZ2RhdGUuZ2V0TW9udGgoKTsKLSAgICAgICAgX0QgPSBnZGF0ZS5nZXREYXkoKTsKLSAgICAgICAgX2ggPSBnZGF0ZS5nZXRIb3VyKCk7Ci0gICAgICAgIF9tID0gZ2RhdGUuZ2V0TWludXRlKCk7Ci0gICAgICAgIF9zID0gZ2RhdGUuZ2V0U2Vjb25kKCk7Ci0gICAgICAgIF9mcyA9IGdkYXRlLmdldEZyYWN0aW9uKCk7Ci0gICAgICAgIF90enNpZ24gPSBnZGF0ZS5nZXRUaW1lWm9uZVNpZ24oKTsKLSAgICAgICAgX3R6aCA9IGdkYXRlLmdldFRpbWVab25lSG91cigpOwotICAgICAgICBfdHptID0gZ2RhdGUuZ2V0VGltZVpvbmVNaW51dGUoKTsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIFJldHJpZXZlcyB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgdGltZSBhcyBhbiB7QGxpbmsgWG1sQ2FsZW5kYXJ9LgotICAgICAqIDxwPgotICAgICAqIHtAbGluayBYbWxDYWxlbmRhcn0gaXMgYSBzdWJjbGFzcyBvZiB7QGxpbmsgamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyfQotICAgICAqIHdoaWNoIGlzIHNsaWdodGx5IGN1c3RvbWl6ZWQgdG8gbWF0Y2ggWE1MIHNjaGVtYSBkYXRlIHJ1bGVzLgotICAgICAqIDxwPgotICAgICAqIFRoZSByZXR1cm5lZCB7QGxpbmsgWG1sQ2FsZW5kYXJ9IGhhcyBvbmx5IHRob3NlIHRpbWUgYW5kIGRhdGUgZmllbGRzCi0gICAgICogc2V0IHRoYXQgYXJlIHJlZmxlY3RlZCBpbiB0aGUgR0RhdGUgb2JqZWN0LiAgQmVjYXVzZSBvZiB0aGUgd2F5IHRoZQotICAgICAqIHtAbGluayBqYXZhLnV0aWwuQ2FsZW5kYXJ9IGNvbnRyYWN0IHdvcmtzLCBhbnkgaW5mb3JtYXRpb24gaW4gdGhlIGlzU2V0KCkgdmFuaXNoZXMKLSAgICAgKiBhcyBzb29uIGFzIHlvdSB2aWV3IGFueSB1bnNldCBmaWVsZCB1c2luZyBnZXQoKSBtZXRob2RzLgotICAgICAqIFRoaXMgbWVhbnMgdGhhdCBpZiBpdCBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB3aGljaCBkYXRlIGZpZWxkcwotICAgICAqIGFyZSBzZXQsIHlvdSBtdXN0IGNhbGwgaXNTZXQoKSBmaXJzdCBiZWZvcmUgZ2V0KCkuCi0gICAgICovCi0gICAgcHVibGljIFhtbENhbGVuZGFyIGdldENhbGVuZGFyKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgWG1sQ2FsZW5kYXIodGhpcyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0cmlldmVzIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCB0aW1lIGFzIGEgamF2YS51dGlsLkRhdGUKLSAgICAgKiBpbnN0YW5jZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgRGF0ZSBnZXREYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBkYXRlRm9yR0RhdGUodGhpcyk7Ci0gICAgfQotCi0gICAgLyogcGFja2FnZSAqLyBzdGF0aWMgaW50IGp1bGlhbkRhdGVGb3JHRGF0ZShHRGF0ZVNwZWNpZmljYXRpb24gZGF0ZSkKLSAgICB7Ci0gICAgICAgIGlmICghZGF0ZS5oYXNEYXRlKCkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJjYW5ub3QgZG8gZGF0ZSBtYXRoIHdpdGhvdXQgYSBjb21wbGV0ZSBkYXRlIik7Ci0KLSAgICAgICAgLy8gZnJvbSBodHRwOi8vYWEudXNuby5uYXZ5Lm1pbC9mYXEvZG9jcy9KRF9Gb3JtdWxhLmh0bWwKLSAgICAgICAgaW50IHJlc3VsdCA9IGRhdGUuZ2V0RGF5KCktMzIwNzUrMTQ2MSooZGF0ZS5nZXRZZWFyKCkrNDgwMCsoZGF0ZS5nZXRNb250aCgpLTE0KS8xMikvNCsKLSAgICAgICAgICAgIDM2NyooZGF0ZS5nZXRNb250aCgpLTItKGRhdGUuZ2V0TW9udGgoKS0xNCkvMTIqMTIpLzEyLTMqKChkYXRlLmdldFllYXIoKSs0OTAwKyhkYXRlLmdldE1vbnRoKCktMTQpLzEyKS8xMDApLzQ7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA8IDApCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJkYXRlIHRvbyBmYXIgaW4gdGhlIHBhc3QgKHllYXIgYWxsb3dlZCB0byAtNDcxMikiKTsKLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qIHBhY2thZ2UgKi8gc3RhdGljIERhdGUgZGF0ZUZvckdEYXRlKEdEYXRlU3BlY2lmaWNhdGlvbiBkYXRlKQotICAgIHsKLSAgICAgICAgbG9uZyBqRGF0ZSA9IGp1bGlhbkRhdGVGb3JHRGF0ZShkYXRlKTsKLSAgICAgICAgbG9uZyB0bzE5NzBEYXRlID0gakRhdGUgLSAyNDQwNTg4OwotICAgICAgICBsb25nIHRvMTk3ME1zID0gMTAwMCAqIDYwICogNjAgKiAyNCAqIHRvMTk3MERhdGU7Ci0KLSAgICAgICAgdG8xOTcwTXMgKz0gZGF0ZS5nZXRNaWxsaXNlY29uZCgpOwotICAgICAgICB0bzE5NzBNcyArPSBkYXRlLmdldFNlY29uZCgpICogMTAwMDsKLSAgICAgICAgdG8xOTcwTXMgKz0gZGF0ZS5nZXRNaW51dGUoKSAqIDYwICogMTAwMDsKLSAgICAgICAgdG8xOTcwTXMgKz0gZGF0ZS5nZXRIb3VyKCkgKiA2MCAqIDYwICogMTAwMDsKLSAgICAgICAgaWYgKGRhdGUuaGFzVGltZVpvbmUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgdG8xOTcwTXMgLT0gKGRhdGUuZ2V0VGltZVpvbmVNaW51dGUoKSAqIGRhdGUuZ2V0VGltZVpvbmVTaWduKCkpICogNjAgKiAxMDAwOwotICAgICAgICAgICAgdG8xOTcwTXMgLT0gKGRhdGUuZ2V0VGltZVpvbmVIb3VyKCkgKiBkYXRlLmdldFRpbWVab25lU2lnbigpKSAqIDYwICogNjAgKiAxMDAwOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgVGltZVpvbmUgZGVmID0gVGltZVpvbmUuZ2V0RGVmYXVsdCgpOwotICAgICAgICAgICAgaW50IG9mZnNldCA9IGRlZi5nZXRPZmZzZXQodG8xOTcwTXMpOwotICAgICAgICAgICAgdG8xOTcwTXMgLT0gb2Zmc2V0OwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRvMTk3ME1zKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUcnVlIGZvciBsZWFwIHllYXJzLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gX2lzTGVhcFllYXIoaW50IHllYXIpCi0gICAgewotICAgICAgICAvLyBCVUdCVUc6IEp1bGlhbiBjYWxlbmRhcj8KLSAgICAgICAgcmV0dXJuICgoeWVhciAlIDQgPT0gMCkgJiYgKCh5ZWFyICUgMTAwICE9IDApIHx8ICh5ZWFyICUgNDAwID09IDApKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogZlF1b3RpZW50KGEsIGIpID0gdGhlIGdyZWF0ZXN0IGludGVnZXIgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGEvYgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgX2ZRdW90aWVudChsb25nIGEsIGludCBiKQotICAgIHsKLSAgICAgICAgaWYgKChhIDwgMCkgPT0gKGIgPCAwKSkKLSAgICAgICAgICAgIHJldHVybiBhIC8gYjsKLQotICAgICAgICByZXR1cm4gLSgoYiAtIGEgLSAxKSAvIGIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIG1vZHVsbyhhLCBiKSA9IGEgLSBmUXVvdGllbnQoYSxiKSpiCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IF9tb2QobG9uZyBhLCBpbnQgYiwgbG9uZyBxdW90aWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoaW50KShhIC0gcXVvdGllbnQqYikgOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIG1vZHVsbyhhIC0gbG93LCBoaWdoIC0gbG93KSArIGxvdwotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBfbW9kdWxvKGxvbmcgdGVtcCwgaW50IGxvdywgaW50IGhpZ2gpCi0gICAgewotICAgICAgICBsb25nIGEgPSB0ZW1wIC0gbG93OwotICAgICAgICBpbnQgYiA9IGhpZ2ggLSBsb3c7Ci0gICAgICAgIHJldHVybiAoX21vZChhLCBiLCBfZlF1b3RpZW50KGEsIGIpKSArIGxvdykgOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFF1b3RpZW50KGEgLSBsb3csIGhpZ2ggLSBsb3cpCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBfZlF1b3RpZW50KGxvbmcgdGVtcCwgaW50IGxvdywgaW50IGhpZ2gpCi0gICAgewotICAgICAgICByZXR1cm4gX2ZRdW90aWVudCh0ZW1wIC0gbG93LCBoaWdoIC0gbG93KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRvIHRoZSBmaXJzdCBwb3NzaWJsZSBtb21lbnQgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbgotICAgICAqIHNwZWNpZmljYXRpb24uCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIF9zZXRUb0ZpcnN0TW9tZW50KCkKLSAgICB7Ci0gICAgICAgIC8vIDE1ODQgd2FzIHRoZSBmaXJzdCBsZWFwIHllYXIgZHVyaW5nIHdoaWNoIHRoZSBHcmVnb3JpYW4KLSAgICAgICAgLy8gY2FsZW5kYXIgd2FzIGluIHVzZTogc2VlbXMgbGlrZSB0aGUgbW9zdCByZWFzb25hYmxlICJmaXJzdCIKLSAgICAgICAgLy8geWVhciB0byB1c2UgaW4gYWJzZW5jZSBvZiBhIHllYXIuCi0KLSAgICAgICAgaWYgKCFoYXNZZWFyKCkpCi0gICAgICAgICAgICBzZXRZZWFyKDE1ODQpOwotCi0gICAgICAgIGlmICghaGFzTW9udGgoKSkKLSAgICAgICAgICAgIHNldE1vbnRoKDEpOwotCi0gICAgICAgIGlmICghaGFzRGF5KCkpCi0gICAgICAgICAgICBzZXREYXkoMSk7Ci0KLSAgICAgICAgaWYgKCFoYXNUaW1lKCkpCi0gICAgICAgICAgICBzZXRUaW1lKDAsIDAsIDAsIEdEYXRlLl96ZXJvKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb21wYXJpc29uIHRvIGFub3RoZXIgR0RhdGUuCi0gICAgICogPHVsPgotICAgICAqIDxsaT5SZXR1cm5zIC0xIGlmIHRoaXMgPCBkYXRlLiAobGVzcy10aGFuKQotICAgICAqIDxsaT5SZXR1cm5zIDAgaWYgdGhpcyA9PSBkYXRlLiAoZXF1YWwpCi0gICAgICogPGxpPlJldHVybnMgMSBpZiB0aGlzID4gZGF0ZS4gKGdyZWF0ZXItdGhhbikKLSAgICAgKiA8bGk+UmV0dXJucyAyIGlmIHRoaXMgPD4gZGF0ZS4gKGluY29tcGFyYWJsZSkKLSAgICAgKiA8L3VsPgotICAgICAqIFR3byBpbnN0YW5jZXMgYXJlIGluY29tcGFyYWJsZSBpZiB0aGV5IGhhdmUgZGlmZmVyZW50IGFtb3VudHMKLSAgICAgKiBvZiBpbmZvcm1hdGlvbi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gZGF0ZXNwZWMgdGhlIGRhdGUgdG8gY29tcGFyZSBhZ2FpbnN0Ci0gICAgICovCi0gICAgcHVibGljIGZpbmFsIGludCBjb21wYXJlVG9HRGF0ZShHRGF0ZVNwZWNpZmljYXRpb24gZGF0ZXNwZWMpCi0gICAgewotICAgICAgICByZXR1cm4gY29tcGFyZUdEYXRlKHRoaXMsIGRhdGVzcGVjKTsKLSAgICB9Ci0KLQotICAgIC8qIHBhY2thZ2UgKi8gc3RhdGljIGZpbmFsIGludCBjb21wYXJlR0RhdGUoR0RhdGVTcGVjaWZpY2F0aW9uIHRkYXRlLCBHRGF0ZVNwZWNpZmljYXRpb24gZGF0ZXNwZWMpCi0gICAgewotICAgICAgICAvLyBzYW1lIGFtb3VudCBvZiBpbmZvcm1hdGlvbjogbG9va3MgZ29vZAotICAgICAgICBpbnQgYml0ZGlmZiA9IHRkYXRlLmdldEZsYWdzKCkgXiBkYXRlc3BlYy5nZXRGbGFncygpOwotCi0gICAgICAgIGVhc3k6IGlmICgoYml0ZGlmZiAmIChIQVNfWUVBUiB8IEhBU19NT05USCB8IEhBU19EQVkgfCBIQVNfVElNRSB8IEhBU19USU1FWk9ORSkpID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBvdGhlciBkYXRlIG5lZWRzIHRvIGJlIG5vcm1hbGl6ZWQgdG8KLSAgICAgICAgICAgIC8vIG91ciB0aW1lem9uZSwgbWFrZSBhIGNsb25lIGFuZCBkbyBzbyBpZiBwb3NzaWJsZQotICAgICAgICAgICAgaWYgKHRkYXRlLmhhc1RpbWVab25lKCkgJiYKLSAgICAgICAgICAgICAgICAoZGF0ZXNwZWMuZ2V0VGltZVpvbmVIb3VyKCkgIT0gdGRhdGUuZ2V0VGltZVpvbmVIb3VyKCkgfHwKLSAgICAgICAgICAgICAgICAgZGF0ZXNwZWMuZ2V0VGltZVpvbmVNaW51dGUoKSAhPSB0ZGF0ZS5nZXRUaW1lWm9uZU1pbnV0ZSgpIHx8Ci0gICAgICAgICAgICAgICAgIGRhdGVzcGVjLmdldFRpbWVab25lU2lnbigpICE9IHRkYXRlLmdldFRpbWVab25lU2lnbigpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkYXRlc3BlYyA9IG5ldyBHRGF0ZUJ1aWxkZXIoZGF0ZXNwZWMpOwotCi0gICAgICAgICAgICAgICAgaW50IGZsYWdzID0gdGRhdGUuZ2V0RmxhZ3MoKSAmIChIQVNfWUVBUiB8IEhBU19NT05USCB8IEhBU19EQVkpOwotICAgICAgICAgICAgICAgIGlmIChmbGFncyAhPSAwICYmIGZsYWdzICE9IChIQVNfWUVBUiB8IEhBU19NT05USCB8IEhBU19EQVkpIHx8ICF0ZGF0ZS5oYXNUaW1lKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGVzZSBjYXNlcyB3ZSdsbCBuZWVkIHRvIGZpbGwgaW4gZmllbGRzCi0gICAgICAgICAgICAgICAgICAgICgoR0RhdGVCdWlsZGVyKWRhdGVzcGVjKS5fc2V0VG9GaXJzdE1vbWVudCgpOwotICAgICAgICAgICAgICAgICAgICB0ZGF0ZSA9IG5ldyBHRGF0ZUJ1aWxkZXIodGRhdGUpOwotICAgICAgICAgICAgICAgICAgICAoKEdEYXRlQnVpbGRlcil0ZGF0ZSkuX3NldFRvRmlyc3RNb21lbnQoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAoKEdEYXRlQnVpbGRlcilkYXRlc3BlYykubm9ybWFsaXplVG9UaW1lWm9uZSh0ZGF0ZS5nZXRUaW1lWm9uZVNpZ24oKSwgdGRhdGUuZ2V0VGltZVpvbmVIb3VyKCksIHRkYXRlLmdldFRpbWVab25lTWludXRlKCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBjb21wYXJlIGJ5IGZpZWxkCi0gICAgICAgICAgICByZXR1cm4gZmllbGR3aXNlQ29tcGFyZSh0ZGF0ZSwgZGF0ZXNwZWMpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gZGlmZmVyZW50IGFtb3VudHMgb2YgaW5mb3JtYXRpb24gKGV4Y2VwdCB0aW1lem9uZSk6IG5vdCBjb21wYXJhYmxlCi0gICAgICAgIGlmICgoYml0ZGlmZiAmIChIQVNfWUVBUiB8IEhBU19NT05USCB8IEhBU19EQVkgfCBIQVNfVElNRSkpICE9IDApCi0gICAgICAgICAgICByZXR1cm4gMjsKLQotICAgICAgICAvLyBUaGUgc2NoZW1hIHNwZWMgc2F5cyB3ZSBzaG91bGQgdHJ5IHRvIGNvbXBhcmUgd2l0aC10aW1lem9uZSBhbmQKLSAgICAgICAgLy8gd2l0aG91dC10aW1lem9uZSBzcGVjaWZpY2F0aW9ucy4uLiBXZWxsLCBPSywgc3VyZSwgaWYgdGhleSBzYXkgc28uCi0KLSAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIHRpbWV6b25lIGJ1dCB0aGUgb3RoZXIgZG9lczogcmV2ZXJzZSB0aGUgY2FsbAotICAgICAgICBpZiAoIXRkYXRlLmhhc1RpbWVab25lKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCByZXN1bHQgPSBjb21wYXJlR0RhdGUoZGF0ZXNwZWMsIHRkYXRlKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQgPT0gMiA/IDIgOiAtcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTm93IHRkYXRlIGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBhIHRpbWV6b25lIGFuZCBkYXRlc3BlYyBub3QuCi0KLSAgICAgICAgLy8gVG8gbXVjayB3aXRoIHRoZSB0aW1lcywgbWFrZSBjbG9uZXMKLSAgICAgICAgR0RhdGVCdWlsZGVyIHBkYXRlID0gbmV3IEdEYXRlQnVpbGRlcih0ZGF0ZSk7Ci0KLSAgICAgICAgLy8gVG8gY292ZXIgdGhlIG9uZSB1bmNvdmVyZWQgY2FzZTogaWYgb25lIGRhdGUgaXMgMDIvMjggYW5kIHRoZQotICAgICAgICAvLyBvdGhlciBkYXRlIGlzIDAzLzAxLCBzaGlmdCBkYXlzIGNsb3NlciBieSBvbmUgdG8gc2ltdWxhdGUgYmVpbmcKLSAgICAgICAgLy8gdGhlIGxhc3QgZGF5IG9mIHRoZSBtb250aCB3aXRoaW4gYSBsZWFwIHllYXIKLSAgICAgICAgaWYgKCh0ZGF0ZS5nZXRGbGFncygpICYgKEhBU19ZRUFSIHwgSEFTX01PTlRIIHwgSEFTX0RBWSkpID09IChIQVNfTU9OVEggfCBIQVNfREFZKSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHRkYXRlLmdldERheSgpID09IDI4ICYmIHRkYXRlLmdldE1vbnRoKCkgPT0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoZGF0ZXNwZWMuZ2V0RGF5KCkgPT0gMDEgJiYgZGF0ZXNwZWMuZ2V0TW9udGgoKSA9PSAzKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcGRhdGUuc2V0RGF5KDI5KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChkYXRlc3BlYy5nZXREYXkoKSA9PSAyOCAmJiBkYXRlc3BlYy5nZXRNb250aCgpID09IDIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHRkYXRlLmdldERheSgpID09IDAxICYmIHRkYXRlLmdldE1vbnRoKCkgPT0gMykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHBkYXRlLnNldE1vbnRoKDAyKTsKLSAgICAgICAgICAgICAgICAgICAgcGRhdGUuc2V0RGF5KDI5KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGb3IgdGltZXNwYW5zLCBjb21wYXJlIGJ5IGZpcnN0IGluc3RhbnQgb2YgdGltZQotICAgICAgICAvLyBwb3NzaWJsZS4gVGhlcmVmb3JlLCBmaWxsIGluIE1pZG5pZ2h0LCBKYW51YXJ5IDEsIDE1ODQgKGEgbGVhcCB5ZWFyKQotICAgICAgICAvLyBpbiBhYnNlbmNlIG9mIG90aGVyIGluZm9ybWF0aW9uLgotICAgICAgICBwZGF0ZS5fc2V0VG9GaXJzdE1vbWVudCgpOwotCi0gICAgICAgIC8vIFAgPCBRIGlmIFAgPCAoUSB3aXRoIHRpbWUgem9uZSArMTQ6MDApCi0gICAgICAgIEdEYXRlQnVpbGRlciBxcGx1c2RhdGUgPSBuZXcgR0RhdGVCdWlsZGVyKGRhdGVzcGVjKTsKLSAgICAgICAgcXBsdXNkYXRlLl9zZXRUb0ZpcnN0TW9tZW50KCk7Ci0gICAgICAgIHFwbHVzZGF0ZS5zZXRUaW1lWm9uZSgxLCAxNCwgMCk7Ci0gICAgICAgIHFwbHVzZGF0ZS5ub3JtYWxpemVUb1RpbWVab25lKHRkYXRlLmdldFRpbWVab25lU2lnbigpLCB0ZGF0ZS5nZXRUaW1lWm9uZUhvdXIoKSwgdGRhdGUuZ2V0VGltZVpvbmVNaW51dGUoKSk7Ci0gICAgICAgIGlmIChmaWVsZHdpc2VDb21wYXJlKHBkYXRlLCBxcGx1c2RhdGUpID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgICAgIC8vIFAgPiBRIGlmIFAgPiAoUSB3aXRoIHRpbWUgem9uZSAtMTQ6MDApCi0gICAgICAgIEdEYXRlQnVpbGRlciBxbWludXNkYXRlID0gcXBsdXNkYXRlOwotICAgICAgICBxbWludXNkYXRlLnNldEdEYXRlKGRhdGVzcGVjKTsKLSAgICAgICAgcW1pbnVzZGF0ZS5fc2V0VG9GaXJzdE1vbWVudCgpOwotICAgICAgICBxbWludXNkYXRlLnNldFRpbWVab25lKC0xLCAxNCwgMCk7Ci0gICAgICAgIHFtaW51c2RhdGUubm9ybWFsaXplVG9UaW1lWm9uZSh0ZGF0ZS5nZXRUaW1lWm9uZVNpZ24oKSwgdGRhdGUuZ2V0VGltZVpvbmVIb3VyKCksIHRkYXRlLmdldFRpbWVab25lTWludXRlKCkpOwotICAgICAgICBpZiAoZmllbGR3aXNlQ29tcGFyZShwZGF0ZSwgcW1pbnVzZGF0ZSkgPT0gMSkKLSAgICAgICAgICAgIHJldHVybiAxOwotCi0gICAgICAgIC8vIFAgPD4gUSBvdGhlcndpc2UKLSAgICAgICAgcmV0dXJuIDI7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRG9lcyBhIHNpbXBsZSBtb3N0LXNpZ25pZmljYW50LWRpZ2l0LWZpcnN0IGNvbXBhcmlzb24sCi0gICAgICogaWdub3JpbmcgYW55IHRpbWV6b25lIG9yIGhhcy9kb2Vzbid0IGhhdmUgaXNzdWVzLgotICAgICAqIFRoZSBkYXRhIG11c3QgaGF2ZSBiZWVuIGRpZ2VzdGVkIGZpcnN0LgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGludCBmaWVsZHdpc2VDb21wYXJlKEdEYXRlU3BlY2lmaWNhdGlvbiB0ZGF0ZSwgR0RhdGVTcGVjaWZpY2F0aW9uIGRhdGUpCi0gICAgewotICAgICAgICBpZiAodGRhdGUuaGFzWWVhcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgQ1kgPSBkYXRlLmdldFllYXIoKTsKLSAgICAgICAgICAgIGludCBUQ1kgPSB0ZGF0ZS5nZXRZZWFyKCk7Ci0gICAgICAgICAgICBpZiAoVENZIDwgQ1kpIHJldHVybiAtMTsKLSAgICAgICAgICAgIGlmIChUQ1kgPiBDWSkgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRkYXRlLmhhc01vbnRoKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBNID0gZGF0ZS5nZXRNb250aCgpOwotICAgICAgICAgICAgaW50IFRNID0gdGRhdGUuZ2V0TW9udGgoKTsKLSAgICAgICAgICAgIGlmIChUTSA8IE0pIHJldHVybiAtMTsKLSAgICAgICAgICAgIGlmIChUTSA+IE0pIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0ZGF0ZS5oYXNEYXkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IEQgPSBkYXRlLmdldERheSgpOwotICAgICAgICAgICAgaW50IFREID0gdGRhdGUuZ2V0RGF5KCk7Ci0gICAgICAgICAgICBpZiAoVEQgPCBEKSByZXR1cm4gLTE7Ci0gICAgICAgICAgICBpZiAoVEQgPiBEKSByZXR1cm4gMTsKLSAgICAgICAgfQotICAgICAgICBpZiAodGRhdGUuaGFzVGltZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgaCA9IGRhdGUuZ2V0SG91cigpOwotICAgICAgICAgICAgaW50IHRoID0gdGRhdGUuZ2V0SG91cigpOwotICAgICAgICAgICAgaWYgKHRoIDwgaCkgcmV0dXJuIC0xOwotICAgICAgICAgICAgaWYgKHRoID4gaCkgcmV0dXJuIDE7Ci0gICAgICAgICAgICBpbnQgbSA9IGRhdGUuZ2V0TWludXRlKCk7Ci0gICAgICAgICAgICBpbnQgdG0gPSB0ZGF0ZS5nZXRNaW51dGUoKTsKLSAgICAgICAgICAgIGlmICh0bSA8IG0pIHJldHVybiAtMTsKLSAgICAgICAgICAgIGlmICh0bSA+IG0pIHJldHVybiAxOwotICAgICAgICAgICAgaW50IHMgPSBkYXRlLmdldFNlY29uZCgpOwotICAgICAgICAgICAgaW50IHRzID0gdGRhdGUuZ2V0U2Vjb25kKCk7Ci0gICAgICAgICAgICBpZiAodHMgPCBzKSByZXR1cm4gLTE7Ci0gICAgICAgICAgICBpZiAodHMgPiBzKSByZXR1cm4gMTsKLSAgICAgICAgICAgIEJpZ0RlY2ltYWwgZnMgPSBkYXRlLmdldEZyYWN0aW9uKCk7Ci0gICAgICAgICAgICBCaWdEZWNpbWFsIHRmcyA9IHRkYXRlLmdldEZyYWN0aW9uKCk7Ci0gICAgICAgICAgICBpZiAodGZzID09IG51bGwgJiYgZnMgPT0gbnVsbCkgcmV0dXJuIDA7Ci0gICAgICAgICAgICByZXR1cm4gKHRmcyA9PSBudWxsID8gR0RhdGUuX3plcm8gOiB0ZnMpLmNvbXBhcmVUbyhmcyA9PSBudWxsID8gR0RhdGUuX3plcm8gOiBmcyk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBidWlsdGluIHR5cGUgY29kZSBmb3IgdGhlIHNoYXBlIG9mIHRoZSBpbmZvcm1hdGlvbgotICAgICAqIGNvbnRhaW5lZCBpbiB0aGlzIGluc3RhbmNlLCBvciAwIGlmIHRoZQotICAgICAqIGluc3RhbmNlIGRvZXNuJ3QgY29udGFpbiBpbmZvcm1hdGlvbiBjb3JyZXNwb25kaW5nIHRvIGEKLSAgICAgKiBTY2hlbWEgdHlwZS4KLSAgICAgKiA8cD4gCi0gICAgICogVmFsdWUgd2lsbCBiZSBlcXVhbCB0bwotICAgICAqIHtAbGluayBTY2hlbWFUeXBlI0JUQ19OT1RfQlVJTFRJTn0sCi0gICAgICoge0BsaW5rIFNjaGVtYVR5cGUjQlRDX0dfWUVBUn0sCi0gICAgICoge0BsaW5rIFNjaGVtYVR5cGUjQlRDX0dfWUVBUl9NT05USH0sCi0gICAgICoge0BsaW5rIFNjaGVtYVR5cGUjQlRDX0dfTU9OVEh9LAotICAgICAqIHtAbGluayBTY2hlbWFUeXBlI0JUQ19HX01PTlRIX0RBWX0sCi0gICAgICoge0BsaW5rIFNjaGVtYVR5cGUjQlRDX0dfREFZfSwKLSAgICAgKiB7QGxpbmsgU2NoZW1hVHlwZSNCVENfREFURX0sCi0gICAgICoge0BsaW5rIFNjaGVtYVR5cGUjQlRDX0RBVEVfVElNRX0sIG9yCi0gICAgICoge0BsaW5rIFNjaGVtYVR5cGUjQlRDX1RJTUV9LgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0QnVpbHRpblR5cGVDb2RlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBidGNGb3JGbGFncyhfYml0cyk7Ci0gICAgfQotCi0gICAgLyogcGFja2FnZSAqLyBzdGF0aWMgaW50IGJ0Y0ZvckZsYWdzKGludCBmbGFncykKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoZmxhZ3MgJiAoSEFTX1lFQVIgfCBIQVNfTU9OVEggfCBIQVNfREFZIHwgSEFTX1RJTUUpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIEhBU19ZRUFSOgotICAgICAgICAgICAgICAgIHJldHVybiBTY2hlbWFUeXBlLkJUQ19HX1lFQVI7Ci0gICAgICAgICAgICBjYXNlIEhBU19ZRUFSIHwgSEFTX01PTlRIOgotICAgICAgICAgICAgICAgIHJldHVybiBTY2hlbWFUeXBlLkJUQ19HX1lFQVJfTU9OVEg7Ci0gICAgICAgICAgICBjYXNlIEhBU19NT05USDoKLSAgICAgICAgICAgICAgICByZXR1cm4gU2NoZW1hVHlwZS5CVENfR19NT05USDsKLSAgICAgICAgICAgIGNhc2UgSEFTX01PTlRIIHwgSEFTX0RBWToKLSAgICAgICAgICAgICAgICByZXR1cm4gU2NoZW1hVHlwZS5CVENfR19NT05USF9EQVk7Ci0gICAgICAgICAgICBjYXNlIEhBU19EQVk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNjaGVtYVR5cGUuQlRDX0dfREFZOwotICAgICAgICAgICAgY2FzZSBIQVNfWUVBUiB8IEhBU19NT05USCB8IEhBU19EQVk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNjaGVtYVR5cGUuQlRDX0RBVEU7Ci0gICAgICAgICAgICBjYXNlIEhBU19ZRUFSIHwgSEFTX01PTlRIIHwgSEFTX0RBWSB8IEhBU19USU1FOgotICAgICAgICAgICAgICAgIHJldHVybiBTY2hlbWFUeXBlLkJUQ19EQVRFX1RJTUU7Ci0gICAgICAgICAgICBjYXNlIEhBU19USU1FOgotICAgICAgICAgICAgICAgIHJldHVybiBTY2hlbWFUeXBlLkJUQ19USU1FOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gU2NoZW1hVHlwZS5CVENfTk9UX0JVSUxUSU47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDbGVhcnMgdGhlIGZpZWxkcyBpbiB0aGlzIEdEYXRlQnVpbGRlciB0aGF0IGFyZSBub3QgYXBwbGljYWJsZQotICAgICAqIGZvciB0aGUgZ2l2ZW4gU2NoZW1hVHlwZSBkYXRlIGNvZGUuICBUaGUgY29kZSBzaG91bGQgYmUKLSAgICAgKiB7QGxpbmsgU2NoZW1hVHlwZSNCVENfR19ZRUFSfSwKLSAgICAgKiB7QGxpbmsgU2NoZW1hVHlwZSNCVENfR19ZRUFSX01PTlRIfSwKLSAgICAgKiB7QGxpbmsgU2NoZW1hVHlwZSNCVENfR19NT05USH0sCi0gICAgICoge0BsaW5rIFNjaGVtYVR5cGUjQlRDX0dfTU9OVEhfREFZfSwKLSAgICAgKiB7QGxpbmsgU2NoZW1hVHlwZSNCVENfR19EQVl9LAotICAgICAqIHtAbGluayBTY2hlbWFUeXBlI0JUQ19EQVRFfSwKLSAgICAgKiB7QGxpbmsgU2NoZW1hVHlwZSNCVENfREFURV9USU1FfSwgb3IKLSAgICAgKiB7QGxpbmsgU2NoZW1hVHlwZSNCVENfVElNRX0uCi0gICAgICogCi0gICAgICogQHBhcmFtIHR5cGVDb2RlIHRoZSB0eXBlIGNvZGUgdG8gYXBwbHkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRCdWlsdGluVHlwZUNvZGUoaW50IHR5cGVDb2RlKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlQ29kZSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX1lFQVI6Ci0gICAgICAgICAgICAgICAgLy9IQVNfWUVBUgotICAgICAgICAgICAgICAgIGNsZWFyTW9udGgoKTsKLSAgICAgICAgICAgICAgICBjbGVhckRheSgpOwotICAgICAgICAgICAgICAgIGNsZWFyVGltZSgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19ZRUFSX01PTlRIOgotICAgICAgICAgICAgICAgIC8vSEFTX1lFQVIgfCBIQVNfTU9OVEgKLSAgICAgICAgICAgICAgICBjbGVhckRheSgpOwotICAgICAgICAgICAgICAgIGNsZWFyVGltZSgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGNhc2UgU2NoZW1hVHlwZS5CVENfR19NT05USDoKLSAgICAgICAgICAgICAgICAvL0hBU19NT05USAotICAgICAgICAgICAgICAgIGNsZWFyWWVhcigpOwotICAgICAgICAgICAgICAgIGNsZWFyRGF5KCk7Ci0gICAgICAgICAgICAgICAgY2xlYXJUaW1lKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19HX01PTlRIX0RBWToKLSAgICAgICAgICAgICAgICAvL0hBU19NT05USCB8IEhBU19EQVkKLSAgICAgICAgICAgICAgICBjbGVhclllYXIoKTsKLSAgICAgICAgICAgICAgICBjbGVhclRpbWUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0dfREFZOgotICAgICAgICAgICAgICAgIC8vSEFTX0RBWQotICAgICAgICAgICAgICAgIGNsZWFyWWVhcigpOwotICAgICAgICAgICAgICAgIGNsZWFyTW9udGgoKTsKLSAgICAgICAgICAgICAgICBjbGVhclRpbWUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RBVEU6Ci0gICAgICAgICAgICAgICAgLy9IQVNfWUVBUiB8IEhBU19NT05USCB8IEhBU19EQVkKLSAgICAgICAgICAgICAgICBjbGVhclRpbWUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBjYXNlIFNjaGVtYVR5cGUuQlRDX0RBVEVfVElNRToKLSAgICAgICAgICAgICAgICAvL0hBU19ZRUFSIHwgSEFTX01PTlRIIHwgSEFTX0RBWSB8IEhBU19USU1FCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgY2FzZSBTY2hlbWFUeXBlLkJUQ19USU1FOgotICAgICAgICAgICAgICAgIC8vSEFTX1RJTUUKLSAgICAgICAgICAgICAgICBjbGVhclllYXIoKTsKLSAgICAgICAgICAgICAgICBjbGVhck1vbnRoKCk7Ci0gICAgICAgICAgICAgICAgY2xlYXJEYXkoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImNvZGVUeXBlIG11c3QgYmUgb25lIG9mIFNjaGVtYVR5cGUgQlRDXyAgREFURSBUSU1FIHJlbGF0ZWQgdHlwZXMuIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLQotICAgIC8qIHBhY2thZ2UgKi8gc3RhdGljIGZpbmFsIEJpZ0ludGVnZXIgVEVOID0gQmlnSW50ZWdlci52YWx1ZU9mKDEwKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBjYW5vbmljYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiBTcGVjaWZpYyBtb21lbnRzIG9yCi0gICAgICogdGltZXMtb2YtZGF5IGluIGEgc3BlY2lmaWVkIHRpbWV6b25lIGFyZSBub3JtYWxpemVkIHRvCi0gICAgICogVVRDIHRpbWUgdG8gcHJvZHVjZSBhIGNhbm9uaWNhbCBzdHJpbmcgZm9ybSBmb3IgdGhlbS4KLSAgICAgKiBPdGhlciByZWN1cnJpbmcgdGltZSBzcGVjaWZpY2F0aW9ucyBrZWVwIHRoZWlyIHRpbWV6b25lCi0gICAgICogaW5mb3JtYXRpb24uCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBjYW5vbmljYWxTdHJpbmcoKQotICAgIHsKLSAgICAgICAgYm9vbGVhbiBuZWVkTm9ybWFsaXplID0KLSAgICAgICAgICAgIChoYXNUaW1lWm9uZSgpICYmIGdldFRpbWVab25lU2lnbigpICE9IDAgJiYgaGFzVGltZSgpICYmCi0gICAgICAgICAgICAoKGhhc0RheSgpID09IGhhc01vbnRoKCkgJiYgaGFzRGF5KCkgPT0gaGFzWWVhcigpKSkpOwotCi0gICAgICAgIGlmICghbmVlZE5vcm1hbGl6ZSAmJiBnZXRGcmFjdGlvbigpLnNjYWxlKCkgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBCaWdJbnRlZ2VyIGJpID0gZ2V0RnJhY3Rpb24oKS51bnNjYWxlZFZhbHVlKCk7Ci0gICAgICAgICAgICBuZWVkTm9ybWFsaXplID0gKGJpLm1vZChURU4pLnNpZ251bSgpID09IDApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFuZWVkTm9ybWFsaXplKQotICAgICAgICAgICAgcmV0dXJuIHRvU3RyaW5nKCk7Ci0KLSAgICAgICAgR0RhdGVCdWlsZGVyIGNkYXRlID0gbmV3IEdEYXRlQnVpbGRlcih0aGlzKTsKLSAgICAgICAgY2RhdGUubm9ybWFsaXplKCk7Ci0gICAgICAgIHJldHVybiBjZGF0ZS50b1N0cmluZygpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoZSBuYXR1cmFsIHN0cmluZyByZXByZXNlbnRhdGlvbi4gVGhpcyByZXByZXNlbnRzIHRoZSBpbmZvcm1hdGlvbgotICAgICAqIHRoYXQgaXMgYXZhaWxhYmxlLCBpbmNsdWRpbmcgdGltZXpvbmUuIEZvciB0eXBlcyB0aGF0IGNvcnJlc3BvbmQKLSAgICAgKiB0byBkZWZpbmVkIHNjaGVtYSB0eXBlcyAoc2NoZW1hQnVpbHRpblR5cGVDb2RlKCkgPiAwKSwKLSAgICAgKiB0aGlzIHByb3ZpZGVzIHRoZSBuYXR1cmFsIGxleGljYWwgcmVwcmVzZW50YXRpb24uCi0gICAgICogPHA+Ci0gICAgICogV2hlbiBib3RoIHRpbWUgYW5kIHRpbWV6b25lIGFyZSBzcGVjaWZpZWQsIHRoaXMgc3RyaW5nIGlzIG5vdAotICAgICAqIHRoZSBjYW5vbmljYWwgcmVwcmVzZW50YXRpb24gdW5sZXNzIHRoZSB0aW1lem9uZSBpcyBVVEMgKFopCi0gICAgICogKHNpbmNlIHRoZSBzYW1lIG1vbWVudCBpbiB0aW1lIGNhbiBiZSBleHByZXNzZWQgaW4gZGlmZmVyZW50Ci0gICAgICogdGltZXpvbmVzKS4gVG8gZ2V0IGEgY2Fub25pY2FsIHN0cmluZywgdXNlIHRoZSBjYW5vbmljYWxTdHJpbmcoKQotICAgICAqIG1ldGhvZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBHRGF0ZS5mb3JtYXRHRGF0ZSh0aGlzKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJkMDc3MS4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODAgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci0KLS8qKgotICogUmVwcmVzZW50cyBhbiBYTUwgU2NoZW1hLWNvbXBhdGlibGUgR3JlZ29yaWFuIGRhdGUuCi0gKiA8cD4KLSAqIEJvdGggdGhlIGltbXV0YWJsZSBHRGF0ZSBhbmQgdGhlIG11dGFibGUgR0RhdGVCdWlsZGVyIGFyZQotICogR0RhdGVTcGVjaWZpY2F0aW9ucy4gIFVzZSB0aGlzIGludGVyZmFjZSB3aGVyZSB5b3Ugd2FudCB0bwotICogYWxsb3cgY2FsbGVycyB0byBwYXNzIGFueSBpbXBsZW1lbnRhdGlvbiBvZiBhIEdEYXRlLgotICogCi0gKiBAc2VlIEdEYXRlCi0gKiBAc2VlIFhtbENhbGVuZGFyCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgR0RhdGVTcGVjaWZpY2F0aW9uCi17Ci0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIGNvbWJpbmF0aW9uIG9mIGZsYWdzIGluZGljYXRpbmcgdGhlIGluZm9ybWF0aW9uCi0gICAgICogY29udGFpbmVkIGJ5IHRoaXMgR0RhdGUuICBUaGUgZml2ZSBmbGFncyBhcmUKLSAgICAgKiB7QGxpbmsgI0hBU19USU1FWk9ORX0sIHtAbGluayAjSEFTX1lFQVJ9LCB7QGxpbmsgI0hBU19NT05USH0sCi0gICAgICoge0BsaW5rICNIQVNfREFZfSwgYW5kIHtAbGluayAjSEFTX1RJTUV9LgotICAgICAqLwotICAgIGludCBnZXRGbGFncygpOwotCi0gICAgLyoqIFRpbWV6b25lIGlzIHNwZWNpZmllZC4gU2VlIHtAbGluayAjZ2V0RmxhZ3N9LiAqLwotICAgIHB1YmxpYyBmaW5hbCBpbnQgSEFTX1RJTUVaT05FID0gMTsKLSAgICAvKiogWWVhciBpcyBzcGVjaWZpZWQuIFNlZSB7QGxpbmsgI2dldEZsYWdzfS4gKi8KLSAgICBwdWJsaWMgZmluYWwgaW50IEhBU19ZRUFSID0gMjsKLSAgICAvKiogTW9udGggb2YgeWVhciBpcyBzcGVjaWZpZWQuIFNlZSB7QGxpbmsgI2dldEZsYWdzfS4gKi8KLSAgICBwdWJsaWMgZmluYWwgaW50IEhBU19NT05USCA9IDQ7Ci0gICAgLyoqIERheSBvZiBtb250aCBpcyBzcGVjaWZpZWQuIFNlZSB7QGxpbmsgI2dldEZsYWdzfS4gKi8KLSAgICBwdWJsaWMgZmluYWwgaW50IEhBU19EQVkgPSA4OwotICAgIC8qKiBUaW1lIG9mIGRheSBpcyBzcGVjaWZpZWQuIFNlZSB7QGxpbmsgI2dldEZsYWdzfS4gKi8KLSAgICBwdWJsaWMgZmluYWwgaW50IEhBU19USU1FID0gMTY7Ci0KLSAgICAvKioKLSAgICAgKiBUcnVlIGlmIHRoaXMgR0RhdGUgc3BlY2lmaWNhdGlvbiBpcyBpbW11dGFibGUuIEdEYXRlIHJldHVybnMgdHJ1ZSwKLSAgICAgKiBhbmQgR0RhdGVCdWlsZGVyIHJldHVybnMgZmFsc2UuCi0gICAgICovCi0gICAgYm9vbGVhbiBpc0ltbXV0YWJsZSgpOwotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGlzIEdEYXRlIGNvcnJlc3BvbmRzIHRvIGEgdmFsaWQgZ3JlZ29yaWFuIGRhdGUgdmFsdWUKLSAgICAgKiBpbiBYTUwgc2NoZW1hLgotICAgICAqLwotICAgIGJvb2xlYW4gaXNWYWxpZCgpOwotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGlzIGRhdGUvdGltZSBzcGVjaWZpY2F0aW9uIHNwZWNpZmllcyBhIHRpbWV6b25lLgotICAgICAqLwotICAgIGJvb2xlYW4gaGFzVGltZVpvbmUoKTsKLQotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhpcyBkYXRlL3RpbWUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSB5ZWFyLgotICAgICAqLwotICAgIGJvb2xlYW4gaGFzWWVhcigpOwotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGlzIGRhdGUvdGltZSBzcGVjaWZpY2F0aW9uIHNwZWNpZmllcyBhIG1vbnRoLW9mLXllYXIuCi0gICAgICovCi0gICAgYm9vbGVhbiBoYXNNb250aCgpOwotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGlzIGRhdGUvdGltZSBzcGVjaWZpY2F0aW9uIHNwZWNpZmllcyBhIGRheS1vZi1tb250aC4KLSAgICAgKi8KLSAgICBib29sZWFuIGhhc0RheSgpOwotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGlzIGRhdGUvdGltZSBzcGVjaWZpY2F0aW9uIHNwZWNpZmllcyBhIHRpbWUtb2YtZGF5LgotICAgICAqLwotICAgIGJvb2xlYW4gaGFzVGltZSgpOwotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGlzIGRhdGUvdGltZSBzcGVjaWZpY2F0aW9uIHNwZWNpZmllcyBhIGZ1bGwgZGF0ZSAoeWVhciwgbW9udGgsIGRheSkKLSAgICAgKi8KLSAgICBib29sZWFuIGhhc0RhdGUoKTsKLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHllYXIuIFNob3VsZCBiZSBhIGZvdXItZGlnaXQgeWVhciBzcGVjaWZpY2F0aW9uLgotICAgICAqLwotICAgIGludCBnZXRZZWFyKCk7Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBtb250aC1vZi15ZWFyLiBKYW51YXJ5IGlzIDEuCi0gICAgICovCi0gICAgaW50IGdldE1vbnRoKCk7Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBkYXktb2YtbW9udGguIFRoZSBmaXJzdCBkYXkgb2YgZWFjaCBtb250aCBpcyAxLgotICAgICAqLwotICAgIGludCBnZXREYXkoKTsKLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIGhvdXItb2YtZGF5LiBNaWRuaWdodCBpcyAwLCBhbmQgMTFQTSBpcyAyMy4KLSAgICAgKi8KLSAgICBpbnQgZ2V0SG91cigpOwotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgbWludXRlLW9mLWhvdXIuIFJhbmdlIGZyb20gMCB0byA1OS4KLSAgICAgKi8KLSAgICBpbnQgZ2V0TWludXRlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBzZWNvbmQtb2YtbWludXRlLiBSYW5nZSBmcm9tIDAgdG8gNTkuCi0gICAgICovCi0gICAgaW50IGdldFNlY29uZCgpOwotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgdGltZSB6b25lIHNpZ24uIEZvciB0aW1lIHpvbmVzIGVhc3Qgb2YgR01ULAotICAgICAqIHRoaXMgaXMgcG9zaXRpdmU7IGZvciB0aW1lIHpvbmVzIHdlc3QsIHRoaXMgaXMgbmVnYXRpdmUuCi0gICAgICovCi0gICAgaW50IGdldFRpbWVab25lU2lnbigpOwotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgdGltZSB6b25lIGhvdXIuCi0gICAgICogVGhpcyBpcyBhbHdheXMgcG9zaXRpdmU6IGZvciB0aGUgc2lnbiwgbG9vayBhdAotICAgICAqIGdldFRpbWVab25lU2lnbigpLgotICAgICAqLwotICAgIGludCBnZXRUaW1lWm9uZUhvdXIoKTsKLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHRpbWUgem9uZSBtaW51dGVzLgotICAgICAqIFRoaXMgaXMgYWx3YXlzIHBvc2l0aXZlOiBmb3IgdGhlIHNpZ24sIGxvb2sgYXQKLSAgICAgKiBnZXRUaW1lWm9uZVNpZ24oKS4KLSAgICAgKi8KLSAgICBpbnQgZ2V0VGltZVpvbmVNaW51dGUoKTsKLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIGZyYWN0aW9uLW9mLXNlY29uZC4gUmFuZ2UgZnJvbSAwIChpbmNsdXNpdmUpIHRvIDEgKGV4Y2x1c2l2ZSkuCi0gICAgICovCi0gICAgQmlnRGVjaW1hbCBnZXRGcmFjdGlvbigpOwotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgcm91bmRlZCBtaWxsaXNlY29uZCB2YWx1ZS4gUmFuZ2UgZnJvbSAwIHRvIDk5OQotICAgICAqLwotICAgIGludCBnZXRNaWxsaXNlY29uZCgpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgSnVsaWFuIGRhdGUgY29ycmVzcG9uZGluZyB0byB0aGlzIEdyZWdvcmlhbiBkYXRlLgotICAgICAqIFRoZSBKdWxpYW4gZGF0ZSAoSkQpIGlzIGEgY29udGludW91cyBjb3VudCBvZiBkYXlzIGZyb20KLSAgICAgKiAxIEphbnVhcnkgNDcxMyBCQyAoPSAtNDcxMiBKYW51YXJ5IDEpLgotICAgICAqLwotICAgIGludCBnZXRKdWxpYW5EYXRlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IHRpbWUgYXMgYW4ge0BsaW5rIFhtbENhbGVuZGFyfS4KLSAgICAgKiA8cD4KLSAgICAgKiB7QGxpbmsgWG1sQ2FsZW5kYXJ9IGlzIGEgc3ViY2xhc3Mgb2Yge0BsaW5rIGphdmEudXRpbC5HcmVnb3JpYW5DYWxlbmRhcn0KLSAgICAgKiB3aGljaCBpcyBzbGlnaHRseSBjdXN0b21pemVkIHRvIG1hdGNoIFhNTCBzY2hlbWEgZGF0ZSBydWxlcy4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgcmV0dXJuZWQge0BsaW5rIFhtbENhbGVuZGFyfSBoYXMgb25seSB0aG9zZSB0aW1lIGFuZCBkYXRlIGZpZWxkcwotICAgICAqIHNldCB0aGF0IGFyZSByZWZsZWN0ZWQgaW4gdGhlIEdEYXRlIG9iamVjdC4gIEJlY2F1c2Ugb2YgdGhlIHdheSB0aGUKLSAgICAgKiB7QGxpbmsgamF2YS51dGlsLkNhbGVuZGFyfSBjb250cmFjdCB3b3JrcywgYW55IGluZm9ybWF0aW9uIGluIHRoZSBpc1NldCgpIHZhbmlzaGVzCi0gICAgICogYXMgc29vbiBhcyB5b3UgdmlldyBhbnkgdW5zZXQgZmllbGQgdXNpbmcgZ2V0KCkgbWV0aG9kcy4KLSAgICAgKiBUaGlzIG1lYW5zIHRoYXQgaWYgaXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hpY2ggZGF0ZSBmaWVsZHMKLSAgICAgKiBhcmUgc2V0LCB5b3UgbXVzdCBjYWxsIGlzU2V0KCkgZmlyc3QgYmVmb3JlIGdldCgpLgotICAgICAqLwotICAgIFhtbENhbGVuZGFyIGdldENhbGVuZGFyKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IHRpbWUgYXMgYSBqYXZhLnV0aWwuRGF0ZQotICAgICAqIGluc3RhbmNlLgotICAgICAqLwotICAgIERhdGUgZ2V0RGF0ZSgpOwotCi0gICAgLyoqCi0gICAgICogQ29tcGFyaXNvbiB0byBhbm90aGVyIEdEYXRlLgotICAgICAqIDx1bD4KLSAgICAgKiA8bGk+UmV0dXJucyAtMSBpZiB0aGlzIDwgZGF0ZS4gKGxlc3MtdGhhbikKLSAgICAgKiA8bGk+UmV0dXJucyAwIGlmIHRoaXMgPT0gZGF0ZS4gKGVxdWFsKQotICAgICAqIDxsaT5SZXR1cm5zIDEgaWYgdGhpcyA+IGRhdGUuIChncmVhdGVyLXRoYW4pCi0gICAgICogPGxpPlJldHVybnMgMiBpZiB0aGlzIDw+IGRhdGUuIChpbmNvbXBhcmFibGUpCi0gICAgICogPC91bD4KLSAgICAgKiBUd28gaW5zdGFuY2VzIGFyZSBpbmNvbXBhcmFibGUgaWYgdGhleSBoYXZlIGRpZmZlcmVudCBhbW91bnRzCi0gICAgICogb2YgaW5mb3JtYXRpb24uCi0gICAgICogCi0gICAgICogQHBhcmFtIGdkYXRlc3BlYyB0aGUgZGF0ZSB0byBjb21wYXJlIGFnYWluc3QuCi0gICAgICovCi0gICAgaW50IGNvbXBhcmVUb0dEYXRlKEdEYXRlU3BlY2lmaWNhdGlvbiBnZGF0ZXNwZWMpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgYnVpbHRpbiB0eXBlIGNvZGUgZm9yIHRoZSBzaGFwZSBvZiB0aGUgaW5mb3JtYXRpb24KLSAgICAgKiBjb250YWluZWQgaW4gdGhpcyBpbnN0YW5jZSwgb3IgMCBpZiB0aGUKLSAgICAgKiBpbnN0YW5jZSBkb2Vzbid0IGNvbnRhaW4gaW5mb3JtYXRpb24gY29ycmVzcG9uZGluZyB0byBhCi0gICAgICogU2NoZW1hIHR5cGUuCi0gICAgICogPHA+IAotICAgICAqIFZhbHVlIHdpbGwgYmUgZXF1YWwgdG8KLSAgICAgKiB7QGxpbmsgU2NoZW1hVHlwZSNCVENfTk9UX0JVSUxUSU59LAotICAgICAqIHtAbGluayBTY2hlbWFUeXBlI0JUQ19HX1lFQVJ9LAotICAgICAqIHtAbGluayBTY2hlbWFUeXBlI0JUQ19HX1lFQVJfTU9OVEh9LAotICAgICAqIHtAbGluayBTY2hlbWFUeXBlI0JUQ19HX01PTlRIfSwKLSAgICAgKiB7QGxpbmsgU2NoZW1hVHlwZSNCVENfR19NT05USF9EQVl9LAotICAgICAqIHtAbGluayBTY2hlbWFUeXBlI0JUQ19HX0RBWX0sCi0gICAgICoge0BsaW5rIFNjaGVtYVR5cGUjQlRDX0RBVEV9LAotICAgICAqIHtAbGluayBTY2hlbWFUeXBlI0JUQ19EQVRFX1RJTUV9LCBvcgotICAgICAqIHtAbGluayBTY2hlbWFUeXBlI0JUQ19USU1FfS4KLSAgICAgKi8KLSAgICBpbnQgZ2V0QnVpbHRpblR5cGVDb2RlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgY2Fub25pY2FsIHN0cmluZyByZXByZXNlbnRhdGlvbi4gU3BlY2lmaWMgbW9tZW50cyBvcgotICAgICAqIHRpbWVzLW9mLWRheSBpbiBhIHNwZWNpZmllZCB0aW1lem9uZSBhcmUgbm9ybWFsaXplZCB0bwotICAgICAqIFVUQyB0aW1lIHRvIHByb2R1Y2UgYSBjYW5vbmljYWwgc3RyaW5nIGZvcm0gZm9yIHRoZW0uCi0gICAgICogT3RoZXIgcmVjdXJyaW5nIHRpbWUgc3BlY2lmaWNhdGlvbnMga2VlcCB0aGVpciB0aW1lem9uZQotICAgICAqIGluZm9ybWF0aW9uLgotICAgICAqLwotICAgIFN0cmluZyBjYW5vbmljYWxTdHJpbmcoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBuYXR1cmFsIHN0cmluZyByZXByZXNlbnRhdGlvbi4gVGhpcyByZXByZXNlbnRzIHRoZSBpbmZvcm1hdGlvbgotICAgICAqIHRoYXQgaXMgYXZhaWxhYmxlLCBpbmNsdWRpbmcgdGltZXpvbmUuIEZvciB0eXBlcyB0aGF0IGNvcnJlc3BvbmQKLSAgICAgKiB0byBkZWZpbmVkIHNjaGVtYSB0eXBlcyAoc2NoZW1hQnVpbHRpblR5cGVDb2RlKCkgPiAwKSwKLSAgICAgKiB0aGlzIHByb3ZpZGVzIHRoZSBuYXR1cmFsIGxleGljYWwgcmVwcmVzZW50YXRpb24uCi0gICAgICoKLSAgICAgKiBXaGVuIGJvdGggdGltZSBhbmQgdGltZXpvbmUgYXJlIHNwZWNpZmllZCwgdGhpcyBzdHJpbmcgaXMgbm90Ci0gICAgICogdGhlIGNhbm9uaWNhbCByZXByZXNlbnRhdGlvbiB1bmxlc3MgdGhlIHRpbWV6b25lIGlzIFVUQyAoWikKLSAgICAgKiAoc2luY2UgdGhlIHNhbWUgbW9tZW50IGluIHRpbWUgY2FuIGJlIGV4cHJlc3NlZCBpbiBkaWZmZXJlbnQKLSAgICAgKiB0aW1lem9uZXMpLiBUbyBnZXQgYSBjYW5vbmljYWwgc3RyaW5nLCB1c2UgdGhlIGNhbm9uaWNhbFN0cmluZygpCi0gICAgICogbWV0aG9kLgotICAgICAqLwotICAgIFN0cmluZyB0b1N0cmluZygpOwotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0NmU3OWYuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDY1ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwotCi0vKioKLSAqIFJlcHJlc2VudHMgYW4gWE1MIFNjaGVtYS1jb21wYXRpYmxlIGR1cmF0aW9uLgotICogPHA+Ci0gKiBBIGR1cmF0aW9uIGlzIG1hZGUgdXAgb2YgYSBudW1iZXIgb2YgeWVhcnMsIG1vbnRocywgZGF5cywgaG91cnMsCi0gKiBtaW51dGVzLCBzZWNvbmRzLCBhbmQgZnJhY3Rpb25zIG9mIHNlY29uZHMuIFNlZSB0aGUKLSAqIFhNTCBTY2hlbWEgc3BlY2lmaWNhdGlvbgotICogPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkdXJhdGlvbiI+c2VjdGlvbiBvbiB4czpkdXJhdGlvbjwvYT4KLSAqIGZvciBkZXRhaWxzIG9uIHRoZSBydWxlcyBmb3IKLSAqIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZHVyYXRpb24tb3JkZXIiPmNvbXBhcmluZyBkdXJhdGlvbnM8L2E+IGFuZAotICogPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNhZGRpbmctZHVyYXRpb25zLXRvLWRhdGVUaW1lcyI+YWRkaW5nIGR1cmF0aW9ucyB0byBkYXRlczwvYT4uCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBHRHVyYXRpb24gaW1wbGVtZW50cyBHRHVyYXRpb25TcGVjaWZpY2F0aW9uLCBqYXZhLmlvLlNlcmlhbGl6YWJsZQotewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotICAgIAotICAgIHByaXZhdGUgaW50IF9zaWduOwotICAgIHByaXZhdGUgaW50IF9DWTsKLSAgICBwcml2YXRlIGludCBfTTsKLSAgICBwcml2YXRlIGludCBfRDsKLSAgICBwcml2YXRlIGludCBfaDsKLSAgICBwcml2YXRlIGludCBfbTsKLSAgICBwcml2YXRlIGludCBfczsKLSAgICBwcml2YXRlIEJpZ0RlY2ltYWwgX2ZzOwotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhbiBlbXB0eSBHRHVyYXRpb24gcmVwcmVzZW50aW5nIHplcm8gc2Vjb25kcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgR0R1cmF0aW9uKCkKLSAgICB7Ci0gICAgICAgIF9zaWduID0gKzE7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNFRU5fTk9USElORyA9IDA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNFRU5fWUVBUiA9IDE7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNFRU5fTU9OVEggPSAyOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTRUVOX0RBWSA9IDM7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNFRU5fSE9VUiA9IDQ7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNFRU5fTUlOVVRFID0gNTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU0VFTl9TRUNPTkQgPSA2OwotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhIEdEdXJhdGlvbiBmcm9tIGEgbGV4aWNhbAotICAgICAqIHJlcHJlc2VudGF0aW9uLiBUaGUgbGV4aWNhbCBzcGFjZSBjb250YWlucyB0aGUKLSAgICAgKiB1bmlvbiBvZiB0aGUgbGV4aWNhbCBzcGFjZXMgb2YgYWxsIHRoZSBzY2hlbWEKLSAgICAgKiBkYXRlL3RpbWUgdHlwZXMgKGV4Y2VwdCBmb3IgZHVyYXRpb24pLgotICAgICAqLwotICAgIHB1YmxpYyBHRHVyYXRpb24oQ2hhclNlcXVlbmNlIHN0cikKLSAgICB7Ci0gICAgICAgIC8vIEZvcm06ICAgICAgICAtUG5Zbk1uRFRuSG5NblMKLSAgICAgICAgLy8gKHdoZXJlIGVhY2ggbiBtYXkgYmUgcHJlY2VkZWQgYnkgYSAtIGZvciB1cywgYW5kIHRoZSB3aG9sZSBtYXkgYmUgLSkKLQotICAgICAgICAvLyBmaXJzdCB0cmltIFhNTCB3aGl0ZXNwYWNlCi0gICAgICAgIGludCBsZW4gPSBzdHIubGVuZ3RoKCk7Ci0gICAgICAgIGludCBzdGFydCA9IDA7Ci0gICAgICAgIHdoaWxlIChsZW4gPiAwICYmIEdEYXRlLmlzU3BhY2Uoc3RyLmNoYXJBdChsZW4gLSAxKSkpCi0gICAgICAgICAgICBsZW4gLT0gMTsKLSAgICAgICAgd2hpbGUgKHN0YXJ0IDwgbGVuICYmIEdEYXRlLmlzU3BhY2Uoc3RyLmNoYXJBdChzdGFydCkpKQotICAgICAgICAgICAgc3RhcnQgKz0gMTsKLQotICAgICAgICBfc2lnbiA9IDE7Ci0gICAgICAgIGJvb2xlYW4gdG1hcmsgPSBmYWxzZTsKLQotICAgICAgICBpZiAoc3RhcnQgPCBsZW4gJiYgc3RyLmNoYXJBdChzdGFydCkgPT0gJy0nKQotICAgICAgICB7Ci0gICAgICAgICAgICBfc2lnbiA9IC0xOwotICAgICAgICAgICAgc3RhcnQgKz0gMTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdGFydCA+PSBsZW4gfHwgc3RyLmNoYXJBdChzdGFydCkgIT0gJ1AnKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiZHVyYXRpb24gbXVzdCBiZWdpbiB3aXRoIFAiKTsKLQotICAgICAgICBzdGFydCArPSAxOwotCi0gICAgICAgIGludCBzZWVuID0gU0VFTl9OT1RISU5HOwotICAgICAgICBfZnMgPSBHRGF0ZS5femVybzsKLQotICAgICAgICBmb3IgKDtzdGFydCA8IGxlbjsgc3RhcnQgKz0gMSkKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbGVhbiBuZWd2YWwgPSBmYWxzZTsKLSAgICAgICAgICAgIGNoYXIgY2ggPSBzdHIuY2hhckF0KHN0YXJ0KTsKLSAgICAgICAgICAgIGlmIChjaCA9PSAnVCcpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHRtYXJrKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJkdXJhdGlvbiBtdXN0IGhhdmUgbm8gbW9yZSB0aGFuIG9uZSBUJyIpOwotICAgICAgICAgICAgICAgIGlmIChzZWVuID4gU0VFTl9EQVkpCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlQgaW4gZHVyYXRpb24gbXVzdCBwcmVjZWRlIHRpbWUgZmllbGRzIik7Ci0gICAgICAgICAgICAgICAgc2VlbiA9IFNFRU5fREFZOwotICAgICAgICAgICAgICAgIHRtYXJrID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBzdGFydCArPSAxOwotICAgICAgICAgICAgICAgIGlmIChzdGFydCA+PSBsZW4pCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImlsbGVnYWwgZHVyYXRpb24iKTsKLSAgICAgICAgICAgICAgICBjaCA9IHN0ci5jaGFyQXQoc3RhcnQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNoID09ICctJykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBuZWd2YWwgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmIChzdGFydCA9PSBsZW4pCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImlsbGVnYWwgZHVyYXRpb24iKTsKLSAgICAgICAgICAgICAgICBzdGFydCArPSAxOwotICAgICAgICAgICAgICAgIGNoID0gc3RyLmNoYXJBdChzdGFydCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIUdEYXRlLmlzRGlnaXQoY2gpKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImlsbGVnYWwgZHVyYXRpb24iKTsKLSAgICAgICAgICAgIGludCB2YWx1ZSA9IEdEYXRlLmRpZ2l0VmFsKGNoKTsKLSAgICAgICAgICAgIGZvciAoOzspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3RhcnQgKz0gMTsKLSAgICAgICAgICAgICAgICBjaCA9IChzdGFydCA8IGxlbikgPyBzdHIuY2hhckF0KHN0YXJ0KSA6ICdcMCc7Ci0gICAgICAgICAgICAgICAgaWYgKCFHRGF0ZS5pc0RpZ2l0KGNoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSAqIDEwICsgR0RhdGUuZGlnaXRWYWwoY2gpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGNoID09ICcuJykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgaSA9IHN0YXJ0OwotICAgICAgICAgICAgICAgIGRvIGkgKz0gMTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IGxlbiAmJiBHRGF0ZS5pc0RpZ2l0KGNoID0gc3RyLmNoYXJBdChpKSkpOwotICAgICAgICAgICAgICAgIF9mcyA9IG5ldyBCaWdEZWNpbWFsKHN0ci5zdWJTZXF1ZW5jZShzdGFydCwgaSkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPj0gbGVuIHx8IGNoICE9ICdTJykKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiaWxsZWdhbCBkdXJhdGlvbiIpOwotICAgICAgICAgICAgICAgIHN0YXJ0ID0gaTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChuZWd2YWwpCi0gICAgICAgICAgICAgICAgdmFsdWUgPSAtdmFsdWU7Ci0gICAgICAgICAgICBzd2l0Y2ggKHNlZW4pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBTRUVOX05PVEhJTkc6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnWScpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlZW4gPSBTRUVOX1lFQVI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBfQ1kgPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9IC8vIGZhbGx0aHJvdWdoCi0gICAgICAgICAgICAgICAgY2FzZSBTRUVOX1lFQVI6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnTScpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlZW4gPSBTRUVOX01PTlRIOwotICAgICAgICAgICAgICAgICAgICAgICAgX00gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9IC8vIGZhbGx0aHJvdWdoCi0gICAgICAgICAgICAgICAgY2FzZSBTRUVOX01PTlRIOgotICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJ0QnKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWVuID0gU0VFTl9EQVk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBfRCA9IHZhbHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0gLy8gZmFsbHRocm91Z2gKLSAgICAgICAgICAgICAgICBjYXNlIFNFRU5fREFZOgotICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJ0gnKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRtYXJrKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInRpbWUgaW4gZHVyYXRpb24gbXVzdCBmb2xsb3cgVCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2VlbiA9IFNFRU5fSE9VUjsKLSAgICAgICAgICAgICAgICAgICAgICAgIF9oID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfSAvLyBmYWxsdGhyb3VnaAotICAgICAgICAgICAgICAgIGNhc2UgU0VFTl9IT1VSOgotICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJ00nKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRtYXJrKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oInRpbWUgaW4gZHVyYXRpb24gbXVzdCBmb2xsb3cgVCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2VlbiA9IFNFRU5fTUlOVVRFOwotICAgICAgICAgICAgICAgICAgICAgICAgX20gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9IC8vIGZhbGx0aHJvdWdoCi0gICAgICAgICAgICAgICAgY2FzZSBTRUVOX01JTlVURToKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICdTJykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0bWFyaykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJ0aW1lIGluIGR1cmF0aW9uIG11c3QgZm9sbG93IFQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlZW4gPSBTRUVOX1NFQ09ORDsKLSAgICAgICAgICAgICAgICAgICAgICAgIF9zID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfSAvLyBmYWxsdGhyb3VnaAotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImR1cmF0aW9uIG11c3Qgc3BlY2lmeSBZIE0gRCBUIEggTSBTIGluIG9yZGVyIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGEgR0R1cmF0aW9uIHdpdGggdGhlIHNwZWNpZmllZCBzaWduLAotICAgICAqIHllYXIsIG1vbnRoLCBkYXksIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBhbmQgb3B0aW9uYWwKLSAgICAgKiBmcmFjdGlvbmFsIHNlY29uZHMuCi0gICAgICovCi0gICAgcHVibGljIEdEdXJhdGlvbigKLSAgICAgICAgICAgIGludCBzaWduLAotICAgICAgICAgICAgaW50IHllYXIsCi0gICAgICAgICAgICBpbnQgbW9udGgsCi0gICAgICAgICAgICBpbnQgZGF5LAotICAgICAgICAgICAgaW50IGhvdXIsCi0gICAgICAgICAgICBpbnQgbWludXRlLAotICAgICAgICAgICAgaW50IHNlY29uZCwKLSAgICAgICAgICAgIEJpZ0RlY2ltYWwgZnJhY3Rpb24pCi0gICAgewotICAgICAgICBpZiAoc2lnbiAhPSAxICYmIHNpZ24gIT0gLTEpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7Ci0gICAgICAgIF9zaWduID0gc2lnbjsKLSAgICAgICAgX0NZID0geWVhcjsKLSAgICAgICAgX00gPSBtb250aDsKLSAgICAgICAgX0QgPSBkYXk7Ci0gICAgICAgIF9oID0gaG91cjsKLSAgICAgICAgX20gPSBtaW51dGU7Ci0gICAgICAgIF9zID0gc2Vjb25kOwotICAgICAgICBfZnMgPSBmcmFjdGlvbiA9PSBudWxsID8gR0RhdGUuX3plcm8gOiBmcmFjdGlvbjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGEgR0R1cmF0aW9uIGZyb20gYW5vdGhlciBHRHVyYXRpb25TcGVjaWZpY2F0aW9uLgotICAgICAqLwotICAgIHB1YmxpYyBHRHVyYXRpb24oR0R1cmF0aW9uU3BlY2lmaWNhdGlvbiBnRHVyYXRpb24pCi0gICAgewotICAgICAgICBfc2lnbiA9IGdEdXJhdGlvbi5nZXRTaWduKCk7Ci0gICAgICAgIF9DWSA9IGdEdXJhdGlvbi5nZXRZZWFyKCk7Ci0gICAgICAgIF9NID0gZ0R1cmF0aW9uLmdldE1vbnRoKCk7Ci0gICAgICAgIF9EID0gZ0R1cmF0aW9uLmdldERheSgpOwotICAgICAgICBfaCA9IGdEdXJhdGlvbi5nZXRIb3VyKCk7Ci0gICAgICAgIF9tID0gZ0R1cmF0aW9uLmdldE1pbnV0ZSgpOwotICAgICAgICBfcyA9IGdEdXJhdGlvbi5nZXRTZWNvbmQoKTsKLSAgICAgICAgX2ZzID0gZ0R1cmF0aW9uLmdldEZyYWN0aW9uKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQnVpbGRzIGFub3RoZXIgR0RhdGUgd2l0aCB0aGUgc2FtZSB2YWx1ZQotICAgICAqIGFzIHRoaXMgb25lLgotICAgICAqLwotICAgIHB1YmxpYyBPYmplY3QgY2xvbmUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBHRHVyYXRpb24odGhpcyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQWxsIEdEdXJhdGlvbiBpbnN0YW5jZXMgcmV0dXJuIHRydWUuCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNJbW11dGFibGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgc2lnbiBvZiB0aGUgZHVyYXRpb246ICsxIGlzIGZvcndhcmRzCi0gICAgICogYW5kIC0xIGlzIGJhY2t3YXJkcyBpbiB0aW1lLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0U2lnbigpCi0gICAgICAgIHsgcmV0dXJuIF9zaWduOyB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSB5ZWFyIGNvbXBvbmVudC4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgaW50IGdldFllYXIoKQotICAgICAgICB7IHJldHVybiBfQ1k7ICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBtb250aC1vZi15ZWFyIGNvbXBvbmVudC4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgaW50IGdldE1vbnRoKCkKLSAgICAgICAgeyByZXR1cm4gX007ICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBkYXktb2YtbW9udGggY29tcG9uZW50LgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0RGF5KCkKLSAgICAgICAgeyByZXR1cm4gX0Q7IH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIGhvdXItb2YtZGF5IGNvbXBvbmVudC4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgaW50IGdldEhvdXIoKQotICAgICAgICB7IHJldHVybiBfaDsgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgbWludXRlLW9mLWhvdXIgY29tcG9uZW50LgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0TWludXRlKCkKLSAgICAgICAgeyByZXR1cm4gX207IH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHNlY29uZC1vZi1taW51dGUgY29tcG9uZW50LgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0U2Vjb25kKCkKLSAgICAgICAgeyByZXR1cm4gX3M7IH0KLQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgZnJhY3Rpb24tb2Ytc2Vjb25kLiBSYW5nZSBmcm9tIDAgKGluY2x1c2l2ZSkgdG8gMSAoZXhjbHVzaXZlKS4KLSAgICAgKi8KLSAgICBwdWJsaWMgQmlnRGVjaW1hbCBnZXRGcmFjdGlvbigpCi0gICAgICAgIHsgcmV0dXJuIF9mczsgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIGFsbCBvZiB0aGUgaW5kaXZpZHVhbCBjb21wb25lbnRzCi0gICAgICogb2YgdGhlIGR1cmF0aW9uIGFyZSBub25uZWdhdGl2ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBHRHVyYXRpb25CdWlsZGVyLmlzVmFsaWREdXJhdGlvbih0aGlzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb21wYXJpc29uIHRvIGFub3RoZXIgR0R1cmF0aW9uLgotICAgICAqIDx1bD4KLSAgICAgKiA8bGk+UmV0dXJucyAtMSBpZiB0aGlzIDwgZGF0ZS4gKGxlc3MtdGhhbikKLSAgICAgKiA8bGk+UmV0dXJucyAwIGlmIHRoaXMgPT0gZGF0ZS4gKGVxdWFsKQotICAgICAqIDxsaT5SZXR1cm5zIDEgaWYgdGhpcyA+IGRhdGUuIChncmVhdGVyLXRoYW4pCi0gICAgICogPGxpPlJldHVybnMgMiBpZiB0aGlzIDw+IGRhdGUuIChpbmNvbXBhcmFibGUpCi0gICAgICogPC91bD4KLSAgICAgKiBUd28gaW5zdGFuY2VzIGFyZSBpbmNvbXBhcmFibGUgaWYgdGhleSBoYXZlIGRpZmZlcmVudCBhbW91bnRzCi0gICAgICogb2YgaW5mb3JtYXRpb24uCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIGludCBjb21wYXJlVG9HRHVyYXRpb24oR0R1cmF0aW9uU3BlY2lmaWNhdGlvbiBkdXJhdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHRHVyYXRpb25CdWlsZGVyLmNvbXBhcmVEdXJhdGlvbnModGhpcywgZHVyYXRpb24pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoZSBuYXR1cmFsIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZHVyYXRpb24uCi0gICAgICogPHA+Ci0gICAgICogQW55IGNvbXBvbmVudHMgdGhhdCBhcmUgemVybyBhcmUgb21pdHRlZC4gTm90ZSB0aGF0IGlmIHRoZSBkdXJhdGlvbgotICAgICAqIGlzIGludmFsaWQsIGkuZS4sIGl0IGhhcyBuZWdhdGl2ZSBjb21wb25lbnRzLCB0aG9zZSBuZWdhdGl2ZQotICAgICAqIGNvbXBvbmVudHMgYXJlIHNlcmlhbGl6ZWQgb3V0IGhlcmUuIFRvIGNoZWNrIGZvciB2YWxpZGl0eSwgdXNlCi0gICAgICogdGhlIGlzVmFsaWQoKSBtZXRob2Q7IGFuZCB0byBub3JtYWxpemUgbW9zdCBkdXJhdGlvbnMgdG8gYSB2YWxpZAotICAgICAqIGZvcm0gdXNlIHRoZSBub3JtYWxpemUoKSBtZXRob2QuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gICAgewotICAgICAgICByZXR1cm4gR0R1cmF0aW9uQnVpbGRlci5mb3JtYXREdXJhdGlvbih0aGlzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbmV3IEdEdXJhdGlvbiB3aGljaCBpcyB0aGUgc3VtIG9mIHRoaXMgb25lIGFuZCB0aGUKLSAgICAgKiBzdXBwbGllZCBkdXJhdGlvbi4gIERvZXMgYSBmaWVsZHdpc2UgYWRkaXRpb24sIHdpdGggbm8gbm9ybWFsaXphdGlvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgR0R1cmF0aW9uIGFkZChHRHVyYXRpb25TcGVjaWZpY2F0aW9uIGR1cmF0aW9uKQotICAgIHsKLSAgICAgICAgaW50IHNpZ24gPSBfc2lnbiAqIGR1cmF0aW9uLmdldFNpZ24oKTsKLSAgICAgICAgcmV0dXJuIF9hZGQoZHVyYXRpb24sIHNpZ24pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBuZXcgR0R1cmF0aW9uIHdoaWNoIGlzIHRoZSByZXN1bHQgb2Ygc3VidHJhY3RpbmcKLSAgICAgKiB0aGUgc3VwcGxpZWQgZHVyYXRpb24gZnJvbSB0aGlzIG9uZS4gIERvZXMgYSBmaWVsZHdpc2UKLSAgICAgKiBzdWJ0cmFjdGlvbiwgd2l0aCBubyBub3JtYWxpemF0aW9uLgotICAgICAqLwotICAgIHB1YmxpYyBHRHVyYXRpb24gc3VidHJhY3QoR0R1cmF0aW9uU3BlY2lmaWNhdGlvbiBkdXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGludCBzaWduID0gLV9zaWduICogZHVyYXRpb24uZ2V0U2lnbigpOwotICAgICAgICByZXR1cm4gX2FkZChkdXJhdGlvbiwgc2lnbik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBHRHVyYXRpb24gX2FkZChHRHVyYXRpb25TcGVjaWZpY2F0aW9uIGR1cmF0aW9uLCBpbnQgc2lnbikKLSAgICB7Ci0gICAgICAgIEdEdXJhdGlvbiByZXN1bHQgPSBuZXcgR0R1cmF0aW9uKHRoaXMpOwotICAgICAgICByZXN1bHQuX0NZICs9IHNpZ24gKiBkdXJhdGlvbi5nZXRZZWFyKCk7Ci0gICAgICAgIHJlc3VsdC5fTSArPSBzaWduICogZHVyYXRpb24uZ2V0TW9udGgoKTsKLSAgICAgICAgcmVzdWx0Ll9EICs9IHNpZ24gKiBkdXJhdGlvbi5nZXREYXkoKTsKLSAgICAgICAgcmVzdWx0Ll9oICs9IHNpZ24gKiBkdXJhdGlvbi5nZXRIb3VyKCk7Ci0gICAgICAgIHJlc3VsdC5fbSArPSBzaWduICogZHVyYXRpb24uZ2V0TWludXRlKCk7Ci0gICAgICAgIHJlc3VsdC5fcyArPSBzaWduICogZHVyYXRpb24uZ2V0U2Vjb25kKCk7Ci0KLSAgICAgICAgaWYgKGR1cmF0aW9uLmdldEZyYWN0aW9uKCkuc2lnbnVtKCkgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAgICAgaWYgKHJlc3VsdC5fZnMuc2lnbnVtKCkgPT0gMCAmJiBzaWduID09IDEpCi0gICAgICAgICAgICByZXN1bHQuX2ZzID0gZHVyYXRpb24uZ2V0RnJhY3Rpb24oKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0Ll9mcyA9IHNpZ24gPiAwID8KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0Ll9mcy5hZGQoZHVyYXRpb24uZ2V0RnJhY3Rpb24oKSkgOgotICAgICAgICAgICAgICAgICAgICByZXN1bHQuX2ZzLnN1YnRyYWN0KGR1cmF0aW9uLmdldEZyYWN0aW9uKCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFR3byBHRHVyYXRpb25zIGFyZSBlcXVhbCBpZiBhbGwgdGhlaXIgZmllbGRzIGFyZSBlcXVhbC4KLSAgICAgKiBUaGUgZXF1YWxzIGZ1bmN0aW9uIGRvZXMgbm90IGFwcGx5IG5vcm1hbGl6YXRpbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikKLSAgICB7Ci0gICAgICAgIGlmIChvYmogPT0gdGhpcykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIShvYmogaW5zdGFuY2VvZiBHRHVyYXRpb24pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIEdEdXJhdGlvbiBkdXJhdGlvbiA9IChHRHVyYXRpb24pb2JqOwotICAgICAgICByZXR1cm4gKF9zaWduID09IGR1cmF0aW9uLmdldFNpZ24oKSAmJgotICAgICAgICAgICAgICAgIF9DWSA9PSBkdXJhdGlvbi5nZXRZZWFyKCkgJiYKLSAgICAgICAgICAgICAgICBfTSA9PSBkdXJhdGlvbi5nZXRNb250aCgpICYmCi0gICAgICAgICAgICAgICAgX0QgPT0gZHVyYXRpb24uZ2V0RGF5KCkgJiYKLSAgICAgICAgICAgICAgICBfaCA9PSBkdXJhdGlvbi5nZXRIb3VyKCkgJiYKLSAgICAgICAgICAgICAgICBfbSA9PSBkdXJhdGlvbi5nZXRNaW51dGUoKSAmJgotICAgICAgICAgICAgICAgIF9zID09IGR1cmF0aW9uLmdldFNlY29uZCgpICYmCi0gICAgICAgICAgICAgICAgX2ZzLmVxdWFscyhkdXJhdGlvbi5nZXRGcmFjdGlvbigpKSk7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBoYXNoQ29kZSgpCi0gICAgewotICAgICAgICByZXR1cm4gKF9zICsKLSAgICAgICAgICAgICAgICBfbSAqICg2MCArIDcpICsKLSAgICAgICAgICAgICAgICBfaCAqICg2MCAqIDYwICsgNykgKwotICAgICAgICAgICAgICAgIF9EICogKDYwICogNjAgKiAyNCArIDcpICsKLSAgICAgICAgICAgICAgICBfTSAqICg2MCAqIDYwICogMjQgKiAzMSArIDcpICsKLSAgICAgICAgICAgICAgICBfQ1kgKig2MCAqIDYwICogMjQgKiAzNzIgKyA3KSArCi0gICAgICAgICAgICAgICAgX3NpZ24gKiAxMTkxNzA0OSk7Ci0gICAgfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlMGM2ODcuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzNSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLQotLyoqCi0gKiBVc2VkIHRvIGJ1aWxkIHtAbGluayBHRHVyYXRpb24gR0R1cmF0aW9uc30uCi0gKi8gCi1wdWJsaWMgY2xhc3MgR0R1cmF0aW9uQnVpbGRlciBpbXBsZW1lbnRzIEdEdXJhdGlvblNwZWNpZmljYXRpb24sIGphdmEuaW8uU2VyaWFsaXphYmxlCi17Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0gICAgCi0gICAgcHJpdmF0ZSBpbnQgX3NpZ247Ci0gICAgcHJpdmF0ZSBpbnQgX0NZOwotICAgIHByaXZhdGUgaW50IF9NOwotICAgIHByaXZhdGUgaW50IF9EOwotICAgIHByaXZhdGUgaW50IF9oOwotICAgIHByaXZhdGUgaW50IF9tOwotICAgIHByaXZhdGUgaW50IF9zOwotICAgIHByaXZhdGUgQmlnRGVjaW1hbCBfZnM7Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGFuIGVtcHR5IEdEdXJhdGlvbkJ1aWxkZXIgcmVwcmVzZW50aW5nIHplcm8gc2Vjb25kcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgR0R1cmF0aW9uQnVpbGRlcigpCi0gICAgewotICAgICAgICBfc2lnbiA9ICsxOwotICAgICAgICBfZnMgPSBHRGF0ZS5femVybzsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGEgR0R1cmF0aW9uIGZyb20gYSBsZXhpY2FsCi0gICAgICogcmVwcmVzZW50YXRpb24uCi0gICAgICovCi0gICAgcHVibGljIEdEdXJhdGlvbkJ1aWxkZXIoU3RyaW5nIHMpCi0gICAgewotICAgICAgICB0aGlzKG5ldyBHRHVyYXRpb24ocykpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYSBHRHVyYXRpb25CdWlsZGVyIHdpdGggdGhlIHNwZWNpZmllZCBzaWduLAotICAgICAqIHllYXIsIG1vbnRoLCBkYXksIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBhbmQgb3B0aW9uYWwKLSAgICAgKiBmcmFjdGlvbmFsIHNlY29uZHMuCi0gICAgICovCi0gICAgcHVibGljIEdEdXJhdGlvbkJ1aWxkZXIoCi0gICAgICAgICAgICBpbnQgc2lnbiwKLSAgICAgICAgICAgIGludCB5ZWFyLAotICAgICAgICAgICAgaW50IG1vbnRoLAotICAgICAgICAgICAgaW50IGRheSwKLSAgICAgICAgICAgIGludCBob3VyLAotICAgICAgICAgICAgaW50IG1pbnV0ZSwKLSAgICAgICAgICAgIGludCBzZWNvbmQsCi0gICAgICAgICAgICBCaWdEZWNpbWFsIGZyYWN0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKHNpZ24gIT0gMSAmJiBzaWduICE9IC0xKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOwotICAgICAgICBfc2lnbiA9IHNpZ247Ci0gICAgICAgIF9DWSA9IHllYXI7Ci0gICAgICAgIF9NID0gbW9udGg7Ci0gICAgICAgIF9EID0gZGF5OwotICAgICAgICBfaCA9IGhvdXI7Ci0gICAgICAgIF9tID0gbWludXRlOwotICAgICAgICBfcyA9IHNlY29uZDsKLSAgICAgICAgX2ZzID0gZnJhY3Rpb24gPT0gbnVsbCA/IEdEYXRlLl96ZXJvIDogZnJhY3Rpb247Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhIEdEdXJhdGlvbkJ1aWxkZXIgZnJvbSBhbm90aGVyIEdEdXJhdGlvbkJ1aWxkZXJTcGVjaWZpY2F0aW9uLgotICAgICAqLwotICAgIHB1YmxpYyBHRHVyYXRpb25CdWlsZGVyKEdEdXJhdGlvblNwZWNpZmljYXRpb24gZ0R1cmF0aW9uKQotICAgIHsKLSAgICAgICAgX3NpZ24gPSBnRHVyYXRpb24uZ2V0U2lnbigpOwotICAgICAgICBfQ1kgPSBnRHVyYXRpb24uZ2V0WWVhcigpOwotICAgICAgICBfTSA9IGdEdXJhdGlvbi5nZXRNb250aCgpOwotICAgICAgICBfRCA9IGdEdXJhdGlvbi5nZXREYXkoKTsKLSAgICAgICAgX2ggPSBnRHVyYXRpb24uZ2V0SG91cigpOwotICAgICAgICBfbSA9IGdEdXJhdGlvbi5nZXRNaW51dGUoKTsKLSAgICAgICAgX3MgPSBnRHVyYXRpb24uZ2V0U2Vjb25kKCk7Ci0gICAgICAgIF9mcyA9IGdEdXJhdGlvbi5nZXRGcmFjdGlvbigpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEJ1aWxkcyBhbm90aGVyIEdEdXJhdGlvbkJ1aWxkZXIgd2l0aCB0aGUgc2FtZSB2YWx1ZQotICAgICAqIGFzIHRoaXMgb25lLgotICAgICAqLwotICAgIHB1YmxpYyBPYmplY3QgY2xvbmUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBHRHVyYXRpb25CdWlsZGVyKHRoaXMpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEJ1aWxkcyBhIEdEdXJhdGlvbiBmcm9tIHRoaXMgR0R1cmF0aW9uQnVpbGRlci4KLSAgICAgKi8KLSAgICBwdWJsaWMgR0R1cmF0aW9uIHRvR0R1cmF0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgR0R1cmF0aW9uKHRoaXMpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFkZHMgdG8gdGhpcyBkdXJhdGlvbi4gIERvZXMgYSBmaWVsZHdpc2UgYWRkLCB3aXRoIG5vCi0gICAgICogbm9ybWFsaXphdGlvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBhZGRHRHVyYXRpb24oR0R1cmF0aW9uU3BlY2lmaWNhdGlvbiBkdXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGludCBzaWduID0gX3NpZ24gKiBkdXJhdGlvbi5nZXRTaWduKCk7Ci0gICAgICAgIF9hZGQoZHVyYXRpb24sIHNpZ24pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFN1YnRyYWN0cyBmcm9tIHRoaXMgZHVyYXRpb24uICBEb2VzIGEgZmllbGR3aXNlIHN1YnRyYWN0aW9uLAotICAgICAqIHdpdGggbm8gbm9ybWFsaXphdGlvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzdWJ0cmFjdEdEdXJhdGlvbihHRHVyYXRpb25TcGVjaWZpY2F0aW9uIGR1cmF0aW9uKQotICAgIHsKLSAgICAgICAgaW50IHNpZ24gPSAtX3NpZ24gKiBkdXJhdGlvbi5nZXRTaWduKCk7Ci0gICAgICAgIF9hZGQoZHVyYXRpb24sIHNpZ24pOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBfYWRkKEdEdXJhdGlvblNwZWNpZmljYXRpb24gZHVyYXRpb24sIGludCBzaWduKQotICAgIHsKLSAgICAgICAgX0NZICs9IHNpZ24gKiBkdXJhdGlvbi5nZXRZZWFyKCk7Ci0gICAgICAgIF9NICs9IHNpZ24gKiBkdXJhdGlvbi5nZXRNb250aCgpOwotICAgICAgICBfRCArPSBzaWduICogZHVyYXRpb24uZ2V0RGF5KCk7Ci0gICAgICAgIF9oICs9IHNpZ24gKiBkdXJhdGlvbi5nZXRIb3VyKCk7Ci0gICAgICAgIF9tICs9IHNpZ24gKiBkdXJhdGlvbi5nZXRNaW51dGUoKTsKLSAgICAgICAgX3MgKz0gc2lnbiAqIGR1cmF0aW9uLmdldFNlY29uZCgpOwotCi0gICAgICAgIGlmIChkdXJhdGlvbi5nZXRGcmFjdGlvbigpLnNpZ251bSgpID09IDApCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKF9mcy5zaWdudW0oKSA9PSAwICYmIHNpZ24gPT0gMSkKLSAgICAgICAgICAgIF9mcyA9IGR1cmF0aW9uLmdldEZyYWN0aW9uKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIF9mcyA9IHNpZ24gPiAwID8KLSAgICAgICAgICAgICAgICAgICAgX2ZzLmFkZChkdXJhdGlvbi5nZXRGcmFjdGlvbigpKSA6Ci0gICAgICAgICAgICAgICAgICAgIF9mcy5zdWJ0cmFjdChkdXJhdGlvbi5nZXRGcmFjdGlvbigpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBzaWduLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCB2b2lkIHNldFNpZ24oaW50IHNpZ24pCi0gICAgewotICAgICAgICBpZiAoc2lnbiAhPSAxICYmIHNpZ24gIT0gLTEpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7Ci0gICAgICAgIF9zaWduID0gc2lnbjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSB5ZWFyIGNvbXBvbmVudC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRZZWFyKGludCB5ZWFyKQotICAgICAgICB7IF9DWSA9IHllYXI7IH0KLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIG1vbnRoIGNvbXBvbmVudC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRNb250aChpbnQgbW9udGgpCi0gICAgICAgIHsgX00gPSBtb250aDsgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgZGF5IGNvbXBvbmVudC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXREYXkoaW50IGRheSkKLSAgICAgICAgeyBfRCA9IGRheTsgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIGhvdXIgY29tcG9uZW50LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldEhvdXIoaW50IGhvdXIpCi0gICAgICAgIHsgX2ggPSBob3VyOyAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgbWludXRlIGNvbXBvbmVudC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRNaW51dGUoaW50IG1pbnV0ZSkKLSAgICAgICAgeyBfbSA9IG1pbnV0ZTsgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgc2Vjb25kIGNvbXBvbmVudC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRTZWNvbmQoaW50IHNlY29uZCkKLSAgICAgICAgeyBfcyA9IHNlY29uZDsgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgZnJhY3Rpb24tb2Ytc2Vjb25kIGNvbXBvbmVudC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRGcmFjdGlvbihCaWdEZWNpbWFsIGZyYWN0aW9uKQotICAgICAgICB7IF9mcyA9IGZyYWN0aW9uID09IG51bGwgPyBHRGF0ZS5femVybyA6IGZyYWN0aW9uOyB9Ci0KLSAgICAvKioKLSAgICAgKiBBbGwgR0R1cmF0aW9uIGluc3RhbmNlcyByZXR1cm4gdHJ1ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc0ltbXV0YWJsZSgpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBzaWduIG9mIHRoZSBkdXJhdGlvbjogKzEgaXMgZm9yd2FyZHMKLSAgICAgKiBhbmQgLTEgaXMgYmFja3dhcmRzIGluIHRpbWUuCi0gICAgICogVGhpcyB2YWx1ZSBkb2VzIG5vdCBuZWNlc3NhcmlseSByZWZsZWN0IHRoZQotICAgICAqIHRydWUgZGlyZWN0aW9uIG9mIHRoZSBkdXJhdGlvbiBpZiB0aGUgZHVyYXRpb24KLSAgICAgKiBpcyBub3Qgbm9ybWFsaXplZCBvciBub3Qgbm9ybWFsaXphYmxlLgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0U2lnbigpCi0gICAgICAgIHsgcmV0dXJuIF9zaWduOyB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSB5ZWFyIGNvbXBvbmVudC4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgaW50IGdldFllYXIoKQotICAgICAgICB7IHJldHVybiBfQ1k7ICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBtb250aC1vZi15ZWFyIGNvbXBvbmVudC4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgaW50IGdldE1vbnRoKCkKLSAgICAgICAgeyByZXR1cm4gX007ICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBkYXktb2YtbW9udGggY29tcG9uZW50LgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0RGF5KCkKLSAgICAgICAgeyByZXR1cm4gX0Q7IH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIGhvdXItb2YtZGF5IGNvbXBvbmVudC4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgaW50IGdldEhvdXIoKQotICAgICAgICB7IHJldHVybiBfaDsgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgbWludXRlLW9mLWhvdXIgY29tcG9uZW50LgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0TWludXRlKCkKLSAgICAgICAgeyByZXR1cm4gX207IH0KLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHNlY29uZC1vZi1taW51dGUgY29tcG9uZW50LgotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0U2Vjb25kKCkKLSAgICAgICAgeyByZXR1cm4gX3M7IH0KLQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgZnJhY3Rpb24tb2Ytc2Vjb25kLiBSYW5nZSBmcm9tIDAgKGluY2x1c2l2ZSkgdG8gMSAoZXhjbHVzaXZlKS4KLSAgICAgKi8KLSAgICBwdWJsaWMgQmlnRGVjaW1hbCBnZXRGcmFjdGlvbigpCi0gICAgICAgIHsgcmV0dXJuIF9mczsgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIGFsbCBvZiB0aGUgaW5kaXZpZHVhbCBjb21wb25lbnRzCi0gICAgICogb2YgdGhlIGR1cmF0aW9uIGFyZSBub25uZWdhdGl2ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1ZhbGlkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBHRHVyYXRpb25CdWlsZGVyLmlzVmFsaWREdXJhdGlvbih0aGlzKTsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIE5vcm1hbGl6ZSBhIGR1cmF0aW9uIHZhbHVlLiBUaGlzIGVuc3VyZXMgdGhhdCBtb250aHMsCi0gICAgICogaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFuZCBmcmFjdGlvbnMgYXJlIHBvc2l0aXZlIGFuZAotICAgICAqIHdpdGhpbiB0aGUgcmFuZ2VzIDAuLjExLCAwLi4yMywgMC4uNTksIGV0Yy4gTmVnYXRpdmUKLSAgICAgKiBkdXJhdGlvbnMgYXJlIGluZGljYXRlZCBieSBhIG5lZ2F0aXZlIHNpZ24gcmF0aGVyCi0gICAgICogdGhhbiBuZWdhdGl2ZSBjb21wb25lbnRzLgotICAgICAqIDxwPgotICAgICAqIE1vc3QgZHVyYXRpb24gc3BlY2lmaWNhdGlvbnMgY2FuIGJlIG5vcm1hbGl6ZWQgdG8KLSAgICAgKiB2YWxpZCBkdXJhdGlvbnMgd2l0aCBhbGwgcG9zaXRpdmUgY29tcG9uZW50cywgYnV0Ci0gICAgICogbm90IGFsbCBvZiB0aGVtIGNhbi4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgb25seSBzaXR1YXRpb25zIHdoaWNoIGNhbm5vdCBiZSBub3JtYWxpemVkIGFyZQotICAgICAqIHdoZXJlIHRoZSB5ZWFyL21vbnRoIGFuZCB0aGUgZGF5L2hvdXIvbWludXRlL3NlY29uZAotICAgICAqIG9mZnNldHMgYXJlIG9mIG9wcG9zaXRlIHNpZ24uIERheXMgY2Fubm90IGJlIGNhcnJpZWQKLSAgICAgKiBpbnRvIG1vbnRocyBzaW5jZSB0aGUgbGVuZ3RoIG9mIGEgR3JlZ29yaWFuIG1vbnRoIGlzCi0gICAgICogdmFyaWFibGUgZGVwZW5kaW5nIG9uIHdoZW4gdGhlIGR1cmF0aW9uIGlzIGFwcGxpZWQuCi0gICAgICogSW4gdGhlc2UgY2FzZXMsIHRoaXMgbWV0aG9kIG5vcm1hbGl6ZXMgdGhlIGNvbXBvbmVudHMKLSAgICAgKiBzbyB0aGF0ICJkYXkiIGlzIHRoZSBvbmx5IG5lZ2F0aXZlIGNvbXBvbmVudC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBub3JtYWxpemUoKQotICAgIHsKLSAgICAgICAgX25vcm1hbGl6ZUltcGwodHJ1ZSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogZlF1b3RpZW50KGEsIGIpID0gdGhlIGdyZWF0ZXN0IGludGVnZXIgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGEvYgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgX2ZRdW90aWVudChsb25nIGEsIGludCBiKQotICAgIHsKLSAgICAgICAgaWYgKChhIDwgMCkgPT0gKGIgPCAwKSkKLSAgICAgICAgICAgIHJldHVybiBhIC8gYjsKLQotICAgICAgICByZXR1cm4gLSgoYiAtIGEgLSAxKSAvIGIpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIG1vZHVsbyhhLCBiKSA9IGEgLSBmUXVvdGllbnQoYSxiKSpiCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IF9tb2QobG9uZyBhLCBpbnQgYiwgbG9uZyBxdW90aWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoaW50KShhIC0gcXVvdGllbnQqYikgOwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogUHJpdmF0ZSBpbXBsZW1lbmF0aW9uIG9mIG5vcm1hbGl6ZS4gVGhlIGZsYWcgaXMKLSAgICAgKiB0byBmYWNpbGl0YXRlIHRoaXMgbWV0aG9kIGNhbGxpbmcgaXRzZWxmIHdpdGhvdXQKLSAgICAgKiBkYW5nZXIgb2YgaW5maW5pdGUgcmVjdXJzaW9uLgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCBfbm9ybWFsaXplSW1wbChib29sZWFuIGFkanVzdFNpZ24pCi0gICAgewotICAgICAgICBsb25nIHRlbXA7Ci0KLSAgICAgICAgLy8gbW9udGhzIHRvIHllYXJzCi0gICAgICAgIGlmIChfTSA8IDAgfHwgX00gPiAxMSkKLSAgICAgICAgewotICAgICAgICAgICAgdGVtcCA9IF9NOwotICAgICAgICAgICAgbG9uZyB5Y2FycnkgPSBfZlF1b3RpZW50KHRlbXAsIDEyKTsKLSAgICAgICAgICAgIF9NID0gX21vZCh0ZW1wLCAxMiwgeWNhcnJ5KTsKLSAgICAgICAgICAgIF9DWSArPSB5Y2Fycnk7Ci0gICAgICAgIH0KLQotICAgICAgICBsb25nIGNhcnJ5ID0gMDsKLQotICAgICAgICAvLyBmcmFjdGlvbnMgdG8gc2Vjb25kcwotICAgICAgICBpZiAoX2ZzICE9IG51bGwgJiYgKF9mcy5zaWdudW0oKSA8IDAgfHwgX2ZzLmNvbXBhcmVUbyhHRGF0ZS5fb25lKSA+PSAwKSkKLSAgICAgICAgewotICAgICAgICAgICAgQmlnRGVjaW1hbCBiZGNhcnJ5ID0gX2ZzLnNldFNjYWxlKDAsIEJpZ0RlY2ltYWwuUk9VTkRfRkxPT1IpOwotICAgICAgICAgICAgX2ZzID0gX2ZzLnN1YnRyYWN0KGJkY2FycnkpOwotICAgICAgICAgICAgY2FycnkgPSBiZGNhcnJ5LmludFZhbHVlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY2FycnkgIT0gMCB8fCBfcyA8IDAgfHwgX3MgPiA1OSB8fCBfbSA8IDAgfHwgX20gPiA1MCB8fCBfaCA8IDAgfHwgX2ggPiAyMykKLSAgICAgICAgewotICAgICAgICAgICAgLy8gc2Vjb25kcwotICAgICAgICAgICAgdGVtcCA9IF9zICsgY2Fycnk7Ci0gICAgICAgICAgICBjYXJyeSA9IF9mUXVvdGllbnQodGVtcCwgNjApOwotICAgICAgICAgICAgX3MgPSBfbW9kKHRlbXAsIDYwLCBjYXJyeSk7Ci0KLSAgICAgICAgICAgIC8vIG1pbnV0ZXMKLSAgICAgICAgICAgIHRlbXAgPSBfbSArIGNhcnJ5OwotICAgICAgICAgICAgY2FycnkgPSBfZlF1b3RpZW50KHRlbXAsIDYwKTsKLSAgICAgICAgICAgIF9tID0gX21vZCh0ZW1wLCA2MCwgY2FycnkpOwotCi0gICAgICAgICAgICAvLyBob3VycwotICAgICAgICAgICAgdGVtcCA9IF9oICsgY2Fycnk7Ci0gICAgICAgICAgICBjYXJyeSA9IF9mUXVvdGllbnQodGVtcCwgMjQpOwotICAgICAgICAgICAgX2ggPSBfbW9kKHRlbXAsIDI0LCBjYXJyeSk7Ci0gICAgICAgICAgICBfRCArPSBjYXJyeTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChfQ1kgPT0gMCAmJiBfTSA9PSAwICYmIF9EID09IDAgJiYgX2ggPT0gMCAmJiBfbSA9PSAwICYmIF9zID09IDAgJiYgKF9mcyA9PSBudWxsIHx8IF9mcy5zaWdudW0oKSA9PSAwKSkKLSAgICAgICAgICAgIF9zaWduID0gMTsKLQotICAgICAgICBpZiAoYWRqdXN0U2lnbiAmJiAoX0QgPCAwIHx8IF9DWSA8IDApKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgc2lnbiA9IChfRCA8PSAwICYmIChfQ1kgPCAwIHx8IF9DWSA9PSAwICYmIF9NID09IDApKSA/IC1fc2lnbiA6IF9nZXRUb3RhbFNpZ25TbG93bHkoKTsKLSAgICAgICAgICAgIGlmIChzaWduID09IDIpCi0gICAgICAgICAgICAgICAgc2lnbiA9IChfQ1kgPCAwKSA/IC1fc2lnbiA6IF9zaWduOwotICAgICAgICAgICAgaWYgKHNpZ24gPT0gMCkKLSAgICAgICAgICAgICAgICBzaWduID0gMTsKLSAgICAgICAgICAgIGlmIChzaWduICE9IF9zaWduKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9zaWduID0gc2lnbjsKLSAgICAgICAgICAgICAgICBfQ1kgPSAtX0NZOwotICAgICAgICAgICAgICAgIF9NID0gLV9NOwotICAgICAgICAgICAgICAgIF9EID0gLV9EOwotICAgICAgICAgICAgICAgIF9oID0gLV9oOwotICAgICAgICAgICAgICAgIF9tID0gLV9tOwotICAgICAgICAgICAgICAgIF9zID0gLV9zOwotICAgICAgICAgICAgICAgIGlmIChfZnMgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgX2ZzID0gX2ZzLm5lZ2F0ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgX25vcm1hbGl6ZUltcGwoZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0KLSAgICAvKiBwYWNrYWdlICovIHN0YXRpYyBib29sZWFuIGlzVmFsaWREdXJhdGlvbihHRHVyYXRpb25TcGVjaWZpY2F0aW9uIHNwZWMpCi0gICAgewotICAgICAgICBpZiAoIShzcGVjLmdldFNpZ24oKSA9PSAxIHx8IHNwZWMuZ2V0U2lnbigpID09IC0xKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXR1cm4gKHNwZWMuZ2V0WWVhcigpID49IDAgJiYgc3BlYy5nZXRNb250aCgpID49IDAgJiYgc3BlYy5nZXREYXkoKSA+PSAwICYmCi0gICAgICAgICAgICAgICAgc3BlYy5nZXRIb3VyKCkgPj0gMCAmJiBzcGVjLmdldE1pbnV0ZSgpID49IDAgICYmIHNwZWMuZ2V0U2Vjb25kKCkgPj0gMCAmJgotICAgICAgICAgICAgICAgIHNwZWMuZ2V0RnJhY3Rpb24oKS5zaWdudW0oKSA+PSAwKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb21wYXJpc29uIHRvIGFub3RoZXIgR0R1cmF0aW9uLgotICAgICAqIDx1bD4KLSAgICAgKiA8bGk+UmV0dXJucyAtMSBpZiB0aGlzIDwgZGF0ZS4gKGxlc3MtdGhhbikKLSAgICAgKiA8bGk+UmV0dXJucyAwIGlmIHRoaXMgPT0gZGF0ZS4gKGVxdWFsKQotICAgICAqIDxsaT5SZXR1cm5zIDEgaWYgdGhpcyA+IGRhdGUuIChncmVhdGVyLXRoYW4pCi0gICAgICogPGxpPlJldHVybnMgMiBpZiB0aGlzIDw+IGRhdGUuIChpbmNvbXBhcmFibGUpCi0gICAgICogPC91bD4KLSAgICAgKiBUd28gaW5zdGFuY2VzIGFyZSBpbmNvbXBhcmFibGUgaWYgdGhleSBoYXZlIGRpZmZlcmVudCBhbW91bnRzCi0gICAgICogb2YgaW5mb3JtYXRpb24uCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIGludCBjb21wYXJlVG9HRHVyYXRpb24oR0R1cmF0aW9uU3BlY2lmaWNhdGlvbiBkdXJhdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHRHVyYXRpb25CdWlsZGVyLmNvbXBhcmVEdXJhdGlvbnModGhpcywgZHVyYXRpb24pOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoZSBuYXR1cmFsIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZHVyYXRpb24uCi0gICAgICogPHA+Ci0gICAgICogQW55IGNvbXBvbmVudHMgdGhhdCBhcmUgemVybyBhcmUgb21pdHRlZC4gTm90ZSB0aGF0IGlmIHRoZSBkdXJhdGlvbgotICAgICAqIGlzIGludmFsaWQsIGkuZS4sIGl0IGhhcyBuZWdhdGl2ZSBjb21wb25lbnRzLCB0aG9zZSBuZWdhdGl2ZQotICAgICAqIGNvbXBvbmVudHMgYXJlIHNlcmlhbGl6ZWQgb3V0IGhlcmUuIFRvIGNoZWNrIGZvciB2YWxpZGl0eSwgdXNlCi0gICAgICogdGhlIGlzVmFsaWQoKSBtZXRob2Q7IGFuZCB0byBub3JtYWxpemUgbW9zdCBkdXJhdGlvbnMgdG8gYSB2YWxpZAotICAgICAqIGZvcm0gdXNlIHRoZSBub3JtYWxpemUoKSBtZXRob2QuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gICAgewotICAgICAgICByZXR1cm4gR0R1cmF0aW9uQnVpbGRlci5mb3JtYXREdXJhdGlvbih0aGlzKTsKLSAgICB9Ci0KLSAgICAvKiBwYWNrYWdlICovIHN0YXRpYyBpbnQgY29tcGFyZUR1cmF0aW9ucyhHRHVyYXRpb25TcGVjaWZpY2F0aW9uIGQxLCBHRHVyYXRpb25TcGVjaWZpY2F0aW9uIGQyKQotICAgIHsKLSAgICAgICAgLy8gZmlyc3QgZG8gYW4gYWxsLWZpZWxkcyBjaGVjawotICAgICAgICBpZiAoZDEuZ2V0RnJhY3Rpb24oKS5zaWdudW0oKSA9PSAwICYmIGQyLmdldEZyYWN0aW9uKCkuc2lnbnVtKCkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHMxID0gZDEuZ2V0U2lnbigpOwotICAgICAgICAgICAgaW50IHMyID0gZDIuZ2V0U2lnbigpOwotICAgICAgICAgICAgbG9uZyBtb250aDEgPSBzMSAqICgobG9uZylkMS5nZXRZZWFyKCkgKiAxMiArIGQxLmdldE1vbnRoKCkpOwotICAgICAgICAgICAgbG9uZyBtb250aDIgPSBzMiAqICgobG9uZylkMi5nZXRZZWFyKCkgKiAxMiArIGQyLmdldE1vbnRoKCkpOwotICAgICAgICAgICAgbG9uZyBzZWMxID0gczEgKiAoKCgobG9uZylkMS5nZXREYXkoKSAqIDI0ICsgZDEuZ2V0SG91cigpKSAqIDYwICsgZDEuZ2V0TWludXRlKCkpICogNjAgKyBkMS5nZXRTZWNvbmQoKSk7Ci0gICAgICAgICAgICBsb25nIHNlYzIgPSBzMiAqICgoKChsb25nKWQyLmdldERheSgpICogMjQgKyBkMi5nZXRIb3VyKCkpICogNjAgKyBkMi5nZXRNaW51dGUoKSkgKiA2MCArIGQyLmdldFNlY29uZCgpKTsKLSAgICAgICAgICAgIGlmIChtb250aDEgPT0gbW9udGgyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzZWMxID09IHNlYzIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIGlmIChzZWMxIDwgc2VjMikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgIGlmIChzZWMxID4gc2VjMikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobW9udGgxIDwgbW9udGgyICYmIHNlYzEgLSBzZWMyIDwgMjggKiAyNCAqIDYwICogNjApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgaWYgKG1vbnRoMSA+IG1vbnRoMiAmJiBzZWMyIC0gc2VjMSA8IDI4ICogMjQgKiA2MCAqIDYwKQotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gdGhlIGFuc3dlciBpc24ndCBvYnZpb3VzLCBzbyB0aGVuIGRvIGEgdG90YWwtc2lnbiBjaGVjawotICAgICAgICBHRHVyYXRpb25CdWlsZGVyIGRpZmYgPSBuZXcgR0R1cmF0aW9uQnVpbGRlcihkMSk7Ci0gICAgICAgIGRpZmYuc3VidHJhY3RHRHVyYXRpb24oZDIpOwotICAgICAgICByZXR1cm4gZGlmZi5fZ2V0VG90YWxTaWduU2xvd2x5KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUGVyIHNjaGVtYSBzcGVjLCBjb21wYXJpc29uIG9mIGR1cmF0aW9ucyBpcyBzaW1wbHkgZG9uZQotICAgICAqIGJ5IGNhbGN1bGF0aW5nIGFkZGluZyB0aGUgZHVyYXRpb24gdG8gdGhlc2UgZm91ciBkYXRlcyBhbmQKLSAgICAgKiBjb21wYXJpbmcgdGhlIHJlc3VsdHMuIElmIHRoZSByZXN1bHRzIGFyZSBhbWJpZ3VvdXMsIHRoZQotICAgICAqIGFuc3dlciBpcyAiaW5jb21wYXJhYmxlIi4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBHRGF0ZVtdIF9jb21wRGF0ZSA9IG5ldyBHRGF0ZVtdCi0gICAgewotICAgICAgICBuZXcgR0RhdGUoMTY5NiwgOSwgMSwgMCwgMCwgMCwgbnVsbCwgMCwgMCwgMCksCi0gICAgICAgIG5ldyBHRGF0ZSgxNjk3LCAyLCAxLCAwLCAwLCAwLCBudWxsLCAwLCAwLCAwKSwKLSAgICAgICAgbmV3IEdEYXRlKDE5MDMsIDMsIDEsIDAsIDAsIDAsIG51bGwsIDAsIDAsIDApLAotICAgICAgICBuZXcgR0RhdGUoMTkwMywgNywgMSwgMCwgMCwgMCwgbnVsbCwgMCwgMCwgMCkKLSAgICB9OwotCi0KLSAgICAvKioKLSAgICAgKiBUaGlzIHJldHVybnMgdGhlIHRvdGFsIHNpZ24gb2YgdGhlIGR1cmF0aW9uLCArMQotICAgICAqIGlmIHRoZSBkdXJhdGlvbiBtb3ZlcyBmb3J3YXJkIGluIHRpbWUsIC0xIGlmIHRoZQotICAgICAqIGR1cmF0aW9uIG1vdmVzIGJhY2t3YXJkcyBpbiB0aW1lLCAwIGlmIHRoZSBkdXJhdGlvbgotICAgICAqIGlzIHplcm8tbGVuZ3RoLCBhbmQgMiBpZiB0aGUgZHVyYXRpb24gbWF5IGJlIHBvc2l0aXZlCi0gICAgICogb3IgbmVnYXRpdmUgZGVwZW5kaW5nIG9uIHRoZSBkYXRlLgotICAgICAqCi0gICAgICogKEZvciBleGFtcGxlLCBvbmUgbW9udGggbWludXMgMzAgZGF5cyBpcyBpbmRldGVybWluYXRlKS4KLSAgICAgKi8KLSAgICBwcml2YXRlIGludCBfZ2V0VG90YWxTaWduU2xvd2x5KCkKLSAgICB7Ci0gICAgICAgIGludCBwb3MgPSAwOwotICAgICAgICBpbnQgbmVnID0gMDsKLSAgICAgICAgaW50IHplciA9IDA7Ci0KLSAgICAgICAgR0RhdGVCdWlsZGVyIGVuZGRhdGUgPSBuZXcgR0RhdGVCdWlsZGVyKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX2NvbXBEYXRlLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbmRkYXRlLnNldEdEYXRlKF9jb21wRGF0ZVtpXSk7Ci0gICAgICAgICAgICBlbmRkYXRlLmFkZEdEdXJhdGlvbih0aGlzKTsKLSAgICAgICAgICAgIHN3aXRjaCAoZW5kZGF0ZS5jb21wYXJlVG9HRGF0ZShfY29tcERhdGVbaV0pKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgLTE6Ci0gICAgICAgICAgICAgICAgICAgIG5lZysrOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgICAgIHplcisrOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgICAgIHBvcysrOyBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwb3MgPT0gX2NvbXBEYXRlLmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiArMTsKLSAgICAgICAgaWYgKG5lZyA9PSBfY29tcERhdGUubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBpZiAoemVyID09IF9jb21wRGF0ZS5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIDI7Ci0gICAgfQotCi0gICAgLyogcGFja2FnZSAqLyBzdGF0aWMgU3RyaW5nIGZvcm1hdER1cmF0aW9uKEdEdXJhdGlvblNwZWNpZmljYXRpb24gZHVyYXRpb24pCi0gICAgewotICAgICAgICAvLyBTaWduK1A6ICAgICAgKC0pP1AKLSAgICAgICAgLy8gWWVhcjogICAgICAgICg/OihcZCspWSk/Ci0gICAgICAgIC8vIE1vbnRoOiAgICAgICAoPzooXGQrKU0pPwotICAgICAgICAvLyBEYXk6ICAgICAgICAgKD86KFxkKylEKT8KLSAgICAgICAgLy8gVGltZTogICAgICAgICg/OihUKQotICAgICAgICAvLyBIb3VyczogICAgICAgICAgKD86KFxkKylIKT8KLSAgICAgICAgLy8gTWludXRlczogICAgICAgICg/OihcZCspTSk/Ci0gICAgICAgIC8vIFNlY29uZHM6ICAgICAgICAoPzooXGQrKD86XC5cZCopP3woPzouXGQrKVMpPwotCi0gICAgICAgIFN0cmluZ0J1ZmZlciBtZXNzYWdlID0gbmV3IFN0cmluZ0J1ZmZlcigzMCk7Ci0KLSAgICAgICAgaWYgKGR1cmF0aW9uLmdldFNpZ24oKSA8IDApCi0gICAgICAgICAgICBtZXNzYWdlLmFwcGVuZCgnLScpOwotCi0gICAgICAgIG1lc3NhZ2UuYXBwZW5kKCdQJyk7Ci0KLSAgICAgICAgaWYgKGR1cmF0aW9uLmdldFllYXIoKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBtZXNzYWdlLmFwcGVuZChkdXJhdGlvbi5nZXRZZWFyKCkpOwotICAgICAgICAgICAgbWVzc2FnZS5hcHBlbmQoJ1knKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkdXJhdGlvbi5nZXRNb250aCgpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1lc3NhZ2UuYXBwZW5kKGR1cmF0aW9uLmdldE1vbnRoKCkpOwotICAgICAgICAgICAgbWVzc2FnZS5hcHBlbmQoJ00nKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkdXJhdGlvbi5nZXREYXkoKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBtZXNzYWdlLmFwcGVuZChkdXJhdGlvbi5nZXREYXkoKSk7Ci0gICAgICAgICAgICBtZXNzYWdlLmFwcGVuZCgnRCcpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGR1cmF0aW9uLmdldEhvdXIoKSAhPSAwIHx8IGR1cmF0aW9uLmdldE1pbnV0ZSgpICE9IDAgfHwgZHVyYXRpb24uZ2V0U2Vjb25kKCkgIT0gMCB8fAotICAgICAgICAgICAgIChkdXJhdGlvbi5nZXRGcmFjdGlvbigpLnNpZ251bSgpICE9IDApKQotICAgICAgICB7Ci0gICAgICAgICAgICBtZXNzYWdlLmFwcGVuZCgnVCcpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGR1cmF0aW9uLmdldEhvdXIoKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBtZXNzYWdlLmFwcGVuZChkdXJhdGlvbi5nZXRIb3VyKCkpOwotICAgICAgICAgICAgbWVzc2FnZS5hcHBlbmQoJ0gnKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkdXJhdGlvbi5nZXRNaW51dGUoKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBtZXNzYWdlLmFwcGVuZChkdXJhdGlvbi5nZXRNaW51dGUoKSk7Ci0gICAgICAgICAgICBtZXNzYWdlLmFwcGVuZCgnTScpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGR1cmF0aW9uLmdldEZyYWN0aW9uKCkuc2lnbnVtKCkgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgQmlnRGVjaW1hbCBzID0gZHVyYXRpb24uZ2V0RnJhY3Rpb24oKTsKLSAgICAgICAgICAgIGlmIChkdXJhdGlvbi5nZXRTZWNvbmQoKSAhPSAwKQotICAgICAgICAgICAgICAgIHMgPSBzLmFkZChCaWdEZWNpbWFsLnZhbHVlT2YoZHVyYXRpb24uZ2V0U2Vjb25kKCkpKTsKLSAgICAgICAgICAgIG1lc3NhZ2UuYXBwZW5kKHMpOwotICAgICAgICAgICAgbWVzc2FnZS5hcHBlbmQoJ1MnKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChkdXJhdGlvbi5nZXRTZWNvbmQoKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBtZXNzYWdlLmFwcGVuZChkdXJhdGlvbi5nZXRTZWNvbmQoKSk7Ci0gICAgICAgICAgICBtZXNzYWdlLmFwcGVuZCgnUycpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG1lc3NhZ2UubGVuZ3RoKCkgPD0gMikKLSAgICAgICAgICAgIC8vIFNwZWNpZnkgemVybyBzZWNvbmRzIGlmIGV2ZXJ5dGhpbmcgd2FzIDAKLSAgICAgICAgICAgIG1lc3NhZ2UuYXBwZW5kKCJUMFMiKTsKLQotICAgICAgICByZXR1cm4gbWVzc2FnZS50b1N0cmluZygpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjZhNDFiLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7Ci0KLS8qKgotICogUmVwcmVzZW50cyBhbiBYTUwgU2NoZW1hLWNvbXBhdGlibGUgZHVyYXRpb24uCi0gKiA8cD4KLSAqIEJvdGggdGhlIGltbXV0YWJsZSBHRHVyYXRpb24gYW5kIHRoZSBtdXRhYmxlIEdEdXJhdGlvbkJ1aWxkZXIgYXJlCi0gKiBHRHVyYXRpb25TcGVjaWZpY2F0aW9ucy4gIFVzZSB0aGlzIGludGVyZmFjZSB3aGVyZSB5b3Ugd2FudCB0bwotICogYWxsb3cgY2FsbGVycyB0byBwYXNzIGFueSBpbXBsZW1lbnRhdGlvbiBvZiBhIEdEdXJhdGlvbi4KLSAqIAotICogQHNlZSBHRHVyYXRpb24KLSAqLwotcHVibGljIGludGVyZmFjZSBHRHVyYXRpb25TcGVjaWZpY2F0aW9uCi17Ci0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGlzIGluc3RhbmNlIGlzIGltbXV0YWJsZS4KLSAgICAgKi8KLSAgICBib29sZWFuIGlzSW1tdXRhYmxlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBzaWduIG9mIHRoZSBkdXJhdGlvbjogKzEgaXMgZm9yd2FyZHMKLSAgICAgKiBhbmQgLTEgaXMgYmFja3dhcmRzIGluIHRpbWUuCi0gICAgICovCi0gICAgaW50IGdldFNpZ24oKTsKLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIHllYXIgY29tcG9uZW50LgotICAgICAqLwotICAgIGludCBnZXRZZWFyKCk7Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBtb250aC1vZi15ZWFyIGNvbXBvbmVudC4KLSAgICAgKi8KLSAgICBpbnQgZ2V0TW9udGgoKTsKLQotICAgIC8qKgotICAgICAqIEdldHMgdGhlIGRheS1vZi1tb250aCBjb21wb25lbnQuCi0gICAgICovCi0gICAgaW50IGdldERheSgpOwotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgaG91ci1vZi1kYXkgY29tcG9uZW50LgotICAgICAqLwotICAgIGludCBnZXRIb3VyKCk7Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBtaW51dGUtb2YtaG91ciBjb21wb25lbnQuCi0gICAgICovCi0gICAgaW50IGdldE1pbnV0ZSgpOwotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgc2Vjb25kLW9mLW1pbnV0ZSBjb21wb25lbnQuCi0gICAgICovCi0gICAgaW50IGdldFNlY29uZCgpOwotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgZnJhY3Rpb24tb2Ytc2Vjb25kLiBSYW5nZSBmcm9tIDAgKGluY2x1c2l2ZSkgdG8gMSAoZXhjbHVzaXZlKS4KLSAgICAgKi8KLSAgICBCaWdEZWNpbWFsIGdldEZyYWN0aW9uKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIGNvbXBvbmVudHMKLSAgICAgKiBvZiB0aGUgZHVyYXRpb24gYXJlIG5vbm5lZ2F0aXZlLgotICAgICAqLwotICAgIGJvb2xlYW4gaXNWYWxpZCgpOwotCi0gICAgLyoqCi0gICAgICogQ29tcGFyaXNvbiB0byBhbm90aGVyIEdEdXJhdGlvbi4KLSAgICAgKiA8dWw+Ci0gICAgICogPGxpPlJldHVybnMgLTEgaWYgdGhpcyA8IGRhdGUuIChsZXNzLXRoYW4pCi0gICAgICogPGxpPlJldHVybnMgMCBpZiB0aGlzID09IGRhdGUuIChlcXVhbCkKLSAgICAgKiA8bGk+UmV0dXJucyAxIGlmIHRoaXMgPiBkYXRlLiAoZ3JlYXRlci10aGFuKQotICAgICAqIDxsaT5SZXR1cm5zIDIgaWYgdGhpcyA8PiBkYXRlLiAoaW5jb21wYXJhYmxlKQotICAgICAqIDwvdWw+Ci0gICAgICogVHdvIGluc3RhbmNlcyBhcmUgaW5jb21wYXJhYmxlIGlmIHRoZXkgaGF2ZSBkaWZmZXJlbnQgYW1vdW50cwotICAgICAqIG9mIGluZm9ybWF0aW9uLgotICAgICAqLwotICAgIGludCBjb21wYXJlVG9HRHVyYXRpb24oR0R1cmF0aW9uU3BlY2lmaWNhdGlvbiBkdXJhdGlvbik7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVDYWNoZS5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lQ2FjaGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc1NDMyMS4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVDYWNoZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLS8qKgotICogQSBjYWNoZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHBvb2wgUU5hbWUgaW5zdGFuY2VzLiAgRWFjaCB0aHJlYWQgaGFzIG9uZS4KLSAqLyAKLXB1YmxpYyBmaW5hbCBjbGFzcyBRTmFtZUNhY2hlCi17Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXQgREVGQVVMVF9MT0FEID0gMC43MGY7Ci0gICAgcHJpdmF0ZSBmaW5hbCBmbG9hdCBsb2FkRmFjdG9yOwotICAgIHByaXZhdGUgaW50IG51bUVudHJpZXMgPSAwOwotICAgIHByaXZhdGUgaW50IHRocmVzaG9sZDsKLSAgICBwcml2YXRlIGludCBoYXNobWFzazsKLSAgICBwcml2YXRlIFFOYW1lW10gdGFibGU7Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgUU5hbWVDYWNoZSB3aXRoIHRoZSBnaXZlbiBpbml0aWFsQ2FwYWNpdHkgYW5kIGxvYWRGYWN0b3IuCi0gICAgICogCi0gICAgICogQHBhcmFtIGluaXRpYWxDYXBhY2l0eSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdG8gaW5pdGlhbGx5IG1ha2Ugc3BhY2UgZm9yCi0gICAgICogQHBhcmFtIGxvYWRGYWN0b3IgYSBudW1iZXIgdG8gY29udHJvbCB0aGUgZGVuc2l0eSBvZiB0aGUgaGFzaHRhYmxlCi0gICAgICovIAotICAgIHB1YmxpYyBRTmFtZUNhY2hlKGludCBpbml0aWFsQ2FwYWNpdHksIGZsb2F0IGxvYWRGYWN0b3IpCi0gICAgewotICAgICAgICBhc3NlcnQgaW5pdGlhbENhcGFjaXR5ID4gMDsKLSAgICAgICAgYXNzZXJ0IGxvYWRGYWN0b3IgPiAwICYmIGxvYWRGYWN0b3IgPCAxOwotCi0gICAgICAgIC8vIEZpbmQgYSBwb3dlciBvZiAyID49IGluaXRpYWxDYXBhY2l0eQotICAgICAgICBpbnQgY2FwYWNpdHkgPSAxNjsKLSAgICAgICAgd2hpbGUgKGNhcGFjaXR5IDwgaW5pdGlhbENhcGFjaXR5KSAKLSAgICAgICAgICAgIGNhcGFjaXR5IDw8PSAxOwotICAgIAotICAgICAgICB0aGlzLmxvYWRGYWN0b3IgPSBsb2FkRmFjdG9yOwotICAgICAgICB0aGlzLmhhc2htYXNrID0gY2FwYWNpdHkgLSAxOwotICAgICAgICB0aHJlc2hvbGQgPSAoaW50KShjYXBhY2l0eSAqIGxvYWRGYWN0b3IpOwotICAgICAgICB0YWJsZSA9IG5ldyBRTmFtZVtjYXBhY2l0eV07Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhIFFOYW1lQ2FjaGUgd2l0aCB0aGUgZ2l2ZW4gaW5pdGlhbENhcGFjaXR5LgotICAgICAqIAotICAgICAqIEBwYXJhbSBpbml0aWFsQ2FwYWNpdHkgdGhlIG51bWJlciBvZiBlbnRyaWVzIHRvIGluaXRpYWxseSBtYWtlIHNwYWNlIGZvcgotICAgICAqLyAKLSAgICBwdWJsaWMgUU5hbWVDYWNoZShpbnQgaW5pdGlhbENhcGFjaXR5KQotICAgIHsKLSAgICAgICAgdGhpcyhpbml0aWFsQ2FwYWNpdHksIERFRkFVTFRfTE9BRCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRmV0Y2hlcyBhIFFOYW1lIHdpdGggdGhlIGdpdmVuIG5hbWVzcGFjZSBhbmQgbG9jYWxuYW1lLgotICAgICAqIENyZWF0ZXMgb25lIGlmIG9uZSBpcyBub3QgZm91bmQgaW4gdGhlIGNhY2hlLgotICAgICAqIAotICAgICAqIEBwYXJhbSB1cmkgdGhlIG5hbWVzcGFjZQotICAgICAqIEBwYXJhbSBsb2NhbE5hbWUgdGhlIGxvY2FsbmFtZQotICAgICAqIEByZXR1cm4gdGhlIGNhY2hlZCBRTmFtZQotICAgICAqLyAKLSAgICBwdWJsaWMgUU5hbWUgZ2V0TmFtZShTdHJpbmcgdXJpLCBTdHJpbmcgbG9jYWxOYW1lKQotICAgIHsKLSAgICAgICAgLyoKLSAgICAgICAgcmV0dXJuIG5ldyBRTmFtZSh1cmksIGxvY2FsTmFtZSk7Ci0gICAgICAgICovCi0gICAgICAgIGFzc2VydCBsb2NhbE5hbWUgIT0gbnVsbDsKLSAgICAgICAgCi0gICAgICAgIGlmICh1cmkgPT0gbnVsbCkgdXJpID0gIiI7Ci0KLSAgICAgICAgaW50IGluZGV4ID0gaGFzaCh1cmksIGxvY2FsTmFtZSkgJiBoYXNobWFzazsKLSAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgIFFOYW1lIHEgPSB0YWJsZVtpbmRleF07Ci0gICAgICAgICAgICBpZiAocSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG51bUVudHJpZXMrKzsKLSAgICAgICAgICAgICAgICBpZiAobnVtRW50cmllcyA+PSB0aHJlc2hvbGQpCi0gICAgICAgICAgICAgICAgICAgIHJlaGFzaCgpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlW2luZGV4XSA9IG5ldyBRTmFtZSh1cmksIGxvY2FsTmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChlcXVhbHMocSwgdXJpLCBsb2NhbE5hbWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBxOwotICAgICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgICAgICBpbmRleCA9IChpbmRleC0xKSAmIGhhc2htYXNrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHJlaGFzaCgpCi0gICAgewotICAgICAgICBpbnQgbmV3TGVuZ3RoID0gdGFibGUubGVuZ3RoICogMjsKLSAgICAgICAgUU5hbWVbXSBuZXdUYWJsZSA9IG5ldyBRTmFtZVtuZXdMZW5ndGhdOwotICAgICAgICBpbnQgbmV3SGFzaG1hc2sgPSBuZXdMZW5ndGggLSAxOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IHRhYmxlLmxlbmd0aCA7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgUU5hbWUgcSA9IHRhYmxlW2ldOwotICAgICAgICAgICAgaWYgKHEgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgbmV3SW5kZXggPSBoYXNoKHEuZ2V0TmFtZXNwYWNlVVJJKCksIHEuZ2V0TG9jYWxQYXJ0KCkpICYgbmV3SGFzaG1hc2s7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKG5ld1RhYmxlW25ld0luZGV4XSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICBuZXdJbmRleCA9IChuZXdJbmRleCAtIDEpICYgbmV3SGFzaG1hc2s7Ci0gICAgICAgICAgICAgICAgbmV3VGFibGVbbmV3SW5kZXhdID0gcTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRhYmxlID0gbmV3VGFibGU7Ci0gICAgICAgIGhhc2htYXNrID0gbmV3SGFzaG1hc2s7Ci0gICAgICAgIHRocmVzaG9sZCA9IChpbnQpKG5ld0xlbmd0aCAqIGxvYWRGYWN0b3IpOwotICAgIH0KLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgaGFzaChTdHJpbmcgdXJpLCBTdHJpbmcgbG9jYWxOYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuICh1cmkuaGFzaENvZGUoKSA8PCA1KSArIGxvY2FsTmFtZS5oYXNoQ29kZSgpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gZXF1YWxzKFFOYW1lIHEsIFN0cmluZyB1cmksIFN0cmluZyBsb2NhbE5hbWUpCi0gICAgewotICAgICAgICByZXR1cm4gcS5nZXRMb2NhbFBhcnQoKS5lcXVhbHMobG9jYWxOYW1lKSAmJiBxLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyh1cmkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0ZDJjOTkuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0ODcgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotCi0vKioKLSAqIFRoaXMgaW50ZXJmYWNlIHJlcHJlc2VudHMgYSBsYXR0aWNlIG9mIGZpbml0ZSBhbmQgaW5maW5pdGUgc2V0cyBvZiBRTmFtZXMuCi0gKiBUaGUgbGF0dGljZSB0aGUgbWluaW1hbCBvbmUgdGhhdCBpcyBjbG9zZWQgdW5kZXIgdW5pb24sIGludGVyc2VjdGlvbiwgYW5kCi0gKiBpbnZlcnNlLCBhbmQgY29udGFpbnMgaW5kaXZpZHVhbCBRTmFtZXMgYXMgd2VsbCBhcyBlbnRpcmUgbmFtZXNwYWNlcy4KLSAqIEhlcmUgaXMgYSBzdW1tYXJ5IG9mIHRoZSB0d28ga2luZHMgb2YgUU5hbWVTZXRzOgotICogPHVsPgotICogPGxpPkEgUU5hbWVTZXQgY2FuIGNvdmVyIGEgZmluaXRlIHNldCBvZiBuYW1lc3BhY2VzLCBhZGRpdGlvbmFsbHkgaW5jbHVkaW5nIGEgZmluaXRlCi0gKiAgICAgc2V0IG9mIFFOYW1lcyBvdXRzaWRlIHRob3NlIG5hbWVzcGFjZXMsIGFuZCB3aXRoIHRoZSBleGNlcHRpb24gb2YKLSAqICAgICBhIGZpbml0ZSBzZXQgb2YgUU5hbWVzIGV4Y2x1ZGVkIGZyb20gdGhvc2UgbmFtZXNwYWVzOgotICogICA8dWw+Ci0gKiAgIDxsaT5leGNsdWRlZFFOYW1lc0luSW5jbHVkZWRVUklzID09IHRoZSBzZXQgb2YgZXhjbHVkZWQgUU5hbWVzIGZyb20gY292ZXJlZFVSSXMgbmFtZXNwYWNlcwotICogICA8bGk+ZXhjbHVkZWRVUklzID09IG51bGwKLSAqICAgPGxpPmluY2x1ZGVkVVJJcyA9PSB0aGUgc2V0IG9mIGNvdmVyZWQgbmFtZXNwYWNlIFVSSXMKLSAqICAgPGxpPmluY2x1ZGVkUU5hbWVzSW5FeGNsdWRlZFVSSXMgPT0gc2V0IG9mIGFkZGl0aW9uYWwgUU5hbWVzIG91dHNpZGUgY292ZXJlZFVSSXMgbmFtZXNwYWNlcwotICogICA8L3VsPgotICogPC9saT4KLSAqIDxsaT5BIFFOYW1lU2V0IGNhbiBjb3ZlciBhbGwgbmFtZXNwYWNlcyBleGNlcHQgZm9yIGEgZmluaXRlIG51bWJlciBvZiBleGNsdWRlZCBvbmVzLAotICogICAgIGFkZGl0aW9uYWxseSBpbmNsdWRpbmcgYSBmaW5pdGUgc2V0IG9mIFFOYW1lcyB3aXRoaW4gdGhlIGV4Y2x1ZGVkIG5hbWVzcGFjZXMsCi0gKiAgICAgYW5kIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBhIGZpbml0ZSBzZXQgb2YgUU5hbWVzIG91dHNpZGUgdGhlIGV4Y2x1ZGVkIG5hbWVzcGFjZXM6Ci0gKiAgIDx1bD4KLSAqICAgPGxpPmV4Y2x1ZGVkUU5hbWVzSW5JbmNsdWRlZFVSSXMgPT0gdGhlIHNldCBvZiBleGNsdWRlZCBRTmFtZXMgb3V0c2lkZSB1bmNvdmVyZWRVUklzIG5hbWVzcGFjZXMKLSAqICAgPGxpPmV4Y2x1ZGVkVVJJcyA9PSB0aGUgc2V0IG9mIHVuY292ZXJlZCBuYW1lc3BhY2UgVVJJcwotICogICA8bGk+aW5jbHVkZWRVUklzID09IG51bGwKLSAqICAgPGxpPmluY2x1ZGVkUU5hbWVzSW5FeGNsdWRlZFVSSXMgPT0gc2V0IG9mIGFkZGl0aW9uYWwgUU5hbWVzIGZyb20gdW5jb3ZlcmVkVVJJcyBuYW1lc3BhY2VzCi0gKiAgIDwvdWw+Ci0gKiA8L2xpPgotICogPC91bD4KLSAqIDxwPgotICogTm90aWNlIHRoYXQgYSBmaW5pdGUgc2V0IG9mIFFOYW1lcyBpcyBhIGRlZ2VuZXJhdGUgY2FzZSBvZiB0aGUgZmlyc3QKLSAqIGNhdGVnb3J5IG91dGxpbmVkIGFib3ZlOgotICogPHVsPgotICogPGxpPkEgUW5hbWVTZXQgY2FuIGNvbnRhaW4gYSBmaW5pdGUgbnVtYmVyIG9mIFFOYW1lczoKLSAqICAgPHVsPgotICogICA8bGk+ZXhjbHVkZWRRTmFtZXNJbkluY2x1ZGVkVVJJcyA9PSBudWxsCi0gKiAgIDxsaT5leGNsdWRlZFVSSXMgPT0gbnVsbAotICogICA8bGk+aW5jbHVkZWRVUklzID09IGVtcHR5IHNldAotICogICA8bGk+aW5jbHVkZWRRTmFtZXNJbkV4Y2x1ZGVkVVJJcyA9PSBzZXQgb2YgaW5jbHVkZWQgUU5hbWVzCi0gKiAgIDwvdWw+Ci0gKiA8L2xpPgotICogPC91bD4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIFFOYW1lU2V0IGltcGxlbWVudHMgUU5hbWVTZXRTcGVjaWZpY2F0aW9uLCBqYXZhLmlvLlNlcmlhbGl6YWJsZQotewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotICAgIAotICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBfaW52ZXJ0ZWQ7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTZXQgX2luY2x1ZGVkVVJJczsKLSAgICBwcml2YXRlIGZpbmFsIFNldCBfZXhjbHVkZWRRTmFtZXM7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTZXQgX2luY2x1ZGVkUU5hbWVzOwotCi0gICAgLyoqCi0gICAgICogVGhlIGVtcHR5IFFOYW1lU2V0LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWVTZXQgRU1QVFkgPSBuZXcgUU5hbWVTZXQobnVsbCwgQ29sbGVjdGlvbnMuRU1QVFlfU0VULCBDb2xsZWN0aW9ucy5FTVBUWV9TRVQsIENvbGxlY3Rpb25zLkVNUFRZX1NFVCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgUU5hbWVTZXQgY29udGFpbmluZyBhbGwgUU5hbWVzLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWVTZXQgQUxMID0gbmV3IFFOYW1lU2V0KENvbGxlY3Rpb25zLkVNUFRZX1NFVCwgbnVsbCwgQ29sbGVjdGlvbnMuRU1QVFlfU0VULCBDb2xsZWN0aW9ucy5FTVBUWV9TRVQpOwotCi0gICAgLyoqCi0gICAgICogVGhlIFFOYW1lU2V0IGNvbnRhaW5pbmcgYWxsIFFOYW1lcyBpbiB0aGUgbG9jYWwgKG5vLSluYW1lc3BhY2UuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZVNldCBMT0NBTCA9IG5ldyBRTmFtZVNldChudWxsLCBDb2xsZWN0aW9ucy5zaW5nbGV0b24oIiIpLCBDb2xsZWN0aW9ucy5FTVBUWV9TRVQsIENvbGxlY3Rpb25zLkVNUFRZX1NFVCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgUU5hbWVTZXQgY29udGFpbmluZyBhbGwgUU5hbWVzIGV4Y2VwdCBmb3IgdGhvc2UgaW4gdGhlIGxvY2FsIChuby0pbmFtZXNwYWNlLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWVTZXQgTk9OTE9DQUwgPSBuZXcgUU5hbWVTZXQoQ29sbGVjdGlvbnMuc2luZ2xldG9uKCIiKSwgbnVsbCwgQ29sbGVjdGlvbnMuRU1QVFlfU0VULCBDb2xsZWN0aW9ucy5FTVBUWV9TRVQpOwotCi0gICAgLyoqCi0gICAgICogUHJpdmF0ZSBmdW5jdGlvbiB0byBtaW5pbWl6ZSBvYmplY3QgY3JlYXRpb24gd2hlbiBjb3B5aW5nIHNldHMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgU2V0IG1pblNldENvcHkoU2V0IG9yaWdpbmFsKQotICAgIHsKLSAgICAgICAgaWYgKG9yaWdpbmFsID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgaWYgKG9yaWdpbmFsLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5FTVBUWV9TRVQ7Ci0gICAgICAgIGlmIChvcmlnaW5hbC5zaXplKCkgPT0gMSkKLSAgICAgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5zaW5nbGV0b24ob3JpZ2luYWwuaXRlcmF0b3IoKS5uZXh0KCkpOwotICAgICAgICByZXR1cm4gbmV3IEhhc2hTZXQob3JpZ2luYWwpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBRTmFtZVNldCBiYXNlZCBvbiB0aGUgZ2l2ZW4gc2V0cyBvZiBleGNsdWRlZCBVUklzLAotICAgICAqIGluY2x1ZGVkIFVSSXMsIGV4Y2x1ZGVkIFFOYW1lcyBpbiBpbmNsdWRlZCBuYW1lc3BhY2VzLCBhbmQgaW5jbHVkZWQKLSAgICAgKiBRTmFtZXMgaW4gZXhjbHVkZWQgbmFtZXNwYWNlcy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gZXhjbHVkZWRVUklzIHRoZSBmaW5pdGUgc2V0IG9mIG5hbWVzcGFjZSBVUkkgc3RyaW5ncyB0byBleGNsdWRlIGZyb20gdGhlIHNldCwgb3IgbnVsbCBpZiB0aGlzIHNldCBpcyBpbmZpbml0ZQotICAgICAqIEBwYXJhbSBpbmNsdWRlZFVSSXMgdGhlIGZpbml0ZSBzZXQgb2YgbmFtZXNwYWNlIFVSSSBzdHJpbmdzIHRvIGluY2x1ZGUgaW4gdGhlIHNldCwgb3IgbnVsbCBpZiB0aGlzIHNldCBpcyBpbmZpbml0ZQotICAgICAqIEBwYXJhbSBleGNsdWRlZFFOYW1lc0luSW5jbHVkZWRVUklzIHRoZSBmaW5pdGUgc2V0IG9mIGV4Y2VwdGlvbmFsIFFOYW1lcyB0byBleGNsdWRlIGZyb20gdGhlIGluY2x1ZGVkIG5hbWVzcGFjZXMKLSAgICAgKiBAcGFyYW0gZXhjbHVkZWRRTmFtZXNJbkluY2x1ZGVkVVJJcyB0aGUgZmluaXRlIHNldCBvZiBleGNlcHRpb25hbCBRTmFtZXMgdG8gaW5jbHVkZSB0aGF0IGFyZSBpbiB0aGUgZXhjbHVkZWQgbmFtZXNwYWNlcwotICAgICAqIAotICAgICAqIEByZXR1cm4gdGhlIGNvbnN0cnVjdGVkIFFOYW1lU2V0Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBRTmFtZVNldCBmb3JTZXRzKFNldCBleGNsdWRlZFVSSXMsIFNldCBpbmNsdWRlZFVSSXMsIFNldCBleGNsdWRlZFFOYW1lc0luSW5jbHVkZWRVUklzLCBTZXQgaW5jbHVkZWRRTmFtZXNJbkV4Y2x1ZGVkVVJJcykKLSAgICB7Ci0gICAgICAgIGlmICgoZXhjbHVkZWRVUklzICE9IG51bGwpID09IChpbmNsdWRlZFVSSXMgIT0gbnVsbCkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJFeGFjdGx5IG9uZSBvZiBleGNsdWRlZFVSSXMgYW5kIGluY2x1ZGVkVVJJcyBtdXN0IGJlIG51bGwiKTsKLQotICAgICAgICBpZiAoZXhjbHVkZWRVUklzID09IG51bGwgJiYgaW5jbHVkZWRVUklzLmlzRW1wdHkoKSAmJiBpbmNsdWRlZFFOYW1lc0luRXhjbHVkZWRVUklzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBFTVBUWTsKLSAgICAgICAgaWYgKGluY2x1ZGVkVVJJcyA9PSBudWxsICYmIGV4Y2x1ZGVkVVJJcy5pc0VtcHR5KCkgJiYgZXhjbHVkZWRRTmFtZXNJbkluY2x1ZGVkVVJJcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gQUxMOwotICAgICAgICBpZiAoZXhjbHVkZWRVUklzID09IG51bGwgJiYgaW5jbHVkZWRVUklzLnNpemUoKSA9PSAxICYmIGluY2x1ZGVkVVJJcy5jb250YWlucygiIikgJiYKLSAgICAgICAgICAgIGluY2x1ZGVkUU5hbWVzSW5FeGNsdWRlZFVSSXMuaXNFbXB0eSgpICYmIGV4Y2x1ZGVkUU5hbWVzSW5JbmNsdWRlZFVSSXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIExPQ0FMOwotICAgICAgICBpZiAoaW5jbHVkZWRVUklzID09IG51bGwgJiYgZXhjbHVkZWRVUklzLnNpemUoKSA9PSAxICYmIGV4Y2x1ZGVkVVJJcy5jb250YWlucygiIikgJiYKLSAgICAgICAgICAgIGV4Y2x1ZGVkUU5hbWVzSW5JbmNsdWRlZFVSSXMuaXNFbXB0eSgpICYmIGluY2x1ZGVkUU5hbWVzSW5FeGNsdWRlZFVSSXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIE5PTkxPQ0FMOwotCi0gICAgICAgIHJldHVybiBuZXcgUU5hbWVTZXQoCi0gICAgICAgICAgICAgICAgbWluU2V0Q29weShleGNsdWRlZFVSSXMpLAotICAgICAgICAgICAgICAgIG1pblNldENvcHkoaW5jbHVkZWRVUklzKSwKLSAgICAgICAgICAgICAgICBtaW5TZXRDb3B5KGV4Y2x1ZGVkUU5hbWVzSW5JbmNsdWRlZFVSSXMpLAotICAgICAgICAgICAgICAgIG1pblNldENvcHkoaW5jbHVkZWRRTmFtZXNJbkV4Y2x1ZGVkVVJJcykpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBRTmFtZVNldCBiYXNlZCBvbiB0aGUgZ2l2ZW4gYXJyYXkgb2YgaW5jbHVkZWQgUU5hbWVzCi0gICAgICogCi0gICAgICogQHBhcmFtIGluY2x1ZGVkUU5hbWVzIHRoZSBhcnJheSBvZiBpbmNsdWRlZCBRTmFtZXMKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFFOYW1lU2V0IGZvckFycmF5KFFOYW1lW10gaW5jbHVkZWRRTmFtZXMpCi0gICAgewotICAgICAgICBpZiAoaW5jbHVkZWRRTmFtZXMgPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImluY2x1ZGVkUU5hbWVzIGNhbm5vdCBiZSBudWxsIik7Ci0KLSAgICAgICAgcmV0dXJuIG5ldyBRTmFtZVNldChudWxsLCBuZXcgSGFzaFNldCgpLCBudWxsLCBuZXcgSGFzaFNldChBcnJheXMuYXNMaXN0KGluY2x1ZGVkUU5hbWVzKSkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBRTmFtZVNldCB3aXRoIHRoZSBzYW1lIGNvbnRlbnRzIGFzIHRoZSBnaXZlbgotICAgICAqIFFOYW1lU2V0U3BlY2lmaWNhdGlvbi4KLSAgICAgKiBAcmV0dXJuIHRoZSBjb3BpZWQgUU5hbWVTZXQKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFFOYW1lU2V0IGZvclNwZWNpZmljYXRpb24oUU5hbWVTZXRTcGVjaWZpY2F0aW9uIHNwZWMpCi0gICAgewotICAgICAgICBpZiAoc3BlYyBpbnN0YW5jZW9mIFFOYW1lU2V0KQotICAgICAgICAgICAgcmV0dXJuIChRTmFtZVNldClzcGVjOwotICAgICAgICByZXR1cm4gUU5hbWVTZXQuZm9yU2V0cyhzcGVjLmV4Y2x1ZGVkVVJJcygpLCBzcGVjLmluY2x1ZGVkVVJJcygpLCBzcGVjLmV4Y2x1ZGVkUU5hbWVzSW5JbmNsdWRlZFVSSXMoKSwgc3BlYy5pbmNsdWRlZFFOYW1lc0luRXhjbHVkZWRVUklzKCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBRTmFtZVNldCBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiB3aWxkY2FyZCBuYW1lc3BhY2Ugc3RyaW5nLgotICAgICAqIFRoaXMgaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBVUklzLCBwbHVzIHNwZWNpYWwgdG9rZW5zIGFzIHNwZWNpZmllZAotICAgICAqIGluIHRoZSBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb24gKCMjYW55LCAjI290aGVyLCAjI3RhcmdldE5hbWVzcGFjZSwgIyNsb2NhbCkuCi0gICAgICogQHJldHVybiB0aGUgY29uc3RydWN0ZWQgUU5hbWVTZXQKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFFOYW1lU2V0IGZvcldpbGRjYXJkTmFtZXNwYWNlU3RyaW5nKFN0cmluZyB3aWxkY2FyZCwgU3RyaW5nIHRhcmdldFVSSSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBRTmFtZVNldC5mb3JTcGVjaWZpY2F0aW9uKG5ldyBRTmFtZVNldEJ1aWxkZXIod2lsZGNhcmQsIHRhcmdldFVSSSkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBRTmFtZVNldCBjb250YWluaW5nIG9ubHkgdGhlIGdpdmVuIFFOYW1lLgotICAgICAqIEByZXR1cm4gdGhlIGNvbnN0cnVjdGVkIFFOYW1lU2V0Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBRTmFtZVNldCBzaW5nbGV0b24oUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgUU5hbWVTZXQobnVsbCwgQ29sbGVjdGlvbnMuRU1QVFlfU0VULCBDb2xsZWN0aW9ucy5FTVBUWV9TRVQsIENvbGxlY3Rpb25zLnNpbmdsZXRvbihuYW1lKSk7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGEgUU5hbWVTZXRCdWlsZGVyIHdob3NlIGNvbnRlbnRzIGFyZSBnaXZlbiBieQotICAgICAqIHRoZSBmb3VyIHNldHMuCi0gICAgICoKLSAgICAgKiBUaGlzIGNvbnN0dWN0b3IgaXMgUFJJVkFURSBiZWNhdXNlIGl0IHVzZXMgdGhlIGdpdmVuCi0gICAgICogc2V0cyBkaXJlY3RseSwgYW5kIGl0IHRydXN0cyBpdHMgY2FsbGVycyB0byBzZXQgb25seSBpbW11dGFibGUgdmFsdWVzLgotICAgICAqIFRoaXMgY29uc3RydWN0b3IgaXMgaXMgb25seSBjYWxsZWQgYnkgdGhlIHN0YXRpYyBidWlsZGVyIG1ldGhvZHMgb24KLSAgICAgKiBRTmFtZVNldDogdGhvc2UgbWV0aG9kcyBhcmUgYWxsIGNhcmVmdWwgYXNzaWduIG9ubHkgdW5jaGFuZ2luZyBzZXRzLgotICAgICAqLwotICAgIHByaXZhdGUgUU5hbWVTZXQoU2V0IGV4Y2x1ZGVkVVJJcywgU2V0IGluY2x1ZGVkVVJJcywgU2V0IGV4Y2x1ZGVkUU5hbWVzSW5JbmNsdWRlZFVSSXMsIFNldCBpbmNsdWRlZFFOYW1lc0luRXhjbHVkZWRVUklzKQotICAgIHsKLSAgICAgICAgaWYgKGluY2x1ZGVkVVJJcyAhPSBudWxsICYmIGV4Y2x1ZGVkVVJJcyA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBfaW52ZXJ0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIF9pbmNsdWRlZFVSSXMgPSBpbmNsdWRlZFVSSXM7Ci0gICAgICAgICAgICBfZXhjbHVkZWRRTmFtZXMgPSBleGNsdWRlZFFOYW1lc0luSW5jbHVkZWRVUklzOwotICAgICAgICAgICAgX2luY2x1ZGVkUU5hbWVzID0gaW5jbHVkZWRRTmFtZXNJbkV4Y2x1ZGVkVVJJczsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChleGNsdWRlZFVSSXMgIT0gbnVsbCAmJiBpbmNsdWRlZFVSSXMgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgX2ludmVydGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIF9pbmNsdWRlZFVSSXMgPSBleGNsdWRlZFVSSXM7Ci0gICAgICAgICAgICBfZXhjbHVkZWRRTmFtZXMgPSBpbmNsdWRlZFFOYW1lc0luRXhjbHVkZWRVUklzOwotICAgICAgICAgICAgX2luY2x1ZGVkUU5hbWVzID0gZXhjbHVkZWRRTmFtZXNJbkluY2x1ZGVkVVJJczsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJFeGFjdGx5IG9uZSBvZiBleGNsdWRlZFVSSXMgYW5kIGluY2x1ZGVkVVJJcyBtdXN0IGJlIG51bGwiKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBMb2NhbCB4bWwgbmFtZXMgYXJlIGhhc2VkIHVzaW5nICIiIGFzIHRoZSBuYW1lc3BhY2UuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIG5zRnJvbU5hbWUoUU5hbWUgeG1sTmFtZSkKLSAgICB7Ci0gICAgICAgIFN0cmluZyBucyA9IHhtbE5hbWUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICAgIHJldHVybiBucyA9PSBudWxsID8gIiIgOiBuczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUcnVlIGlmIHRoaXMgTW9kZWxUcmFuc2l0aW9uU2V0IGNvbnRhaW5zIHRoZSBnaXZlbiBxbmFtZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBjb250YWlucyhRTmFtZSBuYW1lKQotICAgIHsKLSAgICAgICAgYm9vbGVhbiBpbiA9IF9pbmNsdWRlZFVSSXMuY29udGFpbnMobnNGcm9tTmFtZShuYW1lKSkgPwotICAgICAgICAgICAgICAgICAgICAgIV9leGNsdWRlZFFOYW1lcy5jb250YWlucyhuYW1lKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgX2luY2x1ZGVkUU5hbWVzLmNvbnRhaW5zKG5hbWUpOwotICAgICAgICByZXR1cm4gX2ludmVydGVkIF4gaW47Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGlzIE1vZGVsVHJhbnNpdGlvblNldCBjb250YWlucyBhbGwgUU5hbWVzLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzQWxsKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfaW52ZXJ0ZWQgJiYgX2luY2x1ZGVkVVJJcy5pc0VtcHR5KCkgJiYgX2luY2x1ZGVkUU5hbWVzLmlzRW1wdHkoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUcnVlIGlmIHRoaXMgTW9kZWxUcmFuc2l0aW9uU2V0IGNvbnRhaW5zIG5vIFFOYW1lcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0VtcHR5KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAhX2ludmVydGVkICYmIF9pbmNsdWRlZFVSSXMuaXNFbXB0eSgpICYmIF9pbmNsdWRlZFFOYW1lcy5pc0VtcHR5KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIG5ldyBRTmFtZVNldCB0aGF0IGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhpcyBvbmUgYW5kIGFub3RoZXIuCi0gICAgICogQHBhcmFtIHNldCB0aGUgc2V0IHRvIGluc2Vyc2VjdCB3aXRoCi0gICAgICogQHJldHVybiB0aGUgaW50ZXJzZWN0aW9uCi0gICAgICovCi0gICAgcHVibGljIFFOYW1lU2V0IGludGVyc2VjdChRTmFtZVNldFNwZWNpZmljYXRpb24gc2V0KQotICAgIHsKLSAgICAgICAgUU5hbWVTZXRCdWlsZGVyIHJlc3VsdCA9IG5ldyBRTmFtZVNldEJ1aWxkZXIodGhpcyk7Ci0gICAgICAgIHJlc3VsdC5yZXN0cmljdChzZXQpOwotICAgICAgICByZXR1cm4gcmVzdWx0LnRvUU5hbWVTZXQoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbmV3IFFOYW1lU2V0IHRoYXQgaXMgdGhlIHVuaW9uIG9mIHRoaXMgb25lIGFuZCBhbm90aGVyLgotICAgICAqIEBwYXJhbSBzZXQgdGhlIHNldCB0byB1bmlvbiB3aXRoCi0gICAgICogQHJldHVybiB0aGUgdW5pb24KLSAgICAgKi8KLSAgICBwdWJsaWMgUU5hbWVTZXQgdW5pb24oUU5hbWVTZXRTcGVjaWZpY2F0aW9uIHNldCkKLSAgICB7Ci0gICAgICAgIFFOYW1lU2V0QnVpbGRlciByZXN1bHQgPSBuZXcgUU5hbWVTZXRCdWlsZGVyKHRoaXMpOwotICAgICAgICByZXN1bHQuYWRkQWxsKHNldCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQudG9RTmFtZVNldCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBuZXcgUU5hbWVTZXQgdGhhdCBpcyB0aGUgaW52ZXJzZSBvZiB0aGlzIG9uZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgUU5hbWVTZXQgaW52ZXJzZSgpCi0gICAgewotICAgICAgICBpZiAodGhpcyA9PSBFTVBUWSkKLSAgICAgICAgICAgIHJldHVybiBBTEw7Ci0gICAgICAgIGlmICh0aGlzID09IEFMTCkKLSAgICAgICAgICAgIHJldHVybiBFTVBUWTsKLSAgICAgICAgaWYgKHRoaXMgPT0gTE9DQUwpCi0gICAgICAgICAgICByZXR1cm4gTk9OTE9DQUw7Ci0gICAgICAgIGlmICh0aGlzID09IE5PTkxPQ0FMKQotICAgICAgICAgICAgcmV0dXJuIExPQ0FMOwotICAgICAgICByZXR1cm4gbmV3IFFOYW1lU2V0KGluY2x1ZGVkVVJJcygpLCBleGNsdWRlZFVSSXMoKSwgaW5jbHVkZWRRTmFtZXNJbkV4Y2x1ZGVkVVJJcygpLCBleGNsdWRlZFFOYW1lc0luSW5jbHVkZWRVUklzKCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhlIGdpdmVuIHNldCBpcyBhIHN1YnNldCBvZiB0aGlzIG9uZS4KLSAgICAgKiBAcGFyYW0gc2V0IHRoZSBzZXQgdG8gdGVzdAotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIGNvbnRhaW5zIGFsbCBRTmFtZXMgY29udGFpbmVkIGJ5IHRoZSBnaXZlbiBzZXQKLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBjb250YWluc0FsbChRTmFtZVNldFNwZWNpZmljYXRpb24gc2V0KQotICAgIHsKLSAgICAgICAgLy8gYS5jb250YWlucyhiKSA9PSBhLmludmVyc2UuaXNEaXNqb2ludChiKQotICAgICAgICBpZiAoIV9pbnZlcnRlZCAmJiBzZXQuZXhjbHVkZWRVUklzKCkgIT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBpbnZlcnNlKCkuaXNEaXNqb2ludChzZXQpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhlIGdpdmVuIHNldCBpcyBkaXNqb2ludCBmcm9tIHRoaXMgb25lLgotICAgICAqIEBwYXJhbSBzZXQgdGhlIHNldCB0byB0ZXN0Ci0gICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBzZXQgaXMgZGlzam9pbnQgZnJvbSB0aGlzIHNldAotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzRGlzam9pbnQoUU5hbWVTZXRTcGVjaWZpY2F0aW9uIHNldCkKLSAgICB7Ci0gICAgICAgIGlmIChfaW52ZXJ0ZWQgJiYgc2V0LmV4Y2x1ZGVkVVJJcygpICE9IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKF9pbnZlcnRlZCkKLSAgICAgICAgICAgIHJldHVybiBpc0Rpc2pvaW50SW1wbChzZXQsIHRoaXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gaXNEaXNqb2ludEltcGwodGhpcywgc2V0KTsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzRGlzam9pbnRJbXBsKFFOYW1lU2V0U3BlY2lmaWNhdGlvbiBzZXQxLCBRTmFtZVNldFNwZWNpZmljYXRpb24gc2V0MikKLSAgICB7Ci0gICAgICAgIFNldCBpbmNsdWRlVVJJcyA9IHNldDEuaW5jbHVkZWRVUklzKCk7Ci0gICAgICAgIFNldCBvdGhlckluY2x1ZGVVUklzID0gc2V0Mi5pbmNsdWRlZFVSSXMoKTsKLSAgICAgICAgaWYgKG90aGVySW5jbHVkZVVSSXMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpID0gaW5jbHVkZVVSSXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAob3RoZXJJbmNsdWRlVVJJcy5jb250YWlucyhpLm5leHQoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNldCBvdGhlckV4Y2x1ZGVVUklzID0gc2V0Mi5leGNsdWRlZFVSSXMoKTsKLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGluY2x1ZGVVUklzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFvdGhlckV4Y2x1ZGVVUklzLmNvbnRhaW5zKGkubmV4dCgpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gc2V0MS5pbmNsdWRlZFFOYW1lc0luRXhjbHVkZWRVUklzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHNldDIuY29udGFpbnMoKFFOYW1lKWkubmV4dCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaW5jbHVkZVVSSXMuc2l6ZSgpID4gMCkKLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IHNldDIuaW5jbHVkZWRRTmFtZXNJbkV4Y2x1ZGVkVVJJcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzZXQxLmNvbnRhaW5zKChRTmFtZSlpLm5leHQoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgCi0gICAgLyoqCi0gICAgICogTmFtZXNwYWNlcyB0aGF0IGFyZSBmdWxseSBleGNsdWRlZCBmcm9tIHRoZSBzZXQgZXhjZXB0IGZvciBhIGZpbml0ZQotICAgICAqIG51bWJlciBvZiBpbmRpdmlkdWFsIFFOYW1lIGV4Y2VwdGlvbnMuICBSZXR1cm5zIG51bGwgaWYgdGhpcyBzZXQgaXMgaW5maW5pdGUuCi0gICAgICogQHJldHVybiB0aGUgc2V0IG9mIGV4Y2x1ZGVkIG5hbWVzcGFjZSBVUkkgc3RyaW5ncwotICAgICAqLyAKLSAgICBwdWJsaWMgU2V0IGV4Y2x1ZGVkVVJJcygpCi0gICAgewotICAgICAgICBpZiAoX2ludmVydGVkKSByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlU2V0KF9pbmNsdWRlZFVSSXMpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBOYW1lc3BhY2VzIHRoYXQgYXJlIGZ1bGx5IGluY2x1ZGVkIGluIHNldCBleGNlcHQgZm9yIGEgZmluaXRlCi0gICAgICogbnVtYmVyIG9mIGluZGl2aWR1YWwgUU5hbWUgZXhjZXB0aW9ucy4gUmV0dXJucyBudWxsIGlmIHRoaXMgc2V0IGlzIGluZmluaXRlLgotICAgICAqIEByZXR1cm4gdGhlIHNldCBvZiBpbmNsdWRlZCBuYW1lc3BhY2UgVVJJIHN0cmluZ3MKLSAgICAgKi8gCi0gICAgcHVibGljIFNldCBpbmNsdWRlZFVSSXMoKQotICAgIHsKLSAgICAgICAgaWYgKCFfaW52ZXJ0ZWQpIHJldHVybiBfaW5jbHVkZWRVUklzOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogVGhlIHNldCBvZiBRTmFtZXMgZXhjbHVkZWQgZnJvbSB0aGUgc2V0IGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHdpdGhpbgotICAgICAqIGEgbmFtZXNwYWNlIHRoYXQgaXMgb3RoZXJ3aXNlIGZ1bGx5IGluY2x1ZGVkIGluIHRoZSBzZXQuCi0gICAgICogQHJldHVybiB0aGUgc2V0IG9mIGV4Y2x1ZGVkIFFOYW1lcyBmcm9tIHdpdGhpbiBpbmNsdWRlZFVSSSBuYW1lc3BhY2VzCi0gICAgICovIAotICAgIHB1YmxpYyBTZXQgZXhjbHVkZWRRTmFtZXNJbkluY2x1ZGVkVVJJcygpCi0gICAgewotICAgICAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlU2V0KF9pbnZlcnRlZCA/IF9pbmNsdWRlZFFOYW1lcyA6IF9leGNsdWRlZFFOYW1lcyk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhlIHNldCBvZiBRTmFtZXMgaW5jbHVkZWQgaW4gdGhlIHNldCBldmVuIHRob3VnaCB0aGV5IGFyZSB3aXRoaW4KLSAgICAgKiBhIG5hbWVzcGFjZSB0aGF0IGlzIG90aGVyd2lzZSBmdWxseSBpbmNsdWRlZCBpbiB0aGUgc2V0LgotICAgICAqIEByZXR1cm4gdGhlIHNldCBvZiBpbmNsdWRlZCBRTmFtZXMgZnJvbSB3aXRoaW4gZXhjbHVkZWRVUkkgbmFtZXNwYWNlcwotICAgICAqLyAKLSAgICBwdWJsaWMgU2V0IGluY2x1ZGVkUU5hbWVzSW5FeGNsdWRlZFVSSXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZVNldChfaW52ZXJ0ZWQgPyBfZXhjbHVkZWRRTmFtZXMgOiBfaW5jbHVkZWRRTmFtZXMpOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIFN0cmluZyBwcmV0dHlRTmFtZShRTmFtZSBuYW1lKQotICAgIHsKLSAgICAgICAgaWYgKG5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBuYW1lLmdldExvY2FsUGFydCgpOwotICAgICAgICByZXR1cm4gbmFtZS5nZXRMb2NhbFBhcnQoKSArICJAIiArIG5hbWUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiB1c2VmdWwgZm9yIGRlYnVnZ2luZywgc3ViamVjdCB0byBjaGFuZ2UuCi0gICAgICovIAotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICAgIHsKLSAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICBzYi5hcHBlbmQoIlFOYW1lU2V0Iik7Ci0gICAgICAgIHNiLmFwcGVuZChfaW52ZXJ0ZWQgPyAiLSgiIDogIisoIik7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IF9pbmNsdWRlZFVSSXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgc2IuYXBwZW5kKCIrKkAiKTsKLSAgICAgICAgICAgIHNiLmFwcGVuZChpLm5leHQoKSk7Ci0gICAgICAgICAgICBzYi5hcHBlbmQoIiwgIik7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gX2V4Y2x1ZGVkUU5hbWVzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNiLmFwcGVuZCgiLSIpOwotICAgICAgICAgICAgc2IuYXBwZW5kKHByZXR0eVFOYW1lKChRTmFtZSlpLm5leHQoKSkpOwotICAgICAgICAgICAgc2IuYXBwZW5kKCIsICIpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IF9pbmNsdWRlZFFOYW1lcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICB7Ci0gICAgICAgICAgICBzYi5hcHBlbmQoIisiKTsKLSAgICAgICAgICAgIHNiLmFwcGVuZChwcmV0dHlRTmFtZSgoUU5hbWUpaS5uZXh0KCkpKTsKLSAgICAgICAgICAgIHNiLmFwcGVuZCgiLCAiKTsKLSAgICAgICAgfQotICAgICAgICBpbnQgaW5kZXggPSBzYi5sYXN0SW5kZXhPZigiLCAiKTsKLSAgICAgICAgaWYgKGluZGV4ID4gMCkKLSAgICAgICAgICAgIHNiLnNldExlbmd0aChpbmRleCk7Ci0gICAgICAgIHNiLmFwcGVuZCgnKScpOwotICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmNWI1N2IuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYyICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLQotLyoqCi0gKiBVc2VkIHRvIGJ1aWxkIHtAbGluayBRTmFtZVNldCBRTmFtZVNldHN9LgotICovIAotcHVibGljIGNsYXNzIFFOYW1lU2V0QnVpbGRlciBpbXBsZW1lbnRzIFFOYW1lU2V0U3BlY2lmaWNhdGlvbiwgamF2YS5pby5TZXJpYWxpemFibGUKLXsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLSAgICAKLSAgICBwcml2YXRlIGJvb2xlYW4gX2ludmVydGVkOwotICAgIHByaXZhdGUgU2V0IF9pbmNsdWRlZFVSSXM7Ci0gICAgcHJpdmF0ZSBTZXQgX2V4Y2x1ZGVkUU5hbWVzOwotICAgIHByaXZhdGUgU2V0IF9pbmNsdWRlZFFOYW1lczsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYW4gZW1wdHkgUU5hbWVTZXRCdWlsZGVyLgotICAgICAqLwotICAgIHB1YmxpYyBRTmFtZVNldEJ1aWxkZXIoKQotICAgIHsKLSAgICAgICAgX2ludmVydGVkID0gZmFsc2U7Ci0gICAgICAgIF9pbmNsdWRlZFVSSXMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICBfZXhjbHVkZWRRTmFtZXMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICBfaW5jbHVkZWRRTmFtZXMgPSBuZXcgSGFzaFNldCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYSBRTmFtZVNldEJ1aWxkZXIgd2hvc2UgaW5pdGlhbCBjb250ZW50cyBhcmUgZ2l2ZW4gYnkKLSAgICAgKiBhbm90aGVyIFFOYW1lU2V0U3BlY2lmaWNhdGlvbi4KLSAgICAgKiBAcGFyYW0gc2V0IHRoZSBRTmFtZVNldFNwZWNpZmljYWl0b24gdG8gY29weQotICAgICAqLwotICAgIHB1YmxpYyBRTmFtZVNldEJ1aWxkZXIoUU5hbWVTZXRTcGVjaWZpY2F0aW9uIHNldCkKLSAgICB7Ci0gICAgICAgIFNldCBpbmNsdWRlZFVSSXMgPSBzZXQuaW5jbHVkZWRVUklzKCk7Ci0gICAgICAgIGlmIChpbmNsdWRlZFVSSXMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgX2ludmVydGVkID0gZmFsc2U7Ci0gICAgICAgICAgICBfaW5jbHVkZWRVUklzID0gbmV3IEhhc2hTZXQoaW5jbHVkZWRVUklzKTsKLSAgICAgICAgICAgIF9leGNsdWRlZFFOYW1lcyA9IG5ldyBIYXNoU2V0KHNldC5leGNsdWRlZFFOYW1lc0luSW5jbHVkZWRVUklzKCkpOwotICAgICAgICAgICAgX2luY2x1ZGVkUU5hbWVzID0gbmV3IEhhc2hTZXQoc2V0LmluY2x1ZGVkUU5hbWVzSW5FeGNsdWRlZFVSSXMoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBfaW52ZXJ0ZWQgPSB0cnVlOwotICAgICAgICAgICAgX2luY2x1ZGVkVVJJcyA9IG5ldyBIYXNoU2V0KHNldC5leGNsdWRlZFVSSXMoKSk7Ci0gICAgICAgICAgICBfZXhjbHVkZWRRTmFtZXMgPSBuZXcgSGFzaFNldChzZXQuaW5jbHVkZWRRTmFtZXNJbkV4Y2x1ZGVkVVJJcygpKTsKLSAgICAgICAgICAgIF9pbmNsdWRlZFFOYW1lcyA9IG5ldyBIYXNoU2V0KHNldC5leGNsdWRlZFFOYW1lc0luSW5jbHVkZWRVUklzKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhIFFOYW1lU2V0QnVpbGRlciB3aG9zZSBpbml0YWwgY29udGVudHMgYXJlIGdpdmVuIGJ5Ci0gICAgICogdGhlIGZvdXIgc2V0cy4gIEV4YWN0bHkgb25lIG9mIGVpdGhlciBleGNsdWRlZFVSSXMgb3IgaW5jbHVkZWRVUklzIG11c3QKLSAgICAgKiBiZSBub24tbnVsbC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gZXhjbHVkZWRVUklzIHRoZSBmaW5pdGUgc2V0IG9mIG5hbWVzcGFjZSBVUkkgc3RyaW5ncyB0byBleGNsdWRlIGZyb20gdGhlIHNldCwgb3IgbnVsbCBpZiB0aGlzIHNldCBpcyBpbmZpbml0ZQotICAgICAqIEBwYXJhbSBpbmNsdWRlZFVSSXMgdGhlIGZpbml0ZSBzZXQgb2YgbmFtZXNwYWNlIFVSSSBzdHJpbmdzIHRvIGluY2x1ZGUgaW4gdGhlIHNldCwgb3IgbnVsbCBpZiB0aGlzIHNldCBpcyBpbmZpbml0ZQotICAgICAqIEBwYXJhbSBleGNsdWRlZFFOYW1lc0luSW5jbHVkZWRVUklzIHRoZSBmaW5pdGUgc2V0IG9mIGV4Y2VwdGlvbmFsIFFOYW1lcyB0byBleGNsdWRlIGZyb20gdGhlIGluY2x1ZGVkIG5hbWVzcGFjZXMKLSAgICAgKiBAcGFyYW0gZXhjbHVkZWRRTmFtZXNJbkluY2x1ZGVkVVJJcyB0aGUgZmluaXRlIHNldCBvZiBleGNlcHRpb25hbCBRTmFtZXMgdG8gaW5jbHVkZSB0aGF0IGFyZSBpbiB0aGUgZXhjbHVkZWQgbmFtZXNwYWNlcwotICAgICAqLwotICAgIHB1YmxpYyBRTmFtZVNldEJ1aWxkZXIoU2V0IGV4Y2x1ZGVkVVJJcywgU2V0IGluY2x1ZGVkVVJJcywgU2V0IGV4Y2x1ZGVkUU5hbWVzSW5JbmNsdWRlZFVSSXMsIFNldCBpbmNsdWRlZFFOYW1lc0luRXhjbHVkZWRVUklzKQotICAgIHsKLSAgICAgICAgaWYgKGluY2x1ZGVkVVJJcyAhPSBudWxsICYmIGV4Y2x1ZGVkVVJJcyA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBfaW52ZXJ0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIF9pbmNsdWRlZFVSSXMgPSBuZXcgSGFzaFNldChpbmNsdWRlZFVSSXMpOwotICAgICAgICAgICAgX2V4Y2x1ZGVkUU5hbWVzID0gbmV3IEhhc2hTZXQoZXhjbHVkZWRRTmFtZXNJbkluY2x1ZGVkVVJJcyk7Ci0gICAgICAgICAgICBfaW5jbHVkZWRRTmFtZXMgPSBuZXcgSGFzaFNldChpbmNsdWRlZFFOYW1lc0luRXhjbHVkZWRVUklzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChleGNsdWRlZFVSSXMgIT0gbnVsbCAmJiBpbmNsdWRlZFVSSXMgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgX2ludmVydGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIF9pbmNsdWRlZFVSSXMgPSBuZXcgSGFzaFNldChleGNsdWRlZFVSSXMpOwotICAgICAgICAgICAgX2V4Y2x1ZGVkUU5hbWVzID0gbmV3IEhhc2hTZXQoaW5jbHVkZWRRTmFtZXNJbkV4Y2x1ZGVkVVJJcyk7Ci0gICAgICAgICAgICBfaW5jbHVkZWRRTmFtZXMgPSBuZXcgSGFzaFNldChleGNsdWRlZFFOYW1lc0luSW5jbHVkZWRVUklzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJFeGFjdGx5IG9uZSBvZiBleGNsdWRlZFVSSXMgYW5kIGluY2x1ZGVkVVJJcyBtdXN0IGJlIG51bGwiKTsKLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYSBRTmFtZVNldEJ1aWxkZXIgd2hvc2UgaW5pdGlhbCBjb250ZW50cyBhcmUgZ2l2ZW4KLSAgICAgKiBhcyBhIGxpc3Qgb2YgbmFtZXNwYWNlIFVSSXMsIHVzaW5nIHRoZSBzYW1lIGZvcm1hdCB1c2VkIGJ5IHdpbGRjYXJkcwotICAgICAqIGluIFhTRCBmaWxlcy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gc3RyIGEgd2lsZGNhcmQgbmFtZXNwYWNlIHNwZWNpZmljYXRpb24gc3RyaW5nIHN1Y2ggYXMgIiMjYW55IiwKLSAgICAgKiAgICAgICAgIiMjb3RoZXIiLCAiIyNsb2NhbCIsICIjI3RhcmdldE5hbWVzcGFjZSIsIG9yIGEgc3BhY2Utc2VwYXJhdGVkCi0gICAgICogICAgICAgIGxpc3Qgb2YgVVJJcy4KLSAgICAgKiBAcGFyYW0gdGFyZ2V0VVJJIHRoZSBjdXJyZW50IHRhcmdldE5hbWVzcGFjZQotICAgICAqLwotICAgIHB1YmxpYyBRTmFtZVNldEJ1aWxkZXIoU3RyaW5nIHN0ciwgU3RyaW5nIHRhcmdldFVSSSkKLSAgICB7Ci0gICAgICAgIHRoaXMoKTsKLQotICAgICAgICBpZiAoc3RyID09IG51bGwpCi0gICAgICAgICAgICBzdHIgPSAiIyNhbnkiOwotCi0gICAgICAgIFN0cmluZ1tdIHVyaSA9IHNwbGl0TGlzdChzdHIpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVyaS5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIGFkZHVyaSA9IHVyaVtpXTsKLSAgICAgICAgICAgIGlmIChhZGR1cmkuc3RhcnRzV2l0aCgiIyMiKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoYWRkdXJpLmVxdWFscygiIyNvdGhlciIpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldFVSSSA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOwotICAgICAgICAgICAgICAgICAgICBRTmFtZVNldEJ1aWxkZXIgdGVtcCA9IG5ldyBRTmFtZVNldEJ1aWxkZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcC5hZGROYW1lc3BhY2UodGFyZ2V0VVJJKTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcC5hZGROYW1lc3BhY2UoIiIpOwotICAgICAgICAgICAgICAgICAgICB0ZW1wLmludmVydCgpOwotICAgICAgICAgICAgICAgICAgICBhZGRBbGwodGVtcCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChhZGR1cmkuZXF1YWxzKCIjI2FueSIpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2xlYXIoKTsKLSAgICAgICAgICAgICAgICAgICAgaW52ZXJ0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICh1cmlbaV0uZXF1YWxzKCIjI3RhcmdldE5hbWVzcGFjZSIpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldFVSSSA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOwotICAgICAgICAgICAgICAgICAgICBhZGR1cmkgPSB0YXJnZXRVUkk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVyaVtpXS5lcXVhbHMoIiMjbG9jYWwiKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFkZHVyaSA9ICIiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFkZE5hbWVzcGFjZShhZGR1cmkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIExvY2FsIHhtbCBuYW1lcyBhcmUgaGFzZWQgdXNpbmcgIiIgYXMgdGhlIG5hbWVzcGFjZS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgbnNGcm9tTmFtZShRTmFtZSBRTmFtZSkKLSAgICB7Ci0gICAgICAgIFN0cmluZyBucyA9IFFOYW1lLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgICByZXR1cm4gbnMgPT0gbnVsbCA/ICIiIDogbnM7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEVNUFRZX1NUUklOR0FSUkFZID0gbmV3IFN0cmluZ1swXTsKLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzU3BhY2UoY2hhciBjaCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoY2gpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgJyAnOgotICAgICAgICAgICAgY2FzZSAnXHQnOgotICAgICAgICAgICAgY2FzZSAnXHInOgotICAgICAgICAgICAgY2FzZSAnXG4nOgotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmdbXSBzcGxpdExpc3QoU3RyaW5nIHMpCi0gICAgewotICAgICAgICBpZiAocy5sZW5ndGgoKSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIEVNUFRZX1NUUklOR0FSUkFZOwotICAgICAgICAgICAgICAgIAotICAgICAgICBMaXN0IHJlc3VsdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgaW50IGkgPSAwOwotICAgICAgICBpbnQgc3RhcnQgPSAwOwotICAgICAgICBmb3IgKDs7KQotICAgICAgICB7Ci0gICAgICAgICAgICB3aGlsZSAoaSA8IHMubGVuZ3RoKCkgJiYgaXNTcGFjZShzLmNoYXJBdChpKSkpCi0gICAgICAgICAgICAgICAgaSArPSAxOwotICAgICAgICAgICAgaWYgKGkgPj0gcy5sZW5ndGgoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gKFN0cmluZ1tdKXJlc3VsdC50b0FycmF5KEVNUFRZX1NUUklOR0FSUkFZKTsKLSAgICAgICAgICAgIHN0YXJ0ID0gaTsKLSAgICAgICAgICAgIHdoaWxlIChpIDwgcy5sZW5ndGgoKSAmJiAhaXNTcGFjZShzLmNoYXJBdChpKSkpCi0gICAgICAgICAgICAgICAgaSArPSAxOwotICAgICAgICAgICAgcmVzdWx0LmFkZChzLnN1YnN0cmluZyhzdGFydCwgaSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIFJlbW92ZSBhbGwgeG1sIG5hbWVzIGZyb20gcW5hbWVzZXQgd2hvc2UgbmFtZXNwYWNlIG1hdGNoZXMgdGhlIHVyaS4KLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHJlbW92ZUFsbE1hdGNoaW5nTnMoU3RyaW5nIHVyaSwgU2V0IHFuYW1lc2V0KQotICAgIHsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gcW5hbWVzZXQuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHVyaS5lcXVhbHMobnNGcm9tTmFtZSgoUU5hbWUpaS5uZXh0KCkpKSkKLSAgICAgICAgICAgICAgICBpLnJlbW92ZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVtb3ZlIGFsbCB4bWwgbmFtZXMgZnJvbSBxbmFtZXNldCB3aG9zZSBuYW1lc3BhY2UgaXMgaW4gdGhlCi0gICAgICogZmlyc3Qgc2V0IG9mIHVyaXMgYnV0IG5vdCB0aGUgc2Vjb25kLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcmVtb3ZlQWxsTWF0Y2hpbmdGaXJzdE9ubHkoU2V0IHNldEZpcnN0LCBTZXQgc2V0U2Vjb25kLCBTZXQgcW5hbWVzZXQpCi0gICAgewotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBxbmFtZXNldC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgbnMgPSBuc0Zyb21OYW1lKChRTmFtZSlpLm5leHQoKSk7Ci0gICAgICAgICAgICBpZiAoc2V0Rmlyc3QuY29udGFpbnMobnMpICYmICFzZXRTZWNvbmQuY29udGFpbnMobnMpKQotICAgICAgICAgICAgICAgIGkucmVtb3ZlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZW1vdmUgYWxsIHhtbCBuYW1lcyBmcm9tIHFuYW1lc2V0IHdob3NlIG5hbWVzcGFjZSBpcyBpbiBib3RoCi0gICAgICogc2V0cyBvZiB1cmlzLgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcmVtb3ZlQWxsTWF0Y2hpbmdCb3RoKFNldCBzZXRGaXJzdCwgU2V0IHNldFNlY29uZCwgU2V0IHFuYW1lc2V0KQotICAgIHsKLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gcW5hbWVzZXQuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIG5zID0gbnNGcm9tTmFtZSgoUU5hbWUpaS5uZXh0KCkpOwotICAgICAgICAgICAgaWYgKHNldEZpcnN0LmNvbnRhaW5zKG5zKSAmJiBzZXRTZWNvbmQuY29udGFpbnMobnMpKQotICAgICAgICAgICAgICAgIGkucmVtb3ZlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZW1vdmUgYWxsIHhtbCBuYW1lcyBmcm9tIHFuYW1lc2V0IHdob3NlIG5hbWVzcGFjZSBpcyBpbiBuZWl0aGVyCi0gICAgICogc2V0IG9mIHVyaXMuCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCByZW1vdmVBbGxNYXRjaGluZ05laXRoZXIoU2V0IHNldEZpcnN0LCBTZXQgc2V0U2Vjb25kLCBTZXQgcW5hbWVzZXQpCi0gICAgewotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBxbmFtZXNldC5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgbnMgPSBuc0Zyb21OYW1lKChRTmFtZSlpLm5leHQoKSk7Ci0gICAgICAgICAgICBpZiAoIXNldEZpcnN0LmNvbnRhaW5zKG5zKSAmJiAhc2V0U2Vjb25kLmNvbnRhaW5zKG5zKSkKLSAgICAgICAgICAgICAgICBpLnJlbW92ZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGlzIE1vZGVsVHJhbnNpdGlvblNldCBjb250YWlucyB0aGUgZ2l2ZW4gcW5hbWUuCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gY29udGFpbnMoUU5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIGJvb2xlYW4gaW4gPSBfaW5jbHVkZWRVUklzLmNvbnRhaW5zKG5zRnJvbU5hbWUobmFtZSkpID8KLSAgICAgICAgICAgICAgICAgICAgICFfZXhjbHVkZWRRTmFtZXMuY29udGFpbnMobmFtZSkgOgotICAgICAgICAgICAgICAgICAgICAgIF9pbmNsdWRlZFFOYW1lcy5jb250YWlucyhuYW1lKTsKLSAgICAgICAgcmV0dXJuIF9pbnZlcnRlZCBeIGluOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhpcyBNb2RlbFRyYW5zaXRpb25TZXQgY29udGFpbnMgYWxsIFFOYW1lcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0FsbCgpCi0gICAgewotICAgICAgICByZXR1cm4gX2ludmVydGVkICYmIF9pbmNsdWRlZFVSSXMuc2l6ZSgpID09IDAgJiYgX2luY2x1ZGVkUU5hbWVzLnNpemUoKSA9PSAwOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhpcyBNb2RlbFRyYW5zaXRpb25TZXQgY29udGFpbnMgbm8gUU5hbWVzLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzRW1wdHkoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICFfaW52ZXJ0ZWQgJiYgX2luY2x1ZGVkVVJJcy5zaXplKCkgPT0gMCAmJiBfaW5jbHVkZWRRTmFtZXMuc2l6ZSgpID09IDA7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIG5ldyBRTmFtZVNldCB0aGF0IGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhpcyBvbmUgYW5kIGFub3RoZXIuCi0gICAgICovCi0gICAgcHVibGljIFFOYW1lU2V0IGludGVyc2VjdChRTmFtZVNldFNwZWNpZmljYXRpb24gc2V0KQotICAgIHsKLSAgICAgICAgUU5hbWVTZXRCdWlsZGVyIHJlc3VsdCA9IG5ldyBRTmFtZVNldEJ1aWxkZXIodGhpcyk7Ci0gICAgICAgIHJlc3VsdC5yZXN0cmljdChzZXQpOwotICAgICAgICByZXR1cm4gcmVzdWx0LnRvUU5hbWVTZXQoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbmV3IFFOYW1lU2V0IHRoYXQgaXMgdGhlIHVuaW9uIG9mIHRoaXMgb25lIGFuZCBhbm90aGVyLgotICAgICAqLwotICAgIHB1YmxpYyBRTmFtZVNldCB1bmlvbihRTmFtZVNldFNwZWNpZmljYXRpb24gc2V0KQotICAgIHsKLSAgICAgICAgUU5hbWVTZXRCdWlsZGVyIHJlc3VsdCA9IG5ldyBRTmFtZVNldEJ1aWxkZXIodGhpcyk7Ci0gICAgICAgIHJlc3VsdC5hZGRBbGwoc2V0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdC50b1FOYW1lU2V0KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIG5ldyBRTmFtZVNldCB0aGF0IGlzIHRoZSBpbnZlcnNlIG9mIHRoaXMgb25lLgotICAgICAqLwotICAgIHB1YmxpYyBRTmFtZVNldCBpbnZlcnNlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBRTmFtZVNldC5mb3JTZXRzKGluY2x1ZGVkVVJJcygpLCBleGNsdWRlZFVSSXMoKSwgaW5jbHVkZWRRTmFtZXNJbkV4Y2x1ZGVkVVJJcygpLCBleGNsdWRlZFFOYW1lc0luSW5jbHVkZWRVUklzKCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhlIHBhcmFtZXRlciBpcyBhIHN1YnNldCBvZiB0aGlzIHNldC4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBjb250YWluc0FsbChRTmFtZVNldFNwZWNpZmljYXRpb24gc2V0KQotICAgIHsKLSAgICAgICAgaWYgKCFfaW52ZXJ0ZWQgJiYgc2V0LmV4Y2x1ZGVkVVJJcygpICE9IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gaW52ZXJzZSgpLmlzRGlzam9pbnQoc2V0KTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUcnVlIGlmIHRoZSBnaXZlbiBzZXQgaXMgZGlzam9pbnQgZnJvbSB0aGlzIG9uZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0Rpc2pvaW50KFFOYW1lU2V0U3BlY2lmaWNhdGlvbiBzZXQpCi0gICAgewotICAgICAgICBpZiAoX2ludmVydGVkICYmIHNldC5leGNsdWRlZFVSSXMoKSAhPSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChfaW52ZXJ0ZWQpCi0gICAgICAgICAgICByZXR1cm4gaXNEaXNqb2ludEltcGwoc2V0LCB0aGlzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGlzRGlzam9pbnRJbXBsKHRoaXMsIHNldCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzRGlzam9pbnRJbXBsKFFOYW1lU2V0U3BlY2lmaWNhdGlvbiBzZXQxLCBRTmFtZVNldFNwZWNpZmljYXRpb24gc2V0MikKLSAgICB7Ci0gICAgICAgIFNldCBpbmNsdWRlVVJJcyA9IHNldDEuaW5jbHVkZWRVUklzKCk7Ci0gICAgICAgIFNldCBvdGhlckluY2x1ZGVVUklzID0gc2V0Mi5pbmNsdWRlZFVSSXMoKTsKLSAgICAgICAgaWYgKG90aGVySW5jbHVkZVVSSXMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpID0gaW5jbHVkZVVSSXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAob3RoZXJJbmNsdWRlVVJJcy5jb250YWlucyhpLm5leHQoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNldCBvdGhlckV4Y2x1ZGVVUklzID0gc2V0Mi5leGNsdWRlZFVSSXMoKTsKLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGluY2x1ZGVVUklzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFvdGhlckV4Y2x1ZGVVUklzLmNvbnRhaW5zKGkubmV4dCgpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gc2V0MS5pbmNsdWRlZFFOYW1lc0luRXhjbHVkZWRVUklzKCkuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHNldDIuY29udGFpbnMoKFFOYW1lKWkubmV4dCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaW5jbHVkZVVSSXMuc2l6ZSgpID4gMCkKLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IHNldDIuaW5jbHVkZWRRTmFtZXNJbkV4Y2x1ZGVkVVJJcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzZXQxLmNvbnRhaW5zKChRTmFtZSlpLm5leHQoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0KLSAgICAvKioKLSAgICAgKiBDbGVhcnMgdGhpcyBRTmFtZVNldEJ1aWxkZXIKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBjbGVhcigpCi0gICAgewotICAgICAgICBfaW52ZXJ0ZWQgPSBmYWxzZTsKLSAgICAgICAgX2luY2x1ZGVkVVJJcy5jbGVhcigpOwotICAgICAgICBfZXhjbHVkZWRRTmFtZXMuY2xlYXIoKTsKLSAgICAgICAgX2luY2x1ZGVkUU5hbWVzLmNsZWFyKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW52ZXJ0cyB0aGlzIFFOYW1lU2V0QnVpbGRlci4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBpbnZlcnQoKQotICAgIHsKLSAgICAgICAgX2ludmVydGVkID0gIV9pbnZlcnRlZDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBZGRzIGEgc2luZ2xlIFFOYW1lIHRvIHRoaXMgUU5hbWVTZXRCdWlsZGVyLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIGFkZChRTmFtZSBxbmFtZSkKLSAgICB7Ci0gICAgICAgIGlmICghX2ludmVydGVkKQotICAgICAgICAgICAgYWRkSW1wbChxbmFtZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlbW92ZUltcGwocW5hbWUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFkZHMgYW4gZW50aXJlIG5hbWVzcGFjZSBVUkkgb2YgUU5hbWVzIHRvIHRoaXMgUU5hbWVTZXRCdWlsZGVyLgotICAgICAqIFRoZSBlbXB0eSBzdHJpbmcgaXMgdXNlZCB0byBzaWduaWZpeSB0aGUgKGxvY2FsKSBuby1uYW1lc3BhY2UuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgYWRkTmFtZXNwYWNlKFN0cmluZyB1cmkpCi0gICAgewotICAgICAgICBpZiAoIV9pbnZlcnRlZCkKLSAgICAgICAgICAgIGFkZE5hbWVzcGFjZUltcGwodXJpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVtb3ZlTmFtZXNwYWNlSW1wbCh1cmkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFkZHMgdGhlIGNvbnRlbnRzIG9mIGFub3RoZXIgUU5hbWVTZXQgdG8gdGhpcyBRTmFtZVNldEJ1aWxkZXIuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgYWRkQWxsKFFOYW1lU2V0U3BlY2lmaWNhdGlvbiBzZXQpCi0gICAgewotICAgICAgICBpZiAoX2ludmVydGVkKQotICAgICAgICAgICAgcmVtb3ZlQWxsSW1wbChzZXQuaW5jbHVkZWRVUklzKCksIHNldC5leGNsdWRlZFVSSXMoKSwgc2V0LmluY2x1ZGVkUU5hbWVzSW5FeGNsdWRlZFVSSXMoKSwgc2V0LmV4Y2x1ZGVkUU5hbWVzSW5JbmNsdWRlZFVSSXMoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZEFsbEltcGwoc2V0LmluY2x1ZGVkVVJJcygpLCBzZXQuZXhjbHVkZWRVUklzKCksIHNldC5pbmNsdWRlZFFOYW1lc0luRXhjbHVkZWRVUklzKCksIHNldC5leGNsdWRlZFFOYW1lc0luSW5jbHVkZWRVUklzKCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlbW92ZXMgdGhlIGdpdmVuIHFuYW1lIGZyb20gdGhpcyBRTmFtZVNldEJ1aWxkZXIuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlKFFOYW1lIHFuYW1lKQotICAgIHsKLSAgICAgICAgaWYgKF9pbnZlcnRlZCkKLSAgICAgICAgICAgIGFkZEltcGwocW5hbWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZW1vdmVJbXBsKHFuYW1lKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZW1vdmVzIGFuIGVudGlyZSBuYW1lc3BhY2UgVVJJIGZyb20gdGhpcyBRTmFtZVNldEJ1aWxkZXIuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlTmFtZXNwYWNlKFN0cmluZyB1cmkpCi0gICAgewotICAgICAgICBpZiAoX2ludmVydGVkKQotICAgICAgICAgICAgYWRkTmFtZXNwYWNlSW1wbCh1cmkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZW1vdmVOYW1lc3BhY2VJbXBsKHVyaSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVtb3ZlcyBhbGwgY29udGVudHMgb2YgYSBnaXZlbiBRTmFtZVNldCBmcm9tIHRoaXMgUU5hbWVTZXRCdWlsZGVyLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlbW92ZUFsbChRTmFtZVNldFNwZWNpZmljYXRpb24gc2V0KQotICAgIHsKLSAgICAgICAgaWYgKF9pbnZlcnRlZCkKLSAgICAgICAgICAgIGFkZEFsbEltcGwoc2V0LmluY2x1ZGVkVVJJcygpLCBzZXQuZXhjbHVkZWRVUklzKCksIHNldC5pbmNsdWRlZFFOYW1lc0luRXhjbHVkZWRVUklzKCksIHNldC5leGNsdWRlZFFOYW1lc0luSW5jbHVkZWRVUklzKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZW1vdmVBbGxJbXBsKHNldC5pbmNsdWRlZFVSSXMoKSwgc2V0LmV4Y2x1ZGVkVVJJcygpLCBzZXQuaW5jbHVkZWRRTmFtZXNJbkV4Y2x1ZGVkVVJJcygpLCBzZXQuZXhjbHVkZWRRTmFtZXNJbkluY2x1ZGVkVVJJcygpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXN0cmljdHMgdGhlIGNvbnRlbnRzIG9mIHRoaXMgUU5hbWVTZXRCdWlsZGVyIHRvIGJlIGEgc3Vic2V0IG9mIHRoZQotICAgICAqIGdpdmVuIFFOYW1lU2V0LiBJbiBvdGhlciB3b3JkcywgY29tcHV0ZXMgYW4gaW50ZXJzZWN0aW9uLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlc3RyaWN0KFFOYW1lU2V0U3BlY2lmaWNhdGlvbiBzZXQpCi0gICAgewotICAgICAgICBpZiAoX2ludmVydGVkKQotICAgICAgICAgICAgYWRkQWxsSW1wbChzZXQuZXhjbHVkZWRVUklzKCksIHNldC5pbmNsdWRlZFVSSXMoKSwgc2V0LmV4Y2x1ZGVkUU5hbWVzSW5JbmNsdWRlZFVSSXMoKSwgc2V0LmluY2x1ZGVkUU5hbWVzSW5FeGNsdWRlZFVSSXMoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlbW92ZUFsbEltcGwoc2V0LmV4Y2x1ZGVkVVJJcygpLCBzZXQuaW5jbHVkZWRVUklzKCksIHNldC5leGNsdWRlZFFOYW1lc0luSW5jbHVkZWRVUklzKCksIHNldC5pbmNsdWRlZFFOYW1lc0luRXhjbHVkZWRVUklzKCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEltcGxlbWVudGF0aW9uIG9mIGFkZChxbmFtZSkgdGhhdCBpZ25vcmVzIGludmVyc2lvbi4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgYWRkSW1wbChRTmFtZSBxbmFtZSkKLSAgICB7Ci0gICAgICAgIGlmIChfaW5jbHVkZWRVUklzLmNvbnRhaW5zKG5zRnJvbU5hbWUocW5hbWUpKSkKLSAgICAgICAgICAgIF9leGNsdWRlZFFOYW1lcy5yZW1vdmUocW5hbWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBfaW5jbHVkZWRRTmFtZXMuYWRkKHFuYW1lKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiBhZGQobnMpIHRoYXQgaWdub3JlcyBpbnZlcnNpb24uCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIGFkZE5hbWVzcGFjZUltcGwoU3RyaW5nIHVyaSkKLSAgICB7Ci0gICAgICAgIGlmIChfaW5jbHVkZWRVUklzLmNvbnRhaW5zKHVyaSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlbW92ZUFsbE1hdGNoaW5nTnModXJpLCBfZXhjbHVkZWRRTmFtZXMpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmVtb3ZlQWxsTWF0Y2hpbmdOcyh1cmksIF9pbmNsdWRlZFFOYW1lcyk7Ci0gICAgICAgICAgICBfaW5jbHVkZWRVUklzLmFkZCh1cmkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW1wbGVtZW50YXRpb24gb2YgYWRkKHNldCkgdGhhdCBpZ25vcmVzIGludmVyc2lvbi4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgYWRkQWxsSW1wbChTZXQgaW5jbHVkZWRVUklzLCBTZXQgZXhjbHVkZWRVUklzLCBTZXQgaW5jbHVkZWRRTmFtZXMsIFNldCBleGNsdWRlZFFOYW1lcykKLSAgICB7Ci0gICAgICAgIGJvb2xlYW4gZXhjbHVkZSA9IChleGNsdWRlZFVSSXMgIT0gbnVsbCk7Ci0gICAgICAgIFNldCBzcGVjaWFsVVJJcyA9IGV4Y2x1ZGUgPyBleGNsdWRlZFVSSXMgOiBpbmNsdWRlZFVSSXM7Ci0KLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gX2V4Y2x1ZGVkUU5hbWVzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFFOYW1lIG5hbWUgPSAoUU5hbWUpaS5uZXh0KCk7Ci0gICAgICAgICAgICBTdHJpbmcgdXJpID0gbnNGcm9tTmFtZShuYW1lKTsKLSAgICAgICAgICAgIGlmICgoZXhjbHVkZSBeIHNwZWNpYWxVUklzLmNvbnRhaW5zKHVyaSkpICYmICFleGNsdWRlZFFOYW1lcy5jb250YWlucyhuYW1lKSkKLSAgICAgICAgICAgICAgICBpLnJlbW92ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gZXhjbHVkZWRRTmFtZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgUU5hbWUgbmFtZSA9IChRTmFtZSlpLm5leHQoKTsKLSAgICAgICAgICAgIFN0cmluZyB1cmkgPSBuc0Zyb21OYW1lKG5hbWUpOwotICAgICAgICAgICAgaWYgKCFfaW5jbHVkZWRVUklzLmNvbnRhaW5zKHVyaSkgJiYgIV9pbmNsdWRlZFFOYW1lcy5jb250YWlucyhuYW1lKSkKLSAgICAgICAgICAgICAgICBfZXhjbHVkZWRRTmFtZXMuYWRkKG5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gaW5jbHVkZWRRTmFtZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgUU5hbWUgbmFtZSA9IChRTmFtZSlpLm5leHQoKTsKLSAgICAgICAgICAgIFN0cmluZyB1cmkgPSBuc0Zyb21OYW1lKG5hbWUpOwotICAgICAgICAgICAgaWYgKCFfaW5jbHVkZWRVUklzLmNvbnRhaW5zKHVyaSkpCi0gICAgICAgICAgICAgICAgX2luY2x1ZGVkUU5hbWVzLmFkZChuYW1lKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBfZXhjbHVkZWRRTmFtZXMucmVtb3ZlKG5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFleGNsdWRlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZW1vdmVBbGxNYXRjaGluZ0ZpcnN0T25seShpbmNsdWRlZFVSSXMsIF9pbmNsdWRlZFVSSXMsIF9pbmNsdWRlZFFOYW1lcyk7Ci0gICAgICAgICAgICBfaW5jbHVkZWRVUklzLmFkZEFsbChpbmNsdWRlZFVSSXMpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmVtb3ZlQWxsTWF0Y2hpbmdOZWl0aGVyKGV4Y2x1ZGVkVVJJcywgX2luY2x1ZGVkVVJJcywgX2luY2x1ZGVkUU5hbWVzKTsKLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IF9pbmNsdWRlZFVSSXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgdXJpID0gKFN0cmluZylpLm5leHQoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWV4Y2x1ZGVkVVJJcy5jb250YWlucyh1cmkpKQotICAgICAgICAgICAgICAgICAgICBpLnJlbW92ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBleGNsdWRlZFVSSXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgdXJpID0gKFN0cmluZylpLm5leHQoKTsKLSAgICAgICAgICAgICAgICBpZiAoIV9pbmNsdWRlZFVSSXMuY29udGFpbnModXJpKSkKLSAgICAgICAgICAgICAgICAgICAgX2luY2x1ZGVkVVJJcy5hZGQodXJpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIF9pbmNsdWRlZFVSSXMucmVtb3ZlKHVyaSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBTZXQgdGVtcCA9IF9leGNsdWRlZFFOYW1lczsKLSAgICAgICAgICAgIF9leGNsdWRlZFFOYW1lcyA9IF9pbmNsdWRlZFFOYW1lczsKLSAgICAgICAgICAgIF9pbmNsdWRlZFFOYW1lcyA9IHRlbXA7Ci0gICAgICAgICAgICBfaW52ZXJ0ZWQgPSAhX2ludmVydGVkOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW1wbGVtZW50YXRpb24gb2YgcmVtb3ZlKHFuYW1lKSB0aGF0IGlnbm9yZXMgaW52ZXJzaW9uLgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCByZW1vdmVJbXBsKFFOYW1lIHFuYW1lKQotICAgIHsKLSAgICAgICAgaWYgKF9pbmNsdWRlZFVSSXMuY29udGFpbnMobnNGcm9tTmFtZShxbmFtZSkpKQotICAgICAgICAgICAgX2V4Y2x1ZGVkUU5hbWVzLmFkZChxbmFtZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIF9pbmNsdWRlZFFOYW1lcy5yZW1vdmUocW5hbWUpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEltcGxlbWVudGF0aW9uIG9mIHJlbW92ZShucykgdGhhdCBpZ25vcmVzIGludmVyc2lvbi4KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgcmVtb3ZlTmFtZXNwYWNlSW1wbChTdHJpbmcgdXJpKQotICAgIHsKLSAgICAgICAgaWYgKF9pbmNsdWRlZFVSSXMuY29udGFpbnModXJpKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmVtb3ZlQWxsTWF0Y2hpbmdOcyh1cmksIF9leGNsdWRlZFFOYW1lcyk7Ci0gICAgICAgICAgICBfaW5jbHVkZWRVUklzLnJlbW92ZSh1cmkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmVtb3ZlQWxsTWF0Y2hpbmdOcyh1cmksIF9pbmNsdWRlZFFOYW1lcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiByZW1vdmUoc2V0KSB0aGF0IGlnbm9yZXMgaW52ZXJzaW9uLgotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCByZW1vdmVBbGxJbXBsKFNldCBpbmNsdWRlZFVSSXMsIFNldCBleGNsdWRlZFVSSXMsIFNldCBpbmNsdWRlZFFOYW1lcywgU2V0IGV4Y2x1ZGVkUU5hbWVzKQotICAgIHsKLSAgICAgICAgYm9vbGVhbiBleGNsdWRlID0gKGV4Y2x1ZGVkVVJJcyAhPSBudWxsKTsKLSAgICAgICAgU2V0IHNwZWNpYWxVUklzID0gZXhjbHVkZSA/IGV4Y2x1ZGVkVVJJcyA6IGluY2x1ZGVkVVJJczsKLQotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBfaW5jbHVkZWRRTmFtZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgUU5hbWUgbmFtZSA9IChRTmFtZSlpLm5leHQoKTsKLSAgICAgICAgICAgIFN0cmluZyB1cmkgPSBuc0Zyb21OYW1lKG5hbWUpOwotICAgICAgICAgICAgaWYgKGV4Y2x1ZGUgXiBzcGVjaWFsVVJJcy5jb250YWlucyh1cmkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghZXhjbHVkZWRRTmFtZXMuY29udGFpbnMobmFtZSkpCi0gICAgICAgICAgICAgICAgICAgIGkucmVtb3ZlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGluY2x1ZGVkUU5hbWVzLmNvbnRhaW5zKG5hbWUpKQotICAgICAgICAgICAgICAgICAgICBpLnJlbW92ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gaW5jbHVkZWRRTmFtZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgUU5hbWUgbmFtZSA9IChRTmFtZSlpLm5leHQoKTsKLSAgICAgICAgICAgIFN0cmluZyB1cmkgPSBuc0Zyb21OYW1lKG5hbWUpOwotICAgICAgICAgICAgaWYgKF9pbmNsdWRlZFVSSXMuY29udGFpbnModXJpKSkKLSAgICAgICAgICAgICAgICBfZXhjbHVkZWRRTmFtZXMuYWRkKG5hbWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gZXhjbHVkZWRRTmFtZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgUU5hbWUgbmFtZSA9IChRTmFtZSlpLm5leHQoKTsKLSAgICAgICAgICAgIFN0cmluZyB1cmkgPSBuc0Zyb21OYW1lKG5hbWUpOwotICAgICAgICAgICAgaWYgKF9pbmNsdWRlZFVSSXMuY29udGFpbnModXJpKSAmJiAhX2V4Y2x1ZGVkUU5hbWVzLmNvbnRhaW5zKG5hbWUpKQotICAgICAgICAgICAgICAgIF9pbmNsdWRlZFFOYW1lcy5hZGQobmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZXhjbHVkZSkKLSAgICAgICAgewotICAgICAgICAgICAgcmVtb3ZlQWxsTWF0Y2hpbmdGaXJzdE9ubHkoX2luY2x1ZGVkVVJJcywgZXhjbHVkZWRVUklzLCBfZXhjbHVkZWRRTmFtZXMpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmVtb3ZlQWxsTWF0Y2hpbmdCb3RoKF9pbmNsdWRlZFVSSXMsIGluY2x1ZGVkVVJJcywgX2V4Y2x1ZGVkUU5hbWVzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IF9pbmNsdWRlZFVSSXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGV4Y2x1ZGUgXiBzcGVjaWFsVVJJcy5jb250YWlucyhpLm5leHQoKSkpCi0gICAgICAgICAgICAgICAgaS5yZW1vdmUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBTZXQgZXhjbHVkZWRVUklzKCkKLSAgICB7Ci0gICAgICAgIGlmIChfaW52ZXJ0ZWQpIHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVTZXQoX2luY2x1ZGVkVVJJcyk7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBTZXQgaW5jbHVkZWRVUklzKCkKLSAgICB7Ci0gICAgICAgIGlmICghX2ludmVydGVkKSByZXR1cm4gX2luY2x1ZGVkVVJJczsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIFNldCBleGNsdWRlZFFOYW1lc0luSW5jbHVkZWRVUklzKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVTZXQoX2ludmVydGVkID8gX2luY2x1ZGVkUU5hbWVzIDogX2V4Y2x1ZGVkUU5hbWVzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2V0IGluY2x1ZGVkUU5hbWVzSW5FeGNsdWRlZFVSSXMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZVNldChfaW52ZXJ0ZWQgPyBfZXhjbHVkZWRRTmFtZXMgOiBfaW5jbHVkZWRRTmFtZXMpOwotICAgIH0KLQotICAgIHByaXZhdGUgU3RyaW5nIHByZXR0eVFOYW1lKFFOYW1lIG5hbWUpCi0gICAgewotICAgICAgICBpZiAobmFtZS5nZXROYW1lc3BhY2VVUkkoKSA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgIHJldHVybiBuYW1lLmdldExvY2FsUGFydCgpICsgIkAiICsgbmFtZS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHVzZWZ1bCBmb3IgZGVidWdnaW5nLCBzdWJqZWN0IHRvIGNoYW5nZS4KLSAgICAgKi8gCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIHNiLmFwcGVuZCgiUU5hbWVTZXRCdWlsZGVyIik7Ci0gICAgICAgIHNiLmFwcGVuZChfaW52ZXJ0ZWQgPyAiLSgiIDogIisoIik7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IF9pbmNsdWRlZFVSSXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgc2IuYXBwZW5kKCIrKkAiKTsKLSAgICAgICAgICAgIHNiLmFwcGVuZChpLm5leHQoKSk7Ci0gICAgICAgICAgICBzYi5hcHBlbmQoIiwgIik7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gX2V4Y2x1ZGVkUU5hbWVzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNiLmFwcGVuZCgiLSIpOwotICAgICAgICAgICAgc2IuYXBwZW5kKHByZXR0eVFOYW1lKChRTmFtZSlpLm5leHQoKSkpOwotICAgICAgICAgICAgc2IuYXBwZW5kKCIsICIpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IF9pbmNsdWRlZFFOYW1lcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICB7Ci0gICAgICAgICAgICBzYi5hcHBlbmQoIisiKTsKLSAgICAgICAgICAgIHNiLmFwcGVuZChwcmV0dHlRTmFtZSgoUU5hbWUpaS5uZXh0KCkpKTsKLSAgICAgICAgICAgIHNiLmFwcGVuZCgiLCAiKTsKLSAgICAgICAgfQotICAgICAgICBpbnQgaW5kZXggPSBzYi5sYXN0SW5kZXhPZigiLCAiKTsKLSAgICAgICAgaWYgKGluZGV4ID4gMCkKLSAgICAgICAgICAgIHNiLnNldExlbmd0aChpbmRleCk7Ci0gICAgICAgIHNiLmFwcGVuZCgnKScpOwotICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIHtAbGluayBRTmFtZVNldH0gZXF1aXZhbGVudCB0byB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGlzCi0gICAgICogUU5hbWVTZXRCdWlsZGVyLgotICAgICAqLyAKLSAgICBwdWJsaWMgUU5hbWVTZXQgdG9RTmFtZVNldCgpCi0gICAgewotICAgICAgICByZXR1cm4gUU5hbWVTZXQuZm9yU3BlY2lmaWNhdGlvbih0aGlzKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjOTNmZmIuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcwICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi0vKioKLSAqIFJlcHJlc2VudHMgYSBsYXR0aWNlIG9mIGZpbml0ZSBhbmQgaW5maW5pdGUgc2V0cyBvZiBRTmFtZXMuCi0gKiAKLSAqIEBzZWUgUU5hbWVTZXQKLSAqLwotcHVibGljIGludGVyZmFjZSBRTmFtZVNldFNwZWNpZmljYXRpb24KLXsKLSAgICAvKioKLSAgICAgKiBUcnVlIGlmIHRoZSBzZXQgY29udGFpbnMgdGhlIGdpdmVuIFFOYW1lLgotICAgICAqCi0gICAgICogUm91Z2hseSBlcXVpdmFsZW50IHRvOgotICAgICAqICAgIChpbmNsdWRlZFVSSXMoKSA9PSBudWxsID8KLSAgICAgKiAgICAgICAgICAgZXhjbHVkZWRVUklzKCkuY29udGFpbnMobmFtZXNwYWNlKSA6Ci0gICAgICogICAgICAgICAgIGluY2x1ZGVkVVJJcygpLmNvbnRhaW5zKG5hbWVzcGFjZSkKLSAgICAgKiAgICApID8KLSAgICAgKiAgICAgICAgIWV4Y2x1ZGVkUU5hbWVzSW5JbmNsdWRlZFVSSXMoKS5jb250YWlucyhuYW1lKSA6Ci0gICAgICogICAgICAgICBpbmNsdWRlZFFOYW1lc0luRXhjbHVkZWRVUklzKCkuY29udGFpbnMobmFtZSkKLSAgICAgKi8KLSAgICBib29sZWFuIGNvbnRhaW5zKFFOYW1lIG5hbWUpOwotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGUgc2V0IGlzIHRoZSBzZXQgb2YgYWxsIFFOYW1lcy4KLSAgICAgKi8KLSAgICBib29sZWFuIGlzQWxsKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUcnVlIGlmIHRoZSBzZXQgaXMgZW1wdHkuCi0gICAgICovCi0gICAgYm9vbGVhbiBpc0VtcHR5KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUcnVlIGlmIHRoZSBwYXJhbWV0ZXIgaXMgYSBzdWJzZXQgb2YgdGhpcyBzZXQuCi0gICAgICovIAotICAgIGJvb2xlYW4gY29udGFpbnNBbGwoUU5hbWVTZXRTcGVjaWZpY2F0aW9uIHNldCk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiBpcyBkaXNqb2ludCBmcm9tIHRoZSBzcGVjaWZpZWQgc2V0LgotICAgICAqLwotICAgIGJvb2xlYW4gaXNEaXNqb2ludChRTmFtZVNldFNwZWNpZmljYXRpb24gc2V0KTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGludGVyc2VjdGlvbiB3aXRoIGFub3RoZXIgUU5hbWVTZXQuCi0gICAgICovCi0gICAgUU5hbWVTZXQgaW50ZXJzZWN0KFFOYW1lU2V0U3BlY2lmaWNhdGlvbiBzZXQpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgdW5pb24gd2l0aCBhbm90aGVyIFFOYW1lU2V0LgotICAgICAqLwotICAgIFFOYW1lU2V0IHVuaW9uKFFOYW1lU2V0U3BlY2lmaWNhdGlvbiBzZXQpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJuIHRoZSBpbnZlcnNlIG9mIHRoaXMgUU5hbWVTZXQuIFRoYXQgaXMgdGhlIFFOYW1lU2V0IHdoaWNoCi0gICAgICogY29udGFpbnMgYWxsIHRoZSBRTmFtZXMgbm90IGNvbnRhaW5lZCBpbiB0aGlzIHNldC4gSW4gb3RoZXIgd29yZHMKLSAgICAgKiBmb3Igd2hpY2ggc2V0LmNvbnRhaW5zKG5hbWUpICE9IHNldC5pbnZlcnNlKCkuY29udGFpbnMobmFtZSkgZm9yCi0gICAgICogYWxsIG5hbWVzLgotICAgICAqLwotICAgIFFOYW1lU2V0IGludmVyc2UoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBmaW5pdGUgc2V0IG9mIG5hbWVzcGFjZSBVUklzIHRoYXQgYXJlIGFsbW9zdCBjb21wbGV0ZWx5IGV4Y2x1ZGVkIGZyb20KLSAgICAgKiB0aGUgc2V0ICh0aGF0IGlzLCBlYWNoIG5hbWVzcGFjZSBVUkkgdGhhdCBpbmNsdWRlZCBpbiB0aGUgc2V0IHdpdGggd2l0aAotICAgICAqIGEgZmluaXRlIG51bWJlciBvZiBRTmFtZSBleGNlcHRpb25zKS4gTnVsbCBpZiB0aGUgc2V0IG9mIG5hbWVzcGFjZVVSSXMKLSAgICAgKiB0aGF0IGFyZSBhbG1vc3QgY29tcGxldGVseSBpbmNsdWRlZCBpcyBpbmZpbml0ZS4KLSAgICAgKiA8cD4KLSAgICAgKiBOdWxsIChtZWFuaW5nIGFsbW9zdCBhbGwgVVJJcyBleGNsdWRlZCkgaWYgaW5jbHVkZWRVUklzKCkgaXMgbm9uLW51bGw7Ci0gICAgICogbm9uLW51bGwgb3RoZXJ3aXNlLgotICAgICAqIDxwPgotICAgICAqIFRoZSBzYW1lIHNldCBhcyBpbnZlcnNlKCkuaW5jbHVkZWRVUklzKCkuCi0gICAgICovCi0gICAgU2V0IGV4Y2x1ZGVkVVJJcygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIGZpbml0ZSBzZXQgb2YgbmFtZXNwYWNlIFVSSXMgdGhhdCBhcmUgYWxtb3N0IGNvbXBsZXRlbHkgaW5jbHVkZWQgaW4KLSAgICAgKiB0aGUgc2V0ICh0aGF0IGlzLCBlYWNoIG5hbWVzcGFjZSBVUkkgdGhhdCBpbmNsdWRlZCBpbiB0aGUgc2V0IHdpdGggd2l0aAotICAgICAqIGEgZmluaXRlIG51bWJlciBvZiBRTmFtZSBleGNlcHRpb25zKS4gTnVsbCBpZiB0aGUgc2V0IG9mIG5hbWVzcGFjZVVSSXMKLSAgICAgKiB0aGF0IGFyZSBhbG1vc3QgY29tcGxldGVseSBpbmNsdWRlZCBpcyBpbmZpbml0ZS4KLSAgICAgKiA8cD4KLSAgICAgKiBOdWxsIChtZWFuaW5nIGFsbW9zdCBhbGwgVVJJcyBpbmNsdWRlZCkgaWYgZXhjbHVkZWRVUklzKCkgaXMgbm9uLW51bGw7Ci0gICAgICogbm9uLW51bGwgb3RoZXJ3aXNlLgotICAgICAqIDxwPgotICAgICAqIFRoZSBzYW1lIGFzIGludmVyc2UuZXhjbHVkZWRVUklzKCkuCi0gICAgICovCi0gICAgU2V0IGluY2x1ZGVkVVJJcygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIGZpbml0ZSBzZXQgb2YgUU5hbWVzIHRoYXQgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIHNldCB3aXRoaW4gbmFtZXNwYWNlcwotICAgICAqIHRoYXQgYXJlIG90aGVyd2lzZSBpbmNsdWRlZC4gU2hvdWxkIG9ubHkgY29udGFpbiBRTmFtZXMgd2l0aGluIG5hbWVzcGFjZQotICAgICAqIHRoYXQgYXJlIHdpdGhpbiB0aGUgc2V0IGluY2x1ZGVkVVJJcygpIChvciBhbnkgVVJJLCBpZiBpbmNsdWRlZFVSSXMoKQotICAgICAqIGlzIG51bGwsIHdoaWNoIG1lYW5zIHRoYXQgYWxsIFVSSXMgYXJlIGFsbW9zdCBjb21wbGV0ZWx5IGluY2x1ZGVkKS4KLSAgICAgKiA8cD4KLSAgICAgKiBOZXZlciBudWxsLgotICAgICAqIDxwPgotICAgICAqIFRoZSBzYW1lIHNldCBhcyBpbnZlcnNlKCkuaW5jbHVkZWRRTmFtZXMoKS4KLSAgICAgKi8KLSAgICBTZXQgZXhjbHVkZWRRTmFtZXNJbkluY2x1ZGVkVVJJcygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIGZpbml0ZSBzZXQgb2YgUU5hbWVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBzZXQgd2l0aGluIG5hbWVzcGFjZXMKLSAgICAgKiB0aGF0IGFyZSBvdGhlcndpc2UgZXhjbHVkZWQuIFNob3VsZCBvbmx5IGNvbnRhaW4gUU5hbWVzIHdpdGhpbiBuYW1lc3BhY2UKLSAgICAgKiB0aGF0IGFyZSB3aXRoaW4gdGhlIHNldCBleGNsdWRlZFVSSXMoKSAob3IgYW55IFVSSSwgaWYgZXhjbHVkZWRVUklzKCkKLSAgICAgKiBpcyBudWxsLCB3aGljaCBtZWFucyB0aGF0IGFsbCBVUklzIGFyZSBhbG1vc3QgY29tcGxldGVseSBleGNsdWRlZCkuCi0gICAgICogPHA+Ci0gICAgICogTmV2ZXIgbnVsbC4KLSAgICAgKiA8cD4KLSAgICAgKiBUaGUgc2FtZSBhcyBpbnZlcnNlKCkuZXhjbHVkZWRRTmFtZXMoKS4KLSAgICAgKi8KLSAgICBTZXQgaW5jbHVkZWRRTmFtZXNJbkV4Y2x1ZGVkVVJJcygpOwotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZUdyb3VwLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlR3JvdXAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUxMTAwZS4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlR3JvdXAuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi0vKioKLSAqIFJlcHJlc2VudHMgYW4gYXR0cmlidXRlIGdyb3VwLgotICogPHA+Ci0gKiBBbiBhdHRyaWJ1dGUgZ3JvdXAgaXMgYSBzeW50YWN0aWMgY29uc3RydWN0LCBub3QgYSBwYXJ0Ci0gKiBvZiB0aGUgbG9naWNhbCBtb2RlbC4gRm9yIGV4YW1wbGUsIHR5cGVzIGRlY2xhcmVkIHdpdGhpbiBhbgotICogYXR0cmlidXRlIGdyb3VwIGJlY29tZSBsb2NhbCB0byB0aGUgdHlwZSB0aGF0IHVzZXMgdGhlIGdyb3VwIC0KLSAqIHRoZXkncmUgbm90IGxvY2FsIHRvIHRoZSBhdHRyaWJ1dGUgZ3JvdXAgaXRzZWxmLiBUaGVyZWZvcmUKLSAqIGluIHRoZSBsb2dpY2FsIG1vZGVsIG9mIGEgc2NoZW1hIHR5cGUgc3lzdGVtLCBhbiBhdHRyaWJ1dGUKLSAqIGdyb3VwIGRvZXNuJ3QgcmVwcmVzZW50IGFueXRoaW5nLiBJdHMgY29udGVudHMgYXJlIG1lcmdlZAotICogaW50byB0aGUgbG9naWNhbCBtb2RlbCBhdCBwYXJzZSB0aW1lLgotICogCi0gKiBAc2VlIFNjaGVtYVR5cGVMb2FkZXIjZmluZEF0dHJpYnV0ZUdyb3VwCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgU2NoZW1hQXR0cmlidXRlR3JvdXAgZXh0ZW5kcyBTY2hlbWFDb21wb25lbnQKLXsKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIFNjaGVtYUNvbXBvbmVudC5BVFRSSUJVVEVfR1JPVVAuCi0gICAgICovCi0gICAgaW50IGdldENvbXBvbmVudFR5cGUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBuYW1lIG9mIHRoZSBtb2RlbCBncm91cC4KLSAgICAgKi8KLSAgICBRTmFtZSBnZXROYW1lKCk7Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIHRvIGFsbG93IG9uLWRlbWFuZCBsb2FkaW5nIG9mIGF0dHJpYnV0ZSBncm91cHMuCi0gICAgICogCi0gICAgICogQGV4Y2x1ZGUKLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIGNsYXNzIFJlZiBleHRlbmRzIFNjaGVtYUNvbXBvbmVudC5SZWYKLSAgICB7Ci0gICAgICAgIHB1YmxpYyBSZWYoU2NoZW1hQXR0cmlidXRlR3JvdXAgYXR0cmlidXRlR3JvdXApCi0gICAgICAgICAgICB7IHN1cGVyKGF0dHJpYnV0ZUdyb3VwKTsgfQotCi0gICAgICAgIHB1YmxpYyBSZWYoU2NoZW1hVHlwZVN5c3RlbSBzeXN0ZW0sIFN0cmluZyBoYW5kbGUpCi0gICAgICAgICAgICB7IHN1cGVyKHN5c3RlbSwgaGFuZGxlKTsgfQotCi0gICAgICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0Q29tcG9uZW50VHlwZSgpCi0gICAgICAgICAgICB7IHJldHVybiBTY2hlbWFDb21wb25lbnQuQVRUUklCVVRFX0dST1VQOyB9Ci0KLSAgICAgICAgcHVibGljIGZpbmFsIFNjaGVtYUF0dHJpYnV0ZUdyb3VwIGdldCgpCi0gICAgICAgICAgICB7IHJldHVybiAoU2NoZW1hQXR0cmlidXRlR3JvdXApZ2V0Q29tcG9uZW50KCk7IH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVNb2RlbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjYzMzJkLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVNb2RlbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotLyoqCi0gKiBSZXByZXNlbnRzIHRoZSBhdHRyaWJ1dGUgc3RydWN0dXJlIGFsbG93ZWQgb24gYSBjb21wbGV4IHR5cGUuCi0gKiAKLSAqIEBzZWUgU2NoZW1hVHlwZSNnZXRBdHRyaWJ1dGVNb2RlbAotICovIAotcHVibGljIGludGVyZmFjZSBTY2hlbWFBdHRyaWJ1dGVNb2RlbAotewotICAgIC8qKgotICAgICAqIFJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIGF0dHJpYnV0ZXMgaW4gdGhlIG1vZGVsLgotICAgICAqLwotICAgIFNjaGVtYUxvY2FsQXR0cmlidXRlW10gZ2V0QXR0cmlidXRlcygpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgYXR0cmlidXRlIHdpdGggdGhlIGdpdmVuIG5hbWUuCi0gICAgICovCi0gICAgU2NoZW1hTG9jYWxBdHRyaWJ1dGUgZ2V0QXR0cmlidXRlKFFOYW1lIG5hbWUpOwotCi0gICAgLyoqCi0gICAgICogUU5hbWVTZXQgcmVwcmVzZW50aW5nIHRoZSBhdHRyaWJ1dGUgd2lsZGNhcmQgc3BlY2lmaWNhdGlvbi4KLSAgICAgKi8KLSAgICBRTmFtZVNldCBnZXRXaWxkY2FyZFNldCgpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgcHJvY2Vzc2luZyBjb2RlICh7QGxpbmsgI1NUUklDVH0sIHtAbGluayAjTEFYfSwge0BsaW5rICNTS0lQfSkuCi0gICAgICogUmV0dXJucyAwICh7QGxpbmsgI05PTkV9KSBpZiBubyB3aWxkY2FyZCBzcGVjaWZpZWQuCi0gICAgICovCi0gICAgaW50IGdldFdpbGRjYXJkUHJvY2VzcygpOwotCi0gICAgLyoqIFNlZSB7QGxpbmsgI2dldFdpbGRjYXJkUHJvY2Vzc30gKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IE5PTkUgPSAwOwotICAgIC8qKiBTdHJpY3Qgd2lsZGNhcmQgcHJvY2Vzc2luZy4gU2VlIHtAbGluayAjZ2V0V2lsZGNhcmRQcm9jZXNzfSAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgU1RSSUNUID0gMTsKLSAgICAvKiogTGF4IHdpbGRjYXJkIHByb2Nlc3NpbmcuIFNlZSB7QGxpbmsgI2dldFdpbGRjYXJkUHJvY2Vzc30gKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IExBWCA9IDI7Ci0gICAgLyoqIFNraXAgd2lsZGNhcmQgcHJvY2Vzc2luZy4gU2VlIHtAbGluayAjZ2V0V2lsZGNhcmRQcm9jZXNzfSAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgU0tJUCA9IDM7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwZGRhM2EuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLS8qKgotICogUmVwcmVzZW50cyBhIGdsb2JhbCBTY2hlbWEgQ29tcG9uZW50LiAgVGhhdCBpcywgYSB0eXBlLCBlbGVtZW50LCBhdHRyaWJ1dGUsCi0gKiBtb2RlbCBncm91cCwgYXR0cmlidXRlIGdyb3VwLCBvciBpZGVudGl0eSBjb25zdHJhaW50LgotICogPHA+Ci0gKiBOb3RlIHRoYXQgbm90IGFsbCB0eXBlcywgZWxlbWVudHMsIGFuZCBhdHRyaWJ1dGVzIGFyZSBnbG9iYWw7IGxvY2FsCi0gKiB0eXBlcywgZWxlbWVudCwgYW5kIGF0dHJpYnV0ZXMgZG8gbm90IGFwcGVhciBpbiB0aGUgZ2xvYmFsIGxvb2t1cCB0YWJsZS4KLSAqIEFsc28gbm90ZSB0aGF0IG90aGVyIGluZm9ybWF0aW9uIGl0ZW1zIHN1Y2ggYXMgcGFydGljbGVzLCBmYWNldHMsIGFuZAotICogc28gb24gYXJlIG5vdCBnbG9iYWxseSBpbmRleGVkLCBzbyBhcmUgbm90IFNjaGVtYUNvbXBvbmVudHMuCi0gKiAKLSAqIEBzZWUgU2NoZW1hVHlwZQotICogQHNlZSBTY2hlbWFHbG9iYWxFbGVtZW50Ci0gKiBAc2VlIFNjaGVtYUdsb2JhbEF0dHJpYnV0ZQotICogQHNlZSBTY2hlbWFBdHRyaWJ1dGVHcm91cAotICogQHNlZSBTY2hlbWFNb2RlbEdyb3VwCi0gKiBAc2VlIFNjaGVtYUlkZW50aXR5Q29uc3RyYWludAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFNjaGVtYUNvbXBvbmVudAotewotICAgIC8qKiBBIHR5cGUgZGVmaW5pdGlvbi4gIFNlZSB7QGxpbmsgI2dldENvbXBvbmVudFR5cGV9ICovCi0gICAgc3RhdGljIGZpbmFsIGludCBUWVBFID0gMDsKLSAgICAvKiogQW4gZWxlbWVudCBkZWZpbml0aW9uLiAgU2VlIHtAbGluayAjZ2V0Q29tcG9uZW50VHlwZX0gKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IEVMRU1FTlQgPSAxOwotICAgIC8qKiBBbiBhdHRyaWJ1dGUgZGVmaW5pdGlvbi4gIFNlZSB7QGxpbmsgI2dldENvbXBvbmVudFR5cGV9ICovCi0gICAgc3RhdGljIGZpbmFsIGludCBBVFRSSUJVVEUgPSAzOwotICAgIC8qKiBBbiBhdHRyaWJ1dGUgZ3JvdXAgZGVmaW5pdGlvbi4gIFNlZSB7QGxpbmsgI2dldENvbXBvbmVudFR5cGV9ICovCi0gICAgc3RhdGljIGZpbmFsIGludCBBVFRSSUJVVEVfR1JPVVAgPSA0OwotICAgIC8qKiBBbiBpZGVudGl0eSBjb25zdHJhaW50IGRlZmluaXRpb24uICBTZWUge0BsaW5rICNnZXRDb21wb25lbnRUeXBlfSAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgSURFTlRJVFlfQ09OU1RSQUlOVCA9IDU7Ci0gICAgLyoqIEEgbW9kZWwgZ3JvdXAgZGVmaW5pdGlvbi4gIFNlZSB7QGxpbmsgI2dldENvbXBvbmVudFR5cGV9ICovCi0gICAgc3RhdGljIGZpbmFsIGludCBNT0RFTF9HUk9VUCA9IDY7Ci0gICAgLyoqIEEgbm90YXRpb24gZGVmaW5pdGlvbi4gIFNlZSB7QGxpbmsgI2dldENvbXBvbmVudFR5cGV9ICovCi0gICAgc3RhdGljIGZpbmFsIGludCBOT1RBVElPTiA9IDc7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB0eXBlIGNvZGUgZm9yIHRoZSBzY2hlbWEgb2JqZWN0LCBlaXRoZXIge0BsaW5rICNUWVBFfSwKLSAgICAgKiB7QGxpbmsgI0VMRU1FTlR9LCB7QGxpbmsgI0FUVFJJQlVURX0sIHtAbGluayAjQVRUUklCVVRFX0dST1VQfSwKLSAgICAgKiB7QGxpbmsgI01PREVMX0dST1VQfSwge0BsaW5rICNJREVOVElUWV9DT05TVFJBSU5UfSwgb3Ige0BsaW5rICNOT1RBVElPTn0uCi0gICAgICovCi0gICAgaW50IGdldENvbXBvbmVudFR5cGUoKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHR5cGVzeXN0ZW0gd2l0aGluIHdoaWNoIHRoaXMgY29tcG9uZW50IGRlZmluaXRpb24gcmVzaWRlcwotICAgICAqLwotICAgIFNjaGVtYVR5cGVTeXN0ZW0gZ2V0VHlwZVN5c3RlbSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG5hbWUgb2YgdGhlIHNjaGVtYSBjb21wb25lbnQKLSAgICAgKi8KLSAgICBRTmFtZSBnZXROYW1lKCk7Ci0KLSAgICAvKioKLSAgICAgKiBBIGxhenkgcmVmZXJlbmNlIHRvIGEgY29tcG9uZW50LiBVc2VkIGJ5IFNjaGVtYVR5cGVMb2FkZXJzIHRvCi0gICAgICogYXZvaWQgbG9hZGluZyBjb21wb25lbnRzIHVudGlsIHRoZXkgYXJlIGFjdHVhbGx5IG5lZWRlZC4KLSAgICAgKiAKLSAgICAgKiBAZXhjbHVkZQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgUmVmCi0gICAgewotICAgICAgICBwcm90ZWN0ZWQgUmVmKFNjaGVtYUNvbXBvbmVudCBzY2hlbWFDb21wb25lbnQpCi0gICAgICAgICAgICB7IF9zY2hlbWFDb21wb25lbnQgPSBzY2hlbWFDb21wb25lbnQ7IH0KLQotICAgICAgICBwcm90ZWN0ZWQgUmVmKFNjaGVtYVR5cGVTeXN0ZW0gc2NoZW1hVHlwZVN5c3RlbSwgU3RyaW5nIGhhbmRsZSkKLSAgICAgICAgICAgIHsgYXNzZXJ0KGhhbmRsZSAhPSBudWxsKTsgX3NjaGVtYVR5cGVTeXN0ZW0gPSBzY2hlbWFUeXBlU3lzdGVtOyBfaGFuZGxlID0gaGFuZGxlOyB9Ci0KLSAgICAgICAgcHJpdmF0ZSBTY2hlbWFDb21wb25lbnQgX3NjaGVtYUNvbXBvbmVudDsKLSAgICAgICAgcHJpdmF0ZSBTY2hlbWFUeXBlU3lzdGVtIF9zY2hlbWFUeXBlU3lzdGVtOwotICAgICAgICBwdWJsaWMgU3RyaW5nIF9oYW5kbGU7Ci0KLSAgICAgICAgcHVibGljIGFic3RyYWN0IGludCBnZXRDb21wb25lbnRUeXBlKCk7Ci0KLSAgICAgICAgcHVibGljIGZpbmFsIFNjaGVtYVR5cGVTeXN0ZW0gZ2V0VHlwZVN5c3RlbSgpCi0gICAgICAgICAgICB7IHJldHVybiBfc2NoZW1hVHlwZVN5c3RlbTsgfQotCi0gICAgICAgIHB1YmxpYyBmaW5hbCBTY2hlbWFDb21wb25lbnQgZ2V0Q29tcG9uZW50KCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKF9zY2hlbWFDb21wb25lbnQgPT0gbnVsbCAmJiBfaGFuZGxlICE9IG51bGwpCi0gICAgICAgICAgICAgICAgX3NjaGVtYUNvbXBvbmVudCA9IF9zY2hlbWFUeXBlU3lzdGVtLnJlc29sdmVIYW5kbGUoX2hhbmRsZSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBfc2NoZW1hQ29tcG9uZW50OwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIFVzZWQgZm9yIG9uLWRlbWFuZCBsb2FkaW5nIG9mIHNjaGVtYSBjb21wb25lbnRzLgotICAgICAqLyAKLSAgICBwdWJsaWMgUmVmIGdldENvbXBvbmVudFJlZigpOwotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNmODUyYy4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLS8qKgotICogUmVwcmVzZW50cyBhbiBlbGVtZW50IG9yIGFuIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbi4KLSAqIAotICogQHNlZSBTY2hlbWFUeXBlI2dldENvbnRhaW5lckZpZWxkCi0gKiBAc2VlIFNjaGVtYUxvY2FsRWxlbWVudAotICogQHNlZSBTY2hlbWFMb2NhbEF0dHJpYnV0ZQotICovIAotcHVibGljIGludGVyZmFjZSBTY2hlbWFGaWVsZAotewotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGZvcm0tdW5xdWFsaWZpZWQtb3ItcXVhbGlmaWVkIG5hbWUuCi0gICAgICovCi0gICAgUU5hbWUgZ2V0TmFtZSgpOwotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGlzIHVzZSBpcyBhbiBhdHRyaWJ1dGUKLSAgICAgKi8KLSAgICBib29sZWFuIGlzQXR0cmlidXRlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUcnVlIGlmIG5pbGxhYmxlOyBhbHdheXMgZmFsc2UgZm9yIGF0dHJpYnV0ZXMuCi0gICAgICovCi0gICAgYm9vbGVhbiBpc05pbGxhYmxlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoaXMgdXNlLgotICAgICAqLwotICAgIFNjaGVtYVR5cGUgZ2V0VHlwZSgpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbWluT2NjdXJzIHZhbHVlIGZvciB0aGlzIHBhcnRpY2xlLgotICAgICAqIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQgZXhwbGljaXRseSwgdGhpcyBkZWZhdWx0cyB0byBCaWdJbnRlZ2VyLk9ORS4KLSAgICAgKi8KLSAgICBCaWdJbnRlZ2VyIGdldE1pbk9jY3VycygpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbWF4T2NjdXJzIHZhbHVlIGZvciB0aGlzIHBhcnRpY2xlLCBvciBudWxsIGlmIGl0Ci0gICAgICogaXMgdW5ib3VuZGVkLgotICAgICAqIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQgZXhwbGljaXRseSwgdGhpcyBkZWZhdWx0cyB0byBCaWdJbnRlZ2VyLk9ORS4KLSAgICAgKi8KLSAgICBCaWdJbnRlZ2VyIGdldE1heE9jY3VycygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIGRlZmF1bHQgdmFsdWUgYXMgcGxhaW4gdGV4dC4gU2VlIHtAbGluayAjaXNEZWZhdWx0fSBhbmQge0BsaW5rICNpc0ZpeGVkfS4KLSAgICAgKi8KLSAgICBTdHJpbmcgZ2V0RGVmYXVsdFRleHQoKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBhcyBhIHN0cm9uZ2x5LXR5cGVkIHZhbHVlLiAgU2VlIHtAbGluayAjaXNEZWZhdWx0fSBhbmQge0BsaW5rICNpc0ZpeGVkfS4KLSAgICAgKi8KLSAgICBYbWxBbnlTaW1wbGVUeXBlIGdldERlZmF1bHRWYWx1ZSgpOwotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiBhIGRlZmF1bHQgaXMgc3VwcGxpZWQuIElmIHtAbGluayAjaXNGaXhlZH0sIHRoZW4gaXNEZWZhdWx0IGlzIGFsd2F5cyB0cnVlLgotICAgICAqLwotICAgIGJvb2xlYW4gaXNEZWZhdWx0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUcnVlIGlmIHRoZSB2YWx1ZSBpcyBmaXhlZC4KLSAgICAgKi8KLSAgICBib29sZWFuIGlzRml4ZWQoKTsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk1NjgwZi4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsQXR0cmlidXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLS8qKgotICogUmVwcmVzZW50cyBhIGdsb2JhbCBhdHRyaWJ1dGUgZGVmaW5pdGlvbgotICogCi0gKiBAc2VlIFNjaGVtYVR5cGVMb2FkZXIjZmluZEF0dHJpYnV0ZQotICovIAotcHVibGljIGludGVyZmFjZSBTY2hlbWFHbG9iYWxBdHRyaWJ1dGUgZXh0ZW5kcyBTY2hlbWFMb2NhbEF0dHJpYnV0ZSwgU2NoZW1hQ29tcG9uZW50Ci17Ci0gICAgLyoqCi0gICAgICogVGhlIG5hbWUgb2YgdGhlIHNvdXJjZSAueHNkIGZpbGUgd2l0aGluIHdoaWNoIHRoaXMgYXR0cmlidXRlIHdhcyBkZWZpbmVkCi0gICAgICovIAotICAgIFN0cmluZyBnZXRTb3VyY2VOYW1lKCk7Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIHRvIGFsbG93IG9uLWRlbWFuZCBsb2FkaW5nIG9mIGVsZW1lbnRzLgotICAgICAqIAotICAgICAqIEBleGNsdWRlCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBjbGFzcyBSZWYgZXh0ZW5kcyBTY2hlbWFDb21wb25lbnQuUmVmCi0gICAgewotICAgICAgICBwdWJsaWMgUmVmKFNjaGVtYUdsb2JhbEF0dHJpYnV0ZSBlbGVtZW50KQotICAgICAgICAgICAgeyBzdXBlcihlbGVtZW50KTsgfQotCi0gICAgICAgIHB1YmxpYyBSZWYoU2NoZW1hVHlwZVN5c3RlbSBzeXN0ZW0sIFN0cmluZyBoYW5kbGUpCi0gICAgICAgICAgICB7IHN1cGVyKHN5c3RlbSwgaGFuZGxlKTsgfQotCi0gICAgICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0Q29tcG9uZW50VHlwZSgpCi0gICAgICAgICAgICB7IHJldHVybiBTY2hlbWFDb21wb25lbnQuQVRUUklCVVRFOyB9Ci0KLSAgICAgICAgcHVibGljIGZpbmFsIFNjaGVtYUdsb2JhbEF0dHJpYnV0ZSBnZXQoKQotICAgICAgICAgICAgeyByZXR1cm4gKFNjaGVtYUdsb2JhbEF0dHJpYnV0ZSlnZXRDb21wb25lbnQoKTsgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHJ1bnMgYSBTY2hlbWFHbG9iYWxFbGVtZW50LlJlZiBwb2ludGluZyB0byB0aGlzIGVsZW1lbnQgaXRzZWxmLgotICAgICAqLwotICAgIHB1YmxpYyBSZWYgZ2V0UmVmKCk7Ci0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50LmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzZiMzQ1Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotLyoqCi0gKiBSZXByZXNlbnRzIGEgZ2xvYmFsIGVsZW1lbnQgZGVmaW5pdGlvbi4KLSAqIAotICogQHNlZSBTY2hlbWFUeXBlTG9hZGVyI2ZpbmRFbGVtZW50Ci0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgU2NoZW1hR2xvYmFsRWxlbWVudCBleHRlbmRzIFNjaGVtYUxvY2FsRWxlbWVudCwgU2NoZW1hQ29tcG9uZW50Ci17Ci0gICAgLyoqCi0gICAgICogVGhlIG5hbWUgb2YgdGhlIHNvdXJjZSAueHNkIGZpbGUgd2l0aGluIHdoaWNoIHRoaXMgYXR0cmlidXRlIHdhcyBkZWZpbmVkCi0gICAgICovIAotICAgIFN0cmluZyBnZXRTb3VyY2VOYW1lKCk7Ci0KLSAgICAvKioKLSAgICAgKiBTZXQgb2YgUU5hbWVzIGZvciBlbGVtZW50cyB0aGF0IGFyZSB0aGUgbWVtYmVycyBvZiB0aGUKLSAgICAgKiBzdWJzdGl0dXRpb24gZ3JvdXAgZm9yIHdoaWNoIHRoaXMgZWxlbWVudCBpcyB0aGUgaGVhZCwKLSAgICAgKiBub3QgaW5jbHVkaW5nIHRoaXMgZWxlbWVudC4KLSAgICAgKi8KLSAgICBRTmFtZVtdIHN1YnN0aXR1dGlvbkdyb3VwTWVtYmVycygpOwotCi0gICAgLyoqCi0gICAgICogVGhlIGVsZW1lbnQgdGhhdCBpcyB0aGUgaGVhZCBvZiB0aGlzIGVsZW1lbnQncyBzdWJzdGl0dXRpb24KLSAgICAgKiBncm91cCwgb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYgdGhpcyBlbGVtZW50IGlzIG5vdCBhIG1lbWJlcgotICAgICAqIG9mIGEgc3Vic3RpdHV0aW9uIGdyb3VwLgotICAgICAqLwotICAgIFNjaGVtYUdsb2JhbEVsZW1lbnQgc3Vic3RpdHV0aW9uR3JvdXAoKTsKLQotICAgIC8qKgotICAgICAqIFRydWUgaWYgdXNpbmcgdGhpcyBlbGVtZW50IGFzIHRoZSBoZWFkIG9mIGEgc3Vic3RpdHV0aW9uCi0gICAgICogZ3JvdXAgZm9yIGEgc3Vic3RpdHV0aW9uIHZpYSB0eXBlIGV4dGVuc2lvbiBpcyBwcm9oaWJpdGVkLgotICAgICAqIElmIGJvdGggZmluYWxFeHRlbnNpb24gYW5kIGZpbmFsUmVzdHJpY3Rpb24gYXJlIHRydWUsIHRoaXMKLSAgICAgKiBlbGVtZW50IGNhbm5vdCBiZSBoZWFkIG9mIGEgc3Vic3RpdHV0aW9uIGdyb3VwLgotICAgICAqIFNlbnNpYmxlIG9ubHkgZm9yIGdsb2JhbCBlbGVtZW50cy4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBmaW5hbEV4dGVuc2lvbigpOwotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB1c2luZyB0aGlzIGVsZW1lbnQgYXMgdGhlIGhlYWQgb2YgYSBzdWJzdGl0dXRpb24KLSAgICAgKiBncm91cCBmb3IgYSBzdWJzdGl0dXRpb24gdmlhIHR5cGUgcmVzdHJpY3Rpb24gaXMgcHJvaGliaXRlZC4KLSAgICAgKiBJZiBib3RoIGZpbmFsRXh0ZW5zaW9uIGFuZCBmaW5hbFJlc3RyaWN0aW9uIGFyZSB0cnVlLCB0aGlzCi0gICAgICogZWxlbWVudCBjYW5ub3QgYmUgaGVhZCBvZiBhIHN1YnN0aXR1dGlvbiBncm91cC4KLSAgICAgKiBTZW5zaWJsZSBvbmx5IGZvciBnbG9iYWwgZWxlbWVudHMuCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gZmluYWxSZXN0cmljdGlvbigpOwotCi0gICAgLyoqCi0gICAgICogVXNlZCB0byBhbGxvdyBvbi1kZW1hbmQgbG9hZGluZyBvZiBlbGVtZW50cy4KLSAgICAgKiAKLSAgICAgKiBAZXhjbHVkZQotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2xhc3MgUmVmIGV4dGVuZHMgU2NoZW1hQ29tcG9uZW50LlJlZgotICAgIHsKLSAgICAgICAgcHVibGljIFJlZihTY2hlbWFHbG9iYWxFbGVtZW50IGVsZW1lbnQpCi0gICAgICAgICAgICB7IHN1cGVyKGVsZW1lbnQpOyB9Ci0KLSAgICAgICAgcHVibGljIFJlZihTY2hlbWFUeXBlU3lzdGVtIHN5c3RlbSwgU3RyaW5nIGhhbmRsZSkKLSAgICAgICAgICAgIHsgc3VwZXIoc3lzdGVtLCBoYW5kbGUpOyB9Ci0KLSAgICAgICAgcHVibGljIGZpbmFsIGludCBnZXRDb21wb25lbnRUeXBlKCkKLSAgICAgICAgICAgIHsgcmV0dXJuIFNjaGVtYUNvbXBvbmVudC5FTEVNRU5UOyB9Ci0KLSAgICAgICAgcHVibGljIGZpbmFsIFNjaGVtYUdsb2JhbEVsZW1lbnQgZ2V0KCkKLSAgICAgICAgICAgIHsgcmV0dXJuIChTY2hlbWFHbG9iYWxFbGVtZW50KWdldENvbXBvbmVudCgpOyB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0cnVucyBhIFNjaGVtYUdsb2JhbEVsZW1lbnQuUmVmIHBvaW50aW5nIHRvIHRoaXMgZWxlbWVudCBpdHNlbGYuCi0gICAgICovCi0gICAgcHVibGljIFJlZiBnZXRSZWYoKTsKLQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljM2QwNDYuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotLyoqCi0gKiBSZXByZXNlbnRzIGFuIGlkZW50aXR5IGNvbnN0cmFpbnQgZGVmaW5pdGlvbi4KLSAqLyAKLXB1YmxpYyBpbnRlcmZhY2UgU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50IGV4dGVuZHMgU2NoZW1hQ29tcG9uZW50Ci17Ci0gICAgLyoqCi0gICAgICogUmV0dXJuIHRoZSBzZWxlY3RvciB4cGF0aCBhcyBhIHN0cmluZy4KLSAgICAgKi8KLSAgICBTdHJpbmcgZ2V0U2VsZWN0b3IoKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybiBhIGNvbXBpbGVkIHhwYXRoIG9iamVjdCBmb3IgdGhlIHNlbGVjdG9yLgotICAgICAqLwotICAgIE9iamVjdCBnZXRTZWxlY3RvclBhdGgoKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybiAoYSBjb3B5IG9mKSB0aGUgeHBhdGhzIGZvciBhbGwgdGhlIGZpZWxkcy4KLSAgICAgKi8KLSAgICBTdHJpbmdbXSBnZXRGaWVsZHMoKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybiBhIGNvbXBpbGVkIHhwYXRoIG9iamVjdCBmb3IgdGhlIGZpZWxkLgotICAgICAqLwotICAgIE9iamVjdCBnZXRGaWVsZFBhdGgoaW50IGluZGV4KTsKLQotICAgIC8qKgotICAgICAqIFJldHVybiBhIHJlYWQtb25seSBjb3B5IG9mIHRoZSBuYW1lc3BhY2UgbWFwLiBUaGlzIGlzIHRoZSAKLSAgICAgKiBzZXQgb2YgcHJlZml4IHRvIFVSSSBtYXBwaW5ncyB0aGF0IHdlcmUgaW4gc2NvcGUgaW4gdGhlCi0gICAgICogc2NoZW1hIGF0IHRoZSBwb2ludCBhdCB3aGljaCB0aGlzIGNvbnN0cmFpbnQgd2FzIGRlY2xhcmVkCi0gICAgICovCi0gICAgTWFwIGdldE5TTWFwKCk7Ci0KLSAgICAvKiogQSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2RlY2xhcmUta2V5Ij54czprZXk8L2E+IGNvbnN0cmFpbnQuICBTZWUge0BsaW5rICNnZXRDb25zdHJhaW50Q2F0ZWdvcnl9LiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENDX0tFWSA9IDE7Ci0gICAgLyoqIEEgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNkZWNsYXJlLWtleSI+eHM6a2V5UmVmPC9hPiBjb25zdHJhaW50LiAgU2VlIHtAbGluayAjZ2V0Q29uc3RyYWludENhdGVnb3J5fS4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBDQ19LRVlSRUYgPSAyOwotICAgIC8qKiBBIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZGVjbGFyZS1rZXkiPnhzOnVuaXF1ZTwvYT4gY29uc3RyYWludC4gIFNlZSB7QGxpbmsgI2dldENvbnN0cmFpbnRDYXRlZ29yeX0uICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQ0NfVU5JUVVFID0gMzsKLQotICAgIC8qKgotICAgICAqIFJldHVybiB0aGUgY29uc3RyYWludCBjYXRlZ29yeS4gRWl0aGVyIHtAbGluayAjQ0NfS0VZfSwge0BsaW5rICNDQ19LRVlSRUZ9LAotICAgICAqIG9yIHtAbGluayAjQ0NfVU5JUVVFfS4KLSAgICAgKi8KLSAgICBpbnQgZ2V0Q29uc3RyYWludENhdGVnb3J5KCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBrZXkgdGhhdCBhIGtleSByZWYgcmVmZXJzIHRvLiBPbmx5IHZhbGlkIGZvcgotICAgICAqIGtleXJlZnMuCi0gICAgICovCi0gICAgU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50IGdldFJlZmVyZW5jZWRLZXkoKTsKLQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gYWxsb3cgb24tZGVtYW5kIGxvYWRpbmcgb2YgaWRlbnRpdHkgY29uc3RyYWludHMuCi0gICAgICogCi0gICAgICogQGV4Y2x1ZGUKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFJlZiBleHRlbmRzIFNjaGVtYUNvbXBvbmVudC5SZWYKLSAgICB7Ci0gICAgICAgIHB1YmxpYyBSZWYoU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50IGlkYykKLSAgICAgICAgICAgIHsgc3VwZXIoaWRjKTsgfQotCi0gICAgICAgIHB1YmxpYyBSZWYoU2NoZW1hVHlwZVN5c3RlbSBzeXN0ZW0sIFN0cmluZyBoYW5kbGUpCi0gICAgICAgICAgICB7IHN1cGVyKHN5c3RlbSwgaGFuZGxlKTsgfQotCi0gICAgICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0Q29tcG9uZW50VHlwZSgpCi0gICAgICAgICAgICB7IHJldHVybiBTY2hlbWFDb21wb25lbnQuSURFTlRJVFlfQ09OU1RSQUlOVDsgfQotCi0gICAgICAgIHB1YmxpYyBmaW5hbCBTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQgZ2V0KCkKLSAgICAgICAgICAgIHsgcmV0dXJuIChTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQpZ2V0Q29tcG9uZW50KCk7IH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxBdHRyaWJ1dGUuamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEF0dHJpYnV0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWEyOTA4Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEF0dHJpYnV0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi0vKioKLSAqIFJlcHJlc2VudHMgYSBsb2NhbCBvciBnbG9iYWwgYXR0cmlidXRlIGRlZmluaXRpb24uCi0gKi8gCi1wdWJsaWMgaW50ZXJmYWNlIFNjaGVtYUxvY2FsQXR0cmlidXRlIGV4dGVuZHMgU2NoZW1hRmllbGQKLXsKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHtAbGluayAjUFJPSElCSVRFRH0sIHtAbGluayAjT1BUSU9OQUx9LCBvciB7QGxpbmsgI1JFUVVJUkVEfS4KLSAgICAgKiAoQWN0dWFsbHksIG5ldmVyIHJldHVybnMgUFJPSElCSVRFRCBiZWNhdXNlIHRoZSBzY2hlbWEgc3BlY2lmaWNhaW9uCi0gICAgICogc3RhdGVzIHRoYXQgYSBwcm9oaWJpdGVkIGF0dHJpYnV0ZSBpcyBlcXVpdmFsZW50IHRvIG5vIGF0dHJpYnV0ZQotICAgICAqIGF0IGFsbCwgc28gYSBwcm9oaWJpdGVkIGF0dHJpYnV0ZSB3aWxsIG5ldmVyIGJlIHByZXNlbnQgaW4gdGhlIGNvbXBpbGVkCi0gICAgICogbW9kZWwuKQotICAgICAqLwotICAgIGludCBnZXRVc2UoKTsKLQotICAgIC8qKiBBIHByb2hpYml0ZWQgYXR0cmlidXRlLiAgU2VlIHtAbGluayAjZ2V0VXNlfS4gKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IFBST0hJQklURUQgPSAxOwotICAgIC8qKiBBbiBvcHRpb25hbCBhdHRyaWJ1dGUuICBTZWUge0BsaW5rICNnZXRVc2V9LiAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgT1BUSU9OQUwgPSAyOwotICAgIC8qKiBBIHJlcXVpcmVkIGF0dHJpYnV0ZS4gIFNlZSB7QGxpbmsgI2dldFVzZX0uICovCi0gICAgc3RhdGljIGZpbmFsIGludCBSRVFVSVJFRCA9IDM7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxFbGVtZW50LmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxFbGVtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MDY4ZGMuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsRWxlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi0vKioKLSAqIFJlcHJlc2VudHMgYSBsb2NhbCBvciBnbG9iYWwgZWxlbWVudCBkZWZpbml0aW9uLgotICovIAotcHVibGljIGludGVyZmFjZSBTY2hlbWFMb2NhbEVsZW1lbnQgZXh0ZW5kcyBTY2hlbWFGaWVsZAotewotICAgIC8qKgotICAgICAqIFRydWUgaWYgZXh0ZW5zaW9uIGlzIGJsb2NrZWQuCi0gICAgICovCi0gICAgYm9vbGVhbiBibG9ja0V4dGVuc2lvbigpOwotICAgIC8qKgotICAgICAqIFRydWUgaWYgcmVzdHJpY3Rpb24gaXMgYmxvY2tlZC4KLSAgICAgKi8KLSAgICBib29sZWFuIGJsb2NrUmVzdHJpY3Rpb24oKTsKLSAgICAvKioKLSAgICAgKiBUcnVlIGlmIGVsZW1lbnQgc3Vic3RpdHV0aW9uIGlzIGJsb2NrZWQuCi0gICAgICovCi0gICAgYm9vbGVhbiBibG9ja1N1YnN0aXR1dGlvbigpOwotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGlzIGVsZW1lbnQgaXMgcHJvaGliaXRlZCBpbiBjb250ZW50LiBPbmx5Ci0gICAgICogc2Vuc2libGUgaWYgdGhpcyBpcyB0aGUgaGVhZCBvZiBhIHN1YnN0aXR1dGlvbiBncm91cDsKLSAgICAgKiB0aGVuIG9ubHkgc3Vic3RpdHV0aW9uIGdyb3VwIG1lbWJlcnMgY2FuIGFwcGVhci48UD4KLSAgICAgKiAKLSAgICAgKiBBbHRob3VnaCBsb2NhbCBlbGVtZW50cyBjYW5ub3QgYmUgYWJzdHJhY3QsIGlmIGFuIGVsZW1lbnQgCi0gICAgICogdXNlIGlzIGEgcmVmIHRvIGEgZ2xvYmFsIGVsZW1lbnQsIHRoZW4gdGhlIGZsYWcgZnJvbSB0aGUgCi0gICAgICogZ2xvYmFsIGVsZW1lbnQgaXMgY29waWVkIGluIHRvIHRoZSBsb2NhbCBlbGVtZW50IHdoZXJlIHRoZSAKLSAgICAgKiB1c2Ugb2NjdXJzLgotICAgICAqLwotICAgIGJvb2xlYW4gaXNBYnN0cmFjdCgpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhbGwgdGhlIEtleSwgS2V5UmVmLCBhbmQgVW5pcXVlIGNvbnN0cmFpbnRzCi0gICAgICogb24gdGhpcyBlbGVtZW50LgotICAgICAqLwotICAgIFNjaGVtYUlkZW50aXR5Q29uc3RyYWludFtdIGdldElkZW50aXR5Q29uc3RyYWludHMoKTsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFNb2RlbEdyb3VwLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTW9kZWxHcm91cC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2QyZDc1Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFNb2RlbEdyb3VwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotLyoqCi0gKiBSZXByZXNlbnRzIGEgbW9kZWwgZ3JvdXAuCi0gKiA8cD4KLSAqIEEgbW9kZWwgZ3JvdXAgaXMgYSBzeW50YWN0aWMgY29uc3RydWN0LCBub3QgYSBwYXJ0IG9mCi0gKiB0aGUgbG9naWNhbCBtb2RlbC4gRm9yIGV4YW1wbGUsIHR5cGVzIGRlY2xhcmVkIHdpdGhpbiBhCi0gKiBtb2RlbCBncm91cCBiZWNvbWUgbG9jYWwgdG8gdGhlIHR5cGUgdGhhdCB1c2VzIHRoZSBncm91cCAtCi0gKiB0aGV5J3JlIG5vdCBsb2NhbCB0byB0aGUgbW9kZWwgZ3JvdXAgaXRzZWxmLiBUaGVyZWZvcmUgaW4KLSAqIHRoZSBsb2dpY2FsIG1vZGVsIG9mIGEgc2NoZW1hIHR5cGUgc3lzdGVtLCBhIG1vZGVsIGdyb3VwCi0gKiBkb2Vzbid0IHJlcHJlc2VudCBhbnl0aGluZy4gSXRzIGNvbnRlbnRzIGFyZSBtZXJnZWQgaW50bwotICogdGhlIGxvZ2ljYWwgbW9kZWwgYXQgcGFyc2UgdGltZS4KLSAqLwotcHVibGljIGludGVyZmFjZSBTY2hlbWFNb2RlbEdyb3VwIGV4dGVuZHMgU2NoZW1hQ29tcG9uZW50Ci17Ci0gICAgLyoqCi0gICAgICogUmV0dXJucyBTY2hlbWFDb21wb25lbnQuR1JPVVAuCi0gICAgICovCi0gICAgaW50IGdldENvbXBvbmVudFR5cGUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBuYW1lIG9mIHRoZSBtb2RlbCBncm91cC4KLSAgICAgKi8KLSAgICBRTmFtZSBnZXROYW1lKCk7Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIHRvIGFsbG93IG9uLWRlbWFuZCBsb2FkaW5nIG9mIG1vZGVsIGdyb3Vwcy4KLSAgICAgKiAKLSAgICAgKiBAZXhjbHVkZQotICAgICAqLwotICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgY2xhc3MgUmVmIGV4dGVuZHMgU2NoZW1hQ29tcG9uZW50LlJlZgotICAgIHsKLSAgICAgICAgcHVibGljIFJlZihTY2hlbWFNb2RlbEdyb3VwIG1vZGVsR3JvdXApCi0gICAgICAgICAgICB7IHN1cGVyKG1vZGVsR3JvdXApOyB9Ci0KLSAgICAgICAgcHVibGljIFJlZihTY2hlbWFUeXBlU3lzdGVtIHN5c3RlbSwgU3RyaW5nIGhhbmRsZSkKLSAgICAgICAgICAgIHsgc3VwZXIoc3lzdGVtLCBoYW5kbGUpOyB9Ci0KLSAgICAgICAgcHVibGljIGZpbmFsIGludCBnZXRDb21wb25lbnRUeXBlKCkKLSAgICAgICAgICAgIHsgcmV0dXJuIFNjaGVtYUNvbXBvbmVudC5NT0RFTF9HUk9VUDsgfQotCi0gICAgICAgIHB1YmxpYyBmaW5hbCBTY2hlbWFNb2RlbEdyb3VwIGdldCgpCi0gICAgICAgICAgICB7IHJldHVybiAoU2NoZW1hTW9kZWxHcm91cClnZXRDb21wb25lbnQoKTsgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyYTg1YTAuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzggKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi0vKioKLSAqIFJlcHJlc2VudHMgYSBTY2hlbWEgcGFydGljbGUgZGVmaW5pdGlvbi4KLSAqIDxwPgotICogVGhlIGNvbnRlbnQgbW9kZWwgb2YgYSBjb21wbGV4IHR5cGUgaXMgYSB0cmVlIG9mIHBhcnRpY2xlcy4gIEVhY2gKLSAqIHBhcnRpY2xlIGlzIGVpdGhlciBhbiB7QGxpbmsgI0FMTH0sIHtAbGluayAjQ0hPSUNFfSwge0BsaW5rICNTRVFVRU5DRX0sCi0gKiB7QGxpbmsgI0VMRU1FTlR9LCBvciB7QGxpbmsgI1dJTERDQVJEfS4KLSAqIEFsbCwgY2hvaWNlIGFuZCBzZXF1ZW5jZSBwYXJ0aWNsZXMgYXJlIGdyb3VwcyB0aGF0IGNhbiBoYXZlIGNoaWxkCi0gKiBwYXJ0aWNsZXM7IGVsZW1lbnRzIGFuZCB3aWxkY2FyZHMgYXJlIGFsd2F5cyBsZWF2ZXMgb2YgdGhlIHBhcnRpY2xlIHRyZWUuCi0gKiA8cD4KLSAqIFRoZSB0cmVlIG9mIHBhcnRpY2xlcyBhdmFpbGFibGUgb24gYSBzY2hlbWEgdHlwZSBpcyBtaW5pbWl6ZWQsIHRoYXQKLSAqIGlzLCBpdCBhbHJlYWR5IGhhcyByZW1vdmVkICJwb2ludGxlc3MiIHBhcnRpY2xlcyBzdWNoIGFzIGVtcHR5Ci0gKiBzZXF1ZW5jZXMsIG5vbnJlcGVhdGluZyBzZXF1ZW5jZXMgd2l0aCBvbmx5IG9uZSBpdGVtLCBhbmQgc28gb24uCi0gKiAoPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNjb3MtcGFydGljbGUtcmVzdHJpY3QiPlBvaW50bGVzcyBwYXJ0aWNsZXM8L2E+Ci0gKiBhcmUgZGVmaW5lZCBwcmVjaXNlbHkgaW4gdGhlIFhNTCBTY2hlbWEgc3BlY2lmaWNhdGlvbi4pCi0gKiAKLSAqIEBzZWUgU2NoZW1hVHlwZSNnZXRDb250ZW50TW9kZWwKLSAqLwotcHVibGljIGludGVyZmFjZSBTY2hlbWFQYXJ0aWNsZQotewotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHBhcnRpY2xlIHR5cGUgKHtAbGluayAjQUxMfSwge0BsaW5rICNDSE9JQ0V9LAotICAgICAqIHtAbGluayAjU0VRVUVOQ0V9LCB7QGxpbmsgI0VMRU1FTlR9LCBvciB7QGxpbmsgI1dJTERDQVJEfSkuIAotICAgICAqLyAKLSAgICBpbnQgZ2V0UGFydGljbGVUeXBlKCk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogQW4gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNkZWNsYXJlLWNvbnRlbnRNb2RlbCI+eHM6YWxsPC9hPiBncm91cC4KLSAgICAgKiBTZWUge0BsaW5rICNnZXRQYXJ0aWNsZVR5cGV9LgotICAgICAqLyAKLSAgICBzdGF0aWMgZmluYWwgaW50IEFMTCA9IDE7Ci0gICAgLyoqCi0gICAgICogQSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2RlY2xhcmUtY29udGVudE1vZGVsIj54czpjaG9pY2U8L2E+IGdyb3VwLgotICAgICAqIFNlZSB7QGxpbmsgI2dldFBhcnRpY2xlVHlwZX0uCi0gICAgICovIAotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ0hPSUNFID0gMjsKLSAgICAvKioKLSAgICAgKiBBIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZGVjbGFyZS1jb250ZW50TW9kZWwiPnhzOnNlcXVlbmNlPC9hPiBncm91cC4KLSAgICAgKiBTZWUge0BsaW5rICNnZXRQYXJ0aWNsZVR5cGV9LgotICAgICAqLyAKLSAgICBzdGF0aWMgZmluYWwgaW50IFNFUVVFTkNFID0gMzsKLSAgICAvKioKLSAgICAgKiBBbiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2RlY2xhcmUtZWxlbWVudCI+eHM6ZWxlbWVudDwvYT4gcGFydGljbGUuCi0gICAgICogVGhpcyBjb2RlIG1lYW5zIHRoZSBwYXJ0aWNsZSBjYW4gYmUgY29lcmNlZCB0byB7QGxpbmsgU2NoZW1hTG9jYWxFbGVtZW50fS4KLSAgICAgKiBTZWUge0BsaW5rICNnZXRQYXJ0aWNsZVR5cGV9LgotICAgICAqLyAKLSAgICBzdGF0aWMgZmluYWwgaW50IEVMRU1FTlQgPSA0OwotICAgIC8qKgotICAgICAqIEFuIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZGVjbGFyZS1vcGVubmVzcyI+eHM6YW55PC9hPiBwYXJ0aWNsZSwKLSAgICAgKiBhbHNvIGtub3duIGFzIGFuIGVsZW1lbnQgd2lsZGNhcmQuCi0gICAgICogU2VlIHtAbGluayAjZ2V0UGFydGljbGVUeXBlfS4KLSAgICAgKi8gCi0gICAgc3RhdGljIGZpbmFsIGludCBXSUxEQ0FSRCA9IDU7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBtaW5PY2N1cnMgdmFsdWUgZm9yIHRoaXMgcGFydGljbGUuCi0gICAgICogSWYgaXQncyBub3Qgc3BlY2lmaWVkIGV4cGxpY2l0bHksIHRoaXMgcmV0dXJucyBCaWdJbnRlZ2VyLk9ORS4KLSAgICAgKi8KLSAgICBCaWdJbnRlZ2VyIGdldE1pbk9jY3VycygpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbWF4T2NjdXJzIHZhbHVlIGZvciB0aGlzIHBhcnRpY2xlLCBvciBudWxsIGlmIGl0Ci0gICAgICogaXMgdW5ib3VuZGVkLgotICAgICAqIElmIGl0J3Mgbm90IHNwZWNpZmllZCBleHBsaWNpdGx5LCB0aGlzIHJldHVybnMgQmlnSW50ZWdlci5PTkUuCi0gICAgICovCi0gICAgQmlnSW50ZWdlciBnZXRNYXhPY2N1cnMoKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIG1pbk9jY3VycyB2YWx1ZSwgcGVnZ2VkIHRvIGEgMzItYml0IGludCBmb3IKLSAgICAgKiBjb252ZW5pZW5jZSBvZiBhIHZhbGlkYXRpbmcgc3RhdGUgbWFjaGluZSB0aGF0IGRvZXNuJ3QgY291bnQKLSAgICAgKiBoaWdoZXIgdGhhbiBNQVhfSU5UIGFueXdheS4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldEludE1pbk9jY3VycygpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbWF4T2NjdXJzIHZhbHVlLCBwZWdnZWQgdG8gYSAzMi1iaXQgaW50IGZvcgotICAgICAqIGNvbnZlbmllbmNlIG9mIGEgdmFsaWRhdGluZyBzdGF0ZSBtYWNoaW5lIHRoYXQgZG9lc24ndCBjb3VudAotICAgICAqIGhpZ2hlciB0aGFuIE1BWF9JTlQgYW55d2F5LiBVbmJvdW5kZWQgaXMgZ2l2ZW4gYXMgTUFYX0lOVC4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldEludE1heE9jY3VycygpOwotCi0KLSAgICAvKioKLSAgICAgKiBPbmUgaWYgbWluT2NjdXJzID09IG1heE9jY3VycyA9PSAxLgotICAgICAqLwotICAgIGJvb2xlYW4gaXNTaW5nbGV0b24oKTsKLQotICAgIC8qKgotICAgICAqIEFwcGxpZXMgdG8gc2VxdWVuY2UsIGNob2ljZSwgYW5kIGFsbCBwYXJ0aWNsZXMgb25seTogcmV0dXJucyBhbiBhcnJheQotICAgICAqIG9mIGFsbCB0aGUgcGFydGljbGUgY2hpbGRyZW4gaW4gb3JkZXIuCi0gICAgICovCi0gICAgU2NoZW1hUGFydGljbGVbXSBnZXRQYXJ0aWNsZUNoaWxkcmVuKCk7Ci0KLSAgICAvKioKLSAgICAgKiBBbm90aGVyIHdheSB0byBhY2Nlc3MgdGhlIHBhcnRpY2xlIGNoaWxkcmVuLgotICAgICAqLwotICAgIFNjaGVtYVBhcnRpY2xlIGdldFBhcnRpY2xlQ2hpbGQoaW50IGkpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG51bWJlciBvZiBjaGlsZHJlbi4KLSAgICAgKi8KLSAgICBpbnQgY291bnRPZlBhcnRpY2xlQ2hpbGQoKTsKLQotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhpcyBwYXJ0aWNsZSBjYW4gc3RhcnQgd2l0aCB0aGUgZ2l2ZW4gZWxlbWVudAotICAgICAqICh0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdHJ1Y3R1cmUgb2YgYWxsIGNoaWxkIHBhcnRpY2xlcwotICAgICAqIG9mIGNvdXJzZSkuCi0gICAgICovCi0gICAgYm9vbGVhbiBjYW5TdGFydFdpdGhFbGVtZW50KFFOYW1lIG5hbWUpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgUU5hbWVTZXQgb2YgZWxlbWVudCBuYW1lcyB0aGF0IGNhbiBiZQotICAgICAqIGFjY2VwdGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBwYXJ0aWNsZS4KLSAgICAgKi8KLSAgICBRTmFtZVNldCBhY2NlcHRlZFN0YXJ0TmFtZXMoKTsKLQotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhpcyBwYXJ0aWNsZSBjYW4gYmUgc2tpcHBlZCAodGFraW5nIGludG8gYWNjb3VudAotICAgICAqIGJvdGggdGhlIG1pbk9jdXJzIGFzIHdlbGwgYXMgdGhlIHN0cnVjdHVyZSBvZiBhbGwgdGhlCi0gICAgICogY2hpbGQgcGFydGljbGVzKQotICAgICAqLwotICAgIGJvb2xlYW4gaXNTa2lwcGFibGUoKTsKLQotICAgIC8qKgotICAgICAqIEZvciB3aWxkY2FyZHMsIHJldHVybnMgYSBRTmFtZVNldCByZXByZXNlbnRpbmcgdGhlIHdpbGRjYXJkLgotICAgICAqLwotICAgIFFOYW1lU2V0IGdldFdpbGRjYXJkU2V0KCk7Ci0KLSAgICAvKioKLSAgICAgKiBGb3Igd2lsZGNhcmRzLCByZXR1cm5zIHRoZSBwcm9jZXNzaW5nIGNvZGUgKHtAbGluayAjU1RSSUNUfSwge0BsaW5rICNMQVh9LCB7QGxpbmsgI1NLSVB9KS4KLSAgICAgKi8KLSAgICBpbnQgZ2V0V2lsZGNhcmRQcm9jZXNzKCk7Ci0KLSAgICAvKiogPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNXaWxkY2FyZF9kZXRhaWxzIj5TdHJpY3Qgd2lsZGNhcmQ8L2E+IHByb2Nlc3NpbmcuIFNlZSB7QGxpbmsgI2dldFdpbGRjYXJkUHJvY2Vzc30gKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IFNUUklDVCA9IDE7Ci0gICAgLyoqIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jV2lsZGNhcmRfZGV0YWlscyI+TGF4IHdpbGRjYXJkPC9hPiBwcm9jZXNzaW5nLiBTZWUge0BsaW5rICNnZXRXaWxkY2FyZFByb2Nlc3N9ICovCi0gICAgc3RhdGljIGZpbmFsIGludCBMQVggPSAyOwotICAgIC8qKiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI1dpbGRjYXJkX2RldGFpbHMiPlNraXAgd2lsZGNhcmQ8L2E+IHByb2Nlc3NpbmcuIFNlZSB7QGxpbmsgI2dldFdpbGRjYXJkUHJvY2Vzc30gKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IFNLSVAgPSAzOwotCi0gICAgLyoqCi0gICAgICogRm9yIGVsZW1lbnRzIG9ubHk6IHRoZSBRTmFtZSBmb3IgdGhlIGVsZW1lbnQgdXNlLgotICAgICAqIE1heSBiZSB1bnF1YWxpZmllZCB2ZXJzaW9uIG9mIHJlZmVyZW5jZWQgZWxlbWVudCdzIG5hbWUuCi0gICAgICovCi0gICAgUU5hbWUgZ2V0TmFtZSgpOwotICAgIAotICAgIC8qKgotICAgICAqIEZvciBlbGVtZW50cyBvbmx5OiByZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBlbGVtZW50LgotICAgICAqLwotICAgIFNjaGVtYVR5cGUgZ2V0VHlwZSgpOwotCi0gICAgLyoqCi0gICAgICogRm9yIGVsZW1lbnRzIG9ubHk6IHRydWUgaWYgbmlsbGFibGUuCi0gICAgICovCi0gICAgYm9vbGVhbiBpc05pbGxhYmxlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBGb3IgZWxlbWVudHMgb25seTogcmV0dXJucyB0aGUgZGVmYXVsdCAob3IgZml4ZWQpIHRleHQgdmFsdWUKLSAgICAgKi8KLSAgICBTdHJpbmcgZ2V0RGVmYXVsdFRleHQoKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBGb3IgZWxlbWVudHMgb25seTogcmV0dXJucyB0aGUgZGVmYXVsdCAob3IgZml4ZWQpIHN0cm9uZ2x5LXR5cGVkIHZhbHVlCi0gICAgICovCi0gICAgWG1sQW55U2ltcGxlVHlwZSBnZXREZWZhdWx0VmFsdWUoKTsKLQotICAgIC8qKgotICAgICAqIEZvciBlbGVtZW50cyBvbmx5OiBUcnVlIGlmIGhhcyBkZWZhdWx0LiBJZiBpc0ZpeGVkLCB0aGVuIGlzRGVmYXVsdCBpcyBhbHdheXMgdHJ1ZS4KLSAgICAgKi8KLSAgICBib29sZWFuIGlzRGVmYXVsdCgpOwotCi0gICAgLyoqCi0gICAgICogRm9yIGVsZW1lbnRzIG9ubHk6IHRydWUgaWYgaXMgZml4ZWQgdmFsdWUuCi0gICAgICovCi0gICAgYm9vbGVhbiBpc0ZpeGVkKCk7Ci0gICAgCi19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGNhZWVmLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcwICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotLyoqCi0gKiBSZXByZXNlbnRzIGEgc3VtbWFyeSBvZiBzaW1pbGFyIFNjaGVtYUZpZWxkcyBpbiBhIGNvbXBsZXggdHlwZS4KLSAqIDxwPgotICogSW4gYSBzY2hlbWEgdHlwZSwgZXZlcnkgZWxlbWVudCB3aXRoIHRoZSBzYW1lIG5hbWUgbXVzdCBoYXZlIHRoZQotICogc2FtZSB0eXBlLiAgVGhlcmVmb3JlLCBhbGwgdG9nZXRoZXIsIGVsZW1lbnRzIHdpdGggdGhlIHNhbWUgbmFtZQotICogZm9ybSBhIGNvaGVyZW50IGNvbGxlY3Rpb24gb2Ygc2ltaWxhciBlbGVtZW50cy4gIFNpbWlsYXJseSwgYXR0cmlidXRlcwotICogY2FuIG9ubHkgYmUgZGVmaW5lZCBvbmNlLCBzbyBlYWNoIGF0dHJpYnV0ZSBvYnZpb3VzbHkgaXMgYSBjb2hlcmVudAotICogZ3JvdXAgb24gaXRzIG93bi4KLSAqIDxwPgotICogQSBTY2hlbWFQcm9wZXJ0eSByZXByZXNlbnRzIGEgc3VtbWFyeSBvZiB0aGUgdGhlIGVsZW1lbnRzIHdpdGggYQotICogZ2l2ZW4gbmFtZSBvciB0aGUgYXR0cmlidXRlIHdpdGggYSBnaXZlbiBuYW1lLiAgSXQgcmVwcmVzZW50cyB0aGUKLSAqIHN1bW1hcnkgY2FyZGluYWxpdHkgb2YgdGhlIGZpZWxkcywgdGhlIHN1bW1hcnkgZGVmYXVsdCBhbmQgZml4ZWQKLSAqIHZhbHVlcywgYW5kIHNvIG9uLiAgV2hlbiBpbmZlcnJpbmcgaW5mb3JtYXRpb24gYWJvdXQgYW4gZWxlbWVudAotICogb3IgYXR0cmlidXRlLCBpdCBpcyB0eXBpY2FsbHkgZWFzaWVyIHRvIGNvbnN1bHQgdGhlbiBTY2hlbWFQcm9wZXJ0eQotICogdGhhbiB0byBodW50IGZvciB0aGUgZXhhY3QgU2NoZW1hRmllbGQgaW4gdGhlIHBhcnRpY2xlIHRyZWUgb3IKLSAqIGF0dHJpYnV0ZSBtb2RlbC4KLSAqIAotICogQHNlZSBTY2hlbWFUeXBlI2dldFByb3BlcnRpZXMKLSAqIEBzZWUgU2NoZW1hVHlwZSNnZXRBdHRyaWJ1dGVQcm9wZXJ0aWVzCi0gKiBAc2VlIFNjaGVtYVR5cGUjZ2V0RWxlbWVudFByb3BlcnRpZXMKLSAqIEBzZWUgU2NoZW1hVHlwZSNnZXRBdHRyaWJ1dGVQcm9wZXJ0eQotICogQHNlZSBTY2hlbWFUeXBlI2dldEVsZW1lbnRQcm9wZXJ0eQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFNjaGVtYVByb3BlcnR5Ci17Ci0gICAgLyoqCi0gICAgICogVGhlIHR5cGUgd2l0aGluIHdoaWNoIHRoaXMgcHJvcGVydHkgYXBwZWFycwotICAgICAqLyAKLSAgICBTY2hlbWFUeXBlIGdldENvbnRhaW5lclR5cGUoKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBUaGUgbmFtZSBvZiB0aGlzIGVsZW1lbnQgb3IgYXR0cmlidXRlCi0gICAgICovIAotICAgIFFOYW1lIGdldE5hbWUoKTsKLQotICAgIC8qKgotICAgICAqIEZvciBlbGVtZW50IHByb3BlcnRpZXMgdGhlIHNldCBvZiBuYW1lcyB0aGF0IGFyZSBhY2NlcHRlZCBmb3IgdGhpcyBwcm9wZXJ0eQotICAgICAqIGlmIHRoaXMgZWxlbWVudCBpcyB0aGUgaGVhZCBvZiBhIHN1YnN0aXR1dGlvbiBncm91cC4gVGhpcyB3aWxsIGFsd2F5cwotICAgICAqIGhhdmUgYXQgbGVhc3Qgb25lIGVsZW1lbnQsIGllLCB0aGUgcHJvcGVydHkncyBuYW1lLgotICAgICAqLwotICAgIFFOYW1lW10gYWNjZXB0ZWROYW1lcygpOwotICAgIAotICAgIC8qKgotICAgICAqIFRoZSBKYXZhIG5hbWUgZm9yIHRoaXMgcHJvcGVydHkuICBGb3IgZXhhbXBsZSwgaWYgdGhlIG1ldGhvZCB0bwotICAgICAqIGFjY2VzcyB0aGlzIHByb3BlcnR5IGlzIGNhbGxlZCBnZXRGaXJzdE5hbWUsIHRoZW4gdGhpcyBtZXRob2QKLSAgICAgKiByZXR1cm5zIHRoZSBzdHJpbmcgIkZpcnN0TmFtZSIuICBNYXkgYmUgbnVsbCBpZiB0aGUgc2NoZW1hIHR5cGUKLSAgICAgKiBoYXMgbm90IGJlZW4gY29tcGlsZWQgdG8gSmF2YS4KLSAgICAgKi8gCi0gICAgU3RyaW5nIGdldEphdmFQcm9wZXJ0eU5hbWUoKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBUcnVlIGZvciByZWFkLW9ubHkgcHJvcGVydGllcy4KLSAgICAgKi8gCi0gICAgYm9vbGVhbiBpc1JlYWRPbmx5KCk7Ci0KLSAgICAvKioKLSAgICAgKiBUcnVlIGZvciBhdHRyaWJ1dGVzLgotICAgICAqLyAKLSAgICBib29sZWFuIGlzQXR0cmlidXRlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgc2NoZW1hIHR5cGUgZm9yIHRoZSBwcm9wZXJ0eS4KLSAgICAgKi8gCi0gICAgU2NoZW1hVHlwZSBnZXRUeXBlKCk7Ci0KLSAgICAvLyBub3RlIHRoYXQgaW4gdGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeSwgaWYgdGhlIGFycmF5IGdldHRlciBzaG93cyB1cCBmaXJzdCwKLSAgICAvLyB0aGVuIHRoZSBzaW5nZWx0b24gZ2V0dGVyIGlzIG5ldmVyIGFsbG93ZWQgdG8gc2hvdyB1cC4KLQotICAgIC8qKgotICAgICAqIFRoZSBzY2hlbWEgdHlwZSByZXR1cm5lZCBmcm9tIHRoZSBKYXZhIGdldHRlciBmb3IgdGhpcyBwcm9wZXJ0eS4KLSAgICAgKiBBcHBsaWVzIG9ubHkgdG8gdHlwZXMgdGhhdCBoYXZlIGJlZW4gY29kZSBnZW5lcmF0ZWQgdG8gSmF2YTsgbWF5Ci0gICAgICogYmUgYSBiYXNlIHR5cGUgb2YgZ2V0VHlwZSgpLgotICAgICAqLyAKLSAgICBwdWJsaWMgU2NoZW1hVHlwZSBqYXZhQmFzZWRPblR5cGUoKTsgLy8gSmF2YSBwcm9wZXJ0eSB0eXBlIGJhc2VkIG9uIHRoaXMgYmFzZSB0eXBlCi0gICAgCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGVyZSBpcyBhIEphdmEgZ2V0dGVyIHRoYXQgcmV0dXJucyBhIHNpbmdsZXRvbi4KLSAgICAgKi8gCi0gICAgYm9vbGVhbiBleHRlbmRzSmF2YVNpbmdsZXRvbigpOyAvLyBoYXMgc2luZ2xldG9uIGdldHRlcgotICAgIAotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhlcmUgaXMgYW4gSmF2YSBpc1NldCBtZXRob2QgdGhhdCB0ZXN0cyBmb3IgcHJlc2VuY2UuCi0gICAgICovIAotICAgIGJvb2xlYW4gZXh0ZW5kc0phdmFPcHRpb24oKTsgICAgLy8gaGFzIGlzU2V0IHRlc3RlcgotICAgIAotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhlcmUgaXMgYSBKYXZhIGdldHRlciB0aGF0IHJldHVybnMgYW4gYXJyYXkuCi0gICAgICovIAotICAgIGJvb2xlYW4gZXh0ZW5kc0phdmFBcnJheSgpOyAgICAgLy8gaGFzIGFycmF5IGdldHRlciAoY2FsbGVkIC1BcnJheSwgaWYgc2luZ2xldG9uIGlzIHByZXNlbnQpCi0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbmF0dXJhbCBKYXZhIHR5cGUgZm9yIHRoaXMgcHJvcGVydHkuICBSZXR1cm5zIGVpdGhlcgotICAgICAqIFhNTF9PQkpFQ1QgKGZvciBjb21wbGV4IHR5cGVzKSBvciBvbmUgb2YgdGhlIEpBVkFfKiBjb25zdGFudHMgZGVzY3JpYmVkCi0gICAgICogaW4gdGhpcyBpbnRlcmZhY2UuCi0gICAgICovIAotICAgIGludCBnZXRKYXZhVHlwZUNvZGUoKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBzZXQgb2YgZWxlbWVudCBuYW1lcyB3aGljaCBzaG91bGQgYXBwZWFyIHN0cmljdGx5IGFmdGVyIGFsbAotICAgICAqIG9jY3VyZW5jZXMgb2YgdGhlIGVsZW1lbnRzIGRlc2NyaWJlZCBieSB0aGlzIHByb3BlcnR5LiBGb3IgZWxlbWVudCBwcm9wZXJ0aWVzIG9ubHkuCi0gICAgICovIAotICAgIFFOYW1lU2V0IGdldEphdmFTZXR0ZXJEZWxpbWl0ZXIoKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBzdW1tYXJpemVkIG1pbmltdW0gb2NjdXJyYW5jZSBudW1iZXIuCi0gICAgICogRm9yIGV4YW1wbGUsIGEgc2VxdWVuY2UgY29udGFpbmluZyBhIG5vbm9wdGlvbmFsIHNpbmdsZXRvbiBlbGVtZW50IHJlcGVhdGVkIHR3aWNlIHdpbGwKLSAgICAgKiByZXN1bHQgaW4gYSBwcm9wZXJ0eSBnZXRNaW5PY2N1cnMoKSBvZiAyLgotICAgICAqLyAKLSAgICBCaWdJbnRlZ2VyIGdldE1pbk9jY3VycygpOwotICAgIAotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBzdW1tYXJpemVkIG1pbmltdW0gb2NjdXJyYW5jZSBudW1iZXIuCi0gICAgICogRm9yIGV4YW1wbGUsIGEgc2VxdWVuY2UgY29udGFpbmluZyBhIG5vbm9wdGlvbmFsIHNpbmdsZXRvbiBlbGVtZW50IHJlcGVhdGVkIHR3aWNlIHdpbGwKLSAgICAgKiByZXN1bHQgaW4gYSBwcm9wZXJ0eSBnZXRNYXhPY2N1cnMoKSBvZiAyLgotICAgICAqLyAKLSAgICBCaWdJbnRlZ2VyIGdldE1heE9jY3VycygpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB7QGxpbmsgI05FVkVSfSwge0BsaW5rICNWQVJJQUJMRX0sIG9yIHtAbGluayAjQ09OU0lTVEVOVExZfSBuaWxsYWJsZSwgZGVwZW5kaW5nIG9uIHRoZQotICAgICAqIG5pbGxhYmlsaXR5IG9mIHRoZSBlbGVtZW50cyBpbiB0aGlzIHByb3BlcnR5LiAKLSAgICAgKi8KLSAgICBpbnQgaGFzTmlsbGFibGUoKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMge0BsaW5rICNORVZFUn0sIHtAbGluayAjVkFSSUFCTEV9LCBvciB7QGxpbmsgI0NPTlNJU1RFTlRMWX0gZGVmYXVsdGVkLCBkZXBlbmRpbmcgb24gdGhlCi0gICAgICogZGVmYXVsdHMgcHJlc2VudCBpbiB0aGUgZWxlbWVudHMgaW4gdGhpcyBwcm9wZXJ0eS4gCi0gICAgICovCi0gICAgaW50IGhhc0RlZmF1bHQoKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMge0BsaW5rICNORVZFUn0sIHtAbGluayAjVkFSSUFCTEV9LCBvciB7QGxpbmsgI0NPTlNJU1RFTlRMWX0gZml4ZWQsIGRlcGVuZGluZyBvbiB0aGUKLSAgICAgKiBmaXhlZCBjb25zdHJhaW50cyBwcmVzZW50IGluIHRoZSBlbGVtZW50cyBpbiB0aGlzIHByb3BlcnR5LiAKLSAgICAgKi8KLSAgICBpbnQgaGFzRml4ZWQoKTsKLQotICAgIC8qKiBBcHBsaWVzIHRvIG5vIGVsZW1lbnRzIGZvciB0aGlzIHByb3BlcnR5LiAgU2VlIHtAbGluayAjaGFzTmlsbGFibGV9LCB7QGxpbmsgI2hhc0RlZmF1bHR9LCB7QGxpbmsgI2hhc0ZpeGVkfSAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgTkVWRVIgPSAwOwotICAgIC8qKiBBcHBsaWVzIHRvIHNvbWUsIGJ1dCBub3Qgb3RoZXIgZWxlbWVudHMgZm9yIHRoaXMgcHJvcGVydHkuICBTZWUge0BsaW5rICNoYXNOaWxsYWJsZX0sIHtAbGluayAjaGFzRGVmYXVsdH0sIHtAbGluayAjaGFzRml4ZWR9ICovCi0gICAgc3RhdGljIGZpbmFsIGludCBWQVJJQUJMRSA9IDE7Ci0gICAgLyoqIEFwcGxpZXMgdG8gYWxsIGVsZW1lbnRzIGZvciB0aGlzIHByb3BlcnR5LiAgU2VlIHtAbGluayAjaGFzTmlsbGFibGV9LCB7QGxpbmsgI2hhc0RlZmF1bHR9LCB7QGxpbmsgI2hhc0ZpeGVkfSAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ09OU0lTVEVOVExZID0gMjsKLQotICAgIC8qKiBBbiBYTUwgQmVhbiB0eXBlIHRoYXQgaW5oZXJpdHMgZnJvbSB7QGxpbmsgWG1sT2JqZWN0fS4gU2VlIHtAbGluayAjZ2V0SmF2YVR5cGVDb2RlfS4gKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IFhNTF9PQkpFQ1QgPSAwOwotCi0gICAgLyoqIEphdmEgcHJpbWl0aXZlIHR5cGUgY29kZXMgKGZvciBub24tbnVsbGFibGUgSmF2YSB0eXBlcykgYXJlIGJldHdlZW4gSkFWQV9GSVJTVF9QUklNSVRJVkUgYW5kIEpBVkFfTEFTVF9QUklNSVRJVkUsIGluY2x1c2l2ZS4gKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IEpBVkFfRklSU1RfUFJJTUlUSVZFID0gMTsKLQotICAgIC8qKiBBIEphdmEgYm9vbGVhbi4gU2VlIHtAbGluayAjZ2V0SmF2YVR5cGVDb2RlfS4gKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IEpBVkFfQk9PTEVBTiA9IDE7Ci0gICAgLyoqIEEgSmF2YSBmbG9hdC4gU2VlIHtAbGluayAjZ2V0SmF2YVR5cGVDb2RlfS4gKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IEpBVkFfRkxPQVQgPSAyOwotICAgIC8qKiBBIEphdmEgZG91YmxlLiBTZWUge0BsaW5rICNnZXRKYXZhVHlwZUNvZGV9LiAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgSkFWQV9ET1VCTEUgPSAzOwotICAgIC8qKiBBIEphdmEgYnl0ZS4gU2VlIHtAbGluayAjZ2V0SmF2YVR5cGVDb2RlfS4gKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IEpBVkFfQllURSA9IDQ7Ci0gICAgLyoqIEEgSmF2YSBzaG9ydC4gU2VlIHtAbGluayAjZ2V0SmF2YVR5cGVDb2RlfS4gKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IEpBVkFfU0hPUlQgPSA1OwotICAgIC8qKiBBIEphdmEgaW50LiBTZWUge0BsaW5rICNnZXRKYXZhVHlwZUNvZGV9LiAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgSkFWQV9JTlQgPSA2OwotICAgIC8qKiBBIEphdmEgbG9uZy4gU2VlIHtAbGluayAjZ2V0SmF2YVR5cGVDb2RlfS4gKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IEpBVkFfTE9ORyA9IDc7Ci0KLSAgICAvKiogSmF2YSBwcmltaXRpdmUgdHlwZSBjb2RlcyAoZm9yIG5vbi1udWxsYWJsZSBKYXZhIHR5cGVzKSBhcmUgYmV0d2VlbiBKQVZBX0ZJUlNUX1BSSU1JVElWRSBhbmQgSkFWQV9MQVNUX1BSSU1JVElWRSwgaW5jbHVzaXZlLiAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgSkFWQV9MQVNUX1BSSU1JVElWRSA9IDc7Ci0KLSAgICAvKiogQSB7QGxpbmsgamF2YS5tYXRoLkJpZ0RlY2ltYWx9LiBTZWUge0BsaW5rICNnZXRKYXZhVHlwZUNvZGV9LiAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgSkFWQV9CSUdfREVDSU1BTCA9IDg7Ci0gICAgLyoqIEEge0BsaW5rIGphdmEubWF0aC5CaWdJbnRlZ2VyfS4gU2VlIHtAbGluayAjZ2V0SmF2YVR5cGVDb2RlfS4gKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IEpBVkFfQklHX0lOVEVHRVIgPSA5OwotICAgIC8qKiBBIHtAbGluayBTdHJpbmd9LiBTZWUge0BsaW5rICNnZXRKYXZhVHlwZUNvZGV9LiAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgSkFWQV9TVFJJTkcgPSAxMDsKLSAgICAvKiogQSBieXRlW10uIFNlZSB7QGxpbmsgI2dldEphdmFUeXBlQ29kZX0uICovCi0gICAgc3RhdGljIGZpbmFsIGludCBKQVZBX0JZVEVfQVJSQVkgPSAxMTsKLSAgICAvKiogQSB7QGxpbmsgR0RhdGV9LiBTZWUge0BsaW5rICNnZXRKYXZhVHlwZUNvZGV9LiAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgSkFWQV9HREFURSA9IDEyOwotICAgIC8qKiBBIHtAbGluayBHRHVyYXRpb259LiBTZWUge0BsaW5rICNnZXRKYXZhVHlwZUNvZGV9LiAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgSkFWQV9HRFVSQVRJT04gPSAxMzsKLSAgICAvKiogQSB7QGxpbmsgamF2YS51dGlsLkRhdGV9LiBTZWUge0BsaW5rICNnZXRKYXZhVHlwZUNvZGV9LiAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgSkFWQV9EQVRFID0gMTQ7Ci0gICAgLyoqIEEge0BsaW5rIGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWV9LiBTZWUge0BsaW5rICNnZXRKYXZhVHlwZUNvZGV9LiAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgSkFWQV9RTkFNRSA9IDE1OwotICAgIC8qKiBBIHtAbGluayBqYXZhLnV0aWwuTGlzdH0uIFNlZSB7QGxpbmsgI2dldEphdmFUeXBlQ29kZX0uICovCi0gICAgc3RhdGljIGZpbmFsIGludCBKQVZBX0xJU1QgPSAxNjsKLSAgICAvKiogQSB7QGxpbmsgamF2YS51dGlsLkNhbGVuZGFyfS4gU2VlIHtAbGluayAjZ2V0SmF2YVR5cGVDb2RlfS4gKi8KLSAgICBzdGF0aWMgZmluYWwgaW50IEpBVkFfQ0FMRU5EQVIgPSAxNzsKLQotICAgIC8qKiBBIGdlbmVyYXRlZCB7QGxpbmsgU3RyaW5nRW51bUFic3RyYWN0QmFzZX0gc3ViY2xhc3MuIFNlZSB7QGxpbmsgI2dldEphdmFUeXBlQ29kZX0uICovCi0gICAgc3RhdGljIGZpbmFsIGludCBKQVZBX0VOVU0gPSAxODsKLSAgICAvKiogQSB7QGxpbmsgamF2YS5sYW5nLk9iamVjdH0sIHVzZWQgZm9yIHNvbWUgc2ltcGxlIHR5cGUgdW5pb25zLiBTZWUge0BsaW5rICNnZXRKYXZhVHlwZUNvZGV9LiAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgSkFWQV9PQkpFQ1QgPSAxOTsgLy8gZm9yIHNvbWUgdW5pb25zCi0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IG9yIGZpeGVkIHZhbHVlLAotICAgICAqIGlmIGl0IGlzIGNvbnNpc3RlbnQuIElmIGl0IGlzIG5vdCBjb25zaXN0ZW50LAotICAgICAqIHRoZW4gcmV0dXJucyBudWxsLgotICAgICAqIFNlZSB7QGxpbmsgI2hhc0RlZmF1bHR9IGFuZCB7QGxpbmsgI2hhc0ZpeGVkfS4KLSAgICAgKi8KLSAgICBTdHJpbmcgZ2V0RGVmYXVsdFRleHQoKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IG9yIGZpeGVkIHZhbHVlIGFzIGEgc3Ryb25nbHktdHlwZWQgdmFsdWUsCi0gICAgICogaWYgaXQgaXMgY29uc2lzdGVudC4gSWYgaXQgaXMgbm90IGNvbnNpc3RlbnQsCi0gICAgICogdGhlbiByZXR1cm5zIG51bGwuCi0gICAgICogU2VlIHtAbGluayAjaGFzRGVmYXVsdH0gYW5kIHtAbGluayAjaGFzRml4ZWR9LgotICAgICAqLwotICAgIFhtbEFueVNpbXBsZVR5cGUgZ2V0RGVmYXVsdFZhbHVlKCk7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hU3RyaW5nRW51bUVudHJ5LmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hU3RyaW5nRW51bUVudHJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1OWY1NGYuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVN0cmluZ0VudW1FbnRyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi0vKioKLSAqIERlc2NyaWJlcyBhIGNvZGUtZ2VuZXJhdGVkIHN0cmluZyBlbnVtZXJhdGlvbgotICogCi0gKiBAc2VlIFNjaGVtYVR5cGUjZ2V0U3RyaW5nRW51bUVudHJpZXMKLSAqLyAKLXB1YmxpYyBpbnRlcmZhY2UgU2NoZW1hU3RyaW5nRW51bUVudHJ5Ci17Ci0gICAgLyoqCi0gICAgICogVGhlIGVudW1lcmF0ZWQgc3RyaW5nIHZhbHVlCi0gICAgICovIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nKCk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogQW4gaW50ZWdlciB0byByZXByZXNlbnQgdGhpcyBjaG9pY2UgaW4gdGhlIGVudW1lcmF0aW9uCi0gICAgICovIAotICAgIHB1YmxpYyBpbnQgZ2V0SW50VmFsdWUoKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBBIGNhcGl0YWxpemVkIG5hbWUgdG8gdXNlIGZvciB0aGUgZW51bWVyYXRpb24gY29uc3RhbnQgbmFtZQotICAgICAqLyAKLSAgICBwdWJsaWMgU3RyaW5nIGdldEVudW1OYW1lKCk7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTkxOGYyNy4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTA1ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLS8qKgotICogUmVwcmVzZW50cyBhIHNjaGVtYSB0eXBlLgotICogPHA+Ci0gKiBTY2hlbWFUeXBlIGlzIHRoZSBtZXRhZGF0YSAidHlwZSIgY2xhc3MgZm9yIHtAbGluayBYbWxPYmplY3R9LCBhbmQgaXQgcGxheXMgdGhlCi0gKiBhbmFsb2dvdXMgcm9sZSBmb3Ige0BsaW5rIFhtbE9iamVjdH0gdGhhdCB7QGxpbmsgamF2YS5sYW5nLkNsYXNzfSBwbGF5cyBmb3IKLSAqIHtAbGluayBqYXZhLmxhbmcuT2JqZWN0fS4KLSAqIDxwPgotICogRXZlcnkgWE1MIEJlYW4gY2xhc3MgY29ycmVzcG9uZHMgdG8gYSBzaW5nbGV0b24gU2NoZW1hVHlwZSBvYmplY3QKLSAqIG9idGFpbmFibGUgYnkgQ2xhc3NOYW1lLnR5cGUgKGUuZy4sIHtAbGluayBYbWxOb25Qb3NpdGl2ZUludGVnZXIjdHlwZX0pLCBhbmQKLSAqIGV2ZXJ5IFhNTCBCZWFuIGluc3RhbmNlIGhhcyBhbiBhY3R1YWwgU2NoZW1hVHlwZSwgb2J0YWluYWJsZSBieQotICoge0BsaW5rIFhtbE9iamVjdCNzY2hlbWFUeXBlfS4gIFRoZSBDbGFzc05hbWUudHlwZSBhbmQgc2NoZW1hVHlwZSgpIG1lY2hhbmlzbXMgYXJlCi0gKiBhbmFsb2dvdXMgdG8gdGhlIG9yZGluYXJ5IEphdmEgQ2xhc3NOYW1lLmNsYXNzIGFuZCBvYmouZ2V0Q2xhc3MoKSBtZWNoYW5pc21zLgotICogPHA+Ci0gKiBBbGwgc2NoZW1hIHR5cGVzIGFyZSByZXByZXNlbnRlZCBieSBhIFNjaGVtYVR5cGUsIHRoaXMgaW5jbHVkZXMgYWxsIHR5cGVzCi0gKiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleSBhcmUgYnVpbHQtaW4gb3IgdXNlci1kZWZpbmVkLCBjb21waWxlZCBvcgotICogdW5jb21waWxlZCwgc2ltcGxlIG9yIGNvbXBsZXguCi0gKiA8cD4KLSAqIEluIGFkZGl0aW9uLCBhIGNvbXBpbGVkIFhNTCBCZWFuIHR5cGUgc3lzdGVtIGluY2x1ZGVzIHNwZWNpYWwgImRvY3VtZW50IiBzY2hlbWEgdHlwZXMKLSAqIGVhY2ggcmVwcmVzZW50aW5nIGEgZG9jdW1lbnQgY29udGFpbmluZyBub3RoaW5nIGJ1dCBhIHNpbmdsZSBlbGVtZW50IGZvciBlYWNoCi0gKiBnbG9iYWwgZWxlbWVudCwgYW5kIHNwZWNpYWwgImF0dHJpYnV0ZSIgc2NoZW1hIHR5cGVzIGVhY2ggcmVwcmVzZW50aW5nCi0gKiBhIGZyYWdtZW50IGNvbnRhaW5pbmcgbm90aGluZyBidXQgYSBzaW5nbGUgZ2xvYmFsIGF0dHJpYnV0ZSBmb3IgZ2xvYmFsCi0gKiBhdHRyaWJ1dGUuCi0gKiA8cD4KLSAqIERvIG5vdCBjb25mdXNlIFNjaGVtYSBUeXBlcyB3aXRoIG90aGVyIHR5cGVzIG9mIFNjaGVtYSBDb21wb25lbnRzIHN1Y2ggYXMKLSAqIHtAbGluayBTY2hlbWFHbG9iYWxFbGVtZW50IEdsb2JhbCBFbGVtZW50c30sIHtAbGluayBTY2hlbWFHbG9iYWxBdHRyaWJ1dGUgR2xvYmFsIEF0dHJpYnV0ZXN9LAotICoge0BsaW5rIFNjaGVtYU1vZGVsR3JvdXAgTmFtZWQgTW9kZWwgR3JvdXBzfSwgb3Ige0BsaW5rIFNjaGVtYUF0dHJpYnV0ZUdyb3VwIEF0dHJpYnV0ZSBHcm91cHN9LgotICogU2NoZW1hVHlwZSByZXByZXNlbnRzIGEgVHlwZSBjb21wb25lbnQsIG5vdCBhbnkgb2YgdGhlIG90aGVyIGtpbmRzIG9mIGNvbXBvbmVudHMuCi0gKiBUaGVyZSBhcmUgZGlmZmVyZW50IGtpbmRzIG9mIG1ldGFkYXRhIG9iamVjdHMgZm9yIHRoZSBkaWZmZXJlbnQgU2NoZW1hIGNvbXBvbmVudHMuIAotICogPHA+Ci0gKiBUaGUgc3BhY2Ugb2YgU2NoZW1hVHlwZXMgaXMgZGl2aWRlZCBhcyBmb2xsb3dzOgotICogCi0gKiA8dWw+Ci0gKiA8bGk+Rmlyc3QsIHRoZXJlIGlzIHRoZSB1bml2ZXJzYWwgYmFzZSB0eXBlIGFuZCB0aGUgdW5pdmVyc2FsCi0gKiAgICAgc3VidHlwZS4gIFRoZXNlIGFyZSB7QGxpbmsgWG1sT2JqZWN0I3R5cGV9Ci0gKiAgICAgKGNvcnJlc3BvbmRpbmcgdG8geHM6YW55VHlwZSkgYW5kIHtAbGluayBYbWxCZWFucyNOT19UWVBFfSwKLSAqICAgICByZXNwZWN0aXZlbHkuICBUaGUgZmlyc3QgdHlwZSBpcyBhIGJhc2UgdHlwZSBvZiBhbGwgb3RoZXIKLSAqICAgICB0eXBlcy4gIFRoZSBvdGhlciB0eXBlIGluZGljYXRlcyB0aGUgYWJzZW5jZSBvZiB0eXBlIGluZm9ybWF0aW9uCi0gKiAgICAgYW5kLCBhdCBsZWFzdCBpbiBzZXQtdGhlb3JldGljIHRlcm1zLCBpcyBhIHN1YnR5cGUgb2YgYWxsIG90aGVyIHR5cGVzLgotICogPGxpPlRoZXJlIGlzIGFub3RoZXIgdW5pdmVyc2FsIGJhc2UgdHlwZSB0aGF0IGlzIHRoZSBiYXNlIHR5cGUKLSAqICAgICBmb3IgYWxsIHNpbXBsZSB0eXBlcy4gIFRoaXMgaXMgdGhlIHtAbGluayBYbWxBbnlTaW1wbGVUeXBlI3R5cGV9LAotICogICAgIGNvcnJlc3BvbmRpbmcgdG8geHM6YW55U2ltcGxlVHlwZS4gICBPbmx5IFhtbE9iamVjdC50eXBlIGFuZAotICogICAgIFhtbEFueVNpbXBsZVR5cGUudHlwZSByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4gZm9yIHtAbGluayAjaXNVUlR5cGV9LCBhbmQKLSAqICAgICBvbmx5IFhtbEJlYW5zLk5PX1RZUEUgcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBmb3Ige0BsaW5rICNpc05vVHlwZX0uCi0gKiA8bGk+VGhlIHR3byAic3BlY2lhbCIga2luZHMgb2YgdHlwZXMgdGhhdCBhcmUgZ2VuZXJhdGVkIHRoYXQKLSAqICAgICBkbyBub3QgZm9ybWFsbHkgZXhpc3QgaW4gdGhlIGFjdHVhbCBTY2hlbWEgc3BlY2lmaWNhdGlvbiBhcmUKLSAqICAgICBkb2N1bWVudCB0eXBlcyBhbmQgZ2xvYmFsIGF0dHJpYnV0ZSB0eXBlcyAoY29ycmVzcG9uZGluZyB0bwotICogICAgIGRvY3VtZW50cyB0aGF0IGNvbnRhaW4gYSBnbG9iYWwgZWxlbWVudCwgb3IgZnJhZ21lbnRzIHRoYXQKLSAqICAgICBjb250YWluIGEgZ2xvYmFsIGF0dHJpYnV0ZSkuICBUaGV5IGNhbiBiZSBkZXRlY3RlZCB1c2luZwotICogICAgIHtAbGluayAjaXNEb2N1bWVudFR5cGV9IGFuZCB7QGxpbmsgI2lzQXR0cmlidXRlVHlwZX0uIE90aGVyCi0gKiAgICAgdGhhbiB0aGVpciBhbm9ueW1pdHkgKGxhY2sgb2YgYSB0eXBlIG5hbWUpIGFuZCB0aGVpciBhcHBlYXJhbmNlCi0gKiAgICAgb25seSBhdCB0aGUgcm9vdCBvZiBhbiBpbnN0YW5jZSwgdGhleSBhcmUgb3RoZXJ3aXNlIGp1c3QgbGlrZQotICogICAgIG9yZGluYXJ5IGNvbXBsZXggdHlwZXMuCi0gKiA8bGk+U2ltcGxlIHR5cGVzIGNhbiBiZSBkZXRlY3RlZCB1c2luZyB7QGxpbmsgI2lzU2ltcGxlVHlwZX0uCi0gKiAgICAgQ29tcGxleCB0eXBlcyBhcmUgY29uc2RlcmVkIHRvIGJlIGFsbCB0aGUgdHlwZXMgdGhhdCBhcmUKLSAqICAgICBub3Qgc2ltcGxlLgotICogPGxpPlNpbXBsZSB0eXBlcyBhcmUgZGl2aWRlZCBpbnRvIHRocmVlIHZhcmlldGllczogYXRvbWljIHR5cGVzLAotICogICAgIGxpc3QgdHlwZXMsIGFuZCB1bmlvbiB0eXBlcy4gIFdoaWNoIHZhcmlldHkgb2Ygc2ltcGxlIHR5cGUKLSAqICAgICB5b3UgaGF2ZSBjYW4gYmUgZGlzY292ZXJkIHVzaW5nIHtAbGluayAjZ2V0U2ltcGxlVmFyaWV0eX0uCi0gKiAgICAgSXQgd2lsbCByZXR1cm4gZWl0aGVyIHtAbGluayAjQVRPTUlDfSwge0BsaW5rICNMSVNUfSwgb3IKLSAqICAgICB7QGxpbmsgI1VOSU9OfS4KLSAqIDxsaT5BbiB7QGxpbmsgI0FUT01JQ30gc2ltcGxlIHR5cGUgaXMgYWx3YXlzIGJhc2VkIG9uIG9uZSBvZiB0aGUKLSAqICAgICAyMCBidWlsdC1pbiBwcmltaXRpdmUgc2NoZW1hIHR5cGVzLiAgWW91IGNhbiBkZXRlcm1pbmUKLSAqICAgICB0aGUgdW5kZXJseWluZyBwcmltaXRpdmUgdHlwZSBmb3IgYW4gYXRvbWljIHNpbXBsZSB0eXBlCi0gKiAgICAgYnkgY2FsbGluZyB7QGxpbmsgI2dldFByaW1pdGl2ZVR5cGV9LiAgQW4gYXRvbWljIHR5cGUKLSAqICAgICBtYXkgYWRkIGZhY2V0IHJlc3RyaWN0aW9ucyBvbiB0b3Agb2YgdGhlIHByaW1pdGl2ZSB0eXBlLAotICogICAgIGFuZCB0aGVzZSBmYWNldHMgY2FuIGJlIGV4cGxvcmVkIHVzaW5nIHtAbGluayAjZ2V0RmFjZXR9LAotICogICAgIHtAbGluayAjZ2V0V2hpdGVTcGFjZVJ1bGV9LCB7QGxpbmsgI21hdGNoUGF0dGVybkZhY2V0fSwKLSAqICAgICB7QGxpbmsgI2dldEVudW1lcmF0aW9uVmFsdWVzfSwgYW5kIHJlbGF0ZWQgbWV0aG9kcy4KLSAqIDxsaT5BIHtAbGluayAjTElTVH0gc2ltcGxlIHR5cGUgaXMgYWx3YXlzIGJhc2VkIG9uIGFub3RoZXIgbm9uLWxpc3QKLSAqICAgICBzaW1wbGUgdHlwZS4gIFRoZSB1bmRlcmx5aW5nIGxpc3QgaXRlbSB0eXBlIGNhbiBiZSBvYnRhaW5lZAotICogICAgIGJ5IHVzaW5nIHtAbGluayAjZ2V0TGlzdEl0ZW1UeXBlfS4KLSAqIDxsaT5BIHtAbGluayAjVU5JT059IHNpbXBsZSB0eXBlIGlzIGFsd2F5cyBjb21wb3NlZCBvdXQgb2YgYSBudW1iZXIgb2YKLSAqICAgICBvdGhlciBzaW1wbGUgdHlwZXMuICBUaGUgZGlyZWN0IG1lbWJlcnMgb2YgdGhlIHVuaW9uIGNhbgotICogICAgIGJlIG9idGFpbmVkIGJ5IHtAbGluayAjZ2V0VW5pb25NZW1iZXJUeXBlc30uICBXaGVuIHVuaW9ucwotICogICAgIGNvbnNpc3Qgb2Ygb3RoZXIgdW5pb25zLCBpdCBpcyB1c2VmdWwgdG8ga25vdyB1c2VmdWwgdG8ga25vdwotICogICAgIHRoZSAibGVhdmVzIG9mIHRoZSB1bmlvbiB0cmVlIiwgc28gdGhlCi0gKiAgICAgc2V0IG9mIG5vbi11bmlvbiB0eXBlcyBtYWtpbmcgdXAgdGhlIHVuaW9uIGNhbiBiZSBvYnRhaW5lZAotICogICAgIGJ5IHtAbGluayAjZ2V0VW5pb25Db25zdGl0dWVudFR5cGVzfS4gIFRoZSBjbG9zdXJlIG9mIHRoZQotICogICAgIGVudGlyZSAidW5pb24gdHJlZSIgaXMge0BsaW5rICNnZXRVbmlvblN1YlR5cGVzfSAodGhpcyBpbmNsdWRlcwotICogICAgIHRoZSB0eXBlIGl0c2VsZikuICBGb3IKLSAqICAgICBzaW1wbGUgdW5pb25zIHRoYXQgZG8gbm90IGNvbnNpc3Qgb2Ygb3RoZXIgdW5pb25zLCBhbGwgdGhyZWUKLSAqICAgICBvZiB0aGVzZSBzZXRzIGFyZSB0aGUgc2FtZS4KLSAqIDxsaT5Db21wbGV4IHR5cGVzIGhhdmUgbmVzdGVkIHN0cnVjdHVyZS4gIFRoZXkgYXJlIGRpdmlkZWQgaW50bwotICogICAgIGZvdXIgY29udGVudCB0eXBlczogZW1wdHkgY29udGVudCwgc2ltcGxlIGNvbnRlbnQsIGVsZW1lbnQtb25seQotICogICAgIGNvbnRlbnQsIGFuZCBtaXhlZCBjb250ZW50LiAgQWxsIGtpbmRzIG9mIGNvbXBsZXggdHlwZXMgbWF5Ci0gKiAgICAgaGF2ZSBhdHRyaWJ1dGVzLiAgVGhlIGNvbnRlbnQgdHlwZSBmb3IgYSBjb21wbGV4IHR5cGUgY2FuCi0gKiAgICAgYmUgZGVybWluZWQgdXNpbmcge0BsaW5rICNnZXRDb250ZW50VHlwZX0uICBUaGlzIHdpbGwgcmV0dXJuCi0gKiAgICAge0BsaW5rICNFTVBUWV9DT05URU5UfSwge0BsaW5rICNTSU1QTEVfQ09OVEVOVH0sCi0gKiAgICAge0BsaW5rICNFTEVNRU5UX0NPTlRFTlR9LCBvciB7QGxpbmsgI01JWEVEX0NPTlRFTlR9LgotICogPGxpPklmIGEgY29tcGxleCB0eXBlIGhhcyB7QGxpbmsgI0VNUFRZX0NPTlRFTlR9LCB0aGUgY29udGVudCBtb2RlbCB3aWxsIGJlIG51bGwuCi0gKiA8bGk+SWYgYSBjb21wbGV4IHR5cGUgaGFzIHtAbGluayAjU0lNUExFX0NPTlRFTlR9LCB0aGVuIGl0IHdpbGwgZXh0ZW5kIHRoZQotICogICAgIHNpbXBsZSB0eXBlIHRoYXQgZGVzY3JpYmVzIHRoZSBjb250ZW50LiAgSW4gYWRkaXRpb24sIHRoZSB0eXBlCi0gKiAgICAgbWF5IGltcG9zZSBhZGRpdGlvbmFsIHNpbXBsZSB0eXBlIGZhY2V0IHJlc3RyaWN0aW9uczsgdGhlc2UgY2FuIAotICogICAgIGJlIGRldGVybWluZWQgaW4gdGhlIHNhbWUgd2F5IHRoZXkgYXJlIGZvciBhIHNpbXBsZSB0eXBlLgotICogPGxpPklmIGEgY29tcGxleCB0eXBlIGhhcyB7QGxpbmsgI0VMRU1FTlRfQ09OVEVOVH0gb3Ige0BsaW5rICNNSVhFRF9DT05URU5UfSwgdGhlbgotICogICAgIHRoZSBkZXRhaWxlZCBjb250ZW50IG1vZGVsIGNhbiBiZSBkZXRlcm1pbmVkIGJ5IGV4YW1pbmluZwotICogICAgIHRoZSBwYXJ0aWNsZSB0cmVlICh3aGljaCBtYXkgYmUgbnVsbCBmb3IgTUlYRURfQ09OVEVOVCkuCi0gKiAgICAgVGhlIHBhcnRpY2xlIHRyZWUgY2FuIGJlIG9idGFpbmVkIHZpYSB7QGxpbmsgI2dldENvbnRlbnRNb2RlbH0uCi0gKiA8bGk+V2hlbiB3b3JraW5nIHdpdGggYSBjb21wbGV4IHR5cGUsIG1vc3QgdXNlcnMgd2lsbCBmaW5kIGl0Ci0gKiAgICAgc3VmZmljaWVudCB0byBkaXNjb3ZlciB0aGUgc3VtbWFyaXplZCBzaGFwZSBvZiB0aGUgY29udGVudCBtb2RlbAotICogICAgIGFuZCBhdHRyaWJ1dGUgbW9kZWwgdXNpbmcge0BsaW5rICNnZXRFbGVtZW50UHJvcGVydGllc30sCi0gKiAgICAge0BsaW5rICNnZXRBdHRyaWJ1dGVQcm9wZXJ0aWVzfSwgYW5kIHJlbGF0ZWQgbWV0aG9kcyByYXRoZXIgdGhhbgotICogICAgIGV4YW1pbmluZyB0aGUgcGFydGljbGUgdHJlZSBhbmQgYXR0cmlidXRlIG1vZGVsIGRpcmVjdGx5LgotICogPC91bD4KLSAqIAotICogQHNlZSBTY2hlbWFUeXBlTG9hZGVyCi0gKiBAc2VlIFhtbE9iamVjdCNzY2hlbWFUeXBlCi0gKiBAc2VlIFNpbXBsZVZhbHVlI2luc3RhbmNlVHlwZQotICovIAotcHVibGljIGludGVyZmFjZSBTY2hlbWFUeXBlIGV4dGVuZHMgU2NoZW1hQ29tcG9uZW50Ci17Ci0gICAgLyoqCi0gICAgICogVGhlIG5hbWUgdXNlZCB0byBkZXNjcmliZSB0aGUgdHlwZSBpbiB0aGUgc2NoZW1hLgotICAgICAqIE51bGwgaWYgdGhlIHR5cGUgaXMgYW5vbnltb3VzIChuZXN0ZWQpLCBvciBpZiBpdCBpcyBhIGRvY3VtZW50IHR5cGUuCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IFFOYW1lIGdldE5hbWUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBwYXJlbnQgc2NoZW1hIGVsZW1lbnQuCi0gICAgICogTnVsbCBmb3IgdG9wLWxldmVsIChuYW1lZCkgdHlwZXMgYW5kIGRvY3VtZW50IHR5cGVzLgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBTY2hlbWFGaWVsZCBnZXRDb250YWluZXJGaWVsZCgpOwotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGlzIGlzIGEgZG9jdW1lbnQgdHlwZS4KLSAgICAgKiA8cD4KLSAgICAgKiBEb2N1bWVudCB0eXBlcyBhcmUgZ2VuZXJhdGVkIGZvciBldmVyeSBnbG9iYWwgZWxlbWVudC4gQSBkb2N1bWVudAotICAgICAqIHR5cGUgaXMgYW4gdW5uYW1lZCBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyBleGFjdGx5IG9uZSBlbGVtZW50OgotICAgICAqIHdlIGRlZmluZSB0aGVzZSB0eXBlcywgYmVjYXVzZSB0aGV5IGFyZSB0aGUgdHlwZXMgb2YgdGhlICJkb2N1bWVudHMiCi0gICAgICogd2hpY2ggY29udGFpbiB0aGUgZGVmaW5lZCBnbG9iYWwgZWxlbWVudHMsIGFuZCB0aGV5IGFsbCB0dXJuIGludG8KLSAgICAgKiBKYXZhIHR5cGVzLiAoTmFtZWQgRWxlbWVudG5hbWVEb2N1bWVudC4pCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNEb2N1bWVudFR5cGUoKTsKLQotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhpcyBpcyBhIGF0dHJpYnV0ZSB0eXBlLgotICAgICAqIDxwPgotICAgICAqIEF0dHJpYnV0ZSB0eXBlcyBhcmUgZ2VuZXJhdGVkIGZvciBldmVyeSBnbG9iYWwgYXR0cmlidXRlLiBBbiBhdHRyaWJ1dGUKLSAgICAgKiB0eXBlIGlzIGFuIHVubmFtZWQgY29tcGxleCB0eXBlIHRoYXQgY29udGFpbnMgZXhhY3RseSBvbmUgYXR0cmlidXRlOgotICAgICAqIHdlIGRlZmluZSB0aGVzZSB0eXBlcywgYmVjYXVzZSB0aGV5IGFyZSB0aGUgdHlwZXMgb2YgdGhlICJhdHRyaWJ1dGUgZG9jdW1lbnRzIgotICAgICAqIHdoaWNoIGNvbnRhaW4gdGhlIGRlZmluZWQgZ2xvYmFsIGF0dHJpYnV0ZSwgYW5kIHRoZXkgYWxsIHR1cm4gaW50bwotICAgICAqIEphdmEgdHlwZXMuIChOYW1lZCBBdHRyaWJ1dGVuYW1lQXR0cmlidXRlLikKLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0F0dHJpYnV0ZVR5cGUoKTsKLQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgZG9jdW1lbnQgZWxlbWVudCBuYW1lIGlmIHRoaXMgaXMgYSBkb2N1bWVudCB0eXBlLAotICAgICAqIG9yIG51bGwgb3RoZXJ3aXNlLgotICAgICAqLwotICAgIHB1YmxpYyBRTmFtZSBnZXREb2N1bWVudEVsZW1lbnROYW1lKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBhdHRyaWJ1dGUgcW5hbWUgaWYgdGhpcyBpcyBhIGF0dHJpYnV0ZSB0eXBlLAotICAgICAqIG9yIG51bGwgb3RoZXJ3aXNlLgotICAgICAqLwotICAgIHB1YmxpYyBRTmFtZSBnZXRBdHRyaWJ1dGVUeXBlQXR0cmlidXRlTmFtZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIG91dGVyIHNjaGVtYSB0eXBlLgotICAgICAqIE51bGwgZm9yIHRvcC1sZXZlbCAobmFtZWQpIHR5cGVzLgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBTY2hlbWFUeXBlIGdldE91dGVyVHlwZSgpOwotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGlzIGFub255bW91cyB0eXBlIGhhcyBubyBjb3JyZXNwb25kaW5nIEphdmEgdHlwZS4gVHJ1ZSBmb3IKLSAgICAgKiBhbm9ueW1vdXMgdHlwZXMgbmVzdGVkIHdpdGhpbiBzaW1wbGUgdHlwZSByZXN0cmljdGlvbnMuCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNTa2lwcGVkQW5vbnltb3VzVHlwZSgpOwotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGlzIHNjaGVtYSB0eXBlIHdhcyBjb21waWxlZCB0byBoYXZlIGEgY29ycmVzcG9uZGluZwotICAgICAqIEphdmEgY2xhc3MuCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNDb21waWxlZCgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIGZ1bGx5LXF1YWxpZmllZCBKYXZhIHR5cGUgbmFtZSBvZiB0aGUgY2xhc3MuCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRGdWxsSmF2YU5hbWUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBzaG9ydCB1bnF1YWxmaWllZCBKYXZhIG5hbWUgZm9yIHRoZSBjbGFzcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nIGdldFNob3J0SmF2YU5hbWUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBmdWxseS1xdWFsaWZpZWQgSmF2YSB0eXBlIG5hbWUgb2YgdGhlIGltcGxlbWVudGF0aW9uIGNsYXNzLgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0RnVsbEphdmFJbXBsTmFtZSgpOwotCi0gICAgLyoqCi0gICAgICogVGhlIHNob3J0IHVucXVhbGZpaWVkIEphdmEgbmFtZSBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGNsYXNzLgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0U2hvcnRKYXZhSW1wbE5hbWUoKTsKLQotICAgIC8qKgotICAgICAqIFRoZSBKYXZhIGNsYXNzIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBzY2hlbWEgdHlwZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgQ2xhc3MgZ2V0SmF2YUNsYXNzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgSmF2YSBjbGFzcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBlbnVtZXJhdGlvbiB0eXBlIGZvciB0aGlzIHNjaGVtYSB0eXBlLAotICAgICAqIGlmIGFwcGxpY2FibGUgKG9yIG51bGwgaWYgbm90IGFuIGVudW1lcmF0aW9uKS4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgQ2xhc3MgZ2V0RW51bUphdmFDbGFzcygpOwotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGUgWHNkIHR5cGUgaXMgYW5vbnltb3VzIChpLmUuLCBub3QgdG9wLWxldmVsKS4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc0Fub255bW91c1R5cGUoKTsKLQotICAgIC8qKgotICAgICAqIFRydWUgZm9yIGFueSBvZiB0aGUgNDArIGJ1aWx0LWluIHR5cGVzLgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzQnVpbHRpblR5cGUoKTsKLQotICAgIC8qKgotICAgICAqIFRydWUgZm9yIHRoZSBhbnlTaW1wbGVUeXBlIGFuZCBhbnkgcmVzdHJpY3Rpb25zL3VuaW9ucy9saXN0cy4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc1NpbXBsZVR5cGUoKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYmFzZSByZXN0cmljdGlvbiBvciBleHRlbnNpb24gdHlwZS4gVW5pb25zIGFuZCBsaXN0cwotICAgICAqIHJldHVybiB0aGUgYW55U2ltcGxlVHlwZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgU2NoZW1hVHlwZSBnZXRCYXNlVHlwZSgpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBjb21tb24gYmFzZSB0eXBlIHdpdGggdGhlIGdpdmVuIHR5cGUuIFRoZSByZXR1cm5lZAotICAgICAqIHR5cGUgaXMgdGhlIG1vc3Qgc3BlY2lmaWMgZGVjbGFyZWQgYmFzZSB0eXBlIG9mIGJvdGggdHlwZXMuCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IFNjaGVtYVR5cGUgZ2V0Q29tbW9uQmFzZVR5cGUoU2NoZW1hVHlwZSB0eXBlKTsKLQotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhlIHNwZWNpZmllZCB0eXBlIGRlcml2ZXMgZnJvbSB0aGlzIHR5cGUgKG9yIGlmCi0gICAgICogaXQgaXMgdGhlIHNhbWUgdHlwZSkuCi0gICAgICoKLSAgICAgKiBOb3RlIHRoYXQgWG1sT2JqZWN0LnR5cGUgKHRoZSBhbnlUeXBlKSBpcyBhc3NpZ25hYmxlCi0gICAgICogZnJvbSBhbGwgdHlwZSwgYW5kIHRoZSBYbWxCZWFucy5ub1R5cGUgKHRoZSBhYnNlbmNlIG9mCi0gICAgICogYSB0eXBlKSBpcyBhc3NpZ25hYmxlIHRvIGFsbCB0eXBlcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc0Fzc2lnbmFibGVGcm9tKFNjaGVtYVR5cGUgdHlwZSk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGFuIGludGVnZXIgZm9yIHRoZSBkZXJpdmF0aW9uIHR5cGUsIGVpdGhlciAKLSAgICAgKiB7QGxpbmsgI0RUX0VYVEVOU0lPTn0sIHtAbGluayAjRFRfUkVTVFJJQ1RJT059LCB7QGxpbmsgI0RUX05PVF9ERVJJVkVEfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGdldERlcml2YXRpb25UeXBlKCk7Ci0gICAgCi0gICAgLyoqIE5vdCBkZXJpdmVkLiAgVHJ1ZSBmb3IgWG1sT2JqZWN0LnR5cGUgb25seS4gU2VlIHtAbGluayAjZ2V0RGVyaXZhdGlvblR5cGV9LiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERUX05PVF9ERVJJVkVEID0gMDsKLSAgICAvKiogRGVyaXZlZCBieSByZXN0cmljdGlvbi4gU2VlIHtAbGluayAjZ2V0RGVyaXZhdGlvblR5cGV9LiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IERUX1JFU1RSSUNUSU9OID0gMTsKLSAgICAvKiogRGVyaXZlZCBieSBleHRlbnNpb24uIFNlZSB7QGxpbmsgI2dldERlcml2YXRpb25UeXBlfS4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBEVF9FWFRFTlNJT04gPSAyOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhbiBpbnRlZ2VyIGZvciBidWlsdGluIHR5cGVzIHRoYXQgY2FuIGJlIHVzZWQKLSAgICAgKiBmb3IgcXVpY2sgY29tcGFyaXNvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldEJ1aWx0aW5UeXBlQ29kZSgpOwotCi0gICAgLyoqIE5vdCBhIGJ1aWx0aW4gdHlwZSAqLyAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCVENfTk9UX0JVSUxUSU4gPSAwOwotICAgIC8qKiB4czphbnlUeXBlLCBha2Ege0BsaW5rIFhtbE9iamVjdCN0eXBlfSAqLyAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCVENfQU5ZX1RZUEUgPSAxOwotICAgIAotICAgIC8qKiBUaGUgcHJpbWl0aXZlIHR5cGVzIGhhdmUgY29kZXMgYmV0d2VlbiBCVENfRklSU1RfUFJJTUlUSVZFIGFuZCBCVENfTEFTVF9QUklNSVRJVkUgaW5jbHVzaXZlICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQlRDX0ZJUlNUX1BSSU1JVElWRSA9IDI7Ci0KLSAgICAvKiogeHM6YW55U2ltcGxlVHlwZSwgYWthIHtAbGluayBYbWxBbnlTaW1wbGVUeXBlI3R5cGV9ICovIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJUQ19BTllfU0lNUExFID0gMjsKLQotICAgIC8qKiB4czpib29sZWFuLCBha2Ege0BsaW5rIFhtbEJvb2xlYW4jdHlwZX0gKi8gCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQlRDX0JPT0xFQU4gPSAzOwotICAgIC8qKiB4czpiYXNlNjRCaW5hcnksIGFrYSB7QGxpbmsgWG1sQmFzZTY0QmluYXJ5I3R5cGV9ICovIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJUQ19CQVNFXzY0X0JJTkFSWSA9IDQ7Ci0gICAgLyoqIHhzOmhleEJpbmFyeSwgYWthIHtAbGluayBYbWxCYXNlNjRCaW5hcnkjdHlwZX0gKi8gCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQlRDX0hFWF9CSU5BUlkgPSA1OwotICAgIC8qKiB4czphbnlVUkksIGFrYSB7QGxpbmsgWG1sQW55VVJJI3R5cGV9ICovIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJUQ19BTllfVVJJID0gNjsKLSAgICAvKiogeHM6UU5hbWUsIGFrYSB7QGxpbmsgWG1sUU5hbWUjdHlwZX0gKi8gCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQlRDX1FOQU1FID0gNzsKLSAgICAvKiogeHM6Tk9UQVRJT04sIGFrYSB7QGxpbmsgWG1sTk9UQVRJT04jdHlwZX0gKi8gCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQlRDX05PVEFUSU9OID0gODsKLSAgICAvKiogeHM6ZmxvYXQsIGFrYSB7QGxpbmsgWG1sRmxvYXQjdHlwZX0gKi8gCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQlRDX0ZMT0FUID0gOTsKLSAgICAvKiogeHM6ZG91YmxlLCBha2Ege0BsaW5rIFhtbERvdWJsZSN0eXBlfSAqLyAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCVENfRE9VQkxFID0gMTA7Ci0gICAgLyoqIHhzOmRlY2ltYWwsIGFrYSB7QGxpbmsgWG1sRGVjaW1hbCN0eXBlfSAqLyAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCVENfREVDSU1BTCA9IDExOwotICAgIC8qKiB4czpzdHJpbmcsIGFrYSB7QGxpbmsgWG1sU3RyaW5nI3R5cGV9ICovIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJUQ19TVFJJTkcgPSAxMjsKLQotICAgIC8qKiB4czpkdXJhdGlvbiwgYWthIHtAbGluayBYbWxEdXJhdGlvbiN0eXBlfSAqLyAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCVENfRFVSQVRJT04gPSAxMzsKLSAgICAvKiogeHM6ZGF0ZVRpbWUsIGFrYSB7QGxpbmsgWG1sRGF0ZVRpbWUjdHlwZX0gKi8gCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQlRDX0RBVEVfVElNRSA9IDE0OwotICAgIC8qKiB4czp0aW1lLCBha2Ege0BsaW5rIFhtbFRpbWUjdHlwZX0gKi8gCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQlRDX1RJTUUgPSAxNTsKLSAgICAvKiogeHM6ZGF0ZSwgYWthIHtAbGluayBYbWxEYXRlI3R5cGV9ICovIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJUQ19EQVRFID0gMTY7Ci0gICAgLyoqIHhzOmdZZWFyTW9udGgsIGFrYSB7QGxpbmsgWG1sR1llYXJNb250aCN0eXBlfSAqLyAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCVENfR19ZRUFSX01PTlRIID0gMTc7Ci0gICAgLyoqIHhzOmdZZWFyLCBha2Ege0BsaW5rIFhtbEdZZWFyI3R5cGV9ICovIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJUQ19HX1lFQVIgPSAxODsKLSAgICAvKiogeHM6Z01vbnRoRGF5LCBha2Ege0BsaW5rIFhtbEdNb250aERheSN0eXBlfSAqLyAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCVENfR19NT05USF9EQVkgPSAxOTsKLSAgICAvKiogeHM6Z0RheSwgYWthIHtAbGluayBYbWxHRGF5I3R5cGV9ICovIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJUQ19HX0RBWSA9IDIwOwotICAgIC8qKiB4czpnTW9udGgsIGFrYSB7QGxpbmsgWG1sR01vbnRoI3R5cGV9ICovIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJUQ19HX01PTlRIID0gMjE7Ci0KLSAgICAvKiogVGhlIHByaW1pdGl2ZSB0eXBlcyBoYXZlIGNvZGVzIGJldHdlZW4gQlRDX0ZJUlNUX1BSSU1JVElWRSBhbmQgQlRDX0xBU1RfUFJJTUlUSVZFIGluY2x1c2l2ZSAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJUQ19MQVNUX1BSSU1JVElWRSA9IDIxOwotCi0gICAgLy8gZGVyaXZlZCBudW1lcmljcwotICAgIC8qKiB4czppbnRlZ2VyLCBha2Ege0BsaW5rIFhtbEludGVnZXIjdHlwZX0gKi8gCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQlRDX0lOVEVHRVIgPSAyMjsKLSAgICAvKiogeHM6bG9uZywgYWthIHtAbGluayBYbWxMb25nI3R5cGV9ICovIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJUQ19MT05HID0gMjM7Ci0gICAgLyoqIHhzOmludCwgYWthIHtAbGluayBYbWxJbnQjdHlwZX0gKi8gCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQlRDX0lOVCA9IDI0OwotICAgIC8qKiB4czpzaG9ydCwgYWthIHtAbGluayBYbWxTaG9ydCN0eXBlfSAqLyAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCVENfU0hPUlQgPSAyNTsKLSAgICAvKiogeHM6Ynl0ZSwgYWthIHtAbGluayBYbWxCeXRlI3R5cGV9ICovIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJUQ19CWVRFID0gMjY7Ci0gICAgLyoqIHhzOm5vblBvc2l0aXZlSW50ZWdlciwgYWthIHtAbGluayBYbWxOb25Qb3NpdGl2ZUludGVnZXIjdHlwZX0gKi8gCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQlRDX05PTl9QT1NJVElWRV9JTlRFR0VSID0gMjc7Ci0gICAgLyoqIHhzOk5lZ2F0aXZlSW50ZWdlciwgYWthIHtAbGluayBYbWxOZWdhdGl2ZUludGVnZXIjdHlwZX0gKi8gCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQlRDX05FR0FUSVZFX0lOVEVHRVIgPSAyODsKLSAgICAvKiogeHM6bm9uTmVnYXRpdmVJbnRlZ2VyLCBha2Ege0BsaW5rIFhtbE5vbk5lZ2F0aXZlSW50ZWdlciN0eXBlfSAqLyAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCVENfTk9OX05FR0FUSVZFX0lOVEVHRVIgPSAyOTsKLSAgICAvKiogeHM6cG9zaXRpdmVJbnRlZ2VyLCBha2Ege0BsaW5rIFhtbFBvc2l0aXZlSW50ZWdlciN0eXBlfSAqLyAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCVENfUE9TSVRJVkVfSU5URUdFUiA9IDMwOwotICAgIC8qKiB4czp1bnNpZ25lZExvbmcsIGFrYSB7QGxpbmsgWG1sVW5zaWduZWRMb25nI3R5cGV9ICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQlRDX1VOU0lHTkVEX0xPTkcgPSAzMTsKLSAgICAvKiogeHM6dW5zaWduZWRJbnQsIGFrYSB7QGxpbmsgWG1sVW5zaWduZWRJbnQjdHlwZX0gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCVENfVU5TSUdORURfSU5UID0gMzI7Ci0gICAgLyoqIHhzOnVuc2lnbmVkU2hvcnQsIGFrYSB7QGxpbmsgWG1sVW5zaWduZWRTaG9ydCN0eXBlfSAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJUQ19VTlNJR05FRF9TSE9SVCA9IDMzOwotICAgIC8qKiB4czp1bnNpZ25lZEJ5dGUsIGFrYSB7QGxpbmsgWG1sVW5zaWduZWRCeXRlI3R5cGV9ICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQlRDX1VOU0lHTkVEX0JZVEUgPSAzNDsKLQotICAgIC8vIGRlcml2ZWQgc3RyaW5ncwotICAgIC8qKiB4czpub3JtYWxpemVkU3RyaW5nLCBha2Ege0BsaW5rIFhtbE5vcm1hbGl6ZWRTdHJpbmcjdHlwZX0gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCVENfTk9STUFMSVpFRF9TVFJJTkcgPSAzNTsKLSAgICAvKiogeHM6dG9rZW4sIGFrYSB7QGxpbmsgWG1sVG9rZW4jdHlwZX0gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCVENfVE9LRU4gPSAzNjsKLSAgICAvKiogeHM6TmFtZSwgYWthIHtAbGluayBYbWxOYW1lI3R5cGV9ICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQlRDX05BTUUgPSAzNzsKLSAgICAvKiogeHM6TkNOYW1lLCBha2Ege0BsaW5rIFhtbE5DTmFtZSN0eXBlfSAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJUQ19OQ05BTUUgPSAzODsKLSAgICAvKiogeHM6bGFuZ3VhZ2UsIGFrYSB7QGxpbmsgWG1sTGFuZ3VhZ2UjdHlwZX0gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCVENfTEFOR1VBR0UgPSAzOTsKLSAgICAvKiogeHM6SUQsIGFrYSB7QGxpbmsgWG1sSUQjdHlwZX0gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCVENfSUQgPSA0MDsKLSAgICAvKiogeHM6SURSRUYsIGFrYSB7QGxpbmsgWG1sSURSRUYjdHlwZX0gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCVENfSURSRUYgPSA0MTsKLSAgICAvKiogeHM6SURSRUZTLCBha2Ege0BsaW5rIFhtbElEUkVGUyN0eXBlfSAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJUQ19JRFJFRlMgPSA0MjsKLSAgICAvKiogeHM6RU5USVRZLCBha2Ege0BsaW5rIFhtbEVOVElUWSN0eXBlfSAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJUQ19FTlRJVFkgPSA0MzsKLSAgICAvKiogeHM6RU5USVRJRVMsIGFrYSB7QGxpbmsgWG1sRU5USVRJRVMjdHlwZX0gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCVENfRU5USVRJRVMgPSA0NDsKLSAgICAvKiogeHM6Tk1UT0tFTiwgYWthIHtAbGluayBYbWxOTVRPS0VOI3R5cGV9ICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQlRDX05NVE9LRU4gPSA0NTsKLSAgICAvKiogeHM6Tk1UT0tFTlMsIGFrYSB7QGxpbmsgWG1sTk1UT0tFTlMjdHlwZX0gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCVENfTk1UT0tFTlMgPSA0NjsKLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJUQ19MQVNUX0JVSUxUSU4gPSA0NjsKLQotICAgIC8qKgotICAgICAqIFRydWUgZm9yIGFueVR5cGUgYW5kIGFueVNpbXBsZVR5cGUuCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNVUlR5cGUoKTsKLQotICAgIC8qKgotICAgICAqIFRydWUgZm9yIHRoZSB0eXBlIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgYSB0aGUgYWJzZW5jZSBvZiBhIGRldGVybWluZWQgdHlwZS4KLSAgICAgKiBYTUwgT2JqZWN0cyB3aG9zZSB0eXBlIGlzTm9UeXBlKCkgYXJlIG5ldmVyIHZhbGlkLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzTm9UeXBlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBTY2hlbWFUeXBlTG9hZGVyIGluIHdoaWNoIHRoaXMgdHlwZSB3YXMgZGVmaW5lZC4KLSAgICAgKiBDb21wbGV4IHR5cGVzIGFyZSBkZWZpbmVkIGFuZCB1c2VkIGluIGV4YWN0bHkgb25lIHNjaGVtYSB0eXBlCi0gICAgICogc3lzdGVtLCBidXQgc2ltcGxlIHR5cGVzIGFyZSBkZWZpbmVkIGluIG9uZSB0eXBlIHN5c3RlbSBhbmQgY2FuCi0gICAgICogYmUgdXNlZCBpbiBhbnkgbnVtYmVyIG9mIHR5cGUgc3lzdGVtcy4gVGhlIG1vc3QgY29tbW9uIGNhc2UgaXMKLSAgICAgKiB0aGUgYnVpbHRpbiB0eXBlcywgd2hpY2ggYXJlIGRlZmluZWQgaW4gdGhlIGJ1aWx0aW4gdHlwZSBzeXN0ZW0KLSAgICAgKiBhbmQgdXNlZCBlbHNld2hlcmUuCi0gICAgICovCi0gICAgcHVibGljIFNjaGVtYVR5cGVTeXN0ZW0gZ2V0VHlwZVN5c3RlbSgpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgZmlsZW5hbWUgZm9yIHRoZSBYU0QgZmlsZSBmcm9tIHdoaWNoIHRoaXMgdHlwZQotICAgICAqIHdhcyBsb2FkZWQuIEludGVuZGVkIGZvciB1c2Ugd2hlbiBkZWJ1Z2dpbmcuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRTb3VyY2VOYW1lKCk7Ci0KLSAgICAvKiogVHJ1ZSBpZiB0aGlzIHR5cGUgY2Fubm90IGJlIHVzZWQgZGlyZWN0bHkgaW4gaW5zdGFuY2VzICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNBYnN0cmFjdCgpOwotCi0gICAgLyoqIFRydWUgaWYgb3RoZXIgdHlwZXMgY2Fubm90IGV4dGVuZCB0aGlzIHR5cGUgKG9ubHkgZm9yIGNvbXBsZXggdHlwZXMpICovCi0gICAgcHVibGljIGJvb2xlYW4gZmluYWxFeHRlbnNpb24oKTsKLQotICAgIC8qKiBUcnVlIGlmIG90aGVyIHR5cGVzIGNhbm5vdCByZXN0cmljdCB0aGlzIHR5cGUgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBmaW5hbFJlc3RyaWN0aW9uKCk7Ci0KLSAgICAvKiogVHJ1ZSBpZiBsaXN0IGRlcml2YXRpb24gb2YgdGhpcyB0eXBlIGlzIHByb2hpYml0ZWQgKG9ubHkgZm9yIHNpbXBsZSB0eXBlcykgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBmaW5hbExpc3QoKTsKLQotICAgIC8qKiBUcnVlIGlmIHVuaW9uIGRlcml2YXRpb24gb2YgdGhpcyB0eXBlIGlzIHByb2hpYml0ZWQgKG9ubHkgZm9yIHNpbXBsZSB0eXBlcykgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBmaW5hbFVuaW9uKCk7Ci0KLSAgICAvKiogVHJ1ZSBpZiBleHRlbnNpb25zIG9mIHRoaXMgdHlwZSBjYW5ub3QgYmUgc3Vic3RpdHV0ZWQgZm9yIHRoaXMgdHlwZSAqLwotICAgIHB1YmxpYyBib29sZWFuIGJsb2NrRXh0ZW5zaW9uKCk7Ci0KLSAgICAvKiogVHJ1ZSBpZiByZXN0cmljdGlvbnMgb2YgdGhpcyB0eXBlIGNhbm5vdCBiZSBzdWJzdGl0dXRlZCBmb3IgdGhpcyB0eXBlICovCi0gICAgcHVibGljIGJvb2xlYW4gYmxvY2tSZXN0cmljdGlvbigpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB7QGxpbmsgI0VNUFRZX0NPTlRFTlR9LCB7QGxpbmsgI1NJTVBMRV9DT05URU5UfSwge0BsaW5rICNFTEVNRU5UX0NPTlRFTlR9LCBvcgotICAgICAqIHtAbGluayAjTUlYRURfQ09OVEVOVH0gZm9yIGNvbXBsZXggdHlwZXMuIEZvciBub25jb21wbGV4IHR5cGVzLCByZXR1cm5zCi0gICAgICoge0BsaW5rICNOT1RfQ09NUExFWF9UWVBFfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldENvbnRlbnRUeXBlKCk7Ci0gICAgCi0gICAgLyoqIE5vdCBhIGNvbXBsZXggdHlwZS4gIFNlZSB7QGxpbmsgI2dldENvbnRlbnRUeXBlKCl9LiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PVF9DT01QTEVYX1RZUEUgPSAwOwotICAgIC8qKiBFbXB0eSBjb250ZW50LiAgU2VlIHtAbGluayAjZ2V0Q29udGVudFR5cGUoKX0uICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRU1QVFlfQ09OVEVOVCA9IDE7Ci0gICAgLyoqIFNpbXBsZSBjb250ZW50LiAgU2VlIHtAbGluayAjZ2V0Q29udGVudFR5cGUoKX0uICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0lNUExFX0NPTlRFTlQgPSAyOwotICAgIC8qKiBFbGVtZW50LW9ubHkgY29udGVudC4gIFNlZSB7QGxpbmsgI2dldENvbnRlbnRUeXBlKCl9LiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVMRU1FTlRfQ09OVEVOVCA9IDM7Ci0gICAgLyoqIE1peGVkIGNvbnRlbnQuICBTZWUge0BsaW5rICNnZXRDb250ZW50VHlwZSgpfS4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNSVhFRF9DT05URU5UID0gNDsKLQotCi0gICAgLyoqCi0gICAgICogVGhlIGFycmF5IG9mIGlubmVyIChhbm9ueW1vdXMpIHR5cGVzIGRlZmluZWQKLSAgICAgKiB3aXRoaW4gdGhpcyB0eXBlLgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBTY2hlbWFUeXBlW10gZ2V0QW5vbnltb3VzVHlwZXMoKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBTY2hlbWFQcm9wZXJ0eSBjb3JyZXNwb25kaW5nIHRvIGFuIGVsZW1lbnQgd2l0aGluIHRoaXMKLSAgICAgKiBjb21wbGV4IHR5cGUgYnkgbG9va2luZyB1cCB0aGUgZWxlbWVudCBuYW1lLgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBTY2hlbWFQcm9wZXJ0eSBnZXRFbGVtZW50UHJvcGVydHkoUU5hbWUgZWx0TmFtZSk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGFsbCB0aGUgU2NoZW1hUHJvcGVydGllcyBjb3JyZXNwb25kaW5nIHRvIGVsZW1lbnRzLgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBTY2hlbWFQcm9wZXJ0eVtdIGdldEVsZW1lbnRQcm9wZXJ0aWVzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgU2NoZW1hUHJvcGVydHkgY29ycmVzcG9uZGluZyB0byBhbiBhdHRyaWJ1dGUgd2l0aGluIHRoaXMKLSAgICAgKiBjb21wbGV4IHR5cGUgYnkgbG9va2luZyB1cCB0aGUgYXR0cmlidXRlIG5hbWUuCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IFNjaGVtYVByb3BlcnR5IGdldEF0dHJpYnV0ZVByb3BlcnR5KFFOYW1lIGF0dHJOYW1lKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYWxsIHRoZSBTY2hlbWFQcm9wZXJ0aWVzIGNvcnJlc3BvbmRpbmcgdG8gYXR0cmlidXRlcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgU2NoZW1hUHJvcGVydHlbXSBnZXRBdHRyaWJ1dGVQcm9wZXJ0aWVzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGFsbCB0aGUgU2NoZW1hUHJvcGVydGllcyB3aXRoaW4gdGhpcyBjb21wbGV4IHR5cGUsCi0gICAgICogZWxlbWVudHMgZm9sbG93ZWQgYnkgYXR0cmlidXRlcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgU2NoZW1hUHJvcGVydHlbXSBnZXRQcm9wZXJ0aWVzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBTY2hlbWFQcm9wZXJ0aWVzIGRlZmluZWQgYnkgdGhpcyBjb21wbGV4IHR5cGUsCi0gICAgICogZXhjbHVzaXZlIG9mIHRoZSBiYXNlIHR5cGUgKGlmIGFueSkuCi0gICAgICovCi0gICAgU2NoZW1hUHJvcGVydHlbXSBnZXREZXJpdmVkUHJvcGVydGllcygpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgYXR0cmlidXRlIG1vZGVsIGZvciB0aGlzIGNvbXBsZXggdHlwZSAod2l0aCBzaW1wbGUgb3IgY29tcGxleCBjb250ZW50KS4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgU2NoZW1hQXR0cmlidXRlTW9kZWwgZ2V0QXR0cmlidXRlTW9kZWwoKTsKLQotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhpcyB0eXBlIHBlcm1pdHMgd2lsZGNhcmQgYXR0cmlidXRlcy4gU2VlIHRoZSBhdHRyaWJ1dGUgbW9kZWwgZm9yCi0gICAgICogbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCB3aWxkY2FyZHMgYXJlIGFsbG93ZWQuCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaGFzQXR0cmlidXRlV2lsZGNhcmRzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBjb21wbGV4IGNvbnRlbnQgbW9kZWwgZm9yIHRoaXMgY29tcGxleCB0eXBlICh3aXRoIGNvbXBsZXggY29udGVudCkuCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IFNjaGVtYVBhcnRpY2xlIGdldENvbnRlbnRNb2RlbCgpOwotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGlzIHR5cGUgcGVybWl0cyBlbGVtZW50IHdpbGRjYXJkcy4gU2VlIHRoZSBjb250ZW50IG1vZGVsIGZvcgotICAgICAqIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggd2lsZGNhcmRzIGFyZSBhbGxvd2VkLCBhbmQgd2hlcmUuCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaGFzRWxlbWVudFdpbGRjYXJkcygpOwotCi0gICAgLyoqCi0gICAgICogRm9yIGRvY3VtZW50IHR5cGVzLCB0cnVlIGlmIHRoZSBnaXZlbiBuYW1lIGNhbiBiZSBzdWJzdGl0dXRlZCBmb3IgdGhlCi0gICAgICogZG9jdW1lbnQgZWxlbWVudCBuYW1lLgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzVmFsaWRTdWJzdGl0dXRpb24oUU5hbWUgbmFtZSk7Ci0KLSAgICAvKioKLSAgICAgKiBUcnVlIGlmIHRoZSBjb21wbGV4IGNvbnRlbnQgbW9kZWwgZm9yIHRoaXMgY29tcGxleCB0eXBlIGlzIGFuICJhbGwiIGdyb3VwLgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGhhc0FsbENvbnRlbnQoKTsKLQotICAgIC8qKgotICAgICAqIFRydWUgaWYgcGFydGljbGVzIGhhdmUgc2FtZSBkZWZhdWx0cywgbmlsbGFiaWxpdHksIGV0YywgdGhhdCBhcmUKLSAgICAgKiBpbnZhcmlhbnQgd2hlbiBvcmRlciBjaGFuZ2VzLiBDb21wdXRlZCBvbmx5IGZvciBKYXZhaXplZCB0eXBlcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc09yZGVyU2Vuc2l0aXZlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB0eXBlIG9mIGEgY2hpbGQgZWxlbWVudCBiYXNlZCBvbiB0aGUgZWxlbWVudCBuYW1lIGFuZAotICAgICAqIGFuIHhzaTp0eXBlIGF0dHJpYnV0ZSAoYW5kIHRoZSB0eXBlIHN5c3RlbSB3aXRoaW4gd2hpY2ggbmFtZXMgYXJlCi0gICAgICogcmVzb2x2ZWQpLgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBTY2hlbWFUeXBlIGdldEVsZW1lbnRUeXBlKFFOYW1lIGVsdE5hbWUsIFFOYW1lIHhzaVR5cGUsIFNjaGVtYVR5cGVMb2FkZXIgd2lsZGNhcmRUeXBlTG9hZGVyKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHR5cGUgb2YgYW4gYXR0cmlidXRlIGJhc2VkIG9uIHRoZSBhdHRyaWJ1dGUgbmFtZSBhbmQKLSAgICAgKiB0aGUgdHlwZSBzeXN0ZW0gd2l0aGluIHdoaWNoICh3aWxkY2FyZCkgbmFtZXMgYXJlIHJlc29sdmVkLgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBTY2hlbWFUeXBlIGdldEF0dHJpYnV0ZVR5cGUoUU5hbWUgZWx0TmFtZSwgU2NoZW1hVHlwZUxvYWRlciB3aWxkY2FyZFR5cGVMb2FkZXIpOwotCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgLyogU0lNUExFIFRZUEUgTU9ERUwgQkVMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSAgICAvKiogeHM6bGVuZ3RoIGZhY2V0ICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkFDRVRfTEVOR1RIID0gMDsKLSAgICAvKiogeHM6bWluTGVuZ3RoIGZhY2V0ICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkFDRVRfTUlOX0xFTkdUSCA9IDE7Ci0gICAgLyoqIHhzOm1heExlbmd0aCBmYWNldCAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZBQ0VUX01BWF9MRU5HVEggPSAyOwotICAgIC8qKiB4czptaW5FeGNsdXNpdmUgZmFjZXQgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGQUNFVF9NSU5fRVhDTFVTSVZFID0gMzsKLSAgICAvKiogeHM6bWluSW5jbHVzaXZlIGZhY2V0ICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkFDRVRfTUlOX0lOQ0xVU0lWRSA9IDQ7Ci0gICAgLyoqIHhzOm1heEluY2x1c2l2ZSBmYWNldCAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZBQ0VUX01BWF9JTkNMVVNJVkUgPSA1OwotICAgIC8qKiB4czptYXhFeGNsdXNpdmUgZmFjZXQgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGQUNFVF9NQVhfRVhDTFVTSVZFID0gNjsKLSAgICAvKiogeHM6dG90YWxEaWdpdHMgZmFjZXQgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGQUNFVF9UT1RBTF9ESUdJVFMgPSA3OwotICAgIC8qKiB4czpmcmFjdGlvbkRpZ2l0cyBmYWNldCAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZBQ0VUX0ZSQUNUSU9OX0RJR0lUUyA9IDg7Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMQVNUX0JBU0lDX0ZBQ0VUID0gODsKLQotICAgIC8qKiB4czp3aGl0ZVNwYWNlIGZhY2V0IC0gdXNlIHtAbGluayAjZ2V0V2hpdGVTcGFjZVJ1bGV9IGluc3RlYWQgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGQUNFVF9XSElURV9TUEFDRSA9IDk7Ci0gICAgLyoqIHhzOnBhdHRlcm4gZmFjZXQgLSB1c2Uge0BsaW5rICNtYXRjaFBhdHRlcm5GYWNldH0gaW5zdGVhZCAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZBQ0VUX1BBVFRFUk4gPSAxMDsKLSAgICAvKiogeHM6ZW51bWVyYXRpb24gZmFjZXQgLSB1c2Uge0BsaW5rICNnZXRFbnVtZXJhdGlvblZhbHVlc30gaW5zdGVhZCAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZBQ0VUX0VOVU1FUkFUSU9OID0gMTE7Ci0KLSAgICAvKiogVGhlIGxhc3Qgb3JkaW5hcnkgZmFjZXQgY29kZSAqLyAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMQVNUX0ZBQ0VUID0gMTE7Ci0gICAgCi0gICAgLyoqIEBzZWUgI29yZGVyZWQgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWV9PUkRFUkVEID0gMTI7Ci0gICAgLyoqIEBzZWUgI2lzQm91bmRlZCAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFBST1BFUlRZX0JPVU5ERUQgPSAxMzsKLSAgICAvKiogQHNlZSAjaXNGaW5pdGUgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWV9DQVJESU5BTElUWSA9IDE0OwotICAgIC8qKiBAc2VlICNpc051bWVyaWMgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBQUk9QRVJUWV9OVU1FUklDID0gMTU7Ci0gICAgCi0gICAgLyoqIFRoZSBsYXN0IHByb3BlcnR5IGNvZGUgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMQVNUX1BST1BFUlRZID0gMTU7Ci0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBmYWNldCwgb3IgbnVsbCBpZgotICAgICAqIG5vbmUgaXMgc2V0LgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBYbWxBbnlTaW1wbGVUeXBlIGdldEZhY2V0KGludCBmYWNldENvZGUpOwotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGUgZ2l2ZW4gZmFjZXQgaXMgZml4ZWQuCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNGYWNldEZpeGVkKGludCBmYWNldENvZGUpOwotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiBvcmRlcmVkLiAgUmV0dXJucyBlaXRoZXIge0BsaW5rICNVTk9SREVSRUR9LAotICAgICAqIHtAbGluayAjUEFSVElBTF9PUkRFUn0sIG9yIHtAbGluayAjVE9UQUxfT1JERVJ9LgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgb3JkZXJlZCgpOwotCi0gICAgLyoqIFVub3JkZXJlZC4gU2VlIHtAbGluayAjb3JkZXJlZH0uICovCi0gICAgcHVibGljIHN0YXRpYyBpbnQgVU5PUkRFUkVEID0gMDsKLSAgICAvKiogUGFydGlhbGx5IG9yZGVyZWQuIFNlZSB7QGxpbmsgI29yZGVyZWR9LiAqLwotICAgIHB1YmxpYyBzdGF0aWMgaW50IFBBUlRJQUxfT1JERVIgPSAxOwotICAgIC8qKiBUb3RhbGx5IG9yZGVyZWQuIFNlZSB7QGxpbmsgI29yZGVyZWR9LiAqLwotICAgIHB1YmxpYyBzdGF0aWMgaW50IFRPVEFMX09SREVSID0gMjsKLQotICAgIC8qKgotICAgICAqIFRydWUgaWYgYm91bmRlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc0JvdW5kZWQoKTsKLQotICAgIC8qKgotICAgICAqIFRydWUgaWYgZmluaXRlLgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzRmluaXRlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUcnVlIGlmIG51bWVyaWMuCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNOdW1lcmljKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUcnVlIGlmIHRoZXJlIGFyZSByZWdleCBwYXR0ZXJuIGZhY2VudHMKLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBoYXNQYXR0ZXJuRmFjZXQoKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBUcnVlIAotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmdbXSBnZXRQYXR0ZXJucygpOwotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIG1hdGNoZXMgdGhlIHBhdHRlcm4gZmFjZXRzLgotICAgICAqIEFsd2F5cyB0cnVlIGlmIHRoZXJlIGFyZSBubyBwYXR0ZXJuIGZhY2V0cy4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBtYXRjaFBhdHRlcm5GYWNldChTdHJpbmcgcyk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBhcnJheSBvZiB2YWxpZCBvYmplY3RzIGZyb20gdGhlCi0gICAgICogZW51bWVyYXRpb24gZmFjZXQsIG51bGwgaWYgbm8gZW51bWVyYXRpb24gZGVmaW5lZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgWG1sQW55U2ltcGxlVHlwZVtdIGdldEVudW1lcmF0aW9uVmFsdWVzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBUcnVlIGlmIHRoaXMgaXMgYSBzdHJpbmcgZW51bSB3aGVyZSBhbiBpbnRlZ2VyCi0gICAgICogaXMgYXNzaWduZWQgdG8gZWFjaCBlbnVtZXJhdGVkIHZhbHVlLgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGhhc1N0cmluZ0VudW1WYWx1ZXMoKTsKLQotICAgIC8qKgotICAgICAqIElmIHRoaXMgaXMgYSBzdHJpbmcgZW51bWVyYXRpb24sIHJldHVybnMgdGhlIG1vc3QgYmFzaWMgYmFzZSBzY2hlbWEKLSAgICAgKiB0eXBlIHRoYXQgdGhpcyBlbnVlbXJhdGlvbiBpcyBiYXNlZCBvbi4gT3RoZXJ3aXNlIHJldHVybnMgbnVsbC4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgU2NoZW1hVHlwZSBnZXRCYXNlRW51bVR5cGUoKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGFycmF5IG9mIFNjaGVtYVN0cmluZ0VudW1FbnRyaWVzIGZvciB0aGlzIHR5cGU6IHRoaXMKLSAgICAgKiBhcnJheSBpbmNsdWRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgamF2YSBjb25zdGFudCBuYW1lcyB1c2VkIGZvcgotICAgICAqIGVhY2ggc3RyaW5nIGVudW0gZW50cnkuCi0gICAgICovCi0gICAgcHVibGljIFNjaGVtYVN0cmluZ0VudW1FbnRyeVtdIGdldFN0cmluZ0VudW1FbnRyaWVzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZW51bSBlbnRyeSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBlbnVtZXJhdGVkCi0gICAgICogc3RyaW5nLCBvciBudWxsIGlmIHRoZXJlIGlzIG5vIG1hdGNoIG9yIHRoaXMgdHlwZSBpcyBub3QKLSAgICAgKiBhIHN0cmluZyBlbnVtZXJhdGlvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgU2NoZW1hU3RyaW5nRW51bUVudHJ5IGVudW1FbnRyeUZvclN0cmluZyhTdHJpbmcgcyk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZW51bSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBlbnVtZXJhdGVkCi0gICAgICogc3RyaW5nLCBvciBudWxsIGlmIHRoZXJlIGlzIG5vIG1hdGNoIG9yIHRoaXMgdHlwZSBpcyBub3QKLSAgICAgKiBhIHN0cmluZyBlbnVtZXJhdGlvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgU3RyaW5nRW51bUFic3RyYWN0QmFzZSBlbnVtRm9yU3RyaW5nKFN0cmluZyBzKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHN0cmluZyBlbnVtIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGVudW1lcmF0ZWQKLSAgICAgKiBzdHJpbmcsIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gbWF0Y2ggb3IgdGhpcyB0eXBlIGlzIG5vdAotICAgICAqIGEgc3RyaW5nIGVudW1lcmF0aW9uLgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmdFbnVtQWJzdHJhY3RCYXNlIGVudW1Gb3JJbnQoaW50IGkpOwotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBmb3IgYW55IG9mIHRoZSAyMCBwcmltaXRpdmUgdHlwZXMgKHBsdXMgYW55U2ltcGxlVHlwZSkKLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc1ByaW1pdGl2ZVR5cGUoKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgc2ltcGxlIHR5cGUgaXMgQVRPTUlDLCBVTklPTiwgb3IgTElTVC4KLSAgICAgKiBSZXR1cm5zIHtAbGluayAjTk9UX1NJTVBMRX0sIHtAbGluayAjQVRPTUlDfSwge0BsaW5rICNVTklPTn0sCi0gICAgICogb3Ige0BsaW5rICNMSVNUfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldFNpbXBsZVZhcmlldHkoKTsKLSAgICAKLSAgICAvKiogTm90IGEgc2ltcGxlIHR5cGUgb3Igc2ltcGxlIGNvbnRlbnQuIFNlZSB7QGxpbmsgI2dldFNpbXBsZVZhcmlldHl9LiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PVF9TSU1QTEUgPSAwOwotICAgIC8qKiBBdG9taWMgdHlwZS4gIFNlZSB7QGxpbmsgI2dldFNpbXBsZVZhcmlldHl9ICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgQVRPTUlDID0gMTsKLSAgICAvKiogVW5pb24gdHlwZS4gIFNlZSB7QGxpbmsgI2dldFNpbXBsZVZhcmlldHl9ICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVU5JT04gPSAyOwotICAgIC8qKiBTaW1wbGUgbGlzdCB0eXBlLiAgU2VlIHtAbGluayAjZ2V0U2ltcGxlVmFyaWV0eX0gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBMSVNUID0gMzsKLQotCi0gICAgLyoqCi0gICAgICogRm9yIGF0b21pYyB0eXBlcyBvbmx5OiBnZXQgdGhlIHByaW1pdGl2ZSB0eXBlIHVuZGVybHlpbmcgdGhpcyBvbmUuCi0gICAgICogPHA+Ci0gICAgICogUmV0dXJucyBudWxsIGlmIHRoaXMgaXMgbm90IGFuIGF0b21pYyB0eXBlLgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBTY2hlbWFUeXBlIGdldFByaW1pdGl2ZVR5cGUoKTsKLQotICAgIC8qKgotICAgICAqIEZvciBhdG9taWMgbnVtZXJpYyByZXN0cmljdGlvbnMgb2YgZGVjaW1hbCBvbmx5OiB0aGUKLSAgICAgKiBudW1lcmljIHNpemUgY2F0ZWdvcnkuIFRha2VzIGludG8gYWNjb3VudCBtaW4gYW5kIG1heAotICAgICAqIHJlc3RyaWN0aW9ucyBhcyB3ZWxsIGFzIHRvdGFsRGlnaXRzIGFuZCBmcmFjdGlvbkRpZ2l0cwotICAgICAqIGZhY2V0cy4KLSAgICAgKiA8cD4KLSAgICAgKiBSZXR1cm5zIGVpdGhlciB7QGxpbmsgI05PVF9ERUNJTUFMfSwKLSAgICAgKiB7QGxpbmsgI1NJWkVfQllURX0sIHtAbGluayAjU0laRV9TSE9SVH0sIHtAbGluayAjU0laRV9JTlR9LAotICAgICAqIHtAbGluayAjU0laRV9MT05HfSwge0BsaW5rICNTSVpFX0JJR19JTlRFR0VSfSwgb3IKLSAgICAgKiB7QGxpbmsgI1NJWkVfQklHX0RFQ0lNQUx9LgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBpbnQgZ2V0RGVjaW1hbFNpemUoKTsKLQotICAgIC8qKiBOb3QgYSBkZWNpbWFsIHJlc3RyaWN0aW9uLiBTZWUge0BsaW5rICNnZXREZWNpbWFsU2l6ZX0uICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9UX0RFQ0lNQUwgPSAwOwotICAgIC8qKiBGaXRzIGluIGEgYnl0ZS4gU2VlIHtAbGluayAjZ2V0RGVjaW1hbFNpemV9LiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNJWkVfQllURSA9IDg7Ci0gICAgLyoqIEZpdHMgaW4gYSBzaG9ydC4gU2VlIHtAbGluayAjZ2V0RGVjaW1hbFNpemV9LiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNJWkVfU0hPUlQgPSAxNjsKLSAgICAvKiogRml0cyBpbiBhbiBpbnQuIFNlZSB7QGxpbmsgI2dldERlY2ltYWxTaXplfS4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTSVpFX0lOVCA9IDMyOwotICAgIC8qKiBGaXRzIGluIGEgbG9uZy4gU2VlIHtAbGluayAjZ2V0RGVjaW1hbFNpemV9LiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNJWkVfTE9ORyA9IDY0OwotICAgIC8qKiBGaXRzIGluIGEge0BsaW5rIGphdmEubWF0aC5CaWdJbnRlZ2VyfS4gU2VlIHtAbGluayAjZ2V0RGVjaW1hbFNpemV9LiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNJWkVfQklHX0lOVEVHRVIgPSAxMDAwMDAwOyAvLyAibWlsbGlvbnMiCi0gICAgLyoqIEZpdHMgaW4gYSB7QGxpbmsgamF2YS5tYXRoLkJpZ0RlY2ltYWx9LiBTZWUge0BsaW5rICNnZXREZWNpbWFsU2l6ZX0uICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0laRV9CSUdfREVDSU1BTCA9IDEwMDAwMDE7IC8vICJldmVuIG1vcmUiCi0KLSAgICAvKioKLSAgICAgKiBGb3IgdW5pb24gdHlwZXMgb25seTogZ2V0IHRoZSBzaGFsbG93IG1lbWJlciB0eXBlcy4gVGhpcwotICAgICAqIHJldHVybnMgdGhlIGRlY2xhcmVkIG1lbWJlciB0eXBlcyBvZiB0aGUgdW5pb24sIHNvLCBmb3IKLSAgICAgKiBleGFtcGxlIGlmIHRoZSB0eXBlIGNvbnRhaW5zIGFub3RoZXIgdW5pb24sIHRoZSBuZXN0ZWQKLSAgICAgKiBtZW1iZXJzIG9mIHRoYXQgdW5pb24gYXJlIE5PVCByZXR1cm5lZCBoZXJlLgotICAgICAqIDxwPgotICAgICAqIFJldHVybnMgbnVsbCBpZiB0aGlzIHR5cGUgaXMgbm90IGEgdW5pb24uCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IFNjaGVtYVR5cGVbXSBnZXRVbmlvbk1lbWJlclR5cGVzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBGb3IgdW5pb24gdHlwZXMgb25seTogZ2V0cyB0aGUgZnVsbCB0cmVlIG9mIG1lbWJlciB0eXBlcy4KLSAgICAgKiBUaGlzIGNvbXB1dGVzIHRoZSBjbG9zdXJlIG9mIHRoZSBzZXQgcmV0dXJuZWQgYnkKLSAgICAgKiBnZXRVbmlvbk1lbWJlclR5cGVzKCksIHNvLCBmb3IgZXhhbXBsZSwgaXQgcmV0dXJucwotICAgICAqIGFsbCB0aGUgdHlwZXMgbmVzdGVkIHdpdGhpbiB1bmlvbnMgb2YgdW5pb25zIGFzIHdlbGwKLSAgICAgKiBhcyB0aGUgdG9wLWxldmVsIG1lbWJlcnM7IHRoZSBzZXQgYWxzbyBpbmNsdWRlcyB0aGUKLSAgICAgKiB0eXBlIGl0c2VsZi4gSWYgeW91IGFyZSBzZWVraW5nIG9ubHkgdGhlIGJhc2ljCi0gICAgICogbm9uLXVuaW9uIGNvbnNpdHVlbnRzLCB1c2UgZ2V0VW5pb25Db25zdGl0dWVudFR5cGVzLgotICAgICAqIDxwPgotICAgICAqIFJldHVybnMgbnVsbCBpZiB0aGlzIHR5cGUgaXMgbm90IGEgdW5pb24uCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IFNjaGVtYVR5cGVbXSBnZXRVbmlvblN1YlR5cGVzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBGb3IgdW5pb24gdHlwZXMgb25seTogZ2V0IHRoZSBjb25zdGl0dWVudCBtZW1iZXIgdHlwZXMuIFRoaXMKLSAgICAgKiByZXR1cm5zIG9ubHkgbm9uLXVuaW9uIHR5cGVzLCBzbywgZm9yIGV4YW1wbGUsIGZvciB1bmlvbnMgb2YKLSAgICAgKiB1bmlvbnMsIHRoaXMgcmV0dXJucyB0aGUgZmxhdHRlbmVkIGxpc3Qgb2YgaW5kaXZpZHVhbCBtZW1iZXIKLSAgICAgKiB0eXBlcyB3aXRoaW4gdGhlIGlubmVybW9zdCB1bmlvbnMuCi0gICAgICogPHA+Ci0gICAgICogUmV0dXJucyBudWxsIGlmIHRoaXMgdHlwZSBpcyBub3QgYSB1bmlvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgU2NoZW1hVHlwZVtdIGdldFVuaW9uQ29uc3RpdHVlbnRUeXBlcygpOwotCi0gICAgLyoqCi0gICAgICogRm9yIHVuaW9uIHR5cGVzIG9ubHk6IGdldCB0aGUgbW9zdCBzcGVjaWZpYyBjb21tb24gYmFzZQotICAgICAqIHR5cGUgb2YgdGhlIGNvbnN0aXR1ZW50IG1lbWJlciB0eXBlcy4gTWF5IHJldHVybiBhIFVSIHR5cGUuCi0gICAgICogPHA+Ci0gICAgICogUmV0dXJucyBudWxsIGlmIHRoaXMgdHlwZSBpcyBub3QgYSB1bmlvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgU2NoZW1hVHlwZSBnZXRVbmlvbkNvbW1vbkJhc2VUeXBlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBGb3IgYW5vbnltb3VzIHR5cGVzIGRlZmluZWQgaW5zaWRlIGEgdW5pb24gb25seTogZ2V0cwotICAgICAqIHRoZSBpbnRlZ2VyIGluZGljYXRpbmcgdGhlIGRlY2xhcmF0aW9uIG9yZGVyIG9mIHRoaXMKLSAgICAgKiB0eXBlIHdpdGhpbiB0aGUgb3V0ZXIgdW5pb24gdHlwZSwgb3IgemVybyBpZiB0aGlzIGlzCi0gICAgICogbm90IGFwcGxpY2FibGUuIFRoZSBmaXJzdCBhbm9ueW1vdXMgdW5pb24gbWVtYmVyIHdpdGhpbgotICAgICAqIGEgdW5pb24gdHlwZSBpcyBudW1iZXJlZCAiMSIuIFVzZWQgdG8gZGlmZmVyZW50aWF0ZQotICAgICAqIGJldHdlZW4gZGlmZmVyZW50IGFub255bW91cyB0eXBlcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgaW50IGdldEFub255bW91c1VuaW9uTWVtYmVyT3JkaW5hbCgpOwotCi0gICAgLyoqCi0gICAgICogRm9yIGxpc3QgdHlwZXMgb25seTogZ2V0IHRoZSBpdGVtIHR5cGUuIFRoaXMgaXMgdGhlIGF0b21pYwotICAgICAqIG9yIHVuaW9uIHR5cGUgdGhhdCBpcyB0aGUgdHlwZSBvZiBldmVyeSBlbnRyeSBpbiB0aGUgbGlzdC4KLSAgICAgKiA8cD4KLSAgICAgKiBSZXR1cm5zIG51bGwgaWYgdGhpcyB0eXBlIGlzIG5vdCBhIGxpc3QuCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IFNjaGVtYVR5cGUgZ2V0TGlzdEl0ZW1UeXBlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBGb3Igbm9udW5pb24gc2ltcGxlIHR5cGVzOiBnZXQgdGhlIHdoaXRlc3BhY2UgcnVsZS4gVGhpcyBpcwotICAgICAqIGVpdGhlciB7QGxpbmsgI1dTX1BSRVNFUlZFfSwge0BsaW5rICNXU19SRVBMQUNFfSwgb3IKLSAgICAgKiB7QGxpbmsgI1dTX0NPTExBUFNFfS4gUmV0dXJucyB7QGxpbmsgI1dTX1VOU1BFQ0lGSUVEfQotICAgICAqIGZvciB1bmlvbnMgYW5kIGNvbXBsZXggdHlwZXMuCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IGludCBnZXRXaGl0ZVNwYWNlUnVsZSgpOwotCi0gICAgLyoqIFdoaXRlc3BhY2UgcnVsZSB1bnNwZWNpZmllZC4gIFNlZSB7QGxpbmsgI2dldFdoaXRlU3BhY2VSdWxlfS4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXU19VTlNQRUNJRklFRCA9IDA7Ci0gICAgLyoqIFdoaXRlc3BhY2UgcHJlc2VydmVkLiAgU2VlIHtAbGluayAjZ2V0V2hpdGVTcGFjZVJ1bGV9LiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdTX1BSRVNFUlZFID0gMTsKLSAgICAvKiogV2hpdGVzcGFjZSByZXBsYWNlZCBieSBvcmRpbmFyeSBzcGFjZS4gIFNlZSB7QGxpbmsgI2dldFdoaXRlU3BhY2VSdWxlfS4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXU19SRVBMQUNFID0gMjsKLSAgICAvKiogV2hpdGVzcGFjZSBjb2xsYXBzZWQgYW5kIHRyaW1tZWQuICBTZWUge0BsaW5rICNnZXRXaGl0ZVNwYWNlUnVsZX0uICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV1NfQ09MTEFQU0UgPSAzOwotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlcyBhbiBpbW11dGFibGUgc2ltcGxlIHR5cGUgdmFsdWUgdGhhdCBkb2VzIG5vdCByZXNpZGUgaW4gYSB0cmVlLgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBYbWxBbnlTaW1wbGVUeXBlIG5ld1ZhbHVlKE9iamVjdCB2KTsKLSAgICAKLQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gYWxsb3cgb24tZGVtYW5kIGxvYWRpbmcgb2YgdHlwZXMuCi0gICAgICogCi0gICAgICogQGV4Y2x1ZGUKLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgc3RhdGljIGNsYXNzIFJlZiBleHRlbmRzIFNjaGVtYUNvbXBvbmVudC5SZWYKLSAgICB7Ci0gICAgICAgIHB1YmxpYyBSZWYoU2NoZW1hVHlwZSB0eXBlKQotICAgICAgICAgICAgeyBzdXBlcih0eXBlKTsgfQotCi0gICAgICAgIHB1YmxpYyBSZWYoU2NoZW1hVHlwZVN5c3RlbSBzeXN0ZW0sIFN0cmluZyBoYW5kbGUpCi0gICAgICAgICAgICB7IHN1cGVyKHN5c3RlbSwgaGFuZGxlKTsgfQotCi0gICAgICAgIHB1YmxpYyBmaW5hbCBpbnQgZ2V0Q29tcG9uZW50VHlwZSgpCi0gICAgICAgICAgICB7IHJldHVybiBTY2hlbWFDb21wb25lbnQuVFlQRTsgfQotCi0gICAgICAgIHB1YmxpYyBmaW5hbCBTY2hlbWFUeXBlIGdldCgpCi0gICAgICAgICAgICB7IHJldHVybiAoU2NoZW1hVHlwZSlnZXRDb21wb25lbnQoKTsgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHJ1bnMgYSBTY2hlbWFUeXBlLlJlZiBwb2ludGluZyB0byB0aGlzIHNjaGVtYSB0eXBlIGl0c2VsZi4KLSAgICAgKi8KLSAgICBwdWJsaWMgUmVmIGdldFJlZigpOwotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZjRjNDEuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5OSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW07Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb247Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOwotCi1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotLyoqCi0gKiBSZXByZXNlbnRzIGEgc2VhcmNoYWJsZSBzZXQgb2YgWE1MIFNjaGVtYSBjb21wb25lbnQgZGVmaW5pdGlvbnMuCi0gKiA8cD4KLSAqIFNjaGVtYVR5cGVMb2FkZXIgaXMgc29tZXdoYXQgYW5hbG9nb3VzIHRvIHtAbGluayBqYXZhLmxhbmcuQ2xhc3NMb2FkZXJ9LAotICogYmVjYXVzZSBpdCBpcyByZXNwb25zaWJsZSBmb3IgZmluZGluZyB7QGxpbmsgU2NoZW1hQ29tcG9uZW50fSBkZWZpbml0aW9ucwotICogYnkgbmFtZSwgeWV0IGl0IGlzIG5vdCByZXNwb25zaWJsZSBmb3IgYmVpbmcgYWJsZSB0byBlbnVtZXJhdGUgYWxsIHRoZQotICogY29tcG9uZW50IGRlZmluaXRvbnMgYXZhaWxhYmxlLiAoSWYgeW91IHdpc2ggdG8gZW51bWVyYXRlIGNvbXBvbmVudAotICogZGVmaW5pdGlvbnMsIHNlZSB7QGxpbmsgU2NoZW1hVHlwZVN5c3RlbX0uKSBUaGVyZSBhcmUgc29tZSB3YXlzIGluIHdoaWNoCi0gKiBTY2hlbWFUeXBlU3lzdGVtcyBhcmUgZGlzc2ltaWxhciBmcm9tIENsYXNzTG9hZGVycywgaG93ZXZlci4KLSAqIFNpbmNlIFhNTCBTY2hlbWEgaGFzIGEgbnVtYmVyIG9mIGluc3RhbmNlLW9yaWVudGVkIHR5cGluZyBtZWNoYW5pc21zCi0gKiAoc3VjaCBhcyB3aWxkY2FyZHMpIHRoYXQgZG8gbm90IGV4aXN0IGluIEphdmEsIGEgU2NoZW1hVHlwZUxvYWRlciBpcwotICogbm90IGFzc29jaWF0ZWQgd2l0aCBhIHR5cGU7IGluc3RlYWQsIGEgU2NoZW1hVHlwZUxvYWRlciBpcyBhc3NvY2lhdGVkCi0gKiB3aXRoIGVhY2ggWE1MIGluc3RhbmNlLgotICogPHA+Ci0gKiBFdmVyeSBYTUwgaW5zdGFuY2UgaXMgbG9hZGVkIHdpdGhpbiB0aGUgY29udGV4dCBvZiBhIFNjaGVtYVR5cGVMb2FkZXI7Ci0gKiB0aGUgU2NoZW1hVHlwZUxvYWRlciBmb3IgYW4gaW5zdGFuY2UgaXMgdXNlZCB0byByZXNvbHZlIGFsbCB0eXBlIGRlZmluaXRpb25zCi0gKiB3aXRoaW4gdGhlIGluc3RhbmNlIGFuZCBmb3IgYXBwbHlpbmcgdHlwZS1zZW5zaXRpdmUgbWV0aG9kcyBzdWNoIGFzCi0gKiB7QGxpbmsgWG1sT2JqZWN0I3ZhbGlkYXRlfS4KLSAqIDxwPgotICogTm9ybWFsbHkgdGhlIFNjaGVtYVR5cGVMb2FkZXIgYmVpbmcgdXNlZCBmb3IgYWxsIGluc3RhbmNlcyBpcyB0aGUKLSAqIGNvbnRleHQgdHlwZSBsb2FkZXIgKHRoYXQgaXMsIHRoZSBTY2hlbWFUeXBlTG9hZGVyIHJldHVybmVkIGZyb20KLSAqIHtAbGluayBYbWxCZWFucyNnZXRDb250ZXh0VHlwZUxvYWRlcigpfSkuICBUaGUgY29udGV4dCB0eXBlIGxvYWRlcgotICogY29uc3VsdHMgdGhlIHRocmVhZCdzIGNvbnRleHQgQ2xhc3NMb2FkZXIgKHNlZSB7QGxpbmsgVGhyZWFkI2dldENvbnRleHRDbGFzc0xvYWRlcigpfSkKLSAqIHRvIGZpbmQgc2NoZW1hIHR5cGUgZGVmaW50aW9ucyB0aGF0IGFyZSBhdmFpbGFibGUgb24gdGhlIGNsYXNzcGF0aC4KLSAqIFRoZSBuZXQgcmVzdWx0IGlzIHRoYXQgeW91IGNhbiB1c2Ugc2NoZW1hIHR5cGVzIHNpbXBseSBieSBwdXR0aW5nCi0gKiB0aGVpciBjb21waWxlZCBzY2hlbWEgSkFScyBvbiB5b3VyIGNsYXNzcGF0aC4KLSAqIElmIHlvdSB3aXNoIHRvIGxvYWQgaW5zdGFuY2VzIHVzaW5nIGEgZGlmZmVyZW50IFNjaGVtYVR5cGVMb2FkZXIsIHRoZW4geW91IG11c3QKLSAqIGNhbGwge0BsaW5rICNwYXJzZX0gbWV0aG9kcyBvbiB0aGUgU2NoZW1hVHlwZUxvYWRlciBpbnN0YW5jZSBleHBsaWNpdGx5Ci0gKiByYXRoZXIgdGhhbiB1c2luZyB0aGUgbm9ybWFsIGNvbnZlbmllbnQgRmFjdG9yeSBtZXRob2RzLgotICogPHA+Ci0gKiBBIFNjaGVtYVR5cGVMb2FkZXIgY2FuIGJlIG9idGFpbmVkIGJ5IGR5bmFtaWNhbGx5IGxvYWRpbmcgWFNEIGZpbGVzCi0gKiB1c2luZyB7QGxpbmsgWG1sQmVhbnMjbG9hZFhzZH0sIG9yIGJ5IGFzc2VtYmxpbmcgb3RoZXIgU2NoZW1hVHlwZUxvYWRlcnMKLSAqIG9yIFNjaGVtYVR5cGVTeXN0ZW1zIG9uIGEgcGF0aCB1c2luZyB7QGxpbmsgWG1sQmVhbnMjdHlwZUxvYWRlclVuaW9ufS4KLSAqIAotICogQHNlZSBYbWxCZWFucyNsb2FkWHNkCi0gKiBAc2VlIFhtbEJlYW5zI2dldENvbnRleHRUeXBlTG9hZGVyCi0gKiBAc2VlIFhtbEJlYW5zI3R5cGVMb2FkZXJVbmlvbgotICogQHNlZSBTY2hlbWFUeXBlU3lzdGVtCi0gKi8gCi1wdWJsaWMgaW50ZXJmYWNlIFNjaGVtYVR5cGVMb2FkZXIKLXsKLSAgICAvKiogUmV0dXJucyB0aGUgdHlwZSB3aXRoIHRoZSBnaXZlbiBuYW1lLCBvciBudWxsIGlmIG5vbmUuICovCi0gICAgcHVibGljIFNjaGVtYVR5cGUgZmluZFR5cGUoUU5hbWUgbmFtZSk7Ci0KLSAgICAvKiogUmV0dXJucyB0aGUgZG9jdW1lbnQgdHlwZSByb290ZWQgYXQgdGhlIGdpdmVuIGVsZW1lbnQgbmFtZSwgb3IgbnVsbCBpZiBub25lLiAqLwotICAgIHB1YmxpYyBTY2hlbWFUeXBlIGZpbmREb2N1bWVudFR5cGUoUU5hbWUgbmFtZSk7Ci0gICAgCi0gICAgLyoqIFJldHVybnMgdGhlIGF0dHJpYnV0ZSB0eXBlIGNvbnRhaW5pbmcgdGhlIGdpdmVuIGF0dHJpYnV0ZSBuYW1lLCBvciBudWxsIGlmIG5vbmUuICovCi0gICAgcHVibGljIFNjaGVtYVR5cGUgZmluZEF0dHJpYnV0ZVR5cGUoUU5hbWUgbmFtZSk7Ci0KLSAgICAvKiogUmV0dXJucyB0aGUgZ2xvYmFsIGVsZW1lbnQgZGVmaW50aW9uIHdpdGggdGhlIGdpdmVuIG5hbWUsIG9yIG51bGwgaWYgbm9uZS4gKi8KLSAgICBwdWJsaWMgU2NoZW1hR2xvYmFsRWxlbWVudCBmaW5kRWxlbWVudChRTmFtZSBuYW1lKTsKLQotICAgIC8qKiBSZXR1cm5zIHRoZSBnbG9iYWwgYXR0cmlidXRlIGRlZmludGlvbiB3aXRoIHRoZSBnaXZlbiBuYW1lLCBvciBudWxsIGlmIG5vbmUuICovCi0gICAgcHVibGljIFNjaGVtYUdsb2JhbEF0dHJpYnV0ZSBmaW5kQXR0cmlidXRlKFFOYW1lIG5hbWUpOwotICAgIAotICAgIC8qKiBSZXR1cm5zIHRoZSBtb2RlbCBncm91cCBkZWZpbnRpb24gd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgb3IgbnVsbCBpZiBub25lLiAqLwotICAgIHB1YmxpYyBTY2hlbWFNb2RlbEdyb3VwIGZpbmRNb2RlbEdyb3VwKFFOYW1lIG5hbWUpOwotICAgIAotICAgIC8qKiBSZXR1cm5zIHRoZSBhdHRyaWJ1dGUgZ3JvdXAgZGVmaW50aW9uIHdpdGggdGhlIGdpdmVuIG5hbWUsIG9yIG51bGwgaWYgbm9uZS4gKi8KLSAgICBwdWJsaWMgU2NoZW1hQXR0cmlidXRlR3JvdXAgZmluZEF0dHJpYnV0ZUdyb3VwKFFOYW1lIG5hbWUpOwotCi0gICAgLyoqIFRydWUgaWYgdGhlIHR5cGVsb2FkZXIgY29udGFpbnMgYW55IGRlZmluaXRpb25zIGluIHRoZSBnaXZlbiBuYW1lc3BhY2UuICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNOYW1lc3BhY2VEZWZpbmVkKFN0cmluZyBuYW1lc3BhY2UpOwotCi0gICAgLyoqIFVzZWQgZm9yIG9uLWRlbWFuZCBsb2FkaW5nLiAqLwotICAgIHB1YmxpYyBTY2hlbWFUeXBlLlJlZiBmaW5kVHlwZVJlZihRTmFtZSBuYW1lKTsKLQotICAgIC8qKiBVc2VkIGZvciBvbi1kZW1hbmQgbG9hZGluZy4gKi8KLSAgICBwdWJsaWMgU2NoZW1hVHlwZS5SZWYgZmluZERvY3VtZW50VHlwZVJlZihRTmFtZSBuYW1lKTsKLSAgICAKLSAgICAvKiogVXNlZCBmb3Igb24tZGVtYW5kIGxvYWRpbmcuICovCi0gICAgcHVibGljIFNjaGVtYVR5cGUuUmVmIGZpbmRBdHRyaWJ1dGVUeXBlUmVmKFFOYW1lIG5hbWUpOwotCi0gICAgLyoqIFVzZWQgZm9yIG9uLWRlbWFuZCBsb2FkaW5nLiAqLwotICAgIHB1YmxpYyBTY2hlbWFHbG9iYWxFbGVtZW50LlJlZiBmaW5kRWxlbWVudFJlZihRTmFtZSBuYW1lKTsKLQotICAgIC8qKiBVc2VkIGZvciBvbi1kZW1hbmQgbG9hZGluZy4gKi8KLSAgICBwdWJsaWMgU2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZiBmaW5kQXR0cmlidXRlUmVmKFFOYW1lIG5hbWUpOwotICAgIAotICAgIC8qKiBVc2VkIGZvciBvbi1kZW1hbmQgbG9hZGluZy4gKi8KLSAgICBwdWJsaWMgU2NoZW1hTW9kZWxHcm91cC5SZWYgZmluZE1vZGVsR3JvdXBSZWYoUU5hbWUgbmFtZSk7Ci0gICAgCi0gICAgLyoqIFVzZWQgZm9yIG9uLWRlbWFuZCBsb2FkaW5nLiAqLwotICAgIHB1YmxpYyBTY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWYgZmluZEF0dHJpYnV0ZUdyb3VwUmVmKFFOYW1lIG5hbWUpOwotCi0gICAgLyoqIFVzZWQgZm9yIG9uLWRlbWFuZCBsb2FkaW5nLiAqLwotICAgIHB1YmxpYyBTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmIGZpbmRJZGVudGl0eUNvbnN0cmFpbnRSZWYoUU5hbWUgbmFtZSk7Ci0KLSAgICAvKiogRmluZHMgYSB0eXBlIGZvciBhIGdpdmVuIHNpZ25hdHVyZSBzdHJpbmcgKi8KLSAgICBwdWJsaWMgU2NoZW1hVHlwZSB0eXBlRm9yU2lnbmF0dXJlKFN0cmluZyBzaWduYXR1cmUpOwotCi0gICAgLyoqIEZpbmRzIGEgdHlwZSBmb3IgYSBnaXZlbiBmdWxseS1xdWFsaWZpZWQgWE1MIEJlYW4gY2xhc3NuYW1lICovCi0gICAgcHVibGljIFNjaGVtYVR5cGUgdHlwZUZvckNsYXNzbmFtZShTdHJpbmcgY2xhc3NuYW1lKTsKLQotICAgIC8qKiBMb2FkcyBvcmlnaW5hbCBYU0Qgc291cmNlIGFzIGEgc3RyZWFtLiAgU2VlIHtAbGluayBTY2hlbWFUeXBlI2dldFNvdXJjZU5hbWV9LiAqLwotICAgIHB1YmxpYyBJbnB1dFN0cmVhbSBnZXRTb3VyY2VBc1N0cmVhbShTdHJpbmcgc291cmNlTmFtZSk7Ci0gICAgCi0gICAgLyoqIENvbXBpbGVzIGFuIFhQYXRoICovCi0gICAgcHVibGljIFN0cmluZyBjb21waWxlUGF0aChTdHJpbmcgcGF0aEV4cHIsIFhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIFhtbEV4Y2VwdGlvbjsKLQotICAgIC8qKiBDb21waWxlcyBhbiBYUXVlcnkgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGNvbXBpbGVRdWVyeShTdHJpbmcgcXVlcnlFeHByLCBYbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBYbWxFeGNlcHRpb247Ci0KLSAgICAvKiogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gdHlwZS4gKi8KLSAgICBwdWJsaWMgWG1sT2JqZWN0IG5ld0luc3RhbmNlICggU2NoZW1hVHlwZSB0eXBlLCBYbWxPcHRpb25zIG9wdGlvbnMgKTsKLSAgICAvKiogUGFyc2VzIGFuIGluc3RhbmNlIG9mIHRoZSBnaXZlbiB0eXBlLiAqLwotICAgIHB1YmxpYyBYbWxPYmplY3QgcGFyc2UgKCBTdHJpbmcgeG1sVGV4dCwgU2NoZW1hVHlwZSB0eXBlLCBYbWxPcHRpb25zIG9wdGlvbnMgKSB0aHJvd3MgWG1sRXhjZXB0aW9uOwotICAgIC8qKiBQYXJzZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIHR5cGUuICovCi0gICAgcHVibGljIFhtbE9iamVjdCBwYXJzZSAoIEZpbGUgZmlsZSwgU2NoZW1hVHlwZSB0eXBlLCBYbWxPcHRpb25zIG9wdGlvbnMgKSB0aHJvd3MgWG1sRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbjsKLSAgICAvKiogUGFyc2VzIGFuIGluc3RhbmNlIG9mIHRoZSBnaXZlbiB0eXBlLiAqLwotICAgIHB1YmxpYyBYbWxPYmplY3QgcGFyc2UgKCBVUkwgZmlsZSwgU2NoZW1hVHlwZSB0eXBlLCBYbWxPcHRpb25zIG9wdGlvbnMgKSB0aHJvd3MgWG1sRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbjsKLSAgICAvKiogUGFyc2VzIGFuIGluc3RhbmNlIG9mIHRoZSBnaXZlbiB0eXBlLiAqLwotICAgIHB1YmxpYyBYbWxPYmplY3QgcGFyc2UgKCBJbnB1dFN0cmVhbSBqaW9pcywgU2NoZW1hVHlwZSB0eXBlLCBYbWxPcHRpb25zIG9wdGlvbnMgKSB0aHJvd3MgWG1sRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbjsKLSAgICAvKiogUGFyc2VzIGFuIGluc3RhbmNlIG9mIHRoZSBnaXZlbiB0eXBlLiAqLwotICAgIHB1YmxpYyBYbWxPYmplY3QgcGFyc2UgKCBYTUxTdHJlYW1SZWFkZXIgeHNyLCBTY2hlbWFUeXBlIHR5cGUsIFhtbE9wdGlvbnMgb3B0aW9ucyApIHRocm93cyBYbWxFeGNlcHRpb247Ci0gICAgLyoqIFBhcnNlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gdHlwZS4gKi8KLSAgICBwdWJsaWMgWG1sT2JqZWN0IHBhcnNlICggUmVhZGVyIGppb3IsIFNjaGVtYVR5cGUgdHlwZSwgWG1sT3B0aW9ucyBvcHRpb25zICkgdGhyb3dzIFhtbEV4Y2VwdGlvbiwgSU9FeGNlcHRpb247Ci0gICAgLyoqIFBhcnNlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gdHlwZS4gKi8KLSAgICBwdWJsaWMgWG1sT2JqZWN0IHBhcnNlICggTm9kZSBub2RlLCBTY2hlbWFUeXBlIHR5cGUsIFhtbE9wdGlvbnMgb3B0aW9ucyApIHRocm93cyBYbWxFeGNlcHRpb247Ci0gICAgLyoqIFBhcnNlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gdHlwZS4gKi8KLSAgICBwdWJsaWMgWG1sT2JqZWN0IHBhcnNlICggWE1MSW5wdXRTdHJlYW0geGlzLCBTY2hlbWFUeXBlIHR5cGUsIFhtbE9wdGlvbnMgb3B0aW9ucyApIHRocm93cyBYbWxFeGNlcHRpb24sIFhNTFN0cmVhbUV4Y2VwdGlvbjsKLSAgICAvKiogUmV0dXJucyBhbiBYbWxTYXhIYW5kbGVyIHRoYXQgY2FuIHBhcnNlIGFuIGluc3RhbmNlIG9mIHRoZSBnaXZlbiB0eXBlLiAqLwotICAgIHB1YmxpYyBYbWxTYXhIYW5kbGVyIG5ld1htbFNheEhhbmRsZXIgKCBTY2hlbWFUeXBlIHR5cGUsIFhtbE9wdGlvbnMgb3B0aW9ucyApOwotICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbSB0aGF0IHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHRoZSBYTUwgaXMgbm90IHZhbGlkICovCi0gICAgcHVibGljIFhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSAoIFhNTElucHV0U3RyZWFtIHhpcywgU2NoZW1hVHlwZSB0eXBlLCBYbWxPcHRpb25zIG9wdGlvbnMgKSB0aHJvd3MgWG1sRXhjZXB0aW9uLCBYTUxTdHJlYW1FeGNlcHRpb247Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY0YjJiZC4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotLyoqCi0gKiBBbiBleGNlcHRpb24gdGhhdCBpcyB0aHJvd24gaWYgdGhlcmUgaXMgY29ycnVwdGlvbiBvciBhIHZlcnNpb24gbWlzbWF0Y2gKLSAqIGluIGEgY29tcGlsZWQgc2NoZW1hIHR5cGUgc3lzdGVtLgotICovIAotcHVibGljIGNsYXNzIFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24gZXh0ZW5kcyBYbWxSdW50aW1lRXhjZXB0aW9uCi17Ci0gICAgcHJpdmF0ZSBpbnQgX2NvZGU7Ci0gICAgCi0gICAgLyoqIENvbnN0cnVjdHMgYW4gZXhjZXB0aW9uIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UsIGZpbGVuYW1lLCBleHRlbnNpb24sIGFuZCBjb2RlICovCi0gICAgcHVibGljIFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFN0cmluZyBuYW1lLCBTdHJpbmcgaGFuZGxlLCBpbnQgY29kZSkKLSAgICB7Ci0gICAgICAgIHN1cGVyKG1lc3NhZ2UgKyAiICgiICsgbmFtZSArICIuIiArIGhhbmRsZSArICIpIC0gY29kZSAiICsgY29kZSk7Ci0gICAgICAgIF9jb2RlID0gY29kZTsKLSAgICB9Ci0KLSAgICAvKiogQ29uc3RydWN0cyBhbiBleGNlcHRpb24gd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZSwgZmlsZW5hbWUsIGV4dGVuc2lvbiwgY29kZSwgYW5kIGNhdXNlICovCi0gICAgcHVibGljIFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFN0cmluZyBuYW1lLCBTdHJpbmcgaGFuZGxlLCBpbnQgY29kZSwgRXhjZXB0aW9uIGNhdXNlKQotICAgIHsKLSAgICAgICAgc3VwZXIobWVzc2FnZSArICIgKCIgKyBuYW1lICsgIi4iICsgaGFuZGxlICsgIikgLSBjb2RlICIgKyBjb2RlKTsKLSAgICAgICAgX2NvZGUgPSBjb2RlOwotICAgICAgICBpbml0Q2F1c2UoY2F1c2UpOwotICAgIH0KLQotICAgIC8qKiBSZXR1cm5zIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLCBnaXZlbiBieSBvbmUgb2YgdGhlIG51bWVyaWMgY29uc3RhbnRzIGluIHRoaXMgY2xhc3MgKi8KLSAgICBwdWJsaWMgaW50IGdldENvZGUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9jb2RlOwotICAgIH0KLQotICAgIC8qIFNlZSB7QGxpbmsgI2dldENvZGV9LiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5PX1JFU09VUkNFID0gMDsKLSAgICAvKiBTZWUge0BsaW5rICNnZXRDb2RlfS4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXUk9OR19NQUdJQ19DT09LSUUgPSAxOwotICAgIC8qIFNlZSB7QGxpbmsgI2dldENvZGV9LiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdST05HX01BSk9SX1ZFUlNJT04gPSAyOwotICAgIC8qIFNlZSB7QGxpbmsgI2dldENvZGV9LiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdST05HX01JTk9SX1ZFUlNJT04gPSAzOwotICAgIC8qIFNlZSB7QGxpbmsgI2dldENvZGV9LiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdST05HX0ZJTEVfVFlQRSA9IDQ7Ci0gICAgLyogU2VlIHtAbGluayAjZ2V0Q29kZX0uICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgVU5SRUNPR05JWkVEX0lOREVYX0VOVFJZID0gNTsKLSAgICAvKiBTZWUge0BsaW5rICNnZXRDb2RlfS4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXUk9OR19QUk9QRVJUWV9UWVBFID0gNjsKLSAgICAvKiBTZWUge0BsaW5rICNnZXRDb2RlfS4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBNQUxGT1JNRURfQ09OVEVOVF9NT0RFTCA9IDc7Ci0gICAgLyogU2VlIHtAbGluayAjZ2V0Q29kZX0uICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV1JPTkdfU0lNUExFX1ZBUklFVFkgPSA4OwotICAgIC8qIFNlZSB7QGxpbmsgI2dldENvZGV9LiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElPX0VYQ0VQVElPTiA9IDk7Ci0gICAgLyogU2VlIHtAbGluayAjZ2V0Q29kZX0uICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5UX1RPT19MQVJHRSA9IDEwOwotICAgIC8qIFNlZSB7QGxpbmsgI2dldENvZGV9LiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJBRF9QQVJUSUNMRV9UWVBFID0gMTE7Ci0gICAgLyogU2VlIHtAbGluayAjZ2V0Q29kZX0uICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTk9UX1dSSVRFQUJMRSA9IDEyOwotICAgIC8qIFNlZSB7QGxpbmsgI2dldENvZGV9LiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEJBRF9IQU5ETEUgPSAxMzsKLSAgICAvKiBTZWUge0BsaW5rICNnZXRDb2RlfS4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVNURURfRVhDRVBUSU9OID0gMTQ7Ci19Ci0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTIwZjVlLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDAgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotCi0vKioKLSAqIEEgZmluaXRlIHNldCBvZiBYTUwgU2NoZW1hIGNvbXBvbmVudCBkZWZpbml0aW9ucy4KLSAqIDxwPgotICogRXZlcnkge0BsaW5rIFNjaGVtYUNvbXBvbmVudH0gc3VjaCBhcyBhIHtAbGluayBTY2hlbWFUeXBlfSwKLSAqIHtAbGluayBTY2hlbWFHbG9iYWxFbGVtZW50fSwge0BsaW5rIFNjaGVtYUdsb2JhbEF0dHJpYnV0ZX0sCi0gKiB7QGxpbmsgU2NoZW1hTW9kZWxHcm91cH0sIHtAbGluayBTY2hlbWFBdHRyaWJ1dGVHcm91cH0sIG9yCi0gKiB7QGxpbmsgU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50fSwgaXMgZGVmaW5lZCBpbiBleGFjdGx5IG9uZQotICogU2NoZW1hVHlwZVN5c3RlbS4gIChTZWUge0BsaW5rIFNjaGVtYUNvbXBvbmVudCNnZXRUeXBlU3lzdGVtKCl9LikKLSAqIEEgc2luZ2xlIFNjaGVtYVR5cGVTeXN0ZW0gY2FuIGluY2x1ZGUgZGVmaW5pdGlvbnMKLSAqIGZyb20gYW55IG51bWJlciBvZiBuYW1lc3BhY2VzOyBvbmUgU2NoZW1hVHlwZVN5c3RlbSBjb25zaXN0cyBzaW1wbHkKLSAqIG9mIGEgc2V0IG9mIGNvbXBvbmVudCBkZWZpbml0aW9ucyB0aGF0IHdlcmUgY29tcGlsZWQgdG9nZXRoZXIuCi0gKiA8cD4KLSAqIFNpbmNlIGV2ZXJ5IGNvbXBvbmVudCBpcyBkZWZpbmVkIGluIGEgc2luZ2xlIFNjaGVtYVR5cGVTeXN0ZW0sIG5vCi0gKiBTY2hlbWFUeXBlU3lzdGVtIG90aGVyIHRoYW4ge0BsaW5rIFhtbEJlYW5zI2dldEJ1aWx0aW5UeXBlU3lzdGVtKCl9Ci0gKiBpbmNsdWRlcyBhbnkgb2YgdGhlIHRoZSBidWlsdC1pbiB0eXBlcy4gIFRoYXQgbWVhbnMKLSAqIHlvdSBjYW5ub3Qgb3JkaW5hcmlseSBsb2FkIGluc3RhbmNlcyB1c2luZyBhIHNpbmdsZQotICogU2NoZW1hVHlwZVN5c3RlbSBieSBpdHNlbGYuIEluc3RlYWQsIHlvdSB3aWxsIHdhbnQgdG8gY29tYmluZSBhIHBhdGggb2YKLSAqIFNjaGVtYVR5cGVTeXN0ZW1zIHRvZ2V0aGVyIHVzaW5nIHtAbGluayBYbWxCZWFucyN0eXBlTG9hZGVyVW5pb259Ci0gKiB0byBmb3JtIGEgU2NoZW1hVHlwZUxvYWRlciB0aGF0IGNhbiBiZSB1c2VkIGZvciBsb2FkaW5nIGluc3RhbmNlcy4KLSAqIDxwPgotICogRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZSBjb21waWxlcyB0aGUgc2NoZW1hIGluIG15WFNERmlsZQotICogaW4gdGhlIHByZXNlbmNlIG9mIG9ubHkgdGhlIG1pbmltYWwgYnVpbHRpbiB0eXBlIHN5c3RlbS4KLSAqIFRoZSByZXN1bHRpbmcgU2NoZW1hVHlwZVN5c3RlbSA8Y29kZT5zdHM8L2NvZGU+IGNvbnRhaW5zIG9ubHkgdGhlIGRlZmluaXRpb25zCi0gKiBmcm9tIG15WFNEIGZpbGUuICBJbiBvcmRlciB0byBsb2FkIGFuZCB2YWxpZGF0ZSBhbiBpbnN0YW5jZSB3aXRoaW4KLSAqIHRoZSBjb250ZXh0IG9mIHRob3NlIHR5cGVzLCB3ZSBtdXN0IG5leHQgY29uc3RydWN0IGEKLSAqIHtAbGluayBTY2hlbWFUeXBlTG9hZGVyfSA8Y29kZT5zdGw8L2NvZGU+IHRoYXQgY29udGFpbnMgYm90aAotICogdGhlIGJ1aWx0aW4gdHlwZSBzeXN0ZW0gYW5kIHRoZSB0eXBlcyBkZWZpbmVkIHdpdGhpbiB0aGUgbXlYU0QgZmlsZS4KLSAqIDxwcmU+Ci0gKiBTY2hlbWFUeXBlU3lzdGVtIHN0cyA9IFhtbEJlYW5zLmNvbXBpbGVYc2QobmV3IFhtbE9iamVjdFtdCi0gKiAgICB7IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKG15WFNERmlsZSkgfSwKLSAqICAgIFhtbEJlYW5zLmdldEJ1aWx0aW5UeXBlU3lzdGVtKCksCi0gKiAgICBudWxsKTsKLSAqIFNjaGVtYVR5cGVMb2FkZXIgc3RsID0gWG1sQmVhbnMudHlwZUxvYWRlclVuaW9uKG5ldyBTY2hlbWFUeXBlTG9hZGVyW10KLSAqICAgIHsgc3RzLCBYbWxCZWFucy5nZXRCdWlsdGluVHlwZVN5c3RlbSgpIH0pOwotICogWG1sT2JqZWN0IG15ZG9jID0gc3RsLnBhcnNlKGluc3RhbmNlRmlsZSwgbnVsbCwgbnVsbCk7Ci0gKiBTeXN0ZW0ub3V0LnByaW50bG4oIkRvY3VtZW50IHZhbGlkOiAiICsgbXlkb2MudmFsaWRhdGUoKSk7Ci0gKiA8L3ByZT4KLSAqIDxwPgotICogQXMgeW91IGNhbiBzZWUsIGZvciB3b3JraW5nIHdpdGggaW5zdGFuY2VzLCB5b3UgdHlwaWNhbGx5IHdhbnQgdG8KLSAqIHdvcmsgd2l0aCBhIFNjaGVtYVR5cGVMb2FkZXIgY29uc3RydWN0ZWQgZnJvbSBhIHBhdGggcmF0aGVyIHRoYW4KLSAqIGEgc29saXRhcnkgU2NoZW1hVHlwZVN5c3RlbS4gIFNlZSB7QGxpbmsgWG1sQmVhbnMjbG9hZFhzZH0gZm9yCi0gKiBhIGNvbnZlbmllbnQgYWx0ZXJuYXRpdmUgdG8ge0BsaW5rIFhtbEJlYW5zI2NvbXBpbGVYc2R9LgotICogPHA+Ci0gKiBBIFNjaGVtYVR5cGVTeXN0ZW0gaXMgdXNlZnVsIHdoZW4geW91IG5lZWQgdG8gZW51bWVyYXRlIHRoZSBleGFjdCBzZXQKLSAqIG9mIGNvbXBvbmVudCBkZWZpbml0aW9ucyBkZXJpdmVkIGZyb20gYSBzZXQgb2YgWFNEIGZpbGVzLCBmb3IgZXhhbXBsZSwKLSAqIHdoZW4geW91IGFyZSBhbmFseXppbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBYU0QgZmlsZXMgdGhlbXNlbHZlcy4KLSAqIEhlcmUgaXMgaG93IHRvIHVzZSBhIFNjaGVtYVR5cGVTeXN0ZW0gdG8gaW5zcGVjdCBhIHNldCBvZiBzY2hlbWEKLSAqIGRlZmluaXRpb25zOgotICogPG9sPgotICogPGxpPkZpcnN0LCB1c2Uge0BsaW5rIFhtbEJlYW5zI2NvbXBpbGVYc2R9IHRvIGNvbXBpbGUgYW55IG51bWJlcgotICogICAgIG9mIHNjaGVtYSBmaWxlcy4gIElmIHRoZSBzY2hlbWEgZmlsZXMgYXJlIHZhbGlkLCByZXN1bHQgd2lsbAotICogICAgIGJlIGEgU2NoZW1hVHlwZVN5c3RlbSB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgY29tcG9uZW50IGRlZmluaXRpb25zCi0gKiAgICAgZnJvbSB0aG9zZSBmaWxlcy4gIEl0IHdpbGwgY29udGFpbiBubyBvdGhlciBjb21wb25lbnQgZGVmaW5pdGlvbnMuCi0gKiA8bGk+QWx0ZXJuYXRpdmVseSwgY2FsbCB7QGxpbmsgU2NoZW1hQ29tcG9uZW50I2dldFR5cGVTeXN0ZW19IG9uCi0gKiAgICAgYSBwcmVjb21waWxlZCBzY2hlbWEgY29tcG9uZW50IHRvIGRpc2NvdmVyIHRoZSBTY2hlbWFUeXBlU3lzdGVtCi0gKiAgICAgd2l0aGluIHdoaWNoIHRoYXQgY29tcG9uZW50IHdhcyBvcmlnaW5hbGx5IGNvbXBpbGVkLgotICogPGxpPk9uY2UgeW91IGhhdmUgYSBTY2hlbWFUeXBlU3lzdGVtLCBjYWxsOgotICogICA8dWw+Ci0gKiAgIDxsaT4ge0BsaW5rICNnbG9iYWxUeXBlcygpfSBmb3IgYWxsIHRoZSBnbG9iYWwgdHlwZSBkZWZpbml0aW9ucy4KLSAqICAgPGxpPiB7QGxpbmsgI2dsb2JhbEVsZW1lbnRzKCl9IGZvciBhbGwgdGhlIGdsb2JhbCBlbGVtZW50IGRlZmluaXRpb25zLgotICogICA8bGk+IHtAbGluayAjZ2xvYmFsQXR0cmlidXRlcygpfSBmb3IgYWxsIHRoZSBnbG9iYWwgYXR0cmlidXRlIGRlZmluaXRpb25zLgotICogICA8bGk+IHtAbGluayAjbW9kZWxHcm91cHMoKX0gZm9yIGFsbCB0aGUgbmFtZWQgbW9kZWwgZ3JvdXAgZGVmaW5pdGlvbnMuCi0gKiAgIDxsaT4ge0BsaW5rICNhdHRyaWJ1dGVHcm91cHMoKX0gZm9yIGFsbCB0aGUgYXR0cmlidXRlIGdyb3VwIGRlZmluaXRpb25zLgotICogICA8L3VsPgotICogPGxpPkluIGFkZGl0aW9uLCB0aGVyZSBhcmUgc3BlY2lhbCB0eXBlcyBnZW5lcmF0ZWQgZm9yIFhNTCBCZWFucyB0aGFyZQotICogICAgIGFyZSBub3QgZm9ybWFsbHkgcGFydCBvZiB0aGUgU2NoZW1hIHNwZWNpZmljYXRpb246Ci0gKiAgIDx1bD4KLSAqICAgPGxpPiB7QGxpbmsgI2RvY3VtZW50VHlwZXMoKX0gcmV0dXJucyBhbGwgdGhlIGRvY3VtZW50IHR5cGVzLgotICogICA8bGk+IHtAbGluayAjYXR0cmlidXRlVHlwZXMoKX0gcmV0dXJucyBhbGwgdGhlIGF0dHJpYnV0ZSB0eXBlcy4KLSAqICAgPC91bD4KLSAqIDwvb2w+Ci0gKiAKLSAqIDxwPgotICogQSBkb2N1bWVudCB0eXBlIGlzIGEgdHlwZSB0aGF0IGNvbnRhaW5zIGEgc2luZ2xlIGdsb2JhbCBlbGVtZW50OyB0aGVyZQotICogaXMgb25lIGRvY3VtZW50IHR5cGUgZm9yIGVhY2ggZ2xvYmFsIGVsZW1lbnQgZGVmaW5pdGlvbiBpbiBhCi0gKiBTY2hlbWFUeXBlU3lzdGVtLiAgSW4gYW4gaW5zdGFuY2UgZG9jdW1lbnQsIG9ubHkgdGhlIHJvb3QgWG1sT2JqZWN0Ci0gKiBjYW4gaGF2ZSBhIGRvY3VtZW50IHR5cGUgYXMgaXRzIHR5cGUuCi0gKiA8cD4KLSAqIFNpbWlsYXJseSwgYW4gYXR0cmlidXRlIHR5cGUgaXMgYSB0eXBlIHRoYXQgY29udGFpbnMgYSBzaW5nbGUgZ2xvYmFsCi0gKiBhdHRyaWJ1dGUsIGFuZCB0aGVyZSBpcyBvbmUgYXR0cmlidXRlIHR5cGUgZm9yIGVhY2ggZ2xvYmFsIGF0dHJpYnV0ZQotICogZGVmaW5pdGlvbiBpbiBhIFNjaGVtYVR5cGVTeXN0ZW0uICBJdCBpcyBwb3NzaWJsZSB0byBoYXZlIGEgcm9vdAotICogWG1sT2JqZWN0IHJlcHJlc2VudGluZyBhIGZyYWdtZW50IHdob3NlIHR5cGUgaXMgYW4gYXR0cmlidXRlIHR5cGUsCi0gKiBidXQgYXR0cmlidXRlIHR5cGVzIGFyZSBwcmVzZW50IG1haW5seSBmb3Igc3ltbWV0cnkgYW5kIHRvIHNpbXBsaWZ5Ci0gKiBjb2RlIHN1Y2ggYXMgdGhlIHR5cGUtdHJlZS13YWxraW5nIGNvZGUgYmVsb3cuCi0gKiA8cD4KLSAqIFRoZSBnbG9iYWwgY29tcG9uZW50IG1ldGhvZHMgYWJvdmUgb25seSBwcm92aWRlIGEgdmlldyBvZiB0aGUgdG9wLWxldmVsCi0gKiBjb21wb25lbnRzIG9mIGEgU2NoZW1hVHlwZVN5c3RlbSBhbmQgZG8gbm90IGluY2x1ZGUgYW55IG5lc3RlZAotICogZGVmaW5pdGlvbnMuICBUbyB2aWV3IGFsbCB0aGUgbmVzdGVkIGRlZmluaXRpb25zLCB5b3Ugd2lsbCB3YW50IHRvCi0gKiB0cmF2ZXJzZSB0aGUgZW50aXJlIHRyZWUgb2Yge0BsaW5rIFNjaGVtYVR5cGV9IGRlZmludGlvbnMgd2l0aGluIGEKLSAqIFNjaGVtYVR5cGVTeXN0ZW0gYnkgZXhhbWluaW5nIHRoZSB7QGxpbmsgU2NoZW1hVHlwZSNnZXRBbm9ueW1vdXNUeXBlcygpfQotICogd2l0aGluIGVhY2gge0BsaW5rIFNjaGVtYVR5cGV9IHJlY3Vyc2l2ZWx5LgotICogPHA+VGhlIGZvbGxvd2luZyBjb2RlIGlzIGEgc3RhbmRhcmQgdHJlZXdhbGsgdGhhdCB2aXNpdHMgZXZlcnkKLSAqIHtAbGluayBTY2hlbWFUeXBlfSBpbiB0aGUgU2NoZW1hVHlwZVN5c3RlbSBvbmNlLCBpbmNsdWRpbmcgbmVzdGVkCi0gKiBkZWZpbml0aW9ucy4KLSAqIDxwcmU+Ci0gKiBMaXN0IGFsbFNlZW5UeXBlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAqIGFsbFNlZW5UeXBlcy5hZGRBbGwoQXJyYXlzLmFzTGlzdCh0eXBlU3lzdGVtLmRvY3VtZW50VHlwZXMoKSkpOwotICogYWxsU2VlblR5cGVzLmFkZEFsbChBcnJheXMuYXNMaXN0KHR5cGVTeXN0ZW0uYXR0cmlidXRlVHlwZXMoKSkpOwotICogYWxsU2VlblR5cGVzLmFkZEFsbChBcnJheXMuYXNMaXN0KHR5cGVTeXN0ZW0uZ2xvYmFsVHlwZXMoKSkpOwotICogZm9yIChpbnQgaSA9IDA7IGkgPCBhbGxTZWVuVHlwZXMuc2l6ZSgpOyBpKyspCi0gKiB7Ci0gKiAgICAgU2NoZW1hVHlwZSBzVHlwZSA9IChTY2hlbWFUeXBlKWFsbFNlZW5UeXBlcy5nZXQoaSk7Ci0gKiAgICAgU3lzdGVtLm91dC5wcmlubG50KCJWaXNpdGluZyAiICsgc1R5cGUudG9TdHJpbmcoKSk7Ci0gKiAgICAgYWxsU2VlblR5cGVzLmFkZEFsbChBcnJheXMuYXNMaXN0KHNUeXBlLmdldEFub255bW91c1R5cGVzKCkpKTsKLSAqIH0KLSAqIDwvcHJlPgotICoKLSAqIEBzZWUgU2NoZW1hVHlwZSAKLSAqIEBzZWUgU2NoZW1hVHlwZUxvYWRlciAKLSAqIEBzZWUgWG1sQmVhbnMjY29tcGlsZVhzZAotICogQHNlZSBYbWxCZWFucyN0eXBlTG9hZGVyVW5pb24KLSAqIEBzZWUgWG1sQmVhbnMjZ2V0QnVpbHRpblR5cGVTeXN0ZW0KLSAqLyAKLXB1YmxpYyBpbnRlcmZhY2UgU2NoZW1hVHlwZVN5c3RlbSBleHRlbmRzIFNjaGVtYVR5cGVMb2FkZXIKLXsKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoaXMgbG9hZGVyLgotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgZ2xvYmFsIHR5cGVzIGRlZmluZWQgaW4gdGhpcyBsb2FkZXIuCi0gICAgICovCi0gICAgcHVibGljIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVtdIGdsb2JhbFR5cGVzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBkb2N1bWVudCB0eXBlcyBkZWZpbmVkIGluIHRoaXMgbG9hZGVyLgotICAgICAqLwotICAgIHB1YmxpYyBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVbXSBkb2N1bWVudFR5cGVzKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBhdHRyaWJ1dGUgdHlwZXMgZGVmaW5lZCBpbiB0aGlzIGxvYWRlci4KLSAgICAgKi8KLSAgICBwdWJsaWMgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlW10gYXR0cmlidXRlVHlwZXMoKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGdsb2JhbCBlbGVtZW50cyBkZWZpbmVkIGluIHRoaXMgbG9hZGVyLgotICAgICAqLwotICAgIHB1YmxpYyBTY2hlbWFHbG9iYWxFbGVtZW50W10gZ2xvYmFsRWxlbWVudHMoKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGdsb2JhbCBhdHRyaWJ1dGVzIGRlZmluZWQgaW4gdGhpcyBsb2FkZXIuCi0gICAgICovCi0gICAgcHVibGljIFNjaGVtYUdsb2JhbEF0dHJpYnV0ZVtdIGdsb2JhbEF0dHJpYnV0ZXMoKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIG1vZGVsIGdyb3VwcyBkZWZpbmVkIGluIHRoaXMgbG9hZGVyLgotICAgICAqLwotICAgIHB1YmxpYyBTY2hlbWFNb2RlbEdyb3VwW10gbW9kZWxHcm91cHMoKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGF0dHJpYnV0ZSBncm91cHMgZGVmaW5lZCBpbiB0aGlzIGxvYWRlci4KLSAgICAgKi8KLSAgICBwdWJsaWMgU2NoZW1hQXR0cmlidXRlR3JvdXBbXSBhdHRyaWJ1dGVHcm91cHMoKTsKLQotICAgIC8qKgotICAgICAqIEluaXRpYWxpemVzIGEgdHlwZSBzeXN0ZW0gKHJlc29sdmVzIGFsbCBoYW5kbGVzIHdpdGhpbiB0aGUgdHlwZSBzeXN0ZW0pLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHJlc29sdmUoKTsKLQotICAgIC8qKgotICAgICAqIExvY2F0ZXMgYSB0eXBlLCBlbGVtZW50LCBvciBhdHRyaWJ1dGUgdXNpbmcgdGhlIGhhbmRsZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgU2NoZW1hQ29tcG9uZW50IHJlc29sdmVIYW5kbGUoU3RyaW5nIGhhbmRsZSk7Ci0KLSAgICAvKioKLSAgICAgKiBMb2NhdGVzIGEgdHlwZSwgZWxlbWVudCwgb3IgYXR0cmlidXRlIHVzaW5nIHRoZSBoYW5kbGUuCi0gICAgICovCi0gICAgcHVibGljIFNjaGVtYVR5cGUgdHlwZUZvckhhbmRsZShTdHJpbmcgaGFuZGxlKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGNsYXNzbG9hZGVyIHVzZWQgYnkgdGhpcyBsb2FkZXIgZm9yIHJlc29sdmluZyB0eXBlcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgQ2xhc3NMb2FkZXIgZ2V0Q2xhc3NMb2FkZXIoKTsKLQotICAgIC8qKgotICAgICAqIFNhdmVzIHRoaXMgdHlwZSB0byBhIGRpcmVjdG9yeS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzYXZlVG9EaXJlY3RvcnkoRmlsZSBjbGFzc0Rpcik7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDliY2E3Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzc0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci1pbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOwotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwotCi0vKioKLSAqIEFsbCBYbWxPYmplY3QgaW1wbGVtZW50YXRpb25zIGNhbiBiZSBjb2VyY2VkIHRvIFNpbXBsZVZhbHVlLgotICogRm9yIGFueSBnaXZlbiBzY2hlbWEgdHlwZSwgb25seSBhIHN1YnNldCBvZiB0aGUgY29udmVyc2lvbgotICogbWV0aG9kcyB3aWxsIHdvcmsuICBPdGhlcnMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24uCi0gKiA8cD4KLSAqIFNpbXBsZVZhbHVlIGlzIHVzZWZ1bCBmb3IgZGVjbGFyaW5nIHZhcmlhYmxlcyB3aGljaCBjYW4gaG9sZAotICogbW9yZSB0aGFuIG9uZSBzaW1pbGFyIHNjaGVtYSB0eXBlIHRoYXQgbWF5IG5vdCBoYXBwZW4gdG8KLSAqIGhhdmUgYSBjb21tb24gWE1MIGJhc2UgdHlwZSwgZm9yIGV4YW1wbGUsIHR3byBsaXN0IHR5cGVzLAotICogb3IgdHdvIHVucmVsYXRlZCBpbnRlZ2VyIHJlc3RyaWN0aW9ucyB0aGF0IGhhcHBlbiB0byBmaXQKLSAqIGludG8gYW4gaW50LgotICovCi1wdWJsaWMgaW50ZXJmYWNlIFNpbXBsZVZhbHVlIGV4dGVuZHMgWG1sT2JqZWN0Ci17Ci0gICAgLyoqCi0gICAgICogVGhlIHNhbWUgYXMgZ2V0U2NoZW1hVHlwZSB1bmxlc3MgdGhpcyBpcyBhIHVuaW9uIGluc3RhbmNlCi0gICAgICogb3IgbmlsIHZhbHVlLgotICAgICAqIDxwPgotICAgICAqIEZvciB1bmlvbnMsIHRoaXMgcmV0dXJucyB0aGUgbm9uLXVuaW9uIGNvbnNpdHVlbnQgdHlwZSBvZgotICAgICAqIHRoaXMgaW5zdGFuY2UuIFRoaXMgdHlwZSBtYXkgY2hhbmdlIGlmIHNldHRlcnMgYXJlIGNhbGxlZAotICAgICAqIHRoYXQgY2F1c2UgdGhlIGluc3RhbmNlIHRvIGNoYW5nZSB0byBhbm90aGVyIGNvbnN0aXR1ZW50Ci0gICAgICogdHlwZSBvZiB0aGUgdW5pb24uCi0gICAgICogPHA+Ci0gICAgICogRm9yIG5pbCB2YWx1ZXMsIHRoaXMgcmV0dXJucyBudWxsLgotICAgICAqLwotICAgIFNjaGVtYVR5cGUgaW5zdGFuY2VUeXBlKCk7Ci0KLSAgICAvKiogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgU3RyaW5nfS4gKi8KLSAgICBTdHJpbmcgZ2V0U3RyaW5nVmFsdWUoKTsKLSAgICAvKiogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSBib29sZWFuLiAqLwotICAgIGJvb2xlYW4gZ2V0Qm9vbGVhblZhbHVlKCk7Ci0gICAgLyoqIFJldHVybnMgdGhlIHZhbHVlIGFzIGEgYnl0ZS4gKi8KLSAgICBwdWJsaWMgYnl0ZSBnZXRCeXRlVmFsdWUoKTsKLSAgICAvKiogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSBzaG9ydC4gKi8KLSAgICBwdWJsaWMgc2hvcnQgZ2V0U2hvcnRWYWx1ZSgpOwotICAgIC8qKiBSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhbiBpbnQuICovCi0gICAgcHVibGljIGludCBnZXRJbnRWYWx1ZSgpOwotICAgIC8qKiBSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIGxvbmcuICovCi0gICAgcHVibGljIGxvbmcgZ2V0TG9uZ1ZhbHVlKCk7Ci0gICAgLyoqIFJldHVybnMgdGhlIHZhbHVlIGFzIGEge0BsaW5rIEJpZ0ludGVnZXJ9LiAqLwotICAgIHB1YmxpYyBCaWdJbnRlZ2VyIGdldEJpZ0ludGVnZXJWYWx1ZSgpOwotICAgIC8qKiBSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIHtAbGluayBCaWdEZWNpbWFsfS4gKi8KLSAgICBwdWJsaWMgQmlnRGVjaW1hbCBnZXRCaWdEZWNpbWFsVmFsdWUoKTsKLSAgICAvKiogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSBmbG9hdC4gKi8KLSAgICBwdWJsaWMgZmxvYXQgZ2V0RmxvYXRWYWx1ZSgpOwotICAgIC8qKiBSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIGRvdWJsZS4gKi8KLSAgICBwdWJsaWMgZG91YmxlIGdldERvdWJsZVZhbHVlKCk7Ci0gICAgLyoqIFJldHVybnMgdGhlIHZhbHVlIGFzIGEgYnl0ZSBhcnJheS4gKi8KLSAgICBieXRlW10gZ2V0Qnl0ZUFycmF5VmFsdWUoKTsKLSAgICAvKiogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgU3RyaW5nRW51bUFic3RyYWN0QmFzZX0uICovCi0gICAgU3RyaW5nRW51bUFic3RyYWN0QmFzZSBnZXRFbnVtVmFsdWUoKTsKLSAgICAvKiogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgQ2FsZW5kYXJ9LiAqLwotICAgIENhbGVuZGFyIGdldENhbGVuZGFyVmFsdWUoKTsKLSAgICAvKiogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgRGF0ZX0uICovCi0gICAgRGF0ZSBnZXREYXRlVmFsdWUoKTsKLSAgICAvKiogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgR0RhdGV9LiAqLwotICAgIEdEYXRlIGdldEdEYXRlVmFsdWUoKTsKLSAgICAvKiogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgR0R1cmF0aW9ufS4gKi8KLSAgICBHRHVyYXRpb24gZ2V0R0R1cmF0aW9uVmFsdWUoKTsKLSAgICAvKiogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgUU5hbWV9LiAqLwotICAgIFFOYW1lIGdldFFOYW1lVmFsdWUoKTsKLSAgICAvKiogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgTGlzdH0gb2YgZnJpZW5kbHkgSmF2YSBvYmplY3RzIChTdHJpbmcsIEludGVnZXIsIEJ5dGUsIFNob3J0LCBMb25nLCBCaWdJbnRlZ2VyLCBEZWNpbWFsLCBGbG9hdCwgRG91YmxlLCBieXRlW10sIENhbGVuZGFyLCBHRHVyYXRpb24pLiAqLwotICAgIExpc3QgZ2V0TGlzdFZhbHVlKCk7Ci0gICAgLyoqIFJldHVybnMgdGhlIHZhbHVlIGFzIGEge0BsaW5rIExpc3R9IG9mIFhtbEFueVNpbXBsZVR5cGUgb2JqZWN0cy4gKi8KLSAgICBMaXN0IHhnZXRMaXN0VmFsdWUoKTsKLQotICAgIC8qKiBSZXR1cm5zIGEgdW5pb24gdmFsdWUgYXMgYSBpdHMgbmF0dXJhbCBmcmllbmRseSBKYXZhIG9iamVjdCAoU3RyaW5nLCBJbnRlZ2VyLCBCeXRlLCBTaG9ydCwgTG9uZywgQmlnSW50ZWdlciwgRGVjaW1hbCwgRmxvYXQsIERvdWJsZSwgYnl0ZVtdLCBDYWxlbmRhciwgR0R1cmF0aW9uKS4gKi8KLSAgICBPYmplY3QgZ2V0T2JqZWN0VmFsdWUoKTsKLQotICAgIC8vIGZvbGxvd2luZyBhcmUgc2ltcGxlIHR5cGUgdmFsdWUgc2V0dGVycwotCi0gICAgLyoqIFNldHMgdGhlIHZhbHVlIGFzIGEge0BsaW5rIFN0cmluZ30uICovCi0gICAgdm9pZCBzZXRTdHJpbmdWYWx1ZShTdHJpbmcgb2JqKTsKLSAgICAvKiogU2V0cyB0aGUgdmFsdWUgYXMgYSBib29sZWFuLiAqLwotICAgIHZvaWQgc2V0Qm9vbGVhblZhbHVlKGJvb2xlYW4gdik7Ci0gICAgLyoqIFNldHMgdGhlIHZhbHVlIGFzIGEgYnl0ZS4gKi8KLSAgICB2b2lkIHNldEJ5dGVWYWx1ZShieXRlIHYpOwotICAgIC8qKiBTZXRzIHRoZSB2YWx1ZSBhcyBhIHNob3J0LiAqLwotICAgIHZvaWQgc2V0U2hvcnRWYWx1ZShzaG9ydCB2KTsKLSAgICAvKiogU2V0cyB0aGUgdmFsdWUgYXMgYW4gaW50LiAqLwotICAgIHZvaWQgc2V0SW50VmFsdWUoaW50IHYpOwotICAgIC8qKiBTZXRzIHRoZSB2YWx1ZSBhcyBhIGxvbmcuICovCi0gICAgdm9pZCBzZXRMb25nVmFsdWUobG9uZyB2KTsKLSAgICAvKiogU2V0cyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgQmlnSW50ZWdlcn0uICovCi0gICAgdm9pZCBzZXRCaWdJbnRlZ2VyVmFsdWUoQmlnSW50ZWdlciBvYmopOwotICAgIC8qKiBTZXRzIHRoZSB2YWx1ZSBhcyBhIHtAbGluayBCaWdEZWNpbWFsfS4gKi8KLSAgICB2b2lkIHNldEJpZ0RlY2ltYWxWYWx1ZShCaWdEZWNpbWFsIG9iaik7Ci0gICAgLyoqIFNldHMgdGhlIHZhbHVlIGFzIGEgZmxvYXQuICovCi0gICAgdm9pZCBzZXRGbG9hdFZhbHVlKGZsb2F0IHYpOwotICAgIC8qKiBTZXRzIHRoZSB2YWx1ZSBhcyBhIGRvdWJsZS4gKi8KLSAgICB2b2lkIHNldERvdWJsZVZhbHVlKGRvdWJsZSB2KTsKLSAgICAvKiogU2V0cyB0aGUgdmFsdWUgYXMgYSBieXRlIGFycmF5LiAqLwotICAgIHZvaWQgc2V0Qnl0ZUFycmF5VmFsdWUoYnl0ZVtdIG9iaik7Ci0gICAgLyoqIFNldHMgdGhlIHZhbHVlIGFzIGEge0BsaW5rIFN0cmluZ0VudW1BYnN0cmFjdEJhc2V9LiAqLwotICAgIHZvaWQgc2V0RW51bVZhbHVlKFN0cmluZ0VudW1BYnN0cmFjdEJhc2Ugb2JqKTsKLSAgICAvKiogU2V0cyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgQ2FsZW5kYXJ9LiAqLwotICAgIHZvaWQgc2V0Q2FsZW5kYXJWYWx1ZShDYWxlbmRhciBvYmopOwotICAgIC8qKiBTZXRzIHRoZSB2YWx1ZSBhcyBhIHtAbGluayBEYXRlfS4gKi8KLSAgICB2b2lkIHNldERhdGVWYWx1ZShEYXRlIG9iaik7Ci0gICAgLyoqIFNldHMgdGhlIHZhbHVlIGFzIGEge0BsaW5rIEdEYXRlfS4gKi8KLSAgICB2b2lkIHNldEdEYXRlVmFsdWUoR0RhdGUgb2JqKTsKLSAgICAvKiogU2V0cyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgR0R1cmF0aW9ufS4gKi8KLSAgICB2b2lkIHNldEdEdXJhdGlvblZhbHVlKEdEdXJhdGlvbiBvYmopOwotICAgIC8qKiBTZXRzIHRoZSB2YWx1ZSBhcyBhIHtAbGluayBRTmFtZX0uICovCi0gICAgdm9pZCBzZXRRTmFtZVZhbHVlKFFOYW1lIG9iaik7Ci0gICAgLyoqIFNldHMgdGhlIHZhbHVlIGFzIGEge0BsaW5rIExpc3R9LiAqLwotICAgIHZvaWQgc2V0TGlzdFZhbHVlKExpc3Qgb2JqKTsKLSAgICAvKiogU2V0cyB0aGUgdmFsdWUgYXMgYW4gYXJiaXRyYXJ5IHtAbGluayBPYmplY3R9LiAqLwotICAgIHZvaWQgc2V0T2JqZWN0VmFsdWUoT2JqZWN0IG9iaik7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIHtAbGluayBTdHJpbmd9LiAqCi0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI2dldFN0cmluZ1ZhbHVlfQotICAgICAqLwotICAgIFN0cmluZyBzdHJpbmdWYWx1ZSgpOwotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHZhbHVlIGFzIGEgYm9vbGVhbi4gKgotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNnZXRCb29sZWFuVmFsdWV9Ci0gICAgICovCi0gICAgYm9vbGVhbiBib29sZWFuVmFsdWUoKTsKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIGJ5dGUuICoKLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjZ2V0Qnl0ZVZhbHVlfQotICAgICAqLwotICAgIHB1YmxpYyBieXRlIGJ5dGVWYWx1ZSgpOwotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHZhbHVlIGFzIGEgc2hvcnQuICoKLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjZ2V0U2hvcnRWYWx1ZX0KLSAgICAgKi8KLSAgICBwdWJsaWMgc2hvcnQgc2hvcnRWYWx1ZSgpOwotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHZhbHVlIGFzIGFuIGludC4gKgotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNnZXRJbnRWYWx1ZX0KLSAgICAgKi8KLSAgICBwdWJsaWMgaW50IGludFZhbHVlKCk7Ci0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSBsb25nLiAqCi0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI2dldExvbmdWYWx1ZX0KLSAgICAgKi8KLSAgICBwdWJsaWMgbG9uZyBsb25nVmFsdWUoKTsKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIHtAbGluayBCaWdJbnRlZ2VyfS4gKgotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNnZXRCaWdJbnRlZ2VyVmFsdWV9Ci0gICAgICovCi0gICAgcHVibGljIEJpZ0ludGVnZXIgYmlnSW50ZWdlclZhbHVlKCk7Ci0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgQmlnRGVjaW1hbH0uICoKLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjZ2V0QmlnRGVjaW1hbFZhbHVlfQotICAgICAqLwotICAgIHB1YmxpYyBCaWdEZWNpbWFsIGJpZ0RlY2ltYWxWYWx1ZSgpOwotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHZhbHVlIGFzIGEgZmxvYXQuICoKLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjZ2V0RmxvYXRWYWx1ZX0KLSAgICAgKi8KLSAgICBwdWJsaWMgZmxvYXQgZmxvYXRWYWx1ZSgpOwotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHZhbHVlIGFzIGEgZG91YmxlLiAqCi0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI2dldERvdWJsZVZhbHVlfQotICAgICAqLwotICAgIHB1YmxpYyBkb3VibGUgZG91YmxlVmFsdWUoKTsKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIGJ5dGUgYXJyYXkuICoKLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjZ2V0Qnl0ZUFycmF5VmFsdWV9Ci0gICAgICovCi0gICAgYnl0ZVtdIGJ5dGVBcnJheVZhbHVlKCk7Ci0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgU3RyaW5nRW51bUFic3RyYWN0QmFzZX0uICoKLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjZ2V0RW51bVZhbHVlfQotICAgICAqLwotICAgIFN0cmluZ0VudW1BYnN0cmFjdEJhc2UgZW51bVZhbHVlKCk7Ci0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgQ2FsZW5kYXJ9LiAqCi0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI2dldENhbGVuZGFyVmFsdWV9Ci0gICAgICovCi0gICAgQ2FsZW5kYXIgY2FsZW5kYXJWYWx1ZSgpOwotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHZhbHVlIGFzIGEge0BsaW5rIERhdGV9LiAqCi0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI2dldERhdGVWYWx1ZX0KLSAgICAgKi8KLSAgICBEYXRlIGRhdGVWYWx1ZSgpOwotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHZhbHVlIGFzIGEge0BsaW5rIEdEYXRlfS4gKgotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNnZXRHRGF0ZVZhbHVlfQotICAgICAqLwotICAgIEdEYXRlIGdEYXRlVmFsdWUoKTsKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIHtAbGluayBHRHVyYXRpb259LiAqCi0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI2dldEdEdXJhdGlvblZhbHVlfQotICAgICAqLwotICAgIEdEdXJhdGlvbiBnRHVyYXRpb25WYWx1ZSgpOwotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHZhbHVlIGFzIGEge0BsaW5rIFFOYW1lfS4gKgotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNnZXRRTmFtZVZhbHVlfQotICAgICAqLwotICAgIFFOYW1lIHFOYW1lVmFsdWUoKTsKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIHtAbGluayBMaXN0fSBvZiBmcmllbmRseSBKYXZhIG9iamVjdHMgKFN0cmluZywgSW50ZWdlciwgQnl0ZSwgU2hvcnQsIExvbmcsIEJpZ0ludGVnZXIsIERlY2ltYWwsIEZsb2F0LCBEb3VibGUsIGJ5dGVbXSwgQ2FsZW5kYXIsIEdEdXJhdGlvbikuICoKLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjZ2V0TGlzdFZhbHVlfQotICAgICAqLwotICAgIExpc3QgbGlzdFZhbHVlKCk7Ci0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgTGlzdH0gb2YgWG1sQW55U2ltcGxlVHlwZSBvYmplY3RzLiAqCi0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI2dldExpc3RWYWx1ZX0KLSAgICAgKi8KLSAgICBMaXN0IHhsaXN0VmFsdWUoKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgdW5pb24gdmFsdWUgYXMgYSBpdHMgbmF0dXJhbCBmcmllbmRseSBKYXZhIG9iamVjdCAoU3RyaW5nLCBJbnRlZ2VyLCBCeXRlLCBTaG9ydCwgTG9uZywgQmlnSW50ZWdlciwgRGVjaW1hbCwgRmxvYXQsIERvdWJsZSwgYnl0ZVtdLCBDYWxlbmRhciwgR0R1cmF0aW9uKS4gKgotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNnZXRPYmplY3RWYWx1ZX0KLSAgICAgKi8KLSAgICBPYmplY3Qgb2JqZWN0VmFsdWUoKTsKLQotICAgIC8vIGZvbGxvd2luZyBhcmUgc2ltcGxlIHR5cGUgdmFsdWUgc2V0dGVycwotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgU3RyaW5nfS4gKgotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNzZXRTdHJpbmdWYWx1ZX0KLSAgICAgKi8KLSAgICB2b2lkIHNldChTdHJpbmcgb2JqKTsKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSB2YWx1ZSBhcyBhIGJvb2xlYW4uICoKLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjc2V0Qm9vbGVhblZhbHVlfQotICAgICAqLwotICAgIHZvaWQgc2V0KGJvb2xlYW4gdik7Ci0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgdmFsdWUgYXMgYSBieXRlLgotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNzZXRCeXRlVmFsdWV9Ci0gICAgICoqLwotICAgIHZvaWQgc2V0KGJ5dGUgdik7Ci0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgdmFsdWUgYXMgYSBzaG9ydC4KLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjc2V0U2hvcnRWYWx1ZX0KLSAgICAgKiovCi0gICAgdm9pZCBzZXQoc2hvcnQgdik7Ci0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgdmFsdWUgYXMgYW4gaW50LgotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNzZXRJbnRWYWx1ZX0KLSAgICAgKiovCi0gICAgdm9pZCBzZXQoaW50IHYpOwotICAgIC8qKgotICAgICAqIFNldHMgdGhlIHZhbHVlIGFzIGEgbG9uZy4KLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjc2V0TG9uZ1ZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIHNldChsb25nIHYpOwotICAgIC8qKgotICAgICAqIFNldHMgdGhlIHZhbHVlIGFzIGEge0BsaW5rIEJpZ0ludGVnZXJ9LgotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNzZXRCaWdJbnRlZ2VyVmFsdWV9Ci0gICAgICoqLwotICAgIHZvaWQgc2V0KEJpZ0ludGVnZXIgb2JqKTsKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSB2YWx1ZSBhcyBhIHtAbGluayBCaWdEZWNpbWFsfQotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNzZXRCaWdEZWNpbWFsVmFsdWV9Ci0gICAgICoqLwotICAgIHZvaWQgc2V0KEJpZ0RlY2ltYWwgb2JqKTsKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSB2YWx1ZSBhcyBhIGZsb2F0LgotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNzZXRGbG9hdFZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIHNldChmbG9hdCB2KTsKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSB2YWx1ZSBhcyBhIGRvdWJsZS4KLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjc2V0RG91YmxlVmFsdWV9Ci0gICAgICoqLwotICAgIHZvaWQgc2V0KGRvdWJsZSB2KTsKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSB2YWx1ZSBhcyBhIGJ5dGUgYXJyYXkuCi0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI3NldEJ5dGVBcnJheVZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIHNldChieXRlW10gb2JqKTsKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSB2YWx1ZSBhcyBhIHtAbGluayBTdHJpbmdFbnVtQWJzdHJhY3RCYXNlfS4KLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjc2V0RW51bVZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIHNldChTdHJpbmdFbnVtQWJzdHJhY3RCYXNlIG9iaik7Ci0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgQ2FsZW5kYXJ9LgotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNzZXRDYWxlbmRhclZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIHNldChDYWxlbmRhciBvYmopOwotICAgIC8qKgotICAgICAqIFNldHMgdGhlIHZhbHVlIGFzIGEge0BsaW5rIERhdGV9LgotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNzZXREYXRlVmFsdWV9Ci0gICAgICoqLwotICAgIHZvaWQgc2V0KERhdGUgb2JqKTsKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSB2YWx1ZSBhcyBhIHtAbGluayBHRGF0ZX0uCi0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI3NldEdEYXRlVmFsdWV9Ci0gICAgICoqLwotICAgIHZvaWQgc2V0KEdEYXRlU3BlY2lmaWNhdGlvbiBvYmopOwotICAgIC8qKgotICAgICAqIFNldHMgdGhlIHZhbHVlIGFzIGEge0BsaW5rIEdEdXJhdGlvbn0uCi0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI3NldEdEdXJhdGlvblZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIHNldChHRHVyYXRpb25TcGVjaWZpY2F0aW9uIG9iaik7Ci0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgUU5hbWV9LgotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNzZXRRTmFtZVZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIHNldChRTmFtZSBvYmopOwotICAgIC8qKgotICAgICAqIFNldHMgdGhlIHZhbHVlIGFzIGEge0BsaW5rIExpc3R9LgotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNzZXRMaXN0VmFsdWV9Ci0gICAgICoqLwotICAgIHZvaWQgc2V0KExpc3Qgb2JqKTsKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSB2YWx1ZSBhcyBhbiBhcmJpdHJhcnkge0BsaW5rIE9iamVjdH0uCi0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI3NldE9iamVjdFZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIG9iamVjdFNldChPYmplY3Qgb2JqKTsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzhlMTMwLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi0vKioKLSAqIFRoZSBiYXNlIGNsYXNzIGZvciBjb2RlLWdlbmVyYXRlZCBzdHJpbmcgZW51bWVyYXRpb24gdmFsdWUgY2xhc3Nlcy4KLSAqIDxwPgotICogU3ViY2xhc3NlcyBhcmUgaW50ZW5kZWQgdG8gYmUgZmluYWwgdHlwZXMgd2l0aCBhIGZpbml0ZSBzZXQgb2YKLSAqIHNpbmdsZXRvbiBpbnN0YW5jZXMuICBFYWNoIGluc3RhbmNlIGhhcyBhIHN0cmluZyB2YWx1ZSwgd2hpY2gKLSAqIGl0IHJldHVybnMgdmlhIHtAbGluayAjdG9TdHJpbmd9LCBhbmQgYW4gaW50IHZhbHVlIGZvciB0aGUgcHVycG9zZQotICogb2Ygc3dpdGNoaW5nIGluIGNhc2Ugc3RhdGVtZW50cywgcmV0dXJuZWQgdmlhIHtAbGluayAjaW50VmFsdWV9LgotICogPHA+Ci0gKiBFYWNoIHN1YmNsYXNzIG1hbmFnZXMgYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIFN0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGV9LAotICogd2hpY2ggaG9sZHMgYWxsIHRoZSBzaW5nbGV0b24gaW5zdGFuY2VzIGZvciB0aGUgc3ViY2xhc3MuIEEgVGFibGUKLSAqIGNhbiByZXR1cm4gYSBzaW5nbGV0b24gaW5zdGFuY2UgZ2l2ZW4gYSBTdHJpbmcgb3IgYW4gaW50ZWdlciBjb2RlLgotICovIAotcHVibGljIGNsYXNzIFN0cmluZ0VudW1BYnN0cmFjdEJhc2UgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZQotewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotICAgIAotICAgIHByaXZhdGUgU3RyaW5nIF9zdHJpbmc7Ci0gICAgcHJpdmF0ZSBpbnQgX2ludDsKLQotICAgIC8qKgotICAgICAqIFNpbmdsZXRvbiBpbnN0YW5jZXMgc2hvdWxkIG9ubHkgYmUgY3JlYXRlZCBieSBzdWJjbGFzc2VzLgotICAgICAqLyAKLSAgICBwcm90ZWN0ZWQgU3RyaW5nRW51bUFic3RyYWN0QmFzZShTdHJpbmcgcywgaW50IGkpCi0gICAgICAgIHsgX3N0cmluZyA9IHM7IF9pbnQgPSBpOyB9Ci0KLSAgICAvKiogUmV0dXJucyB0aGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgKi8KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIHRvU3RyaW5nKCkKLSAgICAgICAgeyByZXR1cm4gX3N0cmluZzsgfQotICAgIC8qKiBSZXR1cm5zIGFuIGludCBjb2RlIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHN3aXRjaCBzdGF0ZW1lbnRzICovCi0gICAgcHVibGljIGZpbmFsIGludCBpbnRWYWx1ZSgpCi0gICAgICAgIHsgcmV0dXJuIF9pbnQ7IH0KLSAgICAvKiogUmV0dXJucyB0aGUgaGFzaCBjb2RlIG9mIHRoZSB1bmRlcmx5aW5nIHN0cmluZyAqLwotICAgIHB1YmxpYyBmaW5hbCBpbnQgaGFzaENvZGUoKQotICAgICAgICB7IHJldHVybiBfc3RyaW5nLmhhc2hDb2RlKCk7IH0KLQotICAgIC8qKgotICAgICAqIFVzZWQgdG8gbWFuYWdlIHNpbmdsZXRvbiBpbnN0YW5jZXMgb2YgZW51bWVyYXRpb25zLgotICAgICAqIEVhY2ggc3ViY2xhc3Mgb2YgU3RyaW5nRW51bUFic3RyYWN0QmFzZSBoYXMgYW4gaW5zdGFuY2UKLSAgICAgKiBvZiBhIHRhYmxlIHRvIGhvbGQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZXMuCi0gICAgICovIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgVGFibGUKLSAgICB7Ci0gICAgICAgIHByaXZhdGUgTWFwIF9tYXA7Ci0gICAgICAgIHByaXZhdGUgTGlzdCBfbGlzdDsKLSAgICAgICAgcHVibGljIFRhYmxlKFN0cmluZ0VudW1BYnN0cmFjdEJhc2VbXSBhcnJheSkKLSAgICAgICAgewotICAgICAgICAgICAgX21hcCA9IG5ldyBIYXNoTWFwKGFycmF5Lmxlbmd0aCk7Ci0gICAgICAgICAgICBfbGlzdCA9IG5ldyBBcnJheUxpc3QoYXJyYXkubGVuZ3RoICsgMSk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9tYXAucHV0KGFycmF5W2ldLnRvU3RyaW5nKCksIGFycmF5W2ldKTsKLSAgICAgICAgICAgICAgICBpbnQgaiA9IGFycmF5W2ldLmludFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKF9saXN0LnNpemUoKSA8PSBqKQotICAgICAgICAgICAgICAgICAgICBfbGlzdC5hZGQobnVsbCk7Ci0gICAgICAgICAgICAgICAgX2xpc3Quc2V0KGosIGFycmF5W2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBmb3IgYSB7QGxpbmsgU3RyaW5nfSwgb3IgbnVsbCBpZiBub25lLiAqLwotICAgICAgICBwdWJsaWMgU3RyaW5nRW51bUFic3RyYWN0QmFzZSBmb3JTdHJpbmcoU3RyaW5nIHMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAoU3RyaW5nRW51bUFic3RyYWN0QmFzZSlfbWFwLmdldChzKTsKLSAgICAgICAgfQotICAgICAgICAvKiogUmV0dXJucyB0aGUgc2luZ2xldG9uIGZvciBhbiBpbnQgY29kZSwgb3IgbnVsbCBpZiBub25lLiAqLwotICAgICAgICBwdWJsaWMgU3RyaW5nRW51bUFic3RyYWN0QmFzZSBmb3JJbnQoaW50IGkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpIDwgMCB8fCBpID4gX2xpc3Quc2l6ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgcmV0dXJuIChTdHJpbmdFbnVtQWJzdHJhY3RCYXNlKV9saXN0LmdldChpKTsKLSAgICAgICAgfQotICAgICAgICAvKiogUmV0dXJucyB0aGUgbGFzdCB2YWxpZCBpbnQgY29kZSAodGhlIGZpcnN0IGlzIDE7IHplcm8gaXMgbm90IHVzZWQpLiAqLwotICAgICAgICBwdWJsaWMgaW50IGxhc3RJbnQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gX2xpc3Quc2l6ZSgpIC0gMTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YTUxTdHJlYW1WYWxpZGF0aW9uRXhjZXB0aW9uLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWE1MU3RyZWFtVmFsaWRhdGlvbkV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWI3ZTQ4Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YTUxTdHJlYW1WYWxpZGF0aW9uRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBBbiBleGNlcHRpb24gdGhyb3duIGZyb20gYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotICogCi0gKiBAc2VlIFhtbE9iamVjdC5GYWN0b3J5I25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbQotICogQHNlZSBTY2hlbWFUeXBlTG9hZGVyI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSAKLSAqLwotcHVibGljIGNsYXNzIFhNTFN0cmVhbVZhbGlkYXRpb25FeGNlcHRpb24gZXh0ZW5kcyBYTUxTdHJlYW1FeGNlcHRpb24KLXsKLSAgICBwdWJsaWMgWE1MU3RyZWFtVmFsaWRhdGlvbkV4Y2VwdGlvbiAoIFhtbEVycm9yIHhtbEVycm9yICkKLSAgICB7Ci0gICAgICAgIHN1cGVyKCB4bWxFcnJvci50b1N0cmluZygpICk7Ci0gICAgICAgIAotICAgICAgICBfeG1sRXJyb3IgPSB4bWxFcnJvcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgWG1sRXJyb3IgZ2V0WG1sRXJyb3IgKCApCi0gICAgewotICAgICAgICByZXR1cm4gX3htbEVycm9yOwotICAgIH0KLQotICAgIHByaXZhdGUgWG1sRXJyb3IgX3htbEVycm9yOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODRlN2I2Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODcgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7Ci0KLQotLyoqCi0gKiBDb3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotICogPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNTaW1wbGVfVHlwZV9EZWZpbml0aW9uIj54czphbnlTaW1wbGVUeXBlPC9hPiB0eXBlLgotICogPHA+Ci0gKiBBbGwgc2ltcGxlIHR5cGVzIGFyZSBjb252ZXJ0aWJsZSB0byB7QGxpbmsgU3RyaW5nfS4gCi0gKi8gCi1wdWJsaWMgaW50ZXJmYWNlIFhtbEFueVNpbXBsZVR5cGUgZXh0ZW5kcyBYbWxPYmplY3QKLXsKLSAgICAvKiogVGhlIGNvbnN0YW50IHtAbGluayBTY2hlbWFUeXBlfSBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlIHR5cGUgPSBYbWxCZWFucy5nZXRCdWlsdGluVHlwZVN5c3RlbSgpLnR5cGVGb3JIYW5kbGUoIl9CSV9hbnlTaW1wbGVUeXBlIik7Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgU3RyaW5nfQotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIGJ5IHtAbGluayAjZ2V0U3RyaW5nVmFsdWV9Ci0gICAgICoqLwotICAgIFN0cmluZyBzdHJpbmdWYWx1ZSgpOwotICAgIC8qKgotICAgICAqIFNldHMgdGhlIHZhbHVlIGFzIGEge0BsaW5rIFN0cmluZ30KLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSB7QGxpbmsgI3NldFN0cmluZ1ZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIHNldChTdHJpbmcgcyk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIHtAbGluayBTdHJpbmd9Ci0gICAgICoqLwotICAgIFN0cmluZyBnZXRTdHJpbmdWYWx1ZSgpOwotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgU3RyaW5nfQotICAgICAqKi8KLSAgICB2b2lkIHNldFN0cmluZ1ZhbHVlKFN0cmluZyBzKTsKLQotICAgIC8qKgotICAgICAqIEEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSAgICAgKiBvZiB7QGxpbmsgWG1sQW55U2ltcGxlVHlwZX0uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBGYWN0b3J5Ci0gICAgewotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sQW55U2ltcGxlVHlwZX0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxBbnlTaW1wbGVUeXBlIG5ld0luc3RhbmNlKCkgewotICAgICAgICAgIHJldHVybiAoWG1sQW55U2ltcGxlVHlwZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sQW55U2ltcGxlVHlwZX0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxBbnlTaW1wbGVUeXBlIG5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxBbnlTaW1wbGVUeXBlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGltbXV0YWJsZSB7QGxpbmsgWG1sQW55U2ltcGxlVHlwZX0gdmFsdWUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxBbnlTaW1wbGVUeXBlIG5ld1ZhbHVlKE9iamVjdCBvYmopIHsKLSAgICAgICAgICByZXR1cm4gdHlwZS5uZXdWYWx1ZSggb2JqICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQW55U2ltcGxlVHlwZX0gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0O2FueXRoaW5nJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQW55U2ltcGxlVHlwZSBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxBbnlTaW1wbGVUeXBlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQW55U2ltcGxlVHlwZX0gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0O2FueXRoaW5nJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQW55U2ltcGxlVHlwZSBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sQW55U2ltcGxlVHlwZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEFueVNpbXBsZVR5cGV9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEFueVNpbXBsZVR5cGUgcGFyc2UoamF2YS5pby5GaWxlIGYpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxBbnlTaW1wbGVUeXBlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQW55U2ltcGxlVHlwZX0gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQW55U2ltcGxlVHlwZSBwYXJzZShqYXZhLmlvLkZpbGUgZiwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxBbnlTaW1wbGVUeXBlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQW55U2ltcGxlVHlwZX0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxBbnlTaW1wbGVUeXBlIHBhcnNlKGphdmEubmV0LlVSTCB1KSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sQW55U2ltcGxlVHlwZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgbnVsbCApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxBbnlTaW1wbGVUeXBlfSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEFueVNpbXBsZVR5cGUgcGFyc2UoamF2YS5uZXQuVVJMIHUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sQW55U2ltcGxlVHlwZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxBbnlTaW1wbGVUeXBlfSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEFueVNpbXBsZVR5cGUgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEFueVNpbXBsZVR5cGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQW55U2ltcGxlVHlwZX0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxBbnlTaW1wbGVUeXBlIHBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0gaXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sQW55U2ltcGxlVHlwZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxBbnlTaW1wbGVUeXBlfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEFueVNpbXBsZVR5cGUgcGFyc2UoamF2YS5pby5SZWFkZXIgcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEFueVNpbXBsZVR5cGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxBbnlTaW1wbGVUeXBlfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEFueVNpbXBsZVR5cGUgcGFyc2UoamF2YS5pby5SZWFkZXIgciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxBbnlTaW1wbGVUeXBlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQW55U2ltcGxlVHlwZX0gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEFueVNpbXBsZVR5cGUgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sQW55U2ltcGxlVHlwZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEFueVNpbXBsZVR5cGV9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxBbnlTaW1wbGVUeXBlIHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxBbnlTaW1wbGVUeXBlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQW55U2ltcGxlVHlwZX0gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxBbnlTaW1wbGVUeXBlIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEFueVNpbXBsZVR5cGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEFueVNpbXBsZVR5cGV9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQW55U2ltcGxlVHlwZSBwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sQW55U2ltcGxlVHlwZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQW55U2ltcGxlVHlwZX0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQW55U2ltcGxlVHlwZSBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxBbnlTaW1wbGVUeXBlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxBbnlTaW1wbGVUeXBlfSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxBbnlTaW1wbGVUeXBlIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbnsKLSAgICAgICAgICByZXR1cm4gKFhtbEFueVNpbXBsZVR5cGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgRmFjdG9yeSgpIHsgfSAvLyBObyBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGFsbG93ZWQKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVlOGIzMS4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjYgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7Ci0KLQotLyoqCi0gKiBDb3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotICogPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNhbnlVUkkiPnhzOmFueVVSSTwvYT4gdHlwZS4KLSAqIDxwPgotICogQ29udmVydGlibGUgdG8ge0BsaW5rIFN0cmluZ30uIAotICovIAotcHVibGljIGludGVyZmFjZSBYbWxBbnlVUkkgZXh0ZW5kcyBYbWxBbnlTaW1wbGVUeXBlCi17Ci0gICAgLyoqIFRoZSBjb25zdGFudCB7QGxpbmsgU2NoZW1hVHlwZX0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZSB0eXBlID0gWG1sQmVhbnMuZ2V0QnVpbHRpblR5cGVTeXN0ZW0oKS50eXBlRm9ySGFuZGxlKCJfQklfYW55VVJJIik7Ci0gICAgCi0gICAgLyoqCi0gICAgICogQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotICAgICAqIG9mIHtAbGluayBYbWxBbnlVUkl9LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgRmFjdG9yeQotICAgIHsKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbEFueVVSSX0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxBbnlVUkkgbmV3SW5zdGFuY2UoKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxBbnlVUkkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbEFueVVSSX0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxBbnlVUkkgbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEFueVVSSSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBpbW11dGFibGUge0BsaW5rIFhtbEFueVVSSX0gdmFsdWUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxBbnlVUkkgbmV3VmFsdWUoT2JqZWN0IG9iaikgewotICAgICAgICAgIHJldHVybiAoWG1sQW55VVJJKSB0eXBlLm5ld1ZhbHVlKCBvYmogKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxBbnlVUkl9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDtodHRwOi8vd3d3LnczLm9yZy8mbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxBbnlVUkkgcGFyc2UoamF2YS5sYW5nLlN0cmluZyBzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sQW55VVJJKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQW55VVJJfSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7aHR0cDovL3d3dy53My5vcmcvJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQW55VVJJIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxBbnlVUkkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxBbnlVUkl9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEFueVVSSSBwYXJzZShqYXZhLmlvLkZpbGUgZikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEFueVVSSSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEFueVVSSX0gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQW55VVJJIHBhcnNlKGphdmEuaW8uRmlsZSBmLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEFueVVSSSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEFueVVSSX0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxBbnlVUkkgcGFyc2UoamF2YS5uZXQuVVJMIHUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxBbnlVUkkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG51bGwgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQW55VVJJfSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEFueVVSSSBwYXJzZShqYXZhLm5ldC5VUkwgdSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxBbnlVUkkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG9wdGlvbnMgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQW55VVJJfSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEFueVVSSSBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sQW55VVJJKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEFueVVSSX0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxBbnlVUkkgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxBbnlVUkkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQW55VVJJfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEFueVVSSSBwYXJzZShqYXZhLmlvLlJlYWRlciByKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sQW55VVJJKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQW55VVJJfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEFueVVSSSBwYXJzZShqYXZhLmlvLlJlYWRlciByLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEFueVVSSSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEFueVVSSX0gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEFueVVSSSBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxBbnlVUkkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxBbnlVUkl9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxBbnlVUkkgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEFueVVSSSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEFueVVSSX0gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxBbnlVUkkgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sQW55VVJJKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxBbnlVUkl9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQW55VVJJIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxBbnlVUkkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEFueVVSSX0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQW55VVJJIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEFueVVSSSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQW55VVJJfSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxBbnlVUkkgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uewotICAgICAgICAgIHJldHVybiAoWG1sQW55VVJJKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIEZhY3RvcnkoKSB7IH0gLy8gTm8gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBhbGxvd2VkCi0gICAgfQotfQotCmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1NTQ3YzguLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOwotCi0KLS8qKgotICogQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSAqIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jYmFzZTY0QmluYXJ5Ij54czpiYXNlNjRCaW5hcnk8L2E+IHR5cGUuCi0gKiA8cD4KLSAqIENvbnZlcnRpYmxlIHRvIGEgYnl0ZSBhcnJheS4gCi0gKi8gCi1wdWJsaWMgaW50ZXJmYWNlIFhtbEJhc2U2NEJpbmFyeSBleHRlbmRzIFhtbEFueVNpbXBsZVR5cGUKLXsKLSAgICAvKiogVGhlIGNvbnN0YW50IHtAbGluayBTY2hlbWFUeXBlfSBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlIHR5cGUgPSBYbWxCZWFucy5nZXRCdWlsdGluVHlwZVN5c3RlbSgpLnR5cGVGb3JIYW5kbGUoIl9CSV9iYXNlNjRCaW5hcnkiKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSBieXRlIGFycmF5LgotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIGJ5IHtAbGluayAjZ2V0Qnl0ZUFycmF5VmFsdWV9Ci0gICAgICoqLwotICAgIGJ5dGVbXSBieXRlQXJyYXlWYWx1ZSgpOwotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGlzIHZhbHVlIGFzIGEgYnl0ZSBhcnJheS4KLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSB7QGxpbmsgI3NldEJ5dGVBcnJheVZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIHNldChieXRlW10gYmEpOwotCi0gICAgLyoqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIGJ5dGUgYXJyYXkuICoqLwotICAgIGJ5dGVbXSBnZXRCeXRlQXJyYXlWYWx1ZSgpOwotICAgIC8qKiBTZXRzIHRoaXMgdmFsdWUgYXMgYSBieXRlIGFycmF5LiAqLwotICAgIHZvaWQgc2V0Qnl0ZUFycmF5VmFsdWUoYnl0ZVtdIGJhKTsKLQotCi0gICAgLyoqCi0gICAgICogQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotICAgICAqIG9mIHtAbGluayBYbWxCYXNlNjRCaW5hcnl9LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgRmFjdG9yeQotICAgIHsKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbEJhc2U2NEJpbmFyeX0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxCYXNlNjRCaW5hcnkgbmV3SW5zdGFuY2UoKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxCYXNlNjRCaW5hcnkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbEJhc2U2NEJpbmFyeX0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxCYXNlNjRCaW5hcnkgbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEJhc2U2NEJpbmFyeSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBpbW11dGFibGUge0BsaW5rIFhtbEJhc2U2NEJpbmFyeX0gdmFsdWUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxCYXNlNjRCaW5hcnkgbmV3VmFsdWUoT2JqZWN0IG9iaikgewotICAgICAgICAgIHJldHVybiAoWG1sQmFzZTY0QmluYXJ5KSB0eXBlLm5ld1ZhbHVlKCBvYmogKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxCYXNlNjRCaW5hcnl9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDtWR2hwY3lCemRISnAmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxCYXNlNjRCaW5hcnkgcGFyc2UoamF2YS5sYW5nLlN0cmluZyBzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sQmFzZTY0QmluYXJ5KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQmFzZTY0QmluYXJ5fSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7VkdocGN5QnpkSEpwJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQmFzZTY0QmluYXJ5IHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxCYXNlNjRCaW5hcnkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxCYXNlNjRCaW5hcnl9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEJhc2U2NEJpbmFyeSBwYXJzZShqYXZhLmlvLkZpbGUgZikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEJhc2U2NEJpbmFyeSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEJhc2U2NEJpbmFyeX0gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQmFzZTY0QmluYXJ5IHBhcnNlKGphdmEuaW8uRmlsZSBmLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEJhc2U2NEJpbmFyeSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEJhc2U2NEJpbmFyeX0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxCYXNlNjRCaW5hcnkgcGFyc2UoamF2YS5uZXQuVVJMIHUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxCYXNlNjRCaW5hcnkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG51bGwgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQmFzZTY0QmluYXJ5fSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEJhc2U2NEJpbmFyeSBwYXJzZShqYXZhLm5ldC5VUkwgdSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxCYXNlNjRCaW5hcnkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG9wdGlvbnMgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQmFzZTY0QmluYXJ5fSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEJhc2U2NEJpbmFyeSBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sQmFzZTY0QmluYXJ5KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEJhc2U2NEJpbmFyeX0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxCYXNlNjRCaW5hcnkgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxCYXNlNjRCaW5hcnkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQmFzZTY0QmluYXJ5fSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEJhc2U2NEJpbmFyeSBwYXJzZShqYXZhLmlvLlJlYWRlciByKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sQmFzZTY0QmluYXJ5KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQmFzZTY0QmluYXJ5fSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEJhc2U2NEJpbmFyeSBwYXJzZShqYXZhLmlvLlJlYWRlciByLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEJhc2U2NEJpbmFyeSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEJhc2U2NEJpbmFyeX0gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEJhc2U2NEJpbmFyeSBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxCYXNlNjRCaW5hcnkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxCYXNlNjRCaW5hcnl9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxCYXNlNjRCaW5hcnkgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEJhc2U2NEJpbmFyeSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEJhc2U2NEJpbmFyeX0gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxCYXNlNjRCaW5hcnkgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sQmFzZTY0QmluYXJ5KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxCYXNlNjRCaW5hcnl9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQmFzZTY0QmluYXJ5IHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxCYXNlNjRCaW5hcnkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEJhc2U2NEJpbmFyeX0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQmFzZTY0QmluYXJ5IHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEJhc2U2NEJpbmFyeSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQmFzZTY0QmluYXJ5fSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxCYXNlNjRCaW5hcnkgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uewotICAgICAgICAgIHJldHVybiAoWG1sQmFzZTY0QmluYXJ5KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIEZhY3RvcnkoKSB7IH0gLy8gTm8gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBhbGxvd2VkCi0gICAgfQotfQotCmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDU1MmRiLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDk0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQ7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci0KLS8qKgotICogUHJvdmlkZXMgYW4gYXNzb3J0bWVudCBvZiB1dGlsaXRpZXMKLSAqIGZvciBtYW5hZ2luZyBYTUwgQmVhbiB0eXBlcywgdHlwZSBzeXN0ZW1zLCBRTmFtZXMsIHBhdGhzLAotICogYW5kIHF1ZXJpZXMuCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBYbWxCZWFucwotewotICAgIC8qKgotICAgICAqIFRocmVhZCBsb2NhbCBRTmFtZSBjYWNoZSBmb3IgZ2VuZXJhbCB1c2UKLSAgICAgKi8KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBUaHJlYWRMb2NhbCBfdGhyZWFkTG9jYWxMb2FkZXJRTmFtZUNhY2hlID0KLSAgICAgICAgbmV3IFRocmVhZExvY2FsKCkKLSAgICAgICAgewotICAgICAgICAgICAgcHJvdGVjdGVkIE9iamVjdCBpbml0aWFsVmFsdWUoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUU5hbWVDYWNoZSggMzIgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSB0aHJlYWQgbG9jYWwgUU5hbWVDYWNoZQotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgUU5hbWVDYWNoZSBnZXRRTmFtZUNhY2hlICggKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChRTmFtZUNhY2hlKSBfdGhyZWFkTG9jYWxMb2FkZXJRTmFtZUNhY2hlLmdldCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIE9idGFpbnMgYSBuYW1lIGZyb20gdGhlIHRocmVhZCBsb2NhbCBRTmFtZUNhY2hlCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBRTmFtZSBnZXRRTmFtZSAoIFN0cmluZyBsb2NhbFBhcnQgKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdldFFOYW1lQ2FjaGUoKS5nZXROYW1lKCAiIiwgIGxvY2FsUGFydCApOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIE9idGFpbnMgYSBuYW1lIGZyb20gdGhlIHRocmVhZCBsb2NhbCBRTmFtZUNhY2hlCi0gICAgICovCi0KLSAgICBwdWJsaWMgc3RhdGljIFFOYW1lIGdldFFOYW1lICggU3RyaW5nIG5hbWVzcGFjZVVyaSwgU3RyaW5nIGxvY2FsUGFydCApCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0UU5hbWVDYWNoZSgpLmdldE5hbWUoIG5hbWVzcGFjZVVyaSwgIGxvY2FsUGFydCApOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE1ldGhvZCBfZ2V0Q29udGV4dFR5cGVMb2FkZXJNZXRob2QgPSBidWlsZEdldENvbnRleHRUeXBlTG9hZGVyTWV0aG9kKCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWV0aG9kIF9nZXRCdWlsdGluU2NoZW1hVHlwZVN5c3RlbU1ldGhvZCA9IGJ1aWxkR2V0QnVpbHRpblNjaGVtYVR5cGVTeXN0ZW1NZXRob2QoKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNZXRob2QgX2dldE5vVHlwZU1ldGhvZCA9IGJ1aWxkR2V0Tm9UeXBlTWV0aG9kKCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWV0aG9kIF90eXBlTG9hZGVyQnVpbGRlck1ldGhvZCA9IGJ1aWxkVHlwZUxvYWRlckJ1aWxkZXJNZXRob2QoKTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNZXRob2QgX2NvbXBpbGF0aW9uTWV0aG9kID0gYnVpbGRDb21waWxhdGlvbk1ldGhvZCgpOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgUnVudGltZUV4Y2VwdGlvbiBjYXVzZWRFeGNlcHRpb24oUnVudGltZUV4Y2VwdGlvbiBlLCBUaHJvd2FibGUgY2F1c2UpCi0gICAgewotICAgICAgICBlLmluaXRDYXVzZShjYXVzZSk7Ci0gICAgICAgIHJldHVybiBlOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFhtbEV4Y2VwdGlvbiB3cmFwcGVkRXhjZXB0aW9uKFRocm93YWJsZSBlKQotICAgIHsKLSAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBYbWxFeGNlcHRpb24pCi0gICAgICAgICAgICByZXR1cm4gKFhtbEV4Y2VwdGlvbikgZTsKLQotICAgICAgICByZXR1cm4gbmV3IFhtbEV4Y2VwdGlvbiggZS5nZXRNZXNzYWdlKCksIGUgKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBNZXRob2QgYnVpbGRHZXRDb250ZXh0VHlwZUxvYWRlck1ldGhvZCgpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIENsYXNzLmZvck5hbWUoIm9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zY2hlbWEuU2NoZW1hVHlwZUxvYWRlckltcGwiLCBmYWxzZSwgWG1sQmVhbnMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSkuZ2V0TWV0aG9kKCJnZXRDb250ZXh0VHlwZUxvYWRlciIsIG5ldyBDbGFzc1swXSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBjYXVzZWRFeGNlcHRpb24obmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQ2Fubm90IGxvYWQgU2NoZW1hVHlwZUxvYWRlckltcGw6IHZlcmlmeSB0aGF0IHhiZWFuLmphciBpcyBvbiB0aGUgY2xhc3NwYXRoIiksIGUpOwotICAgICAgICB9Ci0gICAgfQotCi0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNZXRob2QgYnVpbGRHZXRCdWlsdGluU2NoZW1hVHlwZVN5c3RlbU1ldGhvZCgpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIENsYXNzLmZvck5hbWUoIm9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zY2hlbWEuQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0iLCBmYWxzZSwgWG1sQmVhbnMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSkuZ2V0TWV0aG9kKCJnZXQiLCBuZXcgQ2xhc3NbMF0pOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgY2F1c2VkRXhjZXB0aW9uKG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNhbm5vdCBsb2FkIEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtOiB2ZXJpZnkgdGhhdCB4YmVhbi5qYXIgaXMgb24gdGhlIGNsYXNzcGF0aCIpLCBlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE1ldGhvZCBidWlsZEdldE5vVHlwZU1ldGhvZCgpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIENsYXNzLmZvck5hbWUoIm9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zY2hlbWEuQnVpbHRpblNjaGVtYVR5cGVTeXN0ZW0iLCBmYWxzZSwgWG1sQmVhbnMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSkuZ2V0TWV0aG9kKCJnZXROb1R5cGUiLCBuZXcgQ2xhc3NbMF0pOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgY2F1c2VkRXhjZXB0aW9uKG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNhbm5vdCBsb2FkIEJ1aWx0aW5TY2hlbWFUeXBlU3lzdGVtOiB2ZXJpZnkgdGhhdCB4YmVhbi5qYXIgaXMgb24gdGhlIGNsYXNzcGF0aCIpLCBlKTsKLSAgICAgICAgfQotICAgIH0KLQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWV0aG9kIGJ1aWxkVHlwZUxvYWRlckJ1aWxkZXJNZXRob2QoKQotICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENsYXNzIHJlc291cmNlTG9hZGVyQ2xhc3MgPSBDbGFzcy5mb3JOYW1lKCJvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc2NoZW1hLlJlc291cmNlTG9hZGVyIiwgZmFsc2UsIFhtbEJlYW5zLmNsYXNzLmdldENsYXNzTG9hZGVyKCkpOwotICAgICAgICAgICAgcmV0dXJuIENsYXNzLmZvck5hbWUoIm9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zY2hlbWEuU2NoZW1hVHlwZUxvYWRlckltcGwiLCBmYWxzZSwgWG1sQmVhbnMuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSkuZ2V0TWV0aG9kKCJidWlsZCIsIG5ldyBDbGFzc1tdIHsgU2NoZW1hVHlwZUxvYWRlcltdLmNsYXNzLCByZXNvdXJjZUxvYWRlckNsYXNzLCBDbGFzc0xvYWRlci5jbGFzcyB9KTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IGNhdXNlZEV4Y2VwdGlvbihuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDYW5ub3QgbG9hZCBTY2hlbWFUeXBlTG9hZGVySW1wbDogdmVyaWZ5IHRoYXQgeGJlYW4uamFyIGlzIG9uIHRoZSBjbGFzc3BhdGgiKSwgZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE1ldGhvZCBidWlsZENvbXBpbGF0aW9uTWV0aG9kKCkKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gQ2xhc3MuZm9yTmFtZSgib3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnNjaGVtYS5TY2hlbWFUeXBlU3lzdGVtSW1wbCIsIGZhbHNlLCBYbWxCZWFucy5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKS5nZXRNZXRob2QoImZvclNjaGVtYVhtbCIsIG5ldyBDbGFzc1tdIHsgWG1sT2JqZWN0W10uY2xhc3MsIFNjaGVtYVR5cGVMb2FkZXIuY2xhc3MsIFhtbE9wdGlvbnMuY2xhc3MgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBjYXVzZWRFeGNlcHRpb24obmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQ2Fubm90IGxvYWQgU2NoZW1hVHlwZVN5c3RlbUltcGw6IHZlcmlmeSB0aGF0IHhiZWFuLmphciBpcyBvbiB0aGUgY2xhc3NwYXRoIiksIGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29tcGlsZXMgYW4gWFBhdGgsIHJldHVybmluZyBhIFN0cmluZyBlcXVhbCB0byB0aGF0IHdoaWNoIHdhcyBwYXNzZWQsCi0gICAgICogYnV0IHdob3NlIGlkZW50aXR5IGlzIHRoYXQgb2Ygb25lIHdoaWNoIGhhcyBiZWVuIHByZWNvbXBpbGVkIGFuZCBjYWNoZWQuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgY29tcGlsZVBhdGggKCBTdHJpbmcgcGF0aEV4cHIgKSB0aHJvd3MgWG1sRXhjZXB0aW9uCi0gICAgewotICAgICAgICByZXR1cm4gY29tcGlsZVBhdGgoIHBhdGhFeHByLCBudWxsICk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENvbXBpbGVzIGFuIFhQYXRoLCByZXR1cm5pbmcgYSBTdHJpbmcgZXF1YWwgdG8gdGhhdCB3aGljaCB3YXMgcGFzc2VkLAotICAgICAqIGJ1dCB3aG9zZSBpZGVudGl0eSBpcyB0aGF0IG9mIG9uZSB3aGljaCBoYXMgYmVlbiBwcmVjb21waWxlZCBhbmQgY2FjaGVkOyAKLSAgICAgKiB0YWtlcyBhbiBvcHRpb24gZm9yIHNwZWNpZnlpbmcgdGV4dCB0aGF0IGluZGljYXRlcyB0aGUgbmFtZSBvZiBjb250ZXh0IG5vZGUuCi0gICAgICogVGhlIGRlZmF1bHQgaXMgInRoaXMiLCBhcyBpbiAiJHRoaXMiLgotICAgICAqIAotICAgICAqIEBwYXJhbSAgb3B0aW9ucyAgT3B0aW9ucyBmb3IgdGhlIHBhdGguIEZvciBleGFtcGxlLCB5b3UgY2FuIGNhbGwgCi0gICAgICogdGhlIHtAbGluayBYbWxPcHRpb25zI3NldFhxdWVyeUN1cnJlbnROb2RlVmFyKFN0cmluZykgWG1sT3B0aW9ucy5zZXRYcXVlcnlDdXJyZW50Tm9kZVZhcihTdHJpbmcpfQotICAgICAqIG1ldGhvZCB0byBzcGVjaWZ5IGEgcGFydGljdWxhciBuYW1lIGZvciB0aGUgZXhwcmVzc2lvbiAKLSAgICAgKiB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyB0aGUgY29udGV4dCBub2RlLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNvbXBpbGVQYXRoICggU3RyaW5nIHBhdGhFeHByLCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgICAgICB0aHJvd3MgWG1sRXhjZXB0aW9uCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5jb21waWxlUGF0aCggcGF0aEV4cHIsIG9wdGlvbnMgKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ29tcGlsZXMgYW4gWFF1ZXJ5LCByZXR1cm5pbmcgYSBTdHJpbmcgZXF1YWwgdG8gdGhhdCB3aGljaCB3YXMgcGFzc2VkLAotICAgICAqIGJ1dCB3aG9zZSBpZGVudGl0eSBpcyB0aGF0IG9mIG9uZSB3aGljaCBoYXMgYmVlbiBwcmVjb21waWxlZCBhbmQgY2FjaGVkLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNvbXBpbGVRdWVyeSAoIFN0cmluZyBxdWVyeUV4cHIgKSB0aHJvd3MgWG1sRXhjZXB0aW9uCi0gICAgewotICAgICAgICByZXR1cm4gY29tcGlsZVF1ZXJ5KCBxdWVyeUV4cHIsIG51bGwgKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ29tcGlsZXMgYW4gWFF1ZXJ5LCByZXR1cm5pbmcgYSBTdHJpbmcgZXF1YWwgdG8gdGhhdCB3aGljaCB3YXMgcGFzc2VkLAotICAgICAqIGJ1dCB3aG9zZSBpZGVudGl0eSBpcyB0aGF0IG9mIG9uZSB3aGljaCBoYXMgYmVlbiBwcmVjb21waWxlZCBhbmQgY2FjaGVkOwotICAgICAqIHRha2VzIGFuIG9wdGlvbiBmb3Igc3BlY2lmeWluZyB0ZXh0IHRoYXQgaW5kaWNhdGVzIHRoZSBjb250ZXh0IG5vZGUuCi0gICAgICogCi0gICAgICogQHBhcmFtICBvcHRpb25zICBPcHRpb25zIGZvciB0aGUgcXVlcnkuIEZvciBleGFtcGxlLCB5b3UgY2FuIGNhbGwgCi0gICAgICogdGhlIHtAbGluayBYbWxPcHRpb25zI3NldFhxdWVyeUN1cnJlbnROb2RlVmFyKFN0cmluZykgWG1sT3B0aW9ucy5zZXRYcXVlcnlDdXJyZW50Tm9kZVZhcihTdHJpbmcpfQotICAgICAqIG1ldGhvZCB0byBzcGVjaWZ5IGEgcGFydGljdWxhciBuYW1lIGZvciB0aGUgZXhwcmVzc2lvbiAKLSAgICAgKiB2YXJpYWJsZSB0aGF0IGluZGljYXRlcyB0aGUgY29udGV4dCBub2RlLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNvbXBpbGVRdWVyeSAoIFN0cmluZyBxdWVyeUV4cHIsIFhtbE9wdGlvbnMgb3B0aW9ucyApCi0gICAgICAgIHRocm93cyBYbWxFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXRDb250ZXh0VHlwZUxvYWRlcigpLmNvbXBpbGVRdWVyeSggcXVlcnlFeHByLCBvcHRpb25zICk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIEdldHMgdGhlIFNjaGVtYVR5cGVMb2FkZXIgYmFzZWQgb24gdGhlIGN1cnJlbnQgdGhyZWFkJ3MgY29udGV4dAotICAgICAqIENsYXNzTG9hZGVyLiBUaGlzIGlzIHRoZSBTY2hlbWFUeXBlTG9hZGVyIHRoYXQgaXMgdXNlZCB0byBhc3NpZ24KLSAgICAgKiBzY2hlbWEgdHlwZXMgdG8gWE1MIGRvY3VtZW50cyBieSBkZWZhdWx0LiBUaGUgU2NoZW1hVHlwZUxvYWRlciBpcwotICAgICAqIGFsc28gY29uc3VsdGVkIHRvIHJlc29sdmUgd2lsZGNhcmRzIGFuZCB4c2k6dHlwZSBhdHRyaWJ1dGVzLgotICAgICAqIDxwPgotICAgICAqIFRoZSAicGFyc2UiIG1ldGhvZHMgb2YgWG1sQmVhbnMgYWxsIGRlbGVnYXRlIHRvIHRoZQotICAgICAqICJwYXJzZUluc3RhbmNlIiBtZXRob2RzIG9mIHRoZSBjb250ZXh0IHR5cGUgbG9hZGVyLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU2NoZW1hVHlwZUxvYWRlciBnZXRDb250ZXh0VHlwZUxvYWRlcigpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChTY2hlbWFUeXBlTG9hZGVyKV9nZXRDb250ZXh0VHlwZUxvYWRlck1ldGhvZC5pbnZva2UobnVsbCwgbnVsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgY2F1c2VkRXhjZXB0aW9uKG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIk5vIGFjY2VzcyB0byBTY2hlbWFUeXBlTG9hZGVySW1wbC5nZXRDb250ZXh0VHlwZUxvYWRlcigpOiB2ZXJpZnkgdGhhdCB2ZXJzaW9uIG9mIHhiZWFuLmphciBpcyBjb3JyZWN0IiksIGUpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IGNhdXNlZEV4Y2VwdGlvbihuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKSwgZS5nZXRDYXVzZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGJ1aWx0aW4gdHlwZSBzeXN0ZW0uIFRoaXMgU2NoZW1hVHlwZVN5c3RlbSBjb250YWlucwotICAgICAqIG9ubHkgdGhlIDQ2IGJ1aWx0aW4gdHlwZXMgZGVmaW5lZCBieSB0aGUgWE1MIFNjaGVtYSBzcGVjaWZpY2F0aW9uLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU2NoZW1hVHlwZVN5c3RlbSBnZXRCdWlsdGluVHlwZVN5c3RlbSgpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChTY2hlbWFUeXBlU3lzdGVtKV9nZXRCdWlsdGluU2NoZW1hVHlwZVN5c3RlbU1ldGhvZC5pbnZva2UobnVsbCwgbnVsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgY2F1c2VkRXhjZXB0aW9uKG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIk5vIGFjY2VzcyB0byBCdWlsdGluU2NoZW1hVHlwZVN5c3RlbS5nZXQoKTogdmVyaWZ5IHRoYXQgdmVyc2lvbiBvZiB4YmVhbi5qYXIgaXMgY29ycmVjdCIpLCBlKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBjYXVzZWRFeGNlcHRpb24obmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSksIGUuZ2V0Q2F1c2UoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBTY2hlbWFUeXBlU3lzdGVtIHRoYXQgcmVzdWx0cyBmcm9tIGNvbXBpbGluZyB0aGUgWE1MCi0gICAgICogc2NoZW1hIGRlZmluaXRpb25zIHBhc3NlZC4KLSAgICAgKiA8cD4KLSAgICAgKiBKdXN0IGxpa2UgY29tcGlsZVR5cGVTeXN0ZW0sIGJ1dCB1c2VzIHRoZSBjb250ZXh0IHR5cGUgbG9hZGVyIGZvcgotICAgICAqIGxpbmtpbmcsIGFuZCByZXR1cm5zIGEgdW5pb25lZCB0eXBlbG9hZGVyIHRoYXQgaXMgc3VpdGFibGUgZm9yCi0gICAgICogY3JlYXRpbmcgaW5zdGFuY2VzLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU2NoZW1hVHlwZUxvYWRlciBsb2FkWHNkKFhtbE9iamVjdFtdIHNjaGVtYXMpIHRocm93cyBYbWxFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHJldHVybiBsb2FkWHNkKHNjaGVtYXMsIG51bGwpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiA8cD5SZXR1cm5zIHRoZSBTY2hlbWFUeXBlU3lzdGVtIHRoYXQgcmVzdWx0cyBmcm9tIGNvbXBpbGluZyB0aGUgWE1MCi0gICAgICogc2NoZW1hIGRlZmluaXRpb25zIHBhc3NlZCBpbiA8ZW0+c2NoZW1hczwvZW0+LjwvcD4KLSAgICAgKiAKLSAgICAgKiA8cD5UaGlzIGlzIGp1c3QgbGlrZSBjb21waWxlVHlwZVN5c3RlbSwgYnV0IHVzZXMgdGhlIGNvbnRleHQgdHlwZSBsb2FkZXIgZm9yCi0gICAgICogbGlua2luZywgYW5kIHJldHVybnMgYSB1bmlvbmVkIHR5cGVsb2FkZXIgdGhhdCBpcyBzdWl0YWJsZSBmb3IKLSAgICAgKiBjcmVhdGluZyBpbnN0YW5jZXMuPC9wPgotICAgICAqIAotICAgICAqIDxwPlVzZSB0aGUgPGVtPm9wdGlvbnM8L2VtPiBwYXJhbWV0ZXIgdG8gc3BlY2lmeSBvbmUgb3IgYm90aCBvZiB0aGUgZm9sbG93aW5nOjwvcD4KLSAgICAgKiAKLSAgICAgKiA8dWw+Ci0gICAgICogPGxpPkEgY29sbGVjdGlvbiBpbnN0YW5jZSB0aGF0IHNob3VsZCBiZSB1c2VkIGFzIGFuIGVycm9yIGxpc3RlbmVyIGR1cmluZwotICAgICAqIGNvbXBpbGF0aW9uLCBhcyBkZXNjcmliZWQgaW4ge0BsaW5rIFhtbE9wdGlvbnMjc2V0RXJyb3JMaXN0ZW5lcn0uPC9saT4KLSAgICAgKiA8bGk+V2hldGhlciB2YWxpZGF0aW9uIHNob3VsZCBub3QgYmUgZG9uZSB3aGVuIGJ1aWxkaW5nIHRoZSBTY2hlbWFUeXBlU3lzdGVtLAotICAgICAqIGFzIGRlc2NyaWJlZCBpbiB7QGxpbmsgWG1sT3B0aW9ucyNzZXRDb21waWxlTm9WYWxpZGF0aW9ufS48L2xpPgotICAgICAqIDwvdWw+Ci0gICAgICogCi0gICAgICogQHBhcmFtIHNjaGVtYXMgVGhlIHNjaGVtYSBkZWZpbml0aW9ucyBmcm9tIHdoaWNoIHRvIGJ1aWxkIHRoZSBzY2hlbWEgdHlwZSBzeXN0ZW0uCi0gICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBzcGVjaWZ5aW5nIGFuIGVycm9yIGxpc3RlbmVyIGFuZC9vciB2YWxpZGF0aW9uIGJlaGF2aW9yLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU2NoZW1hVHlwZUxvYWRlciBsb2FkWHNkKFhtbE9iamVjdFtdIHNjaGVtYXMsIFhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIFhtbEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYVR5cGVTeXN0ZW0gc3RzID0KLSAgICAgICAgICAgICAgICAoU2NoZW1hVHlwZVN5c3RlbSkKLSAgICAgICAgICAgICAgICAgICAgX2NvbXBpbGF0aW9uTWV0aG9kLmludm9rZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG5ldyBPYmplY3RbXSB7IHNjaGVtYXMsIGdldENvbnRleHRUeXBlTG9hZGVyKCksIG9wdGlvbnMgfSk7Ci0KLSAgICAgICAgICAgIGlmIChzdHMgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgdHlwZUxvYWRlclVuaW9uKAotICAgICAgICAgICAgICAgICAgICBuZXcgU2NoZW1hVHlwZUxvYWRlcltdIHsgc3RzLCBnZXRDb250ZXh0VHlwZUxvYWRlcigpIH0gKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBjYXVzZWRFeGNlcHRpb24obmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiTm8gYWNjZXNzIHRvIFNjaGVtYVR5cGVMb2FkZXJJbXBsLmZvclNjaGVtYVhtbCgpOiB2ZXJpZnkgdGhhdCB2ZXJzaW9uIG9mIHhiZWFuLmphciBpcyBjb3JyZWN0IiksIGUpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IHdyYXBwZWRFeGNlcHRpb24oZS5nZXRDYXVzZSgpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiA8cD5SZXR1cm5zIHRoZSBTY2hlbWFUeXBlU3lzdGVtIHRoYXQgcmVzdWx0cyBmcm9tIGNvbXBpbGluZyB0aGUgWE1MCi0gICAgICogc2NoZW1hIGRlZmluaXRpb25zIHBhc3NlZC48L3A+Ci0gICAgICogCi0gICAgICogPHA+VGhlIFhtbE9iamVjdHMgcGFzc2VkIGluIHNob3VsZCBiZSB3M2MgJmx0O3NjaGVtYSZndDsgZWxlbWVudHMgd2hvc2UgdHlwZQotICAgICAqIGlzIG9yZy53M2MueDIwMDEueG1sU2NoZW1hLlNjaGVtYS4gKFRoYXQgaXMsIHNjaGVtYSBlbGVtZW50cyBpbgotICAgICAqIHRoZSBYTUwgbmFtZXNwYWNlIGh0dHA6Ly93d3cudzNjLm9yZy8yMDAxL1hNTFNjaGVtYS4pICBBbHNvCi0gICAgICogb3JnLnczYy54MjAwMS54bWxTY2hlbWEuU2NoZW1hRG9jdW1lbnQgaXMgcGVybWl0dGVkLjwvcD4KLSAgICAgKiAKLSAgICAgKiA8cD5UaGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IGlzIGEgU2NoZW1hVHlwZUxvYWRlciB3aGljaCB3aWxsIGJlCi0gICAgICogY29uc3VsdGVkIGZvciBhbHJlYWR5LWNvbXBpbGVkIHNjaGVtYSB0eXBlcyB3aGljaCBtYXkgYmUgbGlua2VkCi0gICAgICogd2hpbGUgcHJvY2Vzc2luZyB0aGUgZ2l2ZW4gc2NoZW1hcy48L3A+Ci0gICAgICogCi0gICAgICogPHA+VGhlIFNjaGVtYVR5cGVTeXN0ZW0gdGhhdCBpcyByZXR1cm5lZCBzaG91bGQgYmUgY29tYmluZWQKLSAgICAgKiAodmlhIHtAbGluayAjdHlwZUxvYWRlclVuaW9ufSkgd2l0aCB0aGUgdHlwZXBhdGggdHlwZWxvYWRlciBpbiBvcmRlcgotICAgICAqIHRvIGNyZWF0ZSBhIHR5cGVsb2FkZXIgdGhhdCBjYW4gYmUgdXNlZCBmb3IgY3JlYXRpbmcgYW5kIHZhbGlkYXRpbmcKLSAgICAgKiBpbnN0YW5jZXMuPC9wPgotICAgICAqIAotICAgICAqIDxwPlVzZSB0aGUgPGVtPm9wdGlvbnM8L2VtPiBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUgZm9sbG93aW5nOjwvcD4KLSAgICAgKiAKLSAgICAgKiA8dWw+Ci0gICAgICogPGxpPkEgY29sbGVjdGlvbiBpbnN0YW5jZSB0aGF0IHNob3VsZCBiZSB1c2VkIGFzIGFuIGVycm9yIGxpc3RlbmVyIGR1cmluZwotICAgICAqIGNvbXBpbGF0aW9uLCBhcyBkZXNjcmliZWQgaW4ge0BsaW5rIFhtbE9wdGlvbnMjc2V0RXJyb3JMaXN0ZW5lcn0uPC9saT4KLSAgICAgKiA8bGk+V2hldGhlciB2YWxpZGF0aW9uIHNob3VsZCBub3QgYmUgZG9uZSB3aGVuIGJ1aWxkaW5nIHRoZSBTY2hlbWFUeXBlU3lzdGVtLAotICAgICAqIGFzIGRlc2NyaWJlZCBpbiB7QGxpbmsgWG1sT3B0aW9ucyNzZXRDb21waWxlTm9WYWxpZGF0aW9ufS48L2xpPgotICAgICAqIDwvdWw+Ci0gICAgICogCi0gICAgICogQHBhcmFtIHNjaGVtYXMgVGhlIHNjaGVtYSBkZWZpbml0aW9ucyBmcm9tIHdoaWNoIHRvIGJ1aWxkIHRoZSBzY2hlbWEgdHlwZSBzeXN0ZW0uCi0gICAgICogQHBhcmFtIHR5cGVwYXRoIFRoZSBwYXRoIHRvIGFscmVhZHktY29tcGlsZWQgc2NoZW1hIHR5cGVzIGZvciBsaW5raW5nIHdoaWxlIHByb2Nlc3NpbmcuCi0gICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBzcGVjaWZ5aW5nIGFuIGVycm9yIGxpc3RlbmVyIGFuZC9vciB2YWxpZGF0aW9uIGJlaGF2aW9yLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgU2NoZW1hVHlwZVN5c3RlbSBjb21waWxlWHNkKFhtbE9iamVjdFtdIHNjaGVtYXMsIFNjaGVtYVR5cGVMb2FkZXIgdHlwZXBhdGgsIFhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIFhtbEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgaWYgKHR5cGVwYXRoID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJNdXN0IHN1cHBseSBhIFNjaGVtYVR5cGVMb2FkZXIgZm9yIGNvbXBpbGV0aW1lIGxpbmtpbmciKTsKLQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChTY2hlbWFUeXBlU3lzdGVtKV9jb21waWxhdGlvbk1ldGhvZC5pbnZva2UobnVsbCwgbmV3IE9iamVjdFtdIHsgc2NoZW1hcywgdHlwZXBhdGgsIG9wdGlvbnMgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiTm8gYWNjZXNzIHRvIFNjaGVtYVR5cGVMb2FkZXJJbXBsLmZvclNjaGVtYVhtbCgpOiB2ZXJpZnkgdGhhdCB2ZXJzaW9uIG9mIHhiZWFuLmphciBpcyBjb3JyZWN0Iik7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgd3JhcHBlZEV4Y2VwdGlvbihlLmdldENhdXNlKCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHVuaW9uIG9mIGEgbGlzdCBvZiB0eXBlTG9hZGVycy4gVGhlIHJldHVybmVkCi0gICAgICogU2NoZW1hVHlwZUxvYWRlciBzZWFyY2hlcyB0aGUgZ2l2ZW4gbGlzdCBvZiBTY2hlbWFUeXBlTG9hZGVycwotICAgICAqIGluIG9yZGVyIGZyb20gZmlyc3QgdG8gbGFzdC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFNjaGVtYVR5cGVMb2FkZXIgdHlwZUxvYWRlclVuaW9uKFNjaGVtYVR5cGVMb2FkZXJbXSB0eXBlTG9hZGVycykKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodHlwZUxvYWRlcnMubGVuZ3RoID09IDEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVMb2FkZXJzWzBdOwotCi0gICAgICAgICAgICByZXR1cm4gKFNjaGVtYVR5cGVMb2FkZXIpX3R5cGVMb2FkZXJCdWlsZGVyTWV0aG9kLmludm9rZShudWxsLCBuZXcgT2JqZWN0W10ge3R5cGVMb2FkZXJzLCBudWxsLCBudWxsfSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgY2F1c2VkRXhjZXB0aW9uKG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIk5vIGFjY2VzcyB0byBTY2hlbWFUeXBlTG9hZGVySW1wbDogdmVyaWZ5IHRoYXQgdmVyc2lvbiBvZiB4YmVhbi5qYXIgaXMgY29ycmVjdCIpLCBlKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBjYXVzZWRFeGNlcHRpb24obmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSksIGUuZ2V0Q2F1c2UoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgU2NoZW1hVHlwZUxvYWRlciB0aGF0IHNlYXJjaGVzIGZvciBjb21waWxlZCBzY2hlbWEgdHlwZXMKLSAgICAgKiBpbiB0aGUgZ2l2ZW4gQ2xhc3NMb2FkZXIuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBTY2hlbWFUeXBlTG9hZGVyIHR5cGVMb2FkZXJGb3JDbGFzc0xvYWRlcihDbGFzc0xvYWRlciBsb2FkZXIpCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChTY2hlbWFUeXBlTG9hZGVyKV90eXBlTG9hZGVyQnVpbGRlck1ldGhvZC5pbnZva2UobnVsbCwgbmV3IE9iamVjdFtdIHtudWxsLCBudWxsLCBsb2FkZXJ9KTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBjYXVzZWRFeGNlcHRpb24obmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiTm8gYWNjZXNzIHRvIFNjaGVtYVR5cGVMb2FkZXJJbXBsOiB2ZXJpZnkgdGhhdCB2ZXJzaW9uIG9mIHhiZWFuLmphciBpcyBjb3JyZWN0IiksIGUpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IGNhdXNlZEV4Y2VwdGlvbiggbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSksIGUgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIFNjaGVtYVR5cGUgZnJvbSBhIGNvcnJlc3BvbmRpbmcgWG1sT2JqZWN0IHN1YmNsYXNzLAotICAgICAqIG9yIG51bGwgaWYgbm9uZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFNjaGVtYVR5cGUgdHlwZUZvckNsYXNzKENsYXNzIGMpCi0gICAgewotICAgICAgICBpZiAoYyA9PSBudWxsIHx8ICFYbWxPYmplY3QuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbShjKSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBGaWVsZCB0eXBlRmllbGQgPSBjLmdldEZpZWxkKCJ0eXBlIik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh0eXBlRmllbGQgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAgICAgcmV0dXJuIChTY2hlbWFUeXBlKXR5cGVGaWVsZC5nZXQobnVsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFNjaGVtYVR5cGUgZ2V0Tm9UeXBlKCkKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKFNjaGVtYVR5cGUpX2dldE5vVHlwZU1ldGhvZC5pbnZva2UobnVsbCwgbnVsbCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgY2F1c2VkRXhjZXB0aW9uKG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIk5vIGFjY2VzcyB0byBTY2hlbWFUeXBlTG9hZGVySW1wbC5nZXRDb250ZXh0VHlwZUxvYWRlcigpOiB2ZXJpZnkgdGhhdCB2ZXJzaW9uIG9mIHhiZWFuLmphciBpcyBjb3JyZWN0IiksIGUpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IGNhdXNlZEV4Y2VwdGlvbihuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKSwgZS5nZXRDYXVzZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoZSBTY2hlbWFUeXBlIG9iamVjdCBnaXZlbiB0byBhbiBYbWxPYmplY3QgaW5zdGFuY2Ugd2hlbgotICAgICAqIG5vIHR5cGUgY2FuIGJlIGRldGVybWluZWQuCi0gICAgICogPHA+Ci0gICAgICogVGhlIE5PX1RZUEUgaXMgdGhlIHVuaXZlcnNhbCBkZXJpdmVkIHR5cGUuICBUaGF0IGlzLCBpdCBpcwotICAgICAqIGRlcml2ZWQgZnJvbSBhbGwgb3RoZXIgc2NoZW1hIHR5cGVzLCBhbmQgbm8gaW5zdGFuY2VzIG9mIHRoZQotICAgICAqIE5PX1RZUEUgYXJlIHZhbGlkLiAoSXQgaXMgbm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdGhlIGFueVR5cGUsCi0gICAgICogd2hpY2ggaXMgdGhlIHVuaXZlcnNhbCBiYXNlIHR5cGUgZnJvbSB3aGljaCBhbGwgb3RoZXIgdHlwZXMKLSAgICAgKiBjYW4gYmUgZGVyaXZlZCwgYW5kIG9mIHdoaWNoIGFsbCBpbnN0YW5jZXMgYXJlIHZhbGlkLikKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIFNjaGVtYVR5cGUgTk9fVFlQRSA9IGdldE5vVHlwZSgpOwotCi0gICAgcHJpdmF0ZSBYbWxCZWFucyAoICkgeyB9Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE0M2NiYi4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOwotCi0KLS8qKgotICogQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSAqIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jYm9vbGVhbiI+eHM6Ym9vbGVhbjwvYT4gdHlwZS4KLSAqIDxwPgotICogTmF0dXJhbGx5LCBjb252ZXJ0aWJsZSB0byBKYXZhIGJvb2xlYW4uIAotICovIAotcHVibGljIGludGVyZmFjZSBYbWxCb29sZWFuIGV4dGVuZHMgWG1sQW55U2ltcGxlVHlwZQotewotICAgIC8qKiBUaGUgY29uc3RhbnQge0BsaW5rIFNjaGVtYVR5cGV9IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGUgdHlwZSA9IFhtbEJlYW5zLmdldEJ1aWx0aW5UeXBlU3lzdGVtKCkudHlwZUZvckhhbmRsZSgiX0JJX2Jvb2xlYW4iKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSBib29sZWFuCi0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgYnkge0BsaW5rICNnZXRCb29sZWFuVmFsdWV9Ci0gICAgICoqLwotICAgIGJvb2xlYW4gYm9vbGVhblZhbHVlKCk7Ci0gICAgLyoqCi0gICAgICogU2V0cyB0aGlzIHZhbHVlIGFzIGEgYm9vbGVhbgotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIGJ5IHtAbGluayAjc2V0Qm9vbGVhblZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIHNldChib29sZWFuIHYpOwotCi0gICAgLyoqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIGJvb2xlYW4gKi8KLSAgICBib29sZWFuIGdldEJvb2xlYW5WYWx1ZSgpOwotICAgIC8qKiBTZXRzIHRoaXMgdmFsdWUgYXMgYSBib29sZWFuICovCi0gICAgdm9pZCBzZXRCb29sZWFuVmFsdWUoYm9vbGVhbiB2KTsKLQotICAgIC8qKgotICAgICAqIEEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSAgICAgKiBvZiB7QGxpbmsgWG1sQm9vbGVhbn0uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBGYWN0b3J5Ci0gICAgewotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sQm9vbGVhbn0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxCb29sZWFuIG5ld0luc3RhbmNlKCkgewotICAgICAgICAgIHJldHVybiAoWG1sQm9vbGVhbikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sQm9vbGVhbn0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxCb29sZWFuIG5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxCb29sZWFuKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGltbXV0YWJsZSB7QGxpbmsgWG1sQm9vbGVhbn0gdmFsdWUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxCb29sZWFuIG5ld1ZhbHVlKE9iamVjdCBvYmopIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEJvb2xlYW4pIHR5cGUubmV3VmFsdWUoIG9iaiApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEJvb2xlYW59IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDt0cnVlJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQm9vbGVhbiBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxCb29sZWFuKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQm9vbGVhbn0gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0O3RydWUmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxCb29sZWFuIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxCb29sZWFuKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQm9vbGVhbn0gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQm9vbGVhbiBwYXJzZShqYXZhLmlvLkZpbGUgZikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEJvb2xlYW4pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxCb29sZWFufSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxCb29sZWFuIHBhcnNlKGphdmEuaW8uRmlsZSBmLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEJvb2xlYW4pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxCb29sZWFufSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEJvb2xlYW4gcGFyc2UoamF2YS5uZXQuVVJMIHUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxCb29sZWFuKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBudWxsICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEJvb2xlYW59IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQm9vbGVhbiBwYXJzZShqYXZhLm5ldC5VUkwgdSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxCb29sZWFuKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBvcHRpb25zICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEJvb2xlYW59IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQm9vbGVhbiBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sQm9vbGVhbikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxCb29sZWFufSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEJvb2xlYW4gcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxCb29sZWFuKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEJvb2xlYW59IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQm9vbGVhbiBwYXJzZShqYXZhLmlvLlJlYWRlciByKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sQm9vbGVhbikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEJvb2xlYW59IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQm9vbGVhbiBwYXJzZShqYXZhLmlvLlJlYWRlciByLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEJvb2xlYW4pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxCb29sZWFufSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQm9vbGVhbiBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxCb29sZWFuKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQm9vbGVhbn0gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEJvb2xlYW4gcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEJvb2xlYW4pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxCb29sZWFufSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEJvb2xlYW4gcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sQm9vbGVhbikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQm9vbGVhbn0gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxCb29sZWFuIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxCb29sZWFuKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxCb29sZWFufSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxCb29sZWFuIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEJvb2xlYW4pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEJvb2xlYW59IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEJvb2xlYW4gcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uewotICAgICAgICAgIHJldHVybiAoWG1sQm9vbGVhbikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBGYWN0b3J5KCkgeyB9IC8vIE5vIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgYWxsb3dlZAotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5Yjk1MWMuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKLQotCi0vKioKLSAqIENvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gKiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2J5dGUiPnhzOmJ5dGU8L2E+IHR5cGUuCi0gKiA8cD4KLSAqIE5hdHVyYWxseSwgY29udmVydGlibGUgdG8gSmF2YSBieXRlLiAKLSAqLyAKLXB1YmxpYyBpbnRlcmZhY2UgWG1sQnl0ZSBleHRlbmRzIFhtbFNob3J0Ci17Ci0gICAgLyoqIFRoZSBjb25zdGFudCB7QGxpbmsgU2NoZW1hVHlwZX0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZSB0eXBlID0gWG1sQmVhbnMuZ2V0QnVpbHRpblR5cGVTeXN0ZW0oKS50eXBlRm9ySGFuZGxlKCJfQklfYnl0ZSIpOwotICAgIAotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIGJ5dGUKLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSB7QGxpbmsgI2dldEJ5dGVWYWx1ZX0KLSAgICAgKiovCi0gICAgcHVibGljIGJ5dGUgYnl0ZVZhbHVlKCk7Ci0gICAgLyoqCi0gICAgICogU2V0cyB0aGlzIHZhbHVlIGFzIGEgYnl0ZQotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIGJ5IHtAbGluayAjc2V0Qnl0ZVZhbHVlfQotICAgICAqKi8KLSAgICBwdWJsaWMgdm9pZCBzZXQoYnl0ZSBzKTsKLQotICAgIC8qKiBSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSBieXRlICovCi0gICAgcHVibGljIGJ5dGUgZ2V0Qnl0ZVZhbHVlKCk7Ci0gICAgLyoqIFNldHMgdGhpcyB2YWx1ZSBhcyBhIGJ5dGUgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRCeXRlVmFsdWUoYnl0ZSBzKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gICAgICogb2Yge0BsaW5rIFhtbEJ5dGV9LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgRmFjdG9yeQotICAgIHsKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbEJ5dGV9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQnl0ZSBuZXdJbnN0YW5jZSgpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEJ5dGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbEJ5dGV9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQnl0ZSBuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgewotICAgICAgICAgIHJldHVybiAoWG1sQnl0ZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBpbW11dGFibGUge0BsaW5rIFhtbEJ5dGV9IHZhbHVlICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQnl0ZSBuZXdWYWx1ZShPYmplY3Qgb2JqKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxCeXRlKSB0eXBlLm5ld1ZhbHVlKCBvYmogKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxCeXRlfSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7MTIzJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQnl0ZSBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxCeXRlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQnl0ZX0gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzEyMyZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEJ5dGUgcGFyc2UoamF2YS5sYW5nLlN0cmluZyBzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEJ5dGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxCeXRlfSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxCeXRlIHBhcnNlKGphdmEuaW8uRmlsZSBmKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sQnl0ZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEJ5dGV9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEJ5dGUgcGFyc2UoamF2YS5pby5GaWxlIGYsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sQnl0ZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEJ5dGV9IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQnl0ZSBwYXJzZShqYXZhLm5ldC5VUkwgdSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEJ5dGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG51bGwgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQnl0ZX0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxCeXRlIHBhcnNlKGphdmEubmV0LlVSTCB1LCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEJ5dGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG9wdGlvbnMgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQnl0ZX0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxCeXRlIHBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0gaXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxCeXRlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEJ5dGV9IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQnl0ZSBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEJ5dGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQnl0ZX0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxCeXRlIHBhcnNlKGphdmEuaW8uUmVhZGVyIHIpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxCeXRlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQnl0ZX0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxCeXRlIHBhcnNlKGphdmEuaW8uUmVhZGVyIHIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sQnl0ZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEJ5dGV9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxCeXRlIHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEJ5dGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxCeXRlfSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQnl0ZSBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sQnl0ZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEJ5dGV9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQnl0ZSBwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxCeXRlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxCeXRlfSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEJ5dGUgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEJ5dGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEJ5dGV9IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEJ5dGUgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sQnl0ZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sQnl0ZX0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sQnl0ZSBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb257Ci0gICAgICAgICAgcmV0dXJuIChYbWxCeXRlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIEZhY3RvcnkoKSB7IH0gLy8gTm8gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBhbGxvd2VkCi0gICAgfQotfQotCmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ2FsZW5kYXIuamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGIwYzllLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzU4ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmEudXRpbC5HcmVnb3JpYW5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci1pbXBvcnQgamF2YS51dGlsLlRpbWVab25lOwotaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwotCi0vKioKLSAqIEFuIFhNTCBTY2hlbWEgY29tcGF0aWJsZSBzdWJjbGFzcyBvZiB7QGxpbmsgamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyIEdyZWdvcmlhbkNhbGVuZGFyfS4KLSAqIFhtbENhbGVuZGFyIG1vZGlmaWVzIHNldmVyYWwga2V5IGRldGFpbHMgaW4gdGhlIGJlaGF2aW9yIG9mCi0gKiBHcmVnb3JpYW5DYWxlbmRhciB0byBtYWtlIGl0IG1vcmUgdXNlZnVsIHdoZW4gZGVhbGluZyB3aXRoIFhNTCBkYXRlcy4KLSAqIDxwPgotICogSXQgaXMgZWFzeSB0byBjb252ZXJ0IGJldHdlZW4gWG1sQ2FsZW5kYXIgYW5kIHtAbGluayBHRGF0ZX0sIG9yIHRvCi0gKiBwYXJzZSBvciBlbWl0IGFuIFhtbENhbGVuZGFyIHVzaW5nIGEgc3RhbmRhcmQgWE1MIFNjaGVtYQotICogbGV4aWNhbCByZXByZXNlbnRhdGlvbi4KLSAqIDxvbD4KLSAqIDxsaT4KLSAqIFRvIG1hdGNoIFhNTCBTY2hlbWEgZGF0ZXMsIHRoaXMgWG1sQ2FsZW5kYXIgaXMgYSBmdWxseSBwcm9sZXB0aWMKLSAqIEdyZWdvcmlhbiBjYWxlbmRhciBieSBkZWZhdWx0LCB3aGljaCBtZWFucyB0aGF0IEdyZWdvcmlhbiBjYWxlbmRhcgotICogcnVsZXMgYXJlIGFwcGxpZWQgYmFja3dhcmRzIGluIHRpbWUgYXMgaWYgdGhleSBoYWQgYWx3YXlzIGJlZW4gaW4KLSAqIGVmZmVjdCwgYWN0dWFsIGhpc3RvcmljYWwgY2lyY3Vtc3RhbmNlcyBjb25jZXJuaW5nIHRoZSBvYnNlcnZhbmNlCi0gKiBvZiB0aGUgMTU4MiBkZWNyZWUgb2YgUG9wZSBHcmVnb3J5IFhJSUkgbm90d2l0aHN0YW5kaW5nLgotICogPC9saT4KLSAqIDxsaT4KLSAqIEluIG9yZGVyIHRvIGJldHRlciBzdXBwb3J0IHBhcnRpYWxseS1zcGVjaWZpZWQgZGF0ZXMgZm9yIFhNTCBTY2hlbWEsCi0gKiB0aGlzIGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGEgc3RhYmxlIGdldChmaWVsZCkgbWV0aG9kCi0gKiB0aGF0IGRvZXMgbm90IG1vZGlmeSB0aGUgaW5zdGFuY2UgaWYgeW91IGFyZSBhY2Vzc2luZyBhIGZpZWxkIHJpZ2h0Ci0gKiBhZnRlciBpdCB3YXMgZXhwbGljaXRseSBzZXQ6IGEgc2V0IGZvbGxvd2VkIGJ5IGEgZ2V0IHdpbGwgYWx3YXlzCi0gKiByZXR1cm4gdGhlIHNhbWUgdGhpbmcgYW5kIHdpbGwgbm90IGZpbGwgaW4gYW55IG90aGVyIGZpZWxkcy4gSG93ZXZlciwKLSAqIGlmIHlvdSBnZXQgYSBmaWVsZCB0aGF0IHdhcyBub3QgZXhwbGljaXRseSBzZXQsIHRoZW4gYWxsIHRoZSBmaWVsZHMKLSAqIGFyZSBzdGlsbCBhdXRvbWF0aWNhbGx5IGZpbGxlZCBhbmQgbm9ybWFsaXplZCBmb3IgeW91LCBqdXN0IGxpa2UgYQotICogcmVndWxhciBHcmVnb3JpYW5DYWxlbmRhci4gSWYgeW91IHdpc2ggdG8gZm9yY2UgdGhlIGNvbXBsZXRpb24gYW5kCi0gKiBkZWZhdWx0aW5nIG9mIGFsbCB0aGUgZmllbGRzICh3aXRob3V0IGh1bnRpbmcgdG8gZ2V0IG9uZSB0aGF0IGhhcHBlbnMKLSAqIHRvIGJlIHVuc2V0KSwgeW91IGNhbiBhbHdheXMgZG8gc28gYnkgY2FsbGluZyBnZXRUaW1lKCkuCi0gKiA8L2xpPgotICogPGxpPgotICogV2hlbiBhIHllYXIgaXMgdW5zcGVjaWZpZWQgYW5kIG5lZWRzIHRvIGJlIGZpbGxlZCBpbiBhdXRvbWF0aWNhbGx5Ci0gKiAoZm9yIGV4YW1wbGUgd2hlbiB1c2luZyBhIC5nZXQgb3IgLmdldFRpbWUgbWV0aG9kIGFzIGRpc2N1c3NlZCBhYm92ZSksCi0gKiB0aGUgeWVhciBpcyBkZWZhdWx0ZWQgdG8geWVhciAwIChhbHNvIGtub3duIGFzIDEgQkMpLiAgVGhpcyBpcyBkaWZmZXJlbnQKLSAqIGZyb20ge0BsaW5rIEdyZWdvcmlhbkNhbGVuZGFyfSwgd2hpY2ggY2hvb3NlcyAxOTcwLiBUaGUgcmVhc29uIDAgaXMgcHJlZmVyYWJsZQotICogaXMgdGhhdCBpdCBpcyBhIGxlYXAgeWVhciBhbmQgc28gaXQgcGVybWl0cyB0aGUgZGF0ZSAtLTItMjkgdG8gYmUgc3BlY2lmaWVkCi0gKiBzdGFibHkuIEEgZGlmZmVyZW50IGRlZmF1bHQgeWVhciBjYW4gYmUgY2hvc2VuIHZpYSB0aGUgc3RhdGljIG1ldGhvZAotICoge0BsaW5rICNzZXREZWZhdWx0WWVhcihpbnQpIFhtbENhbGVuZGFyLnNldERlZmF1bHRZZWFyKCl9LCBvciBieSBzZXR0aW5nIHRoZSAKLSAqIHN5c3RlbSBwcm9wZXJ0eSAidXNlci5kZWZhdWx0eWVhciIuIElmIHlvdSBkbyBjaGFuZ2UgdGhpcyB2YWx1ZSwgeW91IHNob3VsZCAKLSAqIHBpY2sgYW5vdGhlciBsZWFwIHllYXIgc3VjaCBhcyAyMDAwIGFuZCBhdm9pZCBub24tbGVhcCB5ZWFycyBzdWNoIGFzIDE5MDAuCi0gKiA8L2xpPgotICogPGxpPgotICogV2hlbiBjb25zdHJ1Y3RpbmcgYW4gWG1sQ2FsZW5kYXIgZnJvbSBhbiBYTUwgU2NoZW1hCi0gKiBmb3JtYXR0ZWQgZGF0ZSBvciB0aW1lIHN0cmluZyBvciBHRGF0ZSBvYmplY3QsIHRoZSB0aW1lem9uZQotICogZm9yIHRoZSBjYWxlbmRhciBpcyB0YWtlbiBmcm9tIHRoZSBzdHJpbmcgaWYgaXQgaXMgcHJlc2VudCwgb3IKLSAqIHRha2VuIHRvIGJlIHtAbGluayBqYXZhLnV0aWwuVGltZVpvbmUjZ2V0RGVmYXVsdCgpIFRpbWVab25lLmdldERlZmF1bHQoKX0gaWYgbm90LgotICogPHA+Ci0gKiAgICAgRm9yIGV4YW1wbGUsIHRoZSBYTUwgdGltZXpvbmUgIloiIGlzIHRyYW5zbGF0ZWQgdG8gIkdNVCI7Ci0gKiAgICAgdGhlIFhNTCB0aW1lem9uZSAiKzA1OjAwIiBpcyB0cmFuc2xhdGVkIHRvICJHTVQrMDU6MDAiLgotICogPC9wPgotICogPC9saT4KLSAqIDxsaT4KLSAqIEZpbmFsbHksIHRoaXMgaW1wbGVtZW50YXRpb24gcHJvdmlkZXMgYSBTdHJpbmcgY29uc3RydWN0b3IgYW5kIGEKLSAqIHRvU3RyaW5nKCkgbWV0aG9kIHRoYXQgY29tcGx5IHdpdGggdGhlIFhNTCBTY2hlbWEgY29udmVudGlvbnMKLSAqIGZvciBmb3JtYXR0aW5nIGEgZGF0ZS4gSWYgb25seSBhIHN1YnNldCBvZiBmaWVsZHMgaGF2ZSBiZWVuCi0gKiBleHBsaWNpdGx5IHNldCwgdG9TdHJpbmcoKSBwcm9kdWNlcyBhIHN0cmluZyB3aXRoIHRoZSBwcm9wZXIgc3Vic2V0Ci0gKiBvZiBpbmZvcm1hdGlvbi4KLSAqIDwvbGk+Ci0gKiA8L29sPgotICovIAotcHVibGljIGNsYXNzIFhtbENhbGVuZGFyIGV4dGVuZHMgR3JlZ29yaWFuQ2FsZW5kYXIKLXsKLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGFuIFhtbENhbGVuZGFyIGZvciBhIHN0YW5kYXJkIFhNTAotICAgICAqIHNjaGVtYSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcuCi0gICAgICogCi0gICAgICogVGhlIHBhcnNlciBhY2NlcHRzIGFueSBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdHM6Ci0gICAgICogCi0gICAgICogWVlZWS1NTS1ERFRoaDptbTpzcyAgICAgICAgICAtIGRhdGVUaW1lCi0gICAgICogWVlZWS1NTS1ERCAgICAgICAgICAgICAgICAgICAtIGRhdGUKLSAgICAgKiAgICAgICAgICAgIGhoOm1tOnNzICAgICAgICAgIC0gdGltZQotICAgICAqIFlZWVkgICAgICAgICAgICAgICAgICAgICAgICAgLSBnWWVhcgotICAgICAqICAgIC0tTU0gICAgICAgICAgICAgICAgICAgICAgLSBnTW9udGgKLSAgICAgKiAgICAgIC0tLUREICAgICAgICAgICAgICAgICAgIC0gZ0RheQotICAgICAqIAotICAgICAqIFRoZSBwYXJzZXIgYWN0dWFsbHkgYWNjZXB0cyBhbGwgMTYgY29tYmluYXRpb25zIG9mIHN1YnNldHMgb2YKLSAgICAgKiBmaWVsZHMgKFksIE0sIEQsIFQpIHVzaW5nIHRoZSBzYW1lIHNjaGVtZSwgZXZlbiBmb3IgY29tYmluYXRpb25zCi0gICAgICogdGhhdCBhcmUgbm90IGRlZmluZWQgYXMgdHlwZXMgaW4gdGhlIHNjaGVtYSBzcGVjLCBzdWNoIGFzCi0gICAgICogeWVhciwgZGF5LCBhbmQgdGltZToKLSAgICAgKiAKLSAgICAgKiBZWVlZLS1ERFRoaDptbTpzcyAgICAgICAgICAgIC0gW2V2ZXJ5dGhpbmcgYnV0IG1vbnRoIHNwZWNpZmllZF0KLSAgICAgKiAKLSAgICAgKiBJbiB0aGUgc3RyaW5nLCBlYWNoIGZpZWxkIG11c3QgYmUgcGFkZGVkIHRvIGl0cyBmdWxsIHdpZHRoLCBmb3IKLSAgICAgKiBleGFtcGxlLCBKYW51YXJ5IG11c3QgYmUgLS0wMSwgbm90IGp1c3QgLS0xLgotICAgICAqIAotICAgICAqIEluIHBhcnRpY3VsYXIsIGEgeWVhciBtdXN0IGJlIHBhZGRlZCB0byBhdCBsZWFzdCBmb3VyIGRpZ2l0cywgc28KLSAgICAgKiAiOTgiIGlzIG5vdCBhIHZhbGlkIHllYXIsIGFsdGhvdWdoICIxOTk4IiBhbmQgIjAwOTgiIGFyZSBib3RoIHZhbGlkCi0gICAgICogeWVhcnMsIHVuYW1iaWd1b3VzbHkgMTkgY2VudHVyaWVzIHNlcGFyYXRlZCBmcm9tIGVhY2ggb3RoZXIuICBBIHllYXIKLSAgICAgKiBtYXkgYWxzbyBiZSBwcmVjZWRlZCBieSBhIG1pbnVzIHN5bWJvbDogMDAwMCBpcyAxIEJDIGFuZCAtMDAwMSBpcwotICAgICAqIDIgQkMuCi0gICAgICoKLSAgICAgKiBGaW5hbGx5IGEgdGltZXpvbmUgaXMgYWx3YXlzIGFsbG93ZWQgKHlldCBvcHRpb25hbCkgYXQgdGhlIGVuZC4KLSAgICAgKiBUaW1lem9uZXMgbXVzdCBiZSBlaXRoZXIgIloiIChVVEMsIHdoaWNoIHdlIHRyYW5zbGF0ZSB0byBHTVQpLAotICAgICAqIG9yIHNpbXBsZSBvZmZzZXRzIGZyb20gVVRDIGluIHRoZSByYW5nZSAiLTE0OjAwIiB0byAiKzE0OjAwIiwKLSAgICAgKiBmb3IgZXhhbXBsZTogIjE0OjMwOjAwLTA1OjAwIiBzcGVjaWZpZXMgMjozMCBQTSBpbiB0aGUKLSAgICAgKiBhZnRlcm5vb24gYXQgVVRDLTA1OjAwLCB3aGljaCBpcyB0aGUgc2FtZSBhcyBFU1QuCi0gICAgICogCi0gICAgICogSWYgYSB0aW1lem9uZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBUaW1lWm9uZSBpcyB1c2VkLgotICAgICAqLyAKLSAgICBwdWJsaWMgWG1sQ2FsZW5kYXIoU3RyaW5nIHhtbFNjaGVtYURhdGVTdHJpbmcpCi0gICAgewotICAgICAgICB0aGlzKG5ldyBHRGF0ZSh4bWxTY2hlbWFEYXRlU3RyaW5nKSk7IC8vIHVzZSBHRGF0ZSB0byBwYXJzZQotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGFuIFhtbENhbGVuZGFyIGZyb20gYSBHRGF0ZS4KLSAgICAgKiAKLSAgICAgKiBJZiB0aGUgaW5zdGFuY2UgaXMgbm90IGNvbXBsZXRlZCwgeW91IGNhbiByb3VuZC10cmlwIHRvIGFuCi0gICAgICogZXF1aXZhbGVudCBHRGF0ZSBieSB3cml0aW5nICJuZXcgR0RhdGUobmV3IFhtbENhbGVuZGFyKGdkYXRlKSkiLgotICAgICAqIEhvd2V2ZXIsIGlmIHlvdSBhY2Nlc3MgYW55IG9mIHRoZSB1bnNldCBmaWVsZHMgb2YgdGhlIGNhbGVuZGFyLCBhbGwKLSAgICAgKiB0aGUgZmllbGRzIHdpbGwgYmUgYXV0b21hdGljYWxseSBmaWxsZWQgaW4sIHNvIHBhcnRpYWwgZGF0ZXMKLSAgICAgKiB3aXRob3V0IHRpbWV6b25lcyBvciBvdGhlciBmaWVsZHMgd2lsbCBub3Qgcm91bmQtdHJpcCBhZnRlciBhY2Nlc3MuCi0gICAgICovIAotICAgIHB1YmxpYyBYbWxDYWxlbmRhcihHRGF0ZVNwZWNpZmljYXRpb24gZGF0ZSkKLSAgICB7Ci0gICAgICAgIHRoaXMoR0RhdGUudGltZVpvbmVGb3JHRGF0ZShkYXRlKSwgZGF0ZSk7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgWG1sQ2FsZW5kYXIoVGltZVpvbmUgdHosIEdEYXRlU3BlY2lmaWNhdGlvbiBkYXRlKQotICAgIHsKLSAgICAgICAgc3VwZXIodHopOwotICAgICAgICBzZXRHcmVnb3JpYW5DaGFuZ2UoX2JlZ2lubmluZ09mVGltZSk7IC8vIHByb2xlcHRpYwotICAgICAgICBjbGVhcigpOwotICAgICAgICAKLSAgICAgICAgaWYgKGRhdGUuaGFzWWVhcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeSA9IGRhdGUuZ2V0WWVhcigpOwotICAgICAgICAgICAgaWYgKHkgPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNldChDYWxlbmRhci5FUkEsIEdyZWdvcmlhbkNhbGVuZGFyLkFEKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzZXQoQ2FsZW5kYXIuRVJBLCBHcmVnb3JpYW5DYWxlbmRhci5CQyk7Ci0gICAgICAgICAgICAgICAgeSA9IDEgLSB5OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2V0KENhbGVuZGFyLllFQVIsIHkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChkYXRlLmhhc01vbnRoKCkpCi0gICAgICAgICAgICBzZXQoQ2FsZW5kYXIuTU9OVEgsIGRhdGUuZ2V0TW9udGgoKSAtIDEpOyAvLyBub3RlISEKLSAgICAgICAgaWYgKGRhdGUuaGFzRGF5KCkpCi0gICAgICAgICAgICBzZXQoQ2FsZW5kYXIuREFZX09GX01PTlRILCBkYXRlLmdldERheSgpKTsKLSAgICAgICAgaWYgKGRhdGUuaGFzVGltZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzZXQoQ2FsZW5kYXIuSE9VUl9PRl9EQVksIGRhdGUuZ2V0SG91cigpKTsKLSAgICAgICAgICAgIHNldChDYWxlbmRhci5NSU5VVEUsIGRhdGUuZ2V0TWludXRlKCkpOwotICAgICAgICAgICAgc2V0KENhbGVuZGFyLlNFQ09ORCwgZGF0ZS5nZXRTZWNvbmQoKSk7Ci0gICAgICAgICAgICBpZiAoZGF0ZS5nZXRGcmFjdGlvbigpLnNjYWxlKCkgPiAwKQotICAgICAgICAgICAgICAgIHNldChDYWxlbmRhci5NSUxMSVNFQ09ORCwgZGF0ZS5nZXRNaWxsaXNlY29uZCgpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZGF0ZS5oYXNUaW1lWm9uZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzZXQoQ2FsZW5kYXIuWk9ORV9PRkZTRVQsIGRhdGUuZ2V0VGltZVpvbmVTaWduKCkgKiAxMDAwICogNjAgKiAoZGF0ZS5nZXRUaW1lWm9uZUhvdXIoKSAqIDYwICsgZGF0ZS5nZXRUaW1lWm9uZU1pbnV0ZSgpKSk7Ci0gICAgICAgICAgICBzZXQoQ2FsZW5kYXIuRFNUX09GRlNFVCwgMCk7IC8vIG5vdGUhISAgaWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhlbiBHcmVnb3JpYW5DYWxlbmRhciB3aWxsIHBpY2sgdXAgRFNUIGZyb20gdGhlIHRpbWUgem9uZQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYW4gWG1sQ2FsZW5kYXIgZnJvbSBhIERhdGUuCi0gICAgICogCi0gICAgICogVGhlIGRlZmF1bHQgVGltZVpvbmUgaXMgdXNlZCBmb3IgY29tcHV0aW5nIHRoZSB2YXJpb3VzIGZpZWxkcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgWG1sQ2FsZW5kYXIoRGF0ZSBkYXRlKQotICAgIHsKLSAgICAgICAgdGhpcyhUaW1lWm9uZS5nZXREZWZhdWx0KCksIG5ldyBHRGF0ZShkYXRlKSk7Ci0gICAgICAgIGNvbXBsZXRlKCk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYW4gWG1sQ2FsZW5kYXIgd2l0aCB0aGUgc3BlY2lmaWVkIHllYXIsIG1vbnRoLCBkYXksCi0gICAgICogaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFuZCBvcHRpb25hbCBmcmFjdGlvbmFsIHNlY29uZHMsIGluCi0gICAgICogdGhlIGRlZmF1bHQgdGltZXpvbmUuCi0gICAgICovCi0gICAgcHVibGljIFhtbENhbGVuZGFyKAotICAgICAgICAgICAgaW50IHllYXIsCi0gICAgICAgICAgICBpbnQgbW9udGgsCi0gICAgICAgICAgICBpbnQgZGF5LAotICAgICAgICAgICAgaW50IGhvdXIsCi0gICAgICAgICAgICBpbnQgbWludXRlLAotICAgICAgICAgICAgaW50IHNlY29uZCwKLSAgICAgICAgICAgIEJpZ0RlY2ltYWwgZnJhY3Rpb24pCi0gICAgewotICAgICAgICB0aGlzKFRpbWVab25lLmdldERlZmF1bHQoKSwgbmV3IEdEYXRlKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBmcmFjdGlvbikpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGFuIFhtbENhbGVuZGFyIHdpdGggdGhlIHNwZWNpZmllZCB5ZWFyLCBtb250aCwgZGF5LAotICAgICAqIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBhbmQgb3B0aW9uYWwgZnJhY3Rpb25hbCBzZWNvbmRzLCBpbgotICAgICAqIHRoZSBzcGVjaWZpZWQgdGltZXpvbmUuCi0gICAgICovCi0gICAgcHVibGljIFhtbENhbGVuZGFyKAotICAgICAgICAgICAgaW50IHllYXIsCi0gICAgICAgICAgICBpbnQgbW9udGgsCi0gICAgICAgICAgICBpbnQgZGF5LAotICAgICAgICAgICAgaW50IGhvdXIsCi0gICAgICAgICAgICBpbnQgbWludXRlLAotICAgICAgICAgICAgaW50IHNlY29uZCwKLSAgICAgICAgICAgIEJpZ0RlY2ltYWwgZnJhY3Rpb24sCi0gICAgICAgICAgICBpbnQgdHpTaWduLAotICAgICAgICAgICAgaW50IHR6SG91ciwKLSAgICAgICAgICAgIGludCB0ek1pbnV0ZSkKLSAgICB7Ci0gICAgICAgIHRoaXMobmV3IEdEYXRlKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBmcmFjdGlvbiwgdHpTaWduLCB0ekhvdXIsIHR6TWludXRlKSk7Ci0gICAgfQotICAgIAotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4gdGltZSBmaWVsZC4KLSAgICAgKiAKLSAgICAgKiBVbmxpa2UgdGhlIEdyZWdvcmlhbkNhbGVuZGFyIGltcGxlbWVudGF0aW9uLCB0aGUgZ2V0KCkgZG9lcyBub3QKLSAgICAgKiBmb3JjZSBhIGNvbXBsZXRlIG9mIGFsbCBmaWVsZHMuICBJZiB5b3Ugd2lzaCB0byBmb3JjZSBhIGNvbXBsZXRpb24KLSAgICAgKiBvZiBhbGwgdGhlIGZpZWxkcywgY2FsbCBnZXRUaW1lKCkgZmlyc3QuCi0gICAgICovCi0gICAgcHVibGljIGludCBnZXQoaW50IGZpZWxkKQotICAgIHsKLSAgICAgICAgaWYgKCFpc1NldChmaWVsZCkgfHwgaXNUaW1lU2V0KQotICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmdldChmaWVsZCk7IC8vIGZvcmNlcyBhIGNvbXBsZXRlCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbEdldChmaWVsZCk7IC8vIGRvZXMgbm90IGZvcmNlIGEgY29tcGxldGUuCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhbiBlbXB0eSBpbnN0YW5jZSB3aXRoIG5vIGZpZWxkcyBzZXQuCi0gICAgICovIAotICAgIHB1YmxpYyBYbWxDYWxlbmRhcigpCi0gICAgewotICAgICAgICBzZXRHcmVnb3JpYW5DaGFuZ2UoX2JlZ2lubmluZ09mVGltZSk7IC8vIHByb2xlcHRpYwotICAgICAgICBjbGVhcigpOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgZGVmYXVsdFllYXIgPSBJbnRlZ2VyLk1JTl9WQUxVRTsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9ERUZBVUxUX1lFQVIgPSAwOyAKLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IHllYXIgdGhhdCBpcyB1c2VkIHdoZW4gbm8geWVhciBpcyBzcGVjaWZpZWQuCi0gICAgICovIAotICAgIHB1YmxpYyBzdGF0aWMgaW50IGdldERlZmF1bHRZZWFyKCkKLSAgICB7Ci0gICAgICAgIGlmIChkZWZhdWx0WWVhciA9PSBJbnRlZ2VyLk1JTl9WQUxVRSkKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHllYXJzdHJpbmcgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZXIuZGVmYXVsdHllYXIiKTsKLSAgICAgICAgICAgICAgICBpZiAoeWVhcnN0cmluZyAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0WWVhciA9IEludGVnZXIucGFyc2VJbnQoeWVhcnN0cmluZyk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0WWVhciA9IERFRkFVTFRfREVGQVVMVF9ZRUFSOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRlZmF1bHRZZWFyID0gREVGQVVMVF9ERUZBVUxUX1lFQVI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGRlZmF1bHRZZWFyOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBkZWZhdWx0IHllYXIgdG8gYmUgdXNlZCB3aGVuIG5vIHllYXIgaXMgc3BlY2lmaWVkLgotICAgICAqLyAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0RGVmYXVsdFllYXIoaW50IHllYXIpCi0gICAgewotICAgICAgICBkZWZhdWx0WWVhciA9IHllYXI7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIE92ZXJyaWRlcyBHcmVnb3JpYW5DYWxlbmRhci5jb21wdXRlVGltZSB0byBhcHBseSBhIGRpZmZlcmVudAotICAgICAqIGRlZmF1bHQgeWVhci4gIChJdCBtdXN0IGJlIGEgbGVhcCB5ZWFyLikKLSAgICAgKi8gCi0gICAgcHJvdGVjdGVkIHZvaWQgY29tcHV0ZVRpbWUoKQotICAgIHsKLSAgICAgICAgYm9vbGVhbiB1bnNldFllYXIgPSAhaXNTZXQoWUVBUik7Ci0gICAgICAgIGlmICh1bnNldFllYXIpCi0gICAgICAgICAgICBzZXQoWUVBUiwgZ2V0RGVmYXVsdFllYXIoKSk7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBzdXBlci5jb21wdXRlVGltZSgpOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsbHkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHVuc2V0WWVhcikKLSAgICAgICAgICAgICAgICBjbGVhcihZRUFSKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAgICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgRGF0ZSBfYmVnaW5uaW5nT2ZUaW1lID0gbmV3IERhdGUoTG9uZy5NSU5fVkFMVUUpOwotICAgIAotICAgIC8qKgotICAgICAqIFByaW50cyB0aGUgWG1sQ2FsZW5kYXIgdXNpbmcgYSBzdGFuZGFyZCBYTUwgU2NoZW1hCi0gICAgICogZm9ybWF0LCBhcyBkZXNjcmliZWQgaW4gWG1sQ2FsZW5kYXIoU3RyaW5nIHMpLgotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChuZXcgR0RhdGUodGhpcykpLnRvU3RyaW5nKCk7IC8vIHVzZSBHRGF0ZSB0byBwcmludAotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjliMTBlLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MTEgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZi5SZWZlcmVuY2U7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZi5XZWFrUmVmZXJlbmNlOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotLyoqCi0gKiBSZXByZXNlbnRzIGEgcG9zaXRpb24gYmV0d2VlbiB0d28gbG9naWNhbCB0b2tlbnMgaW4gYW4gWE1MIGRvY3VtZW50LiAKLSAqIAotICogVGhlIHRva2VucyB0aGVtc2VsdmVzIGFyZSBub3QgZXhwb3NlZCBhcyBvYmplY3RzLCBidXQgdGhlaXIgdHlwZSBhbmQgcHJvcGVydGllcwotICogYXJlIGRpc2NvdmVyYWJsZSB0aHJvdWdoIG1ldGhvZHMgb24gdGhlIGN1cnNvci4gIEluIHBhcnRpY3VsYXIsIHRoZSBnZW5lcmFsCi0gKiBjYXRlZ29yeSBvZiB0b2tlbiBpcyByZXByZXNlbnRlZCBieSBhIHtAbGluayBYbWxDdXJzb3IuVG9rZW5UeXBlIFRva2VuVHlwZX0uPGJyLz48YnIvPgotICogCi0gKiBZb3UgdXNlIGFuIFhtbEN1cnNvciBpbnN0YW5jZSB0byBuYXZpZ2F0ZSB0aHJvdWdoIGFuZCBtYW5pcHVsYXRlIGFuIFhNTCAKLSAqIGluc3RhbmNlIGRvY3VtZW50LiAKLSAqIE9uY2UgeW91IG9idGFpbiBhbiBYTUwgZG9jdW1lbnQsIHlvdSBjYW4gY3JlYXRlIGEgY3Vyc29yIHRvIHJlcHJlc2VudCAKLSAqIGEgc3BlY2lmaWMgcGxhY2UgaW4gdGhlIFhNTC4gQmVjYXVzZSB5b3UgY2FuIHVzZSBhIGN1cnNvciB3aXRoIG9yIAotICogd2l0aG91dCBhIHNjaGVtYSBjb3JyZXNwb25kaW5nIHRvIHRoZSBYTUwsIGN1cnNvcnMgYXJlIGFuIGlkZWFsIAotICogd2F5IHRvIGhhbmRsZSBYTUwgd2l0aG91dCBhIHNjaGVtYS4gWW91IGNhbiBjcmVhdGUgYSBuZXcgY3Vyc29yIGJ5Ci0gKiBjYWxsaW5nIHRoZSB7QGxpbmsgWG1sVG9rZW5Tb3VyY2UjbmV3Q3Vyc29yKCkgbmV3Q3Vyc29yfSBtZXRob2QgCi0gKiBleHBvc2VkIGJ5IGFuIG9iamVjdCByZXByZXNlbnRpbmcKLSAqIHRoZSBYTUwsIHdoZXRoZXIgaXQgd2FzIHBhcnNlZCBpbnRvIGEgc3Ryb25nIHR5cGUgY29tcGlsZWQgZnJvbSAKLSAqIHNjaGVtYSBvciBhbiB7QGxpbmsgWG1sT2JqZWN0IFhtbE9iamVjdH0gKGFzIGluIHRoZSBuby1zY2hlbWEgY2FzZSkuPGJyLz48YnIvPgotICogCi0gKiBXaXRoIGFuIFhtbEN1cnNvciwgeW91IGNhbiBhbHNvOiA8YnIvPjxici8+Ci0gKiAKLSAqIDx1bD4KLSAqIDxsaT5FeGVjdXRlIFhRdWVyeSBhbmQgWFBhdGggZXhwcmVzc2lvbnMgYWdhaW5zdCB0aGUgWE1MIHdpdGggdGhlCi0gKiBleGVjUXVlcnkgYW5kIHNlbGVjdFBhdGggbWV0aG9kcy48L2xpPgotICogCi0gKiA8bGk+RWRpdCBhbmQgcmVzaGFwZSB0aGUgZG9jdW1lbnQgYnkgaW5zZXJ0aW5nLCBtb3ZpbmcsIGNvcHlpbmcsIGFuZCByZW1vdmluZwotICogWE1MLjwvbGk+Ci0gKiAKLSAqIDxsaT5JbnNlcnQgYm9va21hcmtzIHRoYXQgInN0aWNrIiB0byB0aGUgWE1MIGF0IHRoZSBjdXJzb3IncwotICogcG9zaXRpb24gZXZlbiBpZiB0aGUgY3Vyc29yIG9yIFhNTCBtb3Zlcy48L2xpPgotCi0gKiA8bGk+R2V0IGFuZCBzZXQgdmFsdWVzIGZvciBjb250YWluZXJzIChlbGVtZW50cyBhbmQgd2hvbGUgZG9jdW1lbnRzKSwKLSAqIGF0dHJpYnV0ZXMsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLCBhbmQgY29tbWVudHMuPC9saT4KLSAqIDwvdWw+Ci0gKiAKLSAqIEEgY3Vyc29yIG1vdmVzIHRocm91Z2ggWE1MIGJ5IG1vdmluZyBwYXN0IHRva2Vucy4gQQotICogdG9rZW4gcmVwcmVzZW50cyBhIGNhdGVnb3J5IG9mIFhNTCBtYXJrdXAsIHN1Y2ggYXMgdGhlIHN0YXJ0IG9mIGFuIGVsZW1lbnQsIAotICogaXRzIGVuZCwgYW4gYXR0cmlidXRlLCBjb21tZW50LCBhbmQgc28gb24uIFhtbEN1cnNvciBtZXRob2RzIHN1Y2ggYXMKLSAqIHRvTmV4dFRva2VuLCB0b05leHRTaWJsaW5nLCB0b1BhcmVudCwgYW5kIHNvIG9uIG1vdmUgdGhlIGN1cnNvciAKLSAqIGFtb25nIHRva2Vucy4gRWFjaCB0b2tlbidzIGNhdGVnb3J5IGlzIG9mIGEgcGFydGljdWxhciA8ZW0+dHlwZTwvZW0+LCByZXByZXNlbnRlZCAKLSAqIGJ5IG9uZSBvZiB0aGUgbmluZSB0eXBlcyBkZWZpbmVkIGJ5IHRoZSB7QGxpbmsgWG1sQ3Vyc29yLlRva2VuVHlwZSBUb2tlblR5cGV9IGNsYXNzLiA8YnIvPjxici8+Ci0gKiAKLSAqIFdoZW4geW91IGdldCBhIG5ldyBjdXJzb3IgZm9yIGEgd2hvbGUgaW5zdGFuY2UgZG9jdW1lbnQsIHRoZSBjdXJzb3IgaXMKLSAqIGludGlhbGx5IGxvY2F0ZWQgYmVmb3JlIHRoZSBTVEFSVERPQyB0b2tlbi4gVGhpcyB0b2tlbiwgd2hpY2ggaGFzIG5vIGFuYWxvZ3kKLSAqIGluIHRoZSBYTUwgc3BlY2lmaWNhdGlvbiwgaXMgcHJlc2VudCBpbiB0aGlzIGxvZ2ljYWwgbW9kZWwgb2YgWE1MCi0gKiBzbyB0aGF0IHlvdSBtYXkgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgZG9jdW1lbnQgYXMgYSB3aG9sZQotICogYW5kIHRoZSBjb250ZW50IG9mIHRoZSBkb2N1bWVudC4gVGVybWluYXRpbmcgdGhlIGRvY3VtZW50IGlzIGFuIEVORERPQwotICogdG9rZW4uIFRoaXMgdG9rZW4gaXMgYWxzbyBub3QgcGFydCBvZiB0aGUgWE1MIHNwZWNpZmljYXRpb24uIEEgY3Vyc29yIAotICogbG9jYXRlZCBpbW1lZGlhdGVseSBiZWZvcmUgdGhpcyB0b2tlbiBpcyBhdCB0aGUgdmVyeSBlbmQgb2YgdGhlIGRvY3VtZW50LiAKLSAqIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBwb3NpdGlvbiB0aGUgY3Vyc29yIGFmdGVyIHRoZSBFTkRET0MgdG9rZW4uIAotICogVGh1cywgdGhlIFNUQVJURE9DIGFuZCBFTkRET0MgdG9rZW5zIGFyZSBlZmZlY3RpdmVseSAiYm9va2VuZHMiIGZvciB0aGUgY29udGVudCBvZiAKLSAqIHRoZSBkb2N1bWVudC48YnIvPjxici8+Ci0gKiAKLSAqIEZvciBleGFtcGxlLCBmb3IgdGhlIGZvbGxvd2luZyBYTUwsIGlmIHlvdSB3ZXJlIHRoZSBuYXZpZ2F0ZSBhIGN1cnNvcgotICogdGhyb3VnaCB0aGUgWE1MIGRvY3VtZW50IHVzaW5nIHRvTmV4dFRva2VuKCksIHRoZSBsaXN0IG9mIHRva2VuIHR5cGVzIHRoYXQgCi0gKiBmb2xsb3dzIHJlcHJlc2VudHMgdGhlIHRva2VuIHNlcXVlbmNlIHlvdSB3b3VsZCBlbmNvdW50ZXIuIDxici8+PGJyLz4KLSAqIAotICogPHByZT4KLSAqICZsdDtzYW1wbGUgeD0neScmZ3Q7Ci0gKiAgICAgJmx0O3ZhbHVlJmd0O2ZvbyZsdDsvdmFsdWUmZ3Q7Ci0gKiAmbHQ7L3NhbXBsZSZndDsKLSAqIDwvcHJlPgotICogCi0gKiBTVEFSVERPQyA8YnIvPgotICogU1RBUlQgKHNhbXBsZSkgPGJyLz4KLSAqIEFUVFIgKHg9J3knKSA8YnIvPgotICogVEVYVCAoIlxuICAgICIpIDxici8+Ci0gKiBTVEFSVCAodmFsdWUpIDxici8+Ci0gKiBURVhUICgiZm9vIikgPGJyLz4KLSAqIEVORCAodmFsdWUpIDxici8+Ci0gKiBURVhUICgiXG4iKSA8YnIvPgotICogRU5EIChzYW1wbGUpPGJyLz4KLSAqIEVORERPQyA8YnIvPjxici8+Ci0gKgotICogV2hlbiB0aGVyZSBhcmUgbm8gbW9yZSB0b2tlbnMgYXZhaWxhYmxlLCBoYXNOZXh0VG9rZW4oKSByZXR1cm5zCi0gKiBmYWxzZSBhbmQgdG9OZXh0VG9rZW4oKSByZXR1cm5zIHRoZSBzcGVjaWFsIHRva2VuIHR5cGUgTk9ORSBhbmQgZG9lcyBub3QgbW92ZQotICogdGhlIGN1cnNvci4KLSAqIDxici8+PGJyLz4KLSAqIAotICogVGhlIHtAbGluayAjY3VycmVudFRva2VuVHlwZSgpIGN1cnJlbnRUb2tlblR5cGUoKX0gbWV0aG9kIAotICogd2lsbCByZXR1cm4gdGhlIHR5cGUgb2YgdGhlIHRva2VuIHRoYXQgaXMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGN1cnNvci4gCi0gKiBZb3UgY2FuIGFsc28gdXNlIGEgbnVtYmVyIG9mIGNvbnZlbmllbmNlIG1ldGhvZHMgdGhhdCB0ZXN0IGZvciBhIHBhcnRpY3VsYXIgCi0gKiB0b2tlbiB0eXBlLiBUaGVzZSBpbmNsdWRlIHRoZSBtZXRob2RzIGlzU3RhcnQoKSwgCi0gKiBpc1N0YXJ0ZG9jKCksIGlzVGV4dCgpLCBpc0F0dHIoKSwgYW5kIHNvIG9uLiBFYWNoIHJldHVybnMgYSBib29sZWFuIAotICogdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSB0b2tlbiB0aGF0IGZvbGxvd3MgdGhlIGN1cnNvciBpcyB0aGUgdHlwZSAKLSAqIGluIHF1ZXN0aW9uLiAKLSAqIDxici8+PGJyLz4KLSAqIAotICogQSBmZXcgb3RoZXIgbWV0aG9kcyBkZXRlcm1pbmUgd2hldGhlciB0aGUgdG9rZW4gaXMgb2YgYSBraW5kIHRoYXQgbWF5IGluY2x1ZGUgCi0gKiBtdWx0aXBsZSB0b2tlbiB0eXBlcy4gVGhlIGlzQW55QXR0cigpIG1ldGhvZCwgZm9yIGV4YW1wbGUsIHJldHVybnMgdHJ1ZSBpZgotICogdGhlIHRva2VuIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY3Vyc29yIGlzIGFueSBraW5kIG9mIGF0dHJpYnV0ZSwgCi0gKiBpbmNsdWRpbmcgdGhvc2Ugb2YgdGhlIEFUVFIgdG9rZW4gdHlwZSBhbmQgeG1sbnMgYXR0cmlidXRlcy4KLSAqIDxici8+PGJyLz4KLSAqIAotICogTGVnaXRpbWF0ZSBzZXF1ZW5jZXMgb2YgdG9rZW5zIGZvciBhbiBYTUwgZG9jdW1lbnQgYXJlIGRlc2NyaWJlZAotICogYnkgdGhlIGZvbGxvd2luZyBCYWNrdXMtTmF1ciBGb3JtIChCTkYpOiA8YnIvPgotICogCi0gKiA8cHJlPgotICogJmx0O2RvYyZndDsgOjo9IFNUQVJURE9DICZsdDthdHRyaWJ1dGVzJmd0OyAmbHQ7Y29udGVudCZndDsgRU5ERE9DCi0gKiAmbHQ7ZWxlbWVudCZndDsgOjo9IFNUQVJUICZsdDthdHRyaWJ1dGVzJmd0OyAmbHQ7Y29udGVudCZndDsgRU5ECi0gKiAmbHQ7YXR0cmlidXRlcyZndDsgOjo9ICggQVRUUiB8IE5BTUVTUEFDRSApICoKLSAqICZsdDtjb250ZW50Jmd0OyA6Oj0gKCBDT01NRU5UIHwgUFJPQ0lOU1QgfCBURVhUIHwgJmx0O2VsZW1lbnQmZ3Q7ICkgKgotICogPC9wcmU+Ci0gKiAKLSAqIE5vdGUgdGhhdCBhIGxlZ2l0aW1hdGUgc2VxdWVuY2UgaXMgU1RBUlRET0MgRU5ERE9DLCB0aGUgcmVzdWx0IG9mIAotICogY3JlYXRpbmcgYSBicmFuZCBuZXcgaW5zdGFuY2Ugb2YgYW4gZW1wdHkgZG9jdW1lbnQuIEFsc28gbm90ZSB0aGF0IAotICogYXR0cmlidXRlcyBtYXkgb25seSBmb2xsb3cgY29udGFpbmVyIHRva2VucyAoU1RBUlRET0Mgb3IgU1RBUlQpCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgWG1sQ3Vyc29yIGV4dGVuZHMgWG1sVG9rZW5Tb3VyY2UKLXsKLSAgICAvKioKLSAgICAgKiBBbiBlbnVtZXJhdGlvbiB0aGF0IGlkZW50aWZpZXMgdGhlIHR5cGUgb2YgYW4gWE1MIHRva2VuLgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgVG9rZW5UeXBlCi0gICAgewotICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nICggKSB7IHJldHVybiBfbmFtZTsgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogUmV0dXJucyBvbmUgb2YgdGhlIElOVF8gdmFsdWVzIGRlZmluZWQgaW4gdGhpcyBjbGFzcy4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBpbnQgaW50VmFsdWUgKCApIHsgcmV0dXJuIF92YWx1ZTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIE5vIHRva2VuLiAgU2VlIHtAbGluayAjaW50VmFsdWV9LiAqLyAKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5UX05PTkUgICAgICA9IDA7Ci0gICAgICAgIC8qKiBUaGUgc3RhcnQtZG9jdW1lbnQgdG9rZW4uICBTZWUge0BsaW5rICNpbnRWYWx1ZX0uICovIAotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlRfU1RBUlRET0MgID0gMTsKLSAgICAgICAgLyoqIFRoZSBlbmQtZG9jdW1lbnQgdG9rZW4uICBTZWUge0BsaW5rICNpbnRWYWx1ZX0uICovIAotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlRfRU5ERE9DICAgID0gMjsKLSAgICAgICAgLyoqIFRoZSBzdGFydC1lbGVtZW50IHRva2VuLiAgU2VlIHtAbGluayAjaW50VmFsdWV9LiAqLyAKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5UX1NUQVJUICAgICA9IDM7Ci0gICAgICAgIC8qKiBUaGUgZW5kLWVsZW1lbnQgdG9rZW4uICBTZWUge0BsaW5rICNpbnRWYWx1ZX0uICovIAotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlRfRU5EICAgICAgID0gNDsKLSAgICAgICAgLyoqIFRoZSB0ZXh0IHRva2VuLiAgU2VlIHtAbGluayAjaW50VmFsdWV9LiAqLyAKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5UX1RFWFQgICAgICA9IDU7Ci0gICAgICAgIC8qKiBUaGUgYXR0cmlidXRlIHRva2VuLiAgU2VlIHtAbGluayAjaW50VmFsdWV9LiAqLyAKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5UX0FUVFIgICAgICA9IDY7Ci0gICAgICAgIC8qKiBUaGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9uIHRva2VuLiAgU2VlIHtAbGluayAjaW50VmFsdWV9LiAqLyAKLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5UX05BTUVTUEFDRSA9IDc7Ci0gICAgICAgIC8qKiBUaGUgY29tbWVudCB0b2tlbi4gIFNlZSB7QGxpbmsgI2ludFZhbHVlfS4gKi8gCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElOVF9DT01NRU5UICAgPSA4OwotICAgICAgICAvKiogVGhlIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gdG9rZW4uICBTZWUge0BsaW5rICNpbnRWYWx1ZX0uICovIAotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTlRfUFJPQ0lOU1QgID0gOTsKLSAgICAgICAgCi0gICAgICAgIC8qKiBUcnVlIGlmIG5vIHRva2VuLiAqLwotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc05vbmUgICAgICAoICkgeyByZXR1cm4gdGhpcyA9PSBOT05FOyAgICAgIH0KLSAgICAgICAgLyoqIFRydWUgaWYgaXMgc3RhcnQtZG9jdW1lbnQgdG9rZW4uICovCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzU3RhcnRkb2MgICggKSB7IHJldHVybiB0aGlzID09IFNUQVJURE9DOyAgfQotICAgICAgICAvKiogVHJ1ZSBpZiBpcyBlbmQtZG9jdW1lbnQgdG9rZW4uICovCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzRW5kZG9jICAgICggKSB7IHJldHVybiB0aGlzID09IEVORERPQzsgICAgfQotICAgICAgICAvKiogVHJ1ZSBpZiBpcyBzdGFydC1lbGVtZW50IHRva2VuLiAqLwotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc1N0YXJ0ICAgICAoICkgeyByZXR1cm4gdGhpcyA9PSBTVEFSVDsgICAgIH0KLSAgICAgICAgLyoqIFRydWUgaWYgaXMgZW5kLWVsZW1lbnQgdG9rZW4uICovCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzRW5kICAgICAgICggKSB7IHJldHVybiB0aGlzID09IEVORDsgICAgICAgfQotICAgICAgICAvKiogVHJ1ZSBpZiBpcyB0ZXh0IHRva2VuLiAqLwotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc1RleHQgICAgICAoICkgeyByZXR1cm4gdGhpcyA9PSBURVhUOyAgICAgIH0KLSAgICAgICAgLyoqIFRydWUgaWYgaXMgYXR0cmlidXRlIHRva2VuLiAqLwotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0F0dHIgICAgICAoICkgeyByZXR1cm4gdGhpcyA9PSBBVFRSOyAgICAgIH0KLSAgICAgICAgLyoqIFRydWUgaWYgaXMgbmFtZXNwYWNlIGRlY2xhcmF0aW9uIHRva2VuLiAqLwotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc05hbWVzcGFjZSAoICkgeyByZXR1cm4gdGhpcyA9PSBOQU1FU1BBQ0U7IH0KLSAgICAgICAgLyoqIFRydWUgaWYgaXMgY29tbWVudCB0b2tlbi4gKi8KLSAgICAgICAgcHVibGljIGJvb2xlYW4gaXNDb21tZW50ICAgKCApIHsgcmV0dXJuIHRoaXMgPT0gQ09NTUVOVDsgICB9Ci0gICAgICAgIC8qKiBUcnVlIGlmIGlzIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gdG9rZW4uICovCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzUHJvY2luc3QgICggKSB7IHJldHVybiB0aGlzID09IFBST0NJTlNUOyAgfQotCi0gICAgICAgIC8qKiBUcnVlIGlmIGlzIHN0YXJ0LWRvY3VtZW50IG9yIHN0YXJ0LWVsZW1lbnQgdG9rZW4gKi8KLSAgICAgICAgcHVibGljIGJvb2xlYW4gaXNDb250YWluZXIgKCApIHsgcmV0dXJuIHRoaXMgPT0gU1RBUlRET0MgIHx8IHRoaXMgPT0gU1RBUlQ7IH0KLSAgICAgICAgLyoqIFRydWUgaWYgaXMgZW5kLWRvY3VtZW50IG9yIGVuZC1lbGVtZW50IHRva2VuICovCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzRmluaXNoICAgICggKSB7IHJldHVybiB0aGlzID09IEVORERPQyAgICB8fCB0aGlzID09IEVORDsgICB9Ci0gICAgICAgIC8qKiBUcnVlIGlmIGlzIGF0dHJpYnV0ZSBvciBuYW1lc3BhY2UgZGVjbGFyYXRpb24gdG9rZW4gKi8KLSAgICAgICAgcHVibGljIGJvb2xlYW4gaXNBbnlBdHRyICAgKCApIHsgcmV0dXJuIHRoaXMgPT0gTkFNRVNQQUNFIHx8IHRoaXMgPT0gQVRUUjsgIH0KLQotICAgICAgICAvKiogVGhlIHNpbmdsZXRvbiBuby10b2tlbiB0eXBlICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVG9rZW5UeXBlIE5PTkUgICAgICA9IG5ldyBUb2tlblR5cGUoICJOT05FIiwgICAgICBJTlRfTk9ORSAgICAgICk7Ci0gICAgICAgIC8qKiBUaGUgc2luZ2xldG9uIHN0YXJ0LWRvY3VtZW50IHRva2VuIHR5cGUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBUb2tlblR5cGUgU1RBUlRET0MgID0gbmV3IFRva2VuVHlwZSggIlNUQVJURE9DIiwgIElOVF9TVEFSVERPQyAgKTsKLSAgICAgICAgLyoqIFRoZSBzaW5nbGV0b24gc3RhcnQtZG9jdW1lbnQgdG9rZW4gdHlwZSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFRva2VuVHlwZSBFTkRET0MgICAgPSBuZXcgVG9rZW5UeXBlKCAiRU5ERE9DIiwgICAgSU5UX0VORERPQyAgICApOwotICAgICAgICAvKiogVGhlIHNpbmdsZXRvbiBzdGFydC1lbGVtZW50IHRva2VuIHR5cGUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBUb2tlblR5cGUgU1RBUlQgICAgID0gbmV3IFRva2VuVHlwZSggIlNUQVJUIiwgICAgIElOVF9TVEFSVCAgICAgKTsKLSAgICAgICAgLyoqIFRoZSBzaW5nbGV0b24gZW5kLWVsZW1lbnQgdG9rZW4gdHlwZSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFRva2VuVHlwZSBFTkQgICAgICAgPSBuZXcgVG9rZW5UeXBlKCAiRU5EIiwgICAgICAgSU5UX0VORCAgICAgICApOwotICAgICAgICAvKiogVGhlIHNpbmdsZXRvbiB0ZXh0IHRva2VuIHR5cGUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBUb2tlblR5cGUgVEVYVCAgICAgID0gbmV3IFRva2VuVHlwZSggIlRFWFQiLCAgICAgIElOVF9URVhUICAgICAgKTsKLSAgICAgICAgLyoqIFRoZSBzaW5nbGV0b24gYXR0cmlidXRlIHRva2VuIHR5cGUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBUb2tlblR5cGUgQVRUUiAgICAgID0gbmV3IFRva2VuVHlwZSggIkFUVFIiLCAgICAgIElOVF9BVFRSICAgICAgKTsKLSAgICAgICAgLyoqIFRoZSBzaW5nbGV0b24gbmFtZXNwYWNlIGRlY2xhcmF0aW9uIHRva2VuIHR5cGUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBUb2tlblR5cGUgTkFNRVNQQUNFID0gbmV3IFRva2VuVHlwZSggIk5BTUVTUEFDRSIsIElOVF9OQU1FU1BBQ0UgKTsKLSAgICAgICAgLyoqIFRoZSBzaW5nbGV0b24gY29tbWVudCB0b2tlbiB0eXBlICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVG9rZW5UeXBlIENPTU1FTlQgICA9IG5ldyBUb2tlblR5cGUoICJDT01NRU5UIiwgICBJTlRfQ09NTUVOVCAgICk7Ci0gICAgICAgIC8qKiBUaGUgc2luZ2xldG9uIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gdG9rZW4gdHlwZSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFRva2VuVHlwZSBQUk9DSU5TVCAgPSBuZXcgVG9rZW5UeXBlKCAiUFJPQ0lOU1QiLCAgSU5UX1BST0NJTlNUICApOwotCi0gICAgICAgIHByaXZhdGUgVG9rZW5UeXBlICggU3RyaW5nIG5hbWUsIGludCB2YWx1ZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9uYW1lID0gbmFtZTsKLSAgICAgICAgICAgIF92YWx1ZSA9IHZhbHVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIFN0cmluZyBfbmFtZTsKLSAgICAgICAgcHJpdmF0ZSBpbnQgICAgX3ZhbHVlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIERlYWxsb2NhdGVzIHJlc291cmNlcyBuZWVkZWQgdG8gbWFuYWdlIHRoZSBjdXJzb3IsIHJlbmRlcmluZyB0aGlzIGN1cnNvcgotICAgICAqIGlub3BlcmFibGUuIEJlY2F1c2UgY3Vyc29ycyBhcmUgbWFuYWdlZCBieSBhIG1lY2hhbmlzbSB3aGljaCBzdG9yZXMgdGhlIAotICAgICAqIFhNTCwgc2ltcGx5IGxldHRpbmcgYSBjdXJzb3IgZ28gb3V0IG9mIHNjb3BlIGFuZCBoYXZpbmcgdGhlIGdhcmJhZ2UgY29sbGVjdG9yCi0gICAgICogYXR0ZW1wdCB0byByZWNsYWltIGl0IG1heSBub3QgcHJvZHVjZSBkZXNpcmFibGUgcGVyZm9ybWFuY2UuPGJyLz48YnIvPgotICAgICAqCi0gICAgICogU28sIGV4cGxpY2l0bHkgZGlzcG9zaW5nIGEgY3Vyc29yIGFsbG93cyB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbgotICAgICAqIHRvIHJlbGVhc2UgaXRzIHJlc3BvbnNpYmlsaXR5IG9mIG1haW50YWluaW5nIGl0cyBwb3NpdGlvbi48YnIvPjxici8+Ci0gICAgICoKLSAgICAgKiBBZnRlciBhIGN1cnNvciBoYXMgYmVlbiBkaXNwb3NlZCwgaXQgbWF5IG5vdCBiZSB1c2VkIGFnYWluLiAgSXQgY2FuCi0gICAgICogdGhyb3cgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIG9yIE51bGxQb2ludGVyRXhjZXB0aW9uIGlmIHVzZWQgYWZ0ZXIKLSAgICAgKiBkaXNwb3NhbC48YnIvPjxici8+Ci0gICAgICovCi0KLSAgICB2b2lkIGRpc3Bvc2UgKCApOwotICAgIAotICAgIC8qKgotICAgICAqIE1vdmVzIHRoaXMgY3Vyc29yIHRvIHRoZSBzYW1lIHBvc2l0aW9uIGFzIHRoZSBtb3ZlVG8gY3Vyc29yLiAgaWYgdGhlCi0gICAgICogbW92ZVRvIGN1cnNvciBpcyBpbiBhIGRpZmZlcmVudCBkb2N1bWVudCBmcm9tIHRoaXMgY3Vyc29yLCB0aGlzIGN1cnNvcgotICAgICAqIHdpbGwgbm90IGJlIG1vdmVkLCBhbmQgZmFsc2UgcmV0dXJuZWQuCi0gICAgICogCi0gICAgICogQHBhcmFtICBtb3ZlVG8gIFRoZSBjdXJzb3IgYXQgdGhlIGxvY2F0aW9uIHRvIHdoaWNoIHRoaXMgY3Vyc29yCi0gICAgICogc2hvdWxkIGJlIG1vdmVkLgotICAgICAqIEByZXR1cm4gIHRydWUgaWYgdGhlIGN1cnNvciBtb3ZlZDsgb3RoZXJ3aXNlLCBmYWxzZS4KLSAgICAgKi8KLQotICAgIGJvb2xlYW4gdG9DdXJzb3IgKCBYbWxDdXJzb3IgbW92ZVRvICk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogU2F2ZXMgdGhlIGN1cnJlbnQgbG9jYXRpb24gb2YgdGhpcyBjdXJzb3Igb24gYW4gaW50ZXJuYWwgc3RhY2sgb2Ygc2F2ZWQKLSAgICAgKiBwb3NpdGlvbnMgKGluZGVwZW5kZW50IG9mIHNlbGVjdGlvbikuIFRoaXMgbG9jYXRpb24gbWF5IGJlIHJlc3RvcmVkCi0gICAgICogbGF0ZXIgYnkgY2FsbGluZyB0aGUgcG9wKCkgbWV0aG9kLgotICAgICAqLwotCi0gICAgdm9pZCBwdXNoICggKTsKLQotICAgIC8qKgotICAgICAqIFJlc3RvcmVzIHRoZSBjdXJzb3IgbG9jYXRpb24gbW9zdCByZWNlbnRseSBzYXZlZCB3aXRoIHRoZSBwdXNoKCkgbWV0aG9kLgotICAgICAqIAotICAgICAqIEByZXR1cm4gIHRydWUgaWYgdGhlcmUgd2FzIGEgbG9jYXRpb24gdG8gcmVzdG9yZTsgb3RoZXJ3aXNlLCBmYWxzZS4KLSAgICAgKi8KLQotICAgIGJvb2xlYW4gcG9wICggKTsKLQotICAgIC8qKgotICAgICAqIEV4ZWN1dGVzIHRoZSBzcGVjaWZpZWQgWFBhdGggZXhwcmVzc2lvbiBhZ2FpbnN0IHRoZSBYTUwgdGhhdCB0aGlzIAotICAgICAqIGN1cnNvciBpcyBpbi4gIFRoZSBjdXJzb3JzIHBvc2l0aW9uIGRvZXMgbm90IGNoYW5nZS4gIFRvIG5hdmlnYXRlIHRvIHRoZQotICAgICAqIHNlbGVjdGlvbnMsIHVzZSBoYXNOZXh0U2VsZWN0aW9uIGFuZCB0b05leHRTZWxlY3Rpb24gKHNpbWlsYXIgdG8KLSAgICAgKiBqYXZhLnV0aWwuSXRlcmF0b3IpLjxici8+PGJyLz4KLSAgICAgKiAKLSAgICAgKiBUaGUgcm9vdCByZWZlcnJlZCB0byBieSB0aGUgZXhwcmVzc2lvbiBzaG91bGQgYmUgZ2l2ZW4gYXMgCi0gICAgICogYSBkb3QuIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBwYXRoIGV4cHJlc3Npb246Ci0gICAgICogPHByZT4KLSAgICAgKiBjdXJzb3Iuc2VsZWN0UGF0aCgiLi9wdXJjaGFzZS1vcmRlci9saW5lLWl0ZW1bcHJpY2UgPD0gMjAuMDBdIik7Ci0gICAgICogPC9wcmU+Ci0gICAgICogCi0gICAgICogQHBhcmFtICBwYXRoICBUaGUgcGF0aCBleHByZXNzaW9uIHRvIGV4ZWN1dGUuCi0gICAgICogQHRocm93cyAgWG1sUnVudGltZUV4Y2VwdGlvbiAgSWYgdGhlIHF1ZXJ5IGV4cHJlc3Npb24gaXMgaW52YWxpZC4KLSAgICAgKi8KLSAgICB2b2lkIHNlbGVjdFBhdGggKCBTdHJpbmcgcGF0aCApOwotCi0gICAgLyoqCi0gICAgICogRXhlY3V0ZXMgdGhlIHNwZWNpZmllZCBYUGF0aCBleHByZXNzaW9uIGFnYWluc3QgdGhlIFhNTCB0aGF0IHRoaXMgCi0gICAgICogY3Vyc29yIGlzIGluLiBUaGUgY3Vyc29yJ3MgcG9zaXRpb24gZG9lcyBub3QgY2hhbmdlLiAgVG8gbmF2aWdhdGUgdG8gdGhlCi0gICAgICogc2VsZWN0aW9ucywgdXNlIGhhc05leHRTZWxlY3Rpb24gYW5kIHRvTmV4dFNlbGVjdGlvbiAoc2ltaWxhciB0bwotICAgICAqIGphdmEudXRpbC5JdGVyYXRvcikuPGJyLz48YnIvPgotICAgICAqIAotICAgICAqIFRoZSByb290IHJlZmVycmVkIHRvIGJ5IHRoZSBleHByZXNzaW9uIHNob3VsZCBiZSBnaXZlbiBhcyAKLSAgICAgKiBhIGRvdC4gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHBhdGggZXhwcmVzc2lvbjoKLSAgICAgKiA8cHJlPgotICAgICAqIGN1cnNvci5zZWxlY3RQYXRoKCIuL3B1cmNoYXNlLW9yZGVyL2xpbmUtaXRlbVtwcmljZSA8PSAyMC4wMF0iKTsKLSAgICAgKiA8L3ByZT4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gIHBhdGggIFRoZSBwYXRoIGV4cHJlc3Npb24gdG8gZXhlY3V0ZS4KLSAgICAgKiBAcGFyYW0gIG9wdGlvbnMgIE9wdGlvbnMgZm9yIHRoZSBxdWVyeS4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gY2FsbCAKLSAgICAgKiB0aGUge0BsaW5rIFhtbE9wdGlvbnMjc2V0WHF1ZXJ5Q3VycmVudE5vZGVWYXIoU3RyaW5nKSBYbWxPcHRpb25zLnNldFhxdWVyeUN1cnJlbnROb2RlVmFyKFN0cmluZyl9Ci0gICAgICogbWV0aG9kIHRvIHNwZWNpZnkgYSBwYXJ0aWN1bGFyIG5hbWUgZm9yIHRoZSBxdWVyeSBleHByZXNzaW9uIAotICAgICAqIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIHRoZSBjb250ZXh0IG5vZGUuCi0gICAgICogQHRocm93cyAgWG1sUnVudGltZUV4Y2VwdGlvbiAgSWYgdGhlIHF1ZXJ5IGV4cHJlc3Npb24gaXMgaW52YWxpZC4KLSAgICAgKi8KLSAgICB2b2lkIHNlbGVjdFBhdGggKCBTdHJpbmcgcGF0aCwgWG1sT3B0aW9ucyBvcHRpb25zICk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZXJlIGlzIGEgbmV4dCBzZWxlY3Rpb24uCi0gICAgICogCi0gICAgICogQHJldHVybiAgdHJ1ZSBpZiB0aGVyZSBpcyBhIG5leHQgc2VsZWN0aW9uOyBvdGhlcndpc2UsIGZhbHNlLgotICAgICAqLwotCi0gICAgYm9vbGVhbiBoYXNOZXh0U2VsZWN0aW9uICggKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBNb3ZlcyB0aGlzIGN1cnNvciB0byB0aGUgbmV4dCBsb2NhdGlvbiBpbiB0aGUgc2VsZWN0aW9uLCAKLSAgICAgKiBpZiBhbnkuIFNlZSB0aGUgc2VsZWN0UGF0aCgpIGFuZCBhZGRUb1NlbGVjdGlvbigpIG1ldGhvZHMuCi0gICAgICogCi0gICAgICogQHJldHVybiAgdHJ1ZSBpZiB0aGUgY3Vyc29yIG1vdmVkOyBvdGhlcndpc2UsIGZhbHNlLgotICAgICAqLwotCi0gICAgYm9vbGVhbiB0b05leHRTZWxlY3Rpb24gKCApOwotICAgCi0gICAgLyoqCi0gICAgICogTW92ZXMgdGhpcyBjdXJzb3IgdG8gdGhlIHNwZWNpZmllZCBsb2NhdGlvbiBpbiB0aGUgc2VsZWN0aW9uLiAKLSAgICAgKiBJZiBpIGlzIGxlc3MgdGhhbiB6ZXJvIG9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgc2VsZWN0aW9uCi0gICAgICogY291bnQsIHRoaXMgbWV0aG9kIHJldHVybnMgZmFsc2UuCi0gICAgICogIAotICAgICAqIFNlZSBhbHNvIHRoZSBzZWxlY3RQYXRoKCkgYW5kIGFkZFRvU2VsZWN0aW9uKCkgbWV0aG9kcy4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gIGkgIFRoZSBpbmRleCBvZiB0aGUgZGVzaXJlZCBsb2NhdGlvbi4KLSAgICAgKiBAcmV0dXJuICB0cnVlIGlmIHRoZSBjdXJzb3Igd2FzIG1vdmVkOyBvdGhlcndpc2UsIGZhbHNlLgotICAgICAqLwotCi0gICAgYm9vbGVhbiB0b1NlbGVjdGlvbiAoIGludCBpICk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgY291bnQgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLiBTZWUgYWxzbyB0aGUgc2VsZWN0UGF0aCgpIAotICAgICAqIGFuZCBhZGRUb1NlbGVjdGlvbigpIG1ldGhvZHMuCi0gICAgICogCi0gICAgICogWW91IG1heSBleHBlcmllbmNlIGJldHRlciBwZXJmb3JtYW5jZSBpZiB5b3UgdXNlIHRoZSBpdGVyYXRpb24KLSAgICAgKiBtb2RlbCB1c2luZyB0aGUgdG9OZXh0U2VsZWN0aW9uIG1ldGhvZCwgcmF0aGVyIHRoYW4gCi0gICAgICogdGhlIGluZGV4aW5nIG1vZGVsIHVzaW5nIHRoZSBnZXRTZWxlY3Rpb25Db3VudCBhbmQgCi0gICAgICogdG9TZWxlY3Rpb24gbWV0aG9kcy4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuICBBIG51bWJlciBpbmRpY2F0aW5nIHRoZSBzaXplIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbi4KLSAgICAgKi8KLQotICAgIGludCBnZXRTZWxlY3Rpb25Db3VudCAoICk7Ci0KLSAgICAKLSAgICAvKioKLSAgICAgKiBBcHBlbmRzIHRoZSBjdXJyZW50IGxvY2F0aW9uIG9mIHRoZSBjdXJzb3IgdG8gdGhlIHNlbGVjdGlvbi4gIAotICAgICAqIFNlZSBhbHNvIHRoZSBzZWxlY3RQYXRoKCkgbWV0aG9kLiBZb3UgY2FuIHVzZSB0aGlzIGFzIGFuIAotICAgICAqIGFsdGVybmF0aXZlIHRvIGNhbGxpbmcgdGhlIHNlbGVjdFBhdGggbWV0aG9kIHdoZW4geW91IHdhbnQKLSAgICAgKiB0byBkZWZpbmUgeW91ciBvd24gc2VsZWN0aW9uLgotICAgICAqLwotCi0gICAgdm9pZCBhZGRUb1NlbGVjdGlvbiAoICk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ2xlYXJzIHRoaXMgY3Vyc29yJ3Mgc2VsZWN0aW9uLCBidXQgZG9lcyBub3QgbW9kaWZ5IHRoZSBkb2N1bWVudC4KLSAgICAgKi8KLSAgICB2b2lkIGNsZWFyU2VsZWN0aW9ucyAoICk7ICAgIAotICAgIAotICAgIC8qKgotICAgICAqIE1vdmVzIHRoaXMgY3Vyc29yIHRvIHRoZSBzYW1lIHBvc2l0aW9uIGFzIHRoZSBib29rbWFyay4gIElmIHRoZQotICAgICAqIGJvb2ttYXJrIGlzIGluIGEgZGlmZmVyZW50IGRvY3VtZW50IGZyb20gdGhpcyBjdXJzb3Igb3IgaWYgdGhlIAotICAgICAqIGJvb2ttYXJrIGlzIG9ycGhhbmVkLCB0aGlzIGN1cnNvcgotICAgICAqIHdpbGwgbm90IGJlIG1vdmVkLCBhbmQgZmFsc2Ugd2lsbCBiZSByZXR1cm5lZC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gIGJvb2ttYXJrICBUaGUgYm9va21hcmsgYXQgdGhlIGxvY2F0aW9uIHRvIHdoaWNoIHRoaXMKLSAgICAgKiBjdXJzb3Igc2hvdWxkIGJlIG1vdmVkLgotICAgICAqIEByZXR1cm4gIHRydWUgaWYgdGhlIGN1cnNvciBtb3ZlZDsgb3RoZXJ3aXNlLCBmYWxzZS4KLSAgICAgKi8KLQotICAgIGJvb2xlYW4gdG9Cb29rbWFyayAoIFhtbEJvb2ttYXJrIGJvb2ttYXJrICk7Ci0KLSAgICAvKioKLSAgICAgKiBNb3ZlcyB0aGlzIGN1cnNvciB0byB0aGUgbG9jYXRpb24gYWZ0ZXIgaXRzIGN1cnJlbnQgcG9zaXRpb24KLSAgICAgKiB3aGVyZSBhIGJvb2ttYXJrIHdpdGggdGhlIGdpdmVuIGtleSBleGlzdHMuICBSZXR1cm5zIGZhbHNlIGlmIG5vCi0gICAgICogc3VjaCBib29rbWFyayBleGlzdHMuCi0gICAgICogCi0gICAgICogQHBhcmFtICBrZXkgIFRoZSBrZXkgaGVsZCBieSB0aGUgbmV4dCBib29rbWFyayBhdCB0aGUgbG9jYXRpb24gdG8gCi0gICAgICogd2hpY2ggdGhpcyBjdXJzb3Igc2hvdWxkIGJlIG1vdmVkLgotICAgICAqIEByZXR1cm4gIFRoZSBuZXh0IGNvcnJlc3BvbmRpbmcgYm9va21hcmssIGlmIGl0IGV4aXN0czsgbnVsbCBpZiB0aGVyZQotICAgICAqIGlzIG5vIG5leHQgYm9va21hcmsgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS4KLSAgICAgKi8KLQotICAgIFhtbEJvb2ttYXJrIHRvTmV4dEJvb2ttYXJrICggT2JqZWN0IGtleSApOwotICAgIAotICAgIC8qKgotICAgICAqIE1vdmVzIHRoaXMgY3Vyc29yIHRvIHRoZSBsb2NhdGlvbiBiZWZvcmUgaXRzIGN1cnJlbnQgcG9zaXRpb24KLSAgICAgKiB3aGVyZSBhIGJvb2ttYXJrIHdpdGggdGhlIGdpdmVuIGtleSBleGlzdHMuICBSZXR1cm5zIGZhbHNlIGlmIG5vCi0gICAgICogc3VjaCBib29rbWFyayBleGlzdHMuCi0gICAgICogCi0gICAgICogQHBhcmFtICBrZXkgIFRoZSBrZXkgaGVsZCBieSB0aGUgcHJldmlvdXMgYm9va21hcmsgYXQgdGhlIGxvY2F0aW9uIHRvIAotICAgICAqIHdoaWNoIHRoaXMgY3Vyc29yIHNob3VsZCBiZSBtb3ZlZC4KLSAgICAgKiBAcmV0dXJuICBUaGUgcHJldmlvdXMgY29ycmVzcG9uZGluZyBib29rbWFyaywgaWYgaXQgZXhpc3RzOyBudWxsIGlmIAotICAgICAqIHRoZXJlIGlzIG5vIHByZXZpb3VzIGJvb2ttYXJrIHdpdGggdGhlIHNwZWNpZmllZCBrZXkuCi0gICAgICovCi0KLSAgICBYbWxCb29rbWFyayB0b1ByZXZCb29rbWFyayAoIE9iamVjdCBrZXkgKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHRva2VuLiBOYW1lcyBtYXkgYmUgYXNzb2NpYXRlZCB3aXRoCi0gICAgICogU1RBUlQsIEFUVFIsIE5BTUVTUEFDRSBvciBQUk9DSU5TVC4gUmV0dXJucyBudWxsIGlmIHRoZXJlIGlzIG5vCi0gICAgICogbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgdG9rZW4uIEZvciBTVEFSVCBhbmQgQVRUUiwgdGhlIAotICAgICAqIG5hbWUgcmV0dXJuZWQgaWRlbnRpZmllcyB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudCBvciBhdHRyaWJ1dGUuIAotICAgICAqIEZvciBOQU1FU1BBQ0UsIHRoZSBsb2NhbCBwYXJ0IG9mIHRoZSBuYW1lIGlzIHRoZSBwcmVmaXgsIHdoaWxlIAotICAgICAqIHRoZSBVUkkgaXMgdGhlIG5hbWVzcGFjZSBkZWZpbmVkLiBGb3IgUFJPQ0lOU1QsIHRoZSBsb2NhbCBwYXJ0IAotICAgICAqIGlzIHRoZSB0YXJnZXQgYW5kIHRoZSB1cmkgaXMgIiIuCi0gICAgICogCi0gICAgICogQHJldHVybiAgVGhlIG5hbWUgb2YgdGhlIFhNTCBhdCB0aGlzIGN1cnNvcidzIGxvY2F0aW9uOyBudWxsIGlmIHRoZXJlCi0gICAgICogaXMgbm8gbmFtZS4KLSAgICAgKi8KLQotICAgIFFOYW1lIGdldE5hbWUgKCApOwotICAgIAotICAgIC8qKgotICAgICAqIFNldHMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgdG9rZW4uIFRoaXMgdG9rZW4gY2FuIGJlIFNUQVJULCBOQU1FU1BBQ0UsCi0gICAgICogQVRUUiBvciBQUk9DSU5TVC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gIG5hbWUgIFRoZSBuZXcgbmFtZSBmb3IgdGhlIGN1cnJlbnQgdG9rZW4uCi0gICAgICovCi0KLSAgICB2b2lkIHNldE5hbWUgKCBRTmFtZSBuYW1lICk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbmFtZXNwYWNlIFVSSSBpbmRpY2F0ZWQgYnkgdGhlIGdpdmVuIHByZWZpeC4gVGhlIGN1cnJlbnQKLSAgICAgKiBjb250ZXh0IG11c3QgYmUgYXQgYSBTVEFSVCBvciBTVEFSVERPQy4gTmFtZXNwYWNlIHByZWZpeCBtYXBwaW5ncwotICAgICAqIGFyZSBxdWVyaWVkIGZvciB0aGUgbWFwcGluZ3MgZGVmaW5lZCBhdCB0aGUgY3VycmVudCBjb250YWluZXIgZmlyc3QsCi0gICAgICogdGhlbiBwYXJlbnRzIGFyZSBxdWVyaWVkLiBUaGUgcHJlZml4IGNhbiBiZSAiIiBvciBudWxsIHRvIGluZGljYXRlCi0gICAgICogYSBzZWFyY2ggZm9yIHRoZSBkZWZhdWx0IG5hbWVzcGFjZS48YnIvPjxici8+LgotICAgICAqIAotICAgICAqIE5vdGUgdGhhdCB0aGlzIHF1ZXJpZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGRvY3VtZW50LiBXaGVuIHRoZSAKLSAgICAgKiBkb2N1bWVudCBpcyBwZXJzaXN0ZWQsIHRoZSBzYXZpbmcgbWVjaGFuaXNtIG1heSBzeW50aGVzaXplIG5hbWVzcGFjZXMgCi0gICAgICogKG5zMSwgbnMyLCBhbmQgc28gb24pIGZvciB0aGUgcHVycG9zZXMgb2YgcGVyc2lzdGVuY2UuIFRoZXNlIG5hbWVwYWNlcyBhcmUgCi0gICAgICogb25seSBwcmVzZW50IGluIHRoZSBzZXJpYWxpemVkIGZvcm0sIGFuZCBhcmUgbm90IHJlZmxlY3RlZCBiYWNrIGludG8gCi0gICAgICogdGhlIGRvY3VtZW50IGJlaW5nIHNhdmVkLgotICAgICAqIAotICAgICAqIEBwYXJhbSAgcHJlZml4ICBUaGUgbmFtZXNwYWNlIHByZWZpeCBmb3IgdGhlIHJlcXVlc3RlZCBuYW1lc3BhY2UuCi0gICAgICogQHJldHVybiAgVGhlIFVSSSBmb3IgY29ycmVzcG9uZGluZyB0byB0aGUgc3BlY2lmaWVkIHByZWZpeCBpZiBpdAotICAgICAqIGV4aXN0czsgb3RoZXJ3aXNlLCBudWxsLgotICAgICAqLwotICAgIFN0cmluZyBuYW1lc3BhY2VGb3JQcmVmaXggKCBTdHJpbmcgcHJlZml4ICk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgcHJlZml4IHRoYXQgY2FuIGJlIHVzZWQgdG8gaW5kaWNhdGUgYSBuYW1lc3BhY2UgVVJJLiAgVGhlCi0gICAgICogY3VycmVudCBjb250ZXh0IG11c3QgYmUgYXQgYSBTVEFSVCBvciBTVEFSVERPQy4gIElmIHRoZXJlIGlzIGFuCi0gICAgICogZXhpc3RpbmcgcHJlZml4IHRoYXQgaW5kaWNhdGVzIHRoZSBVUkkgaW4gdGhlIGN1cnJlbnQgY29udGV4dCwgdGhhdAotICAgICAqIHByZWZpeCBtYXkgYmUgcmV0dXJuZWQuIE90aGVyd2lzZSwgYSBuZXcgcHJlZml4IGZvciB0aGUgVVJJIHdpbGwgYmUKLSAgICAgKiBkZWZpbmVkIGJ5IGFkZGluZyBhbiB4bWxucyBhdHRyaWJ1dGUgdG8gdGhlIGN1cnJlbnQgY29udGFpbmVyIG9yIGEKLSAgICAgKiBwYXJlbnQgY29udGFpbmVyLgotICAgICAqIAotICAgICAqIE5vdGUgdGhhdCB0aGlzIHF1ZXJpZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGRvY3VtZW50LiBXaGVuIHRoZSAKLSAgICAgKiBkb2N1bWVudCBpcyBwZXJzaXN0ZWQsIHRoZSBzYXZpbmcgbWVjaGFuaXNtIG1heSBzeW50aGVzaXplIG5hbWVzcGFjZXMgCi0gICAgICogKG5zMSwgbnMyLCBhbmQgc28gb24pIGZvciB0aGUgcHVycG9zZXMgb2YgcGVyc2lzdGVuY2UuIFRoZXNlIG5hbWVwYWNlcyBhcmUgCi0gICAgICogb25seSBwcmVzZW50IGluIHRoZSBzZXJpYWxpemVkIGZvcm0sIGFuZCBhcmUgbm90IHJlZmxlY3RlZCBiYWNrIGludG8gCi0gICAgICogdGhlIGRvY3VtZW50IGJlaW5nIHNhdmVkLgotICAgICAqIAotICAgICAqIEBwYXJhbSAgbmFtZXNwYWNlVVJJICBUaGUgbmFtZXNwYWNlIFVSSSBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXF1ZXN0ZWQKLSAgICAgKiBwcmVmaXguCi0gICAgICogQHJldHVybiAgVGhlIHByZWZpeCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzcGVjaWZpZWQgVVJJIGlmIGl0IGV4aXN0czsgCi0gICAgICogb3RoZXJ3aXNlLCBhIG5ld2x5IGdlbmVyYXRlZCBwcmVmaXguCi0gICAgICovCi0gICAgU3RyaW5nIHByZWZpeEZvck5hbWVzcGFjZSAoIFN0cmluZyBuYW1lc3BhY2VVUkkgKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBBZGRzIHRvIHRoZSBzcGVjaWZpZWQgbWFwLCBhbGwgdGhlIG5hbWVzcGFjZXMgaW4gc2NvcGUgYXQgdGhlIGNvbnRhaW5lcgotICAgICAqIHdoZXJlIHRoaXMgY3Vyc29yIGlzIHBvc2l0aW9uZWQuIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCBmb3IgCi0gICAgICogY29udGFpbmVyIHRva2VucyBvbmx5LgotICAgICAqIAotICAgICAqIEBwYXJhbSAgYWRkVG9UaGlzICBUaGUgTWFwIHRvIGFkZCB0aGUgbmFtZXNwYWNlcyB0by4KLSAgICAgKi8KLQotICAgIHZvaWQgZ2V0QWxsTmFtZXNwYWNlcyAoIE1hcCBhZGRUb1RoaXMgKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHN0cm9uZ2x5LXR5cGVkIFhtbE9iamVjdCBhdCB0aGUgY3VycmVudCBTVEFSVCwKLSAgICAgKiBTVEFSVERPQywgb3IgQVRUUi4gPGJyLz48YnIvPgotICAgICAqIAotICAgICAqIFRoZSBzdHJvbmdseS10eXBlZCBvYmplY3QgY2FuIGJlIGNhc3QgdG8gdGhlIHN0cm9uZ2x5LXR5cGVkCi0gICAgICogWEJlYW4gaW50ZXJmYWNlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFhNTCBTY2hlbWEgVHlwZSBnaXZlbgotICAgICAqIGJ5IHJlc3VsdC5nZXRTY2hlbWFUeXBlKCkuPGJyLz48YnIvPgotICAgICAqCi0gICAgICogSWYgYSBtb3JlIHNwZWNpZmljIHR5cGUgY2Fubm90IGJlIGRldGVybWluZWQsIGFuIFhtbE9iamVjdAotICAgICAqIHdob3NlIHNjaGVtYSB0eXBlIGlzIGFueVR5cGUgd2lsbCBiZSByZXR1cm5lZC4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuICBUaGUgc3Ryb25nbHktdHlwZWQgb2JqZWN0IGF0IHRoZSBjdXJzb3IncyBjdXJyZW50IGxvY2F0aW9uOwotICAgICAqIG51bGwgaWYgdGhlIGN1cnJlbnQgbG9jYXRpb24gaXMgbm90IGEgU1RBUlQsIFNUQVJURE9DLCBvciBBVFRSLgotICAgICAqLwotCi0gICAgWG1sT2JqZWN0IGdldE9iamVjdCAoICk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgY3VycmVudCB0b2tlbi4gQnkgZGVmaW5pdGlvbiwgdGhlIGN1cnJlbnQKLSAgICAgKiB0b2tlbiBpcyB0aGUgdG9rZW4gaW1tZWRpYXRlbHkgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjdXJzb3IuIAotICAgICAqIElmIHlvdSdyZSBpbiB0aGUgbWlkZGxlIG9mIHRleHQsIGJlZm9yZSBhIGNoYXJhY3RlciwgeW91IGdldCBURVhULgotICAgICAqIFlvdSBjYW4ndCBkaXZlIGludG8gdGhlIHRleHQgb2YgYW4gQVRUUiwgQ09NTUVOVCBvciBQUk9DSU5TVC48YnIvPjxici8+Ci0gICAgICogCi0gICAgICogQXMgYW4gYWx0ZXJuYXRpdmUsIGl0IG1heSBiZSBtb3JlIGNvbnZlbmllbnQgZm9yIHlvdSB0byB1c2Ugb25lIG9mIHRoZSAKLSAgICAgKiBtZXRob2RzIHRoYXQgdGVzdCBmb3IgYSBwYXJ0aWN1bGFyIHRva2VuIHR5cGUuIFRoZXNlIGluY2x1ZGUgdGhlIG1ldGhvZHMgCi0gICAgICogaXNTdGFydCgpLCBpc1N0YXJ0ZG9jKCksIGlzVGV4dCgpLCBpc0F0dHIoKSwgYW5kIHNvIG9uLiBFYWNoIHJldHVybnMgYSBib29sZWFuIAotICAgICAqIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgdG9rZW4gdGhhdCBmb2xsb3dzIHRoZSBjdXJzb3IgaXMgdGhlIHR5cGUgCi0gICAgICogaW4gcXVlc3Rpb24uIAotICAgICAqIDxici8+PGJyLz4KLSAgICAgKgotICAgICAqIEByZXR1cm4gIFRoZSBUb2tlblR5cGUgaW5zdGFuY2UgZm9yIHRoZSB0b2tlbiBhdCB0aGUgY3Vyc29yJ3MgY3VycmVudAotICAgICAqIGxvY2F0aW9uLgotICAgICAqLwotCi0gICAgVG9rZW5UeXBlIGN1cnJlbnRUb2tlblR5cGUgKCApOwotICAgIAotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhlIGN1cnJlbnQgdG9rZW4gaXMgYSBTVEFSVERPQyB0b2tlbiB0eXBlLCBtZWFuaW5nIAotICAgICAqIGF0IHRoZSB2ZXJ5IHJvb3Qgb2YgdGhlIGRvY3VtZW50LgotICAgICAqIAotICAgICAqIEByZXR1cm4gIHRydWUgaWYgdGhpcyB0b2tlbiBpcyBhIFNUQVJURE9DIHRva2VuIHR5cGU7IAotICAgICAqIG90aGVyd2lzZSwgZmFsc2UuCi0gICAgICovCi0KLSAgICBib29sZWFuIGlzU3RhcnRkb2MgKCApOwotICAgIAotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhpcyB0b2tlbiBpcyBhbiBFTkRET0MgdG9rZW4gdHlwZSwgbWVhbmluZyAKLSAgICAgKiBhdCB0aGUgdmVyeSBlbmQgb2YgdGhlIGRvY3VtZW50LgotICAgICAqIAotICAgICAqIEByZXR1cm4gIHRydWUgaWYgdGhpcyB0b2tlbiBpcyBhbiBFTkRET0MgdG9rZW4gdHlwZTsgCi0gICAgICogb3RoZXJ3aXNlLCBmYWxzZS4KLSAgICAgKi8KLQotICAgIGJvb2xlYW4gaXNFbmRkb2MgKCApOwotICAgIAotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhpcyB0b2tlbiBpcyBhIFNUQVJUIHRva2VuIHR5cGUsIG1lYW5pbmcgCi0gICAgICoganVzdCBiZWZvcmUgYW4gZWxlbWVudCdzIHN0YXJ0LgotICAgICAqIAotICAgICAqIEByZXR1cm4gIHRydWUgaWYgdGhpcyB0b2tlbiBpcyBhIFNUQVJUIHRva2VuIHR5cGU7IAotICAgICAqIG90aGVyd2lzZSwgZmFsc2UuCi0gICAgICovCi0KLSAgICBib29sZWFuIGlzU3RhcnQgKCApOwotICAgIAotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhpcyB0b2tlbiBpcyBhbiBFTkQgdG9rZW4gdHlwZSwgbWVhbmluZyAKLSAgICAgKiBqdXN0IGJlZm9yZSBhbiBlbGVtZW50J3MgZW5kLgotICAgICAqIAotICAgICAqIEByZXR1cm4gIHRydWUgaWYgdGhpcyB0b2tlbiBpcyBhbiBFTkQgdG9rZW4gdHlwZTsgCi0gICAgICogb3RoZXJ3aXNlLCBmYWxzZS4KLSAgICAgKi8KLQotICAgIGJvb2xlYW4gaXNFbmQgKCApOwotICAgIAotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhlIHRoaXMgdG9rZW4gaXMgYSBURVhUIHRva2VuIHR5cGUsIG1lYW5pbmcgCi0gICAgICoganVzdCBiZWZvcmUgb3IgaW5zaWRlIHRleHQuCi0gICAgICogCi0gICAgICogQHJldHVybiAgdHJ1ZSBpZiB0aGlzIHRva2VuIGlzIGEgVEVYVCB0b2tlbiB0eXBlOyAKLSAgICAgKiBvdGhlcndpc2UsIGZhbHNlLgotICAgICAqLwotCi0gICAgYm9vbGVhbiBpc1RleHQgKCApOwotICAgIAotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhpcyB0b2tlbiBpcyBhbiBBVFRSIHRva2VuIHR5cGUsIG1lYW5pbmcgCi0gICAgICoganVzdCBiZWZvcmUgYW4gYXR0cmlidXRlLgotICAgICAqIAotICAgICAqIEByZXR1cm4gIHRydWUgaWYgdGhpcyB0b2tlbiBpcyBhbiBBVFRSIHRva2VuIHR5cGU7IAotICAgICAqIG90aGVyd2lzZSwgZmFsc2UuCi0gICAgICovCi0KLSAgICBib29sZWFuIGlzQXR0ciAoICk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGlzIHRva2VuIGlzIGEgTkFNRVNQQUNFIHRva2VuIHR5cGUsIG1lYW5pbmcgCi0gICAgICoganVzdCBiZWZvcmUgYSBuYW1lc3BhY2UgZGVjbGFyYXRpb24uCi0gICAgICogCi0gICAgICogQHJldHVybiAgdHJ1ZSBpZiB0aGlzIHRva2VuIGlzIGEgTkFNRVNQQUNFIHRva2VuIHR5cGU7IAotICAgICAqIG90aGVyd2lzZSwgZmFsc2UuCi0gICAgICovCi0KLSAgICBib29sZWFuIGlzTmFtZXNwYWNlICggKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBUcnVlIGlmIHRoaXMgdG9rZW4gaXMgYSBDT01NRU5UIHRva2VuIHR5cGUsIG1lYW5pbmcgCi0gICAgICoganVzdCBiZWZvcmUgYSBjb21tZW50LgotICAgICAqIAotICAgICAqIEByZXR1cm4gIHRydWUgaWYgdGhpcyB0b2tlbiBpcyBhIENPTU1FTlQgdG9rZW4gdHlwZTsgCi0gICAgICogb3RoZXJ3aXNlLCBmYWxzZS4KLSAgICAgKi8KLQotICAgIGJvb2xlYW4gaXNDb21tZW50ICggKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBUcnVlIGlmIHRoaXMgdG9rZW4gaXMgYSBQUk9DSU5TVCB0b2tlbiB0eXBlLCBtZWFuaW5nIAotICAgICAqIGp1c3QgYmVmb3JlIGEgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbi4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuICB0cnVlIGlmIHRoaXMgdG9rZW4gaXMgYSBQUk9DSU5TVCB0b2tlbiB0eXBlOyAKLSAgICAgKiBvdGhlcndpc2UsIGZhbHNlLgotICAgICAqLwotCi0gICAgYm9vbGVhbiBpc1Byb2NpbnN0ICggKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBUcnVlIGlmIHRoaXMgdG9rZW4gaXMgYSBjb250YWluZXIgdG9rZW4uIFRoZSBTVEFSVERPQyBhbmQgU1RBUlQgCi0gICAgICogdG9rZW4gdHlwZXMgYXJlIGNvbnRhaW5lcnMuIENvbnRhaW5lcnMsIGluY2x1ZGluZyBkb2N1bWVudHMgYW5kIGVsZW1lbnRzLAotICAgICAqIGhhdmUgdGhlIHNhbWUgY29udGVudCBtb2RlbC4gSW4gb3RoZXIgd29yZHMsIGEgZG9jdW1lbnQgYW5kIGFuIGVsZW1lbnQgCi0gICAgICogbWF5IGhhdmUgdGhlIHNhbWUgY29udGVudHMuIEZvciBleGFtcGxlLCBhIGRvY3VtZW50IG1heSBjb250YWluIGF0dHJpYnV0ZXMgCi0gICAgICogb3IgdGV4dCwgd2l0aG91dCBhbnkgY2hpbGQgZWxlbWVudHMuCi0gICAgICogCi0gICAgICogQHJldHVybiAgdHJ1ZSBpZiB0aGlzIHRva2VuIGlzIGEgY29udGFpbmVyIHRva2VuOyBvdGhlcndpc2UsIGZhbHNlLgotICAgICAqLwotCi0gICAgYm9vbGVhbiBpc0NvbnRhaW5lciAoICk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGlzIHRva2VuIGlzIGEgZmluaXNoIHRva2VuLiBBIGZpbmlzaCB0b2tlbiBjYW4gYmUgYW4gRU5ERE9DCi0gICAgICogb3IgRU5EIHRva2VuIHR5cGUuCi0KLSAgICAgKiBAcmV0dXJuICB0cnVlIGlmIHRoaXMgdG9rZW4gaXMgYSBmaW5pc2ggdG9rZW47IG90aGVyd2lzZSwgZmFsc2UuCi0gICAgICovCi0KLSAgICBib29sZWFuIGlzRmluaXNoICggKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBUcnVlIGlmIHRoaXMgdG9rZW4gaXMgYW55IGF0dHJpYnV0ZS4gVGhpcyBpbmNsdWRlcyBhbiBBVFRSIHRva2VuIHR5cGUgYW5kCi0gICAgICogdGhlIE5BTUVTUEFDRSB0b2tlbiB0eXBlIGF0dHJpYnV0ZS4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuICB0cnVlIGlmIHRoZSBjdXJyZW50IGN1cnNvciBpcyBhdCBhbnkgYXR0cmlidXRlOyBvdGhlcndpc2UsIGZhbHNlLgotICAgICAqLwotCi0gICAgYm9vbGVhbiBpc0FueUF0dHIgKCApOwotICAgIAotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIHByZXZpb3VzIHRva2VuLiBCeSBkZWZpbml0aW9uLCB0aGUgcHJldmlvdXMKLSAgICAgKiB0b2tlbiBpcyB0aGUgdG9rZW4gaW1tZWRpYXRlbHkgdG8gdGhlIGxlZnQgb2YgdGhlIGN1cnNvci48YnIvPjxici8+Ci0gICAgICoKLSAgICAgKiBJZiB5b3UncmUgaW4gdGhlIG1pZGRsZSBvZiB0ZXh0LCBhZnRlciBhIGNoYXJhY3RlciwgeW91IGdldCBURVhULgotICAgICAqIAotICAgICAqIEByZXR1cm4gIFRoZSBUb2tlblR5cGUgaW5zdGFuY2UgZm9yIHRoZSB0b2tlbiBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIAotICAgICAqIHRva2VuIGF0IHRoZSBjdXJzb3IncyBjdXJyZW50IGxvY2F0aW9uLgotICAgICAqLwotCi0gICAgVG9rZW5UeXBlIHByZXZUb2tlblR5cGUgKCApOwotICAgIAotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhlcmUgaXMgYSBuZXh0IHRva2VuLiBXaGVuIHRoaXMgaXMgZmFsc2UsIGFzIHdoZW4gdGhlIGN1cnNvciBpcwotICAgICAqIGF0IHRoZSBFTkRET0MgdG9rZW4sIHRoZSB0b05leHRUb2tlbigpIG1ldGhvZCByZXR1cm5zIE5PTkUgYW5kIGRvZXMgbm90IAotICAgICAqIG1vdmUgdGhlIGN1cnNvci4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuICB0cnVlIGlmIHRoZXJlIGlzIGEgbmV4dCB0b2tlbjsgb3RoZXJ3aXNlLCBmYWxzZS4KLSAgICAgKi8KLQotICAgIGJvb2xlYW4gaGFzTmV4dFRva2VuICggKTsKLQotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGVyZSBpcyBhIHByZXZpb3VzIHRva2VuLiBXaGVuIHRoaXMgaXMgZmFsc2UsIHRvUHJldlRva2VuCi0gICAgICogcmV0dXJucyBOT05FIGFuZCBkb2VzIG5vdCBtb3ZlIHRoZSBjdXJzb3IuCi0gICAgICogCi0gICAgICogQHJldHVybiAgdHJ1ZSBpZiB0aGVyZSBpcyBhIHByZXZpb3VzIHRva2VuOyBvdGhlcndpc2UsIGZhbHNlLgotICAgICAqLwotCi0gICAgYm9vbGVhbiBoYXNQcmV2VG9rZW4gKCApOwotICAgIAotICAgIC8qKgotICAgICAqIE1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIG5leHQgdG9rZW4uIFdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgdG9rZW5zIAotICAgICAqIGF2YWlsYWJsZSwgaGFzTmV4dFRva2VuIHJldHVybnMgZmFsc2UgYW5kIHRvTmV4dFRva2VuKCkgcmV0dXJucyAKLSAgICAgKiBOT05FIGFuZCBkb2VzIG5vdCBtb3ZlIHRoZSBjdXJzb3IuIFJldHVybnMgdGhlIHRva2VuIHR5cGUgCi0gICAgICogb2YgdGhlIHRva2VuIHRvIHRoZSByaWdodCBvZiB0aGUgY3Vyc29yIHVwb24gYSBzdWNjZXNzZnVsIG1vdmUuCi0gICAgICogCi0gICAgICogQHJldHVybiAgVGhlIHRva2VuIHR5cGUgZm9yIHRoZSBuZXh0IHRva2VuIGlmIHRoZSBjdXJzb3Igd2FzIG1vdmVkOwotICAgICAqIG90aGVyd2lzZSwgTk9ORS4KLSAgICAgKi8KLQotICAgIFRva2VuVHlwZSB0b05leHRUb2tlbiAoICk7Ci0KLSAgICAvKioKLSAgICAgKiBNb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBwcmV2aW91cyB0b2tlbi4gV2hlbiB0aGVyZSBpcyBubwotICAgICAqIHByZXZpb3VzIHRva2VuLCByZXR1cm5zIE5PTkUsIG90aGVyd2lzZSByZXR1cm5zIHRoZSB0b2tlbgotICAgICAqIHRvIHRoZSBsZWZ0IG9mIHRoZSBuZXcgcG9zaXRpb24gb2YgdGhlIGN1cnNvci4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuICBUaGUgdG9rZW4gdHlwZSBmb3IgdGhlIHByZXZpb3VzIHRva2VuIGlmIHRoZSBjdXJzb3Igd2FzIG1vdmVkOwotICAgICAqIG90aGVyd2lzZSwgTk9ORS4KLSAgICAgKi8KLQotICAgIFRva2VuVHlwZSB0b1ByZXZUb2tlbiAoICk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogTW92ZXMgdGhlIGN1cnNvciB0byB0aGUgZmlyc3QgdG9rZW4gaW4gdGhlIGNvbnRlbnQgb2YgdGhlIGN1cnJlbnQKLSAgICAgKiBTVEFSVCBvciBTVEFSVERPQy4gVGhhdCBpcywgdGhlIGZpcnN0IHRva2VuIGFmdGVyIGFsbCBBVFRSIGFuZCBOQU1FU1BBQ0UKLSAgICAgKiB0b2tlbnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgU1RBUlQuPGJyLz48YnIvPgotICAgICAqCi0gICAgICogSWYgdGhlIGN1cnJlbnQgdG9rZW4gaXMgbm90IGEgU1RBUlQgb3IgU1RBUlRET0MsIHRoZSBjdXJzb3IgaXMgbm90Ci0gICAgICogbW92ZWQgYW5kIE5PTkUgaXMgcmV0dXJuZWQuIElmIHRoZSBjdXJyZW50IFNUQVJUIG9yIFNUQVJURE9DCi0gICAgICogaGFzIG5vIGNvbnRlbnQsIHRoZSBjdXJzb3IgaXMgbW92ZWQgdG8gdGhlIEVORCBvciBFTkRET0MgdG9rZW4uPGJyLz48YnIvPgotICAgICAqIAotICAgICAqIEByZXR1cm4gIFRoZSBuZXcgY3VycmVudCB0b2tlbiB0eXBlLgotICAgICAqLwotCi0gICAgVG9rZW5UeXBlIHRvRmlyc3RDb250ZW50VG9rZW4gKCApOwotCi0KLSAgICAvKioKLSAgICAgKiBNb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBFTkQgb3IgRU5ERE9DIHRva2VuIGNvcnJlc3BvbmRpbmcgdG8gdGhlCi0gICAgICogY3VycmVudCBTVEFSVCBvciBTVEFSVERPQywgYW5kIHJldHVybnMgRU5EIG9yIEVORERPQy4gPGJyLz48YnIvPgotICAgICAqCi0gICAgICogSWYgdGhlIGN1cnJlbnQgdG9rZW4gaXMgbm90IGEgU1RBUlQgb3IgU1RBUlRET0MsIHRoZSBjdXJzb3IgaXMgbm90Ci0gICAgICogbW92ZWQgYW5kIE5PTkUgaXMgcmV0dXJuZWQuCi0gICAgICogCi0gICAgICogQHJldHVybiAgVGhlIG5ldyBjdXJyZW50IHRva2VuIHR5cGUuCi0gICAgICovCi0KLSAgICBUb2tlblR5cGUgdG9FbmRUb2tlbiAoICk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogTW92ZXMgdGhlIGN1cnNvciBmb3J3YXJkIGJ5IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMsIGFuZAotICAgICAqIHN0b3BzIGF0IHRoZSBuZXh0IG5vbi1URVhUIHRva2VuLiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycwotICAgICAqIGFjdHVhbGx5IG1vdmVkIGFjcm9zcywgd2hpY2ggaXMgZ3VhcmFudGVlZCB0byBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gIAotICAgICAqIDxlbT5tYXhDaGFyYWN0ZXJDb3VudDwvZW0+LiBJZiB0aGVyZSBpcyBubyBmdXJ0aGVyIHRleHQsIG9yIGlmIAotICAgICAqIHRoZXJlIGlzIG5vIHRleHQgYXQgYWxsLCByZXR1cm5zIHplcm8uPGJyLz48YnIvPgotICAgICAqCi0gICAgICogTm90ZSB0aGlzIGRvZXMgbm90IGRpdmUgaW50byBhdHRyaWJ1dGUgdmFsdWVzLCBjb21tZW50IGNvbnRlbnRzLAotICAgICAqIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gY29udGVudHMsIGV0Yy4sIGJ1dCBvbmx5IGNvbnRlbnQgdGV4dC48YnIvPjxici8+Ci0gICAgICoKLSAgICAgKiBZb3UgY2FuIHBhc3MgbWF4Q2hhcmFjdGVyQ291bnQgJmx0OyAwIHRvIG1vdmUgb3ZlciBhbGwgdGhlIHRleHQgdG8gdGhlIAotICAgICAqIHJpZ2h0LiBUaGlzIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgdG9OZXh0VG9rZW4sIGJ1dCByZXR1cm5zIHRoZSBhbW91bnQgCi0gICAgICogb2YgdGV4dCBtb3ZlZCBvdmVyLgotICAgICAqCi0gICAgICogQHBhcmFtICBtYXhDaGFyYWN0ZXJDb3VudCAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYnkgd2hpY2gKLSAgICAgKiB0aGUgY3Vyc29yIHNob3VsZCBiZSBtb3ZlZC4KLSAgICAgKiBAcmV0dXJuICBUaGUgYWN0dWFsIG51bWJlciBvZiBjaGFyYWN0ZXJzIGJ5IHdoaWNoIHRoZSBjdXJzb3Igd2FzIG1vdmVkOyAKLSAgICAgKiAwIGlmIHRoZSBjdXJzb3Igd2FzIG5vdCBtb3ZlZC4KLSAgICAgKi8KLQotICAgIGludCB0b05leHRDaGFyICggaW50IG1heENoYXJhY3RlckNvdW50ICk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogTW92ZXMgdGhlIGN1cnNvciBiYWNrd2FyZHMgYnkgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGdpdmVuLiAgSGFzCi0gICAgICogc2ltaWxhciBjaGFyYWN0ZXJpc3RpY3MgdG8gdGhlIHtAbGluayAjdG9OZXh0Q2hhcihpbnQpIHRvTmV4dENoYXJ9IG1ldGhvZC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gIG1heENoYXJhY3RlckNvdW50ICBUaGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBieSB3aGljaAotICAgICAqIHRoZSBjdXJzb3Igc2hvdWxkIGJlIG1vdmVkLgotICAgICAqIEByZXR1cm4gIFRoZSBhY3R1YWwgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYnkgd2hpY2ggdGhlIGN1cnNvciB3YXMgbW92ZWQ7IAotICAgICAqIDAgaWYgdGhlIGN1cnNvciB3YXMgbm90IG1vdmVkLgotICAgICAqLwotCi0gICAgaW50IHRvUHJldkNoYXIgKCBpbnQgbWF4Q2hhcmFjdGVyQ291bnQgKTsKLQotICAgIC8qKgotICAgICAqIE1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIG5leHQgc2libGluZyBlbGVtZW50LCBvciByZXR1cm5zCi0gICAgICogZmFsc2UgYW5kIGRvZXMgbm90IG1vdmUgdGhlIGN1cnNvciBpZiB0aGVyZSBpcyBubyBuZXh0IHNpYmxpbmcKLSAgICAgKiBlbGVtZW50LiAoQnkgZGVmaW5pdGlvbiB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCBpcyB0aGUgc2FtZQotICAgICAqIGFzIHRoZSBwb3NpdGlvbiBvZiBpdHMgU1RBUlQgdG9rZW4uKQotICAgICAqCi0gICAgICogSWYgdGhlIGN1cnJlbnQgdG9rZW4gaXMgbm90IHMgU1RBUlQsIHRoZSBjdXJzb3Igd2lsbCBiZSAKLSAgICAgKiBtb3ZlZCB0byB0aGUgbmV4dCBTVEFSVCB3aXRob3V0IG1vdmluZyBvdXQgb2YgdGhlIHNjb3BlIG9mIHRoZSAKLSAgICAgKiBjdXJyZW50IGVsZW1lbnQuCi0gICAgICogCi0gICAgICogQHJldHVybiAgdHJ1ZSBpZiB0aGUgY3Vyc29yIHdhcyBtb3ZlZDsgb3RoZXJ3aXNlLCBmYWxzZS4KLSAgICAgKi8KLQotICAgIGJvb2xlYW4gdG9OZXh0U2libGluZyAoICk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogTW92ZXMgdGhlIGN1cnNvciB0byB0aGUgcHJldmlvdXMgc2libGluZyBlbGVtZW50LCBvciByZXR1cm5zCi0gICAgICogZmFsc2UgYW5kIGRvZXMgbm90IG1vdmUgdGhlIGN1cnNvciBpZiB0aGVyZSBpcyBubyBwcmV2aW91cyBzaWJsaW5nCi0gICAgICogZWxlbWVudC4gKEJ5IGRlZmluaXRpb24gdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgaXMgdGhlIHNhbWUKLSAgICAgKiBhcyB0aGUgcG9zaXRpb24gb2YgaXRzIFNUQVJUIHRva2VuLikKLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuICB0cnVlIGlmIHRoZSBjdXJzb3Igd2FzIG1vdmVkOyBvdGhlcndpc2UsIGZhbHNlLgotICAgICAqLwotCi0gICAgYm9vbGVhbiB0b1ByZXZTaWJsaW5nICggKTsKLQotICAgIC8qKgotICAgICAqIE1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIHBhcmVudCBlbGVtZW50IG9yIFNUQVJURE9DLCBvciByZXR1cm5zCi0gICAgICogZmFsc2UgYW5kIGRvZXMgbm90IG1vdmUgdGhlIGN1cnNvciBpZiB0aGVyZSBpcyBubyBwYXJlbnQuPGJyLz48YnIvPgotICAgICAqCi0gICAgICogV29ya3MgaWYgeW91J3JlIGluIGF0dHJpYnV0ZXMgb3IgY29udGVudC4gUmV0dXJucyBmYWxzZSBvbmx5IGlmIGF0Ci0gICAgICogU1RBUlRET0MuIE5vdGUgdGhhdCB0aGUgcGFyZW50IG9mIGFuIEVORCB0b2tlbiBpcyB0aGUgY29ycmVzcG9uZGluZwotICAgICAqIFNUQVJUIHRva2VuLgotICAgICAqIAotICAgICAqIEByZXR1cm4gIHRydWUgaWYgdGhlIGN1cnNvciB3YXMgbW92ZWQ7IGZhbHNlIGlmIHRoZSBjdXJzb3IgaXMgYXQgdGhlIFNUQVJURE9DCi0gICAgICogdG9rZW4uCi0gICAgICovCi0KLSAgICBib29sZWFuIHRvUGFyZW50ICggKTsKLQotICAgIC8qKgotICAgICAqIE1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGZpcnN0IGNoaWxkIGVsZW1lbnQsIG9yIHJldHVybnMgZmFsc2UgYW5kCi0gICAgICogZG9lcyBub3QgbW92ZSB0aGUgY3Vyc29yIGlmIHRoZXJlIGFyZSBubyBlbGVtZW50IGNoaWxkcmVuLiA8YnIvPjxici8+Ci0gICAgICoKLSAgICAgKiBJZiB0aGUgY3Vyc29yIGlzIG5vdCBjdXJyZW50bHkgaW4gYW4gZWxlbWVudCwgaXQgbW92ZXMgaW50byB0aGUgCi0gICAgICogZmlyc3QgY2hpbGQgZWxlbWVudCBvZiB0aGUgbmV4dCBlbGVtZW50LgotICAgICAqIAotICAgICAqIEByZXR1cm4gIHRydWUgaWYgdGhlIGN1cnNvciB3YXMgbW92ZWQ7IG90aGVyd2lzZSwgZmFsc2UuCi0gICAgICovCi0KLSAgICBib29sZWFuIHRvRmlyc3RDaGlsZCAoICk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogTW92ZXMgdGhlIGN1cnNvciB0byB0aGUgbGFzdCBlbGVtZW50IGNoaWxkLCBvciByZXR1cm5zIGZhbHNlIGFuZAotICAgICAqIGRvZXMgbm90IG1vdmUgdGhlIGN1cnNvciBpZiB0aGVyZSBhcmUgbm8gZWxlbWVudCBjaGlsZHJlbi4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuICB0cnVlIGlmIHRoZSBjdXJzb3Igd2FzIG1vdmVkOyBvdGhlcndpc2UsIGZhbHNlLgotICAgICAqLwotCi0gICAgYm9vbGVhbiB0b0xhc3RDaGlsZCAoICk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogTW92ZXMgdGhlIGN1cnNvciB0byB0aGUgZmlyc3QgY2hpbGQgZWxlbWVudCBvZiB0aGUgc3BlY2lmaWVkIG5hbWUgaW4gCi0gICAgICogbm8gbmFtZXNwYWNlLgotICAgICAqIAotICAgICAqIEBwYXJhbSAgbmFtZSAgVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgdG8gbW92ZSB0aGUgY3Vyc29yIHRvLgotICAgICAqIEByZXR1cm4gIHRydWUgaWYgdGhlIGN1cnNvciB3YXMgbW92ZWQ7IG90aGVyd2lzZSwgZmFsc2UuCi0gICAgICovCi0KLSAgICBib29sZWFuIHRvQ2hpbGQgKCBTdHJpbmcgbmFtZSApOwotICAgIAotICAgIC8qKgotICAgICAqIE1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGZpcnN0IGNoaWxkIGVsZW1lbnQgb2YgdGhlIHNwZWNpZmllZCBuYW1lIGluIHRoZSAKLSAgICAgKiBzcGVjaWZpZWQgbmFtZXNwYWNlLgotICAgICAqIAotICAgICAqIEBwYXJhbSAgbmFtZXNwYWNlICBUaGUgbmFtZXNwYWNlIFVSSSBmb3IgdGhlIGVsZW1lbnQgdG8gbW92ZSB0aGUgY3Vyc29yIAotICAgICAqIHRvLgotICAgICAqIEBwYXJhbSAgbmFtZSAgVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgdG8gbW92ZSB0by4KLSAgICAgKiBAcmV0dXJuICB0cnVlIGlmIHRoZSBjdXJzb3Igd2FzIG1vdmVkOyBvdGhlcndpc2UsIGZhbHNlLgotICAgICAqLwotCi0gICAgYm9vbGVhbiB0b0NoaWxkICggU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIG5hbWUgKTsKLQotICAgIC8qKgotICAgICAqIE1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGZpcnN0IGNoaWxkIGVsZW1lbnQgb2YgdGhlIHNwZWNpZmllZCBxdWFsaWZpZWQgbmFtZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gIG5hbWUgIFRoZSBuYW1lIG9mIHRoZSBlbGVtZW50IHRvIG1vdmUgdGhlIGN1cnNvciB0by4KLSAgICAgKi8KLQotICAgIGJvb2xlYW4gdG9DaGlsZCAoIFFOYW1lIG5hbWUgKTsKLQotICAgIC8qKgotICAgICAqIE1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGNoaWxkIGVsZW1lbnQgc3BlY2lmaWVkIGJ5IDxlbT5pbmRleDwvZW0+LgotICAgICAqIAotICAgICAqIEBwYXJhbSAgaW5kZXggIFRoZSBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBpbiB0aGUgc2VxdWVuY2Ugb2YgY2hpbGQgCi0gICAgICogZWxlbWVudHMuCi0gICAgICogQHJldHVybiAgdHJ1ZSBpZiB0aGUgY3Vyc29yIHdhcyBtb3ZlZDsgb3RoZXJ3aXNlLCBmYWxzZS4KLSAgICAgKi8KLQotICAgIGJvb2xlYW4gdG9DaGlsZCAoIGludCBpbmRleCApOwotICAgIAotICAgIC8qKgotICAgICAqIE1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIHNwZWNpZmllZCA8ZW0+aW5kZXg8L2VtPiBjaGlsZCBlbGVtZW50IG9mIHRoZSAKLSAgICAgKiBzcGVjaWZpZWQgbmFtZSwgd2hlcmUgdGhhdCBlbGVtZW50IGlzIHRoZSAuCi0gICAgICogCi0gICAgICogQHBhcmFtICBuYW1lICBUaGUgbmFtZSBvZiB0aGUgY2hpbGQgZWxlbWVudCB0byBtb3ZlIHRoZSBjdXJzb3IgdG8uCi0gICAgICogQHBhcmFtICBpbmRleCAgVGhlIHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50IGluIHRoZSBzZXF1ZW5jZSBvZiBjaGlsZAotICAgICAqIGVsZW1lbnRzLgotICAgICAqIEByZXR1cm4gIHRydWUgaWYgdGhlIGN1cnNvciB3YXMgbW92ZWQ7IG90aGVyd2lzZSwgZmFsc2UuCi0gICAgICovCi0KLSAgICBib29sZWFuIHRvQ2hpbGQgKCBRTmFtZSBuYW1lLCBpbnQgaW5kZXggKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBNb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBuZXh0IHNpYmxpbmcgZWxlbWVudCBvZiB0aGUgc3BlY2lmaWVkIG5hbWUgaW4gbm8KLSAgICAgKiBuYW1lc3BhY2UuCi0gICAgICogCi0gICAgICogQHBhcmFtICBuYW1lICBUaGUgbmFtZSBvZiB0aGUgZWxlbWVudCB0byBtb3ZlIHRoZSBjdXJzb3IgdG8uCi0gICAgICogQHJldHVybiAgdHJ1ZSBpZiB0aGUgY3Vyc29yIHdhcyBtb3ZlZDsgb3RoZXJ3aXNlLCBmYWxzZS4KLSAgICAgKi8KLQotICAgIGJvb2xlYW4gdG9OZXh0U2libGluZyAoIFN0cmluZyBuYW1lICk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogTW92ZXMgdGhlIGN1cnNvciB0byB0aGUgbmV4dCBzaWJsaW5nIGVsZW1lbnQgb2YgdGhlIHNwZWNpZmllZCBuYW1lIAotICAgICAqIGluIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlLgotICAgICAqIAotICAgICAqIEBwYXJhbSAgbmFtZXNwYWNlICBUaGUgbmFtZXNwYWNlIFVSSSBmb3IgdGhlIGVsZW1lbnQgdG8gbW92ZSB0aGUgY3Vyc29yCi0gICAgICogdG8uCi0gICAgICogQHBhcmFtICBuYW1lICBUaGUgbmFtZSBvZiB0aGUgZWxlbWVudCB0byBtb3ZlIHRoZSBjdXJzb3IgdG8uCi0gICAgICogQHJldHVybiAgdHJ1ZSBpZiB0aGUgY3Vyc29yIHdhcyBtb3ZlZDsgb3RoZXJ3aXNlLCBmYWxzZS4KLSAgICAgKi8KLQotICAgIGJvb2xlYW4gdG9OZXh0U2libGluZyAoIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBuYW1lICk7Ci0KLSAgICAKLSAgICAvKioKLSAgICAgKiBNb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBuZXh0IHNpYmxpbmcgZWxlbWVudCBvZiB0aGUgc3BlY2lmaWVkIAotICAgICAqIHF1YWxpZmllZCBuYW1lLgotICAgICAqIAotICAgICAqIEBwYXJhbSAgbmFtZSAgVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgdG8gbW92ZSB0aGUgY3Vyc29yIHRvLgotICAgICAqIEByZXR1cm4gIHRydWUgaWYgdGhlIGN1cnNvciB3YXMgbW92ZWQ7IG90aGVyd2lzZSwgZmFsc2UuCi0gICAgICovCi0KLSAgICBib29sZWFuIHRvTmV4dFNpYmxpbmcgKCBRTmFtZSBuYW1lICk7Ci0KLSAgICAvKioKLSAgICAgKiBNb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBmaXJzdCBhdHRyaWJ1dGUgb2YgdGhpcyBlbGVtZW50LCBvcgotICAgICAqIHJldHVybnMgZmFsc2UgYW5kIGRvZXMgbm90IG1vdmUgdGhlIGN1cnNvciBpZiB0aGVyZSBhcmUgbm8KLSAgICAgKiBhdHRyaWJ1dGVzLiBUaGUgb3JkZXIgb2YgYXR0cmlidXRlcyBpcyBhcmJpdHJhcnksIGJ1dCBzdGFibGUuPGJyLz48YnIvPgotICAgICAqCi0gICAgICogeG1sbnMgYXR0cmlidXRlcyAobmFtZXNwYWNlIGRlY2xhcmF0aW9ucykgYXJlIG5vdCBjb25zaWRlcmVkIAotICAgICAqIGF0dHJpYnV0ZXMgYnkgdGhpcyBmdW5jdGlvbi48YnIvPjxici8+Ci0gICAgICoKLSAgICAgKiBUaGUgY3Vyc29yIG11c3QgYmUgb24gYSBTVEFSVCBvciBTVEFSVERPQyBmb3IgdGhpcyBtZXRob2QgdG8KLSAgICAgKiBzdWNjZWVkLgotICAgICAqIAotICAgICAqIEByZXR1cm4gIHRydWUgaWYgdGhlIGN1cnNvciB3YXMgbW92ZWQ7IG90aGVyd2lzZSwgZmFsc2UuCi0gICAgICovCi0KLSAgICBib29sZWFuIHRvRmlyc3RBdHRyaWJ1dGUgKCApOwotICAgIAotICAgIC8qKgotICAgICAqIE1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGxhc3QgYXR0cmlidXRlIG9mIHRoaXMgZWxlbWVudCwgb3IKLSAgICAgKiByZXR1cm5zIGZhbHNlIGFuZCBkb2VzIG5vdCBtb3ZlIHRoZSBjdXJzb3IgaWYgdGhlcmUgYXJlIG5vCi0gICAgICogYXR0cmlidXRlcy4gVGhlIG9yZGVyIG9mIGF0dHJpYnV0ZXMgaXMgYXJiaXRyYXJ5LCBidXQgc3RhYmxlLjxici8+PGJyLz4KLSAgICAgKgotICAgICAqIHhtbG5zIGF0dHJpYnV0ZXMgKG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMpIGFyZSBub3QgY29uc2lkZXJlZCAKLSAgICAgKiBhdHRyaWJ1dGVzIGJ5IHRoaXMgZnVuY3Rpb24uPGJyLz48YnIvPgotICAgICAqCi0gICAgICogVGhlIGN1cnNvciBtdXN0IGJlIG9uIGEgU1RBUlQgb3IgU1RBUlRET0MgZm9yIHRoaXMgbWV0aG9kCi0gICAgICogdG8gc3VjY2VlZC4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuICB0cnVlIGlmIHRoZSBjdXJzb3Igd2FzIG1vdmVkOyBvdGhlcndpc2UsIGZhbHNlLgotICAgICAqLwotCi0gICAgYm9vbGVhbiB0b0xhc3RBdHRyaWJ1dGUgKCApOwotCi0gICAgLyoqCi0gICAgICogTW92ZXMgdGhlIGN1cnNvciB0byB0aGUgbmV4dCBzaWJsaW5nIGF0dHJpYnV0ZSwgb3IgcmV0dXJucwotICAgICAqIGZhbHNlIGFuZCBkb2VzIG5vdCBtb3ZlIHRoZSBjdXJzb3IgaWYgdGhlcmUgaXMgbm8gbmV4dAotICAgICAqIHNpYmxpbmcgYXR0cmlidXRlLiBUaGUgb3JkZXIgb2YgYXR0cmlidXRlcyBpcyBhcmJpdHJhcnksIGJ1dCBzdGFibGUuPGJyLz48YnIvPgotICAgICAqIAotICAgICAqIHhtbG5zIGF0dHJpYnV0ZXMgKG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMpIGFyZSBub3QgY29uc2lkZXJlZCAKLSAgICAgKiBhdHRyaWJ1dGVzIGJ5IHRoaXMgZnVuY3Rpb24uPGJyLz48YnIvPgotICAgICAqCi0gICAgICogVGhlIGN1cnNvciBtdXN0IGJlIG9uIGFuIGF0dHJpYnV0ZSBmb3IgdGhpcyBtZXRob2QgdG8gc3VjY2VlZC4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuICB0cnVlIGlmIHRoZSBjdXJzb3Igd2FzIG1vdmVkOyBvdGhlcndpc2UsIGZhbHNlLgotICAgICAqLwotCi0gICAgYm9vbGVhbiB0b05leHRBdHRyaWJ1dGUgKCApOwotCi0gICAgLyoqCi0gICAgICogTW92ZXMgdGhlIGN1cnNvciB0byB0aGUgcHJldmlvdXMgc2libGluZyBhdHRyaWJ1dGUsIG9yIHJldHVybnMKLSAgICAgKiBmYWxzZSBhbmQgZG9lcyBub3QgbW92ZSB0aGUgY3Vyc29yIGlmIHRoZXJlIGlzIG5vIHByZXZpb3VzCi0gICAgICogc2libGluZyBhdHRyaWJ1dGUuIFRoZSBvcmRlciBvZiBhdHRyaWJ1dGVzIGlzIGFyYml0cmFyeSwgYnV0IHN0YWJsZS48YnIvPjxici8+Ci0gICAgICogCi0gICAgICogeG1sbnMgYXR0cmlidXRlcyAobmFtZXNwYWNlIGRlY2xhcmF0aW9ucykgYXJlIG5vdCBjb25zaWRlcmVkIAotICAgICAqIGF0dHJpYnV0ZXMgYnkgdGhpcyBmdW5jdGlvbi48YnIvPjxici8+Ci0gICAgICoKLSAgICAgKiBUaGUgY3Vyc29yIG11c3QgYmUgb24gYW4gYXR0cmlidXRlIGZvciB0aGlzIG1ldGhvZCB0byBzdWNjZWVkLgotICAgICAqIAotICAgICAqIEByZXR1cm4gIHRydWUgaWYgdGhlIGN1cnNvciB3YXMgbW92ZWQ7IG90aGVyd2lzZSwgZmFsc2UuCi0gICAgICovCi0KLSAgICBib29sZWFuIHRvUHJldkF0dHJpYnV0ZSAoICk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogV2hlbiBhdCBhIFNUQVJUIG9yIFNUQVJURE9DLCByZXR1cm5zIHRoZSBhdHRyaWJ1dGUgdGV4dCBmb3IgdGhlIGdpdmVuCi0gICAgICogYXR0cmlidXRlLiBXaGVuIG5vdCBhdCBhIFNUQVJUIG9yIFNUQVJURE9DIG9yIHRoZSBhdHRyaWJ1dGUgZG9lcyBub3QKLSAgICAgKiBleGlzdCwgcmV0dXJucyBudWxsLiAgCi0gICAgICogCi0gICAgICogQHBhcmFtICBhdHRyTmFtZSAgVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB3aG9zZSB2YWx1ZSBpcyByZXF1ZXN0ZWQuCi0gICAgICogQHJldHVybiAgVGhlIGF0dHJpYnV0ZSdzIHZhbHVlIGlmIGl0IGhhcyBvbmU7IG90aGVyd2lzZSwgbnVsbC4KLSAgICAgKi8KLQotICAgIFN0cmluZyBnZXRBdHRyaWJ1dGVUZXh0ICggUU5hbWUgYXR0ck5hbWUgKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBXaGVuIGF0IGEgU1RBUlQgb3IgU1RBUlRET0MsIHNldHMgdGhlIGF0dHJpYnV0ZSB0ZXh0IGZvciB0aGUgZ2l2ZW4KLSAgICAgKiBhdHRyaWJ1dGUuIFdoZW4gbm90IGF0IGEgU1RBUlQgb3IgU1RBUlRET0MgcmV0dXJucyBmYWxzZS4KLSAgICAgKiBJZiB0aGUgYXR0cmlidXRlIGRvZXMgbm90IGV4aXN0LCBvbmUgaXMgY3JlYXRlZC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gIGF0dHJOYW1lICBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHdob3NlIHZhbHVlIGlzIGJlaW5nIHNldC4KLSAgICAgKiBAcGFyYW0gIHZhbHVlICBUaGUgbmV3IHZhbHVlIGZvciB0aGUgYXR0cmlidXRlLgotICAgICAqIEByZXR1cm4gIHRydWUgaWYgdGhlIG5ldyB2YWx1ZSB3YXMgc2V0OyBvdGhlcndpc2UsIGZhbHNlLgotICAgICAqLwotCi0gICAgYm9vbGVhbiBzZXRBdHRyaWJ1dGVUZXh0ICggUU5hbWUgYXR0ck5hbWUsIFN0cmluZyB2YWx1ZSApOwotICAKLSAgICAvKioKLSAgICAgKiBXaGVuIGF0IGEgU1RBUlQgb3IgU1RBUlRET0MsIHJlbW92ZXMgdGhlIGF0dHJpYnV0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgotICAgICAqIAotICAgICAqIEBwYXJhbSAgYXR0ck5hbWUgIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdGhhdCBzaG91bGQgYmUgcmVtb3ZlZC4KLSAgICAgKiBAcmV0dXJuICB0cnVlIGlmIHRoZSBhdHRyaWJ1dGUgd2FzIHJlbW92ZWQ7IG90aGVyd2lzZSwgZmFsc2UuCi0gICAgICovCi0KLSAgICBib29sZWFuIHJlbW92ZUF0dHJpYnV0ZSAoIFFOYW1lIGF0dHJOYW1lICk7Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSB0ZXh0IHZhbHVlIG9mIHRoZSBjdXJyZW50IGRvY3VtZW50LCBlbGVtZW50LCBhdHRyaWJ1dGUsCi0gICAgICogY29tbWVudCwgcHJvY2luc3Qgb3IgdGV4dCB0b2tlbi4gPGJyLz48YnIvPgotICAgICAqCi0gICAgICogV2hlbiBnZXR0aW5nIHRoZSB0ZXh0IHZhbHVlIG9mIGFuIGVsZW1lbnQsIG5vbi10ZXh0IGNvbnRlbnQgc3VjaAotICAgICAqIGFzIGNvbW1lbnRzIGFuZCBwcm9jZXNzaW5nIGluc3RydWN0aW9ucyBhcmUgaWdub3JlZCBhbmQgdGV4dCBpcyBjb25jYXRlbmF0ZWQuCi0gICAgICogRm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBuZXN0ZWQgZWxlbWVudCBjaGlsZHJlbiwgdGhpcwotICAgICAqIHJldHVybnMgdGhlIGNvbmNhdGVuYXRlZCB0ZXh0IG9mIGFsbCBtaXhlZCBjb250ZW50IGFuZCB0aGUKLSAgICAgKiB0ZXh0IG9mIGFsbCB0aGUgZWxlbWVudCBjaGlsZHJlbiwgcmVjdXJzaW5nIGluIGZpcnN0LXRvLWxhc3QKLSAgICAgKiBkZXB0aGZpcnN0IG9yZGVyLjxici8+PGJyLz4KLSAgICAgKgotICAgICAqIEZvciBhdHRyaWJ1dGVzLCB0aGlzIHJldHVybnMgdGhlIGF0dHJpYnV0ZSB2YWx1ZS48YnIvPjxici8+Ci0gICAgICoKLSAgICAgKiBGb3IgY29tbWVudHMgYW5kIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLCB0aGlzIHJldHVybnMgdGhlIHRleHQgY29udGVudHMgCi0gICAgICogb2YgdGhlIGNvbW1lbnQgb3IgUEksIG5vdCBpbmNsdWRpbmcgdGhlIGRlbGltaXRpbmcgc2VxdWVuY2VzICZsdDshLS0gLS0mZ3Q7LCAmbHQ7PyA/Jmd0Oy4KLSAgICAgKjxici8+PGJyLz4KLSAgICAgKiBJZiB0aGUgY3VycmVudCB0b2tlbiBpcyBub3QgYSBTVEFSVCwgU1RBUlRET0MsIFRFWFQsIEFUVFIsIENPTU1FTlQsIG9yCi0gICAgICogUFJPQ0lOU1QsIHRoaXMgcmV0dXJucyBudWxsLiBUaGUgdmFsdWUgb2YgYW4gZW1wdHkgdGFnIGlzIHRoZQotICAgICAqIGVtcHR5IHN0cmluZy4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuICBUaGUgdGV4dCB2YWx1ZSBvZiB0aGUgY3VycmVudCB0b2tlbiwgaWYgdGhlIHRva2VuJ3MgdHlwZSBpcwotICAgICAqIFNUQVJULCBTVEFSVERPQywgVEVYVCwgQVRUUiwgQ09NTUVOVCwgb3IgUFJPQ0lOU1Q7IG51bGwgaWYgdGhlIHR5cGUgaXMKLSAgICAgKiBFTkQsIEVORERPQywgTk9ORSwgb3IgTkFNRVNQQUNFLgotICAgICAqLwotCi0gICAgU3RyaW5nIGdldFRleHRWYWx1ZSAoICk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ29waWVzIHRoZSB0ZXh0IHZhbHVlIG9mIHRoZSBjdXJyZW50IGRvY3VtZW50LCBlbGVtZW50LCBhdHRyaWJ1dGUsCi0gICAgICogY29tbWVudCwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBvciB0ZXh0IHRva2VuLCBjb3VudGluZyByaWdodCBmcm9tIAotICAgICAqIHRoaXMgY3Vyc29yJ3MgbG9jYXRpb24gdXAgdG8gPGVtPm1heENoYXJhY3RlckNvdW50PC9lbT4sCi0gICAgICogYW5kIGNvcGllcyB0aGUgcmV0dXJuZWQgdGV4dCBpbnRvIDxlbT5yZXR1cm5lZENoYXJzPC9lbT4uIDxici8+PGJyLz4KLSAgICAgKiAKLSAgICAgKiBXaGVuIGdldHRpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gZWxlbWVudCwgbm9uLXRleHQgY29udGVudCBzdWNoCi0gICAgICogYXMgY29tbWVudHMgYW5kIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zIGFyZSBpZ25vcmVkIGFuZCB0ZXh0IGlzIGNvbmNhdGVuYXRlZC4KLSAgICAgKiBGb3IgZWxlbWVudHMgdGhhdCBoYXZlIG5lc3RlZCBlbGVtZW50IGNoaWxkcmVuLCB0aGlzCi0gICAgICogcmV0dXJucyB0aGUgY29uY2F0ZW5hdGVkIHRleHQgb2YgYWxsIG1peGVkIGNvbnRlbnQgYW5kIHRoZQotICAgICAqIHRleHQgb2YgYWxsIHRoZSBlbGVtZW50IGNoaWxkcmVuLCByZWN1cnNpbmcgaW4gZmlyc3QtdG8tbGFzdAotICAgICAqIGRlcHRoZmlyc3Qgb3JkZXIuPGJyLz48YnIvPgotICAgICAqCi0gICAgICogRm9yIGF0dHJpYnV0ZXMsIHRoaXMgcmV0dXJucyB0aGUgYXR0cmlidXRlIHZhbHVlLjxici8+PGJyLz4KLSAgICAgKgotICAgICAqIEZvciBjb21tZW50cyBhbmQgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMsIHRoaXMgcmV0dXJucyB0aGUgdGV4dCBjb250ZW50cyAKLSAgICAgKiBvZiB0aGUgY29tbWVudCBvciBQSSwgbm90IGluY2x1ZGluZyB0aGUgZGVsaW1pdGluZyBzZXF1ZW5jZXMgJmx0OyEtLSAtLSZndDssICZsdDs/ID8mZ3Q7LgotICAgICAqIDxici8+PGJyLz4KLSAgICAgKiAKLSAgICAgKiBJZiB0aGUgY3VycmVudCB0b2tlbiBpcyBFTkQsIEVORERPQywgb3IgTkFNRVNQQUNFLCB0aGlzIHJldHVybnMgMC4gCi0gICAgICogVGhlIHZhbHVlIG9mIGFuIGVtcHR5IHRhZyBpcyB0aGUgZW1wdHkgc3RyaW5nLgotICAgICAqIAotICAgICAqIEBwYXJhbSAgcmV0dXJuZWRDaGFycyAgQSBjaGFyYWN0ZXIgYXJyYXkgdG8gaG9sZCB0aGUgcmV0dXJuZWQgY2hhcmFjdGVycy4KLSAgICAgKiBAcGFyYW0gIG9mZnNldCAgVGhlIHBvc2l0aW9uIHdpdGhpbiByZXR1cm5lZENoYXJzIHRvIHdoaWNoIHRoZSBmaXJzdCBvZiB0aGUgCi0gICAgICogcmV0dXJuZWQgY2hhcmFjdGVycyBzaG91bGQgYmUgY29waWVkLgotICAgICAqIEBwYXJhbSAgbWF4Q2hhcmFjdGVyQ291bnQgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFmdGVyIHRoaXMgY3Vyc29yJ3MgCi0gICAgICogbG9jYXRpb24gdG8gY29weS4KLSAgICAgKiBAcmV0dXJuICBUaGUgYWN0dWFsIG51bWJlciBvZiBjaGFyYWN0ZXJzIGNvcGllZDsgMCBpZiBubyBjaGFyYWN0ZXJzIAotICAgICAqIHdlcmUgY29waWVkLgotICAgICAqLwotCi0gICAgaW50IGdldFRleHRWYWx1ZSAoIGNoYXJbXSByZXR1cm5lZENoYXJzLCBpbnQgb2Zmc2V0LCBpbnQgbWF4Q2hhcmFjdGVyQ291bnQgKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBjaGFyYWN0ZXJzIG9mIHRoZSBjdXJyZW50IFRFWFQgdG9rZW4uICBJZiB0aGUgY3VycmVudCB0b2tlbgotICAgICAqIGlzIG5vdCBURVhULCByZXR1cm5zICIiLiAgSWYgaW4gdGhlIG1pZGRsZSBvZiBhIFRFWFQgdG9rZW4sIHJldHVybnMKLSAgICAgKiB0aG9zZSBjaGFycyB0byB0aGUgcmlnaHQgb2YgdGhlIGN1cnNvciBvZiB0aGUgVEVYVCB0b2tlbi4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuICBUaGUgcmVxdWVzdGVkIHRleHQ7IGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgY3VycmVudCB0b2tlbiB0eXBlIGlzCi0gICAgICogbm90IFRFWFQuCi0gICAgICovCi0KLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSB0ZXh0IHZhbHVlIG9mIHRoZSBYTUwgYXQgdGhpcyBjdXJzb3IncyBsb2NhdGlvbiBpZiB0aGF0IFhNTCdzCi0gICAgICogdG9rZW4gdHlwZSBpcyBTVEFSVCwgU1RBUlRET0MsIEFUVFIsIENPTU1FTlQgb3IgUFJPQ0lOU1QuIDxici8+PGJyLz4KLSAgICAgKgotICAgICAqIEZvciBlbGVtZW50cyB0aGF0IGhhdmUgbmVzdGVkIGNoaWxkcmVuIHRoaXMgZmlyc3QgcmVtb3ZlcyBhbGwKLSAgICAgKiB0aGUgY29udGVudCBvZiB0aGUgZWxlbWVudCBhbmQgcmVwbGFjZXMgaXQgd2l0aCB0aGUgZ2l2ZW4gdGV4dC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gIHRleHQgIFRoZSB0ZXh0IHRvIHVzZSBhcyBhIG5ldyB2YWx1ZS4KLSAgICAgKiBAdGhyb3dzICBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uICBJZiB0aGUgdG9rZW4gdHlwZSBhdCB0aGlzCi0gICAgICogY3Vyc29yJ3MgbG9jYXRpb24gaXMgbm90IFNUQVJULCBTVEFSVERPQywgQVRUUiwgQ09NTUVOVCBvcgotICAgICAqIFBST0NJTlNULgotICAgICAqLwotICAgIHZvaWQgc2V0VGV4dFZhbHVlICggU3RyaW5nIHRleHQgKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSB0ZXh0IHZhbHVlIG9mIHRoZSBYTUwgYXQgdGhpcyBjdXJzb3IncyBsb2NhdGlvbiAoaWYgdGhhdCBYTUwncwotICAgICAqIHRva2VuIHR5cGUgaXMgU1RBUlQsIFNUQVJURE9DLCBBVFRSLCBDT01NRU5UIG9yIFBST0NJTlNUKSB0byB0aGUgCi0gICAgICogY29udGVudHMgb2YgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIgYXJyYXkuIDxici8+PGJyLz4KLSAgICAgKgotICAgICAqIEZvciBlbGVtZW50cyB0aGF0IGhhdmUgbmVzdGVkIGNoaWxkcmVuIHRoaXMgZmlyc3QgcmVtb3ZlcyBhbGwKLSAgICAgKiB0aGUgY29udGVudCBvZiB0aGUgZWxlbWVudCBhbmQgcmVwbGFjZXMgaXQgd2l0aCB0aGUgZ2l2ZW4gdGV4dC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gIHNvdXJjZUNoYXJzICBBIGNoYXJhY3RlciBhcnJheSBjb250YWluaW5nIHRoZSBYTUwncyBuZXcgdmFsdWUuCi0gICAgICogQHBhcmFtICBvZmZzZXQgIFRoZSBwb3NpdGlvbiB3aXRoaW4gc291cmNlQ2hhcnMgZnJvbSB3aGljaCB0aGUgZmlyc3Qgb2YgCi0gICAgICogdGhlIHNvdXJjZSBjaGFyYWN0ZXJzIHNob3VsZCBiZSBjb3BpZWQuCi0gICAgICogQHBhcmFtICBsZW5ndGggIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHNldCBhcyB0aGUgWE1MJ3MgbmV3Ci0gICAgICogdmFsdWUuCi0gICAgICogQHRocm93cyAgamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiAgSWYgdGhlIHRva2VuIHR5cGUgYXQgdGhpcwotICAgICAqIGN1cnNvcidzIGxvY2F0aW9uIGlzIG5vdCBTVEFSVCwgU1RBUlRET0MsIEFUVFIsIENPTU1FTlQgb3IKLSAgICAgKiBQUk9DSU5TVC4KLSAgICAgKi8KLSAgICB2b2lkIHNldFRleHRWYWx1ZSAoIGNoYXJbXSBzb3VyY2VDaGFycywgaW50IG9mZnNldCwgaW50IGxlbmd0aCApOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBjaGFyYWN0ZXJzIHRvIHRoZSByaWdodCBvZiB0aGUgY3Vyc29yIHVwIHRvIHRoZSBuZXh0IHRva2VuLgotICAgICAqLwotICAgIFN0cmluZyBnZXRDaGFycyAoICk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ29waWVzIGNoYXJhY3RlcnMgdXAgdG8gdGhlIHNwZWNpZmllZCBtYXhpbXVtIG51bWJlciwgY291bnRpbmcgcmlnaHQgZnJvbSAKLSAgICAgKiB0aGlzIGN1cnNvcidzIGxvY2F0aW9uIHRvIHRoZSBjaGFyYWN0ZXIgYXQgPGVtPm1heENoYXJhY3RlckNvdW50PC9lbT4uICBUaGUgCi0gICAgICogcmV0dXJuZWQgY2hhcmFjdGVycyBhcmUgYWRkZWQgdG8gPGVtPnJldHVybmVkQ2hhcnM8L2VtPiwgd2l0aCB0aGUgZmlyc3QKLSAgICAgKiBjaGFyYWN0ZXIgY29waWVkIHRvIHRoZSA8ZW0+b2Zmc2V0PC9lbT4gcG9zaXRpb24uIFRoZSA8ZW0+bWF4Q2hhcmFjdGVyQ291bnQ8L2VtPiAKLSAgICAgKiBwYXJhbWV0ZXIgc2hvdWxkIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgbGVuZ3RoIG9mIDxlbT5yZXR1cm5lZENoYXJzPC9lbT4gCi0gICAgICogbWludXMgPGVtPm9mZnNldDwvZW0+LiBDb3BpZXMgYSBudW1iZXIgb2YgY2hhcmFjdGVycywgd2hpY2ggaXMgCi0gICAgICogZWl0aGVyIDxlbT5tYXhDaGFyYWN0ZXJDb3VudDwvZW0+IG9yIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB1cCB0byB0aGUgbmV4dCB0b2tlbiwgCi0gICAgICogd2hpY2hldmVyIGlzIGxlc3MuCi0gICAgICogCi0gICAgICogQHBhcmFtICByZXR1cm5lZENoYXJzICBBIGNoYXJhY3RlciBhcnJheSB0byBob2xkIHRoZSByZXR1cm5lZCBjaGFyYWN0ZXJzLgotICAgICAqIEBwYXJhbSAgb2Zmc2V0ICBUaGUgcG9zaXRpb24gd2l0aGluIHJldHVybmVkQ2hhcnMgYXQgd2hpY2ggdGhlIGZpcnN0IG9mIHRoZSAKLSAgICAgKiByZXR1cm5lZCBjaGFyYWN0ZXJzIHNob3VsZCBiZSBhZGRlZC4KLSAgICAgKiBAcGFyYW0gIG1heENoYXJhY3RlckNvdW50ICBUaGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBhZnRlciB0aGlzIGN1cnNvcidzIAotICAgICAqIGxvY2F0aW9uIHRvIHJldHVybi4KLSAgICAgKiBAcmV0dXJuICBUaGUgYWN0dWFsIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJldHVybmVkOyAwIGlmIG5vIGNoYXJhY3RlcnMgCi0gICAgICogd2VyZSByZXR1cm5lZCBvciBpZiB0aGUgY3VycmVudCB0b2tlbiBpcyBub3QgVEVYVC4gCi0gICAgICovCi0KLSAgICBpbnQgZ2V0Q2hhcnMgKCBjaGFyW10gcmV0dXJuZWRDaGFycywgaW50IG9mZnNldCwgaW50IG1heENoYXJhY3RlckNvdW50ICk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogTW92ZXMgdGhlIGN1cnNvciB0byB0aGUgU1RBUlRET0MgdG9rZW4sIHdoaWNoIGlzIHRoZSAKLSAgICAgKiByb290IG9mIHRoZSBkb2N1bWVudC4KLSAgICAgKi8KLQotICAgIHZvaWQgdG9TdGFydERvYyAoICk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogTW92ZXMgdGhlIGN1cnNvciB0byB0aGUgRU5ERE9DIHRva2VuLCB3aGljaCBpcyB0aGUgZW5kCi0gICAgICogb2YgdGhlIGRvY3VtZW50LgotICAgICAqLwotCi0gICAgdm9pZCB0b0VuZERvYyAoICk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgc3BlY2lmaWVkIGN1cnNvciBpcyBpbiB0aGUgc2FtZSBkb2N1bWVudCBhcwotICAgICAqIHRoaXMgY3Vyc29yLgotICAgICAqIAotICAgICAqIEBwYXJhbSAgY3Vyc29yICBUaGUgY3Vyc29yIHRoYXQgbWF5IGJlIGluIHRoZSBzYW1lIGRvY3VtZW50Ci0gICAgICogYXMgdGhpcyBjdXJzb3IuCi0gICAgICogQHJldHVybiAgdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIGN1cnNvciBpcyBpbiB0aGUgc2FtZSBkb2N1bWVudDsKLSAgICAgKiBvdGhlcndpc2UsIGZhbHNlLgotICAgICAqLwotCi0gICAgYm9vbGVhbiBpc0luU2FtZURvY3VtZW50ICggWG1sQ3Vyc29yIGN1cnNvciApOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhbiBpbnRlZ2VyIGluZGljYXRpbmcgd2hldGhlciB0aGlzIGN1cnNvciBpcyBiZWZvcmUsIAotICAgICAqIGFmdGVyLCBvciBhdCB0aGUgc2FtZSBwb3NpdGlvbiBhcyB0aGUgc3BlY2lmaWVkIGN1cnNvci4gPGJyLz48YnIvPgotICAgICAqIAotICAgICAqIDxjb2RlPmEuY29tcGFyZVBvc2l0aW9uKGIpIDwgMDwvY29kZT4gbWVhbnMgYSBpcyB0byB0aGUgbGVmdCBvZiBiLjxici8+Ci0gICAgICogPGNvZGU+YS5jb21wYXJlUG9zaXRpb24oYikgPT0gMDwvY29kZT4gbWVhbnMgYSBpcyBhdCB0aGUgc2FtZSBwb3NpdGlvbiBhcyBiLjxici8+Ci0gICAgICogPGNvZGU+YS5jb21wYXJlUG9zaXRpb24oYikgPiAwPC9jb2RlPiBtZWFucyBhIGlzIHRvIHRoZSByaWdodCBvZiBiLjxici8+PGJyLz4KLSAgICAgKgotICAgICAqIFRoZSBzb3J0IG9yZGVyIG9mIGN1cnNvcnMgaW4gdGhlIGRvY3VtZW50IGlzIHRoZSB0b2tlbiBvcmRlci4KLSAgICAgKiBGb3IgZXhhbXBsZSwgaWYgY3Vyc29yICJhIiBpcyBhdCBhIFNUQVJUIHRva2VuIGFuZCB0aGUgY3Vyc29yICJiIgotICAgICAqIGlzIGF0IGEgdG9rZW4gd2l0aGluIHRoZSBjb250ZW50cyBvZiB0aGUgc2FtZSBlbGVtZW50LCB0aGVuCi0gICAgICogYS5jb21wYXJlUG9zaXRpb24oYikgd2lsbCByZXR1cm4gLTEsIG1lYW5pbmcgdGhhdCB0aGUgcG9zaXRpb24KLSAgICAgKiBvZiBhIGlzIGJlZm9yZSBiLgotICAgICAqIAotICAgICAqIEBwYXJhbSAgY3Vyc29yICBUaGUgY3Vyc29yIHdob3NlIHBvc2l0aW9uIHNob3VsZCBiZSBjb21wYXJlZAotICAgICAqIHdpdGggdGhpcyBjdXJzb3IuCi0gICAgICogQHJldHVybiAgMSBpZiB0aGlzIGN1cnNvciBpcyBhZnRlciB0aGUgc3BlY2lmaWVkIGN1cnNvcjsgMCBpZiAKLSAgICAgKiB0aGlzIGN1cnNvciBpcyBhdCB0aGUgc2FtZSBwb3NpdGlvbiBhcyB0aGUgc3BlY2lmaWVkIGN1cnNvcjsgCi0gICAgICogLTEgaWYgdGhpcyBjdXJzb3IgaXMgYmVmb3JlIHRoZSBzcGVjaWZpZWQgY3Vyc29yLgotICAgICAqIEB0aHJvd3MgIGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gIElmIHRoZSBzcGVjaWZpZWQKLSAgICAgKiBjdXJzb3IgaXMgbm90IGluIHRoZSBzYW1lIGRvY3VtZW50IGFzIHRoaXMgY3Vyc29yLgotICAgICAqLwotCi0gICAgaW50IGNvbXBhcmVQb3NpdGlvbiAoIFhtbEN1cnNvciBjdXJzb3IgKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBEZXRlcm1pbmVzIGlmIHRoaXMgY3Vyc29yIGlzIHRvIHRoZSBsZWZ0IG9mIChvciBiZWZvcmUpCi0gICAgICogdGhlIHNwZWNpZmllZCBjdXJzb3IuIE5vdGUgdGhhdCB0aGlzIGlzIHRoZSBzYW1lIGFzIAotICAgICAqIDxjb2RlPmEuY29tcGFyZVBvc2l0aW9uKGIpICZsdDsgMCA8L2NvZGU+Ci0gICAgICogCi0gICAgICogQHBhcmFtICBjdXJzb3IgIFRoZSBjdXJzb3Igd2hvc2UgcG9zaXRpb24gc2hvdWxkIGJlIGNvbXBhcmVkCi0gICAgICogd2l0aCB0aGlzIGN1cnNvci4KLSAgICAgKiBAcmV0dXJuICB0cnVlIGlmIHRoaXMgY3Vyc29yIGlzIHRvIHRoZSBsZWZ0IG9mIHRoZSBzcGVjaWZpZWQKLSAgICAgKiBjdXJzb3I7IG90aGVyd2lzZSwgZmFsc2UuCi0gICAgICovCi0KLSAgICBib29sZWFuIGlzTGVmdE9mICggWG1sQ3Vyc29yIGN1cnNvciApOwotICAgIAotICAgIC8qKgotICAgICAqIERldGVybWluZXMgaWYgdGhpcyBjdXJzb3IgaXMgYXQgdGhlIHNhbWUgcG9zaXRpb24gYXMKLSAgICAgKiB0aGUgc3BlY2lmaWVkIGN1cnNvci4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIHNhbWUgYXMgCi0gICAgICogPGNvZGU+YS5jb21wYXJlUG9zaXRpb24oYikgPT0gMCA8L2NvZGU+Ci0gICAgICogCi0gICAgICogQHBhcmFtICBjdXJzb3IgIFRoZSBjdXJzb3Igd2hvc2UgcG9zaXRpb24gc2hvdWxkIGJlIGNvbXBhcmVkCi0gICAgICogd2l0aCB0aGlzIGN1cnNvci4KLSAgICAgKiBAcmV0dXJuICB0cnVlIGlmIHRoaXMgY3Vyc29yIGlzIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGFzIAotICAgICAqIHRoZSBzcGVjaWZpZWQgY3Vyc29yOyBvdGhlcndpc2UsIGZhbHNlLgotICAgICAqLwotCi0gICAgYm9vbGVhbiBpc0F0U2FtZVBvc2l0aW9uQXMgKCBYbWxDdXJzb3IgY3Vyc29yICk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogRGV0ZXJtaW5lcyBpZiB0aGlzIGN1cnNvciBpcyB0byB0aGUgcmlnaHQgb2YgKG9yIGFmdGVyKQotICAgICAqIHRoZSBzcGVjaWZpZWQgY3Vyc29yLiBOb3RlIHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBhcyAKLSAgICAgKiA8Y29kZT5hLmNvbXBhcmVQb3NpdGlvbihiKSAmZ3Q7IDAgPC9jb2RlPgotICAgICAqIAotICAgICAqIEBwYXJhbSAgY3Vyc29yICBUaGUgY3Vyc29yIHdob3NlIHBvc2l0aW9uIHNob3VsZCBiZSBjb21wYXJlZAotICAgICAqIHdpdGggdGhpcyBjdXJzb3IuCi0gICAgICogQHJldHVybiAgdHJ1ZSBpZiB0aGlzIGN1cnNvciBpcyB0byB0aGUgcmlnaHQgb2YgdGhlIHNwZWNpZmllZAotICAgICAqIGN1cnNvcjsgb3RoZXJ3aXNlLCBmYWxzZS4KLSAgICAgKi8KLQotICAgIGJvb2xlYW4gaXNSaWdodE9mICggWG1sQ3Vyc29yIGN1cnNvciApOwotICAgIAotICAgIC8qKgotICAgICAqIEV4ZWN1dGVzIHRoZSBzcGVjaWZpZWQgWFF1ZXJ5IGV4cHJlc3Npb24gYWdhaW5zdCB0aGUgWE1MIHRoaXMKLSAgICAgKiBjdXJzb3IgaXMgaW4uIDxici8+PGJyLz4KLSAgICAgKiAKLSAgICAgKiBUaGUgcXVlcnkgbWF5IGJlIGEgU3RyaW5nIG9yIGEgY29tcGlsZWQgcXVlcnkuIFlvdSBjYW4gcHJlY29tcGlsZQotICAgICAqIGFuIFhRdWVyeSBleHByZXNzaW9uIHVzaW5nIHRoZSBYbWxCZWFucy5jb21waWxlUXVlcnkgbWV0aG9kLiA8YnIvPjxicj4KLSAgICAgKiAKLSAgICAgKiBUaGUgcm9vdCByZWZlcnJlZCB0byBieSB0aGUgZXhwcmVzc2lvbiBzaG91bGQgYmUgZ2l2ZW4gYXMgCi0gICAgICogYSBkb3QuIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBwYXRoIGV4cHJlc3Npb246Ci0gICAgICogPHByZT4KLSAgICAgKiBYbWxDdXJzb3IgcmVzdWx0cyA9IGN1cnNvci5leGVjUXVlcnkoInB1cmNoYXNlLW9yZGVyL2xpbmUtaXRlbVtwcmljZSAmbHQ7PSAyMC4wMF0iKTsKLSAgICAgKiA8L3ByZT4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gIHF1ZXJ5ICBUaGUgWFF1ZXJ5IGV4cHJlc3Npb24gdG8gZXhlY3V0ZS4KLSAgICAgKiBAcmV0dXJuICBBIGN1cnNvciBjb250YWluaW5nIHRoZSByZXN1bHRzIG9mIHRoZSBxdWVyeS4KLSAgICAgKiBAdGhyb3dzICBYbWxSdW50aW1lRXhjZXB0aW9uICBJZiB0aGUgcXVlcnkgZXhwcmVzc2lvbiBpcyBpbnZhbGlkLgotICAgICAqLwotCi0gICAgWG1sQ3Vyc29yIGV4ZWNRdWVyeSAoIFN0cmluZyBxdWVyeSApOwotICAgIAotICAgIC8qKgotICAgICAqIEV4ZWN1dGVzIHRoZSBzcGVjaWZpZWQgWFF1ZXJ5IGV4cHJlc3Npb24gYWdhaW5zdCB0aGUgWE1MIHRoaXMKLSAgICAgKiBjdXJzb3IgaXMgaW4sIGFuZCB1c2luZyB0aGUgc3BlY2lmaWVkIG9wdGlvbnMuIDxici8+PGJyLz4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gIHF1ZXJ5ICBUaGUgWFF1ZXJ5IGV4cHJlc3Npb24gdG8gZXhlY3V0ZS4KLSAgICAgKiBAcGFyYW0gIG9wdGlvbnMgIE9wdGlvbnMgZm9yIHRoZSBxdWVyeS4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gY2FsbCAKLSAgICAgKiB0aGUge0BsaW5rIFhtbE9wdGlvbnMjc2V0WHF1ZXJ5Q3VycmVudE5vZGVWYXIoU3RyaW5nKSBYbWxPcHRpb25zLnNldFhxdWVyeUN1cnJlbnROb2RlVmFyKFN0cmluZyl9Ci0gICAgICogbWV0aG9kIHRvIHNwZWNpZnkgYSBwYXJ0aWN1bGFyIG5hbWUgZm9yIHRoZSBxdWVyeSBleHByZXNzaW9uIAotICAgICAqIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIHRoZSBjb250ZXh0IG5vZGUuCi0gICAgICogQHRocm93cyAgWG1sUnVudGltZUV4Y2VwdGlvbiAgSWYgdGhlIHF1ZXJ5IGV4cHJlc3Npb24gaXMgaW52YWxpZC4KLSAgICAgKi8KLQotICAgIFhtbEN1cnNvciBleGVjUXVlcnkgKCBTdHJpbmcgcXVlcnksIFhtbE9wdGlvbnMgb3B0aW9ucyApOwotICAgIAotICAgIC8qKgotICAgICAqIFJlcHJlc2VudHMgdGhlIHN0YXRlIG9mIGEgZGNvdW1lbnQgYXQgYSBwYXJ0aWN1bGFyIHBvaW50Ci0gICAgICogaW4gdGltZS4gIEl0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgZG9jdW1lbnQgaGFzIGJlZW4gY2hhbmdlZAotICAgICAqIHNpbmNlIHRoYXQgcG9pbnQgaW4gdGltZS4KLSAgICAgKi8KLSAgICBpbnRlcmZhY2UgQ2hhbmdlU3RhbXAKLSAgICB7Ci0gICAgICAgIC8qKgotICAgICAgICAgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBkb2N1bWVudCBhc3NvaWF0ZWQgd2l0aCB0aGlzIENoYW5nZVN0YW1wCi0gICAgICAgICAqIGhhcyBiZWVuIGFsdGVyZWQgc2luY2UgdGhlIENoYW5nZVN0YW1wIGhhZCBiZWVuIGNyZWF0ZWQuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgYm9vbGVhbiBoYXNDaGFuZ2VkICggKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBjaGFuZ2Ugc3RhbXAgZm9yIHRoZSBkb2N1bWVudCB0aGUgY3VycmVudCBjdXJzb3IgaXMgaW4uIAotICAgICAqIFRoaXMgY2hhbmdlIHN0YW1wIGNhbiBiZSBxdWVyaWVkIGF0IGEgbGF0ZXIgcG9pbnQgaW4gdGltZSB0byBmaW5kIG91dAotICAgICAqIGlmIHRoZSBkb2N1bWVudCBoYXMgY2hhbmdlZC4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuICBUaGUgY2hhbmdlIHN0YW1wIGZvciB0aGUgZG9jdW1lbnQgdGhlIGN1cnJlbnQgY3Vyc29yIGlzIGluLgotICAgICAqLwotICAgIENoYW5nZVN0YW1wIGdldERvY0NoYW5nZVN0YW1wICggKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBTdWJjbGFzc2VzIG9mIFhtbEJvb2ttYXJrIGNhbiBiZSB1c2VkIHRvIGFubm90YXRlIGFuIFhNTCBkb2N1bWVudC4KLSAgICAgKiBUaGlzIGNsYXNzIGlzIGFic3RyYWN0IHRvIHByZXZlbnQgcGFydGllcyBmcm9tIGluYWR2ZXJ0ZW50bHkgCi0gICAgICogaW50ZXJmZXJpbmcgd2l0aCBlYWNoIG90aGVycycgYm9va21hcmtzIHdpdGhvdXQgZXhwbGljaXRseQotICAgICAqIHNoYXJpbmcgYSBib29rbWFyayBjbGFzcy4KLSAgICAgKi8KLQotICAgIGFic3RyYWN0IGNsYXNzIFhtbEJvb2ttYXJrCi0gICAgewotICAgICAgICAvKioKLSAgICAgICAgICogQ29uc3RydWN0cyBhIHN0cm9uZ2x5LXJlZmVyZW5jZWQgYm9va21hcmsuCi0gICAgICAgICAqLyAKLSAgICAgICAgcHVibGljIFhtbEJvb2ttYXJrICggKSB7IHRoaXMoIGZhbHNlICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKgotICAgICAgICAgKiBDb25zdHJ1Y3RzIGEgYm9va21hcmsuCi0gICAgICAgICAqIEBwYXJhbSB3ZWFrIHRydWUgaWYgdGhlIGRvY3VtZW50J3MgcmVmZXJlbmNlIHRvIHRoZSBib29rbWFyayBzaG91bGQgYmUgYSBXZWFrUmVmZXJlbmNlCi0gICAgICAgICAqLyAKLSAgICAgICAgcHVibGljIFhtbEJvb2ttYXJrICggYm9vbGVhbiB3ZWFrICkKLSAgICAgICAgewotICAgICAgICAgICAgX3JlZiA9IHdlYWsgPyBuZXcgV2Vha1JlZmVyZW5jZSggdGhpcyApIDogbnVsbDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIENhbGwgdGhlIGNyZWF0ZUN1cnNvciBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IGN1cnNvciB3aGljaCBpcwotICAgICAgICAgKiBwb3NpdGlvbmVkIGF0IHRoZSBzYW1lIHNwbGFjZSBhcyB0aGUgYm9va21hcmsuICBJdCBpcyBtdWNoIG1vcmUKLSAgICAgICAgICogZWZmaWNpZW50IHRvIGNhbGwgdG9Cb29rbWFyayBvbiBhbiBleGlzdGluZyBjdXJzb3IgdGhhbiBpdAotICAgICAgICAgKiBpcyB0byBjcmVhdGUgYSBuZXcgY3Vyc29yLiAgSG93ZXZlciwgdG9Cb29rbWFyayBtYXkgZmFpbCBpZiB0aGUKLSAgICAgICAgICogYm9va21hcmsgaXMgaW4gYSBkaWZmZXJlbnQgZG9jdW1lbnQgdGhhbiB0aGUgY3Vyc29yLiAgSXQgaXMKLSAgICAgICAgICogdW5kZXIgdGhlc2UgY2lyY3Vtc3RhbmNlcyB3aGVyZSBjcmVhdGVDdXJzb3IgbmVlZHMgdG8gYmUgY2FsbGVkCi0gICAgICAgICAqIG9uIHRoZSBib29rbWFyay4gIFN1YnNlcXVlbnQgbmF2aWdhdGlvbnMgdG8gYm9va21hcmsKLSAgICAgICAgICogcG9zaXRpb25zIHNob3VsZCBhdHRlbXB0IHRvIHJldXNlIHRoZSBsYXN0IGN1cnNvciB0bwotICAgICAgICAgKiBpbXByb3ZlIHBlcmZvcm1hY2UuCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgZmluYWwgWG1sQ3Vyc29yIGNyZWF0ZUN1cnNvciAoICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIF9jdXJyZW50TWFyayA9PSBudWxsID8gbnVsbCA6IF9jdXJyZW50TWFyay5jcmVhdGVDdXJzb3IoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBNb3ZlcyB0aGUgZ2l2ZW4gY3Vyc29yIHRvIHRoaXMgYm9va21hcmssIGFuZCByZXR1cm5zIGl0LgotICAgICAgICAgKi8gCi0gICAgICAgIHB1YmxpYyBmaW5hbCBYbWxDdXJzb3IgdG9Cb29rbWFyayAoIFhtbEN1cnNvciBjICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGMgPT0gbnVsbCB8fCAhYy50b0Jvb2ttYXJrKCB0aGlzICkgPyBjcmVhdGVDdXJzb3IoKSA6IGM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogVGhlIGRlZmF1bHQga2V5IGZvciBib29rbWFya3MgaXMgdGhlIGNsYXNzIHdoaWNoIGltcGxlbWVudHMKLSAgICAgICAgICogdGhlbS4gIFRoaXMgd2F5LCBtdWx0aXBsZSBwYXJ0aWVzIHVzaW5nIGJvb2ttYXJrcyBpbiB0aGUKLSAgICAgICAgICogc2FtZSBpbnN0YW5jZSBkb2N1bWVudCB3aWxsIG5vdCBpbnRlcmZlcmUgd2l0aCBlYWNob3RoZXIuCi0gICAgICAgICAqIE9uZSBjYW4sIGhvd2V2ZXIsIG92ZXJyaWRlIGdldEtleSgpIHRvIHVzZSBhIGtleSBvdGhlciB0aGFuCi0gICAgICAgICAqIHRoZSBjbGFzcy4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBPYmplY3QgZ2V0S2V5ICggKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDbGFzcygpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvKioKLSAgICAgICAgICogVGhlIG1hcmsgaXMgc2V0IGJ5IHRoZSBob3N0IGRvY3VtZW50OyBpdCBpcyBjYXBhYmxlIG9mCi0gICAgICAgICAqIHJldHVybmluZyBhbiBYbWxDdXJzb3IgaW1wbGVtZW50YXRpb24gYXQgdGhlIGxvY2F0aW9uIG9mCi0gICAgICAgICAqIHRoZSBib29rbWFyay4KLSAgICAgICAgICovIAotICAgICAgICBwdWJsaWMgICAgICAgWG1sTWFyayAgIF9jdXJyZW50TWFyazsKLSAgICAgICAgCi0gICAgICAgIC8qKgotICAgICAgICAgKiBJZiBub24tbnVsbCwgdGhlIHJlZiBpcyB1c2VkIGJ5IHRoZSBob3N0IGRvY3VtZW50Ci0gICAgICAgICAqIHRvIG1haW50YWluIGEgcmVmZXJlbmNlIHRvIHRoZSBib29rbWFyay4gIElmIGl0IGlzIGEgd2VhawotICAgICAgICAgKiByZWZlcmVuY2UsIHRoZSBob3N0IGRvY3VtZW50IHdpbGwgbm90IHByZXZlbnQgdGhlIEJvb2ttYXJrCi0gICAgICAgICAqIGZyb20gYmVpbmcgZ2FyYmFnZSBjb2xsZWN0ZWQuCi0gICAgICAgICAqLyAKLSAgICAgICAgcHVibGljIGZpbmFsIFJlZmVyZW5jZSBfcmVmOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEFuIGFic3RyYWN0IHtAbGluayBYbWxDdXJzb3J9IGZhY3RvcnkuCi0gICAgICogSW1wbGVtZW50YXRpb25zIG9mIFhtbEN1cnNvciBpbXBsZW1lbnQgWG1sTWFyayB0byBiZSBhYmxlIHRvCi0gICAgICogcmVjb25zdGl0dXRlIGEgY3Vyc29yIGZyb20gYSBib29rbWFyay4gV2hlbiBjb250ZW50IG1vdmVzIGJldHdlZW4KLSAgICAgKiBpbXBsZW1lbnRhdGlvbnMsIHRoZSBYbWxNYXJrIGlzIHNldCB0byB0aGUgaW1wbG1lbnRhdGlvbidzIHdoaWNoCi0gICAgICogcmVjaWV2ZXMgdGhlIG5ldyBjb250ZW50LgotICAgICAqLwotCi0gICAgaW50ZXJmYWNlIFhtbE1hcmsKLSAgICB7Ci0gICAgICAgIFhtbEN1cnNvciBjcmVhdGVDdXJzb3IgKCApOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgYSBib29rbWFyayB0byB0aGUgZG9jdW1lbnQgYXQgdGhpcyBjdXJzb3IncyBsb2NhdGlvbi4KLSAgICAgKgotICAgICAqIFRoZSBib29rbWFyayBpcyBhdHRhY2hlZCB0byB0aGUgdG9rZW4gaW4gdGhlIHRyZWUgaW1tZWRpYXRlbHkgCi0gICAgICogYWZ0ZXIgdGhlIGN1cnNvci4gSWYgdGhlIHRyZWUgaXMgbWFuaXB1bGF0ZWQgdG8gbW92ZQotICAgICAqIHRoYXQgb2JqZWN0IHRvIGEgZGlmZmVyZW50IHBsYWNlLCB0aGUgYm9va21hcmsgbW92ZXMgd2l0aCBpdC4KLSAgICAgKiBJZiB0aGUgdHJlZSBpcyBtYW5pcHVsYXRlZCB0byBkZWxldGUgdGhhdCB0b2tlbiBmcm9tIHRoZQotICAgICAqIHRyZWUsIHRoZSBib29rbWFyayBpcyBvcnBoYW5lZC4gQ29weSBvcGVyYXRpb25zIGRvIG5vdCBjb3B5Ci0gICAgICogYm9va21hcmtzLgotICAgICAqIAotICAgICAqIEBwYXJhbSAgYm9va21hcmsgIFRoZSBib29rbWFyayB0byBzZXQuCi0gICAgICovCi0KLSAgICB2b2lkIHNldEJvb2ttYXJrICggWG1sQm9va21hcmsgYm9va21hcmsgKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXRyaWV2ZXMgdGhlIGJvb2ttYXJrIHdpdGggdGhlIHNwZWNpZmllZCBrZXkgCi0gICAgICogYXQgdGhpcyBjdXJzb3IncyBsb2NhdGlvbi4gSWYgdGhlcmUgaXMgbm8gYm9va21hcmsgd2hvc2Uga2V5IGlzIAotICAgICAqIGdpdmVuIGJ5IHRoZSBzcGVjaWZpZWQga2V5IGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLCBudWxsIGlzIHJldHVybmVkLiAKLSAgICAgKiBJZiB0aGUge0BsaW5rIFhtbEN1cnNvci5YbWxCb29rbWFyayNnZXRLZXkoKSBnZXRLZXl9IG1ldGhvZCBpcyBub3Qgb3ZlcnJpZGRlbiBvbiAKLSAgICAgKiB0aGUgYm9va21hcmssIHRoZW4gdGhlIGJvb2ttYXJrJ3MgY2xhc3MgaXMgdXNlZCBhcyB0aGUga2V5LgotICAgICAqIAotICAgICAqIEBwYXJhbSAga2V5ICBUaGUga2V5IGZvciB0aGUgYm9va21hcmsgdG8gcmV0cmlldmUuCi0gICAgICogQHJldHVybiAgVGhlIHJlcXVlc3RlZCBib29rbWFyazsgbnVsbCBpZiB0aGVyZSBpcyBubyBib29rbWFyawotICAgICAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNwZWNpZmllZCBrZXkuCi0gICAgICovCi0KLSAgICBYbWxCb29rbWFyayBnZXRCb29rbWFyayAoIE9iamVjdCBrZXkgKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBDbGVhcnMgdGhlIGJvb2ttYXJrIHdob3NlIGtleSBpcyBzcGVjaWZpZWQsIGlmIHRoZSBib29rbWFyawotICAgICAqIGV4aXN0cyBhdCB0aGlzIGN1cnNvcidzIGxvY2F0aW9uLgotICAgICAqIAotICAgICAqIEBwYXJhbSAga2V5ICBUaGUgZm9yIHRoZSBib29rbWFyayB0byBjbGVhci4KLSAgICAgKi8KLQotICAgIHZvaWQgY2xlYXJCb29rbWFyayAoIE9iamVjdCBrZXkgKTsKLQotICAgIC8qKgotICAgICAqIFJldHJpZXZlcyBhbGwgdGhlIGJvb2ttYXJrcyBhdCB0aGlzIGxvY2F0aW9uLCBhZGRpbmcgdGhlbSB0bwotICAgICAqIHRoZSBzcGVjaWZpZWQgY29sbGVjdGlvbi4gQm9va21hcmtzIGhlbGQgYnkgd2VhayByZWZlcmVuY2VzIGFyZQotICAgICAqIGFkZGVkIHRvIHRoaXMgY29sbGVjdGlvbiBhcyBXZWFrIHJlZmVyZW5jZWQgb2JqZWN0cyBwb2ludGluZyB0byB0aGUKLSAgICAgKiBib29rbWFyay4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gIGxpc3RUb0ZpbGwgIFRoZSBjb2xsZWN0aW9uIHRoYXQgd2lsbCBjb250YWluIGJvb2ttYXJrcwotICAgICAqIHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kLgotICAgICAqLwotCi0gICAgdm9pZCBnZXRBbGxCb29rbWFya1JlZnMgKCBDb2xsZWN0aW9uIGxpc3RUb0ZpbGwgKTsKLQotICAgIC8qKgotICAgICAqIFJlbW92ZXMgdGhlIFhNTCB0aGF0IGlzIGltbWVkaWF0ZWx5IGFmdGVyIHRoaXMgY3Vyc29yLgotICAgICAqIAotICAgICAqIEZvciB0aGUgVEVYVCwgQVRUUiwgTkFNRVNQQUNFLCBDT01NRU5UIGFuZCBQUk9DSU5TVCB0b2tlbnMsIGEgc2luZ2xlIAotICAgICAqIHRva2VuIGlzIHJlbW92ZWQuIEZvciBhIFNUQVJUIHRva2VuLCB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IGFuZCBhbGwgCi0gICAgICogb2YgaXRzIGNvbnRlbnRzIGFyZSByZW1vdmVkLiBGb3IgYWxsIG90aGVyIHRva2VucywgdGhpcyBpcyBhIG5vLW9wLiAKLSAgICAgKiBZb3UgY2Fubm90IHJlbW92ZSBhIFNUQVJURE9DLgotICAgICAqIAotICAgICAqIFRoZSBjdXJzb3JzIGxvY2F0ZWQgaW4gdGhlIFhNTCB0aGF0IHdhcyByZW1vdmVkIGFsbCBjb2xsYXBzZSB0byB0aGUgCi0gICAgICogc2FtZSBsb2NhdGlvbi4gQWxsIGJvb2ttYXJrcyBpbiB0aGlzIFhNTCB3aWxsIGJlIG9ycGhhbmVkLgotICAgICAqIAotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBhbnl0aGluZyB3YXMgcmVtb3ZlZDsgZmFsc2Ugb25seSBpZiB0aGUgY3Vyc29yIGlzIAotICAgICAqIGp1c3QgYmVmb3JlIEVORCBvciBFTkRET0MgdG9rZW4uCi0gICAgICogQHRocm93cyBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uICBJZiB0aGUgY3Vyc29yIGlzIGF0IGEgCi0gICAgICogU1RBUlRET0MgdG9rZW4uCi0gICAgICovCi0KLSAgICBib29sZWFuIHJlbW92ZVhtbCAoICk7Ci0KLSAgICAvKioKLSAgICAgKiBNb3ZlcyB0aGUgWE1MIGltbWVkaWF0ZWx5IGFmdGVyIHRoaXMgY3Vyc29yIHRvIHRoZSBsb2NhdGlvbgotICAgICAqIHNwZWNpZmllZCBieSB0aGUgPGVtPnRvSGVyZTwvZW0+IGN1cnNvciwgc2hpZnRpbmcgWE1MIGF0IHRoYXQgbG9jYXRpb24gCi0gICAgICogdG8gdGhlIHJpZ2h0IHRvIG1ha2Ugcm9vbS4gRm9yIHRoZSBURVhULCBBVFRSLCBOQU1FU1BBQ0UsIAotICAgICAqIENPTU1FTlQgYW5kIFBST0NJTlNUIHRva2VucywgYSBzaW5nbGUgdG9rZW4gaXMgbW92ZWQuIEZvciBhIHN0YXJ0IHRva2VuLCB0aGUKLSAgICAgKiBlbGVtZW50IGFuZCBhbGwgb2YgaXRzIGNvbnRlbnRzIGFyZSBtb3ZlZC4gRm9yIGFsbCBvdGhlciB0b2tlbnMsIHRoaXMKLSAgICAgKiBpcyBhIG5vLW9wLgotICAgICAqIAotICAgICAqIFRoZSBib29rbWFya3MgbG9jYXRlZCBpbiB0aGUgWE1MIHRoYXQgd2FzIG1vdmVkIGFsc28gbW92ZSB0byB0aGUKLSAgICAgKiBuZXcgbG9jYXRpb247IHRoZSBjdXJzb3JzIGRvbid0IG1vdmUgd2l0aCB0aGUgY29udGVudC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gIHRvSGVyZSAgVGhlIGN1cnNvciBhdCB0aGUgbG9jYXRpb24gdG8gd2hpY2ggdGhlIFhNTCBzaG91bGQKLSAgICAgKiBiZSBtb3ZlZC4KLSAgICAgKiBAcmV0dXJuIHRydWUgaWYgYW55dGhpbmcgd2FzIG1vdmVkOyBmYWxzZSBvbmx5IGlmIHRoZSBjdXJzb3IgaXMgCi0gICAgICoganVzdCBiZWZvcmUgRU5EIG9yIEVORERPQyB0b2tlbi4KLSAgICAgKiBAdGhyb3dzIGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gIElmIHRoZSBvcGVyYXRpb24gaXMgbm90IGFsbG93ZWQKLSAgICAgKiBhdCB0aGUgY3Vyc29yJ3MgbG9jYXRpb24uCi0gICAgICovCi0KLSAgICBib29sZWFuIG1vdmVYbWwgKCBYbWxDdXJzb3IgdG9IZXJlICk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ29waWVzIHRoZSBYTUwgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhpcyBjdXJzb3IgdG8gdGhlIGxvY2F0aW9uCi0gICAgICogc3BlY2lmaWVkIGJ5IHRoZSA8ZW0+dG9IZXJlPC9lbT4gY3Vyc29yLiBGb3IgdGhlIFRFWFQsIEFUVFIsIE5BTUVTUEFDRSwgCi0gICAgICogQ09NTUVOVCBhbmQgUFJPQ0lOU1QgdG9rZW5zLCBhIHNpbmdsZSB0b2tlbiBpcyBjb3BpZWQuICBGb3IgYSBzdGFydCB0b2tlbiwgCi0gICAgICogdGhlIGVsZW1lbnQgYW5kIGFsbCBvZiBpdHMgY29udGVudHMgYXJlIGNvcGllZC4gRm9yIGFsbCBvdGhlciB0b2tlbnMsIHRoaXMKLSAgICAgKiBpcyBhIG5vLW9wLgotICAgICAqIAotICAgICAqIFRoZSBjdXJzb3JzIGFuZCBib29rbWFya3MgbG9jYXRlZCBpbiB0aGUgWE1MIHRoYXQgd2FzIGNvcGllZCBhcmUgYWxzbyBjb3BpZWQgCi0gICAgICogdG8gdGhlIG5ldyBsb2NhdGlvbi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gIHRvSGVyZSAgVGhlIGN1cnNvciBhdCB0aGUgbG9jYXRpb24gdG8gd2hpY2ggdGhlIFhNTCBzaG91bGQKLSAgICAgKiBiZSBjb3BpZWQuCi0gICAgICogQHJldHVybiB0cnVlIGlmIGFueXRoaW5nIHdhcyBjb3BpZWQ7IGZhbHNlIGlmIHRoZSB0b2tlbiBzdXBwb3J0cyB0aGUgb3BlcmF0aW9uLAotICAgICAqIGJ1dCBub3RoaW5nIHdhcyBjb3BpZWQuCi0gICAgICogQHRocm93cyBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uICBJZiB0aGUgb3BlcmF0aW9uIGlzIG5vdCBhbGxvd2VkCi0gICAgICogYXQgdGhlIGN1cnNvcidzIGxvY2F0aW9uLgotICAgICAqLwotCi0gICAgYm9vbGVhbiBjb3B5WG1sICggWG1sQ3Vyc29yIHRvSGVyZSApOwotICAgIAotICAgIC8qKgotICAgICAqIFJlbW92ZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb250YWluZXIgKFNUQVJURE9DIE9SIFNUQVJUKSBpbW1lZGlhdGVseSBhZnRlcgotICAgICAqIHRoaXMgY3Vyc29yLiBGb3IgYWxsIG90aGVyIHNpdHVhdGlvbnMsIHJldHVybnMgZmFsc2UuIERvZXMKLSAgICAgKiBub3QgcmVtb3ZlIGF0dHJpYnV0ZXMgb3IgbmFtc3BhY2VzLgotICAgICAqIAotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBhbnl0aGluZyB3YXMgY29waWVkOyBvdGhlcndpc2UsIGZhbHNlLgotICAgICAqLwotCi0gICAgYm9vbGVhbiByZW1vdmVYbWxDb250ZW50cyAoICk7Ci0KLSAgICAvKioKLSAgICAgKiBNb3ZlcyB0aGUgY29udGVudHMgb2YgdGhlIGNvbnRhaW5lciAoU1RBUlRET0MgT1IgU1RBUlQpIGltbWVkaWF0ZWx5IGFmdGVyCi0gICAgICogdGhpcyBjdXJzb3IgdG8gdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBieSB0aGUgPGVtPnRvSGVyZTwvZW0+IGN1cnNvci4KLSAgICAgKiBGb3IgYWxsIG90aGVyIHNpdHVhdGlvbnMsIHJldHVybnMgZmFsc2UuIERvZXMgbm90IG1vdmUgYXR0cmlidXRlcyBvcgotICAgICAqIG5hbWVzcGFjZXMuCi0gICAgICogCi0gICAgICogQHBhcmFtICB0b0hlcmUgIFRoZSBjdXJzb3IgYXQgdGhlIGxvY2F0aW9uIHRvIHdoaWNoIHRoZSBYTUwgc2hvdWxkIGJlIG1vdmVkLgotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBhbnl0aGluZyB3YXMgbW92ZWQ7IG90aGVyd2lzZSwgZmFsc2UuCi0gICAgICovCi0gICAgYm9vbGVhbiBtb3ZlWG1sQ29udGVudHMgKCBYbWxDdXJzb3IgdG9IZXJlICk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ29waWVzIHRoZSBjb250ZW50cyBvZiB0aGUgY29udGFpbmVyIChTVEFSVERPQyBPUiBTVEFSVCkgaW1tZWRpYXRlbHkgdG8KLSAgICAgKiB0aGUgcmlnaHQgb2YgdGhlIGN1cnNvciB0byB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGJ5IHRoZSA8ZW0+dG9IZXJlPC9lbT4gY3Vyc29yLgotICAgICAqIEZvciBhbGwgb3RoZXIgc2l0dWF0aW9ucywgcmV0dXJucyBmYWxzZS4gIERvZXMgbm90IGNvcHkgYXR0cmlidXRlcyBvcgotICAgICAqIG5hbWVzcGFjZXMuCi0gICAgICogCi0gICAgICogQHBhcmFtICB0b0hlcmUgIFRoZSBjdXJzb3IgYXQgdGhlIGxvY2F0aW9uIHRvIHdoaWNoIHRoZSBYTUwgc2hvdWxkCi0gICAgICogYmUgY29waWVkLgotICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBhbnl0aGluZyB3YXMgY29waWVkOyBvdGhlcndpc2UsIGZhbHNlLgotICAgICAqLwotICAgIGJvb2xlYW4gY29weVhtbENvbnRlbnRzICggWG1sQ3Vyc29yIHRvSGVyZSApOwotICAgIAotICAgIC8qKgotICAgICAqIFJlbW92ZXMgY2hhcmFjdGVycyB1cCB0byB0aGUgc3BlY2lmaWVkIG1heGltdW0gbnVtYmVyLCBjb3VudGluZyByaWdodCBmcm9tIAotICAgICAqIHRoaXMgY3Vyc29yJ3MgbG9jYXRpb24gdG8gdGhlIGNoYXJhY3RlciBhdCA8ZW0+bWF4Q2hhcmFjdGVyQ291bnQ8L2VtPi4gVGhlIAotICAgICAqIHNwYWNlIHJlbWFpbmluZyBmcm9tIHJlbW92aW5nIHRoZSBjaGFyYWN0ZXJzIGNvbGxhcHNlcyB1cCB0byB0aGlzIGN1cnNvci4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gIG1heENoYXJhY3RlckNvdW50ICBUaGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBhZnRlciB0aGlzIGN1cnNvcidzIAotICAgICAqIGxvY2F0aW9uIHRvIHJlbW92ZS4KLSAgICAgKiBAcmV0dXJuICBUaGUgYWN0dWFsIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlbW92ZWQuCi0gICAgICogQHRocm93cyBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uICBJZiB0aGUgb3BlcmF0aW9uIGlzIG5vdCBhbGxvd2VkCi0gICAgICogYXQgdGhlIGN1cnNvcidzIGxvY2F0aW9uLgotICAgICAqLwotCi0gICAgaW50IHJlbW92ZUNoYXJzICggaW50IG1heENoYXJhY3RlckNvdW50ICk7Ci0KLSAgICAvKioKLSAgICAgKiBNb3ZlcyBjaGFyYWN0ZXJzIGltbWVkaWF0ZWx5IGFmdGVyIHRoaXMgY3Vyc29yIHRvIHRoZSBwb3NpdGlvbiBpbW1lZGlhdGVseSAKLSAgICAgKiBhZnRlciB0aGUgc3BlY2lmaWVkIGN1cnNvci4gQ2hhcmFjdGVycyBhcmUgY291bnRlZCB0byB0aGUgcmlnaHQgdXAgdG8gdGhlCi0gICAgICogc3BlY2lmaWVkIG1heGltdW0gbnVtYmVyLiBYTUwgYWZ0ZXIgdGhlIGRlc3RpbmF0aW9uIGN1cnNvciBpcyAKLSAgICAgKiBzaGlmdGVkIHRvIHRoZSByaWdodCB0byBtYWtlIHJvb20uIFRoZSBzcGFjZSByZW1haW5pbmcgZnJvbSBtb3ZpbmcgdGhlIAotICAgICAqIGNoYXJhY3RlcnMgY29sbGFwc2VzIHVwIHRvIHRoaXMgY3Vyc29yLgotICAgICAqIAotICAgICAqIEBwYXJhbSAgbWF4Q2hhcmFjdGVyQ291bnQgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFmdGVyIHRoaXMgY3Vyc29yJ3MgCi0gICAgICogbG9jYXRpb24gdG8gbW92ZS4KLSAgICAgKiBAcGFyYW0gIHRvSGVyZSAgVGhlIGN1cnNvciB0byB3aGljaCB0aGUgY2hhcmFjdGVycyBzaG91bGQgYmUgbW92ZWQuCi0gICAgICogQHJldHVybiAgVGhlIGFjdHVhbCBudW1iZXIgb2YgY2hhcmFjdGVycyBtb3ZlZC4KLSAgICAgKiBAdGhyb3dzIGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gIElmIHRoZSBvcGVyYXRpb24gaXMgbm90IGFsbG93ZWQKLSAgICAgKiBhdCB0aGUgY3Vyc29yJ3MgbG9jYXRpb24uCi0gICAgICovCi0KLSAgICBpbnQgbW92ZUNoYXJzICggaW50IG1heENoYXJhY3RlckNvdW50LCBYbWxDdXJzb3IgdG9IZXJlICk7Ci0KLSAgICAvKioKLSAgICAgKiBDb3BpZXMgY2hhcmFjdGVycyB0byB0aGUgcG9zaXRpb24gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHNwZWNpZmllZCBjdXJzb3IuCi0gICAgICogQ2hhcmFjdGVycyBhcmUgY291bnRlZCB0byB0aGUgcmlnaHQgdXAgdG8gdGhlIHNwZWNpZmllZCBtYXhpbXVtIG51bWJlci4gCi0gICAgICogWE1MIGFmdGVyIHRoZSBkZXN0aW5hdGlvbiBjdXJzb3IgaXMgc2hpZnRlZCB0byB0aGUgcmlnaHQgdG8gbWFrZSByb29tLgotICAgICAqIAotICAgICAqIEBwYXJhbSAgbWF4Q2hhcmFjdGVyQ291bnQgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFmdGVyIHRoaXMgY3Vyc29yJ3MgCi0gICAgICogbG9jYXRpb24gdG8gY29weS4KLSAgICAgKiBAcGFyYW0gIHRvSGVyZSAgVGhlIGN1cnNvciB0byB3aGljaCB0aGUgY2hhcmFjdGVycyBzaG91bGQgYmUgY29waWVkLgotICAgICAqIEByZXR1cm4gIFRoZSBhY3R1YWwgbnVtYmVyIG9mIGNoYXJhY3RlcnMgY29waWVkLgotICAgICAqIEB0aHJvd3MgamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiAgSWYgdGhlIG9wZXJhdGlvbiBpcyBub3QgYWxsb3dlZAotICAgICAqIGF0IHRoZSBjdXJzb3IncyBsb2NhdGlvbi4KLSAgICAgKi8KLQotICAgIGludCBjb3B5Q2hhcnMgKCBpbnQgbWF4Q2hhcmFjdGVyQ291bnQsIFhtbEN1cnNvciB0b0hlcmUgKTsKLQotICAgIC8qKgotICAgICAqIEluc2VydHMgdGhlIHNwZWNpZmllZCB0ZXh0IGltbWVkaWF0ZWx5IGJlZm9yZSB0aGlzIGN1cnNvcidzIGxvY2F0aW9uLgotICAgICAqIAotICAgICAqIEBwYXJhbSAgdGV4dCAgVGhlIHRleHQgdG8gaW5zZXJ0LgotICAgICAqIEB0aHJvd3MgamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiAgSWYgdGhlIGluc2VydGlvbiBpcyBub3QgYWxsb3dlZAotICAgICAqIGF0IHRoZSBjdXJzb3IncyBsb2NhdGlvbi4KLSAgICAgKi8KLQotICAgIHZvaWQgaW5zZXJ0Q2hhcnMgKCBTdHJpbmcgdGV4dCApOwotICAgIAotICAgIC8qKgotICAgICAqIEluc2VydHMgYW4gZWxlbWVudCBpbW1lZGlhdGVseSBiZWZvcmUgdGhpcyBjdXJzb3IncyBsb2NhdGlvbiwgZ2l2aW5nIAotICAgICAqIHRoZSBlbGVtZW50IHRoZSBzcGVjaWZpZWQgcXVhbGlmaWVkIG5hbWUuCi0gICAgICogCi0gICAgICogQHBhcmFtICBuYW1lICBUaGUgcXVhbGlmaWVkIG5hbWUgZm9yIHRoZSBlbGVtZW50LgotICAgICAqIEB0aHJvd3MgamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiAgSWYgdGhlIGluc2VydGlvbiBpcyBub3QgYWxsb3dlZAotICAgICAqIGF0IHRoZSBjdXJzb3IncyBsb2NhdGlvbi4KLSAgICAgKi8KLQotICAgIHZvaWQgaW5zZXJ0RWxlbWVudCAoIFFOYW1lIG5hbWUgKTsKLQotICAgIC8qKgotICAgICAqIEluc2VydHMgYW4gZWxlbWVudCBpbW1lZGlhdGVseSBiZWZvcmUgdGhpcyBjdXJzb3IncyBsb2NhdGlvbiwgZ2l2aW5nIAotICAgICAqIHRoZSBlbGVtZW50IHRoZSBzcGVjaWZpZWQgbG9jYWwgbmFtZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gIGxvY2FsTmFtZSAgVGhlIGxvY2FsIG5hbWUgZm9yIHRoZSBuZXcgZWxlbWVudC4KLSAgICAgKiBAdGhyb3dzIGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gIElmIHRoZSBpbnNlcnRpb24gaXMgbm90IGFsbG93ZWQKLSAgICAgKiBhdCB0aGUgY3Vyc29yJ3MgbG9jYXRpb24uCi0gICAgICovCi0KLSAgICB2b2lkIGluc2VydEVsZW1lbnQgKCBTdHJpbmcgbG9jYWxOYW1lICk7Ci0KLSAgICAvKioKLSAgICAgKiBJbnNlcnRzIGEgbmV3IGVsZW1lbnQgaW1tZWRpYXRlbHkgYmVmb3JlIHRoaXMgY3Vyc29yJ3MgbG9jYXRpb24sIGdpdmluZyB0aGUKLSAgICAgKiBlbGVtZW50IHRoZSBzcGVjaWZpZWQgbG9jYWwgbmFtZSBhbmQgYXNzb2NpYXRpbmcgaXQgd2l0aCBzcGVjaWZpZWQgbmFtZXNwYWNlIAotICAgICAqIAotICAgICAqIEBwYXJhbSAgbG9jYWxOYW1lICBUaGUgbG9jYWwgbmFtZSBmb3IgdGhlIG5ldyBlbGVtZW50LgotICAgICAqIEBwYXJhbSAgdXJpICBUaGUgVVJJIGZvciB0aGUgbmV3IGVsZW1lbnQncyBuYW1lc3BhY2UuCi0gICAgICogQHRocm93cyBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uICBJZiB0aGUgaW5zZXJ0aW9uIGlzIG5vdCBhbGxvd2VkCi0gICAgICogYXQgdGhlIGN1cnNvcidzIGxvY2F0aW9uLgotICAgICAqLwotCi0gICAgdm9pZCBpbnNlcnRFbGVtZW50ICggU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHVyaSApOwotICAgIAotICAgIC8qKgotICAgICAqIEluc2VydHMgYSBuZXcgZWxlbWVudCBhcm91bmQgdGhpcyBjdXJzb3IsIGdpdmluZyB0aGUgZWxlbWVudCB0aGUgc3BlY2lmaWVkIAotICAgICAqIHF1YWxpZmllZCBuYW1lLiBBZnRlciB0aGUgZWxlbWVudCBpcyBpbnNlcnRlZCwgdGhpcyBjdXJzb3IgaXMgYmV0d2VlbiBpdHMgc3RhcnQgCi0gICAgICogYW5kIGVuZC4gVGhpcyBjdXJzb3IgY2FuIHRoZW4gYmUgdXNlZCB0byBpbnNlcnQgYWRkaXRpb25hbCBYTUwgaW50byAKLSAgICAgKiB0aGUgbmV3IGVsZW1lbnQuCi0gICAgICogCi0gICAgICogQHBhcmFtICBuYW1lICBUaGUgcXVhbGlmaWVkIG5hbWUgZm9yIHRoZSBuZXcgZWxlbWVudC4KLSAgICAgKiBAdGhyb3dzIGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gIElmIHRoZSBpbnNlcnRpb24gaXMgbm90IGFsbG93ZWQKLSAgICAgKiBhdCB0aGUgY3Vyc29yJ3MgbG9jYXRpb24uCi0gICAgICovCi0KLSAgICB2b2lkIGJlZ2luRWxlbWVudCAoIFFOYW1lIG5hbWUgKTsKLQotICAgIC8qKgotICAgICAqIEluc2VydHMgYSBuZXcgZWxlbWVudCBhcm91bmQgdGhpcyBjdXJzb3IsIGdpdmluZyB0aGUgZWxlbWVudCB0aGUgc3BlY2lmaWVkIAotICAgICAqIGxvY2FsIG5hbWUuIEFmdGVyIHRoZSBlbGVtZW50IGlzIGluc2VydGVkLCB0aGlzIGN1cnNvciBpcyBiZXR3ZWVuIGl0cyBzdGFydCAKLSAgICAgKiBhbmQgZW5kLiBUaGlzIGN1cnNvciBjYW4gdGhlbiBiZSB1c2VkIHRvIGluc2VydCBhZGRpdGlvbmFsIFhNTCBpbnRvIAotICAgICAqIHRoZSBuZXcgZWxlbWVudC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gIGxvY2FsTmFtZSAgVGhlIGxvY2FsIG5hbWUgZm9yIHRoZSBuZXcgZWxlbWVudC4KLSAgICAgKiBAdGhyb3dzIGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gIElmIHRoZSBpbnNlcnRpb24gaXMgbm90IGFsbG93ZWQKLSAgICAgKiBhdCB0aGUgY3Vyc29yJ3MgbG9jYXRpb24uCi0gICAgICovCi0KLSAgICB2b2lkIGJlZ2luRWxlbWVudCAoIFN0cmluZyBsb2NhbE5hbWUgKTsKLQotICAgIC8qKgotICAgICAqIEluc2VydHMgYSBuZXcgZWxlbWVudCBhcm91bmQgdGhpcyBjdXJzb3IsIGdpdmluZyB0aGUgZWxlbWVudCB0aGUgc3BlY2lmaWVkIAotICAgICAqIGxvY2FsIG5hbWUgYW5kIGFzc29jaWF0aW5nIGl0IHdpdGggdGhlIHNwZWNpZmllZCBuYW1lc3BhY2UuIEFmdGVyIHRoZSBlbGVtZW50IAotICAgICAqIGlzIGluc2VydGVkLCB0aGlzIGN1cnNvciBpcyBiZXR3ZWVuIGl0cyBzdGFydCBhbmQgZW5kLiBUaGlzIGN1cnNvciAKLSAgICAgKiBjYW4gdGhlbiBiZSB1c2VkIHRvIGluc2VydCBhZGRpdGlvbmFsIFhNTCBpbnRvIHRoZSBuZXcgZWxlbWVudC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gIGxvY2FsTmFtZSAgVGhlIGxvY2FsIG5hbWUgZm9yIHRoZSBuZXcgZWxlbWVudC4KLSAgICAgKiBAcGFyYW0gIHVyaSAgVGhlIFVSSSBmb3IgdGhlIG5ldyBlbGVtZW50J3MgbmFtZXNwYWNlLgotICAgICAqIEB0aHJvd3MgamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiAgSWYgdGhlIGluc2VydGlvbiBpcyBub3QgYWxsb3dlZAotICAgICAqIGF0IHRoZSBjdXJzb3IncyBsb2NhdGlvbi4KLSAgICAgKi8KLQotICAgIHZvaWQgYmVnaW5FbGVtZW50ICggU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHVyaSApOwotICAgIAotICAgIC8qKgotICAgICAqIEluc2VydHMgYSBuZXcgZWxlbWVudCBpbW1lZGlhdGVseSBiZWZvcmUgdGhpcyBjdXJzb3IncyBsb2NhdGlvbiwgZ2l2aW5nIHRoZQotICAgICAqIGVsZW1lbnQgdGhlIHNwZWNpZmllZCBxdWFsaWZpZWQgbmFtZSBhbmQgY29udGVudC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gIG5hbWUgIFRoZSBxdWFsaWZpZWQgbmFtZSBmb3IgdGhlIG5ldyBlbGVtZW50LgotICAgICAqIEBwYXJhbSAgdGV4dCAgVGhlIGNvbnRlbnQgZm9yIHRoZSBuZXcgZWxlbWVudC4KLSAgICAgKiBAdGhyb3dzIGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gIElmIHRoZSBpbnNlcnRpb24gaXMgbm90IGFsbG93ZWQKLSAgICAgKiBhdCB0aGUgY3Vyc29yJ3MgbG9jYXRpb24uCi0gICAgICovCi0KLSAgICB2b2lkIGluc2VydEVsZW1lbnRXaXRoVGV4dCAoIFFOYW1lIG5hbWUsIFN0cmluZyB0ZXh0ICk7Ci0KLSAgICAvKioKLSAgICAgKiBJbnNlcnRzIGEgbmV3IGVsZW1lbnQgaW1tZWRpYXRlbHkgYmVmb3JlIHRoaXMgY3Vyc29yJ3MgbG9jYXRpb24sIGdpdmluZyB0aGUKLSAgICAgKiBlbGVtZW50IHRoZSBzcGVjaWZpZWQgbG9jYWwgbmFtZSBhbmQgY29udGVudC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gIGxvY2FsTmFtZSAgVGhlIGxvY2FsIG5hbWUgZm9yIHRoZSBuZXcgZWxlbWVudC4KLSAgICAgKiBAcGFyYW0gIHRleHQgIFRoZSBjb250ZW50IGZvciB0aGUgbmV3IGVsZW1lbnQuCi0gICAgICogQHRocm93cyBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uICBJZiB0aGUgaW5zZXJ0aW9uIGlzIG5vdCBhbGxvd2VkCi0gICAgICogYXQgdGhlIGN1cnNvcidzIGxvY2F0aW9uLgotICAgICAqLwotCi0gICAgdm9pZCBpbnNlcnRFbGVtZW50V2l0aFRleHQgKCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgdGV4dCApOwotCi0gICAgLyoqCi0gICAgICogSW5zZXJ0cyBhIG5ldyBlbGVtZW50IGltbWVkaWF0ZWx5IGJlZm9yZSB0aGlzIGN1cnNvcidzIGxvY2F0aW9uLCBnaXZpbmcgdGhlCi0gICAgICogZWxlbWVudCB0aGUgc3BlY2lmaWVkIGxvY2FsIG5hbWUsIGFzc29jaWF0aW5nIGl0IHdpdGggdGhlIHNwZWNpZmllZCBuYW1lc3BhY2UsIAotICAgICAqIGFuZCBnaXZpbmcgaXQgdGhlIHNwZWNpZmllZCBjb250ZW50LgotICAgICAqIAotICAgICAqIEBwYXJhbSAgbG9jYWxOYW1lICBUaGUgbG9jYWwgbmFtZSBmb3IgdGhlIG5ldyBlbGVtZW50LgotICAgICAqIEBwYXJhbSAgdXJpICBUaGUgVVJJIGZvciB0aGUgbmV3IGVsZW1lbnQncyBuYW1lc3BhY2UuCi0gICAgICogQHBhcmFtICB0ZXh0ICBUaGUgY29udGVudCBmb3IgdGhlIG5ldyBlbGVtZW50LgotICAgICAqIEB0aHJvd3MgamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiAgSWYgdGhlIGluc2VydGlvbiBpcyBub3QgYWxsb3dlZAotICAgICAqIGF0IHRoZSBjdXJzb3IncyBsb2NhdGlvbi4KLSAgICAgKi8KLQotICAgIHZvaWQgaW5zZXJ0RWxlbWVudFdpdGhUZXh0ICggU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHVyaSwgU3RyaW5nIHRleHQgKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBJbnNlcnRzIGEgbmV3IGF0dHJpYnV0ZSBpbW1lZGlhdGVseSBiZWZvcmUgdGhpcyBjdXJzb3IncyBsb2NhdGlvbiwgZ2l2aW5nIGl0Ci0gICAgICogdGhlIHNwZWNpZmllZCBsb2NhbCBuYW1lLgotICAgICAqIAotICAgICAqIEBwYXJhbSAgbG9jYWxOYW1lICBUaGUgbG9jYWwgbmFtZSBmb3IgdGhlIG5ldyBhdHRyaWJ1dGUuCi0gICAgICogQHRocm93cyBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uICBJZiB0aGUgaW5zZXJ0aW9uIGlzIG5vdCBhbGxvd2VkCi0gICAgICogYXQgdGhlIGN1cnNvcidzIGxvY2F0aW9uLgotICAgICAqLwotCi0gICAgdm9pZCBpbnNlcnRBdHRyaWJ1dGUgKCBTdHJpbmcgbG9jYWxOYW1lICk7Ci0KLSAgICAvKioKLSAgICAgKiBJbnNlcnRzIGEgbmV3IGF0dHJpYnV0ZSBpbW1lZGlhdGVseSBiZWZvcmUgdGhpcyBjdXJzb3IncyBsb2NhdGlvbiwgZ2l2aW5nIGl0Ci0gICAgICogdGhlIHNwZWNpZmllZCBsb2NhbCBuYW1lIGFuZCBhc3NvY2lhdGluZyBpdCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlLgotICAgICAqIAotICAgICAqIEBwYXJhbSAgbG9jYWxOYW1lICBUaGUgbG9jYWwgbmFtZSBmb3IgdGhlIG5ldyBhdHRyaWJ1dGUuCi0gICAgICogQHBhcmFtICB1cmkgIFRoZSBVUkkgZm9yIHRoZSBuZXcgYXR0cmlidXRlJ3MgbmFtZXNwYWNlLgotICAgICAqIEB0aHJvd3MgamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiAgSWYgdGhlIGluc2VydGlvbiBpcyBub3QgYWxsb3dlZAotICAgICAqIGF0IHRoZSBjdXJzb3IncyBsb2NhdGlvbi4KLSAgICAgKi8KLQotICAgIHZvaWQgaW5zZXJ0QXR0cmlidXRlICggU3RyaW5nIGxvY2FsTmFtZSwgU3RyaW5nIHVyaSApOwotCi0gICAgLyoqCi0gICAgICogSW5zZXJ0cyBhIG5ldyBhdHRyaWJ1dGUgaW1tZWRpYXRlbHkgYmVmb3JlIHRoaXMgY3Vyc29yJ3MgbG9jYXRpb24sIGdpdmluZyBpdAotICAgICAqIHRoZSBzcGVjaWZpZWQgbmFtZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gIG5hbWUgIFRoZSBsb2NhbCBuYW1lIGZvciB0aGUgbmV3IGF0dHJpYnV0ZS4KLSAgICAgKiBAdGhyb3dzIGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gIElmIHRoZSBpbnNlcnRpb24gaXMgbm90IGFsbG93ZWQKLSAgICAgKiBhdCB0aGUgY3Vyc29yJ3MgbG9jYXRpb24uCi0gICAgICovCi0KLSAgICB2b2lkIGluc2VydEF0dHJpYnV0ZSAoIFFOYW1lIG5hbWUgKTsKLQotICAgIC8qKgotICAgICAqIEluc2VydHMgYSBuZXcgYXR0cmlidXRlIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGlzIGN1cnNvcidzIGxvY2F0aW9uLCBnaXZpbmcgaXQKLSAgICAgKiB0aGUgc3BlY2lmaWVkIHZhbHVlIGFuZCBuYW1lLgotICAgICAqIAotICAgICAqIEBwYXJhbSAgTmFtZSAgVGhlIGxvY2FsIG5hbWUgZm9yIHRoZSBuZXcgYXR0cmlidXRlLgotICAgICAqIEBwYXJhbSAgdmFsdWUgIFRoZSB2YWx1ZSBmb3IgdGhlIG5ldyBhdHRyaWJ1dGUuCi0gICAgICogQHRocm93cyBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uICBJZiB0aGUgaW5zZXJ0aW9uIGlzIG5vdCBhbGxvd2VkCi0gICAgICogYXQgdGhlIGN1cnNvcidzIGxvY2F0aW9uLgotICAgICAqLwotCi0gICAgdm9pZCBpbnNlcnRBdHRyaWJ1dGVXaXRoVmFsdWUgKCBTdHJpbmcgTmFtZSwgU3RyaW5nIHZhbHVlICk7Ci0KLSAgICAvKioKLSAgICAgKiBJbnNlcnRzIGFuIGF0dHJpYnV0ZSBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGN1cnNvcidzIGxvY2F0aW9uLCBnaXZpbmcgaXQKLSAgICAgKiB0aGUgc3BlY2lmaWVkIG5hbWUgYW5kIHZhbHVlLCBhbmQgYXNzb2NpYXRpbmcgaXQgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWVzcGFjZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gIG5hbWUgIFRoZSBuYW1lIGZvciB0aGUgbmV3IGF0dHJpYnV0ZS4KLSAgICAgKiBAcGFyYW0gIHVyaSAgVGhlIFVSSSBmb3IgdGhlIG5ldyBhdHRyaWJ1dGUncyBuYW1lc3BhY2UuCi0gICAgICogQHBhcmFtICB2YWx1ZSAgVGhlIHZhbHVlIGZvciB0aGUgbmV3IGF0dHJpYnV0ZS4KLSAgICAgKiBAdGhyb3dzIGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gIElmIHRoZSBpbnNlcnRpb24gaXMgbm90IGFsbG93ZWQKLSAgICAgKiBhdCB0aGUgY3Vyc29yJ3MgbG9jYXRpb24uCi0gICAgICovCi0KLSAgICB2b2lkIGluc2VydEF0dHJpYnV0ZVdpdGhWYWx1ZSAoIFN0cmluZyBuYW1lLCBTdHJpbmcgdXJpLCBTdHJpbmcgdmFsdWUgKTsKLQotICAgIC8qKgotICAgICAqIEluc2VydHMgYW4gYXR0cmlidXRlIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgY3Vyc29yJ3MgbG9jYXRpb24sIGdpdmluZyBpdAotICAgICAqIHRoZSBzcGVjaWZpZWQgbmFtZSBhbmQgdmFsdWUuCi0gICAgICogCi0gICAgICogQHBhcmFtICBuYW1lICBUaGUgbmFtZSBmb3IgdGhlIG5ldyBhdHRyaWJ1dGUuCi0gICAgICogQHBhcmFtICB2YWx1ZSAgVGhlIHZhbHVlIGZvciB0aGUgbmV3IGF0dHJpYnV0ZS4KLSAgICAgKiBAdGhyb3dzIGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gIElmIHRoZSBpbnNlcnRpb24gaXMgbm90IGFsbG93ZWQKLSAgICAgKiBhdCB0aGUgY3Vyc29yJ3MgbG9jYXRpb24uCi0gICAgICovCi0KLSAgICB2b2lkIGluc2VydEF0dHJpYnV0ZVdpdGhWYWx1ZSAoIFFOYW1lIG5hbWUsIFN0cmluZyB2YWx1ZSApOwotICAgIAotICAgIC8qKgotICAgICAqIEluc2VydHMgYSBuYW1lc3BhY2UgZGVjbGFyYXRpb24gaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBjdXJzb3IncyBsb2NhdGlvbiwgCi0gICAgICogZ2l2aW5nIGl0IHRoZSBzcGVjaWZpZWQgcHJlZml4IGFuZCBVUkkuCi0gICAgICogCi0gICAgICogQHBhcmFtICBwcmVmaXggIFRoZSBwcmVmaXggZm9yIHRoZSBuYW1lc3BhY2UuCi0gICAgICogQHBhcmFtICBuYW1lc3BhY2UgIFRoZSBVUkkgZm9yIHRoZSBuYW1lc3BhY2UuCi0gICAgICogQHRocm93cyBqYXZhLmxhbmcuSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uICBJZiB0aGUgaW5zZXJ0aW9uIGlzIG5vdCBhbGxvd2VkCi0gICAgICogYXQgdGhlIGN1cnNvcidzIGxvY2F0aW9uLgotICAgICAqLwotCi0gICAgdm9pZCBpbnNlcnROYW1lc3BhY2UgKCBTdHJpbmcgcHJlZml4LCBTdHJpbmcgbmFtZXNwYWNlICk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogSW5zZXJ0cyBhbiBYTUwgY29tbWVudCBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGN1cnNvcidzIGxvY2F0aW9uLCAKLSAgICAgKiBnaXZpbmcgaXQgdGhlIHNwZWNpZmllZCBjb250ZW50LgotICAgICAqIAotICAgICAqIEBwYXJhbSAgdGV4dCAgVGhlIG5ldyBjb21tZW50J3MgY29udGVudC4KLSAgICAgKiBAdGhyb3dzIGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gIElmIHRoZSBpbnNlcnRpb24gaXMgbm90IGFsbG93ZWQKLSAgICAgKiBhdCB0aGUgY3Vyc29yJ3MgbG9jYXRpb24uCi0gICAgICovCi0KLSAgICB2b2lkIGluc2VydENvbW1lbnQgKCBTdHJpbmcgdGV4dCApOwotCi0gICAgLyoqCi0gICAgICogSW5zZXJ0cyBhbiBYTUwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGN1cnNvcidzIGxvY2F0aW9uLCAKLSAgICAgKiBnaXZpbmcgaXQgdGhlIHNwZWNpZmllZCB0YXJnZXQgYW5kIHRleHQuCi0gICAgICogCi0gICAgICogQHBhcmFtICB0YXJnZXQgIFRoZSB0YXJnZXQgZm9yIHRoZSBwcm9jZXNzaW5nIGluc3RydWN0aW9uLgotICAgICAqIEBwYXJhbSAgdGV4dCAgVGhlIG5ldyBwcm9jZXNzaW5nIGluc3RydWN0aW9uJ3MgdGV4dC4KLSAgICAgKiBAdGhyb3dzIGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gIElmIHRoZSBpbnNlcnRpb24gaXMgbm90IGFsbG93ZWQKLSAgICAgKiBhdCB0aGUgY3Vyc29yJ3MgbG9jYXRpb24uCi0gICAgICovCi0KLSAgICB2b2lkIGluc2VydFByb2NJbnN0ICggU3RyaW5nIHRhcmdldCwgU3RyaW5nIHRleHQgKTsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWE4NWZiLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTggKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKLQotCi0vKioKLSAqIENvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gKiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2RhdGUiPnhzOmRhdGU8L2E+IHR5cGUuCi0gKiA8cD4KLSAqIENvbnZlcnRpYmxlIHRvIHtAbGluayBDYWxlbmRhcn0sIHtAbGluayBEYXRlfSwgYW5kIHtAbGluayBHRGF0ZX0uCi0gKiAKLSAqIEBzZWUgWG1sQ2FsZW5kYXIKLSAqIEBzZWUgR0RhdGUKLSAqLyAKLXB1YmxpYyBpbnRlcmZhY2UgWG1sRGF0ZSBleHRlbmRzIFhtbEFueVNpbXBsZVR5cGUKLXsKLSAgICAvKiogVGhlIGNvbnN0YW50IHtAbGluayBTY2hlbWFUeXBlfSBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlIHR5cGUgPSBYbWxCZWFucy5nZXRCdWlsdGluVHlwZVN5c3RlbSgpLnR5cGVGb3JIYW5kbGUoIl9CSV9kYXRlIik7Ci0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBDYWxlbmRhcn0KLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjZ2V0Q2FsZW5kYXJWYWx1ZX0KLSAgICAgKiovCi0gICAgQ2FsZW5kYXIgY2FsZW5kYXJWYWx1ZSgpOwotICAgIC8qKgotICAgICAqIFNldHMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBDYWxlbmRhcn0KLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjc2V0Q2FsZW5kYXJWYWx1ZX0KLSAgICAgKiovCi0gICAgdm9pZCBzZXQoQ2FsZW5kYXIgYyk7Ci0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIEdEYXRlfQotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNnZXRHRGF0ZVZhbHVlfQotICAgICAqKi8KLSAgICBHRGF0ZSBnRGF0ZVZhbHVlKCk7Ci0gICAgLyoqCi0gICAgICogU2V0cyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIEdEYXRlU3BlY2lmaWNhdGlvbn0KLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjc2V0R0RhdGVWYWx1ZX0KLSAgICAgKiovCi0gICAgdm9pZCBzZXQoR0RhdGVTcGVjaWZpY2F0aW9uIGdkKTsKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSB7QGxpbmsgRGF0ZX0KLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjZ2V0RGF0ZVZhbHVlfQotICAgICAqKi8KLSAgICBEYXRlIGRhdGVWYWx1ZSgpOwotICAgIC8qKgotICAgICAqIFNldHMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBEYXRlfQotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNzZXREYXRlVmFsdWV9Ci0gICAgICoqLwotICAgIHZvaWQgc2V0KERhdGUgZCk7Ci0KLSAgICAvKiogUmV0dXJucyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIENhbGVuZGFyfSAqLwotICAgIENhbGVuZGFyIGdldENhbGVuZGFyVmFsdWUoKTsKLSAgICAvKiogU2V0cyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIENhbGVuZGFyfSAqLwotICAgIHZvaWQgc2V0Q2FsZW5kYXJWYWx1ZShDYWxlbmRhciBjKTsKLSAgICAvKiogUmV0dXJucyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIEdEYXRlfSAqLwotICAgIEdEYXRlIGdldEdEYXRlVmFsdWUoKTsKLSAgICAvKiogU2V0cyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIEdEYXRlU3BlY2lmaWNhdGlvbn0gKi8KLSAgICB2b2lkIHNldEdEYXRlVmFsdWUoR0RhdGUgZ2QpOwotICAgIC8qKiBSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSB7QGxpbmsgRGF0ZX0gKi8KLSAgICBEYXRlIGdldERhdGVWYWx1ZSgpOwotICAgIC8qKiBTZXRzIHRoaXMgdmFsdWUgYXMgYSB7QGxpbmsgRGF0ZX0gKi8KLSAgICB2b2lkIHNldERhdGVWYWx1ZShEYXRlIGQpOwotCi0gICAgLyoqCi0gICAgICogQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotICAgICAqIG9mIHtAbGluayBYbWxEYXRlfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEZhY3RvcnkKLSAgICB7Ci0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxEYXRlfSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERhdGUgbmV3SW5zdGFuY2UoKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEYXRlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxEYXRlfSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERhdGUgbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbERhdGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gaW1tdXRhYmxlIHtAbGluayBYbWxEYXRlfSB2YWx1ZSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERhdGUgbmV3VmFsdWUoT2JqZWN0IG9iaikgewotICAgICAgICAgIHJldHVybiAoWG1sRGF0ZSkgdHlwZS5uZXdWYWx1ZSggb2JqICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRGF0ZX0gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzIwMDMtMDYtMTQmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEYXRlIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbERhdGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxEYXRlfSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7MjAwMy0wNi0xNCZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERhdGUgcGFyc2UoamF2YS5sYW5nLlN0cmluZyBzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbERhdGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxEYXRlfSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEYXRlIHBhcnNlKGphdmEuaW8uRmlsZSBmKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRGF0ZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbERhdGV9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERhdGUgcGFyc2UoamF2YS5pby5GaWxlIGYsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRGF0ZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbERhdGV9IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRGF0ZSBwYXJzZShqYXZhLm5ldC5VUkwgdSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbERhdGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG51bGwgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRGF0ZX0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEYXRlIHBhcnNlKGphdmEubmV0LlVSTCB1LCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbERhdGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG9wdGlvbnMgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRGF0ZX0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEYXRlIHBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0gaXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEYXRlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbERhdGV9IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRGF0ZSBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbERhdGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRGF0ZX0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEYXRlIHBhcnNlKGphdmEuaW8uUmVhZGVyIHIpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEYXRlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRGF0ZX0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEYXRlIHBhcnNlKGphdmEuaW8uUmVhZGVyIHIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRGF0ZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbERhdGV9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEYXRlIHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbERhdGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxEYXRlfSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRGF0ZSBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRGF0ZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbERhdGV9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRGF0ZSBwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEYXRlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxEYXRlfSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERhdGUgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbERhdGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbERhdGV9IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERhdGUgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRGF0ZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRGF0ZX0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRGF0ZSBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb257Ci0gICAgICAgICAgcmV0dXJuIChYbWxEYXRlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIEZhY3RvcnkoKSB7IH0gLy8gTm8gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBhbGxvd2VkCi0gICAgfQotfQotCmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjNlMjU4Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE3ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci0KLQotLyoqCi0gKiBDb3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotICogPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkYXRlVGltZSI+eHM6ZGF0ZVRpbWU8L2E+IHR5cGUuCi0gKiA8cD4KLSAqIENvbnZlcnRpYmxlIHRvIHtAbGluayBDYWxlbmRhcn0sIHtAbGluayBEYXRlfSwgYW5kIHtAbGluayBHRGF0ZX0uCi0gKiAKLSAqIEBzZWUgWG1sQ2FsZW5kYXIKLSAqIEBzZWUgR0RhdGUKLSAqLyAKLXB1YmxpYyBpbnRlcmZhY2UgWG1sRGF0ZVRpbWUgZXh0ZW5kcyBYbWxBbnlTaW1wbGVUeXBlCi17Ci0gICAgLyoqIFRoZSBjb25zdGFudCB7QGxpbmsgU2NoZW1hVHlwZX0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZSB0eXBlID0gWG1sQmVhbnMuZ2V0QnVpbHRpblR5cGVTeXN0ZW0oKS50eXBlRm9ySGFuZGxlKCJfQklfZGF0ZVRpbWUiKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSB7QGxpbmsgQ2FsZW5kYXJ9Ci0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI2dldENhbGVuZGFyVmFsdWV9Ci0gICAgICoqLwotICAgIENhbGVuZGFyIGNhbGVuZGFyVmFsdWUoKTsKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoaXMgdmFsdWUgYXMgYSB7QGxpbmsgQ2FsZW5kYXJ9Ci0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI3NldENhbGVuZGFyVmFsdWV9Ci0gICAgICoqLwotICAgIHZvaWQgc2V0KENhbGVuZGFyIGMpOwotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBHRGF0ZX0KLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjZ2V0R0RhdGVWYWx1ZX0KLSAgICAgKiovCi0gICAgR0RhdGUgZ0RhdGVWYWx1ZSgpOwotICAgIC8qKgotICAgICAqIFNldHMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBHRGF0ZVNwZWNpZmljYXRpb259Ci0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI3NldEdEYXRlVmFsdWV9Ci0gICAgICoqLwotICAgIHZvaWQgc2V0KEdEYXRlU3BlY2lmaWNhdGlvbiBnZCk7Ci0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIERhdGV9Ci0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI2dldERhdGVWYWx1ZX0KLSAgICAgKiovCi0gICAgRGF0ZSBkYXRlVmFsdWUoKTsKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoaXMgdmFsdWUgYXMgYSB7QGxpbmsgRGF0ZX0KLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjc2V0RGF0ZVZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIHNldChEYXRlIGQpOwotCi0gICAgLyoqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBDYWxlbmRhcn0gKi8KLSAgICBDYWxlbmRhciBnZXRDYWxlbmRhclZhbHVlKCk7Ci0gICAgLyoqIFNldHMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBDYWxlbmRhcn0gKi8KLSAgICB2b2lkIHNldENhbGVuZGFyVmFsdWUoQ2FsZW5kYXIgYyk7Ci0gICAgLyoqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBHRGF0ZX0gKi8KLSAgICBHRGF0ZSBnZXRHRGF0ZVZhbHVlKCk7Ci0gICAgLyoqIFNldHMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBHRGF0ZVNwZWNpZmljYXRpb259ICovCi0gICAgdm9pZCBzZXRHRGF0ZVZhbHVlKEdEYXRlIGdkKTsKLSAgICAvKiogUmV0dXJucyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIERhdGV9ICovCi0gICAgRGF0ZSBnZXREYXRlVmFsdWUoKTsKLSAgICAvKiogU2V0cyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIERhdGV9ICovCi0gICAgdm9pZCBzZXREYXRlVmFsdWUoRGF0ZSBkKTsKLQotICAgIC8qKgotICAgICAqIEEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSAgICAgKiBvZiB7QGxpbmsgWG1sRGF0ZVRpbWV9LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgRmFjdG9yeQotICAgIHsKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbERhdGVUaW1lfSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERhdGVUaW1lIG5ld0luc3RhbmNlKCkgewotICAgICAgICAgIHJldHVybiAoWG1sRGF0ZVRpbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbERhdGVUaW1lfSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERhdGVUaW1lIG5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEYXRlVGltZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBpbW11dGFibGUge0BsaW5rIFhtbERhdGVUaW1lfSB2YWx1ZSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERhdGVUaW1lIG5ld1ZhbHVlKE9iamVjdCBvYmopIHsKLSAgICAgICAgICByZXR1cm4gKFhtbERhdGVUaW1lKSB0eXBlLm5ld1ZhbHVlKCBvYmogKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxEYXRlVGltZX0gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzIwMDMtMDYtMTRUMTI6MDA6MDAmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEYXRlVGltZSBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEYXRlVGltZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbERhdGVUaW1lfSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7MjAwMy0wNi0xNFQxMjowMDowMCZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERhdGVUaW1lIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEYXRlVGltZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbERhdGVUaW1lfSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEYXRlVGltZSBwYXJzZShqYXZhLmlvLkZpbGUgZikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbERhdGVUaW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRGF0ZVRpbWV9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERhdGVUaW1lIHBhcnNlKGphdmEuaW8uRmlsZSBmLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbERhdGVUaW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRGF0ZVRpbWV9IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRGF0ZVRpbWUgcGFyc2UoamF2YS5uZXQuVVJMIHUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEYXRlVGltZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgbnVsbCApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxEYXRlVGltZX0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEYXRlVGltZSBwYXJzZShqYXZhLm5ldC5VUkwgdSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEYXRlVGltZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxEYXRlVGltZX0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEYXRlVGltZSBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRGF0ZVRpbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRGF0ZVRpbWV9IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRGF0ZVRpbWUgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEYXRlVGltZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxEYXRlVGltZX0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEYXRlVGltZSBwYXJzZShqYXZhLmlvLlJlYWRlciByKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRGF0ZVRpbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxEYXRlVGltZX0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEYXRlVGltZSBwYXJzZShqYXZhLmlvLlJlYWRlciByLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbERhdGVUaW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRGF0ZVRpbWV9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEYXRlVGltZSBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEYXRlVGltZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbERhdGVUaW1lfSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRGF0ZVRpbWUgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbERhdGVUaW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRGF0ZVRpbWV9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRGF0ZVRpbWUgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRGF0ZVRpbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbERhdGVUaW1lfSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERhdGVUaW1lIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEYXRlVGltZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRGF0ZVRpbWV9IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERhdGVUaW1lIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbERhdGVUaW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxEYXRlVGltZX0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRGF0ZVRpbWUgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uewotICAgICAgICAgIHJldHVybiAoWG1sRGF0ZVRpbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgRmFjdG9yeSgpIHsgfSAvLyBObyBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGFsbG93ZWQKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOThkMTFlLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODQgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7Ci0KLQotaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwotCi0vKioKLSAqIENvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gKiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2RlY2ltYWwiPnhzOmRlY2ltYWw8L2E+IHR5cGUuCi0gKiA8cD4KLSAqIENvbnZlcnRpYmxlIHRvIHtAbGluayBCaWdEZWNpbWFsfS4KLSAqLyAKLXB1YmxpYyBpbnRlcmZhY2UgWG1sRGVjaW1hbCBleHRlbmRzIFhtbEFueVNpbXBsZVR5cGUKLXsKLSAgICAvKiogVGhlIGNvbnN0YW50IHtAbGluayBTY2hlbWFUeXBlfSBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlIHR5cGUgPSBYbWxCZWFucy5nZXRCdWlsdGluVHlwZVN5c3RlbSgpLnR5cGVGb3JIYW5kbGUoIl9CSV9kZWNpbWFsIik7Ci0gICAgCi0gICAgLyoqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBCaWdEZWNpbWFsfSAqLwotICAgIEJpZ0RlY2ltYWwgZ2V0QmlnRGVjaW1hbFZhbHVlKCk7Ci0gICAgLyoqIFNldHMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBCaWdEZWNpbWFsfSAqLwotICAgIHZvaWQgc2V0QmlnRGVjaW1hbFZhbHVlKEJpZ0RlY2ltYWwgYmQpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIEJpZ0RlY2ltYWx9Ci0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI2dldEJpZ0RlY2ltYWxWYWx1ZX0KLSAgICAgKiovCi0gICAgQmlnRGVjaW1hbCBiaWdEZWNpbWFsVmFsdWUoKTsKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoaXMgdmFsdWUgYXMgYSB7QGxpbmsgQmlnRGVjaW1hbH0KLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjc2V0QmlnRGVjaW1hbFZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIHNldChCaWdEZWNpbWFsIGJkKTsKLQotICAgIC8qKgotICAgICAqIEEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSAgICAgKiBvZiB7QGxpbmsgWG1sRGVjaW1hbH0uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBGYWN0b3J5Ci0gICAgewotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sRGVjaW1hbH0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEZWNpbWFsIG5ld0luc3RhbmNlKCkgewotICAgICAgICAgIHJldHVybiAoWG1sRGVjaW1hbCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sRGVjaW1hbH0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEZWNpbWFsIG5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEZWNpbWFsKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGltbXV0YWJsZSB7QGxpbmsgWG1sRGVjaW1hbH0gdmFsdWUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEZWNpbWFsIG5ld1ZhbHVlKE9iamVjdCBvYmopIHsKLSAgICAgICAgICByZXR1cm4gKFhtbERlY2ltYWwpIHR5cGUubmV3VmFsdWUoIG9iaiApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbERlY2ltYWx9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsxMjM0LjU2Nzg5Jmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRGVjaW1hbCBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEZWNpbWFsKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRGVjaW1hbH0gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzEyMzQuNTY3ODkmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEZWNpbWFsIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEZWNpbWFsKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRGVjaW1hbH0gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRGVjaW1hbCBwYXJzZShqYXZhLmlvLkZpbGUgZikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbERlY2ltYWwpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxEZWNpbWFsfSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEZWNpbWFsIHBhcnNlKGphdmEuaW8uRmlsZSBmLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbERlY2ltYWwpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxEZWNpbWFsfSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERlY2ltYWwgcGFyc2UoamF2YS5uZXQuVVJMIHUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEZWNpbWFsKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBudWxsICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbERlY2ltYWx9IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRGVjaW1hbCBwYXJzZShqYXZhLm5ldC5VUkwgdSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEZWNpbWFsKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBvcHRpb25zICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbERlY2ltYWx9IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRGVjaW1hbCBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRGVjaW1hbCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxEZWNpbWFsfSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERlY2ltYWwgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEZWNpbWFsKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbERlY2ltYWx9IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRGVjaW1hbCBwYXJzZShqYXZhLmlvLlJlYWRlciByKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRGVjaW1hbCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbERlY2ltYWx9IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRGVjaW1hbCBwYXJzZShqYXZhLmlvLlJlYWRlciByLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbERlY2ltYWwpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxEZWNpbWFsfSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRGVjaW1hbCBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEZWNpbWFsKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRGVjaW1hbH0gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERlY2ltYWwgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbERlY2ltYWwpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxEZWNpbWFsfSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERlY2ltYWwgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRGVjaW1hbCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRGVjaW1hbH0gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEZWNpbWFsIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEZWNpbWFsKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxEZWNpbWFsfSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEZWNpbWFsIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbERlY2ltYWwpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbERlY2ltYWx9IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERlY2ltYWwgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uewotICAgICAgICAgIHJldHVybiAoWG1sRGVjaW1hbCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBGYWN0b3J5KCkgeyB9IC8vIE5vIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgYWxsb3dlZAotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTQ5NWZmLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyNiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGF0dGFjaCBhcmJpdHJhcnkgaW5mb3JtYXRpb24gdG8gYW4gWE1MCi0gKiBkb2N1bWVudC4gIEl0IGFsc28gZGVmaW5lcyBzZXZlcmFsIHdlbGwta25vd24gdHlwZXMgb2YKLSAqIGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlIGF0dGFjaGVkIG9yIGZvdW5kIG9uIGEgZG9jdW1lbnQuCi0gKiA8cD4KLSAqIEZvciBleGFtcGxlLCBzdXBwb3NlIHlvdSB3YW50ZWQgdG8gYXNzb2NpYXRlIGEgZmlsZW5hbWUKLSAqIHdpdGggdGhlIGRvY3VtZW50IGNvbnRhaW5pbmcgYW4geG1sIG9iamVjdCAieG9iaiIuICBUaGlzCi0gKiBjb3VsZCBiZSBkb25lIHZpYSB0aGUgZm9sbG93aW5nIGNvZGU6Ci0gKiA8cD4KLSAqIHRva2VuU291cmNlLmRvY3VtZW50UHJvcGVydGllcygpLnNldChYbWxEb2N1bWVudFByb3BlcnRpZXMuTkFNRSwgIk15RmlsZW5hbWUueG1sIik7Ci0gKiA8cD4KLSAqIFRvIGZldGNoIHRoZSBmaWxlbmFtZSBsYXRlciwgZ2l2ZW4gYW4geG9iajIgYW55d2hlcmUgaW4gdGhlCi0gKiBzYW1lIGRvY3VtZW50LCB5b3UgY2FuIHdyaXRlOgotICogPHA+Ci0gKiBmaWxlbmFtZSA9IChTdHJpbmcpdG9rZW5Tb3VyY2UuZG9jdW1lbnRQcm9wZXJ0aWVzKCkuZ2V0KFhtbERvY3VtZW50UHJvcGVydGllcy5OQU1FKTsKLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIFhtbERvY3VtZW50UHJvcGVydGllcwotewotICAgIC8qKgotICAgICAqIFNldHMgdGhlIG5hbWUgb2YgdGhlIFhNTCBkb2N1bWVudCBmaWxlLiAgVHlwaWNhbGx5IGEgVVJMLCBidXQgbWF5Ci0gICAgICogYmUgYW55IFN0cmluZy4KLSAgICAgKiBAcGFyYW0gc291cmNlTmFtZSB0aGUgbmFtZSB0byBzZXQKLSAgICAgKiBAc2VlIFhtbE9wdGlvbnMjc2V0RG9jdW1lbnRTb3VyY2VOYW1lCi0gICAgKi8gCi0gICAgcHVibGljIHZvaWQgICBzZXRTb3VyY2VOYW1lICggU3RyaW5nIHNvdXJjZU5hbWUgKSB7IHB1dCggU09VUkNFX05BTUUsIHNvdXJjZU5hbWUgKTsgfQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIFhNTCBkb2N1bWVudCBmaWxlLiAgVHlwaWNhbGx5IGEgVVJMLCBidXQgbWF5Ci0gICAgICogYmUgYW55IFN0cmluZy4KLSAgICAgKiBAc2VlIFhtbE9wdGlvbnMjc2V0RG9jdW1lbnRTb3VyY2VOYW1lCi0gICAgICovIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U291cmNlTmFtZSAoICkgeyByZXR1cm4gKFN0cmluZykgZ2V0KCBTT1VSQ0VfTkFNRSApOyB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgZW5jb2RpbmcgdG8gdXNlIGZvciB0aGUgWE1MIGRvY3VtZW50LiAgU2hvdWxkIGJlIGEgdmFsaWQKLSAgICAgKiBYTUwgZW5jb2Rpbmcgc3RyaW5nLgotICAgICAqIEBwYXJhbSBlbmNvZGluZyB0aGUgSVNPIGVuY29kaW5nIG5hbWUKLSAgICAgKiBAc2VlIFhtbE9wdGlvbnMjc2V0Q2hhcmFjdGVyRW5jb2RpbmcKLSAgICAgKi8gCi0gICAgcHVibGljIHZvaWQgICBzZXRFbmNvZGluZyAoIFN0cmluZyBlbmNvZGluZyApIHsgcHV0KCBFTkNPRElORywgZW5jb2RpbmcgKTsgfQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGVuY29kaW5nIHVzZWQgZm9yIHRoZSBYTUwgZG9jdW1lbnQsIGFzIGFuIElTTyBlbmNvZGluZyBuYW1lLgotICAgICAqIEBzZWUgWG1sT3B0aW9ucyNzZXRDaGFyYWN0ZXJFbmNvZGluZwotICAgICAqLyAKLSAgICBwdWJsaWMgU3RyaW5nIGdldEVuY29kaW5nICggKSB7IHJldHVybiAoU3RyaW5nKSBnZXQoIEVOQ09ESU5HICk7IH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBYTUwgdmVyc2lvbiBzdHJpbmcgdG8gdXNlIGluIHRoZSAmbHQmIzYzO3htbCYjNjM7Jmd0OyBkZWNsYXJhdGlvbi4KLSAgICAgKiAoVGhlIFhNTCBzcGVjaWZpY2F0aW9uIGlzIHF1aXRlIHN0YWJsZSBhdCAiMS4wIi4pCi0gICAgICogQHBhcmFtIHZlcnNpb24gdGhlIFhNTCB2ZXJzaW9uIHN0cmluZwotICAgICAqLyAKLSAgICBwdWJsaWMgdm9pZCAgIHNldFZlcnNpb24gKCBTdHJpbmcgdmVyc2lvbiApIHsgcHV0KCBWRVJTSU9OLCB2ZXJzaW9uICk7IH0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBYTUwgdmVyc2lvbiBzdHJpbmcgdXNlZCBpbiB0aGUgJmx0JiM2Mzt4bWwmIzYzOyZndDsgZGVjbGFyYXRpb24uCi0gICAgICovIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmVyc2lvbiAoICkgeyByZXR1cm4gKFN0cmluZykgZ2V0KCBWRVJTSU9OICk7IH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBET0NUWVBFIG5hbWUgdXNlIGluIHRoZSAmbHQmIzMzO0RPQ1RZUEUmZ3Q7IGRlY2xhcmF0aW9uLgotICAgICAqIEBwYXJhbSBkb2N0eXBlbmFtZSB0aGUgZG9jdHlwZW5hbWUKLSAgICAgKi8gCi0gICAgcHVibGljIHZvaWQgICBzZXREb2N0eXBlTmFtZSAoIFN0cmluZyBkb2N0eXBlbmFtZSApIHsgcHV0KCBET0NUWVBFX05BTUUsIGRvY3R5cGVuYW1lICk7IH0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBET0NUWVBFIG5hbWUgdXNlZCBpbiB0aGUgJmx0JiMzMztET0NUWVBFJmd0OyBkZWNsYXJhdGlvbi4KLSAgICAgKi8gCi0gICAgcHVibGljIFN0cmluZyBnZXREb2N0eXBlTmFtZSAoICkgeyByZXR1cm4gKFN0cmluZykgZ2V0KCBET0NUWVBFX05BTUUgKTsgfQotICAgIAotICAgIC8qKgotICAgICAqIFNldHMgdGhlIERPQ1RZUEUgcHVibGljIElEIHRvIHVzZSBpbiB0aGUgJmx0JiMzMztET0NUWVBFJmd0OyBkZWNsYXJhdGlvbi4KLSAgICAgKiBAcGFyYW0gcHVibGljaWQgdGhlIHB1YmxpYyBJRAotICAgICAqLyAKLSAgICBwdWJsaWMgdm9pZCAgIHNldERvY3R5cGVQdWJsaWNJZCAoIFN0cmluZyBwdWJsaWNpZCApIHsgcHV0KCBET0NUWVBFX1BVQkxJQ19JRCwgcHVibGljaWQgKTsgfQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIERPQ1RZUEUgcHVibGljIElEIHVzZWQgaW4gdGhlICZsdCYjMzM7RE9DVFlQRSZndDsgZGVjbGFyYXRpb24uCi0gICAgICovIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RG9jdHlwZVB1YmxpY0lkICggKSB7IHJldHVybiAoU3RyaW5nKSBnZXQoIERPQ1RZUEVfUFVCTElDX0lEICk7IH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSBET0NUWVBFIHN5c3RlbSBJRCB0byB1c2UgaW4gdGhlICZsdCYjMzM7RE9DVFlQRSZndDsgZGVjbGFyYXRpb24uCi0gICAgICogQHBhcmFtIHN5c3RlbWlkIHRoZSBzeXN0ZW0gSUQKLSAgICAgKi8gCi0gICAgcHVibGljIHZvaWQgICBzZXREb2N0eXBlU3lzdGVtSWQgKCBTdHJpbmcgc3lzdGVtaWQgKSB7IHB1dCggRE9DVFlQRV9TWVNURU1fSUQsIHN5c3RlbWlkICk7IH0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBET0NUWVBFIHN5c3RlbSBJRCB1c2VkIGluIHRoZSAmbHQmIzMzO0RPQ1RZUEUmZ3Q7IGRlY2xhcmF0aW9uLgotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RG9jdHlwZVN5c3RlbUlkICggKSB7IHJldHVybiAoU3RyaW5nKSBnZXQoIERPQ1RZUEVfU1lTVEVNX0lEICk7IH0KLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIG1lc3NhZ2UgZGlnZXN0IHVzZWQgdG8gc3VtbWFyaXplIHRoZSBkb2N1bWVudC4KLSAgICAgKiBAcGFyYW0gZGlnZXN0IHRoZSBieXRlcyBvZiB0aGUgZGlnZXN0Ci0gICAgICogCi0gICAgICogQHNlZSBYbWxPcHRpb25zI3NldExvYWRNZXNzYWdlRGlnZXN0Ci0gICAgICovIAotICAgIHB1YmxpYyB2b2lkICAgc2V0TWVzc2FnZURpZ2VzdCggYnl0ZVtdIGRpZ2VzdCApIHsgcHV0KCBNRVNTQUdFX0RJR0VTVCwgZGlnZXN0ICk7IH0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBtZXNzYWdlIGRpZ2VzdCB1c2VkIHRvIHN1bW1hcml6ZSB0aGUgZG9jdW1lbnQuCi0gICAgICogCi0gICAgICogQHNlZSBYbWxPcHRpb25zI3NldExvYWRNZXNzYWdlRGlnZXN0Ci0gICAgICovIAotICAgIHB1YmxpYyBieXRlW10gZ2V0TWVzc2FnZURpZ2VzdCggKSB7IHJldHVybiAoYnl0ZVtdKSBnZXQoIE1FU1NBR0VfRElHRVNUICk7IH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBvcmlnaW5hbCBuYW1lIChhIFN0cmluZykgZm9yCi0gICAgICogdGhlIHNvdXJjZSBmcm9tIHdoaWNoIHRoZSBYTUwgZG9jdW1lbnQgd2FzIGxvYWRlZC4KLSAgICAgKiBUaGlzIG5hbWUsIGlmIHByZXNlbnQsIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlCi0gICAgICogZG9jdW1lbnQgd2hlbiByZXBvcnRpbmcgdmFsaWRhdGlvbiBvciBjb21pbGF0aW9uIGVycm9ycy4KLSAgICAgKgotICAgICAqIFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKEZpbGUpIGFuZCBTY2hlbWFUeXBlTG9hZGVyLmxvYWRJbnN0YW5jZShGaWxlKQotICAgICAqIGJvdGggYXV0b21hdGljYWxseSBzZXQgdGhpcyB2YWx1ZSB0byB0aGUgZmlsZW5hbWUuCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBPYmplY3QgU09VUkNFX05BTUUgPSBuZXcgT2JqZWN0KCk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogRG9jdW1lbnQgZW5jb2RpbmcKLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIE9iamVjdCBFTkNPRElORyA9IG5ldyBPYmplY3QoKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBEb2N1bWVudCB2ZXJzaW9uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBPYmplY3QgVkVSU0lPTiA9IG5ldyBPYmplY3QoKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBEb2MgdHlwZSBuYW1lCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBPYmplY3QgRE9DVFlQRV9OQU1FID0gbmV3IE9iamVjdCgpOwotICAgIAotICAgIC8qKgotICAgICAqIERvYyB0eXBlIHB1YmxpYyBpZAotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgT2JqZWN0IERPQ1RZUEVfUFVCTElDX0lEID0gbmV3IE9iamVjdCgpOwotICAgIAotICAgIC8qKgotICAgICAqIERvYyB0eXBlIHN5c3RlbSBpZAotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgT2JqZWN0IERPQ1RZUEVfU1lTVEVNX0lEID0gbmV3IE9iamVjdCgpOwotICAgIAotICAgIC8qKgotICAgICAqIFNIQSBtZXNzYWdlIGRpZ2VzdAotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgT2JqZWN0IE1FU1NBR0VfRElHRVNUID0gbmV3IE9iamVjdCgpOwotCi0gICAgLyoqCi0gICAgICogQXR0YWNoZXMgYSB2YWx1ZSB0byB0aGUgcm9vdCBvZiB0aGUgZG9jdW1lbnQgY29udGFpbmluZwotICAgICAqIHRoZSBnaXZlbiB0b2tlbiBzb3VyY2UuCi0gICAgICoKLSAgICAgKiBAcGFyYW0ga2V5ICAgVGhlIGtleTogdGhlcmUgY2FuIGJlIG9uZSB2YWx1ZSBmb3IgZWFjaCBrZXkuCi0gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBhdHRhY2ggdG8gdGhlIGRvY3VtZW50LgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBPYmplY3QgcHV0ICggT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlICk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIHZhbHVlIHByZXZpb3VzbHkgYXR0YWNoZWQgdG8gYSBkb2N1bWVudCB1c2luZyBzZXQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0ga2V5ICAgVGhlIGtleTogdGhpcyBpcyB0aGUga2V5IHRoYXQgd2FzIHByZXZpb3VzbHkKLSAgICAgKiAgICAgICAgICAgICAgcGFzc2VkIHRvIHNldCB0byBzdG9yZSB0aGUgdmFsdWUuCi0gICAgICogQHJldHVybiAgICAgIFRoZSBzYXZlZCB2YWx1ZSwgb3IgbnVsbCBpZiBub25lIGlzIGZvdW5kLgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBPYmplY3QgZ2V0ICggT2JqZWN0IGtleSApOwotCi0gICAgLyoqCi0gICAgICogUmVtb3ZlcyBhIHZhbHVlIHByZXZpb3VzbHkgYXR0YWNoZWQgdG8gYSBkb2N1bWVudCB1c2luZyBzZXQuCi0gICAgICoKLSAgICAgKiBAcGFyYW0ga2V5ICAgVGhlIGtleTogdGhpcyBpcyB0aGUga2V5IHRoYXQgd2FzIHByZXZpb3VzbHkKLSAgICAgKiAgICAgICAgICAgICAgcGFzc2VkIHRvIHNldCB0byBzdG9yZSB0aGUgdmFsdWUuCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IE9iamVjdCByZW1vdmUgKCBPYmplY3Qga2V5ICk7Ci19Ci0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY4ZTU4Yy4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7Ci0KLQotLyoqCi0gKiBDb3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotICogPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkb3VibGUiPnhzOmRvdWJsZTwvYT4gdHlwZS4KLSAqIDxwPgotICogTmF0dXJhbGx5LCBjb252ZXJ0aWJsZSB0byBhIEphdmEgZG91YmxlLgotICovIAotcHVibGljIGludGVyZmFjZSBYbWxEb3VibGUgZXh0ZW5kcyBYbWxBbnlTaW1wbGVUeXBlCi17Ci0gICAgLyoqIFRoZSBjb25zdGFudCB7QGxpbmsgU2NoZW1hVHlwZX0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZSB0eXBlID0gWG1sQmVhbnMuZ2V0QnVpbHRpblR5cGVTeXN0ZW0oKS50eXBlRm9ySGFuZGxlKCJfQklfZG91YmxlIik7Ci0gICAgCi0gICAgLyoqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIGRvdWJsZSAqLwotICAgIGRvdWJsZSBnZXREb3VibGVWYWx1ZSgpOwotICAgIC8qKiBTZXRzIHRoaXMgdmFsdWUgYXMgYSBkb3VibGUgKi8KLSAgICB2b2lkIHNldERvdWJsZVZhbHVlKGRvdWJsZSB2KTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIGRvdWJsZQotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNnZXREb3VibGVWYWx1ZX0KLSAgICAgKiovCi0gICAgZG91YmxlIGRvdWJsZVZhbHVlKCk7Ci0gICAgLyoqCi0gICAgICogU2V0cyB0aGlzIHZhbHVlIGFzIGEgZG91YmxlCi0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI3NldERvdWJsZVZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIHNldChkb3VibGUgdik7Ci0KLSAgICAvKioKLSAgICAgKiBBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gICAgICogb2Yge0BsaW5rIFhtbERvdWJsZX0uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBGYWN0b3J5Ci0gICAgewotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sRG91YmxlfSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERvdWJsZSBuZXdJbnN0YW5jZSgpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbERvdWJsZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sRG91YmxlfSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERvdWJsZSBuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgewotICAgICAgICAgIHJldHVybiAoWG1sRG91YmxlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGltbXV0YWJsZSB7QGxpbmsgWG1sRG91YmxlfSB2YWx1ZSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERvdWJsZSBuZXdWYWx1ZShPYmplY3Qgb2JqKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEb3VibGUpIHR5cGUubmV3VmFsdWUoIG9iaiApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbERvdWJsZX0gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzEyMy4zNGUrNTcmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEb3VibGUgcGFyc2UoamF2YS5sYW5nLlN0cmluZyBzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRG91YmxlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRG91YmxlfSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7MTIzLjM0ZSs1NyZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERvdWJsZSBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRG91YmxlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRG91YmxlfSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEb3VibGUgcGFyc2UoamF2YS5pby5GaWxlIGYpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEb3VibGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxEb3VibGV9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERvdWJsZSBwYXJzZShqYXZhLmlvLkZpbGUgZiwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEb3VibGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxEb3VibGV9IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRG91YmxlIHBhcnNlKGphdmEubmV0LlVSTCB1KSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRG91YmxlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBudWxsICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbERvdWJsZX0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEb3VibGUgcGFyc2UoamF2YS5uZXQuVVJMIHUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRG91YmxlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBvcHRpb25zICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbERvdWJsZX0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEb3VibGUgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbERvdWJsZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxEb3VibGV9IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRG91YmxlIHBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0gaXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRG91YmxlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbERvdWJsZX0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEb3VibGUgcGFyc2UoamF2YS5pby5SZWFkZXIgcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbERvdWJsZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbERvdWJsZX0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEb3VibGUgcGFyc2UoamF2YS5pby5SZWFkZXIgciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEb3VibGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxEb3VibGV9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEb3VibGUgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRG91YmxlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRG91YmxlfSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRG91YmxlIHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEb3VibGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxEb3VibGV9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRG91YmxlIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbERvdWJsZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRG91YmxlfSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERvdWJsZSBwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRG91YmxlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxEb3VibGV9IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbERvdWJsZSBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEb3VibGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbERvdWJsZX0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRG91YmxlIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbnsKLSAgICAgICAgICByZXR1cm4gKFhtbERvdWJsZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBGYWN0b3J5KCkgeyB9IC8vIE5vIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgYWxsb3dlZAotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ4Yzc1YS4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKLQotCi0vKioKLSAqIENvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gKiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2R1cmF0aW9uIj54czpkdXJhdGlvbjwvYT4gdHlwZS4KLSAqIDxwPgotICogQ29udmVydGlibGUgdG8gYSB7QGxpbmsgR0R1cmF0aW9ufS4KLSAqIAotICogQHNlZSBHRHVyYXRpb24KLSAqLyAKLXB1YmxpYyBpbnRlcmZhY2UgWG1sRHVyYXRpb24gZXh0ZW5kcyBYbWxBbnlTaW1wbGVUeXBlCi17Ci0gICAgLyoqIFRoZSBjb25zdGFudCB7QGxpbmsgU2NoZW1hVHlwZX0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZSB0eXBlID0gWG1sQmVhbnMuZ2V0QnVpbHRpblR5cGVTeXN0ZW0oKS50eXBlRm9ySGFuZGxlKCJfQklfZHVyYXRpb24iKTsKLSAgICAKLSAgICAvKiogUmV0dXJucyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIEdEdXJhdGlvbn0gKi8KLSAgICBHRHVyYXRpb24gZ2V0R0R1cmF0aW9uVmFsdWUoKTsKLSAgICAvKiogU2V0cyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIEdEdXJhdGlvbn0gKi8KLSAgICB2b2lkIHNldEdEdXJhdGlvblZhbHVlKEdEdXJhdGlvbiBnZCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSB7QGxpbmsgR0R1cmF0aW9ufQotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNnZXRHRHVyYXRpb25WYWx1ZX0KLSAgICAgKiovCi0gICAgR0R1cmF0aW9uIGdEdXJhdGlvblZhbHVlKCk7Ci0gICAgLyoqCi0gICAgICogU2V0cyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIEdEdXJhdGlvbn0KLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjc2V0R0R1cmF0aW9uVmFsdWV9Ci0gICAgICoqLwotICAgIHZvaWQgc2V0KEdEdXJhdGlvblNwZWNpZmljYXRpb24gZ2QpOwotCi0gICAgLyoqCi0gICAgICogQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotICAgICAqIG9mIHtAbGluayBYbWxEdXJhdGlvbn0uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBGYWN0b3J5Ci0gICAgewotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sRHVyYXRpb259ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRHVyYXRpb24gbmV3SW5zdGFuY2UoKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEdXJhdGlvbikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sRHVyYXRpb259ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRHVyYXRpb24gbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbER1cmF0aW9uKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGltbXV0YWJsZSB7QGxpbmsgWG1sRHVyYXRpb259IHZhbHVlICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRHVyYXRpb24gbmV3VmFsdWUoT2JqZWN0IG9iaikgewotICAgICAgICAgIHJldHVybiAoWG1sRHVyYXRpb24pIHR5cGUubmV3VmFsdWUoIG9iaiApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbER1cmF0aW9ufSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7UDFZMk1UMkgmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEdXJhdGlvbiBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEdXJhdGlvbikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbER1cmF0aW9ufSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7UDFZMk1UMkgmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEdXJhdGlvbiBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRHVyYXRpb24pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxEdXJhdGlvbn0gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRHVyYXRpb24gcGFyc2UoamF2YS5pby5GaWxlIGYpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEdXJhdGlvbikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbER1cmF0aW9ufSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEdXJhdGlvbiBwYXJzZShqYXZhLmlvLkZpbGUgZiwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEdXJhdGlvbikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbER1cmF0aW9ufSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbER1cmF0aW9uIHBhcnNlKGphdmEubmV0LlVSTCB1KSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRHVyYXRpb24pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG51bGwgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRHVyYXRpb259IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRHVyYXRpb24gcGFyc2UoamF2YS5uZXQuVVJMIHUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRHVyYXRpb24pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG9wdGlvbnMgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRHVyYXRpb259IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRHVyYXRpb24gcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbER1cmF0aW9uKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbER1cmF0aW9ufSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbER1cmF0aW9uIHBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0gaXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRHVyYXRpb24pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRHVyYXRpb259IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRHVyYXRpb24gcGFyc2UoamF2YS5pby5SZWFkZXIgcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbER1cmF0aW9uKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRHVyYXRpb259IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRHVyYXRpb24gcGFyc2UoamF2YS5pby5SZWFkZXIgciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEdXJhdGlvbikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbER1cmF0aW9ufSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRHVyYXRpb24gcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRHVyYXRpb24pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxEdXJhdGlvbn0gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbER1cmF0aW9uIHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEdXJhdGlvbikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbER1cmF0aW9ufSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbER1cmF0aW9uIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbER1cmF0aW9uKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxEdXJhdGlvbn0gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEdXJhdGlvbiBwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRHVyYXRpb24pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbER1cmF0aW9ufSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxEdXJhdGlvbiBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxEdXJhdGlvbikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRHVyYXRpb259IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbER1cmF0aW9uIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbnsKLSAgICAgICAgICByZXR1cm4gKFhtbER1cmF0aW9uKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIEZhY3RvcnkoKSB7IH0gLy8gTm8gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBhbGxvd2VkCi0gICAgfQotfQotCmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGRkNmU2Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotCi0vKioKLSAqIENvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gKiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI0VOVElUSUVTIj54czpFTlRJVElFUzwvYT4gdHlwZSwKLSAqIGEgbGlzdCB0eXBlLgotICogPHA+Ci0gKiBBIGxpc3QgdHlwZS4KLSAqLyAKLXB1YmxpYyBpbnRlcmZhY2UgWG1sRU5USVRJRVMgZXh0ZW5kcyBYbWxBbnlTaW1wbGVUeXBlCi17Ci0gICAgLyoqIFRoZSBjb25zdGFudCB7QGxpbmsgU2NoZW1hVHlwZX0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZSB0eXBlID0gWG1sQmVhbnMuZ2V0QnVpbHRpblR5cGVTeXN0ZW0oKS50eXBlRm9ySGFuZGxlKCJfQklfRU5USVRJRVMiKTsKLSAgICAKLSAgICAvKiogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgTGlzdH0gb2Yge0BsaW5rIFN0cmluZ30gdmFsdWVzICovCi0gICAgTGlzdCBnZXRMaXN0VmFsdWUoKTsKLSAgICAvKiogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgTGlzdH0gb2Yge0BsaW5rIFhtbEVOVElUWX0gdmFsdWVzICoqLwotICAgIExpc3QgeGdldExpc3RWYWx1ZSgpOwotICAgIC8qKiBTZXRzIHRoZSB2YWx1ZSBhcyBhIHtAbGluayBMaXN0fSAqLwotICAgIHZvaWQgc2V0TGlzdFZhbHVlKExpc3QgbCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIHtAbGluayBMaXN0fSBvZiB7QGxpbmsgU3RyaW5nfSB2YWx1ZXMKLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSB7QGxpbmsgI2dldExpc3RWYWx1ZX0KLSAgICAgKiovCi0gICAgTGlzdCBsaXN0VmFsdWUoKTsKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIHtAbGluayBMaXN0fSBvZiB7QGxpbmsgWG1sRU5USVRZfSB2YWx1ZXMKLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSB7QGxpbmsgI2dldExpc3RWYWx1ZX0KLSAgICAgKiovCi0gICAgTGlzdCB4bGlzdFZhbHVlKCk7Ci0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgTGlzdH0KLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSB7QGxpbmsgI2dldExpc3RWYWx1ZX0KLSAgICAgKiovCi0gICAgdm9pZCBzZXQoTGlzdCBsKTsKLQotICAgIC8qKgotICAgICAqIEEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSAgICAgKiBvZiB7QGxpbmsgWG1sRU5USVRJRVN9LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgRmFjdG9yeQotICAgIHsKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbEVOVElUSUVTfSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEVOVElUSUVTIG5ld0luc3RhbmNlKCkgewotICAgICAgICAgIHJldHVybiAoWG1sRU5USVRJRVMpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbEVOVElUSUVTfSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEVOVElUSUVTIG5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxFTlRJVElFUykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBpbW11dGFibGUge0BsaW5rIFhtbEVOVElUSUVTfSB2YWx1ZSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEVOVElUSUVTIG5ld1ZhbHVlKE9iamVjdCBvYmopIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEVOVElUSUVTKSB0eXBlLm5ld1ZhbHVlKCBvYmogKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxFTlRJVElFU30gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxFTlRJVElFUyBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxFTlRJVElFUykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEVOVElUSUVTfSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEVOVElUSUVTIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxFTlRJVElFUykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEVOVElUSUVTfSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxFTlRJVElFUyBwYXJzZShqYXZhLmlvLkZpbGUgZikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEVOVElUSUVTKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRU5USVRJRVN9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEVOVElUSUVTIHBhcnNlKGphdmEuaW8uRmlsZSBmLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEVOVElUSUVTKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRU5USVRJRVN9IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRU5USVRJRVMgcGFyc2UoamF2YS5uZXQuVVJMIHUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxFTlRJVElFUykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgbnVsbCApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxFTlRJVElFU30gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxFTlRJVElFUyBwYXJzZShqYXZhLm5ldC5VUkwgdSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxFTlRJVElFUykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxFTlRJVElFU30gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxFTlRJVElFUyBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRU5USVRJRVMpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRU5USVRJRVN9IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRU5USVRJRVMgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxFTlRJVElFUykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxFTlRJVElFU30gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxFTlRJVElFUyBwYXJzZShqYXZhLmlvLlJlYWRlciByKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRU5USVRJRVMpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxFTlRJVElFU30gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxFTlRJVElFUyBwYXJzZShqYXZhLmlvLlJlYWRlciByLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEVOVElUSUVTKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRU5USVRJRVN9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxFTlRJVElFUyBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxFTlRJVElFUykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEVOVElUSUVTfSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRU5USVRJRVMgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEVOVElUSUVTKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRU5USVRJRVN9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRU5USVRJRVMgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRU5USVRJRVMpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEVOVElUSUVTfSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEVOVElUSUVTIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxFTlRJVElFUykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRU5USVRJRVN9IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEVOVElUSUVTIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEVOVElUSUVTKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxFTlRJVElFU30gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRU5USVRJRVMgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uewotICAgICAgICAgIHJldHVybiAoWG1sRU5USVRJRVMpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgRmFjdG9yeSgpIHsgfSAvLyBObyBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGFsbG93ZWQKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFmMzI4NS4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjYgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7Ci0KLQotLyoqCi0gKiBDb3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotICogPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNFTlRJVFkiPnhzOkVOVElUWTwvYT4gdHlwZS4KLSAqIDxwPgotICogQ29udmVydGlibGUgdG8ge0BsaW5rIFN0cmluZ30uCi0gKi8gCi1wdWJsaWMgaW50ZXJmYWNlIFhtbEVOVElUWSBleHRlbmRzIFhtbE5DTmFtZQotewotICAgIC8qKiBUaGUgY29uc3RhbnQge0BsaW5rIFNjaGVtYVR5cGV9IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGUgdHlwZSA9IFhtbEJlYW5zLmdldEJ1aWx0aW5UeXBlU3lzdGVtKCkudHlwZUZvckhhbmRsZSgiX0JJX0VOVElUWSIpOwotICAgIAotICAgIC8qKgotICAgICAqIEEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSAgICAgKiBvZiB7QGxpbmsgWG1sRU5USVRZfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEZhY3RvcnkKLSAgICB7Ci0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxFTlRJVFl9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRU5USVRZIG5ld0luc3RhbmNlKCkgewotICAgICAgICAgIHJldHVybiAoWG1sRU5USVRZKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxFTlRJVFl9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRU5USVRZIG5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxFTlRJVFkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gaW1tdXRhYmxlIHtAbGluayBYbWxFTlRJVFl9IHZhbHVlICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRU5USVRZIG5ld1ZhbHVlKE9iamVjdCBvYmopIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEVOVElUWSkgdHlwZS5uZXdWYWx1ZSggb2JqICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRU5USVRZfSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEVOVElUWSBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxFTlRJVFkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxFTlRJVFl9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRU5USVRZIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxFTlRJVFkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxFTlRJVFl9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEVOVElUWSBwYXJzZShqYXZhLmlvLkZpbGUgZikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEVOVElUWSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEVOVElUWX0gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRU5USVRZIHBhcnNlKGphdmEuaW8uRmlsZSBmLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEVOVElUWSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEVOVElUWX0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxFTlRJVFkgcGFyc2UoamF2YS5uZXQuVVJMIHUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxFTlRJVFkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG51bGwgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRU5USVRZfSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEVOVElUWSBwYXJzZShqYXZhLm5ldC5VUkwgdSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxFTlRJVFkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG9wdGlvbnMgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRU5USVRZfSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEVOVElUWSBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRU5USVRZKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEVOVElUWX0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxFTlRJVFkgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxFTlRJVFkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRU5USVRZfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEVOVElUWSBwYXJzZShqYXZhLmlvLlJlYWRlciByKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRU5USVRZKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRU5USVRZfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEVOVElUWSBwYXJzZShqYXZhLmlvLlJlYWRlciByLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEVOVElUWSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEVOVElUWX0gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEVOVElUWSBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxFTlRJVFkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxFTlRJVFl9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxFTlRJVFkgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEVOVElUWSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEVOVElUWX0gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxFTlRJVFkgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRU5USVRZKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxFTlRJVFl9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRU5USVRZIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxFTlRJVFkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEVOVElUWX0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRU5USVRZIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEVOVElUWSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRU5USVRZfSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxFTlRJVFkgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uewotICAgICAgICAgIHJldHVybiAoWG1sRU5USVRZKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIEZhY3RvcnkoKSB7IH0gLy8gTm8gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBhbGxvd2VkCi0gICAgfQotfQotCmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTdkNDRkLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUzICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmEubmV0LlVSSTsKLWltcG9ydCBqYXZhLm5ldC5VUklTeW50YXhFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotCi0vKioKLSAqIFJlcHJlc2VudHMgYSBtZXNzYWdlIGF0IGEgc3BlY2lmaWMgWE1MIGxvY2F0aW9uLgotICogPHA+Ci0gKiBUaGUgbWVzc2FnZSBjYW4gYmUgYW4gZXJyb3IsIHdhcm5pbmcsIG9yIHNpbXBsZSBpbmZvcm1hdGlvbiwgYW5kCi0gKiBpdCBtYXkgb3B0aW9uYWxseSBiZSBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBsb2NhdGlvbiBpbgotICogYW4gWE1MIGRvY3VtZW50LiAgVGhlIGNsYXNzIGluY2x1ZGVzIG1ldGhvZHMgZm9yIGV4dHJhY3RpbmcKLSAqIHRoZSBsb2NhdGlvbiBhcyBhIGxpbmUgbnVtYmVyLCBYbWxDdXJzb3IsIG9yIFhtbE9iamVjdCwgYXMKLSAqIHdlbGwgYXMgZm9yIG9idGFpbmluZyBhbmQgbWVzc2FnZSBhbmQgc2V2ZXJpdHkgb2YgdGhlCi0gKiBlcnJvci4gCi0gKiAKLSAqIEBzZWUgWG1sT3B0aW9ucyNzZXRFcnJvckxpc3RlbmVyCi0gKiBAc2VlIFhtbEV4Y2VwdGlvbgotICovCi1wdWJsaWMgY2xhc3MgWG1sRXJyb3IgaW1wbGVtZW50cyBqYXZhLmlvLlNlcmlhbGl6YWJsZQotewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0gICAgcHJpdmF0ZSBTdHJpbmcgX21lc3NhZ2U7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgX3NvdXJjZTsKLSAgICBwcml2YXRlIGludCAgICBfc2V2ZXJpdHkgPSBTRVZFUklUWV9FUlJPUjsKLSAgICBwcml2YXRlIGludCAgICBfbGluZSA9IC0xOwotICAgIHByaXZhdGUgaW50ICAgIF9jb2x1bW4gPSAtMTsKLSAgICBwcml2YXRlIGludCAgICBfb2Zmc2V0ID0gLTE7Ci0gICAgCi0gICAgcHJpdmF0ZSB0cmFuc2llbnQgWG1sQ3Vyc29yIF9jdXJzb3I7Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ29weSBjb25zdHJ1Y3Rvci4KLSAgICAgKiBAcGFyYW0gc3JjIFRoZSBvcmlnaW5hbCBYbWxFcnJvciB0byBjb3B5LgotICAgICAqLwotICAgIHB1YmxpYyBYbWxFcnJvcihYbWxFcnJvciBzcmMpCi0gICAgewotICAgICAgICBfbWVzc2FnZSA9IHNyYy5nZXRNZXNzYWdlKCk7Ci0gICAgICAgIF9zZXZlcml0eSA9IHNyYy5nZXRTZXZlcml0eSgpOwotICAgICAgICBfc291cmNlID0gc3JjLmdldFNvdXJjZU5hbWUoKTsKLSAgICAgICAgX2xpbmUgPSBzcmMuZ2V0TGluZSgpOwotICAgICAgICBfY29sdW1uID0gc3JjLmdldENvbHVtbigpOwotICAgICAgICBfb2Zmc2V0ID0gc3JjLmdldE9mZnNldCgpOwotICAgICAgICBfY3Vyc29yID0gc3JjLmdldEN1cnNvckxvY2F0aW9uKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhlIHN0YXRpYyBmYWN0b3J5IG1ldGhvZHMgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZgotICAgICAqIHRoaXMgY29uc3RydWN0b3IuCi0gICAgICovCi0gICAgcHJpdmF0ZSBYbWxFcnJvcihTdHJpbmcgbWVzc2FnZSwgaW50IHNldmVyaXR5LCBTdHJpbmcgc291cmNlLCBpbnQgbGluZSwgaW50IGNvbHVtbiwgaW50IG9mZnNldCwgWG1sQ3Vyc29yIGN1cnNvcikKLSAgICB7Ci0gICAgICAgIF9tZXNzYWdlID0gbWVzc2FnZTsKLSAgICAgICAgX3NldmVyaXR5ID0gc2V2ZXJpdHk7Ci0gICAgICAgIF9zb3VyY2UgPSBzb3VyY2U7Ci0gICAgICAgIF9saW5lID0gbGluZTsKLSAgICAgICAgX2NvbHVtbiA9IGNvbHVtbjsKLSAgICAgICAgX29mZnNldCA9IG9mZnNldDsKLSAgICAgICAgX2N1cnNvciA9IGN1cnNvcjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGFuIFhtbEVycm9yIGZvciB0aGUgZ2l2ZW4gbWVzc2FnZSwgd2l0aCBubyBsb2NhdGlvbiBhbmQge0BsaW5rICNTRVZFUklUWV9FUlJPUn0uCi0gICAgICogQHBhcmFtIG1lc3NhZ2UgdGhlIGVycm9yIG1lc3NhZ2UKLSAgICAgKi8gCi0gICAgcHVibGljIHN0YXRpYyBYbWxFcnJvciBmb3JNZXNzYWdlKFN0cmluZyBtZXNzYWdlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZvck1lc3NhZ2UobWVzc2FnZSwgU0VWRVJJVFlfRVJST1IpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYW4gWG1sRXJyb3IgZm9yIHRoZSBnaXZlbiBtZXNzYWdlLCB3aXRoIG5vIGxvY2F0aW9uIGFuZCB0aGUgZ2l2ZW4gc2V2ZXJpdHkuCi0gICAgICogQHBhcmFtIG1lc3NhZ2UgdGhlIGVycm9yIG1lc3NhZ2UKLSAgICAgKiBAcGFyYW0gc2V2ZXJpdHkgdGhlIHNldmVyaXR5ICh7QGxpbmsgI1NFVkVSSVRZX0VSUk9SfSwge0BsaW5rICNTRVZFUklUWV9XQVJOSU5HfSwgb3Ige0BsaW5rICNTRVZFUklUWV9JTkZPfSkKLSAgICAgKi8gCi0gICAgcHVibGljIHN0YXRpYyBYbWxFcnJvciBmb3JNZXNzYWdlKFN0cmluZyBtZXNzYWdlLCBpbnQgc2V2ZXJpdHkpCi0gICAgewotICAgICAgICByZXR1cm4gZm9yU291cmNlKG1lc3NhZ2UsIHNldmVyaXR5LCBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGFuIFhtbEVycm9yIGZvciB0aGUgZ2l2ZW4gbWVzc2FnZSwgbG9jYXRlZCBpbiB0aGUgZ2l2ZW4gZmlsZSBhbmQge0BsaW5rICNTRVZFUklUWV9FUlJPUn0uCi0gICAgICogQHBhcmFtIG1lc3NhZ2UgdGhlIGVycm9yIG1lc3NhZ2UKLSAgICAgKiBAcGFyYW0gc291cmNlTmFtZSB0aGUgVVJMIG9yIG90aGVyIG5hbWUgZm9yIHRoZSBmaWxlCi0gICAgICovIAotICAgIHB1YmxpYyBzdGF0aWMgWG1sRXJyb3IgZm9yU291cmNlKFN0cmluZyBtZXNzYWdlLCBTdHJpbmcgc291cmNlTmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmb3JMb2NhdGlvbihtZXNzYWdlLCBTRVZFUklUWV9FUlJPUiwgc291cmNlTmFtZSwgLTEsIC0xLCAtMSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhbiBYbWxFcnJvciBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UsIHdpdGggdGhlIGdpdmVuIHNldmVyaXR5LCBsb2NhdGVkIGluIHRoZSBnaXZlbiBmaWxlLgotICAgICAqIEBwYXJhbSBtZXNzYWdlIHRoZSBlcnJvciBtZXNzYWdlCi0gICAgICogQHBhcmFtIHNldmVyaXR5IHRoZSBzZXZlcml0eSAoe0BsaW5rICNTRVZFUklUWV9FUlJPUn0sIHtAbGluayAjU0VWRVJJVFlfV0FSTklOR30sIG9yIHtAbGluayAjU0VWRVJJVFlfSU5GT30pCi0gICAgICogQHBhcmFtIHNvdXJjZU5hbWUgdGhlIFVSTCBvciBvdGhlciBuYW1lIGZvciB0aGUgZmlsZQotICAgICAqLyAKLSAgICBwdWJsaWMgc3RhdGljIFhtbEVycm9yIGZvclNvdXJjZShTdHJpbmcgbWVzc2FnZSwgaW50IHNldmVyaXR5LCBTdHJpbmcgc291cmNlTmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmb3JMb2NhdGlvbihtZXNzYWdlLCBzZXZlcml0eSwgc291cmNlTmFtZSwgLTEsIC0xLCAtMSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhbiBYbWxFcnJvciBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UsIGxvY2F0ZWQgYXQgYSBzcGVjaWZpYyBwb2ludCBpbiB0aGUgZ2l2ZW4gZmlsZSBhbmQge0BsaW5rICNTRVZFUklUWV9FUlJPUn0uCi0gICAgICogQHBhcmFtIG1lc3NhZ2UgdGhlIGVycm9yIG1lc3NhZ2UKLSAgICAgKiBAcGFyYW0gc291cmNlTmFtZSB0aGUgVVJMIG9yIG90aGVyIG5hbWUgZm9yIHRoZSBmaWxlCi0gICAgICogQHBhcmFtIGxpbmUgdGhlIDEtYmFzZWQgbGluZSBudW1iZXIsIG9yIC0xIGlmIG5vdCBrbm93bgotICAgICAqIEBwYXJhbSBjb2x1bW4gdGhlIDEtYmFzZWQgY29sdW1uIG51bWJlciwgb3IgLTEgaWYgbm90IGtub3duCi0gICAgICogQHBhcmFtIG9mZnNldCB0aGUgMC1iYXNlIGZpbGUgY2hhcmFjdGVyIG9mZnNldCwgb3IgLTEgaWYgbm90IGtub3duCi0gICAgICovIAotICAgIHB1YmxpYyBzdGF0aWMgWG1sRXJyb3IgZm9yTG9jYXRpb24oU3RyaW5nIG1lc3NhZ2UsIFN0cmluZyBzb3VyY2VOYW1lLCBpbnQgbGluZSwgaW50IGNvbHVtbiwgaW50IG9mZnNldCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgWG1sRXJyb3IobWVzc2FnZSwgU0VWRVJJVFlfRVJST1IsIHNvdXJjZU5hbWUsIGxpbmUsIGNvbHVtbiwgb2Zmc2V0LCBudWxsKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGFuIFhtbEVycm9yIGZvciB0aGUgZ2l2ZW4gbWVzc2FnZSwgd2l0aCB0aGUgZ2l2ZW4gc2V2ZXJpdHksIGxvY2F0ZWQgYXQgYSBzcGVjaWZpYyBwb2ludCBpbiB0aGUgZ2l2ZW4gZmlsZS4KLSAgICAgKiBAcGFyYW0gbWVzc2FnZSB0aGUgZXJyb3IgbWVzc2FnZQotICAgICAqIEBwYXJhbSBzZXZlcml0eSB0aGUgc2V2ZXJpdHkgKHtAbGluayAjU0VWRVJJVFlfRVJST1J9LCB7QGxpbmsgI1NFVkVSSVRZX1dBUk5JTkd9LCBvciB7QGxpbmsgI1NFVkVSSVRZX0lORk99KQotICAgICAqIEBwYXJhbSBzb3VyY2VOYW1lIHRoZSBVUkwgb3Igb3RoZXIgbmFtZSBmb3IgdGhlIGZpbGUKLSAgICAgKiBAcGFyYW0gbGluZSB0aGUgMS1iYXNlZCBsaW5lIG51bWJlciwgb3IgLTEgaWYgbm90IGtub3duCi0gICAgICogQHBhcmFtIGNvbHVtbiB0aGUgMS1iYXNlZCBjb2x1bW4gbnVtYmVyLCBvciAtMSBpZiBub3Qga25vd24KLSAgICAgKiBAcGFyYW0gb2Zmc2V0IHRoZSAwLWJhc2UgZmlsZSBjaGFyYWN0ZXIgb2Zmc2V0LCBvciAtMSBpZiBub3Qga25vd24KLSAgICAgKi8gCi0gICAgcHVibGljIHN0YXRpYyBYbWxFcnJvciBmb3JMb2NhdGlvbihTdHJpbmcgbWVzc2FnZSwgaW50IHNldmVyaXR5LCBTdHJpbmcgc291cmNlTmFtZSwgaW50IGxpbmUsIGludCBjb2x1bW4sIGludCBvZmZzZXQpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IFhtbEVycm9yKG1lc3NhZ2UsIHNldmVyaXR5LCBzb3VyY2VOYW1lLCBsaW5lLCBjb2x1bW4sIG9mZnNldCwgbnVsbCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhbiBYbWxFcnJvciBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UsIHdpdGggdGhlIGdpdmVuIHNldmVyaXR5LCBsb2NhdGVkIGF0IHRoZSBnaXZlbiBwaHlzY2lhbCBsb2NhdGlvbiBhbmQgWG1sQ3Vyc29yLgotICAgICAqIEBwYXJhbSBtZXNzYWdlIHRoZSBlcnJvciBtZXNzYWdlCi0gICAgICogQHBhcmFtIHNldmVyaXR5IHRoZSBzZXZlcml0eSAoe0BsaW5rICNTRVZFUklUWV9FUlJPUn0sIHtAbGluayAjU0VWRVJJVFlfV0FSTklOR30sIG9yIHtAbGluayAjU0VWRVJJVFlfSU5GT30pCi0gICAgICogQHBhcmFtIHNvdXJjZU5hbWUgdGhlIFVSTCBvciBvdGhlciBuYW1lIGZvciB0aGUgZmlsZQotICAgICAqIEBwYXJhbSBsaW5lIHRoZSAxLWJhc2VkIGxpbmUgbnVtYmVyLCBvciAtMSBpZiBub3Qga25vd24KLSAgICAgKiBAcGFyYW0gY29sdW1uIHRoZSAxLWJhc2VkIGNvbHVtbiBudW1iZXIsIG9yIC0xIGlmIG5vdCBrbm93bgotICAgICAqIEBwYXJhbSBvZmZzZXQgdGhlIDAtYmFzZSBmaWxlIGNoYXJhY3RlciBvZmZzZXQsIG9yIC0xIGlmIG5vdCBrbm93bgotICAgICAqIEBwYXJhbSBjdXJzb3IgdGhlIFhtbEN1cnNvciByZXByZXNlbnRpbmcgdGhlIGxvY2F0aW9uIG9mIHRoZSBlcnJvcgotICAgICAqLyAKLSAgICBwdWJsaWMgc3RhdGljIFhtbEVycm9yIGZvckxvY2F0aW9uQW5kQ3Vyc29yKFN0cmluZyBtZXNzYWdlLCBpbnQgc2V2ZXJpdHksIFN0cmluZyBzb3VyY2VOYW1lLCBpbnQgbGluZSwgaW50IGNvbHVtbiwgaW50IG9mZnNldCwgWG1sQ3Vyc29yIGN1cnNvcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgWG1sRXJyb3IobWVzc2FnZSwgc2V2ZXJpdHksIHNvdXJjZU5hbWUsIGxpbmUsIGNvbHVtbiwgb2Zmc2V0LCBjdXJzb3IpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYW4gWG1sRXJyb3IgZm9yIHRoZSBnaXZlbiBtZXNzYWdlLCBsb2NhdGVkIGF0IHRoZSBYbWxPYmplY3QsIHdpdGgge0BsaW5rICNTRVZFUklUWV9FUlJPUn0uCi0gICAgICogQHBhcmFtIG1lc3NhZ2UgdGhlIGVycm9yIG1lc3NhZ2UKLSAgICAgKiBAcGFyYW0geG9iaiB0aGUgWG1sT2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbG9jYXRpb24gb2YgdGhlIGVycm9yCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBYbWxFcnJvciBmb3JPYmplY3QoU3RyaW5nIG1lc3NhZ2UsIFhtbE9iamVjdCB4b2JqKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZvck9iamVjdChtZXNzYWdlLCBTRVZFUklUWV9FUlJPUiwgeG9iaik7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhbiBYbWxFcnJvciBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UsIHdpdGggdGhlIGdpdmVuIHNldmVyaXR5LCBsb2NhdGVkIGF0IHRoZSBYbWxPYmplY3QuCi0gICAgICogQHBhcmFtIG1lc3NhZ2UgdGhlIGVycm9yIG1lc3NhZ2UKLSAgICAgKiBAcGFyYW0gc2V2ZXJpdHkgdGhlIHNldmVyaXR5ICh7QGxpbmsgI1NFVkVSSVRZX0VSUk9SfSwge0BsaW5rICNTRVZFUklUWV9XQVJOSU5HfSwgb3Ige0BsaW5rICNTRVZFUklUWV9JTkZPfSkKLSAgICAgKiBAcGFyYW0geG9iaiB0aGUgWG1sT2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbG9jYXRpb24gb2YgdGhlIGVycm9yCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBYbWxFcnJvciBmb3JPYmplY3QoU3RyaW5nIG1lc3NhZ2UsIGludCBzZXZlcml0eSwgWG1sT2JqZWN0IHhvYmopCi0gICAgewotICAgICAgICBpZiAoeG9iaiA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIGZvck1lc3NhZ2UobWVzc2FnZSwgc2V2ZXJpdHkpOwotCi0gICAgICAgIFhtbEN1cnNvciBjdXIgPSB4b2JqLm5ld0N1cnNvcigpOwotICAgICAgICBYbWxFcnJvciByZXN1bHQgPSBmb3JDdXJzb3IobWVzc2FnZSwgc2V2ZXJpdHksIGN1cik7Ci0gICAgICAgIGlmIChjdXIgIT0gbnVsbCkKLSAgICAgICAgICAgIGN1ci5kaXNwb3NlKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhbiBYbWxFcnJvciBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UsIGxvY2F0ZWQgYXQgdGhlIFhtbEN1cnNvciwgd2l0aCB7QGxpbmsgI1NFVkVSSVRZX0VSUk9SfS4KLSAgICAgKiBAcGFyYW0gbWVzc2FnZSB0aGUgZXJyb3IgbWVzc2FnZQotICAgICAqIEBwYXJhbSBjdXJzb3IgdGhlIFhtbEN1cnNvciByZXByZXNlbnRpbmcgdGhlIGxvY2F0aW9uIG9mIHRoZSBlcnJvcgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgWG1sRXJyb3IgZm9yQ3Vyc29yKFN0cmluZyBtZXNzYWdlLCBYbWxDdXJzb3IgY3Vyc29yKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZvckN1cnNvcihtZXNzYWdlLCBTRVZFUklUWV9FUlJPUiwgY3Vyc29yKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGFuIFhtbEVycm9yIGZvciB0aGUgZ2l2ZW4gbWVzc2FnZSwgd2l0aCB0aGUgZ2l2ZW4gc2V2ZXJpdHksIGxvY2F0ZWQgYXQgdGhlIFhtbEN1cnNvci4KLSAgICAgKiBAcGFyYW0gbWVzc2FnZSB0aGUgZXJyb3IgbWVzc2FnZQotICAgICAqIEBwYXJhbSBzZXZlcml0eSB0aGUgc2V2ZXJpdHkgKHtAbGluayAjU0VWRVJJVFlfRVJST1J9LCB7QGxpbmsgI1NFVkVSSVRZX1dBUk5JTkd9LCBvciB7QGxpbmsgI1NFVkVSSVRZX0lORk99KQotICAgICAqIEBwYXJhbSBjdXJzb3IgdGhlIFhtbEN1cnNvciByZXByZXNlbnRpbmcgdGhlIGxvY2F0aW9uIG9mIHRoZSBlcnJvcgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgWG1sRXJyb3IgZm9yQ3Vyc29yKFN0cmluZyBtZXNzYWdlLCBpbnQgc2V2ZXJpdHksIFhtbEN1cnNvciBjdXJzb3IpCi0gICAgewotICAgICAgICBpZiAoY3Vyc29yID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gZm9yTWVzc2FnZShtZXNzYWdlLCBzZXZlcml0eSk7Ci0KLSAgICAgICAgLy8gSHVudCBkb3duIHRoZSBsaW5lL2NvbHVtbi9vZmZzZXQKLQotICAgICAgICBpbnQgbGluZSA9IC0xOwotICAgICAgICBpbnQgY29sdW1uID0gLTE7Ci0gICAgICAgIGludCBvZmZzZXQgPSAtMTsKLSAgICAgICAgU3RyaW5nIHNvdXJjZSA9IG51bGw7Ci0KLSAgICAgICAgc291cmNlID0gY3Vyc29yLmRvY3VtZW50UHJvcGVydGllcygpLmdldFNvdXJjZU5hbWUoKTsKLQotICAgICAgICBYbWxDdXJzb3IgYyA9IGN1cnNvci5uZXdDdXJzb3IoKTsKLQotICAgICAgICBYbWxMaW5lTnVtYmVyIGxuID0KLSAgICAgICAgICAgIChYbWxMaW5lTnVtYmVyKSBjLmdldEJvb2ttYXJrKCBYbWxMaW5lTnVtYmVyLmNsYXNzICk7Ci0KLSAgICAgICAgaWYgKGxuID09IG51bGwpCi0gICAgICAgICAgICBsbiA9IChYbWxMaW5lTnVtYmVyKSBjLnRvUHJldkJvb2ttYXJrKCBYbWxMaW5lTnVtYmVyLmNsYXNzICk7Ci0KLSAgICAgICAgaWYgKGxuICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxpbmUgPSBsbi5nZXRMaW5lKCk7Ci0gICAgICAgICAgICBjb2x1bW4gPSBsbi5nZXRDb2x1bW4oKTsKLSAgICAgICAgICAgIG9mZnNldCA9IGxuLmdldE9mZnNldCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYy5kaXNwb3NlKCk7Ci0KLSAgICAgICAgcmV0dXJuIG5ldyBYbWxFcnJvcihtZXNzYWdlLCBzZXZlcml0eSwgc291cmNlLCBsaW5lLCBjb2x1bW4sIG9mZnNldCwgY3Vyc29yKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUcmllcyB0byBwcm9kdWNlIGEgbmljZWx5IGZvcm1hdHRlZCBmaWxlbmFtZSBmcm9tIHRoZSBnaXZlbiBzdHJpbmcuCi0gICAgICovCi0gICAgcHJvdGVjdGVkIHN0YXRpYyBTdHJpbmcgZm9ybWF0dGVkRmlsZU5hbWUoU3RyaW5nIHJhd1N0cmluZywgVVJJIGJhc2UpCi0gICAgewotICAgICAgICBpZiAocmF3U3RyaW5nID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICBVUkkgdXJpID0gbnVsbDsKLQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gaWYgaXQgbG9va3MgbGlrZSBhbiBhYnNvbHV0ZSBVUkksIHRyZWF0IGl0IGFzIHN1Y2gKLSAgICAgICAgICAgIHVyaSA9IG5ldyBVUkkocmF3U3RyaW5nKTsKLQotICAgICAgICAgICAgLy8gb3RoZXJ3aXNlLCB0cmVhdCBpdCBsaWtlIGEgZmlsZW5hbWUKLSAgICAgICAgICAgIGlmICghdXJpLmlzQWJzb2x1dGUoKSkKLSAgICAgICAgICAgICAgICB1cmkgPSBudWxsOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChVUklTeW50YXhFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgdXJpID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGxvb2tzIGxpa2UgYSBmaWxlbmFtZTsgY29udmVydCBpdCB0byB1cmkgZm9yIHJlbGF0aXZpemF0aW9uCi0gICAgICAgIGlmICh1cmkgPT0gbnVsbCkKLSAgICAgICAgICAgIHVyaSA9IG5ldyBGaWxlKHJhd1N0cmluZykudG9VUkkoKTsKLQotICAgICAgICBpZiAoYmFzZSAhPSBudWxsKQotICAgICAgICAgICAgdXJpID0gYmFzZS5yZWxhdGl2aXplKHVyaSk7Ci0KLSAgICAgICAgLy8gZmlsZW5hbWVzIGdldCB0aGVpciBmaWxlOiBzdHJpcHBlZCBvZmYgYW5kIHRoZWlyIC8ncyB0dXJuZWQgaW50byBcJ3MgKE1TRE9TKQotICAgICAgICBpZiAodXJpLmlzQWJzb2x1dGUoKSA/IHVyaS5nZXRTY2hlbWUoKS5jb21wYXJlVG9JZ25vcmVDYXNlKCJmaWxlIikgPT0gMCA6Ci0gICAgICAgICAgICBiYXNlICE9IG51bGwgJiYgYmFzZS5pc0Fic29sdXRlKCkgJiYgYmFzZS5nZXRTY2hlbWUoKS5jb21wYXJlVG9JZ25vcmVDYXNlKCJmaWxlIikgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChuZXcgRmlsZSh1cmkpKS50b1N0cmluZygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7fTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB1cmkudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBbiBlcnJvci4gU2VlIHtAbGluayAjZ2V0U2V2ZXJpdHl9LgotICAgICAqLyAKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBTRVZFUklUWV9FUlJPUiAgID0gMDsKLSAgICAvKioKLSAgICAgKiBBIHdhcm5pbmcuIFNlZSB7QGxpbmsgI2dldFNldmVyaXR5fS4KLSAgICAgKi8gCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VWRVJJVFlfV0FSTklORyA9IDE7Ci0gICAgLyoqCi0gICAgICogQW4gaW5mb3JtYXRpb25hbCBtZXNzYWdlLiBTZWUge0BsaW5rICNnZXRTZXZlcml0eX0uCi0gICAgICovIAotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFVkVSSVRZX0lORk8gICAgPSAyOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgc2V2ZXJpdHkuICBFaXRoZXIge0BsaW5rICNTRVZFUklUWV9FUlJPUn0sIHtAbGluayAjU0VWRVJJVFlfV0FSTklOR30sIG9yIHtAbGluayAjU0VWRVJJVFlfSU5GT30uCi0gICAgICovIAotICAgIHB1YmxpYyBpbnQgICAgZ2V0U2V2ZXJpdHkgICAoICkgeyByZXR1cm4gX3NldmVyaXR5OyB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSB3aXRob3V0IGxvY2F0aW9uIGluZm9ybWF0aW9uLgotICAgICAqLyAKLSAgICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UgICAgKCApIHsgcmV0dXJuIF9tZXNzYWdlOyB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgVVJMIChvciBvdGhlciBuYW1lKSBvZiB0aGUgZmlsZSB3aXRoIHRoZSBlcnJvciwgaWYgYXZhaWxhYmxlLgotICAgICAqLyAKLSAgICBwdWJsaWMgU3RyaW5nIGdldFNvdXJjZU5hbWUgKCApIHsgcmV0dXJuIF9zb3VyY2U7IH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgZXJyb3IsIGlmIGF2YWlsYWJsZSwgLTEgaWYgbm90LgotICAgICAqLyAKLSAgICBwdWJsaWMgaW50ICAgIGdldExpbmUgICAgICAgKCApIHsgcmV0dXJuIF9saW5lOyB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgY29sdW1uIG51bWJlciBvZiB0aGUgZXJyb3IsIGlmIGF2YWlsYWJsZSwgLTEgaWYgbm90LgotICAgICAqLyAKLSAgICBwdWJsaWMgaW50ICAgIGdldENvbHVtbiAgICAgKCApIHsgcmV0dXJuIF9jb2x1bW47IH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBmaWxlIGNoYXJhY3RlciBvZmZzZXQgb2YgdGhlIGVycm9yLCBpZiBhdmFpbGFibGUsIC0xIGlmIG5vdC4KLSAgICAgKi8gCi0gICAgcHVibGljIGludCAgICBnZXRPZmZzZXQgICAgICggKSB7IHJldHVybiBfb2Zmc2V0OyB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIGxvY2F0aW9uIG9iamVjdCBvZiB0aGUgZ2l2ZW4gdHlwZS4gIFhtbEN1cnNvci5jbGFzcyBhbmQKLSAgICAgKiBYbWxPYmplY3QuY2xhc3MgY2FuIGJlIHBhc3NlZCwgZm9yIGV4YW1wbGUuICBOdWxsIGlmIG5vdCBhdmFpbGFibGUuCi0gICAgICovIAotICAgIHB1YmxpYyBPYmplY3QgZ2V0TG9jYXRpb24gKCBPYmplY3QgdHlwZSApCi0gICAgewotICAgICAgICBpZiAodHlwZSA9PSBYbWxDdXJzb3IuY2xhc3MpCi0gICAgICAgICAgICByZXR1cm4gX2N1cnNvcjsKLSAgICAgICAgaWYgKHR5cGUgPT0gWG1sT2JqZWN0LmNsYXNzICYmIF9jdXJzb3IgIT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBfY3Vyc29yLmdldE9iamVjdCgpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbG9jYXRpb24gb2YgdGhlIGVycm9yIGFzIGFuIHtAbGluayBYbWxDdXJzb3J9LCBudWxsIGlmCi0gICAgICogbm90IGF2YWlsYWJsZS4KLSAgICAgKi8gCi0gICAgcHVibGljIFhtbEN1cnNvciBnZXRDdXJzb3JMb2NhdGlvbiAoICkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoWG1sQ3Vyc29yKSBnZXRMb2NhdGlvbiggWG1sQ3Vyc29yLmNsYXNzICk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIGxvY2F0aW9uIG9mIHRoZSBlcnJvciBhcyBhbiB7QGxpbmsgWG1sT2JqZWN0fSwgbnVsbCBpZgotICAgICAqIG5vdCBhdmFpbGFibGUuCi0gICAgICovIAotICAgIHB1YmxpYyBYbWxPYmplY3QgZ2V0T2JqZWN0TG9jYXRpb24gKCApCi0gICAgewotICAgICAgICByZXR1cm4gKFhtbE9iamVjdCkgZ2V0TG9jYXRpb24oIFhtbE9iamVjdC5jbGFzcyApOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByb2R1Y2VzIGEgc3RhbmRhcmQgc3RyaW5nIGZvciB0aGUgZXJyb3IgbWVzc2FnZSwgY29tcGxldGUgd2l0aAotICAgICAqIGZpbGVuYW1lIGFuZCBsb2NhdGlvbiBvZmZzZXRzIGlmIGF2YWlsYWJsZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nICggKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvU3RyaW5nKCBudWxsICk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUHJvZHVjZXMgYSBzdGFuZGFyZCBzdHJpbmcgd2l0aCB0aGUgZXJyb3IgbWVzc2FnZS4gIElmIGEgbm9uLW51bGwKLSAgICAgKiBVUkkgaXMgc3VwcGxpZWQsIHNvdXJjZSBuYW1lcyBhcmUgcmVsYXRpdml6ZWQgYWdhaW5zdCB0aGUgZ2l2ZW4KLSAgICAgKiBVUkkuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZyAoIFVSSSBiYXNlICkKLSAgICB7Ci0gICAgICAgIC8vIG1vZGlmaWVkIHRvIGNhcmVmdWxseSBtYXRjaCB0aGUgSURFJ3MKLSAgICAgICAgLy8gd29ya3Nob3Aud29ya3NwYWNlLmFudC5BbnRMb2dnZXIgcmVnZXgKLSAgICAgICAgLy8gd2hpY2ggYWxzbyBtYXRjaGVzIGphdmFjIChkYXZpZGJhdSkKLQotICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLSAgICAgICAgU3RyaW5nIHNvdXJjZSA9IGZvcm1hdHRlZEZpbGVOYW1lKGdldFNvdXJjZU5hbWUoKSwgYmFzZSk7Ci0KLSAgICAgICAgaWYgKCBzb3VyY2UgIT0gbnVsbCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNiLmFwcGVuZCggc291cmNlICk7Ci0gICAgICAgICAgICBpbnQgbGluZSA9IGdldExpbmUoKTsKLSAgICAgICAgICAgIGlmICggbGluZSA8IDAgKQotICAgICAgICAgICAgICAgIGxpbmUgPSAwOwotCi0gICAgICAgICAgICBzYi5hcHBlbmQoICc6JyApOwotICAgICAgICAgICAgc2IuYXBwZW5kKCBsaW5lICk7Ci0gICAgICAgICAgICBzYi5hcHBlbmQoICc6JyApOwotICAgICAgICAgICAgaWYgKGdldENvbHVtbigpID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIGdldENvbHVtbigpICk7Ci0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKCAnOicgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNiLmFwcGVuZCgiICIpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoICggZ2V0U2V2ZXJpdHkoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU0VWRVJJVFlfRVJST1IgICA6IHNiLmFwcGVuZCggImVycm9yOiAiICk7ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNFVkVSSVRZX1dBUk5JTkcgOiBzYi5hcHBlbmQoICJ3YXJuaW5nOiAiICk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTRVZFUklUWV9JTkZPIDogYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgbXNnID0gZ2V0TWVzc2FnZSgpOwotCi0gICAgICAgIHNiLmFwcGVuZCggbXNnID09IG51bGwgPyAiPFVuc3BlY2lmaWVkIG1lc3NhZ2U+IiA6IG1zZyApOwotCi0gICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOwotICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2NmYxOWQuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotCi0vKioKLSAqIEEgY2hlY2tlZCBleGNlcHRpb24gdGhhdCBjYW4gYmUgdGhyb3duIHdoaWxlIHByb2Nlc3NpbmcsCi0gKiBwYXJzaW5nLCBvciBjb21waWxpbmcgWE1MLiAgTWF5IGNvbnRhaW4gYW55IG51bWJlciBvZiB7QGxpbmsgWG1sRXJyb3J9Ci0gKiBvYmplY3RzLgotICogPHA+Ci0gKiBAc2VlIFhtbEVycm9yCi0gKiBAc2VlIFhtbFJ1bnRpbWVFeGNlcHRpb24KLSAqLwotcHVibGljIGNsYXNzIFhtbEV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbgotewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotICAgIAotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYW4gWG1sRXhjZXB0aW9uIGZyb20gYSBtZXNzYWdlLgotICAgICAqLyAKLSAgICBwdWJsaWMgWG1sRXhjZXB0aW9uICggU3RyaW5nIG0gICAgICAgICAgICAgICkgeyBzdXBlciggbSApOyAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhbiBYbWxFeGNlcHRpb24gZnJvbSBhIG1lc3NhZ2UgYW5kIGEgY2F1c2UuCi0gICAgICovIAotICAgIHB1YmxpYyBYbWxFeGNlcHRpb24gKCBTdHJpbmcgbSwgVGhyb3dhYmxlIHQgKSB7IHN1cGVyKCBtLCB0ICk7IH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGFuIFhtbEV4Y2VwdGlvbiBmcm9tIGEgY2F1c2UuCi0gICAgICovIAotICAgIHB1YmxpYyBYbWxFeGNlcHRpb24gKCBUaHJvd2FibGUgdCAgICAgICAgICAgKSB7IHN1cGVyKCB0ICk7ICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGFuIFhtbEV4Y2VwdGlvbiBmcm9tIGFuIHtAbGluayBYbWxFcnJvcn0uCi0gICAgICovIAotICAgIHB1YmxpYyBYbWxFeGNlcHRpb24gKCBYbWxFcnJvciBlcnJvciApCi0gICAgewotICAgICAgICB0aGlzKCBlcnJvci50b1N0cmluZygpLCBudWxsLCBlcnJvciApOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYW4gWG1sRXhjZXB0aW9uIGZyb20gYSBtZXNzYWdlLCBhIGNhdXNlLCBhbmQgYW4ge0BsaW5rIFhtbEVycm9yfS4KLSAgICAgKi8gCi0gICAgcHVibGljIFhtbEV4Y2VwdGlvbiAoIFN0cmluZyBtLCBUaHJvd2FibGUgdCwgWG1sRXJyb3IgZXJyb3IgKQotICAgIHsKLSAgICAgICAgdGhpcyggbSwgdCwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdCggZXJyb3IgKSApOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGFuIFhtbEV4Y2VwdGlvbiBmcm9tIGEgbWVzc2FnZSwgYSBjYXVzZSwgYW5kIGEgY29sbGVjdGlvbiBvZiB7QGxpbmsgWG1sRXJyb3IgWG1sRXJyb3JzfS4KLSAgICAgKi8gCi0gICAgcHVibGljIFhtbEV4Y2VwdGlvbiAoIFN0cmluZyBtLCBUaHJvd2FibGUgdCwgQ29sbGVjdGlvbiBlcnJvcnMgKQotICAgIHsKLSAgICAgICAgc3VwZXIoIG0sIHQgKTsKLQotICAgICAgICBpZiAoZXJyb3JzICE9IG51bGwpCi0gICAgICAgICAgICBfZXJyb3JzID0gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdCggbmV3IEFycmF5TGlzdCggZXJyb3JzICkgKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGFuIFhtbEV4Y2VwdGlvbiBmcm9tIGFuIHtAbGluayBYbWxSdW50aW1lRXhjZXB0aW9ufS4KLSAgICAgKi8gCi0gICAgcHVibGljIFhtbEV4Y2VwdGlvbiAoIFhtbFJ1bnRpbWVFeGNlcHRpb24geG1sUnVudGltZUV4Y2VwdGlvbiApCi0gICAgewotICAgICAgICBzdXBlcigKLSAgICAgICAgICAgIHhtbFJ1bnRpbWVFeGNlcHRpb24uZ2V0TWVzc2FnZSgpLCB4bWxSdW50aW1lRXhjZXB0aW9uLmdldENhdXNlKCkgKTsKLQotICAgICAgICBDb2xsZWN0aW9uIGVycm9ycyA9IHhtbFJ1bnRpbWVFeGNlcHRpb24uZ2V0RXJyb3JzKCk7Ci0KLSAgICAgICAgaWYgKGVycm9ycyAhPSBudWxsKQotICAgICAgICAgICAgX2Vycm9ycyA9IENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoIG5ldyBBcnJheUxpc3QoIGVycm9ycyApICk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIGZpcnN0IHtAbGluayBYbWxFcnJvciBYbWxFcnJvcnN9IHRoYXQgY2F1c2VkIHRoZSBleGNlcHRpb24sIGlmIGFueS4KLSAgICAgKi8gCi0gICAgcHVibGljIFhtbEVycm9yIGdldEVycm9yICggKQotICAgIHsKLSAgICAgICAgaWYgKF9lcnJvcnMgPT0gbnVsbCB8fCBfZXJyb3JzLnNpemUoKSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgcmV0dXJuIChYbWxFcnJvcikgX2Vycm9ycy5nZXQoIDAgKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiB7QGxpbmsgWG1sRXJyb3IgWG1sRXJyb3JzfSB0aGF0IGNhdXNlZCB0aGUgZXhjZXB0aW9uLCBpZiBhbnkuCi0gICAgICovIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGdldEVycm9ycyAoICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfZXJyb3JzOwotICAgIH0KLQotICAgIHByaXZhdGUgTGlzdCBfZXJyb3JzOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGYWN0b3J5SG9vay5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NGZmZWUuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLQotaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOwotCi1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbTsKLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBBIGhvb2sgZm9yIHRoZSBYTUwgQmVhbiBGYWN0b3J5IG1lY2hhbmlzbS4KLSAqIFByb3ZpZGVkIGZvciBhZHZhbmNlZCB1c2VycyB3aG8gd2lzaCB0byBwcm92aWRlIHRoZWlyIG93bgotICogaW1wbGVtZW50YXRpb24gb2YgdGhlIEZhY3RvcnkucGFyc2UgbWV0aG9kcy4gVGhpcyBpcyB1c2VkLCBmb3IgZXhhbXBsZSwKLSAqIHRvIGRlZmVyIHJlYWRpbmcgWE1MIHN0cmVhbXMgdW50aWwgbmVlZGVkLgotICogPHA+Ci0gKiBUbyB1c2UgdGhlIGhvb2ssIGNhbGwgWG1sRmFjdG9yeUhvb2suVGhyZWFkQ29udGV4dC5zZXRIb29rKCksIHBhc3NpbmcKLSAqIHlvdXIgb3duIFhtbEZhY3RvcnlIb29rIGltcGxlbWVudGF0aW9uLiAgVGhlbiBldmVyeSBjYWxsIHRvIGEgRmFjdG9yeQotICogbWV0aG9kIHdpbGwgYmUgZGVsZ2F0ZWQgdG8geW91ciBob29rLgotICoKLSAqIDxwcmU+Ci0gKiBNeUhvb2sgaG9vayA9IG5ldyBNeUhvb2soKTsKLSAqIFhtbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQuc2V0SG9vayhob29rKTsKLSAqIC8vIHRoaXMgcmVzdWx0cyBpbiBhIGNhbGwgdG8gaG9vay5wYXJzZSguLi4pCi0gKiBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZShuZXcgRmlsZSgidGVzdC54bWwiKSk7Ci0gKiA8L3ByZT4KLSAqIAotICogSWYgdGhlIGhvb2sgbmVlZHMgdG8gdHVybiBhcm91bmQgYW5kIGludm9rZSB0aGUgYnVpbHQtaW4gcGFyc2VycywgdGhlbgotICogaXQgc2hvdWxkIGRvIHNvIGJ5IGNhbGxpbmcgdGhlIGFwcHJvcHJpYXRlIG1ldGhvZCBvbiB0aGUgcGFzc2VkCi0gKiBTY2hlbWFUeXBlTG9hZGVyLiAgU2luY2UgU2NoZW1hVHlwZUxvYWRlci5wYXJzZSgpIG1ldGhvZHMgZGVsZWdhdGUKLSAqIHRvIHRoZSByZWdpc3RlcmVkIGhvb2ssIGEgaG9vayB0aGF0IHdpc2hlcyB0byBhY3R1YWxseSBpbnZva2UgdGhlCi0gKiBkZWZhdWx0IHBhcnNlciB3aXRob3V0IGhhdmluZyBpdHNlbGYgY2FsbGVkIGJhY2sgYWdhaW4gc2hvdWxkCi0gKiB1bnJlZ2lzdGVyIGl0c2VsZiBiZWZvcmUgY2FsbGluZyBsb2FkZXIucGFyc2UoKSwgYW5kIHRoZW4gcmUtcmVnaXN0ZXIKLSAqIGl0c2VsZiBhZ2FpbiBhZnRlciB0aGUgY2FsbC4KLSAqIDxwcmU+Ci0gKiB2b2lkIHBhcnNlKFNjaGVtYVR5cGVMb2FkZXIgbG9hZGVyLCAuLi4pCi0gKiB7Ci0gKiAgICAgWG1sRmFjdG9yeUhvb2sgcmVtZW1iZXIgPSBYbWxGYWN0b3J5SG9vay5UaHJlYWRDb250ZXh0LmdldEhvb2soKTsKLSAqICAgICBYbWxGYWN0b3J5SG9vay5UaHJlYWRDb250ZXh0LnNldEhvb2sobnVsbCk7Ci0gKiAgICAgbG9hZGVyLnBhcnNlKC4uLik7IC8vIGlzbid0IGhvb2tlZC4KLSAqICAgICBYbWxGYWN0b3J5SG9vay5UaHJlYWRDb250ZXh0LnNldEhvb2socmVtZW1iZXIpOwotICogfQotICogPC9wcmU+Ci0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgWG1sRmFjdG9yeUhvb2sKLXsKLSAgICAvKiogSG9va3MgRmFjdG9yeS5uZXdJbnN0YW5jZSBjYWxscyAqLwotICAgIHB1YmxpYyBYbWxPYmplY3QgbmV3SW5zdGFuY2UgKCBTY2hlbWFUeXBlTG9hZGVyIGxvYWRlciwgU2NoZW1hVHlwZSB0eXBlLCBYbWxPcHRpb25zIG9wdGlvbnMgKTsKLSAgICAvKiogSG9va3MgRmFjdG9yeS5wYXJzZSBjYWxscyAqLwotICAgIHB1YmxpYyBYbWxPYmplY3QgcGFyc2UgKCBTY2hlbWFUeXBlTG9hZGVyIGxvYWRlciwgU3RyaW5nIHhtbFRleHQsIFNjaGVtYVR5cGUgdHlwZSwgWG1sT3B0aW9ucyBvcHRpb25zICkgdGhyb3dzIFhtbEV4Y2VwdGlvbjsKLSAgICAvKiogSG9va3MgRmFjdG9yeS5wYXJzZSBjYWxscyAqLwotICAgIHB1YmxpYyBYbWxPYmplY3QgcGFyc2UgKCBTY2hlbWFUeXBlTG9hZGVyIGxvYWRlciwgSW5wdXRTdHJlYW0gamlvaXMsIFNjaGVtYVR5cGUgdHlwZSwgWG1sT3B0aW9ucyBvcHRpb25zICkgdGhyb3dzIFhtbEV4Y2VwdGlvbiwgSU9FeGNlcHRpb247Ci0gICAgLyoqIEhvb2tzIEZhY3RvcnkucGFyc2UgY2FsbHMgKi8KLSAgICBwdWJsaWMgWG1sT2JqZWN0IHBhcnNlICggU2NoZW1hVHlwZUxvYWRlciBsb2FkZXIsIFhNTFN0cmVhbVJlYWRlciB4c3IsIFNjaGVtYVR5cGUgdHlwZSwgWG1sT3B0aW9ucyBvcHRpb25zICkgdGhyb3dzIFhtbEV4Y2VwdGlvbjsKLSAgICAvKiogSG9va3MgRmFjdG9yeS5wYXJzZSBjYWxscyAqLwotICAgIHB1YmxpYyBYbWxPYmplY3QgcGFyc2UgKCBTY2hlbWFUeXBlTG9hZGVyIGxvYWRlciwgUmVhZGVyIGppb3IsIFNjaGVtYVR5cGUgdHlwZSwgWG1sT3B0aW9ucyBvcHRpb25zICkgdGhyb3dzIFhtbEV4Y2VwdGlvbiwgSU9FeGNlcHRpb247Ci0gICAgLyoqIEhvb2tzIEZhY3RvcnkucGFyc2UgY2FsbHMgKi8KLSAgICBwdWJsaWMgWG1sT2JqZWN0IHBhcnNlICggU2NoZW1hVHlwZUxvYWRlciBsb2FkZXIsIE5vZGUgbm9kZSwgU2NoZW1hVHlwZSB0eXBlLCBYbWxPcHRpb25zIG9wdGlvbnMgKSB0aHJvd3MgWG1sRXhjZXB0aW9uOwotICAgIC8qKiBIb29rcyBGYWN0b3J5LnBhcnNlIGNhbGxzICovCi0gICAgcHVibGljIFhtbE9iamVjdCBwYXJzZSAoIFNjaGVtYVR5cGVMb2FkZXIgbG9hZGVyLCBYTUxJbnB1dFN0cmVhbSB4aXMsIFNjaGVtYVR5cGUgdHlwZSwgWG1sT3B0aW9ucyBvcHRpb25zICkgdGhyb3dzIFhtbEV4Y2VwdGlvbiwgWE1MU3RyZWFtRXhjZXB0aW9uOwotICAgIC8qKiBIb29rcyBGYWN0b3J5Lm5ld1htbFNheEhhbmRsZXIgY2FsbHMgKi8KLSAgICBwdWJsaWMgWG1sU2F4SGFuZGxlciBuZXdYbWxTYXhIYW5kbGVyICggU2NoZW1hVHlwZUxvYWRlciBsb2FkZXIsIFNjaGVtYVR5cGUgdHlwZSwgWG1sT3B0aW9ucyBvcHRpb25zICk7Ci0KLSAgICAvKioKLSAgICAgKiBVc2VkIHRvIG1hbmFnZSB0aGUgWG1sRmFjdG9yeUhvb2sgZm9yIHRoZSBjdXJyZW50IHRocmVhZC4KLSAgICAgKi8gCi0gICAgcHVibGljIGZpbmFsIHN0YXRpYyBjbGFzcyBUaHJlYWRDb250ZXh0Ci0gICAgewotICAgICAgICBwcml2YXRlIHN0YXRpYyBUaHJlYWRMb2NhbCB0aHJlYWRIb29rID0gbmV3IFRocmVhZExvY2FsKCk7Ci0gICAgICAgIAotICAgICAgICAvKioKLSAgICAgICAgICogUmV0dXJucyB0aGUgY3VycmVudCB0aHJlYWQncyBob29rLCBvciBudWxsIGlmIG5vbmUuCi0gICAgICAgICAqLyAKLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxGYWN0b3J5SG9vayBnZXRIb29rKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChYbWxGYWN0b3J5SG9vayl0aHJlYWRIb29rLmdldCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFNldHMgdGhlIGhvb2sgZm9yIHRoZSBjdXJyZW50IHRocmVhZC4KLSAgICAgICAgICovIAotICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0SG9vayhYbWxGYWN0b3J5SG9vayBob29rKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJlYWRIb29rLnNldChob29rKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHByb3ZpZGVkIHRvIHByZXZlbnQgdW53YW50ZWQgY29uc3RydWN0aW9uCi0gICAgICAgIHByaXZhdGUgVGhyZWFkQ29udGV4dCgpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMDY3ZDIuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7Ci0KLQotLyoqCi0gKiBDb3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotICogPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNmbG9hdCI+eHM6ZmxvYXQ8L2E+IHR5cGUuCi0gKiA8cD4KLSAqIE5hdHVyYWxseSwgY29udmVydGlibGUgdG8gYSBKYXZhIGZsb2F0LgotICovIAotcHVibGljIGludGVyZmFjZSBYbWxGbG9hdCBleHRlbmRzIFhtbEFueVNpbXBsZVR5cGUKLXsKLSAgICAvKiogVGhlIGNvbnN0YW50IHtAbGluayBTY2hlbWFUeXBlfSBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlIHR5cGUgPSBYbWxCZWFucy5nZXRCdWlsdGluVHlwZVN5c3RlbSgpLnR5cGVGb3JIYW5kbGUoIl9CSV9mbG9hdCIpOwotICAgIAotICAgIC8qKiBSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSBmbG9hdCAqLwotICAgIGZsb2F0IGdldEZsb2F0VmFsdWUoKTsKLSAgICAvKiogU2V0cyB0aGlzIHZhbHVlIGFzIGEgZmxvYXQgKi8KLSAgICB2b2lkIHNldEZsb2F0VmFsdWUoZmxvYXQgdik7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSBmbG9hdAotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIGJ5IHtAbGluayAjZ2V0RmxvYXRWYWx1ZX0KLSAgICAgKiovCi0gICAgZmxvYXQgZmxvYXRWYWx1ZSgpOwotICAgIC8qKgotICAgICAqIFNldHMgdGhpcyB2YWx1ZSBhcyBhIGZsb2F0Ci0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgYnkge0BsaW5rICNzZXRGbG9hdFZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIHNldChmbG9hdCB2KTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gICAgICogb2Yge0BsaW5rIFhtbEZsb2F0fS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEZhY3RvcnkKLSAgICB7Ci0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxGbG9hdH0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxGbG9hdCBuZXdJbnN0YW5jZSgpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEZsb2F0KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxGbG9hdH0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxGbG9hdCBuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgewotICAgICAgICAgIHJldHVybiAoWG1sRmxvYXQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gaW1tdXRhYmxlIHtAbGluayBYbWxGbG9hdH0gdmFsdWUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxGbG9hdCBuZXdWYWx1ZShPYmplY3Qgb2JqKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxGbG9hdCkgdHlwZS5uZXdWYWx1ZSggb2JqICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRmxvYXR9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsxMi4zNGUrNSZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEZsb2F0IHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEZsb2F0KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRmxvYXR9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsxMi4zNGUrNSZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEZsb2F0IHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxGbG9hdCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEZsb2F0fSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxGbG9hdCBwYXJzZShqYXZhLmlvLkZpbGUgZikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEZsb2F0KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRmxvYXR9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEZsb2F0IHBhcnNlKGphdmEuaW8uRmlsZSBmLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEZsb2F0KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRmxvYXR9IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRmxvYXQgcGFyc2UoamF2YS5uZXQuVVJMIHUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxGbG9hdCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgbnVsbCApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxGbG9hdH0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxGbG9hdCBwYXJzZShqYXZhLm5ldC5VUkwgdSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxGbG9hdCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxGbG9hdH0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxGbG9hdCBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRmxvYXQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRmxvYXR9IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRmxvYXQgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxGbG9hdCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxGbG9hdH0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxGbG9hdCBwYXJzZShqYXZhLmlvLlJlYWRlciByKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRmxvYXQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxGbG9hdH0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxGbG9hdCBwYXJzZShqYXZhLmlvLlJlYWRlciByLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEZsb2F0KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRmxvYXR9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxGbG9hdCBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxGbG9hdCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEZsb2F0fSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRmxvYXQgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEZsb2F0KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRmxvYXR9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRmxvYXQgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sRmxvYXQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEZsb2F0fSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEZsb2F0IHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxGbG9hdCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sRmxvYXR9IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEZsb2F0IHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEZsb2F0KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxGbG9hdH0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sRmxvYXQgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uewotICAgICAgICAgIHJldHVybiAoWG1sRmxvYXQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgRmFjdG9yeSgpIHsgfSAvLyBObyBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGFsbG93ZWQKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5LmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjQ5YzRlLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTcgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKLQotCi0vKioKLSAqIENvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gKiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2dEYXkiPnhzOmdEYXk8L2E+IHR5cGUuCi0gKiBBIGdEYXkgc3BlY2lmaWVzIG9ubHkgYSBkYXktb2YtbW9udGguCi0gKiA8cD4KLSAqIENvbnZlcnRpYmxlIHRvIHtAbGluayBDYWxlbmRhcn0sIHtAbGluayBHRGF0ZX0sIG9yIGFuIGludC4KLSAqIAotICogQHNlZSBYbWxDYWxlbmRhcgotICogQHNlZSBHRGF0ZQotICovIAotcHVibGljIGludGVyZmFjZSBYbWxHRGF5IGV4dGVuZHMgWG1sQW55U2ltcGxlVHlwZQotewotICAgIC8qKiBUaGUgY29uc3RhbnQge0BsaW5rIFNjaGVtYVR5cGV9IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGUgdHlwZSA9IFhtbEJlYW5zLmdldEJ1aWx0aW5UeXBlU3lzdGVtKCkudHlwZUZvckhhbmRsZSgiX0JJX2dEYXkiKTsKLSAgICAKLSAgICAvKiogUmV0dXJucyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIENhbGVuZGFyfSAqLwotICAgIENhbGVuZGFyIGdldENhbGVuZGFyVmFsdWUoKTsKLSAgICAvKiogU2V0cyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIENhbGVuZGFyfSAqLwotICAgIHZvaWQgc2V0Q2FsZW5kYXJWYWx1ZShDYWxlbmRhciBjKTsKLSAgICAvKiogUmV0dXJucyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIEdEYXRlfSAqLwotICAgIEdEYXRlIGdldEdEYXRlVmFsdWUoKTsKLSAgICAvKiogU2V0cyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIEdEYXRlU3BlY2lmaWNhdGlvbn0gKi8KLSAgICB2b2lkIHNldEdEYXRlVmFsdWUoR0RhdGUgZ2QpOwotICAgIC8qKiBSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYW4gaW50IGZyb20gMS0zMSAqLwotICAgIGludCBnZXRJbnRWYWx1ZSgpOwotICAgIC8qKiBTZXRzIHRoaXMgdmFsdWUgYXMgYW4gaW50IGZyb20gMS0zMSAqLwotICAgIHZvaWQgc2V0SW50VmFsdWUoaW50IHYpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIENhbGVuZGFyfQotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNnZXRDYWxlbmRhclZhbHVlfQotICAgICAqKi8KLSAgICBDYWxlbmRhciBjYWxlbmRhclZhbHVlKCk7Ci0gICAgLyoqCi0gICAgICogU2V0cyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIENhbGVuZGFyfQotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNzZXRDYWxlbmRhclZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIHNldChDYWxlbmRhciBjKTsKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSB7QGxpbmsgR0RhdGV9Ci0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI2dldEdEYXRlVmFsdWV9Ci0gICAgICoqLwotICAgIEdEYXRlIGdEYXRlVmFsdWUoKTsKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoaXMgdmFsdWUgYXMgYSB7QGxpbmsgR0RhdGVTcGVjaWZpY2F0aW9ufQotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNzZXRHRGF0ZVZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIHNldChHRGF0ZVNwZWNpZmljYXRpb24gZ2QpOwotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhbiBpbnQgZnJvbSAxLTMxCi0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI2dldEludFZhbHVlfQotICAgICAqKi8KLSAgICBpbnQgaW50VmFsdWUoKTsKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoaXMgdmFsdWUgYXMgYW4gaW50IGZyb20gMS0zMQotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNzZXRJbnRWYWx1ZX0KLSAgICAgKiovCi0gICAgdm9pZCBzZXQoaW50IHYpOwotICAgIAotICAgIC8qKgotICAgICAqIEEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSAgICAgKiBvZiB7QGxpbmsgWG1sR0RheX0uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBGYWN0b3J5Ci0gICAgewotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sR0RheX0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHRGF5IG5ld0luc3RhbmNlKCkgewotICAgICAgICAgIHJldHVybiAoWG1sR0RheSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sR0RheX0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHRGF5IG5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHRGF5KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGltbXV0YWJsZSB7QGxpbmsgWG1sR0RheX0gdmFsdWUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHRGF5IG5ld1ZhbHVlKE9iamVjdCBvYmopIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdEYXkpIHR5cGUubmV3VmFsdWUoIG9iaiApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdEYXl9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDstLS0xNCZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdEYXkgcGFyc2UoamF2YS5sYW5nLlN0cmluZyBzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR0RheSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdEYXl9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDstLS0xNCZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdEYXkgcGFyc2UoamF2YS5sYW5nLlN0cmluZyBzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdEYXkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHRGF5fSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHRGF5IHBhcnNlKGphdmEuaW8uRmlsZSBmKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR0RheSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdEYXl9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdEYXkgcGFyc2UoamF2YS5pby5GaWxlIGYsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR0RheSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdEYXl9IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR0RheSBwYXJzZShqYXZhLm5ldC5VUkwgdSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdEYXkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG51bGwgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sR0RheX0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHRGF5IHBhcnNlKGphdmEubmV0LlVSTCB1LCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdEYXkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG9wdGlvbnMgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sR0RheX0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHRGF5IHBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0gaXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHRGF5KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdEYXl9IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR0RheSBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdEYXkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sR0RheX0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHRGF5IHBhcnNlKGphdmEuaW8uUmVhZGVyIHIpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHRGF5KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sR0RheX0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHRGF5IHBhcnNlKGphdmEuaW8uUmVhZGVyIHIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR0RheSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdEYXl9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHRGF5IHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdEYXkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHRGF5fSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR0RheSBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR0RheSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdEYXl9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR0RheSBwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHRGF5KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHRGF5fSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdEYXkgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdEYXkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdEYXl9IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdEYXkgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR0RheSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sR0RheX0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR0RheSBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb257Ci0gICAgICAgICAgcmV0dXJuIChYbWxHRGF5KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIEZhY3RvcnkoKSB7IH0gLy8gTm8gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBhbGxvd2VkCi0gICAgfQotfQotCmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2YjA3OGEuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE3ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci0KLQotLyoqCi0gKiBDb3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotICogPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNnTW9udGgiPnhzOmdNb250aDwvYT4gdHlwZS4KLSAqIEEgZ01vbnRoIHNwZWNpZmllcyBvbmx5IGEgbW9udGgtb2YteWVhci4KLSAqIDxwPgotICogQ29udmVydGlibGUgdG8ge0BsaW5rIENhbGVuZGFyfSwge0BsaW5rIEdEYXRlfSwgb3IgYW4gaW50LgotICogCi0gKiBAc2VlIFhtbENhbGVuZGFyCi0gKiBAc2VlIEdEYXRlCi0gKi8gCi1wdWJsaWMgaW50ZXJmYWNlIFhtbEdNb250aCBleHRlbmRzIFhtbEFueVNpbXBsZVR5cGUKLXsKLSAgICAvKiogVGhlIGNvbnN0YW50IHtAbGluayBTY2hlbWFUeXBlfSBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlIHR5cGUgPSBYbWxCZWFucy5nZXRCdWlsdGluVHlwZVN5c3RlbSgpLnR5cGVGb3JIYW5kbGUoIl9CSV9nTW9udGgiKTsKLSAgICAKLSAgICAvKiogUmV0dXJucyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIENhbGVuZGFyfSAqLwotICAgIENhbGVuZGFyIGdldENhbGVuZGFyVmFsdWUoKTsKLSAgICAvKiogU2V0cyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIENhbGVuZGFyfSAqLwotICAgIHZvaWQgc2V0Q2FsZW5kYXJWYWx1ZShDYWxlbmRhciBjKTsKLSAgICAvKiogUmV0dXJucyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIEdEYXRlfSAqLwotICAgIEdEYXRlIGdldEdEYXRlVmFsdWUoKTsKLSAgICAvKiogU2V0cyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIEdEYXRlU3BlY2lmaWNhdGlvbn0gKi8KLSAgICB2b2lkIHNldEdEYXRlVmFsdWUoR0RhdGUgZ2QpOwotICAgIC8qKiBSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYW4gaW50IGZyb20gMS0xMiAqLwotICAgIGludCBnZXRJbnRWYWx1ZSgpOwotICAgIC8qKiBTZXRzIHRoaXMgdmFsdWUgYXMgYW4gaW50IGZyb20gMS0xMiAqLwotICAgIHZvaWQgc2V0SW50VmFsdWUoaW50IHYpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIENhbGVuZGFyfQotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNnZXRDYWxlbmRhclZhbHVlfQotICAgICAqKi8KLSAgICBDYWxlbmRhciBjYWxlbmRhclZhbHVlKCk7Ci0gICAgLyoqCi0gICAgICogU2V0cyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIENhbGVuZGFyfQotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNzZXRDYWxlbmRhclZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIHNldChDYWxlbmRhciBjKTsKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSB7QGxpbmsgR0RhdGV9Ci0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI2dldEdEYXRlVmFsdWV9Ci0gICAgICoqLwotICAgIEdEYXRlIGdEYXRlVmFsdWUoKTsKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoaXMgdmFsdWUgYXMgYSB7QGxpbmsgR0RhdGVTcGVjaWZpY2F0aW9ufQotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNzZXRHRGF0ZVZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIHNldChHRGF0ZVNwZWNpZmljYXRpb24gZ2QpOwotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhbiBpbnQgZnJvbSAxLTEyCi0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI2dldEludFZhbHVlfQotICAgICAqKi8KLSAgICBpbnQgaW50VmFsdWUoKTsKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoaXMgdmFsdWUgYXMgYW4gaW50IGZyb20gMS0xMgotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNzZXRJbnRWYWx1ZX0KLSAgICAgKiovCi0gICAgdm9pZCBzZXQoaW50IHYpOwotCi0gICAgLyoqCi0gICAgICogQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotICAgICAqIG9mIHtAbGluayBYbWxHTW9udGh9LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgRmFjdG9yeQotICAgIHsKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbEdNb250aH0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHTW9udGggbmV3SW5zdGFuY2UoKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHTW9udGgpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbEdNb250aH0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHTW9udGggbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdNb250aCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBpbW11dGFibGUge0BsaW5rIFhtbEdNb250aH0gdmFsdWUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHTW9udGggbmV3VmFsdWUoT2JqZWN0IG9iaikgewotICAgICAgICAgIHJldHVybiAoWG1sR01vbnRoKSB0eXBlLm5ld1ZhbHVlKCBvYmogKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHTW9udGh9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDstLTA2Jmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR01vbnRoIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdNb250aCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdNb250aH0gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0Oy0tMDYmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHTW9udGggcGFyc2UoamF2YS5sYW5nLlN0cmluZyBzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdNb250aCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdNb250aH0gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR01vbnRoIHBhcnNlKGphdmEuaW8uRmlsZSBmKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR01vbnRoKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sR01vbnRofSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHTW9udGggcGFyc2UoamF2YS5pby5GaWxlIGYsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR01vbnRoKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sR01vbnRofSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdNb250aCBwYXJzZShqYXZhLm5ldC5VUkwgdSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdNb250aCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgbnVsbCApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHTW9udGh9IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR01vbnRoIHBhcnNlKGphdmEubmV0LlVSTCB1LCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdNb250aCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHTW9udGh9IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR01vbnRoIHBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0gaXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHTW9udGgpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sR01vbnRofSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdNb250aCBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdNb250aCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHTW9udGh9IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR01vbnRoIHBhcnNlKGphdmEuaW8uUmVhZGVyIHIpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHTW9udGgpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHTW9udGh9IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR01vbnRoIHBhcnNlKGphdmEuaW8uUmVhZGVyIHIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR01vbnRoKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sR01vbnRofSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR01vbnRoIHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdNb250aCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdNb250aH0gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdNb250aCBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR01vbnRoKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sR01vbnRofSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdNb250aCBwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHTW9udGgpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdNb250aH0gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHTW9udGggcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdNb250aCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sR01vbnRofSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHTW9udGggcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR01vbnRoKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHTW9udGh9IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdNb250aCBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb257Ci0gICAgICAgICAgcmV0dXJuIChYbWxHTW9udGgpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgRmFjdG9yeSgpIHsgfSAvLyBObyBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGFsbG93ZWQKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNmMWYwZS4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMDMgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7Ci0KLQotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKLQotCi0vKioKLSAqIENvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gKiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2dNb250aERheSI+eHM6Z01vbnRoRGF5PC9hPiB0eXBlLgotICogQSBnTW9udGhEYXkgc3BlY2lmaWVzIGEgZGF5IG9mIGEgc3BlY2lmaWMgbW9udGggd2l0aG91dCBzcGVjaWZ5aW5nIHRoZSB5ZWFyLgotICogPHA+Ci0gKiBDb252ZXJ0aWJsZSB0byB7QGxpbmsgQ2FsZW5kYXJ9IG9yIHtAbGluayBHRGF0ZX0uCi0gKiAKLSAqIEBzZWUgWG1sQ2FsZW5kYXIKLSAqIEBzZWUgR0RhdGUKLSAqLyAKLXB1YmxpYyBpbnRlcmZhY2UgWG1sR01vbnRoRGF5IGV4dGVuZHMgWG1sQW55U2ltcGxlVHlwZQotewotICAgIC8qKiBUaGUgY29uc3RhbnQge0BsaW5rIFNjaGVtYVR5cGV9IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGUgdHlwZSA9IFhtbEJlYW5zLmdldEJ1aWx0aW5UeXBlU3lzdGVtKCkudHlwZUZvckhhbmRsZSgiX0JJX2dNb250aERheSIpOwotICAgIAotICAgIC8qKiBSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSB7QGxpbmsgQ2FsZW5kYXJ9ICovCi0gICAgQ2FsZW5kYXIgZ2V0Q2FsZW5kYXJWYWx1ZSgpOwotICAgIC8qKiBTZXRzIHRoaXMgdmFsdWUgYXMgYSB7QGxpbmsgQ2FsZW5kYXJ9ICovCi0gICAgdm9pZCBzZXRDYWxlbmRhclZhbHVlKENhbGVuZGFyIGMpOwotICAgIC8qKiBSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSB7QGxpbmsgR0RhdGV9ICovCi0gICAgR0RhdGUgZ2V0R0RhdGVWYWx1ZSgpOwotICAgIC8qKiBTZXRzIHRoaXMgdmFsdWUgYXMgYSB7QGxpbmsgR0RhdGVTcGVjaWZpY2F0aW9ufSAqLwotICAgIHZvaWQgc2V0R0RhdGVWYWx1ZShHRGF0ZSBnZCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSB7QGxpbmsgQ2FsZW5kYXJ9Ci0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI2dldENhbGVuZGFyVmFsdWV9Ci0gICAgICoqLwotICAgIENhbGVuZGFyIGNhbGVuZGFyVmFsdWUoKTsKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoaXMgdmFsdWUgYXMgYSB7QGxpbmsgQ2FsZW5kYXJ9Ci0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI3NldENhbGVuZGFyVmFsdWV9Ci0gICAgICoqLwotICAgIHZvaWQgc2V0KENhbGVuZGFyIGMpOwotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBHRGF0ZX0KLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjZ2V0R0RhdGVWYWx1ZX0KLSAgICAgKiovCi0gICAgR0RhdGUgZ0RhdGVWYWx1ZSgpOwotICAgIC8qKgotICAgICAqIFNldHMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBHRGF0ZVNwZWNpZmljYXRpb259Ci0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI3NldEdEYXRlVmFsdWV9Ci0gICAgICoqLwotICAgIHZvaWQgc2V0KEdEYXRlU3BlY2lmaWNhdGlvbiBnZCk7Ci0KLSAgICAvKioKLSAgICAgKiBBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gICAgICogb2Yge0BsaW5rIFhtbEdNb250aERheX0uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBGYWN0b3J5Ci0gICAgewotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sR01vbnRoRGF5fSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdNb250aERheSBuZXdJbnN0YW5jZSgpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdNb250aERheSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sR01vbnRoRGF5fSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdNb250aERheSBuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgewotICAgICAgICAgIHJldHVybiAoWG1sR01vbnRoRGF5KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGltbXV0YWJsZSB7QGxpbmsgWG1sR01vbnRoRGF5fSB2YWx1ZSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdNb250aERheSBuZXdWYWx1ZShPYmplY3Qgb2JqKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHTW9udGhEYXkpIHR5cGUubmV3VmFsdWUoIG9iaiApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdNb250aERheX0gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0Oy0tMDYtMTQmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHTW9udGhEYXkgcGFyc2UoamF2YS5sYW5nLlN0cmluZyBzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR01vbnRoRGF5KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sR01vbnRoRGF5fSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7LS0wNi0xNCZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdNb250aERheSBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR01vbnRoRGF5KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sR01vbnRoRGF5fSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHTW9udGhEYXkgcGFyc2UoamF2YS5pby5GaWxlIGYpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHTW9udGhEYXkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHTW9udGhEYXl9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdNb250aERheSBwYXJzZShqYXZhLmlvLkZpbGUgZiwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHTW9udGhEYXkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHTW9udGhEYXl9IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR01vbnRoRGF5IHBhcnNlKGphdmEubmV0LlVSTCB1KSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR01vbnRoRGF5KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBudWxsICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdNb250aERheX0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHTW9udGhEYXkgcGFyc2UoamF2YS5uZXQuVVJMIHUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR01vbnRoRGF5KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBvcHRpb25zICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdNb250aERheX0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHTW9udGhEYXkgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdNb250aERheSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHTW9udGhEYXl9IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR01vbnRoRGF5IHBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0gaXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR01vbnRoRGF5KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdNb250aERheX0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHTW9udGhEYXkgcGFyc2UoamF2YS5pby5SZWFkZXIgcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdNb250aERheSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdNb250aERheX0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHTW9udGhEYXkgcGFyc2UoamF2YS5pby5SZWFkZXIgciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHTW9udGhEYXkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHTW9udGhEYXl9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHTW9udGhEYXkgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR01vbnRoRGF5KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sR01vbnRoRGF5fSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR01vbnRoRGF5IHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHTW9udGhEYXkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHTW9udGhEYXl9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR01vbnRoRGF5IHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdNb250aERheSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sR01vbnRoRGF5fSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdNb250aERheSBwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR01vbnRoRGF5KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHTW9udGhEYXl9IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdNb250aERheSBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHTW9udGhEYXkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdNb250aERheX0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR01vbnRoRGF5IHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbnsKLSAgICAgICAgICByZXR1cm4gKFhtbEdNb250aERheSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBGYWN0b3J5KCkgeyB9IC8vIE5vIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgYWxsb3dlZAotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjYxZmZlZS4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNyArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKLQotCi1pbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOwotCi0KLS8qKgotICogQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSAqIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZ1llYXIiPnhzOmdZZWFyPC9hPiB0eXBlLgotICogQSBnWWVhciBzcGVjaWZpZXMgYSBHcmVnb3JpYW4geWVhciAoQUQpLgotICogPHA+Ci0gKiBDb252ZXJ0aWJsZSB0byB7QGxpbmsgQ2FsZW5kYXJ9LCB7QGxpbmsgR0RhdGV9LCBvciBhbiBpbnQuCi0gKiAKLSAqIEBzZWUgWG1sQ2FsZW5kYXIKLSAqIEBzZWUgR0RhdGUKLSAqLyAKLXB1YmxpYyBpbnRlcmZhY2UgWG1sR1llYXIgZXh0ZW5kcyBYbWxBbnlTaW1wbGVUeXBlCi17Ci0gICAgLyoqIFRoZSBjb25zdGFudCB7QGxpbmsgU2NoZW1hVHlwZX0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZSB0eXBlID0gWG1sQmVhbnMuZ2V0QnVpbHRpblR5cGVTeXN0ZW0oKS50eXBlRm9ySGFuZGxlKCJfQklfZ1llYXIiKTsKLSAgICAKLSAgICAvKiogUmV0dXJucyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIENhbGVuZGFyfSAqLwotICAgIENhbGVuZGFyIGdldENhbGVuZGFyVmFsdWUoKTsKLSAgICAvKiogU2V0cyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIENhbGVuZGFyfSAqLwotICAgIHZvaWQgc2V0Q2FsZW5kYXJWYWx1ZShDYWxlbmRhciBjKTsKLSAgICAvKiogUmV0dXJucyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIEdEYXRlfSAqLwotICAgIEdEYXRlIGdldEdEYXRlVmFsdWUoKTsKLSAgICAvKiogU2V0cyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIEdEYXRlU3BlY2lmaWNhdGlvbn0gKi8KLSAgICB2b2lkIHNldEdEYXRlVmFsdWUoR0RhdGUgZ2QpOwotICAgIC8qKiBSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYW4gaW50IGZyb20gMS0zMSAqLwotICAgIGludCBnZXRJbnRWYWx1ZSgpOwotICAgIC8qKiBTZXRzIHRoaXMgdmFsdWUgYXMgYW4gaW50IGZyb20gMS0zMSAqLwotICAgIHZvaWQgc2V0SW50VmFsdWUoaW50IHYpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIENhbGVuZGFyfQotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNnZXRDYWxlbmRhclZhbHVlfQotICAgICAqKi8KLSAgICBDYWxlbmRhciBjYWxlbmRhclZhbHVlKCk7Ci0gICAgLyoqCi0gICAgICogU2V0cyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIENhbGVuZGFyfQotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNzZXRDYWxlbmRhclZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIHNldChDYWxlbmRhciBjKTsKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSB7QGxpbmsgR0RhdGV9Ci0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI2dldEdEYXRlVmFsdWV9Ci0gICAgICoqLwotICAgIEdEYXRlIGdEYXRlVmFsdWUoKTsKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoaXMgdmFsdWUgYXMgYSB7QGxpbmsgR0RhdGVTcGVjaWZpY2F0aW9ufQotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNzZXRHRGF0ZVZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIHNldChHRGF0ZVNwZWNpZmljYXRpb24gZ2QpOwotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhbiBpbnQgZnJvbSAxLTMxCi0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI2dldEludFZhbHVlfQotICAgICAqKi8KLSAgICBpbnQgaW50VmFsdWUoKTsKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoaXMgdmFsdWUgYXMgYW4gaW50IGZyb20gMS0zMQotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNzZXRJbnRWYWx1ZX0KLSAgICAgKiovCi0gICAgdm9pZCBzZXQoaW50IHYpOwotCi0gICAgLyoqCi0gICAgICogQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotICAgICAqIG9mIHtAbGluayBYbWxHWWVhcn0uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBGYWN0b3J5Ci0gICAgewotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sR1llYXJ9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR1llYXIgbmV3SW5zdGFuY2UoKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHWWVhcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sR1llYXJ9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR1llYXIgbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdZZWFyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGltbXV0YWJsZSB7QGxpbmsgWG1sR1llYXJ9IHZhbHVlICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR1llYXIgbmV3VmFsdWUoT2JqZWN0IG9iaikgewotICAgICAgICAgIHJldHVybiAoWG1sR1llYXIpIHR5cGUubmV3VmFsdWUoIG9iaiApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdZZWFyfSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7MjAwMyZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdZZWFyIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdZZWFyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sR1llYXJ9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsyMDAzJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR1llYXIgcGFyc2UoamF2YS5sYW5nLlN0cmluZyBzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdZZWFyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sR1llYXJ9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdZZWFyIHBhcnNlKGphdmEuaW8uRmlsZSBmKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR1llYXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHWWVhcn0gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR1llYXIgcGFyc2UoamF2YS5pby5GaWxlIGYsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR1llYXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHWWVhcn0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHWWVhciBwYXJzZShqYXZhLm5ldC5VUkwgdSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdZZWFyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBudWxsICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdZZWFyfSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdZZWFyIHBhcnNlKGphdmEubmV0LlVSTCB1LCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdZZWFyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBvcHRpb25zICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdZZWFyfSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdZZWFyIHBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0gaXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHWWVhcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHWWVhcn0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHWWVhciBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdZZWFyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdZZWFyfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdZZWFyIHBhcnNlKGphdmEuaW8uUmVhZGVyIHIpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHWWVhcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdZZWFyfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdZZWFyIHBhcnNlKGphdmEuaW8uUmVhZGVyIHIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR1llYXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHWWVhcn0gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdZZWFyIHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdZZWFyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sR1llYXJ9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHWWVhciBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR1llYXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHWWVhcn0gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHWWVhciBwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHWWVhcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sR1llYXJ9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR1llYXIgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdZZWFyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHWWVhcn0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR1llYXIgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR1llYXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdZZWFyfSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHWWVhciBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb257Ci0gICAgICAgICAgcmV0dXJuIChYbWxHWWVhcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBGYWN0b3J5KCkgeyB9IC8vIE5vIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgYWxsb3dlZAotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxNmQxZmEuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKLQotCi1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci1pbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOwotCi0KLS8qKgotICogQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSAqIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZ1llYXJNb250aCI+eHM6Z1llYXJNb250aDwvYT4gdHlwZS4KLSAqIEEgZ1llYXJNb250aCBzcGVjaWZpZXMgYSBtb250aCBpbiBhIHNwZWNpZmljIHllYXIuCi0gKiA8cD4KLSAqIENvbnZlcnRpYmxlIHRvIHtAbGluayBDYWxlbmRhcn0sIHtAbGluayBHRGF0ZX0uCi0gKiAKLSAqIEBzZWUgWG1sQ2FsZW5kYXIKLSAqIEBzZWUgR0RhdGUKLSAqLyAKLXB1YmxpYyBpbnRlcmZhY2UgWG1sR1llYXJNb250aCBleHRlbmRzIFhtbEFueVNpbXBsZVR5cGUKLXsKLSAgICAvKiogVGhlIGNvbnN0YW50IHtAbGluayBTY2hlbWFUeXBlfSBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlIHR5cGUgPSBYbWxCZWFucy5nZXRCdWlsdGluVHlwZVN5c3RlbSgpLnR5cGVGb3JIYW5kbGUoIl9CSV9nWWVhck1vbnRoIik7Ci0gICAgCi0gICAgLyoqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBDYWxlbmRhcn0gKi8KLSAgICBDYWxlbmRhciBnZXRDYWxlbmRhclZhbHVlKCk7Ci0gICAgLyoqIFNldHMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBDYWxlbmRhcn0gKi8KLSAgICB2b2lkIHNldENhbGVuZGFyVmFsdWUoQ2FsZW5kYXIgYyk7Ci0gICAgLyoqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBHRGF0ZX0gKi8KLSAgICBHRGF0ZSBnZXRHRGF0ZVZhbHVlKCk7Ci0gICAgLyoqIFNldHMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBHRGF0ZVNwZWNpZmljYXRpb259ICovCi0gICAgdm9pZCBzZXRHRGF0ZVZhbHVlKEdEYXRlIGdkKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBDYWxlbmRhcn0KLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjZ2V0Q2FsZW5kYXJWYWx1ZX0KLSAgICAgKiovCi0gICAgQ2FsZW5kYXIgY2FsZW5kYXJWYWx1ZSgpOwotICAgIC8qKgotICAgICAqIFNldHMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBDYWxlbmRhcn0KLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjc2V0Q2FsZW5kYXJWYWx1ZX0KLSAgICAgKiovCi0gICAgdm9pZCBzZXQoQ2FsZW5kYXIgYyk7Ci0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIEdEYXRlfQotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNnZXRHRGF0ZVZhbHVlfQotICAgICAqKi8KLSAgICBHRGF0ZSBnRGF0ZVZhbHVlKCk7Ci0gICAgLyoqCi0gICAgICogU2V0cyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIEdEYXRlU3BlY2lmaWNhdGlvbn0KLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjc2V0R0RhdGVWYWx1ZX0KLSAgICAgKiovCi0gICAgdm9pZCBzZXQoR0RhdGVTcGVjaWZpY2F0aW9uIGdkKTsKLQotICAgIC8qKgotICAgICAqIEEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSAgICAgKiBvZiB7QGxpbmsgWG1sR1llYXJNb250aH0uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBGYWN0b3J5Ci0gICAgewotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sR1llYXJNb250aH0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHWWVhck1vbnRoIG5ld0luc3RhbmNlKCkgewotICAgICAgICAgIHJldHVybiAoWG1sR1llYXJNb250aCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sR1llYXJNb250aH0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHWWVhck1vbnRoIG5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHWWVhck1vbnRoKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGltbXV0YWJsZSB7QGxpbmsgWG1sR1llYXJNb250aH0gdmFsdWUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHWWVhck1vbnRoIG5ld1ZhbHVlKE9iamVjdCBvYmopIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdZZWFyTW9udGgpIHR5cGUubmV3VmFsdWUoIG9iaiApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdZZWFyTW9udGh9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsyMDAzLTA2Jmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR1llYXJNb250aCBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHWWVhck1vbnRoKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sR1llYXJNb250aH0gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzIwMDMtMDYmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHWWVhck1vbnRoIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHWWVhck1vbnRoKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sR1llYXJNb250aH0gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR1llYXJNb250aCBwYXJzZShqYXZhLmlvLkZpbGUgZikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdZZWFyTW9udGgpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHWWVhck1vbnRofSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHWWVhck1vbnRoIHBhcnNlKGphdmEuaW8uRmlsZSBmLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdZZWFyTW9udGgpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHWWVhck1vbnRofSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdZZWFyTW9udGggcGFyc2UoamF2YS5uZXQuVVJMIHUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHWWVhck1vbnRoKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBudWxsICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdZZWFyTW9udGh9IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR1llYXJNb250aCBwYXJzZShqYXZhLm5ldC5VUkwgdSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHWWVhck1vbnRoKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBvcHRpb25zICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdZZWFyTW9udGh9IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR1llYXJNb250aCBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR1llYXJNb250aCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHWWVhck1vbnRofSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdZZWFyTW9udGggcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHWWVhck1vbnRoKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdZZWFyTW9udGh9IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR1llYXJNb250aCBwYXJzZShqYXZhLmlvLlJlYWRlciByKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR1llYXJNb250aCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdZZWFyTW9udGh9IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR1llYXJNb250aCBwYXJzZShqYXZhLmlvLlJlYWRlciByLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdZZWFyTW9udGgpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHWWVhck1vbnRofSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sR1llYXJNb250aCBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHWWVhck1vbnRoKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sR1llYXJNb250aH0gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdZZWFyTW9udGggcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdZZWFyTW9udGgpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHWWVhck1vbnRofSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdZZWFyTW9udGggcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sR1llYXJNb250aCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sR1llYXJNb250aH0gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHWWVhck1vbnRoIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxHWWVhck1vbnRoKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxHWWVhck1vbnRofSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxHWWVhck1vbnRoIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEdZZWFyTW9udGgpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEdZZWFyTW9udGh9IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEdZZWFyTW9udGggcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uewotICAgICAgICAgIHJldHVybiAoWG1sR1llYXJNb250aCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBGYWN0b3J5KCkgeyB9IC8vIE5vIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgYWxsb3dlZAotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWQ1YmM3Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKLQotCi0vKioKLSAqIENvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gKiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2hleEJpbmFyeSI+eHM6aGV4QmluYXJ5PC9hPiB0eXBlLgotICogPHA+Ci0gKiBDb252ZXJ0aWJsZSB0byBhIGJ5dGUgYXJyYXkuIAotICovIAotcHVibGljIGludGVyZmFjZSBYbWxIZXhCaW5hcnkgZXh0ZW5kcyBYbWxBbnlTaW1wbGVUeXBlCi17Ci0gICAgLyoqIFRoZSBjb25zdGFudCB7QGxpbmsgU2NoZW1hVHlwZX0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZSB0eXBlID0gWG1sQmVhbnMuZ2V0QnVpbHRpblR5cGVTeXN0ZW0oKS50eXBlRm9ySGFuZGxlKCJfQklfaGV4QmluYXJ5Iik7Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgYnl0ZSBhcnJheS4KLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSB7QGxpbmsgI2dldEJ5dGVBcnJheVZhbHVlfQotICAgICAqKi8KLSAgICBieXRlW10gYnl0ZUFycmF5VmFsdWUoKTsKLQotICAgIC8qKgotICAgICAqIFNldHMgdGhpcyB2YWx1ZSBhcyBhIGJ5dGUgYXJyYXkuCi0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgYnkge0BsaW5rICNzZXRCeXRlQXJyYXlWYWx1ZX0KLSAgICAgKiovCi0gICAgdm9pZCBzZXQoYnl0ZVtdIGJhKTsKLQotICAgIC8qKiBSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSBieXRlIGFycmF5LiAqKi8KLSAgICBieXRlW10gZ2V0Qnl0ZUFycmF5VmFsdWUoKTsKLSAgICAvKiogU2V0cyB0aGlzIHZhbHVlIGFzIGEgYnl0ZSBhcnJheS4gKi8KLSAgICB2b2lkIHNldEJ5dGVBcnJheVZhbHVlKGJ5dGVbXSBiYSk7Ci0KLQotCi0gICAgLyoqCi0gICAgICogQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotICAgICAqIG9mIHtAbGluayBYbWxIZXhCaW5hcnl9LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgRmFjdG9yeQotICAgIHsKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbEhleEJpbmFyeX0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxIZXhCaW5hcnkgbmV3SW5zdGFuY2UoKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxIZXhCaW5hcnkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbEhleEJpbmFyeX0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxIZXhCaW5hcnkgbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEhleEJpbmFyeSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBpbW11dGFibGUge0BsaW5rIFhtbEhleEJpbmFyeX0gdmFsdWUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxIZXhCaW5hcnkgbmV3VmFsdWUoT2JqZWN0IG9iaikgewotICAgICAgICAgIHJldHVybiAoWG1sSGV4QmluYXJ5KSB0eXBlLm5ld1ZhbHVlKCBvYmogKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxIZXhCaW5hcnl9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDs2ODY1NmM2YzZmJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSGV4QmluYXJ5IHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEhleEJpbmFyeSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEhleEJpbmFyeX0gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzY4NjU2YzZjNmYmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxIZXhCaW5hcnkgcGFyc2UoamF2YS5sYW5nLlN0cmluZyBzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEhleEJpbmFyeSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEhleEJpbmFyeX0gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSGV4QmluYXJ5IHBhcnNlKGphdmEuaW8uRmlsZSBmKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sSGV4QmluYXJ5KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSGV4QmluYXJ5fSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxIZXhCaW5hcnkgcGFyc2UoamF2YS5pby5GaWxlIGYsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sSGV4QmluYXJ5KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSGV4QmluYXJ5fSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEhleEJpbmFyeSBwYXJzZShqYXZhLm5ldC5VUkwgdSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEhleEJpbmFyeSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgbnVsbCApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxIZXhCaW5hcnl9IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSGV4QmluYXJ5IHBhcnNlKGphdmEubmV0LlVSTCB1LCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEhleEJpbmFyeSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxIZXhCaW5hcnl9IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSGV4QmluYXJ5IHBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0gaXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxIZXhCaW5hcnkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSGV4QmluYXJ5fSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEhleEJpbmFyeSBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEhleEJpbmFyeSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxIZXhCaW5hcnl9IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSGV4QmluYXJ5IHBhcnNlKGphdmEuaW8uUmVhZGVyIHIpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxIZXhCaW5hcnkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxIZXhCaW5hcnl9IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSGV4QmluYXJ5IHBhcnNlKGphdmEuaW8uUmVhZGVyIHIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sSGV4QmluYXJ5KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSGV4QmluYXJ5fSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSGV4QmluYXJ5IHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEhleEJpbmFyeSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEhleEJpbmFyeX0gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEhleEJpbmFyeSBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sSGV4QmluYXJ5KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSGV4QmluYXJ5fSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEhleEJpbmFyeSBwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxIZXhCaW5hcnkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEhleEJpbmFyeX0gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxIZXhCaW5hcnkgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEhleEJpbmFyeSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSGV4QmluYXJ5fSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxIZXhCaW5hcnkgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sSGV4QmluYXJ5KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxIZXhCaW5hcnl9IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEhleEJpbmFyeSBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb257Ci0gICAgICAgICAgcmV0dXJuIChYbWxIZXhCaW5hcnkpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgRmFjdG9yeSgpIHsgfSAvLyBObyBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGFsbG93ZWQKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NmY4MzYuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7Ci0KLQotLyoqCi0gKiBDb3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotICogPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNJRCI+eHM6SUQ8L2E+IHR5cGUuCi0gKiA8cD4KLSAqIFdoZW4gdmFsaWRhdGVkLCBJRHMgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGEgZG9jdW1lbnQuICBBbiBlbGVtZW50Ci0gKiBtYXkgbm90IGhhdmUgbW9yZSB0aGFuIG9uZSBhdHRyaWJ1dGUgd2hvc2UgdHlwZSBpcyBJRC4KLSAqIDxwPgotICogQ29udmVydGlibGUgdG8gYSB7QGxpbmsgU3RyaW5nfS4gCi0gKi8gCi1wdWJsaWMgaW50ZXJmYWNlIFhtbElEIGV4dGVuZHMgWG1sTkNOYW1lCi17Ci0gICAgLyoqIFRoZSBjb25zdGFudCB7QGxpbmsgU2NoZW1hVHlwZX0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZSB0eXBlID0gWG1sQmVhbnMuZ2V0QnVpbHRpblR5cGVTeXN0ZW0oKS50eXBlRm9ySGFuZGxlKCJfQklfSUQiKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gICAgICogb2Yge0BsaW5rIFhtbElEfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEZhY3RvcnkKLSAgICB7Ci0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxJRH0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJRCBuZXdJbnN0YW5jZSgpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbElEKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxJRH0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJRCBuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgewotICAgICAgICAgIHJldHVybiAoWG1sSUQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gaW1tdXRhYmxlIHtAbGluayBYbWxJRH0gdmFsdWUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJRCBuZXdWYWx1ZShPYmplY3Qgb2JqKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJRCkgdHlwZS5uZXdWYWx1ZSggb2JqICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSUR9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDtuMSZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbElEIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbElEKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSUR9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDtuMSZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbElEIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJRCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbElEfSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJRCBwYXJzZShqYXZhLmlvLkZpbGUgZikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbElEKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSUR9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbElEIHBhcnNlKGphdmEuaW8uRmlsZSBmLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbElEKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSUR9IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSUQgcGFyc2UoamF2YS5uZXQuVVJMIHUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJRCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgbnVsbCApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJRH0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJRCBwYXJzZShqYXZhLm5ldC5VUkwgdSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJRCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJRH0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJRCBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sSUQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSUR9IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSUQgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJRCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJRH0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJRCBwYXJzZShqYXZhLmlvLlJlYWRlciByKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sSUQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJRH0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJRCBwYXJzZShqYXZhLmlvLlJlYWRlciByLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbElEKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSUR9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJRCBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJRCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbElEfSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSUQgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbElEKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSUR9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSUQgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sSUQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbElEfSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbElEIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJRCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSUR9IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbElEIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbElEKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJRH0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSUQgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uewotICAgICAgICAgIHJldHVybiAoWG1sSUQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgRmFjdG9yeSgpIHsgfSAvLyBObyBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGFsbG93ZWQKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYTY1YzYuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7Ci0KLQotLyoqCi0gKiBDb3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotICogPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNJRFJFRiI+eHM6SURSRUY8L2E+IHR5cGUuCi0gKiA8cD4KLSAqIFdoZW4gdmFsaWRhdGVkLCBJRFJFRiB2YWx1ZXMgbXVzdCBtYXRjaCBhbiBJRCB2YWx1ZSB0aGF0IGlzIHByZXNlbnQgd2l0aGluCi0gKiB0aGUgZG9jdW1lbnQuIFRoaXMgcnVsZSBpcyBvbmx5IHZlcmlmaWVkIHdoZW4gYSB3aG9sZSBkb2N1bWVudCBpcyB2YWxpZGF0ZWQKLSAqIGF0IG9uY2UuCi0gKiA8cD4KLSAqIENvbnZlcnRpYmxlIHRvIGEge0BsaW5rIFN0cmluZ30uIAotICovIAotcHVibGljIGludGVyZmFjZSBYbWxJRFJFRiBleHRlbmRzIFhtbE5DTmFtZQotewotICAgIC8qKiBUaGUgY29uc3RhbnQge0BsaW5rIFNjaGVtYVR5cGV9IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGUgdHlwZSA9IFhtbEJlYW5zLmdldEJ1aWx0aW5UeXBlU3lzdGVtKCkudHlwZUZvckhhbmRsZSgiX0JJX0lEUkVGIik7Ci0gICAgCi0gICAgLyoqCi0gICAgICogQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotICAgICAqIG9mIHtAbGluayBYbWxJRFJFRn0uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBGYWN0b3J5Ci0gICAgewotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sSURSRUZ9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSURSRUYgbmV3SW5zdGFuY2UoKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJRFJFRikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sSURSRUZ9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSURSRUYgbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbElEUkVGKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGltbXV0YWJsZSB7QGxpbmsgWG1sSURSRUZ9IHZhbHVlICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSURSRUYgbmV3VmFsdWUoT2JqZWN0IG9iaikgewotICAgICAgICAgIHJldHVybiAoWG1sSURSRUYpIHR5cGUubmV3VmFsdWUoIG9iaiApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbElEUkVGfSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbElEUkVGIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbElEUkVGKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSURSRUZ9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSURSRUYgcGFyc2UoamF2YS5sYW5nLlN0cmluZyBzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbElEUkVGKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSURSRUZ9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbElEUkVGIHBhcnNlKGphdmEuaW8uRmlsZSBmKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sSURSRUYpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJRFJFRn0gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSURSRUYgcGFyc2UoamF2YS5pby5GaWxlIGYsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sSURSRUYpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJRFJFRn0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJRFJFRiBwYXJzZShqYXZhLm5ldC5VUkwgdSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbElEUkVGKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBudWxsICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbElEUkVGfSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbElEUkVGIHBhcnNlKGphdmEubmV0LlVSTCB1LCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbElEUkVGKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBvcHRpb25zICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbElEUkVGfSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbElEUkVGIHBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0gaXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJRFJFRikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJRFJFRn0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJRFJFRiBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbElEUkVGKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbElEUkVGfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbElEUkVGIHBhcnNlKGphdmEuaW8uUmVhZGVyIHIpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJRFJFRikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbElEUkVGfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbElEUkVGIHBhcnNlKGphdmEuaW8uUmVhZGVyIHIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sSURSRUYpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJRFJFRn0gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbElEUkVGIHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbElEUkVGKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSURSRUZ9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJRFJFRiBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sSURSRUYpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJRFJFRn0gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJRFJFRiBwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJRFJFRikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSURSRUZ9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSURSRUYgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbElEUkVGKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJRFJFRn0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSURSRUYgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sSURSRUYpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbElEUkVGfSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJRFJFRiBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb257Ci0gICAgICAgICAgcmV0dXJuIChYbWxJRFJFRikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBGYWN0b3J5KCkgeyB9IC8vIE5vIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgYWxsb3dlZAotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTc0MTE5Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5NyArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKLQotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLQotLyoqCi0gKiBDb3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotICogPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNJRFJFRlMiPnhzOklEUkVGUzwvYT4gdHlwZSwKLSAqIGEgbGlzdCB0eXBlLgotICogPHA+Ci0gKiBXaGVuIHZhbGlkYXRlZCwgSURSRUYgdmFsdWVzIG11c3QgbWF0Y2ggYW4gSUQgdmFsdWUgdGhhdCBpcyBwcmVzZW50IHdpdGhpbgotICogdGhlIGRvY3VtZW50LiBUaGlzIHJ1bGUgaXMgb25seSB2ZXJpZmllZCB3aGVuIGEgd2hvbGUgZG9jdW1lbnQgaXMgdmFsaWRhdGVkCi0gKiBhdCBvbmNlLgotICogPHA+Ci0gKiBDb252ZXJ0aWJsZSB0byBhIHtAbGluayBMaXN0fS4gCi0gKi8gCi1wdWJsaWMgaW50ZXJmYWNlIFhtbElEUkVGUyBleHRlbmRzIFhtbEFueVNpbXBsZVR5cGUKLXsKLSAgICAvKiogVGhlIGNvbnN0YW50IHtAbGluayBTY2hlbWFUeXBlfSBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlIHR5cGUgPSBYbWxCZWFucy5nZXRCdWlsdGluVHlwZVN5c3RlbSgpLnR5cGVGb3JIYW5kbGUoIl9CSV9JRFJFRlMiKTsKLSAgICAKLSAgICAvKiogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgTGlzdH0gb2Yge0BsaW5rIFN0cmluZ30gdmFsdWVzICovCi0gICAgTGlzdCBnZXRMaXN0VmFsdWUoKTsKLSAgICAvKiogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgTGlzdH0gb2Yge0BsaW5rIFhtbElEUkVGfSB2YWx1ZXMgKi8KLSAgICBMaXN0IHhnZXRMaXN0VmFsdWUoKTsKLSAgICAvKiogU2V0cyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgTGlzdH0gKi8KLSAgICB2b2lkIHNldExpc3RWYWx1ZShMaXN0IGwpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgTGlzdH0gb2Yge0BsaW5rIFN0cmluZ30gdmFsdWVzCi0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgYnkge0BsaW5rICNnZXRMaXN0VmFsdWV9Ci0gICAgICoqLwotICAgIExpc3QgbGlzdFZhbHVlKCk7Ci0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgTGlzdH0gb2Yge0BsaW5rIFhtbElEUkVGfSB2YWx1ZXMKLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSB7QGxpbmsgI2dldExpc3RWYWx1ZX0KLSAgICAgKiovCi0gICAgTGlzdCB4bGlzdFZhbHVlKCk7Ci0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgTGlzdH0KLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCBieSB7QGxpbmsgI2dldExpc3RWYWx1ZX0KLSAgICAgKiovCi0gICAgdm9pZCBzZXQoTGlzdCBsKTsKLQotICAgIC8qKgotICAgICAqIEEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSAgICAgKiBvZiB7QGxpbmsgWG1sSURSRUZTfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEZhY3RvcnkKLSAgICB7Ci0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxJRFJFRlN9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSURSRUZTIG5ld0luc3RhbmNlKCkgewotICAgICAgICAgIHJldHVybiAoWG1sSURSRUZTKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxJRFJFRlN9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSURSRUZTIG5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJRFJFRlMpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gaW1tdXRhYmxlIHtAbGluayBYbWxJRFJFRlN9IHZhbHVlICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSURSRUZTIG5ld1ZhbHVlKE9iamVjdCBvYmopIHsKLSAgICAgICAgICByZXR1cm4gKFhtbElEUkVGUykgdHlwZS5uZXdWYWx1ZSggb2JqICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSURSRUZTfSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbElEUkVGUyBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJRFJFRlMpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJRFJFRlN9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSURSRUZTIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJRFJFRlMpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJRFJFRlN9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbElEUkVGUyBwYXJzZShqYXZhLmlvLkZpbGUgZikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbElEUkVGUykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbElEUkVGU30gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSURSRUZTIHBhcnNlKGphdmEuaW8uRmlsZSBmLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbElEUkVGUykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbElEUkVGU30gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJRFJFRlMgcGFyc2UoamF2YS5uZXQuVVJMIHUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJRFJFRlMpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG51bGwgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSURSRUZTfSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbElEUkVGUyBwYXJzZShqYXZhLm5ldC5VUkwgdSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJRFJFRlMpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG9wdGlvbnMgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSURSRUZTfSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbElEUkVGUyBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sSURSRUZTKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbElEUkVGU30gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJRFJFRlMgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJRFJFRlMpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSURSRUZTfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbElEUkVGUyBwYXJzZShqYXZhLmlvLlJlYWRlciByKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sSURSRUZTKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSURSRUZTfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbElEUkVGUyBwYXJzZShqYXZhLmlvLlJlYWRlciByLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbElEUkVGUykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbElEUkVGU30gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbElEUkVGUyBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJRFJFRlMpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJRFJFRlN9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJRFJFRlMgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbElEUkVGUykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbElEUkVGU30gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJRFJFRlMgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sSURSRUZTKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJRFJFRlN9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSURSRUZTIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJRFJFRlMpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbElEUkVGU30gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSURSRUZTIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbElEUkVGUykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSURSRUZTfSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJRFJFRlMgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uewotICAgICAgICAgIHJldHVybiAoWG1sSURSRUZTKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIEZhY3RvcnkoKSB7IH0gLy8gTm8gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBhbGxvd2VkCi0gICAgfQotfQotCmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50LmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkZWUwZjUuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgzICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOwotCi0KLS8qKgotICogQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSAqIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jaW50Ij54czppbnQ8L2E+IHR5cGUuCi0gKiBPbmUgb2YgdGhlIGRlcml2ZWQgdHlwZXMgYmFzZWQgb24gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkZWNpbWFsIj54czpkZWNpbWFsPC9hPi4KLSAqIDxwPgotICogTmF0dXJhbGx5LCBjb252ZXJ0aWJsZSB0byBhIEphdmEgaW50LgotICovIAotcHVibGljIGludGVyZmFjZSBYbWxJbnQgZXh0ZW5kcyBYbWxMb25nCi17Ci0gICAgLyoqIFRoZSBjb25zdGFudCB7QGxpbmsgU2NoZW1hVHlwZX0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZSB0eXBlID0gWG1sQmVhbnMuZ2V0QnVpbHRpblR5cGVTeXN0ZW0oKS50eXBlRm9ySGFuZGxlKCJfQklfaW50Iik7Ci0gICAgCi0gICAgLyoqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhbiBpbnQgKi8KLSAgICBpbnQgZ2V0SW50VmFsdWUoKTsKLSAgICAvKiogU2V0cyB0aGlzIHZhbHVlIGFzIGFuIGludCAqLwotICAgIHZvaWQgc2V0SW50VmFsdWUoaW50IHYpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGlzIHZhbHVlIGFzIGFuIGludAotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNnZXRJbnRWYWx1ZX0KLSAgICAgKiovCi0gICAgaW50IGludFZhbHVlKCk7Ci0gICAgLyoqCi0gICAgICogU2V0cyB0aGlzIHZhbHVlIGFzIGFuIGludAotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNzZXRJbnRWYWx1ZX0KLSAgICAgKiovCi0gICAgdm9pZCBzZXQoaW50IHYpOwotCi0gICAgLyoqCi0gICAgICogQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotICAgICAqIG9mIHtAbGluayBYbWxJbnR9LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgRmFjdG9yeQotICAgIHsKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbEludH0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJbnQgbmV3SW5zdGFuY2UoKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJbnQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbEludH0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJbnQgbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEludCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBpbW11dGFibGUge0BsaW5rIFhtbEludH0gdmFsdWUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJbnQgbmV3VmFsdWUoT2JqZWN0IG9iaikgewotICAgICAgICAgIHJldHVybiAoWG1sSW50KSB0eXBlLm5ld1ZhbHVlKCBvYmogKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJbnR9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsxMjM0NTY3Jmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSW50IHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEludCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEludH0gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzEyMzQ1NjcmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJbnQgcGFyc2UoamF2YS5sYW5nLlN0cmluZyBzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEludCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEludH0gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSW50IHBhcnNlKGphdmEuaW8uRmlsZSBmKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sSW50KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSW50fSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJbnQgcGFyc2UoamF2YS5pby5GaWxlIGYsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sSW50KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSW50fSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEludCBwYXJzZShqYXZhLm5ldC5VUkwgdSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEludCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgbnVsbCApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJbnR9IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSW50IHBhcnNlKGphdmEubmV0LlVSTCB1LCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEludCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJbnR9IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSW50IHBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0gaXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJbnQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSW50fSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEludCBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEludCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJbnR9IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSW50IHBhcnNlKGphdmEuaW8uUmVhZGVyIHIpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJbnQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJbnR9IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSW50IHBhcnNlKGphdmEuaW8uUmVhZGVyIHIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sSW50KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSW50fSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSW50IHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEludCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEludH0gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEludCBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sSW50KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSW50fSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEludCBwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJbnQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEludH0gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJbnQgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEludCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSW50fSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJbnQgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sSW50KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJbnR9IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEludCBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb257Ci0gICAgICAgICAgcmV0dXJuIChYbWxJbnQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgRmFjdG9yeSgpIHsgfSAvLyBObyBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGFsbG93ZWQKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDQzZThiLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7Ci0KLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotCi0vKioKLSAqIENvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gKiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2ludGVnZXIiPnhzOmludGVnZXI8L2E+IHR5cGUuCi0gKiBPbmUgb2YgdGhlIGRlcml2ZWQgdHlwZXMgYmFzZWQgb24gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkZWNpbWFsIj54czpkZWNpbWFsPC9hPi4KLSAqIDxwPgotICogVGhpcyB0eXBlIHNob3VsZCBub3QgYmUgY29uZnVzZWQgd2l0aCA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2ludCI+eHM6aW50PC9hPgotICogb3IgSmF2YSB7QGxpbmsgSW50ZWdlcn0uICBUaGlzIHR5cGUgcmVwcmVzZW50cyBhbiBhcmJpdHJhcnktcHJlY2lzaW9uIGludGVnZXIgd2l0aAotICogYW55IG51bWJlciBvZiBkaWdpdHMsIHdoaWxlIGEgSmF2YSBpbnQgb3IgYW4geHM6aW50IGlzIGEgMzItYml0IGZpbml0ZS1wcmVjaXNpb24gaW50ZWdlci4KLSAqIDxwPgotICogQ29udmVydGlibGUgdG8gYSBKYXZhIHtAbGluayBCaWdJbnRlZ2VyfS4KLSAqLyAKLXB1YmxpYyBpbnRlcmZhY2UgWG1sSW50ZWdlciBleHRlbmRzIFhtbERlY2ltYWwKLXsKLSAgICAvKiogVGhlIGNvbnN0YW50IHtAbGluayBTY2hlbWFUeXBlfSBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlIHR5cGUgPSBYbWxCZWFucy5nZXRCdWlsdGluVHlwZVN5c3RlbSgpLnR5cGVGb3JIYW5kbGUoIl9CSV9pbnRlZ2VyIik7Ci0gICAgCi0gICAgLyoqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBCaWdJbnRlZ2VyfSAqLwotICAgIEJpZ0ludGVnZXIgZ2V0QmlnSW50ZWdlclZhbHVlKCk7Ci0gICAgLyoqIFNldHMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBCaWdJbnRlZ2VyfSAqLwotICAgIHZvaWQgc2V0QmlnSW50ZWdlclZhbHVlKEJpZ0ludGVnZXIgYmkpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIEJpZ0ludGVnZXJ9Ci0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI2dldEJpZ0ludGVnZXJWYWx1ZX0KLSAgICAgKiovCi0gICAgQmlnSW50ZWdlciBiaWdJbnRlZ2VyVmFsdWUoKTsKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoaXMgdmFsdWUgYXMgYSB7QGxpbmsgQmlnSW50ZWdlcn0KLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjc2V0QmlnSW50ZWdlclZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIHNldChCaWdJbnRlZ2VyIGJpKTsKLQotICAgIC8qKgotICAgICAqIEEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSAgICAgKiBvZiB7QGxpbmsgWG1sSW50ZWdlcn0uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBGYWN0b3J5Ci0gICAgewotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sSW50ZWdlcn0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJbnRlZ2VyIG5ld0luc3RhbmNlKCkgewotICAgICAgICAgIHJldHVybiAoWG1sSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sSW50ZWdlcn0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJbnRlZ2VyIG5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGltbXV0YWJsZSB7QGxpbmsgWG1sSW50ZWdlcn0gdmFsdWUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJbnRlZ2VyIG5ld1ZhbHVlKE9iamVjdCBvYmopIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEludGVnZXIpIHR5cGUubmV3VmFsdWUoIG9iaiApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEludGVnZXJ9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsxMjM0NTY3ODkwJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSW50ZWdlciBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSW50ZWdlcn0gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzEyMzQ1Njc4OTAmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJbnRlZ2VyIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSW50ZWdlcn0gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSW50ZWdlciBwYXJzZShqYXZhLmlvLkZpbGUgZikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJbnRlZ2VyIHBhcnNlKGphdmEuaW8uRmlsZSBmLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEludGVnZXIgcGFyc2UoamF2YS5uZXQuVVJMIHUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBudWxsICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEludGVnZXJ9IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSW50ZWdlciBwYXJzZShqYXZhLm5ldC5VUkwgdSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBvcHRpb25zICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEludGVnZXJ9IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSW50ZWdlciBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEludGVnZXIgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEludGVnZXJ9IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSW50ZWdlciBwYXJzZShqYXZhLmlvLlJlYWRlciByKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEludGVnZXJ9IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSW50ZWdlciBwYXJzZShqYXZhLmlvLlJlYWRlciByLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sSW50ZWdlciBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSW50ZWdlcn0gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEludGVnZXIgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEludGVnZXIgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sSW50ZWdlcn0gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJbnRlZ2VyIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxJbnRlZ2VyIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbEludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbEludGVnZXJ9IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbEludGVnZXIgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uewotICAgICAgICAgIHJldHVybiAoWG1sSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBGYWN0b3J5KCkgeyB9IC8vIE5vIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgYWxsb3dlZAotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZhMTQ2MC4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKLQotCi0vKioKLSAqIENvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gKiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2xhbmd1YWdlIj54czpsYW5ndWFnZTwvYT4gdHlwZS4KLSAqIDxwPgotICogVGhpcyB0eXBlIGlzIGludGVuZGVkIHRvIHJlcHJlc2VudCBhbiBzdGFuZGFyZCBJU08gbGFuZ3VhZ2UgY29kZSBzdHJpbmcuCi0gKiA8cD4KLSAqIENvbnZlcnRpYmxlIHRvIGEgSmF2YSB7QGxpbmsgU3RyaW5nfS4KLSAqLyAKLXB1YmxpYyBpbnRlcmZhY2UgWG1sTGFuZ3VhZ2UgZXh0ZW5kcyBYbWxUb2tlbgotewotICAgIC8qKiBUaGUgY29uc3RhbnQge0BsaW5rIFNjaGVtYVR5cGV9IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGUgdHlwZSA9IFhtbEJlYW5zLmdldEJ1aWx0aW5UeXBlU3lzdGVtKCkudHlwZUZvckhhbmRsZSgiX0JJX2xhbmd1YWdlIik7Ci0gICAgCi0gICAgLyoqCi0gICAgICogQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotICAgICAqIG9mIHtAbGluayBYbWxMYW5ndWFnZX0uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBGYWN0b3J5Ci0gICAgewotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sTGFuZ3VhZ2V9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTGFuZ3VhZ2UgbmV3SW5zdGFuY2UoKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxMYW5ndWFnZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sTGFuZ3VhZ2V9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTGFuZ3VhZ2UgbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbExhbmd1YWdlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGltbXV0YWJsZSB7QGxpbmsgWG1sTGFuZ3VhZ2V9IHZhbHVlICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTGFuZ3VhZ2UgbmV3VmFsdWUoT2JqZWN0IG9iaikgewotICAgICAgICAgIHJldHVybiAoWG1sTGFuZ3VhZ2UpIHR5cGUubmV3VmFsdWUoIG9iaiApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbExhbmd1YWdlfSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7ZW4tdXMmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxMYW5ndWFnZSBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxMYW5ndWFnZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbExhbmd1YWdlfSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7ZW4tdXMmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxMYW5ndWFnZSBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTGFuZ3VhZ2UpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxMYW5ndWFnZX0gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTGFuZ3VhZ2UgcGFyc2UoamF2YS5pby5GaWxlIGYpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxMYW5ndWFnZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbExhbmd1YWdlfSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxMYW5ndWFnZSBwYXJzZShqYXZhLmlvLkZpbGUgZiwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxMYW5ndWFnZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbExhbmd1YWdlfSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbExhbmd1YWdlIHBhcnNlKGphdmEubmV0LlVSTCB1KSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTGFuZ3VhZ2UpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG51bGwgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTGFuZ3VhZ2V9IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTGFuZ3VhZ2UgcGFyc2UoamF2YS5uZXQuVVJMIHUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTGFuZ3VhZ2UpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG9wdGlvbnMgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTGFuZ3VhZ2V9IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTGFuZ3VhZ2UgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbExhbmd1YWdlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbExhbmd1YWdlfSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbExhbmd1YWdlIHBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0gaXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTGFuZ3VhZ2UpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTGFuZ3VhZ2V9IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTGFuZ3VhZ2UgcGFyc2UoamF2YS5pby5SZWFkZXIgcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbExhbmd1YWdlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTGFuZ3VhZ2V9IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTGFuZ3VhZ2UgcGFyc2UoamF2YS5pby5SZWFkZXIgciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxMYW5ndWFnZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbExhbmd1YWdlfSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTGFuZ3VhZ2UgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTGFuZ3VhZ2UpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxMYW5ndWFnZX0gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbExhbmd1YWdlIHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxMYW5ndWFnZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbExhbmd1YWdlfSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbExhbmd1YWdlIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbExhbmd1YWdlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxMYW5ndWFnZX0gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxMYW5ndWFnZSBwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTGFuZ3VhZ2UpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbExhbmd1YWdlfSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxMYW5ndWFnZSBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxMYW5ndWFnZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTGFuZ3VhZ2V9IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbExhbmd1YWdlIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbnsKLSAgICAgICAgICByZXR1cm4gKFhtbExhbmd1YWdlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIEZhY3RvcnkoKSB7IH0gLy8gTm8gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBhbGxvd2VkCi0gICAgfQotfQotCmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGluZU51bWJlci5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExpbmVOdW1iZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ2NDI0MC4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGluZU51bWJlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yLlhtbEJvb2ttYXJrOwotCi0vKioKLSAqIEEgc3ViY2xhc3Mgb2YgWG1sQm9va21hcmsgdGhhdCBob2xkcyBsaW5lIG51bWJlciBpbmZvcm1hdGlvbi4KLSAqIElmIGEgZG9jdW1lbnQgaXMgcGFyc2VkIHdpdGggbGluZSBudW1iZXJzCi0gKiBlbmFibGVkLCB0aGVzZSBib29rbWFya3Mgd2lsbCBiZSBwbGFjZWQgYXQgYXBwcm9wcmlhdGUgbG9jYXRpb25zCi0gKiB3aXRoaW4gdGhlIGRvY3VtZW50LgotICogCi0gKiBAc2VlIFhtbE9wdGlvbnMjc2V0TG9hZExpbmVOdW1iZXJzIAotICovCi1wdWJsaWMgY2xhc3MgWG1sTGluZU51bWJlciBleHRlbmRzIFhtbEJvb2ttYXJrCi17Ci0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhIGxpbmUgbnVtYmVyIHdpdGggbm8gY29sdW1uIG9yIG9mZnNldCBpbmZvcm1hdGlvbi4KLSAgICAgKiBAcGFyYW0gbGluZSB0aGUgbGluZSBudW1iZXIgLSB0aGUgZmlyc3QgbGluZSBpcyAxCi0gICAgICovIAotICAgIHB1YmxpYyBYbWxMaW5lTnVtYmVyICggaW50IGxpbmUgKSB7IHRoaXMoIGxpbmUsIC0xLCAtMSApOyB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhIGxpbmUgbnVtYmVyIGFuZCBjb2x1bW4gd2l0aCBubyBmaWxlIG9mZnNldCBpbmZvcm1hdGlvbi4KLSAgICAgKiBAcGFyYW0gbGluZSB0aGUgbGluZSBudW1iZXIgLSB0aGUgZmlyc3QgbGluZSBpcyAxCi0gICAgICogQHBhcmFtIGxpbmUgdGhlIGNvbHVtbiBudW1iZXIgLSB0aGUgZmlyc3QgY29sdW1uIGlzIDEKLSAgICAgKi8KLSAgICBwdWJsaWMgWG1sTGluZU51bWJlciAoIGludCBsaW5lLCBpbnQgY29sdW1uICkgeyB0aGlzKCBsaW5lLCBjb2x1bW4sIC0xICk7IH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGEgbGluZSBudW1iZXIgYW5kIGNvbHVtbiB3aXRoIG5vIGZpbGUgb2Zmc2V0IGluZm9ybWF0aW9uLgotICAgICAqIEBwYXJhbSBsaW5lIHRoZSBsaW5lIG51bWJlciAtIHRoZSBmaXJzdCBsaW5lIGlzIDEKLSAgICAgKiBAcGFyYW0gbGluZSB0aGUgY29sdW1uIG51bWJlciAtIHRoZSBmaXJzdCBjb2x1bW4gaXMgMQotICAgICAqIEBwYXJhbSBsaW5lIHRoZSBmaWxlIGNoYXJhY3RlciBvZmZzZXQgLSB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBmaWxlIGlzIDAKLSAgICAgKi8KLSAgICBwdWJsaWMgWG1sTGluZU51bWJlciAoIGludCBsaW5lLCBpbnQgY29sdW1uLCBpbnQgb2Zmc2V0ICkKLSAgICB7Ci0gICAgICAgIHN1cGVyKCBmYWxzZSApOwotICAgICAgICAKLSAgICAgICAgX2xpbmUgPSBsaW5lOwotICAgICAgICBfY29sdW1uID0gY29sdW1uOwotICAgICAgICBfb2Zmc2V0ID0gb2Zmc2V0OwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSAxLWJhc2VkIGxpbmUgbnVtYmVyLCBvciAtMSBpZiBub3Qga25vd24uCi0gICAgICovIAotICAgIHB1YmxpYyBpbnQgZ2V0TGluZSAgICggKSB7IHJldHVybiBfbGluZTsgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgMS1iYXNlZCBjb2x1bW4gbnVtYmVyLCBvciAtMSBpZiBub3Qga25vd24uCi0gICAgICovIAotICAgIHB1YmxpYyBpbnQgZ2V0Q29sdW1uICggKSB7IHJldHVybiBfY29sdW1uOyB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgMC1iYXNlZCBmaWxlIG9mZnNldCBudW1iZXIsIG9yIC0xIGlmIG5vdCBrbm93bi4KLSAgICAgKi8gCi0gICAgcHVibGljIGludCBnZXRPZmZzZXQgKCApIHsgcmV0dXJuIF9vZmZzZXQ7IH0KLQotICAgIHByaXZhdGUgaW50IF9saW5lLCBfY29sdW1uLCBfb2Zmc2V0OwotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkODBmNDkuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKLQotCi0vKioKLSAqIENvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gKiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2xvbmciPnhzOmxvbmc8L2E+IHR5cGUuCi0gKiBPbmUgb2YgdGhlIGRlcml2ZWQgdHlwZXMgYmFzZWQgb24gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkZWNpbWFsIj54czpkZWNpbWFsPC9hPi4KLSAqIDxwPgotICogTmF0dXJhbGx5LCBjb252ZXJ0aWJsZSB0byBhIEphdmEgbG9uZy4KLSAqLyAKLXB1YmxpYyBpbnRlcmZhY2UgWG1sTG9uZyBleHRlbmRzIFhtbEludGVnZXIKLXsKLSAgICAvKiogVGhlIGNvbnN0YW50IHtAbGluayBTY2hlbWFUeXBlfSBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlIHR5cGUgPSBYbWxCZWFucy5nZXRCdWlsdGluVHlwZVN5c3RlbSgpLnR5cGVGb3JIYW5kbGUoIl9CSV9sb25nIik7Ci0gICAgCi0gICAgLyoqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIGxvbmcgKi8KLSAgICBsb25nIGdldExvbmdWYWx1ZSgpOwotICAgIC8qKiBTZXRzIHRoaXMgdmFsdWUgYXMgYSBsb25nICovCi0gICAgdm9pZCBzZXRMb25nVmFsdWUobG9uZyB2KTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIGxvbmcKLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjZ2V0TG9uZ1ZhbHVlfQotICAgICAqKi8KLSAgICBsb25nIGxvbmdWYWx1ZSgpOwotICAgIC8qKgotICAgICAqIFNldHMgdGhpcyB2YWx1ZSBhcyBhIGxvbmcKLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjc2V0TG9uZ1ZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIHNldChsb25nIHYpOwotCi0gICAgLyoqCi0gICAgICogQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotICAgICAqIG9mIHtAbGluayBYbWxMb25nfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEZhY3RvcnkKLSAgICB7Ci0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxMb25nfSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbExvbmcgbmV3SW5zdGFuY2UoKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxMb25nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxMb25nfSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbExvbmcgbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbExvbmcpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gaW1tdXRhYmxlIHtAbGluayBYbWxMb25nfSB2YWx1ZSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbExvbmcgbmV3VmFsdWUoT2JqZWN0IG9iaikgewotICAgICAgICAgIHJldHVybiAoWG1sTG9uZykgdHlwZS5uZXdWYWx1ZSggb2JqICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTG9uZ30gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzEyMzQ1Njc4OSZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbExvbmcgcGFyc2UoamF2YS5sYW5nLlN0cmluZyBzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTG9uZykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbExvbmd9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsxMjM0NTY3ODkmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxMb25nIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxMb25nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTG9uZ30gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTG9uZyBwYXJzZShqYXZhLmlvLkZpbGUgZikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbExvbmcpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxMb25nfSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxMb25nIHBhcnNlKGphdmEuaW8uRmlsZSBmLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbExvbmcpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxMb25nfSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbExvbmcgcGFyc2UoamF2YS5uZXQuVVJMIHUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxMb25nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBudWxsICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbExvbmd9IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTG9uZyBwYXJzZShqYXZhLm5ldC5VUkwgdSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxMb25nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBvcHRpb25zICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbExvbmd9IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTG9uZyBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTG9uZykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxMb25nfSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbExvbmcgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxMb25nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbExvbmd9IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTG9uZyBwYXJzZShqYXZhLmlvLlJlYWRlciByKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTG9uZykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbExvbmd9IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTG9uZyBwYXJzZShqYXZhLmlvLlJlYWRlciByLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbExvbmcpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxMb25nfSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTG9uZyBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxMb25nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTG9uZ30gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbExvbmcgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbExvbmcpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxMb25nfSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbExvbmcgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTG9uZykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTG9uZ30gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxMb25nIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxMb25nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxMb25nfSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxMb25nIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbExvbmcpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbExvbmd9IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbExvbmcgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uewotICAgICAgICAgIHJldHVybiAoWG1sTG9uZykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBGYWN0b3J5KCkgeyB9IC8vIE5vIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgYWxsb3dlZAotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzRmMDM5Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKLQotCi0vKioKLSAqIENvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gKiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI05hbWUiPnhzOk5hbWU8L2E+IHR5cGUuCi0gKiBPbmUgb2YgdGhlIGRlcml2ZWQgdHlwZXMgYmFzZWQgb24gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNzdHJpbmciPnhzOnN0cmluZzwvYT4uCi0gKiA8cD4KLSAqIFRoaXMga2luZCBvZiBzdHJpbmcgaXMgdGhlIHNhbWUgYXMgdGhlIG5vbi1jb2xvbml6ZWQgc3RyaW5ncyB0aGF0IGFyZSB1c2VkCi0gKiBmb3IgWE1MIGxvY2FsbmFtZXMgYW5kIHByZWZpeGVzLCAibXktaHJlZi4yIi4gIEl0IGlzIGp1c3QgYSBwaHlzaWNhbAotICogc3RyaW5nLCBob3dldmVyLCBhbmQgaXQgc2hvdWxkIE5PVCBiZSBjb25mdXNlZCB3aXRoIHtAbGluayBYbWxRTmFtZX0sCi0gKiB3aGljaCBpcyBhIGxvZ2ljYWwgY29tYmluYXRpb24gb2YgbG9jYWxuYW1lIGFuZCBuYW1lc3BhY2UgVVJJLgotICogPHA+Ci0gKiBDb252ZXJ0aWJsZSB0byB7QGxpbmsgU3RyaW5nfS4KLSAqLyAKLXB1YmxpYyBpbnRlcmZhY2UgWG1sTkNOYW1lIGV4dGVuZHMgWG1sTmFtZQotewotICAgIC8qKiBUaGUgY29uc3RhbnQge0BsaW5rIFNjaGVtYVR5cGV9IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGUgdHlwZSA9IFhtbEJlYW5zLmdldEJ1aWx0aW5UeXBlU3lzdGVtKCkudHlwZUZvckhhbmRsZSgiX0JJX05DTmFtZSIpOwotICAgIAotICAgIC8qKgotICAgICAqIEEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSAgICAgKiBvZiB7QGxpbmsgWG1sTkNOYW1lfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEZhY3RvcnkKLSAgICB7Ci0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxOQ05hbWV9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTkNOYW1lIG5ld0luc3RhbmNlKCkgewotICAgICAgICAgIHJldHVybiAoWG1sTkNOYW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxOQ05hbWV9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTkNOYW1lIG5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOQ05hbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gaW1tdXRhYmxlIHtAbGluayBYbWxOQ05hbWV9IHZhbHVlICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTkNOYW1lIG5ld1ZhbHVlKE9iamVjdCBvYmopIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5DTmFtZSkgdHlwZS5uZXdWYWx1ZSggb2JqICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTkNOYW1lfSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7TXktTmFtZSZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5DTmFtZSBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOQ05hbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOQ05hbWV9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDtNeS1OYW1lJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTkNOYW1lIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOQ05hbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOQ05hbWV9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5DTmFtZSBwYXJzZShqYXZhLmlvLkZpbGUgZikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5DTmFtZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5DTmFtZX0gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTkNOYW1lIHBhcnNlKGphdmEuaW8uRmlsZSBmLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5DTmFtZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5DTmFtZX0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOQ05hbWUgcGFyc2UoamF2YS5uZXQuVVJMIHUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOQ05hbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG51bGwgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTkNOYW1lfSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5DTmFtZSBwYXJzZShqYXZhLm5ldC5VUkwgdSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOQ05hbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG9wdGlvbnMgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTkNOYW1lfSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5DTmFtZSBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTkNOYW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5DTmFtZX0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOQ05hbWUgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOQ05hbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTkNOYW1lfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5DTmFtZSBwYXJzZShqYXZhLmlvLlJlYWRlciByKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTkNOYW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTkNOYW1lfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5DTmFtZSBwYXJzZShqYXZhLmlvLlJlYWRlciByLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5DTmFtZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5DTmFtZX0gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5DTmFtZSBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOQ05hbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOQ05hbWV9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOQ05hbWUgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5DTmFtZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5DTmFtZX0gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOQ05hbWUgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTkNOYW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOQ05hbWV9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTkNOYW1lIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOQ05hbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5DTmFtZX0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTkNOYW1lIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5DTmFtZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTkNOYW1lfSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOQ05hbWUgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uewotICAgICAgICAgIHJldHVybiAoWG1sTkNOYW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIEZhY3RvcnkoKSB7IH0gLy8gTm8gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBhbGxvd2VkCi0gICAgfQotfQotCmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg2M2UwMi4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOwotCi0KLS8qKgotICogQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSAqIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jTk1UT0tFTiI+eHM6Tk1UT0tFTjwvYT4gdHlwZS4KLSAqIE9uZSBvZiB0aGUgZGVyaXZlZCB0eXBlcyBiYXNlZCBvbiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3N0cmluZyI+eHM6c3RyaW5nPC9hPi4KLSAqIDxwPgotICogQW4gTk1UT0tFTiBpcyBYTUwncyBjbG9zZXN0IGNvbmNlcHQgdG8gYW4gImlkZW50aWZpZXIiOyBmb3IgZXhhbXBsZSwKLSAqIGl0IGRvZXMgbm90IHBlcm1pdCBzcGFjZXMgYW5kIG9ubHkgbGltaXRlZCBwdW5jdHVhdGlvbi4gIFNvIE5NVE9LRU4gaXMKLSAqIGNvbW1vbmx5IHVzZWQgdG8gZGVzY3JpYmUgYSBzaW5nbGUgdG9rZW4gb3IgZW51bWVyYXRlZCBzdHJpbmcgdmFsdWUuCi0gKiA8cD4KLSAqIENvbnZlcnRpYmxlIHRvIHtAbGluayBTdHJpbmd9LgotICovIAotcHVibGljIGludGVyZmFjZSBYbWxOTVRPS0VOIGV4dGVuZHMgWG1sVG9rZW4KLXsKLSAgICAvKiogVGhlIGNvbnN0YW50IHtAbGluayBTY2hlbWFUeXBlfSBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlIHR5cGUgPSBYbWxCZWFucy5nZXRCdWlsdGluVHlwZVN5c3RlbSgpLnR5cGVGb3JIYW5kbGUoIl9CSV9OTVRPS0VOIik7Ci0gICAgCi0gICAgLyoqCi0gICAgICogQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotICAgICAqIG9mIHtAbGluayBYbWxOTVRPS0VOfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEZhY3RvcnkKLSAgICB7Ci0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxOTVRPS0VOfSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5NVE9LRU4gbmV3SW5zdGFuY2UoKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOTVRPS0VOKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxOTVRPS0VOfSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5NVE9LRU4gbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5NVE9LRU4pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gaW1tdXRhYmxlIHtAbGluayBYbWxOTVRPS0VOfSB2YWx1ZSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5NVE9LRU4gbmV3VmFsdWUoT2JqZWN0IG9iaikgewotICAgICAgICAgIHJldHVybiAoWG1sTk1UT0tFTikgdHlwZS5uZXdWYWx1ZSggb2JqICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTk1UT0tFTn0gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0O3NhbXBsZS0xLjImbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOTVRPS0VOIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5NVE9LRU4pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOTVRPS0VOfSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7c2FtcGxlLTEuMiZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5NVE9LRU4gcGFyc2UoamF2YS5sYW5nLlN0cmluZyBzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5NVE9LRU4pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOTVRPS0VOfSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOTVRPS0VOIHBhcnNlKGphdmEuaW8uRmlsZSBmKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTk1UT0tFTikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5NVE9LRU59IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5NVE9LRU4gcGFyc2UoamF2YS5pby5GaWxlIGYsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTk1UT0tFTikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5NVE9LRU59IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTk1UT0tFTiBwYXJzZShqYXZhLm5ldC5VUkwgdSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5NVE9LRU4pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG51bGwgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTk1UT0tFTn0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOTVRPS0VOIHBhcnNlKGphdmEubmV0LlVSTCB1LCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5NVE9LRU4pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG9wdGlvbnMgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTk1UT0tFTn0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOTVRPS0VOIHBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0gaXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOTVRPS0VOKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5NVE9LRU59IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTk1UT0tFTiBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5NVE9LRU4pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTk1UT0tFTn0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOTVRPS0VOIHBhcnNlKGphdmEuaW8uUmVhZGVyIHIpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOTVRPS0VOKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTk1UT0tFTn0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOTVRPS0VOIHBhcnNlKGphdmEuaW8uUmVhZGVyIHIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTk1UT0tFTikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5NVE9LRU59IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOTVRPS0VOIHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5NVE9LRU4pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOTVRPS0VOfSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTk1UT0tFTiBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTk1UT0tFTikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5NVE9LRU59IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTk1UT0tFTiBwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOTVRPS0VOKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOTVRPS0VOfSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5NVE9LRU4gcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5NVE9LRU4pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5NVE9LRU59IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5NVE9LRU4gcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTk1UT0tFTikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTk1UT0tFTn0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTk1UT0tFTiBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb257Ci0gICAgICAgICAgcmV0dXJuIChYbWxOTVRPS0VOKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIEZhY3RvcnkoKSB7IH0gLy8gTm8gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBhbGxvd2VkCi0gICAgfQotfQotCmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWJkNDk3Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTk0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotCi0vKioKLSAqIENvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gKiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI05NVE9LRU5TIj54czpOTVRPS0VOUzwvYT4gdHlwZSwKLSAqIGEgbGlzdCB0eXBlLgotICogPHA+Ci0gKiBDb252ZXJ0aWJsZSB0byB7QGxpbmsgTGlzdH0uCi0gKi8gCi1wdWJsaWMgaW50ZXJmYWNlIFhtbE5NVE9LRU5TIGV4dGVuZHMgWG1sQW55U2ltcGxlVHlwZQotewotICAgIC8qKiBUaGUgY29uc3RhbnQge0BsaW5rIFNjaGVtYVR5cGV9IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGUgdHlwZSA9IFhtbEJlYW5zLmdldEJ1aWx0aW5UeXBlU3lzdGVtKCkudHlwZUZvckhhbmRsZSgiX0JJX05NVE9LRU5TIik7Ci0gICAgCi0gICAgLyoqIFJldHVybnMgdGhlIHZhbHVlIGFzIGEge0BsaW5rIExpc3R9IG9mIHtAbGluayBTdHJpbmd9IHZhbHVlcyAqLwotICAgIExpc3QgZ2V0TGlzdFZhbHVlKCk7Ci0gICAgLyoqIFJldHVybnMgdGhlIHZhbHVlIGFzIGEge0BsaW5rIExpc3R9IG9mIHtAbGluayBYbWxOTVRPS0VOfSB2YWx1ZXMgKi8KLSAgICBMaXN0IHhnZXRMaXN0VmFsdWUoKTsKLSAgICAvKiogU2V0cyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgTGlzdH0gKi8KLSAgICB2b2lkIHNldExpc3RWYWx1ZShMaXN0IGwpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgTGlzdH0gb2Yge0BsaW5rIFN0cmluZ30gdmFsdWVzCi0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgYnkge0BsaW5rICNnZXRMaXN0VmFsdWV9Ci0gICAgICoqLwotICAgIExpc3QgbGlzdFZhbHVlKCk7Ci0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgdmFsdWUgYXMgYSB7QGxpbmsgTGlzdH0gb2Yge0BsaW5rIFhtbE5NVE9LRU59IHZhbHVlcwotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIGJ5IHtAbGluayAjZ2V0TGlzdFZhbHVlfQotICAgICAqKi8KLSAgICBMaXN0IHhsaXN0VmFsdWUoKTsKLSAgICAvKioKLSAgICAgKiBTZXRzIHRoZSB2YWx1ZSBhcyBhIHtAbGluayBMaXN0fQotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIGJ5IHtAbGluayAjZ2V0TGlzdFZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIHNldChMaXN0IGwpOwotCi0KLSAgICAvKioKLSAgICAgKiBBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gICAgICogb2Yge0BsaW5rIFhtbE5NVE9LRU5TfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEZhY3RvcnkKLSAgICB7Ci0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxOTVRPS0VOU30gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOTVRPS0VOUyBuZXdJbnN0YW5jZSgpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5NVE9LRU5TKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxOTVRPS0VOU30gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOTVRPS0VOUyBuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgewotICAgICAgICAgIHJldHVybiAoWG1sTk1UT0tFTlMpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gaW1tdXRhYmxlIHtAbGluayBYbWxOTVRPS0VOU30gdmFsdWUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOTVRPS0VOUyBuZXdWYWx1ZShPYmplY3Qgb2JqKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOTVRPS0VOUykgdHlwZS5uZXdWYWx1ZSggb2JqICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTk1UT0tFTlN9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDtzYW1wbGUtMS4xIHNhbXBsZS0xLjIgc2FtcGxlLTEuMyZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5NVE9LRU5TIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5NVE9LRU5TKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTk1UT0tFTlN9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDtzYW1wbGUtMS4xIHNhbXBsZS0xLjIgc2FtcGxlLTEuMyZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5NVE9LRU5TIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOTVRPS0VOUykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5NVE9LRU5TfSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOTVRPS0VOUyBwYXJzZShqYXZhLmlvLkZpbGUgZikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5NVE9LRU5TKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTk1UT0tFTlN9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5NVE9LRU5TIHBhcnNlKGphdmEuaW8uRmlsZSBmLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5NVE9LRU5TKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTk1UT0tFTlN9IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTk1UT0tFTlMgcGFyc2UoamF2YS5uZXQuVVJMIHUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOTVRPS0VOUykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgbnVsbCApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOTVRPS0VOU30gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOTVRPS0VOUyBwYXJzZShqYXZhLm5ldC5VUkwgdSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOTVRPS0VOUykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOTVRPS0VOU30gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOTVRPS0VOUyBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTk1UT0tFTlMpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTk1UT0tFTlN9IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTk1UT0tFTlMgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOTVRPS0VOUykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOTVRPS0VOU30gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOTVRPS0VOUyBwYXJzZShqYXZhLmlvLlJlYWRlciByKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTk1UT0tFTlMpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOTVRPS0VOU30gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOTVRPS0VOUyBwYXJzZShqYXZhLmlvLlJlYWRlciByLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5NVE9LRU5TKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTk1UT0tFTlN9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOTVRPS0VOUyBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOTVRPS0VOUykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5NVE9LRU5TfSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTk1UT0tFTlMgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5NVE9LRU5TKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTk1UT0tFTlN9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTk1UT0tFTlMgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTk1UT0tFTlMpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5NVE9LRU5TfSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5NVE9LRU5TIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOTVRPS0VOUykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTk1UT0tFTlN9IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5NVE9LRU5TIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5NVE9LRU5TKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOTVRPS0VOU30gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTk1UT0tFTlMgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uewotICAgICAgICAgIHJldHVybiAoWG1sTk1UT0tFTlMpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgRmFjdG9yeSgpIHsgfSAvLyBObyBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGFsbG93ZWQKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwZWY5YTEuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7Ci0KLQotLyoqCi0gKiBDb3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotICogPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNOT1RBVElPTiI+eHM6Tk9UQVRJT048L2E+IHR5cGUuCi0gKiA8cD4KLSAqIE5PVEFUSU9OcyBhcmUgYSBtZWNoYW5pc20gaW4gWE1MIFNjaGVtYSB0aGF0IGlzIHByb3ZpZGVkCi0gKiBmb3IgcGFydGlhbCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggTk9UQVRJT05zIGluIERURHMuICBYTUwgU2NoZW1hCi0gKiB1c2VycyBzaG91bGQgYWxtb3N0IG5ldmVyIGhhdmUgYW55IHJlYXNvbiB0byB1c2UgdGhpcyBkYXRhIHR5cGUuCi0gKiA8cD4KLSAqIENvbnZlcnRpYmxlIHRvIHtAbGluayBTdHJpbmd9LgotICovIAotcHVibGljIGludGVyZmFjZSBYbWxOT1RBVElPTiBleHRlbmRzIFhtbEFueVNpbXBsZVR5cGUKLXsKLSAgICAvKiogVGhlIGNvbnN0YW50IHtAbGluayBTY2hlbWFUeXBlfSBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlIHR5cGUgPSBYbWxCZWFucy5nZXRCdWlsdGluVHlwZVN5c3RlbSgpLnR5cGVGb3JIYW5kbGUoIl9CSV9OT1RBVElPTiIpOwotICAgIAotICAgIC8qKgotICAgICAqIEEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSAgICAgKiBvZiB7QGxpbmsgWG1sTk9UQVRJT059LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgRmFjdG9yeQotICAgIHsKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbE5PVEFUSU9OfSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5PVEFUSU9OIG5ld0luc3RhbmNlKCkgewotICAgICAgICAgIHJldHVybiAoWG1sTk9UQVRJT04pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbE5PVEFUSU9OfSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5PVEFUSU9OIG5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOT1RBVElPTikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBpbW11dGFibGUge0BsaW5rIFhtbE5PVEFUSU9OfSB2YWx1ZSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5PVEFUSU9OIG5ld1ZhbHVlKE9iamVjdCBvYmopIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5PVEFUSU9OKSB0eXBlLm5ld1ZhbHVlKCBvYmogKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOT1RBVElPTn0gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOT1RBVElPTiBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOT1RBVElPTikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5PVEFUSU9OfSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5PVEFUSU9OIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOT1RBVElPTikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5PVEFUSU9OfSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOT1RBVElPTiBwYXJzZShqYXZhLmlvLkZpbGUgZikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5PVEFUSU9OKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTk9UQVRJT059IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5PVEFUSU9OIHBhcnNlKGphdmEuaW8uRmlsZSBmLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5PVEFUSU9OKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTk9UQVRJT059IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTk9UQVRJT04gcGFyc2UoamF2YS5uZXQuVVJMIHUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOT1RBVElPTikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgbnVsbCApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOT1RBVElPTn0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOT1RBVElPTiBwYXJzZShqYXZhLm5ldC5VUkwgdSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOT1RBVElPTikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOT1RBVElPTn0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOT1RBVElPTiBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTk9UQVRJT04pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTk9UQVRJT059IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTk9UQVRJT04gcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOT1RBVElPTikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOT1RBVElPTn0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOT1RBVElPTiBwYXJzZShqYXZhLmlvLlJlYWRlciByKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTk9UQVRJT04pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOT1RBVElPTn0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOT1RBVElPTiBwYXJzZShqYXZhLmlvLlJlYWRlciByLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5PVEFUSU9OKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTk9UQVRJT059IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOT1RBVElPTiBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOT1RBVElPTikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5PVEFUSU9OfSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTk9UQVRJT04gcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5PVEFUSU9OKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTk9UQVRJT059IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTk9UQVRJT04gcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTk9UQVRJT04pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5PVEFUSU9OfSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5PVEFUSU9OIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOT1RBVElPTikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTk9UQVRJT059IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5PVEFUSU9OIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5PVEFUSU9OKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOT1RBVElPTn0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTk9UQVRJT04gcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uewotICAgICAgICAgIHJldHVybiAoWG1sTk9UQVRJT04pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgRmFjdG9yeSgpIHsgfSAvLyBObyBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGFsbG93ZWQKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTQwYmQzLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7Ci0KLQotLyoqCi0gKiBDb3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotICogPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNOYW1lIj54czpOYW1lPC9hPiB0eXBlLgotICogT25lIG9mIHRoZSBkZXJpdmVkIHR5cGVzIGJhc2VkIG9uIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jc3RyaW5nIj54czpzdHJpbmc8L2E+LgotICogPHA+Ci0gKiBUaGlzIGtpbmQgb2Ygc3RyaW5nIGlzIHRoZSBzYW1lIGFzIHRoZSBsZXhpY2FsIHJlcHJlc2VudGF0aW9uIHVzZWQgZm9yIFhNTCAxLjAKLSAqIGVsZW1lbnQgYW5kIGF0dHJpYnV0ZSBuYW1lcywgZS5nLiwgInByZTphLWIuY2RlZiIuICBJdCBpcyBqdXN0IGEgcGh5c2ljYWwKLSAqIHN0cmluZywgaG93ZXZlciwgYW5kIGl0IHNob3VsZCBOT1QgYmUgY29uZnVzZWQgd2l0aCB7QGxpbmsgWG1sUU5hbWV9LAotICogd2hpY2ggaXMgYSBsb2dpY2FsIGNvbWJpbmF0aW9uIG9mIGxvY2FsbmFtZSBhbmQgbmFtZXNwYWNlIFVSSS4KLSAqIDxwPgotICogQ29udmVydGlibGUgdG8ge0BsaW5rIFN0cmluZ30uCi0gKi8gCi1wdWJsaWMgaW50ZXJmYWNlIFhtbE5hbWUgZXh0ZW5kcyBYbWxUb2tlbgotewotICAgIC8qKiBUaGUgY29uc3RhbnQge0BsaW5rIFNjaGVtYVR5cGV9IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGUgdHlwZSA9IFhtbEJlYW5zLmdldEJ1aWx0aW5UeXBlU3lzdGVtKCkudHlwZUZvckhhbmRsZSgiX0JJX05hbWUiKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gICAgICogb2Yge0BsaW5rIFhtbE5hbWV9LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgRmFjdG9yeQotICAgIHsKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbE5hbWV9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTmFtZSBuZXdJbnN0YW5jZSgpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5hbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbE5hbWV9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTmFtZSBuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgewotICAgICAgICAgIHJldHVybiAoWG1sTmFtZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBpbW11dGFibGUge0BsaW5rIFhtbE5hbWV9IHZhbHVlICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTmFtZSBuZXdWYWx1ZShPYmplY3Qgb2JqKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOYW1lKSB0eXBlLm5ld1ZhbHVlKCBvYmogKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOYW1lfSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7TXk6TmFtZSZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5hbWUgcGFyc2UoamF2YS5sYW5nLlN0cmluZyBzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTmFtZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5hbWV9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDtNeTpOYW1lJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTmFtZSBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTmFtZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5hbWV9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5hbWUgcGFyc2UoamF2YS5pby5GaWxlIGYpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOYW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTmFtZX0gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTmFtZSBwYXJzZShqYXZhLmlvLkZpbGUgZiwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOYW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTmFtZX0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOYW1lIHBhcnNlKGphdmEubmV0LlVSTCB1KSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTmFtZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgbnVsbCApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOYW1lfSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5hbWUgcGFyc2UoamF2YS5uZXQuVVJMIHUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTmFtZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOYW1lfSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5hbWUgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5hbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTmFtZX0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOYW1lIHBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0gaXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTmFtZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOYW1lfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5hbWUgcGFyc2UoamF2YS5pby5SZWFkZXIgcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5hbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOYW1lfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5hbWUgcGFyc2UoamF2YS5pby5SZWFkZXIgciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOYW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTmFtZX0gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5hbWUgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTmFtZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5hbWV9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOYW1lIHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOYW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTmFtZX0gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOYW1lIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5hbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5hbWV9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTmFtZSBwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTmFtZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTmFtZX0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTmFtZSBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOYW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOYW1lfSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOYW1lIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbnsKLSAgICAgICAgICByZXR1cm4gKFhtbE5hbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgRmFjdG9yeSgpIHsgfSAvLyBObyBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGFsbG93ZWQKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA1OWU5ZC4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7Ci0KLQotLyoqCi0gKiBDb3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotICogPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNuZWdhdGl2ZUludGVnZXIiPnhzOm5lZ2F0aXZlSW50ZWdlcjwvYT4gdHlwZS4KLSAqIE9uZSBvZiB0aGUgZGVyaXZlZCB0eXBlcyBiYXNlZCBvbiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2RlY2ltYWwiPnhzOmRlY2ltYWw8L2E+LgotICogPHA+Ci0gKiBWZXJpZmllZCB0byBiZSBuZWdhdGl2ZSB3aGVuIHZhbGlkYXRpbmcuCi0gKiA8cD4KLSAqIENvbnZlcnRpYmxlIHRvIHtAbGluayBqYXZhLm1hdGguQmlnSW50ZWdlcn0uCi0gKi8gCi1wdWJsaWMgaW50ZXJmYWNlIFhtbE5lZ2F0aXZlSW50ZWdlciBleHRlbmRzIFhtbE5vblBvc2l0aXZlSW50ZWdlcgotewotICAgIC8qKiBUaGUgY29uc3RhbnQge0BsaW5rIFNjaGVtYVR5cGV9IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGUgdHlwZSA9IFhtbEJlYW5zLmdldEJ1aWx0aW5UeXBlU3lzdGVtKCkudHlwZUZvckhhbmRsZSgiX0JJX25lZ2F0aXZlSW50ZWdlciIpOwotICAgIAotICAgIC8qKgotICAgICAqIEEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSAgICAgKiBvZiB7QGxpbmsgWG1sTmVnYXRpdmVJbnRlZ2VyfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEZhY3RvcnkKLSAgICB7Ci0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxOZWdhdGl2ZUludGVnZXJ9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTmVnYXRpdmVJbnRlZ2VyIG5ld0luc3RhbmNlKCkgewotICAgICAgICAgIHJldHVybiAoWG1sTmVnYXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxOZWdhdGl2ZUludGVnZXJ9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTmVnYXRpdmVJbnRlZ2VyIG5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOZWdhdGl2ZUludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gaW1tdXRhYmxlIHtAbGluayBYbWxOZWdhdGl2ZUludGVnZXJ9IHZhbHVlICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTmVnYXRpdmVJbnRlZ2VyIG5ld1ZhbHVlKE9iamVjdCBvYmopIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5lZ2F0aXZlSW50ZWdlcikgdHlwZS5uZXdWYWx1ZSggb2JqICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTmVnYXRpdmVJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7LTEyMzQ1Njc4OTAmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOZWdhdGl2ZUludGVnZXIgcGFyc2UoamF2YS5sYW5nLlN0cmluZyBzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTmVnYXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTmVnYXRpdmVJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7LTEyMzQ1Njc4OTAmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOZWdhdGl2ZUludGVnZXIgcGFyc2UoamF2YS5sYW5nLlN0cmluZyBzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5lZ2F0aXZlSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5lZ2F0aXZlSW50ZWdlcn0gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTmVnYXRpdmVJbnRlZ2VyIHBhcnNlKGphdmEuaW8uRmlsZSBmKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTmVnYXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTmVnYXRpdmVJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOZWdhdGl2ZUludGVnZXIgcGFyc2UoamF2YS5pby5GaWxlIGYsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTmVnYXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTmVnYXRpdmVJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5lZ2F0aXZlSW50ZWdlciBwYXJzZShqYXZhLm5ldC5VUkwgdSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5lZ2F0aXZlSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgbnVsbCApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOZWdhdGl2ZUludGVnZXJ9IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTmVnYXRpdmVJbnRlZ2VyIHBhcnNlKGphdmEubmV0LlVSTCB1LCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5lZ2F0aXZlSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOZWdhdGl2ZUludGVnZXJ9IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTmVnYXRpdmVJbnRlZ2VyIHBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0gaXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOZWdhdGl2ZUludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTmVnYXRpdmVJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5lZ2F0aXZlSW50ZWdlciBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5lZ2F0aXZlSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOZWdhdGl2ZUludGVnZXJ9IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTmVnYXRpdmVJbnRlZ2VyIHBhcnNlKGphdmEuaW8uUmVhZGVyIHIpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOZWdhdGl2ZUludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOZWdhdGl2ZUludGVnZXJ9IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTmVnYXRpdmVJbnRlZ2VyIHBhcnNlKGphdmEuaW8uUmVhZGVyIHIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTmVnYXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTmVnYXRpdmVJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTmVnYXRpdmVJbnRlZ2VyIHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5lZ2F0aXZlSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5lZ2F0aXZlSW50ZWdlcn0gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5lZ2F0aXZlSW50ZWdlciBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTmVnYXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTmVnYXRpdmVJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5lZ2F0aXZlSW50ZWdlciBwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOZWdhdGl2ZUludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5lZ2F0aXZlSW50ZWdlcn0gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOZWdhdGl2ZUludGVnZXIgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5lZ2F0aXZlSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTmVnYXRpdmVJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOZWdhdGl2ZUludGVnZXIgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTmVnYXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOZWdhdGl2ZUludGVnZXJ9IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5lZ2F0aXZlSW50ZWdlciBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb257Ci0gICAgICAgICAgcmV0dXJuIChYbWxOZWdhdGl2ZUludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgRmFjdG9yeSgpIHsgfSAvLyBObyBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGFsbG93ZWQKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM2YjJhYy4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7Ci0KLQotLyoqCi0gKiBDb3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotICogPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNub25OZWdhdGl2ZUludGVnZXIiPnhzOm5vbk5lZ2F0aXZlSW50ZWdlcjwvYT4gdHlwZS4KLSAqIE9uZSBvZiB0aGUgZGVyaXZlZCB0eXBlcyBiYXNlZCBvbiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2RlY2ltYWwiPnhzOmRlY2ltYWw8L2E+LgotICogPHA+Ci0gKiBWZXJpZmllZCB0byBiZSB6ZXJvIG9yIHBvc2l0aXZlIHdoZW4gdmFsaWRhdGluZy4KLSAqIDxwPgotICogQ29udmVydGlibGUgdG8ge0BsaW5rIGphdmEubWF0aC5CaWdJbnRlZ2VyfS4KLSAqLyAKLXB1YmxpYyBpbnRlcmZhY2UgWG1sTm9uTmVnYXRpdmVJbnRlZ2VyIGV4dGVuZHMgWG1sSW50ZWdlcgotewotICAgIC8qKiBUaGUgY29uc3RhbnQge0BsaW5rIFNjaGVtYVR5cGV9IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGUgdHlwZSA9IFhtbEJlYW5zLmdldEJ1aWx0aW5UeXBlU3lzdGVtKCkudHlwZUZvckhhbmRsZSgiX0JJX25vbk5lZ2F0aXZlSW50ZWdlciIpOwotICAgIAotICAgIC8qKgotICAgICAqIEEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSAgICAgKiBvZiB7QGxpbmsgWG1sTm9uTmVnYXRpdmVJbnRlZ2VyfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEZhY3RvcnkKLSAgICB7Ci0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxOb25OZWdhdGl2ZUludGVnZXJ9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTm9uTmVnYXRpdmVJbnRlZ2VyIG5ld0luc3RhbmNlKCkgewotICAgICAgICAgIHJldHVybiAoWG1sTm9uTmVnYXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxOb25OZWdhdGl2ZUludGVnZXJ9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTm9uTmVnYXRpdmVJbnRlZ2VyIG5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOb25OZWdhdGl2ZUludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gaW1tdXRhYmxlIHtAbGluayBYbWxOb25OZWdhdGl2ZUludGVnZXJ9IHZhbHVlICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTm9uTmVnYXRpdmVJbnRlZ2VyIG5ld1ZhbHVlKE9iamVjdCBvYmopIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5vbk5lZ2F0aXZlSW50ZWdlcikgdHlwZS5uZXdWYWx1ZSggb2JqICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTm9uTmVnYXRpdmVJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7MTIzNDU2Nzg5MCZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5vbk5lZ2F0aXZlSW50ZWdlciBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOb25OZWdhdGl2ZUludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOb25OZWdhdGl2ZUludGVnZXJ9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsxMjM0NTY3ODkwJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTm9uTmVnYXRpdmVJbnRlZ2VyIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOb25OZWdhdGl2ZUludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOb25OZWdhdGl2ZUludGVnZXJ9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5vbk5lZ2F0aXZlSW50ZWdlciBwYXJzZShqYXZhLmlvLkZpbGUgZikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5vbk5lZ2F0aXZlSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5vbk5lZ2F0aXZlSW50ZWdlcn0gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTm9uTmVnYXRpdmVJbnRlZ2VyIHBhcnNlKGphdmEuaW8uRmlsZSBmLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5vbk5lZ2F0aXZlSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5vbk5lZ2F0aXZlSW50ZWdlcn0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOb25OZWdhdGl2ZUludGVnZXIgcGFyc2UoamF2YS5uZXQuVVJMIHUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOb25OZWdhdGl2ZUludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG51bGwgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTm9uTmVnYXRpdmVJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5vbk5lZ2F0aXZlSW50ZWdlciBwYXJzZShqYXZhLm5ldC5VUkwgdSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOb25OZWdhdGl2ZUludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG9wdGlvbnMgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTm9uTmVnYXRpdmVJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5vbk5lZ2F0aXZlSW50ZWdlciBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTm9uTmVnYXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5vbk5lZ2F0aXZlSW50ZWdlcn0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOb25OZWdhdGl2ZUludGVnZXIgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOb25OZWdhdGl2ZUludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTm9uTmVnYXRpdmVJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5vbk5lZ2F0aXZlSW50ZWdlciBwYXJzZShqYXZhLmlvLlJlYWRlciByKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTm9uTmVnYXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTm9uTmVnYXRpdmVJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5vbk5lZ2F0aXZlSW50ZWdlciBwYXJzZShqYXZhLmlvLlJlYWRlciByLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5vbk5lZ2F0aXZlSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5vbk5lZ2F0aXZlSW50ZWdlcn0gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5vbk5lZ2F0aXZlSW50ZWdlciBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOb25OZWdhdGl2ZUludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOb25OZWdhdGl2ZUludGVnZXJ9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOb25OZWdhdGl2ZUludGVnZXIgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5vbk5lZ2F0aXZlSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5vbk5lZ2F0aXZlSW50ZWdlcn0gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOb25OZWdhdGl2ZUludGVnZXIgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTm9uTmVnYXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOb25OZWdhdGl2ZUludGVnZXJ9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTm9uTmVnYXRpdmVJbnRlZ2VyIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOb25OZWdhdGl2ZUludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5vbk5lZ2F0aXZlSW50ZWdlcn0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTm9uTmVnYXRpdmVJbnRlZ2VyIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5vbk5lZ2F0aXZlSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTm9uTmVnYXRpdmVJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOb25OZWdhdGl2ZUludGVnZXIgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5vbk5lZ2F0aXZlSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBGYWN0b3J5KCkgeyB9IC8vIE5vIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgYWxsb3dlZAotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTlmMjVmLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKLQotCi0vKioKLSAqIENvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gKiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI25vblBvc2l0aXZlSW50ZWdlciI+eHM6bm9uUG9zaXRpdmVJbnRlZ2VyPC9hPiB0eXBlLgotICogT25lIG9mIHRoZSBkZXJpdmVkIHR5cGVzIGJhc2VkIG9uIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZGVjaW1hbCI+eHM6ZGVjaW1hbDwvYT4uCi0gKiA8cD4KLSAqIFZlcmlmaWVkIHRvIGJlIHplcm8gb3IgbmVnYXRpdmUgd2hlbiB2YWxpZGF0aW5nLgotICogPHA+Ci0gKiBDb252ZXJ0aWJsZSB0byB7QGxpbmsgamF2YS5tYXRoLkJpZ0ludGVnZXJ9LgotICovIAotcHVibGljIGludGVyZmFjZSBYbWxOb25Qb3NpdGl2ZUludGVnZXIgZXh0ZW5kcyBYbWxJbnRlZ2VyCi17Ci0gICAgLyoqIFRoZSBjb25zdGFudCB7QGxpbmsgU2NoZW1hVHlwZX0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZSB0eXBlID0gWG1sQmVhbnMuZ2V0QnVpbHRpblR5cGVTeXN0ZW0oKS50eXBlRm9ySGFuZGxlKCJfQklfbm9uUG9zaXRpdmVJbnRlZ2VyIik7Ci0gICAgCi0gICAgLyoqCi0gICAgICogQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotICAgICAqIG9mIHtAbGluayBYbWxOb25Qb3NpdGl2ZUludGVnZXJ9LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgRmFjdG9yeQotICAgIHsKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbE5vblBvc2l0aXZlSW50ZWdlcn0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOb25Qb3NpdGl2ZUludGVnZXIgbmV3SW5zdGFuY2UoKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOb25Qb3NpdGl2ZUludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbE5vblBvc2l0aXZlSW50ZWdlcn0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOb25Qb3NpdGl2ZUludGVnZXIgbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5vblBvc2l0aXZlSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBpbW11dGFibGUge0BsaW5rIFhtbE5vblBvc2l0aXZlSW50ZWdlcn0gdmFsdWUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOb25Qb3NpdGl2ZUludGVnZXIgbmV3VmFsdWUoT2JqZWN0IG9iaikgewotICAgICAgICAgIHJldHVybiAoWG1sTm9uUG9zaXRpdmVJbnRlZ2VyKSB0eXBlLm5ld1ZhbHVlKCBvYmogKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOb25Qb3NpdGl2ZUludGVnZXJ9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDstMTIzNDU2Nzg5MCZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5vblBvc2l0aXZlSW50ZWdlciBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOb25Qb3NpdGl2ZUludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOb25Qb3NpdGl2ZUludGVnZXJ9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDstMTIzNDU2Nzg5MCZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5vblBvc2l0aXZlSW50ZWdlciBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTm9uUG9zaXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTm9uUG9zaXRpdmVJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOb25Qb3NpdGl2ZUludGVnZXIgcGFyc2UoamF2YS5pby5GaWxlIGYpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOb25Qb3NpdGl2ZUludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOb25Qb3NpdGl2ZUludGVnZXJ9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5vblBvc2l0aXZlSW50ZWdlciBwYXJzZShqYXZhLmlvLkZpbGUgZiwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOb25Qb3NpdGl2ZUludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOb25Qb3NpdGl2ZUludGVnZXJ9IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTm9uUG9zaXRpdmVJbnRlZ2VyIHBhcnNlKGphdmEubmV0LlVSTCB1KSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTm9uUG9zaXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBudWxsICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5vblBvc2l0aXZlSW50ZWdlcn0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOb25Qb3NpdGl2ZUludGVnZXIgcGFyc2UoamF2YS5uZXQuVVJMIHUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTm9uUG9zaXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBvcHRpb25zICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5vblBvc2l0aXZlSW50ZWdlcn0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOb25Qb3NpdGl2ZUludGVnZXIgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5vblBvc2l0aXZlSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOb25Qb3NpdGl2ZUludGVnZXJ9IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTm9uUG9zaXRpdmVJbnRlZ2VyIHBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0gaXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTm9uUG9zaXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5vblBvc2l0aXZlSW50ZWdlcn0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOb25Qb3NpdGl2ZUludGVnZXIgcGFyc2UoamF2YS5pby5SZWFkZXIgcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5vblBvc2l0aXZlSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5vblBvc2l0aXZlSW50ZWdlcn0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOb25Qb3NpdGl2ZUludGVnZXIgcGFyc2UoamF2YS5pby5SZWFkZXIgciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOb25Qb3NpdGl2ZUludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOb25Qb3NpdGl2ZUludGVnZXJ9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOb25Qb3NpdGl2ZUludGVnZXIgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTm9uUG9zaXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTm9uUG9zaXRpdmVJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTm9uUG9zaXRpdmVJbnRlZ2VyIHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOb25Qb3NpdGl2ZUludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOb25Qb3NpdGl2ZUludGVnZXJ9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTm9uUG9zaXRpdmVJbnRlZ2VyIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5vblBvc2l0aXZlSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTm9uUG9zaXRpdmVJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5vblBvc2l0aXZlSW50ZWdlciBwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTm9uUG9zaXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOb25Qb3NpdGl2ZUludGVnZXJ9IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5vblBvc2l0aXZlSW50ZWdlciBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOb25Qb3NpdGl2ZUludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5vblBvc2l0aXZlSW50ZWdlcn0gZnJhZ21lbnQgZnJvbSBhbiAgWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5vblBvc2l0aXZlSW50ZWdlciBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTm9uUG9zaXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIEZhY3RvcnkoKSB7IH0gLy8gTm8gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBhbGxvd2VkCi0gICAgfQotfQotCmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQxNzY3Yy4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOwotCi0KLS8qKgotICogQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSAqIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jbm9ybWFsaXplZFN0cmluZyI+eHM6bm9ybWFsaXplZFN0cmluZzwvYT4gdHlwZS4KLSAqIE9uZSBvZiB0aGUgZGVyaXZlZCB0eXBlcyBiYXNlZCBvbiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3N0cmluZyI+eHM6c3RyaW5nPC9hPi4KLSAqIDxwPgotICogQW4gbm9ybWFsaXplZFN0cmluZyBzaW1wbHkgaXMgYSBzdHJpbmcgd2hlcmUgYWxsIHRoZSBjYXJyaWFnZSByZXR1cm4sCi0gKiBsaW5lZmVlZCwgYW5kIHRhYiBjaGFyYWN0ZXJzIGhhdmUgYmVlbiBub3JtYWxpemVkIChzd2l0Y2hlZCB0bykgb3JkaW5hcnkKLSAqIHNwYWNlIGNoYXJhY3RlcnMuICBVc2Ugbm9ybWFsaXplZFN0cmluZyBmb3IgbG9uZyBzdHJpbmdzIHRvIG1ha2UgdGhlbQotICogaW5zZW5zaXRpdmUgdG8gbGluZSBicmVha2luZy4gIElmIHlvdSB3aXNoIHRvIG9mdGVuIGJlIGluc2Vuc2l0aXZlIHRvCi0gKiBydW5zIG9mIHdoaXRlc3BhY2UgKGFzIGlzIG9mdGVuIHRoZSBjYXNlKSwgdXNlCi0gKiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Rva2VuIj54czp0b2tlbjwvYT4KLSAqIChha2Ege0BsaW5rIFhtbFRva2VufSkgaW5zdGVhZC4KLSAqIDxwPgotICogQ29udmVydGlibGUgdG8ge0BsaW5rIFN0cmluZ30uICBXaGVuIG9idGFpbmluZyB0aGUgc3RyaW5nVmFsdWUsIHRoZQotICogd2hpdGVzcGFjZS1ub3JtYWxpemVkIHZhbHVlIGlzIHJldHVybmVkLgotICovIAotcHVibGljIGludGVyZmFjZSBYbWxOb3JtYWxpemVkU3RyaW5nIGV4dGVuZHMgWG1sU3RyaW5nCi17Ci0gICAgLyoqIFRoZSBjb25zdGFudCB7QGxpbmsgU2NoZW1hVHlwZX0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZSB0eXBlID0gWG1sQmVhbnMuZ2V0QnVpbHRpblR5cGVTeXN0ZW0oKS50eXBlRm9ySGFuZGxlKCJfQklfbm9ybWFsaXplZFN0cmluZyIpOwotICAgIAotICAgIC8qKgotICAgICAqIEEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSAgICAgKiBvZiB7QGxpbmsgWG1sTm9ybWFsaXplZFN0cmluZ30uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBGYWN0b3J5Ci0gICAgewotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sTm9ybWFsaXplZFN0cmluZ30gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOb3JtYWxpemVkU3RyaW5nIG5ld0luc3RhbmNlKCkgewotICAgICAgICAgIHJldHVybiAoWG1sTm9ybWFsaXplZFN0cmluZykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sTm9ybWFsaXplZFN0cmluZ30gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOb3JtYWxpemVkU3RyaW5nIG5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOb3JtYWxpemVkU3RyaW5nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGltbXV0YWJsZSB7QGxpbmsgWG1sTm9ybWFsaXplZFN0cmluZ30gdmFsdWUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOb3JtYWxpemVkU3RyaW5nIG5ld1ZhbHVlKE9iamVjdCBvYmopIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5vcm1hbGl6ZWRTdHJpbmcpIHR5cGUubmV3VmFsdWUoIG9iaiApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5vcm1hbGl6ZWRTdHJpbmd9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsgc3RyaW5nIHRvIG5vcm1hbGl6ZSAmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOb3JtYWxpemVkU3RyaW5nIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5vcm1hbGl6ZWRTdHJpbmcpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOb3JtYWxpemVkU3RyaW5nfSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7IHN0cmluZyB0byBub3JtYWxpemUgJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTm9ybWFsaXplZFN0cmluZyBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTm9ybWFsaXplZFN0cmluZykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5vcm1hbGl6ZWRTdHJpbmd9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5vcm1hbGl6ZWRTdHJpbmcgcGFyc2UoamF2YS5pby5GaWxlIGYpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOb3JtYWxpemVkU3RyaW5nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTm9ybWFsaXplZFN0cmluZ30gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTm9ybWFsaXplZFN0cmluZyBwYXJzZShqYXZhLmlvLkZpbGUgZiwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOb3JtYWxpemVkU3RyaW5nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTm9ybWFsaXplZFN0cmluZ30gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOb3JtYWxpemVkU3RyaW5nIHBhcnNlKGphdmEubmV0LlVSTCB1KSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTm9ybWFsaXplZFN0cmluZykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgbnVsbCApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOb3JtYWxpemVkU3RyaW5nfSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5vcm1hbGl6ZWRTdHJpbmcgcGFyc2UoamF2YS5uZXQuVVJMIHUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTm9ybWFsaXplZFN0cmluZykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOb3JtYWxpemVkU3RyaW5nfSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5vcm1hbGl6ZWRTdHJpbmcgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5vcm1hbGl6ZWRTdHJpbmcpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTm9ybWFsaXplZFN0cmluZ30gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOb3JtYWxpemVkU3RyaW5nIHBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0gaXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTm9ybWFsaXplZFN0cmluZykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOb3JtYWxpemVkU3RyaW5nfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5vcm1hbGl6ZWRTdHJpbmcgcGFyc2UoamF2YS5pby5SZWFkZXIgcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5vcm1hbGl6ZWRTdHJpbmcpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOb3JtYWxpemVkU3RyaW5nfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5vcm1hbGl6ZWRTdHJpbmcgcGFyc2UoamF2YS5pby5SZWFkZXIgciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOb3JtYWxpemVkU3RyaW5nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTm9ybWFsaXplZFN0cmluZ30gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE5vcm1hbGl6ZWRTdHJpbmcgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTm9ybWFsaXplZFN0cmluZykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5vcm1hbGl6ZWRTdHJpbmd9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOb3JtYWxpemVkU3RyaW5nIHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOb3JtYWxpemVkU3RyaW5nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTm9ybWFsaXplZFN0cmluZ30gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOb3JtYWxpemVkU3RyaW5nIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbE5vcm1hbGl6ZWRTdHJpbmcpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbE5vcm1hbGl6ZWRTdHJpbmd9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTm9ybWFsaXplZFN0cmluZyBwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sTm9ybWFsaXplZFN0cmluZykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sTm9ybWFsaXplZFN0cmluZ30gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sTm9ybWFsaXplZFN0cmluZyBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOb3JtYWxpemVkU3RyaW5nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxOb3JtYWxpemVkU3RyaW5nfSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxOb3JtYWxpemVkU3RyaW5nIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxOb3JtYWxpemVkU3RyaW5nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIEZhY3RvcnkoKSB7IH0gLy8gTm8gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBhbGxvd2VkCi0gICAgfQotfQotCmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiYTU4NjguLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzc2ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW07Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb247Ci0KLWltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKLQotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi0vKioKLSAqIENvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gKiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2tleS11clR5cGUiPnhzOmFueVR5cGU8L2E+LAotICogdGhlIGJhc2UgdHlwZSBmb3IgYWxsIFhNTCBCZWFucy4KLSAqIDxwPgotICogU2luY2UgYWxsIFhNTCBTY2hlbWEgdHlwZXMgYXJlIHRyYW5zbGF0ZWQgaW50byBjb3JyZXNwb25kaW5nIFhNTCBCZWFuCi0gKiBjbGFzc2VzLCBhbmQgYWxsIFNjaGVtYSB0eXBlIGRlcml2YXRpb24gY29ycmVzcG9uZHMgdG8gSmF2YSBjbGFzcwotICogaW5oZXJpdGFuY2UsIHRoZSBmYWN0IHRoYXQgYWxsIFNjaGVtYSB0eXBlcyBkZXJpdmUgZnJvbSB4czphbnlUeXBlIG1lYW5zCi0gKiB0aGF0IGFsbCBYTUwgQmVhbiBjbGFzc2VzIGRlcml2ZSBmcm9tIFhtbE9iamVjdC4KLSAqIDxwPgotICogT24gdGhpcyBiYXNlIGNsYXNzIHlvdSB3aWxsIGZpbmQgYSBudW1iZXIgb2YgY29tbW9uIGZhY2lsaXRpZXMgdGhhdAotICogYWxsIFhNTCBCZWFuIGNsYXNzZXMgcHJvdmlkZToKLSAqIDxwPgotICogPHVsPgotICogPGxpPkV2ZXJ5IFhNTCBCZWFuIGNsYXNzIGhhcyBhbiBpbm5lciBGYWN0b3J5IGNsYXNzIGZvciBjcmVhdGluZyBhbmQgcGFyc2luZwotICogICAgIGluc3RhbmNlcywgaW5jbHVkaW5nIFhtbE9iamVjdC4gVXNlIHtAbGluayBYbWxPYmplY3QuRmFjdG9yeX0gaXRzZWxmCi0gKiAgICAgdG8gcHJvZHVjZSB1bnR5cGVkIFhNTCB0cmVlcyBvciBYTUwgdHJlZXMgdGhhdCBpbXBsZW1lbnQgc3BlY2lmaWMKLSAqICAgICBzdWJ0eXBlcyBvZiBYbWxPYmplY3QgZGVwZW5kaW5nIG9uIGEgcmVjb2duaXplZCByb290IGRvY3VtZW50IGVsZW1lbnQuCi0gKiAgICAgSWYgeW91IGRlcGVuZCBvbiB0aGUgYXV0b21hdGljIHR5cGUgaW5mZXJlbmNlLCB5b3Ugd2lsbCB3YW50IHRvIHVuZGVyc3RhbmQKLSAqICAgICB0aGUgdHlwZSBpbmZlcmVuY2UgaXNzdWVzIGRlc2NyaWJlZCBiZWxvdy4KLSAqIDxsaT5UbyB3cml0ZSBvdXQgYW4gYWNjdXJhdGUgWE1MIGZpbGUgZm9yIHRoZSBYTUwgdHJlZSB1bmRlciB0aGlzCi0gKiAgICAgWG1sT2JqZWN0LCB1c2Ugb25lIG9mIHRoZSB7QGxpbmsgI3NhdmV9IG1ldGhvZHMsCi0gKiAgICAgb3Ige0BsaW5rICNuZXdJbnB1dFN0cmVhbX0gb3Ige0BsaW5rICNuZXdSZWFkZXJ9LgotICogICAgIFVzZSB7QGxpbmsgI3RvU3RyaW5nfSB0byBwcm9kdWNlIGEgcHJldHR5LXByaW50ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlCi0gKiAgICAgWE1MIHN1YnRyZWUgdW5kZXIgdGhpcyBYTUwgT2JqZWN0LiAgSWYgeW91IHNhdmUgaW50ZXJpb3IgcG9ydGlvbnMgb2YKLSAqICAgICBhbiBYTUwgZG9jdW1lbnQsIHlvdSB3aWxsIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW5uZXIgY29udGVudHMKLSAqICAgICB2ZXJzdXMgb3V0ZXIgY29udGFpbmVyIGlzc3VlcyBkZXNjcmliZWQgYmVsb3cuCi0gKiA8bGk+SXQgaXMgYWxzbyBzaW1wbGUgdG8gY29weSBhbiBYbWxPYmplY3QgaW5zdGFuY2UgdG8gb3IgZnJvbSBhIHN0YW5kYXJkCi0gKiAgICAgRE9NIHRyZWUgb3IgU0FYIHN0cmVhbS4gIFVzZSB7QGxpbmsgWG1sT2JqZWN0LkZhY3RvcnkjcGFyc2UoTm9kZSl9LAotICogICAgIGZvciBleGFtcGxlLCB0byBsb2FkIGZyb20gRE9NOyB1c2Uge0BsaW5rIFhtbE9iamVjdC5GYWN0b3J5I25ld1htbFNheEhhbmRsZXJ9Ci0gKiAgICAgdG8gbG9hZCBmcm9tIFNBWDsgdXNlIHtAbGluayAjbmV3RG9tTm9kZSgpfSB0byBzYXZlIHRvIERPTTsgYW5kIHVzZSAKLSAqICAgICB7QGxpbmsgI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcil9Ci0gKiAgICAgdG8gc2F2ZSB0byBTQVguCi0gKiA8bGk+VXNlIHtAbGluayAjdmFsaWRhdGV9IHRvIHZhbGlkYXRlIHRoZSBzdWJ0cmVlIG9mIFhNTCB1bmRlciB0aGlzCi0gKiAgICAgWE1MIE9iamVjdC4gIElmIHlvdSB3aXNoIHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbG9jYXRpb24KLSAqICAgICBhbmQgcmVhc29uIGZvciB2YWxpZGF0aW9uIGVycm9ycywgc2VlIHtAbGluayBYbWxPcHRpb25zI3NldEVycm9yTGlzdGVuZXJ9LAotICogICAgIGFuZCB1c2Uge0BsaW5rICN2YWxpZGF0ZShYbWxPcHRpb25zKX0uCi0gKiA8bGk+VXNlIHtAbGluayAjbmV3Q3Vyc29yfSB0byBhY2Nlc3MgdGhlIGZ1bGwgWE1MIGluZm9zZXQsIGZvciBleGFtcGxlLAotICogICAgIGlmIHlvdSBuZWVkIHRvIGRldGVybWluZSBpbnRlcmxlYXZlZCBlbGVtZW50IG9yZGVyIG9yIG1hbmlwdWxhdGUKLSAqICAgICBhbm5vdGF0aW9ucywgY29tbWVudHMsIG9yIG1peGVkIGNvbnRlbnQuICBTZWUge0BsaW5rIFhtbEN1cnNvcn0uCi0gKiA8bGk+VXNlIHtAbGluayAjc2VsZWN0UGF0aH0gdG8gZmluZCBvdGhlciBYbWxPYmplY3RzIGluIHRoZSBzdWJ0cmVlIHVuZGVybmVhdGgKLSAqICAgICB0aGlzIFhtbE9iamVjdCB1c2luZyByZWxhdGl2ZSBYUGF0aHMuICAoSW4gc2VsZWN0UGF0aCwgIi4iIGluZGljYXRlcwotICogICAgIHRoZSBjdXJyZW50IGVsZW1lbnQgb3IgYXR0cmlidXRlLikKLSAqIDwvdWw+Ci0gKiA8cD4KLSAqIFR5cGUgaW5mZXJlbmNlLiAgV2hlbiB1c2luZyB7QGxpbmsgWG1sT2JqZWN0LkZhY3Rvcnl9IHRvIHBhcnNlIFhNTCBkb2N1bWVudHMsCi0gKiB0aGUgYWN0dWFsIGRvY3VtZW50IHR5cGUgaXMgbm90IHtAbGluayBYbWxPYmplY3QjdHlwZX0gaXRzZWxmLCBidXQgYSBzdWJ0eXBlCi0gKiBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgdGhlIHBhcnNlZCBkb2N1bWVudC4gIElmIHRoZSBwYXJzZWQgZG9jdW1lbnQKLSAqIGNvbnRhaW5zIGEgcmVjb2duaXplZCByb290IGRvY3VtZW50IGVsZW1lbnQsIHRoZW4gdGhlIGFjdHVhbCB0eXBlIG9mIHRoZQotICogbG9hZGVkIGluc3RhbmNlIHdpbGwgYmUgdGhlIG1hdGNoaW5nIERvY3VtZW50IHR5cGUuICBGb3IgZXhhbXBsZToKLSAqIDxwcmU+Ci0gKiBYbWxPYmplY3QgeG9iaiA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKG15RG9jdW1lbnQpOwotICogaWYgKHhvYmogaW5zdGFuY2VvZiBNeU9yZGVyRG9jdW1lbnQpIC8vIHN0YXJ0cyB3LyAmbHQ7bXktb3JkZXImZ3Q7Ci0gKiB7Ci0gKiAgICAgTXlPcmRlckRvY3VtZW50IG15ZG9jID0gKE15T3JkZXJEb2N1bWVudCl4b2JqOwotICogICAgIGlmICgheG9iai52YWxpZGF0ZSgpKQotICogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vdCBhIHZhbGlkIG15LW9yZGVyIGRvY3VtZW50Iik7Ci0gKiB9Ci0gKiBlbHNlCi0gKiB7Ci0gKiAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOb3QgYSBteS1vcmRlciBkb2N1bWVudCIpOwotICogfQotICogPC9wcmU+Ci0gKiBFdmVyeSBYTUwgQmVhbiBjbGFzcyBoYXMgaXRzIG93biBpbm5lciBGYWN0b3J5IGNsYXNzLAotICogc28gaWYgeW91IGFjdHVhbGx5IGtub3cgZXhhY3RseSB3aGljaCBYTUwgQmVhbiBkb2N1bWVudCB0eXBlCi0gKiB5b3Ugd2FudCB0byBsb2FkIGFzIGluIHRoZSBleGFtcGxlIGFib3ZlLCB5b3Ugc2hvdWxkIHVzZSB0aGUKLSAqIHRoZSBzcGVjaWZpYyBYTUwgQmVhbiBGYWN0b3J5IGNsYXNzIGluc3RlYWQuIEZvciBleGFtcGxlOgotICogPHByZT4KLSAqIE15T3JkZXJEb2N1bWVudCBteWRvYyA9IE15T3JkZXJEb2N1bWVudC5GYWN0b3J5LnBhcnNlKG15RG9jdW1lbnQpOwotICogPC9wcmU+Ci0gKiBUaGUgY29kZSBhYm92ZSB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiB0aGUgcGFyc2VkIGRvY3VtZW50Ci0gKiBkb2VzIG5vdCBiZWdpbiB3aXRoIHRoZSBwcm9wZXIgKG15LW9yZGVyKSBlbGVtZW50LgotICogPHA+Ci0gKiBJbm5lciB2ZXJzdXMgb3V0ZXIuICBBbiBYbWxPYmplY3QgcmVwcmVzZW50cyB0aGUKLSAqIDxlbT5jb250ZW50czwvZW0+IG9mIGFuIGVsZW1lbnQgb3IgYXR0cmlidXRlLCA8ZW0+bm90PC9lbT4gdGhlIGVsZW1lbnQKLSAqIG9yIGF0dHJpYnV0ZSBpdHNlbGYuICBTbyB3aGVuIHlvdSB2YWxpZGF0ZSBvciBzYXZlIGFuIFhtbE9iamVjdCwgeW91Ci0gKiBhcmUgdmFsaWRhdGluZyBvciBzYXZpbmcgaXRzIGNvbnRlbnRzLCBub3QgaXRzIGNvbnRhaW5lci4gIEZvciBleGFtcGxlLAotICogaWYgdGhlIFhtbE9iamVjdCByZXByZXNlbnRzIHRoZSBjb250ZW50cyBvZiBhbiBlbGVtZW50IHdoaWNoIGhhcHBlbnMKLSAqIHRvIGl0c2VsZiBiZSBpbiB0aGUgd3Jvbmcgb3JkZXIgcmVsYXRpdmUgdG8gaXRzIHNpYmxpbmdzLCB2YWxpZGF0ZSB3aWxsCi0gKiBub3QgY29tcGxhaW4gYWJvdXQgdGhlIG1pc3BsYWNlbWVudCBvZiB0aGUgZWxlbWVudCBpdHNlbGYuICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYKLSAqIGVsZW1lbnRzIDxlbT53aXRoaW48L2VtPiB0aGUgWG1sT2JqZWN0IGFyZSBpbiB0aGUgd3Jvbmcgb3JkZXIsIHZhbGlkYXRlCi0gKiB3aWxsIGNvbXBsYWluLiAgU2ltaWxhcmx5LCB3aGVuIHNhdmluZyB0aGUgY29udGVudHMgb2YgYW4gaW50ZXJpb3IKLSAqIFhtbE9iamVjdCwgaXQgaXMgdGhlIGNvbnRlbnRzIG9mIGFuIGVsZW1lbnQsIG5vdCB0aGUgZWxlbWVudCBpdHNlbGYsCi0gKiB3aGljaCBpcyBzYXZlZCBieSBkZWZhdWx0LgotICogPHA+Ci0gKiBSZWFkaW5nIGFuZCB3cml0aW5nIGZyYWdtZW50cy4gV2hlbiByZWFkaW5nIG9yIHdyaXRpbmcgdGhlIGNvbnRlbnRzIG9mIGEKLSAqIHdob2xlIFhNTCBkb2N1bWVudCwgdGhlIHN0YW5kYXJkIFhNTCByZXByZW50YXRpb24gZm9yIGEgZG9jdW1lbnQgaXMgdXNlZC4KLSAqIEhvd2V2ZXIsIHRoZXJlIGlzIG5vIHN0YW5kYXJkIGNvbmNyZXRlIFhNTCByZXByZXNlbnRhdGlvbiBmb3IgImp1c3QgdGhlCi0gKiBjb250ZW50cyIgb2YgYW4gaW50ZXJpb3IgZWxlbWVudCBvciBhdHRyaWJ1dGUuIFNvIHdoZW4gb25lIGlzIG5lZWRlZCwKLSAqIHRoZSB0YWcgJmx0O3htbC1mcmFnbWVudCZndDsgaXMgdXNlZCB0byB3cmFwIHRoZSBjb250ZW50cy4gIFRoaXMgdGFnIGlzIHVzZWQKLSAqIGNhbiBhbHNvIGJlIHVzZWQgdG8gbG9hZCBqdXN0IHRoZSBjb250ZW50cyBmb3IgYW4gWG1sT2JqZWN0IGRvY3VtZW50IGZyYWdtZW50Ci0gKiBvZiBhcmJpdHJhcnkgdHlwZS4gSWYgeW91IHdpc2ggdG8gc2F2ZSBvdXQgdGhlIFhtbE9iamVjdCdzIGNvbnRhaW5lciBlbGVtZW50Ci0gKiBhbG9uZyB3aXRoIGl0cyBjb250ZW50cywgdXNlIHtAbGluayBYbWxPcHRpb25zI3NldFNhdmVPdXRlcn0uCi0gKiA8cD4KLSAqIEltcGxlbWVudGluZyBYbWxPYmplY3QuICBUaGUgWE1MQmVhbnMgbGlicmFyeSBkb2VzIG5vdCBzdXBwb3J0IGFyYml0cmFyeQotICogaW1wbGVtZW50YXRpb25zIG9mIFhtbE9iamVjdCAtIGluIGFsbW9zdCBhbGwgY2FzZXMsIHlvdSBzaG91bGQgb25seSB1c2UKLSAqIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgWG1sT2JqZWN0IHByb3ZpZGVkIGJ5IHRoZSBYTUxCZWFucyBjb21waWxlciBpdHNlbGYuCi0gKiBJZiB5b3UgbmVlZCB0byBpbXBsZW1lbnQgWG1sT2JqZWN0IHlvdXJzZWxmLCB5b3Ugc2hvdWxkIHN1YmNsYXNzCi0gKiBGaWx0ZXJYbWxPYmplY3QgaW4gb3JkZXIgdG8gZGVsZWdhdGUgdG8gYW5vdGhlciB1bmRlcmx5aW5nIFhtbE9iamVjdAotICogaW1wbGVtZW50YXRpb24uIFRoaXMgdGVjaG5pcXVlIHdpbGwgYWxsb3cgeW91IHRvIHVzZSB5b3VyIGNvZGUgdW5jaGFuZ2VkCi0gKiB3aXRoIGZ1dHVyZSB2ZXJzaW9ucyBvZiBYTUxCZWFucyB0aGF0IGFkZCBhZGRpdGlvbmFsIG1ldGhvZHMgb24gWG1sT2JqZWN0LiAKLSAqLyAKLXB1YmxpYyBpbnRlcmZhY2UgWG1sT2JqZWN0IGV4dGVuZHMgWG1sVG9rZW5Tb3VyY2UKLXsKLSAgICAvKiogVGhlIGNvbnN0YW50IHtAbGluayBTY2hlbWFUeXBlfSBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlIHR5cGUgPSBYbWxCZWFucy5nZXRCdWlsdGluVHlwZVN5c3RlbSgpLnR5cGVGb3JIYW5kbGUoIl9CSV9hbnlUeXBlIik7Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgc2NoZW1hIHR5cGUgZm9yIHRoaXMgaW5zdGFuY2UuIFRoaXMgaXMgYSBwZXJtYW5lbnQsCi0gICAgICogdW5jaGFuZ2luZyBwcm9wZXJ0eSBvZiB0aGUgaW5zdGFuY2UuCi0gICAgICovCi0gICAgU2NoZW1hVHlwZSBzY2hlbWFUeXBlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRlbnRzIG9mIHRoaXMgb2JqZWN0IGFyZSB2YWxpZAotICAgICAqIGFjY29yaW5nIHRvIHNjaGVtYVR5cGUoKS4KLSAgICAgKiA8cD4KLSAgICAgKiBEb2VzIGEgZGVlcCB2YWxpZGF0aW9uIG9mIHRoZSBlbnRpcmUgc3VidHJlZSB1bmRlciB0aGUKLSAgICAgKiBvYmplY3QsIGJ1dCBkb2VzIG5vdCB2YWxpZGF0ZSB0aGUgcGFyZW50cyBvciBzaWJsaW5ncwotICAgICAqIG9mIHRoZSBvYmplY3QgaWYgdGhlIG9iamVjdCBpcyBpbiB0aGUgaW50ZXJpb3Igb2YgYW4geG1sCi0gICAgICogdHJlZS4KLSAgICAgKi8KLSAgICBib29sZWFuIHZhbGlkYXRlKCk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogPHA+SnVzdCBsaWtlIHZhbGlkYXRlKCksIGJ1dCB3aXRoIG9wdGlvbnMuPC9wPgotICAgICAqIDxwPklmIHlvdSB3aXNoIHRvIGNvbGxlY3QgZXJyb3IgbWVzc2FnZXMgYW5kIGxvY2F0aW9ucyB3aGlsZSB2YWxpZGF0aW5nLAotICAgICAqIHVzZSB0aGUge0BsaW5rIFhtbE9wdGlvbnMjc2V0RXJyb3JMaXN0ZW5lcn0gbWV0aG9kLiBXaXRoIHRoYXQgbWV0aG9kLAotICAgICAqIHlvdSBjYW4gc3BlY2lmeSBhbiBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgbWVzc2FnZXMgcmVsYXRlZCB0byB2YWxpZGF0aW9uLgotICAgICAqIFRoZSBmb2xsb3dpbmcgaXMgYSBzaW1wbGUgZXhhbXBsZS48L3A+Ci0gICAgICogCi0gICAgICogPHByZT4KLSAgICAgKiAvLyBDcmVhdGUgYW4gWG1sT3B0aW9ucyBpbnN0YW5jZSBhbmQgc2V0IHRoZSBlcnJvciBsaXN0ZW5lci4KLSAgICAgKiBYbWxPcHRpb25zIHZhbGlkYXRlT3B0aW9ucyA9IG5ldyBYbWxPcHRpb25zKCk7Ci0gICAgICogQXJyYXlMaXN0IGVycm9yTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgKiB2YWxpZGF0ZU9wdGlvbnMuc2V0RXJyb3JMaXN0ZW5lcihlcnJvckxpc3QpOwotICAgICAqIAotICAgICAqIC8vIFZhbGlkYXRlIHRoZSBYTUwuCi0gICAgICogYm9vbGVhbiBpc1ZhbGlkID0gbmV3RW1wLnZhbGlkYXRlKHZhbGlkYXRlT3B0aW9ucyk7Ci0gICAgICogCi0gICAgICogLy8gSWYgdGhlIFhNTCBpc24ndCB2YWxpZCwgbG9vcCB0aHJvdWdoIHRoZSBsaXN0ZW5lcidzIGNvbnRlbnRzLAotICAgICAqIC8vIHByaW50aW5nIGNvbnRhaW5lZCBtZXNzYWdlcy4KLSAgICAgKiBpZiAoIWlzVmFsaWQpCi0gICAgICogewotICAgICAqICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlcnJvckxpc3Quc2l6ZSgpOyBpKyspCi0gICAgICogICAgICB7Ci0gICAgICogICAgICAgICAgWG1sRXJyb3IgZXJyb3IgPSAoWG1sRXJyb3IpZXJyb3JMaXN0LmdldChpKTsKLSAgICAgKiAgICAgICAgICAKLSAgICAgKiAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuIik7Ci0gICAgICogICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNZXNzYWdlOiAiICsgZXJyb3IuZ2V0TWVzc2FnZSgpICsgIlxuIik7Ci0gICAgICogICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb2NhdGlvbiBvZiBpbnZhbGlkIFhNTDogIiArIAotICAgICAqICAgICAgICAgICAgICBlcnJvci5nZXRDdXJzb3JMb2NhdGlvbigpLnhtbFRleHQoKSArICJcbiIpOwotICAgICAqICAgICAgfQotICAgICAqIH0KLSAgICAgKiA8L3ByZT4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gb3B0aW9ucyBBbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSB7QGxpbmsgamF2YS51dGlsLkNvbGxlY3Rpb24gCi0gICAgICogQ29sbGVjdGlvbn0gaW50ZXJmYWNlLgotICAgICAqLwotICAgIGJvb2xlYW4gdmFsaWRhdGUoWG1sT3B0aW9ucyBvcHRpb25zKTsKLQotICAgIC8qKgotICAgICAqIFNlbGVjdHMgYSBwYXRoLiAgUGF0aCBjYW4gYmUgYSBzdHJpbmcgb3IgcHJlY29tcGlsZWQgcGF0aCBTdHJpbmcuCi0gICAgICogPHA+Ci0gICAgICogVGhlIHBhdGggbXVzdCBiZSBhIHJlbGF0aXZlIHBhdGgsIHdoZXJlICIuIiByZXByZXNlbnRzIHRoZQotICAgICAqIGVsZW1lbnQgb3IgYXR0cmlidXRlIGNvbnRhaW5nIHRoaXMgWG1sT2JqZWN0LCBhbmQgaXQgbXVzdCBzZWxlY3QKLSAgICAgKiBvbmx5IG90aGVyIGVsZW1lbnRzIG9yIGF0dHJpYnV0ZXMuICBJZiBhIG5vbi1lbGVtZW50IG9yIG5vbi1hdHRyaWJ1dGUKLSAgICAgKiBpcyBzZWxlY3RlZCwgYW4gdW5jaGVja2VkIGV4Y2VwdGlvbiBpcyB0aHJvd24uCi0gICAgICogPHA+Ci0gICAgICogVGhlIGFycmF5IHRoYXQgaXMgcmV0dXJuZWQgY29udGFpbnMgYWxsIHRoZSBzZWxlY3RlZAotICAgICAqIFhtbE9iamVjdHMsIHdpdGhpbiB0aGUgc2FtZSBkb2N1bWVudCwgbGlzdGVkIGluIGRvY3VtZW50Ci0gICAgICogb3JkZXIuICBUaGUgYWN0dWFsIGFycmF5IHR5cGUgb2YgdGhlIHJlc3VsdCBpcyBpbmZlcnJlZAotICAgICAqIGZyb20gdGhlIGNsb3Nlc3QgY29tbW9uIGJhc2UgdHlwZSBvZiBzZWxlY3RlZCByZXN1bHRzLgotICAgICAqIDxwPgotICAgICAqIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiB1c2FnZS4gIFN1cHBvc2Ugd2UgaGF2ZSBhIGdsb2JhbAotICAgICAqIGVsZW1lbnQgZGVmaW5pdGlvbiBmb3IgIm93bmVyIiB3aG9zZSB0eXBlIGlzICJwZXJzb24iOgotICAgICAqIDxwcmU+Ci0gICAgICogICAmbHQ7c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL29wZW51cmkub3JnL3NhbXBsZSI+Ci0gICAgICogICAgICAmbHQ7ZWxlbWVudCBuYW1lPSJvd25lciIgdHlwZT0icGVyc29uIi8+Ci0gICAgICogICAgICAmbHQ7Y29tcGxleFR5cGUgbmFtZT0icGVyc29uIj4KLSAgICAgKiAgICAgICAgIFsuLi5dCi0gICAgICogICAgICAmbHQ7L2NvbXBsZXhUeXBlPgotICAgICAqICAgJmx0Oy9zY2hlbWE+Ci0gICAgICogPC9wcmU+Ci0gICAgICogYW5kIHN1cHBvc2UgIm93bmVyIiB0YWdzIGNhbiBiZSBzY2F0dGVyZWQgdGhyb3VnaG91dCB0aGUKLSAgICAgKiBkb2N1bWVudC4gIFRoZW4gd2UgY2FuIHdyaXRlIHRoZSBmb2xsb3dpbmcgY29kZSB0byBmaW5kCi0gICAgICogdGhlbSBhbGw6Ci0gICAgICogPHByZT4KLSAgICAgKiBpbXBvcnQgb3JnLm9wZW51cmkuc2FtcGxlLlBlcnNvbjsKLSAgICAgKiBpbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy4qOwotICAgICAqIFsuLi5dCi0gICAgICogICBYbWxPYmplY3QgeG9iaiA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKG15RmlsZSk7Ci0gICAgICogICBQZXJzb25bXSByZXN1bHRzOwotICAgICAqICAgcmVzdWx0cyA9IChQZXJzb25bXSl4b2JqLnNlbGVjdFBhdGgoCi0gICAgICogICAgICAiZGVjbGFyZSBuYW1lc3BhY2Ugcz0naHR0cDovL3d3dy5vcGVudXJpLm9yZy9zYW1wbGUnICIgKwotICAgICAqICAgICAgIi4vL3M6b3duZXIiKTsKLSAgICAgKiA8L3ByZT4KLSAgICAgKiBOb3RpY2UgdGhlIHdheSBpbiB3aGljaCBuYW1lc3BhY2UgZGVjbGFyYXRpb25zIGFyZSBkb25lIGluIFhQYXRoIDIuMC4KLSAgICAgKiBTaW5jZSBYUGF0aCBjYW4gb25seSBuYXZpZ2F0ZSB3aXRoaW4gYW4gWE1MIGRvY3VtZW50IC0gaXQgY2Fubm90Ci0gICAgICogY29uc3RydWN0IG5ldyBYTUwgLSB0aGUgcmVzdWx0aW5nIFhtbE9iamVjdHMgYWxsIHJlc2lkZSBpbgotICAgICAqIHRoZSBzYW1lIFhNTCBkb2N1bWVudCBhcyB0aGlzIFhtbE9iamVjdCBpdHNlbGYuCi0gICAgICovCi0gICAgWG1sT2JqZWN0W10gc2VsZWN0UGF0aCAoIFN0cmluZyBwYXRoICk7Ci0KLSAgICAvKioKLSAgICAgKiBTZWxlY3RzIGEgcGF0aCwgYXBwbHlpbmcgb3B0aW9ucy4KLSAgICAgKiAKLSAgICAgKiBAc2VlICNzZWxlY3RQYXRoKFN0cmluZykKLSAgICAgKi8KLSAgICBYbWxPYmplY3RbXSBzZWxlY3RQYXRoICggU3RyaW5nIHBhdGgsIFhtbE9wdGlvbnMgb3B0aW9ucyApOwotICAgIAotCi0gICAgLyoqCi0gICAgICogRXhlY3V0ZXMgYSBxdWVyeS4gIFF1ZXJ5IGNhbiBiZSBhIHN0cmluZyBvciBwcmVjb21waWxlZCBxdWVyeSBTdHJpbmcuCi0gICAgICogPHA+Ci0gICAgICogQW4gWFF1ZXJ5IGlzIHZlcnkgc2ltaWxhciB0byBhbiBYUGF0aCwgZXhjZXB0IHRoYXQgaXQgYWxzbyBwZXJtaXRzCi0gICAgICogY29uc3RydWN0aW9uIG9mIG5ldyBYTUwuICBBcyBhIHJlc3VsdCwgdGhlIFhtbE9iamVjdHMgdGhhdCBhcmUKLSAgICAgKiByZXR1cm5lZCBmcm9tIGV4ZWNRdWVyeSBhcmUgaW4gbmV3bHkgY3JlYXRlZCBkb2N1bWVudHMsIHNlcGFyYXRlCi0gICAgICogZnJvbSB0aGUgWG1sT2JqZWN0IG9uIHdoaWNoIHRoZSBxdWVyeSBpcyBleGVjdXRlZC4KLSAgICAgKiA8cD4KLSAgICAgKiBTeW50YXggYW5kIHVzYWdlIGlzIG90aGVyd2lzZSBzaW1pbGFyIHRvIHNlbGVjdFBhdGguCi0gICAgICogPHA+Ci0gICAgICogQHNlZSAjc2VsZWN0UGF0aChTdHJpbmcpCi0gICAgICovCi0gICAgWG1sT2JqZWN0W10gZXhlY1F1ZXJ5ICggU3RyaW5nIHF1ZXJ5ICk7Ci0KLSAgICAvKioKLSAgICAgKiBFeGVjdXRlcyBhIHF1ZXJ5IHdpdGggb3B0aW9ucy4KLSAgICAgKiAKLSAgICAgKiBVc2UgdGhlIDxlbT5vcHRpb25zPC9lbT4gcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlIGZvbGxvd2luZzo8L3A+Ci0gICAgICogCi0gICAgICogPHRhYmxlPgotICAgICAqIDx0cj48dGg+VG8gc3BlY2lmeSB0aGlzPC90aD48dGg+VXNlIHRoaXMgbWV0aG9kPC90aD48L3RyPgotICAgICAqIDx0cj4KLSAgICAgKiAgPHRkPlRoZSBkb2N1bWVudCB0eXBlIGZvciB0aGUgcm9vdCBlbGVtZW50LjwvdGQ+Ci0gICAgICogIDx0ZD57QGxpbmsgWG1sT3B0aW9ucyNzZXREb2N1bWVudFR5cGV9PC90ZD4KLSAgICAgKiA8L3RyPgotICAgICAqIDx0cj4KLSAgICAgKiAgPHRkPlRvIHJlcGxhY2UgdGhlIGRvY3VtZW50IGVsZW1lbnQgd2l0aCB0aGUgc3BlY2lmaWVkIFFOYW1lIHdoZW4gY29uc3RydWN0aW5nIHRoZQotICAgICAqICByZXN1bHRpbmcgZG9jdW1lbnQuPC90ZD4KLSAgICAgKiAgPHRkPntAbGluayBYbWxPcHRpb25zI3NldExvYWRSZXBsYWNlRG9jdW1lbnRFbGVtZW50fTwvdGQ+Ci0gICAgICogPC90cj4KLSAgICAgKiA8dHI+Ci0gICAgICogIDx0ZD5UbyBzdHJpcCBhbGwgaW5zaWduaWZpY2FudCB3aGl0ZXNwYWNlIHdoZW4gY29uc3RydWN0aW5nIGEgZG9jdW1lbnQuPC90ZD4KLSAgICAgKiAgPHRkPntAbGluayBYbWxPcHRpb25zI3NldExvYWRTdHJpcFdoaXRlc3BhY2V9PC90ZD4KLSAgICAgKiA8L3RyPgotICAgICAqIDx0cj4KLSAgICAgKiAgPHRkPlRvIHN0cmlwIGFsbCBjb21tZW50cyB3aGVuIGNvbnN0cnVjdGluZyBhIGRvY3VtZW50LjwvdGQ+Ci0gICAgICogIDx0ZD57QGxpbmsgWG1sT3B0aW9ucyNzZXRMb2FkU3RyaXBDb21tZW50c308L3RkPgotICAgICAqIDwvdHI+Ci0gICAgICogPHRyPgotICAgICAqICA8dGQ+VG8gc3RyaXAgYWxsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zIHdoZW4gY29uc3RydWN0aW5nIGEgZG9jdW1lbnQuPC90ZD4KLSAgICAgKiAgPHRkPntAbGluayBYbWxPcHRpb25zI3NldExvYWRTdHJpcFByb2NpbnN0c308L3RkPgotICAgICAqIDwvdHI+Ci0gICAgICogPHRyPgotICAgICAqICA8dGQ+QSBtYXAgb2YgbmFtZXNwYWNlIFVSSSBzdWJzdGl0dXRpb25zIHRvIHVzZSB3aGVuIGNvbnN0cnVjdGluZyBhIGRvY3VtZW50LjwvdGQ+Ci0gICAgICogIDx0ZD57QGxpbmsgWG1sT3B0aW9ucyNzZXRMb2FkU3Vic3RpdHV0ZU5hbWVzcGFjZXN9PC90ZD4KLSAgICAgKiA8L3RyPgotICAgICAqIDx0cj4KLSAgICAgKiAgPHRkPkFkZGl0aW9uYWwgbmFtZXNwYWNlIG1hcHBpbmdzIHRvIGJlIGFkZGVkIHdoZW4gY29uc3RydWN0aW5nIGEgZG9jdW1lbnQuPC90ZD4KLSAgICAgKiAgPHRkPntAbGluayBYbWxPcHRpb25zI3NldExvYWRBZGRpdGlvbmFsTmFtZXNwYWNlc308L3RkPgotICAgICAqIDwvdHI+Ci0gICAgICogPHRyPgotICAgICAqICA8dGQ+VG8gdHJpbSB0aGUgdW5kZXJseWluZyBYTUwgdGV4dCBidWZmZXIgaW1tZWRpYXRlbHkgYWZ0ZXIgY29uc3RydWN0aW5nIAotICAgICAqICBhIGRvY3VtZW50LCByZXN1bHRpbmcgaW4gYSBzbWFsbGVyIG1lbW9yeSBmb290cHJpbnQuPC90ZD4KLSAgICAgKiAgPHRkPntAbGluayBYbWxPcHRpb25zI3NldExvYWRUcmltVGV4dEJ1ZmZlcn08L3RkPgotICAgICAqIDwvdHI+Ci0gICAgICogPHRyPgotICAgICAqICA8dGQ+V2hldGhlciB2YWx1ZSBmYWNldHMgc2hvdWxkIGJlIGNoZWNrZWQgYXMgdGhleSBhcmUgc2V0LjwvdGQ+Ci0gICAgICogIDx0ZD57QGxpbmsgWG1sT3B0aW9ucyNzZXRWYWxpZGF0ZU9uU2V0fTwvdGQ+Ci0gICAgICogPC90cj4KLSAgICAgKiA8L3RhYmxlPiAKLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gcXVlcnkgVGhlIFhRdWVyeSBleHByZXNzaW9uLgotICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgYXMgZGVzY3JpYmVkLgotICAgICAqIAotICAgICAqIEBzZWUgI2V4ZWNRdWVyeShTdHJpbmcpCi0gICAgICovCi0gICAgWG1sT2JqZWN0W10gZXhlY1F1ZXJ5ICggU3RyaW5nIHF1ZXJ5LCBYbWxPcHRpb25zIG9wdGlvbnMgKTsKLSAgICAKLQotICAgIC8qKgotICAgICAqIENoYW5nZXMgdGhlIHNjaGVtYSB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRhdGEgYW5kCi0gICAgICogcmV0dXJucyBhIG5ldyBYbWxPYmplY3QgaW5zdGFuY2Ugd2hvc2Ugc2NoZW1hVHlwZSBpcyB0aGUKLSAgICAgKiBuZXcgdHlwZS4KLSAgICAgKiA8cD4KLSAgICAgKiBSZXR1cm5zIG51bGwgaWYgdGhlIHR5cGUgY2hhbmdlIGlzIG5vdCBhbGxvd2VkLiBDZXJ0YWluCi0gICAgICogdHlwZSBjaGFuZ2VzIG1heSBiZSBwcm9oaWJpdGVkIG9uIHRoZSBpbnRlcmlvciBvZiBhbiB4bWwKLSAgICAgKiB0cmVlIGR1ZSB0byBzY2hlbWEgdHlwZSBzeXN0ZW0gY29uc3RyYWludHMgKHRoYXQgaXMsIGR1ZQotICAgICAqIHRvIGEgcGFyZW50IGNvbnRhaW5lciB3aXRoaW4gd2hpY2ggdGhlIG5ld2x5IHNwZWNpZmllZAotICAgICAqIHR5cGUgaXMgbm90IHBlcm1pc3NpYmxlKSwgYnV0IHRoZXJlIGFyZSBubyBjb25zdHJhaW50cwotICAgICAqIGF0IHRoZSByb290dHlwZSBjaGFuZ2VzIGFyZSBuZXZlcgotICAgICAqIHByb2hpYml0ZWQgYXQgdGhlIHJvb3Qgb2YgYW4geG1sIHRyZWUuCi0gICAgICogPHA+Ci0gICAgICogSWYgdGhlIHR5cGUgY2hhbmdlIGlzIGFsbG93ZWQsIHRoZW4gdGhlIG5ldyBYbWxPYmplY3Qgc2hvdWxkCi0gICAgICogYmUgdXNlZCByYXRoZXIgdGhhbiB0aGUgb2xkIG9uZS4gVGhlIG9sZCBYbWxPYmplY3QgaW5zdGFuY2UgYW5kCi0gICAgICogYW55IG90aGVyIFhtbE9iamVjdCBpbnN0YW5jZXMgaW4gdGhlIHN1YnRyZWUgYXJlIHBlcm1hbmVudGx5Ci0gICAgICogaW52YWxpZGF0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZC4gKFRoZXkgd2lsbCByZXR1cm4KLSAgICAgKiBJbnZhbGlkU3RhdGVFeGNlcHRpb24gaWYgeW91IHRyeSB0byB1c2UgdGhlbS4pCi0gICAgICoKLSAgICAgKiBJZiBhIHR5cGUgY2hhbmdlIGlzIGRvbmUgb24gdGhlIGludGVyaW9yIG9mIGFuIFhtbAotICAgICAqIHRyZWUsIHRoZW4geHNpOnR5cGUgYXR0cmlidXRlcyBhcmUgdXBkYXRlZCBhcyBuZWVkZWQuCi0gICAgICovCi0gICAgWG1sT2JqZWN0IGNoYW5nZVR5cGUoU2NoZW1hVHlwZSBuZXdUeXBlKTsKLQotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgbmlsLiBOb3RlIHRoYXQgaW4gb3JkZXIgdG8gYmUgbmlsLAotICAgICAqIHRoZSB2YWx1ZSBtdXN0IGJlIGluIGFuIGVsZW1lbnQsIGFuZCB0aGUgZWxlbWVudCBjb250YWluaW5nCi0gICAgICogdGhlIHZhbHVlIG11c3QgYmUgbWFya2VkIGFzIG5pbGxhYmxlIGluIHRoZSBzY2hlbWEuCi0gICAgICovCi0gICAgYm9vbGVhbiBpc05pbCgpOwotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgdmFsdWUgdG8gbmlsLiBUaGUgZWxlbWVudCBjb250YWluaW5nIHRoZSB2YWx1ZSBtdXN0Ci0gICAgICogYmUgbWFya2VkIGFzIG5pbGxhYmxlIGluIHRoZSBzY2hlbWEuCi0gICAgICovCi0gICAgdm9pZCBzZXROaWwoKTsKLQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhbiBYTUwgc3RyaW5nIGZvciB0aGlzIFhNTCBvYmplY3QuCi0gICAgICogPHA+Ci0gICAgICogVGhlIHN0cmluZyBpcyBwcmV0dHktcHJpbnRlZC4gIElmIHlvdSB3YW50IGEgbm9uLXByZXR0eS1wcmludGVkCi0gICAgICogc3RyaW5nLCBvciBpZiB5b3Ugd2FudCB0byBjb250cm9sIG9wdGlvbnMgcHJlY2lzZWx5LCB1c2UgdGhlCi0gICAgICogeG1sVGV4dCgpIG1ldGhvZHMuCi0gICAgICogPHA+Ci0gICAgICogTm90ZSB0aGF0IHdoZW4gcHJvZHVjaW5nIFhNTCBhbnkgb2JqZWN0IG90aGVyIHRoYW4gdmVyeSByb290IG9mIHRoZQotICAgICAqIGRvY3VtZW50LCB0aGVuIHlvdSBhcmUgZ3VhcmFudGVlZCB0byBiZSBsb29raW5nIGF0IG9ubHkgYSBmcmFnbWVudAotICAgICAqIG9mIFhNTCwgaS5lLiwganVzdCB0aGUgY29udGVudHMgb2YgYW4gZWxlbWVudCBvciBhdHRyaWJ1dGUsIGFuZAotICAgICAqIGFuZCB3ZSB3aWxsIHByb2R1Y2UgYSBzdHJpbmcgdGhhdCBzdGFydHMgd2l0aCBhbiA8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzwvY29kZT4gdGFnLgotICAgICAqIFRoZSBYbWxPcHRpb25zLnNldFNhdmVPdXRlcigpIG9wdGlvbiBvbiB4bWxUZXh0IGNhbiBiZSB1c2VkIHRvIHByb2R1Y2UKLSAgICAgKiB0aGUgYWN0dWFsIGVsZW1lbnQgbmFtZSBhYm92ZSB0aGUgb2JqZWN0IGlmIHlvdSB3aXNoLgotICAgICAqLwotICAgIFN0cmluZyB0b1N0cmluZygpOwotCi0gICAgLyoqCi0gICAgICogVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYW4gaW1tdXRhYmxlIHZhbHVlLiBJbW11dGFibGUgdmFsdWVzIGRvIG5vdAotICAgICAqIGhhdmUgYSBwb3NpdGlvbiBpbiBhIHRyZWU7IHJhdGhlciwgdGhleSBhcmUgc3RhbmQtYWxvbmUgc2ltcGxlIHR5cGUKLSAgICAgKiB2YWx1ZXMuIElmIHRoZSBvYmplY3QgaXMgaW1tdXRhYmxlLCB0aGUgZXF1YWxzKCkgbWV0aG9kcyB0ZXN0cyBmb3IKLSAgICAgKiB2YWx1ZSBlcXVhbGl0eSwgYW5kIHRoZSBvYmplY3QgY2FuIGJlIHVzZWQgYXMgdGhlIGtleSBmb3IgYSBoYXNoLgotICAgICAqLwotICAgIGJvb2xlYW4gaXNJbW11dGFibGUoKTsKLQotICAgIC8qKgotICAgICAqIFNldCB0aGUgdmFsdWUvdHlwZSBvZiB0aGlzIFhtbE9iamVjdCB0byBiZSBhIGNvcHkgb2YgdGhlIHNvdXJjZQotICAgICAqIFhtbE9iamVjdC4gIEJlY2F1c2UgdGhlIHR5cGUgb2YgdGhlIHNvdXJjZSBtYXkgYmUgZGlmZmVyZW50IHRoYW4gdGhpcwotICAgICAqIHRhcmdldCwgdGhpcyBYbWxPYmplY3QgbWF5IGJlY29tZSBkZWZ1bmN0LiAgSW4gdGhpcyBjYXNlIHRoZSBuZXcKLSAgICAgKiBYbWxPYmplY3QgaXMgcmV0dXJuZWQuICBJZiBubyB0eXBlIGNoYW5nZSBoYXBwZW5zLCB0aGUgc2FtZSB0aGlzIHdpbGwgYmUKLSAgICAgKiByZXR1cm5lZC4KLSAgICAgKi8KLSAgICBYbWxPYmplY3Qgc2V0KFhtbE9iamVjdCBzcmNPYmopOwotICAgIAotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBkZWVwIGNvcHkgb2YgdGhpcyBYbWxPYmplY3QuICBUaGUgcmV0dXJuZWQgb2JqZWN0IGhhcyB0aGUKLSAgICAgKiBzYW1lIHR5cGUgYXMgdGhlIGN1cnJlbnQgb2JqZWN0LCBhbmQgaGFzIGFsbCB0aGUgY29udGVudCBvZgotICAgICAqIHRoZSBYTUwgZG9jdW1lbnQgdW5kZXJuZWF0aCB0aGUgY3VycmVudCBvYmplY3QuICBOb3RlIHRoYXQKLSAgICAgKiBhbnkgcGFydHMgb2YgdGhlIFhNTCBkb2N1bWVudCBhYm92ZSBvciBvdXRzaWRlIHRoaXMgWG1sT2JqZWN0IGFyZQotICAgICAqIG5vdCBjb3BpZWQuCi0gICAgICovCi0gICAgWG1sT2JqZWN0IGNvcHkoKTsKLQotICAgIC8qKgotICAgICAqIFRydWUgaWYgdGhlIHhtbCB2YWx1ZXMgYXJlIGVxdWFsLiBUd28gZGlmZmVyZW50IG9iamVjdHMKLSAgICAgKiAod2hpY2ggYXJlIGRpc3Rpbmd1aXNoZWQgYnkgZXF1YWxzKG9iaikgPT0gZmFsc2UpIG1heSBvZgotICAgICAqIGNvdXJzZSBoYXZlIGVxdWFsIHZhbHVlcyAodmFsdWVFcXVhbHMob2JqKSA9PSB0cnVlKS4KLSAgICAgKiA8cD4KLSAgICAgKiBVc3VhbGx5IHRoaXMgbWV0aG9kIGNhbiBiZSB0cmVhdGVkIGFzIGFuIG9yZGluYXJ5IGVxdXZhbGVuY2UKLSAgICAgKiByZWxhdGlvbiwgYnV0IGFjdHVhbGx5IGl0IGlzIG5vdCBpcyBub3QgdHJhbnNpdGl2ZS4KLSAgICAgKiBIZXJlIGlzIGEgcHJlY2lzZSBzcGVjaWZpY2F0aW9uOgotICAgICAqIDxwPgotICAgICAqIFRoZXJlIGFyZSB0d28gY2F0ZWdvcmllcyBvZiBYTUwgb2JqZWN0OiBvYmplY3RzIHdpdGggYSBrbm93bgotICAgICAqIGluc3RhbmNlIHR5cGUsIGFuZCBvYmplY3RzIHdob3NlIG9ubHkga25vd24gdHlwZSBpcyBvbmUgb2YgdGhlCi0gICAgICogdXItdHlwZXMgKGVpdGhlciBBbnlUeXBlIG9yIEFueVNpbXBsZVR5cGUpLiBUaGUgZmlyc3QgY2F0ZWdvcnkKLSAgICAgKiBpcyBjb21wYXJlZCBpbiB0ZXJtcyBvZiBsb2dpY2FsIHZhbHVlIHNwYWNlcywgYW5kIHRoZSBzZWNvbmQKLSAgICAgKiBjYXRlZ29yeSBpcyBjb21wYXJlZCBsZXhpY2FsbHkuCi0gICAgICogPHA+Ci0gICAgICogV2l0aGluIGVhY2ggb2YgdGhlc2UgdHdvIGNhdGVnb3JpZXMsIHZhbHVlRXF1YWxzIGlzIGEgd2VsbC1iZWhhdmVkCi0gICAgICogZXF1aXZhbGVuY2UgcmVsYXRpb24uIEhvd2V2ZXIsIHdoZW4gY29tcGFyaW5nIGFuIG9iamVjdCBvZiBrbm93bgotICAgICAqIHR5cGUgd2l0aCBhbiBvYmplY3Qgd2l0aCB1ci10eXBlLCB0aGUgY29tcGFyaXNvbiBpcyBkb25lIGJ5IGF0dGVtcHRpbmcKLSAgICAgKiB0byBjb252ZXJ0IHRoZSBsZXhpY2FsIGZvcm0gb2YgdGhlIHVyLXR5cGVkIG9iamVjdCBpbnRvIHRoZSBvdGhlcgotICAgICAqIHR5cGUsIGFuZCB0aGVuIGNvbXBhcmluZyB0aGUgcmVzdWx0cy4gVXItdHlwZWQgb2JqZWN0cyBhcmUgdGhlcmVmb3JlCi0gICAgICogdHJlYXRlZCBhcyBsZXhpY2FsIHdpbGRjYXJkcyBhbmQgbWF5IGJlIGVxdWFsIHRvIG9iamVjdHMgaW4gZGlmZmVyZW50Ci0gICAgICogdmFsdWUgc3BhY2VzLCBldmVuIHRob3VnaCB0aGUgb2JqZWN0cyBpbiBkaWZmZXJlbnQgdmFsdWUgc3BhY2VzIGFyZQotICAgICAqIG5vdCBlcXVhbCB0byBlYWNoIG90aGVyLgotICAgICAqIDxwPgotICAgICAqIEZvciBleGFtcGxlLCB0aGUgYW55U2ltcGxlVHlwZSB2YWx1ZSAiMSIgd2lsbCBjb21wYXJlIGFzIGFuCi0gICAgICogZXF1YWxWYWx1ZSB0byB0aGUgc3RyaW5nICIxIiwgdGhlIGZsb2F0IHZhbHVlICIxLjAiLCB0aGUgZG91YmxlCi0gICAgICogdmFsdWUgIjEuMCIsIHRoZSBkZWNpbWFsICIxIiwgYW5kIHRoZSBHWWVhciAiMSIsIGV2ZW4gdGhvdWdoCi0gICAgICogYWxsIHRoZXNlIG9iamVjdHMgd2lsbCBjb21wYXJlIHVuZXF1YWwgdG8gZWFjaCBvdGhlciBzaW5jZSB0aGV5Ci0gICAgICogbGllIGluIGRpZmZlcmVudCB2YWx1ZSBzcGFjZXMuCi0gICAgICovCi0gICAgYm9vbGVhbiB2YWx1ZUVxdWFscyhYbWxPYmplY3Qgb2JqKTsKLQotICAgIGludCB2YWx1ZUhhc2hDb2RlKCk7Ci0KLSAgICAvKioKLSAgICAgKiBJbXBlbGVtZW50cyB0aGUgQ29tcGFyYWJsZSBpbnRlcmZhY2UgYnkgY29tcGFyaW5nIHR3byBzaW1wbGUKLSAgICAgKiB4bWwgdmFsdWVzIGJhc2VkIG9uIHRoZWlyIHN0YW5kYXJkIFhNTCBzY2hlbWEgb3JkZXJpbmcuCi0gICAgICogVGhyb3dzIGEgQ2xhc3NDYXN0RXhjZXB0aW9uIGlmIG5vIHN0YW5kYXJkIG9yZGVyaW5nIGFwcGxpZXMsCi0gICAgICogb3IgaWYgdGhlIHR3byB2YWx1ZXMgYXJlIGluY29tcGFyYWJsZSB3aXRoaW4gYSBwYXJ0aWFsIG9yZGVyLgotICAgICAqLwotICAgIGludCBjb21wYXJlVG8oT2JqZWN0IG9iaik7Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIGNvbXBhcmlzb24gbWV0aG9kIGlzIHNpbWlsYXIgdG8gY29tcGFyZVRvLCBidXQgcmF0aGVyCi0gICAgICogdGhhbiB0aHJvd2luZyBhIENsYXNzQ2FzdEV4Y2VwdGlvbiB3aGVuIHR3byB2YWx1ZXMgYXJlIGluY29tcGFyYWJsZSwKLSAgICAgKiBpdCByZXR1cm5zIHRoZSBudW1iZXIgMi4gVGhlIHJlc3VsdCBjb2RlcyBhcmUgLTEgaWYgdGhpcyBvYmplY3QKLSAgICAgKiBpcyBsZXNzIHRoYW4gb2JqLCAxIGlmIHRoaXMgb2JqZWN0IGlzIGdyZWF0ZXIgdGhhbiBvYmosIHplcm8gaWYKLSAgICAgKiB0aGUgb2JqZWN0cyBhcmUgZXF1YWwsIGFuZCAyIGlmIHRoZSBvYmplY3RzIGFyZSBpbmNvbXBhcmFibGUuCi0gICAgICovCi0gICAgaW50IGNvbXBhcmVWYWx1ZShYbWxPYmplY3Qgb2JqKTsKLSAgICAKLSAgICAvKiogTEVTU19USEFOIGlzIC0xLiBTZWUge0BsaW5rICNjb21wYXJlVmFsdWV9LiAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgTEVTU19USEFOID0gLTE7Ci0gICAgLyoqIEVRVUFMIGlzIDAuIFNlZSB7QGxpbmsgI2NvbXBhcmVWYWx1ZX0uICovCi0gICAgc3RhdGljIGZpbmFsIGludCBFUVVBTCA9IDA7Ci0gICAgLyoqIEdSRUFURVJfVEhBTiBpcyAxLiBTZWUge0BsaW5rICNjb21wYXJlVmFsdWV9LiAqLwotICAgIHN0YXRpYyBmaW5hbCBpbnQgR1JFQVRFUl9USEFOID0gMTsKLSAgICAvKiogTk9UX0VRVUFMIGlzIDIuIFNlZSB7QGxpbmsgI2NvbXBhcmVWYWx1ZX0uICovCi0gICAgc3RhdGljIGZpbmFsIGludCBOT1RfRVFVQUwgPSAyOwotCi0gICAgLyoqCi0gICAgICogU3RhdGljIGZhY3RvcnkgY2xhc3MgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXMuICBOb3RlIHRoYXQgaWYKLSAgICAgKiBhIHR5cGUgY2FuIGJlIGluZmVycmVkIGZyb20gdGhlIFhNTCBiZWluZyBsb2FkZWQgKGZvciBleGFtcGxlLAotICAgICAqIGJ5IHJlY29nbml6aW5nIHRoZSBkb2N1bWVudCBlbGVtZW50IFFOYW1lKSwgdGhlbiB0aGUgaW5zdGFuY2UKLSAgICAgKiByZXR1cm5lZCBieSBhIGZhY3Rvcnkgd2lsbCBoYXZlIHRoZSBpbmZlcnJlZCB0eXBlLiAgT3RoZXJ3aXNlCi0gICAgICogdGhlIEZhY3Rvcnkgd2lsbCByZXR1cm5lZCBhbiB1bnR5cGVkIGRvY3VtZW50LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgRmFjdG9yeQotICAgIHsKLSAgICAgICAgLyoqCi0gICAgICAgICAqIENyZWF0ZXMgYSBuZXcsIGNvbXBsZXRlbHkgZW1wdHkgaW5zdGFuY2UuCi0gICAgICAgICAqLyAKLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxPYmplY3QgbmV3SW5zdGFuY2UgKCApIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggbnVsbCwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKioKLSAgICAgICAgICogPHA+Q3JlYXRlcyBhIG5ldywgY29tcGxldGVseSBlbXB0eSBpbnN0YW5jZSwgc3BlY2lmeWluZyBvcHRpb25zCi0gICAgICAgICAqIGZvciB0aGUgcm9vdCBlbGVtZW50J3MgZG9jdW1lbnQgdHlwZSBhbmQvb3Igd2hldGhlciB0byB2YWxpZGF0ZQotICAgICAgICAgKiB2YWx1ZSBmYWNldHMgYXMgdGhleSBhcmUgc2V0LjwvcD4KLSAgICAgICAgICogCi0gICAgICAgICAqIFVzZSB0aGUgPGVtPm9wdGlvbnM8L2VtPiBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUgZm9sbG93aW5nOjwvcD4KLSAgICAgICAgICogCi0gICAgICAgICAqIDx0YWJsZT4KLSAgICAgICAgICogPHRyPjx0aD5UbyBzcGVjaWZ5IHRoaXM8L3RoPjx0aD5Vc2UgdGhpcyBtZXRob2Q8L3RoPjwvdHI+Ci0gICAgICAgICAqIDx0cj4KLSAgICAgICAgICogIDx0ZD5UaGUgZG9jdW1lbnQgdHlwZSBmb3IgdGhlIHJvb3QgZWxlbWVudC48L3RkPgotICAgICAgICAgKiAgPHRkPntAbGluayBYbWxPcHRpb25zI3NldERvY3VtZW50VHlwZX08L3RkPgotICAgICAgICAgKiA8L3RyPgotICAgICAgICAgKiA8dHI+Ci0gICAgICAgICAqICA8dGQ+V2hldGhlciB2YWx1ZSBmYWNldHMgc2hvdWxkIGJlIGNoZWNrZWQgYXMgdGhleSBhcmUgc2V0LjwvdGQ+Ci0gICAgICAgICAqICA8dGQ+e0BsaW5rIFhtbE9wdGlvbnMjc2V0VmFsaWRhdGVPblNldH08L3RkPgotICAgICAgICAgKiA8L3RyPgotICAgICAgICAgKiA8L3RhYmxlPiAKLSAgICAgICAgICogCi0gICAgICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgc3BlY2lmeWluZyByb290IGRvY3VtZW50IHR5cGUgYW5kL29yIHZhbHVlIGZhY2V0IAotICAgICAgICAgKiBjaGVja2luZy4KLSAgICAgICAgICogQHJldHVybiBBIG5ldywgZW1wdHkgaW5zdGFuY2Ugb2YgWG1sT2JqZWN0LjwvbGk+Ci0gICAgICAgICAqLyAKLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxPYmplY3QgbmV3SW5zdGFuY2UgKCBYbWxPcHRpb25zIG9wdGlvbnMgKSB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIG51bGwsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIENyZWF0ZXMgYSBuZXcgaW1tdXRhYmxlIHZhbHVlLgotICAgICAgICAgKi8gCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGltbXV0YWJsZSB7QGxpbmsgWG1sT2JqZWN0fSB2YWx1ZSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE9iamVjdCBuZXdWYWx1ZSAoIE9iamVjdCBvYmogKSB7Ci0gICAgICAgICAgcmV0dXJuIHR5cGUubmV3VmFsdWUoIG9iaiApOyB9Ci0gICAgICAgIAotICAgICAgICAvKioKLSAgICAgICAgICogUGFyc2VzIHRoZSBnaXZlbiB7QGxpbmsgU3RyaW5nfSBhcyBYTUwuCi0gICAgICAgICAqLyAKLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxPYmplY3QgcGFyc2UgKCBTdHJpbmcgcyApIHRocm93cyBYbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCBudWxsLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKgotICAgICAgICAgKiBQYXJzZXMgdGhlIGdpdmVuIHtAbGluayBTdHJpbmd9IGFzIFhNTC4KLSAgICAgICAgICogCi0gICAgICAgICAqIFVzZSB0aGUgPGVtPm9wdGlvbnM8L2VtPiBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUgZm9sbG93aW5nOjwvcD4KLSAgICAgICAgICogCi0gICAgICAgICAqIDx0YWJsZT4KLSAgICAgICAgICogPHRyPjx0aD5UbyBzcGVjaWZ5IHRoaXM8L3RoPjx0aD5Vc2UgdGhpcyBtZXRob2Q8L3RoPjwvdHI+Ci0gICAgICAgICAqIDx0cj4KLSAgICAgICAgICogIDx0ZD5UaGUgZG9jdW1lbnQgdHlwZSBmb3IgdGhlIHJvb3QgZWxlbWVudC48L3RkPgotICAgICAgICAgKiAgPHRkPntAbGluayBYbWxPcHRpb25zI3NldERvY3VtZW50VHlwZX08L3RkPgotICAgICAgICAgKiA8L3RyPgotICAgICAgICAgKiA8dHI+Ci0gICAgICAgICAqICA8dGQ+VG8gcGxhY2UgbGluZSBudW1iZXIgYW5ub3RhdGlvbnMgaW4gdGhlIHN0b3JlIHdoZW4gcGFyc2luZyBhIGRvY3VtZW50LjwvdGQ+Ci0gICAgICAgICAqICA8dGQ+e0BsaW5rIFhtbE9wdGlvbnMjc2V0TG9hZExpbmVOdW1iZXJzfTwvdGQ+Ci0gICAgICAgICAqIDwvdHI+Ci0gICAgICAgICAqIDx0cj4KLSAgICAgICAgICogIDx0ZD5UbyByZXBsYWNlIHRoZSBkb2N1bWVudCBlbGVtZW50IHdpdGggdGhlIHNwZWNpZmllZCBRTmFtZSB3aGVuIHBhcnNpbmcuPC90ZD4KLSAgICAgICAgICogIDx0ZD57QGxpbmsgWG1sT3B0aW9ucyNzZXRMb2FkUmVwbGFjZURvY3VtZW50RWxlbWVudH08L3RkPgotICAgICAgICAgKiA8L3RyPgotICAgICAgICAgKiA8dHI+Ci0gICAgICAgICAqICA8dGQ+VG8gc3RyaXAgYWxsIGluc2lnbmlmaWNhbnQgd2hpdGVzcGFjZSB3aGVuIHBhcnNpbmcgYSBkb2N1bWVudC48L3RkPgotICAgICAgICAgKiAgPHRkPntAbGluayBYbWxPcHRpb25zI3NldExvYWRTdHJpcFdoaXRlc3BhY2V9PC90ZD4KLSAgICAgICAgICogPC90cj4KLSAgICAgICAgICogPHRyPgotICAgICAgICAgKiAgPHRkPlRvIHN0cmlwIGFsbCBjb21tZW50cyB3aGVuIHBhcnNpbmcgYSBkb2N1bWVudC48L3RkPgotICAgICAgICAgKiAgPHRkPntAbGluayBYbWxPcHRpb25zI3NldExvYWRTdHJpcENvbW1lbnRzfTwvdGQ+Ci0gICAgICAgICAqIDwvdHI+Ci0gICAgICAgICAqIDx0cj4KLSAgICAgICAgICogIDx0ZD5UbyBzdHJpcCBhbGwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMgd2hlbiBwYXJzaW5nIGEgZG9jdW1lbnQuPC90ZD4KLSAgICAgICAgICogIDx0ZD57QGxpbmsgWG1sT3B0aW9ucyNzZXRMb2FkU3RyaXBQcm9jaW5zdHN9PC90ZD4KLSAgICAgICAgICogPC90cj4KLSAgICAgICAgICogPHRyPgotICAgICAgICAgKiAgPHRkPkEgbWFwIG9mIG5hbWVzcGFjZSBVUkkgc3Vic3RpdHV0aW9ucyB0byB1c2Ugd2hlbiBwYXJzaW5nIGEgZG9jdW1lbnQuPC90ZD4KLSAgICAgICAgICogIDx0ZD57QGxpbmsgWG1sT3B0aW9ucyNzZXRMb2FkU3Vic3RpdHV0ZU5hbWVzcGFjZXN9PC90ZD4KLSAgICAgICAgICogPC90cj4KLSAgICAgICAgICogPHRyPgotICAgICAgICAgKiAgPHRkPkFkZGl0aW9uYWwgbmFtZXNwYWNlIG1hcHBpbmdzIHRvIGJlIGFkZGVkIHdoZW4gcGFyc2luZyBhIGRvY3VtZW50LjwvdGQ+Ci0gICAgICAgICAqICA8dGQ+e0BsaW5rIFhtbE9wdGlvbnMjc2V0TG9hZEFkZGl0aW9uYWxOYW1lc3BhY2VzfTwvdGQ+Ci0gICAgICAgICAqIDwvdHI+Ci0gICAgICAgICAqIDx0cj4KLSAgICAgICAgICogIDx0ZD5UbyB0cmltIHRoZSB1bmRlcmx5aW5nIFhNTCB0ZXh0IGJ1ZmZlciBpbW1lZGlhdGVseSBhZnRlciBwYXJzaW5nIAotICAgICAgICAgKiAgYSBkb2N1bWVudCwgcmVzdWx0aW5nIGluIGEgc21hbGxlciBtZW1vcnkgZm9vdHByaW50LjwvdGQ+Ci0gICAgICAgICAqICA8dGQ+e0BsaW5rIFhtbE9wdGlvbnMjc2V0TG9hZFRyaW1UZXh0QnVmZmVyfTwvdGQ+Ci0gICAgICAgICAqIDwvdHI+Ci0gICAgICAgICAqIDwvdGFibGU+IAotICAgICAgICAgKiAKLSAgICAgICAgICogQHBhcmFtIHMgVGhlIHN0cmluZyB0byBwYXJzZS4KLSAgICAgICAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBhcyBzcGVjaWZpZWQuCi0gICAgICAgICAqIEByZXR1cm4gQSBuZXcgaW5zdGFuY2UgY29udGFpbmluZyB0aGUgc3BlY2lmaWVkIFhNTC4KLSAgICAgICAgICovIAotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE9iamVjdCBwYXJzZSAoIFN0cmluZyBzLCBYbWxPcHRpb25zIG9wdGlvbnMgKSB0aHJvd3MgWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgbnVsbCwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKioKLSAgICAgICAgICogUGFyc2VzIHRoZSBnaXZlbiB7QGxpbmsgRmlsZX0gYXMgWE1MLgotICAgICAgICAgKi8gCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sT2JqZWN0IHBhcnNlICggRmlsZSBmICkgdGhyb3dzIFhtbEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCBudWxsLCBudWxsICk7IH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogUGFyc2VzIHRoZSBnaXZlbiB7QGxpbmsgRmlsZX0gYXMgWE1MLgotICAgICAgICAgKi8gCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sT2JqZWN0IHBhcnNlICggRmlsZSBmLCBYbWxPcHRpb25zIG9wdGlvbnMgKSB0aHJvd3MgWG1sRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIG51bGwsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIERvd25sb2FkcyB0aGUgZ2l2ZW4ge0BsaW5rIGphdmEubmV0LlVSTH0gYXMgWE1MLgotICAgICAgICAgKi8gCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sT2JqZWN0IHBhcnNlKGphdmEubmV0LlVSTCB1KSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCBudWxsLCBudWxsICk7IH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogRG93bmxvYWRzIHRoZSBnaXZlbiB7QGxpbmsgamF2YS5uZXQuVVJMfSBhcyBYTUwuCi0gICAgICAgICAqLyAKLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxPYmplY3QgcGFyc2UoamF2YS5uZXQuVVJMIHUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCBudWxsLCBvcHRpb25zICk7IH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogRGVjb2RlcyBhbmQgcGFyc2VzIHRoZSBnaXZlbiB7QGxpbmsgSW5wdXRTdHJlYW19IGFzIFhNTC4KLSAgICAgICAgICovIAotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE9iamVjdCBwYXJzZSAoIElucHV0U3RyZWFtIGlzICkgdGhyb3dzIFhtbEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgbnVsbCwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKioKLSAgICAgICAgICogRGVjb2RlcyBhbmQgcGFyc2VzIHRoZSBnaXZlbiB7QGxpbmsgWE1MU3RyZWFtUmVhZGVyfSBhcyBYTUwuCi0gICAgICAgICAqLyAKLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxPYmplY3QgcGFyc2UgKCBYTUxTdHJlYW1SZWFkZXIgeHNyICkgdGhyb3dzIFhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgbnVsbCwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKioKLSAgICAgICAgICogRGVjb2RlcyBhbmQgcGFyc2VzIHRoZSBnaXZlbiB7QGxpbmsgSW5wdXRTdHJlYW19IGFzIFhNTC4KLSAgICAgICAgICogCi0gICAgICAgICAqIFVzZSB0aGUgPGVtPm9wdGlvbnM8L2VtPiBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUgZm9sbG93aW5nOjwvcD4KLSAgICAgICAgICogCi0gICAgICAgICAqIDx0YWJsZT4KLSAgICAgICAgICogPHRyPjx0aD5UbyBzcGVjaWZ5IHRoaXM8L3RoPjx0aD5Vc2UgdGhpcyBtZXRob2Q8L3RoPjwvdHI+Ci0gICAgICAgICAqIDx0cj4KLSAgICAgICAgICogIDx0ZD5UaGUgY2hhcmFjdGVyIGVuY29kaW5nIHRvIHVzZSB3aGVuIHBhcnNpbmcgb3Igd3JpdGluZyBhIGRvY3VtZW50LjwvdGQ+Ci0gICAgICAgICAqICA8dGQ+e0BsaW5rIFhtbE9wdGlvbnMjc2V0Q2hhcmFjdGVyRW5jb2Rpbmd9PC90ZD4KLSAgICAgICAgICogPC90cj4KLSAgICAgICAgICogPHRyPgotICAgICAgICAgKiAgPHRkPlRoZSBkb2N1bWVudCB0eXBlIGZvciB0aGUgcm9vdCBlbGVtZW50LjwvdGQ+Ci0gICAgICAgICAqICA8dGQ+e0BsaW5rIFhtbE9wdGlvbnMjc2V0RG9jdW1lbnRUeXBlfTwvdGQ+Ci0gICAgICAgICAqIDwvdHI+Ci0gICAgICAgICAqIDx0cj4KLSAgICAgICAgICogIDx0ZD5QbGFjZSBsaW5lIG51bWJlciBhbm5vdGF0aW9ucyBpbiB0aGUgc3RvcmUgd2hlbiBwYXJzaW5nIGEgZG9jdW1lbnQuPC90ZD4KLSAgICAgICAgICogIDx0ZD57QGxpbmsgWG1sT3B0aW9ucyNzZXRMb2FkTGluZU51bWJlcnN9PC90ZD4KLSAgICAgICAgICogPC90cj4KLSAgICAgICAgICogPHRyPgotICAgICAgICAgKiAgPHRkPlJlcGxhY2UgdGhlIGRvY3VtZW50IGVsZW1lbnQgd2l0aCB0aGUgc3BlY2lmaWVkIFFOYW1lIHdoZW4gcGFyc2luZy48L3RkPgotICAgICAgICAgKiAgPHRkPntAbGluayBYbWxPcHRpb25zI3NldExvYWRSZXBsYWNlRG9jdW1lbnRFbGVtZW50fTwvdGQ+Ci0gICAgICAgICAqIDwvdHI+Ci0gICAgICAgICAqIDx0cj4KLSAgICAgICAgICogIDx0ZD5TdHJpcCBhbGwgaW5zaWduaWZpY2FudCB3aGl0ZXNwYWNlIHdoZW4gcGFyc2luZyBhIGRvY3VtZW50LjwvdGQ+Ci0gICAgICAgICAqICA8dGQ+e0BsaW5rIFhtbE9wdGlvbnMjc2V0TG9hZFN0cmlwV2hpdGVzcGFjZX08L3RkPgotICAgICAgICAgKiA8L3RyPgotICAgICAgICAgKiA8dHI+Ci0gICAgICAgICAqICA8dGQ+U3RyaXAgYWxsIGNvbW1lbnRzIHdoZW4gcGFyc2luZyBhIGRvY3VtZW50LjwvdGQ+Ci0gICAgICAgICAqICA8dGQ+e0BsaW5rIFhtbE9wdGlvbnMjc2V0TG9hZFN0cmlwQ29tbWVudHN9PC90ZD4KLSAgICAgICAgICogPC90cj4KLSAgICAgICAgICogPHRyPgotICAgICAgICAgKiAgPHRkPlN0cmlwIGFsbCBwcm9jZXNzaW5nIGluc3RydWN0aW9ucyB3aGVuIHBhcnNpbmcgYSBkb2N1bWVudC48L3RkPgotICAgICAgICAgKiAgPHRkPntAbGluayBYbWxPcHRpb25zI3NldExvYWRTdHJpcFByb2NpbnN0c308L3RkPgotICAgICAgICAgKiA8L3RyPgotICAgICAgICAgKiA8dHI+Ci0gICAgICAgICAqICA8dGQ+U2V0IGEgbWFwIG9mIG5hbWVzcGFjZSBVUkkgc3Vic3RpdHV0aW9ucyB0byB1c2Ugd2hlbiBwYXJzaW5nIGEgZG9jdW1lbnQuPC90ZD4KLSAgICAgICAgICogIDx0ZD57QGxpbmsgWG1sT3B0aW9ucyNzZXRMb2FkU3Vic3RpdHV0ZU5hbWVzcGFjZXN9PC90ZD4KLSAgICAgICAgICogPC90cj4KLSAgICAgICAgICogPHRyPgotICAgICAgICAgKiAgPHRkPlNldCBhZGRpdGlvbmFsIG5hbWVzcGFjZSBtYXBwaW5ncyB0byBiZSBhZGRlZCB3aGVuIHBhcnNpbmcgYSBkb2N1bWVudC48L3RkPgotICAgICAgICAgKiAgPHRkPntAbGluayBYbWxPcHRpb25zI3NldExvYWRBZGRpdGlvbmFsTmFtZXNwYWNlc308L3RkPgotICAgICAgICAgKiA8L3RyPgotICAgICAgICAgKiA8dHI+Ci0gICAgICAgICAqICA8dGQ+VHJpbSB0aGUgdW5kZXJseWluZyBYTUwgdGV4dCBidWZmZXIgaW1tZWRpYXRlbHkgYWZ0ZXIgcGFyc2luZyAKLSAgICAgICAgICogIGEgZG9jdW1lbnQsIHJlc3VsdGluZyBpbiBhIHNtYWxsZXIgbWVtb3J5IGZvb3RwcmludC48L3RkPgotICAgICAgICAgKiAgPHRkPntAbGluayBYbWxPcHRpb25zI3NldExvYWRUcmltVGV4dEJ1ZmZlcn08L3RkPgotICAgICAgICAgKiA8L3RyPgotICAgICAgICAgKiA8L3RhYmxlPiAKLSAgICAgICAgICovIAotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE9iamVjdCBwYXJzZSAoIElucHV0U3RyZWFtIGlzLCBYbWxPcHRpb25zIG9wdGlvbnMgKSB0aHJvd3MgWG1sRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCBudWxsLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKgotICAgICAgICAgKiBQYXJzZXMgdGhlIGdpdmVuIHtAbGluayBYTUxTdHJlYW1SZWFkZXJ9IGFzIFhNTC4KLSAgICAgICAgICovIAotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE9iamVjdCBwYXJzZSAoIFhNTFN0cmVhbVJlYWRlciB4c3IsIFhtbE9wdGlvbnMgb3B0aW9ucyApIHRocm93cyBYbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIG51bGwsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIFBhcnNlcyB0aGUgZ2l2ZW4ge0BsaW5rIFJlYWRlcn0gYXMgWE1MLgotICAgICAgICAgKi8gCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sT2JqZWN0IHBhcnNlICggUmVhZGVyIHIgKSB0aHJvd3MgWG1sRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIG51bGwsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIFBhcnNlcyB0aGUgZ2l2ZW4ge0BsaW5rIFJlYWRlcn0gYXMgWE1MLgotICAgICAgICAgKi8gCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sT2JqZWN0IHBhcnNlICggUmVhZGVyIHIsIFhtbE9wdGlvbnMgb3B0aW9ucyApIHRocm93cyBYbWxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgbnVsbCwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKioKLSAgICAgICAgICogQ29udmVydHMgdGhlIGdpdmVuIERPTSB7QGxpbmsgTm9kZX0gaW50byBhbiBYbWxPYmplY3QuCi0gICAgICAgICAqLyAKLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxPYmplY3QgcGFyc2UgKCBOb2RlIG5vZGUgKSB0aHJvd3MgWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgbnVsbCwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKioKLSAgICAgICAgICogQ29udmVydHMgdGhlIGdpdmVuIERPTSB7QGxpbmsgTm9kZX0gaW50byBhbiBYbWxPYmplY3QuCi0gICAgICAgICAqLyAKLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxPYmplY3QgcGFyc2UgKCBOb2RlIG5vZGUsIFhtbE9wdGlvbnMgb3B0aW9ucyApIHRocm93cyBYbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCBudWxsLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKgotICAgICAgICAgKiBMb2FkcyB0aGUgZ2l2ZW4ge0BsaW5rIFhNTElucHV0U3RyZWFtfSBpbnRvIGFuIFhtbE9iamVjdC4KLSAgICAgICAgICovIAotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE9iamVjdCBwYXJzZSAoIFhNTElucHV0U3RyZWFtIHhpcyApIHRocm93cyBYbWxFeGNlcHRpb24sIFhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgbnVsbCwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKioKLSAgICAgICAgICogTG9hZHMgdGhlIGdpdmVuIHtAbGluayBYTUxJbnB1dFN0cmVhbX0gaW50byBhbiBYbWxPYmplY3QuCi0gICAgICAgICAqLyAKLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxPYmplY3QgcGFyc2UgKCBYTUxJbnB1dFN0cmVhbSB4aXMsIFhtbE9wdGlvbnMgb3B0aW9ucyApIHRocm93cyBYbWxFeGNlcHRpb24sIFhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgbnVsbCwgb3B0aW9ucyApOyB9Ci0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJldHVybnMgYW4ge0BsaW5rIFhtbFNheEhhbmRsZXJ9IHRoYXQgY2FuIGxvYWQgYW4gWG1sT2JqZWN0IGZyb20gU0FYIGV2ZW50cy4KLSAgICAgICAgICovIAotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFNheEhhbmRsZXIgbmV3WG1sU2F4SGFuZGxlciAoICkgewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1htbFNheEhhbmRsZXIoIG51bGwsIG51bGwgKTsgfQotICAgICAgICAgICAgCi0gICAgICAgIC8qKgotICAgICAgICAgKiBSZXR1cm5zIGFuIHtAbGluayBYbWxTYXhIYW5kbGVyfSB0aGF0IGNhbiBsb2FkIGFuIFhtbE9iamVjdCBmcm9tIFNBWCBldmVudHMuCi0gICAgICAgICAqLyAKLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxTYXhIYW5kbGVyIG5ld1htbFNheEhhbmRsZXIgKCBYbWxPcHRpb25zIG9wdGlvbnMgKSB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3WG1sU2F4SGFuZGxlciggbnVsbCwgb3B0aW9ucyApOyB9Ci0gICAgICAgICAgICAKLSAgICAgICAgLyoqCi0gICAgICAgICAqIFJldHVybnMgYSBuZXcgdmFsaWRhdGluZyB7QGxpbmsgWE1MSW5wdXRTdHJlYW19IHRoYXQgdGhyb3dzIGV4Y2VwdGlvbnMgd2hlbiB0aGUgaW5wdXQgaXMgbm90IHZhbGlkLgotICAgICAgICAgKi8gCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtICggWE1MSW5wdXRTdHJlYW0geGlzICkgdGhyb3dzIFhtbEV4Y2VwdGlvbiwgWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgbnVsbCwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKioKLSAgICAgICAgICogUmV0dXJucyBhIG5ldyB2YWxpZGF0aW5nIHtAbGluayBYTUxJbnB1dFN0cmVhbX0gdGhhdCB0aHJvd3MgZXhjZXB0aW9ucyAKLSAgICAgICAgICogd2hlbiB0aGUgaW5wdXQgaXMgbm90IHZhbGlkLCBzcGVjaWZ5aW5nIG9wdGlvbnMKLSAgICAgICAgICogZm9yIHRoZSByb290IGVsZW1lbnQncyBkb2N1bWVudCB0eXBlIGFuZC9vciB0aGUgY29sbGVjdGlvbiBvYmplY3QgdG8gdXNlCi0gICAgICAgICAqIGFzIGFuIGVycm9yIGxpc3RlbmVyIHdoaWxlIHZhbGlkYXRpbmcuPC9wPgotICAgICAgICAgKiAKLSAgICAgICAgICogPHA+VXNlIHRoZSA8ZW0+b3B0aW9uczwvZW0+IHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoZSBmb2xsb3dpbmc6PC9wPgotICAgICAgICAgKiAKLSAgICAgICAgICogPHVsPgotICAgICAgICAgKiA8bGk+QSBjb2xsZWN0aW9uIGluc3RhbmNlIHRoYXQgc2hvdWxkIGJlIHVzZWQgYXMgYW4gZXJyb3IgbGlzdGVuZXIgZHVyaW5nCi0gICAgICAgICAqIGNvbXBpbGF0aW9uLCBhcyBkZXNjcmliZWQgaW4ge0BsaW5rIFhtbE9wdGlvbnMjc2V0RXJyb3JMaXN0ZW5lcn0uPC9saT4KLSAgICAgICAgICogPGxpPlRoZSBkb2N1bWVudCB0eXBlIGZvciB0aGUgcm9vdCBlbGVtZW50LCBhcyBkZXNjcmliZWQgaW4gCi0gICAgICAgICAqIHtAbGluayBYbWxPcHRpb25zI3NldERvY3VtZW50VHlwZShTY2hlbWFUeXBlKX0uPC9saT4KLSAgICAgICAgICogPC91bD4KLSAgICAgICAgICogCi0gICAgICAgICAqIEBwYXJhbSB4aXMgVGhlIGJhc2lzIGZvciB0aGUgbmV3IFhNTElucHV0U3RyZWFtLgotICAgICAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIHNwZWNpZnlpbmcgcm9vdCBkb2N1bWVudCB0eXBlIGFuZC9vciBhbiBlcnJvciBsaXN0ZW5lci4KLSAgICAgICAgICogQHJldHVybiBBIG5ldyB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotICAgICAgICAgKi8gCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtICggWE1MSW5wdXRTdHJlYW0geGlzLCBYbWxPcHRpb25zIG9wdGlvbnMgKSB0aHJvd3MgWG1sRXhjZXB0aW9uLCBYTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCBudWxsLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKgotICAgICAgICAgKiBJbnN0YW5jZXMgY2Fubm90IGJlIGNyZWF0ZWQuCi0gICAgICAgICAqLyAKLSAgICAgICAgcHJpdmF0ZSBGYWN0b3J5KCkgeyB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyYmJlMDAuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5OCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCBvcmcueG1sLnNheC5FbnRpdHlSZXNvbHZlcjsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotLyoqCi0gKiBVc2VkIHRvIHN1cHBseSBvcHRpb25zIGZvciBsb2FkaW5nLCBzYXZpbmcsIGFuZCBjb21waWxpbmcsIGFuZCB2YWxpZGF0aW5nLgotICogPHA+Ci0gKiBUaGVyZSBhcmUgdHdvIHN0eWxlcyBmb3IgdXNpbmcgWG1sT3B0aW9uczogbXVsdGlsaW5lIHNldHVwLCBhbmQgc2luZ2xlLWxpbmUgdXNlLgotICogSGVyZSBhcmUgdHdvIGV4YW1wbGVzLiAgRmlyc3QsIG11bHRpbGluZSBzdHlsZToKLSAqIDxwcmU+Ci0gKiBYbWxPcHRpb25zIG9wdHMgPSBuZXcgWG1sT3B0aW9ucygpOwotICogb3B0cy5zZXRTYXZlUHJldHR5UHJpbnQoKTsKLSAqIG9wdHMuc2V0U2F2ZVByZXR0eVByaW50SW5kZW50KDQpOwotICogU3lzdGVtLm91dC5wcmludGxuKHhvYmoueG1sVGV4dChvcHRzKSk7Ci0gKiA8L3ByZT4KLSAqIAotICogVGhlIGFsdGVybmF0aXZlIGlzIHNpbmdsZS1saW5lIHVzYWdlOgotICogPHByZT4KLSAqIFN5c3RlbS5vdXQucHJpbnRsbih4b2JqLnhtbFRleHQoCi0gKiAgICAgbmV3IFhtbE9wdGlvbnMoKS5zZXRTYXZlUHJldHR5UHJpbnQoKS5zZXRTYXZlUHJldHR5UHJpbnRJbmRlbnQoNCkpKTsKLSAqIDwvcHJlPgotICovCi1wdWJsaWMgY2xhc3MgWG1sT3B0aW9ucyBpbXBsZW1lbnRzIGphdmEuaW8uU2VyaWFsaXphYmxlCi17Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0gICAgCi0gICAgcHJpdmF0ZSBNYXAgX21hcCA9IG5ldyBIYXNoTWFwKCk7Ci0KLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdCBhIG5ldyBibGFuayBYbWxPcHRpb25zLgotICAgICAqLwotICAgIHB1YmxpYyBYbWxPcHRpb25zICggKSB7IH0KLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdCBhIG5ldyBYbWxPcHRpb25zLCBjb3B5aW5nIHRoZSBvcHRpb25zLgotICAgICAqLwotICAgIHB1YmxpYyBYbWxPcHRpb25zIChYbWxPcHRpb25zIG90aGVyKSB7Ci0gICAgICAgIGlmIChvdGhlciAhPSBudWxsKSBfbWFwLnB1dEFsbChvdGhlci5fbWFwKTsKLSAgICB9Ci0gICAgICAgICAgICAKLSAgICAvLwotICAgIC8vIEhhbmR5LWRhbmR5IGhlbHBlciBtZXRob2RzIGZvciBzZXR0aW5nIHNvbWUgb3B0aW9ucwotICAgIC8vCi0KLSAgICAvKioKLSAgICAgKiBUaGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRoZSBzYXZlciB0byBzYXZlIG5hbWVzcGFjZSBhdHRyaWJ1dGVzIGZpcnN0LgotICAgICAqIAotICAgICAqIEBzZWUgWG1sVG9rZW5Tb3VyY2Ujc2F2ZShqYXZhLmlvLkZpbGUsIFhtbE9wdGlvbnMpCi0gICAgICogQHNlZSBYbWxUb2tlblNvdXJjZSN4bWxUZXh0KFhtbE9wdGlvbnMpCi0gICAgICovCi0gICAgcHVibGljIFhtbE9wdGlvbnMgc2V0U2F2ZU5hbWVzcGFjZXNGaXJzdCgpIHsgCi0gICAgICAgIHJldHVybiBzZXQoIFNBVkVfTkFNRVNQQUNFU19GSVJTVCApOyAKLSAgICB9Ci0gICAgLyoqCi0gICAgICogVGhpcyBvcHRpb24gd2lsbCBjYXVzZSB0aGUgc2F2ZXIgdG8gcmVmb3JtYXQgd2hpdGUgc3BhY2UgZm9yIGVhc2llciByZWFkaW5nLgotICAgICAqIAotICAgICAqIEBzZWUgWG1sVG9rZW5Tb3VyY2Ujc2F2ZShqYXZhLmlvLkZpbGUsIFhtbE9wdGlvbnMpCi0gICAgICogQHNlZSBYbWxUb2tlblNvdXJjZSN4bWxUZXh0KFhtbE9wdGlvbnMpCi0gICAgICovCi0gICAgcHVibGljIFhtbE9wdGlvbnMgc2V0U2F2ZVByZXR0eVByaW50KCkgeyAKLSAgICAgICAgcmV0dXJuIHNldCggU0FWRV9QUkVUVFlfUFJJTlQgKTsgCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogV2hlbiB1c2VkIHdpdGggPGNvZGU+c2V0U2F2ZVByZXR0eVByaW50PC9jb2RlPiB0aGlzIHNldHMgdGhlIGluZGVudAotICAgICAqIGFtb3VudCB0byB1c2UuCi0gICAgICogCi0gICAgICogQHBhcmFtIGluZGVudCB0aGUgaW5kZW50IGFtb3VudCB0byB1c2UKLSAgICAgKiBAc2VlICNzZXRTYXZlUHJldHR5UHJpbnQKLSAgICAgKiBAc2VlIFhtbFRva2VuU291cmNlI3NhdmUoamF2YS5pby5GaWxlLCBYbWxPcHRpb25zKQotICAgICAqIEBzZWUgWG1sVG9rZW5Tb3VyY2UjeG1sVGV4dChYbWxPcHRpb25zKQotICAgICAqLwotICAgIHB1YmxpYyBYbWxPcHRpb25zIHNldFNhdmVQcmV0dHlQcmludEluZGVudChpbnQgaW5kZW50KSB7IAotICAgICAgICByZXR1cm4gc2V0KCBTQVZFX1BSRVRUWV9QUklOVF9JTkRFTlQsIGluZGVudCApOyAKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBXaGVuIHVzZWQgd2l0aCA8Y29kZT5zZXRTYXZlUHJldHR5UHJpbnQ8L2NvZGU+IHRoaXMgc2V0cyB0aGUgb2Zmc2V0Ci0gICAgICogYW1vdW50IHRvIHVzZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gb2Zmc2V0IHRoZSBvZmZzZXQgYW1vdW50IHRvIHVzZQotICAgICAqIEBzZWUgI3NldFNhdmVQcmV0dHlQcmludAotICAgICAqIEBzZWUgWG1sVG9rZW5Tb3VyY2Ujc2F2ZShqYXZhLmlvLkZpbGUsIFhtbE9wdGlvbnMpCi0gICAgICogQHNlZSBYbWxUb2tlblNvdXJjZSN4bWxUZXh0KFhtbE9wdGlvbnMpCi0gICAgICovCi0gICAgcHVibGljIFhtbE9wdGlvbnMgc2V0U2F2ZVByZXR0eVByaW50T2Zmc2V0KGludCBvZmZzZXQpIHsgCi0gICAgICAgIHJldHVybiBzZXQoIFNBVkVfUFJFVFRZX1BSSU5UX09GRlNFVCwgb2Zmc2V0ICk7IAotICAgIH0KLQotICAgIC8qKgotICAgICAqIFdoZW4gcGFyc2luZyBvciB3cml0aW5nIGEgZG9jdW1lbnQsIHRoaXMgc2V0cyB0aGUgY2hhcmFjdGVyCi0gICAgICogZW5jb2RpbmcgdG8gdXNlLgotICAgICAqIAotICAgICAqIEBwYXJhbSBlbmNvZGluZyB0aGUgY2hhcmFjdGVyIGVuY29kaW5nCi0gICAgICogQHNlZSBYbWxPYmplY3QuRmFjdG9yeSNwYXJzZShqYXZhLmlvLkZpbGUsIFhtbE9wdGlvbnMpCi0gICAgICogQHNlZSBYbWxUb2tlblNvdXJjZSNzYXZlKGphdmEuaW8uRmlsZSwgWG1sT3B0aW9ucykKLSAgICAgKi8KLSAgICBwdWJsaWMgWG1sT3B0aW9ucyBzZXRDaGFyYWN0ZXJFbmNvZGluZyhTdHJpbmcgZW5jb2RpbmcpIHsgCi0gICAgICAgIHJldHVybiBzZXQoIENIQVJBQ1RFUl9FTkNPRElORywgZW5jb2RpbmcgKTsgCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogV2hlbiBwYXJzaW5nIGEgZG9jdW1lbnQsIHRoaXMgc2V0cyB0aGUgdHlwZSBvZiB0aGUgcm9vdAotICAgICAqIGVsZW1lbnQuIElmIHRoaXMgaXMgc2V0LCB0aGUgcGFyc2VyIHdpbGwgbm90IHRyeSB0byBndWVzcwotICAgICAqIHRoZSB0eXBlIGJhc2VkIG9uIHRoZSBkb2N1bWVudCdzIDxjb2RlPlFOYW1lPC9jb2RlPi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gdHlwZSBUaGUgcm9vdCBlbGVtZW50J3MgZG9jdW1lbnQgdHlwZS4KLSAgICAgKiBAc2VlIFhtbE9iamVjdC5GYWN0b3J5I3BhcnNlKGphdmEuaW8uRmlsZSwgWG1sT3B0aW9ucykKLSAgICAgKi8KLSAgICBwdWJsaWMgWG1sT3B0aW9ucyBzZXREb2N1bWVudFR5cGUoU2NoZW1hVHlwZSB0eXBlKSB7Ci0gICAgICAgIHJldHVybiBzZXQoIERPQ1VNRU5UX1RZUEUsIHR5cGUgKTsgCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogPHA+U2V0cyBhIGNvbGxlY3Rpb24gb2JqZWN0IGZvciBjb2xsZWN0aW5nIHtAbGluayBYbWxFcnJvcn0gb2JqZWN0cyAKLSAgICAgKiBkdXJpbmcgcGFyc2luZywgdmFsaWRhdGlvbiwgYW5kIGNvbXBpbGF0aW9uLiBXaGVuIHNldCwgdGhlIGNvbGxlY3Rpb24gCi0gICAgICogd2lsbCBjb250YWluIGFsbCB0aGUgZXJyb3JzIGFmdGVyIHRoZSBvcGVyYXRpb24gdGFrZXMgcGxhY2UuICBOb3RpY2UgdGhhdAotICAgICAqIHRoZSBlcnJvcnMgd2lsbCBvbmx5IGhhdmUgbGluZSBudW1iZXJzIGlmIHRoZSBkb2N1bWVudCB3YXMKLSAgICAgKiBsb2FkZWQgd2l0aCBsaW5lIG51bWJlcnMgZW5hYmxlZC48L3A+Ci0gICAgICogCi0gICAgICogPHA+VGhlIGZvbGxvd2luZyBzaW1wbGUgZXhhbXBsZSBpbGx1c3RyYXRlcyB1c2luZyBhbiBlcnJvciBsaXN0ZW5lcgotICAgICAqIGR1cmluZyB2YWxpZGF0aW9uLjwvcD4KLSAgICAgKiAKLSAgICAgKiA8cHJlPgotICAgICAqIC8vIENyZWF0ZSBhbiBYbWxPcHRpb25zIGluc3RhbmNlIGFuZCBzZXQgdGhlIGVycm9yIGxpc3RlbmVyLgotICAgICAqIFhtbE9wdGlvbnMgdmFsaWRhdGVPcHRpb25zID0gbmV3IFhtbE9wdGlvbnMoKTsKLSAgICAgKiBBcnJheUxpc3QgZXJyb3JMaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAqIHZhbGlkYXRlT3B0aW9ucy5zZXRFcnJvckxpc3RlbmVyKGVycm9yTGlzdCk7Ci0gICAgICogCi0gICAgICogLy8gVmFsaWRhdGUgdGhlIFhNTC4KLSAgICAgKiBib29sZWFuIGlzVmFsaWQgPSBuZXdFbXAudmFsaWRhdGUodmFsaWRhdGVPcHRpb25zKTsKLSAgICAgKiAKLSAgICAgKiAvLyBJZiB0aGUgWE1MIGlzbid0IHZhbGlkLCBsb29wIHRocm91Z2ggdGhlIGxpc3RlbmVyJ3MgY29udGVudHMsCi0gICAgICogLy8gcHJpbnRpbmcgY29udGFpbmVkIG1lc3NhZ2VzLgotICAgICAqIGlmICghaXNWYWxpZCkKLSAgICAgKiB7Ci0gICAgICogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVycm9yTGlzdC5zaXplKCk7IGkrKykKLSAgICAgKiAgICAgIHsKLSAgICAgKiAgICAgICAgICBYbWxFcnJvciBlcnJvciA9IChYbWxFcnJvcillcnJvckxpc3QuZ2V0KGkpOwotICAgICAqICAgICAgICAgIAotICAgICAqICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG4iKTsKLSAgICAgKiAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1lc3NhZ2U6ICIgKyBlcnJvci5nZXRNZXNzYWdlKCkgKyAiXG4iKTsKLSAgICAgKiAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvY2F0aW9uIG9mIGludmFsaWQgWE1MOiAiICsgCi0gICAgICogICAgICAgICAgICAgIGVycm9yLmdldEN1cnNvckxvY2F0aW9uKCkueG1sVGV4dCgpICsgIlxuIik7Ci0gICAgICogICAgICB9Ci0gICAgICogfQotICAgICAqIDwvcHJlPgotICAgICAqIAotICAgICAqIEBwYXJhbSBjIEEgY29sbGVjdGlvbiB0aGF0IHdpbGwgYmUgZmlsbGVkIHdpdGgge0BsaW5rIFhtbEVycm9yfSBvYmplY3RzIAotICAgICAqIHZpYSB7QGxpbmsgQ29sbGVjdGlvbiNhZGR9Ci0gICAgICogCi0gICAgICogQHNlZSBYbWxFcnJvcgotICAgICAqIEBzZWUgWG1sT2JqZWN0LkZhY3RvcnkjcGFyc2UoamF2YS5pby5GaWxlLCBYbWxPcHRpb25zKQotICAgICAqIEBzZWUgWG1sT2JqZWN0I3ZhbGlkYXRlKFhtbE9wdGlvbnMpCi0gICAgICogQHNlZSBYbWxCZWFucyNjb21waWxlWHNkCi0gICAgICogQHNlZSBYbWxPcHRpb25zI3NldExvYWRMaW5lTnVtYmVycwotICAgICAqLwotICAgIHB1YmxpYyBYbWxPcHRpb25zIHNldEVycm9yTGlzdGVuZXIgKENvbGxlY3Rpb24gYykgeyAKLSAgICAgICAgcmV0dXJuIHNldCggRVJST1JfTElTVEVORVIsIGMgKTsgCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2F1c2VzIHRoZSBzYXZlciB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBuYW1lc3BhY2UgcHJlZml4IGRlY2xhcmF0aW9ucy4KLSAgICAgKiBUaGUgc2F2ZXIgd2lsbCBkbyB0aGlzIGJ5IHBhc3Npbmcgb3ZlciB0aGUgZG9jdW1lbnQgdHdpY2UsIGZpcnN0IHRvCi0gICAgICogY29sbGVjdCB0aGUgc2V0IG9mIG5lZWRlZCBuYW1lc3BhY2UgZGVjbGFyYXRpb25zLCBhbmQgdGhlbiBzZWNvbmQKLSAgICAgKiB0byBhY3R1YWxseSBzYXZlIHRoZSBkb2N1bWVudCB3aXRoIHRoZSBkZWNsYXJhdGlvbnMgY29sbGVjdGVkCi0gICAgICogYXQgdGhlIHJvb3QuCi0gICAgICogCi0gICAgICogQHNlZSBYbWxUb2tlblNvdXJjZSNzYXZlKGphdmEuaW8uRmlsZSwgWG1sT3B0aW9ucykKLSAgICAgKiBAc2VlIFhtbFRva2VuU291cmNlI3htbFRleHQoWG1sT3B0aW9ucykKLSAgICAgKi8KLSAgICBwdWJsaWMgWG1sT3B0aW9ucyBzZXRTYXZlQWdncmVzaXZlTmFtZXNwYWNlcygpIHsgCi0gICAgICAgIHJldHVybiBzZXQoIFNBVkVfQUdHUkVTU0lWRV9OQU1FU1BBQ0VTICk7IAotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoaXMgb3B0aW9uIGNhdXNlcyB0aGUgc2F2ZXIgdG8gd3JhcCB0aGUgY3VycmVudCBmcmFnbWVudCBpbgotICAgICAqIGFuIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSB0byB1c2UgZm9yIHRoZSB0b3AgbGV2ZWwgZWxlbWVudAotICAgICAqIAotICAgICAqIEBzZWUgWG1sVG9rZW5Tb3VyY2Ujc2F2ZShqYXZhLmlvLkZpbGUsIFhtbE9wdGlvbnMpCi0gICAgICogQHNlZSBYbWxUb2tlblNvdXJjZSN4bWxUZXh0KFhtbE9wdGlvbnMpCi0gICAgICovCi0gICAgcHVibGljIFhtbE9wdGlvbnMgc2V0U2F2ZVN5bnRoZXRpY0RvY3VtZW50RWxlbWVudCAoUU5hbWUgbmFtZSkgeyAKLSAgICAgICAgcmV0dXJuIHNldCggU0FWRV9TWU5USEVUSUNfRE9DVU1FTlRfRUxFTUVOVCwgbmFtZSApOyAKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJZiB0aGlzIG9wdGlvbiBpcyBzZXQsIHRoZSBzYXZlciB3aWxsIHRyeSB0byB1c2UgdGhlIGRlZmF1bHQKLSAgICAgKiBuYW1lc3BhY2UgZm9yIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgVVJJLiBJZiBpdCBpcyBub3Qgc2V0Ci0gICAgICogdGhlIHNhdmVyIHdpbGwgYWx3YXlzIGNyZWF0ZWQgbmFtZWQgcHJlZml4ZXMuCi0gICAgICogCi0gICAgICogQHNlZSBYbWxUb2tlblNvdXJjZSNzYXZlKGphdmEuaW8uRmlsZSwgWG1sT3B0aW9ucykKLSAgICAgKiBAc2VlIFhtbFRva2VuU291cmNlI3htbFRleHQoWG1sT3B0aW9ucykKLSAgICAgKi8KLSAgICBwdWJsaWMgWG1sT3B0aW9ucyBzZXRVc2VEZWZhdWx0TmFtZXNwYWNlICgpIHsgCi0gICAgICAgIHJldHVybiBzZXQoIFNBVkVfVVNFX0RFRkFVTFRfTkFNRVNQQUNFICk7IAotICAgIH0KLQotICAgIC8qKgotICAgICAqIElmIG5hbWVzcGFjZXMgaGF2ZSBhbHJlYWR5IGJlZW4gZGVjbGFyZWQgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhlCi0gICAgICogZnJhZ21lbnQgYmVpbmcgc2F2ZWQsIHRoaXMgYWxsb3dzIHRob3NlIG1hcHBpbmdzIHRvIGJlIHBhc3NlZAotICAgICAqIGRvd24gdG8gdGhlIHNhdmVyLCBzbyB0aGUgcHJlZml4ZXMgYXJlIG5vdCByZS1kZWNsYXJlZC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gaW1wbGljaXROYW1lc3BhY2VzIGEgbWFwIG9mIHByZWZpeGVzIHRvIHVyaXMgdGhhdCBjYW4gYmUKLSAgICAgKiAgdXNlZCBieSB0aGUgc2F2ZXIgd2l0aG91dCBiZWluZyBkZWNsYXJlZAotICAgICAqIAotICAgICAqIEBzZWUgWG1sVG9rZW5Tb3VyY2Ujc2F2ZShqYXZhLmlvLkZpbGUsIFhtbE9wdGlvbnMpCi0gICAgICogQHNlZSBYbWxUb2tlblNvdXJjZSN4bWxUZXh0KFhtbE9wdGlvbnMpCi0gICAgICovIAotICAgIHB1YmxpYyBYbWxPcHRpb25zIHNldFNhdmVJbXBsaWNpdE5hbWVzcGFjZXMgKE1hcCBpbXBsaWNpdE5hbWVzcGFjZXMpIHsgCi0gICAgICAgIHJldHVybiBzZXQoIFNBVkVfSU1QTElDSVRfTkFNRVNQQUNFUywgaW1wbGljaXROYW1lc3BhY2VzICk7IAotICAgIH0KLQotICAgIC8qKgotICAgICAqIEEgbWFwIG9mIGhpbnRzIHRvIHBhc3MgdG8gdGhlIHNhdmVyIGZvciB3aGljaCBwcmVmaXhlcyB0byB1c2UKLSAgICAgKiBmb3Igd2hpY2ggbmFtZXNwYWNlIFVSSS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gc3VnZ2VzdGVkUHJlZml4ZXMgYSBtYXAgZnJvbSBVUklzIHRvIHByZWZpeGVzCi0gICAgICogCi0gICAgICogQHNlZSBYbWxUb2tlblNvdXJjZSNzYXZlKGphdmEuaW8uRmlsZSwgWG1sT3B0aW9ucykKLSAgICAgKiBAc2VlIFhtbFRva2VuU291cmNlI3htbFRleHQoWG1sT3B0aW9ucykKLSAgICAgKi8KLSAgICBwdWJsaWMgWG1sT3B0aW9ucyBzZXRTYXZlU3VnZ2VzdGVkUHJlZml4ZXMgKE1hcCBzdWdnZXN0ZWRQcmVmaXhlcykgeyAKLSAgICAgICAgcmV0dXJuIHNldCggU0FWRV9TVUdHRVNURURfUFJFRklYRVMsIHN1Z2dlc3RlZFByZWZpeGVzICk7IAotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoaXMgb3B0aW9uIGNhdXNlcyB0aGUgc2F2ZXIgdG8gZmlsdGVyIGEgUHJvY2Vzc2luZyBJbnN0cnVjdGlvbgotICAgICAqIHdpdGggdGhlIGdpdmVuIHRhcmdldAotICAgICAqIAotICAgICAqIEBwYXJhbSBmaWx0ZXJQcm9jaW5zdCB0aGUgbmFtZSBvZiBhIFByb2Nlc3NpbmcgSW5zdHJ1Y3Rpb24gdG8gZmlsdGVyCi0gICAgICogICBvbiBzYXZlCi0gICAgICogCi0gICAgICogQHNlZSBYbWxUb2tlblNvdXJjZSNzYXZlKGphdmEuaW8uRmlsZSwgWG1sT3B0aW9ucykKLSAgICAgKiBAc2VlIFhtbFRva2VuU291cmNlI3htbFRleHQoWG1sT3B0aW9ucykKLSAgICAgKi8KLSAgICBwdWJsaWMgWG1sT3B0aW9ucyBzZXRTYXZlRmlsdGVyUHJvY2luc3QgKFN0cmluZyBmaWx0ZXJQcm9jaW5zdCkgeyAKLSAgICAgICAgcmV0dXJuIHNldCggU0FWRV9GSUxURVJfUFJPQ0lOU1QsIGZpbHRlclByb2NpbnN0ICk7IAotICAgIH0KLQotICAgIC8qKgotICAgICAqIFdoZW4gc2F2aW5nIGEgZnJhZ21lbnQsIHRoaXMgb3B0aW9uIGNoYW5nZXMgdGhlIHFuYW1lIG9mIHRoZSBzeW50aGVzaXplZAotICAgICAqIHJvb3QgZWxlbWVudC4gIE5vcm1hbGx5ICZsdDt4bWwtZnJhZ21lbnQmZ3Q7IGlzIHVzZWQuCi0gICAgICogCi0gICAgICogQHNlZSBYbWxUb2tlblNvdXJjZSNzYXZlKGphdmEuaW8uRmlsZSwgWG1sT3B0aW9ucykKLSAgICAgKiBAc2VlIFhtbFRva2VuU291cmNlI3htbFRleHQoWG1sT3B0aW9ucykKLSAgICAgKi8KLSAgICBwdWJsaWMgWG1sT3B0aW9ucyBzZXRTYXZlVXNlT3BlbkZyYWcgKCkgeyAKLSAgICAgICAgcmV0dXJuIHNldCggU0FWRV9VU0VfT1BFTl9GUkFHTUVOVCApOyAKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIG9wdGlvbiBjb250cm9scyB3aGV0aGVyIHNhdmluZyBiZWdpbnMgb24gdGhlIGVsZW1lbnQgb3IgaXRzIGNvbnRlbnRzCi0gICAgICogCi0gICAgICogQHNlZSBYbWxUb2tlblNvdXJjZSNzYXZlKGphdmEuaW8uRmlsZSwgWG1sT3B0aW9ucykKLSAgICAgKiBAc2VlIFhtbFRva2VuU291cmNlI3htbFRleHQoWG1sT3B0aW9ucykKLSAgICAgKi8KLSAgICBwdWJsaWMgWG1sT3B0aW9ucyBzZXRTYXZlT3V0ZXIgKCkgeyAKLSAgICAgICAgcmV0dXJuIHNldCggU0FWRV9PVVRFUiApOyAKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIG9wdGlvbiBjb250cm9scyB3aGV0aGVyIHNhdmluZyBiZWdpbnMgb24gdGhlIGVsZW1lbnQgb3IgaXRzIGNvbnRlbnRzCi0gICAgICogCi0gICAgICogQHNlZSBYbWxUb2tlblNvdXJjZSNzYXZlKGphdmEuaW8uRmlsZSwgWG1sT3B0aW9ucykKLSAgICAgKiBAc2VlIFhtbFRva2VuU291cmNlI3htbFRleHQoWG1sT3B0aW9ucykKLSAgICAgKi8KLSAgICBwdWJsaWMgWG1sT3B0aW9ucyBzZXRTYXZlSW5uZXIgKCkgeyAKLSAgICAgICAgcmV0dXJuIHNldCggU0FWRV9JTk5FUiApOyAKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJZiB0aGlzIG9wdGlvbiBpcyBzZXQsIHRoZSBkb2N1bWVudCBlbGVtZW50IGlzIHJlcGxhY2VkIHdpdGggdGhlCi0gICAgICogZ2l2ZW4gUU5hbWUgd2hlbiBwYXJzaW5nLiAgSWYgbnVsbCBpcyBzdXBwbGllZCwgdGhlIGRvY3VtZW50IGVsZW1lbnQKLSAgICAgKiBpcyByZW1vdmVkLgotICAgICAqIAotICAgICAqIEBzZWUgWG1sT2JqZWN0LkZhY3RvcnkjcGFyc2UoamF2YS5pby5GaWxlLCBYbWxPcHRpb25zKQotICAgICAqLwotICAgIHB1YmxpYyBYbWxPcHRpb25zIHNldExvYWRSZXBsYWNlRG9jdW1lbnRFbGVtZW50ICggUU5hbWUgcmVwbGFjZW1lbnQgKSB7IAotICAgICAgICByZXR1cm4gc2V0KCBMT0FEX1JFUExBQ0VfRE9DVU1FTlRfRUxFTUVOVCwgcmVwbGFjZW1lbnQgKTsgCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogSWYgdGhpcyBvcHRpb24gaXMgc2V0LCBhbGwgaW5zaWduaWZpY2FudCB3aGl0ZXNwYWNlIGlzIHN0cmlwcGVkCi0gICAgICogd2hlbiBwYXJzaW5nIGEgZG9jdW1lbnQuICBDYW4gYmUgdXNlZCB0byBzYXZlIG1lbW9yeSBvbiBsYXJnZQotICAgICAqIGRvY3VtZW50cyB3aGVuIHlvdSBrbm93IHRoZXJlIGlzIG5vIG1peGVkIGNvbnRlbnQuCi0gICAgICogCi0gICAgICogQHNlZSBYbWxPYmplY3QuRmFjdG9yeSNwYXJzZShqYXZhLmlvLkZpbGUsIFhtbE9wdGlvbnMpCi0gICAgICovCi0gICAgcHVibGljIFhtbE9wdGlvbnMgc2V0TG9hZFN0cmlwV2hpdGVzcGFjZSAoKSB7IAotICAgICAgICByZXR1cm4gc2V0KCBMT0FEX1NUUklQX1dISVRFU1BBQ0UpOyAKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJZiB0aGlzIG9wdGlvbiBpcyBzZXQsIGFsbCBjb21tZW50cyBhcmUgc3RyaXBwZWQgd2hlbiBwYXJzaW5nCi0gICAgICogYSBkb2N1bWVudC4KLSAgICAgKiAKLSAgICAgKiBAc2VlIFhtbE9iamVjdC5GYWN0b3J5I3BhcnNlKGphdmEuaW8uRmlsZSwgWG1sT3B0aW9ucykKLSAgICAgKi8KLSAgICBwdWJsaWMgWG1sT3B0aW9ucyBzZXRMb2FkU3RyaXBDb21tZW50cygpIHsKLSAgICAgICAgcmV0dXJuIHNldCggTE9BRF9TVFJJUF9DT01NRU5UUyApOyAKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJZiB0aGlzIG9wdGlvbiBpcyBzZXQsIGFsbCBwcm9jZXNzaW5nIGluc3RydWN0aW9ucyAKLSAgICAgKiBhcmUgc3RyaXBwZWQgd2hlbiBwYXJzaW5nIGEgZG9jdW1lbnQuCi0gICAgICogCi0gICAgICogQHNlZSBYbWxPYmplY3QuRmFjdG9yeSNwYXJzZShqYXZhLmlvLkZpbGUsIFhtbE9wdGlvbnMpCi0gICAgICovCi0gICAgcHVibGljIFhtbE9wdGlvbnMgc2V0TG9hZFN0cmlwUHJvY2luc3RzICgpIHsgCi0gICAgICAgIHJldHVybiBzZXQoIExPQURfU1RSSVBfUFJPQ0lOU1RTICk7IAotICAgIH0KLQotICAgIC8qKgotICAgICAqIElmIHRoaXMgb3B0aW9uIGlzIHNldCwgbGluZSBudW1iZXIgYW5ub3RhdGlvbnMgYXJlIHBsYWNlZAotICAgICAqIGluIHRoZSBzdG9yZSB3aGVuIHBhcnNpbmcgYSBkb2N1bWVudC4gIFRoaXMgaXMgcGFydGljdWxhcmx5Ci0gICAgICogdXNlZnVsIHdoZW4geW91IHdhbnQge0BsaW5rIFhtbEVycm9yfSBvYmplY3RzIHRvIGNvbnRhaW4KLSAgICAgKiBsaW5lIG51bWJlcnMuCi0gICAgICogCi0gICAgICogQHNlZSBYbWxPYmplY3QuRmFjdG9yeSNwYXJzZShqYXZhLmlvLkZpbGUsIFhtbE9wdGlvbnMpCi0gICAgICogQHNlZSBYbWxFcnJvcgotICAgICAqLwotICAgIHB1YmxpYyBYbWxPcHRpb25zIHNldExvYWRMaW5lTnVtYmVycyAoKSB7IAotICAgICAgICByZXR1cm4gc2V0KCBMT0FEX0xJTkVfTlVNQkVSUyApOyAKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIG9wdGlvbiBzZXRzIGEgbWFwIG9mIG5hbWVzcGFjZSB1cmkgc3Vic3RpdHV0aW9ucyB0aGF0IGhhcHBlbgotICAgICAqIHdoZW4gcGFyc2luZyBhIGRvY3VtZW50LgotICAgICAqIDxwPgotICAgICAqIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBpZiB5b3UKLSAgICAgKiBoYXZlIGRvY3VtZW50cyB0aGF0IHVzZSBubyBuYW1lc3BhY2UsIGJ1dCB5b3Ugd2lzaCB0byBhdm9pZAotICAgICAqIHRoZSBuYW1lIGNvbGxpc2lvbiBwcm9ibGVtcyB0aGF0IG9jY3VyIHdoZW4geW91IGludHJvZHVjZQotICAgICAqIHNjaGVtYSBkZWZpbml0aW9ucyB3aXRob3V0IGEgdGFyZ2V0IG5hbWVzcGFjZS4KLSAgICAgKiA8cD4KLSAgICAgKiBCeSBtYXBwaW5nIHRoZSBlbXB0eSBzdHJpbmcgIiIgKHRoZSBhYnNlbmNlIG9mIGEgVVJJKSB0byBhIHNwZWNpZmljCi0gICAgICogbmFtZXNwYWNlLCB5b3UgY2FuIGZvcmNlIHRoZSBwYXJzZXIgdG8gYmVoYXZlIGFzIGlmIGEgbm8tbmFtZXNwYWNlCi0gICAgICogZG9jdW1lbnQgd2VyZSBhY3R1YWxseSBpbiB0aGUgc3BlY2lmaWVkIG5hbWVzcGFjZS4gVGhpcyBhbGxvd3MgeW91Ci0gICAgICogdG8gdHlwZSB0aGUgaW5zdGFuY2UgYWNjb3JkaW5nIHRvIGEgc2NoZW1hIGluIGEgbm9uZW1wdHkgbmFtZXNwYWNlLAotICAgICAqIGFuZCB0aGVyZWZvcmUgYXZvaWQgdGhlIHByb2JsZW1hdGljIHByYWN0aWNlIG9mIHVzaW5nIHNjaGVtYQotICAgICAqIGRlZmluaXRpb25zIHdpdGhvdXQgYSB0YXJnZXQgbmFtZXNwYWNlLgotICAgICAqIAotICAgICAqIEBwYXJhbSBzdWJzdE5hbWVzcGFjZXMgYSBtYXAgb2YgZG9jdW1lbnQgVVJJcyB0byByZXBsYWNlbWVudCBVUklzCi0gICAgICogCi0gICAgICogQHNlZSBYbWxPYmplY3QuRmFjdG9yeSNwYXJzZShqYXZhLmlvLkZpbGUsIFhtbE9wdGlvbnMpCi0gICAgICovCi0gICAgcHVibGljIFhtbE9wdGlvbnMgc2V0TG9hZFN1YnN0aXR1dGVOYW1lc3BhY2VzIChNYXAgc3Vic3ROYW1lc3BhY2VzKSB7IAotICAgICAgICByZXR1cm4gc2V0KCBMT0FEX1NVQlNUSVRVVEVfTkFNRVNQQUNFUywgc3Vic3ROYW1lc3BhY2VzICk7IAotICAgIH0KLQotICAgIC8qKgotICAgICAqIElmIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIHVuZGVybHlpbmcgeG1sIHRleHQgYnVmZmVyIGlzIHRyaW1tZWQKLSAgICAgKiBpbW1lZGlhdGVseSBhZnRlciBwYXJzaW5nIGEgZG9jdW1lbnQgcmVzdWx0aW5nIGluIGEgc21hbGxlciBtZW1vcnkKLSAgICAgKiBmb290cHJpbnQuICBVc2UgdGhpcyBvcHRpb24gaWYgeW91IGFyZSBsb2FkaW5nIGEgbGFyZ2UgbnVtYmVyCi0gICAgICogb2YgdW5jaGFuZ2luZyBkb2N1bWVudHMgdGhhdCB3aWxsIHN0YXkgaW4gbWVtb3J5IGZvciBzb21lIHRpbWUuCi0gICAgICogCi0gICAgICogQHNlZSBYbWxPYmplY3QuRmFjdG9yeSNwYXJzZShqYXZhLmlvLkZpbGUsIFhtbE9wdGlvbnMpCi0gICAgICovCi0gICAgcHVibGljIFhtbE9wdGlvbnMgc2V0TG9hZFRyaW1UZXh0QnVmZmVyICgpIHsgCi0gICAgICAgIHJldHVybiBzZXQoIExPQURfVFJJTV9URVhUX0JVRkZFUiApOyAKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXQgYWRkaXRpb25hbCBuYW1lc3BhY2UgbWFwcGluZ3MgdG8gYmUgYWRkZWQgd2hlbiBwYXJzaW5nCi0gICAgICogYSBkb2N1bWVudC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gbnNlcyBhZGRpdGlvbmFsIG5hbWVzcGFjZSBtYXBwaW5ncwotICAgICAqIAotICAgICAqIEBzZWUgWG1sT2JqZWN0LkZhY3RvcnkjcGFyc2UoamF2YS5pby5GaWxlLCBYbWxPcHRpb25zKQotICAgICAqLwotICAgIHB1YmxpYyBYbWxPcHRpb25zIHNldExvYWRBZGRpdGlvbmFsTmFtZXNwYWNlcyAoTWFwIG5zZXMpIHsgCi0gICAgICAgIHJldHVybiBzZXQoIExPQURfQURESVRJT05BTF9OQU1FU1BBQ0VTLCBuc2VzICk7IAotICAgIH0KLQotICAgIC8qKgotICAgICAqIElmIHRoaXMgb3B0aW9uIGlzIHNldCB3aGVuIGxvYWRpbmcgZnJvbSBhbiBJbnB1dFN0cmVhbSBvciBGaWxlLCB0aGVuCi0gICAgICogdGhlIGxvYWRlciB3aWxsIGNvbXB1dGUgYSAxNjAtYml0IFNIQS0xIG1lc3NhZ2UgZGlnZXN0IG9mIHRoZSBYTUwKLSAgICAgKiBmaWxlIHdoaWxlIGxvYWRpbmcgaXQgYW5kIG1ha2UgaXQgYXZhaWxhYmxlIHZpYQotICAgICAqIFhtbE9iamVjdC5kb2N1bWVudFByb3BlcnRpZXMoKS5nZXRNZXNzYWdlRGlnZXN0KCk7Ci0gICAgICogPGJyPgotICAgICAqIFRoZSBzY2hlbWEgY29tcGlsZXIgdXNlcyBtZXNzYWdlIGRpZ2VzdHMgdG8gZGV0ZWN0IGFuZCBlbGltaW5hdGUKLSAgICAgKiBkdXBsaWNhdGUgaW1wb3J0ZWQgeHNkIGZpbGVzLgotICAgICAqIAotICAgICAqIEBzZWUgWG1sT2JqZWN0LkZhY3RvcnkjcGFyc2UoamF2YS5pby5GaWxlLCBYbWxPcHRpb25zKQotICAgICAqLwotICAgIHB1YmxpYyBYbWxPcHRpb25zIHNldExvYWRNZXNzYWdlRGlnZXN0ICgpIHsgCi0gICAgICAgIHJldHVybiBzZXQoIExPQURfTUVTU0FHRV9ESUdFU1QgKTsgCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdGhhdCByZXByZXNlbnRzCi0gICAgICogdGhlIGN1cnJlbnQgbm9kZSBpbiBhIHF1ZXJ5IGV4cHJlc3Npb24uCi0gICAgICogCi0gICAgICogQHBhcmFtIHZhck5hbWUgVGhlIG5ldyB2YXJpYWJsZSBuYW1lIHRvIHVzZSBmb3IgdGhlIHF1ZXJ5LgotICAgICAqIAotICAgICAqIEBzZWUgWG1sT2JqZWN0I2V4ZWNRdWVyeQotICAgICAqIEBzZWUgWG1sQ3Vyc29yI2V4ZWNRdWVyeQotICAgICAqLwotICAgIHB1YmxpYyBYbWxPcHRpb25zIHNldFhxdWVyeUN1cnJlbnROb2RlVmFyIChTdHJpbmcgdmFyTmFtZSkgeyAKLSAgICAgICAgcmV0dXJuIHNldCggWFFVRVJZX0NVUlJFTlRfTk9ERV9WQVIsIHZhck5hbWUgKTsgCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhpcyBvcHRpb24gc2V0cyB0aGUgZG9jdW1lbnQgc291cmNlIG5hbWUgaW50byB0aGUgeG1sIHN0b3JlCi0gICAgICogd2hlbiBwYXJzaW5nIGEgZG9jdW1lbnQuICBJZiBhIGRvY3VtZW50IGlzIHBhcnNlZCBmcm9tIGEKLSAgICAgKiBGaWxlIG9yIFVSSSwgaXQgaXMgYXV0b21hdGljYWxseSBzZXQgdG8gdGhlIFVSSSBvZiB0aGUKLSAgICAgKiBzb3VyY2U7IG90aGVyd2lzZSwgZm9yIGV4YW1wbGUsIHdoZW4gcGFyc2luZyBhIFN0cmluZywKLSAgICAgKiB5b3UgY2FuIHVzZSB0aGlzIG9wdGlvbiB0byBzcGVjaWZ5IHRoZSBzb3VyY2UgbmFtZSB5b3Vyc2VsZi4gCi0gICAgICogCi0gICAgICogQHNlZSBYbWxPYmplY3QuRmFjdG9yeSNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBYbWxPcHRpb25zKQotICAgICAqLwotICAgIHB1YmxpYyBYbWxPcHRpb25zIHNldERvY3VtZW50U291cmNlTmFtZSAoU3RyaW5nIGRvY3VtZW50U291cmNlTmFtZSkgeyAKLSAgICAgICAgcmV0dXJuIHNldCggRE9DVU1FTlRfU09VUkNFX05BTUUsIGRvY3VtZW50U291cmNlTmFtZSApOyAKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIG9wdGlvbiBhbGxvd3MgZm9yIDxjb2RlPlFOYW1lPC9jb2RlPiBzdWJzdGl0dXRpb24gZHVyaW5nIHNjaGVtYSBjb21waWxhdGlvbi4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gbmFtZU1hcCBhIG1hcCBmcm9tIDxjb2RlPlFOYW1lPC9jb2RlPnMgdG8gc3Vic3RpdHV0ZSA8Y29kZT5RTmFtZTwvY29kZT5zLgotICAgICAqIAotICAgICAqIEBzZWUgWG1sQmVhbnMjY29tcGlsZVhzZAotICAgICAqLwotICAgIHB1YmxpYyBYbWxPcHRpb25zIHNldENvbXBpbGVTdWJzdGl0dXRlTmFtZXMgKE1hcCBuYW1lTWFwKSB7IAotICAgICAgICByZXR1cm4gc2V0KCBDT01QSUxFX1NVQlNUSVRVVEVfTkFNRVMsIG5hbWVNYXAgKTsgCi0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIElmIHRoaXMgb3B0aW9uIGlzIHNldCwgdmFsaWRhdGlvbiBpcyBub3QgZG9uZSBvbiB0aGUgU2NoZW1hIFhtbEJlYW5zCi0gICAgICogd2hlbiBidWlsZGluZyBhIDxjb2RlPlNjaGVtYVR5cGVTeXN0ZW08L2NvZGU+Ci0gICAgICogCi0gICAgICogQHNlZSBYbWxCZWFucyNjb21waWxlWHNkCi0gICAgICovCi0gICAgcHVibGljIFhtbE9wdGlvbnMgc2V0Q29tcGlsZU5vVmFsaWRhdGlvbiAoKSB7IAotICAgICAgICByZXR1cm4gc2V0KCBDT01QSUxFX05PX1ZBTElEQVRJT04gKTsgCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogSWYgdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUgdW5pcXVlIHBhcnRpY2xlIGF0dHJpYnV0aW9uIHJ1bGUgaXMgbm90Ci0gICAgICogZW5mb3JjZWQgd2hlbiBidWlsZGluZyBhIDxjb2RlPlNjaGVtYVR5cGVTeXN0ZW08L2NvZGU+LiBTZWUKLSAgICAgKiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI25vbi1hbWJpZyI+QXBwZW5kaXggSCBvZiB0aGUgWE1MIFNjaGVtYSBzcGVjaWZpY2F0aW9uPC9hPgotICAgICAqIGZvciBpbmZvcm1hdGlvbiBvbiB0aGUgVVBBIHJ1bGUuCi0gICAgICogCi0gICAgICogQHNlZSBYbWxCZWFucyNjb21waWxlWHNkCi0gICAgICovCi0gICAgcHVibGljIFhtbE9wdGlvbnMgc2V0Q29tcGlsZU5vVXBhUnVsZSAoKSB7IAotICAgICAgICByZXR1cm4gc2V0KCBDT01QSUxFX05PX1VQQV9SVUxFICk7IAotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBJZiB0aGlzIG9wdGlvbiBpcyBzZXQsIHRoZSBwYXJ0aWNsZSB2YWxpZCAocmVzdHJpY2l0b24pIHJ1bGUgaXMgbm90Ci0gICAgICogZW5mb3JjZWQgd2hlbiBidWlsZGluZyBhIDxjb2RlPlNjaGVtYVR5cGVTeXN0ZW08L2NvZGU+LiBTZWUKLSAgICAgKiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2Nvcy1wYXJ0aWNsZS1yZXN0cmljdCI+U2VjdGlvbiAzLjkuNiBvZiB0aGUgWE1MIFNjaGVtYSBzcGVjaWZpY2F0aW9uPC9hPgotICAgICAqIGZvciBpbmZvcm1hdGlvbiBvbiB0aGUgUFZSIHJ1bGUuCi0gICAgICogCi0gICAgICogQHNlZSBYbWxCZWFucyNjb21waWxlWHNkCi0gICAgICovCi0gICAgcHVibGljIFhtbE9wdGlvbnMgc2V0Q29tcGlsZU5vUHZyUnVsZSAoKSB7IAotICAgICAgICByZXR1cm4gc2V0KCBDT01QSUxFX05PX1BWUl9SVUxFICk7IAotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBJZiB0aGlzIG9wdGlvbiBpcyBzZXQsIHRoZW4gdGhlIHNjaGVtYSBjb21waWxlciB3aWxsIHRyeSB0byBkb3dubG9hZAotICAgICAqIHNjaGVtYXMgdGhhdCBhcHBlYXIgaW4gaW1wb3J0cyBhbmQgaW5jbHVkZXMgZnJvbSBuZXR3b3JrIGJhc2VkIFVSTHMuCi0gICAgICogCi0gICAgICogQHNlZSBYbWxCZWFucyNjb21waWxlWHNkCi0gICAgICovCi0gICAgcHVibGljIFhtbE9wdGlvbnMgc2V0Q29tcGlsZURvd25sb2FkVXJscyAoKSB7IAotICAgICAgICByZXR1cm4gc2V0KCBDT01QSUxFX0RPV05MT0FEX1VSTFMpOyAKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogSWYgdGhpcyBvcHRpb24gaXMgc2V0LCB0aGVuIHRoZSBzY2hlbWEgY29tcGlsZXIgd2lsbCBwZXJtaXQgYW5kCi0gICAgICogaWdub3JlIG11bHRpcGxlIGRlZmluaXRpb25zIG9mIHRoZSBzYW1lIGNvbXBvbmVudCAoZWxlbWVudCwgYXR0cmlidXRlLAotICAgICAqIHR5cGUsIGV0YykgbmFtZXMgaW4gdGhlIGdpdmVuIG5hbWVzcGFjZXMuICBJZiBtdWx0aXBsZSBkZWZpbml0aW9ucwotICAgICAqIHdpdGggdGhlIHNhbWUgbmFtZSBhcHBlYXIsIHRoZSBkZWZpbml0aW9ucyB0aGF0IGhhcHBlbiB0byBiZSBwcm9jZXNzZWQKLSAgICAgKiBsYXN0IHdpbGwgYmUgaWdub3JlZC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gbWRlZk5hbWVzcGFjZXMgYSBzZXQgb2YgbmFtZXNwYWNlIFVSSXMgYXMgU3RyaW5ncwotICAgICAqIAotICAgICAqIEBzZWUgWG1sQmVhbnMjY29tcGlsZVhzZAotICAgICAqLyAKLSAgICBwdWJsaWMgWG1sT3B0aW9ucyBzZXRDb21waWxlTWRlZk5hbWVzcGFjZXMoU2V0IG1kZWZOYW1lc3BhY2VzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHNldCggQ09NUElMRV9NREVGX05BTUVTUEFDRVMsIG1kZWZOYW1lc3BhY2VzICk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSWYgdGhpcyBvcHRpb24gaXMgc2V0IHdoZW4gYW4gaW5zdGFuY2UgaXMgY3JlYXRlZCwgdGhlbiB2YWx1ZQotICAgICAqIGZhY2V0cyB3aWxsIGJlIGNoZWNrZWQgb24gZWFjaCBjYWxsIHRvIGEgc2V0dGVyIG9yIGdldHRlcgotICAgICAqIG1ldGhvZCBvbiBpbnN0YW5jZXMgb2YgWG1sT2JqZWN0IHdpdGhpbiB0aGUgaW5zdGFuY2UgZG9jdW1lbnQuCi0gICAgICogSWYgdGhlIGZhY2V0cyBhcmUgbm90IHNhdGlzZmllZCwgdGhlbiBhbiB1bmNoZWNrZWQgZXhjZXB0aW9uIGlzCi0gICAgICogdGhyb3duIGltbWVkaWF0ZWx5LiAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIGZvciBmaW5kaW5nIGNvZGUgdGhhdAotICAgICAqIGlzIGludHJvZHVjaW5nIGludmFsaWQgdmFsdWVzIGluIGFuIFhNTCBkb2N1bWVudCwgYnV0IGl0Ci0gICAgICogc2xvd3MgcGVyZm9ybWFuY2UuCi0gICAgICogCi0gICAgICogQHNlZSBYbWxPYmplY3QuRmFjdG9yeSNwYXJzZShqYXZhLmlvLkZpbGUsIFhtbE9wdGlvbnMpCi0gICAgICovCi0gICAgcHVibGljIFhtbE9wdGlvbnMgc2V0VmFsaWRhdGVPblNldCgpIHsKLSAgICAgICAgcmV0dXJuIHNldCggVkFMSURBVEVfT05fU0VUICk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSWYgdGhpcyBvcHRpb24gaXMgc2V0IHdoZW4gY29tcGlsaW5nIGEgc2NoZW1hLCB0aGVuIHRoZSBnaXZlbgotICAgICAqIEVudGl0eVJlc29sdmVyIHdpbGwgYmUgY29uc3VsdGVkIGluIG9yZGVyIHRvIHJlc29sdmUgYW55Ci0gICAgICogVVJJcyB3aGlsZSBkb3dubG9hZGluZyBpbXBvcnRlZCBzY2hlbWFzLgotICAgICAqCi0gICAgICogRW50aXR5UmVzb2x2ZXJzIGFyZSBjdXJyZW50bHkgb25seSB1c2VkIGJ5IGNvbXBpbGVYc2Q7IHRoZXkKLSAgICAgKiBhcmUgbm90IGNvbnN1bHRlZCBieSBvdGhlciBmdW5jdGlvbnMsIGZvciBleGFtcGxlLCBwYXJzZS4KLSAgICAgKiBUaGlzIHdpbGwgbGlrZWx5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLgotICAgICAqIAotICAgICAqIEBzZWUgWG1sQmVhbnMjY29tcGlsZVhzZAotICAgICAqLwotICAgIHB1YmxpYyBYbWxPcHRpb25zIHNldEVudGl0eVJlc29sdmVyKEVudGl0eVJlc29sdmVyIHJlc29sdmVyKSB7Ci0gICAgICAgIHJldHVybiBzZXQoIEVOVElUWV9SRVNPTFZFUiwgcmVzb2x2ZXIgKTsKLSAgICB9Ci0KLQotICAgIC8vCi0gICAgLy8gQ29tcGxldGUgc2V0IG9mIFhtbE9wdGlvbidzCi0gICAgLy8KLSAgICAgICAgICAgIAotICAgIC8vIFRPRE8gLSBBZGQgc2VsZWN0UGF0aCBvcHRpb24gdG8gdHJhY2sgdGhlIHNlbGV0aW9uIChkZWF1bHQgaXMgdG8gY2xlYW4gc2VsZWN0aW9ucyBmYXN0KS4gCi0gICAgCi0gICAgLyoqIEBleGNsdWRlICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0FWRV9OQU1FU1BBQ0VTX0ZJUlNUICAgICAgICAgICA9ICAiU0FWRV9OQU1FU1BBQ0VTX0ZJUlNUIjsKLSAgICAvKiogQGV4Y2x1ZGUgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTQVZFX1NZTlRIRVRJQ19ET0NVTUVOVF9FTEVNRU5UID0gICJTQVZFX1NZTlRIRVRJQ19ET0NVTUVOVF9FTEVNRU5UIjsKLSAgICAvKiogQGV4Y2x1ZGUgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTQVZFX1BSRVRUWV9QUklOVCAgICAgICAgICAgICAgID0gICJTQVZFX1BSRVRUWV9QUklOVCI7Ci0gICAgLyoqIEBleGNsdWRlICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0FWRV9QUkVUVFlfUFJJTlRfSU5ERU5UICAgICAgICA9ICAiU0FWRV9QUkVUVFlfUFJJTlRfSU5ERU5UIjsKLSAgICAvKiogQGV4Y2x1ZGUgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTQVZFX1BSRVRUWV9QUklOVF9PRkZTRVQgICAgICAgID0gICJTQVZFX1BSRVRUWV9QUklOVF9PRkZTRVQiOwotICAgIC8qKiBAZXhjbHVkZSAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNBVkVfQUdHUkVTU0lWRV9OQU1FU1BBQ0VTICAgICAgPSAgIlNBVkVfQUdHUkVTU0lWRV9OQU1FU1BBQ0VTIjsKLSAgICAvKiogQGV4Y2x1ZGUgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTQVZFX1VTRV9ERUZBVUxUX05BTUVTUEFDRSAgICAgID0gICJTQVZFX1VTRV9ERUZBVUxUX05BTUVTUEFDRSI7Ci0gICAgLyoqIEBleGNsdWRlICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0FWRV9JTVBMSUNJVF9OQU1FU1BBQ0VTICAgICAgICA9ICAiU0FWRV9JTVBMSUNJVF9OQU1FU1BBQ0VTIjsKLSAgICAvKiogQGV4Y2x1ZGUgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBTQVZFX1NVR0dFU1RFRF9QUkVGSVhFUyAgICAgICAgID0gICJTQVZFX1NVR0dFU1RFRF9QUkVGSVhFUyI7Ci0gICAgLyoqIEBleGNsdWRlICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0FWRV9GSUxURVJfUFJPQ0lOU1QgICAgICAgICAgICA9ICAiU0FWRV9GSUxURVJfUFJPQ0lOU1QiOwotICAgIC8qKiBAZXhjbHVkZSAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNBVkVfVVNFX09QRU5fRlJBR01FTlQgICAgICAgICAgPSAgIlNBVkVfVVNFX09QRU5fRlJBR01FTlQiOwotICAgIC8qKiBAZXhjbHVkZSAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNBVkVfT1VURVIgICAgICAgICAgICAgICAgICAgICAgPSAgIlNBVkVfT1VURVIiOwotICAgIC8qKiBAZXhjbHVkZSAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNBVkVfSU5ORVIgICAgICAgICAgICAgICAgICAgICAgPSAgIlNBVkVfSU5ORVIiOwotICAgIAotICAgIC8qKiBAZXhjbHVkZSAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExPQURfUkVQTEFDRV9ET0NVTUVOVF9FTEVNRU5UICAgPSAgIkxPQURfUkVQTEFDRV9ET0NVTUVOVF9FTEVNRU5UIjsKLSAgICAvKiogQGV4Y2x1ZGUgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMT0FEX1NUUklQX1dISVRFU1BBQ0UgICAgICAgICAgID0gICJMT0FEX1NUUklQX1dISVRFU1BBQ0UiOwotICAgIC8qKiBAZXhjbHVkZSAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExPQURfU1RSSVBfQ09NTUVOVFMgICAgICAgICAgICAgPSAgIkxPQURfU1RSSVBfQ09NTUVOVFMiOwotICAgIC8qKiBAZXhjbHVkZSAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExPQURfU1RSSVBfUFJPQ0lOU1RTICAgICAgICAgICAgPSAgIkxPQURfU1RSSVBfUFJPQ0lOU1RTIjsKLSAgICAvKiogQGV4Y2x1ZGUgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMT0FEX0xJTkVfTlVNQkVSUyAgICAgICAgICAgICAgID0gICJMT0FEX0xJTkVfTlVNQkVSUyI7Ci0gICAgLyoqIEBleGNsdWRlICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9BRF9TVUJTVElUVVRFX05BTUVTUEFDRVMgICAgICA9ICAiTE9BRF9TVUJTVElUVVRFX05BTUVTUEFDRVMiOwotICAgIC8qKiBAZXhjbHVkZSAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExPQURfVFJJTV9URVhUX0JVRkZFUiAgICAgICAgICAgPSAgIkxPQURfVFJJTV9URVhUX0JVRkZFUiI7Ci0gICAgLyoqIEBleGNsdWRlICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9BRF9BRERJVElPTkFMX05BTUVTUEFDRVMgICAgICA9ICAiTE9BRF9BRERJVElPTkFMX05BTUVTUEFDRVMiOwotICAgIC8qKiBAZXhjbHVkZSAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExPQURfTUVTU0FHRV9ESUdFU1QgICAgICAgICAgICAgPSAgIkxPQURfTUVTU0FHRV9ESUdFU1QiOwotCi0gICAgLyoqIEBleGNsdWRlICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgWFFVRVJZX0NVUlJFTlRfTk9ERV9WQVIgICAgICAgICA9ICAiWFFVRVJZX0NVUlJFTlRfTk9ERV9WQVIiOwotCi0gICAgLyoqIEBleGNsdWRlICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0hBUkFDVEVSX0VOQ09ESU5HICAgICAgICAgICAgICA9ICAiQ0hBUkFDVEVSX0VOQ09ESU5HIjsKLSAgICAvKiogQGV4Y2x1ZGUgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFUlJPUl9MSVNURU5FUiAgICAgICAgICAgICAgICAgID0gICJFUlJPUl9MSVNURU5FUiI7Ci0gICAgLyoqIEBleGNsdWRlICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRE9DVU1FTlRfVFlQRSAgICAgICAgICAgICAgICAgICA9ICAiRE9DVU1FTlRfVFlQRSI7Ci0gICAgLyoqIEBleGNsdWRlICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRE9DVU1FTlRfU09VUkNFX05BTUUgICAgICAgICAgICA9ICAiRE9DVU1FTlRfU09VUkNFX05BTUUiOwotICAgIC8qKiBAZXhjbHVkZSAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTVBJTEVfU1VCU1RJVFVURV9OQU1FUyAgICAgICAgPSAgIkNPTVBJTEVfU1VCU1RJVFVURV9OQU1FUyI7Ci0gICAgLyoqIEBleGNsdWRlICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09NUElMRV9OT19WQUxJREFUSU9OICAgICAgICAgICA9ICAiQ09NUElMRV9OT19WQUxJREFUSU9OIjsKLSAgICAvKiogQGV4Y2x1ZGUgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT01QSUxFX05PX1VQQV9SVUxFICAgICAgICAgICAgID0gICJDT01QSUxFX05PX1VQQV9SVUxFIjsKLSAgICAvKiogQGV4Y2x1ZGUgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT01QSUxFX05PX1BWUl9SVUxFICAgICAgICAgICAgID0gICJDT01QSUxFX05PX1BWUl9SVUxFIjsKLSAgICAvKiogQGV4Y2x1ZGUgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT01QSUxFX0RPV05MT0FEX1VSTFMgICAgICAgICAgID0gICJDT01QSUxFX0RPV05MT0FEX1VSTFMiOwotICAgIC8qKiBAZXhjbHVkZSAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTVBJTEVfTURFRl9OQU1FU1BBQ0VTICAgICAgICAgPSAgIkNPTVBJTEVfTURFRl9OQU1FU1BBQ0VTIjsKLSAgICAvKiogQGV4Y2x1ZGUgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxJREFURV9PTl9TRVQgICAgICAgICAgICAgICAgID0gICJWQUxJREFURV9PTl9TRVQiOwotICAgIC8qKiBAZXhjbHVkZSAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVOVElUWV9SRVNPTFZFUiAgICAgICAgICAgICAgICAgPSAgIkVOVElUWV9SRVNPTFZFUiI7Ci0gICAgCi0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBYbWxPcHRpb25zIEVNUFRZX09QVElPTlM7Ci0gICAgc3RhdGljIHsKLSAgICAgICAgRU1QVFlfT1BUSU9OUyA9IG5ldyBYbWxPcHRpb25zKCk7Ci0gICAgICAgIEVNUFRZX09QVElPTlMuX21hcCA9IENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZU1hcChFTVBUWV9PUFRJT05TLl9tYXApOwotICAgIH0KLQotICAgIC8qKiBJZiBwYXNzZWQgbnVsbCwgcmV0dXJucyBhbiBlbXB0eSBvcHRpb25zIG9iamVjdC4gIE90aGVyd2lzZSwgcmV0dXJucyBpdHMgYXJndW1lbnQuICovCi0gICAgcHVibGljIHN0YXRpYyBYbWxPcHRpb25zIG1hc2tOdWxsKFhtbE9wdGlvbnMgbykgewotICAgICAgICByZXR1cm4gKG8gPT0gbnVsbCkgPyBFTVBUWV9PUFRJT05TIDogbzsKLSAgICB9Ci0KLSAgICAKLSAgICAvKiogVXNlZCB0byBzZXQgYSBnZW5lcmljIG9wdGlvbiAqLwotICAgIHB1YmxpYyB2b2lkICBwdXQgKCBPYmplY3Qgb3B0aW9uICAgICAgICAgICAgICAgKSB7IHB1dCggb3B0aW9uLCBudWxsICk7IH0KLSAgICAvKiogVXNlZCB0byBzZXQgYSBnZW5lcmljIG9wdGlvbiAqLwotICAgIHB1YmxpYyB2b2lkICBwdXQgKCBPYmplY3Qgb3B0aW9uLCBPYmplY3QgdmFsdWUgKSB7IF9tYXAucHV0KG9wdGlvbiwgdmFsdWUpOyB9Ci0gICAgLyoqIFVzZWQgdG8gc2V0IGEgZ2VuZXJpYyBvcHRpb24gKi8KLSAgICBwdWJsaWMgdm9pZCBwdXQgICggT2JqZWN0IG9wdGlvbiwgaW50IHZhbHVlICAgICkgeyBwdXQoIG9wdGlvbiwgbmV3IEludGVnZXIoIHZhbHVlICkgKTsgfQotCi0gICAgcHJpdmF0ZSBYbWxPcHRpb25zIHNldChPYmplY3Qgb3B0aW9uKSAgICAgICAgICAgICAgIHsgcmV0dXJuIHNldChvcHRpb24sIG51bGwpOyB9Ci0gICAgcHJpdmF0ZSBYbWxPcHRpb25zIHNldChPYmplY3Qgb3B0aW9uLCBPYmplY3QgdmFsdWUpIHsgX21hcC5wdXQob3B0aW9uLCB2YWx1ZSk7IHJldHVybiB0aGlzO30KLSAgICBwcml2YXRlIFhtbE9wdGlvbnMgc2V0KE9iamVjdCBvcHRpb24sIGludCB2YWx1ZSkgICAgeyByZXR1cm4gc2V0KG9wdGlvbiwgbmV3IEludGVnZXIodmFsdWUpKTsgfQotCi0gICAgLyoqIFVzZWQgdG8gdGVzdCBhIGdlbmVyaWMgb3B0aW9uICovCi0gICAgcHVibGljIGJvb2xlYW4gaGFzT3B0aW9uICAgKCBPYmplY3Qgb3B0aW9uICkgeyByZXR1cm4gX21hcC5jb250YWluc0tleSggb3B0aW9uICk7IH0KLSAgICAvKiogVXNlZCB0byBnZXQgYSBnZW5lcmljIG9wdGlvbiAqLwotICAgIHB1YmxpYyBPYmplY3QgIGdldCAgICAgICAgICggT2JqZWN0IG9wdGlvbiApIHsgcmV0dXJuIF9tYXAuZ2V0KCBvcHRpb24gKTsgfQotCi0gICAgLyoqIFVzZWQgdG8gdGVzdCBhIGdlbmVyaWMgb3B0aW9uIG9uIGFuIG9wdGlvbnMgb2JqZWN0IHRoYXQgbWF5IGJlIG51bGwgKi8KLSAgICBwdWJsaWMgc3RhdGljIE9iamVjdCBzYWZlR2V0KFhtbE9wdGlvbnMgbywgT2JqZWN0IG9wdGlvbikgewotICAgICAgICByZXR1cm4gbyA9PSBudWxsID8gbnVsbCA6IG8uZ2V0KG9wdGlvbik7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkMjViYTIuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOwotCi0KLS8qKgotICogQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSAqIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jcG9zaXRpdmVJbnRlZ2VyIj54czpwb3NpdGl2ZUludGVnZXI8L2E+IHR5cGUuCi0gKiBPbmUgb2YgdGhlIGRlcml2ZWQgdHlwZXMgYmFzZWQgb24gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkZWNpbWFsIj54czpkZWNpbWFsPC9hPi4KLSAqIDxwPgotICogVmVyaWZpZWQgdG8gYmUgcG9zaXRpdmUgd2hlbiB2YWxpZGF0aW5nLgotICogPHA+Ci0gKiBDb252ZXJ0aWJsZSB0byB7QGxpbmsgamF2YS5tYXRoLkJpZ0ludGVnZXJ9LgotICovIAotcHVibGljIGludGVyZmFjZSBYbWxQb3NpdGl2ZUludGVnZXIgZXh0ZW5kcyBYbWxOb25OZWdhdGl2ZUludGVnZXIKLXsKLSAgICAvKiogVGhlIGNvbnN0YW50IHtAbGluayBTY2hlbWFUeXBlfSBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlIHR5cGUgPSBYbWxCZWFucy5nZXRCdWlsdGluVHlwZVN5c3RlbSgpLnR5cGVGb3JIYW5kbGUoIl9CSV9wb3NpdGl2ZUludGVnZXIiKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gICAgICogb2Yge0BsaW5rIFhtbFBvc2l0aXZlSW50ZWdlcn0uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBGYWN0b3J5Ci0gICAgewotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sUG9zaXRpdmVJbnRlZ2VyfSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFBvc2l0aXZlSW50ZWdlciBuZXdJbnN0YW5jZSgpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFBvc2l0aXZlSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sUG9zaXRpdmVJbnRlZ2VyfSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFBvc2l0aXZlSW50ZWdlciBuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgewotICAgICAgICAgIHJldHVybiAoWG1sUG9zaXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGltbXV0YWJsZSB7QGxpbmsgWG1sUG9zaXRpdmVJbnRlZ2VyfSB2YWx1ZSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFBvc2l0aXZlSW50ZWdlciBuZXdWYWx1ZShPYmplY3Qgb2JqKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxQb3NpdGl2ZUludGVnZXIpIHR5cGUubmV3VmFsdWUoIG9iaiApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFBvc2l0aXZlSW50ZWdlcn0gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzEyMzQ1Njc4OTAmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxQb3NpdGl2ZUludGVnZXIgcGFyc2UoamF2YS5sYW5nLlN0cmluZyBzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sUG9zaXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sUG9zaXRpdmVJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7MTIzNDU2Nzg5MCZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFBvc2l0aXZlSW50ZWdlciBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sUG9zaXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sUG9zaXRpdmVJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxQb3NpdGl2ZUludGVnZXIgcGFyc2UoamF2YS5pby5GaWxlIGYpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxQb3NpdGl2ZUludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxQb3NpdGl2ZUludGVnZXJ9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFBvc2l0aXZlSW50ZWdlciBwYXJzZShqYXZhLmlvLkZpbGUgZiwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxQb3NpdGl2ZUludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxQb3NpdGl2ZUludGVnZXJ9IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sUG9zaXRpdmVJbnRlZ2VyIHBhcnNlKGphdmEubmV0LlVSTCB1KSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sUG9zaXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBudWxsICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFBvc2l0aXZlSW50ZWdlcn0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxQb3NpdGl2ZUludGVnZXIgcGFyc2UoamF2YS5uZXQuVVJMIHUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sUG9zaXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBvcHRpb25zICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFBvc2l0aXZlSW50ZWdlcn0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxQb3NpdGl2ZUludGVnZXIgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFBvc2l0aXZlSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxQb3NpdGl2ZUludGVnZXJ9IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sUG9zaXRpdmVJbnRlZ2VyIHBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0gaXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sUG9zaXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFBvc2l0aXZlSW50ZWdlcn0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxQb3NpdGl2ZUludGVnZXIgcGFyc2UoamF2YS5pby5SZWFkZXIgcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFBvc2l0aXZlSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFBvc2l0aXZlSW50ZWdlcn0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxQb3NpdGl2ZUludGVnZXIgcGFyc2UoamF2YS5pby5SZWFkZXIgciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxQb3NpdGl2ZUludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxQb3NpdGl2ZUludGVnZXJ9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxQb3NpdGl2ZUludGVnZXIgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sUG9zaXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sUG9zaXRpdmVJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sUG9zaXRpdmVJbnRlZ2VyIHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxQb3NpdGl2ZUludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxQb3NpdGl2ZUludGVnZXJ9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sUG9zaXRpdmVJbnRlZ2VyIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFBvc2l0aXZlSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sUG9zaXRpdmVJbnRlZ2VyfSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFBvc2l0aXZlSW50ZWdlciBwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sUG9zaXRpdmVJbnRlZ2VyKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxQb3NpdGl2ZUludGVnZXJ9IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFBvc2l0aXZlSW50ZWdlciBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxQb3NpdGl2ZUludGVnZXIpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFBvc2l0aXZlSW50ZWdlcn0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sUG9zaXRpdmVJbnRlZ2VyIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbnsKLSAgICAgICAgICByZXR1cm4gKFhtbFBvc2l0aXZlSW50ZWdlcikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBGYWN0b3J5KCkgeyB9IC8vIE5vIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgYWxsb3dlZAotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIxMGE5MS4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKLQotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotCi0vKioKLSAqIENvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gKiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI1FOYW1lIj54czpRTmFtZTwvYT4gdHlwZS4KLSAqIDxwPgotICogQSBRTmFtZSBpcyB0aGUgbG9naWNhbCBjb21iaW5hdGlvbiBvZiBhbiBYTUwgbmFtZXNwYWNlIFVSSSBhbmQgYSBsb2NhbE5hbWUuCi0gKiBBbHRob3VnaCBpbiBhbiBYTUwgaW5zdGFuY2UgZG9jdW1lbnQsIGEgUU5hbWUgYXBwZWFycyBhcyAicHJlZml4OmxvY2FsTmFtZSIsCi0gKiB0aGUgbG9naWNhbCB2YWx1ZSBvZiBhIFFOYW1lIGRvZXMgTk9UIGNvbnRhaW4gYW55IGluZm9ybWF0aW9uIGFib3V0IHRoZQotICogcHJlZml4LCBvbmx5IHRoZSBuYW1lc3BhY2UgVVJJIHRvIHdoaWNoIHRoZSBwcmVmaXggbWFwcy4gIEZvciBleGFtcGxlLAotICogdHdvIFFOYW1lcyAiYTpoZWxsbyIgYW5kICJiOmhlbGxvIiBhcmUgcGVyZmVjdGx5IGVxdWl2YWxlbnQgaWYgImE6IiBpbgotICogdGhlIGZpcnN0IGluc3RhbmNlIG1hcHMgdG8gdGhlIHNhbWUgVVJJIGFzICJiOiIgaW4gdGhlIHNlY29uZCBpbnN0YW5jZS4KLSAqIDxwPgotICogQ29udmVydGlibGUgdG8ge0BsaW5rIGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWV9LgotICovIAotcHVibGljIGludGVyZmFjZSBYbWxRTmFtZSBleHRlbmRzIFhtbEFueVNpbXBsZVR5cGUKLXsKLSAgICAvKiogVGhlIGNvbnN0YW50IHtAbGluayBTY2hlbWFUeXBlfSBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlIHR5cGUgPSBYbWxCZWFucy5nZXRCdWlsdGluVHlwZVN5c3RlbSgpLnR5cGVGb3JIYW5kbGUoIl9CSV9RTmFtZSIpOwotICAgIAotICAgIC8qKiBSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSB7QGxpbmsgUU5hbWV9ICovCi0gICAgUU5hbWUgZ2V0UU5hbWVWYWx1ZSgpOwotICAgIC8qKiBTZXRzIHRoaXMgdmFsdWUgYXMgYSB7QGxpbmsgUU5hbWV9ICovCi0gICAgdm9pZCBzZXRRTmFtZVZhbHVlKFFOYW1lIG5hbWUpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIFFOYW1lfQotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNnZXRRTmFtZVZhbHVlfQotICAgICAqKi8KLSAgICBRTmFtZSBxTmFtZVZhbHVlKCk7Ci0gICAgLyoqCi0gICAgICogU2V0cyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIFFOYW1lfQotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNzZXRRTmFtZVZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIHNldChRTmFtZSBuYW1lKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gICAgICogb2Yge0BsaW5rIFhtbFFOYW1lfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEZhY3RvcnkKLSAgICB7Ci0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxRTmFtZX0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxRTmFtZSBuZXdJbnN0YW5jZSgpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFFOYW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxRTmFtZX0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxRTmFtZSBuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgewotICAgICAgICAgIHJldHVybiAoWG1sUU5hbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gaW1tdXRhYmxlIHtAbGluayBYbWxRTmFtZX0gdmFsdWUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxRTmFtZSBuZXdWYWx1ZShPYmplY3Qgb2JqKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxRTmFtZSkgdHlwZS5uZXdWYWx1ZSggb2JqICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sUU5hbWV9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCB4bWxuczp4PSJodHRwOi8vb3BlbnVyaS5vcmcvIiZndDt4OnNhbXBsZSZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFFOYW1lIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFFOYW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sUU5hbWV9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCB4bWxuczp4PSJodHRwOi8vb3BlbnVyaS5vcmcvIiZndDt4OnNhbXBsZSZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFFOYW1lIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxRTmFtZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFFOYW1lfSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxRTmFtZSBwYXJzZShqYXZhLmlvLkZpbGUgZikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFFOYW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sUU5hbWV9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFFOYW1lIHBhcnNlKGphdmEuaW8uRmlsZSBmLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFFOYW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sUU5hbWV9IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sUU5hbWUgcGFyc2UoamF2YS5uZXQuVVJMIHUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxRTmFtZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgbnVsbCApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxRTmFtZX0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxRTmFtZSBwYXJzZShqYXZhLm5ldC5VUkwgdSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxRTmFtZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxRTmFtZX0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxRTmFtZSBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sUU5hbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sUU5hbWV9IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sUU5hbWUgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxRTmFtZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxRTmFtZX0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxRTmFtZSBwYXJzZShqYXZhLmlvLlJlYWRlciByKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sUU5hbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxRTmFtZX0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxRTmFtZSBwYXJzZShqYXZhLmlvLlJlYWRlciByLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFFOYW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sUU5hbWV9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxRTmFtZSBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxRTmFtZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFFOYW1lfSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sUU5hbWUgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFFOYW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sUU5hbWV9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sUU5hbWUgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sUU5hbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFFOYW1lfSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFFOYW1lIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxRTmFtZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sUU5hbWV9IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFFOYW1lIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFFOYW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxRTmFtZX0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sUU5hbWUgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uewotICAgICAgICAgIHJldHVybiAoWG1sUU5hbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgRmFjdG9yeSgpIHsgfSAvLyBObyBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGFsbG93ZWQKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxSdW50aW1lRXhjZXB0aW9uLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUnVudGltZUV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWY1OGU2Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxSdW50aW1lRXhjZXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTAgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci0KLS8qKgotICogQW4gdW5jaGVja2VkIFhNTCBleGNlcHRpb24uCi0gKiBNYXkgY29udGFpbiBhbnkgbnVtYmVyIG9mIHtAbGluayBYbWxFcnJvcn0gb2JqZWN0cy4KLSAqIAotICogQHNlZSBYbWxFcnJvcgotICogQHNlZSBYbWxFeGNlcHRpb24KLSAqLyAKLXB1YmxpYyBjbGFzcyBYbWxSdW50aW1lRXhjZXB0aW9uIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbgotewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotICAgIAotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYW4gWG1sUnVudGltZUV4Y2VwdGlvbiBmcm9tIGEgbWVzc2FnZS4KLSAgICAgKi8gCi0gICAgcHVibGljIFhtbFJ1bnRpbWVFeGNlcHRpb24gKCBTdHJpbmcgbSAgICAgICAgICAgICAgKSB7IHN1cGVyKCBtICk7ICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGFuIFhtbFJ1bnRpbWVFeGNlcHRpb24gZnJvbSBhIG1lc3NhZ2UgYW5kIGEgY2F1c2UuCi0gICAgICovIAotICAgIHB1YmxpYyBYbWxSdW50aW1lRXhjZXB0aW9uICggU3RyaW5nIG0sIFRocm93YWJsZSB0ICkgeyBzdXBlciggbSwgdCApOyB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhbiBYbWxSdW50aW1lRXhjZXB0aW9uIGZyb20gYSBjYXVzZS4KLSAgICAgKi8gCi0gICAgcHVibGljIFhtbFJ1bnRpbWVFeGNlcHRpb24gKCBUaHJvd2FibGUgdCAgICAgICAgICAgKSB7IHN1cGVyKCB0ICk7ICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGFuIFhtbFJ1bnRpbWVFeGNlcHRpb24gZnJvbSBhIG1lc3NhZ2UsIGEgY2F1c2UsIGFuZCBhIGNvbGxlY3Rpb24gb2YgWG1sRXJyb3JzLgotICAgICAqLyAKLSAgICBwdWJsaWMgWG1sUnVudGltZUV4Y2VwdGlvbiAoIFN0cmluZyBtLCBUaHJvd2FibGUgdCwgQ29sbGVjdGlvbiBlcnJvcnMgKQotICAgIHsKLSAgICAgICAgc3VwZXIoIG0sIHQgKTsKLQotICAgICAgICBpZiAoZXJyb3JzICE9IG51bGwpCi0gICAgICAgICAgICBfZXJyb3JzID0gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdCggbmV3IEFycmF5TGlzdChlcnJvcnMpICk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhbiBYbWxSdW50aW1lRXhjZXB0aW9uIGZyb20gYW4gWG1sRXJyb3IuCi0gICAgICovIAotICAgIHB1YmxpYyBYbWxSdW50aW1lRXhjZXB0aW9uICggWG1sRXJyb3IgZXJyb3IgKQotICAgIHsKLSAgICAgICAgdGhpcyggZXJyb3IudG9TdHJpbmcoKSwgbnVsbCwgZXJyb3IgKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGFuIFhtbFJ1bnRpbWVFeGNlcHRpb24gZnJvbSBhIG1lc3NhZ2UsIGEgY2F1c2UsIGFuZCBhbiBYbWxFcnJvci4KLSAgICAgKi8gCi0gICAgcHVibGljIFhtbFJ1bnRpbWVFeGNlcHRpb24gKCBTdHJpbmcgbSwgVGhyb3dhYmxlIHQsIFhtbEVycm9yIGVycm9yICkKLSAgICB7Ci0gICAgICAgIHRoaXMoIG0sIHQsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoIGVycm9yICkgKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0cyBhbiBYbWxSdW50aW1lRXhjZXB0aW9uIGZyb20gYW4ge0BsaW5rIFhtbEV4Y2VwdGlvbn0uCi0gICAgICovIAotICAgIHB1YmxpYyBYbWxSdW50aW1lRXhjZXB0aW9uICggWG1sRXhjZXB0aW9uIHhtbEV4Y2VwdGlvbiApCi0gICAgewotICAgICAgICBzdXBlciggeG1sRXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgeG1sRXhjZXB0aW9uLmdldENhdXNlKCkgKTsKLQotICAgICAgICBDb2xsZWN0aW9uIGVycm9ycyA9IHhtbEV4Y2VwdGlvbi5nZXRFcnJvcnMoKTsKLQotICAgICAgICBpZiAoZXJyb3JzICE9IG51bGwpCi0gICAgICAgICAgICBfZXJyb3JzID0gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdCggbmV3IEFycmF5TGlzdCggZXJyb3JzICkgKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgZmlyc3Qge0BsaW5rIFhtbEVycm9yfSB0aGF0IGNhdXNlZCB0aGlzIGV4Y2VwdGlvbiwgaWYgYW55LgotICAgICAqLyAKLSAgICBwdWJsaWMgWG1sRXJyb3IgZ2V0RXJyb3IgKCApCi0gICAgewotICAgICAgICBpZiAoX2Vycm9ycyA9PSBudWxsIHx8IF9lcnJvcnMuc2l6ZSgpID09IDApCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICByZXR1cm4gKFhtbEVycm9yKSBfZXJyb3JzLmdldCggMCApOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHtAbGluayBYbWxFcnJvciBYbWxFcnJvcnN9IHRoYXQgY2F1c2VkIHRoaXMgZXhjZXB0aW9uLCBpZiBhbnkuCi0gICAgICovIAotICAgIHB1YmxpYyBDb2xsZWN0aW9uIGdldEVycm9ycyAoICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfZXJyb3JzOwotICAgIH0KLQotICAgIHByaXZhdGUgTGlzdCBfZXJyb3JzOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTYXhIYW5kbGVyLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2F4SGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGJkZjI5Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTYXhIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCBvcmcueG1sLnNheC5Db250ZW50SGFuZGxlcjsKLWltcG9ydCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXI7Ci0KLS8qKgotICogQSBob2xkZXIgZm9yIGEgU0FYIHtAbGluayBDb250ZW50SGFuZGxlcn0gYW5kIHtAbGluayBMZXhpY2FsSGFuZGxlcn0gdGhhdCBhcmUKLSAqIGNhcGFibGUgb2YgbG9hZGluZyBhbiB7QGxpbmsgWG1sT2JqZWN0fSBpbnN0YW5jZS4gIE9uY2UgYWxsIHRoZSBTQVggZXZlbnRzIGFyZSBwdXNoZWQKLSAqIHRvIHRoZSBoYW5kbGVycywgY2FsbCB7QGxpbmsgI2dldE9iamVjdCgpfSB0byBnZXQgdGhlIGxvYWRlZCBYbWxPYmplY3QuCi0gKiAKLSAqIEBzZWUgWG1sT2JqZWN0LkZhY3RvcnkjbmV3WG1sU2F4SGFuZGxlcgotICogQHNlZSBTY2hlbWFUeXBlTG9hZGVyI25ld1htbFNheEhhbmRsZXIKLSAqLwotcHVibGljIGludGVyZmFjZSBYbWxTYXhIYW5kbGVyCi17Ci0gICAgLyoqCi0gICAgICogVGhlIENvbnRlbnRIYW5kbGVyIGV4cGVjdGluZyBTQVggY29udGVudCBldmVudHMuCi0gICAgICogQHNlZSBDb250ZW50SGFuZGxlcgotICAgICAqLyAKLSAgICBDb250ZW50SGFuZGxlciBnZXRDb250ZW50SGFuZGxlciAoICk7Ci0gICAgLyoqCi0gICAgICogVGhlIExleGljYWxIYW5kbGVyIGV4cGVjdGluZyBTQVggbGV4aWNhbCBldmVudHMuCi0gICAgICogQHNlZSBMZXhpY2FsSGFuZGxlcgotICAgICAqLyAKLSAgICBMZXhpY2FsSGFuZGxlciBnZXRMZXhpY2FsSGFuZGxlciAoICk7Ci0gICAgCi0gICAgLyoqIFJldHVybnMgdGhlIGxvYWRlZCBYbWxPYmplY3QgYWZ0ZXIgYWxsIHRoZSBTQVggZXZlbnRzIGhhdmUgYmVlbiBmaW5pc2hlZCAqLwotICAgIFhtbE9iamVjdCBnZXRPYmplY3QgKCApIHRocm93cyBYbWxFeGNlcHRpb247Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYyZjc0Zi4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKLQotCi0vKioKLSAqIENvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gKiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Nob3J0Ij54czpzaG9ydDwvYT4gdHlwZS4KLSAqIE9uZSBvZiB0aGUgZGVyaXZlZCB0eXBlcyBiYXNlZCBvbiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2RlY2ltYWwiPnhzOmRlY2ltYWw8L2E+LgotICogPHA+Ci0gKiBOYXR1cmFsbHksIGNvbnZlcnRpYmxlIHRvIGEgSmF2YSBzaG9ydC4KLSAqLyAKLXB1YmxpYyBpbnRlcmZhY2UgWG1sU2hvcnQgZXh0ZW5kcyBYbWxJbnQKLXsKLSAgICAvKiogVGhlIGNvbnN0YW50IHtAbGluayBTY2hlbWFUeXBlfSBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlIHR5cGUgPSBYbWxCZWFucy5nZXRCdWlsdGluVHlwZVN5c3RlbSgpLnR5cGVGb3JIYW5kbGUoIl9CSV9zaG9ydCIpOwotICAgIAotICAgIC8qKiBSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSBzaG9ydCAqLwotICAgIHB1YmxpYyBzaG9ydCBnZXRTaG9ydFZhbHVlKCk7Ci0gICAgLyoqIFNldHMgdGhpcyB2YWx1ZSBhcyBhIHNob3J0ICovCi0gICAgcHVibGljIHZvaWQgc2V0U2hvcnRWYWx1ZShzaG9ydCBzKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIHNob3J0Ci0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI2dldFNob3J0VmFsdWV9Ci0gICAgICoqLwotICAgIHB1YmxpYyBzaG9ydCBzaG9ydFZhbHVlKCk7Ci0gICAgLyoqCi0gICAgICogU2V0cyB0aGlzIHZhbHVlIGFzIGEgc2hvcnQKLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjc2V0U2hvcnRWYWx1ZX0KLSAgICAgKiovCi0gICAgcHVibGljIHZvaWQgc2V0KHNob3J0IHMpOwotCi0gICAgLyoqCi0gICAgICogQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotICAgICAqIG9mIHtAbGluayBYbWxTaG9ydH0uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBGYWN0b3J5Ci0gICAgewotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sU2hvcnR9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sU2hvcnQgbmV3SW5zdGFuY2UoKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxTaG9ydCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sU2hvcnR9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sU2hvcnQgbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFNob3J0KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGltbXV0YWJsZSB7QGxpbmsgWG1sU2hvcnR9IHZhbHVlICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sU2hvcnQgbmV3VmFsdWUoT2JqZWN0IG9iaikgewotICAgICAgICAgIHJldHVybiAoWG1sU2hvcnQpIHR5cGUubmV3VmFsdWUoIG9iaiApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFNob3J0fSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7MTIzNDUmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxTaG9ydCBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxTaG9ydCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFNob3J0fSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7MTIzNDUmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxTaG9ydCBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sU2hvcnQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxTaG9ydH0gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sU2hvcnQgcGFyc2UoamF2YS5pby5GaWxlIGYpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxTaG9ydCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFNob3J0fSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxTaG9ydCBwYXJzZShqYXZhLmlvLkZpbGUgZiwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxTaG9ydCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFNob3J0fSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFNob3J0IHBhcnNlKGphdmEubmV0LlVSTCB1KSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sU2hvcnQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG51bGwgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sU2hvcnR9IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sU2hvcnQgcGFyc2UoamF2YS5uZXQuVVJMIHUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sU2hvcnQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG9wdGlvbnMgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sU2hvcnR9IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sU2hvcnQgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFNob3J0KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFNob3J0fSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFNob3J0IHBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0gaXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sU2hvcnQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sU2hvcnR9IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sU2hvcnQgcGFyc2UoamF2YS5pby5SZWFkZXIgcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFNob3J0KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sU2hvcnR9IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sU2hvcnQgcGFyc2UoamF2YS5pby5SZWFkZXIgciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxTaG9ydCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFNob3J0fSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sU2hvcnQgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sU2hvcnQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxTaG9ydH0gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFNob3J0IHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxTaG9ydCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFNob3J0fSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFNob3J0IHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFNob3J0KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxTaG9ydH0gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxTaG9ydCBwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sU2hvcnQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFNob3J0fSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxTaG9ydCBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxTaG9ydCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sU2hvcnR9IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFNob3J0IHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbnsKLSAgICAgICAgICByZXR1cm4gKFhtbFNob3J0KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIEZhY3RvcnkoKSB7IH0gLy8gTm8gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBhbGxvd2VkCi0gICAgfQotfQotCmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2QyNTZkNC4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjI5ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdEl0ZXJhdG9yOwotCi0vKioKLSAqIFRoZSBpbW11dGFibGUge0BsaW5rIExpc3R9IHJldHVybmVkIGZvciBYTUwgc2ltcGxlIGxpc3QgdmFsdWVzLgotICogCi0gKiBYbWxTaW1wbGVMaXN0IGltcGxlbWVudHMgYW4gZXF1YWxzKCkgYW5kIGhhc2hDb2RlKCkgdGhhdCBjb21wYXJlIGxpc3QKLSAqIGNvbnRlbnRzLCBzbyB0d28gWG1sU2ltcGxlTGlzdHMgYXJlIHRoZSBzYW1lIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZQotICogdmFsdWVzIGluIHRoZSBzYW1lIG9yZGVyLgotICovIAotcHVibGljIGNsYXNzIFhtbFNpbXBsZUxpc3QgaW1wbGVtZW50cyBMaXN0LCBqYXZhLmlvLlNlcmlhbGl6YWJsZQotewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotICAgIAotCXByaXZhdGUgTGlzdCB1bmRlcmx5aW5nOwotICAgIAotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYW4gaW1tdXRhYmxlIFhtbFNpbXBsZUxpc3QgdGhhdCB3cmFwcyAoZG9lcyBub3QgY29weSkKLSAgICAgKiB0aGUgZ2l2ZW4ge0BsaW5rIExpc3R9LiAgQWxsIG5vbi1tdXRhdGluZyBtZXRob2RzIGRlbGVnYXRlIHRvCi0gICAgICogdGhlIHVuZGVybHlpbmcgTGlzdCBpbnN0YW5jZS4KLSAgICAgKi8gCi0JcHVibGljIFhtbFNpbXBsZUxpc3QoTGlzdCBsaXN0KSAgICAgeyB0aGlzLnVuZGVybHlpbmcgPSBsaXN0OyB9Ci0gICAgCi0gICAgLyoqIFJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGlzIGxpc3QuICovCi0gICAgcHVibGljIGludCBzaXplKCkgCQkgICAgICAgICAgICB7IHJldHVybiB1bmRlcmx5aW5nLnNpemUoKTsgfQotICAgIC8qKiBUcnVlIGlmIHRoZSBsaXN0IGlzIGVtcHR5LiAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzRW1wdHkoKSAJICAgICAgICB7IHJldHVybiB1bmRlcmx5aW5nLmlzRW1wdHkoKTsgfQotICAgIC8qKiBUcnVlIGlmIHRoZSBsaXN0IGlzIGNvbnRhaW5zIGFuIG9iamVjdCBlcXVhbCB0byBvLiAqLwotICAgIHB1YmxpYyBib29sZWFuIGNvbnRhaW5zKE9iamVjdCBvKSAgIHsgcmV0dXJuIHVuZGVybHlpbmcuY29udGFpbnMobyk7IH0KLSAgICAvKiogVHJ1ZSBpZiB0aGUgbGlzdCBpcyBjb250YWlucyBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGdpdmVuIGNvbGxlY3Rpb24uICovCi0gICAgcHVibGljIGJvb2xlYW4gY29udGFpbnNBbGwoQ29sbGVjdGlvbiBjb2xsKSB7IHJldHVybiB1bmRlcmx5aW5nLmNvbnRhaW5zQWxsKGNvbGwpOyB9Ci0gICAgLyoqIENvcGllcyB0aGUgY29sbGVjdGlvbiB0byBhbiBhcnJheS4gKi8KLSAgICBwdWJsaWMgT2JqZWN0W10gdG9BcnJheSgpIAkgICAgICAgIHsgcmV0dXJuIHVuZGVybHlpbmcudG9BcnJheSgpOyB9Ci0gICAgLyoqIENvcGllcyB0aGUgY29sbGVjdGlvbiB0byBhbiBhcnJheSBvZiBhIHNwZWNpZmllZCB0eXBlLiAqLwotICAgIHB1YmxpYyBPYmplY3RbXSB0b0FycmF5KE9iamVjdFtdIGEpIHsgcmV0dXJuIHVuZGVybHlpbmcudG9BcnJheShhKTsgfQotICAgIAotICAgIC8qKiBVbnN1cHBvcnRlZCBiZWNhdXNlIHRoaXMgbGlzdCBpcyBpbW11dGFibGUuICovCi0gICAgcHVibGljIGJvb2xlYW4gYWRkKE9iamVjdCBvKSAgICAgICAgeyB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsgfQotICAgIC8qKiBVbnN1cHBvcnRlZCBiZWNhdXNlIHRoaXMgbGlzdCBpcyBpbW11dGFibGUuICovCi0gICAgcHVibGljIGJvb2xlYW4gYWRkQWxsKENvbGxlY3Rpb24gY29sbCkgeyB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsgfQotICAgIC8qKiBVbnN1cHBvcnRlZCBiZWNhdXNlIHRoaXMgbGlzdCBpcyBpbW11dGFibGUuICovCi0gICAgcHVibGljIGJvb2xlYW4gcmVtb3ZlKE9iamVjdCBvKSAgICAgeyB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsgfQotICAgIC8qKiBVbnN1cHBvcnRlZCBiZWNhdXNlIHRoaXMgbGlzdCBpcyBpbW11dGFibGUuICovCi0gICAgcHVibGljIGJvb2xlYW4gcmVtb3ZlQWxsKENvbGxlY3Rpb24gY29sbCkgeyB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsgfQotICAgIC8qKiBVbnN1cHBvcnRlZCBiZWNhdXNlIHRoaXMgbGlzdCBpcyBpbW11dGFibGUuICovCi0gICAgcHVibGljIGJvb2xlYW4gcmV0YWluQWxsKENvbGxlY3Rpb24gY29sbCkgeyB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsgfQotICAgIC8qKiBVbnN1cHBvcnRlZCBiZWNhdXNlIHRoaXMgbGlzdCBpcyBpbW11dGFibGUuICovCi0gICAgcHVibGljIHZvaWQgY2xlYXIoKSAgICAgICAgICAgICAgICAgeyB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsgfQotCi0gICAgLyoqIFJldHVybnMgdGhlIG9iamVjdCBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uIGluIHRoaXMgbGlzdC4gKi8KLSAgICBwdWJsaWMgT2JqZWN0IGdldChpbnQgaW5kZXgpICAgICAgICB7IHJldHVybiB1bmRlcmx5aW5nLmdldChpbmRleCk7IH0KLSAgICAvKiogVW5zdXBwb3J0ZWQgYmVjYXVzZSB0aGlzIGxpc3QgaXMgaW1tdXRhYmxlLiAqLwotICAgIHB1YmxpYyBPYmplY3Qgc2V0KGludCBpbmRleCwgT2JqZWN0IGVsZW1lbnQpIHsgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7IH0KLSAgICAvKiogVW5zdXBwb3J0ZWQgYmVjYXVzZSB0aGlzIGxpc3QgaXMgaW1tdXRhYmxlLiAqLwotICAgIHB1YmxpYyB2b2lkIGFkZChpbnQgaW5kZXgsIE9iamVjdCBlbGVtZW50KSB7IHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOyB9Ci0gICAgLyoqIFVuc3VwcG9ydGVkIGJlY2F1c2UgdGhpcyBsaXN0IGlzIGltbXV0YWJsZS4gKi8KLSAgICBwdWJsaWMgT2JqZWN0IHJlbW92ZShpbnQgaW5kZXgpICAgICB7IHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOyB9Ci0gICAgLyoqIFJldHVybnMgaW5kZXggb2YgdGhlIGZpcnN0IG9jY3VyYW5jZSBvZiBhbiBvYmplY3QgZXF1YWwgdG8gby4gKi8KLSAgICBwdWJsaWMgaW50IGluZGV4T2YoT2JqZWN0IG8pICAgICAgICB7IHJldHVybiB1bmRlcmx5aW5nLmluZGV4T2Yobyk7IH0KLSAgICAvKiogUmV0dXJucyBpbmRleCBvZiB0aGUgbGFzdCBvY2N1cmFuY2Ugb2YgYW4gb2JqZWN0IGVxdWFsIHRvIG8uICovCi0gICAgcHVibGljIGludCBsYXN0SW5kZXhPZihPYmplY3QgbykgICAgeyByZXR1cm4gdW5kZXJseWluZy5sYXN0SW5kZXhPZihvKTsgfQotICAgIC8qKiBVbnN1cHBvcnRlZCBiZWNhdXNlIHRoaXMgbGlzdCBpcyBpbW11dGFibGUuICovCi0gICAgcHVibGljIGJvb2xlYW4gYWRkQWxsKGludCBpbmRleCwgQ29sbGVjdGlvbiBjKSB7IHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOyB9Ci0gICAgLyoqIFJldHVybnMgYSB2aWV3IG9mIHRoZSBwb3J0aW9uIG9mIHRoaXMgbGlzdCBiZXR3ZWVuIHRoZSBzcGVjaWZpZWQgZnJvbUluZGV4LCBpbmNsdXNpdmUsIGFuZCB0b0luZGV4LCBleGNsdXNpdmUuICovCi0gICAgcHVibGljIExpc3Qgc3ViTGlzdChpbnQgZnJvbSwgaW50IHRvKSB7IHJldHVybiBuZXcgWG1sU2ltcGxlTGlzdCh1bmRlcmx5aW5nLnN1Ykxpc3QoZnJvbSwgdG8pKTsgfQotCi0gICAgLyoqIFJldHVybnMgYW4gaXRlcmF0b3Igb3ZlciB0aGUgZWxlbWVudHMgaW4gdGhpcyBsaXN0IGluIHByb3BlciBzZXF1ZW5jZS4gKi8KLSAgICBwdWJsaWMgSXRlcmF0b3IgaXRlcmF0b3IoKQotICAgIHsgCi0gICAgICAgIHJldHVybiBuZXcgSXRlcmF0b3IoKQotICAgICAgICB7IAotICAgICAgICAgICAgSXRlcmF0b3IgaSA9IHVuZGVybHlpbmcuaXRlcmF0b3IoKTsKLSAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGhhc05leHQoKSAgICB7IHJldHVybiBpLmhhc05leHQoKTsgfQotICAgICAgICAgICAgcHVibGljIE9iamVjdCBuZXh0KCkgCSAgICB7IHJldHVybiBpLm5leHQoKTsgfQotICAgICAgICAgICAgcHVibGljIHZvaWQgcmVtb3ZlKCkgICAgICAgIHsgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7IH0KLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICAvKiogUmV0dXJucyBhIGxpc3QgaXRlcmF0b3Igb2YgdGhlIGVsZW1lbnRzIGluIHRoaXMgbGlzdCBpbiBwcm9wZXIgc2VxdWVuY2UuICovCi0gICAgcHVibGljIExpc3RJdGVyYXRvciBsaXN0SXRlcmF0b3IoKSAJeyByZXR1cm4gbGlzdEl0ZXJhdG9yKDApOyB9Ci0gICAgLyoqIFJldHVybnMgYSBsaXN0IGl0ZXJhdG9yIG9mIHRoZSBlbGVtZW50cyBpbiB0aGlzIGxpc3QgaW4gcHJvcGVyIHNlcXVlbmNlLCBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uIGluIHRoaXMgbGlzdC4gKi8KLSAgICBwdWJsaWMgTGlzdEl0ZXJhdG9yIGxpc3RJdGVyYXRvcihmaW5hbCBpbnQgaW5kZXgpCi0gICAgeyAKLSAgICAgICAgcmV0dXJuIG5ldyBMaXN0SXRlcmF0b3IoKQotICAgICAgICB7IAotICAgICAgICAgICAgTGlzdEl0ZXJhdG9yIGkgPSB1bmRlcmx5aW5nLmxpc3RJdGVyYXRvcihpbmRleCk7Ci0gICAgCi0gICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBoYXNOZXh0KCkgICAgeyByZXR1cm4gaS5oYXNOZXh0KCk7IH0KLSAgICAgICAgICAgIHB1YmxpYyBPYmplY3QgbmV4dCgpICAgICAgICB7IHJldHVybiBpLm5leHQoKTsgfQotICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gaGFzUHJldmlvdXMoKXsgcmV0dXJuIGkuaGFzUHJldmlvdXMoKTsgfQotICAgICAgICAgICAgcHVibGljIE9iamVjdCBwcmV2aW91cygpICAgIHsgcmV0dXJuIGkucHJldmlvdXMoKTsgfQotICAgICAgICAgICAgcHVibGljIGludCBuZXh0SW5kZXgoKSAgICAgIHsgcmV0dXJuIGkubmV4dEluZGV4KCk7IH0KLSAgICAgICAgICAgIHB1YmxpYyBpbnQgcHJldmlvdXNJbmRleCgpICB7IHJldHVybiBpLnByZXZpb3VzSW5kZXgoKTsgfQotICAgIAotICAgICAgICAgICAgcHVibGljIHZvaWQgcmVtb3ZlKCkgICAgICAgIHsgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCk7IH0KLSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHNldChPYmplY3QgbykgICB7IHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOyB9Ci0gICAgICAgICAgICBwdWJsaWMgdm9pZCBhZGQoT2JqZWN0IG8pICAgeyB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsgfQotICAgICAgICB9OwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIFN0cmluZyBzdHJpbmdWYWx1ZShPYmplY3QgbykKLSAgICB7Ci0gICAgICAgIGlmIChvIGluc3RhbmNlb2YgU2ltcGxlVmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gKChTaW1wbGVWYWx1ZSlvKS5zdHJpbmdWYWx1ZSgpOwotICAgICAgICByZXR1cm4gby50b1N0cmluZygpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbnMgb2YgYWxsCi0gICAgICogdGhlIGl0ZW1zIGluIHRoZSBsaXN0LiAgRm9yIG1vc3QgbGlzdHMsIHRoaXMgaXMgYSB2YWxpZCB4bWwgbGV4aWNhbAotICAgICAqIHZhbHVlIGZvciB0aGUgbGlzdC4gKFRoZSBub3RhYmxlIGV4Y2VwdGlvbiBpcyBhIGxpc3Qgb2YgUU5hbWVzLikKLSAgICAgKi8gCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCi0gICAgewotICAgICAgICBpbnQgc2l6ZSA9IHVuZGVybHlpbmcuc2l6ZSgpOwotICAgICAgICBpZiAoc2l6ZSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuICIiOwotICAgICAgICBTdHJpbmcgZmlyc3QgPSBzdHJpbmdWYWx1ZSh1bmRlcmx5aW5nLmdldCgwKSk7Ci0gICAgICAgIGlmIChzaXplID09IDEpCi0gICAgICAgICAgICByZXR1cm4gZmlyc3Q7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciByZXN1bHQgPSBuZXcgU3RyaW5nQnVmZmVyKGZpcnN0KTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBzaXplOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoc3RyaW5nVmFsdWUodW5kZXJseWluZy5nZXQoaSkpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIFR3byBYbWxTaW1wbGVMaXN0cyBhcmUgZXF1YWwgaWYgYWxsIHRoZWlyIGl0ZW1zIGFyZSBlcXVhbC4KLSAgICAgKiAoVGhleSBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGl0ZW1zLCBhbmQgdGhlIGl0ZW1zIG11c3QgYmUgaW4KLSAgICAgKiB0aGUgc2FtZSBvcmRlci4pCi0gICAgICovIAotICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykKLSAgICB7IAotICAgICAgICBpZiAodGhpcyA9PSBvKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCEobyBpbnN0YW5jZW9mIFhtbFNpbXBsZUxpc3QpKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGZpbmFsIFhtbFNpbXBsZUxpc3QgeG1sU2ltcGxlTGlzdCA9IChYbWxTaW1wbGVMaXN0KW87Ci0gICAgICAgIExpc3QgdW5kZXJseWluZzIgPSB4bWxTaW1wbGVMaXN0LnVuZGVybHlpbmc7Ci0gICAgICAgIGludCBzaXplID0gdW5kZXJseWluZy5zaXplKCk7Ci0gICAgICAgIGlmIChzaXplICE9IHVuZGVybHlpbmcyLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgICAgIHsgCi0gICAgICAgICAgICBPYmplY3QgaXRlbSA9IHVuZGVybHlpbmcuZ2V0KGkpOwotICAgICAgICAgICAgT2JqZWN0IGl0ZW0yID0gdW5kZXJseWluZzIuZ2V0KGkpOwotICAgICAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCA/IGl0ZW0yICE9IG51bGwgOiAhaXRlbS5lcXVhbHMoaXRlbTIpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ29tYmluZXMgdGhlIGhhc2ggY29kZXMgb2YgYWxsIHRoZSBsaXN0IGl0ZW1zLgotICAgICAqLyAKLSAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkKLSAgICB7IAotICAgICAgICBpbnQgc2l6ZSA9IHVuZGVybHlpbmcuc2l6ZSgpOwotICAgICAgICBpbnQgaGFzaCA9IDA7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICB7IAotICAgICAgICAgICAgT2JqZWN0IGl0ZW0gPSB1bmRlcmx5aW5nLmdldChpKTsKLSAgICAgICAgICAgIGhhc2ggKj0gMTk7Ci0gICAgICAgICAgICBoYXNoICs9IGl0ZW0uaGFzaENvZGUoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gaGFzaDsKLSAgICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzQ3ZGVlLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKLQotCi0vKioKLSAqIENvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gKiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3N0cmluZyI+eHM6c3RyaW5nPC9hPiB0eXBlLgotICogPHA+Ci0gKiBBIGJhc2ljIHN0cmluZyBpbiBYTUwgc2NoZW1hIGlzIG5vdCB3aGl0ZXNwYWNlIG5vcm1hbGl6ZWQuICBJZiB5b3UKLSAqIHdhbnQgeW91ciBzdHJpbmcgdHlwZSB0byBiZSBpbnNlbnNpdGl2ZSB0byB2YXJpYXRpb25zIGluIHJ1bnMgb2YKLSAqIHdoaXRlc3BhY2UsIGNvbnNpZGVyIHVzaW5nIAotICogPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyN0b2tlbiI+eHM6dG9rZW48L2E+Ci0gKiAoYWthIHtAbGluayBYbWxUb2tlbn0pIGluc3RlYWQuCi0gKiBUbyBmb3JiaWQgd2hpdGVzcGFjZSBhbmQgcGVybWl0IGp1c3QgYWxwaGFudW1lcmljIGFuZCBvdGhlcgotICogY29tbW9uIGlkZW50aWZpZXIgY2hhcmFjdGVycyBjb25zaWRlcgotICogPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNOTVRPS0VOIj54czpOTVRPS0VOPC9hPgotICogKGFrYSB7QGxpbmsgWG1sTk1UT0tFTn0pIGluc3RlYWQuCi0gKiA8cD4KLSAqIENvbnZlcnRpYmxlIHRvIHtAbGluayBTdHJpbmd9LgotICovIAotcHVibGljIGludGVyZmFjZSBYbWxTdHJpbmcgZXh0ZW5kcyBYbWxBbnlTaW1wbGVUeXBlCi17Ci0gICAgLyoqIFRoZSBjb25zdGFudCB7QGxpbmsgU2NoZW1hVHlwZX0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZSB0eXBlID0gWG1sQmVhbnMuZ2V0QnVpbHRpblR5cGVTeXN0ZW0oKS50eXBlRm9ySGFuZGxlKCJfQklfc3RyaW5nIik7Ci0gICAgCi0gICAgLyoqCi0gICAgICogQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotICAgICAqIG9mIHtAbGluayBYbWxTdHJpbmd9LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgRmFjdG9yeQotICAgIHsKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbFN0cmluZ30gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxTdHJpbmcgbmV3SW5zdGFuY2UoKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxTdHJpbmcpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbFN0cmluZ30gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxTdHJpbmcgbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFN0cmluZykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBpbW11dGFibGUge0BsaW5rIFhtbFN0cmluZ30gdmFsdWUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxTdHJpbmcgbmV3VmFsdWUoT2JqZWN0IG9iaikgewotICAgICAgICAgIHJldHVybiAoWG1sU3RyaW5nKSB0eXBlLm5ld1ZhbHVlKCBvYmogKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxTdHJpbmd9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsgYXJiaXRyYXJ5IHN0cmluZyAmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxTdHJpbmcgcGFyc2UoamF2YS5sYW5nLlN0cmluZyBzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sU3RyaW5nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sU3RyaW5nfSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7IGFyYml0cmFyeSBzdHJpbmcgJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sU3RyaW5nIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxTdHJpbmcpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxTdHJpbmd9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFN0cmluZyBwYXJzZShqYXZhLmlvLkZpbGUgZikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFN0cmluZykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFN0cmluZ30gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sU3RyaW5nIHBhcnNlKGphdmEuaW8uRmlsZSBmLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFN0cmluZykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFN0cmluZ30gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxTdHJpbmcgcGFyc2UoamF2YS5uZXQuVVJMIHUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxTdHJpbmcpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG51bGwgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sU3RyaW5nfSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFN0cmluZyBwYXJzZShqYXZhLm5ldC5VUkwgdSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxTdHJpbmcpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG9wdGlvbnMgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sU3RyaW5nfSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFN0cmluZyBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sU3RyaW5nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFN0cmluZ30gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxTdHJpbmcgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxTdHJpbmcpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sU3RyaW5nfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFN0cmluZyBwYXJzZShqYXZhLmlvLlJlYWRlciByKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sU3RyaW5nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sU3RyaW5nfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFN0cmluZyBwYXJzZShqYXZhLmlvLlJlYWRlciByLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFN0cmluZykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFN0cmluZ30gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFN0cmluZyBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxTdHJpbmcpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxTdHJpbmd9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxTdHJpbmcgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFN0cmluZykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFN0cmluZ30gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxTdHJpbmcgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sU3RyaW5nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxTdHJpbmd9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sU3RyaW5nIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxTdHJpbmcpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFN0cmluZ30gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sU3RyaW5nIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFN0cmluZykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sU3RyaW5nfSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxTdHJpbmcgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uewotICAgICAgICAgIHJldHVybiAoWG1sU3RyaW5nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIEZhY3RvcnkoKSB7IH0gLy8gTm8gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBhbGxvd2VkCi0gICAgfQotfQotCmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y0YmQ3NC4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjA0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOwotCi0KLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci0KLQotLyoqCi0gKiBDb3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotICogPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyN0aW1lIj54czp0aW1lPC9hPiB0eXBlLgotICogQSBnRGF5IHNwZWNpZmllcyBvbmx5IGEgZGF5LW9mLW1vbnRoLgotICogPHA+Ci0gKiBDb252ZXJ0aWJsZSB0byB7QGxpbmsgQ2FsZW5kYXJ9IG9yIHtAbGluayBHRGF0ZX0uCi0gKiAKLSAqIEBzZWUgWG1sQ2FsZW5kYXIKLSAqIEBzZWUgR0RhdGUKLSAqLyAKLXB1YmxpYyBpbnRlcmZhY2UgWG1sVGltZSBleHRlbmRzIFhtbEFueVNpbXBsZVR5cGUKLXsKLSAgICAvKiogVGhlIGNvbnN0YW50IHtAbGluayBTY2hlbWFUeXBlfSBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTY2hlbWFUeXBlIHR5cGUgPSBYbWxCZWFucy5nZXRCdWlsdGluVHlwZVN5c3RlbSgpLnR5cGVGb3JIYW5kbGUoIl9CSV90aW1lIik7Ci0gICAgCi0gICAgLyoqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBDYWxlbmRhcn0gKi8KLSAgICBDYWxlbmRhciBnZXRDYWxlbmRhclZhbHVlKCk7Ci0gICAgLyoqIFNldHMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBDYWxlbmRhcn0gKi8KLSAgICB2b2lkIHNldENhbGVuZGFyVmFsdWUoQ2FsZW5kYXIgYyk7Ci0gICAgLyoqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBHRGF0ZX0gKi8KLSAgICBHRGF0ZSBnZXRHRGF0ZVZhbHVlKCk7Ci0gICAgLyoqIFNldHMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBHRGF0ZVNwZWNpZmljYXRpb259ICovCi0gICAgdm9pZCBzZXRHRGF0ZVZhbHVlKEdEYXRlIGdkKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBDYWxlbmRhcn0KLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjZ2V0Q2FsZW5kYXJWYWx1ZX0KLSAgICAgKiovCi0gICAgQ2FsZW5kYXIgY2FsZW5kYXJWYWx1ZSgpOwotICAgIC8qKgotICAgICAqIFNldHMgdGhpcyB2YWx1ZSBhcyBhIHtAbGluayBDYWxlbmRhcn0KLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjc2V0Q2FsZW5kYXJWYWx1ZX0KLSAgICAgKiovCi0gICAgdm9pZCBzZXQoQ2FsZW5kYXIgYyk7Ci0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIEdEYXRlfQotICAgICAqIEBkZXByZWNhdGVkIHJlcGxhY2VkIHdpdGgge0BsaW5rICNnZXRHRGF0ZVZhbHVlfQotICAgICAqKi8KLSAgICBHRGF0ZSBnRGF0ZVZhbHVlKCk7Ci0gICAgLyoqCi0gICAgICogU2V0cyB0aGlzIHZhbHVlIGFzIGEge0BsaW5rIEdEYXRlU3BlY2lmaWNhdGlvbn0KLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjc2V0R0RhdGVWYWx1ZX0KLSAgICAgKiovCi0gICAgdm9pZCBzZXQoR0RhdGVTcGVjaWZpY2F0aW9uIGdkKTsKLQotCi0gICAgLyoqCi0gICAgICogQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotICAgICAqIG9mIHtAbGluayBYbWxUaW1lfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEZhY3RvcnkKLSAgICB7Ci0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxUaW1lfSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFRpbWUgbmV3SW5zdGFuY2UoKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxUaW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxUaW1lfSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFRpbWUgbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFRpbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gaW1tdXRhYmxlIHtAbGluayBYbWxUaW1lfSB2YWx1ZSAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFRpbWUgbmV3VmFsdWUoT2JqZWN0IG9iaikgewotICAgICAgICAgIHJldHVybiAoWG1sVGltZSkgdHlwZS5uZXdWYWx1ZSggb2JqICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVGltZX0gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzEyOjAwOjAwJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVGltZSBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxUaW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVGltZX0gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzEyOjAwOjAwJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVGltZSBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVGltZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFRpbWV9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFRpbWUgcGFyc2UoamF2YS5pby5GaWxlIGYpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxUaW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVGltZX0gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVGltZSBwYXJzZShqYXZhLmlvLkZpbGUgZiwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxUaW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBmLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVGltZX0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxUaW1lIHBhcnNlKGphdmEubmV0LlVSTCB1KSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVGltZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgbnVsbCApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxUaW1lfSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFRpbWUgcGFyc2UoamF2YS5uZXQuVVJMIHUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVGltZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggdSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0KLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxUaW1lfSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFRpbWUgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFRpbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVGltZX0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxUaW1lIHBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0gaXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVGltZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxUaW1lfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFRpbWUgcGFyc2UoamF2YS5pby5SZWFkZXIgcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFRpbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxUaW1lfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFRpbWUgcGFyc2UoamF2YS5pby5SZWFkZXIgciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxUaW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVGltZX0gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFRpbWUgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVGltZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFRpbWV9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxUaW1lIHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxUaW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVGltZX0gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxUaW1lIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFRpbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFRpbWV9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVGltZSBwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVGltZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVGltZX0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVGltZSBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxUaW1lKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxUaW1lfSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxUaW1lIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbnsKLSAgICAgICAgICByZXR1cm4gKFhtbFRpbWUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSggeGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgRmFjdG9yeSgpIHsgfSAvLyBObyBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGFsbG93ZWQKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0Y2FkZTcuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7Ci0KLQotLyoqCi0gKiBDb3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotICogPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyN0b2tlbiI+eHM6dG9rZW48L2E+IHR5cGUuCi0gKiBPbmUgb2YgdGhlIGRlcml2ZWQgdHlwZXMgYmFzZWQgb24gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNzdHJpbmciPnhzOnN0cmluZzwvYT4uCi0gKiA8cD4KLSAqIEEgdG9rZW4gaXMgWE1MJ3MgYmVzdCByZXByZXNlbnRhdGlvbiBmb3IgYSAid2hpdGVzcGFjZSBpbnNlbnNpdGl2ZSBzdHJpbmcuIgotICogQWxsIGNhcnJpYWdlIHJldHVybnMsIGxpbmVmZWVkcywgYW5kIHRhYnMgYXJlIGNvbnZlcnRlZCB0byBvcmRpbmFyeSBzcGFjZQotICogY2hhcmFjdGVycyAoYXMgd2l0aCA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI25vcm1hbGl6ZWRTdHJpbmciPnhzOm5vcm1hbGl6ZWRTdHJpbmc8L2E+KSwKLSAqIGFuZCBmdXJ0aGVybW9yZSwgYWxsIGNvbnRpZ3VvdXMgcnVucyBvZiBzcGFjZSBhcmUgY29sbGFwc2VkIHRvIHNpbmdsZSBzcGFjZXMsCi0gKiBhbmQgbGVhZGluZyBhbmQgdHJhaWxpbmcgc3BhY2VzIGFyZSB0cmltbWVkLgotICogPHA+Ci0gKiBJZiB5b3Ugd2FudCA8Y29kZT4iJm5ic3A7Jm5ic3A7aGlnaCZuYnNwOyZuYnNwO3ByaW9yaXR5Jm5ic3A7Jm5ic3A7IjwvY29kZT4KLSAqIHRvIGJlIGVxdWl2YWxlbnQgdG8gPGNvZGU+ImhpZ2ggcHJpb3JpdHkiPC9jb2RlPiwgeW91IHNob3VsZCBjb25zaWRlcgotICogdXNpbmcgeHM6dG9rZW4gb3IgYSBzdWJ0eXBlIG9mIHhzOnRva2VuLgotICogPHA+Ci0gKiBXaGVuIHRoZSB7QGxpbmsgI3N0cmluZ1ZhbHVlfSBpcyBvYnRhaW5lZCBmcm9tIGFuIFhtbFRva2VuLCB0aGUgbm9ybWFsaXplZCwKLSAqIHRyaW1tZWQsIHdoaXRlc3BhY2UgY29sbGFwc2VkIHZhbHVlIGlzIHJldHVybmVkLgotICogPHA+Ci0gKiBDb252ZXJ0aWJsZSB0byB7QGxpbmsgU3RyaW5nfS4KLSAqLyAKLXB1YmxpYyBpbnRlcmZhY2UgWG1sVG9rZW4gZXh0ZW5kcyBYbWxOb3JtYWxpemVkU3RyaW5nCi17Ci0gICAgLyoqIFRoZSBjb25zdGFudCB7QGxpbmsgU2NoZW1hVHlwZX0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZSB0eXBlID0gWG1sQmVhbnMuZ2V0QnVpbHRpblR5cGVTeXN0ZW0oKS50eXBlRm9ySGFuZGxlKCJfQklfdG9rZW4iKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gICAgICogb2Yge0BsaW5rIFhtbFRva2VufS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEZhY3RvcnkKLSAgICB7Ci0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxUb2tlbn0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxUb2tlbiBuZXdJbnN0YW5jZSgpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFRva2VuKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxUb2tlbn0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxUb2tlbiBuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgewotICAgICAgICAgIHJldHVybiAoWG1sVG9rZW4pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gaW1tdXRhYmxlIHtAbGluayBYbWxUb2tlbn0gdmFsdWUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxUb2tlbiBuZXdWYWx1ZShPYmplY3Qgb2JqKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxUb2tlbikgdHlwZS5uZXdWYWx1ZSggb2JqICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVG9rZW59IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDtzdHJpbmcgdG8gY29sbGFwc2UmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxUb2tlbiBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxUb2tlbikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFRva2VufSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7c3RyaW5nIHRvIGNvbGxhcHNlJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVG9rZW4gcGFyc2UoamF2YS5sYW5nLlN0cmluZyBzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFRva2VuKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVG9rZW59IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFRva2VuIHBhcnNlKGphdmEuaW8uRmlsZSBmKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVG9rZW4pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxUb2tlbn0gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVG9rZW4gcGFyc2UoamF2YS5pby5GaWxlIGYsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVG9rZW4pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxUb2tlbn0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxUb2tlbiBwYXJzZShqYXZhLm5ldC5VUkwgdSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFRva2VuKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBudWxsICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFRva2VufSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFRva2VuIHBhcnNlKGphdmEubmV0LlVSTCB1LCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFRva2VuKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBvcHRpb25zICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFRva2VufSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFRva2VuIHBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0gaXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxUb2tlbikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxUb2tlbn0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxUb2tlbiBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFRva2VuKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFRva2VufSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFRva2VuIHBhcnNlKGphdmEuaW8uUmVhZGVyIHIpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxUb2tlbikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFRva2VufSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFRva2VuIHBhcnNlKGphdmEuaW8uUmVhZGVyIHIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVG9rZW4pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxUb2tlbn0gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFRva2VuIHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFRva2VuKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVG9rZW59IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxUb2tlbiBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVG9rZW4pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxUb2tlbn0gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxUb2tlbiBwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxUb2tlbikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVG9rZW59IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVG9rZW4gcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFRva2VuKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxUb2tlbn0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVG9rZW4gcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVG9rZW4pIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFRva2VufSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxUb2tlbiBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb257Ci0gICAgICAgICAgcmV0dXJuIChYbWxUb2tlbikgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBGYWN0b3J5KCkgeyB9IC8vIE5vIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgYWxsb3dlZAotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmphdmEgYi92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEwOTI4NS4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3OSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtOwotCi1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOwotCi1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotaW1wb3J0IG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyOwotaW1wb3J0IG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcjsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci0KLS8qKgotICogUmVwcmVzZW50cyBhIGhvbGRlciBvZiBYTUwgdGhhdCBjYW4gcmV0dXJuIGFuIHtAbGluayBYbWxDdXJzb3J9Ci0gKiBvciBjb3B5IGl0c2VsZiB0byB2YXJpb3VzIG1lZGlhIHN1Y2ggYXMKLSAqIHtAbGluayBXcml0ZXIgV3JpdGVyc30gb3Ige0BsaW5rIEZpbGUgRmlsZXN9LgotICogQm90aCB7QGxpbmsgWG1sT2JqZWN0fQotICogKGFuZCB0aHVzIGFsbCBYTUwgQmVhbnMpIGFuZCB7QGxpbmsgWG1sQ3Vyc29yfSBhcmUKLSAqIFhtbFRva2VuU291cmNlIGltcGxlbWVudGF0aW9ucy4KLSAqIAotICogQHNlZSBYbWxPYmplY3QKLSAqIEBzZWUgWG1sQ3Vyc29yCi0gKi8gCi1wdWJsaWMgaW50ZXJmYWNlIFhtbFRva2VuU291cmNlCi17Ci0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgc3luY2hyb25pemF0aW9uIG9iamVjdCBmb3IgdGhlIGRvY3VtZW50LiAgSWYgY29uY3VycmVudAotICAgICAqIG11bHRpdGhyZWFkZWQgYWNjZXNzIHRvIGEgZG9jdW1lbnQgaXMgcmVxdWlyZWQsIHRoZSBhY2Nlc3Mgc2hvdWxkIHNob3VsZAotICAgICAqIGJlIHByb3RlY3RlZCBieSBzeW5jaHJvbml6aW5nIG9uIHRoaXMgbW9uaXRvcigpIG9iamVjdC4gIFRoZXJlIGlzIG9uZQotICAgICAqIG1vbml0b3IgcGVyIFhNTCBkb2N1bWVudCB0cmVlLgotICAgICAqLwotICAgIE9iamVjdCBtb25pdG9yKCk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgWG1sRG9jdW1lbnRQcm9wZXJ0aWVzIG9iamVjdCBmb3IgdGhlIGRvY3VtZW50IHRoaXMgdG9rZW4KLSAgICAgKiBzb3VyY2UgaXMgYXNzb2NpYXRlZCB3aXRoLgotICAgICAqLwotICAgIFhtbERvY3VtZW50UHJvcGVydGllcyBkb2N1bWVudFByb3BlcnRpZXMoKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBuZXcgWE1MIGN1cnNvci4KLSAgICAgKgotICAgICAqIEEgY3Vyc29yIHByb3ZpZGVzIHJhbmRvbSBhY2Nlc3MgdG8gYWxsIHRoZSB0b2tlbnMgaW4gdGhlIFhNTAotICAgICAqIGRhdGEsIHBsdXMgdGhlIGFiaWxpdHkgdG8gZXh0cmFjdCBzdHJvbmdseS10eXBlZCBYbWxPYmplY3RzCi0gICAgICogZm9yIHRoZSBkYXRhLiBJZiB0aGUgZGF0YSBpcyBub3QgcmVhZC1vbmx5LCB0aGUgWE1MIGN1cnNvcgotICAgICAqIGFsc28gYWxsb3dzIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGRhdGEuCi0gICAgICoKLSAgICAgKiBVc2luZyBhIGN1cnNvciBmb3IgdGhlIGZpcnN0IHRpbWUgdHlwaWNhbGx5IGZvcmNlcyB0aGUgWE1MCi0gICAgICogZG9jdW1lbnQgaW50byBtZW1vcnkuCi0gICAgICovCi0gICAgWG1sQ3Vyc29yIG5ld0N1cnNvcigpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIG5ldyBYbWxJbnB1dFN0cmVhbS4KLSAgICAgKgotICAgICAqIFRoZSBzdHJlYW0gc3RhcnRzIGF0IHRoZSBjdXJyZW50IGJlZ2luLXRhZyBvciBiZWdpbi1kb2N1bWVudAotICAgICAqIHBvc2l0aW9uIGFuZCBlbmRzIGF0IHRoZSBtYXRjaGluZyBlbmQtdGFnIG9yIGVuZC1kb2N1bWVudC4KLSAgICAgKgotICAgICAqIFRoaXMgaXMgYSBmYWlsLWZhc3Qgc3RyZWFtLCBzbyBpZiB0aGUgdW5kZXJseWluZyBkYXRhIGlzIGNoYW5nZWQKLSAgICAgKiB3aGlsZSB0aGUgc3RyZWFtIGlzIGJlaW5nIHJlYWQsIHRoZSBzdHJlYW0gdGhyb3dzIGEKLSAgICAgKiBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uLgotICAgICAqCi0gICAgICogVGhyb3dzIGFuIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGUgWG1sVG9rZW5Tb3VyY2UgaXMgbm90Ci0gICAgICogcG9zaXRpb25lZCBhdCBiZWdpbi10YWcgb3IgYmVnaW4tZG9jdW1lbnQgKGUuZy4sIGlmIGl0IGlzIGF0Ci0gICAgICogYW4gYXR0cmlidXRlKS4KLSAgICAgKi8KLSAgICBYTUxJbnB1dFN0cmVhbSBuZXdYTUxJbnB1dFN0cmVhbSgpOwotICAgIAotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBuZXcgWE1MU3RyZWFtUmVhZGVyLgotICAgICAqCi0gICAgICogVGhlIHN0cmVhbSBzdGFydHMgYXQgdGhlIGN1cnJlbnQgYmVnaW4tdGFnIG9yIGJlZ2luLWRvY3VtZW50Ci0gICAgICogcG9zaXRpb24gYW5kIGVuZHMgYXQgdGhlIG1hdGNoaW5nIGVuZC10YWcgb3IgZW5kLWRvY3VtZW50LgotICAgICAqCi0gICAgICogVGhpcyBpcyBhIGZhaWwtZmFzdCBzdHJlYW0sIHNvIGlmIHRoZSB1bmRlcmx5aW5nIGRhdGEgaXMgY2hhbmdlZAotICAgICAqIHdoaWxlIHRoZSBzdHJlYW0gaXMgYmVpbmcgcmVhZCwgdGhlIHN0cmVhbSB0aHJvd3MgYQotICAgICAqIENvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb24uCi0gICAgICovCi0gICAgWE1MU3RyZWFtUmVhZGVyIG5ld1hNTFN0cmVhbVJlYWRlcigpOwotICAgIAotICAgIC8qKgotICAgICAqIFJldHVybnMgc3RhbmRhcmQgWE1MIHRleHQuCi0gICAgICoKLSAgICAgKiBUaGUgdGV4dCByZXR1cm5lZCByZXByZXNlbnRzIHRoZSBkb2N1bWVudCBjb250ZW50cyBzdGFydGluZyBhdAotICAgICAqIHRoZSBjdXJyZW50IGJlZ2luLXRhZyBvciBiZWdpbi1kb2N1bWVudCBhbmQgZW5kaW5nIGF0IHRoZSBtYXRjaGluZwotICAgICAqIGVuZC10YWcgb3IgZW5kLWRvY3VtZW50LiBUaGlzIGlzIHNhbWUgY29udGVudCBhcyBuZXdSZWFkZXIsIGJ1dAotICAgICAqIGl0IGlzIHJldHVybmVkIGFzIGEgc2luZ2xlIHN0cmluZy4KLSAgICAgKgotICAgICAqIFRocm93cyBhbiBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgdGhlIFhtbFRva2VuU291cmNlIGlzIG5vdAotICAgICAqIHBvc2l0aW9uZWQgYXQgYmVnaW4tdGFnIG9yIGJlZ2luLWRvY3VtZW50IChlLmcuLCBpZiBpdCBpcyBhdAotICAgICAqIGFuIGF0dHJpYnV0ZSkuCi0gICAgICovCi0gICAgU3RyaW5nIHhtbFRleHQoKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBuZXcgc3RyZWFtIGNvbnRhaW5pbmcgc3RhbmRhcmQgWE1MIHRleHQsIGVuY29kZWQKLSAgICAgKiBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGVuY29kaW5nLgotICAgICAqCi0gICAgICogVGhlIGJ5dGUgc3RyZWFtIGNvbnRhaW5zIGNvbnRlbnRzIHN0YXJ0aW5nIGF0IHRoZSBjdXJyZW50Ci0gICAgICogYmVnaW4tdGFnIG9yIGJlZ2luLWRvY3VtZW50IGFuZCBlbmRpbmcgYXQgdGhlIG1hdGNoaW5nCi0gICAgICogZW5kLXRhZyBvciBlbmQtZG9jdW1lbnQuICBUaGUgc3BlY2lmaWVkIGVuY29kaW5nIGlzIHVzZWQKLSAgICAgKiBhbmQgYWxzbyBlbWl0dGVkIGluIGEgUEkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyZWFtLgotICAgICAqCi0gICAgICogVGhpcyBpcyBhIGZhaWwtZmFzdCBzdHJlYW0sIHNvIGlmIHRoZSB1bmRlcmx5aW5nIGRhdGEgaXMgY2hhbmdlZAotICAgICAqIHdoaWxlIHRoZSBzdHJlYW0gaXMgYmVpbmcgcmVhZCwgdGhlIHN0cmVhbSB0aHJvd3MgYQotICAgICAqIENvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb24uCi0gICAgICoKLSAgICAgKiBUaHJvd3MgYW4gSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoZSBYbWxUb2tlblNvdXJjZSBpcyBub3QKLSAgICAgKiBwb3NpdGlvbmVkIGF0IGJlZ2luLXRhZyBvciBiZWdpbi1kb2N1bWVudCAoZS5nLiwgaWYgaXQgaXMgYXQKLSAgICAgKiBhbiBhdHRyaWJ1dGUpLgotICAgICAqLwotICAgIElucHV0U3RyZWFtIG5ld0lucHV0U3RyZWFtKCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGEgbmV3IGNoYXJhY3RlciByZWFkZXIgY29udGFpbmluZyBYTUwgdGV4dC4KLSAgICAgKgotICAgICAqIFRoZSBjb250ZW50cyBvZiB0aGUgcmVhZGVyIHJlcHJlc2VudHMgdGhlIGRvY3VtZW50IGNvbnRlbnRzCi0gICAgICogc3RhcnRpbmcgYXQgdGhlIGN1cnJlbnQgYmVnaW4tdGFnIG9yIGJlZ2luLWRvY3VtZW50IGFuZCBlbmRpbmcgYXQKLSAgICAgKiB0aGUgbWF0Y2hpbmcgZW5kLXRhZyBvciBlbmQtZG9jdW1lbnQuICBObyBlbmNvZGluZyBhbm5vdGF0aW9uCi0gICAgICogd2lsbCBiZSBtYWRlIGluIHRoZSB0ZXh0IGl0c2VsZi4KLSAgICAgKgotICAgICAqIFRoaXMgaXMgYSBmYWlsLWZhc3QgcmVhZGVyLCBzbyBpZiB0aGUgdW5kZXJseWluZyBkYXRhIGlzIGNoYW5nZWQKLSAgICAgKiB3aGlsZSB0aGUgcmVhZGVyIGlzIGJlaW5nIHJlYWQsIHRoZSByZWFkZXIgdGhyb3dzIGEKLSAgICAgKiBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uLgotICAgICAqCi0gICAgICogVGhyb3dzIGFuIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGUgWG1sVG9rZW5Tb3VyY2UgaXMgbm90Ci0gICAgICogcG9zaXRpb25lZCBhdCBiZWdpbi10YWcgb3IgYmVnaW4tZG9jdW1lbnQgKGUuZy4sIGlmIGl0IGlzIGF0Ci0gICAgICogYW4gYXR0cmlidXRlKS4KLSAgICAgKi8KLSAgICBSZWFkZXIgbmV3UmVhZGVyKCk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhIFczQyBET00gTm9kZSBjb250YWluaW5nIHRoZSBYTUwKLSAgICAgKiByZXByZXNlbnRlZCBieSB0aGlzIHNvdXJjZS4gIFRoaXMgaXMgYSBjb3B5IG9mIHRoZSBYTUwsIGl0IGlzCi0gICAgICogbm90IGEgbGl2ZSB3aXRoIHRoZSB1bmRlcmx5aW5nIHN0b3JlIG9mIHRoaXMgdG9rZW4gc291cmNlLgotICAgICAqIElmIHRoaXMgaXMgdGhlIGRvY3VtZW50IG5vZGUsIHRoZW4gYSBEb2N1bWVudCBpcyByZXR1cm5lZCwgZWxzZQotICAgICAqIGEgRG9jdW1lbnRGcmFnbWVudCBpcyByZXR1cm5lZC4KLSAgICAgKi8KLSAgICBOb2RlIG5ld0RvbU5vZGUoKTsKLQotLy8gICAgLyoqCi0vLyAgICAgKiBSZXR1cm5zIGEgVzNDIERPTSBOb2RlIGNvbnRhaW5pbmcgdGhlIFhNTCByZXByZXNlbnRlZCBieSB0aGlzIHNvdXJjZS4KLS8vICAgICAqIFRoaXMgaXMgYSBsaXZlIERPTSBub2RlLCBub3QgYSBjb3B5LiAgQW55IGNoYW5nZXMgbWFkZSB0aHJvdWdoIHRoaXMgbm9kZQotLy8gICAgICogYXJlIGltbWVkaWF0ZWx5IHJlZmxlY3RlZCBpbiB0aGUgZG9jdW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdG9rZW4KLS8vICAgICAqIHNvdXJjZS4gIERlcGVuZGluZyBvbiB0aGUga2luZCBvZiB0b2tlbiB0aGlzIFhtbFRva2VuU291cmNlIHJlcHJlc2VudHMsCi0vLyAgICAgKiBhbiBhcHByb3ByaWF0ZSBub2RlIHdpbGwgYmUgcmV0dXJuZWQuCi0vLyAgICAgKi8KLS8vICAgIE5vZGUgZ2V0RG9tTm9kZSgpOwotCi0gICAgLyoqCi0gICAgICogV3JpdGVzIHRoZSBYTUwgcmVwcmVzZW50ZWQgYnkgdGhpcyBzb3VyY2UgdG8gdGhlIGdpdmVuIFNBWCBjb250ZW50IGFuZAotICAgICAqIGxleGljYWwgaGFuZGxlcnMuCi0gICAgICovCi0gICAgdm9pZCBzYXZlICggQ29udGVudEhhbmRsZXIgY2gsIExleGljYWxIYW5kbGVyIGxoICkgdGhyb3dzIFNBWEV4Y2VwdGlvbjsKLSAgICAKLSAgICAvKioKLSAgICAgKiBXcml0ZXMgdGhlIFhNTCByZXByZXNlbnRlZCBieSB0aGlzIHNvdXJjZSB0byB0aGUgZ2l2ZW4gRmlsZS4KLSAgICAgKi8KLSAgICB2b2lkIHNhdmUgKCBGaWxlIGZpbGUgKSB0aHJvd3MgSU9FeGNlcHRpb247Ci0gICAgCi0gICAgLyoqCi0gICAgICogV3JpdGVzIHRoZSBYTUwgcmVwcmVzZW50ZWQgYnkgdGhpcyBzb3VyY2UgdG8gdGhlIGdpdmVuIG91dHB1dCBzdHJlYW0uCi0gICAgICovCi0gICAgdm9pZCBzYXZlICggT3V0cHV0U3RyZWFtIG9zICkgdGhyb3dzIElPRXhjZXB0aW9uOwotCi0gICAgLyoqCi0gICAgICogV3JpdGVzIHRoZSBYTUwgcmVwcmVzZW50ZWQgYnkgdGhpcyBzb3VyY2UgdG8gdGhlIGdpdmVuIHdyaXRlci4KLSAgICAgKi8KLSAgICB2b2lkIHNhdmUgKCBXcml0ZXIgdyApIHRocm93cyBJT0V4Y2VwdGlvbjsKLQotICAgIC8qKgotICAgICAqIDxwPkp1c3QgbGlrZSBuZXdYTUxJbnB1dFN0cmVhbSgpIGJ1dCB3aXRoIGFueSBvZiBhIG51bWJlciBvZiBvcHRpb25zLiBVc2UgdGhlIAotICAgICAqIDxlbT5vcHRpb25zPC9lbT4gcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlIGZvbGxvd2luZzo8L3A+Ci0gICAgICogCi0gICAgICogPHRhYmxlPgotICAgICAqIDx0cj48dGg+VG8gc3BlY2lmeSB0aGlzPC90aD48dGg+VXNlIHRoaXMgbWV0aG9kPC90aD48L3RyPgotICAgICAqIDx0cj4KLSAgICAgKiAgPHRkPlRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgdG8gdXNlIHdoZW4gY29udmVydGluZyB0aGUgY2hhcmFjdGVyCi0gICAgICogIGRhdGEgaW4gdGhlIFhNTCB0byBieXRlc3MuPC90ZD4KLSAgICAgKiAgPHRkPntAbGluayBYbWxPcHRpb25zI3NldENoYXJhY3RlckVuY29kaW5nfTwvdGQ+Ci0gICAgICogPC90cj4KLSAgICAgKiA8dHI+Ci0gICAgICogIDx0ZD5QcmVmaXgtdG8tbmFtZXNwYWNlIG1hcHBpbmdzIHRoYXQgc2hvdWxkIGJlIGFzc3VtZWQKLSAgICAgKiAgd2hlbiBzYXZpbmcgdGhpcyBYTUwuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdGhlIHJlc3VsdGluZwotICAgICAqICBYTUwgd2lsbCBiZSBwYXJ0IG9mIGEgbGFyZ2VyIFhNTCBkb2N1bWVudCwgZW5zdXJpbmcgdGhhdCB0aGlzIAotICAgICAqICBpbm5lciBkb2N1bWVudCB3aWxsIHRha2UgYWR2YW50YWdlIG9mIG5hbWVzcGFjZXMgZGVmaW5lZCBpbiAKLSAgICAgKiAgdGhlIG91dGVyIGRvY3VtZW50LjwvdGQ+Ci0gICAgICogIDx0ZD57QGxpbmsgWG1sT3B0aW9ucyNzZXRTYXZlSW1wbGljaXROYW1lc3BhY2VzfTwvdGQ+Ci0gICAgICogPC90cj4KLSAgICAgKiA8dHI+Ci0gICAgICogIDx0ZD5TdWdnZXN0ZWQgbmFtZXNwYWNlIHByZWZpeGVzIHRvIHVzZSB3aGVuIHNhdmluZy4gVXNlZCBvbmx5Ci0gICAgICogIHdoZW4gYSBuYW1lc3BhY2UgYXR0cmlidXRlIG5lZWRzIHRvIGJlIHN5bnRoZXNpemVkLjwvdGQ+Ci0gICAgICogIDx0ZD57QGxpbmsgWG1sT3B0aW9ucyNzZXRTYXZlU3VnZ2VzdGVkUHJlZml4ZXN9PC90ZD4KLSAgICAgKiA8L3RyPgotICAgICAqIDx0cj4KLSAgICAgKiAgPHRkPlRoYXQgbmFtZXNwYWNlIGF0dHJpYnV0ZXMgc2hvdWxkIG9jY3VyIGZpcnN0IGluIGVsZW1lbnRzIHdoZW4KLSAgICAgKiB0aGUgWE1MIGlzIHNhdmVkLiBCeSBkZWZhdWx0LCB0aGV5IG9jY3VyIGxhc3QuPC90ZD4KLSAgICAgKiAgPHRkPntAbGluayBYbWxPcHRpb25zI3NldFNhdmVOYW1lc3BhY2VzRmlyc3R9PC90ZD4KLSAgICAgKiA8L3RyPgotICAgICAqIDx0cj4KLSAgICAgKiAgPHRkPlRoZSBYTUwgc2hvdWxkIGJlIHByZXR0eSBwcmludGVkIHdoZW4gc2F2ZWQuIE5vdGUgdGhhdCB0aGlzIAotICAgICAqICBzaG91bGQgb25seSBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcuPC90ZD4KLSAgICAgKiAgPHRkPntAbGluayBYbWxPcHRpb25zI3NldFNhdmVQcmV0dHlQcmludH08L3RkPgotICAgICAqIDwvdHI+Ci0gICAgICogPHRyPgotICAgICAqICA8dGQ+VGhlIG51bWJlciBvZiBzcGFjZXMgdG8gdXNlIHdoZW4gaW5kZW50aW5nIGZvciBwcmV0dHkgcHJpbnRpbmcuIAotICAgICAqICBUaGUgZGVmYXVsdCBpcyAyLjwvdGQ+Ci0gICAgICogIDx0ZD57QGxpbmsgWG1sT3B0aW9ucyNzZXRTYXZlUHJldHR5UHJpbnRJbmRlbnR9PC90ZD4KLSAgICAgKiA8L3RyPgotICAgICAqIDx0cj4KLSAgICAgKiAgPHRkPlRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBzcGFjZXMgaW5kZW50ZWQgZnJvbSB0aGUgbGVmdAotICAgICAqICBmb3IgcHJldHR5IHByaW50ZWQgWE1MLjwvdGQ+Ci0gICAgICogIDx0ZD57QGxpbmsgWG1sT3B0aW9ucyNzZXRTYXZlUHJldHR5UHJpbnRPZmZzZXR9PC90ZD4KLSAgICAgKiA8L3RyPgotICAgICAqIDx0cj4KLSAgICAgKiAgPHRkPlRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgbmFtZXNwYWNlIGF0dHJpYnV0ZXMgZ2VuZXJhdGVkIGZvciB0aGUgCi0gICAgICogIHNhdmVkIFhNTC4gTm90ZSB0aGF0IHRoaXMgY2FuIHJlZHVjZSBwZXJmb3JtYW5jZSBzaWduaWZpY2FudGx5LjwvdGQ+Ci0gICAgICogIDx0ZD57QGxpbmsgWG1sT3B0aW9ucyNzZXRTYXZlQWdncmVzaXZlTmFtZXNwYWNlc308L3RkPgotICAgICAqIDwvdHI+Ci0gICAgICogPHRyPgotICAgICAqICA8dGQ+VG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBzYXZlZCBkb2N1bWVudAotICAgICAqICBieSBhbGxvd2luZyB0aGUgdXNlIG9mIHRoZSBkZWZhdWx0IG5hbWVzcGFjZS4gTm90ZSB0aGF0IHRoaXMgY2FuIAotICAgICAqICBwb3RlbnRpYWxseSBjaGFuZ2UgdGhlIHNlbWFudGljIG1lYW5pbmcgb2YgdGhlIFhNTCBpZiB1bnByZWZpeGVkIFFOYW1lcyBhcmUgCi0gICAgICogIHByZXNlbnQgYXMgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBvciBlbGVtZW50LjwvdGQ+Ci0gICAgICogIDx0ZD57QGxpbmsgWG1sT3B0aW9ucyNzZXRVc2VEZWZhdWx0TmFtZXNwYWNlfTwvdGQ+Ci0gICAgICogPC90cj4KLSAgICAgKiA8dHI+Ci0gICAgICogIDx0ZD5UbyBmaWx0ZXIgb3V0IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zIHdpdGggdGhlIHNwZWNpZmllZCB0YXJnZXQgbmFtZS48L3RkPgotICAgICAqICA8dGQ+e0BsaW5rIFhtbE9wdGlvbnMjc2V0U2F2ZUZpbHRlclByb2NpbnN0fTwvdGQ+Ci0gICAgICogPC90cj4KLSAgICAgKiA8dHI+Ci0gICAgICogIDx0ZD5DaGFuZ2UgdGhlIFFOYW1lIG9mIHRoZSBzeW50aGVzaXplZCByb290IGVsZW1lbnQgd2hlbiBzYXZpbmcuIFRoaXMgCi0gICAgICogIHJlcGxhY2VzICJ4bWwtZnJhZ21lbnQiIHdpdGggImZyYWdtZW50IiBpbiB0aGUgbmFtZXNwYWNlIAotICAgICAqICBodHRwOi8vd3d3Lm9wZW51cmkub3JnL2ZyYWdtZW50PC90ZD4KLSAgICAgKiAgPHRkPntAbGluayBYbWxPcHRpb25zI3NldFNhdmVVc2VPcGVuRnJhZ308L3RkPgotICAgICAqIDwvdHI+Ci0gICAgICogPHRyPgotICAgICAqICA8dGQ+U2F2aW5nIHNob3VsZCBiZWdpbiBvbiB0aGUgZWxlbWVudCdzIGNvbnRlbnRzLjwvdGQ+Ci0gICAgICogIDx0ZD57QGxpbmsgWG1sT3B0aW9ucyNzZXRTYXZlSW5uZXJ9PC90ZD4KLSAgICAgKiA8L3RyPgotICAgICAqIDx0cj4KLSAgICAgKiAgPHRkPlNhdmluZyBzaG91bGQgYmVnaW4gb24gdGhlIGVsZW1lbnQsIHJhdGhlciB0aGFuIGl0cyBjb250ZW50cy48L3RkPgotICAgICAqICA8dGQ+e0BsaW5rIFhtbE9wdGlvbnMjc2V0U2F2ZU91dGVyfTwvdGQ+Ci0gICAgICogPC90cj4KLSAgICAgKiA8dHI+Ci0gICAgICogIDx0ZD5UbyByZW5hbWUgdGhlIGRvY3VtZW50IGVsZW1lbnQsIG9yIHRvIHNwZWNpZnkgdGhlIGRvY3VtZW50IGVsZW1lbnQKLSAgICAgKiAgZm9yIHRoaXMgWE1MLjwvdGQ+Ci0gICAgICogIDx0ZD57QGxpbmsgWG1sT3B0aW9ucyNzZXRTYXZlU3ludGhldGljRG9jdW1lbnRFbGVtZW50fTwvdGQ+Ci0gICAgICogPC90cj4KLSAgICAgKiA8L3RhYmxlPgotICAgICAqIAotICAgICAqIEBzZWUgWG1sT3B0aW9ucwotICAgICAqIAotICAgICAqIEBwYXJhbSBvcHRpb25zIEFueSBvZiB0aGUgZGVzY3JpYmVkIG9wdGlvbnMuCi0gICAgICogQHJldHVybiBBIG5ldyB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotICAgICAqLwotICAgIFhNTElucHV0U3RyZWFtIG5ld1hNTElucHV0U3RyZWFtKFhtbE9wdGlvbnMgb3B0aW9ucyk7Ci0KLSAgICAvKioKLSAgICAgKiBKdXN0IGxpa2UgbmV3WE1MSW5wdXRTdHJlYW0oKSBidXQgd2l0aCBvcHRpb25zLgotICAgICAqIE9wdGlvbnMgbWFwIG1heSBiZSBudWxsLgotICAgICAqIEBzZWUgWG1sT3B0aW9ucwotICAgICAqLwotICAgIFhNTFN0cmVhbVJlYWRlciBuZXdYTUxTdHJlYW1SZWFkZXIoWG1sT3B0aW9ucyBvcHRpb25zKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBKdXN0IGxpa2UgeG1sVGV4dCgpIGJ1dCB3aXRoIG9wdGlvbnMuCi0gICAgICogT3B0aW9ucyBtYXAgbWF5IGJlIG51bGwuCi0gICAgICogQHNlZSBYbWxPcHRpb25zCi0gICAgICovCi0gICAgU3RyaW5nIHhtbFRleHQoWG1sT3B0aW9ucyBvcHRpb25zKTsKLSAgICAKLSAgICAvKioKLSAgICAgKgotICAgICAqIEp1c3QgbGlrZSBuZXdJbnB1dFN0cmVhbShTdHJpbmcgZW5jb2RpbmcpIGJ1dCB3aXRoIG9wdGlvbnMuCi0gICAgICogT3B0aW9ucyBtYXAgbWF5IGJlIG51bGwuCi0gICAgICogQHNlZSBYbWxPcHRpb25zCi0gICAgICovCi0gICAgSW5wdXRTdHJlYW0gbmV3SW5wdXRTdHJlYW0oWG1sT3B0aW9ucyBvcHRpb25zKTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBKdXN0IGxpa2UgbmV3UmVhZGVyKCkgYnV0IHdpdGggb3B0aW9ucy4KLSAgICAgKiBPcHRpb25zIG1hcCBtYXkgYmUgbnVsbC4KLSAgICAgKiBAc2VlIFhtbE9wdGlvbnMKLSAgICAgKi8KLSAgICBSZWFkZXIgbmV3UmVhZGVyKFhtbE9wdGlvbnMgb3B0aW9ucyk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogSnVzdCBsaWtlIG5ld0RvbU5vZGUoKSBidXQgd2l0aCBvcHRpb25zLgotICAgICAqIE9wdGlvbnMgbWFwIG1heSBiZSBudWxsLgotICAgICAqIEBzZWUgWG1sT3B0aW9ucwotICAgICAqLwotCi0gICAgTm9kZSBuZXdEb21Ob2RlKFhtbE9wdGlvbnMgb3B0aW9ucyk7Ci0gICAgCi0gICAgLyoqCi0gICAgICogV3JpdGVzIHRoZSBYTUwgcmVwcmVzZW50ZWQgYnkgdGhpcyBzb3VyY2UgdG8gdGhlIGdpdmVuIFNBWCBjb250ZW50IGFuZAotICAgICAqIGxleGljYWwgaGFuZGxlcnMuCi0gICAgICovCi0gICAgdm9pZCBzYXZlICggQ29udGVudEhhbmRsZXIgY2gsIExleGljYWxIYW5kbGVyIGxoLCBYbWxPcHRpb25zIG9wdGlvbnMgKSB0aHJvd3MgU0FYRXhjZXB0aW9uOwotICAgIAotICAgIC8qKgotICAgICAqIFdyaXRlcyB0aGUgWE1MIHJlcHJlc2VudGVkIGJ5IHRoaXMgc291cmNlIHRvIHRoZSBnaXZlbiBGaWxlLgotICAgICAqLwotICAgIHZvaWQgc2F2ZSAoIEZpbGUgZmlsZSwgWG1sT3B0aW9ucyBvcHRpb25zICkgdGhyb3dzIElPRXhjZXB0aW9uOwotICAgIAotICAgIC8qKgotICAgICAqIFdyaXRlcyB0aGUgWE1MIHJlcHJlc2VudGVkIGJ5IHRoaXMgc291cmNlIHRvIHRoZSBnaXZlbiBvdXRwdXQgc3RyZWFtLgotICAgICAqLwotICAgIHZvaWQgc2F2ZSAoIE91dHB1dFN0cmVhbSBvcywgWG1sT3B0aW9ucyBvcHRpb25zICkgdGhyb3dzIElPRXhjZXB0aW9uOwotCi0gICAgLyoqCi0gICAgICogV3JpdGVzIHRoZSBYTUwgcmVwcmVzZW50ZWQgYnkgdGhpcyBzb3VyY2UgdG8gdGhlIGdpdmVuIHdyaXRlci4KLSAgICAgKi8KLSAgICB2b2lkIHNhdmUgKCBXcml0ZXIgdywgWG1sT3B0aW9ucyBvcHRpb25zICkgdGhyb3dzIElPRXhjZXB0aW9uOwotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODA2MTk1Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKLQotCi0vKioKLSAqIENvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gKiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Vuc2lnbmVkQnl0ZSI+eHM6dW5zaWduZWRCeXRlPC9hPiB0eXBlLgotICogT25lIG9mIHRoZSBkZXJpdmVkIHR5cGVzIGJhc2VkIG9uIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZGVjaW1hbCI+eHM6ZGVjaW1hbDwvYT4uCi0gKiA8cD4KLSAqIFZlcmlmaWVkIHRvIGJlIGluIHRoZSByYW5nZSAwLi4yNTUgd2hlbiB2YWxpZGF0aW5nLgotICogPHA+Ci0gKiBBcyBzdWdnZXN0ZWQgYnkgSkFYQiwgY29udmVydGlibGUgdG8gSmF2YSBzaG9ydC4KLSAqLyAKLXB1YmxpYyBpbnRlcmZhY2UgWG1sVW5zaWduZWRCeXRlIGV4dGVuZHMgWG1sVW5zaWduZWRTaG9ydAotewotICAgIC8qKiBUaGUgY29uc3RhbnQge0BsaW5rIFNjaGVtYVR5cGV9IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGUgdHlwZSA9IFhtbEJlYW5zLmdldEJ1aWx0aW5UeXBlU3lzdGVtKCkudHlwZUZvckhhbmRsZSgiX0JJX3Vuc2lnbmVkQnl0ZSIpOwotICAgIAotICAgIC8qKiBSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSBzaG9ydCAqLwotICAgIHB1YmxpYyBzaG9ydCBnZXRTaG9ydFZhbHVlKCk7Ci0gICAgLyoqIFNldHMgdGhpcyB2YWx1ZSBhcyBhIHNob3J0ICovCi0gICAgcHVibGljIHZvaWQgc2V0U2hvcnRWYWx1ZShzaG9ydCBzKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIHNob3J0Ci0gICAgICogQGRlcHJlY2F0ZWQgcmVwbGFjZWQgd2l0aCB7QGxpbmsgI2dldFNob3J0VmFsdWV9Ci0gICAgICoqLwotICAgIHB1YmxpYyBzaG9ydCBzaG9ydFZhbHVlKCk7Ci0gICAgLyoqCi0gICAgICogU2V0cyB0aGlzIHZhbHVlIGFzIGEgc2hvcnQKLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjc2V0U2hvcnRWYWx1ZX0KLSAgICAgKiovCi0gICAgcHVibGljIHZvaWQgc2V0KHNob3J0IHMpOwotCi0gICAgLyoqCi0gICAgICogQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotICAgICAqIG9mIHtAbGluayBYbWxVbnNpZ25lZEJ5dGV9LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgRmFjdG9yeQotICAgIHsKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbFVuc2lnbmVkQnl0ZX0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZEJ5dGUgbmV3SW5zdGFuY2UoKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxVbnNpZ25lZEJ5dGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2Yge0BsaW5rIFhtbFVuc2lnbmVkQnl0ZX0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZEJ5dGUgbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkQnl0ZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBpbW11dGFibGUge0BsaW5rIFhtbFVuc2lnbmVkQnl0ZX0gdmFsdWUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZEJ5dGUgbmV3VmFsdWUoT2JqZWN0IG9iaikgewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRCeXRlKSB0eXBlLm5ld1ZhbHVlKCBvYmogKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxVbnNpZ25lZEJ5dGV9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsxMjMmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZEJ5dGUgcGFyc2UoamF2YS5sYW5nLlN0cmluZyBzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRCeXRlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVW5zaWduZWRCeXRlfSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7MTIzJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVW5zaWduZWRCeXRlIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxVbnNpZ25lZEJ5dGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxVbnNpZ25lZEJ5dGV9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFVuc2lnbmVkQnl0ZSBwYXJzZShqYXZhLmlvLkZpbGUgZikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkQnl0ZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkQnl0ZX0gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVW5zaWduZWRCeXRlIHBhcnNlKGphdmEuaW8uRmlsZSBmLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkQnl0ZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkQnl0ZX0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZEJ5dGUgcGFyc2UoamF2YS5uZXQuVVJMIHUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxVbnNpZ25lZEJ5dGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG51bGwgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVW5zaWduZWRCeXRlfSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFVuc2lnbmVkQnl0ZSBwYXJzZShqYXZhLm5ldC5VUkwgdSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxVbnNpZ25lZEJ5dGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG9wdGlvbnMgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVW5zaWduZWRCeXRlfSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFVuc2lnbmVkQnl0ZSBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRCeXRlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkQnl0ZX0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZEJ5dGUgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxVbnNpZ25lZEJ5dGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVW5zaWduZWRCeXRlfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFVuc2lnbmVkQnl0ZSBwYXJzZShqYXZhLmlvLlJlYWRlciByKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRCeXRlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVW5zaWduZWRCeXRlfSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFVuc2lnbmVkQnl0ZSBwYXJzZShqYXZhLmlvLlJlYWRlciByLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkQnl0ZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkQnl0ZX0gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFVuc2lnbmVkQnl0ZSBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxVbnNpZ25lZEJ5dGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxVbnNpZ25lZEJ5dGV9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZEJ5dGUgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkQnl0ZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkQnl0ZX0gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZEJ5dGUgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRCeXRlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxVbnNpZ25lZEJ5dGV9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVW5zaWduZWRCeXRlIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxVbnNpZ25lZEJ5dGUpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkQnl0ZX0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVW5zaWduZWRCeXRlIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkQnl0ZSkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVW5zaWduZWRCeXRlfSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZEJ5dGUgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRCeXRlKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIEZhY3RvcnkoKSB7IH0gLy8gTm8gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBhbGxvd2VkCi0gICAgfQotfQotCmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDdmYjZiLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg1ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczsKLQotaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOwotCi0KLS8qKgotICogQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSAqIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jdW5zaWduZWRJbnQiPnhzOnVuc2lnbmVkSW50PC9hPiB0eXBlLgotICogT25lIG9mIHRoZSBkZXJpdmVkIHR5cGVzIGJhc2VkIG9uIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZGVjaW1hbCI+eHM6ZGVjaW1hbDwvYT4uCi0gKiA8cD4KLSAqIFZlcmlmaWVkIHRvIGJlIGluIHRoZSByYW5nZSAwLi40Mjk0OTY3Mjk1IHdoZW4gdmFsaWRhdGluZy4KLSAqIDxwPgotICogQ29udmVydGlibGUgdG8gSmF2YSBsb25nLgotICovIAotcHVibGljIGludGVyZmFjZSBYbWxVbnNpZ25lZEludCBleHRlbmRzIFhtbFVuc2lnbmVkTG9uZwotewotICAgIC8qKiBUaGUgY29uc3RhbnQge0BsaW5rIFNjaGVtYVR5cGV9IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGUgdHlwZSA9IFhtbEJlYW5zLmdldEJ1aWx0aW5UeXBlU3lzdGVtKCkudHlwZUZvckhhbmRsZSgiX0JJX3Vuc2lnbmVkSW50Iik7Ci0gICAgCi0gICAgLyoqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIGxvbmcgKi8KLSAgICBsb25nIGdldExvbmdWYWx1ZSgpOwotICAgIC8qKiBTZXRzIHRoaXMgdmFsdWUgYXMgYSBsb25nICovCi0gICAgdm9pZCBzZXRMb25nVmFsdWUobG9uZyB2KTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIGxvbmcKLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjZ2V0TG9uZ1ZhbHVlfQotICAgICAqKi8KLSAgICBsb25nIGxvbmdWYWx1ZSgpOwotICAgIC8qKgotICAgICAqIFNldHMgdGhpcyB2YWx1ZSBhcyBhIGxvbmcKLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjc2V0TG9uZ1ZhbHVlfQotICAgICAqKi8KLSAgICB2b2lkIHNldChsb25nIHYpOwotCi0gICAgLyoqCi0gICAgICogQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotICAgICAqIG9mIHtAbGluayBYbWxVbnNpZ25lZEludH0uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBGYWN0b3J5Ci0gICAgewotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sVW5zaWduZWRJbnR9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVW5zaWduZWRJbnQgbmV3SW5zdGFuY2UoKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxVbnNpZ25lZEludCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sVW5zaWduZWRJbnR9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVW5zaWduZWRJbnQgbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkSW50KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGltbXV0YWJsZSB7QGxpbmsgWG1sVW5zaWduZWRJbnR9IHZhbHVlICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVW5zaWduZWRJbnQgbmV3VmFsdWUoT2JqZWN0IG9iaikgewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRJbnQpIHR5cGUubmV3VmFsdWUoIG9iaiApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkSW50fSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7MTIzNDU2NyZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFVuc2lnbmVkSW50IHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkSW50KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVW5zaWduZWRJbnR9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsxMjM0NTY3Jmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVW5zaWduZWRJbnQgcGFyc2UoamF2YS5sYW5nLlN0cmluZyBzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkSW50KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVW5zaWduZWRJbnR9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFVuc2lnbmVkSW50IHBhcnNlKGphdmEuaW8uRmlsZSBmKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRJbnQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxVbnNpZ25lZEludH0gZnJhZ21lbnQgZnJvbSBhIEZpbGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVW5zaWduZWRJbnQgcGFyc2UoamF2YS5pby5GaWxlIGYsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRJbnQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxVbnNpZ25lZEludH0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZEludCBwYXJzZShqYXZhLm5ldC5VUkwgdSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkSW50KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBudWxsICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkSW50fSBmcmFnbWVudCBmcm9tIGEgVVJMLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFVuc2lnbmVkSW50IHBhcnNlKGphdmEubmV0LlVSTCB1LCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkSW50KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBvcHRpb25zICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkSW50fSBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFVuc2lnbmVkSW50IHBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0gaXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxVbnNpZ25lZEludCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxVbnNpZ25lZEludH0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZEludCBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkSW50KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkSW50fSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFVuc2lnbmVkSW50IHBhcnNlKGphdmEuaW8uUmVhZGVyIHIpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxVbnNpZ25lZEludCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkSW50fSBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFVuc2lnbmVkSW50IHBhcnNlKGphdmEuaW8uUmVhZGVyIHIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRJbnQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxVbnNpZ25lZEludH0gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFVuc2lnbmVkSW50IHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkSW50KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVW5zaWduZWRJbnR9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZEludCBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRJbnQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxVbnNpZ25lZEludH0gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZEludCBwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxVbnNpZ25lZEludCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVW5zaWduZWRJbnR9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVW5zaWduZWRJbnQgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkSW50KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxVbnNpZ25lZEludH0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVW5zaWduZWRJbnQgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRJbnQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkSW50fSBmcmFnbWVudCBmcm9tIGFuIFhNTFN0cmVhbVJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZEludCBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb257Ci0gICAgICAgICAgcmV0dXJuIChYbWxVbnNpZ25lZEludCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBGYWN0b3J5KCkgeyB9IC8vIE5vIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgYWxsb3dlZAotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5qYXZhIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWY1MjcyLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKLQotCi1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci0KLQotLyoqCi0gKiBDb3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotICogPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyN1bnNpZ25lZExvbmciPnhzOnVuc2lnbmVkTG9uZzwvYT4gdHlwZS4KLSAqIE9uZSBvZiB0aGUgZGVyaXZlZCB0eXBlcyBiYXNlZCBvbiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2RlY2ltYWwiPnhzOmRlY2ltYWw8L2E+LgotICogPHA+Ci0gKiBWZXJpZmllZCB0byBiZSBpbiB0aGUgcmFuZ2UgMC4uMjxzdXBlcj42NDwvc3VwZXI+LTEgd2hlbiB2YWxpZGF0aW5nLgotICogPHA+Ci0gKiBDb252ZXJ0aWJsZSB0byB7QGxpbmsgQmlnSW50ZWdlcn0uCi0gKi8gCi1wdWJsaWMgaW50ZXJmYWNlIFhtbFVuc2lnbmVkTG9uZyBleHRlbmRzIFhtbE5vbk5lZ2F0aXZlSW50ZWdlcgotewotICAgIC8qKiBUaGUgY29uc3RhbnQge0BsaW5rIFNjaGVtYVR5cGV9IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4gKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFNjaGVtYVR5cGUgdHlwZSA9IFhtbEJlYW5zLmdldEJ1aWx0aW5UeXBlU3lzdGVtKCkudHlwZUZvckhhbmRsZSgiX0JJX3Vuc2lnbmVkTG9uZyIpOwotICAgIAotICAgIC8qKgotICAgICAqIEEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSAgICAgKiBvZiB7QGxpbmsgWG1sVW5zaWduZWRMb25nfS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIEZhY3RvcnkKLSAgICB7Ci0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxVbnNpZ25lZExvbmd9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVW5zaWduZWRMb25nIG5ld0luc3RhbmNlKCkgewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRMb25nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIHtAbGluayBYbWxVbnNpZ25lZExvbmd9ICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVW5zaWduZWRMb25nIG5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxVbnNpZ25lZExvbmcpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3SW5zdGFuY2UoIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIENyZWF0ZXMgYW4gaW1tdXRhYmxlIHtAbGluayBYbWxVbnNpZ25lZExvbmd9IHZhbHVlICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVW5zaWduZWRMb25nIG5ld1ZhbHVlKE9iamVjdCBvYmopIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkTG9uZykgdHlwZS5uZXdWYWx1ZSggb2JqICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVW5zaWduZWRMb25nfSBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7MTIzNDU2Nzg5Jmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVW5zaWduZWRMb25nIHBhcnNlKGphdmEubGFuZy5TdHJpbmcgcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkTG9uZykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkTG9uZ30gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzEyMzQ1Njc4OSZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFVuc2lnbmVkTG9uZyBwYXJzZShqYXZhLmxhbmcuU3RyaW5nIHMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRMb25nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVW5zaWduZWRMb25nfSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZExvbmcgcGFyc2UoamF2YS5pby5GaWxlIGYpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxVbnNpZ25lZExvbmcpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxVbnNpZ25lZExvbmd9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFVuc2lnbmVkTG9uZyBwYXJzZShqYXZhLmlvLkZpbGUgZiwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxVbnNpZ25lZExvbmcpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGYsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxVbnNpZ25lZExvbmd9IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVW5zaWduZWRMb25nIHBhcnNlKGphdmEubmV0LlVSTCB1KSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRMb25nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBudWxsICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkTG9uZ30gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZExvbmcgcGFyc2UoamF2YS5uZXQuVVJMIHUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRMb25nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB1LCB0eXBlLCBvcHRpb25zICk7IH0KLQotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkTG9uZ30gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZExvbmcgcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSBpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkTG9uZykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggaXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxVbnNpZ25lZExvbmd9IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVW5zaWduZWRMb25nIHBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0gaXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRMb25nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkTG9uZ30gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZExvbmcgcGFyc2UoamF2YS5pby5SZWFkZXIgcikgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkTG9uZykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkTG9uZ30gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZExvbmcgcGFyc2UoamF2YS5pby5SZWFkZXIgciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxVbnNpZ25lZExvbmcpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHIsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxVbnNpZ25lZExvbmd9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZExvbmcgcGFyc2Uob3JnLnczYy5kb20uTm9kZSBub2RlKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRMb25nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBub2RlLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVW5zaWduZWRMb25nfSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVW5zaWduZWRMb25nIHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxVbnNpZ25lZExvbmcpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxVbnNpZ25lZExvbmd9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVW5zaWduZWRMb25nIHBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkTG9uZykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeGlzLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVW5zaWduZWRMb25nfSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFVuc2lnbmVkTG9uZyBwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRMb25nKSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxVbnNpZ25lZExvbmd9IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFVuc2lnbmVkTG9uZyBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxVbnNpZ25lZExvbmcpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhzciwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkTG9uZ30gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVW5zaWduZWRMb25nIHBhcnNlKGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyIHhzciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zIG9wdGlvbnMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbnsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkTG9uZykgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIG5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKCB4aXMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBGYWN0b3J5KCkgeyB9IC8vIE5vIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgYWxsb3dlZAotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuamF2YSBiL3YyL3NyYy94bWxwdWJsaWMvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2ODRhNDYuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnM7Ci0KLWltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKLQotCi0vKioKLSAqIENvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gKiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Vuc2lnbmVkU2hvcnQiPnhzOnVuc2lnbmVkU2hvcnQ8L2E+IHR5cGUuCi0gKiBPbmUgb2YgdGhlIGRlcml2ZWQgdHlwZXMgYmFzZWQgb24gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkZWNpbWFsIj54czpkZWNpbWFsPC9hPi4KLSAqIDxwPgotICogVmVyaWZpZWQgdG8gYmUgaW4gdGhlIHJhbmdlIDAuLjY1NTM1IHdoZW4gdmFsaWRhdGluZy4KLSAqIDxwPgotICogQ29udmVydGlibGUgdG8gYSBKYXZhIGludC4KLSAqLyAKLXB1YmxpYyBpbnRlcmZhY2UgWG1sVW5zaWduZWRTaG9ydCBleHRlbmRzIFhtbFVuc2lnbmVkSW50Ci17Ci0gICAgLyoqIFRoZSBjb25zdGFudCB7QGxpbmsgU2NoZW1hVHlwZX0gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLiAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2NoZW1hVHlwZSB0eXBlID0gWG1sQmVhbnMuZ2V0QnVpbHRpblR5cGVTeXN0ZW0oKS50eXBlRm9ySGFuZGxlKCJfQklfdW5zaWduZWRTaG9ydCIpOwotICAgIAotICAgIC8qKiBSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYW4gaW50ICovCi0gICAgaW50IGdldEludFZhbHVlKCk7Ci0gICAgLyoqIFNldHMgdGhpcyB2YWx1ZSBhcyBhbiBpbnQgKi8KLSAgICB2b2lkIHNldEludFZhbHVlKGludCB2KTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhpcyB2YWx1ZSBhcyBhbiBpbnQKLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjZ2V0SW50VmFsdWV9Ci0gICAgICoqLwotICAgIGludCBpbnRWYWx1ZSgpOwotICAgIC8qKgotICAgICAqIFNldHMgdGhpcyB2YWx1ZSBhcyBhbiBpbnQKLSAgICAgKiBAZGVwcmVjYXRlZCByZXBsYWNlZCB3aXRoIHtAbGluayAjc2V0SW50VmFsdWV9Ci0gICAgICoqLwotICAgIHZvaWQgc2V0KGludCB2KTsKLQotICAgIC8qKgotICAgICAqIEEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSAgICAgKiBvZiB7QGxpbmsgWG1sVW5zaWduZWRTaG9ydH0uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBGYWN0b3J5Ci0gICAgewotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sVW5zaWduZWRTaG9ydH0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZFNob3J0IG5ld0luc3RhbmNlKCkgewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRTaG9ydCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdJbnN0YW5jZSggdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogQ3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiB7QGxpbmsgWG1sVW5zaWduZWRTaG9ydH0gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZFNob3J0IG5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxVbnNpZ25lZFNob3J0KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLm5ld0luc3RhbmNlKCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBDcmVhdGVzIGFuIGltbXV0YWJsZSB7QGxpbmsgWG1sVW5zaWduZWRTaG9ydH0gdmFsdWUgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZFNob3J0IG5ld1ZhbHVlKE9iamVjdCBvYmopIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkU2hvcnQpIHR5cGUubmV3VmFsdWUoIG9iaiApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkU2hvcnR9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsxMjM0NSZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFVuc2lnbmVkU2hvcnQgcGFyc2UoamF2YS5sYW5nLlN0cmluZyBzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRTaG9ydCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkU2hvcnR9IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsxMjM0NSZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFVuc2lnbmVkU2hvcnQgcGFyc2UoamF2YS5sYW5nLlN0cmluZyBzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkU2hvcnQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHMsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxVbnNpZ25lZFNob3J0fSBmcmFnbWVudCBmcm9tIGEgRmlsZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZFNob3J0IHBhcnNlKGphdmEuaW8uRmlsZSBmKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRTaG9ydCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkU2hvcnR9IGZyYWdtZW50IGZyb20gYSBGaWxlLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFVuc2lnbmVkU2hvcnQgcGFyc2UoamF2YS5pby5GaWxlIGYsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRTaG9ydCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggZiwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkU2hvcnR9IGZyYWdtZW50IGZyb20gYSBVUkwuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVW5zaWduZWRTaG9ydCBwYXJzZShqYXZhLm5ldC5VUkwgdSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkU2hvcnQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG51bGwgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVW5zaWduZWRTaG9ydH0gZnJhZ21lbnQgZnJvbSBhIFVSTC4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZFNob3J0IHBhcnNlKGphdmEubmV0LlVSTCB1LCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkU2hvcnQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHUsIHR5cGUsIG9wdGlvbnMgKTsgfQotCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVW5zaWduZWRTaG9ydH0gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZFNob3J0IHBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0gaXMpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxVbnNpZ25lZFNob3J0KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCBpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkU2hvcnR9IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVW5zaWduZWRTaG9ydCBwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtIGlzLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMgb3B0aW9ucykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkU2hvcnQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIGlzLCB0eXBlLCBvcHRpb25zICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVW5zaWduZWRTaG9ydH0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZFNob3J0IHBhcnNlKGphdmEuaW8uUmVhZGVyIHIpIHRocm93cyBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiwgamF2YS5pby5JT0V4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxVbnNpZ25lZFNob3J0KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCByLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVW5zaWduZWRTaG9ydH0gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZFNob3J0IHBhcnNlKGphdmEuaW8uUmVhZGVyIHIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRTaG9ydCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggciwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkU2hvcnR9IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4gKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxVbnNpZ25lZFNob3J0IHBhcnNlKG9yZy53M2MuZG9tLk5vZGUgbm9kZSkgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkU2hvcnQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIG5vZGUsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxVbnNpZ25lZFNob3J0fSBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVW5zaWduZWRTaG9ydCBwYXJzZShvcmcudzNjLmRvbS5Ob2RlIG5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRTaG9ydCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggbm9kZSwgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkU2hvcnR9IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVW5zaWduZWRTaG9ydCBwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtIHhpcykgdGhyb3dzIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgICAgcmV0dXJuIChYbWxVbnNpZ25lZFNob3J0KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4aXMsIHR5cGUsIG51bGwgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFBhcnNlcyBhIHtAbGluayBYbWxVbnNpZ25lZFNob3J0fSBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFVuc2lnbmVkU2hvcnQgcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gKFhtbFVuc2lnbmVkU2hvcnQpIFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkucGFyc2UoIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUGFyc2VzIGEge0BsaW5rIFhtbFVuc2lnbmVkU2hvcnR9IGZyYWdtZW50IGZyb20gYW4gWE1MU3RyZWFtUmVhZGVyLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbFVuc2lnbmVkU2hvcnQgcGFyc2UoamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXIgeHNyKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24gewotICAgICAgICAgIHJldHVybiAoWG1sVW5zaWduZWRTaG9ydCkgWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5wYXJzZSggeHNyLCB0eXBlLCBudWxsICk7IH0KLSAgICAgICAgCi0gICAgICAgIC8qKiBQYXJzZXMgYSB7QGxpbmsgWG1sVW5zaWduZWRTaG9ydH0gZnJhZ21lbnQgZnJvbSBhbiBYTUxTdHJlYW1SZWFkZXIuICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sVW5zaWduZWRTaG9ydCBwYXJzZShqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlciB4c3IsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb257Ci0gICAgICAgICAgcmV0dXJuIChYbWxVbnNpZ25lZFNob3J0KSBYbWxCZWFucy5nZXRDb250ZXh0VHlwZUxvYWRlcigpLnBhcnNlKCB4c3IsIHR5cGUsIG9wdGlvbnMgKTsgfQotICAgICAgICAKLSAgICAgICAgLyoqIFJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLiAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0gbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0geGlzKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgbnVsbCApOyB9Ci0gICAgICAgIAotICAgICAgICAvKiogUmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSBuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSB4aXMsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyBvcHRpb25zKSB0aHJvd3Mgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgICByZXR1cm4gWG1sQmVhbnMuZ2V0Q29udGV4dFR5cGVMb2FkZXIoKS5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oIHhpcywgdHlwZSwgb3B0aW9ucyApOyB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIEZhY3RvcnkoKSB7IH0gLy8gTm8gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBhbGxvd2VkCi0gICAgfQotfQotCmRpZmYgLS1naXQgYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvcGFja2FnZS5odG1sIGIvdjIvc3JjL3htbHB1YmxpYy9vcmcvYXBhY2hlL3htbGJlYW5zL3BhY2thZ2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI3NmE4NS4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1scHVibGljL29yZy9hcGFjaGUveG1sYmVhbnMvcGFja2FnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTwvaGVhZD4KLTxib2R5IGJnY29sb3I9IndoaXRlIj4KLQotUHJvdmlkZXMgY2xhc3NlcyBmb3IgWE1MIEJlYW5zIHNjaGVtYSwgaW5mb3NldCwgeHBhdGgsIGFuZCB4cXVlcnkgaGFuZGxpbmcuCi0KLTxwPgotVGhlIFhNTCBCZWFucyBBUEkgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBYTUwgQmVhbnMgPGVtPnNjaGVtYSBjb21waWxlcjwvZW0+LgotVGhlIHNjaGVtYSBjb21waWxlciBwcm9kdWNlcyBYTUwgQmVhbiBjbGFzc2VzIHRoYXQgZXh0ZW5kIGFuZCBpbnRlcmFjdAotd2l0aCB0aGUgYmFzaWMgWE1MIEJlYW4gY2xhc3NlcyBhbmQgaW50ZXJmYWNlcyBpbiB0aGlzIHBhY2thZ2UuICBJdCBpcwotYWxzbyBwb3NzaWJsZSB0byB1c2UgWE1MIEJlYW5zIHdpdGhvdXQgdGhlIHNjaGVtYSBjb21waWxlciB0byBtYW5pcHVsYXRlCi1hbmQgdmFsaWRhdGUgWE1MIGluIGEgbGF0ZS1ib3VuZCB3YXkgKHdpdGggbm8gdHlwZXMsIG9yIHdpdGgKLXJ1bnRpbWUtbG9hZGVkIHR5cGVzIG9ubHkpLgotCi08cD4KLVRoaXMgcGFja2FnZSBjb250YWluczoKLTxvbD4KLTxsaT5BbGwgdGhlIGJ1aWx0LWluIFhNTCBCZWFuIGNsYXNzZXMgCi1zdWNoIGFzIHtAbGluayBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdH0sIHtAbGluayBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGV9LCBhbmQKLXtAbGluayBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEludH0KLShvbmUgZm9yIGVhY2ggb2YgdGhlIAotPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNidWlsdC1pbi1kYXRhdHlwZXMiPjQ2IGJ1aWx0LWluIFhNTCBTY2hlbWEgdHlwZXM8L2E+KS4KLTxsaT5TdXBwb3J0IGZvciBmdWxsIFhNTCBpbmZvc2V0LCBYUGF0aCwgYW5kIFhRdWVyeQotKHZpYSB7QGxpbmsgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3J9LCB7QGxpbmsgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Qjc2VsZWN0UGF0aH0gYW5kIHJlbGF0ZWQgbWV0aG9kcykuCi08bGk+U3VwcG9ydCBmb3IgY29tcHV0YXRpb24gdXNpbmcgWE1MIFNjaGVtYSBkYXRhIHR5cGVzICh2aWEgZGF0YXR5cGUKLWNsYXNzZXMgc3VjaCBhcyB7QGxpbmsgb3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb259KS4KLTxsaT5TdXBwb3J0IGZvciB3b3JraW5nIHdpdGggWE1MIFNjaGVtYSB0eXBlIG1ldGFkYXRhIGl0c2VsZgotKHZpYSB7QGxpbmsgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlfSwge0BsaW5rIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVN5c3RlbX0sIGFuZCByZWxhdGVkIGNsYXNzZXMpLgotPC9vbD4KLQotPHA+Ci1UaGUgcGxhY2UgdG8gYmVnaW4gd2hlbiB3b3JraW5nIHdpdGggdGhlIFhNTCBCZWFucyBBUEkgaXMgdGhlIGZvbGxvd2luZwotZnVuZGFtZW50YWwgY2xhc3NlczoKLQotPG9sPgotPGxpPntAbGluayBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdH0gaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGFsbCBYTUwgQmVhbnMuCi08bGk+e0BsaW5rIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0LkZhY3Rvcnl9IGlzIHVzZWQgdG8gbG9hZCBhbmQgY3JlYXRlIFhNTCBCZWFuIGluc3RhbmNlcy4KLUVhY2ggWE1MIEJlYW4gY2xhc3MgaGFzIGl0cyBvd24gbmVzdGVkIGZhY3RvcnkgY2xhc3MuCi08bGk+e0BsaW5rIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yfSBpcyBhbiBlZmZpY2llbnQgdHJlZXdhbGtpbmcgQVBJIGZvciB0aGUgZnVsbCBYTUwgaW5mb3NldC4KLTxsaT57QGxpbmsgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlfSBpcyB0aGUgdHlwZSBtZXRhZGF0YSBpbnRlcmZhY2UgZm9yIFhNTCBTY2hlbWEgdHlwZXMKLTxsaT57QGxpbmsgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxCZWFuc30gcHJvdmlkZXMgYSBjb2xsZWN0aW9uIG9mIHV0aWxpdHkgZnVuY3Rpb25zLgotPC9vbD4KLQotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHNjaGVtYS9zY2hlbWEvWE1MLnhzZCBiL3YyL3NyYy94bWxzY2hlbWEvc2NoZW1hL1hNTC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmOGFkZDkuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHNjaGVtYS9zY2hlbWEvWE1MLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCc/PgotPCFET0NUWVBFIHhzOnNjaGVtYSBQVUJMSUMgIi0vL1czQy8vRFREIFhNTFNDSEVNQSAyMDAxMDIvL0VOIiAiWE1MU2NoZW1hLmR0ZCIgPgotPHhzOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWw6bGFuZz0iZW4iPgotCi0gPHhzOmFubm90YXRpb24+Ci0gIDx4czpkb2N1bWVudGF0aW9uPgotICAgU2VlIGh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZS5odG1sIGFuZAotICAgaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbCBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBuYW1lc3BhY2UuCi0gIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSA8L3hzOmFubm90YXRpb24+Ci0KLSA8eHM6YW5ub3RhdGlvbj4KLSAgPHhzOmRvY3VtZW50YXRpb24+VGhpcyBzY2hlbWEgZGVmaW5lcyBhdHRyaWJ1dGVzIGFuZCBhbiBhdHRyaWJ1dGUgZ3JvdXAKLSAgICAgICAgc3VpdGFibGUgZm9yIHVzZSBieQotICAgICAgICBzY2hlbWFzIHdpc2hpbmcgdG8gYWxsb3cgeG1sOmJhc2UsIHhtbDpsYW5nIG9yIHhtbDpzcGFjZSBhdHRyaWJ1dGVzCi0gICAgICAgIG9uIGVsZW1lbnRzIHRoZXkgZGVmaW5lLgotCi0gICAgICAgIFRvIGVuYWJsZSB0aGlzLCBzdWNoIGEgc2NoZW1hIG11c3QgaW1wb3J0IHRoaXMgc2NoZW1hCi0gICAgICAgIGZvciB0aGUgWE1MIG5hbWVzcGFjZSwgZS5nLiBhcyBmb2xsb3dzOgotICAgICAgICAmbHQ7c2NoZW1hIC4gLiAuPgotICAgICAgICAgLiAuIC4KLSAgICAgICAgICZsdDtpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCi0gICAgICAgICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzAzL3htbC54c2QiLz4KLQotICAgICAgICBTdWJzZXF1ZW50bHksIHF1YWxpZmllZCByZWZlcmVuY2UgdG8gYW55IG9mIHRoZSBhdHRyaWJ1dGVzCi0gICAgICAgIG9yIHRoZSBncm91cCBkZWZpbmVkIGJlbG93IHdpbGwgaGF2ZSB0aGUgZGVzaXJlZCBlZmZlY3QsIGUuZy4KLQotICAgICAgICAmbHQ7dHlwZSAuIC4gLj4KLSAgICAgICAgIC4gLiAuCi0gICAgICAgICAmbHQ7YXR0cmlidXRlR3JvdXAgcmVmPSJ4bWw6c3BlY2lhbEF0dHJzIi8+Ci0gCi0gICAgICAgICB3aWxsIGRlZmluZSBhIHR5cGUgd2hpY2ggd2lsbCBzY2hlbWEtdmFsaWRhdGUgYW4gaW5zdGFuY2UKLSAgICAgICAgIGVsZW1lbnQgd2l0aCBhbnkgb2YgdGhvc2UgYXR0cmlidXRlczwveHM6ZG9jdW1lbnRhdGlvbj4KLSA8L3hzOmFubm90YXRpb24+Ci0KLSA8eHM6YW5ub3RhdGlvbj4KLSAgPHhzOmRvY3VtZW50YXRpb24+SW4ga2VlcGluZyB3aXRoIHRoZSBYTUwgU2NoZW1hIFdHJ3Mgc3RhbmRhcmQgdmVyc2lvbmluZwotICAgcG9saWN5LCB0aGlzIHNjaGVtYSBkb2N1bWVudCB3aWxsIHBlcnNpc3QgYXQKLSAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDMveG1sLnhzZC4KLSAgIEF0IHRoZSBkYXRlIG9mIGlzc3VlIGl0IGNhbiBhbHNvIGJlIGZvdW5kIGF0Ci0gICBodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2QuCi0gICBUaGUgc2NoZW1hIGRvY3VtZW50IGF0IHRoYXQgVVJJIG1heSBob3dldmVyIGNoYW5nZSBpbiB0aGUgZnV0dXJlLAotICAgaW4gb3JkZXIgdG8gcmVtYWluIGNvbXBhdGlibGUgd2l0aCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgWE1MIFNjaGVtYQotICAgaXRzZWxmLiAgSW4gb3RoZXIgd29yZHMsIGlmIHRoZSBYTUwgU2NoZW1hIG5hbWVzcGFjZSBjaGFuZ2VzLCB0aGUgdmVyc2lvbgotICAgb2YgdGhpcyBkb2N1bWVudCBhdAotICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIHdpbGwgY2hhbmdlCi0gICBhY2NvcmRpbmdseTsgdGhlIHZlcnNpb24gYXQKLSAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDMveG1sLnhzZCB3aWxsIG5vdCBjaGFuZ2UuCi0gIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSA8L3hzOmFubm90YXRpb24+Ci0KLSA8eHM6YXR0cmlidXRlIG5hbWU9ImxhbmciIHR5cGU9InhzOmxhbmd1YWdlIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbj5JbiBkdWUgY291cnNlLCB3ZSBzaG91bGQgaW5zdGFsbCB0aGUgcmVsZXZhbnQgSVNPIDItIGFuZCAzLWxldHRlcgotICAgICAgICAgY29kZXMgYXMgdGhlIGVudW1lcmF0ZWQgcG9zc2libGUgdmFsdWVzIC4gLiAuPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czphdHRyaWJ1dGU+Ci0KLSA8eHM6YXR0cmlidXRlIG5hbWU9InNwYWNlIiBkZWZhdWx0PSJwcmVzZXJ2ZSI+Ci0gIDx4czpzaW1wbGVUeXBlPgotICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5DTmFtZSI+Ci0gICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJkZWZhdWx0Ii8+Ci0gICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwcmVzZXJ2ZSIvPgotICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotIDwveHM6YXR0cmlidXRlPgotCi0gPHhzOmF0dHJpYnV0ZSBuYW1lPSJiYXNlIiB0eXBlPSJ4czphbnlVUkkiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPlNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi94bWxiYXNlLyBmb3IKLSAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgYXR0cmlidXRlLjwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotIDwveHM6YXR0cmlidXRlPgotCi0gPHhzOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InNwZWNpYWxBdHRycyI+Ci0gIDx4czphdHRyaWJ1dGUgcmVmPSJ4bWw6YmFzZSIvPgotICA8eHM6YXR0cmlidXRlIHJlZj0ieG1sOmxhbmciLz4KLSAgPHhzOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIvPgotIDwveHM6YXR0cmlidXRlR3JvdXA+Ci0KLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHN0b3JlL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zdG9yZS9DdXJzb3IuamF2YSBiL3YyL3NyYy94bWxzdG9yZS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc3RvcmUvQ3Vyc29yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMjIzMmEuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHN0b3JlL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zdG9yZS9DdXJzb3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzNDEgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cwotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvcgotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc3RvcmU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlhNTENoYXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5HbG9iYWxMb2NrOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zdG9yZS5Sb290LkNoYW5nZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zdG9yZS5TYXZlci5YbWxJbnB1dFN0cmVhbUltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnN0b3JlLlNwbGF5LkFubm90YXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnN0b3JlLlNwbGF5LkF0dHI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnN0b3JlLlNwbGF5LkJlZ2luOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zdG9yZS5TcGxheS5Db21tZW50OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zdG9yZS5TcGxheS5DdXJzb3JHb29iZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnN0b3JlLlNwbGF5Lkdvb2JlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc3RvcmUuU3BsYXkuUHJvY2luc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnN0b3JlLlNwbGF5LlhtbG5zOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yLkNoYW5nZVN0YW1wOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yLlRva2VuVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbExpbmVOdW1iZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRG9jdW1lbnRQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sUnVudGltZUV4Y2VwdGlvbjsKLQotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkNvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLk5hbWVzcGFjZUNvbnRleHQ7Ci1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5Mb2NhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyOwotaW1wb3J0IG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcjsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbTsKLQotcHVibGljIGZpbmFsIGNsYXNzIEN1cnNvciBpbXBsZW1lbnRzIFhtbEN1cnNvciwgQ2hhbmdlTGlzdGVuZXIKLXsKLSAgICBDdXJzb3IgKCBSb290IHIsIFNwbGF5IHMgKSAgICAgICAgeyBhc3NlcnQgcyAhPSBudWxsOyBfZ29vYmVyID0gbmV3IEN1cnNvckdvb2JlciggciApOyBzZXQoIHMgKTsgfQotICAgIEN1cnNvciAoIFJvb3QgciwgU3BsYXkgcywgaW50IHAgKSB7IGFzc2VydCBzICE9IG51bGw7IF9nb29iZXIgPSBuZXcgQ3Vyc29yR29vYmVyKCByICk7IHNldCggcywgcCApOyB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBmaW5hbGl6ZSAoICkKLSAgICB7Ci0gICAgICAgIFNwbGF5IHMgPSBnZXRTcGxheSgpOwotCi0gICAgICAgIGlmIChzICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRpc3Bvc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vCi0gICAgLy8KLSAgICAvLwotCi0gICAgcHVibGljIE9iamVjdCBtb25pdG9yKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXRSb290KCk7Ci0gICAgfQotCi0gICAgUm9vdCAgZ2V0Um9vdCAoICkgeyByZXR1cm4gX2dvb2Jlci5nZXRSb290KCk7IH0KLQotICAgIFNwbGF5IGdldFNwbGF5ICggKSB7IHJldHVybiBfZ29vYmVyLmdldFNwbGF5KCk7IH0KLSAgICBpbnQgICBnZXRQb3MgICAoICkgeyByZXR1cm4gX2dvb2Jlci5nZXRQb3MoKTsgfQotCi0gICAgdm9pZCBzZXQgKCBTcGxheSBzLCBpbnQgcCApIHsgX2dvb2Jlci5zZXQoIHMsIHAgKTsgfQotICAgIHZvaWQgc2V0ICggU3BsYXkgcyAgICAgICAgKSB7IF9nb29iZXIuc2V0KCBzLCAwICk7IH0KLSAgICB2b2lkIHNldCAoIGludCBwICAgICAgICAgICkgeyBfZ29vYmVyLnNldCggcCApOyB9Ci0gICAgdm9pZCBzZXQgKCBHb29iZXIgZyAgICAgICApIHsgX2dvb2Jlci5zZXQoIGcgKTsgfQotCi0gICAgaW50IGdldFBvc3RDY2ggKCApCi0gICAgewotICAgICAgICBpbnQgcCA9IGdldFBvcygpOwotCi0gICAgICAgIGlmIChwID09IDApCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBTcGxheSBzID0gZ2V0U3BsYXkoKTsKLQotICAgICAgICBpbnQgcGEgPSBzLmdldFBvc0FmdGVyKCk7Ci0KLSAgICAgICAgYXNzZXJ0IHAgPj0gcGEgfHwgcy5pc0xlYWYoKTsKLQotICAgICAgICByZXR1cm4gcCA+PSBwYSA/IHMuZ2V0Q2NoQWZ0ZXIoKSAtIHAgKyBwYSA6IHMuZ2V0UG9zTGVhZkVuZCgpIC0gcDsKLSAgICB9Ci0KLSAgICBpbnQgZ2V0UHJlQ2NoICggKQotICAgIHsKLSAgICAgICAgLy8gVE9ETyAtIHF1aWNrIGFuZCBkaXJ0eSBpbXBsLCBpbXByb3ZlCi0KLSAgICAgICAgU3BsYXkgc09yaWcgPSBnZXRTcGxheSgpOwotICAgICAgICBpbnQgICBwT3JpZyA9IGdldFBvcygpOwotCi0gICAgICAgIGludCBuID0gdG9QcmV2Q2hhciggLTEgKTsKLQotICAgICAgICBzZXQoIHNPcmlnLCBwT3JpZyApOwotCi0gICAgICAgIHJldHVybiBuOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBjaGVja0Rpc3Bvc2VkICggKQotICAgIHsKLSAgICAgICAgY2hlY2tEaXNwb3NlZCggdGhpcyApOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgY2hlY2tEaXNwb3NlZCAoIEN1cnNvciBjICkKLSAgICB7Ci0gICAgICAgIGlmIChjLmlzRGlzcG9zZWQoKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oICJDdXJzb3IgaGFzIGJlZW4gZGlzcG9zZWQiICk7Ci0gICAgfQotCi0gICAgYm9vbGVhbiBpc0Rpc3Bvc2VkICggKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdldFNwbGF5KCkgPT0gbnVsbDsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIFhtbEN1cnNvciBNZXRob2RzCi0gICAgLy8KLQotICAgIHB1YmxpYyB2b2lkIGRpc3Bvc2UgKCApCi0gICAgewotICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWlzRGlzcG9zZWQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjbGVhclNlbGVjdGlvbnMoKTsKLQotICAgICAgICAgICAgICAgIGlmIChfc3RhY2sgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgX3N0YWNrLmRpc3Bvc2UoKTsKLQotICAgICAgICAgICAgICAgIHNldCggKFNwbGF5KSBudWxsICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgWG1sT2JqZWN0IGdldE9iamVjdCAoICkKLSAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoIG1vbml0b3IoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgICAgICAgICAgUm9vdCByID0gZ2V0Um9vdCgpOwotCi0gICAgICAgICAgICBpZiAoZ2V0UG9zKCkgPiAwKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgICAgICBTcGxheSBzID0gZ2V0U3BsYXkoKTsKLQotICAgICAgICAgICAgaWYgKCFzLmlzVHlwZWFibGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAgICAgVHlwZSB0ID0gcy5nZXRUeXBlKCByICk7Ci0KLSAgICAgICAgICAgIGFzc2VydCB0ICE9IG51bGw7Ci0KLSAgICAgICAgICAgIFhtbE9iamVjdCByZXN1bHQgPSB0LmdldFhtbE9iamVjdCgpOwotICAgICAgICAgICAgYXNzZXJ0IHJlc3VsdCAhPSBudWxsOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHRvQ3Vyc29yICggWG1sQ3Vyc29yIG1vdmVUbyApCi0gICAgewotICAgICAgICBpZiAobW92ZVRvID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCAiSW52YWxpZCBkZXN0aW5hdGlvbiBjdXJzb3IiICk7Ci0KLSAgICAgICAgaWYgKG1vbml0b3IoKSA9PSBtb3ZlVG8ubW9uaXRvcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiB0b0N1cnNvckltcGwoIG1vdmVUbyApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbGVhbiBhY3F1aXJlZCA9IGZhbHNlOwotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgR2xvYmFsTG9jay5hY3F1aXJlKCk7Ci0gICAgICAgICAgICAgICAgYWNxdWlyZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoIG1vbml0b3IoKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1vdmVUby5tb25pdG9yKCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdsb2JhbExvY2sucmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWNxdWlyZWQgPSBmYWxzZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvQ3Vyc29ySW1wbCggbW92ZVRvICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWG1sUnVudGltZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbGx5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGFjcXVpcmVkKQotICAgICAgICAgICAgICAgICAgICBHbG9iYWxMb2NrLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiB0b0N1cnNvckltcGwgKCBYbWxDdXJzb3IgbW92ZVRvICkKLSAgICB7Ci0gICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgICAgICBDdXJzb3IgYyA9IG51bGw7Ci0KLSAgICAgICAgaWYgKG1vdmVUbyBpbnN0YW5jZW9mIEN1cnNvcikKLSAgICAgICAgewotICAgICAgICAgICAgYyA9IChDdXJzb3IpIG1vdmVUbzsKLQotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCggYyApOwotCi0gICAgICAgICAgICBpZiAoYy5nZXRSb290KCkgIT0gZ2V0Um9vdCgpKQotICAgICAgICAgICAgICAgIGMgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGMgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBzZXQoIGMuX2dvb2JlciApOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHB1YmxpYyBYbWxEb2N1bWVudFByb3BlcnRpZXMgZG9jdW1lbnRQcm9wZXJ0aWVzICggKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICByZXR1cm4gZ2V0Um9vdCgpLmRvY3VtZW50UHJvcGVydGllcygpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFhtbEN1cnNvciBuZXdDdXJzb3IgKCApCi0gICAgeyAgIAotICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcgQ3Vyc29yKCBnZXRSb290KCksIGdldFNwbGF5KCksIGdldFBvcygpICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB0b0Jvb2ttYXJrICggWG1sQm9va21hcmsgYm0gKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICBpZiAoYm0gPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmICghKGJtLl9jdXJyZW50TWFyayBpbnN0YW5jZW9mIEFubm90YXRpb24pKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgQW5ub3RhdGlvbiBhID0gKEFubm90YXRpb24pIGJtLl9jdXJyZW50TWFyazsKLQotICAgICAgICAgICAgaWYgKGEuZ2V0Um9vdCgpICE9IGdldFJvb3QoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGFzc2VydCBhLmdldFNwbGF5KCkgIT0gbnVsbDsKLQotICAgICAgICAgICAgc2V0KCBhICk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFhtbEJvb2ttYXJrIHRvTmV4dEJvb2ttYXJrICggT2JqZWN0IGtleSApCi0gICAgewotICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgICAgIGlmIChrZXkgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAgICAgU3BsYXkgc09yaWcgPSBnZXRTcGxheSgpOwotICAgICAgICAgICAgaW50ICAgcE9yaWcgPSBnZXRQb3MoKTsKLQotICAgICAgICAgICAgVG9rZW5UeXBlIHR0ID0gY3VycmVudFRva2VuVHlwZSgpOwotCi0gICAgICAgICAgICAvLyBBZHZhbmNlIHRoZSBjdXJzb3IgcGFzdCB0aGUgY3VycmVudCBzcG90IGJ5IHRoZSBtaW5pbXVuIGFtb3VudAotCi0gICAgICAgICAgICBpZiAodHQuaXNUZXh0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdG9OZXh0Q2hhciggMSApOwotICAgICAgICAgICAgICAgIHR0ID0gY3VycmVudFRva2VuVHlwZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoKHR0ID0gdG9OZXh0VG9rZW4oKSkuaXNOb25lKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc2V0KCBzT3JpZywgcE9yaWcgKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICggOyA7ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBYbWxCb29rbWFyayBibSA9IGdldEJvb2ttYXJrKCBrZXkgKTsKLQotICAgICAgICAgICAgICAgIGlmIChibSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm07Ci0KLSAgICAgICAgICAgICAgICBpbnQgcG9zdENjaDsKLQotICAgICAgICAgICAgICAgIGlmICh0dC5pc1RleHQoKSAmJiAocG9zdENjaCA9IGdldFBvc3RDY2goKSkgPiAxKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3BsYXkgcyA9IGdldFNwbGF5KCk7Ci0gICAgICAgICAgICAgICAgICAgIGludCAgIHAgPSBnZXRQb3MoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50ICAgZCA9IHBvc3RDY2g7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICggR29vYmVyIGcgPSBzLmZpcnN0R29vYmVyKCkgOyBnICE9IG51bGwgOwotICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gcy5uZXh0R29vYmVyKCBnICkgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGlzdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIFhtbEJvb2ttYXJrIG1hcms7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnLmlzQW5ub3RhdGlvbigpICYmIChkaXN0ID0gZy5nZXRQb3MoKSAtIHApID4gMSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0IDwgZCAmJiAobWFyayA9IGcuZ2V0Qm9va21hcmsoKSkgIT0gbnVsbCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyay5nZXRLZXkoKS5lcXVhbHMoIGtleSApKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJtID0gbWFyazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gZGlzdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChibSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXQoIHMsIHAgKyBkICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm07Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoKHR0ID0gdG9OZXh0VG9rZW4oKSkuaXNOb25lKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzZXQoIHNPcmlnLCBwT3JpZyApOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgWG1sQm9va21hcmsgdG9QcmV2Qm9va21hcmsgKCBPYmplY3Qga2V5ICkKLSAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoIG1vbml0b3IoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgICAgICAgICAgaWYgKGtleSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgICAgICBTcGxheSBzT3JpZyA9IGdldFNwbGF5KCk7Ci0gICAgICAgICAgICBpbnQgICBwT3JpZyA9IGdldFBvcygpOwotCi0gICAgICAgICAgICBUb2tlblR5cGUgdHQgPSBwcmV2VG9rZW5UeXBlKCk7Ci0KLSAgICAgICAgICAgIC8vIFJldHJlYXQgdGhlIGN1cnNvciBwYXN0IHRoZSBjdXJyZW50IHNwb3QgYnkgdGhlIG1pbmltdW4gYW1vdW50Ci0KLSAgICAgICAgICAgIGlmICh0dC5pc1RleHQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0b1ByZXZDaGFyKCAxICk7Ci0gICAgICAgICAgICAgICAgdHQgPSBwcmV2VG9rZW5UeXBlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh0b1ByZXZUb2tlbigpLmlzTm9uZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNldCggc09yaWcsIHBPcmlnICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdHQgPSBwcmV2VG9rZW5UeXBlKCk7Ci0KLSAgICAgICAgICAgIGZvciAoIDsgOyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgWG1sQm9va21hcmsgYm0gPSBnZXRCb29rbWFyaygga2V5ICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoYm0gIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJtOwotCi0gICAgICAgICAgICAgICAgaW50IHByZUNjaDsKLQotICAgICAgICAgICAgICAgIGlmICh0dC5pc1RleHQoKSAmJiAocHJlQ2NoID0gZ2V0UHJlQ2NoKCkpID4gMSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFNwbGF5IHM7Ci0gICAgICAgICAgICAgICAgICAgIGludCAgIHA7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGdldFBvcygpID09IDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBnZXRTcGxheSgpLnByZXZOb25BdHRyU3BsYXkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBzLmdldEVuZFBvcygpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGdldFNwbGF5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwID0gZ2V0UG9zKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpbnQgZCA9IHByZUNjaDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKCBHb29iZXIgZyA9IHMuZmlyc3RHb29iZXIoKSA7IGcgIT0gbnVsbCA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBzLm5leHRHb29iZXIoIGcgKSApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaXN0OwotICAgICAgICAgICAgICAgICAgICAgICAgWG1sQm9va21hcmsgbWFyazsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGcuaXNBbm5vdGF0aW9uKCkgJiYgKGRpc3QgPSBwIC0gZy5nZXRQb3MoKSkgPiAxICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPCBkICYmIChtYXJrID0gZy5nZXRCb29rbWFyaygpKSAhPSBudWxsICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrLmdldEtleSgpLmVxdWFscygga2V5ICkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm0gPSBtYXJrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBkaXN0OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGJtICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldCggcywgcCAtIGQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBibTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0dC5pc1RleHQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRvUHJldkNoYXIoIC0xICk7Ci0gICAgICAgICAgICAgICAgICAgIHR0ID0gcHJldlRva2VuVHlwZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0b1ByZXZUb2tlbigpLmlzTm9uZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc2V0KCBzT3JpZywgcE9yaWcgKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdHQgPSBwcmV2VG9rZW5UeXBlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgVG9rZW5UeXBlIGN1cnJlbnRUb2tlblR5cGUgKCApCi0gICAgewotICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBnZXRTcGxheSgpLmdldFRva2VuVHlwZSggZ2V0UG9zKCkgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzU3RhcnRkb2MgICggKSB7IHJldHVybiBjdXJyZW50VG9rZW5UeXBlKCkuaXNTdGFydGRvYygpOyB9Ci0gICAgcHVibGljIGJvb2xlYW4gaXNFbmRkb2MgICAgKCApIHsgcmV0dXJuIGN1cnJlbnRUb2tlblR5cGUoKS5pc0VuZGRvYygpOyB9Ci0gICAgcHVibGljIGJvb2xlYW4gaXNTdGFydCAgICAgKCApIHsgcmV0dXJuIGN1cnJlbnRUb2tlblR5cGUoKS5pc1N0YXJ0KCk7IH0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0VuZCAgICAgICAoICkgeyByZXR1cm4gY3VycmVudFRva2VuVHlwZSgpLmlzRW5kKCk7IH0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1RleHQgICAgICAoICkgeyByZXR1cm4gY3VycmVudFRva2VuVHlwZSgpLmlzVGV4dCgpOyB9Ci0gICAgcHVibGljIGJvb2xlYW4gaXNBdHRyICAgICAgKCApIHsgcmV0dXJuIGN1cnJlbnRUb2tlblR5cGUoKS5pc0F0dHIoKTsgfQotICAgIHB1YmxpYyBib29sZWFuIGlzTmFtZXNwYWNlICggKSB7IHJldHVybiBjdXJyZW50VG9rZW5UeXBlKCkuaXNOYW1lc3BhY2UoKTsgfQotICAgIHB1YmxpYyBib29sZWFuIGlzQ29tbWVudCAgICggKSB7IHJldHVybiBjdXJyZW50VG9rZW5UeXBlKCkuaXNDb21tZW50KCk7IH0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1Byb2NpbnN0ICAoICkgeyByZXR1cm4gY3VycmVudFRva2VuVHlwZSgpLmlzUHJvY2luc3QoKTsgfQotICAgIHB1YmxpYyBib29sZWFuIGlzQ29udGFpbmVyICggKSB7IHJldHVybiBjdXJyZW50VG9rZW5UeXBlKCkuaXNDb250YWluZXIoKTsgfQotICAgIHB1YmxpYyBib29sZWFuIGlzRmluaXNoICAgICggKSB7IHJldHVybiBjdXJyZW50VG9rZW5UeXBlKCkuaXNGaW5pc2goKTsgfQotICAgIHB1YmxpYyBib29sZWFuIGlzQW55QXR0ciAgICggKSB7IHJldHVybiBjdXJyZW50VG9rZW5UeXBlKCkuaXNBbnlBdHRyKCk7IH0KLQotICAgIHB1YmxpYyBUb2tlblR5cGUgcHJldlRva2VuVHlwZSAoICkKLSAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoIG1vbml0b3IoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgICAgICAgICAgLy8gVE9ETyAtIHF1aWNrIGFuZCBkaXJ0eSBpbXBsZW1lbnRhdGlvbiwgaW1wcm92ZQotCi0gICAgICAgICAgICBTcGxheSBzT3JpZyA9IGdldFNwbGF5KCk7Ci0gICAgICAgICAgICBpbnQgICBwT3JpZyA9IGdldFBvcygpOwotCi0gICAgICAgICAgICBUb2tlblR5cGUgdHQ7Ci0KLSAgICAgICAgICAgIGlmICh0b1ByZXZDaGFyKCAxICkgPT0gMSkKLSAgICAgICAgICAgICAgICB0dCA9IFRva2VuVHlwZS5URVhUOwotICAgICAgICAgICAgZWxzZSBpZiAoISh0dCA9IHRvUHJldlRva2VuKCkpLmlzTm9uZSgpKQotICAgICAgICAgICAgICAgIHR0ID0gY3VycmVudFRva2VuVHlwZSgpOwotCi0gICAgICAgICAgICBzZXQoIHNPcmlnLCBwT3JpZyApOwotCi0gICAgICAgICAgICByZXR1cm4gdHQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgVG9rZW5UeXBlIHRvTmV4dFRva2VuICggKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICBTcGxheSBvcyA9IGdldFNwbGF5KCk7IC8vIE9yaWduYWwgc3BsYXkKLSAgICAgICAgICAgIFNwbGF5IHMgPSBvczsKLSAgICAgICAgICAgIGludCAgIHAgPSBnZXRQb3MoKTsKLQotICAgICAgICAgICAgaWYgKHAgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAocy5pc1Jvb3QoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRva2VuVHlwZS5OT05FOwotCi0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAvLyBMb29rIHNlZSBpZiB0aGVyZSBpcyBhbiBhdHRyIHdlIHNob3VsZCB2aXNpdCBiZWZvcmUgdmlzaXRpbmcKLSAgICAgICAgICAgICAgICAvLyBhbnkgZm9sbG93aW5nIGNvbnRlbnQgaW4gdGhpcyBjb250YWluZXIuCi0gICAgICAgICAgICAgICAgLy8KLQotICAgICAgICAgICAgICAgIGlmIChzLmlzQ29udGFpbmVyKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTcGxheSB0ID0gcy5uZXh0U3BsYXkoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAodC5pc0F0dHIoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc2V0KCB0LCAwICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRva2VuVHlwZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgLy8gTm93IHdlJ3JlIGdvaW5nIGludG8gdGhlIGNvbnRlbnQgb2YgdGhpcyBjb250YWluZXIuICBGbHVzaAotICAgICAgICAgICAgICAgICAgICAvLyBvdXQgYW55IGNhY2hlZCB0eXBlIHZhbHVlLgotICAgICAgICAgICAgICAgICAgICAvLwotCi0gICAgICAgICAgICAgICAgICAgIHMuZW5zdXJlQ29udGVudFZhbGlkKCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHMuZ2V0TWF4UG9zKCkgPiAwKQotICAgICAgICAgICAgICAgICAgICBwID0gMTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzID0gcy5uZXh0U3BsYXkoKTsKLSAgICAgICAgICAgICAgICAgICAgcCA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFzc2VydCBwID4gMDsKLSAgICAgICAgICAgICAgICBhc3NlcnQgIXMuaXNSb290KCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAocCA+PSBzLmdldFBvc0FmdGVyKCkgJiYgcy5nZXRDY2hBZnRlcigpID4gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHMgPSBzLm5leHRTcGxheSgpOwotICAgICAgICAgICAgICAgICAgICBwID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHMuaXNMZWFmKCk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydCBwIDwgcy5nZXRQb3NBZnRlcigpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChwICE9IHMuZ2V0UG9zTGVhZkVuZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHMuZ2V0UG9zTGVhZkVuZCgpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzLmdldENjaEFmdGVyKCkgPiAwKQotICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHMuZ2V0UG9zQWZ0ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzID0gcy5uZXh0U3BsYXkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gSWYgd2UgYXJlIHRyYW5zaXRpb25pbmcgZnJvbSBhbiBhdHRyIHRvIGEgbm9uIGF0dHIsIHNlZSBpZiB0aGVyZQotICAgICAgICAgICAgLy8gaXMgY29udGVudCBpbiBhIERPQyBvciBCRUdJTiB3aGljaCBuZWVkcyB0byBiZSB2aXNpdGVkIGFmdGVyCi0gICAgICAgICAgICAvLyB0aGUgYXR0cmlidXRlcy4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBBbHNvLCBpZiB3ZSBhcmUgdHJhbnNpdGlvbmluZyBmcm9tIGFuIGF0dHIgY29udGFpbmVyIChCRUdJTiBvcgotICAgICAgICAgICAgLy8gRE9DKSB0byBhbiBhdHRyLCB3aGVyZSB0aGUgYXR0ciBjb250YWluZXIgaGFzIGludGVyaW9yIGNvbnRlbnQsCi0gICAgICAgICAgICAvLyB3ZSBoYXZlIGFscmVhZHkgdmlzaXRlZCB0aGUgYXR0cnMgYW5kIG11c3Qgc2tpcCB0aGVtIG5vdy4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBBbHNvLCBpZiB3ZSBhcmUgdHJhbnNpdGlvbmluZyBmcm9tIHBvcyAwIHRvIHBvcyAxIG9uIGFuIGF0dHIKLSAgICAgICAgICAgIC8vIGNvbnRhaW5lciwgd2UgbmVlZCB0byB2aXNpdCBhbnkgYXR0cmlidXRlcyBiZWZvcmUgdmlzaXRpbmcgdGhlCi0gICAgICAgICAgICAvLyBpbnRlcmlvciBjb250ZW50IG9mIHRoZSBhdHRyIGNvbnRhaW5lci4KLSAgICAgICAgICAgIC8vCi0KLSAgICAgICAgICAgIGlmIChwID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzLmlzQXR0cigpICYmIG9zLmlzQXR0cigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3BsYXkgdCA9IG9zLnByZXZOb25BdHRyU3BsYXkoKTsKLQotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgdC5pc0NvbnRhaW5lcigpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgIC8vIFdlJ3JlIG5hdmlnYXRpbmcgdG8gdGhlIGNvbnRlbnQgb2YgYSBjb250YWluZXIuICBGbHVzaAotICAgICAgICAgICAgICAgICAgICAvLyBvdXQgYW55IGNhY2hlZCB0eXBlIHZhbHVlLgotICAgICAgICAgICAgICAgICAgICAvLwotCi0gICAgICAgICAgICAgICAgICAgIHQuZW5zdXJlQ29udGVudFZhbGlkKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHQuZ2V0TWF4UG9zKCkgPiAwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzID0gdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAxOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHMuaXNBdHRyKCkgJiYgIW9zLmlzQXR0cigpICYmIG9zLmdldE1heFBvcygpID4gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydCBvcy5pc0NvbnRhaW5lcigpOwotCi0gICAgICAgICAgICAgICAgICAgIHMgPSBzLm5leHROb25BdHRyU3BsYXkoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldCggcywgcCApOwotCi0gICAgICAgICAgICByZXR1cm4gY3VycmVudFRva2VuVHlwZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFRva2VuVHlwZSB0b1ByZXZUb2tlbiAoICkKLSAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoIG1vbml0b3IoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgIC8vIFRPRE8gLSBUaGlzIGNvZGUgaXMgbm90IGFzIGNvbXBhY3QgYXMgaXQgY2FuIGJlLCB0aGVyZSBpcyBzb21lIHJlZHVuZGFuY3kKLSAgICAvLyAtLSByZXRoaW5rIGl0IGxhdGVyIC4uLgotCi0gICAgICAgICAgICBTcGxheSBzID0gZ2V0U3BsYXkoKTsKLSAgICAgICAgICAgIGludCAgIHAgPSBnZXRQb3MoKTsKLQotICAgICAgICAgICAgaWYgKHAgPT0gMSAmJiBzLmlzSW52YWxpZCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFzc2VydCBzLmlzTGVhZigpOwotICAgICAgICAgICAgICAgIHAgKz0gcy5lbnN1cmVDb250ZW50VmFsaWQoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHAgPT0gMSAmJiBzLmlzQ29udGFpbmVyKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3BsYXkgdCA9IHMubmV4dFNwbGF5KCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodC5pc0F0dHIoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHMgPSB0OwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoIHQgPSB0Lm5leHRTcGxheSgpIDsgdC5pc0F0dHIoKSA7IHQgPSB0Lm5leHRTcGxheSgpICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHMgPSB0OwotCi0gICAgICAgICAgICAgICAgICAgIHNldCggcywgMCApOwotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50VG9rZW5UeXBlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocCA9PSAwICYmICFzLmlzQXR0cigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzLmlzRG9jKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBUb2tlblR5cGUuTk9ORTsKLQotICAgICAgICAgICAgICAgIFNwbGF5IHQgPSBzLnByZXZTcGxheSgpOwotCi0gICAgICAgICAgICAgICAgaWYgKHQuaXNBdHRyKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0ID0gdC5wcmV2Tm9uQXR0clNwbGF5KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHQuaXNDb250YWluZXIoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAodC5pc0RvYygpKQotICAgICAgICAgICAgICAgICAgICAgICAgdC5lbnN1cmVDb250ZW50VmFsaWQoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAodC5nZXRNYXhQb3MoKSA+IDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQuZ2V0Q2NoQWZ0ZXIoKSA+IDAgPyB0LmdldFBvc0FmdGVyKCkgOiB0LmdldE1heFBvcygpICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50VG9rZW5UeXBlKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChzLmlzQXR0cigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFzc2VydCBwID09IDA7Ci0KLSAgICAgICAgICAgICAgICBTcGxheSB0ID0gcy5wcmV2U3BsYXkoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdC5pc0F0dHIoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydCB0LmlzQ29udGFpbmVyKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc2V0KCB0LCAwICk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50VG9rZW5UeXBlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocCA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzLmlzRG9jKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBUb2tlblR5cGUuTk9ORTsKLQotICAgICAgICAgICAgICAgIHMgPSBzLnByZXZTcGxheSgpOwotCi0gICAgICAgICAgICAgICAgaWYgKHMuaXNEb2MoKSkKLSAgICAgICAgICAgICAgICAgICAgcy5lbnN1cmVDb250ZW50VmFsaWQoKTsKLQotICAgICAgICAgICAgICAgIHAgPSBzLmdldENjaEFmdGVyKCkgPiAwID8gcy5nZXRQb3NBZnRlcigpIDogcy5nZXRNYXhQb3MoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQgcCA+IDA7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0ICFzLmlzUm9vdCgpOwotCi0gICAgICAgICAgICAgICAgaW50IHBvc0FmdGVyID0gcy5nZXRQb3NBZnRlcigpOwotCi0gICAgICAgICAgICAgICAgaWYgKHAgPj0gcG9zQWZ0ZXIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgcy5nZXRDY2hBZnRlcigpID4gMDsKLSAgICAgICAgICAgICAgICAgICAgcCA9IHBvc0FmdGVyIC0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHMuaXNWYWxpZCgpOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgcy5pc0xlYWYoKTsKLQotICAgICAgICAgICAgICAgICAgICBwID0gcCA+IDEgJiYgcCA9PSBwb3NBZnRlciAtIDEgPyAxIDogMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldCggcywgcCApOwotCi0gICAgICAgICAgICByZXR1cm4gY3VycmVudFRva2VuVHlwZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW5zZXJ0Q2hhcnMgKCBTdHJpbmcgdGV4dCApCi0gICAgewotICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgICAgIFNwbGF5IHMgPSBnZXRTcGxheSgpOwotICAgICAgICAgICAgaW50ICAgcCA9IGdldFBvcygpOwotCi0gICAgICAgICAgICBpZiAocCA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzLmlzRG9jKCkgfHwgcy5pc0F0dHIoKSkKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiggIkludmFsaWQgbG9jYXRpb24gZm9yIHRleHQiICk7Ci0KLSAgICAgICAgICAgICAgICBzID0gcy5wcmV2Tm9uQXR0clNwbGF5KCk7Ci0gICAgICAgICAgICAgICAgcCA9IHMuZ2V0RW5kUG9zKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0ID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpbnQgY2NoID0gdGV4dC5sZW5ndGgoKTsKLQotICAgICAgICAgICAgaWYgKGNjaCA+IDApCi0gICAgICAgICAgICAgICAgcy5pbnNlcnRDaGFycyggcCwgZ2V0Um9vdCgpLCB0ZXh0LCAwLCBjY2ggKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgdmFsaWRhdGVMb2NhbE5hbWUgKCBRTmFtZSBuYW1lICkKLSAgICB7Ci0gICAgICAgIGlmIChuYW1lID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCAiUU5hbWUgaXMgbnVsbCIgKTsKLQotICAgICAgICB2YWxpZGF0ZUxvY2FsTmFtZSggbmFtZS5nZXRMb2NhbFBhcnQoKSApOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgdmFsaWRhdGVMb2NhbE5hbWUgKCBTdHJpbmcgbmFtZSApCi0gICAgewotICAgICAgICBpZiAobmFtZSA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIk5hbWUgaXMgbnVsbCIgKTsKLQotICAgICAgICBpZiAobmFtZS5sZW5ndGgoKSA9PSAwKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIk5hbWUgaXMgZW1wdHkiICk7Ci0KLSAgICAgICAgaWYgKCFYTUxDaGFyLmlzVmFsaWROQ05hbWUoIG5hbWUgKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oICJOYW1lIGlzIG5vdCB2YWxpZCIgKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHZhbGlkYXRlUHJlZml4ICggU3RyaW5nIG5hbWUgKQotICAgIHsKLSAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oICJQcmVmaXggaXMgbnVsbCIgKTsKLQotICAgICAgICBpZiAobmFtZS5sZW5ndGgoKSA9PSAwKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIlByZWZpeCBpcyBlbXB0eSIgKTsKLQotICAgICAgICBpZiAoU3BsYXkuYmVnaW5zV2l0aFhtbCggbmFtZSApKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIlByZWZpeCBiZWdpbnMgd2l0aCAneG1sJyIgKTsKLQotICAgICAgICBpZiAoIVhNTENoYXIuaXNWYWxpZE5DTmFtZSggbmFtZSApKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIlByZWZpeCBpcyBub3QgdmFsaWQiICk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGluc2VydEF0dHJpYnV0ZSAoIFFOYW1lIG5hbWUsIFN0cmluZyB2YWx1ZSApCi0gICAgewotICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgICAgIGluc2VydCggbmV3IEF0dHIoIG5hbWUgKSwgdmFsdWUgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGluc2VydEF0dHJpYnV0ZSAoIFN0cmluZyBuYW1lICkKLSAgICB7Ci0gICAgICAgIGluc2VydEF0dHJpYnV0ZVdpdGhWYWx1ZSggbmFtZSwgbnVsbCwgbnVsbCApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGluc2VydEF0dHJpYnV0ZSAoIFN0cmluZyBuYW1lLCBTdHJpbmcgdXJpICkKLSAgICB7Ci0gICAgICAgIGluc2VydEF0dHJpYnV0ZVdpdGhWYWx1ZSggbmFtZSwgdXJpLCBudWxsICk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW5zZXJ0QXR0cmlidXRlV2l0aFZhbHVlICggU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSApCi0gICAgewotICAgICAgICBpbnNlcnRBdHRyaWJ1dGVXaXRoVmFsdWUoIG5hbWUsIG51bGwsIHZhbHVlICk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW5zZXJ0QXR0cmlidXRlV2l0aFZhbHVlICgKLSAgICAgICAgU3RyaW5nIG5hbWUsIFN0cmluZyB1cmksIFN0cmluZyB2YWx1ZSApCi0gICAgewotICAgICAgICB2YWxpZGF0ZUxvY2FsTmFtZSggbmFtZSApOwotCi0gICAgICAgIGluc2VydEF0dHJpYnV0ZSggbmV3IFFOYW1lKCB1cmksIG5hbWUgKSwgdmFsdWUgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBpbnNlcnRBdHRyaWJ1dGUgKCBRTmFtZSBuYW1lICkKLSAgICB7Ci0gICAgICAgIHZhbGlkYXRlTG9jYWxOYW1lKCBuYW1lICk7Ci0KLSAgICAgICAgaW5zZXJ0QXR0cmlidXRlKCBuYW1lLCBudWxsICk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW5zZXJ0QXR0cmlidXRlV2l0aFZhbHVlICggUU5hbWUgbmFtZSwgU3RyaW5nIHZhbHVlICkKLSAgICB7Ci0gICAgICAgIHZhbGlkYXRlTG9jYWxOYW1lKCBuYW1lICk7Ci0KLSAgICAgICAgaW5zZXJ0QXR0cmlidXRlKCBuYW1lLCB2YWx1ZSApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGluc2VydE5hbWVzcGFjZSAoIFN0cmluZyBwcmVmaXgsIFN0cmluZyBuYW1lc3BhY2UgKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHByZWZpeCA9PSBudWxsKQotICAgICAgICAgICAgICAgIHByZWZpeCA9ICIiOwotICAgICAgICAgICAgZWxzZSBpZiAocHJlZml4Lmxlbmd0aCgpID4gMCkKLSAgICAgICAgICAgICAgICB2YWxpZGF0ZVByZWZpeCggcHJlZml4ICk7Ci0KLSAgICAgICAgICAgIGlmIChuYW1lc3BhY2UgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICBuYW1lc3BhY2UgPSAiIjsKLQotICAgICAgICAgICAgaWYgKG5hbWVzcGFjZS5sZW5ndGgoKSA9PSAwICYmIHByZWZpeC5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cKLSAgICAgICAgICAgICAgICAgICAgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBtYXAgYSBwcmVmaXggdG8gbm8gbmFtZXNwYWNlIiApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbnNlcnQoIG5ldyBYbWxucyggbmV3IFFOYW1lKCBuYW1lc3BhY2UsIHByZWZpeCApICksIG51bGwgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGluc2VydENvbW1lbnQgKCBTdHJpbmcgdmFsdWUgKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICBpbnNlcnQoIG5ldyBDb21tZW50KCksIHZhbHVlICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBpbnNlcnRQcm9jSW5zdCAoIFN0cmluZyB0YXJnZXQsIFN0cmluZyB2YWx1ZSApCi0gICAgewotICAgICAgICB2YWxpZGF0ZVByZWZpeCggdGFyZ2V0ICk7IC8vIHVzZWQgYmVjdWFzZSAiPD94bWwuLi4/PiBpcyBkaXNhbGxvd2VkCi0KLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICBpbnNlcnQoIG5ldyBQcm9jaW5zdCggdGFyZ2V0ICksIHZhbHVlICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBpbnNlcnRFbGVtZW50ICggU3RyaW5nIG5hbWUgKQotICAgIHsKLSAgICAgICAgaW5zZXJ0RWxlbWVudFdpdGhUZXh0KCBuYW1lLCBudWxsLCBudWxsICk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW5zZXJ0RWxlbWVudFdpdGhUZXh0ICggU3RyaW5nIG5hbWUsIFN0cmluZyB0ZXh0ICkKLSAgICB7Ci0gICAgICAgIGluc2VydEVsZW1lbnRXaXRoVGV4dCggbmFtZSwgbnVsbCwgdGV4dCApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGluc2VydEVsZW1lbnQgKCBTdHJpbmcgbmFtZSwgU3RyaW5nIHVyaSApCi0gICAgewotICAgICAgICBpbnNlcnRFbGVtZW50V2l0aFRleHQoIG5hbWUsIHVyaSwgbnVsbCApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGluc2VydEVsZW1lbnQgKCBRTmFtZSBuYW1lICkKLSAgICB7Ci0gICAgICAgIGluc2VydEVsZW1lbnRXaXRoVGV4dCggbmFtZSwgbnVsbCApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGJlZ2luRWxlbWVudCAoIFFOYW1lIG5hbWUgKQotICAgIHsKLSAgICAgICAgaW5zZXJ0RWxlbWVudCggbmFtZSApOwotICAgICAgICB0b1ByZXZUb2tlbigpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGJlZ2luRWxlbWVudCAoIFN0cmluZyBuYW1lICkKLSAgICB7Ci0gICAgICAgIGluc2VydEVsZW1lbnQoIG5hbWUgKTsKLSAgICAgICAgdG9QcmV2VG9rZW4oKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBiZWdpbkVsZW1lbnQgKCBTdHJpbmcgbmFtZSwgU3RyaW5nIHVyaSApCi0gICAgewotICAgICAgICBpbnNlcnRFbGVtZW50KCBuYW1lLCB1cmkgKTsKLSAgICAgICAgdG9QcmV2VG9rZW4oKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBpbnNlcnRFbGVtZW50V2l0aFRleHQgKCBRTmFtZSBuYW1lLCBTdHJpbmcgdGV4dCApCi0gICAgewotICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgICAgIHZhbGlkYXRlTG9jYWxOYW1lKCBuYW1lLmdldExvY2FsUGFydCgpICk7Ci0KLSAgICAgICAgICAgIEJlZ2luIGIgPSBuZXcgQmVnaW4oIG5hbWUsIG51bGwgKTsKLQotICAgICAgICAgICAgYi50b2dnbGVJc0xlYWYoKTsKLQotICAgICAgICAgICAgaW5zZXJ0KCBiLCB0ZXh0ICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBpbnNlcnRFbGVtZW50V2l0aFRleHQgKCBTdHJpbmcgbmFtZSwgU3RyaW5nIHVyaSwgU3RyaW5nIHRleHQgKQotICAgIHsKLSAgICAgICAgaW5zZXJ0RWxlbWVudFdpdGhUZXh0KCBuZXcgUU5hbWUoIHVyaSwgbmFtZSApLCB0ZXh0ICk7Ci0gICAgfQotCi0gICAgdm9pZCBpbnNlcnQgKCBTcGxheSBzSW5zZXJ0LCBTdHJpbmcgdmFsdWUgKQotICAgIHsKLSAgICAgICAgYXNzZXJ0ICFpc0Rpc3Bvc2VkKCk7Ci0gICAgICAgIGFzc2VydCBSb290LmR2ID4gMCB8fCBzSW5zZXJ0LmdldFJvb3RTbG93KCkgPT0gbnVsbDsKLSAgICAgICAgYXNzZXJ0IHNJbnNlcnQuZ2V0Q2NoKCkgPT0gMDsKLQotICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkKLSAgICAgICAgICAgIHNJbnNlcnQuYWRqdXN0Q2NoKCB2YWx1ZS5sZW5ndGgoKSApOwotCi0gICAgICAgIFNwbGF5IHMgPSBnZXRTcGxheSgpOwotICAgICAgICBpbnQgICBwID0gZ2V0UG9zKCk7Ci0KLSAgICAgICAgc0luc2VydC5jaGVja0luc2VydGlvblZhbGlkaXR5KCAwLCBzLCBwLCBmYWxzZSApOwotCi0gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKQotICAgICAgICAgICAgcy5pbnNlcnQoIGdldFJvb3QoKSwgcCwgc0luc2VydCwgdmFsdWUsIDAsIHZhbHVlLmxlbmd0aCgpLCB0cnVlICk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHMuaW5zZXJ0KCBnZXRSb290KCksIHAsIHNJbnNlcnQsIG51bGwsIDAsIDAsIHRydWUgKTsKLQotICAgICAgICBhc3NlcnQgdmFsaWRhdGUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFRleHRWYWx1ZSAoICkKLSAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoIG1vbml0b3IoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgICAgICAgICAgU3BsYXkgcyA9IGdldFNwbGF5KCk7Ci0KLSAgICAgICAgICAgIGlmIChnZXRQb3MoKSA+IDAgfHwgcy5pc0ZpbmlzaCgpIHx8IHMuaXNYbWxucygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICJDYW4ndCBnZXQgdGV4dCB2YWx1ZSwgY3VycmVudCB0b2tlbiBjYW4gaGF2ZSBubyB0ZXh0IHZhbHVlIiApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gZ2V0U3BsYXkoKS5nZXRUZXh0KCBnZXRSb290KCkgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0VGV4dFZhbHVlICggY2hhcltdIGJ1ZiwgaW50IG9mZiwgaW50IGNjaCApCi0gICAgewotLy8gICAgICAgIHN5bmNocm9uaXplZCAoIG1vbml0b3IoKSApCi0vLyAgICAgICAgewotLy8gICAgICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0vLwotLy8gICAgICAgICAgICBTcGxheSBzID0gZ2V0U3BsYXkoKTsKLS8vCi0vLyAgICAgICAgICAgIGlmIChnZXRQb3MoKSA+IDAgfHwgcy5pc0ZpbmlzaCgpIHx8IHMuaXNYbWxucygpKQotLy8gICAgICAgICAgICB7Ci0vLyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAotLy8gICAgICAgICAgICAgICAgICAgICJDYW4ndCBnZXQgdGV4dCB2YWx1ZSwgY3VycmVudCB0b2tlbiBjYW4gaGF2ZSBubyB0ZXh0IHZhbHVlIiApOwotLy8gICAgICAgICAgICB9Ci0vLwotLy8gICAgICAgICAgICByZXR1cm4gZ2V0U3BsYXkoKS5nZXRUZXh0KCBnZXRSb290KCkgKTsKLS8vICAgICAgICB9Ci0KLSAgICAgICAgLy8gSGFjayBpbXBsIGZvciBub3cKLQotICAgICAgICBTdHJpbmcgcyA9IGdldFRleHRWYWx1ZSgpOwotCi0gICAgICAgIGludCBuID0gcy5sZW5ndGgoKTsKLQotICAgICAgICBpZiAobiA+IGNjaCkKLSAgICAgICAgICAgIG4gPSBjY2g7Ci0KLSAgICAgICAgaWYgKG4gPD0gMCkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIHMuZ2V0Q2hhcnMoIDAsIG4sIGJ1Ziwgb2ZmICk7Ci0KLSAgICAgICAgcmV0dXJuIG47Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VGV4dFZhbHVlICggU3RyaW5nIHRleHQgKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICBTcGxheSBzID0gZ2V0U3BsYXkoKTsKLSAgICAgICAgICAgIGludCAgIHAgPSBnZXRQb3MoKTsKLQotICAgICAgICAgICAgaWYgKHAgPiAwIHx8IHMuaXNYbWxucygpIHx8IHMuaXNGaW5pc2goKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAiQ2FuJ3Qgc2V0IHRleHQgdmFsdWUsIGN1cnJlbnQgdG9rZW4gY2FuIGhhdmUgbm8gdGV4dCB2YWx1ZSIgKTsKLSAgICAgICAgICAgIH0KLQotCi0gICAgICAgICAgICBzLnNldFRleHQoIGdldFJvb3QoKSwgdGV4dCwgMCwgdGV4dCA9PSBudWxsID8gMCA6IHRleHQubGVuZ3RoKCkgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFRleHRWYWx1ZSAoIGNoYXJbXSBidWYsIGludCBvZmYsIGludCBsZW4gKQotICAgIHsKLSAgICAgICAgc2V0VGV4dFZhbHVlKCBTdHJpbmcuY29weVZhbHVlT2YoIGJ1Ziwgb2ZmLCBsZW4gKSApOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2hhcnMgKCApCi0gICAgewotICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgICAgIGludCBjY2ggPSAtMTsKLQotICAgICAgICAgICAgaW50IHBvc3RDY2ggPSBnZXRQb3N0Q2NoKCk7Ci0KLSAgICAgICAgICAgIGlmIChjY2ggPCAwIHx8IGNjaCA+IHBvc3RDY2gpCi0gICAgICAgICAgICAgICAgY2NoID0gcG9zdENjaDsKLQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgZ2V0Um9vdCgpLl90ZXh0LmZldGNoKAotICAgICAgICAgICAgICAgICAgICBnZXRTcGxheSgpLmdldENwRm9yUG9zKCBnZXRSb290KCksIGdldFBvcygpICksIGNjaCApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRDaGFycyAoIGNoYXJbXSBidWYsIGludCBvZmYsIGludCBjY2ggKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICBpbnQgcG9zdENjaCA9IGdldFBvc3RDY2goKTsKLQotICAgICAgICAgICAgaWYgKGNjaCA8IDAgfHwgY2NoID4gcG9zdENjaCkKLSAgICAgICAgICAgICAgICBjY2ggPSBwb3N0Q2NoOwotCi0gICAgICAgICAgICBpZiAoYnVmID09IG51bGwgfHwgb2ZmID49IGJ1Zi5sZW5ndGgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgIGlmIChidWYubGVuZ3RoIC0gb2ZmIDwgY2NoKQotICAgICAgICAgICAgICAgIGNjaCA9IGJ1Zi5sZW5ndGggLSBvZmY7Ci0KLSAgICAgICAgICAgIGdldFJvb3QoKS5fdGV4dC5mZXRjaCgKLSAgICAgICAgICAgICAgICBidWYsIG9mZiwgZ2V0U3BsYXkoKS5nZXRDcEZvclBvcyggZ2V0Um9vdCgpLCBnZXRQb3MoKSApLCBjY2ggKTsKLQotICAgICAgICAgICAgcmV0dXJuIGNjaDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEJvb2ttYXJrICggWG1sQm9va21hcmsgYW5ub3RhdGlvbiApCi0gICAgewotICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgICAgIGlmIChhbm5vdGF0aW9uID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBjbGVhckJvb2ttYXJrKCBhbm5vdGF0aW9uLmdldEtleSgpICk7Ci0KLSAgICAgICAgICAgIEFubm90YXRpb24gYSA9IG5ldyBBbm5vdGF0aW9uKCBnZXRSb290KCksIGFubm90YXRpb24gKTsKLQotICAgICAgICAgICAgaWYgKGEuX2tleSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oICJBbm5vdGF0aW9uIGtleSBpcyBudWxsIiApOwotCi0gICAgICAgICAgICBhLnNldCggX2dvb2JlciApOwotICAgICAgICAgICAgYW5ub3RhdGlvbi5fY3VycmVudE1hcmsgPSBhOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFhtbEJvb2ttYXJrIGdldEJvb2ttYXJrICggT2JqZWN0IGtleSApCi0gICAgewotICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgICAgIGlmIChrZXkgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAgICAgU3BsYXkgcyA9IGdldFNwbGF5KCk7Ci0gICAgICAgICAgICBpbnQgICBwID0gZ2V0UG9zKCk7Ci0KLSAgICAgICAgICAgIGZvciAoIEdvb2JlciBnID0gcy5maXJzdEdvb2JlcigpIDsgZyAhPSBudWxsIDsgZyA9IHMubmV4dEdvb2JlciggZyApICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoZy5nZXRLaW5kKCkgPT0gU3BsYXkuQU5OT1RBVElPTiAmJiBnLmdldFBvcygpID09IHApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBBbm5vdGF0aW9uIGEgPSAoQW5ub3RhdGlvbikgZzsKLQotICAgICAgICAgICAgICAgICAgICBYbWxCb29rbWFyayB4YSA9IGEuZ2V0WG1sQm9va21hcmsoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoeGEgIT0gbnVsbCAmJiBhLl9rZXkuZXF1YWxzKCBrZXkgKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4YTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgY2xlYXJCb29rbWFyayAoIE9iamVjdCBrZXkgKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICBpZiAoa2V5ID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBTcGxheSBzID0gZ2V0U3BsYXkoKTsKLSAgICAgICAgICAgIGludCAgIHAgPSBnZXRQb3MoKTsKLQotICAgICAgICAgICAgZm9yICggR29vYmVyIGcgPSBzLmZpcnN0R29vYmVyKCkgOyBnICE9IG51bGwgOyBnID0gcy5uZXh0R29vYmVyKCBnICkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChnLmdldEtpbmQoKSA9PSBTcGxheS5BTk5PVEFUSU9OICYmIGcuZ2V0UG9zKCkgPT0gcCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEFubm90YXRpb24gYSA9IChBbm5vdGF0aW9uKSBnOwotCi0gICAgICAgICAgICAgICAgICAgIFhtbEJvb2ttYXJrIHhhID0gYS5nZXRYbWxCb29rbWFyaygpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICh4YSAhPSBudWxsICYmIGEuX2tleS5lcXVhbHMoIGtleSApKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnLnNldCggbnVsbCwgMCApOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZ2V0QWxsQm9va21hcmtSZWZzICggQ29sbGVjdGlvbiBsaXN0VG9GaWxsICkKLSAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoIG1vbml0b3IoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgICAgICAgICAgaWYgKGxpc3RUb0ZpbGwgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIFNwbGF5IHMgPSBnZXRTcGxheSgpOwotICAgICAgICAgICAgaW50ICAgcCA9IGdldFBvcygpOwotCi0gICAgICAgICAgICBmb3IgKCBHb29iZXIgZyA9IHMuZmlyc3RHb29iZXIoKSA7IGcgIT0gbnVsbCA7IGcgPSBzLm5leHRHb29iZXIoIGcgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGcuZ2V0S2luZCgpID09IFNwbGF5LkFOTk9UQVRJT04gJiYgZy5nZXRQb3MoKSA9PSBwKQotICAgICAgICAgICAgICAgICAgICBsaXN0VG9GaWxsLmFkZCggKChBbm5vdGF0aW9uKSBnKS5nZXRYbWxCb29rbWFyaygpICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNOZXh0VG9rZW4gKCApCi0gICAgewotICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgICAgIGFzc2VydCAhZ2V0U3BsYXkoKS5pc1Jvb3QoKSB8fCBnZXRQb3MoKSA9PSAwOwotICAgICAgICAgICAgcmV0dXJuICFnZXRTcGxheSgpLmlzUm9vdCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaGFzUHJldlRva2VuICggKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICByZXR1cm4gIWdldFNwbGF5KCkuaXNEb2MoKSB8fCBnZXRQb3MoKSA+IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgUU5hbWUgZ2V0TmFtZSAoICkKLSAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoIG1vbml0b3IoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgICAgICAgICAgaWYgKGdldFBvcygpID4gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAgICAgU3BsYXkgcyA9IGdldFNwbGF5KCk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoIHMuZ2V0S2luZCgpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU3BsYXkuQkVHSU4gOgotICAgICAgICAgICAgY2FzZSBTcGxheS5BVFRSIDoKLSAgICAgICAgICAgIGNhc2UgU3BsYXkuUFJPQ0lOU1QgOgotICAgICAgICAgICAgICAgIHJldHVybiBzLmdldE5hbWUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXROYW1lICggUU5hbWUgbmFtZSApCi0gICAgewotICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgICAgIGlmIChuYW1lID09IG51bGwpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIk5hbWUgaXMgbnVsbCIgKTsKLQotICAgICAgICAgICAgU3BsYXkgcyA9IGdldFNwbGF5KCk7Ci0KLSAgICAgICAgICAgIGlmIChnZXRQb3MoKSA+IDAgfHwgIShzLmlzQmVnaW4oKSB8fCBzLmlzQXR0cigpIHx8IHMuaXNQcm9jaW5zdCgpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdwotICAgICAgICAgICAgICAgICAgICBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IHNldCBuYW1lIGhlcmU6ICIgKyBjdXJyZW50VG9rZW5UeXBlKCkgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHMuaXNQcm9jaW5zdCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZhbGlkYXRlUHJlZml4KCBuYW1lLmdldExvY2FsUGFydCgpICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobmFtZS5nZXROYW1lc3BhY2VVUkkoKS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0aHJvdwotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvY2luc3QgbmFtZSBtdXN0IGhhdmUgbm8gVVJJIiApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHMuaXNYbWxucygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChuYW1lLmdldExvY2FsUGFydCgpLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVQcmVmaXgoIG5hbWUuZ2V0TG9jYWxQYXJ0KCkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB2YWxpZGF0ZUxvY2FsTmFtZSggbmFtZS5nZXRMb2NhbFBhcnQoKSApOwotCi0gICAgICAgICAgICBzLnNldE5hbWUoIGdldFJvb3QoKSwgbmFtZSApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGludCB0b05leHRDaGFyICggaW50IGNjaCApCi0gICAgewotICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgICAgIFNwbGF5IHMgPSBnZXRTcGxheSgpOwotICAgICAgICAgICAgaW50ICAgcCA9IGdldFBvcygpOwotCi0gICAgICAgICAgICBpbnQgbWF4Q2NoID0gZ2V0UG9zdENjaCgpOwotCi0gICAgICAgICAgICBpZiAobWF4Q2NoID09IDAgfHwgY2NoID09IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgIGlmIChjY2ggPCAwIHx8IGNjaCA+IG1heENjaCkKLSAgICAgICAgICAgICAgICBjY2ggPSBtYXhDY2g7Ci0KLSAgICAgICAgICAgIGFzc2VydCBwICsgY2NoIDw9IHMuZ2V0RW5kUG9zKCk7Ci0KLSAgICAgICAgICAgIGlmIChwICsgY2NoID09IHMuZ2V0RW5kUG9zKCkpCi0gICAgICAgICAgICAgICAgdG9OZXh0VG9rZW4oKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZXQoIHAgKyBjY2ggKTsKLQotICAgICAgICAgICAgcmV0dXJuIGNjaDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgdG9QcmV2Q2hhciAoIGludCBjY2ggKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICBTcGxheSBzID0gZ2V0U3BsYXkoKTsKLSAgICAgICAgICAgIGludCAgIHAgPSBnZXRQb3MoKTsKLQotICAgICAgICAgICAgU3BsYXkgc1RleHQgPSBzOyAgLy8gVGhlIHNwbGF5IGFuZCBwb3Mgd2hlcmUgdGhlIHRleHQgZXhpc3RzCi0gICAgICAgICAgICBpbnQgICBwVGV4dCA9IHA7Ci0gICAgICAgICAgICBpbnQgICBtYXhDY2ggPSAwOyAvLyBNYXggY2hhcnMgdG8gbW92ZSBvdmVyCi0KLSAgICAgICAgICAgIGlmIChwID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzLmlzRG9jKCkgJiYgIXMuaXNBdHRyKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzVGV4dCA9IHMucHJldk5vbkF0dHJTcGxheSgpOwotICAgICAgICAgICAgICAgICAgICBwVGV4dCA9IHNUZXh0LmdldEVuZFBvcygpOwotICAgICAgICAgICAgICAgICAgICBtYXhDY2ggPSBzVGV4dC5nZXRDY2hBZnRlcigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHMuaXNMZWFmKCkgJiYgcCA8PSBzLmdldFBvc0xlYWZFbmQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgZENjaCA9IHMuZW5zdXJlQ29udGVudFZhbGlkKCk7Ci0gICAgICAgICAgICAgICAgcCArPSBkQ2NoOwotICAgICAgICAgICAgICAgIHBUZXh0ID0gcDsKLSAgICAgICAgICAgICAgICBtYXhDY2ggPSBwIC0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtYXhDY2ggPSBwIC0gcy5nZXRQb3NBZnRlcigpOwotCi0gICAgICAgICAgICBhc3NlcnQgcFRleHQgPD0gc1RleHQuZ2V0RW5kUG9zKCk7Ci0KLSAgICAgICAgICAgIGlmIChtYXhDY2ggPT0gMCB8fCBjY2ggPT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICAgICAgaWYgKGNjaCA8IDAgfHwgY2NoID4gbWF4Q2NoKQotICAgICAgICAgICAgICAgIGNjaCA9IG1heENjaDsKLQotICAgICAgICAgICAgc2V0KCBzVGV4dCwgcFRleHQgLSBjY2ggKTsKLQotICAgICAgICAgICAgcmV0dXJuIGNjaDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHRvRW5kRG9jICggKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICBzZXQoIGdldFJvb3QoKSwgMCApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdG9TdGFydERvYyAoICkKLSAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoIG1vbml0b3IoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgICAgICAgICAgc2V0KCBnZXRSb290KCkuX2RvYywgMCApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFRva2VuVHlwZSB0b0ZpcnN0Q29udGVudFRva2VuICggKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICBTcGxheSBzID0gZ2V0U3BsYXkoKTsKLQotICAgICAgICAgICAgaWYgKGdldFBvcygpID4gMCB8fCAhcy5pc0NvbnRhaW5lcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBUb2tlblR5cGUuTk9ORTsKLQotICAgICAgICAgICAgcy5lbnN1cmVDb250ZW50VmFsaWQoKTsKLQotICAgICAgICAgICAgaWYgKHMuZ2V0Q2NoKCkgPiAwIHx8IHMuaXNMZWFmKCkpCi0gICAgICAgICAgICAgICAgc2V0KCAxICk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0KCBzLm5leHROb25BdHRyU3BsYXkoKSwgMCApOwotCi0gICAgICAgICAgICByZXR1cm4gY3VycmVudFRva2VuVHlwZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFRva2VuVHlwZSB0b0VuZFRva2VuICggKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICBTcGxheSBzID0gZ2V0U3BsYXkoKTsKLQotICAgICAgICAgICAgaWYgKGdldFBvcygpID4gMCB8fCAhcy5pc0NvbnRhaW5lcigpKQotICAgICAgICAgICAgICAgIHJldHVybiBUb2tlblR5cGUuTk9ORTsKLQotICAgICAgICAgICAgaWYgKHMuaXNMZWFmKCkpCi0gICAgICAgICAgICAgICAgc2V0KCBzLmdldFBvc0xlYWZFbmQoKSApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNldCggcy5nZXRGaW5pc2hTcGxheSgpICk7Ci0KLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50VG9rZW5UeXBlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB0b1BhcmVudCAoICkKLSAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoIG1vbml0b3IoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgICAgICAgICAgU3BsYXkgcyA9IGdldFNwbGF5KCk7Ci0gICAgICAgICAgICBpbnQgICBwID0gZ2V0UG9zKCk7Ci0KLSAgICAgICAgICAgIGlmIChwID09IDAgJiYgcy5pc0RvYygpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgc2V0KCBzLmdldENvbnRhaW5lciggcCApLCAwICk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gdG9OZXh0U2libGluZyAoICkKLSAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoIG1vbml0b3IoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgICAgICAgICAgU3BsYXkgcyA9IGdldFNwbGF5KCk7Ci0gICAgICAgICAgICBpbnQgICBwID0gZ2V0UG9zKCk7Ci0KLSAgICAgICAgICAgIGlmIChwID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHMuaXNEb2MoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAgICAgaWYgKHMuaXNCZWdpbigpKQotICAgICAgICAgICAgICAgICAgICBzID0gcy5nZXRGaW5pc2hTcGxheSgpLm5leHRTcGxheSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzLmlzTGVhZigpICYmIHAgPD0gcy5nZXRQb3NMZWFmRW5kKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgICAgIHMgPSBzLm5leHRTcGxheSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKCA7ICFzLmlzQmVnaW4oKSA7IHMgPSBzLm5leHRTcGxheSgpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAocy5pc0ZpbmlzaCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldCggcywgMCApOwotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHRvTmV4dFNpYmxpbmcgKCBTdHJpbmcgbmFtZSApCi0gICAgewotICAgICAgICByZXR1cm4gdG9OZXh0U2libGluZyggbmV3IFFOYW1lKCBuYW1lICkgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB0b05leHRTaWJsaW5nICggU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nIG5hbWUgKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvTmV4dFNpYmxpbmcoIG5ldyBRTmFtZSggbmFtZXNwYWNlLCBuYW1lICkgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB0b05leHRTaWJsaW5nICggUU5hbWUgbmFtZSApCi0gICAgewotICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgICAgIFNwbGF5IHNPcmlnaW5hbCA9IGdldFNwbGF5KCk7Ci0gICAgICAgICAgICBpbnQgICBwT3JpZ2luYWwgPSBnZXRQb3MoKTsKLQotICAgICAgICAgICAgZm9yICggOyA7ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIXRvTmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZ2V0TmFtZSgpLmVxdWFscyggbmFtZSApKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2V0KCBzT3JpZ2luYWwsIHBPcmlnaW5hbCApOwotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB0b1ByZXZTaWJsaW5nICggKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICBTcGxheSBzID0gZ2V0U3BsYXkoKTsKLSAgICAgICAgICAgIGludCAgIHAgPSBnZXRQb3MoKTsKLQotICAgICAgICAgICAgaWYgKHAgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAocy5pc0RvYygpIHx8IHMuaXNBdHRyKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgICAgIHMgPSBzLnByZXZTcGxheSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFzc2VydCBwID4gMDsKLQotICAgICAgICAgICAgICAgIGlmIChzLmlzQ29udGFpbmVyKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAocy5pc0xlYWYoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgPD0gcy5nZXRQb3NMZWFmRW5kKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXQoIDAgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKCA7IDsgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzLmlzRW5kKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzID0gcy5nZXRDb250YWluZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHMuaXNMZWFmKCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgaWYgKHMuaXNDb250YWluZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAgICAgcyA9IHMucHJldlNwbGF5KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNldCggcywgMCApOwotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgU3BsYXkgZ2V0U3RhcnQgKCApCi0gICAgewotICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgU3BsYXkgcyA9IGdldFNwbGF5KCk7Ci0KLSAgICAgICAgaWYgKCFzLmlzQ29udGFpbmVyKCkgfHwgZ2V0UG9zKCkgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcHVzaCgpOwotCi0gICAgICAgICAgICBpZiAodG9OZXh0U2libGluZygpKQotICAgICAgICAgICAgICAgIHMgPSBnZXRTcGxheSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHMgPSBudWxsOwotCi0gICAgICAgICAgICBwb3AoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHRvRmlyc3RDaGlsZCAoICkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0NoaWxkKCAoUU5hbWUpIG51bGwgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB0b0NoaWxkICggU3RyaW5nIG5hbWUgKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRvQ2hpbGQoIG5ldyBRTmFtZSggbmFtZSApICk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gdG9DaGlsZCAoIFN0cmluZyBuYW1lc3BhY2UsIFN0cmluZyBuYW1lICkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0NoaWxkKCBuZXcgUU5hbWUoIG5hbWVzcGFjZSwgbmFtZSApICk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gdG9DaGlsZCAoIFFOYW1lIG5hbWUgKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICBTcGxheSBzID0gZ2V0Um9vdCgpLmZpbmROdGhCZWdpbiggZ2V0U3RhcnQoKSwgbmFtZSwgbnVsbCwgMCApOwotCi0gICAgICAgICAgICBpZiAocyA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgc2V0KCBzLCAwICk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gdG9DaGlsZCAoIGludCBuICkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0b0NoaWxkKCBudWxsLCBuICk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gdG9DaGlsZCAoIFFOYW1lIG5hbWUsIGludCBuICkKLSAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoIG1vbml0b3IoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgICAgICAgICAgU3BsYXkgcyA9IGdldFJvb3QoKS5maW5kTnRoQmVnaW4oIGdldFN0YXJ0KCksIG5hbWUsIG51bGwsIG4gKTsKLQotICAgICAgICAgICAgaWYgKHMgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIHNldCggcywgMCApOwotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHRvTGFzdENoaWxkICggKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICBTcGxheSBzT3JpZ2luYWwgPSBnZXRTcGxheSgpOwotICAgICAgICAgICAgaW50ICAgcE9yaWdpbmFsID0gZ2V0UG9zKCk7Ci0KLSAgICAgICAgICAgIGlmICghc09yaWdpbmFsLmlzQ29udGFpbmVyKCkgfHwgcE9yaWdpbmFsICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCF0b05leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCF0b0VuZFRva2VuKCkuaXNOb25lKCkgJiYgdG9QcmV2U2libGluZygpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgICBzZXQoIHNPcmlnaW5hbCwgcE9yaWdpbmFsICk7Ci0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHRvRmlyc3RBdHRyaWJ1dGUgKCApCi0gICAgewotICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgICAgIFNwbGF5IHNPcmlnaW5hbCA9IGdldFNwbGF5KCk7Ci0gICAgICAgICAgICBpbnQgICBwT3JpZ2luYWwgPSBnZXRQb3MoKTsKLQotICAgICAgICAgICAgaWYgKCFzT3JpZ2luYWwuaXNDb250YWluZXIoKSB8fCBwT3JpZ2luYWwgIT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGZvciAoIFNwbGF5IHMgPSBzT3JpZ2luYWwubmV4dFNwbGF5KCkgOyBzLmlzQXR0cigpIDsgcyA9IHMubmV4dFNwbGF5KCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzLmlzTm9ybWFsQXR0cigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc2V0KCBzLCAwICk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2V0KCBzT3JpZ2luYWwsIHBPcmlnaW5hbCApOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gdG9MYXN0QXR0cmlidXRlICggKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICBTcGxheSBzT3JpZ2luYWwgPSBnZXRTcGxheSgpOwotICAgICAgICAgICAgaW50ICAgcE9yaWdpbmFsID0gZ2V0UG9zKCk7Ci0KLSAgICAgICAgICAgIGlmICghc09yaWdpbmFsLmlzQ29udGFpbmVyKCkgfHwgcE9yaWdpbmFsICE9IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBTcGxheSBsYXN0Tm9ybWFsQXR0ciA9IG51bGw7Ci0KLSAgICAgICAgICAgIGZvciAoIFNwbGF5IHMgPSBzT3JpZ2luYWwubmV4dFNwbGF5KCkgOyBzLmlzQXR0cigpIDsgcyA9IHMubmV4dFNwbGF5KCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzLmlzTm9ybWFsQXR0cigpKQotICAgICAgICAgICAgICAgICAgICBsYXN0Tm9ybWFsQXR0ciA9IHM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChsYXN0Tm9ybWFsQXR0ciAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNldCggbGFzdE5vcm1hbEF0dHIsIDAgKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2V0KCBzT3JpZ2luYWwsIHBPcmlnaW5hbCApOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gdG9OZXh0QXR0cmlidXRlICggKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICBTcGxheSBzID0gZ2V0U3BsYXkoKTsKLQotICAgICAgICAgICAgaWYgKCFzLmlzQXR0cigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgZm9yICggcyA9IHMubmV4dFNwbGF5KCkgOyBzLmlzQXR0cigpIDsgcyA9IHMubmV4dFNwbGF5KCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzLmlzTm9ybWFsQXR0cigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc2V0KCBzLCAwICk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gdG9QcmV2QXR0cmlidXRlICggKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICBTcGxheSBzID0gZ2V0U3BsYXkoKTsKLQotICAgICAgICAgICAgaWYgKCFzLmlzQXR0cigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgZm9yICggcyA9IHMucHJldlNwbGF5KCkgOyBzLmlzQXR0cigpIDsgcyA9IHMucHJldlNwbGF5KCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzLmlzTm9ybWFsQXR0cigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc2V0KCBzLCAwICk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRBdHRyaWJ1dGVUZXh0ICggUU5hbWUgYXR0ck5hbWUgKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICBpZiAoYXR0ck5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCAiQXR0ciBuYW1lIGlzIG51bGwiICk7Ci0KLSAgICAgICAgICAgIGlmIChnZXRQb3MoKSA+IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgICAgIFNwbGF5IHMgPSBnZXRTcGxheSgpLmdldEF0dHIoIGF0dHJOYW1lICk7Ci0KLSAgICAgICAgICAgIHJldHVybiBzID09IG51bGwgPyBudWxsIDogcy5nZXRUZXh0KCBnZXRSb290KCkgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHNldEF0dHJpYnV0ZVRleHQgKCBRTmFtZSBhdHRyTmFtZSwgU3RyaW5nIHZhbHVlICkKLSAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoIG1vbml0b3IoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgICAgICAgICAgaWYgKGF0dHJOYW1lID09IG51bGwpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIkF0dHIgbmFtZSBpcyBudWxsIiApOwotCi0gICAgICAgICAgICB2YWxpZGF0ZUxvY2FsTmFtZSggYXR0ck5hbWUuZ2V0TG9jYWxQYXJ0KCkgKTsKLQotICAgICAgICAgICAgaWYgKGdldFBvcygpID4gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIFNwbGF5IHMgPSBnZXRTcGxheSgpOwotCi0gICAgICAgICAgICBpZiAoIXMuaXNDb250YWluZXIoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHZhbHVlID0gIiI7Ci0KLSAgICAgICAgICAgIHMgPSBnZXRTcGxheSgpLmdldEF0dHIoIGF0dHJOYW1lICk7Ci0KLSAgICAgICAgICAgIGlmIChzID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgWG1sQ3Vyc29yIGMgPSBuZXdDdXJzb3IoKTsKLQotICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBuZXcgYXR0ciBhdCB0aGUgZW5kCi0KLSAgICAgICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICAgICAgYy50b05leHRUb2tlbigpOwotICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICggYy5pc0FueUF0dHIoKSApOwotCi0gICAgICAgICAgICAgICAgICAgIGMuaW5zZXJ0QXR0cmlidXRlV2l0aFZhbHVlKCBhdHRyTmFtZSwgdmFsdWUgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZmluYWxseQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYy5kaXNwb3NlKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHMuc2V0VGV4dCggZ2V0Um9vdCgpLCB2YWx1ZSwgMCwgdmFsdWUubGVuZ3RoKCkgKTsKLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiByZW1vdmVBdHRyaWJ1dGUgKCBRTmFtZSBhdHRyTmFtZSApCi0gICAgewotICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgICAgIGlmIChhdHRyTmFtZSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oICJBdHRyIG5hbWUgaXMgbnVsbCIgKTsKLQotICAgICAgICAgICAgaWYgKGdldFBvcygpID4gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGJvb2xlYW4gcmVtb3ZlZCA9IGZhbHNlOwotCi0gICAgICAgICAgICBmb3IgKCA7IDsgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNwbGF5IHMgPSBnZXRTcGxheSgpLmdldEF0dHIoIGF0dHJOYW1lICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAocyA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIHMucmVtb3ZlKCBnZXRSb290KCksIHRydWUgKTsKLQotICAgICAgICAgICAgICAgIHJlbW92ZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gcmVtb3ZlZDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgcmVtb3ZlQ2hhcnMgKCBpbnQgY2NoICkKLSAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoIG1vbml0b3IoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgICAgICAgICAgaW50IHBvc3RDY2ggPSBnZXRQb3N0Q2NoKCk7Ci0KLSAgICAgICAgICAgIGlmIChwb3N0Q2NoID09IDAgfHwgY2NoID09IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgIGlmIChjY2ggPCAwIHx8IGNjaCA+IHBvc3RDY2gpCi0gICAgICAgICAgICAgICAgY2NoID0gcG9zdENjaDsKLQotICAgICAgICAgICAgcmV0dXJuIGdldFNwbGF5KCkucmVtb3ZlQ2hhcnMoIGdldFJvb3QoKSwgZ2V0UG9zKCksIGNjaCApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGludCBtb3ZlQ2hhcnMgKCBpbnQgY2NoLCBYbWxDdXJzb3IgZHN0ICkKLSAgICB7Ci0gICAgICAgIGlmIChkc3QgPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oICJEZXN0aW5hdGlvbiBpcyBudWxsIiApOwotCi0gICAgICAgIGlmIChtb25pdG9yKCkgPT0gZHN0Lm1vbml0b3IoKSkKLSAgICAgICAgewotICAgICAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbW92ZUNoYXJzSW1wbCggY2NoLCBkc3QgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJvb2xlYW4gYWNxdWlyZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEdsb2JhbExvY2suYWNxdWlyZSgpOwotICAgICAgICAgICAgICAgIGFjcXVpcmVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChkc3QubW9uaXRvcigpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBHbG9iYWxMb2NrLnJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjcXVpcmVkID0gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb3ZlQ2hhcnNJbXBsKCBjY2gsIGRzdCApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFJ1bnRpbWVFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmluYWxseQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChhY3F1aXJlZCkKLSAgICAgICAgICAgICAgICAgICAgR2xvYmFsTG9jay5yZWxlYXNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGludCBtb3ZlQ2hhcnNJbXBsICggaW50IGNjaCwgWG1sQ3Vyc29yIGRzdCApCi0gICAgewotICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgaWYgKGRzdCA9PSBudWxsIHx8ICEoZHN0IGluc3RhbmNlb2YgQ3Vyc29yKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oICJJbnZhbGlkIGRlc3RpbmF0aW9uIGN1cnNvciIgKTsKLQotICAgICAgICBDdXJzb3IgY0RzdCA9IChDdXJzb3IpIGRzdDsKLQotICAgICAgICBjaGVja0Rpc3Bvc2VkKCBjRHN0ICk7Ci0KLSAgICAgICAgUm9vdCAgckRzdCA9IGNEc3QuZ2V0Um9vdCgpOwotICAgICAgICBTcGxheSBzRHN0ID0gY0RzdC5nZXRTcGxheSgpOwotICAgICAgICBpbnQgICBwRHN0ID0gY0RzdC5nZXRQb3MoKTsKLQotICAgICAgICBpZiAocERzdCA9PSAwICYmIChzRHN0LmlzRG9jKCkgfHwgc0RzdC5pc0F0dHIoKSkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCAiSW52YWxpZCBkZXN0aW5hdGlvbiIgKTsKLQotICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIGdldFNwbGF5KCkubW92ZUNoYXJzKAotICAgICAgICAgICAgICAgIGdldFJvb3QoKSwgZ2V0UG9zKCksIGNjaCwgckRzdCwgc0RzdCwgcERzdCwgZmFsc2UgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGNvcHlDaGFycyAoIGludCBjY2gsIFhtbEN1cnNvciBkc3QgKQotICAgIHsKLSAgICAgICAgaWYgKGRzdCA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIkRlc3RpbmF0aW9uIGlzIG51bGwiICk7Ci0KLSAgICAgICAgaWYgKGRzdC5tb25pdG9yKCkgPT0gbW9uaXRvcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBjb3B5Q2hhcnNJbXBsKCBjY2gsIGRzdCApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbGVhbiBhY3F1aXJlZCA9IGZhbHNlOwotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgR2xvYmFsTG9jay5hY3F1aXJlKCk7Ci0gICAgICAgICAgICAgICAgYWNxdWlyZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoIG1vbml0b3IoKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKGRzdC5tb25pdG9yKCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdsb2JhbExvY2sucmVsZWFzZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWNxdWlyZWQgPSBmYWxzZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvcHlDaGFyc0ltcGwoIGNjaCwgZHN0ICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWG1sUnVudGltZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbGx5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGFjcXVpcmVkKQotICAgICAgICAgICAgICAgICAgICBHbG9iYWxMb2NrLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgaW50IGNvcHlDaGFyc0ltcGwgKCBpbnQgY2NoLCBYbWxDdXJzb3IgZHN0ICkKLSAgICB7Ci0gICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgICAgICBpZiAoZHN0ID09IG51bGwgfHwgIShkc3QgaW5zdGFuY2VvZiBDdXJzb3IpKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIkludmFsaWQgZGVzdGluYXRpb24gY3Vyc29yIiApOwotCi0gICAgICAgIEN1cnNvciBjRHN0ID0gKEN1cnNvcikgZHN0OwotCi0gICAgICAgIGNoZWNrRGlzcG9zZWQoIGNEc3QgKTsKLQotICAgICAgICBSb290ICByRHN0ID0gY0RzdC5nZXRSb290KCk7Ci0gICAgICAgIFNwbGF5IHNEc3QgPSBjRHN0LmdldFNwbGF5KCk7Ci0gICAgICAgIGludCAgIHBEc3QgPSBjRHN0LmdldFBvcygpOwotCi0gICAgICAgIGlmIChwRHN0ID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzRHN0LmlzRG9jKCkgfHwgc0RzdC5pc0F0dHIoKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCAiSW52YWxpZCBkZXN0aW5hdGlvbiIgKTsKLQotICAgICAgICAgICAgc0RzdCA9IHNEc3QucHJldk5vbkF0dHJTcGxheSgpOwotICAgICAgICAgICAgcERzdCA9IHNEc3QuZ2V0RW5kUG9zKCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIGdldFNwbGF5KCkuY29weUNoYXJzKCBnZXRSb290KCksIGdldFBvcygpLCBjY2gsIHJEc3QsIHNEc3QsIHBEc3QgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIG5hbWVzcGFjZUZvclByZWZpeCAoIFN0cmluZyBwcmVmaXggKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICBTcGxheSBzID0gZ2V0U3BsYXkoKTsKLQotICAgICAgICAgICAgaWYgKGdldFBvcygpID4gMCB8fCAhcy5pc0NvbnRhaW5lcigpKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oICJOb3Qgb24gYSBjb250YWluZXIiICk7Ci0KLSAgICAgICAgICAgIHJldHVybiBzLm5hbWVzcGFjZUZvclByZWZpeCggcHJlZml4ICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHByZWZpeEZvck5hbWVzcGFjZSAoIFN0cmluZyBucyApCi0gICAgewotICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgICAgIGlmIChucyA9PSBudWxsIHx8IG5zLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIk11c3Qgc3BlY2lmeSBhIG5hbWVzcGFjZSIgKTsKLQotICAgICAgICAgICAgU3BsYXkgcyA9IGdldFNwbGF5KCk7Ci0KLSAgICAgICAgICAgIGlmIChnZXRQb3MoKSA+IDAgfHwgIXMuaXNDb250YWluZXIoKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCAiTm90IG9uIGEgY29udGFpbmVyIiApOwotCi0gICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gcy5wcmVmaXhGb3JOYW1lc3BhY2UoIGdldFJvb3QoKSwgbnMsIG51bGwsIHRydWUpOwotCi0gICAgICAgICAgICBhc3NlcnQgcmVzdWx0ICE9IG51bGw7Ci0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBnZXRBbGxOYW1lc3BhY2VzICggTWFwIGFkZFRvVGhpcyApCi0gICAgewotICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgICAgIFNwbGF5IHMgPSBnZXRTcGxheSgpOwotCi0gICAgICAgICAgICBpZiAoZ2V0UG9zKCkgPiAwIHx8ICFzLmlzQ29udGFpbmVyKCkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiggIk5vdCBvbiBhIGNvbnRhaW5lciIgKTsKLQotICAgICAgICAgICAgLy8gRG8gdGhpcyB3aXRoIGN1cnNvciBmb3Igbm93Li4uCi0KLSAgICAgICAgICAgIFhtbEN1cnNvciBjID0gbmV3Q3Vyc29yKCk7Ci0KLSAgICAgICAgICAgIGRvCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IGMuaXNDb250YWluZXIoKTsKLQotICAgICAgICAgICAgICAgIFFOYW1lIGNOYW1lID0gYy5nZXROYW1lKCk7Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAoICFjLnRvTmV4dFRva2VuKCkuaXNOb25lKCkgJiYgYy5pc0FueUF0dHIoKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoYy5pc05hbWVzcGFjZSgpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gYy5nZXROYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdXJpICAgID0gYy5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhlcmUgSSBjaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYSBkZWZhdWx0IG5hbWVzcGFjZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFwcGluZyB3aGljaCBpcyBub3QgZW1wdHkgb24gYSBub24gcm9vdCBjb250YWluZXIgd2hpY2gKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIGluIGEgbmFtZXNwYWNlLiAgVGhpcyB0aGlzIGNhc2UsIEkgZG8gbm90IHdhbnQgdG8gYWRkCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIG1hcHBpbmcgYmVjYXVzZSBpdCBjb3VsZCBub3QgYmUgcGVyc2lzdGVkIG91dCB0aGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB3YXkuCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmVmaXgubGVuZ3RoKCkgPT0gMCAmJiB1cmkubGVuZ3RoKCkgPiAwICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNOYW1lICE9IG51bGwgJiYgY05hbWUuZ2V0TmFtZXNwYWNlVVJJKCkubGVuZ3RoKCk+MCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhZGRUb1RoaXMuY29udGFpbnNLZXkoIHByZWZpeCApKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvVGhpcy5wdXQoIHByZWZpeCwgdXJpICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjLnRvUGFyZW50KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aGlsZSAoIGMudG9QYXJlbnQoKSApOwotCi0gICAgICAgICAgICBjLmRpc3Bvc2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnM6Ci0gICAgICoKLSAgICAgKiAgIC0xIGlzIHRoaXMgaXMgbGVmdCBvZiB0aGF0Ci0gICAgICogICAgMCBpcyB0aGlzIGlzIGxlZnQgaXMgYXQgc2FtZSBwb3NpdGlvbiBhcyB0aGF0Ci0gICAgICogICAgMSBpcyB0aGlzIGlzIHJpZ2h0IG9mIHRoYXQKLSAgICAgKi8KLQotICAgIHB1YmxpYyBpbnQgY29tcGFyZVBvc2l0aW9uICggWG1sQ3Vyc29yIHh0aGF0ICkKLSAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoIG1vbml0b3IoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgICAgICAgICAgaWYgKHh0aGF0ID09IG51bGwgfHwgISh4dGhhdCBpbnN0YW5jZW9mIEN1cnNvcikpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIkludmFsaWQgdGhhdCBjdXJzb3IiICk7Ci0KLSAgICAgICAgICAgIEN1cnNvciB0aGF0ID0gKEN1cnNvcikgeHRoYXQ7Ci0KLSAgICAgICAgICAgIFJvb3QgciA9IGdldFJvb3QoKTsKLQotICAgICAgICAgICAgaWYgKHIgIT0gdGhhdC5nZXRSb290KCkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIkN1cnNvcnMgbm90IGluIHNhbWUgZG9jdW1lbnQiICk7Ci0KLSAgICAgICAgICAgIGNoZWNrRGlzcG9zZWQoIHRoYXQgKTsKLQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgZ2V0U3BsYXkoKS5jb21wYXJlKCByLCBnZXRQb3MoKSwgdGhhdC5nZXRTcGxheSgpLCB0aGF0LmdldFBvcygpICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0xlZnRPZiAoIFhtbEN1cnNvciB0aGF0ICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjb21wYXJlUG9zaXRpb24oIHRoYXQgKSA8IDA7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNBdFNhbWVQb3NpdGlvbkFzICggWG1sQ3Vyc29yIHRoYXQgKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVQb3NpdGlvbiggdGhhdCApID09IDA7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNSaWdodE9mICggWG1sQ3Vyc29yIHRoYXQgKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVQb3NpdGlvbiggdGhhdCApID4gMDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSW5wdXRTdHJlYW0gbmV3SW5wdXRTdHJlYW0gKCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgICAgICBuZXcgU2F2ZXIuSW5wdXRTdHJlYW1TYXZlcigKLSAgICAgICAgICAgICAgICAgICAgZ2V0Um9vdCgpLCBnZXRTcGxheSgpLCBnZXRQb3MoKSwgb3B0aW9ucyApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIElucHV0U3RyZWFtIG5ld0lucHV0U3RyZWFtICggKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ld0lucHV0U3RyZWFtKCBudWxsICk7Ci0gICAgfQotCi0gICAgcHVibGljIFJlYWRlciBuZXdSZWFkZXIgKCApCi0gICAgewotICAgICAgICByZXR1cm4gbmV3UmVhZGVyKCBudWxsICk7Ci0gICAgfQotCi0gICAgcHVibGljIFJlYWRlciBuZXdSZWFkZXIgKCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICByZXR1cm4gbmV3IFNhdmVyLlRleHRSZWFkZXIoIGdldFJvb3QoKSwgZ2V0U3BsYXkoKSwgZ2V0UG9zKCksIG9wdGlvbnMgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBYTUxJbnB1dFN0cmVhbSBuZXdYTUxJbnB1dFN0cmVhbSAoICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXdYTUxJbnB1dFN0cmVhbSggbnVsbCApOwotICAgIH0KLQotICAgIHB1YmxpYyBYTUxJbnB1dFN0cmVhbSBuZXdYTUxJbnB1dFN0cmVhbSAoIFhtbE9wdGlvbnMgb3B0aW9ucyApCi0gICAgewotICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgIG5ldyBYbWxJbnB1dFN0cmVhbUltcGwoIGdldFJvb3QoKSwgZ2V0U3BsYXkoKSwgZ2V0UG9zKCksIG9wdGlvbnMgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBYTUxTdHJlYW1SZWFkZXIgbmV3WE1MU3RyZWFtUmVhZGVyICggKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ld1hNTFN0cmVhbVJlYWRlciggbnVsbCApOwotICAgIH0KLQotICAgIHB1YmxpYyBYTUxTdHJlYW1SZWFkZXIgbmV3WE1MU3RyZWFtUmVhZGVyICggWG1sT3B0aW9ucyBvcHRpb25zICkKLSAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoIG1vbml0b3IoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgICAgICAgICAgYm9vbGVhbiBpbm5lciA9IFhtbE9wdGlvbnMubWFza051bGwoIG9wdGlvbnMgKS5oYXNPcHRpb24oIFhtbE9wdGlvbnMuU0FWRV9JTk5FUiApOwotCi0gICAgICAgICAgICBpZiAoaW5uZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzTmFtZXNwYWNlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgWE1MU3RyZWFtUmVhZGVyRm9yU3RyaW5nKCBuZXdDdXJzb3IoKSwgZ2V0TmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaXNBdHRyKCkgfHwgaXNDb21tZW50KCkgfHwgaXNQcm9jaW5zdCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhNTFN0cmVhbVJlYWRlckZvclN0cmluZyggbmV3Q3Vyc29yKCksIGdldFRleHRWYWx1ZSgpICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpc1RleHQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhNTFN0cmVhbVJlYWRlckZvclN0cmluZyggbmV3Q3Vyc29yKCksIGdldENoYXJzKCkgKTsKLQotICAgICAgICAgICAgaWYgKGlzRmluaXNoKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBYTUxTdHJlYW1SZWFkZXJGb3JTdHJpbmcoIG5ld0N1cnNvcigpLCAiIiApOwotCi0gICAgICAgICAgICBhc3NlcnQgIWlzVGV4dCgpICYmICFpc0ZpbmlzaCgpOwotICAgICAgICAgICAgYXNzZXJ0ICFpbm5lciB8fCBpc0NvbnRhaW5lcigpOwotCi0gICAgICAgICAgICBYbWxDdXJzb3Igc3RhcnQgPSBuZXdDdXJzb3IoKTsKLSAgICAgICAgICAgIFhtbEN1cnNvciBsYXN0ID0gbmV3Q3Vyc29yKCk7Ci0KLSAgICAgICAgICAgIGlmIChpbm5lcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdGFydC50b05leHRUb2tlbigpOwotICAgICAgICAgICAgICAgIGxhc3QudG9FbmRUb2tlbigpOwotCi0gICAgICAgICAgICAgICAgaWYgKHN0YXJ0LmlzQXRTYW1lUG9zaXRpb25BcyggbGFzdCApKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhNTFN0cmVhbVJlYWRlckZvclN0cmluZyggc3RhcnQsICIiICk7Ci0KLSAgICAgICAgICAgICAgICBsYXN0LnRvUHJldlRva2VuKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzQ29udGFpbmVyKCkpCi0gICAgICAgICAgICAgICAgICAgIGxhc3QudG9FbmRUb2tlbigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gbmV3IFhNTFN0cmVhbVJlYWRlckltcGwoIHN0YXJ0LCBsYXN0ICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBYbWxPcHRpb25zIF90b1N0cmluZ09wdGlvbnMgPQotICAgICAgICBidWlsZFByZXR0eU9wdGlvbnMoKTsKLQotICAgIHN0YXRpYyBmaW5hbCBYbWxPcHRpb25zIGJ1aWxkUHJldHR5T3B0aW9ucyAoICkKLSAgICB7Ci0gICAgICAgIFhtbE9wdGlvbnMgb3B0aW9ucyA9IG5ldyBYbWxPcHRpb25zKCk7Ci0gICAgICAgIG9wdGlvbnMucHV0KCBYbWxPcHRpb25zLlNBVkVfUFJFVFRZX1BSSU5UICk7Ci0gICAgICAgIG9wdGlvbnMucHV0KCBYbWxPcHRpb25zLlNBVkVfQUdHUkVTU0lWRV9OQU1FU1BBQ0VTICk7Ci0gICAgICAgIG9wdGlvbnMucHV0KCBYbWxPcHRpb25zLlNBVkVfVVNFX0RFRkFVTFRfTkFNRVNQQUNFICk7Ci0gICAgICAgIHJldHVybiBvcHRpb25zOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcgKCAgKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHhtbFRleHQoIF90b1N0cmluZ09wdGlvbnMgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHhtbFRleHQgKCAgKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHhtbFRleHQoIG51bGwgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHhtbFRleHQgKCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgIHsKLSAgICAgICAgU2F2ZXIuVGV4dFNhdmVyIHNhdmVyOwotICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgICAgIHNhdmVyID0gbmV3IFNhdmVyLlRleHRTYXZlcigKLSAgICAgICAgICAgICAgICAgICAgZ2V0Um9vdCgpLCBnZXRTcGxheSgpLCBnZXRQb3MoKSwgb3B0aW9ucywgbnVsbCApOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzYXZlci5zYXZlVG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY2xhc3MgQ2hhbmdlU3RhbXBJbXBsIGltcGxlbWVudHMgQ2hhbmdlU3RhbXAKLSAgICB7Ci0gICAgICAgIENoYW5nZVN0YW1wSW1wbCAoIFJvb3QgciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9yb290ID0gcjsKLSAgICAgICAgICAgIF92ZXJzaW9uU3RhbXAgPSBfcm9vdC5nZXRWZXJzaW9uKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBoYXNDaGFuZ2VkICggKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gX3ZlcnNpb25TdGFtcCAhPSBfcm9vdC5nZXRWZXJzaW9uKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGZpbmFsIFJvb3QgX3Jvb3Q7Ci0gICAgICAgIHByaXZhdGUgZmluYWwgbG9uZyBfdmVyc2lvblN0YW1wOwotICAgIH0KLQotICAgIHB1YmxpYyBDaGFuZ2VTdGFtcCBnZXREb2NDaGFuZ2VTdGFtcCAoICkKLSAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoIG1vbml0b3IoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgICAgICAgICAgcmV0dXJuIG5ldyBDaGFuZ2VTdGFtcEltcGwoIGdldFJvb3QoKSApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gcmVtb3ZlWG1sICggKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICBTcGxheSBzID0gZ2V0U3BsYXkoKTsKLSAgICAgICAgICAgIGludCAgIHAgPSBnZXRQb3MoKTsKLQotICAgICAgICAgICAgYXNzZXJ0IHAgPCBzLmdldEVuZFBvcygpOwotCi0gICAgICAgICAgICBpZiAocCA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHMuaXNMZWFmKCkgJiYgcCA9PSBzLmdldFBvc0xlYWZFbmQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAgICAgaW50IGNjaFJlbW92ZSA9IHJlbW92ZUNoYXJzKCBnZXRQb3N0Q2NoKCkgKTsKLQotICAgICAgICAgICAgICAgIGFzc2VydCBjY2hSZW1vdmUgPiAwOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChzLmlzRG9jKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cKLSAgICAgICAgICAgICAgICAgICAgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCByZW1vdmUgYSB3aG9sZSBkb2N1bWVudC4iICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChzLmlzRmluaXNoKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBzLnJlbW92ZSggZ2V0Um9vdCgpLCB0cnVlICk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gbW92ZVhtbCAoIFhtbEN1cnNvciBkc3QgKQotICAgIHsKLSAgICAgICAgaWYgKGRzdCA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIkRlc3RpbmF0aW9uIGlzIG51bGwiICk7Ci0KLSAgICAgICAgaWYgKGRzdC5tb25pdG9yKCkgPT0gbW9uaXRvcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBtb3ZlWG1sSW1wbCggZHN0ICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBib29sZWFuIGFjcXVpcmVkID0gZmFsc2U7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBHbG9iYWxMb2NrLmFjcXVpcmUoKTsKLSAgICAgICAgICAgICAgICBhY3F1aXJlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoZHN0Lm1vbml0b3IoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsTG9jay5yZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY3F1aXJlZCA9IGZhbHNlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW92ZVhtbEltcGwgKCBkc3QgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBYbWxSdW50aW1lRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpLCBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbmFsbHkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoYWNxdWlyZWQpCi0gICAgICAgICAgICAgICAgICAgIEdsb2JhbExvY2sucmVsZWFzZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIG1vdmVYbWxJbXBsICAoIFhtbEN1cnNvciBkc3QgKQotICAgIHsKLSAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgIGlmIChkc3QgPT0gbnVsbCB8fCAhKGRzdCBpbnN0YW5jZW9mIEN1cnNvcikpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93Ci0gICAgICAgICAgICAgICAgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgIkNhbid0IG1vdmUgdG8gYSBmb3JlaWduIGRvY3VtZW50IiApOwotICAgICAgICB9Ci0KLSAgICAgICAgQ3Vyc29yIGNEc3QgPSAoQ3Vyc29yKSBkc3Q7Ci0KLSAgICAgICAgY2hlY2tEaXNwb3NlZCggY0RzdCApOwotCi0gICAgICAgIFJvb3QgIHJEc3QgPSBjRHN0LmdldFJvb3QoKTsKLSAgICAgICAgU3BsYXkgc0RzdCA9IGNEc3QuZ2V0U3BsYXkoKTsKLSAgICAgICAgaW50ICAgcERzdCA9IGNEc3QuZ2V0UG9zKCk7Ci0KLSAgICAgICAgUm9vdCAgclNyYyA9IGdldFJvb3QoKTsKLSAgICAgICAgU3BsYXkgc1NyYyA9IGdldFNwbGF5KCk7Ci0gICAgICAgIGludCAgIHBTcmMgPSBnZXRQb3MoKTsKLQotICAgICAgICBpZiAoc1NyYy5jaGVja0luc2VydGlvblZhbGlkaXR5KCBwU3JjLCBzRHN0LCBwRHN0LCB0cnVlICkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgIHNTcmMubW92ZUNoYXJzKAotICAgICAgICAgICAgICAgICAgICByU3JjLCBwU3JjLCBnZXRQb3N0Q2NoKCksIHJEc3QsIHNEc3QsIHBEc3QsIGZhbHNlICkgPiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgYXNzZXJ0IHBTcmMgPT0gMDsKLQotICAgICAgICAvLyBDaGVjayBmb3IgYSBtb3ZlbWVudCBvZiBzdHVmZiBpbnRvIGl0c2VsZiEgIFRoaXMgY2FzZSBpcyBiYXNpY2FsbHkKLSAgICAgICAgLy8gYSBuby1vcAotCi0gICAgICAgIGlmIChyU3JjID09IHJEc3QgJiYgc0RzdC5iZXR3ZWVuKCByRHN0LCBwRHN0LCBzU3JjICkpCi0gICAgICAgIHsKLS8vIFRPRE8gLSBJIG1pZ2h0IGhhdmUgdG8gb3JwaGFuIHR5cGVzIGluIHRoZSByYW5nZSBoZXJlIC4uLi4KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGFzc2VydCBwU3JjID09IDA7Ci0KLSAgICAgICAgc1NyYy5tb3ZlKCByU3JjLCBjRHN0LmdldFJvb3QoKSwgY0RzdC5nZXRTcGxheSgpLCBjRHN0LmdldFBvcygpLCB0cnVlICk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gY29weVhtbCAoIFhtbEN1cnNvciBkc3QgKQotICAgIHsKLSAgICAgICAgaWYgKGRzdCA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIkRlc3RpbmF0aW9uIGlzIG51bGwiICk7Ci0KLSAgICAgICAgaWYgKGRzdC5tb25pdG9yKCkgPT0gbW9uaXRvcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBjb3B5WG1sSW1wbCggZHN0ICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBib29sZWFuIGFjcXVpcmVkID0gZmFsc2U7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBHbG9iYWxMb2NrLmFjcXVpcmUoKTsKLSAgICAgICAgICAgICAgICBhY3F1aXJlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoZHN0Lm1vbml0b3IoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsTG9jay5yZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY3F1aXJlZCA9IGZhbHNlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29weVhtbEltcGwoIGRzdCApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFhtbFJ1bnRpbWVFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmluYWxseQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChhY3F1aXJlZCkKLSAgICAgICAgICAgICAgICAgICAgR2xvYmFsTG9jay5yZWxlYXNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gY29weVhtbEltcGwgKCBYbWxDdXJzb3IgZHN0ICkKLSAgICB7Ci0gICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgICAgICBpZiAoZHN0ID09IG51bGwgfHwgIShkc3QgaW5zdGFuY2VvZiBDdXJzb3IpKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdwotICAgICAgICAgICAgICAgIG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oICJDYW4ndCBjb3B5IHRvIGEgZm9yZWlnbiBkb2N1bWVudCIgKTsKLSAgICAgICAgfQotCi0gICAgICAgIEN1cnNvciBjRHN0ID0gKEN1cnNvcikgZHN0OwotCi0gICAgICAgIGNoZWNrRGlzcG9zZWQoIGNEc3QgKTsKLQotICAgICAgICBTcGxheSBzRHN0ID0gY0RzdC5nZXRTcGxheSgpOwotICAgICAgICBpbnQgICBwRHN0ID0gY0RzdC5nZXRQb3MoKTsKLQotICAgICAgICBTcGxheSBzID0gZ2V0U3BsYXkoKTsKLSAgICAgICAgaW50ICAgcCA9IGdldFBvcygpOwotCi0gICAgICAgIGlmIChzLmNoZWNrSW5zZXJ0aW9uVmFsaWRpdHkoIHAsIHNEc3QsIHBEc3QsIHRydWUgKSkKLSAgICAgICAgICAgIHJldHVybiBjb3B5Q2hhcnNJbXBsKCBnZXRQb3N0Q2NoKCksIGRzdCApID4gMDsKLQotICAgICAgICBhc3NlcnQgcCA9PSAwOwotCi0gICAgICAgIC8vIE5lZWQgdG8gbWFrZSBhIHNwbGF5IGNvcHkgYmVmb3JlIGdldHRpbmcgdGhlIHRleHQgYmVjYXVzZSB0aGUgY29weQotICAgICAgICAvLyB3aWxsIHZhbGlkYXRlIGludmFsaWQgY29udGVudHMvdmFsdWVzCi0KLSAgICAgICAgUm9vdCByID0gZ2V0Um9vdCgpOwotICAgICAgICBSb290IHJEc3QgPSBjRHN0LmdldFJvb3QoKTsKLQotICAgICAgICBTcGxheSBjb3B5ID0gcy5jb3B5U3BsYXkoKTsKLQotICAgICAgICBPYmplY3QgdHh0ID0gci5fdGV4dDsKLSAgICAgICAgaW50IGNwID0gci5nZXRDcCggcyApOwotICAgICAgICBpbnQgY2NoID0gY29weS5nZXRDY2hMZWZ0KCkgKyBjb3B5LmdldENjaCgpOwotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFJlbW92ZSB0ZXh0IGFmdGVyIHdoaWNoIG1pZ2h0IGJlIGJldHdlZW4gbGVhZiB2YWx1ZSBhbmQgZmlyc3QgYXR0ciB2YWx1ZQotICAgICAgICAvLwotCi0gICAgICAgIGlmIChzLmlzTGVhZigpICYmIHMuZ2V0Q2NoQWZ0ZXIoKSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBjY2hWYWx1ZSA9IHMuZ2V0Q2NoVmFsdWUoKTsKLSAgICAgICAgICAgIGludCBjY2hBZnRlciA9IHMuZ2V0Q2NoQWZ0ZXIoKTsKLQotICAgICAgICAgICAgaWYgKGNjaFZhbHVlID09IDApCi0gICAgICAgICAgICAgICAgY3AgKz0gY2NoQWZ0ZXI7Ci0gICAgICAgICAgICBlbHNlIGlmIChzLm5leHRTcGxheSgpLmlzQXR0cigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNoYXJbXSBidWYgPSBuZXcgY2hhciBbIGNjaCBdOwotICAgICAgICAgICAgICAgIHIuX3RleHQuZmV0Y2goIGJ1ZiwgMCwgY3AsIGNjaFZhbHVlICk7Ci0gICAgICAgICAgICAgICAgci5fdGV4dC5mZXRjaCggYnVmLCBjY2hWYWx1ZSwgY3AgKyBjY2hWYWx1ZSArIGNjaEFmdGVyLCBjY2ggLSBjY2hWYWx1ZSApOwotCi0gICAgICAgICAgICAgICAgdHh0ID0gYnVmOwotICAgICAgICAgICAgICAgIGNwID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHNEc3QuaW5zZXJ0KCByRHN0LCBwRHN0LCBjb3B5LCB0eHQsIGNwLCBjY2gsIHRydWUgKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiByZW1vdmVYbWxDb250ZW50cyAoICkKLSAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoIG1vbml0b3IoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgICAgICAgICAgLy8gVE9ETyAtIHNob3VsZCBpbXBsZW1lbnQgdGhpcyB3aXRoIGludGVybmFscwotCi0gICAgICAgICAgICBpZiAoIWlzQ29udGFpbmVyKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBUb2tlblR5cGUgdHQgPSB0b0ZpcnN0Q29udGVudFRva2VuKCk7Ci0gICAgICAgICAgICBhc3NlcnQgIXR0LmlzTm9uZSgpOwotCi0gICAgICAgICAgICBib29sZWFuIHJlbW92ZWQgPSAhaXNGaW5pc2goKTsKLQotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCAhaXNGaW5pc2goKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBib29sZWFuIGIgPSByZW1vdmVYbWwoKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmluYWxseQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRvUGFyZW50KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiByZW1vdmVkOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGNvbnRhaW5zICggWG1sQ3Vyc29yIGRzdCApCi0gICAgewotICAgICAgICBpZiAoaXNJblNhbWVEb2N1bWVudCggZHN0ICkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRzdC5wdXNoKCk7Ci0KLSAgICAgICAgICAgIGZvciAoIDsgOyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGRzdC5pc0F0U2FtZVBvc2l0aW9uQXMoIHRoaXMgKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGRzdC5wb3AoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCFkc3QudG9QYXJlbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRzdC5wb3AoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBtb3ZlWG1sQ29udGVudHMgKCBYbWxDdXJzb3IgZHN0ICkKLSAgICB7Ci0gICAgICAgIGlmIChkc3QgPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oICJEZXN0aW5hdGlvbiBpcyBudWxsIiApOwotCi0gICAgICAgIGlmIChkc3QubW9uaXRvcigpID09IG1vbml0b3IoKSkKLSAgICAgICAgewotICAgICAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbW92ZVhtbENvbnRlbnRzSW1wbCggZHN0ICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBib29sZWFuIGFjcXVpcmVkID0gZmFsc2U7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBHbG9iYWxMb2NrLmFjcXVpcmUoKTsKLSAgICAgICAgICAgICAgICBhY3F1aXJlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAoZHN0Lm1vbml0b3IoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsTG9jay5yZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY3F1aXJlZCA9IGZhbHNlOwotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW92ZVhtbENvbnRlbnRzSW1wbCggZHN0ICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWG1sUnVudGltZUV4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSwgZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbGx5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGFjcXVpcmVkKQotICAgICAgICAgICAgICAgICAgICBHbG9iYWxMb2NrLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiBtb3ZlWG1sQ29udGVudHNJbXBsICggWG1sQ3Vyc29yIGRzdCApCi0gICAgewotICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgaWYgKCFpc0NvbnRhaW5lcigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBkc3QgaXMgaW4gc3JjISAgSW4gdGhpcyBjYXNlLCB0aGVyZSBpcyBub3RoaW5nIHRvCi0gICAgICAgIC8vIGRvLgotCi0gICAgICAgIGlmIChjb250YWlucyggZHN0ICkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgVG9rZW5UeXBlIHR0ID0gdG9GaXJzdENvbnRlbnRUb2tlbigpOwotICAgICAgICBhc3NlcnQgIXR0LmlzTm9uZSgpOwotCi0gICAgICAgIGJvb2xlYW4gbW92ZWQgPSAhaXNGaW5pc2goKTsKLQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtb3ZlWG1sSW1wbCggZHN0ICkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICB3aGlsZSAoICFpc0ZpbmlzaCgpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sZWFuIGIgPSBtb3ZlWG1sSW1wbCggZHN0ICk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IGI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWxseQotICAgICAgICB7Ci0gICAgICAgICAgICB0b1BhcmVudCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1vdmVkOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGNvcHlYbWxDb250ZW50cyAoIFhtbEN1cnNvciBkc3QgKQotICAgIHsKLSAgICAgICAgaWYgKGRzdCA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiggIkRlc3RpbmF0aW9uIGlzIG51bGwiICk7Ci0KLSAgICAgICAgaWYgKGRzdC5tb25pdG9yKCkgPT0gbW9uaXRvcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBjb3B5WG1sQ29udGVudHNJbXBsKCBkc3QgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJvb2xlYW4gYWNxdWlyZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEdsb2JhbExvY2suYWNxdWlyZSgpOwotICAgICAgICAgICAgICAgIGFjcXVpcmVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChkc3QubW9uaXRvcigpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBHbG9iYWxMb2NrLnJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjcXVpcmVkID0gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3B5WG1sQ29udGVudHNJbXBsKCBkc3QgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBYbWxSdW50aW1lRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpLCBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbmFsbHkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoYWNxdWlyZWQpCi0gICAgICAgICAgICAgICAgICAgIEdsb2JhbExvY2sucmVsZWFzZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGNvcHlYbWxDb250ZW50c0ltcGwgKCBYbWxDdXJzb3IgZHN0ICkKLSAgICB7Ci0gICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgICAgICBpZiAoIWlzQ29udGFpbmVyKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGRzdCBpcyBpbiBzcmMhICBJbiB0aGlzIGNhc2UsIGNvcHkgdGhlIHNyYyB0byBhIG5ldwotICAgICAgICAvLyBkb2N1bWVudCBhbmQgdGhlbiBtb3ZlIHRoZSBjb3BpZWQgY29udGVudHMgdG8gdGhlIGRlc3RpbmF0aW9uLgotCi0gICAgICAgIGlmIChjb250YWlucyggZHN0ICkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFhtbEN1cnNvciBjVG1wID0gWG1sT2JqZWN0LkZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdDdXJzb3IoKTsKLQotICAgICAgICAgICAgY1RtcC50b05leHRUb2tlbigpOwotCi0gICAgICAgICAgICBpZiAoIWNvcHlYbWxDb250ZW50c0ltcGwoIGNUbXAgKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjVG1wLmRpc3Bvc2UoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNUbXAudG9TdGFydERvYygpOwotICAgICAgICAgICAgKChDdXJzb3IpY1RtcCkubW92ZVhtbENvbnRlbnRzSW1wbCggZHN0ICk7Ci0gICAgICAgICAgICBjVG1wLmRpc3Bvc2UoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgVG9rZW5UeXBlIHR0ID0gdG9GaXJzdENvbnRlbnRUb2tlbigpOwotICAgICAgICBhc3NlcnQgIXR0LmlzTm9uZSgpOwotCi0gICAgICAgIGJvb2xlYW4gY29waWVkID0gIWlzRmluaXNoKCk7Ci0KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghY29weVhtbEltcGwoIGRzdCApKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgZm9yICggOyA7ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNTdGFydCgpKQotICAgICAgICAgICAgICAgICAgICB0b0VuZFRva2VuKCk7Ci0KLSAgICAgICAgICAgICAgICB0b05leHRUb2tlbigpOwotCi0gICAgICAgICAgICAgICAgaWYgKGlzRmluaXNoKCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgYm9vbGVhbiBiID0gY29weVhtbEltcGwoIGRzdCApOwotICAgICAgICAgICAgICAgIGFzc2VydCBiOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZpbmFsbHkKLSAgICAgICAgewotICAgICAgICAgICAgdG9QYXJlbnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBjb3BpZWQ7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNJblNhbWVEb2N1bWVudCAoIFhtbEN1cnNvciB4dGhhdCApCi0gICAgewotICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgICAgIGlmICh4dGhhdCA9PSBudWxsIHx8ICEoeHRoYXQgaW5zdGFuY2VvZiBDdXJzb3IpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgQ3Vyc29yIHRoYXQgPSAoQ3Vyc29yKSB4dGhhdDsKLQotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCggdGhhdCApOwotCi0gICAgICAgICAgICByZXR1cm4gZ2V0Um9vdCgpID09IHRoYXQuZ2V0Um9vdCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgcHVzaCAoICkKLSAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoIG1vbml0b3IoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgICAgICAgICAgaWYgKF9zdGFjayA9PSBudWxsKQotICAgICAgICAgICAgICAgIF9zdGFjayA9IG5ldyBTZWxlY3Rpb25zKCk7Ci0KLSAgICAgICAgICAgIF9zdGFjay5hZGQoIGdldFJvb3QoKSwgZ2V0U3BsYXkoKSwgZ2V0UG9zKCkgKTsKLQotICAgICAgICAgICAgZ2V0Um9vdCgpLnJlZ2lzdGVyRm9yQ2hhbmdlKCB0aGlzICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBwb3AgKCApCi0gICAgewotICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgICAgIGlmIChfc3RhY2sgPT0gbnVsbCB8fCBfc3RhY2suc2l6ZSgpID09IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBfc3RhY2suc2V0Q3Vyc29yKCB0aGlzLCBfc3RhY2suc2l6ZSgpIC0gMSApOwotCi0gICAgICAgICAgICBfc3RhY2sucG9wKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXRTZWxlY3Rpb25Db3VudCAoICkKLSAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoIG1vbml0b3IoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgICAgICAgICAgcmV0dXJuIF9zZWxlY3Rpb25zID09IG51bGwgPyAwIDogX3NlbGVjdGlvbnMuc2l6ZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gdG9TZWxlY3Rpb24gKCBpbnQgaSApCi0gICAgewotICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgICAgIGlmIChfc2VsZWN0aW9ucyAhPSBudWxsICYmIGkgPj0gMCAmJiBfc2VsZWN0aW9ucy5zZXRDdXJzb3IoIHRoaXMsIGkgKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfY3VycmVudFNlbGVjdGlvbiA9IGk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGhhc05leHRTZWxlY3Rpb24gKCApCi0gICAgewotICAgICAgICBzeW5jaHJvbml6ZWQgKCBtb25pdG9yKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBwdXNoKCk7Ci0gICAgICAgICAgICBpbnQgY3VycmVudFNlbGVjdGlvbiA9IF9jdXJyZW50U2VsZWN0aW9uOwotCi0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdG9OZXh0U2VsZWN0aW9uKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbGx5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcG9wKCk7Ci0gICAgICAgICAgICAgICAgX2N1cnJlbnRTZWxlY3Rpb24gPSBjdXJyZW50U2VsZWN0aW9uOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gdG9OZXh0U2VsZWN0aW9uICggKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICBpZiAoX3NlbGVjdGlvbnMgPT0gbnVsbCB8fCBfY3VycmVudFNlbGVjdGlvbiA8IC0xKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaW50IG5leHRTZWxlY3Rpb24gPSBfY3VycmVudFNlbGVjdGlvbiArIDE7Ci0KLSAgICAgICAgICAgIGlmICghX3NlbGVjdGlvbnMuc2V0Q3Vyc29yKCB0aGlzLCBuZXh0U2VsZWN0aW9uICkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2N1cnJlbnRTZWxlY3Rpb24gPSAtMjsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIF9jdXJyZW50U2VsZWN0aW9uID0gbmV4dFNlbGVjdGlvbjsKLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBjbGVhclNlbGVjdGlvbnMgKCAgKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICBpZiAoX3NlbGVjdGlvbnMgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBfc2VsZWN0aW9ucy5kaXNwb3NlKCk7Ci0KLSAgICAgICAgICAgIF9jdXJyZW50U2VsZWN0aW9uID0gLTI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRUb1NlbGVjdGlvbiAoICkKLSAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoIG1vbml0b3IoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgICAgICAgICAgaWYgKF9zZWxlY3Rpb25zID09IG51bGwpCi0gICAgICAgICAgICAgICAgX3NlbGVjdGlvbnMgPSBQYXRoLm5ld1NlbGVjdGlvbnMoKTsKLQotICAgICAgICAgICAgLy8gRm9yY2UgYW55IHNlbGVjdGlvbiBlbmdpbmUgdG8gc2VhcmNoIGFsbC4uLgotICAgICAgICAgICAgX3NlbGVjdGlvbnMuc2l6ZSgpOwotCi0gICAgICAgICAgICBfc2VsZWN0aW9ucy5hZGQoIGdldFJvb3QoKSwgZ2V0U3BsYXkoKSwgZ2V0UG9zKCkgKTsKLQotICAgICAgICAgICAgZ2V0Um9vdCgpLnJlZ2lzdGVyRm9yQ2hhbmdlKCB0aGlzICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBjaGFuZ2VOb3RpZmljYXRpb24gKCApCi0gICAgewotICAgICAgICBpZiAoX3NlbGVjdGlvbnMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgX3NlbGVjdGlvbnMuc2l6ZSgpOyAgLy8gRm9yY2UgYSBmdWxsIHNlbGVjdGlvbgotICAgICAgICAgICAgX3NlbGVjdGlvbnMuY3Vyc2lmeSggZ2V0Um9vdCgpICk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoX3N0YWNrICE9IG51bGwpCi0gICAgICAgICAgICBfc3RhY2suY3Vyc2lmeSggZ2V0Um9vdCgpICk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2VsZWN0UGF0aCAoIFN0cmluZyBwYXRoLCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgIHsKLSAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tEaXNwb3NlZCgpOwotCi0gICAgICAgICAgICBpZiAoX3NlbGVjdGlvbnMgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICBfc2VsZWN0aW9ucyA9IFBhdGgubmV3U2VsZWN0aW9ucygpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIF9zZWxlY3Rpb25zLmRpc3Bvc2UoKTsKLQotICAgICAgICAgICAgX3NlbGVjdGlvbnMuaW5pdCgKLSAgICAgICAgICAgICAgICBQYXRoLnNlbGVjdCggZ2V0Um9vdCgpLCBnZXRTcGxheSgpLCBnZXRQb3MoKSwgcGF0aCwgb3B0aW9ucyApICk7Ci0KLSAgICAgICAgICAgIHB1c2goKTsKLQotICAgICAgICAgICAgaWYgKF9zZWxlY3Rpb25zLnNldEN1cnNvciggdGhpcywgMCApKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdldFJvb3QoKS5yZWdpc3RlckZvckNoYW5nZSggdGhpcyApOwotICAgICAgICAgICAgICAgIF9jdXJyZW50U2VsZWN0aW9uID0gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgX2N1cnJlbnRTZWxlY3Rpb24gPSAtMjsKLQotICAgICAgICAgICAgcG9wKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZWxlY3RQYXRoICggU3RyaW5nIHBhdGggKQotICAgIHsKLSAgICAgICAgc2VsZWN0UGF0aCggcGF0aCwgbnVsbCApOwotICAgIH0KLQotICAgIHB1YmxpYyBYbWxDdXJzb3IgZXhlY1F1ZXJ5ICggU3RyaW5nIHF1ZXJ5RXhwciwgWG1sT3B0aW9ucyBvcHRpb25zICkKLSAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoIG1vbml0b3IoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgICAgICAgICAgcmV0dXJuIFBhdGgucXVlcnkoIHRoaXMsIHF1ZXJ5RXhwciwgb3B0aW9ucyApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFhtbEN1cnNvciBleGVjUXVlcnkgKCBTdHJpbmcgcXVlcnkgKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGV4ZWNRdWVyeSggcXVlcnksIG51bGwgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTm9kZSBuZXdEb21Ob2RlICggKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ld0RvbU5vZGUoIG51bGwgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTm9kZSBuZXdEb21Ob2RlICggWG1sT3B0aW9ucyBvcHRpb25zICkKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBTYXZlci5Eb21TYXZlciBzYXZlcjsKLQotICAgICAgICAgICAgc3luY2hyb25pemVkICggbW9uaXRvcigpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjaGVja0Rpc3Bvc2VkKCk7Ci0KLSAgICAgICAgICAgICAgICBzYXZlciA9IG5ldyBTYXZlci5Eb21TYXZlcigKLSAgICAgICAgICAgICAgICAgICAgZ2V0Um9vdCgpLCBnZXRTcGxheSgpLCBnZXRQb3MoKSwgIWlzRnJhZ21lbnQoKSwgb3B0aW9ucyApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gc2F2ZXIuZXhwb3J0RG9tKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKCBFeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgUnVudGltZUV4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICB0aHJvdyAoUnVudGltZUV4Y2VwdGlvbikgZTsKLQotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIGUuZ2V0TWVzc2FnZSgpLCBlICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNGcmFnbWVudCgpCi0gICAgewotICAgICAgICBpZiAoISBpc1N0YXJ0ZG9jKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBib29sZWFuIHNlZW5FbGVtZW50ID0gZmFsc2U7Ci0KLSAgICAgICAgWG1sQ3Vyc29yIGMgPSBuZXdDdXJzb3IoKTsKLSAgICAgICAgaW50IHRva2VuID0gYy50b05leHRUb2tlbigpLmludFZhbHVlKCk7Ci0KLSAgICAgICAgdHJ5IHsKLQotICAgICAgICAgICAgTE9PUDoKLSAgICAgICAgICAgIHdoaWxlICh0cnVlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNXSVRDSDoKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHRva2VuKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuSU5UX1NUQVJUOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlZW5FbGVtZW50KSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlZW5FbGVtZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gYy50b0VuZFRva2VuKCkuaW50VmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIFNXSVRDSDsKLQotICAgICAgICAgICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5JTlRfVEVYVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIFNwbGF5LmlzV2hpdGVTcGFjZShjLmdldENoYXJzKCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBjLnRvTmV4dFRva2VuKCkuaW50VmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIFNXSVRDSDsKLQotCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLklOVF9OT05FOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5JTlRfRU5ERE9DOgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgTE9PUDsKLQotCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLklOVF9BVFRSOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5JTlRfTkFNRVNQQUNFOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuSU5UX0VORDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuSU5UX0NPTU1FTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLklOVF9QUk9DSU5TVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gYy50b05leHRUb2tlbigpLmludFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhayBTV0lUQ0g7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuSU5UX1NUQVJURE9DOgotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgTE9PUDsKLQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWxseSB7Ci0gICAgICAgICAgICBjLmRpc3Bvc2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAhIHNlZW5FbGVtZW50OwotCi0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2F2ZSAoIENvbnRlbnRIYW5kbGVyIGNoLCBMZXhpY2FsSGFuZGxlciBsaCApCi0gICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHNhdmUoIGNoLCBsaCwgbnVsbCApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNhdmUgKCBGaWxlIGZpbGUgKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHNhdmUoIGZpbGUsIG51bGwgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzYXZlICggT3V0cHV0U3RyZWFtIG9zICkgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBzYXZlKCBvcywgbnVsbCApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNhdmUgKCBXcml0ZXIgdyApIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgc2F2ZSggdywgbnVsbCApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNhdmUgKCBDb250ZW50SGFuZGxlciBjaCwgTGV4aWNhbEhhbmRsZXIgbGgsIFhtbE9wdGlvbnMgb3B0aW9ucykKLSAgICAgICAgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgLy8gdG9kbzogZG9uJ3QgaG9sZCB0aGUgbW9uaXRvciBhbGwgdGhpcyBsb25nLgotICAgICAgICAvLyBJZGVhbGx5LCB3ZSdkIHJlbGVhc2UgdGhlIG1vbml0b3IgZWFjaCB0aW1lIHdlJ3JlIGFib3V0IHRvIGNhbGwgdGhlCi0gICAgICAgIC8vIGNoIG9yIGxoIG9iamVjdHMuICBIb3dldmVyLCB0aGUgc2F2ZXIgY29kZSBpc24ndCBfcXVpdGVfIHN0cnVjdHVyZQotICAgICAgICAvLyBqdXN0IHJpZ2h0IHRvIGRvIHRoYXQuICBTbyBpbnN0ZWFkLCB0aGUgY3VycmVudCB2ZXJzaW9uIHdpbGwgaG9sZAotICAgICAgICAvLyB0aGUgbW9uaXRvciBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBlbnRpcmUgU0FYIHNhdmUuCi0gICAgICAgIHN5bmNocm9uaXplZCAoIG1vbml0b3IoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrRGlzcG9zZWQoKTsKLQotICAgICAgICAgICAgbmV3IFNhdmVyLlNheFNhdmVyKCBnZXRSb290KCksIGdldFNwbGF5KCksIGdldFBvcygpLCBvcHRpb25zLCBjaCwgbGggKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNhdmUgKCBGaWxlIGZpbGUsIFhtbE9wdGlvbnMgb3B0aW9ucyApIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oIGZpbGUgKTsKLQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgc2F2ZSggb3MsIG9wdGlvbnMgKTsKLSAgICAgICAgfQotICAgICAgICBmaW5hbGx5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG9zLmNsb3NlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzYXZlICggT3V0cHV0U3RyZWFtIG9zLCBYbWxPcHRpb25zIG9wdGlvbnMgKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIC8vIG5vdGUgdGhhdCB3ZSBkbyBub3QgaG9sZCB0aGUgbW9uaXRvciBmb3IgdGhlIGR1cmF0aW9uIG9mIGEgc2F2ZS4KLSAgICAgICAgLy8gSW5zdGVhZCwgYSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbiBleGNlcHRpb24gaXMgdGhyb3duIGlmIHRoZQotICAgICAgICAvLyBkb2N1bWVudCBpcyBtb2RpZmllZCB3aGlsZSB0aGUgc2F2ZSBpcyBpbiBwcm9ncmVzcy4gSWYgdGhlIHVzZXIKLSAgICAgICAgLy8gd2lzaGVzIHRvIHByb3RlY3QgYWdhaW5zdCB0aGlzLCBoZSBjYW4gc3luY2hyb25pemUgb24gdGhlIG1vbml0b3IKLSAgICAgICAgLy8gaGltc2VsZi4KLSAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBuZXdJbnB1dFN0cmVhbSggb3B0aW9ucyApOwotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBieXRlW10gYnl0ZXMgPSBuZXcgYnl0ZVsgODE5MiBdOwotCi0gICAgICAgICAgICBmb3IgKCA7IDsgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBuID0gaXMucmVhZCggYnl0ZXMgKTsKLQotICAgICAgICAgICAgICAgIGlmIChuIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBvcy53cml0ZSggYnl0ZXMsIDAsIG4gKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmaW5hbGx5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlzLmNsb3NlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzYXZlICggV3JpdGVyIHcsIFhtbE9wdGlvbnMgb3B0aW9ucyApIHRocm93cyBJT0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgUmVhZGVyIHIgPSBuZXdSZWFkZXIoIG9wdGlvbnMgKTsKLQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgY2hhcltdIGNoYXJzID0gbmV3IGNoYXJbIDgxOTIgXTsKLQotICAgICAgICAgICAgZm9yICggOyA7ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgbiA9IHIucmVhZCggY2hhcnMgKTsKLQotICAgICAgICAgICAgICAgIGlmIChuIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICB3LndyaXRlKCBjaGFycywgMCwgbiApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZpbmFsbHkKLSAgICAgICAgewotICAgICAgICAgICAgci5jbG9zZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLwotICAgIC8vCi0KLSAgICBwcml2YXRlIGJvb2xlYW4gdmFsaWRhdGUgKCApCi0gICAgewotICAgICAgICBhc3NlcnQgX2dvb2Jlci5nZXRSb290KCkudmFsaWRhdGUoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZHVtcCAoICkgeyBfZ29vYmVyLmdldFJvb3QoKS5kdW1wKCk7IH0KLSAgICBwdWJsaWMgdm9pZCBkdW1wICggYm9vbGVhbiB2ZXJib3NlICkgeyBfZ29vYmVyLmdldFJvb3QoKS5kdW1wKCB2ZXJib3NlICk7IH0KLQotICAgIGludGVyZmFjZSBQYXRoRW5naW5lCi0gICAgewotICAgICAgICBib29sZWFuIG5leHQgKCBTZWxlY3Rpb25zIHNlbGVjdGlvbnMgKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY2xhc3MgU2VsZWN0aW9ucwotICAgIHsKLSAgICAgICAgdm9pZCBpbml0ICggUGF0aEVuZ2luZSBwYXRoRW5naW5lICkKLSAgICAgICAgewotICAgICAgICAgICAgZGlzcG9zZSgpOwotCi0gICAgICAgICAgICBfcGF0aEVuZ2luZSA9IHBhdGhFbmdpbmU7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGFkZCAoIFJvb3QgciwgU3BsYXkgcyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFkZCggciwgcywgMCApOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBhZGQgKCBSb290IHIsIFNwbGF5IHMsIGludCBwICkKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0IHMuZ2V0Um9vdFNsb3coKSA9PSByOwotCi0gICAgICAgICAgICBpZiAoX2N1cnNvcnMgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDdXJzb3JHb29iZXIgZyA9IG5ldyBDdXJzb3JHb29iZXIoIHIgKTsKLQotICAgICAgICAgICAgICAgIGcuc2V0KCBzLCBwICk7Ci0KLSAgICAgICAgICAgICAgICBfY3Vyc29ycy5hZGQoIGcgKTsKLQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKF9zcGxheXMgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQgX2NvdW50ID09IDA7Ci0gICAgICAgICAgICAgICAgX3NwbGF5cyA9IG5ldyBTcGxheSBbIDE2IF07Ci0gICAgICAgICAgICAgICAgX3Bvc2l0aW9ucyA9IG5ldyBpbnQgWyAxNiBdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoX2NvdW50ID09IF9zcGxheXMubGVuZ3RoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNwbGF5W10gbmV3U3BsYXlzID0gbmV3IFNwbGF5IFsgX2NvdW50ICogMiBdOwotICAgICAgICAgICAgICAgIGludFtdICAgbmV3UG9zaXRpb25zID0gbmV3IGludCBbIF9jb3VudCAqIDIgXTsKLQotICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoIF9zcGxheXMsIDAsIG5ld1NwbGF5cywgMCwgX2NvdW50ICk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSggX3Bvc2l0aW9ucywgMCwgbmV3UG9zaXRpb25zLCAwLCBfY291bnQgKTsKLQotICAgICAgICAgICAgICAgIF9zcGxheXMgPSBuZXdTcGxheXM7Ci0gICAgICAgICAgICAgICAgX3Bvc2l0aW9ucyA9IG5ld1Bvc2l0aW9uczsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgX3NwbGF5c1sgX2NvdW50IF0gPSBzOwotICAgICAgICAgICAgX3Bvc2l0aW9uc1sgX2NvdW50IF0gPSBwOwotCi0gICAgICAgICAgICBfY291bnQrKzsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgcG9wICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgc2l6ZSgpID4gMDsKLQotICAgICAgICAgICAgaWYgKF9jdXJzb3JzICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IGkgPSBfY3Vyc29ycy5zaXplKCkgLSAxOwotICAgICAgICAgICAgICAgICgoQ3Vyc29yR29vYmVyKSBfY3Vyc29ycy5nZXQoIGkgKSkuc2V0KCBudWxsLCAwICk7Ci0gICAgICAgICAgICAgICAgX2N1cnNvcnMucmVtb3ZlKCBpICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgX2NvdW50LS07Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGN1cnNpZnkgKCBSb290IHIgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX2N1cnNvcnMgIT0gbnVsbCB8fCBfY291bnQgPD0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIF9jdXJzb3JzID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgX2NvdW50IDsgaSsrICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDdXJzb3JHb29iZXIgZyA9IG5ldyBDdXJzb3JHb29iZXIoIHIgKTsKLQotICAgICAgICAgICAgICAgIGcuc2V0KCBfc3BsYXlzWyBpIF0sIF9wb3NpdGlvbnNbIGkgXSApOwotCi0gICAgICAgICAgICAgICAgX2N1cnNvcnMuYWRkKCBnICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIF9jb3VudCA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgc2l6ZSAoICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKF9wYXRoRW5naW5lICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCBfcGF0aEVuZ2luZS5uZXh0KCB0aGlzICkgKQotICAgICAgICAgICAgICAgICAgICA7Ci0KLSAgICAgICAgICAgICAgICBfcGF0aEVuZ2luZSA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50U2l6ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGN1cnJlbnRTaXplICggKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gX2N1cnNvcnMgIT0gbnVsbCA/IF9jdXJzb3JzLnNpemUoKSA6IF9jb3VudDsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2xlYW4gc2V0Q3Vyc29yICggQ3Vyc29yIGMsIGludCBpICkKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0IGkgPj0gMDsKLQotICAgICAgICAgICAgd2hpbGUgKCBfcGF0aEVuZ2luZSAhPSBudWxsICYmIGN1cnJlbnRTaXplKCkgPD0gaSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFfcGF0aEVuZ2luZS5uZXh0KCB0aGlzICkpCi0gICAgICAgICAgICAgICAgICAgIF9wYXRoRW5naW5lID0gbnVsbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGkgPj0gY3VycmVudFNpemUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGlmIChfY3Vyc29ycyAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFzc2VydCBpIDwgX2N1cnNvcnMuc2l6ZSgpOwotICAgICAgICAgICAgICAgIGMuc2V0KCAoQ3Vyc29yR29vYmVyKSBfY3Vyc29ycy5nZXQoIGkgKSApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFzc2VydCBpIDwgX2NvdW50OwotICAgICAgICAgICAgICAgIGMuc2V0KCBfc3BsYXlzWyBpIF0sIF9wb3NpdGlvbnNbIGkgXSApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZGlzcG9zZSAoICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKF9jdXJzb3JzICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IF9jdXJzb3JzLnNpemUoKSA7IGkrKyApCi0gICAgICAgICAgICAgICAgICAgICgoQ3Vyc29yR29vYmVyKSBfY3Vyc29ycy5nZXQoIGkgKSkuc2V0KCBudWxsLCAwICk7Ci0KLSAgICAgICAgICAgICAgICBfY3Vyc29ycy5jbGVhcigpOwotCi0gICAgICAgICAgICAgICAgX2N1cnNvcnMgPSBudWxsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBfY291bnQgPSAwOwotCi0gICAgICAgICAgICAvLyBUT0RPIC0gY2FjaGUgdW51c2VkIFNlbGVjaXRvbiBvYmplY3RzIGZvciBsYXRlciByZXVzZQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBTcGxheVtdIF9zcGxheXM7Ci0gICAgICAgIHByaXZhdGUgaW50W10gICBfcG9zaXRpb25zOwotICAgICAgICBwcml2YXRlIGludCAgICAgX2NvdW50OwotCi0gICAgICAgIHByaXZhdGUgQXJyYXlMaXN0IF9jdXJzb3JzOwotCi0gICAgICAgIHByaXZhdGUgUGF0aEVuZ2luZSBfcGF0aEVuZ2luZTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIFhNTFN0cmVhbVJlYWRlcgotICAgIC8vCi0KLSAgICBwcml2YXRlIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBYTUxTdHJlYW1SZWFkZXJCYXNlCi0gICAgICAgIGltcGxlbWVudHMgWE1MU3RyZWFtUmVhZGVyLCBOYW1lc3BhY2VDb250ZXh0LCBMb2NhdGlvbgotICAgIHsKLSAgICAgICAgWE1MU3RyZWFtUmVhZGVyQmFzZSAoIFhtbEN1cnNvciBjICkKLSAgICAgICAgewotICAgICAgICAgICAgX2NoYW5nZVN0YW1wID0gYy5nZXREb2NDaGFuZ2VTdGFtcCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgY2hlY2tDaGFuZ2VkICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX2NoYW5nZVN0YW1wLmhhc0NoYW5nZWQoKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbiggIkRvY3VtZW50IGNoYW5nZWQgd2hpbGUgc3RyZWFtaW5nIiApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gWE1MU3RyZWFtUmVhZGVyIG1ldGhvZHMKLSAgICAgICAgLy8KLQotICAgICAgICBwdWJsaWMgdm9pZCBjbG9zZSAoICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tDaGFuZ2VkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgTG9jYXRpb24gZ2V0TG9jYXRpb24gKCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrQ2hhbmdlZCgpOwotCi0gICAgICAgICAgICBYbWxDdXJzb3IgYyA9IGdldEN1cnNvcigpOwotCi0gICAgICAgICAgICBYbWxMaW5lTnVtYmVyIGxuID0gKFhtbExpbmVOdW1iZXIpIGMuZ2V0Qm9va21hcmsoIFhtbExpbmVOdW1iZXIuY2xhc3MgKTsKLQotICAgICAgICAgICAgLy8gQlVHQlVHIC0gcHV0IHNvdXJjZSBuYW1lIGhlcmUKLSAgICAgICAgICAgIF91cmkgPSBudWxsOwotCi0gICAgICAgICAgICBpZiAobG4gIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfbGluZSA9IGxuLmdldExpbmUoKTsKLSAgICAgICAgICAgICAgICBfY29sdW1uID0gbG4uZ2V0Q29sdW1uKCk7Ci0gICAgICAgICAgICAgICAgX29mZnNldCA9IGxuLmdldE9mZnNldCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9saW5lID0gLTE7Ci0gICAgICAgICAgICAgICAgX2NvbHVtbiA9IC0xOwotICAgICAgICAgICAgICAgIF9vZmZzZXQgPSAtMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgTmFtZXNwYWNlQ29udGV4dCBnZXROYW1lc3BhY2VDb250ZXh0ICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0NoYW5nZWQoKTsKLQotICAgICAgICAgICAgcmV0dXJuIHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgT2JqZWN0IGdldFByb3BlcnR5ICggU3RyaW5nIG5hbWUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0NoYW5nZWQoKTsKLQotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oICJOb3QgaW1wbGVtZW50ZWQiICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldENoYXJhY3RlckVuY29kaW5nU2NoZW1lICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0NoYW5nZWQoKTsKLQotICAgICAgICAgICAgWG1sRG9jdW1lbnRQcm9wZXJ0aWVzIHByb3BzID0gZ2V0Q3Vyc29yKCkuZG9jdW1lbnRQcm9wZXJ0aWVzKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBwcm9wcyA9PSBudWxsID8gbnVsbCA6IHByb3BzLmdldEVuY29kaW5nKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldEVuY29kaW5nICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0NoYW5nZWQoKTsKLQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFZlcnNpb24gKCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrQ2hhbmdlZCgpOwotCi0gICAgICAgICAgICBYbWxEb2N1bWVudFByb3BlcnRpZXMgcHJvcHMgPSBnZXRDdXJzb3IoKS5kb2N1bWVudFByb3BlcnRpZXMoKTsKLQotICAgICAgICAgICAgcmV0dXJuIHByb3BzID09IG51bGwgPyBudWxsIDogcHJvcHMuZ2V0VmVyc2lvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gaXNTdGFuZGFsb25lICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0NoYW5nZWQoKTsKLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gc3RhbmRhbG9uZVNldCAoICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tDaGFuZ2VkKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHJlcXVpcmUgKCBpbnQgdHlwZSwgU3RyaW5nIG5hbWVzcGFjZVVSSSwgU3RyaW5nIGxvY2FsTmFtZSApCi0gICAgICAgICAgICB0aHJvd3MgWE1MU3RyZWFtRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrQ2hhbmdlZCgpOwotCi0gICAgICAgICAgICBpZiAodHlwZSAhPSBnZXRFdmVudFR5cGUoKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWE1MU3RyZWFtRXhjZXB0aW9uKCk7Ci0KLSAgICAgICAgICAgIGlmIChuYW1lc3BhY2VVUkkgIT0gbnVsbCAmJiAhZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKCBuYW1lc3BhY2VVUkkgKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWE1MU3RyZWFtRXhjZXB0aW9uKCk7Ci0KLSAgICAgICAgICAgIGlmIChsb2NhbE5hbWUgIT0gbnVsbCAmJiAhZ2V0TG9jYWxOYW1lKCkuZXF1YWxzKCBsb2NhbE5hbWUgKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWE1MU3RyZWFtRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLwotICAgICAgICAvLyBMb2NhdGlvbiBhbmQgTmFtZXNwYWNlQ29udGV4dCBtZXRob2RzCi0gICAgICAgIC8vCi0KLSAgICAgICAgcHVibGljIGludCAgICBnZXRDaGFyYWN0ZXJPZmZzZXQgKCApIHsgcmV0dXJuIF9vZmZzZXQ7IH0KLSAgICAgICAgcHVibGljIGludCAgICBnZXRDb2x1bW5OdW1iZXIgICAgKCApIHsgcmV0dXJuIF9jb2x1bW47IH0KLSAgICAgICAgcHVibGljIGludCAgICBnZXRMaW5lTnVtYmVyICAgICAgKCApIHsgcmV0dXJuIF9saW5lOyAgIH0KLSAgICAgICAgcHVibGljIFN0cmluZyBnZXRMb2NhdGlvblVSSSAgICAgKCApIHsgcmV0dXJuIF91cmk7ICAgIH0KLQotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZVVSSSAoIFN0cmluZyBwcmVmaXggKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0NoYW5nZWQoKTsKLQotICAgICAgICAgICAgWG1sQ3Vyc29yIGMgPSBnZXRDdXJzb3IoKTsKLQotICAgICAgICAgICAgYm9vbGVhbiBwb3AgPSBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKCFjLmlzQ29udGFpbmVyKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYy5wdXNoKCk7Ci0gICAgICAgICAgICAgICAgYy50b1BhcmVudCgpOwotICAgICAgICAgICAgICAgIHBvcCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFN0cmluZyBucyA9IGMubmFtZXNwYWNlRm9yUHJlZml4KCBwcmVmaXggKTsKLQotICAgICAgICAgICAgaWYgKHBvcCkKLSAgICAgICAgICAgICAgICBjLnBvcCgpOwotCi0gICAgICAgICAgICByZXR1cm4gbnM7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFByZWZpeCAoIFN0cmluZyBuYW1lc3BhY2VVUkkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0NoYW5nZWQoKTsKLQotICAgICAgICAgICAgWG1sQ3Vyc29yIGMgPSBnZXRDdXJzb3IoKTsKLQotICAgICAgICAgICAgYm9vbGVhbiBwb3AgPSBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKCFjLmlzQ29udGFpbmVyKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYy5wdXNoKCk7Ci0gICAgICAgICAgICAgICAgYy50b1BhcmVudCgpOwotICAgICAgICAgICAgICAgIHBvcCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEhhc2hNYXAgbWFwID0gbmV3IEhhc2hNYXAoKTsKLQotICAgICAgICAgICAgYy5nZXRBbGxOYW1lc3BhY2VzKCBtYXAgKTsKLQotICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IChTdHJpbmcpIG1hcC5nZXQoIG5hbWVzcGFjZVVSSSApOwotCi0gICAgICAgICAgICBpZiAocG9wKQotICAgICAgICAgICAgICAgIGMucG9wKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBwcmVmaXg7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgSXRlcmF0b3IgZ2V0UHJlZml4ZXMgKCBTdHJpbmcgbmFtZXNwYWNlVVJJICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tDaGFuZ2VkKCk7Ci0KLSAgICAgICAgICAgIC8vIEJVR0JVRyAtIGdldCBvbmx5IG9uZSBmb3Igbm93IC4uLgotCi0gICAgICAgICAgICBIYXNoTWFwIG1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0KLSAgICAgICAgICAgIG1hcC5wdXQoIG5hbWVzcGFjZVVSSSwgZ2V0UHJlZml4KCBuYW1lc3BhY2VVUkkgKSApOwotCi0gICAgICAgICAgICByZXR1cm4gbWFwLnZhbHVlcygpLml0ZXJhdG9yKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLwotICAgICAgICAvLwotICAgICAgICAvLwotCi0gICAgICAgIHByb3RlY3RlZCBhYnN0cmFjdCBYbWxDdXJzb3IgZ2V0Q3Vyc29yICggKTsKLQotICAgICAgICAvLwotICAgICAgICAvLwotICAgICAgICAvLwotCi0gICAgICAgIHByaXZhdGUgQ2hhbmdlU3RhbXAgX2NoYW5nZVN0YW1wOwotICAgICAgICBTdHJpbmcgX3VyaTsKLSAgICAgICAgaW50IF9saW5lLCBfY29sdW1uLCBfb2Zmc2V0OwotICAgIH0KLQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgWE1MU3RyZWFtUmVhZGVyRm9yU3RyaW5nIGV4dGVuZHMgWE1MU3RyZWFtUmVhZGVyQmFzZQotICAgIHsKLSAgICAgICAgWE1MU3RyZWFtUmVhZGVyRm9yU3RyaW5nICggWG1sQ3Vyc29yIGMsIFN0cmluZyBzICkKLSAgICAgICAgewotICAgICAgICAgICAgc3VwZXIoIGMgKTsKLQotICAgICAgICAgICAgX2N1cnNvciA9IGM7Ci0KLSAgICAgICAgICAgIF9zdHJpbmcgPSBzID09IG51bGwgPyAiIiA6IHM7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgWG1sQ3Vyc29yIGdldEN1cnNvciAoICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIF9jdXJzb3I7Ci0gICAgICAgIH0KLQotICAgICAgICAvLwotICAgICAgICAvLyBMZWdhbCBzdHJlYW0gbWV0aG9kcwotICAgICAgICAvLwotCi0gICAgICAgIHB1YmxpYyBpbnQgICAgIGdldEV2ZW50VHlwZSAgICAgICggKSB7IGNoZWNrQ2hhbmdlZCgpOyByZXR1cm4gQ0hBUkFDVEVSUzsgICAgICAgICAgICB9Ci0gICAgICAgIHB1YmxpYyBTdHJpbmcgIGdldFRleHQgICAgICAgICAgICggKSB7IGNoZWNrQ2hhbmdlZCgpOyByZXR1cm4gX3N0cmluZzsgICAgICAgICAgICAgICB9Ci0gICAgICAgIHB1YmxpYyBjaGFyW10gIGdldFRleHRDaGFyYWN0ZXJzICggKSB7IGNoZWNrQ2hhbmdlZCgpOyByZXR1cm4gX3N0cmluZy50b0NoYXJBcnJheSgpOyB9Ci0gICAgICAgIHB1YmxpYyBpbnQgICAgIGdldFRleHRTdGFydCAgICAgICggKSB7IGNoZWNrQ2hhbmdlZCgpOyByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgIHB1YmxpYyBpbnQgICAgIGdldFRleHRMZW5ndGggICAgICggKSB7IGNoZWNrQ2hhbmdlZCgpOyByZXR1cm4gX3N0cmluZy5sZW5ndGgoKTsgICAgICB9Ci0gICAgICAgIHB1YmxpYyBib29sZWFuIGhhc05hbWUgICAgICAgICAgICggKSB7IGNoZWNrQ2hhbmdlZCgpOyByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgIHB1YmxpYyBib29sZWFuIGhhc05leHQgICAgICAgICAgICggKSB7IGNoZWNrQ2hhbmdlZCgpOyByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgIHB1YmxpYyBib29sZWFuIGhhc1RleHQgICAgICAgICAgICggKSB7IGNoZWNrQ2hhbmdlZCgpOyByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzQ2hhcmFjdGVycyAgICAgICggKSB7IGNoZWNrQ2hhbmdlZCgpOyByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzRW5kRWxlbWVudCAgICAgICggKSB7IGNoZWNrQ2hhbmdlZCgpOyByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzU3RhcnRFbGVtZW50ICAgICggKSB7IGNoZWNrQ2hhbmdlZCgpOyByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGludCBnZXRUZXh0Q2hhcmFjdGVycyAoIGludCBzb3VyY2VTdGFydCwgY2hhcltdIHRhcmdldCwgaW50IHRhcmdldFN0YXJ0LCBpbnQgbGVuZ3RoICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tDaGFuZ2VkKCk7Ci0KLSAgICAgICAgICAgIGludCBzb3VyY2VFbmQgPSBzb3VyY2VTdGFydCArIGxlbmd0aDsKLQotICAgICAgICAgICAgaWYgKHNvdXJjZUVuZCA+PSBfc3RyaW5nLmxlbmd0aCgpKQotICAgICAgICAgICAgICAgIHNvdXJjZUVuZCA9IF9zdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIF9zdHJpbmcuZ2V0Q2hhcnMoIHNvdXJjZVN0YXJ0LCBzb3VyY2VFbmQsIHRhcmdldCwgdGFyZ2V0U3RhcnQgKTsKLQotICAgICAgICAgICAgcmV0dXJuIHNvdXJjZUVuZCAtIHNvdXJjZVN0YXJ0OwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gaXNXaGl0ZVNwYWNlICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0NoYW5nZWQoKTsKLQotICAgICAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IF9zdHJpbmcubGVuZ3RoKCkgOyBpKysgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghU3BsYXkuaXNXaGl0ZVNwYWNlKCBfc3RyaW5nLmNoYXJBdCggaSApICkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLwotICAgICAgICAvLyBJbGxlZ2FsIHN0cmVhbSBtZXRob2RzCi0gICAgICAgIC8vCi0KLSAgICAgICAgcHVibGljIGludCAgICAgZ2V0QXR0cmlidXRlQ291bnQgKCApIHsgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOyB9Ci0gICAgICAgIHB1YmxpYyBTdHJpbmcgIGdldEF0dHJpYnV0ZUxvY2FsTmFtZSAoIGludCBpbmRleCApIHsgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOyB9Ci0gICAgICAgIHB1YmxpYyBRTmFtZSAgIGdldEF0dHJpYnV0ZU5hbWUgKCBpbnQgaW5kZXggKSB7IHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsgfQotICAgICAgICBwdWJsaWMgU3RyaW5nICBnZXRBdHRyaWJ1dGVOYW1lc3BhY2UgKCBpbnQgaW5kZXggKSB7IHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsgfQotICAgICAgICBwdWJsaWMgU3RyaW5nICBnZXRBdHRyaWJ1dGVQcmVmaXggKCBpbnQgaW5kZXggKSB7IHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsgfQotICAgICAgICBwdWJsaWMgU3RyaW5nICBnZXRBdHRyaWJ1dGVUeXBlICggaW50IGluZGV4ICkgeyB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7IH0KLSAgICAgICAgcHVibGljIFN0cmluZyAgZ2V0QXR0cmlidXRlVmFsdWUgKCBpbnQgaW5kZXggKSB7IHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsgfQotICAgICAgICBwdWJsaWMgU3RyaW5nICBnZXRBdHRyaWJ1dGVWYWx1ZSAoIFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBsb2NhbE5hbWUgKSB7IHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsgfQotICAgICAgICBwdWJsaWMgU3RyaW5nICBnZXRFbGVtZW50VGV4dCAoICkgeyB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7IH0KLSAgICAgICAgcHVibGljIFN0cmluZyAgZ2V0TG9jYWxOYW1lICggKSB7IHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsgfQotICAgICAgICBwdWJsaWMgUU5hbWUgICBnZXROYW1lICggKSB7IHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsgfQotICAgICAgICBwdWJsaWMgaW50ICAgICBnZXROYW1lc3BhY2VDb3VudCAoICkgeyB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7IH0KLSAgICAgICAgcHVibGljIFN0cmluZyAgZ2V0TmFtZXNwYWNlUHJlZml4ICggaW50IGluZGV4ICkgeyB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7IH0KLSAgICAgICAgcHVibGljIFN0cmluZyAgZ2V0TmFtZXNwYWNlVVJJICggaW50IGluZGV4ICkgeyB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7IH0KLSAgICAgICAgcHVibGljIFN0cmluZyAgZ2V0TmFtZXNwYWNlVVJJICggKSB7IHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsgfQotICAgICAgICBwdWJsaWMgU3RyaW5nICBnZXRQSURhdGEgKCApIHsgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOyB9Ci0gICAgICAgIHB1YmxpYyBTdHJpbmcgIGdldFBJVGFyZ2V0ICggKSB7IHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsgfQotICAgICAgICBwdWJsaWMgU3RyaW5nICBnZXRQcmVmaXggKCApIHsgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOyB9Ci0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzQXR0cmlidXRlU3BlY2lmaWVkICggaW50IGluZGV4ICkgeyB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7IH0KLSAgICAgICAgcHVibGljIGludCAgICAgbmV4dCAoICkgeyB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7IH0KLSAgICAgICAgcHVibGljIGludCAgICAgbmV4dFRhZyAoICkgeyB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7IH0KLQotICAgICAgICBwcml2YXRlIFhtbEN1cnNvciBfY3Vyc29yOwotICAgICAgICBwcml2YXRlIFN0cmluZyAgICBfc3RyaW5nOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIFhNTFN0cmVhbVJlYWRlckltcGwgZXh0ZW5kcyBYTUxTdHJlYW1SZWFkZXJCYXNlCi0gICAgewotICAgICAgICBYTUxTdHJlYW1SZWFkZXJJbXBsICggWG1sQ3Vyc29yIHN0YXJ0LCBYbWxDdXJzb3IgbGFzdCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN1cGVyKCBzdGFydCApOwotCi0gICAgICAgICAgICBhc3NlcnQgISBzdGFydC5pc0F0U2FtZVBvc2l0aW9uQXMoIGxhc3QgKTsKLQotICAgICAgICAgICAgX2N1cnNvciA9IHN0YXJ0OwotICAgICAgICAgICAgX2xhc3QgPSBsYXN0OwotICAgICAgICAgICAgX2RpZExhc3QgPSBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCBYbWxDdXJzb3IgZ2V0Q3Vyc29yICggKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gX2N1cnNvcjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vCi0gICAgICAgIC8vCi0gICAgICAgIC8vCi0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gaGFzTmV4dCAoICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tDaGFuZ2VkKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiAhX2RpZExhc3Q7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgaW50IG5leHQgKCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrQ2hhbmdlZCgpOwotCi0gICAgICAgICAgICBpZiAoX2RpZExhc3QpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotCi0gICAgICAgICAgICBpZiAoX2N1cnNvci5pc1N0YXJ0KCkpCi0gICAgICAgICAgICAgICAgX2N1cnNvci50b0ZpcnN0Q29udGVudFRva2VuKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgX2N1cnNvci50b05leHRUb2tlbigpOwotCi0gICAgICAgICAgICBpZiAoX2N1cnNvci5pc0F0U2FtZVBvc2l0aW9uQXMoIF9sYXN0ICkpCi0gICAgICAgICAgICAgICAgX2RpZExhc3QgPSB0cnVlOwotCi0gICAgICAgICAgICByZXR1cm4gZ2V0RXZlbnRUeXBlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgaW50IGdldEV2ZW50VHlwZSAoICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tDaGFuZ2VkKCk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoIF9jdXJzb3IuY3VycmVudFRva2VuVHlwZSgpLmludFZhbHVlKCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuSU5UX1NUQVJURE9DICA6IHJldHVybiBTVEFSVF9ET0NVTUVOVDsKLSAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLklOVF9FTkRET0MgICAgOiByZXR1cm4gRU5EX0RPQ1VNRU5UOwotICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuSU5UX1NUQVJUICAgICA6IHJldHVybiBTVEFSVF9FTEVNRU5UOwotICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuSU5UX0VORCAgICAgICA6IHJldHVybiBFTkRfRUxFTUVOVDsKLSAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLklOVF9URVhUICAgICAgOiByZXR1cm4gQ0hBUkFDVEVSUzsKLSAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLklOVF9BVFRSICAgICAgOiByZXR1cm4gQVRUUklCVVRFOwotICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuSU5UX05BTUVTUEFDRSA6IHJldHVybiBOQU1FU1BBQ0U7Ci0gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5JTlRfQ09NTUVOVCAgIDogcmV0dXJuIENPTU1FTlQ7Ci0gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5JTlRfUFJPQ0lOU1QgIDogcmV0dXJuIFBST0NFU1NJTkdfSU5TVFJVQ1RJT047Ci0KLSAgICAgICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgICAgICAgICAgOiB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgaW50IGdldEF0dHJpYnV0ZUNvdW50ICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0NoYW5nZWQoKTsKLQotICAgICAgICAgICAgaW50IGNvdW50ID0gMDsKLQotICAgICAgICAgICAgaWYgKF9jdXJzb3IuaXNBdHRyKCkpCi0gICAgICAgICAgICAgICAgY291bnQgPSAxOwotICAgICAgICAgICAgZWxzZSBpZiAoX2N1cnNvci5pc1N0YXJ0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2N1cnNvci5wdXNoKCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKCBfY3Vyc29yLnRvTmV4dFRva2VuKCkgOyBfY3Vyc29yLmlzQW55QXR0cigpIDsgX2N1cnNvci50b05leHRUb2tlbigpICkKLSAgICAgICAgICAgICAgICAgICAgaWYgKF9jdXJzb3IuaXNBdHRyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotCi0gICAgICAgICAgICAgICAgX2N1cnNvci5wb3AoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBjb3VudDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0TmFtZXNwYWNlQ291bnQgKCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrQ2hhbmdlZCgpOwotCi0gICAgICAgICAgICBpbnQgY291bnQgPSAwOwotCi0gICAgICAgICAgICBpZiAoX2N1cnNvci5pc05hbWVzcGFjZSgpKQotICAgICAgICAgICAgICAgIGNvdW50ID0gMTsKLSAgICAgICAgICAgIGVsc2UgaWYgKF9jdXJzb3IuaXNTdGFydCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9jdXJzb3IucHVzaCgpOwotCi0gICAgICAgICAgICAgICAgZm9yICggX2N1cnNvci50b05leHRUb2tlbigpIDsgX2N1cnNvci5pc0FueUF0dHIoKSA7IF9jdXJzb3IudG9OZXh0VG9rZW4oKSApCi0gICAgICAgICAgICAgICAgICAgIGlmIChfY3Vyc29yLmlzTmFtZXNwYWNlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwotCi0gICAgICAgICAgICAgICAgX2N1cnNvci5wb3AoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBjb3VudDsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCB0b0F0dHIgKCBpbnQgaW5kZXggKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPCAwKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLQotICAgICAgICAgICAgaWYgKF9jdXJzb3IuaXNBdHRyKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoX2N1cnNvci5pc1N0YXJ0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yICggX2N1cnNvci50b05leHRUb2tlbigpIDsgX2N1cnNvci5pc0FueUF0dHIoKSA7IF9jdXJzb3IudG9OZXh0VG9rZW4oKSApCi0gICAgICAgICAgICAgICAgICAgIGlmIChfY3Vyc29yLmlzQXR0cigpICYmIGluZGV4LS0gPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgdG9OYW1lc3BhY2UgKCBpbnQgaW5kZXggKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPCAwKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLQotICAgICAgICAgICAgaWYgKF9jdXJzb3IuaXNOYW1lc3BhY2UoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAwKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChfY3Vyc29yLmlzU3RhcnQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKCBfY3Vyc29yLnRvTmV4dFRva2VuKCkgOyBfY3Vyc29yLmlzQW55QXR0cigpIDsgX2N1cnNvci50b05leHRUb2tlbigpICkKLSAgICAgICAgICAgICAgICAgICAgaWYgKF9jdXJzb3IuaXNOYW1lc3BhY2UoKSAmJiBpbmRleC0tID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIHRvQXR0ciAoIFN0cmluZyBuYW1lc3BhY2VVUkksIFN0cmluZyBsb2NhbE5hbWUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobmFtZXNwYWNlVVJJID09IG51bGwgfHwgbG9jYWxOYW1lID09IG51bGwgfHwgbG9jYWxOYW1lLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOwotCi0gICAgICAgICAgICBRTmFtZSBxbiA9IG5ldyBRTmFtZSggbmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUgKTsKLQotICAgICAgICAgICAgaWYgKF9jdXJzb3IuaXNBdHRyKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9jdXJzb3IuZ2V0TmFtZSgpLmVxdWFscyggcW4gKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKF9jdXJzb3IuaXNTdGFydCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9jdXJzb3IudG9OZXh0VG9rZW4oKTsKLQotICAgICAgICAgICAgICAgIHdoaWxlICggX2N1cnNvci5pc0FueUF0dHIoKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoX2N1cnNvci5pc0F0dHIoKSAmJiBfY3Vyc29yLmdldE5hbWUoKS5lcXVhbHMoIHFuICkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFN0cmluZyBnZXRBdHRyaWJ1dGVMb2NhbE5hbWUgKCBpbnQgaW5kZXggKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0NoYW5nZWQoKTsKLQotICAgICAgICAgICAgX2N1cnNvci5wdXNoKCk7Ci0KLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRvQXR0ciggaW5kZXggKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBfY3Vyc29yLmdldE5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbmFsbHkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfY3Vyc29yLnBvcCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFFOYW1lIGdldEF0dHJpYnV0ZU5hbWUgKCBpbnQgaW5kZXggKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0NoYW5nZWQoKTsKLQotICAgICAgICAgICAgX2N1cnNvci5wdXNoKCk7Ci0KLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRvQXR0ciggaW5kZXggKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBfY3Vyc29yLmdldE5hbWUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbmFsbHkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfY3Vyc29yLnBvcCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFN0cmluZyBnZXRBdHRyaWJ1dGVOYW1lc3BhY2UgKCBpbnQgaW5kZXggKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0NoYW5nZWQoKTsKLQotICAgICAgICAgICAgX2N1cnNvci5wdXNoKCk7Ci0KLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRvQXR0ciggaW5kZXggKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBfY3Vyc29yLmdldE5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbmFsbHkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfY3Vyc29yLnBvcCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFN0cmluZyBnZXRBdHRyaWJ1dGVQcmVmaXggKCBpbnQgaW5kZXggKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0NoYW5nZWQoKTsKLQotICAgICAgICAgICAgX2N1cnNvci5wdXNoKCk7Ci0KLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRvQXR0ciggaW5kZXggKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBnZXRQcmVmaXgoIF9jdXJzb3IuZ2V0TmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbGx5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2N1cnNvci5wb3AoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0QXR0cmlidXRlVHlwZSAoIGludCBpbmRleCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrQ2hhbmdlZCgpOwotCi0gICAgICAgICAgICBfY3Vyc29yLnB1c2goKTsKLQotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdG9BdHRyKCBpbmRleCApOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuICJDREFUQSI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbGx5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2N1cnNvci5wb3AoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0QXR0cmlidXRlVmFsdWUgKCBpbnQgaW5kZXggKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0NoYW5nZWQoKTsKLQotICAgICAgICAgICAgX2N1cnNvci5wdXNoKCk7Ci0KLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRvQXR0ciggaW5kZXggKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBfY3Vyc29yLmdldFRleHRWYWx1ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmluYWxseQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9jdXJzb3IucG9wKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldEF0dHJpYnV0ZVZhbHVlICggU3RyaW5nIG5hbWVzcGFjZVVSSSwgU3RyaW5nIGxvY2FsTmFtZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrQ2hhbmdlZCgpOwotCi0gICAgICAgICAgICBfY3Vyc29yLnB1c2goKTsKLQotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCF0b0F0dHIoIG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lICkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIF9jdXJzb3IuZ2V0VGV4dFZhbHVlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbGx5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2N1cnNvci5wb3AoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlUHJlZml4ICggaW50IGluZGV4ICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tDaGFuZ2VkKCk7Ci0KLSAgICAgICAgICAgIF9jdXJzb3IucHVzaCgpOwotCi0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0b05hbWVzcGFjZSggaW5kZXggKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBfY3Vyc29yLmdldE5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbmFsbHkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfY3Vyc29yLnBvcCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2VVUkkgKCBpbnQgaW5kZXggKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0NoYW5nZWQoKTsKLQotICAgICAgICAgICAgX2N1cnNvci5wdXNoKCk7Ci0KLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRvTmFtZXNwYWNlKCBpbmRleCApOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIF9jdXJzb3IuZ2V0TmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmluYWxseQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9jdXJzb3IucG9wKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldEVsZW1lbnRUZXh0ICggKSB0aHJvd3MgWE1MU3RyZWFtRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrQ2hhbmdlZCgpOwotCi0gICAgICAgICAgICBpZiAoIWlzU3RhcnRFbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotCi0gICAgICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLSAgICAgICAgICAgIGZvciAoIGludCBkZXB0aCA9IDEgOyBkZXB0aCA+IDAgOyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFoYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBYTUxTdHJlYW1FeGNlcHRpb24oKTsKLQotICAgICAgICAgICAgICAgIGludCBlID0gbmV4dCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKGUgPT0gRU5EX0VMRU1FTlQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBkZXB0aC0tOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoZSA9PSBTVEFSVF9FTEVNRU5UKQotICAgICAgICAgICAgICAgICAgICBkZXB0aCsrOwotCi0gICAgICAgICAgICAgICAgaWYgKGUgIT0gQ0hBUkFDVEVSUykKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFhNTFN0cmVhbUV4Y2VwdGlvbigpOwotCi0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKCBnZXRUZXh0KCkgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIFFOYW1lIGdldEVsZW1OYW1lICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBfY3Vyc29yLnB1c2goKTsKLQotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKF9jdXJzb3IuaXNFbmQoKSkKLSAgICAgICAgICAgICAgICAgICAgX2N1cnNvci50b1BhcmVudCgpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFfY3Vyc29yLmlzU3RhcnQoKSkKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIF9jdXJzb3IuZ2V0TmFtZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZmluYWxseQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9jdXJzb3IucG9wKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgUU5hbWUgZ2V0TmFtZSAoICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tDaGFuZ2VkKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBnZXRFbGVtTmFtZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFN0cmluZyBnZXRMb2NhbE5hbWUgKCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrQ2hhbmdlZCgpOwotCi0gICAgICAgICAgICByZXR1cm4gZ2V0RWxlbU5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlVVJJICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0NoYW5nZWQoKTsKLQotICAgICAgICAgICAgcmV0dXJuIGdldEVsZW1OYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFBJRGF0YSAoICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tDaGFuZ2VkKCk7Ci0KLSAgICAgICAgICAgIGlmICghX2N1cnNvci5pc1Byb2NpbnN0KCkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotCi0gICAgICAgICAgICByZXR1cm4gX2N1cnNvci5nZXRUZXh0VmFsdWUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0UElUYXJnZXQgKCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrQ2hhbmdlZCgpOwotCi0gICAgICAgICAgICBpZiAoIV9jdXJzb3IuaXNQcm9jaW5zdCgpKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLQotICAgICAgICAgICAgcmV0dXJuIF9jdXJzb3IuZ2V0TmFtZSgpLmdldExvY2FsUGFydCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFN0cmluZyBnZXRQcmVmaXggKCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrQ2hhbmdlZCgpOwotCi0gICAgICAgICAgICByZXR1cm4gZ2V0UHJlZml4KCBnZXROYW1lc3BhY2VVUkkoKSApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFN0cmluZyBnZXRUZXh0ICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0NoYW5nZWQoKTsKLQotICAgICAgICAgICAgaWYgKF9jdXJzb3IuaXNDb21tZW50KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIF9jdXJzb3IuZ2V0VGV4dFZhbHVlKCk7Ci0KLSAgICAgICAgICAgIGlmIChfY3Vyc29yLmlzVGV4dCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBfY3Vyc29yLmdldENoYXJzKCk7Ci0KLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBjaGFyW10gZ2V0VGV4dENoYXJhY3RlcnMgKCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrQ2hhbmdlZCgpOwotCi0gICAgICAgICAgICByZXR1cm4gZ2V0VGV4dCgpLnRvQ2hhckFycmF5KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgaW50IGdldFRleHRDaGFyYWN0ZXJzICggaW50IHNvdXJjZVN0YXJ0LCBjaGFyW10gdGFyZ2V0LCBpbnQgdGFyZ2V0U3RhcnQsIGludCBsZW5ndGggKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0NoYW5nZWQoKTsKLQotICAgICAgICAgICAgaWYgKGxlbmd0aCA8IDApCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotCi0gICAgICAgICAgICBjaGFyW10gY2hhcnMgPSBnZXRUZXh0Q2hhcmFjdGVycygpOwotCi0gICAgICAgICAgICBpZiAobGVuZ3RoID4gY2hhcnMubGVuZ3RoKQotICAgICAgICAgICAgICAgIGxlbmd0aCA9IGNoYXJzLmxlbmd0aDsKLQotICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSggY2hhcnMsIDAsIHRhcmdldCwgdGFyZ2V0U3RhcnQsIGxlbmd0aCApOwotCi0gICAgICAgICAgICByZXR1cm4gbGVuZ3RoOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGludCBnZXRUZXh0TGVuZ3RoICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0NoYW5nZWQoKTsKLQotICAgICAgICAgICAgcmV0dXJuIGdldFRleHQoKS5sZW5ndGgoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0VGV4dFN0YXJ0ICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0NoYW5nZWQoKTsKLQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBoYXNOYW1lICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0NoYW5nZWQoKTsKLQotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2V0TmFtZSgpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBoYXNUZXh0ICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0NoYW5nZWQoKTsKLQotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2V0VGV4dCgpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0F0dHJpYnV0ZVNwZWNpZmllZCAoIGludCBpbmRleCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrQ2hhbmdlZCgpOwotCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0NoYXJhY3RlcnMgKCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrQ2hhbmdlZCgpOwotCi0gICAgICAgICAgICByZXR1cm4gX2N1cnNvci5pc1RleHQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzRW5kRWxlbWVudCAoICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tDaGFuZ2VkKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBfY3Vyc29yLmlzRW5kKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc1N0YXJ0RWxlbWVudCAoICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tDaGFuZ2VkKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBfY3Vyc29yLmlzU3RhcnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGlzV2hpdGVTcGFjZSAoICkKLSAgICAgICAgewotICAgICAgICAgICAgY2hlY2tDaGFuZ2VkKCk7Ci0KLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBzID0gZ2V0VGV4dCgpOwotCi0gICAgICAgICAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IHMubGVuZ3RoKCkgOyBpKysgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFTcGxheS5pc1doaXRlU3BhY2UoIHMuY2hhckF0KCBpICkgKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoICggSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBpbnQgbmV4dFRhZyAoICkgdGhyb3dzIFhNTFN0cmVhbUV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja0NoYW5nZWQoKTsKLQotICAgICAgICAgICAgZm9yICggOyA7ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNTdGFydEVsZW1lbnQoKSB8fCBpc0VuZEVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldEV2ZW50VHlwZSgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFpc1doaXRlU3BhY2UoKSkKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFhNTFN0cmVhbUV4Y2VwdGlvbigpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFoYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBYTUxTdHJlYW1FeGNlcHRpb24oKTsKLQotICAgICAgICAgICAgICAgIG5leHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFhtbEN1cnNvciBfY3Vyc29yOwotICAgICAgICBYbWxDdXJzb3IgX2xhc3Q7Ci0KLSAgICAgICAgYm9vbGVhbiAgIF9kaWRMYXN0OwotICAgIH0KLQotICAgIC8vCi0gICAgLy8KLSAgICAvLwotCi0gICAgZmluYWwgQ3Vyc29yR29vYmVyIF9nb29iZXI7Ci0KLSAgICBwcml2YXRlIFNlbGVjdGlvbnMgX3N0YWNrOwotCi0gICAgcHJpdmF0ZSBTZWxlY3Rpb25zIF9zZWxlY3Rpb25zOwotICAgIHByaXZhdGUgaW50ICAgICAgICBfY3VycmVudFNlbGVjdGlvbjsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxzdG9yZS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc3RvcmUvR29vYmVycy5qYXZhIGIvdjIvc3JjL3htbHN0b3JlL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zdG9yZS9Hb29iZXJzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ZTNmM2MuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHN0b3JlL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zdG9yZS9Hb29iZXJzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zdG9yZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zdG9yZS5TcGxheS5Hb29iZXI7Ci0KLXB1YmxpYyBjbGFzcyBHb29iZXJzCi17Ci0gICAgR29vYmVyIF9nb29iZXJzOwotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHN0b3JlL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zdG9yZS9QYXRoLmphdmEgYi92Mi9zcmMveG1sc3RvcmUvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3N0b3JlL1BhdGguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E1Mjc5Yi4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1sc3RvcmUvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3N0b3JlL1BhdGguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwOCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zdG9yZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnN0b3JlLlNwbGF5LkN1cnNvckdvb2JlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc3RvcmUuQ3Vyc29yLlNlbGVjdGlvbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnN0b3JlLkN1cnNvci5QYXRoRW5naW5lOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9uczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlhQYXRoOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuVHlwZVN0b3JlOwotCi0vKioKLSAqIFJlcHJlc2VudHMgYSBwcmVjb21waWxlZCBwYXRoIGV4cHJlc3Npb24KLSAqLwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgUGF0aAotewotICAgIHN0YXRpYyBTZWxlY3Rpb25zIG5ld1NlbGVjdGlvbnMgKCApCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IFNlbGVjdGlvbnMoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUGF0aEVuZ2luZSBzZWxlY3QgKAotICAgICAgICBSb290IHIsIFNwbGF5IHMsIGludCBwLCBTdHJpbmcgcGF0aEV4cHIsIFhtbE9wdGlvbnMgb3B0aW9ucyApCi0gICAgewotICAgICAgICBQYXRoIHBhdGggPSBnZXRQYXRoKCBwYXRoRXhwciwgb3B0aW9ucyApOwotICAgICAgICByZXR1cm4gKHBhdGggPT0gbnVsbCkgPyBudWxsIDogcGF0aC5leGVjdXRlKCByLCBzLCBwLCBvcHRpb25zICk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgX3VzZVhxcmxGb3JYcGF0aCA9ICJ1c2UgeHFybCBmb3IgeHBhdGgiOwotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmcgX3VzZVhiZWFuRm9yWHBhdGggPSAidXNlIHhiZWFuIGZvciB4cGF0aCI7Ci0KLSAgICBwdWJsaWMgc3RhdGljIFBhdGggZ2V0UGF0aCAoIFN0cmluZyBwYXRoRXhwciApCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0UGF0aCggcGF0aEV4cHIsIGZhbHNlLCBudWxsICk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgUGF0aCBnZXRQYXRoICggU3RyaW5nIHBhdGhFeHByLCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgIHsKLSAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBnZXRQYXRoKAotICAgICAgICAgICAgICAgIHBhdGhFeHByLAotICAgICAgICAgICAgICAgIFhtbE9wdGlvbnMubWFza051bGwoIG9wdGlvbnMgKS5oYXNPcHRpb24oIF91c2VYcXJsRm9yWHBhdGggKSwKLSAgICAgICAgICAgICAgICBvcHRpb25zICk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBQYXRoIGdldFBhdGggKCBTdHJpbmcgcGF0aEV4cHIsIGJvb2xlYW4geHFybCwgWG1sT3B0aW9ucyBvcHRpb25zICkKLSAgICB7Ci0gICAgICAgIE9iamVjdCBwYXRoID0gbnVsbDsKLSAgICAgICAgCi0gICAgICAgIHN5bmNocm9uaXplZCAoIF94YmVhblBhdGhDYWNoZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICgheHFybCkKLSAgICAgICAgICAgICAgICBwYXRoID0gX3hiZWFuUGF0aENhY2hlLmdldCggcGF0aEV4cHIgKTsKLQotICAgICAgICAgICAgaWYgKHBhdGggPT0gbnVsbCkKLSAgICAgICAgICAgICAgICBwYXRoID0gX3hxcmxQYXRoQ2FjaGUuZ2V0KCBwYXRoRXhwciApOwotCi0gICAgICAgICAgICBpZiAocGF0aCA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBwYXRoU3RyID0gZ2V0Q29tcGlsZWRQYXRoKCBwYXRoRXhwciwgeHFybCwgb3B0aW9ucyApOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHBhdGggPQotICAgICAgICAgICAgICAgICAgICAocGF0aFN0ciA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgPyBudWxsCi0gICAgICAgICAgICAgICAgICAgICAgICA6IGdldFBhdGgoIHBhdGhFeHByLCB4cXJsLCBvcHRpb25zICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gKFBhdGgpIHBhdGg7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldENvbXBpbGVkUGF0aCAoIFN0cmluZyBwYXRoRXhwciwgWG1sT3B0aW9ucyBvcHRpb25zICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXRDb21waWxlZFBhdGgoIHBhdGhFeHByLCBmYWxzZSwgb3B0aW9ucyApOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRDdXJyZW50Tm9kZVZhciAoIFhtbE9wdGlvbnMgb3B0aW9ucyApCi0gICAgewotICAgICAgICBTdHJpbmcgY3VycmVudE5vZGVWYXIgPSAidGhpcyI7Ci0KLSAgICAgICAgb3B0aW9ucyA9IFhtbE9wdGlvbnMubWFza051bGwoIG9wdGlvbnMgKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChvcHRpb25zLmhhc09wdGlvbiggWG1sT3B0aW9ucy5YUVVFUllfQ1VSUkVOVF9OT0RFX1ZBUiApKQotICAgICAgICB7Ci0gICAgICAgICAgICBjdXJyZW50Tm9kZVZhciA9IChTdHJpbmcpIG9wdGlvbnMuZ2V0KCBYbWxPcHRpb25zLlhRVUVSWV9DVVJSRU5UX05PREVfVkFSICk7Ci0KLSAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZVZhci5zdGFydHNXaXRoKCAiJCIgKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdwotICAgICAgICAgICAgICAgICAgICBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgIk9taXQgdGhlICckJyBwcmVmaXggZm9yIHRoZSBjdXJyZW50IG5vZGUgdmFyaWFibGUiICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY3VycmVudE5vZGVWYXI7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldENvbXBpbGVkUGF0aCAoIFN0cmluZyBwYXRoRXhwciwgYm9vbGVhbiB4cXJsLCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgIHsKLSAgICAgICAgUGF0aCBwYXRoID0gbnVsbDsKLSAgICAgICAgCi0gICAgICAgIG9wdGlvbnMgPSBYbWxPcHRpb25zLm1hc2tOdWxsKCBvcHRpb25zICk7Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcgY3VycmVudE5vZGVWYXIgPSBnZXRDdXJyZW50Tm9kZVZhciggb3B0aW9ucyApOwotCi0gICAgICAgIHN5bmNocm9uaXplZCAoIF94YmVhblBhdGhDYWNoZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFzc2VydCAoeHFybCB8PSBvcHRpb25zLmhhc09wdGlvbiggX3VzZVhxcmxGb3JYcGF0aCApKSB8fCB0cnVlOwotCi0gICAgICAgICAgICBpZiAoIXhxcmwgfHwgb3B0aW9ucy5oYXNPcHRpb24oIF91c2VYYmVhbkZvclhwYXRoICkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcGF0aCA9IChQYXRoKSBfeGJlYW5QYXRoQ2FjaGUuZ2V0KCBwYXRoRXhwciApOwotCi0gICAgICAgICAgICAgICAgaWYgKHBhdGggPT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHBhdGggPSBYYmVhblBhdGhJbXBsLmNyZWF0ZSggcGF0aEV4cHIsIGN1cnJlbnROb2RlVmFyICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhdGggIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIF94YmVhblBhdGhDYWNoZS5wdXQoIHBhdGguZ2V0UGF0aEV4cHIoKSwgcGF0aCApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHBhdGggPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQgISBvcHRpb25zLmhhc09wdGlvbiggX3VzZVhiZWFuRm9yWHBhdGggKTsKLQotICAgICAgICAgICAgICAgIHBhdGggPSAoUGF0aCkgX3hxcmxQYXRoQ2FjaGUuZ2V0KCBwYXRoRXhwciApOwotCi0gICAgICAgICAgICAgICAgaWYgKHBhdGggPT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHBhdGggPSBYcXJsUGF0aEltcGwuY3JlYXRlKCBwYXRoRXhwciwgY3VycmVudE5vZGVWYXIgKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAocGF0aCAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgX3hxcmxQYXRoQ2FjaGUucHV0KCBwYXRoLmdldFBhdGhFeHByKCksIHBhdGggKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcGF0aCA9PSBudWxsID8gbnVsbCA6IHBhdGguZ2V0UGF0aEV4cHIoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50ZXJmYWNlIFF1ZXJ5Ci0gICAgewotICAgICAgICBQYXRoRW5naW5lICBleGVjdXRlUGF0aCAgKCBSb290IHIsIFNwbGF5IHMsIGludCBwLCBYbWxPcHRpb25zIG9wdGlvbnMgKTsKLSAgICAgICAgWG1sQ3Vyc29yICAgZXhlY3V0ZVF1ZXJ5ICggQ3Vyc29yIGMsIFhtbE9wdGlvbnMgb3B0aW9ucyApOwotICAgICAgICBYbWxPYmplY3RbXSBleGVjdXRlUXVlcnkgKCBUeXBlIHR5cGUsIFhtbE9wdGlvbnMgb3B0aW9ucyApOwotICAgICAgICBTdHJpbmcgICAgICBnZXRRdWVyeUV4cHIgKCApOwotICAgIH0KLQotLy8gICAgcHVibGljIHN0YXRpYyBRdWVyeSBnZXRRdWVyeSAoIFN0cmluZyBxdWVyeUV4cHIgKQotLy8gICAgewotLy8gICAgICAgIHJldHVybiBnZXRRdWVyeSggcXVlcnlFeHByLCBudWxsICk7Ci0vLyAgICB9Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBRdWVyeSBnZXRRdWVyeSAoIFN0cmluZyBxdWVyeUV4cHIsIFhtbE9wdGlvbnMgb3B0aW9ucyApCi0gICAgewotICAgICAgICBPYmplY3QgcXVlcnkgPSBudWxsOwotICAgICAgICAKLSAgICAgICAgc3luY2hyb25pemVkICggX3hxcmxRdWVyeUNhY2hlICkKLSAgICAgICAgewotICAgICAgICAgICAgcXVlcnkgPSBfeHFybFF1ZXJ5Q2FjaGUuZ2V0KCBxdWVyeUV4cHIgKTsKLQotICAgICAgICAgICAgaWYgKHF1ZXJ5ID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHF1ZXJ5U3RyID0gZ2V0Q29tcGlsZWRRdWVyeSggcXVlcnlFeHByLCBvcHRpb25zICk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcXVlcnkgPQotICAgICAgICAgICAgICAgICAgICAocXVlcnlTdHIgPT0gbnVsbCkgPyBudWxsIDogZ2V0UXVlcnkoIHF1ZXJ5RXhwciwgb3B0aW9ucyApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIChRdWVyeSkgcXVlcnk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldENvbXBpbGVkUXVlcnkgKCBTdHJpbmcgcXVlcnlFeHByLCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgIHsKLSAgICAgICAgUXVlcnkgcXVlcnkgPSBudWxsOwotICAgICAgICBTdHJpbmcgY3VycmVudE5vZGVWYXIgPSBnZXRDdXJyZW50Tm9kZVZhciggb3B0aW9ucyApOwotICAgICAgICAKLSAgICAgICAgc3luY2hyb25pemVkICggX3hxcmxRdWVyeUNhY2hlICkKLSAgICAgICAgewotICAgICAgICAgICAgcXVlcnkgPSAoUXVlcnkpIF94cXJsUXVlcnlDYWNoZS5nZXQoIHF1ZXJ5RXhwciApOwotCi0gICAgICAgICAgICBpZiAocXVlcnkgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBxdWVyeSA9IFhxcmxEZWxlZ2F0ZS5jb21waWxlUXVlcnkoIHF1ZXJ5RXhwciwgY3VycmVudE5vZGVWYXIgKTsKLQotICAgICAgICAgICAgICAgIGlmIChxdWVyeSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICBfeHFybFF1ZXJ5Q2FjaGUucHV0KCBxdWVyeS5nZXRRdWVyeUV4cHIoKSwgcXVlcnkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBxdWVyeSA9PSBudWxsID8gbnVsbCA6IHF1ZXJ5LmdldFF1ZXJ5RXhwcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgWG1sQ3Vyc29yIHF1ZXJ5ICgKLSAgICAgICAgQ3Vyc29yIGMsIFN0cmluZyBxdWVyeUV4cHIsIFhtbE9wdGlvbnMgb3B0aW9ucyApCi0gICAgewotICAgICAgICBRdWVyeSBxdWVyeSA9IGdldFF1ZXJ5KCBxdWVyeUV4cHIsIG9wdGlvbnMgKTsKLSAgICAgICAgcmV0dXJuIChxdWVyeSA9PSBudWxsKSA/IG51bGwgOiBxdWVyeS5leGVjdXRlUXVlcnkoIGMsIG9wdGlvbnMgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFhtbE9iamVjdFtdIHF1ZXJ5ICgKLSAgICAgICAgVHlwZSB0eXBlLCBTdHJpbmcgcXVlcnlFeHByLCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgIHsKLSAgICAgICAgUXVlcnkgcXVlcnkgPSBnZXRRdWVyeSggcXVlcnlFeHByLCBvcHRpb25zICk7Ci0gICAgICAgIHJldHVybiAocXVlcnkgPT0gbnVsbCkgPyBudWxsIDogcXVlcnkuZXhlY3V0ZVF1ZXJ5KCB0eXBlLCBvcHRpb25zICk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIGFic3RyYWN0IFBhdGhFbmdpbmUgZXhlY3V0ZSAoCi0gICAgICAgIFJvb3QgciwgU3BsYXkgcywgaW50IHAsIFhtbE9wdGlvbnMgb3B0aW9ucyApOwotCi0gICAgcHJvdGVjdGVkIGFic3RyYWN0IFN0cmluZyBnZXRQYXRoRXhwciAoICk7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBYcXJsUGF0aEltcGwgZXh0ZW5kcyBQYXRoCi0gICAgewotICAgICAgICBwcml2YXRlIFhxcmxQYXRoSW1wbCAoIFN0cmluZyBwYXRoRXhwciwgUXVlcnkgY29tcGlsZWRQYXRoICkKLSAgICAgICAgewotICAgICAgICAgICAgX3BhdGhFeHByID0gcGF0aEV4cHI7Ci0gICAgICAgICAgICBfY29tcGlsZWRQYXRoID0gY29tcGlsZWRQYXRoOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBTdHJpbmcgX3BhdGhFeHByOwotICAgICAgICBwcml2YXRlIFF1ZXJ5ICBfY29tcGlsZWRQYXRoOwotCi0gICAgICAgIHN0YXRpYyBQYXRoIGNyZWF0ZSAoIFN0cmluZyBwYXRoRXhwciwgU3RyaW5nIGN1cnJlbnROb2RlVmFyICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5ldyBYcXJsUGF0aEltcGwoCi0gICAgICAgICAgICAgICAgcGF0aEV4cHIsCi0gICAgICAgICAgICAgICAgWHFybERlbGVnYXRlLmNvbXBpbGVQYXRoKCBwYXRoRXhwciwgY3VycmVudE5vZGVWYXIgKSApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIFBhdGhFbmdpbmUgZXhlY3V0ZSAoCi0gICAgICAgICAgICBSb290IHIsIFNwbGF5IHMsIGludCBwLCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gX2NvbXBpbGVkUGF0aC5leGVjdXRlUGF0aCggciwgcywgcCwgb3B0aW9ucyApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFBhdGhFeHByICggKSB7IHJldHVybiBfcGF0aEV4cHI7IH0KLSAgICB9Ci0KLSAgICAvLwotICAgIC8vCi0gICAgLy8KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGNsYXNzIFhiZWFuUGF0aEltcGwgZXh0ZW5kcyBQYXRoCi0gICAgewotICAgICAgICBwcml2YXRlIFhiZWFuUGF0aEltcGwgKAotICAgICAgICAgICAgWFBhdGggeHBhdGgsIFN0cmluZyBwYXRoRXhwciwgU3RyaW5nIGN1cnJlbnROb2RlVmFyICkKLSAgICAgICAgewotICAgICAgICAgICAgX3BhdGhFeHByID0gcGF0aEV4cHI7Ci0gICAgICAgICAgICBfeHBhdGggPSB4cGF0aDsKLSAgICAgICAgICAgIF9jdXJyZW50Tm9kZVZhciA9IGN1cnJlbnROb2RlVmFyOwotICAgICAgICB9Ci0KLS8vICAgICAgICAgICAgdHJ5Ci0vLyAgICAgICAgICAgIHsKLS8vICAgICAgICAgICAgICAgIFN0cmluZyBjdXJyZW50Tm9kZVZhciA9ICJ0aGlzIjsKLS8vICAgICAgICAgICAgICAgIAotLy8gICAgICAgICAgICAgICAgaWYgKFhtbE9wdGlvbnMuWFFVRVJZX0NVUlJFTlRfTk9ERV9WQVIuaGFzKCBvcHRpb25zICkpCi0vLyAgICAgICAgICAgICAgICB7Ci0vLyAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGVWYXIgPQotLy8gICAgICAgICAgICAgICAgICAgICAgICAiJCIgKyBYbWxPcHRpb25zLlhRVUVSWV9DVVJSRU5UX05PREVfVkFSLmdldCggb3B0aW9ucyApOwotLy8KLS8vICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudE5vZGVWYXIuc3RhcnRzV2l0aCggIiQkIiApKQotLy8gICAgICAgICAgICAgICAgICAgIHsKLS8vICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9taXQgdGhlICckcCcgcmVmaXggZm9yIHRoZSBjdXJyZW50ICIgKwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm9kZSB2YXJpYWJsZSIgKTsKLS8vICAgICAgICAgICAgICAgICAgICB9Ci0vLyAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIFBhdGggY3JlYXRlICggU3RyaW5nIHBhdGhFeHByLCBTdHJpbmcgY3VycmVudE5vZGVWYXIgKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgIWN1cnJlbnROb2RlVmFyLnN0YXJ0c1dpdGgoICIkIiApOwotCi0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgICAgICAgICAgbmV3IFhiZWFuUGF0aEltcGwoCi0gICAgICAgICAgICAgICAgICAgICAgICBYUGF0aC5jb21waWxlWFBhdGgoIHBhdGhFeHByLCBjdXJyZW50Tm9kZVZhciApLAotICAgICAgICAgICAgICAgICAgICAgICAgcGF0aEV4cHIsIGN1cnJlbnROb2RlVmFyICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoIFhQYXRoLlhQYXRoQ29tcGlsZUV4Y2VwdGlvbiBlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0UGF0aEV4cHIgKCApIHsgcmV0dXJuIF9wYXRoRXhwcjsgfQotICAgICAgICAKLSAgICAgICAgcHJvdGVjdGVkIFBhdGhFbmdpbmUgZXhlY3V0ZSAoCi0gICAgICAgICAgICBSb290IHIsIFNwbGF5IHMsIGludCBwLCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUaGUgYnVpbHRpbiBYUGF0aCBlbmdpbmUgd29ya3Mgb25seSBvbiBjb250YWluZXJzLiAgRGVsZWdhdGUgdG8KLSAgICAgICAgICAgIC8vIHhxcmwgb3RoZXJ3aXNlLiAgQWxzbywgaWYgdGhlIHBhdGggaGFkIGEgLy8uIGF0IHRoZSBlbmQsIHRoZQotICAgICAgICAgICAgLy8gc2ltcGxlIHhwYXRoIGVuZ2luZSBjYW4ndCBkbyB0aGUgZ2VuZXJhdGUgY2FzZSwgaXQgb25seSBoYW5kbGVzCi0gICAgICAgICAgICAvLyBhdHRycyBhbmQgZWxlbWVudHMuCi0KLSAgICAgICAgICAgIGlmIChwICE9IDAgfHwgIXMuaXNDb250YWluZXIoKSB8fCBfeHBhdGguc2F3RGVlcERvdCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIElmIHRoZSB4YmVhbiBwYXRoIGNvbXBpbGVyIGNvdWxkIGNvdWxkIGhhbmRsZSB0aGUgcGF0aCwgdGhlbgotICAgICAgICAgICAgICAgIC8vIHRoZSB4cXJsIGNvbXBpbGVyIGJldHRlciBiZSBhYmxlIHRvIQotCi0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgICAgICAgICAgICAgIGdldFBhdGgoIF9wYXRoRXhwciwgdHJ1ZSwgbnVsbCApLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGUoIHIsIHMsIHAsIG9wdGlvbnMgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKCBUaHJvd2FibGUgZSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbiggIkNhbid0IGNvbXBpbGUgcGF0aCIsIGUgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcgWEJlYW5QYXRoRW5naW5lKCBfeHBhdGgsIHIsIHMgKTsKLSAgICAgICAgfQotCi0vLyBUT0RPIC0gYmVjYXVzZSB0aGlzIHhwYXRoIGVuZ2luZSBkb2VzIG5vdCB1c2UgYSBzYXZlciwgYW55IGF0dHJpYnV0ZXMgaW4gdGhlCi0vLyBwYXRoIHdoaWNoIHJlZmVyIHRvIG5hbWVzYXBjZSBhdHRyaWJ1dGVzIHdpbGwgcmVxdWlyZSB1cyB0byBydW4gdGhlIFhRUkwKLS8vIHBhdGggZW5naW5lIHdoaWNoIGlzIGJhc2VkIG9uIHRoZSBzYXZlci4KLQotICAgICAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBYQmVhblBhdGhFbmdpbmUKLSAgICAgICAgICAgIGV4dGVuZHMgWFBhdGguRXhlY3V0aW9uQ29udGV4dCBpbXBsZW1lbnRzIFBhdGhFbmdpbmUKLSAgICAgICAgewotICAgICAgICAgICAgWEJlYW5QYXRoRW5naW5lICggWFBhdGggeHBhdGgsIFJvb3QgciwgU3BsYXkgcyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IHMuaXNDb250YWluZXIoKTsKLQotICAgICAgICAgICAgICAgIF9yb290ID0gcjsKLSAgICAgICAgICAgICAgICBfY3VyciA9IF90b3AgPSBzOwotICAgICAgICAgICAgICAgIF92ZXJzaW9uID0gci5nZXRWZXJzaW9uKCk7Ci0KLSAgICAgICAgICAgICAgICBpbml0KCB4cGF0aCApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBuZXh0ICggU2VsZWN0aW9ucyBzZWxlY3Rpb25zICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgaW5pdGlhbFNpemUgPSBzZWxlY3Rpb25zLmN1cnJlbnRTaXplKCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKCA7IDsgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKF9yb290LmdldFZlcnNpb24oKSAhPSBfdmVyc2lvbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oICJEb2N1bWVudCBjaGFuZ2VkIiApOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChfY3VyciA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoIHNlbGVjdGlvbnMgKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoaW5pdGlhbFNpemUgPCBzZWxlY3Rpb25zLmN1cnJlbnRTaXplKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHByaXZhdGUgU3BsYXkgZG9BdHRycyAoIGludCByZXQsIFNwbGF5IHMsIFNlbGVjdGlvbnMgc2VsZWN0aW9ucyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKChyZXQgJiBBVFRSUykgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKCBzID0gX2N1cnIubmV4dFNwbGF5KCkgOyBzLmlzQXR0cigpIDsKLSAgICAgICAgICAgICAgICAgICAgICBzID0gcy5uZXh0U3BsYXkoKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAocy5pc05vcm1hbEF0dHIoKSAmJiBhdHRyKCBzLmdldE5hbWUoKSApKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9ucy5hZGQoIF9yb290LCBzICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHByaXZhdGUgdm9pZCBhZHZhbmNlICggU2VsZWN0aW9ucyBzZWxlY3Rpb25zICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoX2N1cnIgPT0gX3RvcCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGludCByZXQgPSBzdGFydCgpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICgocmV0ICYgSElUKSAhPSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9ucy5hZGQoIF9yb290LCBfY3VyciApOwotCi0gICAgICAgICAgICAgICAgICAgIFNwbGF5IHMgPSBkb0F0dHJzKCByZXQsIF9jdXJyLCBzZWxlY3Rpb25zICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKChyZXQgJiBERVNDRU5EKSA9PSAwIHx8IF9jdXJyLmlzTGVhZigpKQotICAgICAgICAgICAgICAgICAgICAgICAgX2N1cnIgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBfY3VyciA9IHMgPT0gbnVsbCA/IF9jdXJyLm5leHROb25BdHRyU3BsYXkoKSA6IHM7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZvciAoIDsgOyApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoX2N1cnIuaXNGaW5pc2goKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jdXJyLmdldENvbnRhaW5lcigpID09IF90b3ApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N1cnIgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdXJyID0gX2N1cnIubmV4dFNwbGF5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChfY3Vyci5pc0JlZ2luKCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXQgPSBlbGVtZW50KCBfY3Vyci5nZXROYW1lKCkgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChyZXQgJiBISVQpICE9IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9ucy5hZGQoIF9yb290LCBfY3VyciApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBTcGxheSBzID0gZG9BdHRycyggcmV0LCBfY3Vyciwgc2VsZWN0aW9ucyApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2N1cnIuaXNMZWFmKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N1cnIgPSBzID09IG51bGwgPyBfY3Vyci5uZXh0Tm9uQXR0clNwbGF5KCkgOiBzOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKHJldCAmIERFU0NFTkQpID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N1cnIgPSAoKFNwbGF5LkNvbnRhaW5lcikgX2N1cnIpLmdldEZpbmlzaCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdXJyID0gcyA9PSBudWxsID8gX2N1cnIubmV4dE5vbkF0dHJTcGxheSgpIDogczsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgX2N1cnIgPSBfY3Vyci5uZXh0U3BsYXkoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHByaXZhdGUgUm9vdCAgX3Jvb3Q7Ci0gICAgICAgICAgICBwcml2YXRlIGxvbmcgIF92ZXJzaW9uOwotICAgICAgICAgICAgcHJpdmF0ZSBTcGxheSBfdG9wOwotICAgICAgICAgICAgcHJpdmF0ZSBTcGxheSBfY3VycjsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgU3RyaW5nIF9wYXRoRXhwcjsKLSAgICAgICAgcHJpdmF0ZSBYUGF0aCAgX3hwYXRoOwotICAgICAgICBwcml2YXRlIFN0cmluZyBfY3VycmVudE5vZGVWYXI7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgSGFzaE1hcCBfeHFybFBhdGhDYWNoZSA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgSGFzaE1hcCBfeGJlYW5QYXRoQ2FjaGUgPSBuZXcgSGFzaE1hcCgpOwotICAgIHByaXZhdGUgc3RhdGljIEhhc2hNYXAgX3hxcmxRdWVyeUNhY2hlID0gbmV3IEhhc2hNYXAoKTsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxzdG9yZS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc3RvcmUvUm9vdC5qYXZhIGIvdjIvc3JjL3htbHN0b3JlL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zdG9yZS9Sb290LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NzNiYjAuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHN0b3JlL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zdG9yZS9Sb290LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNjIyICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnN0b3JlOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5FbmNvZGluZ01hcDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlFOYW1lSGVscGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uWE1MTmFtZUhlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc3RvcmUuU3BsYXkuRmluaXNoOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuTmFtZXNwYWNlTWFuYWdlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLlhtbFN0b3JlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuVHlwZVN0b3JlRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlFOYW1lQ2FjaGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQmVhbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IuWG1sQm9va21hcms7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxEb2N1bWVudFByb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFcnJvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbExpbmVOdW1iZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sUnVudGltZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFNheEhhbmRsZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKLWltcG9ydCBvcmcueG1sLnNheC5Db250ZW50SGFuZGxlcjsKLWltcG9ydCBvcmcueG1sLnNheC5FbnRpdHlSZXNvbHZlcjsKLWltcG9ydCBvcmcueG1sLnNheC5FcnJvckhhbmRsZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLnhtbC5zYXguTG9jYXRvcjsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb247Ci1pbXBvcnQgb3JnLnhtbC5zYXguWE1MUmVhZGVyOwotaW1wb3J0IG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcjsKLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLkF0dHJpYnV0ZTsKLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLkF0dHJpYnV0ZUl0ZXJhdG9yOwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uQ2hhcmFjdGVyRGF0YTsKLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLlByb2Nlc3NpbmdJbnN0cnVjdGlvbjsKLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLlNwYWNlOwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uU3RhcnREb2N1bWVudDsKLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLlN0YXJ0RWxlbWVudDsKLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTEV2ZW50OwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW07Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5YTUxOYW1lOwotCi1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotcHVibGljIGZpbmFsIGNsYXNzIFJvb3QgZXh0ZW5kcyBGaW5pc2ggaW1wbGVtZW50cyBYbWxTdG9yZQotewotICAgIHB1YmxpYyBSb290ICggU2NoZW1hVHlwZUxvYWRlciBzdGwsIFNjaGVtYVR5cGUgdHlwZSwgWG1sT3B0aW9ucyBvcHRpb25zICkKLSAgICB7Ci0gICAgICAgIHN1cGVyKCBST09UICk7Ci0KLSAgICAgICAgYXNzZXJ0IHN0bCAhPSBudWxsOwotCi0gICAgICAgIF9zY2hlbWFUeXBlU3lzdGVtID0gc3RsOwotCi0gICAgICAgIF9sZWZ0T25seSA9IHRydWU7Ci0KLSAgICAgICAgX3Byb3BzID0gbmV3IERvY1Byb3BzKCk7Ci0KLSAgICAgICAgX2RvYyA9IG5ldyBEb2MoIHRoaXMsIG51bGwgKTsKLQotICAgICAgICBfbGVmdFNwbGF5ID0gX2RvYzsKLSAgICAgICAgX2RvYy5fcGFyZW50U3BsYXkgPSB0aGlzOwotICAgICAgICBhZGp1c3RDZG9jQmVnaW5MZWZ0KCBfZG9jLmdldENkb2NCZWdpbigpICk7Ci0KLSAgICAgICAgX3RleHQgPSBuZXcgVGV4dCgpOwotCi0gICAgICAgIFNjaGVtYVR5cGUgc1R5cGUgPSBudWxsOwotCi0gICAgICAgIG9wdGlvbnMgPSBYbWxPcHRpb25zLm1hc2tOdWxsKCBvcHRpb25zICk7Ci0gICAgICAgIAotICAgICAgICBpZiAob3B0aW9ucy5oYXNPcHRpb24oIFhtbE9wdGlvbnMuRE9DVU1FTlRfVFlQRSApKQotICAgICAgICAgICAgc1R5cGUgPSAoU2NoZW1hVHlwZSkgb3B0aW9ucy5nZXQoIFhtbE9wdGlvbnMuRE9DVU1FTlRfVFlQRSApOwotCi0gICAgICAgIGlmIChzVHlwZSA9PSBudWxsKQotICAgICAgICAgICAgc1R5cGUgPSB0eXBlOwotCi0gICAgICAgIGlmIChzVHlwZSA9PSBudWxsKQotICAgICAgICAgICAgc1R5cGUgPSBYbWxPYmplY3QudHlwZTsKLQotICAgICAgICBfdmFsaWRhdGVPblNldCA9IG9wdGlvbnMuaGFzT3B0aW9uKCBYbWxPcHRpb25zLlZBTElEQVRFX09OX1NFVCApOwotCi0gICAgICAgIF9mYWN0b3J5ID0gKFR5cGVTdG9yZUZhY3RvcnkpIG9wdGlvbnMuZ2V0KCBUeXBlU3RvcmVGYWN0b3J5LktFWSApOwotCi0gICAgICAgIF9kb2Muc2V0VHlwZSggdGhpcywgc1R5cGUgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIFhtbFN0b3JlIG5ld1N0b3JlICggU2NoZW1hVHlwZUxvYWRlciBzdGwsIFNjaGVtYVR5cGUgdHlwZSwgWG1sT3B0aW9ucyBvcHRpb25zICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgUm9vdCggc3RsLCB0eXBlLCBvcHRpb25zICk7Ci0gICAgfQotCi0gICAgcHVibGljIFhtbERvY3VtZW50UHJvcGVydGllcyBkb2N1bWVudFByb3BlcnRpZXMgKCApCi0gICAgewotICAgICAgICByZXR1cm4gX3Byb3BzOwotICAgIH0KLQotICAgIHB1YmxpYyBYbWxDdXJzb3IgY3JlYXRlQ3Vyc29yICggKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IHZhbGlkYXRlKCk7Ci0gICAgICAgIHJldHVybiBuZXcgQ3Vyc29yKCB0aGlzLCBfZG9jICk7Ci0gICAgfQotCi0gICAgQ29udGFpbmVyIGdldENvbnRhaW5lciAoICkgeyByZXR1cm4gX2RvYzsgfQotCi0gICAgYm9vbGVhbiB2YWxpZGF0ZU9uU2V0ICggKSB7IHJldHVybiBfdmFsaWRhdGVPblNldDsgfQotCi0gICAgcHVibGljIFhtbE9iamVjdCBnZXRPYmplY3QgKCApCi0gICAgewotICAgICAgICBUeXBlIHQgPSBfZG9jLnBlZWtUeXBlKCk7Ci0KLSAgICAgICAgcmV0dXJuIHQgPT0gbnVsbCA/IG51bGwgOiB0LmdldFhtbE9iamVjdCgpOwotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFUeXBlTG9hZGVyIGdldFNjaGVtYVR5cGVMb2FkZXIgKCApCi0gICAgewotICAgICAgICByZXR1cm4gX3NjaGVtYVR5cGVTeXN0ZW07Ci0gICAgfQotCi0gICAgYm9vbGVhbiBpc0VtcHR5ICggKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9sZWZ0U3BsYXkgPT0gX2RvYyAmJiBfZG9jLl9yaWdodFNwbGF5ID09IG51bGwgJiYgX2RvYy5pc1ZhbGlkKCk7Ci0gICAgfQotCi0gICAgYm9vbGVhbiBpc0xlZnRPbmx5ICggKSB7IHJldHVybiBfbGVmdE9ubHk7IH0KLQotICAgIHZvaWQgZW5zdXJlRW1wdHkgKCApCi0gICAgewotICAgICAgICBpZiAoIWlzRW1wdHkoKSkKLSAgICAgICAgICAgIF9kb2MucmVtb3ZlQ29udGVudCggdGhpcywgdHJ1ZSApOwotCi0gICAgICAgIGFzc2VydCBpc0VtcHR5KCk7Ci0gICAgICAgIGFzc2VydCB2YWxpZGF0ZSgpOwotICAgICAgICBhc3NlcnQgX2xlZnRPbmx5OwotICAgICAgICBhc3NlcnQgZ2V0Q2NoTGVmdCgpID09IDA7Ci0gICAgICAgIGFzc2VydCBfdGV4dC5sZW5ndGgoKSA9PSAwOwotICAgICAgICBhc3NlcnQgZ2V0Q2RvY0JlZ2luTGVmdCgpID09IDE7Ci0gICAgICAgIGFzc2VydCBfZG9jICE9IG51bGwgJiYgX2xlZnRTcGxheSA9PSBfZG9jOwotICAgIH0KLQotICAgIHZvaWQgdXBkYXRlQ2NoICggU3BsYXkgcywgaW50IGRlbHRhQ2NoICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCAhcy5pc1Jvb3QoKTsKLQotICAgICAgICBpZiAoZGVsdGFDY2ggIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcy5zcGxheSggdGhpcywgdGhpcyApOwotCi0gICAgICAgICAgICBzLmFkanVzdENjaCggZGVsdGFDY2ggKTsKLSAgICAgICAgICAgIGFkanVzdENjaExlZnQoIGRlbHRhQ2NoICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbnQgZ2V0Q3AgKCBTcGxheSBzICkKLSAgICB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIEEgbGVmdCBvbmx5IHRyZWUgaGFzIHRoZSBuaWNlIHByb3BlcnR5IHRoYXQgX2NjaExlZnQgaXMKLSAgICAgICAgLy8gYWxzbyB0aGUgY3AhCi0gICAgICAgIC8vCi0KLSAgICAgICAgaWYgKCFfbGVmdE9ubHkgJiYgcyAhPSB0aGlzKQotICAgICAgICAgICAgcy5zcGxheSggdGhpcywgdGhpcyApOwotCi0gICAgICAgIHJldHVybiBzLmdldENjaExlZnQoKTsKLSAgICB9Ci0KLSAgICBpbnQgZ2V0RG9jQmVnaW5JbmRleCAoIFNwbGF5IHMgKQotICAgIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gQSBsZWZ0IG9ubHkgdHJlZSBoYXMgdGhlIG5pY2UgcHJvcGVydHkgdGhhdCBjZG9jQmVnaW5MZWZ0IGlzCi0gICAgICAgIC8vIGFsc28gdGhlIHBvcyEKLSAgICAgICAgLy8KLQotICAgICAgICBpZiAoIV9sZWZ0T25seSkKLSAgICAgICAgICAgIHMuc3BsYXkoIHRoaXMsIHRoaXMgKTsKLQotICAgICAgICByZXR1cm4gcy5nZXRDZG9jQmVnaW5MZWZ0KCk7Ci0gICAgfQotICAgIAotICAgIEJlZ2luIGZpbmROdGhCZWdpbiAoIFNwbGF5IHBhcmVudCwgUU5hbWUgbmFtZSwgUU5hbWVTZXQgc2V0LCBpbnQgbiApCi0gICAgewotICAgICAgICAvLyBvbmx5IG9uZSBvZiAoc2V0IG9yIG5hbWUpIGlzIG5vdCBudWxsCi0gICAgICAgIC8vIG9yIGJvdGggYXJlIG51bGwgZm9yIGEgd2lsZGNhcmQKLSAgICAgICAgYXNzZXJ0ICggbmFtZSA9PSBudWxsIHx8IHNldCA9PSBudWxsICk7Ci0gICAgICAgIGFzc2VydCBuID49IDA7Ci0KLSAgICAgICAgaWYgKHBhcmVudCA9PSBudWxsIHx8IHBhcmVudC5pc0xlYWYoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIGludCBkYSA9IF9udGhDYWNoZV9BLmRpc3RhbmNlKCBwYXJlbnQsIG5hbWUsIHNldCwgbiApOwotICAgICAgICBpbnQgZGIgPSBfbnRoQ2FjaGVfQi5kaXN0YW5jZSggcGFyZW50LCBuYW1lLCBzZXQsIG4gKTsKLQotICAgICAgICBCZWdpbiBiID0KLSAgICAgICAgICAgIGRhIDw9IGRiCi0gICAgICAgICAgICAgICAgPyBfbnRoQ2FjaGVfQS5mZXRjaCggcGFyZW50LCBuYW1lLCBzZXQsIG4gKQotICAgICAgICAgICAgICAgIDogX250aENhY2hlX0IuZmV0Y2goIHBhcmVudCwgbmFtZSwgc2V0LCBuICk7Ci0KLSAgICAgICAgaWYgKGRhID09IGRiKQotICAgICAgICB7Ci0gICAgICAgICAgICBudGhDYWNoZSB0ZW1wID0gX250aENhY2hlX0E7Ci0gICAgICAgICAgICBfbnRoQ2FjaGVfQSA9IF9udGhDYWNoZV9COwotICAgICAgICAgICAgX250aENhY2hlX0IgPSB0ZW1wOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGI7Ci0gICAgfQotCi0gICAgaW50IGNvdW50ICggQ29udGFpbmVyIHBhcmVudCwgUU5hbWUgbmFtZSwgUU5hbWVTZXQgc2V0ICkKLSAgICB7Ci0gICAgICAgIFNwbGF5IHMgPSBmaW5kTnRoQmVnaW4oIHBhcmVudCwgbmFtZSwgc2V0LCAwICk7Ci0KLSAgICAgICAgaWYgKHMgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIGludCBuID0gMDsKLQotICAgICAgICBmb3IgKCA7IDsgcyA9IHMubmV4dFNwbGF5KCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocy5pc0ZpbmlzaCgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBpZiAoIXMuaXNCZWdpbigpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBpZiAoc2V0ID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHMuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgbisrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzZXQuY29udGFpbnMocy5nZXROYW1lKCkpKQotICAgICAgICAgICAgICAgICAgICBuKys7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHMgPSBzLmdldEZpbmlzaFNwbGF5KCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZXQgdXAgc3Ryb25nIHR5cGUgaW5mb3JtYXRpb24gYmFzZWQgb24gdGhpcyBzY2hlbWEgdHlwZSBzeXN0ZW0uCi0gICAgICovCi0KLSAgICBwcml2YXRlIGJvb2xlYW4gbmFtZXNwYWNlc1NhbWUgKCBRTmFtZSBuMSwgUU5hbWUgbjIgKQotICAgIHsKLSAgICAgICAgaWYgKG4xID09IG4yKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgaWYgKG4xID09IG51bGwgfHwgbjIgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAobjEuZ2V0TmFtZXNwYWNlVVJJKCkgPT0gbjIuZ2V0TmFtZXNwYWNlVVJJKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAobjEuZ2V0TmFtZXNwYWNlVVJJKCkgPT0gbnVsbCB8fCBuMi5nZXROYW1lc3BhY2VVUkkoKSA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiBuMS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoIG4yLmdldE5hbWVzcGFjZVVSSSgpICk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGFkZE5hbWVzcGFjZSAoIFN0cmluZ0J1ZmZlciBzYiwgUU5hbWUgbmFtZSApCi0gICAgewotICAgICAgICBpZiAobmFtZS5nZXROYW1lc3BhY2VVUkkoKSA9PSBudWxsKQotICAgICAgICAgICAgc2IuYXBwZW5kKCAiPG5vIG5hbWVzcGFjZT4iICk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgc2IuYXBwZW5kKCAiXCIiICk7Ci0gICAgICAgICAgICBzYi5hcHBlbmQoIG5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkgKTsKLSAgICAgICAgICAgIHNiLmFwcGVuZCggIlwiIiApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgWG1sT2JqZWN0IGF1dG9UeXBlZERvY3VtZW50ICgKLSAgICAgICAgU2NoZW1hVHlwZSBmYWN0b3J5VHlwZSwgWG1sT3B0aW9ucyBvcHRpb25zICkKLSAgICAgICAgICAgIHRocm93cyBYbWxFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIC8vIFRoZSB0eXBlIGluIHRoZSBvcHRpb25zIGhhcyBoaWdoZXN0IHByZWNpZGVuY2UgYmVjYXVzZSBpdCBpcwotICAgICAgICAvLyBzdXBwbGllZCBieSB0aGUgdXNlci4KLSAgICAgICAgCi0gICAgICAgIFNjaGVtYVR5cGUgb3ZlcnJpZGVUeXBlID0KLSAgICAgICAgICAgIChTY2hlbWFUeXBlKSBYbWxPcHRpb25zLnNhZmVHZXQoIG9wdGlvbnMsIFhtbE9wdGlvbnMuRE9DVU1FTlRfVFlQRSApOwotCi0gICAgICAgIC8vIHByZWNlZGVuY2UgaXMgZ2l2ZW4gdG8gdGhlIG92ZXJyaWRlIGFib3ZlIGFsbAotICAgICAgICAKLSAgICAgICAgU2NoZW1hVHlwZSB0aGVUeXBlID0gb3ZlcnJpZGVUeXBlOwotCi0gICAgICAgIC8vIERvY3VtZW50IGFuZCBhdHRyaWJ1dGUgdHlwZXMgaGF2ZSBubyBuYW1lCi0gICAgICAgIAotICAgICAgICBpZiAodGhlVHlwZSA9PSBudWxsICYmCi0gICAgICAgICAgICAgICAgKGZhY3RvcnlUeXBlID09IG51bGwgfHwKLSAgICAgICAgICAgICAgICAgICAgKCFmYWN0b3J5VHlwZS5pc0RvY3VtZW50VHlwZSgpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAhZmFjdG9yeVR5cGUuaXNBdHRyaWJ1dGVUeXBlKCkpKSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gaW5mZXIgdHlwZSBmcm9tIHhzaTp0eXBlCi0gICAgICAgICAgICBRTmFtZSB0eXBlTmFtZSA9IF9kb2MuZ2V0WHNpVHlwZU5hbWUoIHRoaXMgKTsKLQotICAgICAgICAgICAgU2NoZW1hVHlwZSBzbmlmZmVkVHlwZSA9Ci0gICAgICAgICAgICAgICAgdHlwZU5hbWUgPT0gbnVsbAotICAgICAgICAgICAgICAgICAgICA/IG51bGwKLSAgICAgICAgICAgICAgICAgICAgOiBfc2NoZW1hVHlwZVN5c3RlbS5maW5kVHlwZSggdHlwZU5hbWUgKTsKLQotICAgICAgICAgICAgaWYgKGZhY3RvcnlUeXBlID09IG51bGwgfHwKLSAgICAgICAgICAgICAgICAgICAgZmFjdG9yeVR5cGUuaXNBc3NpZ25hYmxlRnJvbSggc25pZmZlZFR5cGUgKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aGVUeXBlID0gc25pZmZlZFR5cGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyB0b2RvOgotICAgICAgICAvLyB1c2UgdGhlIGZvbGxvd2luZyB3aGVuIGltcGxlbWVudGluZyBzdWJzdCBncm91cHM6Ci0gICAgICAgIC8vICAgICBmYWN0b3J5VHlwZSA9PSBudWxsIHx8IGV4cGVjdGVkVHlwZS5pc0RvY3VtZW50VHlwZSgpCi0KLSAgICAgICAgaWYgKGZhY3RvcnlUeXBlID09IG51bGwgfHwgZmFjdG9yeVR5cGUuaXNEb2N1bWVudFR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHRoZVR5cGUgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBpbmZlciB0eXBlIGJhc2VkIG9uIHJvb3QgZWx0Ci0KLSAgICAgICAgICAgICAgICBRTmFtZSBkb2NFbGVtTmFtZSA9IG51bGw7Ci0KLSAgICAgICAgICAgICAgICBYbWxDdXJzb3IgYyA9IGNyZWF0ZUN1cnNvcigpOwotCi0gICAgICAgICAgICAgICAgaWYgKGMudG9GaXJzdENoaWxkKCkgJiYgIWMudG9OZXh0U2libGluZygpKQotICAgICAgICAgICAgICAgICAgICBkb2NFbGVtTmFtZSA9IGMuZ2V0TmFtZSgpOwotCi0gICAgICAgICAgICAgICAgYy5kaXNwb3NlKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZG9jRWxlbU5hbWUgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgdGhlVHlwZSA9IF9zY2hlbWFUeXBlU3lzdGVtLmZpbmREb2N1bWVudFR5cGUoIGRvY0VsZW1OYW1lICk7Ci0KLSAgICAgICAgICAgICAgICAvLyB2ZXJpZnkgZWx0IGluaGVyaXRhbmNlIHdoZW4gaW1wbGVtZW50aW5nIHN1YnN0IGdyb3VwcwotICAgICAgICAgICAgICAgIGlmIChmYWN0b3J5VHlwZSAhPSBudWxsICYmIHRoZVR5cGUgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFFOYW1lIGZhY3RvcnlFbGVtTmFtZSA9IGZhY3RvcnlUeXBlLmdldERvY3VtZW50RWxlbWVudE5hbWUoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIWZhY3RvcnlFbGVtTmFtZS5lcXVhbHMoZG9jRWxlbU5hbWUpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAhZmFjdG9yeVR5cGUuaXNWYWxpZFN1YnN0aXR1dGlvbihkb2NFbGVtTmFtZSkpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBYbWxFeGNlcHRpb24oIkVsZW1lbnQgIiArIFFOYW1lSGVscGVyLnByZXR0eShkb2NFbGVtTmFtZSkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgaXMgbm90IGEgdmFsaWQgIiArIFFOYW1lSGVscGVyLnByZXR0eShmYWN0b3J5RWxlbU5hbWUpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGRvY3VtZW50IG9yIGEgdmFsaWQgc3Vic3RpdHV0aW9uLiIpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGhlVHlwZSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIGluZmVyIHR5cGUgYmFzZWQgb24gcm9vdCBhdHRyCi0KLSAgICAgICAgICAgICAgICBRTmFtZSBhdHRyTmFtZSA9IG51bGw7Ci0KLSAgICAgICAgICAgICAgICBYbWxDdXJzb3IgYyA9IGNyZWF0ZUN1cnNvcigpOwotCi0gICAgICAgICAgICAgICAgaWYgKGMudG9GaXJzdEF0dHJpYnV0ZSgpICYmICFjLnRvTmV4dEF0dHJpYnV0ZSgpKQotICAgICAgICAgICAgICAgICAgICBhdHRyTmFtZSA9IGMuZ2V0TmFtZSgpOwotCi0gICAgICAgICAgICAgICAgYy5kaXNwb3NlKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoYXR0ck5hbWUgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgdGhlVHlwZSA9IF9zY2hlbWFUeXBlU3lzdGVtLmZpbmRBdHRyaWJ1dGVUeXBlKCBhdHRyTmFtZSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gc25pZmZpbmcgZG9lc24ndCBzYXkgYW55dGhpbmc6IGFzc3VtZSB0aGUgZXhwZWN0ZWQgdHlwZQotICAgICAgICBpZiAodGhlVHlwZSA9PSBudWxsKQotICAgICAgICAgICAgdGhlVHlwZSA9IGZhY3RvcnlUeXBlOwotCi0gICAgICAgIC8vIFN0aWxsIG5vdGhpbmc6IHRoZSBubyB0eXBlLgotICAgICAgICBpZiAodGhlVHlwZSA9PSBudWxsKQotICAgICAgICAgICAgdGhlVHlwZSA9IFhtbEJlYW5zLk5PX1RZUEU7Ci0KLSAgICAgICAgLy8gYXNzaWduIHR5cGUKLSAgICAgICAgX2RvYy5zZXRUeXBlKCB0aGlzLCB0aGVUeXBlICk7Ci0KLSAgICAgICAgLy8gdG9kbzogSGF2ZSBhIHNpbWlsYXIgYXR0cmlidXRlIHR5cGUgY2hlY2sKLSAgICAgICAgaWYgKGZhY3RvcnlUeXBlICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0aGVUeXBlLmlzRG9jdW1lbnRUeXBlKCkpCi0gICAgICAgICAgICAgICAgdmVyaWZ5RG9jdW1lbnRUeXBlKCB0aGVUeXBlLmdldERvY3VtZW50RWxlbWVudE5hbWUoKSApOwotICAgICAgICAgICAgZWxzZSBpZiAodGhlVHlwZS5pc0F0dHJpYnV0ZVR5cGUoKSkKLSAgICAgICAgICAgICAgICB2ZXJpZnlBdHRyaWJ1dGVUeXBlKCB0aGVUeXBlLmdldEF0dHJpYnV0ZVR5cGVBdHRyaWJ1dGVOYW1lKCkgKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIElmIGEgdHlwZSB3YXMgcGFzc2VkIGluLCB1c3VhbGx5IGZyb20gZ2VuZXJhdGVkIGNvZGUgd2hpY2ggbmVlZHMgdGhlCi0gICAgICAgIC8vIHR5cGUgdG8gYmUgc29tZXRoaW5nIHNwZWNpZmljIGJlY2F1c2Ugb2YgYSBwZW5kaW5nIGNhc3QsIHRoZW4gY2hlY2sKLSAgICAgICAgLy8gdGhlIHJlc3VsdGluZyB0eXBlIGFuZCB0aHJvdyBhIG5pY2UgZXhjZXB0aW9uLgotICAgICAgICAvLwotCi0gICAgICAgIGlmIChmYWN0b3J5VHlwZSAhPSBudWxsICYmICFmYWN0b3J5VHlwZS5pc0Fzc2lnbmFibGVGcm9tKHRoZVR5cGUpKQotICAgICAgICB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJGYWN0b3J5IHR5cGUgPSAiICsgZmFjdG9yeVR5cGUpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUaGUgdHlwZSA9ICIgKyB0aGVUeXBlKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYmFzZXR5cGUgb2YgdGhlIHR5cGUgPSAiICsgdGhlVHlwZS5nZXRCYXNlVHlwZSgpKTsKLSAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgIHRocm93Ci0gICAgICAgICAgICAgICAgbmV3IFhtbEV4Y2VwdGlvbiggIlhNTCBvYmplY3QgaXMgbm90IG9mIHR5cGUgIiArIGZhY3RvcnlUeXBlICk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZ2V0T2JqZWN0KCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHZlcmlmeURvY3VtZW50VHlwZSAoIFFOYW1lIGRvY0VsZW1OYW1lICkKLSAgICAgICAgdGhyb3dzIFhtbEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgWG1sQ3Vyc29yIGMgPSBjcmVhdGVDdXJzb3IoKTsKLQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbnVsbDsKLQotICAgICAgICAgICAgaWYgKCFjLnRvRmlyc3RDaGlsZCgpIHx8IGMudG9OZXh0U2libGluZygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKCAiVGhlIGRvY3VtZW50IGlzIG5vdCBhICIgKTsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIFFOYW1lSGVscGVyLnByZXR0eSggZG9jRWxlbU5hbWUgKSApOwotCi0gICAgICAgICAgICAgICAgaWYgKGMuY3VycmVudFRva2VuVHlwZSgpLmlzU3RhcnRkb2MoKSkKLSAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCAiOiBubyBkb2N1bWVudCBlbGVtZW50IiApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCAiOiBtdWx0aXBsZSBkb2N1bWVudCBlbGVtZW50cyIgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBRTmFtZSBuYW1lID0gYy5nZXROYW1lKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW5hbWUuZXF1YWxzKCBkb2NFbGVtTmFtZSApKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCAiVGhlIGRvY3VtZW50IGlzIG5vdCBhICIgKTsKLSAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCBRTmFtZUhlbHBlci5wcmV0dHkoIGRvY0VsZW1OYW1lICkgKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoZG9jRWxlbU5hbWUuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKCBuYW1lLmdldExvY2FsUGFydCgpICkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggIjogZG9jdW1lbnQgZWxlbWVudCBuYW1lc3BhY2UgbWlzbWF0Y2ggIiApOwotICAgICAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCAiZXhwZWN0ZWQgIiApOwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkTmFtZXNwYWNlKCBzYiwgZG9jRWxlbU5hbWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggIiBnb3QgIiApOwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkTmFtZXNwYWNlKHNiLCAgbmFtZSApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWVzcGFjZXNTYW1lKCBkb2NFbGVtTmFtZSwgbmFtZSApKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoICI6IGRvY3VtZW50IGVsZW1lbnQgbG9jYWwgbmFtZSBtaXNtYXRjaCAiICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoICJleHBlY3RlZCAiICsgZG9jRWxlbU5hbWUuZ2V0TG9jYWxQYXJ0KCkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggIiBnb3QgIiArIG5hbWUuZ2V0TG9jYWxQYXJ0KCkgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggIjogZG9jdW1lbnQgZWxlbWVudCBtaXNtYXRjaCAiICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoICJnb3QgIiApOwotICAgICAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCBRTmFtZUhlbHBlci5wcmV0dHkoIG5hbWUgKSApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc2IgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBYbWxFcnJvciBlcnIgPSBYbWxFcnJvci5mb3JDdXJzb3Ioc2IudG9TdHJpbmcoKSwgYy5uZXdDdXJzb3IoKSk7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFhtbEV4Y2VwdGlvbiggZXJyLnRvU3RyaW5nKCksIG51bGwsIGVyciApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZpbmFsbHkKLSAgICAgICAgewotICAgICAgICAgICAgYy5kaXNwb3NlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdmVyaWZ5QXR0cmlidXRlVHlwZSAoIFFOYW1lIGF0dHJOYW1lICkKLSAgICAgICAgdGhyb3dzIFhtbEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgWG1sQ3Vyc29yIGMgPSBjcmVhdGVDdXJzb3IoKTsKLQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbnVsbDsKLQotICAgICAgICAgICAgaWYgKCFjLnRvRmlyc3RBdHRyaWJ1dGUoKSB8fCBjLnRvTmV4dEF0dHJpYnV0ZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKCAiVGhlIGRvY3VtZW50IGlzIG5vdCBhICIgKTsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIFFOYW1lSGVscGVyLnByZXR0eSggYXR0ck5hbWUgKSApOwotCi0gICAgICAgICAgICAgICAgaWYgKGMuY3VycmVudFRva2VuVHlwZSgpLmlzU3RhcnRkb2MoKSkKLSAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCAiOiBubyBhdHRyaWJ1dGVzIiApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCAiOiBtdWx0aXBsZSBhdHRyaWJ1dGVzIiApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFFOYW1lIG5hbWUgPSBjLmdldE5hbWUoKTsKLQotICAgICAgICAgICAgICAgIGlmICghbmFtZS5lcXVhbHMoIGF0dHJOYW1lICkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQotICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoICJUaGUgZG9jdW1lbnQgaXMgbm90IGEgIiApOwotICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIFFOYW1lSGVscGVyLnByZXR0eSggYXR0ck5hbWUgKSApOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyTmFtZS5nZXRMb2NhbFBhcnQoKS5lcXVhbHMoIG5hbWUuZ2V0TG9jYWxQYXJ0KCkgKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCAiOiBhdHRyaWJ1dGUgbmFtZXNwYWNlIG1pc21hdGNoICIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggImV4cGVjdGVkICIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZE5hbWVzcGFjZSggc2IsIGF0dHJOYW1lICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoICIgZ290ICIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZE5hbWVzcGFjZShzYiwgIG5hbWUgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lc3BhY2VzU2FtZSggYXR0ck5hbWUsIG5hbWUgKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCAiOiBhdHRyaWJ1dGUgbG9jYWwgbmFtZSBtaXNtYXRjaCAiICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoICJleHBlY3RlZCAiICsgYXR0ck5hbWUuZ2V0TG9jYWxQYXJ0KCkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggIiBnb3QgIiArIG5hbWUuZ2V0TG9jYWxQYXJ0KCkgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggIjogYXR0cmlidXRlIGVsZW1lbnQgbWlzbWF0Y2ggIiApOwotICAgICAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCAiZ290ICIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggUU5hbWVIZWxwZXIucHJldHR5KCBuYW1lICkgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHNiICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgWG1sRXJyb3IgZXJyID0gWG1sRXJyb3IuZm9yQ3Vyc29yKHNiLnRvU3RyaW5nKCksIGMubmV3Q3Vyc29yKCkpOwotICAgICAgICAgICAgICAgIHRocm93IG5ldyBYbWxFeGNlcHRpb24oIGVyci50b1N0cmluZygpLCBudWxsLCBlcnIgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmaW5hbGx5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGMuZGlzcG9zZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLwotICAgIC8vCi0KLSAgICBwcml2YXRlIHN0YXRpYyBUaHJlYWRMb2NhbCB0bF9TYXhMb2FkZXJzID0KLSAgICAgICAgbmV3IFRocmVhZExvY2FsKCkKLSAgICAgICAgewotICAgICAgICAgICAgcHJvdGVjdGVkIE9iamVjdCBpbml0aWFsVmFsdWUoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNheExvYWRlciBzbCA9IFBpY2NvbG9TYXhMb2FkZXIubmV3SW5zdGFuY2UoKTsKLQotICAgICAgICAgICAgICAgIGlmIChzbCA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICBzbCA9IERlZmF1bHRTYXhMb2FkZXIubmV3SW5zdGFuY2UoKTsKLQotICAgICAgICAgICAgICAgIGlmIChzbCA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbiggIkNhbid0IGZpbmQgYW4gWE1MIHBhcnNlciIgKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBzbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLQotICAgIHByaXZhdGUgc3RhdGljIFNheExvYWRlciBnZXRTYXhMb2FkZXIgKCApCi0gICAgewotICAgICAgICByZXR1cm4gKFNheExvYWRlcikgdGxfU2F4TG9hZGVycy5nZXQoKTsKLSAgICB9Ci0gICAgCi0KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBQaWNjb2xvU2F4TG9hZGVyIGV4dGVuZHMgU2F4TG9hZGVyCi0gICAgewotICAgICAgICBwdWJsaWMgc3RhdGljIFNheExvYWRlciBuZXdJbnN0YW5jZSAoICkKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ2xhc3MgcGMgPSBDbGFzcy5mb3JOYW1lKCAiY29tLmJsdWVjYXN0LnhtbC5QaWNjb2xvIiApOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFhNTFJlYWRlciB4ciA9IChYTUxSZWFkZXIpIHBjLm5ld0luc3RhbmNlKCk7Ci0KLSAgICAgICAgICAgICAgICBNZXRob2QgbV9nZXRFbmNvZGluZyAgICAgPSBwYy5nZXRNZXRob2QoICJnZXRFbmNvZGluZyIsIG51bGwgKTsKLSAgICAgICAgICAgICAgICBNZXRob2QgbV9nZXRWZXJzaW9uICAgICAgPSBwYy5nZXRNZXRob2QoICJnZXRWZXJzaW9uIiwgbnVsbCApOwotICAgICAgICAgICAgICAgIE1ldGhvZCBtX2dldFN0YXJ0TG9jYXRvciA9IHBjLmdldE1ldGhvZCggImdldFN0YXJ0TG9jYXRvciIsIG51bGwgKTsKLQotICAgICAgICAgICAgICAgIExvY2F0b3Igc3RhcnRMb2NhdG9yID0KLSAgICAgICAgICAgICAgICAgICAgKExvY2F0b3IpIG1fZ2V0U3RhcnRMb2NhdG9yLmludm9rZSggeHIsIG51bGwgKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUGljY29sb1NheExvYWRlciggeHIsIHN0YXJ0TG9jYXRvciwgbV9nZXRFbmNvZGluZywgbV9nZXRWZXJzaW9uICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoIENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoIEV4Y2VwdGlvbiBlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbiggZS5nZXRNZXNzYWdlKCksIGUgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgcG9zdExvYWQgKCBSb290IHIgKQotICAgICAgICB7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByLl9wcm9wcy5zZXRFbmNvZGluZyggKFN0cmluZykgX21fZ2V0RW5jb2RpbmcuaW52b2tlKCBfeHIsIG51bGwgKSApOwotICAgICAgICAgICAgICAgIHIuX3Byb3BzLnNldFZlcnNpb24gKCAoU3RyaW5nKSBfbV9nZXRWZXJzaW9uIC5pbnZva2UoIF94ciwgbnVsbCApICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoIEV4Y2VwdGlvbiBlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbiggZS5nZXRNZXNzYWdlKCksIGUgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBQaWNjb2xvU2F4TG9hZGVyICgKLSAgICAgICAgICAgIFhNTFJlYWRlciB4ciwgTG9jYXRvciBzdGFydExvY2F0b3IsIE1ldGhvZCBtX2dldEVuY29kaW5nLCBNZXRob2QgbV9nZXRWZXJzaW9uICkKLSAgICAgICAgewotICAgICAgICAgICAgc3VwZXIoIHhyLCBzdGFydExvY2F0b3IgKTsKLQotICAgICAgICAgICAgX21fZ2V0RW5jb2RpbmcgPSBtX2dldEVuY29kaW5nOwotICAgICAgICAgICAgX21fZ2V0VmVyc2lvbiA9IG1fZ2V0VmVyc2lvbjsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgTWV0aG9kIF9tX2dldEVuY29kaW5nOwotICAgICAgICBwcml2YXRlIE1ldGhvZCBfbV9nZXRWZXJzaW9uOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBEZWZhdWx0U2F4TG9hZGVyIGV4dGVuZHMgU2F4TG9hZGVyCi0gICAgewotICAgICAgICBwdWJsaWMgc3RhdGljIFNheExvYWRlciBuZXdJbnN0YW5jZSAoICkKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgICAgIG5ldyBEZWZhdWx0U2F4TG9hZGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgU0FYUGFyc2VyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1NBWFBhcnNlcigpLmdldFhNTFJlYWRlcigpICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoIFRocm93YWJsZSBlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbiggZS5nZXRNZXNzYWdlKCksIGUgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgRGVmYXVsdFNheExvYWRlciAoIFhNTFJlYWRlciB4ciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN1cGVyKCB4ciwgbnVsbCApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU2F4TG9hZGVyCi0gICAgICAgIGltcGxlbWVudHMgQ29udGVudEhhbmRsZXIsIExleGljYWxIYW5kbGVyLCBFcnJvckhhbmRsZXIsIEVudGl0eVJlc29sdmVyCi0gICAgewotICAgICAgICBwcm90ZWN0ZWQgU2F4TG9hZGVyICggWE1MUmVhZGVyIHhyLCBMb2NhdG9yIHN0YXJ0TG9jYXRvciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIF94ciA9IHhyOwotICAgICAgICAgICAgX3N0YXJ0TG9jYXRvciA9IHN0YXJ0TG9jYXRvcjsKLQotICAgICAgICAgICAgaWYgKHhyICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB4ci5zZXRGZWF0dXJlKCAiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL25hbWVzcGFjZS1wcmVmaXhlcyIsIHRydWUgKTsKLSAgICAgICAgICAgICAgICAgICAgeHIuc2V0RmVhdHVyZSggImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy9uYW1lc3BhY2VzIiwgdHJ1ZSApOwotICAgICAgICAgICAgICAgICAgICB4ci5zZXRGZWF0dXJlKCAiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL3ZhbGlkYXRpb24iLCBmYWxzZSApOwotCi0KLSAgICAgICAgICAgICAgICAgICAgeHIuc2V0UHJvcGVydHkoICJodHRwOi8veG1sLm9yZy9zYXgvcHJvcGVydGllcy9sZXhpY2FsLWhhbmRsZXIiLCB0aGlzICk7Ci0gICAgICAgICAgICAgICAgICAgIHhyLnNldENvbnRlbnRIYW5kbGVyKCB0aGlzICk7Ci0gICAgICAgICAgICAgICAgICAgIHhyLnNldEVycm9ySGFuZGxlciggdGhpcyApOwotICAgICAgICAgICAgICAgICAgICB4ci5zZXRFbnRpdHlSZXNvbHZlciggdGhpcyApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXRjaCAoIFRocm93YWJsZSBlICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCBlLmdldE1lc3NhZ2UoKSwgZSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIHNldENvbnRleHQgKCBMb2FkQ29udGV4dCBjb250ZXh0LCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBfY29udGV4dCA9IGNvbnRleHQ7Ci0KLSAgICAgICAgICAgIF93YW50TGluZU51bWJlcnMgPQotICAgICAgICAgICAgICAgIFhtbE9wdGlvbnMubWFza051bGwoCi0gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgKS5oYXNPcHRpb24oIFhtbE9wdGlvbnMuTE9BRF9MSU5FX05VTUJFUlMgKSAmJgotICAgICAgICAgICAgICAgICAgICBfc3RhcnRMb2NhdG9yICE9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBwb3N0TG9hZCAoIFJvb3QgciApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIGxvYWQgKCBSb290IHIsIElucHV0U291cmNlIGlucHV0U291cmNlLCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgICAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBYbWxFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgICAgTG9hZENvbnRleHQgY29udGV4dCA9IG5ldyBMb2FkQ29udGV4dCggciwgb3B0aW9ucyApOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzZXRDb250ZXh0KCBjb250ZXh0LCBvcHRpb25zICk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFzc2VydCByLmRpc2FibGVTdG9yZVZhbGlkYXRpb24oKTsKLQotICAgICAgICAgICAgICAgIF94ci5wYXJzZSggaW5wdXRTb3VyY2UgKTsKLQotICAgICAgICAgICAgICAgIHBvc3RMb2FkKCByICk7Ci0KLS8vICAgICAgICAgICAgICAgIC8vIFBpY2NvbG8gc3BlY2lmaWMgYWNjZXNzIHRvIGVuY29kaW5nIGFuZCB2ZXJzaW9uCi0vLyAgICAgICAgICAgICAgICBfcHJvcHMuc2V0RW5jb2RpbmcoIHBpY2NvbG8uZ2V0RW5jb2RpbmcoKSApOwotLy8gICAgICAgICAgICAgICAgX3Byb3BzLnNldFZlcnNpb24oIHBpY2NvbG8uZ2V0VmVyc2lvbigpICk7Ci0KLSAgICAgICAgICAgICAgICBjb250ZXh0LmZpbmlzaCgpOwotCi0gICAgICAgICAgICAgICAgci5hc3NvY2lhdGVTb3VyY2VOYW1lKCBvcHRpb25zICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoIFhtbFJ1bnRpbWVFeGNlcHRpb24gZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5hYm9ydCgpOwotICAgICAgICAgICAgICAgIHRocm93IG5ldyBYbWxFeGNlcHRpb24oIGUgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoICggU0FYUGFyc2VFeGNlcHRpb24gZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5hYm9ydCgpOwotCi0gICAgICAgICAgICAgICAgWG1sRXJyb3IgZXJyID0KLSAgICAgICAgICAgICAgICAgICAgWG1sRXJyb3IuZm9yTG9jYXRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICBlLmdldE1lc3NhZ2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIChTdHJpbmcpIFhtbE9wdGlvbnMuc2FmZUdldCggb3B0aW9ucywgWG1sT3B0aW9ucy5ET0NVTUVOVF9TT1VSQ0VfTkFNRSApLAotICAgICAgICAgICAgICAgICAgICAgICAgZS5nZXRMaW5lTnVtYmVyKCksIGUuZ2V0Q29sdW1uTnVtYmVyKCksIC0xICk7Ci0KLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWG1sRXhjZXB0aW9uKCBlcnIudG9TdHJpbmcoKSwgZSwgZXJyICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoIFNBWEV4Y2VwdGlvbiBlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmFib3J0KCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgWG1sRXJyb3IgZXJyID0gWG1sRXJyb3IuZm9yTWVzc2FnZSggZS5nZXRNZXNzYWdlKCkgKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWG1sRXhjZXB0aW9uKCBlcnIudG9TdHJpbmcoKSwgZSwgZXJyICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoIFJ1bnRpbWVFeGNlcHRpb24gZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC5hYm9ydCgpOwotICAgICAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaW5hbGx5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IHIuZW5hYmxlU3RvcmVWYWxpZGF0aW9uKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBTYXggQ29udGVudEhhbmRsZXIKLQotICAgICAgICBwdWJsaWMgdm9pZCBzdGFydERvY3VtZW50ICggKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIGVuZERvY3VtZW50ICggKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFNldCBjb250ZXh0IHRvIG51bGwKLSAgICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIGhhbmRsZXIgKHdoaWNoIGlzIGhlbGQgaW4gVExTIGZyb20ga2VlcGluZwotICAgICAgICAgICAgLy8gdGhlIGVudGlyZSBkb2N1bWVudCBpbiBtZW1vcnkKLSAgICAgICAgICAgIF9jb250ZXh0ID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHN0YXJ0RWxlbWVudCAoCi0gICAgICAgICAgICBTdHJpbmcgbmFtZXNwYWNlVVJJLCBTdHJpbmcgbG9jYWxOYW1lLAotICAgICAgICAgICAgU3RyaW5nIHFOYW1lLCBBdHRyaWJ1dGVzIGF0dHMgKQotICAgICAgICAgICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGxvY2FsTmFtZS5sZW5ndGgoKSA9PSAwKQotICAgICAgICAgICAgICAgIGxvY2FsTmFtZSA9IHFOYW1lOwotCi0gICAgICAgICAgICAvLyBPdXQgY3VycmVudCBwYXJzZXIgKFBpY2NvbG8pIGRvZXMgbm90IGVycm9yIHdoZW4gYQotICAgICAgICAgICAgLy8gbmFtZXNwYWNlIGlzIHVzZWQgYW5kIG5vdCBkZWZpbmVkLiAgQ2hlY2sgZm9yIHRoZXNlIGhlcmUKLQotICAgICAgICAgICAgaWYgKHFOYW1lLmluZGV4T2YoICc6JyApID49IDAgJiYgbmFtZXNwYWNlVVJJLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgWG1sRXJyb3IgZXJyID0KLSAgICAgICAgICAgICAgICAgICAgWG1sRXJyb3IuZm9yTWVzc2FnZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICJVc2Ugb2YgdW5kZWZpbmVkIG5hbWVzcGFjZSBwcmVmaXg6ICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFOYW1lLnN1YnN0cmluZyggMCwgcU5hbWUuaW5kZXhPZiggJzonICkgKSk7Ci0KLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWG1sUnVudGltZUV4Y2VwdGlvbiggZXJyLnRvU3RyaW5nKCksIG51bGwsIGVyciApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBfY29udGV4dC5iZWdpbiggbG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkgKTsKLQotICAgICAgICAgICAgLy8gQlVHQlVHIC0gZG8gbW9yZSBvZiB0aGUgZm9sbG93aW5nIHRvIGdldCBsaW5lIG51bWJlciBmb3IKLSAgICAgICAgICAgIC8vIGFzIG1hbnkgcGFydHMgb2YgdGhlIFhNTCBhcyB3ZSBjYW4KLSAgICAgICAgICAgIGlmIChfd2FudExpbmVOdW1iZXJzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9jb250ZXh0LmxpbmVOdW1iZXJBbm5vdGF0aW9uKAotICAgICAgICAgICAgICAgICAgICBfc3RhcnRMb2NhdG9yLmdldExpbmVOdW1iZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgX3N0YXJ0TG9jYXRvci5nZXRDb2x1bW5OdW1iZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgLTEgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICggaW50IGkgPSAwLCBsZW4gPSBhdHRzLmdldExlbmd0aCgpIDsgaSA8IGxlbiA7IGkrKyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGFxbiA9IGF0dHMuZ2V0UU5hbWUoIGkgKTsKLQotICAgICAgICAgICAgICAgIGlmIChhcW4uZXF1YWxzKCAieG1sbnMiICkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBfY29udGV4dC54bWxucyggIiIsIGF0dHMuZ2V0VmFsdWUoIGkgKSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChhcW4uc3RhcnRzV2l0aCggInhtbG5zOiIgKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPSBhcW4uc3Vic3RyaW5nKCA2ICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZpeC5sZW5ndGgoKSA9PSAwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBYbWxFcnJvciBlcnIgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtbEVycm9yLmZvck1lc3NhZ2UoICJQcmVmaXggbm90IHNwZWNpZmllZCIsIFhtbEVycm9yLlNFVkVSSVRZX0VSUk9SICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBYbWxSdW50aW1lRXhjZXB0aW9uKCBlcnIudG9TdHJpbmcoKSwgbnVsbCwgZXJyICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdXJpID0gYXR0cy5nZXRWYWx1ZSggaSApOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICh1cmkubGVuZ3RoKCkgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgWG1sRXJyb3IgZXJyID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBYbWxFcnJvci5mb3JNZXNzYWdlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJlZml4IGNhbid0IGJlIG1hcHBlZCB0byBubyBuYW1lc3BhY2U6ICIgKyBwcmVmaXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtbEVycm9yLlNFVkVSSVRZX0VSUk9SICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBYbWxSdW50aW1lRXhjZXB0aW9uKCBlcnIudG9TdHJpbmcoKSwgbnVsbCwgZXJyICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBfY29udGV4dC54bWxucyggcHJlZml4LCB1cmkgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGF0dHJVcmkgPSBhdHRzLmdldFVSSSggaSApOwotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYXR0ckxvY2FsID0gYXR0cy5nZXRMb2NhbE5hbWUoIGkgKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoYXR0ckxvY2FsLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBhdHRyTG9jYWwgPSBhcW47Ci0KLS8vIGdpdmVuIHRoZSBkb2MgPGEgeDp5PSd6Jy8+LCBwaWNjb2xvIHdpbGwgcmVwb3J0IHRoZSB1cmkgb2YgdGhlIHkKLS8vIGF0dHJpYnV0ZSBhcyAneCchICBCYWQgUGljY29sby4gIFRodXMsIEkgY2FuJ3QgcGVyZm9ybSB0aGUgdW5kZWZpbmVkCi0vLyBwcmVmaXggY2hlY2sgaGVyZS4KLS8vCi0vLyAgICAgICAgICAgICAgICAgICAgaWYgKGFxbi5pbmRleE9mKCAnOicgKSA+PSAwICYmIGF0dHJVcmkubGVuZ3RoKCkgPT0gMCkKLS8vICAgICAgICAgICAgICAgICAgICB7Ci0vLyAgICAgICAgICAgICAgICAgICAgICAgIFhtbEVycm9yIGVyciA9Ci0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQ3Vyc29yWG1sRXJyb3IoCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVzZSBvZiB1bmRlZmluZWQgbmFtZXNwYWNlIHByZWZpeDogIiArCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFxbi5zdWJzdHJpbmcoIDAsIGFxbi5pbmRleE9mKCAnOicgKSApLAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhtbEVycm9yLlNFVkVSSVRZX0VSUk9SLAotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgKTsKLS8vCi0vLyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93Ci0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgWG1sUnVudGltZUV4Y2VwdGlvbigKLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIudG9TdHJpbmcoKSwgbnVsbCwgZXJyICk7Ci0vLyAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIF9jb250ZXh0LmF0dHIoIGF0dHJMb2NhbCwgYXR0clVyaSwgYXR0cy5nZXRWYWx1ZSggaSApICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgZW5kRWxlbWVudCAoCi0gICAgICAgICAgICBTdHJpbmcgbmFtZXNwYWNlVVJJLCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgcU5hbWUgKQotICAgICAgICAgICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgICAgX2NvbnRleHQuZW5kKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcHVibGljIHZvaWQgY2hhcmFjdGVycyAoIGNoYXIgY2hbXSwgaW50IHN0YXJ0LCBpbnQgbGVuZ3RoICkKLQotICAgICAgICAgICAgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBfY29udGV4dC50ZXh0KCBjaCwgc3RhcnQsIGxlbmd0aCApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgaWdub3JhYmxlV2hpdGVzcGFjZSAoIGNoYXIgY2hbXSwgaW50IHN0YXJ0LCBpbnQgbGVuZ3RoICkKLSAgICAgICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgICAgX2NvbnRleHQudGV4dCggY2gsIHN0YXJ0LCBsZW5ndGggKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIGNvbW1lbnQgKCBjaGFyIGNoW10sIGludCBzdGFydCwgaW50IGxlbmd0aCApCi0gICAgICAgICAgICB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9jb250ZXh0LmNvbW1lbnQoIGNoLCBzdGFydCwgbGVuZ3RoICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gKCBTdHJpbmcgdGFyZ2V0LCBTdHJpbmcgZGF0YSApCi0gICAgICAgICAgICB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9jb250ZXh0LnByb2NpbnN0KCB0YXJnZXQsIGRhdGEgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHN0YXJ0RFREICggU3RyaW5nIG5hbWUsIFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkICkKLSAgICAgICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgICAgX2NvbnRleHQuZG9jdHlwZSggbmFtZSwgcHVibGljSWQsIHN5c3RlbUlkICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBlbmREVEQgKCApIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRXJyb3IgSGFuZGxpbmcKLSAgICAgICAgcHVibGljIHZvaWQgZmF0YWxFcnJvciAoIFNBWFBhcnNlRXhjZXB0aW9uIGUgKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBlcnJvciAoIFNBWFBhcnNlRXhjZXB0aW9uIGUgKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEFzIG9mIHBpY2NvbG8gMS4wMyB0aGlzIGlzIG5ldmVyIGNhbGxlZAotICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCAiU2hvdWxkIG5vdCBiZSBjYWxsZWQiICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCB3YXJuaW5nICggU0FYUGFyc2VFeGNlcHRpb24gZSApIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgICAgLy8gQXMgb2YgcGljY29sbyAxLjAzIHRoaXMgaXMgbmV2ZXIgY2FsbGVkCi0gICAgICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oICJTaG91bGQgbm90IGJlIGNhbGxlZCIgKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEVudGl0eSBSZXNvbHZlcgotICAgICAgICBwdWJsaWMgSW5wdXRTb3VyY2UgcmVzb2x2ZUVudGl0eSggU3RyaW5nIHB1YmxpY0lkLCBTdHJpbmcgc3lzdGVtSWQgKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oInB1YmxpYyBpZCA9ICIgKyBwdWJsaWNJZCk7Ci0gICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oInN5c3RlbSBpZCA9ICIgKyBzeXN0ZW1JZCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBuZXcgSW5wdXRTb3VyY2UoIG5ldyBTdHJpbmdSZWFkZXIoICIiICkgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldERvY3VtZW50TG9jYXRvciAoIExvY2F0b3IgbG9jYXRvciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9sb2NhdG9yID0gbG9jYXRvcjsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHN0YXJ0UHJlZml4TWFwcGluZyAoIFN0cmluZyBwcmVmaXgsIFN0cmluZyB1cmkgKQotICAgICAgICAgICAgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYmVnaW5zV2l0aFhtbCggcHJlZml4ICkgJiYKLSAgICAgICAgICAgICAgICAhICggInhtbCIuZXF1YWxzKCBwcmVmaXggKSAmJiBfeG1sMTk5OFVyaS5lcXVhbHMoIHVyaSApICkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgWG1sRXJyb3IgZXJyID0KLSAgICAgICAgICAgICAgICAgICAgWG1sRXJyb3IuZm9yTWVzc2FnZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICJQcmVmaXggY2FuJ3QgYmVnaW4gd2l0aCBYTUw6ICIgKyBwcmVmaXgsCi0gICAgICAgICAgICAgICAgICAgICAgICBYbWxFcnJvci5TRVZFUklUWV9FUlJPUiApOwotCi0gICAgICAgICAgICAgICAgdGhyb3cKLSAgICAgICAgICAgICAgICAgICAgbmV3IFhtbFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICBlcnIudG9TdHJpbmcoKSwgbnVsbCwgZXJyICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZ25vcmVkCi0gICAgICAgIHB1YmxpYyB2b2lkIGVuZFByZWZpeE1hcHBpbmcgKCBTdHJpbmcgcHJlZml4ICkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7fQotICAgICAgICBwdWJsaWMgdm9pZCBza2lwcGVkRW50aXR5ICggU3RyaW5nIG5hbWUgKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHt9Ci0gICAgICAgIHB1YmxpYyB2b2lkIHN0YXJ0Q0RBVEEgKCApIHRocm93cyBTQVhFeGNlcHRpb24geyB9Ci0gICAgICAgIHB1YmxpYyB2b2lkIGVuZENEQVRBICggKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsgfQotICAgICAgICBwdWJsaWMgdm9pZCBzdGFydEVudGl0eSAoIFN0cmluZyBuYW1lICkgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7IH0KLSAgICAgICAgcHVibGljIHZvaWQgZW5kRW50aXR5ICggU3RyaW5nIG5hbWUgKSB0aHJvd3MgU0FYRXhjZXB0aW9uIHsgfQotCi0gICAgICAgIHByb3RlY3RlZCBYTUxSZWFkZXIgX3hyOwotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBMb2NhdG9yICAgICBfbG9jYXRvcjsKLSAgICAgICAgcHJpdmF0ZSBMb2FkQ29udGV4dCBfY29udGV4dDsKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuICAgICBfd2FudExpbmVOdW1iZXJzOwotICAgICAgICBwcml2YXRlIExvY2F0b3IgICAgIF9zdGFydExvY2F0b3I7Ci0gICAgfQotICAgIAotICAgIC8vCi0gICAgLy8KLSAgICAvLwotCi0gICAgcHVibGljIFhtbE9iamVjdCBsb2FkWG1sICggSW5wdXRTdHJlYW0gaW4sIFNjaGVtYVR5cGUgdHlwZSwgWG1sT3B0aW9ucyBvcHRpb25zICkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBYbWxFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFN0cmluZyBlbmNvZGluZ092ZXJyaWRlID0KLSAgICAgICAgICAgIChTdHJpbmcpIFhtbE9wdGlvbnMuc2FmZUdldCggb3B0aW9ucywgWG1sT3B0aW9ucy5DSEFSQUNURVJfRU5DT0RJTkcgKTsKLQotICAgICAgICBpZiAoZW5jb2RpbmdPdmVycmlkZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgamF2YUVuY29kaW5nID0gRW5jb2RpbmdNYXAuZ2V0SUFOQTJKYXZhTWFwcGluZyggZW5jb2RpbmdPdmVycmlkZSApOwotCi0gICAgICAgICAgICBpZiAoamF2YUVuY29kaW5nID09IG51bGwpCi0gICAgICAgICAgICAgICAgamF2YUVuY29kaW5nID0gZW5jb2RpbmdPdmVycmlkZTsKLQotICAgICAgICAgICAgcmV0dXJuIGxvYWRYbWwoIG5ldyBJbnB1dFN0cmVhbVJlYWRlciggaW4sIGphdmFFbmNvZGluZyApLCB0eXBlLCBvcHRpb25zICk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbG9hZFhtbCggbmV3IElucHV0U291cmNlKCBpbiApLCB0eXBlLCBvcHRpb25zICk7Ci0gICAgfQotCi0gICAgcHVibGljIFhtbE9iamVjdCBsb2FkWG1sICggUmVhZGVyIHIsIFNjaGVtYVR5cGUgdHlwZSwgWG1sT3B0aW9ucyBvcHRpb25zICkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBYbWxFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHJldHVybiBsb2FkWG1sKCBuZXcgSW5wdXRTb3VyY2UoIHIgKSwgdHlwZSwgb3B0aW9ucyApOwotICAgIH0KLQotICAgIHB1YmxpYyBYbWxPYmplY3QgbG9hZFhtbCAoIElucHV0U291cmNlIGlzLCBTY2hlbWFUeXBlIHR5cGUsIFhtbE9wdGlvbnMgb3B0aW9ucyApCi0gICAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgWG1sRXhjZXB0aW9uCi0gICAgewotICAgICAgICBpcy5zZXRTeXN0ZW1JZCggImZpbGU6Ly8iICk7Ci0KLSAgICAgICAgZ2V0U2F4TG9hZGVyKCkubG9hZCggdGhpcywgaXMsIG9wdGlvbnMgKTsKLQotICAgICAgICByZXR1cm4gYXV0b1R5cGVkRG9jdW1lbnQoIHR5cGUsIG9wdGlvbnMgKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIFhtbE9iamVjdCBsb2FkWG1sICggWE1MU3RyZWFtUmVhZGVyIHhzciwgU2NoZW1hVHlwZSB0eXBlLCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgICAgICB0aHJvd3MgWG1sRXhjZXB0aW9uCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgbG9hZFhNTFN0cmVhbVJlYWRlciggeHNyLCBvcHRpb25zICk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiBlICkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IFhtbEV4Y2VwdGlvbiggZS5nZXRNZXNzYWdlKCksIGUgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBhdXRvVHlwZWREb2N1bWVudCggdHlwZSwgb3B0aW9ucyApOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgWG1sT2JqZWN0IGxvYWRYbWwgKCBTdHJpbmcgcywgU2NoZW1hVHlwZSB0eXBlLCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgICAgICB0aHJvd3MgWG1sRXhjZXB0aW9uCi0gICAgewotICAgICAgICBSZWFkZXIgciA9IG5ldyBTdHJpbmdSZWFkZXIoIHMgKTsKLQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGxvYWRYbWwoIHIsIHR5cGUsIG9wdGlvbnMgKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoIElPRXhjZXB0aW9uIGUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgZmFsc2U6ICJTdHJpbmdSZWFkZXIgc2hvdWxkIG5vdCB0aHJvdyBJT0V4Y2VwdGlvbiI7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgWG1sRXhjZXB0aW9uKCBlLmdldE1lc3NhZ2UoKSwgZSApOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsbHkKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5IHsgci5jbG9zZSgpOyB9IGNhdGNoICggSU9FeGNlcHRpb24gZSApIHsgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGFzc29jaWF0ZVNvdXJjZU5hbWUgKCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgIHsKLSAgICAgICAgU3RyaW5nIHNvdXJjZU5hbWUgPQotICAgICAgICAgICAgKFN0cmluZykgWG1sT3B0aW9ucy5zYWZlR2V0KAotICAgICAgICAgICAgICAgIG9wdGlvbnMsIFhtbE9wdGlvbnMuRE9DVU1FTlRfU09VUkNFX05BTUUgKTsKLQotICAgICAgICBpZiAoc291cmNlTmFtZSAhPSBudWxsKQotICAgICAgICAgICAgX3Byb3BzLnNldFNvdXJjZU5hbWUoIHNvdXJjZU5hbWUgKTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIFhtbFNheEhhbmRsZXIgaXMgcmV0dXJuZWQgdG8gYSB1c2VyIHNvIHRoYXQgdXNlciBtYXkgb2J0YWluIHRoZSBjb250ZW50Ci0gICAgLy8gYW5kIGxleGljYWwgaGFuZGxlcnMgdG8gcHVzaCBjb250ZW50IGFuZCB0aGVuIGdldCB0aGUgWG1sT2JqZWN0IGF0IHRoZQotICAgIC8vIGVuZCBvZiB0aGUgcGFyc2UgcHVzaC4KLSAgICAvLwotCi0gICAgcHJpdmF0ZSBjbGFzcyBYbWxTYXhIYW5kbGVySW1wbCBleHRlbmRzIFNheExvYWRlciBpbXBsZW1lbnRzIFhtbFNheEhhbmRsZXIKLSAgICB7Ci0gICAgICAgIFhtbFNheEhhbmRsZXJJbXBsICggU2NoZW1hVHlwZSB0eXBlLCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdXBlciggbnVsbCwgbnVsbCApOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhc3NlcnQgaXNFbXB0eSgpOwotCi0gICAgICAgICAgICBfb3B0aW9ucyA9IG9wdGlvbnM7Ci0gICAgICAgICAgICBfdHlwZSA9IHR5cGU7Ci0KLSAgICAgICAgICAgIF9jb250ZXh0ID0gbmV3IExvYWRDb250ZXh0KCBSb290LnRoaXMsIG9wdGlvbnMgKTsKLQotICAgICAgICAgICAgc2V0Q29udGV4dCggX2NvbnRleHQsIG9wdGlvbnMgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBDb250ZW50SGFuZGxlciBnZXRDb250ZW50SGFuZGxlciAoICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0ID09IG51bGwgPyBudWxsIDogdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBMZXhpY2FsSGFuZGxlciBnZXRMZXhpY2FsSGFuZGxlciAoICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0ID09IG51bGwgPyBudWxsIDogdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBYbWxPYmplY3QgZ2V0T2JqZWN0ICggKSB0aHJvd3MgWG1sRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfY29udGV4dCA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgICAgICBfY29udGV4dC5maW5pc2goKTsKLQotICAgICAgICAgICAgX2NvbnRleHQgPSBudWxsOwotCi0gICAgICAgICAgICBSb290LnRoaXMuYXNzb2NpYXRlU291cmNlTmFtZSggX29wdGlvbnMgKTsKLQotICAgICAgICAgICAgcmV0dXJuIFJvb3QudGhpcy5hdXRvVHlwZWREb2N1bWVudCggX3R5cGUsIF9vcHRpb25zICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIExvYWRDb250ZXh0IF9jb250ZXh0OwotICAgICAgICBwcml2YXRlIFNjaGVtYVR5cGUgIF90eXBlOwotICAgICAgICBwcml2YXRlIFhtbE9wdGlvbnMgIF9vcHRpb25zOwotICAgIH0KLQotICAgIHB1YmxpYyBYbWxTYXhIYW5kbGVyIG5ld1NheEhhbmRsZXIgKCBTY2hlbWFUeXBlIHR5cGUsIFhtbE9wdGlvbnMgb3B0aW9ucyApCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IFhtbFNheEhhbmRsZXJJbXBsKCB0eXBlLCBvcHRpb25zICk7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLwotICAgIC8vCi0KLSAgICBwcml2YXRlIHZvaWQgbmV3UGFyc2VTYXggKCBJbnB1dFNvdXJjZSBpbiwgWG1sT3B0aW9ucyBvcHRpb25zICkKLSAgICB7Ci0gICAgICAgIExvYWRDb250ZXh0IGNvbnRleHQgPSBuZXcgTG9hZENvbnRleHQoIHRoaXMsIG9wdGlvbnMgKTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIEhlbHBlciBvYmplY3QgZm9yIGNyZWF0aW5nIGRvY3VtZW50cyBpbiBhICJsb2FkIiBraW5kYSB3YXkKLSAgICAvLwotCi0gICAgc3RhdGljIGZpbmFsIGNsYXNzIExvYWRDb250ZXh0Ci0gICAgewotICAgICAgICBMb2FkQ29udGV4dCAoIFJvb3Qgcm9vdCwgWG1sT3B0aW9ucyBvcHRpb25zICkKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0IHJvb3QgIT0gbnVsbDsKLQotICAgICAgICAgICAgX29wdGlvbnMgPSBvcHRpb25zID0gWG1sT3B0aW9ucy5tYXNrTnVsbCggb3B0aW9ucyApOwotCi0gICAgICAgICAgICBfcW5hbWVDYWNoZSA9IFhtbEJlYW5zLmdldFFOYW1lQ2FjaGUoKTsKLQotICAgICAgICAgICAgaWYgKG9wdGlvbnMuaGFzT3B0aW9uKCBYbWxPcHRpb25zLkxPQURfUkVQTEFDRV9ET0NVTUVOVF9FTEVNRU5UICkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUU5hbWUgbmFtZSA9IChRTmFtZSkgb3B0aW9ucy5nZXQoIFhtbE9wdGlvbnMuTE9BRF9SRVBMQUNFX0RPQ1VNRU5UX0VMRU1FTlQgKTsKLQotICAgICAgICAgICAgICAgIGlmIChuYW1lICE9IG51bGwgJiYgbmFtZS5nZXRMb2NhbFBhcnQoKS5sZW5ndGgoKSA9PSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxvYWQgUmVwbGFjZSBEb2N1bWVudCBFbGVtZW50OiBJbnZhbGlkIG5hbWUsIGxvY2FsIHBhcnQgZW1wdHkiICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIF9kaXNjYXJkRG9jRWxlbSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgX3JlcGxhY2VEb2NFbGVtID0gbmFtZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgX3N0cmlwV2hpdGVzcGFjZSA9IG9wdGlvbnMuaGFzT3B0aW9uKFhtbE9wdGlvbnMuTE9BRF9TVFJJUF9XSElURVNQQUNFKTsKLSAgICAgICAgICAgIF9zdHJpcENvbW1lbnRzID0gb3B0aW9ucy5oYXNPcHRpb24oWG1sT3B0aW9ucy5MT0FEX1NUUklQX0NPTU1FTlRTKTsKLSAgICAgICAgICAgIF9zdHJpcFByb2NpbnN0cyA9IG9wdGlvbnMuaGFzT3B0aW9uKFhtbE9wdGlvbnMuTE9BRF9TVFJJUF9QUk9DSU5TVFMpOwotCi0gICAgICAgICAgICBfc3Vic3RpdHV0ZU5hbWVzcGFjZXMgPQotICAgICAgICAgICAgICAgIChNYXApIG9wdGlvbnMuZ2V0KFhtbE9wdGlvbnMuTE9BRF9TVUJTVElUVVRFX05BTUVTUEFDRVMpOwotCi0gICAgICAgICAgICBfYWRkaXRpb25hbE5hbWVzcGFjZXMgPQotICAgICAgICAgICAgICAgIChNYXApIG9wdGlvbnMuZ2V0KFhtbE9wdGlvbnMuTE9BRF9BRERJVElPTkFMX05BTUVTUEFDRVMpOwotCi0gICAgICAgICAgICBfcm9vdCA9IHJvb3Q7Ci0gICAgICAgICAgICBfcm9vdC5lbnN1cmVFbXB0eSgpOwotCi0gICAgICAgICAgICBfbGFzdE5vbkF0dHIgPSBfcm9vdC5fZG9jOwotICAgICAgICAgICAgX2xhc3RTcGxheSA9IF9yb290Ll9kb2M7Ci0gICAgICAgICAgICBfbGFzdFBvcyA9IDA7Ci0KLSAgICAgICAgICAgIF9mcm9udGllciA9IF9yb290Ll9kb2M7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIFJvb3QgZ2V0Um9vdCAoICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIF9yb290OwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBpbnQgZ2V0Q3AgKCBTcGxheSBzICkKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0IF9yb290LmlzTGVmdE9ubHkoKTsKLSAgICAgICAgICAgIGFzc2VydCBkdiA+IDAgfHwgcy5nZXRDcFNsb3coKSA9PSBzLmdldENjaExlZnQoKTsKLSAgICAgICAgICAgIHJldHVybiBzLmdldENjaExlZnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBhZGp1c3RDY2ggKCBTcGxheSBzLCBpbnQgZGVsdGEgKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgX3Jvb3QuaXNMZWZ0T25seSgpOwotCi0gICAgICAgICAgICBzLmFkanVzdENjaCggZGVsdGEgKTsKLQotICAgICAgICAgICAgLy8gVGhlcmUgbWF5IGJlIGF0dHJzIGFmdGVyIHRoaXMgc3BsYXkgd2hpY2ggbmVlZCB0aGVpciBjY2hMZWZ0J3MKLSAgICAgICAgICAgIC8vIHRvIGJlIHVwZGF0ZWQuICBUbyBhdm9pZCBzcGxheWluZywgdXBkYXRlIHRoZW0gYnkgaGFuZC4KLQotICAgICAgICAgICAgZm9yICggcyA9IHMubmV4dFNwbGF5KCkgOyBzICE9IG51bGwgOyBzID0gcy5uZXh0U3BsYXkoKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IHMuaXNBdHRyKCkgfHwgcy5pc1Jvb3QoKTsKLSAgICAgICAgICAgICAgICBzLmFkanVzdENjaExlZnQoIGRlbHRhICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgaW5zZXJ0ICggU3BsYXkgcyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFzc2VydCAhX2ZpbmlzaGVkOwotICAgICAgICAgICAgYXNzZXJ0IHMuZ2V0Q2NoKCkgPT0gMDsKLQotICAgICAgICAgICAgX3Jvb3QuaW5zZXJ0U3BsYXkoIHMsIF9yb290Ll9sZWZ0U3BsYXkgKTsKLQotICAgICAgICAgICAgX2xhc3RTcGxheSA9IHM7Ci0gICAgICAgICAgICBfbGFzdFBvcyA9IDA7Ci0KLSAgICAgICAgICAgIGlmICghcy5pc0F0dHIoKSkKLSAgICAgICAgICAgICAgICBfbGFzdE5vbkF0dHIgPSBzOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGluc2VydCAoIFNwbGF5IHMsIGNoYXJbXSBidWYsIGludCBvZmYsIGludCBjY2ggKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgIV9maW5pc2hlZDsKLSAgICAgICAgICAgIGFzc2VydCBzLmdldENjaCgpID09IDA7Ci0gICAgICAgICAgICBpbnNlcnQoIHMgKTsKLSAgICAgICAgICAgIF9yb290Ll90ZXh0Lmluc2VydCggZ2V0Q3AoIHMgKSwgYnVmLCBvZmYsIGNjaCApOwotICAgICAgICAgICAgYWRqdXN0Q2NoKCBzLCBjY2ggKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBpbnNlcnQgKCBTcGxheSBzLCBTdHJpbmcgdGV4dCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFzc2VydCAhX2ZpbmlzaGVkOwotICAgICAgICAgICAgYXNzZXJ0IHMuZ2V0Q2NoKCkgPT0gMDsKLSAgICAgICAgICAgIGluc2VydCggcyApOwotICAgICAgICAgICAgX3Jvb3QuX3RleHQuaW5zZXJ0KCBnZXRDcCggcyApLCB0ZXh0ICk7Ci0gICAgICAgICAgICBhZGp1c3RDY2goIHMsIHRleHQubGVuZ3RoKCkgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBzdHJpcExlYWRpbmdXaGl0ZXNwYWNlICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgY2NoQWZ0ZXIgPSBfbGFzdE5vbkF0dHIuZ2V0Q2NoQWZ0ZXIoKTsKLQotICAgICAgICAgICAgaWYgKGNjaEFmdGVyID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgY2NoID0gY2NoQWZ0ZXI7Ci0KLSAgICAgICAgICAgICAgICBpbnQgY3BBZnRlciA9Ci0gICAgICAgICAgICAgICAgICAgIF9sYXN0Tm9uQXR0ci5nZXRDcEZvclBvcygKLSAgICAgICAgICAgICAgICAgICAgICAgIF9yb290LCBfbGFzdE5vbkF0dHIuZ2V0UG9zQWZ0ZXIoKSApOwotCi0gICAgICAgICAgICAgICAgaW50IG9mZiA9IF9yb290Ll90ZXh0LnVuT2JzY3VyZSggY3BBZnRlciwgY2NoICk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKCA7IGNjaCA+IDAgOyBjY2gtLSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWlzV2hpdGVTcGFjZSggX3Jvb3QuX3RleHQuX2J1Zlsgb2ZmICsgY2NoIC0gMSBdKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGludCBkZWx0YSA9IGNjaCAtIGNjaEFmdGVyOwotCi0gICAgICAgICAgICAgICAgaWYgKGRlbHRhIDwgMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIF9yb290Ll90ZXh0LnJlbW92ZSggY3BBZnRlciArIGNjaEFmdGVyICsgZGVsdGEsIC0gZGVsdGEgKTsKLSAgICAgICAgICAgICAgICAgICAgX2xhc3ROb25BdHRyLmFkanVzdENjaEFmdGVyKCBkZWx0YSApOwotICAgICAgICAgICAgICAgICAgICBhZGp1c3RDY2goIF9sYXN0Tm9uQXR0ciwgZGVsdGEgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGFib3J0ICggKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUaGUgc2hpdCBtdXN0IGhhdmUgaGl0IHRoZSBmYW4gLi4uCi0KLSAgICAgICAgICAgIC8vIENsb3NlIGFsbCBlbGVtZW50cwotCi0gICAgICAgICAgICB3aGlsZSAoIF9mcm9udGllciAhPSBfcm9vdC5fZG9jICkKLSAgICAgICAgICAgICAgICBlbmQoKTsKLQotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmluaXNoKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoIFhtbEV4Y2VwdGlvbiBlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQgZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGZpbmlzaCAoICkgdGhyb3dzIFhtbEV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX3N0cmlwV2hpdGVzcGFjZSkKLSAgICAgICAgICAgICAgICBzdHJpcExlYWRpbmdXaGl0ZXNwYWNlKCk7Ci0KLSAgICAgICAgICAgIC8vIFRPRE86IGRlYWwgd2l0aCB1bnRlcm1pbmF0ZWQgYmVnaW5zIGhlcmUKLQotICAgICAgICAgICAgaWYgKF9mcm9udGllciAhPSBfcm9vdC5fZG9jKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBYbWxFeGNlcHRpb24oICJEb2N1bWVudCBub3QgZW5kZWQiICk7Ci0KLSAgICAgICAgICAgIGFzc2VydCBfcm9vdC5fbGVmdE9ubHk7Ci0KLSAgICAgICAgICAgIF9maW5pc2hlZCA9IHRydWU7Ci0KLSAgICAgICAgICAgIF9sYXN0U3BsYXkgPSBfcm9vdDsKLSAgICAgICAgICAgIF9sYXN0UG9zID0gMDsKLQotICAgICAgICAgICAgaWYgKF9vcHRpb25zLmhhc09wdGlvbihYbWxPcHRpb25zLkxPQURfVFJJTV9URVhUX0JVRkZFUikpCi0gICAgICAgICAgICAgICAgX3Jvb3QuX3RleHQudHJpbSgpOwotCi0gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGFkZGl0aW9uYWwgbmFtZXNwYWNlcywgYWRkIHRoZW0gbm93LCBtYWtpbmcgc3VyZSB3ZQotICAgICAgICAgICAgLy8gZG9uZSBvdmVyIHJpZGUgZXhpc2l0bmcgb25lcy4KLQotICAgICAgICAgICAgaWYgKF9hZGRpdGlvbmFsTmFtZXNwYWNlcyAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNwbGF5IHMgPSBfcm9vdC5fZG9jOwotCi0gICAgICAgICAgICAgICAgd2hpbGUgKCAhcy5pc1Jvb3QoKSAmJiAhcy5pc0JlZ2luKCkgKQotICAgICAgICAgICAgICAgICAgICBzID0gcy5uZXh0U3BsYXkoKTsKLQotICAgICAgICAgICAgICAgIGlmIChzLmlzQmVnaW4oKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGphdmEudXRpbC5JdGVyYXRvciBpID0KLSAgICAgICAgICAgICAgICAgICAgICAgIF9hZGRpdGlvbmFsTmFtZXNwYWNlcy5rZXlTZXQoKS5pdGVyYXRvcigpOwotCi0gICAgICAgICAgICAgICAgICAgIHdoaWxlICggaS5oYXNOZXh0KCkgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gKFN0cmluZykgaS5uZXh0KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzdWFsbHksIHRoaXMgaXMgdGhlIHByZWRlZmluZWQgeG1sIG5hbWVzcGFjZQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZpeC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoICJ4bWwiICkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lc3BhY2UgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTdHJpbmcpIF9hZGRpdGlvbmFsTmFtZXNwYWNlcy5nZXQoIHByZWZpeCApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocy5uYW1lc3BhY2VGb3JQcmVmaXgoIHByZWZpeCApID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Jvb3QuaW5zZXJ0U2luZ2xlU3BsYXlTYW5zU3BsYXlJbkxlZnRPbmx5VHJlZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFhtbG5zKCBuZXcgUU5hbWUoIG5hbWVzcGFjZSwgcHJlZml4ICkgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGFib3ZlIGluc2VydCBzaG91bGQgbm90IHNwbGF5IHRoZSB0cmVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IF9yb290LmlzTGVmdE9ubHkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gRm9yIG1vc3Qgb2YgbG9hZGluZywgSSBkb24ndCBpbnZhbGlkYXRlIHRoZSBkb2N1bWVudAotICAgICAgICAgICAgLy8gdmVyc2lvbiBiZWNhdXNlIG5vdGhpbmcgc2hvdWxkIGJlIHNlbnNpdGl2ZSB0byBpdCB3aGlsZQotICAgICAgICAgICAgLy8gbG9hZGluZy4gIFdoZW4gZmluaXNoZWQgbG9hZGluZywgYnVtcCBpdC4KLQotICAgICAgICAgICAgX3Jvb3QuaW52YWxpZGF0ZVZlcnNpb24oKTsKLQotICAgICAgICAgICAgYXNzZXJ0IF9yb290LmlzTGVmdE9ubHkoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgUU5hbWUgY2hlY2tOYW1lICggU3RyaW5nIGxvY2FsLCBTdHJpbmcgdXJpICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKF9zdWJzdGl0dXRlTmFtZXNwYWNlcyAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBzdWJzdGl0dXRlVXJpID0KLSAgICAgICAgICAgICAgICAgICAgKFN0cmluZykgX3N1YnN0aXR1dGVOYW1lc3BhY2VzLmdldCggdXJpICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc3Vic3RpdHV0ZVVyaSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3FuYW1lQ2FjaGUuZ2V0TmFtZSggc3Vic3RpdHV0ZVVyaSwgbG9jYWwgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIF9xbmFtZUNhY2hlLmdldE5hbWUoIHVyaSwgbG9jYWwgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgUU5hbWUgY2hlY2tOYW1lICggUU5hbWUgbmFtZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfc3Vic3RpdHV0ZU5hbWVzcGFjZXMgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgc3Vic3RpdHV0ZVVyaSA9Ci0gICAgICAgICAgICAgICAgICAgIChTdHJpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICBfc3Vic3RpdHV0ZU5hbWVzcGFjZXMuZ2V0KCBuYW1lLmdldE5hbWVzcGFjZVVSSSgpICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc3Vic3RpdHV0ZVVyaSAhPSBudWxsKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbmFtZSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBfcW5hbWVDYWNoZS5nZXROYW1lKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0aXR1dGVVcmksIG5hbWUuZ2V0TG9jYWxQYXJ0KCkgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBuYW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBRTmFtZSBjaGVja05hbWVBdHRyICggU3RyaW5nIGxvY2FsLCBTdHJpbmcgdXJpICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKF9zdWJzdGl0dXRlTmFtZXNwYWNlcyAhPSBudWxsICYmIHVyaS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHN1YnN0aXR1dGVVcmkgPQotICAgICAgICAgICAgICAgICAgICAoU3RyaW5nKSBfc3Vic3RpdHV0ZU5hbWVzcGFjZXMuZ2V0KCB1cmkgKTsKLQotICAgICAgICAgICAgICAgIGlmIChzdWJzdGl0dXRlVXJpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBfcW5hbWVDYWNoZS5nZXROYW1lKCBzdWJzdGl0dXRlVXJpLCBsb2NhbCApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gX3FuYW1lQ2FjaGUuZ2V0TmFtZSggdXJpLCBsb2NhbCApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBRTmFtZSBjaGVja05hbWVBdHRyICggUU5hbWUgbmFtZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfc3Vic3RpdHV0ZU5hbWVzcGFjZXMgIT0gbnVsbCAmJiBuYW1lLmdldE5hbWVzcGFjZVVSSSgpLmxlbmd0aCgpID4gMCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHN1YnN0aXR1dGVVcmkgPQotICAgICAgICAgICAgICAgICAgICAoU3RyaW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgX3N1YnN0aXR1dGVOYW1lc3BhY2VzLmdldCggbmFtZS5nZXROYW1lc3BhY2VVUkkoKSApOwotCi0gICAgICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGVVcmkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG5hbWUgPQotICAgICAgICAgICAgICAgICAgICAgICAgX3FuYW1lQ2FjaGUuZ2V0TmFtZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzdGl0dXRlVXJpLCBuYW1lLmdldExvY2FsUGFydCgpICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gbmFtZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZG9jdHlwZSAoIFN0cmluZyBuYW1lLCBTdHJpbmcgcHVibGljSUQsIFN0cmluZyBzeXN0ZW1JRCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9yb290Ll9wcm9wcy5zZXREb2N0eXBlTmFtZSggbmFtZSApOwotICAgICAgICAgICAgX3Jvb3QuX3Byb3BzLnNldERvY3R5cGVQdWJsaWNJZCggcHVibGljSUQgKTsKLSAgICAgICAgICAgIF9yb290Ll9wcm9wcy5zZXREb2N0eXBlU3lzdGVtSWQoIHN5c3RlbUlEICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgaW5zZXJ0QmVnaW4gKCBRTmFtZSBuYW1lICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKF9zdHJpcFdoaXRlc3BhY2UpCi0gICAgICAgICAgICAgICAgc3RyaXBMZWFkaW5nV2hpdGVzcGFjZSgpOwotCi0gICAgICAgICAgICBpZiAoX2Zyb250aWVyLmlzRG9jKCkgJiYgIV9kb2NFbGVtRGlzY2FyZGVkICYmCi0gICAgICAgICAgICAgICAgICAgIChfZGlzY2FyZERvY0VsZW0gfHwgaXNYbWxGcmFnbWVudCggbmFtZSApKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfZG9jRWxlbURpc2NhcmRlZCA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoX3JlcGxhY2VEb2NFbGVtID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIG5hbWUgPSBfcmVwbGFjZURvY0VsZW07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGluc2VydCggX2Zyb250aWVyID0gbmV3IEJlZ2luKCBuYW1lLCBfZnJvbnRpZXIgKSApOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBiZWdpbiAoIFN0cmluZyBsb2NhbCwgU3RyaW5nIHVyaSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGluc2VydEJlZ2luKCBjaGVja05hbWUoIGxvY2FsLCB1cmkgKSApOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBiZWdpbiAoIFFOYW1lIG5hbWUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnNlcnRCZWdpbiggY2hlY2tOYW1lKCBuYW1lICkgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZW5kICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX3N0cmlwV2hpdGVzcGFjZSkKLSAgICAgICAgICAgICAgICBzdHJpcExlYWRpbmdXaGl0ZXNwYWNlKCk7Ci0KLSAgICAgICAgICAgIGlmIChfZnJvbnRpZXIuaXNEb2MoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIV9kb2NFbGVtRGlzY2FyZGVkKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCAiVG9vIG1hbnkgZW5kIGVsZW1lbnRzIiApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFzc2VydCAhX2ZpbmlzaGVkOwotICAgICAgICAgICAgICAgIGFzc2VydCBfZnJvbnRpZXIuaXNCZWdpbigpOwotICAgICAgICAgICAgICAgIGFzc2VydCAhX2Zyb250aWVyLmlzTGVhZigpOwotCi0gICAgICAgICAgICAgICAgaWYgKF9sYXN0Tm9uQXR0ciA9PSBfZnJvbnRpZXIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBfbGFzdFNwbGF5ID0gX2Zyb250aWVyOwotICAgICAgICAgICAgICAgICAgICBfbGFzdFBvcyA9IDEgKyBfZnJvbnRpZXIuZ2V0Q2NoKCk7Ci0gICAgICAgICAgICAgICAgICAgIF9mcm9udGllci50b2dnbGVJc0xlYWYoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGNjaCA9IF9mcm9udGllci5nZXRDY2hBZnRlcigpOwotICAgICAgICAgICAgICAgICAgICBfZnJvbnRpZXIuYWRqdXN0Q2NoQWZ0ZXIoIC0gY2NoICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEJlZ2luIGIgPSAoQmVnaW4pIF9mcm9udGllcjsKLSAgICAgICAgICAgICAgICAgICAgRW5kIGUgPSBuZXcgRW5kKCBiICk7Ci0gICAgICAgICAgICAgICAgICAgIGIuX2VuZCA9IGU7Ci0gICAgICAgICAgICAgICAgICAgIGluc2VydCggZSApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIF9mcm9udGllciA9IF9mcm9udGllci5nZXRDb250YWluZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgYXR0ciAoIFFOYW1lIG5hbWUsIGNoYXJbXSBidWYsIGludCBvZmYsIGludCBjY2ggKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnNlcnQoIG5ldyBBdHRyKCBjaGVja05hbWVBdHRyKCBuYW1lICkgKSwgYnVmLCBvZmYsIGNjaCApOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBhdHRyICggUU5hbWUgbmFtZSwgU3RyaW5nIHZhbHVlICkKLSAgICAgICAgewotICAgICAgICAgICAgaW5zZXJ0KCBuZXcgQXR0ciggY2hlY2tOYW1lQXR0ciggbmFtZSApICksIHZhbHVlICk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGF0dHIgKCBTdHJpbmcgbG9jYWwsIFN0cmluZyB1cmksIFN0cmluZyB2YWx1ZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGluc2VydCggbmV3IEF0dHIoIGNoZWNrTmFtZUF0dHIoIGxvY2FsLCB1cmkgKSApLCB2YWx1ZSApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIGRpc2NhcmRYbWxucyAoIFFOYW1lIG5hbWUgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgICAgICBfZG9jRWxlbURpc2NhcmRlZCAmJiBfZnJvbnRpZXIuaXNEb2MoKSAmJgotICAgICAgICAgICAgICAgICAgICBuYW1lLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyggX29wZW5GcmFnVXJpICk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHhtbG5zICggU3RyaW5nIHByZWZpeCwgU3RyaW5nIHVyaSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFFOYW1lIG5hbWUgPSBjaGVja05hbWUoIHByZWZpeCwgdXJpICk7Ci0KLSAgICAgICAgICAgIGlmICghZGlzY2FyZFhtbG5zKCBuYW1lICkpCi0gICAgICAgICAgICAgICAgaW5zZXJ0KCBuZXcgWG1sbnMoIG5hbWUgKSApOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB4bWxucyAoIFFOYW1lIG5hbWUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBuYW1lID0gY2hlY2tOYW1lKCBuYW1lICk7Ci0KLSAgICAgICAgICAgIGlmICghZGlzY2FyZFhtbG5zKCBuYW1lICkpCi0gICAgICAgICAgICAgICAgaW5zZXJ0KCBuZXcgWG1sbnMoIG5hbWUgKSApOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBjb21tZW50ICggY2hhcltdIGJ1ZiwgaW50IG9mZiwgaW50IGNjaCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghX3N0cmlwQ29tbWVudHMpCi0gICAgICAgICAgICAgICAgaW5zZXJ0KCBuZXcgQ29tbWVudCgpLCBidWYsIG9mZiwgY2NoICk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGNvbW1lbnQgKCBTdHJpbmcgdmFsdWUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIV9zdHJpcENvbW1lbnRzKQotICAgICAgICAgICAgICAgIGluc2VydCggbmV3IENvbW1lbnQoKSwgdmFsdWUgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgcHJvY2luc3QgKCBTdHJpbmcgdGFyZ2V0LCBjaGFyW10gYnVmLCBpbnQgb2ZmLCBpbnQgY2NoICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFfc3RyaXBQcm9jaW5zdHMpCi0gICAgICAgICAgICAgICAgaW5zZXJ0KCBuZXcgUHJvY2luc3QoIHRhcmdldCApLCBidWYsIG9mZiwgY2NoICk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHByb2NpbnN0ICggU3RyaW5nIHRhcmdldCwgU3RyaW5nIHZhbHVlICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFfc3RyaXBQcm9jaW5zdHMpCi0gICAgICAgICAgICAgICAgaW5zZXJ0KCBuZXcgUHJvY2luc3QoIHRhcmdldCApLCB2YWx1ZSApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gcmV0dXJucyB0aGUgY3Agd2hlcmUgbmV3IHRleHQgc2hvdWxkIGdvLgotICAgICAgICAvLwotCi0gICAgICAgIGludCBwcmVUZXh0ICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgIV9maW5pc2hlZDsKLQotICAgICAgICAgICAgcmV0dXJuIGdldENwKCBfbGFzdE5vbkF0dHIgKSArIF9sYXN0Tm9uQXR0ci5nZXRDY2goKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIE5ldyB0ZXh0IGhhcyBiZWVuIHBsYWNlZCwgYWRqdXN0Li4uCi0gICAgICAgIC8vCi0KLSAgICAgICAgdm9pZCBwb3N0VGV4dCAoIGludCBjcCwgaW50IGNjaCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfc3RyaXBXaGl0ZXNwYWNlICYmIF9sYXN0Tm9uQXR0ci5nZXRDY2hBZnRlcigpID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IG9mZiA9IF9yb290Ll90ZXh0LnVuT2JzY3VyZSggY3AsIGNjaCApOwotCi0gICAgICAgICAgICAgICAgaW50IGkgPSAwOwotCi0gICAgICAgICAgICAgICAgd2hpbGUgKCBpIDwgY2NoICYmIGlzV2hpdGVTcGFjZSggX3Jvb3QuX3RleHQuX2J1Zlsgb2ZmICsgaSBdICkgKQotICAgICAgICAgICAgICAgICAgICBpKys7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaSA+IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBfcm9vdC5fdGV4dC5yZW1vdmUoIGNwLCBpICk7Ci0gICAgICAgICAgICAgICAgICAgIGNjaCAtPSBpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGNjaCA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2xhc3RTcGxheSA9IF9sYXN0Tm9uQXR0cjsKLSAgICAgICAgICAgICAgICBfbGFzdFBvcyA9IF9sYXN0Tm9uQXR0ci5nZXRFbmRQb3MoKTsKLSAgICAgICAgICAgICAgICBfbGFzdE5vbkF0dHIuYWRqdXN0Q2NoQWZ0ZXIoIGNjaCApOwotCi0gICAgICAgICAgICAgICAgYWRqdXN0Q2NoKCBfbGFzdE5vbkF0dHIsIGNjaCApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB0ZXh0ICggY2hhcltdIGJ1ZiwgaW50IG9mZiwgaW50IGNjaCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFzc2VydCAhX2ZpbmlzaGVkOwotCi0gICAgICAgICAgICBpbnQgc3RhcnQgPSBvZmY7Ci0gICAgICAgICAgICBpbnQgZW5kID0gb2ZmICsgY2NoOwotCi0gICAgICAgICAgICBpZiAoX3N0cmlwV2hpdGVzcGFjZSAmJiBfbGFzdE5vbkF0dHIuZ2V0Q2NoQWZ0ZXIoKSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdoaWxlICggc3RhcnQgPCBlbmQgJiYgaXNXaGl0ZVNwYWNlKCBidWZbIHN0YXJ0IF0gKSApCi0gICAgICAgICAgICAgICAgICAgIHN0YXJ0Kys7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGludCBjY2hUZXh0ID0gZW5kIC0gc3RhcnQ7Ci0KLSAgICAgICAgICAgIGlmIChjY2hUZXh0ID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfbGFzdFNwbGF5ID0gX2xhc3ROb25BdHRyOwotICAgICAgICAgICAgICAgIF9sYXN0UG9zID0gX2xhc3ROb25BdHRyLmdldEVuZFBvcygpOwotCi0gICAgICAgICAgICAgICAgX3Jvb3QuX3RleHQuaW5zZXJ0KAotICAgICAgICAgICAgICAgICAgICBnZXRDcCggX2xhc3ROb25BdHRyICkgKyBfbGFzdE5vbkF0dHIuZ2V0Q2NoKCksCi0gICAgICAgICAgICAgICAgICAgIGJ1Ziwgc3RhcnQsIGNjaFRleHQgKTsKLQotICAgICAgICAgICAgICAgIF9sYXN0Tm9uQXR0ci5hZGp1c3RDY2hBZnRlciggY2NoVGV4dCApOwotICAgICAgICAgICAgICAgIGFkanVzdENjaCggX2xhc3ROb25BdHRyLCBjY2hUZXh0ICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHRleHQgKCBTdHJpbmcgdGV4dCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFzc2VydCAhX2ZpbmlzaGVkOwotCi0gICAgICAgICAgICBpbnQgc3RhcnQgPSAwOwotICAgICAgICAgICAgaW50IGVuZCA9IHRleHQubGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgIGlmIChfc3RyaXBXaGl0ZXNwYWNlICYmIF9sYXN0Tm9uQXR0ci5nZXRDY2hBZnRlcigpID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCBzdGFydCA8IGVuZCAmJiBpc1doaXRlU3BhY2UoIHRleHQuY2hhckF0KCBzdGFydCApICkgKQotICAgICAgICAgICAgICAgICAgICBzdGFydCsrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbnQgY2NoVGV4dCA9IGVuZCAtIHN0YXJ0OwotCi0gICAgICAgICAgICBpZiAoY2NoVGV4dCA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2xhc3RTcGxheSA9IF9sYXN0Tm9uQXR0cjsKLSAgICAgICAgICAgICAgICBfbGFzdFBvcyA9IF9sYXN0Tm9uQXR0ci5nZXRFbmRQb3MoKTsKLQotICAgICAgICAgICAgICAgIF9yb290Ll90ZXh0Lmluc2VydCgKLSAgICAgICAgICAgICAgICAgICAgZ2V0Q3AoIF9sYXN0Tm9uQXR0ciApICsgX2xhc3ROb25BdHRyLmdldENjaCgpLAotICAgICAgICAgICAgICAgICAgICB0ZXh0LCBzdGFydCwgY2NoVGV4dCApOwotCi0gICAgICAgICAgICAgICAgX2xhc3ROb25BdHRyLmFkanVzdENjaEFmdGVyKCBjY2hUZXh0ICk7Ci0gICAgICAgICAgICAgICAgYWRqdXN0Q2NoKCBfbGFzdE5vbkF0dHIsIGNjaFRleHQgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFubm90YXRlcyB0aGUgbGFzdCB0aGluZyBpbnNlcnRlZAotICAgICAgICB2b2lkIGFubm90YXRlICggWG1sQm9va21hcmsgeG1sQm9va21hcmsgKQotICAgICAgICB7Ci0gICAgICAgICAgICBuZXcgQW5ub3RhdGlvbiggX3Jvb3QsIHhtbEJvb2ttYXJrICkuCi0gICAgICAgICAgICAgICAgc2V0KCBfbGFzdFNwbGF5LCBfbGFzdFBvcyApOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBsaW5lTnVtYmVyQW5ub3RhdGlvbiAoIGludCBsaW5lLCBpbnQgY29sdW1uLCBpbnQgb2Zmc2V0ICkKLSAgICAgICAgewotICAgICAgICAgICAgYW5ub3RhdGUoIG5ldyBYbWxMaW5lTnVtYmVyKCBsaW5lLCBjb2x1bW4sIG9mZnNldCApICk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGxpbmVOdW1iZXJBbm5vdGF0aW9uICggWE1MU3RyZWFtUmVhZGVyIHhzciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGphdmF4LnhtbC5zdHJlYW0uTG9jYXRpb24gbG9jID0geHNyLmdldExvY2F0aW9uKCk7Ci0KLSAgICAgICAgICAgIGlmIChsb2MgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsaW5lTnVtYmVyQW5ub3RhdGlvbigKLSAgICAgICAgICAgICAgICAgICAgbG9jLmdldExpbmVOdW1iZXIoKSwgbG9jLmdldENvbHVtbk51bWJlcigpLCBsb2MuZ2V0Q2hhcmFjdGVyT2Zmc2V0KCkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBsaW5lTnVtYmVyQW5ub3RhdGlvbiAoIFhNTEV2ZW50IHhlICkKLSAgICAgICAgewotICAgICAgICAgICAgd2VibG9naWMueG1sLnN0cmVhbS5Mb2NhdGlvbiBsb2MgPSB4ZS5nZXRMb2NhdGlvbigpOwotCi0gICAgICAgICAgICBpZiAobG9jICE9IG51bGwpCi0gICAgICAgICAgICAgICAgbGluZU51bWJlckFubm90YXRpb24oIGxvYy5nZXRMaW5lTnVtYmVyKCksIGxvYy5nZXRDb2x1bW5OdW1iZXIoKSwgLTEgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgamF2ZWxpbkFubm90YXRpb24gKCBYbWxDdXJzb3IuWG1sQm9va21hcmsgamEgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoamEgIT0gbnVsbCkKLSAgICAgICAgICAgICAgIGFubm90YXRlKCBqYSApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBSb290ICAgICAgIF9yb290OwotICAgICAgICBwcml2YXRlIFNwbGF5ICAgICAgX2xhc3ROb25BdHRyOwotICAgICAgICBwcml2YXRlIENvbnRhaW5lciAgX2Zyb250aWVyOwotICAgICAgICBwcml2YXRlIFNwbGF5ICAgICAgX2xhc3RTcGxheTsKLSAgICAgICAgcHJpdmF0ZSBpbnQgICAgICAgIF9sYXN0UG9zOwotICAgICAgICBwcml2YXRlIGJvb2xlYW4gICAgX2ZpbmlzaGVkOwotICAgICAgICBwcml2YXRlIGJvb2xlYW4gICAgX2Rpc2NhcmREb2NFbGVtOwotICAgICAgICBwcml2YXRlIFFOYW1lICAgICAgX3JlcGxhY2VEb2NFbGVtOwotICAgICAgICBwcml2YXRlIGJvb2xlYW4gICAgX3N0cmlwV2hpdGVzcGFjZTsKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuICAgIF9zdHJpcENvbW1lbnRzOwotICAgICAgICBwcml2YXRlIGJvb2xlYW4gICAgX3N0cmlwUHJvY2luc3RzOwotICAgICAgICBwcml2YXRlIGJvb2xlYW4gICAgX2RvY0VsZW1EaXNjYXJkZWQ7Ci0gICAgICAgIHByaXZhdGUgTWFwICAgICAgICBfc3Vic3RpdHV0ZU5hbWVzcGFjZXM7Ci0gICAgICAgIHByaXZhdGUgTWFwICAgICAgICBfYWRkaXRpb25hbE5hbWVzcGFjZXM7Ci0gICAgICAgIHByaXZhdGUgUU5hbWVDYWNoZSBfcW5hbWVDYWNoZTsKLSAgICAgICAgcHJpdmF0ZSBYbWxPcHRpb25zIF9vcHRpb25zOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBsb2FkTm9kZUNoaWxkcmVuICggTm9kZSBuLCBMb2FkQ29udGV4dCBjb250ZXh0ICkKLSAgICB7Ci0gICAgICAgIGZvciAoIE5vZGUgYyA9IG4uZ2V0Rmlyc3RDaGlsZCgpIDsgYyAhPSBudWxsIDsgYyA9IGMuZ2V0TmV4dFNpYmxpbmcoKSApCi0gICAgICAgICAgICBsb2FkTm9kZSggYywgY29udGV4dCApOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBsb2FkTm9kZSAoIE5vZGUgbiwgTG9hZENvbnRleHQgY29udGV4dCApCi0gICAgewotICAgICAgICBzd2l0Y2ggKCBuLmdldE5vZGVUeXBlKCkgKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgTm9kZS5ET0NVTUVOVF9OT0RFIDoKLSAgICAgICAgY2FzZSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUgOgotICAgICAgICBjYXNlIE5vZGUuRU5USVRZX1JFRkVSRU5DRV9OT0RFIDoKLSAgICAgICAgewotICAgICAgICAgICAgbG9hZE5vZGVDaGlsZHJlbiggbiwgY29udGV4dCApOwotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFIDoKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC5iZWdpbiggbi5nZXRMb2NhbE5hbWUoKSwgbi5nZXROYW1lc3BhY2VVUkkoKSApOwotCi0gICAgICAgICAgICBOYW1lZE5vZGVNYXAgYXR0cnMgPSBuLmdldEF0dHJpYnV0ZXMoKTsKLQotICAgICAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IGF0dHJzLmdldExlbmd0aCgpIDsgaSsrICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBOb2RlIGEgPSBhdHRycy5pdGVtKCBpICk7Ci0KLSAgICAgICAgICAgICAgICBTdHJpbmcgdXJpID0gYS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbG9jYWwgPSBhLmdldExvY2FsTmFtZSgpOwotICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IGEuZ2V0Tm9kZVZhbHVlKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodXJpICE9IG51bGwgJiYgdXJpLmVxdWFscyggX3htbG5zVXJpICkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWwuZXF1YWxzKCAieG1sbnMiICkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnhtbG5zKCAiIiwgdmFsdWUgKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC54bWxucyggbG9jYWwsIHZhbHVlICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYXR0ciggbG9jYWwsIHVyaSwgdmFsdWUgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGxvYWROb2RlQ2hpbGRyZW4oIG4sIGNvbnRleHQgKTsKLQotICAgICAgICAgICAgY29udGV4dC5lbmQoKTsKLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERSA6Ci0gICAgICAgIGNhc2UgTm9kZS5DREFUQV9TRUNUSU9OX05PREUgOgotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LnRleHQoIG4uZ2V0Tm9kZVZhbHVlKCkgKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgTm9kZS5DT01NRU5UX05PREUgOgotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LmNvbW1lbnQoIG4uZ2V0Tm9kZVZhbHVlKCkgKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgTm9kZS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUgOgotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LnByb2NpbnN0KCBuLmdldE5vZGVOYW1lKCksIG4uZ2V0Tm9kZVZhbHVlKCkgKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgTm9kZS5ET0NVTUVOVF9UWVBFX05PREUgOgotICAgICAgICBjYXNlIE5vZGUuRU5USVRZX05PREUgOgotICAgICAgICBjYXNlIE5vZGUuTk9UQVRJT05fTk9ERSA6Ci0gICAgICAgIGNhc2UgTm9kZS5BVFRSSUJVVEVfTk9ERSA6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCAiVW5leHBlY3RlZCBub2RlIiApOwotICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgWG1sT2JqZWN0IGxvYWRYbWwgKCBOb2RlIG5vZGUsIFNjaGVtYVR5cGUgdHlwZSwgWG1sT3B0aW9ucyBvcHRpb25zICkKLSAgICAgICAgdGhyb3dzIFhtbEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgTG9hZENvbnRleHQgY29udGV4dCA9IG5ldyBMb2FkQ29udGV4dCggdGhpcywgb3B0aW9ucyApOwotCi0gICAgICAgIGxvYWROb2RlKCBub2RlLCBjb250ZXh0ICk7Ci0KLSAgICAgICAgYXNzb2NpYXRlU291cmNlTmFtZSggb3B0aW9ucyApOwotCi0gICAgICAgIHJldHVybiBhdXRvVHlwZWREb2N1bWVudCggdHlwZSwgb3B0aW9ucyApOwotICAgIH0KLQotICAgIHB1YmxpYyBYbWxPYmplY3QgbG9hZFhtbCAoCi0gICAgICAgIFhNTElucHV0U3RyZWFtIHhpcywgU2NoZW1hVHlwZSB0eXBlLCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgICAgICAgICAgdGhyb3dzIFhtbEV4Y2VwdGlvbiwgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGxvYWRYbWxJbnB1dFN0cmVhbSggeGlzLCBvcHRpb25zICk7Ci0KLSAgICAgICAgcmV0dXJuIGF1dG9UeXBlZERvY3VtZW50KCB0eXBlLCBvcHRpb25zICk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgbG9hZFhNTFN0cmVhbVJlYWRlciAoIFhNTFN0cmVhbVJlYWRlciB4c3IsIFhtbE9wdGlvbnMgb3B0aW9ucyApCi0gICAgICAgIHRocm93cyBYbWxFeGNlcHRpb24sIGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uCi0gICAgewotICAgICAgICBvcHRpb25zID0gWG1sT3B0aW9ucy5tYXNrTnVsbCggb3B0aW9ucyApOwotICAgICAgICAKLSAgICAgICAgTG9hZENvbnRleHQgY29udGV4dCA9IG5ldyBMb2FkQ29udGV4dCggdGhpcywgb3B0aW9ucyApOwotICAgICAgICAKLSAgICAgICAgYm9vbGVhbiBsaW5lTnVtcyA9IG9wdGlvbnMuaGFzT3B0aW9uKCBYbWxPcHRpb25zLkxPQURfTElORV9OVU1CRVJTICk7Ci0KLSAgICAgICAgZXZlbnRzOgotICAgICAgICBmb3IgKCBpbnQgZXZlbnRUeXBlID0geHNyLmdldEV2ZW50VHlwZSgpIDsgOyBldmVudFR5cGUgPSB4c3IubmV4dCgpICkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoICggZXZlbnRUeXBlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgWE1MU3RyZWFtUmVhZGVyLlNUQVJUX0RPQ1VNRU5UIDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfcHJvcHMuc2V0RW5jb2RpbmcoIHhzci5nZXRDaGFyYWN0ZXJFbmNvZGluZ1NjaGVtZSgpICk7Ci0gICAgICAgICAgICAgICAgX3Byb3BzLnNldFZlcnNpb24oIHhzci5nZXRWZXJzaW9uKCkgKTsKLSAgICAgICAgICAgICAgICBfc3RhbmRBbG9uZSA9IHhzci5pc1N0YW5kYWxvbmUoKTsKLQotICAgICAgICAgICAgICAgIGlmIChsaW5lTnVtcykKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5saW5lTnVtYmVyQW5ub3RhdGlvbiggeHNyICk7Ci0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBYTUxTdHJlYW1SZWFkZXIuRU5EX0RPQ1VNRU5UIDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobGluZU51bXMpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQubGluZU51bWJlckFubm90YXRpb24oIHhzciApOwotCi0gICAgICAgICAgICAgICAgYnJlYWsgZXZlbnRzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFhNTFN0cmVhbVJlYWRlci5TVEFSVF9FTEVNRU5UIDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmJlZ2luKCB4c3IuZ2V0TmFtZSgpICk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGxpbmVOdW1zKQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVOdW1iZXJBbm5vdGF0aW9uKCB4c3IgKTsKLQotICAgICAgICAgICAgICAgIGludCBuID0geHNyLmdldEF0dHJpYnV0ZUNvdW50KCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKCBpbnQgYSA9IDAgOyBhIDwgbiA7IGErKyApCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYXR0ciggeHNyLmdldEF0dHJpYnV0ZU5hbWUoIGEgKSwgeHNyLmdldEF0dHJpYnV0ZVZhbHVlKCBhICkgKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBuID0geHNyLmdldE5hbWVzcGFjZUNvdW50KCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKCBpbnQgYSA9IDAgOyBhIDwgbiA7IGErKyApCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQueG1sbnMoIHhzci5nZXROYW1lc3BhY2VQcmVmaXgoIGEgKSwgeHNyLmdldE5hbWVzcGFjZVVSSSggYSApICk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgWE1MU3RyZWFtUmVhZGVyLkVORF9FTEVNRU5UIDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LmVuZCgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChsaW5lTnVtcykKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5saW5lTnVtYmVyQW5ub3RhdGlvbiggeHNyICk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgWE1MU3RyZWFtUmVhZGVyLkNIQVJBQ1RFUlMgOgotICAgICAgICAgICAgY2FzZSBYTUxTdHJlYW1SZWFkZXIuQ0RBVEEgOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQudGV4dCggeHNyLmdldFRleHRDaGFyYWN0ZXJzKCksIHhzci5nZXRUZXh0U3RhcnQoKSwgeHNyLmdldFRleHRMZW5ndGgoKSApOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChsaW5lTnVtcykKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5saW5lTnVtYmVyQW5ub3RhdGlvbiggeHNyICk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgWE1MU3RyZWFtUmVhZGVyLkNPTU1FTlQgOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQuY29tbWVudCggeHNyLmdldFRleHQoKSApOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChsaW5lTnVtcykKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5saW5lTnVtYmVyQW5ub3RhdGlvbiggeHNyICk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgWE1MU3RyZWFtUmVhZGVyLlBST0NFU1NJTkdfSU5TVFJVQ1RJT04gOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQucHJvY2luc3QoIHhzci5nZXRQSVRhcmdldCgpLCB4c3IuZ2V0UElEYXRhKCkgKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAobGluZU51bXMpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQubGluZU51bWJlckFubm90YXRpb24oIHhzciApOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFhNTFN0cmVhbVJlYWRlci5BVFRSSUJVVEUgOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBuID0geHNyLmdldEF0dHJpYnV0ZUNvdW50KCk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKCBpbnQgYSA9IDAgOyBhIDwgbiA7IGErKyApCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYXR0ciggeHNyLmdldEF0dHJpYnV0ZU5hbWUoIGEgKSwgeHNyLmdldEF0dHJpYnV0ZVZhbHVlKCBhICkgKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBYTUxTdHJlYW1SZWFkZXIuTkFNRVNQQUNFIDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgbiA9IHhzci5nZXROYW1lc3BhY2VDb3VudCgpOwotCi0gICAgICAgICAgICAgICAgZm9yICggaW50IGEgPSAwIDsgYSA8IG4gOyBhKysgKQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnhtbG5zKCB4c3IuZ2V0TmFtZXNwYWNlUHJlZml4KCBhICksIHhzci5nZXROYW1lc3BhY2VVUkkoIGEgKSApOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFhNTFN0cmVhbVJlYWRlci5FTlRJVFlfUkVGRVJFTkNFIDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LnRleHQoIHhzci5nZXRUZXh0KCkgKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBYTUxTdHJlYW1SZWFkZXIuU1BBQ0UgOgotICAgICAgICAgICAgY2FzZSBYTUxTdHJlYW1SZWFkZXIuRFREIDoKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgZGVmYXVsdCA6Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oICJVbmhhbmRsZWQgeG1sIGV2ZW50IHR5cGU6ICIgKyBldmVudFR5cGUgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCF4c3IuaGFzTmV4dCgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjb250ZXh0LmZpbmlzaCgpOwotCi0gICAgICAgIGFzc29jaWF0ZVNvdXJjZU5hbWUoIG9wdGlvbnMgKTsKLQotICAgICAgICBhc3NlcnQgdmFsaWRhdGUoKTsKLSAgICAgICAgYXNzZXJ0IGlzTGVmdE9ubHkoKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgbG9hZFhtbElucHV0U3RyZWFtICggWE1MSW5wdXRTdHJlYW0geGlzLCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgICAgICB0aHJvd3Mgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24sIFhtbEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgb3B0aW9ucyA9IFhtbE9wdGlvbnMubWFza051bGwoIG9wdGlvbnMgKTsKLQotICAgICAgICBYTUxFdmVudCB4ID0geGlzLnBlZWsoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICh4ICE9IG51bGwgJiYgeC5nZXRUeXBlKCkgPT0gWE1MRXZlbnQuU1RBUlRfRUxFTUVOVCkKLSAgICAgICAgewotICAgICAgICAgICAgTWFwIG5zTWFwID0gKChTdGFydEVsZW1lbnQpIHgpLmdldE5hbWVzcGFjZU1hcCgpOwotCi0gICAgICAgICAgICBpZiAobnNNYXAgIT0gbnVsbCAmJiBuc01hcC5zaXplKCkgPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIE1hcCBuYW1lc3BhY2VzID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBuYW1lc3BhY2VzLnB1dEFsbCggbnNNYXAgKTsKLQotICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBuZXcgWG1sT3B0aW9ucyggb3B0aW9ucyApOwotCi0gICAgICAgICAgICAgICAgb3B0aW9ucy5wdXQoIFhtbE9wdGlvbnMuTE9BRF9BRERJVElPTkFMX05BTUVTUEFDRVMsIG5hbWVzcGFjZXMgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIExvYWRDb250ZXh0IGNvbnRleHQgPSBuZXcgTG9hZENvbnRleHQoIHRoaXMsIG9wdGlvbnMgKTsKLQotICAgICAgICBib29sZWFuIGxpbmVOdW1zID0gb3B0aW9ucy5oYXNPcHRpb24oIFhtbE9wdGlvbnMuTE9BRF9MSU5FX05VTUJFUlMgKTsKLQotICAgICAgICBldmVudHM6Ci0gICAgICAgIGZvciAoIFhNTEV2ZW50IHhlID0geGlzLm5leHQoKSA7IHhlICE9IG51bGwgOyB4ZSA9IHhpcy5uZXh0KCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKCB4ZS5nZXRUeXBlKCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgY2FzZSBYTUxFdmVudC5TVEFSVF9ET0NVTUVOVCA6Ci0gICAgICAgICAgICAgICAgLy8gQlVHQlVHIChlcmljdmFzKSAxMjI1OCAtIEZJWEVEIGJlbG93Ci0gICAgICAgICAgICAgICAgU3RhcnREb2N1bWVudCBkb2MgPSAoU3RhcnREb2N1bWVudCkgeGU7Ci0KLS8vICAgICAgICAgICAgICAgIGNvbnRleHQuZG9jdHlwZSgKLS8vICAgICAgICAgICAgICAgICAgICBkb2MuZ2V0bmFtZSgpLmdldExvY2FsTmFtZSgpLAotLy8gICAgICAgICAgICAgICAgICAgICIiLCBkb2MuZ2V0UHVibGljSWQoKQotCi0gICAgICAgICAgICAgICAgX3Byb3BzLnNldERvY3R5cGVTeXN0ZW1JZCggZG9jLmdldFN5c3RlbUlkKCkgKTsKLS8vICAgICAgICAgICAgICAgIF9wdWJsaWNJRCA9IGRvYy5nZXRQdWJsaWNJZCgpOwotICAgICAgICAgICAgICAgIF9wcm9wcy5zZXRFbmNvZGluZyggZG9jLmdldENoYXJhY3RlckVuY29kaW5nU2NoZW1lKCkgKTsKLSAgICAgICAgICAgICAgICBfcHJvcHMuc2V0VmVyc2lvbiggZG9jLmdldFZlcnNpb24oKSApOwotICAgICAgICAgICAgICAgIF9zdGFuZEFsb25lID0gZG9jLmlzU3RhbmRhbG9uZSgpOwotCi0gICAgICAgICAgICAgICAgaWYgKGxpbmVOdW1zKQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVOdW1iZXJBbm5vdGF0aW9uKCB4ZSApOwotCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgWE1MRXZlbnQuRU5EX0RPQ1VNRU5UIDoKLSAgICAgICAgICAgICAgICBpZiAobGluZU51bXMpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQubGluZU51bWJlckFubm90YXRpb24oIHhlICk7Ci0KLSAgICAgICAgICAgICAgICBicmVhayBldmVudHM7Ci0KLSAgICAgICAgICAgIGNhc2UgWE1MRXZlbnQuTlVMTF9FTEVNRU5UIDoKLSAgICAgICAgICAgICAgICBpZiAoIXhpcy5oYXNOZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrIGV2ZW50czsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBYTUxFdmVudC5TVEFSVF9FTEVNRU5UIDoKLSAgICAgICAgICAgICAgICBjb250ZXh0LmJlZ2luKCBYTUxOYW1lSGVscGVyLmdldFFOYW1lKCB4ZS5nZXROYW1lKCkgKSApOwotCi0gICAgICAgICAgICAgICAgaWYgKGxpbmVOdW1zKQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmxpbmVOdW1iZXJBbm5vdGF0aW9uKCB4ZSApOwotCi0gICAgICAgICAgICAgICAgZm9yICggQXR0cmlidXRlSXRlcmF0b3IgYWkgPSAoKFN0YXJ0RWxlbWVudCkgeGUpLmdldEF0dHJpYnV0ZXMoKQotICAgICAgICAgICAgICAgICAgICAgIDsgYWkuaGFzTmV4dCgpIDsgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlIGF0dHIgPSBhaS5uZXh0KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hdHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgWE1MTmFtZUhlbHBlci5nZXRRTmFtZSggYXR0ci5nZXROYW1lKCkgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIuZ2V0VmFsdWUoKSApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZvciAoIEF0dHJpYnV0ZUl0ZXJhdG9yIGFpID0gKChTdGFydEVsZW1lbnQpIHhlKS5nZXROYW1lc3BhY2VzKCkKLSAgICAgICAgICAgICAgICAgICAgICA7IGFpLmhhc05leHQoKSA7ICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSBhdHRyID0gYWkubmV4dCgpOwotCi0gICAgICAgICAgICAgICAgICAgIFhNTE5hbWUgbmFtZSA9IGF0dHIuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbG9jYWwgPSBuYW1lLmdldExvY2FsTmFtZSgpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lLmdldFByZWZpeCgpID09IG51bGwgJiYgbG9jYWwuZXF1YWxzKCAieG1sbnMiICkpCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCA9ICIiOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQueG1sbnMoIGxvY2FsLCBhdHRyLmdldFZhbHVlKCkgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBYTUxFdmVudC5FTkRfRUxFTUVOVCA6Ci0gICAgICAgICAgICAgICAgY29udGV4dC5lbmQoKTsKLQotICAgICAgICAgICAgICAgIGlmIChsaW5lTnVtcykKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5saW5lTnVtYmVyQW5ub3RhdGlvbiggeGUgKTsKLQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFhNTEV2ZW50LlNQQUNFIDoKLSAgICAgICAgICAgICAgICBpZiAoKChTcGFjZSkgeGUpLmlnbm9yYWJsZSgpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaAotCi0gICAgICAgICAgICBjYXNlIFhNTEV2ZW50LkNIQVJBQ1RFUl9EQVRBIDoKLSAgICAgICAgICAgICAgICBDaGFyYWN0ZXJEYXRhIGNkID0gKENoYXJhY3RlckRhdGEpIHhlOwotCi0gICAgICAgICAgICAgICAgaWYgKGNkLmhhc0NvbnRlbnQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQudGV4dCggY2QuZ2V0Q29udGVudCgpICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVOdW1zKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5saW5lTnVtYmVyQW5ub3RhdGlvbiggeGUgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBYTUxFdmVudC5DT01NRU5UIDoKLSAgICAgICAgICAgICAgICB3ZWJsb2dpYy54bWwuc3RyZWFtLkNvbW1lbnQgY29tbWVudCA9Ci0gICAgICAgICAgICAgICAgICAgICh3ZWJsb2dpYy54bWwuc3RyZWFtLkNvbW1lbnQpIHhlOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbW1lbnQuaGFzQ29udGVudCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jb21tZW50KCBjb21tZW50LmdldENvbnRlbnQoKSApOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChsaW5lTnVtcykKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubGluZU51bWJlckFubm90YXRpb24oIHhlICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgWE1MRXZlbnQuUFJPQ0VTU0lOR19JTlNUUlVDVElPTiA6Ci0gICAgICAgICAgICAgICAgUHJvY2Vzc2luZ0luc3RydWN0aW9uIHByb2NJbnN0ciA9IChQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pIHhlOwotCi0gICAgICAgICAgICAgICAgY29udGV4dC5wcm9jaW5zdCggcHJvY0luc3RyLmdldFRhcmdldCgpLCBwcm9jSW5zdHIuZ2V0RGF0YSgpICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobGluZU51bXMpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQubGluZU51bWJlckFubm90YXRpb24oIHhlICk7Ci0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgLy8gVGhlc2UgYXJlIGlnbm9yZWQKLSAgICAgICAgICAgIGNhc2UgWE1MRXZlbnQuRU5USVRZX1JFRkVSRU5DRSA6Ci0gICAgICAgICAgICBjYXNlIFhNTEV2ZW50LlNUQVJUX1BSRUZJWF9NQVBQSU5HIDoKLSAgICAgICAgICAgIGNhc2UgWE1MRXZlbnQuRU5EX1BSRUZJWF9NQVBQSU5HIDoKLSAgICAgICAgICAgIGNhc2UgWE1MRXZlbnQuQ0hBTkdFX1BSRUZJWF9NQVBQSU5HIDoKLSAgICAgICAgICAgIGNhc2UgWE1MRXZlbnQuWE1MX0VWRU5UIDoKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgZGVmYXVsdCA6Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICJVbmhhbmRsZWQgeG1sIGV2ZW50IHR5cGU6ICIgKyB4ZS5nZXRUeXBlQXNTdHJpbmcoKSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgY29udGV4dC5maW5pc2goKTsKLQotICAgICAgICBhc3NvY2lhdGVTb3VyY2VOYW1lKCBvcHRpb25zICk7Ci0KLSAgICAgICAgYXNzZXJ0IHZhbGlkYXRlKCk7Ci0gICAgICAgIGFzc2VydCBpc0xlZnRPbmx5KCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGR1bXAgKCBYbWxPYmplY3QgeCApCi0gICAgewotICAgICAgICBkdW1wKCB4LCBTeXN0ZW0ub3V0ICk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGR1bXAgKCBYbWxPYmplY3QgeCwgUHJpbnRTdHJlYW0gcHMgKQotICAgIHsKLSAgICAgICAgWG1sQ3Vyc29yIHhjID0geC5uZXdDdXJzb3IoKTsKLSAgICAgICAgUm9vdCByID0gKChDdXJzb3IpIHhjKS5nZXRSb290KCk7Ci0gICAgICAgIHIuZHVtcCggcHMsIG51bGwsICgoQ3Vyc29yKSB4YykuZ2V0U3BsYXkoKSwgZmFsc2UgKTsKLSAgICAgICAgeGMuZGlzcG9zZSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBkdW1wICggWG1sQ3Vyc29yIHhjICkKLSAgICB7Ci0gICAgICAgIGR1bXAoIHhjLCBTeXN0ZW0ub3V0ICk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGR1bXAgKCBYbWxDdXJzb3IgeGMsIFByaW50U3RyZWFtIHBzICkKLSAgICB7Ci0gICAgICAgIFJvb3QgciA9ICgoQ3Vyc29yKSB4YykuZ2V0Um9vdCgpOwotICAgICAgICByLmR1bXAoIHBzLCBudWxsLCAoKEN1cnNvcikgeGMpLmdldFNwbGF5KCksIGZhbHNlICk7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLwotICAgIC8vCi0KLSAgICBwcml2YXRlIHZvaWQgZHVtcFRleHQgKCBQcmludFN0cmVhbSBwcywgaW50IGNwLCBpbnQgY2NoLCBTcGxheSBzLCBpbnQgcCApCi0gICAgewotICAgICAgICBpZiAoY3AgPj0gMCAmJiBjcCArIGNjaCA8PSBfdGV4dC5sZW5ndGgoKSkKLSAgICAgICAgICAgIGR1bXBTdHJpbmcoIHBzLCBfdGV4dC5mZXRjaCggY3AsIGNjaCApLCBzLCBwICk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBzLnByaW50KCAiW3N0cmluZzogY3A9IiArIGNwICsgIiwgY2NoPSIgKyBjY2ggKyAiIF0iICk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGR1bXBUZXh0ICggUHJpbnRTdHJlYW0gcHMsIGludCBjcCwgaW50IGNjaCApCi0gICAgewotICAgICAgICBpZiAoY3AgPj0gMCAmJiBjcCArIGNjaCA8PSBfdGV4dC5sZW5ndGgoKSkKLSAgICAgICAgICAgIGR1bXBTdHJpbmcoIHBzLCBfdGV4dC5mZXRjaCggY3AsIGNjaCApLCBudWxsLCAwICk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBzLnByaW50KCAiW3N0cmluZzogY3A9IiArIGNwICsgIiwgY2NoPSIgKyBjY2ggKyAiIF0iICk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGR1bXBTdHJpbmcgKCBQcmludFN0cmVhbSBwcywgU3RyaW5nIHMgKQotICAgIHsKLSAgICAgICAgZHVtcFN0cmluZyggcHMsIHMsIG51bGwsIDAgKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgZHVtcEdvb2JlcnNJbmxpbmUgKCBQcmludFN0cmVhbSBwcywgU3BsYXkgcywgaW50IHAgKQotICAgIHsKLSAgICAgICAgZm9yICggR29vYmVyIGcgPSBzLmZpcnN0R29vYmVyKCkgOyBnICE9IG51bGwgOwotICAgICAgICAgICAgICBnID0gcy5uZXh0R29vYmVyKCBnICkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZy5nZXRLaW5kKCkgPT0gQ1VSU09SICYmIGcuZ2V0UG9zKCkgPT0gcCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBDdXJzb3JHb29iZXIgY2cgPSAoQ3Vyc29yR29vYmVyKSBnOwotCi0gICAgICAgICAgICAgICAgcHMucHJpbnQoICJbIiArICgoQ3Vyc29yR29vYmVyKSBnKS5nZXREZWJ1Z0lkKCkgKyAiXSIgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBkdW1wU3RyaW5nICggUHJpbnRTdHJlYW0gcHMsIFN0cmluZyBzdHIsIFNwbGF5IHMsIGludCBwICkKLSAgICB7Ci0gICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCBzdHIubGVuZ3RoKCkgOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocyAhPSBudWxsKQotICAgICAgICAgICAgICAgIGR1bXBHb29iZXJzSW5saW5lKCBwcywgcywgaSArIHAgKTsKLQotICAgICAgICAgICAgaWYgKGkgPT0gMzYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHMucHJpbnQoICIuLi4iICk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNoYXIgY2ggPSBzdHIuY2hhckF0KCBpICk7Ci0KLSAgICAgICAgICAgIGlmIChjaCA9PSAnXG4nKQotICAgICAgICAgICAgICAgIHBzLnByaW50KCAiXFxuIiApOwotICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT0gJ1xyJykKLSAgICAgICAgICAgICAgICBwcy5wcmludCggIlxcciIgKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNoID09ICdcdCcpCi0gICAgICAgICAgICAgICAgcHMucHJpbnQoICJcXHQiICk7Ci0gICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnXCInKQotICAgICAgICAgICAgICAgIHBzLnByaW50KCAiXFxcIiIgKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcy5wcmludCggY2ggKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBkdW1wR29vYmVycyAoIFByaW50U3RyZWFtIHBzLCBHb29iZXIgZyApCi0gICAgewotICAgICAgICBpZiAoZyA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChnLmdldEtpbmQoKSA9PSBBR0dSRUdBVEUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBzLnByaW50KCAiIHsiICk7Ci0gICAgICAgICAgICBkdW1wR29vYmVycyggcHMsIGcuX2dvb2JlcnMgKTsKLSAgICAgICAgICAgIHBzLnByaW50KCAifSIgKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwcy5wcmludCggIiAtICIgKyBnLmdldEtpbmROYW1lKCkgKyAiIHBvczogIiArIGcuZ2V0UG9zKCkgKTsKLQotICAgICAgICBpZiAoZy5nZXRLaW5kKCkgPT0gQ1VSU09SKQotICAgICAgICAgICAgcHMucHJpbnQoICIgaWQ6ICIgKyAoKEN1cnNvckdvb2JlcikgZykuZ2V0RGVidWdJZCgpICk7Ci0KLSAgICAgICAgaWYgKGcuX25leHQgIT0gZy5fcGFyZW50Ll9nb29iZXJzKQotICAgICAgICAgICAgZHVtcEdvb2JlcnMoIHBzLCBnLl9uZXh0ICk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGR1bXBTcGxheVRyZWUoIFNwbGF5IHMsIFByaW50U3RyZWFtIHBzICkKLSAgICB7Ci0gICAgICAgIGlmIChzID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHMuX3JpZ2h0U3BsYXkgIT0gbnVsbCkKLSAgICAgICAgICAgIGR1bXBTcGxheVRyZWUoIHMuX3JpZ2h0U3BsYXksIHBzICk7Ci0KLSAgICAgICAgZm9yICggU3BsYXkgdCA9IHMuX3BhcmVudFNwbGF5IDsgdCAhPSBudWxsIDsgdCA9IHQuX3BhcmVudFNwbGF5ICkKLSAgICAgICAgICAgIHBzLnByaW50KCAiICAiICk7Ci0KLSAgICAgICAgcHMucHJpbnQoICJbIiArIHMuZ2V0RGVidWdJZCgpICk7Ci0gICAgICAgIHBzLnByaW50KCAiIGM6IiArIHMuZ2V0Q2NoTGVmdCgpICsgIigiICsgcy5nZXRDY2goKSArICIpIik7Ci0gICAgICAgIHBzLnByaW50KCAiIGI6IiArIHMuZ2V0Q2RvY0JlZ2luTGVmdCgpICsgIigiICsgcy5nZXRDZG9jQmVnaW4oKSArICIpIik7Ci0KLSAgICAgICAgaWYgKHMuX3BhcmVudFNwbGF5ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBzLnByaW50KCAiIHA6IiArIHMuX3BhcmVudFNwbGF5LmdldERlYnVnSWQoKSApOwotICAgICAgICAgICAgcHMucHJpbnQoIHMuX3BhcmVudFNwbGF5Ll9sZWZ0U3BsYXkgPT0gcyA/ICJMIiA6ICJSIiApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHMucHJpbnRsbiggIl0iICk7Ci0KLSAgICAgICAgaWYgKHMuX2xlZnRTcGxheSAhPSBudWxsKQotICAgICAgICAgICAgZHVtcFNwbGF5VHJlZSggcy5fbGVmdFNwbGF5LCBwcyApOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBkdW1wICggWG1sQ3Vyc29yIGMsIGJvb2xlYW4gdmVyYm9zZSApCi0gICAgewotICAgICAgICAoKEN1cnNvcikgYykuZHVtcCggdmVyYm9zZSApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGR1bXAgKCApCi0gICAgewotICAgICAgICBkdW1wKCBTeXN0ZW0ub3V0LCBudWxsLCB0aGlzLCBmYWxzZSApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGR1bXAgKCBib29sZWFuIHZlcmJvc2UgKQotICAgIHsKLSAgICAgICAgZHVtcCggU3lzdGVtLm91dCwgbnVsbCwgdGhpcywgdmVyYm9zZSApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGR1bXAgKCBQcmludFN0cmVhbSBwcyApCi0gICAgewotICAgICAgICBkdW1wKCBwcywgbnVsbCwgdGhpcywgZmFsc2UgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBkdW1wICggUHJpbnRTdHJlYW0gcHMsIFN0cmluZyBtc2csIE9iamVjdCBzcmMsIGJvb2xlYW4gdmVyYm9zZSApCi0gICAgewotICAgICAgICAvLyBVbmRlciBJbnRlbGxpSiwgaWYgeW91IGNhbGwgYSBmdW5jdGlvbiBmcm9tIHRoZSBleHByZXNzaW9uCi0gICAgICAgIC8vIGV2YWx1YXRvciBhbmQgaXQgcHJvZHVjZXMgdG9vIG11Y2ggb3V0cHV0LCBJbnRlbGxpSiB3aWxsIG5vdAotICAgICAgICAvLyBzaG93IHlvdSB0aGUgb3V0cHV0IG9mIHRoZSBmdW5jdGlvbi4gIFNvLCBJIGR1bXAgdG8gYSBmaWxlCi0gICAgICAgIC8vIGhlcmUgYXMgd2VsbCBhbmQgdGhlIGdpdmVuIHByaW50IHN0cmVhbSEKLQotICAgICAgICBGaWxlIGYgPSBuZXcgRmlsZSggImM6XFwiICk7Ci0KLSAgICAgICAgaWYgKGYuZXhpc3RzKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGYgPSBuZXcgRmlsZSggZiwgInhiZWFuLmRtcCIgKTsKLQotICAgICAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gbnVsbDsKLSAgICAgICAgICAgIFByaW50U3RyZWFtIHBzMiA9IG51bGw7Ci0KLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oIGYgKTsKLSAgICAgICAgICAgICAgICBwczIgPSBuZXcgUHJpbnRTdHJlYW0oIG9zICk7Ci0KLSAgICAgICAgICAgICAgICBkb0R1bXAoIHBzMiwgbXNnLCBzcmMsIHZlcmJvc2UgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoICggVGhyb3dhYmxlIHQgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChwczIgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHBzMi5wcmludGxuKCAiRXhjZXB0aW9uIGR1cmluZyBkdW1wLiIgKTsKLSAgICAgICAgICAgICAgICAgICAgdC5wcmludFN0YWNrVHJhY2UoIHBzMiApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG9zICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHJ5IHsgb3MuY2xvc2UoKTsgfSBjYXRjaCAoIEV4Y2VwdGlvbiBlICkgeyB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgZG9EdW1wKCBwcywgbXNnLCBzcmMsIHZlcmJvc2UgKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoIFRocm93YWJsZSB0ICkKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiRXhjZXB0aW9uIGR1cmluZyBkdW1wLiIgKTsKLSAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCBTeXN0ZW0ub3V0ICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgY2xhc3MgRHVtcE5zTWFuYWdlciBpbXBsZW1lbnRzIE5hbWVzcGFjZU1hbmFnZXIKLSAgICB7Ci0gICAgICAgIER1bXBOc01hbmFnZXIgKCBQcmludFN0cmVhbSBwcyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRoaXMucHMgPSBwczsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgZmluZF9wcmVmaXhfZm9yX25zdXJpICggU3RyaW5nIHVyaSwgU3RyaW5nIHN1Z2dlc3Rpb24gKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gImRlYnVnX3ByZWZpeF8iICsgaSsrOwotCi0gICAgICAgICAgICBwcy5wcmludCggIiBbZmluZF9wcmVmaXhfZm9yX25zdXJpOiAiICk7Ci0gICAgICAgICAgICBwcy5wcmludCggIlwiIiArIHVyaSArICJcIiAoIiArIHN1Z2dlc3Rpb24gKyAiKSAtPiAiICsgcHJlZml4ICk7Ci0gICAgICAgICAgICBwcy5wcmludCggIl0iICk7Ci0KLSAgICAgICAgICAgIHJldHVybiBwcmVmaXg7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZUZvclByZWZpeCAoIFN0cmluZyBwcmVmaXggKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocHJlZml4ICE9IG51bGwgJiYgcHJlZml4LmVxdWFscyggInhtbCIgKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gX3htbDE5OThVcmk7Ci0KLSAgICAgICAgICAgIFN0cmluZyB1cmkgPSAiZGVidWdfbnNfIiArIGkrKzsKLQotICAgICAgICAgICAgcHMucHJpbnQoICIgW2xvb2t1cF9uc3VyaV9mb3JfcHJlZml4OiAiICk7Ci0gICAgICAgICAgICBwcy5wcmludCggcHJlZml4ICsgIiAtPiBcIiIgKyB1cmkgKyAiXCIiICk7Ci0gICAgICAgICAgICBwcy5wcmludCggIl0iICk7Ci0KLSAgICAgICAgICAgIHJldHVybiB1cmk7Ci0gICAgICAgIH0KLQotICAgICAgICBQcmludFN0cmVhbSBwczsKLQotICAgICAgICBwcml2YXRlIGludCBpID0gMTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBkb0R1bXAgKAotICAgICAgICBQcmludFN0cmVhbSBwcywgU3RyaW5nIG1zZywgT2JqZWN0IHNyYywgYm9vbGVhbiB2ZXJib3NlICkKLSAgICB7Ci0gICAgICAgIGlmICghX2Fzc2VydEVuYWJsZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBzLnByaW50bG4oICJObyBkdW1wIHByb2R1Y2VkIChhc3NlcnQgbmVlZHMgdG8gYmUgZW5hYmxlZCkiICk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBOYW1lc3BhY2VNYW5hZ2VyIG5zbSA9IG5ldyBEdW1wTnNNYW5hZ2VyKCBwcyApOwotCi0gICAgICAgIGlmIChtc2cgIT0gbnVsbCkKLSAgICAgICAgICAgIHBzLnByaW50bG4oIG1zZyApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwcy5wcmludGxuKCAiRHVtcDoiICk7Ci0KLSAgICAgICAgaWYgKHNyYyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoc3JjIGluc3RhbmNlb2YgQ3Vyc29yKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBzLnByaW50bG4oCi0gICAgICAgICAgICAgICAgICAgICIgIGZyb20gY3Vyc29yICIgKyAoKEN1cnNvckdvb2JlcikoKEN1cnNvcikgc3JjKS5fZ29vYmVyKS5nZXREZWJ1Z0lkKCkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHNyYyBpbnN0YW5jZW9mIFNwbGF5KQotICAgICAgICAgICAgICAgIHBzLnByaW50bG4oICIgIGZyb20gc3BsYXkgIiArICgoU3BsYXkpIHNyYykuZ2V0RGVidWdJZCgpICk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcHMucHJpbnRsbiggIiAgZnJvbSBzcmMgIiArIHNyYyApOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGRlcHRoID0gMDsKLQotICAgICAgICBmb3IgKCBTcGxheSBzID0gX2RvYyA7IHMgIT0gbnVsbCA7IHMgPSBzLm5leHRTcGxheSgpICkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGtpbmQgPSBzLmdldEtpbmQoKTsKLQotICAgICAgICAgICAgU3RyaW5nIGlkcyA9ICIiICsgcy5nZXREZWJ1Z0lkKCk7Ci0gICAgICAgICAgICBpZHMgPSAiICAgICAgICAiLnN1YnN0cmluZyggMCwgNiAtIGlkcy5sZW5ndGgoKSApICsgaWRzOwotICAgICAgICAgICAgcHMucHJpbnQoIGlkcyArICI6ICIgKTsKLQotICAgICAgICAgICAgaWYgKGtpbmQgPT0gRU5EKQotICAgICAgICAgICAgICAgIGRlcHRoLS07Ci0KLSAgICAgICAgICAgIGlmICghcy5pc1Jvb3QoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgZGVwdGggOyBpKysgKQotICAgICAgICAgICAgICAgICAgICBwcy5wcmludCggIiAgIiApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkdW1wR29vYmVyc0lubGluZSggcHMsIHMsIDAgKTsKLQotICAgICAgICAgICAgc3dpdGNoICgga2luZCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIERPQyA6Ci0gICAgICAgICAgICAgICAgcHMucHJpbnQoICJET0MiICk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgQkVHSU4gOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEJlZ2luIGIgPSAoQmVnaW4pIHM7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWIuaXNMZWFmKCkpCi0gICAgICAgICAgICAgICAgICAgIGRlcHRoKys7Ci0KLSAgICAgICAgICAgICAgICBwcy5wcmludCggIjwiICk7Ci0gICAgICAgICAgICAgICAgcHMucHJpbnQoIHMuZ2V0TmFtZSgpLnRvU3RyaW5nKCkgKTsKLSAgICAgICAgICAgICAgICBwcy5wcmludCggIj4iICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoYi5pc0xlYWYoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiLmdldENjaFZhbHVlKCkgPiAwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcy5wcmludCggIlwiIiApOwotICAgICAgICAgICAgICAgICAgICAgICAgZHVtcFRleHQoIHBzLCBzLmdldENwU2xvdygpLCBiLmdldENjaFZhbHVlKCksIHMsIDEgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBzLnByaW50KCAiXCIiICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBkdW1wR29vYmVyc0lubGluZSggcHMsIHMsIHMuZ2V0UG9zTGVhZkVuZCgpICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcHMucHJpbnQoICI8LyIgKTsKLSAgICAgICAgICAgICAgICAgICAgcHMucHJpbnQoIHMuZ2V0TmFtZSgpLmdldExvY2FsUGFydCgpICk7Ci0gICAgICAgICAgICAgICAgICAgIHBzLnByaW50KCAiLz4iICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgQVRUUiA6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHMuaXNYbWxucygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcHMucHJpbnQoICIjeG1sbnM6IiApOwotICAgICAgICAgICAgICAgICAgICBwcy5wcmludCggcy5nZXROYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgKTsKLSAgICAgICAgICAgICAgICAgICAgcHMucHJpbnQoICI9XCIiICk7Ci0gICAgICAgICAgICAgICAgICAgIHBzLnByaW50KCBzLmdldE5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKSApOwotICAgICAgICAgICAgICAgICAgICBwcy5wcmludCggIlwiIiApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBwcy5wcmludCggIkAiICk7Ci0gICAgICAgICAgICAgICAgICAgIHBzLnByaW50KCBzLmdldE5hbWUoKSApOwotICAgICAgICAgICAgICAgICAgICBwcy5wcmludCggIj1cIiIgKTsKLSAgICAgICAgICAgICAgICAgICAgZHVtcFRleHQoIHBzLCBzLmdldENwU2xvdygpLCBzLmdldENjaFZhbHVlKCkgKTsKLSAgICAgICAgICAgICAgICAgICAgcHMucHJpbnQoICJcIiIgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSBFTkQgOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVuZCBlcyA9IChFbmQpIHM7Ci0gICAgICAgICAgICAgICAgQmVnaW4gYiA9IGVzLl9iZWdpbjsKLQotICAgICAgICAgICAgICAgIHBzLnByaW50KCAiPC8iICk7Ci0gICAgICAgICAgICAgICAgcHMucHJpbnQoIGIuZ2V0TmFtZSgpLmdldExvY2FsUGFydCgpICk7Ci0gICAgICAgICAgICAgICAgcHMucHJpbnQoICIvPiIgKTsKLQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIENPTU1FTlQgOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzLmlzRnJhZ21lbnQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHBzLnByaW50KCAiRlJBRyIgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcHMucHJpbnQoICI8IS0tIiApOwotICAgICAgICAgICAgICAgICAgICBkdW1wVGV4dCggcHMsIHMuZ2V0Q3BTbG93KCksIHMuZ2V0Q2NoVmFsdWUoKSApOwotICAgICAgICAgICAgICAgICAgICBwcy5wcmludCggIi0tPiIgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgUFJPQ0lOU1QgOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBzLnByaW50KCAiPD8iICk7Ci0gICAgICAgICAgICAgICAgcHMucHJpbnQoIHMuZ2V0TG9jYWwoKSApOwotICAgICAgICAgICAgICAgIHBzLnByaW50KCAiICIgKTsKLSAgICAgICAgICAgICAgICBkdW1wVGV4dCggcHMsIHMuZ2V0Q3BTbG93KCksIHMuZ2V0Q2NoVmFsdWUoKSApOwotICAgICAgICAgICAgICAgIHBzLnByaW50KCAiPz4iICk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgUk9PVCA6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHMucHJpbnQoICJST09UIiApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCAiVW5rbm93biBzcGxheSBraW5kIiApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocy5nZXRDY2hBZnRlcigpID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcy5wcmludCggIlwiIiApOwotCi0gICAgICAgICAgICAgICAgZHVtcFRleHQoCi0gICAgICAgICAgICAgICAgICAgIHBzLCBzLmdldENwU2xvdygpICsgcy5nZXRDY2hWYWx1ZSgpLCBzLmdldENjaEFmdGVyKCksCi0gICAgICAgICAgICAgICAgICAgIHMsIHMuZ2V0UG9zQWZ0ZXIoKSApOwotCi0gICAgICAgICAgICAgICAgcHMucHJpbnQoICJcIiIgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZHVtcEdvb2JlcnNJbmxpbmUoIHBzLCBzLCBzLmdldEVuZFBvcygpICk7Ci0KLSAgICAgICAgICAgIGlmIChzLmlzSW52YWxpZCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHMucGVla1R5cGUoKS5idWlsZF90ZXh0KCBuc20gKTsKLQotICAgICAgICAgICAgICAgIHBzLnByaW50KCAiIFtpbnZhbGlkOiIgKTsKLSAgICAgICAgICAgICAgICBwcy5wcmludCggIlwiIiApOwotICAgICAgICAgICAgICAgIGR1bXBTdHJpbmcoIHBzLCB2YWx1ZSApOwotICAgICAgICAgICAgICAgIHBzLnByaW50KCAiXCIiICk7Ci0gICAgICAgICAgICAgICAgcHMucHJpbnQoICJdIiApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkdW1wR29vYmVycyggcHMsIHMuX2dvb2JlcnMgKTsKLQotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoICgga2luZCApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgQkVHSU4gOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQmVnaW4gYiA9IChCZWdpbikgczsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoYi5nZXRGaW5pc2goKSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcy5wcmludCggIiBbZW5kOiAiICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcy5wcmludCggYi5nZXRGaW5pc2goKS5nZXREZWJ1Z0lkKCkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBzLnByaW50KCAiXSIgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChiLmdldENvbnRhaW5lcigpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBzLnByaW50KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgW2NvbnRhaW5lcjogIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIuZ2V0Q29udGFpbmVyKCkuZ2V0RGVidWdJZCgpICsgIl0iICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjYXNlIEVORCA6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBFbmQgZXMgPSAoRW5kKSBzOwotICAgICAgICAgICAgICAgICAgICBCZWdpbiBiID0gZXMuX2JlZ2luOwotCi0gICAgICAgICAgICAgICAgICAgIHBzLnByaW50KCAiIFtiZWdpbjogIiArIGIuZ2V0RGVidWdJZCgpICsgIl0iICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHMucHJpbnRsbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHMucHJpbnRsbigpOwotCi0gICAgICAgIGlmIChnZXRDY2hMZWZ0KCkgPiBfdGV4dC5sZW5ndGgoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcHMucHJpbnRsbigKLSAgICAgICAgICAgICAgICAiVGV4dCBidWZmZXIgaGFzIHRvbyBmZXcgY2hhcmFjdGVycyAoIiArCi0gICAgICAgICAgICAgICAgICAgIChnZXRDY2hMZWZ0KCkgLSBfdGV4dC5sZW5ndGgoKSkgKyAiKSIgKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChnZXRDY2hMZWZ0KCkgPCBfdGV4dC5sZW5ndGgoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcHMucHJpbnRsbigKLSAgICAgICAgICAgICAgICAiVGV4dCBidWZmZXIgaGFzIHRvbyBtYW55IGNoYXJhY3RlcnMgKCIgKwotICAgICAgICAgICAgICAgICAgICAoX3RleHQubGVuZ3RoKCkgLSBnZXRDY2hMZWZ0KCkpICsgIik6ICIgKTsKLQotICAgICAgICAgICAgZHVtcFN0cmluZygKLSAgICAgICAgICAgICAgICBwcywKLSAgICAgICAgICAgICAgICBfdGV4dC5mZXRjaCggZ2V0Q2NoTGVmdCgpLCBfdGV4dC5sZW5ndGgoKSAtIGdldENjaExlZnQoKSApICk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgewotICAgICAgICAgICAgcHMucHJpbnRsbiggIlNwbGF5IHRyZWU6IiApOwotCi0gICAgICAgICAgICBwcy5wcmludGxuKCAiICBpc0xlZnRPbmx5OiAiICsgX2xlZnRPbmx5ICk7Ci0gICAgICAgICAgICBwcy5wcmludGxuKCAiICB2ZXJzaW9uOiAiICsgZ2V0VmVyc2lvbigpICk7Ci0gICAgICAgICAgICBwcy5wcmludGxuKCAiICBmaXJzdDogIiArIF9kb2MuZ2V0RGVidWdJZCgpICk7Ci0KLSAgICAgICAgICAgIHBzLnByaW50bG4oKTsKLSAgICAgICAgICAgIGR1bXBTcGxheVRyZWUoIHRoaXMsIHBzICk7Ci0gICAgICAgICAgICBwcy5wcmludGxuKCk7Ci0gICAgICAgICAgICBwcy5wcmludGxuKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcy5wcmludGxuKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW5zZXJ0IGEgc3BsYXkgKG9yIHNwbGF5cykgaW50byB0aGUgdHJlZS4gIFRoaXMgaXMgYSBsb3cgbGV2ZWwKLSAgICAgKiBvcGVyYXRpb24sIGFuZCBvcGVyYXRlcyBvbmx5IG9uIHRoZSBzcGxheSBhc3BlY3Qgb2YgdGhlIHRyZWUuCi0gICAgICogQW55IGludmFsaWRhdGlvbiBtYWludGVuYW5jZSBtdXN0IGJlIGhhbmRsZWQgYnkgY2FsbGVycy4KLSAgICAgKi8KLQotICAgIHZvaWQgaW5zZXJ0U3BsYXkgKCBTcGxheSBzLCBTcGxheSBhICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCBzICE9IG51bGw7Ci0gICAgICAgIGFzc2VydCAhcy5pc1Jvb3QoKTsKLSAgICAgICAgYXNzZXJ0IGEgIT0gbnVsbDsKLSAgICAgICAgYXNzZXJ0IFJvb3QuZHYgPiAwIHx8IHZhbGlkYXRlU3BsYXlUcmVlKCk7Ci0gICAgICAgIGFzc2VydCAhYS5pc1Jvb3QoKTsKLSAgICAgICAgYXNzZXJ0IFJvb3QuZHYgPiAwIHx8IGEuZ2V0Um9vdFNsb3coKSA9PSB0aGlzOwotICAgICAgICBhc3NlcnQgcy5fcGFyZW50U3BsYXkgPT0gbnVsbDsKLSAgICAgICAgYXNzZXJ0IHMuX3JpZ2h0U3BsYXkgPT0gbnVsbDsKLSAgICAgICAgYXNzZXJ0IHMuX2xlZnRTcGxheSAhPSBudWxsIHx8IHMuZ2V0Q2NoTGVmdCgpID09IDA7Ci0gICAgICAgIGFzc2VydCBzLl9sZWZ0U3BsYXkgIT0gbnVsbCB8fCBzLmdldENkb2NCZWdpbkxlZnQoKSA9PSAwOwotCi0gICAgICAgIGludCBjY2ggPSBzLmdldENjaCgpOwotICAgICAgICBpbnQgY2JlZ2luID0gcy5nZXRDZG9jQmVnaW4oKTsKLQotICAgICAgICBpZiAocy5fbGVmdFNwbGF5ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNjaCArPSBzLmdldENjaExlZnQoKTsKLSAgICAgICAgICAgIGNiZWdpbiArPSBzLmdldENkb2NCZWdpbkxlZnQoKTsKLSAgICAgICAgICAgIF9sZWZ0T25seSA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKF9sZWZ0T25seSAmJiBhID09IF9sZWZ0U3BsYXkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHMuX2xlZnRTcGxheSA9IF9sZWZ0U3BsYXk7Ci0gICAgICAgICAgICBzLl9wYXJlbnRTcGxheSA9IHRoaXM7Ci0KLSAgICAgICAgICAgIGFzc2VydCBzLmdldENjaExlZnQoKSA9PSAwOwotICAgICAgICAgICAgcy5hZGp1c3RDY2hMZWZ0KAotICAgICAgICAgICAgICAgIF9sZWZ0U3BsYXkuZ2V0Q2NoTGVmdCgpICsgX2xlZnRTcGxheS5nZXRDY2goKSApOwotCi0gICAgICAgICAgICBhc3NlcnQgcy5nZXRDZG9jQmVnaW5MZWZ0KCkgPT0gMDsKLSAgICAgICAgICAgIHMuYWRqdXN0Q2RvY0JlZ2luTGVmdCgKLSAgICAgICAgICAgICAgICBfbGVmdFNwbGF5LmdldENkb2NCZWdpbkxlZnQoKSArIF9sZWZ0U3BsYXkuZ2V0Q2RvY0JlZ2luKCkgKTsKLQotICAgICAgICAgICAgX2xlZnRTcGxheS5fcGFyZW50U3BsYXkgPSBzOwotICAgICAgICAgICAgX2xlZnRTcGxheSA9IHM7Ci0KLSAgICAgICAgICAgIGFkanVzdENjaExlZnQoIGNjaCApOwotICAgICAgICAgICAgYWRqdXN0Q2RvY0JlZ2luTGVmdCggY2JlZ2luICk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoX2xlZnRPbmx5ICYmIGNjaCA9PSAwICYmIGNiZWdpbiA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gSWYgdGhlIHNwbGF5IHRvIGluc2VydCBoYXMgbm8gY2NoIG9yIGNiZWdpbiwgdGhlbiB3aGVuCi0gICAgICAgICAgICAvLyB0aGUgdHJlZSBpcyBsZWZ0IG9ubHkgY2hpbGRyZW4sIEkgbmVlZCBub3Qgc3BsYXkuCi0gICAgICAgICAgICAvLwotCi0gICAgICAgICAgICBzLl9wYXJlbnRTcGxheSA9IGEuX3BhcmVudFNwbGF5OwotICAgICAgICAgICAgcy5fbGVmdFNwbGF5ID0gYTsKLSAgICAgICAgICAgIGEuX3BhcmVudFNwbGF5ID0gczsKLSAgICAgICAgICAgIHMuX3BhcmVudFNwbGF5Ll9sZWZ0U3BsYXkgPSBzOwotCi0gICAgICAgICAgICBzLmFkanVzdENjaExlZnQoIGEuZ2V0Q2NoTGVmdCgpICsgYS5nZXRDY2goKSApOwotCi0gICAgICAgICAgICBzLmFkanVzdENkb2NCZWdpbkxlZnQoCi0gICAgICAgICAgICAgICAgYS5nZXRDZG9jQmVnaW5MZWZ0KCkgKyBhLmdldENkb2NCZWdpbigpICk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBTcGxheSBwOwotCi0gICAgICAgICAgICBpZiAoYS5fcmlnaHRTcGxheSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIChwID0gYSkuX3JpZ2h0U3BsYXkgPSBzOwotICAgICAgICAgICAgICAgIF9sZWZ0T25seSA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoIHAgPSBhLl9yaWdodFNwbGF5IDsgcC5fbGVmdFNwbGF5ICE9IG51bGwgOyApCi0gICAgICAgICAgICAgICAgICAgIHAgPSBwLl9sZWZ0U3BsYXk7Ci0KLSAgICAgICAgICAgICAgICBwLl9sZWZ0U3BsYXkgPSBzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzLl9wYXJlbnRTcGxheSA9IHA7Ci0KLSAgICAgICAgICAgIGZvciAoIHAgPSBzIDsgOyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3BsYXkgdCA9IHAuX3BhcmVudFNwbGF5OwotCi0gICAgICAgICAgICAgICAgaWYgKHQgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBpZiAodC5fbGVmdFNwbGF5ID09IHApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0LmFkanVzdENjaExlZnQoIGNjaCApOwotICAgICAgICAgICAgICAgICAgICB0LmFkanVzdENkb2NCZWdpbkxlZnQoIGNiZWdpbiApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHAgPSB0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzLnNwbGF5KCB0aGlzLCB0aGlzICk7Ci0gICAgICAgIH0KLQotICAgICAgICBhc3NlcnQgdmFsaWRhdGVTcGxheVRyZWUoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTcGVjaWFsIGluc2VydCB0byBpbnNlcnQgYSBzaW5nbGUgc3BsYXkgaW50byBhIGxlZnRvbmx5IHRyZWUgd2l0aG91dAotICAgICAqIGNhdXNpbmcgdGhlIHRyZWUgdG8gZ28gbm9uIGxlZnQgb25seS4gIEJlY2F1c2UgdGhpcyBkb2VzIG5vdCBzcGxheSwKLSAgICAgKiBkb2luZyB0aGlzIHRvbyBtYW55IHRpbWVzIGNhbiBiZSB2ZXJ5IGluZWZmaWNpZW50LgotICAgICAqLwotICAgIAotICAgIHZvaWQgaW5zZXJ0U2luZ2xlU3BsYXlTYW5zU3BsYXlJbkxlZnRPbmx5VHJlZSAoIFNwbGF5IHMsIFNwbGF5IGEgKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IF9sZWZ0T25seTsKLSAgICAgICAgYXNzZXJ0IHMuX3JpZ2h0U3BsYXkgPT0gbnVsbDsKLSAgICAgICAgYXNzZXJ0IHMuX2xlZnRTcGxheSA9PSBudWxsOwotCi0gICAgICAgIHMuX2xlZnRTcGxheSA9IGE7Ci0gICAgICAgIHMuX3BhcmVudFNwbGF5ID0gYS5fcGFyZW50U3BsYXk7Ci0gICAgICAgIGEuX3BhcmVudFNwbGF5Ll9sZWZ0U3BsYXkgPSBzOwotICAgICAgICBhLl9wYXJlbnRTcGxheSA9IHM7Ci0KLSAgICAgICAgcy5hZGp1c3RDY2hMZWZ0KCBhLmdldENjaExlZnQoKSArIGEuZ2V0Q2NoKCkgKTsKLSAgICAgICAgcy5hZGp1c3RDZG9jQmVnaW5MZWZ0KCBhLmdldENkb2NCZWdpbkxlZnQoKSArIGEuZ2V0Q2RvY0JlZ2luKCkgKTsKLSAgICAgICAgCi0gICAgICAgIGludCBjY2ggPSBzLmdldENjaCgpOwotICAgICAgICBpbnQgY2JlZ2luID0gcy5nZXRDZG9jQmVnaW4oKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoIFNwbGF5IHAgPSBzLl9wYXJlbnRTcGxheSA7IHAgIT0gbnVsbCA7IHAgPSBwLl9wYXJlbnRTcGxheSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHAuYWRqdXN0Q2NoTGVmdCggY2NoICk7Ci0gICAgICAgICAgICBwLmFkanVzdENkb2NCZWdpbkxlZnQoIGNiZWdpbiApOwotICAgICAgICB9Ci0gICAgfQotICAgICAgICAgICAgCi0gICAgLyoqCi0gICAgICogUmVtb3ZlIFsgZmlyc3QsIGxhc3QgKSBzcGxheXMgZnJvbSB0b3RhbCBzZXF1ZW5jZToKLSAgICAgKgotICAgICAqICAgICBBIC0gZmlyc3QgLSBCIC0geCAtIGxhc3QgLSBDCi0gICAgICoKLSAgICAgKiB3aGVyZSBmaXJzdCwgbGFzdCBhbmQgeCBhcmUgaW5kaXZpZHVhbCBzcGxheXMgYW5kIEEsIEIgYW5kIEMgYXJlCi0gICAgICogbXVsdGlwbGUsIGludGVydmVuaW5nIHNwbGF5cy4gIFJldHVybiB0aGUgcmVzdWx0IHdpdGggeCBhdCB0aGUgdG9wCi0gICAgICogYW5kIGZpcnN0IGhpcyBsZWZ0IGNoaWxkLiAgVGhpcyBhbGxvd3MgeCB0byBoYXZlIHRoZSBzcGxheQotICAgICAqIGNoYXJhY3RlcmlzdGljcyBmb3IgdGhlIHdob2xlIHJlbW92ZWQgdHJlZS4KLSAgICAgKi8KLQotICAgIFNwbGF5IHJlbW92ZVNwbGF5cyAoIFNwbGF5IGZpcnN0LCBTcGxheSBsYXN0ICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCB2YWxpZGF0ZVNwbGF5VHJlZSgpOwotICAgICAgICBhc3NlcnQgZmlyc3QgIT0gbGFzdDs7Ci0gICAgICAgIGFzc2VydCAhZmlyc3QuaXNSb290KCk7Ci0gICAgICAgIGFzc2VydCAhZmlyc3QuaXNEb2MoKTsKLSAgICAgICAgYXNzZXJ0IFJvb3QuZHYgPiAwIHx8IGZpcnN0LmdldFJvb3RTbG93KCkgPT0gdGhpczsKLSAgICAgICAgYXNzZXJ0IFJvb3QuZHYgPiAwIHx8IGxhc3QuZ2V0Um9vdFNsb3coKSA9PSB0aGlzOwotICAgICAgICBhc3NlcnQgUm9vdC5kdiA+IDAgfHwgZmlyc3QuY29tcGFyZVNsb3coIGxhc3QgKSA9PSAtMTsKLSAgICAgICAgYXNzZXJ0ICFsYXN0LmlzUm9vdCgpIHx8IGxhc3QgPT0gdGhpczsKLQotICAgICAgICBTcGxheSB4ID0gbGFzdC5wcmV2U3BsYXkoKTsKLQotICAgICAgICBpZiAoeCA9PSBmaXJzdCkKLSAgICAgICAgICAgIHJldHVybiB4LnJlbW92ZVNwbGF5KCB0aGlzICk7Ci0KLSAgICAgICAgLy8gTWFrZSB0aGUgZG9nIGxlZyEKLQotICAgICAgICBpZiAobGFzdCAhPSB0aGlzKQotICAgICAgICAgICAgbGFzdC5zcGxheSggdGhpcywgdGhpcyApOwotCi0gICAgICAgIHguc3BsYXkoIHRoaXMsIGxhc3QgKTsKLSAgICAgICAgZmlyc3Quc3BsYXkoIHRoaXMsIHggKTsKLQotICAgICAgICBhc3NlcnQgdGhpcyA9PSBsYXN0IHx8IHRoaXMuX2xlZnRTcGxheSA9PSBsYXN0OwotICAgICAgICBhc3NlcnQgbGFzdC5fbGVmdFNwbGF5ID09IHg7Ci0gICAgICAgIGFzc2VydCB4Ll9sZWZ0U3BsYXkgPT0gZmlyc3Q7Ci0gICAgICAgIGFzc2VydCB4Ll9yaWdodFNwbGF5ID09IG51bGw7Ci0gICAgICAgIGFzc2VydCBmaXJzdC5fbGVmdFNwbGF5ICE9IG51bGw7Ci0KLSAgICAgICAgaW50IGZpcnN0Q2NoTGVmdCA9IGZpcnN0LmdldENjaExlZnQoKTsKLSAgICAgICAgaW50IGZpcnN0Q2JlZ2luTGVmdCA9IGZpcnN0LmdldENkb2NCZWdpbkxlZnQoKTsKLQotICAgICAgICBpbnQgZGVsdGFDY2hMZWZ0ID0gZmlyc3RDY2hMZWZ0IC0gbGFzdC5nZXRDY2hMZWZ0KCk7Ci0gICAgICAgIGludCBkZWx0YUNiZWdpbkxlZnQgPSBmaXJzdENiZWdpbkxlZnQgLSBsYXN0LmdldENkb2NCZWdpbkxlZnQoKTsKLQotICAgICAgICBsYXN0LmFkanVzdENjaExlZnQoIGRlbHRhQ2NoTGVmdCApOwotICAgICAgICBsYXN0LmFkanVzdENkb2NCZWdpbkxlZnQoIGRlbHRhQ2JlZ2luTGVmdCApOwotCi0gICAgICAgIGlmIChsYXN0ICE9IHRoaXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFkanVzdENjaExlZnQoIGRlbHRhQ2NoTGVmdCApOwotICAgICAgICAgICAgYWRqdXN0Q2RvY0JlZ2luTGVmdCggZGVsdGFDYmVnaW5MZWZ0ICk7Ci0gICAgICAgIH0KLQotICAgICAgICB4LmFkanVzdENjaExlZnQoIC0gZmlyc3RDY2hMZWZ0ICk7Ci0gICAgICAgIHguYWRqdXN0Q2RvY0JlZ2luTGVmdCggLSBmaXJzdENiZWdpbkxlZnQgKTsKLQotICAgICAgICBmaXJzdC5hZGp1c3RDY2hMZWZ0KCAtIGZpcnN0Q2NoTGVmdCApOwotICAgICAgICBmaXJzdC5hZGp1c3RDZG9jQmVnaW5MZWZ0KCAtIGZpcnN0Q2JlZ2luTGVmdCApOwotCi0gICAgICAgIGFzc2VydCBmaXJzdC5nZXRDY2hMZWZ0KCkgPT0gMDsKLSAgICAgICAgYXNzZXJ0IGZpcnN0LmdldENkb2NCZWdpbkxlZnQoKSA9PSAwOwotCi0gICAgICAgIGFzc2VydCB4LmdldENjaExlZnQoKSArIGRlbHRhQ2NoTGVmdCArIHguZ2V0Q2NoKCkgPT0gMDsKLSAgICAgICAgYXNzZXJ0IHguZ2V0Q2RvY0JlZ2luTGVmdCgpICsgZGVsdGFDYmVnaW5MZWZ0ICsgeC5nZXRDZG9jQmVnaW4oKSA9PSAwOwotCi0gICAgICAgIGZpcnN0Ll9sZWZ0U3BsYXkuX3BhcmVudFNwbGF5ID0gbGFzdDsKLSAgICAgICAgbGFzdC5fbGVmdFNwbGF5ID0gZmlyc3QuX2xlZnRTcGxheTsKLSAgICAgICAgeC5fcGFyZW50U3BsYXkgPSBudWxsOwotCi0gICAgICAgIGZpcnN0Ll9sZWZ0U3BsYXkgPSBudWxsOwotICAgICAgICBmaXJzdC5fcGFyZW50U3BsYXkgPSBudWxsOwotCi0gICAgICAgIGFzc2VydCB2YWxpZGF0ZVNwbGF5VHJlZSgpOwotCi0gICAgICAgIHJldHVybiB4OwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIGJvb2xlYW4gZGlzYWJsZVN0b3JlVmFsaWRhdGlvbiAoICkKLSAgICAgICAgeyBkdisrOyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgYm9vbGVhbiBlbmFibGVTdG9yZVZhbGlkYXRpb24gICggKQotICAgICAgICB7IGR2LS07IHJldHVybiB0cnVlOyB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGludCBkdjsKLQotICAgIHsKLSAgICAgICAgaWYgKCEidHJ1ZSIuZXF1YWxzKCBTeXN0ZW0uZ2V0UHJvcGVydHkoICJ0cmVlYXNzZXJ0cyIgKSkpCi0gICAgICAgICAgICBkaXNhYmxlU3RvcmVWYWxpZGF0aW9uKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gdmFsaWRhdGUgKCApCi0gICAgewotICAgICAgICBpZiAoZHYgIT0gMCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZG9WYWxpZGF0ZSgpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoICggUnVudGltZUV4Y2VwdGlvbiBydGUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJEb2N1bWVudCBpbnZhbGlkOiAiICsgcnRlLmdldE1lc3NhZ2UoKSApOwotICAgICAgICAgICAgcnRlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgZHVtcCggdHJ1ZSApOwotICAgICAgICAgICAgdGhyb3cgcnRlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBSZWN1cnNpdmUgZGVzY2VudCB2YWxpZGF0aW9uIG9mIHRoZSBjb250ZW50IG9mIHRoZSBkb2N1bWVudAotICAgIC8vCi0gICAgLy8gR3JhbW1lciBmb3IgdmFsaWQgY29udGVudCBvZiBhIGRvY3VtZW50Ci0gICAgLy8KLSAgICAvLyA8ZG9jPiAgICAgICAgOjo9IERPQyA8YXR0cmlidXRlcz4gPGNvbnRlbnQ+IFJPT1QKLSAgICAvLyA8YXR0cmlidXRlcz4gOjo9ICggQVRUUiApKgotICAgIC8vIDxjb250ZW50PiAgICA6Oj0gKCAoIENPTU1FTlQgfCBQUk9DSU5TVCB8IDxlbGVtZW50PikgKSoKLSAgICAvLyA8ZWxlbWVudD4gICAgOjo9ICggTEVBRiAgPGF0dHJpYnV0ZXM+ICkgfAotICAgIC8vICAgICAgICAgICAgICAgICAgICAoIEJFR0lOIDxhdHRyaWJ1dGVzPiA8Y29udGVudD4gRU5EICkKLSAgICAvLwotCi0gICAgcHJpdmF0ZSBTcGxheSB2YWxpZGF0ZUF0dHJpYnV0ZXMgKCBTcGxheSBzICkKLSAgICB7Ci0gICAgICAgIHdoaWxlICggcy5nZXRLaW5kKCkgPT0gQVRUUiApCi0gICAgICAgICAgICBzID0gcy5uZXh0U3BsYXkoKTsKLQotICAgICAgICByZXR1cm4gczsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFNwbGF5IHZhbGlkYXRlQ29udGVudCAoIFNwbGF5IHMgKQotICAgIHsKLSAgICAgICAgZm9yICggOyA7ICkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGsgPSBzLmdldEtpbmQoKTsKLQotICAgICAgICAgICAgaWYgKGsgPT0gQ09NTUVOVCB8fCBrID09IFBST0NJTlNUKQotICAgICAgICAgICAgICAgIHMgPSBzLm5leHRTcGxheSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNwbGF5IHEgPSBzOwotICAgICAgICAgICAgICAgIHMgPSB2YWxpZGF0ZUVsZW1lbnQoIHMgKTsKLQotICAgICAgICAgICAgICAgIGlmIChxID09IHMpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHM7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBTcGxheSB2YWxpZGF0ZUVsZW1lbnQgKCBTcGxheSBzICkKLSAgICB7Ci0gICAgICAgIGlmIChzLmdldEtpbmQoKSA9PSBCRUdJTikKLSAgICAgICAgewotICAgICAgICAgICAgU3BsYXkgYiA9IHM7Ci0KLSAgICAgICAgICAgIHMgPSB2YWxpZGF0ZUF0dHJpYnV0ZXMoIHMubmV4dFNwbGF5KCkgKTsKLQotICAgICAgICAgICAgaWYgKCFiLmlzTGVhZigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHMgPSB2YWxpZGF0ZUNvbnRlbnQoIHMgKTsKLQotICAgICAgICAgICAgICAgIGFzc2VydCBzLmlzRW5kKCk6ICJNaXNzaW5nIEVORCwgc3BsYXk6ICIgKyBzLmdldERlYnVnSWQoKTsKLQotICAgICAgICAgICAgICAgIHMgPSBzLm5leHRTcGxheSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHM7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIHZhbGlkYXRlRG9jICggKQotICAgIHsKLSAgICAgICAgU3BsYXkgcyA9IF9kb2MubmV4dFNwbGF5KCk7Ci0KLSAgICAgICAgcyA9IHZhbGlkYXRlQXR0cmlidXRlcyggcyApOwotCi0gICAgICAgIHMgPSB2YWxpZGF0ZUNvbnRlbnQoIHMgKTsKLQotICAgICAgICBhc3NlcnQgcy5pc1Jvb3QoKTogIkV4cGVjdGVkIHJvb3QiOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFZhbGlkYXRlQ29udGV4dAotICAgIHsKLSAgICAgICAgaW50IF9udW1TcGxheVR5cGVzOwotICAgICAgICBpbnQgX2NJbnZhbGlkYXRhYmxlVHlwZXM7Ci0gICAgICAgIGludCBfY0VsZW1PcmRlclNlbnNpdGl2ZVR5cGVzOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB2YWxpZGF0ZUdvb2JlciAoIEdvb2JlciBnLCBTcGxheSBzLCBWYWxpZGF0ZUNvbnRleHQgY29udGV4dCApCi0gICAgewotICAgICAgICBpZiAoZyBpbnN0YW5jZW9mIFR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFzc2VydCBnLmdldEtpbmQoKSA9PSBUWVBFOwotICAgICAgICAgICAgYXNzZXJ0IHMuaXNUeXBlYWJsZSgpOwotCi0gICAgICAgICAgICBjb250ZXh0Ll9udW1TcGxheVR5cGVzKys7Ci0KLSAgICAgICAgICAgIFR5cGUgdHlwZSA9IChUeXBlKSBnOwotCi0gICAgICAgICAgICBpZiAodHlwZS51c2VzX2ludmFsaWRhdGVfdmFsdWUoKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0Ll9jSW52YWxpZGF0YWJsZVR5cGVzKys7Ci0KLSAgICAgICAgICAgIGlmICh0eXBlLmlzX2NoaWxkX2VsZW1lbnRfb3JkZXJfc2Vuc2l0aXZlKCkpCi0gICAgICAgICAgICAgICAgY29udGV4dC5fY0VsZW1PcmRlclNlbnNpdGl2ZVR5cGVzKys7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgZy5nZXRLaW5kKCkgIT0gVFlQRTsKLSAgICAgICAgfQotCi0gICAgICAgIGFzc2VydCBnLmdldFNwbGF5KCkgPT0gczsKLSAgICAgICAgYXNzZXJ0IGcuZ2V0Um9vdCgpID09IHRoaXM7Ci0gICAgICAgIGFzc2VydCBnLmdldFBvcygpID49IDA7Ci0gICAgICAgIGFzc2VydCBnLmdldFBvcygpIDw9IHMuZ2V0TWF4UG9zKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGRvVmFsaWRhdGUgKCApCi0gICAgewotICAgICAgICBhc3NlcnQgdmFsaWRhdGVEb2MoKTsKLSAgICAgICAgYXNzZXJ0IHZhbGlkYXRlU3BsYXlUcmVlKCk7Ci0gICAgICAgIGFzc2VydCBnZXRDY2hMZWZ0KCkgPT0gX3RleHQubGVuZ3RoKCk7Ci0KLSAgICAgICAgdmFsaWRhdGVDaGFuZ2VMaXN0ZW5lclN0YXRlKCk7Ci0KLS8vIFRPRE86IFZhbGlkYXRlIHRoYXQgaXMgdGhlIHJvb3QgdHlwZSBpcyBudWxsLCB0aGVyZSBhcmUgbm8gdHlwZXMgaW4KLS8vIHRyZWUgYXQgYWxsCi0KLS8vIFRPRE86IENoZWNrIHRoZSBpbnZhcmllbnQgdGhhdCBpZiB0aGVyZSBpcyBhIFR5cGUgYW55d2hlcmUKLS8vIGluIHRoZSBkb2N1bWVudCwgdGhhdCB0aGVyZSBpcyBhbiBleGlzdGluZyBjaGFpbiBvZiB0eXBlcwotLy8gYWxsIHRoZSB3YXkgdG8gdGhlIHJvb3QgYW5kIGlzX29rX2VsZW1lbnRfdXNlciBvciBpc19va19hdHRyaWJ1dGVfdXNlciwKLS8vIGRlcGVuZGluZyBvbiB0aGUgY2FzZSwgcmV0dXJucyBvay4KLQotICAgICAgICBWYWxpZGF0ZUNvbnRleHQgY29udGV4dCA9IG5ldyBWYWxpZGF0ZUNvbnRleHQoKTsKLQotICAgICAgICBDb250YWluZXIgcmVjZW50Q29udGFpbmVyID0gbnVsbDsKLQotICAgICAgICBmb3IgKCBTcGxheSBzID0gX2RvYyA7IHMgIT0gbnVsbCA7IHMgPSBzLm5leHRTcGxheSgpICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHMuaXNSb290KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IHMuZ2V0Q2NoQWZ0ZXIoKSA9PSAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAocy5pc0JlZ2luKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQmVnaW4gYiA9IChCZWdpbikgczsKLQotICAgICAgICAgICAgICAgIGFzc2VydCBiLmdldE5hbWUoKSAhPSBudWxsOwotCi0gICAgICAgICAgICAgICAgYXNzZXJ0Ci0gICAgICAgICAgICAgICAgICAgIGIuZ2V0RmluaXNoKCkgPT0gbnVsbCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgYi5nZXRGaW5pc2goKS5nZXRDb250YWluZXIoKSA9PSBiOwotCi0gICAgICAgICAgICAgICAgaWYgKGIuaXNMZWFmKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgYi5nZXRGaW5pc2goKSA9PSBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgYi5nZXRGaW5pc2goKSAhPSBudWxsOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgYi5nZXRGaW5pc2goKS5nZXRDb250YWluZXIoKSA9PSBiOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgYi5nZXRDY2hWYWx1ZSgpID09IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAocy5pc0F0dHIoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQgcy5nZXROYW1lKCkgIT0gbnVsbDsKLSAgICAgICAgICAgICAgICBhc3NlcnQgcy5nZXRDY2hBZnRlcigpID09IDA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChzLmlzUHJvY2luc3QoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQgcy5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCkgIT0gbnVsbDsKLSAgICAgICAgICAgICAgICBhc3NlcnQgcy5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCkubGVuZ3RoKCkgPT0gMDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHMuaXNDb250YWluZXIoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQgcy5nZXRDb250YWluZXIoKSA9PSByZWNlbnRDb250YWluZXI7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXMuaXNMZWFmKCkpCi0gICAgICAgICAgICAgICAgICAgIHJlY2VudENvbnRhaW5lciA9IChDb250YWluZXIpIHM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChzLmlzRmluaXNoKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IHMuZ2V0Q29udGFpbmVyKCkgPT0gcmVjZW50Q29udGFpbmVyOwotICAgICAgICAgICAgICAgIHJlY2VudENvbnRhaW5lciA9IHJlY2VudENvbnRhaW5lci5nZXRDb250YWluZXIoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29udGV4dC5fbnVtU3BsYXlUeXBlcyA9IDA7Ci0KLSAgICAgICAgICAgIGZvciAoIEdvb2JlciBnID0gcy5maXJzdEdvb2JlcigpIDsgZyAhPSBudWxsIDsKLSAgICAgICAgICAgICAgICAgIGcgPSBzLm5leHRHb29iZXIoIGcgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmFsaWRhdGVHb29iZXIoIGcsIHMsIGNvbnRleHQgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGlzSW52YWxpZCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFzc2VydCBzLmlzVHlwZWFibGUoKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQgcy5wZWVrVHlwZSgpICE9IG51bGw7Ci0KLSAgICAgICAgICAgICAgICBhc3NlcnQgY29udGV4dC5fbnVtU3BsYXlUeXBlcyA9PSAxOwotCi0gICAgICAgICAgICAgICAgaWYgKHMuaXNEb2MoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydCBzLmdldENjaEFmdGVyKCkgPT0gMDsKLSAgICAgICAgICAgICAgICAgICAgU3BsYXkgbiA9IHMubmV4dE5vbkF0dHJTcGxheSgpOwotCi0gICAgICAgICAgICAgICAgICAgIGFzc2VydCBuLmlzUm9vdCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzLmlzQmVnaW4oKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydCBzLmlzTGVhZigpOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgcy5nZXRDY2hWYWx1ZSgpID09IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHMuaXNBdHRyKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgcy5nZXRDY2hWYWx1ZSgpID09IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFzc2VydCBjb250ZXh0Ll9udW1TcGxheVR5cGVzIDw9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBhc3NlcnQgY29udGV4dC5fY0ludmFsaWRhdGFibGVUeXBlcyA9PSBfY0ludmFsaWRhdGFibGVUeXBlczsKLSAgICAgICAgYXNzZXJ0IGNvbnRleHQuX2NFbGVtT3JkZXJTZW5zaXRpdmVUeXBlcyA9PV9jRWxlbU9yZGVyU2Vuc2l0aXZlVHlwZXM7Ci0KLSAgICAgICAgLy8gVE9ETzogVmFsaWRhdGUgaW5kaWNlcwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGJvb2xlYW4gdmFsaWRhdGVTcGxheVRyZWUgKCApCi0gICAgewotICAgICAgICBpZiAoZHYgIT0gMCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZG9WYWxpZGF0ZVNwbGF5VHJlZSgpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoICggUnVudGltZUV4Y2VwdGlvbiBydGUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJTcGxheSB0cmVlIGludmFsaWQ6ICIgKyBydGUgKTsKLQotICAgICAgICAgICAgZHVtcCggdHJ1ZSApOwotCi0gICAgICAgICAgICB0aHJvdyBydGU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBWYWxpZGF0ZVN0YXRzIGV4dGVuZHMgSGFzaE1hcAotICAgIHsKLSAgICAgICAgaW50IGdldENjaCAoIFNwbGF5IHMgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0U3RhdHMoIHMgKS5fY2NoOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBhZGp1c3RDY2ggKCBTcGxheSBzLCBpbnQgY2NoRGVsdGEgKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdGF0cyBzdGF0cyA9IGdldFN0YXRzKCBzICk7Ci0gICAgICAgICAgICBzdGF0cy5fY2NoICs9IGNjaERlbHRhOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGdldENiZWdpbiAoIFNwbGF5IHMgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0U3RhdHMoIHMgKS5fY2JlZ2luOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBhZGp1c3RDYmVnaW4gKCBTcGxheSBzLCBpbnQgY2JlZ2luRGVsdGEgKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdGF0cyBzdGF0cyA9IGdldFN0YXRzKCBzICk7Ci0gICAgICAgICAgICBzdGF0cy5fY2JlZ2luICs9IGNiZWdpbkRlbHRhOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBTdGF0cyBnZXRTdGF0cyAoIFNwbGF5IHMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdGF0cyBzdGF0cyA9IChTdGF0cykgZ2V0KCBzICk7Ci0KLSAgICAgICAgICAgIGlmIChzdGF0cyA9PSBudWxsKQotICAgICAgICAgICAgICAgIHB1dCggcywgc3RhdHMgPSBuZXcgU3RhdHMoKSApOwotCi0gICAgICAgICAgICByZXR1cm4gc3RhdHM7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBTdGF0cwotICAgICAgICB7Ci0gICAgICAgICAgICBwdWJsaWMgaW50IF9jY2g7Ci0gICAgICAgICAgICBwdWJsaWMgaW50IF9jYmVnaW47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sZWFuIGRvVmFsaWRhdGVTcGxheVRyZWUgKCApCi0gICAgewotICAgICAgICBhc3NlcnRBc3NlcnRFbmFibGVkKCk7Ci0KLSAgICAgICAgVmFsaWRhdGVTdGF0cyBzdGF0cyA9IG5ldyBWYWxpZGF0ZVN0YXRzKCk7Ci0KLSAgICAgICAgYXNzZXJ0IF9wYXJlbnRTcGxheSA9PSBudWxsOwotICAgICAgICBhc3NlcnQgX3JpZ2h0U3BsYXkgID09IG51bGw7Ci0gICAgICAgIGFzc2VydCBfZG9jLl9sZWZ0U3BsYXkgPT0gbnVsbDsKLQotICAgICAgICBTcGxheSBzID0gdGhpczsKLQotICAgICAgICBpZiAocy5fbGVmdFNwbGF5ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHMgPSBzLl9sZWZ0U3BsYXk7Ci0KLSAgICAgICAgICAgIHdoaWxlICggcyAhPSBudWxsICYmIHMuX2xlZnRTcGxheSAhPSBudWxsICkKLSAgICAgICAgICAgICAgICBzID0gcy5fbGVmdFNwbGF5OwotICAgICAgICB9Ci0KLSAgICAgICAgYXNzZXJ0IHMgPT0gX2RvYzsKLQotICAgICAgICBsb29wOgotICAgICAgICBmb3IgKCA7IDsgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocy5fbGVmdFNwbGF5ID09IG51bGwgJiYgcy5fcmlnaHRTcGxheSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN0YXRzLmFkanVzdENjaCggcywgcy5nZXRDY2goKSApOwotICAgICAgICAgICAgICAgIHN0YXRzLmFkanVzdENiZWdpbiggcywgcy5nZXRDZG9jQmVnaW4oKSApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocy5fcmlnaHRTcGxheSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoIHMgPSBzLl9yaWdodFNwbGF5IDsgcy5fbGVmdFNwbGF5ICE9IG51bGwgOyApCi0gICAgICAgICAgICAgICAgICAgIHMgPSBzLl9sZWZ0U3BsYXk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yICggOyA7ICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFNwbGF5IHAgPSBzLl9wYXJlbnRTcGxheTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAocCA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbG9vcDsKLQotICAgICAgICAgICAgICAgICAgICBpZiAocC5fcmlnaHRTcGxheSA9PSBudWxsIHx8IHAuX3JpZ2h0U3BsYXkgPT0gcykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHA7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRzLmFkanVzdENjaCggcywgcy5nZXRDY2goKSApOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHMuYWRqdXN0Q2JlZ2luKCBzLCBzLmdldENkb2NCZWdpbigpICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzLl9sZWZ0U3BsYXkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0cy5hZGp1c3RDY2goIHMsIHN0YXRzLmdldENjaCggcy5fbGVmdFNwbGF5ICkgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRzLmFkanVzdENiZWdpbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcywgc3RhdHMuZ2V0Q2JlZ2luKCBzLl9sZWZ0U3BsYXkgKSApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocy5fcmlnaHRTcGxheSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRzLmFkanVzdENjaCggcywgc3RhdHMuZ2V0Q2NoKCBzLl9yaWdodFNwbGF5ICkgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRzLmFkanVzdENiZWdpbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcywgc3RhdHMuZ2V0Q2JlZ2luKCBzLl9yaWdodFNwbGF5ICkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBwLl9sZWZ0U3BsYXkgPT0gczsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBwLl9yaWdodFNwbGF5ICE9IG51bGw7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBwLl9yaWdodFNwbGF5OwotCi0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIHMuX2xlZnRTcGxheSAhPSBudWxsICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gcy5fbGVmdFNwbGF5OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoIHMgPSBfZG9jIDsgcyAhPSBudWxsIDsgcyA9IHMubmV4dFNwbGF5KCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgIV9sZWZ0T25seSB8fCBzLl9yaWdodFNwbGF5ID09IG51bGw6ICIiICsgcy5nZXREZWJ1Z0lkKCk7Ci0gICAgICAgICAgICBhc3NlcnQgcy5fbGVmdFNwbGF5ICA9PSBudWxsIHx8IHMuX2xlZnRTcGxheSAuX3BhcmVudFNwbGF5ID09IHM7Ci0gICAgICAgICAgICBhc3NlcnQgcy5fcmlnaHRTcGxheSA9PSBudWxsIHx8IHMuX3JpZ2h0U3BsYXkuX3BhcmVudFNwbGF5ID09IHM7Ci0KLSAgICAgICAgICAgIGlmIChzLl9sZWZ0U3BsYXkgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQgcy5nZXRDY2hMZWZ0KCkgPT0gMDsKLSAgICAgICAgICAgICAgICBhc3NlcnQgcy5nZXRDZG9jQmVnaW5MZWZ0KCkgPT0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQKLSAgICAgICAgICAgICAgICAgICAgcy5nZXRDY2hMZWZ0KCkgPT0gc3RhdHMuZ2V0Q2NoKCBzLl9sZWZ0U3BsYXkgKToKLSAgICAgICAgICAgICAgICAgICAgICAgICIiICsgcy5nZXREZWJ1Z0lkKCk7Ci0KLSAgICAgICAgICAgICAgICBhc3NlcnQgcy5nZXRDZG9jQmVnaW5MZWZ0KCkgPT0gc3RhdHMuZ2V0Q2JlZ2luKCBzLl9sZWZ0U3BsYXkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8KLSAgICAvLwotCi0gICAgaW50ZXJmYWNlIENoYW5nZUxpc3RlbmVyCi0gICAgewotICAgICAgICB2b2lkIGNoYW5nZU5vdGlmaWNhdGlvbiAoICk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQ2hhbmdlQ2xpZW50Ci0gICAgewotICAgICAgICBDaGFuZ2VMaXN0ZW5lciBfbGlzdGVuZXI7Ci0gICAgICAgIENoYW5nZUNsaWVudCAgIF9uZXh0OwotICAgIH0KLQotICAgIGxvbmcgZ2V0VmVyc2lvbiAoICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfX3ZlcnNpb247Ci0gICAgfQotCi0gICAgdm9pZCBpbnZhbGlkYXRlVmVyc2lvbiAoICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCBfY2hhbmdlQ2xpZW50cyA9PSBudWxsOwotCi0gICAgICAgIF9fdmVyc2lvbisrOwotCi0gICAgICAgIGFzc2VydCAoX2RlYnVnQ2hhbmdlVmVyc2lvbiA9IF9fdmVyc2lvbikgPT0gMCB8fCB0cnVlOwotICAgIH0KLQotICAgIC8vIFVzZSB0aGlzICpvbmx5KiBpZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmchCi0gICAgdm9pZCByZXN0b3JlVmVyc2lvbiAoIGxvbmcgb2xkVmVyc2lvbiApCi0gICAgewotICAgICAgICBhc3NlcnQgX192ZXJzaW9uID49IG9sZFZlcnNpb247Ci0gICAgICAgIF9fdmVyc2lvbiA9IG9sZFZlcnNpb247Ci0gICAgICAgIGFzc2VydCAoX2RlYnVnQ2hhbmdlVmVyc2lvbiA9IF9fdmVyc2lvbikgPT0gMCB8fCB0cnVlOwotICAgIH0KLQotICAgIGJvb2xlYW4gdmFsaWRhdGVDaGFuZ2VTdGFydGVkICggKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IF9jaGFuZ2VDbGllbnRzID09IG51bGw7Ci0gICAgICAgIHJldHVybiBfY2hhbmdlQ2xpZW50cyA9PSBudWxsOwotICAgIH0KLQotICAgIGJvb2xlYW4gdmFsaWRhdGVDaGFuZ2VMaXN0ZW5lclN0YXRlICggKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IF9kZWJ1Z0NoYW5nZVZlcnNpb24gPT0gX192ZXJzaW9uOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlZ2lzdGVyRm9yQ2hhbmdlICggQ2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIgKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IHZhbGlkYXRlQ2hhbmdlTGlzdGVuZXJTdGF0ZSgpOwotCi0gICAgICAgIC8vIFNlZSBpZiB0aGlzIGxpc3RlbmVyIGlzIHRoZSBmaXJzdCBvbmUgb24gdGhlIGxpc3QuICBFYXN5IGJ1dCBub3QKLSAgICAgICAgLy8gdG90YWxseSBjb21wbGV0ZSAgb3B0aW1pemF0aW9uCi0KLSAgICAgICAgaWYgKF9jaGFuZ2VDbGllbnRzICE9IG51bGwgJiYgX2NoYW5nZUNsaWVudHMuX2xpc3RlbmVyID09IGxpc3RlbmVyKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIENoYW5nZUNsaWVudCBjbGllbnQgPSBuZXcgQ2hhbmdlQ2xpZW50KCk7Ci0KLSAgICAgICAgY2xpZW50Ll9uZXh0ID0gX2NoYW5nZUNsaWVudHM7Ci0gICAgICAgIGNsaWVudC5fbGlzdGVuZXIgPSBsaXN0ZW5lcjsKLSAgICAgICAgX2NoYW5nZUNsaWVudHMgPSBjbGllbnQ7Ci0gICAgfQotCi0gICAgdm9pZCBzdGFydENoYW5nZSAoICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCB2YWxpZGF0ZUNoYW5nZUxpc3RlbmVyU3RhdGUoKTsKLQotICAgICAgICBsb25nIGN1cnJlbnRWZXJzaW9uID0gMDsKLQotICAgICAgICBhc3NlcnQgKGN1cnJlbnRWZXJzaW9uID0gX192ZXJzaW9uKSA9PSAwIHx8IHRydWU7Ci0KLSAgICAgICAgd2hpbGUgKCBfY2hhbmdlQ2xpZW50cyAhPSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgICAgX2NoYW5nZUNsaWVudHMuX2xpc3RlbmVyLmNoYW5nZU5vdGlmaWNhdGlvbigpOwotICAgICAgICAgICAgX2NoYW5nZUNsaWVudHMgPSBfY2hhbmdlQ2xpZW50cy5fbmV4dDsKLSAgICAgICAgfQotCi0gICAgICAgIGFzc2VydCBjdXJyZW50VmVyc2lvbiA9PSBfX3ZlcnNpb247Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBEb2N1bWVudCBwcm9wZXJ0aWVzCi0gICAgLy8KLQotICAgIHN0YXRpYyBjbGFzcyBEb2NQcm9wcwotICAgICAgICBleHRlbmRzIFhtbERvY3VtZW50UHJvcGVydGllcwotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBIYXNoTWFwIF9tYXAgPSBuZXcgSGFzaE1hcCgpOwotCi0gICAgICAgIHB1YmxpYyBPYmplY3QgcHV0ICggT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIF9tYXAucHV0KCBrZXksIHZhbHVlICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgT2JqZWN0IGdldCAoIE9iamVjdCBrZXkgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gX21hcC5nZXQoIGtleSApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIE9iamVjdCByZW1vdmUgKCBPYmplY3Qga2V5ICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIF9tYXAucmVtb3ZlKCBrZXkgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNsYXNzIG50aENhY2hlCi0gICAgewotICAgICAgICBwcml2YXRlIGJvb2xlYW4gbmFtZXNTYW1lICggUU5hbWUgcGF0dGVybiwgUU5hbWUgbmFtZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBwYXR0ZXJuID09IG51bGwgfHwgcGF0dGVybi5lcXVhbHMoIG5hbWUgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgYm9vbGVhbiBzZXRzU2FtZSAoIFFOYW1lU2V0IHBhdHRlcm5TZXQsIFFOYW1lU2V0IHNldCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gdmFsdWUgZXF1YWxpdHkgaXMgcHJvYmFibHkgdG9vIGV4cGVuc2l2ZS4gU2luY2UgdGhlIHVzZSBjYXNlCi0gICAgICAgICAgICAvLyBpbnZvbHZlcyBRTmFtZVNldHMgdGhhdCBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlciwgd2UKLSAgICAgICAgICAgIC8vIGNhbiB1c2UgaWRlbnRpdHkgY29tcGFyaXNvbi4KLSAgICAgICAgICAgIHJldHVybiBwYXR0ZXJuU2V0ICE9IG51bGwgJiYgcGF0dGVyblNldCA9PSBzZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGJvb2xlYW4gbmFtZUhpdChRTmFtZSBuYW1lUGF0dGVybiwgIFFOYW1lU2V0IHNldFBhdHRlcm4sIFFOYW1lIG5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzZXRQYXR0ZXJuID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWVzU2FtZShuYW1lUGF0dGVybiwgbmFtZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNldFBhdHRlcm4uY29udGFpbnMobmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGJvb2xlYW4gY2FjaGVTYW1lIChRTmFtZSBuYW1lUGF0dGVybiwgIFFOYW1lU2V0IHNldFBhdHRlcm4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzZXRQYXR0ZXJuID09IG51bGwgPyBuYW1lc1NhbWUobmFtZVBhdHRlcm4sIF9uYW1lKSA6Ci0gICAgICAgICAgICAgICAgc2V0c1NhbWUoc2V0UGF0dGVybiwgX3NldCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgZGlzdGFuY2UgKCBTcGxheSBwYXJlbnQsIFFOYW1lIG5hbWUsIFFOYW1lU2V0IHNldCwgaW50IG4gKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgbiA+PSAwOwotCi0gICAgICAgICAgICBpZiAoX3ZlcnNpb24gIT0gUm9vdC50aGlzLmdldFZlcnNpb24oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSW50ZWdlci5NQVhfVkFMVUUgLSAxOwotCi0gICAgICAgICAgICBpZiAocGFyZW50ICE9IF9wYXJlbnQgfHwgIWNhY2hlU2FtZShuYW1lLCBzZXQpKQotICAgICAgICAgICAgICAgIHJldHVybiBJbnRlZ2VyLk1BWF9WQUxVRTsKLQotICAgICAgICAgICAgcmV0dXJuIG4gPiBfbiA/IG4gLSBfbiA6IF9uIC0gbjsKLSAgICAgICAgfQotCi0gICAgICAgIEJlZ2luIGZldGNoICggU3BsYXkgcGFyZW50LCBRTmFtZSBuYW1lLCBRTmFtZVNldCBzZXQsIGludCBuICkKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0IG4gPj0gMDsKLQotICAgICAgICAgICAgaWYgKF92ZXJzaW9uICE9IFJvb3QudGhpcy5nZXRWZXJzaW9uKCkgfHwgX3BhcmVudCAhPSBwYXJlbnQgfHwKLSAgICAgICAgICAgICAgICAgICEgY2FjaGVTYW1lKG5hbWUsIHNldCkgfHwgbiA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF92ZXJzaW9uID0gUm9vdC50aGlzLmdldFZlcnNpb24oKTsKLSAgICAgICAgICAgICAgICBfcGFyZW50ID0gcGFyZW50OwotICAgICAgICAgICAgICAgIF9uYW1lID0gbmFtZTsKLSAgICAgICAgICAgICAgICBfY2hpbGQgPSBudWxsOwotICAgICAgICAgICAgICAgIF9uID0gLTE7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXBhcmVudC5pc0xlYWYoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGxvb3A6Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoIFNwbGF5IHMgPSBwYXJlbnQubmV4dFNwbGF5KCkgOyA7IHMgPSBzLm5leHRTcGxheSgpICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICggcy5nZXRLaW5kKCkgKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFTkQgIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUk9PVCA6IGJyZWFrIGxvb3A7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQkVHSU4gOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lSGl0KCBuYW1lLCBzZXQsIHMuZ2V0TmFtZSgpICkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2hpbGQgPSBzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbiA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGxvb3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHMuZ2V0RmluaXNoU3BsYXkoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKF9uIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAgICAgaWYgKG4gPiBfbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAoIG4gPiBfbiApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBmb3IgKCBTcGxheSBzID0gX2NoaWxkLmdldEZpbmlzaFNwbGF5KCkubmV4dFNwbGF5KCkgOyA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBzLm5leHRTcGxheSgpICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMuaXNGaW5pc2goKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMuaXNCZWdpbigpKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lSGl0KCBuYW1lLCBzZXQsIHMuZ2V0TmFtZSgpICkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2hpbGQgPSBzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbisrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gcy5nZXRGaW5pc2hTcGxheSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobiA8IF9uKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdoaWxlICggbiA8IF9uICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFNwbGF5IHMgPSBfY2hpbGQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICggOyA7ICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHMucHJldlNwbGF5KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzLmlzTGVhZigpIHx8IHMuaXNFbmQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocy5pc0VuZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gcy5nZXRDb250YWluZXIoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lSGl0KCBuYW1lLCBzZXQsIHMuZ2V0TmFtZSgpICkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2hpbGQgPSBzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbi0tOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzLmlzQ29udGFpbmVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiAoQmVnaW4pIF9jaGlsZDsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgbG9uZyAgICAgX3ZlcnNpb247Ci0gICAgICAgIHByaXZhdGUgU3BsYXkgICAgX3BhcmVudDsKLSAgICAgICAgcHJpdmF0ZSBRTmFtZSAgICBfbmFtZTsKLSAgICAgICAgcHJpdmF0ZSBRTmFtZVNldCBfc2V0OwotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSBTcGxheSBfY2hpbGQ7Ci0gICAgICAgIHByaXZhdGUgaW50ICAgX247Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBEYSBmaWVsZHMuICBEYSBCZWFycy4gIERpdGthIGlzIEdvZC4KLSAgICAvLwotCi0gICAgYm9vbGVhbiBfbGVmdE9ubHk7Ci0gICAgRG9jICAgICBfZG9jOwotICAgIFRleHQgICAgX3RleHQ7Ci0gICAgYm9vbGVhbiBfdmFsaWRhdGVPblNldDsKLQotICAgIC8vCi0gICAgLy8gRG9jdW1lbnQgdmVyc2lvbi4gIFRoZXNlIG51bWJlcnMgZ2V0IGluY3JlbWVudGVkIHdoZW4gdGhlIGRvY3VtZW50Ci0gICAgLy8gY2hhbmdlcyBpbiBhIHZhcmlldHkgb2Ygd2F5cy4KLSAgICAvLwotCi0gICAgcHJpdmF0ZSBsb25nIF9fdmVyc2lvbiA9IDE7Ci0gICAgcHJpdmF0ZSBsb25nIF9kZWJ1Z0NoYW5nZVZlcnNpb24gPSAxOyAvLyBEZWJ1ZyBvbmx5Ci0KLSAgICBwcml2YXRlIENoYW5nZUNsaWVudCBfY2hhbmdlQ2xpZW50czsKLQotICAgIERvY1Byb3BzIF9wcm9wczsKLQotICAgIC8vCi0gICAgLy8gWG1sSW5wdXRTdHJlYW0KLSAgICAvLwotCi0gICAgYm9vbGVhbiBfc3RhbmRBbG9uZTsKLQotICAgIC8vCi0gICAgLy8KLSAgICAvLwotCi0gICAgZmluYWwgU2NoZW1hVHlwZUxvYWRlciBfc2NoZW1hVHlwZVN5c3RlbTsKLQotICAgIGludCBfY0ludmFsaWRhdGFibGVUeXBlczsKLSAgICBpbnQgX2NFbGVtT3JkZXJTZW5zaXRpdmVUeXBlczsKLQotICAgIC8vCi0gICAgLy8KLSAgICAvLwotCi0gICAgbnRoQ2FjaGUgX250aENhY2hlX0EgPSBuZXcgbnRoQ2FjaGUoKTsKLSAgICBudGhDYWNoZSBfbnRoQ2FjaGVfQiA9IG5ldyBudGhDYWNoZSgpOwotICAgIFR5cGVTdG9yZUZhY3RvcnkgX2ZhY3Rvcnk7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1sc3RvcmUvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3N0b3JlL1NhdmVyLmphdmEgYi92Mi9zcmMveG1sc3RvcmUvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3N0b3JlL1NhdmVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2MWJkMzYuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHN0b3JlL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zdG9yZS9TYXZlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDc3NiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zdG9yZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uQ2hhcnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5FbmNvZGluZ01hcDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLkdlbmVyaWNYbWxJbnB1dFN0cmVhbTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuY29tbW9uLlZhbGlkYXRvckxpc3RlbmVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uWG1sRXZlbnRCYXNlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uWG1sTmFtZUltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5RTmFtZUhlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc3RvcmUuU3BsYXkuQ29udGFpbmVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zdG9yZS5TcGxheS5YbWxuczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLk5hbWVzcGFjZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnRGcmFnbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5oZWxwZXJzLkF0dHJpYnV0ZXNJbXBsOwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uQXR0cmlidXRlOwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uQXR0cmlidXRlSXRlcmF0b3I7Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5DaGFuZ2VQcmVmaXhNYXBwaW5nOwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uQ2hhcmFjdGVyRGF0YTsKLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLkNvbW1lbnQ7Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5FbmREb2N1bWVudDsKLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLkVuZEVsZW1lbnQ7Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5FbmRQcmVmaXhNYXBwaW5nOwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uTG9jYXRpb247Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb247Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5TdGFydERvY3VtZW50OwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uU3RhcnRFbGVtZW50OwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uU3RhcnRQcmVmaXhNYXBwaW5nOwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MRXZlbnQ7Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5YTUxOYW1lOwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgU2F2ZXIgaW1wbGVtZW50cyBOYW1lc3BhY2VNYW5hZ2VyCi17Ci0gICAgLy8KLSAgICAvLwotICAgIC8vCi0gICAgCi0gICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbW9uaXRvcigpCi0gICAgewotICAgICAgICByZXR1cm4gX3Jvb3Q7Ci0gICAgfQotCi0gICAgU2F2ZXIgKCBSb290IHIsIFNwbGF5IHMsIGludCBwLCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IFJvb3QuZHYgPiAwIHx8IHMuZ2V0Um9vdFNsb3coKSA9PSByOwotCi0gICAgICAgIC8vIElucHV0IHMgYW5kIHAgbXVzdCBiZSBub3JtYWxpemVkIGFscmVhZHkKLSAgICAgICAgYXNzZXJ0IHAgPCBzLmdldEVuZFBvcygpOwotCi0gICAgICAgIF9yb290ID0gcjsKLSAgICAgICAgX3RvcCA9IF9zcGxheSA9IHM7Ci0gICAgICAgIF9wb3MgPSBwOwotICAgICAgICBfdmVyc2lvbiA9IHIuZ2V0VmVyc2lvbigpOwotICAgICAgICBfc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIF9hdHRycyA9IG5ldyBMaW5rZWRIYXNoTWFwKCk7Ci0gICAgICAgIF9hdHRyTmFtZXMgPSBuZXcgSGFzaFNldCgpOwotICAgICAgICBfZmlyc3RQdXNoID0gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIF9uZXdMaW5lID0gU3lzdGVtLmdldFByb3BlcnR5KCAibGluZS5zZXBhcmF0b3IiICk7Ci0KLSAgICAgICAgaWYgKF9uZXdMaW5lID09IG51bGwpCi0gICAgICAgICAgICBfbmV3TGluZSA9ICJcbiI7Ci0KLSAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgc3RhdGUgb2YgdGhlIG5hbWVzcGFjZXMKLSAgICAgICAgX25hbWVzcGFjZVN0YWNrID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICBfdXJpTWFwID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgX3ByZWZpeE1hcCA9IG5ldyBIYXNoTWFwKCk7Ci0KLSAgICAgICAgLy8gU3RvcHMgdGhlIHN5bnRoZXNpcyBvZiB0aGlzIG5hbXNwYWNlIGFuZCBtYWtlIGZvciBiZXR0ZXIKLSAgICAgICAgLy8gcm91bmR0cmlwcGluZyAKLSAgICAgICAgYWRkTWFwcGluZyggInhtbCIsIFNwbGF5Ll94bWwxOTk4VXJpICk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgZm9yIGltcGxpY2l0IG5hbWVzcGFjZXMKLSAgICAgICAgCi0gICAgICAgIG9wdGlvbnMgPSBYbWxPcHRpb25zLm1hc2tOdWxsKCBvcHRpb25zICk7Ci0KLSAgICAgICAgaWYgKG9wdGlvbnMuaGFzT3B0aW9uKCBYbWxPcHRpb25zLlNBVkVfSU1QTElDSVRfTkFNRVNQQUNFUyApKQotICAgICAgICB7Ci0gICAgICAgICAgICBNYXAgbSA9IChNYXApIG9wdGlvbnMuZ2V0KCBYbWxPcHRpb25zLlNBVkVfSU1QTElDSVRfTkFNRVNQQUNFUyApOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKCBJdGVyYXRvciBpID0gbS5rZXlTZXQoKS5pdGVyYXRvcigpIDsgaS5oYXNOZXh0KCkgOyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IChTdHJpbmcpIGkubmV4dCgpOwotICAgICAgICAgICAgICAgIGFkZE1hcHBpbmcoIHByZWZpeCwgKFN0cmluZykgbS5nZXQoIHByZWZpeCApICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAob3B0aW9ucy5oYXNPcHRpb24oIFhtbE9wdGlvbnMuU0FWRV9TVUdHRVNURURfUFJFRklYRVMgKSkKLSAgICAgICAgICAgIF9zdWdnZXN0ZWRQcmVmaXhlcyA9IChNYXApIG9wdGlvbnMuZ2V0KCBYbWxPcHRpb25zLlNBVkVfU1VHR0VTVEVEX1BSRUZJWEVTKTsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIHRoZSBkZWZhdWx0IHByZWZpeCBoYXMgbm90IGJlZW4gbWFwcGVkLCBkbyBzbyBub3cKLSAgICAgICAgCi0gICAgICAgIGlmIChnZXROYW1lc3BhY2VGb3JQcmVmaXgoICIiICkgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgX2luaXRpYWxEZWZhdWx0VXJpID0gbmV3IFN0cmluZyggIiIgKTsKLSAgICAgICAgICAgIGFkZE1hcHBpbmcoICIiLCBfaW5pdGlhbERlZmF1bHRVcmkgKTsKLSAgICAgICAgfQotCi0gICAgICAgIF9zYXZlTmFtZXNwYWNlc0ZpcnN0ID0gb3B0aW9ucy5oYXNPcHRpb24oIFhtbE9wdGlvbnMuU0FWRV9OQU1FU1BBQ0VTX0ZJUlNUICk7Ci0KLSAgICAgICAgaWYgKF9wcmV0dHlQcmludCA9IG9wdGlvbnMuaGFzT3B0aW9uKCBYbWxPcHRpb25zLlNBVkVfUFJFVFRZX1BSSU5UICkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9wcmV0dHlJbmRlbnQgPSAyOwotCi0gICAgICAgICAgICBpZiAob3B0aW9ucy5oYXNPcHRpb24oIFhtbE9wdGlvbnMuU0FWRV9QUkVUVFlfUFJJTlRfSU5ERU5UICkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX3ByZXR0eUluZGVudCA9Ci0gICAgICAgICAgICAgICAgICAgICgoSW50ZWdlcikgb3B0aW9ucy5nZXQoIFhtbE9wdGlvbnMuU0FWRV9QUkVUVFlfUFJJTlRfSU5ERU5UICkpLmludFZhbHVlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChvcHRpb25zLmhhc09wdGlvbiggWG1sT3B0aW9ucy5TQVZFX1BSRVRUWV9QUklOVF9PRkZTRVQgKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfcHJldHR5T2Zmc2V0ID0KLSAgICAgICAgICAgICAgICAgICAgKChJbnRlZ2VyKSBvcHRpb25zLmdldCggWG1sT3B0aW9ucy5TQVZFX1BSRVRUWV9QUklOVF9PRkZTRVQgKSkuaW50VmFsdWUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChvcHRpb25zLmhhc09wdGlvbiggWG1sT3B0aW9ucy5TQVZFX0FHR1JFU1NJVkVfTkFNRVNQQUNFUyApICYmCi0gICAgICAgICAgICAgICAgISh0aGlzIGluc3RhbmNlb2YgU3ludGhOYW1lc3BhY2VTYXZlcikpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN5bnRoTmFtZXNwYWNlU2F2ZXIgc2F2ZXIgPQotICAgICAgICAgICAgICAgIG5ldyBTeW50aE5hbWVzcGFjZVNhdmVyKCByLCBzLCBwLCBvcHRpb25zICk7Ci0KLSAgICAgICAgICAgIHdoaWxlICggc2F2ZXIucHJvY2VzcygpICkKLSAgICAgICAgICAgICAgICA7Ci0KLSAgICAgICAgICAgIGlmICghc2F2ZXIuX3N5bnRoTmFtZXNwYWNlcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgX3ByZUNvbXB1dGVkTmFtZXNwYWNlcyA9IHNhdmVyLl9zeW50aE5hbWVzcGFjZXM7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIF91c2VEZWZhdWx0TmFtZXNwYWNlID0KLSAgICAgICAgICAgIG9wdGlvbnMuaGFzT3B0aW9uKCBYbWxPcHRpb25zLlNBVkVfVVNFX0RFRkFVTFRfTkFNRVNQQUNFICk7Ci0KLSAgICAgICAgaWYgKG9wdGlvbnMuaGFzT3B0aW9uKCBYbWxPcHRpb25zLlNBVkVfRklMVEVSX1BST0NJTlNUICkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9maWx0ZXJQcm9jaW5zdCA9Ci0gICAgICAgICAgICAgICAgKFN0cmluZykgb3B0aW9ucy5nZXQoIFhtbE9wdGlvbnMuU0FWRV9GSUxURVJfUFJPQ0lOU1QgKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChvcHRpb25zLmhhc09wdGlvbiggWG1sT3B0aW9ucy5TQVZFX1VTRV9PUEVOX0ZSQUdNRU5UICkpCi0gICAgICAgICAgICBfZnJhZ21lbnQgPSBTcGxheS5fb3BlbnVyaUZyYWdtZW50OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBfZnJhZ21lbnQgPSBTcGxheS5feG1sRnJhZ21lbnQ7Ci0KLSAgICAgICAgLy8gT3V0ZXIgb3ZlcnJpZGVzIGlubmVyCi0gICAgICAgIAotICAgICAgICBfaW5uZXIgPQotICAgICAgICAgICAgb3B0aW9ucy5oYXNPcHRpb24oIFhtbE9wdGlvbnMuU0FWRV9JTk5FUiApICYmCi0gICAgICAgICAgICAgICAgIW9wdGlvbnMuaGFzT3B0aW9uKCBYbWxPcHRpb25zLlNBVkVfT1VURVIgKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChfaW5uZXIgJiYgIV90b3AuaXNEb2MoKSkKLSAgICAgICAgICAgIF9zeW50aEVsZW0gPSBfZnJhZ21lbnQ7Ci0gICAgICAgIAotICAgICAgICBlbHNlIGlmIChvcHRpb25zLmhhc09wdGlvbiggWG1sT3B0aW9ucy5TQVZFX1NZTlRIRVRJQ19ET0NVTUVOVF9FTEVNRU5UICkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9mcmFnbWVudCA9IF9zeW50aEVsZW0gPQotICAgICAgICAgICAgICAgIChRTmFtZSkgb3B0aW9ucy5nZXQoIFhtbE9wdGlvbnMuU0FWRV9TWU5USEVUSUNfRE9DVU1FTlRfRUxFTUVOVCApOwotCi0gICAgICAgICAgICBpZiAoX3N5bnRoRWxlbSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oICJOdWxsIHN5bnRoZXRpYyBlbGVtZW50IiApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBfcHJlUHJvY2VzcyA9IHRydWU7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIGZpbmFsIHZvaWQgY2hlY2tWZXJzaW9uICggKQotICAgIHsKLSAgICAgICAgaWYgKF92ZXJzaW9uICE9IF9yb290LmdldFZlcnNpb24oKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uKCAiRG9jdW1lbnQgY2hhbmdlZCBkdXJpbmcgc2F2ZSIgKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgZmluYWwgUm9vdCBnZXRSb290ICggKSB7IHJldHVybiBfcm9vdDsgfQotICAgIHByb3RlY3RlZCBmaW5hbCBNYXAgIGdldFVyaU1hcCAoICkgeyByZXR1cm4gX3VyaU1hcDsgfQotICAgIHByb3RlY3RlZCBmaW5hbCBNYXAgIGdldFByZWZpeE1hcCAoICkgeyByZXR1cm4gX3ByZWZpeE1hcDsgfQotCi0gICAgLy8gZW1pdENvbnRhaW5lciB3aWxsIHByb2Nlc3MgbGVhZiBjb250ZW50cyBhbmQgdGhlIHRleHQgYWZ0ZXIgYQotICAgIC8vIHN0YXJ0LiAgQWxsIG90aGVyIHRleHQgaXMgcHJvY2Vzc2VkIHdpdGggZW1pdFRleHRBZnRlci4KLQotICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGVtaXRYbWxuc0ZyYWdtZW50ICggU3BsYXkgcyApOwotICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGVtaXRBdHRyRnJhZ21lbnQgKCBTcGxheSBzICk7Ci0gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgZW1pdFRleHRGcmFnbWVudCAoIFNwbGF5IHMsIGludCBwLCBpbnQgY2NoICk7Ci0gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgZW1pdENvbW1lbnRGcmFnbWVudCAoIFNwbGF5IHMgKTsKLSAgICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBlbWl0UHJvY2luc3RGcmFnbWVudCAoIFNwbGF5IHMgKTsKLQotICAgIHByb3RlY3RlZCBhYnN0cmFjdCB2b2lkIGVtaXREb2NUeXBlKAotICAgICAgICBTdHJpbmcgZG9jdHlwZU5hbWUsIFN0cmluZyBwdWJsaWNJRCwgU3RyaW5nIHN5c3RlbUlEICk7Ci0gICAgCi0gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgZW1pdENvbW1lbnQgKCBTcGxheSBzICk7Ci0gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgZW1pdFRleHRBZnRlciAoIFNwbGF5IHMsIGludCBwLCBpbnQgY2NoICk7Ci0gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgZW1pdEVuZCAoIFNwbGF5IHMsIFFOYW1lIG5hbWUgKTsKLSAgICBwcm90ZWN0ZWQgYWJzdHJhY3Qgdm9pZCBlbWl0UHJvY2luc3QgKCBTcGxheSBzICk7Ci0gICAgcHJvdGVjdGVkIGFic3RyYWN0IHZvaWQgZW1pdENvbnRhaW5lciAoIENvbnRhaW5lciBjLCBRTmFtZSBuYW1lICk7Ci0KLSAgICAvLyBDYWxsZWQgd2hlbiBhIHN5bnRoZXRpYyBwcmVmaXggaXMgY3JlYXRlZC4KLSAgICAKLSAgICBwcm90ZWN0ZWQgdm9pZCBzeW50aGV0aWNOYW1lc3BhY2UgKAotICAgICAgICBTdHJpbmcgcHJlZml4LCBTdHJpbmcgdXJpLCBib29sZWFuIGNvbnNpZGVyQ3JlYXRpbmdEZWZhdWx0ICkgeyB9Ci0KLSAgICAvKgotICAgICAqIEl0IGlzIHZpdGFsIHRoYXQgdGhlIHNhdmVyIGRvZXMgbm90IG1vZGlmeSB0aGUgdHJlZSBpbiB0aGUgcHJvY2VzcyBvZgotICAgICAqIHNhdmluZy4gIFNvLCB3aGVuIHRoZXJlIGlzIGludmFsaWQgY29udGVudCBvciBhdHRyIHZhbHVlcyB3aGljaCBuZWVkCi0gICAgICogbmV3IG5hbWVzcGFjZS9wcmVmaXggbWFwcGluZ3MsIEkgY29tcHV0ZSB0aGUgY29udGVudC92YWx1ZXMgYnkgcGFzc2luZwotICAgICAqIHRoZSBOYW1lc3BhY2VNYW5hZ2VyIGltcGxlbWVudGVkIGJ5IHRoZSBzYXZlciB3aGljaCBjYW4gY29ucyB1cCBtYXBwaW5ncwotICAgICAqIGp1c3QgZm9yIHRoZSBwdXJwb3NlcyBvZiBzYXZpbmcgd2l0aG91dCBtb2RpZnlpbmcgdGhlIHRyZWUgYnkgYWRkaW5nCi0gICAgICogWG1sbnMgc3BsYXlzLgotICAgICAqCi0gICAgICogVGh1cywgSSBtdXN0IG5vdCwgYXMgYSBieXByb2R1Y3Qgb2Ygc2F2aW5nLCB2YWxpZGF0ZSBhbnkgY29udGVudC92YWx1ZXMKLSAgICAgKiBpbnRvIHRoZSB0cmVlIHdoaWNoIGNhbGwgYmFjayBmb3IgbmFtZXNwYWNlIG1hcHBpbmdzIHdoaWNoIG5lZWQgdG8gYmUKLSAgICAgKiBjcmVhdGVkLgotICAgICAqCi0gICAgICogQWxzbywgSSBuZWVkIHRvIGNvbXB1dGUgdGhlIHZhbGlkIHRleHQgKGlmIGEgc3BsYXkgaXMgaW52YWxpZCkgYmVmb3JlCi0gICAgICogSSBoYXZlIGNsb3NlZCB0aGUgYXR0cmlidXRlIGxpc3Qgb2YgdGhlIGVuY2xvc2luZyBjb250YWluZXIgYmVjYXVzZQotICAgICAqIEkgd2lsbCBoYXZlIHRvIHBlcnNpc3Qgb3V0IHRoZXNlIHRlbXBvcmFyeSBtZXBwaW5ncyBiZWZvcmUgdGhleSBhcmUKLSAgICAgKiByZWZlcmVuY2VkIGJ5IHRoZSB2YWx1ZXMgd2hpY2ggbmVlZCB0aGVtLgotICAgICAqLwotCi0gICAgZmluYWwgU3RyaW5nIHRleHQgKCApCi0gICAgewotICAgICAgICBhc3NlcnQgX3RleHQgIT0gbnVsbDsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBfdGV4dC50b1N0cmluZygpOwotICAgIH0KLQotICAgIGZpbmFsIGJvb2xlYW4gbm9UZXh0ICggKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IF90ZXh0ICE9IG51bGwgfHwgX3NiLmxlbmd0aCgpID09IDA7Ci0gICAgICAgIGFzc2VydCBfdGV4dCA9PSBudWxsIHx8IF90ZXh0ID09IF9zYjsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBfdGV4dCA9PSBudWxsOwotICAgIH0KLQotICAgIGZpbmFsIHZvaWQgY2xlYXJUZXh0ICggKQotICAgIHsKLSAgICAgICAgX3RleHQgPSBudWxsOwotICAgICAgICBfc2IuZGVsZXRlKCAwLCBfc2IubGVuZ3RoKCkgKTsKLSAgICB9Ci0KLSAgICBmaW5hbCBzdGF0aWMgdm9pZCBzcGFjZXMgKCBTdHJpbmdCdWZmZXIgc2IsIGludCBvZmZzZXQsIGludCBjb3VudCApCi0gICAgewotICAgICAgICB3aGlsZSAoIGNvdW50LS0gPiAwICkKLSAgICAgICAgICAgIHNiLmluc2VydCggb2Zmc2V0LCAnICcgKTsKLSAgICB9Ci0KLSAgICBmaW5hbCBzdGF0aWMgdm9pZCB0cmltICggU3RyaW5nQnVmZmVyIHNiICkKLSAgICB7Ci0gICAgICAgIGludCBpOwotCi0gICAgICAgIGZvciAoIGkgPSAwIDsgaSA8IHNiLmxlbmd0aCgpIDsgaSsrICkKLSAgICAgICAgICAgIGlmICghU3BsYXkuaXNXaGl0ZVNwYWNlKCBzYi5jaGFyQXQoIGkgKSApKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIHNiLmRlbGV0ZSggMCwgaSApOwotCi0gICAgICAgIGZvciAoIGkgPSBzYi5sZW5ndGgoKSA7IGkgPiAwIDsgaS0tICkKLSAgICAgICAgICAgIGlmICghU3BsYXkuaXNXaGl0ZVNwYWNlKCBzYi5jaGFyQXQoIGkgLSAxICkgKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICBzYi5kZWxldGUoIGksIHNiLmxlbmd0aCgpICk7Ci0gICAgfQotCi0gICAgLy8gQ2FsbCBwcm9jZXNzIHVudGlsIGl0IHJldHVybnMgZmFsc2UgdG8gc2F2ZSBldmVyeXRoaW5nLgotCi0gICAgcHJvdGVjdGVkIGZpbmFsIGJvb2xlYW4gcHJvY2VzcyAoICkKLSAgICB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAobW9uaXRvcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGVja1ZlcnNpb24oKTsKLSAgICAKLSAgICAgICAgICAgIGlmIChfcHJlUHJvY2VzcykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfcHJlUHJvY2VzcyA9IGZhbHNlOwotICAgIAotICAgICAgICAgICAgICAgIFNwbGF5IHMgPSBfc3BsYXk7Ci0gICAgICAgICAgICAgICAgaW50ICAgcCA9IF9wb3M7Ci0gICAgCi0gICAgICAgICAgICAgICAgX3NwbGF5ID0gbnVsbDsKLSAgICAgICAgICAgICAgICBfcG9zID0gMDsKLSAgICAKLSAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgcG9zaXRpb24gcmlnaHQgYmVmb3JlIGVuZCB0b2tlbi4gIEVmZmVjdGl2ZWx5IHRoZXJlCi0gICAgICAgICAgICAgICAgLy8gaXMgbm90aGluZyB0byBzYXZlIGhlcmUsIHNvIHNhdmUgb3V0IHRoZSBlbXB0eSBmcmFnbWVudC4KLSAgICAKLSAgICAgICAgICAgICAgICBpZiAoKHAgPT0gMCAmJiBzLmlzRmluaXNoKCkpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgKHMuaXNMZWFmKCkgJiYgcCA9PSBzLmdldFBvc0xlYWZFbmQoKSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgX3NwbGF5ID09IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NUZXh0RnJhZ21lbnQoIG51bGwsIDAsIDAgKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgIAotICAgICAgICAgICAgICAgIC8vIEhlcmUsIGlmIHAgPiAwLCB0aGVuIHdlJ3JlIHNhdmluZyBzb21lIHRleHQKLSAgICAKLSAgICAgICAgICAgICAgICBpZiAocCA+IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgIXMuaXNMZWFmKCkgfHwgcCAhPSBzLmdldFBvc0xlYWZFbmQoKTsKLSAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1RleHRGcmFnbWVudCggcywgcCwgcy5nZXRQb3N0Q2NoKCBwICkgKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IF9zcGxheSA9PSBudWxsOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgCi0gICAgICAgICAgICAgICAgaWYgKF9pbm5lciAmJiAocy5pc0F0dHIoKSB8fCBzLmlzQ29tbWVudCgpIHx8IHMuaXNQcm9jaW5zdCgpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NUZXh0RnJhZ21lbnQoIHMsIDAsIHMuZ2V0Q2NoVmFsdWUoKSApOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgCi0gICAgICAgICAgICAgICAgaWYgKHMuaXNYbWxucygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1htbG5zRnJhZ21lbnQoIHMgKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChzLmlzQXR0cigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0F0dHJGcmFnbWVudCggcyApOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHMuaXNDb21tZW50KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzQ29tbWVudEZyYWdtZW50KCBzICk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAocy5pc1Byb2NpbnN0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoX2ZpbHRlclByb2NpbnN0ICE9IG51bGwgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcy5nZXRMb2NhbCgpLmVxdWFscyggX2ZpbHRlclByb2NpbnN0ICkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NUZXh0RnJhZ21lbnQoIG51bGwsIDAsIDAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NQcm9jaW5zdEZyYWdtZW50KCBzICk7Ci0gICAgCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAKLSAgICAgICAgICAgICAgICBhc3NlcnQgcy5pc0NvbnRhaW5lcigpOwotICAgIAotICAgICAgICAgICAgICAgIF9zcGxheSA9IHM7Ci0gICAgICAgICAgICAgICAgX2VuZFNwbGF5ID0gcy5pc0NvbnRhaW5lcigpID8gcy5nZXRGaW5pc2hTcGxheSgpIDogczsKLSAgICAgICAgICAgIH0KLSAgICAKLSAgICAgICAgICAgIC8vIEkgbmVlZCB0byBicmVhayB0aGUgcHJvY2Vzc2luZyBvZiBhIHNwbGF5IGludG8gdHdvIHBhcnRzLiAgVGhlCi0gICAgICAgICAgICAvLyBmaXJzdCBwYXJ0IGlzIHRoZSBwcm9jZXNzaW5nIG9mIHRoZSBzcGxheSBhbmQgdGhlIHNlY29uZCBwYXJ0IGlzCi0gICAgICAgICAgICAvLyB0aGUgcG9zdCBwcm9jZXNzaW5nIG9mIHRoZSBzcGxheS4gIEluIHBhcnRpY3VsYXIsIHRoZSBwb3N0Ci0gICAgICAgICAgICAvLyBwcm9jZXNzaW5nLCBhbW9uZyBvdGhlciB0aGluZ3MsIHBvcHMgdGhlIG1hcHBpbmcgc3RhY2suICBUaGlzCi0gICAgICAgICAgICAvLyBpcyBkb25lIHNvIHN0dWZmICdzYXZlZCcgZHVyaW5nIHRoZSBmaXJzdCBwYXJ0ICh0aGUgcHJlLXByb2Nlc3MpCi0gICAgICAgICAgICAvLyBjYW4gdXNlIHRoZSBtYXBwaW5nIHN0YWNrLiAgV2hlbiB0aGUgbmV4dCBwcm9jZXNzIGNvbWVzIGFyb3VuZCwKLSAgICAgICAgICAgIC8vIHRoZSBtYXBwaW5nIHN0YWNrIHdpbGwgdGhlbiBiZSB1cGRhdGVkLgotICAgIAotICAgICAgICAgICAgaWYgKF9wb3N0UG9wKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBvcE1hcHBpbmdzKCk7Ci0gICAgICAgICAgICAgICAgX3Bvc3RQb3AgPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAKLSAgICAgICAgICAgIGlmIChfcG9zdFByb2Nlc3MpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IF9zcGxheSAhPSBudWxsOwotICAgIAotICAgICAgICAgICAgICAgIGJvb2xlYW4gZW1pdHRlZCA9IGZhbHNlOwotICAgIAotICAgICAgICAgICAgICAgIGlmIChfc3BsYXkgPT0gX2VuZFNwbGF5KQotICAgICAgICAgICAgICAgICAgICBfc3BsYXkgPSBudWxsOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFNwbGF5IHMgPSBfc3BsYXk7Ci0gICAgCi0gICAgICAgICAgICAgICAgICAgIF9zcGxheSA9IF9zcGxheS5uZXh0Tm9uQXR0clNwbGF5KCk7Ci0gICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChfc2tpcENvbnRhaW5lckZpbmlzaCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHMuaXNCZWdpbigpICYmICFzLmlzTGVhZigpICYmIHMuZ2V0Q2NoQWZ0ZXIoKSA9PTA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgX3NwbGF5LmlzRmluaXNoKCk7Ci0gICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBfc3BsYXkgPSBfc3BsYXkgPT0gX2VuZFNwbGF5ID8gbnVsbCA6IF9zcGxheS5uZXh0U3BsYXkoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoX3NraXBDb250YWluZXJGaW5pc2ggfHwgcy5pc0xlYWYoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0ICFfcG9zdFBvcDsKLSAgICAgICAgICAgICAgICAgICAgICAgIF9wb3N0UG9wID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoIXMuaXNEb2MoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG5vVGV4dCgpOwotICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNjaEFmdGVyID0gcy5nZXRDY2hBZnRlcigpOwotICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9wcmV0dHlQcmludCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGV4dCA9IF9zYjsKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2NoQWZ0ZXIgPiAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUm9vdCByID0gZ2V0Um9vdCgpOwotICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLl90ZXh0LmZldGNoKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmdldENwRm9yUG9zKCByLCBzLmdldFBvc0FmdGVyKCkgKSwgY2NoQWZ0ZXIgKTsKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpbSggX3RleHQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGFpbmVyIHN0b3AgPSAoQ29udGFpbmVyKSBfdG9wOwotICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RvcC5pc0RvYygpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wID0gc3RvcC5nZXRDb250YWluZXIoKTsKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250YWluZXIgYyA9IHMuZ2V0Q29udGFpbmVyKCBzLmdldFBvc0FmdGVyKCkgKTsKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RleHQubGVuZ3RoKCkgPiAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGFpbmVyIHAgPSBjOwotICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCA7IHAgIT0gc3RvcCA7IHAgPSBwLmdldENvbnRhaW5lcigpICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlcyggX3RleHQsIDAsIF9wcmV0dHlJbmRlbnQgKTsKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9wcmV0dHlJbmRlbnQgPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RleHQuaW5zZXJ0KCAwLCBfbmV3TGluZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VzKCBfdGV4dCwgMSwgX3ByZXR0eU9mZnNldCApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfcHJldHR5SW5kZW50ID49IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGV4dC5hcHBlbmQoIF9uZXdMaW5lICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlcyggX3RleHQsIF90ZXh0Lmxlbmd0aCgpLCBfcHJldHR5T2Zmc2V0ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRhaW5lciBwID0gYzsKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocy5uZXh0Tm9uQXR0clNwbGF5KCkuaXNFbmQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHAuZ2V0Q29udGFpbmVyKCk7Ci0gICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggOyBwICE9IG51bGwgJiYgcCAhPSBzdG9wOyBwID0gcC5nZXRDb250YWluZXIoKSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlcyggX3RleHQsIF90ZXh0Lmxlbmd0aCgpLCBfcHJldHR5SW5kZW50ICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RleHQgPT0gbnVsbCA/IGNjaEFmdGVyID4gMCA6IF90ZXh0Lmxlbmd0aCgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0VGV4dEFmdGVyKCBzLCBzLmdldFBvc0FmdGVyKCksIGNjaEFmdGVyICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdHRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRleHQoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAKLSAgICAgICAgICAgICAgICBfcG9zdFByb2Nlc3MgPSBmYWxzZTsKLSAgICAKLSAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgSSBvbmx5IHJldHVybiBmYWxzZSBpZiB0aGVyZSBpcyAqcmVhbGx5KiBub3RoaW5nIG1vcmUKLSAgICAgICAgICAgICAgICAvLyB0byBwcm9jZXNzCi0gICAgCi0gICAgICAgICAgICAgICAgaWYgKGVtaXR0ZWQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgICAgICAgICAgICAgIGlmIChfcG9zdFBvcCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHBvcE1hcHBpbmdzKCk7Ci0gICAgICAgICAgICAgICAgICAgIF9wb3N0UG9wID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgIAotICAgICAgICAgICAgaWYgKF9zcGxheSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAgICAgICAgIGlmIChfdmVyc2lvbiAhPSBnZXRSb290KCkuZ2V0VmVyc2lvbigpKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oICJEb2N1bWVudCBjaGFuZ2VkIiApOwotICAgIAotICAgICAgICAgICAgX3NraXBDb250YWluZXJGaW5pc2ggPSBmYWxzZTsKLSAgICAKLSAgICAgICAgICAgIHN3aXRjaCAoIF9zcGxheS5nZXRLaW5kKCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTcGxheS5ET0MgOgotICAgICAgICAgICAgY2FzZSBTcGxheS5CRUdJTiA6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc0NvbnRhaW5lciggKENvbnRhaW5lcikgX3NwbGF5ICk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFNwbGF5LlJPT1QgOgotICAgICAgICAgICAgY2FzZSBTcGxheS5FTkQgIDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcm9jZXNzRW5kKCBfc3BsYXkgKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgU3BsYXkuQ09NTUVOVCA6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZW1pdENvbW1lbnQoIF9zcGxheSApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBTcGxheS5QUk9DSU5TVCA6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKF9maWx0ZXJQcm9jaW5zdCA9PSBudWxsIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAhX3NwbGF5LmdldExvY2FsKCkuZXF1YWxzKCBfZmlsdGVyUHJvY2luc3QgKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRQcm9jaW5zdCggX3NwbGF5ICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBTcGxheS5BVFRSIDoKLSAgICAgICAgICAgIGRlZmF1bHQgOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFzc2VydCBmYWxzZTogIlVuZXhwZWN0ZWQgc3BsYXkga2luZCAiICsgX3NwbGF5LmdldEtpbmQoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgCi0gICAgICAgICAgICBfcG9zdFByb2Nlc3MgPSB0cnVlOwotICAgIAotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGZpbmFsIHZvaWQgcHJvY2Vzc0NvbnRhaW5lciAoIENvbnRhaW5lciBjICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCBjLmlzRG9jKCkgfHwgYy5pc0JlZ2luKCk7Ci0KLSAgICAgICAgUU5hbWUgbmFtZSA9Ci0gICAgICAgICAgICBfc3ludGhFbGVtICE9IG51bGwgJiYgYyA9PSBfdG9wCi0gICAgICAgICAgICAgICAgPyBfc3ludGhFbGVtCi0gICAgICAgICAgICAgICAgOiBjLmlzQmVnaW4oKSA/IGMuZ2V0TmFtZSgpIDogbnVsbDsKLQotICAgICAgICBTdHJpbmcgbmFtZVVyaSA9IG5hbWUgPT0gbnVsbCA/IG51bGwgOiBuYW1lLmdldE5hbWVzcGFjZVVSSSgpOwotCi0gICAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhIGRvY3R5cGUgdG8gc2F2ZSBvdXQKLQotICAgICAgICBpZiAoYy5pc0RvYygpICkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHN5c3RlbUlkID0gX3Jvb3QuX3Byb3BzLmdldERvY3R5cGVTeXN0ZW1JZCgpOwotICAgICAgICAgICAgU3RyaW5nIGRvY1R5cGVOYW1lID0gX3Jvb3QuX3Byb3BzLmdldERvY3R5cGVOYW1lKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzeXN0ZW1JZCAhPSBudWxsIHx8IGRvY1R5cGVOYW1lICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGRvY1R5cGVOYW1lID09IG51bGwgJiYgbmFtZSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICBkb2NUeXBlTmFtZSA9IG5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZG9jVHlwZU5hbWUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFhtbEN1cnNvciB4YyA9IF9yb290LmNyZWF0ZUN1cnNvcigpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHhjLnRvRmlyc3RDaGlsZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgZG9jVHlwZU5hbWUgPSB4Yy5nZXROYW1lKCkuZ2V0TG9jYWxQYXJ0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICB4Yy5kaXNwb3NlKCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGRvY1R5cGVOYW1lID09IG51bGwgJiYgX2ZyYWdtZW50ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIGRvY1R5cGVOYW1lID0gX2ZyYWdtZW50LmdldExvY2FsUGFydCgpOwotCi0gICAgICAgICAgICAgICAgU3RyaW5nIHB1YmxpY0lkID0gX3Jvb3QuX3Byb3BzLmdldERvY3R5cGVQdWJsaWNJZCgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGVtaXREb2NUeXBlKCBkb2NUeXBlTmFtZSwgcHVibGljSWQsIHN5c3RlbUlkICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBZGQgYSBuZXcgZW50cnkgdG8gdGhlIGZyb250aWVyLiAgSWYgdGhpcyBlbGVtZW50IGhhcyBhIG5hbWUKLSAgICAgICAgLy8gd2hpY2ggaGFzIG5vIG5hbWVzcGFjZSwgdGhlbiB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHB1c2hpbmcKLSAgICAgICAgLy8gdGhlIG1hcHBpbmdzIGNhdXNlcyB0aGUgZGVmYXVsdCBuYW1lc3BhY2UgdG8gYmUgZW1wdHkKLQotICAgICAgICBib29sZWFuIGVuc3VyZURlZmF1bHRFbXB0eSA9IG5hbWUgIT0gbnVsbCAmJiBuYW1lVXJpLmxlbmd0aCgpID09IDA7Ci0KLSAgICAgICAgcHVzaE1hcHBpbmdzKCBjLCBlbnN1cmVEZWZhdWx0RW1wdHkgKTsKLQotICAgICAgICAvLwotICAgICAgICAvLyBUaGVyZSBhcmUgZm91ciB0aGluZ3Mgd2hpY2ggdXNlIG1hcHBpbmdzOgotICAgICAgICAvLwotICAgICAgICAvLyAgIDEpIFRoZSBlbGVtZW50IG5hbWUKLSAgICAgICAgLy8gICAyKSBUaGUgZWxlbWVudCB2YWx1ZSAocW5hbWUgYmFzZWQpCi0gICAgICAgIC8vICAgMykgQXR0cmlidXRlIG5hbWVzCi0gICAgICAgIC8vICAgNCkgVGhlIGF0dHJpYnV0ZSB2YWx1ZXMgKHFuYW1lIGJhc2VkKQotICAgICAgICAvLwotCi0gICAgICAgIC8vIDEpIFRoZSBlbGVtZW50IG5hbWUgKG5vdCBmb3Igc3RhcnRzKQotCi0gICAgICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICAgICAgICBlbnN1cmVNYXBwaW5nKCBuYW1lVXJpLCBudWxsLCAhZW5zdXJlRGVmYXVsdEVtcHR5LCBmYWxzZSApOwotCi0gICAgICAgIGFzc2VydCBub1RleHQoKTsKLQotICAgICAgICBpZiAoYy5pc0ludmFsaWQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gMikgVGhlIGVsZW1lbnQgdmFsdWUKLSAgICAgICAgICAgIF90ZXh0ID0gX3NiLmFwcGVuZCggYy5wZWVrVHlwZSgpLmJ1aWxkX3RleHQoIHRoaXMgKSApOwotICAgICAgICB9Ci0KLSAgICAgICAgX2F0dHJzLmNsZWFyKCk7Ci0gICAgICAgIF9hdHRyTmFtZXMuY2xlYXIoKTsKLQotICAgICAgICBmb3IgKCBTcGxheSBzID0gYy5uZXh0U3BsYXkoKSA7IHMuaXNBdHRyKCkgOyBzID0gcy5uZXh0U3BsYXkoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzLmlzTm9ybWFsQXR0cigpICYmCi0gICAgICAgICAgICAgICAgICAgIChfd2FudER1cEF0dHJzIHx8ICFfYXR0ck5hbWVzLmNvbnRhaW5zKCBzLmdldE5hbWUoKSApKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfYXR0ck5hbWVzLmFkZCggcy5nZXROYW1lKCkgKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyAzKSBBdHRyaWJ1dGUgbmFtZQotICAgICAgICAgICAgICAgIGVuc3VyZU1hcHBpbmcoIHMuZ2V0VXJpKCksIG51bGwsIGZhbHNlLCB0cnVlICk7Ci0KLSAgICAgICAgICAgICAgICBTdHJpbmcgaW52YWxpZFZhbHVlID0gbnVsbDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAocy5pc0ludmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgaW52YWxpZFZhbHVlID0gcy5wZWVrVHlwZSgpLmJ1aWxkX3RleHQoIHRoaXMgKTsgLy8gIzQKLQotICAgICAgICAgICAgICAgIF9hdHRycy5wdXQoIHMsIGludmFsaWRWYWx1ZSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gZW1pdENvbnRhaW5lciBoYW5kbGVzIHRleHQgb25seSBmb3IgbGVhdmVzIGFuZCBzdGFydHMKLQotICAgICAgICBpZiAoX3ByZXR0eVByaW50ICYmIChjLmlzRG9jKCkgfHwgYy5pc0xlYWYoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfdGV4dCA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFJvb3QgciA9IGdldFJvb3QoKTsKLQotICAgICAgICAgICAgICAgIHIuX3RleHQuZmV0Y2goCi0gICAgICAgICAgICAgICAgICAgIF90ZXh0ID0gX3NiLAotICAgICAgICAgICAgICAgICAgICByLmdldENwKCBjICksCi0gICAgICAgICAgICAgICAgICAgIGMuaXNMZWFmKCkgPyBjLmdldENjaFZhbHVlKCkgOiBjLmdldENjaCgpICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRyaW0oIF90ZXh0ICk7Ci0KLSAgICAgICAgICAgIGlmIChjLmlzRG9jKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3BhY2VzKCBfdGV4dCwgMCwgX3ByZXR0eU9mZnNldCApOwotCi0gICAgICAgICAgICAgICAgaWYgKF90ZXh0Lmxlbmd0aCgpID4gX3ByZXR0eU9mZnNldCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChfcHJldHR5SW5kZW50ID49IDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIF90ZXh0Lmluc2VydCggMCwgX25ld0xpbmUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlcyggX3RleHQsIDEsIF9wcmV0dHlPZmZzZXQgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIF90ZXh0LmFwcGVuZCggX25ld0xpbmUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlcyggX3RleHQsIF90ZXh0Lmxlbmd0aCgpLCBfcHJldHR5T2Zmc2V0ICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBkZXJpdmVkIHNhdmVycyBtYXkgd2FudCB0byB0ZXN0IHRoZSBzdHVmZiBiZWluZyBzdG9yZWQgdG8KLSAgICAgICAgLy8gc2VlIGlmIGlzIHdlbGwgZm9ybWVkIG9yIG5vdCBpbiBvcmRlciB0byBzYXZlIG91dCBhCi0gICAgICAgIC8vIGZyYWdtZW50LiAgRG8gdGhpcyBoZXJlIHdoZW4gZW1pdHRpbmcgdGhlIGZpcnN0IGNvbnRhaW5lciBpZgotICAgICAgICAvLyB0aGF0IGNvbnRhaW5lciBpcyB0aGUgcm9vdCAoaWYgbm90IHRoZSByb290LCB0aGVuIHdlIGFyZQotICAgICAgICAvLyB3ZWxsIGZvcm1lZCkKLQotICAgICAgICBpZiAoX3dhbnRGcmFnVGVzdCAmJiBuYW1lID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICgoX3RleHQgIT0gbnVsbCAmJiAhU3BsYXkuaXNXaGl0ZVNwYWNlKCBfdGV4dCApKSB8fAotICAgICAgICAgICAgICAgICAgIWMuaXNBZnRlcldoaXRlU3BhY2UoIGdldFJvb3QoKSApKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9uZWVkc0ZyYWcgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFzc2VydCAhYy5pc0xlYWYoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBTcGxheSBzID0gYy5uZXh0U3BsYXkoKTsKLQotICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciBsZWFmIGFueXdheXMgLS0gc29tZXRpbWVzIGl0IGhhcHBlbnMhCi0gICAgICAgICAgICAgICAgaWYgKGMuaXNMZWFmKCkgfHwgcy5pc0F0dHIoKSB8fCBoYXNNYXBwaW5ncygpKQotICAgICAgICAgICAgICAgICAgICBfbmVlZHNGcmFnID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBib29sZWFuIHNhd0JlZ2luID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIFNwbGF5IGNFbmQgPSBjLmdldEZpbmlzaFNwbGF5KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICggOyBzICE9IGNFbmQgOyBzID0gcy5uZXh0U3BsYXkoKSApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzLmlzQmVnaW4oKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2F3QmVnaW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbmVlZHNGcmFnID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F3QmVnaW4gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBzLmdldEZpbmlzaFNwbGF5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcy5pc0FmdGVyV2hpdGVTcGFjZSggZ2V0Um9vdCgpICkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX25lZWRzRnJhZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoIXNhd0JlZ2luKQotICAgICAgICAgICAgICAgICAgICAgICAgX25lZWRzRnJhZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgSSBhbSBkb2luZyBhZ2dyZXNzaXZlIG5hbWVzcGFjZXMgYW5kIHdlJ3JlIGVtaXR0aW5nIGEKLSAgICAgICAgLy8gY29udGFpbmVyIHdoaWNoIGNhbiBjb250YWluIGNvbnRlbnQsIGFkZCB0aGUgbmFtZXNwYWNlcwotICAgICAgICAvLyB3ZSd2ZSBjb21wdXRlZC4gIEJhc2ljYWxseSwgSSdtIG1ha2luZyBzdXJlIHRoZSBwcmUtY29tcHV0ZWQKLSAgICAgICAgLy8gbmFtZXNwYWNlcyBhcmUgbWFwcGVkIG9uIHRoZSBmaXJzdCBjb250YWluZXIgd2hpY2ggaGFzIGEgbmFtZS4KLQotICAgICAgICBpZiAoX3ByZUNvbXB1dGVkTmFtZXNwYWNlcyAhPSBudWxsICYmIChuYW1lICE9IG51bGwgfHwgX25lZWRzRnJhZykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoIEl0ZXJhdG9yIGkgPSBfcHJlQ29tcHV0ZWROYW1lc3BhY2VzLmtleVNldCgpLml0ZXJhdG9yKCkgOyBpLmhhc05leHQoKSA7ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgdXJpID0gKFN0cmluZykgaS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZW5zdXJlTWFwcGluZygKLSAgICAgICAgICAgICAgICAgICAgdXJpLCBudWxsLAotICAgICAgICAgICAgICAgICAgICBfcHJlQ29tcHV0ZWROYW1lc3BhY2VzLmdldCggdXJpICkgIT0gbnVsbCAmJiAhZW5zdXJlRGVmYXVsdEVtcHR5LCBmYWxzZSApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBTZXQgdG8gbnVsbCBzbyB3ZSBkbyB0aGlzIG9uY2UgYXQgdGhlIHRvcAotICAgICAgICAgICAgX3ByZUNvbXB1dGVkTmFtZXNwYWNlcyA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoX3dhbnRGcmFnVGVzdCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gU2VlIGlmIEkgbmVlZCB0byBnZW4gYSBmcmFnbWVudCBmb3IgdGhlIGRvY3VtZW50Ci0KLSAgICAgICAgICAgIGFzc2VydCBuYW1lICE9IG51bGwgfHwgKGMuaXNEb2MoKSAmJiBfc3ludGhFbGVtID09IG51bGwpOwotCi0gICAgICAgICAgICBpZiAobmFtZSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChfbmVlZHNGcmFnKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbmFtZSA9IF9mcmFnbWVudDsKLSAgICAgICAgICAgICAgICAgICAgZW5zdXJlRnJhZ21lbnROYW1lc3BhY2UoKTsKLSAgICAgICAgICAgICAgICAgICAgX2RvY0VsZW0gPSBuYW1lOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGMuaXNEb2MoKSkKLSAgICAgICAgICAgICAgICBfZG9jRWxlbSA9IG5hbWU7Ci0gICAgICAgIH0KLQotICAgICAgICBlbWl0Q29udGFpbmVyKCBjLCBuYW1lICk7Ci0KLSAgICAgICAgY2xlYXJUZXh0KCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHByb2Nlc3NFbmQgKCBTcGxheSBzICkKLSAgICB7Ci0gICAgICAgIENvbnRhaW5lciBjID0gcy5nZXRDb250YWluZXIoKTsKLSAgICAgICAgCi0gICAgICAgIFFOYW1lIG5hbWUgPQotICAgICAgICAgICAgX3N5bnRoRWxlbSAhPSBudWxsICYmIGMgPT0gX3RvcAotICAgICAgICAgICAgICAgID8gX3N5bnRoRWxlbQotICAgICAgICAgICAgICAgIDogYy5pc0JlZ2luKCkgPyBjLmdldE5hbWUoKSA6IG51bGw7Ci0gICAgICAgIAotICAgICAgICBpZiAoX3dhbnRGcmFnVGVzdCAmJiBuYW1lID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJvb2xlYW4gaXNSb290ID0gcy5pc1Jvb3QoKTsKLQotICAgICAgICAgICAgaWYgKCFpc1Jvb3QgfHwgX2RvY0VsZW0gIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBuYW1lID0gCi0gICAgICAgICAgICAgICAgICAgIGlzUm9vdAotICAgICAgICAgICAgICAgICAgICAgICAgPyBfZG9jRWxlbQotICAgICAgICAgICAgICAgICAgICAgICAgOiAocy5pc0VuZCgpID8gcy5nZXRDb250YWluZXIoKSA6IHMgKS5nZXROYW1lKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBlbWl0RW5kKCBfc3BsYXksIG5hbWUgKTsKLQotICAgICAgICBhc3NlcnQgIV9wb3N0UG9wOwotCi0gICAgICAgIF9wb3N0UG9wID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGZpbmFsIHZvaWQgcHVzaEZyYWdtZW50TWFwcGluZ3MgKCBTcGxheSBzICkKLSAgICB7Ci0gICAgICAgIC8vIG1hc2sgdGhlIGluaXRpYWwgZnJhbWUgdG8gaGlkZSBkZWZhdWx0IG1hcHBpbmdzCi0gICAgICAgIAotICAgICAgICBwdXNoTWFwcGluZ3MoCi0gICAgICAgICAgICBzID09IG51bGwgPyBudWxsIDogcy5nZXRDb250YWluZXIoKSwKLSAgICAgICAgICAgIF9mcmFnbWVudC5nZXROYW1lc3BhY2VVUkkoKS5sZW5ndGgoKSA9PSAwICk7Ci0gICAgICAgIAotICAgICAgICBlbnN1cmVGcmFnbWVudE5hbWVzcGFjZSgpOwotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwgdm9pZCBwcm9jZXNzWG1sbnNGcmFnbWVudCAoIFNwbGF5IHMgKQotICAgIHsKLSAgICAgICAgLy8gU2F2aW5nIGEgZGVmYXVsdCB4bWxucyBtYXBwaW5nIGlzIGRhbmdlcm91cywganVzdCBzcGl0IG91dCBlbXB0eQotICAgICAgICAvLyB0ZXh0Ci0gICAgICAgIAotICAgICAgICBpZiAocy5nZXRMb2NhbCgpLmxlbmd0aCgpID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHB1c2hGcmFnbWVudE1hcHBpbmdzKCBudWxsICk7Ci0gICAgICAgICAgICBfdGV4dCA9IF9zYjsKLSAgICAgICAgICAgIGVtaXRUZXh0RnJhZ21lbnQoIHMsIDAsIDAgKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHB1c2hGcmFnbWVudE1hcHBpbmdzKCBudWxsICk7Ci0gICAgICAgICAgICBlbnN1cmVNYXBwaW5nKCBzLmdldFVyaSgpLCBzLmdldExvY2FsKCksIGZhbHNlLCB0cnVlICk7Ci0gICAgICAgICAgICBlbWl0WG1sbnNGcmFnbWVudCggcyApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBmaW5hbCB2b2lkIHByb2Nlc3NDb21tZW50RnJhZ21lbnQgKCBTcGxheSBzICkKLSAgICB7Ci0gICAgICAgIHB1c2hGcmFnbWVudE1hcHBpbmdzKCBudWxsICk7Ci0gICAgICAgIGVtaXRDb21tZW50RnJhZ21lbnQoIHMgKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGZpbmFsIHZvaWQgcHJvY2Vzc1Byb2NpbnN0RnJhZ21lbnQgKCBTcGxheSBzICkKLSAgICB7Ci0gICAgICAgIHB1c2hGcmFnbWVudE1hcHBpbmdzKCBudWxsICk7Ci0gICAgICAgIGVtaXRQcm9jaW5zdEZyYWdtZW50KCBzICk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIFRoaXMgaXMgY2FsbGVkIG9ubHkgd2hlbiBhIHNpbmdsZSBhdHRyIGlzIGJlaW5nIHNhdmVkLiAgSXQgaXMgbm90IGNhbGxlZAotICAgICAqIGFzIGEgY29uc2VxdWVuY2Ugb2Ygc2F2aW5nIG91dCBhIGNvbnRhaW5lci4KLSAgICAgKi8KLQotICAgIHByaXZhdGUgZmluYWwgdm9pZCBwcm9jZXNzQXR0ckZyYWdtZW50ICggU3BsYXkgcyApCi0gICAgewotICAgICAgICBhc3NlcnQgcy5pc05vcm1hbEF0dHIoKTsKLQotICAgICAgICBwdXNoRnJhZ21lbnRNYXBwaW5ncyggcyApOwotCi0gICAgICAgIGVuc3VyZU1hcHBpbmcoIHMuZ2V0VXJpKCksIG51bGwsIGZhbHNlLCB0cnVlICk7Ci0KLSAgICAgICAgYXNzZXJ0IG5vVGV4dCgpOwotCi0gICAgICAgIGlmIChzLmlzSW52YWxpZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUT0RPIC0gcGFzcyBTdHJpbmdCdWZmZXIgdG8gYnVpbGRUZXh0IHRvIHNhdmUgb2JqZWN0IGNyZWF0aW9uCi0gICAgICAgICAgICBfdGV4dCA9IF9zYi5hcHBlbmQoIHMucGVla1R5cGUoKS5idWlsZF90ZXh0KCB0aGlzICkgKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVtaXRBdHRyRnJhZ21lbnQoIHMgKTsKLQotICAgICAgICBjbGVhclRleHQoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGlzIGlzIGNhbGxlZCBvbmx5IHdoZW4gYSBzaW5nbGUgY2h1bmsgb2YgdGV4dCBpcyB0byBiZSBzYXZlZC4KLSAgICAgKiBJdCBpcyBub3QgY2FsbGVkIGFzIGEgY29uc2VxdWVuY2Ugb2Ygc2F2aW5nIG91dCBhIGNvbnRhaW5lci4KLSAgICAgKi8KLQotICAgIHByaXZhdGUgZmluYWwgdm9pZCBwcm9jZXNzVGV4dEZyYWdtZW50ICggU3BsYXkgcywgaW50IHAsIGludCBjY2ggKQotICAgIHsKLSAgICAgICAgLy8gT25seSBuZWVkIHRvIHNhdmUgYW5jZXN0b3IgbmFtZXNwYWNlIG1hcHBpbmdzIGlmIHRoZXJlIGNvdWxkIGJlIGEKLSAgICAgICAgLy8gcW5hbWUgaGVyZS4gIElmIHRoZSB0ZXh0IGlzIG9mIGxlbmd0aCAwLCB0aGVuIHRoZXJlIGlzIG5vIHFuYW1lLgotCi0gICAgICAgIFNwbGF5IGMgPSBudWxsOwotICAgICAgICAKLSAgICAgICAgaWYgKChfdGV4dCAhPSBudWxsICYmIF90ZXh0Lmxlbmd0aCgpID4gMCkgfHwgKHMgIT0gbnVsbCAmJiBjY2ggPiAwKSkKLSAgICAgICAgICAgIGMgPSBzLmdldENvbnRhaW5lciggcCApOwotICAgICAgICAKLSAgICAgICAgcHVzaEZyYWdtZW50TWFwcGluZ3MoIGMgKTsKLQotICAgICAgICBlbWl0VGV4dEZyYWdtZW50KCBzLCBwLCBjY2ggKTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIExheW91dCBvZiBuYW1lc3BhY2Ugc3RhY2s6Ci0gICAgLy8KLSAgICAvLyAgICBVUkkgVW5kbwotICAgIC8vICAgIFVSSSBSZW5hbWUKLSAgICAvLyAgICBQcmVmaXggVW5kbwotICAgIC8vICAgIE1hcHBpbmcKLSAgICAvLwotCi0gICAgYm9vbGVhbiBoYXNNYXBwaW5ncyAoICkKLSAgICB7Ci0gICAgICAgIGludCBpID0gX25hbWVzcGFjZVN0YWNrLnNpemUoKTsKLQotICAgICAgICByZXR1cm4gaSA+IDAgJiYgX25hbWVzcGFjZVN0YWNrLmdldCggaSAtIDEgKSAhPSBudWxsOwotICAgIH0KLQotICAgIHZvaWQgaXRlcmF0ZU1hcHBpbmdzICggKQotICAgIHsKLSAgICAgICAgX2N1cnJlbnRNYXBwaW5nID0gX25hbWVzcGFjZVN0YWNrLnNpemUoKTsKLQotICAgICAgICB3aGlsZSAoIF9jdXJyZW50TWFwcGluZyA+IDAgJiYKLSAgICAgICAgICAgICAgICAgIF9uYW1lc3BhY2VTdGFjay5nZXQoIF9jdXJyZW50TWFwcGluZyAtIDEgKSAhPSBudWxsICkKLSAgICAgICAgewotICAgICAgICAgICAgX2N1cnJlbnRNYXBwaW5nIC09IDg7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sZWFuIGhhc01hcHBpbmcgKCApCi0gICAgewotICAgICAgICByZXR1cm4gX2N1cnJlbnRNYXBwaW5nIDwgX25hbWVzcGFjZVN0YWNrLnNpemUoKTsKLSAgICB9Ci0KLSAgICB2b2lkIG5leHRNYXBwaW5nICggKQotICAgIHsKLSAgICAgICAgX2N1cnJlbnRNYXBwaW5nICs9IDg7Ci0gICAgfQotCi0gICAgU3RyaW5nIG1hcHBpbmdQcmVmaXggKCApCi0gICAgewotICAgICAgICBhc3NlcnQgaGFzTWFwcGluZygpOwotICAgICAgICByZXR1cm4gKFN0cmluZykgX25hbWVzcGFjZVN0YWNrLmdldCggX2N1cnJlbnRNYXBwaW5nICsgNiApOwotICAgIH0KLQotICAgIFN0cmluZyBtYXBwaW5nVXJpICggKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IGhhc01hcHBpbmcoKTsKLSAgICAgICAgcmV0dXJuIChTdHJpbmcpIF9uYW1lc3BhY2VTdGFjay5nZXQoIF9jdXJyZW50TWFwcGluZyArIDcgKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbWFwcGluZ1ByZXZQcmVmaXhVcmkgKCApCi0gICAgewotICAgICAgICBhc3NlcnQgaGFzTWFwcGluZygpOwotICAgICAgICByZXR1cm4gKFN0cmluZykgX25hbWVzcGFjZVN0YWNrLmdldCggX2N1cnJlbnRNYXBwaW5nICsgNSApOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8KLSAgICAvLwotCi0gICAgcHJpdmF0ZSBmaW5hbCB2b2lkIHB1c2hNYXBwaW5ncyAoIENvbnRhaW5lciBjLCBib29sZWFuIGVuc3VyZURlZmF1bHRFbXB0eSApCi0gICAgewotICAgICAgICBfbmFtZXNwYWNlU3RhY2suYWRkKCBudWxsICk7Ci0KLSAgICAgICAgZm9yICggOyBjICE9IG51bGwgOyBjID0gYy5nZXRDb250YWluZXIoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5hbWVzcGFjZXM6Ci0gICAgICAgICAgICBmb3IgKCBTcGxheSBzID0gYy5uZXh0U3BsYXkoKSA7IHMuaXNBdHRyKCkgOyBzID0gcy5uZXh0U3BsYXkoKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHMuaXNYbWxucygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgWG1sbnMgeCA9IChYbWxucykgczsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IHguZ2V0TG9jYWwoKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHVyaSA9IHguZ2V0VXJpKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGVuc3VyZURlZmF1bHRFbXB0eSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeC5sZW5ndGgoKSA9PSAwICYmIHVyaS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBwcmVmaXggaXMgbm90IGFscmVhZHkgbWFwcGVkIGluCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgZnJhbWUKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKCBpdGVyYXRlTWFwcGluZ3MoKSA7IGhhc01hcHBpbmcoKSA7IG5leHRNYXBwaW5nKCkgKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcHBpbmdQcmVmaXgoKS5lcXVhbHMoIHByZWZpeCApKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIG5hbWVzcGFjZXM7Ci0KLSAgICAgICAgICAgICAgICAgICAgYWRkTWFwcGluZyggcHJlZml4LCB1cmkgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFB1c2ggYWxsIGFuY2VzdG9ycyB0aGUgZmlyc3QgdGltZQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIV9maXJzdFB1c2gpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZW5zdXJlRGVmYXVsdEVtcHR5KQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgZGVmYXVsdFVyaSA9IChTdHJpbmcpIF9wcmVmaXhNYXAuZ2V0KCAiIiApOwotCi0gICAgICAgICAgICAvLyBJIG1hcCB0aGUgZGVmYXVsdCB0byAiIiBhdCB0aGUgdmVyeSBiZWdpbm5pbmcKLSAgICAgICAgICAgIGFzc2VydCBkZWZhdWx0VXJpICE9IG51bGw7Ci0KLSAgICAgICAgICAgIGlmIChkZWZhdWx0VXJpLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICAgICAgICBhZGRNYXBwaW5nKCAiIiwgIiIgKTsKLSAgICAgICAgfQotCi0gICAgICAgIF9maXJzdFB1c2ggPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGZpbmFsIHZvaWQgZHVtcE1hcHBpbmdzICggKQotICAgIHsKLSAgICAgICAgZm9yICggaW50IGkgPSBfbmFtZXNwYWNlU3RhY2suc2l6ZSgpIDsgaSA+IDAgOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfbmFtZXNwYWNlU3RhY2suZ2V0KCBpIC0gMSApID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiLS0tLS0tLS0tLS0tLS0tLSIgKTsKLSAgICAgICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoICJNYXBwaW5nOiAiICk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCBfbmFtZXNwYWNlU3RhY2suZ2V0KCBpIC0gMiApICk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCAiIC0+ICIgKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIF9uYW1lc3BhY2VTdGFjay5nZXQoIGkgLSAxICkgKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwotCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCAiUHJlZml4IFVuZG86ICIgKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIF9uYW1lc3BhY2VTdGFjay5nZXQoIGkgLSA0ICkgKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoICIgLT4gIiApOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCggX25hbWVzcGFjZVN0YWNrLmdldCggaSAtIDMgKSApOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7Ci0KLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoICJVcmkgUmVuYW1lOiAiICk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCBfbmFtZXNwYWNlU3RhY2suZ2V0KCBpIC0gNSApICk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCAiIC0+ICIgKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIF9uYW1lc3BhY2VTdGFjay5nZXQoIGkgLSA2ICkgKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigpOwotCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCAiVXJpVW5kbzogIiApOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCggX25hbWVzcGFjZVN0YWNrLmdldCggaSAtIDcgKSApOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCggIiAtPiAiICk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCBfbmFtZXNwYWNlU3RhY2suZ2V0KCBpIC0gOCApICk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCk7Ci0KLSAgICAgICAgICAgIGkgLT0gODsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwgdm9pZCBhZGRNYXBwaW5nICggU3RyaW5nIHByZWZpeCwgU3RyaW5nIHVyaSApCi0gICAgewotICAgICAgICBhc3NlcnQgdXJpICE9IG51bGw7Ci0gICAgICAgIGFzc2VydCBwcmVmaXggIT0gbnVsbDsKLQotICAgICAgICAvLyBJZiB0aGUgcHJlZml4IGJlaW5nIG1hcHBlZCBoZXJlIGlzIGFscmVhZHkgbWFwcGVkIHRvIGEgdXJpLAotICAgICAgICAvLyB0aGF0IHVyaSB3aWxsIGVpdGhlciBnbyBvdXQgb2Ygc2NvcGUgb3IgYmUgbWFwcGVkIHRvIGFub3RoZXIKLSAgICAgICAgLy8gcHJlZml4LgotCi0gICAgICAgIFN0cmluZyByZW5hbWVVcmkgPSAoU3RyaW5nKSBfcHJlZml4TWFwLmdldCggcHJlZml4ICk7Ci0gICAgICAgIFN0cmluZyByZW5hbWVQcmVmaXggPSBudWxsOwotCi0gICAgICAgIGlmIChyZW5hbWVVcmkgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gU2VlIGlmIHRoaXMgcHJlZml4IGlzIGFscmVhZHkgbWFwcGVkIHRvIHRoaXMgdXJpLiAgSWYKLSAgICAgICAgICAgIC8vIHNvLCB0aGVuIGFkZCB0byB0aGUgc3RhY2ssIGJ1dCB0aGVyZSBpcyBub3RoaW5nIHRvIHJlbmFtZQotICAgICAgICAKLSAgICAgICAgICAgIGlmIChyZW5hbWVVcmkuZXF1YWxzKCB1cmkgKSkKLSAgICAgICAgICAgICAgICByZW5hbWVVcmkgPSBudWxsOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBpID0gX25hbWVzcGFjZVN0YWNrLnNpemUoKTsKLQotICAgICAgICAgICAgICAgIHdoaWxlICggaSA+IDAgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKF9uYW1lc3BhY2VTdGFjay5nZXQoIGkgLSAxICkgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaS0tOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAoX25hbWVzcGFjZVN0YWNrLmdldCggaSAtIDcgKS5lcXVhbHMoIHJlbmFtZVVyaSApKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZW5hbWVQcmVmaXggPSAoU3RyaW5nKSBfbmFtZXNwYWNlU3RhY2suZ2V0KCBpIC0gOCApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVuYW1lUHJlZml4ID09IG51bGwgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFyZW5hbWVQcmVmaXguZXF1YWxzKCBwcmVmaXggKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGkgLT0gODsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBhc3NlcnQgaSA+IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBfbmFtZXNwYWNlU3RhY2suYWRkKCBfdXJpTWFwLmdldCggdXJpICkgKTsKLSAgICAgICAgX25hbWVzcGFjZVN0YWNrLmFkZCggdXJpICk7Ci0KLSAgICAgICAgaWYgKHJlbmFtZVVyaSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBfbmFtZXNwYWNlU3RhY2suYWRkKCBfdXJpTWFwLmdldCggcmVuYW1lVXJpICkgKTsKLSAgICAgICAgICAgIF9uYW1lc3BhY2VTdGFjay5hZGQoIHJlbmFtZVVyaSApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgX25hbWVzcGFjZVN0YWNrLmFkZCggbnVsbCApOwotICAgICAgICAgICAgX25hbWVzcGFjZVN0YWNrLmFkZCggbnVsbCApOwotICAgICAgICB9Ci0KLSAgICAgICAgX25hbWVzcGFjZVN0YWNrLmFkZCggcHJlZml4ICk7Ci0gICAgICAgIF9uYW1lc3BhY2VTdGFjay5hZGQoIF9wcmVmaXhNYXAuZ2V0KCBwcmVmaXggKSApOwotCi0gICAgICAgIF9uYW1lc3BhY2VTdGFjay5hZGQoIHByZWZpeCApOwotICAgICAgICBfbmFtZXNwYWNlU3RhY2suYWRkKCB1cmkgKTsKLQotICAgICAgICBfdXJpTWFwLnB1dCggdXJpLCBwcmVmaXggKTsKLSAgICAgICAgX3ByZWZpeE1hcC5wdXQoIHByZWZpeCwgdXJpICk7Ci0KLSAgICAgICAgaWYgKHJlbmFtZVVyaSAhPSBudWxsKQotICAgICAgICAgICAgX3VyaU1hcC5wdXQoIHJlbmFtZVVyaSwgcmVuYW1lUHJlZml4ICk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBmaW5hbCB2b2lkIHBvcE1hcHBpbmdzICggKQotICAgIHsKLSAgICAgICAgZm9yICggOyA7ICkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGkgPSBfbmFtZXNwYWNlU3RhY2suc2l6ZSgpOwotCi0gICAgICAgICAgICBpZiAoaSA9PSAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBpZiAoX25hbWVzcGFjZVN0YWNrLmdldCggaSAtIDEgKSA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9uYW1lc3BhY2VTdGFjay5yZW1vdmUoIGkgLSAxICk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIE9iamVjdCBvbGRVcmkgPSBfbmFtZXNwYWNlU3RhY2suZ2V0KCBpIC0gNyApOyAKLSAgICAgICAgICAgIE9iamVjdCBvbGRQcmVmaXggPSBfbmFtZXNwYWNlU3RhY2suZ2V0KCBpIC0gOCApOyAKLQotICAgICAgICAgICAgaWYgKG9sZFByZWZpeCA9PSBudWxsKSAKLSAgICAgICAgICAgICAgICBfdXJpTWFwLnJlbW92ZSggb2xkVXJpICk7IAotICAgICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgICAgICBfdXJpTWFwLnB1dCggb2xkVXJpLCBvbGRQcmVmaXggKTsgCi0KLSAgICAgICAgICAgIG9sZFByZWZpeCA9IF9uYW1lc3BhY2VTdGFjay5nZXQoIGkgLSA0ICk7IAotICAgICAgICAgICAgb2xkVXJpID0gX25hbWVzcGFjZVN0YWNrLmdldCggaSAtIDMgKTsgCi0KLSAgICAgICAgICAgIGlmIChvbGRVcmkgPT0gbnVsbCkgCi0gICAgICAgICAgICAgICAgX3ByZWZpeE1hcC5yZW1vdmUoIG9sZFByZWZpeCApOyAKLSAgICAgICAgICAgIGVsc2UgCi0gICAgICAgICAgICAgICAgX3ByZWZpeE1hcC5wdXQoIG9sZFByZWZpeCwgb2xkVXJpICk7IAotCi0gICAgICAgICAgICBTdHJpbmcgdXJpID0gKFN0cmluZykgX25hbWVzcGFjZVN0YWNrLmdldCggaSAtIDUgKTsKLQotICAgICAgICAgICAgaWYgKHVyaSAhPSBudWxsKQotICAgICAgICAgICAgICAgIF91cmlNYXAucHV0KCB1cmksIF9uYW1lc3BhY2VTdGFjay5nZXQoIGkgLSA2ICkgKTsKLQotICAgICAgICAgICAgLy8gSGFoYWhhaGFoYWhhIC0tIDotKAotICAgICAgICAgICAgX25hbWVzcGFjZVN0YWNrLnJlbW92ZSggaSAtIDEgKTsKLSAgICAgICAgICAgIF9uYW1lc3BhY2VTdGFjay5yZW1vdmUoIGkgLSAyICk7Ci0gICAgICAgICAgICBfbmFtZXNwYWNlU3RhY2sucmVtb3ZlKCBpIC0gMyApOwotICAgICAgICAgICAgX25hbWVzcGFjZVN0YWNrLnJlbW92ZSggaSAtIDQgKTsKLSAgICAgICAgICAgIF9uYW1lc3BhY2VTdGFjay5yZW1vdmUoIGkgLSA1ICk7Ci0gICAgICAgICAgICBfbmFtZXNwYWNlU3RhY2sucmVtb3ZlKCBpIC0gNiApOwotICAgICAgICAgICAgX25hbWVzcGFjZVN0YWNrLnJlbW92ZSggaSAtIDcgKTsKLSAgICAgICAgICAgIF9uYW1lc3BhY2VTdGFjay5yZW1vdmUoIGkgLSA4ICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIGdldFVyaU1hcHBpbmcgKCBTdHJpbmcgdXJpICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCBfdXJpTWFwLmdldCggdXJpICkgIT0gbnVsbDsKLSAgICAgICAgcmV0dXJuIChTdHJpbmcpIF91cmlNYXAuZ2V0KCB1cmkgKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgZmluYWwgYm9vbGVhbiB0cnlQcmVmaXggKCBTdHJpbmcgcHJlZml4ICkKLSAgICB7Ci0gICAgICAgIGlmIChwcmVmaXggPT0gbnVsbCB8fCBTcGxheS5iZWdpbnNXaXRoWG1sKCBwcmVmaXggKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBTdHJpbmcgZXhpc3RpbmdVcmkgPSAoU3RyaW5nKSBfcHJlZml4TWFwLmdldCggcHJlZml4ICk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHByZWZpeCBpcyBjdXJyZW50bHkgbWFwcGVkLCB0aGVuIHRyeSBhbm90aGVyIHByZWZpeC4gIEEKLSAgICAgICAgLy8gc3BlY2lhbCBjYXNlIGlzIHRoYXQgb2YgdHJ5aW5nIHRvIG1hcCB0aGUgZGVmYXVsdCBwcmVmaXggKCIiKS4KLSAgICAgICAgLy8gSGVyZSwgdGhlcmUgYWx3YXlzIGV4aXN0cyBhIGRlZmF1bHQgbWFwcGluZy4gIElmIHRoaXMgaXMgdGhlCi0gICAgICAgIC8vIG1hcHBpbmcgd2UgZm91bmQsIHRoZW4gcmVtYXAgaXQgYW55d2F5cy4gSSB1c2UgIT0gdG8gY29tcGFyZQotICAgICAgICAvLyBzdHJpbmdzIGJlY2F1c2UgSSB3YW50IHRvIHRlc3QgZm9yIHRoZSBzcGVjaWZpYyBpbml0aWFsIGRlZmF1bHQKLSAgICAgICAgLy8gdXJpIEkgYWRkZWQgd2hlbiBJIGluaXRpYWxpemVkIHRoZSBzYXZlci4KLQotICAgICAgICBpZiAoZXhpc3RpbmdVcmkgIT0gbnVsbCAmJgotICAgICAgICAgICAgICAocHJlZml4Lmxlbmd0aCgpID4gMCB8fCBleGlzdGluZ1VyaSAhPSBfaW5pdGlhbERlZmF1bHRVcmkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgZmluYWwgU3RyaW5nIGVuc3VyZU1hcHBpbmcgKAotICAgICAgICBTdHJpbmcgdXJpLCBTdHJpbmcgY2FuZGlkYXRlUHJlZml4LAotICAgICAgICBib29sZWFuIGNvbnNpZGVyQ3JlYXRpbmdEZWZhdWx0LCBib29sZWFuIG11c3RIYXZlUHJlZml4ICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCB1cmkgIT0gbnVsbDsKLSAgICAgICAgYXNzZXJ0IGNhbmRpZGF0ZVByZWZpeCA9PSBudWxsIHx8IGNhbmRpZGF0ZVByZWZpeC5sZW5ndGgoKSA+IDA7Ci0KLSAgICAgICAgLy8gQ2FuIGJlIGNhbGxlZCBmb3Igbm8tbmFtZXNwYWNlZCB0aGluZ3MKLQotICAgICAgICBpZiAodXJpLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICBTdHJpbmcgcHJlZml4ID0gKFN0cmluZykgX3VyaU1hcC5nZXQoIHVyaSApOwotCi0gICAgICAgIGlmIChwcmVmaXggIT0gbnVsbCAmJiAocHJlZml4Lmxlbmd0aCgpID4gMCB8fCAhbXVzdEhhdmVQcmVmaXgpKQotICAgICAgICAgICAgcmV0dXJuIHByZWZpeDsKLQotICAgICAgICAvLwotICAgICAgICAvLyBJIHRyeSBwcmVmaXhlcyBmcm9tIGEgbnVtYmVyIG9mIHBsYWNlcywgaW4gb3JkZXI6Ci0gICAgICAgIC8vCi0gICAgICAgIC8vICAxKSBXaGF0IHdhcyBwYXNzZWQgaW4KLSAgICAgICAgLy8gIDIpIFRoZSBvcHRpb25hbCBzdWdnZXN0aW9ucyAoZm9yIHVyaSdzKQotICAgICAgICAvLyAgMykgVGhlIGRlZmF1bHQgbWFwcGluZyBpcyBhbGxvd2VkCi0gICAgICAgIC8vICA0KSBucyMrKwotICAgICAgICAvLwotICAgICAgICAKLSAgICAgICAgaWYgKGNhbmRpZGF0ZVByZWZpeCA9PSBudWxsIHx8ICF0cnlQcmVmaXgoIGNhbmRpZGF0ZVByZWZpeCApKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX3N1Z2dlc3RlZFByZWZpeGVzICE9IG51bGwgJiYKLSAgICAgICAgICAgICAgICAgICAgX3N1Z2dlc3RlZFByZWZpeGVzLmNvbnRhaW5zS2V5KCB1cmkgKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5UHJlZml4KCAoU3RyaW5nKSBfc3VnZ2VzdGVkUHJlZml4ZXMuZ2V0KCB1cmkgKSApKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhbmRpZGF0ZVByZWZpeCA9IChTdHJpbmcpIF9zdWdnZXN0ZWRQcmVmaXhlcy5nZXQoIHVyaSApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoY29uc2lkZXJDcmVhdGluZ0RlZmF1bHQgJiYgX3VzZURlZmF1bHROYW1lc3BhY2UgJiYgdHJ5UHJlZml4KCAiIiApKQotICAgICAgICAgICAgICAgIGNhbmRpZGF0ZVByZWZpeCA9ICIiOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBiYXNlUHJlZml4ID0gUU5hbWVIZWxwZXIuc3VnZ2VzdFByZWZpeCggdXJpICk7Ci0gICAgICAgICAgICAgICAgY2FuZGlkYXRlUHJlZml4ID0gYmFzZVByZWZpeDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKCBpbnQgaSA9IDEgOyA7IGkrKyApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAodHJ5UHJlZml4KCBjYW5kaWRhdGVQcmVmaXggKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlUHJlZml4ID0gYmFzZVByZWZpeCArIGk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgYXNzZXJ0IGNhbmRpZGF0ZVByZWZpeCAhPSBudWxsOwotCi0gICAgICAgIHN5bnRoZXRpY05hbWVzcGFjZSggY2FuZGlkYXRlUHJlZml4LCB1cmksIGNvbnNpZGVyQ3JlYXRpbmdEZWZhdWx0ICk7Ci0KLSAgICAgICAgYWRkTWFwcGluZyggY2FuZGlkYXRlUHJlZml4LCB1cmkgKTsKLQotICAgICAgICByZXR1cm4gY2FuZGlkYXRlUHJlZml4OwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZmluZF9wcmVmaXhfZm9yX25zdXJpICggU3RyaW5nIHVyaSwgU3RyaW5nIHByZWZpeCApCi0gICAgewotICAgICAgICBhc3NlcnQgdXJpICE9IG51bGw7Ci0gICAgICAgIGFzc2VydCBwcmVmaXggPT0gbnVsbCB8fCBwcmVmaXgubGVuZ3RoKCkgPiAwOwotCi0gICAgICAgIGJvb2xlYW4gZW1wdHlVcmkgPSB1cmkubGVuZ3RoKCkgPT0gMDsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBlbnN1cmVNYXBwaW5nKCB1cmksIHByZWZpeCwgZW1wdHlVcmksICFlbXB0eVVyaSApOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgZ2V0TmFtZXNwYWNlRm9yUHJlZml4ICggU3RyaW5nIHByZWZpeCApCi0gICAgewotICAgICAgICBpZiAocHJlZml4ICE9IG51bGwgJiYgcHJlZml4LmVxdWFscyggInhtbCIgKSkKLSAgICAgICAgICAgIHJldHVybiBTcGxheS5feG1sMTk5OFVyaTsKLQotICAgICAgICByZXR1cm4gKFN0cmluZykgX3ByZWZpeE1hcC5nZXQoIHByZWZpeCApOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBmaW5hbCBTdHJpbmcgZW5zdXJlRnJhZ21lbnROYW1lc3BhY2UgKCApCi0gICAgewotICAgICAgICBpZiAoX2ZyYWdtZW50LmdldE5hbWVzcGFjZVVSSSgpLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICByZXR1cm4gIiI7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gZW5zdXJlTWFwcGluZyggX2ZyYWdtZW50LmdldE5hbWVzcGFjZVVSSSgpLCAiZnJhZyIsIGZhbHNlLCBmYWxzZSApOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEEgU2F2ZXIgd2hpY2ggcmVjb3JkcyBzeW50aGV0aWMgbmFtZXNwYWNlcwotICAgICAqLwotICAgIAotICAgIHN0YXRpYyBmaW5hbCBjbGFzcyBTeW50aE5hbWVzcGFjZVNhdmVyIGV4dGVuZHMgU2F2ZXIKLSAgICB7Ci0gICAgICAgIExpbmtlZEhhc2hNYXAgX3N5bnRoTmFtZXNwYWNlcyA9IG5ldyBMaW5rZWRIYXNoTWFwKCk7Ci0gICAgICAgIAotICAgICAgICBTeW50aE5hbWVzcGFjZVNhdmVyICggUm9vdCByLCBTcGxheSBzLCBpbnQgcCwgWG1sT3B0aW9ucyBvcHRpb25zICkKLSAgICAgICAgewotICAgICAgICAgICAgc3VwZXIoIHIsIHMsIHAsIG9wdGlvbnMgKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgc3ludGhldGljTmFtZXNwYWNlICgKLSAgICAgICAgICAgIFN0cmluZyBwcmVmaXgsIFN0cmluZyB1cmksIGJvb2xlYW4gY29uc2lkZXJDcmVhdGluZ0RlZmF1bHQgKQotICAgICAgICB7Ci0gICAgICAgICAgICBfc3ludGhOYW1lc3BhY2VzLnB1dCggdXJpLCBjb25zaWRlckNyZWF0aW5nRGVmYXVsdCA/ICJ1c2VEZWZhdWx0IiA6IG51bGwgKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdFhtbG5zRnJhZ21lbnQgKCBTcGxheSBzICkgeyB9Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIGVtaXRBdHRyRnJhZ21lbnQgKCBTcGxheSBzICkgeyB9Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIGVtaXRUZXh0RnJhZ21lbnQgKCBTcGxheSBzLCBpbnQgcCwgaW50IGNjaCApIHsgfQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBlbWl0Q29tbWVudEZyYWdtZW50ICggU3BsYXkgcyApIHsgfQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBlbWl0UHJvY2luc3RGcmFnbWVudCAoIFNwbGF5IHMgKSB7IH0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdENvbW1lbnQgKCBTcGxheSBzICkgeyB9Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIGVtaXRUZXh0QWZ0ZXIgKCBTcGxheSBzLCBpbnQgcCwgaW50IGNjaCApIHsgfQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBlbWl0RW5kICggU3BsYXkgcywgUU5hbWUgbmFtZSApIHsgfQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBlbWl0UHJvY2luc3QgKCBTcGxheSBzICkgeyB9Ci0gICAgICAgIHByb3RlY3RlZCB2b2lkIGVtaXRDb250YWluZXIgKCBDb250YWluZXIgYywgUU5hbWUgbmFtZSApIHsgfQotICAgICAgICAKLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdERvY1R5cGUoCi0gICAgICAgICAgICBTdHJpbmcgZG9jdHlwZU5hbWUsIFN0cmluZyBwdWJsaWNJRCwgU3RyaW5nIHN5c3RlbUlEICkgeyB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQSBTYXZlciB3aGljaCBnZW5lcmF0ZXMgY2hhcmFjdGVycy4KLSAgICAgKi8KLQotICAgIHN0YXRpYyBmaW5hbCBjbGFzcyBUZXh0U2F2ZXIgZXh0ZW5kcyBTYXZlcgotICAgIHsKLSAgICAgICAgVGV4dFNhdmVyICgKLSAgICAgICAgICAgIFJvb3QgciwgU3BsYXkgcywgaW50IHAsIFhtbE9wdGlvbnMgb3B0aW9ucywgU3RyaW5nIGVuY29kaW5nICkKLSAgICAgICAgewotICAgICAgICAgICAgc3VwZXIoIHIsIHMsIHAsIG9wdGlvbnMgKTsKLQotICAgICAgICAgICAgX3dhbnRGcmFnVGVzdCA9IHRydWU7Ci0KLSAgICAgICAgICAgIGlmIChlbmNvZGluZyAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyB2ZXJzaW9uID0gci5fcHJvcHMuZ2V0VmVyc2lvbigpOwotCi0gICAgICAgICAgICAgICAgaWYgKHZlcnNpb24gPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9ICIxLjAiOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGVtaXQoICI8P3htbCB2ZXJzaW9uPVwiIiApOwotICAgICAgICAgICAgICAgIGVtaXQoIHZlcnNpb24gKTsKLSAgICAgICAgICAgICAgICBlbWl0KCAiXCIgZW5jb2Rpbmc9XCIiICsgZW5jb2RpbmcgKyAiXCI/PiIgKyBfbmV3TGluZSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdENvbnRhaW5lciAoIENvbnRhaW5lciBjLCBRTmFtZSBuYW1lICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGMuaXNCZWdpbigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGVtaXRDb250YWluZXJIZWxwZXIoIGMsIG5hbWUsIG51bGwsIG51bGwsIGZhbHNlICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoYy5pc0xlYWYoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBjY2ggPSBfdGV4dCA9PSBudWxsID8gYy5nZXRDY2hWYWx1ZSgpIDogX3RleHQubGVuZ3RoKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNjaCA+IDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVtaXQoICc+JyApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RleHQgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0KCBnZXRSb290KCkuZ2V0Q3AoIGMgKSwgY2NoICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdCggX3RleHQgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZW50aXRpemVDb250ZW50KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVtaXQoICI8LyIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVtaXROYW1lKCBuYW1lICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgZW1pdCggJy8nICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydCAhYy5pc0xlYWYoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoYy5nZXRDY2hBZnRlcigpID09IDAgJiYgYy5uZXh0Tm9uQXR0clNwbGF5KCkuaXNFbmQoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZW1pdCggJy8nICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBfc2tpcENvbnRhaW5lckZpbmlzaCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBlbWl0KCAnPicgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQgYy5pc0RvYygpOwotCi0gICAgICAgICAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgZW1pdENvbnRhaW5lckhlbHBlciggYywgbmFtZSwgbnVsbCwgbnVsbCwgdHJ1ZSApOwotCi0gICAgICAgICAgICAgICAgaWYgKF90ZXh0ID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIGVtaXQoIGdldFJvb3QoKS5nZXRDcCggYyApLCBjLmdldENjaCgpICk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlbWl0KCBfdGV4dCApOwotCi0gICAgICAgICAgICAgICAgZW50aXRpemVDb250ZW50KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgZW1pdEF0dHJIZWxwZXIgKCBTcGxheSBzLCBTdHJpbmcgaW52YWxpZFZhbHVlICkKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0IHMuaXNOb3JtYWxBdHRyKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGVtaXQoICcgJyApOwotICAgICAgICAgICAgZW1pdE5hbWUoIHMuZ2V0TmFtZSgpICk7Ci0gICAgICAgICAgICBlbWl0KCAiPVwiIiApOwotCi0gICAgICAgICAgICBpZiAoaW52YWxpZFZhbHVlICE9IG51bGwpCi0gICAgICAgICAgICAgICAgZW1pdCggaW52YWxpZFZhbHVlICk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdCggZ2V0Um9vdCgpLmdldENwKCBzICksIHMuZ2V0Q2NoKCkgKTsKLQotICAgICAgICAgICAgZW50aXRpemVBdHRyVmFsdWUoKTsKLQotICAgICAgICAgICAgZW1pdCggJyInICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgZW1pdE5hbWVzcGFjZXNIZWxwZXIgKCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoIGl0ZXJhdGVNYXBwaW5ncygpIDsgaGFzTWFwcGluZygpIDsgbmV4dE1hcHBpbmcoKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZW1pdCggJyAnICk7Ci0gICAgICAgICAgICAgICAgZW1pdFhtbG5zKCBtYXBwaW5nUHJlZml4KCksIG1hcHBpbmdVcmkoKSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgIHByaXZhdGUgdm9pZCBlbWl0Q29udGFpbmVySGVscGVyICgKLSAgICAgICAgICAgIENvbnRhaW5lciBjLCBRTmFtZSBuYW1lLAotICAgICAgICAgICAgU3BsYXkgZXh0cmFBdHRyLCBTdHJpbmdCdWZmZXIgZXh0cmFBdHRyVGV4dCwKLSAgICAgICAgICAgIGJvb2xlYW4gY2xvc2UgKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgbmFtZSAhPSBudWxsOwotCi0gICAgICAgICAgICBlbWl0KCAnPCcgKTsKLSAgICAgICAgICAgIGVtaXROYW1lKCBuYW1lICk7Ci0KLSAgICAgICAgICAgIGlmIChfc2F2ZU5hbWVzcGFjZXNGaXJzdCkKLSAgICAgICAgICAgICAgICBlbWl0TmFtZXNwYWNlc0hlbHBlcigpOwotCi0gICAgICAgICAgICBpZiAoYyAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoIEl0ZXJhdG9yIGkgPSBfYXR0cnMua2V5U2V0KCkuaXRlcmF0b3IoKSA7IGkuaGFzTmV4dCgpIDsgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3BsYXkgcyA9IChTcGxheSkgaS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRBdHRySGVscGVyKCBzLCAoU3RyaW5nKSBfYXR0cnMuZ2V0KCBzICkgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChleHRyYUF0dHIgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlbWl0QXR0ckhlbHBlcigKLSAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyLAotICAgICAgICAgICAgICAgICAgICBleHRyYUF0dHJUZXh0ID09IG51bGwgPyBudWxsIDogZXh0cmFBdHRyVGV4dC50b1N0cmluZygpICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghX3NhdmVOYW1lc3BhY2VzRmlyc3QpCi0gICAgICAgICAgICAgICAgZW1pdE5hbWVzcGFjZXNIZWxwZXIoKTsKLQotICAgICAgICAgICAgaWYgKGNsb3NlKQotICAgICAgICAgICAgICAgIGVtaXQoICc+JyApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdFRleHQgKCBTcGxheSBzLCBpbnQgcCwgaW50IGNjaCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVtaXQoIHMuZ2V0Q3BGb3JQb3MoIGdldFJvb3QoKSwgcCApLCBjY2ggKTsKLSAgICAgICAgICAgIGVudGl0aXplQ29udGVudCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdFRleHRBZnRlciAoIFNwbGF5IHMsIGludCBwLCBpbnQgY2NoICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKF90ZXh0ID09IG51bGwpCi0gICAgICAgICAgICAgICAgZW1pdFRleHQoIHMsIHAsIGNjaCApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGVtaXQoIF90ZXh0ICk7Ci0gICAgICAgICAgICAgICAgZW50aXRpemVDb250ZW50KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBlbWl0VGV4dEZyYWdtZW50ICggU3BsYXkgcywgaW50IHAsIGludCBjY2ggKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbWl0Q29udGFpbmVySGVscGVyKCBudWxsLCBfZnJhZ21lbnQsIG51bGwsIG51bGwsIGZhbHNlICk7Ci0KLSAgICAgICAgICAgIGlmIChfdGV4dCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChfdGV4dC5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBlbWl0KCAiPiIgKTsKLSAgICAgICAgICAgICAgICAgICAgZW1pdCggX3RleHQgKTsKLSAgICAgICAgICAgICAgICAgICAgZW1pdEVuZEhlbHBlciggX2ZyYWdtZW50ICk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChzICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNjaCA+IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBlbWl0KCAiPiIgKTsKLSAgICAgICAgICAgICAgICAgICAgZW1pdFRleHQoIHMsIHAsIGNjaCApOwotICAgICAgICAgICAgICAgICAgICBlbWl0RW5kSGVscGVyKCBfZnJhZ21lbnQgKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgZW1pdCggIi8+IiApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdEF0dHJGcmFnbWVudCAoIFNwbGF5IHMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbWl0Q29udGFpbmVySGVscGVyKCBudWxsLCBfZnJhZ21lbnQsIHMsIF90ZXh0LCBmYWxzZSApOwotICAgICAgICAgICAgZW1pdCggIi8+IiApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdFhtbG5zRnJhZ21lbnQgKCBTcGxheSBzICkKLSAgICAgICAgewotICAgICAgICAgICAgZW1pdENvbnRhaW5lckhlbHBlciggbnVsbCwgX2ZyYWdtZW50LCBudWxsLCBudWxsLCBmYWxzZSApOwotICAgICAgICAgICAgZW1pdCggIi8+IiApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdENvbW1lbnRGcmFnbWVudCAoIFNwbGF5IHMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbWl0Q29udGFpbmVySGVscGVyKCBudWxsLCBfZnJhZ21lbnQsIG51bGwsIG51bGwsIHRydWUgKTsKLSAgICAgICAgICAgIGVtaXRDb21tZW50KCBzICk7Ci0gICAgICAgICAgICBlbWl0RW5kSGVscGVyKCBfZnJhZ21lbnQgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGVtaXRQcm9jaW5zdEZyYWdtZW50ICggU3BsYXkgcyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVtaXRDb250YWluZXJIZWxwZXIoIG51bGwsIF9mcmFnbWVudCwgbnVsbCwgbnVsbCwgdHJ1ZSApOwotICAgICAgICAgICAgZW1pdFByb2NpbnN0KCBzICk7Ci0gICAgICAgICAgICBlbWl0RW5kSGVscGVyKCBfZnJhZ21lbnQgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGVtaXRYbWxucyAoIFN0cmluZyBwcmVmaXgsIFN0cmluZyB1cmkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgcHJlZml4ICE9IG51bGw7Ci0gICAgICAgICAgICBhc3NlcnQgdXJpICE9IG51bGw7Ci0KLSAgICAgICAgICAgIGVtaXQoICJ4bWxucyIgKTsKLQotICAgICAgICAgICAgaWYgKHByZWZpeC5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZW1pdCggIjoiICk7Ci0gICAgICAgICAgICAgICAgZW1pdCggcHJlZml4ICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVtaXQoICI9XCIiICk7Ci0KLSAgICAgICAgICAgIC8vIFRPRE8gLSBtdXN0IGVuY29kZSB1cmkgcHJvcGVybHkKLQotICAgICAgICAgICAgZW1pdCggdXJpICk7Ci0gICAgICAgICAgICBlbnRpdGl6ZUF0dHJWYWx1ZSgpOwotCi0gICAgICAgICAgICBlbWl0KCAnIicgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGVtaXRFbmRIZWxwZXIgKCBRTmFtZSBuYW1lICkKLSAgICAgICAgewotICAgICAgICAgICAgZW1pdCggIjwvIiApOwotICAgICAgICAgICAgZW1pdE5hbWUoIG5hbWUgKTsKLSAgICAgICAgICAgIGVtaXQoICc+JyApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdEVuZCAoIFNwbGF5IHMsIFFOYW1lIG5hbWUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobmFtZSAhPSBudWxsKQotICAgICAgICAgICAgICAgIGVtaXRFbmRIZWxwZXIoIG5hbWUgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBlbWl0TGl0ZXJhbCAoIFN0cmluZyBsaXRlcmFsICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGxpdGVyYWwuaW5kZXhPZiggIlwiIiApIDwgMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlbWl0KCAiXCIiICk7Ci0gICAgICAgICAgICAgICAgZW1pdCggbGl0ZXJhbCApOwotICAgICAgICAgICAgICAgIGVtaXQoICJcIiIgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlbWl0KCAiJyIgKTsKLSAgICAgICAgICAgICAgICBlbWl0KCBsaXRlcmFsICk7Ci0gICAgICAgICAgICAgICAgZW1pdCggIiciICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBlbWl0RG9jVHlwZSgKLSAgICAgICAgICAgIFN0cmluZyBkb2N0eXBlTmFtZSwgU3RyaW5nIHB1YmxpY0lELCBTdHJpbmcgc3lzdGVtSUQgKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgZG9jdHlwZU5hbWUgIT0gbnVsbDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZW1pdCggIjwhRE9DVFlQRSAiICk7Ci0gICAgICAgICAgICBlbWl0KCBkb2N0eXBlTmFtZSApOwotCi0gICAgICAgICAgICBpZiAocHVibGljSUQgPT0gbnVsbCAmJiBzeXN0ZW1JRCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGVtaXQoICIgU1lTVEVNICIgKTsKLSAgICAgICAgICAgICAgICBlbWl0TGl0ZXJhbCggc3lzdGVtSUQgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHB1YmxpY0lEICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZW1pdCggIiBQVUJMSUMgIiApOwotICAgICAgICAgICAgICAgIGVtaXRMaXRlcmFsKCBwdWJsaWNJRCApOwotICAgICAgICAgICAgICAgIGVtaXQoICIgIiApOwotICAgICAgICAgICAgICAgIGVtaXRMaXRlcmFsKCBzeXN0ZW1JRCApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBlbWl0KCAiPiIgKyBfbmV3TGluZSApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBlbWl0Q29tbWVudCAoIFNwbGF5IHMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgcy5pc0NvbW1lbnQoKTsKLSAgICAgICAgICAgIGVtaXQoICI8IS0tIiApOwotICAgICAgICAgICAgZW1pdCggZ2V0Um9vdCgpLmdldENwKCBzICksIHMuZ2V0Q2NoVmFsdWUoKSApOwotICAgICAgICAgICAgZW50aXRpemVDb21tZW50KCk7Ci0gICAgICAgICAgICBlbWl0KCAiLS0+IiApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdFByb2NpbnN0ICggU3BsYXkgcyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFzc2VydCBzLmlzUHJvY2luc3QoKTsKLSAgICAgICAgICAgIGVtaXQoICI8PyIgKTsKLSAgICAgICAgICAgIC8vIFRPRE8gLSBlbmNvZGluZyBpc3N1ZXMgaGVyZT8KLSAgICAgICAgICAgIGVtaXQoIHMuZ2V0TG9jYWwoKSApOwotCi0gICAgICAgICAgICBpZiAocy5nZXRDY2hWYWx1ZSgpID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlbWl0KCAiICIgKTsKLSAgICAgICAgICAgICAgICBlbWl0KCBnZXRSb290KCkuZ2V0Q3AoIHMgKSwgcy5nZXRDY2hWYWx1ZSgpICk7Ci0gICAgICAgICAgICAgICAgZW50aXRpemVQcm9jaW5zdCgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBlbWl0KCAiPz4iICk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogRW5zdXJlIHRoYXQgdGhlcmUgYXJlIGF0IGxlYXN0IGNjaCBjaGFycyBhdmFpbGFibGUgaW4gdGhlIGJ1ZmZlci4KLSAgICAgICAgICogUmV0dXJuIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGNoYXJhY3RlcnMgYXZhaWxhYmxlLiAgSWYgbGVzcyB0aGFuIGNjaCwKLSAgICAgICAgICogdGhlbiB0aGF0J3MgYWxsIHdoaWNoIHdpbGwgZXZlciBiZWNvbWUgYXZhaWxhYmxlLgotICAgICAgICAgKi8KLQotICAgICAgICBwcml2YXRlIGludCBlbnN1cmUgKCBpbnQgY2NoICkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gRXZlbiBpZiB3ZSdyZSBhc2tlZCB0byBlbnN1cmUgbm90aGluZywgc3RpbGwgdHJ5IHRvIGVuc3VyZQotICAgICAgICAgICAgLy8gYXRsZWFzdCBvbmUgY2hhcmFjdGVyIHNvIHdlIGNhbiBkZXRlcm1pbmUgaWYgd2UncmUgYXQgdGhlCi0gICAgICAgICAgICAvLyBlbmQgb2YgdGhlIHN0cmVhbS4KLQotICAgICAgICAgICAgaWYgKGNjaCA8PSAwKQotICAgICAgICAgICAgICAgIGNjaCA9IDE7Ci0KLSAgICAgICAgICAgIGludCBhdmFpbGFibGUgPSBnZXRBdmFpbGFibGUoKTsKLQotICAgICAgICAgICAgZm9yICggOyBhdmFpbGFibGUgPCBjY2ggOyBhdmFpbGFibGUgPSBnZXRBdmFpbGFibGUoKSApCi0gICAgICAgICAgICAgICAgaWYgKCFwcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBhc3NlcnQgYXZhaWxhYmxlID09IGdldEF2YWlsYWJsZSgpOwotCi0gICAgICAgICAgICBpZiAoYXZhaWxhYmxlID09IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgIHJldHVybiBhdmFpbGFibGU7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgZW1pdE5hbWUgKCBRTmFtZSBuYW1lICkKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0IG5hbWUgIT0gbnVsbDsKLQotICAgICAgICAgICAgU3RyaW5nIHVyaSA9IG5hbWUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgICAgICAgICAgIGFzc2VydCB1cmkgIT0gbnVsbDsKLQotICAgICAgICAgICAgaWYgKHVyaS5sZW5ndGgoKSAhPSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPSBnZXRVcmlNYXBwaW5nKCB1cmkgKTsKLQotICAgICAgICAgICAgICAgIGlmIChwcmVmaXgubGVuZ3RoKCkgPiAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZW1pdCggcHJlZml4ICk7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXQoICI6IiApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYXNzZXJ0IG5hbWUuZ2V0TG9jYWxQYXJ0KCkubGVuZ3RoKCkgPiAwOwotCi0gICAgICAgICAgICBlbWl0KCBuYW1lLmdldExvY2FsUGFydCgpICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGJvb2xlYW4gcHJlRW1pdCAoIGludCBjY2ggKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgY2NoID49IDA7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIF9sYXN0RW1pdENjaCA9IGNjaDsKLQotICAgICAgICAgICAgaWYgKGNjaCA9PSAwKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgICBpZiAoX2ZyZWUgPCBjY2gpCi0gICAgICAgICAgICAgICAgcmVzaXplKCBjY2gsIC0xICk7Ci0KLSAgICAgICAgICAgIGFzc2VydCBjY2ggPD0gX2ZyZWU7Ci0KLSAgICAgICAgICAgIGludCB1c2VkID0gZ2V0QXZhaWxhYmxlKCk7Ci0KLSAgICAgICAgICAgIC8vIGlmIHdlIGFyZSBhYm91dCB0byBlbWl0IGFuZCB0aGVyZSBpcyBub3RpbmcgaW4gdGhlIGJ1ZmZlciwgcmVzZXQKLSAgICAgICAgICAgIC8vIHRoZSBidWZmZXIgdG8gYmUgYXQgdGhlIGJlZ2lubmluZyBzbyBhcyB0byBub3QgZ3JvdyBpdCBhbnltb3JlCi0gICAgICAgICAgICAvLyB0aGFuIG5lZWRlZC4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHVzZWQgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQgX2luID09IF9vdXQ7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IF9mcmVlID09IF9idWYubGVuZ3RoOwotICAgICAgICAgICAgICAgIF9pbiA9IF9vdXQgPSAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBfbGFzdEVtaXRJbiA9IF9pbjsKLQotICAgICAgICAgICAgX2ZyZWUgLT0gY2NoOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhc3NlcnQgX2ZyZWUgPj0gMDsKLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGVtaXQgKCBTdHJpbmcgcyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBjY2ggPSBzID09IG51bGwgPyAwIDogcy5sZW5ndGgoKTsKLQotICAgICAgICAgICAgaWYgKHByZUVtaXQoIGNjaCApKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaW50IGNodW5rOwotCi0gICAgICAgICAgICBpZiAoX2luIDw9IF9vdXQgfHwgY2NoIDwgKGNodW5rID0gX2J1Zi5sZW5ndGggLSBfaW4pKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHMuZ2V0Q2hhcnMoIDAsIGNjaCwgX2J1ZiwgX2luICk7Ci0gICAgICAgICAgICAgICAgX2luICs9IGNjaDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzLmdldENoYXJzKCAwLCBjaHVuaywgX2J1ZiwgX2luICk7Ci0gICAgICAgICAgICAgICAgcy5nZXRDaGFycyggY2h1bmssIGNjaCwgX2J1ZiwgMCApOwotICAgICAgICAgICAgICAgIF9pbiA9IChfaW4gKyBjY2gpICUgX2J1Zi5sZW5ndGg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgZW1pdCAoIFN0cmluZ0J1ZmZlciBzYiApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBjY2ggPSBzYiA9PSBudWxsID8gMCA6IHNiLmxlbmd0aCgpOwotCi0gICAgICAgICAgICBpZiAocHJlRW1pdCggY2NoICkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpbnQgY2h1bms7Ci0KLSAgICAgICAgICAgIGlmIChfaW4gPD0gX291dCB8fCBjY2ggPCAoY2h1bmsgPSBfYnVmLmxlbmd0aCAtIF9pbikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc2IuZ2V0Q2hhcnMoIDAsIGNjaCwgX2J1ZiwgX2luICk7Ci0gICAgICAgICAgICAgICAgX2luICs9IGNjaDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzYi5nZXRDaGFycyggMCwgY2h1bmssIF9idWYsIF9pbiApOwotICAgICAgICAgICAgICAgIHNiLmdldENoYXJzKCBjaHVuaywgY2NoLCBfYnVmLCAwICk7Ci0gICAgICAgICAgICAgICAgX2luID0gKF9pbiArIGNjaCkgJSBfYnVmLmxlbmd0aDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBlbWl0ICggaW50IGNwLCBpbnQgY2NoICkKLSAgICAgICAgewotICAgICAgICAgICAgZW1pdCgKLSAgICAgICAgICAgICAgICBnZXRSb290KCkuX3RleHQuX2J1ZiwKLSAgICAgICAgICAgICAgICBnZXRSb290KCkuX3RleHQudW5PYnNjdXJlKCBjcCwgY2NoICksCi0gICAgICAgICAgICAgICAgY2NoICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgZW1pdCAoIGNoYXIgY2ggKQotICAgICAgICB7Ci0gICAgICAgICAgICBwcmVFbWl0KCAxICk7Ci0KLSAgICAgICAgICAgIF9idWZbIF9pbiBdID0gY2g7Ci0KLSAgICAgICAgICAgIF9pbiA9IChfaW4gKyAxKSAlIF9idWYubGVuZ3RoOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGVtaXQgKCBjaGFyW10gYnVmLCBpbnQgb2ZmLCBpbnQgY2NoICkKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0IGNjaCA+PSAwOwotCi0gICAgICAgICAgICBpZiAocHJlRW1pdCggY2NoICkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpbnQgY2h1bms7Ci0KLSAgICAgICAgICAgIGlmIChfaW4gPD0gX291dCB8fCBjY2ggPCAoY2h1bmsgPSBfYnVmLmxlbmd0aCAtIF9pbikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSggYnVmLCBvZmYsIF9idWYsIF9pbiwgY2NoICk7Ci0gICAgICAgICAgICAgICAgX2luICs9IGNjaDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KCBidWYsIG9mZiwgX2J1ZiwgX2luLCBjaHVuayApOwotICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoIGJ1Ziwgb2ZmICsgY2h1bmssIF9idWYsIDAsIGNjaCAtIGNodW5rICk7Ci0gICAgICAgICAgICAgICAgX2luID0gKF9pbiArIGNjaCkgJSBfYnVmLmxlbmd0aDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBlbnRpdGl6ZUNvbnRlbnQgKCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfbGFzdEVtaXRDY2ggPT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGludCBpID0gX2xhc3RFbWl0SW47Ci0gICAgICAgICAgICBmaW5hbCBpbnQgbiA9IF9idWYubGVuZ3RoOwotCi0gICAgICAgICAgICBib29sZWFuIGhhc091dE9mUmFuZ2UgPSBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaW50IGNvdW50ID0gMDsKLSAgICAgICAgICAgIGZvciAoIGludCBjY2ggPSBfbGFzdEVtaXRDY2ggOyBjY2ggPiAwIDsgY2NoLS0gKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNoYXIgY2ggPSBfYnVmWyBpIF07Ci0KLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJzwnIHx8IGNoID09ICcmJykKLSAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0JhZENoYXIoIGNoICkpCi0gICAgICAgICAgICAgICAgICAgIGhhc091dE9mUmFuZ2UgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgaWYgKCsraSA9PSBuKQotICAgICAgICAgICAgICAgICAgICBpID0gMDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGNvdW50ID09IDAgJiYgIWhhc091dE9mUmFuZ2UpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpID0gX2xhc3RFbWl0SW47Ci0KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBIZXVyaXN0aWMgZm9yIGtub3dpbmcgd2hlbiB0byBzYXZlIG91dCBzdHVmZiBhcyBhIENEQVRBLgotICAgICAgICAgICAgLy8KLQotICAgICAgICAgICAgaWYgKF9sYXN0RW1pdENjaCA+IDMyICYmIGNvdW50ID4gNSAmJgotICAgICAgICAgICAgICAgICAgY291bnQgKiAxMDAgLyBfbGFzdEVtaXRDY2ggPiAxKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2xlYW4gbGFzdFdhc0JyYWNrZXQgPSBfYnVmWyBpIF0gPT0gJ10nOwotCi0gICAgICAgICAgICAgICAgaSA9IHJlcGxhY2UoIGksICI8IVtDREFUQVsiICsgX2J1ZlsgaSBdICk7Ci0KLSAgICAgICAgICAgICAgICBib29sZWFuIHNlY29uZFRvTGFzdFdhc0JyYWNrZXQgPSBsYXN0V2FzQnJhY2tldDsKLQotICAgICAgICAgICAgICAgIGxhc3RXYXNCcmFja2V0ID0gX2J1ZlsgaSBdID09ICddJzsKLQotICAgICAgICAgICAgICAgIGlmICgrK2kgPT0gbikKLSAgICAgICAgICAgICAgICAgICAgaSA9IDA7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKCBpbnQgY2NoID0gX2xhc3RFbWl0Q2NoIDsgY2NoID4gMCA7IGNjaC0tICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIgY2ggPSBfYnVmWyBpIF07Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICc+JyAmJiBzZWNvbmRUb0xhc3RXYXNCcmFja2V0ICYmIGxhc3RXYXNCcmFja2V0KQotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHJlcGxhY2UoIGksICImZ3Q7IiApOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0JhZENoYXIoIGNoICkpCi0gICAgICAgICAgICAgICAgICAgICAgICBpID0gcmVwbGFjZSggaSwgIj8iICk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsKLQotICAgICAgICAgICAgICAgICAgICBzZWNvbmRUb0xhc3RXYXNCcmFja2V0ID0gbGFzdFdhc0JyYWNrZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGxhc3RXYXNCcmFja2V0ID0gY2ggPT0gJ10nOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChpID09IG4pCi0gICAgICAgICAgICAgICAgICAgICAgICBpID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBlbWl0KCAiXV0+IiApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoIGludCBjY2ggPSBfbGFzdEVtaXRDY2ggOyBjY2ggPiAwIDsgY2NoLS0gKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhciBjaCA9IF9idWZbIGkgXTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJzwnKQotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHJlcGxhY2UoIGksICImbHQ7IiApOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnJicpCi0gICAgICAgICAgICAgICAgICAgICAgICBpID0gcmVwbGFjZSggaSwgIiZhbXA7IiApOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0JhZENoYXIoIGNoICkpCi0gICAgICAgICAgICAgICAgICAgICAgICBpID0gcmVwbGFjZSggaSwgIj8iICk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PSBuKQotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGVudGl0aXplQXR0clZhbHVlICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX2xhc3RFbWl0Q2NoID09IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpbnQgaSA9IF9sYXN0RW1pdEluOwotICAgICAgICAgICAgZmluYWwgaW50IG4gPSBfYnVmLmxlbmd0aDsKLQotICAgICAgICAgICAgZm9yICggaW50IGNjaCA9IF9sYXN0RW1pdENjaCA7IGNjaCA+IDAgOyBjY2gtLSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2hhciBjaCA9IF9idWZbIGkgXTsKLQotICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnPCcpCi0gICAgICAgICAgICAgICAgICAgIGkgPSByZXBsYWNlKCBpLCAiJmx0OyIgKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnJicpCi0gICAgICAgICAgICAgICAgICAgIGkgPSByZXBsYWNlKCBpLCAiJmFtcDsiICk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT0gJyInKQotICAgICAgICAgICAgICAgICAgICBpID0gcmVwbGFjZSggaSwgIiZxdW90OyIgKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGkrKzsKLQotICAgICAgICAgICAgICAgIGlmIChpID09IG4pCi0gICAgICAgICAgICAgICAgICAgIGkgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGVudGl0aXplQ29tbWVudCAoICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKF9sYXN0RW1pdENjaCA9PSAwKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaW50IGkgPSBfbGFzdEVtaXRJbjsKLSAgICAgICAgICAgIGZpbmFsIGludCBuID0gX2J1Zi5sZW5ndGg7Ci0KLSAgICAgICAgICAgIGJvb2xlYW4gbGFzdFdhc0Rhc2ggPSBmYWxzZTsKLQotICAgICAgICAgICAgZm9yICggaW50IGNjaCA9IF9sYXN0RW1pdENjaCA7IGNjaCA+IDAgOyBjY2gtLSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2hhciBjaCA9IF9idWZbIGkgXTsKLQotICAgICAgICAgICAgICAgIGlmIChpc0JhZENoYXIoIGNoICkpCi0gICAgICAgICAgICAgICAgICAgIGkgPSByZXBsYWNlKCBpLCAiPyIgKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnLScpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAobGFzdFdhc0Rhc2gpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgIi0tIiB3aXRoICItICIgdG8gbWFrZSB3ZWxsIGZvcm1lZAotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHJlcGxhY2UoIGksICIgIiApOwotICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFdhc0Rhc2ggPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RXYXNEYXNoID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGkrKzsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBsYXN0V2FzRGFzaCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGkgPT0gbikKLSAgICAgICAgICAgICAgICAgICAgaSA9IDA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEJlY2F1c2UgSSBoYXZlIG9ubHkgcmVwbGFjZWQgY2hhcnMgd2l0aCBzaW5nbGUgY2hhcnMsCi0gICAgICAgICAgICAvLyBfbGFzdEVtaXRJbiB3aWxsIHN0aWxsIGJlIG9rCi0KLSAgICAgICAgICAgIGlmIChfYnVmWyBfbGFzdEVtaXRJbiArIF9sYXN0RW1pdENjaCAtIDEgXSA9PSAnLScpCi0gICAgICAgICAgICAgICAgaSA9IHJlcGxhY2UoIF9sYXN0RW1pdEluICsgX2xhc3RFbWl0Q2NoIC0gMSwgIiAiICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgZW50aXRpemVQcm9jaW5zdCAoICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKF9sYXN0RW1pdENjaCA9PSAwKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaW50IGkgPSBfbGFzdEVtaXRJbjsKLSAgICAgICAgICAgIGZpbmFsIGludCBuID0gX2J1Zi5sZW5ndGg7Ci0KLSAgICAgICAgICAgIGJvb2xlYW4gbGFzdFdhc1F1ZXN0aW9uID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIGZvciAoIGludCBjY2ggPSBfbGFzdEVtaXRDY2ggOyBjY2ggPiAwIDsgY2NoLS0gKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNoYXIgY2ggPSBfYnVmWyBpIF07Ci0KLSAgICAgICAgICAgICAgICBpZiAoaXNCYWRDaGFyKCBjaCApKQotICAgICAgICAgICAgICAgICAgICBpID0gcmVwbGFjZSggaSwgIj8iICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJz4nKQotICAgICAgICAgICAgICAgIHsKLSAgICAvLyBUT0RPIC0gSGFkIHRvIGNvbnZlcnQgdG8gYSBzcGFjZSBoZXJlIC4uLiBpbXBsZXMgbm90IHdlbGwgZm9ybWVkIFhNTAotICAgICAgICAgICAgICAgICAgICBpZiAobGFzdFdhc1F1ZXN0aW9uKQotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHJlcGxhY2UoIGksICIgIiApOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBpKys7Ci0KLSAgICAgICAgICAgICAgICAgICAgbGFzdFdhc1F1ZXN0aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGxhc3RXYXNRdWVzdGlvbiA9IGNoID09ICc/JzsKLSAgICAgICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChpID09IG4pCi0gICAgICAgICAgICAgICAgICAgIGkgPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLQotICAgICAgICAvKioKLSAgICAgICAgICogVGVzdCBpZiBhIGNoYXJhY3RlciBpcyB2YWxpZCBpbiB4bWwgY2hhcmFjdGVyIGNvbnRlbnQuIFNlZQotICAgICAgICAgKiBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sI05ULUNoYXIKLSAgICAgICAgICovCi0gICAgICAgIAotICAgICAgICBwcml2YXRlIGJvb2xlYW4gaXNCYWRDaGFyICggY2hhciBjaCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAhICgKLSAgICAgICAgICAgICAgICAoY2ggPj0gMHgyMCAmJiBjaCA8PSAweEQ3RkYgKSB8fAotICAgICAgICAgICAgICAgIChjaCA+PSAweEUwMDAgJiYgY2ggPD0gMHhGRkZEKSB8fAotICAgICAgICAgICAgICAgIChjaCA+PSAweDEwMDAwICYmIGNoIDw9IDB4MTBGRkZGKSB8fAotICAgICAgICAgICAgICAgIChjaCA9PSAweDkpIHx8IChjaCA9PSAweEEpIHx8IChjaCA9PSAweEQpCi0gICAgICAgICAgICAgICAgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgaW50IHJlcGxhY2UgKCBpbnQgaSwgU3RyaW5nIHJlcGxhY2VtZW50ICkKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0IHJlcGxhY2VtZW50Lmxlbmd0aCgpID4gMDsKLQotICAgICAgICAgICAgaW50IGRDY2ggPSByZXBsYWNlbWVudC5sZW5ndGgoKSAtIDE7Ci0KLSAgICAgICAgICAgIGlmIChkQ2NoID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2J1ZlsgaSBdID0gcmVwbGFjZW1lbnQuY2hhckF0KCAwICk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhc3NlcnQgX2ZyZWUgPj0gMDsKLQotICAgICAgICAgICAgaWYgKGRDY2ggPiBfZnJlZSkKLSAgICAgICAgICAgICAgICBpID0gcmVzaXplKCBkQ2NoLCBpICk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGFzc2VydCBfZnJlZSA+PSAwOwotCi0gICAgICAgICAgICBhc3NlcnQgX2ZyZWUgPj0gZENjaDsKLSAgICAgICAgICAgIGFzc2VydCBnZXRBdmFpbGFibGUoKSA+IDA7Ci0KLSAgICAgICAgICAgIGlmIChfb3V0ID4gX2luICYmIGkgPj0gX291dCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KCBfYnVmLCBfb3V0LCBfYnVmLCBfb3V0IC0gZENjaCwgaSAtIF9vdXQgKTsKLSAgICAgICAgICAgICAgICBfb3V0IC09IGRDY2g7Ci0gICAgICAgICAgICAgICAgaSAtPSBkQ2NoOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFzc2VydCBpIDwgX2luOwotICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoIF9idWYsIGksIF9idWYsIGkgKyBkQ2NoLCBfaW4gLSBpICk7Ci0gICAgICAgICAgICAgICAgX2luICs9IGRDY2g7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJlcGxhY2VtZW50LmdldENoYXJzKCAwLCBkQ2NoICsgMSwgX2J1ZiwgaSApOwotCi0gICAgICAgICAgICBfZnJlZSAtPSBkQ2NoOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhc3NlcnQgX2ZyZWUgPj0gMDsKLQotICAgICAgICAgICAgcmV0dXJuIGkgKyBkQ2NoICsgMTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBnZXRBdmFpbGFibGUgKCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBfYnVmID09IG51bGwgPyAwIDogX2J1Zi5sZW5ndGggLSBfZnJlZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBNYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHJvb20gZm9yIGNjaCBjaGFycyBpbiB0aGUgYnVmZmVyCi0gICAgICAgICAqLwotCi0gICAgICAgIHByaXZhdGUgaW50IHJlc2l6ZSAoIGludCBjY2gsIGludCBpICkKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0IF9mcmVlID49IDA7Ci0gICAgICAgICAgICBhc3NlcnQgY2NoID4gMDsKLSAgICAgICAgICAgIGFzc2VydCBjY2ggPiBfZnJlZTsKLQotICAgICAgICAgICAgaW50IG5ld0xlbiA9IF9idWYgPT0gbnVsbCA/IF9pbml0aWFsQnVmU2l6ZSA6IF9idWYubGVuZ3RoICogMjsKLSAgICAgICAgICAgIGludCB1c2VkID0gZ2V0QXZhaWxhYmxlKCk7Ci0KLSAgICAgICAgICAgIHdoaWxlICggbmV3TGVuIC0gdXNlZCA8IGNjaCApCi0gICAgICAgICAgICAgICAgbmV3TGVuICo9IDI7Ci0KLSAgICAgICAgICAgIGNoYXJbXSBuZXdCdWYgPSBuZXcgY2hhciBbIG5ld0xlbiBdOwotCi0gICAgICAgICAgICBpZiAodXNlZCA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKF9pbiA+IF9vdXQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgaSA9PSAtMSB8fCAoaSA+PSBfb3V0ICYmIGkgPCBfaW4pOwotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KCBfYnVmLCBfb3V0LCBuZXdCdWYsIDAsIHVzZWQgKTsKLSAgICAgICAgICAgICAgICAgICAgaSAtPSBfb3V0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgaSA9PSAtMSB8fCAoaSA+PSBfb3V0IHx8IGkgPCBfaW4pOwotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KCBfYnVmLCBfb3V0LCBuZXdCdWYsIDAsIHVzZWQgLSBfaW4gKTsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSggX2J1ZiwgMCwgbmV3QnVmLCB1c2VkIC0gX2luLCBfaW4gKTsKLSAgICAgICAgICAgICAgICAgICAgaSA9IGkgPj0gX291dCA/IGkgLSBfb3V0IDogaSArIF9vdXQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIF9vdXQgPSAwOwotICAgICAgICAgICAgICAgIF9pbiA9IHVzZWQ7Ci0gICAgICAgICAgICAgICAgX2ZyZWUgKz0gbmV3QnVmLmxlbmd0aCAtIF9idWYubGVuZ3RoOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9mcmVlICs9IG5ld0J1Zi5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IF9pbiA9PSAwICYmIF9vdXQgPT0gMDsKLSAgICAgICAgICAgICAgICBhc3NlcnQgaSA9PSAtMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgX2J1ZiA9IG5ld0J1ZjsKLQotICAgICAgICAgICAgYXNzZXJ0IF9mcmVlID49IDA7Ci0KLSAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGludCByZWFkICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZW5zdXJlKCAxICkgPT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAgICAgICAgIGFzc2VydCBnZXRBdmFpbGFibGUoKSA+IDA7Ci0KLSAgICAgICAgICAgIGludCBjaCA9IF9idWZbIF9vdXQgXTsKLQotICAgICAgICAgICAgX291dCA9IChfb3V0ICsgMSkgJSBfYnVmLmxlbmd0aDsKLSAgICAgICAgICAgIF9mcmVlKys7Ci0KLSAgICAgICAgICAgIHJldHVybiBjaDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBpbnQgcmVhZCAoIGNoYXJbXSBjYnVmLCBpbnQgb2ZmLCBpbnQgbGVuICkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGVuZCBvZiBzdHJlYW0gZXZlbiBpZiB0aGVyZSBpcyBubyB3YXkgdG8gcmV0dXJuCi0gICAgICAgICAgICAvLyBjaGFyYWN0ZXJzIGJlY2F1c2UgdGhlIFJlYWRlciBkb2Mgc2F5cyB0byByZXR1cm4gLTEgYXQgZW5kIG9mCi0gICAgICAgICAgICAvLyBzdHJlYW0uCi0KLSAgICAgICAgICAgIGludCBuOwotCi0gICAgICAgICAgICBpZiAoKG4gPSBlbnN1cmUoIGxlbiApKSA9PSAwKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLQotICAgICAgICAgICAgaWYgKGNidWYgPT0gbnVsbCB8fCBsZW4gPD0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICAgICAgaWYgKG4gPCBsZW4pCi0gICAgICAgICAgICAgICAgbGVuID0gbjsKLQotICAgICAgICAgICAgaWYgKF9vdXQgPCBfaW4pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSggX2J1ZiwgX291dCwgY2J1Ziwgb2ZmLCBsZW4gKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgY2h1bmsgPSBfYnVmLmxlbmd0aCAtIF9vdXQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY2h1bmsgPj0gbGVuKQotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KCBfYnVmLCBfb3V0LCBjYnVmLCBvZmYsIGxlbiApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoIF9idWYsIF9vdXQsIGNidWYsIG9mZiwgY2h1bmsgKTsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSggX2J1ZiwgMCwgY2J1Ziwgb2ZmICsgY2h1bmssIGxlbiAtIGNodW5rICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBfb3V0ID0gKF9vdXQgKyBsZW4pICUgX2J1Zi5sZW5ndGg7Ci0gICAgICAgICAgICBfZnJlZSArPSBsZW47Ci0KLSAgICAgICAgICAgIGFzc2VydCBfZnJlZSA+PSAwOwotCi0gICAgICAgICAgICByZXR1cm4gbGVuOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGludCB3cml0ZSAoIFdyaXRlciB3cml0ZXIsIGludCBjY2hNaW4gKQotICAgICAgICB7Ci0gICAgICAgICAgICB3aGlsZSAoIGdldEF2YWlsYWJsZSgpIDwgY2NoTWluKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghcHJvY2VzcygpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaW50IGNoYXJzQXZhaWxhYmxlID0gZ2V0QXZhaWxhYmxlKCk7Ci0KLSAgICAgICAgICAgIGlmIChjaGFyc0F2YWlsYWJsZSA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gSSBkb24ndCB3YW50IHRvIGRlYWwgd2l0aCB0aGUgY2lyY3VsYXIgY2FzZXMKLQotICAgICAgICAgICAgICAgIGFzc2VydCBfb3V0ID09IDA7Ci0KLSAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZSggX2J1ZiwgMCwgY2hhcnNBdmFpbGFibGUgKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmZsdXNoKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhdGNoICggSU9FeGNlcHRpb24gZSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbiggZSApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIF9mcmVlICs9IGNoYXJzQXZhaWxhYmxlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGFzc2VydCBfZnJlZSA+PSAwOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIF9pbiA9IDA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBjaGFyc0F2YWlsYWJsZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBFbnN1cmUgYWxsIHRleHQgYW5kIHJldHVybiBpdCBhcyBhIHN0cmluZy4KLSAgICAgICAgICovCi0KLSAgICAgICAgcHVibGljIFN0cmluZyBzYXZlVG9TdHJpbmcgKCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFdlJ3JlIGdvbm5hIGJ1aWxkIGEgc3RyaW5nLiAgSW5zdGVhZCBvZiB1c2luZyBTdHJpbmdCdWZmZXIsIG1heQotICAgICAgICAgICAgLy8gYXMgd2VsbCB1c2UgbXkgYnVmZmVyIGhlcmUuICBGaWxsIHRoZSB3aG9sZSBzdWNrZXIgdXAgYW5kCi0gICAgICAgICAgICAvLyBjcmVhdGUgYSBTdHJpbmchCi0KLSAgICAgICAgICAgIHdoaWxlICggcHJvY2VzcygpICkKLSAgICAgICAgICAgICAgICA7Ci0KLSAgICAgICAgICAgIGFzc2VydCBfb3V0ID09IDA7Ci0KLSAgICAgICAgICAgIGludCBhdmFpbGFibGUgPSBnZXRBdmFpbGFibGUoKTsKLQotICAgICAgICAgICAgcmV0dXJuIGF2YWlsYWJsZSA9PSAwID8gIiIgOiBuZXcgU3RyaW5nKCBfYnVmLCBfb3V0LCBhdmFpbGFibGUgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBfaW5pdGlhbEJ1ZlNpemUgPSA0MDk2OwotCi0gICAgICAgIHByaXZhdGUgaW50IF9sYXN0RW1pdEluOwotICAgICAgICBwcml2YXRlIGludCBfbGFzdEVtaXRDY2g7Ci0KLSAgICAgICAgcHJpdmF0ZSBpbnQgICAgX2ZyZWU7Ci0gICAgICAgIHByaXZhdGUgaW50ICAgIF9pbjsKLSAgICAgICAgcHJpdmF0ZSBpbnQgICAgX291dDsKLSAgICAgICAgcHJpdmF0ZSBjaGFyW10gX2J1ZjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBIFJlYWRlciB3aGljaCBleHBvc2VzIHRoZSB0ZXh0IG9mIGEgcGFydCBvZiB0aGUgdHJlZS4KLSAgICAgKi8KLQotICAgIHN0YXRpYyBmaW5hbCBjbGFzcyBUZXh0UmVhZGVyIGV4dGVuZHMgUmVhZGVyCi0gICAgewotICAgICAgICBUZXh0UmVhZGVyICggUm9vdCByLCBTcGxheSBzLCBpbnQgcCwgWG1sT3B0aW9ucyBvcHRpb25zICkKLSAgICAgICAgewotICAgICAgICAgICAgX3RleHRTYXZlciA9IG5ldyBUZXh0U2F2ZXIoIHIsIHMsIHAsIG9wdGlvbnMsIG51bGwgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIGNsb3NlICggKSB0aHJvd3MgSU9FeGNlcHRpb24geyB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gcmVhZHkgKCApIHRocm93cyBJT0V4Y2VwdGlvbiB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAgICAgcHVibGljIGludCByZWFkICggKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIF90ZXh0U2F2ZXIucmVhZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGludCByZWFkICggY2hhcltdIGNidWYgKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIF90ZXh0U2F2ZXIucmVhZCggY2J1ZiwgMCwgY2J1ZiA9PSBudWxsID8gMCA6IGNidWYubGVuZ3RoICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgaW50IHJlYWQgKCBjaGFyW10gY2J1ZiwgaW50IG9mZiwgaW50IGxlbiApIHRocm93cyBJT0V4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gX3RleHRTYXZlci5yZWFkKCBjYnVmLCBvZmYsIGxlbiApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBUZXh0U2F2ZXIgX3RleHRTYXZlcjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKgotICAgICAqLwotCi0gICAgc3RhdGljIGZpbmFsIGNsYXNzIElucHV0U3RyZWFtU2F2ZXIgZXh0ZW5kcyBJbnB1dFN0cmVhbQotICAgIHsKLSAgICAgICAgSW5wdXRTdHJlYW1TYXZlciAoCi0gICAgICAgICAgICBSb290IHIsIFNwbGF5IHMsIGludCBwLCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBvcHRpb25zID0gWG1sT3B0aW9ucy5tYXNrTnVsbChvcHRpb25zKTsKLSAgICAgICAgICAgIF9ieXRlQnVmZmVyID0gbmV3IE91dHB1dFN0cmVhbUltcGwoKTsKLQotICAgICAgICAgICAgU3RyaW5nIGVuY29kaW5nID0gbnVsbDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHIuX3Byb3BzLmdldEVuY29kaW5nKCkgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlbmNvZGluZyA9Ci0gICAgICAgICAgICAgICAgICAgIEVuY29kaW5nTWFwLmdldElBTkEySmF2YU1hcHBpbmcoIHIuX3Byb3BzLmdldEVuY29kaW5nKCkgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG9wdGlvbnMuaGFzT3B0aW9uKFhtbE9wdGlvbnMuQ0hBUkFDVEVSX0VOQ09ESU5HKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlbmNvZGluZyA9Ci0gICAgICAgICAgICAgICAgICAgIChTdHJpbmcpIG9wdGlvbnMuZ2V0KFhtbE9wdGlvbnMuQ0hBUkFDVEVSX0VOQ09ESU5HKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGVuY29kaW5nICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGlhbmFFbmNvZGluZyA9Ci0gICAgICAgICAgICAgICAgICAgIEVuY29kaW5nTWFwLmdldEphdmEySUFOQU1hcHBpbmcoIGVuY29kaW5nICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaWFuYUVuY29kaW5nICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nID0gaWFuYUVuY29kaW5nOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZW5jb2RpbmcgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICBlbmNvZGluZyA9IEVuY29kaW5nTWFwLmdldEphdmEySUFOQU1hcHBpbmcoICJVVEY4IiApOwotCi0gICAgICAgICAgICBTdHJpbmcgamF2YUVuY29kaW5nID0gRW5jb2RpbmdNYXAuZ2V0SUFOQTJKYXZhTWFwcGluZyggZW5jb2RpbmcgKTsKLQotICAgICAgICAgICAgaWYgKGphdmFFbmNvZGluZyA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93Ci0gICAgICAgICAgICAgICAgICAgIG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAiVW5rbm93biBlbmNvZGluZzogIiArIGVuY29kaW5nICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9jb252ZXJ0ZXIgPSBuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKCBfYnl0ZUJ1ZmZlciwgamF2YUVuY29kaW5nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoICggVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbiggZSApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBfdGV4dFNhdmVyID0gbmV3IFRleHRTYXZlciggciwgcywgcCwgb3B0aW9ucywgZW5jb2RpbmcgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBpbnQgcmVhZCAoICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIF9ieXRlQnVmZmVyLnJlYWQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBpbnQgcmVhZCAoIGJ5dGVbXSBiYnVmLCBpbnQgb2ZmLCBpbnQgbGVuICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIF9ieXRlQnVmZmVyLnJlYWQgKCBiYnVmLCBvZmYsIGxlbiApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBpbnQgZW5zdXJlICggaW50IGNieXRlICkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gRXZlbiBpZiB3ZSdyZSBhc2tlZCB0byBlbnN1cmUgbm90aGluZywgc3RpbGwgdHJ5IHRvIGVuc3VyZQotICAgICAgICAgICAgLy8gYXRsZWFzdCBvbmUgYnl0ZSBzbyB3ZSBjYW4gZGV0ZXJtaW5lIGlmIHdlJ3JlIGF0IHRoZQotICAgICAgICAgICAgLy8gZW5kIG9mIHRoZSBzdHJlYW0uCi0KLSAgICAgICAgICAgIGlmIChjYnl0ZSA8PSAwKQotICAgICAgICAgICAgICAgIGNieXRlID0gMTsKLQotICAgICAgICAgICAgaW50IGJ5dGVzQXZhaWxhYmxlID0gX2J5dGVCdWZmZXIuZ2V0QXZhaWxhYmxlKCk7Ci0KLSAgICAgICAgICAgIGZvciAoIDsgYnl0ZXNBdmFpbGFibGUgPCBjYnl0ZSA7Ci0gICAgICAgICAgICAgICAgICBieXRlc0F2YWlsYWJsZSA9IF9ieXRlQnVmZmVyLmdldEF2YWlsYWJsZSgpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoX3RleHRTYXZlci53cml0ZSggX2NvbnZlcnRlciwgMjA0OCApIDwgMjA0OCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJ5dGVzQXZhaWxhYmxlID0gX2J5dGVCdWZmZXIuZ2V0QXZhaWxhYmxlKCk7Ci0KLSAgICAgICAgICAgIGlmIChieXRlc0F2YWlsYWJsZSA9PSAwKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgICAgICByZXR1cm4gYnl0ZXNBdmFpbGFibGU7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGZpbmFsIGNsYXNzIE91dHB1dFN0cmVhbUltcGwgZXh0ZW5kcyBPdXRwdXRTdHJlYW0KLSAgICAgICAgewotICAgICAgICAgICAgaW50IHJlYWQgKCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKElucHV0U3RyZWFtU2F2ZXIudGhpcy5lbnN1cmUoIDEgKSA9PSAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAgICAgICAgICAgICBhc3NlcnQgZ2V0QXZhaWxhYmxlKCkgPiAwOwotCi0gICAgICAgICAgICAgICAgaW50IGJpdGUgPSBfYnVmWyBfb3V0IF07Ci0KLSAgICAgICAgICAgICAgICBfb3V0ID0gKF9vdXQgKyAxKSAlIF9idWYubGVuZ3RoOwotICAgICAgICAgICAgICAgIF9mcmVlKys7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gYml0ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaW50IHJlYWQgKCBieXRlW10gYmJ1ZiwgaW50IG9mZiwgaW50IGxlbiApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGVuZCBvZiBzdHJlYW0gZXZlbiBpZiB0aGVyZSBpcyBubyB3YXkgdG8gcmV0dXJuCi0gICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVycyBiZWNhdXNlIHRoZSBSZWFkZXIgZG9jIHNheXMgdG8gcmV0dXJuIC0xIGF0IGVuZCBvZgotICAgICAgICAgICAgICAgIC8vIHN0cmVhbS4KLQotICAgICAgICAgICAgICAgIGludCBuOwotCi0gICAgICAgICAgICAgICAgaWYgKChuID0gZW5zdXJlKCBsZW4gKSkgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgICAgICAgICAgICAgaWYgKGJidWYgPT0gbnVsbCB8fCBsZW4gPD0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgICAgICBpZiAobiA8IGxlbikKLSAgICAgICAgICAgICAgICAgICAgbGVuID0gbjsKLQotICAgICAgICAgICAgICAgIGlmIChfb3V0IDwgX2luKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSggX2J1ZiwgX291dCwgYmJ1Ziwgb2ZmLCBsZW4gKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGNodW5rID0gX2J1Zi5sZW5ndGggLSBfb3V0OwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChjaHVuayA+PSBsZW4pCi0gICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KCBfYnVmLCBfb3V0LCBiYnVmLCBvZmYsIGxlbiApOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoIF9idWYsIF9vdXQsIGJidWYsIG9mZiwgY2h1bmsgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYnVmLCAwLCBiYnVmLCBvZmYgKyBjaHVuaywgbGVuIC0gY2h1bmsgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIF9vdXQgPSAoX291dCArIGxlbikgJSBfYnVmLmxlbmd0aDsKLSAgICAgICAgICAgICAgICBfZnJlZSArPSBsZW47Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gbGVuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbnQgZ2V0QXZhaWxhYmxlICggKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBfYnVmID09IG51bGwgPyAwIDogX2J1Zi5sZW5ndGggLSBfZnJlZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIHZvaWQgd3JpdGUgKCBpbnQgYml0ZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKF9mcmVlID09IDApCi0gICAgICAgICAgICAgICAgICAgIHJlc2l6ZSggMSApOwotCi0gICAgICAgICAgICAgICAgYXNzZXJ0IF9mcmVlID4gMDsKLQotICAgICAgICAgICAgICAgIF9idWZbIF9pbiBdID0gKGJ5dGUpIGJpdGU7Ci0KLSAgICAgICAgICAgICAgICBfaW4gPSAoX2luICsgMSkgJSBfYnVmLmxlbmd0aDsKLSAgICAgICAgICAgICAgICBfZnJlZS0tOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCB3cml0ZSAoIGJ5dGVbXSBidWYsIGludCBvZmYsIGludCBjYnl0ZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IGNieXRlID49IDA7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY2J5dGUgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgaWYgKF9mcmVlIDwgY2J5dGUpCi0gICAgICAgICAgICAgICAgICAgIHJlc2l6ZSggY2J5dGUgKTsKLQotICAgICAgICAgICAgICAgIGlmIChfaW4gPT0gX291dCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydCBnZXRBdmFpbGFibGUoKSA9PSAwOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgX2ZyZWUgPT0gX2J1Zi5sZW5ndGggLSBnZXRBdmFpbGFibGUoKTsKLSAgICAgICAgICAgICAgICAgICAgX2luID0gX291dCA9IDA7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaW50IGNodW5rOwotCi0gICAgICAgICAgICAgICAgaWYgKF9pbiA8PSBfb3V0IHx8IGNieXRlIDwgKGNodW5rID0gX2J1Zi5sZW5ndGggLSBfaW4pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSggYnVmLCBvZmYsIF9idWYsIF9pbiwgY2J5dGUgKTsKLSAgICAgICAgICAgICAgICAgICAgX2luICs9IGNieXRlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KCBidWYsIG9mZiwgX2J1ZiwgX2luLCBjaHVuayApOwotCi0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoCi0gICAgICAgICAgICAgICAgICAgICAgICBidWYsIG9mZiArIGNodW5rLCBfYnVmLCAwLCBjYnl0ZSAtIGNodW5rICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgX2luID0gKF9pbiArIGNieXRlKSAlIF9idWYubGVuZ3RoOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIF9mcmVlIC09IGNieXRlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2b2lkIHJlc2l6ZSAoIGludCBjYnl0ZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IGNieXRlID4gX2ZyZWU7Ci0KLSAgICAgICAgICAgICAgICBpbnQgbmV3TGVuID0gX2J1ZiA9PSBudWxsID8gX2luaXRpYWxCdWZTaXplIDogX2J1Zi5sZW5ndGggKiAyOwotICAgICAgICAgICAgICAgIGludCB1c2VkID0gZ2V0QXZhaWxhYmxlKCk7Ci0KLSAgICAgICAgICAgICAgICB3aGlsZSAoIG5ld0xlbiAtIHVzZWQgPCBjYnl0ZSApCi0gICAgICAgICAgICAgICAgICAgIG5ld0xlbiAqPSAyOwotCi0gICAgICAgICAgICAgICAgYnl0ZVtdIG5ld0J1ZiA9IG5ldyBieXRlIFsgbmV3TGVuIF07Ci0KLSAgICAgICAgICAgICAgICBpZiAodXNlZCA+IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoX291dCA9PSBfaW4pCi0gICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KCBfYnVmLCAwLCBuZXdCdWYsIDAsIHVzZWQgKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX2luID4gX291dCkKLSAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoIF9idWYsIF9vdXQsIG5ld0J1ZiwgMCwgdXNlZCApOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2J1ZiwgX291dCwgbmV3QnVmLCAwLCB1c2VkIC0gX2luICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2J1ZiwgMCwgbmV3QnVmLCB1c2VkIC0gX2luLCBfaW4gKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIF9vdXQgPSAwOwotICAgICAgICAgICAgICAgICAgICBfaW4gPSB1c2VkOwotICAgICAgICAgICAgICAgICAgICBfZnJlZSArPSBuZXdCdWYubGVuZ3RoIC0gX2J1Zi5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIF9mcmVlICs9IG5ld0J1Zi5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydCBfaW4gPT0gMCAmJiBfb3V0ID09IDA7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgX2J1ZiA9IG5ld0J1ZjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IF9pbml0aWFsQnVmU2l6ZSA9IDQwOTY7Ci0KLSAgICAgICAgICAgIGludCAgICBfZnJlZTsKLSAgICAgICAgICAgIGludCAgICBfaW47Ci0gICAgICAgICAgICBpbnQgICAgX291dDsKLSAgICAgICAgICAgIGJ5dGVbXSBfYnVmOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBPdXRwdXRTdHJlYW1JbXBsICAgX2J5dGVCdWZmZXI7Ci0gICAgICAgIHByaXZhdGUgVGV4dFNhdmVyICAgICAgICAgIF90ZXh0U2F2ZXI7Ci0gICAgICAgIHByaXZhdGUgT3V0cHV0U3RyZWFtV3JpdGVyIF9jb252ZXJ0ZXI7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICoKLSAgICAgKi8KLQotICAgIHN0YXRpYyBmaW5hbCBjbGFzcyBYbWxJbnB1dFN0cmVhbVNhdmVyIGV4dGVuZHMgU2F2ZXIKLSAgICB7Ci0gICAgICAgIFhtbElucHV0U3RyZWFtU2F2ZXIgKCBSb290IHIsIFNwbGF5IHMsIGludCBwLCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdXBlciggciwgcywgcCwgb3B0aW9ucyApOwotICAgICAgICB9Ci0KLSAgICAgICAgWE1MRXZlbnQgZGVxdWV1ZSAoICkgdGhyb3dzIFhNTFN0cmVhbUV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX291dCA9PSBudWxsICYmICFwcm9jZXNzKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgICAgIGlmIChfb3V0ID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgICAgIFhtbEV2ZW50SW1wbCBlID0gX291dDsKLQotICAgICAgICAgICAgaWYgKChfb3V0ID0gX291dC5fbmV4dCkgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICBfaW4gPSBudWxsOwotCi0gICAgICAgICAgICByZXR1cm4gZTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBlbnF1ZXVlICggWG1sRXZlbnRJbXBsIGUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgZS5fbmV4dCA9PSBudWxsOwotCi0gICAgICAgICAgICBpZiAoX2luID09IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IF9vdXQgPT0gbnVsbDsKLSAgICAgICAgICAgICAgICBfb3V0ID0gX2luID0gZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfaW4uX25leHQgPSBlOwotICAgICAgICAgICAgICAgIF9pbiA9IGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLwotICAgICAgICAvLwotICAgICAgICAvLwotCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGVtaXRYbWxuc0ZyYWdtZW50ICggU3BsYXkgcyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oICJDYW4ndCBzdHJlYW0gYW4gYXR0cmlidXRlIiApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdFRleHQgKCBTcGxheSBzLCBpbnQgcCwgaW50IGNjaCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFzc2VydCBjY2ggPiAwOwotICAgICAgICAgICAgZW5xdWV1ZSggbmV3IENoYXJhY3RlckRhdGFJbXBsKCBnZXRSb290KCksIHMsIHAsIG51bGwgKSApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdFRleHRGcmFnbWVudCAoIFNwbGF5IHMsIGludCBwLCBpbnQgY2NoICkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gQlVHQlVHIC0gdGhlcmUgY291bGQgYmUgbmFtZXNwYWNlcyBwdXNoZWQgZm9yIHRoaXMgdGV4dCwgbm90Ci0gICAgICAgICAgICAvLyBzdXJlIGhvdyB0byBjb21tdW5pY2F0ZSB0aG9zZSwgaG93ZXZlcgotCi0gICAgICAgICAgICBpZiAoX3RleHQgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoX3RleHQubGVuZ3RoKCkgPiAwKQotICAgICAgICAgICAgICAgICAgICBlbWl0VGV4dCggcywgcCwgY2NoICk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAocyAhPSBudWxsICYmIGNjaCA+IDApCi0gICAgICAgICAgICAgICAgZW1pdFRleHQoIHMsIHAsIGNjaCApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdFRleHRBZnRlciAoIFNwbGF5IHMsIGludCBwLCBpbnQgY2NoICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKF90ZXh0ID09IG51bGwpCi0gICAgICAgICAgICAgICAgZW1pdFRleHQoIHMsIHAsIGNjaCApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVucXVldWUoIG5ldyBDaGFyYWN0ZXJEYXRhSW1wbCggZ2V0Um9vdCgpLCBzLCAtMSwgdGV4dCgpICkgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGVtaXRFbmRQcmVmaXhNYXBwaW5ncyAoICkKLSAgICAgICAgewotICAgICAgICAgICAgUm9vdCByID0gZ2V0Um9vdCgpOwotCi0gICAgICAgICAgICBmb3IgKCBpdGVyYXRlTWFwcGluZ3MoKSA7IGhhc01hcHBpbmcoKSA7IG5leHRNYXBwaW5nKCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZyBwcmV2UHJlZml4VXJpID0gbWFwcGluZ1ByZXZQcmVmaXhVcmkoKTsKLQotICAgICAgICAgICAgICAgIGlmIChwcmV2UHJlZml4VXJpID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIGVucXVldWUoIG5ldyBFbmRQcmVmaXhNYXBwaW5nSW1wbCggciwgbWFwcGluZ1ByZWZpeCgpICkgKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBlbnF1ZXVlKAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IENoYW5nZVByZWZpeE1hcHBpbmdJbXBsKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIsIG1hcHBpbmdQcmVmaXgoKSwgbWFwcGluZ1VyaSgpLCBwcmV2UHJlZml4VXJpICkgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBlbWl0RW5kICggU3BsYXkgcywgUU5hbWUgbmFtZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJvb3QgciA9IGdldFJvb3QoKTsKLQotICAgICAgICAgICAgaWYgKHMuaXNSb290KCkpCi0gICAgICAgICAgICAgICAgZW5xdWV1ZSggbmV3IEVuZERvY3VtZW50SW1wbCggciwgcyApICk7Ci0gICAgICAgICAgICBlbHNlIGlmIChzLmlzRW5kKCkpCi0gICAgICAgICAgICAgICAgZW5xdWV1ZSggbmV3IEVuZEVsZW1lbnRJbXBsKCByLCBzLCBuYW1lLCBnZXRVcmlNYXAoKSApICk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IHMuaXNMZWFmKCk7Ci0gICAgICAgICAgICAgICAgZW5xdWV1ZSggbmV3IEVuZEVsZW1lbnRJbXBsKCByLCBzLCBuYW1lLCBnZXRVcmlNYXAoKSApICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVtaXRFbmRQcmVmaXhNYXBwaW5ncygpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdENvbW1lbnRGcmFnbWVudCAoIFNwbGF5IHMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbWl0Q29tbWVudCggcyApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdFByb2NpbnN0RnJhZ21lbnQgKCBTcGxheSBzICkKLSAgICAgICAgewotICAgICAgICAgICAgZW1pdFByb2NpbnN0KCBzICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBlbWl0RG9jVHlwZSgKLSAgICAgICAgICAgIFN0cmluZyBkb2N0eXBlTmFtZSwgU3RyaW5nIHB1YmxpY0lELCBTdHJpbmcgc3lzdGVtSUQgKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGVtaXRDb21tZW50ICggU3BsYXkgcyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVucXVldWUoIG5ldyBDb21tZW50SW1wbCggZ2V0Um9vdCgpLCBzICkgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGVtaXRQcm9jaW5zdCAoIFNwbGF5IHMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbnF1ZXVlKCBuZXcgUHJvY2Vzc2luZ0luc3RydWN0aW9uSW1wbCggZ2V0Um9vdCgpLCBzICkgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGVtaXRBdHRyRnJhZ21lbnQgKCBTcGxheSBzICkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiggIkNhbid0IHN0cmVhbSBhbiBhdHRyaWJ1dGUiICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBlbWl0Q29udGFpbmVyICggQ29udGFpbmVyIGMsIFFOYW1lIG5hbWUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBSb290IHIgPSBnZXRSb290KCk7Ci0KLSAgICAgICAgICAgIGZvciAoIGl0ZXJhdGVNYXBwaW5ncygpIDsgaGFzTWFwcGluZygpIDsgbmV4dE1hcHBpbmcoKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZW5xdWV1ZSgKLSAgICAgICAgICAgICAgICAgICAgbmV3IFN0YXJ0UHJlZml4TWFwcGluZ0ltcGwoCi0gICAgICAgICAgICAgICAgICAgICAgICByLCBtYXBwaW5nUHJlZml4KCksIG1hcHBpbmdVcmkoKSApICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjLmlzRG9jKCkpCi0gICAgICAgICAgICAgICAgZW5xdWV1ZSggbmV3IFN0YXJ0RG9jdW1lbnRJbXBsKCByLCBjICkgKTsKLQotICAgICAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlbnF1ZXVlKAotICAgICAgICAgICAgICAgICAgICBuZXcgU3RhcnRFbGVtZW50SW1wbCggciwgYywgbmFtZSwgdGhpcyApICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjLmlzRG9jKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IGMuaXNEb2MoKTsKLQotICAgICAgICAgICAgICAgIGlmIChfdGV4dCAhPSBudWxsKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKF90ZXh0Lmxlbmd0aCgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVucXVldWUoIG5ldyBDaGFyYWN0ZXJEYXRhSW1wbCggciwgYywgLTEsIHRleHQoKSApICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMuZ2V0Q2NoKCkgPiAwKQotICAgICAgICAgICAgICAgICAgICBlbnF1ZXVlKCBuZXcgQ2hhcmFjdGVyRGF0YUltcGwoIHIsIGMsIDEsIG51bGwgKSApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoYy5pc0xlYWYoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoX3RleHQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChfdGV4dC5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBlbnF1ZXVlKCBuZXcgQ2hhcmFjdGVyRGF0YUltcGwoIHIsIGMsIC0xLCB0ZXh0KCkgKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMuZ2V0Q2NoVmFsdWUoKSA+IDApCi0gICAgICAgICAgICAgICAgICAgIGVucXVldWUoIG5ldyBDaGFyYWN0ZXJEYXRhSW1wbCggciwgYywgMSwgbnVsbCApICk7Ci0KLSAgICAgICAgICAgICAgICBlbnF1ZXVlKCBuZXcgRW5kRWxlbWVudEltcGwoIHIsIGMsIG5hbWUsIGdldFVyaU1hcCgpICkgKTsKLQotICAgICAgICAgICAgICAgIGVtaXRFbmRQcmVmaXhNYXBwaW5ncygpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLQotICAgICAgICAvLwotICAgICAgICAvLwotICAgICAgICAvLwotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIFhNTE5hbWUgY29tcHV0ZU5hbWUgKCBRTmFtZSBuLCBNYXAgdXJpTWFwICkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHVyaSA9IG4uZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgICAgICAgICAgIGlmICh1cmkubGVuZ3RoKCkgPT0gMCkKLSAgICAgICAgICAgICAgICB1cmkgPSBudWxsOwotCi0gICAgICAgICAgICBhc3NlcnQgbi5nZXRMb2NhbFBhcnQoKS5sZW5ndGgoKSA+IDA7Ci0KLSAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgYXNzZXJ0IG1heSBmaXJlIGlmIHNvbWVvbmUgY29tcHV0ZXMgYSBuYW1lCi0gICAgICAgICAgICAvLyBvZiBhbiBlbGVtZW50L2F0dHIgdG9vIGxhdGUgKGFmdGVyIG90aGVyIGV2ZW50cyBoYXZlIGJlZW4KLSAgICAgICAgICAgIC8vIGVucXVldWVkIGFuZCB0aGUgdXJpIG1hcCBoYXMgYmVlbiB1cGRhdGVkLiAgSSBjaGVjayBsYXRlcgotICAgICAgICAgICAgLy8gdG8gbWFrZSBzdXJlIHdlIGRvbid0IGNyYXNoLCBob3dldmVyLgotCi0gICAgICAgICAgICBhc3NlcnQgdXJpID09IG51bGwgfHwgdXJpTWFwLmNvbnRhaW5zS2V5KCB1cmkgKSA6ICJQcm9ibGVtIHVyaSAiICsgdXJpOwotCi0gICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gbnVsbDsKLQotICAgICAgICAgICAgaWYgKHVyaSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByZWZpeCA9IChTdHJpbmcpIHVyaU1hcC5nZXQoIHVyaSApOwotCi0gICAgICAgICAgICAgICAgaWYgKHByZWZpeCAhPSBudWxsICYmIHByZWZpeC5sZW5ndGgoKSA9PSAwKQotICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSBudWxsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gbmV3IFhtbE5hbWVJbXBsKCB1cmksIG4uZ2V0TG9jYWxQYXJ0KCksIHByZWZpeCApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgWG1sRXZlbnRJbXBsIGV4dGVuZHMgWG1sRXZlbnRCYXNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHB1YmxpYyBPYmplY3QgbW9uaXRvcigpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9yb290OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBYbWxFdmVudEltcGwgKCBpbnQgdHlwZSwgUm9vdCByLCBTcGxheSBzICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdXBlciggdHlwZSApOwotICAgICAgICAgICAgICAgIF9yb290ID0gcjsKLSAgICAgICAgICAgICAgICBfc3BsYXkgPSBzOwotICAgICAgICAgICAgICAgIF92ZXJzaW9uID0gX3Jvb3QuZ2V0VmVyc2lvbigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgWE1MTmFtZSBnZXROYW1lICggKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobW9uaXRvcigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2hlY2tWZXJzaW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIFhNTE5hbWUgZ2V0U2NoZW1hVHlwZSAoICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1vbml0b3IoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNoZWNrVmVyc2lvbigpOwotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbiggIk5ZSSIgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGhhc05hbWUgKCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjaGVja1ZlcnNpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIGZpbmFsIExvY2F0aW9uIGdldExvY2F0aW9uICggKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobW9uaXRvcigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2hlY2tWZXJzaW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRPRE8gLSBwZXJoYXBzIEkgY2FuIHNhdmUgYSBsb2NhdGlvbiBnb29iZXIgc29tZXRpbWVzPwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHByb3RlY3RlZCBmaW5hbCB2b2lkIGNoZWNrVmVyc2lvbiAoICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoX3ZlcnNpb24gIT0gX3Jvb3QuZ2V0VmVyc2lvbigpKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbiggIkRvY3VtZW50IGNoYW5nZWQiICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHByb3RlY3RlZCBmaW5hbCBSb290IGdldFJvb3QgKCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9yb290OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcm90ZWN0ZWQgZmluYWwgU3BsYXkgZ2V0U3BsYXkgKCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9zcGxheTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJpdmF0ZSBSb290ICBfcm9vdDsKLSAgICAgICAgICAgIHByaXZhdGUgU3BsYXkgX3NwbGF5OwotICAgICAgICAgICAgcHJpdmF0ZSBsb25nICBfdmVyc2lvbjsKLQotICAgICAgICAgICAgWG1sRXZlbnRJbXBsIF9uZXh0OwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU3RhcnREb2N1bWVudEltcGwKLSAgICAgICAgICAgIGV4dGVuZHMgWG1sRXZlbnRJbXBsIGltcGxlbWVudHMgU3RhcnREb2N1bWVudAotICAgICAgICB7Ci0gICAgICAgICAgICBTdGFydERvY3VtZW50SW1wbCAoIFJvb3QgciwgU3BsYXkgcyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3VwZXIoIFhNTEV2ZW50LlNUQVJUX0RPQ1VNRU5ULCByLCBzICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3lzdGVtSWQgKCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjaGVja1ZlcnNpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFJvb3QoKS5fcHJvcHMuZ2V0RG9jdHlwZVN5c3RlbUlkKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGdldENoYXJhY3RlckVuY29kaW5nU2NoZW1lICggKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobW9uaXRvcigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2hlY2tWZXJzaW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRSb290KCkuX3Byb3BzLmdldEVuY29kaW5nKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc1N0YW5kYWxvbmUgKCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjaGVja1ZlcnNpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFJvb3QoKS5fc3RhbmRBbG9uZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmVyc2lvbiAoICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1vbml0b3IoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNoZWNrVmVyc2lvbigpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Um9vdCgpLl9wcm9wcy5nZXRWZXJzaW9uKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU3RhcnRFbGVtZW50SW1wbAotICAgICAgICAgICAgZXh0ZW5kcyBYbWxFdmVudEltcGwgaW1wbGVtZW50cyBTdGFydEVsZW1lbnQKLSAgICAgICAgewotICAgICAgICAgICAgU3RhcnRFbGVtZW50SW1wbCAoIFJvb3QgciwgU3BsYXkgcywgUU5hbWUgbmFtZSwgU2F2ZXIgc2F2ZXIgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN1cGVyKCBYTUxFdmVudC5TVEFSVF9FTEVNRU5ULCByLCBzICk7Ci0KLSAgICAgICAgICAgICAgICBfbmFtZSA9IGNvbXB1dGVOYW1lKCBuYW1lLCBzYXZlci5nZXRVcmlNYXAoKSApOwotCi0gICAgICAgICAgICAgICAgX3ByZWZpeE1hcCA9IHNhdmVyLmdldFByZWZpeE1hcCgpOwotCi0gICAgICAgICAgICAgICAgQXR0cmlidXRlSW1wbCBsYXN0QXR0ciA9IG51bGw7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKCBJdGVyYXRvciBpID0gc2F2ZXIuX2F0dHJzLmtleVNldCgpLml0ZXJhdG9yKCkgOwotICAgICAgICAgICAgICAgICAgICAgIGkuaGFzTmV4dCgpIDsgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3BsYXkgYSA9IChTcGxheSkgaS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVJbXBsIGF0dHIgPQotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE5vcm1hbEF0dHJpYnV0ZUltcGwoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgciwgYSwgKFN0cmluZykgc2F2ZXIuX2F0dHJzLmdldCggYSApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVyLmdldFVyaU1hcCgpICk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoX2F0dHJpYnV0ZXMgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIF9hdHRyaWJ1dGVzID0gYXR0cjsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEF0dHIuX25leHQgPSBhdHRyOwotCi0gICAgICAgICAgICAgICAgICAgIGxhc3RBdHRyID0gYXR0cjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBsYXN0QXR0ciA9IG51bGw7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKCBzYXZlci5pdGVyYXRlTWFwcGluZ3MoKSA7Ci0gICAgICAgICAgICAgICAgICAgICAgc2F2ZXIuaGFzTWFwcGluZygpIDsgc2F2ZXIubmV4dE1hcHBpbmcoKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVJbXBsIGF0dHIgPQotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFhtbG5zQXR0cmlidXRlSW1wbCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByLCBzYXZlci5tYXBwaW5nUHJlZml4KCksIHNhdmVyLm1hcHBpbmdVcmkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlci5nZXRVcmlNYXAoKSApOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChfbmFtZXNwYWNlcyA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgX25hbWVzcGFjZXMgPSBhdHRyOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBsYXN0QXR0ci5fbmV4dCA9IGF0dHI7Ci0KLSAgICAgICAgICAgICAgICAgICAgbGFzdEF0dHIgPSBhdHRyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gaGFzTmFtZSgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjaGVja1ZlcnNpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgWE1MTmFtZSBnZXROYW1lICggKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobW9uaXRvcigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2hlY2tWZXJzaW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBfbmFtZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1YmxpYyBBdHRyaWJ1dGVJdGVyYXRvciBnZXRBdHRyaWJ1dGVzICggKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobW9uaXRvcigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2hlY2tWZXJzaW9uKCk7Ci0gICAgCi0gICAgICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEF0dHJpYnV0ZUl0ZXJhdG9ySW1wbCggZ2V0Um9vdCgpLCBfYXR0cmlidXRlcywgbnVsbCApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIEF0dHJpYnV0ZUl0ZXJhdG9yIGdldE5hbWVzcGFjZXMgKCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjaGVja1ZlcnNpb24oKTsKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgQXR0cmlidXRlSXRlcmF0b3JJbXBsKCBnZXRSb290KCksIG51bGwsIF9uYW1lc3BhY2VzICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgQXR0cmlidXRlSXRlcmF0b3IgZ2V0QXR0cmlidXRlc0FuZE5hbWVzcGFjZXMgKCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjaGVja1ZlcnNpb24oKTsKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXcgQXR0cmlidXRlSXRlcmF0b3JJbXBsKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFJvb3QoKSwgX2F0dHJpYnV0ZXMsIF9uYW1lc3BhY2VzICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgQXR0cmlidXRlIGdldEF0dHJpYnV0ZUJ5TmFtZSAoIFhNTE5hbWUgeG1sTmFtZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjaGVja1ZlcnNpb24oKTsKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgZm9yICggQXR0cmlidXRlSW1wbCBhID0gX2F0dHJpYnV0ZXMgOyBhICE9IG51bGwgOyBhID0gYS5fbmV4dCApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4bWxOYW1lLmVxdWFscyggYS5nZXROYW1lKCkgKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlVXJpICggU3RyaW5nIHByZWZpeCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjaGVja1ZlcnNpb24oKTsKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgICAgICAgICAoU3RyaW5nKSBfcHJlZml4TWFwLmdldCggcHJlZml4ID09IG51bGwgPyAiIiA6IHByZWZpeCApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIE1hcCBnZXROYW1lc3BhY2VNYXAgKCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjaGVja1ZlcnNpb24oKTsKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9wcmVmaXhNYXA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBBdHRyaWJ1dGVJdGVyYXRvckltcGwKLSAgICAgICAgICAgICAgICBpbXBsZW1lbnRzIEF0dHJpYnV0ZUl0ZXJhdG9yCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHVibGljIE9iamVjdCBtb25pdG9yKCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBfcm9vdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQXR0cmlidXRlSXRlcmF0b3JJbXBsICgKLSAgICAgICAgICAgICAgICAgICAgUm9vdCByLCBBdHRyaWJ1dGVJbXBsIGF0dHJpYnV0ZXMsIEF0dHJpYnV0ZUltcGwgbmFtZXNwYWNlcyApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBfcm9vdCA9IHI7Ci0gICAgICAgICAgICAgICAgICAgIF92ZXJzaW9uID0gci5nZXRWZXJzaW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIF9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKLSAgICAgICAgICAgICAgICAgICAgX25hbWVzcGFjZXMgPSBuYW1lc3BhY2VzOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHB1YmxpYyBBdHRyaWJ1dGUgbmV4dCAoICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobW9uaXRvcigpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGVja1ZlcnNpb24oKTsKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUltcGwgYXR0ciA9IG51bGw7Ci0gICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2F0dHJpYnV0ZXMgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyID0gX2F0dHJpYnV0ZXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2F0dHJpYnV0ZXMgPSBhdHRyLl9uZXh0OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX25hbWVzcGFjZXMgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyID0gX25hbWVzcGFjZXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX25hbWVzcGFjZXMgPSBhdHRyLl9uZXh0OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF0dHI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBoYXNOZXh0ICggKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrVmVyc2lvbigpOwotICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9hdHRyaWJ1dGVzICE9IG51bGwgfHwgX25hbWVzcGFjZXMgIT0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHB1YmxpYyBBdHRyaWJ1dGUgcGVlayAoICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobW9uaXRvcigpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGVja1ZlcnNpb24oKTsKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfYXR0cmlidXRlcyAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfYXR0cmlidXRlczsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9uYW1lc3BhY2VzICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9uYW1lc3BhY2VzOwotICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBza2lwICggKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrVmVyc2lvbigpOwotICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9hdHRyaWJ1dGVzICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2F0dHJpYnV0ZXMgPSBfYXR0cmlidXRlcy5fbmV4dDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9uYW1lc3BhY2VzICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX25hbWVzcGFjZXMgPSBfbmFtZXNwYWNlcy5fbmV4dDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHByaXZhdGUgZmluYWwgdm9pZCBjaGVja1ZlcnNpb24gKCApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoX3ZlcnNpb24gIT0gX3Jvb3QuZ2V0VmVyc2lvbigpKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiggIkRvY3VtZW50IGNoYW5nZWQiICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcHJpdmF0ZSBSb290ICAgICAgICAgIF9yb290OwotICAgICAgICAgICAgICAgIHByaXZhdGUgbG9uZyAgICAgICAgICBfdmVyc2lvbjsKLSAgICAgICAgICAgICAgICBwcml2YXRlIEF0dHJpYnV0ZUltcGwgX2F0dHJpYnV0ZXM7Ci0gICAgICAgICAgICAgICAgcHJpdmF0ZSBBdHRyaWJ1dGVJbXBsIF9uYW1lc3BhY2VzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcml2YXRlIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBBdHRyaWJ1dGVJbXBsIGltcGxlbWVudHMgQXR0cmlidXRlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHVibGljIE9iamVjdCBtb25pdG9yKCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBfcm9vdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQXR0cmlidXRlSW1wbCAoIFJvb3QgciApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBfcm9vdCA9IHI7Ci0gICAgICAgICAgICAgICAgICAgIF92ZXJzaW9uID0gci5nZXRWZXJzaW9uKCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcHVibGljIFhNTE5hbWUgZ2V0TmFtZSAoICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobW9uaXRvcigpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGVja1ZlcnNpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfbmFtZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSAoICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobW9uaXRvcigpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGVja1ZlcnNpb24oKTsKLSAgICAvLyBUT0RPIC0gTWFrZSBzdXJlIHRocm93aW5nIGF3YXkgdGhpcyBEVEQgaW5mbyBpcyBvay4KLSAgICAvLyBJcyB0aGVyZSBzY2hlbWEgaW5mbyB3aGljaCBjYW4gcmV0dXJuIG1vcmUgdXNlZnVsIGluZm8/Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNEQVRBIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHB1YmxpYyBYTUxOYW1lIGdldFNjaGVtYVR5cGUgKCApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1vbml0b3IoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tWZXJzaW9uKCk7Ci0gICAgLy8gVE9ETyAtIENhbiBJIHJldHVybiBzb21ldGhpbmcgcmVhc29uYWJsZSBoZXJlPwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgZmluYWwgdm9pZCBjaGVja1ZlcnNpb24gKCApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoX3ZlcnNpb24gIT0gX3Jvb3QuZ2V0VmVyc2lvbigpKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiggIkRvY3VtZW50IGNoYW5nZWQiICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgQXR0cmlidXRlSW1wbCBfbmV4dDsKLQotICAgICAgICAgICAgICAgIHByb3RlY3RlZCBYTUxOYW1lIF9uYW1lOwotCi0gICAgICAgICAgICAgICAgcHJvdGVjdGVkIFJvb3QgIF9yb290OwotICAgICAgICAgICAgICAgIHByaXZhdGUgbG9uZyAgX3ZlcnNpb247Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFhtbG5zQXR0cmlidXRlSW1wbCBleHRlbmRzIEF0dHJpYnV0ZUltcGwKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBYbWxuc0F0dHJpYnV0ZUltcGwgKAotICAgICAgICAgICAgICAgICAgICBSb290IHIsIFN0cmluZyBwcmVmaXgsIFN0cmluZyB1cmksIE1hcCB1cmlNYXAgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3VwZXIoIHIgKTsKLQotICAgICAgICAgICAgICAgICAgICBfdXJpID0gdXJpOwotCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBsb2NhbDsKLQotICAgICAgICAgICAgICAgICAgICBpZiAocHJlZml4Lmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCA9ICJ4bWxucyI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbCA9IHByZWZpeDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCA9ICJ4bWxucyI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBfbmFtZSA9IG5ldyBYbWxOYW1lSW1wbCggbnVsbCwgbG9jYWwsIHByZWZpeCApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUgKCApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1vbml0b3IoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tWZXJzaW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3VyaTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHByaXZhdGUgU3RyaW5nIF91cmk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIE5vcm1hbEF0dHJpYnV0ZUltcGwgZXh0ZW5kcyBBdHRyaWJ1dGVJbXBsCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTm9ybWFsQXR0cmlidXRlSW1wbCAoCi0gICAgICAgICAgICAgICAgICAgIFJvb3QgciwgU3BsYXkgcywgU3RyaW5nIHZhbHVlLCBNYXAgdXJpTWFwICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN1cGVyKCByICk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydCBzLmlzTm9ybWFsQXR0cigpOwotICAgICAgICAgICAgICAgICAgICBfc3BsYXkgPSBzOwotICAgICAgICAgICAgICAgICAgICBfdmFsdWUgPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgX25hbWUgPSBjb21wdXRlTmFtZSggcy5nZXROYW1lKCksIHVyaU1hcCApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUgKCApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1vbml0b3IoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tWZXJzaW9uKCk7Ci0gICAgCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZhbHVlICE9IG51bGwgPyBfdmFsdWUgOiBfc3BsYXkuZ2V0VGV4dCggX3Jvb3QgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHByaXZhdGUgU3RyaW5nIF92YWx1ZTsgLy8gSWYgaW52YWxpZCBpbiB0aGUgc3RvcmUKLSAgICAgICAgICAgICAgICBwcml2YXRlIFNwbGF5IF9zcGxheTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJpdmF0ZSBYTUxOYW1lIF9uYW1lOwotICAgICAgICAgICAgcHJpdmF0ZSBNYXAgICAgIF9wcmVmaXhNYXA7Ci0KLSAgICAgICAgICAgIHByaXZhdGUgQXR0cmlidXRlSW1wbCBfYXR0cmlidXRlczsKLSAgICAgICAgICAgIHByaXZhdGUgQXR0cmlidXRlSW1wbCBfbmFtZXNwYWNlczsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIFN0YXJ0UHJlZml4TWFwcGluZ0ltcGwKLSAgICAgICAgICAgIGV4dGVuZHMgWG1sRXZlbnRJbXBsIGltcGxlbWVudHMgU3RhcnRQcmVmaXhNYXBwaW5nCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0YXJ0UHJlZml4TWFwcGluZ0ltcGwgKCBSb290IHIsIFN0cmluZyBwcmVmaXgsIFN0cmluZyB1cmkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN1cGVyKCBYTUxFdmVudC5TVEFSVF9QUkVGSVhfTUFQUElORywgciwgbnVsbCApOwotCi0gICAgICAgICAgICAgICAgX3ByZWZpeCA9IHByZWZpeDsKLSAgICAgICAgICAgICAgICBfdXJpID0gdXJpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZVVyaSAoICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1vbml0b3IoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNoZWNrVmVyc2lvbigpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3VyaTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHJlZml4ICggKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobW9uaXRvcigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2hlY2tWZXJzaW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBfcHJlZml4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJpdmF0ZSBTdHJpbmcgX3ByZWZpeCwgX3VyaTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIENoYW5nZVByZWZpeE1hcHBpbmdJbXBsCi0gICAgICAgICAgICBleHRlbmRzIFhtbEV2ZW50SW1wbCBpbXBsZW1lbnRzIENoYW5nZVByZWZpeE1hcHBpbmcKLSAgICAgICAgewotICAgICAgICAgICAgQ2hhbmdlUHJlZml4TWFwcGluZ0ltcGwgKAotICAgICAgICAgICAgICAgIFJvb3QgciwgU3RyaW5nIHByZWZpeCwgU3RyaW5nIG9sZFVyaSwgU3RyaW5nIG5ld1VyaSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3VwZXIoIFhNTEV2ZW50LkNIQU5HRV9QUkVGSVhfTUFQUElORywgciwgbnVsbCApOwotCi0gICAgICAgICAgICAgICAgX29sZFVyaSA9IG9sZFVyaTsKLSAgICAgICAgICAgICAgICBfbmV3VXJpID0gbmV3VXJpOwotICAgICAgICAgICAgICAgIF9wcmVmaXggPSBwcmVmaXg7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0T2xkTmFtZXNwYWNlVXJpICggKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobW9uaXRvcigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2hlY2tWZXJzaW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb2xkVXJpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIFN0cmluZyBnZXROZXdOYW1lc3BhY2VVcmkgKCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjaGVja1ZlcnNpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9uZXdVcmk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFByZWZpeCAoICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1vbml0b3IoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNoZWNrVmVyc2lvbigpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ByZWZpeDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHByaXZhdGUgU3RyaW5nIF9vbGRVcmksIF9uZXdVcmksIF9wcmVmaXg7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBFbmRQcmVmaXhNYXBwaW5nSW1wbAotICAgICAgICAgICAgZXh0ZW5kcyBYbWxFdmVudEltcGwgaW1wbGVtZW50cyBFbmRQcmVmaXhNYXBwaW5nCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVuZFByZWZpeE1hcHBpbmdJbXBsICggUm9vdCByLCBTdHJpbmcgcHJlZml4ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdXBlciggWE1MRXZlbnQuRU5EX1BSRUZJWF9NQVBQSU5HLCByLCBudWxsICk7Ci0gICAgICAgICAgICAgICAgX3ByZWZpeCA9IHByZWZpeDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIFN0cmluZyBnZXRQcmVmaXggKCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjaGVja1ZlcnNpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9wcmVmaXg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwcml2YXRlIFN0cmluZyBfcHJlZml4OwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQ2hhcmFjdGVyRGF0YUltcGwKLSAgICAgICAgICAgIGV4dGVuZHMgWG1sRXZlbnRJbXBsIGltcGxlbWVudHMgQ2hhcmFjdGVyRGF0YQotICAgICAgICB7Ci0gICAgICAgICAgICBDaGFyYWN0ZXJEYXRhSW1wbCAoIFJvb3QgciwgU3BsYXkgcywgaW50IHAsIFN0cmluZyBjaGFyRGF0YSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3VwZXIoIFhNTEV2ZW50LkNIQVJBQ1RFUl9EQVRBLCByLCBzICk7Ci0KLSAgICAgICAgICAgICAgICBhc3NlcnQgcCA+IDAgfHwgKGNoYXJEYXRhICE9IG51bGwgJiYgY2hhckRhdGEubGVuZ3RoKCkgPiAwKTsKLQotICAgICAgICAgICAgICAgIF9wb3MgPSBwOwotICAgICAgICAgICAgICAgIF9jaGFyRGF0YSA9IGNoYXJEYXRhOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGdldENvbnRlbnQgKCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjaGVja1ZlcnNpb24oKTsKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgU3BsYXkgcyA9IGdldFNwbGF5KCk7Ci0gICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChfcG9zID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jaGFyRGF0YTsKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgUm9vdCByID0gZ2V0Um9vdCgpOwotICAgIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgICAgICAgICAgICAgIHIuX3RleHQuZmV0Y2goCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5nZXRDcEZvclBvcyggciwgX3BvcyApLCBzLmdldFBvc3RDY2goIF9wb3MgKSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gaGFzQ29udGVudCAoICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1vbml0b3IoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNoZWNrVmVyc2lvbigpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHByaXZhdGUgaW50ICAgIF9wb3M7Ci0gICAgICAgICAgICBwcml2YXRlIFN0cmluZyBfY2hhckRhdGE7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBFbmRFbGVtZW50SW1wbAotICAgICAgICAgICAgZXh0ZW5kcyBYbWxFdmVudEltcGwgaW1wbGVtZW50cyBFbmRFbGVtZW50Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEVuZEVsZW1lbnRJbXBsICggUm9vdCByLCBTcGxheSBzLCBRTmFtZSBuYW1lLCBNYXAgdXJpTWFwICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdXBlciggWE1MRXZlbnQuRU5EX0VMRU1FTlQsIHIsIHMgKTsKLQotICAgICAgICAgICAgICAgIGFzc2VydCBzLmlzTGVhZigpIHx8IHMuaXNFbmQoKTsKLQotICAgICAgICAgICAgICAgIGlmIChuYW1lID09IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAocy5pc0VuZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHMuZ2V0Q29udGFpbmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBuYW1lID0gcy5nZXROYW1lKCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgX25hbWUgPSBjb21wdXRlTmFtZSggbmFtZSwgdXJpTWFwICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGhhc05hbWUgKCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjaGVja1ZlcnNpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgWE1MTmFtZSBnZXROYW1lICggKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobW9uaXRvcigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2hlY2tWZXJzaW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBfbmFtZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHByaXZhdGUgWE1MTmFtZSBfbmFtZTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEVuZERvY3VtZW50SW1wbAotICAgICAgICAgICAgZXh0ZW5kcyBYbWxFdmVudEltcGwgaW1wbGVtZW50cyBFbmREb2N1bWVudAotICAgICAgICB7Ci0gICAgICAgICAgICBFbmREb2N1bWVudEltcGwgKCBSb290IHIsIFNwbGF5IHMgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN1cGVyKCBYTUxFdmVudC5FTkRfRE9DVU1FTlQsIHIsIHMgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIENvbW1lbnRJbXBsCi0gICAgICAgICAgICBleHRlbmRzIFhtbEV2ZW50SW1wbCBpbXBsZW1lbnRzIENvbW1lbnQKLSAgICAgICAgewotICAgICAgICAgICAgQ29tbWVudEltcGwgKCBSb290IHIsIFNwbGF5IHMgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN1cGVyKCBYTUxFdmVudC5DT01NRU5ULCByLCBzICk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IHMuaXNDb21tZW50KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29udGVudCAoICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1vbml0b3IoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNoZWNrVmVyc2lvbigpOwotICAgIAotICAgICAgICAgICAgICAgICAgICBTcGxheSBzID0gZ2V0U3BsYXkoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHMuZ2V0Q2NoKCkgPT0gMCA/IG51bGwgOiBzLmdldFRleHQoIGdldFJvb3QoKSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gaGFzQ29udGVudCAoICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZWQgKG1vbml0b3IoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNoZWNrVmVyc2lvbigpOwotICAgIAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0U3BsYXkoKS5nZXRDY2goKSA+IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUHJvY2Vzc2luZ0luc3RydWN0aW9uSW1wbAotICAgICAgICAgICAgZXh0ZW5kcyBYbWxFdmVudEltcGwgaW1wbGVtZW50cyBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24KLSAgICAgICAgewotICAgICAgICAgICAgUHJvY2Vzc2luZ0luc3RydWN0aW9uSW1wbCAoIFJvb3QgciwgU3BsYXkgcyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3VwZXIoIFhNTEV2ZW50LlBST0NFU1NJTkdfSU5TVFJVQ1RJT04sIHIsIHMgKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQgcy5pc1Byb2NpbnN0KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0VGFyZ2V0ICggKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN5bmNocm9uaXplZCAobW9uaXRvcigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2hlY2tWZXJzaW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRTcGxheSgpLmdldExvY2FsKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGdldERhdGEgKCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3luY2hyb25pemVkIChtb25pdG9yKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjaGVja1ZlcnNpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgU3BsYXkgcyA9IGdldFNwbGF5KCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzLmdldENjaCgpID09IDAgPyBudWxsIDogcy5nZXRUZXh0KCBnZXRSb290KCkgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIFhtbEV2ZW50SW1wbCBfaW4sIF9vdXQ7Ci0gICAgfQotCi0gICAgc3RhdGljIGZpbmFsIGNsYXNzIFhtbElucHV0U3RyZWFtSW1wbCBleHRlbmRzIEdlbmVyaWNYbWxJbnB1dFN0cmVhbQotICAgIHsKLSAgICAgICAgWG1sSW5wdXRTdHJlYW1JbXBsICggUm9vdCByLCBTcGxheSBzLCBpbnQgcCwgWG1sT3B0aW9ucyBvcHRpb25zICkKLSAgICAgICAgewotICAgICAgICAgICAgX3htbElucHV0U3RyZWFtU2F2ZXIgPQotICAgICAgICAgICAgICAgIG5ldyBYbWxJbnB1dFN0cmVhbVNhdmVyKCByLCBzLCBwLCBvcHRpb25zICk7Ci0KLSAgICAgICAgICAgIC8vIE1ha2UgdGhlIHNhdmVyIGdyaW5kIGF3YXkganVzdCBhIGJpdCB0byB0aHJvdyBhbnkgZXhjZXB0aW9ucwotICAgICAgICAgICAgLy8gcmVsYXRlZCB0byB0aGUgaW5hYmlsaXR5IHRvIGNyZWF0ZSBhIHN0cmVhbSBvbiB0aGlzIHhtbAotICAgICAgICAgICAgCi0gICAgICAgICAgICBfeG1sSW5wdXRTdHJlYW1TYXZlci5wcm9jZXNzKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgWE1MRXZlbnQgbmV4dEV2ZW50ICggKSB0aHJvd3MgWE1MU3RyZWFtRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBfeG1sSW5wdXRTdHJlYW1TYXZlci5kZXF1ZXVlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIFhtbElucHV0U3RyZWFtU2F2ZXIgX3htbElucHV0U3RyZWFtU2F2ZXI7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLwotICAgIC8vCi0KLSAgICBzdGF0aWMgZmluYWwgY2xhc3MgVmFsaWRhdG9yU2F2ZXIKLSAgICAgICAgZXh0ZW5kcyBTYXZlciBpbXBsZW1lbnRzIFZhbGlkYXRvckxpc3RlbmVyLkV2ZW50Ci0gICAgewotICAgICAgICBWYWxpZGF0b3JTYXZlciAoCi0gICAgICAgICAgICBSb290IHIsIFNwbGF5IHMsIGludCBwLAotICAgICAgICAgICAgWG1sT3B0aW9ucyBvcHRpb25zLCBWYWxpZGF0b3JMaXN0ZW5lciB2RXZlbnRTaW5rICkKLSAgICAgICAgewotICAgICAgICAgICAgc3VwZXIoIHIsIHMsIHAsIG9wdGlvbnMgKTsKLQotICAgICAgICAgICAgX3dhbnREdXBBdHRycyA9IHRydWU7Ci0KLSAgICAgICAgICAgIGFzc2VydCBwID09IDA7Ci0KLSAgICAgICAgICAgIF9zdGFydFNwbGF5ID0gczsKLSAgICAgICAgICAgIF92RXZlbnRTaW5rID0gdkV2ZW50U2luazsKLQotICAgICAgICAgICAgd2hpbGUgKCBwcm9jZXNzKCkgKQotICAgICAgICAgICAgICAgIDsgIC8vIEVtcHR5Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBlbWl0WG1sbnNGcmFnbWVudCAoIFNwbGF5IHMgKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBlbWl0VGV4dEZyYWdtZW50ICggU3BsYXkgcywgaW50IHAsIGludCBjY2ggKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBlbWl0Q29tbWVudEZyYWdtZW50ICggU3BsYXkgcyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGVtaXRQcm9jaW5zdEZyYWdtZW50ICggU3BsYXkgcyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGVtaXRUZXh0QWZ0ZXIgKCBTcGxheSBzLCBpbnQgcCwgaW50IGNjaCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfdGV4dCA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFzc2VydCBjY2ggPiAwOwotICAgICAgICAgICAgICAgIGVtaXRFdmVudCggVmFsaWRhdG9yTGlzdGVuZXIuVEVYVCwgcywgcCwgbnVsbCwgcywgcCApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVtaXRFdmVudCggVmFsaWRhdG9yTGlzdGVuZXIuVEVYVCwgcywgcCwgbnVsbCwgdGV4dCgpICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBlbWl0RW5kICggU3BsYXkgcywgUU5hbWUgbmFtZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVtaXRFdmVudCggVmFsaWRhdG9yTGlzdGVuZXIuRU5ELCBzLCAwICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBlbWl0RG9jVHlwZSgKLSAgICAgICAgICAgIFN0cmluZyBkb2N0eXBlTmFtZSwgU3RyaW5nIHB1YmxpY0lELCBTdHJpbmcgc3lzdGVtSUQgKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGVtaXRDb21tZW50ICggU3BsYXkgcyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzLmdldENjaEFmdGVyKCkgPiAwKQotICAgICAgICAgICAgICAgIGVtaXRFdmVudCggVmFsaWRhdG9yTGlzdGVuZXIuVEVYVCwgcywgMCwgbnVsbCwgcywgMSApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdFByb2NpbnN0ICggU3BsYXkgcyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzLmdldENjaEFmdGVyKCkgPiAwKQotICAgICAgICAgICAgICAgIGVtaXRFdmVudCggVmFsaWRhdG9yTGlzdGVuZXIuVEVYVCwgcywgMCwgbnVsbCwgcywgMSApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdEF0dHJGcmFnbWVudCAoIFNwbGF5IHMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbWl0RXZlbnQoIFZhbGlkYXRvckxpc3RlbmVyLkJFR0lOLCBzLCAwLCBudWxsICk7Ci0KLSAgICAgICAgICAgIGlmIChfdGV4dCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChfdGV4dC5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICAgICAgICAgIGVtaXRFdmVudCggVmFsaWRhdG9yTGlzdGVuZXIuVEVYVCwgcywgMCwgbnVsbCwgdGV4dCgpICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChzLmdldENjaCgpID4gMCkKLSAgICAgICAgICAgICAgICBlbWl0RXZlbnQoIFZhbGlkYXRvckxpc3RlbmVyLlRFWFQsIHMsIDAsIG51bGwsIHMsIDAgKTsKLQotICAgICAgICAgICAgZW1pdEV2ZW50KCBWYWxpZGF0b3JMaXN0ZW5lci5FTkQsIHMsIDAgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGVtaXRDb250YWluZXIgKCBDb250YWluZXIgYywgUU5hbWUgbmFtZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFzc2VydCBfeHNpTm9Mb2MgPT0gbnVsbDsKLSAgICAgICAgICAgIGFzc2VydCBfeHNpTG9jID09IG51bGw7Ci0gICAgICAgICAgICBhc3NlcnQgX3hzaVR5cGUgPT0gbnVsbDsKLSAgICAgICAgICAgIGFzc2VydCBfeHNpTmlsID09IG51bGw7Ci0KLSAgICAgICAgICAgIGZvciAoIFNwbGF5IHMgPSBjLm5leHRTcGxheSgpIDsgcy5pc0F0dHIoKSA7IHMgPSBzLm5leHRTcGxheSgpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAocy5pc1hzaUF0dHIoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBsb2NhbCA9IHMuZ2V0TG9jYWwoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWwuZXF1YWxzKCAidHlwZSIgKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIF94c2lUeXBlID0gczsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobG9jYWwuZXF1YWxzKCAibmlsIiApKQotICAgICAgICAgICAgICAgICAgICAgICAgX3hzaU5pbCA9IHM7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxvY2FsLmVxdWFscyggInNjaGVtYUxvY2F0aW9uIiApKQotICAgICAgICAgICAgICAgICAgICAgICAgX3hzaUxvYyA9IHM7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxvY2FsLmVxdWFscyggIm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb24iICkpCi0gICAgICAgICAgICAgICAgICAgICAgICBfeHNpTm9Mb2MgPSBzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZW1pdEV2ZW50KAotICAgICAgICAgICAgICAgIFZhbGlkYXRvckxpc3RlbmVyLkJFR0lOLCBjLCAwLAotICAgICAgICAgICAgICAgIGMgPT0gX3N0YXJ0U3BsYXkgPyBudWxsIDogbmFtZSApOwotCi0gICAgICAgICAgICBfeHNpTm9Mb2MgPSBfeHNpTG9jID0gX3hzaVR5cGUgPSBfeHNpTmlsID0gbnVsbDsKLQotICAgICAgICAgICAgZm9yICggSXRlcmF0b3IgaSA9IF9hdHRycy5rZXlTZXQoKS5pdGVyYXRvcigpIDsgaS5oYXNOZXh0KCkgOyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3BsYXkgcyA9IChTcGxheSkgaS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHMuaXNYc2lBdHRyKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbG9jYWwgPSBzLmdldExvY2FsKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsLmVxdWFscyggInR5cGUiICkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsLmVxdWFscyggIm5pbCIgKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwuZXF1YWxzKCAic2NoZW1hTG9jYXRpb24iICkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsLmVxdWFscyggIm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb24iICkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgU3RyaW5nIGludmFsaWRBdHRyVmFsdWUgPSAoU3RyaW5nKSBfYXR0cnMuZ2V0KCBzICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaW52YWxpZEF0dHJWYWx1ZSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZW1pdEV2ZW50KAotICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9yTGlzdGVuZXIuQVRUUiwgcywgMCwgcy5nZXROYW1lKCksIHMsIDAgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZW1pdEV2ZW50KAotICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9yTGlzdGVuZXIuQVRUUiwgcywgMCwgcy5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkQXR0clZhbHVlICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBlbWl0RXZlbnQoIFZhbGlkYXRvckxpc3RlbmVyLkVOREFUVFJTLCBjLCAwICk7Ci0KLSAgICAgICAgICAgIGlmIChjLmlzRG9jKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IGMuaXNEb2MoKTsKLQotICAgICAgICAgICAgICAgIGlmIChfdGV4dCAhPSBudWxsKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKF90ZXh0Lmxlbmd0aCgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRFdmVudCggVmFsaWRhdG9yTGlzdGVuZXIuVEVYVCwgYywgMSwgbnVsbCwgdGV4dCgpICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMuZ2V0Q2NoKCkgPiAwKQotICAgICAgICAgICAgICAgICAgICBlbWl0RXZlbnQoIFZhbGlkYXRvckxpc3RlbmVyLlRFWFQsIGMsIDEsIG51bGwsIGMsIDEgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGMuaXNMZWFmKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IGNjaCA9IF90ZXh0ICE9IG51bGwgPyBfdGV4dC5sZW5ndGgoKSA6IGMuZ2V0Q2NoVmFsdWUoKTsKLQotICAgICAgICAgICAgICAgIGlmIChjY2ggPiAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKF90ZXh0ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRFdmVudCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JMaXN0ZW5lci5URVhULCBjLCAxLCBudWxsLCB0ZXh0KCkgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRFdmVudCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JMaXN0ZW5lci5URVhULCBjLCAxLCBudWxsLCBjLCAxICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBlbWl0RXZlbnQoIFZhbGlkYXRvckxpc3RlbmVyLkVORCwgYywgYy5nZXRQb3NMZWFmRW5kKCkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGVtaXRFdmVudCAoIGludCBraW5kLCBTcGxheSBzTG9jLCBpbnQgcExvYyApCi0gICAgICAgICAgICB7IGVtaXRFdmVudCgga2luZCwgc0xvYywgcExvYywgbnVsbCwgbnVsbCwgMCwgbnVsbCApOyB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdEV2ZW50ICggaW50IGtpbmQsIFNwbGF5IHNMb2MsIGludCBwTG9jLCBRTmFtZSBuYW1lICkKLSAgICAgICAgICAgIHsgZW1pdEV2ZW50KCBraW5kLCBzTG9jLCBwTG9jLCBuYW1lLCBudWxsLCAwLCBudWxsICk7IH0KLQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBlbWl0RXZlbnQgKAotICAgICAgICAgICAgaW50IGtpbmQsIFNwbGF5IHNMb2MsIGludCBwTG9jLCBRTmFtZSBuYW1lLCBTdHJpbmcgdGV4dCApCi0gICAgICAgICAgICAgICAgeyBlbWl0RXZlbnQgKCBraW5kLCBzTG9jLCBwTG9jLCBuYW1lLCBudWxsLCAwLCB0ZXh0ICk7IH0KLQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBlbWl0RXZlbnQgKAotICAgICAgICAgICAgaW50IGtpbmQsIFNwbGF5IHNMb2MsIGludCBwTG9jLCBRTmFtZSBuYW1lLCBTcGxheSBzVGV4dCwgaW50IHBUZXh0ICkKLSAgICAgICAgICAgICAgICB7IGVtaXRFdmVudCAoIGtpbmQsIHNMb2MsIHBMb2MsIG5hbWUsIHNUZXh0LCBwVGV4dCwgbnVsbCApOyB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdEV2ZW50ICgKLSAgICAgICAgICAgIGludCBraW5kLCBTcGxheSBzTG9jLCBpbnQgcExvYywgUU5hbWUgbmFtZSwKLSAgICAgICAgICAgIFNwbGF5IHNUZXh0LCBpbnQgcFRleHQsIFN0cmluZyB0ZXh0ICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGtpbmQgPT0gVmFsaWRhdG9yTGlzdGVuZXIuVEVYVCAmJiBfZW1pdHRlZFRleHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBib29sZWFuIGhhc1RleHQgPSB0ZXh0ICE9IG51bGwgfHwgc1RleHQgIT0gbnVsbDsKLQotICAgICAgICAgICAgYXNzZXJ0Ci0gICAgICAgICAgICAgICAgIWhhc1RleHQgfHwKLSAgICAgICAgICAgICAgICAgICAgKGtpbmQgPT0gVmFsaWRhdG9yTGlzdGVuZXIuQVRUUiB8fAotICAgICAgICAgICAgICAgICAgICAgICAga2luZCA9PSBWYWxpZGF0b3JMaXN0ZW5lci5URVhUKTsKLQotICAgICAgICAgICAgYXNzZXJ0IGtpbmQgIT0gVmFsaWRhdG9yTGlzdGVuZXIuQVRUUiB8fCBoYXNUZXh0OwotICAgICAgICAgICAgYXNzZXJ0IGtpbmQgIT0gVmFsaWRhdG9yTGlzdGVuZXIuVEVYVCB8fCBoYXNUZXh0OwotCi0gICAgICAgICAgICBhc3NlcnQga2luZCAhPSBWYWxpZGF0b3JMaXN0ZW5lci5BVFRSIHx8IG5hbWUgIT0gbnVsbDsKLQotICAgICAgICAgICAgX25hbWUgPSBuYW1lOwotICAgICAgICAgICAgX3NUZXh0ID0gc1RleHQ7Ci0gICAgICAgICAgICBfcFRleHQgPSBwVGV4dDsKLSAgICAgICAgICAgIF9ldmVudFRleHQgPSB0ZXh0OwotICAgICAgICAgICAgX2hhc1RleHQgPSBoYXNUZXh0OwotICAgICAgICAgICAgX3NMb2MgPSBzTG9jOwotICAgICAgICAgICAgX3BMb2MgPSBwTG9jOwotCi0gICAgICAgICAgICBfdkV2ZW50U2luay5uZXh0RXZlbnQoIGtpbmQsIHRoaXMgKTsKLQotICAgICAgICAgICAgX2VtaXR0ZWRUZXh0ID0ga2luZCA9PSBWYWxpZGF0b3JMaXN0ZW5lci5URVhUOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8KLSAgICAgICAgLy8KLQotICAgICAgICBwdWJsaWMgWG1sQ3Vyc29yIGdldExvY2F0aW9uQXNDdXJzb3IgKCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoZWNrVmVyc2lvbigpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBDdXJzb3IoIGdldFJvb3QoKSwgX3NMb2MsIF9wTG9jICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBnZXRYc2lUeXBlICggQ2hhcnMgY2hhcnMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX3hzaVR5cGUgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIHNldENoYXJzKCBjaGFycywgUFJFU0VSVkUsIG51bGwsIF94c2lUeXBlLCAwICk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gZ2V0WHNpTmlsICggQ2hhcnMgY2hhcnMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX3hzaU5pbCA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotCi0gICAgICAgICAgICBzZXRDaGFycyggY2hhcnMsIFBSRVNFUlZFLCBudWxsLCBfeHNpTmlsLCAwICk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gZ2V0WHNpTG9jICggQ2hhcnMgY2hhcnMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX3hzaUxvYyA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgc2V0Q2hhcnMoIGNoYXJzLCBQUkVTRVJWRSwgbnVsbCwgX3hzaUxvYywgMCApOwotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGdldFhzaU5vTG9jICggQ2hhcnMgY2hhcnMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX3hzaU5vTG9jID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBzZXRDaGFycyggY2hhcnMsIFBSRVNFUlZFLCBudWxsLCBfeHNpTm9Mb2MsIDAgKTsKLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgUU5hbWUgZ2V0TmFtZSAoICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIF9uYW1lOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIHNldENoYXJzICgKLSAgICAgICAgICAgIENoYXJzIGNoYXJzLCBpbnQgd3NyLCBTdHJpbmcgc3RyaW5nLCBTcGxheSBzVGV4dCwgaW50IHBUZXh0ICkKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0IHN0cmluZyAhPSBudWxsIHx8IHNUZXh0ICE9IG51bGw7Ci0KLSAgICAgICAgICAgIGNoZWNrVmVyc2lvbigpOwotCi0gICAgICAgICAgICBSb290IHIgPSBnZXRSb290KCk7Ci0KLSAgICAgICAgICAgIGNoYXJzLmJ1ZmZlciA9IG51bGw7Ci0gICAgICAgICAgICBjaGFycy5zdHJpbmcgPSBudWxsOwotCi0gICAgICAgICAgICBpZiAoc3RyaW5nICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2hhcnMuc3RyaW5nID0gc3RyaW5nOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAocFRleHQgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjaGFycy5idWZmZXIgPSByLl90ZXh0Ll9idWY7Ci0gICAgICAgICAgICAgICAgY2hhcnMubGVuZ3RoID0gc1RleHQuZ2V0Q2NoKCk7Ci0KLSAgICAgICAgICAgICAgICBjaGFycy5vZmZzZXQgPQotICAgICAgICAgICAgICAgICAgICByLl90ZXh0LnVuT2JzY3VyZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIHIuZ2V0Q3AoIHNUZXh0ICksIGNoYXJzLmxlbmd0aCApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAocFRleHQgPT0gMSAmJiBzVGV4dC5pc0xlYWYoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjaGFycy5idWZmZXIgPSByLl90ZXh0Ll9idWY7Ci0gICAgICAgICAgICAgICAgY2hhcnMubGVuZ3RoID0gc1RleHQuZ2V0Q2NoVmFsdWUoKTsKLQotICAgICAgICAgICAgICAgIGNoYXJzLm9mZnNldCA9Ci0gICAgICAgICAgICAgICAgICAgIHIuX3RleHQudW5PYnNjdXJlKAotICAgICAgICAgICAgICAgICAgICAgICAgci5nZXRDcCggc1RleHQgKSwgY2hhcnMubGVuZ3RoICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IHBUZXh0ID09IHNUZXh0LmdldFBvc0FmdGVyKCk7Ci0KLSAgICAgICAgICAgICAgICBib29sZWFuIG1vcmVUZXh0ID0gZmFsc2U7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKCBTcGxheSB0ID0gc1RleHQubmV4dE5vbkF0dHJTcGxheSgpIDsgOwotICAgICAgICAgICAgICAgICAgICAgIHQgPSB0Lm5leHRTcGxheSgpICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghdC5pc0NvbW1lbnQoKSAmJiAhdC5pc1Byb2NpbnN0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBpZiAodC5nZXRDY2hBZnRlcigpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbW9yZVRleHQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1vcmVUZXh0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhcnMuYnVmZmVyID0gci5fdGV4dC5fYnVmOwotICAgICAgICAgICAgICAgICAgICBjaGFycy5sZW5ndGggPSBzVGV4dC5nZXRDY2hBZnRlcigpOwotCi0gICAgICAgICAgICAgICAgICAgIGNoYXJzLm9mZnNldCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICByLl90ZXh0LnVuT2JzY3VyZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzVGV4dC5nZXRDcEZvclBvcyggciwgcFRleHQgKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFycy5sZW5ndGggKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0gICAgICAgICAgICAgICAgICAgIGludCBjY2ggPSBzVGV4dC5nZXRDY2hBZnRlcigpOwotCi0gICAgICAgICAgICAgICAgICAgIGludCBvZmYgPQotICAgICAgICAgICAgICAgICAgICAgICAgci5fdGV4dC51bk9ic2N1cmUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc1RleHQuZ2V0Q3BGb3JQb3MoIHIsIHBUZXh0ICksIGNjaCApOwotCi0gICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggci5fdGV4dC5fYnVmLCBvZmYsIGNjaCApOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoIFNwbGF5IHQgPSBzVGV4dC5uZXh0Tm9uQXR0clNwbGF5KCkgOyA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB0Lm5leHRTcGxheSgpICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0LmlzQ29tbWVudCgpICYmICF0LmlzUHJvY2luc3QoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQuZ2V0Q2NoQWZ0ZXIoKSA+IDApCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2NoID0gdC5nZXRDY2hBZnRlcigpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5fdGV4dC51bk9ic2N1cmUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LmdldENwRm9yUG9zKCByLCAxICksIGNjaCApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2IuYXBwZW5kKCByLl90ZXh0Ll9idWYsIG9mZiwgY2NoICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBjaGFycy5sZW5ndGggPSBzYi5sZW5ndGgoKTsKLSAgICAgICAgICAgICAgICAgICAgY2hhcnMuYnVmZmVyID0gbmV3IGNoYXIgWyBjaGFycy5sZW5ndGggXTsKLSAgICAgICAgICAgICAgICAgICAgY2hhcnMub2Zmc2V0ID0gMDsKLQotICAgICAgICAgICAgICAgICAgICBzYi5nZXRDaGFycyggMCwgY2hhcnMubGVuZ3RoLCBjaGFycy5idWZmZXIsIDAgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh3c3IgIT0gUFJFU0VSVkUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gVE9ETyAtIHRoaXMgaXMgcXVpY2ssIGRpcnR5IGFuZCB2ZXJ5IGluZWZmaWNpZW50Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgIG1ha2UgaXQgZmFzdGVyIQotCi0gICAgICAgICAgICAgICAgU3RyaW5nIHN0ciA9IGNoYXJzLmFzU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICAgICAgICAgICAgIGludCBzdGF0ZSA9IC0xLCBuU3BhY2VzID0gMCwgY2NoID0gc3RyLmxlbmd0aCgpOwotCi0gICAgICAgICAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IGNjaCA7IGkrKyApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjaGFyIGNoID0gc3RyLmNoYXJBdCggaSApOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnXG4nIHx8IGNoID09ICdccicgfHwgY2ggPT0gJ1x0JykKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gJyAnOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICh3c3IgPT0gQ09MTEFQU0UpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnICcpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5TcGFjZXMrKzsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoblNwYWNlcyA+IDEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgblNwYWNlcyA9IDE7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoIDsgblNwYWNlcyA+IDAgOyBuU3BhY2VzLS0gKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggJyAnICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggY2ggKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjaGFycy5zdHJpbmcgPSBzYi50b1N0cmluZygpOwotICAgICAgICAgICAgICAgIGNoYXJzLmJ1ZmZlciA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBnZXRUZXh0ICggQ2hhcnMgY2hhcnMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBnZXRUZXh0KCBjaGFycywgUFJFU0VSVkUgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIGdldFRleHQgKCBDaGFycyBjaGFycywgaW50IHdzciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghX2hhc1RleHQpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oICJObyB0ZXh0IGZvciB0aGlzIGV2ZW50Iik7Ci0KLSAgICAgICAgICAgIHNldENoYXJzKCBjaGFycywgd3NyLCBfZXZlbnRUZXh0LCBfc1RleHQsIF9wVGV4dCApOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVE9ETyAtIHJhdGhlciBleHBlbnNpdmUgdG8gbWFrZSBDaGFycyBhbmQgZ2V0VGV4dCBhbmQgZ2V0Ci0gICAgICAgIC8vIFN0cmluZwotICAgICAgICBwdWJsaWMgYm9vbGVhbiB0ZXh0SXNXaGl0ZXNwYWNlICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBDaGFycyBjaGFycyA9IG5ldyBDaGFycygpOwotICAgICAgICAgICAgZ2V0VGV4dCggY2hhcnMgKTsKLSAgICAgICAgICAgIFN0cmluZyBzID0gY2hhcnMuYXNTdHJpbmcoKTsKLQotICAgICAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IHMubGVuZ3RoKCkgOyBpKysgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN3aXRjaCAoIHMuY2hhckF0KCBpICkgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnICc6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1xuJzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnXHInOgotICAgICAgICAgICAgICAgICAgICBjYXNlICdcdCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBWYWxpZGF0b3JMaXN0ZW5lciBfdkV2ZW50U2luazsKLSAgICAgICAgcHJpdmF0ZSBTcGxheSAgICAgICAgICAgICBfc3RhcnRTcGxheTsKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuICAgICAgICAgICBfZW1pdHRlZFRleHQ7Ci0KLSAgICAgICAgcHJpdmF0ZSBRTmFtZSAgIF9uYW1lOwotICAgICAgICBwcml2YXRlIFNwbGF5ICAgX3hzaVR5cGU7Ci0gICAgICAgIHByaXZhdGUgU3BsYXkgICBfeHNpTmlsOwotICAgICAgICBwcml2YXRlIFNwbGF5ICAgX3hzaUxvYzsKLSAgICAgICAgcHJpdmF0ZSBTcGxheSAgIF94c2lOb0xvYzsKLSAgICAgICAgcHJpdmF0ZSBTdHJpbmcgIF9ldmVudFRleHQ7Ci0gICAgICAgIHByaXZhdGUgU3BsYXkgICBfc1RleHQ7Ci0gICAgICAgIHByaXZhdGUgaW50ICAgICBfcFRleHQ7Ci0gICAgICAgIHByaXZhdGUgU3BsYXkgICBfc0xvYzsKLSAgICAgICAgcHJpdmF0ZSBpbnQgICAgIF9wTG9jOwotICAgICAgICBwcml2YXRlIGJvb2xlYW4gX2hhc1RleHQ7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLwotICAgIC8vCi0KLSAgICBzdGF0aWMgZmluYWwgY2xhc3MgU2F4U2F2ZXIgZXh0ZW5kcyBTYXZlcgotICAgIHsKLSAgICAgICAgU2F4U2F2ZXIgKAotICAgICAgICAgICAgUm9vdCByLCBTcGxheSBzLCBpbnQgcCwgWG1sT3B0aW9ucyBvcHRpb25zLAotICAgICAgICAgICAgQ29udGVudEhhbmRsZXIgY29udGVudEhhbmRsZXIsIExleGljYWxIYW5kbGVyIGxleGljYWxoYW5kbGVyICkKLSAgICAgICAgICAgICAgICB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN1cGVyKCByLCBzLCBwLCBvcHRpb25zICk7Ci0KLSAgICAgICAgICAgIF9hdHRyaWJ1dGVzID0gbmV3IEF0dHJpYnV0ZXNJbXBsKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIF93YW50RnJhZ1Rlc3QgPSB0cnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBfY29udGVudEhhbmRsZXIgPSBjb250ZW50SGFuZGxlcjsKLSAgICAgICAgICAgIF9sZXhpY2FsaGFuZGxlciA9IGxleGljYWxoYW5kbGVyOwotCi0vLyAgICAgICAgICAgIF9jb250ZW50SGFuZGxlci5zZXREb2N1bWVudExvY2F0b3IoIGhobW1tbSAgKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgX2NvbnRlbnRIYW5kbGVyLnN0YXJ0RG9jdW1lbnQoKTsKLQotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCBwcm9jZXNzKCkgKQotICAgICAgICAgICAgICAgICAgICA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoIFNhdmVyU0FYRXhjZXB0aW9uIGUgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IGUuX3NheEV4Y2VwdGlvbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgX2NvbnRlbnRIYW5kbGVyLmVuZERvY3VtZW50KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIGNsYXNzIFNhdmVyU0FYRXhjZXB0aW9uIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBTYXZlclNBWEV4Y2VwdGlvbiAoIFNBWEV4Y2VwdGlvbiBlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfc2F4RXhjZXB0aW9uID0gZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgU0FYRXhjZXB0aW9uIF9zYXhFeGNlcHRpb247Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgdGhyb3dTYXhFeGNlcHRpb24gKCBTQVhFeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBTYXZlclNBWEV4Y2VwdGlvbiggZSApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdENvbnRhaW5lciAoIENvbnRhaW5lciBjLCBRTmFtZSBuYW1lICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGMuaXNCZWdpbigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGVtaXRDb250YWluZXJIZWxwZXIoIGMsIG5hbWUsIG51bGwsIG51bGwgKTsKLQotICAgICAgICAgICAgICAgIGlmIChjLmlzTGVhZigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGNjaCA9IF90ZXh0ID09IG51bGwgPyBjLmdldENjaFZhbHVlKCkgOiBfdGV4dC5sZW5ndGgoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoY2NoID4gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90ZXh0ID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdENoYXJhY3RlcnMoIGMsIDAsIGNjaCApOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRDaGFyYWN0ZXJzKCBfdGV4dCApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBlbWl0RW5kRWxlbWVudCggYy5nZXROYW1lKCkgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IGMuaXNEb2MoKTsKLQotICAgICAgICAgICAgICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIGVtaXRDb250YWluZXJIZWxwZXIoIGMsIG5hbWUsIG51bGwsIG51bGwgKTsKLQotICAgICAgICAgICAgICAgIGlmIChfdGV4dCA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICBlbWl0Q2hhcmFjdGVycyggYywgMCwgYy5nZXRDY2goKSApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZW1pdENoYXJhY3RlcnMoIF90ZXh0ICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgZW1pdEF0dHJIZWxwZXIgKCBTcGxheSBzLCBTdHJpbmcgdmFsdWUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgcy5pc05vcm1hbEF0dHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgU3RyaW5nIGxvY2FsID0gcy5nZXRMb2NhbCgpOwotICAgICAgICAgICAgU3RyaW5nIHVyaSA9IHMuZ2V0VXJpKCk7Ci0KLSAgICAgICAgICAgIF9hdHRyaWJ1dGVzLmFkZEF0dHJpYnV0ZSgKLSAgICAgICAgICAgICAgICBzLmdldFVyaSgpLCBzLmdldExvY2FsKCksCi0gICAgICAgICAgICAgICAgZ2V0UHJlZml4ZWROYW1lKCBzLmdldE5hbWUoKSApLAotICAgICAgICAgICAgICAgICJDREFUQSIsCi0gICAgICAgICAgICAgICAgdmFsdWUgPT0gbnVsbCA/IHMuZ2V0VGV4dCggZ2V0Um9vdCgpICkgOiB2YWx1ZSApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGFkZE5hbWVzcGFjZUF0dHIgKCBTdHJpbmcgcHJlZml4LCBTdHJpbmcgdXJpICkKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2NvbnRlbnRIYW5kbGVyLnN0YXJ0UHJlZml4TWFwcGluZyggcHJlZml4LCB1cmkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoICggU0FYRXhjZXB0aW9uIGUgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93U2F4RXhjZXB0aW9uKCBlICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChwcmVmaXgubGVuZ3RoKCkgPT0gMCkKLSAgICAgICAgICAgICAgICBfYXR0cmlidXRlcy5hZGRBdHRyaWJ1dGUoICIiLCAiIiwgInhtbG5zIiwgIkNEQVRBIiwgdXJpICk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2F0dHJpYnV0ZXMuYWRkQXR0cmlidXRlKAotICAgICAgICAgICAgICAgICAgICAiIiwgIiIsICJ4bWxuczoiICsgcHJlZml4LCAiQ0RBVEEiLCB1cmkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHJpdmF0ZSB2b2lkIGVtaXROYW1lc3BhY2VzSGVscGVyICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKCBpdGVyYXRlTWFwcGluZ3MoKSA7IGhhc01hcHBpbmcoKSA7IG5leHRNYXBwaW5nKCkgKQotICAgICAgICAgICAgICAgIGFkZE5hbWVzcGFjZUF0dHIoIG1hcHBpbmdQcmVmaXgoKSwgbWFwcGluZ1VyaSgpICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgZW1pdENvbnRhaW5lckhlbHBlciAoCi0gICAgICAgICAgICBDb250YWluZXIgYywgUU5hbWUgbmFtZSwKLSAgICAgICAgICAgIFNwbGF5IGV4dHJhQXR0ciwgU3RyaW5nQnVmZmVyIGV4dHJhQXR0clRleHQgKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgbmFtZSAhPSBudWxsOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBfYXR0cmlidXRlcy5jbGVhcigpOwotCi0gICAgICAgICAgICBpZiAoX3NhdmVOYW1lc3BhY2VzRmlyc3QpCi0gICAgICAgICAgICAgICAgZW1pdE5hbWVzcGFjZXNIZWxwZXIoKTsKLQotICAgICAgICAgICAgZm9yICggSXRlcmF0b3IgaSA9IF9hdHRycy5rZXlTZXQoKS5pdGVyYXRvcigpIDsgaS5oYXNOZXh0KCkgOyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3BsYXkgcyA9IChTcGxheSkgaS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgZW1pdEF0dHJIZWxwZXIoIHMsIChTdHJpbmcpIF9hdHRycy5nZXQoIHMgKSApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZXh0cmFBdHRyICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZW1pdEF0dHJIZWxwZXIoCi0gICAgICAgICAgICAgICAgICAgIGV4dHJhQXR0ciwKLSAgICAgICAgICAgICAgICAgICAgZXh0cmFBdHRyVGV4dCA9PSBudWxsID8gbnVsbCA6IGV4dHJhQXR0clRleHQudG9TdHJpbmcoKSApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIV9zYXZlTmFtZXNwYWNlc0ZpcnN0KQotICAgICAgICAgICAgICAgIGVtaXROYW1lc3BhY2VzSGVscGVyKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGVtaXRFbGVtZW50KCBuYW1lLCBnZXRQcmVmaXhlZE5hbWUoIG5hbWUgKSApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGVtaXRDaGFyYWN0ZXJzICggY2hhcltdIGJ1ZiwgaW50IG9mZiwgaW50IGNjaCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9jb250ZW50SGFuZGxlci5jaGFyYWN0ZXJzKCBidWYsIG9mZiwgY2NoICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoIFNBWEV4Y2VwdGlvbiBlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvd1NheEV4Y2VwdGlvbiggZSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIHZvaWQgZW1pdENoYXJhY3RlcnMgKCBTcGxheSBzLCBpbnQgcCwgaW50IGNjaCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVtaXRDaGFyYWN0ZXJzKCBzLmdldENwRm9yUG9zKCBnZXRSb290KCksIHAgKSwgY2NoICk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgdm9pZCBlbWl0Q2hhcmFjdGVycyAoIGludCBjcCwgaW50IGNjaCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjY2ggPT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGVtaXRDaGFyYWN0ZXJzKAotICAgICAgICAgICAgICAgIGdldFJvb3QoKS5fdGV4dC5fYnVmLCBnZXRSb290KCkuX3RleHQudW5PYnNjdXJlKCBjcCwgY2NoICksCi0gICAgICAgICAgICAgICAgY2NoICk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgdm9pZCBlbWl0Q2hhcmFjdGVycyAoIFN0cmluZ0J1ZmZlciBzYiApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzYi5sZW5ndGgoKSA9PSAwKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgU3RyaW5nIHRleHQgPSBzYi50b1N0cmluZygpOyAvLyBJbmVmZmljaWVudCwgdXNlIGEgc2hhcmVkIGNoYXJbXQotICAgICAgICAgICAgCi0gICAgICAgICAgICBlbWl0Q2hhcmFjdGVycyggdGV4dC50b0NoYXJBcnJheSgpLCAwLCB0ZXh0Lmxlbmd0aCgpICk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgdm9pZCBlbWl0RW5kRWxlbWVudCAoIFFOYW1lIG5hbWUgKQotICAgICAgICB7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfY29udGVudEhhbmRsZXIuZW5kRWxlbWVudCgKLSAgICAgICAgICAgICAgICAgICAgbmFtZS5nZXROYW1lc3BhY2VVUkkoKSwgbmFtZS5nZXRMb2NhbFBhcnQoKSwKLSAgICAgICAgICAgICAgICAgICAgZ2V0UHJlZml4ZWROYW1lKCBuYW1lICkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoICggU0FYRXhjZXB0aW9uIGUgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93U2F4RXhjZXB0aW9uKCBlICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAoIGl0ZXJhdGVNYXBwaW5ncygpIDsgaGFzTWFwcGluZygpIDsgbmV4dE1hcHBpbmcoKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBfY29udGVudEhhbmRsZXIuZW5kUHJlZml4TWFwcGluZyggbWFwcGluZ1ByZWZpeCgpICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhdGNoICggU0FYRXhjZXB0aW9uIGUgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dTYXhFeGNlcHRpb24oIGUgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgdm9pZCBlbmROYW1lc3BhY2VzICggKQotICAgICAgICB7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgX2F0dHJpYnV0ZXMuZ2V0TGVuZ3RoKCkgOyBpICsrICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBxbiA9IF9hdHRyaWJ1dGVzLmdldFFOYW1lKCBpICk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoIXFuLnN0YXJ0c1dpdGgoICJ4bWxucyIgKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgICAgIGludCBqID0gcW4uaW5kZXhPZiggJzonICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGogPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRlbnRIYW5kbGVyLmVuZFByZWZpeE1hcHBpbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcW4uc3Vic3RyaW5nKCBqICsgMSApICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRlbnRIYW5kbGVyLmVuZFByZWZpeE1hcHBpbmcoICIiICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKCBTQVhFeGNlcHRpb24gZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3dTYXhFeGNlcHRpb24oIGUgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICBwcml2YXRlIFN0cmluZyBnZXRQcmVmaXhlZE5hbWUgKCBRTmFtZSBuYW1lICkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIG5zID0gbmFtZS5nZXROYW1lc3BhY2VVUkkoKTsKLSAgICAgICAgICAgIFN0cmluZyBscCA9IG5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0KLSAgICAgICAgICAgIGlmIChucy5sZW5ndGgoKSA9PSAwKQotICAgICAgICAgICAgICAgIHJldHVybiBscDsKLQotICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IGdldFVyaU1hcHBpbmcoIG5zICk7Ci0KLSAgICAgICAgICAgIGlmIChwcmVmaXgubGVuZ3RoKCkgPT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbHA7Ci0KLSAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyAiOiIgKyBscDsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBlbWl0RWxlbWVudCAoIFFOYW1lIG5hbWUsIFN0cmluZyBwcmVmaXhlZE5hbWUgKQotICAgICAgICB7Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfY29udGVudEhhbmRsZXIuc3RhcnRFbGVtZW50KAotICAgICAgICAgICAgICAgICAgICBuYW1lLmdldE5hbWVzcGFjZVVSSSgpLCBuYW1lLmdldExvY2FsUGFydCgpLAotICAgICAgICAgICAgICAgICAgICBnZXRQcmVmaXhlZE5hbWUoIG5hbWUgKSwgX2F0dHJpYnV0ZXMgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoICggU0FYRXhjZXB0aW9uIGUgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93U2F4RXhjZXB0aW9uKCBlICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBlbWl0RW5kICggU3BsYXkgcywgUU5hbWUgbmFtZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChuYW1lICE9IG51bGwpCi0gICAgICAgICAgICAgICAgZW1pdEVuZEVsZW1lbnQoIG5hbWUgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGVtaXRUZXh0QWZ0ZXIgKCBTcGxheSBzLCBpbnQgcCwgaW50IGNjaCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfdGV4dCA9PSBudWxsKQotICAgICAgICAgICAgICAgIGVtaXRDaGFyYWN0ZXJzKCBzLCBwLCBjY2ggKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0Q2hhcmFjdGVycyggX3RleHQgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGVtaXREb2NUeXBlKAotICAgICAgICAgICAgU3RyaW5nIGRvY3R5cGVOYW1lLCBTdHJpbmcgcHVibGljSUQsIFN0cmluZyBzeXN0ZW1JRCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfbGV4aWNhbGhhbmRsZXIgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIF9sZXhpY2FsaGFuZGxlci5zdGFydERURCggZG9jdHlwZU5hbWUsIHB1YmxpY0lELCBzeXN0ZW1JRCApOwotICAgICAgICAgICAgICAgICAgICBfbGV4aWNhbGhhbmRsZXIuZW5kRFREKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhdGNoICggU0FYRXhjZXB0aW9uIGUgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dTYXhFeGNlcHRpb24oIGUgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGVtaXRDb21tZW50ICggU3BsYXkgcyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfbGV4aWNhbGhhbmRsZXIgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgY3AgPSBnZXRSb290KCkuZ2V0Q3AoIHMgKTsKLSAgICAgICAgICAgICAgICBpbnQgY2NoID0gcy5nZXRDY2hWYWx1ZSgpOwotCi0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBfbGV4aWNhbGhhbmRsZXIuY29tbWVudCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldFJvb3QoKS5fdGV4dC5fYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Um9vdCgpLl90ZXh0LnVuT2JzY3VyZSggY3AsIGNjaCApLAotICAgICAgICAgICAgICAgICAgICAgICAgY2NoICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhdGNoICggU0FYRXhjZXB0aW9uIGUgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dTYXhFeGNlcHRpb24oIGUgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBlbWl0UHJvY2luc3QgKCBTcGxheSBzICkKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX2NvbnRlbnRIYW5kbGVyLnByb2Nlc3NpbmdJbnN0cnVjdGlvbigKLSAgICAgICAgICAgICAgICAgICAgcy5nZXRMb2NhbCgpLCBzLmdldFRleHQoIGdldFJvb3QoKSApICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoIFNBWEV4Y2VwdGlvbiBlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvd1NheEV4Y2VwdGlvbiggZSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdFRleHRGcmFnbWVudCAoIFNwbGF5IHMsIGludCBwLCBpbnQgY2NoICkKLSAgICAgICAgewotICAgICAgICAgICAgZW1pdENvbnRhaW5lckhlbHBlciggbnVsbCwgX2ZyYWdtZW50LCBudWxsLCBudWxsICk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChfdGV4dCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChfdGV4dC5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICAgICAgICAgIGVtaXRDaGFyYWN0ZXJzKCBfdGV4dCApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAocyAhPSBudWxsICYmIGNjaCA+IDApCi0gICAgICAgICAgICAgICAgZW1pdENoYXJhY3RlcnMoIHMsIHAsIGNjaCApOwotCi0gICAgICAgICAgICBlbWl0RW5kRWxlbWVudCggX2ZyYWdtZW50ICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBlbWl0WG1sbnNGcmFnbWVudCAoIFNwbGF5IHMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbWl0Q29udGFpbmVySGVscGVyKCBudWxsLCBfZnJhZ21lbnQsIG51bGwsIG51bGwgKTsKLSAgICAgICAgICAgIGVtaXRFbmRFbGVtZW50KCBfZnJhZ21lbnQgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGVtaXRBdHRyRnJhZ21lbnQgKCBTcGxheSBzICkKLSAgICAgICAgewotICAgICAgICAgICAgZW1pdENvbnRhaW5lckhlbHBlciggbnVsbCwgX2ZyYWdtZW50LCBzLCBfdGV4dCApOwotICAgICAgICAgICAgZW1pdEVuZEVsZW1lbnQoIF9mcmFnbWVudCApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdENvbW1lbnRGcmFnbWVudCAoIFNwbGF5IHMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbWl0Q29udGFpbmVySGVscGVyKCBudWxsLCBfZnJhZ21lbnQsIG51bGwsIG51bGwgKTsKLSAgICAgICAgICAgIGVtaXRDb21tZW50KCBzICk7Ci0gICAgICAgICAgICBlbWl0RW5kRWxlbWVudCggX2ZyYWdtZW50ICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBlbWl0UHJvY2luc3RGcmFnbWVudCAoIFNwbGF5IHMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBlbWl0Q29udGFpbmVySGVscGVyKCBudWxsLCBfZnJhZ21lbnQsIG51bGwsIG51bGwgKTsKLSAgICAgICAgICAgIGVtaXRQcm9jaW5zdCggcyApOwotICAgICAgICAgICAgZW1pdEVuZEVsZW1lbnQoIF9mcmFnbWVudCApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIEF0dHJpYnV0ZXNJbXBsIF9hdHRyaWJ1dGVzOwotCi0gICAgICAgIHByaXZhdGUgU0FYRXhjZXB0aW9uIF9zYXhFeGNlcHRpb247Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIENvbnRlbnRIYW5kbGVyIF9jb250ZW50SGFuZGxlcjsKLSAgICAgICAgcHJpdmF0ZSBMZXhpY2FsSGFuZGxlciBfbGV4aWNhbGhhbmRsZXI7Ci0gICAgfQotCi0gICAgICAgICAgICAKLSAgICAvLwotICAgIC8vCi0gICAgLy8KLQotICAgIHN0YXRpYyBmaW5hbCBjbGFzcyBEb21TYXZlciBleHRlbmRzIFNhdmVyCi0gICAgewotICAgICAgICBEb21TYXZlciAoIFJvb3QgciwgU3BsYXkgcywgaW50IHAsIGJvb2xlYW4gY3JlYXRlRG9jLCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdXBlciggciwgcywgcCwgb3B0aW9ucyApOwotICAgICAgICAgICAgX2NyZWF0ZURvYyA9IGNyZWF0ZURvYzsKLSAgICAgICAgfQotCi0gICAgICAgIE5vZGUgZXhwb3J0RG9tICggKQotICAgICAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBUT0RPIC0gYWRkIGFuIG9wdGlvbnMgd2hpY2ggc3BlY2lmaWVzIGEgRG9jdW1lbnQgd2l0aCB3aGljaAotICAgICAgICAgICAgLy8gdG8gY3JlYXRlIHRoZSBmcmFnbWVudAotCi0gICAgICAgICAgICBfZG9jID0KLSAgICAgICAgICAgICAgICBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkuCi0gICAgICAgICAgICAgICAgICAgIG5ld0RvY3VtZW50QnVpbGRlcigpLm5ld0RvY3VtZW50KCk7Ci0KLSAgICAgICAgICAgIE5vZGUgcmVzdWx0OwotCi0gICAgICAgICAgICBpZiAoX2NyZWF0ZURvYykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBfY3VycmVudE5vZGUgPSBfZG9jOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIERvY3VtZW50RnJhZ21lbnQgZnJhZyA9IF9kb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9jdXJyZW50Tm9kZSA9IGZyYWc7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHdoaWxlICggcHJvY2VzcygpICkKLSAgICAgICAgICAgICAgICA7Ci0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBlbWl0Q29udGFpbmVyICggQ29udGFpbmVyIGMsIFFOYW1lIG5hbWUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBSb290IHIgPSBnZXRSb290KCk7Ci0KLSAgICAgICAgICAgIGlmIChjLmlzRG9jKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGhhc01hcHBpbmdzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgIk5hbWVzcGFjZSBhdHRyaWJ1dGUgbm90IGFzc29jaWF0ZWQgd2l0aCBhbiBlbGVtZW50IiApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZvciAoIFNwbGF5IHMgPSBjLm5leHRTcGxheSgpIDsgcy5pc0F0dHIoKSA7IHMgPSBzLm5leHRTcGxheSgpICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzLmlzTm9ybWFsQXR0cigpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBdHRyaWJ1dGUgbm90IGFzc29jaWF0ZWQgd2l0aCBhbiBlbGVtZW50IiApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgU3RyaW5nIHRleHQgPSBudWxsOwotCi0gICAgICAgICAgICAgICAgaWYgKF90ZXh0ICE9IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoX3RleHQubGVuZ3RoKCkgPiAwKQotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoYy5nZXRDY2goKSA+IDApCi0gICAgICAgICAgICAgICAgICAgIHRleHQgPSByLl90ZXh0LmZldGNoKCAwLCBjLmdldENjaCgpICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4dCAhPSBudWxsICYmIF9jdXJyZW50Tm9kZSAhPSBfZG9jKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgX2N1cnJlbnROb2RlLmluc2VydEJlZm9yZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIF9kb2MuY3JlYXRlVGV4dE5vZGUoIHRleHQgKSwgbnVsbCApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQgYy5pc0JlZ2luKCk7Ci0KLSAgICAgICAgICAgICAgICBTdHJpbmcgcW5hbWUgPSBjLmdldExvY2FsKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoYy5nZXRVcmkoKS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gZ2V0VXJpTWFwcGluZyggYy5nZXRVcmkoKSApOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChwcmVmaXgubGVuZ3RoKCkgPiAwKQotICAgICAgICAgICAgICAgICAgICAgICAgcW5hbWUgPSBwcmVmaXggKyAiOiIgKyBxbmFtZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBFbGVtZW50IGUgPSBfZG9jLmNyZWF0ZUVsZW1lbnROUyggYy5nZXRVcmkoKSwgcW5hbWUgKTsKLQotICAgICAgICAgICAgICAgIF9jdXJyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGUsIG51bGwgKTsKLQotICAgICAgICAgICAgICAgIGZvciAoIGl0ZXJhdGVNYXBwaW5ncygpIDsgaGFzTWFwcGluZygpIDsgbmV4dE1hcHBpbmcoKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gbWFwcGluZ1ByZWZpeCgpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChwcmVmaXgubGVuZ3RoKCkgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHFuYW1lID0gInhtbG5zIjsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcW5hbWUgPSAieG1sbnM6IiArIHByZWZpeDsKLQotICAgICAgICAgICAgICAgICAgICBlLnNldEF0dHJpYnV0ZU5TKCBTcGxheS5feG1sbnNVcmksIHFuYW1lLCBtYXBwaW5nVXJpKCkgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmb3IgKCBJdGVyYXRvciBpID0gX2F0dHJzLmtleVNldCgpLml0ZXJhdG9yKCkgOyBpLmhhc05leHQoKSA7ICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFNwbGF5IHMgPSAoU3BsYXkpIGkubmV4dCgpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgcW5hbWUgPSBzLmdldExvY2FsKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHMuZ2V0VXJpKCkubGVuZ3RoKCkgPiAwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gZ2V0VXJpTWFwcGluZyggcy5nZXRVcmkoKSApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlZml4Lmxlbmd0aCgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBxbmFtZSA9IHByZWZpeCArICI6IiArIHFuYW1lOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGludmFsaWRBdHRyVmFsdWUgPSAoU3RyaW5nKSBfYXR0cnMuZ2V0KCBzICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZS5zZXRBdHRyaWJ1dGVOUygKLSAgICAgICAgICAgICAgICAgICAgICAgIHMuZ2V0VXJpKCksIHFuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZEF0dHJWYWx1ZSA9PSBudWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzLmdldFRleHQoIHIgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW52YWxpZEF0dHJWYWx1ZSApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChjLmlzTGVhZigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRleHQgPSBudWxsOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChfdGV4dCAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RleHQubGVuZ3RoKCkgPiAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYy5nZXRDY2hWYWx1ZSgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgci5fdGV4dC5mZXRjaCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5nZXRDcEZvclBvcyggciwgMSApLCBjLmdldENjaFZhbHVlKCkgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0ICE9IG51bGwgJiYgX2N1cnJlbnROb2RlICE9IF9kb2MpCi0gICAgICAgICAgICAgICAgICAgICAgICBlLmluc2VydEJlZm9yZSggX2RvYy5jcmVhdGVUZXh0Tm9kZSggdGV4dCApLCBudWxsICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIF9jdXJyZW50Tm9kZSA9IGU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdEVuZCAoIFNwbGF5IHMsIFFOYW1lIG5hbWUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBfY3VycmVudE5vZGUgPSBfY3VycmVudE5vZGUuZ2V0UGFyZW50Tm9kZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdFRleHRBZnRlciAoIFNwbGF5IHMsIGludCBwLCBpbnQgY2NoICkKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0IGNjaCA+IDA7Ci0KLSAgICAgICAgICAgIFJvb3QgciA9IGdldFJvb3QoKTsKLQotICAgICAgICAgICAgU3RyaW5nIHRleHQgPSBudWxsOwotCi0gICAgICAgICAgICBpZiAoX3RleHQgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoX3RleHQubGVuZ3RoKCkgPiAwKQotICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoY2NoID4gMCkKLSAgICAgICAgICAgICAgICB0ZXh0ID0gci5fdGV4dC5mZXRjaCggcy5nZXRDcEZvclBvcyggciwgcCApLCBjY2ggKTsKLQotICAgICAgICAgICAgaWYgKF9jdXJyZW50Tm9kZSAhPSBfZG9jKQotICAgICAgICAgICAgICAgIF9jdXJyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIF9kb2MuY3JlYXRlVGV4dE5vZGUoIHRleHQgKSwgbnVsbCApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdERvY1R5cGUoCi0gICAgICAgICAgICBTdHJpbmcgZG9jdHlwZU5hbWUsIFN0cmluZyBwdWJsaWNJRCwgU3RyaW5nIHN5c3RlbUlEICkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGVtaXRDb21tZW50ICggU3BsYXkgcyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJvb3QgciA9IGdldFJvb3QoKTsKLQotICAgICAgICAgICAgX2N1cnJlbnROb2RlLmluc2VydEJlZm9yZSgKLSAgICAgICAgICAgICAgICBfZG9jLmNyZWF0ZUNvbW1lbnQoCi0gICAgICAgICAgICAgICAgICAgIHIuX3RleHQuZmV0Y2goCi0gICAgICAgICAgICAgICAgICAgICAgICBzLmdldENwRm9yUG9zKCByLCAwICksIHMuZ2V0Q2NoVmFsdWUoKSApICksIG51bGwgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGVtaXRQcm9jaW5zdCAoIFNwbGF5IHMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBSb290IHIgPSBnZXRSb290KCk7Ci0KLSAgICAgICAgICAgIF9jdXJyZW50Tm9kZS5pbnNlcnRCZWZvcmUoCi0gICAgICAgICAgICAgICAgX2RvYy5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oCi0gICAgICAgICAgICAgICAgICAgIHMuZ2V0TG9jYWwoKSwKLSAgICAgICAgICAgICAgICAgICAgci5fdGV4dC5mZXRjaCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHMuZ2V0Q3BGb3JQb3MoIHIsIDAgKSwgcy5nZXRDY2hWYWx1ZSgpICkgKSwgbnVsbCApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdFhtbG5zRnJhZ21lbnQgKCBTcGxheSBzICkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAiQ2Fubm90IGNyZWF0ZSBhIG5vZGUgZm9yIGEgbmFtZXNwYWNlIGF0dHJpYnV0ZSIgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByb3RlY3RlZCB2b2lkIGVtaXRBdHRyRnJhZ21lbnQgKCBTcGxheSBzICkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAiQ2Fubm90IGNyZWF0ZSBhIG5vZGUgZm9yIGEgYXR0cmlidXRlIiApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdFRleHRGcmFnbWVudCAoIFNwbGF5IHMsIGludCBwLCBpbnQgY2NoICkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gQlVHQlVHIC0gdGhlcmUgY291bGQgYmUgbmFtZXNwYWNlcyBwdXNoZWQgZm9yIHRoaXMgdGV4dCwgYnV0IG5vdAotICAgICAgICAgICAgLy8gc3VyZSBob3cgdG8gcmVwcmVzZW50IHRoZW0gaGVyZS4uLi4gIEkgc2hvdWxkIHJlYWxseSBwdXQgdGhlCi0gICAgICAgICAgICAvLyBmcmFnbWVudCBsb2dpYyBpbiB0aGUgYmFzZSBzYXZlciBhbmQgaGF2ZSB0aGUgYmFzZSBzYXZlcgotICAgICAgICAgICAgLy8gc3ludGhlc2l6ZSB3ZWxsIGZvcm1lZCBvdXRwdXQuLi4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHMgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBSb290IHIgPSBnZXRSb290KCk7Ci0KLSAgICAgICAgICAgICAgICBfY3VycmVudE5vZGUuaW5zZXJ0QmVmb3JlKAotICAgICAgICAgICAgICAgICAgICBfZG9jLmNyZWF0ZVRleHROb2RlKAotICAgICAgICAgICAgICAgICAgICBfdGV4dCAhPSBudWxsCi0gICAgICAgICAgICAgICAgICAgICAgICA/IF90ZXh0LnRvU3RyaW5nKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIDogcyAhPSBudWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyByLl90ZXh0LmZldGNoKCBzLmdldENwRm9yUG9zKCByLCBwICksIGNjaCApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIiIgKSwKLSAgICAgICAgICAgICAgICAgICAgbnVsbCApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJvdGVjdGVkIHZvaWQgZW1pdENvbW1lbnRGcmFnbWVudCAoIFNwbGF5IHMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBSb290IHIgPSBnZXRSb290KCk7Ci0KLSAgICAgICAgICAgIF9jdXJyZW50Tm9kZS5pbnNlcnRCZWZvcmUoCi0gICAgICAgICAgICAgICAgX2RvYy5jcmVhdGVDb21tZW50KAotICAgICAgICAgICAgICAgICAgICByLl90ZXh0LmZldGNoKAotICAgICAgICAgICAgICAgICAgICAgICAgcy5nZXRDcEZvclBvcyggciwgMCApLCBzLmdldENjaFZhbHVlKCkgKSApLCBudWxsICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcm90ZWN0ZWQgdm9pZCBlbWl0UHJvY2luc3RGcmFnbWVudCAoIFNwbGF5IHMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBSb290IHIgPSBnZXRSb290KCk7Ci0KLSAgICAgICAgICAgIF9jdXJyZW50Tm9kZS5pbnNlcnRCZWZvcmUoCi0gICAgICAgICAgICAgICAgX2RvYy5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oCi0gICAgICAgICAgICAgICAgICAgIHMuZ2V0TG9jYWwoKSwKLSAgICAgICAgICAgICAgICAgICAgci5fdGV4dC5mZXRjaCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHMuZ2V0Q3BGb3JQb3MoIHIsIDAgKSwgcy5nZXRDY2hWYWx1ZSgpICkgKSwgbnVsbCApOwotICAgICAgICB9Ci0KLSAgICAgICAgRG9jdW1lbnQgX2RvYzsKLSAgICAgICAgTm9kZSAgICAgX2N1cnJlbnROb2RlOwotICAgICAgICBib29sZWFuICBfY3JlYXRlRG9jOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8KLSAgICAvLwotCi0gICAgcHJvdGVjdGVkIFN0cmluZ0J1ZmZlciAgX3RleHQ7Ci0gICAgcHJvdGVjdGVkIFN0cmluZ0J1ZmZlciAgX3NiOwotICAgIHByb3RlY3RlZCBib29sZWFuICAgICAgIF9za2lwQ29udGFpbmVyRmluaXNoOwotICAgIHByb3RlY3RlZCBMaW5rZWRIYXNoTWFwIF9hdHRyczsKLSAgICAKLSAgICBwcml2YXRlIEhhc2hTZXQgX2F0dHJOYW1lczsKLQotICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBfaW5uZXI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBSb290ICAgIF9yb290OwotICAgIHByaXZhdGUgZmluYWwgU3BsYXkgICBfdG9wOwotICAgIHByaXZhdGUgZmluYWwgbG9uZyAgICBfdmVyc2lvbjsKLQotICAgIHByb3RlY3RlZCBib29sZWFuIF93YW50RHVwQXR0cnM7Ci0gICAgcHJvdGVjdGVkIGJvb2xlYW4gX3dhbnRGcmFnVGVzdDsKLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBfbmVlZHNGcmFnOwotICAgIHByb3RlY3RlZCBRTmFtZSAgIF9mcmFnbWVudDsKLSAgICBwcm90ZWN0ZWQgUU5hbWUgICBfZG9jRWxlbTsKLSAgICAKLSAgICBwcm90ZWN0ZWQgUU5hbWUgX3N5bnRoRWxlbTsKLQotICAgIHByb3RlY3RlZCBib29sZWFuIF9zYXZlTmFtZXNwYWNlc0ZpcnN0OwotICAgIHByb3RlY3RlZCBib29sZWFuIF91c2VEZWZhdWx0TmFtZXNwYWNlOwotCi0gICAgcHJpdmF0ZSBib29sZWFuIF9wcmV0dHlQcmludDsKLSAgICBwcml2YXRlIGludCAgICAgX3ByZXR0eUluZGVudDsKLSAgICBwcml2YXRlIGludCAgICAgX3ByZXR0eU9mZnNldDsKLQotICAgIHByaXZhdGUgU3BsYXkgICBfc3BsYXk7Ci0gICAgcHJpdmF0ZSBpbnQgICAgIF9wb3M7Ci0gICAgcHJpdmF0ZSBib29sZWFuIF9wcmVQcm9jZXNzOwotICAgIHByaXZhdGUgYm9vbGVhbiBfcG9zdFByb2Nlc3M7Ci0gICAgcHJpdmF0ZSBib29sZWFuIF9wb3N0UG9wOwotICAgIHByaXZhdGUgU3BsYXkgICBfZW5kU3BsYXk7Ci0KLSAgICBwcml2YXRlIEFycmF5TGlzdCBfbmFtZXNwYWNlU3RhY2s7Ci0gICAgcHJpdmF0ZSBpbnQgICAgICAgX2N1cnJlbnRNYXBwaW5nOwotICAgIHByaXZhdGUgSGFzaE1hcCAgIF91cmlNYXA7Ci0gICAgcHJpdmF0ZSBIYXNoTWFwICAgX3ByZWZpeE1hcDsKLSAgICBwcml2YXRlIGJvb2xlYW4gICBfZmlyc3RQdXNoOwotICAgIHByaXZhdGUgU3RyaW5nICAgIF9pbml0aWFsRGVmYXVsdFVyaTsKLSAgICAKLSAgICBwcml2YXRlIEhhc2hNYXAgX3ByZUNvbXB1dGVkTmFtZXNwYWNlczsKLSAgICBwcml2YXRlIFN0cmluZyAgX2ZpbHRlclByb2NpbnN0OwotICAgIHByaXZhdGUgTWFwICAgICBfc3VnZ2VzdGVkUHJlZml4ZXM7Ci0KLSAgICBwcm90ZWN0ZWQgU3RyaW5nICBfbmV3TGluZTsKLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxzdG9yZS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc3RvcmUvU3BsYXkuamF2YSBiL3YyL3NyYy94bWxzdG9yZS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc3RvcmUvU3BsYXkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNiM2RlOC4uMDAwMDAwMAotLS0gYS92Mi9zcmMveG1sc3RvcmUvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3N0b3JlL1NwbGF5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MjQ1ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnN0b3JlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5UeXBlU3RvcmU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5UeXBlU3RvcmVVc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5jb21tb24uUU5hbWVIZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yLlRva2VuVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvci5YbWxCb29rbWFyazsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvci5YbWxNYXJrOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yOwotaW1wb3J0IGphdmEubGFuZy5yZWYuUmVmZXJlbmNlOwotaW1wb3J0IGphdmEubGFuZy5yZWYuV2Vha1JlZmVyZW5jZTsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgU3BsYXkgZXh0ZW5kcyBHb29iZXJzCi17Ci0gICAgLy8KLSAgICAvLyBDYW4ndCBjaGFuZ2UgdGhlIGtpbmQgb2YgYSBiYXNlIHRva2VuCi0gICAgLy8KLQotICAgIFNwbGF5ICggaW50IGtpbmQsIGJvb2xlYW4gaXMgKQotICAgIHsKLSAgICAgICAgX2JpdHMgPSBraW5kOwotCi0gICAgICAgIGlmIChpcykKLSAgICAgICAgICAgIF9iaXRzICs9IDB4ODsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIFNwbGF5IGtpbmRzCi0gICAgLy8KLQotICAgIHN0YXRpYyBmaW5hbCBpbnQgRE9DICAgICAgPSAgMDsgLy8gRE9DIG11c3QgYmUgMAotICAgIHN0YXRpYyBmaW5hbCBpbnQgQkVHSU4gICAgPSAgMTsgLy8gQkVHSU4gbXVzdCBiZSAxCi0gICAgc3RhdGljIGZpbmFsIGludCBBVFRSICAgICA9ICAyOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQ09NTUVOVCAgPSAgMzsKLSAgICBzdGF0aWMgZmluYWwgaW50IFBST0NJTlNUID0gIDQ7Ci0gICAgc3RhdGljIGZpbmFsIGludCBST09UICAgICA9ICA1OyAvLyBST09UIG11c3QgYmUgc2Vjb25kIHRvIGxhc3QKLSAgICBzdGF0aWMgZmluYWwgaW50IEVORCAgICAgID0gIDY7IC8vIEVORCBtdXN0IGJlIGxhc3QKLQotICAgIC8vCi0gICAgLy8KLSAgICAvLwotCi0gICAgZmluYWwgaW50IGdldEtpbmQgKCApIHsgcmV0dXJuIF9iaXRzICYgMHg3OyB9Ci0KLSAgICBmaW5hbCBib29sZWFuIGlzRG9jICAgICAgICggKSB7IHJldHVybiBnZXRLaW5kKCkgPT0gRE9DOyAgICAgIH0KLSAgICBmaW5hbCBib29sZWFuIGlzUm9vdCAgICAgICggKSB7IHJldHVybiBnZXRLaW5kKCkgPT0gUk9PVDsgICAgIH0KLSAgICBmaW5hbCBib29sZWFuIGlzQmVnaW4gICAgICggKSB7IHJldHVybiBnZXRLaW5kKCkgPT0gQkVHSU47ICAgIH0KLSAgICBmaW5hbCBib29sZWFuIGlzRW5kICAgICAgICggKSB7IHJldHVybiBnZXRLaW5kKCkgPT0gRU5EOyAgICAgIH0KLSAgICBmaW5hbCBib29sZWFuIGlzQXR0ciAgICAgICggKSB7IHJldHVybiBnZXRLaW5kKCkgPT0gQVRUUjsgICAgIH0KLSAgICBmaW5hbCBib29sZWFuIGlzQ29tbWVudCAgICggKSB7IHJldHVybiBnZXRLaW5kKCkgPT0gQ09NTUVOVDsgIH0KLSAgICBmaW5hbCBib29sZWFuIGlzUHJvY2luc3QgICggKSB7IHJldHVybiBnZXRLaW5kKCkgPT0gUFJPQ0lOU1Q7IH0KLSAgICBmaW5hbCBib29sZWFuIGlzQ29udGFpbmVyICggKSB7IHJldHVybiBnZXRLaW5kKCkgPD0gQkVHSU47ICAgIH0KLSAgICBmaW5hbCBib29sZWFuIGlzRmluaXNoICAgICggKSB7IHJldHVybiBnZXRLaW5kKCkgPj0gUk9PVDsgICAgIH0KLQotICAgIGZpbmFsIGludCBnZXRDY2ggICAgICAgICAgICggKSB7IHJldHVybiBfY2NoOyAgICAgICAgICAgICAgfQotCi0gICAgZmluYWwgaW50IGdldENkb2NCZWdpbiAgICAgKCApIHsgcmV0dXJuIDE7ICAgICAgICAgICAgICAgICB9Ci0gICAgZmluYWwgaW50IGdldENjaExlZnQgICAgICAgKCApIHsgcmV0dXJuIF9jY2hMZWZ0OyAgICAgICAgICB9Ci0gICAgZmluYWwgaW50IGdldENkb2NCZWdpbkxlZnQgKCApIHsgcmV0dXJuIF9iaXRzID4+IDU7ICAgICAgICB9Ci0gICAgZmluYWwgaW50IGdldENjaEFmdGVyICAgICAgKCApIHsgcmV0dXJuIF9jY2hBZnRlcjsgICAgICAgICB9Ci0gICAgZmluYWwgaW50IGdldENjaFZhbHVlICAgICAgKCApIHsgcmV0dXJuIF9jY2ggLSBfY2NoQWZ0ZXI7ICB9Ci0KLSAgICBRTmFtZSAgZ2V0TmFtZSAgKCApIHsgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOyB9Ci0gICAgU3RyaW5nIGdldFVyaSAgICggKSB7IHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsgfQotICAgIFN0cmluZyBnZXRMb2NhbCAoICkgeyB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7IH0KLQotICAgIC8vIEZvdXJ0aCBiaXQgaW4gX2JpdHMgaGFzIHNldmVyYWwgbWVhbmluZ3MsIGRlcGVuZGluZyBvbiBzcGxheSBraW5kCi0KLSAgICBmaW5hbCBib29sZWFuIGlzTm9ybWFsQXR0ciAoICkgeyByZXR1cm4gKF9iaXRzICYgMHhGKSA9PSAoMHgwICsgQVRUUik7IH0KLSAgICBmaW5hbCBib29sZWFuIGlzWG1sbnMgICAgICAoICkgeyByZXR1cm4gKF9iaXRzICYgMHhGKSA9PSAoMHg4ICsgQVRUUik7IH0KLSAgICBmaW5hbCBib29sZWFuIGlzTGVhZiAgICAgICAoICkgeyByZXR1cm4gKF9iaXRzICYgMHhGKSA9PSAoMHg4ICsgQkVHSU4pOyB9Ci0gICAgZmluYWwgYm9vbGVhbiBpc0ZyYWdtZW50ICAgKCApIHsgcmV0dXJuIChfYml0cyAmIDB4RikgPT0gKDB4OCArIENPTU1FTlQpOyB9Ci0gICAgZmluYWwgYm9vbGVhbiBpc1hzaUF0dHIgICAgKCApIHsgcmV0dXJuIGlzTm9ybWFsQXR0cigpICYmIGdldFVyaSgpLmVxdWFscyggX3hzaSApOyB9Ci0gICAgZmluYWwgYm9vbGVhbiBpc1hzaU5pbCAgICAgKCApIHsgcmV0dXJuIGlzTm9ybWFsQXR0cigpICYmIGdldE5hbWUoKS5lcXVhbHMoX3hzaU5pbCApOyB9Ci0gICAgZmluYWwgYm9vbGVhbiBpc1hzaVR5cGUgICAgKCApIHsgcmV0dXJuIGlzTm9ybWFsQXR0cigpICYmIGdldE5hbWUoKS5lcXVhbHMoIF94c2lUeXBlICk7IH0KLSAgICBmaW5hbCBib29sZWFuIGlzVHlwZWFibGUgICAoICkgeyByZXR1cm4gaXNDb250YWluZXIoKSB8fCBpc05vcm1hbEF0dHIoKTsgfQotCi0gICAgZmluYWwgdm9pZCB0b2dnbGVJc0xlYWYgKCApCi0gICAgewotICAgICAgICBhc3NlcnQgaXNCZWdpbigpOwotICAgICAgICBfYml0cyBePSAweDg7Ci0gICAgfQotCi0gICAgZmluYWwgYm9vbGVhbiBpc1ZhbGlkICggKQotICAgIHsKLSAgICAgICAgYXNzZXJ0ICgoX2JpdHMgJiAweDEwKSA9PSAwKSB8fCBpc1R5cGVhYmxlKCk7Ci0gICAgICAgIHJldHVybiAoX2JpdHMgJiAweDEwKSA9PSAwOwotICAgIH0KLQotICAgIGZpbmFsIGJvb2xlYW4gaXNJbnZhbGlkICggKQotICAgIHsKLSAgICAgICAgYXNzZXJ0ICgoX2JpdHMgJiAweDEwKSA9PSAwKSB8fCBpc1R5cGVhYmxlKCk7Ci0gICAgICAgIHJldHVybiAoX2JpdHMgJiAweDEwKSAhPSAwOwotICAgIH0KLQotICAgIGZpbmFsIHZvaWQgdG9nZ2xlSXNJbnZhbGlkICggKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IGlzVHlwZWFibGUoKTsKLSAgICAgICAgX2JpdHMgXj0gMHgxMDsKLSAgICB9Ci0KLSAgICBmaW5hbCB2b2lkIGFkanVzdENjaCAoIGludCBkZWx0YSApCi0gICAgewotICAgICAgICBfY2NoICs9IGRlbHRhOwotICAgICAgICBhc3NlcnQgX2NjaCA+PSAwOwotICAgIH0KLQotICAgIGZpbmFsIHZvaWQgYWRqdXN0Q2NoQWZ0ZXIgKCBpbnQgZGVsdGEgKQotICAgIHsKLSAgICAgICAgX2NjaEFmdGVyICs9IGRlbHRhOwotICAgICAgICBhc3NlcnQgX2NjaEFmdGVyID49IDA7Ci0gICAgfQotCi0gICAgZmluYWwgdm9pZCBhZGp1c3RDY2hMZWZ0ICggaW50IGRlbHRhICkKLSAgICB7Ci0gICAgICAgIF9jY2hMZWZ0ICs9IGRlbHRhOwotICAgICAgICBhc3NlcnQgX2NjaExlZnQgPj0gMDsKLSAgICB9Ci0KLSAgICBmaW5hbCB2b2lkIGFkanVzdENkb2NCZWdpbkxlZnQgKCBpbnQgZCApCi0gICAgewotICAgICAgICBfYml0cyArPSBkICogMzI7Ci0gICAgICAgIGFzc2VydCBnZXRDZG9jQmVnaW5MZWZ0KCkgPj0gMDsKLSAgICB9Ci0KLSAgICBmaW5hbCBTcGxheSBnZXRGaW5pc2hTcGxheSAoICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCBpc0NvbnRhaW5lcigpOwotICAgICAgICByZXR1cm4gaXNMZWFmKCkgPyB0aGlzIDogKChDb250YWluZXIpIHRoaXMpLmdldEZpbmlzaCgpOwotICAgIH0KLQotICAgIGZpbmFsIGludCBnZXRQb3NBZnRlciAoICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXRFbmRQb3MoKSAtIGdldENjaEFmdGVyKCk7Ci0gICAgfQotCi0gICAgZmluYWwgaW50IGdldFBvc0xlYWZFbmQgKCApCi0gICAgewotICAgICAgICBhc3NlcnQgaXNMZWFmKCk7Ci0gICAgICAgIHJldHVybiAxICsgZ2V0Q2NoVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBmaW5hbCBpbnQgZ2V0Q3BGb3JQb3MgKCBSb290IHIsIGludCBwICkKLSAgICB7Ci0gICAgICAgIGludCBjcCA9IHIuZ2V0Q3AoIHRoaXMgKTsKLQotICAgICAgICBpZiAocCA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIGNwOwotCi0gICAgICAgIHJldHVybgotICAgICAgICAgICAgaXNMZWFmKCkKLSAgICAgICAgICAgICAgICA/IHAgLSAocCA8PSBnZXRQb3NMZWFmRW5kKCkgPyAxIDogMikgKyBjcAotICAgICAgICAgICAgICAgIDogcCAtIDEgKyBnZXRDY2hWYWx1ZSgpICsgY3A7Ci0gICAgfQotCi0gICAgZmluYWwgaW50IGdldFBvc3RDY2ggKCBpbnQgcCApCi0gICAgewotICAgICAgICBhc3NlcnQgcCA+PSAwICYmIHAgPD0gZ2V0RW5kUG9zKCk7Ci0KLSAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBpc0xlYWYoKSAmJiBwIDw9IGdldFBvc0xlYWZFbmQoKQotICAgICAgICAgICAgICAgID8gZ2V0UG9zTGVhZkVuZCgpIC0gcAotICAgICAgICAgICAgICAgIDogZ2V0RW5kUG9zKCkgLSBwOwotICAgIH0KLQotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgX3hzaSA9Ci0gICAgICAgICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI7Ci0KLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIF9zY2hlbWEgPQotICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOwotCi0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBfb3BlbkZyYWdVcmkgPQotICAgICAgICAiaHR0cDovL3d3dy5vcGVudXJpLm9yZy9mcmFnbWVudCI7Ci0KLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIF94bWwxOTk4VXJpID0KLSAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSI7Ci0KLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIF94bWxuc1VyaSA9Ci0gICAgICAgICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyI7Ci0KLSAgICBzdGF0aWMgZmluYWwgUU5hbWUgX3hzaU5pbCAgPSBuZXcgUU5hbWUoIF94c2ksICJuaWwiICk7Ci0gICAgc3RhdGljIGZpbmFsIFFOYW1lIF94c2lUeXBlID0gbmV3IFFOYW1lKCBfeHNpLCAidHlwZSIgKTsKLSAgICBzdGF0aWMgZmluYWwgUU5hbWUgX29wZW51cmlGcmFnbWVudCA9IG5ldyBRTmFtZSggX29wZW5GcmFnVXJpLCAiZnJhZ21lbnQiICk7Ci0gICAgc3RhdGljIGZpbmFsIFFOYW1lIF94bWxGcmFnbWVudCA9IG5ldyBRTmFtZSggIiIsICJ4bWwtZnJhZ21lbnQiICk7Ci0KLSAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBpc1htbEZyYWdtZW50ICggUU5hbWUgbmFtZSApCi0gICAgewotICAgICAgICByZXR1cm4gX29wZW51cmlGcmFnbWVudC5lcXVhbHMoIG5hbWUgKSB8fCBfeG1sRnJhZ21lbnQuZXF1YWxzKCBuYW1lICk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2xlYW4gYmVnaW5zV2l0aFhtbCAoIFN0cmluZyBuYW1lICkKLSAgICB7Ci0gICAgICAgIGlmIChuYW1lLmxlbmd0aCgpIDwgMykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBjaGFyIGNoOwotCi0gICAgICAgIGlmICgoKGNoID0gbmFtZS5jaGFyQXQoIDAgKSkgPT0gJ3gnIHx8IGNoID09ICdYJykgJiYKLSAgICAgICAgICAgICAgICAoKGNoID0gbmFtZS5jaGFyQXQoIDEgKSkgPT0gJ20nIHx8IGNoID09ICdNJykgJiYKLSAgICAgICAgICAgICAgICAoKGNoID0gbmFtZS5jaGFyQXQoIDIgKSkgPT0gJ2wnIHx8IGNoID09ICdMJykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoaXMgcmV0dXJucyB0aGUgcG9zIG9mIHRoZSB2ZXJ5IGVuZCBvZiB0aGUgc3BsYXkuICBUaGlzIGlzIG5vdAotICAgICAqIGdlbmVyYWxseSBhIHZhbGlkIHBvc2l0aW9uIHRvIGV4aXN0IGJlY2F1c2UgaW4gdGhlc2UgY2FzZXMsIEkKLSAgICAgKiBmb3JjZSB0aGUgcG9zaXRpb24gdG8gYmUgMCBvbiB0aGUgbmV4dCBzcGxheS4KLSAgICAgKi8KLQotICAgIGZpbmFsIGludCBnZXRFbmRQb3MgKCApCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0TWF4UG9zKCkgKyAxOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoaXMgcmV0dXJucyB0aGUgbGFyZ2VzdCBwb3MgcG9zc2libGUgd2l0aG91dCBhY3R1YWxseSBiZWluZyBhdAotICAgICAqIHRoZSBlbmQgb2YgdGhlIHNwbGF5LgotICAgICAqLwotCi0gICAgZmluYWwgaW50IGdldE1heFBvcyAoICkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoIGdldEtpbmQoKSApCi0gICAgICAgIHsKLSAgICAgICAgY2FzZSBBVFRSICAgICA6Ci0gICAgICAgIGNhc2UgUk9PVCAgICAgOiByZXR1cm4gMDsKLSAgICAgICAgY2FzZSBCRUdJTiAgICA6IHJldHVybiAoaXNMZWFmKCkgPyAxIDogMCkgKyBnZXRDY2goKTsKLSAgICAgICAgY2FzZSBET0MgICAgICA6Ci0gICAgICAgIGNhc2UgQ09NTUVOVCAgOgotICAgICAgICBjYXNlIFBST0NJTlNUIDoKLSAgICAgICAgY2FzZSBFTkQgICAgICA6IHJldHVybiBnZXRDY2hBZnRlcigpOwotCi0gICAgICAgIGRlZmF1bHQgOgotICAgICAgICAgICAgYXNzZXJ0IGZhbHNlOiAiVW5leHBlY3RlZCBzcGxheSBraW5kICIgK2dldEtpbmQoKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIGZpbmFsIGJvb2xlYW4gaXNXaGl0ZVNwYWNlICggY2hhciBjaCApCi0gICAgewotICAgICAgICBzd2l0Y2ggKCBjaCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgJyAnOgotICAgICAgICAgICAgY2FzZSAnXHQnOgotICAgICAgICAgICAgY2FzZSAnXG4nOgotICAgICAgICAgICAgY2FzZSAnXHInOgotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgZmluYWwgYm9vbGVhbiBpc1doaXRlU3BhY2UgKCBTdHJpbmcgcyApCi0gICAgewotICAgICAgICBpbnQgbCA9IHMubGVuZ3RoKCk7Ci0KLSAgICAgICAgd2hpbGUgKCBsLS0gPiAwKQotICAgICAgICAgICAgaWYgKCFpc1doaXRlU3BhY2UoIHMuY2hhckF0KCBsICkpKQotICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIGlzV2hpdGVTcGFjZSAoIFN0cmluZ0J1ZmZlciBzYiApCi0gICAgewotICAgICAgICBpbnQgbCA9IHNiLmxlbmd0aCgpOwotCi0gICAgICAgIHdoaWxlICggbC0tID4gMCkKLSAgICAgICAgICAgIGlmICghaXNXaGl0ZVNwYWNlKCBzYi5jaGFyQXQoIGwgKSkpCi0gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgZmluYWwgYm9vbGVhbiBpc0FmdGVyV2hpdGVTcGFjZSAoIFJvb3QgciApCi0gICAgewotICAgICAgICBpbnQgY2NoQWZ0ZXIgPSBnZXRDY2hBZnRlcigpOwotCi0gICAgICAgIGlmIChjY2hBZnRlciA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgaW50IG9mZiA9Ci0gICAgICAgICAgICByLl90ZXh0LnVuT2JzY3VyZSgKLSAgICAgICAgICAgICAgICByLmdldENwKCB0aGlzICkgKyBnZXRDY2goKSAtIGNjaEFmdGVyLCBjY2hBZnRlciApOwotCi0gICAgICAgIHdoaWxlICggY2NoQWZ0ZXItLSA+IDAgKQotICAgICAgICAgICAgaWYgKCFpc1doaXRlU3BhY2UoIHIuX3RleHQuX2J1Zlsgb2ZmICsgY2NoQWZ0ZXIgXSApKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBmaW5hbCB2b2lkIHNldE5hbWUgKCBSb290IHIsIFFOYW1lIG5ld05hbWUgKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IGlzQmVnaW4oKSB8fCBpc0F0dHIoKSB8fCBpc1Byb2NpbnN0KCk7Ci0KLSAgICAgICAgLy8gQlVHQlVHIC0gZGVhbCB3aXRoIHhzaTpuaWwgaGVyZSB0b28KLQotICAgICAgICBRTmFtZSBvbGROYW1lID0gZ2V0TmFtZSgpOwotCi0gICAgICAgIGlmICghbmV3TmFtZS5lcXVhbHMoIG9sZE5hbWUgKSkKLSAgICAgICAgewotICAgICAgICAgICAgci5zdGFydENoYW5nZSgpOwotCi0gICAgICAgICAgICAoKFFOYW1lU3BsYXkpIHRoaXMpLmNoYW5nZU5hbWUoIG5ld05hbWUgKTsKLQotICAgICAgICAgICAgaWYgKCFpc1Byb2NpbnN0KCkgJiYgIWlzWG1sbnMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQgaXNBdHRyKCkgfHwgaXNCZWdpbigpOwotCi0gICAgICAgICAgICAgICAgaWYgKGlzQmVnaW4oKSkKLSAgICAgICAgICAgICAgICAgICAgZGlzY29ubmVjdFR5cGVzKCByICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoX3hzaVR5cGUuZXF1YWxzKCBvbGROYW1lICkgfHwgX3hzaVR5cGUuZXF1YWxzKCBuZXdOYW1lICkpCi0gICAgICAgICAgICAgICAgICAgIGdldENvbnRhaW5lcigpLmRpc2Nvbm5lY3RUeXBlcyggciApOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKF94c2lOaWwuZXF1YWxzKCBvbGROYW1lICkgfHwgX3hzaU5pbC5lcXVhbHMoIG5ld05hbWUgKSkKLSAgICAgICAgICAgICAgICAgICAgZ2V0Q29udGFpbmVyKCkuaW52YWxpZGF0ZU5pbCgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZGlzY29ubmVjdFR5cGVzKCByICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHIuaW52YWxpZGF0ZVZlcnNpb24oKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIElmIHRoaXMgaXMgYW4gaW52YWxpZCBsZWFmLCB0aGVuIHJlZnJlc2ggaXQncyB2YWx1ZSBhbmQgcmV0dXJuIHRoZQotICAgICAqIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFkZGVkLgotICAgICAqLwotCi0gICAgZmluYWwgaW50IGVuc3VyZUNvbnRlbnRWYWxpZCAoICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCBpc0NvbnRhaW5lcigpOwotCi0gICAgICAgIGlmIChpc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBUeXBlIHQgPSBwZWVrVHlwZSgpOwotCi0gICAgICAgIHJldHVybiB0LnZhbGlkYXRlQ29udGVudCggdGhpcywgdCApOwotICAgIH0KLQotICAgIC8qKgotICAgICAgKiBFbnN1cmUgdGhhdCB0aGUgdmFsdWUgKEFUVFIsIENPTU1FTlQgYW5kIFBST0NJTlNUKSBpcyB2YWxpZC4gIFJlYWxseQotICAgICAgKiBvbmx5IGRvZXMgYW55dGhpbmcgZm9yIGF0dHJzLgotICAgICAgKi8KLQotICAgIGZpbmFsIHZvaWQgZW5zdXJlVmFsdWVWYWxpZCAoICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCBpc05vcm1hbEF0dHIoKTsKLQotICAgICAgICBpZiAoaXNJbnZhbGlkKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFR5cGUgdCA9IHBlZWtUeXBlKCk7Ci0gICAgICAgICAgICB0LnZhbGlkYXRlVmFsdWUoIHRoaXMsIHQgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdpdmVuIGEgcG9zaXRpb24gaW4gdGhpcyBzcGxheSwgcmV0dXJuIHRoZSBUb2tlblR5cGUgYXNzb2NpYXRlZCB3aXRoCi0gICAgICogdGhlIGNvbnRlbnQgdG8gdGhlIGxlZnQgb2YgdGhlIHBvc2l0aW9uLgotICAgICAqLwotCi0gICAgZmluYWwgVG9rZW5UeXBlIGdldFRva2VuVHlwZSAoIGludCBwICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCBwID49IDAgJiYgcCA8PSBnZXRNYXhQb3MoKTsKLQotICAgICAgICAvLyBObyBuZWVkIHRvIHJldmFsaWRhdGUgdGV4dCB2YWx1ZSBoZXJlIGJlY2F1c2UgdGhlcmUgY2FuIGJlIG5vIHBvcwotICAgICAgICAvLyB3aGljaCBjb3VsZCBleGlzdHMgd2hlbiB0aGlzIHNwbGF5IGlzIGludmFsaWQgd2hpY2ggY291bGQgYmUgb24KLSAgICAgICAgLy8gdGV4dC4KLQotICAgICAgICAvLyBGaXJzdCwgc2VlIGlmIHdlJ3JlIGluL2F0IHRoZSB0ZXh0IGFmdGVyIHRoZSBzcGxheQotCi0gICAgICAgIGlmIChwID49IGdldFBvc0FmdGVyKCkpCi0gICAgICAgICAgICByZXR1cm4gVG9rZW5UeXBlLlRFWFQ7Ci0KLSAgICAgICAgc3dpdGNoICggZ2V0S2luZCgpICkKLSAgICAgICAgewotICAgICAgICBjYXNlIEFUVFIgOgotICAgICAgICAgICAgcmV0dXJuIGlzWG1sbnMoKSA/IFRva2VuVHlwZS5OQU1FU1BBQ0UgOiBUb2tlblR5cGUuQVRUUjsKLQotICAgICAgICBjYXNlIEJFR0lOIDoKLSAgICAgICAgICAgIGlmIChwID09IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIFRva2VuVHlwZS5TVEFSVDsKLQotICAgICAgICAgICAgYXNzZXJ0IGlzTGVhZigpOwotCi0gICAgICAgICAgICByZXR1cm4gcCA9PSBnZXRQb3NMZWFmRW5kKCkgPyBUb2tlblR5cGUuRU5EIDogVG9rZW5UeXBlLlRFWFQ7Ci0KLSAgICAgICAgY2FzZSBST09UICAgICA6IHJldHVybiBUb2tlblR5cGUuRU5ERE9DOwotICAgICAgICBjYXNlIERPQyAgICAgIDogcmV0dXJuIFRva2VuVHlwZS5TVEFSVERPQzsKLSAgICAgICAgY2FzZSBDT01NRU5UICA6IHJldHVybiBUb2tlblR5cGUuQ09NTUVOVDsKLSAgICAgICAgY2FzZSBQUk9DSU5TVCA6IHJldHVybiBUb2tlblR5cGUuUFJPQ0lOU1Q7Ci0gICAgICAgIGNhc2UgRU5EICAgICAgOiByZXR1cm4gVG9rZW5UeXBlLkVORDsKLQotICAgICAgICBkZWZhdWx0IDoKLSAgICAgICAgICAgIGFzc2VydCBmYWxzZTogIlVuZXhwZWN0ZWQgc3BsYXkga2luZCAiICsgZ2V0S2luZCgpOwotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDYXVzZSB0aGlzIHNwbGF5IHRvIGJlY29tZSBhIGxlYWYuICBUaGlzIGRvZXMgbm90IGxvZ2ljYWxseQotICAgICAqIGFsdGVyIHRoZSBkb2N1bWVudCwgYnV0IGRvZXMgYWx0ZXIgdGhlIHBoeXNpY2FsIHNwbGF5IHRyZWUgd2hpY2gKLSAgICAgKiBkZW1hbmRzIHRoYXQgSSBpc3N1ZSBhIGNoYW5nZSBub3RpY2UuCi0gICAgICovCi0KLSAgICBmaW5hbCB2b2lkIGZvbGlhdGUgKCBSb290IHIgKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IGlzQmVnaW4oKTsKLSAgICAgICAgYXNzZXJ0ICFpc0xlYWYoKTsKLQotICAgICAgICBCZWdpbiBiID0gKEJlZ2luKSB0aGlzOwotICAgICAgICBTcGxheSBlID0gYi5nZXRGaW5pc2goKTsKLQotICAgICAgICBhc3NlcnQgYi5uZXh0Tm9uQXR0clNwbGF5KCkgPT0gZTsKLSAgICAgICAgYXNzZXJ0IGIuX2VuZCA9PSBlOwotICAgICAgICBhc3NlcnQgZS5pc0VuZCgpOwotICAgICAgICBhc3NlcnQgIWIuaXNMZWFmKCk7Ci0KLSAgICAgICAgLy8gQ2FsbGVyIG11c3QgaW5pdGlhdGUgY2hhbmdlCi0gICAgICAgIGFzc2VydCByLnZhbGlkYXRlQ2hhbmdlU3RhcnRlZCgpOwotCi0gICAgICAgIGludCBjY2hCZWZvcmUgPSBnZXRDY2goKTsKLQotICAgICAgICBlLnNhdmVUZXh0QWZ0ZXIoIHIgKTsKLQotICAgICAgICBiLl9lbmQgPSBudWxsOwotICAgICAgICBiLnRvZ2dsZUlzTGVhZigpOwotCi0gICAgICAgIGIuYWRqdXN0Q2NoQWZ0ZXIoIC0gY2NoQmVmb3JlICk7Ci0KLSAgICAgICAgLy8gTW92ZSB0aGUgZ29vYmVycyBmcm9tIHRoZSBlbmQgdG8gdGhlIGJlZ2luCi0KLSAgICAgICAgR29vYmVyIG5leHRHb29iZXI7Ci0gICAgICAgIGZvciAoIEdvb2JlciBnID0gZS5maXJzdEdvb2JlcigpIDsgZyAhPSBudWxsIDsgZyA9IG5leHRHb29iZXIgKQotICAgICAgICB7Ci0gICAgICAgICAgICBuZXh0R29vYmVyID0gZS5uZXh0R29vYmVyKCBnICk7Ci0KLSAgICAgICAgICAgIGFzc2VydCBnLmdldFBvcygpID09IDA7Ci0gICAgICAgICAgICBnLnNldCggdGhpcywgY2NoQmVmb3JlICsgMSApOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yICggR29vYmVyIGcgPSBmaXJzdEdvb2JlcigpIDsgZyAhPSBudWxsIDsgZyA9IG5leHRHb29iZXIgKQotICAgICAgICB7Ci0gICAgICAgICAgICBuZXh0R29vYmVyID0gbmV4dEdvb2JlciggZyApOwotCi0gICAgICAgICAgICBpbnQgZ3AgPSBnLmdldFBvcygpOwotCi0gICAgICAgICAgICBpZiAoZ3AgPiBjY2hCZWZvcmUgKyAxKQotICAgICAgICAgICAgICAgIGcuc2V0KCB0aGlzLCBncCArIDEgKTsKLSAgICAgICAgfQotCi0gICAgICAgIGUucmVtb3ZlU3BsYXkoIHIgKTsKLSAgICB9Ci0KLSAgICBmaW5hbCB2b2lkIGRlZm9saWF0ZSAoIFJvb3QgciApCi0gICAgewotICAgICAgICBhc3NlcnQgaXNMZWFmKCk7Ci0KLSAgICAgICAgLy8gQ2FsbGVyIG11c3QgaW5pdGlhdGUgY2hhbmdlCi0gICAgICAgIGFzc2VydCByLnZhbGlkYXRlQ2hhbmdlU3RhcnRlZCgpOwotCi0gICAgICAgIC8vIENhbGxlciBtdXN0IGVuc3VyZSBsZWFmIGlzIHZhbGlkCi0gICAgICAgIGFzc2VydCBpc1ZhbGlkKCk7Ci0KLSAgICAgICAgQmVnaW4gYiA9IChCZWdpbikgdGhpczsKLQotICAgICAgICBpbnQgcG9zTGVhZkVuZCA9IGdldFBvc0xlYWZFbmQoKTsKLSAgICAgICAgaW50IGNjaEFmdGVyID0gZ2V0Q2NoQWZ0ZXIoKTsKLSAgICAgICAgaW50IGNjaFZhbHVlID0gZ2V0Q2NoVmFsdWUoKTsKLQotICAgICAgICBTcGxheSBhID0gdGhpczsKLQotICAgICAgICBpbnQgY2NoQXR0ciA9IDA7Ci0KLSAgICAgICAgZm9yICggU3BsYXkgdCA9IG5leHRTcGxheSgpIDsgdC5pc0F0dHIoKSA7IHQgPSB0Lm5leHRTcGxheSgpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2NoQXR0ciArPSB0LmdldENjaCgpOwotICAgICAgICAgICAgYSA9IHQ7Ci0gICAgICAgIH0KLQotICAgICAgICByLmluc2VydFNwbGF5KCBiLl9lbmQgPSBuZXcgRW5kKCAoQmVnaW4pIHRoaXMgKSwgYSApOwotCi0gICAgICAgIGIudG9nZ2xlSXNMZWFmKCk7Ci0KLSAgICAgICAgYi5hZGp1c3RDY2hBZnRlciggY2NoVmFsdWUgLSBjY2hBZnRlciApOwotICAgICAgICBiLl9lbmQuYWRqdXN0Q2NoQWZ0ZXIoIGNjaEFmdGVyICk7Ci0KLSAgICAgICAgci51cGRhdGVDY2goIGIsIC0gY2NoQWZ0ZXIgKTsKLSAgICAgICAgci51cGRhdGVDY2goIGIuX2VuZCwgY2NoQWZ0ZXIgKTsKLQotICAgICAgICBpZiAoY2NoQXR0ciA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBjcCA9IHIuZ2V0Q3AoIGIgKTsKLQotICAgICAgICAgICAgci5fdGV4dC5tb3ZlKAotICAgICAgICAgICAgICAgIGNwICsgY2NoVmFsdWUgKyBjY2hBZnRlciArIGNjaEF0dHIsCi0gICAgICAgICAgICAgICAgci5fdGV4dCwgY3AgKyBjY2hWYWx1ZSwgY2NoQWZ0ZXIgKTsKLSAgICAgICAgfQotCi0gICAgICAgIEdvb2JlciBuZXh0R29vYmVyOwotICAgICAgICBmb3IgKCBHb29iZXIgZyA9IGZpcnN0R29vYmVyKCkgOyBnICE9IG51bGwgOyBnID0gbmV4dEdvb2JlciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5leHRHb29iZXIgPSBuZXh0R29vYmVyKCBnICk7Ci0KLSAgICAgICAgICAgIGludCBncCA9IGcuZ2V0UG9zKCk7Ci0KLSAgICAgICAgICAgIGlmIChncCA+PSBwb3NMZWFmRW5kKQotICAgICAgICAgICAgICAgIGcuc2V0KCBiLl9lbmQsIGdwIC0gcG9zTGVhZkVuZCApOwotICAgICAgICB9Ci0KLSAgICAgICAgYXNzZXJ0IHZhbGlkYXRlKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVtb3ZlIHRoZSB0ZXh0IGFmdGVyICp0aGlzKiBzcGxheS4KLSAgICAgKiBObyB2YWxpZGF0aW9uIGlzIGRvbmUsIGNhbGxlciBtdXN0IGRvIHRoYXQKLSAgICAgKi8KLQotICAgIHByaXZhdGUgZmluYWwgdm9pZCByZW1vdmVUZXh0QWZ0ZXIgKCBSb290IHIgKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IHIgIT0gbnVsbDsKLSAgICAgICAgYXNzZXJ0IFJvb3QuZHYgPiAwIHx8IGdldFJvb3RTbG93KCkgPT0gcjsKLSAgICAgICAgYXNzZXJ0ICFpc1Jvb3QoKSAmJiAhaXNBdHRyKCk7Ci0KLSAgICAgICAgLy8gQ2FsbGVyIG11c3QgaW5pdGlhdGUgY2hhbmdlCi0gICAgICAgIGFzc2VydCByLnZhbGlkYXRlQ2hhbmdlU3RhcnRlZCgpOwotCi0gICAgICAgIGludCBjY2hUZXh0QWZ0ZXIgPSBnZXRDY2hBZnRlcigpOwotCi0gICAgICAgIGlmIChjY2hUZXh0QWZ0ZXIgPT0gMCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpbnQgY3BUZXh0QWZ0ZXIgPSByLmdldENwKCB0aGlzICkgKyBnZXRDY2goKSAtIGNjaFRleHRBZnRlcjsKLSAgICAgICAgaW50IHBvc1RleHRBZnRlciA9IGdldFBvc0FmdGVyKCk7Ci0KLSAgICAgICAgYWRqdXN0Q2NoQWZ0ZXIoIC0gY2NoVGV4dEFmdGVyICk7Ci0KLSAgICAgICAgci51cGRhdGVDY2goIHRoaXMsIC0gY2NoVGV4dEFmdGVyICk7Ci0KLSAgICAgICAgci5fdGV4dC5yZW1vdmUoIGNwVGV4dEFmdGVyLCBjY2hUZXh0QWZ0ZXIgKTsKLQotICAgICAgICBHb29iZXIgbmV4dEdvb2JlcjsKLSAgICAgICAgZm9yICggR29vYmVyIGcgPSBmaXJzdEdvb2JlcigpIDsgZyAhPSBudWxsIDsgZyA9IG5leHRHb29iZXIgKQotICAgICAgICB7Ci0gICAgICAgICAgICBuZXh0R29vYmVyID0gbmV4dEdvb2JlciggZyApOwotCi0gICAgICAgICAgICBpbnQgayA9IGcuZ2V0S2luZCgpOwotCi0gICAgICAgICAgICBpZiAoZy5nZXRQb3MoKSA+PSBwb3NUZXh0QWZ0ZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGsgPT0gQU5OT1RBVElPTikKLSAgICAgICAgICAgICAgICAgICAgZy5kaXNjb25uZWN0KCByICk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoayA9PSBDVVJTT1IpCi0gICAgICAgICAgICAgICAgICAgIGcuc2V0KCBuZXh0U3BsYXkoKSwgMCApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgYXNzZXJ0IHZhbGlkYXRlKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVHJhbnNmZXJzIHRoZSB0ZXh0IGFmdGVyIHRoaXMgIm5vZGUiIHRvIGJlIGFmdGVyIHRoZSAibm9kZSIgYmVmb3JlIGl0LgotICAgICAqIE5vIHR5cGUgaW52YWxpZGF0aW9uIGlzIGRvbmUgaGVyZS4gIE5vIGNoZWNraW5nIGZvciBpc0ludmFsaWQgaXMgbmVlZGVkCi0gICAgICogZWl0aGVyLiAgTm8gdmFsaWRhdGlvbiBpcyBkb25lLCBjYWxsZXIgbXVzdCBkbyB0aGF0LgotICAgICAqLwotCi0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgc2F2ZVRleHRBZnRlciAoIFJvb3QgciApCi0gICAgewotICAgICAgICBhc3NlcnQgciAhPSBudWxsOwotICAgICAgICBhc3NlcnQgUm9vdC5kdiA+IDAgfHwgZ2V0Um9vdFNsb3coKSA9PSByOwotCi0gICAgICAgIC8vIENhbGxlciBtdXN0IGluaXRpYXRlIGNoYW5nZQotICAgICAgICBhc3NlcnQgci52YWxpZGF0ZUNoYW5nZVN0YXJ0ZWQoKTsKLQotICAgICAgICBTcGxheSBlbmRUZXh0ID0gdGhpczsKLQotICAgICAgICBpZiAoaXNCZWdpbigpICYmICFpc0xlYWYoKSkKLSAgICAgICAgICAgIGVuZFRleHQgPSBnZXRGaW5pc2hTcGxheSgpOwotCi0gICAgICAgIGludCBjY2hFbmRUZXh0ID0gZW5kVGV4dC5nZXRDY2hBZnRlcigpOwotCi0gICAgICAgIGlmIChjY2hFbmRUZXh0ID09IDApCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBhc3NlcnQgIWlzUm9vdCgpICYmICFpc0RvYygpICYmICFpc0F0dHIoKTsKLQotICAgICAgICBTcGxheSBnZXRzVGV4dCA9IHByZXZOb25BdHRyU3BsYXkoKTsKLSAgICAgICAgaW50IGdldHNUZXh0TGFzdFBvcyA9IGdldHNUZXh0LmdldEVuZFBvcygpOwotCi0gICAgICAgIGludCBjcEdldHNUZXh0ID0gci5nZXRDcCggZ2V0c1RleHQgKSArIGdldHNUZXh0LmdldENjaCgpOwotICAgICAgICBpbnQgY3BFbmRUZXh0ID0gci5nZXRDcCggZW5kVGV4dCApICsgZW5kVGV4dC5nZXRDY2goKSAtIGNjaEVuZFRleHQ7Ci0KLSAgICAgICAgZ2V0c1RleHQuYWRqdXN0Q2NoQWZ0ZXIoIGNjaEVuZFRleHQgKTsKLSAgICAgICAgZW5kVGV4dC5hZGp1c3RDY2hBZnRlciggLSBjY2hFbmRUZXh0ICk7Ci0KLSAgICAgICAgci51cGRhdGVDY2goIGdldHNUZXh0LCBjY2hFbmRUZXh0ICk7Ci0gICAgICAgIHIudXBkYXRlQ2NoKCBlbmRUZXh0LCAtIGNjaEVuZFRleHQgKTsKLQotICAgICAgICBhc3NlcnQgY3BHZXRzVGV4dCA8PSBjcEVuZFRleHQ7Ci0KLSAgICAgICAgaWYgKGNwR2V0c1RleHQgIT0gY3BFbmRUZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICByLl90ZXh0Lmluc2VydCggY3BHZXRzVGV4dCwgci5fdGV4dCwgY3BFbmRUZXh0LCBjY2hFbmRUZXh0ICk7Ci0gICAgICAgICAgICByLl90ZXh0LnJlbW92ZSggY3BFbmRUZXh0ICsgY2NoRW5kVGV4dCwgY2NoRW5kVGV4dCApOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHBvc0VuZFRleHQgPSBlbmRUZXh0LmdldFBvc0FmdGVyKCk7Ci0KLSAgICAgICAgR29vYmVyIG5leHRHb29iZXI7Ci0gICAgICAgIGZvciAoIEdvb2JlciBnID0gZW5kVGV4dC5maXJzdEdvb2JlcigpIDsgZyAhPSBudWxsIDsgZyA9IG5leHRHb29iZXIgKQotICAgICAgICB7Ci0gICAgICAgICAgICBuZXh0R29vYmVyID0gZW5kVGV4dC5uZXh0R29vYmVyKCBnICk7Ci0KLSAgICAgICAgICAgIGludCBncCA9IGcuZ2V0UG9zKCk7Ci0KLSAgICAgICAgICAgIGlmIChncCA+PSBwb3NFbmRUZXh0KQotICAgICAgICAgICAgICAgIGcuc2V0KCBnZXRzVGV4dCwgZ2V0c1RleHRMYXN0UG9zICsgZ3AgLSBwb3NFbmRUZXh0ICk7Ci0gICAgICAgIH0KLQotICAgICAgICBhc3NlcnQgdmFsaWRhdGUoKTsKLQotICAgICAgICByZXR1cm4gY2NoRW5kVGV4dDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNb3ZlcyB0aGlzIHNwbGF5LCBhbGwgb2YgaXRzIGNvbnRlbnQgYW5kIGF0dHJpYnV0ZXMuICBJZiBubyBkZXN0aW5hdGlvbgotICAgICAqIGlzIHByb3ZpZGVkLCB0aGVuIG9ubHkgYSByZW1vdmFsIGlzIHBlcmZvcm1lZC4KLSAgICAgKi8KLQotICAgIGZpbmFsIHZvaWQgbW92ZSAoCi0gICAgICAgIFJvb3QgciwgUm9vdCByRHN0LCBTcGxheSBzRHN0LCBpbnQgcERzdCwgYm9vbGVhbiBpbnZhbGlkYXRlICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCByICE9IG51bGw7Ci0gICAgICAgIGFzc2VydCBSb290LmR2ID4gMCB8fCBnZXRSb290U2xvdygpID09IHI7Ci0gICAgICAgIGFzc2VydCAhaXNEb2MoKSAmJiAhaXNGaW5pc2goKTsKLQotICAgICAgICBhc3NlcnQgckRzdCA9PSBudWxsIHx8IChyICE9IHJEc3QgfHwgIXNEc3QuYmV0d2VlbiggciwgcERzdCwgdGhpcyApICk7Ci0gICAgICAgIGFzc2VydCByRHN0ID09IG51bGwgfHwgc0RzdCAhPSBudWxsOwotICAgICAgICBhc3NlcnQgckRzdCA9PSBudWxsIHx8IFJvb3QuZHYgPiAwIHx8IHNEc3QuZ2V0Um9vdFNsb3coKSA9PSByRHN0OwotICAgICAgICBhc3NlcnQgckRzdCA9PSBudWxsIHx8IHBEc3QgPj0gMCAmJiBwRHN0IDwgc0RzdC5nZXRFbmRQb3MoKTsKLQotICAgICAgICBhc3NlcnQKLSAgICAgICAgICAgIHJEc3QgPT0gbnVsbCB8fAotICAgICAgICAgICAgICAgICh0cnVlIHx8IGNoZWNrSW5zZXJ0aW9uVmFsaWRpdHkoIDAsIHNEc3QsIHBEc3QsIGZhbHNlICkpOwotCi0gICAgICAgIHIuc3RhcnRDaGFuZ2UoKTsKLQotICAgICAgICBpZiAockRzdCAhPSBudWxsKQotICAgICAgICAgICAgckRzdC5zdGFydENoYW5nZSgpOwotCi0gICAgICAgIC8vIFRoZSB0ZXh0IGFmdGVyIHRoZSBsb2dpY2FsIGVudGl0eSB0byBtb3ZlL3JlbW92ZSBpcyBub3QgcGFydCBvZgotICAgICAgICAvLyB0aGlzIG9wZXJhdGlvbi4gIFRyYW5zZmVyIGl0IHRvIGEgcHJldmlvdXMgc3BsYXkuICBObyBuZWVkIHRvCi0gICAgICAgIC8vIGZyZXQgYWJvdXQgaW52YWxpZGl0eSBoZXJlLCBiZWNhdXNlIGl0J3MgdGV4dCAqYWZ0ZXIqLgotCi0gICAgICAgIGludCBjY2hTYXZlZCA9IHNhdmVUZXh0QWZ0ZXIoIHIgKTsKLQotICAgICAgICAvLyBJZiBhbnkgdGV4dCB3YXMgc2F2ZWQsIEkgbmVlZCB0byBtb3ZlIHRoZSBjdXJzb3JzIGF0IHRoZSBiZWdpbm5pbmcKLSAgICAgICAgLy8gb2YgdGhpcyBzcGxheSB0byB3aGVyZSB0aGUgdGV4dCB3YXMgc2F2ZWQuICBJIGRvIHRoaXMgYmVjYXVzZSB0aGlzCi0gICAgICAgIC8vIGNvbnRlbnQgaXMgZ29pbmcgYXdheSBhbmQgY3Vyc29ycyBuZWVkIHRvIGNvbGxhcHNlIHRvIHRoZSByaWdodAotICAgICAgICAvLyBsb2NhdGlvbiB3aGljaCwgaW4gdGhpcyBjYXNlLCBpcyBiZWZvcmUgdGhlIGFmdGVyIHRleHQuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIE5vIG5lZWQgdG8gZGVhbCB3aXRoIGdvb2JlcnMgb3RoZXIgdGhhbiBjdXJzb3IgYmVjYXVzZSBhbm5vdGF0aW9ucwotICAgICAgICAvLyBhbmQgdHlwZXMgd2lsbCBiZSBkZWFsdCB3aXRoIGFwcHJvcHJpYXRlbHkgbGF0ZXIuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEFsc28sIHVwZGF0ZSB0aGUgdGFyZ2V0IGlmIGl0IHdhcyBpbiB0aGUgbW92ZWQgdGV4dCEKLSAgICAgICAgLy8KLSAgICAgICAgLy8gVE9ETyAtIGlmIG1vdmluZyB4c2k6dHlwZSBvciB4c2k6bmlsIG11c3QgZG8gc3R1ZmYKLQotICAgICAgICBpZiAoY2NoU2F2ZWQgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBTcGxheSBnb3RUZXh0ID0gcHJldk5vbkF0dHJTcGxheSgpOwotCi0gICAgICAgICAgICBHb29iZXIgbmV4dEdvb2JlcjsKLSAgICAgICAgICAgIGZvciAoIEdvb2JlciBnID0gZmlyc3RHb29iZXIoKSA7IGcgIT0gbnVsbCA7IGcgPSBuZXh0R29vYmVyICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBuZXh0R29vYmVyID0gbmV4dEdvb2JlciggZyApOwotCi0gICAgICAgICAgICAgICAgaWYgKGcuZ2V0S2luZCgpID09IENVUlNPUikKLSAgICAgICAgICAgICAgICAgICAgZy5zZXQoIGdvdFRleHQsIGdvdFRleHQuZ2V0RW5kUG9zKCkgLSBjY2hTYXZlZCApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAockRzdCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNwbGF5IGhhZFRleHQgPQotICAgICAgICAgICAgICAgICAgICBpc0JlZ2luKCkgJiYgIWlzTGVhZigpID8gZ2V0RmluaXNoU3BsYXkoKSA6IHRoaXM7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc0RzdCA9PSBoYWRUZXh0ICYmIHBEc3QgPj0gaGFkVGV4dC5nZXRFbmRQb3MoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNEc3QgPSBnb3RUZXh0OwotCi0gICAgICAgICAgICAgICAgICAgIHBEc3QgPQotICAgICAgICAgICAgICAgICAgICAgICAgZ290VGV4dC5nZXRFbmRQb3MoKSAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNjaFNhdmVkIC0gKHBEc3QgLSBoYWRUZXh0LmdldEVuZFBvcygpKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgYXNzZXJ0IHNEc3QgIT0gdGhpczsKLQotICAgICAgICAvLyBDb21wdXRlIHRoZSBzcGxheSwgdXAgdG8gd2hpY2gsIEkgd2lsbCByZW1vdmUKLQotICAgICAgICBTcGxheSBsYXN0ID0KLSAgICAgICAgICAgIGlzQmVnaW4oKSA/IGdldEZpbmlzaFNwbGF5KCkubmV4dE5vbkF0dHJTcGxheSgpIDogbmV4dFNwbGF5KCk7Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8KLSAgICAgICAgLy8KLQotICAgICAgICBDb250YWluZXIgY29udGFpbmVyID0gZ2V0Q29udGFpbmVyKCk7Ci0KLSAgICAgICAgaW50IGNwID0gci5nZXRDcCggdGhpcyApOwotICAgICAgICBpbnQgY2NoID0gMDsKLQotICAgICAgICBmb3IgKCBTcGxheSBzID0gdGhpcyA7IHMgIT0gbGFzdCA7IHMgPSBzLm5leHRTcGxheSgpICkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gSSdtIGdvaW5nIHRvIGJsb3cgYXdheSB0aGUgVHlwZXMgaGVyZSwgbWFrZSBzdXJlIEkgaGF2ZQotICAgICAgICAgICAgLy8gYWxsIHRoZSB0ZXh0LgotCi0gICAgICAgICAgICBpZiAocy5pc0ludmFsaWQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQgcy5pc0xlYWYoKSB8fCBzLmlzTm9ybWFsQXR0cigpOwotCi0gICAgICAgICAgICAgICAgaWYgKHMuaXNOb3JtYWxBdHRyKCkpCi0gICAgICAgICAgICAgICAgICAgIHMuZW5zdXJlVmFsdWVWYWxpZCgpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHMuaXNMZWFmKCkpCi0gICAgICAgICAgICAgICAgICAgIHMuZW5zdXJlQ29udGVudFZhbGlkKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNjaCArPSBzLmdldENjaCgpOwotCi0gICAgICAgICAgICBHb29iZXIgbmV4dEdvb2JlcjsKLSAgICAgICAgICAgIGZvciAoIEdvb2JlciBnID0gcy5maXJzdEdvb2JlcigpIDsgZyAhPSBudWxsIDsgZyA9IG5leHRHb29iZXIgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG5leHRHb29iZXIgPSBzLm5leHRHb29iZXIoIGcgKTsKLQotICAgICAgICAgICAgICAgIHN3aXRjaCAoIGcuZ2V0S2luZCgpICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBUWVBFIDoKLSAgICAgICAgICAgICAgICAgICAgZy5kaXNjb25uZWN0KCByICk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBBTk5PVEFUSU9OIDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJEc3QgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGcuZGlzY29ubmVjdCggciApOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBnLnNldCggckRzdCApOyAvLyBQb3RlbnRpYWwgbW92ZSB0byBhIG5ldyB0cmVlCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBDVVJTT1IgOgotICAgICAgICAgICAgICAgICAgICBnLnNldCggbGFzdCwgMCApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZW1vdmUgdGhlIHNwbGF5cyBhbmQgdGhlIHRleHQuICBVbmZvcnR1bmF0ZWx5LCBJIG5lZWQgdG8gcmVtb3ZlCi0gICAgICAgIC8vIHRoZSB0ZXh0IGhlcmUuICBJIGNhbid0IHRoaW5rIG9mIGEgd2F5IHRvIGtlZXAgdGhlIHRyZWUgdmFsaWQgYW5kCi0gICAgICAgIC8vIGhhdmUgdGhlIHRleHQgbW92ZWQgaW4gb25lIGNvcHkgLi4uLiBDYW4geW91PwotCi0gICAgICAgIFNwbGF5IHNSZW1vdmVkID0gci5yZW1vdmVTcGxheXMoIHRoaXMsIGxhc3QgKTsKLQotICAgICAgICBTcGxheSBmaXJzdCA9Ci0gICAgICAgICAgICBzUmVtb3ZlZC5fbGVmdFNwbGF5ID09IG51bGwgPyBzUmVtb3ZlZCA6IHNSZW1vdmVkLl9sZWZ0U3BsYXk7Ci0KLSAgICAgICAgaWYgKGZpcnN0LmlzQmVnaW4oKSkKLSAgICAgICAgICAgICgoQmVnaW4pIGZpcnN0KS5fY29udGFpbmVyID0gbnVsbDsKLQotICAgICAgICBjaGFyW10gdGV4dFJlbW92ZWQgPSByRHN0ID09IG51bGwgfHwgY2NoID09IDAgPyBudWxsIDogbmV3IGNoYXIgWyBjY2ggXTsKLQotICAgICAgICByLl90ZXh0LnJlbW92ZSggY3AsIGNjaCwgdGV4dFJlbW92ZWQsIDAgKTsKLQotICAgICAgICByLmludmFsaWRhdGVWZXJzaW9uKCk7Ci0KLSAgICAgICAgaWYgKHJEc3QgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgc0RzdC5pbnNlcnQoCi0gICAgICAgICAgICAgICAgckRzdCwgcERzdCwgc1JlbW92ZWQsIHRleHRSZW1vdmVkLCAwLCBjY2gsIGludmFsaWRhdGUgKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpbnZhbGlkYXRlKQotICAgICAgICB7Ci0gICAgICAgICAgICBUeXBlIHBhcmVudFR5cGUgPSBjb250YWluZXIucGVla1R5cGUoKTsKLQotICAgICAgICAgICAgaWYgKHBhcmVudFR5cGUgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNCZWdpbigpKQotICAgICAgICAgICAgICAgICAgICBwYXJlbnRUeXBlLmludmFsaWRhdGVFbGVtZW50KCBjb250YWluZXIsIGxhc3QgKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0F0dHIoKSAmJiBpc1hzaU5pbCgpKQotICAgICAgICAgICAgICAgICAgICBwYXJlbnRUeXBlLmludmFsaWRhdGVOaWwoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGFzc2VydCByLnZhbGlkYXRlKCk7Ci0gICAgICAgIGFzc2VydCByRHN0ID09IG51bGwgfHwgckRzdC52YWxpZGF0ZSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlbW92ZXMgdGhpcyBzcGxheSwgYWxsIG9mIGl0cyBjb250ZW50IGFuZCBhdHRyaWJ1dGVzLgotICAgICAqLwotCi0gICAgZmluYWwgdm9pZCByZW1vdmUgKCBSb290IHIsIGJvb2xlYW4gaW52YWxpZGF0ZSApCi0gICAgewotICAgICAgICBtb3ZlKCByLCBudWxsLCBudWxsLCAwLCBpbnZhbGlkYXRlICk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBmaW5hbCB2b2lkIGNvbXBsYWluICggU3RyaW5nIG1zZyApCi0gICAgewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCBtc2cgKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDaGVjayB0byBpZiB0aGUgaW5zZXJ0aW9uIG9mIGEgIm5vZGUiIGludG8gdGhlIGRlc3RpbmF0aW9uIGlzIGFsbG93ZWQuCi0gICAgICogVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHNvdXJjZSBpcyBhIHNpbmdsZSBwaWVjZSBvZiBjb250ZW50cyAobGlrZSBhIG5vZGUpLgotICAgICAqIEZyYWdtZW50cyBhcmUgc3RyaW5ncyBvZiBjb250ZW50LCBub3QgY29udGFpbmVkLCBhbmQgbXVzdCBub3QgYmUKLSAgICAgKiB2YWxpZGF0ZWQgYnkgdGhpcyBmdW5jdGlvbi4KLSAgICAgKgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3JjIHRvIGNvcHkgaXMgY2hhcmFjdGVycyAocG90ZW50aWFsbHkgMCBjaGFycyB0b28pCi0gICAgICovCi0KLSAgICBmaW5hbCBib29sZWFuIGNoZWNrSW5zZXJ0aW9uVmFsaWRpdHkgKAotICAgICAgICBpbnQgcCwgU3BsYXkgc0RzdCwgaW50IHBEc3QsIGJvb2xlYW4gZW5kT2sgKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IHAgPj0gMDsKLSAgICAgICAgYXNzZXJ0IHAgPCBnZXRFbmRQb3MoKTsKLSAgICAgICAgYXNzZXJ0IHBEc3QgPj0gMDsKLSAgICAgICAgYXNzZXJ0IHBEc3QgPCBzRHN0LmdldEVuZFBvcygpOwotCi0gICAgICAgIGJvb2xlYW4gc3JjQ2hhcnMgPSBmYWxzZTsKLQotICAgICAgICBpZiAocCA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghZW5kT2sgJiYgaXNMZWFmKCkgJiYgcCA9PSBnZXRQb3NMZWFmRW5kKCkpCi0gICAgICAgICAgICAgICAgY29tcGxhaW4oICJDYW4ndCBtb3ZlL2NvcHkvaW5zZXJ0IGFuIGVuZCB0b2tlbi4iICk7Ci0KLSAgICAgICAgICAgIHNyY0NoYXJzID0gdHJ1ZTsKLQotICAgICAgICAgICAgLy8gdmFsaWQgdGV4dCB0YXJnZXQgd2lsbCBiZSB0ZXN0ZWQgZm9yIGZ1cnRoZXIgZG93bgotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzRG9jKCkpCi0gICAgICAgICAgICAgICAgY29tcGxhaW4oICJDYW4ndCBtb3ZlL2NvcHkvaW5zZXJ0IGEgd2hvbGUgZG9jdW1lbnQuIiApOwotCi0gICAgICAgICAgICBpZiAoaXNGaW5pc2goKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWVuZE9rKQotICAgICAgICAgICAgICAgICAgICBjb21wbGFpbiggIkNhbid0IG1vdmUvY29weS9pbnNlcnQgYW4gZW5kIHRva2VuLiIgKTsKLQotICAgICAgICAgICAgICAgIHNyY0NoYXJzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGlzRnJhZ21lbnQoKSkKLSAgICAgICAgICAgICAgICBzcmNDaGFycyA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocERzdCA9PSAwICYmIHNEc3QuaXNEb2MoKSkKLSAgICAgICAgICAgIGNvbXBsYWluKCAiQ2FuJ3QgaW5zZXJ0IGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIGRvY3VtZW50LiIgKTsKLQotICAgICAgICBpZiAocCA+IDAgJiYgc0RzdC5pc0F0dHIoKSkKLSAgICAgICAgICAgIGNvbXBsYWluKCAiQ2FuJ3QgaW5zZXJ0IHRleHQgYmVmb3JlIGFuIGF0dHJpYnV0ZS4iICk7Ci0KLSAgICAgICAgaWYgKGlzQXR0cigpICYmIHBEc3QgPiAwICYmICghc0RzdC5pc0NvbnRhaW5lcigpIHx8IHBEc3QgIT0gMSkpCi0gICAgICAgICAgICBjb21wbGFpbiggIkNhbid0IGluc2VydCBhbiBhdHRyaWJ1dGUgaW4gdGV4dC4iICk7Ci0KLSAgICAgICAgaWYgKHAgPD0gMCAmJiBwRHN0IDw9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc0F0dHIoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sZWFuIGlzT2sgPSBzRHN0LmlzQXR0cigpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFpc09rKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3BsYXkgdCA9IHNEc3QucHJldk5vbkF0dHJTcGxheSgpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICh0LmlzQ29udGFpbmVyKCkgJiYgdC5nZXRDY2hBZnRlcigpID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBpc09rID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWlzT2spCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb21wbGFpbigKLSAgICAgICAgICAgICAgICAgICAgICAgICJDYW4gb25seSBtb3ZlL2NvcHkvaW5zZXJ0IGF0dHJpYnV0ZSBhZnRlciBhbm90aGVyICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAiYXR0cmlidXRlIG9yIHN0YXJ0IHRva2VuLiIgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChzRHN0LmlzQXR0cigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbXBsYWluKAotICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgbW92ZS9jb3B5L2luc2VydCBhIG5vbi1hdHRyaWJ1dGUgYmVmb3JlICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgImFuIGF0dHJpYnV0ZS4iICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gc3JjQ2hhcnM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW5zZXJ0IGluIHRoaXMgc3BsYXkgYXQgcG9zaXRpb24gcCB3aG9zZSByb290IGlzIHIgdGhlIHNwbGF5cyByb290SW5zZXJ0Ci0gICAgICogd2l0aCB0ZXh0IHR4dCBhdCBvZmZzZXQgY3BUeHQgYW5kIGxlbmd0aCBjY2hUeHQKLSAgICAgKi8KLQotICAgIGZpbmFsIHZvaWQgaW5zZXJ0ICgKLSAgICAgICAgUm9vdCByLCBpbnQgcCwgU3BsYXkgcm9vdEluc2VydCwKLSAgICAgICAgT2JqZWN0IHR4dCwgaW50IG9mZlR4dCwgaW50IGNjaFR4dCwKLSAgICAgICAgYm9vbGVhbiBpbnZhbGlkYXRlICkKLSAgICB7Ci0vLyBCVUdCVUcgLSB3aGF0IGlzIGEgbmV3IHhzaXR5cGUgYXR0ciBpcyBpbnNlcnRlZD8gLS0gbXVzdCBkaXNjb25uZWN0IHR5cGVzCi0KLSAgICAgICAgYXNzZXJ0IHAgPCBnZXRFbmRQb3MoKTsKLSAgICAgICAgYXNzZXJ0IGNjaFR4dCA+PSAwOwotICAgICAgICBhc3NlcnQgcm9vdEluc2VydCAhPSBudWxsOwotICAgICAgICBhc3NlcnQgcm9vdEluc2VydC5fcGFyZW50U3BsYXkgPT0gbnVsbDsKLSAgICAgICAgYXNzZXJ0IHJvb3RJbnNlcnQuZ2V0Q2NoTGVmdCgpICsgcm9vdEluc2VydC5nZXRDY2goKSA9PSBjY2hUeHQ7Ci0KLSAgICAgICAgLy8gV2UgYXJlIGluc2VydGluZyBhIHRyZWUgaGVyZS4gIEdldCB0aGUgZmlyc3Qgc3BsYXkgaW4gdGhlIHRyZWUKLSAgICAgICAgLy8gSXQgbXVzdCBlaXRoZXIgYmUgYXQgdGhlIHJvb3Qgb3IganVzdCB0byB0aGUgbGVmdCBvZiB0aGUgcm9vdC4KLSAgICAgICAgLy8gVGhpcyBpcyB0aGUgImNsYXNzaWMiIGRvZyBsZWcgcGF0dGVybiBJIHVzZSB0byBwYXNzIHNwbGF5IHRyZWVzLgotCi0gICAgICAgIGFzc2VydAotICAgICAgICAgICAgcm9vdEluc2VydC5fbGVmdFNwbGF5ID09IG51bGwgfHwKLSAgICAgICAgICAgICAgICByb290SW5zZXJ0Ll9sZWZ0U3BsYXkuX2xlZnRTcGxheSA9PSBudWxsOwotCi0gICAgICAgIHIuc3RhcnRDaGFuZ2UoKTsKLQotICAgICAgICBTcGxheSBzSW5zZXJ0ID0KLSAgICAgICAgICAgIHJvb3RJbnNlcnQuX2xlZnRTcGxheSA9PSBudWxsID8gcm9vdEluc2VydCA6IHJvb3RJbnNlcnQuX2xlZnRTcGxheTsKLQotICAgICAgICBhc3NlcnQgIXNJbnNlcnQuaXNEb2MoKSAmJiAhc0luc2VydC5pc0ZpbmlzaCgpOwotICAgICAgICBhc3NlcnQgUm9vdC5kdiA+IDAgfHwgZ2V0Um9vdFNsb3coKSA9PSByOwotCi0gICAgICAgIC8vIFdoZW4gdGhpcyBtZW1iZXIgaXMgY2FsbGVkLCB3ZSBiZXR0ZXIgYmUgYWJsZSB0byBkbyB0aGUgaW5zZXJ0LgotCi0gICAgICAgIGFzc2VydCB0cnVlIHx8IHNJbnNlcnQuY2hlY2tJbnNlcnRpb25WYWxpZGl0eSggMCwgdGhpcywgcCwgZmFsc2UgKTsKLQotICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIGZyYWdtZW50LCB0aGVyZSBiZXR0ZXIgYmUgdGV4dCBpbiBpdAotCi0gICAgICAgIGFzc2VydCAhc0luc2VydC5pc0ZyYWdtZW50KCkgfHwgc0luc2VydC5nZXRDY2goKSA+IDA7Ci0KLSAgICAgICAgLy8KLQotICAgICAgICBTcGxheSBzID0gdGhpczsKLQotICAgICAgICBhc3NlcnQgUm9vdC5kdiA+IDAgfHwgc0luc2VydC5nZXRSb290U2xvdygpID09IG51bGw7Ci0KLSAgICAgICAgU3BsYXkgc09yaWcgPSBudWxsOwotICAgICAgICBpbnQgICBwT3JpZyA9IDA7Ci0gICAgICAgIGludCAgIGNjaEJ5cGFzc2VkID0gMDsKLQotICAgICAgICAvLyBQcmVwYXJlIGZvciBpbnNlcnRpbmcgaW50byB0aGUgbWlkZGxlIG9mIGEgc3BsYXkKLQotICAgICAgICBpZiAocCA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBwbGU7Ci0KLSAgICAgICAgICAgIGlmIChzLmlzTGVhZigpICYmIHAgPD0gKHBsZSA9IHMuZ2V0UG9zTGVhZkVuZCgpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAocy5pc0ludmFsaWQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydCBwbGUgPT0gMTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHAgPT0gMTsKLQotICAgICAgICAgICAgICAgICAgICBpbnQgY2NoVmFsaWQgPSBzLmVuc3VyZUNvbnRlbnRWYWxpZCgpOwotCi0gICAgICAgICAgICAgICAgICAgIHAgKz0gY2NoVmFsaWQ7Ci0gICAgICAgICAgICAgICAgICAgIHBsZSArPSBjY2hWYWxpZDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBhc3NlcnQgcy5nZXRGaW5pc2hTcGxheSgpID09IHM7Ci0KLSAgICAgICAgICAgICAgICBkZWZvbGlhdGUoIHIgKTsKLQotICAgICAgICAgICAgICAgIGFzc2VydCBzLmdldEZpbmlzaFNwbGF5KCkgIT0gczsKLQotICAgICAgICAgICAgICAgIGlmIChwID09IHBsZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHMgPSBnZXRGaW5pc2hTcGxheSgpOwotICAgICAgICAgICAgICAgICAgICBwID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzLmluc2VydCggciwgcCwgcm9vdEluc2VydCwgdHh0LCBvZmZUeHQsIGNjaFR4dCwgaW52YWxpZGF0ZSApOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBZb3UgY2FuIGNvcHkgYW4gYXR0ciB0byBhIGRzdCB3aGVyZSBpdCBpcyB0aGUgZmlyc3QgYXR0ciwgb3IKLSAgICAgICAgICAgIC8vIGFmdGVyIGFsbCBwcmUtZXhpc2l0bmcgYXR0cnMuICBUaGlzIHRoZXNlIGNhc2VzLCBwID09IDEgb24KLSAgICAgICAgICAgIC8vIHRoZSBiZWdpbi4gIEluIHRoaXMgY2FzZSwgdGhlcmUgaXMgbm8gbmVlZCB0byBtb3ZlIHRleHQgbGF0ZXIuCi0KLSAgICAgICAgICAgIGFzc2VydCAhc0luc2VydC5pc0F0dHIoKSB8fCAocCA9PSAxICYmIHMuaXNDb250YWluZXIoKSk7Ci0KLSAgICAgICAgICAgIHNPcmlnID0gczsKLSAgICAgICAgICAgIHBPcmlnID0gcDsKLSAgICAgICAgICAgIGNjaEJ5cGFzc2VkID0gZ2V0RW5kUG9zKCkgLSBwOwotCi0gICAgICAgICAgICBzID0gcy5uZXh0Tm9uQXR0clNwbGF5KCk7Ci0gICAgICAgICAgICBwID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIGFzc2VydCBwID09IDA7Ci0gICAgICAgIGFzc2VydCAhcy5pc0RvYygpOwotCi0gICAgICAgIC8vIEdldCB0aGUgY29udGFpbmVyIHJlY2VpdmluZyBhbGwgb2YgdGhpcwotCi0gICAgICAgIENvbnRhaW5lciBjID0gcy5nZXRDb250YWluZXIoKTsKLQotICAgICAgICAvLyBSdW4gb3ZlciB0aGUgdG9wIGxldmVsIGNvbnRlbnQsIHBhcmVudGluZyBhbnkgQkVHSU5TLiAgQWxzbywKLSAgICAgICAgLy8gY2hhcmFjdGVyaXplIHRoZSBjb250ZW50IGJlaW5nIGluc2VydGVkIGZvciBmdXR1cmUgaW52YWxpZGF0aW9uLgotICAgICAgICAvLyBPbmx5IGZyYWdtZW50cyB3aWxsIGhhdmUgbXVsdGlwbGUgdG9wIGxldmVsIGJlZ2lucy4KLQotICAgICAgICBib29sZWFuIGluc2VydGluZ0VsZW1lbnRzID0gZmFsc2U7Ci0gICAgICAgIGJvb2xlYW4gaW5zZXJ0aW5nVGV4dCA9IGZhbHNlOwotICAgICAgICBib29sZWFuIGluc2VydGluZ05pbEF0dHIgPSBmYWxzZTsKLSAgICAgICAgU3BsYXkgICBpbnNlcnRpbmdGcmFnbWVudCA9IG51bGw7Ci0KLSAgICAgICAgZm9yICggU3BsYXkgdCA9IHNJbnNlcnQgOyB0ICE9IG51bGwgOyB0ID0gdC5uZXh0U3BsYXkoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0LmlzQmVnaW4oKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnNlcnRpbmdFbGVtZW50cyA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICBCZWdpbiBiID0gKEJlZ2luKSB0OwotCi0gICAgICAgICAgICAgICAgYXNzZXJ0IGIuX2NvbnRhaW5lciA9PSBudWxsOwotCi0gICAgICAgICAgICAgICAgYi5fY29udGFpbmVyID0gYzsKLQotICAgICAgICAgICAgICAgIHQgPSB0LmdldEZpbmlzaFNwbGF5KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh0LmlzRnJhZ21lbnQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQgaW5zZXJ0aW5nRnJhZ21lbnQgPT0gbnVsbDsKLSAgICAgICAgICAgICAgICBpbnNlcnRpbmdGcmFnbWVudCA9IHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0LmlzWHNpTmlsKCkpCi0gICAgICAgICAgICAgICAgaW5zZXJ0aW5nTmlsQXR0ciA9IHRydWU7Ci0KLSAgICAgICAgICAgIGlmICh0LmdldENjaEFmdGVyKCkgPiAwKQotICAgICAgICAgICAgICAgIGluc2VydGluZ1RleHQgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTm93LCBpbnNlcnQgdGhlIHRleHQgKGlmIGFueSkKLQotICAgICAgICByLl90ZXh0Lmluc2VydCggci5nZXRDcCggcyApLCB0eHQsIG9mZlR4dCwgY2NoVHh0ICk7Ci0KLSAgICAgICAgLy8gSW5zZXJ0IHRoZSB0cmVlCi0KLSAgICAgICAgci5pbnNlcnRTcGxheSggcm9vdEluc2VydCwgcy5wcmV2U3BsYXkoKSApOwotCi0gICAgICAgIC8vIElmIHRoZSBmaXJzdCBzcGxheSB0byBpc25lcnQgd2FzIGEgZnJhZ21lbnQsIHJlbW92ZSBpdCwgbGVhdmluZwotICAgICAgICAvLyB0aGUgdGV4dCBpdCBjYXJyaWVkIGluIHRoZSB0cmVlLiAgRG9uJ3QgcGVyZm9ybSBpbnZhbGlkYXRpb24uCi0KLSAgICAgICAgaWYgKGluc2VydGluZ0ZyYWdtZW50ICE9IG51bGwpCi0gICAgICAgICAgICBpbnNlcnRpbmdGcmFnbWVudC5yZW1vdmUoIHIsIGZhbHNlICk7Ci0KLSAgICAgICAgLy8gSW52YWxpZGF0ZSB0aGUgcGFyZW50IGlmIHJlcXVlc3RlZAotCi0gICAgICAgIGlmIChpbnZhbGlkYXRlKQotICAgICAgICB7Ci0gICAgICAgICAgICBUeXBlIGNUeXBlID0gYy5wZWVrVHlwZSgpOwotCi0gICAgICAgICAgICBpZiAoY1R5cGUgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0aW5nRWxlbWVudHMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjVHlwZS5pbnZhbGlkYXRlRWxlbWVudCggYywgcyApOwotICAgICAgICAgICAgICAgICAgICBpbnNlcnRpbmdUZXh0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0aW5nVGV4dCkKLSAgICAgICAgICAgICAgICAgICAgY1R5cGUuaW52YWxpZGF0ZVRleHQoKTsKLQotICAgICAgICAgICAgICAgIGlmIChpbnNlcnRpbmdOaWxBdHRyKQotICAgICAgICAgICAgICAgICAgICBjVHlwZS5pbnZhbGlkYXRlTmlsKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0aGVyZSBpcyBwb3N0IHRleHQgdG8gbW92ZSwgbW92ZSBpdCB0byB0aGUgZW5kIG9mIHRoZSBzdHVmZgotICAgICAgICAvLyBpbnNlcnRlZC4gIERvbid0IGRvIHRoaXMgaXMgaWYgYW4gYXR0ciB3YXMgaW5zZXJ0ZWQgYmVjYXVzZSBpbiB0aGlzCi0gICAgICAgIC8vIGNhc2UsIHRoZSBhdHRyIGlzIGxvZ2ljYWxseSBhZnRlciB0aGUgdGV4dCB0byBiZSBtb3ZlZCBhbnl3YXlzLgotCi0gICAgICAgIGlmIChzT3JpZyAhPSBudWxsICYmICFzSW5zZXJ0LmlzQXR0cigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgY2NoTW92ZWQgPSBzT3JpZy5tb3ZlQ2hhcnMoIHIsIHBPcmlnLCAtMSwgciwgcywgMCwgdHJ1ZSApOwotICAgICAgICAgICAgYXNzZXJ0IGNjaE1vdmVkID4gMDsKLSAgICAgICAgICAgIGFzc2VydCBjY2hNb3ZlZCA9PSBjY2hCeXBhc3NlZDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGJ1aWxkIGEgbGVhZiBpZiBwb3NzaWJsZQotCi0gICAgICAgIGlmIChzLmlzRW5kKCkgJiYgcy5nZXRDb250YWluZXIoKS5uZXh0Tm9uQXR0clNwbGF5KCkgPT0gcykKLSAgICAgICAgICAgIHMuZ2V0Q29udGFpbmVyKCkuZm9saWF0ZSggciApOwotCi0gICAgICAgIHIuaW52YWxpZGF0ZVZlcnNpb24oKTsKLQotICAgICAgICBhc3NlcnQgci52YWxpZGF0ZSgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlcGxhY2VzIHRoZSBjb250ZW50cyBvZiB0aGlzIChhdHRyaWJ1dGVzIGFzIHdlbGwpIHdpdGggYSBjb3B5IG9mIHRoZQotICAgICAqIGNvbnRlbnRzIG9mIHNTcmMuICBJZiBwcmVzZXJ2ZVR5cGUgaXMgdHJ1ZSwgdGhlbiB0aGUgeHNpOnR5cGUgYXR0cgotICAgICAqIG9mIHRoZSBzb3VyY2UgaXMgbm90IGNvcGllZCwgYW5kIHRoZSB4c2k6dHlwZSBvZiB0aGUgdGFyZ2V0ICh0aGlzKQotICAgICAqIGlzIG5vdCBhbHRlcmVkLgotICAgICAqLwotCi0gICAgZmluYWwgdm9pZCByZXBsYWNlQ29udGVudHMgKAotICAgICAgICBSb290IHIsIFNwbGF5IHNTcmMsIFJvb3QgclNyYywKLSAgICAgICAgYm9vbGVhbiBwcmVzZXJ2ZVR5cGUsIGJvb2xlYW4gcHJlc2VydmVOYW1lc3BhY2VzICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCAhaXNGaW5pc2goKSAmJiAhc1NyYy5pc0ZpbmlzaCgpOwotICAgICAgICBhc3NlcnQgUm9vdC5kdiA+IDAgfHwgZ2V0Um9vdFNsb3coKSA9PSByOwotICAgICAgICBhc3NlcnQgUm9vdC5kdiA+IDAgfHwgc1NyYy5nZXRSb290U2xvdygpID09IHJTcmM7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHNyYyBhbmQgZHN0IGFyZSB0aGUgc2FtZSBzcGxheSwgdGhlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGRvCi0KLSAgICAgICAgaWYgKHRoaXMgPT0gc1NyYykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBJZiB3ZSBhcmUgdG8gcHJlc2VydmUgbmFtZXNwYWNlIG1hcHBpbmdzLCBtYWtlIGEgY29weSBvZiB0aGUKLSAgICAgICAgLy8gbmFtc3BhY2VzIGluIHNjb3BlIGhlcmUKLQotICAgICAgICBNYXAgc291cmNlTmFtZXNwYWNlcyA9Ci0gICAgICAgICAgICBwcmVzZXJ2ZU5hbWVzcGFjZXMgPyBzU3JjLmxvb2t1cEFsbFByZWZpeE1hcHBpbmdzKCkgOiBudWxsOwotCi0gICAgICAgIC8vIElmIHRoZSBkZXN0aW5hdGlvbiBpcyBhIHNpbXBsZSBjb250YWluZXIgb2YgdGV4dCwgdGhlbiB0aGUgY29udGVudAotICAgICAgICAvLyBtb2RlbCBpcyBsaW1pdGVkIHRvIHRleHQuICBIYW5kbGUgdGhpcyBzcGVjaWFsbHkuCi0KLSAgICAgICAgaWYgKGlzQXR0cigpIHx8IGlzQ29tbWVudCgpIHx8IGlzUHJvY2luc3QoKSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gVE9ETyAtIERvIHRoaXMgd2l0aG91dCBjcmVhdGluZyBhIHN0cmluZz8KLSAgICAgICAgICAgIFN0cmluZyBzdHIgPSBzU3JjLmdldFRleHQoIHJTcmMgKTsKLSAgICAgICAgICAgIHNldFRleHQoIHIsIHN0ciwgMCwgc3RyLmxlbmd0aCgpICk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBObyBuZWVkIHRvIHN0YXJ0Q2hhbmdlKCkgaGVyZSwgZmNucyBJIGNhbGwgd2lsbCBkbyBpdCBmb3IgbWUKLQotICAgICAgICAgICAgYXNzZXJ0IGlzQ29udGFpbmVyKCk7Ci0KLSAgICAgICAgICAgIC8vIE1ha2UgY29weSBvZiBzb3VyY2UKLQotICAgICAgICAgICAgQ29weUNvbnRleHQgY29weUNvbnRleHQgPSBzU3JjLmNvcHlTcGxheUNvbnRlbnRzKCByU3JjICk7Ci0KLSAgICAgICAgICAgIC8vIElmIHdlIG5lZWQgdG8gcHJlc2VydmUgdGhlIHhzaTp0eXBlIGF0dHJpYnV0ZSwgdGhlbiBmZXRjaCBpdC4KLSAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUsIHRoZSBmaXJzdCBvbmUgd2lucy4KLQotICAgICAgICAgICAgU3RyaW5nIHRhcmdldFhzaVR5cGUgPSBudWxsOwotCi0gICAgICAgICAgICBpZiAocHJlc2VydmVUeXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoIFNwbGF5IHMgPSBuZXh0U3BsYXkoKSA7IHMuaXNBdHRyKCkgOyBzID0gcy5uZXh0U3BsYXkoKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAocy5pc1hzaVR5cGUoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0WHNpVHlwZSA9IHMuZ2V0VGV4dCggciApOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEJlY2F1c2UgSSBoYXZlIHJlbW92ZWQgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgdGFyZ2V0LCBJIGNhbgotICAgICAgICAgICAgLy8gaW5zZXJ0IGZyYWdtZW50IG9yIG5vZGUuCi0KLSAgICAgICAgICAgIHJlbW92ZUNvbnRlbnQoIHIsIHRydWUgKTsKLQotICAgICAgICAgICAgYXNzZXJ0IGlzTGVhZigpIHx8IGdldEZpbmlzaFNwbGF5KCkgPT0gbmV4dFNwbGF5KCk7Ci0gICAgICAgICAgICBhc3NlcnQgZ2V0Q2NoVmFsdWUoKSA9PSAwOwotCi0gICAgICAgICAgICBTcGxheSBjb3B5ID0gY29weUNvbnRleHQuZ2V0VHJlZSgpOwotCi0gICAgICAgICAgICBpZiAoY29weSAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gY29tcHV0ZSBhIG5vcm1hbGl6ZWQgc3BsYXkvcG9zIHRvIGluc2VydCBhdC4gIE9ubHkKLSAgICAgICAgICAgICAgICAvLyB0d28gY2FzZXMsIGVpdGhlciB3ZSdyZSBpbnNlcnRpbmcgaW4gYSBsZWFmIG9yIGEKLSAgICAgICAgICAgICAgICAvLyBjb250YWluZXIvZmluaXNoIHBhaXIuCi0KLSAgICAgICAgICAgICAgICBTcGxheSBpbnNlcnRTcGxheSA9IHRoaXM7Ci0gICAgICAgICAgICAgICAgaW50IGluc2VydFBvcyA9IDE7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWlzTGVhZigpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW5zZXJ0U3BsYXkgPSBuZXh0U3BsYXkoKTsKLSAgICAgICAgICAgICAgICAgICAgaW5zZXJ0UG9zID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjaGFyW10gdGV4dENvcHkgPSBjb3B5Q29udGV4dC5nZXRUZXh0KCk7Ci0KLSAgICAgICAgICAgICAgICBpbnNlcnRTcGxheS5pbnNlcnQoCi0gICAgICAgICAgICAgICAgICAgIHIsIGluc2VydFBvcywgY29weSwKLSAgICAgICAgICAgICAgICAgICAgdGV4dENvcHksIDAsIHRleHRDb3B5ID09IG51bGwgPyAwIDogdGV4dENvcHkubGVuZ3RoLCB0cnVlICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBOb3csIGdvIHRob3J1Z2ggYWxsIHRoZSBhdHRycywgcmVtb3ZpbmcgdHlwZXMgYW5kIHBsYWNlIHRoZQotICAgICAgICAgICAgICAgIC8vIG9yaWdpbmFsIGJhY2sgaW4uCi0KLSAgICAgICAgICAgICAgICBpZiAocHJlc2VydmVUeXBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3BsYXkgbmV4dCA9IG5leHRTcGxheSgpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoIFNwbGF5IHMgPSBuZXh0IDsgcy5pc0F0dHIoKSA7IHMgPSBuZXh0ICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHMubmV4dFNwbGF5KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzLmlzWHNpVHlwZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMucmVtb3ZlKCByLCB0cnVlICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0WHNpVHlwZSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBdHRyIGEgPSBuZXcgQXR0ciggX3hzaVR5cGUgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNjaFR5cGUgPSB0YXJnZXRYc2lUeXBlLmxlbmd0aCgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBhLmFkanVzdENjaCggY2NoVHlwZSApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0RW5kUG9zKCkgPiAxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydCggciwgMSwgYSwgdGFyZ2V0WHNpVHlwZSwgMCwgY2NoVHlwZSwgdHJ1ZSApOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHROb25BdHRyU3BsYXkoKS5pbnNlcnQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIsIDAsIGEsIHRhcmdldFhzaVR5cGUsIDAsIGNjaFR5cGUsIHRydWUgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzb3VyY2VOYW1lc3BhY2VzICE9IG51bGwpCi0gICAgICAgICAgICBhcHBseU5hbWVzcGFjZXMoIHIsIHNvdXJjZU5hbWVzcGFjZXMgKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZmluYWwgY2xhc3MgQ29weUNvbnRleHQKLSAgICB7Ci0gICAgICAgIHZvaWQgY29weVRleHQgKCBjaGFyW10gdGV4dCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIF90ZXh0ID0gdGV4dDsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgY29weVNwbGF5ICggU3BsYXkgcywgYm9vbGVhbiBjb3B5VGV4dEFmdGVyICkKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0ICFzLmlzRG9jKCkgJiYgIXMuaXNSb290KCk7Ci0KLSAgICAgICAgICAgIFNwbGF5IHQ7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoIHMuZ2V0S2luZCgpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgQkVHSU4gOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHMuZW5zdXJlQ29udGVudFZhbGlkKCk7Ci0KLSAgICAgICAgICAgICAgICB0ID0gX2Zyb250aWVyID0gbmV3IEJlZ2luKCBzLmdldE5hbWUoKSwgX2Zyb250aWVyICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAocy5pc0xlYWYoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHQudG9nZ2xlSXNMZWFmKCk7Ci0gICAgICAgICAgICAgICAgICAgIF9mcm9udGllciA9IF9mcm9udGllci5nZXRDb250YWluZXIoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgQVRUUiA6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHMuaXNYbWxucygpKQotICAgICAgICAgICAgICAgICAgICB0ID0gbmV3IFhtbG5zKCBzLmdldE5hbWUoKSApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHMuZW5zdXJlVmFsdWVWYWxpZCgpOwotICAgICAgICAgICAgICAgICAgICB0ID0gbmV3IEF0dHIoIHMuZ2V0TmFtZSgpICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBDT01NRU5UIDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0ID0gbmV3IENvbW1lbnQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgUFJPQ0lOU1QgOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHQgPSBuZXcgUHJvY2luc3QoIHMuZ2V0TmFtZSgpICk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIEVORCA6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQmVnaW4gYiA9IChCZWdpbikgX2Zyb250aWVyOwotICAgICAgICAgICAgICAgIHQgPSBiLl9lbmQgPSBuZXcgRW5kKCBiICk7Ci0gICAgICAgICAgICAgICAgX2Zyb250aWVyID0gX2Zyb250aWVyLmdldENvbnRhaW5lcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdCA6Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhc3NlcnQgcy5pc1ZhbGlkKCk7Ci0KLSAgICAgICAgICAgIGludCBjY2ggPSBzLmdldENjaFZhbHVlKCk7Ci0KLSAgICAgICAgICAgIGlmIChjb3B5VGV4dEFmdGVyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBjY2hBZnRlciA9IHMuZ2V0Q2NoQWZ0ZXIoKTsKLSAgICAgICAgICAgICAgICBjY2ggKz0gY2NoQWZ0ZXI7Ci0gICAgICAgICAgICAgICAgdC5hZGp1c3RDY2hBZnRlciggY2NoQWZ0ZXIgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGNjaCA+IDApCi0gICAgICAgICAgICAgICAgdC5hZGp1c3RDY2goIGNjaCApOwotCi0gICAgICAgICAgICBjb3B5KCB0ICk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKioKLSAgICAgICAgICogTWF5IGJlIGNhbGxlZCBvbmNlIGJlZm9yZSBhbnkgb3RoZXIgY29weQotICAgICAgICAgKi8KLQotICAgICAgICB2b2lkIGNvcHlGcmFnbWVudCAoIGludCBjY2ggKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgY2NoID4gMDsKLQotICAgICAgICAgICAgU3BsYXkgcyA9IG5ldyBGcmFnbWVudCgpOwotCi0gICAgICAgICAgICBzLmFkanVzdENjaEFmdGVyKCBjY2ggKTsKLSAgICAgICAgICAgIHMuYWRqdXN0Q2NoKCBjY2ggKTsKLQotICAgICAgICAgICAgY29weSggcyApOwotICAgICAgICB9Ci0KLSAgICAgICAgU3BsYXkgZ2V0VHJlZSAoICkKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0IF9mcm9udGllciA9PSBudWxsOwotCi0gICAgICAgICAgICBpZiAoX2xhc3QgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAgICAgaWYgKF9maXJzdCAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9sYXN0LmFkanVzdENjaExlZnQoIF9maXJzdC5nZXRDY2hMZWZ0KCkgKyBfZmlyc3QuZ2V0Q2NoKCkgKTsKLQotICAgICAgICAgICAgICAgIF9sYXN0LmFkanVzdENkb2NCZWdpbkxlZnQoCi0gICAgICAgICAgICAgICAgICAgIF9maXJzdC5nZXRDZG9jQmVnaW5MZWZ0KCkgKyBfZmlyc3QuZ2V0Q2RvY0JlZ2luKCkgKTsKLQotICAgICAgICAgICAgICAgIF9sYXN0Ll9sZWZ0U3BsYXkgPSBfZmlyc3Q7Ci0gICAgICAgICAgICAgICAgX2ZpcnN0Ll9wYXJlbnRTcGxheSA9IF9sYXN0OwotCi0gICAgICAgICAgICAgICAgaWYgKF90YWlsICE9IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBfbGFzdC5hZGp1c3RDY2hMZWZ0KCBfdGFpbC5nZXRDY2hMZWZ0KCkgKyBfdGFpbC5nZXRDY2goKSApOwotCi0gICAgICAgICAgICAgICAgICAgIF9sYXN0LmFkanVzdENkb2NCZWdpbkxlZnQoCi0gICAgICAgICAgICAgICAgICAgICAgICBfdGFpbC5nZXRDZG9jQmVnaW5MZWZ0KCkgKyBfdGFpbC5nZXRDZG9jQmVnaW4oKSApOwotCi0gICAgICAgICAgICAgICAgICAgIF9maXJzdC5fcmlnaHRTcGxheSA9IF90YWlsOwotICAgICAgICAgICAgICAgICAgICBfdGFpbC5fcGFyZW50U3BsYXkgPSBfZmlyc3Q7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gX2xhc3Q7Ci0gICAgICAgIH0KLQotICAgICAgICBjaGFyW10gZ2V0VGV4dCAoICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIF90ZXh0OwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGNvcHkgKCBTcGxheSBzICkKLSAgICAgICAgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEhlcmUgSSBtYWtlIHN1cmUgdGhhdCB0aGUgc3RydWN0dXJlIG9mIHRoZSBzcGxheSB0cmVlIHJldHVybmVkCi0gICAgICAgICAgICAvLyBieSB0aGUgY29weSBpcyBzdWNoIHRoYXQgdGhlIGxhc3Qgc3BsYXkgY29waWVkIGlzIGF0IHRoZSByb290LAotICAgICAgICAgICAgLy8gdGhlIGZpcnN0IHNwbGF5IGNvcGllZCBpcyB0aGUgbGVmdCBjaGlsZCBvZiB0aGUgbGFzdCBjb3BpZWQsCi0gICAgICAgICAgICAvLyB0aGUgc2Vjb25kIHRvIGxhc3Qgc3BsYXkgY29waWVkIGlzIHRoZSByaWdodCBjaGlsZCBvZiB0aGUgZmlyc3QsCi0gICAgICAgICAgICAvLyBhbmQgdGhlIHRoaXJkIHRocm91Z2ggdGhlIHNlY29uZCB0byBsYXN0IGFyZSBhIGxlZnQgb25seSBsaXN0Ci0gICAgICAgICAgICAvLyBvZmYgb2YgdGhlIGxlZnQgY2hpbGQgb2YgdGhlIHNlY29uZCEKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBZb3UgbWF5IGJlIGFza2luZyB5b3VyIHNlbGYsICJTZWxmLCB3aHkgYWxsIHRoaXMgbWFkbmVzcz8iCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gU2V2ZXJhbCByZWFzb25zLiAgRmlyc3QsIGJ5IG1ha2luZyB0aGUgZmlyc3QgaGFuZyBvZmYgdGhlCi0gICAgICAgICAgICAvLyBsZWZ0IGNoaWxkIG9mIHRoZSBsYXN0IGFuZCBoYXZlIHRoZSByaWdodCBjaGlsZCBvZiBsYXN0IGJlIG51bGwsCi0gICAgICAgICAgICAvLyB0aGUgcm9vdCB3aWxsIGhhdmUgdGhlIHRvdGFsIHNwbGF5IHN0YXRpc3RpY3MgZm9yIHRoZSB3aG9sZQotICAgICAgICAgICAgLy8gdHJlZS4gIFNlY29uZCwgeW91IGhhdmUgcXVpY2sgYWNjZXNzIHRvIHRoZSBmaXJzdCBzcGxheSBjb3BpZWQuCi0gICAgICAgICAgICAvLyBUaGlyZCwgYnVpbGRpbmcgdGhlIHRoaXJkIHRocm91Z2ggdGhlIHNlY29uZCB0byBsYXN0IGRvCi0gICAgICAgICAgICAvLyBub3QgcmVxdWlyZSB3YWxraW5nIHRvIHVwZGF0ZSBzdGF0aWN0aWNzLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFVsdGltYXRlbHksIEkgZG8gdGhpcyB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGZvcm1hdCBvZiB0aGUKLSAgICAgICAgICAgIC8vIHRyZWUgd2hlbiBhIHJhbmdlIG9mIHNwbGF5cyBhcmUgcmVtb3ZlZCBmcm9tIGEgdHJlZS4gIFRvIGF2b2lkCi0gICAgICAgICAgICAvLyBhbiBhZGRpdGlvbmFsIHNwbGF5LCB0aGUgcmVtb3ZhbCBvZiBhIHN1YiB0cmVlIGlzIHNoYXBlZCBsaWtlCi0gICAgICAgICAgICAvLyB0aGlzLgotICAgICAgICAgICAgLy8KLQotICAgICAgICAgICAgaWYgKF9sYXN0ICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKF9maXJzdCA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICBfZmlyc3QgPSBfbGFzdDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChfdGFpbCA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICBfdGFpbCA9IF9sYXN0OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIF9sYXN0LmFkanVzdENjaExlZnQoIF90YWlsLmdldENjaExlZnQoKSArIF90YWlsLmdldENjaCgpICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgX2xhc3QuYWRqdXN0Q2RvY0JlZ2luTGVmdCgKLSAgICAgICAgICAgICAgICAgICAgICAgIF90YWlsLmdldENkb2NCZWdpbkxlZnQoKSArIF90YWlsLmdldENkb2NCZWdpbigpICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgX2xhc3QuX2xlZnRTcGxheSA9IF90YWlsOwotICAgICAgICAgICAgICAgICAgICBfdGFpbC5fcGFyZW50U3BsYXkgPSBfbGFzdDsKLSAgICAgICAgICAgICAgICAgICAgX3RhaWwgPSBfbGFzdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIF9sYXN0ID0gczsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgY2hhcltdICAgIF90ZXh0OwotICAgICAgICBwcml2YXRlIFNwbGF5ICAgICBfZmlyc3Q7Ci0gICAgICAgIHByaXZhdGUgU3BsYXkgICAgIF90YWlsOwotICAgICAgICBwcml2YXRlIFNwbGF5ICAgICBfbGFzdDsKLSAgICAgICAgcHJpdmF0ZSBDb250YWluZXIgX2Zyb250aWVyOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvcGllcyB0aGUgY29udGVudHMgb2YgdGhpcyBzcGxheSAoZGVlcGx5KS4KLSAgICAgKiBUaGlzIHdpbGwgdXBkYXRlIGFueSBpbnZhbGlkIGNvbnRlbnQuCi0gICAgICoKLSAgICAgKiBCZWNhdXNlIHRoaXMgY2FuIHJldHVybiBvbmx5IHRleHQsIGlmIHRoZXJlIGlzIHRleHQgYXQgdGhlIGJlZ2lubmluZwotICAgICAqIG9mIHRoZSBjb250ZW50cywgSSB3aWxsIGNyZWF0ZSBhIEZSQUcgYXMgdGhlIGZpcnN0IHNwbGF5IChhZnRlciBhbnkKLSAgICAgKiBhdHRyaWJ1dGVzKS4KLSAgICAgKi8KLQotICAgIGZpbmFsIENvcHlDb250ZXh0IGNvcHlTcGxheUNvbnRlbnRzICggUm9vdCByICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCAhaXNGaW5pc2goKSAmJiAhaXNYbWxucygpOwotCi0gICAgICAgIGlmIChpc0NvbnRhaW5lcigpKQotICAgICAgICAgICAgZW5zdXJlQ29udGVudFZhbGlkKCk7Ci0gICAgICAgIGVsc2UgaWYgKGlzTm9ybWFsQXR0cigpKQotICAgICAgICAgICAgZW5zdXJlVmFsdWVWYWxpZCgpOwotCi0gICAgICAgIENvcHlDb250ZXh0IGNvcHlDb250ZXh0ID0gbmV3IENvcHlDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGlzQ29udGFpbmVyKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBjY2hBdHRycyA9IDA7Ci0KLSAgICAgICAgICAgIFNwbGF5IHQgPSBuZXh0U3BsYXkoKSwgcyA9IHQ7Ci0KLSAgICAgICAgICAgIGZvciAoIDsgcy5pc0F0dHIoKSA7IHMgPSBzLm5leHRTcGxheSgpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb3B5Q29udGV4dC5jb3B5U3BsYXkoIHMsIGZhbHNlICk7Ci0gICAgICAgICAgICAgICAgY2NoQXR0cnMgKz0gcy5nZXRDY2goKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaW50IGNjaFZhbHVlID0gaXNMZWFmKCkgPyBnZXRDY2hWYWx1ZSgpIDogZ2V0Q2NoQWZ0ZXIoKTsKLQotICAgICAgICAgICAgaWYgKGNjaFZhbHVlID4gMCkKLSAgICAgICAgICAgICAgICBjb3B5Q29udGV4dC5jb3B5RnJhZ21lbnQoIGNjaFZhbHVlICk7Ci0KLSAgICAgICAgICAgIGludCBjY2hDb250ZW50cyA9IDA7Ci0KLSAgICAgICAgICAgIGlmICghaXNMZWFmKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3BsYXkgZmluaXNoID0gZ2V0RmluaXNoU3BsYXkoKTsKLQotICAgICAgICAgICAgICAgIGZvciAoIFNwbGF5IHUgPSBzIDsgdSAhPSBmaW5pc2ggOyB1ID0gdS5uZXh0U3BsYXkoKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb3B5Q29udGV4dC5jb3B5U3BsYXkoIHUsIHRydWUgKTsKLSAgICAgICAgICAgICAgICAgICAgY2NoQ29udGVudHMgKz0gdS5nZXRDY2goKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGludCBjY2hBbGwgPSBjY2hBdHRycyArIGNjaFZhbHVlICsgY2NoQ29udGVudHM7Ci0KLSAgICAgICAgICAgIGlmIChjY2hBbGwgPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNoYXJbXSB0ZXh0ID0gbmV3IGNoYXIgWyBjY2hBbGwgXTsKLQotICAgICAgICAgICAgICAgIGludCBjcCA9IHIuZ2V0Q3AoIHRoaXMgKTsKLSAgICAgICAgICAgICAgICBpbnQgY2NoID0gZ2V0Q2NoKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY2NoQXR0cnMgPiAwKQotICAgICAgICAgICAgICAgICAgICByLl90ZXh0LmZldGNoKCB0ZXh0LCAwLCBjcCArIGNjaCwgY2NoQXR0cnMgKTsKLQotICAgICAgICAgICAgICAgIGlmIChjY2hWYWx1ZSA+IDApCi0gICAgICAgICAgICAgICAgICAgIHIuX3RleHQuZmV0Y2goIHRleHQsIGNjaEF0dHJzLCBjcCwgY2NoVmFsdWUgKTsKLQotICAgICAgICAgICAgICAgIGlmIChjY2hDb250ZW50cyA+IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByLl90ZXh0LmZldGNoKAotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCwgY2NoQXR0cnMgKyBjY2hWYWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNwICsgY2NoICsgY2NoQXR0cnMsIGNjaENvbnRlbnRzICk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY29weUNvbnRleHQuY29weVRleHQoIHRleHQgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFzc2VydCBpc05vcm1hbEF0dHIoKSB8fCBpc0NvbW1lbnQoKSB8fCBpc1Byb2NpbnN0KCk7Ci0KLSAgICAgICAgICAgIGludCBjY2hWYWx1ZSA9IGdldENjaFZhbHVlKCk7Ci0KLSAgICAgICAgICAgIGlmIChjY2hWYWx1ZSA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29weUNvbnRleHQuY29weUZyYWdtZW50KCBjY2hWYWx1ZSApOwotCi0gICAgICAgICAgICAgICAgY2hhcltdIHRleHQgPSBuZXcgY2hhciBbIGNjaFZhbHVlIF07Ci0KLSAgICAgICAgICAgICAgICByLl90ZXh0LmZldGNoKCB0ZXh0LCAwLCByLmdldENwKCB0aGlzICksIGNjaFZhbHVlICk7Ci0KLSAgICAgICAgICAgICAgICBjb3B5Q29udGV4dC5jb3B5VGV4dCggdGV4dCApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGNvcHlDb250ZXh0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvcGllcyB0aGlzIHNwbGF5IChkZWVwbHkpLiAgQWxzbyBjb3BpZXMgYXR0cmlidXRlcyBhZnRlciBhIGJlZ2luCi0gICAgICogVGhpcyB3aWxsIHVwZGF0ZSBhbnkgaW52YWxpZCBjb250ZW50LgotICAgICAqLwotCi0gICAgZmluYWwgU3BsYXkgY29weVNwbGF5ICggKQotICAgIHsKLSAgICAgICAgYXNzZXJ0ICFpc0RvYygpICYmICFpc0ZpbmlzaCgpOwotCi0gICAgICAgIC8vIENvbXB1dGUgc3BsYXkgdG8gc3RvcCBhdCAoZG9lcyBub3QgZ2V0IGNvcGllZCkuICBBbHNvIGNvbXB1dGUKLSAgICAgICAgLy8gYSBzcGxheSwgdG8gYmUgY29waWVkLCB3aGljaCBzaG91bGQgbm90IGhhdmUgaXQncyB0ZXh0IGFmdGVyIGNvcGllZC4KLQotICAgICAgICBTcGxheSBzdG9wSGVyZSwgbm9UZXh0QWZ0ZXI7Ci0KLSAgICAgICAgaWYgKGlzQmVnaW4oKSkKLSAgICAgICAgewotICAgICAgICAgICAgbm9UZXh0QWZ0ZXIgPSBnZXRGaW5pc2hTcGxheSgpOwotICAgICAgICAgICAgc3RvcEhlcmUgPSBub1RleHRBZnRlci5uZXh0Tm9uQXR0clNwbGF5KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBub1RleHRBZnRlciA9IG51bGw7Ci0gICAgICAgICAgICBzdG9wSGVyZSA9IG5leHRTcGxheSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTWFrZSB0aGUgY29weQotCi0gICAgICAgIENvcHlDb250ZXh0IGNvcHlDb250ZXh0ID0gbmV3IENvcHlDb250ZXh0KCk7Ci0KLSAgICAgICAgZm9yICggU3BsYXkgbmV4dCwgcyA9IHRoaXMgOyBzICE9IHN0b3BIZXJlIDsgcyA9IG5leHQgKQotICAgICAgICB7Ci0gICAgICAgICAgICBuZXh0ID0gcy5uZXh0U3BsYXkoKTsKLQotICAgICAgICAgICAgY29weUNvbnRleHQuY29weVNwbGF5KCBzLCBzICE9IG5vVGV4dEFmdGVyICk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY29weUNvbnRleHQuZ2V0VHJlZSgpOwotICAgIH0KLQotICAgIGZpbmFsIHZvaWQgcmVtb3ZlQXR0cmlidXRlcyAoIFJvb3QgciApCi0gICAgewotICAgICAgICBhc3NlcnQgaXNDb250YWluZXIoKTsKLQotICAgICAgICBmb3IgKCA7IDsgKQotICAgICAgICB7Ci0gICAgICAgICAgICBTcGxheSBzID0gbmV4dFNwbGF5KCk7Ci0KLSAgICAgICAgICAgIGlmICghcy5pc0F0dHIoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgcy5yZW1vdmUoIHIsIHRydWUgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJlbW92ZXMgYWxsIGNvbnRlbnQgZnJvbSBzcGxheS4KLSAgICAgKiBCZWdpbiB3aWxsIGJlIGEgbGVhZiB1cG9uIGV4aXQuCi0gICAgICovCi0KLSAgICBmaW5hbCB2b2lkIHJlbW92ZUNvbnRlbnQgKCBSb290IHIsIGJvb2xlYW4gcmVtb3ZlQXR0cnMgKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IFJvb3QuZHYgPiAwIHx8IGdldFJvb3RTbG93KCkgPT0gcjsKLQotICAgICAgICByLnN0YXJ0Q2hhbmdlKCk7Ci0KLSAgICAgICAgaWYgKGlzSW52YWxpZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICB0b2dnbGVJc0ludmFsaWQoKTsKLQotICAgICAgICAgICAgci5pbnZhbGlkYXRlVmVyc2lvbigpOwotCi0gICAgICAgICAgICBpZiAoaXNDb250YWluZXIoKSAmJiByZW1vdmVBdHRycykKLSAgICAgICAgICAgICAgICByZW1vdmVBdHRyaWJ1dGVzKCByICk7Ci0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoIGdldEtpbmQoKSApCi0gICAgICAgIHsKLSAgICAgICAgY2FzZSBET0MgOgotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBCRUdJTiA6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc0xlYWYoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZW1vdmVDaGFycyggciwgMSwgZ2V0Q2NoVmFsdWUoKSApOwotCi0gICAgICAgICAgICAgICAgaWYgKHJlbW92ZUF0dHJzKQotICAgICAgICAgICAgICAgICAgICByZW1vdmVBdHRyaWJ1dGVzKCByICk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBBVFRSIDoKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzWG1sbnMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQgZmFsc2U6ICJVbmV4cGVjdGVkIGtpbmQgZm9yIHJlbW92ZUNvbnRlbnQiOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBGYWxsIHRocm91Z2gKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgQ09NTUVOVCAgOgotICAgICAgICBjYXNlIFBST0NJTlNUIDoKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGNjaFZhbHVlID0gZ2V0Q2NoVmFsdWUoKTsKLQotICAgICAgICAgICAgaWYgKGNjaFZhbHVlID09IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICByLl90ZXh0LnJlbW92ZSggci5nZXRDcCggdGhpcyApLCBjY2hWYWx1ZSApOwotCi0gICAgICAgICAgICByLnVwZGF0ZUNjaCggdGhpcywgLSBjY2hWYWx1ZSApOwotCi0gICAgICAgICAgICBpZiAoZ2V0S2luZCgpID09IEFUVFIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW52YWxpZGF0ZVRleHQoKTsKLQotICAgICAgICAgICAgICAgIGlmIChpc1hzaVR5cGUoKSkKLSAgICAgICAgICAgICAgICAgICAgZ2V0Q29udGFpbmVyKCkuZGlzY29ubmVjdFR5cGVzKCByICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHIuaW52YWxpZGF0ZVZlcnNpb24oKTsKLQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVmYXVsdCA6Ci0gICAgICAgICAgICBhc3NlcnQgZmFsc2U6ICJVbmV4cGVjdGVkIGtpbmQgZm9yIHJlbW92ZUNvbnRlbnQiOwotICAgICAgICB9Ci0KLSAgICAgICAgYXNzZXJ0IGlzRG9jKCkgfHwgKGlzQmVnaW4oKSAmJiAhaXNMZWFmKCkpOwotCi0gICAgICAgIFNwbGF5IHMgPSBuZXh0Tm9uQXR0clNwbGF5KCk7Ci0KLSAgICAgICAgaWYgKHMuaXNSb290KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFzc2VydCBpc0RvYygpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFJlbW92ZSBhbGwgdGhlIHNwbGF5cy4gIEluaGliaXQgaW52YWxpZGF0aW9uIG9uIGVhY2ggcmVtb3ZlIHRvCi0gICAgICAgICAgICAvLyBwcmV2ZW50IGEgZmxvb2Qgb2YgaW52YWxpZGF0aW9ucyB0byB0aGUgcGFyZW50IHR5cGUgKGlmIHRoZXJlKS4KLSAgICAgICAgICAgIC8vCi0KLSAgICAgICAgICAgIFNwbGF5IG5leHQ7Ci0gICAgICAgICAgICBmb3IgKCBzID0gbmV4dE5vbkF0dHJTcGxheSgpIDsgIXMuaXNGaW5pc2goKSA7IHMgPSBuZXh0ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQgIXMuaXNBdHRyKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAocy5pc0xlYWYoKSkKLSAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHMubmV4dE5vbkF0dHJTcGxheSgpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHMuaXNCZWdpbigpKQotICAgICAgICAgICAgICAgICAgICBuZXh0ID0gcy5nZXRGaW5pc2hTcGxheSgpLm5leHRTcGxheSgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHMubmV4dFNwbGF5KCk7Ci0KLSAgICAgICAgICAgICAgICBzLnJlbW92ZSggciwgZmFsc2UgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEhhdmUgdG8gcmVtb3ZlIHRoZSB0ZXh0IGFmdGVyIHRoaXMgaGVyZSBiZWNhdXNlIHRoZSBhYm92ZQotICAgICAgICAgICAgLy8gcmVtb3ZlcyBjb3VsZCBoYXZlIHN1dWZmbGVkIHRleHQgdG8gYWZ0ZXIgdGhpcy4KLSAgICAgICAgICAgIC8vCi0KLSAgICAgICAgICAgIGFzc2VydCAhaXNMZWFmKCk7Ci0KLSAgICAgICAgICAgIGlmIChnZXRDY2hBZnRlcigpID4gMCkKLSAgICAgICAgICAgICAgICByZW1vdmVUZXh0QWZ0ZXIoIHIgKTsKLQotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFRyaWNreSBjb2RlLiAgTWVyZ2UgdGhlIEVORCBhbmQgdGhlIEJFR0lOIHRvIGZvcm0gYSBsZWFmLgotICAgICAgICAgICAgLy8KLQotICAgICAgICAgICAgaWYgKGlzQmVnaW4oKSkKLSAgICAgICAgICAgICAgICBmb2xpYXRlKCByICk7Ci0KLSAgICAgICAgICAgIGludmFsaWRhdGVUZXh0KCk7Ci0KLSAgICAgICAgICAgIHIuaW52YWxpZGF0ZVZlcnNpb24oKTsKLSAgICAgICAgfQotCi0vLyBUT0RPIC0gaWYgcmVtb3ZpbmcgdGV4dCBmcm9tIHhzaTp0eXBlIG9yIG5pbCBtdXN0IGRvIHN0dWZmCi0vLyBUT0RPIC0gaWYgcmVtb3ZpbmcgdGV4dCBmcm9tIHhzaTp0eXBlIG9yIG5pbCBtdXN0IGRvIHN0dWZmCi0vLyBUT0RPIC0gaWYgcmVtb3ZpbmcgdGV4dCBmcm9tIHhzaTp0eXBlIG9yIG5pbCBtdXN0IGRvIHN0dWZmCi0vLyBUT0RPIC0gaWYgcmVtb3ZpbmcgdGV4dCBmcm9tIHhzaTp0eXBlIG9yIG5pbCBtdXN0IGRvIHN0dWZmCi0vLyBUT0RPIC0gaWYgcmVtb3ZpbmcgdGV4dCBmcm9tIHhzaTp0eXBlIG9yIG5pbCBtdXN0IGRvIHN0dWZmCi0KLQotLy8gVE9ETyAtIGlmIHJlbW92aW5nIGF0dHJpYnV0ZSB4c2k6dHlwZSBvciB4c2k6bmlsLCBtdXN0IGRvIHN0dWlmZgotLy8gVE9ETyAtIGlmIHJlbW92aW5nIGF0dHJpYnV0ZSB4c2k6dHlwZSBvciB4c2k6bmlsLCBtdXN0IGRvIHN0dWlmZgotLy8gVE9ETyAtIGlmIHJlbW92aW5nIGF0dHJpYnV0ZSB4c2k6dHlwZSBvciB4c2k6bmlsLCBtdXN0IGRvIHN0dWlmZgotLy8gVE9ETyAtIGlmIHJlbW92aW5nIGF0dHJpYnV0ZSB4c2k6dHlwZSBvciB4c2k6bmlsLCBtdXN0IGRvIHN0dWlmZgotLy8gVE9ETyAtIGlmIHJlbW92aW5nIGF0dHJpYnV0ZSB4c2k6dHlwZSBvciB4c2k6bmlsLCBtdXN0IGRvIHN0dWlmZgotCi0gICAgICAgIGlmIChyZW1vdmVBdHRycykKLSAgICAgICAgICAgIHJlbW92ZUF0dHJpYnV0ZXMoIHIgKTsKLQotICAgICAgICAvLyBJZiB0aGUgdHJlZSBiZWNhbWUgZW1wdHksIHJlc2V0IF9sZWZ0T25seQotCi0gICAgICAgIGlmIChyLl9sZWZ0U3BsYXkgPT0gci5fZG9jICYmIHIuX2RvYy5fcmlnaHRTcGxheSA9PSBudWxsKQotICAgICAgICAgICAgci5fbGVmdE9ubHkgPSB0cnVlOwotCi0gICAgICAgIGFzc2VydCB2YWxpZGF0ZSgpOwotICAgIH0KLQotICAgIGZpbmFsIGludCBjb3B5Q2hhcnMgKAotICAgICAgICBSb290IHIsIGludCBwLCBpbnQgY2NoLCBSb290IHJEc3QsIFNwbGF5IHNEc3QsIGludCBwRHN0ICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCBwRHN0ID4gMCAmJiBwRHN0IDw9IHNEc3QuZ2V0RW5kUG9zKCk7Ci0KLSAgICAgICAgaW50IHBvc3RDY2ggPSBnZXRQb3N0Q2NoKCBwICk7Ci0KLSAgICAgICAgaWYgKHAgPT0gMCB8fCBjY2ggPT0gMCB8fCBwb3N0Q2NoID09IDApCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBpZiAoY2NoIDwgMCB8fCBjY2ggPiBwb3N0Q2NoKQotICAgICAgICAgICAgY2NoID0gcG9zdENjaDsKLQotICAgICAgICBhc3NlcnQgY2NoID4gMDsKLQotLy8gVE9ETyAtIHVzZXMgc3RyaW5nIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggc291cmNlIGFuZCBkZXN0IGZyb20gc2FtZSBidWZmZXIKLS8vICAgICAgICByZXdyaXRlIHRvIG5vdCBjcmVhdGUgc3RyaW5nIG9iamVjdAotCi0gICAgICAgIGNoYXJbXSBjaGFycyA9IG5ldyBjaGFyIFsgY2NoIF07Ci0KLSAgICAgICAgci5fdGV4dC5mZXRjaCggY2hhcnMsIDAsIGdldENwRm9yUG9zKCByLCBwICksIGNjaCApOwotCi0gICAgICAgIHNEc3QuaW5zZXJ0Q2hhcnMoIHBEc3QsIHJEc3QsIGNoYXJzLCAwLCBjY2ggKTsKLQotICAgICAgICByZXR1cm4gY2NoOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIE1vdmUgY2NoIGNoYXJzIGZyb20gcG9zIHAgb24gdGhpcyBzcGxheSB0byBwb3MgcERzdCBvbiBzRHN0LgotICAgICAqIFNvdXJjZSBhbmQgZGVzdGluYXRpb24gY2FuIGJlIGRpZmZlcmVudCBkb2N1bWVudHMuICBOb3JtYWxseSBjdXJzb3JzCi0gICAgICogc3RheSBwdXQgd2hlbiB0aGVpciBjaGFyIGlzIG1vdmVkLCBidXQgbW92ZUN1cnNvcnMgY2FuIGNhdXNlIGN1cnNvcnMKLSAgICAgKiB0b21vdmUgd2l0aCB0aGUgY2hhcnMgKHVzZWQgaW50ZXJuYWxseSkuCi0gICAgICovCi0KLSAgICBmaW5hbCBpbnQgbW92ZUNoYXJzICgKLSAgICAgICAgUm9vdCByLCBpbnQgcCwgaW50IGNjaCwgUm9vdCByRHN0LCBTcGxheSBzRHN0LCBpbnQgcERzdCwKLSAgICAgICAgYm9vbGVhbiBtb3ZlQ3Vyc29ycyApCi0gICAgewotICAgICAgICBpZiAocCA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgaW50IHBvc3RDY2ggPSBnZXRQb3N0Q2NoKCBwICk7Ci0KLSAgICAgICAgaWYgKGNjaCA9PSAwIHx8IHBvc3RDY2ggPT0gMCkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIGlmIChjY2ggPCAwIHx8IGNjaCA+IHBvc3RDY2gpCi0gICAgICAgICAgICBjY2ggPSBwb3N0Q2NoOwotCi0gICAgICAgIHIuc3RhcnRDaGFuZ2UoKTsKLSAgICAgICAgckRzdC5zdGFydENoYW5nZSgpOwotCi0gICAgICAgIGFzc2VydCBjY2ggPiAwOwotCi0gICAgICAgIC8vIEkgZG9uJ3QgaGF2ZSB0byBjaGVjayB0aGUgaW52YWxpZGl0eSBvZiB0aGUgc291cmNlIGJlY2F1c2UgdGhlCi0gICAgICAgIC8vIG9ubHkgaW52YWxpZCB0ZXh0IEkgd291bGQgaGF2ZSB0byBkZWFsIHdpdGggaXMgdGhhdCBpbiBhIGxlYWYsIGFuZAotICAgICAgICAvLyBJZiB0aGUgc291cmNlIGlzIGluIGEgbGVhZiBoZXJlLCB0aGVuIGl0IG11c3QgYmUgcG9zaXRpb25lZCBhdCB0aGUKLSAgICAgICAgLy8gZW5kICgxKSB3aGljaCBpcyBub3Qgc2Vuc2l0aXZlIHRvIHRoZSBpbnZhbGlkaXR5LgotICAgICAgICAvLwotICAgICAgICAvLyBIb3dldmVyLCBJIG11Y2ggY2hlY2sgdGhlIGRlc3RpbmF0aW9uIGZvciB2YWxpZGl0eSBiZWNhdXNlIEkgbWF5Ci0gICAgICAgIC8vIGJlIGFwcGVuZGluZyB0ZXh0IHRvIGFuIGV4aXN0aW5nIHZhbHVlLgotCi0gICAgICAgIGlmIChzRHN0LmlzQ29udGFpbmVyKCkgJiYgcERzdCA9PSAxKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgY2NoVmFsaWQgPSBzRHN0LmVuc3VyZUNvbnRlbnRWYWxpZCgpOwotCi0gICAgICAgICAgICBwRHN0ICs9IGNjaFZhbGlkOwotCi0gICAgICAgICAgICBpZiAoc0RzdCA9PSB0aGlzICYmIHAgPT0gMSkKLSAgICAgICAgICAgICAgICBwICs9IGNjaFZhbGlkOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8KLQotICAgICAgICBpZiAocERzdCA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBzRHN0ID0gc0RzdC5wcmV2Tm9uQXR0clNwbGF5KCk7Ci0gICAgICAgICAgICBwRHN0ID0gc0RzdC5nZXRFbmRQb3MoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSBkZXN0aW5hdGlvbiBpZiBpbiB0aGUgcmFuZ2Ugb2YgdGhlIHNvdXJjZSwgdGhlbiB0aGlzIGlzCi0gICAgICAgIC8vIGVmZmVjdGl2ZWx5IGEgbm8tb3AuCi0KLS8vIFRPRE8gLSBQcm9iYWJseSBzaG91bGQgZGlzY29ubmVjdCBUeXBlcyBpbiB0aGUgcmFuZ2UKLQotICAgICAgICBpZiAoc0RzdCA9PSB0aGlzICYmIHBEc3QgPj0gcCAmJiBwRHN0IDw9IHAgKyBjY2gpCi0gICAgICAgICAgICByZXR1cm4gY2NoOwotCi0gICAgICAgIGFzc2VydCBwRHN0ID4gMDsKLQotICAgICAgICBDb250YWluZXIgY0RzdCA9IHNEc3QuZ2V0Q29udGFpbmVyKCBwRHN0ICk7Ci0gICAgICAgIENvbnRhaW5lciBjID0gZ2V0Q29udGFpbmVyKCBwICk7Ci0KLSAgICAgICAgLy8gTW92ZSB0aGUgdGV4dAotCi0gICAgICAgIHJEc3QuX3RleHQubW92ZSgKLSAgICAgICAgICAgIHNEc3QuZ2V0Q3BGb3JQb3MoIHJEc3QsIHBEc3QgKSwgci5fdGV4dCwgZ2V0Q3BGb3JQb3MoIHIsIHAgKSwgY2NoICk7Ci0KLSAgICAgICAgLy8gUGVyZm9ybSB0aGUgImluc2VydGlvbiIgZmlyc3QKLQotICAgICAgICBpZiAoIXNEc3QuaXNMZWFmKCkgfHwgcERzdCA+IHNEc3QuZ2V0UG9zTGVhZkVuZCgpKQotICAgICAgICAgICAgc0RzdC5hZGp1c3RDY2hBZnRlciggY2NoICk7Ci0KLSAgICAgICAgckRzdC51cGRhdGVDY2goIHNEc3QsIGNjaCApOwotCi0gICAgICAgIGZvciAoIEdvb2JlciBnID0gc0RzdC5maXJzdEdvb2JlcigpIDsgZyAhPSBudWxsIDsKLSAgICAgICAgICAgICAgZyA9IHNEc3QubmV4dEdvb2JlciggZyApICkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGdwID0gZy5nZXRQb3MoKTsKLQotICAgICAgICAgICAgaWYgKGdwID49IHBEc3QpCi0gICAgICAgICAgICAgICAgZy5zZXQoIGdwICsgY2NoICk7Ci0gICAgICAgIH0KLQotICAgICAgICBhc3NlcnQgc0RzdCAhPSB0aGlzIHx8IHBEc3QgPCBwIHx8IHBEc3QgPiBwICsgY2NoOwotCi0gICAgICAgIGlmIChzRHN0ID09IHRoaXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBwRHN0U2F2ZSA9IHBEc3Q7Ci0KLSAgICAgICAgICAgIGlmIChwRHN0ID4gcCArIGNjaCkKLSAgICAgICAgICAgICAgICBwRHN0IC09IGNjaDsKLQotICAgICAgICAgICAgaWYgKHAgPj0gcERzdFNhdmUpCi0gICAgICAgICAgICAgICAgcCArPSBjY2g7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGVuIHBlcmZvcm0gdGhlICJyZW1vdmFsIgotCi0gICAgICAgIGlmICghaXNMZWFmKCkgfHwgcCA+IGdldFBvc0xlYWZFbmQoKSkKLSAgICAgICAgICAgIGFkanVzdENjaEFmdGVyKCAtIGNjaCApOwotCi0gICAgICAgIHIudXBkYXRlQ2NoKCB0aGlzLCAtIGNjaCApOwotCi0gICAgICAgIEdvb2JlciBuZXh0R29vYmVyOwotICAgICAgICBmb3IgKCBHb29iZXIgZyA9IGZpcnN0R29vYmVyKCkgOyBnICE9IG51bGwgOyBnID0gbmV4dEdvb2JlciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5leHRHb29iZXIgPSBuZXh0R29vYmVyKCBnICk7Ci0KLSAgICAgICAgICAgIGludCBncCA9IGcuZ2V0UG9zKCk7Ci0KLSAgICAgICAgICAgIGlmIChncCA+PSBwICsgY2NoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGcuc2V0KCBncCAtIGNjaCApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ3AgPj0gcCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIW1vdmVDdXJzb3JzICYmIGcuZ2V0S2luZCgpID09IENVUlNPUikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwID09IGdldEVuZFBvcygpKQotICAgICAgICAgICAgICAgICAgICAgICAgZy5zZXQoIG5leHRTcGxheSgpLCAwICk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGcuc2V0KCBwICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZy5zZXQoIHJEc3QsIHNEc3QsIHBEc3QgKyBncCAtIHAgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGNEc3QuaW52YWxpZGF0ZVRleHQoKTsKLSAgICAgICAgYy5pbnZhbGlkYXRlVGV4dCgpOwotCi0gICAgICAgIHIuaW52YWxpZGF0ZVZlcnNpb24oKTsKLSAgICAgICAgckRzdC5pbnZhbGlkYXRlVmVyc2lvbigpOwotCi0gICAgICAgIHJldHVybiBjY2g7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVtb3ZlIGNjaCBjaGFycyBzdGFydGluZyBhdCBwb3NpdGlvbiBwIG9uIHRoaXMgc3BsYXkuCi0gICAgICovCi0KLSAgICBmaW5hbCBpbnQgcmVtb3ZlQ2hhcnMgKCBSb290IHIsIGludCBwLCBpbnQgY2NoICkKLSAgICB7Ci0gICAgICAgIGludCBtYXhQb3MgPSBnZXRNYXhQb3MoKTsKLQotICAgICAgICBhc3NlcnQgcCA+IDAgJiYgcCA8PSBtYXhQb3M7Ci0KLSAgICAgICAgaWYgKHAgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIHIuc3RhcnRDaGFuZ2UoKTsKLQotLy8gVE9ETyAtIG1lcmdlIHRoZSB0d28gZm9sbG93aW5nIGNodW5rcyBvZiBjb2RlPz8/Pz8/Ci0KLSAgICAgICAgaWYgKGlzTGVhZigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgcGxlID0gZ2V0UG9zTGVhZkVuZCgpOwotCi0gICAgICAgICAgICBpZiAocCA8PSBwbGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNjaCA8IDAgfHwgcGxlIC0gcCA8IGNjaCkKLSAgICAgICAgICAgICAgICAgICAgY2NoID0gcGxlIC0gcDsKLQotICAgICAgICAgICAgICAgIGlmIChjY2ggPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgICAgICByLl90ZXh0LnJlbW92ZSggci5nZXRDcCggdGhpcyApICsgcCAtIDEsIGNjaCApOwotCi0gICAgICAgICAgICAgICAgci51cGRhdGVDY2goIHRoaXMsIC0gY2NoICk7Ci0KLSAgICAgICAgICAgICAgICBHb29iZXIgbmV4dEdvb2JlcjsKLQotICAgICAgICAgICAgICAgIGZvciAoIEdvb2JlciBnID0gZmlyc3RHb29iZXIoKSA7IGcgIT0gbnVsbCA7IGcgPSBuZXh0R29vYmVyICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG5leHRHb29iZXIgPSBuZXh0R29vYmVyKCBnICk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaW50IGsgPSBnLmdldEtpbmQoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGdwID0gZy5nZXRQb3MoKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoZ3AgPj0gcCArIGNjaCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGcuc2V0KCBncCAtIGNjaCApOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChncCA+PSBwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9PSBDVVJTT1IpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZy5zZXQoIHAgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgayA9PSBBTk5PVEFUSU9OOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcuZGlzY29ubmVjdCggciApOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaW52YWxpZGF0ZVRleHQoKTsKLQotICAgICAgICAgICAgICAgIHIuaW52YWxpZGF0ZVZlcnNpb24oKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBjY2g7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgcG9zQWZ0ZXIgPSBnZXRQb3NBZnRlcigpOwotCi0gICAgICAgIGFzc2VydCBwID49IHBvc0FmdGVyOwotCi0gICAgICAgIGludCBtYXhDY2ggPSBtYXhQb3MgLSBwICsgMTsKLQotICAgICAgICBhc3NlcnQgbWF4Q2NoID49IDA7Ci0KLSAgICAgICAgaWYgKGNjaCA8IDAgfHwgY2NoID4gbWF4Q2NoKQotICAgICAgICAgICAgY2NoID0gbWF4Q2NoOwotCi0gICAgICAgIGlmIChjY2ggPD0gMCkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIENvbnRhaW5lciBjID0gZ2V0Q29udGFpbmVyKCBwICk7Ci0KLSAgICAgICAgci5fdGV4dC5yZW1vdmUoIGdldENwRm9yUG9zKCByLCBwICksIGNjaCApOwotCi0gICAgICAgIGFkanVzdENjaEFmdGVyKCAtIGNjaCApOwotCi0gICAgICAgIHIudXBkYXRlQ2NoKCB0aGlzLCAtIGNjaCApOwotCi0gICAgICAgIEdvb2JlciBuZXh0R29vYmVyOwotICAgICAgICBmb3IgKCBHb29iZXIgZyA9IGZpcnN0R29vYmVyKCkgOyBnICE9IG51bGwgOyBnID0gbmV4dEdvb2JlciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5leHRHb29iZXIgPSBuZXh0R29vYmVyKCBnICk7Ci0KLSAgICAgICAgICAgIGludCBrID0gZy5nZXRLaW5kKCk7Ci0gICAgICAgICAgICBpbnQgZ3AgPSBnLmdldFBvcygpOwotCi0gICAgICAgICAgICBpZiAoZ3AgPj0gcCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoayA9PSBDVVJTT1IpCi0gICAgICAgICAgICAgICAgICAgIGcuc2V0KCBuZXh0Tm9uQXR0clNwbGF5KCksIDAgKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGcuZGlzY29ubmVjdCggciApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgYy5pbnZhbGlkYXRlVGV4dCgpOwotCi0gICAgICAgIHIuaW52YWxpZGF0ZVZlcnNpb24oKTsKLQotICAgICAgICBhc3NlcnQgdmFsaWRhdGUoKTsKLQotICAgICAgICByZXR1cm4gY2NoOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEluc2VydCB0ZXh0IGEgcG9zaXRpb24gcCBpbiB0aGlzIHNwbGF5Ci0gICAgICovCi0KLSAgICBmaW5hbCB2b2lkIGluc2VydENoYXJzICggaW50IHAsIFJvb3QgciwgT2JqZWN0IHR4dCwgaW50IG9mZiwgaW50IGNjaCApCi0gICAgewotICAgICAgICBhc3NlcnQgcCA+IDAgJiYgcCA8PSBnZXRFbmRQb3MoKTsKLQotICAgICAgICBpZiAoY2NoID09IDApCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgci5zdGFydENoYW5nZSgpOwotCi0gICAgICAgIENvbnRhaW5lciBjb250YWluZXIgPSBnZXRDb250YWluZXIoIHAgKTsKLQotICAgICAgICBpZiAoaXNDb250YWluZXIoKSAmJiBwID09IDEpCi0gICAgICAgICAgICBwICs9IGVuc3VyZUNvbnRlbnRWYWxpZCgpOwotCi0gICAgICAgIHIuX3RleHQuaW5zZXJ0KCBnZXRDcEZvclBvcyggciwgcCApLCB0eHQsIG9mZiwgY2NoICk7Ci0KLSAgICAgICAgaWYgKHAgPj0gZ2V0UG9zQWZ0ZXIoKSkKLSAgICAgICAgICAgIGFkanVzdENjaEFmdGVyKCBjY2ggKTsKLQotICAgICAgICByLnVwZGF0ZUNjaCggdGhpcywgY2NoICk7Ci0KLSAgICAgICAgZm9yICggR29vYmVyIGcgPSBmaXJzdEdvb2JlcigpIDsgZyAhPSBudWxsIDsgZyA9IG5leHRHb29iZXIoIGcgKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBncCA9IGcuZ2V0UG9zKCk7Ci0KLSAgICAgICAgICAgIGlmIChncCA+PSBwKQotICAgICAgICAgICAgICAgIGcuc2V0KCBncCArIGNjaCApOwotICAgICAgICB9Ci0KLSAgICAgICAgY29udGFpbmVyLmludmFsaWRhdGVUZXh0KCk7Ci0KLSAgICAgICAgci5pbnZhbGlkYXRlVmVyc2lvbigpOwotCi0gICAgICAgIGFzc2VydCB2YWxpZGF0ZSgpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFSVF9TVEFURSA9IDA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNQQUNFX1NFRU5fU1RBVEUgPSAxOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBOT1NQQUNFX1NUQVRFID0gMjsKLQotICAgIHB1YmxpYyBmaW5hbCBpbnQgc2NydWJUZXh0KAotICAgICAgICBUZXh0IHRleHQsIGludCB3cywgaW50IGNwLCBpbnQgY2NoLCBTdHJpbmdCdWZmZXIgc2IsIGludCBzdGF0ZSApCi0gICAgewotICAgICAgICBhc3NlcnQgdGV4dCAhPSBudWxsOwotCi0gICAgICAgIGlmICh0ZXh0Ll9idWYgPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0IGNjaCA9PSAwOwotICAgICAgICAgICAgYXNzZXJ0IGNwID09IDA7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY2NoID09IDApCi0gICAgICAgICAgICByZXR1cm4gc3RhdGU7Ci0KLSAgICAgICAgYm9vbGVhbiByZXBsYWNlID0gZmFsc2U7Ci0gICAgICAgIGJvb2xlYW4gY29sbGFwc2UgPSBmYWxzZTsKLQotICAgICAgICBzd2l0Y2ggKCB3cyApCi0gICAgICAgIHsKLSAgICAgICAgY2FzZSBUeXBlU3RvcmUuV1NfVU5TUEVDSUZJRUQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUeXBlU3RvcmUuV1NfUFJFU0VSVkUgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUeXBlU3RvcmUuV1NfUkVQTEFDRSAgICAgOiAgICAgICAgICAgIHJlcGxhY2UgPSB0cnVlOyBicmVhazsKLSAgICAgICAgY2FzZSBUeXBlU3RvcmUuV1NfQ09MTEFQU0UgICAgOiBjb2xsYXBzZSA9IHJlcGxhY2UgPSB0cnVlOyBicmVhazsKLQotCQlkZWZhdWx0IDogYXNzZXJ0IGZhbHNlOiAiVW5rbm93biB3aGl0ZSBzcGFjZSBydWxlICIgK3dzOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFyZXBsYWNlICYmICFjb2xsYXBzZSkKLSAgICAgICAgewotICAgICAgICAgICAgdGV4dC5mZXRjaChzYiwgY3AsIGNjaCk7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGU7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgb2ZmID0gdGV4dC51bk9ic2N1cmUoIGNwLCBjY2ggKTsKLSAgICAgICAgaW50IHN0YXJ0cHQgPSAwOwotCi0gICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCBjY2ggOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyIGNoID0gdGV4dC5fYnVmWyBvZmYgKyBpIF07Ci0KLSAgICAgICAgICAgIGlmIChjaCA9PSAnICcgfHwgY2ggPT0gJ1xuJyB8fCBjaCA9PSAnXHInIHx8IGNoID09ICdcdCcpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKHRleHQuX2J1Ziwgb2ZmICsgc3RhcnRwdCwgaSAtIHN0YXJ0cHQpOwotICAgICAgICAgICAgICAgIHN0YXJ0cHQgPSBpICsgMTsKLQotICAgICAgICAgICAgICAgIGlmIChjb2xsYXBzZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PSBOT1NQQUNFX1NUQVRFKQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTUEFDRV9TRUVOX1NUQVRFOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHNiLmFwcGVuZCgnICcpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PSBTUEFDRV9TRUVOX1NUQVRFKQotICAgICAgICAgICAgICAgICAgICBzYi5hcHBlbmQoICcgJyApOwotCi0gICAgICAgICAgICAgICAgc3RhdGUgPSBOT1NQQUNFX1NUQVRFOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgc2IuYXBwZW5kKCB0ZXh0Ll9idWYsIG9mZiArIHN0YXJ0cHQsIGNjaCAtIHN0YXJ0cHQgKTsKLQotICAgICAgICByZXR1cm4gc3RhdGU7Ci0gICAgfQotCi0gICAgZmluYWwgU3RyaW5nIGdldFRleHQgKCBSb290IHIgKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdldFRleHQoIHIsIFR5cGVTdG9yZS5XU19QUkVTRVJWRSApOwotICAgIH0KLQotLy8gICAgZmluYWwgaW50IGdldFRleHQgKCBSb290IHIsIGNoYXJbXSBidWYsIGludCBvZmYsIGludCBsZW4gKQotLy8gICAgewotLy8gICAgICAgIGlmIChsZW4gPD0gMCkKLS8vICAgICAgICAgICAgcmV0dXJuIDA7Ci0vLwotLy8gICAgICAgIGlmIChpc0ludmFsaWQoKSkKLS8vICAgICAgICB7Ci0vLyAgICAgICAgICAgIGlmIChpc05vcm1hbEF0dHIoKSkKLS8vICAgICAgICAgICAgICAgIGVuc3VyZVZhbHVlVmFsaWQoKTsKLS8vICAgICAgICAgICAgZWxzZSBpZiAoaXNMZWFmKCkpCi0vLyAgICAgICAgICAgICAgICBlbnN1cmVDb250ZW50VmFsaWQoKTsKLS8vICAgICAgICB9Ci0vLwotLy8gICAgICAgIGludCBjcCA9IHIuZ2V0Q3AoIHRoaXMgKTsKLS8vCi0vLyAgICAgICAgaWYgKGlzTm9ybWFsQXR0cigpIHx8IGlzQ29tbWVudCgpIHx8IGlzUHJvY2luc3QoKSB8fCBpc0xlYWYoKSkKLS8vICAgICAgICB7Ci0vLyAgICAgICAgICAgIGludCBjY2ggPSBnZXRDY2hWYWx1ZSgpOwotLy8KLS8vICAgICAgICAgICAgaWYgKGNjaCA9PSAwKQotLy8gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0vLwotLy8gICAgICAgICAgICBpZiAoY2NoID4gbGVuKQotLy8gICAgICAgICAgICAgICAgY2NoID0gbGVuOwotLy8KLS8vICAgICAgICAgICAgci5fdGV4dC5mZXRjaCggYnVmLCBvZmYsIHBvcywgY2NoICk7Ci0vLwotLy8gICAgICAgICAgICByZXR1cm4gY2NoOwotLy8gICAgICAgIH0KLS8vCi0vLyAgICAgICAgaWYgKCFpc0NvbnRhaW5lcigpKQotLy8gICAgICAgICAgICByZXR1cm4gMDsKLS8vCi0vLyAgICAgICAgaW50IG9yaWdpbmFsTGVuID0gbGVuOwotLy8gICAgICAgIFNwbGF5IGxhc3QgPSBnZXRGaW5pc2hTcGxheSgpOwotLy8KLS8vICAgICAgICBmb3IgKCBTcGxheSBzID0gdGhpcyA7IGxlbiA+IDAgJiYgcyAhPSBsYXN0IDsgcyA9IHMubmV4dFNwbGF5KCkgKQotLy8gICAgICAgIHsKLS8vICAgICAgICAgICAgaW50IHNyY0NwLCBzcmNDY2g7Ci0vLwotLy8gICAgICAgICAgICBpZiAocy5pc0JlZ2luKCkpCi0vLyAgICAgICAgICAgIHsKLS8vICAgICAgICAgICAgICAgIGlmIChzLmlzSW52YWxpZCgpKQotLy8gICAgICAgICAgICAgICAgICAgIHMuZW5zdXJlQ29udGVudFZhbGlkKCk7Ci0vLwotLy8gICAgICAgICAgICAgICAgc3JjQ3AgPSBjcDsKLS8vICAgICAgICAgICAgICAgIHNyY0NjaCA9IHMuZ2V0Q2NoKCk7Ci0vLyAgICAgICAgICAgIH0KLS8vICAgICAgICAgICAgZWxzZQotLy8gICAgICAgICAgICB7Ci0vLyAgICAgICAgICAgICAgICAvLyBJdCdzIG9rIGZvciBhbiBhdHRyIHRvIGJlIGludmFsaWQgaGVyZSwgZ2V0cyB0ZXh0IGFmdGVyCi0vLwotLy8gICAgICAgICAgICAgICAgc3JjQ3AgPSBjcCArIHMuZ2V0Q2NoVmFsdWUoKTsKLS8vICAgICAgICAgICAgICAgIHNyY0NjaCA9IHMuZ2V0Q2NoQWZ0ZXIoKTsKLS8vICAgICAgICAgICAgfQotLy8KLS8vICAgICAgICAgICAgaWYgKHNyY0NjaCA+IDApCi0vLyAgICAgICAgICAgIHsKLS8vICAgICAgICAgICAgICAgIGlmIChzcmNDY2ggPiBsZW4pCi0vLyAgICAgICAgICAgICAgICAgICAgc3JjQ2NoID0gbGVuOwotLy8KLS8vICAgICAgICAgICAgICAgIGludCBzcmNPZmYgPSByLl90ZXh0LnVuT2JzY3VyZSggc3JjQ3AsIHNyY0NjaCApOwotLy8KLS8vICAgICAgICAgICAgICAgIFN5c3RlbS5hcnJheUNvcHkoIHIuX3RleHQuX2J1Ziwgc3JjT2ZmLCBidWYsIG9mZiwgc3JjQ2NoICk7Ci0vLwotLy8gICAgICAgICAgICAgICAgbGVuIC09IHNyY0NjaDsKLS8vICAgICAgICAgICAgICAgIG9mZiArPSBzcmNDY2g7Ci0vLyAgICAgICAgICAgIH0KLS8vCi0vLyAgICAgICAgICAgIGNwICs9IHMuZ2V0Q2NoKCk7Ci0vLyAgICAgICAgfQotLy8KLS8vICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLS8vICAgIH0KLQotICAgIGZpbmFsIFN0cmluZyBnZXRUZXh0ICggUm9vdCByLCBpbnQgd3MgKQotICAgIHsKLSAgICAgICAgaWYgKGlzSW52YWxpZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaXNOb3JtYWxBdHRyKCkpCi0gICAgICAgICAgICAgICAgZW5zdXJlVmFsdWVWYWxpZCgpOwotICAgICAgICAgICAgZWxzZSBpZiAoaXNMZWFmKCkpCi0gICAgICAgICAgICAgICAgZW5zdXJlQ29udGVudFZhbGlkKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgY3AgPSByLmdldENwKCB0aGlzICk7Ci0KLSAgICAgICAgaWYgKGlzTm9ybWFsQXR0cigpIHx8IGlzQ29tbWVudCgpIHx8IGlzUHJvY2luc3QoKSB8fCBpc0xlYWYoKSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGNjaCA9IGdldENjaFZhbHVlKCk7Ci0KLSAgICAgICAgICAgIGlmIChjY2ggPT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gIiI7Ci0KLSAgICAgICAgICAgIGlmICh3cyA9PSBUeXBlU3RvcmUuV1NfUFJFU0VSVkUgfHwgd3MgPT0gVHlwZVN0b3JlLldTX1VOU1BFQ0lGSUVEKQotICAgICAgICAgICAgICAgIHJldHVybiByLl90ZXh0LmZldGNoKCBjcCwgY2NoICk7Ci0KLSAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQotICAgICAgICAgICAgc2NydWJUZXh0KCByLl90ZXh0LCB3cywgY3AsIGdldENjaFZhbHVlKCksIHNiLCBTVEFSVF9TVEFURSApOwotCi0gICAgICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaXNDb250YWluZXIoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIFNwbGF5IGxhc3QgPSBnZXRGaW5pc2hTcGxheSgpOwotCi0gICAgICAgIGludCBzY3J1YlN0YXRlID0gU1RBUlRfU1RBVEU7Ci0KLSAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0gICAgICAgIGZvciAoIFNwbGF5IHMgPSB0aGlzIDsgcyAhPSBsYXN0IDsgcyA9IHMubmV4dFNwbGF5KCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocy5pc0JlZ2luKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHMuaXNJbnZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgIHMuZW5zdXJlQ29udGVudFZhbGlkKCk7Ci0KLSAgICAgICAgICAgICAgICBzY3J1YlN0YXRlID0KLSAgICAgICAgICAgICAgICAgICAgc2NydWJUZXh0KAotICAgICAgICAgICAgICAgICAgICAgICAgci5fdGV4dCwgd3MsIGNwLCBzLmdldENjaCgpLCBzYiwgc2NydWJTdGF0ZSApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIEl0J3Mgb2sgZm9yIGFuIGF0dHIgdG8gYmUgaW52YWxpZCBoZXJlLCBnZXRzIHRleHQgYWZ0ZXIKLQotICAgICAgICAgICAgICAgIGludCBjY2hBZnRlciA9IHMuZ2V0Q2NoQWZ0ZXIoKTsKLQotICAgICAgICAgICAgICAgIGlmIChjY2hBZnRlciA+IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzY3J1YlN0YXRlID0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcnViVGV4dCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByLl90ZXh0LCB3cywgY3AgKyBzLmdldENjaFZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2NoQWZ0ZXIsIHNiLCBzY3J1YlN0YXRlICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjcCArPSBzLmdldENjaCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyBhbiBhdHRyIHNwbGF5IGZvciBhIGdpdmVuIGNvbnRhaW5lciwgbnVsbCBvdGhlcndpc2UuCi0gICAgICovCi0KLSAgICBTcGxheSBnZXRBdHRyICggUU5hbWUgbmFtZSApCi0gICAgewotICAgICAgICBhc3NlcnQgbmFtZSAhPSBudWxsOwotCi0gICAgICAgIGlmICghaXNDb250YWluZXIoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIGZvciAoIFNwbGF5IHMgPSBuZXh0U3BsYXkoKSA7IHMuaXNBdHRyKCkgOyBzID0gcy5uZXh0U3BsYXkoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzLmlzTm9ybWFsQXR0cigpICYmIHMuZ2V0TmFtZSgpLmVxdWFscyggbmFtZSApKQotICAgICAgICAgICAgICAgIHJldHVybiBzOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRYc2lOaWwgKCBSb290IHIsIGJvb2xlYW4gbmlsICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCBpc0NvbnRhaW5lcigpOwotCi0gICAgICAgIGlmIChnZXRYc2lOaWwoIHIgKSA9PSBuaWwpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgc2V0QXR0ciggciwgX3hzaU5pbCwgInRydWUiICk7Ci0gICAgfQotCi0gICAgYm9vbGVhbiBnZXRYc2lOaWwgKCBSb290IHIgKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IGlzQ29udGFpbmVyKCk7Ci0KLSAgICAgICAgU3BsYXkgczsKLQotICAgICAgICBmb3IgKCBzID0gbmV4dFNwbGF5KCkgOyBzLmlzQXR0cigpIDsgcyA9IHMubmV4dFNwbGF5KCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocy5pc1hzaU5pbCgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFzLmlzQXR0cigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFN0cmluZyB2YWx1ZSA9IHMuZ2V0VGV4dCggciwgVHlwZVN0b3JlLldTX0NPTExBUFNFICk7Ci0KLSAgICAgICAgcmV0dXJuIHZhbHVlLmVxdWFscyggInRydWUiICkgfHx2YWx1ZS5lcXVhbHMoICIxIiApOwotICAgIH0KLQotICAgIFFOYW1lIGdldFhzaVR5cGVOYW1lICggUm9vdCByICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCBpc0NvbnRhaW5lcigpOwotCi0gICAgICAgIFNwbGF5IHM7Ci0KLSAgICAgICAgZm9yICggcyA9IG5leHRTcGxheSgpIDsgcy5pc0F0dHIoKSA7IHMgPSBzLm5leHRTcGxheSgpICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHMuaXNYc2lUeXBlKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXMuaXNBdHRyKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICBhc3NlcnQgcy5pc1hzaVR5cGUoKTsKLQotICAgICAgICBTdHJpbmcgdmFsdWUgPSBzLmdldFRleHQoIHIsIFR5cGVTdG9yZS5XU19DT0xMQVBTRSApOwotCi0vLyBUT0RPIC0gdW5vYnNjdXJlIHRoZSB1bmRlcmx5aW5nIHRleHQgYW5kIHVzZSBpdCBkaXJlY3RseQotLy8gVE9ETyAtIHNob3VsZCBJIG1ha2Ugc3VyZSB0aGUgcHJlZml4IGlzIHdxZWxsIGZvcm1lZD8gaWUuIGp1c3QgdGV4dAotCi0gICAgICAgIFN0cmluZyBwcmVmaXgsIGxvY2FsbmFtZTsKLQotICAgICAgICBpbnQgZmlyc3Rjb2xvbiA9IHZhbHVlLmluZGV4T2YoICc6JyApOwotCi0gICAgICAgIGlmIChmaXJzdGNvbG9uID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByZWZpeCA9IHZhbHVlLnN1YnN0cmluZyggMCwgZmlyc3Rjb2xvbiApOwotICAgICAgICAgICAgbG9jYWxuYW1lID0gdmFsdWUuc3Vic3RyaW5nKCBmaXJzdGNvbG9uICsgMSApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcHJlZml4ID0gIiI7Ci0gICAgICAgICAgICBsb2NhbG5hbWUgPSB2YWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyB1cmkgPSBuYW1lc3BhY2VGb3JQcmVmaXgoIHByZWZpeCApOwotCi0gICAgICAgIGlmICh1cmkgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBubyBwcmVmaXggZGVmaW5pdGlvbiBmb3VuZCAtIHRoYXQncyBpbGxlZ2FsCi0KLSAgICAgICAgcmV0dXJuIG5ldyBRTmFtZSggdXJpLCBsb2NhbG5hbWUgKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldFhzaVR5cGUgKCBSb290IHIsIFFOYW1lIHR5cGVOYW1lICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCBpc0NvbnRhaW5lcigpOwotCi0gICAgICAgIGlmICh0eXBlTmFtZSA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICByZW1vdmVBdHRyKCByLCBfeHNpVHlwZSApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIHZhbHVlID0gdHlwZU5hbWUuZ2V0TG9jYWxQYXJ0KCk7Ci0KLSAgICAgICAgU3RyaW5nIG5zID0gdHlwZU5hbWUuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0KLSAgICAgICAgU3RyaW5nIHByZWZpeCA9IHByZWZpeEZvck5hbWVzcGFjZSggciwgbnMsIG51bGwsIHRydWUpOwotCi0gICAgICAgIGFzc2VydCBwcmVmaXggIT0gbnVsbCA6ICJDYW5ub3QgZXN0YWJsaXNoIHByZWZpeCBmb3IgIiArIG5zOwotCi0gICAgICAgIGlmIChwcmVmaXgubGVuZ3RoKCkgPiAwKQotICAgICAgICAgICAgdmFsdWUgPSBwcmVmaXggKyAiOiIgKyB2YWx1ZTsKLQotICAgICAgICBib29sZWFuIHNldCA9IGZhbHNlOwotCi0gICAgICAgIHNldEF0dHIoIHIsIF94c2lUeXBlLCB2YWx1ZSApOwotICAgIH0KLQotICAgIHZvaWQgcmVtb3ZlQXR0ciAoIFJvb3QgciwgUU5hbWUgYXR0ck5hbWUgKQotICAgIHsKLSAgICAgICAgU3BsYXkgbmV4dDsKLSAgICAgICAgZm9yICggU3BsYXkgcyA9IG5leHRTcGxheSgpIDsgcy5pc0F0dHIoKSA7IHMgPSBuZXh0ICkKLSAgICAgICAgewotICAgICAgICAgICAgbmV4dCA9IHMubmV4dFNwbGF5KCk7Ci0KLSAgICAgICAgICAgIGlmIChzLmdldE5hbWUoKS5lcXVhbHMoIGF0dHJOYW1lICkpCi0gICAgICAgICAgICAgICAgcy5yZW1vdmUoIHIsIHRydWUgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgc2V0QXR0ciAoIFJvb3QgciwgUU5hbWUgYXR0ck5hbWUsIFN0cmluZyB2YWx1ZSApCi0gICAgewotICAgICAgICBhc3NlcnQgaXNDb250YWluZXIoKTsKLSAgICAgICAgYXNzZXJ0IGF0dHJOYW1lICE9IG51bGw7Ci0gICAgICAgIGFzc2VydCB2YWx1ZSAhPSBudWxsOwotCi0gICAgICAgIGJvb2xlYW4gc2V0ID0gZmFsc2U7Ci0KLSAgICAgICAgU3BsYXkgbmV4dDsKLSAgICAgICAgZm9yICggU3BsYXkgcyA9IG5leHRTcGxheSgpIDsgcy5pc0F0dHIoKSA7IHMgPSBuZXh0ICkKLSAgICAgICAgewotICAgICAgICAgICAgbmV4dCA9IHMubmV4dFNwbGF5KCk7Ci0KLSAgICAgICAgICAgIGlmIChzLmdldE5hbWUoKS5lcXVhbHMoIGF0dHJOYW1lICkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHNldCkKLSAgICAgICAgICAgICAgICAgICAgcy5yZW1vdmUoIHIsIHRydWUgKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzLnNldFRleHQoIHIsIHZhbHVlLCAwLCB2YWx1ZS5sZW5ndGgoKSApOwotICAgICAgICAgICAgICAgICAgICBzZXQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICghc2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBTcGxheSBzSW5zZXJ0ID0gdGhpczsKLSAgICAgICAgICAgIGludCAgIHBJbnNlcnQgPSAxOwotCi0gICAgICAgICAgICBpZiAoIWlzTGVhZigpICYmIGdldENjaCgpID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc0luc2VydCA9IG5leHRTcGxheSgpOwotICAgICAgICAgICAgICAgIHBJbnNlcnQgPSAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbnQgY2NoVmFsdWUgPSB2YWx1ZS5sZW5ndGgoKTsKLQotICAgICAgICAgICAgQXR0ciBhdHRyID0gbmV3IEF0dHIoIGF0dHJOYW1lICk7Ci0gICAgICAgICAgICBhdHRyLmFkanVzdENjaCggY2NoVmFsdWUgKTsKLQotICAgICAgICAgICAgc0luc2VydC5pbnNlcnQoIHIsIHBJbnNlcnQsIGF0dHIsIHZhbHVlLCAwLCBjY2hWYWx1ZSwgZmFsc2UgKTsKLSAgICAgICAgfQotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgY29udGVudC92YWx1ZSBvZiB0aGlzIHNwbGF5IHRvIHRoZSBnaXZlbiB0ZXh0LgotICAgICAqLwotCi0gICAgZmluYWwgdm9pZCBzZXRUZXh0ICggUm9vdCByLCBPYmplY3QgdHh0LCBpbnQgb2ZmLCBpbnQgY2NoICkKLSAgICB7Ci0gICAgICAgIHJlbW92ZUNvbnRlbnQoIHIsIGZhbHNlICk7Ci0KLSAgICAgICAgaWYgKHR4dCA9PSBudWxsIHx8IGNjaCA9PSAwKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHN3aXRjaCAoIGdldEtpbmQoKSApCi0gICAgICAgIHsKLSAgICAgICAgY2FzZSBET0MgOgotICAgICAgICBjYXNlIEJFR0lOIDoKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0ICFpc0JlZ2luKCkgfHwgaXNMZWFmKCk7Ci0gICAgICAgICAgICBpbnNlcnRDaGFycyggMSwgciwgdHh0LCBvZmYsIGNjaCApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBVFRSIDoKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzWG1sbnMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQgZmFsc2U6ICJVbmV4cGVjdGVkIGtpbmQgZm9yIHNldFRleHQiOwotICAgICAgICAgICAgfQotLy8gVE9ETyAtIGlmIHNldHRpbmcgdGV4dCBvZiB4c2k6dHlwZSBvciB4c2k6bmlsIG11c3QgZG8gc3R1ZmYKLS8vIFRPRE8gLSBpZiBzZXR0aW5nIHRleHQgb2YgeHNpOnR5cGUgb3IgeHNpOm5pbCBtdXN0IGRvIHN0dWZmCi0vLyBUT0RPIC0gaWYgc2V0dGluZyB0ZXh0IG9mIHhzaTp0eXBlIG9yIHhzaTpuaWwgbXVzdCBkbyBzdHVmZgotLy8gVE9ETyAtIGlmIHNldHRpbmcgdGV4dCBvZiB4c2k6dHlwZSBvciB4c2k6bmlsIG11c3QgZG8gc3R1ZmYKLQotICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoCi0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDT01NRU5UICA6Ci0gICAgICAgIGNhc2UgUFJPQ0lOU1QgOgotICAgICAgICB7Ci0gICAgICAgICAgICByLnN0YXJ0Q2hhbmdlKCk7Ci0KLSAgICAgICAgICAgIGFzc2VydCBnZXRDY2hWYWx1ZSgpID09IDA7Ci0KLSAgICAgICAgICAgIHIuX3RleHQuaW5zZXJ0KCByLmdldENwKCB0aGlzICksIHR4dCwgb2ZmLCBjY2ggKTsKLSAgICAgICAgICAgIHIudXBkYXRlQ2NoKCB0aGlzLCBjY2ggKTsKLQotICAgICAgICAgICAgaWYgKGdldEtpbmQoKSA9PSBBVFRSKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludmFsaWRhdGVUZXh0KCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaXNYc2lUeXBlKCkpCi0gICAgICAgICAgICAgICAgICAgIGdldENvbnRhaW5lcigpLmRpc2Nvbm5lY3RUeXBlcyggciApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByLmludmFsaWRhdGVWZXJzaW9uKCk7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQgOgotICAgICAgICAgICAgYXNzZXJ0IGZhbHNlOiAiVW5leHBlY3RlZCBraW5kIGZvciBzZXRUZXh0IjsKLSAgICAgICAgfQotCi0gICAgICAgIGFzc2VydCB2YWxpZGF0ZSgpOwotICAgIH0KLQotICAgIGZpbmFsIE1hcCBsb29rdXBBbGxQcmVmaXhNYXBwaW5ncyAoICkKLSAgICB7Ci0gICAgICAgIE1hcCBtYXBwaW5ncyA9IG51bGw7Ci0KLSAgICAgICAgU3BsYXkgY29udGFpbmVyID0gdGhpcy5pc0NvbnRhaW5lcigpID8gdGhpcyA6IGdldENvbnRhaW5lcigpOwotCi0gICAgICAgIGZvciAoIDsgY29udGFpbmVyICE9IG51bGwgOyBjb250YWluZXIgPSBjb250YWluZXIuZ2V0Q29udGFpbmVyKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKCBTcGxheSBzID0gY29udGFpbmVyLm5leHRTcGxheSgpIDsgcy5pc0F0dHIoKSA7Ci0gICAgICAgICAgICAgICAgICBzID0gcy5uZXh0U3BsYXkoKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHMuaXNYbWxucygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1hcHBpbmdzID09IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5ncyA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1hcHBpbmdzLmNvbnRhaW5zS2V5KCBzLmdldExvY2FsKCkgKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgICAgIG1hcHBpbmdzLnB1dCggcy5nZXRMb2NhbCgpLCBzLmdldFVyaSgpICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1hcHBpbmdzOwotICAgIH0KLQotICAgIGZpbmFsIHZvaWQgYXBwbHlOYW1lc3BhY2VzICggUm9vdCByLCBNYXAgbmFtZXNwYWNlcyApCi0gICAgewotICAgICAgICBpZiAobmFtZXNwYWNlcyA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFNwbGF5IGNvbnRhaW5lciA9IHRoaXMuaXNDb250YWluZXIoKSA/IHRoaXMgOiBnZXRDb250YWluZXIoKTsKLQotICAgICAgICBuYW1lc3BhY2VfbG9vcDoKLSAgICAgICAgZm9yICggSXRlcmF0b3IgaSA9IG5hbWVzcGFjZXMua2V5U2V0KCkuaXRlcmF0b3IoKSA7IGkuaGFzTmV4dCgpIDsgKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gKFN0cmluZykgaS5uZXh0KCk7Ci0KLSAgICAgICAgICAgIC8vIFVzdWFsbHksIHRoaXMgaXMgdGhlIHByZWRlZmluZWQgeG1sIG5hbWVzcGFjZQotICAgICAgICAgICAgaWYgKHByZWZpeC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoICJ4bWwiICkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIFN0cmluZyBuYW1lc3BhY2UgPSAoU3RyaW5nKSBuYW1lc3BhY2VzLmdldCggcHJlZml4ICk7Ci0KLSAgICAgICAgICAgIFNwbGF5IGNhbmRpZGF0ZSA9IGNvbnRhaW5lcjsKLQotICAgICAgICAgICAgY2FuZGlkYXRlX2xvb3A6Ci0gICAgICAgICAgICBmb3IgKCBTcGxheSBjID0gY29udGFpbmVyLmdldENvbnRhaW5lcigpIDsgYyAhPSBudWxsICYmICFjLmlzRG9jKCkgOwotICAgICAgICAgICAgICAgICAgYyA9IGMuZ2V0Q29udGFpbmVyKCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoIFNwbGF5IHMgPSBjLm5leHRTcGxheSgpIDsgcy5pc0F0dHIoKSA7IHMgPSBzLm5leHRTcGxheSgpICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzLmlzWG1sbnMoKSAmJiBwcmVmaXguZXF1YWxzKCBzLmdldExvY2FsKCkgKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWVzcGFjZS5lcXVhbHMoIHMuZ2V0VXJpKCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgbmFtZXNwYWNlX2xvb3A7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGNhbmRpZGF0ZV9sb29wOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY2FuZGlkYXRlID0gYzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBuZXcgbmFtZXNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGF0dHIgbGlzdCBhZnRlcgotICAgICAgICAgICAgLy8gbWFrZWluZyBzdXJlIGFsbCBwcmV2aW91cyBtYXBwaW5ncyBhcmUgZ29uZQotICAgICAgICAgICAgUU5hbWUgcW5hbWUgPSBuZXcgUU5hbWUoIG5hbWVzcGFjZSwgcHJlZml4ICk7Ci0KLSAgICAgICAgICAgIHJlbW92ZUF0dHIoIHIsIHFuYW1lICk7Ci0KLSAgICAgICAgICAgIGNhbmRpZGF0ZS5uZXh0Tm9uQXR0clNwbGF5KCkuaW5zZXJ0KAotICAgICAgICAgICAgICAgIHIsIDAsIG5ldyBYbWxucyggcW5hbWUgKSwgbnVsbCwgMCwgMCwgZmFsc2UgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIHByZWZpeCBhc3NvY2lhdGVkIHdpdGggdGhpcyBhdHRyL2VsZW1lbnQuCi0gICAgICovCi0gICAgZmluYWwgU3RyaW5nIGdldFByZWZpeCAoIFJvb3QgciApCi0gICAgewotICAgICAgICBhc3NlcnQgaXNCZWdpbigpIHx8IGlzQXR0cigpOwotCi0gICAgICAgIGlmIChpc1htbG5zKCkpCi0gICAgICAgICAgICByZXR1cm4gInhtbG5zIjsKLQotICAgICAgICAvLyBUT0RPIC0gaGF2ZSBhIHByZWZpeCBnb29iZXIgdG8gb3ZlcnJpZGUgdGhlIG1hcHBpbmcgb24gdGhlIGZyb250aWVyLgotICAgICAgICAvLyBQYXJzZXIgd2lsbCBhZGQgdGhpcyB3aGVuIHRoZSBuYXR1cmFsIHByZWZpeCBpcyBub3QgdGhlIHJlYWwgcHJlZml4LgotCi0gICAgICAgIFNwbGF5IGMgPSBpc0JlZ2luKCkgPyB0aGlzIDogZ2V0Q29udGFpbmVyKCk7Ci0KLSAgICAgICAgLy8gc3BlY2lhbCBjYXNlCi0gICAgICAgIFN0cmluZyBucyA9IGdldFVyaSgpOwotCi0gICAgICAgIC8vIGxhc3QgYXJndW1lbnQgaXMgZmFsc2UsIHdoaWNoIG1lYW5zLCBkb24ndCBtb2RpZnkgdGhlIHRyZWUKLSAgICAgICAgcmV0dXJuIHByZWZpeEZvck5hbWVzcGFjZSggciwgbnMsIG51bGwsIGZhbHNlICk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2l2ZW4gYSBwcmVmaXgsIHJldHVybnMgdGhlIG5hbWVzcGFjZSBjb3JyZXNwb25kaW5nIHRvCi0gICAgICogdGhlIHByZWZpeCBhdCB0aGlzIGxvY2F0aW9uLCBvciBudWxsIGlmIHRoZXJlIGlzIG5vIG1hcHBpbmcKLSAgICAgKiBmb3IgdGhpcyBwcmVmaXguCi0gICAgICogPHA+Ci0gICAgICogcHJlZml4PSIiIGluZGljYXRlcyB0aGUgYWJzZW5jZSBvZiBhIHByZWZpeC4gIEEgcmV0dXJuIHZhbHVlCi0gICAgICogb2YgIiIgaW5kaWNhdGVzIHRoZSBuby1uYW1lc3BhY2UsIGFuZCBzaG91bGQgbm90IGJlIGNvbmZ1c2VkCi0gICAgICogd2l0aCBhIHJldHVybiB2YWx1ZSBvZiBudWxsLCB3aGljaCBpbmRpY2F0ZXMgYW4gaWxsZWdhbAotICAgICAqIHN0YXRlLCB3aGVyZSB0aGVyZSBpcyBubyBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gcHJlZml4LgotICAgICAqIDxwPgotICAgICAqIFRoaXMgZnVuY3Rpb24gaW50ZXJjZXB0cyB0aGUgYnVpbHQtaW4gcHJlZml4ZXMgInhtbCIgYW5kCi0gICAgICogInhtbG5zIiBhbmQgcmV0dXJucyB0aGVpciB3ZWxsLWtub3duIG5hbWVzcGFjZSBVUklzLgotICAgICAqCi0gICAgICogQHBhcmFtIHByZWZpeCBUaGUgcHJlZml4IHRvIGxvb2sgdXAuCi0gICAgICogQHJldHVybiBUaGUgbWFwcGVkIG5hbWVzcGFjZSBVUkkgKCIiIGlmIG5vLW5hbWVzcGFjZSksIG9yIG51bGwgaWYgbm8gbWFwcGluZy4KLSAgICAgKi8KLSAgICBmaW5hbCBTdHJpbmcgbmFtZXNwYWNlRm9yUHJlZml4ICggU3RyaW5nIHByZWZpeCApCi0gICAgewotICAgICAgICAvLyBudWxsIHNhbWUgYXMgIiIsIG1lYW5zIGxvb2sgdXAgdGhlIGRlZmF1bHQgbmFtZXNwYWNlCi0gICAgICAgIGlmIChwcmVmaXggPT0gbnVsbCkKLSAgICAgICAgICAgIHByZWZpeCA9ICIiOwotCi0gICAgICAgIC8vIGhhbmRsZSBidWlsdC1pbiBwcmVmaXhlcwotICAgICAgICBpZiAoInhtbCIuZXF1YWxzKHByZWZpeCkpCi0gICAgICAgICAgICByZXR1cm4gX3htbDE5OThVcmk7Ci0gICAgICAgIGlmICgieG1sbnMiLmVxdWFscyhwcmVmaXgpKQotICAgICAgICAgICAgcmV0dXJuIF94bWxuc1VyaTsKLQotICAgICAgICBhc3NlcnQgaXNDb250YWluZXIoKTsKLQotICAgICAgICAvLyBmaW5kIGFuIHhtbG5zIGRlY2wKLSAgICAgICAgZm9yICggQ29udGFpbmVyIGMgPSAoQ29udGFpbmVyKSB0aGlzIDsgYyAhPSBudWxsIDsgYyA9IGMuZ2V0Q29udGFpbmVyKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoIFNwbGF5IHMgPSBjLm5leHRTcGxheSgpIDsgcy5pc0F0dHIoKSA7IHMgPSBzLm5leHRTcGxheSgpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAocy5pc1htbG5zKCkgJiYgcHJlZml4LmVxdWFscyggcy5nZXRMb2NhbCgpICkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzLmdldFVyaSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbm8geG1sbnMgZGVjbD8gIG5vIHByb2JsZW0gZm9yIHRoZSBkZWZhdWx0IG5hbWVzcGFjZQotICAgICAgICBpZiAocHJlZml4Lmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICByZXR1cm4gIiI7Ci0KLSAgICAgICAgLy8gbm8gbmFtZXNwYWNlIGRlZm4gZm91bmQ6IHJldHVybiBudWxsCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgcHJlZml4IHRvIHVzZSBmb3IgYSBnaXZlbiBuYW1lc3BhY2UgVVJJLiAgQ2FuIGVpdGhlcgotICAgICAqIGJlIGFsbG93ZWQgdG8gbW9kaWZ5IHRoZSB0cmVlIHRvIGVuc3VyZSBzdWNoIGEgbWFwcGluZyAoaWYgcgotICAgICAqIGlzIG5vbi1udWxsKSwgb3IgY2FuIGJlIHRvbGQgdG8gcmV0dXJuIG51bGwgaWYgdGhlcmUgaXMgbm8KLSAgICAgKiBleGlzdGluZyBtYXBwaW5nIChpZiByIGlzIG51bGwpLgotICAgICAqIDxwPgotICAgICAqIEZvciB0aGUgY2FzZSB3aGVyZSB0aGUgdHJlZSBtYXkgYmUgbW9kaWZpZWQsIGEgc3VnZ2VzdGVkIHByZWZpeAotICAgICAqIGNhbiBiZSBzdXBwbGllZC4gIFRoZSBzdWdnZXN0aW9uIG1heSBiZSBpZ25vcmVkIGZvciBhbnkgcmVhc29uLAotICAgICAqIGZvciBleGFtcGxlLCBpZiB0aGUgcHJlZml4IGlzIGFscmVhZHkgaW4tdXNlLgotICAgICAqIDxwPgotICAgICAqIFJldHVybnMgInhtbCIgYW5kICJ4bWxucyIgZm9yIHRoZSB3ZWxsLWtub3duIG5hbWVzcGFjZSBVUklzCi0gICAgICogY29ycmVzcG9uZGluZyB0byB0aG9zZSBidWlsdC1pbiBwcmVmaXhlcy4KLSAgICAgKgotICAgICAqIEBwYXJhbSByICAgICAgIHNob3VsZCBiZSBudWxsIGlmIHlvdSBkb24ndCB3YW50IHRvIG1vZGlmeSB0aGUgdHJlZS4KLSAgICAgKiAgICAgICAgICAgICAgICBpZiBhIHByZWZpeCBjYW4ndCBiZSBmb3VuZCwgbnVsbCB3aWxsIGJlIHJldHVybmVkCi0gICAgICogICAgICAgICAgICAgICAgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgYW4geG1sbnMuCi0gICAgICogQHBhcmFtIG5zICAgICAgdGhlIG5hbWVzcGFjZSB0byBsb29rIGZvciBvciBpbnRyb2R1Y2UgYSBtYXBwaW5nIGZvci4KLSAgICAgKiAgICAgICAgICAgICAgICBjYXJlZnVsIHdpdGggIiIsIGJlY2F1c2UgaXQgbWF5IGhhdmUgbm9ubG9jYWwgZWZmZWN0cwotICAgICAqICAgICAgICAgICAgICAgIGlmIHNvbWVib2R5IGhhcyBvdmVycmlkZGVuIHRoZSBkZWZhdWx0IG5hbWVzcGFjZS4KLSAgICAgKiBAcGFyYW0gc3VnZ2VzdGlvbiAgYSBzdWdnZXN0ZWQgcHJlZml4IHRvIHRyeSBmaXJzdDsgbWF5IGJlIG51bGwuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gY3JlYXRlSWZNaXNzaW5nIHRydWUgKG5vcm1hbGx5IGl0J3MgdHJ1ZSkgaWYgeW91IHdhbnQgdG8gY3JlYXRlCi0gICAgICogICAgICAgICAgICAgICAgYW4geG1sbnMgZGVjbGFyYXRpb24gd2hlbiBvbmUgZG9lc24ndCBhbHJlYWR5IGV4aXN0IGZvcgotICAgICAqICAgICAgICAgICAgICAgIHlvdXIgcmVxdWVzdGVkIFVSSS4gIElmIHlvdSBkb24ndCB3YW50IHRvIG1vZGlmeSB0aGUgdHJlZSwKLSAgICAgKiAgICAgICAgICAgICAgICBwYXNzIGZhbHNlLgotICAgICAqLwotICAgIGZpbmFsIFN0cmluZyBwcmVmaXhGb3JOYW1lc3BhY2UgKCAgUm9vdCByLCBTdHJpbmcgbnMsIFN0cmluZyBzdWdnZXN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBjcmVhdGVJZk1pc3NpbmcgKQotICAgIHsKLSAgICAgICAgLy8gbnVsbCBzYW1lIGFzIGVtcHR5IHN0cmluZywgbWVhbnMgbm8tbmFtZXNwYWNlCi0gICAgICAgIGlmIChucyA9PSBudWxsKQotICAgICAgICAgICAgbnMgPSAiIjsKLQotICAgICAgICAvLyBzcGVjaWFsIGNhc2VzCi0gICAgICAgIGlmIChfeG1sMTk5OFVyaS5lcXVhbHMoIG5zICkpCi0gICAgICAgICAgICByZXR1cm4gInhtbCI7Ci0gICAgICAgIGlmIChfeG1sbnNVcmkuZXF1YWxzKCBucyApKQotICAgICAgICAgICAgcmV0dXJuICJ4bWxucyI7Ci0KLSAgICAgICAgYXNzZXJ0IGlzQ29udGFpbmVyKCk7Ci0KLSAgICAgICAgQ29udGFpbmVyIGM7Ci0gICAgICAgIFNwbGF5IHM7Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gU3BlY2lhbCBoYW5kbGluZyBpcyBucyBpcyBub3Qgc3BlY2lmaWVkIChubyBuYW1lc3BhY2UpCi0gICAgICAgIC8vCi0KLSAgICAgICAgaWYgKG5zLmxlbmd0aCgpID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvb3A6Ci0gICAgICAgICAgICBmb3IgKCBjID0gKENvbnRhaW5lcikgdGhpcyA7IGMgIT0gbnVsbCA7IGMgPSBjLmdldENvbnRhaW5lcigpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKCBzID0gYy5uZXh0U3BsYXkoKSA7IHMuaXNBdHRyKCkgOyBzID0gcy5uZXh0U3BsYXkoKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAocy5pc1htbG5zKCkgJiYgcy5nZXRMb2NhbCgpLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzLmdldFVyaSgpLmxlbmd0aCgpID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHMuZ2V0TG9jYWwoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbG9vcDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG92ZXJyaWRkZW4gZGVmYXVsdCBuYW1lc3BhY2UgaW4gc2NvcGUsCi0gICAgICAgICAgICAvLyByZXR1cm4gIiIgLSB0aGUgZGVmYXVsdCBkZWZhdWx0IG5hbWVzcGFjZSBpcyB0aGUgbm8tbmFtZXBzYWNlLgotICAgICAgICAgICAgLy8KLQotICAgICAgICAgICAgaWYgKCBjID09IG51bGwgKQotICAgICAgICAgICAgICAgIHJldHVybiAiIjsKLQotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIElmIHdlIGZvdW5kIGEgcHJvYmxlbWF0aWMgZGVmYXVsdCBuYW1lc3BhY2UgYnV0IGNhbm5vdCBtb2RpZnkKLSAgICAgICAgICAgIC8vIHRoZSB0cmVlLCByZXR1cm4gbnVsbCAtIG5vIHByZWZpeCBhdmFpbGFibGUuCi0gICAgICAgICAgICAvLwotCi0gICAgICAgICAgICBpZiAoICFjcmVhdGVJZk1pc3NpbmcgKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSBkZWZhdWx0IG5hbWVzcGFjZSB3aGljaCBtYXBzIHRvIGEgJ3JlYWwnIG5hbWVzcGFjZSwKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBhIGRlZmF1bHQgbmFtZXNwYWNlIG9uIHRoaXMgY29udGFpbmVyIHdoaWNoIGlzICIiLiAgVGhpcwotICAgICAgICAgICAgLy8gY2FuIHNjcmV3IGF0dHJpYnV0ZXMgYW5kIHN1Y2gsIGJ1dCwgb2ggd2VsbC4KLSAgICAgICAgICAgIC8vCi0KLSAgICAgICAgICAgIGZvciAoIHMgPSBuZXh0U3BsYXkoKSA7IHMuaXNBdHRyKCkgOyBzID0gcy5uZXh0U3BsYXkoKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHMuaXNYbWxucygpICYmIHMuZ2V0TG9jYWwoKS5sZW5ndGgoKSA9PSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcy5zZXROYW1lKCByLCBuZXcgUU5hbWUoICIiLCAiIiApICk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzLmdldExvY2FsKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyB0aGlzIGlzIGFuIHhtbG5zPSIiIGRlY2xhcmF0aW9uCi0KLSAgICAgICAgICAgIEF0dHIgYSA9IG5ldyBYbWxucyggbmV3IFFOYW1lKCAiIiwgIiIgKSApOwotCi0gICAgICAgICAgICByLnN0YXJ0Q2hhbmdlKCk7Ci0KLSAgICAgICAgICAgIHIuaW5zZXJ0U3BsYXkoIGEsIHRoaXMgKTsKLQotICAgICAgICAgICAgci5pbnZhbGlkYXRlVmVyc2lvbigpOwotCi0gICAgICAgICAgICByZXR1cm4gYS5nZXRMb2NhbCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gdGhlIG9yZGluYXJ5IG5vdC1hLW5vLW5hbWVzcGFjZSBjYXNlCi0gICAgICAgIC8vCi0KLSAgICAgICAgYXNzZXJ0IG5zICE9IG51bGwgJiYgbnMubGVuZ3RoKCkgPiAwOwotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIGxvb2sgZm9yIGFuIGV4aXN0aW5nIHByZWZpeCBmb3IgdGhlIHJlcXVlc3RlZCBVUkkKLSAgICAgICAgLy8KLQotICAgICAgICBmb3IgKCBjID0gKENvbnRhaW5lcikgdGhpcyA7IGMgIT0gbnVsbCA7IGMgPSBjLmdldENvbnRhaW5lcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgZmluZHhtbG5zOiBmb3IgKCBzID0gYy5uZXh0U3BsYXkoKSA7IHMuaXNBdHRyKCkgOyBzID0gcy5uZXh0U3BsYXkoKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHMuaXNYbWxucygpICYmIHMuZ2V0VXJpKCkuZXF1YWxzKCBucyApKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHMuZ2V0TG9jYWwoKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBub3cgY2hlY2sgdG8gdmVyaWZ5IHRoYXQgdGhlIHByZWZpeCBpc24ndCBtYXNrZWQKLSAgICAgICAgICAgICAgICAgICAgZm9yICggQ29udGFpbmVyIGMyID0gKENvbnRhaW5lcikgdGhpcyA7IGMyICE9IGMgOyBjMiA9IGMyLmdldENvbnRhaW5lcigpICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICggU3BsYXkgczIgPSBjMi5uZXh0U3BsYXkoKSA7IHMyLmlzQXR0cigpIDsgczIgPSBzMi5uZXh0U3BsYXkoKSApCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMyLmlzWG1sbnMoKSAmJiBzMi5nZXRMb2NhbCgpLmVxdWFscyhyZXN1bHQpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSBmaW5keG1sbnM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBub3QgbWFza2VkOiBPSy4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLwotICAgICAgICAvLyBXZSBjb3VsZCBub3QgZmluZCBhbiBleGlzdGluZyBwcmVmaXggaW4tc2NvcGUgdGhhdCB3b3Jrcy4KLSAgICAgICAgLy8gSWYgIWNyZWF0ZUlmTWlzc2luZywgZG9uJ3QgbW9kaWZ5IHRoZSB0cmVlIC0gcmV0dXJuIG51bGwgaW5zdGVhZC4KLSAgICAgICAgLy8KLQotICAgICAgICBpZiAoIWNyZWF0ZUlmTWlzc2luZykKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFdlIG11c3QgYWRkIGFuIHhtbG5zOnNvbWV0aGluZz0idXJpIiwgc28gd2UgbXVzdCBwaWNrIGEgcHJlZml4LgotICAgICAgICAvLyBXZSB3aWxsIHVzZSB0aGUgc3VnZ2VzdGlvbiBpZiBpdCdzIG5vdCBhbHJlYWR5IGluIHNjb3BlIGFuZCBpZgotICAgICAgICAvLyBpdCdzIG5vdCB0aGUgZW1wdHkgc3RyaW5nIG9yIGFuIGlsbGVnYWwgcHJlZml4LgotICAgICAgICAvLwotCi0gICAgICAgIGlmIChzdWdnZXN0aW9uICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uLmxlbmd0aCgpID09IDAgfHwgc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoICJ4bWwiICkpCi0gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbiA9IG51bGw7IC8vIGJhZCBzdWdnZXN0aW9uCi0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yICggYyA9IChDb250YWluZXIpIHRoaXMgOyBjICE9IG51bGwgOyBjID0gYy5nZXRDb250YWluZXIoKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBmb3IgKCBzID0gYy5uZXh0U3BsYXkoKSA7IHMuaXNBdHRyKCkgOyBzID0gcy5uZXh0U3BsYXkoKSApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzLmlzWG1sbnMoKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmdldExvY2FsKCkuZXF1YWxzKCBzdWdnZXN0aW9uICkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbiA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLwotICAgICAgICAvLyBJZiBubyBzdWdnZXN0aW9uLCBjb21lIHVwIHdpdGggYSBzYWZlIHByZWZpeCB0byB1c2UKLSAgICAgICAgLy8KLQotICAgICAgICBpZiAoc3VnZ2VzdGlvbiA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgYmFzZSA9IFFOYW1lSGVscGVyLnN1Z2dlc3RQcmVmaXgobnMpOwotICAgICAgICAgICAgc3VnZ2VzdGlvbiA9IGJhc2U7Ci0gICAgICAgICAgICBmb3IgKCBpbnQgaSA9IDEgOyA7IGkrKyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbG9vcDoKLSAgICAgICAgICAgICAgICBmb3IgKCBjID0gKENvbnRhaW5lcikgdGhpcyA7IGMgIT0gbnVsbCA7IGMgPSBjLmdldENvbnRhaW5lcigpICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoIHMgPSBjLm5leHRTcGxheSgpIDsgcy5pc0F0dHIoKSA7IHMgPSBzLm5leHRTcGxheSgpICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMuaXNYbWxucygpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmdldExvY2FsKCkuZXF1YWxzKCBzdWdnZXN0aW9uICkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbiA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbG9vcDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChzdWdnZXN0aW9uICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbiA9IGJhc2UgKyBpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQ29udGFpbmVyIHRhcmdldCA9IG51bGw7Ci0gICAgICAgIENvbnRhaW5lciBsYXN0Q29udGFpbmVyID0gbnVsbDsKLQotICAgICAgICBmb3IgKCBjID0gKENvbnRhaW5lcikgdGhpcyA7IGMgIT0gbnVsbCA7IGMgPSBjLmdldENvbnRhaW5lcigpICkKLSAgICAgICAgewotICAgICAgICAgICAgbGFzdENvbnRhaW5lciA9IGM7Ci0KLSAgICAgICAgICAgIGlmIChjLmlzQmVnaW4oKSkKLSAgICAgICAgICAgICAgICB0YXJnZXQgPSBjOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRhcmdldCA9PSBudWxsKQotICAgICAgICAgICAgdGFyZ2V0ID0gbGFzdENvbnRhaW5lcjsKLQotICAgICAgICBBdHRyIGEgPSBuZXcgWG1sbnMoIG5ldyBRTmFtZSggbnMsIHN1Z2dlc3Rpb24gKSApOwotCi0gICAgICAgIHIuc3RhcnRDaGFuZ2UoKTsKLQotICAgICAgICByLmluc2VydFNwbGF5KCBhLCB0YXJnZXQgKTsKLQotICAgICAgICByLmludmFsaWRhdGVWZXJzaW9uKCk7Ci0KLSAgICAgICAgcmV0dXJuIGEuZ2V0TG9jYWwoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXRzIHRoZSBjb250YWluZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb250ZW50IGF0IHBvcyBpbiB0aGlzCi0gICAgICogc3BsYXkuCi0gICAgICovCi0KLSAgICBmaW5hbCBDb250YWluZXIgZ2V0Q29udGFpbmVyICggaW50IHAgKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IHAgPj0gMCAmJiBwIDw9IGdldEVuZFBvcygpOwotICAgICAgICBhc3NlcnQgcCA+IDAgfHwgIWlzRG9jKCk7Ci0KLSAgICAgICAgaWYgKHAgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiBnZXRDb250YWluZXIoKTsKLQotICAgICAgICBpZiAoaXNMZWFmKCkpCi0gICAgICAgICAgICByZXR1cm4gcCA8IGdldFBvc0FmdGVyKCkgPyAoQ29udGFpbmVyKSB0aGlzIDogZ2V0Q29udGFpbmVyKCk7Ci0KLSAgICAgICAgaWYgKGlzQ29udGFpbmVyKCkpCi0gICAgICAgICAgICByZXR1cm4gKENvbnRhaW5lcikgdGhpczsKLQotICAgICAgICBpZiAoaXNGaW5pc2goKSkKLSAgICAgICAgICAgIHJldHVybiBnZXRDb250YWluZXIoKS5nZXRDb250YWluZXIoKTsKLQotICAgICAgICByZXR1cm4gZ2V0Q29udGFpbmVyKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgc3BsYXkgd2hpY2ggY29udGFpbnMgdGhpcyBzcGxheS4KLSAgICAgKi8KLQotICAgIGFic3RyYWN0IENvbnRhaW5lciBnZXRDb250YWluZXIgKCApOwotCi0gICAgLyoqCi0gICAgICogSGVscGVyIGZjbiB0byBsb2NhdGUgdGhlIGNvbnRhaW5lciB0aGlzIHNwbGF5IGlzIGNvbnRhaW5lciBpbi4KLSAgICAgKiBTaG91bGQgb25seSBiZSBjYWxsZWQgYnkgaW1wbGVtZW50YXRpb25zIG9mIGdldENvbnRhaW5lciBpbgotICAgICAqIGNhc2VzIHdoZXJlIHRoZSBjb250YWluZXIgaXMgbm90IG9idmlvdXNseSBjb21wdXRhYmxlLgotICAgICAqLwotCi0gICAgQ29udGFpbmVyIGZpbmRDb250YWluZXIgKCApCi0gICAgewotICAgICAgICBhc3NlcnQgIWlzQ29udGFpbmVyKCk7Ci0gICAgICAgIGFzc2VydCAhaXNGaW5pc2goKTsKLQotICAgICAgICBTcGxheSBzID0gbmV4dFNwbGF5KCk7Ci0KLSAgICAgICAgd2hpbGUgKCAhcy5pc0ZpbmlzaCgpICYmICFzLmlzQmVnaW4oKSApCi0gICAgICAgICAgICBzID0gcy5uZXh0U3BsYXkoKTsKLQotICAgICAgICByZXR1cm4gcy5nZXRDb250YWluZXIoKTsKLSAgICB9Ci0KLSAgICBmaW5hbCB2b2lkIGludmFsaWRhdGVUZXh0ICggKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IGlzVmFsaWQoKTsKLQotICAgICAgICBUeXBlIHQgPSBwZWVrVHlwZSgpOwotCi0gICAgICAgIGlmICh0ICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFzc2VydCBpc1R5cGVhYmxlKCk7Ci0KLSAgICAgICAgICAgIHQuaW52YWxpZGF0ZVRleHQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZpbmFsIHZvaWQgaW52YWxpZGF0ZU5pbCAoICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCBpc1R5cGVhYmxlKCk7Ci0KLSAgICAgICAgaWYgKCFpc0F0dHIoKSkKLSAgICAgICAgewotICAgICAgICAgICAgVHlwZSB0ID0gcGVla1R5cGUoKTsKLQotICAgICAgICAgICAgaWYgKHQgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICB0LmludmFsaWRhdGVOaWwoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByb3RlY3RlZCBmaW5hbCB2b2lkIGRpc2Nvbm5lY3RUeXBlcyAoIFJvb3QgciApCi0gICAgewotICAgICAgICBkaXNjb25uZWN0VHlwZXMoIHIsIGZhbHNlICk7Ci0gICAgfQotICAgIAotICAgIHByb3RlY3RlZCBmaW5hbCB2b2lkIGRpc2Nvbm5lY3RUeXBlcyAoIFJvb3QgciwgYm9vbGVhbiBkaXNjb25uZWN0RG9jICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCBpc1R5cGVhYmxlKCk7Ci0KLSAgICAgICAgU3BsYXkgbGFzdCA9IGlzQXR0cigpID8gdGhpcyA6IGdldEZpbmlzaFNwbGF5KCk7Ci0KLSAgICAgICAgU3BsYXkgcyA9IHRoaXM7Ci0KLSAgICAgICAgZm9yICggOyA7ICkKLSAgICAgICAgewotICAgICAgICAgICAgVHlwZSB0ID0gbnVsbDsKLQotICAgICAgICAgICAgaWYgKHMuaXNOb3JtYWxBdHRyKCkgfHwgcy5pc0xlYWYoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0ID0gcy5wZWVrVHlwZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAocy5pc0ZpbmlzaCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENvbnRhaW5lciBjID0gcy5nZXRDb250YWluZXIoKTsKLQotICAgICAgICAgICAgICAgIGlmICghYy5pc0RvYygpIHx8IGRpc2Nvbm5lY3REb2MpCi0gICAgICAgICAgICAgICAgICAgIHQgPSBjLnBlZWtUeXBlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0ICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3BsYXkgdSA9IHQuZ2V0U3BsYXkoKTsKLQotICAgICAgICAgICAgICAgIGlmICh1LmlzSW52YWxpZCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHUuaXNBdHRyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0LnZhbGlkYXRlVmFsdWUoIHUsIHQgKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZmluaXNoIHNwbGF5IG1pZ2h0IGdldCB3aGFja2VkCi0gICAgICAgICAgICAgICAgICAgICAgICBTcGxheSBmID0gdS5nZXRGaW5pc2hTcGxheSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICB0LnZhbGlkYXRlQ29udGVudCggdSwgdCApOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA9PSBsYXN0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgPSBmOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdC5kaXNjb25uZWN0KCByICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChzID09IGxhc3QpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmIChzLmlzQ29udGFpbmVyKCkgJiYgIXMuaXNMZWFmKCkgJiYgcy5wZWVrVHlwZSgpID09IG51bGwpCi0gICAgICAgICAgICAgICAgcyA9IHMuZ2V0RmluaXNoU3BsYXkoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzID0gcy5uZXh0U3BsYXkoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNldHMgdGhlIHR5cGUgb2Ygb2YgdGhpcwotICAgICAqLwotCi0gICAgZmluYWwgdm9pZCBzZXRUeXBlICggUm9vdCByLCBTY2hlbWFUeXBlIHNUeXBlICkKLSAgICB7Ci0gICAgICAgIHNldFR5cGUoIHIsIHNUeXBlLCB0cnVlICk7Ci0gICAgfQotICAgIAotICAgIGZpbmFsIHZvaWQgc2V0VHlwZSAoIFJvb3QgciwgU2NoZW1hVHlwZSBzVHlwZSwgYm9vbGVhbiBjb21wbGFpbiApCi0gICAgewotICAgICAgICBhc3NlcnQgaXNUeXBlYWJsZSgpOwotICAgICAgICBhc3NlcnQgc1R5cGUgIT0gbnVsbDsKLQotICAgICAgICAvLwotICAgICAgICAvLyBJcyB0aGUgY3VycmVudCB0eXBlIGFscmVhZHkgdGhpcyB0eXBlPwotICAgICAgICAvLwotCi0gICAgICAgIFR5cGUgdCA9IHBlZWtUeXBlKCk7Ci0KLSAgICAgICAgaWYgKHQgIT0gbnVsbCAmJiB0LmdldF9zY2hlbWFfdHlwZSgpID09IHNUeXBlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIENhbiBhbHdheXMgc2V0IGFuIGFyYml0cmFyeSB0eXBlIGF0IHRoZSBkb2MgbGV2ZWwKLSAgICAgICAgLy8KLQotICAgICAgICBpZiAoaXNEb2MoKSkKLSAgICAgICAgewotICAgICAgICAgICAgZGlzY29ubmVjdFR5cGVzKCByLCB0cnVlICk7Ci0KLSAgICAgICAgICAgIGFzc2VydCBwZWVrVHlwZSgpID09IG51bGw7Ci0KLSAgICAgICAgICAgIG5ldyBUeXBlKCByLCBzVHlwZSwgdGhpcyApOwotCi0gICAgICAgICAgICBhc3NlcnQgdmFsaWRhdGUoKTsKLQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gR290dGEgZ2V0IHRoZSBwYXJlbnQgdHlwZSB0byBkbyBhbnl0aGluZyBmdXJ0aGVyLiAgSWYgaXQKLSAgICAgICAgLy8gY2FuJ3QgYmUgZm91bmQsIHRoZW4gYmFyZgotICAgICAgICAvLwotCi0gICAgICAgIFR5cGUgcGFyZW50VHlwZSA9IGdldENvbnRhaW5lcigpLmdldFR5cGUoIHIgKTsKLQotICAgICAgICBhc3NlcnQgcGFyZW50VHlwZSAhPSBudWxsOwotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFlvdSBjYW4gc2V0IHRoZSBhdHRyaWJ1dGUgdHlwZSwgYXMgbG9uZyBhcyBpdCBpcyB0aGUgbmF0dXJhbAotICAgICAgICAvLyB0eXBlLiAgQXR0cmlidXRlcyBjYW5ub3QgaGF2ZSB4c2k6dHlwZQotICAgICAgICAvLwotCi0gICAgICAgIGlmIChpc0F0dHIoKSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHBhcmVudFR5cGUuZ2V0X2F0dHJpYnV0ZV90eXBlKCBnZXROYW1lKCkgKSAhPSBzVHlwZSAmJiBjb21wbGFpbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAiQ2FuJ3Qgc2V0IHR5cGUgb2YgYXR0cmlidXRlIHRvICIgKyBzVHlwZS50b1N0cmluZygpICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGFzc2VydCBpc0JlZ2luKCk7Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gTm93LCBmb3IgaW50ZXJpb3IgdHlwZXMsIEkgaGF2ZSB0byBkZWFsIHdpdGggeHNpOnR5cGUgYW5kCi0gICAgICAgIC8vIHdoZXRoZXIgb3Igbm90IHRoZSB0eXBlIGlzIGFsbG93ZWQgYXQgdGhpcyBwb2ludC4KLSAgICAgICAgLy8KLQotICAgICAgICAvLyBGaXJzdCBjaGVjayB0byBzZWUgaWYgdGhpcyB0eXBlIGNhbiBiZSBoZXJlIHNhbnMgeHNpOnR5cGUuCi0gICAgICAgIC8vIElmIHNvLCBtYWtlIHN1cmUgdGhlcmUgaXMgbm8geHNpOnR5cGUKLQotICAgICAgICBpZiAocGFyZW50VHlwZS5nZXRfZWxlbWVudF90eXBlKCBnZXROYW1lKCksIG51bGwgKSA9PSBzVHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgc2V0WHNpVHlwZSggciwgbnVsbCApOwotCi0gICAgICAgICAgICBkaXNjb25uZWN0VHlwZXMoIHIgKTsKLQotICAgICAgICAgICAgYXNzZXJ0IHZhbGlkYXRlKCk7Ci0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRoZSBkZXNpcmVkIHR5cGUgaGFzIG5vIG5hbWUsIHRoZW4gaXQgY2Fubm90IGJlCi0gICAgICAgIC8vIHJlZmVyZW5jZWQgdmlhIHhzaTp0eXBlCi0KLSAgICAgICAgUU5hbWUgdHlwZU5hbWUgPSBzVHlwZS5nZXROYW1lKCk7Ci0KLSAgICAgICAgaWYgKHR5cGVOYW1lID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjb21wbGFpbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAiQ2FuJ3Qgc2V0IHR5cGUgb2YgZWxlbWVudCwgdHlwZSBpcyB1bi1uYW1lZCIgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBhcmVudFR5cGUuZ2V0X2VsZW1lbnRfdHlwZSggZ2V0TmFtZSgpLCB0eXBlTmFtZSApICE9IHNUeXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY29tcGxhaW4pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgIkNhbid0IHNldCB0eXBlIG9mIGVsZW1lbnQsIGludmFsaWQgdHlwZSIgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgc2V0WHNpVHlwZSggciwgdHlwZU5hbWUgKTsKLQotICAgICAgICBkaXNjb25uZWN0VHlwZXMoIHIgKTsKLQotICAgICAgICBhc3NlcnQgdmFsaWRhdGUoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgdGhlIFR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3BsYXkuICBJdCBkb2VzIG5vdCBhdHRlbXB0IHRvIGNyZWF0ZQotICAgICAqIG9uZSBhbmQgd2lsbCByZXR1cm4gbnVsbCBpcyBub24gZXhpc3RzLgotICAgICAqLwotCi0gICAgZmluYWwgVHlwZSBwZWVrVHlwZSAoICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCBpc1R5cGVhYmxlKCk7Ci0KLSAgICAgICAgVHlwZSB0eXBlID0gbnVsbDsKLQotICAgICAgICBpZiAoX2dvb2JlcnMgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yICggR29vYmVyIGcgPSBmaXJzdEdvb2JlcigpIDsgZyAhPSBudWxsIDsgZyA9IG5leHRHb29iZXIoIGcgKSApCi0gICAgICAgICAgICAgICAgaWYgKGcuZ2V0S2luZCgpID09IFRZUEUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoVHlwZSkgZzsKLSAgICAgICAgfQotCi0gICAgICAgIGFzc2VydCB0eXBlICE9IG51bGwgfHwgaXNWYWxpZCgpOwotCi0gICAgICAgIHJldHVybiB0eXBlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCB0aGUgVHlwZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzcGxheS4gIElmIG5vbiBleGlzdHMsIGl0IGF0dGVtcHRzCi0gICAgICogdG8gY3JlYXRlIG9uZS4gIFJldHVybnMgbnVsbCBpZiBvbmUgY291bGQgbm90IGJlIGNyZWF0ZWQuCi0gICAgICovCi0KLSAgICBmaW5hbCBUeXBlIGdldFR5cGUgKCBSb290IHIgKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IGlzVHlwZWFibGUoKTsKLQotICAgICAgICBUeXBlIHR5cGUgPSBwZWVrVHlwZSgpOwotCi0gICAgICAgIGlmICghaXNEb2MoKSAmJiB0eXBlID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFR5cGUgcGFyZW50VHlwZSA9IGdldENvbnRhaW5lcigpLmdldFR5cGUoIHIgKTsKLQotICAgICAgICAgICAgYXNzZXJ0IHBhcmVudFR5cGUgIT0gbnVsbDsKLQotICAgICAgICAgICAgLy8gRGVmZW5zaXZlCi0gICAgICAgICAgICBpZiAocGFyZW50VHlwZSA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgICAgICBUeXBlU3RvcmVVc2VyIG5ld1VzZXI7Ci0KLSAgICAgICAgICAgIGlmIChpc0JlZ2luKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbmV3VXNlciA9Ci0gICAgICAgICAgICAgICAgICAgIHBhcmVudFR5cGUuY3JlYXRlX2VsZW1lbnRfdXNlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldE5hbWUoKSwgZ2V0WHNpVHlwZU5hbWUoIHIgKSApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFzc2VydCBpc05vcm1hbEF0dHIoKTsKLQotICAgICAgICAgICAgICAgIG5ld1VzZXIgPSBwYXJlbnRUeXBlLmNyZWF0ZV9hdHRyaWJ1dGVfdXNlciggZ2V0TmFtZSgpICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGFzc2VydCBuZXdVc2VyICE9IG51bGw7Ci0KLSAgICAgICAgICAgIC8vIERlZmVuc2l2ZQotICAgICAgICAgICAgaWYgKG5ld1VzZXIgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAgICAgdHlwZSA9IG5ldyBUeXBlKCByLCBuZXdVc2VyLCB0aGlzICk7Ci0gICAgICAgIH0KLQotICAgICAgICBhc3NlcnQgdHlwZSAhPSBudWxsOwotCi0gICAgICAgIHJldHVybiB0eXBlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIElzIHRoaXMgaW5zaWRlIG9mIHRoZSBjb250ZW50IG9mIHNSYW5nZT8gIERvZXMgYW4gaW5jbHVzaXZlIGNoZWNrLgotICAgICAqLwotCi0gICAgZmluYWwgYm9vbGVhbiBiZXR3ZWVuICggUm9vdCByLCBpbnQgcFRoaXMsIFNwbGF5IHNSYW5nZSApCi0gICAgewotICAgICAgICBhc3NlcnQgUm9vdC5kdiA+IDAgfHwgZ2V0Um9vdFNsb3coKSA9PSByOwotICAgICAgICBhc3NlcnQgUm9vdC5kdiA+IDAgfHwgZ2V0Um9vdFNsb3coKSA9PSBzUmFuZ2UuZ2V0Um9vdFNsb3coKTsKLQotICAgICAgICBpZiAoc1JhbmdlLmlzRG9jKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAoY29tcGFyZSggciwgcFRoaXMsIHNSYW5nZSwgMCApIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBTcGxheSBzRW5kOwotICAgICAgICBpbnQgICBwRW5kOwotCi0gICAgICAgIGFzc2VydCAhc1JhbmdlLmlzRG9jKCk7Ci0KLSAgICAgICAgaWYgKHNSYW5nZS5pc0xlYWYoKSkKLSAgICAgICAgewotICAgICAgICAgICAgc0VuZCA9IHNSYW5nZTsKLSAgICAgICAgICAgIHBFbmQgPSBzUmFuZ2UuZ2V0UG9zTGVhZkVuZCgpICsgMTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzUmFuZ2UuaXNCZWdpbigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzRW5kID0gc1JhbmdlLmdldEZpbmlzaFNwbGF5KCk7Ci0gICAgICAgICAgICBwRW5kID0gMTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNFbmQgPSBzUmFuZ2UubmV4dFNwbGF5KCk7Ci0gICAgICAgICAgICBwRW5kID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBjb21wYXJlKCByLCBwVGhpcywgc0VuZCwgcEVuZCApIDw9IDA7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29tcGFyZSB0d28gcG9zaXRpb25zLiAgQXR0cmlidXRlcyBhcmUgYSBiaXRjaC4KLSAgICAgKi8KLQotICAgIGZpbmFsIGludCBjb21wYXJlICggUm9vdCByLCBpbnQgcFRoaXMsIFNwbGF5IHNUaGF0LCBpbnQgcFRoYXQgKQotICAgIHsKLSAgICAgICAgU3BsYXkgc1RoaXMgPSB0aGlzOwotCi0gICAgICAgIGFzc2VydCBSb290LmR2ID4gMCB8fCBzVGhpcy5nZXRSb290U2xvdygpID09IHI7Ci0gICAgICAgIGFzc2VydCBSb290LmR2ID4gMCB8fCBzVGhhdC5nZXRSb290U2xvdygpID09IHI7Ci0gICAgICAgIGFzc2VydCBwVGhpcyA+PSAwICYmIHBUaGlzIDw9IHNUaGlzLmdldEVuZFBvcygpOwotICAgICAgICBhc3NlcnQgcFRoYXQgPj0gMCAmJiBwVGhhdCA8PSBzVGhhdC5nZXRFbmRQb3MoKTsKLQotICAgICAgICAvLyBOb3JtYWxpemUgcG9zaXRpb25zCi0KLSAgICAgICAgaWYgKHBUaGlzID09IHNUaGlzLmdldEVuZFBvcygpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoc1RoaXMuaXNBdHRyKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKChzVGhpcyA9IHNUaGlzLm5leHRTcGxheSgpKS5pc0F0dHIoKSkKLSAgICAgICAgICAgICAgICAgICAgcFRoaXMgPSAwOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNUaGlzID0gc1RoaXMucHJldk5vbkF0dHJTcGxheSgpOwotICAgICAgICAgICAgICAgICAgICBwVGhpcyA9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNUaGlzID0gc1RoaXMubmV4dE5vbkF0dHJTcGxheSgpOwotICAgICAgICAgICAgICAgIHBUaGlzID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwVGhhdCA9PSBzVGhhdC5nZXRFbmRQb3MoKSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHNUaGF0LmlzQXR0cigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICgoc1RoYXQgPSBzVGhhdC5uZXh0U3BsYXkoKSkuaXNBdHRyKCkpCi0gICAgICAgICAgICAgICAgICAgIHBUaGF0ID0gMDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzVGhhdCA9IHNUaGF0LnByZXZOb25BdHRyU3BsYXkoKTsKLSAgICAgICAgICAgICAgICAgICAgcFRoYXQgPSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzVGhhdCA9IHNUaGF0Lm5leHROb25BdHRyU3BsYXkoKTsKLSAgICAgICAgICAgICAgICBwVGhhdCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBhc3NlcnQgcFRoaXMgPCBzVGhpcy5nZXRFbmRQb3MoKTsKLSAgICAgICAgYXNzZXJ0IHBUaGF0IDwgc1RoYXQuZ2V0RW5kUG9zKCk7Ci0KLSAgICAgICAgaWYgKHNUaGlzID09IHNUaGF0KQotICAgICAgICAgICAgcmV0dXJuIHBUaGlzIDwgcFRoYXQgPyAtMSA6IHBUaGlzID4gcFRoYXQgPyAxIDogMDsKLQotICAgICAgICAvLwotCi0gICAgICAgIGlmIChzVGhpcy5pc0F0dHIoKSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHNUaGF0LmlzQXR0cigpKQotICAgICAgICAgICAgICAgIHJldHVybiBjb21wYXJlKCByLCBzVGhhdCApOwotCi0gICAgICAgICAgICBpZiAoc1RoaXMucHJldk5vbkF0dHJTcGxheSgpICE9IHNUaGF0KQotICAgICAgICAgICAgICAgIHJldHVybiBjb21wYXJlKCByLCBzVGhhdCApOwotCi0gICAgICAgICAgICByZXR1cm4gcFRoYXQgPT0gMCA/IDEgOiAtMTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzVGhhdC5pc0F0dHIoKSkKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0ICFzVGhpcy5pc0F0dHIoKTsKLQotICAgICAgICAgICAgaWYgKHNUaGF0LnByZXZOb25BdHRyU3BsYXkoKSAhPSBzVGhpcykKLSAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZSggciwgc1RoYXQgKTsKLQotICAgICAgICAgICAgcmV0dXJuIHBUaGlzID09IDAgPyAtMSA6IDE7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gY29tcGFyZSggciwgc1RoYXQgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgaW50IGNvbXBhcmUgKCBSb290IHIsIFNwbGF5IHNUaGF0ICkKLSAgICB7Ci0gICAgICAgIFNwbGF5IHNUaGlzID0gdGhpczsKLQotICAgICAgICBpZiAoc1RoaXMgPT0gc1RoYXQpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBpZiAoci5pc0xlZnRPbmx5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChzVGhpcy5nZXRDY2hMZWZ0KCkgPCBzVGhhdC5nZXRDY2hMZWZ0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgICAgICAgICBpZiAoc1RoaXMuZ2V0Q2NoTGVmdCgpID4gc1RoYXQuZ2V0Q2NoTGVmdCgpKQotICAgICAgICAgICAgICAgIHJldHVybiAxOwotCi0gICAgICAgICAgICBpZiAoc1RoaXMuZ2V0Q2RvY0JlZ2luTGVmdCgpIDwgc1RoYXQuZ2V0Q2RvY0JlZ2luTGVmdCgpKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLQotICAgICAgICAgICAgaWYgKHNUaGlzLmdldENkb2NCZWdpbkxlZnQoKSA+IHNUaGF0LmdldENkb2NCZWdpbkxlZnQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLQotICAgICAgICAgICAgd2hpbGUgKCBzVGhpcyAhPSByICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzVGhpcyA9IHNUaGlzLm5leHRTcGxheSgpOwotCi0gICAgICAgICAgICAgICAgaWYgKHNUaGlzID09IHNUaGF0KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc1RoaXMuZ2V0Q2NoKCkgPiAwIHx8IHNUaGlzLmdldENkb2NCZWdpbigpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNUaGF0LmlzUm9vdCgpKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgICAgIGlmIChzVGhpcy5pc1Jvb3QoKSkKLSAgICAgICAgICAgIHJldHVybiAxOwotCi0gICAgICAgIHNUaGlzLnNwbGF5KCByLCByICk7Ci0gICAgICAgIHNUaGF0LnNwbGF5KCByLCBzVGhpcyApOwotCi0gICAgICAgIGFzc2VydCBzVGhpcy5fbGVmdFNwbGF5ID09IHNUaGF0IHx8IHNUaGlzLl9yaWdodFNwbGF5ID09IHNUaGF0OwotCi0gICAgICAgIHJldHVybiBzVGhpcy5fbGVmdFNwbGF5ID09IHNUaGF0ID8gMSA6IC0xOwotICAgIH0KLQotICAgIGZpbmFsIFNwbGF5IG5leHROb25BdHRyU3BsYXkgKCApCi0gICAgewotICAgICAgICBTcGxheSBzID0gbmV4dFNwbGF5KCk7Ci0KLSAgICAgICAgd2hpbGUgKCBzICE9IG51bGwgJiYgcy5pc0F0dHIoKSApCi0gICAgICAgICAgICBzID0gcy5uZXh0U3BsYXkoKTsKLQotICAgICAgICByZXR1cm4gczsKLSAgICB9Ci0KLSAgICBmaW5hbCBTcGxheSBwcmV2Tm9uQXR0clNwbGF5ICggKQotICAgIHsKLSAgICAgICAgU3BsYXkgcyA9IHByZXZTcGxheSgpOwotCi0gICAgICAgIHdoaWxlICggcyAhPSBudWxsICYmIHMuaXNBdHRyKCkgKQotICAgICAgICAgICAgcyA9IHMucHJldlNwbGF5KCk7Ci0KLSAgICAgICAgcmV0dXJuIHM7Ci0gICAgfQotCi0gICAgZmluYWwgU3BsYXkgbmV4dFNwbGF5ICggKQotICAgIHsKLSAgICAgICAgU3BsYXkgcyA9IHRoaXM7Ci0gICAgICAgIFNwbGF5IHIgPSBzLl9yaWdodFNwbGF5OwotCi0gICAgICAgIGlmIChyICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoIFNwbGF5IGwgPSBzID0gciA7IChsID0gbC5fbGVmdFNwbGF5KSAhPSBudWxsIDsgKQotICAgICAgICAgICAgICAgIHMgPSBsOwotCi0gICAgICAgICAgICByZXR1cm4gczsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoIFNwbGF5IHAgPSBzLl9wYXJlbnRTcGxheSA7IDsgcCA9IChzID0gcCkuX3BhcmVudFNwbGF5ICkKLSAgICAgICAgICAgIGlmIChwID09IG51bGwgfHwgcC5fbGVmdFNwbGF5ID09IHMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHA7Ci0gICAgfQotCi0gICAgZmluYWwgU3BsYXkgcHJldlNwbGF5ICggKQotICAgIHsKLSAgICAgICAgU3BsYXkgcyA9IHRoaXM7Ci0gICAgICAgIFNwbGF5IGwgPSBzLl9sZWZ0U3BsYXk7Ci0KLSAgICAgICAgaWYgKGwgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yICggU3BsYXkgciA9IHMgPSBsIDsgKHIgPSByLl9yaWdodFNwbGF5KSAhPSBudWxsIDsgKQotICAgICAgICAgICAgICAgIHMgPSByOwotCi0gICAgICAgICAgICByZXR1cm4gczsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoIFNwbGF5IHAgPSBzLl9wYXJlbnRTcGxheSA7IDsgcCA9IChzID0gcCkuX3BhcmVudFNwbGF5ICkKLSAgICAgICAgICAgIGlmIChwID09IG51bGwgfHwgcC5fcmlnaHRTcGxheSA9PSBzKQotICAgICAgICAgICAgICAgIHJldHVybiBwOwotICAgIH0KLQotICAgIGZpbmFsIHZvaWQgcm90YXRlUmlnaHQgKCApCi0gICAgewotICAgICAgICBhc3NlcnQgX3BhcmVudFNwbGF5Ll9sZWZ0U3BsYXkgPT0gdGhpczsKLQotICAgICAgICBTcGxheSBwID0gX3BhcmVudFNwbGF5OwotICAgICAgICBTcGxheSBnID0gcC5fcGFyZW50U3BsYXk7Ci0KLSAgICAgICAgYXNzZXJ0IHAgIT0gbnVsbDsKLQotICAgICAgICBwLl9sZWZ0U3BsYXkgPSBfcmlnaHRTcGxheTsKLQotICAgICAgICBpZiAoX3JpZ2h0U3BsYXkgIT0gbnVsbCkKLSAgICAgICAgICAgIF9yaWdodFNwbGF5Ll9wYXJlbnRTcGxheSA9IHA7Ci0KLSAgICAgICAgX3JpZ2h0U3BsYXkgPSBwOwotICAgICAgICBwLl9wYXJlbnRTcGxheSA9IHRoaXM7Ci0gICAgICAgIF9wYXJlbnRTcGxheSA9IGc7Ci0KLSAgICAgICAgaWYgKGcgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGcuX2xlZnRTcGxheSA9PSBwKQotICAgICAgICAgICAgICAgIGcuX2xlZnRTcGxheSA9IHRoaXM7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZy5fcmlnaHRTcGxheSA9IHRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICBwLmFkanVzdENjaExlZnQoIC0gZ2V0Q2NoTGVmdCgpIC0gZ2V0Q2NoKCkgKTsKLSAgICAgICAgcC5hZGp1c3RDZG9jQmVnaW5MZWZ0KCAtIGdldENkb2NCZWdpbkxlZnQoKSAtIGdldENkb2NCZWdpbigpICk7Ci0gICAgfQotCi0gICAgZmluYWwgdm9pZCByb3RhdGVMZWZ0ICggKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IF9wYXJlbnRTcGxheS5fcmlnaHRTcGxheSA9PSB0aGlzOwotCi0gICAgICAgIFNwbGF5IHAgPSBfcGFyZW50U3BsYXk7Ci0gICAgICAgIFNwbGF5IGcgPSBwLl9wYXJlbnRTcGxheTsKLQotICAgICAgICBhc3NlcnQgcCAhPSBudWxsOwotCi0gICAgICAgIHAuX3JpZ2h0U3BsYXkgPSBfbGVmdFNwbGF5OwotCi0gICAgICAgIGlmIChfbGVmdFNwbGF5ICE9IG51bGwpCi0gICAgICAgICAgICBfbGVmdFNwbGF5Ll9wYXJlbnRTcGxheSA9IHA7Ci0KLSAgICAgICAgX2xlZnRTcGxheSA9IHA7Ci0gICAgICAgIHAuX3BhcmVudFNwbGF5ID0gdGhpczsKLSAgICAgICAgX3BhcmVudFNwbGF5ID0gZzsKLQotICAgICAgICBpZiAoZyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZy5fbGVmdFNwbGF5ID09IHApCi0gICAgICAgICAgICAgICAgZy5fbGVmdFNwbGF5ID0gdGhpczsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBnLl9yaWdodFNwbGF5ID0gdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIGFkanVzdENjaExlZnQoIHAuZ2V0Q2NoTGVmdCgpICsgcC5nZXRDY2goKSApOwotICAgICAgICBhZGp1c3RDZG9jQmVnaW5MZWZ0KCBwLmdldENkb2NCZWdpbkxlZnQoKSArIHAuZ2V0Q2RvY0JlZ2luKCkgKTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIFNwbGF5IHRoaXMgc28gdGhhdCBpdCdzIHBhcmVudCBpcyBwU3RvcC4KLSAgICAvLwotICAgIC8vIFRoaXMgdmVyc2lvbiBvZiBzcGxheSBpcyBjYXBhYmxlIG9mIHNwbGF5aW5nIHRoaXMgdG8gdGhlIHRvcC4gIFRoZXJlCi0gICAgLy8gYXJlIHR3byBjYXNlcy4gIE9uZSBpcyB0aGVyZSByIGlzIHRoaXMgYW5kIHRoaXMgaXMgc3BsYXllZCB0byBiZQotICAgIC8vIHRoZSBsZWZ0IGNoaWxkIG9mIHIuICBUaGUgb3RoZXIgY2FzZSBpcyB3aGVyZSByIGlzIG51bGwuICBJbiB0aGlzIGNhc2UKLSAgICAvLyB0aGUgdHJlZSB0aGlzIGlzIGluIGlzIGRldGFjaGVkIGZyb20gdGhlIG1haW4gZG9jdW1lbnQsIGFuZCB0aGlzIHdpbGwgYmUKLSAgICAvLyBzcGxheWVkIHRvIHRoZSB0b3Agb2YgdGhhdCBzdWJ0cmVlIHN1Y2ggdGhhdCBpdCdzIHBhcmVudCB3aWxsIGJlIG51bGwuCi0gICAgLy8KLQotICAgIGZpbmFsIHZvaWQgc3BsYXkgKCBSb290IHIsIFNwbGF5IHBTdG9wICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCBwU3RvcCAhPSBudWxsOwotICAgICAgICBhc3NlcnQgdGhpcyAhPSBwU3RvcDsKLSAgICAgICAgYXNzZXJ0IFJvb3QuZHYgPiAwIHx8IHIgPT0gbnVsbCB8fCBnZXRSb290U2xvdygpID09IHI7Ci0gICAgICAgIGFzc2VydCBSb290LmR2ID4gMCB8fCByID09IG51bGwgfHwgcFN0b3AuZ2V0Um9vdFNsb3coKSA9PSByOwotICAgICAgICBhc3NlcnQgciA9PSBudWxsIHx8IHIudmFsaWRhdGVTcGxheVRyZWUoKTsKLSAgICAgICAgYXNzZXJ0ICFpc1Jvb3QoKTsKLQotICAgICAgICBib29sZWFuIHJvdGF0ZWQgPSBmYWxzZTsKLQotICAgICAgICBmb3IgKCA7IDsgKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgX3BhcmVudFNwbGF5ICE9IG51bGw7Ci0KLSAgICAgICAgICAgIFNwbGF5IHAgPSBfcGFyZW50U3BsYXk7Ci0KLSAgICAgICAgICAgIGFzc2VydCBwICE9IG51bGw7Ci0KLSAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjaGlsZCBvZiB0aGUgc3RvcHBlciwgdGhlbiB3ZSBhcmUgZG9uZQotCi0gICAgICAgICAgICBpZiAocCA9PSBwU3RvcCkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgU3BsYXkgZyA9IHAuX3BhcmVudFNwbGF5OwotCi0gICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGNoaWxkIG9mIHJvb3QsIHRoZW4gc2ltcGxlIHJvdGF0ZQotCi0gICAgICAgICAgICByb3RhdGVkID0gdHJ1ZTsKLQotICAgICAgICAgICAgaWYgKGcgPT0gcFN0b3ApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHAuX2xlZnRTcGxheSA9PSB0aGlzKQotICAgICAgICAgICAgICAgICAgICByb3RhdGVSaWdodCgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcm90YXRlTGVmdCgpOwotCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEZhbmN5IHNwbGF5cwotCi0gICAgICAgICAgICBpZiAoZy5fbGVmdFNwbGF5ID09IHApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHAuX2xlZnRTcGxheSA9PSB0aGlzKQotICAgICAgICAgICAgICAgICAgICBwLnJvdGF0ZVJpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByb3RhdGVMZWZ0KCk7Ci0KLSAgICAgICAgICAgICAgICByb3RhdGVSaWdodCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChwLl9yaWdodFNwbGF5ID09IHRoaXMpCi0gICAgICAgICAgICAgICAgICAgIHAucm90YXRlTGVmdCgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcm90YXRlUmlnaHQoKTsKLQotICAgICAgICAgICAgICAgIHJvdGF0ZUxlZnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyb3RhdGVkICYmIHIgIT0gbnVsbCkKLSAgICAgICAgICAgIHIuX2xlZnRPbmx5ID0gZmFsc2U7Ci0KLSAgICAgICAgYXNzZXJ0IHIgPT0gbnVsbCB8fCByLnZhbGlkYXRlU3BsYXlUcmVlKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVtb3ZlIHRoaXMgc3BsYXkgd2hlcmUgcm9vdCBpcyB0aGUgc3BsYXkgcm9vdCBvZiB0aGUgdHJlZSB0aGlzIHNwbGF5LgotICAgICAqIFRoaXMgbWF5IGJlIGEgUk9PVCBzcGxheQotICAgICAqLwotCi0gICAgZmluYWwgU3BsYXkgcmVtb3ZlU3BsYXkgKCBTcGxheSByICkKLSAgICB7Ci0gICAgICAgIFJvb3Qgcm9vdCA9IHIuaXNSb290KCkgPyAoUm9vdCkgciA6IG51bGw7Ci0KLSAgICAgICAgYXNzZXJ0IHIuX3BhcmVudFNwbGF5ID09IG51bGw7Ci0gICAgICAgIGFzc2VydCByb290ID09IG51bGwgfHwgcm9vdC52YWxpZGF0ZVNwbGF5VHJlZSgpOwotICAgICAgICBhc3NlcnQgIWlzUm9vdCgpOwotICAgICAgICBhc3NlcnQgIWlzRG9jKCk7Ci0gICAgICAgIGFzc2VydCBSb290LmR2ID4gMCB8fCBnZXRTcGxheVJvb3RTbG93KCkgPT0gcjsKLQotICAgICAgICAvLyBJZiB0aGUgc3BsYXkgdG8gYmUgcmVtb3ZlZCBoYXMgbm8gY2NoIG9yIGNiZWdpbiwgdGhlbiB3aGVuIHRoZQotICAgICAgICAvLyB0cmVlIGlzIGxlZnQgb25seSBjaGlsZHJlbiwgd2UgbmVlZCBub3Qgc3BsYXkuCi0KLSAgICAgICAgaW50IGNjaCA9IGdldENjaCgpOwotICAgICAgICBpbnQgY2JlZ2luID0gZ2V0Q2RvY0JlZ2luKCk7Ci0KLSAgICAgICAgaWYgKHJvb3QgIT0gbnVsbCAmJiByb290Ll9sZWZ0T25seSAmJiBjY2ggPT0gMCAmJiBjYmVnaW4gPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0IF9yaWdodFNwbGF5ID09IG51bGw7Ci0gICAgICAgICAgICBhc3NlcnQgX3BhcmVudFNwbGF5ICE9IG51bGw7Ci0KLSAgICAgICAgICAgIGlmICgoX3BhcmVudFNwbGF5Ll9sZWZ0U3BsYXkgPSBfbGVmdFNwbGF5KSAhPSBudWxsKQotICAgICAgICAgICAgICAgIF9sZWZ0U3BsYXkuX3BhcmVudFNwbGF5ID0gX3BhcmVudFNwbGF5OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgc3BsYXkoIHJvb3QsIHIgKTsKLQotICAgICAgICAgICAgaWYgKF9sZWZ0U3BsYXkgPT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByLmFkanVzdENjaExlZnQoIC0gY2NoICk7Ci0gICAgICAgICAgICAgICAgci5hZGp1c3RDZG9jQmVnaW5MZWZ0KCAtIGNiZWdpbiApOwotCi0gICAgICAgICAgICAgICAgaWYgKChyLl9sZWZ0U3BsYXkgPSBfcmlnaHRTcGxheSkgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgX3JpZ2h0U3BsYXkuX3BhcmVudFNwbGF5ID0gcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTcGxheSBwID0gcHJldlNwbGF5KCk7Ci0KLSAgICAgICAgICAgICAgICBwLnNwbGF5KCByb290LCB0aGlzICk7Ci0KLSAgICAgICAgICAgICAgICBhc3NlcnQgcC5fcmlnaHRTcGxheSA9PSBudWxsOwotCi0gICAgICAgICAgICAgICAgci5fbGVmdFNwbGF5ID0gcDsKLSAgICAgICAgICAgICAgICBwLl9wYXJlbnRTcGxheSA9IHI7Ci0gICAgICAgICAgICAgICAgci5hZGp1c3RDY2hMZWZ0KCAtIGNjaCApOwotICAgICAgICAgICAgICAgIHIuYWRqdXN0Q2RvY0JlZ2luTGVmdCggLSBjYmVnaW4gKTsKLSAgICAgICAgICAgICAgICBwLl9yaWdodFNwbGF5ID0gX3JpZ2h0U3BsYXk7Ci0KLSAgICAgICAgICAgICAgICBpZiAocC5fcmlnaHRTcGxheSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICBwLl9yaWdodFNwbGF5Ll9wYXJlbnRTcGxheSA9IHA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBfbGVmdFNwbGF5ID0gX3JpZ2h0U3BsYXkgPSBfcGFyZW50U3BsYXkgPSBudWxsOwotICAgICAgICBhZGp1c3RDY2hMZWZ0KCAtIGdldENjaExlZnQoKSApOwotICAgICAgICBhZGp1c3RDZG9jQmVnaW5MZWZ0KCAtIGdldENkb2NCZWdpbkxlZnQoKSApOwotCi0gICAgICAgIGFzc2VydCByb290ID09IG51bGwgfHwgcm9vdC52YWxpZGF0ZVNwbGF5VHJlZSgpOwotCi0gICAgICAgIHJldHVybiB0aGlzOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8gVGhlIFpvbyAobW9yZSBsaWtlIGEgcGV0dGluZyB6b28gbm93KQotICAgIC8vCi0KLSAgICBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgUU5hbWVTcGxheSBleHRlbmRzIFNwbGF5Ci0gICAgewotICAgICAgICBRTmFtZVNwbGF5ICggaW50IGtpbmQsIGJvb2xlYW4gaXMsIFFOYW1lIG5hbWUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdXBlcigga2luZCwgaXMgKTsKLSAgICAgICAgICAgIF9uYW1lID0gbmFtZTsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIFFOYW1lIGdldE5hbWUgKCApIHsgcmV0dXJuIF9uYW1lOyB9Ci0gICAgICAgIGZpbmFsIHZvaWQgIGNoYW5nZU5hbWUgKCBRTmFtZSBuYW1lICkgeyBfbmFtZSA9IG5hbWU7IH0KLQotICAgICAgICBmaW5hbCBTdHJpbmcgZ2V0VXJpICAgKCApIHsgcmV0dXJuIF9uYW1lLmdldE5hbWVzcGFjZVVSSSgpOyB9Ci0gICAgICAgIGZpbmFsIFN0cmluZyBnZXRMb2NhbCAoICkgeyByZXR1cm4gX25hbWUuZ2V0TG9jYWxQYXJ0KCk7ICAgIH0KLQotICAgICAgICBwcml2YXRlIFFOYW1lIF9uYW1lOwotICAgIH0KLQotICAgIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBDb250YWluZXIgZXh0ZW5kcyBRTmFtZVNwbGF5Ci0gICAgewotICAgICAgICBDb250YWluZXIgKCBpbnQga2luZCwgYm9vbGVhbiBpcywgUU5hbWUgbmFtZSApCi0gICAgICAgICAgICB7IHN1cGVyKCBraW5kLCBpcywgbmFtZSApOyB9Ci0KLSAgICAgICAgYWJzdHJhY3QgRmluaXNoIGdldEZpbmlzaCAoICk7Ci0gICAgfQotCi0gICAgc3RhdGljIGZpbmFsIGNsYXNzIERvYyBleHRlbmRzIENvbnRhaW5lcgotICAgIHsKLSAgICAgICAgRG9jICggUm9vdCByLCBRTmFtZSBuYW1lICkKLSAgICAgICAgICAgIHsgc3VwZXIoIERPQywgZmFsc2UsIG5hbWUgKTsgX3Jvb3QgPSByOyB9Ci0KLSAgICAgICAgQ29udGFpbmVyIGdldENvbnRhaW5lciAoICkgeyByZXR1cm4gbnVsbDsgfQotICAgICAgICBGaW5pc2ggICAgZ2V0RmluaXNoICggKSB7IHJldHVybiBfcm9vdDsgfQotCi0gICAgICAgIFJvb3QgX3Jvb3Q7Ci0gICAgfQotCi0gICAgc3RhdGljIGNsYXNzIEJlZ2luIGV4dGVuZHMgQ29udGFpbmVyCi0gICAgewotICAgICAgICBCZWdpbiAoIFFOYW1lIG5hbWUsIENvbnRhaW5lciBjb250YWluZXIgKQotICAgICAgICAgICAgeyBzdXBlciggQkVHSU4sIGZhbHNlLCBuYW1lICk7IF9jb250YWluZXIgPSBjb250YWluZXI7IH0KLQotICAgICAgICBmaW5hbCBDb250YWluZXIgZ2V0Q29udGFpbmVyICggKSB7IHJldHVybiBfY29udGFpbmVyOyB9Ci0gICAgICAgIGZpbmFsIEZpbmlzaCAgICBnZXRGaW5pc2ggICAgKCApIHsgcmV0dXJuIF9lbmQ7IH0KLQotICAgICAgICBFbmQgICAgICAgICBfZW5kOwotICAgICAgICBDb250YWluZXIgICBfY29udGFpbmVyOwotICAgIH0KLQotICAgIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBGaW5pc2ggZXh0ZW5kcyBTcGxheQotICAgIHsKLSAgICAgICAgRmluaXNoICggaW50IGtpbmQgKSB7IHN1cGVyKCBraW5kLCBmYWxzZSApOyB9Ci0gICAgfQotCi0gICAgc3RhdGljIGZpbmFsIGNsYXNzIEVuZCBleHRlbmRzIEZpbmlzaAotICAgIHsKLSAgICAgICAgRW5kICggQmVnaW4gYmVnaW4gKSB7IHN1cGVyKCBFTkQgKTsgX2JlZ2luID0gYmVnaW47IH0KLQotICAgICAgICBDb250YWluZXIgZ2V0Q29udGFpbmVyICggKSB7IHJldHVybiBfYmVnaW47IH0KLQotICAgICAgICBmaW5hbCBCZWdpbiBfYmVnaW47Ci0gICAgfQotCi0gICAgc3RhdGljIGZpbmFsIGNsYXNzIENvbW1lbnQgZXh0ZW5kcyBTcGxheQotICAgIHsKLSAgICAgICAgQ29tbWVudCAoICkgeyBzdXBlciggQ09NTUVOVCwgZmFsc2UgKTsgfQotCi0gICAgICAgIENvbnRhaW5lciBnZXRDb250YWluZXIgKCApIHsgcmV0dXJuIGZpbmRDb250YWluZXIoKTsgfQotICAgIH0KLQotICAgIHN0YXRpYyBmaW5hbCBjbGFzcyBGcmFnbWVudCBleHRlbmRzIFNwbGF5Ci0gICAgewotICAgICAgICBGcmFnbWVudCAoICkgeyBzdXBlciggQ09NTUVOVCwgdHJ1ZSApOyB9Ci0KLSAgICAgICAgQ29udGFpbmVyIGdldENvbnRhaW5lciAoICkgeyByZXR1cm4gbnVsbDsgfQotICAgIH0KLQotICAgIHN0YXRpYyBjbGFzcyBBdHRyIGV4dGVuZHMgUU5hbWVTcGxheQotICAgIHsKLSAgICAgICAgQXR0ciAoIFFOYW1lIG5hbWUgKSB7IHN1cGVyKCBBVFRSLCBmYWxzZSwgbmFtZSApOyB9Ci0KLSAgICAgICAgQXR0ciAoIFFOYW1lIG5hbWUsIGJvb2xlYW4gaXNYbWxucyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN1cGVyKCBBVFRSLCB0cnVlLCBuYW1lICk7Ci0gICAgICAgICAgICBhc3NlcnQgaXNYbWxuczsKLSAgICAgICAgfQotCi0gICAgICAgIENvbnRhaW5lciBnZXRDb250YWluZXIgKCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoIFNwbGF5IHMgPSBwcmV2U3BsYXkoKSA7IDsgcyA9IHMucHJldlNwbGF5KCkgKQotICAgICAgICAgICAgICAgIGlmICghcy5pc0F0dHIoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChDb250YWluZXIpIHM7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgZmluYWwgY2xhc3MgWG1sbnMgZXh0ZW5kcyBBdHRyCi0gICAgewotICAgICAgICBYbWxucyAoIFFOYW1lIG5hbWUgKSB7IHN1cGVyKCBuYW1lLCB0cnVlICk7IH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgZmluYWwgY2xhc3MgUHJvY2luc3QgZXh0ZW5kcyBRTmFtZVNwbGF5Ci0gICAgewotICAgICAgICBQcm9jaW5zdCAoIFFOYW1lIHRhcmdldCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN1cGVyKCBQUk9DSU5TVCwgZmFsc2UsIHRhcmdldCApOwotICAgICAgICB9Ci0KLSAgICAgICAgUHJvY2luc3QgKCBTdHJpbmcgdGFyZ2V0ICkKLSAgICAgICAgewotICAgICAgICAgICAgc3VwZXIoIFBST0NJTlNULCBmYWxzZSwgbmV3IFFOYW1lKCAiIiwgdGFyZ2V0ICkgKTsKLSAgICAgICAgfQotCi0gICAgICAgIENvbnRhaW5lciBnZXRDb250YWluZXIgKCApIHsgcmV0dXJuIGZpbmRDb250YWluZXIoKTsgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIEV2ZXJ5IHNwbGF5IHBvaW50cyB0byBhIGNvbGxlY3Rpb24gb2YgZ29vYmVycy4gIEdvb2JlcnMgY2FuIGJlCi0gICAgICogYWdncmVnYXRlZCBpbnRvIGdyb3VwcyB3aGljaCBzaGFyZSB0aGUgc2FtZSBzdGF0ZSAoa2luZCBhbmQgcG9zaXRpb24pLgotICAgICAqLwotCi0gICAgc3RhdGljIGZpbmFsIGludCBDVVJTT1IgICAgID0gMDsKLSAgICBzdGF0aWMgZmluYWwgaW50IFRZUEUgICAgICAgPSAxOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQU5OT1RBVElPTiA9IDI7Ci0gICAgc3RhdGljIGZpbmFsIGludCBBR0dSRUdBVEUgID0gMzsKLQotICAgIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBHb29iZXIgZXh0ZW5kcyBHb29iZXJzCi0gICAgewotICAgICAgICBHb29iZXIgKCBSb290IHIsIGludCBraW5kICkKLSAgICAgICAgewotICAgICAgICAgICAgX3Jvb3QgPSByOwotICAgICAgICAgICAgX3N0YXRlID0ga2luZDsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFsIGludCAgIGdldEtpbmQgICggKSB7IHJldHVybiBfc3RhdGUgJiA3OyAgfQotICAgICAgICBmaW5hbCBSb290ICBnZXRSb290ICAoICkgeyByZXR1cm4gX3Jvb3Q7ICAgICAgIH0KLSAgICAgICAgZmluYWwgU3BsYXkgZ2V0U3BsYXkgKCApIHsgcmV0dXJuIF9zcGxheTsgICAgICB9Ci0gICAgICAgIGZpbmFsIGludCAgIGdldFBvcyAgICggKSB7IHJldHVybiBfc3RhdGUgPj4gMzsgfQotICAgICAgICBmaW5hbCBpbnQgICBnZXRTdGF0ZSAoICkgeyByZXR1cm4gX3N0YXRlOyAgICAgIH0KLQotICAgICAgICBmaW5hbCBib29sZWFuIGlzQW5ub3RhdGlvbiAoICkgeyByZXR1cm4gZ2V0S2luZCgpID09IEFOTk9UQVRJT047IH0KLQotICAgICAgICBmaW5hbCB2b2lkIHNldCAoIFJvb3QgciwgU3BsYXkgcywgaW50IHAgKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgcyAhPSBudWxsOwotICAgICAgICAgICAgZG9TZXQoIHIsIHMsIHAgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgZmluYWwgdm9pZCBkb1NldCAoIFJvb3QgciwgU3BsYXkgcywgaW50IHAgKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgcyAhPSBudWxsIHx8IHAgPT0gMDsKLSAgICAgICAgICAgIGFzc2VydCBSb290LmR2ID4gMCB8fCBzID09IG51bGwgfHwgciA9PSBzLmdldFJvb3RTbG93KCk7Ci0gICAgICAgICAgICBhc3NlcnQgUm9vdC5kdiA+IDAgfHwgX3NwbGF5ID09IG51bGwgfHwgX3Jvb3QgPT0gX3NwbGF5LmdldFJvb3RTbG93KCk7Ci0vLyAgICAgICAgICAgIGFzc2VydCBSb290LmR2ID4gMCB8fCBfcm9vdCA9PSByIHx8IF9zcGxheS5nZXRSb290U2xvdygpICE9IHMuZ2V0Um9vdFNsb3coKTsKLQotICAgICAgICAgICAgX3Jvb3QgPSByOwotCi0gICAgICAgICAgICBpZiAoX3NwbGF5ICE9IHMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKF9zcGxheSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICByZW1vdmUoKTsKLQotICAgICAgICAgICAgICAgIGlmIChzICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZCggcyApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhc3NlcnQgcCA+PSAwOwotICAgICAgICAgICAgYXNzZXJ0IF9zcGxheSA9PSBudWxsIHx8IHAgPD0gX3NwbGF5LmdldE1heFBvcygpOwotICAgICAgICAgICAgX3N0YXRlID0gcCAqIDggKyAoX3N0YXRlICYgNyk7Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCB2b2lkIHNldCAoIFJvb3QgciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFzc2VydCByICE9IG51bGw7Ci0gICAgICAgICAgICBfcm9vdCA9IHI7Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCB2b2lkIHNldCAoIFNwbGF5IHMsIGludCBwICkgeyBkb1NldCggZ2V0Um9vdCgpLCBzLCAgICAgICAgICBwICk7IH0KLSAgICAgICAgZmluYWwgdm9pZCBzZXQgKCAgICAgICAgICBpbnQgcCApIHsgZG9TZXQoIGdldFJvb3QoKSwgZ2V0U3BsYXkoKSwgcCApOyB9Ci0KLSAgICAgICAgZmluYWwgdm9pZCBzZXQgKCBHb29iZXIgZyApCi0gICAgICAgICAgICB7IGRvU2V0KCBnLmdldFJvb3QoKSwgZy5nZXRTcGxheSgpLCBnLmdldFBvcygpICk7IH0KLQotICAgICAgICB2b2lkIGRpc2Nvbm5lY3QgKCBSb290IHIgKQotICAgICAgICB7Ci0gICAgICAgICAgICBkb1NldCggciwgbnVsbCwgMCApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBmaW5hbCB2b2lkIGFwcGVuZCAoIFNwbGF5IHMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgcyAhPSBudWxsOwotICAgICAgICAgICAgYXNzZXJ0IFJvb3QuZHYgPiAwIHx8IHMuZ2V0Um9vdFNsb3coKSA9PSBfcm9vdDsKLSAgICAgICAgICAgIGFzc2VydCBfc3BsYXkgPT0gbnVsbDsKLSAgICAgICAgICAgIGFzc2VydCBfcGFyZW50ID09IG51bGw7Ci0gICAgICAgICAgICBhc3NlcnQgX25leHQgPT0gbnVsbCAmJiBfcHJldiA9PSBudWxsOwotCi0gICAgICAgICAgICBpZiAocy5fZ29vYmVycyA9PSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHMuX2dvb2JlcnMgPSB0aGlzOwotICAgICAgICAgICAgICAgIF9uZXh0ID0gX3ByZXYgPSB0aGlzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9uZXh0ID0gcy5fZ29vYmVyczsKLSAgICAgICAgICAgICAgICBfcHJldiA9IF9uZXh0Ll9wcmV2OwotICAgICAgICAgICAgICAgIF9uZXh0Ll9wcmV2ID0gdGhpczsKLSAgICAgICAgICAgICAgICBfcHJldi5fbmV4dCA9IHRoaXM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIF9zcGxheSA9IHM7Ci0gICAgICAgICAgICBfcGFyZW50ID0gczsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgZmluYWwgdm9pZCByZW1vdmUgKCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFzc2VydCBfc3BsYXkgIT0gbnVsbDsKLSAgICAgICAgICAgIGFzc2VydCBfZ29vYmVycyA9PSBudWxsOwotCi0gICAgICAgICAgICBpZiAoX25leHQgPT0gdGhpcykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQgX3BhcmVudC5fZ29vYmVycyA9PSB0aGlzOwotCi0gICAgICAgICAgICAgICAgX3BhcmVudC5fZ29vYmVycyA9IG51bGw7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiBwYXJlbnQgaXMgYW4gYWdncmVnYXRlIGdvb2JlciwgcmVtb3ZlIGl0IHRvbwotCi0gICAgICAgICAgICAgICAgaWYgKF9wYXJlbnQgIT0gX3NwbGF5KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR29vYmVyIGcgPSAoR29vYmVyKSBfcGFyZW50OwotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgZy5nZXRLaW5kKCkgPT0gQUdHUkVHQVRFOwotICAgICAgICAgICAgICAgICAgICBnLnJlbW92ZSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfcHJldi5fbmV4dCA9IF9uZXh0OwotICAgICAgICAgICAgICAgIF9uZXh0Ll9wcmV2ID0gX3ByZXY7Ci0KLSAgICAgICAgICAgICAgICBpZiAoX3BhcmVudC5fZ29vYmVycyA9PSB0aGlzKQotICAgICAgICAgICAgICAgICAgICBfcGFyZW50Ll9nb29iZXJzID0gX25leHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIF9uZXh0ID0gX3ByZXYgPSBudWxsOwotCi0gICAgICAgICAgICBfcGFyZW50ID0gbnVsbDsKLSAgICAgICAgICAgIF9zcGxheSA9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBYbWxCb29rbWFyayBnZXRCb29rbWFyayAoICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgZ2V0S2luZCgpID09IEFOTk9UQVRJT04KLSAgICAgICAgICAgICAgICAgICAgPyAoKEFubm90YXRpb24pIHRoaXMpLmdldFhtbEJvb2ttYXJrKCkKLSAgICAgICAgICAgICAgICAgICAgOiBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RyaW5nIGdldEtpbmROYW1lICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKCBnZXRLaW5kKCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgY2FzZSBDVVJTT1IgICAgIDogcmV0dXJuICJDVVJTT1IiOwotICAgICAgICAgICAgY2FzZSBUWVBFICAgICAgIDogcmV0dXJuICJUWVBFIjsKLSAgICAgICAgICAgIGNhc2UgQU5OT1RBVElPTiA6IHJldHVybiAiQU5OT1RBVElPTiI7Ci0gICAgICAgICAgICBkZWZhdWx0ICAgICAgICAgOiByZXR1cm4gIjx1bmtub3cgZ29vYmVyIGtpbmQ+IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgUm9vdCBfcm9vdDsKLQotICAgICAgICBwcml2YXRlIFNwbGF5IF9zcGxheTsKLQotICAgICAgICBwcml2YXRlIGludCBfc3RhdGU7ICAvLyBwb3MgYW5kIGtpbmQKLQotICAgICAgICBHb29iZXIgIF9uZXh0OwotICAgICAgICBHb29iZXIgIF9wcmV2OwotICAgICAgICBHb29iZXJzIF9wYXJlbnQ7Ci0gICAgfQotCi0gICAgc3RhdGljIGZpbmFsIGNsYXNzIEN1cnNvckdvb2JlciBleHRlbmRzIEdvb2JlcgotICAgIHsKLSAgICAgICAgQ3Vyc29yR29vYmVyICggUm9vdCByICkKLSAgICAgICAgewotICAgICAgICAgICAgc3VwZXIoIHIsIENVUlNPUiApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSGFzaE1hcCBjcmVhdGVEZWJ1Z0lkTWFwICggKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBDcmVlcHkgd2F5IHRvIGRpc2NvdmVyIGlzIGFzc2VydCBpcyBlbmFibGVkLgotICAgICAgICAgICAgSGFzaE1hcCBtYXAgPSBudWxsOwotICAgICAgICAgICAgYXNzZXJ0IChtYXAgPSBuZXcgSGFzaE1hcCgpKSAhPSBudWxsOwotICAgICAgICAgICAgcmV0dXJuIG1hcDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBpbnQgZ2V0RGVidWdJZCAoICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKF9kZWJ1Z0lkcyA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLQotICAgICAgICAgICAgc3luY2hyb25pemVkICggX2RlYnVnSWRzICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIV9kZWJ1Z0lkcy5jb250YWluc0tleSggdGhpcyApKQotICAgICAgICAgICAgICAgICAgICBfZGVidWdJZHMucHV0KCB0aGlzLCBuZXcgSW50ZWdlciggX25leHREZWJ1Z0lkKysgKSApOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuICgoSW50ZWdlcikgX2RlYnVnSWRzLmdldCggdGhpcyApKS5pbnRWYWx1ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSGFzaE1hcCBfZGVidWdJZHMgPSBjcmVhdGVEZWJ1Z0lkTWFwKCk7Ci0gICAgICAgIHByaXZhdGUgc3RhdGljIGludCAgIF9uZXh0RGVidWdJZCA9IDE7Ci0gICAgfQotCi0gICAgc3RhdGljIGNsYXNzIEFubm90YXRpb24gZXh0ZW5kcyBHb29iZXIgaW1wbGVtZW50cyBYbWxNYXJrCi0gICAgewotICAgICAgICBwdWJsaWMgT2JqZWN0IG1vbml0b3IoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0Um9vdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgQW5ub3RhdGlvbiAoIFJvb3QgciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN1cGVyKCByLCBBTk5PVEFUSU9OICk7Ci0gICAgICAgIH0KLQotICAgICAgICBBbm5vdGF0aW9uICggUm9vdCByLCBYbWxCb29rbWFyayBhICkKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcyggciApOwotCi0gICAgICAgICAgICBpZiAoYS5fcmVmID09IG51bGwpCi0gICAgICAgICAgICAgICAgX2Fubm90YXRpb24gPSBhOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIF9yZWYgPSBhLl9yZWY7Ci0KLSAgICAgICAgICAgIF9rZXkgPSBhLmdldEtleSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRLZXkgKCBPYmplY3Qga2V5ICkKLSAgICAgICAgewotICAgICAgICAgICAgX2tleSA9IGtleTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGNhbGxlZCB2aWEgYm9va21hcmsgKHB1YmxpYyB2aWEgWG1sTWFyaykKLSAgICAgICAgcHVibGljIGZpbmFsIFhtbEN1cnNvciBjcmVhdGVDdXJzb3IgKCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN5bmNocm9uaXplZCAobW9uaXRvcigpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChnZXRTcGxheSgpID09IG51bGwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgIkF0dGVtcHRpbmcgdG8gY3JlYXRlIGEgY3Vyc29yIG9uIGEgYm9va21hcmsgdGhhdCAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzIGJlZW4gY2xlYXJlZCBvciByZXBsYWNlZC4iKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEN1cnNvciggZ2V0Um9vdCgpLCBnZXRTcGxheSgpLCBnZXRQb3MoKSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFhtbEJvb2ttYXJrIGdldFhtbEJvb2ttYXJrICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX2Fubm90YXRpb24gIT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gX2Fubm90YXRpb247Ci0KLSAgICAgICAgICAgIGlmIChfcmVmICE9IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIChYbWxCb29rbWFyaykgX3JlZi5nZXQoKTsKLQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGRpc2Nvbm5lY3QgKCBSb290IHIgKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdXBlci5kaXNjb25uZWN0KCByICk7Ci0KLSAgICAgICAgICAgIFhtbEJvb2ttYXJrIHhhID0gZ2V0WG1sQm9va21hcmsoKTsKLQotICAgICAgICAgICAgaWYgKHhhICE9IG51bGwpCi0gICAgICAgICAgICAgICAgeGEuX2N1cnJlbnRNYXJrID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIFhtbEJvb2ttYXJrIF9hbm5vdGF0aW9uOwotICAgICAgICBSZWZlcmVuY2UgICAgIF9yZWY7Ci0KLSAgICAgICAgT2JqZWN0IF9rZXk7Ci0gICAgfQotCi0gICAgZmluYWwgR29vYmVyIGZpcnN0R29vYmVyICggKQotICAgIHsKLSAgICAgICAgaWYgKF9nb29iZXJzID09IG51bGwgfHwgX2dvb2JlcnMuZ2V0S2luZCgpICE9IEFHR1JFR0FURSkKLSAgICAgICAgICAgIHJldHVybiBfZ29vYmVyczsKLQotICAgICAgICBhc3NlcnQgX2dvb2JlcnMuX2dvb2JlcnMgIT0gbnVsbDsKLSAgICAgICAgYXNzZXJ0IF9nb29iZXJzLl9nb29iZXJzLmdldEtpbmQoKSAhPSBBR0dSRUdBVEU7Ci0KLSAgICAgICAgcmV0dXJuIF9nb29iZXJzLl9nb29iZXJzOwotICAgIH0KLQotICAgIGZpbmFsIEdvb2JlciBuZXh0R29vYmVyICggR29vYmVyIGcgKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IGcgIT0gbnVsbDsKLQotICAgICAgICBpZiAoKGcgPSBnLl9uZXh0KSAhPSBnLl9wYXJlbnQuX2dvb2JlcnMpCi0gICAgICAgICAgICByZXR1cm4gZzsKLQotICAgICAgICByZXR1cm4gZy5fcGFyZW50ID09IGcuX3NwbGF5ID8gbnVsbCA6IG5leHRHb29iZXIoIChHb29iZXIpIGcuX3BhcmVudCApOwotICAgIH0KLQotICAgIHN0YXRpYyBmaW5hbCBib29sZWFuIF9hc3NlcnRFbmFibGVkID0gZ2V0QXNzZXJ0RW5hYmxlZCgpOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBnZXRBc3NlcnRFbmFibGVkICggKQotICAgIHsKLSAgICAgICAgLy8gQ3JlZXB5IHdheSB0byBkaXNjb3ZlciBpcyBhc3NlcnQgaXMgZW5hYmxlZC4KLSAgICAgICAgYm9vbGVhbiBlbmFibGVkID0gZmFsc2U7Ci0gICAgICAgIGFzc2VydCAoZW5hYmxlZCA9IHRydWUpIHx8IHRydWU7Ci0gICAgICAgIHJldHVybiBlbmFibGVkOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFzc2VydEFzc2VydEVuYWJsZWQgKCApCi0gICAgewotICAgICAgICBpZiAoIV9hc3NlcnRFbmFibGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdwotICAgICAgICAgICAgICAgIG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAiQXNzZXJ0IG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgb3BlcmF0aW9uIiApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQXNzb2NpYXRlIGlkJ3Mgd2l0aCBzcGxheXMgd2hlbiBhc3NlcnRzIGFyZSBlbmFibGVkCi0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBIYXNoTWFwIF9kZWJ1Z0lkcyA9Ci0gICAgICAgIF9hc3NlcnRFbmFibGVkID8gbmV3IEhhc2hNYXAoKSA6IG51bGw7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgX25leHREZWJ1Z0lkID0gMTsKLQotICAgIHB1YmxpYyBpbnQgZ2V0RGVidWdJZCAoICkKLSAgICB7Ci0gICAgICAgIGlmIChfZGVidWdJZHMgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLQotICAgICAgICBzeW5jaHJvbml6ZWQgKCBfZGVidWdJZHMgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIV9kZWJ1Z0lkcy5jb250YWluc0tleSggdGhpcyApKQotICAgICAgICAgICAgICAgIF9kZWJ1Z0lkcy5wdXQoIHRoaXMsIG5ldyBJbnRlZ2VyKCBfbmV4dERlYnVnSWQrKyApICk7Ci0KLSAgICAgICAgICAgIHJldHVybiAoKEludGVnZXIpIF9kZWJ1Z0lkcy5nZXQoIHRoaXMgKSkuaW50VmFsdWUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgZHVtcCAoICkgeyBnZXRSb290U2xvdygpLmR1bXAoKTsgfQotICAgIHZvaWQgZHVtcCAoIGJvb2xlYW4gdmVyYm9zZSApIHsgZ2V0Um9vdFNsb3coKS5kdW1wKCB2ZXJib3NlICk7IH0KLQotICAgIHB1YmxpYyBTcGxheSBnZXRTcGxheVJvb3RTbG93ICggKQotICAgIHsKLSAgICAgICAgYXNzZXJ0QXNzZXJ0RW5hYmxlZCgpOwotCi0gICAgICAgIFNwbGF5IHMgPSB0aGlzOwotCi0gICAgICAgIHdoaWxlICggcy5fcGFyZW50U3BsYXkgIT0gbnVsbCApCi0gICAgICAgICAgICBzID0gcy5fcGFyZW50U3BsYXk7Ci0KLSAgICAgICAgcmV0dXJuIHM7Ci0gICAgfQotCi0gICAgcHVibGljIFJvb3QgZ2V0Um9vdFNsb3cgKCApCi0gICAgewotICAgICAgICBhc3NlcnRBc3NlcnRFbmFibGVkKCk7Ci0KLSAgICAgICAgU3BsYXkgcyA9IGdldFNwbGF5Um9vdFNsb3coKTsKLQotICAgICAgICByZXR1cm4gcy5pc1Jvb3QoKSA/IChSb290KSBzIDogbnVsbDsKLSAgICB9Ci0KLSAgICBpbnQgZ2V0Q3BTbG93ICggKQotICAgIHsKLSAgICAgICAgYXNzZXJ0QXNzZXJ0RW5hYmxlZCgpOwotCi0gICAgICAgIGludCBjY2ggPSAwOwotCi0gICAgICAgIGZvciAoIFNwbGF5IHMgPSB0aGlzIDsgKHMgPSBzLnByZXZTcGxheSgpKSAhPSBudWxsIDsgKQotICAgICAgICAgICAgY2NoICs9IHMuZ2V0Q2NoKCk7Ci0KLSAgICAgICAgcmV0dXJuIGNjaDsKLSAgICB9Ci0KLSAgICBpbnQgY29tcGFyZVNsb3cgKCBTcGxheSBzVGhhdCApCi0gICAgewotICAgICAgICBhc3NlcnRBc3NlcnRFbmFibGVkKCk7Ci0KLSAgICAgICAgYXNzZXJ0IFJvb3QuZHYgPiAwIHx8IGdldFJvb3RTbG93KCkgPT0gc1RoYXQuZ2V0Um9vdFNsb3coKTsKLQotICAgICAgICBpZiAodGhpcyA9PSBzVGhhdCkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIGZvciAoIFNwbGF5IHMgPSB0aGlzIDsgcyAhPSBudWxsIDsgcyA9IHMubmV4dFNwbGF5KCkgKQotICAgICAgICAgICAgaWYgKHMgPT0gc1RoYXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgICAgIGZvciAoIFNwbGF5IHMgPSB0aGlzIDsgcyAhPSBudWxsIDsgcyA9IHMucHJldlNwbGF5KCkgKQotICAgICAgICAgICAgaWYgKHMgPT0gc1RoYXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICAgICAgYXNzZXJ0IGZhbHNlOiAiWWlrZXMhIjsKLQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBib29sZWFuIHZhbGlkYXRlICggKQotICAgIHsKLSAgICAgICAgYXNzZXJ0QXNzZXJ0RW5hYmxlZCgpOwotCi0gICAgICAgIHJldHVybiBnZXRSb290U2xvdygpLnZhbGlkYXRlKCk7Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBEb2N1bWVudCBzcGxheSB0cmVlIG1lbWJlcnMKLSAgICAvLwotCi0gICAgU3BsYXkgX2xlZnRTcGxheTsKLSAgICBTcGxheSBfcmlnaHRTcGxheTsKLSAgICBTcGxheSBfcGFyZW50U3BsYXk7Ci0KLSAgICBwcml2YXRlIGludCBfYml0czsgLy8gMjc6IGNEb2NiZWdpbkxlZnQsIDE6IGludmFsaWQsIDE6IG11bHRpLCAzOiBraW5kCi0gICAgcHJpdmF0ZSBpbnQgX2NjaDsKLSAgICBwcml2YXRlIGludCBfY2NoQWZ0ZXI7Ci0gICAgcHJpdmF0ZSBpbnQgX2NjaExlZnQ7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1sc3RvcmUvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3N0b3JlL1RleHQuamF2YSBiL3YyL3NyYy94bWxzdG9yZS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc3RvcmUvVGV4dC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTVlMWM5Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxzdG9yZS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc3RvcmUvVGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUwICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnN0b3JlOwotCi0vL2ltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc3RvcmUuUm9vdC5Xcml0ZUNvbnRleHQ7Ci0vL2ltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc3RvcmUuUm9vdC5SZWFkQ29udGV4dDsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgVGV4dAotewotICAgIGNoYXJbXSBfYnVmOwotICAgIGludCAgICBfZ2FwOyAgICAvLyBXaGVyZSB0aGUgZ2FwIHN0YXJ0cwotICAgIGludCAgICBfZ2FwTGVuOyAvLyBUaGUgbGVuZ3RoIG9mIHRoZSBnYXAKLQotICAgIGludCBsZW5ndGggKCApCi0gICAgewotICAgICAgICByZXR1cm4gYnVmTGVuKCkgLSBfZ2FwTGVuOwotICAgIH0KLQotICAgIHByaXZhdGUgaW50IGJ1ZkxlbiAoICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfYnVmID09IG51bGwgPyAwIDogX2J1Zi5sZW5ndGg7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGNvcHkgKCBjaGFyW10gbmV3QnVmICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCBfYnVmICE9IG51bGwgJiYgbmV3QnVmLmxlbmd0aCA+PSBsZW5ndGgoKTsKLSAgICAgICAgCi0gICAgICAgIFN5c3RlbS5hcnJheWNvcHkoIF9idWYsIDAsIG5ld0J1ZiwgMCwgX2dhcCApOwotCi0gICAgICAgIGludCBsZW5BZnRlckdhcCA9IF9idWYubGVuZ3RoIC0gX2dhcCAtIF9nYXBMZW47Ci0KLSAgICAgICAgU3lzdGVtLmFycmF5Y29weSgKLSAgICAgICAgICAgIF9idWYsIF9nYXAgKyBfZ2FwTGVuLAotICAgICAgICAgICAgbmV3QnVmLCBuZXdCdWYubGVuZ3RoIC0gKGxlbkFmdGVyR2FwKSwgbGVuQWZ0ZXJHYXAgKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlc2l6ZSAoIGludCBjY2ggKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IGNjaCA+IF9nYXBMZW47Ci0gICAgICAgIAotICAgICAgICBpbnQgbmV3U2l6ZSA9IGxlbmd0aCgpICsgY2NoOwotICAgICAgICBpbnQgbmV3TGVuID0gX2J1ZiA9PSBudWxsID8gMTAyNCA6IF9idWYubGVuZ3RoICogMjsKLQotICAgICAgICB3aGlsZSAoIG5ld0xlbiA8IG5ld1NpemUgKQotICAgICAgICAgICAgbmV3TGVuICo9IDI7Ci0KLSAgICAgICAgY2hhcltdIG5ld0J1ZiA9IG5ldyBjaGFyIFsgbmV3TGVuIF07Ci0KLSAgICAgICAgaWYgKF9idWYgIT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgY29weSggbmV3QnVmICk7Ci0gICAgICAgICAgICBfZ2FwTGVuICs9IG5ld0J1Zi5sZW5ndGggLSBfYnVmLmxlbmd0aDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBfZ2FwTGVuICs9IG5ld0J1Zi5sZW5ndGg7Ci0KLSAgICAgICAgX2J1ZiA9IG5ld0J1ZjsKLSAgICB9Ci0KLSAgICB2b2lkIHRyaW0gKCApCi0gICAgewotICAgICAgICBpZiAoX2J1ZiAhPSBudWxsICYmIF9nYXBMZW4gIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgY2hhcltdIG5ld0J1ZiA9IG5ldyBjaGFyIFsgbGVuZ3RoKCkgXTsKLQotICAgICAgICAgICAgY29weSggbmV3QnVmICk7Ci0KLSAgICAgICAgICAgIF9idWYgPSBuZXdCdWY7Ci0gICAgICAgICAgICBfZ2FwID0gMDsKLSAgICAgICAgICAgIF9nYXBMZW4gPSAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBtb3ZlICggaW50IHBvcywgVGV4dCBzcmMsIGludCBzcmNQb3MsIGludCBjY2ggKQotICAgIHsKLSAgICAgICAgaW5zZXJ0KCBwb3MsIHNyYywgc3JjUG9zLCBjY2ggKTsKLQotICAgICAgICBpZiAoc3JjID09IHRoaXMgJiYgc3JjUG9zID49IHBvcykKLSAgICAgICAgICAgIHNyY1BvcyArPSBjY2g7Ci0KLSAgICAgICAgc3JjLnJlbW92ZSggc3JjUG9zLCBjY2ggKTsKLSAgICB9Ci0KLSAgICB2b2lkIGluc2VydCAoIGludCBwb3MsIE9iamVjdCB0eHQsIGludCBvZmYsIGludCBjY2ggKQotICAgIHsKLSAgICAgICAgaWYgKHR4dCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodHh0IGluc3RhbmNlb2YgU3RyaW5nKQotICAgICAgICAgICAgICAgIGluc2VydCggcG9zLCAoU3RyaW5nKSB0eHQsIG9mZiwgY2NoICk7Ci0gICAgICAgICAgICBlbHNlIGlmICh0eHQgaW5zdGFuY2VvZiBUZXh0KQotICAgICAgICAgICAgICAgIGluc2VydCggcG9zLCAoVGV4dCkgdHh0LCBvZmYsIGNjaCApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFzc2VydCB0eHQgaW5zdGFuY2VvZiBjaGFyW107Ci0gICAgICAgICAgICAgICAgaW5zZXJ0KCBwb3MsIChjaGFyW10pIHR4dCwgb2ZmLCBjY2ggKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGluc2VydCAoIGludCBwb3MsIFRleHQgc3JjLCBpbnQgc3JjUG9zLCBpbnQgY2NoICkKLSAgICB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoaXMgY2FuIGRlYWwgd2l0aCBjb3B5aW5nIGZyb20gaXRzZWxmCi0gICAgICAgIC8vCi0KLSAgICAgICAgaWYgKGNjaCA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjY2ggPiBfZ2FwTGVuKQotICAgICAgICAgICAgICAgIHJlc2l6ZSggY2NoICk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1vdmVHYXAoIHBvcyApOwotCi0gICAgICAgICAgICBpZiAoc3JjUG9zICsgY2NoIDwgc3JjLl9nYXApCi0gICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSggc3JjLl9idWYsIHNyY1BvcywgX2J1ZiwgX2dhcCwgY2NoICk7Ci0gICAgICAgICAgICBlbHNlIGlmIChzcmNQb3MgPj0gc3JjLl9nYXApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSgKLSAgICAgICAgICAgICAgICAgICAgc3JjLl9idWYsIHNyY1BvcyArIHNyYy5fZ2FwTGVuLCBfYnVmLCBfZ2FwLCBjY2ggKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgbGVmdExlbiA9IHNyYy5fZ2FwIC0gc3JjUG9zOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSggc3JjLl9idWYsIHNyY1BvcywgX2J1ZiwgX2dhcCwgbGVmdExlbiApOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSgKLSAgICAgICAgICAgICAgICAgICAgc3JjLl9idWYsIHNyYy5fZ2FwICsgc3JjLl9nYXBMZW4sCi0gICAgICAgICAgICAgICAgICAgIF9idWYsIF9nYXAgKyBsZWZ0TGVuLCBjY2ggLSBsZWZ0TGVuICk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIF9nYXAgKz0gY2NoOwotICAgICAgICAgICAgX2dhcExlbiAtPSBjY2g7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBpbnNlcnQgKCBpbnQgcG9zLCBjaGFyW10gY2hhcnMsIGludCBvZmYsIGludCBjY2ggKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IGNoYXJzICE9IF9idWY7Ci0gICAgICAgIGFzc2VydCBwb3MgPj0gMCAmJiBwb3MgPD0gbGVuZ3RoKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY2NoID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGNjaCA+IF9nYXBMZW4pCi0gICAgICAgICAgICAgICAgcmVzaXplKCBjY2ggKTsKLQotICAgICAgICAgICAgbW92ZUdhcCggcG9zICk7Ci0KLSAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoIGNoYXJzLCBvZmYsIF9idWYsIF9nYXAsIGNjaCApOwotCi0gICAgICAgICAgICBfZ2FwICs9IGNjaDsKLSAgICAgICAgICAgIF9nYXBMZW4gLT0gY2NoOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBpbnNlcnQgKCBpbnQgcG9zLCBTdHJpbmcgcyApCi0gICAgewotICAgICAgICBpbnNlcnQoIHBvcywgcywgMCwgcy5sZW5ndGgoKSApOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGluc2VydCAoIGludCBwb3MsIFN0cmluZyBzLCBpbnQgb2ZmLCBpbnQgY2NoICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCBwb3MgPj0gMCAmJiBwb3MgPD0gbGVuZ3RoKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY2NoID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0IG9mZiA+PSAwICYmIG9mZiA8IHMubGVuZ3RoKCk7Ci0gICAgICAgICAgICBhc3NlcnQgY2NoIDw9IHMubGVuZ3RoKCkgLSBvZmY7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChjY2ggPiBfZ2FwTGVuKQotICAgICAgICAgICAgICAgIHJlc2l6ZSggY2NoICk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1vdmVHYXAoIHBvcyApOwotCi0gICAgICAgICAgICBzLmdldENoYXJzKCBvZmYsIG9mZiArIGNjaCwgX2J1ZiwgX2dhcCApOwotCi0gICAgICAgICAgICBfZ2FwICs9IGNjaDsKLSAgICAgICAgICAgIF9nYXBMZW4gLT0gY2NoOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCByZW1vdmUgKCBpbnQgcG9zLCBpbnQgY2NoICkKLSAgICB7Ci0gICAgICAgIHJlbW92ZSggcG9zLCBjY2gsIG51bGwsIDAgKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCByZW1vdmUgKCBpbnQgcG9zLCBpbnQgY2NoLCBjaGFyW10gcmV0QnVmLCBpbnQgb2ZmICkKLSAgICB7Ci0gICAgICAgIGFzc2VydCBwb3MgPj0gMCAmJiBwb3MgKyBjY2ggPD0gbGVuZ3RoKCk7Ci0KLSAgICAgICAgbW92ZUdhcCggcG9zICk7Ci0KLSAgICAgICAgYXNzZXJ0IHJldEJ1ZiA9PSBudWxsIHx8IHJldEJ1Zi5sZW5ndGggLSBvZmYgPj0gY2NoOwotCi0gICAgICAgIGlmIChjY2ggPiAwICYmIHJldEJ1ZiAhPSBudWxsKQotICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSggX2J1ZiwgX2dhcCArIF9nYXBMZW4sIHJldEJ1Ziwgb2ZmLCBjY2ggKTsKLSAgICAgICAgCi0gICAgICAgIF9nYXBMZW4gKz0gY2NoOwotICAgIH0KLQotICAgIHZvaWQgbW92ZUdhcCggaW50IHBvcyApCi0gICAgewotICAgICAgICBpZiAocG9zIDwgX2dhcCkKLSAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoIF9idWYsIHBvcywgX2J1ZiwgcG9zICsgX2dhcExlbiwgX2dhcCAtIHBvcyApOwotICAgICAgICBlbHNlIGlmIChwb3MgPiBfZ2FwKQotICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSggX2J1ZiwgX2dhcCArIF9nYXBMZW4sIF9idWYsIF9nYXAsIHBvcyAtIF9nYXApOwotCi0gICAgICAgIF9nYXAgPSBwb3M7Ci0gICAgfQotCi0gICAgaW50IHVuT2JzY3VyZSAoIGludCBwb3MsIGludCBjY2ggKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IGNjaCA+PSAwOwotICAgICAgICBhc3NlcnQgcG9zID49IDAgJiYgcG9zICsgY2NoIDw9IGxlbmd0aCgpOwotCi0gICAgICAgIGlmIChjY2ggPiAwICYmIChwb3MgPCBfZ2FwICYmIHBvcyArIGNjaCA+IF9nYXApKQotICAgICAgICAgICAgbW92ZUdhcCggcG9zICsgY2NoICk7Ci0KLSAgICAgICAgcmV0dXJuIHBvcyA8IF9nYXAgPyBwb3MgOiBwb3MgKyBfZ2FwTGVuOwotICAgIH0KLQotICAgIHZvaWQgZmV0Y2ggKCBTdHJpbmdCdWZmZXIgc2IsIGludCBwb3MsIGludCBjY2ggKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IHBvcyA+PSAwICYmIHBvcyArIGNjaCA8PSBsZW5ndGgoKTsKLQotICAgICAgICBpZiAoY2NoID09IDApCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHBvcyArIGNjaCA8PSBfZ2FwKQotICAgICAgICB7Ci0gICAgICAgICAgICBzYi5hcHBlbmQoIF9idWYsIHBvcywgY2NoICk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocG9zID49IF9nYXApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc2IuYXBwZW5kKCBfYnVmLCBwb3MgKyBfZ2FwTGVuLCBjY2ggKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIF9idWYsIHBvcywgX2dhcCAtIHBvcyApOwotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggX2J1ZiwgX2dhcCArIF9nYXBMZW4sIGNjaCAtIF9nYXAgKyBwb3MgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIFN0cmluZyBmZXRjaCAoIGludCBwb3MsIGludCBjY2ggKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IHBvcyA+PSAwICYmIHBvcyArIGNjaCA8PSBsZW5ndGgoKTsKLQotICAgICAgICBpZiAoY2NoID09IDApCi0gICAgICAgICAgICByZXR1cm4gIiI7Ci0KLSAgICAgICAgaWYgKHBvcyArIGNjaCA8PSBfZ2FwKQotICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoIF9idWYsIHBvcywgY2NoICk7Ci0KLSAgICAgICAgaWYgKHBvcyA+PSBfZ2FwKQotICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcoIF9idWYsIHBvcyArIF9nYXBMZW4sIGNjaCApOwotCi0gICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQotICAgICAgICBzYi5hcHBlbmQoIF9idWYsIHBvcywgX2dhcCAtIHBvcyApOwotICAgICAgICBzYi5hcHBlbmQoIF9idWYsIF9nYXAgKyBfZ2FwTGVuLCBjY2ggLSBfZ2FwICsgcG9zICk7Ci0KLSAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgdm9pZCBmZXRjaCAoIGNoYXJbXSBidWYsIGludCBvZmYsIGludCBwb3MsIGludCBjY2ggKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IG9mZiA+PSAwOwotICAgICAgICBhc3NlcnQgcG9zID49IDAgJiYgcG9zICsgY2NoIDw9IGxlbmd0aCgpOwotICAgICAgICBhc3NlcnQgYnVmLmxlbmd0aCAtIG9mZiA+PSBjY2g7Ci0KLSAgICAgICAgaWYgKGNjaCA9PSAwKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKHBvcyArIGNjaCA8PSBfZ2FwKQotICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSggX2J1ZiwgcG9zLCBidWYsIG9mZiwgY2NoICk7Ci0gICAgICAgIGVsc2UgaWYgKHBvcyA+PSBfZ2FwKQotICAgICAgICAgICAgU3lzdGVtLmFycmF5Y29weSggX2J1ZiwgcG9zICsgX2dhcExlbiwgYnVmLCBvZmYsIGNjaCApOwotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBjaHVuayA9IF9nYXAgLSBwb3M7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoIF9idWYsIHBvcywgYnVmLCBvZmYsIGNodW5rICk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFN5c3RlbS5hcnJheWNvcHkoCi0gICAgICAgICAgICAgICAgX2J1ZiwgX2dhcCArIF9nYXBMZW4sIGJ1Ziwgb2ZmICsgY2h1bmssIGNjaCAtIGNodW5rICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nICggKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZldGNoKCAwLCBsZW5ndGgoKSApOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94bWxzdG9yZS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc3RvcmUvVHlwZS5qYXZhIGIvdjIvc3JjL3htbHN0b3JlL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zdG9yZS9UeXBlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2MTlkOGYuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHN0b3JlL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zdG9yZS9UeXBlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDgwICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnN0b3JlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5WYWxpZGF0b3JMaXN0ZW5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc3RvcmUuU3BsYXkuQXR0cjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc3RvcmUuU3BsYXkuQmVnaW47Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnN0b3JlLlNwbGF5LkNvbnRhaW5lcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc3RvcmUuU3BsYXkuQ29weUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnN0b3JlLlNwbGF5Lkdvb2JlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLk5hbWVzcGFjZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5UeXBlU3RvcmU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5UeXBlU3RvcmVVc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuVHlwZVN0b3JlVXNlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5UeXBlU3RvcmVWaXNpdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFGaWVsZDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBUeXBlIGV4dGVuZHMgR29vYmVyIGltcGxlbWVudHMgVHlwZVN0b3JlCi17Ci0gICAgVHlwZSAoIFJvb3QgciwgU2NoZW1hVHlwZSBzVHlwZSwgU3BsYXkgcyApCi0gICAgewotICAgICAgICB0aGlzKCByLCAoKFR5cGVTdG9yZVVzZXJGYWN0b3J5KSBzVHlwZSkuY3JlYXRlVHlwZVN0b3JlVXNlcigpLCBzICk7Ci0gICAgfQotICAgIAotICAgIFR5cGUgKCBSb290IHIsIFR5cGVTdG9yZVVzZXIgdXNlciwgU3BsYXkgcyApCi0gICAgewotICAgICAgICBzdXBlciggciwgU3BsYXkuVFlQRSApOwotICAgICAgICAKLSAgICAgICAgYXNzZXJ0IHMucGVla1R5cGUoKSA9PSBudWxsOwotICAgICAgICBhc3NlcnQgdXNlciAhPSBudWxsOwotICAgICAgICBhc3NlcnQgcy5pc1R5cGVhYmxlKCk7Ci0gICAgICAgIAotICAgICAgICBfdXNlciA9IHVzZXI7Ci0gICAgICAgIAotICAgICAgICBzZXQoIHMsIDAgKTsKLQotICAgICAgICBpZiAodXNlci51c2VzX2ludmFsaWRhdGVfdmFsdWUoKSkKLSAgICAgICAgICAgIHIuX2NJbnZhbGlkYXRhYmxlVHlwZXMrKzsKLQotICAgICAgICBpZiAodXNlci5pc19jaGlsZF9lbGVtZW50X29yZGVyX3NlbnNpdGl2ZSgpKQotICAgICAgICAgICAgci5fY0VsZW1PcmRlclNlbnNpdGl2ZVR5cGVzKys7Ci0gICAgICAgIAotICAgICAgICB1c2VyLmF0dGFjaF9zdG9yZSggdGhpcyApOwotICAgIH0KLQotICAgIHZvaWQgZGlzY29ubmVjdCAoIFJvb3QgciApCi0gICAgewotICAgICAgICBzdXBlci5kaXNjb25uZWN0KCByICk7Ci0gICAgICAgIAotICAgICAgICBpZiAoX3VzZXIudXNlc19pbnZhbGlkYXRlX3ZhbHVlKCkpCi0gICAgICAgICAgICByLl9jSW52YWxpZGF0YWJsZVR5cGVzLS07Ci0KLSAgICAgICAgaWYgKF91c2VyLmlzX2NoaWxkX2VsZW1lbnRfb3JkZXJfc2Vuc2l0aXZlKCkpCi0gICAgICAgICAgICByLl9jRWxlbU9yZGVyU2Vuc2l0aXZlVHlwZXMtLTsKLSAgICAgICAgCi0gICAgICAgIF91c2VyLmRpc2Nvbm5lY3Rfc3RvcmUoKTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vCi0gICAgLy8KLQotICAgIFNjaGVtYVR5cGUgZ2V0X3NjaGVtYV90eXBlICggKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF91c2VyLmdldF9zY2hlbWFfdHlwZSgpOwotICAgIH0KLSAgICAKLSAgICBTY2hlbWFUeXBlIGdldF9lbGVtZW50X3R5cGUgKCBRTmFtZSBlbHROYW1lLCBRTmFtZSB4c2lUeXBlICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfdXNlci5nZXRfZWxlbWVudF90eXBlKCBlbHROYW1lLCB4c2lUeXBlICk7Ci0gICAgfQotICAgIAotICAgIFNjaGVtYVR5cGUgZ2V0X2F0dHJpYnV0ZV90eXBlICggUU5hbWUgYXR0ck5hbWUgKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF91c2VyLmdldF9hdHRyaWJ1dGVfdHlwZSggYXR0ck5hbWUgKTsKLSAgICB9Ci0gICAgCi0gICAgVHlwZVN0b3JlVXNlciBjcmVhdGVfZWxlbWVudF91c2VyICggUU5hbWUgZWx0TmFtZSwgUU5hbWUgeHNpVHlwZSApCi0gICAgewotICAgICAgICBUeXBlU3RvcmVVc2VyIHJldCA9IG51bGw7Ci0gICAgICAgIGlmIChnZXRSb290KCkuX2ZhY3RvcnkgIT0gbnVsbCkKLSAgICAgICAgICAgIHJldCA9IGdldFJvb3QoKS5fZmFjdG9yeS5jcmVhdGVFbGVtZW50VXNlcihnZXRfc2NoZW1hX3R5cGUoKSwgZWx0TmFtZSwgeHNpVHlwZSk7Ci0KLSAgICAgICAgaWYgKHJldCA9PSBudWxsKQotICAgICAgICAgICAgcmV0ID0gX3VzZXIuY3JlYXRlX2VsZW1lbnRfdXNlciggZWx0TmFtZSwgeHNpVHlwZSApOwotCi0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotICAgICAgICAgICAgCi0gICAgVHlwZVN0b3JlVXNlciBjcmVhdGVfYXR0cmlidXRlX3VzZXIoIFFOYW1lIGF0dHJOYW1lICkKLSAgICB7Ci0gICAgICAgIFR5cGVTdG9yZVVzZXIgcmV0ID0gbnVsbDsKLQotICAgICAgICBpZiAoZ2V0Um9vdCgpLl9mYWN0b3J5ICE9IG51bGwpCi0gICAgICAgICAgICByZXQgPSBnZXRSb290KCkuX2ZhY3RvcnkuY3JlYXRlQXR0cmlidXRlVXNlcihnZXRfc2NoZW1hX3R5cGUoKSwgIGF0dHJOYW1lKTsKLQotICAgICAgICBpZiAocmV0ID09IG51bGwpCi0gICAgICAgICAgICByZXQgPSBfdXNlci5jcmVhdGVfYXR0cmlidXRlX3VzZXIoIGF0dHJOYW1lICk7Ci0KLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICB9Ci0KLSAgICBYbWxPYmplY3QgZ2V0WG1sT2JqZWN0ICggKQotICAgIHsKLSAgICAgICAgcmV0dXJuIChYbWxPYmplY3QpIF91c2VyOwotICAgIH0KLQotICAgIGJvb2xlYW4gdXNlc19pbnZhbGlkYXRlX3ZhbHVlICggKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF91c2VyLnVzZXNfaW52YWxpZGF0ZV92YWx1ZSgpOwotICAgIH0KLQotICAgIGJvb2xlYW4gaXNfY2hpbGRfZWxlbWVudF9vcmRlcl9zZW5zaXRpdmUgKCApCi0gICAgewotICAgICAgICByZXR1cm4gX3VzZXIuaXNfY2hpbGRfZWxlbWVudF9vcmRlcl9zZW5zaXRpdmUoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGludmFsaWRhdGVUZXh0ICggKQotICAgIHsKLSAgICAgICAgaWYgKF9pbmhpYml0VXNlckludmFsaWRhdGUgPT0gMCkKLSAgICAgICAgICAgIF91c2VyLmludmFsaWRhdGVfdmFsdWUoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGludmFsaWRhdGVOaWwgKCApCi0gICAgewotICAgICAgICBpZiAoX2luaGliaXRVc2VySW52YWxpZGF0ZSA9PSAwKQotICAgICAgICAgICAgX3VzZXIuaW52YWxpZGF0ZV9uaWx2YWx1ZSgpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGludmFsaWRhdGVFbGVtZW50ICggQ29udGFpbmVyIGNvbnRhaW5lciwgU3BsYXkgcyApCi0gICAgewotICAgICAgICBhc3NlcnQgcy5nZXRDb250YWluZXIoKSA9PSBjb250YWluZXI7Ci0gICAgICAgIAotICAgICAgICBpZiAoX2luaGliaXRVc2VySW52YWxpZGF0ZSA+IDApCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgVHlwZSBjb250YWluZXJUeXBlID0gY29udGFpbmVyLnBlZWtUeXBlKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRhaW5lclR5cGUgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoIWNvbnRhaW5lclR5cGUuaXNfY2hpbGRfZWxlbWVudF9vcmRlcl9zZW5zaXRpdmUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjb250YWluZXJUeXBlLl91c2VyLmludmFsaWRhdGVfdmFsdWUoKTsKLQotICAgICAgICBmb3IgKCA7IDsgcyA9IHMubmV4dFNwbGF5KCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocy5pc0ZpbmlzaCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGFzc2VydCBzLmdldENvbnRhaW5lcigpID09IGNvbnRhaW5lcjsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChzLmlzQmVnaW4oKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUeXBlIGNoaWxkVHlwZSA9IHMucGVla1R5cGUoKTsKLQotICAgICAgICAgICAgICAgIGlmIChjaGlsZFR5cGUgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgY2hpbGRUeXBlLl91c2VyLmludmFsaWRhdGVfZWxlbWVudF9vcmRlcigpOwotCi0gICAgICAgICAgICAgICAgcyA9IHMuZ2V0RmluaXNoU3BsYXkoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBTdHJpbmcgYnVpbGRfdGV4dCAoIE5hbWVzcGFjZU1hbmFnZXIgbnNtICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfdXNlci5idWlsZF90ZXh0KCBuc20gKTsKLSAgICB9Ci0KLSAgICBib29sZWFuIGJ1aWxkX25pbCAoICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfdXNlci5idWlsZF9uaWwoKTsKLSAgICB9Ci0gICAgCi0gICAgaW50IHZhbGlkYXRlQ29udGVudCAoIFNwbGF5IHMsIE5hbWVzcGFjZU1hbmFnZXIgbnNtICkKLSAgICB7Ci0gICAgICAgIFJvb3QgciA9IGdldFJvb3QoKTsKLSAgICAgICAgCi0gICAgICAgIGFzc2VydCBzLmlzSW52YWxpZCgpOwotICAgICAgICBhc3NlcnQgcy5pc0xlYWYoKSB8fCBzLmlzRG9jKCk7Ci0KLSAgICAgICAgU3RyaW5nIHRleHQgPSBidWlsZF90ZXh0KCBuc20gKTsKLQotICAgICAgICBhc3NlcnQgdGV4dCAhPSBudWxsOwotCi0gICAgICAgIF9pbmhpYml0VXNlckludmFsaWRhdGUrKzsKLQotICAgICAgICAvLyBWYWxpZGF0aW5nIGRvZXMgbm90IGxvZ2ljYWxseSBjaGFuZ2UgdGhlIGRvYwotICAgICAgICBsb25nIG9sZFZlcnNpb24gPSByLmdldFZlcnNpb24oKTsKLSAgICAgICAgCi0gICAgICAgIHMudG9nZ2xlSXNJbnZhbGlkKCk7IC8vIFByZXZlbnRzIGluZmluaXRlIHJlY3Vyc2lvbgotICAgICAgICAKLSAgICAgICAgcy5pbnNlcnRDaGFycyggMSwgciwgdGV4dCwgMCwgdGV4dC5sZW5ndGgoKSApOwotCi0gICAgICAgIHIucmVzdG9yZVZlcnNpb24oIG9sZFZlcnNpb24gKTsKLSAgICAgICAgCi0gICAgICAgIF9pbmhpYml0VXNlckludmFsaWRhdGUtLTsKLQotICAgICAgICByZXR1cm4gdGV4dC5sZW5ndGgoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCB2YWxpZGF0ZVZhbHVlICggU3BsYXkgcywgTmFtZXNwYWNlTWFuYWdlciBuc20gKQotICAgIHsKLSAgICAgICAgUm9vdCByID0gZ2V0Um9vdCgpOwotICAgICAgICAKLSAgICAgICAgYXNzZXJ0IHMuaXNJbnZhbGlkKCk7Ci0gICAgICAgIGFzc2VydCBzLmlzTm9ybWFsQXR0cigpOwotCi0gICAgICAgIFN0cmluZyB0ZXh0ID0gYnVpbGRfdGV4dCggbnNtICk7Ci0KLSAgICAgICAgYXNzZXJ0IHRleHQgIT0gbnVsbDsKLQotICAgICAgICAvLyBWYWxpZGF0aW5nIGRvZXMgbm90IGxvZ2ljYWxseSBjaGFuZ2UgdGhlIGRvYwotICAgICAgICBsb25nIG9sZFZlcnNpb24gPSByLmdldFZlcnNpb24oKTsKLSAgICAgICAgCi0gICAgICAgIF9pbmhpYml0VXNlckludmFsaWRhdGUrKzsKLSAgICAgICAgCi0gICAgICAgIHMudG9nZ2xlSXNJbnZhbGlkKCk7IC8vIFByZXZlbnRzIGluZmluaXRlIHJlY3Vyc2lvbgotICAgICAgICAKLSAgICAgICAgcy5zZXRUZXh0KCByLCB0ZXh0LCAwLCB0ZXh0Lmxlbmd0aCgpICk7Ci0gICAgICAgIAotICAgICAgICByLnJlc3RvcmVWZXJzaW9uKCBvbGRWZXJzaW9uICk7Ci0gICAgICAgIAotICAgICAgICBfaW5oaWJpdFVzZXJJbnZhbGlkYXRlLS07Ci0gICAgfQotCi0gICAgUU5hbWVTZXQgZ2V0X2VsZW1lbnRfZW5kaW5nX2RlbGltaXRlcnMoIFFOYW1lIHFuYW1lICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBfdXNlci5nZXRfZWxlbWVudF9lbmRpbmdfZGVsaW1pdGVycyggcW5hbWUgKTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vCi0gICAgLy8KLSAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiBpc19hdHRyaWJ1dGUgKCApCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0U3BsYXkoKS5pc0F0dHIoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB2YWxpZGF0ZV9vbl9zZXQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdldFJvb3QoKS52YWxpZGF0ZU9uU2V0KCk7Ci0gICAgfQotCi0gICAgcHVibGljIFhtbEN1cnNvciBuZXdfY3Vyc29yICggKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBDdXJzb3IoIGdldFJvb3QoKSwgZ2V0U3BsYXkoKSApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHZhbGlkYXRlICggVmFsaWRhdG9yTGlzdGVuZXIgdkV2ZW50U2luayApCi0gICAgewotICAgICAgICBuZXcgU2F2ZXIuVmFsaWRhdG9yU2F2ZXIoIGdldFJvb3QoKSwgZ2V0U3BsYXkoKSwgMCwgbnVsbCwgdkV2ZW50U2luayApOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgU2NoZW1hVHlwZUxvYWRlciBnZXRfc2NoZW1hdHlwZWxvYWRlciAoICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXRSb290KCkuZ2V0U2NoZW1hVHlwZUxvYWRlcigpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgUU5hbWUgZ2V0X3hzaV90eXBlICggKQotICAgIHsKLSAgICAgICAgU3BsYXkgcyA9IGdldFNwbGF5KCk7Ci0KLSAgICAgICAgYXNzZXJ0IHMuaXNDb250YWluZXIoKSB8fCBzLmlzTm9ybWFsQXR0cigpOwotCi0gICAgICAgIGlmIChzLmlzTm9ybWFsQXR0cigpKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgcmV0dXJuIHMuZ2V0WHNpVHlwZU5hbWUoIGdldFJvb3QoKSApOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgVHlwZVN0b3JlVXNlciBjaGFuZ2VfdHlwZSAoIFNjaGVtYVR5cGUgc1R5cGUgKQotICAgIHsKLSAgICAgICAgU3BsYXkgcyA9IGdldFNwbGF5KCk7Ci0KLSAgICAgICAgcy5zZXRUeXBlKCBnZXRSb290KCksIHNUeXBlLCBmYWxzZSApOwotCi0gICAgICAgIFR5cGUgdCA9IHMuZ2V0VHlwZSggZ2V0Um9vdCgpICk7Ci0KLSAgICAgICAgYXNzZXJ0IHQgIT0gbnVsbDsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiB0Ll91c2VyOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBpbnZhbGlkYXRlX3RleHQgKCApCi0gICAgewotICAgICAgICBTcGxheSBzID0gZ2V0U3BsYXkoKTsKLQotICAgICAgICBhc3NlcnQgcy5pc1R5cGVhYmxlKCk7Ci0KLSAgICAgICAgaWYgKHMuaXNJbnZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBfaW5oaWJpdFVzZXJJbnZhbGlkYXRlKys7Ci0KLSAgICAgICAgcy5yZW1vdmVDb250ZW50KCBnZXRSb290KCksIGZhbHNlICk7Ci0KLSAgICAgICAgcy50b2dnbGVJc0ludmFsaWQoKTsKLSAgICAgICAgYXNzZXJ0IHMuaXNJbnZhbGlkKCk7Ci0gICAgICAgIAotICAgICAgICBfaW5oaWJpdFVzZXJJbnZhbGlkYXRlLS07Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBTdHJpbmcgZmV0Y2hfdGV4dCAoIGludCB3aGl0ZXNwYWNlUnVsZSApCi0gICAgewotICAgICAgICBTcGxheSBzID0gZ2V0U3BsYXkoKTsKLQotICAgICAgICBhc3NlcnQgIXMuaXNJbnZhbGlkKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAocy5pc0ludmFsaWQoKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCAiQ2FuJ3QgZmV0Y2ggdGV4dCB3aGVuIGludmFsaWQiICk7Ci0KLSAgICAgICAgcmV0dXJuIHMuZ2V0VGV4dCggZ2V0Um9vdCgpLCB3aGl0ZXNwYWNlUnVsZSApOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzdG9yZV90ZXh0ICggU3RyaW5nIHRleHQgKQotICAgIHsKLSAgICAgICAgX2luaGliaXRVc2VySW52YWxpZGF0ZSsrOwotICAgICAgICBnZXRTcGxheSgpLnNldFRleHQoIGdldFJvb3QoKSwgdGV4dCwgMCwgdGV4dC5sZW5ndGgoKSApOwotICAgICAgICBfaW5oaWJpdFVzZXJJbnZhbGlkYXRlLS07Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBpbnQgY29tcHV0ZV9mbGFncyAoICkKLSAgICB7Ci0gICAgICAgIFNwbGF5IHMgPSBnZXRTcGxheSgpOwotICAgICAgICAKLSAgICAgICAgYXNzZXJ0IHMuaXNUeXBlYWJsZSgpOwotCi0gICAgICAgIGlmIChzLmlzRG9jKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBDb250YWluZXIgcGFyZW50Q29udGFpbmVyID0gcy5nZXRDb250YWluZXIoKTsKLQotICAgICAgICBUeXBlIHBhcmVudFR5cGUgPSBwYXJlbnRDb250YWluZXIuZ2V0VHlwZSggZ2V0Um9vdCgpICk7Ci0KLSAgICAgICAgYXNzZXJ0IHBhcmVudFR5cGUgIT0gbnVsbDsKLQotICAgICAgICBUeXBlU3RvcmVVc2VyIHBhcmVudFVzZXIgPSBwYXJlbnRUeXBlLl91c2VyOwotCi0gICAgICAgIGlmIChzLmlzQXR0cigpKQotICAgICAgICAgICAgcmV0dXJuIHBhcmVudFVzZXIuZ2V0X2F0dHJpYnV0ZWZsYWdzKCBzLmdldE5hbWUoKSApOwotCi0gICAgICAgIGludCBmID0gcGFyZW50VXNlci5nZXRfZWxlbWVudGZsYWdzKCBzLmdldE5hbWUoKSApOwotCi0gICAgICAgIGlmIChmICE9IC0xKQotICAgICAgICAgICAgcmV0dXJuIGY7Ci0KLSAgICAgICAgVHlwZVN0b3JlVmlzaXRvciB2aXNpdG9yID0gcGFyZW50VXNlci5uZXdfdmlzaXRvcigpOwotCi0gICAgICAgIGlmICh2aXNpdG9yID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBhc3NlcnQgIXBhcmVudENvbnRhaW5lci5pc0xlYWYoKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoIFNwbGF5IHQgPSBwYXJlbnRDb250YWluZXIubmV4dFNwbGF5KCkgOyA7IHQgPSB0Lm5leHRTcGxheSgpICkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoICggdC5nZXRLaW5kKCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTcGxheS5FTkQgOgotICAgICAgICAgICAgICAgIGFzc2VydCBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTcGxheS5CRUdJTiA6Ci0gICAgICAgICAgICAgICAgdmlzaXRvci52aXNpdCggdC5nZXROYW1lKCkgKTsKLQotICAgICAgICAgICAgICAgIGlmICh0ID09IHMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB2aXNpdG9yLmdldF9lbGVtZW50ZmxhZ3MoKTsKLQotICAgICAgICAgICAgICAgIHQgPSB0LmdldEZpbmlzaFNwbGF5KCk7Ci0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBTY2hlbWFGaWVsZCBnZXRfc2NoZW1hX2ZpZWxkICggKQotICAgIHsKLSAgICAgICAgU3BsYXkgcyA9IGdldFNwbGF5KCk7Ci0gICAgICAgIAotICAgICAgICBhc3NlcnQgcy5pc1R5cGVhYmxlKCk7Ci0KLSAgICAgICAgaWYgKHMuaXNEb2MoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAKLSAgICAgICAgQ29udGFpbmVyIHBhcmVudENvbnRhaW5lciA9IHMuZ2V0Q29udGFpbmVyKCk7Ci0KLSAgICAgICAgVHlwZVN0b3JlVXNlciBwYXJlbnRVc2VyID0gcGFyZW50Q29udGFpbmVyLmdldFR5cGUoIGdldFJvb3QoKSApLl91c2VyOwotICAgICAgICAKLSAgICAgICAgaWYgKHMuaXNBdHRyKCkpCi0gICAgICAgICAgICByZXR1cm4gcGFyZW50VXNlci5nZXRfYXR0cmlidXRlX2ZpZWxkKCBzLmdldE5hbWUoKSApOwotCi0gICAgICAgIGFzc2VydCBzLmlzQmVnaW4oKTsKLQotICAgICAgICBhc3NlcnQgIXBhcmVudENvbnRhaW5lci5pc0xlYWYoKTsKLSAgICAgICAgCi0gICAgICAgIFR5cGVTdG9yZVZpc2l0b3IgdmlzaXRvciA9IHBhcmVudFVzZXIubmV3X3Zpc2l0b3IoKTsKLQotICAgICAgICBpZiAodmlzaXRvciA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgZm9yICggU3BsYXkgdCA9IHBhcmVudENvbnRhaW5lci5uZXh0U3BsYXkoKSA7IDsgdCA9IHQubmV4dFNwbGF5KCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKCB0LmdldEtpbmQoKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFNwbGF5LkVORCA6Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlIFNwbGF5LkJFR0lOIDoKLSAgICAgICAgICAgICAgICB2aXNpdG9yLnZpc2l0KCB0LmdldE5hbWUoKSApOwotCi0gICAgICAgICAgICAgICAgaWYgKHQgPT0gcykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZpc2l0b3IuZ2V0X3NjaGVtYV9maWVsZCgpOwotCi0gICAgICAgICAgICAgICAgdCA9IHQuZ2V0RmluaXNoU3BsYXkoKTsKLQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBpbnQgY291bnRfZWxlbWVudHMgKCBRTmFtZSBuYW1lICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXRSb290KCkuY291bnQoIChDb250YWluZXIpIGdldFNwbGF5KCksIG5hbWUsIG51bGwgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGNvdW50X2VsZW1lbnRzKFFOYW1lU2V0IG5hbWVzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdldFJvb3QoKS5jb3VudCgoQ29udGFpbmVyKWdldFNwbGF5KCksICBudWxsLCBuYW1lcyk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBUeXBlU3RvcmVVc2VyIGZpbmRfZWxlbWVudF91c2VyICggUU5hbWUgbmFtZSwgaW50IGkgKQotICAgIHsKLSAgICAgICAgU3BsYXkgcyA9IGdldFNwbGF5KCk7Ci0KLSAgICAgICAgYXNzZXJ0IHMuaXNDb250YWluZXIoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghcy5pc0NvbnRhaW5lcigpKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotCi0gICAgICAgIEJlZ2luIG50aEJlZ2luID0gZ2V0Um9vdCgpLmZpbmROdGhCZWdpbiggcywgbmFtZSwgbnVsbCwgaSApOwotCi0gICAgICAgIGlmIChudGhCZWdpbiA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgVHlwZSB0ID0gbnRoQmVnaW4uZ2V0VHlwZSggZ2V0Um9vdCgpICk7Ci0KLSAgICAgICAgYXNzZXJ0IHQgIT0gbnVsbDsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiB0Ll91c2VyOwotICAgIH0KLQotICAgIHB1YmxpYyBUeXBlU3RvcmVVc2VyIGZpbmRfZWxlbWVudF91c2VyICggUU5hbWVTZXQgbmFtZXMsIGludCBpICkKLSAgICB7Ci0gICAgICAgIFNwbGF5IHMgPSBnZXRTcGxheSgpOwotICAgICAgICBhc3NlcnQgcy5pc0NvbnRhaW5lcigpOwotCi0gICAgICAgIEJlZ2luIG50aEJlZ2luID0gZ2V0Um9vdCgpLmZpbmROdGhCZWdpbihzLCAgbnVsbCwgbmFtZXMsIGkpOwotICAgICAgICBpZiAobnRoQmVnaW4gPT0gbnVsbCkgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgVHlwZSB0ID0gbnRoQmVnaW4uZ2V0VHlwZShnZXRSb290KCkpOwotICAgICAgICBhc3NlcnQgdCAhPSBudWxsOwotCi0gICAgICAgIHJldHVybiB0Ll91c2VyOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgZmluZEFsbEVsZW1lbnRUeXBlcyAoIFFOYW1lIG5hbWUsIFFOYW1lU2V0IHNldCwgTGlzdCBmaWxsTWVVcCApCi0gICAgewotICAgICAgICBhc3NlcnQgZ2V0U3BsYXkoKS5pc0NvbnRhaW5lcigpOwotCi0gICAgICAgIFNwbGF5IHMgPSBnZXRTcGxheSgpOwotCi0gICAgICAgIGlmIChzLmlzTGVhZigpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGxvb3A6Ci0gICAgICAgIGZvciAoIHMgPSBzLm5leHRTcGxheSgpIDsgOyBzID0gcy5uZXh0U3BsYXkoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAoIHMuZ2V0S2luZCgpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU3BsYXkuRU5EICA6Ci0gICAgICAgICAgICBjYXNlIFNwbGF5LlJPT1QgOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJyZWFrIGxvb3A7Ci0gICAgICAgICAgICB9ICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgU3BsYXkuQkVHSU4gOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzZXQgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzLmdldE5hbWUoKS5lcXVhbHMoIG5hbWUgKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSB0eXBlID0gcy5nZXRUeXBlKCBnZXRSb290KCkgKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHR5cGUgIT0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBmaWxsTWVVcC5hZGQoIHR5cGUgKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoc2V0LmNvbnRhaW5zKHMuZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSB0eXBlID0gcy5nZXRUeXBlKGdldFJvb3QoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgdHlwZSAhPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgZmlsbE1lVXAuYWRkKHR5cGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcyA9IHMuZ2V0RmluaXNoU3BsYXkoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGZpbmRfYWxsX2VsZW1lbnRfdXNlcnMgKCBRTmFtZSBuYW1lLCBMaXN0IGZpbGxNZVVwICkKLSAgICB7Ci0gICAgICAgIGludCBpID0gZmlsbE1lVXAuc2l6ZSgpOwotICAgICAgICAKLSAgICAgICAgZmluZEFsbEVsZW1lbnRUeXBlcyggbmFtZSwgbnVsbCwgZmlsbE1lVXAgKTsKLQotICAgICAgICBmb3IgKCBpbnQgaiA9IGkgOyBqIDwgZmlsbE1lVXAuc2l6ZSgpIDsgaisrICkKLSAgICAgICAgICAgIGZpbGxNZVVwLnNldCggaiwgKChUeXBlKSBmaWxsTWVVcC5nZXQoIGogKSkuX3VzZXIgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBmaW5kX2FsbF9lbGVtZW50X3VzZXJzIChRTmFtZVNldCBuYW1lcywgTGlzdCBmaWxsTWVVcCkKLSAgICB7Ci0gICAgICAgIGludCBpID0gZmlsbE1lVXAuc2l6ZSgpOwotICAgICAgICBmaW5kQWxsRWxlbWVudFR5cGVzKG51bGwsIG5hbWVzLCBmaWxsTWVVcCk7Ci0KLSAgICAgICAgZm9yICggaW50IGogPSBpIDsgaiA8IGZpbGxNZVVwLnNpemUoKSA7IGorKyApCi0gICAgICAgICAgICBmaWxsTWVVcC5zZXQoIGosICgoVHlwZSkgZmlsbE1lVXAuZ2V0KCBqICkpLl91c2VyICk7Ci0gICAgfQotCi0gICAgcHVibGljIFR5cGVTdG9yZVVzZXIgZmluZF9hdHRyaWJ1dGVfdXNlciAoIFFOYW1lIG5hbWUgKQotICAgIHsKLSAgICAgICAgYXNzZXJ0IGdldFNwbGF5KCkuaXNDb250YWluZXIoKTsKLQotICAgICAgICBTcGxheSBhID0gZ2V0U3BsYXkoKS5nZXRBdHRyKCBuYW1lICk7Ci0KLSAgICAgICAgaWYgKGEgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIFR5cGUgdCA9IGEuZ2V0VHlwZSggZ2V0Um9vdCgpICk7Ci0KLSAgICAgICAgYXNzZXJ0IHQgIT0gbnVsbDsKLQotICAgICAgICByZXR1cm4gdC5fdXNlcjsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIFN0cmluZyBjb21wdXRlX2RlZmF1bHRfdGV4dCAoICkKLSAgICB7Ci0gICAgICAgIFNwbGF5IHMgPSBnZXRTcGxheSgpOwotICAgICAgICAKLSAgICAgICAgYXNzZXJ0IHMuaXNUeXBlYWJsZSgpOwotCi0gICAgICAgIGlmIChzLmlzRG9jKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICBDb250YWluZXIgcGFyZW50Q29udGFpbmVyID0gcy5nZXRDb250YWluZXIoKTsKLQotICAgICAgICBUeXBlIHBhcmVudFR5cGUgPSBwYXJlbnRDb250YWluZXIuZ2V0VHlwZSggZ2V0Um9vdCgpICk7Ci0KLSAgICAgICAgYXNzZXJ0IHBhcmVudFR5cGUgIT0gbnVsbDsKLQotICAgICAgICBUeXBlU3RvcmVVc2VyIHBhcmVudFVzZXIgPSBwYXJlbnRUeXBlLl91c2VyOwotCi0gICAgICAgIGlmIChzLmlzQXR0cigpKQotICAgICAgICAgICAgcmV0dXJuIHBhcmVudFVzZXIuZ2V0X2RlZmF1bHRfYXR0cmlidXRlX3RleHQoIHMuZ2V0TmFtZSgpICk7Ci0KLSAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHBhcmVudFVzZXIuZ2V0X2RlZmF1bHRfZWxlbWVudF90ZXh0KCBzLmdldE5hbWUoKSApOwotCi0gICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAgICAgVHlwZVN0b3JlVmlzaXRvciB2aXNpdG9yID0gcGFyZW50VXNlci5uZXdfdmlzaXRvcigpOwotCi0gICAgICAgIGlmICh2aXNpdG9yID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICBhc3NlcnQgIXBhcmVudENvbnRhaW5lci5pc0xlYWYoKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoIFNwbGF5IHQgPSBwYXJlbnRDb250YWluZXIubmV4dFNwbGF5KCkgOyA7IHQgPSB0Lm5leHRTcGxheSgpICkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoICggdC5nZXRLaW5kKCkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgY2FzZSBTcGxheS5FTkQgOgotICAgICAgICAgICAgICAgIGFzc2VydCBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTcGxheS5CRUdJTiA6Ci0gICAgICAgICAgICAgICAgdmlzaXRvci52aXNpdCggdC5nZXROYW1lKCkgKTsKLQotICAgICAgICAgICAgICAgIGlmICh0ID09IHMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB2aXNpdG9yLmdldF9kZWZhdWx0X3RleHQoKTsKLQotICAgICAgICAgICAgICAgIHQgPSB0LmdldEZpbmlzaFNwbGF5KCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgaW52YWxpZGF0ZV9uaWwgKCApCi0gICAgewotICAgICAgICBTcGxheSBzID0gZ2V0U3BsYXkoKTsKLQotICAgICAgICBhc3NlcnQgcy5pc1R5cGVhYmxlKCk7Ci0KLSAgICAgICAgaWYgKCFzLmlzQXR0cigpKQotICAgICAgICAgICAgcy5zZXRYc2lOaWwoIGdldFJvb3QoKSwgYnVpbGRfbmlsKCkgKTsKLSAgICB9Ci0gICAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiBmaW5kX25pbCAoICkKLSAgICB7Ci0gICAgICAgIFNwbGF5IHMgPSBnZXRTcGxheSgpOwotCi0gICAgICAgIGFzc2VydCBzLmlzVHlwZWFibGUoKTsKLSAgCi0gICAgICAgIHJldHVybiBzLmlzQXR0cigpID8gZmFsc2UgOiBzLmdldFhzaU5pbCggZ2V0Um9vdCgpICk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBTdHJpbmcgZmluZF9wcmVmaXhfZm9yX25zdXJpICgKLSAgICAgICAgU3RyaW5nIG5zdXJpLCBTdHJpbmcgc3VnZ2VzdGVkX3ByZWZpeCApCi0gICAgewotICAgICAgICBTcGxheSBzID0gZ2V0U3BsYXkoKTsKLQotICAgICAgICBpZiAocy5pc0F0dHIoKSkKLSAgICAgICAgICAgIHMgPSBzLmdldENvbnRhaW5lcigpOwotCi0gICAgICAgIFN0cmluZyByZXN1bHQgPSBzLnByZWZpeEZvck5hbWVzcGFjZSggZ2V0Um9vdCgpLCBuc3VyaSwgc3VnZ2VzdGVkX3ByZWZpeCwgdHJ1ZSk7Ci0KLSAgICAgICAgYXNzZXJ0IHJlc3VsdCAhPSBudWxsOwotCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlRm9yUHJlZml4ICggU3RyaW5nIHByZWZpeCApCi0gICAgewotICAgICAgICBTcGxheSBzID0gZ2V0U3BsYXkoKTsKLQotICAgICAgICBpZiAocy5pc0F0dHIoKSkKLSAgICAgICAgICAgIHMgPSBzLmdldENvbnRhaW5lcigpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHMubmFtZXNwYWNlRm9yUHJlZml4KCBwcmVmaXggKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVHlwZVN0b3JlVXNlciBpbnNlcnRfZWxlbWVudF91c2VyICggUU5hbWUgbmFtZSwgaW50IGkgKQotICAgIHsKLSAgICAgICAgU3BsYXkgcyA9IGdldFNwbGF5KCk7Ci0KLSAgICAgICAgYXNzZXJ0IHMuaXNDb250YWluZXIoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghcy5pc0NvbnRhaW5lcigpKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotCi0gICAgICAgIGlmIChpIDwgMCkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCk7Ci0KLSAgICAgICAgUm9vdCByID0gZ2V0Um9vdCgpOwotICAgICAgICBDb250YWluZXIgYyA9IChDb250YWluZXIpIHM7Ci0KLSAgICAgICAgQmVnaW4gbnRoQmVnaW4gPSByLmZpbmROdGhCZWdpbiggYywgbmFtZSwgbnVsbCwgaSApOwotCi0gICAgICAgIGlmIChudGhCZWdpbiA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaSA+IHIuY291bnQoIGMsIG5hbWUsIG51bGwgKSArIDEpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oKTsKLQotICAgICAgICAgICAgcmV0dXJuIGFkZF9lbGVtZW50X3VzZXIoIG5hbWUgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBpbnNlcnRFbGVtZW50KCBuYW1lLCBudGhCZWdpbiwgMCApOwotICAgIH0KLQotICAgIHB1YmxpYyBUeXBlU3RvcmVVc2VyIGluc2VydF9lbGVtZW50X3VzZXIoUU5hbWVTZXQgc2V0LCBRTmFtZSBuYW1lLCBpbnQgaSkKLSAgICB7Ci0gICAgICAgIFNwbGF5IHMgPSBnZXRTcGxheSgpOwotCi0gICAgICAgIGFzc2VydCBzLmlzQ29udGFpbmVyKCk7Ci0KLSAgICAgICAgaWYgKCFzLmlzQ29udGFpbmVyKCkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7Ci0KLSAgICAgICAgaWYgKGkgPCAwKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotCi0gICAgICAgIFJvb3QgciA9IGdldFJvb3QoKTsKLSAgICAgICAgQ29udGFpbmVyIGMgPSAoU3BsYXkuQ29udGFpbmVyKSBzOwotCi0gICAgICAgIEJlZ2luIG50aEJlZ2luID0gci5maW5kTnRoQmVnaW4oYywgbnVsbCwgc2V0LCBpKTsKLQotICAgICAgICBpZiAobnRoQmVnaW4gPT0gbnVsbCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGkgPiByLmNvdW50KGMsIG51bGwsIHNldCkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oKTsKLQotICAgICAgICAgICAgcmV0dXJuIGFkZF9lbGVtZW50X3VzZXIobmFtZSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gaW5zZXJ0RWxlbWVudChuYW1lLCBudGhCZWdpbiwgMCk7Ci0gICAgfQotICAgIAotLy8gVE9ETyAtIGNvbnNvbGlkYXRlIG5hbWVzLCB0aGlzIGZjbiBpcyB2ZXJ5IGV4cGVuc2l2ZSBpbiBjcmVhdGluZyBuYW1lcwotICAgIHB1YmxpYyBUeXBlU3RvcmVVc2VyIGFkZF9lbGVtZW50X3VzZXIgKCBRTmFtZSBxbmFtZSApCi0gICAgewotICAgICAgICBTcGxheSBzID0gZ2V0U3BsYXkoKTsKLQotICAgICAgICBhc3NlcnQgcy5pc0NvbnRhaW5lcigpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFzLmlzQ29udGFpbmVyKCkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7Ci0KLSAgICAgICAgU3BsYXkgY2FuZGlkYXRlU3BsYXk7Ci0gICAgICAgIGludCBjYW5kaWRhdGVQb3M7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKHMuaXNMZWFmKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhbmRpZGF0ZVNwbGF5ID0gczsKLSAgICAgICAgICAgIGNhbmRpZGF0ZVBvcyA9IHMuZ2V0UG9zTGVhZkVuZCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgY2FuZGlkYXRlU3BsYXkgPSBzLmdldEZpbmlzaFNwbGF5KCk7Ci0gICAgICAgICAgICBjYW5kaWRhdGVQb3MgPSAwOwotCi0gICAgICAgICAgICBRTmFtZVNldCBlbmRTZXQgPSBudWxsOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBsb29wOgotICAgICAgICAgICAgZm9yICggU3BsYXkgdCA9IGNhbmRpZGF0ZVNwbGF5IDsgOyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yICggOyA7ICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHQgPSB0LnByZXZTcGxheSgpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHQgPT0gcykKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGxvb3A7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAodC5pc0NvbnRhaW5lcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHQuaXNFbmQoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHQuZ2V0Q29udGFpbmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGFzc2VydCB0LmlzQ29udGFpbmVyKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodC5nZXROYW1lKCkuZXF1YWxzKCBxbmFtZSApKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGlmIChlbmRTZXQgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgZW5kU2V0ID0gZ2V0X2VsZW1lbnRfZW5kaW5nX2RlbGltaXRlcnMoIHFuYW1lICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZW5kU2V0LmNvbnRhaW5zKCB0LmdldE5hbWUoKSApKQotICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVTcGxheSA9IHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBpbnNlcnRFbGVtZW50KCBxbmFtZSwgY2FuZGlkYXRlU3BsYXksIGNhbmRpZGF0ZVBvcyApOwotICAgIH0KLQotICAgIHByaXZhdGUgVHlwZVN0b3JlVXNlciBpbnNlcnRFbGVtZW50ICggUU5hbWUgbmFtZSwgU3BsYXkgcywgaW50IHAgKQotICAgIHsKLSAgICAgICAgUm9vdCByID0gZ2V0Um9vdCgpOwotICAgICAgICAKLSAgICAgICAgQmVnaW4gYiA9IG5ldyBCZWdpbiggbmFtZSwgbnVsbCApOwotICAgICAgICBiLnRvZ2dsZUlzTGVhZigpOwotICAgICAgICAKLSAgICAgICAgcy5pbnNlcnQoIHIsIHAsIGIsIG51bGwsIDAsIDAsIHRydWUgKTsKLSAgICAgICAgCi0gICAgICAgIFR5cGUgdCA9IGIuZ2V0VHlwZSggciApOwotCi0gICAgICAgIGFzc2VydCB0ICE9IG51bGw7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdC5fdXNlcjsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlX2VsZW1lbnQgKCBRTmFtZSBxbmFtZSwgaW50IGkgKQotICAgIHsKLSAgICAgICAgaWYgKGkgPCAwKQotICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oKTsKLSAgICAgICAgCi0gICAgICAgIFNwbGF5IHMgPSBnZXRTcGxheSgpOwotCi0gICAgICAgIGFzc2VydCBzLmlzQ29udGFpbmVyKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXMuaXNDb250YWluZXIoKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLQotICAgICAgICBpZiAocy5pc0xlYWYoKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCk7Ci0KLSAgICAgICAgQmVnaW4gYiA9IGdldFJvb3QoKS5maW5kTnRoQmVnaW4oIHMsIHFuYW1lLCBudWxsLCBpICk7Ci0KLSAgICAgICAgaWYgKGIgPT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCk7Ci0KLSAgICAgICAgYi5yZW1vdmUoIGdldFJvb3QoKSwgdHJ1ZSApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJlbW92ZV9lbGVtZW50KFFOYW1lU2V0IG5hbWVzLCBpbnQgaSkKLSAgICB7Ci0gICAgICAgIGlmIChpIDwgMCkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCk7Ci0KLSAgICAgICAgU3BsYXkgcyA9IGdldFNwbGF5KCk7Ci0KLSAgICAgICAgYXNzZXJ0IHMuaXNDb250YWluZXIoKTsKLQotICAgICAgICBpZiAoIXMuaXNDb250YWluZXIoKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLQotICAgICAgICBpZiAocy5pc0xlYWYoKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCk7Ci0KLSAgICAgICAgQmVnaW4gYiA9IGdldFJvb3QoKS5maW5kTnRoQmVnaW4ocywgbnVsbCwgbmFtZXMsIGkpOwotCi0gICAgICAgIGlmIChiID09IG51bGwpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigpOwotCi0gICAgICAgIGIucmVtb3ZlKGdldFJvb3QoKSwgdHJ1ZSk7Ci0KLSAgICB9Ci0gICAgCi0gICAgcHVibGljIFR5cGVTdG9yZVVzZXIgYWRkX2F0dHJpYnV0ZV91c2VyICggUU5hbWUgcW5hbWUgKQotICAgIHsKLSAgICAgICAgU3BsYXkgcyA9IGdldFNwbGF5KCk7Ci0KLSAgICAgICAgYXNzZXJ0IHMuaXNDb250YWluZXIoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghcy5pc0NvbnRhaW5lcigpKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotCi0gICAgICAgIFNwbGF5IGEgPSBzLmdldEF0dHIoIHFuYW1lICk7Ci0KLSAgICAgICAgaWYgKGEgIT0gbnVsbCkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCk7Ci0gICAgICAgIAotICAgICAgICBzLm5leHRTcGxheSgpLmluc2VydCgKLSAgICAgICAgICAgIGdldFJvb3QoKSwgMCwgYSA9IG5ldyBBdHRyKCBxbmFtZSApLCBudWxsLCAwLCAwLCB0cnVlICk7Ci0gICAgICAgIAotICAgICAgICBUeXBlIHQgPSBhLmdldFR5cGUoIGdldFJvb3QoKSApOwotCi0gICAgICAgIGFzc2VydCB0ICE9IG51bGw7Ci0KLSAgICAgICAgcmV0dXJuIHQuX3VzZXI7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHJlbW92ZV9hdHRyaWJ1dGUgKCBRTmFtZSBxbmFtZSApCi0gICAgewotICAgICAgICBTcGxheSBzID0gZ2V0U3BsYXkoKTsKLQotICAgICAgICBhc3NlcnQgcy5pc0NvbnRhaW5lcigpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFzLmlzQ29udGFpbmVyKCkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCk7Ci0KLSAgICAgICAgU3BsYXkgYSA9IHMuZ2V0QXR0ciggcW5hbWUgKTsKLQotICAgICAgICBpZiAoYSA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oKTsKLSAgICAgICAgCi0gICAgICAgIGEucmVtb3ZlKCBnZXRSb290KCksIHRydWUgKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIFR5cGVTdG9yZVVzZXIgY29weV9jb250ZW50c19mcm9tICggVHlwZVN0b3JlIHNvdXJjZSApCi0gICAgewotICAgICAgICBhc3NlcnQgc291cmNlIGluc3RhbmNlb2YgVHlwZTsKLQotICAgICAgICBUeXBlIHNvdXJjZVR5cGUgPSAoVHlwZSkgc291cmNlOwotCi0gICAgICAgIFNwbGF5IHMgPSBnZXRTcGxheSgpOwotCi0gICAgICAgIHMucmVwbGFjZUNvbnRlbnRzKCBnZXRSb290KCksIHNvdXJjZVR5cGUuZ2V0U3BsYXkoKSwgc291cmNlVHlwZS5nZXRSb290KCksIHRydWUsIHRydWUgKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBzLmdldFR5cGUoIGdldFJvb3QoKSApLl91c2VyOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFycmF5X3NldHRlciAoIFhtbE9iamVjdFtdIHNvdXJjZXMsIFFOYW1lIGVsZW1lbnROYW1lICkKLSAgICB7Ci0gICAgICAgIC8vIFRPRE8gLSB0aGlzIGlzIHRoZSBxdWljayBhbmQgZGlydHkgaW1wbGVtZW50YXRpb24sIG1ha2UgdGhpcyBmYXN0ZXIKLSAgICAgICAgCi0gICAgICAgIGludCBtID0gc291cmNlcy5sZW5ndGg7Ci0KLSAgICAgICAgQXJyYXlMaXN0IGNvcGllcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgQXJyYXlMaXN0IHR5cGVzID0gbmV3IEFycmF5TGlzdCgpOwotCi0gICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCBtIDsgaSsrICkKLSAgICAgICAgewotLy8gVE9ETyAtIGRlYWwgd2l0aCBudWxsIHNvdXJjZXNbIGkgXSBoZXJlIC0tIHdoYXQgdG8gZG8/Ci0KLSAgICAgICAgICAgIGlmIChzb3VyY2VzWyBpIF0gPT0gbnVsbCkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCAiQXJyYXkgZWxlbWVudCBudWxsIiApOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBlbHNlIGlmIChzb3VyY2VzWyBpIF0uaXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb3BpZXMuYWRkKCBudWxsICk7Ci0gICAgICAgICAgICAgICAgdHlwZXMuYWRkKCBudWxsICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVHlwZSB0eXBlID0gKFR5cGUpICgoVHlwZVN0b3JlVXNlcikgc291cmNlc1sgaSBdKS5nZXRfc3RvcmUoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjb3BpZXMuYWRkKCB0eXBlLmdldFNwbGF5KCkuY29weVNwbGF5Q29udGVudHMoIHR5cGUuZ2V0Um9vdCgpKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgdHlwZXMuYWRkKCBzb3VyY2VzWyBpIF0uc2NoZW1hVHlwZSgpICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgbiA9IGNvdW50X2VsZW1lbnRzKCBlbGVtZW50TmFtZSApOwotCi0gICAgICAgIGZvciAoIDsgbiA+IG0gOyBuLS0gKQotICAgICAgICAgICAgcmVtb3ZlX2VsZW1lbnQoIGVsZW1lbnROYW1lLCBtICk7Ci0KLSAgICAgICAgZm9yICggOyBtID4gbiA7IG4rKyApCi0gICAgICAgICAgICBhZGRfZWxlbWVudF91c2VyKCBlbGVtZW50TmFtZSApOwotCi0gICAgICAgIGFzc2VydCBtID09IG47Ci0gICAgICAgIAotICAgICAgICBBcnJheUxpc3QgZWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIAotICAgICAgICBmaW5kQWxsRWxlbWVudFR5cGVzKCBlbGVtZW50TmFtZSwgbnVsbCwgZWxlbWVudHMgKTsKLQotICAgICAgICBSb290IHIgPSBnZXRSb290KCk7Ci0gICAgICAgIAotICAgICAgICBhc3NlcnQgZWxlbWVudHMuc2l6ZSgpID09IG47Ci0KLSAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IG4gOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBUeXBlIHR5cGUgPSAoVHlwZSkgZWxlbWVudHMuZ2V0KCBpICk7Ci0KLSAgICAgICAgICAgIGlmIChzb3VyY2VzWyBpIF0uaXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgICAgICB0eXBlLmdldFhtbE9iamVjdCgpLnNldCggc291cmNlc1sgaSBdICk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3BsYXkgcyA9IHR5cGUuZ2V0U3BsYXkoKTsKLQotICAgICAgICAgICAgICAgIGFzc2VydCByID09IHR5cGUuZ2V0Um9vdCgpOwotCi0gICAgICAgICAgICAgICAgYXNzZXJ0IHMuaXNDb250YWluZXIoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzLnJlbW92ZUNvbnRlbnQoIHIsIHRydWUgKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDb3B5Q29udGV4dCBjb3B5Q29udGV4dCA9IChDb3B5Q29udGV4dCkgY29waWVzLmdldCggaSApOwotCi0gICAgICAgICAgICAgICAgU3BsYXkgY29weVRyZWUgPSBjb3B5Q29udGV4dC5nZXRUcmVlKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29weVRyZWUgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXJbXSB0ZXh0Q29weSA9IGNvcHlDb250ZXh0LmdldFRleHQoKTsKLQotICAgICAgICAgICAgICAgICAgICBzLmluc2VydCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHIsIDEsIGNvcHlUcmVlLCB0ZXh0Q29weSwgMCwgdGV4dENvcHkgPT0gbnVsbCA/IDAgOiB0ZXh0Q29weS5sZW5ndGgsIHRydWUgKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0eXBlLmNoYW5nZV90eXBlKCAoU2NoZW1hVHlwZSkgdHlwZXMuZ2V0KCBpICkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCB2aXNpdF9lbGVtZW50cyAoIFR5cGVTdG9yZVZpc2l0b3IgdmlzaXRvciApCi0gICAgewotICAgICAgIFNwbGF5IHMgPSBnZXRTcGxheSgpOwotCi0gICAgICAgIGFzc2VydCBzLmlzQ29udGFpbmVyKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXMuaXNDb250YWluZXIoKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKLQotICAgICAgICBpZiAocy5pc0xlYWYoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGZvciAoIHMgPSBzLm5leHRTcGxheSgpIDsgOyBzID0gcy5uZXh0U3BsYXkoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAoIHMuZ2V0S2luZCgpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgU3BsYXkuRU5EIDoKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSBTcGxheS5CRUdJTiA6Ci0gICAgICAgICAgICAgICAgdmlzaXRvci52aXNpdCggcy5nZXROYW1lKCkgKTsKLSAgICAgICAgICAgICAgICBzID0gcy5nZXRGaW5pc2hTcGxheSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFhtbE9iamVjdFtdIGV4ZWNfcXVlcnkgKCBTdHJpbmcgcXVlcnlFeHByLCBYbWxPcHRpb25zIG9wdGlvbnMgKQotICAgICAgICB0aHJvd3MgWG1sRXhjZXB0aW9uCi0gICAgewotICAgICAgICByZXR1cm4gUGF0aC5xdWVyeSggdGhpcywgcXVlcnlFeHByLCBvcHRpb25zICk7Ci0gICAgfQotICAgIAotICAgIC8vCi0gICAgLy8KLSAgICAvLwotICAgIAotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIG1vbml0b3Igb2JqZWN0LCB1c2VkIGZvciBzeW5jaHJvbml6aW5nIGFjY2VzcyB0byB0aGUgZG9jLgotICAgICAqLwotICAgIHB1YmxpYyBPYmplY3QgZ2V0X3Jvb3Rfb2JqZWN0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXRSb290KCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBmaW5hbCBUeXBlU3RvcmVVc2VyIF91c2VyOwotICAgIHByaXZhdGUgaW50IF9pbmhpYml0VXNlckludmFsaWRhdGU7Ci19CmRpZmYgLS1naXQgYS92Mi9zcmMveG1sc3RvcmUvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3N0b3JlL1htbE9iamVjdExpc3QuamF2YSBiL3YyL3NyYy94bWxzdG9yZS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc3RvcmUvWG1sT2JqZWN0TGlzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzcxYjVhLi4wMDAwMDAwCi0tLSBhL3YyL3NyYy94bWxzdG9yZS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc3RvcmUvWG1sT2JqZWN0TGlzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjE1ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnN0b3JlOwotCi0vLyBCVUdCVUc6ICoqKlRMTCoqKiBXaHkgaXNuJ3QgdGhpcyBleHBvc2VkIGluIG9yZy5hcGFjaGUueG1sYmVhbnM/Pz8/Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLQotLyoqCi0gKiBJbnRlcmZhY2UgdG8gcmVwcmVzZW50IGxpc3RzIG9mIFhtbE9iamVjdCBpbnN0YW5jZXMgcmV0dXJuZWQKLSAqIGZyb20gYSBxdWVyeS4gVXNlZCBhbHNvIGFzIGEgY29udmVuaWVudCB0eXBlZCB3YXkgb2YgY29sbGVjdGluZwotICogWG1sT2JqZWN0IGluc3RhbmNlcy4KLSAqLwotcHVibGljIGludGVyZmFjZSBYbWxPYmplY3RMaXN0IHsKLQotICAgIC8qKgotICAgICAqIEFkZHMgYSBYbWxPYmplY3QgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4KLSAgICAgKgotICAgICAqIEBwYXJhbSB4bWwgdGhlIFhtbE9iamVjdCBpbnN0YW5jZSB0byBhZGQgdG8gdGhlIGxpc3QKLSAgICAgKi8KLSAgICB2b2lkIGFkZChYbWxPYmplY3QgeG1sKTsKLQotICAgIC8qKgotICAgICAqIEFwcGVuZHMgdGhlIGNvbnRlbnRzIG9mIGFub3RoZXIgbGlzdCB0byB0aGlzIGxpc3QuCi0gICAgICoKLSAgICAgKiBAcGFyYW0geG1sTGlzdCB0aGUgbGlzdCB3aGljaCBpcyB0byBiZSBhcHBlbmRlZCB0byB0aGlzIGxpc3QuCi0gICAgICovCi0gICAgdm9pZCBhZGRBbGwoWG1sT2JqZWN0TGlzdCB4bWxMaXN0KTsKLQotICAgIC8qKgotICAgICAqIEFwcGVuZHMgYW4gYXJyYXkgb2YgWG1sT2JqZWN0IGluc3RhbmNlcyB0byB0aGlzIGxpc3QuCi0gICAgICoKLSAgICAgKiBAcGFyYW0geG1sQXJyYXkgdGhlIGFycmF5IHdoaWNoIGlzIHRvIGJlIGFwcGVuZGVkIHRvIHRoaXMgbGlzdC4KLSAgICAgKi8KLSAgICB2b2lkIGFkZEFsbChYbWxPYmplY3RbXSB4bWxBcnJheSk7Ci0KLSAgICAvKioKLSAgICAgKiBDbGVhcnMgb3V0IHRoZSBjb250ZW50cyBvZiB0aGlzIGxpc3QuIEFmdGVyIHRoaXMgb3BlcmF0aW9uLAotICAgICAqIHtAbGluayAjaXNFbXB0eSgpIGlzRW1wdHkoKX0gd2lsbCByZXR1cm4gPGNvZGU+dHJ1ZTwvY29kZT4uCi0gICAgICovCi0gICAgdm9pZCBjbGVhcigpOwotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgWG1sT2JqZWN0IGF0IGEgc3BlY2lmaWVkIHBvc2l0aW9uIGluIHRoZSBsaXN0LgotICAgICAqCi0gICAgICogQHBhcmFtIGluZGV4IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24KLSAgICAgKiBAcmV0dXJuIHRoZSBYbWxPYmplY3QgYXQgdGhlIHBvc2l0aW9uIGluIHRoaXMgbGlzdC4KLSAgICAgKgotICAgICAqIEB0aHJvd3MgSW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpZgotICAgICAqICAgICAgICAgPGNvZGU+KGluZGV4IDwgMCkgfHwgKGluZGV4ID49IHNpemUoKSk8L2NvZGU+Ci0gICAgICovCi0gICAgWG1sT2JqZWN0IGdldChpbnQgaW5kZXgpOwotCi0gICAgLyoqCi0gICAgICogVGVzdHMgaWYgdGhpcyBYbWxMaXN0IGlzIGVtcHR5LiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8KLSAgICAgKiA8Y29kZT57QGxpbmsgI3NpemUoKSBzaXplKCl9ID09IDA8L2NvZGU+LgotICAgICAqCi0gICAgICogQHJldHVybiBib29sZWFuIGluZGljYXRpbmcgaWYgdGhpcyBsaXN0IGlzIGVtcHR5LgotICAgICAqLwotICAgIGJvb2xlYW4gaXNFbXB0eSgpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhbiBJdGVyYXRvciBvdmVyIGFsbCB0aGUgWG1sT2JqZWN0IGluc3RhbmNlcyBjb250YWluZWQgaW4gdGhpcwotICAgICAqIGxpc3QuIFRoaXMgaXRlcmF0b3Igd2lsbCB0aHJvdyBhbiBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBpbgotICAgICAqIHJlc3BvbnNlIHRvIGl0cyByZW1vdmUgbWV0aG9kLgotICAgICAqCi0gICAgICogQHJldHVybiBJdGVyYXRvciBvdmVyIHRoZSBjb250ZW50cyBvZiB0aGlzIGxpc3QKLSAgICAgKi8KLSAgICBJdGVyYXRvciBpdGVyYXRvcigpOwotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIFhtbE9iamVjdCBpbnN0YW5jZXMgY29udGFpbmVkIGluIHRoaXMgbGlzdC4KLSAgICAgKgotICAgICAqIEByZXR1cm4gaW50IHNpemUgb2YgdGhlIGxpc3QuCi0gICAgICovCi0gICAgaW50IHNpemUoKTsKLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBjb3B5IG9mIHRoZSBjb250ZW50cyBvZiB0aGUgWG1sTGlzdCBpbiBhIG5ld2x5IGNyZWF0ZWQgYXJyYXkgb2YKLSAgICAgKiBYbWxPYmplY3RzLgotICAgICAqCi0gICAgICogQHJldHVybiBhcnJheSBvZiBYbWxPYmplY3QgaW5zdGFuY2VzIHdoaWNoIGlzIGEgY29weSBvZiB0aGUgY29udGVudHMgb2YKLSAgICAgKiAgICAgICAgIHRoZSBsaXN0LgotICAgICAqLwotICAgIFhtbE9iamVjdFtdIHRvQXJyYXkoKTsKLQotCi0KLSAgICAvKioKLSAgICAgKiBTdGF0aWMgZmFjdG9yeSBjbGFzcyBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlcyBvZiBYbWxPYmplY3RMaXN0Ci0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBGYWN0b3J5Ci0gICAgewotICAgICAgICAvLyB0aGUgY2xhc3MgdG8gaW5zdGFudGlhdGUKLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQ2xhc3MgQ0xBU1M7Ci0gICAgICAgIHN0YXRpYyB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIENMQVNTID0gQ2xhc3MuZm9yTmFtZSgiY29tLmJlYS53bGkudmFyaWFibGVzLlhtbE9iamVjdExpc3RJbXBsIik7Ci0gICAgICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgewotICAgICAgICAgICAgICAgIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpc2UgPSBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDYW5ub3QgbG9hZCBYbWxPYmplY3RMaXN0SW1wbC4iKTsKLSAgICAgICAgICAgICAgICBpc2UuaW5pdENhdXNlKHQpOwotICAgICAgICAgICAgICAgIHRocm93IGlzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIGNyZWF0ZXMgYSBuZXcgZW1wdHkgWG1sT2JqZWN0TGlzdCBpbnN0YW5jZS4KLSAgICAgICAgICoKLSAgICAgICAgICogQHJldHVybiBhIG5ldyBlbXB0eSBYbWxPYmplY3RMaXN0IGluc3RhbmNlCi0gICAgICAgICAqLwotICAgICAgICBwdWJsaWMgc3RhdGljIFhtbE9iamVjdExpc3QgbmV3SW5zdGFuY2UoKSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHJldHVybiAoWG1sT2JqZWN0TGlzdClDTEFTUy5uZXdJbnN0YW5jZSgpOwotICAgICAgICAgICAgfSBjYXRjaCAoSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBpZSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGllKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gaWFlKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oaWFlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0KLSAgICAgICAgLyoqCi0gICAgICAgICAqIGNyZWF0ZXMgYSBuZXcgWG1sT2JqZWN0TGlzdCBpbnN0YW5jZSwgZmlsbGVkIHdpdGggdGhlIGVsZW1lbnRzCi0gICAgICAgICAqIG9mIHRoZSBnaXZlbiBsaXN0Ci0gICAgICAgICAqCi0gICAgICAgICAqIEByZXR1cm4gYSBuZXcgWG1sT2JqZWN0TGlzdCBpbnN0YW5jZS4KLSAgICAgICAgICovCi0gICAgICAgIHB1YmxpYyBzdGF0aWMgWG1sT2JqZWN0TGlzdCBuZXdJbnN0YW5jZShYbWxPYmplY3RMaXN0IGxpc3QpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgWG1sT2JqZWN0TGlzdCBuZXdMaXN0ID0gKFhtbE9iamVjdExpc3QpQ0xBU1MubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgICAgICAgICBuZXdMaXN0LmFkZEFsbChsaXN0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3TGlzdDsKLSAgICAgICAgICAgIH0gY2F0Y2ggKEluc3RhbnRpYXRpb25FeGNlcHRpb24gaWUpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihpZSk7Ci0gICAgICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGlhZSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGlhZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotCi0gICAgICAgIC8qKgotICAgICAgICAgKiBjcmVhdGVzIGEgbmV3IFhtbE9iamVjdExpc3QgaW5zdGFuY2UgZ2l2ZW4gYW4gYXJyYXkgb2YgWG1sT2JqZWN0cy4KLSAgICAgICAgICoKLSAgICAgICAgICogQHJldHVybiBhIG5ldyBYbWxPYmplY3RMaXN0IGluc3RhbmNlLgotICAgICAgICAgKi8KLSAgICAgICAgcHVibGljIHN0YXRpYyBYbWxPYmplY3RMaXN0IG5ld0luc3RhbmNlKFhtbE9iamVjdFtdIHhtbE9iamVjdHMpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgWG1sT2JqZWN0TGlzdCBuZXdMaXN0ID0gKFhtbE9iamVjdExpc3QpIENMQVNTLm5ld0luc3RhbmNlKCk7Ci0gICAgICAgICAgICAgICAgbmV3TGlzdC5hZGRBbGwoeG1sT2JqZWN0cyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ld0xpc3Q7Ci0gICAgICAgICAgICB9IGNhdGNoIChJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGllKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oaWUpOwotICAgICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBpYWUpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihpYWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3htbHN0b3JlL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zdG9yZS9YcXJsRGVsZWdhdGUuamF2YSBiL3YyL3NyYy94bWxzdG9yZS9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwvc3RvcmUvWHFybERlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4ZjczMDUuLjAwMDAwMDAKLS0tIGEvdjIvc3JjL3htbHN0b3JlL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC9zdG9yZS9YcXJsRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zdG9yZTsKLQotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLQotcHVibGljIGZpbmFsIGNsYXNzIFhxcmxEZWxlZ2F0ZSAKLXsKLSAgICBwcml2YXRlIFhxcmxEZWxlZ2F0ZSAoICkKLSAgICB7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgY2hlY2sgKCBPYmplY3QgbyApCi0gICAgewotICAgICAgICBpZiAobyA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdwotICAgICAgICAgICAgICAgIG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgIlRoaXMgb3BlcmF0aW9uIHJlcXVpcmVzIHhxcmwuamFyIiApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RhdGljIFBhdGguUXVlcnkgY29tcGlsZVBhdGggKCBTdHJpbmcgcGF0aCwgU3RyaW5nIGN1cnJlbnROb2RlVmFyICkKLSAgICB7Ci0gICAgICAgIHJldHVybgotICAgICAgICAgICAgKFBhdGguUXVlcnkpCi0gICAgICAgICAgICAgICAgaW52b2tlKCBfY29tcGlsZVBhdGgsIG5ldyBPYmplY3RbXSB7IHBhdGgsIGN1cnJlbnROb2RlVmFyIH0gKTsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIFBhdGguUXVlcnkgY29tcGlsZVF1ZXJ5ICggU3RyaW5nIHF1ZXJ5RXhwciwgU3RyaW5nIGN1cnJlbnROb2RlVmFyICkKLSAgICB7Ci0gICAgICAgIHJldHVybgotICAgICAgICAgICAgKFBhdGguUXVlcnkpCi0gICAgICAgICAgICAgICAgaW52b2tlKAotICAgICAgICAgICAgICAgICAgICBfY29tcGlsZVF1ZXJ5LCBuZXcgT2JqZWN0W10geyBxdWVyeUV4cHIsIGN1cnJlbnROb2RlVmFyLCBuZXcgQm9vbGVhbih0cnVlKSB9ICk7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgdGhyb3dSdW50aW1lRXhjZXB0aW9uICggVGhyb3dhYmxlIGUgKQotICAgIHsKLSAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBSdW50aW1lRXhjZXB0aW9uKQotICAgICAgICAgICAgdGhyb3cgKFJ1bnRpbWVFeGNlcHRpb24pIGU7Ci0gICAgICAgIAotICAgICAgICBUaHJvd2FibGUgY2F1c2UgPSBlLmdldENhdXNlKCk7Ci0gICAgICAgIAotICAgICAgICBSdW50aW1lRXhjZXB0aW9uIHJ0ZSA9IG5ldyBSdW50aW1lRXhjZXB0aW9uKCBjYXVzZS5nZXRNZXNzYWdlKCkgKTsKLSAgICAgICAgCi0gICAgICAgIHJ0ZS5pbml0Q2F1c2UoIGNhdXNlICk7Ci0KLSAgICAgICAgdGhyb3cgcnRlOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIE9iamVjdCBpbnZva2UgKCBNZXRob2QgbWV0aG9kLCBPYmplY3RbXSBwYXJhbXMgKQotICAgIHsKLSAgICAgICAgaWYgKG1ldGhvZCA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdwotICAgICAgICAgICAgICAgIG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgIlRoaXMgb3BlcmF0aW9uIHJlcXVpcmVzIHhxcmwuamFyIiApOwotICAgICAgICB9Ci0KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtZXRob2QuaW52b2tlKCBudWxsLCBwYXJhbXMgKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoIFRocm93YWJsZSBlICkKLSAgICAgICAgewotICAgICAgICAgICAgdGhyb3dSdW50aW1lRXhjZXB0aW9uKCBlICk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBVbnJlYWNoYWJsZQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTG9vc2UgY291cGxpbmcgZnVuY3Rpb25hbGl0eSB3aXRoIHhxcmwuamFyCi0KLSAgICBwcml2YXRlIHN0YXRpYyBNZXRob2QgX2NvbXBpbGVQYXRoOwotICAgIHByaXZhdGUgc3RhdGljIE1ldGhvZCBfY29tcGlsZVF1ZXJ5OwotCi0gICAgc3RhdGljCi0gICAgewotICAgICAgICBib29sZWFuIGhhc1hxcmw7Ci0gICAgICAgIAotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgQ2xhc3MuZm9yTmFtZSggIm9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zdG9yZS5YcXJsSW1wbCIgKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaGFzWHFybCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKCBDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUgKQotICAgICAgICB7Ci0gICAgICAgICAgICBoYXNYcXJsID0gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGFzWHFybCkKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ2xhc3MgeHFybEltcGwgPQotICAgICAgICAgICAgICAgICAgICBDbGFzcy5mb3JOYW1lKCAib3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnN0b3JlLlhxcmxJbXBsIiApOwotCi0gICAgICAgICAgICAgICAgX2NvbXBpbGVQYXRoID0KLSAgICAgICAgICAgICAgICAgICAgeHFybEltcGwuZ2V0RGVjbGFyZWRNZXRob2QoCi0gICAgICAgICAgICAgICAgICAgICAgICAiY29tcGlsZVBhdGgiLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3IENsYXNzW10geyBTdHJpbmcuY2xhc3MsIFN0cmluZy5jbGFzcyB9ICk7Ci0KLSAgICAgICAgICAgICAgICBfY29tcGlsZVF1ZXJ5ID0KLSAgICAgICAgICAgICAgICAgICAgeHFybEltcGwuZ2V0RGVjbGFyZWRNZXRob2QoCi0gICAgICAgICAgICAgICAgICAgICAgICAiY29tcGlsZVF1ZXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDbGFzc1tdIHsgU3RyaW5nLmNsYXNzLCBTdHJpbmcuY2xhc3MsIEJvb2xlYW4uY2xhc3MgfSApOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKCBFeGNlcHRpb24gZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIGUgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94cGF0aC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwveHBhdGgvamF4ZW4vWEJlYW5zTmF2aWdhdG9yLmphdmEgYi92Mi9zcmMveHBhdGgvb3JnL2FwYWNoZS94bWxiZWFucy9pbXBsL3hwYXRoL2pheGVuL1hCZWFuc05hdmlnYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDI1ZGE0Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy94cGF0aC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwveHBhdGgvamF4ZW4vWEJlYW5zTmF2aWdhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQ5ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnhwYXRoLmpheGVuOwotCi1pbXBvcnQgb3JnLmpheGVuLlhQYXRoOwotaW1wb3J0IG9yZy5qYXhlbi5OYXZpZ2F0b3I7Ci1pbXBvcnQgb3JnLmpheGVuLkRlZmF1bHROYXZpZ2F0b3I7Ci1pbXBvcnQgb3JnLmpheGVuLkZ1bmN0aW9uQ2FsbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuamF4ZW4uVW5zdXBwb3J0ZWRBeGlzRXhjZXB0aW9uOwotLy9pbXBvcnQgb3JnLmpheGVuLk5hbWVkQWNjZXNzTmF2aWdhdG9yOwotaW1wb3J0IG9yZy5qYXhlbi51dGlsLkFuY2VzdG9yQXhpc0l0ZXJhdG9yOwotaW1wb3J0IG9yZy5qYXhlbi51dGlsLkZvbGxvd2luZ1NpYmxpbmdBeGlzSXRlcmF0b3I7Ci1pbXBvcnQgb3JnLmpheGVuLnV0aWwuUHJlY2VkaW5nU2libGluZ0F4aXNJdGVyYXRvcjsKLWltcG9ydCBvcmcuamF4ZW4udXRpbC5Gb2xsb3dpbmdBeGlzSXRlcmF0b3I7Ci1pbXBvcnQgb3JnLmpheGVuLnV0aWwuUHJlY2VkaW5nQXhpc0l0ZXJhdG9yOwotaW1wb3J0IG9yZy5qYXhlbi51dGlsLlNlbGZBeGlzSXRlcmF0b3I7Ci1pbXBvcnQgb3JnLmpheGVuLnV0aWwuRGVzY2VuZGFudE9yU2VsZkF4aXNJdGVyYXRvcjsKLWltcG9ydCBvcmcuamF4ZW4udXRpbC5BbmNlc3Rvck9yU2VsZkF4aXNJdGVyYXRvcjsKLWltcG9ydCBvcmcuamF4ZW4udXRpbC5TaW5nbGVPYmplY3RJdGVyYXRvcjsKLWltcG9ydCBvcmcuamF4ZW4uc2F4cGF0aC5TQVhQYXRoRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLS8qKgotICogQXV0aG9yOiBDZXphciBBbmRyZWkgKGNlemFyLmFuZHJlaUBiZWEuY29tKQotICogRGF0ZTogT2N0IDEwLCAyMDAzCi0gKi8KLXB1YmxpYyBjbGFzcyBYQmVhbnNOYXZpZ2F0b3IgZXh0ZW5kcyBEZWZhdWx0TmF2aWdhdG9yIC8vaW1wbGVtZW50cyBOYW1lZEFjY2Vzc05hdmlnYXRvcgotewotICAgIC8qKiBTaW5nbGV0b24gaW1wbGVtZW50YXRpb24uCi0gICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU2luZ2xldG9uCi0gICAgewotICAgICAgICAvKiogU2luZ2xldG9uIGluc3RhbmNlLgotICAgICAgICAgKi8KLSAgICAgICAgcHJpdmF0ZSBzdGF0aWMgWEJlYW5zTmF2aWdhdG9yIGluc3RhbmNlID0gbmV3IFhCZWFuc05hdmlnYXRvcigpOwotICAgIH0KLQotICAgIC8qKiBSZXRyaWV2ZSB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgPGNvZGU+RG9jdW1lbnROYXZpZ2F0b3I8L2NvZGU+LgotICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgTmF2aWdhdG9yIGdldEluc3RhbmNlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBYQmVhbnNOYXZpZ2F0b3IuU2luZ2xldG9uLmluc3RhbmNlOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8gRGVmYXVsdE5hdmlnYXRvciBpbXBsZW1lbnRhdGlvbgotICAgIC8vCi0KLSAgICAvKiogUmV0cmlldmUgdGhlIG5hbWVzcGFjZSBVUkkgb2YgdGhlIGdpdmVuIGVsZW1lbnQgbm9kZS4KLSAgICAgKgotICAgICAqICBAcGFyYW0gZWxlbWVudCBUaGUgY29udGV4dCBlbGVtZW50IG5vZGUuCi0gICAgICoKLSAgICAgKiAgQHJldHVybiBUaGUgbmFtZXNwYWNlIFVSSSBvZiB0aGUgZWxlbWVudCBub2RlLgotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RWxlbWVudE5hbWVzcGFjZVVyaShPYmplY3QgZWxlbWVudCkKLSAgICB7Ci0gICAgICAgIGlmKCBlbGVtZW50IGluc3RhbmNlb2YgWG1sQ3Vyc29yICkKLSAgICAgICAgewotICAgICAgICAgICAgWG1sQ3Vyc29yIHhjID0gKChYbWxDdXJzb3IpZWxlbWVudCk7Ci0gICAgICAgICAgICByZXR1cm4geGMuZ2V0TmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgICB9Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm5vZGUgbXVzdCBiZSBhbiBYbWxPYmplY3Qgb3IgYW4gWG1sQ3Vyc29yLiIpOwotICAgIH0KLQotICAgIC8qKiBSZXRyaWV2ZSB0aGUgbmFtZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudCBub2RlLgotICAgICAqCi0gICAgICogIEBwYXJhbSBlbGVtZW50IFRoZSBjb250ZXh0IGVsZW1lbnQgbm9kZS4KLSAgICAgKgotICAgICAqICBAcmV0dXJuIFRoZSBuYW1lIG9mIHRoZSBlbGVtZW50IG5vZGUuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRFbGVtZW50TmFtZShPYmplY3QgZWxlbWVudCkKLSAgICB7Ci0gICAgICAgIGlmKCBlbGVtZW50IGluc3RhbmNlb2YgWG1sQ3Vyc29yICkKLSAgICAgICAgewotICAgICAgICAgICAgWG1sQ3Vyc29yIHhjID0gKChYbWxDdXJzb3IpZWxlbWVudCk7Ci0gICAgICAgICAgICByZXR1cm4geGMuZ2V0TmFtZSgpLmdldExvY2FsUGFydCgpOwotICAgICAgICB9Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm5vZGUgbXVzdCBiZSBhbiBYbWxPYmplY3Qgb3IgYW4gWG1sQ3Vyc29yLiIpOwotICAgIH0KLQotICAgIC8qKiBSZXRyaWV2ZSB0aGUgUU5hbWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQgbm9kZS4KLSAgICAgKgotICAgICAqICBAcGFyYW0gZWxlbWVudCBUaGUgY29udGV4dCBlbGVtZW50IG5vZGUuCi0gICAgICoKLSAgICAgKiAgQHJldHVybiBUaGUgUU5hbWUgb2YgdGhlIGVsZW1lbnQgbm9kZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldEVsZW1lbnRRTmFtZShPYmplY3QgZWxlbWVudCkKLSAgICB7Ci0gICAgICAgIGlmKCBlbGVtZW50IGluc3RhbmNlb2YgWG1sQ3Vyc29yICkKLSAgICAgICAgewotICAgICAgICAgICAgWG1sQ3Vyc29yIHhjID0gKChYbWxDdXJzb3IpZWxlbWVudCk7Ci0gICAgICAgICAgICBTdHJpbmcgdXJpID0geGMuZ2V0TmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IHhjLnByZWZpeEZvck5hbWVzcGFjZSh1cmkpOwotICAgICAgICAgICAgcmV0dXJuICggISIiLmVxdWFscyhwcmVmaXgpID8gcHJlZml4ICsgIjoiIDogIiIgKSArIHhjLmdldE5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJub2RlIG11c3QgYmUgYW4gWG1sT2JqZWN0IG9yIGFuIFhtbEN1cnNvci4iKTsKLSAgICB9Ci0KLSAgICAvKiogUmV0cmlldmUgdGhlIG5hbWVzcGFjZSBVUkkgb2YgdGhlIGdpdmVuIGF0dHJpYnV0ZSBub2RlLgotICAgICAqCi0gICAgICogIEBwYXJhbSBhdHRyIFRoZSBjb250ZXh0IGF0dHJpYnV0ZSBub2RlLgotICAgICAqCi0gICAgICogIEByZXR1cm4gVGhlIG5hbWVzcGFjZSBVUkkgb2YgdGhlIGF0dHJpYnV0ZSBub2RlLgotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QXR0cmlidXRlTmFtZXNwYWNlVXJpKE9iamVjdCBhdHRyKQotICAgIHsKLSAgICAgICAgaWYoIGF0dHIgaW5zdGFuY2VvZiBYbWxDdXJzb3IgKQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxDdXJzb3IgeGMgPSAoKFhtbEN1cnNvcilhdHRyKTsKLSAgICAgICAgICAgIHJldHVybiB4Yy5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibm9kZSBtdXN0IGJlIGFuIFhtbE9iamVjdCBvciBhbiBYbWxDdXJzb3IuIik7Ci0gICAgfQotCi0gICAgLyoqIFJldHJpZXZlIHRoZSBuYW1lIG9mIHRoZSBnaXZlbiBhdHRyaWJ1dGUgbm9kZS4KLSAgICAgKgotICAgICAqICBAcGFyYW0gYXR0ciBUaGUgY29udGV4dCBhdHRyaWJ1dGUgbm9kZS4KLSAgICAgKgotICAgICAqICBAcmV0dXJuIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgbm9kZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldEF0dHJpYnV0ZU5hbWUoT2JqZWN0IGF0dHIpCi0gICAgewotICAgICAgICBpZiggYXR0ciBpbnN0YW5jZW9mIFhtbEN1cnNvciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFhtbEN1cnNvciB4YyA9ICgoWG1sQ3Vyc29yKWF0dHIpOwotICAgICAgICAgICAgcmV0dXJuIHhjLmdldE5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJub2RlIG11c3QgYmUgYW4gWG1sT2JqZWN0IG9yIGFuIFhtbEN1cnNvci4iKTsKLSAgICB9Ci0KLSAgICAvKiogUmV0cmlldmUgdGhlIFFOYW1lIG9mIHRoZSBnaXZlbiBhdHRyaWJ1dGUgbm9kZS4KLSAgICAgKgotICAgICAqICBAcGFyYW0gYXR0ciBUaGUgY29udGV4dCBhdHRyaWJ1dGUgbm9kZS4KLSAgICAgKgotICAgICAqICBAcmV0dXJuIFRoZSBRTmFtZSBvZiB0aGUgYXR0cmlidXRlIG5vZGUuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRBdHRyaWJ1dGVRTmFtZShPYmplY3QgYXR0cikKLSAgICB7Ci0gICAgICAgIGlmKCBhdHRyIGluc3RhbmNlb2YgWG1sQ3Vyc29yICkKLSAgICAgICAgewotICAgICAgICAgICAgWG1sQ3Vyc29yIHhjID0gKChYbWxDdXJzb3IpYXR0cik7Ci0gICAgICAgICAgICBTdHJpbmcgdXJpID0geGMuZ2V0TmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IHhjLnByZWZpeEZvck5hbWVzcGFjZSh1cmkpOwotICAgICAgICAgICAgcmV0dXJuICggISIiLmVxdWFscyhwcmVmaXgpID8gcHJlZml4ICsgIjoiIDogIiIgKSArIHhjLmdldE5hbWUoKS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJub2RlIG11c3QgYmUgYW4gWG1sT2JqZWN0IG9yIGFuIFhtbEN1cnNvci4iKTsKLSAgICB9Ci0KLSAgICAvKiogUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgaXMgYSBkb2N1bWVudCBub2RlLiBBIGRvY3VtZW50IG5vZGUKLSAgICAgKiAgaXMgdGhlIG5vZGUgdGhhdCBpcyBzZWxlY3RlZCBieSB0aGUgeHBhdGggZXhwcmVzc2lvbiA8Y29kZT4vPC9jb2RlPi4KLSAgICAgKgotICAgICAqICBAcGFyYW0gb2JqZWN0IFRoZSBvYmplY3QgdG8gdGVzdC4KLSAgICAgKgotICAgICAqICBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgYSBkb2N1bWVudCBub2RlLAotICAgICAqICAgICAgICAgIGVsc2UgPGNvZGU+ZmFsc2U8L2NvZGU+Ci0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNEb2N1bWVudChPYmplY3Qgb2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYoIG9iamVjdCBpbnN0YW5jZW9mIFhtbEN1cnNvciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFhtbEN1cnNvciB4YyA9ICgoWG1sQ3Vyc29yKW9iamVjdCk7Ci0gICAgICAgICAgICByZXR1cm4geGMuaXNTdGFydGRvYygpOwotICAgICAgICB9Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm5vZGUgbXVzdCBiZSBhbiBYbWxPYmplY3Qgb3IgYW4gWG1sQ3Vyc29yLiIpOwotICAgIH0KLQotICAgIC8qKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIG9iamVjdCBpcyBhbiBlbGVtZW50IG5vZGUuCi0gICAgICoKLSAgICAgKiAgQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHRvIHRlc3QuCi0gICAgICoKLSAgICAgKiAgQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGFuIGVsZW1lbnQgbm9kZSwKLSAgICAgKiAgICAgICAgICBlbHNlIDxjb2RlPmZhbHNlPC9jb2RlPgotICAgICAqLwotICAgIHB1YmxpYyBib29sZWFuIGlzRWxlbWVudChPYmplY3Qgb2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYoIG9iamVjdCBpbnN0YW5jZW9mIFhtbEN1cnNvciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFhtbEN1cnNvciB4YyA9ICgoWG1sQ3Vyc29yKW9iamVjdCk7Ci0gICAgICAgICAgICByZXR1cm4geGMuaXNTdGFydCgpOwotICAgICAgICB9Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm5vZGUgbXVzdCBiZSBhbiBYbWxPYmplY3Qgb3IgYW4gWG1sQ3Vyc29yLiIpOwotICAgIH0KLQotICAgIC8qKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIG9iamVjdCBpcyBhbiBhdHRyaWJ1dGUgbm9kZS4KLSAgICAgKgotICAgICAqICBAcGFyYW0gb2JqZWN0IFRoZSBvYmplY3QgdG8gdGVzdC4KLSAgICAgKgotICAgICAqICBAcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSBvYmplY3QgaXMgYW4gYXR0cmlidXRlIG5vZGUsCi0gICAgICogICAgICAgICAgZWxzZSA8Y29kZT5mYWxzZTwvY29kZT4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0F0dHJpYnV0ZShPYmplY3Qgb2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYoIG9iamVjdCBpbnN0YW5jZW9mIFhtbEN1cnNvciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFhtbEN1cnNvciB4YyA9ICgoWG1sQ3Vyc29yKW9iamVjdCk7Ci0gICAgICAgICAgICByZXR1cm4geGMuaXNBdHRyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibm9kZSBtdXN0IGJlIGFuIFhtbE9iamVjdCBvciBhbiBYbWxDdXJzb3IuIik7Ci0gICAgfQotCi0gICAgLyoqIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGEgbmFtZXNwYWNlIG5vZGUuCi0gICAgICoKLSAgICAgKiAgQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHRvIHRlc3QuCi0gICAgICoKLSAgICAgKiAgQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGEgbmFtZXNwYWNlIG5vZGUsCi0gICAgICogICAgICAgICAgZWxzZSA8Y29kZT5mYWxzZTwvY29kZT4KLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc05hbWVzcGFjZShPYmplY3Qgb2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYoIG9iamVjdCBpbnN0YW5jZW9mIFhtbEN1cnNvciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFhtbEN1cnNvciB4YyA9ICgoWG1sQ3Vyc29yKW9iamVjdCk7Ci0gICAgICAgICAgICByZXR1cm4geGMuaXNOYW1lc3BhY2UoKTsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJub2RlIG11c3QgYmUgYW4gWG1sT2JqZWN0IG9yIGFuIFhtbEN1cnNvci4iKTsKLSAgICB9Ci0KLSAgICAvKiogUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgaXMgYSBjb21tZW50IG5vZGUuCi0gICAgICoKLSAgICAgKiAgQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHRvIHRlc3QuCi0gICAgICoKLSAgICAgKiAgQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGEgY29tbWVudCBub2RlLAotICAgICAqICAgICAgICAgIGVsc2UgPGNvZGU+ZmFsc2U8L2NvZGU+Ci0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNDb21tZW50KE9iamVjdCBvYmplY3QpCi0gICAgewotICAgICAgICBpZiggb2JqZWN0IGluc3RhbmNlb2YgWG1sQ3Vyc29yICkKLSAgICAgICAgewotICAgICAgICAgICAgWG1sQ3Vyc29yIHhjID0gKChYbWxDdXJzb3Ipb2JqZWN0KTsKLSAgICAgICAgICAgIHJldHVybiB4Yy5pc0NvbW1lbnQoKTsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJub2RlIG11c3QgYmUgYW4gWG1sT2JqZWN0IG9yIGFuIFhtbEN1cnNvci4iKTsKLSAgICB9Ci0KLSAgICAvKiogUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgaXMgYSB0ZXh0IG5vZGUuCi0gICAgICoKLSAgICAgKiAgQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHRvIHRlc3QuCi0gICAgICoKLSAgICAgKiAgQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGEgdGV4dCBub2RlLAotICAgICAqICAgICAgICAgIGVsc2UgPGNvZGU+ZmFsc2U8L2NvZGU+Ci0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNUZXh0KE9iamVjdCBvYmplY3QpCi0gICAgewotICAgICAgICBpZiggb2JqZWN0IGluc3RhbmNlb2YgWG1sQ3Vyc29yICkKLSAgICAgICAgewotICAgICAgICAgICAgWG1sQ3Vyc29yIHhjID0gKChYbWxDdXJzb3Ipb2JqZWN0KTsKLSAgICAgICAgICAgIHJldHVybiB4Yy5pc1RleHQoKTsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJub2RlIG11c3QgYmUgYW4gWG1sT2JqZWN0IG9yIGFuIFhtbEN1cnNvci4iKTsKLSAgICB9Ci0KLSAgICAvKiogUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgaXMgYSBwcm9jZXNzaW5nLWluc3RydWN0aW9uIG5vZGUuCi0gICAgICoKLSAgICAgKiAgQHBhcmFtIG9iamVjdCBUaGUgb2JqZWN0IHRvIHRlc3QuCi0gICAgICoKLSAgICAgKiAgQHJldHVybiA8Y29kZT50cnVlPC9jb2RlPiBpZiB0aGUgb2JqZWN0IGlzIGEgcHJvY2Vzc2luZy1pbnN0cnVjdGlvbiBub2RlLAotICAgICAqICAgICAgICAgIGVsc2UgPGNvZGU+ZmFsc2U8L2NvZGU+Ci0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oT2JqZWN0IG9iamVjdCkKLSAgICB7Ci0gICAgICAgIGlmKCBvYmplY3QgaW5zdGFuY2VvZiBYbWxDdXJzb3IgKQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxDdXJzb3IgeGMgPSAoKFhtbEN1cnNvcilvYmplY3QpOwotICAgICAgICAgICAgcmV0dXJuIHhjLmlzUHJvY2luc3QoKTsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJub2RlIG11c3QgYmUgYW4gWG1sT2JqZWN0IG9yIGFuIFhtbEN1cnNvci4iKTsKLSAgICB9Ci0KLSAgICAvKiogUmV0cmlldmUgdGhlIHN0cmluZy12YWx1ZSBvZiBhIGNvbW1lbnQgbm9kZS4KLSAgICAgKgotICAgICAqICBAcGFyYW0gY29tbWVudCBUaGUgY29tbWVudCBub2RlLgotICAgICAqCi0gICAgICogIEByZXR1cm4gVGhlIHN0cmluZy12YWx1ZSBvZiB0aGUgbm9kZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldENvbW1lbnRTdHJpbmdWYWx1ZShPYmplY3QgY29tbWVudCkKLSAgICB7Ci0gICAgICAgIGlmKCBjb21tZW50IGluc3RhbmNlb2YgWG1sQ3Vyc29yICkKLSAgICAgICAgewotICAgICAgICAgICAgWG1sQ3Vyc29yIHhjID0gKChYbWxDdXJzb3IpY29tbWVudCk7Ci0gICAgICAgICAgICByZXR1cm4geGMuZ2V0VGV4dFZhbHVlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibm9kZSBtdXN0IGJlIGFuIFhtbE9iamVjdCBvciBhbiBYbWxDdXJzb3IuIik7Ci0gICAgfQotCi0gICAgLyoqIFJldHJpZXZlIHRoZSBzdHJpbmctdmFsdWUgb2YgYW4gZWxlbWVudCBub2RlLgotICAgICAqCi0gICAgICogIEBwYXJhbSBlbGVtZW50IFRoZSBjb21tZW50IG5vZGUuCi0gICAgICoKLSAgICAgKiAgQHJldHVybiBUaGUgc3RyaW5nLXZhbHVlIG9mIHRoZSBub2RlLgotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RWxlbWVudFN0cmluZ1ZhbHVlKE9iamVjdCBlbGVtZW50KQotICAgIHsKLSAgICAgICAgaWYoIGVsZW1lbnQgaW5zdGFuY2VvZiBYbWxDdXJzb3IgKQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxDdXJzb3IgeGMgPSAoKFhtbEN1cnNvcillbGVtZW50KTsKLSAgICAgICAgICAgIHJldHVybiB4Yy5nZXRUZXh0VmFsdWUoKTsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJub2RlIG11c3QgYmUgYW4gWG1sT2JqZWN0IG9yIGFuIFhtbEN1cnNvci4iKTsKLSAgICB9Ci0KLSAgICAvKiogUmV0cmlldmUgdGhlIHN0cmluZy12YWx1ZSBvZiBhbiBhdHRyaWJ1dGUgbm9kZS4KLSAgICAgKgotICAgICAqICBAcGFyYW0gYXR0ciBUaGUgYXR0cmlidXRlIG5vZGUuCi0gICAgICoKLSAgICAgKiAgQHJldHVybiBUaGUgc3RyaW5nLXZhbHVlIG9mIHRoZSBub2RlLgotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0QXR0cmlidXRlU3RyaW5nVmFsdWUoT2JqZWN0IGF0dHIpCi0gICAgewotICAgICAgICBpZiggYXR0ciBpbnN0YW5jZW9mIFhtbEN1cnNvciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFhtbEN1cnNvciB4YyA9ICgoWG1sQ3Vyc29yKWF0dHIpOwotICAgICAgICAgICAgcmV0dXJuIHhjLmdldFRleHRWYWx1ZSgpOwotICAgICAgICB9Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm5vZGUgbXVzdCBiZSBhbiBYbWxPYmplY3Qgb3IgYW4gWG1sQ3Vyc29yLiIpOwotICAgIH0KLQotICAgIC8qKiBSZXRyaWV2ZSB0aGUgc3RyaW5nLXZhbHVlIG9mIGEgbmFtZXNwYWNlIG5vZGUuCi0gICAgICoKLSAgICAgKiAgQHBhcmFtIG5zIFRoZSBuYW1lc3BhY2Ugbm9kZS4KLSAgICAgKgotICAgICAqICBAcmV0dXJuIFRoZSBzdHJpbmctdmFsdWUgb2YgdGhlIG5vZGUuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lc3BhY2VTdHJpbmdWYWx1ZShPYmplY3QgbnMpCi0gICAgewotICAgICAgICBpZiggbnMgaW5zdGFuY2VvZiBYbWxDdXJzb3IgKQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxDdXJzb3IgeGMgPSAoKFhtbEN1cnNvcilucyk7Ci0gICAgICAgICAgICByZXR1cm4geGMuZ2V0TmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpOwotICAgICAgICB9Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm5vZGUgbXVzdCBiZSBhbiBYbWxPYmplY3Qgb3IgYW4gWG1sQ3Vyc29yLiIpOwotICAgIH0KLQotICAgIC8qKiBSZXRyaWV2ZSB0aGUgc3RyaW5nLXZhbHVlIG9mIGEgdGV4dCBub2RlLgotICAgICAqCi0gICAgICogIEBwYXJhbSB0eHQgVGhlIHRleHQgbm9kZS4KLSAgICAgKgotICAgICAqICBAcmV0dXJuIFRoZSBzdHJpbmctdmFsdWUgb2YgdGhlIG5vZGUuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBnZXRUZXh0U3RyaW5nVmFsdWUoT2JqZWN0IHR4dCkKLSAgICB7Ci0gICAgICAgIGlmKCB0eHQgaW5zdGFuY2VvZiBYbWxDdXJzb3IgKQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxDdXJzb3IgeGMgPSAoKFhtbEN1cnNvcil0eHQpOwotICAgICAgICAgICAgcmV0dXJuIHhjLmdldFRleHRWYWx1ZSgpOwotICAgICAgICB9Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm5vZGUgbXVzdCBiZSBhbiBYbWxPYmplY3Qgb3IgYW4gWG1sQ3Vyc29yLiIpOwotICAgIH0KLQotICAgIC8qKiBSZXRyaWV2ZSB0aGUgbmFtZXNwYWNlIHByZWZpeCBvZiBhIG5hbWVzcGFjZSBub2RlLgotICAgICAqCi0gICAgICogIEBwYXJhbSBucyBUaGUgbmFtZXNwYWNlIG5vZGUuCi0gICAgICoKLSAgICAgKiAgQHJldHVybiBUaGUgcHJlZml4IGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWVzcGFjZVByZWZpeChPYmplY3QgbnMpCi0gICAgewotICAgICAgICBpZiggbnMgaW5zdGFuY2VvZiBYbWxDdXJzb3IgKQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxDdXJzb3IgeGMgPSAoKFhtbEN1cnNvcilucyk7Ci0gICAgICAgICAgICByZXR1cm4geGMuZ2V0TmFtZSgpLmdldExvY2FsUGFydCgpOwotICAgICAgICB9Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm5vZGUgbXVzdCBiZSBhbiBYbWxPYmplY3Qgb3IgYW4gWG1sQ3Vyc29yLiIpOwotICAgIH0KLQotICAgIC8qKiBSZXR1cm5zIGEgcGFyc2VkIGZvcm0gb2YgdGhlIGdpdmVuIHhwYXRoIHN0cmluZywgd2hpY2ggd2lsbCBiZSBzdWl0YWJsZQotICAgICAqICBmb3IgcXVlcmllcyBvbiBkb2N1bWVudHMgdGhhdCB1c2UgdGhlIHNhbWUgbmF2aWdhdG9yIGFzIHRoaXMgb25lLgotICAgICAqCi0gICAgICogIEBzZWUgb3JnLmpheGVuLlhQYXRoCi0gICAgICoKLSAgICAgKiAgQHBhcmFtIHhwYXRoIFRoZSB4cGF0aCBleHByZXNzaW9uLgotICAgICAqCi0gICAgICogIEByZXR1cm4gQSBuZXcgWFBhdGggZXhwcmVzc2lvbiBvYmplY3QuCi0gICAgICoKLSAgICAgKiAgQHRocm93cyBvcmcuamF4ZW4uc2F4cGF0aC5TQVhQYXRoRXhjZXB0aW9uIElmIGFuIGVycm9yIG9jY3VycyB3aGlsZSBwYXJzaW5nIHRoZQotICAgICAqICAgICAgICAgIHhwYXRoIGV4cHJlc3Npb24uCi0gICAgICovCi0gICAgcHVibGljIFhQYXRoIHBhcnNlWFBhdGgoU3RyaW5nIHhwYXRoKQotICAgICAgICAgICAgdGhyb3dzIFNBWFBhdGhFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgWEJlYW5zWFBhdGgoeHBhdGgpOwotICAgIH0KLQotICAgIC8vCi0gICAgLy8gT3ZlcndyaXR0ZW4gbWV0aG9kcwotICAgIC8vCi0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIENoaWxkSXRlcmF0b3IgaW1wbGVtZW50cyBJdGVyYXRvcgotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBYbWxDdXJzb3IgX3hjID0gbnVsbDsKLQotICAgICAgICBDaGlsZEl0ZXJhdG9yKFhtbEN1cnNvciB4YykKLSAgICAgICAgewotICAgICAgICAgICAgX3hjID0geGMubmV3Q3Vyc29yKCk7Ci0gICAgICAgICAgICBYbWxDdXJzb3IuVG9rZW5UeXBlIHRrID0gX3hjLnRvTmV4dFRva2VuKCk7IC8vaW5jbHVkaW5nIGF0dHMgYW5kIG5zLWVzIG5vdCBzdXJlIGlmIHRoZXkgc2hvdWxkIGJlIGluY2x1ZGVkCi0gICAgICAgICAgICBpZiAodGsuaXNFbmQoKSB8fCB0ay5pc0VuZGRvYygpIHx8IHRrLmlzTm9uZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF94Yy5kaXNwb3NlKCk7Ci0gICAgICAgICAgICAgICAgX3hjID0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGhhc05leHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX3hjID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoX3hjLmN1cnJlbnRUb2tlblR5cGUoKSA9PSBYbWxDdXJzb3IuVG9rZW5UeXBlLkVORCB8fAotICAgICAgICAgICAgICAgIF94Yy5jdXJyZW50VG9rZW5UeXBlKCkgPT0gWG1sQ3Vyc29yLlRva2VuVHlwZS5FTkRET0MgfHwKLSAgICAgICAgICAgICAgICBfeGMuY3VycmVudFRva2VuVHlwZSgpID09IFhtbEN1cnNvci5Ub2tlblR5cGUuTk9ORSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIF94Yy5kaXNwb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAgIF94YyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgT2JqZWN0IG5leHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX3hjID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgICAgIGlmIChfeGMuY3VycmVudFRva2VuVHlwZSgpID09IFhtbEN1cnNvci5Ub2tlblR5cGUuRU5EIHx8Ci0gICAgICAgICAgICAgICAgX3hjLmN1cnJlbnRUb2tlblR5cGUoKSA9PSBYbWxDdXJzb3IuVG9rZW5UeXBlLkVORERPQyB8fAotICAgICAgICAgICAgICAgIF94Yy5jdXJyZW50VG9rZW5UeXBlKCkgPT0gWG1sQ3Vyc29yLlRva2VuVHlwZS5OT05FICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgX3hjLmRpc3Bvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgX3hjID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFhtbEN1cnNvciByZXMgPSBfeGMubmV3Q3Vyc29yKCk7Ci0KLSAgICAgICAgICAgIGlmIChfeGMuY3VycmVudFRva2VuVHlwZSgpID09IFhtbEN1cnNvci5Ub2tlblR5cGUuU1RBUlQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX3hjLnRvRW5kVG9rZW4oKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoKF94Yy50b05leHRUb2tlbigpLmludFZhbHVlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBYbWxDdXJzb3IuVG9rZW5UeXBlLklOVF9FTkQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBYbWxDdXJzb3IuVG9rZW5UeXBlLklOVF9FTkRET0M6Ci0gICAgICAgICAgICAgICAgICAgIF94Yy5kaXNwb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAgIF94YyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHJlbW92ZSgpIHsgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIm9wdGlvbmFsIG1ldGhvZCBub3QgaW1wbGVtZW50ZWQiKTsgfQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ2hpbGRJdGVyYXRvckZhc3QgaW1wbGVtZW50cyBJdGVyYXRvcgotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBYbWxDdXJzb3IgX3hjID0gbnVsbDsKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIGluVGhlUmlnaHRQbGFjZSA9IGZhbHNlOwotCi0gICAgICAgIENoaWxkSXRlcmF0b3JGYXN0KFhtbEN1cnNvciB4YykKLSAgICAgICAgewotICAgICAgICAgICAgX3hjID0geGMubmV3Q3Vyc29yKCk7Ci0gICAgICAgICAgICBYbWxDdXJzb3IuVG9rZW5UeXBlIHRrID0gX3hjLnRvTmV4dFRva2VuKCk7IC8vaW5jbHVkaW5nIGF0dHMgYW5kIG5zLWVzIG5vdCBzdXJlIGlmIHRoZXkgc2hvdWxkIGJlIGluY2x1ZGVkCi0gICAgICAgICAgICBpZiAodGsuaXNFbmQoKSB8fCB0ay5pc0VuZGRvYygpIHx8IHRrLmlzTm9uZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF94Yy5kaXNwb3NlKCk7Ci0gICAgICAgICAgICAgICAgX3hjID0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGluVGhlUmlnaHRQbGFjZSA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBoYXNOZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFpblRoZVJpZ2h0UGxhY2UpCi0gICAgICAgICAgICAgICAgbW92ZSgpOwotCi0gICAgICAgICAgICBpZiAoX3hjID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoX3hjLmN1cnJlbnRUb2tlblR5cGUoKSA9PSBYbWxDdXJzb3IuVG9rZW5UeXBlLkVORCB8fAotICAgICAgICAgICAgICAgIF94Yy5jdXJyZW50VG9rZW5UeXBlKCkgPT0gWG1sQ3Vyc29yLlRva2VuVHlwZS5FTkRET0MgfHwKLSAgICAgICAgICAgICAgICBfeGMuY3VycmVudFRva2VuVHlwZSgpID09IFhtbEN1cnNvci5Ub2tlblR5cGUuTk9ORSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIF94Yy5kaXNwb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAgIF94YyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgT2JqZWN0IG5leHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWluVGhlUmlnaHRQbGFjZSkKLSAgICAgICAgICAgICAgICBtb3ZlKCk7Ci0KLSAgICAgICAgICAgIGlmIChfeGMgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAgICAgaWYgKF94Yy5jdXJyZW50VG9rZW5UeXBlKCkgPT0gWG1sQ3Vyc29yLlRva2VuVHlwZS5FTkQgfHwKLSAgICAgICAgICAgICAgICBfeGMuY3VycmVudFRva2VuVHlwZSgpID09IFhtbEN1cnNvci5Ub2tlblR5cGUuRU5ERE9DIHx8Ci0gICAgICAgICAgICAgICAgX3hjLmN1cnJlbnRUb2tlblR5cGUoKSA9PSBYbWxDdXJzb3IuVG9rZW5UeXBlLk5PTkUgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBfeGMuZGlzcG9zZSgpOwotICAgICAgICAgICAgICAgICAgICBfeGMgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGluVGhlUmlnaHRQbGFjZSA9IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIF94Yy5uZXdDdXJzb3IoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGUgdm9pZCBtb3ZlKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKF94YyA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKF94Yy5jdXJyZW50VG9rZW5UeXBlKCkgPT0gWG1sQ3Vyc29yLlRva2VuVHlwZS5TVEFSVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfeGMudG9FbmRUb2tlbigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2goX3hjLnRvTmV4dFRva2VuKCkuaW50VmFsdWUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIFhtbEN1cnNvci5Ub2tlblR5cGUuSU5UX0VORDoKLSAgICAgICAgICAgICAgICBjYXNlIFhtbEN1cnNvci5Ub2tlblR5cGUuSU5UX0VORERPQzoKLSAgICAgICAgICAgICAgICAgICAgX3hjLmRpc3Bvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgX3hjID0gbnVsbDsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBpblRoZVJpZ2h0UGxhY2UgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCByZW1vdmUoKSB7IHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJvcHRpb25hbCBtZXRob2Qgbm90IGltcGxlbWVudGVkIik7IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgSXRlcmF0b3IgZ2V0Q2hpbGRBeGlzSXRlcmF0b3IoT2JqZWN0IGNvbnRleHROb2RlKSB0aHJvd3MgVW5zdXBwb3J0ZWRBeGlzRXhjZXB0aW9uCi0gICAgewotICAgICAgICBpZiggY29udGV4dE5vZGUgaW5zdGFuY2VvZiBYbWxDdXJzb3IgKQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxDdXJzb3IgeGMgPSAoKFhtbEN1cnNvciljb250ZXh0Tm9kZSk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IENoaWxkSXRlcmF0b3JGYXN0KHhjKTsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJub2RlIG11c3QgYmUgYW4gWG1sT2JqZWN0IG9yIGFuIFhtbEN1cnNvci4iKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIERlc2NlbmRhbnRJdGVyYXRvciBpbXBsZW1lbnRzIEl0ZXJhdG9yCi0gICAgewotICAgICAgICBwcml2YXRlIFhtbEN1cnNvciBfeGMgPSBudWxsOwotICAgICAgICBwcml2YXRlIGludCBfZGVwdGggPSAwOwotCi0gICAgICAgIERlc2NlbmRhbnRJdGVyYXRvcihYbWxDdXJzb3IgeGMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIF94YyA9IHhjLm5ld0N1cnNvcigpOwotICAgICAgICAgICAgX2RlcHRoID0gMTsKLSAgICAgICAgICAgIFhtbEN1cnNvci5Ub2tlblR5cGUgdGsgPSBfeGMudG9OZXh0VG9rZW4oKTsgLy9pbmNsdWRpbmcgYXR0cyBhbmQgbnMtZXMgbm90IHN1cmUgaWYgdGhleSBzaG91bGQgYmUgaW5jbHVkZWQKLSAgICAgICAgICAgIGlmICh0ay5pc0VuZCgpIHx8IHRrLmlzRW5kZG9jKCkgfHwgdGsuaXNOb25lKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX3hjLmRpc3Bvc2UoKTsKLSAgICAgICAgICAgICAgICBfeGMgPSBudWxsOwotICAgICAgICAgICAgICAgIF9kZXB0aCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBoYXNOZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKF94YyA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKChfZGVwdGggPT0gMSAmJiBfeGMuY3VycmVudFRva2VuVHlwZSgpID09IFhtbEN1cnNvci5Ub2tlblR5cGUuRU5EKSB8fAotICAgICAgICAgICAgICAgIF94Yy5jdXJyZW50VG9rZW5UeXBlKCkgPT0gWG1sQ3Vyc29yLlRva2VuVHlwZS5FTkRET0MgfHwKLSAgICAgICAgICAgICAgICBfeGMuY3VycmVudFRva2VuVHlwZSgpID09IFhtbEN1cnNvci5Ub2tlblR5cGUuTk9ORSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIF94Yy5kaXNwb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAgIF94YyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgT2JqZWN0IG5leHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX3hjID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgICAgIGlmICgoX2RlcHRoID09IDEgJiYgX3hjLmN1cnJlbnRUb2tlblR5cGUoKSA9PSBYbWxDdXJzb3IuVG9rZW5UeXBlLkVORCkgfHwKLSAgICAgICAgICAgICAgICBfeGMuY3VycmVudFRva2VuVHlwZSgpID09IFhtbEN1cnNvci5Ub2tlblR5cGUuRU5ERE9DIHx8Ci0gICAgICAgICAgICAgICAgX3hjLmN1cnJlbnRUb2tlblR5cGUoKSA9PSBYbWxDdXJzb3IuVG9rZW5UeXBlLk5PTkUgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBfeGMuZGlzcG9zZSgpOwotICAgICAgICAgICAgICAgICAgICBfeGMgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgWG1sQ3Vyc29yIHJlcyA9IF94Yy5uZXdDdXJzb3IoKTsKLQotICAgICAgICAgICAgaWYgKF94Yy5jdXJyZW50VG9rZW5UeXBlKCkgPT0gWG1sQ3Vyc29yLlRva2VuVHlwZS5TVEFSVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfZGVwdGggKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChfeGMuY3VycmVudFRva2VuVHlwZSgpID09IFhtbEN1cnNvci5Ub2tlblR5cGUuRU5EKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9kZXB0aCAtLTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoKF94Yy50b05leHRUb2tlbigpLmludFZhbHVlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBYbWxDdXJzb3IuVG9rZW5UeXBlLklOVF9FTkQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChfZGVwdGggPiAxKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgICAgICAgICBjYXNlIFhtbEN1cnNvci5Ub2tlblR5cGUuSU5UX0VORERPQzoKLSAgICAgICAgICAgICAgICAgICAgX3hjLmRpc3Bvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgX3hjID0gbnVsbDsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgcmVtb3ZlKCkgeyB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigib3B0aW9uYWwgbWV0aG9kIG5vdCBpbXBsZW1lbnRlZCIpOyB9Ci0gICAgfQotCi0gICAgcHVibGljIEl0ZXJhdG9yIGdldERlc2NlbmRhbnRBeGlzSXRlcmF0b3IoT2JqZWN0IGNvbnRleHROb2RlKSB0aHJvd3MgVW5zdXBwb3J0ZWRBeGlzRXhjZXB0aW9uCi0gICAgewotICAgICAgICAvL3JldHVybiBuZXcgRGVzY2VuZGFudEF4aXNJdGVyYXRvciggY29udGV4dE5vZGUsIHRoaXMgKTsKLSAgICAgICAgaWYoIGNvbnRleHROb2RlIGluc3RhbmNlb2YgWG1sQ3Vyc29yICkKLSAgICAgICAgewotICAgICAgICAgICAgWG1sQ3Vyc29yIHhjID0gKChYbWxDdXJzb3IpY29udGV4dE5vZGUpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBEZXNjZW5kYW50SXRlcmF0b3IoeGMpOwotICAgICAgICB9Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm5vZGUgbXVzdCBiZSBhbiBYbWxPYmplY3Qgb3IgYW4gWG1sQ3Vyc29yLiIpOwotICAgIH0KLQotICAgIHB1YmxpYyBJdGVyYXRvciBnZXRQYXJlbnRBeGlzSXRlcmF0b3IoT2JqZWN0IGNvbnRleHROb2RlKSB0aHJvd3MgVW5zdXBwb3J0ZWRBeGlzRXhjZXB0aW9uCi0gICAgewotICAgICAgICBpZiggY29udGV4dE5vZGUgaW5zdGFuY2VvZiBYbWxDdXJzb3IgKQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxDdXJzb3IgeGMgPSAoKFhtbEN1cnNvciljb250ZXh0Tm9kZSkubmV3Q3Vyc29yKCk7Ci0gICAgICAgICAgICB4Yy50b1BhcmVudCgpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBTaW5nbGVPYmplY3RJdGVyYXRvcih4Yyk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibm9kZSBtdXN0IGJlIGFuIFhtbE9iamVjdCBvciBhbiBYbWxDdXJzb3IuIik7Ci0gICAgfQotCi0gICAgcHVibGljIEl0ZXJhdG9yIGdldEFuY2VzdG9yQXhpc0l0ZXJhdG9yKE9iamVjdCBjb250ZXh0Tm9kZSkgdGhyb3dzIFVuc3VwcG9ydGVkQXhpc0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBBbmNlc3RvckF4aXNJdGVyYXRvciggY29udGV4dE5vZGUsIHRoaXMgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSXRlcmF0b3IgZ2V0Rm9sbG93aW5nU2libGluZ0F4aXNJdGVyYXRvcihPYmplY3QgY29udGV4dE5vZGUpIHRocm93cyBVbnN1cHBvcnRlZEF4aXNFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgRm9sbG93aW5nU2libGluZ0F4aXNJdGVyYXRvciggY29udGV4dE5vZGUsIHRoaXMgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSXRlcmF0b3IgZ2V0UHJlY2VkaW5nU2libGluZ0F4aXNJdGVyYXRvcihPYmplY3QgY29udGV4dE5vZGUpIHRocm93cyBVbnN1cHBvcnRlZEF4aXNFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgUHJlY2VkaW5nU2libGluZ0F4aXNJdGVyYXRvciggY29udGV4dE5vZGUsIHRoaXMgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSXRlcmF0b3IgZ2V0Rm9sbG93aW5nQXhpc0l0ZXJhdG9yKE9iamVjdCBjb250ZXh0Tm9kZSkgdGhyb3dzIFVuc3VwcG9ydGVkQXhpc0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBGb2xsb3dpbmdBeGlzSXRlcmF0b3IoIGNvbnRleHROb2RlLCB0aGlzICk7Ci0gICAgfQotCi0gICAgcHVibGljIEl0ZXJhdG9yIGdldFByZWNlZGluZ0F4aXNJdGVyYXRvcihPYmplY3QgY29udGV4dE5vZGUpIHRocm93cyBVbnN1cHBvcnRlZEF4aXNFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgUHJlY2VkaW5nQXhpc0l0ZXJhdG9yKCBjb250ZXh0Tm9kZSwgdGhpcyApOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQXR0cmlidXRlSXRlcmF0b3IgaW1wbGVtZW50cyBJdGVyYXRvcgotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBYbWxDdXJzb3IgX3hjID0gbnVsbDsKLQotICAgICAgICBBdHRyaWJ1dGVJdGVyYXRvcihYbWxDdXJzb3IgeGMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIF94YyA9IHhjLm5ld0N1cnNvcigpOwotICAgICAgICAgICAgaWYgKCFfeGMudG9GaXJzdEF0dHJpYnV0ZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF94Yy5kaXNwb3NlKCk7Ci0gICAgICAgICAgICAgICAgX3hjID0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGhhc05leHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX3hjID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoX3hjLmN1cnJlbnRUb2tlblR5cGUoKSAhPSBYbWxDdXJzb3IuVG9rZW5UeXBlLkFUVFIgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBfeGMuZGlzcG9zZSgpOwotICAgICAgICAgICAgICAgICAgICBfeGMgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIE9iamVjdCBuZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKF94YyA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgICAgICBpZiAoX3hjLmN1cnJlbnRUb2tlblR5cGUoKSAhPSBYbWxDdXJzb3IuVG9rZW5UeXBlLkFUVFIgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBfeGMuZGlzcG9zZSgpOwotICAgICAgICAgICAgICAgICAgICBfeGMgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgWG1sQ3Vyc29yIHJlcyA9IF94Yy5uZXdDdXJzb3IoKTsKLQotICAgICAgICAgICAgc3dpdGNoKF94Yy50b05leHRUb2tlbigpLmludFZhbHVlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBYbWxDdXJzb3IuVG9rZW5UeXBlLklOVF9BVFRSOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIF94Yy5kaXNwb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAgIF94YyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCByZW1vdmUoKSB7IHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJvcHRpb25hbCBtZXRob2Qgbm90IGltcGxlbWVudGVkIik7IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgSXRlcmF0b3IgZ2V0QXR0cmlidXRlQXhpc0l0ZXJhdG9yKE9iamVjdCBjb250ZXh0Tm9kZSkgdGhyb3dzIFVuc3VwcG9ydGVkQXhpc0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgaWYoIGNvbnRleHROb2RlIGluc3RhbmNlb2YgWG1sQ3Vyc29yICkKLSAgICAgICAgewotICAgICAgICAgICAgWG1sQ3Vyc29yIHhjID0gKChYbWxDdXJzb3IpY29udGV4dE5vZGUpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBBdHRyaWJ1dGVJdGVyYXRvcih4Yyk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibm9kZSBtdXN0IGJlIGFuIFhtbE9iamVjdCBvciBhbiBYbWxDdXJzb3IuIik7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBOYW1lc3BhY2VJdGVyYXRvciBpbXBsZW1lbnRzIEl0ZXJhdG9yCi0gICAgewotICAgICAgICBwcml2YXRlIFhtbEN1cnNvciBfeGMgPSBudWxsOwotCi0gICAgICAgIE5hbWVzcGFjZUl0ZXJhdG9yKFhtbEN1cnNvciB4YykKLSAgICAgICAgewotICAgICAgICAgICAgX3hjID0geGMubmV3Q3Vyc29yKCk7Ci0gICAgICAgICAgICB3aGlsZSAodHJ1ZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBYbWxDdXJzb3IuVG9rZW5UeXBlIHRrID0gX3hjLnRvTmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRrID09IFhtbEN1cnNvci5Ub2tlblR5cGUuQVRUUikKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKHRrID09IFhtbEN1cnNvci5Ub2tlblR5cGUuTkFNRVNQQUNFKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIF94Yy5kaXNwb3NlKCk7Ci0gICAgICAgICAgICAgICAgX3hjID0gbnVsbDsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBoYXNOZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKF94YyA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgaWYgKF94Yy5jdXJyZW50VG9rZW5UeXBlKCkgIT0gWG1sQ3Vyc29yLlRva2VuVHlwZS5OQU1FU1BBQ0UgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBfeGMuZGlzcG9zZSgpOwotICAgICAgICAgICAgICAgICAgICBfeGMgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIE9iamVjdCBuZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKF94YyA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgICAgICBpZiAoX3hjLmN1cnJlbnRUb2tlblR5cGUoKSAhPSBYbWxDdXJzb3IuVG9rZW5UeXBlLk5BTUVTUEFDRSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIF94Yy5kaXNwb3NlKCk7Ci0gICAgICAgICAgICAgICAgICAgIF94YyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBYbWxDdXJzb3IgcmVzID0gX3hjLm5ld0N1cnNvcigpOwotCi0gICAgICAgICAgICBzd2l0Y2goX3hjLnRvTmV4dFRva2VuKCkuaW50VmFsdWUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIFhtbEN1cnNvci5Ub2tlblR5cGUuSU5UX05BTUVTUEFDRToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBfeGMuZGlzcG9zZSgpOwotICAgICAgICAgICAgICAgICAgICBfeGMgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgcmVtb3ZlKCkgeyB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigib3B0aW9uYWwgbWV0aG9kIG5vdCBpbXBsZW1lbnRlZCIpOyB9Ci0gICAgfQotCi0gICAgcHVibGljIEl0ZXJhdG9yIGdldE5hbWVzcGFjZUF4aXNJdGVyYXRvcihPYmplY3QgY29udGV4dE5vZGUpIHRocm93cyBVbnN1cHBvcnRlZEF4aXNFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGlmKCBjb250ZXh0Tm9kZSBpbnN0YW5jZW9mIFhtbEN1cnNvciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFhtbEN1cnNvciB4YyA9ICgoWG1sQ3Vyc29yKWNvbnRleHROb2RlKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgTmFtZXNwYWNlSXRlcmF0b3IoeGMpOwotICAgICAgICB9Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm5vZGUgbXVzdCBiZSBhbiBYbWxPYmplY3Qgb3IgYW4gWG1sQ3Vyc29yLiIpOwotICAgIH0KLQotICAgIHB1YmxpYyBJdGVyYXRvciBnZXRTZWxmQXhpc0l0ZXJhdG9yKE9iamVjdCBjb250ZXh0Tm9kZSkgdGhyb3dzIFVuc3VwcG9ydGVkQXhpc0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBTZWxmQXhpc0l0ZXJhdG9yKCBjb250ZXh0Tm9kZSApOwotICAgIH0KLQotICAgIHB1YmxpYyBJdGVyYXRvciBnZXREZXNjZW5kYW50T3JTZWxmQXhpc0l0ZXJhdG9yKE9iamVjdCBjb250ZXh0Tm9kZSkgdGhyb3dzIFVuc3VwcG9ydGVkQXhpc0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBEZXNjZW5kYW50T3JTZWxmQXhpc0l0ZXJhdG9yKCBjb250ZXh0Tm9kZSwgdGhpcyApOwotICAgIH0KLQotICAgIHB1YmxpYyBJdGVyYXRvciBnZXRBbmNlc3Rvck9yU2VsZkF4aXNJdGVyYXRvcihPYmplY3QgY29udGV4dE5vZGUpIHRocm93cyBVbnN1cHBvcnRlZEF4aXNFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgQW5jZXN0b3JPclNlbGZBeGlzSXRlcmF0b3IoIGNvbnRleHROb2RlLCB0aGlzICk7Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCBnZXREb2N1bWVudE5vZGUoT2JqZWN0IGNvbnRleHROb2RlKQotICAgIHsKLSAgICAgICAgaWYoIGNvbnRleHROb2RlIGluc3RhbmNlb2YgWG1sQ3Vyc29yICkKLSAgICAgICAgewotICAgICAgICAgICAgWG1sQ3Vyc29yIHhjID0gKChYbWxDdXJzb3IpY29udGV4dE5vZGUpLm5ld0N1cnNvcigpOwotICAgICAgICAgICAgeGMudG9TdGFydERvYygpOwotICAgICAgICAgICAgcmV0dXJuIHhjOwotICAgICAgICB9Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm5vZGUgbXVzdCBiZSBhbiBYbWxPYmplY3Qgb3IgYW4gWG1sQ3Vyc29yLiIpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgdHJhbnNsYXRlTmFtZXNwYWNlUHJlZml4VG9VcmkoU3RyaW5nIHByZWZpeCwgT2JqZWN0IGVsZW1lbnQpCi0gICAgewotICAgICAgICBpZiggZWxlbWVudCBpbnN0YW5jZW9mIFhtbEN1cnNvciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFhtbEN1cnNvciB4YyA9ICgoWG1sQ3Vyc29yKWVsZW1lbnQpOwotICAgICAgICAgICAgcmV0dXJuIHhjLm5hbWVzcGFjZUZvclByZWZpeChwcmVmaXgpOwotICAgICAgICB9Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm5vZGUgbXVzdCBiZSBhbiBYbWxPYmplY3Qgb3IgYW4gWG1sQ3Vyc29yLiIpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0UHJvY2Vzc2luZ0luc3RydWN0aW9uVGFyZ2V0KE9iamVjdCBvYmopCi0gICAgewotICAgICAgICBpZiggb2JqIGluc3RhbmNlb2YgWG1sQ3Vyc29yICkKLSAgICAgICAgewotICAgICAgICAgICAgWG1sQ3Vyc29yIHhjID0gKChYbWxDdXJzb3Ipb2JqKTsKLSAgICAgICAgICAgIHJldHVybiB4Yy5nZXRUZXh0VmFsdWUoKTsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJub2RlIG11c3QgYmUgYW4gWG1sT2JqZWN0IG9yIGFuIFhtbEN1cnNvci4iKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFByb2Nlc3NpbmdJbnN0cnVjdGlvbkRhdGEoT2JqZWN0IG9iaikKLSAgICB7Ci0gICAgICAgIGlmKCBvYmogaW5zdGFuY2VvZiBYbWxDdXJzb3IgKQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxDdXJzb3IgeGMgPSAoKFhtbEN1cnNvcilvYmopOwotICAgICAgICAgICAgcmV0dXJuIHhjLmdldFRleHRWYWx1ZSgpOwotICAgICAgICB9Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm5vZGUgbXVzdCBiZSBhbiBYbWxPYmplY3Qgb3IgYW4gWG1sQ3Vyc29yLiIpOwotICAgIH0KLQotCi0gICAgcHVibGljIE9iamVjdCBnZXREb2N1bWVudChTdHJpbmcgdXJsKSB0aHJvd3MgRnVuY3Rpb25DYWxsRXhjZXB0aW9uCi0gICAgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiAgRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB0aGF0IGNhbiBub3QgZmluZCBlbGVtZW50cy4gT3ZlcnJpZGUgaW4gc3ViY2xhc3MKLSAgICAgKiAgaWYgc3ViY2xhc3MgZG9lcyBrbm93IGFib3V0IGF0dHJpYnV0ZSB0eXBlcy4KLSAgICAgKgotICAgICAqICBAcGFyYW0gb2JqZWN0ICAgYSBub2RlIGZyb20gdGhlIGRvY3VtZW50IGluIHdoaWNoIHRvIGxvb2sgZm9yIHRoZQotICAgICAqICAgICAgICAgICAgICAgICAgICAgICBpZAotICAgICAqICBAcGFyYW0gZWxlbWVudElkICAgaWQgdG8gbG9vayBmb3IKLSAgICAgKgotICAgICAqICBAcmV0dXJuICAgbnVsbAotICAgICAqLwotICAgIHB1YmxpYyBPYmplY3QgZ2V0RWxlbWVudEJ5SWQoT2JqZWN0IG9iamVjdCwgU3RyaW5nIGVsZW1lbnRJZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBOYW1lZENoaWxkSXRlcmF0b3JGYXN0IGltcGxlbWVudHMgSXRlcmF0b3IKLSAgICB7Ci0gICAgICAgIHByaXZhdGUgWG1sQ3Vyc29yIF94YyA9IG51bGw7Ci0gICAgICAgIHByaXZhdGUgU3RyaW5nIF9sb2NhbCwgX3VyaTsKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIGluVGhlUmlnaHRQbGFjZSA9IGZhbHNlOwotCi0gICAgICAgIE5hbWVkQ2hpbGRJdGVyYXRvckZhc3QoWG1sQ3Vyc29yIHhjLCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgbmFtZXNwYWNlVVJJKQotICAgICAgICB7Ci0gICAgICAgICAgICBfeGMgPSB4Yy5uZXdDdXJzb3IoKTsKLSAgICAgICAgICAgIF9sb2NhbCA9IGxvY2FsTmFtZTsKLSAgICAgICAgICAgIF91cmkgPSAobmFtZXNwYWNlVVJJPT1udWxsID8gIiIgOiBuYW1lc3BhY2VVUkkpOwotCi0gICAgICAgICAgICBpZiAoIV94Yy50b0ZpcnN0Q2hpbGQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBfeGMuZGlzcG9zZSgpOwotICAgICAgICAgICAgICAgIF94YyA9IG51bGw7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCEoX3hjLmN1cnJlbnRUb2tlblR5cGUoKT09WG1sQ3Vyc29yLlRva2VuVHlwZS5TVEFSVCAmJgotICAgICAgICAgICAgICAgIF94Yy5nZXROYW1lKCkuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKF9sb2NhbCkgJiYKLSAgICAgICAgICAgICAgICAgICAgX3hjLmdldE5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoX3VyaSkKLSAgICAgICAgICAgICAgICkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFfeGMudG9OZXh0U2libGluZyhfdXJpLCBfbG9jYWwpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgX3hjLmRpc3Bvc2UoKTsKLSAgICAgICAgICAgICAgICAgICAgX3hjID0gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpblRoZVJpZ2h0UGxhY2UgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gaGFzTmV4dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghaW5UaGVSaWdodFBsYWNlKQotICAgICAgICAgICAgICAgIG1vdmUoKTsKLQotICAgICAgICAgICAgaWYgKF94YyA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgT2JqZWN0IG5leHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWluVGhlUmlnaHRQbGFjZSkKLSAgICAgICAgICAgICAgICBtb3ZlKCk7Ci0KLSAgICAgICAgICAgIGlmIChfeGMgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAgICAgaW5UaGVSaWdodFBsYWNlID0gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gX3hjLm5ld0N1cnNvcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIG1vdmUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX3hjID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpZiAoIV94Yy50b05leHRTaWJsaW5nKF91cmksIF9sb2NhbCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX3hjLmRpc3Bvc2UoKTsKLSAgICAgICAgICAgICAgICBfeGMgPSBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5UaGVSaWdodFBsYWNlID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHJlbW92ZSgpIHsgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIm9wdGlvbmFsIG1ldGhvZCBub3QgaW1wbGVtZW50ZWQiKTsgfQotICAgIH0KLQotICAgIHB1YmxpYyBJdGVyYXRvciBnZXRDaGlsZEF4aXNJdGVyYXRvcigKLSAgICAgICAgICAgIE9iamVjdCBjb250ZXh0Tm9kZSwKLSAgICAgICAgICAgIFN0cmluZyBsb2NhbE5hbWUsIFN0cmluZyBuYW1lc3BhY2VQcmVmaXgsIFN0cmluZyBuYW1lc3BhY2VVUkkpCi0gICAgICAgICAgICB0aHJvd3MgVW5zdXBwb3J0ZWRBeGlzRXhjZXB0aW9uCi0gICAgewotICAgICAgICBpZiggY29udGV4dE5vZGUgaW5zdGFuY2VvZiBYbWxDdXJzb3IgKQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxDdXJzb3IgeGMgPSAoKFhtbEN1cnNvciljb250ZXh0Tm9kZSk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IE5hbWVkQ2hpbGRJdGVyYXRvckZhc3QoeGMsIGxvY2FsTmFtZSwgbmFtZXNwYWNlVVJJKTsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJub2RlIG11c3QgYmUgYW4gWG1sT2JqZWN0IG9yIGFuIFhtbEN1cnNvci4iKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIE5hbWVkQXR0cmlidXRlSXRlcmF0b3IgaW1wbGVtZW50cyBJdGVyYXRvcgotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBYbWxDdXJzb3IgX3hjID0gbnVsbDsKLSAgICAgICAgcHJpdmF0ZSBTdHJpbmcgX2xvY2FsLCBfdXJpOwotICAgICAgICBwcml2YXRlIGJvb2xlYW4gaW5UaGVSaWdodFBsYWNlID0gZmFsc2U7Ci0KLSAgICAgICAgTmFtZWRBdHRyaWJ1dGVJdGVyYXRvcihYbWxDdXJzb3IgeGMsIFN0cmluZyBsb2NhbCwgU3RyaW5nIHVyaSkKLSAgICAgICAgewotICAgICAgICAgICAgX3hjID0geGMubmV3Q3Vyc29yKCk7Ci0gICAgICAgICAgICBfbG9jYWwgPSBsb2NhbDsKLSAgICAgICAgICAgIF91cmkgPSB1cmk7Ci0gICAgICAgICAgICBtb3ZlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBoYXNOZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFpblRoZVJpZ2h0UGxhY2UpCi0gICAgICAgICAgICAgICAgbW92ZSgpOwotCi0gICAgICAgICAgICBpZiAoX3hjID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBPYmplY3QgbmV4dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghaW5UaGVSaWdodFBsYWNlKQotICAgICAgICAgICAgICAgIG1vdmUoKTsKLQotICAgICAgICAgICAgaWYgKF94YyA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgICAgICBpblRoZVJpZ2h0UGxhY2UgPSBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBfeGMubmV3Q3Vyc29yKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIHZvaWQgbW92ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfeGMuY3VycmVudFRva2VuVHlwZSgpICE9IFhtbEN1cnNvci5Ub2tlblR5cGUuQVRUUiApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX3hjLmRpc3Bvc2UoKTsKLSAgICAgICAgICAgICAgICBfeGMgPSBudWxsOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgd2hpbGUoX3hjLnRvTmV4dFRva2VuKCk9PVhtbEN1cnNvci5Ub2tlblR5cGUuQVRUUikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIF94Yy5nZXROYW1lKCkuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKF9sb2NhbCkgJiYKLSAgICAgICAgICAgICAgICAgICAgIF94Yy5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKF91cmkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW5UaGVSaWdodFBsYWNlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF94Yy5kaXNwb3NlKCk7Ci0gICAgICAgICAgICBfeGMgPSBudWxsOwotICAgICAgICAgICAgaW5UaGVSaWdodFBsYWNlID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHJlbW92ZSgpIHsgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIm9wdGlvbmFsIG1ldGhvZCBub3QgaW1wbGVtZW50ZWQiKTsgfQotICAgIH0KLQotICAgIHB1YmxpYyBJdGVyYXRvciBnZXRBdHRyaWJ1dGVBeGlzSXRlcmF0b3IoCi0gICAgICAgICAgICBPYmplY3QgY29udGV4dE5vZGUsCi0gICAgICAgICAgICBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgbmFtZXNwYWNlUHJlZml4LCBTdHJpbmcgbmFtZXNwYWNlVVJJKQotICAgICAgICAgICAgdGhyb3dzIFVuc3VwcG9ydGVkQXhpc0V4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgaWYoIGNvbnRleHROb2RlIGluc3RhbmNlb2YgWG1sQ3Vyc29yICkKLSAgICAgICAgewotICAgICAgICAgICAgWG1sQ3Vyc29yIHhjID0gKChYbWxDdXJzb3IpY29udGV4dE5vZGUpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBOYW1lZEF0dHJpYnV0ZUl0ZXJhdG9yKHhjLCBsb2NhbE5hbWUsIG5hbWVzcGFjZVVSSSk7Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigibm9kZSBtdXN0IGJlIGFuIFhtbE9iamVjdCBvciBhbiBYbWxDdXJzb3IuIik7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvc3JjL3hwYXRoL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC94cGF0aC9qYXhlbi9YQmVhbnNYUGF0aC5qYXZhIGIvdjIvc3JjL3hwYXRoL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC94cGF0aC9qYXhlbi9YQmVhbnNYUGF0aC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmQ2YjM2Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy94cGF0aC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwveHBhdGgvamF4ZW4vWEJlYW5zWFBhdGguamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnhwYXRoLmpheGVuOwotCi1pbXBvcnQgb3JnLmpheGVuLkJhc2VYUGF0aDsKLWltcG9ydCBvcmcuamF4ZW4uSmF4ZW5FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnhwYXRoLmpheGVuLlhCZWFuc05hdmlnYXRvcjsKLQotLyoqCi0gKiBBdXRob3I6IENlemFyIEFuZHJlaSAoY2V6YXIuYW5kcmVpQGJlYS5jb20pCi0gKiBEYXRlOiBPY3QgMTAsIDIwMDMKLSAqLwotcHVibGljIGNsYXNzIFhCZWFuc1hQYXRoIGV4dGVuZHMgQmFzZVhQYXRoCi17Ci0gICAgLyoqIENvbnN0cnVjdCBnaXZlbiBhbiBYUGF0aCBleHByZXNzaW9uIHN0cmluZy4KLSAgICAgKgotICAgICAqICBAcGFyYW0geHBhdGhFeHByIFRoZSBYUGF0aCBleHByZXNzaW9uLgotICAgICAqCi0gICAgICogIEB0aHJvd3Mgb3JnLmpheGVuLkpheGVuRXhjZXB0aW9uIGlmIHRoZXJlIGlzIGEgc3ludGF4IGVycm9yIHdoaWxlCi0gICAgICogICAgICAgICAgcGFyc2luZyB0aGUgZXhwcmVzc2lvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgWEJlYW5zWFBhdGgoU3RyaW5nIHhwYXRoRXhwcikgdGhyb3dzIEpheGVuRXhjZXB0aW9uCi0gICAgewotICAgICAgICBzdXBlciggeHBhdGhFeHByLCBYQmVhbnNOYXZpZ2F0b3IuZ2V0SW5zdGFuY2UoKSApOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3NyYy94c2RzY2hlbWEvc2NoZW1hL1hNTFNjaGVtYS54c2QgYi92Mi9zcmMveHNkc2NoZW1hL3NjaGVtYS9YTUxTY2hlbWEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWYyMWE3Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy94c2RzY2hlbWEvc2NoZW1hL1hNTFNjaGVtYS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyNTM0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Ci08IS0tIFhNTCBTY2hlbWEgc2NoZW1hIGZvciBYTUwgU2NoZW1hczogUGFydCAxOiBTdHJ1Y3R1cmVzIC0tPgotPCEtLSBOb3RlIHRoaXMgc2NoZW1hIGlzIE5PVCB0aGUgbm9ybWF0aXZlIHN0cnVjdHVyZXMgc2NoZW1hLiAtLT4KLQotPCEtLSBUaGUgcHJvc2UgY29weSBpbiB0aGUgc3RydWN0dXJlcyBSRUMgaXMgdGhlIG5vcm1hdGl2ZSAtLT4KLQotPCEtLSB2ZXJzaW9uICh3aGljaCBzaG91bGRuJ3QgZGlmZmVyIGZyb20gdGhpcyBvbmUgZXhjZXB0IGZvciAtLT4KLQotPCEtLSB0aGlzIGNvbW1lbnQgYW5kIGVudGl0eSBleHBhbnNpb25zLCBidXQganVzdCBpbiBjYXNlIC0tPgotCi08IURPQ1RZUEUgeHM6c2NoZW1hIFBVQkxJQyAiLS8vVzNDLy9EVEQgWE1MU0NIRU1BIDIwMDEwMi8vRU4iICJYTUxTY2hlbWEuZHRkIiBbCi0KLTwhLS0gcHJvdmlkZSBJRCB0eXBlIGluZm9ybWF0aW9uIGV2ZW4gZm9yIHBhcnNlcnMgd2hpY2ggb25seSByZWFkIHRoZQotICAgICBpbnRlcm5hbCBzdWJzZXQgLS0+Ci08IUFUVExJU1QgeHM6c2NoZW1hICAgICAgICAgIGlkICBJRCAgI0lNUExJRUQ+Ci08IUFUVExJU1QgeHM6Y29tcGxleFR5cGUgICAgIGlkICBJRCAgI0lNUExJRUQ+Ci08IUFUVExJU1QgeHM6Y29tcGxleENvbnRlbnQgIGlkICBJRCAgI0lNUExJRUQ+Ci08IUFUVExJU1QgeHM6c2ltcGxlQ29udGVudCAgIGlkICBJRCAgI0lNUExJRUQ+Ci08IUFUVExJU1QgeHM6ZXh0ZW5zaW9uICAgICAgIGlkICBJRCAgI0lNUExJRUQ+Ci08IUFUVExJU1QgeHM6ZWxlbWVudCAgICAgICAgIGlkICBJRCAgI0lNUExJRUQ+Ci08IUFUVExJU1QgeHM6Z3JvdXAgICAgICAgICAgIGlkICBJRCAgI0lNUExJRUQ+IAotPCFBVFRMSVNUIHhzOmFsbCAgICAgICAgICAgICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOmNob2ljZSAgICAgICAgICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOnNlcXVlbmNlICAgICAgICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOmFueSAgICAgICAgICAgICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOmFueUF0dHJpYnV0ZSAgICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOmF0dHJpYnV0ZSAgICAgICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOmF0dHJpYnV0ZUdyb3VwICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOnVuaXF1ZSAgICAgICAgICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOmtleSAgICAgICAgICAgICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOmtleXJlZiAgICAgICAgICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOnNlbGVjdG9yICAgICAgICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOmZpZWxkICAgICAgICAgICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOmluY2x1ZGUgICAgICAgICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOmltcG9ydCAgICAgICAgICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOnJlZGVmaW5lICAgICAgICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOm5vdGF0aW9uICAgICAgICBpZCAgSUQgICNJTVBMSUVEPgotPCEtLQotICAgICBrZWVwIHRoaXMgc2NoZW1hIFhNTDEuMCBEVEQgdmFsaWQKLSAgLS0+Ci0gICAgICAgIDwhRU5USVRZICUgc2NoZW1hQXR0cnMgJ3htbG5zOmhmcCBDREFUQSAjSU1QTElFRCc+Ci0KLSAgICAgICAgPCFFTEVNRU5UIGhmcDpoYXNGYWNldCBFTVBUWT4KLSAgICAgICAgPCFBVFRMSVNUIGhmcDpoYXNGYWNldAotICAgICAgICAgICAgICAgIG5hbWUgTk1UT0tFTiAjUkVRVUlSRUQ+Ci0KLSAgICAgICAgPCFFTEVNRU5UIGhmcDpoYXNQcm9wZXJ0eSBFTVBUWT4KLSAgICAgICAgPCFBVFRMSVNUIGhmcDpoYXNQcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWUgTk1UT0tFTiAjUkVRVUlSRUQKLSAgICAgICAgICAgICAgICB2YWx1ZSBDREFUQSAjUkVRVUlSRUQ+Ci08IS0tCi0gICAgICAgIE1ha2Ugc3VyZSB0aGF0IHByb2Nlc3NvcnMgdGhhdCBkbyBub3QgcmVhZCB0aGUgZXh0ZXJuYWwKLSAgICAgICAgc3Vic2V0IHdpbGwga25vdyBhYm91dCB0aGUgdmFyaW91cyBJRHMgd2UgZGVjbGFyZQotICAtLT4KLSAgICAgICAgPCFBVFRMSVNUIHhzOnNpbXBsZVR5cGUgaWQgSUQgI0lNUExJRUQ+Ci0gICAgICAgIDwhQVRUTElTVCB4czptYXhFeGNsdXNpdmUgaWQgSUQgI0lNUExJRUQ+Ci0gICAgICAgIDwhQVRUTElTVCB4czptaW5FeGNsdXNpdmUgaWQgSUQgI0lNUExJRUQ+Ci0gICAgICAgIDwhQVRUTElTVCB4czptYXhJbmNsdXNpdmUgaWQgSUQgI0lNUExJRUQ+Ci0gICAgICAgIDwhQVRUTElTVCB4czptaW5JbmNsdXNpdmUgaWQgSUQgI0lNUExJRUQ+Ci0gICAgICAgIDwhQVRUTElTVCB4czp0b3RhbERpZ2l0cyBpZCBJRCAjSU1QTElFRD4KLSAgICAgICAgPCFBVFRMSVNUIHhzOmZyYWN0aW9uRGlnaXRzIGlkIElEICNJTVBMSUVEPgotICAgICAgICA8IUFUVExJU1QgeHM6bGVuZ3RoIGlkIElEICNJTVBMSUVEPgotICAgICAgICA8IUFUVExJU1QgeHM6bWluTGVuZ3RoIGlkIElEICNJTVBMSUVEPgotICAgICAgICA8IUFUVExJU1QgeHM6bWF4TGVuZ3RoIGlkIElEICNJTVBMSUVEPgotICAgICAgICA8IUFUVExJU1QgeHM6ZW51bWVyYXRpb24gaWQgSUQgI0lNUExJRUQ+Ci0gICAgICAgIDwhQVRUTElTVCB4czpwYXR0ZXJuIGlkIElEICNJTVBMSUVEPgotICAgICAgICA8IUFUVExJU1QgeHM6YXBwaW5mbyBpZCBJRCAjSU1QTElFRD4KLSAgICAgICAgPCFBVFRMSVNUIHhzOmRvY3VtZW50YXRpb24gaWQgSUQgI0lNUExJRUQ+Ci0gICAgICAgIDwhQVRUTElTVCB4czpsaXN0IGlkIElEICNJTVBMSUVEPgotICAgICAgICA8IUFUVExJU1QgeHM6dW5pb24gaWQgSUQgI0lNUExJRUQ+Ci0gICAgICAgIF0+Ci08eHM6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGJsb2NrRGVmYXVsdD0iI2FsbCIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHZlcnNpb249IjEuMCIgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWw6bGFuZz0iRU4iIHhtbG5zOmhmcD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaGFzRmFjZXRBbmRQcm9wZXJ0eSI+Ci0gPHhzOmFubm90YXRpb24+Ci0gIDx4czpkb2N1bWVudGF0aW9uPgotICAgIFBhcnQgMSB2ZXJzaW9uOiBJZDogWE1MU2NoZW1hLnhzZCx2IDEuNTMgMjAwMy8wMi8yNCAxNzo0MDowNyBodCBFeHAgCi0gICAgUGFydCAyIHZlcnNpb246IElkOiBkYXRhdHlwZXMueHNkLHYgMS42MCAyMDAzLzA0LzA1IDExOjAyOjMwIGh0IEV4cCAKLSAgPC94czpkb2N1bWVudGF0aW9uPgotIDwveHM6YW5ub3RhdGlvbj4KLQotCi0gPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC9Hcm91cC8yMDAyLzA5L3htbHNjaGVtYS0xL3N0cnVjdHVyZXMtd2l0aC1lcnJhdGEuaHRtbCI+Ci0gICBUaGUgc2NoZW1hIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBkb2N1bWVudCBpcyBub3JtYXRpdmUsCi0gICB3aXRoIHJlc3BlY3QgdG8gdGhlIHN5bnRhY3RpYyBjb25zdHJhaW50cyBpdCBleHByZXNzZXMgaW4gdGhlCi0gICBYTUwgU2NoZW1hIGxhbmd1YWdlLiAgVGhlIGRvY3VtZW50YXRpb24gKHdpdGhpbiAmbHQ7ZG9jdW1lbnRhdGlvbj4gZWxlbWVudHMpCi0gICBiZWxvdywgaXMgbm90IG5vcm1hdGl2ZSwgYnV0IHJhdGhlciBoaWdobGlnaHRzIGltcG9ydGFudCBhc3BlY3RzIG9mCi0gICB0aGUgVzNDIFJlY29tbWVuZGF0aW9uIG9mIHdoaWNoIHRoaXMgaXMgYSBwYXJ0PC94czpkb2N1bWVudGF0aW9uPgotIDwveHM6YW5ub3RhdGlvbj4KLQotIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBUaGUgc2ltcGxlVHlwZSBlbGVtZW50IGFuZCBhbGwgb2YgaXRzIG1lbWJlcnMgYXJlIGRlZmluZWQKLSAgICAgIHRvd2FyZHMgdGhlIGVuZCBvZiB0aGlzIHNjaGVtYSBkb2N1bWVudDwveHM6ZG9jdW1lbnRhdGlvbj4KLSA8L3hzOmFubm90YXRpb24+Ci0KLSA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiBzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIj4KLSAgIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICBHZXQgYWNjZXNzIHRvIHRoZSB4bWw6IGF0dHJpYnV0ZSBncm91cHMgZm9yIHhtbDpsYW5nCi0gICAgICAgYXMgZGVjbGFyZWQgb24gJ3NjaGVtYScgYW5kICdkb2N1bWVudGF0aW9uJyBiZWxvdwotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICA8L3hzOmFubm90YXRpb24+Ci0gPC94czppbXBvcnQ+Ci0KLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0ib3BlbkF0dHJzIj4KLSAgIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICBUaGlzIHR5cGUgaXMgZXh0ZW5kZWQgYnkgYWxtb3N0IGFsbCBzY2hlbWEgdHlwZXMKLSAgICAgICB0byBhbGxvdyBhdHRyaWJ1dGVzIGZyb20gb3RoZXIgbmFtZXNwYWNlcyB0byBiZQotICAgICAgIGFkZGVkIHRvIHVzZXIgc2NoZW1hcy4KLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgPC94czphbm5vdGF0aW9uPgotICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55VHlwZSI+Ci0gICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0KLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0iYW5ub3RhdGVkIj4KLSAgIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICBUaGlzIHR5cGUgaXMgZXh0ZW5kZWQgYnkgYWxsIHR5cGVzIHdoaWNoIGFsbG93IGFubm90YXRpb24KLSAgICAgICBvdGhlciB0aGFuICZsdDtzY2hlbWEmZ3Q7IGl0c2VsZgotICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICA8L3hzOmFubm90YXRpb24+Ci0gICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6b3BlbkF0dHJzIj4KLSAgICAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ieHM6SUQiLz4KLSAgICAgPC94czpleHRlbnNpb24+Ci0gICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0KLSA8eHM6Z3JvdXAgbmFtZT0ic2NoZW1hVG9wIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgIFRoaXMgZ3JvdXAgaXMgZm9yIHRoZQotICAgZWxlbWVudHMgd2hpY2ggb2NjdXIgZnJlZWx5IGF0IHRoZSB0b3AgbGV2ZWwgb2Ygc2NoZW1hcy4KLSAgIEFsbCBvZiB0aGVpciB0eXBlcyBhcmUgYmFzZWQgb24gdGhlICJhbm5vdGF0ZWQiIHR5cGUgYnkgZXh0ZW5zaW9uLjwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6Y2hvaWNlPgotICAgPHhzOmdyb3VwIHJlZj0ieHM6cmVkZWZpbmFibGUiLz4KLSAgIDx4czplbGVtZW50IHJlZj0ieHM6ZWxlbWVudCIvPgotICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphdHRyaWJ1dGUiLz4KLSAgIDx4czplbGVtZW50IHJlZj0ieHM6bm90YXRpb24iLz4KLSAgPC94czpjaG9pY2U+Ci0gPC94czpncm91cD4KLSAKLSA8eHM6Z3JvdXAgbmFtZT0icmVkZWZpbmFibGUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgVGhpcyBncm91cCBpcyBmb3IgdGhlCi0gICBlbGVtZW50cyB3aGljaCBjYW4gc2VsZi1yZWRlZmluZSAoc2VlICZsdDtyZWRlZmluZT4gYmVsb3cpLjwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6Y2hvaWNlPgotICAgPHhzOmVsZW1lbnQgcmVmPSJ4czpzaW1wbGVUeXBlIi8+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOmNvbXBsZXhUeXBlIi8+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOmdyb3VwIi8+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOmF0dHJpYnV0ZUdyb3VwIi8+Ci0gIDwveHM6Y2hvaWNlPgotIDwveHM6Z3JvdXA+Ci0KLSA8eHM6c2ltcGxlVHlwZSBuYW1lPSJmb3JtQ2hvaWNlIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgIEEgdXRpbGl0eSB0eXBlLCBub3QgZm9yIHB1YmxpYyB1c2U8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgotICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJxdWFsaWZpZWQiLz4KLSAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idW5xdWFsaWZpZWQiLz4KLSAgPC94czpyZXN0cmljdGlvbj4KLSA8L3hzOnNpbXBsZVR5cGU+Ci0KLSA8eHM6c2ltcGxlVHlwZSBuYW1lPSJkZWZhdWx0RGVyaXZhdGlvbkNvbnRyb2wiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgQSB1dGlsaXR5IHR5cGUsIG5vdCBmb3IgcHVibGljIHVzZTwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6ZGVyaXZhdGlvbkNvbnRyb2wiPgotICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJleHRlbnNpb24iLz4KLSAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVzdHJpY3Rpb24iLz4KLSAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGlzdCIvPgotICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ1bmlvbiIvPgotICA8L3hzOnJlc3RyaWN0aW9uPgotIDwveHM6c2ltcGxlVHlwZT4KLQotIDx4czpzaW1wbGVUeXBlIG5hbWU9ImRlZmF1bHREZXJpdmF0aW9uU2V0Ij4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgIEEgdXRpbGl0eSB0eXBlLCBub3QgZm9yIHB1YmxpYyB1c2U8L3hzOmRvY3VtZW50YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICNhbGwgb3IgKHBvc3NpYmx5IGVtcHR5KSBzdWJzZXQgb2Yge2V4dGVuc2lvbiwgcmVzdHJpY3Rpb24sIGxpc3QsIHVuaW9ufTwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6dW5pb24+Ci0gICA8eHM6c2ltcGxlVHlwZT4gICAgCi0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIjYWxsIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgIDwveHM6c2ltcGxlVHlwZT4KLSAgIDx4czpzaW1wbGVUeXBlPgotICAgIDx4czpsaXN0IGl0ZW1UeXBlPSJ4czpkZWZhdWx0RGVyaXZhdGlvbkNvbnRyb2wiLz4KLSAgIDwveHM6c2ltcGxlVHlwZT4KLSAgPC94czp1bmlvbj4KLSA8L3hzOnNpbXBsZVR5cGU+Ci0KLSA8eHM6c2ltcGxlVHlwZSBuYW1lPSJyZWR1Y2VkRGVyaXZhdGlvbkNvbnRyb2wiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgQSB1dGlsaXR5IHR5cGUsIG5vdCBmb3IgcHVibGljIHVzZTwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6ZGVyaXZhdGlvbkNvbnRyb2wiPgotICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJleHRlbnNpb24iLz4KLSAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVzdHJpY3Rpb24iLz4KLSAgPC94czpyZXN0cmljdGlvbj4KLSA8L3hzOnNpbXBsZVR5cGU+Ci0KLSA8eHM6c2ltcGxlVHlwZSBuYW1lPSJkZXJpdmF0aW9uU2V0Ij4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgIEEgdXRpbGl0eSB0eXBlLCBub3QgZm9yIHB1YmxpYyB1c2U8L3hzOmRvY3VtZW50YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICNhbGwgb3IgKHBvc3NpYmx5IGVtcHR5KSBzdWJzZXQgb2Yge2V4dGVuc2lvbiwgcmVzdHJpY3Rpb259PC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czp1bmlvbj4KLSAgIDx4czpzaW1wbGVUeXBlPiAgICAKLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IiNhbGwiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgPC94czpzaW1wbGVUeXBlPgotICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgPHhzOmxpc3QgaXRlbVR5cGU9InhzOnJlZHVjZWREZXJpdmF0aW9uQ29udHJvbCIvPgotICAgPC94czpzaW1wbGVUeXBlPgotICA8L3hzOnVuaW9uPgotIDwveHM6c2ltcGxlVHlwZT4KLQotIDx4czplbGVtZW50IG5hbWU9InNjaGVtYSIgaWQ9InNjaGVtYSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2VsZW1lbnQtc2NoZW1hIi8+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6b3BlbkF0dHJzIj4KLSAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmluY2x1ZGUiLz4KLSAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmltcG9ydCIvPgotICAgICAgIDx4czplbGVtZW50IHJlZj0ieHM6cmVkZWZpbmUiLz4KLSAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iLz4KLSAgICAgIDwveHM6Y2hvaWNlPgotICAgICAgPHhzOnNlcXVlbmNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgIDx4czpncm91cCByZWY9InhzOnNjaGVtYVRvcCIvPgotICAgICAgIDx4czplbGVtZW50IHJlZj0ieHM6YW5ub3RhdGlvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0YXJnZXROYW1lc3BhY2UiIHR5cGU9InhzOmFueVVSSSIvPgotICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZlcnNpb24iIHR5cGU9InhzOm5vcm1hbGl6ZWRTdHJpbmciLz4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmaW5hbERlZmF1bHQiIHR5cGU9InhzOmRlZmF1bHREZXJpdmF0aW9uU2V0IiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSIiLz4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJibG9ja0RlZmF1bHQiIHR5cGU9InhzOmJsb2NrU2V0IiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSIiLz4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhdHRyaWJ1dGVGb3JtRGVmYXVsdCIgdHlwZT0ieHM6Zm9ybUNob2ljZSIgdXNlPSJvcHRpb25hbCIgZGVmYXVsdD0idW5xdWFsaWZpZWQiLz4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJlbGVtZW50Rm9ybURlZmF1bHQiIHR5cGU9InhzOmZvcm1DaG9pY2UiIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9InVucXVhbGlmaWVkIi8+Ci0gICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InhzOklEIi8+Ci0gICAgIDx4czphdHRyaWJ1dGUgcmVmPSJ4bWw6bGFuZyIvPgotICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6a2V5IG5hbWU9ImVsZW1lbnQiPgotICAgPHhzOnNlbGVjdG9yIHhwYXRoPSJ4czplbGVtZW50Ii8+Ci0gICA8eHM6ZmllbGQgeHBhdGg9IkBuYW1lIi8+Ci0gIDwveHM6a2V5PgotCi0gIDx4czprZXkgbmFtZT0iYXR0cmlidXRlIj4KLSAgIDx4czpzZWxlY3RvciB4cGF0aD0ieHM6YXR0cmlidXRlIi8+Ci0gICA8eHM6ZmllbGQgeHBhdGg9IkBuYW1lIi8+Ci0gIDwveHM6a2V5PgotCi0gIDx4czprZXkgbmFtZT0idHlwZSI+Ci0gICA8eHM6c2VsZWN0b3IgeHBhdGg9InhzOmNvbXBsZXhUeXBlfHhzOnNpbXBsZVR5cGUiLz4KLSAgIDx4czpmaWVsZCB4cGF0aD0iQG5hbWUiLz4KLSAgPC94czprZXk+Ci0gCi0gIDx4czprZXkgbmFtZT0iZ3JvdXAiPgotICAgPHhzOnNlbGVjdG9yIHhwYXRoPSJ4czpncm91cCIvPgotICAgPHhzOmZpZWxkIHhwYXRoPSJAbmFtZSIvPgotICA8L3hzOmtleT4KLSAKLSAgPHhzOmtleSBuYW1lPSJhdHRyaWJ1dGVHcm91cCI+Ci0gICA8eHM6c2VsZWN0b3IgeHBhdGg9InhzOmF0dHJpYnV0ZUdyb3VwIi8+Ci0gICA8eHM6ZmllbGQgeHBhdGg9IkBuYW1lIi8+Ci0gIDwveHM6a2V5PgotIAotICA8eHM6a2V5IG5hbWU9Im5vdGF0aW9uIj4KLSAgIDx4czpzZWxlY3RvciB4cGF0aD0ieHM6bm90YXRpb24iLz4KLSAgIDx4czpmaWVsZCB4cGF0aD0iQG5hbWUiLz4KLSAgPC94czprZXk+Ci0KLSAgPHhzOmtleSBuYW1lPSJpZGVudGl0eUNvbnN0cmFpbnQiPgotICAgPHhzOnNlbGVjdG9yIHhwYXRoPSIuLy94czprZXl8Li8veHM6dW5pcXVlfC4vL3hzOmtleXJlZiIvPgotICAgPHhzOmZpZWxkIHhwYXRoPSJAbmFtZSIvPgotICA8L3hzOmtleT4KLQotIDwveHM6ZWxlbWVudD4KLQotIDx4czpzaW1wbGVUeXBlIG5hbWU9ImFsbE5OSSI+Ci0gIDx4czphbm5vdGF0aW9uPjx4czpkb2N1bWVudGF0aW9uPgotICAgZm9yIG1heE9jY3VyczwveHM6ZG9jdW1lbnRhdGlvbj48L3hzOmFubm90YXRpb24+Ci0gIDx4czp1bmlvbiBtZW1iZXJUeXBlcz0ieHM6bm9uTmVnYXRpdmVJbnRlZ2VyIj4KLSAgIDx4czpzaW1wbGVUeXBlPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLSAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgPC94czpzaW1wbGVUeXBlPgotICA8L3hzOnVuaW9uPgotIDwveHM6c2ltcGxlVHlwZT4KLQotIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvY2N1cnMiPgotICA8eHM6YW5ub3RhdGlvbj48eHM6ZG9jdW1lbnRhdGlvbj4KLSAgIGZvciBhbGwgcGFydGljbGVzPC94czpkb2N1bWVudGF0aW9uPjwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtaW5PY2N1cnMiIHR5cGU9InhzOm5vbk5lZ2F0aXZlSW50ZWdlciIgdXNlPSJvcHRpb25hbCIgZGVmYXVsdD0iMSIvPgotICA8eHM6YXR0cmlidXRlIG5hbWU9Im1heE9jY3VycyIgdHlwZT0ieHM6YWxsTk5JIiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSIxIi8+Ci0gPC94czphdHRyaWJ1dGVHcm91cD4KLQotIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJkZWZSZWYiPgotICA8eHM6YW5ub3RhdGlvbj48eHM6ZG9jdW1lbnRhdGlvbj4KLSAgIGZvciBlbGVtZW50LCBncm91cCBhbmQgYXR0cmlidXRlR3JvdXAsCi0gICB3aGljaCBib3RoIGRlZmluZSBhbmQgcmVmZXJlbmNlPC94czpkb2N1bWVudGF0aW9uPjwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpOQ05hbWUiLz4KLSAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZWYiIHR5cGU9InhzOlFOYW1lIi8+Ci0gPC94czphdHRyaWJ1dGVHcm91cD4KLQotIDx4czpncm91cCBuYW1lPSJ0eXBlRGVmUGFydGljbGUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICdjb21wbGV4VHlwZScgdXNlcyB0aGlzPC94czpkb2N1bWVudGF0aW9uPjwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNob2ljZT4KLSAgIDx4czplbGVtZW50IG5hbWU9Imdyb3VwIiB0eXBlPSJ4czpncm91cFJlZiIvPgotICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbGwiLz4KLSAgIDx4czplbGVtZW50IHJlZj0ieHM6Y2hvaWNlIi8+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOnNlcXVlbmNlIi8+Ci0gIDwveHM6Y2hvaWNlPgotIDwveHM6Z3JvdXA+Ci0gCi0gCi0KLSA8eHM6Z3JvdXAgbmFtZT0ibmVzdGVkUGFydGljbGUiPgotICA8eHM6Y2hvaWNlPgotICAgPHhzOmVsZW1lbnQgbmFtZT0iZWxlbWVudCIgdHlwZT0ieHM6bG9jYWxFbGVtZW50Ii8+Ci0gICA8eHM6ZWxlbWVudCBuYW1lPSJncm91cCIgdHlwZT0ieHM6Z3JvdXBSZWYiLz4KLSAgIDx4czplbGVtZW50IHJlZj0ieHM6Y2hvaWNlIi8+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOnNlcXVlbmNlIi8+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOmFueSIvPgotICA8L3hzOmNob2ljZT4KLSA8L3hzOmdyb3VwPgotIAotIDx4czpncm91cCBuYW1lPSJwYXJ0aWNsZSI+Ci0gIDx4czpjaG9pY2U+Ci0gICA8eHM6ZWxlbWVudCBuYW1lPSJlbGVtZW50IiB0eXBlPSJ4czpsb2NhbEVsZW1lbnQiLz4KLSAgIDx4czplbGVtZW50IG5hbWU9Imdyb3VwIiB0eXBlPSJ4czpncm91cFJlZiIvPgotICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbGwiLz4KLSAgIDx4czplbGVtZW50IHJlZj0ieHM6Y2hvaWNlIi8+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOnNlcXVlbmNlIi8+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOmFueSIvPgotICA8L3hzOmNob2ljZT4KLSA8L3hzOmdyb3VwPgotIAotIDx4czpjb21wbGV4VHlwZSBuYW1lPSJhdHRyaWJ1dGUiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmFubm90YXRlZCI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCBuYW1lPSJzaW1wbGVUeXBlIiBtaW5PY2N1cnM9IjAiIHR5cGU9InhzOmxvY2FsU2ltcGxlVHlwZSIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ieHM6ZGVmUmVmIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB0eXBlPSJ4czpRTmFtZSIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXNlIiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJvcHRpb25hbCI+Ci0gICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgotICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icHJvaGliaXRlZCIvPgotICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3B0aW9uYWwiLz4KLSAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlcXVpcmVkIi8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgPC94czphdHRyaWJ1dGU+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkZWZhdWx0IiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZpeGVkIiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZvcm0iIHR5cGU9InhzOmZvcm1DaG9pY2UiLz4KLSAgIDwveHM6ZXh0ZW5zaW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0gCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRvcExldmVsQXR0cmlidXRlIj4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmF0dHJpYnV0ZSI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICA8eHM6ZWxlbWVudCBuYW1lPSJzaW1wbGVUeXBlIiBtaW5PY2N1cnM9IjAiIHR5cGU9InhzOmxvY2FsU2ltcGxlVHlwZSIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZWYiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZm9ybSIgdXNlPSJwcm9oaWJpdGVkIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1c2UiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6TkNOYW1lIi8+Ci0gICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0KLSA8eHM6Z3JvdXAgbmFtZT0iYXR0ckRlY2xzIj4KLSAgPHhzOnNlcXVlbmNlPgotICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICA8eHM6ZWxlbWVudCBuYW1lPSJhdHRyaWJ1dGUiIHR5cGU9InhzOmF0dHJpYnV0ZSIvPgotICAgIDx4czplbGVtZW50IG5hbWU9ImF0dHJpYnV0ZUdyb3VwIiB0eXBlPSJ4czphdHRyaWJ1dGVHcm91cFJlZiIvPgotICAgPC94czpjaG9pY2U+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOmFueUF0dHJpYnV0ZSIgbWluT2NjdXJzPSIwIi8+Ci0gIDwveHM6c2VxdWVuY2U+Ci0gPC94czpncm91cD4KLQotIDx4czplbGVtZW50IG5hbWU9ImFueUF0dHJpYnV0ZSIgdHlwZT0ieHM6d2lsZGNhcmQiIGlkPSJhbnlBdHRyaWJ1dGUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2VsZW1lbnQtYW55QXR0cmlidXRlIi8+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6Z3JvdXAgbmFtZT0iY29tcGxleFR5cGVNb2RlbCI+Ci0gIDx4czpjaG9pY2U+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9InhzOnNpbXBsZUNvbnRlbnQiLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0ieHM6Y29tcGxleENvbnRlbnQiLz4KLSAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBUaGlzIGJyYW5jaCBpcyBzaG9ydCBmb3IKLSAgICZsdDtjb21wbGV4Q29udGVudD4KLSAgICZsdDtyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4KLSAgIC4uLgotICAgJmx0Oy9yZXN0cmljdGlvbj4KLSAgICZsdDsvY29tcGxleENvbnRlbnQ+PC94czpkb2N1bWVudGF0aW9uPgotICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICA8eHM6Z3JvdXAgcmVmPSJ4czp0eXBlRGVmUGFydGljbGUiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgIDx4czpncm91cCByZWY9InhzOmF0dHJEZWNscyIvPgotICAgICAgPC94czpzZXF1ZW5jZT4KLSAgPC94czpjaG9pY2U+Ci0gPC94czpncm91cD4KLQotIDx4czpjb21wbGV4VHlwZSBuYW1lPSJjb21wbGV4VHlwZSIgYWJzdHJhY3Q9InRydWUiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmFubm90YXRlZCI+Ci0gICAgPHhzOmdyb3VwIHJlZj0ieHM6Y29tcGxleFR5cGVNb2RlbCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6TkNOYW1lIj4KLSAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIFdpbGwgYmUgcmVzdHJpY3RlZCB0byByZXF1aXJlZCBvciBmb3JiaWRkZW48L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1peGVkIiB0eXBlPSJ4czpib29sZWFuIiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJmYWxzZSI+Ci0gICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBOb3QgYWxsb3dlZCBpZiBzaW1wbGVDb250ZW50IGNoaWxkIGlzIGNob3Nlbi4KLSAgICAgIE1heSBiZSBvdmVycmlkZW4gYnkgc2V0dGluZyBvbiBjb21wbGV4Q29udGVudCBjaGlsZC48L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDwveHM6YXR0cmlidXRlPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYWJzdHJhY3QiIHR5cGU9InhzOmJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9ImZhbHNlIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmaW5hbCIgdHlwZT0ieHM6ZGVyaXZhdGlvblNldCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYmxvY2siIHR5cGU9InhzOmRlcml2YXRpb25TZXQiLz4KLSAgIDwveHM6ZXh0ZW5zaW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0gCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRvcExldmVsQ29tcGxleFR5cGUiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Y29tcGxleFR5cGUiPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgPHhzOmdyb3VwIHJlZj0ieHM6Y29tcGxleFR5cGVNb2RlbCIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpOQ05hbWUiIHVzZT0icmVxdWlyZWQiLz4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLSAKLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0ibG9jYWxDb21wbGV4VHlwZSI+Ci0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpjb21wbGV4VHlwZSI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICA8eHM6Z3JvdXAgcmVmPSJ4czpjb21wbGV4VHlwZU1vZGVsIi8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYWJzdHJhY3QiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZmluYWwiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYmxvY2siIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLSA8L3hzOmNvbXBsZXhUeXBlPgotIAotIDx4czpjb21wbGV4VHlwZSBuYW1lPSJyZXN0cmljdGlvblR5cGUiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmFubm90YXRlZCI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+Ci0gICAgICA8eHM6Z3JvdXAgcmVmPSJ4czp0eXBlRGVmUGFydGljbGUiLz4KLSAgICAgIDx4czpncm91cCByZWY9InhzOnNpbXBsZVJlc3RyaWN0aW9uTW9kZWwiLz4KLSAgICAgPC94czpjaG9pY2U+Ci0gICAgIDx4czpncm91cCByZWY9InhzOmF0dHJEZWNscyIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJiYXNlIiB0eXBlPSJ4czpRTmFtZSIgdXNlPSJyZXF1aXJlZCIvPgotICAgPC94czpleHRlbnNpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+ICAgICAgIAotIDwveHM6Y29tcGxleFR5cGU+Ci0KLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0iY29tcGxleFJlc3RyaWN0aW9uVHlwZSI+Ci0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpyZXN0cmljdGlvblR5cGUiPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgotICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgPHhzOmRvY3VtZW50YXRpb24+VGhpcyBjaG9pY2UgaXMgYWRkZWQgc2ltcGx5IHRvCi0gICAgICAgICAgICAgICAgICAgbWFrZSB0aGlzIGEgdmFsaWQgcmVzdHJpY3Rpb24gcGVyIHRoZSBSRUM8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICA8eHM6Z3JvdXAgcmVmPSJ4czp0eXBlRGVmUGFydGljbGUiLz4KLSAgICAgPC94czpjaG9pY2U+Ci0gICAgIDx4czpncm91cCByZWY9InhzOmF0dHJEZWNscyIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PiAgICAgICAKLSA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImV4dGVuc2lvblR5cGUiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmFubm90YXRlZCI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6Z3JvdXAgcmVmPSJ4czp0eXBlRGVmUGFydGljbGUiIG1pbk9jY3Vycz0iMCIvPgotICAgICA8eHM6Z3JvdXAgcmVmPSJ4czphdHRyRGVjbHMiLz4KLSAgICA8L3hzOnNlcXVlbmNlPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYmFzZSIgdHlwZT0ieHM6UU5hbWUiIHVzZT0icmVxdWlyZWQiLz4KLSAgIDwveHM6ZXh0ZW5zaW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PiAgICAgICAKLSA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmVsZW1lbnQgbmFtZT0iY29tcGxleENvbnRlbnQiIGlkPSJjb21wbGV4Q29udGVudCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1jb21wbGV4Q29udGVudCIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmFubm90YXRlZCI+Ci0gICAgIDx4czpjaG9pY2U+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJyZXN0cmljdGlvbiIgdHlwZT0ieHM6Y29tcGxleFJlc3RyaWN0aW9uVHlwZSIvPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIiB0eXBlPSJ4czpleHRlbnNpb25UeXBlIi8+Ci0gICAgIDwveHM6Y2hvaWNlPiAgICAgCi0gICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWl4ZWQiIHR5cGU9InhzOmJvb2xlYW4iPgotICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgT3ZlcnJpZGVzIGFueSBzZXR0aW5nIG9uIGNvbXBsZXhUeXBlIHBhcmVudC48L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPC94czphdHRyaWJ1dGU+Ci0gICAgPC94czpleHRlbnNpb24+Ci0gICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotIDwveHM6ZWxlbWVudD4KLQotIDx4czpjb21wbGV4VHlwZSBuYW1lPSJzaW1wbGVSZXN0cmljdGlvblR5cGUiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6cmVzdHJpY3Rpb25UeXBlIj4KLSAgICA8eHM6c2VxdWVuY2U+Ci0gICAgIDx4czplbGVtZW50IHJlZj0ieHM6YW5ub3RhdGlvbiIgbWluT2NjdXJzPSIwIi8+Ci0gICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIj4KLSAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgIDx4czpkb2N1bWVudGF0aW9uPlRoaXMgY2hvaWNlIGlzIGFkZGVkIHNpbXBseSB0bwotICAgICAgICAgICAgICAgICAgIG1ha2UgdGhpcyBhIHZhbGlkIHJlc3RyaWN0aW9uIHBlciB0aGUgUkVDPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgPHhzOmdyb3VwIHJlZj0ieHM6c2ltcGxlUmVzdHJpY3Rpb25Nb2RlbCIvPgotICAgICA8L3hzOmNob2ljZT4KLSAgICAgPHhzOmdyb3VwIHJlZj0ieHM6YXR0ckRlY2xzIi8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLQotIDx4czpjb21wbGV4VHlwZSBuYW1lPSJzaW1wbGVFeHRlbnNpb25UeXBlIj4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmV4dGVuc2lvblR5cGUiPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIE5vIHR5cGVEZWZQYXJ0aWNsZSBncm91cCByZWZlcmVuY2U8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgPHhzOmdyb3VwIHJlZj0ieHM6YXR0ckRlY2xzIi8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLQotIDx4czplbGVtZW50IG5hbWU9InNpbXBsZUNvbnRlbnQiIGlkPSJzaW1wbGVDb250ZW50Ij4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LXNpbXBsZUNvbnRlbnQiLz4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czphbm5vdGF0ZWQiPgotICAgICA8eHM6Y2hvaWNlPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icmVzdHJpY3Rpb24iIHR5cGU9InhzOnNpbXBsZVJlc3RyaWN0aW9uVHlwZSIvPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIiB0eXBlPSJ4czpzaW1wbGVFeHRlbnNpb25UeXBlIi8+Ci0gICAgIDwveHM6Y2hvaWNlPgotICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLSA8L3hzOmVsZW1lbnQ+Ci0gCi0gPHhzOmVsZW1lbnQgbmFtZT0iY29tcGxleFR5cGUiIHR5cGU9InhzOnRvcExldmVsQ29tcGxleFR5cGUiIGlkPSJjb21wbGV4VHlwZSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1jb21wbGV4VHlwZSIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czplbGVtZW50PgotCi0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iYmxvY2tTZXQiPgotICAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgQSB1dGlsaXR5IHR5cGUsIG5vdCBmb3IgcHVibGljIHVzZTwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAjYWxsIG9yIChwb3NzaWJseSBlbXB0eSkgc3Vic2V0IG9mIHtzdWJzdGl0dXRpb24sIGV4dGVuc2lvbiwKLSAgICByZXN0cmljdGlvbn08L3hzOmRvY3VtZW50YXRpb24+Ci0gICA8L3hzOmFubm90YXRpb24+Ci0gICA8eHM6dW5pb24+Ci0gICAgPHhzOnNpbXBsZVR5cGU+ICAgIAotICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIjYWxsIi8+Ci0gICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpzaW1wbGVUeXBlPgotICAgIDx4czpzaW1wbGVUeXBlPgotICAgICA8eHM6bGlzdD4KLSAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpkZXJpdmF0aW9uQ29udHJvbCI+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZXh0ZW5zaW9uIi8+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVzdHJpY3Rpb24iLz4KLSAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzdWJzdGl0dXRpb24iLz4KLSAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICA8L3hzOmxpc3Q+Ci0gICAgPC94czpzaW1wbGVUeXBlPgotICAgPC94czp1bmlvbj4gIAotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZWxlbWVudCIgYWJzdHJhY3Q9InRydWUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgVGhlIGVsZW1lbnQgZWxlbWVudCBjYW4gYmUgdXNlZCBlaXRoZXIKLSAgIGF0IHRoZSB0b3AgbGV2ZWwgdG8gZGVmaW5lIGFuIGVsZW1lbnQtdHlwZSBiaW5kaW5nIGdsb2JhbGx5LAotICAgb3Igd2l0aGluIGEgY29udGVudCBtb2RlbCB0byBlaXRoZXIgcmVmZXJlbmNlIGEgZ2xvYmFsbHktZGVmaW5lZAotICAgZWxlbWVudCBvciB0eXBlIG9yIGRlY2xhcmUgYW4gZWxlbWVudC10eXBlIGJpbmRpbmcgbG9jYWxseS4KLSAgIFRoZSByZWYgZm9ybSBpcyBub3QgYWxsb3dlZCBhdCB0aGUgdG9wIGxldmVsLjwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotCi0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6YW5ub3RhdGVkIj4KLSAgICA8eHM6c2VxdWVuY2U+Ci0gICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIj4KLSAgICAgIDx4czplbGVtZW50IG5hbWU9InNpbXBsZVR5cGUiIHR5cGU9InhzOmxvY2FsU2ltcGxlVHlwZSIvPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iY29tcGxleFR5cGUiIHR5cGU9InhzOmxvY2FsQ29tcGxleFR5cGUiLz4KLSAgICAgPC94czpjaG9pY2U+Ci0gICAgIDx4czpncm91cCByZWY9InhzOmlkZW50aXR5Q29uc3RyYWludCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ieHM6ZGVmUmVmIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB0eXBlPSJ4czpRTmFtZSIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3Vic3RpdHV0aW9uR3JvdXAiIHR5cGU9InhzOlFOYW1lIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ieHM6b2NjdXJzIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkZWZhdWx0IiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZpeGVkIiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5pbGxhYmxlIiB0eXBlPSJ4czpib29sZWFuIiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJmYWxzZSIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYWJzdHJhY3QiIHR5cGU9InhzOmJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9ImZhbHNlIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmaW5hbCIgdHlwZT0ieHM6ZGVyaXZhdGlvblNldCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYmxvY2siIHR5cGU9InhzOmJsb2NrU2V0Ii8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmb3JtIiB0eXBlPSJ4czpmb3JtQ2hvaWNlIi8+Ci0gICA8L3hzOmV4dGVuc2lvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLSA8L3hzOmNvbXBsZXhUeXBlPgotIAotIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0b3BMZXZlbEVsZW1lbnQiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6ZWxlbWVudCI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJzaW1wbGVUeXBlIiB0eXBlPSJ4czpsb2NhbFNpbXBsZVR5cGUiLz4KLSAgICAgIDx4czplbGVtZW50IG5hbWU9ImNvbXBsZXhUeXBlIiB0eXBlPSJ4czpsb2NhbENvbXBsZXhUeXBlIi8+Ci0gICAgIDwveHM6Y2hvaWNlPgotICAgICA8eHM6Z3JvdXAgcmVmPSJ4czppZGVudGl0eUNvbnN0cmFpbnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzOnNlcXVlbmNlPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVmIiB1c2U9InByb2hpYml0ZWQiLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZvcm0iIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWluT2NjdXJzIiB1c2U9InByb2hpYml0ZWQiLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1heE9jY3VycyIgdXNlPSJwcm9oaWJpdGVkIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4czpOQ05hbWUiLz4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLSAKLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0ibG9jYWxFbGVtZW50Ij4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmVsZW1lbnQiPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ic2ltcGxlVHlwZSIgdHlwZT0ieHM6bG9jYWxTaW1wbGVUeXBlIi8+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJjb21wbGV4VHlwZSIgdHlwZT0ieHM6bG9jYWxDb21wbGV4VHlwZSIvPgotICAgICA8L3hzOmNob2ljZT4KLSAgICAgPHhzOmdyb3VwIHJlZj0ieHM6aWRlbnRpdHlDb25zdHJhaW50IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN1YnN0aXR1dGlvbkdyb3VwIiB1c2U9InByb2hpYml0ZWQiLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZpbmFsIiB1c2U9InByb2hpYml0ZWQiLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFic3RyYWN0IiB1c2U9InByb2hpYml0ZWQiLz4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLQotIDx4czplbGVtZW50IG5hbWU9ImVsZW1lbnQiIHR5cGU9InhzOnRvcExldmVsRWxlbWVudCIgaWQ9ImVsZW1lbnQiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2VsZW1lbnQtZWxlbWVudCIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9Imdyb3VwIiBhYnN0cmFjdD0idHJ1ZSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBncm91cCB0eXBlIGZvciBleHBsaWNpdCBncm91cHMsIG5hbWVkIHRvcC1sZXZlbCBncm91cHMgYW5kCi0gICBncm91cCByZWZlcmVuY2VzPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6YW5ub3RhdGVkIj4KLSAgICA8eHM6Z3JvdXAgcmVmPSJ4czpwYXJ0aWNsZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InhzOmRlZlJlZiIvPgotICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InhzOm9jY3VycyIvPgotICAgPC94czpleHRlbnNpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLSAKLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0icmVhbEdyb3VwIj4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmdyb3VwIj4KLSAgICA8eHM6c2VxdWVuY2U+Ci0gICAgIDx4czplbGVtZW50IHJlZj0ieHM6YW5ub3RhdGlvbiIgbWluT2NjdXJzPSIwIi8+Ci0gICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbGwiLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0ieHM6Y2hvaWNlIi8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9InhzOnNlcXVlbmNlIi8+Ci0gICAgIDwveHM6Y2hvaWNlPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0KLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0ibmFtZWRHcm91cCI+Ci0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpyZWFsR3JvdXAiPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0iMSI+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJhbGwiPgotICAgICAgIDx4czpjb21wbGV4VHlwZT4KLSAgICAgICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFsbCI+Ci0gICAgICAgICAgPHhzOmdyb3VwIHJlZj0ieHM6YWxsTW9kZWwiLz4KLSAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1pbk9jY3VycyIgdXNlPSJwcm9oaWJpdGVkIi8+Ci0gICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtYXhPY2N1cnMiIHVzZT0icHJvaGliaXRlZCIvPgotICAgICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICAgICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgICAgICA8L3hzOmNvbXBsZXhUeXBlPgotICAgICAgPC94czplbGVtZW50PgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iY2hvaWNlIiB0eXBlPSJ4czpzaW1wbGVFeHBsaWNpdEdyb3VwIi8+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJzZXF1ZW5jZSIgdHlwZT0ieHM6c2ltcGxlRXhwbGljaXRHcm91cCIvPgotICAgICA8L3hzOmNob2ljZT4KLSAgICA8L3hzOnNlcXVlbmNlPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6TkNOYW1lIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZWYiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWluT2NjdXJzIiB1c2U9InByb2hpYml0ZWQiLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1heE9jY3VycyIgdXNlPSJwcm9oaWJpdGVkIi8+Ci0gICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0KLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZ3JvdXBSZWYiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6cmVhbEdyb3VwIj4KLSAgICA8eHM6c2VxdWVuY2U+Ci0gICAgIDx4czplbGVtZW50IHJlZj0ieHM6YW5ub3RhdGlvbiIgbWluT2NjdXJzPSIwIi8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlZiIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6UU5hbWUiLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLSA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImV4cGxpY2l0R3JvdXAiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgZ3JvdXAgdHlwZSBmb3IgdGhlIHRocmVlIGtpbmRzIG9mIGdyb3VwPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpncm91cCI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICA8eHM6Z3JvdXAgcmVmPSJ4czpuZXN0ZWRQYXJ0aWNsZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpOQ05hbWUiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVmIiB0eXBlPSJ4czpRTmFtZSIgdXNlPSJwcm9oaWJpdGVkIi8+Ci0gICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0gCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9InNpbXBsZUV4cGxpY2l0R3JvdXAiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6ZXhwbGljaXRHcm91cCI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICA8eHM6Z3JvdXAgcmVmPSJ4czpuZXN0ZWRQYXJ0aWNsZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtaW5PY2N1cnMiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWF4T2NjdXJzIiB1c2U9InByb2hpYml0ZWQiLz4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLSAKLSA8eHM6Z3JvdXAgbmFtZT0iYWxsTW9kZWwiPgotICA8eHM6c2VxdWVuY2U+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzOmRvY3VtZW50YXRpb24+VGhpcyBjaG9pY2Ugd2l0aCBtaW4vbWF4IGlzIGhlcmUgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgYXZvaWQgYSBwYmxtIHdpdGggdGhlIEVsdDpBbGwvQ2hvaWNlL1NlcQotICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJ0aWNsZSBkZXJpdmF0aW9uIGNvbnN0cmFpbnQ8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgIDx4czplbGVtZW50IG5hbWU9ImVsZW1lbnQiIHR5cGU9InhzOmVsZW1lbnRJbkFsbCIvPgotICAgICAgPC94czpjaG9pY2U+Ci0gICAgIDwveHM6c2VxdWVuY2U+Ci0gPC94czpncm91cD4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZWxlbWVudEluQWxsIj4KLSAgIDx4czphbm5vdGF0aW9uPgotICAgIDx4czpkb2N1bWVudGF0aW9uPnJlc3RyaWN0ZWQgbWF4L21pbjwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgIDwveHM6YW5ub3RhdGlvbj4KLSAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6bG9jYWxFbGVtZW50Ij4KLSAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIj4KLSAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJzaW1wbGVUeXBlIiB0eXBlPSJ4czpsb2NhbFNpbXBsZVR5cGUiLz4KLSAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJjb21wbGV4VHlwZSIgdHlwZT0ieHM6bG9jYWxDb21wbGV4VHlwZSIvPgotICAgICAgPC94czpjaG9pY2U+Ci0gICAgICA8eHM6Z3JvdXAgcmVmPSJ4czppZGVudGl0eUNvbnN0cmFpbnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtaW5PY2N1cnMiIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9IjEiPgotICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOm5vbk5lZ2F0aXZlSW50ZWdlciI+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iMCIvPgotICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IjEiLz4KLSAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtYXhPY2N1cnMiIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9IjEiPgotICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFsbE5OSSI+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iMCIvPgotICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IjEiLz4KLSAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+ICAgIAotCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJhbGwiPgotICAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBPbmx5IGVsZW1lbnRzIGFsbG93ZWQgaW5zaWRlPC94czpkb2N1bWVudGF0aW9uPgotICAgPC94czphbm5vdGF0aW9uPgotICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpleHBsaWNpdEdyb3VwIj4KLSAgICAgPHhzOmdyb3VwIHJlZj0ieHM6YWxsTW9kZWwiLz4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtaW5PY2N1cnMiIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9IjEiPgotICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOm5vbk5lZ2F0aXZlSW50ZWdlciI+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iMCIvPgotICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IjEiLz4KLSAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtYXhPY2N1cnMiIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9IjEiPgotICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFsbE5OSSI+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iMSIvPgotICAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgIDwveHM6YXR0cmlidXRlPgotICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotIDx4czplbGVtZW50IG5hbWU9ImFsbCIgaWQ9ImFsbCIgdHlwZT0ieHM6YWxsIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LWFsbCIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmVsZW1lbnQgbmFtZT0iY2hvaWNlIiB0eXBlPSJ4czpleHBsaWNpdEdyb3VwIiBpZD0iY2hvaWNlIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LWNob2ljZSIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmVsZW1lbnQgbmFtZT0ic2VxdWVuY2UiIHR5cGU9InhzOmV4cGxpY2l0R3JvdXAiIGlkPSJzZXF1ZW5jZSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1zZXF1ZW5jZSIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmVsZW1lbnQgbmFtZT0iZ3JvdXAiIHR5cGU9InhzOm5hbWVkR3JvdXAiIGlkPSJncm91cCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1ncm91cCIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9IndpbGRjYXJkIj4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czphbm5vdGF0ZWQiPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZXNwYWNlIiB0eXBlPSJ4czpuYW1lc3BhY2VMaXN0IiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSIjI2FueSIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icHJvY2Vzc0NvbnRlbnRzIiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJzdHJpY3QiPgotICAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLSAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNraXAiLz4KLSAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxheCIvPgotICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic3RyaWN0Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgPC94czphdHRyaWJ1dGU+Ci0gICA8L3hzOmV4dGVuc2lvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLSA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmVsZW1lbnQgbmFtZT0iYW55IiBpZD0iYW55Ij4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LWFueSIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOndpbGRjYXJkIj4KLSAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ieHM6b2NjdXJzIi8+Ci0gICAgPC94czpleHRlbnNpb24+Ci0gICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotIDwveHM6ZWxlbWVudD4KLQotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgc2ltcGxlIHR5cGUgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgJ25hbWVzcGFjZScgYXR0ciBvZgotICAgJ2FueScgYW5kICdhbnlBdHRyaWJ1dGUnPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBWYWx1ZSBpcwotICAgICAgICAgICAgICAjI2FueSAgICAgIC0gLSBhbnkgbm9uLWNvbmZsaWN0aW5nIFdGWE1ML2F0dHJpYnV0ZSBhdCBhbGwKLQotICAgICAgICAgICAgICAjI290aGVyICAgIC0gLSBhbnkgbm9uLWNvbmZsaWN0aW5nIFdGWE1ML2F0dHJpYnV0ZSBmcm9tCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2Ugb3RoZXIgdGhhbiB0YXJnZXROUwotCi0gICAgICAgICAgICAgICMjbG9jYWwgICAgLSAtIGFueSB1bnF1YWxpZmllZCBub24tY29uZmxpY3RpbmcgV0ZYTUwvYXR0cmlidXRlIAotCi0gICAgICAgICAgICAgIG9uZSBvciAgICAgLSAtIGFueSBub24tY29uZmxpY3RpbmcgV0ZYTUwvYXR0cmlidXRlIGZyb20KLSAgICAgICAgICAgICAgbW9yZSBVUkkgICAgICAgIHRoZSBsaXN0ZWQgbmFtZXNwYWNlcwotICAgICAgICAgICAgICByZWZlcmVuY2VzCi0gICAgICAgICAgICAgIChzcGFjZSBzZXBhcmF0ZWQpCi0KLSAgICAjI3RhcmdldE5hbWVzcGFjZSBvciAjI2xvY2FsIG1heSBhcHBlYXIgaW4gdGhlIGFib3ZlIGxpc3QsIHRvCi0gICAgICAgIHJlZmVyIHRvIHRoZSB0YXJnZXROYW1lc3BhY2Ugb2YgdGhlIGVuY2xvc2luZwotICAgICAgICBzY2hlbWEgb3IgYW4gYWJzZW50IHRhcmdldE5hbWVzcGFjZSByZXNwZWN0aXZlbHk8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLQotIDx4czpzaW1wbGVUeXBlIG5hbWU9Im5hbWVzcGFjZUxpc3QiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgQSB1dGlsaXR5IHR5cGUsIG5vdCBmb3IgcHVibGljIHVzZTwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6dW5pb24+Ci0gICA8eHM6c2ltcGxlVHlwZT4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IiMjYW55Ii8+Ci0gICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iIyNvdGhlciIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICA8L3hzOnNpbXBsZVR5cGU+Ci0gICA8eHM6c2ltcGxlVHlwZT4KLSAgICA8eHM6bGlzdD4KLSAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICA8eHM6dW5pb24gbWVtYmVyVHlwZXM9InhzOmFueVVSSSI+Ci0gICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IiMjdGFyZ2V0TmFtZXNwYWNlIi8+Ci0gICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IiMjbG9jYWwiLz4KLSAgICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzOnVuaW9uPgotICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgPC94czpsaXN0PgotICAgPC94czpzaW1wbGVUeXBlPgotICA8L3hzOnVuaW9uPgotIDwveHM6c2ltcGxlVHlwZT4KLQotIDx4czplbGVtZW50IG5hbWU9ImF0dHJpYnV0ZSIgdHlwZT0ieHM6dG9wTGV2ZWxBdHRyaWJ1dGUiIGlkPSJhdHRyaWJ1dGUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2VsZW1lbnQtYXR0cmlidXRlIi8+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0iYXR0cmlidXRlR3JvdXAiIGFic3RyYWN0PSJ0cnVlIj4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czphbm5vdGF0ZWQiPgotICAgIDx4czpncm91cCByZWY9InhzOmF0dHJEZWNscyIvPgotICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InhzOmRlZlJlZiIvPgotICAgPC94czpleHRlbnNpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLSAKLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0ibmFtZWRBdHRyaWJ1dGVHcm91cCI+Ci0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphdHRyaWJ1dGVHcm91cCI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICA8eHM6Z3JvdXAgcmVmPSJ4czphdHRyRGVjbHMiLz4KLSAgICA8L3hzOnNlcXVlbmNlPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6TkNOYW1lIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZWYiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLSA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImF0dHJpYnV0ZUdyb3VwUmVmIj4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmF0dHJpYnV0ZUdyb3VwIj4KLSAgICA8eHM6c2VxdWVuY2U+Ci0gICAgIDx4czplbGVtZW50IHJlZj0ieHM6YW5ub3RhdGlvbiIgbWluT2NjdXJzPSIwIi8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlZiIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6UU5hbWUiLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLSA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmVsZW1lbnQgbmFtZT0iYXR0cmlidXRlR3JvdXAiIHR5cGU9InhzOm5hbWVkQXR0cmlidXRlR3JvdXAiIGlkPSJhdHRyaWJ1dGVHcm91cCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1hdHRyaWJ1dGVHcm91cCIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmVsZW1lbnQgbmFtZT0iaW5jbHVkZSIgaWQ9ImluY2x1ZGUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2VsZW1lbnQtaW5jbHVkZSIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmFubm90YXRlZCI+Ci0gICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2NoZW1hTG9jYXRpb24iIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgotICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJyZWRlZmluZSIgaWQ9InJlZGVmaW5lIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LXJlZGVmaW5lIi8+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6b3BlbkF0dHJzIj4KLSAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgIDx4czplbGVtZW50IHJlZj0ieHM6YW5ub3RhdGlvbiIvPgotICAgICAgPHhzOmdyb3VwIHJlZj0ieHM6cmVkZWZpbmFibGUiLz4KLSAgICAgPC94czpjaG9pY2U+Ci0gICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2NoZW1hTG9jYXRpb24iIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpJRCIvPgotICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJpbXBvcnQiIGlkPSJpbXBvcnQiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2VsZW1lbnQtaW1wb3J0Ii8+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6YW5ub3RhdGVkIj4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lc3BhY2UiIHR5cGU9InhzOmFueVVSSSIvPgotICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNjaGVtYUxvY2F0aW9uIiB0eXBlPSJ4czphbnlVUkkiLz4KLSAgICA8L3hzOmV4dGVuc2lvbj4KLSAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmVsZW1lbnQgbmFtZT0ic2VsZWN0b3IiIGlkPSJzZWxlY3RvciI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1zZWxlY3RvciIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czphbm5vdGF0ZWQiPgotICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InhwYXRoIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbj5BIHN1YnNldCBvZiBYUGF0aCBleHByZXNzaW9ucyBmb3IgdXNlCi1pbiBzZWxlY3RvcnM8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDx4czpkb2N1bWVudGF0aW9uPkEgdXRpbGl0eSB0eXBlLCBub3QgZm9yIHB1YmxpYwotdXNlPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uPlRoZSBmb2xsb3dpbmcgcGF0dGVybiBpcyBpbnRlbmRlZCB0byBhbGxvdyBYUGF0aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMgcGVyIHRoZSBmb2xsb3dpbmcgRUJORjoKLSAgICAgICAgICBTZWxlY3RvciAgICA6Oj0gICAgUGF0aCAoICd8JyBQYXRoICkqICAKLSAgICAgICAgICBQYXRoICAgIDo6PSAgICAoJy4vLycpPyBTdGVwICggJy8nIFN0ZXAgKSogIAotICAgICAgICAgIFN0ZXAgICAgOjo9ICAgICcuJyB8IE5hbWVUZXN0ICAKLSAgICAgICAgICBOYW1lVGVzdCAgICA6Oj0gICAgUU5hbWUgfCAnKicgfCBOQ05hbWUgJzonICcqJyAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZDo6IGlzIGFsc28gYWxsb3dlZAotICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwhLS0gVFNIIG1vZGlmaWVkIHRvIGFsbG93IHdoaXRlIHNwYWNlIC0tPgotICAgICAgICA8eHM6cGF0dGVybgotICAgICAgICAgICAgdmFsdWU9IihcLlxzKi8vXHMqKT8oKChjaGlsZFxzKjo6XHMqKT8oKFxpXGMqOik/KFxpXGMqfFwqKSkpfFwuKShccyovXHMqKCgoY2hpbGRccyo6OlxzKik/KChcaVxjKjopPyhcaVxjKnxcKikpKXxcLikpKihccypcfFxzKihcLlxzKi8vXHMqKT8oKChjaGlsZFxzKjo6XHMqKT8oKFxpXGMqOik/KFxpXGMqfFwqKSkpfFwuKShccyovXHMqKCgoY2hpbGRccyo6OlxzKik/KChcaVxjKjopPyhcaVxjKnxcKikpKXxcLikpKikqIj4KLSAgICAgICAgPC94czpwYXR0ZXJuPgotICAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgIDwveHM6YXR0cmlidXRlPgotICAgPC94czpleHRlbnNpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJmaWVsZCIgaWQ9ImZpZWxkIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LWZpZWxkIi8+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmFubm90YXRlZCI+Ci0gICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ieHBhdGgiIHVzZT0icmVxdWlyZWQiPgotICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgIDx4czpkb2N1bWVudGF0aW9uPkEgc3Vic2V0IG9mIFhQYXRoIGV4cHJlc3Npb25zIGZvciB1c2UKLWluIGZpZWxkczwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPHhzOmRvY3VtZW50YXRpb24+QSB1dGlsaXR5IHR5cGUsIG5vdCBmb3IgcHVibGljCi11c2U8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24+VGhlIGZvbGxvd2luZyBwYXR0ZXJuIGlzIGludGVuZGVkIHRvIGFsbG93IFhQYXRoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9ucyBwZXIgdGhlIHNhbWUgRUJORiBhcyBmb3Igc2VsZWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBmb2xsb3dpbmcgY2hhbmdlOgotICAgICAgICAgIFBhdGggICAgOjo9ICAgICgnLi8vJyk/ICggU3RlcCAnLycgKSogKCBTdGVwIHwgJ0AnIE5hbWVUZXN0ICkgCi0gICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPCEtLSBUU0ggbW9kaWZpZWQgdG8gYWxsb3cgd2hpdGUgc3BhY2UgLS0+Ci0gICAgICAgIDx4czpwYXR0ZXJuIHZhbHVlPSIoXC5ccyovL1xzKik/KCgoKGNoaWxkXHMqOjpccyopPygoXGlcYyo6KT8oXGlcYyp8XCopKSl8XC4pXHMqL1xzKikqKCgoKGNoaWxkXHMqOjpccyopPygoXGlcYyo6KT8oXGlcYyp8XCopKSl8XC4pfCgoYXR0cmlidXRlXHMqOjpccyp8QFxzKikoKFxpXGMqOik/KFxpXGMqfFwqKSkpKShccypcfFxzKihccypcLi8vXHMqKT8oKCgoY2hpbGRccyo6OlxzKik/KChcaVxjKjopPyhcaVxjKnxcKikpKXxcLikvKSooKCgoY2hpbGRccyo6OlxzKik/KChcaVxjKjopPyhcaVxjKnxcKikpKXxcLil8KChhdHRyaWJ1dGVccyo6OlxzKnxAXHMqKSgoXGlcYyo6KT8oXGlcYyp8XCopKSkpKSoiPgotICAgICAgICA8L3hzOnBhdHRlcm4+Ci0gICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICAgPC94czphdHRyaWJ1dGU+Ci0gICA8L3hzOmV4dGVuc2lvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLSA8L3hzOmNvbXBsZXhUeXBlPgotIDwveHM6ZWxlbWVudD4KLQotIDx4czpjb21wbGV4VHlwZSBuYW1lPSJrZXliYXNlIj4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czphbm5vdGF0ZWQiPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czpzZWxlY3RvciIvPgotICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmZpZWxkIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzOk5DTmFtZSIgdXNlPSJyZXF1aXJlZCIvPgotICAgPC94czpleHRlbnNpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLQotIDx4czpncm91cCBuYW1lPSJpZGVudGl0eUNvbnN0cmFpbnQiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPlRoZSB0aHJlZSBraW5kcyBvZiBpZGVudGl0eSBjb25zdHJhaW50cywgYWxsIHdpdGgKLSAgICAgICAgICAgICAgICAgICAgIHR5cGUgb2Ygb3IgZGVyaXZlZCBmcm9tICdrZXliYXNlJy4KLSAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6Y2hvaWNlPgotICAgPHhzOmVsZW1lbnQgcmVmPSJ4czp1bmlxdWUiLz4KLSAgIDx4czplbGVtZW50IHJlZj0ieHM6a2V5Ii8+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOmtleXJlZiIvPgotICA8L3hzOmNob2ljZT4KLSA8L3hzOmdyb3VwPgotCi0gPHhzOmVsZW1lbnQgbmFtZT0idW5pcXVlIiB0eXBlPSJ4czprZXliYXNlIiBpZD0idW5pcXVlIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LXVuaXF1ZSIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czplbGVtZW50PgotIDx4czplbGVtZW50IG5hbWU9ImtleSIgdHlwZT0ieHM6a2V5YmFzZSIgaWQ9ImtleSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1rZXkiLz4KLSAgPC94czphbm5vdGF0aW9uPgotIDwveHM6ZWxlbWVudD4KLSA8eHM6ZWxlbWVudCBuYW1lPSJrZXlyZWYiIGlkPSJrZXlyZWYiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2VsZW1lbnQta2V5cmVmIi8+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6a2V5YmFzZSI+Ci0gICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVmZXIiIHR5cGU9InhzOlFOYW1lIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgPC94czpleHRlbnNpb24+Ci0gICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotIDwveHM6ZWxlbWVudD4KLQotIDx4czplbGVtZW50IG5hbWU9Im5vdGF0aW9uIiBpZD0ibm90YXRpb24iPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2VsZW1lbnQtbm90YXRpb24iLz4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czphbm5vdGF0ZWQiPgotICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzOk5DTmFtZSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InB1YmxpYyIgdHlwZT0ieHM6cHVibGljIi8+Ci0gICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3lzdGVtIiB0eXBlPSJ4czphbnlVUkkiLz4KLSAgICA8L3hzOmV4dGVuc2lvbj4KLSAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOnNpbXBsZVR5cGUgbmFtZT0icHVibGljIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgIEEgdXRpbGl0eSB0eXBlLCBub3QgZm9yIHB1YmxpYyB1c2U8L3hzOmRvY3VtZW50YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgIEEgcHVibGljIGlkZW50aWZpZXIsIHBlciBJU08gODg3OTwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iLz4KLSA8L3hzOnNpbXBsZVR5cGU+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJhcHBpbmZvIiBpZD0iYXBwaW5mbyI+Ci0gICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1hcHBpbmZvIi8+Ci0gICA8L3hzOmFubm90YXRpb24+Ci0gICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgotICAgIDx4czpzZXF1ZW5jZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgPHhzOmFueSBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzb3VyY2UiIHR5cGU9InhzOmFueVVSSSIvPgotICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgPC94czpjb21wbGV4VHlwZT4KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJkb2N1bWVudGF0aW9uIiBpZD0iZG9jdW1lbnRhdGlvbiI+Ci0gICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1kb2N1bWVudGF0aW9uIi8+Ci0gICA8L3hzOmFubm90YXRpb24+Ci0gICA8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgotICAgIDx4czpzZXF1ZW5jZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgPHhzOmFueSBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzb3VyY2UiIHR5cGU9InhzOmFueVVSSSIvPgotICAgIDx4czphdHRyaWJ1dGUgcmVmPSJ4bWw6bGFuZyIvPgotICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgPC94czpjb21wbGV4VHlwZT4KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJhbm5vdGF0aW9uIiBpZD0iYW5ub3RhdGlvbiI+Ci0gICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1hbm5vdGF0aW9uIi8+Ci0gICA8L3hzOmFubm90YXRpb24+Ci0gICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOm9wZW5BdHRycyI+Ci0gICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgIDx4czplbGVtZW50IHJlZj0ieHM6YXBwaW5mbyIvPgotICAgICAgIDx4czplbGVtZW50IHJlZj0ieHM6ZG9jdW1lbnRhdGlvbiIvPgotICAgICAgPC94czpjaG9pY2U+Ci0gICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpJRCIvPgotICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICAgPC94czpjb21wbGV4VHlwZT4KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6YW5ub3RhdGlvbj4KLSAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBub3RhdGlvbnMgZm9yIHVzZSB3aXRoaW4gWE1MIFNjaGVtYSBzY2hlbWFzPC94czpkb2N1bWVudGF0aW9uPgotIDwveHM6YW5ub3RhdGlvbj4KLQotIDx4czpub3RhdGlvbiBuYW1lPSJYTUxTY2hlbWFTdHJ1Y3R1cmVzIiBwdWJsaWM9InN0cnVjdHVyZXMiIHN5c3RlbT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOC9YTUxTY2hlbWEueHNkIi8+Ci0gPHhzOm5vdGF0aW9uIG5hbWU9IlhNTCIgcHVibGljPSJSRUMteG1sLTE5OTgwMjEwIiBzeXN0ZW09Imh0dHA6Ly93d3cudzMub3JnL1RSLzE5OTgvUkVDLXhtbC0xOTk4MDIxMCIvPgotICAKLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0iYW55VHlwZSIgbWl4ZWQ9InRydWUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgTm90IHRoZSByZWFsIHVyVHlwZSwgYnV0IGFzIGNsb3NlIGFuIGFwcHJveGltYXRpb24gYXMgd2UgY2FuCi0gICBnZXQgaW4gdGhlIFhNTCByZXByZXNlbnRhdGlvbjwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6c2VxdWVuY2U+Ci0gICA8eHM6YW55IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gIDwveHM6c2VxdWVuY2U+Ci0gIDx4czphbnlBdHRyaWJ1dGUgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSA8L3hzOmNvbXBsZXhUeXBlPgotCi0gIDx4czphbm5vdGF0aW9uPgotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgRmlyc3QgdGhlIGJ1aWx0LWluIHByaW1pdGl2ZSBkYXRhdHlwZXMuICBUaGVzZSBkZWZpbml0aW9ucyBhcmUgZm9yCi0gICAgICBpbmZvcm1hdGlvbiBvbmx5LCB0aGUgcmVhbCBidWlsdC1pbiBkZWZpbml0aW9ucyBhcmUgbWFnaWMuCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotCi0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBGb3IgZWFjaCBidWlsdC1pbiBkYXRhdHlwZSBpbiB0aGlzIHNjaGVtYSAoYm90aCBwcmltaXRpdmUgYW5kCi0gICAgICBkZXJpdmVkKSBjYW4gYmUgdW5pcXVlbHkgYWRkcmVzc2VkIHZpYSBhIFVSSSBjb25zdHJ1Y3RlZAotICAgICAgYXMgZm9sbG93czoKLSAgICAgICAgMSkgdGhlIGJhc2UgVVJJIGlzIHRoZSBVUkkgb2YgdGhlIFhNTCBTY2hlbWEgbmFtZXNwYWNlCi0gICAgICAgIDIpIHRoZSBmcmFnbWVudCBpZGVudGlmaWVyIGlzIHRoZSBuYW1lIG9mIHRoZSBkYXRhdHlwZQotCi0gICAgICBGb3IgZXhhbXBsZSwgdG8gYWRkcmVzcyB0aGUgaW50IGRhdGF0eXBlLCB0aGUgVVJJIGlzOgotCi0gICAgICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2ludAotCi0gICAgICBBZGRpdGlvbmFsbHksIGVhY2ggZmFjZXQgZGVmaW5pdGlvbiBlbGVtZW50IGNhbiBiZSB1bmlxdWVseQotICAgICAgYWRkcmVzc2VkIHZpYSBhIFVSSSBjb25zdHJ1Y3RlZCBhcyBmb2xsb3dzOgotICAgICAgICAxKSB0aGUgYmFzZSBVUkkgaXMgdGhlIFVSSSBvZiB0aGUgWE1MIFNjaGVtYSBuYW1lc3BhY2UKLSAgICAgICAgMikgdGhlIGZyYWdtZW50IGlkZW50aWZpZXIgaXMgdGhlIG5hbWUgb2YgdGhlIGZhY2V0Ci0KLSAgICAgIEZvciBleGFtcGxlLCB0byBhZGRyZXNzIHRoZSBtYXhJbmNsdXNpdmUgZmFjZXQsIHRoZSBVUkkgaXM6Ci0KLSAgICAgICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjbWF4SW5jbHVzaXZlCi0KLSAgICAgIEFkZGl0aW9uYWxseSwgZWFjaCBmYWNldCB1c2FnZSBpbiBhIGJ1aWx0LWluIGRhdGF0eXBlIGRlZmluaXRpb24KLSAgICAgIGNhbiBiZSB1bmlxdWVseSBhZGRyZXNzZWQgdmlhIGEgVVJJIGNvbnN0cnVjdGVkIGFzIGZvbGxvd3M6Ci0gICAgICAgIDEpIHRoZSBiYXNlIFVSSSBpcyB0aGUgVVJJIG9mIHRoZSBYTUwgU2NoZW1hIG5hbWVzcGFjZQotICAgICAgICAyKSB0aGUgZnJhZ21lbnQgaWRlbnRpZmllciBpcyB0aGUgbmFtZSBvZiB0aGUgZGF0YXR5cGUsIGZvbGxvd2VkCi0gICAgICAgICAgIGJ5IGEgcGVyaW9kICgiLiIpIGZvbGxvd2VkIGJ5IHRoZSBuYW1lIG9mIHRoZSBmYWNldAotCi0gICAgICBGb3IgZXhhbXBsZSwgdG8gYWRkcmVzcyB0aGUgdXNhZ2Ugb2YgdGhlIG1heEluY2x1c2l2ZSBmYWNldCBpbgotICAgICAgdGhlIGRlZmluaXRpb24gb2YgaW50LCB0aGUgVVJJIGlzOgotCi0gICAgICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hI2ludC5tYXhJbmNsdXNpdmUKLQotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9InN0cmluZyIgaWQ9InN0cmluZyI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJsZW5ndGgiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5MZW5ndGgiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhMZW5ndGgiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJwYXR0ZXJuIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0iZW51bWVyYXRpb24iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJ3aGl0ZVNwYWNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ib3JkZXJlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iYm91bmRlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iY2FyZGluYWxpdHkiIHZhbHVlPSJjb3VudGFibHkgaW5maW5pdGUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJudW1lcmljIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgIDwveHM6YXBwaW5mbz4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgICAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jc3RyaW5nIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlTaW1wbGVUeXBlIj4KLSAgICAgIDx4czp3aGl0ZVNwYWNlIHZhbHVlPSJwcmVzZXJ2ZSIgaWQ9InN0cmluZy5wcmVzZXJ2ZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJib29sZWFuIiBpZD0iYm9vbGVhbiI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJwYXR0ZXJuIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0id2hpdGVTcGFjZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im9yZGVyZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImJvdW5kZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImNhcmRpbmFsaXR5IiB2YWx1ZT0iZmluaXRlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ibnVtZXJpYyIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNib29sZWFuIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlTaW1wbGVUeXBlIj4KLSAgICAgIDx4czp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIgZml4ZWQ9InRydWUiCi0gICAgICAgIGlkPSJib29sZWFuLndoaXRlU3BhY2UiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iZmxvYXQiIGlkPSJmbG9hdCI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJwYXR0ZXJuIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0iZW51bWVyYXRpb24iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJ3aGl0ZVNwYWNlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4SW5jbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4RXhjbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluSW5jbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluRXhjbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ib3JkZXJlZCIgdmFsdWU9InRvdGFsIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iYm91bmRlZCIgdmFsdWU9InRydWUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIgdmFsdWU9ImZpbml0ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im51bWVyaWMiIHZhbHVlPSJ0cnVlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNmbG9hdCIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55U2ltcGxlVHlwZSI+Ci0gICAgICA8eHM6d2hpdGVTcGFjZSB2YWx1ZT0iY29sbGFwc2UiIGZpeGVkPSJ0cnVlIgotICAgICAgICBpZD0iZmxvYXQud2hpdGVTcGFjZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJkb3VibGUiIGlkPSJkb3VibGUiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmFwcGluZm8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0icGF0dGVybiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9ImVudW1lcmF0aW9uIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0id2hpdGVTcGFjZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heEluY2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heEV4Y2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkluY2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkV4Y2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im9yZGVyZWQiIHZhbHVlPSJ0b3RhbCIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImJvdW5kZWQiIHZhbHVlPSJ0cnVlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iY2FyZGluYWxpdHkiIHZhbHVlPSJmaW5pdGUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJudW1lcmljIiB2YWx1ZT0idHJ1ZSIvPgotICAgICAgPC94czphcHBpbmZvPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZG91YmxlIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlTaW1wbGVUeXBlIj4KLSAgICAgIDx4czp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIgIGZpeGVkPSJ0cnVlIgotICAgICAgICBpZD0iZG91YmxlLndoaXRlU3BhY2UiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iZGVjaW1hbCIgaWQ9ImRlY2ltYWwiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmFwcGluZm8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0idG90YWxEaWdpdHMiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJmcmFjdGlvbkRpZ2l0cyIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9InBhdHRlcm4iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJ3aGl0ZVNwYWNlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0iZW51bWVyYXRpb24iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhJbmNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhFeGNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5JbmNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5FeGNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJvcmRlcmVkIiB2YWx1ZT0idG90YWwiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iY291bnRhYmx5IGluZmluaXRlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ibnVtZXJpYyIgdmFsdWU9InRydWUiLz4KLSAgICAgIDwveHM6YXBwaW5mbz4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2RlY2ltYWwiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVNpbXBsZVR5cGUiPgotICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIiAgZml4ZWQ9InRydWUiCi0gICAgICAgIGlkPSJkZWNpbWFsLndoaXRlU3BhY2UiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgPC94czpzaW1wbGVUeXBlPgotCi0gICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJkdXJhdGlvbiIgaWQ9ImR1cmF0aW9uIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czphcHBpbmZvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9InBhdHRlcm4iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhJbmNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhFeGNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5JbmNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5FeGNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJvcmRlcmVkIiB2YWx1ZT0icGFydGlhbCIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImJvdW5kZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImNhcmRpbmFsaXR5IgotICAgICAgICAgICAgICAgIHZhbHVlPSJjb3VudGFibHkgaW5maW5pdGUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJudW1lcmljIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgIDwveHM6YXBwaW5mbz4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2R1cmF0aW9uIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlTaW1wbGVUeXBlIj4KLSAgICAgIDx4czp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIgIGZpeGVkPSJ0cnVlIgotICAgICAgICBpZD0iZHVyYXRpb24ud2hpdGVTcGFjZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSA8eHM6c2ltcGxlVHlwZSBuYW1lPSJkYXRlVGltZSIgaWQ9ImRhdGVUaW1lIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJwYXR0ZXJuIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0iZW51bWVyYXRpb24iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJ3aGl0ZVNwYWNlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4SW5jbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4RXhjbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluSW5jbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluRXhjbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ib3JkZXJlZCIgdmFsdWU9InBhcnRpYWwiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iY291bnRhYmx5IGluZmluaXRlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ibnVtZXJpYyIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkYXRlVGltZSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55U2ltcGxlVHlwZSI+Ci0gICAgICA8eHM6d2hpdGVTcGFjZSB2YWx1ZT0iY29sbGFwc2UiICBmaXhlZD0idHJ1ZSIKLSAgICAgICAgaWQ9ImRhdGVUaW1lLndoaXRlU3BhY2UiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0idGltZSIgaWQ9InRpbWUiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgIDx4czphcHBpbmZvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9InBhdHRlcm4iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhJbmNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhFeGNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5JbmNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5FeGNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJvcmRlcmVkIiB2YWx1ZT0icGFydGlhbCIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImJvdW5kZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImNhcmRpbmFsaXR5IgotICAgICAgICAgICAgICAgIHZhbHVlPSJjb3VudGFibHkgaW5maW5pdGUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJudW1lcmljIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgIDwveHM6YXBwaW5mbz4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3RpbWUiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVNpbXBsZVR5cGUiPgotICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIiAgZml4ZWQ9InRydWUiCi0gICAgICAgIGlkPSJ0aW1lLndoaXRlU3BhY2UiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iZGF0ZSIgaWQ9ImRhdGUiPgotICAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmFwcGluZm8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0icGF0dGVybiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9ImVudW1lcmF0aW9uIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0id2hpdGVTcGFjZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heEluY2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heEV4Y2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkluY2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkV4Y2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im9yZGVyZWQiIHZhbHVlPSJwYXJ0aWFsIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iYm91bmRlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iY2FyZGluYWxpdHkiCi0gICAgICAgICAgICAgICAgdmFsdWU9ImNvdW50YWJseSBpbmZpbml0ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im51bWVyaWMiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgPC94czphcHBpbmZvPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZGF0ZSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55U2ltcGxlVHlwZSI+Ci0gICAgICA8eHM6d2hpdGVTcGFjZSB2YWx1ZT0iY29sbGFwc2UiICBmaXhlZD0idHJ1ZSIKLSAgICAgICAgaWQ9ImRhdGUud2hpdGVTcGFjZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJnWWVhck1vbnRoIiBpZD0iZ1llYXJNb250aCI+Ci0gICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJwYXR0ZXJuIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0iZW51bWVyYXRpb24iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJ3aGl0ZVNwYWNlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4SW5jbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4RXhjbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluSW5jbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluRXhjbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ib3JkZXJlZCIgdmFsdWU9InBhcnRpYWwiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iY291bnRhYmx5IGluZmluaXRlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ibnVtZXJpYyIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNnWWVhck1vbnRoIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlTaW1wbGVUeXBlIj4KLSAgICAgIDx4czp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIgIGZpeGVkPSJ0cnVlIgotICAgICAgICBpZD0iZ1llYXJNb250aC53aGl0ZVNwYWNlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9ImdZZWFyIiBpZD0iZ1llYXIiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgIDx4czphcHBpbmZvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9InBhdHRlcm4iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhJbmNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhFeGNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5JbmNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5FeGNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJvcmRlcmVkIiB2YWx1ZT0icGFydGlhbCIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImJvdW5kZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImNhcmRpbmFsaXR5IgotICAgICAgICAgICAgICAgIHZhbHVlPSJjb3VudGFibHkgaW5maW5pdGUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJudW1lcmljIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgIDwveHM6YXBwaW5mbz4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2dZZWFyIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlTaW1wbGVUeXBlIj4KLSAgICAgIDx4czp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIgIGZpeGVkPSJ0cnVlIgotICAgICAgICBpZD0iZ1llYXIud2hpdGVTcGFjZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotIDx4czpzaW1wbGVUeXBlIG5hbWU9ImdNb250aERheSIgaWQ9ImdNb250aERheSI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJwYXR0ZXJuIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0iZW51bWVyYXRpb24iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJ3aGl0ZVNwYWNlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4SW5jbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4RXhjbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluSW5jbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluRXhjbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ib3JkZXJlZCIgdmFsdWU9InBhcnRpYWwiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iY291bnRhYmx5IGluZmluaXRlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ibnVtZXJpYyIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZ01vbnRoRGF5Ii8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlTaW1wbGVUeXBlIj4KLSAgICAgICAgIDx4czp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIgZml4ZWQ9InRydWUiCi0gICAgICAgICAgICAgICAgaWQ9ImdNb250aERheS53aGl0ZVNwYWNlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9ImdEYXkiIGlkPSJnRGF5Ij4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgPHhzOmFwcGluZm8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0icGF0dGVybiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9ImVudW1lcmF0aW9uIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0id2hpdGVTcGFjZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heEluY2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heEV4Y2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkluY2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkV4Y2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im9yZGVyZWQiIHZhbHVlPSJwYXJ0aWFsIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iYm91bmRlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iY2FyZGluYWxpdHkiCi0gICAgICAgICAgICAgICAgdmFsdWU9ImNvdW50YWJseSBpbmZpbml0ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im51bWVyaWMiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgPC94czphcHBpbmZvPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZ0RheSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55U2ltcGxlVHlwZSI+Ci0gICAgICAgICA8eHM6d2hpdGVTcGFjZSB2YWx1ZT0iY29sbGFwc2UiICBmaXhlZD0idHJ1ZSIKLSAgICAgICAgICAgICAgICBpZD0iZ0RheS53aGl0ZVNwYWNlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gPHhzOnNpbXBsZVR5cGUgbmFtZT0iZ01vbnRoIiBpZD0iZ01vbnRoIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgPHhzOmFwcGluZm8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0icGF0dGVybiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9ImVudW1lcmF0aW9uIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0id2hpdGVTcGFjZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heEluY2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heEV4Y2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkluY2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkV4Y2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im9yZGVyZWQiIHZhbHVlPSJwYXJ0aWFsIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iYm91bmRlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iY2FyZGluYWxpdHkiCi0gICAgICAgICAgICAgICAgdmFsdWU9ImNvdW50YWJseSBpbmZpbml0ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im51bWVyaWMiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgPC94czphcHBpbmZvPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZ01vbnRoIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlTaW1wbGVUeXBlIj4KLSAgICAgICAgIDx4czp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIgIGZpeGVkPSJ0cnVlIgotICAgICAgICAgICAgICAgIGlkPSJnTW9udGgud2hpdGVTcGFjZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iaGV4QmluYXJ5IiBpZD0iaGV4QmluYXJ5Ij4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czphcHBpbmZvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Imxlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkxlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heExlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9InBhdHRlcm4iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJvcmRlcmVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iY291bnRhYmx5IGluZmluaXRlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ibnVtZXJpYyIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNiaW5hcnkiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVNpbXBsZVR5cGUiPgotICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIiBmaXhlZD0idHJ1ZSIKLSAgICAgICAgaWQ9ImhleEJpbmFyeS53aGl0ZVNwYWNlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgIDwveHM6c2ltcGxlVHlwZT4KLQotIDx4czpzaW1wbGVUeXBlIG5hbWU9ImJhc2U2NEJpbmFyeSIgaWQ9ImJhc2U2NEJpbmFyeSI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJsZW5ndGgiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5MZW5ndGgiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhMZW5ndGgiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJwYXR0ZXJuIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0iZW51bWVyYXRpb24iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJ3aGl0ZVNwYWNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ib3JkZXJlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iYm91bmRlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iY2FyZGluYWxpdHkiCi0gICAgICAgICAgICAgICAgdmFsdWU9ImNvdW50YWJseSBpbmZpbml0ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im51bWVyaWMiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgPC94czphcHBpbmZvPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNiYXNlNjRCaW5hcnkiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVNpbXBsZVR5cGUiPgotICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIiBmaXhlZD0idHJ1ZSIKLSAgICAgICAgaWQ9ImJhc2U2NEJpbmFyeS53aGl0ZVNwYWNlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgIDwveHM6c2ltcGxlVHlwZT4KLQotICAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iYW55VVJJIiBpZD0iYW55VVJJIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czphcHBpbmZvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Imxlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkxlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heExlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9InBhdHRlcm4iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJvcmRlcmVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iY291bnRhYmx5IGluZmluaXRlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ibnVtZXJpYyIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNhbnlVUkkiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVNpbXBsZVR5cGUiPgotICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIiAgZml4ZWQ9InRydWUiCi0gICAgICAgIGlkPSJhbnlVUkkud2hpdGVTcGFjZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iUU5hbWUiIGlkPSJRTmFtZSI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgIDx4czphcHBpbmZvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Imxlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkxlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heExlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9InBhdHRlcm4iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJvcmRlcmVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iY291bnRhYmx5IGluZmluaXRlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ibnVtZXJpYyIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNRTmFtZSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55U2ltcGxlVHlwZSI+Ci0gICAgICA8eHM6d2hpdGVTcGFjZSB2YWx1ZT0iY29sbGFwc2UiICBmaXhlZD0idHJ1ZSIKLSAgICAgICAgaWQ9IlFOYW1lLndoaXRlU3BhY2UiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgIDx4czpzaW1wbGVUeXBlIG5hbWU9Ik5PVEFUSU9OIiBpZD0iTk9UQVRJT04iPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJsZW5ndGgiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5MZW5ndGgiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhMZW5ndGgiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJwYXR0ZXJuIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0iZW51bWVyYXRpb24iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJ3aGl0ZVNwYWNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ib3JkZXJlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iYm91bmRlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iY2FyZGluYWxpdHkiCi0gICAgICAgICAgICAgICAgdmFsdWU9ImNvdW50YWJseSBpbmZpbml0ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im51bWVyaWMiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgPC94czphcHBpbmZvPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jTk9UQVRJT04iLz4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgICBOT1RBVElPTiBjYW5ub3QgYmUgdXNlZCBkaXJlY3RseSBpbiBhIHNjaGVtYTsgcmF0aGVyIGEgdHlwZQotICAgICAgICBtdXN0IGJlIGRlcml2ZWQgZnJvbSBpdCBieSBzcGVjaWZ5aW5nIGF0IGxlYXN0IG9uZSBlbnVtZXJhdGlvbgotICAgICAgICBmYWNldCB3aG9zZSB2YWx1ZSBpcyB0aGUgbmFtZSBvZiBhIE5PVEFUSU9OIGRlY2xhcmVkIGluIHRoZQotICAgICAgICBzY2hlbWEuCi0gICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlTaW1wbGVUeXBlIj4KLSAgICAgIDx4czp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIgIGZpeGVkPSJ0cnVlIgotICAgICAgICBpZD0iTk9UQVRJT04ud2hpdGVTcGFjZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIE5vdyB0aGUgZGVyaXZlZCBwcmltaXRpdmUgdHlwZXMKLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJub3JtYWxpemVkU3RyaW5nIiBpZD0ibm9ybWFsaXplZFN0cmluZyI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNub3JtYWxpemVkU3RyaW5nIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPgotICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9InJlcGxhY2UiCi0gICAgICAgIGlkPSJub3JtYWxpemVkU3RyaW5nLndoaXRlU3BhY2UiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0idG9rZW4iIGlkPSJ0b2tlbiI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyN0b2tlbiIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6bm9ybWFsaXplZFN0cmluZyI+Ci0gICAgICA8eHM6d2hpdGVTcGFjZSB2YWx1ZT0iY29sbGFwc2UiIGlkPSJ0b2tlbi53aGl0ZVNwYWNlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9Imxhbmd1YWdlIiBpZD0ibGFuZ3VhZ2UiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jbGFuZ3VhZ2UiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICAgIDx4czpwYXR0ZXJuCi0gICAgICAgIHZhbHVlPSJbYS16QS1aXXsxLDh9KC1bYS16QS1aMC05XXsxLDh9KSoiCi0gICAgICAgICAgICAgICAgaWQ9Imxhbmd1YWdlLnBhdHRlcm4iPgotICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICAgICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbCNOVC1MYW5ndWFnZUlEIj4KLSAgICAgICAgICAgIHBhdHRlcm4gc3BlY2lmaWVzIHRoZSBjb250ZW50IG9mIHNlY3Rpb24gMi4xMiBvZiBYTUwgMS4wZTIKLSAgICAgICAgICAgIGFuZCBSRkMgMzA2NiAoUmV2aXNlZCB2ZXJzaW9uIG9mIFJGQyAxNzY2KS4KLSAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgIDwveHM6cGF0dGVybj4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iSURSRUZTIiBpZD0iSURSRUZTIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czphcHBpbmZvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Imxlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkxlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heExlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9ImVudW1lcmF0aW9uIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0id2hpdGVTcGFjZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im9yZGVyZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImJvdW5kZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImNhcmRpbmFsaXR5IgotICAgICAgICAgICAgICAgIHZhbHVlPSJjb3VudGFibHkgaW5maW5pdGUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJudW1lcmljIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgIDwveHM6YXBwaW5mbz4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI0lEUkVGUyIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24+Ci0gICAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgICAgPHhzOmxpc3QgaXRlbVR5cGU9InhzOklEUkVGIi8+Ci0gICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgICAgIDx4czptaW5MZW5ndGggdmFsdWU9IjEiIGlkPSJJRFJFRlMubWluTGVuZ3RoIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9IkVOVElUSUVTIiBpZD0iRU5USVRJRVMiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmFwcGluZm8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluTGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4TGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0iZW51bWVyYXRpb24iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJ3aGl0ZVNwYWNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ib3JkZXJlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iYm91bmRlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iY2FyZGluYWxpdHkiCi0gICAgICAgICAgICAgICAgdmFsdWU9ImNvdW50YWJseSBpbmZpbml0ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im51bWVyaWMiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgPC94czphcHBpbmZvPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jRU5USVRJRVMiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uPgotICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgIDx4czpsaXN0IGl0ZW1UeXBlPSJ4czpFTlRJVFkiLz4KLSAgICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICAgICAgPHhzOm1pbkxlbmd0aCB2YWx1ZT0iMSIgaWQ9IkVOVElUSUVTLm1pbkxlbmd0aCIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJOTVRPS0VOIiBpZD0iTk1UT0tFTiI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNOTVRPS0VOIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgICA8eHM6cGF0dGVybiB2YWx1ZT0iXGMrIiBpZD0iTk1UT0tFTi5wYXR0ZXJuIj4KLSAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwjTlQtTm10b2tlbiI+Ci0gICAgICAgICAgICBwYXR0ZXJuIG1hdGNoZXMgcHJvZHVjdGlvbiA3IGZyb20gdGhlIFhNTCBzcGVjCi0gICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICA8L3hzOnBhdHRlcm4+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9Ik5NVE9LRU5TIiBpZD0iTk1UT0tFTlMiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmFwcGluZm8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluTGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4TGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0iZW51bWVyYXRpb24iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJ3aGl0ZVNwYWNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ib3JkZXJlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iYm91bmRlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iY2FyZGluYWxpdHkiCi0gICAgICAgICAgICAgICAgdmFsdWU9ImNvdW50YWJseSBpbmZpbml0ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im51bWVyaWMiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgPC94czphcHBpbmZvPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jTk1UT0tFTlMiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uPgotICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgIDx4czpsaXN0IGl0ZW1UeXBlPSJ4czpOTVRPS0VOIi8+Ci0gICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgICAgIDx4czptaW5MZW5ndGggdmFsdWU9IjEiIGlkPSJOTVRPS0VOUy5taW5MZW5ndGgiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iTmFtZSIgaWQ9Ik5hbWUiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jTmFtZSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICAgPHhzOnBhdHRlcm4gdmFsdWU9IlxpXGMqIiBpZD0iTmFtZS5wYXR0ZXJuIj4KLSAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbCNOVC1OYW1lIj4KLSAgICAgICAgICAgIHBhdHRlcm4gbWF0Y2hlcyBwcm9kdWN0aW9uIDUgZnJvbSB0aGUgWE1MIHNwZWMKLSAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgIDwveHM6cGF0dGVybj4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iTkNOYW1lIiBpZD0iTkNOYW1lIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI05DTmFtZSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6TmFtZSI+Ci0gICAgICA8eHM6cGF0dGVybiB2YWx1ZT0iW1xpLVs6XV1bXGMtWzpdXSoiIGlkPSJOQ05hbWUucGF0dGVybiI+Ci0gICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgICAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sLW5hbWVzLyNOVC1OQ05hbWUiPgotICAgICAgICAgICAgcGF0dGVybiBtYXRjaGVzIHByb2R1Y3Rpb24gNCBmcm9tIHRoZSBOYW1lc3BhY2VzIGluIFhNTCBzcGVjCi0gICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICA8L3hzOnBhdHRlcm4+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJJRCIgaWQ9IklEIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI0lEIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOQ05hbWUiLz4KLSAgIDwveHM6c2ltcGxlVHlwZT4KLQotICAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iSURSRUYiIGlkPSJJRFJFRiI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNJRFJFRiIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6TkNOYW1lIi8+Ci0gICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgIDx4czpzaW1wbGVUeXBlIG5hbWU9IkVOVElUWSIgaWQ9IkVOVElUWSI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNFTlRJVFkiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5DTmFtZSIvPgotICAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9ImludGVnZXIiIGlkPSJpbnRlZ2VyIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2ludGVnZXIiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmRlY2ltYWwiPgotICAgICAgPHhzOmZyYWN0aW9uRGlnaXRzIHZhbHVlPSIwIiBmaXhlZD0idHJ1ZSIgaWQ9ImludGVnZXIuZnJhY3Rpb25EaWdpdHMiLz4KLSAgICAgIDx4czpwYXR0ZXJuIHZhbHVlPSJbXC0rXT9bMC05XSsiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0ibm9uUG9zaXRpdmVJbnRlZ2VyIiBpZD0ibm9uUG9zaXRpdmVJbnRlZ2VyIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI25vblBvc2l0aXZlSW50ZWdlciIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6aW50ZWdlciI+Ci0gICAgICA8eHM6bWF4SW5jbHVzaXZlIHZhbHVlPSIwIiBpZD0ibm9uUG9zaXRpdmVJbnRlZ2VyLm1heEluY2x1c2l2ZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJuZWdhdGl2ZUludGVnZXIiIGlkPSJuZWdhdGl2ZUludGVnZXIiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jbmVnYXRpdmVJbnRlZ2VyIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpub25Qb3NpdGl2ZUludGVnZXIiPgotICAgICAgPHhzOm1heEluY2x1c2l2ZSB2YWx1ZT0iLTEiIGlkPSJuZWdhdGl2ZUludGVnZXIubWF4SW5jbHVzaXZlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9ImxvbmciIGlkPSJsb25nIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czphcHBpbmZvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImJvdW5kZWQiIHZhbHVlPSJ0cnVlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iY2FyZGluYWxpdHkiIHZhbHVlPSJmaW5pdGUiLz4KLSAgICAgIDwveHM6YXBwaW5mbz4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2xvbmciLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmludGVnZXIiPgotICAgICAgPHhzOm1pbkluY2x1c2l2ZSB2YWx1ZT0iLTkyMjMzNzIwMzY4NTQ3NzU4MDgiIGlkPSJsb25nLm1pbkluY2x1c2l2ZSIvPgotICAgICAgPHhzOm1heEluY2x1c2l2ZSB2YWx1ZT0iOTIyMzM3MjAzNjg1NDc3NTgwNyIgaWQ9ImxvbmcubWF4SW5jbHVzaXZlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9ImludCIgaWQ9ImludCI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNpbnQiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmxvbmciPgotICAgICAgPHhzOm1pbkluY2x1c2l2ZSB2YWx1ZT0iLTIxNDc0ODM2NDgiIGlkPSJpbnQubWluSW5jbHVzaXZlIi8+Ci0gICAgICA8eHM6bWF4SW5jbHVzaXZlIHZhbHVlPSIyMTQ3NDgzNjQ3IiBpZD0iaW50Lm1heEluY2x1c2l2ZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJzaG9ydCIgaWQ9InNob3J0Ij4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Nob3J0Ii8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czppbnQiPgotICAgICAgPHhzOm1pbkluY2x1c2l2ZSB2YWx1ZT0iLTMyNzY4IiBpZD0ic2hvcnQubWluSW5jbHVzaXZlIi8+Ci0gICAgICA8eHM6bWF4SW5jbHVzaXZlIHZhbHVlPSIzMjc2NyIgaWQ9InNob3J0Lm1heEluY2x1c2l2ZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJieXRlIiBpZD0iYnl0ZSI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNieXRlIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzaG9ydCI+Ci0gICAgICA8eHM6bWluSW5jbHVzaXZlIHZhbHVlPSItMTI4IiBpZD0iYnl0ZS5taW5JbmNsdXNpdmUiLz4KLSAgICAgIDx4czptYXhJbmNsdXNpdmUgdmFsdWU9IjEyNyIgaWQ9ImJ5dGUubWF4SW5jbHVzaXZlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9Im5vbk5lZ2F0aXZlSW50ZWdlciIgaWQ9Im5vbk5lZ2F0aXZlSW50ZWdlciI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNub25OZWdhdGl2ZUludGVnZXIiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmludGVnZXIiPgotICAgICAgPHhzOm1pbkluY2x1c2l2ZSB2YWx1ZT0iMCIgaWQ9Im5vbk5lZ2F0aXZlSW50ZWdlci5taW5JbmNsdXNpdmUiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0idW5zaWduZWRMb25nIiBpZD0idW5zaWduZWRMb25nIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czphcHBpbmZvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImJvdW5kZWQiIHZhbHVlPSJ0cnVlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iY2FyZGluYWxpdHkiIHZhbHVlPSJmaW5pdGUiLz4KLSAgICAgIDwveHM6YXBwaW5mbz4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Vuc2lnbmVkTG9uZyIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6bm9uTmVnYXRpdmVJbnRlZ2VyIj4KLSAgICAgIDx4czptYXhJbmNsdXNpdmUgdmFsdWU9IjE4NDQ2NzQ0MDczNzA5NTUxNjE1IgotICAgICAgICBpZD0idW5zaWduZWRMb25nLm1heEluY2x1c2l2ZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJ1bnNpZ25lZEludCIgaWQ9InVuc2lnbmVkSW50Ij4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Vuc2lnbmVkSW50Ii8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp1bnNpZ25lZExvbmciPgotICAgICAgPHhzOm1heEluY2x1c2l2ZSB2YWx1ZT0iNDI5NDk2NzI5NSIKLSAgICAgICAgaWQ9InVuc2lnbmVkSW50Lm1heEluY2x1c2l2ZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJ1bnNpZ25lZFNob3J0IiBpZD0idW5zaWduZWRTaG9ydCI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyN1bnNpZ25lZFNob3J0Ii8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp1bnNpZ25lZEludCI+Ci0gICAgICA8eHM6bWF4SW5jbHVzaXZlIHZhbHVlPSI2NTUzNSIKLSAgICAgICAgaWQ9InVuc2lnbmVkU2hvcnQubWF4SW5jbHVzaXZlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9InVuc2lnbmVkQnl0ZSIgaWQ9InVuc2lnbmVkQnl0ZSI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyN1bnNpZ25lZEJ5dGUiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnVuc2lnbmVkU2hvcnQiPgotICAgICAgPHhzOm1heEluY2x1c2l2ZSB2YWx1ZT0iMjU1IiBpZD0idW5zaWduZWRCeXRlLm1heEluY2x1c2l2ZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJwb3NpdGl2ZUludGVnZXIiIGlkPSJwb3NpdGl2ZUludGVnZXIiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jcG9zaXRpdmVJbnRlZ2VyIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpub25OZWdhdGl2ZUludGVnZXIiPgotICAgICAgPHhzOm1pbkluY2x1c2l2ZSB2YWx1ZT0iMSIgaWQ9InBvc2l0aXZlSW50ZWdlci5taW5JbmNsdXNpdmUiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSA8eHM6c2ltcGxlVHlwZSBuYW1lPSJkZXJpdmF0aW9uQ29udHJvbCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBBIHV0aWxpdHkgdHlwZSwgbm90IGZvciBwdWJsaWMgdXNlPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLSAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic3Vic3RpdHV0aW9uIi8+Ci0gICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImV4dGVuc2lvbiIvPgotICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZXN0cmljdGlvbiIvPgotICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsaXN0Ii8+Ci0gICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InVuaW9uIi8+Ci0gIDwveHM6cmVzdHJpY3Rpb24+Ci0gPC94czpzaW1wbGVUeXBlPgotCi0gPHhzOmdyb3VwIG5hbWU9InNpbXBsZURlcml2YXRpb24iPgotICA8eHM6Y2hvaWNlPgotICAgIDx4czplbGVtZW50IHJlZj0ieHM6cmVzdHJpY3Rpb24iLz4KLSAgICA8eHM6ZWxlbWVudCByZWY9InhzOmxpc3QiLz4KLSAgICA8eHM6ZWxlbWVudCByZWY9InhzOnVuaW9uIi8+Ci0gIDwveHM6Y2hvaWNlPgotIDwveHM6Z3JvdXA+Ci0KLSA8eHM6c2ltcGxlVHlwZSBuYW1lPSJzaW1wbGVEZXJpdmF0aW9uU2V0Ij4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICNhbGwgb3IgKHBvc3NpYmx5IGVtcHR5KSBzdWJzZXQgb2Yge3Jlc3RyaWN0aW9uLCB1bmlvbiwgbGlzdH0KLSAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgQSB1dGlsaXR5IHR5cGUsIG5vdCBmb3IgcHVibGljIHVzZTwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6dW5pb24+Ci0gICA8eHM6c2ltcGxlVHlwZT4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IiNhbGwiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgPC94czpzaW1wbGVUeXBlPgotICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmRlcml2YXRpb25Db250cm9sIj4KLSAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJsaXN0Ii8+Ci0gICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0idW5pb24iLz4KLSAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJyZXN0cmljdGlvbiIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICA8L3hzOnNpbXBsZVR5cGU+Ci0gIDwveHM6dW5pb24+Ci0gPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJzaW1wbGVUeXBlIiBhYnN0cmFjdD0idHJ1ZSI+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czphbm5vdGF0ZWQiPgotICAgICAgICA8eHM6Z3JvdXAgcmVmPSJ4czpzaW1wbGVEZXJpdmF0aW9uIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZmluYWwiIHR5cGU9InhzOnNpbXBsZURlcml2YXRpb25TZXQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpOQ05hbWUiPgotICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgIENhbiBiZSByZXN0cmljdGVkIHRvIHJlcXVpcmVkIG9yIGZvcmJpZGRlbgotICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0b3BMZXZlbFNpbXBsZVR5cGUiPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzaW1wbGVUeXBlIj4KLSAgICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHM6YW5ub3RhdGlvbiIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICAgPHhzOmdyb3VwIHJlZj0ieHM6c2ltcGxlRGVyaXZhdGlvbiIvPgotICAgICAgICA8L3hzOnNlcXVlbmNlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHVzZT0icmVxdWlyZWQiCi0gICAgICAgICAgICAgdHlwZT0ieHM6TkNOYW1lIj4KLSAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICBSZXF1aXJlZCBhdCB0aGUgdG9wIGxldmVsCi0gICAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ibG9jYWxTaW1wbGVUeXBlIj4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c2ltcGxlVHlwZSI+Ci0gICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgIDx4czpncm91cCByZWY9InhzOnNpbXBsZURlcml2YXRpb24iLz4KLSAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB1c2U9InByb2hpYml0ZWQiPgotICAgICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICAgIEZvcmJpZGRlbiB3aGVuIG5lc3RlZAotICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZmluYWwiIHVzZT0icHJvaGliaXRlZCIvPgotICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotCi0gIDx4czplbGVtZW50IG5hbWU9InNpbXBsZVR5cGUiIHR5cGU9InhzOnRvcExldmVsU2ltcGxlVHlwZSIgaWQ9InNpbXBsZVR5cGUiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZWxlbWVudC1zaW1wbGVUeXBlIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICA8L3hzOmVsZW1lbnQ+Ci0KLSAgPHhzOmdyb3VwIG5hbWU9ImZhY2V0cyI+Ci0gICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICBXZSBzaG91bGQgdXNlIGEgc3Vic3RpdHV0aW9uIGdyb3VwIGZvciBmYWNldHMsIGJ1dAotICAgICAgIHRoYXQncyBydWxlZCBvdXQgYmVjYXVzZSBpdCB3b3VsZCBhbGxvdyB1c2VycyB0bwotICAgICAgIGFkZCB0aGVpciBvd24sIHdoaWNoIHdlJ3JlIG5vdCByZWFkeSBmb3IgeWV0LgotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgIDwveHM6YW5ub3RhdGlvbj4KLSAgIDx4czpjaG9pY2U+Ci0gICAgPHhzOmVsZW1lbnQgcmVmPSJ4czptaW5FeGNsdXNpdmUiLz4KLSAgICA8eHM6ZWxlbWVudCByZWY9InhzOm1pbkluY2x1c2l2ZSIvPgotICAgIDx4czplbGVtZW50IHJlZj0ieHM6bWF4RXhjbHVzaXZlIi8+Ci0gICAgPHhzOmVsZW1lbnQgcmVmPSJ4czptYXhJbmNsdXNpdmUiLz4KLSAgICA8eHM6ZWxlbWVudCByZWY9InhzOnRvdGFsRGlnaXRzIi8+Ci0gICAgPHhzOmVsZW1lbnQgcmVmPSJ4czpmcmFjdGlvbkRpZ2l0cyIvPgotICAgIDx4czplbGVtZW50IHJlZj0ieHM6bGVuZ3RoIi8+Ci0gICAgPHhzOmVsZW1lbnQgcmVmPSJ4czptaW5MZW5ndGgiLz4KLSAgICA8eHM6ZWxlbWVudCByZWY9InhzOm1heExlbmd0aCIvPgotICAgIDx4czplbGVtZW50IHJlZj0ieHM6ZW51bWVyYXRpb24iLz4KLSAgICA8eHM6ZWxlbWVudCByZWY9InhzOndoaXRlU3BhY2UiLz4KLSAgICA8eHM6ZWxlbWVudCByZWY9InhzOnBhdHRlcm4iLz4KLSAgIDwveHM6Y2hvaWNlPgotICA8L3hzOmdyb3VwPgotCi0gIDx4czpncm91cCBuYW1lPSJzaW1wbGVSZXN0cmljdGlvbk1vZGVsIj4KLSAgIDx4czpzZXF1ZW5jZT4KLSAgICA8eHM6ZWxlbWVudCBuYW1lPSJzaW1wbGVUeXBlIiB0eXBlPSJ4czpsb2NhbFNpbXBsZVR5cGUiIG1pbk9jY3Vycz0iMCIvPgotICAgIDx4czpncm91cCByZWY9InhzOmZhY2V0cyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgPC94czpzZXF1ZW5jZT4KLSAgPC94czpncm91cD4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJyZXN0cmljdGlvbiIgaWQ9InJlc3RyaWN0aW9uIj4KLSAgIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgICAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZWxlbWVudC1yZXN0cmljdGlvbiI+Ci0gICAgICAgICAgYmFzZSBhdHRyaWJ1dGUgYW5kIHNpbXBsZVR5cGUgY2hpbGQgYXJlIG11dHVhbGx5Ci0gICAgICAgICAgZXhjbHVzaXZlLCBidXQgb25lIG9yIG90aGVyIGlzIHJlcXVpcmVkCi0gICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czphbm5vdGF0ZWQiPgotICAgICAgICAgPHhzOmdyb3VwIHJlZj0ieHM6c2ltcGxlUmVzdHJpY3Rpb25Nb2RlbCIvPgotICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJiYXNlIiB0eXBlPSJ4czpRTmFtZSIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94czpjb21wbGV4VHlwZT4KLSAgPC94czplbGVtZW50PgotCi0gIDx4czplbGVtZW50IG5hbWU9Imxpc3QiIGlkPSJsaXN0Ij4KLSAgIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgICAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZWxlbWVudC1saXN0Ij4KLSAgICAgICAgICBpdGVtVHlwZSBhdHRyaWJ1dGUgYW5kIHNpbXBsZVR5cGUgY2hpbGQgYXJlIG11dHVhbGx5Ci0gICAgICAgICAgZXhjbHVzaXZlLCBidXQgb25lIG9yIG90aGVyIGlzIHJlcXVpcmVkCi0gICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czphbm5vdGF0ZWQiPgotICAgICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9InNpbXBsZVR5cGUiIHR5cGU9InhzOmxvY2FsU2ltcGxlVHlwZSIKLSAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgICA8L3hzOnNlcXVlbmNlPgotICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaXRlbVR5cGUiIHR5cGU9InhzOlFOYW1lIiB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzOmNvbXBsZXhUeXBlPgotICA8L3hzOmVsZW1lbnQ+Ci0KLSAgPHhzOmVsZW1lbnQgbmFtZT0idW5pb24iIGlkPSJ1bmlvbiI+Ci0gICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICAgICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2VsZW1lbnQtdW5pb24iPgotICAgICAgICAgIG1lbWJlclR5cGVzIGF0dHJpYnV0ZSBtdXN0IGJlIG5vbi1lbXB0eSBvciB0aGVyZSBtdXN0IGJlCi0gICAgICAgICAgYXQgbGVhc3Qgb25lIHNpbXBsZVR5cGUgY2hpbGQKLSAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmFubm90YXRlZCI+Ci0gICAgICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ic2ltcGxlVHlwZSIgdHlwZT0ieHM6bG9jYWxTaW1wbGVUeXBlIgotICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICA8L3hzOnNlcXVlbmNlPgotICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWVtYmVyVHlwZXMiIHVzZT0ib3B0aW9uYWwiPgotICAgICAgICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICAgIDx4czpsaXN0IGl0ZW1UeXBlPSJ4czpRTmFtZSIvPgotICAgICAgICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94czpjb21wbGV4VHlwZT4KLSAgPC94czplbGVtZW50PgotCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJmYWNldCI+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czphbm5vdGF0ZWQiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbHVlIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZml4ZWQiIHR5cGU9InhzOmJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiCi0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0iZmFsc2UiLz4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0ibm9GaXhlZEZhY2V0Ij4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmZhY2V0Ij4KLSAgICA8eHM6c2VxdWVuY2U+Ci0gICAgIDx4czplbGVtZW50IHJlZj0ieHM6YW5ub3RhdGlvbiIgbWluT2NjdXJzPSIwIi8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZpeGVkIiB1c2U9InByb2hpYml0ZWQiLz4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJtaW5FeGNsdXNpdmUiIGlkPSJtaW5FeGNsdXNpdmUiIHR5cGU9InhzOmZhY2V0Ij4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2VsZW1lbnQtbWluRXhjbHVzaXZlIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICA8L3hzOmVsZW1lbnQ+Ci0gIDx4czplbGVtZW50IG5hbWU9Im1pbkluY2x1c2l2ZSIgaWQ9Im1pbkluY2x1c2l2ZSIgdHlwZT0ieHM6ZmFjZXQiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZWxlbWVudC1taW5JbmNsdXNpdmUiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gIDwveHM6ZWxlbWVudD4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJtYXhFeGNsdXNpdmUiIGlkPSJtYXhFeGNsdXNpdmUiIHR5cGU9InhzOmZhY2V0Ij4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2VsZW1lbnQtbWF4RXhjbHVzaXZlIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICA8L3hzOmVsZW1lbnQ+Ci0gIDx4czplbGVtZW50IG5hbWU9Im1heEluY2x1c2l2ZSIgaWQ9Im1heEluY2x1c2l2ZSIgdHlwZT0ieHM6ZmFjZXQiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZWxlbWVudC1tYXhJbmNsdXNpdmUiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gIDwveHM6ZWxlbWVudD4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ibnVtRmFjZXQiPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpmYWNldCI+Ci0gICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICA8L3hzOnNlcXVlbmNlPgotICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmFsdWUiIHR5cGU9InhzOm5vbk5lZ2F0aXZlSW50ZWdlciIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotCi0gIDx4czplbGVtZW50IG5hbWU9InRvdGFsRGlnaXRzIiBpZD0idG90YWxEaWdpdHMiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZWxlbWVudC10b3RhbERpZ2l0cyIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpudW1GYWNldCI+Ci0gICAgICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgICA8L3hzOnNlcXVlbmNlPgotICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmFsdWUiIHR5cGU9InhzOnBvc2l0aXZlSW50ZWdlciIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICAgIDwveHM6Y29tcGxleFR5cGU+Ci0gIDwveHM6ZWxlbWVudD4KLSAgPHhzOmVsZW1lbnQgbmFtZT0iZnJhY3Rpb25EaWdpdHMiIGlkPSJmcmFjdGlvbkRpZ2l0cyIgdHlwZT0ieHM6bnVtRmFjZXQiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZWxlbWVudC1mcmFjdGlvbkRpZ2l0cyIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgPC94czplbGVtZW50PgotCi0gIDx4czplbGVtZW50IG5hbWU9Imxlbmd0aCIgaWQ9Imxlbmd0aCIgdHlwZT0ieHM6bnVtRmFjZXQiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZWxlbWVudC1sZW5ndGgiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gIDwveHM6ZWxlbWVudD4KLSAgPHhzOmVsZW1lbnQgbmFtZT0ibWluTGVuZ3RoIiBpZD0ibWluTGVuZ3RoIiB0eXBlPSJ4czpudW1GYWNldCI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNlbGVtZW50LW1pbkxlbmd0aCIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgPC94czplbGVtZW50PgotICA8eHM6ZWxlbWVudCBuYW1lPSJtYXhMZW5ndGgiIGlkPSJtYXhMZW5ndGgiIHR5cGU9InhzOm51bUZhY2V0Ij4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2VsZW1lbnQtbWF4TGVuZ3RoIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICA8L3hzOmVsZW1lbnQ+Ci0KLSAgPHhzOmVsZW1lbnQgbmFtZT0iZW51bWVyYXRpb24iIGlkPSJlbnVtZXJhdGlvbiIgdHlwZT0ieHM6bm9GaXhlZEZhY2V0Ij4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2VsZW1lbnQtZW51bWVyYXRpb24iLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gIDwveHM6ZWxlbWVudD4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJ3aGl0ZVNwYWNlIiBpZD0id2hpdGVTcGFjZSI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNlbGVtZW50LXdoaXRlU3BhY2UiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOmNvbXBsZXhUeXBlPgotICAgICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6ZmFjZXQiPgotICAgICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHM6YW5ub3RhdGlvbiIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbHVlIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgICAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Tk1UT0tFTiI+Ci0gICAgICAgICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJwcmVzZXJ2ZSIvPgotICAgICAgICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVwbGFjZSIvPgotICAgICAgICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iY29sbGFwc2UiLz4KLSAgICAgICAgICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICAgICAgICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzOmNvbXBsZXhUeXBlPgotICA8L3hzOmVsZW1lbnQ+Ci0KLSAgPHhzOmVsZW1lbnQgbmFtZT0icGF0dGVybiIgaWQ9InBhdHRlcm4iPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZWxlbWVudC1wYXR0ZXJuIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpjb21wbGV4VHlwZT4KLSAgICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOm5vRml4ZWRGYWNldCI+Ci0gICAgICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgICA8L3hzOnNlcXVlbmNlPgotICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idmFsdWUiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICAgIDwveHM6Y29tcGxleFR5cGU+Ci0gIDwveHM6ZWxlbWVudD4KLQotPC94czpzY2hlbWE+CmRpZmYgLS1naXQgYS92Mi9zcmMvemlwY29tcGFyZS96aXBjb21wYXJlL1ppcENvbXBhcmUuamF2YSBiL3YyL3NyYy96aXBjb21wYXJlL3ppcGNvbXBhcmUvWmlwQ29tcGFyZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTZmYTk5Li4wMDAwMDAwCi0tLSBhL3YyL3NyYy96aXBjb21wYXJlL3ppcGNvbXBhcmUvWmlwQ29tcGFyZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2UgemlwY29tcGFyZTsKLQotaW1wb3J0IGphdmEudXRpbC56aXAuWmlwRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcEVudHJ5OwotaW1wb3J0IGphdmEudXRpbC4qOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotcHVibGljIGNsYXNzIFppcENvbXBhcmUKLXsKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICAgIHsKLSAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9IDIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVXNhZ2U6IHppcGNvbXBhcmUgW2ZpbGUxXSBbZmlsZTJdIik7Ci0gICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKLSAgICAgICAgfQotCi0gICAgICAgIFppcEZpbGUgZmlsZTE7Ci0gICAgICAgIHRyeSB7IGZpbGUxID0gbmV3IFppcEZpbGUoYXJnc1swXSk7IH0KLSAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3Qgb3BlbiB6aXAgZmlsZSAiICsgYXJnc1swXSArICI6ICIgKyBlKTsgU3lzdGVtLmV4aXQoMSk7IHJldHVybjsgfQotCi0gICAgICAgIFppcEZpbGUgZmlsZTI7Ci0gICAgICAgIHRyeSB7IGZpbGUyID0gbmV3IFppcEZpbGUoYXJnc1sxXSk7IH0KLSAgICAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsgU3lzdGVtLm91dC5wcmludGxuKCJDb3VsZCBub3Qgb3BlbiB6aXAgZmlsZSAiICsgYXJnc1swXSArICI6ICIgKyBlKTsgU3lzdGVtLmV4aXQoMSk7IHJldHVybjsgfQotCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ29tcGFyaW5nICIgKyBhcmdzWzBdICsgIiB3aXRoICIgKyBhcmdzWzFdICsgIjoiKTsKLQotICAgICAgICBTZXQgc2V0MSA9IG5ldyBMaW5rZWRIYXNoU2V0KCk7Ci0gICAgICAgIGZvciAoRW51bWVyYXRpb24gZSA9IGZpbGUxLmVudHJpZXMoKTsgZS5oYXNNb3JlRWxlbWVudHMoKTsgKQotICAgICAgICAgICAgc2V0MS5hZGQoKChaaXBFbnRyeSllLm5leHRFbGVtZW50KCkpLmdldE5hbWUoKSk7Ci0KLSAgICAgICAgU2V0IHNldDIgPSBuZXcgTGlua2VkSGFzaFNldCgpOwotICAgICAgICBmb3IgKEVudW1lcmF0aW9uIGUgPSBmaWxlMi5lbnRyaWVzKCk7IGUuaGFzTW9yZUVsZW1lbnRzKCk7ICkKLSAgICAgICAgICAgIHNldDIuYWRkKCgoWmlwRW50cnkpZS5uZXh0RWxlbWVudCgpKS5nZXROYW1lKCkpOwotCi0gICAgICAgIGludCBlcnJjb3VudCA9IDA7Ci0gICAgICAgIGludCBmaWxlY291bnQgPSAwOwotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBzZXQxLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZylpLm5leHQoKTsKLSAgICAgICAgICAgIGlmICghc2V0Mi5jb250YWlucyhuYW1lKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obmFtZSArICIgbm90IGZvdW5kIGluICIgKyBhcmdzWzFdKTsKLSAgICAgICAgICAgICAgICBlcnJjb3VudCArPSAxOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc2V0Mi5yZW1vdmUobmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdHJlYW1zRXF1YWwoZmlsZTEuZ2V0SW5wdXRTdHJlYW0oZmlsZTEuZ2V0RW50cnkobmFtZSkpLCBmaWxlMi5nZXRJbnB1dFN0cmVhbShmaWxlMi5nZXRFbnRyeShuYW1lKSkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG5hbWUgKyAiIGRvZXMgbm90IG1hdGNoIik7Ci0gICAgICAgICAgICAgICAgICAgIGVycmNvdW50ICs9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obmFtZSArICI6IElPIEVycm9yICIgKyBlKTsKLSAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgICAgIGVycmNvdW50ICs9IDE7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmaWxlY291bnQgKz0gMTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBzZXQyLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZylpLm5leHQoKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihuYW1lICsgIiBub3QgZm91bmQgaW4gIiArIGFyZ3NbMF0pOwotICAgICAgICAgICAgZXJyY291bnQgKz0gMTsKLSAgICAgICAgfQotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZmlsZWNvdW50ICsgIiBlbnRyaWVzIG1hdGNoZWQiKTsKLSAgICAgICAgaWYgKGVycmNvdW50ID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGVycmNvdW50ICsgIiBlbnRyaWVzIGRpZCBub3QgbWF0Y2giKTsKLSAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwotICAgICAgICB9Ci0gICAgICAgIFN5c3RlbS5leGl0KDApOwotICAgIH0KLQotICAgIHN0YXRpYyBib29sZWFuIHN0cmVhbXNFcXVhbChJbnB1dFN0cmVhbSBzdHJlYW0xLCBJbnB1dFN0cmVhbSBzdHJlYW0yKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGJ5dGVbXSBidWYxID0gbmV3IGJ5dGVbNDA5Nl07Ci0gICAgICAgIGJ5dGVbXSBidWYyID0gbmV3IGJ5dGVbNDA5Nl07Ci0gICAgICAgIGJvb2xlYW4gZG9uZTEgPSBmYWxzZTsKLSAgICAgICAgYm9vbGVhbiBkb25lMiA9IGZhbHNlOwotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgIHdoaWxlICghZG9uZTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBvZmYxID0gMDsKLSAgICAgICAgICAgIGludCBvZmYyID0gMDsKLQotICAgICAgICAgICAgd2hpbGUgKG9mZjEgPCBidWYxLmxlbmd0aCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgY291bnQgPSBzdHJlYW0xLnJlYWQoYnVmMSwgb2ZmMSwgYnVmMS5sZW5ndGggLSBvZmYxKTsKLSAgICAgICAgICAgICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZG9uZTEgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb2ZmMSArPSBjb3VudDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoaWxlIChvZmYyIDwgYnVmMi5sZW5ndGgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IGNvdW50ID0gc3RyZWFtMi5yZWFkKGJ1ZjIsIG9mZjIsIGJ1ZjIubGVuZ3RoIC0gb2ZmMik7Ci0gICAgICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGRvbmUyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9mZjIgKz0gY291bnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob2ZmMSAhPSBvZmYyIHx8IGRvbmUxICE9IGRvbmUyKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2ZmMTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChidWYxW2ldICE9IGJ1ZjJbaV0pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBmaW5hbGx5IHsgc3RyZWFtMS5jbG9zZSgpOyBzdHJlYW0yLmNsb3NlKCk7IH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi90ZXN0L2Nhc2VzL2VudW10ZXN0L3JlcG9ydDEueG1sIGIvdjIvdGVzdC9jYXNlcy9lbnVtdGVzdC9yZXBvcnQxLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUyNjhjYi4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L2Nhc2VzL2VudW10ZXN0L3JlcG9ydDEueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08c3RhdHVzcmVwb3J0IHhtbG5zPSJodHRwOi8vb3BlbnVyaS5vcmcvZW51bXRlc3QiPgotICA8c3RhdHVzIG5hbWU9ImZpcnN0IiB0YXJnZXQ9ImFsbCI+YWxsPC9zdGF0dXM+Ci0gIDxzdGF0dXMgbmFtZT0ic2Vjb25kIiB0YXJnZXQ9ImFsbCI+ZmV3PC9zdGF0dXM+Ci0gIDxzdGF0dXMgbmFtZT0idGhpcmQiIHRhcmdldD0ibm9uZSI+bW9zdDwvc3RhdHVzPgotICA8c3RhdHVzIG5hbWU9ImZpcnN0IiB0YXJnZXQ9Im5vbmUiPm5vbmU8L3N0YXR1cz4KLTwvc3RhdHVzcmVwb3J0PgpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9jYXNlcy9tYXJzaGFsL2NvbS9teXRlc3QvTXlDbGFzcy5qYXZhIGIvdjIvdGVzdC9jYXNlcy9tYXJzaGFsL2NvbS9teXRlc3QvTXlDbGFzcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjg3ZTgyLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3QvY2FzZXMvbWFyc2hhbC9jb20vbXl0ZXN0L015Q2xhc3MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLXBhY2thZ2UgY29tLm15dGVzdDsKLQotcHVibGljIGNsYXNzIE15Q2xhc3MgewotCi0KLSAgICBwcml2YXRlIFlvdXJDbGFzcyBteWVsdDsKLSAgICBwcml2YXRlIFN0cmluZyBteWF0dDsKLQotCi0gICAgcHVibGljIFlvdXJDbGFzcyBnZXRNeWVsdCgpCi0gICAgewotICAgICAgICByZXR1cm4gbXllbHQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0TXllbHQoWW91ckNsYXNzIG15ZWx0KQotICAgIHsKLSAgICAgICAgdGhpcy5teWVsdCA9IG15ZWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TXlhdHQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG15YXR0OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldE15YXR0KFN0cmluZyBteWF0dCkKLSAgICB7Ci0gICAgICAgIHRoaXMubXlhdHQgPSBteWF0dDsKLSAgICB9Ci0KLQotICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzID09IG8pIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIShvIGluc3RhbmNlb2YgTXlDbGFzcykpIHJldHVybiBmYWxzZTsKLQotICAgICAgICBmaW5hbCBNeUNsYXNzIG15Q2xhc3MgPSAoTXlDbGFzcylvOwotCi0gICAgICAgIGlmIChteWF0dCAhPSBudWxsID8gIW15YXR0LmVxdWFscyhteUNsYXNzLm15YXR0KSA6IG15Q2xhc3MubXlhdHQgIT0gbnVsbCkgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAobXllbHQgIT0gbnVsbCA/ICFteWVsdC5lcXVhbHMobXlDbGFzcy5teWVsdCkgOiBteUNsYXNzLm15ZWx0ICE9IG51bGwpIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkKLSAgICB7Ci0gICAgICAgIGludCByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdCA9IChteWVsdCAhPSBudWxsID8gbXllbHQuaGFzaENvZGUoKSA6IDApOwotICAgICAgICByZXN1bHQgPSAyOSAqIHJlc3VsdCArIChteWF0dCAhPSBudWxsID8gbXlhdHQuaGFzaENvZGUoKSA6IDApOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICJjb20ubXl0ZXN0Lk15Q2xhc3N7IiArCi0gICAgICAgICAgICAibXllbHQ9IiArIG15ZWx0ICsKLSAgICAgICAgICAgICIsIG15YXR0PSciICsgbXlhdHQgKyAiJyIgKwotICAgICAgICAgICAgIn0iOwotICAgIH0KLQotCi19CmRpZmYgLS1naXQgYS92Mi90ZXN0L2Nhc2VzL21hcnNoYWwvY29tL215dGVzdC9Zb3VyQ2xhc3MuamF2YSBiL3YyL3Rlc3QvY2FzZXMvbWFyc2hhbC9jb20vbXl0ZXN0L1lvdXJDbGFzcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDA4YjcyLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3QvY2FzZXMvbWFyc2hhbC9jb20vbXl0ZXN0L1lvdXJDbGFzcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZQotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2UgY29tLm15dGVzdDsKLQotcHVibGljIGNsYXNzIFlvdXJDbGFzcwotewotICAgIHByaXZhdGUgTXlDbGFzcyBteUNsYXNzOwotICAgIHByaXZhdGUgZmxvYXQgbXlGbG9hdDsKLSAgICBwcml2YXRlIGZsb2F0IGF0dHJpYjsKLQotICAgIHB1YmxpYyBmbG9hdCBnZXRNeUZsb2F0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBteUZsb2F0OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldE15RmxvYXQoZmxvYXQgbXlGbG9hdCkKLSAgICB7Ci0gICAgICAgIHRoaXMubXlGbG9hdCA9IG15RmxvYXQ7Ci0gICAgfQotCi0gICAgcHVibGljIE15Q2xhc3MgZ2V0TXlDbGFzcygpCi0gICAgewotICAgICAgICByZXR1cm4gbXlDbGFzczsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRNeUNsYXNzKE15Q2xhc3MgbXlDbGFzcykKLSAgICB7Ci0gICAgICAgIHRoaXMubXlDbGFzcyA9IG15Q2xhc3M7Ci0gICAgfQotCi0gICAgcHVibGljIGZsb2F0IGdldEF0dHJpYigpCi0gICAgewotICAgICAgICByZXR1cm4gYXR0cmliOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEF0dHJpYihmbG9hdCBhdHRyaWIpCi0gICAgewotICAgICAgICB0aGlzLmF0dHJpYiA9IGF0dHJpYjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG8pCi0gICAgewotICAgICAgICBpZiAodGhpcyA9PSBvKSByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCEobyBpbnN0YW5jZW9mIFlvdXJDbGFzcykpIHJldHVybiBmYWxzZTsKLQotICAgICAgICBmaW5hbCBZb3VyQ2xhc3MgeW91ckNsYXNzID0gKFlvdXJDbGFzcylvOwotCi0gICAgICAgIGlmIChhdHRyaWIgIT0geW91ckNsYXNzLmF0dHJpYikgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAobXlGbG9hdCAhPSB5b3VyQ2xhc3MubXlGbG9hdCkgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAobXlDbGFzcyAhPSBudWxsID8gIW15Q2xhc3MuZXF1YWxzKHlvdXJDbGFzcy5teUNsYXNzKSA6IHlvdXJDbGFzcy5teUNsYXNzICE9IG51bGwpIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkKLSAgICB7Ci0gICAgICAgIGludCByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdCA9IChteUNsYXNzICE9IG51bGwgPyBteUNsYXNzLmhhc2hDb2RlKCkgOiAwKTsKLSAgICAgICAgcmVzdWx0ID0gMjkgKiByZXN1bHQgKyBGbG9hdC5mbG9hdFRvSW50Qml0cyhteUZsb2F0KTsKLSAgICAgICAgcmVzdWx0ID0gMjkgKiByZXN1bHQgKyBGbG9hdC5mbG9hdFRvSW50Qml0cyhhdHRyaWIpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICJjb20ubXl0ZXN0LllvdXJDbGFzc3siICsKLSAgICAgICAgICAgICJteUNsYXNzPSIgKyBteUNsYXNzICsKLSAgICAgICAgICAgICIsIG15RmxvYXQ9IiArIG15RmxvYXQgKwotICAgICAgICAgICAgIiwgYXR0cmliPSIgKyBhdHRyaWIgKwotICAgICAgICAgICAgIn0iOwotICAgIH0KLQotCi19CmRpZmYgLS1naXQgYS92Mi90ZXN0L2Nhc2VzL21hcnNoYWwvZG9jLnhtbCBiL3YyL3Rlc3QvY2FzZXMvbWFyc2hhbC9kb2MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Mzc1ZjE3Li4wMDAwMDAwCi0tLSBhL3YyL3Rlc3QvY2FzZXMvbWFyc2hhbC9kb2MueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxteTpsb2FkIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICB4bWxuczpteT0iaHR0cDovL3d3dy5teXRlc3QuY29tLyIgeHNpOnR5cGU9Im15Om15LXR5cGUiPgotCi0gICAgPG15Om15ZWx0IGlnbm9yZT0ic29tZXZhbCIgbXk6YXR0cmliPSI0NDQ0LjMzMzMzMzMiICA+Ci0gICAgICAgIDxteTpteS1mbG9hdD42NS4zNDwvbXk6bXktZmxvYXQ+Ci0gICAgICAgIDxteTp5b3VyX2NsYXNzPgotICAgICAgICAgICAgPG15Om15YXR0IHhzaTp0eXBlPSJ4c2Q6dG9rZW4iPmlubmVyLXN0cjwvbXk6bXlhdHQ+Ci0gICAgICAgIDwvbXk6eW91cl9jbGFzcz4KLSAgICA8L215Om15ZWx0PgotCi0gICAgPCEtLSAgICBub3Qgd29ya2luZy0tPgotICAgIDwhLS0gICAgPG15Om15YXR0IHhzaTpuaWw9IjAiIHhzaTp0eXBlPSJteTpjdXN0b20tc3RyaW5nIiA+c29tZSBzdHJpbmc8L215Om15YXR0Pi0tPgotCi0gICAgPG15Om15YXR0IHhzaTp0eXBlPSJ4c2Q6dG9rZW4iPnN0cnZhbDwvbXk6bXlhdHQ+Ci0KLTwvbXk6bG9hZD4KLQpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9jYXNlcy9tYXJzaGFsL2V4YW1wbGVfY29uZmlnLnhtbCBiL3YyL3Rlc3QvY2FzZXMvbWFyc2hhbC9leGFtcGxlX2NvbmZpZy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlNTVjMGQuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9jYXNlcy9tYXJzaGFsL2V4YW1wbGVfY29uZmlnLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLTxiaW46YmluZGluZy1jb25maWcgeG1sbnM6bXl0PSJodHRwOi8vd3d3Lm15dGVzdC5jb20vIiB4bWxuczpiaW49Imh0dHA6Ly94bWxiZWFucy5hcGFjaGUub3JnLzIwMDMvMDkvYmluZGluZy1jb25maWciIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPgotICAgIDxiaW46YmluZGluZ3M+Ci0gICAgICAgIDxiaW46YmluZGluZy10eXBlIHhzaTp0eXBlPSJiaW46YnktbmFtZS1iZWFuIj4KLSAgICAgICAgICAgIDxiaW46eG1sY29tcG9uZW50PnQ9bXktdHlwZUBodHRwOi8vd3d3Lm15dGVzdC5jb20vPC9iaW46eG1sY29tcG9uZW50PgotICAgICAgICAgICAgPGJpbjpqYXZhdHlwZT5jb20ubXl0ZXN0Lk15Q2xhc3M8L2JpbjpqYXZhdHlwZT4KLSAgICAgICAgICAgIDxiaW46eG1sb2JqPmZhbHNlPC9iaW46eG1sb2JqPgotICAgICAgICAgICAgPGJpbjpxbmFtZS1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8YmluOnhtbGNvbXBvbmVudD50PXlvdXItdHlwZUBodHRwOi8vd3d3Lm15dGVzdC5jb20vPC9iaW46eG1sY29tcG9uZW50PgotICAgICAgICAgICAgICAgIDxiaW46amF2YXR5cGU+Y29tLm15dGVzdC5Zb3VyQ2xhc3M8L2JpbjpqYXZhdHlwZT4KLSAgICAgICAgICAgICAgICA8YmluOmdldHRlcj5nZXRNeWVsdDwvYmluOmdldHRlcj4KLSAgICAgICAgICAgICAgICA8YmluOnNldHRlcj5zZXRNeWVsdDwvYmluOnNldHRlcj4KLSAgICAgICAgICAgICAgICA8YmluOnFuYW1lPm15dDpteWVsdDwvYmluOnFuYW1lPgotICAgICAgICAgICAgPC9iaW46cW5hbWUtcHJvcGVydHk+Ci0gICAgICAgICAgICA8YmluOnFuYW1lLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxiaW46eG1sY29tcG9uZW50PnQ9Y3VzdG9tLXN0cmluZ0BodHRwOi8vd3d3Lm15dGVzdC5jb20vPC9iaW46eG1sY29tcG9uZW50PgotICAgICAgICAgICAgICAgIDxiaW46amF2YXR5cGU+amF2YS5sYW5nLlN0cmluZzwvYmluOmphdmF0eXBlPgotICAgICAgICAgICAgICAgIDxiaW46Z2V0dGVyPmdldE15YXR0PC9iaW46Z2V0dGVyPgotICAgICAgICAgICAgICAgIDxiaW46c2V0dGVyPnNldE15YXR0PC9iaW46c2V0dGVyPgotICAgICAgICAgICAgICAgIDxiaW46cW5hbWU+bXl0Om15YXR0PC9iaW46cW5hbWU+Ci0gICAgICAgICAgICA8L2JpbjpxbmFtZS1wcm9wZXJ0eT4KLSAgICAgICAgPC9iaW46YmluZGluZy10eXBlPgotICAgICAgICA8YmluOmJpbmRpbmctdHlwZSB4c2k6dHlwZT0iYmluOmJ5LW5hbWUtYmVhbiI+Ci0gICAgICAgICAgICA8YmluOnhtbGNvbXBvbmVudD50PXlvdXItdHlwZUBodHRwOi8vd3d3Lm15dGVzdC5jb20vPC9iaW46eG1sY29tcG9uZW50PgotICAgICAgICAgICAgPGJpbjpqYXZhdHlwZT5jb20ubXl0ZXN0LllvdXJDbGFzczwvYmluOmphdmF0eXBlPgotICAgICAgICAgICAgPGJpbjp4bWxvYmo+ZmFsc2U8L2Jpbjp4bWxvYmo+Ci0gICAgICAgICAgICA8YmluOnFuYW1lLXByb3BlcnR5PgotICAgICAgICAgICAgICAgIDxiaW46eG1sY29tcG9uZW50PnQ9bXktdHlwZUBodHRwOi8vd3d3Lm15dGVzdC5jb20vPC9iaW46eG1sY29tcG9uZW50PgotICAgICAgICAgICAgICAgIDxiaW46amF2YXR5cGU+Y29tLm15dGVzdC5NeUNsYXNzPC9iaW46amF2YXR5cGU+Ci0gICAgICAgICAgICAgICAgPGJpbjpnZXR0ZXI+Z2V0TXlDbGFzczwvYmluOmdldHRlcj4KLSAgICAgICAgICAgICAgICA8YmluOnNldHRlcj5zZXRNeUNsYXNzPC9iaW46c2V0dGVyPgotICAgICAgICAgICAgICAgIDxiaW46cW5hbWU+bXl0OnlvdXJfY2xhc3M8L2JpbjpxbmFtZT4KLSAgICAgICAgICAgIDwvYmluOnFuYW1lLXByb3BlcnR5PgotICAgICAgICAgICAgPGJpbjpxbmFtZS1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8YmluOnhtbGNvbXBvbmVudD50PWZsb2F0QGh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hPC9iaW46eG1sY29tcG9uZW50PgotICAgICAgICAgICAgICAgIDxiaW46amF2YXR5cGU+ZmxvYXQ8L2JpbjpqYXZhdHlwZT4KLSAgICAgICAgICAgICAgICA8YmluOmdldHRlcj5nZXRNeUZsb2F0PC9iaW46Z2V0dGVyPgotICAgICAgICAgICAgICAgIDxiaW46c2V0dGVyPnNldE15RmxvYXQ8L2JpbjpzZXR0ZXI+Ci0gICAgICAgICAgICAgICAgPGJpbjpxbmFtZT5teXQ6bXktZmxvYXQ8L2JpbjpxbmFtZT4KLSAgICAgICAgICAgIDwvYmluOnFuYW1lLXByb3BlcnR5PgotICAgICAgICAgICAgPGJpbjpxbmFtZS1wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICA8YmluOnhtbGNvbXBvbmVudD50PWZsb2F0QGh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hPC9iaW46eG1sY29tcG9uZW50PgotICAgICAgICAgICAgICAgIDxiaW46amF2YXR5cGU+ZmxvYXQ8L2JpbjpqYXZhdHlwZT4KLSAgICAgICAgICAgICAgICA8YmluOmdldHRlcj5nZXRBdHRyaWI8L2JpbjpnZXR0ZXI+Ci0gICAgICAgICAgICAgICAgPGJpbjpzZXR0ZXI+c2V0QXR0cmliPC9iaW46c2V0dGVyPgotICAgICAgICAgICAgICAgIDxiaW46cW5hbWU+bXl0OmF0dHJpYjwvYmluOnFuYW1lPgotICAgICAgICAgICAgICAgIDxiaW46YXR0cmlidXRlPnRydWU8L2JpbjphdHRyaWJ1dGU+Ci0gICAgICAgICAgICA8L2JpbjpxbmFtZS1wcm9wZXJ0eT4KLSAgICAgICAgPC9iaW46YmluZGluZy10eXBlPgotICAgICAgICA8YmluOmJpbmRpbmctdHlwZSB4c2k6dHlwZT0iYmluOnNpbXBsZS10eXBlIj4KLSAgICAgICAgICAgIDxiaW46eG1sY29tcG9uZW50PnQ9Y3VzdG9tLXN0cmluZ0BodHRwOi8vd3d3Lm15dGVzdC5jb20vPC9iaW46eG1sY29tcG9uZW50PgotICAgICAgICAgICAgPGJpbjpqYXZhdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9iaW46amF2YXR5cGU+Ci0gICAgICAgICAgICA8YmluOnhtbG9iaj5mYWxzZTwvYmluOnhtbG9iaj4KLSAgICAgICAgICAgIDxiaW46YXMteG1sPnQ9c3RyaW5nQGh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hPC9iaW46YXMteG1sPgotICAgICAgICA8L2JpbjpiaW5kaW5nLXR5cGU+Ci0gICAgPC9iaW46YmluZGluZ3M+Ci0gICAgPGJpbjp4bWwtdG8tcG9qbz4KLSAgICAgICAgPGJpbjptYXBwaW5nPgotICAgICAgICAgICAgPGJpbjp4bWxjb21wb25lbnQ+dD1teS10eXBlQGh0dHA6Ly93d3cubXl0ZXN0LmNvbS88L2Jpbjp4bWxjb21wb25lbnQ+Ci0gICAgICAgICAgICA8YmluOmphdmF0eXBlPmNvbS5teXRlc3QuTXlDbGFzczwvYmluOmphdmF0eXBlPgotICAgICAgICA8L2JpbjptYXBwaW5nPgotICAgICAgICA8YmluOm1hcHBpbmc+Ci0gICAgICAgICAgICA8YmluOnhtbGNvbXBvbmVudD50PXlvdXItdHlwZUBodHRwOi8vd3d3Lm15dGVzdC5jb20vPC9iaW46eG1sY29tcG9uZW50PgotICAgICAgICAgICAgPGJpbjpqYXZhdHlwZT5jb20ubXl0ZXN0LllvdXJDbGFzczwvYmluOmphdmF0eXBlPgotICAgICAgICA8L2JpbjptYXBwaW5nPgotICAgIDwvYmluOnhtbC10by1wb2pvPgotICAgIDxiaW46eG1sLXRvLXhtbG9iai8+Ci0gICAgPGJpbjpqYXZhLXRvLXhtbD4KLSAgICAgICAgPGJpbjptYXBwaW5nPgotICAgICAgICAgICAgPGJpbjp4bWxjb21wb25lbnQ+dD1teS10eXBlQGh0dHA6Ly93d3cubXl0ZXN0LmNvbS88L2Jpbjp4bWxjb21wb25lbnQ+Ci0gICAgICAgICAgICA8YmluOmphdmF0eXBlPmNvbS5teXRlc3QuTXlDbGFzczwvYmluOmphdmF0eXBlPgotICAgICAgICA8L2JpbjptYXBwaW5nPgotICAgICAgICA8YmluOm1hcHBpbmc+Ci0gICAgICAgICAgICA8YmluOnhtbGNvbXBvbmVudD50PXlvdXItdHlwZUBodHRwOi8vd3d3Lm15dGVzdC5jb20vPC9iaW46eG1sY29tcG9uZW50PgotICAgICAgICAgICAgPGJpbjpqYXZhdHlwZT5jb20ubXl0ZXN0LllvdXJDbGFzczwvYmluOmphdmF0eXBlPgotICAgICAgICA8L2JpbjptYXBwaW5nPgotICAgICAgICA8YmluOm1hcHBpbmc+Ci0gICAgICAgICAgICA8YmluOnhtbGNvbXBvbmVudD50PWN1c3RvbS1zdHJpbmdAaHR0cDovL3d3dy5teXRlc3QuY29tLzwvYmluOnhtbGNvbXBvbmVudD4KLSAgICAgICAgICAgIDxiaW46amF2YXR5cGU+amF2YS5sYW5nLlN0cmluZzwvYmluOmphdmF0eXBlPgotICAgICAgICA8L2JpbjptYXBwaW5nPgotICAgIDwvYmluOmphdmEtdG8teG1sPgotPC9iaW46YmluZGluZy1jb25maWc+CmRpZmYgLS1naXQgYS92Mi90ZXN0L2Nhc2VzL25hbWV3b3JsZC93b3JsZDEueG1sIGIvdjIvdGVzdC9jYXNlcy9uYW1ld29ybGQvd29ybGQxLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUyNTYxZi4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L2Nhc2VzL25hbWV3b3JsZC93b3JsZDEueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPG53Om5hbWV3b3JsZCB4bWxuczpudz0iaHR0cDovL29wZW51cmkub3JnL25hbWV3b3JsZCIKLSAgICAgICAgICAgICAgeG1sbnM6Zm9vPSJodHRwOi8vZm9vLmNvbS8iCi0gICAgICAgICAgICAgIHhtbG5zOmJhcj0iaHR0cDovL2Jhci5jb20vIj4KLQotICA8bnc6aXNsYW5kIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2Zvby5jb20vIj4KLSAgICA8bnc6bG9jYXRpb24gbmFtZT0iZm9vY2l0eSI+Ci0gICAgICA8bnc6cmVmZXJlbmNlIHRvPSJiYXI6YmFyY2l0eSIvPgotICAgICAgPG53OnJlZmVyZW5jZSB0bz0iZm9vOmZvb3Rvd24iLz4KLSAgICAgIDxudzpyZWZlcmVuY2UgdG89ImJhcjpiYXJ2aWxsYWdlIi8+Ci0gICAgPC9udzpsb2NhdGlvbj4KLSAgICA8bnc6bG9jYXRpb24gbmFtZT0iZm9vdG93biI+Ci0gICAgICA8bnc6cmVmZXJlbmNlIHRvPSJiYXI6YmFydG93biIvPgotICAgICAgPG53OnJlZmVyZW5jZSB0bz0iZm9vOmZvb3ZpbGxhZ2UiLz4KLSAgICA8L253OmxvY2F0aW9uPgotICAgIDxudzpsb2NhdGlvbiBuYW1lPSJmb292aWxsYWdlIj4KLSAgICAgIDxudzpyZWZlcmVuY2UgdG89ImJhcjpiYXJ2aWxsYWdlIi8+Ci0gICAgPC9udzpsb2NhdGlvbj4KLSAgPC9udzppc2xhbmQ+Ci0KLSAgPG53OmlzbGFuZCB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9iYXIuY29tLyI+Ci0gICAgPG53OmxvY2F0aW9uIG5hbWU9ImJhcmNpdHkiPgotICAgICAgPG53OnJlZmVyZW5jZSB0bz0iZm9vOmZvb2NpdHkiLz4KLSAgICAgIDxudzpyZWZlcmVuY2UgdG89ImJhcjpiYXJ0b3duIi8+Ci0gICAgICA8bnc6cmVmZXJlbmNlIHRvPSJmb286Zm9vdmlsbGFnZSIvPgotICAgIDwvbnc6bG9jYXRpb24+Ci0gICAgPG53OmxvY2F0aW9uIG5hbWU9ImJhcnRvd24iPgotICAgICAgPG53OnJlZmVyZW5jZSB0bz0iZm9vOmZvb3Rvd24iLz4KLSAgICAgIDxudzpyZWZlcmVuY2UgdG89ImJhcjpiYXJ2aWxsYWdlIi8+Ci0gICAgPC9udzpsb2NhdGlvbj4KLSAgICA8bnc6bG9jYXRpb24gbmFtZT0iYmFydmlsbGFnZSI+Ci0gICAgICA8bnc6cmVmZXJlbmNlIHRvPSJmb286Zm9vdmlsbGFnZSIvPgotICAgIDwvbnc6bG9jYXRpb24+Ci0gIDwvbnc6aXNsYW5kPgotPC9udzpuYW1ld29ybGQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvWG1sU2lnbmF0dXJlL3NpZ25hdHVyZS1leGFtcGxlLWRzYS54bWwgYi92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9YbWxTaWduYXR1cmUvc2lnbmF0dXJlLWV4YW1wbGUtZHNhLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNlYzQ5Ny4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9YbWxTaWduYXR1cmUvc2lnbmF0dXJlLWV4YW1wbGUtZHNhLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08U2lnbmF0dXJlIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIj4KLSAgPFNpZ25lZEluZm8+Ci0gICAgPENhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy14bWwtYzE0bi0yMDAxMDMxNSIgLz4KLSAgICA8U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI2RzYS1zaGExIiAvPgotICAgIDxSZWZlcmVuY2UgVVJJPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWwtc3R5bGVzaGVldCI+Ci0gICAgICA8RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3NoYTEiIC8+Ci0gICAgICA8RGlnZXN0VmFsdWU+NjBOdlp2dGRUQis3VW5sTHAvSDI0cDdoNGJzPTwvRGlnZXN0VmFsdWU+Ci0gICAgPC9SZWZlcmVuY2U+Ci0gIDwvU2lnbmVkSW5mbz4KLSAgPFNpZ25hdHVyZVZhbHVlPgotICAgIHFVQURETUhaa3llYnZSZExzKzZEdjdSdmdNTFJsVWFEQjRROXluOVhvSkE3OWEyODgyZmZUZz09Ci0gIDwvU2lnbmF0dXJlVmFsdWU+Ci0gIDxLZXlJbmZvPgotICAgIDxLZXlWYWx1ZT4KLSAgICAgIDxEU0FLZXlWYWx1ZT4KLSAgICAgICAgPFA+Ci0gICAgICAgICAgMmlZM3cwNjJzREIzL0RJbExXT2VHOSs0VXBtRFowZHlxUms5ZExsTlE2cWFYSTd0T3JqZElobTZuL2VPdzQ1QQotICAgICAgICAgIFF0dVlTcDZzcEN0OWNRY05CQWoyMkt2eWd2ZkpJSVhYOXNTUXJ1Z2ZHcWlmZVN2WTNWWDVTZDFqK3owTVNaL24KLSAgICAgICAgICA1ak50ODh1aDJDMTFTQXFYNm5yWFRZLzFSd2tvV1JOMjNTWWhPbGFHMGhVPQotICAgICAgICA8L1A+Ci0gICAgICAgIDxRPgotICAgICAgICAgIDlCNXlwTFk5cE1PbXR4Q2VUREhnd2RORmVHcz0KLSAgICAgICAgPC9RPgotICAgICAgICA8Rz4KLSAgICAgICAgICBNdUdBbHFlQjFheCt2eU8yK09zdWJqaGw3cEh4THU0N1JJSCsvTTUyRGpFU0E5S01Tcnd6c1l4OHlOUjJXb29CCi0gICAgICAgICAgeXJFMHQ2ZnUwVm5jSzdVSzhvbE80dDd3cHYyejRBRlFQUlZDS0Z3bzBxZ241YUtJa0lDR01sclJ5ODFhdmIyNwotICAgICAgICAgIHdHY1dvdGh4M2lQUE10Rlh0b0RxSzBKSXRhSTlSOHpjMW1zRmhNMUdLTVk9Ci0gICAgICAgIDwvRz4KLSAgICAgICAgPFk+Ci0gICAgICAgICAgY3RBOFlHeHJ0bmdnL3pLVnZxRU9lZm53bVZpRnp0Y25QQllQbEpzdmg2eUtJNGlEbTY4Zm5wNE1pM1JySjZiWgotICAgICAgICAgIEF5Z0ZyVUlRTHhMalYrT0p0Z0pBRXRvMHhBcytNZWh1cTFEa1NGRXBQM29EekNUT3NyT2lTMUR3UWU0b0liN3oKLSAgICAgICAgICBWay85bDdhUHRKTUhXMExWbE1kd1pORk5OSm9xTWNUMlpmQ1ByZnZZdlEwPQotICAgICAgICA8L1k+Ci0gICAgICA8L0RTQUtleVZhbHVlPgotICAgIDwvS2V5VmFsdWU+Ci0gICAgPFg1MDlEYXRhPgotICAgICAgPFg1MDlTdWJqZWN0TmFtZT4KLSAgICAgICAgQ049TWVybGluIEh1Z2hlcyxPPUJhbHRpbW9yZSBUZWNobm9sb2dpZXNcLCBMdGQuLFNUPUR1YmxpbixDPUlFCi0gICAgICA8L1g1MDlTdWJqZWN0TmFtZT4KLSAgICAgIDxYNTA5SXNzdWVyU2VyaWFsPgotICAgICAgICA8WDUwOUlzc3Vlck5hbWU+Ci0gICAgICAgICAgQ049VGVzdCBEU0EgQ0EsTz1CYWx0aW1vcmUgVGVjaG5vbG9naWVzXCwgTHRkLixTVD1EdWJsaW4sQz1JRQotICAgICAgICA8L1g1MDlJc3N1ZXJOYW1lPgotICAgICAgICA8WDUwOVNlcmlhbE51bWJlcj45NzA4NDk5MzY8L1g1MDlTZXJpYWxOdW1iZXI+Ci0gICAgICA8L1g1MDlJc3N1ZXJTZXJpYWw+Ci0gICAgICA8WDUwOUNlcnRpZmljYXRlPgotICAgICAgICBNSUlETnpDQ0F2V2dBd0lCQWdJRU9kMytrREFKQmdjcWhrak9PQVFETUZzeEN6QUpCZ05WQkFZVEFrbEZNUTh3Ci0gICAgICAgIERRWURWUVFJRXdaRWRXSnNhVzR4SlRBakJnTlZCQW9USEVKaGJIUnBiVzl5WlNCVVpXTm9ibTlzYjJkcFpYTXMKLSAgICAgICAgSUV4MFpDNHhGREFTQmdOVkJBTVRDMVJsYzNRZ1JGTkJJRU5CTUI0WERUQXdNVEF3TmpFMk16SXhOVm9YRFRBeAotICAgICAgICBNVEF3TmpFMk16SXhORm93WFRFTE1Ba0dBMVVFQmhNQ1NVVXhEekFOQmdOVkJBZ1RCa1IxWW14cGJqRWxNQ01HCi0gICAgICAgIEExVUVDaE1jUW1Gc2RHbHRiM0psSUZSbFkyaHViMnh2WjJsbGN5d2dUSFJrTGpFV01CUUdBMVVFQXhNTlRXVnkKLSAgICAgICAgYkdsdUlFaDFaMmhsY3pDQ0FiWXdnZ0VyQmdjcWhrak9PQVFCTUlJQkhnS0JnUURhSmpmRFRyYXdNSGY4TWlVdAotICAgICAgICBZNTRiMzdoU21ZTm5SM0twR1QxMHVVMURxcHBjanUwNnVOMGlHYnFmOTQ3RGprQkMyNWhLbnF5a0szMXhCdzBFCi0gICAgICAgIENQYllxL0tDOThrZ2hkZjJ4SkN1NkI4YXFKOTVLOWpkVmZsSjNXUDdQUXhKbitmbU0yM3p5NkhZTFhWSUNwZnEKLSAgICAgICAgZXRkTmovVkhDU2haRTNiZEppRTZWb2JTRlFJVkFQUWVjcVMyUGFURHByY1Fua3d4NE1IVFJYaHJBb0dBTXVHQQotICAgICAgICBscWVCMWF4K3Z5TzIrT3N1YmpobDdwSHhMdTQ3UklIKy9NNTJEakVTQTlLTVNyd3pzWXg4eU5SMldvb0J5ckUwCi0gICAgICAgIHQ2ZnUwVm5jSzdVSzhvbE80dDd3cHYyejRBRlFQUlZDS0Z3bzBxZ241YUtJa0lDR01sclJ5ODFhdmIyN3dHY1cKLSAgICAgICAgb3RoeDNpUFBNdEZYdG9EcUswSkl0YUk5Ujh6YzFtc0ZoTTFHS01ZRGdZUUFBb0dBY3RBOFlHeHJ0bmdnL3pLVgotICAgICAgICB2cUVPZWZud21WaUZ6dGNuUEJZUGxKc3ZoNnlLSTRpRG02OGZucDRNaTNScko2YlpBeWdGclVJUUx4TGpWK09KCi0gICAgICAgIHRnSkFFdG8weEFzK01laHVxMURrU0ZFcFAzb0R6Q1RPc3JPaVMxRHdRZTRvSWI3elZrLzlsN2FQdEpNSFcwTFYKLSAgICAgICAgbE1kd1pORk5OSm9xTWNUMlpmQ1ByZnZZdlEyalJ6QkZNQjRHQTFVZEVRUVhNQldCRTIxbGNteHBia0JpWVd4MAotICAgICAgICBhVzF2Y21VdWFXVXdEZ1lEVlIwUEFRSC9CQVFEQWdlQU1CTUdBMVVkSXdRTU1BcUFDRUpaUUcwS3dSYlBNQWtHCi0gICAgICAgIEJ5cUdTTTQ0QkFNRE1RQXdMZ0lWQUs0c2tXRUZZZ3JnZ2FKQTh2WUF3U2pnMTIrS0FoVUF3SFRvN3dkNHRFTncKLSAgICAgICAgOUxBS1BrbFEvNzRmSDE4PQotICAgICAgPC9YNTA5Q2VydGlmaWNhdGU+Ci0gICAgPC9YNTA5RGF0YT4KLSAgPC9LZXlJbmZvPgotPC9TaWduYXR1cmU+Ci0KZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL1htbFNpZ25hdHVyZS9zaWduYXR1cmUtZXhhbXBsZS1yc2EueG1sIGIvdjIvdGVzdC9jYXNlcy9zY2hlbWEvWG1sU2lnbmF0dXJlL3NpZ25hdHVyZS1leGFtcGxlLXJzYS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ODQ0NTkuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvWG1sU2lnbmF0dXJlL3NpZ25hdHVyZS1leGFtcGxlLXJzYS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPFNpZ25hdHVyZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyI+Ci0gIDxTaWduZWRJbmZvPgotICAgIDxDYW5vbmljYWxpemF0aW9uTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMS9SRUMteG1sLWMxNG4tMjAwMTAzMTUiIC8+Ci0gICAgPFNpZ25hdHVyZU1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNyc2Etc2hhMSIgLz4KLSAgICA8UmVmZXJlbmNlIFVSST0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sLXN0eWxlc2hlZXQiPgotICAgICAgPERpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNzaGExIiAvPgotICAgICAgPERpZ2VzdFZhbHVlPjYwTnZadnRkVEIrN1VubExwL0gyNHA3aDRicz08L0RpZ2VzdFZhbHVlPgotICAgIDwvUmVmZXJlbmNlPgotICA8L1NpZ25lZEluZm8+Ci0gIDxTaWduYXR1cmVWYWx1ZT4KLSAgICBqdVM1UmhKODg0cW9GUjhmbFZYZC9yYnJTRFZHbjQwQ2FwZ0I3cWVRaVQrcnIwTmVrRVE2QkhoVUE4ZFQzK0JDCi0gICAgVEJVUUkwZEJqbG1sOWx3ekVOWHZTODN6UkVDanpYYk1SVFV0VlppUFpHMnBxS1BuTDJZVTNBOTY0NVVDalRYVQotICAgICtqZ0Z1bXY3azc4aGllQUdEek5jaStQUTlLUm1tLy9pY1Q3SmFZenRndDQ9Ci0gIDwvU2lnbmF0dXJlVmFsdWU+Ci0gIDxLZXlJbmZvPgotICAgIDxLZXlWYWx1ZT4KLSAgICAgIDxSU0FLZXlWYWx1ZT4KLSAgICAgICAgPE1vZHVsdXM+Ci0gICAgICAgICAgdUNpdWtwZ09hT21ycTFmUFVUSDNDQVh4dUZtUGpzbVM0am5US3hydjB3MUpLY1h0SjJNM2FrYVYxZC9rYXJ2SgotICAgICAgICAgIGxtZWFvMjBqTnk5cisvdkt3aWJqTTc3RiszYklrZU1FR21BSVVuRmNpSmtSK2loTzdiNGNUdVluRWk4eEh0dTQKLSAgICAgICAgICBpTW42R09EQm9FenFGUVlkZDhwNHZyWkJzdnM0NG5UclM4cXl5aGJhNjQ4PQotICAgICAgICA8L01vZHVsdXM+Ci0gICAgICAgIDxFeHBvbmVudD4KLSAgICAgICAgICBBUUFCCi0gICAgICAgIDwvRXhwb25lbnQ+Ci0gICAgICA8L1JTQUtleVZhbHVlPgotICAgIDwvS2V5VmFsdWU+Ci0gICAgPFg1MDlEYXRhPgotICAgICAgPFg1MDlTdWJqZWN0TmFtZT4KLSAgICAgICAgQ049TWVybGluIEh1Z2hlcyxPPUJhbHRpbW9yZSBUZWNobm9sb2dpZXNcLCBMdGQuLFNUPUR1YmxpbixDPUlFCi0gICAgICA8L1g1MDlTdWJqZWN0TmFtZT4KLSAgICAgIDxYNTA5SXNzdWVyU2VyaWFsPgotICAgICAgICA8WDUwOUlzc3Vlck5hbWU+Ci0gICAgICAgICAgQ049VGVzdCBSU0EgQ0EsTz1CYWx0aW1vcmUgVGVjaG5vbG9naWVzXCwgTHRkLixTVD1EdWJsaW4sQz1JRQotICAgICAgICA8L1g1MDlJc3N1ZXJOYW1lPgotICAgICAgICA8WDUwOVNlcmlhbE51bWJlcj45NzA4NDk5Mjg8L1g1MDlTZXJpYWxOdW1iZXI+Ci0gICAgICA8L1g1MDlJc3N1ZXJTZXJpYWw+Ci0gICAgICA8WDUwOUNlcnRpZmljYXRlPgotICAgICAgICBNSUlDZURDQ0FlR2dBd0lCQWdJRU9kMytpREFOQmdrcWhraUc5dzBCQVFRRkFEQmJNUXN3Q1FZRFZRUUdFd0pKCi0gICAgICAgIFJURVBNQTBHQTFVRUNCTUdSSFZpYkdsdU1TVXdJd1lEVlFRS0V4eENZV3gwYVcxdmNtVWdWR1ZqYUc1dmJHOW4KLSAgICAgICAgYVdWekxDQk1kR1F1TVJRd0VnWURWUVFERXd0VVpYTjBJRkpUUVNCRFFUQWVGdzB3TURFd01EWXhOak15TURkYQotICAgICAgICBGdzB3TVRFd01EWXhOak15TURSYU1GMHhDekFKQmdOVkJBWVRBa2xGTVE4d0RRWURWUVFJRXdaRWRXSnNhVzR4Ci0gICAgICAgIEpUQWpCZ05WQkFvVEhFSmhiSFJwYlc5eVpTQlVaV05vYm05c2IyZHBaWE1zSUV4MFpDNHhGakFVQmdOVkJBTVQKLSAgICAgICAgRFUxbGNteHBiaUJJZFdkb1pYTXdnWjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBTGdvcnBLWQotICAgICAgICBEbWpwcTZ0WHoxRXg5d2dGOGJoWmo0N0prdUk1MHlzYTc5TU5TU25GN1Nkak4ycEdsZFhmNUdxN3laWm5tcU50Ci0gICAgICAgIEl6Y3ZhL3Y3eXNJbTR6Tyt4ZnQyeUpIakJCcGdDRkp4WElpWkVmb29UdTIrSEU3bUp4SXZNUjdidUlqSitoamcKLSAgICAgICAgd2FCTTZoVUdIWGZLZUw2MlFiTDdPT0owNjB2S3Nzb1cydXVQQWdNQkFBR2pSekJGTUI0R0ExVWRFUVFYTUJXQgotICAgICAgICBFMjFsY214cGJrQmlZV3gwYVcxdmNtVXVhV1V3RGdZRFZSMFBBUUgvQkFRREFnZUFNQk1HQTFVZEl3UU1NQXFBCi0gICAgICAgIENFbmdyWklWZ3UwM01BMEdDU3FHU0liM0RRRUJCQVVBQTRHQkFISnU0SlZxL1duWEsyb3FxZkxXcWVzNXZIT3QKLSAgICAgICAgZlgvWmhDakZ5RE1oenNsSThhbTYyZ1plZHdaOUlJWkl3bE5STXZFRFFCMnpkcy9lRUJuSUFRUGwveVJMQ0xPZgotICAgICAgICBabmJBOFBYcmJGUDVpZ3MzcVFXU2NCVWpaVmppazc0OEhVMnNVVlpPYTkwYzBtSmwydkpzL1J3eUxXNy91Q0FmCi0gICAgICAgIEMvSS9rOXhHcjdmbmVvSVcKLSAgICAgIDwvWDUwOUNlcnRpZmljYXRlPgotICAgIDwvWDUwOURhdGE+Ci0gIDwvS2V5SW5mbz4KLTwvU2lnbmF0dXJlPgotCmRpZmYgLS1naXQgYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9YbWxTaWduYXR1cmUvc2lnbmF0dXJlLWV4YW1wbGUueG1sIGIvdjIvdGVzdC9jYXNlcy9zY2hlbWEvWG1sU2lnbmF0dXJlL3NpZ25hdHVyZS1leGFtcGxlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTlhNjk5NC4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9YbWxTaWduYXR1cmUvc2lnbmF0dXJlLWV4YW1wbGUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJz8+Ci08IURPQ1RZUEUgU2lnbmF0dXJlIFNZU1RFTSAieG1sZHNpZy1jb3JlLXNjaGVtYS5kdGQiIFsKLTwhRU5USVRZIGRzaWcgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiPgotICAgPCFFTlRJVFkgJSBTaWduYXR1cmVQcm9wZXJ0eS5BTlkgJ3wgdHM6dGltZXN0YW1wJz4KLSAgIDwhRUxFTUVOVCB0czp0aW1lc3RhbXAgKCNQQ0RBVEEpPgotICAgPCFBVFRMSVNUIHRzOnRpbWVzdGFtcAotICAgICAgICAgICAgIHhtbG5zOnRzCUNEQVRBCSNGSVhFRCAgICdodHRwOi8vd3d3LmV4YW1wbGUub3JnL3JmYy9yZmN4eHh4LnR4dCc+Ci0gICA8IUFUVExJU1QgU2lnbmF0dXJlCi0gICAgICAgICAgICAgeG1sbnM6eHNpICBDREFUQSAjRklYRUQgICAnaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UnCi0gICAgICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uCUNEQVRBCSNSRVFVSVJFRD4KLV0+Ci08U2lnbmF0dXJlIElkPSJNeUZpcnN0U2lnbmF0dXJlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyIKLSAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMKLSAgIHhtbGRzaWctY29yZS1zY2hlbWEueHNkIj4KLSAgPFNpZ25lZEluZm8+IAotCSA8Q2Fub25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvV0QteG1sLWMxNG4tMjAwMDA3MTAiPgotCSA8L0Nhbm9uaWNhbGl6YXRpb25NZXRob2Q+Ci0JIDxTaWduYXR1cmVNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjZHNhIj4KLQkgPC9TaWduYXR1cmVNZXRob2Q+Ci0JIDxSZWZlcmVuY2UgVVJJPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWwtc3R5bGVzaGVldC8iPiAKLQkJPFRyYW5zZm9ybXM+IAotCQkgIDxUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjYmFzZTY0Ii8+Ci0JCSAgPFRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyNudWxsIi8+Ci0JCTwvVHJhbnNmb3Jtcz4gCi0JCTxEaWdlc3RNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjc2hhMSI+IAotCQk8L0RpZ2VzdE1ldGhvZD4KLQkJPERpZ2VzdFZhbHVlPmo2bHd4M3J2RVBPMHZLdE11cDROYmVWdThuaz08L0RpZ2VzdFZhbHVlPiAKLQkgPC9SZWZlcmVuY2U+IAotCSA8UmVmZXJlbmNlIFVSST0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbC1uYW1lcy8iPiAKLQkJPFRyYW5zZm9ybXM+IAotCQkgIDxUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjYmFzZTY0Ii8+IAotCQk8L1RyYW5zZm9ybXM+IAotCQk8RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3NoYTEiPiAKLQkJPC9EaWdlc3RNZXRob2Q+Ci0JCTxEaWdlc3RWYWx1ZT5VclhMRExCSXRhNnNrb1Y1L0E4UTM4R0V3NDQ9PC9EaWdlc3RWYWx1ZT4gCi0JIDwvUmVmZXJlbmNlPiAJIAotICA8L1NpZ25lZEluZm8+IAotICA8U2lnbmF0dXJlVmFsdWU+TUMwQ0ZGclZMdFJsa01jM0Rhb240QnFxbmtoQ09sRWFBaFVBazhwSDFpUk5LK3ExSStzaXNEVHoyVEZFQUxFPTwvU2lnbmF0dXJlVmFsdWU+IAotICA8S2V5SW5mbz4KLSAgICA8S2V5VmFsdWU+Ci0gICAgICA8RFNBS2V5VmFsdWU+Ci0gICAgICAgIDxQPi4uLjwvUD48UT4uLi48L1E+PEc+Li4uPC9HPjxZPi4uLjwvWT4KLSAgICAgIDwvRFNBS2V5VmFsdWU+IAotICAgIDwvS2V5VmFsdWU+IAotICA8L0tleUluZm8+Ci0gIDxPYmplY3Q+Ci0gICAgIDxTaWduYXR1cmVQcm9wZXJ0aWVzPgotICAgICAgICA8U2lnbmF0dXJlUHJvcGVydHkgVGFyZ2V0PSIjTXlGaXJzdFNpZ25hdHVyZSI+Ci0gICAgICAgICAgPHRzOnRpbWVzdGFtcCB4bWxuczp0cz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9yZmMvcmZjeHh4eC50eHQiPgotICAgICAgICAgICB0aGlzIGlzIGEgdGVzdCBvZiB0aGUgbWl4ZWQgY29udGVudCBtb2RlbDwvdHM6dGltZXN0YW1wPgotICAgICAgICA8L1NpZ25hdHVyZVByb3BlcnR5PgotICAgICAgPC9TaWduYXR1cmVQcm9wZXJ0aWVzPgotICA8L09iamVjdD4KLTwvU2lnbmF0dXJlPgpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvWG1sU2lnbmF0dXJlL3hrbXMtMS4wLndzZGwgYi92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9YbWxTaWduYXR1cmUveGttcy0xLjAud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTkwODdhZC4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9YbWxTaWduYXR1cmUveGttcy0xLjAud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDY4MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi0NCi08ZGVmaW5pdGlvbnMgbmFtZT0iWE1MS2V5TWFuYWdlbWVudCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIg0KLSB4bWxuczpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzEwL1hNTFNjaGVtYSINCi0geG1sbnM6aHR0cD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9odHRwLyINCi0geG1sbnM6bWltZT0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9taW1lLyINCi0geG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyIgDQotIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIg0KLSB4bWxuczp4a21zPSJodHRwOi8vd3d3LnhrbXMub3JnL3NjaGVtYS94a21zLTIwMDEtMDEtMjAiDQotIHhtbG5zOnRucz0iaHR0cDovL3d3dy54a21zLm9yZy9zY2hlbWEveGttcy0yMDAxLTAxLTIwIg0KLSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cueGttcy5vcmcvc2NoZW1hL3hrbXMtMjAwMS0wMS0yMCI+DQotDQotICA8dHlwZXM+DQotDQotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiDQotICAgICAgICB4bWxuczpkcz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyINCi0gICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyINCi0gICAgICAgIHZlcnNpb249IjAuMSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPiANCi0NCi08IS0tIEJhc2ljIFR5cGVzIERlZmluZWQgZm9yIFNpZ25hdHVyZXMgLS0+DQotDQotPHNpbXBsZVR5cGUgbmFtZT0iQ3J5cHRvQmluYXJ5Ij4NCi0gIDxyZXN0cmljdGlvbiBiYXNlPSJiYXNlNjRCaW5hcnkiPg0KLSAgPC9yZXN0cmljdGlvbj4NCi08L3NpbXBsZVR5cGU+DQotDQotPCEtLSBTdGFydCBTaWduYXR1cmUgLS0+DQotDQotPGVsZW1lbnQgbmFtZT0iU2lnbmF0dXJlIiB0eXBlPSJkczpTaWduYXR1cmVUeXBlIi8+DQotPGNvbXBsZXhUeXBlIG5hbWU9IlNpZ25hdHVyZVR5cGUiPg0KLSAgPHNlcXVlbmNlPiANCi0gICAgPGVsZW1lbnQgcmVmPSJkczpTaWduZWRJbmZvIi8+IA0KLSAgICA8ZWxlbWVudCByZWY9ImRzOlNpZ25hdHVyZVZhbHVlIi8+IA0KLSAgICA8ZWxlbWVudCByZWY9ImRzOktleUluZm8iIG1pbk9jY3Vycz0iMCIvPiANCi0gICAgPGVsZW1lbnQgcmVmPSJkczpPYmplY3QiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4gDQotICA8L3NlcXVlbmNlPiAgDQotICA8YXR0cmlidXRlIG5hbWU9IklkIiB0eXBlPSJJRCIgdXNlPSJvcHRpb25hbCIvPg0KLTwvY29tcGxleFR5cGU+DQotDQotICA8ZWxlbWVudCBuYW1lPSJTaWduYXR1cmVWYWx1ZSIgdHlwZT0iZHM6U2lnbmF0dXJlVmFsdWVUeXBlIi8+IA0KLSAgPGNvbXBsZXhUeXBlIG5hbWU9IlNpZ25hdHVyZVZhbHVlVHlwZSI+DQotICAgIDxzaW1wbGVDb250ZW50Pg0KLSAgICAgIDxleHRlbnNpb24gYmFzZT0iYmFzZTY0QmluYXJ5Ij4NCi0gICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iSWQiIHR5cGU9IklEIiB1c2U9Im9wdGlvbmFsIi8+DQotICAgICAgPC9leHRlbnNpb24+DQotICAgIDwvc2ltcGxlQ29udGVudD4NCi0gIDwvY29tcGxleFR5cGU+DQotDQotPCEtLSBTdGFydCBTaWduZWRJbmZvIC0tPg0KLQ0KLTxlbGVtZW50IG5hbWU9IlNpZ25lZEluZm8iIHR5cGU9ImRzOlNpZ25lZEluZm9UeXBlIi8+DQotPGNvbXBsZXhUeXBlIG5hbWU9IlNpZ25lZEluZm9UeXBlIj4NCi0gIDxzZXF1ZW5jZT4gDQotICAgIDxlbGVtZW50IHJlZj0iZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCIvPiANCi0gICAgPGVsZW1lbnQgcmVmPSJkczpTaWduYXR1cmVNZXRob2QiLz4gDQotICAgIDxlbGVtZW50IHJlZj0iZHM6UmVmZXJlbmNlIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPiANCi0gIDwvc2VxdWVuY2U+ICANCi0gIDxhdHRyaWJ1dGUgbmFtZT0iSWQiIHR5cGU9IklEIiB1c2U9Im9wdGlvbmFsIi8+IA0KLTwvY29tcGxleFR5cGU+DQotDQotICA8ZWxlbWVudCBuYW1lPSJDYW5vbmljYWxpemF0aW9uTWV0aG9kIiB0eXBlPSJkczpDYW5vbmljYWxpemF0aW9uTWV0aG9kVHlwZSIvPiANCi0gIDxjb21wbGV4VHlwZSBuYW1lPSJDYW5vbmljYWxpemF0aW9uTWV0aG9kVHlwZSIgbWl4ZWQ9InRydWUiPg0KLSAgICA8c2VxdWVuY2U+DQotICAgICAgPGFueSBuYW1lc3BhY2U9IiMjYW55IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+DQotICAgICAgPCEtLSAoMCx1bmJvdW5kZWQpIGVsZW1lbnRzIGZyb20gKDEsMSkgbmFtZXNwYWNlIC0tPg0KLSAgICA8L3NlcXVlbmNlPg0KLSAgICA8YXR0cmlidXRlIG5hbWU9IkFsZ29yaXRobSIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+IA0KLSAgPC9jb21wbGV4VHlwZT4NCi0NCi0gIDxlbGVtZW50IG5hbWU9IlNpZ25hdHVyZU1ldGhvZCIgdHlwZT0iZHM6U2lnbmF0dXJlTWV0aG9kVHlwZSIvPg0KLSAgPGNvbXBsZXhUeXBlIG5hbWU9IlNpZ25hdHVyZU1ldGhvZFR5cGUiIG1peGVkPSJ0cnVlIj4NCi0gICAgPHNlcXVlbmNlPg0KLSAgICAgIDxlbGVtZW50IG5hbWU9IkhNQUNPdXRwdXRMZW5ndGgiIG1pbk9jY3Vycz0iMCIgdHlwZT0iZHM6SE1BQ091dHB1dExlbmd0aFR5cGUiLz4NCi0gICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPg0KLSAgICAgIDwhLS0gKDAsdW5ib3VuZGVkKSBlbGVtZW50cyBmcm9tICgxLDEpIGV4dGVybmFsIG5hbWVzcGFjZSAtLT4NCi0gICAgPC9zZXF1ZW5jZT4NCi0gICAgPGF0dHJpYnV0ZSBuYW1lPSJBbGdvcml0aG0iIHR5cGU9ImFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPiANCi0gIDwvY29tcGxleFR5cGU+DQotDQotPCEtLSBTdGFydCBSZWZlcmVuY2UgLS0+DQotDQotPGVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlIiB0eXBlPSJkczpSZWZlcmVuY2VUeXBlIi8+DQotPGNvbXBsZXhUeXBlIG5hbWU9IlJlZmVyZW5jZVR5cGUiPg0KLSAgPHNlcXVlbmNlPiANCi0gICAgPGVsZW1lbnQgcmVmPSJkczpUcmFuc2Zvcm1zIiBtaW5PY2N1cnM9IjAiLz4gDQotICAgIDxlbGVtZW50IHJlZj0iZHM6RGlnZXN0TWV0aG9kIi8+IA0KLSAgICA8ZWxlbWVudCByZWY9ImRzOkRpZ2VzdFZhbHVlIi8+IA0KLSAgPC9zZXF1ZW5jZT4NCi0gIDxhdHRyaWJ1dGUgbmFtZT0iSWQiIHR5cGU9IklEIiB1c2U9Im9wdGlvbmFsIi8+IA0KLSAgPGF0dHJpYnV0ZSBuYW1lPSJVUkkiIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIvPiANCi0gIDxhdHRyaWJ1dGUgbmFtZT0iVHlwZSIgdHlwZT0iYW55VVJJIiB1c2U9Im9wdGlvbmFsIi8+IA0KLTwvY29tcGxleFR5cGU+DQotDQotICA8ZWxlbWVudCBuYW1lPSJUcmFuc2Zvcm1zIiB0eXBlPSJkczpUcmFuc2Zvcm1zVHlwZSIvPg0KLSAgPGNvbXBsZXhUeXBlIG5hbWU9IlRyYW5zZm9ybXNUeXBlIj4NCi0gICAgPHNlcXVlbmNlPg0KLSAgICAgIDxlbGVtZW50IHJlZj0iZHM6VHJhbnNmb3JtIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPiAgDQotICAgIDwvc2VxdWVuY2U+DQotICA8L2NvbXBsZXhUeXBlPg0KLQ0KLSAgPGVsZW1lbnQgbmFtZT0iVHJhbnNmb3JtIiB0eXBlPSJkczpUcmFuc2Zvcm1UeXBlIi8+DQotICA8Y29tcGxleFR5cGUgbmFtZT0iVHJhbnNmb3JtVHlwZSIgbWl4ZWQ9InRydWUiPg0KLSAgICA8Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPiANCi0gICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4NCi0gICAgICA8IS0tICgxLDEpIGVsZW1lbnRzIGZyb20gKDAsdW5ib3VuZGVkKSBuYW1lc3BhY2VzIC0tPg0KLSAgICAgIDxlbGVtZW50IG5hbWU9IlhQYXRoIiB0eXBlPSJzdHJpbmciLz4gDQotICAgIDwvY2hvaWNlPg0KLSAgICA8YXR0cmlidXRlIG5hbWU9IkFsZ29yaXRobSIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+IA0KLSAgPC9jb21wbGV4VHlwZT4NCi0NCi08IS0tIEVuZCBSZWZlcmVuY2UgLS0+DQotDQotPGVsZW1lbnQgbmFtZT0iRGlnZXN0TWV0aG9kIiB0eXBlPSJkczpEaWdlc3RNZXRob2RUeXBlIi8+DQotPGNvbXBsZXhUeXBlIG5hbWU9IkRpZ2VzdE1ldGhvZFR5cGUiIG1peGVkPSJ0cnVlIj4gDQotICA8c2VxdWVuY2U+DQotICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPg0KLSAgPC9zZXF1ZW5jZT4gICAgDQotICA8YXR0cmlidXRlIG5hbWU9IkFsZ29yaXRobSIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+IA0KLTwvY29tcGxleFR5cGU+DQotDQotPGVsZW1lbnQgbmFtZT0iRGlnZXN0VmFsdWUiIHR5cGU9ImRzOkRpZ2VzdFZhbHVlVHlwZSIvPg0KLTxzaW1wbGVUeXBlIG5hbWU9IkRpZ2VzdFZhbHVlVHlwZSI+DQotICA8cmVzdHJpY3Rpb24gYmFzZT0iYmFzZTY0QmluYXJ5Ii8+DQotPC9zaW1wbGVUeXBlPg0KLQ0KLTwhLS0gRW5kIFNpZ25lZEluZm8gLS0+DQotDQotPCEtLSBTdGFydCBLZXlJbmZvIC0tPg0KLQ0KLTxlbGVtZW50IG5hbWU9IktleUluZm8iIHR5cGU9ImRzOktleUluZm9UeXBlIi8+IA0KLQ0KLTxjb21wbGV4VHlwZSBuYW1lPSJLZXlJbmZvVHlwZSIgbWl4ZWQ9InRydWUiPg0KLSAgPHNlcXVlbmNlPg0KLTwhLS0gICAgPGVsZW1lbnQgcmVmPSJkczpLZXlOYW1lIi8+ICAgICAtLT4NCi0gICAgPGVsZW1lbnQgcmVmPSJkczpLZXlOYW1lIi8+DQotICAgIDxlbGVtZW50IHJlZj0iZHM6S2V5VmFsdWUiLz4gDQotICAgIDxlbGVtZW50IHJlZj0iZHM6UmV0cmlldmFsTWV0aG9kIi8+IA0KLSAgICA8ZWxlbWVudCByZWY9ImRzOlg1MDlEYXRhIi8+IA0KLSAgICA8ZWxlbWVudCByZWY9ImRzOlBHUERhdGEiLz4gDQotICAgIDxlbGVtZW50IHJlZj0iZHM6U1BLSURhdGEiLz4NCi0gICAgPGVsZW1lbnQgcmVmPSJkczpNZ210RGF0YSIvPg0KLSAgICA8YW55IHByb2Nlc3NDb250ZW50cz0ibGF4IiBuYW1lc3BhY2U9IiMjb3RoZXIiLz4gIA0KLSAgICA8IS0tICgxLDEpIGVsZW1lbnRzIGZyb20gKDAsdW5ib3VuZGVkKSBuYW1lc3BhY2VzIC0tPg0KLSAgPC9zZXF1ZW5jZT4NCi0gIDxhdHRyaWJ1dGUgbmFtZT0iSWQiIHR5cGU9IklEIiB1c2U9Im9wdGlvbmFsIi8+IA0KLTwvY29tcGxleFR5cGU+DQotDQotICA8ZWxlbWVudCBuYW1lPSJLZXlOYW1lIiB0eXBlPSJzdHJpbmciLz4NCi0gIDxlbGVtZW50IG5hbWU9Ik1nbXREYXRhIiB0eXBlPSJzdHJpbmciLz4NCi0NCi0gIDxlbGVtZW50IG5hbWU9IktleVZhbHVlIiB0eXBlPSJkczpLZXlWYWx1ZVR5cGUiLz4gDQotICA8Y29tcGxleFR5cGUgbmFtZT0iS2V5VmFsdWVUeXBlIiBtaXhlZD0idHJ1ZSI+DQotICAgPGNob2ljZT4NCi0gICAgIDxlbGVtZW50IHJlZj0iZHM6RFNBS2V5VmFsdWUiLz4NCi0gICAgIDxlbGVtZW50IHJlZj0iZHM6UlNBS2V5VmFsdWUiLz4NCi0gICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPg0KLSAgIDwvY2hvaWNlPg0KLSAgPC9jb21wbGV4VHlwZT4NCi0NCi0gIDxlbGVtZW50IG5hbWU9IlJldHJpZXZhbE1ldGhvZCIgdHlwZT0iZHM6UmV0cmlldmFsTWV0aG9kVHlwZSIvPiANCi0gIDxjb21wbGV4VHlwZSBuYW1lPSJSZXRyaWV2YWxNZXRob2RUeXBlIj4NCi0gICAgPHNlcXVlbmNlPg0KLSAgICAgIDxlbGVtZW50IG5hbWU9IlRyYW5zZm9ybXMiIHR5cGU9ImRzOlRyYW5zZm9ybXNUeXBlIiBtaW5PY2N1cnM9IjAiLz4gDQotICAgIDwvc2VxdWVuY2U+ICANCi0gICAgPGF0dHJpYnV0ZSBuYW1lPSJVUkkiIHR5cGU9ImFueVVSSSIvPg0KLSAgICA8YXR0cmlidXRlIG5hbWU9IlR5cGUiIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIvPg0KLSAgPC9jb21wbGV4VHlwZT4NCi0NCi08IS0tIFN0YXJ0IFg1MDlEYXRhIC0tPg0KLQ0KLTxlbGVtZW50IG5hbWU9Ilg1MDlEYXRhIiB0eXBlPSJkczpYNTA5RGF0YVR5cGUiLz4gDQotPGNvbXBsZXhUeXBlIG5hbWU9Ilg1MDlEYXRhVHlwZSI+DQotICA8c2VxdWVuY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPg0KLSAgICA8Y2hvaWNlPg0KLSAgICAgIDxlbGVtZW50IG5hbWU9Ilg1MDlJc3N1ZXJTZXJpYWwiIHR5cGU9ImRzOlg1MDlJc3N1ZXJTZXJpYWxUeXBlIi8+DQotICAgICAgPGVsZW1lbnQgbmFtZT0iWDUwOVNLSSIgdHlwZT0iYmFzZTY0QmluYXJ5Ii8+DQotICAgICAgPGVsZW1lbnQgbmFtZT0iWDUwOVN1YmplY3ROYW1lIiB0eXBlPSJzdHJpbmciLz4NCi0gICAgICA8ZWxlbWVudCBuYW1lPSJYNTA5Q2VydGlmaWNhdGUiIHR5cGU9ImJhc2U2NEJpbmFyeSIvPg0KLSAgICAgIDxlbGVtZW50IG5hbWU9Ilg1MDlDUkwiIHR5cGU9ImJhc2U2NEJpbmFyeSIvPg0KLSAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPg0KLSAgICA8L2Nob2ljZT4NCi0gIDwvc2VxdWVuY2U+DQotPC9jb21wbGV4VHlwZT4NCi0NCi08Y29tcGxleFR5cGUgbmFtZT0iWDUwOUlzc3VlclNlcmlhbFR5cGUiPiANCi0gIDxzZXF1ZW5jZT4gDQotICAgIDxlbGVtZW50IG5hbWU9Ilg1MDlJc3N1ZXJOYW1lIiB0eXBlPSJzdHJpbmciLz4gDQotICAgIDxlbGVtZW50IG5hbWU9Ilg1MDlTZXJpYWxOdW1iZXIiIHR5cGU9ImludGVnZXIiLz4gDQotICA8L3NlcXVlbmNlPg0KLTwvY29tcGxleFR5cGU+DQotDQotPCEtLSBFbmQgWDUwOURhdGEgLS0+DQotDQotPCEtLSBCZWdpbiBQR1BEYXRhIC0tPg0KLQ0KLTxlbGVtZW50IG5hbWU9IlBHUERhdGEiIHR5cGU9ImRzOlBHUERhdGFUeXBlIi8+IA0KLTxjb21wbGV4VHlwZSBuYW1lPSJQR1BEYXRhVHlwZSI+IA0KLSAgPGNob2ljZT4NCi0gICAgPHNlcXVlbmNlPg0KLSAgICAgIDxlbGVtZW50IG5hbWU9IlBHUEtleUlEIiB0eXBlPSJiYXNlNjRCaW5hcnkiLz4gDQotICAgICAgPGVsZW1lbnQgbmFtZT0iUEdQS2V5UGFja2V0IiB0eXBlPSJiYXNlNjRCaW5hcnkiIG1pbk9jY3Vycz0iMCIvPiANCi0gICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCINCi0gICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4NCi0gICAgPC9zZXF1ZW5jZT4NCi0gIDwvY2hvaWNlPg0KLTwvY29tcGxleFR5cGU+DQotDQotPCEtLSBFbmQgUEdQRGF0YSAtLT4NCi0NCi08IS0tIEJlZ2luIFNQS0lEYXRhIC0tPg0KLQ0KLTxlbGVtZW50IG5hbWU9IlNQS0lEYXRhIiB0eXBlPSJkczpTUEtJRGF0YVR5cGUiLz4gDQotPGNvbXBsZXhUeXBlIG5hbWU9IlNQS0lEYXRhVHlwZSI+DQotICA8c2VxdWVuY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPg0KLSAgICA8ZWxlbWVudCBuYW1lPSJTUEtJU2V4cCIgdHlwZT0iYmFzZTY0QmluYXJ5Ii8+DQotICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIi8+DQotICA8L3NlcXVlbmNlPg0KLTwvY29tcGxleFR5cGU+IA0KLQ0KLTwhLS0gRW5kIFNQS0lEYXRhIC0tPg0KLQ0KLTwhLS0gRW5kIEtleUluZm8gLS0+DQotDQotPCEtLSBTdGFydCBPYmplY3QgKE1hbmlmZXN0LCBTaWduYXR1cmVQcm9wZXJ0eSkgLS0+DQotDQotPGVsZW1lbnQgbmFtZT0iT2JqZWN0IiB0eXBlPSJkczpPYmplY3RUeXBlIi8+IA0KLTxjb21wbGV4VHlwZSBuYW1lPSJPYmplY3RUeXBlIiBtaXhlZD0idHJ1ZSI+DQotICA8c2VxdWVuY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+DQotICAgIDxhbnkgbmFtZXNwYWNlPSIjI2FueSIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4NCi0gIDwvc2VxdWVuY2U+DQotICA8YXR0cmlidXRlIG5hbWU9IklkIiB0eXBlPSJJRCIgdXNlPSJvcHRpb25hbCIvPiANCi0gIDxhdHRyaWJ1dGUgbmFtZT0iTWltZVR5cGUiIHR5cGU9InN0cmluZyIgdXNlPSJvcHRpb25hbCIvPiA8IS0tIGFkZCBhIGdyZXAgZmFjZXQgLS0+DQotICA8YXR0cmlidXRlIG5hbWU9IkVuY29kaW5nIiB0eXBlPSJhbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4gDQotPC9jb21wbGV4VHlwZT4NCi0NCi08ZWxlbWVudCBuYW1lPSJNYW5pZmVzdCIgdHlwZT0iZHM6TWFuaWZlc3RUeXBlIi8+IA0KLTxjb21wbGV4VHlwZSBuYW1lPSJNYW5pZmVzdFR5cGUiPg0KLSAgPHNlcXVlbmNlPg0KLSAgICA8ZWxlbWVudCByZWY9ImRzOlJlZmVyZW5jZSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4gDQotICA8L3NlcXVlbmNlPg0KLSAgPGF0dHJpYnV0ZSBuYW1lPSJJZCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4gDQotPC9jb21wbGV4VHlwZT4NCi0NCi08ZWxlbWVudCBuYW1lPSJTaWduYXR1cmVQcm9wZXJ0aWVzIiB0eXBlPSJkczpTaWduYXR1cmVQcm9wZXJ0aWVzVHlwZSIvPiANCi08Y29tcGxleFR5cGUgbmFtZT0iU2lnbmF0dXJlUHJvcGVydGllc1R5cGUiPg0KLSAgPHNlcXVlbmNlPg0KLSAgICA8ZWxlbWVudCByZWY9ImRzOlNpZ25hdHVyZVByb3BlcnR5IiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPiANCi0gIDwvc2VxdWVuY2U+DQotICA8YXR0cmlidXRlIG5hbWU9IklkIiB0eXBlPSJJRCIgdXNlPSJvcHRpb25hbCIvPiANCi08L2NvbXBsZXhUeXBlPg0KLQ0KLSAgIDxlbGVtZW50IG5hbWU9IlNpZ25hdHVyZVByb3BlcnR5IiB0eXBlPSJkczpTaWduYXR1cmVQcm9wZXJ0eVR5cGUiLz4gDQotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlNpZ25hdHVyZVByb3BlcnR5VHlwZSIgbWl4ZWQ9InRydWUiPg0KLSAgICAgPGNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+DQotICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPg0KLSAgICAgICA8IS0tICgxLDEpIGVsZW1lbnRzIGZyb20gKDEsdW5ib3VuZGVkKSBuYW1lc3BhY2VzIC0tPg0KLSAgICAgPC9jaG9pY2U+DQotICAgICA8YXR0cmlidXRlIG5hbWU9IlRhcmdldCIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+IA0KLSAgICAgPGF0dHJpYnV0ZSBuYW1lPSJJZCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4gDQotICAgPC9jb21wbGV4VHlwZT4NCi0NCi08IS0tIEVuZCBPYmplY3QgKE1hbmlmZXN0LCBTaWduYXR1cmVQcm9wZXJ0eSkgLS0+DQotDQotPCEtLSBTdGFydCBBbGdvcml0aG0gUGFyYW1ldGVycyAtLT4NCi0NCi08c2ltcGxlVHlwZSBuYW1lPSJITUFDT3V0cHV0TGVuZ3RoVHlwZSI+DQotICA8cmVzdHJpY3Rpb24gYmFzZT0iaW50ZWdlciIvPg0KLTwvc2ltcGxlVHlwZT4NCi0NCi08IS0tIFN0YXJ0IEtleVZhbHVlIEVsZW1lbnQtdHlwZXMgLS0+DQotDQotPGVsZW1lbnQgbmFtZT0iRFNBS2V5VmFsdWUiIHR5cGU9ImRzOkRTQUtleVZhbHVlVHlwZSIvPg0KLTxjb21wbGV4VHlwZSBuYW1lPSJEU0FLZXlWYWx1ZVR5cGUiPg0KLSAgPHNlcXVlbmNlPg0KLSAgICA8c2VxdWVuY2UgbWluT2NjdXJzPSIwIj4NCi0gICAgICA8ZWxlbWVudCBuYW1lPSJQIiB0eXBlPSJkczpDcnlwdG9CaW5hcnkiLz4NCi0gICAgICA8ZWxlbWVudCBuYW1lPSJRIiB0eXBlPSJkczpDcnlwdG9CaW5hcnkiLz4NCi0gICAgPC9zZXF1ZW5jZT4NCi0gICAgPGVsZW1lbnQgbmFtZT0iSiIgdHlwZT0iZHM6Q3J5cHRvQmluYXJ5IiBtaW5PY2N1cnM9IjAiLz4NCi0gICAgPGVsZW1lbnQgbmFtZT0iRyIgdHlwZT0iZHM6Q3J5cHRvQmluYXJ5IiBtaW5PY2N1cnM9IjAiLz4NCi0gICAgPGVsZW1lbnQgbmFtZT0iWSIgdHlwZT0iZHM6Q3J5cHRvQmluYXJ5Ii8+DQotICAgIDxzZXF1ZW5jZSBtaW5PY2N1cnM9IjAiPg0KLSAgICAgIDxlbGVtZW50IG5hbWU9IlNlZWQiIHR5cGU9ImRzOkNyeXB0b0JpbmFyeSIvPg0KLSAgICAgIDxlbGVtZW50IG5hbWU9IlBnZW5Db3VudGVyIiB0eXBlPSJkczpDcnlwdG9CaW5hcnkiLz4NCi0gICAgPC9zZXF1ZW5jZT4NCi0gIDwvc2VxdWVuY2U+DQotPC9jb21wbGV4VHlwZT4NCi0NCi0NCi08ZWxlbWVudCBuYW1lPSJSU0FLZXlWYWx1ZSIgdHlwZT0iZHM6UlNBS2V5VmFsdWVUeXBlIi8+DQotPGNvbXBsZXhUeXBlIG5hbWU9IlJTQUtleVZhbHVlVHlwZSI+DQotICA8c2VxdWVuY2U+DQotICAgIDxlbGVtZW50IG5hbWU9Ik1vZHVsdXMiIHR5cGU9ImRzOkNyeXB0b0JpbmFyeSIvPiANCi0gICAgPGVsZW1lbnQgbmFtZT0iRXhwb25lbnQiIHR5cGU9ImRzOkNyeXB0b0JpbmFyeSIvPiANCi0gIDwvc2VxdWVuY2U+DQotPC9jb21wbGV4VHlwZT4gDQotDQotPCEtLSBFbmQgS2V5VmFsdWUgRWxlbWVudC10eXBlcyAtLT4NCi0NCi08IS0tIEVuZCBTaWduYXR1cmUgLS0+DQotDQotPC9zY2hlbWE+DQotDQotPHNjaGVtYSBhdHRyaWJ1dGVGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCINCi0gdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnhrbXMub3JnL3NjaGVtYS94a21zLTIwMDEtMDEtMjAiDQotIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+DQotIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIi8+DQotICAgPGVsZW1lbnQgbmFtZT0iUmVjb3ZlciIgdHlwZT0ieGttczpSZWNvdmVyVHlwZSIvPg0KLSAgIDxlbGVtZW50IG5hbWU9IlJldm9rZSIgdHlwZT0ieGttczpSZXZva2VUeXBlIi8+DQotICAgPGVsZW1lbnQgbmFtZT0iTG9jYXRlIiB0eXBlPSJ4a21zOkxvY2F0ZVR5cGUiLz4NCi0gICA8ZWxlbWVudCBuYW1lPSJSZWdpc3RlciIgdHlwZT0ieGttczpSZWdpc3RlclR5cGUiLz4NCi0gICA8ZWxlbWVudCBuYW1lPSJWYWxpZGF0ZSIgdHlwZT0ieGttczpWYWxpZGF0ZVR5cGUiLz4NCi0gICA8ZWxlbWVudCBuYW1lPSJSZWdpc3RlclJlc3VsdCIgdHlwZT0ieGttczpSZWdpc3RlclJlc3VsdFR5cGUiLz4NCi0gICA8ZWxlbWVudCBuYW1lPSJSZWNvdmVyUmVzdWx0IiB0eXBlPSJ4a21zOlJlY292ZXJSZXN1bHRUeXBlIi8+DQotICAgPGVsZW1lbnQgbmFtZT0iUmV2b2tlUmVzdWx0IiB0eXBlPSJ4a21zOlJldm9rZVJlc3VsdFR5cGUiLz4NCi0gICA8ZWxlbWVudCBuYW1lPSJMb2NhdGVSZXN1bHQiIHR5cGU9InhrbXM6TG9jYXRlUmVzdWx0VHlwZSIvPg0KLSAgIDxlbGVtZW50IG5hbWU9IlZhbGlkYXRlUmVzdWx0IiB0eXBlPSJ4a21zOlZhbGlkYXRlUmVzdWx0VHlwZSIvPg0KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJMb2NhdGVUeXBlIj4NCi0gICAgICA8c2VxdWVuY2U+DQotICAgICAgICAgPGVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJUcmFuc2FjdGlvbklEIiB0eXBlPSJzdHJpbmciLz4NCi0gICAgICAgICA8ZWxlbWVudCBuYW1lPSJRdWVyeSIgdHlwZT0ieGttczpLZXlJbmZvVHlwZSIvPg0KLSAgICAgICAgIDxlbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUmVzcG9uZCIgdHlwZT0ieGttczpSZXNwb25kVHlwZSIvPg0KLSAgICAgIDwvc2VxdWVuY2U+DQotICAgPC9jb21wbGV4VHlwZT4NCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iTG9jYXRlUmVzdWx0VHlwZSI+DQotICAgICAgPHNlcXVlbmNlPg0KLSAgICAgICAgIDxlbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVHJhbnNhY3Rpb25JRCIgdHlwZT0ic3RyaW5nIi8+DQotICAgICAgICAgPGVsZW1lbnQgbmFtZT0iUmVzdWx0IiB0eXBlPSJ4a21zOlJlc3VsdENvZGVUeXBlIi8+DQotICAgICAgICAgPGVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJBbnN3ZXIiIHR5cGU9InhrbXM6TG9jYXRlUmVzdWx0QW5zd2VyVHlwZSIvPg0KLSAgICAgICAgIDxlbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRXJyb3JJbmZvIiB0eXBlPSJ4a21zOkVycm9ySW5mb1R5cGUiLz4NCi0gICAgICAgICA8ZWxlbWVudCBtYXhPY2N1cnM9IjEiIG1pbk9jY3Vycz0iMCIgcmVmPSJkczpTaWduYXR1cmUiLz4NCi0gICAgICA8L3NlcXVlbmNlPg0KLSAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iSWQiIHR5cGU9IklEIiB1c2U9Im9wdGlvbmFsIi8+DQotICAgPC9jb21wbGV4VHlwZT4NCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iVmFsaWRhdGVUeXBlIj4NCi0gICAgICA8c2VxdWVuY2U+DQotICAgICAgICAgPGVsZW1lbnQgbmFtZT0iUXVlcnkiIHR5cGU9InhrbXM6S2V5QmluZGluZ1R5cGUiLz4NCi0gICAgICAgICA8ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlJlc3BvbmQiIHR5cGU9InhrbXM6UmVzcG9uZFR5cGUiLz4NCi0gICAgICA8L3NlcXVlbmNlPg0KLSAgIDwvY29tcGxleFR5cGU+DQotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlZhbGlkYXRlUmVzdWx0VHlwZSI+DQotICAgICAgPHNlcXVlbmNlPg0KLSAgICAgICAgIDxlbGVtZW50IG5hbWU9IlJlc3VsdCIgdHlwZT0ieGttczpSZXN1bHRDb2RlVHlwZSIvPg0KLSAgICAgICAgIDxlbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQW5zd2VyIiB0eXBlPSJ4a21zOlZhbGlkYXRlUmVzdWx0QW5zd2VyVHlwZSIvPg0KLSAgICAgICAgIDxlbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRXJyb3JJbmZvIiB0eXBlPSJ4a21zOkVycm9ySW5mb1R5cGUiLz4NCi0gICAgICAgICA8ZWxlbWVudCBtYXhPY2N1cnM9IjEiIG1pbk9jY3Vycz0iMCIgcmVmPSJkczpTaWduYXR1cmUiLz4NCi0gICAgICA8L3NlcXVlbmNlPg0KLSAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iSWQiIHR5cGU9IklEIiB1c2U9Im9wdGlvbmFsIi8+DQotICAgPC9jb21wbGV4VHlwZT4NCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iVmFsaWRhdGVSZXN1bHRBbnN3ZXJUeXBlIj4NCi0gICAgICA8c2VxdWVuY2U+DQotICAgICAgICAgPGVsZW1lbnQgbmFtZT0iS2V5QmluZGluZyIgdHlwZT0ieGttczpLZXlCaW5kaW5nVHlwZSIvPg0KLSAgICAgIDwvc2VxdWVuY2U+DQotICAgPC9jb21wbGV4VHlwZT4NCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iUmVnaXN0ZXJUeXBlIj4NCi0gICAgICA8c2VxdWVuY2U+DQotICAgICAgICAgPGVsZW1lbnQgbmFtZT0iUHJvdG90eXBlIiB0eXBlPSJ4a21zOktleUJpbmRpbmdUeXBlIi8+DQotICAgICAgICAgPGVsZW1lbnQgbmFtZT0iQXV0aEluZm8iIHR5cGU9InhrbXM6QXV0aEluZm9UeXBlIi8+DQotICAgICAgICAgPGVsZW1lbnQgbmFtZT0iUmVzcG9uZCIgdHlwZT0ieGttczpSZXNwb25kVHlwZSIvPg0KLSAgICAgIDwvc2VxdWVuY2U+DQotICAgPC9jb21wbGV4VHlwZT4NCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iUmVnaXN0ZXJSZXN1bHRUeXBlIj4NCi0gICAgICA8c2VxdWVuY2U+DQotICAgICAgICAgPGVsZW1lbnQgbmFtZT0iUmVzdWx0IiB0eXBlPSJ4a21zOlJlc3VsdENvZGVUeXBlIi8+DQotICAgICAgICAgPGVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJBbnN3ZXIiIHR5cGU9InhrbXM6UmVnaXN0ZXJSZXN1bHRBbnN3ZXJUeXBlIi8+DQotICAgICAgICAgPGVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJQcml2YXRlIiB0eXBlPSJ4a21zOlByaXZhdGVUeXBlIi8+DQotICAgICAgICAgPGVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJFcnJvckluZm8iIHR5cGU9InhrbXM6RXJyb3JJbmZvVHlwZSIvPg0KLSAgICAgICAgIDxlbGVtZW50IG1heE9jY3Vycz0iMSIgbWluT2NjdXJzPSIwIiByZWY9ImRzOlNpZ25hdHVyZSIvPg0KLSAgICAgIDwvc2VxdWVuY2U+DQotICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJJZCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4NCi0gICA8L2NvbXBsZXhUeXBlPg0KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJSZWdpc3RlclJlc3VsdEFuc3dlclR5cGUiPg0KLSAgICAgIDxzZXF1ZW5jZT4NCi0gICAgICAgICA8ZWxlbWVudCBuYW1lPSJLZXlCaW5kaW5nIiB0eXBlPSJ4a21zOktleUJpbmRpbmdUeXBlIi8+DQotICAgICAgPC9zZXF1ZW5jZT4NCi0gICA8L2NvbXBsZXhUeXBlPg0KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJSZWNvdmVyVHlwZSI+DQotICAgICAgPHNlcXVlbmNlPg0KLSAgICAgICAgIDxlbGVtZW50IHJlZj0ieGttczpSZWdpc3RlciIvPg0KLSAgICAgIDwvc2VxdWVuY2U+DQotICAgPC9jb21wbGV4VHlwZT4NCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iUmVjb3ZlclJlc3VsdFR5cGUiPg0KLSAgICAgIDxzZXF1ZW5jZT4NCi0gICAgICAgICA8ZWxlbWVudCByZWY9InhrbXM6UmVnaXN0ZXJSZXN1bHQiLz4NCi0gICAgICA8L3NlcXVlbmNlPg0KLSAgIDwvY29tcGxleFR5cGU+DQotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlJldm9rZVR5cGUiPg0KLSAgICAgIDxzZXF1ZW5jZT4NCi0gICAgICAgICA8ZWxlbWVudCByZWY9InhrbXM6UmVnaXN0ZXIiLz4NCi0gICAgICA8L3NlcXVlbmNlPg0KLSAgIDwvY29tcGxleFR5cGU+DQotDQotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlByaXZhdGVUeXBlIj4NCi0gICAgICA8c2VxdWVuY2U+DQotICAgICAgICAgPGFueSBtYXhPY2N1cnM9InVuYm91bmRlZCIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiICANCi0JICAgICAgbWluT2NjdXJzPSIwIiBuYW1lc3BhY2U9IiMjYW55Ii8+DQotICAgICAgPC9zZXF1ZW5jZT4NCi0gICAgICA8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNhbnkiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+DQotICAgPC9jb21wbGV4VHlwZT4NCi0NCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iUmV2b2tlUmVzdWx0VHlwZSI+DQotICAgICAgPHNlcXVlbmNlPg0KLSAgICAgICAgIDxlbGVtZW50IHJlZj0ieGttczpSZWdpc3RlclJlc3VsdCIvPg0KLSAgICAgIDwvc2VxdWVuY2U+DQotICAgPC9jb21wbGV4VHlwZT4NCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iRXJyb3JJbmZvVHlwZSI+DQotICAgICAgPHNlcXVlbmNlPg0KLSAgICAgICAgIDxlbGVtZW50IG5hbWU9IkVycm9yRGVzY3JpcHRpb24iIHR5cGU9InN0cmluZyIvPg0KLSAgICAgICAgIDxlbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRXJyb3JBY3RvciIgdHlwZT0ic3RyaW5nIi8+DQotICAgICAgICAgPGVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJFcnJvckRldGFpbCIgdHlwZT0ieGttczpFcnJvckRldGFpbFR5cGUiLz4NCi0gICAgICA8L3NlcXVlbmNlPg0KLSAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZXJyb3JDb2RlIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4NCi0gICA8L2NvbXBsZXhUeXBlPg0KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJFcnJvckRldGFpbFR5cGUiPg0KLSAgICAgIDxzZXF1ZW5jZT4NCi0gICAgICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJzdHJpY3QiLz4NCi0gICAgICA8L3NlcXVlbmNlPg0KLSAgICAgIDxhbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9InN0cmljdCIvPg0KLSAgIDwvY29tcGxleFR5cGU+DQotICAgPHNpbXBsZVR5cGUgbmFtZT0iRXJyb3JDb2RlVHlwZSI+DQotICAgICAgPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+DQotICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJDbGllbnQiLz4NCi0gICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZlciIvPg0KLSAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iQ2xpZW50Lk1hbGZvcm1lZEtleU5hbWVQYXNzZWQiLz4NCi0gICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IkNsaWVudC5JbnZhbGlkUGFzc1BocmFzZUF1dGgiLz4NCi0gICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IioiLz4NCi0gICAgICA8L3Jlc3RyaWN0aW9uPg0KLSAgIDwvc2ltcGxlVHlwZT4NCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iS2V5QmluZGluZ1R5cGUiPg0KLSAgICAgIDxzZXF1ZW5jZT4NCi0gICAgICAgICA8ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRyYW5zYWN0aW9uSUQiIHR5cGU9InN0cmluZyIvPg0KLSAgICAgICAgIDxlbGVtZW50IG5hbWU9IlN0YXR1cyIgdHlwZT0ieGttczpBc3NlcnRpb25TdGF0dXNUeXBlIi8+DQotICAgICAgICAgPGVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG1pbk9jY3Vycz0iMCIgbmFtZT0iS2V5SUQiIHR5cGU9InN0cmluZyIvPg0KLSAgICAgICAgIDxlbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJkczpLZXlJbmZvIi8+DQotICAgICAgICAgPGVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJQYXNzUGhyYXNlIiB0eXBlPSJzdHJpbmciLz4NCi0gICAgICAgICA8ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlByb2Nlc3NJbmZvIiB0eXBlPSJ4a21zOlByb2Nlc3NJbmZvVHlwZSIvPg0KLSAgICAgICAgIDxlbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVmFsaWRpdHlJbnRlcnZhbCIgdHlwZT0ieGttczpWYWxpZGl0eUludGVydmFsVHlwZSIvPg0KLSAgICAgICAgIDxlbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiBtaW5PY2N1cnM9IjAiIG5hbWU9IktleVVzYWdlIiB0eXBlPSJ4a21zOktleVVzYWdlVHlwZSIvPg0KLSAgICAgICAgIDxlbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUHJpdmF0ZSIgdHlwZT0ieGttczpQcml2YXRlVHlwZSIvPg0KLSAgICAgIDwvc2VxdWVuY2U+DQotICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJJZCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4NCi0gICA8L2NvbXBsZXhUeXBlPg0KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJLZXlJbmZvVHlwZSI+DQotICAgICAgPHNlcXVlbmNlPg0KLSAgICAgICAgIDxlbGVtZW50IHJlZj0iZHM6S2V5SW5mbyIvPg0KLSAgICAgIDwvc2VxdWVuY2U+DQotICAgPC9jb21wbGV4VHlwZT4NCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iUmVzcG9uZFR5cGUiPg0KLSAgICAgIDxzZXF1ZW5jZT4NCi0gICAgICAgICA8ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIwIiBuYW1lPSJzdHJpbmciIHR5cGU9InhrbXM6UmVzcG9uZEVudW0iLz4NCi0gICAgICA8L3NlcXVlbmNlPg0KLSAgIDwvY29tcGxleFR5cGU+DQotICAgPHNpbXBsZVR5cGUgbmFtZT0iUmVzcG9uZEVudW0iPg0KLSAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPg0KLSAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iS2V5TmFtZSIvPg0KLSAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iS2V5VmFsdWUiLz4NCi0gICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9Ilg1MDlDZXJ0Ii8+DQotICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJYNTA5Q2hhaW4iLz4NCi0gICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9Ilg1MDlDUkwiLz4NCi0gICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9Ik9DU1AiLz4NCi0gICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IlJldHJpZXZhbE1ldGhvZCIvPg0KLSAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iTWdtdERhdGEiLz4NCi0gICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IlBHUERhdGEiLz4NCi0gICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IlBHUFdlYiIvPg0KLSAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iU1BLSURhdGEiLz4NCi0gICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9Ik11bHRpcGxlIi8+DQotICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJQcml2YXRlIi8+DQotICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJWYWxpZGl0eUludGVydmFsIi8+DQotICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJLZXlVc2FnZSIvPg0KLSAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdHVzIi8+DQotICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJTaWduZWRSZXN1bHQiLz4NCi0gICAgICA8L3Jlc3RyaWN0aW9uPg0KLSAgIDwvc2ltcGxlVHlwZT4NCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iTG9jYXRlUmVzdWx0QW5zd2VyVHlwZSI+DQotICAgICAgPHNlcXVlbmNlPg0KLSAgICAgICAgIDxlbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiBtaW5PY2N1cnM9IjAiIHJlZj0iZHM6S2V5SW5mbyIvPg0KLSAgICAgIDwvc2VxdWVuY2U+DQotICAgPC9jb21wbGV4VHlwZT4NCi0gICA8c2ltcGxlVHlwZSBuYW1lPSJSZXN1bHRDb2RlVHlwZSI+DQotICAgICAgPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+DQotICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJTdWNjZXNzIi8+DQotICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJOb01hdGNoIi8+DQotICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJOb3RGb3VuZCIvPg0KLSAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iSW5jb21wbGV0ZSIvPg0KLSAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iRmFpbHVyZSIvPg0KLSAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iUmVmdXNlZCIvPg0KLSAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iUGVuZGluZyIvPg0KLSAgICAgIDwvcmVzdHJpY3Rpb24+DQotICAgPC9zaW1wbGVUeXBlPg0KLSAgIDxzaW1wbGVUeXBlIG5hbWU9IkFzc2VydGlvblN0YXR1c1R5cGUiPg0KLSAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPg0KLSAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iVmFsaWQiLz4NCi0gICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IkludmFsaWQiLz4NCi0gICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IkluZGV0ZXJtaW5hdGUiLz4NCi0gICAgICA8L3Jlc3RyaWN0aW9uPg0KLSAgIDwvc2ltcGxlVHlwZT4NCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iUHJvY2Vzc0luZm9UeXBlIj4NCi0gICAgICA8c2VxdWVuY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG1pbk9jY3Vycz0iMCI+DQotICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiLz4NCi0gICAgICA8L3NlcXVlbmNlPg0KLSAgIDwvY29tcGxleFR5cGU+DQotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlZhbGlkaXR5SW50ZXJ2YWxUeXBlIj4NCi0gICAgICA8c2VxdWVuY2U+DQotICAgICAgICAgPGVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJOb3RCZWZvcmUiIHR5cGU9InRpbWVJbnN0YW50Ii8+DQotICAgICAgICAgPGVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJOb3RBZnRlciIgdHlwZT0idGltZUluc3RhbnQiLz4NCi0gICAgICA8L3NlcXVlbmNlPg0KLSAgIDwvY29tcGxleFR5cGU+DQotICAgPHNpbXBsZVR5cGUgbmFtZT0iS2V5VXNhZ2VUeXBlIj4NCi0gICAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4NCi0gICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IkVuY3J5cHRpb24iLz4NCi0gICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IlNpZ25hdHVyZSIvPg0KLSAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iRXhjaGFuZ2UiLz4NCi0gICAgICA8L3Jlc3RyaWN0aW9uPg0KLSAgIDwvc2ltcGxlVHlwZT4NCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iQXV0aEluZm9UeXBlIj4NCi0gICAgICA8Y2hvaWNlPg0KLSAgICAgICAgIDxlbGVtZW50IG5hbWU9IkF1dGhVc2VySW5mbyIgdHlwZT0ieGttczpBdXRoVXNlckluZm9UeXBlIi8+DQotICAgICAgICAgPGVsZW1lbnQgbmFtZT0iQXV0aFNlcnZlckluZm8iIHR5cGU9InhrbXM6QXV0aFNlcnZlckluZm9UeXBlIi8+DQotICAgICAgPC9jaG9pY2U+DQotICAgPC9jb21wbGV4VHlwZT4NCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iUHJvb2ZPZlBvc3Nlc3Npb25UeXBlIj4NCi0gICAgICA8c2VxdWVuY2U+DQotICAgICAgICAgPGVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImRzOlNpZ25hdHVyZSIvPg0KLSAgICAgIDwvc2VxdWVuY2U+DQotICAgPC9jb21wbGV4VHlwZT4NCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iS2V5QmluZGluZ0F1dGhUeXBlIj4NCi0gICAgICA8c2VxdWVuY2U+DQotICAgICAgICAgPGVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9ImRzOlNpZ25hdHVyZSIvPg0KLSAgICAgIDwvc2VxdWVuY2U+DQotICAgPC9jb21wbGV4VHlwZT4NCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iQXV0aFVzZXJJbmZvVHlwZSI+DQotICAgICAgPHNlcXVlbmNlPg0KLSAgICAgICAgIDxlbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUHJvb2ZPZlBvc3Nlc3Npb24iIHR5cGU9InhrbXM6UHJvb2ZPZlBvc3Nlc3Npb25UeXBlIi8+DQotICAgICAgICAgPGVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJLZXlCaW5kaW5nQXV0aCIgdHlwZT0ieGttczpLZXlCaW5kaW5nQXV0aFR5cGUiLz4NCi0gICAgICAgICA8ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlBhc3NQaHJhc2VBdXRoIiB0eXBlPSJzdHJpbmciLz4NCi0gICAgICA8L3NlcXVlbmNlPg0KLSAgIDwvY29tcGxleFR5cGU+DQotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkF1dGhTZXJ2ZXJJbmZvVHlwZSI+DQotICAgICAgPHNlcXVlbmNlPg0KLSAgICAgICAgIDxlbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iS2V5QmluZGluZ0F1dGgiIHR5cGU9InhrbXM6S2V5QmluZGluZ0F1dGhUeXBlIi8+DQotICAgICAgICAgPGVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJQYXNzUGhyYXNlQXV0aCIgdHlwZT0ic3RyaW5nIi8+DQotICAgICAgPC9zZXF1ZW5jZT4NCi0gICA8L2NvbXBsZXhUeXBlPg0KLTwvc2NoZW1hPg0KLSAgPC90eXBlcz4NCi0NCi0gIDxtZXNzYWdlIG5hbWU9IlJlZ2lzdGVyIj4NCi0gICAgPHBhcnQgbmFtZT0iYm9keSIgZWxlbWVudD0ieGttczpSZWdpc3RlciIvPg0KLSAgPC9tZXNzYWdlPg0KLQ0KLSAgPG1lc3NhZ2UgbmFtZT0iUmVnaXN0ZXJSZXN1bHQiPg0KLSAgICA8cGFydCBuYW1lPSJib2R5IiBlbGVtZW50PSJ4a21zOlJlZ2lzdGVyUmVzdWx0Ii8+DQotICA8L21lc3NhZ2U+DQotDQotICA8bWVzc2FnZSBuYW1lPSJWYWxpZGF0ZSI+DQotICAgIDxwYXJ0IG5hbWU9ImJvZHkiIGVsZW1lbnQ9InhrbXM6VmFsaWRhdGUiLz4NCi0gIDwvbWVzc2FnZT4NCi0NCi0gIDxtZXNzYWdlIG5hbWU9IlZhbGlkYXRlUmVzdWx0Ij4NCi0gICAgPHBhcnQgbmFtZT0iYm9keSIgZWxlbWVudD0ieGttczpWYWxpZGF0ZVJlc3VsdCIvPg0KLSAgPC9tZXNzYWdlPg0KLQ0KLSAgPG1lc3NhZ2UgbmFtZT0iTG9jYXRlIj4NCi0gICAgPHBhcnQgbmFtZT0iYm9keSIgZWxlbWVudD0ieGttczpMb2NhdGUiLz4NCi0gIDwvbWVzc2FnZT4NCi0NCi0gIDxtZXNzYWdlIG5hbWU9IkxvY2F0ZVJlc3VsdCI+DQotICAgIDxwYXJ0IG5hbWU9ImJvZHkiIGVsZW1lbnQ9InhrbXM6TG9jYXRlUmVzdWx0Ii8+DQotICA8L21lc3NhZ2U+DQotDQotICA8cG9ydFR5cGUgbmFtZT0iS2V5U2VydmljZVBvcnRUeXBlIj4NCi0gICAgPG9wZXJhdGlvbiBuYW1lPSJSZWdpc3RlciI+DQotICAgICAgPGlucHV0IG1lc3NhZ2U9InRuczpSZWdpc3RlciIvPg0KLSAgICAgIDxvdXRwdXQgbWVzc2FnZT0idG5zOlJlZ2lzdGVyUmVzdWx0Ii8+DQotCTxmYXVsdCBtZXNzYWdlPSJ0bnM6UmVnaXN0ZXJSZXN1bHQiLz4NCi0gICAgPC9vcGVyYXRpb24+DQotDQotICAgIDxvcGVyYXRpb24gbmFtZT0iVmFsaWRhdGUiPg0KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJ0bnM6VmFsaWRhdGUiLz4NCi0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InRuczpWYWxpZGF0ZVJlc3VsdCIvPg0KLQk8ZmF1bHQgbWVzc2FnZT0idG5zOlZhbGlkYXRlUmVzdWx0Ii8+DQotICAgIDwvb3BlcmF0aW9uPg0KLQ0KLSAgICA8b3BlcmF0aW9uIG5hbWU9IkxvY2F0ZSI+DQotICAgICAgPGlucHV0IG1lc3NhZ2U9InRuczpMb2NhdGUiLz4NCi0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InRuczpMb2NhdGVSZXN1bHQiLz4NCi0JPGZhdWx0IG1lc3NhZ2U9InRuczpMb2NhdGVSZXN1bHQiLz4NCi0gICAgPC9vcGVyYXRpb24+DQotICA8L3BvcnRUeXBlPg0KLQ0KLSAgPGJpbmRpbmcgbmFtZT0iS2V5U2VydmljZVNvYXBCaW5kaW5nIiB0eXBlPSJ0bnM6S2V5U2VydmljZVBvcnRUeXBlIj4NCi0gICAgPHNvYXA6YmluZGluZyB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgc3R5bGU9ImRvY3VtZW50Ii8+DQotDQotICAgIDxvcGVyYXRpb24gbmFtZT0iUmVnaXN0ZXIiPg0KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LnhrbXMub3JnL3NjaGVtYS94a21zLTIwMDEtMDEtMjAjUmVnaXN0ZXIiIHN0eWxlPSJkb2N1bWVudCIvPg0KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJ0bnM6UmVnaXN0ZXIiPg0KLSAgICAgICAgPHNvYXA6Ym9keSBwYXJ0cz0iYm9keSIgdXNlPSJsaXRlcmFsIi8+DQotICAgICAgPC9pbnB1dD4NCi0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InRuczpSZWdpc3RlclJlc3VsdCI+DQotICAgICAgICA8c29hcDpib2R5IHBhcnRzPSJib2R5IiB1c2U9ImxpdGVyYWwiLz4NCi0gICAgICA8L291dHB1dD4NCi0gICAgPC9vcGVyYXRpb24+DQotDQotICAgIDxvcGVyYXRpb24gbmFtZT0iVmFsaWRhdGUiPg0KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSJodHRwOi8vd3d3LnhrbXMub3JnL3NjaGVtYS94a21zLTIwMDEtMDEtMjAjVmFsaWRhdGUiIHN0eWxlPSJkb2N1bWVudCIvPg0KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJ0bnM6VmFsaWRhdGUiPg0KLSAgICAgICAgPHNvYXA6Ym9keSBwYXJ0cz0iYm9keSIgdXNlPSJsaXRlcmFsIi8+DQotICAgICAgPC9pbnB1dD4NCi0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InRuczpWYWxpZGF0ZVJlc3VsdCI+DQotICAgICAgICA8c29hcDpib2R5IHBhcnRzPSJib2R5IiB1c2U9ImxpdGVyYWwiLz4NCi0gICAgICA8L291dHB1dD4NCi0gICAgPC9vcGVyYXRpb24+DQotDQotICAgIDxvcGVyYXRpb24gbmFtZT0iTG9jYXRlIj4NCi0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iaHR0cDovL3d3dy54a21zLm9yZy9zY2hlbWEveGttcy0yMDAxLTAxLTIwI0xvY2F0ZSIgc3R5bGU9ImRvY3VtZW50Ii8+DQotICAgICAgPGlucHV0IG1lc3NhZ2U9InRuczpMb2NhdGUiPg0KLSAgICAgICAgPHNvYXA6Ym9keSBwYXJ0cz0iYm9keSIgdXNlPSJsaXRlcmFsIi8+DQotICAgICAgPC9pbnB1dD4NCi0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InRuczpMb2NhdGVSZXN1bHQiPg0KLSAgICAgICAgPHNvYXA6Ym9keSBwYXJ0cz0iYm9keSIgdXNlPSJsaXRlcmFsIi8+DQotICAgICAgPC9vdXRwdXQ+DQotICAgIDwvb3BlcmF0aW9uPg0KLSAgPC9iaW5kaW5nPg0KLQ0KLSAgPGJpbmRpbmcgbmFtZT0iS2V5U2VydmljZUh0dHBQb3N0QmluZGluZyIgdHlwZT0idG5zOktleVNlcnZpY2VQb3J0VHlwZSI+DQotICAgIDxodHRwOmJpbmRpbmcgdmVyYj0iUE9TVCIvPg0KLQ0KLSAgICA8b3BlcmF0aW9uIG5hbWU9IlJlZ2lzdGVyIj4NCi0gICAgICA8aHR0cDpvcGVyYXRpb24gbG9jYXRpb249InhrbXMvQWNjZXB0b3IubmFubyIvPg0KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJ0bnM6UmVnaXN0ZXIiPg0KLSAgICAgICAgPG1pbWU6Y29udGVudCBwYXJ0cz0iYm9keSIgdHlwZT0idGV4dC94bWwiLz4NCi0gICAgICA8L2lucHV0Pg0KLSAgICAgIDxvdXRwdXQgbWVzc2FnZT0idG5zOlJlZ2lzdGVyUmVzdWx0Ij4NCi0gICAgICAgIDxtaW1lOmNvbnRlbnQgcGFydHM9ImJvZHkiIHR5cGU9InRleHQveG1sIi8+DQotICAgICAgPC9vdXRwdXQ+DQotICAgIDwvb3BlcmF0aW9uPg0KLQ0KLSAgICA8b3BlcmF0aW9uIG5hbWU9IlZhbGlkYXRlIj4NCi0gICAgICA8aHR0cDpvcGVyYXRpb24gbG9jYXRpb249InhrbXMvQWNjZXB0b3IubmFubyIvPg0KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJ0bnM6VmFsaWRhdGUiPg0KLSAgICAgICAgPG1pbWU6Y29udGVudCBwYXJ0cz0iYm9keSIgdHlwZT0idGV4dC94bWwiLz4NCi0gICAgICA8L2lucHV0Pg0KLSAgICAgIDxvdXRwdXQgbWVzc2FnZT0idG5zOlZhbGlkYXRlUmVzdWx0Ij4NCi0gICAgICAgIDxtaW1lOmNvbnRlbnQgcGFydHM9ImJvZHkiIHR5cGU9InRleHQveG1sIi8+DQotICAgICAgPC9vdXRwdXQ+DQotICAgIDwvb3BlcmF0aW9uPg0KLQ0KLSAgICA8b3BlcmF0aW9uIG5hbWU9IkxvY2F0ZSI+DQotICAgICAgPGh0dHA6b3BlcmF0aW9uIGxvY2F0aW9uPSJ4a21zL0FjY2VwdG9yLm5hbm8iLz4NCi0gICAgICA8aW5wdXQgbWVzc2FnZT0idG5zOkxvY2F0ZSI+DQotICAgICAgICA8bWltZTpjb250ZW50IHBhcnRzPSJib2R5IiB0eXBlPSJ0ZXh0L3htbCIvPg0KLSAgICAgIDwvaW5wdXQ+DQotICAgICAgPG91dHB1dCBtZXNzYWdlPSJ0bnM6TG9jYXRlUmVzdWx0Ij4NCi0gICAgICAgIDxtaW1lOmNvbnRlbnQgcGFydHM9ImJvZHkiIHR5cGU9InRleHQveG1sIi8+DQotICAgICAgPC9vdXRwdXQ+DQotICAgIDwvb3BlcmF0aW9uPg0KLSAgPC9iaW5kaW5nPg0KLQ0KLSAgPHNlcnZpY2UgbmFtZT0iWE1MS2V5TWFuYWdlbWVudFNlcnZpY2UiPg0KLQk8ZG9jdW1lbnRhdGlvbj5WZXJpc2lnbidzIFhNTCBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIChYS01TKTwvZG9jdW1lbnRhdGlvbj4NCi0NCi0gICAgPHBvcnQgbmFtZT0iS2V5U2VydmljZVNvYXBQb3J0IiBiaW5kaW5nPSJ0bnM6S2V5U2VydmljZVNvYXBCaW5kaW5nIj4NCi0gICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8veGttcy52ZXJpc2lnbi5jb20veGttcy9BY2NlcHRvci5uYW5vIi8+DQotICAgIDwvcG9ydD4NCi0NCi0gICAgPHBvcnQgbmFtZT0iS2V5U2VydmljZUh0dHBQb3N0UG9ydCIgYmluZGluZz0idG5zOktleVNlcnZpY2VIdHRwUG9zdEJpbmRpbmciPg0KLSAgICAgIDxodHRwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly94a21zLnZlcmlzaWduLmNvbS8iLz4NCi0gICAgPC9wb3J0Pg0KLSAgPC9zZXJ2aWNlPg0KLQ0KLSAgPHNlcnZpY2UgbmFtZT0iUGlsb3RYTUxLZXlNYW5hZ2VtZW50U2VydmljZSI+DQotCTxkb2N1bWVudGF0aW9uPlZlcmlzaWduJ3MgUGlsb3QgWE1MIEtleSBNYW5hZ2VtZW50IFNlcnZpY2UgKFhLTVMpPC9kb2N1bWVudGF0aW9uPg0KLQ0KLSAgICA8cG9ydCBuYW1lPSJLZXlTZXJ2aWNlU29hcFBvcnQiIGJpbmRpbmc9InRuczpLZXlTZXJ2aWNlU29hcEJpbmRpbmciPg0KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9waWxvdC14a21zLnZlcmlzaWduLmNvbS94a21zL0FjY2VwdG9yLm5hbm8iLz4NCi0gICAgPC9wb3J0Pg0KLQ0KLSAgICA8cG9ydCBuYW1lPSJLZXlTZXJ2aWNlSHR0cFBvc3RQb3J0IiBiaW5kaW5nPSJ0bnM6S2V5U2VydmljZUh0dHBQb3N0QmluZGluZyI+DQotICAgICAgPGh0dHA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL3BpbG90LXhrbXMudmVyaXNpZ24uY29tLyIvPg0KLSAgICA8L3BvcnQ+DQotICA8L3NlcnZpY2U+DQotPC9kZWZpbml0aW9ucz4NCmRpZmYgLS1naXQgYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9YbWxTaWduYXR1cmUveG1sZHNpZy1jb3JlLXNjaGVtYS54c2QgYi92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9YbWxTaWduYXR1cmUveG1sZHNpZy1jb3JlLXNjaGVtYS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3YjE1NjYuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvWG1sU2lnbmF0dXJlL3htbGRzaWctY29yZS1zY2hlbWEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IURPQ1RZUEUgc2NoZW1hCi0gIFBVQkxJQyAiLS8vVzNDLy9EVEQgWE1MU2NoZW1hIDIwMDEwMi8vRU4iICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS5kdGQiCi0gWwotICAgPCFBVFRMSVNUIHNjaGVtYSAKLSAgICAgeG1sbnM6ZHMgQ0RBVEEgI0ZJWEVEICJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIj4KLSAgIDwhRU5USVRZIGRzaWcgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMnPgotICAgPCFFTlRJVFkgJSBwICcnPgotICAgPCFFTlRJVFkgJSBzICcnPgotICBdPgotCi08IS0tIFNjaGVtYSBmb3IgWE1MIFNpZ25hdHVyZXMKLSAgICBodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjCi0gICAgJFJldmlzaW9uOiAxLjEgJCBvbiAkRGF0ZTogMjAwMy8wOS8yNiAyMToyMzozNyAkIGJ5ICRBdXRob3I6IGVyaWN2YXMgJAotCi0gICAgQ29weXJpZ2h0IDIwMDEgVGhlIEludGVybmV0IFNvY2lldHkgYW5kIFczQyAoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUKLSAgICBvZiBUZWNobm9sb2d5LCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0IGVuCi0gICAgQXV0b21hdGlxdWUsIEtlaW8gVW5pdmVyc2l0eSkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gICAgaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8KLQotICAgIFRoaXMgZG9jdW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIFczQyBTb2Z0d2FyZSBMaWNlbnNlIFsxXSBhcyBkZXNjcmliZWQKLSAgICBpbiB0aGUgRkFRIFsyXS4KLQotICAgIFsxXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsL2NvcHlyaWdodC1zb2Z0d2FyZS0xOTk4MDcyMAotICAgIFsyXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsL0lQUi1GQVEtMjAwMDA2MjAuaHRtbCNEVEQKLS0tPgotCi0KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgICAgICB4bWxuczpkcz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyIKLSAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIgotICAgICAgICB2ZXJzaW9uPSIwLjEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4gCi0KLTwhLS0gQmFzaWMgVHlwZXMgRGVmaW5lZCBmb3IgU2lnbmF0dXJlcyAtLT4KLQotPHNpbXBsZVR5cGUgbmFtZT0iQ3J5cHRvQmluYXJ5Ij4KLSAgPHJlc3RyaWN0aW9uIGJhc2U9ImJhc2U2NEJpbmFyeSI+Ci0gIDwvcmVzdHJpY3Rpb24+Ci08L3NpbXBsZVR5cGU+Ci0KLTwhLS0gU3RhcnQgU2lnbmF0dXJlIC0tPgotCi08ZWxlbWVudCBuYW1lPSJTaWduYXR1cmUiIHR5cGU9ImRzOlNpZ25hdHVyZVR5cGUiLz4KLTxjb21wbGV4VHlwZSBuYW1lPSJTaWduYXR1cmVUeXBlIj4KLSAgPHNlcXVlbmNlPiAKLSAgICA8ZWxlbWVudCByZWY9ImRzOlNpZ25lZEluZm8iLz4gCi0gICAgPGVsZW1lbnQgcmVmPSJkczpTaWduYXR1cmVWYWx1ZSIvPiAKLSAgICA8ZWxlbWVudCByZWY9ImRzOktleUluZm8iIG1pbk9jY3Vycz0iMCIvPiAKLSAgICA8ZWxlbWVudCByZWY9ImRzOk9iamVjdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPiAKLSAgPC9zZXF1ZW5jZT4gIAotICA8YXR0cmlidXRlIG5hbWU9IklkIiB0eXBlPSJJRCIgdXNlPSJvcHRpb25hbCIvPgotPC9jb21wbGV4VHlwZT4KLQotICA8ZWxlbWVudCBuYW1lPSJTaWduYXR1cmVWYWx1ZSIgdHlwZT0iZHM6U2lnbmF0dXJlVmFsdWVUeXBlIi8+IAotICA8Y29tcGxleFR5cGUgbmFtZT0iU2lnbmF0dXJlVmFsdWVUeXBlIj4KLSAgICA8c2ltcGxlQ29udGVudD4KLSAgICAgIDxleHRlbnNpb24gYmFzZT0iYmFzZTY0QmluYXJ5Ij4KLSAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJJZCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgIDwvZXh0ZW5zaW9uPgotICAgIDwvc2ltcGxlQ29udGVudD4KLSAgPC9jb21wbGV4VHlwZT4KLQotPCEtLSBTdGFydCBTaWduZWRJbmZvIC0tPgotCi08ZWxlbWVudCBuYW1lPSJTaWduZWRJbmZvIiB0eXBlPSJkczpTaWduZWRJbmZvVHlwZSIvPgotPGNvbXBsZXhUeXBlIG5hbWU9IlNpZ25lZEluZm9UeXBlIj4KLSAgPHNlcXVlbmNlPiAKLSAgICA8ZWxlbWVudCByZWY9ImRzOkNhbm9uaWNhbGl6YXRpb25NZXRob2QiLz4gCi0gICAgPGVsZW1lbnQgcmVmPSJkczpTaWduYXR1cmVNZXRob2QiLz4gCi0gICAgPGVsZW1lbnQgcmVmPSJkczpSZWZlcmVuY2UiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+IAotICA8L3NlcXVlbmNlPiAgCi0gIDxhdHRyaWJ1dGUgbmFtZT0iSWQiIHR5cGU9IklEIiB1c2U9Im9wdGlvbmFsIi8+IAotPC9jb21wbGV4VHlwZT4KLQotICA8ZWxlbWVudCBuYW1lPSJDYW5vbmljYWxpemF0aW9uTWV0aG9kIiB0eXBlPSJkczpDYW5vbmljYWxpemF0aW9uTWV0aG9kVHlwZSIvPiAKLSAgPGNvbXBsZXhUeXBlIG5hbWU9IkNhbm9uaWNhbGl6YXRpb25NZXRob2RUeXBlIiBtaXhlZD0idHJ1ZSI+Ci0gICAgPHNlcXVlbmNlPgotICAgICAgPGFueSBuYW1lc3BhY2U9IiMjYW55IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICA8IS0tICgwLHVuYm91bmRlZCkgZWxlbWVudHMgZnJvbSAoMSwxKSBuYW1lc3BhY2UgLS0+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgICA8YXR0cmlidXRlIG5hbWU9IkFsZ29yaXRobSIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+IAotICA8L2NvbXBsZXhUeXBlPgotCi0gIDxlbGVtZW50IG5hbWU9IlNpZ25hdHVyZU1ldGhvZCIgdHlwZT0iZHM6U2lnbmF0dXJlTWV0aG9kVHlwZSIvPgotICA8Y29tcGxleFR5cGUgbmFtZT0iU2lnbmF0dXJlTWV0aG9kVHlwZSIgbWl4ZWQ9InRydWUiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9IkhNQUNPdXRwdXRMZW5ndGgiIG1pbk9jY3Vycz0iMCIgdHlwZT0iZHM6SE1BQ091dHB1dExlbmd0aFR5cGUiLz4KLSAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICA8IS0tICgwLHVuYm91bmRlZCkgZWxlbWVudHMgZnJvbSAoMSwxKSBleHRlcm5hbCBuYW1lc3BhY2UgLS0+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgICA8YXR0cmlidXRlIG5hbWU9IkFsZ29yaXRobSIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+IAotICA8L2NvbXBsZXhUeXBlPgotCi08IS0tIFN0YXJ0IFJlZmVyZW5jZSAtLT4KLQotPGVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlIiB0eXBlPSJkczpSZWZlcmVuY2VUeXBlIi8+Ci08Y29tcGxleFR5cGUgbmFtZT0iUmVmZXJlbmNlVHlwZSI+Ci0gIDxzZXF1ZW5jZT4gCi0gICAgPGVsZW1lbnQgcmVmPSJkczpUcmFuc2Zvcm1zIiBtaW5PY2N1cnM9IjAiLz4gCi0gICAgPGVsZW1lbnQgcmVmPSJkczpEaWdlc3RNZXRob2QiLz4gCi0gICAgPGVsZW1lbnQgcmVmPSJkczpEaWdlc3RWYWx1ZSIvPiAKLSAgPC9zZXF1ZW5jZT4KLSAgPGF0dHJpYnV0ZSBuYW1lPSJJZCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4gCi0gIDxhdHRyaWJ1dGUgbmFtZT0iVVJJIiB0eXBlPSJhbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4gCi0gIDxhdHRyaWJ1dGUgbmFtZT0iVHlwZSIgdHlwZT0iYW55VVJJIiB1c2U9Im9wdGlvbmFsIi8+IAotPC9jb21wbGV4VHlwZT4KLQotICA8ZWxlbWVudCBuYW1lPSJUcmFuc2Zvcm1zIiB0eXBlPSJkczpUcmFuc2Zvcm1zVHlwZSIvPgotICA8Y29tcGxleFR5cGUgbmFtZT0iVHJhbnNmb3Jtc1R5cGUiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IHJlZj0iZHM6VHJhbnNmb3JtIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPiAgCi0gICAgPC9zZXF1ZW5jZT4KLSAgPC9jb21wbGV4VHlwZT4KLQotICA8ZWxlbWVudCBuYW1lPSJUcmFuc2Zvcm0iIHR5cGU9ImRzOlRyYW5zZm9ybVR5cGUiLz4KLSAgPGNvbXBsZXhUeXBlIG5hbWU9IlRyYW5zZm9ybVR5cGUiIG1peGVkPSJ0cnVlIj4KLSAgICA8Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPiAKLSAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgICAgPCEtLSAoMSwxKSBlbGVtZW50cyBmcm9tICgwLHVuYm91bmRlZCkgbmFtZXNwYWNlcyAtLT4KLSAgICAgIDxlbGVtZW50IG5hbWU9IlhQYXRoIiB0eXBlPSJzdHJpbmciLz4gCi0gICAgPC9jaG9pY2U+Ci0gICAgPGF0dHJpYnV0ZSBuYW1lPSJBbGdvcml0aG0iIHR5cGU9ImFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPiAKLSAgPC9jb21wbGV4VHlwZT4KLQotPCEtLSBFbmQgUmVmZXJlbmNlIC0tPgotCi08ZWxlbWVudCBuYW1lPSJEaWdlc3RNZXRob2QiIHR5cGU9ImRzOkRpZ2VzdE1ldGhvZFR5cGUiLz4KLTxjb21wbGV4VHlwZSBuYW1lPSJEaWdlc3RNZXRob2RUeXBlIiBtaXhlZD0idHJ1ZSI+IAotICA8c2VxdWVuY2U+Ci0gICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gIDwvc2VxdWVuY2U+ICAgIAotICA8YXR0cmlidXRlIG5hbWU9IkFsZ29yaXRobSIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+IAotPC9jb21wbGV4VHlwZT4KLQotPGVsZW1lbnQgbmFtZT0iRGlnZXN0VmFsdWUiIHR5cGU9ImRzOkRpZ2VzdFZhbHVlVHlwZSIvPgotPHNpbXBsZVR5cGUgbmFtZT0iRGlnZXN0VmFsdWVUeXBlIj4KLSAgPHJlc3RyaWN0aW9uIGJhc2U9ImJhc2U2NEJpbmFyeSIvPgotPC9zaW1wbGVUeXBlPgotCi08IS0tIEVuZCBTaWduZWRJbmZvIC0tPgotCi08IS0tIFN0YXJ0IEtleUluZm8gLS0+Ci0KLTxlbGVtZW50IG5hbWU9IktleUluZm8iIHR5cGU9ImRzOktleUluZm9UeXBlIi8+IAotPGNvbXBsZXhUeXBlIG5hbWU9IktleUluZm9UeXBlIiBtaXhlZD0idHJ1ZSI+Ci0gIDxjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPiAgICAgCi0gICAgPGVsZW1lbnQgcmVmPSJkczpLZXlOYW1lIi8+IAotICAgIDxlbGVtZW50IHJlZj0iZHM6S2V5VmFsdWUiLz4gCi0gICAgPGVsZW1lbnQgcmVmPSJkczpSZXRyaWV2YWxNZXRob2QiLz4gCi0gICAgPGVsZW1lbnQgcmVmPSJkczpYNTA5RGF0YSIvPiAKLSAgICA8ZWxlbWVudCByZWY9ImRzOlBHUERhdGEiLz4gCi0gICAgPGVsZW1lbnQgcmVmPSJkczpTUEtJRGF0YSIvPgotICAgIDxlbGVtZW50IHJlZj0iZHM6TWdtdERhdGEiLz4KLSAgICA8YW55IHByb2Nlc3NDb250ZW50cz0ibGF4IiBuYW1lc3BhY2U9IiMjb3RoZXIiLz4KLSAgICA8IS0tICgxLDEpIGVsZW1lbnRzIGZyb20gKDAsdW5ib3VuZGVkKSBuYW1lc3BhY2VzIC0tPgotICA8L2Nob2ljZT4KLSAgPGF0dHJpYnV0ZSBuYW1lPSJJZCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4gCi08L2NvbXBsZXhUeXBlPgotCi0gIDxlbGVtZW50IG5hbWU9IktleU5hbWUiIHR5cGU9InN0cmluZyIvPgotICA8ZWxlbWVudCBuYW1lPSJNZ210RGF0YSIgdHlwZT0ic3RyaW5nIi8+Ci0KLSAgPGVsZW1lbnQgbmFtZT0iS2V5VmFsdWUiIHR5cGU9ImRzOktleVZhbHVlVHlwZSIvPiAKLSAgPGNvbXBsZXhUeXBlIG5hbWU9IktleVZhbHVlVHlwZSIgbWl4ZWQ9InRydWUiPgotICAgPGNob2ljZT4KLSAgICAgPGVsZW1lbnQgcmVmPSJkczpEU0FLZXlWYWx1ZSIvPgotICAgICA8ZWxlbWVudCByZWY9ImRzOlJTQUtleVZhbHVlIi8+Ci0gICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgPC9jaG9pY2U+Ci0gIDwvY29tcGxleFR5cGU+Ci0KLSAgPGVsZW1lbnQgbmFtZT0iUmV0cmlldmFsTWV0aG9kIiB0eXBlPSJkczpSZXRyaWV2YWxNZXRob2RUeXBlIi8+IAotICA8Y29tcGxleFR5cGUgbmFtZT0iUmV0cmlldmFsTWV0aG9kVHlwZSI+Ci0gICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgcmVmPSJkczpUcmFuc2Zvcm1zIiBtaW5PY2N1cnM9IjAiLz4gCi0gICAgPC9zZXF1ZW5jZT4gIAotICAgIDxhdHRyaWJ1dGUgbmFtZT0iVVJJIiB0eXBlPSJhbnlVUkkiLz4KLSAgICA8YXR0cmlidXRlIG5hbWU9IlR5cGUiIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgotICA8L2NvbXBsZXhUeXBlPgotCi08IS0tIFN0YXJ0IFg1MDlEYXRhIC0tPgotCi08ZWxlbWVudCBuYW1lPSJYNTA5RGF0YSIgdHlwZT0iZHM6WDUwOURhdGFUeXBlIi8+IAotPGNvbXBsZXhUeXBlIG5hbWU9Ilg1MDlEYXRhVHlwZSI+Ci0gIDxzZXF1ZW5jZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgPGNob2ljZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9Ilg1MDlJc3N1ZXJTZXJpYWwiIHR5cGU9ImRzOlg1MDlJc3N1ZXJTZXJpYWxUeXBlIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJYNTA5U0tJIiB0eXBlPSJiYXNlNjRCaW5hcnkiLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9Ilg1MDlTdWJqZWN0TmFtZSIgdHlwZT0ic3RyaW5nIi8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJYNTA5Q2VydGlmaWNhdGUiIHR5cGU9ImJhc2U2NEJpbmFyeSIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iWDUwOUNSTCIgdHlwZT0iYmFzZTY0QmluYXJ5Ii8+Ci0gICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICA8L2Nob2ljZT4KLSAgPC9zZXF1ZW5jZT4KLTwvY29tcGxleFR5cGU+Ci0KLTxjb21wbGV4VHlwZSBuYW1lPSJYNTA5SXNzdWVyU2VyaWFsVHlwZSI+IAotICA8c2VxdWVuY2U+IAotICAgIDxlbGVtZW50IG5hbWU9Ilg1MDlJc3N1ZXJOYW1lIiB0eXBlPSJzdHJpbmciLz4gCi0gICAgPGVsZW1lbnQgbmFtZT0iWDUwOVNlcmlhbE51bWJlciIgdHlwZT0iaW50ZWdlciIvPiAKLSAgPC9zZXF1ZW5jZT4KLTwvY29tcGxleFR5cGU+Ci0KLTwhLS0gRW5kIFg1MDlEYXRhIC0tPgotCi08IS0tIEJlZ2luIFBHUERhdGEgLS0+Ci0KLTxlbGVtZW50IG5hbWU9IlBHUERhdGEiIHR5cGU9ImRzOlBHUERhdGFUeXBlIi8+IAotPGNvbXBsZXhUeXBlIG5hbWU9IlBHUERhdGFUeXBlIj4gCi0gIDxjaG9pY2U+Ci0gICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iUEdQS2V5SUQiIHR5cGU9ImJhc2U2NEJpbmFyeSIvPiAKLSAgICAgIDxlbGVtZW50IG5hbWU9IlBHUEtleVBhY2tldCIgdHlwZT0iYmFzZTY0QmluYXJ5IiBtaW5PY2N1cnM9IjAiLz4gCi0gICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIKLSAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iUEdQS2V5UGFja2V0IiB0eXBlPSJiYXNlNjRCaW5hcnkiLz4gCi0gICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIKLSAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwvc2VxdWVuY2U+Ci0gIDwvY2hvaWNlPgotPC9jb21wbGV4VHlwZT4KLQotPCEtLSBFbmQgUEdQRGF0YSAtLT4KLQotPCEtLSBCZWdpbiBTUEtJRGF0YSAtLT4KLQotPGVsZW1lbnQgbmFtZT0iU1BLSURhdGEiIHR5cGU9ImRzOlNQS0lEYXRhVHlwZSIvPiAKLTxjb21wbGV4VHlwZSBuYW1lPSJTUEtJRGF0YVR5cGUiPgotICA8c2VxdWVuY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgIDxlbGVtZW50IG5hbWU9IlNQS0lTZXhwIiB0eXBlPSJiYXNlNjRCaW5hcnkiLz4KLSAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIvPgotICA8L3NlcXVlbmNlPgotPC9jb21wbGV4VHlwZT4gCi0KLTwhLS0gRW5kIFNQS0lEYXRhIC0tPgotCi08IS0tIEVuZCBLZXlJbmZvIC0tPgotCi08IS0tIFN0YXJ0IE9iamVjdCAoTWFuaWZlc3QsIFNpZ25hdHVyZVByb3BlcnR5KSAtLT4KLQotPGVsZW1lbnQgbmFtZT0iT2JqZWN0IiB0eXBlPSJkczpPYmplY3RUeXBlIi8+IAotPGNvbXBsZXhUeXBlIG5hbWU9Ik9iamVjdFR5cGUiIG1peGVkPSJ0cnVlIj4KLSAgPHNlcXVlbmNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgIDxhbnkgbmFtZXNwYWNlPSIjI2FueSIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgPC9zZXF1ZW5jZT4KLSAgPGF0dHJpYnV0ZSBuYW1lPSJJZCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4gCi0gIDxhdHRyaWJ1dGUgbmFtZT0iTWltZVR5cGUiIHR5cGU9InN0cmluZyIgdXNlPSJvcHRpb25hbCIvPiA8IS0tIGFkZCBhIGdyZXAgZmFjZXQgLS0+Ci0gIDxhdHRyaWJ1dGUgbmFtZT0iRW5jb2RpbmciIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIvPiAKLTwvY29tcGxleFR5cGU+Ci0KLTxlbGVtZW50IG5hbWU9Ik1hbmlmZXN0IiB0eXBlPSJkczpNYW5pZmVzdFR5cGUiLz4gCi08Y29tcGxleFR5cGUgbmFtZT0iTWFuaWZlc3RUeXBlIj4KLSAgPHNlcXVlbmNlPgotICAgIDxlbGVtZW50IHJlZj0iZHM6UmVmZXJlbmNlIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPiAKLSAgPC9zZXF1ZW5jZT4KLSAgPGF0dHJpYnV0ZSBuYW1lPSJJZCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4gCi08L2NvbXBsZXhUeXBlPgotCi08ZWxlbWVudCBuYW1lPSJTaWduYXR1cmVQcm9wZXJ0aWVzIiB0eXBlPSJkczpTaWduYXR1cmVQcm9wZXJ0aWVzVHlwZSIvPiAKLTxjb21wbGV4VHlwZSBuYW1lPSJTaWduYXR1cmVQcm9wZXJ0aWVzVHlwZSI+Ci0gIDxzZXF1ZW5jZT4KLSAgICA8ZWxlbWVudCByZWY9ImRzOlNpZ25hdHVyZVByb3BlcnR5IiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPiAKLSAgPC9zZXF1ZW5jZT4KLSAgPGF0dHJpYnV0ZSBuYW1lPSJJZCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4gCi08L2NvbXBsZXhUeXBlPgotCi0gICA8ZWxlbWVudCBuYW1lPSJTaWduYXR1cmVQcm9wZXJ0eSIgdHlwZT0iZHM6U2lnbmF0dXJlUHJvcGVydHlUeXBlIi8+IAotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlNpZ25hdHVyZVByb3BlcnR5VHlwZSIgbWl4ZWQ9InRydWUiPgotICAgICA8Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICAgICA8IS0tICgxLDEpIGVsZW1lbnRzIGZyb20gKDEsdW5ib3VuZGVkKSBuYW1lc3BhY2VzIC0tPgotICAgICA8L2Nob2ljZT4KLSAgICAgPGF0dHJpYnV0ZSBuYW1lPSJUYXJnZXQiIHR5cGU9ImFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPiAKLSAgICAgPGF0dHJpYnV0ZSBuYW1lPSJJZCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4gCi0gICA8L2NvbXBsZXhUeXBlPgotCi08IS0tIEVuZCBPYmplY3QgKE1hbmlmZXN0LCBTaWduYXR1cmVQcm9wZXJ0eSkgLS0+Ci0KLTwhLS0gU3RhcnQgQWxnb3JpdGhtIFBhcmFtZXRlcnMgLS0+Ci0KLTxzaW1wbGVUeXBlIG5hbWU9IkhNQUNPdXRwdXRMZW5ndGhUeXBlIj4KLSAgPHJlc3RyaWN0aW9uIGJhc2U9ImludGVnZXIiLz4KLTwvc2ltcGxlVHlwZT4KLQotPCEtLSBTdGFydCBLZXlWYWx1ZSBFbGVtZW50LXR5cGVzIC0tPgotCi08ZWxlbWVudCBuYW1lPSJEU0FLZXlWYWx1ZSIgdHlwZT0iZHM6RFNBS2V5VmFsdWVUeXBlIi8+Ci08Y29tcGxleFR5cGUgbmFtZT0iRFNBS2V5VmFsdWVUeXBlIj4KLSAgPHNlcXVlbmNlPgotICAgIDxzZXF1ZW5jZSBtaW5PY2N1cnM9IjAiPgotICAgICAgPGVsZW1lbnQgbmFtZT0iUCIgdHlwZT0iZHM6Q3J5cHRvQmluYXJ5Ii8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJRIiB0eXBlPSJkczpDcnlwdG9CaW5hcnkiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgIDxlbGVtZW50IG5hbWU9IkciIHR5cGU9ImRzOkNyeXB0b0JpbmFyeSIgbWluT2NjdXJzPSIwIi8+Ci0gICAgPGVsZW1lbnQgbmFtZT0iWSIgdHlwZT0iZHM6Q3J5cHRvQmluYXJ5Ii8+Ci0gICAgPGVsZW1lbnQgbmFtZT0iSiIgdHlwZT0iZHM6Q3J5cHRvQmluYXJ5IiBtaW5PY2N1cnM9IjAiLz4KLSAgICA8c2VxdWVuY2UgbWluT2NjdXJzPSIwIj4KLSAgICAgIDxlbGVtZW50IG5hbWU9IlNlZWQiIHR5cGU9ImRzOkNyeXB0b0JpbmFyeSIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iUGdlbkNvdW50ZXIiIHR5cGU9ImRzOkNyeXB0b0JpbmFyeSIvPgotICAgIDwvc2VxdWVuY2U+Ci0gIDwvc2VxdWVuY2U+Ci08L2NvbXBsZXhUeXBlPgotCi08ZWxlbWVudCBuYW1lPSJSU0FLZXlWYWx1ZSIgdHlwZT0iZHM6UlNBS2V5VmFsdWVUeXBlIi8+Ci08Y29tcGxleFR5cGUgbmFtZT0iUlNBS2V5VmFsdWVUeXBlIj4KLSAgPHNlcXVlbmNlPgotICAgIDxlbGVtZW50IG5hbWU9Ik1vZHVsdXMiIHR5cGU9ImRzOkNyeXB0b0JpbmFyeSIvPiAKLSAgICA8ZWxlbWVudCBuYW1lPSJFeHBvbmVudCIgdHlwZT0iZHM6Q3J5cHRvQmluYXJ5Ii8+IAotICA8L3NlcXVlbmNlPgotPC9jb21wbGV4VHlwZT4gCi0KLTwhLS0gRW5kIEtleVZhbHVlIEVsZW1lbnQtdHlwZXMgLS0+Ci0KLTwhLS0gRW5kIFNpZ25hdHVyZSAtLT4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9hbm51aXR5L2FubnVpdHluZXQueHNkIGIvdjIvdGVzdC9jYXNlcy9zY2hlbWEvYW5udWl0eS9hbm51aXR5bmV0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGEzZmJkNC4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9hbm51aXR5L2FubnVpdHluZXQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTM4OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLVByb3ByaWV0YXJ5ICYgQ29uZmlkZW50aWFsIHRvIEFubnVpdHlOZXQsIEluYy4gQWxsIHVzZSBvZiBBbm51aXR5TmV0IG1hdGVyaWFsIGlzIHN1YmplY3QgdG8gYW5kIHJlc3RyaWN0ZWQgYnkgYSBDb25maWRlbnRpYWxpdHkgQWdyZWVtZW50IG9yIG90aGVyIGFncmVlbWVudC4tLT4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmFubnVpdHluZXQuY29tL25hbWVzcGFjZS9wcm9maWxlcyIgCi14bWxuczpwcj0iaHR0cDovL3d3dy5hbm51aXR5bmV0LmNvbS9uYW1lc3BhY2UvcHJvZmlsZXMiIAoteG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0JPGVsZW1lbnQgbmFtZT0iRU5WRUxPUEUiPgotCQk8YW5ub3RhdGlvbj4KLQkJCTxkb2N1bWVudGF0aW9uPlRoZSB0cmFuc21pc3Npb24gZW52ZWxvcGUgdGhhdCBlbmNvbXBhc2VzIGFsbCB0cmFuc2FjdGlvbnMgaW5jbHVkZWQgaW4gdGhlIGZpbGUuICBUaGlzIGlzIHRoZSByb290IGVsZW1lbnQgb2YgdGhlIGZpbGUuPC9kb2N1bWVudGF0aW9uPgotCQk8L2Fubm90YXRpb24+Ci0JCTxjb21wbGV4VHlwZT4KLQkJCTxzZXF1ZW5jZT4KLQkJCQk8ZWxlbWVudCBuYW1lPSJIRUFERVIiPgotCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCTxkb2N1bWVudGF0aW9uPlRoZSBFTlZFTE9QRSBoZWFkZXIuICBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFydGllcyBpbnZvbHZlZCBpbiB0aGUgdHJhbnNtaXNzaW9uLCBhbmQgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJPGVsZW1lbnQgbmFtZT0iU0VORElOR19QQVJUWV9JRCIgdHlwZT0ic3RyaW5nIj4KLQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5UaGUgaWRlbnRpZmllciBmb3IgdGhlIHNlbmRpbmcgcGFydHkuIFRoZSBJRCBpcyBhbiBhZ3JlZWQgdXBvbiBzdGFuZGFyZCBiZXR3ZWVuIHRoZSB0d28gcGFydGllcy4gPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCTxlbGVtZW50IG5hbWU9IlJFQ0VJVklOR19QQVJUWV9JRCIgdHlwZT0ic3RyaW5nIj4KLQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5UaGUgaWRlbnRpZmllciBmb3IgdGhlIHJlY2VpdmluZyBwYXJ0eS4gIFRoZSBJRCBpcyBhbiBhZ3JlZWQgdXBvbiBzdGFuZGFyZCBiZXR3ZWVuIHRoZSB0d28gcGFydGllcy48L2RvY3VtZW50YXRpb24+Ci0JCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJPGVsZW1lbnQgbmFtZT0iVFJBTlNBQ1RJT05fQ09VTlQiIHR5cGU9ImludGVnZXIiPgotCQkJCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uPlRoZSBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGV4cGVjdGVkIGluIHRoZSBmaWxlLiBUbyBiZSB1c2VkIHRvIGNvbmZpcm0gdGhhdCB0aGUgZmlsZSBpcyBjb21wbGV0ZSBhcyB0aGUgc2VuZGluZyBwYXJ0eSB1bmRlcnN0YW5kcyBpdC48L2RvY3VtZW50YXRpb24+Ci0JCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJPGVsZW1lbnQgbmFtZT0iVEVTVCIgdHlwZT0iYm9vbGVhbiIgZGVmYXVsdD0iMCIgbWluT2NjdXJzPSIwIj4KLQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5PcHRpb25hbCBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGZpbGUgaXMgYSB0ZXN0IGZpbGUuPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQk8L2VsZW1lbnQ+Ci0JCQkJPGVsZW1lbnQgcmVmPSJwcjpUUkFOU0FDVElPTiIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTwvc2VxdWVuY2U+Ci0JCTwvY29tcGxleFR5cGU+Ci0JPC9lbGVtZW50PgotCTxlbGVtZW50IG5hbWU9IlRSQU5TQUNUSU9OIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8ZG9jdW1lbnRhdGlvbj5UaGUgcm9vdCBlbGVtZW50IG9mIGEgdHJhbnNhY3Rpb24uICBDb250YWlucyBhbGwgZGF0YSBhbmQgbWV0YWRhdGEgcmVnYXJkaW5nIGEgdHJhbnNhY3Rpb24uICBUaGUgU0NIRU1BX1ZFUlNJT04gc2hvdWxkIGJlIHNldCBmb3IgYWxsIHRyYW5zYWN0aW9ucyB0byBlbnN1cmUgY29tcGxpYW5jZSBhbW9uZ3N0IGFsbCBwYXJ0aWVzLjwvZG9jdW1lbnRhdGlvbj4KLQkJPC9hbm5vdGF0aW9uPgotCQk8Y29tcGxleFR5cGU+Ci0JCQk8c2VxdWVuY2U+Ci0JCQkJPGVsZW1lbnQgbmFtZT0iSEVBREVSIj4KLQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQk8ZG9jdW1lbnRhdGlvbj5UaGUgaGVhZGVyIGRlbm90ZXMgaGFuZGxpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRhdGEgcGFja2FnZShzKSBzdG9yZWQgaW4gdGhlIHJlcXVlc3Qgb3IgcmVzcG9uc2UgZWxlbWVudHMuICBUaGUgaW5mb3JtYXRpb24gZGVzY3JpYmVzIHRoZSBleGVjdXRpb24gb2YgdGhlIGRhdGEgcGFja2FnZSwgYXMgd2VsbCBhcyByb3V0aW5nIGFuZCBwYXJ0aWVzIGludm9sdmVkIHdpdGggdGhlIHBhY2thZ2UuPC9kb2N1bWVudGF0aW9uPgotCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJFRkZFQ1RJVkVfREFURSIgdHlwZT0iZGF0ZSIgbWluT2NjdXJzPSIwIj4KLQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5EYXRlIHRoYXQgdGhlIHRyYW5zYWN0aW9uIHNob3VsZCBiZSBpbnZva2VkIGFuZCB0aGUgZGF0YSBwcm9jZXNzZWQuPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCTxlbGVtZW50IG5hbWU9IkFTX09GX0RBVEVUSU1FIiB0eXBlPSJkYXRlVGltZSIgbWluT2NjdXJzPSIwIj4KLQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5EYXRlIGFuZCB0aW1lIHRoZSB0cmFuc2FjdGlvbiB3YXMgY3JlYXRlZC48L2RvY3VtZW50YXRpb24+Ci0JCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJPGVsZW1lbnQgbmFtZT0iQUNUSVZJVFkiPgotCQkJCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy5hbm51aXRuZXQuY29tL2RvY3VtZW50YXRpb24vcHJvZmlsZXMiPkFERCAtPiBBZGQgdG8gdGhlIENvbGxlY3Rpb25zIGluY2x1ZGVkLiBVc2VzIHRoZSBwcmltYXJ5IGtleXMgZm9yIHRoZSBDb2xsZWN0aW9ucyBpbnZvbHZlZC4gSWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGFkZCBhIENvbGxlY3Rpb24gdXNpbmcgcHJpbWFyeSBrZXlzIGFscmVhZHkgaW4gdXNlLCAgYW4gZXJyb3IgaXMgcmV0dXJuZWQuIHwgTU9ESUZZIC0+IFJlcGxhY2VzIG1lbWJlcnMgb2YgdGhlIENvbGxlY3Rpb25zIGluY2x1ZGVkLiBVc2VzIHRoZSBwcmltYXJ5IGtleSBmb3IgdGhlIENvbGxlY3Rpb24uIElmIGEgbmV3IHByaW1hcnkga2V5IHZhbHVlIGlzIGluY2x1ZGVkIHRoZW4gYSBuZXcgbWVtYmVyIGlzIGFkZGVkIHRvIHRoZSBDb2xsZWN0aW9uLiB8IERFTEVURSAtPiBEZWxldGUgbWVtYmVycyBvZiB0aGUgQ29sbGVjdGlvbnMgaW5jbHVkZWQuICBVc2VzIHRoZSBwcmltYXJ5IGtleSBmb3IgdGhlIENvbGxlY3Rpb24uIElmIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBkZWxldGUgYSBtZW1iZXIgd2hlcmUgdGhlIHByaW1hcnkga2V5IGlzIG5vdCBpbiB0aGUgQ29sbGVjdGlvbiwgdGhlbiBhbiBlcnJvciBpcyByZXR1cm5lZC48L2RvY3VtZW50YXRpb24+Ci0JCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQkJPHNpbXBsZVR5cGU+Ci0JCQkJCQkJCQk8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLQkJCQkJCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9IkFERCIvPgotCQkJCQkJCQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iTU9ESUZZIi8+Ci0JCQkJCQkJCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJERUxFVEUiLz4KLQkJCQkJCQkJCTwvcmVzdHJpY3Rpb24+Ci0JCQkJCQkJCTwvc2ltcGxlVHlwZT4KLQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJPGVsZW1lbnQgbmFtZT0iVFJBTlNBQ1RJT05fSUQiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5UcmFuc2FjdGlvbl9JRCBjYXB0dXJlcyB0aGUgZXh0ZXJuYWwgVHJhbnNhY3Rpb24gSUQgZm9yIGVhY2ggcGFydHkgdGhhdCBoYW5kbGVzIHRoZSB0cmFuc2FjdGlvbi48L2RvY3VtZW50YXRpb24+Ci0JCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQkJPGNvbXBsZXhUeXBlPgotCQkJCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCQkJCTxlbGVtZW50IG5hbWU9IlBBUlRZX0lEIiB0eXBlPSJzdHJpbmciLz4KLQkJCQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJUUkFOU0FDVElPTl9JRCIgdHlwZT0ic3RyaW5nIi8+Ci0JCQkJCQkJCQk8L3NlcXVlbmNlPgotCQkJCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJST1VUSU5HIj4KLQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5Db250YWlucyB0aGUgcm91dGluZyAnbWFwJyBvZiB3aGljaCBwYXJ0aWVzIG5lZWQgdG8gdGFrZSBwYXJ0IGluIHRoZSB0cmFuc2FjdGlvbiBhbmQgdGhlIG9yZGVyIHRoZWlyIGludGVyYWN0aW9uIG9jY3Vycy48L2RvY3VtZW50YXRpb24+Ci0JCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQkJPGNvbXBsZXhUeXBlPgotCQkJCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCQkJCTxlbGVtZW50IG5hbWU9IlNURVAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5EZXNjcmliZXMgZWFjaCBzdGVwIG9mIHRoZSByb3V0aW5nIG1hcC4gIE1hbnkgdHJhbnNhY3Rpb25zIHdpbGwgb25seSBpbmNsdWRlIG9uZSByZWNvcmQgaW4gdGhpcyBub2RlLCB3aXRoIGFuIG9yZGVyIG9mIDEuPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCTxjb21wbGV4Q29udGVudD4KLQkJCQkJCQkJCQkJCQk8ZXh0ZW5zaW9uIGJhc2U9InByOlNURVBUeXBlIj4KLQkJCQkJCQkJCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iT1JERVIiIHR5cGU9ImludGVnZXIiLz4KLQkJCQkJCQkJCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQk8L2V4dGVuc2lvbj4KLQkJCQkJCQkJCQkJCTwvY29tcGxleENvbnRlbnQ+Ci0JCQkJCQkJCQkJCTwvY29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJPGVsZW1lbnQgbmFtZT0iUk9VVElOR19ISVNUT1JZIj4KLQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5Qcm92aWRlcyBhIHJvdXRpbmcgbG9nLCB3aGljaCBzdG9yZXMgYSByZWNvcmQgZm9yIGVhY2ggcGFydHkgdGhhdCBoYW5kbGVzIHRoZSB0cmFuc2FjdGlvbi48L2RvY3VtZW50YXRpb24+Ci0JCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQkJPGNvbXBsZXhUeXBlPgotCQkJCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCQkJCTxlbGVtZW50IG5hbWU9IlNURVAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5TdG9yZXMgYSByZWNvcmQgZm9yIGVhY2ggcGFydHkgaW50ZXJhY3Rpb24gb24gdGhlIHRyYW5zYWN0aW9uLiAgRWFjaCBwYXJ0eSBzaG91bGQgc3RvcmUgdGhlaXIgc2VuZCBvciByZWNlaXZlIGRhdGUgYW5kIHRpbWUsIG9uY2UgdGhleSByZWNlaXZlIHRoZSBwYWNrZXQuICAgVGhpcyBoaXN0b3J5IGNhbiBiZSByZWNvbmNpbGVkIGFnYWluc3QgdGhlIHBsYW5uZWQgcm91dGluZyBzdGVwcyB0byBlbnN1cmUgdGhhdCB0aGUgdHJhbnNhY3Rpb24gd29ya2Zsb3cgd2FzIHN1Y2Nlc3NmdWwuPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCTxjb21wbGV4Q29udGVudD4KLQkJCQkJCQkJCQkJCQk8ZXh0ZW5zaW9uIGJhc2U9InByOlNURVBUeXBlIj4KLQkJCQkJCQkJCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iU0VORF9EQVRFVElNRSIgdHlwZT0iZGF0ZVRpbWUiLz4KLQkJCQkJCQkJCQkJCQkJCTxlbGVtZW50IG5hbWU9IlJFQ0VJVkVfREFURVRJTUUiIHR5cGU9ImRhdGVUaW1lIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJCQkJCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQk8L2V4dGVuc2lvbj4KLQkJCQkJCQkJCQkJCTwvY29tcGxleENvbnRlbnQ+Ci0JCQkJCQkJCQkJCTwvY29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJPGVsZW1lbnQgbmFtZT0iVFJBTlNBQ1RJT05fVFlQRSI+Ci0JCQkJCQkJCTxhbm5vdGF0aW9uPgotCQkJCQkJCQkJPGRvY3VtZW50YXRpb24+VGhlIHR5cGUgb2YgdHJhbnNhY3Rpb24gdGhhdCB0aGlzIHJlcHJlc2VudHMuICBGb3IgZXhhbXBsZSwgYSBQcm9kdWN0IERlZmluaXRpb24uPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJCTxzaW1wbGVUeXBlPgotCQkJCQkJCQkJPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0JCQkJCQkJCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJCVVNJTkVTU19VTklUX0RFRklOSVRJT04iLz4KLQkJCQkJCQkJCTwvcmVzdHJpY3Rpb24+Ci0JCQkJCQkJCTwvc2ltcGxlVHlwZT4KLQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQk8L3NlcXVlbmNlPgotCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCTwvZWxlbWVudD4KLQkJCQk8ZWxlbWVudCBuYW1lPSJSRVFVRVNUIj4KLQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQk8ZG9jdW1lbnRhdGlvbj5UaGUgUkVRVUVTVCBlbGVtZW50IGNvbnRhaW5zIHRoZSBkYXRhIG5lY2Nlc3NhcnkgZm9yIHRoZSByZXF1ZXN0LiAgVGhpcyBkYXRhIGNvbWVzIGZyb20gdGhlIHNlbmRpbmcgcGFydHkgdG8gYmUgYW5hbHl6ZWQgYW5kIHVzZWQgYnkgdGhlIHJlY2VpdmluZyBwYXJ0eS48L2RvY3VtZW50YXRpb24+Ci0JCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJPGNvbXBsZXhUeXBlPgotCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCTxlbGVtZW50IHJlZj0icHI6QlVTSU5FU1NfVU5JVFMiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQkJCTxlbGVtZW50IHJlZj0icHI6VVNFUlMiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQkJCTxlbGVtZW50IHJlZj0icHI6VVNFUl9ST0xFUyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCQkJPGVsZW1lbnQgcmVmPSJwcjpBQ0NPVU5UUyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCQkJPGVsZW1lbnQgcmVmPSJwcjpDT05UQUNUUyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCQkJPGVsZW1lbnQgcmVmPSJwcjpCVVNJTkVTU19VTklUX0FWQUlMQUJJTElUWSIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCQkJPGVsZW1lbnQgcmVmPSJwcjpPUEVSQVRJTkdfUFJPRklMRVMiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQkJCTxlbGVtZW50IHJlZj0icHI6VFJBTlNBQ1RJT05fUk9VVElOR1MiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQkJCTxlbGVtZW50IHJlZj0icHI6VVNFUl9UT19CVVNJTkVTU19VTklUX01BUFBJTkdTIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJCQk8ZWxlbWVudCByZWY9InByOkJVU0lORVNTX1VOSVRfUkVMQVRJT05TSElQUyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCQkJPGVsZW1lbnQgcmVmPSJwcjpCVVNJTkVTU19VTklUX09QRVJBVElOR19QUk9GSUxFX0xJTktTIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJCTwvc2VxdWVuY2U+Ci0JCQkJCTwvY29tcGxleFR5cGU+Ci0JCQkJPC9lbGVtZW50PgotCQkJPC9zZXF1ZW5jZT4KLQkJCTxhdHRyaWJ1dGUgbmFtZT0iU0NIRU1BX1ZFUlNJT04iIHVzZT0icmVxdWlyZWQiPgotCQkJCTxzaW1wbGVUeXBlPgotCQkJCQk8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLQkJCQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iUEFSVE5FUl9YTUxfSU5URVJGQUNFX1YxLjEwIi8+Ci0JCQkJCTwvcmVzdHJpY3Rpb24+Ci0JCQkJPC9zaW1wbGVUeXBlPgotCQkJPC9hdHRyaWJ1dGU+Ci0JCTwvY29tcGxleFR5cGU+Ci0JPC9lbGVtZW50PgotCTxlbGVtZW50IG5hbWU9IklEUyI+Ci0JCTxjb21wbGV4VHlwZT4KLQkJCTxzZXF1ZW5jZT4KLQkJCQk8ZWxlbWVudCByZWY9InByOklEIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPC9zZXF1ZW5jZT4KLQkJPC9jb21wbGV4VHlwZT4KLQk8L2VsZW1lbnQ+Ci0JPGVsZW1lbnQgbmFtZT0iSUQiIHR5cGU9InByOklEVHlwZSI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGRvY3VtZW50YXRpb24+V2hlbiB1c2VkIGluIGFuIElEUyBjb2xsZWN0aW9uIHRoaXMgaXMgdGhlIElEIGJ5IHdoaWNoIHRoZSBJRFMgY29sbGVjdGlvbidzIHBhcmVudCBkYXRhIGVsZW1lbnQgaXMgcmVmZXJlbmNlZCAobGlua2VkKS4gIFdoZW4gdXNlZCBhcyBhIHN1YmVsZW1lbnQgb2YgKl9MSU5LIGVsZW1lbnQgdGhpcyByZXByZXNlbnRzIHRoZSBJRCBvZiB0aGUgcmVmZXJlbmNlZCBkYXRhIGVsZW1lbnQuICBXaGVuIHVzZWQgYXMgYSBzdWJlbGVtZW50IG9mICpfTElOSyBlbGVtZW50IHRoaXMgcmVwcmVzZW50cyB0aGUgSUQgb2YgdGhlIHJlZmVyZW5jZWQgZGF0YSBlbGVtZW50LjwvZG9jdW1lbnRhdGlvbj4KLQkJPC9hbm5vdGF0aW9uPgotCTwvZWxlbWVudD4KLQk8ZWxlbWVudCBuYW1lPSJCVVNJTkVTU19VTklUUyI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGRvY3VtZW50YXRpb24+RGVmaW5lcyBhIGJ1c2luZXNzIHVuaXQgd2l0aGluIHRoZSBkaXN0cmlidXRvci4gIFRoaXMgbWlnaHQgYmUgYSB1bml0IHRoYXQgY29udGFpbnMgdXNlcnMsIHN1Y2ggYXMgYSBmaXJtLCBvciBhIGdyb3VwIHRoYXQgY29udGFpbnMgb3RoZXIgYnVzaW5lc3MgdW5pdHMuICAoQ29tbW9ubHkgdXNlZCBmb3IgcmVwb3J0aW5nIHB1cnBvc2VzKTwvZG9jdW1lbnRhdGlvbj4KLQkJPC9hbm5vdGF0aW9uPgotCQk8Y29tcGxleFR5cGU+Ci0JCQk8c2VxdWVuY2U+Ci0JCQkJPGVsZW1lbnQgbmFtZT0iQlVTSU5FU1NfVU5JVCIgdHlwZT0icHI6QlVTSU5FU1NfVU5JVFR5cGUiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8L3NlcXVlbmNlPgotCQk8L2NvbXBsZXhUeXBlPgotCTwvZWxlbWVudD4KLQk8ZWxlbWVudCBuYW1lPSJVU0VSUyI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGRvY3VtZW50YXRpb24+RGVmaW5lcyB0aGUgY29sbGVjdGlvbiBvZiB1c2VycyB0aGF0IHdpbGwgYmUgdXNpbmcgdGhlIHN5c3RlbS48L2RvY3VtZW50YXRpb24+Ci0JCTwvYW5ub3RhdGlvbj4KLQkJPGNvbXBsZXhUeXBlPgotCQkJPHNlcXVlbmNlPgotCQkJCTxlbGVtZW50IG5hbWU9IlVTRVIiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQkJPGNvbXBsZXhUeXBlPgotCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCTxlbGVtZW50IHJlZj0icHI6SURTIi8+Ci0JCQkJCQkJPGVsZW1lbnQgbmFtZT0iQUNUSVZFIiB0eXBlPSJib29sZWFuIiBtaW5PY2N1cnM9IjAiPgotCQkJCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uPkZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoaXMgdXNlciBhY2NvdW50IGlzIGFjdGl2ZSBvciBub3QuPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCTxlbGVtZW50IG5hbWU9IlRJTiIgdHlwZT0ic3RyaW5nIiBtaW5PY2N1cnM9IjAiPgotCQkJCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uPlVzZXIncyBUSU4gb3IgU1NOPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCTxlbGVtZW50IG5hbWU9IlVTRVJfTE9HT05fSUQiIHR5cGU9InN0cmluZyIgbWluT2NjdXJzPSIwIj4KLQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5UaGUgdXNlcidzIGxvZ29uIGlkLiAgU2hvdWxkIGluY2x1ZGUgbGV0dGVycyBhbmQgYXQgbGVhc3Qgb25lIG51bWJlci4gIChpLmUuIHVzZXI2KTwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJQQVNTV09SRCIgdHlwZT0ic3RyaW5nIiBtaW5PY2N1cnM9IjAiPgotCQkJCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uPlRoZSB1c2VyJ3MgbG9nb24gcGFzc3dvcmQuICAgUGFzc3dvcmRzIHNob3VsZCBiZSBhdCBsZWFzdCA4IGNoYXJhY3RlcnMgbG9uZywgYW5kIGluY2x1ZGUgYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmc6IGxldHRlciwgbnVtYmVyIGFuZCBwdW5jdHVhdGlvbiAoaS5lLiA0cGEkJHdvcmQpPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCTxlbGVtZW50IG5hbWU9IkxBU1RfTkFNRSIgdHlwZT0ic3RyaW5nIiBtaW5PY2N1cnM9IjAiPgotCQkJCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uPlRoZSBVc2VyJ3MgTGFzdCBOYW1lPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCTxlbGVtZW50IG5hbWU9IkZJUlNUX05BTUUiIHR5cGU9InN0cmluZyIgbWluT2NjdXJzPSIwIj4KLQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5UaGUgVXNlcidzIEZpcnN0IE5hbWU8L2RvY3VtZW50YXRpb24+Ci0JCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJPGVsZW1lbnQgbmFtZT0iTUlERExFX0lOSVRJQUwiIG1pbk9jY3Vycz0iMCI+Ci0JCQkJCQkJCTxhbm5vdGF0aW9uPgotCQkJCQkJCQkJPGRvY3VtZW50YXRpb24+VGhlIFVzZXIncyBtaWRkbGUgaW5pdGlhbDwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCQkJCQk8c2ltcGxlVHlwZT4KLQkJCQkJCQkJCTxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotCQkJCQkJCQkJCTxtaW5MZW5ndGggdmFsdWU9IjAiLz4KLQkJCQkJCQkJCQk8bWF4TGVuZ3RoIHZhbHVlPSIxIi8+Ci0JCQkJCQkJCQk8L3Jlc3RyaWN0aW9uPgotCQkJCQkJCQk8L3NpbXBsZVR5cGU+Ci0JCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCTxlbGVtZW50IG5hbWU9IlNBTFVUQVRJT05fQ0QiIG1pbk9jY3Vycz0iMCI+Ci0JCQkJCQkJCTxhbm5vdGF0aW9uPgotCQkJCQkJCQkJPGRvY3VtZW50YXRpb24+VGhlIHNhbHV0YXRpb24gb2YgdGhlIHVzZXIuICBTaG91bGQgbm90IGluY2x1ZGUgYW55IHB1bmN0dWF0aW9uLjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCQkJCQk8c2ltcGxlVHlwZT4KLQkJCQkJCQkJCTxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotCQkJCQkJCQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iTXIiLz4KLQkJCQkJCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9Ik1ycyIvPgotCQkJCQkJCQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iTXMiLz4KLQkJCQkJCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9Ik1pc3MiLz4KLQkJCQkJCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9IkRyIi8+Ci0JCQkJCQkJCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJSZXYiLz4KLQkJCQkJCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9IkF0dHkiLz4KLQkJCQkJCQkJCTwvcmVzdHJpY3Rpb24+Ci0JCQkJCQkJCTwvc2ltcGxlVHlwZT4KLQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJPGVsZW1lbnQgbmFtZT0iU1VGRklYX0NEIiBtaW5PY2N1cnM9IjAiPgotCQkJCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uPk5hbWUgc3VmZml4IG9mIHRoZSB1c2VyLiAgU2hvdWxkIG5vdCBpbmNsdWRlIGFueSBwdW5jdHVhdGlvbi48L2RvY3VtZW50YXRpb24+Ci0JCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQkJPHNpbXBsZVR5cGU+Ci0JCQkJCQkJCQk8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLQkJCQkJCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9IkpyIi8+Ci0JCQkJCQkJCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJTciIvPgotCQkJCQkJCQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iSUkiLz4KLQkJCQkJCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9IklJSSIvPgotCQkJCQkJCQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iSVYiLz4KLQkJCQkJCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9Ik1EIi8+Ci0JCQkJCQkJCQk8L3Jlc3RyaWN0aW9uPgotCQkJCQkJCQk8L3NpbXBsZVR5cGU+Ci0JCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCTxlbGVtZW50IG5hbWU9IkVNQUlMIiB0eXBlPSJzdHJpbmciIG1pbk9jY3Vycz0iMCI+Ci0JCQkJCQkJCTxhbm5vdGF0aW9uPgotCQkJCQkJCQkJPGRvY3VtZW50YXRpb24+VGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIHVzZXIuICBTaG91bGQgYmUgaW4gSW50ZXJuZXQgZW1haWwgZm9ybWF0OiBtYWlsYm94QGRvbWFpbi5jb208L2RvY3VtZW50YXRpb24+Ci0JCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJPGVsZW1lbnQgbmFtZT0iUEhPTkVfTlVNQkVSIiB0eXBlPSJzdHJpbmciIG1pbk9jY3Vycz0iMCI+Ci0JCQkJCQkJCTxhbm5vdGF0aW9uPgotCQkJCQkJCQkJPGRvY3VtZW50YXRpb24+VGhlIHBob25lIG51bWJlciBvZiB0aGUgdXNlci48L2RvY3VtZW50YXRpb24+Ci0JCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJPGVsZW1lbnQgbmFtZT0iTElDRU5TRVMiIHR5cGU9InByOkxJQ0VOU0VTVHlwZSIgbWluT2NjdXJzPSIwIj4KLQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5UaGUgdXNlcidzIGxpY2Vuc2VzLCBieSB0eXBlIGFuZCBzdGF0ZS4gIDwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJBUFBPSU5UTUVOVFMiIHR5cGU9InByOkFQUE9JTlRNRU5UU1R5cGUiIG1pbk9jY3Vycz0iMCI+Ci0JCQkJCQkJCTxhbm5vdGF0aW9uPgotCQkJCQkJCQkJPGRvY3VtZW50YXRpb24+VGhlIFVzZXIncyBhcHBvaW50bWVudCByaWdodHMuPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQk8L2VsZW1lbnQ+Ci0JCQk8L3NlcXVlbmNlPgotCQk8L2NvbXBsZXhUeXBlPgotCTwvZWxlbWVudD4KLQk8ZWxlbWVudCBuYW1lPSJVU0VSX1JPTEVTIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8ZG9jdW1lbnRhdGlvbj5EZWZpbmVzIHRoZSByb2xlcyBhdmFpbGFibGUgdG8gYSB1c2VyLjwvZG9jdW1lbnRhdGlvbj4KLQkJPC9hbm5vdGF0aW9uPgotCQk8Y29tcGxleFR5cGU+Ci0JCQk8c2VxdWVuY2U+Ci0JCQkJPGVsZW1lbnQgbmFtZT0iVVNFUl9ST0xFIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCQk8ZWxlbWVudCByZWY9InByOklEUyIvPgotCQkJCQkJCTxlbGVtZW50IG5hbWU9IkRFU0NSSVBUSU9OIiB0eXBlPSJzdHJpbmciIG1pbk9jY3Vycz0iMCI+Ci0JCQkJCQkJCTxhbm5vdGF0aW9uPgotCQkJCQkJCQkJPGRvY3VtZW50YXRpb24+RGVzY3JpcHRpb24gb2YgdXNlciByb2xlLjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCTwvc2VxdWVuY2U+Ci0JCQkJCTwvY29tcGxleFR5cGU+Ci0JCQkJPC9lbGVtZW50PgotCQkJPC9zZXF1ZW5jZT4KLQkJPC9jb21wbGV4VHlwZT4KLQk8L2VsZW1lbnQ+Ci0JPGVsZW1lbnQgbmFtZT0iVVNFUl9UT19CVVNJTkVTU19VTklUX01BUFBJTkdTIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8ZG9jdW1lbnRhdGlvbj5EZWZpbmVzIHRoZSB1c2VyLCByb2xlLCBidXNpbmVzcyB1bml0IGxpbmthZ2VzLiBBdCB0aGUgY3VycmVudCB0aW1lIEFubnVpdHlOZXQgb25seSBzdXBwb3J0cyBhIHNpbmdsZSByb2xlIGFuZCBidXNpbmVzcyB1bml0IHBlciB1c2VyLiBJZiBvbmUgd2FudHMgdG8gYXNzaWduIG11bHRpcGxlIHJvbGVzIGFuZC9vciBidXNpbmVzcyB1bml0cyB0byBhbiBpbmRpdmlkdWFsLCB0aGVuIHRoaXMgaW5kaXZpZHVhbCBoYXMgdG8gYXBwZWFyIHR3aWNlIGluIHRoZSBVU0VSUyBjb2xsZWN0aW9uIHdpdGggZGlmZmVyZW50IGxvZ2lucy48L2RvY3VtZW50YXRpb24+Ci0JCTwvYW5ub3RhdGlvbj4KLQkJPGNvbXBsZXhUeXBlPgotCQkJPHNlcXVlbmNlPgotCQkJCTxlbGVtZW50IG5hbWU9IlVTRVJfVE9fQlVTSU5FU1NfVU5JVF9NQVBQSU5HIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJCVVNJTkVTU19VTklUX0xJTksiIHR5cGU9InByOkxJTktUeXBlIj4KLQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5UaGUgYnVzaW5lc3MgdW5pdCB0aGUgdXNlciB3aWxsIHJlcG9ydCB0by48L2RvY3VtZW50YXRpb24+Ci0JCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJPGVsZW1lbnQgbmFtZT0iVVNFUl9MSU5LIiB0eXBlPSJwcjpMSU5LVHlwZSI+Ci0JCQkJCQkJCTxhbm5vdGF0aW9uPgotCQkJCQkJCQkJPGRvY3VtZW50YXRpb24+VGhlIElEIG9mIHRoZSB1c2VyIHRoYXQgaXMgYmVpbmcgbWFwcGVkIHRvIHRoZSBidXNpbmVzcyB1bml0LjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJVU0VSX1JPTEVfTElOSyIgdHlwZT0icHI6TElOS1R5cGUiPgotCQkJCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uPlRoZSBVc2VyIFJvbGUgb2YgdGhlIHVzZXIsIGFzIHRoZXkgYXJlIG1hcHBlZCB0byB0aGUgYnVzaW5lc3MgdW5pdC48L2RvY3VtZW50YXRpb24+Ci0JCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQk8L3NlcXVlbmNlPgotCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCTwvZWxlbWVudD4KLQkJCTwvc2VxdWVuY2U+Ci0JCTwvY29tcGxleFR5cGU+Ci0JPC9lbGVtZW50PgotCTxlbGVtZW50IG5hbWU9IkJVU0lORVNTX1VOSVRfQVZBSUxBQklMSVRZIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8ZG9jdW1lbnRhdGlvbj5JbmRpY2F0ZXMgd2hpY2ggcHJvZHVjdHMsIHJpZGVycywgcGxhbnMsIHNlcnZpY2UgcHJvZ3JhbXMsIGFuZCBmdW5kcyBhcmUgYXZhaWxhYmxlIHRvIGEgYnVzaW5lc3MgdW5pdC48L2RvY3VtZW50YXRpb24+Ci0JCTwvYW5ub3RhdGlvbj4KLQkJPGNvbXBsZXhUeXBlPgotCQkJPHNlcXVlbmNlPgotCQkJCTxlbGVtZW50IG5hbWU9IkJVU0lORVNTX1VOSVRfTElOS1MiPgotCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJPGVsZW1lbnQgbmFtZT0iQlVTSU5FU1NfVU5JVF9MSU5LIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCQkJCQk8ZWxlbWVudCByZWY9InByOklEIi8+Ci0JCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iQVZBSUxBQklMSVRZIiB0eXBlPSJwcjpBVkFJTEFCSUxJVFlUeXBlIj4KLQkJCQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5FYWNoIGNoaWxkIGVsZW1lbnQgaXMgdXNlZCBhcyBhIHBhc3MgZmlsdGVyLiBUaGF0IGlzLCBhIHBhcnRpY3VsYXIgcHJvZHVjdCwgcGxhbiwgcmlkZXIsIHNlcnZpY2UgcHJvZ3JhbSwgZnVuZCBjb21iaW5hdGlvbiBpcyBhdmFpbGFibGUgdG8gYSBwYXJ0aWN1bGFyIEJ1c2luZXNzIFVuaXQgaW4gYSBwYXJ0aWN1bGFyIHN0YXRlIGlmIHRoaXMgY29tYmluYXRpb24gaXMgYXZhaWxhYmxlIGluIHRoZSBEaXN0cmlidXRvciBEZWZpbml0aW9uIHhtbCBhbmQgdGhlIFByb2R1Y3QgRGVmaW5pdGlvbiB4bWwgYXMgd2VsbCBhcyBiZWluZyBhdmFpbGFibGUgaW4gZWFjaCBvZiB0aGUgY2hpbGRyZW4gZWxlbWVudHMgb2YgdGhpcyBlbGVtZW50LjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCQkJCTwvc2VxdWVuY2U+Ci0JCQkJCQkJCTwvY29tcGxleFR5cGU+Ci0JCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQk8L2VsZW1lbnQ+Ci0JCQk8L3NlcXVlbmNlPgotCQk8L2NvbXBsZXhUeXBlPgotCTwvZWxlbWVudD4KLQk8ZWxlbWVudCBuYW1lPSJPUFRJT05BTElUWSIgZGVmYXVsdD0iT1BUSU9OQUwiPgotCQk8YW5ub3RhdGlvbj4KLQkJCTxkb2N1bWVudGF0aW9uPklzIHRoaXMgYSByZXF1aXJlZCBvciBvcHRpb25hbCA8L2RvY3VtZW50YXRpb24+Ci0JCTwvYW5ub3RhdGlvbj4KLQkJPHNpbXBsZVR5cGU+Ci0JCQk8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9IlJFUVVJUkVEIi8+Ci0JCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJPUFRJT05BTCIvPgotCQkJPC9yZXN0cmljdGlvbj4KLQkJPC9zaW1wbGVUeXBlPgotCTwvZWxlbWVudD4KLQk8ZWxlbWVudCBuYW1lPSJUUkFOU0FDVElPTl9ST1VUSU5HUyI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGRvY3VtZW50YXRpb24+RGVmaW5lcyB0aGUgcG9zc2libGUgdHJhbnNhY3Rpb24gcm91dGluZyBtZXRob2RzIHRvIGJlIHVzZWQgYnkgdGhlIGJ1c2luZXNzIHVuaXRzLiAgRWFjaCB0cmFuc2FjdGlvbiByb3V0aW5nIGNhbiBpbmNsdWRlIHBhcmFtZXRlcnMgdGhhdCBuZWVkIHRvIGJlIGZpbGxlZCBvdXQgZm9yIHRoYXQgcm91dGluZyB0eXBlLiBUaGlzIGVsZW1lbnQgYWxzbyBleGlzdHMgaW4gdGhlIERpc3RyaWJ1dG9yIERlZmluaXRpb24geG1sIHdoaWNoIGlzIHRoZSBwcmVmZXJyZWQgc291cmNlIG9mIHRoaXMgaW5mb3JtYXRpb24uPC9kb2N1bWVudGF0aW9uPgotCQk8L2Fubm90YXRpb24+Ci0JCTxjb21wbGV4VHlwZT4KLQkJCTxzZXF1ZW5jZT4KLQkJCQk8ZWxlbWVudCBuYW1lPSJUUkFOU0FDVElPTl9ST1VUSU5HIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCTxjaG9pY2U+Ci0JCQkJCQkJPGVsZW1lbnQgcmVmPSJwcjpJRCIvPgotCQkJCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCQkJPGVsZW1lbnQgcmVmPSJwcjpJRFMiLz4KLQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iTkFNRSIgdHlwZT0ic3RyaW5nIj4KLQkJCQkJCQkJCTxhbm5vdGF0aW9uPgotCQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uPlRoZSBuYW1lIG9mIHRoaXMgdHJhbnNhY3Rpb24gcm91dGluZy48L2RvY3VtZW50YXRpb24+Ci0JCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iRk9STUFUIj4KLQkJCQkJCQkJCTxhbm5vdGF0aW9uPgotCQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uPkZvcm1hdHMgaW4gd2hpY2ggdHJhbnNhY3Rpb24gcmVxdWVzdHMgbWF5IGJlIHJlY2lldmVkPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCQkJCQkJPHNpbXBsZVR5cGU+Ci0JCQkJCQkJCQkJPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0JCQkJCQkJCQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iQU5TSSIvPgotCQkJCQkJCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9Ik5TQ0MiLz4KLQkJCQkJCQkJCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJBTk5VSVRZTkVUX1BST0ZJTEVfVjEuMCIvPgotCQkJCQkJCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9IlhNTElGRSIvPgotCQkJCQkJCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9IlRYTUxJRkUiLz4KLQkJCQkJCQkJCQk8L3Jlc3RyaWN0aW9uPgotCQkJCQkJCQkJPC9zaW1wbGVUeXBlPgotCQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJCTxlbGVtZW50IG5hbWU9IlBBUkFNRVRFUlMiIG1pbk9jY3Vycz0iMCI+Ci0JCQkJCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5BIGNvbGxlY3Rpb24gb2YgcGFyYW1ldGVycyBhbmQgdmFsdWVzIHRoYXQgYXJlIG5lY2Nlc3NhcnkgZm9yIHRoZSB0cmFuc2FjdGlvbiByb3V0aW5nLiAgRm9yIGluc3RhbmNlLCBhbiBOU0NDIHJvdXRpbmcgd291bGQgcmVxdWlyZSBhIE5TQ0MgSUQuICBJbiB0aGlzIHNjb3BlLCB0aGUgZGlzdHJpYnV0b3IgZGVmaW5lcyB0aGUgcG9zc2libGUgcGFyYW1ldGVycyBmb3IgZWFjaCByb3V0aW5nIHR5cGUsIGFuZCB3aWxsIGZpbGwgaW4gdGhlIHZhbHVlcyBpbiB0aGUgc2ltaWxhciBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBPUEVSQVRJTkdfUFJPRklMRVMgZWxlbWVudC48L2RvY3VtZW50YXRpb24+Ci0JCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJQQVJBTUVURVIiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQkJCQkJCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCTxlbGVtZW50IG5hbWU9Ik5BTUUiIHR5cGU9InN0cmluZyI+Ci0JCQkJCQkJCQkJCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5UaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQkJCQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCQkJCQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCTwvY29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCQkJCQk8L3NlcXVlbmNlPgotCQkJCQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCTwvc2VxdWVuY2U+Ci0JCQkJCQk8L2Nob2ljZT4KLQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQk8L2VsZW1lbnQ+Ci0JCQk8L3NlcXVlbmNlPgotCQk8L2NvbXBsZXhUeXBlPgotCTwvZWxlbWVudD4KLQk8ZWxlbWVudCBuYW1lPSJCVVNJTkVTU19VTklUX09QRVJBVElOR19QUk9GSUxFX0xJTktTIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8ZG9jdW1lbnRhdGlvbj5MaW5rcyB0aGUgZGVmaW5lZCBvcGVyYXRpbmcgcHJvZmlsZXMgdG8gdGhlIGJ1c2luZXNzIHVuaXRzIHRoZXkgYXBwbHkgdG8uPC9kb2N1bWVudGF0aW9uPgotCQk8L2Fubm90YXRpb24+Ci0JCTxjb21wbGV4VHlwZT4KLQkJCTxzZXF1ZW5jZT4KLQkJCQk8ZWxlbWVudCBuYW1lPSJCVVNJTkVTU19VTklUX0xJTktTIj4KLQkJCQkJPGNvbXBsZXhUeXBlPgotCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCTxlbGVtZW50IG5hbWU9IkJVU0lORVNTX1VOSVRfTElOSyIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQkJPGVsZW1lbnQgcmVmPSJwcjpJRCIvPgotCQkJCQkJCQkJCTxlbGVtZW50IG5hbWU9IlBST0RVQ1RfTElOS1MiPgotCQkJCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iUFJPRFVDVF9MSU5LIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCQkJCQkJCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQkJCQk8ZWxlbWVudCByZWY9InByOklEIi8+Ci0JCQkJCQkJCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iT1BFUkFUSU5HX1BST0ZJTEVfTElOS1MiIG1pbk9jY3Vycz0iMCI+Ci0JCQkJCQkJCQkJCQkJCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCQkJCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJPUEVSQVRJTkdfUFJPRklMRV9MSU5LIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCTxhbm5vdGF0aW9uPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGRvY3VtZW50YXRpb24+VGhlc2Ugb3BlcmF0aW5nIHByb2ZpbGVzIG11c3QgYmUgcmVzdHJpY3Rpb25zIG9mIHRoZSBvcGVyYXRpbmcgcHJvZmlsZXMgY29ycmVzcG9uZGluZyB0byB0aGUgc2FtZSBwcm9kdWN0IGluIHRoZSBEaXN0cmlidXRvciBEZWZpbml0aW9uIHhtbC48L2RvY3VtZW50YXRpb24+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJPGNvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTxlbGVtZW50IHJlZj0icHI6SUQiLz4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvc2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCTwvY29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCQkJCQkJCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJCQkJCQkJCQk8L3NlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCQkJCQkJCTwvc2VxdWVuY2U+Ci0JCQkJCQkJCQkJCTwvY29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQk8L3NlcXVlbmNlPgotCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCTwvZWxlbWVudD4KLQkJCTwvc2VxdWVuY2U+Ci0JCTwvY29tcGxleFR5cGU+Ci0JPC9lbGVtZW50PgotCTxlbGVtZW50IG5hbWU9Ik9QRVJBVElOR19QUk9GSUxFUyI+Ci0JCTxhbm5vdGF0aW9uPgotCQkJPGRvY3VtZW50YXRpb24+RGVmaW5lcyBhIHNldCBvZiBwb3NzaWJsZSBjb21taXNzaW9uIG9wdGlvbnMsIHRyYW5zYWN0aW9uIHR5cGVzLCBhbmQgbW9uZXkgZm9ybXMgYXZhaWxhYmxlIHRvIHRoZSBidXNpbmVzcyB1bml0LiBBbHNvLCB0aGUgbmV0dGluZyBvcHRpb24gYW5kIHRyYW5zYWN0aW9uIHJvdXRpbmcgdGhhdCB0aGUgZm9yIGVhY2ggdHJhbnNhY3Rpb24gdHlwZS4gPC9kb2N1bWVudGF0aW9uPgotCQk8L2Fubm90YXRpb24+Ci0JCTxjb21wbGV4VHlwZT4KLQkJCTxzZXF1ZW5jZT4KLQkJCQk8ZWxlbWVudCBuYW1lPSJPUEVSQVRJTkdfUFJPRklMRSIgdHlwZT0icHI6T1BFUkFUSU5HX1BST0ZJTEVUeXBlIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPC9zZXF1ZW5jZT4KLQkJPC9jb21wbGV4VHlwZT4KLQk8L2VsZW1lbnQ+Ci0JPGVsZW1lbnQgbmFtZT0iQ09OVEFDVFMiPgotCQk8YW5ub3RhdGlvbj4KLQkJCTxkb2N1bWVudGF0aW9uPkNvbnRhY3QgaW5mb3JtYXRpb24uPC9kb2N1bWVudGF0aW9uPgotCQk8L2Fubm90YXRpb24+Ci0JCTxjb21wbGV4VHlwZT4KLQkJCTxzZXF1ZW5jZT4KLQkJCQk8ZWxlbWVudCBuYW1lPSJDT05UQUNUIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCQk8ZWxlbWVudCByZWY9InByOklEUyIvPgotCQkJCQkJCTxlbGVtZW50IG5hbWU9Ik5BTUUiIHR5cGU9InN0cmluZyIgbWluT2NjdXJzPSIwIj4KLQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5Db250YWN0IG5hbWUuPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCTxlbGVtZW50IG5hbWU9IlBIT05FX05VTUJFUiIgdHlwZT0ic3RyaW5nIiBtaW5PY2N1cnM9IjAiPgotCQkJCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uPkNvbnRhY3QgcGhvbmUgbnVtYmVyLjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJFTUFJTCIgdHlwZT0ic3RyaW5nIiBtaW5PY2N1cnM9IjAiPgotCQkJCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uPkNvbnRhY3QgZS1tYWlsIGFkZHJlc3MuPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQk8L2VsZW1lbnQ+Ci0JCQk8L3NlcXVlbmNlPgotCQk8L2NvbXBsZXhUeXBlPgotCTwvZWxlbWVudD4KLQk8ZWxlbWVudCBuYW1lPSJCVVNJTkVTU19VTklUX1JFTEFUSU9OU0hJUFMiPgotCQk8YW5ub3RhdGlvbj4KLQkJCTxkb2N1bWVudGF0aW9uPkRlZmluZXMgdGhlIHJlcG9ydGluZyBoaWVyYXJjaHkuIEFubnVpdHlOZXQgb25seSBzdXBwb3J0cyBhIHNpbmdsZSBoaWVyYXJjaHkgLS0gdGhhdCBpcywgZWFjaCBidXNpbmVzcyB1bml0IGNhbiBoYXZlIGF0IG1vc3Qgb25lIHBhcmVudC48L2RvY3VtZW50YXRpb24+Ci0JCTwvYW5ub3RhdGlvbj4KLQkJPGNvbXBsZXhUeXBlPgotCQkJPHNlcXVlbmNlPgotCQkJCTxlbGVtZW50IG5hbWU9IkJVU0lORVNTX1VOSVRfUkVMQVRJT05TSElQIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJQQVJFTlRfQlVTSU5FU1NfVU5JVF9MSU5LIiB0eXBlPSJwcjpMSU5LVHlwZSI+Ci0JCQkJCQkJCTxhbm5vdGF0aW9uPgotCQkJCQkJCQkJPGRvY3VtZW50YXRpb24+TGluayB0byB0aGUgIGJ1c2luZXNzIHVuaXQgdGhhdCB3aWxsIGhvbGQgdGhlIGNoaWxkIGJ1c2luZXNzIHVuaXQuPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCTxlbGVtZW50IG5hbWU9IkNISUxEX0JVU0lORVNTX1VOSVRfTElOSyIgdHlwZT0icHI6TElOS1R5cGUiPgotCQkJCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uPlRoZSBsaW5rIHRvIHRoZSBidXNpbmVzcyB1bml0IHRoYXQgcmVzaWRlcyB3aXRoaW4gdGhlIHBhcmVudC48L2RvY3VtZW50YXRpb24+Ci0JCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQk8L3NlcXVlbmNlPgotCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCTwvZWxlbWVudD4KLQkJCTwvc2VxdWVuY2U+Ci0JCTwvY29tcGxleFR5cGU+Ci0JPC9lbGVtZW50PgotCTxlbGVtZW50IG5hbWU9IkFDQ09VTlRTIj4KLQkJPGFubm90YXRpb24+Ci0JCQk8ZG9jdW1lbnRhdGlvbj5BY2NvdW50cyB0byBiZSByZXBvcnRlZCBvbi48L2RvY3VtZW50YXRpb24+Ci0JCTwvYW5ub3RhdGlvbj4KLQkJPGNvbXBsZXhUeXBlPgotCQkJPHNlcXVlbmNlPgotCQkJCTxlbGVtZW50IG5hbWU9IkFDQ09VTlQiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQkJPGNvbXBsZXhUeXBlPgotCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCTxlbGVtZW50IHJlZj0icHI6SURTIi8+Ci0JCQkJCQkJPGVsZW1lbnQgbmFtZT0iQUNDT1VOVF9OQU1FIiB0eXBlPSJzdHJpbmciIG1pbk9jY3Vycz0iMCI+Ci0JCQkJCQkJCTxhbm5vdGF0aW9uPgotCQkJCQkJCQkJPGRvY3VtZW50YXRpb24+VGhlIG5hbWUgb2YgdGhlIGFjY291bnQuPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCTxlbGVtZW50IG5hbWU9Ik9XTkVSX05BTUUiIHR5cGU9InN0cmluZyIgbWluT2NjdXJzPSIwIj4KLQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5UaGUgbmFtZSBvZiB0aGUgb3duZXIgb2YgdGhlIGFjY291bnQ8L2RvY3VtZW50YXRpb24+Ci0JCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJPGVsZW1lbnQgbmFtZT0iQUJBX05VTUJFUiIgdHlwZT0ic3RyaW5nIiBtaW5PY2N1cnM9IjAiPgotCQkJCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uPlRoZSBBQkEgbnVtYmVyIGZvciB0aGUgYWNjb3VudC48L2RvY3VtZW50YXRpb24+Ci0JCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJPGVsZW1lbnQgbmFtZT0iQUNDT1VOVF9OVU1CRVIiIHR5cGU9InN0cmluZyIgbWluT2NjdXJzPSIwIj4KLQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5UaGUgYWNjb3VudCBudW1iZXIuPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCTxlbGVtZW50IG5hbWU9IlBVUlBPU0UiIG1pbk9jY3Vycz0iMCI+Ci0JCQkJCQkJCTxhbm5vdGF0aW9uPgotCQkJCQkJCQkJPGRvY3VtZW50YXRpb24+VGhlIHVzYWdlIG9mIHRoZSBhY2NvdW50LjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCQkJCQk8c2ltcGxlVHlwZT4KLQkJCQkJCQkJCTxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotCQkJCQkJCQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iUFJFTUlVTSBDT0xMRUNUSU9OIi8+Ci0JCQkJCQkJCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJDT01NSVNTSU9OIFJFQ0lFUFRTIi8+Ci0JCQkJCQkJCQk8L3Jlc3RyaWN0aW9uPgotCQkJCQkJCQk8L3NpbXBsZVR5cGU+Ci0JCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQk8L2VsZW1lbnQ+Ci0JCQk8L3NlcXVlbmNlPgotCQk8L2NvbXBsZXhUeXBlPgotCTwvZWxlbWVudD4KLQk8Y29tcGxleFR5cGUgbmFtZT0iTElOS1R5cGUiPgotCQk8c2VxdWVuY2U+Ci0JCQk8ZWxlbWVudCByZWY9InByOklEIi8+Ci0JCTwvc2VxdWVuY2U+Ci0JPC9jb21wbGV4VHlwZT4KLQk8Y29tcGxleFR5cGUgbmFtZT0iU1RFUFR5cGUiPgotCQk8c2VxdWVuY2U+Ci0JCQk8ZWxlbWVudCBuYW1lPSJSRUNFSVZJTkdfUEFSVFlfSUQiIHR5cGU9InN0cmluZyIvPgotCQkJPGVsZW1lbnQgbmFtZT0iU0VORElOR19QQVJUWV9JRCIgdHlwZT0ic3RyaW5nIi8+Ci0JCTwvc2VxdWVuY2U+Ci0JPC9jb21wbGV4VHlwZT4KLQk8Y29tcGxleFR5cGUgbmFtZT0iSURUeXBlIj4KLQkJPHNpbXBsZUNvbnRlbnQ+Ci0JCQk8ZXh0ZW5zaW9uIGJhc2U9InN0cmluZyI+Ci0JCQkJPGF0dHJpYnV0ZSBuYW1lPSJQQVJUWV9MSU5LX0lEIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJCTwvZXh0ZW5zaW9uPgotCQk8L3NpbXBsZUNvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLQk8Y29tcGxleFR5cGUgbmFtZT0iU1RBVEVTVHlwZSI+Ci0JCTxzZXF1ZW5jZT4KLQkJCTxlbGVtZW50IG5hbWU9IkVYQ0VQVElPTiIgdHlwZT0iYm9vbGVhbiIgZGVmYXVsdD0iMCIgbWluT2NjdXJzPSIwIj4KLQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJPGRvY3VtZW50YXRpb24+SWYgdGhlIGV4Y2VwdGlvbiBmbGFnIGlzIG9uLCB0aGVuIHRoZSBzdGF0ZSBsaXN0IGluY2x1ZGVzIGFsbCBzdGF0ZXMsIEVYQ0VQVCB0aGUgYXNzb2NpYXRlZCAobGlzdCkgb2Ygc3RhdGUocykgPC9kb2N1bWVudGF0aW9uPgotCQkJCTwvYW5ub3RhdGlvbj4KLQkJCTwvZWxlbWVudD4KLQkJCTxlbGVtZW50IG5hbWU9IlNUQVRFIiB0eXBlPSJwcjpTVEFURVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJCTxhbm5vdGF0aW9uPgotCQkJCQk8ZG9jdW1lbnRhdGlvbj5EZXRhaWxzIG9mIFN0YXRlIGFuZCBTdGF0ZSBhcHByb3ZhbCBmb3Igc2VsbGluZyBhIHByb2R1Y3QgaW4gYSBzcGVjaWZpYyBzdGF0ZTwvZG9jdW1lbnRhdGlvbj4KLQkJCQk8L2Fubm90YXRpb24+Ci0JCQk8L2VsZW1lbnQ+Ci0JCTwvc2VxdWVuY2U+Ci0JPC9jb21wbGV4VHlwZT4KLQk8Y29tcGxleFR5cGUgbmFtZT0iU1RBVEVUeXBlIj4KLQkJPHNlcXVlbmNlPgotCQkJPGVsZW1lbnQgbmFtZT0iQ09ERSI+Ci0JCQkJPGFubm90YXRpb24+Ci0JCQkJCTxkb2N1bWVudGF0aW9uPlR3byBkaWdpdCBzdGF0ZSBjb2RlPC9kb2N1bWVudGF0aW9uPgotCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQk8c2ltcGxlVHlwZT4KLQkJCQkJPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0JCQkJCQk8bGVuZ3RoIHZhbHVlPSIyIi8+Ci0JCQkJCTwvcmVzdHJpY3Rpb24+Ci0JCQkJPC9zaW1wbGVUeXBlPgotCQkJPC9lbGVtZW50PgotCQkJPGVsZW1lbnQgbmFtZT0iQkVHSU5fREFURSIgdHlwZT0iZGF0ZSIgbWluT2NjdXJzPSIwIj4KLQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJPGRvY3VtZW50YXRpb24+RGF0ZSBzdGF0ZSBhcHByb3ZhbCBiZWNvbWUgZWZmZWN0aXZlPC9kb2N1bWVudGF0aW9uPgotCQkJCTwvYW5ub3RhdGlvbj4KLQkJCTwvZWxlbWVudD4KLQkJCTxlbGVtZW50IG5hbWU9IkVORF9EQVRFIiB0eXBlPSJkYXRlIiBtaW5PY2N1cnM9IjAiPgotCQkJCTxhbm5vdGF0aW9uPgotCQkJCQk8ZG9jdW1lbnRhdGlvbj5EYXRlIHN0YXRlIGFwcHJvdmFsIGV4cGlyZXM8L2RvY3VtZW50YXRpb24+Ci0JCQkJPC9hbm5vdGF0aW9uPgotCQkJPC9lbGVtZW50PgotCQkJPGVsZW1lbnQgbmFtZT0iVEVSTV9EQVRFIiB0eXBlPSJkYXRlIiBtaW5PY2N1cnM9IjAiLz4KLQkJPC9zZXF1ZW5jZT4KLQk8L2NvbXBsZXhUeXBlPgotCTxjb21wbGV4VHlwZSBuYW1lPSJMSUNFTlNFU1R5cGUiPgotCQk8YW5ub3RhdGlvbj4KLQkJCTxkb2N1bWVudGF0aW9uPlZhcmlhYmxlIHNhbGVzIGNhbiBvbmx5IGJlIG1hZGUgd2hlbiB0aGUgcmVwIG9yIGZpcm0gaXMgYm90aCBGSVhFRCBhbmQgVkFSSUFCTEUgbGljZW5zZWQgaW4gdGhlIHN0YXRlLjwvZG9jdW1lbnRhdGlvbj4KLQkJPC9hbm5vdGF0aW9uPgotCQk8c2VxdWVuY2U+Ci0JCQk8ZWxlbWVudCBuYW1lPSJMSUNFTlNFIiBtYXhPY2N1cnM9IjIiPgotCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJPGVsZW1lbnQgbmFtZT0iVFlQRSI+Ci0JCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCTxkb2N1bWVudGF0aW9uPkluZGljYXRlcyB3aGV0aGVyIHRoZSBsaWNlbnNlIGlzIGZvciBmaXhlZCBvciB2YXJpYWJsZSBhbm51aXRpZXMuPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQk8c2ltcGxlVHlwZT4KLQkJCQkJCQkJPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0JCQkJCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9IkZJWEVEIi8+Ci0JCQkJCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9IlZBUklBQkxFIi8+Ci0JCQkJCQkJCTwvcmVzdHJpY3Rpb24+Ci0JCQkJCQkJPC9zaW1wbGVUeXBlPgotCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJPGVsZW1lbnQgbmFtZT0iU1RBVEVTIiB0eXBlPSJwcjpTVEFURVNUeXBlIi8+Ci0JCQkJCTwvc2VxdWVuY2U+Ci0JCQkJPC9jb21wbGV4VHlwZT4KLQkJCTwvZWxlbWVudD4KLQkJPC9zZXF1ZW5jZT4KLQk8L2NvbXBsZXhUeXBlPgotCTxjb21wbGV4VHlwZSBuYW1lPSJBUFBPSU5UTUVOVFNUeXBlIj4KLQkJPHNlcXVlbmNlPgotCQkJPGVsZW1lbnQgbmFtZT0iQVBQT0lOVE1FTlQiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCTxlbGVtZW50IG5hbWU9IlNUQVRVUyI+Ci0JCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCTxkb2N1bWVudGF0aW9uPlRoZSBzdGF0dXMgb2YgdGhpcyBhcHBvaW50bWVudC48L2RvY3VtZW50YXRpb24+Ci0JCQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCQkJCTxzaW1wbGVUeXBlPgotCQkJCQkJCQk8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLQkJCQkJCQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iUEVORElORyIvPgotCQkJCQkJCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJBUFBPSU5URUQiLz4KLQkJCQkJCQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iVEVSTUlOQVRFRCIvPgotCQkJCQkJCQk8L3Jlc3RyaWN0aW9uPgotCQkJCQkJCTwvc2ltcGxlVHlwZT4KLQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCTxlbGVtZW50IG5hbWU9Ik5FV19CVVNJTkVTUyIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCTxkb2N1bWVudGF0aW9uPkZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBhcHBvaW50bWVudCBpbmNsdWRlcyBOZXcgQnVzaW5lc3MgdHJhbnNhY3Rpb25zLjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQk8ZWxlbWVudCBuYW1lPSJDT01NSVNTSU9OUyIgdHlwZT0iYm9vbGVhbiI+Ci0JCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCTxkb2N1bWVudGF0aW9uPkZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBhcHBvaW50bWVudCBpbmNsdWRlcyBDb21taXNpb25zLjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQk8ZWxlbWVudCBuYW1lPSJXUklUSU5HX0NPTVBBTlkiPgotCQkJCQkJCTxhbm5vdGF0aW9uPgotCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5Xcml0aW5nIGNvbXBhbnkgYW5kIGxpbmVzIG9mIGJ1c2luZXNzLjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJPGNvbXBsZXhUeXBlPgotCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQk8ZWxlbWVudCByZWY9InByOklEIi8+Ci0JCQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJMSU5FU19PRl9CVVNJTkVTUyIgbWluT2NjdXJzPSIwIj4KLQkJCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCTxlbGVtZW50IG5hbWU9IkxJTkVfT0ZfQlVTSU5FU1MiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQkJCQkJCQkJCQk8c2ltcGxlVHlwZT4KLQkJCQkJCQkJCQkJCQkJPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0JCQkJCQkJCQkJCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9IklORElWSURVQUxfTElGRSIvPgotCQkJCQkJCQkJCQkJCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJWQVJJQUJMRV9BTk5VSVRJRVMiLz4KLQkJCQkJCQkJCQkJCQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iRklYRURfQU5OVUlUSUVTIi8+Ci0JCQkJCQkJCQkJCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9IkdST1VQX0xJRkUiLz4KLQkJCQkJCQkJCQkJCQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iVkFSSUFCTEVfTElGRSIvPgotCQkJCQkJCQkJCQkJCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJBTEwiLz4KLQkJCQkJCQkJCQkJCQkJPC9yZXN0cmljdGlvbj4KLQkJCQkJCQkJCQkJCQk8L3NpbXBsZVR5cGU+Ci0JCQkJCQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJCQkJCTwvc2VxdWVuY2U+Ci0JCQkJCQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJPGVsZW1lbnQgbmFtZT0iU1RBVEVTIiB0eXBlPSJwcjpTVEFURVNUeXBlIi8+Ci0JCQkJCTwvc2VxdWVuY2U+Ci0JCQkJPC9jb21wbGV4VHlwZT4KLQkJCTwvZWxlbWVudD4KLQkJPC9zZXF1ZW5jZT4KLQk8L2NvbXBsZXhUeXBlPgotCTxjb21wbGV4VHlwZSBuYW1lPSJCVVNJTkVTU19VTklUVHlwZSI+Ci0JCTxjaG9pY2U+Ci0JCQk8c2VxdWVuY2U+Ci0JCQkJPGVsZW1lbnQgcmVmPSJwcjpJRCIvPgotCQkJCTxlbGVtZW50IG5hbWU9IkFDVElWRSIgdHlwZT0iYm9vbGVhbiIgbWluT2NjdXJzPSIwIj4KLQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQk8ZG9jdW1lbnRhdGlvbj5JbmRpY2F0ZXMgd2hldGhlciB0aGUgYnVzaW5lc3MgdW5pdCBpcyBhY3RpdmUgb3Igbm90LjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCTwvZWxlbWVudD4KLQkJCTwvc2VxdWVuY2U+Ci0JCQk8c2VxdWVuY2U+Ci0JCQkJPGVsZW1lbnQgcmVmPSJwcjpJRFMiLz4KLQkJCQk8ZWxlbWVudCBuYW1lPSJBQ1RJVkUiIHR5cGU9ImJvb2xlYW4iPgotCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCTxkb2N1bWVudGF0aW9uPkluZGljYXRlcyB3aGV0aGVyIHRoZSBidXNpbmVzcyB1bml0IGlzIGFjdGl2ZSBvciBub3QuPC9kb2N1bWVudGF0aW9uPgotCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJPC9lbGVtZW50PgotCQkJCTxlbGVtZW50IG5hbWU9Ik5BTUUiIHR5cGU9InN0cmluZyI+Ci0JCQkJCTxhbm5vdGF0aW9uPgotCQkJCQkJPGRvY3VtZW50YXRpb24+VGhlIG5hbWUgb2YgdGhlIGJ1c2luZXNzIHVuaXQuPC9kb2N1bWVudGF0aW9uPgotCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJPC9lbGVtZW50PgotCQkJCTxlbGVtZW50IG5hbWU9IkNMQVNTIiB0eXBlPSJzdHJpbmciPgotCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCTxkb2N1bWVudGF0aW9uPkxldmVsIGluIHRoZSByZXBvcnRpbmcgaGllcmFyY2h5LiBDb21tb24gdmFsdWVzIGFyZSBCcmFuY2gsIFJlZ2lvbiwgRGlzdHJpYnV0b3IsIEZpZWxkIE9mZmljZSwgZXRjLjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCTwvZWxlbWVudD4KLQkJCQk8ZWxlbWVudCBuYW1lPSJUSU4iIHR5cGU9InN0cmluZyI+Ci0JCQkJCTxhbm5vdGF0aW9uPgotCQkJCQkJPGRvY3VtZW50YXRpb24+VGhlIHRheCBpZGVudGlmaWNhdGlvbiBudW1iZXI8L2RvY3VtZW50YXRpb24+Ci0JCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQk8L2VsZW1lbnQ+Ci0JCQkJPGVsZW1lbnQgbmFtZT0iQUNDT1VOVF9MSU5LUyIgbWluT2NjdXJzPSIwIj4KLQkJCQkJPGNvbXBsZXhUeXBlPgotCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCTxlbGVtZW50IG5hbWU9IkFDQ09VTlRfTElOSyIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQkJPGVsZW1lbnQgcmVmPSJwcjpJRCIvPgotCQkJCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQk8L3NlcXVlbmNlPgotCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCTwvZWxlbWVudD4KLQkJCQk8ZWxlbWVudCBuYW1lPSJDT05UQUNUX0xJTktTIiBtaW5PY2N1cnM9IjAiPgotCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCTxkb2N1bWVudGF0aW9uPkxpbmtzIHRvIHRoZSBEaXN0cmlidXRvciBjb250YWN0cyBmb3IgdGhlIEJ1c2luZXNzIFVuaXQgaW4gdGhlIGNhc2Ugb2YgcXVlc3Rpb25zIG9yIHByb2JsZW1zLjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJPGVsZW1lbnQgbmFtZT0iQ09OVEFDVF9MSU5LIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCQkJCQk8ZWxlbWVudCByZWY9InByOklEIi8+Ci0JCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iUkVTUE9OU0lCSUxJVFkiIHR5cGU9InN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCQkJCQkJCTxhbm5vdGF0aW9uPgotCQkJCQkJCQkJCQkJPGRvY3VtZW50YXRpb24+VGhlIHB1cnBvc2UgZm9yIHdoaWNoIHRoZSBjb250YWN0IHNob3VsZCBiZSB1c2VkLjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCQkJCTwvc2VxdWVuY2U+Ci0JCQkJCQkJCTwvY29tcGxleFR5cGU+Ci0JCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQk8L2VsZW1lbnQ+Ci0JCQk8L3NlcXVlbmNlPgotCQk8L2Nob2ljZT4KLQk8L2NvbXBsZXhUeXBlPgotCTxjb21wbGV4VHlwZSBuYW1lPSJPUEVSQVRJTkdfUFJPRklMRVR5cGUiPgotCQk8c2VxdWVuY2U+Ci0JCQk8ZWxlbWVudCByZWY9InByOklEUyIvPgotCQkJPGVsZW1lbnQgbmFtZT0iTkVUVElOR19PUFRJT04iIHR5cGU9ImJvb2xlYW4iIG1pbk9jY3Vycz0iMCI+Ci0JCQkJPGFubm90YXRpb24+Ci0JCQkJCTxkb2N1bWVudGF0aW9uPlRoZSBuZXR0aW5nIG9wdGlvbiB0byBiZSB1c2VkLjwvZG9jdW1lbnRhdGlvbj4KLQkJCQk8L2Fubm90YXRpb24+Ci0JCQk8L2VsZW1lbnQ+Ci0JCQk8ZWxlbWVudCBuYW1lPSJDT01NSVNTSU9OX09QVElPTl9MSU5LUyIgbWluT2NjdXJzPSIwIj4KLQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJPGRvY3VtZW50YXRpb24+TGlua3MgYXZhaWxhYmxlIGNvbW1pc3Npb24gb3B0aW9ucyB0byB0aGUgcHJvZmlsZS4gPC9kb2N1bWVudGF0aW9uPgotCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCTxlbGVtZW50IG5hbWU9IkNPTU1JU1NJT05fT1BUSU9OX0xJTksiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCQkJPGRvY3VtZW50YXRpb24+Q29tbWlzc2lvbiBvcHRpb25zIGF2YWlsYWJsZTwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJPGNvbXBsZXhUeXBlPgotCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQk8ZWxlbWVudCByZWY9InByOklEIi8+Ci0JCQkJCQkJCTwvc2VxdWVuY2U+Ci0JCQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJPC9lbGVtZW50PgotCQkJPGVsZW1lbnQgbmFtZT0iVFJBTlNBQ1RJT05fVFlQRVMiIG1pbk9jY3Vycz0iMCI+Ci0JCQkJPGFubm90YXRpb24+Ci0JCQkJCTxkb2N1bWVudGF0aW9uPkRlc2NyaWJlcyB0aGUgdHJhbnNhY3Rpb24gdHlwZXMgYW5kIG1vbmV5IGZvcm1zIGFsbG93ZWQgaW4gdGhpcyBwcm9maWxlLjwvZG9jdW1lbnRhdGlvbj4KLQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJPGNvbXBsZXhUeXBlPgotCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQk8ZWxlbWVudCBuYW1lPSJUUkFOU0FDVElPTl9UWVBFIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCQkJPGNvbXBsZXhUeXBlPgotCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJUWVBFIj4KLQkJCQkJCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJPGRvY3VtZW50YXRpb24+VGhlIHR5cGVzIG9mIHRyYW5zYWN0aW9uIGJlaW5nIGFsbG93ZWQuPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQkJCQk8c2ltcGxlVHlwZT4KLQkJCQkJCQkJCQkJPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0JCQkJCQkJCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9IkFQUExJQ0FUSU9OIi8+Ci0JCQkJCQkJCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9IklOSVRJQUxfUFJFTUlVTSIvPgotCQkJCQkJCQkJCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJTVUJTRVFVRU5UX1BSRU1JVU0iLz4KLQkJCQkJCQkJCQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iU0NIRURVTEVEX0FDSF9QUk9HUkFNIi8+Ci0JCQkJCQkJCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9IldJVEhEUkFXQUwiLz4KLQkJCQkJCQkJCQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iU1VSUkVOREVSIi8+Ci0JCQkJCQkJCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9IlRSQU5TRkVSIi8+Ci0JCQkJCQkJCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9IlJFQkFMQU5DRSIvPgotCQkJCQkJCQkJCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJTWVNURU1BVElDX1dJVEhEUkFXQUxfUFJPR1JBTSIvPgotCQkJCQkJCQkJCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJNUkRfUFJPR1JBTSIvPgotCQkJCQkJCQkJCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJNUkQiLz4KLQkJCQkJCQkJCQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iU0NIRURVTEVEX1JFQkFMQU5DRV9QUk9HUkFNIi8+Ci0JCQkJCQkJCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9IkRDQSIvPgotCQkJCQkJCQkJCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJEQ0FfUFJPR1JBTSIvPgotCQkJCQkJCQkJCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJTWVNURU1BVElDX1dJVEhEUkFXQUxfUFJPR1JBTSIvPgotCQkJCQkJCQkJCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJSRU5FV0FMIi8+Ci0JCQkJCQkJCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9IkFOTlVJVElaQVRJT04iLz4KLQkJCQkJCQkJCQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iUEFZT1VUIi8+Ci0JCQkJCQkJCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9IkRFQVRIX0NMQUlNX1BFTkRJTkciLz4KLQkJCQkJCQkJCQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iREVBVEhfQ0xBSU0iLz4KLQkJCQkJCQkJCQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iU1lTVEVNQVRJQ19XSVRIRFJBV0FMIi8+Ci0JCQkJCQkJCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9IlNDSEVEVUxFRF9BQ0giLz4KLQkJCQkJCQkJCQkJPC9yZXN0cmljdGlvbj4KLQkJCQkJCQkJCQk8L3NpbXBsZVR5cGU+Ci0JCQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJNT05FWV9GT1JNUyIgdHlwZT0icHI6TU9ORVlfRk9STVNUeXBlIiBtaW5PY2N1cnM9IjAiPgotCQkJCQkJCQkJCTxhbm5vdGF0aW9uPgotCQkJCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5UaGUgcG9zc2libGUgbW9uZXkgc291cmNlcyAoZm9ybXMpIGFwcHJvdmVkIGZvciB0cmFuc2ZlcnMgb3IgdHJhbnNhY3Rpb25zIGludG8gdGhpcyBwcm9kdWN0LjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJCTwvc2VxdWVuY2U+Ci0JCQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJPC9lbGVtZW50PgotCQkJPGVsZW1lbnQgbmFtZT0iVFJBTlNBQ1RJT05fUk9VVElOR19MSU5LIiBtaW5PY2N1cnM9IjAiPgotCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJPGVsZW1lbnQgcmVmPSJwcjpJRCIvPgotCQkJCQkJPGVsZW1lbnQgbmFtZT0iUEFSQU1FVEVSUyIgbWluT2NjdXJzPSIwIj4KLQkJCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCQkJPGRvY3VtZW50YXRpb24+VGhlIGNvbGxlY3Rpb24gb2YgZmlsbGVkIGluIHBhcmFtZXRlcnMgZm9yIHRoaXMgdHJhbnNhY3Rpb24gcm91dGluZy4gIEZvciBleGFtcGxlLCB0aGlzIHdvdWxkIHNwZWNpZnkgdGhlIE5TQ0MgbnVtYmVyLCBmb3IgYSBOU0NDIHRyYW5zYWN0aW9uIHJvdXRpbmcuPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCQkJCTxlbGVtZW50IG5hbWU9IlBBUkFNRVRFUiIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJCQkJCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iTkFNRSIgdHlwZT0ic3RyaW5nIj4KLQkJCQkJCQkJCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJCQkJPGRvY3VtZW50YXRpb24+VGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci4gIFNob3VsZCBtYXRjaCB0aGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyIGFzIGRlZmluZWQgaW4gdGhlIFRSQU5TQUNUSU9OX1JPVVRJTkcgc3RydWN0dXJlLjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJWQUxVRSIgdHlwZT0iYW55U2ltcGxlVHlwZSI+Ci0JCQkJCQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uPlRoZSB2YWx1ZSBvZiB0aGlzIHBhcmFtZXRlciBmb3IgdGhlIHByb2ZpbGUuPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCQk8L3NlcXVlbmNlPgotCQkJCQkJCTwvY29tcGxleFR5cGU+Ci0JCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCTwvc2VxdWVuY2U+Ci0JCQkJPC9jb21wbGV4VHlwZT4KLQkJCTwvZWxlbWVudD4KLQkJPC9zZXF1ZW5jZT4KLQk8L2NvbXBsZXhUeXBlPgotCTxjb21wbGV4VHlwZSBuYW1lPSJNT05FWV9GT1JNU1R5cGUiPgotCQk8c2VxdWVuY2U+Ci0JCQk8ZWxlbWVudCBuYW1lPSJNT05FWV9GT1JNIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJPGNvbXBsZXhUeXBlPgotCQkJCQk8c2ltcGxlQ29udGVudD4KLQkJCQkJCTxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotCQkJCQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iRElSRUNUIi8+Ci0JCQkJCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJFWENIQU5HRSIvPgotCQkJCQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iRElSRUNUX1JPTExPVkVSIi8+Ci0JCQkJCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJST0xMT1ZFUiIvPgotCQkJCQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iVFJBTlNGRVIiLz4KLQkJCQkJCQk8ZW51bWVyYXRpb24gdmFsdWU9IlJPVEhfQ09OVkVSU0lPTiIvPgotCQkJCQkJCTxlbnVtZXJhdGlvbiB2YWx1ZT0iVEFYX1lFQVIiLz4KLQkJCQkJCTwvcmVzdHJpY3Rpb24+Ci0JCQkJCTwvc2ltcGxlQ29udGVudD4KLQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJPC9lbGVtZW50PgotCQk8L3NlcXVlbmNlPgotCTwvY29tcGxleFR5cGU+Ci0JPGNvbXBsZXhUeXBlIG5hbWU9IkFWQUlMQUJJTElUWVR5cGUiPgotCQk8c2VxdWVuY2U+Ci0JCQk8ZWxlbWVudCBuYW1lPSJQUk9EVUNUUyIgbWluT2NjdXJzPSIwIj4KLQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJPGRvY3VtZW50YXRpb24+UHJvZHVjdCBhdmFpbGFiaWxpdHkgYnkgc3RhdGUuPC9kb2N1bWVudGF0aW9uPgotCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCTxlbGVtZW50IG5hbWU9IlBST0RVQ1RfTElOS1MiPgotCQkJCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iUFJPRFVDVF9MSU5LIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uPlRoaXMgcmVmZXJlbmNlcyBhIFJFUVVFU1QvUFJPRFVDVFMvUFJPRFVDVCBlbGVtZW50LjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJCQkJPGNvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQk8ZWxlbWVudCByZWY9InByOklEIi8+Ci0JCQkJCQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJTVEFURVMiIHR5cGU9InByOlNUQVRFU1R5cGUiIG1pbk9jY3Vycz0iMCI+Ci0JCQkJCQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uPlN0YXRlcyBpbiB3aGljaCB0aGlzIHByb2R1Y3QgaXMgYXZhaWxhYmxlIGZvciBzYWxlPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCQk8L3NlcXVlbmNlPgotCQkJCQkJCTwvY29tcGxleFR5cGU+Ci0JCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCTwvc2VxdWVuY2U+Ci0JCQkJPC9jb21wbGV4VHlwZT4KLQkJCTwvZWxlbWVudD4KLQkJCTxlbGVtZW50IG5hbWU9IlBST0RVQ1RTX1BMQU5TIiBtaW5PY2N1cnM9IjAiPgotCQkJCTxhbm5vdGF0aW9uPgotCQkJCQk8ZG9jdW1lbnRhdGlvbj5QbGFuIGF2YWlsYWJpbGl0eSBmb3IgcHJvZHVjdHMgYnkgc3RhdGUuPC9kb2N1bWVudGF0aW9uPgotCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCTxlbGVtZW50IG5hbWU9IlBST0RVQ1RfTElOS1MiPgotCQkJCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iUFJPRFVDVF9MSU5LIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uPlRoaXMgcmVmZXJlbmNlcyBhIFJFUVVFU1QvUFJPRFVDVFMvUFJPRFVDVCBlbGVtZW50LjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJCQkJPGNvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQk8ZWxlbWVudCByZWY9InByOklEIi8+Ci0JCQkJCQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJQTEFOX0xJTktTIiBtaW5PY2N1cnM9IjAiPgotCQkJCQkJCQkJCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iUExBTl9MSU5LIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCQkJCQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uPlRoaXMgcmVmZXJlbmNlcyBhIFJFUVVFU1QvUExBTlMvUExBTi48L2RvY3VtZW50YXRpb24+Ci0JCQkJCQkJCQkJCQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCQkJCQkJCQkJCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQkJCQkJPGVsZW1lbnQgcmVmPSJwcjpJRCIvPgotCQkJCQkJCQkJCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iU1RBVEVTIiB0eXBlPSJwcjpTVEFURVNUeXBlIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJCQkJCQkJCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCQkJCQkJCQk8L3NlcXVlbmNlPgotCQkJCQkJCQkJCQkJCTwvY29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJCQkJCTwvc2VxdWVuY2U+Ci0JCQkJCQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCQkJPC9lbGVtZW50PgotCQkJCQk8L3NlcXVlbmNlPgotCQkJCTwvY29tcGxleFR5cGU+Ci0JCQk8L2VsZW1lbnQ+Ci0JCQk8Y2hvaWNlIG1pbk9jY3Vycz0iMCI+Ci0JCQkJPGVsZW1lbnQgbmFtZT0iUFJPRFVDVFNfUklERVJTIj4KLQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQk8ZG9jdW1lbnRhdGlvbj5BIGNhcnJpZXIgbWF5IHVzZSBlaXRoZXIgdGhlIFBST0RVQ1RTX1JJREVSUyBvciB0aGUgUFJPRFVDVFNfUExBTlNfUklERVJTIGVsZW1lbnRzLCBidXQgbm90IGJvdGguPC9kb2N1bWVudGF0aW9uPgotCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJQUk9EVUNUX0xJTktTIj4KLQkJCQkJCQkJPGNvbXBsZXhUeXBlPgotCQkJCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCQkJCTxlbGVtZW50IG5hbWU9IlBST0RVQ1RfTElOSyIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJCQkJCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uPlRoaXMgcmVmZXJlbmNlcyBhIFJFUVVFU1QvUFJPRFVDVFMvUFJPRFVDVCBlbGVtZW50LjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJPGVsZW1lbnQgcmVmPSJwcjpJRCIvPgotCQkJCQkJCQkJCQkJCTxlbGVtZW50IG5hbWU9IlJJREVSX0xJTktTIiBtaW5PY2N1cnM9IjAiPgotCQkJCQkJCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iUklERVJfTElOSyIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJCQkJCQkJCQkJCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uPlRoaXMgcmVmZXJlbmNlcyBhIFJFUVVFU1QvUklERVJTL1JJREVSLjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJCQkJCQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCQkJCQkJCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJPGVsZW1lbnQgcmVmPSJwcjpJRCIvPgotCQkJCQkJCQkJCQkJCQkJCQkJCTxlbGVtZW50IG5hbWU9IkNPTkZJR1VSQVRJT05fTElOS1MiIG1pbk9jY3Vycz0iMCI+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJDT05GSUdVUkFUSU9OX0xJTksiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5UaGlzIHJlZmVyZW5jZXMgYSBSSURFUlMvUklERVIvQ09ORklHVVJBVElPTlMvQ09ORklHVVJBVElPTiBlbGVtZW50LjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGVsZW1lbnQgcmVmPSJwcjpJRCIvPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTxlbGVtZW50IG5hbWU9IlNUQVRFUyIgdHlwZT0icHI6U1RBVEVTVHlwZSIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3NlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvc2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCTwvY29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCQkJCQkJCQkJCQkJCTxlbGVtZW50IHJlZj0icHI6T1BUSU9OQUxJVFkiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQkJCQkJCQkJCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJCQkJCQkJCQk8L3NlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCQkJCQkJCTwvc2VxdWVuY2U+Ci0JCQkJCQkJCQkJCTwvY29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQk8L3NlcXVlbmNlPgotCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCTwvZWxlbWVudD4KLQkJCQk8ZWxlbWVudCBuYW1lPSJQUk9EVUNUU19QTEFOU19SSURFUlMiPgotCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCTxkb2N1bWVudGF0aW9uPkEgY2FycmllciBtYXkgdXNlIGVpdGhlciB0aGUgUFJPRFVDVFNfUklERVJTIG9yIHRoZSBQUk9EVUNUU19QTEFOU19SSURFUlMgZWxlbWVudHMsIGJ1dCBub3QgYm90aC48L2RvY3VtZW50YXRpb24+Ci0JCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJPGNvbXBsZXhUeXBlPgotCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCTxlbGVtZW50IG5hbWU9IlBST0RVQ1RfTElOS1MiPgotCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iUFJPRFVDVF9MSU5LIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCQkJCQkJCTxhbm5vdGF0aW9uPgotCQkJCQkJCQkJCQkJPGRvY3VtZW50YXRpb24+VGhpcyByZWZlcmVuY2VzIGEgUkVRVUVTVC9QUk9EVUNUUy9QUk9EVUNUIGVsZW1lbnQuPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQk8ZWxlbWVudCByZWY9InByOklEIi8+Ci0JCQkJCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iUExBTl9MSU5LUyIgbWluT2NjdXJzPSIwIj4KLQkJCQkJCQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5QbGFucyBmb3Igd2hpY2ggKGxpc3QpIG9mIHJpZGVyKHMpIGlzIGF2YWlsYWJsZTwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJCQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCQkJCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iUExBTl9MSU5LIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCQkJCQkJCQkJCQkJCTxhbm5vdGF0aW9uPgotCQkJCQkJCQkJCQkJCQkJCQkJPGRvY3VtZW50YXRpb24+VGhpcyByZWZlcmVuY2VzIGEgUkVRVUVTVC9QTEFOUy9QTEFOLjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJCQkJCQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCQkJCQkJCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJPGVsZW1lbnQgcmVmPSJwcjpJRCIvPgotCQkJCQkJCQkJCQkJCQkJCQkJCTxlbGVtZW50IG5hbWU9IlJJREVSX0xJTktTIiBtaW5PY2N1cnM9IjAiPgotCQkJCQkJCQkJCQkJCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iUklERVJfTElOSyIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uPlRoaXMgcmVmZXJlbmNlcyBhIFJFUVVFU1QvUklERVJTL1JJREVSLjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGVsZW1lbnQgcmVmPSJwcjpJRCIvPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTxlbGVtZW50IG5hbWU9IkNPTkZJR1VSQVRJT05fTElOS1MiIG1pbk9jY3Vycz0iMCI+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJDT05GSUdVUkFUSU9OX0xJTksiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5UaGlzIHJlZmVyZW5jZXMgYSBSSURFUlMvUklERVIvQ09ORklHVVJBVElPTlMvQ09ORklHVVJBVElPTiBlbGVtZW50LjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGVsZW1lbnQgcmVmPSJwcjpJRCIvPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTxlbGVtZW50IG5hbWU9IlNUQVRFUyIgdHlwZT0icHI6U1RBVEVTVHlwZSIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3NlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvc2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvY29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTxlbGVtZW50IHJlZj0icHI6T1BUSU9OQUxJVFkiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3NlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQkJCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCQkJCQkJCQkJCQkJCTwvc2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJCTwvY29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCQkJCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJCQkJCQk8L3NlcXVlbmNlPgotCQkJCQkJCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCQkJCTwvc2VxdWVuY2U+Ci0JCQkJCQkJCTwvY29tcGxleFR5cGU+Ci0JCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQk8L2VsZW1lbnQ+Ci0JCQk8L2Nob2ljZT4KLQkJCTxjaG9pY2UgbWluT2NjdXJzPSIwIj4KLQkJCQk8ZWxlbWVudCBuYW1lPSJQUk9EVUNUU19TRVJWSUNFX1BST0dSQU1TIj4KLQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQk8ZG9jdW1lbnRhdGlvbj5BIGNhcnJpZXIgbWF5IHVzZSBlaXRoZXIgdGhlIFBST0RVQ1RTX1NFUlZJQ0VfUFJPR1JBTVMgb3IgdGhlIFBST0RVQ1RTX1BMQU5TX1NFUlZJQ0VfUFJPR1JBTVMgZWxlbWVudHMsIGJ1dCBub3QgYm90aC48L2RvY3VtZW50YXRpb24+Ci0JCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJPGNvbXBsZXhUeXBlPgotCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCTxlbGVtZW50IG5hbWU9IlBST0RVQ1RfTElOS1MiPgotCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iUFJPRFVDVF9MSU5LIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCQkJCQkJCTxhbm5vdGF0aW9uPgotCQkJCQkJCQkJCQkJPGRvY3VtZW50YXRpb24+VGhpcyByZWZlcmVuY2VzIGEgUkVRVUVTVC9QUk9EVUNUUy9QUk9EVUNUIGVsZW1lbnQuPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQk8ZWxlbWVudCByZWY9InByOklEIi8+Ci0JCQkJCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iU0VSVklDRV9QUk9HUkFNX0xJTktTIiBtaW5PY2N1cnM9IjAiPgotCQkJCQkJCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iU0VSVklDRV9QUk9HUkFNX0xJTksiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQkJCQkJCQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQkJCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5UaGlzIHJlZmVyZW5jZXMgYSBSRVFVRVNUL1NFUlZJQ0VfUFJPR1JBTVMvU0VSVklDRV9QUk9HUkFNIGVsZW1lbnQuPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQkJCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJCQkJCQkJCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCQkJCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQkJCQkJCQk8ZWxlbWVudCByZWY9InByOklEIi8+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iT1BUSU9OX0xJTktTIiBtaW5PY2N1cnM9IjAiPgotCQkJCQkJCQkJCQkJCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iT1BUSU9OX0xJTksiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8ZG9jdW1lbnRhdGlvbj5UaGlzIHJlZmVyZW5jZXMgYSBTRVJWSUNFX1BST0dSQU1TL1NFUlZJQ0VfUFJPR1JBTS9PUFRJT05TL09QVElPTiBlbGVtZW50LjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGVsZW1lbnQgcmVmPSJwcjpJRCIvPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3NlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQkJCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCQkJCQkJCQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJDT05GSUdVUkFUSU9OX0xJTktTIiBtaW5PY2N1cnM9IjAiPgotCQkJCQkJCQkJCQkJCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iQ09ORklHVVJBVElPTl9MSU5LIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTxhbm5vdGF0aW9uPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGRvY3VtZW50YXRpb24+VGhpcyByZWZlcmVuY2VzIGEgU0VSVklDRV9QUk9HUkFNUy9TRVJWSUNFX1BST0dSQU0vQ09ORklHVVJBVElPTlMvQ09ORklHVVJBVElPTiBlbGVtZW50LjwvZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC9hbm5vdGF0aW9uPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGVsZW1lbnQgcmVmPSJwcjpJRCIvPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTxlbGVtZW50IG5hbWU9IlNUQVRFUyIgdHlwZT0icHI6U1RBVEVTVHlwZSIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3NlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvc2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCTwvY29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCQkJCQkJCQkJCQkJCTxlbGVtZW50IHJlZj0icHI6T1BUSU9OQUxJVFkiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQkJCQkJCQkJCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJCQkJCQkJCQk8L3NlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCQkJCQkJCTwvc2VxdWVuY2U+Ci0JCQkJCQkJCQkJCTwvY29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQk8L3NlcXVlbmNlPgotCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCTwvZWxlbWVudD4KLQkJCQk8ZWxlbWVudCBuYW1lPSJQUk9EVUNUU19QTEFOU19TRVJWSUNFX1BST0dSQU1TIj4KLQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQk8ZG9jdW1lbnRhdGlvbj5BIGNhcnJpZXIgbWF5IHVzZSBlaXRoZXIgdGhlIFBST0RVQ1RTX1NFUlZJQ0VfUFJPR1JBTVMgb3IgdGhlIFBST0RVQ1RTX1BMQU5TX1NFUlZJQ0VfUFJPR1JBTVMgZWxlbWVudHMsIGJ1dCBub3QgYm90aC48L2RvY3VtZW50YXRpb24+Ci0JCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJPGNvbXBsZXhUeXBlPgotCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCTxlbGVtZW50IG5hbWU9IlBST0RVQ1RfTElOS1MiPgotCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iUFJPRFVDVF9MSU5LIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCQkJCQkJCTxhbm5vdGF0aW9uPgotCQkJCQkJCQkJCQkJPGRvY3VtZW50YXRpb24+VGhpcyByZWZlcmVuY2VzIGEgUkVRVUVTVC9QUk9EVUNUUy9QUk9EVUNUIGVsZW1lbnQuPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQkJCQk8L2Fubm90YXRpb24+Ci0JCQkJCQkJCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQk8ZWxlbWVudCByZWY9InByOklEIi8+Ci0JCQkJCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iUExBTl9MSU5LUyIgbWluT2NjdXJzPSIwIj4KLQkJCQkJCQkJCQkJCQkJPGNvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQkJCTxlbGVtZW50IG5hbWU9IlBMQU5fTElOSyIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJCQkJCQkJCQkJCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uPlRoaXMgcmVmZXJlbmNlcyBhIFJFUVVFU1QvUExBTlMvUExBTi48L2RvY3VtZW50YXRpb24+Ci0JCQkJCQkJCQkJCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJCQkJCQkJPGNvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQkJCQkJCTxlbGVtZW50IHJlZj0icHI6SUQiLz4KLQkJCQkJCQkJCQkJCQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJTRVJWSUNFX1BST0dSQU1fTElOS1MiIG1pbk9jY3Vycz0iMCI+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJTRVJWSUNFX1BST0dSQU1fTElOSyIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uPlRoaXMgcmVmZXJlbmNlcyBhIFJFUVVFU1QvU0VSVklDRV9QUk9HUkFNUy9TRVJWSUNFX1BST0dSQU0gZWxlbWVudC48L2RvY3VtZW50YXRpb24+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGNvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTxlbGVtZW50IHJlZj0icHI6SUQiLz4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJPUFRJT05fX0xJTktTIiBtaW5PY2N1cnM9IjAiPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iT1BUSU9OX19MSU5LIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTxhbm5vdGF0aW9uPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGRvY3VtZW50YXRpb24+VGhpcyByZWZlcmVuY2VzIGEgU0VSVklDRV9QUk9HUkFNUy9TRVJWSUNFX1BST0dSQU0vT1BUSU9OUy9PUFRJT04gZWxlbWVudC48L2RvY3VtZW50YXRpb24+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGNvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTxlbGVtZW50IHJlZj0icHI6SUQiLz4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvc2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvY29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGVsZW1lbnQgbmFtZT0iQ09ORklHVVJBVElPTl9MSU5LUyIgbWluT2NjdXJzPSIwIj4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGNvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTxlbGVtZW50IG5hbWU9IkNPTkZJR1VSQVRJT05fTElOSyIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uPlRoaXMgcmVmZXJlbmNlcyBhIFNFUlZJQ0VfUFJPR1JBTVMvU0VSVklDRV9QUk9HUkFNL0NPTkZJR1VSQVRJT05TL0NPTkZJR1VSQVRJT04gZWxlbWVudC48L2RvY3VtZW50YXRpb24+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPGNvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTxlbGVtZW50IHJlZj0icHI6SUQiLz4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJTVEFURVMiIHR5cGU9InByOlNUQVRFU1R5cGUiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3NlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8ZWxlbWVudCByZWY9InByOk9QVElPTkFMSVRZIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvc2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwvY29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJCQkJCQkJCQkJCQk8L3NlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCQkJCQkJCQkJCTwvc2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCTwvY29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJCQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJCQk8L3NlcXVlbmNlPgotCQkJCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCTwvc2VxdWVuY2U+Ci0JCQkJCTwvY29tcGxleFR5cGU+Ci0JCQkJPC9lbGVtZW50PgotCQkJPC9jaG9pY2U+Ci0JCQk8ZWxlbWVudCBuYW1lPSJQUk9EVUNUU19JTlZFU1RNRU5UX09QVElPTlMiIG1pbk9jY3Vycz0iMCI+Ci0JCQkJPGFubm90YXRpb24+Ci0JCQkJCTxkb2N1bWVudGF0aW9uPkludmVzdG1lbnQgT3B0aW9uIGF2YWlsYWJpbGl0eSBmb3IgcHJvZHVjdHMgYnkgc3RhdGU8L2RvY3VtZW50YXRpb24+Ci0JCQkJPC9hbm5vdGF0aW9uPgotCQkJCTxjb21wbGV4VHlwZT4KLQkJCQkJPHNlcXVlbmNlPgotCQkJCQkJPGVsZW1lbnQgbmFtZT0iUFJPRFVDVF9MSU5LUyI+Ci0JCQkJCQkJPGNvbXBsZXhUeXBlPgotCQkJCQkJCQk8c2VxdWVuY2U+Ci0JCQkJCQkJCQk8ZWxlbWVudCBuYW1lPSJQUk9EVUNUX0xJTksiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQkJCQkJCQk8YW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJPGRvY3VtZW50YXRpb24+VGhpcyByZWZlcmVuY2VzIGEgUkVRVUVTVC9QUk9EVUNUUy9QUk9EVUNUIGVsZW1lbnQuPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCTxlbGVtZW50IHJlZj0icHI6SUQiLz4KLQkJCQkJCQkJCQkJCTxlbGVtZW50IG5hbWU9IklOVkVTVE1FTlRfT1BUSU9OU19MSU5LUyIgbWluT2NjdXJzPSIwIj4KLQkJCQkJCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQkJCTxlbGVtZW50IG5hbWU9IklOVkVTVE1FTlRfT1BUSU9OU19MSU5LIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCQkJCQkJCQkJCQkJPGFubm90YXRpb24+Ci0JCQkJCQkJCQkJCQkJCQkJCTxkb2N1bWVudGF0aW9uPlRoaXMgcmVmZXJlbmNlcyBhIGFuIElOVkVTVE1FTlRfT1BUSU9OIGVsZW1lbnQuPC9kb2N1bWVudGF0aW9uPgotCQkJCQkJCQkJCQkJCQkJCTwvYW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJCQkJCQk8Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJCQkJCTxzZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQkJCQkJCTxlbGVtZW50IHJlZj0icHI6SUQiLz4KLQkJCQkJCQkJCQkJCQkJCQkJCTxlbGVtZW50IG5hbWU9IlNUQVRFUyIgdHlwZT0icHI6U1RBVEVTVHlwZSIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCQkJCQkJCQkJCQkJCTwvc2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJCQkJCQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJPC9lbGVtZW50PgotCQkJCQkJCQkJCQk8L3NlcXVlbmNlPgotCQkJCQkJCQkJCTwvY29tcGxleFR5cGU+Ci0JCQkJCQkJCQk8L2VsZW1lbnQ+Ci0JCQkJCQkJCTwvc2VxdWVuY2U+Ci0JCQkJCQkJPC9jb21wbGV4VHlwZT4KLQkJCQkJCTwvZWxlbWVudD4KLQkJCQkJPC9zZXF1ZW5jZT4KLQkJCQk8L2NvbXBsZXhUeXBlPgotCQkJPC9lbGVtZW50PgotCQk8L3NlcXVlbmNlPgotCTwvY29tcGxleFR5cGU+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2FubnVpdHkvYW5udWl0eW5ldC54c2Rjb25maWcgYi92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9hbm51aXR5L2FubnVpdHluZXQueHNkY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjU2YTVmLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2FubnVpdHkvYW5udWl0eW5ldC54c2Rjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxNTAgKzAsMCBAQAotPHhiOmNvbmZpZyB4bWxuczp4Yj0iaHR0cDovL3d3dy5iZWEuY29tLzIwMDIvMDkveGJlYW4vY29uZmlnIgotICAgICAgICAgICB4bWxuczphbj0iaHR0cDovL3d3dy5hbm51aXR5bmV0LmNvbS9uYW1lc3BhY2UvcHJvZmlsZXMiPgotCi0gIDx4YjpuYW1lc3BhY2UgdXJpPSJodHRwOi8vd3d3LmFubnVpdHluZXQuY29tL25hbWVzcGFjZS9wcm9maWxlcyI+Ci0gICAgPHhiOnBhY2thZ2U+Y29tLmFubnVpdHluZXQ8L3hiOnBhY2thZ2U+Ci0gIDwveGI6bmFtZXNwYWNlPgotCi0gIDx4YjpxbmFtZSBuYW1lPSJhbjpBQkFfTlVNQkVSIiBqYXZhbmFtZT0iQWJhTnVtYmVyIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpBQ0NPVU5UIiBqYXZhbmFtZT0iQWNjb3VudCIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46QUNDT1VOVFMiIGphdmFuYW1lPSJBY2NvdW50cyIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46QUNDT1VOVF9MSU5LIiBqYXZhbmFtZT0iQWNjb3VudEwiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOkFDQ09VTlRfTElOS1MiIGphdmFuYW1lPSJBY2NvdW50THMiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOkFDQ09VTlRfTkFNRSIgamF2YW5hbWU9IkFjY291bnROYW1lIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpBQ0NPVU5UX05VTUJFUiIgamF2YW5hbWU9IkFjY291bnROdW1iZXIiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOkFDVElWRSIgamF2YW5hbWU9IkFjdGl2ZSIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46QUNUSVZJVFkiIGphdmFuYW1lPSJBY3Rpdml0eSIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46QVBQT0lOVE1FTlQiIGphdmFuYW1lPSJBcHB0Ii8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpBUFBPSU5UTUVOVFMiIGphdmFuYW1lPSJBcHB0cyIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46QVBQT0lOVE1FTlRTVHlwZSIgamF2YW5hbWU9IkFwcHRzVCIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46QVNfT0ZfREFURVRJTUUiIGphdmFuYW1lPSJBc09mRGF0ZXRpbWUiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOkFWQUlMQUJJTElUWSIgamF2YW5hbWU9IkF2YWlsIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpBVkFJTEFCSUxJVFlUeXBlIiBqYXZhbmFtZT0iQXZhaWxUIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpCRUdJTl9EQVRFIiBqYXZhbmFtZT0iQmVnaW5EYXRlIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpCVVNJTkVTU19VTklUIiBqYXZhbmFtZT0iQlUiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOkJVU0lORVNTX1VOSVRTIiBqYXZhbmFtZT0iQlVzIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpCVVNJTkVTU19VTklUVHlwZSIgamF2YW5hbWU9IkJVVCIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46QlVTSU5FU1NfVU5JVF9BVkFJTEFCSUxJVFkiIGphdmFuYW1lPSJCVUF2YWlsIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpCVVNJTkVTU19VTklUX0xJTksiIGphdmFuYW1lPSJCVUwiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOkJVU0lORVNTX1VOSVRfTElOS1MiIGphdmFuYW1lPSJCVUxzIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpCVVNJTkVTU19VTklUX09QRVJBVElOR19QUk9GSUxFX0xJTktTIiBqYXZhbmFtZT0iQlVPcGVyYXRpbmdQcm9maWxlTHMiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOkJVU0lORVNTX1VOSVRfUkVMQVRJT05TSElQIiBqYXZhbmFtZT0iQlVSZWxhdGlvbnNoaXAiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOkJVU0lORVNTX1VOSVRfUkVMQVRJT05TSElQUyIgamF2YW5hbWU9IkJVUmVsYXRpb25zaGlwcyIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46Q0hJTERfQlVTSU5FU1NfVU5JVF9MSU5LIiBqYXZhbmFtZT0iQ2hpbGRCVUwiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOkNMQVNTIiBqYXZhbmFtZT0iQ2xhc3MiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOkNPREUiIGphdmFuYW1lPSJDb2RlIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpDT01NSVNTSU9OUyIgamF2YW5hbWU9IkNvbW1pc2lvbnMiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOkNPTU1JU1NJT05fT1BUSU9OX0xJTksiIGphdmFuYW1lPSJDb21taXNpb25PcHRMIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpDT01NSVNTSU9OX09QVElPTl9MSU5LUyIgamF2YW5hbWU9IkNvbW1pc2lvbk9wdExzIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpDT05GSUdVUkFUSU9OX0xJTksiIGphdmFuYW1lPSJDZmdMIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpDT05GSUdVUkFUSU9OX0xJTktTIiBqYXZhbmFtZT0iQ2ZnTHMiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOkNPTlRBQ1QiIGphdmFuYW1lPSJDb250YWN0Ii8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpDT05UQUNUUyIgamF2YW5hbWU9IkNvbnRhY3RzIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpDT05UQUNUX0xJTksiIGphdmFuYW1lPSJDb250YWN0TCIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46Q09OVEFDVF9MSU5LUyIgamF2YW5hbWU9IkNvbnRhY3RMcyIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46REVTQ1JJUFRJT04iIGphdmFuYW1lPSJEZXNjcmlwdGlvbiIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46RUZGRUNUSVZFX0RBVEUiIGphdmFuYW1lPSJFZmZlY3RpdmVEYXRlIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpFTUFJTCIgamF2YW5hbWU9IkVtYWlsIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpFTkRfREFURSIgamF2YW5hbWU9IkVuZERhdGUiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOkVOVkVMT1BFIiBqYXZhbmFtZT0iRW52ZWxvcGUiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOkVYQ0VQVElPTiIgamF2YW5hbWU9IkV4Y2VwdGlvbiIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46RklSU1RfTkFNRSIgamF2YW5hbWU9IkZpcnN0TmFtZSIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46Rk9STUFUIiBqYXZhbmFtZT0iRm9ybWF0Ii8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpIRUFERVIiIGphdmFuYW1lPSJIZWFkZXIiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOklEIiBqYXZhbmFtZT0iSUQiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOklEUyIgamF2YW5hbWU9IklEcyIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46SURUeXBlIiBqYXZhbmFtZT0iSURUIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpJTlZFU1RNRU5UX09QVElPTlNfTElOSyIgamF2YW5hbWU9Ikludk9wdHNMIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpJTlZFU1RNRU5UX09QVElPTlNfTElOS1MiIGphdmFuYW1lPSJJbnZPcHRzTHMiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOkxBU1RfTkFNRSIgamF2YW5hbWU9Ikxhc3ROYW1lIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpMSUNFTlNFIiBqYXZhbmFtZT0iTGljZW5zZSIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46TElDRU5TRVMiIGphdmFuYW1lPSJMaWNlbnNlcyIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46TElDRU5TRVNUeXBlIiBqYXZhbmFtZT0iTGljZW5zZXNUIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpMSU5FU19PRl9CVVNJTkVTUyIgamF2YW5hbWU9IkxpbmVzT2ZCdXNpbmVzcyIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46TElORV9PRl9CVVNJTkVTUyIgamF2YW5hbWU9IkxpbmVPZkJ1c2luZXNzIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpMSU5LVHlwZSIgamF2YW5hbWU9IkxUIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpNSURETEVfSU5JVElBTCIgamF2YW5hbWU9Ik1pZGRsZUluaXRpYWwiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOk1PTkVZX0ZPUk0iIGphdmFuYW1lPSJNb25leUZvcm0iLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOk1PTkVZX0ZPUk1TIiBqYXZhbmFtZT0iTW9uZXlGb3JtcyIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46TU9ORVlfRk9STVNUeXBlIiBqYXZhbmFtZT0iTW9uZXlGb3Jtc1QiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOk5BTUUiIGphdmFuYW1lPSJOYW1lIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpORVRUSU5HX09QVElPTiIgamF2YW5hbWU9Ik5ldHRpbmdPcHQiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOk5FV19CVVNJTkVTUyIgamF2YW5hbWU9Ik5ld0J1c2luZXNzIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpPUEVSQVRJTkdfUFJPRklMRSIgamF2YW5hbWU9Ik9wZXJhdGluZ1Byb2ZpbGUiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOk9QRVJBVElOR19QUk9GSUxFUyIgamF2YW5hbWU9Ik9wZXJhdGluZ1Byb2ZpbGVzIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpPUEVSQVRJTkdfUFJPRklMRVR5cGUiIGphdmFuYW1lPSJPcGVyYXRpbmdQcm9maWxlVCIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46T1BFUkFUSU5HX1BST0ZJTEVfTElOSyIgamF2YW5hbWU9Ik9wZXJhdGluZ1Byb2ZpbGVMIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpPUEVSQVRJTkdfUFJPRklMRV9MSU5LUyIgamF2YW5hbWU9Ik9wZXJhdGluZ1Byb2ZpbGVMcyIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46T1BUSU9OQUxJVFkiIGphdmFuYW1lPSJPcHRpb25hbGl0eSIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46T1BUSU9OX0xJTksiIGphdmFuYW1lPSJPcHRMIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpPUFRJT05fTElOS1MiIGphdmFuYW1lPSJPcHRMcyIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46T1BUSU9OX19MSU5LIiBqYXZhbmFtZT0iT3B0TCIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46T1BUSU9OX19MSU5LUyIgamF2YW5hbWU9Ik9wdExzIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpPUkRFUiIgamF2YW5hbWU9Ik9yZGVyIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpPV05FUl9OQU1FIiBqYXZhbmFtZT0iT3duZXJOYW1lIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpQQVJBTUVURVIiIGphdmFuYW1lPSJQYXJhbSIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46UEFSQU1FVEVSUyIgamF2YW5hbWU9IlBhcmFtcyIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46UEFSRU5UX0JVU0lORVNTX1VOSVRfTElOSyIgamF2YW5hbWU9IlBhcmVudEJVTCIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46UEFSVFlfSUQiIGphdmFuYW1lPSJQYXJ0SUQiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOlBBUlRZX0xJTktfSUQiIGphdmFuYW1lPSJQYXJ0eUxJRCIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46UEFTU1dPUkQiIGphdmFuYW1lPSJQYXNzd29yZCIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46UEhPTkVfTlVNQkVSIiBqYXZhbmFtZT0iUGhvbmVOdW1iZXIiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOlBMQU5fTElOSyIgamF2YW5hbWU9IlBsYW5MIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpQTEFOX0xJTktTIiBqYXZhbmFtZT0iUGxhbkxzIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpQUk9EVUNUUyIgamF2YW5hbWU9IlByb2R1Y3RzIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpQUk9EVUNUU19JTlZFU1RNRU5UX09QVElPTlMiIGphdmFuYW1lPSJQcm9kSW52T3B0cyIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46UFJPRFVDVFNfUExBTlMiIGphdmFuYW1lPSJQcm9kUGxhbnMiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOlBST0RVQ1RTX1BMQU5TX1JJREVSUyIgamF2YW5hbWU9IlByb2RQbGFuc1JpZGVycyIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46UFJPRFVDVFNfUExBTlNfU0VSVklDRV9QUk9HUkFNUyIgamF2YW5hbWU9IlByb2RQbGFuc1N2Y1Byb2dzIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpQUk9EVUNUU19SSURFUlMiIGphdmFuYW1lPSJQcm9kUmlkZXJzIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpQUk9EVUNUU19TRVJWSUNFX1BST0dSQU1TIiBqYXZhbmFtZT0iUHJvZFN2Y1Byb2dzIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpQUk9EVUNUX0xJTksiIGphdmFuYW1lPSJQcm9kTCIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46UFJPRFVDVF9MSU5LUyIgamF2YW5hbWU9IlByb2RMcyIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46UFVSUE9TRSIgamF2YW5hbWU9IlB1cnBvc2UiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOlJFQ0VJVkVfREFURVRJTUUiIGphdmFuYW1lPSJSZWNlaXZlRGF0ZXRpbWUiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOlJFQ0VJVklOR19QQVJUWV9JRCIgamF2YW5hbWU9IlJlY2VpdmluZ1BhcnR5SUQiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOlJFUVVFU1QiIGphdmFuYW1lPSJSZXF1ZXN0Ii8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpSRVNQT05TSUJJTElUWSIgamF2YW5hbWU9IlJlc3BvbnNpYmlsaXR5Ii8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpSSURFUl9MSU5LIiBqYXZhbmFtZT0iUmlkZXJMIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpSSURFUl9MSU5LUyIgamF2YW5hbWU9IlJpZGVyTHMiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOlJPVVRJTkciIGphdmFuYW1lPSJSb3V0aW5nIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpST1VUSU5HX0hJU1RPUlkiIGphdmFuYW1lPSJSb3V0aW5nSGlzdG9yeSIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46U0FMVVRBVElPTl9DRCIgamF2YW5hbWU9IlNhbHV0YXRpb25DRCIvPgotICA8eGI6cW5hbWUgbmFtZT0iU0NIRU1BX1ZFUlNJT04iIGphdmFuYW1lPSJTY2hlbWFWZXJzaW9uIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpTRU5ESU5HX1BBUlRZX0lEIiBqYXZhbmFtZT0iU2VuZGluZ1BhcnR5SUQiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOlNFTkRfREFURVRJTUUiIGphdmFuYW1lPSJTZW5kRGF0ZXRpbWUiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOlNFUlZJQ0VfUFJPR1JBTV9MSU5LIiBqYXZhbmFtZT0iU3ZjUHJvZ0wiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOlNFUlZJQ0VfUFJPR1JBTV9MSU5LUyIgamF2YW5hbWU9IlN2Y1Byb2dMcyIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46U1RBVEUiIGphdmFuYW1lPSJTdGF0ZSIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46U1RBVEVTIiBqYXZhbmFtZT0iU3RhdGVzIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpTVEFURVNUeXBlIiBqYXZhbmFtZT0iU3RhdGVzVCIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46U1RBVEVUeXBlIiBqYXZhbmFtZT0iU3RhdGVUIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpTVEFUVVMiIGphdmFuYW1lPSJTdGF0dXMiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOlNURVAiIGphdmFuYW1lPSJTdGVwIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpTVEVQVHlwZSIgamF2YW5hbWU9IlN0ZXBUIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpTVUZGSVhfQ0QiIGphdmFuYW1lPSJTdWZmaXhDRCIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46VEVSTV9EQVRFIiBqYXZhbmFtZT0iVGVybURhdGUiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOlRFU1QiIGphdmFuYW1lPSJUZXN0Ii8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpUSU4iIGphdmFuYW1lPSJUSU4iLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOlRSQU5TQUNUSU9OIiBqYXZhbmFtZT0iVHhuIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpUUkFOU0FDVElPTl9DT1VOVCIgamF2YW5hbWU9IlR4bkNvdW50Ii8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpUUkFOU0FDVElPTl9JRCIgamF2YW5hbWU9IlR4bklkIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpUUkFOU0FDVElPTl9ST1VUSU5HIiBqYXZhbmFtZT0iVHhuUm91dGluZyIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46VFJBTlNBQ1RJT05fUk9VVElOR1MiIGphdmFuYW1lPSJUeG5Sb3V0aW5ncyIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46VFJBTlNBQ1RJT05fUk9VVElOR19MSU5LIiBqYXZhbmFtZT0iVHhuUm91dGluZ0wiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOlRSQU5TQUNUSU9OX1RZUEUiIGphdmFuYW1lPSJUeG5UeXBlIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpUUkFOU0FDVElPTl9UWVBFUyIgamF2YW5hbWU9IlR4blR5cGVzIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpUWVBFIiBqYXZhbmFtZT0iVHlwZSIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46VVNFUiIgamF2YW5hbWU9IlVzZXIiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOlVTRVJTIiBqYXZhbmFtZT0iVXNlcnMiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOlVTRVJfTElOSyIgamF2YW5hbWU9IlVzZXJMIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpVU0VSX0xPR09OX0lEIiBqYXZhbmFtZT0iVXNlckxvZ29uSUQiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOlVTRVJfUk9MRSIgamF2YW5hbWU9IlVzZXJSb2xlIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpVU0VSX1JPTEVTIiBqYXZhbmFtZT0iVXNlclJvbGVzIi8+Ci0gIDx4YjpxbmFtZSBuYW1lPSJhbjpVU0VSX1JPTEVfTElOSyIgamF2YW5hbWU9IlVzZXJSb2xlTCIvPgotICA8eGI6cW5hbWUgbmFtZT0iYW46VVNFUl9UT19CVVNJTkVTU19VTklUX01BUFBJTkciIGphdmFuYW1lPSJVc2VyVG9CVU1hcHBpbmciLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOlVTRVJfVE9fQlVTSU5FU1NfVU5JVF9NQVBQSU5HUyIgamF2YW5hbWU9IlVzZXJUb0JVTUFwcGluZ3MiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOlZBTFVFIiBqYXZhbmFtZT0iVmFsdWUiLz4KLSAgPHhiOnFuYW1lIG5hbWU9ImFuOldSSVRJTkdfQ09NUEFOWSIgamF2YW5hbWU9IldyaXRpbmdDb21wYW55Ii8+Ci0KLTwveGI6Y29uZmlnPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2FwcHZpZXcvQWRkX0FjY3RTaWViZWw3LnhtbCBiL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2FwcHZpZXcvQWRkX0FjY3RTaWViZWw3LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODY5YTJkMi4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9hcHB2aWV3L0FkZF9BY2N0U2llYmVsNy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSBlZGl0ZWQgd2l0aCBYTUwgU3B5IHY0LjQgVSAoaHR0cDovL3d3dy54bWxzcHkuY29tKSBieSBCb3JpcyBQb3J0bm95IChJbmZvcm1hdGlvbiBCdWlsZGVycyBJbmMuKSAtLT4KLTw/U2llYmVsLVByb3BlcnR5LVNldCBFc2NhcGVOYW1lcz0iZmFsc2UiPz4KLTxTaWViZWxNZXNzYWdlIE1lc3NhZ2VJZD0iMS1OIiBJbnRPYmplY3RGb3JtYXQ9IlNpZWJlbCBIaWVyYXJjaGljYWwiIE1lc3NhZ2VUeXBlPSJJbnRlZ3JhdGlvbiBPYmplY3QiIEludE9iamVjdE5hbWU9IlNhbXBsZSBBY2NvdW50IiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6bm9OYW1lc3BhY2VTY2hlbWFMb2NhdGlvbj0iRjpcQWRhcHRlcnNcc2llYmVsXEFkZF9BY2N0U2llYmVsN18xLnhzZCI+Ci0JPExpc3RPZlNhbXBsZUFjY291bnQ+Ci0JCTxBY2NvdW50PgotCQkJPEN1bHR1cmUvPgotCQkJPEN1cnJlbmN5Q29kZT5VU0Q8L0N1cnJlbmN5Q29kZT4KLQkJCTxEZXNjcmlwdGlvbi8+Ci0JCQk8RGl2aXNpb24vPgotCQkJPEhvbWVQYWdlLz4KLQkJCTxJbnRlZ3JhdGlvbklkLz4KLQkJCTxMaW5lb2ZCdXNpbmVzcy8+Ci0JCQk8TG9jYXRpb24vPgotCQkJPE5hbWU+QmVhIERlbW88L05hbWU+Ci0JCQk8UHJvamVjdE5hbWUvPgotCQkJPFR5cGU+Q29tbWVyY2lhbDwvVHlwZT4KLQkJCTxMaXN0T2ZBY2NvdW50X09yZ2FuaXphdGlvbj4KLQkJCQk8QWNjb3VudF9Pcmdhbml6YXRpb24gSXNQcmltYXJ5TVZHPSJZIj4KLQkJCQkJPEludGVncmF0aW9uSWQvPgotCQkJCQk8T3JnYW5pemF0aW9uPkRlZmF1bHQgT3JnYW5pemF0aW9uPC9Pcmdhbml6YXRpb24+Ci0JCQkJPC9BY2NvdW50X09yZ2FuaXphdGlvbj4KLQkJCTwvTGlzdE9mQWNjb3VudF9Pcmdhbml6YXRpb24+Ci0JCQk8TGlzdE9mQWNjb3VudEF0dGFjaG1lbnQvPgotCQkJPExpc3RPZkJ1c2luZXNzQWRkcmVzcz4KLQkJCQk8QnVzaW5lc3NBZGRyZXNzPgotCQkJCQk8QWRkcmVzc05hbWU+Tlk8L0FkZHJlc3NOYW1lPgotCQkJCQk8Q2l0eT5OWTwvQ2l0eT4KLQkJCQkJPENvdW50cnk+VVNBPC9Db3VudHJ5PgotCQkJCQk8RmF4TnVtYmVyPjk4NzY1NDMyMTE8L0ZheE51bWJlcj4KLQkJCQkJPEludGVncmF0aW9uSWQvPgotCQkJCQk8UGhvbmVOdW1iZXI+MTIzNDU2Nzg5MDwvUGhvbmVOdW1iZXI+Ci0JCQkJCTxQb3N0YWxDb2RlPjA3MzAxPC9Qb3N0YWxDb2RlPgotCQkJCQk8UHJvdmluY2UvPgotCQkJCQk8U3RhdGU+Tlk8L1N0YXRlPgotCQkJCQk8U3RyZWV0QWRkcmVzcz4yIE1hZGlzaW9uIFNxdWFyZTwvU3RyZWV0QWRkcmVzcz4KLQkJCQk8L0J1c2luZXNzQWRkcmVzcz4KLQkJCTwvTGlzdE9mQnVzaW5lc3NBZGRyZXNzPgotCQkJPExpc3RPZkNvbnRhY3QvPgotCQk8L0FjY291bnQ+Ci0JPC9MaXN0T2ZTYW1wbGVBY2NvdW50PgotPC9TaWViZWxNZXNzYWdlPgpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvYXBwdmlldy9BZGRfQWNjdFNpZWJlbDcueHNkIGIvdjIvdGVzdC9jYXNlcy9zY2hlbWEvYXBwdmlldy9BZGRfQWNjdFNpZWJlbDcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTI1NjlhLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2FwcHZpZXcvQWRkX0FjY3RTaWViZWw3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLVczQyBTY2hlbWEgZ2VuZXJhdGVkIGJ5IFhNTCBTcHkgdjQuNCBVIChodHRwOi8vd3d3LnhtbHNweS5jb20pLS0+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0JCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJTaWViZWxNZXNzYWdlIj4KLQkgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICA8eHNkOnNlcXVlbmNlPgotCQkJICA8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mU2FtcGxlQWNjb3VudCIgdHlwZT0iTGlzdE9mU2FtcGxlQWNjb3VudF90eXBlIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPC94c2Q6c2VxdWVuY2U+ICAKLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Ik1lc3NhZ2VJZCIgdHlwZT0ieHNkOnN0cmluZyIvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iTWVzc2FnZVR5cGUiIHR5cGU9InhzZDpzdHJpbmciLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9IkludE9iamVjdE5hbWUiIHR5cGU9InhzZDpzdHJpbmciIGZpeGVkPSJTYW1wbGUgQWNjb3VudCIvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iSW50T2JqZWN0Rm9ybWF0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgkKLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU2FtcGxlQWNjb3VudF90eXBlIj4KLQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkFjY291bnQiIHR5cGU9IkFjY291bnRfdHlwZSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQWNjb3VudF90eXBlIj4KLQkJIDx4c2Q6c2VxdWVuY2U+Ci0JCQkJPCEtLXhzZDplbGVtZW50IG5hbWU9IlN5c3RlbSIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8tLT4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iQ3VsdHVyZSIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkN1cnJlbmN5Q29kZSIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkRlc2NyaXB0aW9uIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iRGl2aXNpb24iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJIb21lUGFnZSIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCi0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkludGVncmF0aW9uSWQiIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJMaW5lb2ZCdXNpbmVzcyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkxvY2F0aW9uIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkKLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IlByb2plY3ROYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iVHlwZSIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCi0JCQkJPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZkFjY291bnRfT3JnYW5pemF0aW9uIiB0eXBlPSJMaXN0T2ZBY2NvdW50X09yZ2FuaXphdGlvbl90eXBlIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkKLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mQWNjb3VudEF0dGFjaG1lbnQiIHR5cGU9Ikxpc3RPZkFjY291bnRBdHRhY2htZW50X3R5cGUiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTwhLS14c2Q6ZWxlbWVudCBuYW1lPSJMaXN0T2ZBY2NvdW50QXR0YWNobWVudCIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8tLT4KLQkJCQkKLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mQnVzaW5lc3NBZGRyZXNzIiB0eXBlPSJMaXN0T2ZCdXNpbmVzc0FkZHJlc3NfdHlwZSIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCi0JCQkJPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZkNvbnRhY3QiIHR5cGU9Ikxpc3RPZkNvbnRhY3RfdHlwZSIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPCEtLXhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZkNvbnRhY3QiIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIvLS0+Ci0JCQkJCi0JCQkJPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZlN1YkFjY291bnQiIHR5cGU9Ikxpc3RPZlN1YkFjY291bnRfdHlwZSIgbWluT2NjdXJzPSIwIi8+Ci0JCSAgPC94c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJvcGVyYXRpb24iIHR5cGU9InhzZDpzdHJpbmciLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InNlYXJjaHNwZWMiIHR5cGU9InhzZDpzdHJpbmciLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkFjY291bnRfT3JnYW5pemF0aW9uX3R5cGUiPgotCSAgCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkFjY291bnRfT3JnYW5pemF0aW9uIiB0eXBlPSJBY2NvdW50X09yZ2FuaXphdGlvbl90eXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkgIDwveHNkOmNvbXBsZXhUeXBlPgotCSAgCi0JICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkFjY291bnRBdHRhY2htZW50X3R5cGUiPgotCQkgIDx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkFjY291bnRBdHRhY2htZW50IiB0eXBlPSJBY2NvdW50QXR0YWNobWVudF90eXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCSAgPC94c2Q6c2VxdWVuY2U+Ci0JICA8L3hzZDpjb21wbGV4VHlwZT4KLQkgIAotCSAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZCdXNpbmVzc0FkZHJlc3NfdHlwZSI+Ci0JCSAgPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iQnVzaW5lc3NBZGRyZXNzIiB0eXBlPSJCdXNpbmVzc0FkZHJlc3NfdHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkgIDwveHNkOnNlcXVlbmNlPgotCSAgPC94c2Q6Y29tcGxleFR5cGU+Ci0JCi0JICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkNvbnRhY3RfdHlwZSI+Ci0JICAJPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iQ29udGFjdCIgdHlwZT0iQ29udGFjdF90eXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0JICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkNvbnRhY3RfQnVzaW5lc3NBZGRyZXNzX3R5cGUiPgotCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iQ29udGFjdF9CdXNpbmVzc0FkZHJlc3MiIHR5cGU9IkNvbnRhY3RfQnVzaW5lc3NBZGRyZXNzX3R5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTwveHNkOnNlcXVlbmNlPgotCSAgPC94c2Q6Y29tcGxleFR5cGU+Ci0JCi0JICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlN1YkFjY291bnRfdHlwZSI+Ci0JCSA8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJTdWJBY2NvdW50IiB0eXBlPSJTdWJBY2NvdW50X3R5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJIDwveHNkOnNlcXVlbmNlPgotCSAgPC94c2Q6Y29tcGxleFR5cGU+Ci0JCi0JICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkFjY291bnRBdHRhY2htZW50X3R5cGUiID4KLQkJICA8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJBY2NudEZpbGVFeHQiIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJBY2NudEZpbGVOYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iQ29tbWVudCIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkF0dGFjaG1lbnRJZCIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCSAgPC94c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJvcGVyYXRpb24iIHR5cGU9InhzZDpzdHJpbmciLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InNlYXJjaHNwZWMiIHR5cGU9InhzZDpzdHJpbmciLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCi0JCi0JIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQWNjb3VudF9Pcmdhbml6YXRpb25fdHlwZSI+Ci0JCSA8eHNkOnNlcXVlbmNlPgotCQkJIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbnRlZ3JhdGlvbklkIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCSA8eHNkOmVsZW1lbnQgbmFtZT0iT3JnYW5pemF0aW9uIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJIDwveHNkOnNlcXVlbmNlPgotCQkgPHhzZDphdHRyaWJ1dGUgbmFtZT0iSXNQcmltYXJ5TVZHIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0JCSA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJvcGVyYXRpb24iIHR5cGU9InhzZDpzdHJpbmciLz4KLQkJIDx4c2Q6YXR0cmlidXRlIG5hbWU9InNlYXJjaHNwZWMiIHR5cGU9InhzZDpzdHJpbmciLz4KLQkgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQkKLQkgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJCdXNpbmVzc0FkZHJlc3NfdHlwZSI+Ci0JCSA8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJBZGRyZXNzTmFtZSIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkNpdHkiIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJDb3VudHJ5IiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iRmF4TnVtYmVyIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iSW50ZWdyYXRpb25JZCIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IlBob25lTnVtYmVyIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iUG9zdGFsQ29kZSIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IlByb3ZpbmNlIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iU3RhdGUiIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJTdHJlZXRBZGRyZXNzIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ib3BlcmF0aW9uIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJzZWFyY2hzcGVjIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0JCi0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkNvbnRhY3RfdHlwZSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkNlbGx1bGFyUGhvbmUiIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJDb21tZW50MiIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkZpcnN0TmFtZSIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkhvbWVQaG9uZSIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkludGVncmF0aW9uSWQiIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJKb2JUaXRsZSIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9Ikxhc3ROYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iTWlkZGxlTmFtZSIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9Ik9yZ2FuaXphdGlvbiIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IlBlcnNvbmFsQ29udGFjdCIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZkNvbnRhY3RfQnVzaW5lc3NBZGRyZXNzIiB0eXBlPSJMaXN0T2ZDb250YWN0X0J1c2luZXNzQWRkcmVzc190eXBlIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ib3BlcmF0aW9uIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJzZWFyY2hzcGVjIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0JCi0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJDb250YWN0X0J1c2luZXNzQWRkcmVzc190eXBlIj4KLQkJIDx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkNpdHkiIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJDb3VudHJ5IiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iUG9zdGFsQ29kZSIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IlN0YXRlIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iU3RyZWV0QWRkcmVzcyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IlN0cmVldEFkZHJlc3MyIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iQWRkcmVzc05hbWUiIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJJbnRlZ3JhdGlvbklkIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iSXNQcmltYXJ5TVZHIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJvcGVyYXRpb24iIHR5cGU9InhzZDpzdHJpbmciLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InNlYXJjaHNwZWMiIHR5cGU9InhzZDpzdHJpbmciLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCi0JICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlN1YkFjY291bnRfdHlwZSI+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJJZCIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkNyZWF0ZWQiIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJVcGRhdGVkIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iQ29uZmxpY3RJZCIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9Ik1vZElkIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iQWNjb3VudFN0YXR1czIiIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJBbGlhczIiIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJBc3NpZ25tZW50QXJlYUNvZGUiIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJBc3NpZ25tZW50Q291bnRyeUNvZGUiIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJDU04yIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iQ29tcGV0aXRvciIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkN1cnJlbmN5Q29kZSIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkRlc2NyaXB0aW9uIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iRGl2aXNpb24iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJHcm91cFR5cGVDb2RlIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iSW50ZXJuYWxPcmdGbGFnIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iTG9jYXRpb24iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJMb2NhdGlvbkxldmVsIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iTWFpbkZheE51bWJlciIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9Ik1haW5QaG9uZU51bWJlciIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5hbWUiIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJQYXJlbnRBY2NvdW50RGl2aXNpb24iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJQYXJlbnRBY2NvdW50SWQiIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJQYXJlbnRBY2NvdW50TG9jYXRpb24iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJQYXJlbnRBY2NvdW50TG9jYXRpb25MZXZlbCIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IlBhcmVudEFjY291bnROYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iUGFyZW50QWNjb3VudFJlZ2lvbiIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IlBhcnR5TmFtZSIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IlBhcnR5VHlwZUNvZGUiIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJQYXJ0eVVJZCIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IlByaW1hcnlJbmR1c3RyeUlkIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iUHJpbWFyeU9yZ2FuaXphdGlvbklkIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iUHJpbWFyeVBvc2l0aW9uSWQiIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJQcmltYXJ5U2VydmljZUFncmVlbWVudElkIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iUHJpbWFyeVN5bm9ueW1JZCIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IlJlZ2lvbiIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IlMtU0luc3RhbmNlIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iUy1TSW5zdGFuY2VJZCIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IlMtU0tleUlkIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iVHlwZSIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im9wZXJhdGlvbiIgdHlwZT0ieHNkOnN0cmluZyIvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ic2VhcmNoc3BlYyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAJPC94c2Q6Y29tcGxleFR5cGU+Ci0KLQkKLTwveHNkOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2FwcHZpZXcvREJNUzFfQWRkQ3VzdG9tZXJfcmVxdWVzdC54c2QgYi92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9hcHB2aWV3L0RCTVMxX0FkZEN1c3RvbWVyX3JlcXVlc3QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDY1ZTRjLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2FwcHZpZXcvREJNUzFfQWRkQ3VzdG9tZXJfcmVxdWVzdC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0KLQotICA8eHNkOmVsZW1lbnQgbmFtZT0iSW5wdXQiPgotICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iRklSU1ROQU1FIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMQVNUTkFNRSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iRE9CIiB0eXBlPSJ4c2Q6ZGF0ZVRpbWUiLz4KLSAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICA8L3hzZDplbGVtZW50PgotCi08L3hzZDpzY2hlbWE+CmRpZmYgLS1naXQgYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9hcHB2aWV3L0RCTVMxX0FkZEN1c3RvbWVyX3Jlc3BvbnNlLnhzZCBiL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2FwcHZpZXcvREJNUzFfQWRkQ3VzdG9tZXJfcmVzcG9uc2UueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmI3OGRhLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2FwcHZpZXcvREJNUzFfQWRkQ3VzdG9tZXJfcmVzcG9uc2UueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0KLQotICA8eHNkOmVsZW1lbnQgbmFtZT0iUm93c0FmZmVjdGVkIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0KLTwveHNkOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2FwcHZpZXcvREJNUzFfR2V0QWxsQ3VzdG9tZXJzX3Jlc3BvbnNlLnhzZCBiL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2FwcHZpZXcvREJNUzFfR2V0QWxsQ3VzdG9tZXJzX3Jlc3BvbnNlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ5NWE0ZS4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9hcHB2aWV3L0RCTVMxX0dldEFsbEN1c3RvbWVyc19yZXNwb25zZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0KLQotICA8eHNkOmVsZW1lbnQgbmFtZT0iUm93cyI+Ci0gICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSb3ciIG1heE9jY3Vycz0idW5ib3VuZGVkIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQUREUkVTUzEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkFERFJFU1MyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJBRERSRVNTMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQ0lUWSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQ09VTlRSWSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iRE9CIiB0eXBlPSJ4c2Q6ZGF0ZVRpbWUiLz4KLSAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkVNQUlMIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJGQVgiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkZJUlNUTkFNRSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTEFTVE5BTUUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik1JRERMRU5BTUUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlBIT05FIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQT1NUQUxDT0RFIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTVEFURSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgPC94c2Q6ZWxlbWVudD4KLQotPC94c2Q6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvYXBwdmlldy9ISVBBQTI3MC54bWwgYi92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9hcHB2aWV3L0hJUEFBMjcwLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNiZjg2ZC4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9hcHB2aWV3L0hJUEFBMjcwLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI0NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTwhRE9DVFlQRSBISVBBQTI3MD4KLTxISVBBQTI3MD4KLSAgPElTQT4KLSAgICA8XzAxX0F1dGhvcml6YXRpb25fSW5mb3JtYXRpb25fUXVhbGlmaWVyXz4wMDwvXzAxX0F1dGhvcml6YXRpb25fSW5mb3JtYXRpb25fUXVhbGlmaWVyXz4KLSAgICA8XzAyX0F1dGhvcml6YXRpb25fSW5mb3JtYXRpb25fPjEyMzQ1Njc4OTA8L18wMl9BdXRob3JpemF0aW9uX0luZm9ybWF0aW9uXz4KLSAgICA8XzAzX1NlY3VyaXR5X0luZm9ybWF0aW9uX1F1YWxpZmllcl8+MDA8L18wM19TZWN1cml0eV9JbmZvcm1hdGlvbl9RdWFsaWZpZXJfPgotICAgIDxfMDRfU2VjdXJpdHlfSW5mb3JtYXRpb25fPjEyMzQ1Njc4OTA8L18wNF9TZWN1cml0eV9JbmZvcm1hdGlvbl8+Ci0gICAgPF8wNV9JbnRlcmNoYW5nZV9JRF9RdWFsaWZpZXJfPlpaPC9fMDVfSW50ZXJjaGFuZ2VfSURfUXVhbGlmaWVyXz4KLSAgICA8XzA2X0ludGVyY2hhbmdlX1NlbmRlcl9JRF8+U1VCTUlUVEVSUyBJRDEyPC9fMDZfSW50ZXJjaGFuZ2VfU2VuZGVyX0lEXz4KLSAgICA8XzA3X0ludGVyY2hhbmdlX0lEX1F1YWxpZmllcl8+Wlo8L18wN19JbnRlcmNoYW5nZV9JRF9RdWFsaWZpZXJfPgotICAgIDxfMDhfSW50ZXJjaGFuZ2VfUmVjZWl2ZXJfSURfPlJFQ0VJVkVSUyBJRDEyMzwvXzA4X0ludGVyY2hhbmdlX1JlY2VpdmVyX0lEXz4KLSAgICA8XzA5X0ludGVyY2hhbmdlX0RhdGVfPjAxMDEyMjwvXzA5X0ludGVyY2hhbmdlX0RhdGVfPgotICAgIDxfMTBfSW50ZXJjaGFuZ2VfVGltZV8+MTI1MzwvXzEwX0ludGVyY2hhbmdlX1RpbWVfPgotICAgIDxfMTFfUmVwZXRpdGlvbl9TZXBhcmF0b3JfPlU8L18xMV9SZXBldGl0aW9uX1NlcGFyYXRvcl8+Ci0gICAgPF8xMl9JbnRlcmNoYW5nZV9Db250cm9sX1ZlcnNpb25fTnVtYmVyXz4wMDQwMTwvXzEyX0ludGVyY2hhbmdlX0NvbnRyb2xfVmVyc2lvbl9OdW1iZXJfPgotICAgIDxfMTNfSW50ZXJjaGFuZ2VfQ29udHJvbF9OdW1iZXJfPjAwMDAwMDkwNTwvXzEzX0ludGVyY2hhbmdlX0NvbnRyb2xfTnVtYmVyXz4KLSAgICA8XzE0X0Fja25vd2xlZGdlbWVudF9SZXF1ZXN0ZWRfPjE8L18xNF9BY2tub3dsZWRnZW1lbnRfUmVxdWVzdGVkXz4KLSAgICA8XzE1X1VzYWdlX0luZGljYXRvcl8+VDwvXzE1X1VzYWdlX0luZGljYXRvcl8+Ci0gICAgPF8xNl9Db21wb25lbnRfRWxlbWVudF9TZXBhcmF0b3JfPjo8L18xNl9Db21wb25lbnRfRWxlbWVudF9TZXBhcmF0b3JfPgotICA8L0lTQT4KLSAgPEdTPgotICAgIDxfMDFfRnVuY3Rpb25hbF9JZGVudGlmaWVyX0NvZGVfPkhTPC9fMDFfRnVuY3Rpb25hbF9JZGVudGlmaWVyX0NvZGVfPgotICAgIDxfMDJfQXBwbGljYXRpb25fU2VuZGVyc19Db2RlXz5TZW5kZXJJRDwvXzAyX0FwcGxpY2F0aW9uX1NlbmRlcnNfQ29kZV8+Ci0gICAgPF8wM19BcHBsaWNhdGlvbl9SZWNlaXZlcnNfQ29kZV8+UmVjZWl2ZXJJRDwvXzAzX0FwcGxpY2F0aW9uX1JlY2VpdmVyc19Db2RlXz4KLSAgICA8XzA0X0RhdGVfPjIwMDEwMTIyPC9fMDRfRGF0ZV8+Ci0gICAgPF8wNV9UaW1lXz4xMzEwPC9fMDVfVGltZV8+Ci0gICAgPF8wNl9Hcm91cF9Db250cm9sX051bWJlcl8+MTwvXzA2X0dyb3VwX0NvbnRyb2xfTnVtYmVyXz4KLSAgICA8XzA3X1Jlc3BvbnNpYmxlX0FnZW5jeV9Db2RlXz5YPC9fMDdfUmVzcG9uc2libGVfQWdlbmN5X0NvZGVfPgotICAgIDxfMDhfVmVyc2lvbl9fUmVsZWFzZV9fSW5kdXN0cnlfSWRlbnRpZmllcl9Db2RlXz4wMDQwMTBYMDkyPC9fMDhfVmVyc2lvbl9fUmVsZWFzZV9fSW5kdXN0cnlfSWRlbnRpZmllcl9Db2RlXz4KLSAgPC9HUz4KLSAgPF8yNzA+Ci0gICAgPFNUPgotICAgICAgPF8wMV9UcmFuc2FjdGlvbl9TZXRfSWRlbnRpZmllcl9Db2RlXz4yNzA8L18wMV9UcmFuc2FjdGlvbl9TZXRfSWRlbnRpZmllcl9Db2RlXz4KLSAgICAgIDxfMDJfVHJhbnNhY3Rpb25fU2V0X0NvbnRyb2xfTnVtYmVyXz4xMjM0PC9fMDJfVHJhbnNhY3Rpb25fU2V0X0NvbnRyb2xfTnVtYmVyXz4KLSAgICA8L1NUPgotICAgIDxCSFQ+Ci0gICAgICA8XzAxX0hpZXJhcmNoaWNhbF9TdHJ1Y3R1cmVfQ29kZV8+MDAyMjwvXzAxX0hpZXJhcmNoaWNhbF9TdHJ1Y3R1cmVfQ29kZV8+Ci0gICAgICA8XzAyX1RyYW5zYWN0aW9uX1NldF9QdXJwb3NlX0NvZGVfPjEzPC9fMDJfVHJhbnNhY3Rpb25fU2V0X1B1cnBvc2VfQ29kZV8+Ci0gICAgICA8XzAzX1JlZmVyZW5jZV9JZGVudGlmaWNhdGlvbl8+MTAwMDEyMzQ8L18wM19SZWZlcmVuY2VfSWRlbnRpZmljYXRpb25fPgotICAgICAgPF8wNF9EYXRlXz4xOTk5MDUwMTwvXzA0X0RhdGVfPgotICAgICAgPF8wNV9UaW1lXz4xMzE5PC9fMDVfVGltZV8+Ci0gICAgICA8XzA2X1RyYW5zYWN0aW9uX1R5cGVfQ29kZV8vPgotICAgIDwvQkhUPgotICAgIDxfMjAwMEE+Ci0gICAgICA8SEw+Ci0gICAgICAgIDxfMDFfSGllcmFyY2hpY2FsX0lEX051bWJlcl8+MTwvXzAxX0hpZXJhcmNoaWNhbF9JRF9OdW1iZXJfPgotICAgICAgICA8XzAyX0hpZXJhcmNoaWNhbF9QYXJlbnRfSURfTnVtYmVyXy8+Ci0gICAgICAgIDxfMDNfSGllcmFyY2hpY2FsX0xldmVsX0NvZGVfPjIwPC9fMDNfSGllcmFyY2hpY2FsX0xldmVsX0NvZGVfPgotICAgICAgICA8XzA0X0hpZXJhcmNoaWNhbF9DaGlsZF9Db2RlXz4xPC9fMDRfSGllcmFyY2hpY2FsX0NoaWxkX0NvZGVfPgotICAgICAgPC9ITD4KLSAgICAgIDxfMjEwMEE+Ci0gICAgICAgIDxOTTE+Ci0gICAgICAgICAgPF8wMV9FbnRpdHlfSWRlbnRpZmllcl9Db2RlXz5QUjwvXzAxX0VudGl0eV9JZGVudGlmaWVyX0NvZGVfPgotICAgICAgICAgIDxfMDJfRW50aXR5X1R5cGVfUXVhbGlmaWVyXz4yPC9fMDJfRW50aXR5X1R5cGVfUXVhbGlmaWVyXz4KLSAgICAgICAgICA8XzAzX05hbWVfTGFzdF9vcl9Pcmdhbml6YXRpb25fTmFtZV8+QUJDQ09NUEFOWTwvXzAzX05hbWVfTGFzdF9vcl9Pcmdhbml6YXRpb25fTmFtZV8+Ci0gICAgICAgICAgPF8wNF9OYW1lX0ZpcnN0Xy8+Ci0gICAgICAgICAgPF8wNV9OYW1lX01pZGRsZV8vPgotICAgICAgICAgIDxfMDZfTmFtZV9QcmVmaXhfLz4KLSAgICAgICAgICA8XzA3X05hbWVfU3VmZml4Xy8+Ci0gICAgICAgICAgPF8wOF9JZGVudGlmaWNhdGlvbl9Db2RlX1F1YWxpZmllcl8+UEk8L18wOF9JZGVudGlmaWNhdGlvbl9Db2RlX1F1YWxpZmllcl8+Ci0gICAgICAgICAgPF8wOV9JZGVudGlmaWNhdGlvbl9Db2RlXz44NDI2MTAwMDE8L18wOV9JZGVudGlmaWNhdGlvbl9Db2RlXz4KLSAgICAgICAgPC9OTTE+Ci0gICAgICA8L18yMTAwQT4KLSAgICAgIDxfMjAwMEI+Ci0gICAgICAgIDxITD4KLSAgICAgICAgICA8XzAxX0hpZXJhcmNoaWNhbF9JRF9OdW1iZXJfPjI8L18wMV9IaWVyYXJjaGljYWxfSURfTnVtYmVyXz4KLSAgICAgICAgICA8XzAyX0hpZXJhcmNoaWNhbF9QYXJlbnRfSURfTnVtYmVyXz4xPC9fMDJfSGllcmFyY2hpY2FsX1BhcmVudF9JRF9OdW1iZXJfPgotICAgICAgICAgIDxfMDNfSGllcmFyY2hpY2FsX0xldmVsX0NvZGVfPjIxPC9fMDNfSGllcmFyY2hpY2FsX0xldmVsX0NvZGVfPgotICAgICAgICAgIDxfMDRfSGllcmFyY2hpY2FsX0NoaWxkX0NvZGVfPjE8L18wNF9IaWVyYXJjaGljYWxfQ2hpbGRfQ29kZV8+Ci0gICAgICAgIDwvSEw+Ci0gICAgICAgIDxfMjEwMEI+Ci0gICAgICAgICAgPE5NMT4KLSAgICAgICAgICAgIDxfMDFfRW50aXR5X0lkZW50aWZpZXJfQ29kZV8+MVA8L18wMV9FbnRpdHlfSWRlbnRpZmllcl9Db2RlXz4KLSAgICAgICAgICAgIDxfMDJfRW50aXR5X1R5cGVfUXVhbGlmaWVyXz4xPC9fMDJfRW50aXR5X1R5cGVfUXVhbGlmaWVyXz4KLSAgICAgICAgICAgIDxfMDNfTmFtZV9MYXN0X29yX09yZ2FuaXphdGlvbl9OYW1lXz5KT05FUzwvXzAzX05hbWVfTGFzdF9vcl9Pcmdhbml6YXRpb25fTmFtZV8+Ci0gICAgICAgICAgICA8XzA0X05hbWVfRmlyc3RfPk1BUkNVUzwvXzA0X05hbWVfRmlyc3RfPgotICAgICAgICAgICAgPF8wNV9OYW1lX01pZGRsZV8vPgotICAgICAgICAgICAgPF8wNl9OYW1lX1ByZWZpeF8vPgotICAgICAgICAgICAgPF8wN19OYW1lX1N1ZmZpeF8vPgotICAgICAgICAgICAgPF8wOF9JZGVudGlmaWNhdGlvbl9Db2RlX1F1YWxpZmllcl8+U1Y8L18wOF9JZGVudGlmaWNhdGlvbl9Db2RlX1F1YWxpZmllcl8+Ci0gICAgICAgICAgICA8XzA5X0lkZW50aWZpY2F0aW9uX0NvZGVfPjAyMDIwMzQ8L18wOV9JZGVudGlmaWNhdGlvbl9Db2RlXz4KLSAgICAgICAgICA8L05NMT4KLSAgICAgICAgICA8UkVGPgotICAgICAgICAgICAgPF8wMV9SZWZlcmVuY2VfSWRlbnRpZmljYXRpb25fUXVhbGlmaWVyXz5ONTwvXzAxX1JlZmVyZW5jZV9JZGVudGlmaWNhdGlvbl9RdWFsaWZpZXJfPgotICAgICAgICAgICAgPF8wMl9SZWZlcmVuY2VfSWRlbnRpZmljYXRpb25fPjEyOTwvXzAyX1JlZmVyZW5jZV9JZGVudGlmaWNhdGlvbl8+Ci0gICAgICAgICAgICA8XzAzX0Rlc2NyaXB0aW9uXy8+Ci0gICAgICAgICAgPC9SRUY+Ci0gICAgICAgICAgPE4zPgotICAgICAgICAgICAgPF8wMV9BZGRyZXNzX0luZm9ybWF0aW9uXz41NSBISUdIIFNUUkVFVDwvXzAxX0FkZHJlc3NfSW5mb3JtYXRpb25fPgotICAgICAgICAgICAgPF8wMl9BZGRyZXNzX0luZm9ybWF0aW9uXy8+Ci0gICAgICAgICAgPC9OMz4KLSAgICAgICAgICA8TjQ+Ci0gICAgICAgICAgICA8XzAxX0NpdHlfTmFtZV8+U0VBVFRMRTwvXzAxX0NpdHlfTmFtZV8+Ci0gICAgICAgICAgICA8XzAyX1N0YXRlX29yX1Byb3ZpbmNlX0NvZGVfPldBPC9fMDJfU3RhdGVfb3JfUHJvdmluY2VfQ29kZV8+Ci0gICAgICAgICAgICA8XzAzX1Bvc3RhbF9Db2RlXz45ODEyMzwvXzAzX1Bvc3RhbF9Db2RlXz4KLSAgICAgICAgICAgIDxfMDRfQ291bnRyeV9Db2RlXy8+Ci0gICAgICAgICAgPC9OND4KLSAgICAgICAgICA8UEVSPgotICAgICAgICAgICAgPF8wMV9Db250YWN0X0Z1bmN0aW9uX0NvZGVfPklDPC9fMDFfQ29udGFjdF9GdW5jdGlvbl9Db2RlXz4KLSAgICAgICAgICAgIDxfMDJfTmFtZV8+TUFSWU1VUlBIWTwvXzAyX05hbWVfPgotICAgICAgICAgICAgPF8wM19Db21tdW5pY2F0aW9uX051bWJlcl9RdWFsaWZpZXJfPlRFPC9fMDNfQ29tbXVuaWNhdGlvbl9OdW1iZXJfUXVhbGlmaWVyXz4KLSAgICAgICAgICAgIDxfMDRfQ29tbXVuaWNhdGlvbl9OdW1iZXJfPjIwNjU1NTEyMTI8L18wNF9Db21tdW5pY2F0aW9uX051bWJlcl8+Ci0gICAgICAgICAgICA8XzA1X0NvbW11bmljYXRpb25fTnVtYmVyX1F1YWxpZmllcl8+RVg8L18wNV9Db21tdW5pY2F0aW9uX051bWJlcl9RdWFsaWZpZXJfPgotICAgICAgICAgICAgPF8wNl9Db21tdW5pY2F0aW9uX051bWJlcl8+MzY5NDwvXzA2X0NvbW11bmljYXRpb25fTnVtYmVyXz4KLSAgICAgICAgICAgIDxfMDdfQ29tbXVuaWNhdGlvbl9OdW1iZXJfUXVhbGlmaWVyXz5GWDwvXzA3X0NvbW11bmljYXRpb25fTnVtYmVyX1F1YWxpZmllcl8+Ci0gICAgICAgICAgICA8XzA4X0NvbW11bmljYXRpb25fTnVtYmVyXz4yMDY1NTUxMjE0PC9fMDhfQ29tbXVuaWNhdGlvbl9OdW1iZXJfPgotICAgICAgICAgIDwvUEVSPgotICAgICAgICA8L18yMTAwQj4KLSAgICAgICAgPF8yMDAwQz4KLSAgICAgICAgICA8SEw+Ci0gICAgICAgICAgICA8XzAxX0hpZXJhcmNoaWNhbF9JRF9OdW1iZXJfPjM8L18wMV9IaWVyYXJjaGljYWxfSURfTnVtYmVyXz4KLSAgICAgICAgICAgIDxfMDJfSGllcmFyY2hpY2FsX1BhcmVudF9JRF9OdW1iZXJfPjI8L18wMl9IaWVyYXJjaGljYWxfUGFyZW50X0lEX051bWJlcl8+Ci0gICAgICAgICAgICA8XzAzX0hpZXJhcmNoaWNhbF9MZXZlbF9Db2RlXz4yMjwvXzAzX0hpZXJhcmNoaWNhbF9MZXZlbF9Db2RlXz4KLSAgICAgICAgICAgIDxfMDRfSGllcmFyY2hpY2FsX0NoaWxkX0NvZGVfPjE8L18wNF9IaWVyYXJjaGljYWxfQ2hpbGRfQ29kZV8+Ci0gICAgICAgICAgPC9ITD4KLSAgICAgICAgICA8VFJOPgotICAgICAgICAgICAgPF8wMV9UcmFjZV9UeXBlX0NvZGVfPjE8L18wMV9UcmFjZV9UeXBlX0NvZGVfPgotICAgICAgICAgICAgPF8wMl9SZWZlcmVuY2VfSWRlbnRpZmljYXRpb25fPjkzMTc1LTAxMjU0NzwvXzAyX1JlZmVyZW5jZV9JZGVudGlmaWNhdGlvbl8+Ci0gICAgICAgICAgICA8XzAzX09yaWdpbmF0aW5nX0NvbXBhbnlfSWRlbnRpZmllcl8+OTg3NzI4MTIzNDwvXzAzX09yaWdpbmF0aW5nX0NvbXBhbnlfSWRlbnRpZmllcl8+Ci0gICAgICAgICAgICA8XzA0X1JlZmVyZW5jZV9JZGVudGlmaWNhdGlvbl8vPgotICAgICAgICAgIDwvVFJOPgotICAgICAgICAgIDxfMjEwMEM+Ci0gICAgICAgICAgICA8Tk0xPgotICAgICAgICAgICAgICA8XzAxX0VudGl0eV9JZGVudGlmaWVyX0NvZGVfPklMPC9fMDFfRW50aXR5X0lkZW50aWZpZXJfQ29kZV8+Ci0gICAgICAgICAgICAgIDxfMDJfRW50aXR5X1R5cGVfUXVhbGlmaWVyXz4xPC9fMDJfRW50aXR5X1R5cGVfUXVhbGlmaWVyXz4KLSAgICAgICAgICAgICAgPF8wM19OYW1lX0xhc3Rfb3JfT3JnYW5pemF0aW9uX05hbWVfPlNNSVRIPC9fMDNfTmFtZV9MYXN0X29yX09yZ2FuaXphdGlvbl9OYW1lXz4KLSAgICAgICAgICAgICAgPF8wNF9OYW1lX0ZpcnN0Xz5ST0JFUlQ8L18wNF9OYW1lX0ZpcnN0Xz4KLSAgICAgICAgICAgICAgPF8wNV9OYW1lX01pZGRsZV8+QjwvXzA1X05hbWVfTWlkZGxlXz4KLSAgICAgICAgICAgICAgPF8wNl9OYW1lX1ByZWZpeF8vPgotICAgICAgICAgICAgICA8XzA3X05hbWVfU3VmZml4Xy8+Ci0gICAgICAgICAgICAgIDxfMDhfSWRlbnRpZmljYXRpb25fQ29kZV9RdWFsaWZpZXJfPk1JPC9fMDhfSWRlbnRpZmljYXRpb25fQ29kZV9RdWFsaWZpZXJfPgotICAgICAgICAgICAgICA8XzA5X0lkZW50aWZpY2F0aW9uX0NvZGVfPjExMTIyMzMzMzAxPC9fMDlfSWRlbnRpZmljYXRpb25fQ29kZV8+Ci0gICAgICAgICAgICA8L05NMT4KLSAgICAgICAgICAgIDxSRUY+Ci0gICAgICAgICAgICAgIDxfMDFfUmVmZXJlbmNlX0lkZW50aWZpY2F0aW9uX1F1YWxpZmllcl8+MUw8L18wMV9SZWZlcmVuY2VfSWRlbnRpZmljYXRpb25fUXVhbGlmaWVyXz4KLSAgICAgICAgICAgICAgPF8wMl9SZWZlcmVuY2VfSWRlbnRpZmljYXRpb25fPjU5OTExOTwvXzAyX1JlZmVyZW5jZV9JZGVudGlmaWNhdGlvbl8+Ci0gICAgICAgICAgICA8L1JFRj4KLSAgICAgICAgICAgIDxOMz4KLSAgICAgICAgICAgICAgPF8wMV9BZGRyZXNzX0luZm9ybWF0aW9uXz4yOSBGUkVNT05UIFNUPC9fMDFfQWRkcmVzc19JbmZvcm1hdGlvbl8+Ci0gICAgICAgICAgICAgIDxfMDJfQWRkcmVzc19JbmZvcm1hdGlvbl8+QVBUIyAxPC9fMDJfQWRkcmVzc19JbmZvcm1hdGlvbl8+Ci0gICAgICAgICAgICA8L04zPgotICAgICAgICAgICAgPE40PgotICAgICAgICAgICAgICA8XzAxX0NpdHlfTmFtZV8+UEVBQ0U8L18wMV9DaXR5X05hbWVfPgotICAgICAgICAgICAgICA8XzAyX1N0YXRlX29yX1Byb3ZpbmNlX0NvZGVfPk5ZPC9fMDJfU3RhdGVfb3JfUHJvdmluY2VfQ29kZV8+Ci0gICAgICAgICAgICAgIDxfMDNfUG9zdGFsX0NvZGVfPjEwMDIzPC9fMDNfUG9zdGFsX0NvZGVfPgotICAgICAgICAgICAgICA8XzA0X0NvdW50cnlfQ29kZV8vPgotICAgICAgICAgICAgPC9OND4KLSAgICAgICAgICAgIDxETUc+Ci0gICAgICAgICAgICAgIDxfMDFfRGF0ZV9UaW1lX1BlcmlvZF9Gb3JtYXRfUXVhbGlmaWVyXz5EODwvXzAxX0RhdGVfVGltZV9QZXJpb2RfRm9ybWF0X1F1YWxpZmllcl8+Ci0gICAgICAgICAgICAgIDxfMDJfRGF0ZV9UaW1lX1BlcmlvZF8+MTk0MzA1MTk8L18wMl9EYXRlX1RpbWVfUGVyaW9kXz4KLSAgICAgICAgICAgICAgPF8wM19HZW5kZXJfQ29kZV8+TTwvXzAzX0dlbmRlcl9Db2RlXz4KLSAgICAgICAgICAgIDwvRE1HPgotICAgICAgICAgIDwvXzIxMDBDPgotICAgICAgICAgIDxfMjAwMEQ+Ci0gICAgICAgICAgICA8SEw+Ci0gICAgICAgICAgICAgIDxfMDFfSGllcmFyY2hpY2FsX0lEX051bWJlcl8+NDwvXzAxX0hpZXJhcmNoaWNhbF9JRF9OdW1iZXJfPgotICAgICAgICAgICAgICA8XzAyX0hpZXJhcmNoaWNhbF9QYXJlbnRfSURfTnVtYmVyXz4zPC9fMDJfSGllcmFyY2hpY2FsX1BhcmVudF9JRF9OdW1iZXJfPgotICAgICAgICAgICAgICA8XzAzX0hpZXJhcmNoaWNhbF9MZXZlbF9Db2RlXz4yMzwvXzAzX0hpZXJhcmNoaWNhbF9MZXZlbF9Db2RlXz4KLSAgICAgICAgICAgICAgPF8wNF9IaWVyYXJjaGljYWxfQ2hpbGRfQ29kZV8+MDwvXzA0X0hpZXJhcmNoaWNhbF9DaGlsZF9Db2RlXz4KLSAgICAgICAgICAgIDwvSEw+Ci0gICAgICAgICAgICA8VFJOPgotICAgICAgICAgICAgICA8XzAxX1RyYWNlX1R5cGVfQ29kZV8+MTwvXzAxX1RyYWNlX1R5cGVfQ29kZV8+Ci0gICAgICAgICAgICAgIDxfMDJfUmVmZXJlbmNlX0lkZW50aWZpY2F0aW9uXz45MzE3NS0wMTI1NDc8L18wMl9SZWZlcmVuY2VfSWRlbnRpZmljYXRpb25fPgotICAgICAgICAgICAgICA8XzAzX09yaWdpbmF0aW5nX0NvbXBhbnlfSWRlbnRpZmllcl8+OTg3NzI4MTIzNDwvXzAzX09yaWdpbmF0aW5nX0NvbXBhbnlfSWRlbnRpZmllcl8+Ci0gICAgICAgICAgICAgIDxfMDRfUmVmZXJlbmNlX0lkZW50aWZpY2F0aW9uXz5SQURJT0xPR1k8L18wNF9SZWZlcmVuY2VfSWRlbnRpZmljYXRpb25fPgotICAgICAgICAgICAgPC9UUk4+Ci0gICAgICAgICAgICA8XzIxMDBEPgotICAgICAgICAgICAgICA8Tk0xPgotICAgICAgICAgICAgICAgIDxfMDFfRW50aXR5X0lkZW50aWZpZXJfQ29kZV8+MDM8L18wMV9FbnRpdHlfSWRlbnRpZmllcl9Db2RlXz4KLSAgICAgICAgICAgICAgICA8XzAyX0VudGl0eV9UeXBlX1F1YWxpZmllcl8+MTwvXzAyX0VudGl0eV9UeXBlX1F1YWxpZmllcl8+Ci0gICAgICAgICAgICAgICAgPF8wM19OYW1lX0xhc3Rfb3JfT3JnYW5pemF0aW9uX05hbWVfPlNNSVRIPC9fMDNfTmFtZV9MYXN0X29yX09yZ2FuaXphdGlvbl9OYW1lXz4KLSAgICAgICAgICAgICAgICA8XzA0X05hbWVfRmlyc3RfPk1BUllMT1U8L18wNF9OYW1lX0ZpcnN0Xz4KLSAgICAgICAgICAgICAgICA8XzA1X05hbWVfTWlkZGxlXy8+Ci0gICAgICAgICAgICAgICAgPF8wNl9OYW1lX1ByZWZpeF8vPgotICAgICAgICAgICAgICAgIDxfMDdfTmFtZV9TdWZmaXhfLz4KLSAgICAgICAgICAgICAgPC9OTTE+Ci0gICAgICAgICAgICAgIDxSRUY+Ci0gICAgICAgICAgICAgICAgPF8wMV9SZWZlcmVuY2VfSWRlbnRpZmljYXRpb25fUXVhbGlmaWVyXz5TWTwvXzAxX1JlZmVyZW5jZV9JZGVudGlmaWNhdGlvbl9RdWFsaWZpZXJfPgotICAgICAgICAgICAgICAgIDxfMDJfUmVmZXJlbmNlX0lkZW50aWZpY2F0aW9uXz4wMDMyMjEyMzQ8L18wMl9SZWZlcmVuY2VfSWRlbnRpZmljYXRpb25fPgotICAgICAgICAgICAgICA8L1JFRj4KLSAgICAgICAgICAgICAgPE4zPgotICAgICAgICAgICAgICAgIDxfMDFfQWRkcmVzc19JbmZvcm1hdGlvbl8+MjkgRlJFTU9OVCBTVDwvXzAxX0FkZHJlc3NfSW5mb3JtYXRpb25fPgotICAgICAgICAgICAgICAgIDxfMDJfQWRkcmVzc19JbmZvcm1hdGlvbl8+QVBUIyAxPC9fMDJfQWRkcmVzc19JbmZvcm1hdGlvbl8+Ci0gICAgICAgICAgICAgIDwvTjM+Ci0gICAgICAgICAgICAgIDxOND4KLSAgICAgICAgICAgICAgICA8XzAxX0NpdHlfTmFtZV8+UEVBQ0U8L18wMV9DaXR5X05hbWVfPgotICAgICAgICAgICAgICAgIDxfMDJfU3RhdGVfb3JfUHJvdmluY2VfQ29kZV8+Tlk8L18wMl9TdGF0ZV9vcl9Qcm92aW5jZV9Db2RlXz4KLSAgICAgICAgICAgICAgICA8XzAzX1Bvc3RhbF9Db2RlXz4xMDAyMzwvXzAzX1Bvc3RhbF9Db2RlXz4KLSAgICAgICAgICAgICAgICA8XzA0X0NvdW50cnlfQ29kZV8vPgotICAgICAgICAgICAgICA8L040PgotICAgICAgICAgICAgICA8RE1HPgotICAgICAgICAgICAgICAgIDxfMDFfRGF0ZV9UaW1lX1BlcmlvZF9Gb3JtYXRfUXVhbGlmaWVyXz5EODwvXzAxX0RhdGVfVGltZV9QZXJpb2RfRm9ybWF0X1F1YWxpZmllcl8+Ci0gICAgICAgICAgICAgICAgPF8wMl9EYXRlX1RpbWVfUGVyaW9kXz4xOTc4MTAxNDwvXzAyX0RhdGVfVGltZV9QZXJpb2RfPgotICAgICAgICAgICAgICAgIDxfMDNfR2VuZGVyX0NvZGVfPkY8L18wM19HZW5kZXJfQ29kZV8+Ci0gICAgICAgICAgICAgIDwvRE1HPgotICAgICAgICAgICAgICA8SU5TPgotICAgICAgICAgICAgICAgIDxfMDFfWWVzX05vX0NvbmRpdGlvbl9vcl9SZXNwb25zZV9Db2RlXz5OPC9fMDFfWWVzX05vX0NvbmRpdGlvbl9vcl9SZXNwb25zZV9Db2RlXz4KLSAgICAgICAgICAgICAgICA8XzAyX0luZGl2aWR1YWxfUmVsYXRpb25zaGlwX0NvZGVfPjE5PC9fMDJfSW5kaXZpZHVhbF9SZWxhdGlvbnNoaXBfQ29kZV8+Ci0gICAgICAgICAgICAgICAgPF8wM19NYWludGVuYW5jZV9UeXBlX0NvZGVfLz4KLSAgICAgICAgICAgICAgICA8XzA0X01haW50ZW5hbmNlX1JlYXNvbl9Db2RlXy8+Ci0gICAgICAgICAgICAgICAgPF8wNV9CZW5lZml0X1N0YXR1c19Db2RlXy8+Ci0gICAgICAgICAgICAgICAgPF8wNl9NZWRpY2FyZV9TdGF0dXNfQ29kZV8vPgotICAgICAgICAgICAgICAgIDxfMDdfQ29uc29saWRhdGVkX09tbmlidXNfQnVkZ2V0X1JlY29uY2lsaWF0aW9uX0FjdF9fQ09CUkFfX1F1YWxpZnlpbmdfRXZlbnRfQ29kZV8vPgotICAgICAgICAgICAgICAgIDxfMDhfRW1wbG95bWVudF9TdGF0dXNfQ29kZV8vPgotICAgICAgICAgICAgICAgIDxfMDlfU3R1ZGVudF9TdGF0dXNfQ29kZV8vPgotICAgICAgICAgICAgICAgIDxfMTBfWWVzX05vX0NvbmRpdGlvbl9vcl9SZXNwb25zZV9Db2RlXy8+Ci0gICAgICAgICAgICAgICAgPF8xMV9EYXRlX1RpbWVfUGVyaW9kX0Zvcm1hdF9RdWFsaWZpZXJfLz4KLSAgICAgICAgICAgICAgICA8XzEyX0RhdGVfVGltZV9QZXJpb2RfLz4KLSAgICAgICAgICAgICAgICA8XzEzX0NvbmZpZGVudGlhbGl0eV9Db2RlXy8+Ci0gICAgICAgICAgICAgICAgPF8xNF9DaXR5X05hbWVfLz4KLSAgICAgICAgICAgICAgICA8XzE1X1N0YXRlX29yX1Byb3ZpbmNlX0NvZGVfLz4KLSAgICAgICAgICAgICAgICA8XzE2X0NvdW50cnlfQ29kZV8vPgotICAgICAgICAgICAgICAgIDxfMTdfTnVtYmVyXy8+Ci0gICAgICAgICAgICAgIDwvSU5TPgotICAgICAgICAgICAgICA8RFRQPgotICAgICAgICAgICAgICAgIDxfMDFfRGF0ZV9UaW1lX1F1YWxpZmllcl8+NDcyPC9fMDFfRGF0ZV9UaW1lX1F1YWxpZmllcl8+Ci0gICAgICAgICAgICAgICAgPF8wMl9EYXRlX1RpbWVfUGVyaW9kX0Zvcm1hdF9RdWFsaWZpZXJfPkQ4PC9fMDJfRGF0ZV9UaW1lX1BlcmlvZF9Gb3JtYXRfUXVhbGlmaWVyXz4KLSAgICAgICAgICAgICAgICA8XzAzX0RhdGVfVGltZV9QZXJpb2RfPjE5OTkwNTAxPC9fMDNfRGF0ZV9UaW1lX1BlcmlvZF8+Ci0gICAgICAgICAgICAgIDwvRFRQPgotICAgICAgICAgICAgICA8XzIxMTBEPgotICAgICAgICAgICAgICAgIDxFUT4KLSAgICAgICAgICAgICAgICAgIDxfMDFfU2VydmljZV9UeXBlX0NvZGVfPjgxPC9fMDFfU2VydmljZV9UeXBlX0NvZGVfPgotICAgICAgICAgICAgICAgICAgPF8wMl9Db21wb3NpdGVfTWVkaWNhbF9Qcm9jZWR1cmVfSWRlbnRpZmllcl8vPgotICAgICAgICAgICAgICAgICAgPF8wM19Db3ZlcmFnZV9MZXZlbF9Db2RlXz5GQU08L18wM19Db3ZlcmFnZV9MZXZlbF9Db2RlXz4KLSAgICAgICAgICAgICAgICAgIDxfMDRfSW5zdXJhbmNlX1R5cGVfQ29kZV8vPgotICAgICAgICAgICAgICAgIDwvRVE+Ci0gICAgICAgICAgICAgIDwvXzIxMTBEPgotICAgICAgICAgICAgPC9fMjEwMEQ+Ci0gICAgICAgICAgPC9fMjAwMEQ+Ci0gICAgICAgIDwvXzIwMDBDPgotICAgICAgPC9fMjAwMEI+Ci0gICAgPC9fMjAwMEE+Ci0gICAgPFNFPgotICAgICAgPF8wMV9OdW1iZXJfb2ZfSW5jbHVkZWRfU2VnbWVudHNfPjI4PC9fMDFfTnVtYmVyX29mX0luY2x1ZGVkX1NlZ21lbnRzXz4KLSAgICAgIDxfMDJfVHJhbnNhY3Rpb25fU2V0X0NvbnRyb2xfTnVtYmVyXz4xMjM0PC9fMDJfVHJhbnNhY3Rpb25fU2V0X0NvbnRyb2xfTnVtYmVyXz4KLSAgICA8L1NFPgotICA8L18yNzA+Ci0gIDxHRT4KLSAgICA8XzAxX051bWJlcl9vZl9UcmFuc2FjdGlvbl9TZXRzX0luY2x1ZGVkXz4xPC9fMDFfTnVtYmVyX29mX1RyYW5zYWN0aW9uX1NldHNfSW5jbHVkZWRfPgotICAgIDxfMDJfR3JvdXBfQ29udHJvbF9OdW1iZXJfPjE8L18wMl9Hcm91cF9Db250cm9sX051bWJlcl8+Ci0gIDwvR0U+Ci0gIDxJRUE+Ci0gICAgPF8wMV9OdW1iZXJfb2ZfSW5jbHVkZWRfRnVuY3Rpb25hbF9Hcm91cHNfPjE8L18wMV9OdW1iZXJfb2ZfSW5jbHVkZWRfRnVuY3Rpb25hbF9Hcm91cHNfPgotICAgIDxfMDJfSW50ZXJjaGFuZ2VfQ29udHJvbF9OdW1iZXJfPjAwMDAwMDkwNTwvXzAyX0ludGVyY2hhbmdlX0NvbnRyb2xfTnVtYmVyXz4KLSAgPC9JRUE+Ci08L0hJUEFBMjcwPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2FwcHZpZXcvSElQQUEyNzAueHNkIGIvdjIvdGVzdC9jYXNlcy9zY2hlbWEvYXBwdmlldy9ISVBBQTI3MC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxYzJkM2IuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvYXBwdmlldy9ISVBBQTI3MC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotCi08eHNkOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkRNR1R5cGUiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Il8wMV9EYXRlX1RpbWVfUGVyaW9kX0Zvcm1hdF9RdWFsaWZpZXJfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAyX0RhdGVfVGltZV9QZXJpb2RfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAzX0dlbmRlcl9Db2RlXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkRUUFR5cGUiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Il8wMV9EYXRlX1RpbWVfUXVhbGlmaWVyXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Il8wMl9EYXRlX1RpbWVfUGVyaW9kX0Zvcm1hdF9RdWFsaWZpZXJfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAzX0RhdGVfVGltZV9QZXJpb2RfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iRVFUeXBlIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDFfU2VydmljZV9UeXBlX0NvZGVfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAyX0NvbXBvc2l0ZV9NZWRpY2FsX1Byb2NlZHVyZV9JZGVudGlmaWVyXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Il8wM19Db3ZlcmFnZV9MZXZlbF9Db2RlXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Il8wNF9JbnN1cmFuY2VfVHlwZV9Db2RlXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iR0UiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAxX051bWJlcl9vZl9UcmFuc2FjdGlvbl9TZXRzX0luY2x1ZGVkXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDJfR3JvdXBfQ29udHJvbF9OdW1iZXJfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iR1MiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAxX0Z1bmN0aW9uYWxfSWRlbnRpZmllcl9Db2RlXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDJfQXBwbGljYXRpb25fU2VuZGVyc19Db2RlXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDNfQXBwbGljYXRpb25fUmVjZWl2ZXJzX0NvZGVfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0iXzA0X0RhdGVfIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0iXzA1X1RpbWVfIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9Il8wNl9Hcm91cF9Db250cm9sX051bWJlcl8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzA3X1Jlc3BvbnNpYmxlX0FnZW5jeV9Db2RlXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDhfVmVyc2lvbl9fUmVsZWFzZV9fSW5kdXN0cnlfSWRlbnRpZmllcl9Db2RlXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDplbGVtZW50IG5hbWU9IkhJUEFBMjcwIj4KLQkJPHhzZDpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IklTQSIvPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IkdTIi8+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0iXzI3MCIvPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IkdFIi8+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0iSUVBIi8+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkhMVHlwZSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAxX0hpZXJhcmNoaWNhbF9JRF9OdW1iZXJfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAyX0hpZXJhcmNoaWNhbF9QYXJlbnRfSURfTnVtYmVyXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Il8wM19IaWVyYXJjaGljYWxfTGV2ZWxfQ29kZV8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDRfSGllcmFyY2hpY2FsX0NoaWxkX0NvZGVfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJJRUEiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAxX051bWJlcl9vZl9JbmNsdWRlZF9GdW5jdGlvbmFsX0dyb3Vwc18iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAyX0ludGVyY2hhbmdlX0NvbnRyb2xfTnVtYmVyXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJSUlUeXBlIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDFfQ29kZV9MaXN0X1F1YWxpZmllcl9Db2RlXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Il8wMl9JbmR1c3RyeV9Db2RlXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IklOU1R5cGUiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Il8wMV9ZZXNfTm9fQ29uZGl0aW9uX29yX1Jlc3BvbnNlX0NvZGVfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAyX0luZGl2aWR1YWxfUmVsYXRpb25zaGlwX0NvZGVfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAzX01haW50ZW5hbmNlX1R5cGVfQ29kZV8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDRfTWFpbnRlbmFuY2VfUmVhc29uX0NvZGVfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzA1X0JlbmVmaXRfU3RhdHVzX0NvZGVfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzA2X01lZGljYXJlX1N0YXR1c19Db2RlXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Il8wN19Db25zb2xpZGF0ZWRfT21uaWJ1c19CdWRnZXRfUmVjb25jaWxpYXRpb25fQWN0X19DT0JSQV9fUXVhbGlmeWluZ19FdmVudF9Db2RlXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Il8wOF9FbXBsb3ltZW50X1N0YXR1c19Db2RlXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Il8wOV9TdHVkZW50X1N0YXR1c19Db2RlXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Il8xMF9ZZXNfTm9fQ29uZGl0aW9uX29yX1Jlc3BvbnNlX0NvZGVfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzExX0RhdGVfVGltZV9QZXJpb2RfRm9ybWF0X1F1YWxpZmllcl8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMTJfRGF0ZV9UaW1lX1BlcmlvZF8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMTNfQ29uZmlkZW50aWFsaXR5X0NvZGVfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzE0X0NpdHlfTmFtZV8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMTVfU3RhdGVfb3JfUHJvdmluY2VfQ29kZV8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMTZfQ291bnRyeV9Db2RlXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Il8xN19OdW1iZXJfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJJU0EiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAxX0F1dGhvcml6YXRpb25fSW5mb3JtYXRpb25fUXVhbGlmaWVyXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDJfQXV0aG9yaXphdGlvbl9JbmZvcm1hdGlvbl8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAzX1NlY3VyaXR5X0luZm9ybWF0aW9uX1F1YWxpZmllcl8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzA0X1NlY3VyaXR5X0luZm9ybWF0aW9uXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDVfSW50ZXJjaGFuZ2VfSURfUXVhbGlmaWVyXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDZfSW50ZXJjaGFuZ2VfU2VuZGVyX0lEXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDdfSW50ZXJjaGFuZ2VfSURfUXVhbGlmaWVyXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDhfSW50ZXJjaGFuZ2VfUmVjZWl2ZXJfSURfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9Il8wOV9JbnRlcmNoYW5nZV9EYXRlXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMTBfSW50ZXJjaGFuZ2VfVGltZV8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzExX1JlcGV0aXRpb25fU2VwYXJhdG9yXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMTJfSW50ZXJjaGFuZ2VfQ29udHJvbF9WZXJzaW9uX051bWJlcl8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzEzX0ludGVyY2hhbmdlX0NvbnRyb2xfTnVtYmVyXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMTRfQWNrbm93bGVkZ2VtZW50X1JlcXVlc3RlZF8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzE1X1VzYWdlX0luZGljYXRvcl8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzE2X0NvbXBvbmVudF9FbGVtZW50X1NlcGFyYXRvcl8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTjNUeXBlIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDFfQWRkcmVzc19JbmZvcm1hdGlvbl8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDJfQWRkcmVzc19JbmZvcm1hdGlvbl8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJONFR5cGUiPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Il8wMV9DaXR5X05hbWVfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAyX1N0YXRlX29yX1Byb3ZpbmNlX0NvZGVfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAzX1Bvc3RhbF9Db2RlXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Il8wNF9Db3VudHJ5X0NvZGVfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTk0xVHlwZSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAxX0VudGl0eV9JZGVudGlmaWVyX0NvZGVfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAyX0VudGl0eV9UeXBlX1F1YWxpZmllcl8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDNfTmFtZV9MYXN0X29yX09yZ2FuaXphdGlvbl9OYW1lXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Il8wNF9OYW1lX0ZpcnN0XyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Il8wNV9OYW1lX01pZGRsZV8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDZfTmFtZV9QcmVmaXhfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzA3X05hbWVfU3VmZml4XyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Il8wOF9JZGVudGlmaWNhdGlvbl9Db2RlX1F1YWxpZmllcl8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDlfSWRlbnRpZmljYXRpb25fQ29kZV8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJQUlZUeXBlIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDFfUHJvdmlkZXJfQ29kZV8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDJfUmVmZXJlbmNlX0lkZW50aWZpY2F0aW9uX1F1YWxpZmllcl8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9Il8wM19SZWZlcmVuY2VfSWRlbnRpZmljYXRpb25fIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUkVGVHlwZSI+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAxX1JlZmVyZW5jZV9JZGVudGlmaWNhdGlvbl9RdWFsaWZpZXJfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJfMDJfUmVmZXJlbmNlX0lkZW50aWZpY2F0aW9uXyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Il8wM19EZXNjcmlwdGlvbl8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJUUk5UeXBlIj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDFfVHJhY2VfVHlwZV9Db2RlXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iXzAyX1JlZmVyZW5jZV9JZGVudGlmaWNhdGlvbl8iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDNfT3JpZ2luYXRpbmdfQ29tcGFueV9JZGVudGlmaWVyXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9Il8wNF9SZWZlcmVuY2VfSWRlbnRpZmljYXRpb25fIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCTwveHNkOnNlcXVlbmNlPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDJfUmVmZXJlbmNlX0lkZW50aWZpY2F0aW9uXyIgdHlwZT0ieHNkOnN0cmluZyIvPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDJfVHJhbnNhY3Rpb25fU2V0X0NvbnRyb2xfTnVtYmVyXyIgdHlwZT0ieHNkOnN0cmluZyIvPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDNfUmVmZXJlbmNlX0lkZW50aWZpY2F0aW9uXyIgdHlwZT0ieHNkOnN0cmluZyIvPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDRfRGF0ZV8iIHR5cGU9InhzZDpzdHJpbmciLz4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iXzA1X1RpbWVfIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0JPHhzZDplbGVtZW50IG5hbWU9Il8yNzAiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iU1QiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAxX1RyYW5zYWN0aW9uX1NldF9JZGVudGlmaWVyX0NvZGVfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJCQkJPHhzZDplbGVtZW50IHJlZj0iXzAyX1RyYW5zYWN0aW9uX1NldF9Db250cm9sX051bWJlcl8iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCQk8L3hzZDplbGVtZW50PgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJCSFQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAxX0hpZXJhcmNoaWNhbF9TdHJ1Y3R1cmVfQ29kZV8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAyX1RyYW5zYWN0aW9uX1NldF9QdXJwb3NlX0NvZGVfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJCQkJPHhzZDplbGVtZW50IHJlZj0iXzAzX1JlZmVyZW5jZV9JZGVudGlmaWNhdGlvbl8iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJfMDRfRGF0ZV8iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJfMDVfVGltZV8iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzA2X1RyYW5zYWN0aW9uX1R5cGVfQ29kZV8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCQk8L3hzZDplbGVtZW50PgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMjAwMEEiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iSEwiIHR5cGU9IkhMVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMjEwMEEiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iTk0xIiB0eXBlPSJOTTFUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQkJCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzIwMDBCIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQkJCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IkhMIiB0eXBlPSJITFR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzIxMDBCIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQkJCQkJCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5NMSIgdHlwZT0iTk0xVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCQkJCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJSRUYiIHR5cGU9IlJFRlR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iTjMiIHR5cGU9Ik4zVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCQkJCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJONCIgdHlwZT0iTjRUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJCQkJCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IlBFUiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCQkJCQkJCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDFfQ29udGFjdF9GdW5jdGlvbl9Db2RlXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCQkJCQkJCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDJfTmFtZV8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCQkJCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAzX0NvbW11bmljYXRpb25fTnVtYmVyX1F1YWxpZmllcl8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCQkJCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzA0X0NvbW11bmljYXRpb25fTnVtYmVyXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCQkJCQkJCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDVfQ29tbXVuaWNhdGlvbl9OdW1iZXJfUXVhbGlmaWVyXyIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCQkJCQkJCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMDZfQ29tbXVuaWNhdGlvbl9OdW1iZXJfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJCQkJCQkJCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Il8wN19Db21tdW5pY2F0aW9uX051bWJlcl9RdWFsaWZpZXJfIiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJCQkJCQkJCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Il8wOF9Db21tdW5pY2F0aW9uX051bWJlcl8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCQkJCQkJCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCQk8L3hzZDplbGVtZW50PgotCQkJCQkJCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJQUlYiIHR5cGU9IlBSVlR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCQkJCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCQkJCQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQk8L3hzZDplbGVtZW50PgotCQkJCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMjAwMEMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJCQkJCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iSEwiIHR5cGU9IkhMVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCQkJCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJUUk4iIHR5cGU9IlRSTlR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzIxMDBDIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQkJCQkJCQkJCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Ik5NMSIgdHlwZT0iTk0xVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCQkJCQkJCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJSRUYiIHR5cGU9IlJFRlR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCQkJCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iTjMiIHR5cGU9Ik4zVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCQkJCQkJCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJONCIgdHlwZT0iTjRUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJCQkJCQkJCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IlBSViIgdHlwZT0iUFJWVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCQkJCQkJCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJETUciIHR5cGU9IkRNR1R5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCQkJCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iSU5TIiB0eXBlPSJJTlNUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJCQkJCQkJCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IkRUUCIgdHlwZT0iRFRQVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCQkJCQkJCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJfMjExMEMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJCQkJCQkJCQkJCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJCQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iRVEiIHR5cGU9IkVRVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCQkJCQkJCQkJCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJBTVQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJCQkJCQkJCQkJCQkJCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAxX0Ftb3VudF9RdWFsaWZpZXJfQ29kZV8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAyX01vbmV0YXJ5X0Ftb3VudF8iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCQkJCQkJCQk8L3hzZDplbGVtZW50PgotCQkJCQkJCQkJCQkJCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJJSUkiIHR5cGU9IklJSVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCQkJCQkJCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iUkVGIiB0eXBlPSJSRUZUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IkRUUCIgdHlwZT0iRFRQVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCQkJCQkJCQkJCQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQkJCQkJCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzIwMDBEIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQkJCQkJCQkJCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IkhMIiB0eXBlPSJITFR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCQkJCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iVFJOIiB0eXBlPSJUUk5UeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJCQkJCQkJCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Il8yMTAwRCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCQkJCQkJCQkJCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJOTTEiIHR5cGU9Ik5NMVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCQkJCQkJCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iUkVGIiB0eXBlPSJSRUZUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Ik4zIiB0eXBlPSJOM1R5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCQkJCQkJCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iTjQiIHR5cGU9Ik40VHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCQkJCQkJCQkJCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJQUlYiIHR5cGU9IlBSVlR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCQkJCQkJCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iRE1HIiB0eXBlPSJETUdUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IklOUyIgdHlwZT0iSU5TVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCQkJCQkJCQkJCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJEVFAiIHR5cGU9IkRUUFR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCQkJCQkJCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzIxMTBEIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IkVRIiB0eXBlPSJFUVR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iSUlJIiB0eXBlPSJJSUlUeXBlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IlJFRiIgdHlwZT0iUkVGVHlwZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCQkJCQkJCQkJCQkJCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJEVFAiIHR5cGU9IkRUUFR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCQkJCQkJCQkJCQkJCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCQkJCQkJCQkJCQkJCQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCQkJCQkJCQk8L3hzZDplbGVtZW50PgotCQkJCQkJCQkJCQkJCQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJCQkJCQkJCQkJCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQkJCQkJCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQkJCQkJCQkJCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJCQkJCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCQkJCQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQk8L3hzZDplbGVtZW50PgotCQkJCQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iU0UiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iXzAxX051bWJlcl9vZl9JbmNsdWRlZF9TZWdtZW50c18iIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJfMDJfVHJhbnNhY3Rpb25fU2V0X0NvbnRyb2xfTnVtYmVyXyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2FwcHZpZXcvSGVhZGVycy54bWwgYi92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9hcHB2aWV3L0hlYWRlcnMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzE3ODc4Li4wMDAwMDAwCi0tLSBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2FwcHZpZXcvSGVhZGVycy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTx3b3JrYm9vaz4KLSAgICA8U2hlZXQxPgotICAgICAgICA8cm93PgotICAgICAgICAgICAgPGNvbDE+RklSU1QgTkFNRTwvY29sMT4KLSAgICAgICAgICAgIDxjb2wyPkxBU1QgTkFNRTwvY29sMj4KLSAgICAgICAgICAgIDxjb2wzPlRJVExFPC9jb2wzPgotICAgICAgICAgICAgPGNvbDQ+QUREUkVTUzwvY29sND4KLSAgICAgICAgICAgIDxjb2w1PkNJVFk8L2NvbDU+Ci0gICAgICAgICAgICA8Y29sNj5TVEFURTwvY29sNj4KLSAgICAgICAgICAgIDxjb2w3PkNPVU5UUlk8L2NvbDc+Ci0gICAgICAgIDwvcm93PgotICAgICAgICA8cm93PgotICAgICAgICAgICAgPGNvbDE+UGF1bDwvY29sMT4KLSAgICAgICAgICAgIDxjb2wyPkZlYXJvbjwvY29sMj4KLSAgICAgICAgICAgIDxjb2wzPk1yPC9jb2wzPgotICAgICAgICAgICAgPGNvbDQ+MiBQZW5uIFBsYXphPC9jb2w0PgotICAgICAgICAgICAgPGNvbDU+TmV3IFlvcms8L2NvbDU+Ci0gICAgICAgICAgICA8Y29sNj5OZXcgWW9yazwvY29sNj4KLSAgICAgICAgICAgIDxjb2w3PlVTQTwvY29sNz4KLSAgICAgICAgPC9yb3c+Ci0gICAgICAgIDxyb3c+Ci0gICAgICAgICAgICA8Y29sMT5KZWZmPC9jb2wxPgotICAgICAgICAgICAgPGNvbDI+UGFvbGV0dGk8L2NvbDI+Ci0gICAgICAgICAgICA8Y29sMz5TaXI8L2NvbDM+Ci0gICAgICAgICAgICA8Y29sND4yIFBlbm4gUGxhemE8L2NvbDQ+Ci0gICAgICAgICAgICA8Y29sNT5OZXcgWW9yazwvY29sNT4KLSAgICAgICAgICAgIDxjb2w2Pk5ldyBZb3JrPC9jb2w2PgotICAgICAgICAgICAgPGNvbDc+VVNBPC9jb2w3PgotICAgICAgICA8L3Jvdz4KLSAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxjb2wxPkpvbmF0aG9uPC9jb2wxPgotICAgICAgICAgICAgPGNvbDI+UGxhdHQ8L2NvbDI+Ci0gICAgICAgICAgICA8Y29sMz5Mb3JkPC9jb2wzPgotICAgICAgICAgICAgPGNvbDQ+V2VtYmxleSBQb2ludCwgSGFycm93IFJvYWQ8L2NvbDQ+Ci0gICAgICAgICAgICA8Y29sNT5Mb25kb248L2NvbDU+Ci0gICAgICAgICAgICA8Y29sNj5NSUREWDwvY29sNj4KLSAgICAgICAgICAgIDxjb2w3PlVLPC9jb2w3PgotICAgICAgICA8L3Jvdz4KLSAgICAgICAgPHJvdz4KLSAgICAgICAgICAgIDxjb2wxPkVpbGVlbjwvY29sMT4KLSAgICAgICAgICAgIDxjb2wyPkFuZGVyc29uPC9jb2wyPgotICAgICAgICAgICAgPGNvbDM+TXJzPC9jb2wzPgotICAgICAgICAgICAgPGNvbDQ+QmVsbGUgUGxhaW48L2NvbDQ+Ci0gICAgICAgICAgICA8Y29sNT5NYXlwZW48L2NvbDU+Ci0gICAgICAgICAgICA8Y29sNj5DbGFyZW5kb248L2NvbDY+Ci0gICAgICAgICAgICA8Y29sNz5KYW1haWNhPC9jb2w3PgotICAgICAgICA8L3Jvdz4KLSAgICA8L1NoZWV0MT4KLTwvd29ya2Jvb2s+Ci0KZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2FwcHZpZXcvSGVhZGVycy54c2QgYi92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9hcHB2aWV3L0hlYWRlcnMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWI0ZGRlLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2FwcHZpZXcvSGVhZGVycy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLVczQyBTY2hlbWEgZ2VuZXJhdGVkIGJ5IFhNTCBTcHkgdjQuMyBVIChodHRwOi8vd3d3LnhtbHNweS5jb20pLS0+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0JPHhzZDplbGVtZW50IG5hbWU9IlNoZWV0MSI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9InJvdyIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJjb2wxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0JPHhzZDplbGVtZW50IG5hbWU9ImNvbDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iY29sMyI+Ci0JCTx4c2Q6c2ltcGxlVHlwZT4KLQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9yZCIvPgotCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1yIi8+Ci0JCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTXJzIi8+Ci0JCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2lyIi8+Ci0JCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVElUTEUiLz4KLQkJCTwveHNkOnJlc3RyaWN0aW9uPgotCQk8L3hzZDpzaW1wbGVUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDplbGVtZW50IG5hbWU9ImNvbDQiIHR5cGU9InhzZDpzdHJpbmciLz4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iY29sNSIgdHlwZT0ieHNkOnN0cmluZyIvPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJjb2w2IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0JPHhzZDplbGVtZW50IG5hbWU9ImNvbDciPgotCQk8eHNkOnNpbXBsZVR5cGU+Ci0JCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNPVU5UUlkiLz4KLQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKYW1haWNhIi8+Ci0JCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVUsiLz4KLQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVU0EiLz4KLQkJCTwveHNkOnJlc3RyaWN0aW9uPgotCQk8L3hzZDpzaW1wbGVUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDplbGVtZW50IG5hbWU9InJvdyI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9ImNvbDEiLz4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJjb2wyIi8+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0iY29sMyIvPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9ImNvbDQiLz4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJjb2w1Ii8+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0iY29sNiIvPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9ImNvbDciLz4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJ3b3JrYm9vayI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IlNoZWV0MSIvPgotCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+CmRpZmYgLS1naXQgYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9hcHB2aWV3L1JGQ19DVVNUT01FUl9HRVQueG1sIGIvdjIvdGVzdC9jYXNlcy9zY2hlbWEvYXBwdmlldy9SRkNfQ1VTVE9NRVJfR0VULnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBlY2M4Mi4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9hcHB2aWV3L1JGQ19DVVNUT01FUl9HRVQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxkb2M6UkZDX0NVU1RPTUVSX0dFVCB4bWxuczpkb2M9InVybjpzYXAtY29tOmRvY3VtZW50OnNhcDpidXNpbmVzczpyZmMiPgotPEtVTk5SPio8L0tVTk5SPgotPE5BTUUxPkEqPC9OQU1FMT4KLTxDVVNUT01FUl9UPgotPGl0ZW0+Ci08S1VOTlI+PC9LVU5OUj4KLTxBTlJFRD48L0FOUkVEPgotPE5BTUUxPjwvTkFNRTE+Ci08UEZBQ0g+PC9QRkFDSD4KLTxTVFJBUz48L1NUUkFTPgotPFBTVExaPjwvUFNUTFo+Ci08T1JUMDE+PC9PUlQwMT4KLTxURUxGMT48L1RFTEYxPgotPFRFTEZYPjwvVEVMRlg+Ci08L2l0ZW0+Ci08L0NVU1RPTUVSX1Q+Ci08L2RvYzpSRkNfQ1VTVE9NRVJfR0VUPgpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvYXBwdmlldy9SRkNfQ1VTVE9NRVJfR0VULnhzZCBiL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2FwcHZpZXcvUkZDX0NVU1RPTUVSX0dFVC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjYWNjMmIuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvYXBwdmlldy9SRkNfQ1VTVE9NRVJfR0VULnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6ZG9jPSJ1cm46c2FwLWNvbTpkb2N1bWVudAotOnNhcDpidXNpbmVzczpyZmMiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9InVybjpzYXAtY29tOmRvY3VtZW50OnNhcDoKLWJ1c2luZXNzOnJmYyI+Ci0gIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQlJGQ0tOQTEiPgotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iS1VOTlIiPgotICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCIvPgotICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJBTlJFRCI+Ci0gICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgPHhzZDptYXhMZW5ndGggdmFsdWU9IjE1Ii8+Ci0gICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDplbGVtZW50PgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5BTUUxIj4KLSAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iMzUiLz4KLSAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUEZBQ0giPgotICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCIvPgotICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTVFJBUyI+Ci0gICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgPHhzZDptYXhMZW5ndGggdmFsdWU9IjM1Ii8+Ci0gICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDplbGVtZW50PgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlBTVExaIj4KLSAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iMTAiLz4KLSAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iT1JUMDEiPgotICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIzNSIvPgotICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJURUxGMSI+Ci0gICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgPHhzZDptYXhMZW5ndGggdmFsdWU9IjE2Ii8+Ci0gICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzZDplbGVtZW50PgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlRFTEZYIj4KLSAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iMzEiLz4KLSAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0gIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gIDx4c2Q6ZWxlbWVudCBuYW1lPSJSRkNfQ1VTVE9NRVJfR0VUIj4KLSAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgPHhzZDphbGw+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJLVU5OUiIgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iMTAiLz4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOQU1FMSIgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICA8eHNkOm1heExlbmd0aCB2YWx1ZT0iMzUiLz4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDVVNUT01FUl9UIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaXRlbSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHR5cGU9ImRvYzpCUkZDS05BMSIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgIDwveHNkOmFsbD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgPC94c2Q6ZWxlbWVudD4KLQotPC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2FwcHZpZXcvZXZlbnRfREVCTUFTMDEueG1sIGIvdjIvdGVzdC9jYXNlcy9zY2hlbWEvYXBwdmlldy9ldmVudF9ERUJNQVMwMS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5MjRmOWYuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvYXBwdmlldy9ldmVudF9ERUJNQVMwMS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+PERFQk1BUzAxPjxJRE9DIEJFR0lOPSIxIj48RURJX0RDNDAgU0VHTUVOVD0iMSI+PFRBQk5BTT5FRElfREM0MDwvVEFCTkFNPjxNQU5EVD44MDA8L01BTkRUPjxET0NOVU0+MDAwMDAwMDAwMDIzMjkwNDwvRE9DTlVNPjxET0NSRUw+NDBCPC9ET0NSRUw+PFNUQVRVUz4zMDwvU1RBVFVTPjxESVJFQ1Q+MTwvRElSRUNUPjxPVVRNT0Q+MjwvT1VUTU9EPjxFWFBSU1MvPjxURVNULz48SURPQ1RZUD5ERUJNQVMwMTwvSURPQ1RZUD48Q0lNVFlQLz48TUVTVFlQPkRFQk1BUzwvTUVTVFlQPjxNRVNDT0QvPjxNRVNGQ1QvPjxTVEQvPjxTVERWUlMvPjxTVERNRVMvPjxTTkRQT1I+U0FQSTRCPC9TTkRQT1I+PFNORFBSVD5MUzwvU05EUFJUPjxTTkRQRkMvPjxTTkRQUk4+STRCX0NMSTgwMDwvU05EUFJOPjxTTkRTQUQvPjxTTkRMQUQvPjxSQ1ZQT1I+QTAwMDAwMDAzMTwvUkNWUE9SPjxSQ1ZQUlQ+TFM8L1JDVlBSVD48UkNWUEZDLz48UkNWUFJOPk5PTl9KWEE8L1JDVlBSTj48UkNWU0FELz48UkNWTEFELz48Q1JFREFUPjIwMDIwNzIyPC9DUkVEQVQ+PENSRVRJTT4xODI5Mzk8L0NSRVRJTT48UkVGSU5ULz48UkVGR1JQLz48UkVGTUVTLz48QVJDS0VZLz48U0VSSUFMPjIwMDIwNzIyMTgyOTM5PC9TRVJJQUw+Ci0gICAgICA8L0VESV9EQzQwPjxFMUtOQTFNIFNFR01FTlQ9IjEiPjxNU0dGTj4wMDU8L01TR0ZOPjxLVU5OUj4wMDAwMDAwMTAwPC9LVU5OUj48QU5SRUQvPjxBVUZTRC8+PEJBSE5FLz48QkFITlM+RPxzc2VsZG9yZiBIQkY8L0JBSE5TPjxCQkJOUj4wMDAwMDAwPC9CQkJOUj48QkJTTlI+MDAwMDA8L0JCU05SPjxCRUdSVS8+PEJSU0NILz48QlVCS1o+MDwvQlVCS1o+PERBVExULz48RkFLU0QvPjxGSVNLTi8+PEtOUlpBLz48S09OWlMvPjxLVE9LRD4wMDAxPC9LVE9LRD48S1VLTEEvPjxMQU5EMT5ERTwvTEFORDE+PExJRk5SLz48TElGU0QvPjxMT0NDTy8+PExPRVZNLz48TkFNRTE+SUJJIFF1YWxpdHkgQXNzdXJhbmNlPC9OQU1FMT48TkFNRTIvPjxOQU1FMy8+PE5BTUU0Lz48TklFTFMvPjxPUlQwMT5OZXcgWW9yazwvT1JUMDE+PE9SVDAyLz48UEZBQ0gvPjxQU1RMMi8+PFBTVExaPjEwMTIxPC9QU1RMWj48UkVHSU8+MDU8L1JFR0lPPjxDT1VOQy8+PENJVFlDLz48UlBNS1IvPjxTT1JUTD5BTTwvU09SVEw+PFNQRVJSLz48U1BSQVM+RDwvU1BSQVM+PFNUQ0QxLz48U1RDRDIvPjxTVEtaQS8+PFNUS1pVLz48U1RSQVM+MiBQZW5uc3lsdmFuaWEgUGxhemE8L1NUUkFTPjxURUxCWC8+PFRFTEYxPjIxMi03MzYtNDQzMzwvVEVMRjE+PFRFTEYyLz48VEVMRlg+MjEyLTczNi00NDM0PC9URUxGWD48VEVMVFgvPjxURUxYMS8+PExaT05FPkQwMDAwNDAwMDA8L0xaT05FPjxYWkVNUC8+PFZCVU5ELz48U1RDRUc+REUtMTIzNDU2Nzk8L1NUQ0VHPjxHRk9STS8+PEJSQU4xLz48QlJBTjIvPjxCUkFOMy8+PEJSQU40Lz48QlJBTjUvPjxVTUpBSD4wMDAwPC9VTUpBSD48VVdBRVIvPjxKTVpBSD4wMDAwMDA8L0pNWkFIPjxKTUpBSD4wMDAwPC9KTUpBSD48S0FUUjEvPjxLQVRSMi8+PEtBVFIzLz48S0FUUjQvPjxLQVRSNS8+PEtBVFI2Lz48S0FUUjcvPjxLQVRSOC8+PEtBVFI5Lz48S0FUUjEwLz48U1RLWk4vPjxVTVNBMT4wPC9VTVNBMT48VFhKQ0QvPjxQRVJJVi8+PEtUT0NELz48UEZPUlQvPjxEVEFNUy8+PERUQVdTLz48SFpVT1I+MDA8L0haVU9SPjxDSVZWRT5YPC9DSVZWRT48TUlMVkUvPjxTUFJBU19JU08+REU8L1NQUkFTX0lTTz48RklUWVAvPjxTVENEVC8+PFNUQ0QzLz48U1RDRDQvPjxYSUNNUy8+PFhYSVBJLz48WFNVQlQvPjxDRk9QQy8+PFRYTFcxLz48VFhMVzIvPjxDQ0MwMS8+PENDQzAyLz48Q0NDMDMvPjxDQ0MwNC8+PENBU1NELz48S0RLRzEvPjxLREtHMi8+PEtES0czLz48S0RLRzQvPjxLREtHNS8+PEUxS05CMU0gU0VHTUVOVD0iMSI+PE1TR0ZOPjAwNTwvTVNHRk4+PEJVS1JTPkdMMTAwMDwvQlVLUlM+PFNQRVJSLz48TE9FVk0vPjxaVUFXQT4wMDI8L1pVQVdBPjxCVVNBQi8+PEFLT05UPjAwMDAxNDAwMDA8L0FLT05UPjxCRUdSVS8+PEtOUlpFLz48S05SWkIvPjxaQU1JTS8+PFpBTUlWLz48WkFNSVIvPjxaQU1JQi8+PFpBTUlPLz48WldFTFMvPjxYVkVSUi8+PFpBSExTLz48WlRFUk0+WkIwMTwvWlRFUk0+PFdBS09OLz48VlpTS1ovPjxaSU5EVD4wMDAwMDAwMDwvWklORFQ+PFpJTlJUPjAwPC9aSU5SVD48RUlLVE8+MDAwMDAwMDEwMDwvRUlLVE8+PFpTQUJFLz48S1ZFUk0vPjxGREdSVj5FMjwvRkRHUlY+PFZSQktaLz48VkxJQkI+MDwvVkxJQkI+PFZSU1pMPjA8L1ZSU1pMPjxWUlNQUj4wPC9WUlNQUj48VlJTTlIvPjxWRVJEVD4wMDAwMDAwMDwvVkVSRFQ+PFBFUktaLz48WERFWlYvPjxYQVVTWi8+PFdFQlRSPjA8L1dFQlRSPjxSRU1JVC8+PERBVExaPjAwMDAwMDAwPC9EQVRMWj48WFpWRVI+WDwvWFpWRVI+PFRPR1JVLz48S1VMVEc+MDwvS1VMVEc+PEhCS0lELz48WFBPUkUvPjxCTE5LWi8+PEFMVEtOLz48WkdSVVAvPjxVUkxJRC8+PE1HUlVQLz48TE9DS0IvPjxVWkFXRS8+PEVLVkJELz48U1JFR0wvPjxYRURJUC8+PEZSR1JQLz48VlJTREcvPjxUTEZYUy8+PFBFUk5SPjAwMDAwMDAwPC9QRVJOUj48SU5UQUQvPjxHVVpURS8+PEdSSUNELz48R1JJRFQvPjxFMUtOQjVNIFNFR01FTlQ9IjEiPjxNU0dGTj4wMDU8L01TR0ZOPjxNQUJFUi8+PE1BSE5BPjAwMDE8L01BSE5BPjxNQU5TUC8+PE1BREFUPjAwMDAwMDAwPC9NQURBVD48TUFITlM+MDwvTUFITlM+PEtOUk1BLz48R01WRFQ+MDAwMDAwMDA8L0dNVkRUPjxCVVNBQi8+PC9FMUtOQjVNPjwvRTFLTkIxTT48L0UxS05BMU0+PC9JRE9DPjwvREVCTUFTMDE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvYXBwdmlldy9ldmVudF9ERUJNQVMwMS54c2QgYi92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9hcHB2aWV3L2V2ZW50X0RFQk1BUzAxLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU1ODlkNS4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9hcHB2aWV3L2V2ZW50X0RFQk1BUzAxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+PHhzZDplbGVtZW50IG5hbWU9IkRFQk1BUzAxIj48eHNkOmNvbXBsZXhUeXBlPjx4c2Q6c2VxdWVuY2U+PHhzZDplbGVtZW50IG5hbWU9IklET0MiPjx4c2Q6Y29tcGxleFR5cGU+PHhzZDpzZXF1ZW5jZT48eHNkOmVsZW1lbnQgbmFtZT0iRURJX0RDNDAiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIj48eHNkOmNvbXBsZXhUeXBlPjx4c2Q6c2VxdWVuY2U+PHhzZDplbGVtZW50IG5hbWU9IlRBQk5BTSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMTAiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9Ik1BTkRUIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIzIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJET0NOVU0iIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjE2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJET0NSRUwiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjQiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlNUQVRVUyIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iRElSRUNUIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJPVVRNT0QiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkVYUFJTUyIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iVEVTVCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iSURPQ1RZUCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMzAiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkNJTVRZUCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMzAiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9Ik1FU1RZUCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMzAiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9Ik1FU0NPRCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMyIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iTUVTRkNUIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIzIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJTVEQiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlNURFZSUyIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iU1RETUVTIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJTTkRQT1IiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEwIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJTTkRQUlQiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjIiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlNORFBGQyIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iU05EUFJOIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iU05EU0FEIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iU05ETEFEIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI3MCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iUkNWUE9SIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iUkNWUFJUIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJSQ1ZQRkMiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjIiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlJDVlBSTiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMTAiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlJDVlNBRCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlJDVkxBRCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNzAiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkNSRURBVCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6ZGF0ZSIvPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iQ1JFVElNIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDp0aW1lIi8+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJSRUZJTlQiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjE0Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJSRUZHUlAiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjE0Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJSRUZNRVMiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjE0Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJBUkNLRVkiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjcwIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJTRVJJQUwiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjIwIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50PjwveHNkOnNlcXVlbmNlPjx4c2Q6YXR0cmlidXRlIG5hbWU9IlNFR01FTlQiIHVzZT0icmVxdWlyZWQiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmF0dHJpYnV0ZT48L3hzZDpjb21wbGV4VHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJFMUtOQTFNIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSI+PHhzZDpjb21wbGV4VHlwZT48eHNkOnNlcXVlbmNlPjx4c2Q6ZWxlbWVudCBuYW1lPSJNU0dGTiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMyIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iS1VOTlIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEwIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJBTlJFRCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMTUiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkFVRlNEIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJCQUhORSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMjUiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkJBSE5TIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyNSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iQkJCTlIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjciLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkJCU05SIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJCRUdSVSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iQlJTQ0giIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjQiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkJVQktaIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJEQVRMVCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMTQiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkZBS1NEIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJGSVNLTiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMTAiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IktOUlpBIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iS09OWlMiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEwIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJLVE9LRCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iS1VLTEEiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjIiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkxBTkQxIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIzIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJMSUZOUiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMTAiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkxJRlNEIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJMT0NDTyIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMTAiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkxPRVZNIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJOQU1FMSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMzUiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9Ik5BTUUyIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIzNSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iTkFNRTMiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjM1Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJOQU1FNCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMzUiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9Ik5JRUxTIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJPUlQwMSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMzUiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9Ik9SVDAyIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIzNSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iUEZBQ0giIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEwIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJQU1RMMiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMTAiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlBTVExaIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iUkVHSU8iIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjMiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkNPVU5DIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIzIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJDSVRZQyIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iUlBNS1IiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjUiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlNPUlRMIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iU1BFUlIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlNQUkFTIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJTVENEMSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMTYiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlNUQ0QyIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iU1RLWkEiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlNUS1pVIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJTVFJBUyIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMzUiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlRFTEJYIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxNSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iVEVMRjEiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjE2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJURUxGMiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMTYiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlRFTEZYIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIzMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iVEVMVFgiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjMwIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJURUxYMSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMzAiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkxaT05FIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iWFpFTVAiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlZCVU5EIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJTVENFRyIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMjAiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkdGT1JNIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJCUkFOMSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMTAiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkJSQU4yIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iQlJBTjMiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEwIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJCUkFONCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMTAiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkJSQU41IiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iVU1KQUgiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjQiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlVXQUVSIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJKTVpBSCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iSk1KQUgiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjQiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IktBVFIxIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJLQVRSMiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iS0FUUjMiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjIiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IktBVFI0IiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJLQVRSNSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iS0FUUjYiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjMiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IktBVFI3IiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIzIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJLQVRSOCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMyIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iS0FUUjkiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjMiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IktBVFIxMCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMyIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iU1RLWk4iIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlVNU0ExIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxNiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iVFhKQ0QiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjE1Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJQRVJJViIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iS1RPQ0QiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjQiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlBGT1JUIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIzNSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iRFRBTVMiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkRUQVdTIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJIWlVPUiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iQ0lWVkUiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9Ik1JTFZFIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJTUFJBU19JU08iIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjIiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkZJVFlQIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJTVENEVCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iU1RDRDMiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjE4Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJTVENENCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMTgiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlhJQ01TIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJYWElQSSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iWFNVQlQiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkNGT1BDIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJUWExXMSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMyIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iVFhMVzIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjMiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkNDQzAxIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJDQ0MwMiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iQ0NDMDMiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkNDQzA0IiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJDQVNTRCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iS0RLRzEiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjIiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IktES0cyIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJLREtHMyIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iS0RLRzQiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjIiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IktES0c1IiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJFMUtOVlZNIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iOTk5OSI+PHhzZDpjb21wbGV4VHlwZT48eHNkOnNlcXVlbmNlPjx4c2Q6ZWxlbWVudCBuYW1lPSJNU0dGTiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMyIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iVktPUkciIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjQiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlZUV0VHIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJTUEFSVCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iQkVHUlUiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjQiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkxPRVZNIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJWRVJTRyIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iQVVGU0QiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjIiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IktBTEtTIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJLREdSUCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iQlpJUksiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjYiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IktPTkRBIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJQTFRZUCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iQVdBSFIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjMiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IklOQ08xIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIzIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJJTkNPMiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMjgiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkxJRlNEIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJBVVRMRiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iQU5UTEYiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjIiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IktaVExGIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJLWkFaVSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iQ0hTUEwiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkxQUklPIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJFSUtUTyIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMTIiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlZTQkVEIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJGQUtTRCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iTVJOS1oiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlBFUkZLIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJQRVJSTCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iV0FFUlMiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjUiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IktUR1JEIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJaVEVSTSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iVldFUksiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjQiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlZLR1JQIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIzIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJWS0JVUiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iVlNPUlQiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEwIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJLVkdSMSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMyIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iS1ZHUjIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjMiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IktWR1IzIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIzIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJLVkdSNCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMyIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iS1ZHUjUiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjMiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkJPS1JFIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJLVVJTVCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iUFJGUkUiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IktMQUJDIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJLQUJTUyIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iS0tCRVIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjQiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkNBU1NEIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJSRE9GRiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iRTFLTlZQTSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9Ijk5OTkiPjx4c2Q6Y29tcGxleFR5cGU+PHhzZDpzZXF1ZW5jZT48eHNkOmVsZW1lbnQgbmFtZT0iTVNHRk4iIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjMiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlBBUlZXIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJLVU5OMiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMTAiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkRFRlBBIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJLTlJFRiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMzAiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PC94c2Q6c2VxdWVuY2U+PHhzZDphdHRyaWJ1dGUgbmFtZT0iU0VHTUVOVCIgdXNlPSJyZXF1aXJlZCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6YXR0cmlidXRlPjwveHNkOmNvbXBsZXhUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkUxS05WRE0iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSI5OTk5Ij48eHNkOmNvbXBsZXhUeXBlPjx4c2Q6c2VxdWVuY2U+PHhzZDplbGVtZW50IG5hbWU9Ik1TR0ZOIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIzIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJET0NUUCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iU1BSQVMiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkRPQU5aIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIzIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJET1ZFUiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iTkFDSEEiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlNQUkFTX0lTTyIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48L3hzZDpzZXF1ZW5jZT48eHNkOmF0dHJpYnV0ZSBuYW1lPSJTRUdNRU5UIiB1c2U9InJlcXVpcmVkIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDphdHRyaWJ1dGU+PC94c2Q6Y29tcGxleFR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iRTFLTlZJTSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9Ijk5OTkiPjx4c2Q6Y29tcGxleFR5cGU+PHhzZDpzZXF1ZW5jZT48eHNkOmVsZW1lbnQgbmFtZT0iTVNHRk4iIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjMiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkFMQU5EIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIzIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJUQVRZUCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iVEFYS0QiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PC94c2Q6c2VxdWVuY2U+PHhzZDphdHRyaWJ1dGUgbmFtZT0iU0VHTUVOVCIgdXNlPSJyZXF1aXJlZCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6YXR0cmlidXRlPjwveHNkOmNvbXBsZXhUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkUxS05WTE0iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSI5OTk5Ij48eHNkOmNvbXBsZXhUeXBlPjx4c2Q6c2VxdWVuY2U+PHhzZDplbGVtZW50IG5hbWU9Ik1TR0ZOIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIzIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJBTEFORCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMyIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iVEFUWVAiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjQiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkxJQ05SIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxNSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iREFUQUIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjgiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkRBVEJJIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI4Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJCRUxJQyIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48L3hzZDpzZXF1ZW5jZT48eHNkOmF0dHJpYnV0ZSBuYW1lPSJTRUdNRU5UIiB1c2U9InJlcXVpcmVkIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDphdHRyaWJ1dGU+PC94c2Q6Y29tcGxleFR5cGU+PC94c2Q6ZWxlbWVudD48L3hzZDpzZXF1ZW5jZT48eHNkOmF0dHJpYnV0ZSBuYW1lPSJTRUdNRU5UIiB1c2U9InJlcXVpcmVkIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDphdHRyaWJ1dGU+PC94c2Q6Y29tcGxleFR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iRTFLTkIxTSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9Ijk5OTkiPjx4c2Q6Y29tcGxleFR5cGU+PHhzZDpzZXF1ZW5jZT48eHNkOmVsZW1lbnQgbmFtZT0iTVNHRk4iIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjMiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkJVS1JTIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJTUEVSUiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iTE9FVk0iIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlpVQVdBIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIzIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJCVVNBQiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iQUtPTlQiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEwIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJCRUdSVSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iS05SWkUiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEwIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJLTlJaQiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMTAiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlpBTUlNIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJaQU1JViIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iWkFNSVIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlpBTUlCIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJaQU1JTyIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iWldFTFMiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEwIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJYVkVSUiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iWkFITFMiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlpURVJNIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI0Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJXQUtPTiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iVlpTS1oiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjIiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlpJTkRUIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI4Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJaSU5SVCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iRUlLVE8iIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJaU0FCRSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMTUiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IktWRVJNIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIzMCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iRkRHUlYiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEwIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJWUkJLWiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iVkxJQkIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjE0Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJWUlNaTCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iVlJTUFIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjQiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlZSU05SIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iVkVSRFQiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjgiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlBFUktaIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJYREVaViIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iWEFVU1oiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IldFQlRSIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxNCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iUkVNSVQiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEwIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJEQVRMWiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iOCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iWFpWRVIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlRPR1JVIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI0Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJLVUxURyIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iSEJLSUQiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjUiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlhQT1JFIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJCTE5LWiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iQUxUS04iIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEwIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJaR1JVUCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iVVJMSUQiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjQiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9Ik1HUlVQIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJMT0NLQiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNyIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iVVpBV0UiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjIiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkVLVkJEIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iU1JFR0wiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjMiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlhFRElQIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJGUkdSUCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iVlJTREciIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjMiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlRMRlhTIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIzMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iUEVSTlIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjgiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IklOVEFEIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMzAiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkdVWlRFIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI0Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJHUklDRCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iR1JJRFQiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjIiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkUxS05CNU0iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSI5OTk5Ij48eHNkOmNvbXBsZXhUeXBlPjx4c2Q6c2VxdWVuY2U+PHhzZDplbGVtZW50IG5hbWU9Ik1TR0ZOIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIzIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJNQUJFUiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iTUFITkEiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjQiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9Ik1BTlNQIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJNQURBVCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iOCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iTUFITlMiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IktOUk1BIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iR01WRFQiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjgiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkJVU0FCIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50PjwveHNkOnNlcXVlbmNlPjx4c2Q6YXR0cmlidXRlIG5hbWU9IlNFR01FTlQiIHVzZT0icmVxdWlyZWQiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmF0dHJpYnV0ZT48L3hzZDpjb21wbGV4VHlwZT48L3hzZDplbGVtZW50PjwveHNkOnNlcXVlbmNlPjx4c2Q6YXR0cmlidXRlIG5hbWU9IlNFR01FTlQiIHVzZT0icmVxdWlyZWQiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmF0dHJpYnV0ZT48L3hzZDpjb21wbGV4VHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJFMUtOQktNIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iOTk5OSI+PHhzZDpjb21wbGV4VHlwZT48eHNkOnNlcXVlbmNlPjx4c2Q6ZWxlbWVudCBuYW1lPSJNU0dGTiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMyIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iQkFOS1MiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjMiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkJBTktMIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxNSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iQkFOS04iIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjE4Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJCS09OVCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iQlZUWVAiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjQiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlhFWkVSIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJCS1JFRiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMjAiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkJBTktBIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI2MCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iU1RSQVMiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjM1Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJPUlQwMSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMzUiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlNXSUZUIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iQkdSVVAiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjIiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlhQR1JPIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJCTktMWiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMTUiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlBTS1RPIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxNiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iQlJOQ0giIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjQwIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJQUk9WWiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMyIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iS09JTkgiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjM1Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50PjwveHNkOnNlcXVlbmNlPjx4c2Q6YXR0cmlidXRlIG5hbWU9IlNFR01FTlQiIHVzZT0icmVxdWlyZWQiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmF0dHJpYnV0ZT48L3hzZDpjb21wbGV4VHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJFMUtOVkFNIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iOTk5OSI+PHhzZDpjb21wbGV4VHlwZT48eHNkOnNlcXVlbmNlPjx4c2Q6ZWxlbWVudCBuYW1lPSJNU0dGTiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMyIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iQUJMQUQiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjI1Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJLTkZBSyIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iV0FOSUQiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjMiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9Ik1PQUIxIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJNT0JJMSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iTU9BQjIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjYiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9Ik1PQkkyIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJESUFCMSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iRElCSTEiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjYiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkRJQUIyIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJESUJJMiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iTUlBQjEiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjYiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9Ik1JQkkxIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJNSUFCMiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iTUlCSTIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjYiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkRPQUIxIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJET0JJMSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iRE9BQjIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjYiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkRPQkkyIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJGUkFCMSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iRlJCSTEiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjYiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkZSQUIyIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJGUkJJMiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iU0FBQjEiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjYiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlNBQkkxIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJTQUFCMiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iU0FCSTIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjYiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlNPQUIxIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJTT0JJMSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iU09BQjIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjYiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlNPQkkyIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJERUZBQiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48L3hzZDpzZXF1ZW5jZT48eHNkOmF0dHJpYnV0ZSBuYW1lPSJTRUdNRU5UIiB1c2U9InJlcXVpcmVkIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDphdHRyaWJ1dGU+PC94c2Q6Y29tcGxleFR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iRTFLTlZLTSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9Ijk5OTkiPjx4c2Q6Y29tcGxleFR5cGU+PHhzZDpzZXF1ZW5jZT48eHNkOmVsZW1lbnQgbmFtZT0iTVNHRk4iIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjMiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlBBUk5SIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iTkFNRVYiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjM1Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJOQU1FMSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMzUiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkFCVFBBIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iQUJUTlIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjQiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlVFUEFSIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iVEVMRjEiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjE2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJBTlJFRCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMzAiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlBBRktUIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJQQVJWTyIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iUEFWSVAiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlBBUkdFIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJQQVJMQSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iR0JEQVQiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjgiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlZSVE5SIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iQlJZVEgiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjQiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkFLVkVSIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJOTUFJTCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iUEFSQVUiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjQwIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJQQVJIMSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iUEFSSDIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjIiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlBBUkgzIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJQQVJINCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iUEFSSDUiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjIiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9Ik1PQUIxIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJNT0JJMSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iTU9BQjIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjYiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9Ik1PQkkyIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJESUFCMSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iRElCSTEiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjYiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkRJQUIyIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJESUJJMiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iTUlBQjEiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjYiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9Ik1JQkkxIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJNSUFCMiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iTUlCSTIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjYiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkRPQUIxIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJET0JJMSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iRE9BQjIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjYiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkRPQkkyIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJGUkFCMSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iRlJCSTEiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjYiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkZSQUIyIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJGUkJJMiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iU0FBQjEiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjYiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlNBQkkxIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJTQUFCMiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iU0FCSTIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjYiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlNPQUIxIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJTT0JJMSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNiIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iU09BQjIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjYiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlNPQkkyIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJQQUtOMSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMyIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iUEFLTjIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjMiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlBBS04zIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIzIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJQQUtONCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMyIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iUEFLTjUiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjMiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlNPUlRMIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iRkFNU1QiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlNQTkFNIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iVElURUxfQVAiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjM1Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50PjwveHNkOnNlcXVlbmNlPjx4c2Q6YXR0cmlidXRlIG5hbWU9IlNFR01FTlQiIHVzZT0icmVxdWlyZWQiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmF0dHJpYnV0ZT48L3hzZDpjb21wbGV4VHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJFMUtOS0FNIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSI+PHhzZDpjb21wbGV4VHlwZT48eHNkOnNlcXVlbmNlPjx4c2Q6ZWxlbWVudCBuYW1lPSJNU0dGTiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMyIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iS0xJTUciIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjE2Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJLTElNRSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMTYiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IldBRVJTIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI1Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJETEFVUyIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iOCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48L3hzZDpzZXF1ZW5jZT48eHNkOmF0dHJpYnV0ZSBuYW1lPSJTRUdNRU5UIiB1c2U9InJlcXVpcmVkIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDphdHRyaWJ1dGU+PC94c2Q6Y29tcGxleFR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iRTFLTktLTSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9Ijk5OTkiPjx4c2Q6Y29tcGxleFR5cGU+PHhzZDpzZXF1ZW5jZT48eHNkOmVsZW1lbnQgbmFtZT0iTVNHRk4iIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjMiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IktLQkVSIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI0Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJLTElNSyIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMTYiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IktOS0xJIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxMCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iQ1RMUEMiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjMiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkRUUkVWIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI4Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJDUkJMQiIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iU0JHUlAiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjMiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9Ik5YVFJWIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI4Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJLUkFVUyIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMTEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IlBBWURCIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIyIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJEQlJBVCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMyIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iUkVWREIiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjgiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkdSVVBQIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI0Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJTQkRBVCIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iOCIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iS0RHUlAiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjgiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PHhzZDplbGVtZW50IG5hbWU9IkRCUEFZIiBtaW5PY2N1cnM9IjAiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIzIi8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJEQlJURyIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iNSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iREJFS1IiIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjE3Ii8+PC94c2Q6cmVzdHJpY3Rpb24+PC94c2Q6c2ltcGxlVHlwZT48L3hzZDplbGVtZW50Pjx4c2Q6ZWxlbWVudCBuYW1lPSJEQldBRSIgbWluT2NjdXJzPSIwIj48eHNkOnNpbXBsZVR5cGU+PHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj48eHNkOm1heExlbmd0aCB2YWx1ZT0iMyIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6ZWxlbWVudD48eHNkOmVsZW1lbnQgbmFtZT0iREJNT04iIG1pbk9jY3Vycz0iMCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDptYXhMZW5ndGggdmFsdWU9IjgiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmVsZW1lbnQ+PC94c2Q6c2VxdWVuY2U+PHhzZDphdHRyaWJ1dGUgbmFtZT0iU0VHTUVOVCIgdXNlPSJyZXF1aXJlZCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6YXR0cmlidXRlPjwveHNkOmNvbXBsZXhUeXBlPjwveHNkOmVsZW1lbnQ+PC94c2Q6c2VxdWVuY2U+PHhzZDphdHRyaWJ1dGUgbmFtZT0iU0VHTUVOVCIgdXNlPSJyZXF1aXJlZCI+PHhzZDpzaW1wbGVUeXBlPjx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMSIvPjwveHNkOnJlc3RyaWN0aW9uPjwveHNkOnNpbXBsZVR5cGU+PC94c2Q6YXR0cmlidXRlPjwveHNkOmNvbXBsZXhUeXBlPjwveHNkOmVsZW1lbnQ+PC94c2Q6c2VxdWVuY2U+PHhzZDphdHRyaWJ1dGUgbmFtZT0iQkVHSU4iIHVzZT0icmVxdWlyZWQiPjx4c2Q6c2ltcGxlVHlwZT48eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPjx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjEiLz48L3hzZDpyZXN0cmljdGlvbj48L3hzZDpzaW1wbGVUeXBlPjwveHNkOmF0dHJpYnV0ZT48L3hzZDpjb21wbGV4VHlwZT48L3hzZDplbGVtZW50PjwveHNkOnNlcXVlbmNlPjwveHNkOmNvbXBsZXhUeXBlPjwveHNkOmVsZW1lbnQ+PC94c2Q6c2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2N5Y2xvbmUvQ3ljbG9uZU9yZ2FuaXphdGlvblByb2ZpbGUueHNkIGIvdjIvdGVzdC9jYXNlcy9zY2hlbWEvY3ljbG9uZS9DeWNsb25lT3JnYW5pemF0aW9uUHJvZmlsZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxMzE0YzAuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvY3ljbG9uZS9DeWNsb25lT3JnYW5pemF0aW9uUHJvZmlsZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw3MzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5jeWNsb25lY29tbWVyY2UuY29tL1NjaGVtYXMvMjAwMS8wOC9jb3AiIHhtbG5zPSJodHRwOi8vd3d3LmN5Y2xvbmVjb21tZXJjZS5jb20vU2NoZW1hcy8yMDAxLzA4L2NvcCIgeG1sbnM6ZHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiBhdHRyaWJ1dGVGb3JtRGVmYXVsdD0idW5xdWFsaWZpZWQiPgotCTx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyIgc2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbGRzaWctY29yZS94bWxkc2lnLWNvcmUtc2NoZW1hLnhzZCIvPgotCTx4c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpkb2N1bWVudGF0aW9uPlRoaXMgc2NoZW1hIHJlcHJlc2VudHMgb3JnYW5pemF0aW9uIGRldGFpbHMgcmVxdWlyZWQgZm9yIHRyYWRpbmcuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQk8L3hzZDphbm5vdGF0aW9uPgotCTwhLS1HZW5lcmFsIGRlZmluaXRpb25zIHVzZWQgd2l0aGluIHRoZSByZXN0IG9mIHRoZSBzY2hlbWEuLS0+Ci0JPHhzZDplbGVtZW50IG5hbWU9IkNvbW1lbnQiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+QSBmcmVlZm9ybSB0ZXh0IGZpZWxkIHRoYXQgY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBkZXNjcmlwdGl2ZSBpbmZvcm1hdGlvbiBhYm91dCBhbiBlbGVtZW50LjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQkJPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImxhbmciIHR5cGU9InhzZDpsYW5ndWFnZSIgZGVmYXVsdD0iZW4iLz4KLQkJCQk8L3hzZDpleHRlbnNpb24+Ci0JCQk8L3hzZDpzaW1wbGVDb250ZW50PgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJZGVudGlmaWVyIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkFuIGlkIGZvciBhbiBlbGVtZW50LiAgQ2FuJ3QgdXNlIHhzZDpJRCBiZWNhdXNlIGl0IHdvbid0IGFsbG93IHRoZW0gdG8gYmVnaW4gd2l0aCBhIG51bWJlci48L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciLz4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJZGVudGlmaWVyUmVmIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkEgcmVmZXJlbmNlIHRvIGFuIElkZW50aWZpZXIuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJJZGVudGlmaWVyIi8+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iT3JnYW5pemF0aW9uSWQiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+VGhlIHNlcnZlcidzIHVuaXF1ZSBpbnRlcm5hbCBpZGVudGlmaWVyIGZvciBhbiBvcmdhbml6YXRpb24uPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJJZGVudGlmaWVyIj4KLQkJCTx4c2Q6bWluTGVuZ3RoIHZhbHVlPSIxIi8+Ci0JCTwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkNvbW11bml0eUlkIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPlRoZSBzZXJ2ZXIncyB1bmlxdWUgaW50ZXJuYWwgaWRlbnRpZmllciBmb3IgYSBjb21tdW5pdHkuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJJZGVudGlmaWVyIj4KLQkJCTx4c2Q6bWluTGVuZ3RoIHZhbHVlPSIxIi8+Ci0JCTwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0JPHhzZDplbGVtZW50IG5hbWU9IkNvbW11bml0eSIgbmlsbGFibGU9InRydWUiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iQ29tbXVuaXR5TmFtZSIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkJyb2tlcklkIiB0eXBlPSJPcmdhbml6YXRpb25JZCIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImNvbW11bml0eUlkIiB0eXBlPSJDb21tdW5pdHlJZCIgdXNlPSJyZXF1aXJlZCIvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTwhLS1UaGUgZm9sbG93aW5nIGRlZmluZXMgc3R1ZmYgZm9yIHRoZSBBZG1pbmlzdHJhdGl2ZSBJbmZvcm1hdGlvbi0tPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJPcmdhbml6YXRpb25OYW1lIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPlRoZSBuYW1lIG9mIHRoZSBvcmdhbml6YXRpb24uPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJQZXJzb25OYW1lIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPlRoZSBuYW1lIG9mIGEgcGVyc29uPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6c2ltcGxlQ29udGVudD4KLQkJCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIi8+Ci0JCQk8L3hzZDpzaW1wbGVDb250ZW50PgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUGhvbmUiIG1peGVkPSJ0cnVlIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkEgcGhvbmUgbnVtYmVyLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6c2ltcGxlQ29udGVudD4KLQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InR5cGUiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTwveHNkOmV4dGVuc2lvbj4KLQkJPC94c2Q6c2ltcGxlQ29udGVudD4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iRW1haWwiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+QW4gZW1haWwgYWRkcmVzcy48L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciLz4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJDb250YWN0Ij4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkluZm9ybWF0aW9uIGFib3V0IGEgcGVyc29uLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IkNvbW1lbnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJQZXJzb25OYW1lIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IlRpdGxlIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iRGVwYXJ0bWVudCIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkVtYWlsIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPkVtYWlsIGFkZHJlc3MuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJCTx4c2Q6c2ltcGxlQ29udGVudD4KLQkJCQkJCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJFbWFpbCI+Ci0JCQkJCQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InR5cGUiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KLQkJCQkJCQk8L3hzZDpleHRlbnNpb24+Ci0JCQkJCQk8L3hzZDpzaW1wbGVDb250ZW50PgotCQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCQk8L3hzZDplbGVtZW50PgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJQaG9uZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQkJCQkJPHhzZDpleHRlbnNpb24gYmFzZT0iUGhvbmUiLz4KLQkJCQkJCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0iUG9zdGFsQWRkcmVzcyIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImNvbnRhY3RJZCIgdHlwZT0iSWRlbnRpZmllciIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0idHlwZSIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJDb250YWN0cyI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5Db2xsZWN0aW9uIG9mIENvbnRhY3QgYW5kIENvbnRhY3RSZWZzLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IkNvbnRhY3QiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJQb3N0YWxBZGRyZXNzIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPlBvc3RhbCBtYWlsaW5nIGFkZHJlc3MuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0iQ29tbWVudCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJTdHJlZXQiIHR5cGU9InhzZDpzdHJpbmciPgotCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+VGhlIHN0cmVldCBhZGRyZXNzLiAgVGhpcyBtYXkgcmVzb2x2ZSB0byB3aGF0IG1heSBiZSBpbnRlcnByZXRlZCBhcyBtdWx0aXBsZSBsaW5lcy48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkNpdHkiIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCI+Ci0JCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5DaXR5LjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iU3RhdGVwcm92IiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiPgotCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+U3RhdGUgb3IgcHJvdmluY2UgZGVwZW5kaW5nIG9uIHRoZSBjb3VudHJ5LjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iUG9zdGFsQ29kZSIgdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5Qb3N0YWwgb3IgemlwIGNvZGUuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQk8L3hzZDplbGVtZW50PgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJDb3VudHJ5IiB0eXBlPSJ4c2Q6c3RyaW5nIiBkZWZhdWx0PSJVUyI+Ci0JCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5Db3VudHJ5IGNvZGUuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQk8L3hzZDplbGVtZW50PgotCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9IlJvdXRpbmdJZFR5cGUiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+VGhlIHR5cGUgb2Ygcm91dGluZyBpZGVudGlmaWVyLCBsaWtlIERVTlMsIEVESSwgZXRjLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFREkiLz4KLQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVESUZBQ1QiLz4KLQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRVTlMiLz4KLQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iUm91dGluZ0lkIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkFuIGlkZW50aWZpZXIgc3VjaCBhcyBEVU5TIG9yIEVESSB1c2VkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IGEgY29tcGFueSBmb3IgdHJhZGluZy48L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzaW1wbGVDb250ZW50PgotCQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB0eXBlPSJSb3V0aW5nSWRUeXBlIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQkJPC94c2Q6ZXh0ZW5zaW9uPgotCQkJPC94c2Q6c2ltcGxlQ29udGVudD4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iQ2VydGlmaWNhdGUiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+SW5mb3JtYXRpb24gYWJvdXQgYSBjZXJ0aWZpY2F0ZS4gVGhlIGluaXRpYWwgdmVyc2lvbiBvZiBlYWNoIEludGVyY2hhbmdlIHByb2R1Y3Qgb25seSBzdXBwb3J0IHRoZSBkczpLZXlJbmZvL2RzOlg1MDlEYXRhIHNlY3Rpb24gaW5jbHVkaW5nIGRzOlg1MDlJc3N1ZXJTZXJpYWwgYW5kIFg1MDlDZXJ0aWZpY2F0ZS4gIEFueSBvdGhlciBlbGVtZW50cyB1c2VkIHdpbGwgYmUgaWdub3JlZCwgYW5kIGlmIG9uZSBvZiB0aGUgdHdvIHN1cHBvcnRlZCBlbGVtZW50cyBpcyBub3QgaW5jbHVkZWQgdGhlIGNlcnRpZmljYXRlIHdpbGwgYmUgY29uc2lkZXJlZCBpbnZhbGlkLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9ImRzOktleUluZm8iLz4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iY2VydElkIiB0eXBlPSJJZGVudGlmaWVyIiB1c2U9InJlcXVpcmVkIi8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDplbGVtZW50IG5hbWU9IkNlcnRpZmljYXRldFJlZiI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5BIHJlZmVyZW5jZSB0byBhIENlcnRpZmljYXRlLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJjZXJ0SWQiIHR5cGU9IklkZW50aWZpZXJSZWYiIHVzZT0icmVxdWlyZWQiLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iQ2VydGlmaWNhdGVzIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkNvbGxlY3Rpb24gb2YgQ2VydGlmaWNhdGVzLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IkNlcnRpZmljYXRlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InByZWZlcnJlZEVuY3J5cHRpb25DZXJ0SWQiIHR5cGU9IklkZW50aWZpZXJSZWYiIHVzZT0ib3B0aW9uYWwiLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iQWRtaW5pc3RyYXRpdmVJbmZvIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkluZm9ybWF0aW9uIGRlc2NyaWJpbmcgYW4gb3JnYW5pemF0aW9uIHVzZWZ1bCB0byBodW1hbnMuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0iT3JnYW5pemF0aW9uTmFtZSIvPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IlBvc3RhbEFkZHJlc3MiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IkNvbnRhY3RzIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTwhLS1UaGUgZm9sbG93aW5nIGRlZmluZXMgc3R1ZmYgZm9yIFRyYW5zcG9ydHMtLT4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iVXNlcm5hbWUiIHR5cGU9InhzZDpzdHJpbmciPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+VXNlcm5hbWUgdXNlZCB0byBhY2Nlc3MgYSByZXNvdXJjZS48L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDplbGVtZW50IG5hbWU9IlBhc3N3b3JkIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPlBhc3N3b3JkIHVzZWQgdG8gYWNjZXNzIGEgc2VjdXJlIHJlc291Y2UuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6c2ltcGxlQ29udGVudD4KLQkJCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iZW5jcnlwdGVkIiB0eXBlPSJ4c2Q6Ym9vbGVhbiIgdXNlPSJyZXF1aXJlZCIvPgotCQkJCTwveHNkOmV4dGVuc2lvbj4KLQkJCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9IklQQWRkcmVzcyI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5JbnRlcm5ldCBQcm90b2NhbCBhZGRyZXNzLCBleDogIDEyLjM0LjU2Ljc4PC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCTx4c2Q6cGF0dGVybiB2YWx1ZT0iKChbMC0xXT9bMC05XT9bMC05XXwyWzAtNF1bMC05XXwyNVswLTldKXszfSguWzAtMV0/WzAtOV0/WzAtOV18MlswLTRdWzAtOV18MjVbMC01XSkpIj4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5UaGlzIG1lc3MganVzdCByZXN0cmljdHMgdGhlIHZhbHVlIHRvIHN0YW5kYXJkIElQIGFkZHJlc3NlcyB3aGVyZSBlYWNoIG9mIGZvdXIgb2N0ZXRzIGNhbiBoYXZlIHZhbHVlcyAwLTI1NS48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQk8L3hzZDpwYXR0ZXJuPgotCQk8L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJETlNBZGRyZXNzIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkRvbWFpbiBOYW1lIFNlcnZlciBhZGRyZXNzLCBleDogd3d3LmN5Y2xvbmVjb21tZXJjZS5jb208L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciLz4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJTb2NrZXRTZWN1cml0eVR5cGUiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+QVVUSEVOVElDQVRFRCBvciBBTk9OWU1PVVM8L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVVUSEVOVElDQVRFRCIvPgotCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQU5PTllNT1VTIi8+Ci0JCTwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0JPHhzZDplbGVtZW50IG5hbWU9Ikhvc3QiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+QSBob3N0IGFkZHJlc3MsIGVpdGhlciBpbiBETlMgb3IgSVAsIGZvciBhIHNlcnZlci48L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOnNpbXBsZVR5cGU+Ci0JCQk8eHNkOnVuaW9uIG1lbWJlclR5cGVzPSJETlNBZGRyZXNzIElQQWRkcmVzcyIvPgotCQk8L3hzZDpzaW1wbGVUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDplbGVtZW50IG5hbWU9IlBvcnQiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+U29ja2V0IHBvcnQgbnVtYmVyLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6c2ltcGxlVHlwZT4KLQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOmludGVnZXIiPgotCQkJCTx4c2Q6bWluSW5jbHVzaXZlIHZhbHVlPSIxIi8+Ci0JCQkJPHhzZDptYXhJbmNsdXNpdmUgdmFsdWU9IjY1MDAwIi8+Ci0JCQk8L3hzZDpyZXN0cmljdGlvbj4KLQkJPC94c2Q6c2ltcGxlVHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJEaXJlY3RvcnkiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+QSBkaXJlY3Rvcnkgb24gYSBmaWxlIHN5c3RlbSBvciBzZXJ2ZXIgc3VjaCBhcyBGVFAuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIi8+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSk1TQ29uc3VtZXJUeXBlIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkZvciBKTVMsIGVpdGhlciBhIFF1ZXVlIG9yIFRvcGljLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRVUVVRSIvPgotCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVE9QSUMiLz4KLQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iRmlyZXdhbGxBdXRoZW50aWNhdGlvblR5cGUiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+RWl0aGVyIFMvS2V5IG9yIENsZWFyVGV4dDwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTS0VZIi8+Ci0JCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDTEVBUlRFWFQiLz4KLQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iRmlyZXdhbGwiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+SW5mb3JtYXRpb24gYWJvdXQgYSB0cmFuc3BvcnQgc2VydmVyJ3MgZmlyZXdhbGwuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0iSG9zdCIvPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IlBvcnQiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iQXV0aGVudGljYXRpb24iIG1pbk9jY3Vycz0iMCI+Ci0JCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5PcHRpb25hbCBTL0tleSBvciBDbGVhciB0ZXh0IGF1dGhlbnRpY2F0aW9uLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9IlVzZXJuYW1lIi8+Ci0JCQkJCQkJPHhzZDplbGVtZW50IHJlZj0iUGFzc3dvcmQiLz4KLQkJCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0idHlwZSIgdHlwZT0iRmlyZXdhbGxBdXRoZW50aWNhdGlvblR5cGUiIHVzZT0icmVxdWlyZWQiLz4KLQkJCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJTb2NrZXRTZWN1cml0eSI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5UeXBlIG9mIFNTTCBzZWN1cml0eS48L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0iQ2VydGlmaWNhdGV0UmVmIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0idHlwZSIgdHlwZT0iU29ja2V0U2VjdXJpdHlUeXBlIiB1c2U9InJlcXVpcmVkIi8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJUcmFuc3BvcnQiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+QmFzZSBkZWZpbml0aW9uIGZvciBhIHRyYWRpbmcgdHJhbnNwb3J0IHNlcnZlci48L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IHJlZj0iQ29tbWVudCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzZDplbGVtZW50IG5hbWU9IlNjaGVkdWxlcyIgbWluT2NjdXJzPSIwIj4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5Db2xsZWN0aW9uIG9mIHNjaGVkdWxlcy48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJzY2hlZHVsZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+UGVyaW9kIG9mIHRpbWUgaW5jbHVkaW5nIGEgc3RhcnQgYW5kIHN0b3AgdGltZSByZXByZXNlbnRpbmcgdGhlIHBlcmlvZCBvZiB0aW1lIHRoZSB0cmFuc3BvcnQgaXMgYXZhaWxhYmxlLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJzdGFydFRpbWUiIHR5cGU9InhzZDp0aW1lIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQkJCQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InN0b3BUaW1lIiB0eXBlPSJ4c2Q6dGltZSIgdXNlPSJyZXF1aXJlZCIvPgotCQkJCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQk8L3hzZDplbGVtZW50PgotCQk8L3hzZDpzZXF1ZW5jZT4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0idHJhbnNwb3J0SWQiIHR5cGU9IklkZW50aWZpZXIiIHVzZT0ib3B0aW9uYWwiLz4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0UmVmIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkEgcmVmZXJlbmNlIHRvIGEgVHJhbnNwb3J0IGRlZmluZWQgZWxzZXdoZXJlLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ0cmFuc3BvcnRJZCIgdHlwZT0iSWRlbnRpZmllclJlZiIgdXNlPSJyZXF1aXJlZCIvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJUcmFuc3BvcnRzIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkNvbGxlY3Rpb24gb2YgVHJhbnNwb3J0cyBkZWZpbnRpb25zLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IkZpbGVUcmFuc3BvcnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJGVFBUcmFuc3BvcnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJIVFRQVHJhbnNwb3J0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0iSFRUUFRyYW5zcG9ydF9DSSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IlNNVFBUcmFuc3BvcnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJTTVRQVHJhbnNwb3J0X0NJIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0iSk1TVHJhbnNwb3J0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0iTVFTZXJpZXNUcmFuc3BvcnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0icHJlZmVycmVkVHJhbnNwb3J0UmVmIiB0eXBlPSJJZGVudGlmaWVyUmVmIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDplbGVtZW50IG5hbWU9IkZpbGVUcmFuc3BvcnQiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+RmlsZSBzeXN0ZW0gdHJhbnNwb3J0IGRlZmluaXRpb24uPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQkJPHhzZDpleHRlbnNpb24gYmFzZT0iVHJhbnNwb3J0Ij4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJEaXJlY3RvcnkiPgotCQkJCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPlRoZSBkaXJlY3Rvcnkgb24gdGhlIGZpbGUgc3lzdGVtLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQkJCQkJCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJEaXJlY3RvcnkiPgotCQkJCQkJCQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImlzTG9jYWwiIHR5cGU9InhzZDpib29sZWFuIi8+Ci0JCQkJCQkJCQk8L3hzZDpleHRlbnNpb24+Ci0JCQkJCQkJCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQkJCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQk8L3hzZDplbGVtZW50PgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpleHRlbnNpb24+Ci0JCQk8L3hzZDpjb21wbGV4Q29udGVudD4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iRlRQVHJhbnNwb3J0Ij4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkZpbGUgVHJhbnNmZXIgUHJvdG9jb2wgdHJhbnNwb3J0IGRlZmluaXRpb24uPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQkJPHhzZDpleHRlbnNpb24gYmFzZT0iVHJhbnNwb3J0Ij4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9Ikhvc3QiLz4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9IlBvcnQiLz4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9IlVzZXJuYW1lIi8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJQYXNzd29yZCIvPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IlRlbXBEaXIiIHR5cGU9IkRpcmVjdG9yeSI+Ci0JCQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+RGlyZWN0b3J5IG9uIHRoZSBGVFAgc2VydmVyIHdoZXJlIGluY29taW5nIGRvY3VtZW50cyBhcmUgdGVtcG9yYXJpbHkgc3RvcmVkIGFzIHRoZXkgYXJlIHRyYW5zZmVycmVkLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iUGlja3VwRGlyIiB0eXBlPSJEaXJlY3RvcnkiPgotCQkJCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPkRpcmVjdG9yeSB3aGVyZSB0aGUgZG9jdW1lbnRzIGFyZSBtb3ZlZCBhZnRlciBoYXZpbmcgYmVlbiB0cmFuc2ZlcnJlZCB0byB0aGUgVGVtcERpci48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCQk8L3hzZDplbGVtZW50PgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IlRyYW5zZmVyVHlwZSIgZGVmYXVsdD0iQklOQVJZIj4KLQkJCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5CSU5BUlkgb3IgQVNDSUk8L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCQkJPHhzZDpzaW1wbGVUeXBlPgotCQkJCQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCQkJCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVNDSUkiLz4KLQkJCQkJCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJJTkFSWSIvPgotCQkJCQkJCQk8L3hzZDpyZXN0cmljdGlvbj4KLQkJCQkJCQk8L3hzZDpzaW1wbGVUeXBlPgotCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJNb2RlIiBkZWZhdWx0PSJQYXNzaXZlIj4KLQkJCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5Qb3J0IG9yIFBhc3NpdmUuICBQYXNzaXZlIG1lYW5zIHRoZSBGVFAgc2VydmVyIHNlbGVjdHMgdGhlIGRhdGEgcG9ydCBmb3IgdGhlIEZUUCBkYXRhIHRyYW5zZmVyLiBQb3J0IG1lYW5zIHRoZSBGVFAgY2xpZW50IHNlbGVjdHMgdGhlIGRhdGEgcG9ydCBmb3IgdGhlIEZUUCBkYXRhIHRyYW5zZmVyLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQk8eHNkOnNpbXBsZVR5cGU+Ci0JCQkJCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQkJCQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3J0Ii8+Ci0JCQkJCQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXNzaXZlIi8+Ci0JCQkJCQkJCTwveHNkOnJlc3RyaWN0aW9uPgotCQkJCQkJCTwveHNkOnNpbXBsZVR5cGU+Ci0JCQkJCQk8L3hzZDplbGVtZW50PgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0iRmlyZXdhbGwiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0iU29ja2V0U2VjdXJpdHkiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpleHRlbnNpb24+Ci0JCQk8L3hzZDpjb21wbGV4Q29udGVudD4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iSFRUUFRyYW5zcG9ydCI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5IeXBlclRleHQgVHJhbnNmZXIgUHJvdG9jb2wgZGVmaW5pdGlvbi48L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpjb21wbGV4Q29udGVudD4KLQkJCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJUcmFuc3BvcnQiPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IlVSTCIgdHlwZT0ieHNkOmFueVVSSSIvPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0iVXNlcm5hbWUiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0iUGFzc3dvcmQiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Ik1ldGhvZCIgZGVmYXVsdD0iUE9TVCI+Ci0JCQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+RWl0aGVyIFBVVCBvciBQT1NUIHRoYXQgdGhlIGNsaWVudCBzaG91bGQgdXNlIHRvIHB1c2ggZG9jdWVtbnRzIHRvIHRoZSBzZXJ2ZXIuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQkJCTx4c2Q6c2ltcGxlVHlwZT4KLQkJCQkJCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQkJCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBVVCIvPgotCQkJCQkJCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUE9TVCIvPgotCQkJCQkJCQk8L3hzZDpyZXN0cmljdGlvbj4KLQkJCQkJCQk8L3hzZDpzaW1wbGVUeXBlPgotCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJEb3VibGVNaW1lV3JhcHBlZCIgdHlwZT0ieHNkOmJvb2xlYW4iIGRlZmF1bHQ9ImZhbHNlIj4KLQkJCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5Tb21lIHNlcnZlcnMgd2lsbCBzdHJpcCBvZmYgTUlNRSB3cmFwcGluZyBvZiBhIGRvY3VtZW50IHJlcXVpcmluZyB0aGF0IHRoZSBkb2N1bWVudCBiZSBNSU1FIHdyYXBwZWQgdHdpY2UuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9IkZpcmV3YWxsIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9IlNvY2tldFNlY3VyaXR5IiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6ZXh0ZW5zaW9uPgotCQkJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDplbGVtZW50IG5hbWU9IkhUVFBUcmFuc3BvcnRfQ0kiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+Q3ljbG9uZSBJbnRlcmNoYW5nZSBFbnRlcnByaXNlJ3Mgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBIVFRQLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmNvbXBsZXhDb250ZW50PgotCQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9IlRyYW5zcG9ydCI+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iVVJMIiB0eXBlPSJ4c2Q6YW55VVJJIi8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJGaXJld2FsbCIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJTb2NrZXRTZWN1cml0eSIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmV4dGVuc2lvbj4KLQkJCTwveHNkOmNvbXBsZXhDb250ZW50PgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJTTVRQVHJhbnNwb3J0Ij4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPlNpbXBsZSBNYWlsIFRyYW5zcG9ydCBQcm90b2NvbCB0cmFuc3BvcnQgZGVmaW5pdGlvbi48L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpjb21wbGV4Q29udGVudD4KLQkJCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJUcmFuc3BvcnQiPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0iSG9zdCIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJQb3J0IiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9IlVzZXJuYW1lIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9IlBhc3N3b3JkIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJSZWNpcGllbnQiIHR5cGU9IkVtYWlsIj4KLQkJCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5FbWFpbCBhZGRyZXNzIG9mIHRoZSByZWNpcGllbnQuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJJc0NvbXBsaWFudCIgdHlwZT0ieHNkOmJvb2xlYW4iIGRlZmF1bHQ9InRydWUiPgotCQkJCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPlNldCB0byBmYWxzZSBmb3IgU01UUCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBkbyBub3QgbGVhdmUgdGhlIE1JTUUgd3JhcHBpbmcgaW4gdGFjdC48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCQk8L3hzZDplbGVtZW50PgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0iRmlyZXdhbGwiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0iU29ja2V0U2VjdXJpdHkiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpleHRlbnNpb24+Ci0JCQk8L3hzZDpjb21wbGV4Q29udGVudD4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iU01UUFRyYW5zcG9ydF9DSSI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5DeWNsb25lIEludGVyY2hhbmdlIEVudGVycHJpc2UncyBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIFNNVFAuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQkJPHhzZDpleHRlbnNpb24gYmFzZT0iVHJhbnNwb3J0Ij4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9Ikhvc3QiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0iUG9ydCIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iUmVjaXBpZW50IiB0eXBlPSJFbWFpbCI+Ci0JCQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+RW1haWwgYWRkcmVzcyBvZiB0aGUgcmVjaXBpZW50LjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJGaXJld2FsbCIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJTb2NrZXRTZWN1cml0eSIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmV4dGVuc2lvbj4KLQkJCTwveHNkOmNvbXBsZXhDb250ZW50PgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJKTVNUcmFuc3BvcnQiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+SmF2YSBNZXNzYWdlIFNlcnZpY2UgKEpNUykgdHJhbnNwb3J0IGRlZmluaXRpb24uPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQkJPHhzZDpleHRlbnNpb24gYmFzZT0iVHJhbnNwb3J0Ij4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9IlVzZXJuYW1lIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9IlBhc3N3b3JkIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJDb25uZWN0aW9uRmFjdG9yeSIgdHlwZT0ieHNkOnN0cmluZyI+Ci0JCQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+VGhlIG5hbWUgb2YgdGhlIGNvbm5lY3Rpb24gZmFjdG9yeS48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCQk8L3hzZDplbGVtZW50PgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IkNvbnN1bWVyIj4KLQkJCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5UaGUgbmFtZSBvZiB0aGUgUXVldWUgb3IgVG9waWMuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQkJCTx4c2Q6c2ltcGxlQ29udGVudD4KLQkJCQkJCQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCQkJCQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InR5cGUiIHR5cGU9IkpNU0NvbnN1bWVyVHlwZSIgZGVmYXVsdD0iUVVFVUUiLz4KLQkJCQkJCQkJCTwveHNkOmV4dGVuc2lvbj4KLQkJCQkJCQkJPC94c2Q6c2ltcGxlQ29udGVudD4KLQkJCQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iSk5ESSI+Ci0JCQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+SmF2YSBOYW1pbmcgYW5kIERpcmVjdG9yeSBJbnRlcmZhY2UgZGVmaW50aW9uIHRvIGxvY2F0ZSB0aGUgSk1TIHByb3ZpZGVyLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IkxvY2F0aW9uIiB0eXBlPSJ4c2Q6YW55VVJJIj4KLQkJCQkJCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5UaGUgVVJJIGxvY2F0aW9uIG9mIHRoZSBKTVMgc2VydmVyLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJVc2VybmFtZSIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJQYXNzd29yZCIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iQ29udGV4dEZhY3RvcnkiIHR5cGU9InhzZDpzdHJpbmciPgotCQkJCQkJCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPlRoZSBuYW1lIG9mIHRoZSBKTkRJIGNvbnRleHQgZmFjdG9yeS48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCQk8L3hzZDplbGVtZW50PgotCQkJCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmV4dGVuc2lvbj4KLQkJCTwveHNkOmNvbXBsZXhDb250ZW50PgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJNUVNlcmllc1RyYW5zcG9ydCI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5JQk0ncyBNUSBTZXJpZXM8L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpjb21wbGV4Q29udGVudD4KLQkJCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJUcmFuc3BvcnQiPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0iSG9zdCIvPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0iUG9ydCIvPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0iVXNlcm5hbWUiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0iUGFzc3dvcmQiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IlF1ZXVlTWFuYWdlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IlF1ZXVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iQ2hhbm5lbCIgdHlwZT0ieHNkOnN0cmluZyIvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpleHRlbnNpb24+Ci0JCQk8L3hzZDpjb21wbGV4Q29udGVudD4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8IS0tVGhlIGZvbGxvd2luZyBkZWZpbmVzIGJ1c2luZXNzIHByb3RvY29sIGluZm9ybWF0aW9uIC0tPgotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQnVzaW5lc3NQcm90b2NvbCI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5CYXNlIGRlZmluaXRpb24gZm9yIGEgYnVzaW5lc3MgcHJvdG9jb2wuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9IlRyYW5zcG9ydFJlZiIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImJ1c2luZXNzUHJvdG9jb2xJZCIgdHlwZT0iSWRlbnRpZmllciIgdXNlPSJyZXF1aXJlZCIvPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJCdXNpbmVzc1Byb3RvY29sUmVmIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkEgcmVmZXJlbmNlIHRvIGEgYnVzaW5lc3MgcHJvdG9jb2wgZGVmaW5pdGlvbi48L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYnVzaW5lc3NQcm90b2NvbElkIiB0eXBlPSJJZGVudGlmaWVyUmVmIiB1c2U9InJlcXVpcmVkIi8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDplbGVtZW50IG5hbWU9IkJ1c2luZXNzUHJvdG9jb2xzIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkNvbGxlY3Rpb24gb2YgQnVzaW5lc3MgcHJvdG9jb2wgZGVmaW5pdGlvbnMuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6YWxsPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJBUzFQcm90b2NvbCIgdHlwZT0iQnVzaW5lc3NQcm90b2NvbCIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkFTMlByb3RvY29sIiB0eXBlPSJCdXNpbmVzc1Byb3RvY29sIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iUm9zZXR0YU5ldFByb3RvY29sIiB0eXBlPSJCdXNpbmVzc1Byb3RvY29sIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iZWJYTUxQcm90b2NvbCIgdHlwZT0iQnVzaW5lc3NQcm90b2NvbCIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8L3hzZDphbGw+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPCEtLVRoZSBmb2xsb3dpbmcgZGVmaW5lcyB0aGUgdG9wLWxldmVsIE9yZ2FuaXphdGlvbkRhdGEtLT4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iT3JnYW5pemF0aW9uUHJvZmlsZSI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5BbGwgaW5mb3JtYXRpb24gbmVlZGVkIHRvIHRyYWRlIHdpdGggYW4gb3JnYW5pemF0aW9uLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IkNvbW1lbnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJBZG1pbmlzdHJhdGl2ZUluZm8iIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJSb3V0aW5nSWRzIiBtaW5PY2N1cnM9IjAiPgotCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+Q29sbGVjdGlvbiBvZiBSb3V0aW5nSWRzPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQkJPHhzZDplbGVtZW50IHJlZj0iUm91dGluZ0lkIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iQnJva2VySWQiIHR5cGU9Ik9yZ2FuaXphdGlvbklkIiBtaW5PY2N1cnM9IjAiPgotCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+V2l0aGluIHRoaXMgY29tbXVuaXR5LCB0aGlzIG9yZ2FuaXphdGlvbiB0cmFkZXMgdGhyb3VnaCBhIGJyb2tlciAoaHViKS4gVGhpcyByZWZlcmVuY2VzIGFub3RoZXIgcHJvZmlsZSB3aXRoIHRoaXMgaWQuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQk8L3hzZDplbGVtZW50PgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJDb21tdW5pdGllcyIgbWluT2NjdXJzPSIwIj4KLQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPkNvbGxlY3Rpb24gb2YgY29tbXVuaXRpZXMgdGhlIHRyYWRpbmcgcHJvZmlsZSBpcyBhY3RpdmVseSBhIG1lbWJlciBvZi48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJDb21tdW5pdHkiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCQk8L3hzZDplbGVtZW50PgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IlRyYW5zcG9ydHMiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IkNlcnRpZmljYXRlcyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0iQnVzaW5lc3NQcm90b2NvbHMiIG1pbk9jY3Vycz0iMCIvPgotCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0iT3JnYW5pemF0aW9uSWQiIHVzZT0ib3B0aW9uYWwiPgotCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPlRoZSBPcmdhbml6YXRpb25JZCBleGlzdHMgZm9yIHZhbGlkIHByb2ZpbGVzIGV4aXN0aW5nIHdpdGhpbiB0aGUgc2VydmVyLiAgSWYgYSBjbGllbnQgaXMgc2VuZGluZyBhIHByb2ZpbGUgZm9yIGFuIG9yZ2FuaXphdGlvbiB0aGF0IGlzIG5vdCBhbHJlYWR5IGluIHRoZSBzZXJ2ZXIncyByZXBvc2l0b3J5LCB0aGlzIGlkIHdpbGwgbm90IGJlIHByZXNlbnQgYXMgdGhlIHNlcnZlciB3aWxsIGJlIGFzc2lnbmluZyBvbmUgZm9yIGl0LjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCTwveHNkOmF0dHJpYnV0ZT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2N5Y2xvbmUvSW50ZXJjaGFuZ2VQYXJ0bmVyQ29uZmlnLnhzZCBiL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2N5Y2xvbmUvSW50ZXJjaGFuZ2VQYXJ0bmVyQ29uZmlnLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE0OWIxZC4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9jeWNsb25lL0ludGVyY2hhbmdlUGFydG5lckNvbmZpZy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyNjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gZWRpdGVkIHdpdGggWE1MIFNweSB2NC4zIFUgKGh0dHA6Ly93d3cueG1sc3B5LmNvbSkgYnkgQm9iIEtyaWVyIChDeWNsb25lIENPbW1lcmNlLCBJbmMuKSAtLT4KLTwhLS1XM0MgU2NoZW1hIGdlbmVyYXRlZCBieSBYTUwgU3B5IHYzLjUgTlQgKGh0dHA6Ly93d3cueG1sc3B5LmNvbSktLT4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5jeWNsb25lY29tbWVyY2UuY29tL1NjaGVtYXMvMjAwMS8wOS9pcHAiIHhtbG5zPSJodHRwOi8vd3d3LmN5Y2xvbmVjb21tZXJjZS5jb20vU2NoZW1hcy8yMDAxLzA5L2lwcCIgeG1sbnM6Y29wPSJodHRwOi8vd3d3LmN5Y2xvbmVjb21tZXJjZS5jb20vU2NoZW1hcy8yMDAxLzA4L2NvcCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCI+Ci0JPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmN5Y2xvbmVjb21tZXJjZS5jb20vU2NoZW1hcy8yMDAxLzA4L2NvcCIgc2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuY3ljbG9uZWNvbW1lcmNlLmNvbS9TY2hlbWFzLzIwMDEvMDgvQ3ljbG9uZU9yZ2FuaXphdGlvblByb2ZpbGUueHNkIi8+Ci0JPHhzZDplbGVtZW50IG5hbWU9IkludGVyY2hhbmdlUGFydG5lclByb2ZpbGUiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+Q3ljbG9uZSBJbnRlcmNoYW5nZSBwYXJ0bmVyIHByb2ZpbGUuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0iY29wOk9yZ2FuaXphdGlvblByb2ZpbGUiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJTZWNvbmRhcnlJZHMiIG1pbk9jY3Vycz0iMCI+Ci0JCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJTZWNvbmRhcnlJZCIgdHlwZT0ieHNkOnN0cmluZyIgbmlsbGFibGU9ImZhbHNlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJQcmVmZXJlbmNlcyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkZpcmV3YWxsIiBtaW5PY2N1cnM9IjAiPgotCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iTWluU0tleUl0ZXJhdGlvbkNvdW50Ij4KLQkJCQkJCQkJPHhzZDpzaW1wbGVUeXBlPgotCQkJCQkJCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6aW50Ij4KLQkJCQkJCQkJCQk8eHNkOm1pbkluY2x1c2l2ZSB2YWx1ZT0iMCIvPgotCQkJCQkJCQkJCTx4c2Q6bWF4SW5jbHVzaXZlIHZhbHVlPSI2NTUzNSIvPgotCQkJCQkJCQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JCQkJCQkJCTwveHNkOnNpbXBsZVR5cGU+Ci0JCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCQk8L3hzZDplbGVtZW50PgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJTZWN1cml0eSIgbWluT2NjdXJzPSIwIj4KLQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPlNlY3VyaXR5IHBhcmFtZXRlcnMuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IkRvY3VtZW50U2lnbmluZyIgdHlwZT0ieHNkOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCI+Ci0JCQkJCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5Cb29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgZG9jdW1lbnRzIHJlY2VpdmVkIGJ5IHRoaXMgcGFydG5lciBzaG91bGQgYmUgc2lnbmVkLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iRG9jdW1lbnRBY2tub3dsZWRnZW1lbnQiIG1pbk9jY3Vycz0iMCI+Ci0JCQkJCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5Eb2N1bWVudCBhY2tub3dsZWRnZW1lbnQgY29uZmlndXJhdGlvbi48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdFNpZ25lZCIgdHlwZT0ieHNkOmJvb2xlYW4iPgotCQkJCQkJCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+Qm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIGRvY3VtZW50IGFja25vd2xlZGdtZW50cyBzaG91bGQgYmUgc2lnbmVkLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCQkJCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdFN5bmNocm9ub3VzIiB0eXBlPSJ4c2Q6Ym9vbGVhbiI+Ci0JCQkJCQkJCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5Cb29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgYWNrbm93bGVkZ2VtZW50cyBzaG91bGQgYmUgaW1tZWRpYXRlbHkgcmVjZWl2ZWQuICBSZXF1aXJlcyBidW5kbGVkIEhUVFAoUykuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJCQk8L3hzZDplbGVtZW50PgotCQkJCQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJCQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSIgdHlwZT0ieHNkOmJvb2xlYW4iIHVzZT0icmVxdWlyZWQiLz4KLQkJCQkJCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iTWVzc2FnZURpZ2VzdCIgbWluT2NjdXJzPSIwIj4KLQkJCQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPkRlZmluZXMgdGhlIGRvY3VtZW50IG1lc3NhZ2UgZGlnZXN0IGFsZ29yaXRoaW0gdG8gdXNlLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCTx4c2Q6c2ltcGxlVHlwZT4KLQkJCQkJCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotCQkJCQkJCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1ENSIvPgotCQkJCQkJCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNIQTEiLz4KLQkJCQkJCQkJCTwveHNkOnJlc3RyaWN0aW9uPgotCQkJCQkJCQk8L3hzZDpzaW1wbGVUeXBlPgotCQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IkRvY3VtZW50RW5jcnlwdGlvbiIgbWluT2NjdXJzPSIwIj4KLQkJCQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPkRlZmluZXMgdGhlIHR5cGUgb2YgZG9jdW1lbnQgZW5jcnlwdGlvbiBhbGdvcml0aGltIHRvIHVzZS48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJCQkJPHhzZDpjaG9pY2U+Ci0JCQkJCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IlJDMkVuY3J5cHRpb24iPgotCQkJCQkJCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+UkMyIEVuY3J5cHRpb24gYWxnb3JpdGhpbS4gIEtleSBsZW5ndGggaXMgcmVxdWlyZWQuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImtleUxlbmd0aCIgdXNlPSJyZXF1aXJlZCI+Ci0JCQkJCQkJCQkJCQkJPHhzZDpzaW1wbGVUeXBlPgotCQkJCQkJCQkJCQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLQkJCQkJCQkJCQkJCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjQwIi8+Ci0JCQkJCQkJCQkJCQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI2NCIvPgotCQkJCQkJCQkJCQkJCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMTI4Ii8+Ci0JCQkJCQkJCQkJCQkJCTwveHNkOnJlc3RyaWN0aW9uPgotCQkJCQkJCQkJCQkJCTwveHNkOnNpbXBsZVR5cGU+Ci0JCQkJCQkJCQkJCQk8L3hzZDphdHRyaWJ1dGU+Ci0JCQkJCQkJCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IkFSQ0ZvdXJFbmNyeXB0aW9uIj4KLQkJCQkJCQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPkFSQ0ZvdXIgRW5jcnlwdGlvbiBhbGdvcml0aGltLiAgS2V5IGxlbmd0aCBpcyByZXF1aXJlZC48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQkJCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ia2V5TGVuZ3RoIiB1c2U9InJlcXVpcmVkIj4KLQkJCQkJCQkJCQkJCQk8eHNkOnNpbXBsZVR5cGU+Ci0JCQkJCQkJCQkJCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotCQkJCQkJCQkJCQkJCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNDAiLz4KLQkJCQkJCQkJCQkJCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjY0Ii8+Ci0JCQkJCQkJCQkJCQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxMjgiLz4KLQkJCQkJCQkJCQkJCQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JCQkJCQkJCQkJCQkJPC94c2Q6c2ltcGxlVHlwZT4KLQkJCQkJCQkJCQkJCTwveHNkOmF0dHJpYnV0ZT4KLQkJCQkJCQkJCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iREVTRW5jcnlwdGlvbiI+Ci0JCQkJCQkJCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5ERVMgRW5jcnlwdGlvbiBhbGdvcml0aGltLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCQkJCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJrZXlMZW5ndGgiIHR5cGU9InhzZDppbnQiIHVzZT0ib3B0aW9uYWwiIGZpeGVkPSI1NiIvPgotCQkJCQkJCQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQk8L3hzZDplbGVtZW50PgotCQkJCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJUcmlwbGVERVNFbmNyeXB0aW9uIj4KLQkJCQkJCQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPlRyaXBsZSBERVMgRW5jcnlwdGlvbiBhbGdvcml0aGltLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCQkJCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJrZXlMZW5ndGgiIHR5cGU9InhzZDppbnQiIHVzZT0ib3B0aW9uYWwiIGZpeGVkPSIxNjgiLz4KLQkJCQkJCQkJCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJCQkJCTwveHNkOmNob2ljZT4KLQkJCQkJCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCQk8L3hzZDplbGVtZW50PgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJCaW5hcnlEaXJlY3RvcmllcyIgbWluT2NjdXJzPSIwIj4KLQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPkRlZmluZXMgYSBjb2xsZWN0aW9uIG9mIGJpbmFyeSBjb21wYW5pZXMuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IkJpbmFyeUNvbXBhbnkiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPkRlZmluZXMgYSBjb2xsZWN0aW9uIG9mIGJpbmFyeSBkaXJlY3RvcmllcyBmb3IgYSBjb21wYW55LjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJCaW5hcnlEaXJlY3RvcnkiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQkJCQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPkRlZmluZXMgdGhlIGluYm91bmQgYW5kIG91dGJvdW5kIGJpbmFyeSBkaXJlY3RvcmllcyBmb3IgYSBwYXJ0bmVyLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCQkJCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJwYXJ0bmVySWQiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJCQkJCQkJCQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImluYm91bmRQYXRoIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQkJCQkJCQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJvdXRib3VuZFBhdGgiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJCQkJCQkJCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCQkJCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iY29tcGFueUlkIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQkJCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iZ3JvdXAiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InZlcnNpb24iIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iUHJlZmVyZW5jZXMiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+UGFydG5lciBwcm9maWxlIHRyYW5zcG9ydCBhbmQgZG9jdW1lbnQgc2V0dGluZ3MuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IlNjaGVkdWxlIiBtaW5PY2N1cnM9IjAiPgotCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+U3BlY2lmaWVzIHRoZSBzY2hlZHVsZSB0byB1c2Ugd2hlbiBzZW5kaW5nIGRvY3VtZW50cyB0byB0aGlzIHBhcnRuZXIuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQk8L3hzZDplbGVtZW50PgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJJbmJvdW5kRmlsZVByZXNlcnZhdGlvbiIgbWluT2NjdXJzPSIwIj4KLQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPlNwZWNpZmllcyBpZiBpbmJvdW5kIGZpbGVzIHNob3VsZCBiZSBwZXJzaXN0ZWQgd2l0aCB0aGVpciBvcmlnaW5hbCBmaWxlIG5hbWUuICBPcHRpb24gYXR0cmlidXRlIGFsbG93cyBmb3Igb3ZlcndyaXRpbmcgb3Igc2VxdWVuY2luZyBmaWxlcyB3aXRoIGR1cGxpY2F0ZSBmaWxlIG5hbWVzLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iRG9jdW1lbnRPcHRpb25zIiBtaW5PY2N1cnM9IjAiPgotCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+R2xvYmFsIGRvY3VtZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iUmVqZWN0RHVwbGljYXRlRURJIiB0eXBlPSJ4c2Q6Ym9vbGVhbiI+Ci0JCQkJCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5Cb29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgRURJIGRvY3VtZW50IHJlY2lldmVkIHdpdGggZHVwbGljYXRlIGNvbnRyb2wgSURzIHNob3VsZCBiZSByZWplY3RlZC48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IkNvbXByZXNzaW9uIiBkZWZhdWx0PSJOT05FIiBuaWxsYWJsZT0iZmFsc2UiPgotCQkJCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+SW5kaWNhdGVzIHRoZSB0eXBlIG9mIGNvbXByZXNzaW9uIGFsZ29yaXRoaW0gdG8gdXNlIChOT05FLCBHWklQIG9yIFpMSUIpLiA8L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQkJCQk8eHNkOnNpbXBsZVR5cGU+Ci0JCQkJCQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCQkJCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdaSVAiLz4KLQkJCQkJCQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJaTElCIi8+Ci0JCQkJCQkJCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTk9ORSIvPgotCQkJCQkJCQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JCQkJCQkJCTwveHNkOnNpbXBsZVR5cGU+Ci0JCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iUmVzZW5kQXR0ZW1wdHMiPgotCQkJCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+SW50ZWdlciB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgdGltZXMgYSBkb2N1bWVudCBzaG91bGQgYmUgcmVzZW50IGlmIGFuIGFja25vd2xlZG1lbnQgaGFzIG5vdCBiZWVuIHJlY2lldmVkLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCTx4c2Q6c2ltcGxlVHlwZT4KLQkJCQkJCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOmludCI+Ci0JCQkJCQkJCQkJPHhzZDptaW5JbmNsdXNpdmUgdmFsdWU9IjAiLz4KLQkJCQkJCQkJCQk8eHNkOm1heEluY2x1c2l2ZSB2YWx1ZT0iNjAiLz4KLQkJCQkJCQkJCTwveHNkOnJlc3RyaWN0aW9uPgotCQkJCQkJCQk8L3hzZDpzaW1wbGVUeXBlPgotCQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IlJlc2VuZEludGVydmFsIj4KLQkJCQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPkludGVnZXIgdmFsdWUgaW5kaWNhdGluZyB0aGUgZHVyYXRpb24gKGluIGhvdXJzKSBiZXR3ZWVuIHJlc2VuZCBhdHRlcHRzLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCTx4c2Q6c2ltcGxlVHlwZT4KLQkJCQkJCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOmludCI+Ci0JCQkJCQkJCQkJPHhzZDptaW5JbmNsdXNpdmUgdmFsdWU9IjEiLz4KLQkJCQkJCQkJCQk8eHNkOm1heEluY2x1c2l2ZSB2YWx1ZT0iOTk5OSIvPgotCQkJCQkJCQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JCQkJCQkJCTwveHNkOnNpbXBsZVR5cGU+Ci0JCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCQk8L3hzZDplbGVtZW50PgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJUcmFuc3BvcnRSZXRyaWVzIiBtaW5PY2N1cnM9IjAiPgotCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+U3BlY2lmaWVzIHRoZSBUcmFuc3BvcnQgcmV0cmllcyBvcHRpb24gYW5kIGludGVydmFsLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJkdXJhdGlvbiIgdHlwZT0ieHNkOmludGVnZXIiIHVzZT0ib3B0aW9uYWwiLz4KLQkJCQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImZhbGxvZmYiIHR5cGU9InhzZDppbnRlZ2VyIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkJ1c2luZXNzUHJvdG9jb2wiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+QmFzZSBkZWZpbml0aW9uIGZvciBhIGJ1c2luZXNzIHByb3RvY29sLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJUcmFuc3BvcnRSZWYiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCTwveHNkOnNlcXVlbmNlPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJidXNpbmVzc1Byb3RvY29sSWQiIHR5cGU9InhzZDpJRFJFRiIgdXNlPSJyZXF1aXJlZCIvPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJUcmFuc3BvcnRSZWYiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+QSByZWZlcmVuY2UgdG8gYSBUcmFuc3BvcnQgZGVmaW5lZCBlbHNld2hlcmUuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQk8L3hzZDplbGVtZW50PgotPC94c2Q6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvY3ljbG9uZS9UUE0ueHNkIGIvdjIvdGVzdC9jYXNlcy9zY2hlbWEvY3ljbG9uZS9UUE0ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OGZhZmZjLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2N5Y2xvbmUvVFBNLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM1OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KLTwhLS0JQ29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMsIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLTwhLS0JQWxsIHJpZ2h0cyByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLTwhLS0JVEhJUyBJUyBVTlBVQkxJU0hFRCBQUk9QUklFVEFSWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLTwhLS0JU09VUkNFIENPREUgT0YgQkVBIFN5c3RlbXMsIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLTwhLS0JVGhlIGNvcHlyaWdodCBub3RpY2UgYWJvdmUgZG9lcyBub3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLTwhLS0JZXZpZGVuY2UgYW55IGFjdHVhbCBvciBpbnRlbmRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLTwhLS0JcHVibGljYXRpb24gb2Ygc3VjaCBzb3VyY2UgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tICRJZDogVFBNLnhzZCx2IDEuMSAyMDAzLzA5LzI2IDIxOjIzOjM4IGVyaWN2YXMgRXhwICQgLS0+Ci08eHM6c2NoZW1hCi0gIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5iZWEuY29tLzIwMDMvMDMvd2xpL3RwbSIKLSAgeG1sbnM9Imh0dHA6Ly93d3cuYmVhLmNvbS8yMDAzLzAzL3dsaS90cG0iCi0gIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgeG1sbnM6ZHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiCi0gIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQk8eHM6aW1wb3J0Ci0gICAgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIgotICAgIHNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxkc2lnLWNvcmUveG1sZHNpZy1jb3JlLXNjaGVtYS54c2QiLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJ0cmFkaW5nLXBhcnRuZXItbWFuYWdlbWVudCI+Ci0JCTx4czphbm5vdGF0aW9uPgotCQkJPHhzOmRvY3VtZW50YXRpb24+VGhpcyBpcyB0aGUgcm9vdCBlbGVtZW50IGluIHRoZSBUUE0gcmVwb3NpdG9yeS48L3hzOmRvY3VtZW50YXRpb24+Ci0JCTwveHM6YW5ub3RhdGlvbj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IHJlZj0idHJhZGluZy1wYXJ0bmVyIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJzZXJ2aWNlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJtZXNzYWdlLXRyYWNraW5nLWRlZmF1bHQiIHVzZT0ib3B0aW9uYWwiPgotCQkJCTx4czpzaW1wbGVUeXBlPgotCQkJCQk8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Tk1UT0tFTiI+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik5PTkUiLz4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTUVUQURBVEEiLz4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQUxMIi8+Ci0JCQkJCTwveHM6cmVzdHJpY3Rpb24+Ci0JCQkJPC94czpzaW1wbGVUeXBlPgotCQkJPC94czphdHRyaWJ1dGU+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InNlY3VyZS1hdWRpdC1sb2dnaW5nIiB0eXBlPSJ4czpib29sZWFuIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InRlc3QtbW9kZSIgdHlwZT0ieHM6Ym9vbGVhbiIgdXNlPSJvcHRpb25hbCIvPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJ0cmFkaW5nLXBhcnRuZXIiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJhZGRyZXNzIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9ImV4dGVuZGVkLXByb3BlcnR5LXNldCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCTx4czplbGVtZW50IHJlZj0iY2xpZW50LWNlcnRpZmljYXRlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJCTx4czplbGVtZW50IHJlZj0ic2VydmVyLWNlcnRpZmljYXRlIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJPHhzOmVsZW1lbnQgcmVmPSJlbmNyeXB0aW9uLWNlcnRpZmljYXRlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJCTx4czplbGVtZW50IHJlZj0ic2lnbmF0dXJlLWNlcnRpZmljYXRlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPC94czpjaG9pY2U+Ci0gICAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJlYnhtbC1iaW5kaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJyb3NldHRhbmV0LWJpbmRpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9IndlYi1zZXJ2aWNlLWJpbmRpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPC94czpjaG9pY2U+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iZGVzY3JpcHRpb24iIHR5cGU9InhzOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJub3RlcyIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InR5cGUiIHVzZT0ib3B0aW9uYWwiPgotCQkJCTx4czpzaW1wbGVUeXBlPgotCQkJCQk8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Tk1UT0tFTiI+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkxPQ0FMIi8+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJFTU9URSIvPgotCQkJCQk8L3hzOnJlc3RyaWN0aW9uPgotCQkJCTwveHM6c2ltcGxlVHlwZT4KLQkJCTwveHM6YXR0cmlidXRlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJpcy1kZWZhdWx0IiB0eXBlPSJ4czpib29sZWFuIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImJ1c2luZXNzLWlkLXR5cGUiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJidXNpbmVzcy1pZCIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImVtYWlsIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0icGhvbmUiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJmYXgiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1c2VybmFtZSIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9ImFkZHJlc3MiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9ImV4dGVuZGVkLXByb3BlcnR5LXNldCI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCByZWY9InhtbC1lbGVtZW50IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iZGVzY3JpcHRpb24iIHR5cGU9InhzOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJub3RlcyIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9InhtbC1lbGVtZW50Ij4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IHJlZj0ieG1sLWF0dHJpYnV0ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ieG1sLWVsZW1lbnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJ4bWwtYXR0cmlidXRlIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0idmFsdWUiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJjbGllbnQtY2VydGlmaWNhdGUiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJkczpLZXlJbmZvIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJwYXNzd29yZCIgdHlwZT0ieHM6aGV4QmluYXJ5IiB1c2U9Im9wdGlvbmFsIi8+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9InNlcnZlci1jZXJ0aWZpY2F0ZSI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCByZWY9ImRzOktleUluZm8iIG1pbk9jY3Vycz0iMCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InBhc3N3b3JkIiB0eXBlPSJ4czpoZXhCaW5hcnkiIHVzZT0ib3B0aW9uYWwiLz4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iZW5jcnlwdGlvbi1jZXJ0aWZpY2F0ZSI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCByZWY9ImRzOktleUluZm8iIG1pbk9jY3Vycz0iMCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InBhc3N3b3JkIiB0eXBlPSJ4czpoZXhCaW5hcnkiIHVzZT0ib3B0aW9uYWwiLz4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0ic2lnbmF0dXJlLWNlcnRpZmljYXRlIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IHJlZj0iZHM6S2V5SW5mbyIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0icGFzc3dvcmQiIHR5cGU9InhzOmhleEJpbmFyeSIgdXNlPSJvcHRpb25hbCIvPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJlYnhtbC1iaW5kaW5nIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IHJlZj0ic2lnbmF0dXJlLXRyYW5zZm9ybXMiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0idHJhbnNwb3J0IiBtaW5PY2N1cnM9IjAiLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJidXNpbmVzcy1wcm90b2NvbC1uYW1lIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iYnVzaW5lc3MtcHJvdG9jb2wtdmVyc2lvbiIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImlzLWRlZmF1bHQiIHR5cGU9InhzOmJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iaXMtc2lnbmF0dXJlLXJlcXVpcmVkIiB0eXBlPSJ4czpib29sZWFuIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImlzLXJlY2VpcHQtc2lnbmF0dXJlLXJlcXVpcmVkIiB0eXBlPSJ4czpib29sZWFuIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InNpZ25hdHVyZS1jZXJ0aWZpY2F0ZS1uYW1lIiB0eXBlPSJyZWZlcmVuY2UiIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iZGVsaXZlcnktc2VtYW50aWNzIiB1c2U9Im9wdGlvbmFsIj4KLQkJCQk8eHM6c2ltcGxlVHlwZT4KLQkJCQkJPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkJlc3RFZmZvcnQiLz4KLSAgICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQkVTVEVGRk9SVCIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik9uY2VBbmRPbmx5T25jZSIvPgotICAgICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJPTkNFQU5ET05MWU9OQ0UiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJBdExlYXN0T25jZSIvPgotICAgICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJBVExFQVNUT05DRSIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkF0TW9zdE9uY2UiLz4KLSAgICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQVRNT1NUT05DRSIvPgotCQkJCQk8L3hzOnJlc3RyaWN0aW9uPgotCQkJCTwveHM6c2ltcGxlVHlwZT4KLQkJCTwveHM6YXR0cmlidXRlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZXRyaWVzIiB0eXBlPSJ4czpub25OZWdhdGl2ZUludGVnZXIiIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0icmV0cnktaW50ZXJ2YWwiIHR5cGU9InhzOm5vbk5lZ2F0aXZlSW50ZWdlciIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJwZXJzaXN0LWR1cmF0aW9uIiB0eXBlPSJ4czpub25OZWdhdGl2ZUludGVnZXIiIHVzZT0ib3B0aW9uYWwiLz4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0ic2lnbmF0dXJlLXRyYW5zZm9ybXMiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJ4cGF0aCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9InhwYXRoIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0icm9zZXR0YW5ldC1iaW5kaW5nIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IHJlZj0iZmFpbHVyZS1yZXBvcnQtYWRtaW5pc3RyYXRvciIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJmYWlsdXJlLW5vdGlmaWVyIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9InRyYW5zcG9ydCIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iYnVzaW5lc3MtcHJvdG9jb2wtbmFtZSIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImJ1c2luZXNzLXByb3RvY29sLXZlcnNpb24iIHR5cGU9InhzOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJpcy1kZWZhdWx0IiB0eXBlPSJ4czpib29sZWFuIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImVuY3J5cHRpb24tY2VydGlmaWNhdGUtbmFtZSIgdHlwZT0icmVmZXJlbmNlIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImNpcGhlci1hbGdvcml0aG0iIHVzZT0ib3B0aW9uYWwiPgotCQkJCTx4czpzaW1wbGVUeXBlPgotCQkJCQk8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Tk1UT0tFTiI+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik5PTkUiLz4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUkM1Ii8+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRFUyIvPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJUUklQTEVfREVTIi8+Ci0JCQkJCTwveHM6cmVzdHJpY3Rpb24+Ci0JCQkJPC94czpzaW1wbGVUeXBlPgotCQkJPC94czphdHRyaWJ1dGU+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImVuY3J5cHRpb24tbGV2ZWwiIHVzZT0ib3B0aW9uYWwiPgotCQkJCTx4czpzaW1wbGVUeXBlPgotCQkJCQk8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Tk1UT0tFTiI+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik5PTkUiLz4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUEFZTE9BRCIvPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFTlRJUkVfUEFZTE9BRCIvPgotCQkJCQk8L3hzOnJlc3RyaWN0aW9uPgotCQkJCTwveHM6c2ltcGxlVHlwZT4KLQkJCTwveHM6YXR0cmlidXRlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJpcy1zaWduYXR1cmUtcmVxdWlyZWQiIHR5cGU9InhzOmJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iaXMtcmVjZWlwdC1zaWduYXR1cmUtcmVxdWlyZWQiIHR5cGU9InhzOmJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ic2lnbmF0dXJlLWNlcnRpZmljYXRlLW5hbWUiIHR5cGU9InJlZmVyZW5jZSIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZXRyaWVzIiB0eXBlPSJ4czpub25OZWdhdGl2ZUludGVnZXIiIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0icmV0cnktaW50ZXJ2YWwiIHR5cGU9InhzOm5vbk5lZ2F0aXZlSW50ZWdlciIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJwcm9jZXNzLXRpbWVvdXQiIHR5cGU9InhzOm5vbk5lZ2F0aXZlSW50ZWdlciIgdXNlPSJvcHRpb25hbCIvPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJmYWlsdXJlLXJlcG9ydC1hZG1pbmlzdHJhdG9yIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0cmFkaW5nLXBhcnRuZXItbmFtZSIgdHlwZT0icmVmZXJlbmNlIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImJpbmRpbmctbmFtZSIgdHlwZT0icmVmZXJlbmNlIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9ImZhaWx1cmUtbm90aWZpZXIiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InRyYWRpbmctcGFydG5lci1uYW1lIiB0eXBlPSJyZWZlcmVuY2UiIHVzZT0icmVxdWlyZWQiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iYmluZGluZy1uYW1lIiB0eXBlPSJyZWZlcmVuY2UiIHVzZT0ib3B0aW9uYWwiLz4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0id2ViLXNlcnZpY2UtYmluZGluZyI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCByZWY9InRyYW5zcG9ydCIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0idHJhbnNwb3J0Ij4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IHJlZj0iYXV0aGVudGljYXRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InByb3RvY29sIiB1c2U9InJlcXVpcmVkIj4KLQkJCQk8eHM6c2ltcGxlVHlwZT4KLQkJCQkJPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJodHRwIi8+Ci0gICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkhUVFAiLz4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaHR0cHMiLz4KLSAgICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSFRUUFMiLz4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iam1zIi8+Ci0gICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkpNUyIvPgotCQkJCQk8L3hzOnJlc3RyaWN0aW9uPgotCQkJCTwveHM6c2ltcGxlVHlwZT4KLQkJCTwveHM6YXR0cmlidXRlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJwcm90b2NvbC12ZXJzaW9uIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iZW5kcG9pbnQiIHR5cGU9InhzOmFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJhdXRoZW50aWNhdGlvbiI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iY2xpZW50LXBhcnRuZXItbmFtZSIgdHlwZT0icmVmZXJlbmNlIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImNsaWVudC1hdXRoZW50aWNhdGlvbiIgdXNlPSJvcHRpb25hbCI+Ci0JCQkJPHhzOnNpbXBsZVR5cGU+Ci0JCQkJCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTk9ORSIvPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJCQVNJQyIvPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTU0xfQ0VSVCIvPgotCQkJCQk8L3hzOnJlc3RyaWN0aW9uPgotCQkJCTwveHM6c2ltcGxlVHlwZT4KLQkJCTwveHM6YXR0cmlidXRlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1c2VybmFtZSIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InBhc3N3b3JkIiB0eXBlPSJ4czpoZXhCaW5hcnkiIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iY2xpZW50LWNlcnRpZmljYXRlLW5hbWUiIHR5cGU9InJlZmVyZW5jZSIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZXJ2ZXItYXV0aGVudGljYXRpb24iIHVzZT0ib3B0aW9uYWwiPgotCQkJCTx4czpzaW1wbGVUeXBlPgotCQkJCQk8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Tk1UT0tFTiI+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik5PTkUiLz4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU1NMX0NFUlRfTVVUVUFMIi8+Ci0JCQkJCTwveHM6cmVzdHJpY3Rpb24+Ci0JCQkJPC94czpzaW1wbGVUeXBlPgotCQkJPC94czphdHRyaWJ1dGU+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InNlcnZlci1jZXJ0aWZpY2F0ZS1uYW1lIiB0eXBlPSJyZWZlcmVuY2UiIHVzZT0ib3B0aW9uYWwiLz4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0ic2VydmljZSI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCByZWY9InNlcnZpY2UtcHJvZmlsZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0icm9zZXR0YW5ldC1zZXJ2aWNlLWRlZmF1bHRzIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iZGVzY3JpcHRpb24iIHR5cGU9InhzOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJub3RlcyIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InNlcnZpY2UtdHlwZSIgdXNlPSJvcHRpb25hbCI+Ci0JCQkJPHhzOnNpbXBsZVR5cGU+Ci0JCQkJCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iV0VCU0VSVklDRSIvPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJQUk9DRVNTIi8+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlNFUlZJQ0VDT05UUk9MIi8+Ci0JCQkJCTwveHM6cmVzdHJpY3Rpb24+Ci0JCQkJPC94czpzaW1wbGVUeXBlPgotCQkJPC94czphdHRyaWJ1dGU+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImJ1c2luZXNzLXByb3RvY29sIiB1c2U9Im9wdGlvbmFsIj4KLQkJCQk8eHM6c2ltcGxlVHlwZT4KLQkJCQkJPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJXRUJTRVJWSUNFIi8+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkVCWE1MIi8+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJPU0VUVEFORVQiLz4KLQkJCQkJPC94czpyZXN0cmljdGlvbj4KLQkJCQk8L3hzOnNpbXBsZVR5cGU+Ci0JCQk8L3hzOmF0dHJpYnV0ZT4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0ic2VydmljZS1wcm9maWxlIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJsb2NhbC10cmFkaW5nLXBhcnRuZXIiIHR5cGU9InJlZmVyZW5jZSIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJsb2NhbC1iaW5kaW5nIiB0eXBlPSJyZWZlcmVuY2UiIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iZXh0ZXJuYWwtdHJhZGluZy1wYXJ0bmVyIiB0eXBlPSJyZWZlcmVuY2UiIHVzZT0icmVxdWlyZWQiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iZXh0ZXJuYWwtYmluZGluZyIgdHlwZT0icmVmZXJlbmNlIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InN0YXR1cyIgdXNlPSJvcHRpb25hbCI+Ci0JCQkJPHhzOnNpbXBsZVR5cGU+Ci0JCQkJCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRU5BQkxFRCIvPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJESVNBQkxFRCIvPgotCQkJCQk8L3hzOnJlc3RyaWN0aW9uPgotCQkJCTwveHM6c2ltcGxlVHlwZT4KLQkJCTwveHM6YXR0cmlidXRlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJtZXNzYWdlLXRyYWNraW5nIiB1c2U9Im9wdGlvbmFsIj4KLQkJCQk8eHM6c2ltcGxlVHlwZT4KLQkJCQkJPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJOT05FIi8+Ci0gICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRFRkFVTFQiLz4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTUVUQURBVEEiLz4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQUxMIi8+Ci0JCQkJCTwveHM6cmVzdHJpY3Rpb24+Ci0JCQkJPC94czpzaW1wbGVUeXBlPgotCQkJPC94czphdHRyaWJ1dGU+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9InJvc2V0dGFuZXQtc2VydmljZS1kZWZhdWx0cyI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ic2VydmljZS1jb250ZW50LXNjaGVtYSIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InVzZS1kdGQtdmFsaWRhdGlvbiIgdHlwZT0ieHM6Ym9vbGVhbiIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2YWxpZGF0ZS1zZXJ2aWNlLWNvbnRlbnQiIHR5cGU9InhzOmJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0idmFsaWRhdGUtc2VydmljZS1oZWFkZXIiIHR5cGU9InhzOmJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiLz4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOnNpbXBsZVR5cGUgbmFtZT0icmVmZXJlbmNlIj4KLQkJPHhzOmFubm90YXRpb24+Ci0JCQk8eHM6ZG9jdW1lbnRhdGlvbj5SZWZlcmVuY2UgdG8gYW5vdGhlciBlbGVtZW50IGluIHRoZSBUUE0gcmVwb3NpdG9yeS48L3hzOmRvY3VtZW50YXRpb24+Ci0JCTwveHM6YW5ub3RhdGlvbj4KLQkJPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyIvPgotCTwveHM6c2ltcGxlVHlwZT4KLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvZHluYW1pYy9keW50ZXN0LnhtbCBiL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2R5bmFtaWMvZHludGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjZjE0MzMuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvZHluYW1pYy9keW50ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPGR0OndyYXBwZWRpbnN0YW5jZSB4bWxuczpkdD0iaHR0cDovL29wZW51cmkub3JnL3Rlc3QvZHludGVzdCI+Ci0gIDx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9vcGVudXJpLm9yZy90ZXN0L3F1YW50Ij4KLSAgICA8eHM6ZWxlbWVudCBuYW1lPSJxdWFudGl0eSIgdHlwZT0ieHM6aW50Ii8+Ci0gIDwveHM6c2NoZW1hPgotICA8cXQ6cXVhbnRpdHkgeG1sbnM6cXQ9Imh0dHA6Ly9vcGVudXJpLm9yZy90ZXN0L3F1YW50Ij4KLSAgICA0MgotICA8L3F0OnF1YW50aXR5PgotPC9kdDp3cmFwcGVkaW5zdGFuY2U+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvZHluYW1pYy9keW50ZXN0LnhzZCBiL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2R5bmFtaWMvZHludGVzdC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzYTMwMDcuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvZHluYW1pYy9keW50ZXN0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTx4czpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vb3BlbnVyaS5vcmcvdGVzdC9keW50ZXN0IgotICBibG9ja0RlZmF1bHQ9IiNhbGwiCi0gIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotICB2ZXJzaW9uPSIxLjAiCi0gIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgeG1sOmxhbmc9IkVOIj4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJ3cmFwcGVkaW5zdGFuY2UiPgotICAgIDx4czpjb21wbGV4VHlwZT4KLSAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czpzY2hlbWEiLz4KLSAgICAgICAgPHhzOmFueSBuYW1lc3BhY2U9IiMjYW55IiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICA8L3hzOmNvbXBsZXhUeXBlPgotICA8L3hzOmVsZW1lbnQ+Ci0KLTwveHM6c2NoZW1hPgotCmRpZmYgLS1naXQgYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9keW5hbWljL2R5bnRlc3QyLnhtbCBiL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2R5bmFtaWMvZHludGVzdDIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjYyZTRkLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2R5bmFtaWMvZHludGVzdDIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08ZHQ6d3JhcHBlZHdpbGRjYXJkIHhtbG5zOmR0PSJodHRwOi8vb3BlbnVyaS5vcmcvdGVzdC9keW50ZXN0Ij4KLSAgPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL29wZW51cmkub3JnL3Rlc3QvcXVhbnQiPgotICAgIDx4czplbGVtZW50IG5hbWU9InF1YW50aXR5IiB0eXBlPSJ4czppbnQiLz4KLSAgPC94czpzY2hlbWE+Ci08L2R0OndyYXBwZWR3aWxkY2FyZD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9keW5hbWljL2R5bnRlc3QyLnhzZCBiL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2R5bmFtaWMvZHludGVzdDIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGM0ZTM3Li4wMDAwMDAwCi0tLSBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2R5bmFtaWMvZHludGVzdDIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPHhzOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9vcGVudXJpLm9yZy90ZXN0L2R5bnRlc3QiCi0gIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgYmxvY2tEZWZhdWx0PSIjYWxsIgotICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLSAgdmVyc2lvbj0iMS4wIgotICB4bWw6bGFuZz0iRU4iPgotCi0gIDx4czplbGVtZW50IG5hbWU9IndyYXBwZWR3aWxkY2FyZCI+Ci0gICAgPHhzOmNvbXBsZXhUeXBlPgotICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICA8eHM6YW55IG5hbWVzcGFjZT0iIyNhbnkiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8L3hzOnNlcXVlbmNlPgotICAgIDwveHM6Y29tcGxleFR5cGU+Ci0gIDwveHM6ZWxlbWVudD4KLQotPC94czpzY2hlbWE+Ci0KZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2ltcy9JTVNfeG1sLnhzZCBiL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2ltcy9JTVNfeG1sLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGJiNGRkYy4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9pbXMvSU1TX3htbC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLSBmaWxlbmFtZT1pbXNfeG1sLnhzZCAtLT4KLTx4c2Q6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InVucXVhbGlmaWVkIj4KLQk8IS0tIDIwMDEtMDItMjIgZWRpdGVkIGJ5IFRob21hcyBXYXNvbiBJTVMgR2xvYmFsIExlYXJuaW5nIENvbnNvcnRpdW0sIEluYy4gLS0+Ci0JPHhzZDphbm5vdGF0aW9uPgotCQk8eHNkOmRvY3VtZW50YXRpb24+SW4gbmFtZXNwYWNlLWF3YXJlIFhNTCBwcm9jZXNzb3JzLCB0aGUgJnF1b3Q7eG1sJnF1b3Q7IHByZWZpeCBpcyBib3VuZCB0byB0aGUgbmFtZXNwYWNlIG5hbWUgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTx4c2Q6ZG9jdW1lbnRhdGlvbj5EbyBub3QgcmVmZXJlbmNlIHRoaXMgZmlsZSBpbiBYTUwgaW5zdGFuY2VzPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQk8L3hzZDphbm5vdGF0aW9uPgotCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImxhbmciIHR5cGU9InhzZDpsYW5ndWFnZSI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5SZWZlcnMgdG8gdW5pdmVyc2FsICBYTUwgMS4wIGxhbmcgYXR0cmlidXRlPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQk8L3hzZDphdHRyaWJ1dGU+Ci0JPHhzZDphdHRyaWJ1dGUgbmFtZT0iYmFzZSIgdHlwZT0ieHNkOmFueVVSSSI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5SZWZlcnMgdG8gWE1MIEJhc2U6IGh0dHA6Ly93d3cudzMub3JnL1RSL3htbGJhc2U8L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCTwveHNkOmF0dHJpYnV0ZT4KLQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJsaW5rIiB0eXBlPSJ4c2Q6YW55VVJJIi8+Ci08L3hzZDpzY2hlbWE+CmRpZmYgLS1naXQgYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9pbXMvaW1zbWRfdjFwMnAyLnhzZCBiL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2ltcy9pbXNtZF92MXAycDIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTIxZjdjLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2ltcy9pbXNtZF92MXAycDIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNTg1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuaW1zZ2xvYmFsLm9yZy94c2QvaW1zbWRfdjFwMiIgCi0gICAgICAgICAgICB4bWxuczp4PSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiIAotICAgICAgICAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiAKLSAgICAgICAgICAgIHhtbG5zPSJodHRwOi8vd3d3Lmltc2dsb2JhbC5vcmcveHNkL2ltc21kX3YxcDIiIAotICAgICAgICAgICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIAotICAgICAgICAgICAgdmVyc2lvbj0iSU1TIE1EIDEuMi4zIj4KLQotICAgPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiIHNjaGVtYUxvY2F0aW9uPSJpbXNfeG1sLnhzZCIvPiAKLSAgIAotICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKiAtLT4KLSAgIDwhLS0gKiogQ2hhbmdlIEhpc3RvcnkgKiogLS0+Ci0gICA8IS0tICoqKioqKioqKioqKioqKioqKioqIC0tPgotICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPjIwMDEtMDQtMjYgVC5ELldhc29uLiBJTVMgbWV0YS1kYXRhIDEuMiBYTUwtU2NoZW1hLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPjIwMDEtMDYtMDcgUy5FLlRocm9wcC4gQ2hhbmdlZCB0aGUgbXVsdGlwbGljaXR5IG9uIGFsbCBlbGVtZW50cyB0byBtYXRjaCB0aGUgICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPkZpbmFsIDEuMiBCaW5kaW5nIFNwZWNpZmljYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPkNoYW5nZWQgYWxsIGVsZW1lbnRzIHRoYXQgdXNlIHRoZSBsYW5nc3RyaW5nVHlwZSB0byBhIG11bHRpcGxpY3kgb2YgMSBvciBtb3JlICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPkNoYW5nZWQgY2VudGl0eSBpbiB0aGUgY29udHJpYnV0ZSBlbGVtZW50IHRvIGhhdmUgYSBtdWx0aXBsaWNpdHkgb2YgMCBvciBtb3JlLiAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPkNoYW5nZWQgdGhlIHJlcXVpcmVtZW50IGVsZW1lbnQgdG8gaGF2ZSBhIG11bHRpcGxpY2l0eSBvZiAwIG9yIG1vcmUuICAgICAgICAgICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPiAyMDAxLTA3LTI1IFNjaGF3biBUaHJvcHAuICBVcGRhdGVzIHRvIGJyaW5nIHRoZSBYU0QgdXAgdG8gc3BlZWQgd2l0aCB0aGUgVzNDICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPiBYTUwgU2NoZW1hIFJlY29tbWVuZGF0aW9uLiAgVGhlIGZvbGxvd2luZyBjaGFuZ2VzIHdlcmUgbWFkZTogQ2hhbmdlIHRoZSAgICAgICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPiBuYW1lc3BhY2UgdG8gcmVmZXJlbmNlIHRoZSA1LzIvMjAwMSBXM0MgWE1MIFNjaGVtYSBSZWNvbW1lbmRhdGlvbix0aGUgYmFzZSAgICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPiB0eXBlIGZvciB0aGUgZHVydGltZVR5cGUsIHNpbXBsZVR5cGUsIHdhcyBjaGFuZ2VkIGZyb20gdGltZUR1cmF0aW9uIHRvIGR1cmF0aW9uLiAgICA8L3hzZDpkb2N1bWVudGF0aW9uPiAKLSAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4gQW55IGF0dHJpYnV0ZSBkZWNsYXJhdGlvbnMgdGhhdCBoYXZlIHVzZT0iZGVmYXVsdCIgaGFkIHRvIGNoYW5nZSB0byB1c2U9Im9wdGlvbmFsIiAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4gLSBhdHRyLnR5cGUuICBBbnkgYXR0cmlidXRlIGRlY2xhcmF0aW9ucyB0aGF0IGhhdmUgdmFsdWUgPSJzb21ldmFsdWUiIGhhZCB0byBjaGFuZ2UgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4gdG8gZGVmYXVsdCA9ICJzb21ldmFsdWUiIC0gYXR0ci50eXBlIChVUkkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4gMjAwMS0wOS0wNCBTY2hhd24gVGhyb3BwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4gQ2hhbmdlZCB0aGUgdGFyZ2V0TmFtZXNwYWNlIGFuZCBuYW1lc3BhY2Ugb2Ygc2NoZW1hIHRvIHJlZmxlY3QgdmVyc2lvbiBjaGFuZ2UgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4gMjAwMS0xMS0wNCBDaHJpcyBNb2ZmYXR0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4gIDEuIENoYW5nZXMgdG8gZW5hYmxlIHRoZSBzY2hlbWEgdG8gd29yayB3aXRoIGNvbW1lcmNpYWwgWE1MIFRvb2xzICAgICAgICAgICAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4gICAgIGEuIFJlZmVyIHRvIHRoZSB4bWwgbmFtZXNwYWNlIHVzaW5nIHRoZSAieCIgYWJicmV2aWF0aW9uIGluc3RlYWQgb2YgInhtbCIgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4gICAgIGIuIFJlbW92ZSB1bmVjZXNzYXJ5IG5vbi1kZXRlcm1pbmlzdGljIGNvbnN0cnVjdHMgZnJvbSBzY2hlbWEuICAgICAgICAgICAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4gICAgICAgIGkuZS4gY2hhbmdlIG9jY3VycmVuY2VzIG9mICIjYW55IiB0byAiI290aGVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4gIDIuIFJldmVydCB0byBvcmlnaW5hbCBJTVMgTUQgdmVyc2lvbiAxLjIgbmFtZXNwYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4gICAgIGkuZS4gImh0dHA6Ly93d3cuaW1zZ2xvYmFsLm9yZy94c2QvaW1zbWRfdjFwMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4gICAgIFRoaXMgY2hhbmdlIGRvbmUgdG8gc3VwcG9ydCB0aGUgZGVjaXNpb24gdG8gb25seSBjaGFuZ2UgdGhlIFhNTCBuYW1lc3BhY2Ugd2l0aCAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4gICAgIG1ham9yIHJldmlzaW9ucyBvZiB0aGUgc3BlY2lmaWNhdGlvbiBpZS4gd2hlcmUgdGhlIGluZm9ybWF0aW9uIG1vZGVsIG9yIGJpbmRpbmcgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4gICAgIGNoYW5nZXMgKGFzIG9wcG9zZWQgdG8gYWRkcmVzc2luZyBidWdzIG9yIG9taXNzaW9ucykuIEEgc3RhYmxlIG5hbWVzcGFjZSBpcyAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4gICAgIG5lY2Vzc2FyeSB0byB0aGUgaW5jcmVhc2luZyBudW1iZXIgb2YgaW1wbGVtZW50b3JzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4gIDMuIENoYW5nZWQgbmFtZSBvZiBzY2hlbWEgZmlsZSB0byAiaW1zbWRfdjFwMnAyLnhzZCIgYW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4gICAgIHZlcnNpb24gYXR0cmlidXRlIHRvICJJTVMgTUQgMS4yLjMiIHRvIHJlZmxlY3QgbWlub3IgdmVyc2lvbiBjaGFuZ2UgICAgICAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgIDwveHNkOmFubm90YXRpb24+Ci0KLSAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotICAgPCEtLSAqKiBBdHRyaWJ1dGUgRGVjbGFyYXRpb24gKiogLS0+Ci0gICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotICAgPHhzZDphdHRyaWJ1dGVHcm91cCBuYW1lPSJhdHRyLnR5cGUiPgotICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0idHlwZSIgdXNlPSJvcHRpb25hbCIgZGVmYXVsdD0iVVJJIj4KLSAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUkkiLz4KLSAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRFWFQiLz4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOmF0dHJpYnV0ZT4KLSAgIDwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCi0gICA8eHNkOmdyb3VwIG5hbWU9ImdycC5hbnkiPgotICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPkFueSBuYW1lc3BhY2VkIGVsZW1lbnQgZnJvbSBhbnkgbmFtZXNwYWNlIG1heSBiZSB1c2VkIGZvciBhbiAmcXVvdDthbnkmcXVvdDsgZWxlbWVudC4gIFRoZSBuYW1lc3BhY2UgZm9yIHRoZSBpbXBvcnRlZCBlbGVtZW50IG11c3QgYmUgZGVmaW5lZCBpbiB0aGUgaW5zdGFuY2UsIGFuZCB0aGUgc2NoZW1hIG11c3QgYmUgaW1wb3J0ZWQuICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICA8eHNkOmFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ic3RyaWN0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgIDwveHNkOmdyb3VwPgotCi0gICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0gICA8IS0tICoqIEVsZW1lbnQgRGVjbGFyYXRpb24gKiogLS0+Ci0gICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLSAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJhZ2dyZWdhdGlvbmxldmVsIiB0eXBlPSJhZ2dyZWdhdGlvbmxldmVsVHlwZSIvPgotICAgPHhzZDplbGVtZW50IG5hbWU9ImFubm90YXRpb24iIHR5cGU9ImFubm90YXRpb25UeXBlIi8+Ci0gICA8eHNkOmVsZW1lbnQgbmFtZT0iY2F0YWxvZ2VudHJ5IiB0eXBlPSJjYXRhbG9nZW50cnlUeXBlIi8+Ci0gICA8eHNkOmVsZW1lbnQgbmFtZT0iY2F0YWxvZyIgdHlwZT0iY2F0YWxvZ1R5cGUiLz4KLSAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJjZW50aXR5IiB0eXBlPSJjZW50aXR5VHlwZSIvPgotICAgPHhzZDplbGVtZW50IG5hbWU9ImNsYXNzaWZpY2F0aW9uIiB0eXBlPSJjbGFzc2lmaWNhdGlvblR5cGUiLz4KLSAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJjb250ZXh0IiB0eXBlPSJjb250ZXh0VHlwZSIvPgotICAgPHhzZDplbGVtZW50IG5hbWU9ImNvbnRyaWJ1dGUiIHR5cGU9ImNvbnRyaWJ1dGVUeXBlIi8+Ci0gICA8eHNkOmVsZW1lbnQgbmFtZT0iY29weXJpZ2h0YW5kb3RoZXJyZXN0cmljdGlvbnMiIHR5cGU9ImNvcHlyaWdodGFuZG90aGVycmVzdHJpY3Rpb25zVHlwZSIvPgotICAgPHhzZDplbGVtZW50IG5hbWU9ImNvc3QiIHR5cGU9ImNvc3RUeXBlIi8+Ci0gICA8eHNkOmVsZW1lbnQgbmFtZT0iY292ZXJhZ2UiIHR5cGU9ImNvdmVyYWdlVHlwZSIvPgotICAgPHhzZDplbGVtZW50IG5hbWU9ImRhdGUiIHR5cGU9ImRhdGVUeXBlIi8+Ci0gICA8eHNkOmVsZW1lbnQgbmFtZT0iZGF0ZXRpbWUiIHR5cGU9ImRhdGV0aW1lVHlwZSIvPgotICAgPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIiB0eXBlPSJkZXNjcmlwdGlvblR5cGUiLz4KLSAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkaWZmaWN1bHR5IiB0eXBlPSJkaWZmaWN1bHR5VHlwZSIvPgotICAgPHhzZDplbGVtZW50IG5hbWU9ImVkdWNhdGlvbmFsIiB0eXBlPSJlZHVjYXRpb25hbFR5cGUiLz4KLSAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJlbnRyeSIgdHlwZT0iZW50cnlUeXBlIi8+Ci0gICA8eHNkOmVsZW1lbnQgbmFtZT0iZm9ybWF0IiB0eXBlPSJmb3JtYXRUeXBlIi8+Ci0gICA8eHNkOmVsZW1lbnQgbmFtZT0iZ2VuZXJhbCIgdHlwZT0iZ2VuZXJhbFR5cGUiLz4KLSAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJpZGVudGlmaWVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICA8eHNkOmVsZW1lbnQgbmFtZT0iaW50ZW5kZWRlbmR1c2Vycm9sZSIgdHlwZT0iaW50ZW5kZWRlbmR1c2Vycm9sZVR5cGUiLz4KLSAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJpbnRlcmFjdGl2aXR5bGV2ZWwiIHR5cGU9ImludGVyYWN0aXZpdHlsZXZlbFR5cGUiLz4KLSAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJpbnRlcmFjdGl2aXR5dHlwZSIgdHlwZT0iaW50ZXJhY3Rpdml0eXR5cGVUeXBlIi8+Ci0gICA8eHNkOmVsZW1lbnQgbmFtZT0ia2V5d29yZCIgdHlwZT0ia2V5d29yZFR5cGUiLz4KLSAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJraW5kIiB0eXBlPSJraW5kVHlwZSIvPgotICAgPHhzZDplbGVtZW50IG5hbWU9ImxhbmdzdHJpbmciIHR5cGU9ImxhbmdzdHJpbmdUeXBlIi8+Ci0gICA8eHNkOmVsZW1lbnQgbmFtZT0ibGFuZ3VhZ2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJsZWFybmluZ3Jlc291cmNldHlwZSIgdHlwZT0ibGVhcm5pbmdyZXNvdXJjZXR5cGVUeXBlIi8+Ci0gICA8eHNkOmVsZW1lbnQgbmFtZT0ibGlmZWN5Y2xlIiB0eXBlPSJsaWZlY3ljbGVUeXBlIi8+Ci0gICA8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYXRpb24iIHR5cGU9ImxvY2F0aW9uVHlwZSIvPgotICAgPHhzZDplbGVtZW50IG5hbWU9ImxvbSIgdHlwZT0ibG9tVHlwZSIvPgotICAgPHhzZDplbGVtZW50IG5hbWU9Im1heGltdW12ZXJzaW9uIiB0eXBlPSJtaW5pbXVtdmVyc2lvblR5cGUiLz4KLSAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJtZXRhZGF0YXNjaGVtZSIgdHlwZT0ibWV0YWRhdGFzY2hlbWVUeXBlIi8+Ci0gICA8eHNkOmVsZW1lbnQgbmFtZT0ibWV0YW1ldGFkYXRhIiB0eXBlPSJtZXRhbWV0YWRhdGFUeXBlIi8+Ci0gICA8eHNkOmVsZW1lbnQgbmFtZT0ibWluaW11bXZlcnNpb24iIHR5cGU9Im1heGltdW12ZXJzaW9uVHlwZSIvPgotICAgPHhzZDplbGVtZW50IG5hbWU9Im5hbWUiIHR5cGU9Im5hbWVUeXBlIi8+Ci0gICA8eHNkOmVsZW1lbnQgbmFtZT0icHVycG9zZSIgdHlwZT0icHVycG9zZVR5cGUiLz4KLSAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyZWxhdGlvbiIgdHlwZT0icmVsYXRpb25UeXBlIi8+Ci0gICA8eHNkOmVsZW1lbnQgbmFtZT0icmVxdWlyZW1lbnQiIHR5cGU9InJlcXVpcmVtZW50VHlwZSIvPgotICAgPHhzZDplbGVtZW50IG5hbWU9InJlc291cmNlIiB0eXBlPSJyZXNvdXJjZVR5cGUiLz4KLSAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyaWdodHMiIHR5cGU9InJpZ2h0c1R5cGUiLz4KLSAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyb2xlIiB0eXBlPSJyb2xlVHlwZSIvPgotICAgPHhzZDplbGVtZW50IG5hbWU9InNlbWFudGljZGVuc2l0eSIgdHlwZT0ic2VtYW50aWNkZW5zaXR5VHlwZSIvPgotICAgPHhzZDplbGVtZW50IG5hbWU9InNpemUiIHR5cGU9InNpemVUeXBlIi8+Ci0gICA8eHNkOmVsZW1lbnQgbmFtZT0ic291cmNlIiB0eXBlPSJzb3VyY2VUeXBlIi8+Ci0gICA8eHNkOmVsZW1lbnQgbmFtZT0ic3RhdHVzIiB0eXBlPSJzdGF0dXNUeXBlIi8+Ci0gICA8eHNkOmVsZW1lbnQgbmFtZT0ic3RydWN0dXJlIiB0eXBlPSJzdHJ1Y3R1cmVUeXBlIi8+Ci0gICA8eHNkOmVsZW1lbnQgbmFtZT0idGF4b24iIHR5cGU9InRheG9uVHlwZSIvPgotICAgPHhzZDplbGVtZW50IG5hbWU9InRheG9ucGF0aCIgdHlwZT0idGF4b25wYXRoVHlwZSIvPgotICAgPHhzZDplbGVtZW50IG5hbWU9InRlY2huaWNhbCIgdHlwZT0idGVjaG5pY2FsVHlwZSIvPgotICAgPHhzZDplbGVtZW50IG5hbWU9InRpdGxlIiB0eXBlPSJ0aXRsZVR5cGUiLz4KLSAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJ0eXBlIiB0eXBlPSJ0eXBlVHlwZSIvPgotICAgPHhzZDplbGVtZW50IG5hbWU9InR5cGljYWxhZ2VyYW5nZSIgdHlwZT0idHlwaWNhbGFnZXJhbmdlVHlwZSIvPgotICAgPHhzZDplbGVtZW50IG5hbWU9InR5cGljYWxsZWFybmluZ3RpbWUiIHR5cGU9InR5cGljYWxsZWFybmluZ3RpbWVUeXBlIi8+Ci0gICA8eHNkOmVsZW1lbnQgbmFtZT0idmFsdWUiIHR5cGU9InZhbHVlVHlwZSIvPgotICAgPHhzZDplbGVtZW50IG5hbWU9InBlcnNvbiIgdHlwZT0icGVyc29uVHlwZSIvPgotICAgPHhzZDplbGVtZW50IG5hbWU9InZjYXJkIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICA8eHNkOmVsZW1lbnQgbmFtZT0idmVyc2lvbiIgdHlwZT0idmVyc2lvblR5cGUiLz4KLSAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJpbnN0YWxsYXRpb25yZW1hcmtzIiB0eXBlPSJpbnN0YWxsYXRpb25yZW1hcmtzVHlwZSIvPgotICAgPHhzZDplbGVtZW50IG5hbWU9Im90aGVycGxhdGZvcm1yZXF1aXJlbWVudHMiIHR5cGU9Im90aGVycGxhdGZvcm1yZXF1aXJlbWVudHNUeXBlIi8+Ci0gICA8eHNkOmVsZW1lbnQgbmFtZT0iZHVyYXRpb24iIHR5cGU9ImR1cmF0aW9uVHlwZSIvPgotICAgPHhzZDplbGVtZW50IG5hbWU9ImlkIiB0eXBlPSJpZFR5cGUiLz4KLQotICAgPCEtLSAqKioqKioqKioqKioqKioqKioqIC0tPgotICAgPCEtLSAqKiBDb21wbGV4IFR5cGVzICoqIC0tPgotICAgPCEtLSAqKioqKioqKioqKioqKioqKioqIC0tPgotCi0gICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImFnZ3JlZ2F0aW9ubGV2ZWxUeXBlIj4KLSAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJzb3VyY2UiLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9InZhbHVlIi8+Ci0gICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgCi0gICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImFubm90YXRpb25UeXBlIiBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0icGVyc29uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9ImRhdGUiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iZGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgPHhzZDpncm91cCByZWY9ImdycC5hbnkiLz4KLSAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAKLSAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iY2F0YWxvZ2VudHJ5VHlwZSIgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9ImNhdGFsb2ciLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9ImVudHJ5Ii8+Ci0gICAgICAgICA8eHNkOmdyb3VwIHJlZj0iZ3JwLmFueSIvPgotICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgIAotICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJjZW50aXR5VHlwZSI+Ci0gICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0idmNhcmQiLz4KLSAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAKLSAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iY2xhc3NpZmljYXRpb25UeXBlIiBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0icHVycG9zZSIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJ0YXhvbnBhdGgiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9ImRlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9ImtleXdvcmQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDx4c2Q6Z3JvdXAgcmVmPSJncnAuYW55Ii8+Ci0gICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgCi0gICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImNvbnRleHRUeXBlIj4KLSAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJzb3VyY2UiLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9InZhbHVlIi8+Ci0gICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgCi0gICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImNvbnRyaWJ1dGVUeXBlIiBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0icm9sZSIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iY2VudGl0eSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iZGF0ZSIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICA8eHNkOmdyb3VwIHJlZj0iZ3JwLmFueSIvPgotICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgIAotICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJjb3B5cmlnaHRhbmRvdGhlcnJlc3RyaWN0aW9uc1R5cGUiPgotICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9InNvdXJjZSIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0idmFsdWUiLz4KLSAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAKLSAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iY29zdFR5cGUiPgotICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9InNvdXJjZSIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0idmFsdWUiLz4KLSAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAKLSAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iY292ZXJhZ2VUeXBlIj4KLSAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJsYW5nc3RyaW5nIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgCi0gICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImRhdGVUeXBlIj4KLSAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJkYXRldGltZSIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJkZXNjcmlwdGlvbiIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgCi0gICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImRlc2NyaXB0aW9uVHlwZSI+Ci0gICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0ibGFuZ3N0cmluZyIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgIAotICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJkaWZmaWN1bHR5VHlwZSI+Ci0gICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0ic291cmNlIi8+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJ2YWx1ZSIvPgotICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgIAotICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJkdXJhdGlvblR5cGUiPgotICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9ImRhdGV0aW1lIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9ImRlc2NyaXB0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAKLSAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iZWR1Y2F0aW9uYWxUeXBlIiBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iaW50ZXJhY3Rpdml0eXR5cGUiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0ibGVhcm5pbmdyZXNvdXJjZXR5cGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9ImludGVyYWN0aXZpdHlsZXZlbCIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJzZW1hbnRpY2RlbnNpdHkiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iaW50ZW5kZWRlbmR1c2Vycm9sZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iY29udGV4dCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0idHlwaWNhbGFnZXJhbmdlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJkaWZmaWN1bHR5IiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9InR5cGljYWxsZWFybmluZ3RpbWUiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iZGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0ibGFuZ3VhZ2UiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDx4c2Q6Z3JvdXAgcmVmPSJncnAuYW55Ii8+Ci0gICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgCi0gICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImVudHJ5VHlwZSI+Ci0gICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0ibGFuZ3N0cmluZyIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgIAotICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJnZW5lcmFsVHlwZSIgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9ImlkZW50aWZpZXIiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0idGl0bGUiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iY2F0YWxvZ2VudHJ5IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJsYW5ndWFnZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iZGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9ImtleXdvcmQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9ImNvdmVyYWdlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJzdHJ1Y3R1cmUiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iYWdncmVnYXRpb25sZXZlbCIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICA8eHNkOmdyb3VwIHJlZj0iZ3JwLmFueSIvPgotICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgIAotICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJpbnN0YWxsYXRpb25yZW1hcmtzVHlwZSI+Ci0gICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0ibGFuZ3N0cmluZyIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgIAotICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJpbnRlbmRlZGVuZHVzZXJyb2xlVHlwZSI+Ci0gICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0ic291cmNlIi8+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJ2YWx1ZSIvPgotICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgIAotICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJpbnRlcmFjdGl2aXR5bGV2ZWxUeXBlIj4KLSAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJzb3VyY2UiLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9InZhbHVlIi8+Ci0gICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgCi0gICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImludGVyYWN0aXZpdHl0eXBlVHlwZSI+Ci0gICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0ic291cmNlIi8+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJ2YWx1ZSIvPgotICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgIAotICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJrZXl3b3JkVHlwZSI+Ci0gICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0ibGFuZ3N0cmluZyIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgIAotICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJraW5kVHlwZSI+Ci0gICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0ic291cmNlIi8+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJ2YWx1ZSIvPgotICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgIAotICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJsYW5nc3RyaW5nVHlwZSI+Ci0gICAgICA8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIHJlZj0ieDpsYW5nIi8+Ci0gICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAKLSAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ibGVhcm5pbmdyZXNvdXJjZXR5cGVUeXBlIj4KLSAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJzb3VyY2UiLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9InZhbHVlIi8+Ci0gICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgCi0gICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImxpZmVjeWNsZVR5cGUiIG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJ2ZXJzaW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9InN0YXR1cyIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJjb250cmlidXRlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICA8eHNkOmdyb3VwIHJlZj0iZ3JwLmFueSIvPgotICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgIAotICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJsb2NhdGlvblR5cGUiPgotICAgICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0iYXR0ci50eXBlIi8+Ci0gICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAKLSAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ibG9tVHlwZSI+Ci0gICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iZ2VuZXJhbCIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJsaWZlY3ljbGUiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0ibWV0YW1ldGFkYXRhIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9InRlY2huaWNhbCIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJlZHVjYXRpb25hbCIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJyaWdodHMiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0icmVsYXRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9ImFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9ImNsYXNzaWZpY2F0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgCi0gICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Im1ldGFtZXRhZGF0YVR5cGUiIG1peGVkPSJ0cnVlIj4KLSAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJpZGVudGlmaWVyIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9ImNhdGFsb2dlbnRyeSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iY29udHJpYnV0ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0ibWV0YWRhdGFzY2hlbWUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Imxhbmd1YWdlIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgIDx4c2Q6Z3JvdXAgcmVmPSJncnAuYW55Ii8+Ci0gICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgCi0gICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Im5hbWVUeXBlIj4KLSAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJzb3VyY2UiLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9InZhbHVlIi8+Ci0gICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgCi0gICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Im90aGVycGxhdGZvcm1yZXF1aXJlbWVudHNUeXBlIj4KLSAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJsYW5nc3RyaW5nIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgCi0gICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9InBlcnNvblR5cGUiPgotICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9InZjYXJkIi8+Ci0gICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgCi0gICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9InB1cnBvc2VUeXBlIj4KLSAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJzb3VyY2UiLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9InZhbHVlIi8+Ci0gICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgCi0gICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9InJlbGF0aW9uVHlwZSIgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9ImtpbmQiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0icmVzb3VyY2UiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgPHhzZDpncm91cCByZWY9ImdycC5hbnkiLz4KLSAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAKLSAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0icmVxdWlyZW1lbnRUeXBlIiBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0idHlwZSIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJuYW1lIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Im1pbmltdW12ZXJzaW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Im1heGltdW12ZXJzaW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgIDx4c2Q6Z3JvdXAgcmVmPSJncnAuYW55Ii8+Ci0gICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgCi0gICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9InJlc291cmNlVHlwZSIgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9ImlkZW50aWZpZXIiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iZGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iY2F0YWxvZ2VudHJ5IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICA8eHNkOmdyb3VwIHJlZj0iZ3JwLmFueSIvPgotICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgIAotICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJyaWdodHNUeXBlIiBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iY29zdCIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJjb3B5cmlnaHRhbmRvdGhlcnJlc3RyaWN0aW9ucyIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJkZXNjcmlwdGlvbiIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICA8eHNkOmdyb3VwIHJlZj0iZ3JwLmFueSIvPgotICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgIAotICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJyb2xlVHlwZSI+Ci0gICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0ic291cmNlIi8+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJ2YWx1ZSIvPgotICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgIAotICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJzZW1hbnRpY2RlbnNpdHlUeXBlIj4KLSAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJzb3VyY2UiLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9InZhbHVlIi8+Ci0gICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgCi0gICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9InNvdXJjZVR5cGUiPgotICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9ImxhbmdzdHJpbmciLz4KLSAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAKLSAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ic3RhdHVzVHlwZSI+Ci0gICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0ic291cmNlIi8+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJ2YWx1ZSIvPgotICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgIAotICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJzdHJpbmdUeXBlIj4KLSAgICAgIDx4c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgIDx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgcmVmPSJ4OmxhbmciLz4KLSAgICAgICAgIDwveHNkOmV4dGVuc2lvbj4KLSAgICAgIDwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgIAotICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJzdHJ1Y3R1cmVUeXBlIj4KLSAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJzb3VyY2UiLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9InZhbHVlIi8+Ci0gICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgCi0gICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9InRheG9ucGF0aFR5cGUiPgotICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9InNvdXJjZSIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJ0YXhvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLSAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAKLSAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0idGF4b25UeXBlIj4KLSAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJpZCIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJlbnRyeSIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJ0YXhvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLSAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAKLSAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0idGVjaG5pY2FsVHlwZSIgbWl4ZWQ9InRydWUiPgotICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9ImZvcm1hdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0ic2l6ZSIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJsb2NhdGlvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0icmVxdWlyZW1lbnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Imluc3RhbGxhdGlvbnJlbWFya3MiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0ib3RoZXJwbGF0Zm9ybXJlcXVpcmVtZW50cyIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJkdXJhdGlvbiIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICA8eHNkOmdyb3VwIHJlZj0iZ3JwLmFueSIvPgotICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgIAotICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJ0aXRsZVR5cGUiPgotICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9ImxhbmdzdHJpbmciIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAKLSAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0idHlwZVR5cGUiPgotICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9InNvdXJjZSIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0idmFsdWUiLz4KLSAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAKLSAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0idHlwaWNhbGFnZXJhbmdlVHlwZSI+Ci0gICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0ibGFuZ3N0cmluZyIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgIAotICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJ0eXBpY2FsbGVhcm5pbmd0aW1lVHlwZSI+Ci0gICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iZGF0ZXRpbWUiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iZGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgIAotICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJ2YWx1ZVR5cGUiPgotICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9ImxhbmdzdHJpbmciLz4KLSAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAKLSAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0idmVyc2lvblR5cGUiPgotICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9ImxhbmdzdHJpbmciIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAKLSAgIDwhLS0gKioqKioqKioqKioqKioqKioqIC0tPgotICAgPCEtLSAqKiBTaW1wbGUgVHlwZXMgKiogLS0+Ci0gICA8IS0tICoqKioqKioqKioqKioqKioqKiAtLT4KLSAgIAotICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9ImZvcm1hdFR5cGUiPgotICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIi8+Ci0gICA8L3hzZDpzaW1wbGVUeXBlPgotICAgCi0gICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0ic2l6ZVR5cGUiPgotICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6aW50Ii8+Ci0gICA8L3hzZDpzaW1wbGVUeXBlPgotICAgCi0gICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iZGF0ZXRpbWVUeXBlIj4KLSAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyIvPgotICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgIAotICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9ImlkVHlwZSI+Ci0gICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciLz4KLSAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAKLSAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJtZXRhZGF0YXNjaGVtZVR5cGUiPgotICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIi8+Ci0gICA8L3hzZDpzaW1wbGVUeXBlPgotICAgCi0gICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iY2F0YWxvZ1R5cGUiPgotICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIi8+Ci0gICA8L3hzZDpzaW1wbGVUeXBlPgotICAgCi0gICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0ibWluaW11bXZlcnNpb25UeXBlIj4KLSAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyIvPgotICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgIAotICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Im1heGltdW12ZXJzaW9uVHlwZSI+Ci0gICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciLz4KLSAgIDwveHNkOnNpbXBsZVR5cGU+Ci0KLTwveHNkOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2oyZWUvWE1MLnhzZCBiL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2oyZWUvWE1MLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY4YWRkOS4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9qMmVlL1hNTC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnPz4KLTwhRE9DVFlQRSB4czpzY2hlbWEgUFVCTElDICItLy9XM0MvL0RURCBYTUxTQ0hFTUEgMjAwMTAyLy9FTiIgIlhNTFNjaGVtYS5kdGQiID4KLTx4czpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sOmxhbmc9ImVuIj4KLQotIDx4czphbm5vdGF0aW9uPgotICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgIFNlZSBodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UuaHRtbCBhbmQKLSAgIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgbmFtZXNwYWNlLgotICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gPC94czphbm5vdGF0aW9uPgotCi0gPHhzOmFubm90YXRpb24+Ci0gIDx4czpkb2N1bWVudGF0aW9uPlRoaXMgc2NoZW1hIGRlZmluZXMgYXR0cmlidXRlcyBhbmQgYW4gYXR0cmlidXRlIGdyb3VwCi0gICAgICAgIHN1aXRhYmxlIGZvciB1c2UgYnkKLSAgICAgICAgc2NoZW1hcyB3aXNoaW5nIHRvIGFsbG93IHhtbDpiYXNlLCB4bWw6bGFuZyBvciB4bWw6c3BhY2UgYXR0cmlidXRlcwotICAgICAgICBvbiBlbGVtZW50cyB0aGV5IGRlZmluZS4KLQotICAgICAgICBUbyBlbmFibGUgdGhpcywgc3VjaCBhIHNjaGVtYSBtdXN0IGltcG9ydCB0aGlzIHNjaGVtYQotICAgICAgICBmb3IgdGhlIFhNTCBuYW1lc3BhY2UsIGUuZy4gYXMgZm9sbG93czoKLSAgICAgICAgJmx0O3NjaGVtYSAuIC4gLj4KLSAgICAgICAgIC4gLiAuCi0gICAgICAgICAmbHQ7aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIgotICAgICAgICAgICAgICAgICAgICBzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wMy94bWwueHNkIi8+Ci0KLSAgICAgICAgU3Vic2VxdWVudGx5LCBxdWFsaWZpZWQgcmVmZXJlbmNlIHRvIGFueSBvZiB0aGUgYXR0cmlidXRlcwotICAgICAgICBvciB0aGUgZ3JvdXAgZGVmaW5lZCBiZWxvdyB3aWxsIGhhdmUgdGhlIGRlc2lyZWQgZWZmZWN0LCBlLmcuCi0KLSAgICAgICAgJmx0O3R5cGUgLiAuIC4+Ci0gICAgICAgICAuIC4gLgotICAgICAgICAgJmx0O2F0dHJpYnV0ZUdyb3VwIHJlZj0ieG1sOnNwZWNpYWxBdHRycyIvPgotIAotICAgICAgICAgd2lsbCBkZWZpbmUgYSB0eXBlIHdoaWNoIHdpbGwgc2NoZW1hLXZhbGlkYXRlIGFuIGluc3RhbmNlCi0gICAgICAgICBlbGVtZW50IHdpdGggYW55IG9mIHRob3NlIGF0dHJpYnV0ZXM8L3hzOmRvY3VtZW50YXRpb24+Ci0gPC94czphbm5vdGF0aW9uPgotCi0gPHhzOmFubm90YXRpb24+Ci0gIDx4czpkb2N1bWVudGF0aW9uPkluIGtlZXBpbmcgd2l0aCB0aGUgWE1MIFNjaGVtYSBXRydzIHN0YW5kYXJkIHZlcnNpb25pbmcKLSAgIHBvbGljeSwgdGhpcyBzY2hlbWEgZG9jdW1lbnQgd2lsbCBwZXJzaXN0IGF0Ci0gICBodHRwOi8vd3d3LnczLm9yZy8yMDAxLzAzL3htbC54c2QuCi0gICBBdCB0aGUgZGF0ZSBvZiBpc3N1ZSBpdCBjYW4gYWxzbyBiZSBmb3VuZCBhdAotICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkLgotICAgVGhlIHNjaGVtYSBkb2N1bWVudCBhdCB0aGF0IFVSSSBtYXkgaG93ZXZlciBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSwKLSAgIGluIG9yZGVyIHRvIHJlbWFpbiBjb21wYXRpYmxlIHdpdGggdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIFhNTCBTY2hlbWEKLSAgIGl0c2VsZi4gIEluIG90aGVyIHdvcmRzLCBpZiB0aGUgWE1MIFNjaGVtYSBuYW1lc3BhY2UgY2hhbmdlcywgdGhlIHZlcnNpb24KLSAgIG9mIHRoaXMgZG9jdW1lbnQgYXQKLSAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCB3aWxsIGNoYW5nZQotICAgYWNjb3JkaW5nbHk7IHRoZSB2ZXJzaW9uIGF0Ci0gICBodHRwOi8vd3d3LnczLm9yZy8yMDAxLzAzL3htbC54c2Qgd2lsbCBub3QgY2hhbmdlLgotICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gPC94czphbm5vdGF0aW9uPgotCi0gPHhzOmF0dHJpYnV0ZSBuYW1lPSJsYW5nIiB0eXBlPSJ4czpsYW5ndWFnZSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+SW4gZHVlIGNvdXJzZSwgd2Ugc2hvdWxkIGluc3RhbGwgdGhlIHJlbGV2YW50IElTTyAyLSBhbmQgMy1sZXR0ZXIKLSAgICAgICAgIGNvZGVzIGFzIHRoZSBlbnVtZXJhdGVkIHBvc3NpYmxlIHZhbHVlcyAuIC4gLjwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotIDwveHM6YXR0cmlidXRlPgotCi0gPHhzOmF0dHJpYnV0ZSBuYW1lPSJzcGFjZSIgZGVmYXVsdD0icHJlc2VydmUiPgotICA8eHM6c2ltcGxlVHlwZT4KLSAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOQ05hbWUiPgotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZGVmYXVsdCIvPgotICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icHJlc2VydmUiLz4KLSAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLSA8L3hzOmF0dHJpYnV0ZT4KLQotIDx4czphdHRyaWJ1dGUgbmFtZT0iYmFzZSIgdHlwZT0ieHM6YW55VVJJIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbj5TZWUgaHR0cDovL3d3dy53My5vcmcvVFIveG1sYmFzZS8gZm9yCi0gICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGF0dHJpYnV0ZS48L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSA8L3hzOmF0dHJpYnV0ZT4KLQotIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJzcGVjaWFsQXR0cnMiPgotICA8eHM6YXR0cmlidXRlIHJlZj0ieG1sOmJhc2UiLz4KLSAgPHhzOmF0dHJpYnV0ZSByZWY9InhtbDpsYW5nIi8+Ci0gIDx4czphdHRyaWJ1dGUgcmVmPSJ4bWw6c3BhY2UiLz4KLSA8L3hzOmF0dHJpYnV0ZUdyb3VwPgotCi08L3hzOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2oyZWUvYXBwbGljYXRpb24tY2xpZW50XzFfNC54c2QgYi92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9qMmVlL2FwcGxpY2F0aW9uLWNsaWVudF8xXzQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTA0Zjg0Li4wMDAwMDAwCi0tLSBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2oyZWUvYXBwbGljYXRpb24tY2xpZW50XzFfNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyNzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIgotICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIgotICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLSAgICAgYXR0cmlidXRlRm9ybURlZmF1bHQ9InVucXVhbGlmaWVkIgotICAgICB2ZXJzaW9uPSIxLjQiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotQCgjKWFwcGxpY2F0aW9uLWNsaWVudF8xXzQueHNkcwkxLjcgMDcvMDgvMDIKLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLUNvcHlyaWdodCAyMDAyIFN1biBNaWNyb3N5c3RlbXMsIEluYy4sIDkwMSBTYW4gQW50b25pbwotUm9hZCwgUGFsbyBBbHRvLCBDYWxpZm9ybmlhIDk0MzAzLCBVLlMuQS4gQWxsIHJpZ2h0cwotcmVzZXJ2ZWQuCi0KLVN1biBNaWNyb3N5c3RlbXMsIEluYy4gaGFzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMKLXJlbGF0aW5nIHRvIHRlY2hub2xvZ3kgZGVzY3JpYmVkIGluIHRoaXMgZG9jdW1lbnQuIEluCi1wYXJ0aWN1bGFyLCBhbmQgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGVzZSBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBtYXkgaW5jbHVkZSBvbmUgb3IgbW9yZSBvZiB0aGUgVS5TLiBwYXRlbnRzCi1saXN0ZWQgYXQgaHR0cDovL3d3dy5zdW4uY29tL3BhdGVudHMgYW5kIG9uZSBvciBtb3JlCi1hZGRpdGlvbmFsIHBhdGVudHMgb3IgcGVuZGluZyBwYXRlbnQgYXBwbGljYXRpb25zIGluIHRoZQotVS5TLiBhbmQgb3RoZXIgY291bnRyaWVzLgotCi1UaGlzIGRvY3VtZW50IGFuZCB0aGUgdGVjaG5vbG9neSB3aGljaCBpdCBkZXNjcmliZXMgYXJlCi1kaXN0cmlidXRlZCB1bmRlciBsaWNlbnNlcyByZXN0cmljdGluZyB0aGVpciB1c2UsIGNvcHlpbmcsCi1kaXN0cmlidXRpb24sIGFuZCBkZWNvbXBpbGF0aW9uLiBObyBwYXJ0IG9mIHRoaXMgZG9jdW1lbnQKLW1heSBiZSByZXByb2R1Y2VkIGluIGFueSBmb3JtIGJ5IGFueSBtZWFucyB3aXRob3V0IHByaW9yCi13cml0dGVuIGF1dGhvcml6YXRpb24gb2YgU3VuIGFuZCBpdHMgbGljZW5zb3JzLCBpZiBhbnkuCi0KLVRoaXJkLXBhcnR5IHNvZnR3YXJlLCBpbmNsdWRpbmcgZm9udCB0ZWNobm9sb2d5LCBpcwotY29weXJpZ2h0ZWQgYW5kIGxpY2Vuc2VkIGZyb20gU3VuIHN1cHBsaWVycy4KLQotU3VuLCBTdW4gTWljcm9zeXN0ZW1zLCB0aGUgU3VuIGxvZ28sIFNvbGFyaXMsIEphdmEsIEoyRUUsCi1KYXZhU2VydmVyIFBhZ2VzLCBFbnRlcnByaXNlIEphdmFCZWFucyBhbmQgdGhlIEphdmEgQ29mZmVlCi1DdXAgbG9nbyBhcmUgdHJhZGVtYXJrcyBvciByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YgU3VuCi1NaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFUuUy4gYW5kIG90aGVyIGNvdW50cmllcy4KLQotRmVkZXJhbCBBY3F1aXNpdGlvbnM6IENvbW1lcmNpYWwgU29mdHdhcmUgLSBHb3Zlcm5tZW50IFVzZXJzCi1TdWJqZWN0IHRvIFN0YW5kYXJkIExpY2Vuc2UgVGVybXMgYW5kIENvbmRpdGlvbnMuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoaXMgaXMgdGhlIFhNTCBTY2hlbWEgZm9yIHRoZSBhcHBsaWNhdGlvbiBjbGllbnQgMS40Ci1kZXBsb3ltZW50IGRlc2NyaXB0b3IuICBBbGwgYXBwbGljYXRpb24gY2xpZW50IGRlcGxveW1lbnQKLWRlc2NyaXB0b3JzIG11c3QgaW5kaWNhdGUgdGhlIGFwcGxpY2F0aW9uIGNsaWVudAotc2NoZW1hIGJ5IHVzaW5nIHRoZSBKMkVFIG5hbWVzcGFjZToKLQotaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQotCi1hbmQgYnkgaW5kaWNhdGluZyB0aGUgdmVyc2lvbiBvZiB0aGUgc2NoZW1hIGJ5Ci11c2luZyB0aGUgdmVyc2lvbiBlbGVtZW50IGFzIHNob3duIGJlbG93OgotCi0gICAgPGFwcGxpY2F0aW9uLWNsaWVudCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKLSAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCi0gICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS9hcHBsaWNhdGlvbi1jbGllbnRfMV80LnhzZCIKLSAgICAgdmVyc2lvbj0iMS40Ij4KLQotICAgIC4uLgotICAgIDwvYXBwbGljYXRpb24tY2xpZW50PgotCi1UaGUgaW5zdGFuY2UgZG9jdW1lbnRzIG1heSBpbmRpY2F0ZSB0aGUgcHVibGlzaGVkIHZlcnNpb24gb2YKLXRoZSBzY2hlbWEgdXNpbmcgdGhlIHhzaTpzY2hlbWFMb2NhdGlvbiBhdHRyaWJ1dGUgZm9yIEoyRUUKLW5hbWVzcGFjZSB3aXRoIHRoZSBmb2xsb3dpbmcgbG9jYXRpb246Ci0KLWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvYXBwbGljYXRpb24tY2xpZW50XzFfNC54c2QKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGZvbGxvd2luZyBjb252ZW50aW9ucyBhcHBseSB0byBhbGwgSjJFRQotZGVwbG95bWVudCBkZXNjcmlwdG9yIGVsZW1lbnRzIHVubGVzcyBpbmRpY2F0ZWQgb3RoZXJ3aXNlLgotCi0tIEluIGVsZW1lbnRzIHRoYXQgc3BlY2lmeSBhIHBhdGhuYW1lIHRvIGEgZmlsZSB3aXRoaW4gdGhlCi0gIHNhbWUgSkFSIGZpbGUsIHJlbGF0aXZlIGZpbGVuYW1lcyAoaS5lLiwgdGhvc2Ugbm90Ci0gIHN0YXJ0aW5nIHdpdGggIi8iKSBhcmUgY29uc2lkZXJlZCByZWxhdGl2ZSB0byB0aGUgcm9vdCBvZgotICB0aGUgSkFSIGZpbGUncyBuYW1lc3BhY2UuICBBYnNvbHV0ZSBmaWxlbmFtZXMgKGkuZS4sIHRob3NlCi0gIHN0YXJ0aW5nIHdpdGggIi8iKSBhbHNvIHNwZWNpZnkgbmFtZXMgaW4gdGhlIHJvb3Qgb2YgdGhlCi0gIEpBUiBmaWxlJ3MgbmFtZXNwYWNlLiAgSW4gZ2VuZXJhbCwgcmVsYXRpdmUgbmFtZXMgYXJlCi0gIHByZWZlcnJlZC4gIFRoZSBleGNlcHRpb24gaXMgLndhciBmaWxlcyB3aGVyZSBhYnNvbHV0ZQotICBuYW1lcyBhcmUgcHJlZmVycmVkIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBTZXJ2bGV0IEFQSS4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJqMmVlXzFfNC54c2QiLz4KLQotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLQotPHhzZDplbGVtZW50IG5hbWU9ImFwcGxpY2F0aW9uLWNsaWVudCIgdHlwZT0iajJlZTphcHBsaWNhdGlvbi1jbGllbnRUeXBlIj4KLSAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgVGhlIGFwcGxpY2F0aW9uLWNsaWVudCBlbGVtZW50IGlzIHRoZSByb290IGVsZW1lbnQgb2YgYW4KLSAgICBhcHBsaWNhdGlvbiBjbGllbnQgZGVwbG95bWVudCBkZXNjcmlwdG9yLiAgVGhlIGFwcGxpY2F0aW9uCi0gICAgY2xpZW50IGRlcGxveW1lbnQgZGVzY3JpcHRvciBkZXNjcmliZXMgdGhlIEVKQiBjb21wb25lbnRzCi0gICAgYW5kIGV4dGVybmFsIHJlc291cmNlcyByZWZlcmVuY2VkIGJ5IHRoZSBhcHBsaWNhdGlvbgotICAgIGNsaWVudC4KLQotICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6dW5pcXVlIG5hbWU9ImVudi1lbnRyeS1uYW1lLXVuaXF1ZW5lc3MiPgotICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICBUaGUgZW52LWVudHJ5LW5hbWUgZWxlbWVudCBjb250YWlucyB0aGUgbmFtZSBvZiBhbgotICAgIGFwcGxpY2F0aW9uIGNsaWVudCdzIGVudmlyb25tZW50IGVudHJ5LiAgVGhlIG5hbWUgaXMgYSBKTkRJCi0gICAgbmFtZSByZWxhdGl2ZSB0byB0aGUgamF2YTpjb21wL2VudiBjb250ZXh0LiAgVGhlIG5hbWUgbXVzdAotICAgIGJlIHVuaXF1ZSB3aXRoaW4gYW4gYXBwbGljYXRpb24gY2xpZW50LgotCi0gICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOmVudi1lbnRyeSIvPgotICAgICAgICA8eHNkOmZpZWxkICAgIHhwYXRoPSJqMmVlOmVudi1lbnRyeS1uYW1lIi8+Ci0gICAgPC94c2Q6dW5pcXVlPgotCi0gICAgPHhzZDp1bmlxdWUgbmFtZT0iZWpiLXJlZi1uYW1lLXVuaXF1ZW5lc3MiPgotICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICBUaGUgZWpiLXJlZi1uYW1lIGVsZW1lbnQgY29udGFpbnMgdGhlIG5hbWUgb2YgYW4gRUpCCi0gICAgcmVmZXJlbmNlLiBUaGUgRUpCIHJlZmVyZW5jZSBpcyBhbiBlbnRyeSBpbiB0aGUgYXBwbGljYXRpb24KLSAgICBjbGllbnQncyBlbnZpcm9ubWVudCBhbmQgaXMgcmVsYXRpdmUgdG8gdGhlCi0gICAgamF2YTpjb21wL2VudiBjb250ZXh0LiBUaGUgbmFtZSBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlCi0gICAgYXBwbGljYXRpb24gY2xpZW50LgotCi0gICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBuYW1lIGlzIHByZWZpeGVkIHdpdGggImVqYi8iLgotCi0gICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOmVqYi1yZWYiLz4KLSAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTplamItcmVmLW5hbWUiLz4KLSAgICA8L3hzZDp1bmlxdWU+Ci0KLSAgICA8eHNkOnVuaXF1ZSBuYW1lPSJyZXMtcmVmLW5hbWUtdW5pcXVlbmVzcyI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIFRoZSByZXMtcmVmLW5hbWUgZWxlbWVudCBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgYQotICAgIHJlc291cmNlIG1hbmFnZXIgY29ubmVjdGlvbiBmYWN0b3J5IHJlZmVyZW5jZS5UaGUgbmFtZQotICAgIGlzIGEgSk5ESSBuYW1lIHJlbGF0aXZlIHRvIHRoZSBqYXZhOmNvbXAvZW52IGNvbnRleHQuCi0gICAgVGhlIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGFuIGFwcGxpY2F0aW9uIGNsaWVudC4KLQotICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpzZWxlY3RvciB4cGF0aD0iajJlZTpyZXNvdXJjZS1yZWYiLz4KLSAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTpyZXMtcmVmLW5hbWUiLz4KLSAgICA8L3hzZDp1bmlxdWU+Ci0KLSAgICA8eHNkOnVuaXF1ZSBuYW1lPSJyZXNvdXJjZS1lbnYtcmVmLXVuaXF1ZW5lc3MiPgotICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICBUaGUgcmVzb3VyY2UtZW52LXJlZi1uYW1lIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mCi0gICAgYSByZXNvdXJjZSBlbnZpcm9ubWVudCByZWZlcmVuY2U7IGl0cyB2YWx1ZSBpcyB0aGUKLSAgICBlbnZpcm9ubWVudCBlbnRyeSBuYW1lIHVzZWQgaW4gdGhlIGFwcGxpY2F0aW9uIGNsaWVudAotICAgIGNvZGUuIFRoZSBuYW1lIGlzIGEgSk5ESSBuYW1lIHJlbGF0aXZlIHRvIHRoZQotICAgIGphdmE6Y29tcC9lbnYgY29udGV4dCBhbmQgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGFuCi0gICAgYXBwbGljYXRpb24gY2xpZW50LgotCi0gICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOnJlc291cmNlLWVudi1yZWYiLz4KLSAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTpyZXNvdXJjZS1lbnYtcmVmLW5hbWUiLz4KLSAgICA8L3hzZDp1bmlxdWU+Ci0KLSAgICA8eHNkOnVuaXF1ZSBuYW1lPSJtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi11bmlxdWVuZXNzIj4KLSAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgVGhlIG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWUgZWxlbWVudCBzcGVjaWZpZXMgdGhlCi0gICAgbmFtZSBvZiBhIG1lc3NhZ2UgZGVzdGluYXRpb24gcmVmZXJlbmNlOyBpdHMgdmFsdWUgaXMKLSAgICB0aGUgbWVzc2FnZSBkZXN0aW5hdGlvbiByZWZlcmVuY2UgbmFtZSB1c2VkIGluIHRoZQotICAgIGFwcGxpY2F0aW9uIGNsaWVudCBjb2RlLiBUaGUgbmFtZSBpcyBhIEpOREkgbmFtZQotICAgIHJlbGF0aXZlIHRvIHRoZSBqYXZhOmNvbXAvZW52IGNvbnRleHQgYW5kIG11c3QgYmUgdW5pcXVlCi0gICAgd2l0aGluIGFuIGFwcGxpY2F0aW9uIGNsaWVudC4KLQotICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpzZWxlY3RvciB4cGF0aD0iajJlZTptZXNzYWdlLWRlc3RpbmF0aW9uLXJlZiIvPgotICAgICAgICA8eHNkOmZpZWxkICAgIHhwYXRoPSJqMmVlOm1lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWUiLz4KLSAgICA8L3hzZDp1bmlxdWU+Ci0KLTwveHNkOmVsZW1lbnQ+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnRUeXBlIj4KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRpc3BsYXktbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGlzcGxheS1uYW1lVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJpY29uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTppY29uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVudi1lbnRyeSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZW52LWVudHJ5VHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVqYi1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVqYi1yZWZUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icmVzb3VyY2UtcmVmIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpyZXNvdXJjZS1yZWZUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icmVzb3VyY2UtZW52LXJlZiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cmVzb3VyY2UtZW52LXJlZlR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWZUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImNhbGxiYWNrLWhhbmRsZXIiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmZ1bGx5LXF1YWxpZmllZC1jbGFzc1R5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgY2FsbGJhY2staGFuZGxlciBlbGVtZW50IG5hbWVzIGEgY2xhc3MgcHJvdmlkZWQgYnkKLSAgICAgICAgdGhlIGFwcGxpY2F0aW9uLiAgVGhlIGNsYXNzIG11c3QgaGF2ZSBhIG5vIGFyZ3MKLSAgICAgICAgY29uc3RydWN0b3IgYW5kIG11c3QgaW1wbGVtZW50IHRoZQotICAgICAgICBqYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLkNhbGxiYWNrSGFuZGxlcgotICAgICAgICBpbnRlcmZhY2UuICBUaGUgY2xhc3Mgd2lsbCBiZSBpbnN0YW50aWF0ZWQgYnkgdGhlCi0gICAgICAgIGFwcGxpY2F0aW9uIGNsaWVudCBjb250YWluZXIgYW5kIHVzZWQgYnkgdGhlIGNvbnRhaW5lcgotICAgICAgICB0byBjb2xsZWN0IGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uIGZyb20gdGhlIHVzZXIuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im1lc3NhZ2UtZGVzdGluYXRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOm1lc3NhZ2UtZGVzdGluYXRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlcGxveW1lbnQtZXh0ZW5zaW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXBsb3ltZW50LWV4dGVuc2lvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCi0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIgotICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGV3ZXktdmVyc2lvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgZml4ZWQ9IjEuNCIKLSAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIj4KLSAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgVGhlIHJlcXVpcmVkIHZhbHVlIGZvciB0aGUgdmVyc2lvbiBpcyAxLjQuCi0KLSAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIDwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8L3hzZDphdHRyaWJ1dGU+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08L3hzZDpzY2hlbWE+Ci0KZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2oyZWUvYXBwbGljYXRpb25fMV80LnhzZCBiL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2oyZWUvYXBwbGljYXRpb25fMV80LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUzMTEzYi4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9qMmVlL2FwcGxpY2F0aW9uXzFfNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzMjkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIgotICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIgotICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLSAgICAgYXR0cmlidXRlRm9ybURlZmF1bHQ9InVucXVhbGlmaWVkIgotICAgICB2ZXJzaW9uPSIxLjQiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotQCgjKWFwcGxpY2F0aW9uXzFfNC54c2RzCTEuNiAwOC8wOS8wMgotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotQ29weXJpZ2h0IDIwMDIgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiwgOTAxIFNhbiBBbnRvbmlvCi1Sb2FkLCBQYWxvIEFsdG8sIENhbGlmb3JuaWEgOTQzMDMsIFUuUy5BLiBBbGwgcmlnaHRzCi1yZXNlcnZlZC4KLQotU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBoYXMgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cwotcmVsYXRpbmcgdG8gdGVjaG5vbG9neSBkZXNjcmliZWQgaW4gdGhpcyBkb2N1bWVudC4gSW4KLXBhcnRpY3VsYXIsIGFuZCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZXNlIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG1heSBpbmNsdWRlIG9uZSBvciBtb3JlIG9mIHRoZSBVLlMuIHBhdGVudHMKLWxpc3RlZCBhdCBodHRwOi8vd3d3LnN1bi5jb20vcGF0ZW50cyBhbmQgb25lIG9yIG1vcmUKLWFkZGl0aW9uYWwgcGF0ZW50cyBvciBwZW5kaW5nIHBhdGVudCBhcHBsaWNhdGlvbnMgaW4gdGhlCi1VLlMuIGFuZCBvdGhlciBjb3VudHJpZXMuCi0KLVRoaXMgZG9jdW1lbnQgYW5kIHRoZSB0ZWNobm9sb2d5IHdoaWNoIGl0IGRlc2NyaWJlcyBhcmUKLWRpc3RyaWJ1dGVkIHVuZGVyIGxpY2Vuc2VzIHJlc3RyaWN0aW5nIHRoZWlyIHVzZSwgY29weWluZywKLWRpc3RyaWJ1dGlvbiwgYW5kIGRlY29tcGlsYXRpb24uIE5vIHBhcnQgb2YgdGhpcyBkb2N1bWVudAotbWF5IGJlIHJlcHJvZHVjZWQgaW4gYW55IGZvcm0gYnkgYW55IG1lYW5zIHdpdGhvdXQgcHJpb3IKLXdyaXR0ZW4gYXV0aG9yaXphdGlvbiBvZiBTdW4gYW5kIGl0cyBsaWNlbnNvcnMsIGlmIGFueS4KLQotVGhpcmQtcGFydHkgc29mdHdhcmUsIGluY2x1ZGluZyBmb250IHRlY2hub2xvZ3ksIGlzCi1jb3B5cmlnaHRlZCBhbmQgbGljZW5zZWQgZnJvbSBTdW4gc3VwcGxpZXJzLgotCi1TdW4sIFN1biBNaWNyb3N5c3RlbXMsIHRoZSBTdW4gbG9nbywgU29sYXJpcywgSmF2YSwgSjJFRSwKLUphdmFTZXJ2ZXIgUGFnZXMsIEVudGVycHJpc2UgSmF2YUJlYW5zIGFuZCB0aGUgSmF2YSBDb2ZmZWUKLUN1cCBsb2dvIGFyZSB0cmFkZW1hcmtzIG9yIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcyBvZiBTdW4KLU1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVS5TLiBhbmQgb3RoZXIgY291bnRyaWVzLgotCi1GZWRlcmFsIEFjcXVpc2l0aW9uczogQ29tbWVyY2lhbCBTb2Z0d2FyZSAtIEdvdmVybm1lbnQgVXNlcnMKLVN1YmplY3QgdG8gU3RhbmRhcmQgTGljZW5zZSBUZXJtcyBhbmQgQ29uZGl0aW9ucy4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhpcyBpcyB0aGUgWE1MIFNjaGVtYSBmb3IgdGhlIGFwcGxpY2F0aW9uIDEuNCBkZXBsb3ltZW50Ci1kZXNjcmlwdG9yLiAgQWxsIGFwcGxpY2F0aW9uIGRlcGxveW1lbnQgZGVzY3JpcHRvcnMgbXVzdAotaW5kaWNhdGUgdGhhdCB0aGUgc2NoZW1hIGJ5IHVzaW5nIHRoZSBKMkVFIG5hbWVzcGFjZQotCi1odHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCi0KLWFuZCBieSBpbmRpY2F0aW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBzY2hlbWEgYnkKLXVzaW5nIHRoZSB2ZXJzaW9uIGVsZW1lbnQgYXMgc2hvd24gYmVsb3c6Ci0KLSAgICA8YXBwbGljYXRpb24geG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiCi0gICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQotICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL2FwcGxpY2F0aW9uXzFfNC54c2QiCi0gICAgIHZlcnNpb249IjEuNCI+Ci0KLSAgICAuLi4KLSAgICA8L2FwcGxpY2F0aW9uPgotCi1UaGUgaW5zdGFuY2UgZG9jdW1lbnRzIG1heSBpbmRpY2F0ZSB0aGUgcHVibGlzaGVkIHZlcnNpb24gb2YKLXRoZSBzY2hlbWEgdXNpbmcgdGhlIHhzaTpzY2hlbWFMb2NhdGlvbiBhdHRyaWJ1dGUgZm9yIEoyRUUKLW5hbWVzcGFjZSB3aXRoIHRoZSBmb2xsb3dpbmcgbG9jYXRpb246Ci0KLWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvYXBwbGljYXRpb25fMV80LnhzZAotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgZm9sbG93aW5nIGNvbnZlbnRpb25zIGFwcGx5IHRvIGFsbCBKMkVFCi1kZXBsb3ltZW50IGRlc2NyaXB0b3IgZWxlbWVudHMgdW5sZXNzIGluZGljYXRlZCBvdGhlcndpc2UuCi0KLS0gSW4gZWxlbWVudHMgdGhhdCBzcGVjaWZ5IGEgcGF0aG5hbWUgdG8gYSBmaWxlIHdpdGhpbiB0aGUKLSAgc2FtZSBKQVIgZmlsZSwgcmVsYXRpdmUgZmlsZW5hbWVzIChpLmUuLCB0aG9zZSBub3QKLSAgc3RhcnRpbmcgd2l0aCAiLyIpIGFyZSBjb25zaWRlcmVkIHJlbGF0aXZlIHRvIHRoZSByb290IG9mCi0gIHRoZSBKQVIgZmlsZSdzIG5hbWVzcGFjZS4gIEFic29sdXRlIGZpbGVuYW1lcyAoaS5lLiwgdGhvc2UKLSAgc3RhcnRpbmcgd2l0aCAiLyIpIGFsc28gc3BlY2lmeSBuYW1lcyBpbiB0aGUgcm9vdCBvZiB0aGUKLSAgSkFSIGZpbGUncyBuYW1lc3BhY2UuICBJbiBnZW5lcmFsLCByZWxhdGl2ZSBuYW1lcyBhcmUKLSAgcHJlZmVycmVkLiAgVGhlIGV4Y2VwdGlvbiBpcyAud2FyIGZpbGVzIHdoZXJlIGFic29sdXRlCi0gIG5hbWVzIGFyZSBwcmVmZXJyZWQgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIFNlcnZsZXQgQVBJLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJqMmVlXzFfNC54c2QiLz4KLQotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLQotPHhzZDplbGVtZW50IG5hbWU9ImFwcGxpY2F0aW9uIiB0eXBlPSJqMmVlOmFwcGxpY2F0aW9uVHlwZSI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIFRoZSBhcHBsaWNhdGlvbiBlbGVtZW50IGlzIHRoZSByb290IGVsZW1lbnQgb2YgYSBKMkVFCi0gICAgYXBwbGljYXRpb24gZGVwbG95bWVudCBkZXNjcmlwdG9yLgotCi0gICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICA8L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDp1bmlxdWUgbmFtZT0iY29udGV4dC1yb290LXVuaXF1ZW5lc3MiPgotICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICBUaGUgY29udGV4dC1yb290IGVsZW1lbnQgY29udGVudCBtdXN0IGJlIHVuaXF1ZQotICAgIGluIHRoZSBlYXIuCi0KLSAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6bW9kdWxlL2oyZWU6d2ViIi8+Ci0gICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6Y29udGV4dC1yb290Ii8+Ci0gICAgPC94c2Q6dW5pcXVlPgotCi0gICAgPHhzZDp1bmlxdWUgbmFtZT0ic2VjdXJpdHktcm9sZS11bmlxdWVuZXNzIj4KLSAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgVGhlIHNlY3VyaXR5LXJvbGUtbmFtZSBlbGVtZW50IGNvbnRlbnQKLSAgICBtdXN0IGJlIHVuaXF1ZSBpbiB0aGUgZWFyLgotCi0gICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOnNlY3VyaXR5LXJvbGUiLz4KLSAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTpyb2xlLW5hbWUiLz4KLSAgICA8L3hzZDp1bmlxdWU+Ci0KLTwveHNkOmVsZW1lbnQ+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJhcHBsaWNhdGlvblR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgYXBwbGljYXRpb25UeXBlIGRlZmluZXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUKLWFwcGxpY2F0aW9uLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGlzcGxheS1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkaXNwbGF5LW5hbWVUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Imljb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmljb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibW9kdWxlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTptb2R1bGVUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgYXBwbGljYXRpb24gZGVwbG95bWVudCBkZXNjcmlwdG9yIG11c3QgaGF2ZSBvbmUKLSAgICAgICAgbW9kdWxlIGVsZW1lbnQgZm9yIGVhY2ggSjJFRSBtb2R1bGUgaW4gdGhlCi0gICAgICAgIGFwcGxpY2F0aW9uIHBhY2thZ2UuIEEgbW9kdWxlIGVsZW1lbnQgaXMgZGVmaW5lZAotICAgICAgICBieSBtb2R1bGVUeXBlIGRlZmluaXRpb24uCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlY3VyaXR5LXJvbGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnNlY3VyaXR5LXJvbGVUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlcGxveW1lbnQtZXh0ZW5zaW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXBsb3ltZW50LWV4dGVuc2lvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9InZlcnNpb24iCi0gICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXdleS12ZXJzaW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICBmaXhlZD0iMS40IgotICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiPgotICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICBUaGUgcmVxdWlyZWQgdmFsdWUgZm9yIHRoZSB2ZXJzaW9uIGlzIDEuNC4KLQotICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICA8L3hzZDphdHRyaWJ1dGU+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ibW9kdWxlVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBtb2R1bGVUeXBlIGRlZmluZXMgYSBzaW5nbGUgSjJFRSBtb2R1bGUgYW5kIGNvbnRhaW5zIGEKLWNvbm5lY3RvciwgZWpiLCBqYXZhLCBvciB3ZWIgZWxlbWVudCwgd2hpY2ggaW5kaWNhdGVzIHRoZQotbW9kdWxlIHR5cGUgYW5kIGNvbnRhaW5zIGEgcGF0aCB0byB0aGUgbW9kdWxlIGZpbGUsIGFuZCBhbgotb3B0aW9uYWwgYWx0LWRkIGVsZW1lbnQsIHdoaWNoIHNwZWNpZmllcyBhbiBvcHRpb25hbCBVUkkgdG8KLXRoZSBwb3N0LWFzc2VtYmx5IHZlcnNpb24gb2YgdGhlIGRlcGxveW1lbnQgZGVzY3JpcHRvci4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmNob2ljZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJjb25uZWN0b3IiCi0gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpwYXRoVHlwZSI+Ci0gICAgICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgICAgIFRoZSBjb25uZWN0b3IgZWxlbWVudCBzcGVjaWZpZXMgdGhlIFVSSSBvZiBhCi0gICAgICAgICAgICByZXNvdXJjZSBhZGFwdGVyIGFyY2hpdmUgZmlsZSwgcmVsYXRpdmUgdG8gdGhlCi0gICAgICAgICAgICB0b3AgbGV2ZWwgb2YgdGhlIGFwcGxpY2F0aW9uIHBhY2thZ2UuCi0KLSAgICAgICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJlamIiCi0gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpwYXRoVHlwZSI+Ci0gICAgICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgICAgIFRoZSBlamIgZWxlbWVudCBzcGVjaWZpZXMgdGhlIFVSSSBvZiBhbiBlamItamFyLAotICAgICAgICAgICAgcmVsYXRpdmUgdG8gdGhlIHRvcCBsZXZlbCBvZiB0aGUgYXBwbGljYXRpb24KLSAgICAgICAgICAgIHBhY2thZ2UuCi0KLSAgICAgICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJqYXZhIgotICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cGF0aFR5cGUiPgotICAgICAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgICAgICBUaGUgamF2YSBlbGVtZW50IHNwZWNpZmllcyB0aGUgVVJJIG9mIGEgamF2YQotICAgICAgICAgICAgYXBwbGljYXRpb24gY2xpZW50IG1vZHVsZSwgcmVsYXRpdmUgdG8gdGhlIHRvcAotICAgICAgICAgICAgbGV2ZWwgb2YgdGhlIGFwcGxpY2F0aW9uIHBhY2thZ2UuCi0KLSAgICAgICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJ3ZWIiCi0gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTp3ZWJUeXBlIi8+Ci0gICAgICAgIDwveHNkOmNob2ljZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImFsdC1kZCIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cGF0aFR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgYWx0LWRkIGVsZW1lbnQgc3BlY2lmaWVzIGFuIG9wdGlvbmFsIFVSSSB0byB0aGUKLSAgICAgICAgcG9zdC1hc3NlbWJseSB2ZXJzaW9uIG9mIHRoZSBkZXBsb3ltZW50IGRlc2NyaXB0b3IKLSAgICAgICAgZmlsZSBmb3IgYSBwYXJ0aWN1bGFyIEoyRUUgbW9kdWxlLiAgVGhlIFVSSSBtdXN0Ci0gICAgICAgIHNwZWNpZnkgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGRlcGxveW1lbnQKLSAgICAgICAgZGVzY3JpcHRvciBmaWxlIHJlbGF0aXZlIHRvIHRoZSBhcHBsaWNhdGlvbidzIHJvb3QKLSAgICAgICAgZGlyZWN0b3J5LiBJZiBhbHQtZGQgaXMgbm90IHNwZWNpZmllZCwgdGhlIGRlcGxveWVyCi0gICAgICAgIG11c3QgcmVhZCB0aGUgZGVwbG95bWVudCBkZXNjcmlwdG9yIGZyb20gdGhlIGRlZmF1bHQKLSAgICAgICAgbG9jYXRpb24gYW5kIGZpbGUgbmFtZSByZXF1aXJlZCBieSB0aGUgcmVzcGVjdGl2ZQotICAgICAgICBjb21wb25lbnQgc3BlY2lmaWNhdGlvbi4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVwbG95bWVudC1leHRlbnNpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlcGxveW1lbnQtZXh0ZW5zaW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0id2ViVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSB3ZWJUeXBlIGRlZmluZXMgdGhlIHdlYi11cmkgYW5kIGNvbnRleHQtcm9vdCBvZgotYSB3ZWIgYXBwbGljYXRpb24gbW9kdWxlLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0id2ViLXVyaSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cGF0aFR5cGUiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgd2ViLXVyaSBlbGVtZW50IHNwZWNpZmllcyB0aGUgVVJJIG9mIGEgd2ViCi0gICAgICAgIGFwcGxpY2F0aW9uIGZpbGUsIHJlbGF0aXZlIHRvIHRoZSB0b3AgbGV2ZWwgb2YgdGhlCi0gICAgICAgIGFwcGxpY2F0aW9uIHBhY2thZ2UuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImNvbnRleHQtcm9vdCIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c3RyaW5nIj4KLQotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgY29udGV4dC1yb290IGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBjb250ZXh0IHJvb3QKLSAgICAgICAgb2YgYSB3ZWIgYXBwbGljYXRpb24uCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlcGxveW1lbnQtZXh0ZW5zaW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXBsb3ltZW50LWV4dGVuc2lvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwveHNkOnNjaGVtYT4KLQpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvajJlZS9jb25uZWN0b3JfMV81LnhzZCBiL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2oyZWUvY29ubmVjdG9yXzFfNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiZTU1YmQuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvajJlZS9jb25uZWN0b3JfMV81LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEwMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIgotICAgICB4bWxuczpqMmVlPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIgotICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLSAgICAgYXR0cmlidXRlRm9ybURlZmF1bHQ9InVucXVhbGlmaWVkIgotICAgICB2ZXJzaW9uPSIxLjUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotQCgjKWNvbm5lY3Rvcl8xXzUueHNkcwkxLjE2IDA3LzA2LzAyCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1Db3B5cmlnaHQgMjAwMiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCA5MDEgU2FuIEFudG9uaW8KLVJvYWQsIFBhbG8gQWx0bywgQ2FsaWZvcm5pYSA5NDMwMywgVS5TLkEuIEFsbCByaWdodHMKLXJlc2VydmVkLgotCi1TdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGhhcyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzCi1yZWxhdGluZyB0byB0ZWNobm9sb2d5IGRlc2NyaWJlZCBpbiB0aGlzIGRvY3VtZW50LiBJbgotcGFydGljdWxhciwgYW5kIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlc2UgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgbWF5IGluY2x1ZGUgb25lIG9yIG1vcmUgb2YgdGhlIFUuUy4gcGF0ZW50cwotbGlzdGVkIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9wYXRlbnRzIGFuZCBvbmUgb3IgbW9yZQotYWRkaXRpb25hbCBwYXRlbnRzIG9yIHBlbmRpbmcgcGF0ZW50IGFwcGxpY2F0aW9ucyBpbiB0aGUKLVUuUy4gYW5kIG90aGVyIGNvdW50cmllcy4KLQotVGhpcyBkb2N1bWVudCBhbmQgdGhlIHRlY2hub2xvZ3kgd2hpY2ggaXQgZGVzY3JpYmVzIGFyZQotZGlzdHJpYnV0ZWQgdW5kZXIgbGljZW5zZXMgcmVzdHJpY3RpbmcgdGhlaXIgdXNlLCBjb3B5aW5nLAotZGlzdHJpYnV0aW9uLCBhbmQgZGVjb21waWxhdGlvbi4gTm8gcGFydCBvZiB0aGlzIGRvY3VtZW50Ci1tYXkgYmUgcmVwcm9kdWNlZCBpbiBhbnkgZm9ybSBieSBhbnkgbWVhbnMgd2l0aG91dCBwcmlvcgotd3JpdHRlbiBhdXRob3JpemF0aW9uIG9mIFN1biBhbmQgaXRzIGxpY2Vuc29ycywgaWYgYW55LgotCi1UaGlyZC1wYXJ0eSBzb2Z0d2FyZSwgaW5jbHVkaW5nIGZvbnQgdGVjaG5vbG9neSwgaXMKLWNvcHlyaWdodGVkIGFuZCBsaWNlbnNlZCBmcm9tIFN1biBzdXBwbGllcnMuCi0KLVN1biwgU3VuIE1pY3Jvc3lzdGVtcywgdGhlIFN1biBsb2dvLCBTb2xhcmlzLCBKYXZhLCBKMkVFLAotSmF2YVNlcnZlciBQYWdlcywgRW50ZXJwcmlzZSBKYXZhQmVhbnMgYW5kIHRoZSBKYXZhIENvZmZlZQotQ3VwIGxvZ28gYXJlIHRyYWRlbWFya3Mgb3IgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9mIFN1bgotTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVLlMuIGFuZCBvdGhlciBjb3VudHJpZXMuCi0KLUZlZGVyYWwgQWNxdWlzaXRpb25zOiBDb21tZXJjaWFsIFNvZnR3YXJlIC0gR292ZXJubWVudCBVc2VycwotU3ViamVjdCB0byBTdGFuZGFyZCBMaWNlbnNlIFRlcm1zIGFuZCBDb25kaXRpb25zLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGlzIGlzIHRoZSBYTUwgU2NoZW1hIGZvciB0aGUgQ29ubmVjdG9yIDEuNSBkZXBsb3ltZW50Ci1kZXNjcmlwdG9yLiAgQWxsIENvbm5lY3RvciBkZXBsb3ltZW50IGRlc2NyaXB0b3JzIG11c3QKLWluZGljYXRlIHRoZSBjb25uZWN0b3IgcmVzb3VyY2UgYWRhcHRlciBzY2hlbWEgYnkgdXNpbmcgdGhlCi1KMkVFIG5hbWVzcGFjZToKLQotaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQotCi1hbmQgYnkgaW5kaWNhdGluZyB0aGUgdmVyc2lvbiBvZiB0aGUgc2NoZW1hIGJ5Ci11c2luZyB0aGUgdmVyc2lvbiBlbGVtZW50IGFzIHNob3duIGJlbG93OgotCi0gICAgPGNvbm5lY3RvciB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKLSAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCi0gICAgICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL2Nvbm5lY3Rvcl8xXzUueHNkIgotICAgICB2ZXJzaW9uPSIxLjUiPgotICAgIC4uLgotICAgIDwvY29ubmVjdG9yPgotCi1UaGUgaW5zdGFuY2UgZG9jdW1lbnRzIG1heSBpbmRpY2F0ZSB0aGUgcHVibGlzaGVkIHZlcnNpb24gb2YKLXRoZSBzY2hlbWEgdXNpbmcgdGhlIHhzaTpzY2hlbWFMb2NhdGlvbiBhdHRyaWJ1dGUgZm9yIEoyRUUKLW5hbWVzcGFjZSB3aXRoIHRoZSBmb2xsb3dpbmcgbG9jYXRpb246Ci0KLWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvY29ubmVjdG9yXzFfNS54c2QKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGZvbGxvd2luZyBjb252ZW50aW9ucyBhcHBseSB0byBhbGwgSjJFRQotZGVwbG95bWVudCBkZXNjcmlwdG9yIGVsZW1lbnRzIHVubGVzcyBpbmRpY2F0ZWQgb3RoZXJ3aXNlLgotCi0tIEluIGVsZW1lbnRzIHRoYXQgc3BlY2lmeSBhIHBhdGhuYW1lIHRvIGEgZmlsZSB3aXRoaW4gdGhlCi0gIHNhbWUgSkFSIGZpbGUsIHJlbGF0aXZlIGZpbGVuYW1lcyAoaS5lLiwgdGhvc2Ugbm90Ci0gIHN0YXJ0aW5nIHdpdGggIi8iKSBhcmUgY29uc2lkZXJlZCByZWxhdGl2ZSB0byB0aGUgcm9vdCBvZgotICB0aGUgSkFSIGZpbGUncyBuYW1lc3BhY2UuICBBYnNvbHV0ZSBmaWxlbmFtZXMgKGkuZS4sIHRob3NlCi0gIHN0YXJ0aW5nIHdpdGggIi8iKSBhbHNvIHNwZWNpZnkgbmFtZXMgaW4gdGhlIHJvb3Qgb2YgdGhlCi0gIEpBUiBmaWxlJ3MgbmFtZXNwYWNlLiAgSW4gZ2VuZXJhbCwgcmVsYXRpdmUgbmFtZXMgYXJlCi0gIHByZWZlcnJlZC4gIFRoZSBleGNlcHRpb24gaXMgLndhciBmaWxlcyB3aGVyZSBhYnNvbHV0ZQotICBuYW1lcyBhcmUgcHJlZmVycmVkIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBTZXJ2bGV0IEFQSS4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJqMmVlXzFfNC54c2QiLz4KLQotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLQotPHhzZDplbGVtZW50IG5hbWU9ImNvbm5lY3RvciIgdHlwZT0iajJlZTpjb25uZWN0b3JUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGNvbm5lY3RvciBlbGVtZW50IGlzIHRoZSByb290IGVsZW1lbnQgb2YgdGhlIGRlcGxveW1lbnQKLWRlc2NyaXB0b3IgZm9yIHRoZSByZXNvdXJjZSBhZGFwdGVyLiBUaGlzIGVsZW1lbnQgaW5jbHVkZXMKLWdlbmVyYWwgaW5mb3JtYXRpb24gLSB2ZW5kb3IgbmFtZSwgcmVzb3VyY2UgYWRhcHRlciB2ZXJzaW9uLAotaWNvbiAtIGFib3V0IHRoZSByZXNvdXJjZSBhZGFwdGVyIG1vZHVsZS4gSXQgYWxzbyBpbmNsdWRlcwotaW5mb3JtYXRpb24gc3BlY2lmaWMgdG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSByZXNvdXJjZQotYWRhcHRlciBsaWJyYXJ5IGFzIHNwZWNpZmllZCB0aHJvdWdoIHRoZSBlbGVtZW50Ci1yZXNvdXJjZWFkYXB0ZXIuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi08L3hzZDplbGVtZW50PgotCi0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJhY3RpdmF0aW9uc3BlY1R5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgYWN0aXZhdGlvbnNwZWNUeXBlIHNwZWNpZmllcyBhbiBhY3RpdmF0aW9uCi1zcGVjaWZpY2F0aW9uLiAgVGhlIGluZm9ybWF0aW9uIGluY2x1ZGVzIGZ1bGx5IHF1YWxpZmllZAotSmF2YSBjbGFzcyBuYW1lIG9mIGFuIGFjdGl2YXRpb24gc3BlY2lmaWNhdGlvbiBhbmQgYSBzZXQgb2YKLXJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gcHJvcGVydHkgbmFtZXMuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImFjdGl2YXRpb25zcGVjLWNsYXNzIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpmdWxseS1xdWFsaWZpZWQtY2xhc3NUeXBlIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGVsZW1lbnQgYWN0aXZhdGlvbnNwZWMtY2xhc3Mgc3BlY2lmaWVzIHRoZSBmdWxseQotICAgICAgICBxdWFsaWZpZWQgSmF2YSBjbGFzcyBuYW1lIG9mIHRoZSBhY3RpdmF0aW9uCi0gICAgICAgIHNwZWNpZmljYXRpb24gY2xhc3MuIFRoaXMgY2xhc3MgbXVzdCBpbXBsZW1lbnQgdGhlCi0gICAgICAgIGphdmF4LnJlc291cmNlLnNwaS5BY3RpdmF0aW9uU3BlYyBpbnRlcmZhY2UuIFRoZQotICAgICAgICBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNsYXNzIGlzIHJlcXVpcmVkIHRvIGJlIGEKLSAgICAgICAgSmF2YUJlYW4uCi0KLSAgICAgICAgRXhhbXBsZToKLSAgICAgICAgICAgIDxhY3RpdmF0aW9uc3BlYy1jbGFzcz5jb20ud29tYmF0LkFjdGl2YXRpb25TcGVjSW1wbAotICAgICAgICAgICAgPC9hY3RpdmF0aW9uc3BlYy1jbGFzcz4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icmVxdWlyZWQtY29uZmlnLXByb3BlcnR5IgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpyZXF1aXJlZC1jb25maWctcHJvcGVydHlUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJhZG1pbm9iamVjdFR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgYWRtaW5vYmplY3RUeXBlIHNwZWNpZmllcyBpbmZvcm1hdGlvbiBhYm91dCBhbgotYWRtaW5pc3RlcmVkIG9iamVjdC4gIEFkbWluaXN0ZXJlZCBvYmplY3RzIGFyZSBzcGVjaWZpYyB0byBhCi1tZXNzYWdpbmcgc3R5bGUgb3IgbWVzc2FnZSBwcm92aWRlci4gIFRoaXMgY29udGFpbnMKLWluZm9ybWF0aW9uIG9uIHRoZSBKYXZhIHR5cGUgb2YgdGhlIGludGVyZmFjZSBpbXBsZW1lbnRlZCBieQotYW4gYWRtaW5pc3RlcmVkIG9iamVjdCwgaXRzIEphdmEgY2xhc3MgbmFtZSBhbmQgaXRzCi1jb25maWd1cmF0aW9uIHByb3BlcnRpZXMuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImFkbWlub2JqZWN0LWludGVyZmFjZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZnVsbHktcXVhbGlmaWVkLWNsYXNzVHlwZSI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBlbGVtZW50IGFkbWlub2JqZWN0LWludGVyZmFjZSBzcGVjaWZpZXMgdGhlCi0gICAgICAgIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBKYXZhIHR5cGUgb2YgdGhlCi0gICAgICAgIGludGVyZmFjZSBpbXBsZW1lbnRlZCBieSBhbiBhZG1pbmlzdGVyZWQgb2JqZWN0LgotCi0gICAgICAgICBFeGFtcGxlOgotICAgICAgICAgPGFkbWlub2JqZWN0LWludGVyZmFjZT5qYXZheC5qbXMuRGVzdGluYXRpb24KLSAgICAgICAgIDwvYWRtaW5vYmplY3QtaW50ZXJmYWNlPgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImFkbWlub2JqZWN0LWNsYXNzIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpmdWxseS1xdWFsaWZpZWQtY2xhc3NUeXBlIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGVsZW1lbnQgYWRtaW5vYmplY3QtY2xhc3Mgc3BlY2lmaWVzIHRoZSBmdWxseQotICAgICAgICBxdWFsaWZpZWQgSmF2YSBjbGFzcyBuYW1lIG9mIGFuIGFkbWluaXN0ZXJlZCBvYmplY3QuCi0KLSAgICAgICAgRXhhbXBsZToKLSAgICAgICAgICAgIDxhZG1pbm9iamVjdC1jbGFzcz5jb20ud29tYmF0LkRlc3RpbmF0aW9uSW1wbAotICAgICAgICAgICAgPC9hZG1pbm9iamVjdC1jbGFzcz4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotCi0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJjb25maWctcHJvcGVydHkiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmNvbmZpZy1wcm9wZXJ0eVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImF1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgYXV0aGVudGljYXRpb24tbWVjaGFuaXNtVHlwZSBzcGVjaWZpZXMgYW4gYXV0aGVudGljYXRpb24KLW1lY2hhbmlzbSBzdXBwb3J0ZWQgYnkgdGhlIHJlc291cmNlIGFkYXB0ZXIuIE5vdGUgdGhhdCB0aGlzCi1zdXBwb3J0IGlzIGZvciB0aGUgcmVzb3VyY2UgYWRhcHRlciBhbmQgbm90IGZvciB0aGUKLXVuZGVybHlpbmcgRUlTIGluc3RhbmNlLiBUaGUgb3B0aW9uYWwgZGVzY3JpcHRpb24gc3BlY2lmaWVzCi1hbnkgcmVzb3VyY2UgYWRhcHRlciBzcGVjaWZpYyByZXF1aXJlbWVudCBmb3IgdGhlIHN1cHBvcnQgb2YKLXNlY3VyaXR5IGNvbnRyYWN0IGFuZCBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20uCi0KLU5vdGUgdGhhdCBCYXNpY1Bhc3N3b3JkIG1lY2hhbmlzbSB0eXBlIHNob3VsZCBzdXBwb3J0IHRoZQotamF2YXgucmVzb3VyY2Uuc3BpLnNlY3VyaXR5LlBhc3N3b3JkQ3JlZGVudGlhbCBpbnRlcmZhY2UuCi1UaGUgS2VyYnY1IG1lY2hhbmlzbSB0eXBlIHNob3VsZCBzdXBwb3J0IHRoZQotb3JnLmlldGYuamdzcy5HU1NDcmVkZW50aWFsIGludGVyZmFjZSBvciB0aGUgZGVwcmVjYXRlZAotamF2YXgucmVzb3VyY2Uuc3BpLnNlY3VyaXR5LkdlbmVyaWNDcmVkZW50aWFsIGludGVyZmFjZS4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJhdXRoZW50aWNhdGlvbi1tZWNoYW5pc20tdHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9InhzZDpzdHJpbmciPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgZWxlbWVudCBhdXRoZW50aWNhdGlvbi1tZWNoYW5pc20tdHlwZSBzcGVjaWZpZXMKLSAgICAgICAgdHlwZSBvZiBhbiBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20uCi0KLSAgICAgICAgVGhlIGV4YW1wbGUgdmFsdWVzIGFyZToKLQotICAgICAgICA8YXV0aGVudGljYXRpb24tbWVjaGFuaXNtLXR5cGU+QmFzaWNQYXNzd29yZAotICAgICAgICA8L2F1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbS10eXBlPgotCi0gICAgICAgIDxhdXRoZW50aWNhdGlvbi1tZWNoYW5pc20tdHlwZT5LZXJidjUKLSAgICAgICAgPC9hdXRoZW50aWNhdGlvbi1tZWNoYW5pc20tdHlwZT4KLQotICAgICAgICBBbnkgYWRkaXRpb25hbCBzZWN1cml0eSBtZWNoYW5pc21zIGFyZSBvdXRzaWRlIHRoZQotICAgICAgICBzY29wZSBvZiB0aGUgQ29ubmVjdG9yIGFyY2hpdGVjdHVyZSBzcGVjaWZpY2F0aW9uLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImNyZWRlbnRpYWwtaW50ZXJmYWNlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpjcmVkZW50aWFsLWludGVyZmFjZVR5cGUiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9ImNvbmZpZy1wcm9wZXJ0eS1uYW1lVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBjb25maWctcHJvcGVydHktbmFtZVR5cGUgY29udGFpbnMgdGhlIG5hbWUgb2YgYQotY29uZmlndXJhdGlvbiBwcm9wZXJ0eS4KLQotVGhlIGNvbm5lY3RvciBhcmNoaXRlY3R1cmUgZGVmaW5lcyBhIHNldCBvZiB3ZWxsLWRlZmluZWQKLXByb3BlcnRpZXMgYWxsIG9mIHR5cGUgamF2YS5sYW5nLlN0cmluZy4gVGhlc2UgYXJlIGFzCi1mb2xsb3dzLgotCi0gICAgIFNlcnZlck5hbWUKLSAgICAgUG9ydE51bWJlcgotICAgICBVc2VyTmFtZQotICAgICBQYXNzd29yZAotICAgICBDb25uZWN0aW9uVVJMCi0KLUEgcmVzb3VyY2UgYWRhcHRlciBwcm92aWRlciBjYW4gZXh0ZW5kIHRoaXMgcHJvcGVydHkgc2V0IHRvCi1pbmNsdWRlIHByb3BlcnRpZXMgc3BlY2lmaWMgdG8gdGhlIHJlc291cmNlIGFkYXB0ZXIgYW5kIGl0cwotdW5kZXJseWluZyBFSVMuCi0KLVBvc3NpYmxlIHZhbHVlcyBpbmNsdWRlCi0gICAgICAgIFNlcnZlck5hbWUKLSAgICAgICAgUG9ydE51bWJlcgotICAgICAgICBVc2VyTmFtZQotICAgICAgICBQYXNzd29yZAotICAgICAgICBDb25uZWN0aW9uVVJMCi0KLUV4YW1wbGU6IDxjb25maWctcHJvcGVydHktbmFtZT5TZXJ2ZXJOYW1lPC9jb25maWctcHJvcGVydHktbmFtZT4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICA8L3hzZDpyZXN0cmljdGlvbj4KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9ImNvbmZpZy1wcm9wZXJ0eS10eXBlVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBjb25maWctcHJvcGVydHktdHlwZVR5cGUgY29udGFpbnMgdGhlIGZ1bGx5Ci1xdWFsaWZpZWQgSmF2YSB0eXBlIG9mIGEgY29uZmlndXJhdGlvbiBwcm9wZXJ0eS4KLQotVGhlIGZvbGxvd2luZyBhcmUgdGhlIGxlZ2FsIHZhbHVlczoKLSAgIGphdmEubGFuZy5Cb29sZWFuLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuSW50ZWdlciwKLSAgIGphdmEubGFuZy5Eb3VibGUsIGphdmEubGFuZy5CeXRlLCBqYXZhLmxhbmcuU2hvcnQsCi0gICBqYXZhLmxhbmcuTG9uZywgamF2YS5sYW5nLkZsb2F0LCBqYXZhLmxhbmcuQ2hhcmFjdGVyCi0KLVVzZWQgaW46IGNvbmZpZy1wcm9wZXJ0eQotCi1FeGFtcGxlOgotPGNvbmZpZy1wcm9wZXJ0eS10eXBlPmphdmEubGFuZy5TdHJpbmc8L2NvbmZpZy1wcm9wZXJ0eS10eXBlPgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImoyZWU6c3RyaW5nIj4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iamF2YS5sYW5nLkJvb2xlYW4iLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iamF2YS5sYW5nLlN0cmluZyIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJqYXZhLmxhbmcuSW50ZWdlciIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJqYXZhLmxhbmcuRG91YmxlIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImphdmEubGFuZy5CeXRlIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImphdmEubGFuZy5TaG9ydCIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJqYXZhLmxhbmcuTG9uZyIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJqYXZhLmxhbmcuRmxvYXQiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iamF2YS5sYW5nLkNoYXJhY3RlciIvPgotICAgIDwveHNkOnJlc3RyaWN0aW9uPgotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImNvbmZpZy1wcm9wZXJ0eVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgY29uZmlnLXByb3BlcnR5VHlwZSBjb250YWlucyBhIGRlY2xhcmF0aW9uIG9mIGEgc2luZ2xlCi1jb25maWd1cmF0aW9uIHByb3BlcnR5IHRoYXQgbWF5IGJlIHVzZWQgZm9yIHByb3ZpZGluZwotY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KLQotVGhlIGRlY2xhcmF0aW9uIGNvbnNpc3RzIG9mIGFuIG9wdGlvbmFsIGRlc2NyaXB0aW9uLCBuYW1lLAotdHlwZSBhbmQgYW4gb3B0aW9uYWwgdmFsdWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gcHJvcGVydHkuIElmCi10aGUgcmVzb3VyY2UgYWRhcHRlciBwcm92aWRlciBkb2VzIG5vdCBzcGVjaWZ5IGEgdmFsdWUgdGhhbgotdGhlIGRlcGxveWVyIGlzIHJlc3BvbnNpYmxlIGZvciBwcm92aWRpbmcgYSB2YWxpZCB2YWx1ZSBmb3IKLWEgY29uZmlndXJhdGlvbiBwcm9wZXJ0eS4KLQotQW55IGJvdW5kcyBvciB3ZWxsLWRlZmluZWQgdmFsdWVzIG9mIHByb3BlcnRpZXMgc2hvdWxkIGJlCi1kZXNjcmliZWQgaW4gdGhlIGRlc2NyaXB0aW9uIGVsZW1lbnQuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImNvbmZpZy1wcm9wZXJ0eS1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpjb25maWctcHJvcGVydHktbmFtZVR5cGUiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImNvbmZpZy1wcm9wZXJ0eS10eXBlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpjb25maWctcHJvcGVydHktdHlwZVR5cGUiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImNvbmZpZy1wcm9wZXJ0eS12YWx1ZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9InhzZDpzdHJpbmciCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgZWxlbWVudCBjb25maWctcHJvcGVydHktdmFsdWUgY29udGFpbnMgdGhlIHZhbHVlCi0gICAgICAgIG9mIGEgY29uZmlndXJhdGlvbiBlbnRyeS4gTm90ZSwgaXQgaXMgcG9zc2libGUgZm9yIGEKLSAgICAgICAgcmVzb3VyY2UgYWRhcHRlciBkZXBsb3llciB0byBvdmVycmlkZSB0aGlzCi0gICAgICAgIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZHVyaW5nIGRlcGxveW1lbnQuCi0KLSAgICAgICAgRXhhbXBsZToKLSAgICAgICAgPGNvbmZpZy1wcm9wZXJ0eS12YWx1ZT5Xb21iYXRTZXJ2ZXI8L2NvbmZpZy1wcm9wZXJ0eS12YWx1ZT4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImNvbm5lY3Rpb24tZGVmaW5pdGlvblR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgY29ubmVjdGlvbi1kZWZpbml0aW9uVHlwZSBkZWZpbmVzIGEgc2V0IG9mIGNvbm5lY3Rpb24KLWludGVyZmFjZXMgYW5kIGNsYXNzZXMgcGVydGFpbmluZyB0byBhIHBhcnRpY3VsYXIgY29ubmVjdGlvbgotdHlwZS4gVGhpcyBhbHNvIGluY2x1ZGVzIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0aWVzIGZvcgotTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGluc3RhbmNlcyB0aGF0IG1heSBiZSBwcm9kdWNlZCBvdXQKLW9mIHRoaXMgc2V0LgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJtYW5hZ2VkY29ubmVjdGlvbmZhY3RvcnktY2xhc3MiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmZ1bGx5LXF1YWxpZmllZC1jbGFzc1R5cGUiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgZWxlbWVudCBtYW5hZ2VkY29ubmVjdGlvbmZhY3RvcnktY2xhc3Mgc3BlY2lmaWVzCi0gICAgICAgIHRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgSmF2YSBjbGFzcyB0aGF0Ci0gICAgICAgIGltcGxlbWVudHMgdGhlCi0gICAgICAgIGphdmF4LnJlc291cmNlLnNwaS5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnkgaW50ZXJmYWNlLgotICAgICAgICBUaGlzIEphdmEgY2xhc3MgaXMgcHJvdmlkZWQgYXMgcGFydCBvZiByZXNvdXJjZQotICAgICAgICBhZGFwdGVyJ3MgaW1wbGVtZW50YXRpb24gb2YgY29ubmVjdG9yIGFyY2hpdGVjdHVyZQotICAgICAgICBzcGVjaWZpZWQgY29udHJhY3RzLiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcwotICAgICAgICBjbGFzcyBpcyByZXF1aXJlZCB0byBiZSBhIEphdmFCZWFuLgotCi0gICAgICAgIEV4YW1wbGU6Ci0gICAgICAgIDxtYW5hZ2VkY29ubmVjdGlvbmZhY3RvcnktY2xhc3M+Ci0gICAgICAgICAgICBjb20ud29tYmF0Lk1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeUltcGwKLSAgICAgICAgPC9tYW5hZ2VkY29ubmVjdGlvbmZhY3RvcnktY2xhc3M+Ci0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImNvbmZpZy1wcm9wZXJ0eSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6Y29uZmlnLXByb3BlcnR5VHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJjb25uZWN0aW9uZmFjdG9yeS1pbnRlcmZhY2UiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmZ1bGx5LXF1YWxpZmllZC1jbGFzc1R5cGUiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgZWxlbWVudCBjb25uZWN0aW9uZmFjdG9yeS1pbnRlcmZhY2Ugc3BlY2lmaWVzCi0gICAgICAgIHRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgQ29ubmVjdGlvbkZhY3RvcnkKLSAgICAgICAgaW50ZXJmYWNlIHN1cHBvcnRlZCBieSB0aGUgcmVzb3VyY2UgYWRhcHRlci4KLQotICAgICAgICBFeGFtcGxlOgotICAgICAgICA8Y29ubmVjdGlvbmZhY3RvcnktaW50ZXJmYWNlPmNvbS53b21iYXQuQ29ubmVjdGlvbkZhY3RvcnkKLSAgICAgICAgPC9jb25uZWN0aW9uZmFjdG9yeS1pbnRlcmZhY2U+Ci0KLSAgICAgICAgT1IKLQotICAgICAgICA8Y29ubmVjdGlvbmZhY3RvcnktaW50ZXJmYWNlPmphdmF4LnJlc291cmNlLmNjaS5Db25uZWN0aW9uRmFjdG9yeQotICAgICAgICA8L2Nvbm5lY3Rpb25mYWN0b3J5LWludGVyZmFjZT4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotCi0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJjb25uZWN0aW9uZmFjdG9yeS1pbXBsLWNsYXNzIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpmdWxseS1xdWFsaWZpZWQtY2xhc3NUeXBlIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGVsZW1lbnQgY29ubmVjdGlvbmZhY3RvcnktaW1wbC1jbGFzcyBzcGVjaWZpZXMKLSAgICAgICAgdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBDb25uZWN0aW9uRmFjdG9yeQotICAgICAgICBjbGFzcyB0aGF0IGltcGxlbWVudHMgcmVzb3VyY2UgYWRhcHRlcgotICAgICAgICBzcGVjaWZpYyBDb25uZWN0aW9uRmFjdG9yeSBpbnRlcmZhY2UuCi0KLSAgICAgICAgRXhhbXBsZToKLQotICAgICAgICA8Y29ubmVjdGlvbmZhY3RvcnktaW1wbC1jbGFzcz5jb20ud29tYmF0LkNvbm5lY3Rpb25GYWN0b3J5SW1wbAotICAgICAgICA8L2Nvbm5lY3Rpb25mYWN0b3J5LWltcGwtY2xhc3M+Ci0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImNvbm5lY3Rpb24taW50ZXJmYWNlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpmdWxseS1xdWFsaWZpZWQtY2xhc3NUeXBlIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGNvbm5lY3Rpb24taW50ZXJmYWNlIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBmdWxseQotICAgICAgICBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgQ29ubmVjdGlvbiBpbnRlcmZhY2Ugc3VwcG9ydGVkCi0gICAgICAgIGJ5IHRoZSByZXNvdXJjZSBhZGFwdGVyLgotCi0gICAgICAgIEV4YW1wbGU6Ci0KLSAgICAgICAgICAgIDxjb25uZWN0aW9uLWludGVyZmFjZT5qYXZheC5yZXNvdXJjZS5jY2kuQ29ubmVjdGlvbgotICAgICAgICAgICAgPC9jb25uZWN0aW9uLWludGVyZmFjZT4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iY29ubmVjdGlvbi1pbXBsLWNsYXNzIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpmdWxseS1xdWFsaWZpZWQtY2xhc3NUeXBlIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGNvbm5lY3Rpb24taW1wbC1jbGFzc1R5cGUgc3BlY2lmaWVzIHRoZSBmdWxseQotICAgICAgICBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgQ29ubmVjdGlvbiBjbGFzcyB0aGF0Ci0gICAgICAgIGltcGxlbWVudHMgcmVzb3VyY2UgYWRhcHRlciBzcGVjaWZpYyBDb25uZWN0aW9uCi0gICAgICAgIGludGVyZmFjZS4gIEl0IGlzIHVzZWQgYnkgdGhlIGNvbm5lY3Rpb24taW1wbC1jbGFzcwotICAgICAgICBlbGVtZW50cy4KLQotICAgICAgICBFeGFtcGxlOgotCi0gICAgICAgICAgICA8Y29ubmVjdGlvbi1pbXBsLWNsYXNzPmNvbS53b21iYXQuQ29ubmVjdGlvbkltcGwKLSAgICAgICAgICAgIDwvY29ubmVjdGlvbi1pbXBsLWNsYXNzPgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iY29ubmVjdG9yVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBjb25uZWN0b3JUeXBlIGRlZmluZXMgYSByZXNvdXJjZSBhZGFwdGVyLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRpc3BsYXktbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGlzcGxheS1uYW1lVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJpY29uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTppY29uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJ2ZW5kb3ItbmFtZSI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBlbGVtZW50IHZlbmRvci1uYW1lIHNwZWNpZmllcyB0aGUgbmFtZSBvZgotICAgICAgICByZXNvdXJjZSBhZGFwdGVyIHByb3ZpZGVyIHZlbmRvci4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZWlzLXR5cGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGVsZW1lbnQgZWlzLXR5cGUgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCi0gICAgICAgIHR5cGUgb2YgdGhlIEVJUy4gRm9yIGV4YW1wbGUsIHRoZSB0eXBlIG9mIGFuIEVJUyBjYW4KLSAgICAgICAgYmUgcHJvZHVjdCBuYW1lIG9mIEVJUyBpbmRlcGVuZGVudCBvZiBhbnkgdmVyc2lvbgotICAgICAgICBpbmZvLgotCi0gICAgICAgIFRoaXMgaGVscHMgaW4gaWRlbnRpZnlpbmcgRUlTIGluc3RhbmNlcyB0aGF0IGNhbiBiZQotICAgICAgICB1c2VkIHdpdGggdGhpcyByZXNvdXJjZSBhZGFwdGVyLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyZXNvdXJjZWFkYXB0ZXItdmVyc2lvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9InhzZDpzdHJpbmciPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgZWxlbWVudCB2ZXJzaW9uIHNwZWNpZmllcyBhIHN0cmluZy1iYXNlZCB2ZXJzaW9uCi0gICAgICAgIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyIGZyb20gdGhlIHJlc291cmNlIGFkYXB0ZXIKLSAgICAgICAgcHJvdmlkZXIuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibGljZW5zZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bGljZW5zZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJlc291cmNlYWRhcHRlciIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cmVzb3VyY2VhZGFwdGVyVHlwZSIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVwbG95bWVudC1leHRlbnNpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlcGxveW1lbnQtZXh0ZW5zaW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgUmVzb3VyY2UgYWRhcHRlciBzcGVjaWZpYyBleHRlbnNpb25zIGNhbiBiZQotICAgICAgICBzcGVjaWZpZWQgYnkgdXNpbmcgdGhlIGRlcGxveW1lbnQtZXh0ZW5zaW9uCi0gICAgICAgIGVsZW1lbnRzLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIgotICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGV3ZXktdmVyc2lvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgZml4ZWQ9IjEuNSIKLSAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIj4KLSAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgVGhlIHZlcnNpb24gc3BlY2lmaWVzIHRoZSB2ZXJzaW9uIG9mIHRoZQotICAgIGNvbm5lY3RvciBhcmNoaXRlY3R1cmUgc3BlY2lmaWNhdGlvbiB0aGF0IGlzCi0gICAgc3VwcG9ydGVkIGJ5IHRoaXMgcmVzb3VyY2UgYWRhcHRlci4gVGhpcyBpbmZvcm1hdGlvbgotICAgIGVuYWJsZXMgZGVwbG95ZXIgdG8gY29uZmlndXJlIHRoZSByZXNvdXJjZSBhZGFwdGVyIHRvCi0gICAgc3VwcG9ydCBkZXBsb3ltZW50IGFuZCBydW50aW1lIHJlcXVpcmVtZW50cyBvZiB0aGUKLSAgICBjb3JyZXNwb25kaW5nIGNvbm5lY3RvciBhcmNoaXRlY3R1cmUgc3BlY2lmaWNhdGlvbi4KLQotICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICA8L3hzZDphdHRyaWJ1dGU+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJjcmVkZW50aWFsLWludGVyZmFjZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgY3JlZGVudGlhbC1pbnRlcmZhY2VUeXBlIHNwZWNpZmllcyB0aGUKLWludGVyZmFjZSB0aGF0IHRoZSByZXNvdXJjZSBhZGFwdGVyIGltcGxlbWVudGF0aW9uCi1zdXBwb3J0cyBmb3IgdGhlIHJlcHJlc2VudGF0aW9uIG9mIHRoZQotY3JlZGVudGlhbHMuIFRoaXMgZWxlbWVudChzKSB0aGF0IHVzZSB0aGlzIHR5cGUsCi1pLmUuIGNyZWRlbnRpYWwtaW50ZXJmYWNlLCAgc2hvdWxkIGJlIHVzZWQgYnkKLWFwcGxpY2F0aW9uIHNlcnZlciB0byBmaW5kIG91dCB0aGUgQ3JlZGVudGlhbAotaW50ZXJmYWNlIGl0IHNob3VsZCB1c2UgYXMgcGFydCBvZiB0aGUgc2VjdXJpdHkKLWNvbnRyYWN0LgotCi1UaGUgcG9zc2libGUgdmFsdWVzIGFyZToKLQotamF2YXgucmVzb3VyY2Uuc3BpLnNlY3VyaXR5LlBhc3N3b3JkQ3JlZGVudGlhbAotb3JnLmlldGYuamdzcy5HU1NDcmVkZW50aWFsCi1qYXZheC5yZXNvdXJjZS5zcGkuc2VjdXJpdHkuR2VuZXJpY0NyZWRlbnRpYWwKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOmZ1bGx5LXF1YWxpZmllZC1jbGFzc1R5cGUiPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uCi0gICAgICAgICAgICB2YWx1ZT0iamF2YXgucmVzb3VyY2Uuc3BpLnNlY3VyaXR5LlBhc3N3b3JkQ3JlZGVudGlhbCIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uCi0gICAgICAgICAgICB2YWx1ZT0ib3JnLmlldGYuamdzcy5HU1NDcmVkZW50aWFsIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24KLSAgICAgICAgICAgIHZhbHVlPSJqYXZheC5yZXNvdXJjZS5zcGkuc2VjdXJpdHkuR2VuZXJpY0NyZWRlbnRpYWwiLz4KLSAgICA8L3hzZDpyZXN0cmljdGlvbj4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImluYm91bmQtcmVzb3VyY2VhZGFwdGVyVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBpbmJvdW5kLXJlc291cmNlYWRhcHRlclR5cGUgc3BlY2lmaWVzIGluZm9ybWF0aW9uCi1hYm91dCBhbiBpbmJvdW5kIHJlc291cmNlIGFkYXB0ZXIuIFRoaXMgY29udGFpbnMgaW5mb3JtYXRpb24KLXNwZWNpZmljIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcmVzb3VyY2UgYWRhcHRlcgotbGlicmFyeSBhcyBzcGVjaWZpZWQgdGhyb3VnaCB0aGUgbWVzc2FnZWFkYXB0ZXIgZWxlbWVudC4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibWVzc2FnZWFkYXB0ZXIiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOm1lc3NhZ2VhZGFwdGVyVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgIDx4c2Q6dW5pcXVlIG5hbWU9Im1lc3NhZ2VsaXN0ZW5lci10eXBlLXVuaXF1ZW5lc3MiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgbWVzc2FnZWxpc3RlbmVyLXR5cGUgZWxlbWVudCBjb250ZW50IG11c3QgYmUKLSAgICAgICAgdW5pcXVlIGluIHRoZSBtZXNzYWdlYWRhcHRlci4gU2V2ZXJhbCBtZXNzYWdlbGlzdGVuZXJzCi0gICAgICAgIGNhbiBub3QgdXNlIHRoZSBzYW1lIG1lc3NhZ2VsaXN0ZW5lci10eXBlLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6bWVzc2FnZWxpc3RlbmVyIi8+Ci0gICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6bWVzc2FnZWxpc3RlbmVyLXR5cGUiLz4KLSAgICAgICAgPC94c2Q6dW5pcXVlPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImxpY2Vuc2VUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGxpY2Vuc2VUeXBlIHNwZWNpZmllcyBsaWNlbnNpbmcgcmVxdWlyZW1lbnRzIGZvciB0aGUKLXJlc291cmNlIGFkYXB0ZXIgbW9kdWxlLiBUaGlzIHR5cGUgc3BlY2lmaWVzIHdoZXRoZXIgYQotbGljZW5zZSBpcyByZXF1aXJlZCB0byBkZXBsb3kgYW5kIHVzZSB0aGlzIHJlc291cmNlIGFkYXB0ZXIsCi1hbmQgYW4gb3B0aW9uYWwgZGVzY3JpcHRpb24gb2YgdGhlIGxpY2Vuc2luZyB0ZXJtcwotKGV4YW1wbGVzOiBkdXJhdGlvbiBvZiBsaWNlbnNlLCBudW1iZXIgb2YgY29ubmVjdGlvbgotcmVzdHJpY3Rpb25zKS4gSXQgaXMgdXNlZCBieSB0aGUgbGljZW5zZSBlbGVtZW50LgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXNjcmlwdGlvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibGljZW5zZS1yZXF1aXJlZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnRydWUtZmFsc2VUeXBlIj4KLSAgICAgICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICAgICAgVGhlIGVsZW1lbnQgbGljZW5zZS1yZXF1aXJlZCBzcGVjaWZpZXMgd2hldGhlciBhCi0gICAgICAgICAgICBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGRlcGxveSBhbmQgdXNlIHRoZQotICAgICAgICAgICAgcmVzb3VyY2UgYWRhcHRlci4gVGhpcyBlbGVtZW50IG11c3QgYmUgb25lIG9mCi0gICAgICAgICAgICB0aGUgZm9sbG93aW5nLCAidHJ1ZSIgb3IgImZhbHNlIi4KLQotICAgICAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgIDwveHNkOnNlcXVlbmNlPgotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJtZXNzYWdlYWRhcHRlclR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgbWVzc2FnZWFkYXB0ZXJUeXBlIHNwZWNpZmllcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKLW1lc3NhZ2luZyBjYXBhYmlsaXRpZXMgb2YgdGhlIHJlc291cmNlIGFkYXB0ZXIuIFRoaXMKLWNvbnRhaW5zIGluZm9ybWF0aW9uIHNwZWNpZmljIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKLXJlc291cmNlIGFkYXB0ZXIgbGlicmFyeSBhcyBzcGVjaWZpZWQgdGhyb3VnaCB0aGUKLW1lc3NhZ2VsaXN0ZW5lciBlbGVtZW50LgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJtZXNzYWdlbGlzdGVuZXIiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOm1lc3NhZ2VsaXN0ZW5lclR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9Im1lc3NhZ2VsaXN0ZW5lclR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgbWVzc2FnZWxpc3RlbmVyVHlwZSBzcGVjaWZpZXMgaW5mb3JtYXRpb24gYWJvdXQgYQotc3BlY2lmaWMgbWVzc2FnZSBsaXN0ZW5lciBzdXBwb3J0ZWQgYnkgdGhlIG1lc3NhZ2luZwotcmVzb3VyY2UgYWRhcHRlci4gSXQgY29udGFpbnMgaW5mb3JtYXRpb24gb24gdGhlIEphdmEgdHlwZQotb2YgdGhlIG1lc3NhZ2UgbGlzdGVuZXIgaW50ZXJmYWNlIGFuZCBhbiBhY3RpdmF0aW9uCi1zcGVjaWZpY2F0aW9uLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJtZXNzYWdlbGlzdGVuZXItdHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZnVsbHktcXVhbGlmaWVkLWNsYXNzVHlwZSI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBlbGVtZW50IG1lc3NhZ2VsaXN0ZW5lci10eXBlIHNwZWNpZmllcyB0aGUgZnVsbHkKLSAgICAgICAgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIEphdmEgdHlwZSBvZiBhIG1lc3NhZ2UKLSAgICAgICAgbGlzdGVuZXIgaW50ZXJmYWNlLgotCi0gICAgICAgIEV4YW1wbGU6Ci0KLSAgICAgICAgICA8bWVzc2FnZWxpc3RlbmVyLXR5cGU+amF2YXguam1zLk1lc3NhZ2VMaXN0ZW5lcgotICAgICAgICAgIDwvbWVzc2FnZWxpc3RlbmVyLXR5cGU+Ci0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iYWN0aXZhdGlvbnNwZWMiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmFjdGl2YXRpb25zcGVjVHlwZSIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9Im91dGJvdW5kLXJlc291cmNlYWRhcHRlclR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgb3V0Ym91bmQtcmVzb3VyY2VhZGFwdGVyVHlwZSBzcGVjaWZpZXMgaW5mb3JtYXRpb24gYWJvdXQKLWFuIG91dGJvdW5kIHJlc291cmNlIGFkYXB0ZXIuIFRoZSBpbmZvcm1hdGlvbiBpbmNsdWRlcyBmdWxseQotcXVhbGlmaWVkIG5hbWVzIG9mIGNsYXNzZXMvaW50ZXJmYWNlcyByZXF1aXJlZCBhcyBwYXJ0IG9mCi10aGUgY29ubmVjdG9yIGFyY2hpdGVjdHVyZSBzcGVjaWZpZWQgY29udHJhY3RzIGZvcgotY29ubmVjdGlvbiBtYW5hZ2VtZW50LCBsZXZlbCBvZiB0cmFuc2FjdGlvbiBzdXBwb3J0Ci1wcm92aWRlZCwgb25lIG9yIG1vcmUgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcyBzdXBwb3J0ZWQKLWFuZCBhZGRpdGlvbmFsIHJlcXVpcmVkIHNlY3VyaXR5IHBlcm1pc3Npb25zLgotCi1JZiB0aGVyZSBpcyBubyBhdXRoZW50aWNhdGlvbi1tZWNoYW5pc20gc3BlY2lmaWVkIGFzIHBhcnQgb2YKLXJlc291cmNlIGFkYXB0ZXIgZWxlbWVudCB0aGVuIHRoZSByZXNvdXJjZSBhZGFwdGVyIGRvZXMgbm90Ci1zdXBwb3J0IGFueSBzdGFuZGFyZCBzZWN1cml0eSBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zIGFzCi1wYXJ0IG9mIHNlY3VyaXR5IGNvbnRyYWN0LiBUaGUgYXBwbGljYXRpb24gc2VydmVyIGlnbm9yZXMKLXRoZSBzZWN1cml0eSBwYXJ0IG9mIHRoZSBzeXN0ZW0gY29udHJhY3RzIGluIHRoaXMgY2FzZS4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iY29ubmVjdGlvbi1kZWZpbml0aW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpjb25uZWN0aW9uLWRlZmluaXRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InRyYW5zYWN0aW9uLXN1cHBvcnQiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnRyYW5zYWN0aW9uLXN1cHBvcnRUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJhdXRoZW50aWNhdGlvbi1tZWNoYW5pc20iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmF1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icmVhdXRoZW50aWNhdGlvbi1zdXBwb3J0IgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTp0cnVlLWZhbHNlVHlwZSI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBlbGVtZW50IHJlYXV0aGVudGljYXRpb24tc3VwcG9ydCBzcGVjaWZpZXMKLSAgICAgICAgd2hldGhlciB0aGUgcmVzb3VyY2UgYWRhcHRlciBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cwotICAgICAgICByZS1hdXRoZW50aWNhdGlvbiBvZiBleGlzdGluZyBNYW5hZ2VkLSBDb25uZWN0aW9uCi0gICAgICAgIGluc3RhbmNlLiBOb3RlIHRoYXQgdGhpcyBpbmZvcm1hdGlvbiBpcyBmb3IgdGhlCi0gICAgICAgIHJlc291cmNlIGFkYXB0ZXIgaW1wbGVtZW50YXRpb24gYW5kIG5vdCBmb3IgdGhlCi0gICAgICAgIHVuZGVybHlpbmcgRUlTIGluc3RhbmNlLiBUaGlzIGVsZW1lbnQgbXVzdCBoYXZlCi0gICAgICAgIGVpdGhlciBhICJ0cnVlIiBvciAiZmFsc2UiIHZhbHVlLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlY3VyaXR5LXBlcm1pc3Npb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnNlY3VyaXR5LXBlcm1pc3Npb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9InJlcXVpcmVkLWNvbmZpZy1wcm9wZXJ0eVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgcmVxdWlyZWQtY29uZmlnLXByb3BlcnR5VHlwZSBjb250YWlucyBhIGRlY2xhcmF0aW9uCi1vZiBhIHNpbmdsZSBjb25maWd1cmF0aW9uIHByb3BlcnR5IHVzZWQgZm9yIHNwZWNpZnlpbmcgYQotcmVxdWlyZWQgY29uZmlndXJhdGlvbiBwcm9wZXJ0eSBuYW1lLiBJdCBpcyB1c2VkCi1ieSByZXF1aXJlZC1jb25maWctcHJvcGVydHkgZWxlbWVudHMuCi0KLUV4YW1wbGU6Ci0KLTxyZXF1aXJlZC1jb25maWctcHJvcGVydHk+RGVzdGluYXRpb248L3JlcXVpcmVkLWNvbmZpZy1wcm9wZXJ0eT4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJjb25maWctcHJvcGVydHktbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6Y29uZmlnLXByb3BlcnR5LW5hbWVUeXBlIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0icmVzb3VyY2VhZGFwdGVyVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSByZXNvdXJjZWFkYXB0ZXJUeXBlIHNwZWNpZmllcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKLXJlc291cmNlIGFkYXB0ZXIuIFRoZSBpbmZvcm1hdGlvbiBpbmNsdWRlcyBmdWxseSBxdWFsaWZpZWQKLXJlc291cmNlIGFkYXB0ZXIgSmF2YSBjbGFzcyBuYW1lLCBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMsCi1pbmZvcm1hdGlvbiBzcGVjaWZpYyB0byB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHJlc291cmNlCi1hZGFwdGVyIGxpYnJhcnkgYXMgc3BlY2lmaWVkIHRocm91Z2ggdGhlCi1vdXRib3VuZC1yZXNvdXJjZWFkYXB0ZXIgYW5kIGluYm91bmQtcmVzb3VyY2VhZGFwdGVyCi1lbGVtZW50cywgYW5kIGFuIG9wdGlvbmFsIHNldCBvZiBhZG1pbmlzdGVyZWQgb2JqZWN0cy4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icmVzb3VyY2VhZGFwdGVyLWNsYXNzIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpmdWxseS1xdWFsaWZpZWQtY2xhc3NUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGVsZW1lbnQgcmVzb3VyY2VhZGFwdGVyLWNsYXNzIHNwZWNpZmllcyB0aGUKLSAgICAgICAgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgYSBKYXZhIGNsYXNzIHRoYXQgaW1wbGVtZW50cwotICAgICAgICB0aGUgamF2YXgucmVzb3VyY2Uuc3BpLlJlc291cmNlQWRhcHRlcgotICAgICAgICBpbnRlcmZhY2UuIFRoaXMgSmF2YSBjbGFzcyBpcyBwcm92aWRlZCBhcyBwYXJ0IG9mCi0gICAgICAgIHJlc291cmNlIGFkYXB0ZXIncyBpbXBsZW1lbnRhdGlvbiBvZiBjb25uZWN0b3IKLSAgICAgICAgYXJjaGl0ZWN0dXJlIHNwZWNpZmllZCBjb250cmFjdHMuIFRoZSBpbXBsZW1lbnRhdGlvbgotICAgICAgICBvZiB0aGlzIGNsYXNzIGlzIHJlcXVpcmVkIHRvIGJlIGEgSmF2YUJlYW4uCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iY29uZmlnLXByb3BlcnR5IgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpjb25maWctcHJvcGVydHlUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im91dGJvdW5kLXJlc291cmNlYWRhcHRlciIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6b3V0Ym91bmQtcmVzb3VyY2VhZGFwdGVyVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXIiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmluYm91bmQtcmVzb3VyY2VhZGFwdGVyVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iYWRtaW5vYmplY3QiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmFkbWlub2JqZWN0VHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ic2VjdXJpdHktcGVybWlzc2lvblR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgc2VjdXJpdHktcGVybWlzc2lvblR5cGUgc3BlY2lmaWVzIGEgc2VjdXJpdHkKLXBlcm1pc3Npb24gdGhhdCBpcyByZXF1aXJlZCBieSB0aGUgcmVzb3VyY2UgYWRhcHRlciBjb2RlLgotCi1UaGUgc2VjdXJpdHkgcGVybWlzc2lvbiBsaXN0ZWQgaW4gdGhlIGRlcGxveW1lbnQgZGVzY3JpcHRvcgotYXJlIG9uZXMgdGhhdCBhcmUgZGlmZmVyZW50IGZyb20gdGhvc2UgcmVxdWlyZWQgYnkgdGhlCi1kZWZhdWx0IHBlcm1pc3Npb24gc2V0IGFzIHNwZWNpZmllZCBpbiB0aGUgY29ubmVjdG9yCi1zcGVjaWZpY2F0aW9uLiBUaGUgb3B0aW9uYWwgZGVzY3JpcHRpb24gY2FuIG1lbnRpb24gc3BlY2lmaWMKLXJlYXNvbiB0aGF0IHJlc291cmNlIGFkYXB0ZXIgcmVxdWlyZXMgYSBnaXZlbiBzZWN1cml0eQotcGVybWlzc2lvbi4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzZWN1cml0eS1wZXJtaXNzaW9uLXNwZWMiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGVsZW1lbnQgcGVybWlzc2lvbi1zcGVjIHNwZWNpZmllcyBhIHNlY3VyaXR5Ci0gICAgICAgIHBlcm1pc3Npb24gYmFzZWQgb24gdGhlIFNlY3VyaXR5IHBvbGljeSBmaWxlCi0gICAgICAgIHN5bnRheC4gUmVmZXIgdG8gdGhlIGZvbGxvd2luZyBVUkwgZm9yIFN1bidzCi0gICAgICAgIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzZWN1cml0eSBwZXJtaXNzaW9uCi0gICAgICAgIHNwZWNpZmljYXRpb246Ci0KLSAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS9wcm9kdWN0cy9qZGsvMS40L2RvY3MvZ3VpZGUvc2VjdXJpdHkvUG9saWN5RmlsZXMuaHRtbCNGaWxlU3ludGF4Ci0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJ0cmFuc2FjdGlvbi1zdXBwb3J0VHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSB0cmFuc2FjdGlvbi1zdXBwb3J0VHlwZSBzcGVjaWZpZXMgdGhlIGxldmVsIG9mCi10cmFuc2FjdGlvbiBzdXBwb3J0IHByb3ZpZGVkIGJ5IHRoZSByZXNvdXJjZSBhZGFwdGVyLiBJdCBpcwotdXNlZCBieSB0cmFuc2FjdGlvbi1zdXBwb3J0IGVsZW1lbnRzLgotCi1UaGUgdmFsdWUgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKLQotICAgIE5vVHJhbnNhY3Rpb24KLSAgICBMb2NhbFRyYW5zYWN0aW9uCi0gICAgWEFUcmFuc2FjdGlvbgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpzdHJpbmciPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb1RyYW5zYWN0aW9uIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2FsVHJhbnNhY3Rpb24iLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWEFUcmFuc2FjdGlvbiIvPgotICAgIDwveHNkOnJlc3RyaWN0aW9uPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08L3hzZDpzY2hlbWE+Ci0KZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2oyZWUvZWpiLWphcl8yXzEueHNkIGIvdjIvdGVzdC9jYXNlcy9zY2hlbWEvajJlZS9lamItamFyXzJfMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxNmMxMmUuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvajJlZS9lamItamFyXzJfMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMzgzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKLSAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKLSAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0gICAgIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKLSAgICAgdmVyc2lvbj0iMi4xIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLUAoIyllamItamFyXzJfMS54c2RzCTEuMTAgMDcvMjQvMDIKLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLUNvcHlyaWdodCAyMDAyIFN1biBNaWNyb3N5c3RlbXMsIEluYy4sIDkwMSBTYW4gQW50b25pbwotUm9hZCwgUGFsbyBBbHRvLCBDYWxpZm9ybmlhIDk0MzAzLCBVLlMuQS4gQWxsIHJpZ2h0cwotcmVzZXJ2ZWQuCi0KLVN1biBNaWNyb3N5c3RlbXMsIEluYy4gaGFzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMKLXJlbGF0aW5nIHRvIHRlY2hub2xvZ3kgZGVzY3JpYmVkIGluIHRoaXMgZG9jdW1lbnQuIEluCi1wYXJ0aWN1bGFyLCBhbmQgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGVzZSBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBtYXkgaW5jbHVkZSBvbmUgb3IgbW9yZSBvZiB0aGUgVS5TLiBwYXRlbnRzCi1saXN0ZWQgYXQgaHR0cDovL3d3dy5zdW4uY29tL3BhdGVudHMgYW5kIG9uZSBvciBtb3JlCi1hZGRpdGlvbmFsIHBhdGVudHMgb3IgcGVuZGluZyBwYXRlbnQgYXBwbGljYXRpb25zIGluIHRoZQotVS5TLiBhbmQgb3RoZXIgY291bnRyaWVzLgotCi1UaGlzIGRvY3VtZW50IGFuZCB0aGUgdGVjaG5vbG9neSB3aGljaCBpdCBkZXNjcmliZXMgYXJlCi1kaXN0cmlidXRlZCB1bmRlciBsaWNlbnNlcyByZXN0cmljdGluZyB0aGVpciB1c2UsIGNvcHlpbmcsCi1kaXN0cmlidXRpb24sIGFuZCBkZWNvbXBpbGF0aW9uLiBObyBwYXJ0IG9mIHRoaXMgZG9jdW1lbnQKLW1heSBiZSByZXByb2R1Y2VkIGluIGFueSBmb3JtIGJ5IGFueSBtZWFucyB3aXRob3V0IHByaW9yCi13cml0dGVuIGF1dGhvcml6YXRpb24gb2YgU3VuIGFuZCBpdHMgbGljZW5zb3JzLCBpZiBhbnkuCi0KLVRoaXJkLXBhcnR5IHNvZnR3YXJlLCBpbmNsdWRpbmcgZm9udCB0ZWNobm9sb2d5LCBpcwotY29weXJpZ2h0ZWQgYW5kIGxpY2Vuc2VkIGZyb20gU3VuIHN1cHBsaWVycy4KLQotU3VuLCBTdW4gTWljcm9zeXN0ZW1zLCB0aGUgU3VuIGxvZ28sIFNvbGFyaXMsIEphdmEsIEoyRUUsCi1KYXZhU2VydmVyIFBhZ2VzLCBFbnRlcnByaXNlIEphdmFCZWFucyBhbmQgdGhlIEphdmEgQ29mZmVlCi1DdXAgbG9nbyBhcmUgdHJhZGVtYXJrcyBvciByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YgU3VuCi1NaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFUuUy4gYW5kIG90aGVyIGNvdW50cmllcy4KLQotRmVkZXJhbCBBY3F1aXNpdGlvbnM6IENvbW1lcmNpYWwgU29mdHdhcmUgLSBHb3Zlcm5tZW50IFVzZXJzCi1TdWJqZWN0IHRvIFN0YW5kYXJkIExpY2Vuc2UgVGVybXMgYW5kIENvbmRpdGlvbnMuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoaXMgaXMgdGhlIFhNTCBTY2hlbWEgZm9yIHRoZSBFSkIgMi4xIGRlcGxveW1lbnQKLWRlc2NyaXB0b3IuICBBbGwgRUpCIGRlcGxveW1lbnQgZGVzY3JpcHRvcnMgbXVzdCBpbmRpY2F0ZQotdGhlIGVqYi1qYXIgc2NoZW1hIGJ5IHVzaW5nIHRoZSBKMkVFIG5hbWVzcGFjZToKLQotaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQotCi1hbmQgYnkgaW5kaWNhdGluZyB0aGUgdmVyc2lvbiBvZiB0aGUgc2NoZW1hIGJ5Ci11c2luZyB0aGUgdmVyc2lvbiBlbGVtZW50IGFzIHNob3duIGJlbG93OgotCi0gICAgPGVqYi1qYXIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiCi0gICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQotICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS9lamItamFyXzJfMS54c2QiCi0gICAgIHZlcnNpb249IjIuMSI+Ci0gICAgLi4uCi0gICAgPC9lamItamFyPgotCi1UaGUgaW5zdGFuY2UgZG9jdW1lbnRzIG1heSBpbmRpY2F0ZSB0aGUgcHVibGlzaGVkIHZlcnNpb24gb2YKLXRoZSBzY2hlbWEgdXNpbmcgdGhlIHhzaTpzY2hlbWFMb2NhdGlvbiBhdHRyaWJ1dGUgZm9yIHRoZQotSjJFRSBuYW1lc3BhY2Ugd2l0aCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uOgotCi1odHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL2VqYi1qYXJfMl8xLnhzZAotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgZm9sbG93aW5nIGNvbnZlbnRpb25zIGFwcGx5IHRvIGFsbCBKMkVFCi1kZXBsb3ltZW50IGRlc2NyaXB0b3IgZWxlbWVudHMgdW5sZXNzIGluZGljYXRlZCBvdGhlcndpc2UuCi0KLS0gSW4gZWxlbWVudHMgdGhhdCBzcGVjaWZ5IGEgcGF0aG5hbWUgdG8gYSBmaWxlIHdpdGhpbiB0aGUKLSAgc2FtZSBKQVIgZmlsZSwgcmVsYXRpdmUgZmlsZW5hbWVzIChpLmUuLCB0aG9zZSBub3QKLSAgc3RhcnRpbmcgd2l0aCAiLyIpIGFyZSBjb25zaWRlcmVkIHJlbGF0aXZlIHRvIHRoZSByb290IG9mCi0gIHRoZSBKQVIgZmlsZSdzIG5hbWVzcGFjZS4gIEFic29sdXRlIGZpbGVuYW1lcyAoaS5lLiwgdGhvc2UKLSAgc3RhcnRpbmcgd2l0aCAiLyIpIGFsc28gc3BlY2lmeSBuYW1lcyBpbiB0aGUgcm9vdCBvZiB0aGUKLSAgSkFSIGZpbGUncyBuYW1lc3BhY2UuICBJbiBnZW5lcmFsLCByZWxhdGl2ZSBuYW1lcyBhcmUKLSAgcHJlZmVycmVkLiAgVGhlIGV4Y2VwdGlvbiBpcyAud2FyIGZpbGVzIHdoZXJlIGFic29sdXRlCi0gIG5hbWVzIGFyZSBwcmVmZXJyZWQgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIFNlcnZsZXQgQVBJLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249ImoyZWVfMV80LnhzZCIvPgotCi0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotCi08eHNkOmVsZW1lbnQgbmFtZT0iZWpiLWphciIgdHlwZT0iajJlZTplamItamFyVHlwZSI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIFRoaXMgaXMgdGhlIHJvb3Qgb2YgdGhlIGVqYi1qYXIgZGVwbG95bWVudCBkZXNjcmlwdG9yLgotCi0gICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICA8L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDprZXkgbmFtZT0iZWpiLW5hbWUta2V5Ij4KLSAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgVGhlIGVqYi1uYW1lIGVsZW1lbnQgY29udGFpbnMgdGhlIG5hbWUgb2YgYW4gZW50ZXJwcmlzZQotICAgIGJlYW4uIFRoZSBuYW1lIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUgZWpiLWphciBmaWxlLgotCi0gICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOmVudGVycHJpc2UtYmVhbnMvKiIvPgotICAgICAgICA8eHNkOmZpZWxkICAgIHhwYXRoPSJqMmVlOmVqYi1uYW1lIi8+Ci0gICAgPC94c2Q6a2V5PgotCi0gICAgPHhzZDprZXlyZWYgbmFtZT0iZWpiLW5hbWUtcmVmZXJlbmNlcyIKLSAgICAgICAgICAgIHJlZmVyPSJqMmVlOmVqYi1uYW1lLWtleSI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIFRoZSBrZXlyZWYgaW5kaWNhdGVzIHRoZSByZWZlcmVuY2VzIGZyb20KLSAgICByZWxhdGlvbnNoaXAtcm9sZS1zb3VyY2UgbXVzdCBiZSB0byBhIHNwZWNpZmljIGVqYi1uYW1lCi0gICAgZGVmaW5lZCB3aXRoaW4gdGhlIHNjb3BlIG9mIGVudGVycHJpc2UtYmVhbnMgZWxlbWVudC4KLQotICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpzZWxlY3RvcgotICAgICAgICAgICAgeHBhdGg9Ii4vL2oyZWU6ZWpiLXJlbGF0aW9uc2hpcC1yb2xlL2oyZWU6cmVsYXRpb25zaGlwLXJvbGUtc291cmNlIi8+Ci0gICAgICAgIDx4c2Q6ZmllbGQKLSAgICAgICAgICAgIHhwYXRoPSJqMmVlOmVqYi1uYW1lIi8+Ci0gICAgPC94c2Q6a2V5cmVmPgotCi0gICAgPHhzZDprZXkgbmFtZT0icm9sZS1uYW1lLWtleSI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIEEgcm9sZS1uYW1lLWtleSBpcyBzcGVjaWZpZWQgdG8gYWxsb3cgdGhlIHJlZmVyZW5jZXMKLSAgICBmcm9tIHRoZSBzZWN1cml0eS1yb2xlLXJlZnMuCi0KLSAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6ZW50ZXJwcmlzZS1iZWFucy8qL2oyZWU6c2VjdXJpdHktcm9sZSIvPgotICAgICAgICA8eHNkOmZpZWxkICAgIHhwYXRoPSJqMmVlOnJvbGUtbmFtZSIvPgotICAgIDwveHNkOmtleT4KLQotICAgIDx4c2Q6a2V5cmVmIG5hbWU9InJvbGUtbmFtZS1yZWZlcmVuY2VzIgotICAgICAgICAgICAgcmVmZXI9ImoyZWU6cm9sZS1uYW1lLWtleSI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIFRoZSBrZXlyZWYgaW5kaWNhdGVzIHRoZSByZWZlcmVuY2VzIGZyb20KLSAgICBzZWN1cml0eS1yb2xlLXJlZiB0byBhIHNwZWNpZmllZCByb2xlLW5hbWUuCi0KLSAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6ZW50ZXJwcmlzZS1iZWFucy8qL2oyZWU6c2VjdXJpdHktcm9sZS1yZWYiLz4KLSAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTpyb2xlLWxpbmsiLz4KLSAgICA8L3hzZDprZXlyZWY+Ci0KLTwveHNkOmVsZW1lbnQ+Ci0KLQotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHlUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGFjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5VHlwZSBjb250YWlucyBhIG5hbWUvdmFsdWUKLWNvbmZpZ3VyYXRpb24gcHJvcGVydHkgcGFpciBmb3IgYSBtZXNzYWdlLWRyaXZlbiBiZWFuLgotCi1UaGUgcHJvcGVydGllcyB0aGF0IGFyZSByZWNvZ25pemVkIGZvciBhIHBhcnRpY3VsYXIKLW1lc3NhZ2UtZHJpdmVuIGJlYW4gYXJlIGRldGVybWluZWQgYnkgdGhlIG1lc3NhZ2luZyB0eXBlLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJhY3RpdmF0aW9uLWNvbmZpZy1wcm9wZXJ0eS1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBhY3RpdmF0aW9uLWNvbmZpZy1wcm9wZXJ0eS1uYW1lIGVsZW1lbnQgY29udGFpbnMKLSAgICAgICAgdGhlIG5hbWUgZm9yIGFuIGFjdGl2YXRpb24gY29uZmlndXJhdGlvbiBwcm9wZXJ0eSBvZgotICAgICAgICBhIG1lc3NhZ2UtZHJpdmVuIGJlYW4uCi0KLSAgICAgICAgRm9yIEpNUyBtZXNzYWdlLWRyaXZlbiBiZWFucywgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eQotICAgICAgICBuYW1lcyBhcmUgcmVjb2duaXplZDogYWNrbm93bGVkZ2VNb2RlLAotICAgICAgICBtZXNzYWdlU2VsZWN0b3IsIGRlc3RpbmF0aW9uVHlwZSwgc3Vic2NyaXB0aW9uRHVyYWJpbGl0eQotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJhY3RpdmF0aW9uLWNvbmZpZy1wcm9wZXJ0eS12YWx1ZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9InhzZDpzdHJpbmciPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktdmFsdWUgZWxlbWVudAotICAgICAgICBjb250YWlucyB0aGUgdmFsdWUgZm9yIGFuIGFjdGl2YXRpb24gY29uZmlndXJhdGlvbgotICAgICAgICBwcm9wZXJ0eSBvZiBhIG1lc3NhZ2UtZHJpdmVuIGJlYW4uCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJhY3RpdmF0aW9uLWNvbmZpZ1R5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgYWN0aXZhdGlvbi1jb25maWdUeXBlIGRlZmluZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCi1leHBlY3RlZCBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgb2YgdGhlIG1lc3NhZ2UtZHJpdmVuIGJlYW4KLWluIGl0cyBvcGVyYXRpb25hbCBlbnZpcm9ubWVudC4gVGhpcyBtYXkgaW5jbHVkZSBpbmZvcm1hdGlvbgotYWJvdXQgbWVzc2FnZSBhY2tub3dsZWRnZW1lbnQsIG1lc3NhZ2Ugc2VsZWN0b3IsIGV4cGVjdGVkCi1kZXN0aW5hdGlvbiB0eXBlLCBldGMuCi0KLVRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGlzIGV4cHJlc3NlZCBpbiB0ZXJtcyBvZgotbmFtZS92YWx1ZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMuCi0KLVRoZSBwcm9wZXJ0aWVzIHRoYXQgYXJlIHJlY29nbml6ZWQgZm9yIGEgcGFydGljdWxhcgotbWVzc2FnZS1kcml2ZW4gYmVhbiBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgbWVzc2FnaW5nIHR5cGUuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXNjcmlwdGlvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHkiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmFjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5VHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXBsb3ltZW50LWV4dGVuc2lvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVwbG95bWVudC1leHRlbnNpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImFzc2VtYmx5LWRlc2NyaXB0b3JUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGFzc2VtYmx5LWRlc2NyaXB0b3JUeXBlIGRlZmluZXMKLWFwcGxpY2F0aW9uLWFzc2VtYmx5IGluZm9ybWF0aW9uLgotCi1UaGUgYXBwbGljYXRpb24tYXNzZW1ibHkgaW5mb3JtYXRpb24gY29uc2lzdHMgb2YgdGhlCi1mb2xsb3dpbmcgcGFydHM6IHRoZSBkZWZpbml0aW9uIG9mIHNlY3VyaXR5IHJvbGVzLCB0aGUKLWRlZmluaXRpb24gb2YgbWV0aG9kIHBlcm1pc3Npb25zLCB0aGUgZGVmaW5pdGlvbiBvZgotdHJhbnNhY3Rpb24gYXR0cmlidXRlcyBmb3IgZW50ZXJwcmlzZSBiZWFucyB3aXRoCi1jb250YWluZXItbWFuYWdlZCB0cmFuc2FjdGlvbiBkZW1hcmNhdGlvbiBhbmQgYSBsaXN0IG9mCi1tZXRob2RzIHRvIGJlIGV4Y2x1ZGVkIGZyb20gYmVpbmcgaW52b2tlZC4KLQotQWxsIHRoZSBwYXJ0cyBhcmUgb3B0aW9uYWwgaW4gdGhlIHNlbnNlIHRoYXQgdGhleSBhcmUKLW9taXR0ZWQgaWYgdGhlIGxpc3RzIHJlcHJlc2VudGVkIGJ5IHRoZW0gYXJlIGVtcHR5LgotCi1Qcm92aWRpbmcgYW4gYXNzZW1ibHktZGVzY3JpcHRvciBpbiB0aGUgZGVwbG95bWVudAotZGVzY3JpcHRvciBpcyBvcHRpb25hbCBmb3IgdGhlIGVqYi1qYXIgZmlsZSBwcm9kdWNlci4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ic2VjdXJpdHktcm9sZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c2VjdXJpdHktcm9sZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibWV0aG9kLXBlcm1pc3Npb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOm1ldGhvZC1wZXJtaXNzaW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJjb250YWluZXItdHJhbnNhY3Rpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmNvbnRhaW5lci10cmFuc2FjdGlvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibWVzc2FnZS1kZXN0aW5hdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bWVzc2FnZS1kZXN0aW5hdGlvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZXhjbHVkZS1saXN0IgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpleGNsdWRlLWxpc3RUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXBsb3ltZW50LWV4dGVuc2lvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVwbG95bWVudC1leHRlbnNpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImNtcC1maWVsZFR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgY21wLWZpZWxkVHlwZSBkZXNjcmliZXMgYSBjb250YWluZXItbWFuYWdlZCBmaWVsZC4gVGhlCi1jbXAtZmllbGRUeXBlIGNvbnRhaW5zIGFuIG9wdGlvbmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBmaWVsZCwKLWFuZCB0aGUgbmFtZSBvZiB0aGUgZmllbGQuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImZpZWxkLW5hbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmphdmEtaWRlbnRpZmllclR5cGUiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgZmllbGQtbmFtZSBlbGVtZW50IHNwZWNpZmllcyB0aGUgbmFtZSBvZiBhCi0gICAgICAgIGNvbnRhaW5lciBtYW5hZ2VkIGZpZWxkLgotCi0gICAgICAgIFRoZSBuYW1lIG9mIHRoZSBjbXAtZmllbGQgb2YgYW4gZW50aXR5IGJlYW4gd2l0aAotICAgICAgICBjbXAtdmVyc2lvbiAyLnggbXVzdCBiZWdpbiB3aXRoIGEgbG93ZXJjYXNlCi0gICAgICAgIGxldHRlci4gVGhpcyBmaWVsZCBpcyBhY2Nlc3NlZCBieSBtZXRob2RzIHdob3NlCi0gICAgICAgIG5hbWVzIGNvbnNpc3RzIG9mIHRoZSBuYW1lIG9mIHRoZSBmaWVsZCBzcGVjaWZpZWQgYnkKLSAgICAgICAgZmllbGQtbmFtZSBpbiB3aGljaCB0aGUgZmlyc3QgbGV0dGVyIGlzIHVwcGVyY2FzZWQsCi0gICAgICAgIHByZWZpeGVkIGJ5ICJnZXQiIG9yICJzZXQiLgotCi0gICAgICAgIFRoZSBuYW1lIG9mIHRoZSBjbXAtZmllbGQgb2YgYW4gZW50aXR5IGJlYW4gd2l0aAotICAgICAgICBjbXAtdmVyc2lvbiAxLnggbXVzdCBkZW5vdGUgYSBwdWJsaWMgZmllbGQgb2YgdGhlCi0gICAgICAgIGVudGVycHJpc2UgYmVhbiBjbGFzcyBvciBvbmUgb2YgaXRzIHN1cGVyY2xhc3Nlcy4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVwbG95bWVudC1leHRlbnNpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlcGxveW1lbnQtZXh0ZW5zaW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJjbXAtdmVyc2lvblR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgY21wLXZlcnNpb25UeXBlIHNwZWNpZmllcyB0aGUgdmVyc2lvbiBvZiBhbiBlbnRpdHkgYmVhbgotd2l0aCBjb250YWluZXItbWFuYWdlZCBwZXJzaXN0ZW5jZS4gSXQgaXMgdXNlZCBieQotY21wLXZlcnNpb24gZWxlbWVudHMuCi0KLVRoZSB2YWx1ZSBtdXN0IGJlIG9uZSBvZiB0aGUgdHdvIGZvbGxvd2luZzoKLQotICAgIDEueAotICAgIDIueAotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpzdHJpbmciPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxLngiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMi54Ii8+Ci0gICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9ImNtci1maWVsZC10eXBlVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBjbXItZmllbGQtdHlwZSBlbGVtZW50IHNwZWNpZmllcyB0aGUgY2xhc3Mgb2YgYQotY29sbGVjdGlvbi12YWx1ZWQgbG9naWNhbCByZWxhdGlvbnNoaXAgZmllbGQgaW4gdGhlIGVudGl0eQotYmVhbiBjbGFzcy4gVGhlIHZhbHVlIG9mIGFuIGVsZW1lbnQgdXNpbmcgY21yLWZpZWxkLXR5cGVUeXBlCi1tdXN0IGJlIGVpdGhlcjogamF2YS51dGlsLkNvbGxlY3Rpb24gb3IgamF2YS51dGlsLlNldC4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImoyZWU6c3RyaW5nIj4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iamF2YS51dGlsLkNvbGxlY3Rpb24iLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iamF2YS51dGlsLlNldCIvPgotICAgIDwveHNkOnJlc3RyaWN0aW9uPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iY21yLWZpZWxkVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBjbXItZmllbGRUeXBlIGRlc2NyaWJlcyB0aGUgYmVhbiBwcm92aWRlcidzIHZpZXcgb2YKLWEgcmVsYXRpb25zaGlwLiBJdCBjb25zaXN0cyBvZiBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbiwgYW5kCi10aGUgbmFtZSBhbmQgdGhlIGNsYXNzIHR5cGUgb2YgYSBmaWVsZCBpbiB0aGUgc291cmNlIG9mIGEKLXJvbGUgb2YgYSByZWxhdGlvbnNoaXAuIFRoZSBjbXItZmllbGQtbmFtZSBlbGVtZW50Ci1jb3JyZXNwb25kcyB0byB0aGUgbmFtZSB1c2VkIGZvciB0aGUgZ2V0IGFuZCBzZXQgYWNjZXNzb3IKLW1ldGhvZHMgZm9yIHRoZSByZWxhdGlvbnNoaXAuIFRoZSBjbXItZmllbGQtdHlwZSBlbGVtZW50IGlzCi11c2VkIG9ubHkgZm9yIGNvbGxlY3Rpb24tdmFsdWVkIGNtci1maWVsZHMuIEl0IHNwZWNpZmllcyB0aGUKLXR5cGUgb2YgdGhlIGNvbGxlY3Rpb24gdGhhdCBpcyB1c2VkLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImNtci1maWVsZC1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpzdHJpbmciPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgY21yLWZpZWxkLW5hbWUgZWxlbWVudCBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgYQotICAgICAgICBsb2dpY2FsIHJlbGF0aW9uc2hpcCBmaWVsZCBpbiB0aGUgZW50aXR5IGJlYW4KLSAgICAgICAgY2xhc3MuIFRoZSBuYW1lIG9mIHRoZSBjbXItZmllbGQgbXVzdCBiZWdpbiB3aXRoIGEKLSAgICAgICAgbG93ZXJjYXNlIGxldHRlci4gVGhpcyBmaWVsZCBpcyBhY2Nlc3NlZCBieSBtZXRob2RzCi0gICAgICAgIHdob3NlIG5hbWVzIGNvbnNpc3Qgb2YgdGhlIG5hbWUgb2YgdGhlIGZpZWxkCi0gICAgICAgIHNwZWNpZmllZCBieSBjbXItZmllbGQtbmFtZSBpbiB3aGljaCB0aGUgZmlyc3QKLSAgICAgICAgbGV0dGVyIGlzIHVwcGVyY2FzZWQsIHByZWZpeGVkIGJ5ICJnZXQiIG9yICJzZXQiLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJjbXItZmllbGQtdHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6Y21yLWZpZWxkLXR5cGVUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXBsb3ltZW50LWV4dGVuc2lvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVwbG95bWVudC1leHRlbnNpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImNvbnRhaW5lci10cmFuc2FjdGlvblR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgY29udGFpbmVyLXRyYW5zYWN0aW9uVHlwZSBzcGVjaWZpZXMgaG93IHRoZSBjb250YWluZXIKLW11c3QgbWFuYWdlIHRyYW5zYWN0aW9uIHNjb3BlcyBmb3IgdGhlIGVudGVycHJpc2UgYmVhbidzCi1tZXRob2QgaW52b2NhdGlvbnMuIEl0IGRlZmluZXMgYW4gb3B0aW9uYWwgZGVzY3JpcHRpb24sIGEKLWxpc3Qgb2YgbWV0aG9kIGVsZW1lbnRzLCBhbmQgYSB0cmFuc2FjdGlvbiBhdHRyaWJ1dGUuIFRoZQotdHJhbnNhY3Rpb24gYXR0cmlidXRlIGlzIHRvIGJlIGFwcGxpZWQgdG8gYWxsIHRoZSBzcGVjaWZpZWQKLW1ldGhvZHMuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXNjcmlwdGlvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibWV0aG9kIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTptZXRob2RUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InRyYW5zLWF0dHJpYnV0ZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6dHJhbnMtYXR0cmlidXRlVHlwZSIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0iZWpiLWNsYXNzVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBlamItY2xhc3NUeXBlIGNvbnRhaW5zIHRoZSBmdWxseS1xdWFsaWZpZWQgbmFtZSBvZiB0aGUKLWVudGVycHJpc2UgYmVhbidzIGNsYXNzLiBJdCBpcyB1c2VkIGJ5IGVqYi1jbGFzcyBlbGVtZW50cy4KLQotRXhhbXBsZToKLQotICAgIDxlamItY2xhc3M+Y29tLndvbWJhdC5lbXBsLkVtcGxveWVlU2VydmljZUJlYW48L2VqYi1jbGFzcz4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImoyZWU6ZnVsbHktcXVhbGlmaWVkLWNsYXNzVHlwZSIvPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iZWpiLWphclR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgZWpiLWphclR5cGUgZGVmaW5lcyB0aGUgcm9vdCBlbGVtZW50IG9mIHRoZSBFSkIKLWRlcGxveW1lbnQgZGVzY3JpcHRvci4gSXQgY29udGFpbnMKLQotICAgIC0gYW4gb3B0aW9uYWwgZGVzY3JpcHRpb24gb2YgdGhlIGVqYi1qYXIgZmlsZQotICAgIC0gYW4gb3B0aW9uYWwgZGlzcGxheSBuYW1lCi0gICAgLSBhbiBvcHRpb25hbCBpY29uIHRoYXQgY29udGFpbnMgYSBzbWFsbCBhbmQgYSBsYXJnZQotICAgICAgaWNvbiBmaWxlIG5hbWUKLSAgICAtIG1hbmRhdG9yeSBzdHJ1Y3R1cmFsIGluZm9ybWF0aW9uIGFib3V0IGFsbCBpbmNsdWRlZAotICAgICAgZW50ZXJwcmlzZSBiZWFucwotICAgIC0gYSBkZXNjcmlwdG9yIGZvciBjb250YWluZXIgbWFuYWdlZCByZWxhdGlvbnNoaXBzLAotICAgICAgaWYgYW55Ci0gICAgLSBhbiBvcHRpb25hbCBhcHBsaWNhdGlvbi1hc3NlbWJseSBkZXNjcmlwdG9yCi0gICAgLSBhbiBvcHRpb25hbCBuYW1lIG9mIGFuIGVqYi1jbGllbnQtamFyIGZpbGUgZm9yIHRoZQotICAgICAgZWpiLWphci4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkaXNwbGF5LW5hbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRpc3BsYXktbmFtZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaWNvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6aWNvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZW50ZXJwcmlzZS1iZWFucyIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZW50ZXJwcmlzZS1iZWFuc1R5cGUiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJlbGF0aW9uc2hpcHMiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnJlbGF0aW9uc2hpcHNUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgPHhzZDp1bmlxdWUgbmFtZT0icmVsYXRpb25zaGlwLW5hbWUtdW5pcXVlbmVzcyI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBlamItcmVsYXRpb24tbmFtZSBjb250YWlucyB0aGUgbmFtZSBvZiBhCi0gICAgICAgIHJlbGF0aW9uLiBUaGUgbmFtZSBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4KLSAgICAgICAgcmVsYXRpb25zaGlwcy4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICAgICAgPHhzZDpzZWxlY3RvciB4cGF0aD0iajJlZTplamItcmVsYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6ZWpiLXJlbGF0aW9uLW5hbWUiLz4KLSAgICAgICAgPC94c2Q6dW5pcXVlPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iYXNzZW1ibHktZGVzY3JpcHRvciIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6YXNzZW1ibHktZGVzY3JpcHRvclR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBQcm92aWRpbmcgYW4gYXNzZW1ibHktZGVzY3JpcHRvciBpbiB0aGUgZGVwbG95bWVudAotICAgICAgICBkZXNjcmlwdG9yIGlzIG9wdGlvbmFsIGZvciB0aGUgZWpiLWphciBmaWxlCi0gICAgICAgIHByb2R1Y2VyLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJlamItY2xpZW50LWphciIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cGF0aFR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgb3B0aW9uYWwgZWpiLWNsaWVudC1qYXIgZWxlbWVudCBzcGVjaWZpZXMgYSBKQVIKLSAgICAgICAgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBjbGFzcyBmaWxlcyBuZWNlc3NhcnkgZm9yIGEKLSAgICAgICAgY2xpZW50IHByb2dyYW0gdG8gYWNjZXNzIHRoZQotICAgICAgICBlbnRlcnByaXNlIGJlYW5zIGluIHRoZSBlamItamFyIGZpbGUuCi0KLSAgICAgICAgRXhhbXBsZToKLQotICAgICAgICAgICAgPGVqYi1jbGllbnQtamFyPmVtcGxveWVlX3NlcnZpY2VfY2xpZW50LmphcgotICAgICAgICAgICAgPC9lamItY2xpZW50LWphcj4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVwbG95bWVudC1leHRlbnNpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlcGxveW1lbnQtZXh0ZW5zaW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQotICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9InZlcnNpb24iCi0gICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXdleS12ZXJzaW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICBmaXhlZD0iMi4xIgotICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiPgotICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICBUaGUgdmVyc2lvbiBzcGVjaWZpZXMgdGhlIHZlcnNpb24gb2YgdGhlCi0gICAgRUpCIHNwZWNpZmljYXRpb24gdGhhdCB0aGUgaW5zdGFuY2UgZG9jdW1lbnQgbXVzdAotICAgIGNvbXBseSB3aXRoLiBUaGlzIGluZm9ybWF0aW9uIGVuYWJsZXMgZGVwbG95bWVudCB0b29scwotICAgIHRvIHZhbGlkYXRlIGEgcGFydGljdWxhciBFSkIgRGVwbG95bWVudAotICAgIERlc2NyaXB0b3Igd2l0aCByZXNwZWN0IHRvIGEgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGUgRUpCCi0gICAgc2NoZW1hLgotCi0gICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgIDwveHNkOmF0dHJpYnV0ZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9ImVqYi1uYW1lVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBlamItbmFtZVR5cGUgc3BlY2lmaWVzIGFuIGVudGVycHJpc2UgYmVhbidzIG5hbWUuIEl0IGlzCi11c2VkIGJ5IGVqYi1uYW1lIGVsZW1lbnRzLiBUaGlzIG5hbWUgaXMgYXNzaWduZWQgYnkgdGhlCi1lamItamFyIGZpbGUgcHJvZHVjZXIgdG8gbmFtZSB0aGUgZW50ZXJwcmlzZSBiZWFuIGluIHRoZQotZWpiLWphciBmaWxlJ3MgZGVwbG95bWVudCBkZXNjcmlwdG9yLiBUaGUgbmFtZSBtdXN0IGJlCi11bmlxdWUgYW1vbmcgdGhlIG5hbWVzIG9mIHRoZSBlbnRlcnByaXNlIGJlYW5zIGluIHRoZSBzYW1lCi1lamItamFyIGZpbGUuCi0KLVRoZXJlIGlzIG5vIGFyY2hpdGVjdGVkIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB1c2VkCi1lamItbmFtZSBpbiB0aGUgZGVwbG95bWVudCBkZXNjcmlwdG9yIGFuZCB0aGUgSk5ESSBuYW1lIHRoYXQKLXRoZSBEZXBsb3llciB3aWxsIGFzc2lnbiB0byB0aGUgZW50ZXJwcmlzZSBiZWFuJ3MgaG9tZS4KLQotVGhlIG5hbWUgZm9yIGFuIGVudGl0eSBiZWFuIG11c3QgY29uZm9ybSB0byB0aGUgbGV4aWNhbAotcnVsZXMgZm9yIGFuIE5NVE9LRU4uCi0KLUV4YW1wbGU6Ci0KLTxlamItbmFtZT5FbXBsb3llZVNlcnZpY2U8L2VqYi1uYW1lPgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICA8eHNkOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIi8+Ci0gICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJlamItcmVsYXRpb25UeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGVqYi1yZWxhdGlvblR5cGUgZGVzY3JpYmVzIGEgcmVsYXRpb25zaGlwIGJldHdlZW4gdHdvCi1lbnRpdHkgYmVhbnMgd2l0aCBjb250YWluZXItbWFuYWdlZCBwZXJzaXN0ZW5jZS4gIEl0IGlzIHVzZWQKLWJ5IGVqYi1yZWxhdGlvbiBlbGVtZW50cy4gSXQgY29udGFpbnMgYSBkZXNjcmlwdGlvbjsgYW4KLW9wdGlvbmFsIGVqYi1yZWxhdGlvbi1uYW1lIGVsZW1lbnQ7IGFuZCBleGFjdGx5IHR3bwotcmVsYXRpb25zaGlwIHJvbGUgZGVjbGFyYXRpb25zLCBkZWZpbmVkIGJ5IHRoZQotZWpiLXJlbGF0aW9uc2hpcC1yb2xlIGVsZW1lbnRzLiBUaGUgbmFtZSBvZiB0aGUKLXJlbGF0aW9uc2hpcCwgaWYgc3BlY2lmaWVkLCBpcyB1bmlxdWUgd2l0aGluIHRoZSBlamItamFyCi1maWxlLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVqYi1yZWxhdGlvbi1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpzdHJpbmciCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgZWpiLXJlbGF0aW9uLW5hbWUgZWxlbWVudCBwcm92aWRlcyBhIHVuaXF1ZSBuYW1lCi0gICAgICAgIHdpdGhpbiB0aGUgZWpiLWphciBmaWxlIGZvciBhIHJlbGF0aW9uc2hpcC4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZWpiLXJlbGF0aW9uc2hpcC1yb2xlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplamItcmVsYXRpb25zaGlwLXJvbGVUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJlamItcmVsYXRpb25zaGlwLXJvbGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVqYi1yZWxhdGlvbnNoaXAtcm9sZVR5cGUiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlcGxveW1lbnQtZXh0ZW5zaW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXBsb3ltZW50LWV4dGVuc2lvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iZWpiLXJlbGF0aW9uc2hpcC1yb2xlVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBlamItcmVsYXRpb25zaGlwLXJvbGVUeXBlIGRlc2NyaWJlcyBhIHJvbGUgd2l0aGluIGEKLXJlbGF0aW9uc2hpcC4gVGhlcmUgYXJlIHR3byByb2xlcyBpbiBlYWNoIHJlbGF0aW9uc2hpcC4KLQotVGhlIGVqYi1yZWxhdGlvbnNoaXAtcm9sZVR5cGUgY29udGFpbnMgYW4gb3B0aW9uYWwKLWRlc2NyaXB0aW9uOyBhbiBvcHRpb25hbCBuYW1lIGZvciB0aGUgcmVsYXRpb25zaGlwIHJvbGU7IGEKLXNwZWNpZmljYXRpb24gb2YgdGhlIG11bHRpcGxpY2l0eSBvZiB0aGUgcm9sZTsgYW4gb3B0aW9uYWwKLXNwZWNpZmljYXRpb24gb2YgY2FzY2FkZS1kZWxldGUgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIHJvbGU7Ci10aGUgcm9sZSBzb3VyY2U7IGFuZCBhIGRlY2xhcmF0aW9uIG9mIHRoZSBjbXItZmllbGQsIGlmIGFueSwKLWJ5IG1lYW5zIG9mIHdoaWNoIHRoZSBvdGhlciBzaWRlIG9mIHRoZSByZWxhdGlvbnNoaXAgaXMKLWFjY2Vzc2VkIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIHRoZSByb2xlIHNvdXJjZS4KLQotVGhlIG11bHRpcGxpY2l0eSBhbmQgcm9sZS1zb3VyY2UgZWxlbWVudCBhcmUgbWFuZGF0b3J5LgotCi1UaGUgcmVsYXRpb25zaGlwLXJvbGUtc291cmNlIGVsZW1lbnQgZGVzaWduYXRlcyBhbiBlbnRpdHkKLWJlYW4gYnkgbWVhbnMgb2YgYW4gZWpiLW5hbWUgZWxlbWVudC4gRm9yIGJpZGlyZWN0aW9uYWwKLXJlbGF0aW9uc2hpcHMsIGJvdGggcm9sZXMgb2YgYSByZWxhdGlvbnNoaXAgbXVzdCBkZWNsYXJlIGEKLXJlbGF0aW9uc2hpcC1yb2xlLXNvdXJjZSBlbGVtZW50IHRoYXQgc3BlY2lmaWVzIGEgY21yLWZpZWxkCi1pbiB0ZXJtcyBvZiB3aGljaCB0aGUgcmVsYXRpb25zaGlwIGlzIGFjY2Vzc2VkLiBUaGUgbGFjayBvZgotYSBjbXItZmllbGQgZWxlbWVudCBpbiBhbiBlamItcmVsYXRpb25zaGlwLXJvbGUgc3BlY2lmaWVzCi10aGF0IHRoZSByZWxhdGlvbnNoaXAgaXMgdW5pZGlyZWN0aW9uYWwgaW4gbmF2aWdhYmlsaXR5IGFuZAotdGhlIGVudGl0eSBiZWFuIHRoYXQgcGFydGljaXBhdGVzIGluIHRoZSByZWxhdGlvbnNoaXAgaXMKLSJub3QgYXdhcmUiIG9mIHRoZSByZWxhdGlvbnNoaXAuCi0KLUV4YW1wbGU6Ci0KLTxlamItcmVsYXRpb24+Ci0gICAgPGVqYi1yZWxhdGlvbi1uYW1lPlByb2R1Y3QtTGluZUl0ZW08L2VqYi1yZWxhdGlvbi1uYW1lPgotICAgIDxlamItcmVsYXRpb25zaGlwLXJvbGU+Ci0gICAgICAgIDxlamItcmVsYXRpb25zaGlwLXJvbGUtbmFtZT5wcm9kdWN0LWhhcy1saW5laXRlbXMKLSAgICAgICAgPC9lamItcmVsYXRpb25zaGlwLXJvbGUtbmFtZT4KLSAgICAgICAgPG11bHRpcGxpY2l0eT5PbmU8L211bHRpcGxpY2l0eT4KLSAgICAgICAgPHJlbGF0aW9uc2hpcC1yb2xlLXNvdXJjZT4KLSAgICAgICAgPGVqYi1uYW1lPlByb2R1Y3RFSkI8L2VqYi1uYW1lPgotICAgICAgICA8L3JlbGF0aW9uc2hpcC1yb2xlLXNvdXJjZT4KLSAgICAgPC9lamItcmVsYXRpb25zaGlwLXJvbGU+Ci08L2VqYi1yZWxhdGlvbj4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJlamItcmVsYXRpb25zaGlwLXJvbGUtbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c3RyaW5nIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGVqYi1yZWxhdGlvbnNoaXAtcm9sZS1uYW1lIGVsZW1lbnQgZGVmaW5lcyBhCi0gICAgICAgIG5hbWUgZm9yIGEgcm9sZSB0aGF0IGlzIHVuaXF1ZSB3aXRoaW4gYW4KLSAgICAgICAgZWpiLXJlbGF0aW9uLiBEaWZmZXJlbnQgcmVsYXRpb25zaGlwcyBjYW4gdXNlIHRoZQotICAgICAgICBzYW1lIG5hbWUgZm9yIGEgcm9sZS4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibXVsdGlwbGljaXR5IgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTptdWx0aXBsaWNpdHlUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJjYXNjYWRlLWRlbGV0ZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZW1wdHlUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGNhc2NhZGUtZGVsZXRlIGVsZW1lbnQgc3BlY2lmaWVzIHRoYXQsIHdpdGhpbiBhCi0gICAgICAgIHBhcnRpY3VsYXIgcmVsYXRpb25zaGlwLCB0aGUgbGlmZXRpbWUgb2Ygb25lIG9yIG1vcmUKLSAgICAgICAgZW50aXR5IGJlYW5zIGlzIGRlcGVuZGVudCB1cG9uIHRoZSBsaWZldGltZSBvZgotICAgICAgICBhbm90aGVyIGVudGl0eSBiZWFuLiBUaGUgY2FzY2FkZS1kZWxldGUgZWxlbWVudCBjYW4KLSAgICAgICAgb25seSBiZSBzcGVjaWZpZWQgZm9yIGFuIGVqYi1yZWxhdGlvbnNoaXAtcm9sZQotICAgICAgICBlbGVtZW50IGNvbnRhaW5lZCBpbiBhbiBlamItcmVsYXRpb24gZWxlbWVudCBpbgotICAgICAgICB3aGljaCB0aGUgb3RoZXIgZWpiLXJlbGF0aW9uc2hpcC1yb2xlCi0gICAgICAgIGVsZW1lbnQgc3BlY2lmaWVzIGEgbXVsdGlwbGljaXR5IG9mIE9uZS4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icmVsYXRpb25zaGlwLXJvbGUtc291cmNlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpyZWxhdGlvbnNoaXAtcm9sZS1zb3VyY2VUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJjbXItZmllbGQiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmNtci1maWVsZFR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlcGxveW1lbnQtZXh0ZW5zaW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXBsb3ltZW50LWV4dGVuc2lvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iZW50ZXJwcmlzZS1iZWFuc1R5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgZW50ZXJwcmlzZS1iZWFuc1R5cGUgZGVjbGFyZXMgb25lIG9yIG1vcmUgZW50ZXJwcmlzZQotYmVhbnMuIEVhY2ggYmVhbiBjYW4gYmUgYSBzZXNzaW9uLCBlbnRpdHkgb3IgbWVzc2FnZS1kcml2ZW4KLWJlYW4uCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ic2Vzc2lvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c2Vzc2lvbi1iZWFuVHlwZSI+Ci0gICAgICAgIDx4c2Q6dW5pcXVlIG5hbWU9InNlc3Npb24tZWpiLWxvY2FsLXJlZi1uYW1lLXVuaXF1ZW5lc3MiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgZWpiLXJlZi1uYW1lIGVsZW1lbnQgY29udGFpbnMgdGhlIG5hbWUgb2YKLSAgICAgICAgYW4gRUpCIHJlZmVyZW5jZS4gVGhlIEVKQiByZWZlcmVuY2UgaXMgYW4gZW50cnkgaW4KLSAgICAgICAgdGhlIGNvbXBvbmVudCdzIGVudmlyb25tZW50IGFuZCBpcyByZWxhdGl2ZSB0byB0aGUKLSAgICAgICAgamF2YTpjb21wL2VudiBjb250ZXh0LiAgVGhlIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluCi0gICAgICAgIHRoZSBjb21wb25lbnQuCi0KLSAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBuYW1lIGJlIHByZWZpeGVkIHdpdGggImVqYi8iLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOmVqYi1sb2NhbC1yZWYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6ZWpiLXJlZi1uYW1lIi8+Ci0gICAgICAgIDwveHNkOnVuaXF1ZT4KLQotICAgICAgICA8eHNkOnVuaXF1ZSBuYW1lPSJzZXNzaW9uLWVqYi1yZWYtbmFtZS11bmlxdWVuZXNzIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGVqYi1yZWYtbmFtZSBlbGVtZW50IGNvbnRhaW5zIHRoZSBuYW1lIG9mIGFuIEVKQgotICAgICAgICByZWZlcmVuY2UuIFRoZSBFSkIgcmVmZXJlbmNlIGlzIGFuIGVudHJ5IGluIHRoZQotICAgICAgICBjb21wb25lbnQncyBlbnZpcm9ubWVudCBhbmQgaXMgcmVsYXRpdmUgdG8gdGhlCi0gICAgICAgIGphdmE6Y29tcC9lbnYgY29udGV4dC4gVGhlIG5hbWUgbXVzdCBiZSB1bmlxdWUKLSAgICAgICAgd2l0aGluIHRoZSBjb21wb25lbnQuCi0KLSAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBuYW1lIGlzIHByZWZpeGVkIHdpdGggImVqYi8iLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOmVqYi1yZWYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6ZWpiLXJlZi1uYW1lIi8+Ci0gICAgICAgIDwveHNkOnVuaXF1ZT4KLQotICAgICAgICA8eHNkOnVuaXF1ZSBuYW1lPSJzZXNzaW9uLXJlc291cmNlLWVudi1yZWYtdW5pcXVlbmVzcyI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSByZXNvdXJjZS1lbnYtcmVmLW5hbWUgZWxlbWVudCBzcGVjaWZpZXMgdGhlIG5hbWUKLSAgICAgICAgb2YgYSByZXNvdXJjZSBlbnZpcm9ubWVudCByZWZlcmVuY2U7IGl0cyB2YWx1ZSBpcwotICAgICAgICB0aGUgZW52aXJvbm1lbnQgZW50cnkgbmFtZSB1c2VkIGluIHRoZSBjb21wb25lbnQKLSAgICAgICAgY29kZS4gVGhlIG5hbWUgaXMgYSBKTkRJIG5hbWUgcmVsYXRpdmUgdG8gdGhlCi0gICAgICAgIGphdmE6Y29tcC9lbnYgY29udGV4dCBhbmQgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGFuCi0gICAgICAgIGNvbXBvbmVudC4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICAgICAgPHhzZDpzZWxlY3RvciB4cGF0aD0iajJlZTpyZXNvdXJjZS1lbnYtcmVmIi8+Ci0gICAgICAgICAgICA8eHNkOmZpZWxkICAgIHhwYXRoPSJqMmVlOnJlc291cmNlLWVudi1yZWYtbmFtZSIvPgotICAgICAgICA8L3hzZDp1bmlxdWU+Ci0KLSAgICAgICAgPHhzZDp1bmlxdWUgbmFtZT0ic2Vzc2lvbi1tZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi11bmlxdWVuZXNzIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWUgZWxlbWVudCBzcGVjaWZpZXMgdGhlIG5hbWUKLSAgICAgICAgb2YgYSBtZXNzYWdlIGRlc3RpbmF0aW9uIHJlZmVyZW5jZTsgaXRzIHZhbHVlIGlzCi0gICAgICAgIHRoZSBtZXNzYWdlIGRlc3RpbmF0aW9uIHJlZmVyZW5jZSBuYW1lIHVzZWQgaW4gdGhlIGNvbXBvbmVudAotICAgICAgICBjb2RlLiBUaGUgbmFtZSBpcyBhIEpOREkgbmFtZSByZWxhdGl2ZSB0byB0aGUKLSAgICAgICAgamF2YTpjb21wL2VudiBjb250ZXh0IGFuZCBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYW4KLSAgICAgICAgY29tcG9uZW50LgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOm1lc3NhZ2UtZGVzdGluYXRpb24tcmVmIi8+Ci0gICAgICAgICAgICA8eHNkOmZpZWxkICAgIHhwYXRoPSJqMmVlOm1lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWUiLz4KLSAgICAgICAgPC94c2Q6dW5pcXVlPgotCi0gICAgICAgIDx4c2Q6dW5pcXVlIG5hbWU9InNlc3Npb24tcmVzLXJlZi1uYW1lLXVuaXF1ZW5lc3MiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgcmVzLXJlZi1uYW1lIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEKLSAgICAgICAgcmVzb3VyY2UgbWFuYWdlciBjb25uZWN0aW9uIGZhY3RvcnkgcmVmZXJlbmNlLiAgVGhlIG5hbWUKLSAgICAgICAgaXMgYSBKTkRJIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGphdmE6Y29tcC9lbnYgY29udGV4dC4KLSAgICAgICAgVGhlIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGFuIGNvbXBvbmVudC4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICAgICAgPHhzZDpzZWxlY3RvciB4cGF0aD0iajJlZTpyZXNvdXJjZS1yZWYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6cmVzLXJlZi1uYW1lIi8+Ci0gICAgICAgIDwveHNkOnVuaXF1ZT4KLQotICAgICAgICA8eHNkOnVuaXF1ZSBuYW1lPSJzZXNzaW9uLWVudi1lbnRyeS1uYW1lLXVuaXF1ZW5lc3MiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgZW52LWVudHJ5LW5hbWUgZWxlbWVudCBjb250YWlucyB0aGUgbmFtZSBvZiBhCi0gICAgICAgIGNvbXBvbmVudCdzIGVudmlyb25tZW50IGVudHJ5LiAgVGhlIG5hbWUgaXMgYSBKTkRJCi0gICAgICAgIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGphdmE6Y29tcC9lbnYgY29udGV4dC4gIFRoZQotICAgICAgICBuYW1lIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhbiBjb21wb25lbnQuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6ZW52LWVudHJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmZpZWxkICAgIHhwYXRoPSJqMmVlOmVudi1lbnRyeS1uYW1lIi8+Ci0gICAgICAgIDwveHNkOnVuaXF1ZT4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLQotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZW50aXR5IgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplbnRpdHktYmVhblR5cGUiPgotICAgICAgICA8eHNkOnVuaXF1ZSBuYW1lPSJlbnRpdHktZWpiLWxvY2FsLXJlZi1uYW1lLXVuaXF1ZW5lc3MiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgZWpiLXJlZi1uYW1lIGVsZW1lbnQgY29udGFpbnMgdGhlIG5hbWUgb2YKLSAgICAgICAgYW4gRUpCIHJlZmVyZW5jZS4gVGhlIEVKQiByZWZlcmVuY2UgaXMgYW4gZW50cnkgaW4KLSAgICAgICAgdGhlIGNvbXBvbmVudCdzIGVudmlyb25tZW50IGFuZCBpcyByZWxhdGl2ZSB0byB0aGUKLSAgICAgICAgamF2YTpjb21wL2VudiBjb250ZXh0LiAgVGhlIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluCi0gICAgICAgIHRoZSBjb21wb25lbnQuCi0KLSAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBuYW1lIGJlIHByZWZpeGVkIHdpdGggImVqYi8iLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOmVqYi1sb2NhbC1yZWYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6ZWpiLXJlZi1uYW1lIi8+Ci0gICAgICAgIDwveHNkOnVuaXF1ZT4KLQotICAgICAgICA8eHNkOnVuaXF1ZSBuYW1lPSJlbnRpdHktZWpiLXJlZi1uYW1lLXVuaXF1ZW5lc3MiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgZWpiLXJlZi1uYW1lIGVsZW1lbnQgY29udGFpbnMgdGhlIG5hbWUgb2YgYW4gRUpCCi0gICAgICAgIHJlZmVyZW5jZS4gVGhlIEVKQiByZWZlcmVuY2UgaXMgYW4gZW50cnkgaW4gdGhlCi0gICAgICAgIGNvbXBvbmVudCdzIGVudmlyb25tZW50IGFuZCBpcyByZWxhdGl2ZSB0byB0aGUKLSAgICAgICAgamF2YTpjb21wL2VudiBjb250ZXh0LiBUaGUgbmFtZSBtdXN0IGJlIHVuaXF1ZQotICAgICAgICB3aXRoaW4gdGhlIGNvbXBvbmVudC4KLQotICAgICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IG5hbWUgaXMgcHJlZml4ZWQgd2l0aCAiZWpiLyIuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6ZWpiLXJlZiIvPgotICAgICAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTplamItcmVmLW5hbWUiLz4KLSAgICAgICAgPC94c2Q6dW5pcXVlPgotCi0gICAgICAgIDx4c2Q6dW5pcXVlIG5hbWU9ImVudGl0eS1yZXNvdXJjZS1lbnYtcmVmLXVuaXF1ZW5lc3MiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgcmVzb3VyY2UtZW52LXJlZi1uYW1lIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBuYW1lCi0gICAgICAgIG9mIGEgcmVzb3VyY2UgZW52aXJvbm1lbnQgcmVmZXJlbmNlOyBpdHMgdmFsdWUgaXMKLSAgICAgICAgdGhlIGVudmlyb25tZW50IGVudHJ5IG5hbWUgdXNlZCBpbiB0aGUgY29tcG9uZW50Ci0gICAgICAgIGNvZGUuIFRoZSBuYW1lIGlzIGEgSk5ESSBuYW1lIHJlbGF0aXZlIHRvIHRoZQotICAgICAgICBqYXZhOmNvbXAvZW52IGNvbnRleHQgYW5kIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhbgotICAgICAgICBjb21wb25lbnQuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6cmVzb3VyY2UtZW52LXJlZiIvPgotICAgICAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTpyZXNvdXJjZS1lbnYtcmVmLW5hbWUiLz4KLSAgICAgICAgPC94c2Q6dW5pcXVlPgotCi0gICAgICAgIDx4c2Q6dW5pcXVlIG5hbWU9ImVudGl0eS1tZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi11bmlxdWVuZXNzIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWUgZWxlbWVudCBzcGVjaWZpZXMgdGhlIG5hbWUKLSAgICAgICAgb2YgYSBtZXNzYWdlIGRlc3RpbmF0aW9uIHJlZmVyZW5jZTsgaXRzIHZhbHVlIGlzCi0gICAgICAgIHRoZSBtZXNzYWdlIGRlc3RpbmF0aW9uIHJlZmVyZW5jZSBuYW1lIHVzZWQgaW4gdGhlIGNvbXBvbmVudAotICAgICAgICBjb2RlLiBUaGUgbmFtZSBpcyBhIEpOREkgbmFtZSByZWxhdGl2ZSB0byB0aGUKLSAgICAgICAgamF2YTpjb21wL2VudiBjb250ZXh0IGFuZCBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYW4KLSAgICAgICAgY29tcG9uZW50LgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOm1lc3NhZ2UtZGVzdGluYXRpb24tcmVmIi8+Ci0gICAgICAgICAgICA8eHNkOmZpZWxkICAgIHhwYXRoPSJqMmVlOm1lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWUiLz4KLSAgICAgICAgPC94c2Q6dW5pcXVlPgotCi0gICAgICAgIDx4c2Q6dW5pcXVlIG5hbWU9ImVudGl0eS1yZXMtcmVmLW5hbWUtdW5pcXVlbmVzcyI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSByZXMtcmVmLW5hbWUgZWxlbWVudCBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgYQotICAgICAgICByZXNvdXJjZSBtYW5hZ2VyIGNvbm5lY3Rpb24gZmFjdG9yeSByZWZlcmVuY2UuICBUaGUgbmFtZQotICAgICAgICBpcyBhIEpOREkgbmFtZSByZWxhdGl2ZSB0byB0aGUgamF2YTpjb21wL2VudiBjb250ZXh0LgotICAgICAgICBUaGUgbmFtZSBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYW4gY29tcG9uZW50LgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOnJlc291cmNlLXJlZiIvPgotICAgICAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTpyZXMtcmVmLW5hbWUiLz4KLSAgICAgICAgPC94c2Q6dW5pcXVlPgotCi0gICAgICAgIDx4c2Q6dW5pcXVlIG5hbWU9ImVudGl0eS1lbnYtZW50cnktbmFtZS11bmlxdWVuZXNzIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGVudi1lbnRyeS1uYW1lIGVsZW1lbnQgY29udGFpbnMgdGhlIG5hbWUgb2YgYQotICAgICAgICBjb21wb25lbnQncyBlbnZpcm9ubWVudCBlbnRyeS4gIFRoZSBuYW1lIGlzIGEgSk5ESQotICAgICAgICBuYW1lIHJlbGF0aXZlIHRvIHRoZSBqYXZhOmNvbXAvZW52IGNvbnRleHQuICBUaGUKLSAgICAgICAgbmFtZSBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYW4gY29tcG9uZW50LgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOmVudi1lbnRyeSIvPgotICAgICAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTplbnYtZW50cnktbmFtZSIvPgotICAgICAgICA8L3hzZDp1bmlxdWU+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im1lc3NhZ2UtZHJpdmVuIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTptZXNzYWdlLWRyaXZlbi1iZWFuVHlwZSI+Ci0gICAgICAgIDx4c2Q6dW5pcXVlIG5hbWU9Im1lc3NhZ2VkLWVqYi1sb2NhbC1yZWYtbmFtZS11bmlxdWVuZXNzIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGVqYi1yZWYtbmFtZSBlbGVtZW50IGNvbnRhaW5zIHRoZSBuYW1lIG9mCi0gICAgICAgIGFuIEVKQiByZWZlcmVuY2UuIFRoZSBFSkIgcmVmZXJlbmNlIGlzIGFuIGVudHJ5IGluCi0gICAgICAgIHRoZSBjb21wb25lbnQncyBlbnZpcm9ubWVudCBhbmQgaXMgcmVsYXRpdmUgdG8gdGhlCi0gICAgICAgIGphdmE6Y29tcC9lbnYgY29udGV4dC4gIFRoZSBuYW1lIG11c3QgYmUgdW5pcXVlIHdpdGhpbgotICAgICAgICB0aGUgY29tcG9uZW50LgotCi0gICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgbmFtZSBiZSBwcmVmaXhlZCB3aXRoICJlamIvIi4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICAgICAgPHhzZDpzZWxlY3RvciB4cGF0aD0iajJlZTplamItbG9jYWwtcmVmIi8+Ci0gICAgICAgICAgICA8eHNkOmZpZWxkICAgIHhwYXRoPSJqMmVlOmVqYi1yZWYtbmFtZSIvPgotICAgICAgICA8L3hzZDp1bmlxdWU+Ci0KLSAgICAgICAgPHhzZDp1bmlxdWUgbmFtZT0ibWVzc2FnZWQtZWpiLXJlZi1uYW1lLXVuaXF1ZW5lc3MiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgZWpiLXJlZi1uYW1lIGVsZW1lbnQgY29udGFpbnMgdGhlIG5hbWUgb2YgYW4gRUpCCi0gICAgICAgIHJlZmVyZW5jZS4gVGhlIEVKQiByZWZlcmVuY2UgaXMgYW4gZW50cnkgaW4gdGhlCi0gICAgICAgIGNvbXBvbmVudCdzIGVudmlyb25tZW50IGFuZCBpcyByZWxhdGl2ZSB0byB0aGUKLSAgICAgICAgamF2YTpjb21wL2VudiBjb250ZXh0LiBUaGUgbmFtZSBtdXN0IGJlIHVuaXF1ZQotICAgICAgICB3aXRoaW4gdGhlIGNvbXBvbmVudC4KLQotICAgICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IG5hbWUgaXMgcHJlZml4ZWQgd2l0aCAiZWpiLyIuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6ZWpiLXJlZiIvPgotICAgICAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTplamItcmVmLW5hbWUiLz4KLSAgICAgICAgPC94c2Q6dW5pcXVlPgotCi0gICAgICAgIDx4c2Q6dW5pcXVlIG5hbWU9Im1lc3NhZ2VkLXJlc291cmNlLWVudi1yZWYtdW5pcXVlbmVzcyI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSByZXNvdXJjZS1lbnYtcmVmLW5hbWUgZWxlbWVudCBzcGVjaWZpZXMgdGhlIG5hbWUKLSAgICAgICAgb2YgYSByZXNvdXJjZSBlbnZpcm9ubWVudCByZWZlcmVuY2U7IGl0cyB2YWx1ZSBpcwotICAgICAgICB0aGUgZW52aXJvbm1lbnQgZW50cnkgbmFtZSB1c2VkIGluIHRoZSBjb21wb25lbnQKLSAgICAgICAgY29kZS4gVGhlIG5hbWUgaXMgYSBKTkRJIG5hbWUgcmVsYXRpdmUgdG8gdGhlCi0gICAgICAgIGphdmE6Y29tcC9lbnYgY29udGV4dCBhbmQgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGFuCi0gICAgICAgIGNvbXBvbmVudC4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICAgICAgPHhzZDpzZWxlY3RvciB4cGF0aD0iajJlZTpyZXNvdXJjZS1lbnYtcmVmIi8+Ci0gICAgICAgICAgICA8eHNkOmZpZWxkICAgIHhwYXRoPSJqMmVlOnJlc291cmNlLWVudi1yZWYtbmFtZSIvPgotICAgICAgICA8L3hzZDp1bmlxdWU+Ci0KLSAgICAgICAgPHhzZDp1bmlxdWUgbmFtZT0ibWVzc2FnZWQtbWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtdW5pcXVlbmVzcyI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBuYW1lCi0gICAgICAgIG9mIGEgbWVzc2FnZSBkZXN0aW5hdGlvbiByZWZlcmVuY2U7IGl0cyB2YWx1ZSBpcwotICAgICAgICB0aGUgbWVzc2FnZSBkZXN0aW5hdGlvbiByZWZlcmVuY2UgbmFtZSB1c2VkIGluIHRoZSBjb21wb25lbnQKLSAgICAgICAgY29kZS4gVGhlIG5hbWUgaXMgYSBKTkRJIG5hbWUgcmVsYXRpdmUgdG8gdGhlCi0gICAgICAgIGphdmE6Y29tcC9lbnYgY29udGV4dCBhbmQgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGFuCi0gICAgICAgIGNvbXBvbmVudC4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICAgICAgPHhzZDpzZWxlY3RvciB4cGF0aD0iajJlZTptZXNzYWdlLWRlc3RpbmF0aW9uLXJlZiIvPgotICAgICAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTptZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lIi8+Ci0gICAgICAgIDwveHNkOnVuaXF1ZT4KLQotICAgICAgICA8eHNkOnVuaXF1ZSBuYW1lPSJtZXNzYWdlZC1yZXMtcmVmLW5hbWUtdW5pcXVlbmVzcyI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSByZXMtcmVmLW5hbWUgZWxlbWVudCBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgYQotICAgICAgICByZXNvdXJjZSBtYW5hZ2VyIGNvbm5lY3Rpb24gZmFjdG9yeSByZWZlcmVuY2UuICBUaGUgbmFtZQotICAgICAgICBpcyBhIEpOREkgbmFtZSByZWxhdGl2ZSB0byB0aGUgamF2YTpjb21wL2VudiBjb250ZXh0LgotICAgICAgICBUaGUgbmFtZSBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYW4gY29tcG9uZW50LgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOnJlc291cmNlLXJlZiIvPgotICAgICAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTpyZXMtcmVmLW5hbWUiLz4KLSAgICAgICAgPC94c2Q6dW5pcXVlPgotCi0gICAgICAgIDx4c2Q6dW5pcXVlIG5hbWU9Im1lc3NhZ2VkLWVudi1lbnRyeS1uYW1lLXVuaXF1ZW5lc3MiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgZW52LWVudHJ5LW5hbWUgZWxlbWVudCBjb250YWlucyB0aGUgbmFtZSBvZiBhCi0gICAgICAgIGNvbXBvbmVudCdzIGVudmlyb25tZW50IGVudHJ5LiAgVGhlIG5hbWUgaXMgYSBKTkRJCi0gICAgICAgIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGphdmE6Y29tcC9lbnYgY29udGV4dC4gIFRoZQotICAgICAgICBuYW1lIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhbiBjb21wb25lbnQuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6ZW52LWVudHJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmZpZWxkICAgIHhwYXRoPSJqMmVlOmVudi1lbnRyeS1uYW1lIi8+Ci0gICAgICAgIDwveHNkOnVuaXF1ZT4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLQotICAgIDwveHNkOmNob2ljZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJlbnRpdHktYmVhblR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgZW50aXR5LWJlYW5UeXBlIGRlY2xhcmVzIGFuIGVudGl0eSBiZWFuLiBUaGUgZGVjbGFyYXRpb24KLWNvbnNpc3RzIG9mOgotCi0gICAgLSBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbgotICAgIC0gYW4gb3B0aW9uYWwgZGlzcGxheSBuYW1lCi0gICAgLSBhbiBvcHRpb25hbCBpY29uIGVsZW1lbnQgdGhhdCBjb250YWlucyBhIHNtYWxsIGFuZCBhIGxhcmdlCi0gICAgICBpY29uIGZpbGUgbmFtZQotICAgIC0gYSB1bmlxdWUgbmFtZSBhc3NpZ25lZCB0byB0aGUgZW50ZXJwcmlzZSBiZWFuCi0gICAgICBpbiB0aGUgZGVwbG95bWVudCBkZXNjcmlwdG9yCi0gICAgLSB0aGUgbmFtZXMgb2YgdGhlIGVudGl0eSBiZWFuJ3MgcmVtb3RlIGhvbWUKLSAgICAgIGFuZCByZW1vdGUgaW50ZXJmYWNlcywgaWYgYW55Ci0gICAgLSB0aGUgbmFtZXMgb2YgdGhlIGVudGl0eSBiZWFuJ3MgbG9jYWwgaG9tZSBhbmQgbG9jYWwKLSAgICAgIGludGVyZmFjZXMsIGlmIGFueQotICAgIC0gdGhlIGVudGl0eSBiZWFuJ3MgaW1wbGVtZW50YXRpb24gY2xhc3MKLSAgICAtIHRoZSBlbnRpdHkgYmVhbidzIHBlcnNpc3RlbmNlIG1hbmFnZW1lbnQgdHlwZQotICAgIC0gdGhlIGVudGl0eSBiZWFuJ3MgcHJpbWFyeSBrZXkgY2xhc3MgbmFtZQotICAgIC0gYW4gaW5kaWNhdGlvbiBvZiB0aGUgZW50aXR5IGJlYW4ncyByZWVudHJhbmN5Ci0gICAgLSBhbiBvcHRpb25hbCBzcGVjaWZpY2F0aW9uIG9mIHRoZQotICAgICAgZW50aXR5IGJlYW4ncyBjbXAtdmVyc2lvbgotICAgIC0gYW4gb3B0aW9uYWwgc3BlY2lmaWNhdGlvbiBvZiB0aGUgZW50aXR5IGJlYW4ncwotICAgICAgYWJzdHJhY3Qgc2NoZW1hIG5hbWUKLSAgICAtIGFuIG9wdGlvbmFsIGxpc3Qgb2YgY29udGFpbmVyLW1hbmFnZWQgZmllbGRzCi0gICAgLSBhbiBvcHRpb25hbCBzcGVjaWZpY2F0aW9uIG9mIHRoZSBwcmltYXJ5IGtleQotICAgICAgZmllbGQKLSAgICAtIGFuIG9wdGlvbmFsIGRlY2xhcmF0aW9uIG9mIHRoZSBiZWFuJ3MgZW52aXJvbm1lbnQKLSAgICAgIGVudHJpZXMKLSAgICAtIGFuIG9wdGlvbmFsIGRlY2xhcmF0aW9uIG9mIHRoZSBiZWFuJ3MgRUpCCi0gICAgICByZWZlcmVuY2VzCi0gICAgLSBhbiBvcHRpb25hbCBkZWNsYXJhdGlvbiBvZiB0aGUgYmVhbidzIGxvY2FsCi0gICAgICBFSkIgcmVmZXJlbmNlcwotICAgIC0gYW4gb3B0aW9uYWwgZGVjbGFyYXRpb24gb2YgdGhlIGJlYW4ncyB3ZWIKLSAgICAgIHNlcnZpY2UgcmVmZXJlbmNlcwotICAgIC0gYW4gb3B0aW9uYWwgZGVjbGFyYXRpb24gb2YgdGhlIHNlY3VyaXR5IHJvbGUKLSAgICAgIHJlZmVyZW5jZXMKLSAgICAtIGFuIG9wdGlvbmFsIGRlY2xhcmF0aW9uIG9mIHRoZSBzZWN1cml0eSBpZGVudGl0eQotICAgICAgdG8gYmUgdXNlZCBmb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgYmVhbidzIG1ldGhvZHMKLSAgICAtIGFuIG9wdGlvbmFsIGRlY2xhcmF0aW9uIG9mIHRoZSBiZWFuJ3MKLSAgICAgIHJlc291cmNlIG1hbmFnZXIgY29ubmVjdGlvbiBmYWN0b3J5IHJlZmVyZW5jZXMKLSAgICAtIGFuIG9wdGlvbmFsIGRlY2xhcmF0aW9uIG9mIHRoZSBiZWFuJ3MKLSAgICAgIHJlc291cmNlIGVudmlyb25tZW50IHJlZmVyZW5jZXMKLSAgICAtIGFuIG9wdGlvbmFsIGRlY2xhcmF0aW9uIG9mIHRoZSBiZWFuJ3MgbWVzc2FnZQotICAgICAgZGVzdGluYXRpb24gcmVmZXJlbmNlcwotICAgIC0gYW4gb3B0aW9uYWwgc2V0IG9mIHF1ZXJ5IGRlY2xhcmF0aW9ucwotICAgICAgZm9yIGZpbmRlciBhbmQgc2VsZWN0IG1ldGhvZHMgZm9yIGFuIGVudGl0eQotICAgICAgYmVhbiB3aXRoIGNtcC12ZXJzaW9uIDIueC4KLSAgICAtIGFuIG9wdGlvbmFsIHNldCBvZiBkZXBsb3ltZW50LWV4dGVuc2lvbgotICAgICAgZGVjbGFyYXRpb25zLgotCi1UaGUgb3B0aW9uYWwgYWJzdHJhY3Qtc2NoZW1hLW5hbWUgZWxlbWVudCBtdXN0IGJlIHNwZWNpZmllZAotZm9yIGFuIGVudGl0eSBiZWFuIHdpdGggY29udGFpbmVyLW1hbmFnZWQgcGVyc2lzdGVuY2UgYW5kCi1jbXAtdmVyc2lvbiAyLnguCi0KLVRoZSBvcHRpb25hbCBwcmlta2V5LWZpZWxkIG1heSBiZSBwcmVzZW50IGluIHRoZSBkZXNjcmlwdG9yCi1pZiB0aGUgZW50aXR5J3MgcGVyc2lzdGVuY2UtdHlwZSBpcyBDb250YWluZXIuCi0KLVRoZSBvcHRpb25hbCBjbXAtdmVyc2lvbiBlbGVtZW50IG1heSBiZSBwcmVzZW50IGluIHRoZQotZGVzY3JpcHRvciBpZiB0aGUgZW50aXR5J3MgcGVyc2lzdGVuY2UtdHlwZSBpcyBDb250YWluZXIuIElmCi10aGUgcGVyc2lzdGVuY2UtdHlwZSBpcyBDb250YWluZXIgYW5kIHRoZSBjbXAtdmVyc2lvbgotZWxlbWVudCBpcyBub3Qgc3BlY2lmaWVkLCBpdHMgdmFsdWUgZGVmYXVsdHMgdG8gMi54LgotCi1UaGUgb3B0aW9uYWwgaG9tZSBhbmQgcmVtb3RlIGVsZW1lbnRzIG11c3QgYmUgc3BlY2lmaWVkIGlmCi10aGUgZW50aXR5IGJlYW4gY21wLXZlcnNpb24gaXMgMS54LgotCi1UaGUgb3B0aW9uYWwgaG9tZSBhbmQgcmVtb3RlIGVsZW1lbnRzIG11c3QgYmUgc3BlY2lmaWVkIGlmCi10aGUgZW50aXR5IGJlYW4gaGFzIGEgcmVtb3RlIGhvbWUgYW5kIHJlbW90ZSBpbnRlcmZhY2UuCi0KLVRoZSBvcHRpb25hbCBsb2NhbC1ob21lIGFuZCBsb2NhbCBlbGVtZW50cyBtdXN0IGJlIHNwZWNpZmllZAotaWYgdGhlIGVudGl0eSBiZWFuIGhhcyBhIGxvY2FsIGhvbWUgYW5kIGxvY2FsIGludGVyZmFjZS4KLQotRWl0aGVyIGJvdGggdGhlIGxvY2FsLWhvbWUgYW5kIHRoZSBsb2NhbCBlbGVtZW50cyBvciBib3RoCi10aGUgaG9tZSBhbmQgdGhlIHJlbW90ZSBlbGVtZW50cyBtdXN0IGJlIHNwZWNpZmllZC4KLQotVGhlIG9wdGlvbmFsIHF1ZXJ5IGVsZW1lbnRzIG11c3QgYmUgcHJlc2VudCBpZiB0aGUKLXBlcnNpc3RlbmNlLXR5cGUgaXMgQ29udGFpbmVyIGFuZCB0aGUgY21wLXZlcnNpb24gaXMgMi54IGFuZAotcXVlcnkgbWV0aG9kcyBvdGhlciB0aGFuIGZpbmRCeVByaW1hcnlLZXkgaGF2ZSBiZWVuIGRlZmluZWQKLWZvciB0aGUgZW50aXR5IGJlYW4uCi0KLVRoZSBvdGhlciBlbGVtZW50cyB0aGF0IGFyZSBvcHRpb25hbCBhcmUgIm9wdGlvbmFsIiBpbiB0aGUKLXNlbnNlIHRoYXQgdGhleSBhcmUgb21pdHRlZCBpZiB0aGUgbGlzdHMgcmVwcmVzZW50ZWQgYnkgdGhlbQotYXJlIGVtcHR5LgotCi1BdCBsZWFzdCBvbmUgY21wLWZpZWxkIGVsZW1lbnQgbXVzdCBiZSBwcmVzZW50IGluIHRoZQotZGVzY3JpcHRvciBpZiB0aGUgZW50aXR5J3MgcGVyc2lzdGVuY2UtdHlwZSBpcyBDb250YWluZXIgYW5kCi10aGUgY21wLXZlcnNpb24gaXMgMS54LCBhbmQgbm9uZSBtdXN0IG5vdCBiZSBwcmVzZW50IGlmIHRoZQotZW50aXR5J3MgcGVyc2lzdGVuY2UtdHlwZSBpcyBCZWFuLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRpc3BsYXktbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGlzcGxheS1uYW1lVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJpY29uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTppY29uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJlamItbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZWpiLW5hbWVUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJob21lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpob21lVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icmVtb3RlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpyZW1vdGVUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbC1ob21lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpsb2NhbC1ob21lVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWwiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmxvY2FsVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZWpiLWNsYXNzIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplamItY2xhc3NUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJwZXJzaXN0ZW5jZS10eXBlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpwZXJzaXN0ZW5jZS10eXBlVHlwZSIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icHJpbS1rZXktY2xhc3MiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmZ1bGx5LXF1YWxpZmllZC1jbGFzc1R5cGUiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgcHJpbS1rZXktY2xhc3MgZWxlbWVudCBjb250YWlucyB0aGUKLSAgICAgICAgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgYW4KLSAgICAgICAgZW50aXR5IGJlYW4ncyBwcmltYXJ5IGtleSBjbGFzcy4KLQotICAgICAgICBJZiB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgcHJpbWFyeSBrZXkgY2xhc3MgaXMKLSAgICAgICAgZGVmZXJyZWQgdG8gZGVwbG95bWVudCB0aW1lLCB0aGUgcHJpbS1rZXktY2xhc3MKLSAgICAgICAgZWxlbWVudCBzaG91bGQgc3BlY2lmeSBqYXZhLmxhbmcuT2JqZWN0LgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyZWVudHJhbnQiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnRydWUtZmFsc2VUeXBlIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIHJlZW50cmFudCBlbGVtZW50IHNwZWNpZmllcyB3aGV0aGVyIGFuIGVudGl0eQotICAgICAgICBiZWFuIGlzIHJlZW50cmFudCBvciBub3QuCi0KLSAgICAgICAgVGhlIHJlZW50cmFudCBlbGVtZW50IG11c3QgYmUgb25lIG9mIHRoZSB0d28KLSAgICAgICAgZm9sbG93aW5nOiB0cnVlIG9yIGZhbHNlCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImNtcC12ZXJzaW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpjbXAtdmVyc2lvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImFic3RyYWN0LXNjaGVtYS1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpqYXZhLWlkZW50aWZpZXJUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGFic3RyYWN0LXNjaGVtYS1uYW1lIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBuYW1lCi0gICAgICAgIG9mIHRoZSBhYnN0cmFjdCBzY2hlbWEgdHlwZSBvZiBhbiBlbnRpdHkgYmVhbiB3aXRoCi0gICAgICAgIGNtcC12ZXJzaW9uIDIueC4gSXQgaXMgdXNlZCBpbiBFSkIgUUwgcXVlcmllcy4KLQotICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGFic3RyYWN0LXNjaGVtYS1uYW1lIGZvciBhbiBlbnRpdHkKLSAgICAgICAgYmVhbiB3aG9zZSBsb2NhbCBpbnRlcmZhY2UgaXMKLSAgICAgICAgY29tLmFjbWUuY29tbWVyY2UuT3JkZXIgbWlnaHQgYmUgT3JkZXIuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImNtcC1maWVsZCIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6Y21wLWZpZWxkVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJwcmlta2V5LWZpZWxkIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpzdHJpbmciCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgcHJpbWtleS1maWVsZCBlbGVtZW50IGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUKLSAgICAgICAgbmFtZSBvZiB0aGUgcHJpbWFyeSBrZXkgZmllbGQgZm9yIGFuIGVudGl0eSB3aXRoCi0gICAgICAgIGNvbnRhaW5lci1tYW5hZ2VkIHBlcnNpc3RlbmNlLgotCi0gICAgICAgIFRoZSBwcmlta2V5LWZpZWxkIG11c3QgYmUgb25lIG9mIHRoZSBmaWVsZHMgZGVjbGFyZWQKLSAgICAgICAgaW4gdGhlIGNtcC1maWVsZCBlbGVtZW50LCBhbmQgdGhlIHR5cGUgb2YgdGhlIGZpZWxkCi0gICAgICAgIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIHByaW1hcnkga2V5IHR5cGUuCi0KLSAgICAgICAgVGhlIHByaW1rZXktZmllbGQgZWxlbWVudCBpcyBub3QgdXNlZCBpZiB0aGUgcHJpbWFyeQotICAgICAgICBrZXkgbWFwcyB0byBtdWx0aXBsZSBjb250YWluZXItbWFuYWdlZCBmaWVsZHMKLSAgICAgICAgKGkuZS4gdGhlIGtleSBpcyBhIGNvbXBvdW5kIGtleSkuIEluIHRoaXMgY2FzZSwgdGhlCi0gICAgICAgIGZpZWxkcyBvZiB0aGUgcHJpbWFyeSBrZXkgY2xhc3MgbXVzdCBiZSBwdWJsaWMsIGFuZAotICAgICAgICB0aGVpciBuYW1lcyBtdXN0IGNvcnJlc3BvbmQgdG8gdGhlIGZpZWxkIG5hbWVzIG9mCi0gICAgICAgIHRoZSBlbnRpdHkgYmVhbiBjbGFzcyB0aGF0IGNvbXByaXNlIHRoZSBrZXkuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVudi1lbnRyeSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZW52LWVudHJ5VHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVqYi1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVqYi1yZWZUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZWpiLWxvY2FsLXJlZiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZWpiLWxvY2FsLXJlZlR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzZXJ2aWNlLXJlZiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c2VydmljZS1yZWZUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ic2VjdXJpdHktcm9sZS1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnNlY3VyaXR5LXJvbGUtcmVmVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlY3VyaXR5LWlkZW50aXR5IgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpzZWN1cml0eS1pZGVudGl0eVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJlc291cmNlLXJlZiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cmVzb3VyY2UtcmVmVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJlc291cmNlLWVudi1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnJlc291cmNlLWVudi1yZWZUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOm1lc3NhZ2UtZGVzdGluYXRpb24tcmVmVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJxdWVyeSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cXVlcnlUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVwbG95bWVudC1leHRlbnNpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlcGxveW1lbnQtZXh0ZW5zaW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJleGNsdWRlLWxpc3RUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGV4Y2x1ZGUtbGlzdFR5cGUgc3BlY2lmaWVzIG9uZSBvciBtb3JlIG1ldGhvZHMgd2hpY2gKLXRoZSBBc3NlbWJsZXIgbWFya3MgdG8gYmUgdW5jYWxsYWJsZS4KLQotSWYgdGhlIG1ldGhvZCBwZXJtaXNzaW9uIHJlbGF0aW9uIGNvbnRhaW5zIG1ldGhvZHMgdGhhdCBhcmUKLWluIHRoZSBleGNsdWRlIGxpc3QsIHRoZSBEZXBsb3llciBzaG91bGQgY29uc2lkZXIgdGhvc2UKLW1ldGhvZHMgdG8gYmUgdW5jYWxsYWJsZS4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJtZXRob2QiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOm1ldGhvZFR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0iamF2YS10eXBlVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoaXMgaXMgYSBnZW5lcmljIHR5cGUgdGhhdCBkZXNpZ25hdGVzIGEgSmF2YSBwcmltaXRpdmUKLXR5cGUgb3IgYSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiBhIEphdmEgaW50ZXJmYWNlL3R5cGUuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6cGF0dGVybiB2YWx1ZT0iW15ccHtafV0qIi8+Ci0gICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ibWVzc2FnZS1kcml2ZW4tYmVhblR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgbWVzc2FnZS1kcml2ZW4gZWxlbWVudCBkZWNsYXJlcyBhIG1lc3NhZ2UtZHJpdmVuCi1iZWFuLiBUaGUgZGVjbGFyYXRpb24gY29uc2lzdHMgb2Y6Ci0KLSAgICAtIGFuIG9wdGlvbmFsIGRlc2NyaXB0aW9uCi0gICAgLSBhbiBvcHRpb25hbCBkaXNwbGF5IG5hbWUKLSAgICAtIGFuIG9wdGlvbmFsIGljb24gZWxlbWVudCB0aGF0IGNvbnRhaW5zIGEgc21hbGwgYW5kIGEgbGFyZ2UKLSAgICAgIGljb24gZmlsZSBuYW1lLgotICAgIC0gYSBuYW1lIGFzc2lnbmVkIHRvIHRoZSBlbnRlcnByaXNlIGJlYW4gaW4KLSAgICAgIHRoZSBkZXBsb3ltZW50IGRlc2NyaXB0b3IKLSAgICAtIHRoZSBtZXNzYWdlLWRyaXZlbiBiZWFuJ3MgaW1wbGVtZW50YXRpb24gY2xhc3MKLSAgICAtIGFuIG9wdGlvbmFsIGRlY2xhcmF0aW9uIG9mIHRoZSBiZWFuJ3MgbWVzc2FnaW5nCi0gICAgICB0eXBlCi0gICAgLSB0aGUgbWVzc2FnZS1kcml2ZW4gYmVhbidzIHRyYW5zYWN0aW9uIG1hbmFnZW1lbnQgdHlwZQotICAgIC0gYW4gb3B0aW9uYWwgZGVjbGFyYXRpb24gb2YgdGhlIGJlYW4ncwotICAgICAgbWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlCi0gICAgLSBhbiBvcHRpb25hbCBkZWNsYXJhdGlvbiBvZiB0aGUgYmVhbidzCi0gICAgICBtZXNzYWdlLWRlc3RpbmF0aW9uLWxpbmsKLSAgICAtIGFuIG9wdGlvbmFsIGRlY2xhcmF0aW9uIG9mIHRoZSBtZXNzYWdlLWRyaXZlbiBiZWFuJ3MKLSAgICAgIGFjdGl2YXRpb24gY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzCi0gICAgLSBhbiBvcHRpb25hbCBkZWNsYXJhdGlvbiBvZiB0aGUgYmVhbidzIGVudmlyb25tZW50Ci0gICAgICBlbnRyaWVzCi0gICAgLSBhbiBvcHRpb25hbCBkZWNsYXJhdGlvbiBvZiB0aGUgYmVhbidzIEVKQiByZWZlcmVuY2VzCi0gICAgLSBhbiBvcHRpb25hbCBkZWNsYXJhdGlvbiBvZiB0aGUgYmVhbidzIGxvY2FsIEVKQgotICAgICAgcmVmZXJlbmNlcwotICAgIC0gYW4gb3B0aW9uYWwgZGVjbGFyYXRpb24gb2YgdGhlIGJlYW4ncyB3ZWIgc2VydmljZQotICAgICAgcmVmZXJlbmNlcwotICAgIC0gYW4gb3B0aW9uYWwgZGVjbGFyYXRpb24gb2YgdGhlIHNlY3VyaXR5Ci0gICAgICBpZGVudGl0eSB0byBiZSB1c2VkIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBiZWFuJ3MKLSAgICAgIG1ldGhvZHMKLSAgICAtIGFuIG9wdGlvbmFsIGRlY2xhcmF0aW9uIG9mIHRoZSBiZWFuJ3MKLSAgICAgIHJlc291cmNlIG1hbmFnZXIgY29ubmVjdGlvbiBmYWN0b3J5Ci0gICAgICByZWZlcmVuY2VzCi0gICAgLSBhbiBvcHRpb25hbCBkZWNsYXJhdGlvbiBvZiB0aGUgYmVhbidzIHJlc291cmNlCi0gICAgICBlbnZpcm9ubWVudCByZWZlcmVuY2VzLgotICAgIC0gYW4gb3B0aW9uYWwgZGVjbGFyYXRpb24gb2YgdGhlIGJlYW4ncyBtZXNzYWdlCi0gICAgICBkZXN0aW5hdGlvbiByZWZlcmVuY2VzCi0gICAgLSBhbiBvcHRpb25hbCBkZWNsYXJhdGlvbiBvZiBkZXBsb3ltZW50IGV4dGVuc2lvbnMKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGlzcGxheS1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkaXNwbGF5LW5hbWVUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJpY29uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTppY29uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZWpiLW5hbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVqYi1uYW1lVHlwZSIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZWpiLWNsYXNzIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplamItY2xhc3NUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJtZXNzYWdpbmctdHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZnVsbHktcXVhbGlmaWVkLWNsYXNzVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBtZXNzYWdpbmctdHlwZSBlbGVtZW50IHNwZWNpZmllcyB0aGUgbWVzc2FnZQotICAgICAgICBsaXN0ZW5lciBpbnRlcmZhY2Ugb2YgdGhlIG1lc3NhZ2UtZHJpdmVuIGJlYW4uIElmCi0gICAgICAgIHRoZSBtZXNzYWdpbmctdHlwZSBlbGVtZW50IGlzIG5vdCBzcGVjaWZpZWQsIGl0IGlzCi0gICAgICAgIGFzc3VtZWQgdG8gYmUgamF2YXguam1zLk1lc3NhZ2VMaXN0ZW5lci4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0idHJhbnNhY3Rpb24tdHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6dHJhbnNhY3Rpb24tdHlwZVR5cGUiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im1lc3NhZ2UtZGVzdGluYXRpb24tdHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibWVzc2FnZS1kZXN0aW5hdGlvbi1saW5rIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTptZXNzYWdlLWRlc3RpbmF0aW9uLWxpbmtUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJhY3RpdmF0aW9uLWNvbmZpZyIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6YWN0aXZhdGlvbi1jb25maWdUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJlbnYtZW50cnkiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVudi1lbnRyeVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJlamItcmVmIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplamItcmVmVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVqYi1sb2NhbC1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVqYi1sb2NhbC1yZWZUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ic2VydmljZS1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnNlcnZpY2UtcmVmVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlY3VyaXR5LWlkZW50aXR5IgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpzZWN1cml0eS1pZGVudGl0eVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJlc291cmNlLXJlZiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cmVzb3VyY2UtcmVmVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJlc291cmNlLWVudi1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnJlc291cmNlLWVudi1yZWZUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im1lc3NhZ2UtZGVzdGluYXRpb24tcmVmIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTptZXNzYWdlLWRlc3RpbmF0aW9uLXJlZlR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVwbG95bWVudC1leHRlbnNpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlcGxveW1lbnQtZXh0ZW5zaW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9Im1ldGhvZC1pbnRmVHlwZSI+Ci0KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIG1ldGhvZC1pbnRmIGVsZW1lbnQgYWxsb3dzIGEgbWV0aG9kIGVsZW1lbnQgdG8KLWRpZmZlcmVudGlhdGUgYmV0d2VlbiB0aGUgbWV0aG9kcyB3aXRoIHRoZSBzYW1lIG5hbWUgYW5kCi1zaWduYXR1cmUgdGhhdCBhcmUgbXVsdGlwbHkgZGVmaW5lZCBhY3Jvc3MgdGhlIGhvbWUgYW5kCi1jb21wb25lbnQgaW50ZXJmYWNlcyAoZS5nLCBpbiBib3RoIGFuIGVudGVycHJpc2UgYmVhbidzCi1yZW1vdGUgYW5kIGxvY2FsIGludGVyZmFjZXMgb3IgaW4gYm90aCBhbiBlbnRlcnByaXNlIGJlYW4ncwotaG9tZSBhbmQgcmVtb3RlIGludGVyZmFjZXMsIGV0Yy4pOyB0aGUgY29tcG9uZW50IGFuZCB3ZWIKLXNlcnZpY2UgZW5kcG9pbnQgaW50ZXJmYWNlcywgYW5kIHNvIG9uLgotCi1UaGUgbWV0aG9kLWludGYgZWxlbWVudCBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotCi0gICAgSG9tZQotICAgIFJlbW90ZQotICAgIExvY2FsSG9tZQotICAgIExvY2FsCi0gICAgU2VydmljZUVuZHBvaW50Ci0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpzdHJpbmciPgotICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvbWUiLz4KLSAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZW1vdGUiLz4KLSAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhbEhvbWUiLz4KLSAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhbCIvPgotICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VFbmRwb2ludCIvPgotICA8L3hzZDpyZXN0cmljdGlvbj4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0ibWV0aG9kLW5hbWVUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIG1ldGhvZC1uYW1lVHlwZSBjb250YWlucyBhIG5hbWUgb2YgYW4gZW50ZXJwcmlzZQotYmVhbiBtZXRob2Qgb3IgdGhlIGFzdGVyaXNrICgqKSBjaGFyYWN0ZXIuIFRoZSBhc3RlcmlzayBpcwotdXNlZCB3aGVuIHRoZSBlbGVtZW50IGRlbm90ZXMgYWxsIHRoZSBtZXRob2RzIG9mIGFuCi1lbnRlcnByaXNlIGJlYW4ncyBjbGllbnQgdmlldyBpbnRlcmZhY2VzLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpzdHJpbmciLz4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9Im1ldGhvZC1wYXJhbXNUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIG1ldGhvZC1wYXJhbXNUeXBlIGRlZmluZXMgYSBsaXN0IG9mIHRoZQotZnVsbHktcXVhbGlmaWVkIEphdmEgdHlwZSBuYW1lcyBvZiB0aGUgbWV0aG9kIHBhcmFtZXRlcnMuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im1ldGhvZC1wYXJhbSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6amF2YS10eXBlVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIG1ldGhvZC1wYXJhbSBlbGVtZW50IGNvbnRhaW5zIGEgcHJpbWl0aXZlCi0gICAgICAgIG9yIGEgZnVsbHktcXVhbGlmaWVkIEphdmEgdHlwZSBuYW1lIG9mIGEgbWV0aG9kCi0gICAgICAgIHBhcmFtZXRlci4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9Im1ldGhvZC1wZXJtaXNzaW9uVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBtZXRob2QtcGVybWlzc2lvblR5cGUgc3BlY2lmaWVzIHRoYXQgb25lIG9yIG1vcmUKLXNlY3VyaXR5IHJvbGVzIGFyZSBhbGxvd2VkIHRvIGludm9rZSBvbmUgb3IgbW9yZSBlbnRlcnByaXNlCi1iZWFuIG1ldGhvZHMuIFRoZSBtZXRob2QtcGVybWlzc2lvblR5cGUgY29uc2lzdHMgb2YgYW4KLW9wdGlvbmFsIGRlc2NyaXB0aW9uLCBhIGxpc3Qgb2Ygc2VjdXJpdHkgcm9sZSBuYW1lcyBvciBhbgotaW5kaWNhdG9yIHRvIHN0YXRlIHRoYXQgdGhlIG1ldGhvZCBpcyB1bmNoZWNrZWQgZm9yCi1hdXRob3JpemF0aW9uLCBhbmQgYSBsaXN0IG9mIG1ldGhvZCBlbGVtZW50cy4KLQotVGhlIHNlY3VyaXR5IHJvbGVzIHVzZWQgaW4gdGhlIG1ldGhvZC1wZXJtaXNzaW9uVHlwZQotbXVzdCBiZSBkZWZpbmVkIGluIHRoZSBzZWN1cml0eS1yb2xlIGVsZW1lbnRzIG9mIHRoZQotZGVwbG95bWVudCBkZXNjcmlwdG9yLCBhbmQgdGhlIG1ldGhvZHMgbXVzdCBiZSBtZXRob2RzCi1kZWZpbmVkIGluIHRoZSBlbnRlcnByaXNlIGJlYW4ncyBob21lLCBjb21wb25lbnQgYW5kL29yIHdlYgotc2VydmljZSBlbmRwb2ludCBpbnRlcmZhY2VzLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDpjaG9pY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icm9sZS1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cm9sZS1uYW1lVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InVuY2hlY2tlZCIKLSAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVtcHR5VHlwZSI+Ci0gICAgICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgICAgIFRoZSB1bmNoZWNrZWQgZWxlbWVudCBzcGVjaWZpZXMgdGhhdCBhIG1ldGhvZCBpcwotICAgICAgICAgICAgbm90IGNoZWNrZWQgZm9yIGF1dGhvcml6YXRpb24gYnkgdGhlIGNvbnRhaW5lcgotICAgICAgICAgICAgcHJpb3IgdG8gaW52b2NhdGlvbiBvZiB0aGUgbWV0aG9kLgotCi0gICAgICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwveHNkOmNob2ljZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im1ldGhvZCIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bWV0aG9kVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ibWV0aG9kVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBtZXRob2RUeXBlIGlzIHVzZWQgdG8gZGVub3RlIGEgbWV0aG9kIG9mIGFuIGVudGVycHJpc2UKLWJlYW4ncyBob21lLCBjb21wb25lbnQsIGFuZC9vciB3ZWIgc2VydmljZSBlbmRwb2ludAotaW50ZXJmYWNlLCBvciwgaW4gdGhlIGNhc2Ugb2YgYSBtZXNzYWdlLWRyaXZlbiBiZWFuLCB0aGUKLWJlYW4ncyBtZXNzYWdlIGxpc3RlbmVyIG1ldGhvZCwgb3IgYSBzZXQgb2Ygc3VjaAotbWV0aG9kcy4gVGhlIGVqYi1uYW1lIGVsZW1lbnQgbXVzdCBiZSB0aGUgbmFtZSBvZiBvbmUgb2YgdGhlCi1lbnRlcnByaXNlIGJlYW5zIGRlY2xhcmVkIGluIHRoZSBkZXBsb3ltZW50IGRlc2NyaXB0b3I7IHRoZQotb3B0aW9uYWwgbWV0aG9kLWludGYgZWxlbWVudCBhbGxvd3MgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBhCi1tZXRob2Qgd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUgdGhhdCBpcyBtdWx0aXBseSBkZWZpbmVkCi1hY3Jvc3MgdGhlIGhvbWUsIGNvbXBvbmVudCwgYW5kL29yIHdlYiBzZXJ2aWNlIGVuZHBvaW50Ci1pbnRlcmZhY2VzOyB0aGUgbWV0aG9kLW5hbWUgZWxlbWVudCBzcGVjaWZpZXMgdGhlIG1ldGhvZAotbmFtZTsgYW5kIHRoZSBvcHRpb25hbCBtZXRob2QtcGFyYW1zIGVsZW1lbnRzIGlkZW50aWZ5IGEKLXNpbmdsZSBtZXRob2QgYW1vbmcgbXVsdGlwbGUgbWV0aG9kcyB3aXRoIGFuIG92ZXJsb2FkZWQKLW1ldGhvZCBuYW1lLgotCi1UaGVyZSBhcmUgdGhyZWUgcG9zc2libGUgc3R5bGVzIG9mIHVzaW5nIG1ldGhvZFR5cGUgZWxlbWVudAotd2l0aGluIGEgbWV0aG9kIGVsZW1lbnQ6Ci0KLTEuCi08bWV0aG9kPgotICAgIDxlamItbmFtZT5FSkJOQU1FPC9lamItbmFtZT4KLSAgICA8bWV0aG9kLW5hbWU+KjwvbWV0aG9kLW5hbWU+Ci08L21ldGhvZD4KLQotICAgVGhpcyBzdHlsZSBpcyB1c2VkIHRvIHJlZmVyIHRvIGFsbCB0aGUgbWV0aG9kcyBvZiB0aGUKLSAgIHNwZWNpZmllZCBlbnRlcnByaXNlIGJlYW4ncyBob21lLCBjb21wb25lbnQsIGFuZC9vciB3ZWIKLSAgIHNlcnZpY2UgZW5kcG9pbnQgaW50ZXJmYWNlcy4KLQotMi4KLTxtZXRob2Q+Ci0gICAgPGVqYi1uYW1lPkVKQk5BTUU8L2VqYi1uYW1lPgotICAgIDxtZXRob2QtbmFtZT5NRVRIT0Q8L21ldGhvZC1uYW1lPgotPC9tZXRob2Q+PgotCi0gICBUaGlzIHN0eWxlIGlzIHVzZWQgdG8gcmVmZXIgdG8gdGhlIHNwZWNpZmllZCBtZXRob2Qgb2YKLSAgIHRoZSBzcGVjaWZpZWQgZW50ZXJwcmlzZSBiZWFuLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUKLSAgIG1ldGhvZHMgd2l0aCB0aGUgc2FtZSBvdmVybG9hZGVkIG5hbWUsIHRoZSBlbGVtZW50IG9mCi0gICB0aGlzIHN0eWxlIHJlZmVycyB0byBhbGwgdGhlIG1ldGhvZHMgd2l0aCB0aGUgb3ZlcmxvYWRlZAotICAgbmFtZS4KLQotMy4KLTxtZXRob2Q+Ci0gICAgPGVqYi1uYW1lPkVKQk5BTUU8L2VqYi1uYW1lPgotICAgIDxtZXRob2QtbmFtZT5NRVRIT0Q8L21ldGhvZC1uYW1lPgotICAgIDxtZXRob2QtcGFyYW1zPgotICAgICAgICA8bWV0aG9kLXBhcmFtPlBBUkFNLTE8L21ldGhvZC1wYXJhbT4KLSAgICAgICAgPG1ldGhvZC1wYXJhbT5QQVJBTS0yPC9tZXRob2QtcGFyYW0+Ci0gICAgICAgIC4uLgotICAgICAgICA8bWV0aG9kLXBhcmFtPlBBUkFNLW48L21ldGhvZC1wYXJhbT4KLSAgICA8L21ldGhvZC1wYXJhbXM+Ci08L21ldGhvZD4KLQotICAgVGhpcyBzdHlsZSBpcyB1c2VkIHRvIHJlZmVyIHRvIGEgc2luZ2xlIG1ldGhvZCB3aXRoaW4gYQotICAgc2V0IG9mIG1ldGhvZHMgd2l0aCBhbiBvdmVybG9hZGVkIG5hbWUuIFBBUkFNLTEgdGhyb3VnaAotICAgUEFSQU0tbiBhcmUgdGhlIGZ1bGx5LXF1YWxpZmllZCBKYXZhIHR5cGVzIG9mIHRoZQotICAgbWV0aG9kJ3MgaW5wdXQgcGFyYW1ldGVycyAoaWYgdGhlIG1ldGhvZCBoYXMgbm8gaW5wdXQKLSAgIGFyZ3VtZW50cywgdGhlIG1ldGhvZC1wYXJhbXMgZWxlbWVudCBjb250YWlucyBubwotICAgbWV0aG9kLXBhcmFtIGVsZW1lbnRzKS4gQXJyYXlzIGFyZSBzcGVjaWZpZWQgYnkgdGhlCi0gICBhcnJheSBlbGVtZW50J3MgdHlwZSwgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgcGFpciBvZgotICAgc3F1YXJlIGJyYWNrZXRzIChlLmcuIGludFtdW10pLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUKLSAgIG1ldGhvZHMgd2l0aCB0aGUgc2FtZSBvdmVybG9hZGVkIG5hbWUsIHRoaXMgc3R5bGUgcmVmZXJzCi0gICB0byBhbGwgb2YgdGhlIG92ZXJsb2FkZWQgbWV0aG9kcy4KLQotRXhhbXBsZXM6Ci0KLVN0eWxlIDE6IFRoZSBmb2xsb3dpbmcgbWV0aG9kIGVsZW1lbnQgcmVmZXJzIHRvIGFsbCB0aGUKLW1ldGhvZHMgb2YgdGhlIEVtcGxveWVlU2VydmljZSBiZWFuJ3MgaG9tZSwgY29tcG9uZW50LAotYW5kL29yIHdlYiBzZXJ2aWNlIGVuZHBvaW50IGludGVyZmFjZXM6Ci0KLTxtZXRob2Q+Ci0gICAgPGVqYi1uYW1lPkVtcGxveWVlU2VydmljZTwvZWpiLW5hbWU+Ci0gICAgPG1ldGhvZC1uYW1lPio8L21ldGhvZC1uYW1lPgotPC9tZXRob2Q+Ci0KLVN0eWxlIDI6IFRoZSBmb2xsb3dpbmcgbWV0aG9kIGVsZW1lbnQgcmVmZXJzIHRvIGFsbCB0aGUKLWNyZWF0ZSBtZXRob2RzIG9mIHRoZSBFbXBsb3llZVNlcnZpY2UgYmVhbidzIGhvbWUKLWludGVyZmFjZShzKS4KLQotPG1ldGhvZD4KLSAgICA8ZWpiLW5hbWU+RW1wbG95ZWVTZXJ2aWNlPC9lamItbmFtZT4KLSAgICA8bWV0aG9kLW5hbWU+Y3JlYXRlPC9tZXRob2QtbmFtZT4KLTwvbWV0aG9kPgotCi1TdHlsZSAzOiBUaGUgZm9sbG93aW5nIG1ldGhvZCBlbGVtZW50IHJlZmVycyB0byB0aGUKLWNyZWF0ZShTdHJpbmcgZmlyc3ROYW1lLCBTdHJpbmcgTGFzdE5hbWUpIG1ldGhvZCBvZiB0aGUKLUVtcGxveWVlU2VydmljZSBiZWFuJ3MgaG9tZSBpbnRlcmZhY2UocykuCi0KLTxtZXRob2Q+Ci0gICAgPGVqYi1uYW1lPkVtcGxveWVlU2VydmljZTwvZWpiLW5hbWU+Ci0gICAgPG1ldGhvZC1uYW1lPmNyZWF0ZTwvbWV0aG9kLW5hbWU+Ci0gICAgPG1ldGhvZC1wYXJhbXM+Ci0gICAgICAgIDxtZXRob2QtcGFyYW0+amF2YS5sYW5nLlN0cmluZzwvbWV0aG9kLXBhcmFtPgotICAgICAgICA8bWV0aG9kLXBhcmFtPmphdmEubGFuZy5TdHJpbmc8L21ldGhvZC1wYXJhbT4KLSAgICA8L21ldGhvZC1wYXJhbXM+Ci08L21ldGhvZD4KLQotVGhlIGZvbGxvd2luZyBleGFtcGxlIGlsbHVzdHJhdGVzIGEgU3R5bGUgMyBlbGVtZW50IHdpdGgKLW1vcmUgY29tcGxleCBwYXJhbWV0ZXIgdHlwZXMuIFRoZSBtZXRob2QKLWZvb2JhcihjaGFyIHMsIGludCBpLCBpbnRbXSBpYXIsIG15cGFja2FnZS5NeUNsYXNzIG15Y2wsCi1teXBhY2thZ2UuTXlDbGFzc1tdW10gbXljbGFhcikgd291bGQgYmUgc3BlY2lmaWVkIGFzOgotCi08bWV0aG9kPgotICAgIDxlamItbmFtZT5FbXBsb3llZVNlcnZpY2U8L2VqYi1uYW1lPgotICAgIDxtZXRob2QtbmFtZT5mb29iYXI8L21ldGhvZC1uYW1lPgotICAgIDxtZXRob2QtcGFyYW1zPgotICAgICAgICA8bWV0aG9kLXBhcmFtPmNoYXI8L21ldGhvZC1wYXJhbT4KLSAgICAgICAgPG1ldGhvZC1wYXJhbT5pbnQ8L21ldGhvZC1wYXJhbT4KLSAgICAgICAgPG1ldGhvZC1wYXJhbT5pbnRbXTwvbWV0aG9kLXBhcmFtPgotICAgICAgICA8bWV0aG9kLXBhcmFtPm15cGFja2FnZS5NeUNsYXNzPC9tZXRob2QtcGFyYW0+Ci0gICAgICAgIDxtZXRob2QtcGFyYW0+bXlwYWNrYWdlLk15Q2xhc3NbXVtdPC9tZXRob2QtcGFyYW0+Ci0gICAgPC9tZXRob2QtcGFyYW1zPgotPC9tZXRob2Q+Ci0KLVRoZSBvcHRpb25hbCBtZXRob2QtaW50ZiBlbGVtZW50IGNhbiBiZSB1c2VkIHdoZW4gaXQgYmVjb21lcwotbmVjZXNzYXJ5IHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBhIG1ldGhvZCB0aGF0IGlzIG11bHRpcGx5Ci1kZWZpbmVkIGFjcm9zcyB0aGUgZW50ZXJwcmlzZSBiZWFuJ3MgaG9tZSwgY29tcG9uZW50LCBhbmQvb3IKLXdlYiBzZXJ2aWNlIGVuZHBvaW50IGludGVyZmFjZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFuZAotc2lnbmF0dXJlLgotCi1Gb3IgZXhhbXBsZSwgdGhlIG1ldGhvZCBlbGVtZW50Ci0KLTxtZXRob2Q+Ci0gICAgPGVqYi1uYW1lPkVtcGxveWVlU2VydmljZTwvZWpiLW5hbWU+Ci0gICAgPG1ldGhvZC1pbnRmPlJlbW90ZTwvbWV0aG9kLWludGY+Ci0gICAgPG1ldGhvZC1uYW1lPmNyZWF0ZTwvbWV0aG9kLW5hbWU+Ci0gICAgPG1ldGhvZC1wYXJhbXM+Ci0gICAgICAgIDxtZXRob2QtcGFyYW0+amF2YS5sYW5nLlN0cmluZzwvbWV0aG9kLXBhcmFtPgotICAgICAgICA8bWV0aG9kLXBhcmFtPmphdmEubGFuZy5TdHJpbmc8L21ldGhvZC1wYXJhbT4KLSAgICA8L21ldGhvZC1wYXJhbXM+Ci08L21ldGhvZD4KLQotY2FuIGJlIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSB0aGUgY3JlYXRlKFN0cmluZywgU3RyaW5nKQotbWV0aG9kIGRlZmluZWQgaW4gdGhlIHJlbW90ZSBpbnRlcmZhY2UgZnJvbSB0aGUKLWNyZWF0ZShTdHJpbmcsIFN0cmluZykgbWV0aG9kIGRlZmluZWQgaW4gdGhlIHJlbW90ZSBob21lCi1pbnRlcmZhY2UsIHdoaWNoIHdvdWxkIGJlIGRlZmluZWQgYXMKLQotPG1ldGhvZD4KLSAgICA8ZWpiLW5hbWU+RW1wbG95ZWVTZXJ2aWNlPC9lamItbmFtZT4KLSAgICA8bWV0aG9kLWludGY+SG9tZTwvbWV0aG9kLWludGY+Ci0gICAgPG1ldGhvZC1uYW1lPmNyZWF0ZTwvbWV0aG9kLW5hbWU+Ci0gICAgPG1ldGhvZC1wYXJhbXM+Ci0gICAgICAgIDxtZXRob2QtcGFyYW0+amF2YS5sYW5nLlN0cmluZzwvbWV0aG9kLXBhcmFtPgotICAgICAgICA8bWV0aG9kLXBhcmFtPmphdmEubGFuZy5TdHJpbmc8L21ldGhvZC1wYXJhbT4KLSAgICA8L21ldGhvZC1wYXJhbXM+Ci08L21ldGhvZD4KLQotYW5kIHRoZSBjcmVhdGUgbWV0aG9kIHRoYXQgaXMgZGVmaW5lZCBpbiB0aGUgbG9jYWwgaG9tZQotaW50ZXJmYWNlIHdoaWNoIHdvdWxkIGJlIGRlZmluZWQgYXMKLQotPG1ldGhvZD4KLSAgICA8ZWpiLW5hbWU+RW1wbG95ZWVTZXJ2aWNlPC9lamItbmFtZT4KLSAgICA8bWV0aG9kLWludGY+TG9jYWxIb21lPC9tZXRob2QtaW50Zj4KLSAgICA8bWV0aG9kLW5hbWU+Y3JlYXRlPC9tZXRob2QtbmFtZT4KLSAgICA8bWV0aG9kLXBhcmFtcz4KLSAgICAgICAgPG1ldGhvZC1wYXJhbT5qYXZhLmxhbmcuU3RyaW5nPC9tZXRob2QtcGFyYW0+Ci0gICAgICAgIDxtZXRob2QtcGFyYW0+amF2YS5sYW5nLlN0cmluZzwvbWV0aG9kLXBhcmFtPgotICAgIDwvbWV0aG9kLXBhcmFtcz4KLTwvbWV0aG9kPgotCi1UaGUgbWV0aG9kLWludGYgZWxlbWVudCBjYW4gYmUgdXNlZCB3aXRoIGFsbCB0aCByZWUgU3R5bGVzCi1vZiB0aGUgbWV0aG9kIGVsZW1lbnQgdXNhZ2UuIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nCi1tZXRob2QgZWxlbWVudCBleGFtcGxlIGNvdWxkIGJlIHVzZWQgdG8gcmVmZXIgdG8gYWxsIHRoZQotbWV0aG9kcyBvZiB0aGUgRW1wbG95ZWVTZXJ2aWNlIGJlYW4ncyByZW1vdGUgaG9tZSBpbnRlcmZhY2UuCi0KLTxtZXRob2Q+Ci0gICAgPGVqYi1uYW1lPkVtcGxveWVlU2VydmljZTwvZWpiLW5hbWU+Ci0gICAgPG1ldGhvZC1pbnRmPkhvbWU8L21ldGhvZC1pbnRmPgotICAgIDxtZXRob2QtbmFtZT4qPC9tZXRob2QtbmFtZT4KLTwvbWV0aG9kPgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZWpiLW5hbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVqYi1uYW1lVHlwZSIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibWV0aG9kLWludGYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOm1ldGhvZC1pbnRmVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJtZXRob2QtbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bWV0aG9kLW5hbWVUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJtZXRob2QtcGFyYW1zIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTptZXRob2QtcGFyYW1zVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9Im11bHRpcGxpY2l0eVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgbXVsdGlwbGljaXR5VHlwZSBkZXNjcmliZXMgdGhlIG11bHRpcGxpY2l0eSBvZiB0aGUKLXJvbGUgdGhhdCBwYXJ0aWNpcGF0ZXMgaW4gYSByZWxhdGlvbi4KLQotVGhlIHZhbHVlIG11c3QgYmUgb25lIG9mIHRoZSB0d28gZm9sbG93aW5nOgotCi0gICAgT25lCi0gICAgTWFueQotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpzdHJpbmciPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbmUiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFueSIvPgotICAgIDwveHNkOnJlc3RyaWN0aW9uPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJwZXJzaXN0ZW5jZS10eXBlVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBwZXJzaXN0ZW5jZS10eXBlVHlwZSBzcGVjaWZpZXMgYW4gZW50aXR5IGJlYW4ncyBwZXJzaXN0ZW5jZQotbWFuYWdlbWVudCB0eXBlLgotCi1UaGUgcGVyc2lzdGVuY2UtdHlwZSBlbGVtZW50IG11c3QgYmUgb25lIG9mIHRoZSB0d28gZm9sbG93aW5nOgotCi0gICAgQmVhbgotICAgIENvbnRhaW5lcgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpzdHJpbmciPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZWFuIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lciIvPgotICAgIDwveHNkOnJlc3RyaWN0aW9uPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0icXVlcnktbWV0aG9kVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBxdWVyeS1tZXRob2Qgc3BlY2lmaWVzIHRoZSBtZXRob2QgZm9yIGEgZmluZGVyIG9yIHNlbGVjdAotcXVlcnkuCi0KLVRoZSBtZXRob2QtbmFtZSBlbGVtZW50IHNwZWNpZmllcyB0aGUgbmFtZSBvZiBhIGZpbmRlciBvciBzZWxlY3QKLW1ldGhvZCBpbiB0aGUgZW50aXR5IGJlYW4ncyBpbXBsZW1lbnRhdGlvbiBjbGFzcy4KLQotRWFjaCBtZXRob2QtcGFyYW0gbXVzdCBiZSBkZWZpbmVkIGZvciBhIHF1ZXJ5LW1ldGhvZCB1c2luZyB0aGUKLW1ldGhvZC1wYXJhbXMgZWxlbWVudC4KLQotSXQgaXMgdXNlZCBieSB0aGUgcXVlcnktbWV0aG9kIGVsZW1lbnQuCi0KLUV4YW1wbGU6Ci0KLTxxdWVyeT4KLSAgICA8ZGVzY3JpcHRpb24+TWV0aG9kIGZpbmRzIGxhcmdlIG9yZGVyczwvZGVzY3JpcHRpb24+Ci0gICAgPHF1ZXJ5LW1ldGhvZD4KLSAgICAgICAgPG1ldGhvZC1uYW1lPmZpbmRMYXJnZU9yZGVyczwvbWV0aG9kLW5hbWU+Ci0gICAgICAgIDxtZXRob2QtcGFyYW1zPjwvbWV0aG9kLXBhcmFtcz4KLSAgICA8L3F1ZXJ5LW1ldGhvZD4KLSAgICA8ZWpiLXFsPlNFTEVDVCBPQkpFQ1QobykgRlJPTSBPcmRlciBvIFdIRVJFIG8uYW1vdW50ICZndDsgMTAwMDwvZWpiLXFsPgotPC9xdWVyeT4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibWV0aG9kLW5hbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOm1ldGhvZC1uYW1lVHlwZSIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibWV0aG9kLXBhcmFtcyIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bWV0aG9kLXBhcmFtc1R5cGUiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlcGxveW1lbnQtZXh0ZW5zaW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXBsb3ltZW50LWV4dGVuc2lvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0icXVlcnlUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIHF1ZXJ5VHlwZSBkZWZpbmVzIGEgZmluZGVyIG9yIHNlbGVjdAotcXVlcnkuIEl0IGNvbnRhaW5zCi0gICAgLSBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbiBvZiB0aGUgcXVlcnkKLSAgICAtIHRoZSBzcGVjaWZpY2F0aW9uIG9mIHRoZSBmaW5kZXIgb3Igc2VsZWN0Ci0gICAgICBtZXRob2QgaXQgaXMgdXNlZCBieQotICAgICAgICAtIGFuIG9wdGlvbmFsIHNwZWNpZmljYXRpb24gb2YgdGhlIHJlc3VsdCB0eXBlCi0gICAgICAgICAgbWFwcGluZywgaWYgdGhlIHF1ZXJ5IGlzIGZvciBhIHNlbGVjdCBtZXRob2QKLSAgICAgICAgICBhbmQgZW50aXR5IG9iamVjdHMgYXJlIHJldHVybmVkLgotICAgICAgICAtIHRoZSBFSkIgUUwgcXVlcnkgc3RyaW5nIHRoYXQgZGVmaW5lcyB0aGUgcXVlcnkuCi0gICAgLSBhbiBvcHRpb25hbCBkZWNsYXJhdGlvbiBvZiBkZXBsb3ltZW50IGV4dGVuc2lvbnMKLQotUXVlcmllcyB0aGF0IGFyZSBleHByZXNzaWJsZSBpbiBFSkIgUUwgbXVzdCB1c2UgdGhlIGVqYi1xbAotZWxlbWVudCB0byBzcGVjaWZ5IHRoZSBxdWVyeS4gSWYgYSBxdWVyeSBpcyBub3QgZXhwcmVzc2libGUKLWluIEVKQiBRTCwgdGhlIGRlc2NyaXB0aW9uIGVsZW1lbnQgc2hvdWxkIGJlIHVzZWQgdG8KLWRlc2NyaWJlIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIHF1ZXJ5IGFuZCB0aGUgZWpiLXFsIGVsZW1lbnQKLXNob3VsZCBiZSBlbXB0eS4KLQotVGhlIHJlc3VsdC10eXBlLW1hcHBpbmcgaXMgYW4gb3B0aW9uYWwgZWxlbWVudC4gSXQgY2FuIG9ubHkKLWJlIHByZXNlbnQgaWYgdGhlIHF1ZXJ5LW1ldGhvZCBzcGVjaWZpZXMgYSBzZWxlY3QgbWV0aG9kCi10aGF0IHJldHVybnMgZW50aXR5IG9iamVjdHMuICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlCi1yZXN1bHQtdHlwZS1tYXBwaW5nIGVsZW1lbnQgaXMgIkxvY2FsIi4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJxdWVyeS1tZXRob2QiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnF1ZXJ5LW1ldGhvZFR5cGUiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJlc3VsdC10eXBlLW1hcHBpbmciCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnJlc3VsdC10eXBlLW1hcHBpbmdUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJlamItcWwiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXBsb3ltZW50LWV4dGVuc2lvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVwbG95bWVudC1leHRlbnNpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9InJlbGF0aW9uc2hpcC1yb2xlLXNvdXJjZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgcmVsYXRpb25zaGlwLXJvbGUtc291cmNlVHlwZSBkZXNpZ25hdGVzIHRoZSBzb3VyY2Ugb2YgYQotcm9sZSB0aGF0IHBhcnRpY2lwYXRlcyBpbiBhIHJlbGF0aW9uc2hpcC4gQQotcmVsYXRpb25zaGlwLXJvbGUtc291cmNlVHlwZSBpcyB1c2VkIGJ5Ci1yZWxhdGlvbnNoaXAtcm9sZS1zb3VyY2UgZWxlbWVudHMgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYW4KLWVudGl0eSBiZWFuLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVqYi1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplamItbmFtZVR5cGUiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJyZWxhdGlvbnNoaXBzVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSByZWxhdGlvbnNoaXBzVHlwZSBkZXNjcmliZXMgdGhlIHJlbGF0aW9uc2hpcHMgaW4KLXdoaWNoIGVudGl0eSBiZWFucyB3aXRoIGNvbnRhaW5lci1tYW5hZ2VkIHBlcnNpc3RlbmNlCi1wYXJ0aWNpcGF0ZS4gVGhlIHJlbGF0aW9uc2hpcHNUeXBlIGNvbnRhaW5zIGFuIG9wdGlvbmFsCi1kZXNjcmlwdGlvbjsgYW5kIGEgbGlzdCBvZiBlamItcmVsYXRpb24gZWxlbWVudHMsIHdoaWNoCi1zcGVjaWZ5IHRoZSBjb250YWluZXIgbWFuYWdlZCByZWxhdGlvbnNoaXBzLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVqYi1yZWxhdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZWpiLXJlbGF0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQotICAgICAgICA8eHNkOnVuaXF1ZSBuYW1lPSJyb2xlLW5hbWUtdW5pcXVlbmVzcyI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBlamItcmVsYXRpb25zaGlwLXJvbGUtbmFtZSBjb250YWlucyB0aGUgbmFtZSBvZiBhCi0gICAgICAgIHJlbGF0aW9uc2hpcCByb2xlLiBUaGUgbmFtZSBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4KLSAgICAgICAgYSByZWxhdGlvbnNoaXAsIGJ1dCBjYW4gYmUgcmV1c2VkIGluIGRpZmZlcmVudAotICAgICAgICByZWxhdGlvbnNoaXBzLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgICAgICA8eHNkOnNlbGVjdG9yCi0gICAgICAgICAgICAgICAgeHBhdGg9Ii4vL2oyZWU6ZWpiLXJlbGF0aW9uc2hpcC1yb2xlLW5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZmllbGQKLSAgICAgICAgICAgICAgICB4cGF0aD0iLiIvPgotICAgICAgICA8L3hzZDp1bmlxdWU+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXBsb3ltZW50LWV4dGVuc2lvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVwbG95bWVudC1leHRlbnNpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0icmVzdWx0LXR5cGUtbWFwcGluZ1R5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgcmVzdWx0LXR5cGUtbWFwcGluZ1R5cGUgaXMgdXNlZCBpbiB0aGUgcXVlcnkgZWxlbWVudCB0bwotc3BlY2lmeSB3aGV0aGVyIGFuIGFic3RyYWN0IHNjaGVtYSB0eXBlIHJldHVybmVkIGJ5IGEgcXVlcnkKLWZvciBhIHNlbGVjdCBtZXRob2QgaXMgdG8gYmUgbWFwcGVkIHRvIGFuIEVKQkxvY2FsT2JqZWN0IG9yCi1FSkJPYmplY3QgdHlwZS4KLQotVGhlIHZhbHVlIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0KLSAgICBMb2NhbAotICAgIFJlbW90ZQotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpzdHJpbmciPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhbCIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZW1vdGUiLz4KLSAgICA8L3hzZDpyZXN0cmljdGlvbj4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9InNlY3VyaXR5LWlkZW50aXR5VHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBzZWN1cml0eS1pZGVudGl0eVR5cGUgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIGNhbGxlcidzCi1zZWN1cml0eSBpZGVudGl0eSBpcyB0byBiZSB1c2VkIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZQotbWV0aG9kcyBvZiB0aGUgZW50ZXJwcmlzZSBiZWFuIG9yIHdoZXRoZXIgYSBzcGVjaWZpYyBydW4tYXMKLWlkZW50aXR5IGlzIHRvIGJlIHVzZWQuIEl0IGNvbnRhaW5zIGFuIG9wdGlvbmFsIGRlc2NyaXB0aW9uCi1hbmQgYSBzcGVjaWZpY2F0aW9uIG9mIHRoZSBzZWN1cml0eSBpZGVudGl0eSB0byBiZSB1c2VkLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDpjaG9pY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0idXNlLWNhbGxlci1pZGVudGl0eSIKLSAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVtcHR5VHlwZSI+Ci0gICAgICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgICAgIFRoZSB1c2UtY2FsbGVyLWlkZW50aXR5IGVsZW1lbnQgc3BlY2lmaWVzIHRoYXQKLSAgICAgICAgICAgIHRoZSBjYWxsZXIncyBzZWN1cml0eSBpZGVudGl0eSBiZSB1c2VkIGFzIHRoZQotICAgICAgICAgICAgc2VjdXJpdHkgaWRlbnRpdHkgZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlCi0gICAgICAgICAgICBlbnRlcnByaXNlIGJlYW4ncyBtZXRob2RzLgotCi0gICAgICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icnVuLWFzIgotICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cnVuLWFzVHlwZSIvPgotICAgICAgICA8L3hzZDpjaG9pY2U+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ic2VydmljZS1yZWZUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVEhJUyBJUyBBIFBMQUNFSE9MREVSIFRZUEUgd2hpY2ggd2lsbAotYmUgUkVQTEFDRUQuIEl0IHdpbGwgYmUgZGVmaW5lZCBiYXNlZCBvbgotZGVmaW5pdGlvbiB0byBiZSBzdXBwbGllZCBieSBKU1IxMDkuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgPC94c2Q6ZXh0ZW5zaW9uPgotICAgIDwveHNkOnNpbXBsZUNvbnRlbnQ+Ci08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9InNlc3Npb24tYmVhblR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgc2Vzc2lvbi1iZWFuVHlwZSBkZWNsYXJlcyBhbiBzZXNzaW9uIGJlYW4uIFRoZQotZGVjbGFyYXRpb24gY29uc2lzdHMgb2Y6Ci0KLSAgICAtIGFuIG9wdGlvbmFsIGRlc2NyaXB0aW9uCi0gICAgLSBhbiBvcHRpb25hbCBkaXNwbGF5IG5hbWUKLSAgICAtIGFuIG9wdGlvbmFsIGljb24gZWxlbWVudCB0aGF0IGNvbnRhaW5zIGEgc21hbGwgYW5kIGEgbGFyZ2UKLSAgICAgIGljb24gZmlsZSBuYW1lCi0gICAgLSBhIG5hbWUgYXNzaWduZWQgdG8gdGhlIGVudGVycHJpc2UgYmVhbgotICAgICAgaW4gdGhlIGRlcGxveW1lbnQgZGVzY3JpcHRpb24KLSAgICAtIHRoZSBuYW1lcyBvZiB0aGUgc2Vzc2lvbiBiZWFuJ3MgcmVtb3RlIGhvbWUgYW5kCi0gICAgICByZW1vdGUgaW50ZXJmYWNlcywgaWYgYW55Ci0gICAgLSB0aGUgbmFtZXMgb2YgdGhlIHNlc3Npb24gYmVhbidzIGxvY2FsIGhvbWUgYW5kCi0gICAgICBsb2NhbCBpbnRlcmZhY2VzLCBpZiBhbnkKLSAgICAtIHRoZSBuYW1lIG9mIHRoZSBzZXNzaW9uIGJlYW4ncyB3ZWIgc2VydmljZSBlbmRwb2ludAotICAgICAgaW50ZXJmYWNlLCBpZiBhbnkKLSAgICAtIHRoZSBzZXNzaW9uIGJlYW4ncyBpbXBsZW1lbnRhdGlvbiBjbGFzcwotICAgIC0gdGhlIHNlc3Npb24gYmVhbidzIHN0YXRlIG1hbmFnZW1lbnQgdHlwZQotICAgIC0gdGhlIHNlc3Npb24gYmVhbidzIHRyYW5zYWN0aW9uIG1hbmFnZW1lbnQgdHlwZQotICAgIC0gYW4gb3B0aW9uYWwgZGVjbGFyYXRpb24gb2YgdGhlIGJlYW4ncwotICAgICAgZW52aXJvbm1lbnQgZW50cmllcwotICAgIC0gYW4gb3B0aW9uYWwgZGVjbGFyYXRpb24gb2YgdGhlIGJlYW4ncyBFSkIgcmVmZXJlbmNlcwotICAgIC0gYW4gb3B0aW9uYWwgZGVjbGFyYXRpb24gb2YgdGhlIGJlYW4ncyBsb2NhbAotICAgICAgRUpCIHJlZmVyZW5jZXMKLSAgICAtIGFuIG9wdGlvbmFsIGRlY2xhcmF0aW9uIG9mIHRoZSBiZWFuJ3Mgd2ViCi0gICAgICBzZXJ2aWNlIHJlZmVyZW5jZXMKLSAgICAtIGFuIG9wdGlvbmFsIGRlY2xhcmF0aW9uIG9mIHRoZSBzZWN1cml0eSByb2xlCi0gICAgICByZWZlcmVuY2VzCi0gICAgLSBhbiBvcHRpb25hbCBkZWNsYXJhdGlvbiBvZiB0aGUgc2VjdXJpdHkgaWRlbnRpdHkKLSAgICAgIHRvIGJlIHVzZWQgZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIGJlYW4ncyBtZXRob2RzCi0gICAgLSBhbiBvcHRpb25hbCBkZWNsYXJhdGlvbiBvZiB0aGUgYmVhbidzIHJlc291cmNlCi0gICAgICBtYW5hZ2VyIGNvbm5lY3Rpb24gZmFjdG9yeSByZWZlcmVuY2VzCi0gICAgLSBhbiBvcHRpb25hbCBkZWNsYXJhdGlvbiBvZiB0aGUgYmVhbidzIHJlc291cmNlCi0gICAgICBlbnZpcm9ubWVudCByZWZlcmVuY2VzLgotICAgIC0gYW4gb3B0aW9uYWwgZGVjbGFyYXRpb24gb2YgdGhlIGJlYW4ncyBtZXNzYWdlCi0gICAgICBkZXN0aW5hdGlvbiByZWZlcmVuY2VzCi0gICAgLSBhbiBvcHRpb25hbCBkZWNsYXJhdGlvbiBkZXBsb3ltZW50IGV4dGVuc2lvbnMKLQotVGhlIGVsZW1lbnRzIHRoYXQgYXJlIG9wdGlvbmFsIGFyZSAib3B0aW9uYWwiIGluIHRoZSBzZW5zZQotdGhhdCB0aGV5IGFyZSBvbWl0dGVkIHdoZW4gaWYgbGlzdHMgcmVwcmVzZW50ZWQgYnkgdGhlbSBhcmUKLWVtcHR5LgotCi1FaXRoZXIgYm90aCB0aGUgbG9jYWwtaG9tZSBhbmQgdGhlIGxvY2FsIGVsZW1lbnRzIG9yIGJvdGgKLXRoZSBob21lIGFuZCB0aGUgcmVtb3RlIGVsZW1lbnRzIG11c3QgYmUgc3BlY2lmaWVkIGZvciB0aGUKLXNlc3Npb24gYmVhbi4KLQotVGhlIHNlcnZpY2UtZW5kcG9pbnQgZWxlbWVudCBtYXkgb25seSBiZSBzcGVjaWZpZWQgaWYgdGhlCi1iZWFuIGlzIGEgc3RhdGVsZXNzIHNlc3Npb24gYmVhbi4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkaXNwbGF5LW5hbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRpc3BsYXktbmFtZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaWNvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6aWNvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZWpiLW5hbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVqYi1uYW1lVHlwZSIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaG9tZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6aG9tZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJlbW90ZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cmVtb3RlVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWwtaG9tZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bG9jYWwtaG9tZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpsb2NhbFR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlcnZpY2UtZW5kcG9pbnQiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmZ1bGx5LXF1YWxpZmllZC1jbGFzc1R5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgc2VydmljZS1lbmRwb2ludCBlbGVtZW50IGNvbnRhaW5zIHRoZQotICAgICAgICBmdWxseS1xdWFsaWZpZWQgbmFtZSBvZiB0aGUgZW50ZXJwcmlzZSBiZWFuJ3Mgd2ViCi0gICAgICAgIHNlcnZpY2UgZW5kcG9pbnQgaW50ZXJmYWNlLiBUaGUgc2VydmljZS1lbmRwb2ludAotICAgICAgICBlbGVtZW50IG1heSBvbmx5IGJlIHNwZWNpZmllZCBmb3IgYSBzdGF0ZWxlc3MKLSAgICAgICAgc2Vzc2lvbiBiZWFuLiBUaGUgc3BlY2lmaWVkIGludGVyZmFjZSBtdXN0IGJlIGEKLSAgICAgICAgdmFsaWQgSkFYLVJQQyBzZXJ2aWNlIGVuZHBvaW50IGludGVyZmFjZS4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZWpiLWNsYXNzIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplamItY2xhc3NUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzZXNzaW9uLXR5cGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnNlc3Npb24tdHlwZVR5cGUiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InRyYW5zYWN0aW9uLXR5cGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnRyYW5zYWN0aW9uLXR5cGVUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJlbnYtZW50cnkiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVudi1lbnRyeVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZWpiLXJlZiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZWpiLXJlZlR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZWpiLWxvY2FsLXJlZiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZWpiLWxvY2FsLXJlZlR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ic2VydmljZS1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnNlcnZpY2UtcmVmVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzZWN1cml0eS1yb2xlLXJlZiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c2VjdXJpdHktcm9sZS1yZWZUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlY3VyaXR5LWlkZW50aXR5IgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpzZWN1cml0eS1pZGVudGl0eVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJlc291cmNlLXJlZiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cmVzb3VyY2UtcmVmVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyZXNvdXJjZS1lbnYtcmVmIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpyZXNvdXJjZS1lbnYtcmVmVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWZUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlcGxveW1lbnQtZXh0ZW5zaW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXBsb3ltZW50LWV4dGVuc2lvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0ic2Vzc2lvbi10eXBlVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBzZXNzaW9uLXR5cGVUeXBlIGRlc2NyaWJlcyB3aGV0aGVyIHRoZSBzZXNzaW9uIGJlYW4gaXMgYQotc3RhdGVmdWwgc2Vzc2lvbiBvciBzdGF0ZWxlc3Mgc2Vzc2lvbi4gSXQgaXMgdXNlZCBieQotc2Vzc2lvbi10eXBlIGVsZW1lbnRzLgotCi1UaGUgdmFsdWUgbXVzdCBiZSBvbmUgb2YgdGhlIHR3byBmb2xsb3dpbmc6Ci0KLSAgICBTdGF0ZWZ1bAotICAgIFN0YXRlbGVzcwotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpzdHJpbmciPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZWZ1bCIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZWxlc3MiLz4KLSAgICA8L3hzZDpyZXN0cmljdGlvbj4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0idHJhbnMtYXR0cmlidXRlVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSB0cmFucy1hdHRyaWJ1dGVUeXBlIHNwZWNpZmllcyBob3cgdGhlIGNvbnRhaW5lciBtdXN0Ci1tYW5hZ2UgdGhlIHRyYW5zYWN0aW9uIGJvdW5kYXJpZXMgd2hlbiBkZWxlZ2F0aW5nIGEgbWV0aG9kCi1pbnZvY2F0aW9uIHRvIGFuIGVudGVycHJpc2UgYmVhbidzIGJ1c2luZXNzIG1ldGhvZC4KLQotVGhlIHZhbHVlIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0KLSAgICBOb3RTdXBwb3J0ZWQKLSAgICBTdXBwb3J0cwotICAgIFJlcXVpcmVkCi0gICAgUmVxdWlyZXNOZXcKLSAgICBNYW5kYXRvcnkKLSAgICBOZXZlcgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpzdHJpbmciPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RTdXBwb3J0ZWQiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcG9ydHMiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWlyZWQiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWlyZXNOZXciLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFuZGF0b3J5Ii8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ldmVyIi8+Ci0gICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9InRyYW5zYWN0aW9uLXR5cGVUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIHRyYW5zYWN0aW9uLXR5cGVUeXBlIHNwZWNpZmllcyBhbiBlbnRlcnByaXNlIGJlYW4ncwotdHJhbnNhY3Rpb24gbWFuYWdlbWVudCB0eXBlLgotCi1UaGUgdHJhbnNhY3Rpb24tdHlwZSBtdXN0IGJlIG9uZSBvZiB0aGUgdHdvIGZvbGxvd2luZzoKLQotICAgIEJlYW4KLSAgICBDb250YWluZXIKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImoyZWU6c3RyaW5nIj4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVhbiIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXIiLz4KLSAgICA8L3hzZDpyZXN0cmljdGlvbj4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPC94c2Q6c2NoZW1hPgotCmRpZmYgLS1naXQgYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9qMmVlL2oyZWVfMV80LnhzZCBiL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2oyZWUvajJlZV8xXzQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzE0MjcyLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2oyZWUvajJlZV8xXzQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTQwNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLUdlbmVyYXRlZCBieSBVbWl0IFlhbGNpbmFscCBNYXJjaCAyMDAyLS0+Ci08eHNkOnNjaGVtYQotICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiCi0gICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiCi0gICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotICAgICBhdHRyaWJ1dGVGb3JtRGVmYXVsdD0idW5xdWFsaWZpZWQiCi0gICAgIHZlcnNpb249IjEuNCI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci1AKCMpajJlZV8xXzQueHNkcwkxLjIwIDAyLzA3LzEyCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1Db3B5cmlnaHQgMjAwMiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCA5MDEgU2FuIEFudG9uaW8KLVJvYWQsIFBhbG8gQWx0bywgQ2FsaWZvcm5pYSA5NDMwMywgVS5TLkEuIEFsbCByaWdodHMKLXJlc2VydmVkLgotCi1TdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGhhcyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzCi1yZWxhdGluZyB0byB0ZWNobm9sb2d5IGRlc2NyaWJlZCBpbiB0aGlzIGRvY3VtZW50LiBJbgotcGFydGljdWxhciwgYW5kIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlc2UgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgbWF5IGluY2x1ZGUgb25lIG9yIG1vcmUgb2YgdGhlIFUuUy4gcGF0ZW50cwotbGlzdGVkIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9wYXRlbnRzIGFuZCBvbmUgb3IgbW9yZQotYWRkaXRpb25hbCBwYXRlbnRzIG9yIHBlbmRpbmcgcGF0ZW50IGFwcGxpY2F0aW9ucyBpbiB0aGUKLVUuUy4gYW5kIG90aGVyIGNvdW50cmllcy4KLQotVGhpcyBkb2N1bWVudCBhbmQgdGhlIHRlY2hub2xvZ3kgd2hpY2ggaXQgZGVzY3JpYmVzIGFyZQotZGlzdHJpYnV0ZWQgdW5kZXIgbGljZW5zZXMgcmVzdHJpY3RpbmcgdGhlaXIgdXNlLCBjb3B5aW5nLAotZGlzdHJpYnV0aW9uLCBhbmQgZGVjb21waWxhdGlvbi4gTm8gcGFydCBvZiB0aGlzIGRvY3VtZW50Ci1tYXkgYmUgcmVwcm9kdWNlZCBpbiBhbnkgZm9ybSBieSBhbnkgbWVhbnMgd2l0aG91dCBwcmlvcgotd3JpdHRlbiBhdXRob3JpemF0aW9uIG9mIFN1biBhbmQgaXRzIGxpY2Vuc29ycywgaWYgYW55LgotCi1UaGlyZC1wYXJ0eSBzb2Z0d2FyZSwgaW5jbHVkaW5nIGZvbnQgdGVjaG5vbG9neSwgaXMKLWNvcHlyaWdodGVkIGFuZCBsaWNlbnNlZCBmcm9tIFN1biBzdXBwbGllcnMuCi0KLVN1biwgU3VuIE1pY3Jvc3lzdGVtcywgdGhlIFN1biBsb2dvLCBTb2xhcmlzLCBKYXZhLCBKMkVFLAotSmF2YVNlcnZlciBQYWdlcywgRW50ZXJwcmlzZSBKYXZhQmVhbnMgYW5kIHRoZSBKYXZhIENvZmZlZQotQ3VwIGxvZ28gYXJlIHRyYWRlbWFya3Mgb3IgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9mIFN1bgotTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVLlMuIGFuZCBvdGhlciBjb3VudHJpZXMuCi0KLUZlZGVyYWwgQWNxdWlzaXRpb25zOiBDb21tZXJjaWFsIFNvZnR3YXJlIC0gR292ZXJubWVudCBVc2VycwotU3ViamVjdCB0byBTdGFuZGFyZCBMaWNlbnNlIFRlcm1zIGFuZCBDb25kaXRpb25zLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIHRoYXQgYXBwZWFyIGluIHRoZSBjb21tb24KLXNoYXJlYWJsZSBzY2hlbWEocykgb2YgSjJFRSBkZXBsb3ltZW50IGRlc2NyaXB0b3JzIHNob3VsZCBiZQotaW50ZXJwcmV0ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBjb250ZXh0IHRoZXkgYXJlIGluY2x1ZGVkOgotCi1EZXBsb3ltZW50IENvbXBvbmVudCBtYXkgaW5kaWNhdGUgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0gICAgajJlZSBhcHBsaWNhdGlvbjsKLSAgICBhcHBsaWNhdGlvbiBjbGllbnQ7Ci0gICAgd2ViIGFwcGxpY2F0aW9uOwotICAgIGVudGVycHJpc2UgYmVhbjsKLSAgICByZXNvdXJjZSBhZGFwdGVyOwotCi1EZXBsb3ltZW50IEZpbGUgbWF5IGluZGljYXRlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotICAgIGVhciBmaWxlOwotICAgIHdhciBmaWxlOwotICAgIGphciBmaWxlOwotICAgIHJhciBmaWxlOwotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCi0gICAgICAgICAgICBzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIi8+Ci0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImRlcGxveW1lbnQtZXh0ZW5zaW9uVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBkZXBsb3ltZW50LWV4dGVuc2lvblR5cGUgaXMgdXNlZCB0byBpbmRpY2F0ZQotZXh0ZW5zaW9ucyB0byB0aGUgc3BlY2lmaWMgRGVwbG95bWVudCBDb21wb25lbnQuCi0KLUl0IGlzIHVzZWQgYnkgZGVwbG95bWVudC1leHRlbnNpb24gZWxlbWVudHMgdG8gZGVzaWduYXRlIGFuCi1leHRlbnNpb24gYmxvY2sgdGhhdCBpcyB0YXJnZXRlZCB0byBhIHNwZWNpZmljIGV4dGVuc2lvbgotZGVzaWduYXRlZCBieSBhIHNldCBvZiBleHRlbnNpb24gZWxlbWVudHMgdGhhdCBhcmUgZGVjbGFyZWQKLWJ5IGEgbmFtZXNwYWNlLiBUaGUgbmFtZXNwYWNlIGlkZW50aWZpZXMgdGhlIGV4dGVuc2lvbiB0bwotdGhlIGRlcGxveW1lbnQgdG9vbCB0aGF0IHByb2Nlc3NlcyB0aGUgZXh0ZW5zaW9uLgotCi1UaGUgbXVzdFVuZGVyc3RhbmQgYXR0cmlidXRlIGlzIHByb3ZpZGVkIGJ5IHRoZSBBcHBsaWNhdGlvbgotQXNzZW1ibGVyIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGV4dGVuc2lvbiBkZXNjcmliZWQgaXMgYW4KLWVzc2VudGlhbCBleHRlbnNpb24gdGhhdCBtdXN0IGV4aXN0IGluIHRoZSBjb250YWluZXIuIElmCi1tdXN0VW5kZXJzdGFuZCBpcyAidHJ1ZSIsIHRoZSBkZXBsb3ltZW50IHRvb2wgbXVzdCBpbmRpY2F0ZQotYW4gZXJyb3Igd2hlbiBwcm9jZXNzaW5nIGEgZGVwbG95bWVudC1leHRlbnNpb24gZWxlbWVudCB3aXRoCi1hIG5hbWVzcGFjZSBpdCBkb2VzIG5vdCB1bmRlcnN0YW5kLiAgRXh0ZW5zaW9ucyB0aGF0IGFyZSBub3QKLWVzc2VudGlhbCBhcmUgZGVjbGFyZWQgYnkgZGVmYXVsdCBhcyBvcHRpb25hbCBleHRlbnNpb25zCi10aGF0IG5lZWQgbm90IGJlIHByb3ZpZGVkIGJ5IGEgY29udGFpbmVyLiAgQXBwbGljYXRpb25zIHRoYXQKLXVzZSBzdWNoIGV4dGVuc2lvbnMgYXJlIHBvcnRhYmxlIHRvIG90aGVyIGNvbnRhaW5lcnMgYmVjYXVzZQotZGVwbG95bWVudCB0b29scyB3aWxsIGlnbm9yZSBleHRlbnNpb25zIHRoYXQgdGhleSBkb24ndAotc3VwcG9ydC4KLQotVGhlIHR5cGUgb2YgdGhlIGV4dGVuc2lvbi1lbGVtZW50IGlzIGFic3RyYWN0LiBUaGVyZWZvcmUsIGEKLWNvbmNyZXRlIHR5cGUgbXVzdCBiZSBzcGVjaWZpZWQgYnkgdGhlIGRlcGxveW1lbnQgZGVzY3JpcHRvcgotdXNpbmcgeHNpOnR5cGUgYXR0cmlidXRlIGZvciBlYWNoIGV4dGVuc2lvbi1lbGVtZW50LgotCi1UaGUgdmFsdWUgb2YgdGhlIG11c3RVbmRlcnN0YW5kIGF0dHJpYnV0ZSBpcyAiZmFsc2UiCi1ieSBkZWZhdWx0LgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9ImV4dGVuc2lvbi1lbGVtZW50IgotICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmV4dGVuc2libGVUeXBlIgotICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0ibmFtZXNwYWNlIgotICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiCi0gICAgICAgICAgICAgICAgICAgdHlwZT0ieHNkOmFueVVSSSIvPgotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9Im11c3RVbmRlcnN0YW5kIgotICAgICAgICAgICAgICAgICAgIHR5cGU9InhzZDpib29sZWFuIi8+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iZGVzY3JpcHRpb25UeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGRlc2NyaXB0aW9uIHR5cGUgaXMgdXNlZCBieSBhIGRlc2NyaXB0aW9uIGVsZW1lbnQgdG8KLXByb3ZpZGUgdGV4dCBkZXNjcmliaW5nIHRoZSBwYXJlbnQgZWxlbWVudC4gIFRoZSBlbGVtZW50cwotdGhhdCB1c2UgdGhpcyB0eXBlIHNob3VsZCBpbmNsdWRlIGFueSBpbmZvcm1hdGlvbiB0aGF0IHRoZQotRGVwbG95bWVudCBDb21wb25lbnQncyBEZXBsb3ltZW50IEZpbGUgZmlsZSBwcm9kdWNlciB3YW50cwotdG8gcHJvdmlkZSB0byB0aGUgY29uc3VtZXIgb2YgdGhlIERlcGxveW1lbnQgQ29tcG9uZW50J3MKLURlcGxveW1lbnQgRmlsZSAoaS5lLiwgdG8gdGhlIERlcGxveWVyKS4gVHlwaWNhbGx5LCB0aGUKLXRvb2xzIHVzZWQgYnkgc3VjaCBhIERlcGxveW1lbnQgRmlsZSBjb25zdW1lciB3aWxsIGRpc3BsYXkKLXRoZSBkZXNjcmlwdGlvbiB3aGVuIHByb2Nlc3NpbmcgdGhlIHBhcmVudCBlbGVtZW50IHRoYXQKLWNvbnRhaW5zIHRoZSBkZXNjcmlwdGlvbi4KLQotVGhlIGxhbmcgYXR0cmlidXRlIGRlZmluZXMgdGhlIGxhbmd1YWdlIHRoYXQgdGhlCi1kZXNjcmlwdGlvbiBpcyBwcm92aWRlZCBpbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgImVuIiAoRW5nbGlzaCkuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgPHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6bGFuZyIvPgotICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgPC94c2Q6c2ltcGxlQ29udGVudD4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9ImRld2V5LXZlcnNpb25UeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhpcyB0eXBlIGRlZmluZXMgYSBkZXdleSBkZWNpbWFsIHdoaWNoIGlzIHVzZWQKLXRvIGRlc2NyaWJlIHZlcnNpb25zIG9mIGRvY3VtZW50cy4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpkZWNpbWFsIj4KLSAgICAgICAgPHhzZDp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIvPgotICAgIDwveHNkOnJlc3RyaWN0aW9uPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iZGlzcGxheS1uYW1lVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBkaXNwbGF5LW5hbWUgdHlwZSBjb250YWlucyBhIHNob3J0IG5hbWUgdGhhdCBpcyBpbnRlbmRlZAotdG8gYmUgZGlzcGxheWVkIGJ5IHRvb2xzLiBJdCBpcyB1c2VkIGJ5IGRpc3BsYXktbmFtZQotZWxlbWVudHMuICBUaGUgZGlzcGxheSBuYW1lIG5lZWQgbm90IGJlIHVuaXF1ZS4KLQotRXhhbXBsZToKLQotLi4uCi0gICA8ZGlzcGxheS1uYW1lIHhtbDpsYW5nPSJlbiI+RW1wbG95ZWUgU2VsZiBTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0KLVRoZSB2YWx1ZSBvZiB0aGUgeG1sOmxhbmcgYXR0cmlidXRlIGlzICJlbiIgKEVuZ2xpc2gpIGJ5IGRlZmF1bHQuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOmxhbmciLz4KLSAgICAgICAgPC94c2Q6ZXh0ZW5zaW9uPgotICAgIDwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJlamItbGlua1R5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgZWpiLWxpbmtUeXBlIGlzIHVzZWQgYnkgZWpiLWxpbmsKLWVsZW1lbnRzIGluIHRoZSBlamItcmVmIG9yIGVqYi1sb2NhbC1yZWYgZWxlbWVudHMgdG8gc3BlY2lmeQotdGhhdCBhbiBFSkIgcmVmZXJlbmNlIGlzIGxpbmtlZCB0byBlbnRlcnByaXNlIGJlYW4uCi0KLVRoZSB2YWx1ZSBvZiB0aGUgZWpiLWxpbmsgZWxlbWVudCBtdXN0IGJlIHRoZSBlamItbmFtZSBvZiBhbgotZW50ZXJwcmlzZSBiZWFuIGluIHRoZSBzYW1lIGVqYi1qYXIgZmlsZSBvciBpbiBhbm90aGVyIGVqYi1qYXIKLWZpbGUgaW4gdGhlIHNhbWUgSjJFRSBhcHBsaWNhdGlvbiB1bml0LgotCi1BbHRlcm5hdGl2ZWx5LCB0aGUgbmFtZSBpbiB0aGUgZWpiLWxpbmsgZWxlbWVudCBtYXkgYmUgY29tcG9zZWQgb2YgYQotcGF0aCBuYW1lIHNwZWNpZnlpbmcgdGhlIGVqYi1qYXIgY29udGFpbmluZyB0aGUgcmVmZXJlbmNlZCBlbnRlcnByaXNlCi1iZWFuIHdpdGggdGhlIGVqYi1uYW1lIG9mIHRoZSB0YXJnZXQgYmVhbiBhcHBlbmRlZCBhbmQgc2VwYXJhdGVkIGZyb20KLXRoZSBwYXRoIG5hbWUgYnkgIiMiLiAgVGhlIHBhdGggbmFtZSBpcyByZWxhdGl2ZSB0byB0aGUgRGVwbG95bWVudCBGaWxlCi1jb250YWluaW5nIERlcGxveW1lbnQgQ29tcG9uZW50IHRoYXQgaXMgcmVmZXJlbmNpbmcgdGhlIGVudGVycHJpc2UgYmVhbi4KLVRoaXMgYWxsb3dzIG11bHRpcGxlIGVudGVycHJpc2UgYmVhbnMgd2l0aCB0aGUgc2FtZSBlamItbmFtZSB0byBiZQotdW5pcXVlbHkgaWRlbnRpZmllZC4KLQotRXhhbXBsZXM6Ci0KLSAgICA8ZWpiLWxpbms+RW1wbG95ZWVSZWNvcmQ8L2VqYi1saW5rPgotCi0gICAgPGVqYi1saW5rPi4uL3Byb2R1Y3RzL3Byb2R1Y3QuamFyI1Byb2R1Y3RFSkI8L2VqYi1saW5rPgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpzdHJpbmciLz4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImVqYi1sb2NhbC1yZWZUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGVqYi1sb2NhbC1yZWZUeXBlIGlzIHVzZWQgYnkgZWpiLWxvY2FsLXJlZiBlbGVtZW50cyBmb3IKLXRoZSBkZWNsYXJhdGlvbiBvZiBhIHJlZmVyZW5jZSB0byBhbiBlbnRlcnByaXNlIGJlYW4ncyBsb2NhbAotaG9tZS4gVGhlIGRlY2xhcmF0aW9uIGNvbnNpc3RzIG9mOgotCi0gICAgLSBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbgotICAgIC0gdGhlIEVKQiByZWZlcmVuY2UgbmFtZSB1c2VkIGluIHRoZSBjb2RlIG9mIHRoZSBEZXBsb3ltZW50Ci0gICAgICBDb21wb25lbnQgdGhhdCdzIHJlZmVyZW5jaW5nIHRoZSBlbnRlcnByaXNlIGJlYW4KLSAgICAtIHRoZSBleHBlY3RlZCB0eXBlIG9mIHRoZSByZWZlcmVuY2VkIGVudGVycHJpc2UgYmVhbgotICAgIC0gdGhlIGV4cGVjdGVkIGxvY2FsIGhvbWUgYW5kIGxvY2FsIGludGVyZmFjZXMgb2YgdGhlCi0gICAgICByZWZlcmVuY2VkIGVudGVycHJpc2UgYmVhbgotICAgIC0gb3B0aW9uYWwgZWpiLWxpbmsgaW5mb3JtYXRpb24sIHVzZWQgdG8gc3BlY2lmeSB0aGUKLSAgICAgIHJlZmVyZW5jZWQgZW50ZXJwcmlzZSBiZWFuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXNjcmlwdGlvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZWpiLXJlZi1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplamItcmVmLW5hbWVUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJlamItcmVmLXR5cGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVqYi1yZWYtdHlwZVR5cGUiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsLWhvbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmxvY2FsLWhvbWVUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbCIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bG9jYWxUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJlamItbGluayIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZWpiLWxpbmtUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJlamItcmVmLW5hbWVUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGVqYi1yZWYtbmFtZSBlbGVtZW50IGNvbnRhaW5zIHRoZSBuYW1lIG9mIGFuIEVKQgotcmVmZXJlbmNlLiBUaGUgRUpCIHJlZmVyZW5jZSBpcyBhbiBlbnRyeSBpbiB0aGUKLURlcGxveW1lbnQgQ29tcG9uZW50J3MgZW52aXJvbm1lbnQgYW5kIGlzIHJlbGF0aXZlIHRvIHRoZQotamF2YTpjb21wL2VudiBjb250ZXh0LiAgVGhlIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZQotRGVwbG95bWVudCBDb21wb25lbnQuCi0KLUl0IGlzIHJlY29tbWVuZGVkIHRoYXQgbmFtZSBpcyBwcmVmaXhlZCB3aXRoICJlamIvIi4KLQotRXhhbXBsZToKLQotPGVqYi1yZWYtbmFtZT5lamIvUGF5cm9sbDwvZWpiLXJlZi1uYW1lPgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpqbmRpLW5hbWVUeXBlIi8+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9ImVqYi1yZWYtdHlwZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgZWpiLXJlZi10eXBlVHlwZSBjb250YWlucyB0aGUgZXhwZWN0ZWQgdHlwZSBvZiB0aGUKLXJlZmVyZW5jZWQgZW50ZXJwcmlzZSBiZWFuLgotCi1UaGUgZWpiLXJlZi10eXBlIGRlc2lnbmF0ZXMgYSB2YWx1ZQotdGhhdCBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotCi0gICAgRW50aXR5Ci0gICAgU2Vzc2lvbgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpzdHJpbmciPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbnRpdHkiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vzc2lvbiIvPgotICAgIDwveHNkOnJlc3RyaWN0aW9uPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iZWpiLXJlZlR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgZWpiLXJlZlR5cGUgaXMgdXNlZCBieSBlamItcmVmIGVsZW1lbnRzIGZvciB0aGUKLWRlY2xhcmF0aW9uIG9mIGEgcmVmZXJlbmNlIHRvIGFuIGVudGVycHJpc2UgYmVhbidzIGhvbWUuIFRoZQotZGVjbGFyYXRpb24gY29uc2lzdHMgb2Y6Ci0KLSAgICAtIGFuIG9wdGlvbmFsIGRlc2NyaXB0aW9uCi0gICAgLSB0aGUgRUpCIHJlZmVyZW5jZSBuYW1lIHVzZWQgaW4gdGhlIGNvZGUgb2YKLSAgICAgIHRoZSBEZXBsb3ltZW50IENvbXBvbmVudCB0aGF0J3MgcmVmZXJlbmNpbmcgdGhlIGVudGVycHJpc2UKLSAgICAgIGJlYW4KLSAgICAtIHRoZSBleHBlY3RlZCB0eXBlIG9mIHRoZSByZWZlcmVuY2VkIGVudGVycHJpc2UgYmVhbgotICAgIC0gdGhlIGV4cGVjdGVkIGhvbWUgYW5kIHJlbW90ZSBpbnRlcmZhY2VzIG9mIHRoZSByZWZlcmVuY2VkCi0gICAgICBlbnRlcnByaXNlIGJlYW4KLSAgICAtIG9wdGlvbmFsIGVqYi1saW5rIGluZm9ybWF0aW9uLCB1c2VkIHRvIHNwZWNpZnkgdGhlCi0gICAgICByZWZlcmVuY2VkIGVudGVycHJpc2UgYmVhbgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVqYi1yZWYtbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZWpiLXJlZi1uYW1lVHlwZSIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZWpiLXJlZi10eXBlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplamItcmVmLXR5cGVUeXBlIi8+Ci0KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImhvbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmhvbWVUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyZW1vdGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnJlbW90ZVR5cGUiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVqYi1saW5rIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplamItbGlua1R5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJlbXB0eVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGlzIHR5cGUgaXMgdXNlZCB0byBkZXNpZ25hdGUgYW4gZW1wdHkKLWVsZW1lbnQgd2hlbiB1c2VkLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJlbnYtZW50cnktdHlwZS12YWx1ZXNUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhpcyB0eXBlIGNvbnRhaW5zIHRoZSBmdWxseS1xdWFsaWZpZWQgSmF2YSB0eXBlIG9mIHRoZQotZW52aXJvbm1lbnQgZW50cnkgdmFsdWUgdGhhdCBpcyBleHBlY3RlZCBieSB0aGUKLWFwcGxpY2F0aW9uJ3MgY29kZS4KLQotVGhlIGZvbGxvd2luZyBhcmUgdGhlIGxlZ2FsIHZhbHVlcyBvZiBlbnYtZW50cnktdHlwZS12YWx1ZXNUeXBlOgotCi0gICAgamF2YS5sYW5nLkJvb2xlYW4KLSAgICBqYXZhLmxhbmcuQnl0ZQotICAgIGphdmEubGFuZy5DaGFyYWN0ZXIKLSAgICBqYXZhLmxhbmcuU3RyaW5nCi0gICAgamF2YS5sYW5nLlNob3J0Ci0gICAgamF2YS5sYW5nLkludGVnZXIKLSAgICBqYXZhLmxhbmcuTG9uZwotICAgIGphdmEubGFuZy5GbG9hdAotICAgIGphdmEubGFuZy5Eb3VibGUKLQotRXhhbXBsZToKLQotPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5Cb29sZWFuPC9lbnYtZW50cnktdHlwZT4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImoyZWU6c3RyaW5nIj4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iamF2YS5sYW5nLkJvb2xlYW4iLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iamF2YS5sYW5nLkJ5dGUiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iamF2YS5sYW5nLkNoYXJhY3RlciIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJqYXZhLmxhbmcuU3RyaW5nIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImphdmEubGFuZy5TaG9ydCIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJqYXZhLmxhbmcuSW50ZWdlciIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJqYXZhLmxhbmcuTG9uZyIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJqYXZhLmxhbmcuRmxvYXQiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iamF2YS5sYW5nLkRvdWJsZSIvPgotICAgIDwveHNkOnJlc3RyaWN0aW9uPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iZW52LWVudHJ5VHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBlbnYtZW50cnlUeXBlIGlzIHVzZWQgdG8gZGVjbGFyZSBhbiBhcHBsaWNhdGlvbidzCi1lbnZpcm9ubWVudCBlbnRyeS4gVGhlIGRlY2xhcmF0aW9uIGNvbnNpc3RzIG9mIGFuIG9wdGlvbmFsCi1kZXNjcmlwdGlvbiwgdGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IGVudHJ5LCBhbmQgYW4KLW9wdGlvbmFsIHZhbHVlLiAgSWYgYSB2YWx1ZSBpcyBub3Qgc3BlY2lmaWVkLCBvbmUgbXVzdCBiZQotc3VwcGxpZWQgZHVyaW5nIGRlcGxveW1lbnQuCi0KLUl0IGlzIHVzZWQgYnkgZW52LWVudHJ5IGVsZW1lbnRzLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVudi1lbnRyeS1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpqbmRpLW5hbWVUeXBlIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGVudi1lbnRyeS1uYW1lIGVsZW1lbnQgY29udGFpbnMgdGhlIG5hbWUgb2YgYQotICAgICAgICBEZXBsb3ltZW50IENvbXBvbmVudCdzIGVudmlyb25tZW50IGVudHJ5LiAgVGhlIG5hbWUKLSAgICAgICAgaXMgYSBKTkRJIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGphdmE6Y29tcC9lbnYKLSAgICAgICAgY29udGV4dC4gIFRoZSBuYW1lIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhCi0gICAgICAgIERlcGxveW1lbnQgQ29tcG9uZW50LiBUaGUgdW5pcXVlbmVzcwotICAgICAgICBjb25zdHJhaW50cyBtdXN0IGJlIGRlZmluZWQgd2l0aGluIHRoZSBkZWNsYXJlZAotICAgICAgICBjb250ZXh0LgotCi0gICAgICAgIEV4YW1wbGU6Ci0KLSAgICAgICAgPGVudi1lbnRyeS1uYW1lPm1pbkFtb3VudDwvZW52LWVudHJ5LW5hbWU+Ci0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLQotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZW52LWVudHJ5LXR5cGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVudi1lbnRyeS10eXBlLXZhbHVlc1R5cGUiLz4KLQotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZW52LWVudHJ5LXZhbHVlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0ieHNkOnN0cmluZyIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBlbnYtZW50cnktdmFsdWUgZGVzaWduYXRlcyB0aGUgdmFsdWUgb2YgYQotICAgICAgICBEZXBsb3ltZW50IENvbXBvbmVudCdzIGVudmlyb25tZW50IGVudHJ5LiBUaGUgdmFsdWUKLSAgICAgICAgbXVzdCBiZSBhIFN0cmluZyB0aGF0IGlzIHZhbGlkIGZvciB0aGUKLSAgICAgICAgY29uc3RydWN0b3Igb2YgdGhlIHNwZWNpZmllZCB0eXBlIHRoYXQgdGFrZXMgYQotICAgICAgICBzaW5nbGUgU3RyaW5nIHBhcmFtZXRlciwgb3IgZm9yIGphdmEubGFuZy5DaGFyYWN0ZXIsCi0gICAgICAgIGEgc2luZ2xlIGNoYXJhY3Rlci4KLQotICAgICAgICBFeGFtcGxlOgotCi0gICAgICAgIDxlbnYtZW50cnktdmFsdWU+MTAwLjAwPC9lbnYtZW50cnktdmFsdWU+Ci0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLQotICAgIDwveHNkOnNlcXVlbmNlPgotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJleHRlbnNpYmxlVHlwZSIgYWJzdHJhY3Q9InRydWUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgZXh0ZW5zaWJsZVR5cGUgaXMgYW4gYWJzdHJhY3QgYmFzZSB0eXBlIHdoaWNoIGlzIHVzZWQgdG8KLWRlZmluZSB0aGUgdHlwZSBvZiBleHRlbnNpb24tZWxlbWVudHMuIEluc3RhbmNlIGRvY3VtZW50cwotbXVzdCBzdWJzdGl0dXRlIGEga25vd24gdHlwZSB0byBkZWZpbmUgdGhlIGV4dGVuc2lvbiBieQotdXNpbmcgeHNpOnR5cGUgYXR0cmlidXRlIHRvIGRlZmluZSB0aGUgYWN0dWFsIHR5cGUgb2YKLWV4dGVuc2lvbi1lbGVtZW50cy4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0iZnVsbHktcXVhbGlmaWVkLWNsYXNzVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBlbGVtZW50cyB0aGF0IHVzZSB0aGlzIHR5cGUgZGVzaWduYXRlIHRoZSBuYW1lIG9mIGEKLUphdmEgY2xhc3Mgb3IgaW50ZXJmYWNlLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpzdHJpbmciLz4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0iZ2VuZXJpYy1ib29sZWFuVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoaXMgdHlwZSBkZWZpbmVzIGZvdXIgZGlmZmVyZW50IHZhbHVlcyB3aGljaCBjYW4gZGVzaWduYXRlCi1ib29sZWFuIHZhbHVlcy4gVGhpcyBpbmNsdWRlcyB2YWx1ZXMgeWVzIGFuZCBubyB3aGljaCBhcmUKLW5vdCBkZXNpZ25hdGVkIGJ5IHhzZDpib29sZWFuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InRydWUiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im5vIi8+Ci0gICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9ImhvbWVUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGhvbWVUeXBlIGRlZmluZXMgdGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lIG9mCi1hbiBlbnRlcnByaXNlIGJlYW4ncyBob21lIGludGVyZmFjZS4KLQotRXhhbXBsZToKLQotICAgIDxob21lPmNvbS5hYXJkdmFyay5wYXlyb2xsLlBheXJvbGxIb21lPC9ob21lPgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpmdWxseS1xdWFsaWZpZWQtY2xhc3NUeXBlIi8+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJpY29uVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBpY29uIHR5cGUgY29udGFpbnMgc21hbGwtaWNvbiBhbmQgbGFyZ2UtaWNvbiBlbGVtZW50cwotdGhhdCBzcGVjaWZ5IHRoZSBmaWxlIG5hbWVzIGZvciBzbWFsbCBhbmQgbGFyZ2UgR0lGIG9yCi1KUEVHIGljb24gaW1hZ2VzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBwYXJlbnQgZWxlbWVudCBpbiBhCi1HVUkgdG9vbC4KLQotVGhlIHhtbDpsYW5nIGF0dHJpYnV0ZSBkZWZpbmVzIHRoZSBsYW5ndWFnZSB0aGF0IHRoZQotaWNvbiBmaWxlIG5hbWVzIGFyZSBwcm92aWRlZCBpbi4gSXRzIHZhbHVlIGlzICJlbiIgKEVuZ2xpc2gpCi1ieSBkZWZhdWx0LgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzbWFsbC1pY29uIiB0eXBlPSJqMmVlOnBhdGhUeXBlIgotICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICBUaGUgc21hbGwtaWNvbiBlbGVtZW50IGNvbnRhaW5zIHRoZSBuYW1lIG9mIGEgZmlsZQotICAgICAgICBjb250YWluaW5nIGEgc21hbGwgKDE2IHggMTYpIGljb24gaW1hZ2UuIFRoZSBmaWxlCi0gICAgICAgIG5hbWUgaXMgYSByZWxhdGl2ZSBwYXRoIHdpdGhpbiB0aGUgRGVwbG95bWVudAotICAgICAgICBDb21wb25lbnQncyBEZXBsb3ltZW50IEZpbGUuCi0KLSAgICAgICAgVGhlIGltYWdlIG1heSBiZSBlaXRoZXIgaW4gdGhlIEpQRUcgb3IgR0lGIGZvcm1hdC4KLSAgICAgICAgVGhlIGljb24gY2FuIGJlIHVzZWQgYnkgdG9vbHMuCi0KLSAgICAgICAgRXhhbXBsZToKLQotICAgICAgICA8c21hbGwtaWNvbj5lbXBsb3llZS1zZXJ2aWNlLWljb24xNngxNi5qcGc8L3NtYWxsLWljb24+Ci0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJsYXJnZS1pY29uIiB0eXBlPSJqMmVlOnBhdGhUeXBlIgotICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBsYXJnZS1pY29uIGVsZW1lbnQgY29udGFpbnMgdGhlIG5hbWUgb2YgYSBmaWxlCi0gICAgICAgIGNvbnRhaW5pbmcgYSBsYXJnZQotICAgICAgICAoMzIgeCAzMikgaWNvbiBpbWFnZS4gVGhlIGZpbGUgbmFtZSBpcyBhIHJlbGF0aXZlCi0gICAgICAgIHBhdGggd2l0aGluIHRoZSBEZXBsb3ltZW50IENvbXBvbmVudCdzIERlcGxveW1lbnQKLSAgICAgICAgRmlsZS4KLQotICAgICAgICBUaGUgaW1hZ2UgbWF5IGJlIGVpdGhlciBpbiB0aGUgSlBFRyBvciBHSUYgZm9ybWF0LgotICAgICAgICBUaGUgaWNvbiBjYW4gYmUgdXNlZCBieSB0b29scy4KLQotICAgICAgICBFeGFtcGxlOgotCi0gICAgICAgIDxsYXJnZS1pY29uPmVtcGxveWVlLXNlcnZpY2UtaWNvbjMyeDMyLmpwZzwvbGFyZ2UtaWNvbj4KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLQotICAgIDwveHNkOnNlcXVlbmNlPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6bGFuZyIvPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0iamF2YS1pZGVudGlmaWVyVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBqYXZhLWlkZW50aWZpZXJUeXBlIGRlZmluZXMgYSBKYXZhIGlkZW50aWZpZXIuCi1UaGUgdXNlcnMgb2YgdGhpcyB0eXBlIHNob3VsZCBmdXJ0aGVyIHZlcmlmeSB0aGF0Ci10aGUgY29udGVudCBkb2VzIG5vdCBjb250YWluIEphdmEgcmVzZXJ2ZWQga2V5d29yZHMuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6cGF0dGVybiB2YWx1ZT0iKCR8X3xccHtMfSkoXHB7TH18XHB7TmR9fF98JCkqIi8+Ci0gICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9ImpuZGktbmFtZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgam5kaS1uYW1lVHlwZSB0eXBlIGRlc2lnbmF0ZXMgYSBKTkRJIG5hbWUgaW4gdGhlCi1EZXBsb3ltZW50IENvbXBvbmVudCdzIGVudmlyb25tZW50IGFuZCBpcyByZWxhdGl2ZSB0byB0aGUKLWphdmE6Y29tcC9lbnYgY29udGV4dC4gIEEgSk5ESSBuYW1lIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUKLURlcGxveW1lbnQgQ29tcG9uZW50LgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpzdHJpbmciLz4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0ibG9jYWwtaG9tZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgbG9jYWwtaG9tZVR5cGUgZGVmaW5lcyB0aGUgZnVsbHktcXVhbGlmaWVkCi1uYW1lIG9mIGFuIGVudGVycHJpc2UgYmVhbidzIGxvY2FsIGhvbWUgaW50ZXJmYWNlLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpmdWxseS1xdWFsaWZpZWQtY2xhc3NUeXBlIi8+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9ImxvY2FsVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBsb2NhbFR5cGUgZGVmaW5lcyB0aGUgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgYW4KLWVudGVycHJpc2UgYmVhbidzIGxvY2FsIGludGVyZmFjZS4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImoyZWU6ZnVsbHktcXVhbGlmaWVkLWNsYXNzVHlwZSIvPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJtZXNzYWdlLWRlc3RpbmF0aW9uLWxpbmtUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIG1lc3NhZ2UtZGVzdGluYXRpb24tbGlua1R5cGUgaXMgdXNlZCB0byBsaW5rIGEgbWVzc2FnZQotZGVzdGluYXRpb24gcmVmZXJlbmNlIG9yIG1lc3NhZ2UtZHJpdmVuIGJlYW4gdG8gYSBtZXNzYWdlCi1kZXN0aW5hdGlvbi4KLQotVGhlIEFzc2VtYmxlciBzZXRzIHRoZSB2YWx1ZSB0byByZWZsZWN0IHRoZSBmbG93IG9mIG1lc3NhZ2VzCi1iZXR3ZWVuIHByb2R1Y2VycyBhbmQgY29uc3VtZXJzIGluIHRoZSBhcHBsaWNhdGlvbi4KLQotVGhlIHZhbHVlIG11c3QgYmUgdGhlIG1lc3NhZ2UtZGVzdGluYXRpb24tbmFtZSBvZiBhIG1lc3NhZ2UKLWRlc3RpbmF0aW9uIGluIHRoZSBzYW1lIERlcGxveW1lbnQgRmlsZSBvciBpbiBhbm90aGVyCi1EZXBsb3ltZW50IEZpbGUgaW4gdGhlIHNhbWUgSjJFRSBhcHBsaWNhdGlvbiB1bml0LgotCi1BbHRlcm5hdGl2ZWx5LCB0aGUgdmFsdWUgbWF5IGJlIGNvbXBvc2VkIG9mIGEgcGF0aCBuYW1lCi1zcGVjaWZ5aW5nIGEgRGVwbG95bWVudCBGaWxlIGNvbnRhaW5pbmcgdGhlIHJlZmVyZW5jZWQKLW1lc3NhZ2UgZGVzdGluYXRpb24gd2l0aCB0aGUgbWVzc2FnZS1kZXN0aW5hdGlvbi1uYW1lIG9mIHRoZQotZGVzdGluYXRpb24gYXBwZW5kZWQgYW5kIHNlcGFyYXRlZCBmcm9tIHRoZSBwYXRoIG5hbWUgYnkKLSIjIi4gVGhlIHBhdGggbmFtZSBpcyByZWxhdGl2ZSB0byB0aGUgRGVwbG95bWVudCBGaWxlCi1jb250YWluaW5nIERlcGxveW1lbnQgQ29tcG9uZW50IHRoYXQgaXMgcmVmZXJlbmNpbmcgdGhlCi1tZXNzYWdlIGRlc3RpbmF0aW9uLiAgVGhpcyBhbGxvd3MgbXVsdGlwbGUgbWVzc2FnZQotZGVzdGluYXRpb25zIHdpdGggdGhlIHNhbWUgbmFtZSB0byBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpmdWxseS1xdWFsaWZpZWQtY2xhc3NUeXBlIi8+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZlR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgbWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYgZWxlbWVudCBjb250YWlucyBhIGRlY2xhcmF0aW9uCi1vZiBEZXBsb3ltZW50IENvbXBvbmVudCdzIHJlZmVyZW5jZSB0byBhIG1lc3NhZ2UgZGVzdGluYXRpb24KLWFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlIGluIERlcGxveW1lbnQgQ29tcG9uZW50J3MKLWVudmlyb25tZW50LiBJdCBjb25zaXN0cyBvZjoKLQotICAgICAgICAtIGFuIG9wdGlvbmFsIGRlc2NyaXB0aW9uCi0gICAgICAgIC0gdGhlIG1lc3NhZ2UgZGVzdGluYXRpb24gcmVmZXJlbmNlIG5hbWUKLSAgICAgICAgLSB0aGUgbWVzc2FnZSBkZXN0aW5hdGlvbiB0eXBlCi0gICAgICAgIC0gYSBzcGVjaWZpY2F0aW9uIGFzIHRvIHdoZXRoZXIgdGhlCi0gICAgICAgICAgZGVzdGluYXRpb24gaXMgdXNlZCBmb3IKLSAgICAgICAgICBjb25zdW1pbmcgb3IgcHJvZHVjaW5nIG1lc3NhZ2VzLCBvciBib3RoCi0gICAgICAgIC0gYSBsaW5rIHRvIHRoZSBtZXNzYWdlIGRlc3RpbmF0aW9uCi0KLUV4YW1wbGVzOgotCi08bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWY+Ci0gICAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lPmptcy9TdG9ja1F1ZXVlCi0gICAgICAgIDwvbWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT4KLSAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tdHlwZT5qYXZheC5qbXMuUXVldWUKLSAgICAgICAgPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+Ci0gICAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXVzYWdlPkNvbnN1bWVzCi0gICAgICAgIDwvbWVzc2FnZS1kZXN0aW5hdGlvbi11c2FnZT4KLSAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tbGluaz5Db3Jwb3JhdGVTdG9ja3MKLSAgICAgICAgPC9tZXNzYWdlLWRlc3RpbmF0aW9uLWxpbms+Ci08L21lc3NhZ2UtZGVzdGluYXRpb24tcmVmPgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpqbmRpLW5hbWVUeXBlIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWUgZWxlbWVudCBzcGVjaWZpZXMKLSAgICAgICAgdGhlIG5hbWUgb2YgYSBtZXNzYWdlIGRlc3RpbmF0aW9uIHJlZmVyZW5jZTsgaXRzCi0gICAgICAgIHZhbHVlIGlzIHRoZSBlbnZpcm9ubWVudCBlbnRyeSBuYW1lIHVzZWQgaW4KLSAgICAgICAgRGVwbG95bWVudCBDb21wb25lbnQgY29kZS4gIFRoZSBuYW1lIGlzIGEgSk5ESSBuYW1lCi0gICAgICAgIHJlbGF0aXZlIHRvIHRoZSBqYXZhOmNvbXAvZW52IGNvbnRleHQgYW5kIG11c3QgYmUKLSAgICAgICAgdW5pcXVlIHdpdGhpbiBhbiBlamItamFyIChmb3IgZW50ZXJwcmlzZSBiZWFucykgb3IgYQotICAgICAgICBEZXBsb3ltZW50IEZpbGUgKGZvciBvdGhlcnMpLgotICAgICAgICAlJSUKLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTptZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGVUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJtZXNzYWdlLWRlc3RpbmF0aW9uLXVzYWdlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTptZXNzYWdlLWRlc3RpbmF0aW9uLXVzYWdlVHlwZSIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibWVzc2FnZS1kZXN0aW5hdGlvbi1saW5rIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTptZXNzYWdlLWRlc3RpbmF0aW9uLWxpbmtUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJtZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGVUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIG1lc3NhZ2UtZGVzdGluYXRpb24tdHlwZVR5cGUgc3BlY2lmaWVzIHRoZSB0eXBlIG9mCi10aGUgZGVzdGluYXRpb24uIFRoZSB0eXBlIGlzIHNwZWNpZmllZCBieSB0aGUgSmF2YSBpbnRlcmZhY2UKLWV4cGVjdGVkIHRvIGJlIGltcGxlbWVudGVkIGJ5IHRoZSBkZXN0aW5hdGlvbi4KLQotRXhhbXBsZToKLQotIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+amF2YXguam1zLlF1ZXVlCi0gPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+Ci0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOmZ1bGx5LXF1YWxpZmllZC1jbGFzc1R5cGUiLz4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0ibWVzc2FnZS1kZXN0aW5hdGlvbi11c2FnZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgbWVzc2FnZS1kZXN0aW5hdGlvbi11c2FnZVR5cGUgc3BlY2lmaWVzIHRoZSB1c2Ugb2YgdGhlCi1tZXNzYWdlIGRlc3RpbmF0aW9uIGluZGljYXRlZCBieSB0aGUgcmVmZXJlbmNlLiAgVGhlIHZhbHVlCi1pbmRpY2F0ZXMgd2hldGhlciBtZXNzYWdlcyBhcmUgY29uc3VtZWQgZnJvbSB0aGUgbWVzc2FnZQotZGVzdGluYXRpb24sIHByb2R1Y2VkIGZvciB0aGUgZGVzdGluYXRpb24sIG9yIGJvdGguICBUaGUKLUFzc2VtYmxlciBtYWtlcyB1c2Ugb2YgdGhpcyBpbmZvcm1hdGlvbiBpbiBsaW5raW5nIHByb2R1Y2Vycwotb2YgYSBkZXN0aW5hdGlvbiB3aXRoIGl0cyBjb25zdW1lcnMuCi0KLVRoZSB2YWx1ZSBvZiB0aGUgbWVzc2FnZS1kZXN0aW5hdGlvbi11c2FnZSBlbGVtZW50IG11c3QgYmUKLW9uZSBvZiB0aGUgZm9sbG93aW5nOgotICAgIENvbnN1bWVzCi0gICAgUHJvZHVjZXMKLSAgICBDb25zdW1lc1Byb2R1Y2VzCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnN1bWVzIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y2VzIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnN1bWVzUHJvZHVjZXMiLz4KLSAgICA8L3hzZDpyZXN0cmljdGlvbj4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9Im1lc3NhZ2UtZGVzdGluYXRpb25UeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIG1lc3NhZ2UtZGVzdGluYXRpb25UeXBlIHNwZWNpZmllcyBhIG1lc3NhZ2UKLWRlc3RpbmF0aW9uLiBUaGUgbG9naWNhbCBkZXN0aW5hdGlvbiBkZXNjcmliZWQgYnkgdGhpcwotZWxlbWVudCBpcyBtYXBwZWQgdG8gYSBwaHlzaWNhbCBkZXN0aW5hdGlvbiBieSB0aGUgRGVwbG95ZXIuCi0KLVRoZSBtZXNzYWdlIGRlc3RpbmF0aW9uIGVsZW1lbnQgY29udGFpbnM6Ci0KLSAgICAgICAgLSBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbgotICAgICAgICAtIGFuIG9wdGlvbmFsIGRpc3BsYXktbmFtZQotICAgICAgICAtIGFuIG9wdGlvbmFsIGljb24KLSAgICAgICAgLSBhIG1lc3NhZ2UgZGVzdGluYXRpb24gbmFtZSB3aGljaCBtdXN0IGJlIHVuaXF1ZQotICAgICAgICAgIGFtb25nIG1lc3NhZ2UgZGVzdGluYXRpb24gbmFtZXMgd2l0aGluIHRoZSBzYW1lCi0gICAgICAgICAgRGVwbG95bWVudCBGaWxlLgotCi1FeGFtcGxlOgotCi08bWVzc2FnZS1kZXN0aW5hdGlvbj4KLSAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tbmFtZT5Db3Jwb3JhdGVTdG9ja3MKLSAgICAgICAgPC9tZXNzYWdlLWRlc3RpbmF0aW9uLW5hbWU+Ci08L21lc3NhZ2UtZGVzdGluYXRpb24+Ci0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRpc3BsYXktbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGlzcGxheS1uYW1lVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJpY29uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTppY29uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJtZXNzYWdlLWRlc3RpbmF0aW9uLW5hbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBtZXNzYWdlLWRlc3RpbmF0aW9uLW5hbWUgZWxlbWVudCBzcGVjaWZpZXMgYQotICAgICAgICBuYW1lIGZvciBhIG1lc3NhZ2UgZGVzdGluYXRpb24uICBUaGlzIG5hbWUgbXVzdCBiZQotICAgICAgICB1bmlxdWUgYW1vbmcgdGhlIG5hbWVzIG9mIG1lc3NhZ2UgZGVzdGluYXRpb25zCi0gICAgICAgIHdpdGhpbiB0aGUgRGVwbG95bWVudCBGaWxlLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0icGFyYW0tdmFsdWVUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhpcyB0eXBlIGlzIGEgZ2VuZXJhbCB0eXBlIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGVjbGFyZQotcGFyYW1ldGVyL3ZhbHVlIGxpc3RzLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InBhcmFtLW5hbWUiCi0gICAgICAgICAgICAgdHlwZT0iajJlZTpzdHJpbmciPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgcGFyYW0tbmFtZSBlbGVtZW50IGNvbnRhaW5zIHRoZSBuYW1lIG9mIGEKLSAgICAgICAgcGFyYW1ldGVyLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InBhcmFtLXZhbHVlIgotICAgICAgICAgICAgIHR5cGU9InhzZDpzdHJpbmciPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgcGFyYW0tdmFsdWUgZWxlbWVudCBjb250YWlucyB0aGUgdmFsdWUgb2YgYQotICAgICAgICBwYXJhbWV0ZXIuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9InBhdGhUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGVsZW1lbnRzIHRoYXQgdXNlIHRoaXMgdHlwZSBkZXNpZ25hdGUgZWl0aGVyIGEgcmVsYXRpdmUKLXBhdGggb3IgYW4gYWJzb2x1dGUgcGF0aCBzdGFydGluZyB3aXRoIGEgIi8iLgotCi1JbiBlbGVtZW50cyB0aGF0IHNwZWNpZnkgYSBwYXRobmFtZSB0byBhIGZpbGUgd2l0aGluIHRoZQotc2FtZSBEZXBsb3ltZW50IEZpbGUsIHJlbGF0aXZlIGZpbGVuYW1lcyAoaS5lLiwgdGhvc2Ugbm90Ci1zdGFydGluZyB3aXRoICIvIikgYXJlIGNvbnNpZGVyZWQgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YKLXRoZSBEZXBsb3ltZW50IEZpbGUncyBuYW1lc3BhY2UuICBBYnNvbHV0ZSBmaWxlbmFtZXMgKGkuZS4sCi10aG9zZSBzdGFydGluZyB3aXRoICIvIikgYWxzbyBzcGVjaWZ5IG5hbWVzIGluIHRoZSByb290IG9mCi10aGUgRGVwbG95bWVudCBGaWxlJ3MgbmFtZXNwYWNlLiAgSW4gZ2VuZXJhbCwgcmVsYXRpdmUgbmFtZXMKLWFyZSBwcmVmZXJyZWQuICBUaGUgZXhjZXB0aW9uIGlzIC53YXIgZmlsZXMgd2hlcmUgYWJzb2x1dGUKLW5hbWVzIGFyZSBwcmVmZXJyZWQgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIFNlcnZsZXQgQVBJLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpzdHJpbmciLz4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0icmVtb3RlVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSByZW1vdGUgZWxlbWVudCBjb250YWlucyB0aGUgZnVsbHktcXVhbGlmaWVkIG5hbWUKLW9mIHRoZSBlbnRlcnByaXNlIGJlYW4ncyByZW1vdGUgaW50ZXJmYWNlLgotCi1FeGFtcGxlOgotCi0gICAgPHJlbW90ZT5jb20ud29tYmF0LmVtcGwuRW1wbG95ZWVTZXJ2aWNlPC9yZW1vdGU+Ci0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOmZ1bGx5LXF1YWxpZmllZC1jbGFzc1R5cGUiLz4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0icmVzLWF1dGhUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIHJlcy1hdXRoVHlwZSBzcGVjaWZpZXMgd2hldGhlciB0aGUgRGVwbG95bWVudCBDb21wb25lbnQKLWNvZGUgc2lnbnMgb24gcHJvZ3JhbW1hdGljYWxseSB0byB0aGUgcmVzb3VyY2UgbWFuYWdlciwgb3IKLXdoZXRoZXIgdGhlIENvbnRhaW5lciB3aWxsIHNpZ24gb24gdG8gdGhlIHJlc291cmNlIG1hbmFnZXIKLW9uIGJlaGFsZiBvZiB0aGUgRGVwbG95bWVudCBDb21wb25lbnQuIEluIHRoZSBsYXR0ZXIgY2FzZSwKLXRoZSBDb250YWluZXIgdXNlcyBpbmZvcm1hdGlvbiB0aGF0IGlzIHN1cHBsaWVkIGJ5IHRoZQotRGVwbG95ZXIuCi0KLVRoZSB2YWx1ZSBtdXN0IGJlIG9uZSBvZiB0aGUgdHdvIGZvbGxvd2luZzoKLQotICAgIEFwcGxpY2F0aW9uCi0gICAgQ29udGFpbmVyCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2F0aW9uIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lciIvPgotICAgIDwveHNkOnJlc3RyaWN0aW9uPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJyZXMtc2hhcmluZy1zY29wZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgcmVzLXNoYXJpbmctc2NvcGUgdHlwZSBzcGVjaWZpZXMgd2hldGhlciBjb25uZWN0aW9ucwotb2J0YWluZWQgdGhyb3VnaCB0aGUgZ2l2ZW4gcmVzb3VyY2UgbWFuYWdlciBjb25uZWN0aW9uCi1mYWN0b3J5IHJlZmVyZW5jZSBjYW4gYmUgc2hhcmVkLiBUaGUgdmFsdWUsIGlmIHNwZWNpZmllZCwKLW11c3QgYmUgb25lIG9mIHRoZSB0d28gZm9sbG93aW5nOgotCi0gICAgU2hhcmVhYmxlCi0gICAgVW5zaGFyZWFibGUKLQotVGhlIGRlZmF1bHQgdmFsdWUgaXMgU2hhcmVhYmxlLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpzdHJpbmciPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGFyZWFibGUiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5zaGFyZWFibGUiLz4KLSAgICA8L3hzZDpyZXN0cmljdGlvbj4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9InJlc291cmNlLWVudi1yZWZUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIHJlc291cmNlLWVudi1yZWZUeXBlIGlzIHVzZWQgdG8gZGVmaW5lCi1yZXNvdXJjZS1lbnYtdHlwZSBlbGVtZW50cy4gIEl0IGNvbnRhaW5zIGEgZGVjbGFyYXRpb24gb2YgYQotRGVwbG95bWVudCBDb21wb25lbnQncyByZWZlcmVuY2UgdG8gYW4gYWRtaW5pc3RlcmVkIG9iamVjdAotYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UgaW4gdGhlIERlcGxveW1lbnQgQ29tcG9uZW50J3MKLWVudmlyb25tZW50LiAgSXQgY29uc2lzdHMgb2YgYW4gb3B0aW9uYWwgZGVzY3JpcHRpb24sIHRoZQotcmVzb3VyY2UgZW52aXJvbm1lbnQgcmVmZXJlbmNlIG5hbWUsIGFuZCBhbiBpbmRpY2F0aW9uIG9mCi10aGUgcmVzb3VyY2UgZW52aXJvbm1lbnQgcmVmZXJlbmNlIHR5cGUgZXhwZWN0ZWQgYnkgdGhlCi1EZXBsb3ltZW50IENvbXBvbmVudCBjb2RlLgotCi1FeGFtcGxlOgotCi08cmVzb3VyY2UtZW52LXJlZj4KLSAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmptcy9TdG9ja1F1ZXVlCi0gICAgPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0gICAgPHJlc291cmNlLWVudi1yZWYtdHlwZT5qYXZheC5qbXMuUXVldWUKLSAgICA8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KLTwvcmVzb3VyY2UtZW52LXJlZj4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyZXNvdXJjZS1lbnYtcmVmLW5hbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmpuZGktbmFtZVR5cGUiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgcmVzb3VyY2UtZW52LXJlZi1uYW1lIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBuYW1lCi0gICAgICAgIG9mIGEgcmVzb3VyY2UgZW52aXJvbm1lbnQgcmVmZXJlbmNlOyBpdHMgdmFsdWUgaXMKLSAgICAgICAgdGhlIGVudmlyb25tZW50IGVudHJ5IG5hbWUgdXNlZCBpbgotICAgICAgICB0aGUgRGVwbG95bWVudCBDb21wb25lbnQgY29kZS4gIFRoZSBuYW1lIGlzIGEgSk5ESQotICAgICAgICBuYW1lIHJlbGF0aXZlIHRvIHRoZSBqYXZhOmNvbXAvZW52IGNvbnRleHQgYW5kIG11c3QKLSAgICAgICAgYmUgdW5pcXVlIHdpdGhpbiBhIERlcGxveW1lbnQgQ29tcG9uZW50LgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJlc291cmNlLWVudi1yZWYtdHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZnVsbHktcXVhbGlmaWVkLWNsYXNzVHlwZSI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSByZXNvdXJjZS1lbnYtcmVmLXR5cGUgZWxlbWVudCBzcGVjaWZpZXMgdGhlIHR5cGUKLSAgICAgICAgb2YgYSByZXNvdXJjZSBlbnZpcm9ubWVudCByZWZlcmVuY2UuICBJdCBpcyB0aGUKLSAgICAgICAgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgYSBKYXZhIGxhbmd1YWdlIGNsYXNzIG9yCi0gICAgICAgIGludGVyZmFjZS4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotCi0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0icmVzb3VyY2UtcmVmVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSByZXNvdXJjZS1yZWZUeXBlIGNvbnRhaW5zIGEgZGVjbGFyYXRpb24gb2YgYQotRGVwbG95bWVudCBDb21wb25lbnQncyByZWZlcmVuY2UgdG8gYW4gZXh0ZXJuYWwgcmVzb3VyY2UuIEl0Ci1jb25zaXN0cyBvZiBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbiwgdGhlIHJlc291cmNlIG1hbmFnZXIKLWNvbm5lY3Rpb24gZmFjdG9yeSByZWZlcmVuY2UgbmFtZSwgdGhlIGluZGljYXRpb24gb2YgdGhlCi1yZXNvdXJjZSBtYW5hZ2VyIGNvbm5lY3Rpb24gZmFjdG9yeSB0eXBlIGV4cGVjdGVkIGJ5IHRoZQotRGVwbG95bWVudCBDb21wb25lbnQgY29kZSwgdGhlIHR5cGUgb2YgYXV0aGVudGljYXRpb24KLShBcHBsaWNhdGlvbiBvciBDb250YWluZXIpLCBhbmQgYW4gb3B0aW9uYWwgc3BlY2lmaWNhdGlvbiBvZgotdGhlIHNoYXJlYWJpbGl0eSBvZiBjb25uZWN0aW9ucyBvYnRhaW5lZCBmcm9tIHRoZSByZXNvdXJjZQotKFNoYXJlYWJsZSBvciBVbnNoYXJlYWJsZSkuCi0KLUV4YW1wbGU6Ci0KLTxyZXNvdXJjZS1yZWY+Ci0gICAgPHJlcy1yZWYtbmFtZT5qZGJjL0VtcGxveWVlQXBwREI8L3Jlcy1yZWYtbmFtZT4KLSAgICA8cmVzLXR5cGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L3Jlcy10eXBlPgotICAgIDxyZXMtYXV0aD5Db250YWluZXI8L3Jlcy1hdXRoPgotICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgotPC9yZXNvdXJjZS1yZWY+Ci0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXNjcmlwdGlvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icmVzLXJlZi1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpqbmRpLW5hbWVUeXBlIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIHJlcy1yZWYtbmFtZSBlbGVtZW50IHNwZWNpZmllcyB0aGUgbmFtZSBvZiBhCi0gICAgICAgIHJlc291cmNlIG1hbmFnZXIgY29ubmVjdGlvbiBmYWN0b3J5IHJlZmVyZW5jZS4KLSAgICAgICAgVGhlIG5hbWUgaXMgYSBKTkRJIG5hbWUgcmVsYXRpdmUgdG8gdGhlCi0gICAgICAgIGphdmE6Y29tcC9lbnYgY29udGV4dC4KLSAgICAgICAgVGhlIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGEgRGVwbG95bWVudCBGaWxlLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJlcy10eXBlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpmdWxseS1xdWFsaWZpZWQtY2xhc3NUeXBlIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIHJlcy10eXBlIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIHRoZSBkYXRhCi0gICAgICAgIHNvdXJjZS4gVGhlIHR5cGUgaXMgc3BlY2lmaWVkIGJ5IHRoZSBmdWxseSBxdWFsaWZpZWQKLSAgICAgICAgSmF2YSBsYW5ndWFnZSBjbGFzcyBvciBpbnRlcmZhY2UKLSAgICAgICAgZXhwZWN0ZWQgdG8gYmUgaW1wbGVtZW50ZWQgYnkgdGhlIGRhdGEgc291cmNlLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJlcy1hdXRoIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpyZXMtYXV0aFR5cGUiLz4KLQotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icmVzLXNoYXJpbmctc2NvcGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnJlcy1zaGFyaW5nLXNjb3BlVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0icm9sZS1uYW1lVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSByb2xlLW5hbWVUeXBlIGRlc2lnbmF0ZXMgdGhlIG5hbWUgb2YgYSBzZWN1cml0eSByb2xlLgotCi1UaGUgbmFtZSBtdXN0IGNvbmZvcm0gdG8gdGhlIGxleGljYWwgcnVsZXMgZm9yIGFuIE5NVE9LRU4uCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiIvPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0icnVuLWFzVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBydW4tYXNUeXBlIHNwZWNpZmllcyB0aGUgcnVuLWFzIGlkZW50aXR5IHRvIGJlCi11c2VkIGZvciB0aGUgZXhlY3V0aW9uIG9mIGEgY29tcG9uZW50LiBJdCBjb250YWlucyBhbgotb3B0aW9uYWwgZGVzY3JpcHRpb24sIGFuZCB0aGUgbmFtZSBvZiBhIHNlY3VyaXR5IHJvbGUuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXNjcmlwdGlvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icm9sZS1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpyb2xlLW5hbWVUeXBlIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ic2VjdXJpdHktcm9sZS1yZWZUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIHNlY3VyaXR5LXJvbGUtcmVmVHlwZSBjb250YWlucyB0aGUgZGVjbGFyYXRpb24gb2YgYQotc2VjdXJpdHkgcm9sZSByZWZlcmVuY2UgaW4gYSBjb21wb25lbnQncyBvciBhCi1EZXBsb3ltZW50IENvbXBvbmVudCdzIGNvZGUuIFRoZSBkZWNsYXJhdGlvbiBjb25zaXN0cyBvZiBhbgotb3B0aW9uYWwgZGVzY3JpcHRpb24sIHRoZSBzZWN1cml0eSByb2xlIG5hbWUgdXNlZCBpbiB0aGUKLWNvZGUsIGFuZCBhbiBvcHRpb25hbCBsaW5rIHRvIGEgc2VjdXJpdHkgcm9sZS4gSWYgdGhlCi1zZWN1cml0eSByb2xlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBEZXBsb3llciBtdXN0IGNob29zZSBhbgotYXBwcm9wcmlhdGUgc2VjdXJpdHkgcm9sZS4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyb2xlLW5hbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnJvbGUtbmFtZVR5cGUiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgdmFsdWUgb2YgdGhlIHJvbGUtbmFtZSBlbGVtZW50IG11c3QgYmUgdGhlIFN0cmluZyB1c2VkCi0gICAgICAgIGFzIHRoZSBwYXJhbWV0ZXIgdG8gdGhlCi0gICAgICAgIEVKQkNvbnRleHQuaXNDYWxsZXJJblJvbGUoU3RyaW5nIHJvbGVOYW1lKSBtZXRob2Qgb3IgdGhlCi0gICAgICAgIEh0dHBTZXJ2bGV0UmVxdWVzdC5pc1VzZXJJblJvbGUoU3RyaW5nIHJvbGUpIG1ldGhvZC4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotCi0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyb2xlLWxpbmsiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnJvbGUtbmFtZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgcm9sZS1saW5rIGVsZW1lbnQgaXMgYSByZWZlcmVuY2UgdG8gYSBkZWZpbmVkCi0gICAgICAgIHNlY3VyaXR5IHJvbGUuIFRoZSByb2xlLWxpbmsgZWxlbWVudCBtdXN0IGNvbnRhaW4KLSAgICAgICAgdGhlIG5hbWUgb2Ygb25lIG9mIHRoZSBzZWN1cml0eSByb2xlcyBkZWZpbmVkIGluIHRoZQotICAgICAgICBzZWN1cml0eS1yb2xlIGVsZW1lbnRzLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ic2VjdXJpdHktcm9sZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgc2VjdXJpdHktcm9sZVR5cGUgY29udGFpbnMgdGhlIGRlZmluaXRpb24gb2YgYSBzZWN1cml0eQotcm9sZS4gVGhlIGRlZmluaXRpb24gY29uc2lzdHMgb2YgYW4gb3B0aW9uYWwgZGVzY3JpcHRpb24gb2YgdGhlCi1zZWN1cml0eSByb2xlLCBhbmQgdGhlIHNlY3VyaXR5IHJvbGUgbmFtZS4KLQotRXhhbXBsZToKLQotICAgIDxzZWN1cml0eS1yb2xlPgotICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgVGhpcyByb2xlIGluY2x1ZGVzIGFsbCBlbXBsb3llZXMgd2hvIGFyZSBhdXRob3JpemVkCi0gICAgICAgIHRvIGFjY2VzcyB0aGUgZW1wbG95ZWUgc2VydmljZSBhcHBsaWNhdGlvbi4KLSAgICA8L2Rlc2NyaXB0aW9uPgotICAgIDxyb2xlLW5hbWU+ZW1wbG95ZWU8L3JvbGUtbmFtZT4KLSAgICA8L3NlY3VyaXR5LXJvbGU+Ci08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJvbGUtbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cm9sZS1uYW1lVHlwZSIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0ic3RyaW5nIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhpcyBpcyBhIHNwZWNpYWwgc3RyaW5nIGRhdGF0eXBlIHRoYXQgaXMgZGVmaW5lZCBieSBKMkVFIGFzCi1hIGJhc2UgdHlwZSBmb3IgZGVmaW5pbmcgY29sbGFwc2VkIHN0cmluZ3MuIFdoZW4gc2NoZW1hcwotcmVxdWlyZSB0cmFpbGluZy9sZWFkaW5nIHNwYWNlIGVsaW1pbmF0aW9uIGFzIHdlbGwgYXMKLWNvbGxhcHNpbmcgdGhlIGV4aXN0aW5nIHdoaXRlc3BhY2UsIHRoaXMgYmFzZSB0eXBlIG1heSBiZQotdXNlZC4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICA8eHNkOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIi8+Ci0gICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9InRydWUtZmFsc2VUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhpcyBzaW1wbGUgdHlwZSBkZXNpZ25hdGVzIGEgYm9vbGVhbiB3aXRoIG9ubHkgdHdvCi1wZXJtaXNzaWJsZSB2YWx1ZXMKLQotLSB0cnVlCi0tIGZhbHNlCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Ym9vbGVhbiI+Ci0gICAgICAgIDx4c2Q6cGF0dGVybiB2YWx1ZT0iKHRydWV8ZmFsc2UpIi8+Ci0gICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJ1cmwtcGF0dGVyblR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgdXJsLXBhdHRlcm5UeXBlIGNvbnRhaW5zIHRoZSB1cmwgcGF0dGVybiBvZiB0aGUgbWFwcGluZy4gSXQgbXVzdAotZm9sbG93IHRoZSBydWxlcyBzcGVjaWZpZWQgaW4gU2VjdGlvbiAxMS4yIG9mIHRoZSBTZXJ2bGV0IEFQSQotU3BlY2lmaWNhdGlvbi4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImoyZWU6c3RyaW5nIi8+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9Indhci1wYXRoVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBlbGVtZW50cyB0aGF0IHVzZSB0aGlzIHR5cGUgZGVzaWduYXRlIGEgcGF0aCBzdGFydGluZwotd2l0aCBhICIvIiBhbmQgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YgYSBXQVIKLWZpbGUuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6cGF0dGVybiB2YWx1ZT0iLy4qIi8+Ci0gICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwveHNkOnNjaGVtYT4KLQpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvajJlZS9qc3BfMl8wLnhzZCBiL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2oyZWUvanNwXzJfMC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxZDU2NjguLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvajJlZS9qc3BfMl8wLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMwNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiCi0gICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiCi0gICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotICAgICBhdHRyaWJ1dGVGb3JtRGVmYXVsdD0idW5xdWFsaWZpZWQiCi0gICAgIHZlcnNpb249IjIuMCI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci1AKCMpanNwXzJfMC54c2RzCTEuMTAgMDgvMjAvMDIKLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLUNvcHlyaWdodCAyMDAyIFN1biBNaWNyb3N5c3RlbXMsIEluYy4sIDkwMSBTYW4gQW50b25pbwotUm9hZCwgUGFsbyBBbHRvLCBDYWxpZm9ybmlhIDk0MzAzLCBVLlMuQS4gQWxsIHJpZ2h0cwotcmVzZXJ2ZWQuCi0KLVN1biBNaWNyb3N5c3RlbXMsIEluYy4gaGFzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMKLXJlbGF0aW5nIHRvIHRlY2hub2xvZ3kgZGVzY3JpYmVkIGluIHRoaXMgZG9jdW1lbnQuIEluCi1wYXJ0aWN1bGFyLCBhbmQgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGVzZSBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBtYXkgaW5jbHVkZSBvbmUgb3IgbW9yZSBvZiB0aGUgVS5TLiBwYXRlbnRzCi1saXN0ZWQgYXQgaHR0cDovL3d3dy5zdW4uY29tL3BhdGVudHMgYW5kIG9uZSBvciBtb3JlCi1hZGRpdGlvbmFsIHBhdGVudHMgb3IgcGVuZGluZyBwYXRlbnQgYXBwbGljYXRpb25zIGluIHRoZQotVS5TLiBhbmQgb3RoZXIgY291bnRyaWVzLgotCi1UaGlzIGRvY3VtZW50IGFuZCB0aGUgdGVjaG5vbG9neSB3aGljaCBpdCBkZXNjcmliZXMgYXJlCi1kaXN0cmlidXRlZCB1bmRlciBsaWNlbnNlcyByZXN0cmljdGluZyB0aGVpciB1c2UsIGNvcHlpbmcsCi1kaXN0cmlidXRpb24sIGFuZCBkZWNvbXBpbGF0aW9uLiBObyBwYXJ0IG9mIHRoaXMgZG9jdW1lbnQKLW1heSBiZSByZXByb2R1Y2VkIGluIGFueSBmb3JtIGJ5IGFueSBtZWFucyB3aXRob3V0IHByaW9yCi13cml0dGVuIGF1dGhvcml6YXRpb24gb2YgU3VuIGFuZCBpdHMgbGljZW5zb3JzLCBpZiBhbnkuCi0KLVRoaXJkLXBhcnR5IHNvZnR3YXJlLCBpbmNsdWRpbmcgZm9udCB0ZWNobm9sb2d5LCBpcwotY29weXJpZ2h0ZWQgYW5kIGxpY2Vuc2VkIGZyb20gU3VuIHN1cHBsaWVycy4KLQotU3VuLCBTdW4gTWljcm9zeXN0ZW1zLCB0aGUgU3VuIGxvZ28sIFNvbGFyaXMsIEphdmEsIEoyRUUsCi1KYXZhU2VydmVyIFBhZ2VzLCBFbnRlcnByaXNlIEphdmFCZWFucyBhbmQgdGhlIEphdmEgQ29mZmVlCi1DdXAgbG9nbyBhcmUgdHJhZGVtYXJrcyBvciByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YgU3VuCi1NaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFUuUy4gYW5kIG90aGVyIGNvdW50cmllcy4KLQotRmVkZXJhbCBBY3F1aXNpdGlvbnM6IENvbW1lcmNpYWwgU29mdHdhcmUgLSBHb3Zlcm5tZW50IFVzZXJzCi1TdWJqZWN0IHRvIFN0YW5kYXJkIExpY2Vuc2UgVGVybXMgYW5kIENvbmRpdGlvbnMuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoaXMgaXMgdGhlIFhNTCBTY2hlbWEgZm9yIHRoZSBKU1AgMi4wIGRlcGxveW1lbnQgZGVzY3JpcHRvcgotdHlwZXMuICBUaGUgSlNQIDIuMCBzY2hlbWEgY29udGFpbnMgYWxsIHRoZSBzcGVjaWFsCi1zdHJ1Y3R1cmVzIGFuZCBkYXRhdHlwZXMgdGhhdCBhcmUgbmVjZXNzYXJ5IHRvIHVzZSBKU1AgZmlsZXMKLWZyb20gYSB3ZWIgYXBwbGljYXRpb24uCi0KLVRoZSBjb250ZW50cyBvZiB0aGlzIHNjaGVtYSBpcyB1c2VkIGJ5IHRoZSB3ZWItYXBwXzJfNC54c2QKLWZpbGUgdG8gZGVmaW5lIEpTUCBzcGVjaWZpYyBjb250ZW50LgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgZm9sbG93aW5nIGNvbnZlbnRpb25zIGFwcGx5IHRvIGFsbCBKMkVFCi1kZXBsb3ltZW50IGRlc2NyaXB0b3IgZWxlbWVudHMgdW5sZXNzIGluZGljYXRlZCBvdGhlcndpc2UuCi0KLS0gSW4gZWxlbWVudHMgdGhhdCBzcGVjaWZ5IGEgcGF0aG5hbWUgdG8gYSBmaWxlIHdpdGhpbiB0aGUKLSAgc2FtZSBKQVIgZmlsZSwgcmVsYXRpdmUgZmlsZW5hbWVzIChpLmUuLCB0aG9zZSBub3QKLSAgc3RhcnRpbmcgd2l0aCAiLyIpIGFyZSBjb25zaWRlcmVkIHJlbGF0aXZlIHRvIHRoZSByb290IG9mCi0gIHRoZSBKQVIgZmlsZSdzIG5hbWVzcGFjZS4gIEFic29sdXRlIGZpbGVuYW1lcyAoaS5lLiwgdGhvc2UKLSAgc3RhcnRpbmcgd2l0aCAiLyIpIGFsc28gc3BlY2lmeSBuYW1lcyBpbiB0aGUgcm9vdCBvZiB0aGUKLSAgSkFSIGZpbGUncyBuYW1lc3BhY2UuICBJbiBnZW5lcmFsLCByZWxhdGl2ZSBuYW1lcyBhcmUKLSAgcHJlZmVycmVkLiAgVGhlIGV4Y2VwdGlvbiBpcyAud2FyIGZpbGVzIHdoZXJlIGFic29sdXRlCi0gIG5hbWVzIGFyZSBwcmVmZXJyZWQgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIFNlcnZsZXQgQVBJLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJqMmVlXzFfNC54c2QiLz4KLQotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ianNwLWNvbmZpZ1R5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUganNwLWNvbmZpZ1R5cGUgaXMgdXNlZCB0byBwcm92aWRlIGdsb2JhbCBjb25maWd1cmF0aW9uCi1pbmZvcm1hdGlvbiBmb3IgdGhlIEpTUCBmaWxlcyBpbiBhIHdlYiBhcHBsaWNhdGlvbi4gSXQgaGFzCi10d28gc3ViZWxlbWVudHMsIHRhZ2xpYiBhbmQganNwLXByb3BlcnR5LWdyb3VwLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJ0YWdsaWIiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnRhZ2xpYlR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ianNwLXByb3BlcnR5LWdyb3VwIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpqc3AtcHJvcGVydHktZ3JvdXBUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9ImpzcC1maWxlVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBqc3AtZmlsZSBlbGVtZW50IGNvbnRhaW5zIHRoZSBmdWxsIHBhdGggdG8gYSBKU1AgZmlsZQotd2l0aGluIHRoZSB3ZWIgYXBwbGljYXRpb24gYmVnaW5uaW5nIHdpdGggYSBgLycuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnBhdGhUeXBlIi8+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJqc3AtcHJvcGVydHktZ3JvdXBUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGpzcC1wcm9wZXJ0eS1ncm91cFR5cGUgaXMgdXNlZCB0byBncm91cCBhIG51bWJlciBvZgotZmlsZXMgc28gdGhleSBjYW4gYmUgZ2l2ZW4gZ2xvYmFsIHByb3BlcnR5IGluZm9ybWF0aW9uLgotQWxsIGZpbGVzIHNvIGRlc2NyaWJlZCBhcmUgZGVlbWVkIHRvIGJlIEpTUCBmaWxlcy4gIFRoZQotZm9sbG93aW5nIGFkZGl0aW9uYWwgcHJvcGVydGllcyBjYW4gYmUgZGVzY3JpYmVkOgotCi0gICAgLSBDb250cm9sIGVuYWJsaW5nIG9mIEVMIGV2YWx1YXRpb24uCi0gICAgLSBDb250cm9sIGVuYWJsaW5nIG9mIFNjcmlwdGluZyBlbGVtZW50cy4KLSAgICAtIEluZGljYXRlIHBhZ2VFbmNvZGluZyBpbmZvcm1hdGlvbi4KLSAgICAtIEluZGljYXRpbmcgdGhhdCBhIHJlc291cmNlIGlzIGEgSlNQIGRvY3VtZW50Ci0gICAgLSBQcmVsdWRlIGFuZCBDb2RhIGF1dG9tYXRpYyBpbmNsdWRlcy4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLQkJICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLQkJICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkaXNwbGF5LW5hbWUiCi0JCSAgICAgdHlwZT0iajJlZTpkaXNwbGF5LW5hbWVUeXBlIgotCQkgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InVybC1wYXR0ZXJuIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTp1cmwtcGF0dGVyblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZWwtZW5hYmxlZCIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6dHJ1ZS1mYWxzZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBDYW4gYmUgdXNlZCB0byBlYXNpbHkgc2V0IHRoZSBpc0VMRW5hYmxlZAotICAgICAgICBwcm9wZXJ0eSBvZiBhIGdyb3VwIG9mIEpTUCBwYWdlcy4gIEJ5IGRlZmF1bHQsIHRoZQotICAgICAgICBFTCBldmFsdWF0aW9uIGlzIGVuYWJsZWQgZm9yIFdlYiBBcHBsaWNhdGlvbnMgdXNpbmcKLSAgICAgICAgYSBTZXJ2bGV0IDIuNCBvciBncmVhdGVyIHdlYi54bWwuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InBhZ2UtZW5jb2RpbmciCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnN0cmluZyIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSB2YWxpZCB2YWx1ZXMgb2YgcGFnZS1lbmNvZGluZyBhcmUgdGhvc2Ugb2YgdGhlCi0gICAgICAgIHBhZ2VFbmNvZGluZyBwYWdlIGRpcmVjdGl2ZS4gSXQgaXMgYQotICAgICAgICB0cmFuc2xhdGlvbi10aW1lIGVycm9yIHRvIGRlZmluZSB0aGUgcGFnZUVuY29kaW5nCi0gICAgICAgIG9mIGEgSlNQIHBhZ2UgdGhyb3VnaCBvbmUgdmFsdWUgaW4gdGhlIEpTUAotICAgICAgICBjb25maWd1cmF0aW9uIGVsZW1lbnQgYW5kIHRoZW4gZ2l2ZSBpdCBhIGRpZmZlcmVudAotICAgICAgICB2YWx1ZSBpbiBhIHBhZ2VFbmNvZGluZyBkaXJlY3RpdmUsIGJ1dCBpdCBpcyBsZWdhbAotICAgICAgICB0byBnaXZlIGl0IHRoZSBzYW1lIHZhbHVlLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzY3JpcHRpbmctZW5hYmxlZCIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6dHJ1ZS1mYWxzZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBDYW4gYmUgdXNlZCB0byBlYXNpbHkgc2V0IHRoZSBpc1NjcmlwdGluZ0VuYWJsZWQKLSAgICAgICAgcHJvcGVydHkgb2YgYSBncm91cCBvZiBKU1AgcGFnZXMuICBCeSBkZWZhdWx0LAotICAgICAgICBzY3JpcHRpbmcgaXMgZW5hYmxlZC4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJpcy14bWwiCi0JCSAgICAgdHlwZT0iajJlZTp0cnVlLWZhbHNlVHlwZSIKLQkJICAgICBtaW5PY2N1cnM9IjAiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBJZiB0cnVlLCBkZW5vdGVzIHRoYXQgdGhlIGdyb3VwIG9mIHJlc291cmNlcwotCXRoYXQgbWF0Y2ggdGhlIFVSTCBwYXR0ZXJuIGFyZSBKU1AgZG9jdW1lbnRzLAotCWFuZCB0aHVzIG11c3QgYmUgaW50ZXJwcmV0ZWQgYXMgWE1MIGRvY3VtZW50cy4KLQlJZiBmYWxzZSwgdGhlIHJlc291cmNlcyBhcmUgYXNzdW1lZCB0byBub3QKLQliZSBKU1AgZG9jdW1lbnRzLCB1bmxlc3MgdGhlcmUgaXMgYW5vdGhlcgotCXByb3BlcnR5IGdyb3VwIHRoYXQgaW5kaWNhdGVzIG90aGVyd2lzZS4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaW5jbHVkZS1wcmVsdWRlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpwYXRoVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGluY2x1ZGUtcHJlbHVkZSBlbGVtZW50IGlzIGEgY29udGV4dC1yZWxhdGl2ZQotICAgICAgICBwYXRoIHRoYXQgbXVzdCBjb3JyZXNwb25kIHRvIGFuIGVsZW1lbnQgaW4gdGhlCi0gICAgICAgIFdlYiBBcHBsaWNhdGlvbi4gIFdoZW4gdGhlIGVsZW1lbnQgaXMgcHJlc2VudCwKLSAgICAgICAgdGhlIGdpdmVuIHBhdGggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIChhcwotICAgICAgICBpbiBhbiBpbmNsdWRlIGRpcmVjdGl2ZSkgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoCi0gICAgICAgIEpTUCBwYWdlIGluIHRoaXMganNwLXByb3BlcnR5LWdyb3VwLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJpbmNsdWRlLWNvZGEiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnBhdGhUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgaW5jbHVkZS1jb2RhIGVsZW1lbnQgaXMgYSBjb250ZXh0LXJlbGF0aXZlCi0gICAgICAgIHBhdGggdGhhdCBtdXN0IGNvcnJlc3BvbmQgdG8gYW4gZWxlbWVudCBpbiB0aGUKLSAgICAgICAgV2ViIEFwcGxpY2F0aW9uLiAgV2hlbiB0aGUgZWxlbWVudCBpcyBwcmVzZW50LAotICAgICAgICB0aGUgZ2l2ZW4gcGF0aCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgKGFzCi0gICAgICAgIGluIGFuIGluY2x1ZGUgZGlyZWN0aXZlKSBhdCB0aGUgZW5kIG9mIGVhY2gKLSAgICAgICAgSlNQIHBhZ2UgaW4gdGhpcyBqc3AtcHJvcGVydHktZ3JvdXAuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJ0YWdsaWJUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotQSB0YWdsaWIgY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiBhIHRhZwotbGlicmFyeSB0aGF0IGlzIHVzZWQgYnkgYSBKU1AgcGFnZSB3aXRoaW4gdGhlIFdlYgotQXBwbGljYXRpb24uCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InRhZ2xpYi11cmkiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIEEgdGFnbGliLXVyaSBlbGVtZW50IGRlc2NyaWJlcyBhIFVSSSBpZGVudGlmeWluZyBhCi0gICAgICAgIHRhZyBsaWJyYXJ5IHVzZWQgaW4gdGhlIHdlYiBhcHBsaWNhdGlvbi4gIFRoZSBib2R5Ci0gICAgICAgIG9mIHRoZSB0YWdsaWItdXJpIGVsZW1lbnQgbWF5IGJlIGVpdGhlciBhbgotICAgICAgICBhYnNvbHV0ZSBVUkkgc3BlY2lmaWNhdGlvbiwgb3IgYSByZWxhdGl2ZSBVUkkuCi0gICAgICAgIFRoZXJlIHNob3VsZCBiZSBubyBlbnRyaWVzIGluIHdlYi54bWwgd2l0aCB0aGUKLSAgICAgICAgc2FtZSB0YWdsaWItdXJpIHZhbHVlLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InRhZ2xpYi1sb2NhdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cGF0aFR5cGUiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICB0aGUgdGFnbGliLWxvY2F0aW9uIGVsZW1lbnQgY29udGFpbnMgdGhlIGxvY2F0aW9uCi0gICAgICAgIChhcyBhIHJlc291cmNlIHJlbGF0aXZlIHRvIHRoZSByb290IG9mIHRoZSB3ZWIKLSAgICAgICAgYXBwbGljYXRpb24pIHdoZXJlIHRvIGZpbmQgdGhlIFRhZyBMaWJyYXJ5Ci0gICAgICAgIERlc2NyaXB0aW9uIGZpbGUgZm9yIHRoZSB0YWcgbGlicmFyeS4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotCi0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08L3hzZDpzY2hlbWE+Ci0KZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL2oyZWUvd2ViLWFwcF8yXzQueHNkIGIvdjIvdGVzdC9jYXNlcy9zY2hlbWEvajJlZS93ZWItYXBwXzJfNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjOGMxNTguLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvajJlZS93ZWItYXBwXzJfNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMjc4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKLSAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKLSAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0gICAgIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKLSAgICAgdmVyc2lvbj0iMi40Ij4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLUAoIyl3ZWItYXBwXzJfNC54c2RzCTEuMzQgMDIvMDgvMDEKLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLUNvcHlyaWdodCAyMDAyIFN1biBNaWNyb3N5c3RlbXMsIEluYy4sIDkwMSBTYW4gQW50b25pbwotUm9hZCwgUGFsbyBBbHRvLCBDYWxpZm9ybmlhIDk0MzAzLCBVLlMuQS4gQWxsIHJpZ2h0cwotcmVzZXJ2ZWQuCi0KLVN1biBNaWNyb3N5c3RlbXMsIEluYy4gaGFzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMKLXJlbGF0aW5nIHRvIHRlY2hub2xvZ3kgZGVzY3JpYmVkIGluIHRoaXMgZG9jdW1lbnQuIEluCi1wYXJ0aWN1bGFyLCBhbmQgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGVzZSBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBtYXkgaW5jbHVkZSBvbmUgb3IgbW9yZSBvZiB0aGUgVS5TLiBwYXRlbnRzCi1saXN0ZWQgYXQgaHR0cDovL3d3dy5zdW4uY29tL3BhdGVudHMgYW5kIG9uZSBvciBtb3JlCi1hZGRpdGlvbmFsIHBhdGVudHMgb3IgcGVuZGluZyBwYXRlbnQgYXBwbGljYXRpb25zIGluIHRoZQotVS5TLiBhbmQgb3RoZXIgY291bnRyaWVzLgotCi1UaGlzIGRvY3VtZW50IGFuZCB0aGUgdGVjaG5vbG9neSB3aGljaCBpdCBkZXNjcmliZXMgYXJlCi1kaXN0cmlidXRlZCB1bmRlciBsaWNlbnNlcyByZXN0cmljdGluZyB0aGVpciB1c2UsIGNvcHlpbmcsCi1kaXN0cmlidXRpb24sIGFuZCBkZWNvbXBpbGF0aW9uLiBObyBwYXJ0IG9mIHRoaXMgZG9jdW1lbnQKLW1heSBiZSByZXByb2R1Y2VkIGluIGFueSBmb3JtIGJ5IGFueSBtZWFucyB3aXRob3V0IHByaW9yCi13cml0dGVuIGF1dGhvcml6YXRpb24gb2YgU3VuIGFuZCBpdHMgbGljZW5zb3JzLCBpZiBhbnkuCi0KLVRoaXJkLXBhcnR5IHNvZnR3YXJlLCBpbmNsdWRpbmcgZm9udCB0ZWNobm9sb2d5LCBpcwotY29weXJpZ2h0ZWQgYW5kIGxpY2Vuc2VkIGZyb20gU3VuIHN1cHBsaWVycy4KLQotU3VuLCBTdW4gTWljcm9zeXN0ZW1zLCB0aGUgU3VuIGxvZ28sIFNvbGFyaXMsIEphdmEsIEoyRUUsCi1KYXZhU2VydmVyIFBhZ2VzLCBFbnRlcnByaXNlIEphdmFCZWFucyBhbmQgdGhlIEphdmEgQ29mZmVlCi1DdXAgbG9nbyBhcmUgdHJhZGVtYXJrcyBvciByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YgU3VuCi1NaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFUuUy4gYW5kIG90aGVyIGNvdW50cmllcy4KLQotRmVkZXJhbCBBY3F1aXNpdGlvbnM6IENvbW1lcmNpYWwgU29mdHdhcmUgLSBHb3Zlcm5tZW50IFVzZXJzCi1TdWJqZWN0IHRvIFN0YW5kYXJkIExpY2Vuc2UgVGVybXMgYW5kIENvbmRpdGlvbnMuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoaXMgaXMgdGhlIFhNTCBTY2hlbWEgZm9yIHRoZSBTZXJ2bGV0IDIuNCBkZXBsb3ltZW50Ci1kZXNjcmlwdG9yLiAgQWxsIFNlcnZsZXQgZGVwbG95bWVudCBkZXNjcmlwdG9ycyBtdXN0Ci1pbmRpY2F0ZSB0aGUgd2ViIGFwcGxpY2F0aW9uIHNjaGVtYSBieSB1c2luZyB0aGUgSjJFRQotbmFtZXNwYWNlOgotCi1odHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCi0KLWFuZCBieSBpbmRpY2F0aW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBzY2hlbWEgYnkKLXVzaW5nIHRoZSB2ZXJzaW9uIGVsZW1lbnQgYXMgc2hvd24gYmVsb3c6Ci0KLSAgICA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKLSAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSIuLi4iCi0gICAgIHZlcnNpb249IjIuNCI+Ci0gICAgLi4uCi0gICAgPC93ZWItYXBwPgotCi1UaGUgaW5zdGFuY2UgZG9jdW1lbnRzIG1heSBpbmRpY2F0ZSB0aGUgcHVibGlzaGVkIHZlcnNpb24gb2YKLXRoZSBzY2hlbWEgdXNpbmcgdGhlIHhzaTpzY2hlbWFMb2NhdGlvbiBhdHRyaWJ1dGUgZm9yIEoyRUUKLW5hbWVzcGFjZSB3aXRoIHRoZSBmb2xsb3dpbmcgbG9jYXRpb246Ci0KLWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBmb2xsb3dpbmcgY29udmVudGlvbnMgYXBwbHkgdG8gYWxsIEoyRUUKLWRlcGxveW1lbnQgZGVzY3JpcHRvciBlbGVtZW50cyB1bmxlc3MgaW5kaWNhdGVkIG90aGVyd2lzZS4KLQotLSBJbiBlbGVtZW50cyB0aGF0IHNwZWNpZnkgYSBwYXRobmFtZSB0byBhIGZpbGUgd2l0aGluIHRoZQotICBzYW1lIEpBUiBmaWxlLCByZWxhdGl2ZSBmaWxlbmFtZXMgKGkuZS4sIHRob3NlIG5vdAotICBzdGFydGluZyB3aXRoICIvIikgYXJlIGNvbnNpZGVyZWQgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YKLSAgdGhlIEpBUiBmaWxlJ3MgbmFtZXNwYWNlLiAgQWJzb2x1dGUgZmlsZW5hbWVzIChpLmUuLCB0aG9zZQotICBzdGFydGluZyB3aXRoICIvIikgYWxzbyBzcGVjaWZ5IG5hbWVzIGluIHRoZSByb290IG9mIHRoZQotICBKQVIgZmlsZSdzIG5hbWVzcGFjZS4gIEluIGdlbmVyYWwsIHJlbGF0aXZlIG5hbWVzIGFyZQotICBwcmVmZXJyZWQuICBUaGUgZXhjZXB0aW9uIGlzIC53YXIgZmlsZXMgd2hlcmUgYWJzb2x1dGUKLSAgbmFtZXMgYXJlIHByZWZlcnJlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgU2VydmxldCBBUEkuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi08eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249ImoyZWVfMV80LnhzZCIvPgotPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJqc3BfMl8wLnhzZCIvPgotCi0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotCi08eHNkOmVsZW1lbnQgbmFtZT0id2ViLWFwcCIgdHlwZT0iajJlZTp3ZWItYXBwVHlwZSI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIFRoZSB3ZWItYXBwIGVsZW1lbnQgaXMgdGhlIHJvb3Qgb2YgdGhlIGRlcGxveW1lbnQKLSAgICBkZXNjcmlwdG9yIGZvciBhIHdlYiBhcHBsaWNhdGlvbi4KLQotICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6dW5pcXVlIG5hbWU9InNlcnZsZXQtbmFtZS11bmlxdWVuZXNzIj4KLSAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgVGhlIHNlcnZsZXQgZWxlbWVudCBjb250YWlucyB0aGUgbmFtZSBvZiBhIHNlcnZsZXQuCi0gICAgVGhlIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSB3ZWIgYXBwbGljYXRpb24uCi0KLSAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6c2VydmxldCIvPgotICAgICAgICA8eHNkOmZpZWxkICAgIHhwYXRoPSJqMmVlOnNlcnZsZXQtbmFtZSIvPgotICAgIDwveHNkOnVuaXF1ZT4KLQotICAgIDx4c2Q6dW5pcXVlIG5hbWU9ImZpbHRlci1uYW1lLXVuaXF1ZW5lc3MiPgotICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICBUaGUgZmlsdGVyIGVsZW1lbnQgY29udGFpbnMgdGhlIG5hbWUgb2YgYSBmaWx0ZXIuCi0gICAgVGhlIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSB3ZWIgYXBwbGljYXRpb24uCi0KLSAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6ZmlsdGVyIi8+Ci0gICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6ZmlsdGVyLW5hbWUiLz4KLSAgICA8L3hzZDp1bmlxdWU+Ci0KLSAgICA8eHNkOnVuaXF1ZSBuYW1lPSJlamItbG9jYWwtcmVmLW5hbWUtdW5pcXVlbmVzcyI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIFRoZSBlamItbG9jYWwtcmVmLW5hbWUgZWxlbWVudCBjb250YWlucyB0aGUgbmFtZSBvZiBhbiBFSkIKLSAgICByZWZlcmVuY2UuIFRoZSBFSkIgcmVmZXJlbmNlIGlzIGFuIGVudHJ5IGluIHRoZSB3ZWIKLSAgICBhcHBsaWNhdGlvbidzIGVudmlyb25tZW50IGFuZCBpcyByZWxhdGl2ZSB0byB0aGUKLSAgICBqYXZhOmNvbXAvZW52IGNvbnRleHQuICBUaGUgbmFtZSBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4KLSAgICB0aGUgd2ViIGFwcGxpY2F0aW9uLgotCi0gICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBuYW1lIGlzIHByZWZpeGVkIHdpdGggImVqYi8iLgotCi0gICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOmVqYi1sb2NhbC1yZWYiLz4KLSAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTplamItcmVmLW5hbWUiLz4KLSAgICA8L3hzZDp1bmlxdWU+Ci0KLSAgICA8eHNkOnVuaXF1ZSBuYW1lPSJlamItcmVmLW5hbWUtdW5pcXVlbmVzcyI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIFRoZSBlamItcmVmLW5hbWUgZWxlbWVudCBjb250YWlucyB0aGUgbmFtZSBvZiBhbiBFSkIKLSAgICByZWZlcmVuY2UuIFRoZSBFSkIgcmVmZXJlbmNlIGlzIGFuIGVudHJ5IGluIHRoZSB3ZWIKLSAgICBhcHBsaWNhdGlvbidzIGVudmlyb25tZW50IGFuZCBpcyByZWxhdGl2ZSB0byB0aGUKLSAgICBqYXZhOmNvbXAvZW52IGNvbnRleHQuICBUaGUgbmFtZSBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4KLSAgICB0aGUgd2ViIGFwcGxpY2F0aW9uLgotCi0gICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBuYW1lIGlzIHByZWZpeGVkIHdpdGggImVqYi8iLgotCi0gICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOmVqYi1yZWYiLz4KLSAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTplamItcmVmLW5hbWUiLz4KLSAgICA8L3hzZDp1bmlxdWU+Ci0KLSAgICA8eHNkOnVuaXF1ZSBuYW1lPSJyZXNvdXJjZS1lbnYtcmVmLXVuaXF1ZW5lc3MiPgotICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICBUaGUgcmVzb3VyY2UtZW52LXJlZi1uYW1lIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mCi0gICAgYSByZXNvdXJjZSBlbnZpcm9ubWVudCByZWZlcmVuY2U7IGl0cyB2YWx1ZSBpcyB0aGUKLSAgICBlbnZpcm9ubWVudCBlbnRyeSBuYW1lIHVzZWQgaW4gdGhlIHdlYiBhcHBsaWNhdGlvbiBjb2RlLgotICAgIFRoZSBuYW1lIGlzIGEgSk5ESSBuYW1lIHJlbGF0aXZlIHRvIHRoZSBqYXZhOmNvbXAvZW52Ci0gICAgY29udGV4dCBhbmQgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGEgd2ViIGFwcGxpY2F0aW9uLgotCi0gICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOnJlc291cmNlLWVudi1yZWYiLz4KLSAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTpyZXNvdXJjZS1lbnYtcmVmLW5hbWUiLz4KLSAgICA8L3hzZDp1bmlxdWU+Ci0KLSAgICA8eHNkOnVuaXF1ZSBuYW1lPSJtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi11bmlxdWVuZXNzIj4KLSAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgVGhlIG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWUgZWxlbWVudCBzcGVjaWZpZXMgdGhlIG5hbWUgb2YKLSAgICBhIG1lc3NhZ2UgZGVzdGluYXRpb24gcmVmZXJlbmNlOyBpdHMgdmFsdWUgaXMgdGhlCi0gICAgZW52aXJvbm1lbnQgZW50cnkgbmFtZSB1c2VkIGluIHRoZSB3ZWIgYXBwbGljYXRpb24gY29kZS4KLSAgICBUaGUgbmFtZSBpcyBhIEpOREkgbmFtZSByZWxhdGl2ZSB0byB0aGUgamF2YTpjb21wL2VudgotICAgIGNvbnRleHQgYW5kIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIHdlYiBhcHBsaWNhdGlvbi4KLQotICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpzZWxlY3RvciB4cGF0aD0iajJlZTptZXNzYWdlLWRlc3RpbmF0aW9uLXJlZiIvPgotICAgICAgICA8eHNkOmZpZWxkICAgIHhwYXRoPSJqMmVlOm1lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWUiLz4KLSAgICA8L3hzZDp1bmlxdWU+Ci0KLSAgICA8eHNkOnVuaXF1ZSBuYW1lPSJyZXMtcmVmLW5hbWUtdW5pcXVlbmVzcyI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIFRoZSByZXMtcmVmLW5hbWUgZWxlbWVudCBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgYQotICAgIHJlc291cmNlIG1hbmFnZXIgY29ubmVjdGlvbiBmYWN0b3J5IHJlZmVyZW5jZS4gIFRoZSBuYW1lCi0gICAgaXMgYSBKTkRJIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGphdmE6Y29tcC9lbnYgY29udGV4dC4KLSAgICBUaGUgbmFtZSBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSB3ZWIgYXBwbGljYXRpb24uCi0KLSAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6cmVzb3VyY2UtcmVmIi8+Ci0gICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6cmVzLXJlZi1uYW1lIi8+Ci0gICAgPC94c2Q6dW5pcXVlPgotCi0gICAgPHhzZDp1bmlxdWUgbmFtZT0iZW52LWVudHJ5LW5hbWUtdW5pcXVlbmVzcyI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIFRoZSBlbnYtZW50cnktbmFtZSBlbGVtZW50IGNvbnRhaW5zIHRoZSBuYW1lIG9mIGEgd2ViCi0gICAgYXBwbGljYXRpb24ncyBlbnZpcm9ubWVudCBlbnRyeS4gIFRoZSBuYW1lIGlzIGEgSk5ESQotICAgIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGphdmE6Y29tcC9lbnYgY29udGV4dC4gIFRoZSBuYW1lCi0gICAgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGEgd2ViIGFwcGxpY2F0aW9uLgotCi0gICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICA8L3hzZDphbm5vdGF0aW9uPgotCi0gICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6ZW52LWVudHJ5Ii8+Ci0gICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6ZW52LWVudHJ5LW5hbWUiLz4KLSAgICAgICAgPC94c2Q6dW5pcXVlPgotCi0gICAgPHhzZDprZXkgbmFtZT0icm9sZS1uYW1lLWtleSI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIEEgcm9sZS1uYW1lLWtleSBpcyBzcGVjaWZpZWQgdG8gYWxsb3cgdGhlIHJlZmVyZW5jZXMKLSAgICBmcm9tIHRoZSBzZWN1cml0eS1yb2xlLXJlZnMuCi0KLSAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6c2VjdXJpdHktcm9sZSIvPgotICAgICAgICA8eHNkOmZpZWxkICAgIHhwYXRoPSJqMmVlOnJvbGUtbmFtZSIvPgotICAgIDwveHNkOmtleT4KLQotICAgIDx4c2Q6a2V5cmVmIG5hbWU9InJvbGUtbmFtZS1yZWZlcmVuY2VzIgotICAgICAgICAgICAgcmVmZXI9ImoyZWU6cm9sZS1uYW1lLWtleSI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIFRoZSBrZXlyZWYgaW5kaWNhdGVzIHRoZSByZWZlcmVuY2VzIGZyb20KLSAgICBzZWN1cml0eS1yb2xlLXJlZiB0byBhIHNwZWNpZmllZCByb2xlLW5hbWUuCi0KLSAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6c2VydmxldC9qMmVlOnNlY3VyaXR5LXJvbGUtcmVmIi8+Ci0gICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6cm9sZS1saW5rIi8+Ci0gICAgPC94c2Q6a2V5cmVmPgotCi08L3hzZDplbGVtZW50PgotCi0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJhdXRoLWNvbnN0cmFpbnRUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGF1dGgtY29uc3RyYWludFR5cGUgaW5kaWNhdGVzIHRoZSB1c2VyIHJvbGVzIHRoYXQKLXNob3VsZCBiZSBwZXJtaXR0ZWQgYWNjZXNzIHRvIHRoaXMgcmVzb3VyY2UKLWNvbGxlY3Rpb24uIFRoZSByb2xlLW5hbWUgdXNlZCBoZXJlIG11c3QgZWl0aGVyIGNvcnJlc3BvbmQKLXRvIHRoZSByb2xlLW5hbWUgb2Ygb25lIG9mIHRoZSBzZWN1cml0eS1yb2xlIGVsZW1lbnRzCi1kZWZpbmVkIGZvciB0aGlzIHdlYiBhcHBsaWNhdGlvbiwgb3IgYmUgdGhlIHNwZWNpYWxseQotcmVzZXJ2ZWQgcm9sZS1uYW1lICIqIiB0aGF0IGlzIGEgY29tcGFjdCBzeW50YXggZm9yCi1pbmRpY2F0aW5nIGFsbCByb2xlcyBpbiB0aGUgd2ViIGFwcGxpY2F0aW9uLiBJZiBib3RoICIqIgotYW5kIHJvbGVuYW1lcyBhcHBlYXIsIHRoZSBjb250YWluZXIgaW50ZXJwcmV0cyB0aGlzIGFzIGFsbAotcm9sZXMuICBJZiBubyByb2xlcyBhcmUgZGVmaW5lZCwgbm8gdXNlciBpcyBhbGxvd2VkIGFjY2VzcwotdG8gdGhlIHBvcnRpb24gb2YgdGhlIHdlYiBhcHBsaWNhdGlvbiBkZXNjcmliZWQgYnkgdGhlCi1jb250YWluaW5nIHNlY3VyaXR5LWNvbnN0cmFpbnQuICBUaGUgY29udGFpbmVyIG1hdGNoZXMKLXJvbGUgbmFtZXMgY2FzZSBzZW5zaXRpdmVseSB3aGVuIGRldGVybWluaW5nIGFjY2Vzcy4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyb2xlLW5hbWUiCi0gICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cm9sZS1uYW1lVHlwZSIKLSAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0iYXV0aC1tZXRob2RUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGF1dGgtbWV0aG9kVHlwZSBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgYXV0aGVudGljYXRpb24KLW1lY2hhbmlzbSBmb3IgdGhlIHdlYiBhcHBsaWNhdGlvbi4gQXMgYSBwcmVyZXF1aXNpdGUgdG8KLWdhaW5pbmcgYWNjZXNzIHRvIGFueSB3ZWIgcmVzb3VyY2VzIHdoaWNoIGFyZSBwcm90ZWN0ZWQgYnkKLWFuIGF1dGhvcml6YXRpb24gY29uc3RyYWludCwgYSB1c2VyIG11c3QgaGF2ZSBhdXRoZW50aWNhdGVkCi11c2luZyB0aGUgY29uZmlndXJlZCBtZWNoYW5pc20uIExlZ2FsIHZhbHVlcyBhcmUgIkJBU0lDIiwKLSJESUdFU1QiLCAiRk9STSIsIG9yICJDTElFTlQtQ0VSVCIuCi0KLVVzZWQgaW46IGxvZ2luLWNvbmZpZwotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpzdHJpbmciPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCQVNJQyIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJESUdFU1QiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRk9STSIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDTElFTlQtQ0VSVCIvPgotICAgIDwveHNkOnJlc3RyaWN0aW9uPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJkaXNwYXRjaGVyVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBkaXNwYXRjaGVyIGhhcyB0aHJlZSBsZWdhbCB2YWx1ZXMsIEZPUldBUkQgYW5kIFJFUVVFU1QKLWFuZCBJTkNMVURFLiBBIHZhbHVlIG9mIEZPUldBUkQgbWVhbnMgdGhlIEZpbHRlcgotd2lsbCBiZSBhcHBsaWVkIHVuZGVyIFJlcXVlc3REaXNwYXRjaGVyLmZvcndhcmQoKSBjYWxscy4KLUEgdmFsdWUgb2YgUkVRVUVTVCBtZWFucyB0aGUgRmlsdGVyIHdpbGwgYmUgYXBwbGllZAotdW5kZXIgb3JkaW5hcnkgY2xpZW50IGNhbGxzIHRvIHRoZSBwYXRoIG9yIHNlcnZsZXQuIEEgdmFsdWUgb2YKLUlOQ0xVREUgbWVhbnMgdGhlIEZpbHRlciB3aWxsIGJlIGFwcGxpZWQgdW5kZXIKLVJlcXVlc3REaXNwYXRjaGVyLmluY2x1ZGUoKSBjYWxscy4KLVRoZSBhYnNlbmNlIG9mIGFueSBkaXNwYXRjaGVyIGVsZW1lbnRzIGluIGEKLWZpbHRlci1tYXBwaW5nIGluZGljYXRlcyBhIGRlZmF1bHQgb2YgYXBwbHlpbmcKLWZpbHRlcnMgb25seSB1bmRlciBvcmRpbmFyeSBjbGllbnQgY2FsbHMgdG8gdGhlIHBhdGggb3Igc2VydmxldC4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImoyZWU6c3RyaW5nIj4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRk9SV0FSRCIvPgotICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklOQ0xVREUiLz4KLSAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSRVFVRVNUIi8+Ci0KLSAgICA8L3hzZDpyZXN0cmljdGlvbj4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0iZXJyb3ItY29kZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgZXJyb3ItY29kZSBjb250YWlucyBhbiBIVFRQIGVycm9yIGNvZGUsIGV4OiA0MDQKLQotVXNlZCBpbjogZXJyb3ItcGFnZQotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0icG9zaXRpdmVJbnRlZ2VyIi8+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJlcnJvci1wYWdlVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBlcnJvci1wYWdlVHlwZSBjb250YWlucyBhIG1hcHBpbmcgYmV0d2VlbiBhbiBlcnJvciBjb2RlCi1vciBleGNlcHRpb24gdHlwZSB0byB0aGUgcGF0aCBvZiBhIHJlc291cmNlIGluIHRoZSB3ZWIKLWFwcGxpY2F0aW9uLgotCi1Vc2VkIGluOiB3ZWItYXBwCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPGNob2ljZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVycm9yLWNvZGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVycm9yLWNvZGVUeXBlIi8+Ci0KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImV4Y2VwdGlvbi10eXBlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpmdWxseS1xdWFsaWZpZWQtY2xhc3NUeXBlIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGV4Y2VwdGlvbi10eXBlIGNvbnRhaW5zIGEgZnVsbHkgcXVhbGlmaWVkIGNsYXNzCi0gICAgICAgIG5hbWUgb2YgYSBKYXZhIGV4Y2VwdGlvbiB0eXBlLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwvY2hvaWNlPgotCi0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cGF0aFR5cGUiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgbG9jYXRpb24gZWxlbWVudCBjb250YWlucyB0aGUgbG9jYXRpb24gb2YgdGhlCi0gICAgICAgIHJlc291cmNlIGluIHRoZSB3ZWIgYXBwbGljYXRpb24gcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YKLSAgICAgICAgdGhlIHdlYiBhcHBsaWNhdGlvbi4gVGhlIHZhbHVlIG9mIHRoZSBsb2NhdGlvbiBtdXN0IGhhdmUKLSAgICAgICAgYSBsZWFkaW5nIGAvJy4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImZpbHRlci1tYXBwaW5nVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLURlY2xhcmF0aW9uIG9mIHRoZSBmaWx0ZXIgbWFwcGluZ3MgaW4gdGhpcyB3ZWIKLWFwcGxpY2F0aW9uIGlzIGRvbmUgYnkgdXNpbmcgZmlsdGVyLW1hcHBpbmdUeXBlLgotVGhlIGNvbnRhaW5lciB1c2VzIHRoZSBmaWx0ZXItbWFwcGluZwotZGVjbGFyYXRpb25zIHRvIGRlY2lkZSB3aGljaCBmaWx0ZXJzIHRvIGFwcGx5IHRvIGEgcmVxdWVzdCwKLWFuZCBpbiB3aGF0IG9yZGVyLiBUaGUgY29udGFpbmVyIG1hdGNoZXMgdGhlIHJlcXVlc3QgVVJJIHRvCi1hIFNlcnZsZXQgaW4gdGhlIG5vcm1hbCB3YXkuIFRvIGRldGVybWluZSB3aGljaCBmaWx0ZXJzIHRvCi1hcHBseSBpdCBtYXRjaGVzIGZpbHRlci1tYXBwaW5nIGRlY2xhcmF0aW9ucyBlaXRoZXIgb24KLXNlcnZsZXQtbmFtZSwgb3Igb24gdXJsLXBhdHRlcm4gZm9yIGVhY2ggZmlsdGVyLW1hcHBpbmcKLWVsZW1lbnQsIGRlcGVuZGluZyBvbiB3aGljaCBzdHlsZSBpcyB1c2VkLiBUaGUgb3JkZXIgaW4KLXdoaWNoIGZpbHRlcnMgYXJlIGludm9rZWQgaXMgdGhlIG9yZGVyIGluIHdoaWNoCi1maWx0ZXItbWFwcGluZyBkZWNsYXJhdGlvbnMgdGhhdCBtYXRjaCBhIHJlcXVlc3QgVVJJIGZvciBhCi1zZXJ2bGV0IGFwcGVhciBpbiB0aGUgbGlzdCBvZiBmaWx0ZXItbWFwcGluZyBlbGVtZW50cy5UaGUKLWZpbHRlci1uYW1lIHZhbHVlIG11c3QgYmUgdGhlIHZhbHVlIG9mIHRoZSBmaWx0ZXItbmFtZQotc3ViLWVsZW1lbnRzIG9mIG9uZSBvZiB0aGUgZmlsdGVyIGRlY2xhcmF0aW9ucyBpbiB0aGUKLWRlcGxveW1lbnQgZGVzY3JpcHRvci4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZmlsdGVyLW5hbWUiCi0gICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZmlsdGVyLW5hbWVUeXBlIi8+Ci0gICAgICAgIDxjaG9pY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0idXJsLXBhdHRlcm4iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnVybC1wYXR0ZXJuVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlcnZsZXQtbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c2VydmxldC1uYW1lVHlwZSIvPgotICAgICAgICA8L2Nob2ljZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRpc3BhdGNoZXIiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRpc3BhdGNoZXJUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0iZmlsdGVyLW5hbWVUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGxvZ2ljYWwgbmFtZSBvZiB0aGUgZmlsdGVyIGlzIGRlY2xhcmUKLWJ5IHVzaW5nIGZpbHRlci1uYW1lVHlwZS4gVGhpcyBuYW1lIGlzIHVzZWQgdG8gbWFwIHRoZQotZmlsdGVyLiAgRWFjaCBmaWx0ZXIgbmFtZSBpcyB1bmlxdWUgd2l0aGluIHRoZSB3ZWIKLWFwcGxpY2F0aW9uLgotCi1Vc2VkIGluOiBmaWx0ZXIsIGZpbHRlci1tYXBwaW5nCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnN0cmluZyIvPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iZmlsdGVyVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBmaWx0ZXJUeXBlIGlzIHVzZWQgdG8gZGVjbGFyZSBhIGZpbHRlciBpbiB0aGUgd2ViCi1hcHBsaWNhdGlvbi4gVGhlIGZpbHRlciBpcyBtYXBwZWQgdG8gZWl0aGVyIGEgc2VydmxldCBvciBhCi1VUkwgcGF0dGVybiBpbiB0aGUgZmlsdGVyLW1hcHBpbmcgZWxlbWVudCwgdXNpbmcgdGhlCi1maWx0ZXItbmFtZSB2YWx1ZSB0byByZWZlcmVuY2UuIEZpbHRlcnMgY2FuIGFjY2VzcyB0aGUKLWluaXRpYWxpemF0aW9uIHBhcmFtZXRlcnMgZGVjbGFyZWQgaW4gdGhlIGRlcGxveW1lbnQKLWRlc2NyaXB0b3IgYXQgcnVudGltZSB2aWEgdGhlIEZpbHRlckNvbmZpZyBpbnRlcmZhY2UuCi0KLVVzZWQgaW46IHdlYi1hcHAKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRpc3BsYXktbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGlzcGxheS1uYW1lVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Imljb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmljb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImZpbHRlci1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpmaWx0ZXItbmFtZVR5cGUiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImZpbHRlci1jbGFzcyIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZnVsbHktcXVhbGlmaWVkLWNsYXNzVHlwZSI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBmdWxseSBxdWFsaWZpZWQgY2xhc3NuYW1lIG9mIHRoZSBmaWx0ZXIuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLQotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaW5pdC1wYXJhbSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cGFyYW0tdmFsdWVUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBpbml0LXBhcmFtIGVsZW1lbnQgY29udGFpbnMgYSBuYW1lL3ZhbHVlIHBhaXIgYXMKLSAgICAgICAgYW4gaW5pdGlhbGl6YXRpb24gcGFyYW0gb2YgYSBzZXJ2bGV0IGZpbHRlcgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iZm9ybS1sb2dpbi1jb25maWdUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGZvcm0tbG9naW4tY29uZmlnVHlwZSBzcGVjaWZpZXMgdGhlIGxvZ2luIGFuZCBlcnJvcgotcGFnZXMgdGhhdCBzaG91bGQgYmUgdXNlZCBpbiBmb3JtIGJhc2VkIGxvZ2luLiBJZiBmb3JtIGJhc2VkCi1hdXRoZW50aWNhdGlvbiBpcyBub3QgdXNlZCwgdGhlc2UgZWxlbWVudHMgYXJlIGlnbm9yZWQuCi0KLVVzZWQgaW46IGxvZ2luLWNvbmZpZwotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImZvcm0tbG9naW4tcGFnZSIKLSAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTp3YXItcGF0aFR5cGUiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgZm9ybS1sb2dpbi1wYWdlIGVsZW1lbnQgZGVmaW5lcyB0aGUgbG9jYXRpb24gaW4gdGhlIHdlYiBhcHAKLSAgICAgICAgd2hlcmUgdGhlIHBhZ2UgdGhhdCBjYW4gYmUgdXNlZCBmb3IgbG9naW4gY2FuIGJlIGZvdW5kLgotICAgICAgICBUaGUgcGF0aCBiZWdpbnMgd2l0aCBhIGxlYWRpbmcgLyBhbmQgaXMKLSAgICAgICAgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YgdGhlIFdBUi4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotCi0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJmb3JtLWVycm9yLXBhZ2UiCi0gICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6d2FyLXBhdGhUeXBlIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGZvcm0tZXJyb3ItcGFnZSBlbGVtZW50IGRlZmluZXMgdGhlIGxvY2F0aW9uIGluCi0gICAgICAgIHRoZSB3ZWIgYXBwIHdoZXJlIHRoZSBlcnJvciBwYWdlIHRoYXQgaXMgZGlzcGxheWVkCi0gICAgICAgIHdoZW4gbG9naW4gaXMgbm90IHN1Y2Nlc3NmdWwgY2FuIGJlIGZvdW5kLgotICAgICAgICBUaGUgcGF0aCBiZWdpbnMgd2l0aCBhIGxlYWRpbmcgLyBhbmQgaXMgaW50ZXJwcmV0ZWQKLSAgICAgICAgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YgdGhlIFdBUi4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotCi0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJodHRwLW1ldGhvZFR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotCi08eHNkOmRvY3VtZW50YXRpb24+Ci1UaGUgaHR0cC1tZXRob2QgY29udGFpbnMgYW4gSFRUUCBtZXRob2QgcmVjb2duaXplZCBieSB0aGUgd2ViLWFwcCwgaS5lLgotKEdFVCB8IFBPU1QgfC4uLikuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdFVCIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQT1NUIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBVVCIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJERUxFVEUiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSEVBRCIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPUFRJT05TIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRSQUNFIi8+Ci0gICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJsaXN0ZW5lclR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgbGlzdGVuZXJUeXBlIGluZGljYXRlcyB0aGUgZGVwbG95bWVudCBwcm9wZXJ0aWVzIGZvciBhIHdlYgotYXBwbGljYXRpb24gbGlzdGVuZXIgYmVhbi4KLQotVXNlZCBpbjogd2ViLWFwcDpsaXN0ZW5lclR5cGUKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkaXNwbGF5LW5hbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRpc3BsYXktbmFtZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaWNvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6aWNvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibGlzdGVuZXItY2xhc3MiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmZ1bGx5LXF1YWxpZmllZC1jbGFzc1R5cGUiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgbGlzdGVuZXItY2xhc3MgZWxlbWVudCBkZWNsYXJlcyBhIGNsYXNzIGluIHRoZQotICAgICAgICBhcHBsaWNhdGlvbiBtdXN0IGJlIHJlZ2lzdGVyZWQgYXMgYSB3ZWIKLSAgICAgICAgYXBwbGljYXRpb24gbGlzdGVuZXIgYmVhbi4gVGhlIHZhbHVlIGlzIHRoZSBmdWxseQotICAgICAgICBxdWFsaWZpZWQgY2xhc3NuYW1lIG9mIHRoZSBsaXN0ZW5lciBjbGFzcy4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImxvY2FsZS1lbmNvZGluZy1tYXBwaW5nLWxpc3RUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGxvY2FsZS1lbmNvZGluZy1tYXBwaW5nLWxpc3QgY29udGFpbnMgb25lIG9yIG1vcmUKLWxvY2FsZS1lbmNvZGluZy1tYXBwaW5nKHMpLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotPHhzZDpzZXF1ZW5jZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxlLWVuY29kaW5nLW1hcHBpbmciCi0gICAgICAgIHR5cGU9ImoyZWU6bG9jYWxlLWVuY29kaW5nLW1hcHBpbmdUeXBlIgotICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotPC94c2Q6c2VxdWVuY2U+Ci08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImxvY2FsZS1lbmNvZGluZy1tYXBwaW5nVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBsb2NhbGUtZW5jb2RpbmctbWFwcGluZyBjb250YWlucyBsb2NhbGUgbmFtZSBhbmQKLWVuY29kaW5nIG5hbWUuIFRoZSBsb2NhbGUgbmFtZSBtdXN0IGJlIGVpdGhlciAiTGFuZ3VhZ2UtY29kZSIsCi1zdWNoIGFzICJqYSIsIGRlZmluZWQgYnkgSVNPLTYzOSBvciAiTGFuZ3VhZ2UtY29kZV9Db3VudHJ5LWNvZGUiLAotc3VjaCBhcyAiamFfSlAiLiAgIkNvdW50cnkgY29kZSIgaXMgZGVmaW5lZCBieSBJU08tMzE2Ni4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLTx4c2Q6c2VxdWVuY2U+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsZSIKLSAgICAgICAgdHlwZT0iajJlZTpzdHJpbmciLz4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZW5jb2RpbmciCi0gICAgICAgIHR5cGU9ImoyZWU6c3RyaW5nIi8+Ci08L3hzZDpzZXF1ZW5jZT4KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ibG9naW4tY29uZmlnVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBsb2dpbi1jb25maWdUeXBlIGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBhdXRoZW50aWNhdGlvbgotbWV0aG9kIHRoYXQgc2hvdWxkIGJlIHVzZWQsIHRoZSByZWFsbSBuYW1lIHRoYXQgc2hvdWxkIGJlCi11c2VkIGZvciB0aGlzIGFwcGxpY2F0aW9uLCBhbmQgdGhlIGF0dHJpYnV0ZXMgdGhhdCBhcmUKLW5lZWRlZCBieSB0aGUgZm9ybSBsb2dpbiBtZWNoYW5pc20uCi0KLVVzZWQgaW46IHdlYi1hcHAKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iYXV0aC1tZXRob2QiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmF1dGgtbWV0aG9kVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icmVhbG0tbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c3RyaW5nIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgcmVhbG0gbmFtZSBlbGVtZW50IHNwZWNpZmllcyB0aGUgcmVhbG0gbmFtZSB0bwotICAgICAgICB1c2UgaW4gSFRUUCBCYXNpYyBhdXRob3JpemF0aW9uLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJmb3JtLWxvZ2luLWNvbmZpZyIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6Zm9ybS1sb2dpbi1jb25maWdUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ibWltZS1tYXBwaW5nVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBtaW1lLW1hcHBpbmdUeXBlIGRlZmluZXMgYSBtYXBwaW5nIGJldHdlZW4gYW4gZXh0ZW5zaW9uCi1hbmQgYSBtaW1lIHR5cGUuCi0KLVVzZWQgaW46IHdlYi1hcHAKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgZXh0ZW5zaW9uIGVsZW1lbnQgY29udGFpbnMgYSBzdHJpbmcgZGVzY3JpYmluZyBhbgotICAgICAgICBleHRlbnNpb24uIGV4YW1wbGU6ICJ0eHQiCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpzdHJpbmciLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im1pbWUtdHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bWltZS10eXBlVHlwZSIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0ibWltZS10eXBlVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBtaW1lLXR5cGVUeXBlIGlzIHVzZWQgdG8gaW5kaWNhdGUgYSBkZWZpbmVkIG1pbWUgdHlwZS4KLQotRXhhbXBsZToKLSJ0ZXh0L3BsYWluIgotCi1Vc2VkIGluOiBtaW1lLW1hcHBpbmcKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImoyZWU6c3RyaW5nIj4KLSAgICAgICAgPHhzZDpwYXR0ZXJuIHZhbHVlPSJbXHB7TH1cLVxwe05kfV0rL1tccHtMfVwtXHB7TmR9XC5dKyIvPgotICAgIDwveHNkOnJlc3RyaWN0aW9uPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ic2VjdXJpdHktY29uc3RyYWludFR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgc2VjdXJpdHktY29uc3RyYWludFR5cGUgaXMgdXNlZCB0byBhc3NvY2lhdGUKLXNlY3VyaXR5IGNvbnN0cmFpbnRzIHdpdGggb25lIG9yIG1vcmUgd2ViIHJlc291cmNlCi1jb2xsZWN0aW9ucwotCi1Vc2VkIGluOiB3ZWItYXBwCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRpc3BsYXktbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGlzcGxheS1uYW1lVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJ3ZWItcmVzb3VyY2UtY29sbGVjdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6d2ViLXJlc291cmNlLWNvbGxlY3Rpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImF1dGgtY29uc3RyYWludCIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6YXV0aC1jb25zdHJhaW50VHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0idXNlci1kYXRhLWNvbnN0cmFpbnQiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnVzZXItZGF0YS1jb25zdHJhaW50VHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9InNlcnZsZXQtbWFwcGluZ1R5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgc2VydmxldC1tYXBwaW5nVHlwZSBkZWZpbmVzIGEgbWFwcGluZyBiZXR3ZWVuIGEKLXNlcnZsZXQgYW5kIGEgdXJsIHBhdHRlcm4uCi0KLVVzZWQgaW46IHdlYi1hcHAKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ic2VydmxldC1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpzZXJ2bGV0LW5hbWVUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJ1cmwtcGF0dGVybiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6dXJsLXBhdHRlcm5UeXBlIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJzZXJ2bGV0LW5hbWVUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIHNlcnZsZXQtbmFtZSBlbGVtZW50IGNvbnRhaW5zIHRoZSBjYW5vbmljYWwgbmFtZSBvZiB0aGUKLXNlcnZsZXQuIEVhY2ggc2VydmxldCBuYW1lIGlzIHVuaXF1ZSB3aXRoaW4gdGhlIHdlYgotYXBwbGljYXRpb24uCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnN0cmluZyIvPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ic2VydmxldFR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgc2VydmxldFR5cGUgaXMgdXNlZCB0byBkZWNsYXJlIGEgc2VydmxldC4KLUl0IGNvbnRhaW5zIHRoZSBkZWNsYXJhdGl2ZSBkYXRhIG9mIGEKLXNlcnZsZXQuIElmIGEganNwLWZpbGUgaXMgc3BlY2lmaWVkIGFuZCB0aGUgbG9hZC1vbi1zdGFydHVwCi1lbGVtZW50IGlzIHByZXNlbnQsIHRoZW4gdGhlIEpTUCBzaG91bGQgYmUgcHJlY29tcGlsZWQgYW5kCi1sb2FkZWQuCi0KLVVzZWQgaW46IHdlYi1hcHAKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRpc3BsYXktbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGlzcGxheS1uYW1lVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Imljb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmljb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlcnZsZXQtbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c2VydmxldC1uYW1lVHlwZSIvPgotICAgICAgICA8Y2hvaWNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlcnZsZXQtY2xhc3MiCi0gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpmdWxseS1xdWFsaWZpZWQtY2xhc3NUeXBlIj4KLSAgICAgICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICAgICAgVGhlIHNlcnZsZXQtY2xhc3MgZWxlbWVudCBjb250YWlucyB0aGUgZnVsbHkKLSAgICAgICAgICAgIHF1YWxpZmllZCBjbGFzcyBuYW1lIG9mIHRoZSBzZXJ2bGV0LgotCi0gICAgICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJqc3AtZmlsZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmpzcC1maWxlVHlwZSIvPgotCi0gICAgICAgIDwvY2hvaWNlPgotCi0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJpbml0LXBhcmFtIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpwYXJhbS12YWx1ZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJsb2FkLW9uLXN0YXJ0dXAiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4c2Q6aW50ZWdlciIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBsb2FkLW9uLXN0YXJ0dXAgZWxlbWVudCBpbmRpY2F0ZXMgdGhhdCB0aGlzCi0gICAgICAgIHNlcnZsZXQgc2hvdWxkIGJlIGxvYWRlZCAoaW5zdGFudGlhdGVkIGFuZCBoYXZlCi0gICAgICAgIGl0cyBpbml0KCkgY2FsbGVkKSBvbiB0aGUgc3RhcnR1cCBvZiB0aGUgd2ViCi0gICAgICAgIGFwcGxpY2F0aW9uLiBUaGUgb3B0aW9uYWwgY29udGVudHMgb2YgdGhlc2UKLSAgICAgICAgZWxlbWVudCBtdXN0IGJlIGFuIGludGVnZXIgaW5kaWNhdGluZyB0aGUgb3JkZXIgaW4KLSAgICAgICAgd2hpY2ggdGhlIHNlcnZsZXQgc2hvdWxkIGJlIGxvYWRlZC4gSWYgdGhlIHZhbHVlCi0gICAgICAgIGlzIGEgbmVnYXRpdmUgaW50ZWdlciwgb3IgdGhlIGVsZW1lbnQgaXMgbm90Ci0gICAgICAgIHByZXNlbnQsIHRoZSBjb250YWluZXIgaXMgZnJlZSB0byBsb2FkIHRoZSBzZXJ2bGV0Ci0gICAgICAgIHdoZW5ldmVyIGl0IGNob29zZXMuIElmIHRoZSB2YWx1ZSBpcyBhIHBvc2l0aXZlCi0gICAgICAgIGludGVnZXIgb3IgMCwgdGhlIGNvbnRhaW5lciBtdXN0IGxvYWQgYW5kCi0gICAgICAgIGluaXRpYWxpemUgdGhlIHNlcnZsZXQgYXMgdGhlIGFwcGxpY2F0aW9uIGlzCi0gICAgICAgIGRlcGxveWVkLiBUaGUgY29udGFpbmVyIG11c3QgZ3VhcmFudGVlIHRoYXQKLSAgICAgICAgc2VydmxldHMgbWFya2VkIHdpdGggbG93ZXIgaW50ZWdlcnMgYXJlIGxvYWRlZAotICAgICAgICBiZWZvcmUgc2VydmxldHMgbWFya2VkIHdpdGggaGlnaGVyIGludGVnZXJzLiBUaGUKLSAgICAgICAgY29udGFpbmVyIG1heSBjaG9vc2UgdGhlIG9yZGVyIG9mIGxvYWRpbmcgb2YKLSAgICAgICAgc2VydmxldHMgd2l0aCB0aGUgc2FtZSBsb2FkLW9uLXN0YXJ0LXVwIHZhbHVlLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJydW4tYXMiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnJ1bi1hc1R5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlY3VyaXR5LXJvbGUtcmVmIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpzZWN1cml0eS1yb2xlLXJlZlR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXBsb3ltZW50LWV4dGVuc2lvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVwbG95bWVudC1leHRlbnNpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJzZXNzaW9uLWNvbmZpZ1R5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgc2Vzc2lvbi1jb25maWdUeXBlIGRlZmluZXMgdGhlIHNlc3Npb24gcGFyYW1ldGVycwotZm9yIHRoaXMgd2ViIGFwcGxpY2F0aW9uLgotCi1Vc2VkIGluOiB3ZWItYXBwCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlc3Npb24tdGltZW91dCIKLSAgICAgICAgICAgICAgICAgdHlwZT0ieHNkOm5vbk5lZ2F0aXZlSW50ZWdlciIKLSAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIHNlc3Npb24tdGltZW91dCBlbGVtZW50IGRlZmluZXMgdGhlIGRlZmF1bHQKLSAgICAgICAgc2Vzc2lvbiB0aW1lb3V0IGludGVydmFsIGZvciBhbGwgc2Vzc2lvbnMgY3JlYXRlZAotICAgICAgICBpbiB0aGlzIHdlYiBhcHBsaWNhdGlvbi4gVGhlIHNwZWNpZmllZCB0aW1lb3V0Ci0gICAgICAgIG11c3QgYmUgZXhwcmVzc2VkIGluIGEgd2hvbGUgbnVtYmVyIG9mIG1pbnV0ZXMuCi0gICAgICAgIElmIHRoZSB0aW1lb3V0IGlzIDAgb3IgbGVzcywgdGhlIGNvbnRhaW5lciBlbnN1cmVzCi0gICAgICAgIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBvZiBzZXNzaW9ucyBpcyBuZXZlciB0byB0aW1lCi0gICAgICAgIG91dC4gSWYgdGhpcyBlbGVtZW50IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBjb250YWluZXIKLSAgICAgICAgbXVzdCBzZXQgaXRzIGRlZmF1bHQgdGltZW91dCBwZXJpb2QuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9InRyYW5zcG9ydC1ndWFyYW50ZWVUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIHRyYW5zcG9ydC1ndWFyYW50ZWVUeXBlIHNwZWNpZmllcyB0aGF0IHRoZSBjb21tdW5pY2F0aW9uCi1iZXR3ZWVuIGNsaWVudCBhbmQgc2VydmVyIHNob3VsZCBiZSBOT05FLCBJTlRFR1JBTCwgb3IKLUNPTkZJREVOVElBTC4gTk9ORSBtZWFucyB0aGF0IHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdAotcmVxdWlyZSBhbnkgdHJhbnNwb3J0IGd1YXJhbnRlZXMuIEEgdmFsdWUgb2YgSU5URUdSQUwgbWVhbnMKLXRoYXQgdGhlIGFwcGxpY2F0aW9uIHJlcXVpcmVzIHRoYXQgdGhlIGRhdGEgc2VudCBiZXR3ZWVuIHRoZQotY2xpZW50IGFuZCBzZXJ2ZXIgYmUgc2VudCBpbiBzdWNoIGEgd2F5IHRoYXQgaXQgY2FuJ3QgYmUKLWNoYW5nZWQgaW4gdHJhbnNpdC4gQ09ORklERU5USUFMIG1lYW5zIHRoYXQgdGhlIGFwcGxpY2F0aW9uCi1yZXF1aXJlcyB0aGF0IHRoZSBkYXRhIGJlIHRyYW5zbWl0dGVkIGluIGEgZmFzaGlvbiB0aGF0Ci1wcmV2ZW50cyBvdGhlciBlbnRpdGllcyBmcm9tIG9ic2VydmluZyB0aGUgY29udGVudHMgb2YgdGhlCi10cmFuc21pc3Npb24uIEluIG1vc3QgY2FzZXMsIHRoZSBwcmVzZW5jZSBvZiB0aGUgSU5URUdSQUwgb3IKLUNPTkZJREVOVElBTCBmbGFnIHdpbGwgaW5kaWNhdGUgdGhhdCB0aGUgdXNlIG9mIFNTTCBpcwotcmVxdWlyZWQuCi0KLVVzZWQgaW46IHVzZXItZGF0YS1jb25zdHJhaW50Ci0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5PTkUiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSU5URUdSQUwiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ09ORklERU5USUFMIi8+Ci0gICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJ1c2VyLWRhdGEtY29uc3RyYWludFR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgdXNlci1kYXRhLWNvbnN0cmFpbnRUeXBlIGlzIHVzZWQgdG8gaW5kaWNhdGUgaG93Ci1kYXRhIGNvbW11bmljYXRlZCBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIGNvbnRhaW5lciBzaG91bGQgYmUKLXByb3RlY3RlZC4KLQotVXNlZCBpbjogc2VjdXJpdHktY29uc3RyYWludAotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InRyYW5zcG9ydC1ndWFyYW50ZWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnRyYW5zcG9ydC1ndWFyYW50ZWVUeXBlIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJ3ZWItYXBwLXZlcnNpb25UeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhpcyB0eXBlIGNvbnRhaW5zIHRoZSByZWNvZ25pemVkIHZlcnNpb25zIG9mCi13ZWItYXBwbGljYXRpb24gc3VwcG9ydGVkLiBJdCBpcyB1c2VkIHRvIGRlc2lnbmF0ZSB0aGUKLXZlcnNpb24gb2YgdGhlIHdlYiBhcHBsaWNhdGlvbi4KLQotRXhhbXBsZToKLQotPHdlYi1hcHA+Ci0gICAgPHZlcnNpb24+Mi40PC92ZXJzaW9uPgotLi4uCi08L3dlYi1hcHA+Ci0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjIuNCIvPgotICAgIDwveHNkOnJlc3RyaWN0aW9uPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0id2ViLWFwcFR5cGUiPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXNjcmlwdGlvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGlzcGxheS1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkaXNwbGF5LW5hbWVUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Imljb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmljb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRpc3RyaWJ1dGFibGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVtcHR5VHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iY29udGV4dC1wYXJhbSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cGFyYW0tdmFsdWVUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBjb250ZXh0LXBhcmFtIGVsZW1lbnQgY29udGFpbnMgdGhlIGRlY2xhcmF0aW9uCi0gICAgICAgIG9mIGEgd2ViIGFwcGxpY2F0aW9uJ3Mgc2VydmxldCBjb250ZXh0Ci0gICAgICAgIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlcnMuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLQotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZmlsdGVyIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpmaWx0ZXJUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZmlsdGVyLW1hcHBpbmciCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmZpbHRlci1tYXBwaW5nVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJsaXN0ZW5lciIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bGlzdGVuZXJUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlcnZsZXQiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnNlcnZsZXRUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlcnZsZXQtbWFwcGluZyIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c2VydmxldC1tYXBwaW5nVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzZXNzaW9uLWNvbmZpZyIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c2Vzc2lvbi1jb25maWdUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJtaW1lLW1hcHBpbmciCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOm1pbWUtbWFwcGluZ1R5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0id2VsY29tZS1maWxlLWxpc3QiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOndlbGNvbWUtZmlsZS1saXN0VHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZXJyb3ItcGFnZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZXJyb3ItcGFnZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ianNwLWNvbmZpZyIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6anNwLWNvbmZpZ1R5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJlc291cmNlLWVudi1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnJlc291cmNlLWVudi1yZWZUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im1lc3NhZ2UtZGVzdGluYXRpb24tcmVmIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTptZXNzYWdlLWRlc3RpbmF0aW9uLXJlZlR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icmVzb3VyY2UtcmVmIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpyZXNvdXJjZS1yZWZUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlY3VyaXR5LWNvbnN0cmFpbnQiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnNlY3VyaXR5LWNvbnN0cmFpbnRUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImxvZ2luLWNvbmZpZyIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bG9naW4tY29uZmlnVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ic2VjdXJpdHktcm9sZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c2VjdXJpdHktcm9sZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZW52LWVudHJ5IgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplbnYtZW50cnlUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVqYi1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVqYi1yZWZUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVqYi1sb2NhbC1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVqYi1sb2NhbC1yZWZUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im1lc3NhZ2UtZGVzdGluYXRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOm1lc3NhZ2UtZGVzdGluYXRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsZS1lbmNvZGluZy1tYXBwaW5nLWxpc3QiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmxvY2FsZS1lbmNvZGluZy1tYXBwaW5nLWxpc3RUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSIxIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXBsb3ltZW50LWV4dGVuc2lvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVwbG95bWVudC1leHRlbnNpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9InZlcnNpb24iCi0gICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTp3ZWItYXBwLXZlcnNpb25UeXBlIgotICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJ3ZWItcmVzb3VyY2UtY29sbGVjdGlvblR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgd2ViLXJlc291cmNlLWNvbGxlY3Rpb25UeXBlIGlzIHVzZWQgdG8gaWRlbnRpZnkgYSBzdWJzZXQKLW9mIHRoZSByZXNvdXJjZXMgYW5kIEhUVFAgbWV0aG9kcyBvbiB0aG9zZSByZXNvdXJjZXMgd2l0aGluCi1hIHdlYiBhcHBsaWNhdGlvbiB0byB3aGljaCBhIHNlY3VyaXR5IGNvbnN0cmFpbnQgYXBwbGllcy4gSWYKLW5vIEhUVFAgbWV0aG9kcyBhcmUgc3BlY2lmaWVkLCB0aGVuIHRoZSBzZWN1cml0eSBjb25zdHJhaW50Ci1hcHBsaWVzIHRvIGFsbCBIVFRQIG1ldGhvZHMuCi0KLVVzZWQgaW46IHNlY3VyaXR5LWNvbnN0cmFpbnQKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0id2ViLXJlc291cmNlLW5hbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSB3ZWItcmVzb3VyY2UtbmFtZSBjb250YWlucyB0aGUgbmFtZSBvZiB0aGlzIHdlYgotICAgICAgICByZXNvdXJjZSBjb2xsZWN0aW9uLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InVybC1wYXR0ZXJuIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTp1cmwtcGF0dGVyblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaHR0cC1tZXRob2QiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmh0dHAtbWV0aG9kVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJ3ZWxjb21lLWZpbGUtbGlzdFR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgd2VsY29tZS1maWxlLWxpc3QgY29udGFpbnMgYW4gb3JkZXJlZCBsaXN0IG9mIHdlbGNvbWUKLWZpbGVzIGVsZW1lbnRzLgotCi1Vc2VkIGluOiB3ZWItYXBwCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IndlbGNvbWUtZmlsZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c3RyaW5nIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgd2VsY29tZS1maWxlIGVsZW1lbnQgY29udGFpbnMgZmlsZSBuYW1lIHRvIHVzZQotICAgICAgICBhcyBhIGRlZmF1bHQgd2VsY29tZSBmaWxlLCBzdWNoIGFzIGluZGV4Lmh0bWwKLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPC94c2Q6c2NoZW1hPgotCmRpZmYgLS1naXQgYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9wcmljZXF1b3RlL1ByaWNlUXVvdGUueHNkIGIvdjIvdGVzdC9jYXNlcy9zY2hlbWEvcHJpY2VxdW90ZS9QcmljZVF1b3RlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjY3MmZiZC4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9wcmljZXF1b3RlL1ByaWNlUXVvdGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9InByaWNlLXF1b3RlIj4KLSAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0ic3RvY2stc3ltYm9sIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0iMSIvPgotICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9InN0b2NrLXByaWNlIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0iMSIvPgotICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgPCEtLSBYWFhTSk0gY2hhbmdlIGZvbGxvd2luZyB0byB1c2UgcmVmaW5lZCBkYXRhdHlwZXMgLS0+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9InN0b2NrLXN5bWJvbCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzdG9jay1wcmljZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotPC94c2Q6c2NoZW1hPgotCmRpZmYgLS1naXQgYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9yYS9yYS54c2QgYi92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9yYS9yYS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2OWQxMjguLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvcmEvcmEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPHhzOnNjaGVtYQotICAgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgeG1sbnM6bXQ9Imh0dHA6Ly9vcGVudXJpLm9yZy9teXRlc3Qvcm93c2FmZmVjdGVkIgotICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vb3BlbnVyaS5vcmcvbXl0ZXN0L3Jvd3NhZmZlY3RlZCIKLSAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotICAgYXR0cmlidXRlRm9ybURlZmF1bHQ9InVucXVhbGlmaWVkIgotPgotCi0gIDx4czplbGVtZW50IG5hbWU9InJvd3NBZmZlY3RlZCIgdHlwZT0ieHM6aW50Ii8+Ci0KLTwveHM6c2NoZW1hPgotCmRpZmYgLS1naXQgYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9zNHMvWE1MLnhzZCBiL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL3M0cy9YTUwueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjhhZGQ5Li4wMDAwMDAwCi0tLSBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL3M0cy9YTUwueHNkCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJz8+Ci08IURPQ1RZUEUgeHM6c2NoZW1hIFBVQkxJQyAiLS8vVzNDLy9EVEQgWE1MU0NIRU1BIDIwMDEwMi8vRU4iICJYTUxTY2hlbWEuZHRkIiA+Ci08eHM6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbDpsYW5nPSJlbiI+Ci0KLSA8eHM6YW5ub3RhdGlvbj4KLSAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBTZWUgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLmh0bWwgYW5kCi0gICBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIG5hbWVzcGFjZS4KLSAgPC94czpkb2N1bWVudGF0aW9uPgotIDwveHM6YW5ub3RhdGlvbj4KLQotIDx4czphbm5vdGF0aW9uPgotICA8eHM6ZG9jdW1lbnRhdGlvbj5UaGlzIHNjaGVtYSBkZWZpbmVzIGF0dHJpYnV0ZXMgYW5kIGFuIGF0dHJpYnV0ZSBncm91cAotICAgICAgICBzdWl0YWJsZSBmb3IgdXNlIGJ5Ci0gICAgICAgIHNjaGVtYXMgd2lzaGluZyB0byBhbGxvdyB4bWw6YmFzZSwgeG1sOmxhbmcgb3IgeG1sOnNwYWNlIGF0dHJpYnV0ZXMKLSAgICAgICAgb24gZWxlbWVudHMgdGhleSBkZWZpbmUuCi0KLSAgICAgICAgVG8gZW5hYmxlIHRoaXMsIHN1Y2ggYSBzY2hlbWEgbXVzdCBpbXBvcnQgdGhpcyBzY2hlbWEKLSAgICAgICAgZm9yIHRoZSBYTUwgbmFtZXNwYWNlLCBlLmcuIGFzIGZvbGxvd3M6Ci0gICAgICAgICZsdDtzY2hlbWEgLiAuIC4+Ci0gICAgICAgICAuIC4gLgotICAgICAgICAgJmx0O2ltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIKLSAgICAgICAgICAgICAgICAgICAgc2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDMveG1sLnhzZCIvPgotCi0gICAgICAgIFN1YnNlcXVlbnRseSwgcXVhbGlmaWVkIHJlZmVyZW5jZSB0byBhbnkgb2YgdGhlIGF0dHJpYnV0ZXMKLSAgICAgICAgb3IgdGhlIGdyb3VwIGRlZmluZWQgYmVsb3cgd2lsbCBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdCwgZS5nLgotCi0gICAgICAgICZsdDt0eXBlIC4gLiAuPgotICAgICAgICAgLiAuIC4KLSAgICAgICAgICZsdDthdHRyaWJ1dGVHcm91cCByZWY9InhtbDpzcGVjaWFsQXR0cnMiLz4KLSAKLSAgICAgICAgIHdpbGwgZGVmaW5lIGEgdHlwZSB3aGljaCB3aWxsIHNjaGVtYS12YWxpZGF0ZSBhbiBpbnN0YW5jZQotICAgICAgICAgZWxlbWVudCB3aXRoIGFueSBvZiB0aG9zZSBhdHRyaWJ1dGVzPC94czpkb2N1bWVudGF0aW9uPgotIDwveHM6YW5ub3RhdGlvbj4KLQotIDx4czphbm5vdGF0aW9uPgotICA8eHM6ZG9jdW1lbnRhdGlvbj5JbiBrZWVwaW5nIHdpdGggdGhlIFhNTCBTY2hlbWEgV0cncyBzdGFuZGFyZCB2ZXJzaW9uaW5nCi0gICBwb2xpY3ksIHRoaXMgc2NoZW1hIGRvY3VtZW50IHdpbGwgcGVyc2lzdCBhdAotICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS8wMy94bWwueHNkLgotICAgQXQgdGhlIGRhdGUgb2YgaXNzdWUgaXQgY2FuIGFsc28gYmUgZm91bmQgYXQKLSAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZC4KLSAgIFRoZSBzY2hlbWEgZG9jdW1lbnQgYXQgdGhhdCBVUkkgbWF5IGhvd2V2ZXIgY2hhbmdlIGluIHRoZSBmdXR1cmUsCi0gICBpbiBvcmRlciB0byByZW1haW4gY29tcGF0aWJsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBYTUwgU2NoZW1hCi0gICBpdHNlbGYuICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIFhNTCBTY2hlbWEgbmFtZXNwYWNlIGNoYW5nZXMsIHRoZSB2ZXJzaW9uCi0gICBvZiB0aGlzIGRvY3VtZW50IGF0Ci0gICBodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2Qgd2lsbCBjaGFuZ2UKLSAgIGFjY29yZGluZ2x5OyB0aGUgdmVyc2lvbiBhdAotICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS8wMy94bWwueHNkIHdpbGwgbm90IGNoYW5nZS4KLSAgPC94czpkb2N1bWVudGF0aW9uPgotIDwveHM6YW5ub3RhdGlvbj4KLQotIDx4czphdHRyaWJ1dGUgbmFtZT0ibGFuZyIgdHlwZT0ieHM6bGFuZ3VhZ2UiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPkluIGR1ZSBjb3Vyc2UsIHdlIHNob3VsZCBpbnN0YWxsIHRoZSByZWxldmFudCBJU08gMi0gYW5kIDMtbGV0dGVyCi0gICAgICAgICBjb2RlcyBhcyB0aGUgZW51bWVyYXRlZCBwb3NzaWJsZSB2YWx1ZXMgLiAuIC48L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSA8L3hzOmF0dHJpYnV0ZT4KLQotIDx4czphdHRyaWJ1dGUgbmFtZT0ic3BhY2UiIGRlZmF1bHQ9InByZXNlcnZlIj4KLSAgPHhzOnNpbXBsZVR5cGU+Ci0gICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6TkNOYW1lIj4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImRlZmF1bHQiLz4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InByZXNlcnZlIi8+Ci0gICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0gPC94czphdHRyaWJ1dGU+Ci0KLSA8eHM6YXR0cmlidXRlIG5hbWU9ImJhc2UiIHR5cGU9InhzOmFueVVSSSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+U2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL3htbGJhc2UvIGZvcgotICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBhdHRyaWJ1dGUuPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czphdHRyaWJ1dGU+Ci0KLSA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3BlY2lhbEF0dHJzIj4KLSAgPHhzOmF0dHJpYnV0ZSByZWY9InhtbDpiYXNlIi8+Ci0gIDx4czphdHRyaWJ1dGUgcmVmPSJ4bWw6bGFuZyIvPgotICA8eHM6YXR0cmlidXRlIHJlZj0ieG1sOnNwYWNlIi8+Ci0gPC94czphdHRyaWJ1dGVHcm91cD4KLQotPC94czpzY2hlbWE+CmRpZmYgLS1naXQgYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9zNHMvWE1MU2NoZW1hLnhzZCBiL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL3M0cy9YTUxTY2hlbWEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Zjc3MjUxLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL3M0cy9YTUxTY2hlbWEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjUwMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBYTUwgU2NoZW1hIHNjaGVtYSBmb3IgWE1MIFNjaGVtYXM6IFBhcnQgMTogU3RydWN0dXJlcyAtLT4KLTwhLS0gTm90ZSB0aGlzIHNjaGVtYSBpcyBOT1QgdGhlIG5vcm1hdGl2ZSBzdHJ1Y3R1cmVzIHNjaGVtYS4gLS0+Ci0KLTwhLS0gVGhlIHByb3NlIGNvcHkgaW4gdGhlIHN0cnVjdHVyZXMgUkVDIGlzIHRoZSBub3JtYXRpdmUgLS0+Ci0KLTwhLS0gdmVyc2lvbiAod2hpY2ggc2hvdWxkbid0IGRpZmZlciBmcm9tIHRoaXMgb25lIGV4Y2VwdCBmb3IgLS0+Ci0KLTwhLS0gdGhpcyBjb21tZW50IGFuZCBlbnRpdHkgZXhwYW5zaW9ucywgYnV0IGp1c3QgaW4gY2FzZSAtLT4KLQotPCFET0NUWVBFIHhzOnNjaGVtYSBQVUJMSUMgIi0vL1czQy8vRFREIFhNTFNDSEVNQSAyMDAxMDIvL0VOIiAiWE1MU2NoZW1hLmR0ZCIgWwotCi08IS0tIHByb3ZpZGUgSUQgdHlwZSBpbmZvcm1hdGlvbiBldmVuIGZvciBwYXJzZXJzIHdoaWNoIG9ubHkgcmVhZCB0aGUKLSAgICAgaW50ZXJuYWwgc3Vic2V0IC0tPgotPCFBVFRMSVNUIHhzOnNjaGVtYSAgICAgICAgICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOmNvbXBsZXhUeXBlICAgICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOmNvbXBsZXhDb250ZW50ICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOnNpbXBsZUNvbnRlbnQgICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOmV4dGVuc2lvbiAgICAgICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOmVsZW1lbnQgICAgICAgICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOmdyb3VwICAgICAgICAgICBpZCAgSUQgICNJTVBMSUVEPiAKLTwhQVRUTElTVCB4czphbGwgICAgICAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czpjaG9pY2UgICAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czpzZXF1ZW5jZSAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czphbnkgICAgICAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czphbnlBdHRyaWJ1dGUgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czphdHRyaWJ1dGUgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czphdHRyaWJ1dGVHcm91cCAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czp1bmlxdWUgICAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czprZXkgICAgICAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czprZXlyZWYgICAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czpzZWxlY3RvciAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czpmaWVsZCAgICAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czppbmNsdWRlICAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czppbXBvcnQgICAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czpyZWRlZmluZSAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czpub3RhdGlvbiAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhLS0KLSAgICAga2VlcCB0aGlzIHNjaGVtYSBYTUwxLjAgRFREIHZhbGlkCi0gIC0tPgotICAgICAgICA8IUVOVElUWSAlIHNjaGVtYUF0dHJzICd4bWxuczpoZnAgQ0RBVEEgI0lNUExJRUQnPgotCi0gICAgICAgIDwhRUxFTUVOVCBoZnA6aGFzRmFjZXQgRU1QVFk+Ci0gICAgICAgIDwhQVRUTElTVCBoZnA6aGFzRmFjZXQKLSAgICAgICAgICAgICAgICBuYW1lIE5NVE9LRU4gI1JFUVVJUkVEPgotCi0gICAgICAgIDwhRUxFTUVOVCBoZnA6aGFzUHJvcGVydHkgRU1QVFk+Ci0gICAgICAgIDwhQVRUTElTVCBoZnA6aGFzUHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lIE5NVE9LRU4gI1JFUVVJUkVECi0gICAgICAgICAgICAgICAgdmFsdWUgQ0RBVEEgI1JFUVVJUkVEPgotPCEtLQotICAgICAgICBNYWtlIHN1cmUgdGhhdCBwcm9jZXNzb3JzIHRoYXQgZG8gbm90IHJlYWQgdGhlIGV4dGVybmFsCi0gICAgICAgIHN1YnNldCB3aWxsIGtub3cgYWJvdXQgdGhlIHZhcmlvdXMgSURzIHdlIGRlY2xhcmUKLSAgLS0+Ci0gICAgICAgIDwhQVRUTElTVCB4czpzaW1wbGVUeXBlIGlkIElEICNJTVBMSUVEPgotICAgICAgICA8IUFUVExJU1QgeHM6bWF4RXhjbHVzaXZlIGlkIElEICNJTVBMSUVEPgotICAgICAgICA8IUFUVExJU1QgeHM6bWluRXhjbHVzaXZlIGlkIElEICNJTVBMSUVEPgotICAgICAgICA8IUFUVExJU1QgeHM6bWF4SW5jbHVzaXZlIGlkIElEICNJTVBMSUVEPgotICAgICAgICA8IUFUVExJU1QgeHM6bWluSW5jbHVzaXZlIGlkIElEICNJTVBMSUVEPgotICAgICAgICA8IUFUVExJU1QgeHM6dG90YWxEaWdpdHMgaWQgSUQgI0lNUExJRUQ+Ci0gICAgICAgIDwhQVRUTElTVCB4czpmcmFjdGlvbkRpZ2l0cyBpZCBJRCAjSU1QTElFRD4KLSAgICAgICAgPCFBVFRMSVNUIHhzOmxlbmd0aCBpZCBJRCAjSU1QTElFRD4KLSAgICAgICAgPCFBVFRMSVNUIHhzOm1pbkxlbmd0aCBpZCBJRCAjSU1QTElFRD4KLSAgICAgICAgPCFBVFRMSVNUIHhzOm1heExlbmd0aCBpZCBJRCAjSU1QTElFRD4KLSAgICAgICAgPCFBVFRMSVNUIHhzOmVudW1lcmF0aW9uIGlkIElEICNJTVBMSUVEPgotICAgICAgICA8IUFUVExJU1QgeHM6cGF0dGVybiBpZCBJRCAjSU1QTElFRD4KLSAgICAgICAgPCFBVFRMSVNUIHhzOmFwcGluZm8gaWQgSUQgI0lNUExJRUQ+Ci0gICAgICAgIDwhQVRUTElTVCB4czpkb2N1bWVudGF0aW9uIGlkIElEICNJTVBMSUVEPgotICAgICAgICA8IUFUVExJU1QgeHM6bGlzdCBpZCBJRCAjSU1QTElFRD4KLSAgICAgICAgPCFBVFRMSVNUIHhzOnVuaW9uIGlkIElEICNJTVBMSUVEPgotICAgICAgICBdPgotPHhzOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBibG9ja0RlZmF1bHQ9IiNhbGwiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB2ZXJzaW9uPSIxLjAiIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sOmxhbmc9IkVOIiB4bWxuczpoZnA9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWhhc0ZhY2V0QW5kUHJvcGVydHkiPgotIDx4czphbm5vdGF0aW9uPgotICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICBQYXJ0IDEgdmVyc2lvbjogSWQ6IFhNTFNjaGVtYS54c2QsdiAxLjUzIDIwMDMvMDIvMjQgMTc6NDA6MDcgaHQgRXhwIAotICAgIFBhcnQgMiB2ZXJzaW9uOiBJZDogZGF0YXR5cGVzLnhzZCx2IDEuNTggMjAwMy8wMi8yNiAxNDowMToyOSBodCBFeHAgCi0gIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSA8L3hzOmFubm90YXRpb24+Ci0KLQotIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvR3JvdXAvMjAwMi8wOS94bWxzY2hlbWEtMS9zdHJ1Y3R1cmVzLXdpdGgtZXJyYXRhLmh0bWwiPgotICAgVGhlIHNjaGVtYSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgZG9jdW1lbnQgaXMgbm9ybWF0aXZlLAotICAgd2l0aCByZXNwZWN0IHRvIHRoZSBzeW50YWN0aWMgY29uc3RyYWludHMgaXQgZXhwcmVzc2VzIGluIHRoZQotICAgWE1MIFNjaGVtYSBsYW5ndWFnZS4gIFRoZSBkb2N1bWVudGF0aW9uICh3aXRoaW4gJmx0O2RvY3VtZW50YXRpb24+IGVsZW1lbnRzKQotICAgYmVsb3csIGlzIG5vdCBub3JtYXRpdmUsIGJ1dCByYXRoZXIgaGlnaGxpZ2h0cyBpbXBvcnRhbnQgYXNwZWN0cyBvZgotICAgdGhlIFczQyBSZWNvbW1lbmRhdGlvbiBvZiB3aGljaCB0aGlzIGlzIGEgcGFydDwveHM6ZG9jdW1lbnRhdGlvbj4KLSA8L3hzOmFubm90YXRpb24+Ci0KLSA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgVGhlIHNpbXBsZVR5cGUgZWxlbWVudCBhbmQgYWxsIG9mIGl0cyBtZW1iZXJzIGFyZSBkZWZpbmVkCi0gICAgICB0b3dhcmRzIHRoZSBlbmQgb2YgdGhpcyBzY2hlbWEgZG9jdW1lbnQ8L3hzOmRvY3VtZW50YXRpb24+Ci0gPC94czphbm5vdGF0aW9uPgotCi0gPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIgc2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCI+Ci0gICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgR2V0IGFjY2VzcyB0byB0aGUgeG1sOiBhdHRyaWJ1dGUgZ3JvdXBzIGZvciB4bWw6bGFuZwotICAgICAgIGFzIGRlY2xhcmVkIG9uICdzY2hlbWEnIGFuZCAnZG9jdW1lbnRhdGlvbicgYmVsb3cKLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgPC94czphbm5vdGF0aW9uPgotIDwveHM6aW1wb3J0PgotCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9Im9wZW5BdHRycyI+Ci0gICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgVGhpcyB0eXBlIGlzIGV4dGVuZGVkIGJ5IGFsbW9zdCBhbGwgc2NoZW1hIHR5cGVzCi0gICAgICAgdG8gYWxsb3cgYXR0cmlidXRlcyBmcm9tIG90aGVyIG5hbWVzcGFjZXMgdG8gYmUKLSAgICAgICBhZGRlZCB0byB1c2VyIHNjaGVtYXMuCi0gICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgIDwveHM6YW5ub3RhdGlvbj4KLSAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVR5cGUiPgotICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgPC94czpjb21wbGV4Q29udGVudD4KLSA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImFubm90YXRlZCI+Ci0gICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgVGhpcyB0eXBlIGlzIGV4dGVuZGVkIGJ5IGFsbCB0eXBlcyB3aGljaCBhbGxvdyBhbm5vdGF0aW9uCi0gICAgICAgb3RoZXIgdGhhbiAmbHQ7c2NoZW1hJmd0OyBpdHNlbGYKLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgPC94czphbm5vdGF0aW9uPgotICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOm9wZW5BdHRycyI+Ci0gICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICA8L3hzOnNlcXVlbmNlPgotICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InhzOklEIi8+Ci0gICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgPC94czpjb21wbGV4Q29udGVudD4KLSA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmdyb3VwIG5hbWU9InNjaGVtYVRvcCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBUaGlzIGdyb3VwIGlzIGZvciB0aGUKLSAgIGVsZW1lbnRzIHdoaWNoIG9jY3VyIGZyZWVseSBhdCB0aGUgdG9wIGxldmVsIG9mIHNjaGVtYXMuCi0gICBBbGwgb2YgdGhlaXIgdHlwZXMgYXJlIGJhc2VkIG9uIHRoZSAiYW5ub3RhdGVkIiB0eXBlIGJ5IGV4dGVuc2lvbi48L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNob2ljZT4KLSAgIDx4czpncm91cCByZWY9InhzOnJlZGVmaW5hYmxlIi8+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOmVsZW1lbnQiLz4KLSAgIDx4czplbGVtZW50IHJlZj0ieHM6YXR0cmlidXRlIi8+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOm5vdGF0aW9uIi8+Ci0gIDwveHM6Y2hvaWNlPgotIDwveHM6Z3JvdXA+Ci0gCi0gPHhzOmdyb3VwIG5hbWU9InJlZGVmaW5hYmxlIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgIFRoaXMgZ3JvdXAgaXMgZm9yIHRoZQotICAgZWxlbWVudHMgd2hpY2ggY2FuIHNlbGYtcmVkZWZpbmUgKHNlZSAmbHQ7cmVkZWZpbmU+IGJlbG93KS48L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNob2ljZT4KLSAgIDx4czplbGVtZW50IHJlZj0ieHM6c2ltcGxlVHlwZSIvPgotICAgPHhzOmVsZW1lbnQgcmVmPSJ4czpjb21wbGV4VHlwZSIvPgotICAgPHhzOmVsZW1lbnQgcmVmPSJ4czpncm91cCIvPgotICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphdHRyaWJ1dGVHcm91cCIvPgotICA8L3hzOmNob2ljZT4KLSA8L3hzOmdyb3VwPgotCi0gPHhzOnNpbXBsZVR5cGUgbmFtZT0iZm9ybUNob2ljZSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBBIHV0aWxpdHkgdHlwZSwgbm90IGZvciBwdWJsaWMgdXNlPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLSAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icXVhbGlmaWVkIi8+Ci0gICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InVucXVhbGlmaWVkIi8+Ci0gIDwveHM6cmVzdHJpY3Rpb24+Ci0gPC94czpzaW1wbGVUeXBlPgotCi0gPHhzOnNpbXBsZVR5cGUgbmFtZT0icmVkdWNlZERlcml2YXRpb25Db250cm9sIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgIEEgdXRpbGl0eSB0eXBlLCBub3QgZm9yIHB1YmxpYyB1c2U8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmRlcml2YXRpb25Db250cm9sIj4KLSAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZXh0ZW5zaW9uIi8+Ci0gICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlc3RyaWN0aW9uIi8+Ci0gIDwveHM6cmVzdHJpY3Rpb24+Ci0gPC94czpzaW1wbGVUeXBlPgotCi0gPHhzOnNpbXBsZVR5cGUgbmFtZT0iZGVyaXZhdGlvblNldCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBBIHV0aWxpdHkgdHlwZSwgbm90IGZvciBwdWJsaWMgdXNlPC94czpkb2N1bWVudGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAjYWxsIG9yIChwb3NzaWJseSBlbXB0eSkgc3Vic2V0IG9mIHtleHRlbnNpb24sIHJlc3RyaWN0aW9ufTwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6dW5pb24+Ci0gICA8eHM6c2ltcGxlVHlwZT4gICAgCi0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIjYWxsIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgIDwveHM6c2ltcGxlVHlwZT4KLSAgIDx4czpzaW1wbGVUeXBlPgotICAgIDx4czpsaXN0IGl0ZW1UeXBlPSJ4czpyZWR1Y2VkRGVyaXZhdGlvbkNvbnRyb2wiLz4KLSAgIDwveHM6c2ltcGxlVHlwZT4KLSAgPC94czp1bmlvbj4KLSA8L3hzOnNpbXBsZVR5cGU+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJzY2hlbWEiIGlkPSJzY2hlbWEiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LXNjaGVtYSIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOm9wZW5BdHRycyI+Ci0gICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czppbmNsdWRlIi8+Ci0gICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czppbXBvcnQiLz4KLSAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzOnJlZGVmaW5lIi8+Ci0gICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIi8+Ci0gICAgICA8L3hzOmNob2ljZT4KLSAgICAgIDx4czpzZXF1ZW5jZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICA8eHM6Z3JvdXAgcmVmPSJ4czpzY2hlbWFUb3AiLz4KLSAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idGFyZ2V0TmFtZXNwYWNlIiB0eXBlPSJ4czphbnlVUkkiLz4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIiB0eXBlPSJ4czpub3JtYWxpemVkU3RyaW5nIi8+Ci0gICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZmluYWxEZWZhdWx0IiB0eXBlPSJ4czpkZXJpdmF0aW9uU2V0IiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSIiLz4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJibG9ja0RlZmF1bHQiIHR5cGU9InhzOmJsb2NrU2V0IiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSIiLz4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhdHRyaWJ1dGVGb3JtRGVmYXVsdCIgdHlwZT0ieHM6Zm9ybUNob2ljZSIgdXNlPSJvcHRpb25hbCIgZGVmYXVsdD0idW5xdWFsaWZpZWQiLz4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJlbGVtZW50Rm9ybURlZmF1bHQiIHR5cGU9InhzOmZvcm1DaG9pY2UiIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9InVucXVhbGlmaWVkIi8+Ci0gICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InhzOklEIi8+Ci0gICAgIDx4czphdHRyaWJ1dGUgcmVmPSJ4bWw6bGFuZyIvPgotICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6a2V5IG5hbWU9ImVsZW1lbnQiPgotICAgPHhzOnNlbGVjdG9yIHhwYXRoPSJ4czplbGVtZW50Ii8+Ci0gICA8eHM6ZmllbGQgeHBhdGg9IkBuYW1lIi8+Ci0gIDwveHM6a2V5PgotCi0gIDx4czprZXkgbmFtZT0iYXR0cmlidXRlIj4KLSAgIDx4czpzZWxlY3RvciB4cGF0aD0ieHM6YXR0cmlidXRlIi8+Ci0gICA8eHM6ZmllbGQgeHBhdGg9IkBuYW1lIi8+Ci0gIDwveHM6a2V5PgotCi0gIDx4czprZXkgbmFtZT0idHlwZSI+Ci0gICA8eHM6c2VsZWN0b3IgeHBhdGg9InhzOmNvbXBsZXhUeXBlfHhzOnNpbXBsZVR5cGUiLz4KLSAgIDx4czpmaWVsZCB4cGF0aD0iQG5hbWUiLz4KLSAgPC94czprZXk+Ci0gCi0gIDx4czprZXkgbmFtZT0iZ3JvdXAiPgotICAgPHhzOnNlbGVjdG9yIHhwYXRoPSJ4czpncm91cCIvPgotICAgPHhzOmZpZWxkIHhwYXRoPSJAbmFtZSIvPgotICA8L3hzOmtleT4KLSAKLSAgPHhzOmtleSBuYW1lPSJhdHRyaWJ1dGVHcm91cCI+Ci0gICA8eHM6c2VsZWN0b3IgeHBhdGg9InhzOmF0dHJpYnV0ZUdyb3VwIi8+Ci0gICA8eHM6ZmllbGQgeHBhdGg9IkBuYW1lIi8+Ci0gIDwveHM6a2V5PgotIAotICA8eHM6a2V5IG5hbWU9Im5vdGF0aW9uIj4KLSAgIDx4czpzZWxlY3RvciB4cGF0aD0ieHM6bm90YXRpb24iLz4KLSAgIDx4czpmaWVsZCB4cGF0aD0iQG5hbWUiLz4KLSAgPC94czprZXk+Ci0KLSAgPHhzOmtleSBuYW1lPSJpZGVudGl0eUNvbnN0cmFpbnQiPgotICAgPHhzOnNlbGVjdG9yIHhwYXRoPSIuLy94czprZXl8Li8veHM6dW5pcXVlfC4vL3hzOmtleXJlZiIvPgotICAgPHhzOmZpZWxkIHhwYXRoPSJAbmFtZSIvPgotICA8L3hzOmtleT4KLQotIDwveHM6ZWxlbWVudD4KLQotIDx4czpzaW1wbGVUeXBlIG5hbWU9ImFsbE5OSSI+Ci0gIDx4czphbm5vdGF0aW9uPjx4czpkb2N1bWVudGF0aW9uPgotICAgZm9yIG1heE9jY3VyczwveHM6ZG9jdW1lbnRhdGlvbj48L3hzOmFubm90YXRpb24+Ci0gIDx4czp1bmlvbiBtZW1iZXJUeXBlcz0ieHM6bm9uTmVnYXRpdmVJbnRlZ2VyIj4KLSAgIDx4czpzaW1wbGVUeXBlPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLSAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgPC94czpzaW1wbGVUeXBlPgotICA8L3hzOnVuaW9uPgotIDwveHM6c2ltcGxlVHlwZT4KLQotIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvY2N1cnMiPgotICA8eHM6YW5ub3RhdGlvbj48eHM6ZG9jdW1lbnRhdGlvbj4KLSAgIGZvciBhbGwgcGFydGljbGVzPC94czpkb2N1bWVudGF0aW9uPjwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtaW5PY2N1cnMiIHR5cGU9InhzOm5vbk5lZ2F0aXZlSW50ZWdlciIgdXNlPSJvcHRpb25hbCIgZGVmYXVsdD0iMSIvPgotICA8eHM6YXR0cmlidXRlIG5hbWU9Im1heE9jY3VycyIgdHlwZT0ieHM6YWxsTk5JIiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSIxIi8+Ci0gPC94czphdHRyaWJ1dGVHcm91cD4KLQotIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJkZWZSZWYiPgotICA8eHM6YW5ub3RhdGlvbj48eHM6ZG9jdW1lbnRhdGlvbj4KLSAgIGZvciBlbGVtZW50LCBncm91cCBhbmQgYXR0cmlidXRlR3JvdXAsCi0gICB3aGljaCBib3RoIGRlZmluZSBhbmQgcmVmZXJlbmNlPC94czpkb2N1bWVudGF0aW9uPjwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpOQ05hbWUiLz4KLSAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZWYiIHR5cGU9InhzOlFOYW1lIi8+Ci0gPC94czphdHRyaWJ1dGVHcm91cD4KLQotIDx4czpncm91cCBuYW1lPSJ0eXBlRGVmUGFydGljbGUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICdjb21wbGV4VHlwZScgdXNlcyB0aGlzPC94czpkb2N1bWVudGF0aW9uPjwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNob2ljZT4KLSAgIDx4czplbGVtZW50IG5hbWU9Imdyb3VwIiB0eXBlPSJ4czpncm91cFJlZiIvPgotICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbGwiLz4KLSAgIDx4czplbGVtZW50IHJlZj0ieHM6Y2hvaWNlIi8+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOnNlcXVlbmNlIi8+Ci0gIDwveHM6Y2hvaWNlPgotIDwveHM6Z3JvdXA+Ci0gCi0gCi0KLSA8eHM6Z3JvdXAgbmFtZT0ibmVzdGVkUGFydGljbGUiPgotICA8eHM6Y2hvaWNlPgotICAgPHhzOmVsZW1lbnQgbmFtZT0iZWxlbWVudCIgdHlwZT0ieHM6bG9jYWxFbGVtZW50Ii8+Ci0gICA8eHM6ZWxlbWVudCBuYW1lPSJncm91cCIgdHlwZT0ieHM6Z3JvdXBSZWYiLz4KLSAgIDx4czplbGVtZW50IHJlZj0ieHM6Y2hvaWNlIi8+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOnNlcXVlbmNlIi8+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOmFueSIvPgotICA8L3hzOmNob2ljZT4KLSA8L3hzOmdyb3VwPgotIAotIDx4czpncm91cCBuYW1lPSJwYXJ0aWNsZSI+Ci0gIDx4czpjaG9pY2U+Ci0gICA8eHM6ZWxlbWVudCBuYW1lPSJlbGVtZW50IiB0eXBlPSJ4czpsb2NhbEVsZW1lbnQiLz4KLSAgIDx4czplbGVtZW50IG5hbWU9Imdyb3VwIiB0eXBlPSJ4czpncm91cFJlZiIvPgotICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbGwiLz4KLSAgIDx4czplbGVtZW50IHJlZj0ieHM6Y2hvaWNlIi8+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOnNlcXVlbmNlIi8+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOmFueSIvPgotICA8L3hzOmNob2ljZT4KLSA8L3hzOmdyb3VwPgotIAotIDx4czpjb21wbGV4VHlwZSBuYW1lPSJhdHRyaWJ1dGUiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmFubm90YXRlZCI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCBuYW1lPSJzaW1wbGVUeXBlIiBtaW5PY2N1cnM9IjAiIHR5cGU9InhzOmxvY2FsU2ltcGxlVHlwZSIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ieHM6ZGVmUmVmIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB0eXBlPSJ4czpRTmFtZSIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXNlIiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJvcHRpb25hbCI+Ci0gICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgotICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icHJvaGliaXRlZCIvPgotICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3B0aW9uYWwiLz4KLSAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlcXVpcmVkIi8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgPC94czphdHRyaWJ1dGU+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkZWZhdWx0IiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZpeGVkIiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZvcm0iIHR5cGU9InhzOmZvcm1DaG9pY2UiLz4KLSAgIDwveHM6ZXh0ZW5zaW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0gCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRvcExldmVsQXR0cmlidXRlIj4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmF0dHJpYnV0ZSI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICA8eHM6ZWxlbWVudCBuYW1lPSJzaW1wbGVUeXBlIiBtaW5PY2N1cnM9IjAiIHR5cGU9InhzOmxvY2FsU2ltcGxlVHlwZSIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZWYiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZm9ybSIgdXNlPSJwcm9oaWJpdGVkIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1c2UiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6TkNOYW1lIi8+Ci0gICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0KLSA8eHM6Z3JvdXAgbmFtZT0iYXR0ckRlY2xzIj4KLSAgPHhzOnNlcXVlbmNlPgotICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICA8eHM6ZWxlbWVudCBuYW1lPSJhdHRyaWJ1dGUiIHR5cGU9InhzOmF0dHJpYnV0ZSIvPgotICAgIDx4czplbGVtZW50IG5hbWU9ImF0dHJpYnV0ZUdyb3VwIiB0eXBlPSJ4czphdHRyaWJ1dGVHcm91cFJlZiIvPgotICAgPC94czpjaG9pY2U+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOmFueUF0dHJpYnV0ZSIgbWluT2NjdXJzPSIwIi8+Ci0gIDwveHM6c2VxdWVuY2U+Ci0gPC94czpncm91cD4KLQotIDx4czplbGVtZW50IG5hbWU9ImFueUF0dHJpYnV0ZSIgdHlwZT0ieHM6d2lsZGNhcmQiIGlkPSJhbnlBdHRyaWJ1dGUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2VsZW1lbnQtYW55QXR0cmlidXRlIi8+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6Z3JvdXAgbmFtZT0iY29tcGxleFR5cGVNb2RlbCI+Ci0gIDx4czpjaG9pY2U+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9InhzOnNpbXBsZUNvbnRlbnQiLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0ieHM6Y29tcGxleENvbnRlbnQiLz4KLSAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBUaGlzIGJyYW5jaCBpcyBzaG9ydCBmb3IKLSAgICZsdDtjb21wbGV4Q29udGVudD4KLSAgICZsdDtyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4KLSAgIC4uLgotICAgJmx0Oy9yZXN0cmljdGlvbj4KLSAgICZsdDsvY29tcGxleENvbnRlbnQ+PC94czpkb2N1bWVudGF0aW9uPgotICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICA8eHM6Z3JvdXAgcmVmPSJ4czp0eXBlRGVmUGFydGljbGUiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgIDx4czpncm91cCByZWY9InhzOmF0dHJEZWNscyIvPgotICAgICAgPC94czpzZXF1ZW5jZT4KLSAgPC94czpjaG9pY2U+Ci0gPC94czpncm91cD4KLQotIDx4czpjb21wbGV4VHlwZSBuYW1lPSJjb21wbGV4VHlwZSIgYWJzdHJhY3Q9InRydWUiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmFubm90YXRlZCI+Ci0gICAgPHhzOmdyb3VwIHJlZj0ieHM6Y29tcGxleFR5cGVNb2RlbCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6TkNOYW1lIj4KLSAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIFdpbGwgYmUgcmVzdHJpY3RlZCB0byByZXF1aXJlZCBvciBmb3JiaWRkZW48L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1peGVkIiB0eXBlPSJ4czpib29sZWFuIiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJmYWxzZSI+Ci0gICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBOb3QgYWxsb3dlZCBpZiBzaW1wbGVDb250ZW50IGNoaWxkIGlzIGNob3Nlbi4KLSAgICAgIE1heSBiZSBvdmVycmlkZW4gYnkgc2V0dGluZyBvbiBjb21wbGV4Q29udGVudCBjaGlsZC48L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDwveHM6YXR0cmlidXRlPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYWJzdHJhY3QiIHR5cGU9InhzOmJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9ImZhbHNlIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmaW5hbCIgdHlwZT0ieHM6ZGVyaXZhdGlvblNldCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYmxvY2siIHR5cGU9InhzOmRlcml2YXRpb25TZXQiLz4KLSAgIDwveHM6ZXh0ZW5zaW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0gCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRvcExldmVsQ29tcGxleFR5cGUiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Y29tcGxleFR5cGUiPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgPHhzOmdyb3VwIHJlZj0ieHM6Y29tcGxleFR5cGVNb2RlbCIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpOQ05hbWUiIHVzZT0icmVxdWlyZWQiLz4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLSAKLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0ibG9jYWxDb21wbGV4VHlwZSI+Ci0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpjb21wbGV4VHlwZSI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICA8eHM6Z3JvdXAgcmVmPSJ4czpjb21wbGV4VHlwZU1vZGVsIi8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYWJzdHJhY3QiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZmluYWwiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYmxvY2siIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLSA8L3hzOmNvbXBsZXhUeXBlPgotIAotIDx4czpjb21wbGV4VHlwZSBuYW1lPSJyZXN0cmljdGlvblR5cGUiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmFubm90YXRlZCI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+Ci0gICAgICA8eHM6Z3JvdXAgcmVmPSJ4czp0eXBlRGVmUGFydGljbGUiLz4KLSAgICAgIDx4czpncm91cCByZWY9InhzOnNpbXBsZVJlc3RyaWN0aW9uTW9kZWwiLz4KLSAgICAgPC94czpjaG9pY2U+Ci0gICAgIDx4czpncm91cCByZWY9InhzOmF0dHJEZWNscyIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJiYXNlIiB0eXBlPSJ4czpRTmFtZSIgdXNlPSJyZXF1aXJlZCIvPgotICAgPC94czpleHRlbnNpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+ICAgICAgIAotIDwveHM6Y29tcGxleFR5cGU+Ci0KLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0iY29tcGxleFJlc3RyaWN0aW9uVHlwZSI+Ci0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpyZXN0cmljdGlvblR5cGUiPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgotICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgPHhzOmRvY3VtZW50YXRpb24+VGhpcyBjaG9pY2UgaXMgYWRkZWQgc2ltcGx5IHRvCi0gICAgICAgICAgICAgICAgICAgbWFrZSB0aGlzIGEgdmFsaWQgcmVzdHJpY3Rpb24gcGVyIHRoZSBSRUM8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICA8eHM6Z3JvdXAgcmVmPSJ4czp0eXBlRGVmUGFydGljbGUiLz4KLSAgICAgPC94czpjaG9pY2U+Ci0gICAgIDx4czpncm91cCByZWY9InhzOmF0dHJEZWNscyIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PiAgICAgICAKLSA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImV4dGVuc2lvblR5cGUiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmFubm90YXRlZCI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6Z3JvdXAgcmVmPSJ4czp0eXBlRGVmUGFydGljbGUiIG1pbk9jY3Vycz0iMCIvPgotICAgICA8eHM6Z3JvdXAgcmVmPSJ4czphdHRyRGVjbHMiLz4KLSAgICA8L3hzOnNlcXVlbmNlPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYmFzZSIgdHlwZT0ieHM6UU5hbWUiIHVzZT0icmVxdWlyZWQiLz4KLSAgIDwveHM6ZXh0ZW5zaW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PiAgICAgICAKLSA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmVsZW1lbnQgbmFtZT0iY29tcGxleENvbnRlbnQiIGlkPSJjb21wbGV4Q29udGVudCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1jb21wbGV4Q29udGVudCIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmFubm90YXRlZCI+Ci0gICAgIDx4czpjaG9pY2U+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJyZXN0cmljdGlvbiIgdHlwZT0ieHM6Y29tcGxleFJlc3RyaWN0aW9uVHlwZSIvPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIiB0eXBlPSJ4czpleHRlbnNpb25UeXBlIi8+Ci0gICAgIDwveHM6Y2hvaWNlPiAgICAgCi0gICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWl4ZWQiIHR5cGU9InhzOmJvb2xlYW4iPgotICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgT3ZlcnJpZGVzIGFueSBzZXR0aW5nIG9uIGNvbXBsZXhUeXBlIHBhcmVudC48L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPC94czphdHRyaWJ1dGU+Ci0gICAgPC94czpleHRlbnNpb24+Ci0gICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotIDwveHM6ZWxlbWVudD4KLQotIDx4czpjb21wbGV4VHlwZSBuYW1lPSJzaW1wbGVSZXN0cmljdGlvblR5cGUiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6cmVzdHJpY3Rpb25UeXBlIj4KLSAgICA8eHM6c2VxdWVuY2U+Ci0gICAgIDx4czplbGVtZW50IHJlZj0ieHM6YW5ub3RhdGlvbiIgbWluT2NjdXJzPSIwIi8+Ci0gICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIj4KLSAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgIDx4czpkb2N1bWVudGF0aW9uPlRoaXMgY2hvaWNlIGlzIGFkZGVkIHNpbXBseSB0bwotICAgICAgICAgICAgICAgICAgIG1ha2UgdGhpcyBhIHZhbGlkIHJlc3RyaWN0aW9uIHBlciB0aGUgUkVDPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgPHhzOmdyb3VwIHJlZj0ieHM6c2ltcGxlUmVzdHJpY3Rpb25Nb2RlbCIvPgotICAgICA8L3hzOmNob2ljZT4KLSAgICAgPHhzOmdyb3VwIHJlZj0ieHM6YXR0ckRlY2xzIi8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLQotIDx4czpjb21wbGV4VHlwZSBuYW1lPSJzaW1wbGVFeHRlbnNpb25UeXBlIj4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmV4dGVuc2lvblR5cGUiPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIE5vIHR5cGVEZWZQYXJ0aWNsZSBncm91cCByZWZlcmVuY2U8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgPHhzOmdyb3VwIHJlZj0ieHM6YXR0ckRlY2xzIi8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLQotIDx4czplbGVtZW50IG5hbWU9InNpbXBsZUNvbnRlbnQiIGlkPSJzaW1wbGVDb250ZW50Ij4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LXNpbXBsZUNvbnRlbnQiLz4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czphbm5vdGF0ZWQiPgotICAgICA8eHM6Y2hvaWNlPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icmVzdHJpY3Rpb24iIHR5cGU9InhzOnNpbXBsZVJlc3RyaWN0aW9uVHlwZSIvPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIiB0eXBlPSJ4czpzaW1wbGVFeHRlbnNpb25UeXBlIi8+Ci0gICAgIDwveHM6Y2hvaWNlPgotICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLSA8L3hzOmVsZW1lbnQ+Ci0gCi0gPHhzOmVsZW1lbnQgbmFtZT0iY29tcGxleFR5cGUiIHR5cGU9InhzOnRvcExldmVsQ29tcGxleFR5cGUiIGlkPSJjb21wbGV4VHlwZSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1jb21wbGV4VHlwZSIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czplbGVtZW50PgotCi0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iYmxvY2tTZXQiPgotICAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgQSB1dGlsaXR5IHR5cGUsIG5vdCBmb3IgcHVibGljIHVzZTwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAjYWxsIG9yIChwb3NzaWJseSBlbXB0eSkgc3Vic2V0IG9mIHtzdWJzdGl0dXRpb24sIGV4dGVuc2lvbiwKLSAgICByZXN0cmljdGlvbn08L3hzOmRvY3VtZW50YXRpb24+Ci0gICA8L3hzOmFubm90YXRpb24+Ci0gICA8eHM6dW5pb24+Ci0gICAgPHhzOnNpbXBsZVR5cGU+ICAgIAotICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIjYWxsIi8+Ci0gICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpzaW1wbGVUeXBlPgotICAgIDx4czpzaW1wbGVUeXBlPgotICAgICA8eHM6bGlzdD4KLSAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpkZXJpdmF0aW9uQ29udHJvbCI+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZXh0ZW5zaW9uIi8+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVzdHJpY3Rpb24iLz4KLSAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzdWJzdGl0dXRpb24iLz4KLSAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICA8L3hzOmxpc3Q+Ci0gICAgPC94czpzaW1wbGVUeXBlPgotICAgPC94czp1bmlvbj4gIAotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZWxlbWVudCIgYWJzdHJhY3Q9InRydWUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgVGhlIGVsZW1lbnQgZWxlbWVudCBjYW4gYmUgdXNlZCBlaXRoZXIKLSAgIGF0IHRoZSB0b3AgbGV2ZWwgdG8gZGVmaW5lIGFuIGVsZW1lbnQtdHlwZSBiaW5kaW5nIGdsb2JhbGx5LAotICAgb3Igd2l0aGluIGEgY29udGVudCBtb2RlbCB0byBlaXRoZXIgcmVmZXJlbmNlIGEgZ2xvYmFsbHktZGVmaW5lZAotICAgZWxlbWVudCBvciB0eXBlIG9yIGRlY2xhcmUgYW4gZWxlbWVudC10eXBlIGJpbmRpbmcgbG9jYWxseS4KLSAgIFRoZSByZWYgZm9ybSBpcyBub3QgYWxsb3dlZCBhdCB0aGUgdG9wIGxldmVsLjwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotCi0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6YW5ub3RhdGVkIj4KLSAgICA8eHM6c2VxdWVuY2U+Ci0gICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIj4KLSAgICAgIDx4czplbGVtZW50IG5hbWU9InNpbXBsZVR5cGUiIHR5cGU9InhzOmxvY2FsU2ltcGxlVHlwZSIvPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iY29tcGxleFR5cGUiIHR5cGU9InhzOmxvY2FsQ29tcGxleFR5cGUiLz4KLSAgICAgPC94czpjaG9pY2U+Ci0gICAgIDx4czpncm91cCByZWY9InhzOmlkZW50aXR5Q29uc3RyYWludCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ieHM6ZGVmUmVmIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB0eXBlPSJ4czpRTmFtZSIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3Vic3RpdHV0aW9uR3JvdXAiIHR5cGU9InhzOlFOYW1lIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ieHM6b2NjdXJzIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkZWZhdWx0IiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZpeGVkIiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5pbGxhYmxlIiB0eXBlPSJ4czpib29sZWFuIiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJmYWxzZSIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYWJzdHJhY3QiIHR5cGU9InhzOmJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9ImZhbHNlIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmaW5hbCIgdHlwZT0ieHM6ZGVyaXZhdGlvblNldCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYmxvY2siIHR5cGU9InhzOmJsb2NrU2V0Ii8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmb3JtIiB0eXBlPSJ4czpmb3JtQ2hvaWNlIi8+Ci0gICA8L3hzOmV4dGVuc2lvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLSA8L3hzOmNvbXBsZXhUeXBlPgotIAotIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0b3BMZXZlbEVsZW1lbnQiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6ZWxlbWVudCI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJzaW1wbGVUeXBlIiB0eXBlPSJ4czpsb2NhbFNpbXBsZVR5cGUiLz4KLSAgICAgIDx4czplbGVtZW50IG5hbWU9ImNvbXBsZXhUeXBlIiB0eXBlPSJ4czpsb2NhbENvbXBsZXhUeXBlIi8+Ci0gICAgIDwveHM6Y2hvaWNlPgotICAgICA8eHM6Z3JvdXAgcmVmPSJ4czppZGVudGl0eUNvbnN0cmFpbnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzOnNlcXVlbmNlPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVmIiB1c2U9InByb2hpYml0ZWQiLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZvcm0iIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWluT2NjdXJzIiB1c2U9InByb2hpYml0ZWQiLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1heE9jY3VycyIgdXNlPSJwcm9oaWJpdGVkIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4czpOQ05hbWUiLz4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLSAKLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0ibG9jYWxFbGVtZW50Ij4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmVsZW1lbnQiPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ic2ltcGxlVHlwZSIgdHlwZT0ieHM6bG9jYWxTaW1wbGVUeXBlIi8+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJjb21wbGV4VHlwZSIgdHlwZT0ieHM6bG9jYWxDb21wbGV4VHlwZSIvPgotICAgICA8L3hzOmNob2ljZT4KLSAgICAgPHhzOmdyb3VwIHJlZj0ieHM6aWRlbnRpdHlDb25zdHJhaW50IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN1YnN0aXR1dGlvbkdyb3VwIiB1c2U9InByb2hpYml0ZWQiLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZpbmFsIiB1c2U9InByb2hpYml0ZWQiLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFic3RyYWN0IiB1c2U9InByb2hpYml0ZWQiLz4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLQotIDx4czplbGVtZW50IG5hbWU9ImVsZW1lbnQiIHR5cGU9InhzOnRvcExldmVsRWxlbWVudCIgaWQ9ImVsZW1lbnQiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2VsZW1lbnQtZWxlbWVudCIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9Imdyb3VwIiBhYnN0cmFjdD0idHJ1ZSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBncm91cCB0eXBlIGZvciBleHBsaWNpdCBncm91cHMsIG5hbWVkIHRvcC1sZXZlbCBncm91cHMgYW5kCi0gICBncm91cCByZWZlcmVuY2VzPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6YW5ub3RhdGVkIj4KLSAgICA8eHM6Z3JvdXAgcmVmPSJ4czpwYXJ0aWNsZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InhzOmRlZlJlZiIvPgotICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InhzOm9jY3VycyIvPgotICAgPC94czpleHRlbnNpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLSAKLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0icmVhbEdyb3VwIj4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmdyb3VwIj4KLSAgICA8eHM6c2VxdWVuY2U+Ci0gICAgIDx4czplbGVtZW50IHJlZj0ieHM6YW5ub3RhdGlvbiIgbWluT2NjdXJzPSIwIi8+Ci0gICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbGwiLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0ieHM6Y2hvaWNlIi8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9InhzOnNlcXVlbmNlIi8+Ci0gICAgIDwveHM6Y2hvaWNlPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0KLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0ibmFtZWRHcm91cCI+Ci0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpyZWFsR3JvdXAiPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0iMSI+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJhbGwiPgotICAgICAgIDx4czpjb21wbGV4VHlwZT4KLSAgICAgICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFsbCI+Ci0gICAgICAgICAgPHhzOmdyb3VwIHJlZj0ieHM6YWxsTW9kZWwiLz4KLSAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1pbk9jY3VycyIgdXNlPSJwcm9oaWJpdGVkIi8+Ci0gICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtYXhPY2N1cnMiIHVzZT0icHJvaGliaXRlZCIvPgotICAgICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICAgICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgICAgICA8L3hzOmNvbXBsZXhUeXBlPgotICAgICAgPC94czplbGVtZW50PgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iY2hvaWNlIiB0eXBlPSJ4czpzaW1wbGVFeHBsaWNpdEdyb3VwIi8+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJzZXF1ZW5jZSIgdHlwZT0ieHM6c2ltcGxlRXhwbGljaXRHcm91cCIvPgotICAgICA8L3hzOmNob2ljZT4KLSAgICA8L3hzOnNlcXVlbmNlPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6TkNOYW1lIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZWYiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWluT2NjdXJzIiB1c2U9InByb2hpYml0ZWQiLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1heE9jY3VycyIgdXNlPSJwcm9oaWJpdGVkIi8+Ci0gICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0KLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZ3JvdXBSZWYiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6cmVhbEdyb3VwIj4KLSAgICA8eHM6c2VxdWVuY2U+Ci0gICAgIDx4czplbGVtZW50IHJlZj0ieHM6YW5ub3RhdGlvbiIgbWluT2NjdXJzPSIwIi8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlZiIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6UU5hbWUiLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLSA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImV4cGxpY2l0R3JvdXAiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgZ3JvdXAgdHlwZSBmb3IgdGhlIHRocmVlIGtpbmRzIG9mIGdyb3VwPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpncm91cCI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICA8eHM6Z3JvdXAgcmVmPSJ4czpuZXN0ZWRQYXJ0aWNsZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpOQ05hbWUiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVmIiB0eXBlPSJ4czpRTmFtZSIgdXNlPSJwcm9oaWJpdGVkIi8+Ci0gICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0gCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9InNpbXBsZUV4cGxpY2l0R3JvdXAiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6ZXhwbGljaXRHcm91cCI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICA8eHM6Z3JvdXAgcmVmPSJ4czpuZXN0ZWRQYXJ0aWNsZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtaW5PY2N1cnMiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWF4T2NjdXJzIiB1c2U9InByb2hpYml0ZWQiLz4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLSAKLSA8eHM6Z3JvdXAgbmFtZT0iYWxsTW9kZWwiPgotICA8eHM6c2VxdWVuY2U+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzOmRvY3VtZW50YXRpb24+VGhpcyBjaG9pY2Ugd2l0aCBtaW4vbWF4IGlzIGhlcmUgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgYXZvaWQgYSBwYmxtIHdpdGggdGhlIEVsdDpBbGwvQ2hvaWNlL1NlcQotICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJ0aWNsZSBkZXJpdmF0aW9uIGNvbnN0cmFpbnQ8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgIDx4czplbGVtZW50IG5hbWU9ImVsZW1lbnQiIHR5cGU9InhzOmVsZW1lbnRJbkFsbCIvPgotICAgICAgPC94czpjaG9pY2U+Ci0gICAgIDwveHM6c2VxdWVuY2U+Ci0gPC94czpncm91cD4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZWxlbWVudEluQWxsIj4KLSAgIDx4czphbm5vdGF0aW9uPgotICAgIDx4czpkb2N1bWVudGF0aW9uPnJlc3RyaWN0ZWQgbWF4L21pbjwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgIDwveHM6YW5ub3RhdGlvbj4KLSAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6bG9jYWxFbGVtZW50Ij4KLSAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIj4KLSAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJzaW1wbGVUeXBlIiB0eXBlPSJ4czpsb2NhbFNpbXBsZVR5cGUiLz4KLSAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJjb21wbGV4VHlwZSIgdHlwZT0ieHM6bG9jYWxDb21wbGV4VHlwZSIvPgotICAgICAgPC94czpjaG9pY2U+Ci0gICAgICA8eHM6Z3JvdXAgcmVmPSJ4czppZGVudGl0eUNvbnN0cmFpbnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtaW5PY2N1cnMiIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9IjEiPgotICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOm5vbk5lZ2F0aXZlSW50ZWdlciI+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iMCIvPgotICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IjEiLz4KLSAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtYXhPY2N1cnMiIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9IjEiPgotICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFsbE5OSSI+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iMCIvPgotICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IjEiLz4KLSAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+ICAgIAotCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJhbGwiPgotICAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBPbmx5IGVsZW1lbnRzIGFsbG93ZWQgaW5zaWRlPC94czpkb2N1bWVudGF0aW9uPgotICAgPC94czphbm5vdGF0aW9uPgotICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpleHBsaWNpdEdyb3VwIj4KLSAgICAgPHhzOmdyb3VwIHJlZj0ieHM6YWxsTW9kZWwiLz4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtaW5PY2N1cnMiIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9IjEiPgotICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOm5vbk5lZ2F0aXZlSW50ZWdlciI+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iMCIvPgotICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IjEiLz4KLSAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtYXhPY2N1cnMiIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9IjEiPgotICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFsbE5OSSI+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iMSIvPgotICAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgIDwveHM6YXR0cmlidXRlPgotICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotIDx4czplbGVtZW50IG5hbWU9ImFsbCIgaWQ9ImFsbCIgdHlwZT0ieHM6YWxsIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LWFsbCIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmVsZW1lbnQgbmFtZT0iY2hvaWNlIiB0eXBlPSJ4czpleHBsaWNpdEdyb3VwIiBpZD0iY2hvaWNlIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LWNob2ljZSIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmVsZW1lbnQgbmFtZT0ic2VxdWVuY2UiIHR5cGU9InhzOmV4cGxpY2l0R3JvdXAiIGlkPSJzZXF1ZW5jZSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1zZXF1ZW5jZSIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmVsZW1lbnQgbmFtZT0iZ3JvdXAiIHR5cGU9InhzOm5hbWVkR3JvdXAiIGlkPSJncm91cCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1ncm91cCIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9IndpbGRjYXJkIj4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czphbm5vdGF0ZWQiPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZXNwYWNlIiB0eXBlPSJ4czpuYW1lc3BhY2VMaXN0IiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSIjI2FueSIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icHJvY2Vzc0NvbnRlbnRzIiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJzdHJpY3QiPgotICAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLSAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNraXAiLz4KLSAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxheCIvPgotICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic3RyaWN0Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgPC94czphdHRyaWJ1dGU+Ci0gICA8L3hzOmV4dGVuc2lvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLSA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmVsZW1lbnQgbmFtZT0iYW55IiBpZD0iYW55Ij4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LWFueSIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOndpbGRjYXJkIj4KLSAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ieHM6b2NjdXJzIi8+Ci0gICAgPC94czpleHRlbnNpb24+Ci0gICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotIDwveHM6ZWxlbWVudD4KLQotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgc2ltcGxlIHR5cGUgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgJ25hbWVzcGFjZScgYXR0ciBvZgotICAgJ2FueScgYW5kICdhbnlBdHRyaWJ1dGUnPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBWYWx1ZSBpcwotICAgICAgICAgICAgICAjI2FueSAgICAgIC0gLSBhbnkgbm9uLWNvbmZsaWN0aW5nIFdGWE1ML2F0dHJpYnV0ZSBhdCBhbGwKLQotICAgICAgICAgICAgICAjI290aGVyICAgIC0gLSBhbnkgbm9uLWNvbmZsaWN0aW5nIFdGWE1ML2F0dHJpYnV0ZSBmcm9tCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2Ugb3RoZXIgdGhhbiB0YXJnZXROUwotCi0gICAgICAgICAgICAgICMjbG9jYWwgICAgLSAtIGFueSB1bnF1YWxpZmllZCBub24tY29uZmxpY3RpbmcgV0ZYTUwvYXR0cmlidXRlIAotCi0gICAgICAgICAgICAgIG9uZSBvciAgICAgLSAtIGFueSBub24tY29uZmxpY3RpbmcgV0ZYTUwvYXR0cmlidXRlIGZyb20KLSAgICAgICAgICAgICAgbW9yZSBVUkkgICAgICAgIHRoZSBsaXN0ZWQgbmFtZXNwYWNlcwotICAgICAgICAgICAgICByZWZlcmVuY2VzCi0gICAgICAgICAgICAgIChzcGFjZSBzZXBhcmF0ZWQpCi0KLSAgICAjI3RhcmdldE5hbWVzcGFjZSBvciAjI2xvY2FsIG1heSBhcHBlYXIgaW4gdGhlIGFib3ZlIGxpc3QsIHRvCi0gICAgICAgIHJlZmVyIHRvIHRoZSB0YXJnZXROYW1lc3BhY2Ugb2YgdGhlIGVuY2xvc2luZwotICAgICAgICBzY2hlbWEgb3IgYW4gYWJzZW50IHRhcmdldE5hbWVzcGFjZSByZXNwZWN0aXZlbHk8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLQotIDx4czpzaW1wbGVUeXBlIG5hbWU9Im5hbWVzcGFjZUxpc3QiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgQSB1dGlsaXR5IHR5cGUsIG5vdCBmb3IgcHVibGljIHVzZTwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6dW5pb24+Ci0gICA8eHM6c2ltcGxlVHlwZT4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IiMjYW55Ii8+Ci0gICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iIyNvdGhlciIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICA8L3hzOnNpbXBsZVR5cGU+Ci0gICA8eHM6c2ltcGxlVHlwZT4KLSAgICA8eHM6bGlzdD4KLSAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICA8eHM6dW5pb24gbWVtYmVyVHlwZXM9InhzOmFueVVSSSI+Ci0gICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IiMjdGFyZ2V0TmFtZXNwYWNlIi8+Ci0gICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IiMjbG9jYWwiLz4KLSAgICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzOnVuaW9uPgotICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgPC94czpsaXN0PgotICAgPC94czpzaW1wbGVUeXBlPgotICA8L3hzOnVuaW9uPgotIDwveHM6c2ltcGxlVHlwZT4KLQotIDx4czplbGVtZW50IG5hbWU9ImF0dHJpYnV0ZSIgdHlwZT0ieHM6dG9wTGV2ZWxBdHRyaWJ1dGUiIGlkPSJhdHRyaWJ1dGUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2VsZW1lbnQtYXR0cmlidXRlIi8+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0iYXR0cmlidXRlR3JvdXAiIGFic3RyYWN0PSJ0cnVlIj4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czphbm5vdGF0ZWQiPgotICAgIDx4czpncm91cCByZWY9InhzOmF0dHJEZWNscyIvPgotICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InhzOmRlZlJlZiIvPgotICAgPC94czpleHRlbnNpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLSAKLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0ibmFtZWRBdHRyaWJ1dGVHcm91cCI+Ci0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphdHRyaWJ1dGVHcm91cCI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICA8eHM6Z3JvdXAgcmVmPSJ4czphdHRyRGVjbHMiLz4KLSAgICA8L3hzOnNlcXVlbmNlPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6TkNOYW1lIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZWYiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLSA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImF0dHJpYnV0ZUdyb3VwUmVmIj4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmF0dHJpYnV0ZUdyb3VwIj4KLSAgICA8eHM6c2VxdWVuY2U+Ci0gICAgIDx4czplbGVtZW50IHJlZj0ieHM6YW5ub3RhdGlvbiIgbWluT2NjdXJzPSIwIi8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlZiIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6UU5hbWUiLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLSA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmVsZW1lbnQgbmFtZT0iYXR0cmlidXRlR3JvdXAiIHR5cGU9InhzOm5hbWVkQXR0cmlidXRlR3JvdXAiIGlkPSJhdHRyaWJ1dGVHcm91cCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1hdHRyaWJ1dGVHcm91cCIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmVsZW1lbnQgbmFtZT0iaW5jbHVkZSIgaWQ9ImluY2x1ZGUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2VsZW1lbnQtaW5jbHVkZSIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmFubm90YXRlZCI+Ci0gICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2NoZW1hTG9jYXRpb24iIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgotICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJyZWRlZmluZSIgaWQ9InJlZGVmaW5lIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LXJlZGVmaW5lIi8+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6b3BlbkF0dHJzIj4KLSAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgIDx4czplbGVtZW50IHJlZj0ieHM6YW5ub3RhdGlvbiIvPgotICAgICAgPHhzOmdyb3VwIHJlZj0ieHM6cmVkZWZpbmFibGUiLz4KLSAgICAgPC94czpjaG9pY2U+Ci0gICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2NoZW1hTG9jYXRpb24iIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpJRCIvPgotICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJpbXBvcnQiIGlkPSJpbXBvcnQiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2VsZW1lbnQtaW1wb3J0Ii8+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6YW5ub3RhdGVkIj4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lc3BhY2UiIHR5cGU9InhzOmFueVVSSSIvPgotICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNjaGVtYUxvY2F0aW9uIiB0eXBlPSJ4czphbnlVUkkiLz4KLSAgICA8L3hzOmV4dGVuc2lvbj4KLSAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmVsZW1lbnQgbmFtZT0ic2VsZWN0b3IiIGlkPSJzZWxlY3RvciI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1zZWxlY3RvciIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czphbm5vdGF0ZWQiPgotICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InhwYXRoIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbj5BIHN1YnNldCBvZiBYUGF0aCBleHByZXNzaW9ucyBmb3IgdXNlCi1pbiBzZWxlY3RvcnM8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDx4czpkb2N1bWVudGF0aW9uPkEgdXRpbGl0eSB0eXBlLCBub3QgZm9yIHB1YmxpYwotdXNlPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uPlRoZSBmb2xsb3dpbmcgcGF0dGVybiBpcyBpbnRlbmRlZCB0byBhbGxvdyBYUGF0aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMgcGVyIHRoZSBmb2xsb3dpbmcgRUJORjoKLSAgICAgICAgICBTZWxlY3RvciAgICA6Oj0gICAgUGF0aCAoICd8JyBQYXRoICkqICAKLSAgICAgICAgICBQYXRoICAgIDo6PSAgICAoJy4vLycpPyBTdGVwICggJy8nIFN0ZXAgKSogIAotICAgICAgICAgIFN0ZXAgICAgOjo9ICAgICcuJyB8IE5hbWVUZXN0ICAKLSAgICAgICAgICBOYW1lVGVzdCAgICA6Oj0gICAgUU5hbWUgfCAnKicgfCBOQ05hbWUgJzonICcqJyAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZDo6IGlzIGFsc28gYWxsb3dlZAotICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwhLS0gVFNIIGNvbW1lbnRlZCBvdXQgc2luY2UgdGhpcyBpbmNvcnJlY3RseSBkb2VzIG5vdCBhbGxvdyB3aGl0ZSBzcGFjZSAtLT4KLSAgICAgICAgPCEtLSA8eHM6cGF0dGVybiB2YWx1ZT0iKFwuLy8pPygoKGNoaWxkOjopPygoXGlcYyo6KT8oXGlcYyp8XCopKSl8XC4pKC8oKChjaGlsZDo6KT8oKFxpXGMqOik/KFxpXGMqfFwqKSkpfFwuKSkqKFx8KFwuLy8pPygoKGNoaWxkOjopPygoXGlcYyo6KT8oXGlcYyp8XCopKSl8XC4pKC8oKChjaGlsZDo6KT8oKFxpXGMqOik/KFxpXGMqfFwqKSkpfFwuKSkqKSoiPiAKLSAgICAgICAgPC94czpwYXR0ZXJuPiAtLT4KLSAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgIDwveHM6ZXh0ZW5zaW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmVsZW1lbnQgbmFtZT0iZmllbGQiIGlkPSJmaWVsZCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1maWVsZCIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czphbm5vdGF0ZWQiPgotICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InhwYXRoIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbj5BIHN1YnNldCBvZiBYUGF0aCBleHByZXNzaW9ucyBmb3IgdXNlCi1pbiBmaWVsZHM8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDx4czpkb2N1bWVudGF0aW9uPkEgdXRpbGl0eSB0eXBlLCBub3QgZm9yIHB1YmxpYwotdXNlPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uPlRoZSBmb2xsb3dpbmcgcGF0dGVybiBpcyBpbnRlbmRlZCB0byBhbGxvdyBYUGF0aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMgcGVyIHRoZSBzYW1lIEVCTkYgYXMgZm9yIHNlbGVjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgZm9sbG93aW5nIGNoYW5nZToKLSAgICAgICAgICBQYXRoICAgIDo6PSAgICAoJy4vLycpPyAoIFN0ZXAgJy8nICkqICggU3RlcCB8ICdAJyBOYW1lVGVzdCApIAotICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwhLS0gVFNIIGNvbW1lbnRlZCBvdXQgc2luY2UgdGhpcyBpbmNvcnJlY3RseSBkb2VzIG5vdCBhbGxvdyB3aGl0ZSBzcGFjZSAtLT4KLSAgICAgICAgPCEtLSA8eHM6cGF0dGVybiB2YWx1ZT0iKFwuLy8pPygoKChjaGlsZDo6KT8oKFxpXGMqOik/KFxpXGMqfFwqKSkpfFwuKS8pKigoKChjaGlsZDo6KT8oKFxpXGMqOik/KFxpXGMqfFwqKSkpfFwuKXwoKGF0dHJpYnV0ZTo6fEApKChcaVxjKjopPyhcaVxjKnxcKikpKSkoXHwoXC4vLyk/KCgoKGNoaWxkOjopPygoXGlcYyo6KT8oXGlcYyp8XCopKSl8XC4pLykqKCgoKGNoaWxkOjopPygoXGlcYyo6KT8oXGlcYyp8XCopKSl8XC4pfCgoYXR0cmlidXRlOjp8QCkoKFxpXGMqOik/KFxpXGMqfFwqKSkpKSkqIj4gCi0gICAgICAgIDwveHM6cGF0dGVybj4tLT4KLSAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgIDwveHM6ZXh0ZW5zaW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImtleWJhc2UiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmFubm90YXRlZCI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCByZWY9InhzOnNlbGVjdG9yIi8+Ci0gICAgIDx4czplbGVtZW50IHJlZj0ieHM6ZmllbGQiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzOnNlcXVlbmNlPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6TkNOYW1lIiB1c2U9InJlcXVpcmVkIi8+Ci0gICA8L3hzOmV4dGVuc2lvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLSA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmdyb3VwIG5hbWU9ImlkZW50aXR5Q29uc3RyYWludCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+VGhlIHRocmVlIGtpbmRzIG9mIGlkZW50aXR5IGNvbnN0cmFpbnRzLCBhbGwgd2l0aAotICAgICAgICAgICAgICAgICAgICAgdHlwZSBvZiBvciBkZXJpdmVkIGZyb20gJ2tleWJhc2UnLgotICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjaG9pY2U+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOnVuaXF1ZSIvPgotICAgPHhzOmVsZW1lbnQgcmVmPSJ4czprZXkiLz4KLSAgIDx4czplbGVtZW50IHJlZj0ieHM6a2V5cmVmIi8+Ci0gIDwveHM6Y2hvaWNlPgotIDwveHM6Z3JvdXA+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJ1bmlxdWUiIHR5cGU9InhzOmtleWJhc2UiIGlkPSJ1bmlxdWUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2VsZW1lbnQtdW5pcXVlIi8+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSA8L3hzOmVsZW1lbnQ+Ci0gPHhzOmVsZW1lbnQgbmFtZT0ia2V5IiB0eXBlPSJ4czprZXliYXNlIiBpZD0ia2V5Ij4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LWtleSIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czplbGVtZW50PgotIDx4czplbGVtZW50IG5hbWU9ImtleXJlZiIgaWQ9ImtleXJlZiI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1rZXlyZWYiLz4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czprZXliYXNlIj4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZWZlciIgdHlwZT0ieHM6UU5hbWUiIHVzZT0icmVxdWlyZWQiLz4KLSAgICA8L3hzOmV4dGVuc2lvbj4KLSAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmVsZW1lbnQgbmFtZT0ibm90YXRpb24iIGlkPSJub3RhdGlvbiI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1ub3RhdGlvbiIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmFubm90YXRlZCI+Ci0gICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6TkNOYW1lIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icHVibGljIiB0eXBlPSJ4czpwdWJsaWMiLz4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzeXN0ZW0iIHR5cGU9InhzOmFueVVSSSIvPgotICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6c2ltcGxlVHlwZSBuYW1lPSJwdWJsaWMiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgQSB1dGlsaXR5IHR5cGUsIG5vdCBmb3IgcHVibGljIHVzZTwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgQSBwdWJsaWMgaWRlbnRpZmllciwgcGVyIElTTyA4ODc5PC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiIvPgotIDwveHM6c2ltcGxlVHlwZT4KLQotIDx4czplbGVtZW50IG5hbWU9ImFwcGluZm8iIGlkPSJhcHBpbmZvIj4KLSAgIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LWFwcGluZm8iLz4KLSAgIDwveHM6YW5ub3RhdGlvbj4KLSAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0gICAgPHhzOnNlcXVlbmNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICA8eHM6YW55IHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNvdXJjZSIgdHlwZT0ieHM6YW55VVJJIi8+Ci0gICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICA8L3hzOmNvbXBsZXhUeXBlPgotIDwveHM6ZWxlbWVudD4KLQotIDx4czplbGVtZW50IG5hbWU9ImRvY3VtZW50YXRpb24iIGlkPSJkb2N1bWVudGF0aW9uIj4KLSAgIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LWRvY3VtZW50YXRpb24iLz4KLSAgIDwveHM6YW5ub3RhdGlvbj4KLSAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0gICAgPHhzOnNlcXVlbmNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICA8eHM6YW55IHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNvdXJjZSIgdHlwZT0ieHM6YW55VVJJIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSByZWY9InhtbDpsYW5nIi8+Ci0gICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICA8L3hzOmNvbXBsZXhUeXBlPgotIDwveHM6ZWxlbWVudD4KLQotIDx4czplbGVtZW50IG5hbWU9ImFubm90YXRpb24iIGlkPSJhbm5vdGF0aW9uIj4KLSAgIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LWFubm90YXRpb24iLz4KLSAgIDwveHM6YW5ub3RhdGlvbj4KLSAgIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6b3BlbkF0dHJzIj4KLSAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphcHBpbmZvIi8+Ci0gICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czpkb2N1bWVudGF0aW9uIi8+Ci0gICAgICA8L3hzOmNob2ljZT4KLSAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InhzOklEIi8+Ci0gICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8L3hzOmNvbXBsZXhUeXBlPgotIDwveHM6ZWxlbWVudD4KLQotIDx4czphbm5vdGF0aW9uPgotICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgIG5vdGF0aW9ucyBmb3IgdXNlIHdpdGhpbiBYTUwgU2NoZW1hIHNjaGVtYXM8L3hzOmRvY3VtZW50YXRpb24+Ci0gPC94czphbm5vdGF0aW9uPgotCi0gPHhzOm5vdGF0aW9uIG5hbWU9IlhNTFNjaGVtYVN0cnVjdHVyZXMiIHB1YmxpYz0ic3RydWN0dXJlcyIgc3lzdGVtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA4L1hNTFNjaGVtYS54c2QiLz4KLSA8eHM6bm90YXRpb24gbmFtZT0iWE1MIiBwdWJsaWM9IlJFQy14bWwtMTk5ODAyMTAiIHN5c3RlbT0iaHR0cDovL3d3dy53My5vcmcvVFIvMTk5OC9SRUMteG1sLTE5OTgwMjEwIi8+Ci0gIAotIDx4czpjb21wbGV4VHlwZSBuYW1lPSJhbnlUeXBlIiBtaXhlZD0idHJ1ZSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBOb3QgdGhlIHJlYWwgdXJUeXBlLCBidXQgYXMgY2xvc2UgYW4gYXBwcm94aW1hdGlvbiBhcyB3ZSBjYW4KLSAgIGdldCBpbiB0aGUgWE1MIHJlcHJlc2VudGF0aW9uPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpzZXF1ZW5jZT4KLSAgIDx4czphbnkgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgPC94czpzZXF1ZW5jZT4KLSAgPHhzOmFueUF0dHJpYnV0ZSBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBGaXJzdCB0aGUgYnVpbHQtaW4gcHJpbWl0aXZlIGRhdGF0eXBlcy4gIFRoZXNlIGRlZmluaXRpb25zIGFyZSBmb3IKLSAgICAgIGluZm9ybWF0aW9uIG9ubHksIHRoZSByZWFsIGJ1aWx0LWluIGRlZmluaXRpb25zIGFyZSBtYWdpYy4KLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIEZvciBlYWNoIGJ1aWx0LWluIGRhdGF0eXBlIGluIHRoaXMgc2NoZW1hIChib3RoIHByaW1pdGl2ZSBhbmQKLSAgICAgIGRlcml2ZWQpIGNhbiBiZSB1bmlxdWVseSBhZGRyZXNzZWQgdmlhIGEgVVJJIGNvbnN0cnVjdGVkCi0gICAgICBhcyBmb2xsb3dzOgotICAgICAgICAxKSB0aGUgYmFzZSBVUkkgaXMgdGhlIFVSSSBvZiB0aGUgWE1MIFNjaGVtYSBuYW1lc3BhY2UKLSAgICAgICAgMikgdGhlIGZyYWdtZW50IGlkZW50aWZpZXIgaXMgdGhlIG5hbWUgb2YgdGhlIGRhdGF0eXBlCi0KLSAgICAgIEZvciBleGFtcGxlLCB0byBhZGRyZXNzIHRoZSBpbnQgZGF0YXR5cGUsIHRoZSBVUkkgaXM6Ci0KLSAgICAgICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjaW50Ci0KLSAgICAgIEFkZGl0aW9uYWxseSwgZWFjaCBmYWNldCBkZWZpbml0aW9uIGVsZW1lbnQgY2FuIGJlIHVuaXF1ZWx5Ci0gICAgICBhZGRyZXNzZWQgdmlhIGEgVVJJIGNvbnN0cnVjdGVkIGFzIGZvbGxvd3M6Ci0gICAgICAgIDEpIHRoZSBiYXNlIFVSSSBpcyB0aGUgVVJJIG9mIHRoZSBYTUwgU2NoZW1hIG5hbWVzcGFjZQotICAgICAgICAyKSB0aGUgZnJhZ21lbnQgaWRlbnRpZmllciBpcyB0aGUgbmFtZSBvZiB0aGUgZmFjZXQKLQotICAgICAgRm9yIGV4YW1wbGUsIHRvIGFkZHJlc3MgdGhlIG1heEluY2x1c2l2ZSBmYWNldCwgdGhlIFVSSSBpczoKLQotICAgICAgICBodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNtYXhJbmNsdXNpdmUKLQotICAgICAgQWRkaXRpb25hbGx5LCBlYWNoIGZhY2V0IHVzYWdlIGluIGEgYnVpbHQtaW4gZGF0YXR5cGUgZGVmaW5pdGlvbgotICAgICAgY2FuIGJlIHVuaXF1ZWx5IGFkZHJlc3NlZCB2aWEgYSBVUkkgY29uc3RydWN0ZWQgYXMgZm9sbG93czoKLSAgICAgICAgMSkgdGhlIGJhc2UgVVJJIGlzIHRoZSBVUkkgb2YgdGhlIFhNTCBTY2hlbWEgbmFtZXNwYWNlCi0gICAgICAgIDIpIHRoZSBmcmFnbWVudCBpZGVudGlmaWVyIGlzIHRoZSBuYW1lIG9mIHRoZSBkYXRhdHlwZSwgZm9sbG93ZWQKLSAgICAgICAgICAgYnkgYSBwZXJpb2QgKCIuIikgZm9sbG93ZWQgYnkgdGhlIG5hbWUgb2YgdGhlIGZhY2V0Ci0KLSAgICAgIEZvciBleGFtcGxlLCB0byBhZGRyZXNzIHRoZSB1c2FnZSBvZiB0aGUgbWF4SW5jbHVzaXZlIGZhY2V0IGluCi0gICAgICB0aGUgZGVmaW5pdGlvbiBvZiBpbnQsIHRoZSBVUkkgaXM6Ci0KLSAgICAgICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjaW50Lm1heEluY2x1c2l2ZQotCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0ic3RyaW5nIiBpZD0ic3RyaW5nIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czphcHBpbmZvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Imxlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkxlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heExlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9InBhdHRlcm4iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJvcmRlcmVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIgdmFsdWU9ImNvdW50YWJseSBpbmZpbml0ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im51bWVyaWMiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgPC94czphcHBpbmZvPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNzdHJpbmciLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVNpbXBsZVR5cGUiPgotICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9InByZXNlcnZlIiBpZD0ic3RyaW5nLnByZXNlcnZlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9ImJvb2xlYW4iIGlkPSJib29sZWFuIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czphcHBpbmZvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9InBhdHRlcm4iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJ3aGl0ZVNwYWNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ib3JkZXJlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iYm91bmRlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iY2FyZGluYWxpdHkiIHZhbHVlPSJmaW5pdGUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJudW1lcmljIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgIDwveHM6YXBwaW5mbz4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2Jvb2xlYW4iLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVNpbXBsZVR5cGUiPgotICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIiBmaXhlZD0idHJ1ZSIKLSAgICAgICAgaWQ9ImJvb2xlYW4ud2hpdGVTcGFjZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJmbG9hdCIgaWQ9ImZsb2F0Ij4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czphcHBpbmZvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9InBhdHRlcm4iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhJbmNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhFeGNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5JbmNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5FeGNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJvcmRlcmVkIiB2YWx1ZT0idG90YWwiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0idHJ1ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImNhcmRpbmFsaXR5IiB2YWx1ZT0iZmluaXRlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ibnVtZXJpYyIgdmFsdWU9InRydWUiLz4KLSAgICAgIDwveHM6YXBwaW5mbz4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2Zsb2F0Ii8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlTaW1wbGVUeXBlIj4KLSAgICAgIDx4czp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIgZml4ZWQ9InRydWUiCi0gICAgICAgIGlkPSJmbG9hdC53aGl0ZVNwYWNlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9ImRvdWJsZSIgaWQ9ImRvdWJsZSI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJwYXR0ZXJuIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0iZW51bWVyYXRpb24iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJ3aGl0ZVNwYWNlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4SW5jbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4RXhjbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluSW5jbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluRXhjbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ib3JkZXJlZCIgdmFsdWU9InRvdGFsIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iYm91bmRlZCIgdmFsdWU9InRydWUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIgdmFsdWU9ImZpbml0ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im51bWVyaWMiIHZhbHVlPSJ0cnVlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkb3VibGUiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVNpbXBsZVR5cGUiPgotICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIiAgZml4ZWQ9InRydWUiCi0gICAgICAgIGlkPSJkb3VibGUud2hpdGVTcGFjZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJkZWNpbWFsIiBpZD0iZGVjaW1hbCI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJ0b3RhbERpZ2l0cyIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9ImZyYWN0aW9uRGlnaXRzIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0icGF0dGVybiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heEluY2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heEV4Y2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkluY2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkV4Y2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im9yZGVyZWQiIHZhbHVlPSJ0b3RhbCIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImJvdW5kZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImNhcmRpbmFsaXR5IgotICAgICAgICAgICAgICAgIHZhbHVlPSJjb3VudGFibHkgaW5maW5pdGUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJudW1lcmljIiB2YWx1ZT0idHJ1ZSIvPgotICAgICAgPC94czphcHBpbmZvPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZGVjaW1hbCIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55U2ltcGxlVHlwZSI+Ci0gICAgICA8eHM6d2hpdGVTcGFjZSB2YWx1ZT0iY29sbGFwc2UiICBmaXhlZD0idHJ1ZSIKLSAgICAgICAgaWQ9ImRlY2ltYWwud2hpdGVTcGFjZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgIDx4czpzaW1wbGVUeXBlIG5hbWU9ImR1cmF0aW9uIiBpZD0iZHVyYXRpb24iPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmFwcGluZm8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0icGF0dGVybiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9ImVudW1lcmF0aW9uIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0id2hpdGVTcGFjZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heEluY2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heEV4Y2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkluY2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkV4Y2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im9yZGVyZWQiIHZhbHVlPSJwYXJ0aWFsIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iYm91bmRlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iY2FyZGluYWxpdHkiCi0gICAgICAgICAgICAgICAgdmFsdWU9ImNvdW50YWJseSBpbmZpbml0ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im51bWVyaWMiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgPC94czphcHBpbmZvPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZHVyYXRpb24iLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVNpbXBsZVR5cGUiPgotICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIiAgZml4ZWQ9InRydWUiCi0gICAgICAgIGlkPSJkdXJhdGlvbi53aGl0ZVNwYWNlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgIDwveHM6c2ltcGxlVHlwZT4KLQotIDx4czpzaW1wbGVUeXBlIG5hbWU9ImRhdGVUaW1lIiBpZD0iZGF0ZVRpbWUiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgIDx4czphcHBpbmZvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9InBhdHRlcm4iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhJbmNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhFeGNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5JbmNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5FeGNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJvcmRlcmVkIiB2YWx1ZT0icGFydGlhbCIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImJvdW5kZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImNhcmRpbmFsaXR5IgotICAgICAgICAgICAgICAgIHZhbHVlPSJjb3VudGFibHkgaW5maW5pdGUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJudW1lcmljIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgIDwveHM6YXBwaW5mbz4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2RhdGVUaW1lIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlTaW1wbGVUeXBlIj4KLSAgICAgIDx4czp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIgIGZpeGVkPSJ0cnVlIgotICAgICAgICBpZD0iZGF0ZVRpbWUud2hpdGVTcGFjZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJ0aW1lIiBpZD0idGltZSI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmFwcGluZm8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0icGF0dGVybiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9ImVudW1lcmF0aW9uIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0id2hpdGVTcGFjZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heEluY2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heEV4Y2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkluY2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkV4Y2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im9yZGVyZWQiIHZhbHVlPSJwYXJ0aWFsIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iYm91bmRlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iY2FyZGluYWxpdHkiCi0gICAgICAgICAgICAgICAgdmFsdWU9ImNvdW50YWJseSBpbmZpbml0ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im51bWVyaWMiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgPC94czphcHBpbmZvPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jdGltZSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55U2ltcGxlVHlwZSI+Ci0gICAgICA8eHM6d2hpdGVTcGFjZSB2YWx1ZT0iY29sbGFwc2UiICBmaXhlZD0idHJ1ZSIKLSAgICAgICAgaWQ9InRpbWUud2hpdGVTcGFjZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJkYXRlIiBpZD0iZGF0ZSI+Ci0gICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJwYXR0ZXJuIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0iZW51bWVyYXRpb24iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJ3aGl0ZVNwYWNlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4SW5jbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4RXhjbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluSW5jbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluRXhjbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ib3JkZXJlZCIgdmFsdWU9InBhcnRpYWwiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iY291bnRhYmx5IGluZmluaXRlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ibnVtZXJpYyIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkYXRlIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlTaW1wbGVUeXBlIj4KLSAgICAgIDx4czp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIgIGZpeGVkPSJ0cnVlIgotICAgICAgICBpZD0iZGF0ZS53aGl0ZVNwYWNlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9ImdZZWFyTW9udGgiIGlkPSJnWWVhck1vbnRoIj4KLSAgIDx4czphbm5vdGF0aW9uPgotICAgIDx4czphcHBpbmZvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9InBhdHRlcm4iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhJbmNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhFeGNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5JbmNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5FeGNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJvcmRlcmVkIiB2YWx1ZT0icGFydGlhbCIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImJvdW5kZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImNhcmRpbmFsaXR5IgotICAgICAgICAgICAgICAgIHZhbHVlPSJjb3VudGFibHkgaW5maW5pdGUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJudW1lcmljIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgIDwveHM6YXBwaW5mbz4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2dZZWFyTW9udGgiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVNpbXBsZVR5cGUiPgotICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIiAgZml4ZWQ9InRydWUiCi0gICAgICAgIGlkPSJnWWVhck1vbnRoLndoaXRlU3BhY2UiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iZ1llYXIiIGlkPSJnWWVhciI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmFwcGluZm8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0icGF0dGVybiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9ImVudW1lcmF0aW9uIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0id2hpdGVTcGFjZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heEluY2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heEV4Y2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkluY2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkV4Y2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im9yZGVyZWQiIHZhbHVlPSJwYXJ0aWFsIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iYm91bmRlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iY2FyZGluYWxpdHkiCi0gICAgICAgICAgICAgICAgdmFsdWU9ImNvdW50YWJseSBpbmZpbml0ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im51bWVyaWMiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgPC94czphcHBpbmZvPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZ1llYXIiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVNpbXBsZVR5cGUiPgotICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIiAgZml4ZWQ9InRydWUiCi0gICAgICAgIGlkPSJnWWVhci53aGl0ZVNwYWNlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gPHhzOnNpbXBsZVR5cGUgbmFtZT0iZ01vbnRoRGF5IiBpZD0iZ01vbnRoRGF5Ij4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czphcHBpbmZvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9InBhdHRlcm4iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhJbmNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhFeGNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5JbmNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5FeGNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJvcmRlcmVkIiB2YWx1ZT0icGFydGlhbCIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImJvdW5kZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImNhcmRpbmFsaXR5IgotICAgICAgICAgICAgICAgIHZhbHVlPSJjb3VudGFibHkgaW5maW5pdGUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJudW1lcmljIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgIDwveHM6YXBwaW5mbz4KLSAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNnTW9udGhEYXkiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVNpbXBsZVR5cGUiPgotICAgICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIiBmaXhlZD0idHJ1ZSIKLSAgICAgICAgICAgICAgICBpZD0iZ01vbnRoRGF5LndoaXRlU3BhY2UiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iZ0RheSIgaWQ9ImdEYXkiPgotICAgIDx4czphbm5vdGF0aW9uPgotICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJwYXR0ZXJuIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0iZW51bWVyYXRpb24iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJ3aGl0ZVNwYWNlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4SW5jbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4RXhjbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluSW5jbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluRXhjbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ib3JkZXJlZCIgdmFsdWU9InBhcnRpYWwiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iY291bnRhYmx5IGluZmluaXRlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ibnVtZXJpYyIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNnRGF5Ii8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlTaW1wbGVUeXBlIj4KLSAgICAgICAgIDx4czp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIgIGZpeGVkPSJ0cnVlIgotICAgICAgICAgICAgICAgIGlkPSJnRGF5LndoaXRlU3BhY2UiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSA8eHM6c2ltcGxlVHlwZSBuYW1lPSJnTW9udGgiIGlkPSJnTW9udGgiPgotICAgIDx4czphbm5vdGF0aW9uPgotICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJwYXR0ZXJuIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0iZW51bWVyYXRpb24iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJ3aGl0ZVNwYWNlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4SW5jbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4RXhjbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluSW5jbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluRXhjbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ib3JkZXJlZCIgdmFsdWU9InBhcnRpYWwiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iY291bnRhYmx5IGluZmluaXRlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ibnVtZXJpYyIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNnTW9udGgiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVNpbXBsZVR5cGUiPgotICAgICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIiAgZml4ZWQ9InRydWUiCi0gICAgICAgICAgICAgICAgaWQ9ImdNb250aC53aGl0ZVNwYWNlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJoZXhCaW5hcnkiIGlkPSJoZXhCaW5hcnkiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmFwcGluZm8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluTGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4TGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0icGF0dGVybiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9ImVudW1lcmF0aW9uIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0id2hpdGVTcGFjZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im9yZGVyZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImJvdW5kZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImNhcmRpbmFsaXR5IgotICAgICAgICAgICAgICAgIHZhbHVlPSJjb3VudGFibHkgaW5maW5pdGUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJudW1lcmljIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgIDwveHM6YXBwaW5mbz4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2JpbmFyeSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55U2ltcGxlVHlwZSI+Ci0gICAgICA8eHM6d2hpdGVTcGFjZSB2YWx1ZT0iY29sbGFwc2UiIGZpeGVkPSJ0cnVlIgotICAgICAgICBpZD0iaGV4QmluYXJ5LndoaXRlU3BhY2UiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgPC94czpzaW1wbGVUeXBlPgotCi0gPHhzOnNpbXBsZVR5cGUgbmFtZT0iYmFzZTY0QmluYXJ5IiBpZD0iYmFzZTY0QmluYXJ5Ij4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czphcHBpbmZvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Imxlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkxlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heExlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9InBhdHRlcm4iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJvcmRlcmVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iY291bnRhYmx5IGluZmluaXRlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ibnVtZXJpYyIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICAgICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2Jhc2U2NEJpbmFyeSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55U2ltcGxlVHlwZSI+Ci0gICAgICA8eHM6d2hpdGVTcGFjZSB2YWx1ZT0iY29sbGFwc2UiIGZpeGVkPSJ0cnVlIgotICAgICAgICBpZD0iYmFzZTY0QmluYXJ5LndoaXRlU3BhY2UiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgPC94czpzaW1wbGVUeXBlPgotCi0gICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJhbnlVUkkiIGlkPSJhbnlVUkkiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmFwcGluZm8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluTGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4TGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0icGF0dGVybiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9ImVudW1lcmF0aW9uIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0id2hpdGVTcGFjZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im9yZGVyZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImJvdW5kZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImNhcmRpbmFsaXR5IgotICAgICAgICAgICAgICAgIHZhbHVlPSJjb3VudGFibHkgaW5maW5pdGUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJudW1lcmljIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgIDwveHM6YXBwaW5mbz4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2FueVVSSSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55U2ltcGxlVHlwZSI+Ci0gICAgICA8eHM6d2hpdGVTcGFjZSB2YWx1ZT0iY29sbGFwc2UiICBmaXhlZD0idHJ1ZSIKLSAgICAgICAgaWQ9ImFueVVSSS53aGl0ZVNwYWNlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJRTmFtZSIgaWQ9IlFOYW1lIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzOmFwcGluZm8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluTGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4TGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0icGF0dGVybiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9ImVudW1lcmF0aW9uIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0id2hpdGVTcGFjZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im9yZGVyZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImJvdW5kZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImNhcmRpbmFsaXR5IgotICAgICAgICAgICAgICAgIHZhbHVlPSJjb3VudGFibHkgaW5maW5pdGUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJudW1lcmljIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgIDwveHM6YXBwaW5mbz4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI1FOYW1lIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlTaW1wbGVUeXBlIj4KLSAgICAgIDx4czp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIgIGZpeGVkPSJ0cnVlIgotICAgICAgICBpZD0iUU5hbWUud2hpdGVTcGFjZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iTk9UQVRJT04iIGlkPSJOT1RBVElPTiI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgIDx4czphcHBpbmZvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Imxlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkxlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heExlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9InBhdHRlcm4iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJvcmRlcmVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iY291bnRhYmx5IGluZmluaXRlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ibnVtZXJpYyIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNOT1RBVElPTiIvPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIE5PVEFUSU9OIGNhbm5vdCBiZSB1c2VkIGRpcmVjdGx5IGluIGEgc2NoZW1hOyByYXRoZXIgYSB0eXBlCi0gICAgICAgIG11c3QgYmUgZGVyaXZlZCBmcm9tIGl0IGJ5IHNwZWNpZnlpbmcgYXQgbGVhc3Qgb25lIGVudW1lcmF0aW9uCi0gICAgICAgIGZhY2V0IHdob3NlIHZhbHVlIGlzIHRoZSBuYW1lIG9mIGEgTk9UQVRJT04gZGVjbGFyZWQgaW4gdGhlCi0gICAgICAgIHNjaGVtYS4KLSAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVNpbXBsZVR5cGUiPgotICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIiAgZml4ZWQ9InRydWUiCi0gICAgICAgIGlkPSJOT1RBVElPTi53aGl0ZVNwYWNlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czphbm5vdGF0aW9uPgotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgTm93IHRoZSBkZXJpdmVkIHByaW1pdGl2ZSB0eXBlcwotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9Im5vcm1hbGl6ZWRTdHJpbmciIGlkPSJub3JtYWxpemVkU3RyaW5nIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI25vcm1hbGl6ZWRTdHJpbmciLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+Ci0gICAgICA8eHM6d2hpdGVTcGFjZSB2YWx1ZT0icmVwbGFjZSIKLSAgICAgICAgaWQ9Im5vcm1hbGl6ZWRTdHJpbmcud2hpdGVTcGFjZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJ0b2tlbiIgaWQ9InRva2VuIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Rva2VuIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpub3JtYWxpemVkU3RyaW5nIj4KLSAgICAgIDx4czp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIgaWQ9InRva2VuLndoaXRlU3BhY2UiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0ibGFuZ3VhZ2UiIGlkPSJsYW5ndWFnZSI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNsYW5ndWFnZSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICAgPHhzOnBhdHRlcm4KLSAgICAgICAgdmFsdWU9IlthLXpBLVpdezEsOH0oLVthLXpBLVowLTldezEsOH0pKiIKLSAgICAgICAgICAgICAgICBpZD0ibGFuZ3VhZ2UucGF0dGVybiI+Ci0gICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgICAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sI05ULUxhbmd1YWdlSUQiPgotICAgICAgICAgICAgcGF0dGVybiBzcGVjaWZpZXMgdGhlIGNvbnRlbnQgb2Ygc2VjdGlvbiAyLjEyIG9mIFhNTCAxLjBlMgotICAgICAgICAgICAgYW5kIFJGQyAzMDY2IChSZXZpc2VkIHZlcnNpb24gb2YgUkZDIDE3NjYpLgotICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgPC94czpwYXR0ZXJuPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJJRFJFRlMiIGlkPSJJRFJFRlMiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmFwcGluZm8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluTGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4TGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0iZW51bWVyYXRpb24iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJ3aGl0ZVNwYWNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ib3JkZXJlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iYm91bmRlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iY2FyZGluYWxpdHkiCi0gICAgICAgICAgICAgICAgdmFsdWU9ImNvdW50YWJseSBpbmZpbml0ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im51bWVyaWMiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgPC94czphcHBpbmZvPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jSURSRUZTIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbj4KLSAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgICA8eHM6bGlzdCBpdGVtVHlwZT0ieHM6SURSRUYiLz4KLSAgICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICAgICAgPHhzOm1pbkxlbmd0aCB2YWx1ZT0iMSIgaWQ9IklEUkVGUy5taW5MZW5ndGgiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iRU5USVRJRVMiIGlkPSJFTlRJVElFUyI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJsZW5ndGgiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5MZW5ndGgiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhMZW5ndGgiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJvcmRlcmVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iY291bnRhYmx5IGluZmluaXRlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ibnVtZXJpYyIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNFTlRJVElFUyIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24+Ci0gICAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgICAgPHhzOmxpc3QgaXRlbVR5cGU9InhzOkVOVElUWSIvPgotICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICAgICA8eHM6bWluTGVuZ3RoIHZhbHVlPSIxIiBpZD0iRU5USVRJRVMubWluTGVuZ3RoIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9Ik5NVE9LRU4iIGlkPSJOTVRPS0VOIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI05NVE9LRU4iLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICAgIDx4czpwYXR0ZXJuIHZhbHVlPSJcYysiIGlkPSJOTVRPS0VOLnBhdHRlcm4iPgotICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICAgICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbCNOVC1ObXRva2VuIj4KLSAgICAgICAgICAgIHBhdHRlcm4gbWF0Y2hlcyBwcm9kdWN0aW9uIDcgZnJvbSB0aGUgWE1MIHNwZWMKLSAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgIDwveHM6cGF0dGVybj4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iTk1UT0tFTlMiIGlkPSJOTVRPS0VOUyI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJsZW5ndGgiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5MZW5ndGgiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhMZW5ndGgiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJvcmRlcmVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iY291bnRhYmx5IGluZmluaXRlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ibnVtZXJpYyIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNOTVRPS0VOUyIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24+Ci0gICAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgICAgPHhzOmxpc3QgaXRlbVR5cGU9InhzOk5NVE9LRU4iLz4KLSAgICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICAgICAgPHhzOm1pbkxlbmd0aCB2YWx1ZT0iMSIgaWQ9Ik5NVE9LRU5TLm1pbkxlbmd0aCIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJOYW1lIiBpZD0iTmFtZSI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNOYW1lIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgICA8eHM6cGF0dGVybiB2YWx1ZT0iXGlcYyoiIGlkPSJOYW1lLnBhdHRlcm4iPgotICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sI05ULU5hbWUiPgotICAgICAgICAgICAgcGF0dGVybiBtYXRjaGVzIHByb2R1Y3Rpb24gNSBmcm9tIHRoZSBYTUwgc3BlYwotICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgPC94czpwYXR0ZXJuPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJOQ05hbWUiIGlkPSJOQ05hbWUiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jTkNOYW1lIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOYW1lIj4KLSAgICAgIDx4czpwYXR0ZXJuIHZhbHVlPSJbXGktWzpdXVtcYy1bOl1dKiIgaWQ9Ik5DTmFtZS5wYXR0ZXJuIj4KLSAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwtbmFtZXMvI05ULU5DTmFtZSI+Ci0gICAgICAgICAgICBwYXR0ZXJuIG1hdGNoZXMgcHJvZHVjdGlvbiA0IGZyb20gdGhlIE5hbWVzcGFjZXMgaW4gWE1MIHNwZWMKLSAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgIDwveHM6cGF0dGVybj4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgIDx4czpzaW1wbGVUeXBlIG5hbWU9IklEIiBpZD0iSUQiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jSUQiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5DTmFtZSIvPgotICAgPC94czpzaW1wbGVUeXBlPgotCi0gICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJJRFJFRiIgaWQ9IklEUkVGIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI0lEUkVGIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOQ05hbWUiLz4KLSAgIDwveHM6c2ltcGxlVHlwZT4KLQotICAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iRU5USVRZIiBpZD0iRU5USVRZIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI0VOVElUWSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6TkNOYW1lIi8+Ci0gICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iaW50ZWdlciIgaWQ9ImludGVnZXIiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jaW50ZWdlciIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6ZGVjaW1hbCI+Ci0gICAgICA8eHM6ZnJhY3Rpb25EaWdpdHMgdmFsdWU9IjAiIGZpeGVkPSJ0cnVlIiBpZD0iaW50ZWdlci5mcmFjdGlvbkRpZ2l0cyIvPgotICAgICAgPHhzOnBhdHRlcm4gdmFsdWU9J1stK10/WzAtOV0rJy8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9Im5vblBvc2l0aXZlSW50ZWdlciIgaWQ9Im5vblBvc2l0aXZlSW50ZWdlciI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNub25Qb3NpdGl2ZUludGVnZXIiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmludGVnZXIiPgotICAgICAgPHhzOm1heEluY2x1c2l2ZSB2YWx1ZT0iMCIgaWQ9Im5vblBvc2l0aXZlSW50ZWdlci5tYXhJbmNsdXNpdmUiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0ibmVnYXRpdmVJbnRlZ2VyIiBpZD0ibmVnYXRpdmVJbnRlZ2VyIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI25lZ2F0aXZlSW50ZWdlciIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6bm9uUG9zaXRpdmVJbnRlZ2VyIj4KLSAgICAgIDx4czptYXhJbmNsdXNpdmUgdmFsdWU9Ii0xIiBpZD0ibmVnYXRpdmVJbnRlZ2VyLm1heEluY2x1c2l2ZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJsb25nIiBpZD0ibG9uZyI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0idHJ1ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImNhcmRpbmFsaXR5IiB2YWx1ZT0iZmluaXRlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNsb25nIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czppbnRlZ2VyIj4KLSAgICAgIDx4czptaW5JbmNsdXNpdmUgdmFsdWU9Ii05MjIzMzcyMDM2ODU0Nzc1ODA4IiBpZD0ibG9uZy5taW5JbmNsdXNpdmUiLz4KLSAgICAgIDx4czptYXhJbmNsdXNpdmUgdmFsdWU9IjkyMjMzNzIwMzY4NTQ3NzU4MDciIGlkPSJsb25nLm1heEluY2x1c2l2ZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJpbnQiIGlkPSJpbnQiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jaW50Ii8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpsb25nIj4KLSAgICAgIDx4czptaW5JbmNsdXNpdmUgdmFsdWU9Ii0yMTQ3NDgzNjQ4IiBpZD0iaW50Lm1pbkluY2x1c2l2ZSIvPgotICAgICAgPHhzOm1heEluY2x1c2l2ZSB2YWx1ZT0iMjE0NzQ4MzY0NyIgaWQ9ImludC5tYXhJbmNsdXNpdmUiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0ic2hvcnQiIGlkPSJzaG9ydCI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNzaG9ydCIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6aW50Ij4KLSAgICAgIDx4czptaW5JbmNsdXNpdmUgdmFsdWU9Ii0zMjc2OCIgaWQ9InNob3J0Lm1pbkluY2x1c2l2ZSIvPgotICAgICAgPHhzOm1heEluY2x1c2l2ZSB2YWx1ZT0iMzI3NjciIGlkPSJzaG9ydC5tYXhJbmNsdXNpdmUiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iYnl0ZSIgaWQ9ImJ5dGUiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jYnl0ZSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c2hvcnQiPgotICAgICAgPHhzOm1pbkluY2x1c2l2ZSB2YWx1ZT0iLTEyOCIgaWQ9ImJ5dGUubWluSW5jbHVzaXZlIi8+Ci0gICAgICA8eHM6bWF4SW5jbHVzaXZlIHZhbHVlPSIxMjciIGlkPSJieXRlLm1heEluY2x1c2l2ZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJub25OZWdhdGl2ZUludGVnZXIiIGlkPSJub25OZWdhdGl2ZUludGVnZXIiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jbm9uTmVnYXRpdmVJbnRlZ2VyIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czppbnRlZ2VyIj4KLSAgICAgIDx4czptaW5JbmNsdXNpdmUgdmFsdWU9IjAiIGlkPSJub25OZWdhdGl2ZUludGVnZXIubWluSW5jbHVzaXZlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9InVuc2lnbmVkTG9uZyIgaWQ9InVuc2lnbmVkTG9uZyI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0idHJ1ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImNhcmRpbmFsaXR5IiB2YWx1ZT0iZmluaXRlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyN1bnNpZ25lZExvbmciLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOm5vbk5lZ2F0aXZlSW50ZWdlciI+Ci0gICAgICA8eHM6bWF4SW5jbHVzaXZlIHZhbHVlPSIxODQ0Njc0NDA3MzcwOTU1MTYxNSIKLSAgICAgICAgaWQ9InVuc2lnbmVkTG9uZy5tYXhJbmNsdXNpdmUiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0idW5zaWduZWRJbnQiIGlkPSJ1bnNpZ25lZEludCI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyN1bnNpZ25lZEludCIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dW5zaWduZWRMb25nIj4KLSAgICAgIDx4czptYXhJbmNsdXNpdmUgdmFsdWU9IjQyOTQ5NjcyOTUiCi0gICAgICAgIGlkPSJ1bnNpZ25lZEludC5tYXhJbmNsdXNpdmUiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0idW5zaWduZWRTaG9ydCIgaWQ9InVuc2lnbmVkU2hvcnQiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jdW5zaWduZWRTaG9ydCIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dW5zaWduZWRJbnQiPgotICAgICAgPHhzOm1heEluY2x1c2l2ZSB2YWx1ZT0iNjU1MzUiCi0gICAgICAgIGlkPSJ1bnNpZ25lZFNob3J0Lm1heEluY2x1c2l2ZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJ1bnNpZ25lZEJ5dGUiIGlkPSJ1bnNpZ25lZEJ5dGUiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jdW5zaWduZWRCeXRlIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp1bnNpZ25lZFNob3J0Ij4KLSAgICAgIDx4czptYXhJbmNsdXNpdmUgdmFsdWU9IjI1NSIgaWQ9InVuc2lnbmVkQnl0ZS5tYXhJbmNsdXNpdmUiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0icG9zaXRpdmVJbnRlZ2VyIiBpZD0icG9zaXRpdmVJbnRlZ2VyIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Bvc2l0aXZlSW50ZWdlciIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6bm9uTmVnYXRpdmVJbnRlZ2VyIj4KLSAgICAgIDx4czptaW5JbmNsdXNpdmUgdmFsdWU9IjEiIGlkPSJwb3NpdGl2ZUludGVnZXIubWluSW5jbHVzaXZlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gPHhzOnNpbXBsZVR5cGUgbmFtZT0iZGVyaXZhdGlvbkNvbnRyb2wiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgQSB1dGlsaXR5IHR5cGUsIG5vdCBmb3IgcHVibGljIHVzZTwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Tk1UT0tFTiI+Ci0gICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InN1YnN0aXR1dGlvbiIvPgotICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJleHRlbnNpb24iLz4KLSAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVzdHJpY3Rpb24iLz4KLSAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGlzdCIvPgotICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ1bmlvbiIvPgotICA8L3hzOnJlc3RyaWN0aW9uPgotIDwveHM6c2ltcGxlVHlwZT4KLQotIDx4czpncm91cCBuYW1lPSJzaW1wbGVEZXJpdmF0aW9uIj4KLSAgPHhzOmNob2ljZT4KLSAgICA8eHM6ZWxlbWVudCByZWY9InhzOnJlc3RyaWN0aW9uIi8+Ci0gICAgPHhzOmVsZW1lbnQgcmVmPSJ4czpsaXN0Ii8+Ci0gICAgPHhzOmVsZW1lbnQgcmVmPSJ4czp1bmlvbiIvPgotICA8L3hzOmNob2ljZT4KLSA8L3hzOmdyb3VwPgotCi0gPHhzOnNpbXBsZVR5cGUgbmFtZT0ic2ltcGxlRGVyaXZhdGlvblNldCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAjYWxsIG9yIChwb3NzaWJseSBlbXB0eSkgc3Vic2V0IG9mIHtyZXN0cmljdGlvbiwgdW5pb24sIGxpc3R9Ci0gICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgIEEgdXRpbGl0eSB0eXBlLCBub3QgZm9yIHB1YmxpYyB1c2U8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOnVuaW9uPgotICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIjYWxsIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgIDwveHM6c2ltcGxlVHlwZT4KLSAgIDx4czpzaW1wbGVUeXBlPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpkZXJpdmF0aW9uQ29udHJvbCI+Ci0gICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGlzdCIvPgotICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InVuaW9uIi8+Ci0gICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVzdHJpY3Rpb24iLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgPC94czpzaW1wbGVUeXBlPgotICA8L3hzOnVuaW9uPgotIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ic2ltcGxlVHlwZSIgYWJzdHJhY3Q9InRydWUiPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6YW5ub3RhdGVkIj4KLSAgICAgICAgPHhzOmdyb3VwIHJlZj0ieHM6c2ltcGxlRGVyaXZhdGlvbiIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZpbmFsIiB0eXBlPSJ4czpzaW1wbGVEZXJpdmF0aW9uU2V0Ii8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6TkNOYW1lIj4KLSAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICBDYW4gYmUgcmVzdHJpY3RlZCB0byByZXF1aXJlZCBvciBmb3JiaWRkZW4KLSAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idG9wTGV2ZWxTaW1wbGVUeXBlIj4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c2ltcGxlVHlwZSI+Ci0gICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgIDx4czpncm91cCByZWY9InhzOnNpbXBsZURlcml2YXRpb24iLz4KLSAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB1c2U9InJlcXVpcmVkIgotICAgICAgICAgICAgIHR5cGU9InhzOk5DTmFtZSI+Ci0gICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgUmVxdWlyZWQgYXQgdGhlIHRvcCBsZXZlbAotICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImxvY2FsU2ltcGxlVHlwZSI+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnNpbXBsZVR5cGUiPgotICAgICAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgICA8eHM6Z3JvdXAgcmVmPSJ4czpzaW1wbGVEZXJpdmF0aW9uIi8+Ci0gICAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdXNlPSJwcm9oaWJpdGVkIj4KLSAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICBGb3JiaWRkZW4gd2hlbiBuZXN0ZWQKLSAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZpbmFsIiB1c2U9InByb2hpYml0ZWQiLz4KLSAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJzaW1wbGVUeXBlIiB0eXBlPSJ4czp0b3BMZXZlbFNpbXBsZVR5cGUiIGlkPSJzaW1wbGVUeXBlIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2VsZW1lbnQtc2ltcGxlVHlwZSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgPC94czplbGVtZW50PgotCi0gIDx4czpncm91cCBuYW1lPSJmYWNldHMiPgotICAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgV2Ugc2hvdWxkIHVzZSBhIHN1YnN0aXR1dGlvbiBncm91cCBmb3IgZmFjZXRzLCBidXQKLSAgICAgICB0aGF0J3MgcnVsZWQgb3V0IGJlY2F1c2UgaXQgd291bGQgYWxsb3cgdXNlcnMgdG8KLSAgICAgICBhZGQgdGhlaXIgb3duLCB3aGljaCB3ZSdyZSBub3QgcmVhZHkgZm9yIHlldC4KLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICA8L3hzOmFubm90YXRpb24+Ci0gICA8eHM6Y2hvaWNlPgotICAgIDx4czplbGVtZW50IHJlZj0ieHM6bWluRXhjbHVzaXZlIi8+Ci0gICAgPHhzOmVsZW1lbnQgcmVmPSJ4czptaW5JbmNsdXNpdmUiLz4KLSAgICA8eHM6ZWxlbWVudCByZWY9InhzOm1heEV4Y2x1c2l2ZSIvPgotICAgIDx4czplbGVtZW50IHJlZj0ieHM6bWF4SW5jbHVzaXZlIi8+Ci0gICAgPHhzOmVsZW1lbnQgcmVmPSJ4czp0b3RhbERpZ2l0cyIvPgotICAgIDx4czplbGVtZW50IHJlZj0ieHM6ZnJhY3Rpb25EaWdpdHMiLz4KLSAgICA8eHM6ZWxlbWVudCByZWY9InhzOmxlbmd0aCIvPgotICAgIDx4czplbGVtZW50IHJlZj0ieHM6bWluTGVuZ3RoIi8+Ci0gICAgPHhzOmVsZW1lbnQgcmVmPSJ4czptYXhMZW5ndGgiLz4KLSAgICA8eHM6ZWxlbWVudCByZWY9InhzOmVudW1lcmF0aW9uIi8+Ci0gICAgPHhzOmVsZW1lbnQgcmVmPSJ4czp3aGl0ZVNwYWNlIi8+Ci0gICAgPHhzOmVsZW1lbnQgcmVmPSJ4czpwYXR0ZXJuIi8+Ci0gICA8L3hzOmNob2ljZT4KLSAgPC94czpncm91cD4KLQotICA8eHM6Z3JvdXAgbmFtZT0ic2ltcGxlUmVzdHJpY3Rpb25Nb2RlbCI+Ci0gICA8eHM6c2VxdWVuY2U+Ci0gICAgPHhzOmVsZW1lbnQgbmFtZT0ic2ltcGxlVHlwZSIgdHlwZT0ieHM6bG9jYWxTaW1wbGVUeXBlIiBtaW5PY2N1cnM9IjAiLz4KLSAgICA8eHM6Z3JvdXAgcmVmPSJ4czpmYWNldHMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgIDwveHM6c2VxdWVuY2U+Ci0gIDwveHM6Z3JvdXA+Ci0KLSAgPHhzOmVsZW1lbnQgbmFtZT0icmVzdHJpY3Rpb24iIGlkPSJyZXN0cmljdGlvbiI+Ci0gICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICAgICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2VsZW1lbnQtcmVzdHJpY3Rpb24iPgotICAgICAgICAgIGJhc2UgYXR0cmlidXRlIGFuZCBzaW1wbGVUeXBlIGNoaWxkIGFyZSBtdXR1YWxseQotICAgICAgICAgIGV4Y2x1c2l2ZSwgYnV0IG9uZSBvciBvdGhlciBpcyByZXF1aXJlZAotICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6YW5ub3RhdGVkIj4KLSAgICAgICAgIDx4czpncm91cCByZWY9InhzOnNpbXBsZVJlc3RyaWN0aW9uTW9kZWwiLz4KLSAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYmFzZSIgdHlwZT0ieHM6UU5hbWUiIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICAgIDwveHM6Y29tcGxleFR5cGU+Ci0gIDwveHM6ZWxlbWVudD4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJsaXN0IiBpZD0ibGlzdCI+Ci0gICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICAgICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2VsZW1lbnQtbGlzdCI+Ci0gICAgICAgICAgaXRlbVR5cGUgYXR0cmlidXRlIGFuZCBzaW1wbGVUeXBlIGNoaWxkIGFyZSBtdXR1YWxseQotICAgICAgICAgIGV4Y2x1c2l2ZSwgYnV0IG9uZSBvciBvdGhlciBpcyByZXF1aXJlZAotICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6YW5ub3RhdGVkIj4KLSAgICAgICAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJzaW1wbGVUeXBlIiB0eXBlPSJ4czpsb2NhbFNpbXBsZVR5cGUiCi0gICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Iml0ZW1UeXBlIiB0eXBlPSJ4czpRTmFtZSIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94czpjb21wbGV4VHlwZT4KLSAgPC94czplbGVtZW50PgotCi0gIDx4czplbGVtZW50IG5hbWU9InVuaW9uIiBpZD0idW5pb24iPgotICAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNlbGVtZW50LXVuaW9uIj4KLSAgICAgICAgICBtZW1iZXJUeXBlcyBhdHRyaWJ1dGUgbXVzdCBiZSBub24tZW1wdHkgb3IgdGhlcmUgbXVzdCBiZQotICAgICAgICAgIGF0IGxlYXN0IG9uZSBzaW1wbGVUeXBlIGNoaWxkCi0gICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czphbm5vdGF0ZWQiPgotICAgICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9InNpbXBsZVR5cGUiIHR5cGU9InhzOmxvY2FsU2ltcGxlVHlwZSIKLSAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1lbWJlclR5cGVzIiB1c2U9Im9wdGlvbmFsIj4KLSAgICAgICAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgICAgICAgICA8eHM6bGlzdCBpdGVtVHlwZT0ieHM6UU5hbWUiLz4KLSAgICAgICAgICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICAgIDwveHM6Y29tcGxleFR5cGU+Ci0gIDwveHM6ZWxlbWVudD4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZmFjZXQiPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6YW5ub3RhdGVkIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZpeGVkIiB0eXBlPSJ4czpib29sZWFuIiB1c2U9Im9wdGlvbmFsIgotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9ImZhbHNlIi8+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9Im5vRml4ZWRGYWNldCI+Ci0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpmYWNldCI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmaXhlZCIgdXNlPSJwcm9oaWJpdGVkIi8+Ci0gICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmVsZW1lbnQgbmFtZT0ibWluRXhjbHVzaXZlIiBpZD0ibWluRXhjbHVzaXZlIiB0eXBlPSJ4czpmYWNldCI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNlbGVtZW50LW1pbkV4Y2x1c2l2ZSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgPC94czplbGVtZW50PgotICA8eHM6ZWxlbWVudCBuYW1lPSJtaW5JbmNsdXNpdmUiIGlkPSJtaW5JbmNsdXNpdmUiIHR5cGU9InhzOmZhY2V0Ij4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2VsZW1lbnQtbWluSW5jbHVzaXZlIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICA8L3hzOmVsZW1lbnQ+Ci0KLSAgPHhzOmVsZW1lbnQgbmFtZT0ibWF4RXhjbHVzaXZlIiBpZD0ibWF4RXhjbHVzaXZlIiB0eXBlPSJ4czpmYWNldCI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNlbGVtZW50LW1heEV4Y2x1c2l2ZSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgPC94czplbGVtZW50PgotICA8eHM6ZWxlbWVudCBuYW1lPSJtYXhJbmNsdXNpdmUiIGlkPSJtYXhJbmNsdXNpdmUiIHR5cGU9InhzOmZhY2V0Ij4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2VsZW1lbnQtbWF4SW5jbHVzaXZlIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICA8L3hzOmVsZW1lbnQ+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Im51bUZhY2V0Ij4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6ZmFjZXQiPgotICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHM6YW5ub3RhdGlvbiIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbHVlIiB0eXBlPSJ4czpub25OZWdhdGl2ZUludGVnZXIiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJ0b3RhbERpZ2l0cyIgaWQ9InRvdGFsRGlnaXRzIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2VsZW1lbnQtdG90YWxEaWdpdHMiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOmNvbXBsZXhUeXBlPgotICAgICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6bnVtRmFjZXQiPgotICAgICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHM6YW5ub3RhdGlvbiIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbHVlIiB0eXBlPSJ4czpwb3NpdGl2ZUludGVnZXIiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzOmNvbXBsZXhUeXBlPgotICA8L3hzOmVsZW1lbnQ+Ci0gIDx4czplbGVtZW50IG5hbWU9ImZyYWN0aW9uRGlnaXRzIiBpZD0iZnJhY3Rpb25EaWdpdHMiIHR5cGU9InhzOm51bUZhY2V0Ij4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2VsZW1lbnQtZnJhY3Rpb25EaWdpdHMiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gIDwveHM6ZWxlbWVudD4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJsZW5ndGgiIGlkPSJsZW5ndGgiIHR5cGU9InhzOm51bUZhY2V0Ij4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2VsZW1lbnQtbGVuZ3RoIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICA8L3hzOmVsZW1lbnQ+Ci0gIDx4czplbGVtZW50IG5hbWU9Im1pbkxlbmd0aCIgaWQ9Im1pbkxlbmd0aCIgdHlwZT0ieHM6bnVtRmFjZXQiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZWxlbWVudC1taW5MZW5ndGgiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gIDwveHM6ZWxlbWVudD4KLSAgPHhzOmVsZW1lbnQgbmFtZT0ibWF4TGVuZ3RoIiBpZD0ibWF4TGVuZ3RoIiB0eXBlPSJ4czpudW1GYWNldCI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNlbGVtZW50LW1heExlbmd0aCIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgPC94czplbGVtZW50PgotCi0gIDx4czplbGVtZW50IG5hbWU9ImVudW1lcmF0aW9uIiBpZD0iZW51bWVyYXRpb24iIHR5cGU9InhzOm5vRml4ZWRGYWNldCI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNlbGVtZW50LWVudW1lcmF0aW9uIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICA8L3hzOmVsZW1lbnQ+Ci0KLSAgPHhzOmVsZW1lbnQgbmFtZT0id2hpdGVTcGFjZSIgaWQ9IndoaXRlU3BhY2UiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZWxlbWVudC13aGl0ZVNwYWNlIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpjb21wbGV4VHlwZT4KLSAgICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmZhY2V0Ij4KLSAgICAgICAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgotICAgICAgICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icHJlc2VydmUiLz4KLSAgICAgICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlcGxhY2UiLz4KLSAgICAgICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvbGxhcHNlIi8+Ci0gICAgICAgICAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgICAgICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94czpjb21wbGV4VHlwZT4KLSAgPC94czplbGVtZW50PgotCi0gIDx4czplbGVtZW50IG5hbWU9InBhdHRlcm4iIGlkPSJwYXR0ZXJuIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2VsZW1lbnQtcGF0dGVybiIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpub0ZpeGVkRmFjZXQiPgotICAgICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHM6YW5ub3RhdGlvbiIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbHVlIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzOmNvbXBsZXhUeXBlPgotICA8L3hzOmVsZW1lbnQ+Ci0KLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvc2ltcGxlL2phdmFzcmMvU2ltcGxlUGVyc29uVGVzdC5qYXZhIGIvdjIvdGVzdC9jYXNlcy9zY2hlbWEvc2ltcGxlL2phdmFzcmMvU2ltcGxlUGVyc29uVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmY2YzdlLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL3NpbXBsZS9qYXZhc3JjL1NpbXBsZVBlcnNvblRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1pbXBvcnQgb3JnLm9wZW51cmkubXl0ZXN0LlBlcnNvbjsKLWltcG9ydCBvcmcub3BlbnVyaS5teXRlc3QuQ3VzdG9tZXJEb2N1bWVudDsKLQotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQmVhbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3I7Ci1pbXBvcnQgZHJ0Y2FzZXMuVGVzdEVudjsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnN0b3JlLlJvb3Q7Ci0KLXB1YmxpYyBjbGFzcyBTaW1wbGVQZXJzb25UZXN0Ci17Ci0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgdGVzdCgpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0KCkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgQ3VzdG9tZXJEb2N1bWVudCBkb2MgPQotICAgICAgICAgICAgQ3VzdG9tZXJEb2N1bWVudC5GYWN0b3J5LnBhcnNlKAotICAgICAgICAgICAgICAgIFRlc3RFbnYueGJlYW5DYXNlKCJzY2hlbWEvc2ltcGxlL3BlcnNvbi54bWwiKSwgbnVsbCk7Ci0KLSAgICAgICAgLy8gTW92ZSBmcm9tIHRoZSByb290IHRvIHRoZSByb290IGN1c3RvbWVyIGVsZW1lbnQKLSAgICAgICAgUGVyc29uIHBlcnNvbiA9IGRvYy5nZXRDdXN0b21lcigpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJIb3dkeSIsIHBlcnNvbi5nZXRGaXJzdG5hbWUoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNCwgICBwZXJzb24uc2l6ZU9mTnVtYmVyQXJyYXkoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNDM2LCBwZXJzb24uZ2V0TnVtYmVyQXJyYXkoMCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDEyMywgcGVyc29uLmdldE51bWJlckFycmF5KDEpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyg0NCwgIHBlcnNvbi5nZXROdW1iZXJBcnJheSgyKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoOTMzLCBwZXJzb24uZ2V0TnVtYmVyQXJyYXkoMykpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsICAgcGVyc29uLnNpemVPZkJpcnRoZGF5QXJyYXkoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMobmV3IERhdGUoIlR1ZSBBdWcgMjUgMTc6MDA6MDAgUERUIDE5OTgiKSwgcGVyc29uLmdldEJpcnRoZGF5QXJyYXkoMCkpOwotCi0gICAgICAgIFBlcnNvbi5HZW5kZXIuRW51bSBnID0gcGVyc29uLmdldEdlbmRlcigpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKFBlcnNvbi5HZW5kZXIuTUFMRSwgZyk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiRUdJUVRXWVpKIiwgbmV3IFN0cmluZyhwZXJzb24uZ2V0SGV4KCkpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiVGhpcyBzdHJpbmcgaXMgYmFzZTY0QmluYXJ5IGVuY29kZWQhIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nKHBlcnNvbi5nZXRCYXNlNjQoKSkpOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIkdHSVFUV1lHRyIsIG5ldyBTdHJpbmcocGVyc29uLmdldEhleEF0dCgpKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIlRoaXMgc3RyaW5nIGlzIGJhc2U2NEJpbmFyeSBlbmNvZGVkISIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZyhwZXJzb24uZ2V0QmFzZTY0QXR0KCkpKTsKLQotICAgICAgICBwZXJzb24uc2V0Rmlyc3RuYW1lKCJHZW9yZ2UiKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiR2VvcmdlIiwgcGVyc29uLmdldEZpcnN0bmFtZSgpKTsKLQotICAgICAgICBwZXJzb24uc2V0SGV4KCJoZXggZW5jb2RpbmciLmdldEJ5dGVzKCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJoZXggZW5jb2RpbmciLCBuZXcgU3RyaW5nKHBlcnNvbi5nZXRIZXgoKSkpOwotCi0gICAgICAgIHBlcnNvbi5zZXRCYXNlNjQoImJhc2U2NCBlbmNvZGVkIi5nZXRCeXRlcygpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiYmFzZTY0IGVuY29kZWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmcocGVyc29uLmdldEJhc2U2NCgpKSk7Ci0KLSAgICAgICAgLy9wZXJzb24uc2V0SGV4QXR0KCJoZXggZW5jb2RpbmcgaW4gYXR0cmlidXRlcyIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIC8vQXNzZXJ0LmFzc2VydEVxdWFscygiaGV4IGVuY29kaW5nIGluIGF0dHJpYnV0ZXMiLAotICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZyhwZXJzb24uZ2V0SGV4QXR0KCkpKTsKLQotICAgICAgICAvL3BlcnNvbi5zZXRCYXNlNjRBdHQoImJhc2U2NCBlbmNvZGVkIGluIGF0dHJpYnV0ZXMiLmdldEJ5dGVzKCkpOwotICAgICAgICAvL0Fzc2VydC5hc3NlcnRFcXVhbHMoImJhc2U2NCBlbmNvZGVkIGluIGF0dHJpYnV0ZXMiLAotICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZyhwZXJzb24uZ2V0QmFzZTY0QXR0KCkpKTsKLS8vCi0vLyAgICAgICAgWG1sQ3Vyc29yIGNwID0gcGVyc29uLm5ld1htbEN1cnNvcigpOwotLy8gICAgICAgIFJvb3QuZHVtcCggY3AgKTsKLQotLy8gICAgICAgIFhtbEN1cnNvciBjID0gcGVyc29uLnhnZXRCaXJ0aGRheUFycmF5KDApLm5ld1htbEN1cnNvcigpOwotCi0vLyAgICAgICAgUm9vdC5kdW1wKCBjICk7Ci0KLS8vICAgICAgICBwZXJzb24uc2V0QmlydGhkYXkoMCxuZXcgRGF0ZSgiVHVlIEF1ZyAyNSAxNjowMDowMCBQRFQgMjAwMSIpKTsKLQotLy8gICAgICAgIFJvb3QuZHVtcCggYyApOwotCi0vLyAgICAgICAgYy50b05leHRUb2tlbigpOwotCi0vLyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiLS0tIiArIGMuZ2V0VGV4dCgpICsgIi0tLSIgKTsKLQotLy8gICAgICAgIFJvb3QuZHVtcCggYyApOwotCi0vLyAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhwZXJzb24uZ2V0QmlydGhkYXlBcnJheSgwKSwgbmV3IERhdGUoIlR1ZSBBdWcgMjUgMTY6MDA6MDAgUERUIDIwMDIiKSk7Ci0vLwotLy8gICAgICAgIHBlcnNvbi5zZXRGaXJzdG5hbWUoIkdlb3JnZSIpOwotLy8gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMocGVyc29uLmdldEZpcnN0bmFtZSgpLCAiR2VvcmdlIik7Ci0vLwotLy8gICAgICAgIHBlcnNvbi5hZGROdW1iZXIoIChzaG9ydCkgNjkgKTsKLS8vICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHBlcnNvbi5jb3VudE51bWJlcigpLCA1KTsKLS8vICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHBlcnNvbi5nZXROdW1iZXJBcnJheSg0KSwgNjkpOwotLy8KLS8vCi0vLyAgICAgICAgd2hpbGUgKCBjLmhhc05leHRUb2tlbigpICkKLS8vICAgICAgICAgICAgYy50b05leHRUb2tlbigpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL3NpbXBsZS9wZXJzb24ueG1sIGIvdjIvdGVzdC9jYXNlcy9zY2hlbWEvc2ltcGxlL3BlcnNvbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiYWYzNWEuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvc2ltcGxlL3BlcnNvbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08Y3VzdG9tZXIgeG1sbnM9Imh0dHA6Ly9vcGVudXJpLm9yZy9teXRlc3QiCi0gIGdlbmRlcj0ibWFsZSIKLSAgaGV4QXR0PSI0NzQ3NDk1MTU0NTc1OTQ3NDciCi0gIGJhc2U2NEF0dD0iICAgICAgICAKLQlWR2hwY3lCemRISnBibWNnYVhNZ1ltRnpaVFkwUW1sdVlYSjVJR1Z1WTI5a1pXUWgKLQkgICI+Ci0gIDxmaXJzdG5hbWU+SG93ZHk8L2ZpcnN0bmFtZT4KLSAgPG51bWJlcj40MzY8L251bWJlcj4KLSAgPG51bWJlcj4xMjM8L251bWJlcj4KLSAgPGJpcnRoZGF5PjE5OTgtMDgtMjZaPC9iaXJ0aGRheT4KLSAgPG51bWJlcj40NDwvbnVtYmVyPgotICA8bnVtYmVyPjkzMzwvbnVtYmVyPgotICA8YmlydGhkYXk+MjAwMC0wOC0wNi0wODowMDwvYmlydGhkYXk+Ci0gIDxoZXg+NDU0NzQ5NTE1NDU3NTk1QTRBPC9oZXg+Ci0gIDxiYXNlNjQ+VkdocGN5QnpkSEpwYm1jZ2FYTWdZbUZ6WlRZMFFtbHVZWEo1SUdWdVkyOWtaV1FoPC9iYXNlNjQ+Ci08L2N1c3RvbWVyPgpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvc2ltcGxlL3BlcnNvbi54c2QgYi92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9zaW1wbGUvcGVyc29uLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk4NmVjYi4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9zaW1wbGUvcGVyc29uLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLTx4czpzY2hlbWEKLSAgIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgIHhtbG5zOm10PSJodHRwOi8vb3BlbnVyaS5vcmcvbXl0ZXN0IgotICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vb3BlbnVyaS5vcmcvbXl0ZXN0IgotICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0gICBhdHRyaWJ1dGVGb3JtRGVmYXVsdD0idW5xdWFsaWZpZWQiID4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0icGVyc29uIj4KLSAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJmaXJzdG5hbWUiIHR5cGU9InhzOnN0cmluZyIvPgotICAgICAgPHhzOmNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgIDx4czplbGVtZW50IG5hbWU9Im51bWJlciI+Ci0gICAgICAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czppbnRlZ2VyIj4KLSAgICAgICAgICAgICAgIDx4czptaW5JbmNsdXNpdmUgdmFsdWU9IjEiLz4KLSAgICAgICAgICAgICAgIDx4czptYXhJbmNsdXNpdmUgdmFsdWU9IjEwMDAiLz4KLSAgICAgICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgICAgIDwveHM6ZWxlbWVudD4KLSAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iYmlydGhkYXkiIHR5cGU9InhzOmRhdGUiLz4KLSAgICAgIDwveHM6Y2hvaWNlPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iaGV4IiB0eXBlPSJ4czpoZXhCaW5hcnkiLz4KLSAgICAgIDx4czplbGVtZW50IG5hbWU9ImJhc2U2NCIgdHlwZT0ieHM6YmFzZTY0QmluYXJ5Ii8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImdlbmRlciI+Ci0gICAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgotICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibWFsZSIvPgotICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZmVtYWxlIi8+Ci0gICAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgPC94czphdHRyaWJ1dGU+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJoZXhBdHQiPgotICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpoZXhCaW5hcnkiPgotICAgICAgICAgIDx4czpwYXR0ZXJuIHZhbHVlPSIoWzQ1XVswLTlBLUZdKSoiLz4KLSAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgIDwveHM6YXR0cmlidXRlPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYmFzZTY0QXR0Ij4KLSAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YmFzZTY0QmluYXJ5Ij4KLSAgICAgICAgICA8eHM6d2hpdGVTcGFjZSB2YWx1ZT0iY29sbGFwc2UiLz4KLSAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlZHaHBjeUJ6ZEhKcGJtY2dhWE1nWW1GelpUWTBRbWx1WVhKNUlHVnVZMjlrWldRaCIvPgotICAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgPC94czphdHRyaWJ1dGU+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmVsZW1lbnQgbmFtZT0iY3VzdG9tZXIiIHR5cGU9Im10OnBlcnNvbiIvPgotCi0gIDx4czplbGVtZW50IG5hbWU9ImVtcGxveWVlIj4KLSAgICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ibXQ6cGVyc29uIj4KLSAgICAgICAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJlaWQiIHR5cGU9InhzOmludCIvPgotICAgICAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzOmNvbXBsZXhUeXBlPgotICA8L3hzOmVsZW1lbnQ+Ci0KLTwveHM6c2NoZW1hPgotCmRpZmYgLS1naXQgYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9zaW1wbGUvc2ltcGxlYy54c2QgYi92Mi90ZXN0L2Nhc2VzL3NjaGVtYS9zaW1wbGUvc2ltcGxlYy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MDc2YTkuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvc2ltcGxlL3NpbXBsZWMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPHhzOnNjaGVtYQotICAgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgeG1sbnM6bXQ9Imh0dHA6Ly9vcGVudXJpLm9yZy9teXRlc3QiCi0gICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9vcGVudXJpLm9yZy9teXRlc3QiCi0gICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLSAgIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKLT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ic2ltcGxpY2l0eSI+Ci0gICAgPHhzOnNpbXBsZUNvbnRlbnQ+Ci0gICAgIDx4czpleHRlbnNpb24gYmFzZT0ibXQ6dGhvdXNhbmQiPgotICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibm90ZSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0gICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6c2ltcGxlQ29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJ0aG91c2FuZCI+Ci0gICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6aW50ZWdlciI+Ci0gICAgIDx4czptaW5JbmNsdXNpdmUgdmFsdWU9IjEiLz4KLSAgICAgPHhzOm1heEluY2x1c2l2ZSB2YWx1ZT0iMTAwMCIvPgotICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czplbGVtZW50IG5hbWU9InNpbXBsZSIgdHlwZT0ibXQ6c2ltcGxpY2l0eSIvPgotCi08L3hzOnNjaGVtYT4KLQpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvdHlwZXNvbmx5L3R5cGVzb25seS54c2QgYi92Mi90ZXN0L2Nhc2VzL3NjaGVtYS90eXBlc29ubHkvdHlwZXNvbmx5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI3M2QwZi4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS90eXBlc29ubHkvdHlwZXNvbmx5LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTx4czpzY2hlbWEKLSAgIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgIHhtbG5zOm10PSJodHRwOi8vb3BlbnVyaS5vcmcvdHlwZXNvbmx5IgotICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vb3BlbnVyaS5vcmcvdHlwZXNvbmx5IgotICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0gICBhdHRyaWJ1dGVGb3JtRGVmYXVsdD0idW5xdWFsaWZpZWQiID4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0icGVyc29uIj4KLSAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJmaXJzdG5hbWUiIHR5cGU9InhzOnN0cmluZyIvPgotICAgICAgPHhzOmNob2ljZT4KLSAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iYWdlIj4KLSAgICAgICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmludGVnZXIiPgotICAgICAgICAgICAgICAgPHhzOm1pbkluY2x1c2l2ZSB2YWx1ZT0iMSIvPgotICAgICAgICAgICAgICAgPHhzOm1heEluY2x1c2l2ZSB2YWx1ZT0iMTAwIi8+Ci0gICAgICAgICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICAgICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICAgICA8L3hzOmVsZW1lbnQ+Ci0gICAgICAgIDx4czplbGVtZW50IG5hbWU9ImJpcnRoZGF5IiB0eXBlPSJ4czpkYXRlIi8+Ci0gICAgICA8L3hzOmNob2ljZT4KLSAgICAgICAgCi0gICAgICA8eHM6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiB0eXBlPSJtdDpwZXJzb24iIG5hbWU9ImNoaWxkIi8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICAgIAotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZ2VuZGVyIj4KLSAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Tk1UT0tFTiI+Ci0gICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJtYWxlIi8+Ci0gICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJmZW1hbGUiLz4KLSAgICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgIAotICA8L3hzOmNvbXBsZXhUeXBlPgotCi0gIDx4czplbGVtZW50IG5hbWU9InJlY29yZCIgdHlwZT0ibXQ6cGVyc29uIi8+Ci0gICAgCi08L3hzOnNjaGVtYT4KLQpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvd2xpLzAwM19wcm9jZXNzX3BvXzAwNy54c2QgYi92Mi90ZXN0L2Nhc2VzL3NjaGVtYS93bGkvMDAzX3Byb2Nlc3NfcG9fMDA3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU2NGI0NC4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS93bGkvMDAzX3Byb2Nlc3NfcG9fMDA3LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgTGljZW5zZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBmaWxlIGlzIHByb3ZpZGVkIGluIExJQ0VOU0UuVFhULCBhcyBwdWJsaXNoZWQKLSAgICAgIG9uIHRoZSBPcGVuIEFwcGxpY2F0aW9ucyBHcm91cCB3ZWIgc2l0ZS4gd3d3Lm9wZW5hcHBsaWNhdGlvbnMub3JnCi0KLSAgICAgIEZvciBzdXBwb3J0LCBtb3JlIGluZm9ybWF0aW9uLCBvciB0byByZXBvcnQgaW1wbGVtZW50YXRpb24gYnVncywKLSAgICAgIHBsZWFzZSBjb250YWN0IHRoZSBPcGVuIEFwcGxpY2F0aW9ucyBHcm91cCBhdCB4bWxAb3BlbmFwcGxpY2F0aW9ucy5vcmcKLQotICAgICRSZXZpc2lvbjogMS4xICQKLSAgICAkRGF0ZTogMjAwMy8wOS8yNiAyMToyMzozOSAkCi0gICAgT3BlbiBBcHBsaWNhdGlvbnMgR3JvdXAgWFNECi0gICAgQ29weXJpZ2h0IDE5OTgtMjAwMSwgQWxsIFJpZ2h0cyBSZXNlcnZlZAotCi0gICAkTmFtZTogICQKLQotY21rCTYuMi4wICAgCTExLzIyLzE5OTkJSW5pdGlhbCBSZWxlYXNlIC0gdXBkYXRlIGZyb20gdmVyc2lvbiAwMDMKLQkJCQkJCQlBZGQgUE9MTlNUQVRVUywgREFURVRJTUUuTkVFRERFTFYgdG8gUE9PUkRFUkxJTgotCQkJCQkJCUZpeCBwcm9jZXNzaW5nIG5vdGUgcnVsZXMKLXJqagk3LjAuMAkJMTAvMTUvMjAwMAlTcGVjaWFsIFJldmlzaW9uIFVwZGF0ZQotcmpqCTcuMC4yCQkxMS8yNC8yMDAwCUFsbG93IG11bHRpcGxlIGluc3RhbmNlcyBvZiBOT1RFUy4KLW1scgk3LjEJCTA0LzE2LzIwMDEJQWRkIEFUVENIUkVGIHRvIEJPRC4KLWFqdwkJNy4yLjEJCQkxMC8zMS8yMDAxCQlXM0MgU2NoZW1hIFJlbGVhc2UgCi0KLVN0cnVjdHVyZSBPdmVydmlldwotCi0JUFJPQ0VTU19QTyAoUE9PUkRFUkhEUiwgUE9PUkRFUkxJTispCi0JCVBPT1JERVJIRFIgKFBBUlRORVIrLCBBVFRDSFJFRiosIENIQVJHRSosIFBPVEVSTSopCi0JCQlQT1RFUk0gKCkKLQkJUE9PUkRFUkxJTiAoQVRUQ0hSRUYqLCBDSEFSR0UqLCBESVNUUklCVVROKiwgUEFSVE5FUiosIFBPVEVSTSosIAotCQkgIFBPQlNVQkxJTkUqLCBQT0xJTkVTQ0hEKikKLQkJCVBPVEVSTSAoKQotCQkJUE9TVUJMSU5FICgpCi0JCQlQT0xJTkVTQ0hEICgpCi0KLU5vdGVzOgotCi0tLT4KLTx4czpzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3Lm9wZW5hcHBsaWNhdGlvbnMub3JnLzAwM19wcm9jZXNzX3BvXzAwNyIgeG1sbnM6b3M9Imh0dHA6Ly93d3cub3BlbmFwcGxpY2F0aW9ucy5vcmcvb2FnaXNfc2VnbWVudHMiIHhtbG5zOm9mPSJodHRwOi8vd3d3Lm9wZW5hcHBsaWNhdGlvbnMub3JnL29hZ2lzX2ZpZWxkcyIgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxucz0iaHR0cDovL3d3dy5vcGVuYXBwbGljYXRpb25zLm9yZy8wMDNfcHJvY2Vzc19wb18wMDciPgotCTx4czppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3Lm9wZW5hcHBsaWNhdGlvbnMub3JnL29hZ2lzX3NlZ21lbnRzIiBzY2hlbWFMb2NhdGlvbj0ib2FnaXNfc2VnbWVudHMueHNkIi8+Ci0JPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cub3BlbmFwcGxpY2F0aW9ucy5vcmcvb2FnaXNfZmllbGRzIiBzY2hlbWFMb2NhdGlvbj0ib2FnaXNfZmllbGRzLnhzZCIvPgotCTx4czplbGVtZW50IG5hbWU9IlBST0NFU1NfUE9fMDA3Ij4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IHJlZj0ib3M6Q05UUk9MQVJFQSIvPgotCQkJCTx4czplbGVtZW50IHJlZj0iREFUQUFSRUEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJEQVRBQVJFQSI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCByZWY9IlBST0NFU1NfUE8iLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IlBST0NFU1NfUE8iPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJQT09SREVSSERSIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJQT09SREVSTElOIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUE9PUkRFUkhEUiI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9zOkRBVEVUSU1FQU5ZIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9zOk9QRVJBTVQiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6UE9JRCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6UE9UWVBFIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpBQ0tSRVFVRVNUIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOkNPTlRSQUNUQiIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpDT05UUkFDVFMiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6REVTQ1JJUFROIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOk5PVEVTIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpPUFJBTVRBVVRIIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOlBPUkVMRUFTRSIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpUQVhXSEVYTVBUIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOlVTRVJBUkVBIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9zOlBBUlRORVIiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvczpBVFRDSFJFRiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib3M6Q0hBUkdFIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJQT1RFUk0iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8IS0tICglREFURVRJTUUuRE9DVU1FTlQ7KT8gLS0+Ci0JCQkJPCEtLSAoJU9QRVJBTVQuRVhURU5ERUQuVDspPyAtLT4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IlBPVEVSTSI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOkRFU0NSSVBUTiIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpURVJNSUQiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czpjaG9pY2U+Ci0JCQkJCTx4czpzZXF1ZW5jZT4KLQkJCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6REFZT0ZNT05USCIvPgotCQkJCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpQUk9YTU9OVEgiLz4KLQkJCQkJPC94czpzZXF1ZW5jZT4KLQkJCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpEQVlTTlVNIi8+Ci0JCQkJPC94czpjaG9pY2U+Ci0JCQkJPHhzOmNob2ljZT4KLQkJCQkJPHhzOmVsZW1lbnQgcmVmPSJvczpPUEVSQU1UIi8+Ci0JCQkJCTx4czplbGVtZW50IHJlZj0ib3M6UVVBTlRJVFkiLz4KLQkJCQkJPCEtLSAoJU9QRVJBTVQuRVhURU5ERUQuVDspPyAtLT4KLQkJCQkJPCEtLSAoJVFVQU5USVRZLlBFUkNFTlQ7KSAtLT4KLQkJCQk8L3hzOmNob2ljZT4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOlVTRVJBUkVBIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8IS0tICgoREFZT0ZNT05USCwgUFJPWE1PTlRIKSB8IERBWVNOVU0pLCAoKCVPUEVSQU1ULkVYVEVOREVELlQ7KSB8ICglUVVBTlRJVFkuUEVSQ0VOVDspKSAtLT4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IlBPT1JERVJMSU4iPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvczpRVUFOVElUWSIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib3M6REFURVRJTUVBTlkiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib3M6T1BFUkFNVCIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpQT0xJTkVOVU0iLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOkRSQVdJTkciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6SEFaUkRNQVRMIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOklURU1SViIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpJVEVNUlZYIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOk5PVEVTIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpQQUNLSU5HIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOlBPTE5TVEFUVVMiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6VEFYV0hFWE1QVCIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzOmNob2ljZT4KLQkJCQkJPHhzOnNlcXVlbmNlPgotCQkJCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpERVNDUklQVE4iLz4KLQkJCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6SVRFTSIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOklURU1YIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6VVBDIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJPC94czpzZXF1ZW5jZT4KLQkJCQkJPHhzOnNlcXVlbmNlPgotCQkJCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpJVEVNIi8+Ci0JCQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOklURU1YIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6VVBDIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJPC94czpzZXF1ZW5jZT4KLQkJCQkJPHhzOnNlcXVlbmNlPgotCQkJCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpJVEVNWCIvPgotCQkJCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpVUEMiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQk8L3hzOnNlcXVlbmNlPgotCQkJCQk8eHM6c2VxdWVuY2U+Ci0JCQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOlVQQyIvPgotCQkJCQk8L3hzOnNlcXVlbmNlPgotCQkJCTwveHM6Y2hvaWNlPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6VVNFUkFSRUEiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib3M6QVRUQ0hSRUYiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9zOkNIQVJHRSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib3M6RElTVFJJQlVUTiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib3M6UEFSVE5FUiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0iUE9URVJNIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJQT1NVQkxJTkUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9IlBPTElORVNDSEQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8IS0tICglUVVBTlRJVFkuUEVSQ0VOVDspKSAtLT4KLQkJCQk8IS0tICglREFURVRJTUUuTkVFRERFTFY7KT8gLS0+Ci0JCQkJPCEtLSAoJU9QRVJBTVQuVU5JVC5UOyk/IC0tPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUE9TVUJMSU5FIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IHJlZj0ib3M6UVVBTlRJVFkiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOkRSQVdJTkciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6SVRFTVJWIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOklURU1SVlgiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6UFNCTElORU5VTSIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzOmNob2ljZT4KLQkJCQkJPHhzOnNlcXVlbmNlPgotCQkJCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpERVNDUklQVE4iLz4KLQkJCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6SVRFTSIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOklURU1YIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6VVBDIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJPC94czpzZXF1ZW5jZT4KLQkJCQkJPHhzOnNlcXVlbmNlPgotCQkJCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpJVEVNIi8+Ci0JCQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOklURU1YIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6VVBDIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJPC94czpzZXF1ZW5jZT4KLQkJCQkJPHhzOnNlcXVlbmNlPgotCQkJCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpJVEVNWCIvPgotCQkJCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpVUEMiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQk8L3hzOnNlcXVlbmNlPgotCQkJCQk8eHM6c2VxdWVuY2U+Ci0JCQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOlVQQyIvPgotCQkJCQk8L3hzOnNlcXVlbmNlPgotCQkJCTwveHM6Y2hvaWNlPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6VVNFUkFSRUEiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTwhLS0gKCVRVUFOVElUWS5JVEVNOykgLS0+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJQT0xJTkVTQ0hEIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IHJlZj0ib3M6REFURVRJTUVBTlkiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib3M6UVVBTlRJVFkiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOkRFU0NSSVBUTiIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpQU0NMSU5FTlVNIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOlVTRVJBUkVBIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8IS0tICglREFURVRJTUUuTkVFRERFTFY7KSAtLT4KLQkJCQk8IS0tICglUVVBTlRJVFkuT1JERVJFRDspIC0tPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci08L3hzOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL3dsaS8wMDRfYWNrbm93bGVkZ2VfcG9fMDA4LnhzZCBiL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL3dsaS8wMDRfYWNrbm93bGVkZ2VfcG9fMDA4LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNjZGVlZC4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS93bGkvMDA0X2Fja25vd2xlZGdlX3BvXzAwOC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyNDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQlMaWNlbnNlIGluZm9ybWF0aW9uIGZvciB0aGlzIGZpbGUgaXMgcHJvdmlkZWQgaW4gTElDRU5TRS5UWFQsIGFzIHB1Ymxpc2hlZAotCW9uIHRoZSBPcGVuIEFwcGxpY2F0aW9ucyBHcm91cCB3ZWIgc2l0ZS4gd3d3Lm9wZW5hcHBsaWNhdGlvbnMub3JnCi0JCi0JRm9yIHN1cHBvcnQsIG1vcmUgaW5mb3JtYXRpb24sIG9yIHRvIHJlcG9ydCBpbXBsZW1lbnRhdGlvbiBidWdzLAotCXBsZWFzZSBjb250YWN0IHRoZSBPcGVuIEFwcGxpY2F0aW9ucyBHcm91cCBhdCB4bWxAb3BlbmFwcGxpY2F0aW9ucy5vcmcKLQkKLQkkUmV2aXNpb246IDEuMSAkCi0JJERhdGU6IDIwMDMvMDkvMjYgMjE6MjM6MzkgJAotCU9wZW4gQXBwbGljYXRpb25zIEdyb3VwIFhTRAotCUNvcHlyaWdodCAxOTk4LTIwMDEsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKLQkKLQkkTmFtZTogICQKLQotCWNtawk2LjIuMCAgIAkxMS8yMi8xOTk5CUluaXRpYWwgUmVsZWFzZSAtIFVwZGF0ZSBmcm9tIHZlcnNpb24gMDAzCi0JCQkJCQkJCUFkZCBQT0xOU1RBVFVTLCBEQVRFVElNRS5ORUVEREVMViB0byBQT09SREVSTElOCi0JCQkJCQkJCUZpeCBwcm9jZXNzaW5nIG5vdGUgcnVsZXMKLQlyamoJNy4wLjAJMTAvMTUvMjAwMAlTcGVjaWFsIFJldmlzaW9uIFVwZGF0ZQotCXJqagk3LjAuMgkxMS8yNC8yMDAwCUFsbG93IG11bHRpcGxlIGluc3RhbmNlcyBvZiBOT1RFUy4KLQltbHIJNy4xCQkwNC8xNi8yMDAxCUFkZCBBVFRDSFJFRiB0byBCT0QuCi0JYWp3IDcuMgkJMDkvMzAvMjAwMSAJTWFkZSBBQ0tMSU5FIHNlZ21lbnQgJzAgdG8gbWFueScgdGltZXMKLQlhancJNy4yLjEJMDkvMDEvMDAJVzNDIFNjaGVtYSBSZWxlYXNlCi0KLSAgICBTdHJ1Y3R1cmUgT3ZlcnZpZXcKLQotICAgIEFDS05PV0xFREdFX1BPIChQT09SREVSSERSLCBQT09SREVSTElOKikKLSAgICAgICAgUE9PUkRFUkhEUiAoQUNLSEVBREVSLCBBVFRDSFJFRiosIENIQVJHRSosIFBBUlRORVIqLCBQT1RFUk0qKQotICAgICAgICAgICAgQUNLSEVBREVSICgpCi0gICAgICAgICAgICBQT1RFUk0gKCkKLSAgICAgICAgUE9PUkRFUkxJTiAoQUNLTElORSosIEFUVENIUkVGKiwgQ0hBUkdFKiwgRElTVFJJQlVUTiosIFBBUlRORVIqLAotICAgICAgICAgICAgUE9MSU5FU0NIRCosIFBPU1VCTElORSosIFBPVEVSTSopCi0gICAgICAgICAgICBBQ0tMSU5FICgpCi0gICAgICAgICAgICBQQVJUTkVSICgpCi0gICAgICAgICAgICBQT0xJTkVTQ0hEICgpCi0gICAgICAgICAgICBQT1NVQkxJTkUgKCkKLSAgICAgICAgICAgIFBPVEVSTSAoKQotCi1Ob3RlczoKLQotLS0+Ci08eHM6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5vcGVuYXBwbGljYXRpb25zLm9yZy8wMDRfYWNrbm93bGVkZ2VfcG9fMDA4IiB4bWxucz0iaHR0cDovL3d3dy5vcGVuYXBwbGljYXRpb25zLm9yZy8wMDRfYWNrbm93bGVkZ2VfcG9fMDA4IiB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOm9mPSJodHRwOi8vd3d3Lm9wZW5hcHBsaWNhdGlvbnMub3JnL29hZ2lzX2ZpZWxkcyIgeG1sbnM6b3M9Imh0dHA6Ly93d3cub3BlbmFwcGxpY2F0aW9ucy5vcmcvb2FnaXNfc2VnbWVudHMiPgotCTx4czppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3Lm9wZW5hcHBsaWNhdGlvbnMub3JnL29hZ2lzX3NlZ21lbnRzIiBzY2hlbWFMb2NhdGlvbj0ib2FnaXNfc2VnbWVudHMueHNkIi8+Ci0JPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cub3BlbmFwcGxpY2F0aW9ucy5vcmcvb2FnaXNfZmllbGRzIiBzY2hlbWFMb2NhdGlvbj0ib2FnaXNfZmllbGRzLnhzZCIvPgotCTx4czplbGVtZW50IG5hbWU9IkFDS05PV0xFREdFX1BPXzAwOCI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9zOkNOVFJPTEFSRUEiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9IkRBVEFBUkVBIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iREFUQUFSRUEiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJBQ0tOT1dMRURHRV9QTyIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQUNLTk9XTEVER0VfUE8iPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJQT09SREVSSERSIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJQT09SREVSTElOIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJQT09SREVSSERSIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IHJlZj0ib3M6REFURVRJTUVBTlkiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib3M6T1BFUkFNVCIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpQT0lEIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpQT1RZUEUiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOkFDS1JFUVVFU1QiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6Q09OVFJBQ1RCIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOkNPTlRSQUNUUyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpERVNDUklQVE4iIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6Tk9URVMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOk9QUkFNVEFVVEgiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6UE9SRUxFQVNFIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOlRBWFdIRVhNUFQiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6VVNFUkFSRUEiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0iQUNLSEVBREVSIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvczpBVFRDSFJFRiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib3M6Q0hBUkdFIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvczpQQVJUTkVSIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJQT1RFUk0iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8IS0tICglREFURVRJTUUuRE9DVU1FTlQ7KT8gLS0+Ci0JCQkJPCEtLSAoJU9QRVJBTVQuRVhURU5ERUQuVDspPyAtLT4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IkFDS0hFQURFUiI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9zOlNFTkRFUiIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib3M6REFURVRJTUVBTlkiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib3M6REFURVRJTUVBTlkiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6QUNLQ09ERSIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6REVTQ1JJUFROIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOk5PVEVTIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpTQUxFU09SRElEIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOlVTRVJBUkVBIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8IS0tICglREFURVRJTUUuUFJPTURFTFY7KT8gLS0+Ci0JCQkJPCEtLSAoJURBVEVUSU1FLlBST01TSElQOyk/IC0tPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUE9URVJNIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6REVTQ1JJUFROIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOlRFUk1JRCIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzOmNob2ljZT4KLQkJCQkJPHhzOnNlcXVlbmNlPgotCQkJCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpEQVlPRk1PTlRIIi8+Ci0JCQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOlBST1hNT05USCIvPgotCQkJCQk8L3hzOnNlcXVlbmNlPgotCQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOkRBWVNOVU0iLz4KLQkJCQk8L3hzOmNob2ljZT4KLQkJCQk8eHM6Y2hvaWNlPgotCQkJCQk8eHM6c2VxdWVuY2U+Ci0JCQkJCQk8eHM6ZWxlbWVudCByZWY9Im9zOk9QRVJBTVQiLz4KLQkJCQkJPC94czpzZXF1ZW5jZT4KLQkJCQkJPHhzOnNlcXVlbmNlPgotCQkJCQkJPHhzOmVsZW1lbnQgcmVmPSJvczpRVUFOVElUWSIvPgotCQkJCQk8L3hzOnNlcXVlbmNlPgotCQkJCTwveHM6Y2hvaWNlPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6VVNFUkFSRUEiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTwhLS0gKChEQVlPRk1PTlRILCBQUk9YTU9OVEgpIHwgREFZU05VTSksICgoJU9QRVJBTVQuRVhURU5ERUQuVDspIHwgKCVRVUFOVElUWS5QRVJDRU5UOykpIC0tPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUE9PUkRFUkxJTiI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9zOlFVQU5USVRZIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvczpEQVRFVElNRUFOWSIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvczpPUEVSQU1UIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOlBPTElORU5VTSIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6RFJBV0lORyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpIQVpSRE1BVEwiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6SVRFTVJWIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOklURU1SVlgiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6Tk9URVMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOlBBQ0tJTkciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6UE9MTlNUQVRVUyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpUQVhXSEVYTVBUIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHM6Y2hvaWNlPgotCQkJCQk8eHM6c2VxdWVuY2U+Ci0JCQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOkRFU0NSSVBUTiIvPgotCQkJCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpJVEVNIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6SVRFTVgiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpVUEMiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQk8L3hzOnNlcXVlbmNlPgotCQkJCQk8eHM6c2VxdWVuY2U+Ci0JCQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOklURU0iLz4KLQkJCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6SVRFTVgiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpVUEMiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQk8L3hzOnNlcXVlbmNlPgotCQkJCQk8eHM6c2VxdWVuY2U+Ci0JCQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOklURU1YIi8+Ci0JCQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOlVQQyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCTwveHM6c2VxdWVuY2U+Ci0JCQkJCTx4czpzZXF1ZW5jZT4KLQkJCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6VVBDIi8+Ci0JCQkJCTwveHM6c2VxdWVuY2U+Ci0JCQkJPC94czpjaG9pY2U+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpVU0VSQVJFQSIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJBQ0tMSU5FIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvczpBVFRDSFJFRiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib3M6Q0hBUkdFIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvczpESVNUUklCVVROIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvczpQQVJUTkVSIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJQT1RFUk0iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9IlBPU1VCTElORSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0iUE9MSU5FU0NIRCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTwhLS0gKCVRVUFOVElUWS5QRVJDRU5UOykpIC0tPgotCQkJCTwhLS0gKCVEQVRFVElNRS5ORUVEREVMVjspPyAtLT4KLQkJCQk8IS0tICglT1BFUkFNVC5VTklULlQ7KT8gLS0+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJBQ0tMSU5FIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IHJlZj0ib3M6REFURVRJTUVBTlkiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib3M6REFURVRJTUVBTlkiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib3M6UVVBTlRJVFkiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6QUNLQ09ERSIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6Tk9URVMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOlNBTEVTT1JESUQiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6VVNFUkFSRUEiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTwhLS0gKCVEQVRFVElNRS5QUk9NREVMVjspPyAtLT4KLQkJCQk8IS0tICglREFURVRJTUUuUFJPTVNISVA7KT8gLS0+Ci0JCQkJPCEtLSAoJVFVQU5USVRZLk9SREVSRUQ7KT8gLS0+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJQT1NVQkxJTkUiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvczpRVUFOVElUWSIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6RFJBV0lORyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpJVEVNUlYiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6SVRFTVJWWCIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpQU0JMSU5FTlVNIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHM6Y2hvaWNlPgotCQkJCQk8eHM6c2VxdWVuY2U+Ci0JCQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOkRFU0NSSVBUTiIvPgotCQkJCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpJVEVNIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6SVRFTVgiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpVUEMiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQk8L3hzOnNlcXVlbmNlPgotCQkJCQk8eHM6c2VxdWVuY2U+Ci0JCQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOklURU0iLz4KLQkJCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6SVRFTVgiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpVUEMiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQk8L3hzOnNlcXVlbmNlPgotCQkJCQk8eHM6c2VxdWVuY2U+Ci0JCQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOklURU1YIi8+Ci0JCQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOlVQQyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCTwveHM6c2VxdWVuY2U+Ci0JCQkJCTx4czpzZXF1ZW5jZT4KLQkJCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6VVBDIi8+Ci0JCQkJCTwveHM6c2VxdWVuY2U+Ci0JCQkJPC94czpjaG9pY2U+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpVU0VSQVJFQSIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPCEtLSAoJVFVQU5USVRZLklURU07KSAtLT4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IlBPTElORVNDSEQiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvczpEQVRFVElNRUFOWSIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvczpRVUFOVElUWSIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6REVTQ1JJUFROIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOlBTQ0xJTkVOVU0iIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6VVNFUkFSRUEiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTwhLS0gKCVEQVRFVElNRS5ORUVEREVMVjspIC0tPgotCQkJCTwhLS0gKCVRVUFOVElUWS5PUkRFUkVEOykgLS0+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvd2xpL09yZGVyLnhzZCBiL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL3dsaS9PcmRlci54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5ZGRkNGYuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvd2xpL09yZGVyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDIwMjU4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxucz0icHVibGljaWQ6b3JnLnhDQkw6c2NoZW1hcy9YQ0JMMzUvT3JkZXIueHNkIiB0YXJnZXROYW1lc3BhY2U9InB1YmxpY2lkOm9yZy54Q0JMOnNjaGVtYXMvWENCTDM1L09yZGVyLnhzZCIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgICBYTUwgQ29tbW9uIEJ1c2luZXNzIExpYnJhcnkgMy41Ci0gICAgICAgICAgICBDb3B5cmlnaHQgMjAwMCBDb21tZXJjZSBPbmUsIEluYy4KLSAgICAgICAgICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGUKLSAgICAgICAgICAgIERURCdzLCBzY2hlbWFzIGFuZCBtb2R1bGVzIGluIHRoZSBDb21tZXJjZSBPbmUgWE1MIENvbW1vbiBCdXNpbmVzcwotICAgICAgICAgICAgTGlicmFyeSBWZXJzaW9uIDMuNSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBzcGVjaWZpZWQKLSAgICAgICAgICAgIGF0IGh0dHA6Ly93d3cueGNibC5vcmcvbGljZW5zZS5odG1sCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgCVBMRUFTRSBOT1RFOiBUaGlzIHNjaGVtYSwgd2hpbHN0IGl0IGRlc2NyaWJlcyBpbiBlbnRpcmV0eSBhIHZhbGlkLCBzaW5nbGUsCi0gICAgICAgIAl4Q0JMIDMuNSBkb2N1bWVudCwgaXMgZGVmaW5lZCB0byBiZSBpbiBhIG5hbWVzcGFjZSBvdGhlciB0aGFuIHRoZSBtYWluIHhDQkwgMy41Ci0gICAgICAgIAluYW1lc3BhY2UuIFRoZXJlZm9yZSBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoZSBmdWxsIHhDQkwgMy41IHNjaGVtYSBpcyB1c2VkCi0gICAgICAgIAlmb3IgZnVsbCBwcm9kdWN0aW9uIHNpdHVhdGlvbnMuIFBsZWFzZSBzZWUgdGhlIG5vdGVzIGF0Ci0gICAgICAgIAk8YSBocmVmPSJodHRwOi8vd3d3LnhjYmwub3JnL3hjYmwzNS94c2Qvc2NoZW1hcy5odG1sIj53d3cueENCTC5vcmc8L2E+LgotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJPcmRlciI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJPcmRlckhlYWRlciIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJPcmRlckRldGFpbCIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJPcmRlclN1bW1hcnkiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik9yZGVyIiB0eXBlPSJPcmRlciIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iT3JkZXJIZWFkZXIiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJPcmRlcklzc3VlRGF0ZSIgdHlwZT0ieGNibERhdGV0aW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Ik9yZGVyUmVmZXJlbmNlcyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUmVsZWFzZU51bWJlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUHVycG9zZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJSZXF1ZXN0ZWRSZXNwb25zZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJPcmRlclR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJPcmRlckN1cnJlbmN5Ij4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iQ3VycmVuY3kiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVGF4QWNjb3VudGluZ0N1cnJlbmN5Ij4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iQ3VycmVuY3kiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik9yZGVyTGFuZ3VhZ2UiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJMYW5ndWFnZSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJPcmRlclRheFJlZmVyZW5jZSI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlRheFJlZmVyZW5jZSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJPcmRlckludm9pY2VNZWRpdW1UeXBlQ29kZWQiIHR5cGU9Ik9yZGVySW52b2ljZU1lZGl1bVR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJPcmRlckludm9pY2VNZWRpdW1UeXBlQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJPcmRlckRhdGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJQYXJ0aWFsU2hpcG1lbnRBbGxvd2VkIiB0eXBlPSJ4Y2JsQm9vbGVhbiIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iT3JkZXJQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUGFydExvY2F0aW9uIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Ikxpc3RPZlRyYW5zcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5hbWU9Ik9yZGVyVGVybXNPZkRlbGl2ZXJ5Ij4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iVGVybXNPZkRlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ik9yZGVySGVhZGVyUHJpY2UiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJMaXN0T2ZQcmljZSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJPcmRlclBheW1lbnRJbnN0cnVjdGlvbnMiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJQYXltZW50SW5zdHJ1Y3Rpb25zIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ik9yZGVyQWxsb3dhbmNlc09yQ2hhcmdlcyI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ikxpc3RPZkFsbG93T3JDaGFyZ2UiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJSb3VuZFRyaXBJbmZvcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iT3JkZXJIZWFkZXJOb3RlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Ikxpc3RPZlN0cnVjdHVyZWROb3RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Ikxpc3RPZk5hbWVWYWx1ZVNldCIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iT3JkZXJIZWFkZXJBdHRhY2htZW50cyI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ikxpc3RPZkF0dGFjaG1lbnQiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iT3JkZXJIZWFkZXIiIHR5cGU9Ik9yZGVySGVhZGVyIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJPcmRlck51bWJlciI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQnV5ZXJPcmRlck51bWJlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU2VsbGVyT3JkZXJOdW1iZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iTGlzdE9mTWVzc2FnZUlEIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJPcmRlck51bWJlciIgdHlwZT0iT3JkZXJOdW1iZXIiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZk1lc3NhZ2VJRCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iTWVzc2FnZUlEIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMaXN0T2ZNZXNzYWdlSUQiIHR5cGU9Ikxpc3RPZk1lc3NhZ2VJRCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWVzc2FnZUlEIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJRE51bWJlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iSURBc3NpZ25lZEJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJJREFzc2lnbmVkRGF0ZSIgdHlwZT0ieGNibERhdGV0aW1lIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNZXNzYWdlSUQiIHR5cGU9Ik1lc3NhZ2VJRCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSURBc3NpZ25lZEJ5Ij4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJREFzc2lnbmVkQnlDb2RlZCIgdHlwZT0iUGFydHlSb2xlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iSURBc3NpZ25lZEJ5Q29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSURBc3NpZ25lZEJ5IiB0eXBlPSJJREFzc2lnbmVkQnkiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iUGFydHlSb2xlQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY2VwdGFuY2VMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjZXB0aW5nUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRDb29yZGluYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudGluZ1N0YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRPZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudE9mRGVzdGluYXRpb25QYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudE9mLU9yaWdpblBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50T3duZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRPd25lcnNTZXJ2aWNpbmdCYW5rT25UaGVSZWNlaXZpbmdTaWRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50T3duZXJzU2VydmljaW5nQmFua09uVGhlU2VuZGluZ1NpZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRTZXJ2aWNpbmdGaW5hbmNpYWxJbnN0aXR1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudHNQYXlhYmxlT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2tub3dsZWRnZW1lbnRSZWNpcGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjcm9ueW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdGlvblBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3R1YWxQdXJjaGFzZXJzQ3VzdG9tZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdHVhbFJlZmVycmVkQnlPcmdhbml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdHVhbFJlZmVycmVkVG9Pcmdhbml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdXRlQ2FyZUhvc3BpdGFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRpdGlvbmFsQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkaXRpb25hbERlYnRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkaXRpb25hbERlbGl2ZXJ5QWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkaXRpb25hbFBpY2tVcEFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkanVzdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZG1pbmlzdHJhdGlvbkNlbnRyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRtaW5pc3RyYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRtaXR0aW5nSGVhbHRoQ2FyZVByb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZG1pdHRpbmdTZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRtaXR0aW5nU3VyZ2VvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWR1bHREYXlDYXJlUHJvZ3JhbUZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZlcnRpc2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZlcnRpc2luZ0dyb3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZpc2VUaHJvdWdoQmFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWR2aXNpbmdCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZpc29yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZmZpYW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZmZpbGlhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFmZmlsaWF0ZWRDb21wYW55Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZmZpbGlhdGVkUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlbmN5R3JhbnRpbmdTZWN1cml0eUNsZWFyYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlbnRPclJlcHJlc2VudGF0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ2VudHNCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBSURTT3JBUkNVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJBbWJ1bGFuY2VTZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWlyQ2FyZ29Db21wYW55Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJGb3JjZUZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJsaW5lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJwb3J0QXV0aG9yaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGNvaG9sQmV2ZXJhZ2VEZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGNvaG9saXNtQW5kT3RoZXJDaGVtaWNhbERlcGVuZGVuY3lGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxjb2hvbE9yRHJ1Z0FidXNlT3JEZXBlbmRlbmN5SW5wYXRpZW50VW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxjb2hvbE9yRHJ1Z0FidXNlT3JEZXBlbmRlbmN5T3V0cGF0aWVudFNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGlhcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxpZW5BZmZpbGlhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbGVnZWREZWJ0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbGlhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxpZWRIZWFsdGhQcm9mZXNzaW9uYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbG90bWVudEN1c3RvbWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxvd2FibGVSZWNpcGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsdGVybmF0ZVJldHVybkFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsdGVybmF0aXZlQWRkcmVzc2VlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbHRlcm5hdGl2ZU1hbnVmYWN0dXJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWx6aGVpbWVyc0RpYWdub3N0aWNPckFzc2Vzc21lbnRTZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1lbmRlZE5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtZXJpY2FuSW5kaWFuLU93bmVkQnVzaW5lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtaWN1c0N1cmlhZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW5lc3RoZXNpb2xvZ3lTZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW5naW9wbGFzdHlGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW5pbWFsQmVpbmdJbnZlc3RpZ2F0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFuaW1hbFNvdXJjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW5udWl0YW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbm51aXRhbnRQYXlvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW50ZW5uYVNpdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGVsbGFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwZWxsZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2FudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYW50Q29tYWtlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYW50Rm9ySm9iIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhbnRzQmFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYW50c0Nvc2lnbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhbnRzRW1wbG95ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2FudHNSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2F0aW9uUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcHJhaXNhbENvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcHJhaXNlck5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcHJvdmVkQ29uc2lnbm9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHByb3ZlZEltcG9ydGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHByb3ZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJiaXRyYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJjaGl0ZWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcmNoaXRlY3QtRGVzaWduZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFyZWFPZk9wZXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJtZWRTZXJ2aWNlc0xvY2F0aW9uRGVzaWduYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFybXlGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJyZXN0aW5nT2ZmaWNlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJ0aHJpdGlzVHJlYXRtZW50Q2VudGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NldEFjY291bnRIb2xkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2lnbmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NpZ25lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzaWdub3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2lzdGFudFN1cmdlb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2lzdGFudFVTVHJ1c3RlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzb2NpYXRlR2VuZXJhbEFnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NvY2lhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXR0ZW5kaW5nUGh5c2ljaWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdHRvcm5leSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXR0b3JuZXlGb3JEZWZlbmRhbnRQcml2YXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdHRvcm5leUZvckRlZmVuZGFudFB1YmxpYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXR0b3JuZXlGb3JQbGFpbnRpZmYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF0dG9ybmV5T2ZSZWNvcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1Y3Rpb25lZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1ZGl0T2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdWRpdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRoZW50aWNhdGluZ1BhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhvcml0eUZvclNoaXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3JpemF0aW9uQXNzaWduZWRCeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXV0aG9yaXplZEFjY2VwdGluZ09mZmljaWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3JpemVkRW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3JpemVkRXhwb3J0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhvcml6ZWRGcm9tIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3JpemVkSW1wb3J0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhvcml6ZWRNYXJrZXRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXV0aG9yaXplZE9mZmljaWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3JpemVkVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhvcml6ZWRUcmFkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhvcml6aW5nT2ZmaWNpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dG9tYXRlZERhdGFQcm9jZXNzaW5nUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dG9tYXRlZFVuZGVyd3JpdGluZ1N5c3RlbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXZhaWxhYmxlV2l0aEJhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF2YWlsYWJpbGl0eVNoaXBUb1BhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYWlsaWZmIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYWlsbWVudFdhcmVob3VzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFpbFBheW9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYWtlcnlEZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYW5rZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbmtydXB0Y3lSZWZlcmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYW5rcnVwdGN5VHJ1c3RlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFzZUp1cmlzZGljdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFzZVBlcmlvZEVtcGxveWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXR0ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZW5lZmljaWFsT3duZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbmVmaWNpYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZW5lZmljaWFyeXNCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWRkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpZE9wZW5pbmdMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbEFuZFNoaXBUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbGVkRnJvbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbGluZ1Byb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsaW5nU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbE9mTGFkaW5nUmVjaXBpZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGwtVG9QYXJ0eUZvckRpdmVyc2lvbkNoYXJnZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpcnRoaW5nUm9vbU9yTERSUFJvb20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpcnRoTmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlydGhwbGFjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmxvb2RCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb2FyZE9mUmVhbHRvcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvYnRhaWxTZXJ2aWNlUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvbmRzbWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb29raW5nQWdlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvb2tpbmdPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvb2trZWVwZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvcmRlckNyb3NzaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3Jyb3dlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9ycm93ZXJzRW1wbG95ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvdHRsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyYWtlbWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcmFuY2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyYW5kTmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJlYWtCdWxrQmVydGhPcGVyYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJlYWtCdWxrUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyb2FkY2FzdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcm9rZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyb2tlckRlYWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJva2VyT3Bpbmlvbk9yQW5hbHlzaXNSZXF1ZXN0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyb2tlck9yU2FsZXNPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyb2tlcnNBc3Npc3RhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1aWxkZXJOYW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdWlsZGluZ0luc3BlY3RvcmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVpbGRpbmdTaXRlRW5naW5lZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1aWxkaW5nU2l0ZUZvcndhcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVpbGRpbmdTaXRlUHVyY2hhc2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXJlYXVPZkxhbmRNYW5hZ2VtZW50UHJvcGVydHlVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXJuQ2FyZVVuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1c2luZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc0FyZWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1c2luZXNzQXNzb2NpYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc0VudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NQYXJ0bmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5ZXJBc09mZmljaWFsbHlSZWdpc3RlcmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllcnNBZ2VudE9yUmVwcmVzZW50YXRpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyc0JhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyc0NvcnBvcmF0ZU9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5ZXJzRmluYW5jaWFsSW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyc1BhcmVudENvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyc1F1YWxpdHlSZXZpZXdCb2FyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5aW5nR3JvdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWluZ1BhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5hZGlhbkN1c3RvbXNCcm9rZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbmRpZGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuZHlBbmRDb25mZWN0aW9uc0RlcGFydG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcmRpYWNDYXRoZXJpemF0aW9uTGFib3JhdG9yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyZGlhY0ludGVuc2l2ZUNhcmVVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJkaWFjUmVoYWJpbGl0YXRpb25Qcm9ncmFtRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcmRpYWNSZWhhYmlsaXRhdGlvblNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJuZXRJc3N1ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcnJpZXJzQWdlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2VNYW5hZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXNlT2ZOZWVkUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2hQb29sTGV2ZWxBY2NvdW50U2VydmljaW5nRmluYW5jaWFsSW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2hQb29sU3ViLUFjY291bnRTZXJ2aWNpbmdGaW5hbmNpYWxJbnN0aXR1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzaFBvb2xUb3BBY2NvdW50U2VydmljaW5nRmluYW5jaWFsSW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlZGluZ0NvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlbnRyYWxCYW5rT3JSZWd1bGF0b3J5QXV0aG9yaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZW50cmFsQ2F0YWxvZ3VlUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmllZEFjY291bnRhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZnlpbmdQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhaXJwZXJzb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYW1iZXJPZkNvbW1lcmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFuZ2VkQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlc1BheWVyQXREZXN0aW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcml0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcnRlclNjaG9vbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhc3Npc1Byb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGVja2luZ1BhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGVxdWVEcmF3bkJhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoZXF1ZU9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGllZkRlcHV0eUNsZXJrT2ZDb3VydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hpbGQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoaWxkcmVuc0Nocm9uaWNEaXNlYXNlRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoaWxkcmVuc0RheUNhcmVDZW50ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoaWxkcmVuc0V5ZUVhck5vc2VBbmRUaHJvYXRGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hpbGRyZW5zR2VuZXJhbEZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGlsZHJlbnNIb3NwaXRhbFVuaXRPZkFuSW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoaWxkcmVuc09ydGhvcGVkaWNGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hpbGRyZW5zT3RoZXJTcGVjaWFsdHlGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hpbGRyZW5zUHN5Y2hpYXRyaWNGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hpbGRyZW5zUmVoYWJpbGl0YXRpb25GYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hpbGRyZW5zVHViZXJjdWxvc2lzQW5kT3RoZXJSZXNwaXJhdG9yeURpc2Vhc2VzRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoaXJvcHJhY3RvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hyb25pY0Rpc2Vhc2VGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hyb25pY09ic3RydWN0aXZlUHVsbW9uYXJ5RGlzZWFzZVNlcnZpY2VGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2h1cmNoT3BlcmF0ZWRGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2lnYXJldHRlc0FuZFRvYmFjY29EZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaXJjdWl0TG9jYXRpb25JZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGFpbUFkbWluaXN0cmF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsYWltYW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGFpbWFudEF1dGhvcml6ZWRSZXByZXNlbnRhdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xhaW1SZWNpcGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsZWFyaW5nSG91c2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsZXJrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGVya09mQ291cnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsaW5pYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xvc2VkRG9vclBoYXJtYWN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbG9zZWRTYWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbG9zaW5nQWdlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvYXRpbmdPclBhaW50U3VwcGxpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvLUJvcnJvd2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDby1Db250cmFjdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDby1Db3Vuc2VsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDby1EZWJ0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvLURlZmVuZGFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ28tRHJpdmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDby1JbnZlc3RpZ2F0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbGxhdGVyYWxBc3NpZ25lZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29sbGVjdGluZ0JhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbGxlY3Rpb25QcmluY2lwYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1lcmNpYWxJbnN1cmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21taXNzaW9uYWJsZUFnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21taXNzaW9uUHJvY2Vzc29yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tdW5pdHlBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbXVuaXR5SGVhbHRoUHJvbW90aW9uRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBhbnlBc3NpZ25lZFdlbGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBhbnlJbnRlcnZpZXdlcldvcmtzRm9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wYW55SW5XaGljaEludGVyZXN0SGVsZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGFueU1lcmdlZFdpdGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBhbnktT3duZWRPaWxGaWVsZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGFueVdoaWNoSG9sZHNGaW5hbmNpYWxJbnRlcmVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGFyYWJsZVByb3BlcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wYXJhYmxlUHJvcGVydHlMaXN0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wYXJhYmxlUmVudGFscyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGV0aW5nUHJvcGVydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBldGl0aXZlUHJvcGVydHlMaXN0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21waWxhdGlvbkFnZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGxhaW5hbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBsYWluYW50c0F0dG9ybmV5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wb25lbnRNYW51ZmFjdHVyZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXByZWhlbnNpdmVHZXJpYXRyaWNBc3Nlc3NtZW50RmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbmN1cnJlbnRFbXBsb3llciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uZHVjdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25kdWN0b3JQaWxvdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uZHVpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ubmVjdGluZ0NhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbm5lY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNpZ25lZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbmVlQ291cmllclRyYW5zZmVyU3RhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbmVlT2ZWZXNzZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNpZ25lZXNBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbmVlVG9CZVNwZWNpZmllZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbmVlLVRvUmVjZWl2ZUxhcmdlUGFyY2Vsc0FuZEZyZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNpZ25lZS1Ub1JlY2VpdmVNYWlsQW5kU21hbGxQYXJjZWxzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zaWdub3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNpZ25vckNvdXJpZXJUcmFuc2ZlclN0YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNpZ25vcnNSZXByZXNlbnRhdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc29saWRhdGVkRGVidG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zb2xpZGF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnN0cnVjdGlvbkNvbnRyYWN0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnN0cnVjdGlvbkZpcm0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnN1bHRhbnRzT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zdWx0aW5nUGh5c2ljaWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zdW1lckNyZWRpdEFjY291bnRDb21wYW55Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zdW1lclJlZmVycmFsQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc3VtZXJTZXJ2aWNlUHJvdmlkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnN1bWVyU2VydmljZVByb3ZpZGVyQ3VzdG9tZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhY3RCYW5rMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFjdEJhbmsyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWN0T2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWN0UGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhY3RQYXJ0eTEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhY3RQYXJ0eTIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhY3RQYXJ0eTMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhY3RQYXJ0eTQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhY3RQZXJzb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lckxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJMb2NhdGlvblBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJPcGVyYXRvck9yTGVzc2VlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJSZXR1cm5Db21wYW55Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJTdXJ2ZXlBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGluZ2VudEFubnVpdGFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGluZ2VudEJlbmVmaWNpYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250aW5nZW50T3duZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0QWRtaW5pc3RyYXRpb25PZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0ZWRTZXJ2aWNlUHJvdmlkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0SG9sZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdGluZ09mZmljZXJSZXByZXNlbnRhdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3Rvci1HZW5lcmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdE9yQ29nbml6YW50U2VjdXJpdHlPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0b3ItTGVhZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3Rvci1NYWluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdHVhbERlbGl2ZXJ5TWV0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0dWFsUmVjZWlwdE1ldGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cm9sbGVyUXVhbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udmVydGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb252b3lpbmdQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ28tT2NjdXBhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvLU9wZXJhdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29vcGVyYXRpdmVCdXlpbmdHcm91cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29vcmRpbmF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvLU93bmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDby1QYXJ0aWNpcGFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ28tUHJvZHVjZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcHlNZXNzYWdlVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcnBvcmF0ZU9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ycG9yYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcnBvcmF0aW9uRm9yLVByb2ZpdEZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3JyZWN0ZWRBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3JyZWN0ZWRJbnN1cmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3JyZWN0ZWROYW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3NpZ25lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zaWduZXJzRW1wbG95ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdW5jaWxPZkdvdmVybm1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VudGVyQ2xhaW1hbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdW50cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdW50cnlPZkRlc3RpbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VudHJ5T2ZFeHBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdW50cnlPZk9yaWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291bnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291cnRBcHBvaW50ZWRBdHRvcm5leSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0R3JhbnRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyZWRpdG9yc0F0dG9ybmV5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmVkaXRSYXRpbmdBZ2VuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyZWRpdFJlcG9ydGluZ0FnZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3Jld01lbWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JpbWVWaWN0aW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyb3NzQ2xhaW1hbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyb3NzLVRvd25Td2l0Y2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNUU2Nhbm5lclVuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnJlbnRFbXBsb3llci1QcmltYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50RW1wbG95ZXItU2Vjb25kYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50UmVjZWl2ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnJlbnRTZW5kZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvZGlhbFBhcmVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9kaWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJGT3JXaG9tU2FtZU9yU2ltaWxhcldPcmtXYXNQZXJGb3JtZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbWVySWRlbnRpZmljYXRpb25GaWxlQ3VzdG9tZXJJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zQnJva2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zT2ZmaWNlT2ZDbGVhcmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhaXJ5RGVwYXJ0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0YVByb2Nlc3NpbmdTZXJ2aWNlQnVyZWF1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWFsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYnRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVidG9yQ29tcGFueSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVidG9ySW5kaXZpZHVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVidG9yLUluLVBvc3Nlc3Npb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYnRvcnNBdHRvcm5leSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVidFBheW1lbnRBdXRob3Jpc2F0aW9uUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlY2lzaW9uTWFrZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlY2xhcmFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVjbGFyYW50c0FnZW50T3JSZXByZXNlbnRhdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVjb25zb2xpZGF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlZmF1bHRPckZvcmVjbG9zdXJlU3BlY2lhbGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVmZW5kYW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpY2F0ZXNzZW5EZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeUFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5UGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5Wm9uZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVudGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudE9mSnVzdGljZUZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBlbmRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGVuZGVudEluc3VyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGVuZGVudE5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcG9zaXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzaWduYXRlZEhhemFyZG91c1dhc3RlRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc2lnbkVuZ2luZWVyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXNpZ25lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzcGF0Y2hDaGFyZ2VQYXllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzcGF0Y2hQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzdGluYXRpb25DYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXN0aW5hdGlvbkRyYXltYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc3RpbmF0aW9uSW50ZXJtb2RhbFJhbXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc3RpbmF0aW9uTWFpbEZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXN0aW5hdGlvblRlcm1pbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaWFnbm9zdGljUmFkaW9pc290b3BlRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpYWx5c2lzQ2VudGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlmZmVyZW50UHJlbWlzZUFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpcmVjdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNhYmxlZEluZGl2aWR1YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2J1cnNpbmdPZmZpY2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNjaGFyZ2VQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY2lwbGluYXJ5Q29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzcGF0Y2hlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdGlsbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXN0cmlidXRpb25SZWNpcGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3RyaWJ1dG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXN0cmlidXRvckJyYW5jaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3RyaWN0QXR0b3JuZXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3RyaWN0SnVzdGljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGl2aXNpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3Rvck9mT3B0b21ldHJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N0b3JPZk9zdGVvcGF0aHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50YXJ5Q3JlZGl0QWNjb3VudFBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGFyeUNyZWRpdEFjY291bnRQYXJ0eXNCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGFyeUNyZWRpdEFwcGxpY2FudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRhcnlDcmVkaXRCZW5lZmljaWFyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRhcnlDcmVkaXRCZW5lZmljaWFyeXNCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGFyeUNyZWRpdFJlaW1idXJzaW5nQmFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRhcnlDcmVkaXRTZWNvbmRCZW5lZmljaWFyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRDdXN0b2RpYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50T3JNZXNzYWdlSXNzdWVyT3JTZW5kZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50UmVjaXBpZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2luZ0J1c2luZXNzQXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvbWVzdGljRmluYW5jaWFsSW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvd25zdHJlYW1GaXJzdFN1cHBsaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb3duc3RyZWFtTWV0ZXJMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG93bnN0cmVhbVBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcmF3ZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyaWxsaW5nQ29udHJhY3RvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJpdmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcm9wLU9mZkxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcnlHcm9jZXJ5RGVwYXJ0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVyYWJsZU1lZGljYWxFcXVpcG1lbnRTdXBwbGllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWNvbm9taWNhbGx5RGlzYWR2YW50YWdlZEluZGl2aWR1YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVkdWNhdGlvbmFsSW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVsZWN0cm9uaWNEYXRhSW50ZXJjaGFuZ2VDb29yZGluYXRvclBvaW50QWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWxlY3Ryb25pY0ZpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGVjdHJvbmljUmVnaXN0cmF0aW9uVXRpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWxlY3Ryb25pY1JldHVybk9yaWdpbmF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVsZW1lbnRhcnlTY2hvb2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVsaWdpYmxlUGFydHlUb1RoZUNvbnRyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGlnaWJsZVBhcnR5VG9UaGVSYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbWVyZ2VuY3lEZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbWVyZ2VuY3lEZXBhcnRtZW50U29jaWFsV29ya1NlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbWVyZ2VuY3lNZWRpY2FsVGVjaG5pY2lhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1lcmdlbmN5UHJvdmlkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtZXJnZW5jeVJlc3BvbnNlVW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1lcmdpbmdTbWFsbEJ1c2luZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWVOYW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wdHlDb250YWluZXJSZXNwb25zaWJsZVBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXB0eUNvbnRhaW5lclJldHVybkFnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXB0eUVxdWlwbWVudERlc3BhdGNoUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcHR5RXF1aXBtZW50UmV0dXJuUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZEl0ZW1NYW51ZmFjdHVyZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZFVzZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZXJneUluZm9ybWF0aW9uQWRtaW5pc3RyYXRpb24tT3duZWRPaWxGaWVsZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5naW5lZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZ2luZWVyLUNvbnN0cnVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5naW5lZXItQ29uc3VsdGFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5naW5lZXJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZ2luZWVyTWVhc3VyZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZ2luZWVyUGlsb3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZ2luZWVyLVJlc2lkZW50Q29uc3RydWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbnJvbGxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW50aXR5SG9sZGluZ1RoZUluZm9ybWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbnRpdHlJbldoaWNoQUZpbmFuY2lhbEludGVyZXN0SXNIZWxkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbnRpdHlQcm92aWRpbmdUaGVTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbnRpdHlSZXNwb25zaWJsZUZvckZvbGxvdy1VcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW50cnlQb2ludFRlY2huaWNhbEFzc2Vzc21lbnRHcm91cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50RHJvcC1PZmZQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50T3duZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWlwbWVudFJlcGFpclBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RhYmxpc2hlZExvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV2ZW50TG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4YW1pbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGNoYW5nZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4Y2lzZVBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGNsdWRlZFBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGVjdXRpdmVDb21taXR0ZWVNZW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZWN1dG9yT2ZFc3RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4aGliaXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwZXJ0V2l0bmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwb3J0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4LVNwb3VzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXh0ZW5kZWRDYXJlRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4dHJhY29ycG9yZWFsU2hvY2stV2F2ZUxpdGhvdHJpcHRlclVuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV5ZUVhck5vc2VBbmRUaHJvYXRGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhY3RvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFjdG9yLUNvcnJlc3BvbmRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhbWlseU1lbWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmF0aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxHb3Zlcm5tZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsbHlDaGFydGVyZWRGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbFN0YXRlQ291bnR5T3JDaXR5RmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlbGxvd3NoaXBJbnN0aXR1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVsb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpZWxkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaWVsZG9yQnJhbmNoT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaWxlck5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbGluZ0FkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbGluZ0xvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaWxpbmdPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFsQ3VzdG9tZXJPcmdhbml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFsTWFpbnRlbmFuY2VPcmdhbml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFsTWFpbnRlbmFuY2VQZXJpb2REZXNpZ25hdGluZ09yZ2FuaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYWxNZXNzYWdlUmVjaXBpZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbFJlY2lwaWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYWxSZWZlcnJlZFRvT3JnYW5pemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbFNjaGVkdWxlZERlc3RpbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbmNpYWxJbnN0aXR1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsUGxhbm5lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsU3RhdGVtZW50UmVjaXBpZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJlbWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdEFwcHJhaXNlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlyc3RCcmVha1Rlcm1pbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdENvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpcnN0U3VwcGxpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpdG5lc3NDZW50ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZsb29kQ2VydGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbG9vZERldGVybWluYXRpb25Qcm92aWRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxvcmFsRGVwYXJ0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9vZFNlcnZpY2VPcGVyYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWNsb3NpbmdMZW5kZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVpZ25EaXNjbG9zdXJlSW5mb3JtYXRpb25PZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVpZ25MYW5ndWFnZVN5bm9ueW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVpZ25PZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVpZ25SZWdpc3RyYXRpb25Mb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWlnblN1cHBsaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JtYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcm1lckFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcm1lcmx5RG9pbmdCdXNpbmVzc0FzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JtZXJseUtub3duQXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcm1lclByZXNpZGVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9ybWVyUmVnaXN0ZXJlZEFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcm1lclJlc2lkZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yUHJvZml0SGVhbHRoQ2FyZVByb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3J3YXJkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvdW5kYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvdW5kZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyYW5jaGlzZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyYW5jaGlzb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWVvbkJvYXJkUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWlnaHRGb3J3YXJkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWlnaHRNYW5hZ2VtZW50RmFjaWxpdGF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWlnaHRPckNoYXJnZXNQYXllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlaWdodFBheWVyT25CZWhhbGZPZlRoZUNvbnNpZ25lZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlaWdodFBheWVyT25CZWhhbGZPZlRoZUNvbnNpZ25vciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJvemVuRGVwYXJ0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnV0dXJlQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FpbmluZ0ludmVudG9yeU1hbmFnZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdhcmFnZWRMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FybmlzaGVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXNQbGFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FzVHJhbnNhY3Rpb25FbmRpbmdQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FzVHJhbnNhY3Rpb25Qb2ludDEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdhc1RyYW5zYWN0aW9uUG9pbnQyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXNUcmFuc2FjdGlvblN0YXJ0aW5nUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdhdGV3YXlQcm92aWRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VuZXJhbEFnZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VuZXJhbElucGF0aWVudENhcmVGb3JBSURTT3JBUkNGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VuZXJhbE1lZGljYWxBbmRTdXJnaWNhbEZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW5lcmFsTWVyY2hhbmRpc2VEZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW5ldGljQ291bnNlbGluZ09yU2NyZWVuaW5nU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdlcmlhdHJpY0FjdXRlQ2FyZVVuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdlcmlhdHJpY0NsaW5pY3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdpZnRSZWNpcGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdvb2RzQ29sbGVjdGlvblBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb29kc0N1c3RvZGlhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZHNPd25lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZHNSZWxlYXNlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJubWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJubWVudC1Db21iaW5lZENvbnRyb2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdvdmVybm1lbnQtRmVkZXJhbC1NaWxpdGFyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJubWVudC1GZWRlcmFsLU90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb3Zlcm5tZW50LUZlZGVyYWwtVmV0ZXJhbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdvdmVybm1lbnRGdXJuaXNoZWRQcm9wZXJ0eUZPQlBvaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb3Zlcm5tZW50TG9hbkFnZW5jeVNwb25zb3JPckFnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb3Zlcm5tZW50LUxvY2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmFuZHBhcmVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JhbnRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JvdW5kQW1idWxhbmNlU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcm91cEFmZmlsaWF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JvdXBBZmZpbGlhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JvdXBpbmdDZW50cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3VwUHJhY3RpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3VwUHVyY2hhc2luZ09yZ2FuaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3VhcmFudGVlQWdlbmN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHdWFyZGlhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGF6YXJkb3VzTWF0ZXJpYWxPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhemFyZG91c1dhc3RlR2VuZXJhdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFkT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFsdGhBbmRCZWF1dHlEZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFsdGhjYXJlUHJvZmVzc2lvbmFsU2hvcnRhZ2VBcmVhRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYWx0aE1haW50ZW5hbmNlT3JnYW5pemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFsdGhNaXNjZWxsYW5lb3VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFsdGhTY2llbmNlc0xpYnJhcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlbW9kaWFseXNpc0ZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIaWdoU2Nob29sIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIaXNvcGF0aG9sb2d5TGFib3JhdG9yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGlzcGFuaWNTZXJ2aWNlSW5zdGl0dXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIaXN0b3JpY2FsbHlCbGFja0NvbGxlZ2VPclVuaXZlcnNpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvbWVIZWFsdGhBZ2VuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvbWVIZWFsdGhDYXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb21lSGVhbHRoQ29ycG9yYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvbWVIZWFsdGhTZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9tZU9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9tZVNjaG9vbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9tZVN0YXRlTmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9zcGljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9zcGl0YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikhvc3BpdGFsQXV4aWxpYXJ5VW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9zcGl0YWxEaXN0cmljdE9yQXV0aG9yaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3NwaXRhbFVuaXRPZkFuSW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikhvc3BpdGFsVW5pdFdpdGhpbkFuSW5zdGl0dXRpb25Gb3JUaGVNZW50YWxseVJldGFyZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3N0aWxlV2l0bmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW1wb3J0ZWRGcm9tTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkltcG9ydGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbkNhcmVPZlBhcnR5Tm8xIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbkNhcmVPZlBhcnR5Tm8yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmNvcnBvcmF0ZWRCeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5jb3Jwb3JhdGVkTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluY29ycG9yYXRpb25KdXJpc2RpY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluY29ycG9yYXRpb25TdGF0ZVBsYWNlT2ZCdXNpbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5jb3Jwb3JhdGlvblN0YXRlUHJpbmNpcGFsT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmRlcGVuZGVudEFkanVzdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmRlcGVuZGVudExhYiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5kZXBlbmRlbnRQaHlzaWNpYW5zQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZGl2aWR1YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZGl2aWR1YWxGb3ItUHJvZml0RmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZHVzdHJ5QXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZHVzdHJ5QnVyZWF1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmVsaWdpYmxlUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZm9ybWF0aW9uRGlzc2VtaW5hdGlvbkFnZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5mb3JtYXRpb25NYWludGVuYW5jZUFnZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5mb3JtYXRpb25Qcm92aWRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5mb3JtYXRpb25SZWZlcmVuY2VBZ2VuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZm9ybWF0aW9uU291cmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbml0aWFsRGVhbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbml0aWFsTWVkaWNhbFByb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbml0aWFsU3Vic2NyaWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5pdGlhdGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5qZWN0aW9uUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluLVBhdGllbnRQaGFybWFjeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5xdWlyaW5nUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklucXVpcnlBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbi1TZXJ2aWNlU291cmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnNwZWN0aW9uQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zcGVjdGlvbkFuZEFjY2VwdGFuY2VMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zcGVjdGlvbkFuZEFjY2VwdGFuY2VQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zcGVjdGlvbkNvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3BlY3Rpb25MZWFkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3BlY3Rpb25Mb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zcGVjdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN0YWxsYXRpb25PblNpdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3RhbGxlZEF0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN0aXR1dGlvbmFsUHJvdmlkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3RpdHV0aW9uRm9yTWVudGFsUmV0YXJkYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluLVN0b3JlQmFrZXJ5RGVwYXJ0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJhbmNlQmVuZWZpY2lhcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyYW5jZUNsYWltQWRqdXN0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyYW5jZUNvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyYW5jZUluc3RpdHV0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJlZExvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmVkT3JTdWJzY3JpYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlZ3JhdGVkTWF0ZXJpYWxNYW5hZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlbGxlY3R1YWxQcm9wZXJ0eU93bmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcmVzdGVkUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVyaW1GdW5kaW5nT3JnYW5pemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcmltVHJ1c3RlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJsaW5lU2VydmljZUNvbW1pdG1lbnRDdXN0b21lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJtZWRpYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm1lZGlhcnlCYW5rMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJtZWRpYXJ5QmFuazIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybWVkaWFyeU9yQnJva2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm1lZGlhdGVDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm1lZGlhdGVDb25zaWduZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybWVkaWF0ZUxldmVsUGFyZW50Q29tcGFueSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJuYXRpb25hbEZyZWlnaHRGb3J3YXJkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmF0aW9uYWxPcmdhbml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybnNoaXBFbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVycHJldGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcnZpZXdlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJ2aWV3ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVudG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlbnRvcnlDb250cm9sbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlbnRvcnlDb250cm9sUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVudG9yeVJlcG9ydGluZ1BhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlc3RpZ2F0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVzdG1lbnRBZHZpc29yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlc3RvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52b2ljZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikludm9pY2luZ0RlYWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52b2x2ZWRQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXJyZXZvY2FibGVCZW5lZmljaWFyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXNzdWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJc3N1ZXJPZkRlYml0T3JDcmVkaXRNZW1vIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJc3N1ZXJPZkludm9pY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Iklzc3Vlck9mV2F5YmlsbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXNzdWluZ0JhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikl0ZW1NYW5hZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJdGVtU2hpcFRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJdGVtU2hpcEZyb20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkpvaW50QW5udWl0YW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKb2ludEFubnVpdGFudE93bmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKb2ludERlYnRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSm9pbnREZWJ0b3JBdHRvcm5leSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSm9pbnRPd25lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSm9pbnRPd25lckFubnVpdGFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSm9pbnRPd25lckFubnVpdGFudFBheW9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKb2ludE93bmVySm9pbnRBbm51aXRhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkpvaW50T3duZXJKb2ludEFubnVpdGFudFBheW9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKb2ludE93bmVyUGF5b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkpvaW50VmVudHVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSnVkZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikp1bmlvckhpZ2hTY2hvb2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikp1cmlzZGljdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSnV2ZW5pbGVEZWZlbmRhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikp1dmVuaWxlT3duZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikp1dmVuaWxlVmljdGltIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKdXZlbmlsZVdpdG5lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktleVBlcnNvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS2lkbmV5RGlhbHlzaXNVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJlbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJvcmF0b3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJvclN1cnBsdXNBcmVhRmlybSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFuZGxvcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhcmdlQnVzaW5lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RCcmVha1Rlcm1pbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0RW1wbG95ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RLbm93blNvdXJjZU9mU3VwcGx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0U3VwcGxpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhd0VuZm9yY2VtZW50QWdlbmN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXdGaXJtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWFzZUxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWdhbFJlY2VpdmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWdhbFJlcHJlc2VudGF0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWdhbFRpdGxlSG9sZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZW5kZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlbmRpbmdJbnN0aXR1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVzc2VlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZXNzZWVzU3VydmV5b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxlc3NvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlhYmlsaXR5SG9sZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWNlbnNlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGllbkhvbGRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGltaXRlZExpYWJpbGl0eUNvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpbWl0ZWRMaWFiaWxpdHlQYXJ0bmVyc2hpcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGltaXRlZFBhcnRuZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpcXVpZGF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxpc3RpbmdBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlzdGluZ0NvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxpc3RpbmdPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxpc3RNYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxpc3RPd25lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGl0ZXJhbGx5VHJhbnNsYXRlZE5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYWRpbmdQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hbkFwcGxpY2FudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hbkJyb2tlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hbkNvcnJlc3BvbmRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYW5Ib2xkZXJGb3JSZWFsRXN0YXRlQXNzZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYW5PcmlnaW5hdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2FuU2VydmljZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2FsQ2hhaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2FsR292ZXJubWVudFNwb25zb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2F0aW9uT2ZHb29kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYXRpb25PZkdvb2RzRm9yQ3VzdG9tc0V4YW1pbmF0aW9uQmVmb3JlQ2xlYXJhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhdGlvbk9mTG9hZEV4Y2hhbmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhdGlvbk9mUHJpbmNpcGFsQXNzZXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhdGlvbk9mU3BvdEZvclN0b3JhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvbmdUZXJtQ2FyZUZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb25nLVRlcm1EaXNhYmlsaXR5Q2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9zaW5nSW52ZW50b3J5TWFuYWdlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9zc1BheWVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hZ2lzdHJhdGVKdWRnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFnbmV0aWNSZXNvbmFuY2VJbWFnaW5nRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haWRlbk5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haWxBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWlsVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haW5saW5lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWludGVuYW5jZU9yZ2FuaXphdGlvblVzZWRGb3JFc3RpbWF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFtbW9ncmFwaHlTY3JlZW5pbmdDZW50ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbmFnZWRDYXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW5hZ2VkQ2FyZU9yZ2FuaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFuYWdlbWVudENvbnRyb2xBY3Rpdml0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFuYWdlbWVudE5vbi1PZmZpY2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW5hZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW5hZ2luZ0FnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW5hZ2luZ0dlbmVyYWxBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFudWZhY3R1cmVyT2ZHb29kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFudWZhY3R1cmVyc1JlcHJlc2VudGF0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW51ZmFjdHVyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW51ZmFjdHVyaW5nUGxhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcmluZVN1cnZleW9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXJrZXJPd25lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFya2V0VGltZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcmstRm9yUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hc3RlckFnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXN0ZXJHZW5lcmFsQWdlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hc3RlclByb3BlcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXRlcmlhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0ZXJpYWxDaGFuZ2VOb3RpY2VBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXRlcmlhbERpc3Bvc2l0aW9uQXV0aG9yaXphdGlvbkxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXRlcmlhbElzc3VlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0ZXJpYWxTYWZldHlEYXRhU2hlZXRSZWNpcGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lYW5zT2ZUcmFuc3BvcnRDaGFydGVyZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lYXREZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FsRG9jdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FsSW5zdXJhbmNlQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaWNhbE51cnNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FsU2Nob29sIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FsU3VyZ2ljYWxPck90aGVySW50ZW5zaXZlQ2FyZVVuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYWxUcmVhdG1lbnRFeGVjdXRhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYWxUcmVhdG1lbnRQcmVzY3JpYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWV0aW5nTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZ2F2b2x0YWdlUmFkaWF0aW9uVGhlcmFweVVuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lbWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVyY2hhbnRCYW5rZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lcmdlZENvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lcmdlZENvbXBhbnlXaXRoUmV0YWluZWRJZGVudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVyZ2VkTmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVzc2FnZUZyb20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lc3NhZ2VSZWNpcGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lc3NhZ2VUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWV0ZXJpbmdMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWV4aWNhbkN1c3RvbXNCcm9rZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pZGRsZVNjaG9vbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlncmFudEhlYWx0aENsaW5pYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlsaXRhcnlCcmFuY2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbGl0YXJ5RmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1Sb3lhbHR5UGF5b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmlzdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaW5vcml0eUluc3RpdHV0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaW5vcml0eS1Pd25lZEJ1c2luZXNzTGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbm9yaXR5LU93bmVkQnVzaW5lc3NTbWFsbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlzY2VsbGFuZW91c0hlYWx0aENhcmVGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9uaXRvcmluZ1BhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3J0Z2FnZUNvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vcnRnYWdlSW5zdXJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9ydGdhZ2VMaWFiaWxpdHlBY2NvdW50SG9sZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3N0UmVjZW50RW1wbG95ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW90b3JDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3RvclZlaGljbGVSZXBvcnRQcm92aWRlckNvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik11bHRpcGxlTGlzdGluZ1NlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik11bmljaXBhbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmFtZUNoYW5nZWRUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmFtZU5vdFRvQmVDb25mdXNlZFdpdGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hbWVvbkNyZWRpdENhcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hbWVVbmRlcldoaWNoRmlsZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hbWVWYXJpYXRpb25TeW5vbnltIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbENoYWluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbE9yZ2FuaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aXZlSGF3YWlpYW5Pcmdhbml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdnlGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmVnbGVjdGVkT3JEZWxpbnF1ZW50SW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5lZ290aWF0aW5nQmFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmVpZ2hib3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5laWdoYm9yaG9vZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmVvbmF0YWxJbnRlbnNpdmVDYXJlVW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV0d29ya05hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld0FkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld0Fzc2lnbmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXdEZWJ0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld1NlY3VyZWRQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV3U2VydmljZVByb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXdzcGFwZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld1N1cHBseVNvdXJjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV4dERlc3RpbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXh0U2NoZWR1bGVkRGVzdGluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5pY2tuYW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb0hlYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbWluYXRlZEJhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbWluYXRlZEZyZWlnaHRDb21wYW55Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tRG9tZXN0aWNGaW5hbmNpYWxJbnN0aXR1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uZW1wbG95bWVudEluY29tZVNvdXJjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uLUhlYWx0aENhcmVNaXNjZWxsYW5lb3VzRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbi1JbnN1cmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tSW52YXNpdmVDYXJkaWFjQXNzZXNzbWVudFNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tTW9ydGdhZ2VMaWFiaWxpdHlBY2NvdW50SG9sZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tT2NjdXBhbnRDby1Cb3Jyb3dlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uLVByb2R1Y3Rpb25TdXBwbGllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uLVByb2ZpdEhlYWx0aENhcmVQcm92aWRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9ucHJvZml0SW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbi1SYWlscm9hZEVudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uUmVnaXN0ZXJlZEJ1c2luZXNzTmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uLVJlZ2lzdGVyZWRJbnZlc3RtZW50QWR2aXNvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uLVJlc2lkZW50QmVuZWZpY2lhcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbi1SZXNpZGVudENyZWRpdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tUmVzaWRlbnREZWJ0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbi1SZXNpZGVudEdyb3VwQ29tcGFueVdpdGhXaG9tRmluYW5jaWFsQWNjb3VudElzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tUmVzaWRlbnRJbnN0cnVjdGluZ1BhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tUmVzaWRlbnRUaGlyZFBhcnR5Q29tcGFueVdpdGhXaG9tRmluYW5jaWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tVGVtcG9yYXJ5U3RvcmFnZUZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RhcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdGFyeVB1YmxpYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90ZUNvLVNpZ25lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90Rm9yUHJvZml0SGVhbHRoQ2FyZVByb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RpZnlQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90aWZ5UGFydHlGb3JTaGlwcGVyc09yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RpZnlQYXJ0eU5vMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90aWZ5UGFydHlObzIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51cnNpbmdIb21lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdXJzaW5nSG9tZUNoYWluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPYnNlcnZhdGlvblJvb21TZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2JzdGV0cmljc0FuZEd5bmVjb2xvZ3lGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2JzdGV0cmljc1VuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9jY3VwYW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPY2N1cGF0aW9uYWxIZWFsdGhTZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2NjdXBhdGlvbmFsVGhlcmFweVNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPY2VhblRhcmlmZkNvbmZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZmljZU1hbmFnZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZmljZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZnNldE9wZXJhdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPaWxBbmRHYXNDdXN0b2RpYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9pbEFuZEdhc1JlZ3VsYXRvcnlBZ2VuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9sZEFzc2lnbmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbGREZWJ0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9sZFNlY3VyZWRQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25CZWhhbGZPZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT24tQ2FsbFByb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbmNvbG9neUNlbnRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3Blbi1IZWFydFN1cmdlcnlGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3BlcmF0aW5nUGh5c2ljaWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVyYXRvci1Db21tdW5pY2F0aW9uQ2hhbm5lbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3BlcmF0b3ItRXNzZW50aWFsU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wZXJhdG9yT2ZQcm9wZXJ0eU9yRXF1aXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVyYXRvck9mUHJvcGVydHlPclVuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wZXJhdG9yT2ZUaGVTb3VyY2VUcmFuc2ZlclBvaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVyYXRvck9mVGhlVHJhbnNmZXJQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JkZXJlZEJhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yZGVyZWRCeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JkZXJpbmdCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlcmluZ0N1c3RvbWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlcmluZ1BhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlcmluZ1BoeXNpY2lhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JkZXJPZlNoaXBwZXJzT3JkZXJzLVRyYW5zcG9ydGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlck9mVGhlU2hpcHBlclBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlcldyaXRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JnYW5pemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmdhbml6YXRpb25Db21wbGV0aW5nQ29uZmlndXJhdGlvbkNoYW5nZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JnYW5pemF0aW9uR3JvdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yZ2FuaXphdGlvbkhhdmluZ1NvdXJjZUNvbnRyb2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yZ2FuaXplZE91dHBhdGllbnRTZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JnYW5pemVkU29jaWFsV29ya1NlcnZpY2VGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JnYW5pemVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmdhbk9yVGlzc3VlVHJhbnNwbGFudFVuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsQ2xhaW1hbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsSW50ZXJtb2RhbFJhbXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsSnVyaXNkaWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbExvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbE5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsU2hpcHBlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luYXRpbmdCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hdGluZ0NvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmF0b3JPZkFydGljbGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbkNhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbkRyYXltYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbk1haWxGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luU3VibG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpblRlcm1pbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcnRob3BlZGljRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9ydGhvcGVkaWNTdXJnZXJ5RmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyRGVwYXJ0bWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyRGlzYWR2YW50YWdlZEJ1c2luZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlckluZGl2aWR1YWxEaXNhYmlsaXR5Q2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXJJbnN1cmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlck5vdC1Gb3ItUHJvZml0RmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyUGVyc29uT3JFbnRpdHlBc3NvY2lhdGVkV2l0aFN0dWRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyUGh5c2ljaWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlclJlbGF0ZWRQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXJTcGVjaWFsdHlGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXJVbmxpc3RlZFR5cGVPZk9yZ2FuaXphdGlvbmFsRW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdXRlckNvbnRpbmVudGFsU2hlbGZBcmVhTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik91dC1PZi1TdGF0ZVByaW5jaXBhbE9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0cGF0aWVudFNvY2lhbFdvcmtTZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0cGF0aWVudFN1cmdlcnlTZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0cGF0aWVudFN1cmdpY2VudGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdXRzaWRlSW5zcGVjdGlvbkFnZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0c2lkZVByb2Nlc3NvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0c2lkZVRlc3RBZ2VuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXJyaWRlSW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik93bmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lckFubnVpdGFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3duZXJBbm51aXRhbnRQYXlvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3duZXJKb2ludEFubnVpdGFudFBheW9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lck9mRXF1aXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lck9mTWVhbnNPZlRyYW5zcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3duZXJPZk9wZXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3duZXJPZlByb3BlcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lck9mUHJvcGVydHlPclVuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik93bmVyT2ZSZXNpZGVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik93bmVyT2ZWZWhpY2xlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lck9mVmVzc2VsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lck9yTGVzc29yc1N1cnZleW9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lclBheW9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lcnNBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3duZXJzUmVwcmVzZW50YXRpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik93bmluZ0ludmVudG9yeUNvbnRyb2xQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3h5Z2VuVGhlcmFweUZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNrZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcmFtZWRpYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFyYW1lZGljYWxDb21wYW55Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcmVudENvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnRpY2lwYW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0aWNpcGF0aW5nQXJlYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydGljaXBhdGluZ0xhYm9yYXRvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnRuZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnRuZXJzaGlwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0bmVyc2hpcEZvci1Qcm9maXRGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydFJlbWFudWZhY3R1cmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0c0Rpc3RyaWJ1dG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0U291cmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eUFjY29yZGluZ1RvRG9jdW1lbnRhcnlDcmVkaXRUcmFuc2FjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlBc3NpZ25pbmdBU3RhdHVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eUF0RmluYWxQbGFjZU9mUG9zaXRpb25pbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5QXRQaWNrLVVwTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5QXV0aG9yaXplZHRvRGVmaW5pdGl6ZUNvbnRyYWN0QWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eUF1dGhvcml6ZWRUb01ha2VEZWZpbml0ZUFDb250cmFjdEFjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlBdXRob3JpemluZ0Rpc3Bvc2l0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eUF1dGhvcml6aW5nUmVsZWFzZU9mU2VjdXJpdHlJbmZvcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlEYXRhUmVzcG9uc2libGVQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlEZWNsYXJpbmdUaGVWYWx1ZUFkZGVkVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eURlc2lnbmF0ZWRUb0V4ZWN1dGVSZS1JY2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlEZXNpZ25hdGVkVG9FeGVjdXRlU2FuaXRhcnlQcm9jZWR1cmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eURlc2lnbmF0ZWRUb1Byb3ZpZGVMaXZpbmdBbmltYWxDYXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eUV4ZWN1dGluZ0FuZFZlcmlmeWluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlGaWxsaW5nU2hpcHBlcnNPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlGb3JXaG9tSXRlbUlzVWx0aW1hdGVseUludGVuZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eUZyb21XaG9tQ3VzdG9tc0RvY3VtZW50c0FyZVRvQmVQaWNrZWRVcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlGcm9tV2hvbU5vbi1DdXN0b21zRG9jdW1lbnRzQXJlVG9CZVBpY2tlZFVwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eUZ1bGZpbGxpbmdBbGxPcGVyYXRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eUluUG9zc2Vzc2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlJc3N1aW5nTXV0dWFsbHlBZ3JlZWRDb2RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlNYWludGFpbmluZ1RoZUNvZGVzVXNlZEluVGhlTWVzc2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlNYWludGFpbmluZ1RoZUlkZW50aWZpZXJzVXNlZEluVGhlTWVzc2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlNYW5kYXRlZFRvTGlxdWlkYXRlQW5FbnRlcnByaXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eU1hbnVmYWN0dXJlZEZvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlOb3RUb0JlQ29uZnVzZWRXaXRoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVBhc3NpbmdUaGVUcmFuc2FjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlQZXJmb3JtaW5nQ2VydGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlQZXJmb3JtaW5nQ291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5UGVyZm9ybWluZ0luc3BlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5UGVyZm9ybWluZ1Rhc2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5UGVyZm9ybWluZ1ZlcmlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlQcm92aWRpbmdGaW5hbmNpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5UHJvdmlkaW5nR292ZXJubWVudEZ1cm5pc2hlZFByb3BlcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVJlY292ZXJpbmdUaGVWYWx1ZUFkZGVkVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVJlcHJlc2VudGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVJlc3BvbnNpYmxlRm9yRGlzaW5mZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVJlc3BvbnNpYmxlRm9yRmluYW5jaWFsU2V0dGxlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlSZXNwb25zaWJsZUZvclJlZnVlbGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlTdWJtaXR0aW5nUXVvdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5VGhhdFJlY2VpdmVkRGlzY2xvc3VyZVN0YXRlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlUaGF0UmVtaXRzUGF5bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHl0b0FwcGVhckJlZm9yZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlUb0FwcHJvdmVTcGVjaWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eXRvYmVhZHZpc2VkLVdyaXR0ZW5PcmRlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5VG9CZUJpbGxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlUb0JlQmlsbGVkRm9yT3RoZXJUaGFuRnJlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHl0b0NvbnRyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvRmlsZVBlcnNvbmFsUHJvcGVydHlUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5dG9MZWFzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHl0b1BlcmZvcm1QYWNrYWdpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5VG9QcmludFNvbWVEb2N1bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHl0b1Byb3ZpZGVEaXNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlUb1JlY2VpdmVBbGxEb2N1bWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5dG9SZWNlaXZlQmlsbE9mTGFkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvUmVjZWl2ZUNlcnRpZmljYXRlT2ZDb21wbGlhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvUmVjZWl2ZUNlcnRpZmljYXRlT2ZDb25mb3JtYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlUb1JlY2VpdmVDZXJ0aWZpZWRJbnNwZWN0aW9uUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvUmVjZWl2ZUNlcnRpZmllZFRlc3RSZXN1bHRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvUmVjZWl2ZUNvbW1lcmNpYWxJbnZvaWNlUmVtaXR0YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlUb1JlY2VpdmVDb250cmFjdFNlY3VyaXR5Q2xhc3NpZmljYXRpb25TcGVjaWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvUmVjZWl2ZUNvcHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5VG9SZWNlaXZlQ29ycmVzcG9uZGVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5dG9SZWNlaXZlQ3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvUmVjZWl2ZUN1c3RvbXNEb2N1bWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5VG9SZWNlaXZlRWxlY3Ryb25pY01lbW9PZkludm9pY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5VG9SZWNlaXZlRXF1aXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvUmVjZWl2ZUZyZWlnaHRCaWxsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvUmVjZWl2ZUluc3BlY3Rpb25SZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5VG9SZWNlaXZlSW52aXRhdGlvblRvT2ZmZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5dG9SZWNlaXZlSW52b2ljZUZPckdvb2RzT3JTZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlUb1JlY2VpdmVJbnZvaWNlRm9yTGVhc2VQYXltZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHl0b1JlY2VpdmVMaW1pdGF0aW9uc09mSGVhdnlFbGVtZW50c1JlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHl0b1JlY2VpdmVNYXRlcmlhbFJlbGVhc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5VG9SZWNlaXZlTm9uLUN1c3RvbXNEb2N1bWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5VG9SZWNlaXZlT3JkZXJUb1N1cHBseSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlUb1JlY2VpdmVQYWNraW5nQ3JhdGluZ0FuZEhhbmRsaW5nQ3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvUmVjZWl2ZVBhcGVyTWVtb09mSW52b2ljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHl0b1JlY2VpdmVQcm9wb3NhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlUb1JlY2VpdmVQdXJjaGFzZU9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvUmVjZWl2ZVJlcG9ydHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5dG9SZWNlaXZlU2NhbGVUaWNrZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5dG9SZWNlaXZlU2hpcHBpbmdNYW5pZmVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlUb1JlY2VpdmVTaGlwcGluZ05vdGljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHl0b1JlY2VpdmVTb2xpY2l0YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5VG9SZWNlaXZlU3RhdGVtZW50T2ZBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvUmVjZWl2ZVN0YXRlbWVudE9mRmVlc0R1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHl0b1JlY2VpdmVTdGF0dXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5VG9SZWNlaXZlVGVjaG5pY2FsRG9jdW1lbnRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlUb1JlY2VpdmVUZXN0UmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eXRvUmVjZWl2ZVRyYW5zcG9ydGF0aW9uQ3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eXRvV2hvbUFja25vd2xlZGdtZW50U2hvdWxkQmVTZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvV2hvbURvY3VtZW50c0FyZVRvQmVQcmVzZW50ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5dG9XaG9tUHJvdGVzdFN1Ym1pdHRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlXYWl2aW5nUmVxdWlyZW1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVdoaWNoRGVsaXZlcnNDb25zaWdubWVudHNUb1RoZVRlcm1pbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVdoaWNoUGlja3NVcENvbnNpZ25tZW50c0Zyb21UaGVUZXJtaW5hbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlXaG9TaWduZWRUaGVEZWxpdmVyeVJlY2VpcHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5V2l0aEtub3dsZWRnZU9mQWZmYWlyc09mVGhlQ29tcGFueSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlXaXRoUG93ZXJUb1ZvdGVTZWN1cml0aWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXNzZW5nZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhdGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhdGllbnRDb21wYW5pb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhdGllbnRFZHVjYXRpb25Vbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXRpZW50RmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhdGllbnRSZXByZXNlbnRhdGl2ZVNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXllZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5ZWVzQ29tcGFueU5hbWVPcklkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5ZXJPZkxhc3RSZXNvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheWVyc0NvbXBhbnlOYW1lT3JJZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5ZXJzRmluYW5jaWFsSW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheWluZ0FnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXlpbmdCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXlpbmdGaW5hbmNpYWxJbnN0aXR1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudEFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXktVG9Qcm92aWRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVkZXN0cmlhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVkaWF0cmljQWN1dGVJbnBhdGllbnRVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJmb3JtZWRBdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVybWl0SG9sZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJzb25Gb3JXaG9zZUJlbmVmaXRQcm9wZXJ0eXdhc1NlaXplZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyc29ubmVsT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJzb25PbkNsYWltIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJzb25Pck90aGVyRW50aXR5TGVnYWxseVJlc3BvbnNpYmxlRm9yQUNoaWxkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJzb25Pck90aGVyRW50aXR5TGVnYWxseVJlc3BvbnNpYmxlRm9yQW5kV2l0aFdob21BQ2hpbGRSZXNpZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJzb25Pck90aGVyRW50aXR5V2l0aFdob21BQ2hpbGRSZXNpZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXRpdGlvbmluZ0NyZWRpdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXRpdGlvbmluZ0NyZWRpdG9yc0F0dG9ybmV5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaGFybWFjaXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaGFybWFjeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGhhcm1hY3lEZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaHlzaWNhbEFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBoeXNpY2FsVGhlcmFweVNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaHlzaWNpYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBoeXNpY2lhbkNsaW5pY09yR3JvdXBQcmFjdGljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGh5c2ljaWFuSG9zcGl0YWxPcmdhbml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBoeXNpY2lhbi1TcGVjaWFsaXN0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlja1VwQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGllck5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpcGVsaW5lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaXBlbGluZVNlZ21lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpcGVsaW5lU2VnbWVudEJvdW5kYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFjZU9mQm90dGxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYWNlT2ZCdXNpbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhY2VPZkRpc3RpbGxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYWNlT2ZPY2N1cnJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFjZU9mUGVyZm9ybWFuY2VDb2duaXphbnRTZWN1cml0eU9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhaW50aWZmIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFuQWRtaW5pc3RyYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhbm5pbmdPck1haW50ZW5hbmNlT3JnYW5pemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFubmluZ0NvbW1pc3Npb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW5uaW5nU2NoZWR1bGVPck1hdGVyaWFsUmVsZWFzZUlzc3VlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhblNwb25zb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFudENsZWFyYW5jZU9mZmljZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvZGlhdHJpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvaW50T2ZTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb2xpY3lIb2xkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvbGljeVdyaXRpbmdBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9sbGluZ1NpdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvcnRBdXRob3JpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvc3RhbE1haWxpbmdBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3N0c2Vjb25kYXJ5RWR1Y2F0aW9uUmVjaXBpZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3N0c2Vjb25kYXJ5RWR1Y2F0aW9uU2VuZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3N0LVNlY29uZGFyeUluc3RpdHV0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3RlbnRpYWxTb3VyY2VPZlN1cHBseSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG93ZXJPZkF0dG9ybmV5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVmZXJyZWRQcm92aWRlck9yZ2FuaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlLUtEYXlDYXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmUta2luZGVyZ2FydGVuVG9HcmFkZTEyUmVjaXBpZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmUta2luZGVyZ2FydGVuVG9HcmFkZTEyU2VuZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVsaW1pbmFyeUN1c3RvbWVyT3JnYW5pemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVsaW1pbmFyeUluc3BlY3Rpb25Mb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlbGltaW5hcnlNYWludGVuYW5jZU9yZ2FuaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlbGltaW5hcnlNYWludGVuYW5jZVBlcmlvZERlc2lnbmF0aW5nT3JnYW5pemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVsaW1pbmFyeVJlZmVycmVkVG9Pcmdhbml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZW1pc2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVwYXJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc2VudEFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXNlbnRpbmdCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVzaWRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzQnVzaW5lc3NQYXJ0bmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c0NyZWRpdEdyYW50b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzRGVidEhvbGRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNEaXN0cmlidXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNFbXBsb3llciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNHcm91cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNJbnN1cmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c01lbWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNOYW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c05hbWVPZkZpcm0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzTmVpZ2hib3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzT2NjdXBhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzT3duZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzUmVzaWRlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c1N0YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzVGl0bGVDb21wYW55Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c1RyYWRlVW5pb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaWNlQWRtaW5pc3RyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1hcnlCZW5lZmljaWFyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWFyeUNhcmVQcm92aWRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpY2VDaGVja1NoaXBUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWFyeUNvbnRyb2xQb2ludExvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltYXJ5SGVhbHRoQ2FyZVByb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltYXJ5SW5zdXJlZE9yU3Vic2NyaWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWFyeUludGVyZXhjaGFuZ2VDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltYXJ5SW50ZXJuYXRpb25hbFRlbGVjb21DYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltYXJ5SW50cmEtTEFUQUNhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1hcnlJbnZlbnRvcnlDb250cm9sQWN0aXZpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1hcnlPd25lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWFyeVBheWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltYXJ5UGh5c2ljaWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltYXJ5UmVzaWRlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltYXJ5U3VwcG9ydE9yZ2FuaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWFyeVN1cmdlb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1hcnlUYXhwYXllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWVDb250cmFjdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmluY2lwYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW5jaXBhbEJvcnJvd2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmluY2lwYWxFeGVjdXRpdmVPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW5jaXBhbFBlcnNvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbnRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JCYXNlSnVyaXNkaWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvckluY29ycmVjdEluc3VyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW9ySW5zdXJhbmNlQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JUaXRsZUV2aWRlbmNlSG9sZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcml2YXRlUHJlLUtFZHVjYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaXZhdGVTY2hvb2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb0Jvbm9BdHRvcm5leSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvY2Vzc29yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9jdXJlbWVudFJlc3BvbnNpYmlsaXR5Rm9yT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y2VEZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWNlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdGlvbk1hbmFnZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3RQb3NpdGlvbkhvbGRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdFNlcnZpY2VzQW5kUmVwYWlyc0NlbnRyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZmVzc2lvbmFsT3JnYW5pemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0Q29vcmRpbmF0aW9uT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0TWFuYWdlbWVudE9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdE1hbmFnZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2plY3ROYW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0UHJvcGVydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3BlcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9wZXJ0eU9yQnVpbGRpbmdNYW5hZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9wb3NlZEluc3VyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3Bvc2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9TZUNvdW5zZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3RvdHlwZVN1cHBsaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm92aWRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHN5Y2hpYXRyaWNDaGlsZE9yQWRvbGVzY2VudFNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQc3ljaGlhdHJpY0NvbnN1bHRhdGlvbi1MaWFpc29uU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBzeWNoaWF0cmljRWR1Y2F0aW9uU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBzeWNoaWF0cmljRW1lcmdlbmN5U2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBzeWNoaWF0cmljRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBzeWNoaWF0cmljR2VyaWF0cmljU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBzeWNoaWF0cmljSGVhbHRoRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBzeWNoaWF0cmljSW5wYXRpZW50VW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHN5Y2hpYXRyaWNPdXRwYXRpZW50U2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBzeWNoaWF0cmljUGFydGlhbEhvc3BpdGFsaXphdGlvblByb2dyYW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBzeWNoaWF0cmlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHN5Y2hvbG9naXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdWJsaWNBbHRlcm5hdGl2ZVNjaG9vbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVibGljSGVhbHRoU2VydmljZUZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdWJsaWNIZWFsdGhTZXJ2aWNlSW5kaWFuU2VydmljZUZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdWJsaWNvclByaXZhdGVPcmdhbml6YXRpb25Gb3JUaGVEaXNhYmxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVibGljUHJlLUtFZHVjYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1YmxpY1NjaG9vbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVibGlzaGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdW1wZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlZENvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlcnNEZXBhcnRtZW50QnV5ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlU2VydmljZVByb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFsaWZ5aW5nT2ZmaWNlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGl0eUNvbnRyb2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1b3RhdGlvblJlcXVlc3RpbmdQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFkaW9hY3RpdmVJbXBsYW50c1VuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhZGlvQ29udHJvbFN0YXRpb25Mb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFkaW9TdGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbHJvYWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhdGluZ09yZ2FuaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWlwdE1ldGVyTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpcHRab25lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXZlZEZyb20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXZlck1hbmFnZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmVyT2ZDaGVxdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmVyT2ZGdW5kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2ZXJzQ29ycmVzcG9uZGVudEJhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmVyU2l0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2ZXJzU3ViLUVudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2aW5nQmFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2aW5nQ29tcGFueSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2aW5nRmFjaWxpdHlTY2hlZHVsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmluZ0ZpbmFuY2lhbEluc3RpdHV0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXZpbmdMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2aW5nUG9pbnRGb3JDdXN0b21lclNhbXBsZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmluZ1N1Yi1Mb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjaXBpZW50T2ZDaXZpbG9yTGVnYWxMaWFiaWxpdHlQYXltZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNsYW1hdGlvbkNlbnRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjb3JkLUtlZXBpbmdBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNvdmVyeVJvb20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY3JlYXRpb25hbFRoZXJhcHlTZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZlcmVuY2VzRW1wbG95ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVycmFsUHJvdmlkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVycmluZ0hlYWx0aENhcmVQcm92aWRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJyaW5nUHJvdmlkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmluZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZpbmVyeU9wZXJhdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZ1c2FsUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaW9uYWxPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2lzdGVyZWRCdXNpbmVzc05hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2lzdGVyZWRJbnZlc3RtZW50QWR2aXNvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaXN0ZXJlZE9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaXN0ZXJlZE93bmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RlcmVkUHJpbmNpcGFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RlcmluZ05vbnBhcmVudFBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RlcmluZ1BhcmVudFBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RlcmluZ1BhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RyYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2lzdHJhdGlvblRyaWJ1bmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWd1bGFyRGVhbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWd1bGF0b3J5U3RhdGVEaXN0cmljdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVndWxhdG9yeVN0YXRlRW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWhhYmlsaXRhdGlvbkZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWhhYmlsaXRhdGlvbklucGF0aWVudFVuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlaGFiaWxpdGF0aW9uT3V0cGF0aWVudFNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWltYnVyc2luZ0JhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlaW5zdXJhbmNlSW50ZXJtZWRpYXJ5T3JCcm9rZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlaW5zdXJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGVhc2VEcmF5bWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxlYXNlVG9QYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVtaXR0aW5nQmFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVtaXRUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVuZGVyaW5nUHJvdmlkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbnRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVudFBheW9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBhaXJpbmdPdXRsZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGFpck9yUmVmdXJiaXNoTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGxhY2luZ01hbnVmYWN0dXJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcG9ydGluZ0NhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcG9ydGluZ0NhcnJpZXJzTm9taW5hdGVkQWdlbnRPclJlcHJlc2VudGF0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBvcnRpbmdMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0aW5nT2ZmaWNlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwcmVzZW50YXRpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcHJvZHVjdGl2ZUhlYWx0aFNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1ZXN0ZWRMZW5kZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVlc3RvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzYWxlQ3VzdG9tZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2FsZURlYWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzZWFyY2hJbnN0aXR1dGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2Vydm9pciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzaWRlbmNlT3JEb21pY2lsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzaWRlbmN5SW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2lkZW50QmVuZWZpY2lhcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2lkZW50SW5zdHJ1Y3RpbmdQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzcGlyYXRvcnlUaGVyYXB5U2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3BpdGVDYXJlRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3BvbnNpYmxlRXhoaWJpdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNwb25zaWJsZUdvdmVybm1lbnRBZ2VuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3BvbnNpYmxlSW5zdGFsbGF0aW9uRGVzdGluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3BvbnNpYmxlSW5zdGFsbGF0aW9uT3JpZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNwb25zaWJsZVBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXRhaWxBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXRhaWxQaGFybWFjeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0cm9jZXNzaW9uYWlyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0dXJuZWRUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm9hZENhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvdXRpbmdQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm91dGluZ1BvaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb3lhbHR5T3duZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJ1cmFsSGVhbHRoQ2xpbmljIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWxlc0Fzc2lzdGFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FsZXNPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbGVzcGVyc29uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWxlc1Jlc3BvbnNpYmlsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWx2YWdlQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FtcGxlc1RvQmVSZXR1cm5lZFRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYW1wbGluZ0xvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTY2hvb2wtQmFzZWRTZXJ2aWNlUHJvdmlkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjaG9vbERpc3RyaWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTQ29ycG9yYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjcmVlbmluZ1BvaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWFsaW5nQ29tcGFueSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kYXJ5SW52ZW50b3J5Q29udHJvbEFjdGl2aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRhcnlMb2NhdGlvbkFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY29uZGFyeVBheWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRhcnlUYXhwYXllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kYXJ5V2FycmFudGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRDb250YWN0T3JnYW5pemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRIb21lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRMZXZlbFBhcmVudENvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY3JldGFyaWF0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWN0aW9uOEFQcm9ncmFtUGFydGljaXBhbnRGaXJtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWN1cmVkUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY3VyZWRQYXJ0eUNvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY3VyZWRQYXJ0eUluZGl2aWR1YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGZJbnN1cmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGxlckFzT2ZmaWNpYWxseVJlZ2lzdGVyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGxlcnNBZ2VudE9yUmVwcmVzZW50YXRpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGxlcnNGaW5hbmNpYWxJbnN0aXR1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VsbGluZ0FnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxsaW5nT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxsaW5nUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbmRlck9mRnVuZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbmRlcnNDb3JyZXNwb25kZW50QmFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VuaW9yTWVtYmVyc2hpcFByb2dyYW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VCdXJlYXUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZU1hbmFnZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VPcmdhbml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VQZXJmb3JtYW5jZVNpdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VQZXJmb3JtZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VQcm92aWRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZVJlcXVlc3RlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZVN1cHBsaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNpbmdBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljaW5nQnJva2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNpbmdEZWFsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2luZ09yZ2FuaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hhcmVkU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hhcmVob2xkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoZWx0ZXJlZFdvcmtzaG9wIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwRnJvbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBlcnNBc3NvY2lhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBpbmdMaW5lU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBpbmdTY2hlZHVsZUlzc3VlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcFRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaG93aW5nQWdlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpYmxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpZ25hdG9yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2lnbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaWduaWZpY2FudE90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaW5nbGVQaG90b25FbWlzc2lvbkNvbXB1dGVyaXplZFRvbW9ncmFwaHlVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaXRlT3BlcmF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNraWxsZWROdXJzaW5nRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNraWxsZWROdXJzaW5nb3JPdGhlckxvbmctVGVybUNhcmVVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTa2lsbGVkTnVyc2luZ1NlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbGF1Z2h0ZXJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2xvdENoYXJ0ZXJQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU21hbGxCYXNlU3RhdGlvbkxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbWFsbEJ1c2luZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbWFsbENvbnRyb2xTdGF0aW9uTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNtYWxsRGlzYWR2YW50YWdlZEJ1c2luZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb2NpYWxseURpc2FkdmFudGFnZWRCdXNpbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29jaWFsbHlEaXNhZHZhbnRhZ2VkSW5kaXZpZHVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29jaWFsbHlJbnN1cmVkUGVyc29uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb2NpYWxTZWN1cml0aWVzQ29sbGVjdG9yc09mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29jaWV0eU9mUHJvcGVydHlJbmZvcm1hdGlvbkNvbXBpbGVyc0FuZEFuYWx5c3RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb2xkVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvbGRUb0FuZFNoaXBUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29sZFRvSWZEaWZmZXJlbnRGcm9tQmlsbFRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb2xlUHJvcHJpZXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU291cmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb3VyY2VNZXRlckxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb3VyY2VPZkluZm9ybWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb3VyY2VQYXJ0eU9mSW5mb3JtYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsQ291bnNlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbGl6ZWRNb2JpbGVSYWRpb1NlcnZpY2VMaWNlbnNlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbGl6ZWRPdXRwYXRpZW50UHJvZ3JhbUZvckFJRFNPckFSQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lmaWVkUmVwb3NpdG9yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlZWNoVGhlcmFweVNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcG9ydHNNZWRpY2luZUNsaW5pY09yU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwb3VzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BvdXNlSW5zdXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3B1ZENvbnRyYWN0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZUNoYXJ0ZXJlZEZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZURpdmlzaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGVhbXNoaXBDb21wYW55Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9ja2hvbGRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvcmFnZUFyZWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b3JhZ2VGYWNpbGl0eWF0RGVzdGluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b3JhZ2VGYWNpbGl0eUF0T3JpZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9yZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvcmVDbGFzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvcmVHcm91cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvcmVLZWVwZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b3JlTWFuYWdlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3R1ZGVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3R1ZHlTdWJtaXR0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1Yi1BY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJjb250cmFjdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJjb250cmFjdE9yQ29nbml6YW50U2VjdXJpdHlPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YmNvbnRyYWN0b3ItTm9taW5hdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJjb250cmFjdG9yV2l0aERpcmVjdFBheW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1Yi1FbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1Ymdyb3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJqZWN0T2ZJbnF1aXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJqZWN0UHJvcGVydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1Ym1pdHRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VibWl0dGVyT2ZTYW1wbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1Yi1PZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnNjcmliZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnNjcmliZXJzRW1wbG95ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnNjcmliZXJzU2Nob29sIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJzZXF1ZW50T3duZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1Yi1TZXJ2aWNlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3Vic2lkaWFyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3Vic2lkaWFyeURpdmlzaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJzdGl0dXRlU3VwcGxpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1Y2Nlc3NmdWxKb2JBcHBsaWNhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cGVydmlzaW5nSGVhbHRoQ2FyZVByb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBlcnZpc2luZ1BoeXNpY2lhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwZXJ2aXNvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwZXJ2aXNvcnlBcHByYWlzZXJOYW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbGllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxpZXJPck1hbnVmYWN0dXJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxpZXJzQ29ycG9yYXRlT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbGllcldvcmtUZWFtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbHlTb3VyY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBvcnRpbmdQZXJzb25uZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBvcnRQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VyZXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJldHlGb3JBZGRpdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cmV0eUZvckFudGlkdW1waW5nT3JDb3VudGVydmFpbGluZ0R1dHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cmZhY2VEaXNjaGFyZ2VBZ2VuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cmZhY2VNYW5hZ2VtZW50RW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJnZW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJwbHVzRGVhbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJ2ZXlvci1Qb2Zlc3Npb25hbFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJ2ZXlvclF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJ2ZXlvclRvcG9ncmFwaGljYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN5c3RlbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFua0Zhcm0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhbmtGYXJtT3duZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhcmlmZklzc3VlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4QWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4QXV0aG9yaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhDb2xsZWN0b3JzT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhFeGVtcHRPcmdhbml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlYW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlY2huaWNhbE9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVsZXBob25lQW5zd2VyaW5nU2VydmljZUJ1cmVhdSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVuYW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZW5hbnRNYW5hZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZW5kZXJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVybWluYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcm1pbmFsTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcm1pbmFsT3BlcmF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcnRpYXJ5UGF5ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlc3RpbmdMYWJvcmF0b3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXN0aW5nU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVzdFNwb25zb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoZWF0ZXJDaXJjdWl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaGVhdHJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaGVyYXBldXRpY1JhZGlvaXNvdG9wZUZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaGlyZFBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaGlyZFBhcnR5QWRtaW5pc3RyYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhpcmRQYXJ0eUludmVzdG1lbnRBZHZpc29yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaGlyZFBhcnR5TWFya2V0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaXJkUGFydHlSZXByaWNpbmdPcmdhbml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaXJkUGFydHlSZXByaWNpbmdQcmVmZXJyZWRQcm92aWRlck9yZ2FuaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhpcmRQYXJ0eVJldmlld2luZ09yZ2FuaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhpcmRQYXJ0eVJldmlld2luZ1ByZWZlcnJlZFByb3ZpZGVyT3JnYW5pemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaXRsZWhvbGRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGl0bGVJbnN1cmFuY2VTZXJ2aWNlc1Byb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaXRsZVVuZGVyd3JpdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb29saW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb29saW5nRGVzaWduIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb29saW5nRmFicmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvb2xTb3VyY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvcFBhcmVudENvbXBhbnlJblNhbWVDb3VudHJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3dpbmdBZ2VuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWRlbmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhZGVOYW1lU3lub255bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhZGVVbmlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaW5pbmdJbnN0aXR1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNmZXJQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNmZXJyaW5nUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zZmVyVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zaXRBdXRob3JpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zaXRDaGFyZ2VQYXllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNpdEZyZWlnaHRGb3J3YXJkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zaXRQcmluY2lwYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zaXRQcmluY2lwYWxzQWdlbnRPclJlcHJlc2VudGF0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc21pdHRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0YXRpb25PZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydGVyT2ZIYXphcmRvdXNXYXN0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNzaGlwbWVudFBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmF1bWFDZW50ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyZWF0bWVudEZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmliYWxHb3Zlcm5tZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcnVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1c3RlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1c3RlZXNBdHRvcm5leSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1c3RPZmZpY2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcnVzdE9yRXN0YXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUdWJlcmN1bG9zaXNBbmRPVGhlclJlc3BpcmF0b3J5RGlzZWFzZXNGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVWx0aW1hdGVDb25zaWduZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVsdGltYXRlQ3VzdG9tZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVsdGltYXRlUGFyZW50Q29tcGFueSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVWx0aW1hdGVTYW1lQ291bnRyeVBhcmVudENvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVsdHJhc291bmRVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmFzc2lnbmVkQWdlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuZGVyd3JpdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmV4cGVjdGVkSGFuZGxpbmdQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRlZFN0YXRlc0N1c3RvbXNCcm9rZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRlZFN0YXRlc092ZXJzZWFzU2VjdXJpdHlBZG1pbmlzdHJhdGlvbk9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdFByb3BlcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml2ZXJzaXR5LUNvbGxlZ2VPclNjaG9vbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5sb2FkaW5nUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuc2VydmljZWFibGVNYXRlcmlhbENvbnNpZ25lZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVXBzdHJlYW1NZXRlckxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVcHN0cmVhbVBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVU1RydXN0ZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlV0aWxpemF0aW9uTWFuYWdlbWVudE9yZ2FuaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmFjYXRpb25Ib21lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYWxpZGF0aW5nUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhbHVlQWRkZWROZXR3b3JrUHJvdmlkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlaGljbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlaGljbGVDdXN0b2RpYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlaGljbGVTYWx2YWdlQXNzaWdubWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVuZG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXNzZWxNYXN0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlc3NlbE5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZldGVyYW4tT3duZWRCdXNpbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmV0ZXJhbnNBZG1pbmlzdHJhdGlvbkZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXRlcmFuc0FkbWluaXN0cmF0aW9uTG9hbkF1dGhvcml6ZWRTdXBwbGllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmV0ZXJhbnNBZG1pbmlzdHJhdGlvbkxvYW5HdWFyYW50eUF1dGhvcml0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmV0ZXJpbmFyaWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXRlcmluYXJ5SG9zcGl0YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZpY3RpbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmlkZW9EZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWb2x1bnRlZXJTZXJ2aWNlc0RlcGFydG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZvdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYWdlRWFybmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJlaG91c2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhcmVob3VzZURlcG9zaXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FyZWhvdXNlS2VlcGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJyYW50ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhdGVyQW1idWxhbmNlU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhdGVyU3lzdGVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWlnaHRpbmdQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2VsbENhc2luZ0RlcHRoQXV0aG9yaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWxsUGFkQ29uc3RydWN0aW9uQ29udHJhY3RvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2hvbGVzYWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2hvbGx5LU93bmVkU3Vic2lkaWFyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2lubmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaXRoZHJhd2FsUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldpdG5lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldpdG5lc3NGb3JEZWZlbmRhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldpdG5lc3NGb3JQbGFpbnRpZmYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldpdG5lc3NGb3JQcm9zZWN1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29tYW4tT3duZWRCdXNpbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29tYW4tT3duZWRCdXNpbmVzc0xhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb21hbi1Pd25lZEJ1c2luZXNzU21hbGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldvbWVuc0hlYWx0aENlbnRlck9yU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldvcmtzaXRlSGVhbHRoUHJvbW90aW9uRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldvcmtzTWFuYWdlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29ya1RlYW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldyaXRpbmdBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWC1SYXlSYWRpYXRpb25UaGVyYXB5VW5pdCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iT3JkZXJSZWZlcmVuY2VzIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkFjY291bnRDb2RlIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkNvbnRyYWN0UmVmZXJlbmNlcyI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ikxpc3RPZkNvbnRyYWN0Ii8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlF1b3RlUmVmZXJlbmNlIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ik90aGVyT3JkZXJSZWZlcmVuY2VzIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTGlzdE9mUmVmZXJlbmNlQ29kZWQiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iT3JkZXJSZWZlcmVuY2VzIiB0eXBlPSJPcmRlclJlZmVyZW5jZXMiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlJlZmVyZW5jZSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVmTnVtIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJSZWZEYXRlIiB0eXBlPSJ4Y2JsRGF0ZXRpbWUiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlJlZmVyZW5jZSIgdHlwZT0iUmVmZXJlbmNlIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZDb250cmFjdCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iQ29udHJhY3QiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZkNvbnRyYWN0IiB0eXBlPSJMaXN0T2ZDb250cmFjdCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQ29udHJhY3QiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkNvbnRyYWN0SUQiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iQ29udHJhY3RUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IlZhbGlkaXR5RGF0ZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlN5c3RlbUlEIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDb250cmFjdCIgdHlwZT0iQ29udHJhY3QiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IklkZW50aWZpZXIiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iQWdlbmN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSWRlbnQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IklkZW50aWZpZXIiIHR5cGU9IklkZW50aWZpZXIiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkFnZW5jeSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQWdlbmN5Q29kZWQiIHR5cGU9IkFnZW5jeUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkFnZW5jeUNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkFnZW5jeURlc2NyaXB0aW9uIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJDb2RlTGlzdElkZW50aWZpZXJDb2RlZCIgdHlwZT0iQ29kZUxpc3RJZGVudGlmaWVyQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQ29kZUxpc3RJZGVudGlmaWVyQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQWdlbmN5IiB0eXBlPSJBZ2VuY3kiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iQWdlbmN5Q29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFBTVZBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBQkNELVRoZU1pY3JvY29tcHV0ZXJJbmR1c3RyeUFzc29jaWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBQ0dJSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUNPUkQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmVydGlzaW5nSW5kdXN0cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFFQ01BIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBSUhBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJUcmFuc3BvcnRBc3NvY2lhdGlvbk9mQW1lcmljYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxhYmFtYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxhc2thIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbHVtaW51bUFzc29jaWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbWVyaWNhbkFwcGFyZWxNYW51ZmFjdHVyZXJzQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtZXJpY2FuRnVybml0dXJlTWFudWZhY3R1cmVyc0Fzc29jaWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbWVyaWNhbklyb25BbmRTdGVlbEluc3RpdHV0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1lcmljYW5MYW5kVGl0bGVBc3NvY2lhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1lcmljYW5NZWRpY2FsQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtZXJpY2FuUGFwZXJJbnN0aXR1dGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtZXJpY2FuUGV0cm9sZXVtSW5zdGl0dXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBUFdBQW5kT0NTSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1lcmljYW5Tb2NpZXR5Rm9yQXV0b21hdGlvbkluUGhhcm1hY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtZXJpY2FuVGV4dGlsZU1hbnVmYWN0dXJlcnNJbnN0aXR1dGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtZXJpY2FuVHJ1Y2tpbmdBc3NvY2lhdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFOU0lBY2NyZWRpdGVkU3RhbmRhcmRzQ29tbWl0dGVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcml6b25hIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcmthbnNhcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVNNRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzaWduZWRCeUJ1eWVyT3JCdXllcnNBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzaWduZWRCeUNhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2lnbmVkQnlEaXN0cmlidXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzaWduZWRCeU1hbnVmYWN0dXJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzaWduZWRCeU1hcmtldFBsYWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NpZ25lZEJ5TmF0aW9uYWxUcmFkZUFnZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzaWduZWRCeU93bmVyT2ZPcGVyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2lnbmVkQnlQYXJ0eU9yaWdpbmF0aW5nVGhlTWVzc2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzaWduZWRCeVNlbGxlck9yU2VsbGVyc0FnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NpZ25lZEJ5VHJhbnNwb3J0Q29tcGFueSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVNUTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFULUdlbGRhdXNnYWJlYXV0b21hdGVuU2VydmljZUdlc2VsbHNjaGFmdE1CSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVQtQXVzdHJpYW5DdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBVC1BdXN0cmlhblBUVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVQtVmVyYmFuZE9lc3RlcnJlaWNoaXNjaGVyQmFua2VuVW5kQmFua2llcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFVLUFDT1MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFVLUFEQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVUtQUlIVyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVUtQVBDQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVUtQVFJUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVUtQXVzdHJpYW5DdXN0b21zU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVUtRE9IIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBVS1ISUMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFVLUxJRkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFVLU5DQ0giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFVLVJPQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVUtU0FBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBVS1UcmFkZWdhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFXUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVlTQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQkUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJFLUJlbGdpYW5CYW5rZXJzQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJFLUJlbGdpYW5DdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCRS1CZWxnaWFuTWluaXN0cnlPZkZpbmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbGxjb3JlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQklDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb29rSW5kdXN0cnlTeXN0ZW1zQWR2aXNvcnlDb21taXR0ZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSLUJhbmNvQ2VudHJhbERvQnJhemlsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCUi1NQUFuZFJBQUFuZExJTU5FVEFuZFJJTkVUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDQS1DUEEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNBLUNTSU8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbGlmb3JuaWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbGlmb3JuaWFMYW5kVGl0bGVBc3NvY2lhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuYWRpYW5GcmVpZ2h0Q2xhc3NpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcmJpZGVNYW51ZmFjdHVyZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDQS1SZXZlbnVlQ2FuYWRhQ3VzdG9tc0FuZEV4Y2lzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0FTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDQS1TQ0MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNDQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0VDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDRUNER1hJSUlENSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0VDREdYWEkwMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0VDREdYWElCMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0VDREdYWFhJViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0VGSUMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDSC1BZG1pbmlzdHJhdGlvbkZlZGVyYWxlRGVzQ29udHJpYnV0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0gtQXNzb2NpYXRpb25TdWlzc2VDb2RlRGVzQXJ0aWNsZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNILUNhcmJ1cmEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNILUNlbnRyYWxlU3Vpc3NlUG91ckxJbXBvcnRhdGlvbkR1Q2hhcmJvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0gtRGlyZWN0aW9uR2VuZXJhbGVEZXNEb3VhbmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDSC1EaXZpc2lvbkRlc0ltcG9ydGF0aW9uc0V0RXhwb3J0YXRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDSC1FbnRyZXByaXNlRGVzUFRUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDSC1NaW5pc3RyeU9mVGF4YXRpb25DZW50cmFsQ3VzdG9tc0FuZFRheEFkbWluaXN0cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDSC1PZmZpY2VGaWR1Y2lhaXJlRGVzSW1wb3J0YXRldXJzRGVEZW5yZWVzQWxpbWVudGFpcmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDSC1Td2lzc1NlY3VyaXRpZXNDbGVhcmluZ0NvcnBvcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDSC1UZWxla3Vyc0FHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDSURYIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDSUVDQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29kZUFzc2lnbmVkQnlUaGVPcmdhbml6YXRpb25UaGF0SXNUaGVVbHRpbWF0ZURlc3RpbmF0aW9uT2ZUaGVUcmFuc2FjdGlvblNldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ08tRElBTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29sb3JhZG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1hbmRlclJvbWVBaXJEZXZlbG9wbWVudENlbnRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uY29yZEVESUdyb3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25uZWN0aWN1dCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udmVudGlvbnNPblNBREFuZFRyYW5zaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcHBlckFuZEJyYXNzRmFicmljYXRvcnNDb3VuY2lsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDTy1TQkRDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VudHlEZXNpZ25hdG9yQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ1NJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDU0lFeHRlbmRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ1VTSVAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNaIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJERSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iREUtQVJFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJERS1CREkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRFLUJJQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iREUtQlJEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJERS1ESU4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRFLURUQUciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRFLUVESUJBVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVmZW5zZUxvZ2lzdGljc0FnZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iREUtR0RWIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJERS1HZXJtYW5CYW5rZXJzQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRFLUdlcm1hbkN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRFLUdNQkgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGF3YXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50T2ZBaXJGb3JjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudE9mQXJteSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudE9mRGVmZW5zZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudE9mSGVhbHRoQW5kSHVtYW5TZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudE9mSG91c2luZ0FuZFVyYmFuRGV2ZWxvcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydG1lbnRPZkxhYm9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50T2ZUaGVOYXZ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJERS1TaWVtZW5zQUciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRFLVZEQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iREZBUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRElOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXJlY3Rpb25HZW5lcmFsZURlc0RvdWFuZXNFdERyb2l0c0luZGlyZWN0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpY3RPZkNvbHVtYmlhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJESyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iREstRUFOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJESy1NSEEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRLLU5CSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iREstUEJTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEdW5BbmRCcmFkc3RyZWV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFQU4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVkaWJ1aWxkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFZGllbE5vcmRpY0ZvcnVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFRElGSUNFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFRElURVVSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFRElURVgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVFRzciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVJRFgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVsZWN0cmljVXRpbGl0aWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGVjdHJvbmljSW5kdXN0cmllc0Fzc29jaWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFUEEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFU0RYIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFUy1PREVUVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRVMtU3BhbmlzaEN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVVLUVESUZJQ0FTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFVS1FVElTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFVS1ST0ZFUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRkFTTElOQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRkNDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGQ0kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZEQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbEdvdmVybm1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxIaWdod2F5QWRtaW5pc3RyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGSS1BVEEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZJLUZpbm5pc2hDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGSS1UQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRkktVGhlRmlubmlzaEJhbmtlcnNBc3NvY2lhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxvcmlkYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRlIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZSLUFHRiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRlItQXJ2QSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRlItQmFucXVlRGVGcmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZSLUNGT05CIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGUi1DTkFNVFMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZSLURDUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRlItREdJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGUi1FRElGQ0FTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGUi1FRElGUkFOQ0UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZSLUVESVRSQU5TUE9SVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRlItR0FMSUEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZSLUdFTkNPRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRlItSU5TRUUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZSLVJDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0ItQUJJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHQi1BQlRBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHQi1BcnRpY2xlTnVtYmVyQXNzb2NpYXRpb25MaW1pdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHQi1Bc3NvY2lhdGlvbkZvclBheW1lbnRDbGVhcmluZ1NlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHQi1CQUNTTGltaXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0ItQ0hBUFNBbmRUb3duQ2xlYXJpbmdDb21wYW55TGltaXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0ItRkxFRVRORVQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCLUhNQ3VzdG9tc0FuZEV4Y2lzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0ItT0RFVFRFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHQi1UaGVDbGVhcmluZ0hvdXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW9yZ2lhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmFwaGljc0NvbW11bmljYXRpb25zQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdSRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR1ItR3JlZWtDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHU0EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdUSU4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikhhd2FpaSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhbHRoQ2FyZUZpbmFuY2luZ0FkbWluaXN0cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFsdGhJbnN1cmFuY2VBc3NvY2lhdGlvbk9mQW1lcmljYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSEstSG9uZ0tvbmdDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSUFQU08iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklBUkMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklBVEEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklDQU8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklDQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSUNTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJZGFobyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSUUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklFLVJldmVudWVDb21taXNzaW9uZXJzQ3VzdG9tc0FFUHJvamVjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSUwtSXNyYWVsQ3VzdG9tcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSWxsaW5vaXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklNTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5kaWFuYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJDb250YWluZXJJbnRlckZyaWdvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm5hdGlvbmFsQXNzb2NpYXRpb25PZkNvcnBvcmF0aW9uQWRtaW5pc3RyYXRvcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmF0aW9uYWxBc3NvY2lhdGlvbk9mSW5kdXN0cmlhbEFjY2lkZW50Qm9hcmRzQW5kQ29tbWlzc2lvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmF0aW9uYWxTdGFuZGFyZHNPcmdhbml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Iklvd2EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJcm9uQW5kU3RlZWxTdGFuZGFyZHNDb21taXR0ZWVJU00iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklTLUljZWxhbmRDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJU08iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyYW5jZVNlcnZpY2VzT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVQtQXNzb2NpYXppb25lQmFuY2FyaWFJdGFsaWFuYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVQtSXRhbGlhbkN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklULU9ERVRURSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVQtU29jaWVhdGFJbnRlcmJhbmNhcmlhUGVyTEF1dG9tYXppb25lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKYXBhbmVzZVN0YW5kYXJkc0Fzc29jaWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKUC1KYXBhbkN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkpQLU1PVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSlAtTVNBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKUC1OQUNDUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS2Fuc2FzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLZW50dWNreSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhc2luZ0luZHVzdHJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWZlQW5kQW5udWl0eUluZHVzdHJ5Q29tbWl0dGVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMSS1MaWVjaHRlbnN0ZWluQXV0aG9yaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMbG95ZHNSZWdpc3Rlck9mU2hpcHBpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvdWlzaWFuYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTFUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxVLUx1eGVtYm91cmdDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWluZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFudWZhY3R1cmluZ0NvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcnlsYW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXNzYWNodXNldHRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXRlcmlhbFNhZmV0eURhdGFTaGVldFByb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaWNoaWdhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlsaXRhcnlTdGFuZGFyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlubmVzb3RhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaXNzaXNzaXBwaSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlzc291cmkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vbnRhbmEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vcnRnYWdlQmFua2Vyc0Fzc29jaWF0aW9uT2ZBbWVyaWNhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNWS1EYWdhbmdOZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1ZLU1hbGF5c2lhQ2VudHJhbEJhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1ZLU1hbGF5c2lhQ3VzdG9tc0FuZEV4Y2lzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkFDRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkFHUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxBbGNvaG9sQmV2ZXJhZ2VDb250cm9sQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsQXNzb2NpYXRpb25PZkJ1c2luZXNzQW5kRWR1Y2F0aW9uYWxSYWRpbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxCdXNpbmVzc0Zvcm1zQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsQ2VudGVyZm9yU3RhdGVDb3VydHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsQ290dG9uQ291bmNpbE9mQW1lcmljYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxDb3VuY2lsT25Db21wZW5zYXRpb25JbnN1cmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsUmV0YWlsTWVyY2hhbnRzQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsV2hvbGVzYWxlRHJ1Z2dpc3RzQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5BVE8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdHVyYWxHYXNVdGlsaXRpZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5DSUMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5lYnJhc2thIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJORU1BIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXZhZGEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld0hhbXBzaGlyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV3SmVyc2V5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXdNZXhpY28iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld3NwYXBlckFzc29jaWF0aW9uT2ZBbWVyaWNhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXdZb3JrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJORlBBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOSUNCIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOSU9TSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ldGhlcmxhbmRzUmFpbHdheXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5MLUJhbmtHaXJvY2VudHJhbGVCViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkwtQkVBTkVUQlYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5MLUVBTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkwtSW50ZXJwYXlDYXJkcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkwtSW50ZXJwYXlHaXJhYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5MLU5ldGhlcmxhbmRzQ3VzdG9tcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkwtT0RFVFRFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3J3ZWlnaWFuU3RhdGVSYWlsd2F5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTk8tTk9SUFJPIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOTy1Ob3J3ZWdpYW5CYW5rZXJzQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5PLU5vcndlZ2lhbkN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5PLU5vcndlZ2lhbkludGVyYmFua1Jlc2VhcmNoT3JnYW5pemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3J0aEFtZXJpY2EtVGVsZWNvbW11bmljYXRpb25zSW5kdXN0cnlGb3J1bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9ydGhDYXJvbGluYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9ydGhEYWtvdGEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5UUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTlotTmV3WmVhbGFuZEN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9ERVRURSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2ZmaWNlT2ZNYW5hZ2VtZW50QW5kQnVkZ2V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZpY2VPZldvcmtlcnNDb21wZW5zYXRpb25Qcm9ncmFtcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2ZmaWNlUHJvZHVjdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9oaW8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9rbGFob21hIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcHRpY2FsSW5kdXN0cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yZWdvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT1NIQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVubnN5bHZhbmlhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZW5uc3lsdmFuaWFDb3VydHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUFQtQ0IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBULVBvcnR1Z3Vlc2VDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQVC1TSUJTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWFsRXN0YXRlSW5mb3JtYXRpb25JbmR1c3RyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmhvZGVJc2xhbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJJTkVUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUlUtQklDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSVS1TRlQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNBRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0EtU2F1ZGlBcmFiaWFDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0UtQ2VudHJhbEJhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNFLU9ERVRURSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0UtU3ZlbnNrYUJhbmtmb2VyZW5pbmdlbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0UtU3dlZGlzaEN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwZXJzQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNJU0FDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU291dGhDYXJvbGluYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU291dGhEYWtvdGEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlQWdlbmN5QXNzaWduZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0dWRlbnRMb2FuR3VhcmFudG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTV0lGVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVEFMQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVsZWNvbW11bmljYXRpb25zSW5kdXN0cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbXBvcmFyeUhlbHBJbmR1c3RyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVubmVzc2VlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXhhcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGV4YXNMYW5kVGl0bGVBc3NvY2lhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGV4dGlsZURpc3RyaWJ1dG9yc0Fzc29jaWF0aW9uSW5jIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJURENDLUVESUEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRXLUNoaW5lc2VUYWlwZWlDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUVy1UcmFkZS12YW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVDUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVUlDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVU5FQ0UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVOQ1RBRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdGVkU3RhdGVzQ291cnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0ZWRTdGF0ZXNNYXJpbmVDb3JwcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdGVkU3RhdGVzTnVjbGVhclJlZ3VsYXRvcnlDb21taXNzaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUFUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLUFBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1BQVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLUFCQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtQUlBRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtQWlyVHJhbnNwb3J0QXNzb2NpYXRpb25PZkFtZXJpY2EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLUFJU0kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLUFtZXJpY2FuUGV0cm9sZXVtSW5zdGl0dXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1BTlNJQVNDWDEyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1BUEkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLUFTVE0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLUFURiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtQkFURiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtQlhBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1DSElQUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtQ0lEWCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtQ00iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLUNPUEFTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1EQW5kQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtRENJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1ERUEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLURISFMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLURJU0EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLURJU0NVUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtRExNU08iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLURPQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtRE9EIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1ET0RBQUMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLURPTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtRE9UIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1EU0FBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1FSUEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLUZDQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtRkRBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1GSVBTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1GTUMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLUZXUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtR1NBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1IQklDQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtSEkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLUhMNyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtSVNBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1NQVJBRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtTkFCQ0EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLU5BSUMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTTmF0aW9uYWxDZW50ZXJGb3JIZWFsdGhTdGF0aXN0aWNzQ29tbWlzc2lvbk9mUHJvZmVzc2lvbmFsQW5kSG9zcGl0YWxBY3Rpdml0aWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1OYXRpb25hbE1vdG9yRnJlaWdodENsYXNzaWZpY2F0aW9uQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLU5hdGlvbmFsUmV0YWlsRmVkZXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtTkNDTUEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLU5JU1QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLU5SQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtTldEQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtT0RUQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtT0ZBQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtT01CIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1TdGFuZGFyZENhcnJpZXJBbHBoYUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLVREQ0MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLVVDQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtVU4tU1BTQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtVU9QIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1VU0NlbnN1c0J1cmVhdSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtVVNDdXN0b21zU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtVVNQUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtVkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLVZJQ1MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLVdTU0EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlV0YWgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlV0aWxpdHlJbmR1c3RyeUdyb3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXJtb250Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWSUNTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWaXJnaW5pYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FzaGluZ3RvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2VzdFZpcmdpbmlhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXSE1JUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2lzY29uc2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXeW9taW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXJlY3RvckdlbmVyYWxPZkNhbmFkYSIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJDb2RlTGlzdElkZW50aWZpZXJDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjZXB0YW5jZVNpdGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NpZGVudFBhcmFtZXRlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY29yZEV1cm9wZWVuUmVsYXRpZkF1VHJhbnNwb3J0SW50ZXJuYXRpb25hbERlc01hcmNoYW5kaXNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudEFuYWx5c2lzQ29kZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRDaGFyYWN0ZXJpc3RpY3NDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50aW5nSW5mb3JtYXRpb25JZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50UmF0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50UmVsYXRpb25zaGlwVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNxdWlzaXRpb25BZHZpY2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3F1aXNpdGlvbk1ldGhvZENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjcXVpc2l0aW9uTWV0aG9kU3VmZml4Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0aXZpdGVQcmluY2lwYWxlRXhlcmNlZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdGl2aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZG1pdHRpbmdEaWFnbm9zaXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmVyc2VFdmVudENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmVyc2VFdmVudE91dGNvbWVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZpY2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ2VudFN0YXR1c0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpZFR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJDb21tb2RpdHlBbmRTcGVjaWFsSGFuZGxpbmdDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJjcmFmdE1pc3Npb25EZXNpZ25TZXJpZXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJEaW1lbnNpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJwb3J0T3JDaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJwb3J0VGVybWluYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpclRlcm1pbmFsSWRlbnRpZmllckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbGVnYXRpb25UeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxsUGF0aWVudERpYWdub3Npc1JlbGF0ZWRHcm91cHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbFBhdGllbnRSZWZpbmVkRGlhZ25vc2lzUmVsYXRlZEdyb3VwcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWx0ZXJhdGlvbkxvb2t1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1idWxhdG9yeVBhdGllbnRHcm91cHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtZW5kbWVudENvZGUtQ3VzdG9tcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1lcmljYW5Qc3ljaGlhdHJpY0Fzc29jaWF0aW9uRGlhZ25vc3RpY1N0YXRpc3RpY2FsTWFudWFsT2ZNZW50YWxEaXNvcmRlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtZXJpY2FuU29jaWV0eUZvclRlc3RpbmdBbmRNYXRlcmlhbHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFudGVubmFQb2xhcml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFudGVubmFTdHJ1Y3R1cmVUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhbnRDbGFzc2lmaWNhdGlvblR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2FudFR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2F0aW9uQWNrbm93bGVkZ2VtZW50QW5kRXJyb3JDb2RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYXRpb25FcnJvckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2F0aW9uUXVlc3Rpb25JZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhdGlvblR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFyZWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFyZWFPZk9wZXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJyZXN0UmVhc29uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcnRpY2xlU3RhdHVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NldERldGFpbHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2V0UmVjdXJyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzZXRTdGF0dXNPclRyYW5zYWN0aW9uUmVwb3J0aW5nQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzZXRUcmFuc2ZlclN0YXR1c0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2V0VHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzaWduZWRCeVJlY2VpdmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NpZ25lZEJ5U2VuZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NvY2lhdGlvbk9mQW1lcmljYW5SYWlscm9hZHNEZXByZXNjcmlwdGlvbkRpc3RyaWJ1dGlvbkxpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc29jaWF0aW9uT2ZBbWVyaWNhblJhaWxyb2Fkc0RlcHJlc2NyaXB0aW9uRXhjZXB0aW9uTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzb2NpYXRpb25PZkFtZXJpY2FuUmFpbHJvYWRzUmF0ZUVkaU5ldHdvcmtFcnJvckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc29jaWF0aW9uT2ZBbWVyaWNhblJhaWxyb2Fkc1N0YW5kYXJkVHJhbnNwb3J0YXRpb25Db21tb2RpdHlDb2RlRGVzY3JpcHRpb25RdWFsaWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc29jaWF0aW9uT2ZBbWVyaWNhblJhaWxyb2Fkc1N0YW5kYXJkVHJhbnNwb3J0YXRpb25Db21tb2RpdHlDb2RlTWFzdGVyRGVzY3JpcHRpb25JbmZvcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzb2NpYXRpb25PZkFtZXJpY2FuUmFpbHJvYWRzU3dpdGNoUmVsZWFzZUNvZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3N1cmVkRGVsaXZlcnlJbmRpY2F0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhvcml6YXRpb25UeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRvbWF0ZWRDbGVhcmluZ0hvdXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRvbWF0ZWREYXRhUHJvY2Vzc2luZ0VxdWlwbWVudElkZW50aWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXdhcmRTb3VyY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbGFuY2VUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFua0FkbWluaXN0cmF0aW9uSW5zdGl0dXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYW5rQnJhbmNoU29ydGluZ0lkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYW5rSWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbmtTZWN1cml0aWVzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFzaXNPZkp1cmlzZGljdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbmVmaWNpYXJ5VHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlkUmVqZWN0aW9uUmVhc29uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsZWRPZmZpY2VJbmRpY2F0b3JDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsaW5nQWR2aWNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbGluZ1N0YXR1c0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxPZkxhZGluZ0NsYXVzZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvYXJkT2ZJbnNwZWN0aW9uQW5kU3VydmV5UGFydExvb2t1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9hcmRPZkluc3BlY3Rpb25BbmRTdXJ2ZXlSZXNwb25zaWJpbGl0eUxvb2t1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9hcmRPZkluc3BlY3Rpb25BbmRTdXJ2ZXlTaGlwTG9va3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc0FjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1c2luZXNzQ2hhbmdlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NDbGFzc2lmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NDcmVkaXRSYXRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1c2luZXNzRW50aXR5RmlsaW5nRGV0YWlsQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NFbnRpdHlGaWxpbmdMb2NhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1c2luZXNzRW50aXR5RmlsaW5nUmVwb3J0VHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1c2luZXNzRW50aXR5RmlsaW5nU2VjdXJpdGllc0luZm9ybWF0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NFbnRpdHlGaWxpbmdTdGF0dXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc0VudGl0eUZpbmFuY2lhbEluZm9ybWF0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NFbnRpdHlTdGF0dXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc0Z1bmN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc0xlZ2FsU3RydWN0dXJlVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NTaXplQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYWxsU2lnbkRpcmVjdG9yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuYWRpYW5JbnRlckVkaSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuY2VsbGF0aW9uUmVhc29uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJyaWVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzZURlc2lnbmF0b3JOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2VPcmlnaW5Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXNoRGlzY291bnRTdGlwdWxhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhdXNlTG9va3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXVzZU9mSW5qdXJ5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2F1c2VPZkxvc3NDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZWlsaW5nVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmljYXRpb25SZXF1aXJlbWVudHNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNpdGl6ZW5JZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2l0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2l0eVN1YmRpdmlzaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGFpbVBheW1lbnRSZW1hcmtDb2RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xhaW1UeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGFzc09mT3BlcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGFzc09mUGl0Y2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsYXVzZVN0YXR1c1R5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsZWFyaW5nQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xlYXJpbmdIb3VzZUF1dG9tYXRlZFBheW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsZWFyaW5nSG91c2VJbnRlcmJhbmtQYXltZW50U3lzdGVtUGFydGljaXBhbnRzSWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsZWFyaW5nSG91c2VJbnRlcmJhbmtQYXltZW50U3lzdGVtVW5pdmVyc2FsSWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvYXN0RGVzaWduYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2duaXphbmNlU3ltYm9sIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsaXNpb25JbmR1c3RyeUVsZWN0cm9uaWNDb21tZXJjZUFzc29jaWF0aW9uLUluc3BlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbGxpc2lvbkluZHVzdHJ5RWxlY3Ryb25pY0NvbW1lcmNlQXNzb2NpYXRpb24tTG9zc0NhdGVnb3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsaXNpb25JbmR1c3RyeUVsZWN0cm9uaWNDb21tZXJjZUFzc29jaWF0aW9uLVBvaW50c09mSW1wYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsaXNpb25JbmR1c3RyeUVsZWN0cm9uaWNDb21tZXJjZUFzc29jaWF0aW9uLVByb2ZpbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbWJpdGVybXMxOTkwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tZXJjaWFsQW5kR292ZXJubWVudEVudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWVyY2lhbERyaXZlcnNMaWNlbnNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tZXJjaWFsVmVoaWNsZU9wZXJhdGlvbnNDb21tb2RpdHlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tZXJjaWFsVmVoaWNsZU9wZXJhdGlvbnNIYXphcmRvdXNNYXRlcmlhbENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1lcmNpYWxWZWhpY2xlT3BlcmF0aW9uc0luc3VyYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWVyY2lhbFZlaGljbGVPcGVyYXRpb25zU2FmZXR5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWVyY2lhbFZlaGljbGVPcGVyYXRpb25zU3RhdHVzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWVyY2lhbFZlaGljbGVSZWdpc3RyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1lcmNpYWxWZWhpY2xlVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tZXJjaWFsVmVoaWNsZVRpdGxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tZXJjaWFsVmVoaWNsZVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1vZGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbXVuaWNhdGlvbnNSb3V0aW5nSWRlbnRpZmllckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBlbnNhdGlvblR5cGVDb2RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGV0aXRpdmVDaGFyYWN0ZXJpc3RpY3NDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wbGFpbnRSZXF1ZXN0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGxpYW5jZVJldmlld0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbmNsdXNpb25FdmFsdWF0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uZGl0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25kaXRpb25EZXRhaWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNpZ25lZXNQcmVtaXNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbm9yc1ByZW1pc2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zb2xpZGF0aW9uQW5kQ29udGFpbmVyaXphdGlvblBvaW50Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc29saWRhdGlvbkRldGFpbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc3RydWN0aW9uTWF0ZXJpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhY3RvckFsZXJ0TGlzdFJlYXNvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFjdFN0YXR1c0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lckFuZFJvbGwtT25PclJvbGwtT2ZmTnVtYmVyQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyVGVybWluYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRlbnRJbmRpY2F0b3JDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250aW5lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdENsb3NlLU91dEdyb3VwQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3REZWxpdmVyeURhdGVSZXZpc2lvbkFnZW50Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RGdW5kUmVwb3J0aW5nVHJhbnNhY3Rpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdG9yQWxlcnRMaXN0U3RhdHVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdG9yUmV2aWV3TGlzdFN0YXR1cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RQYXltZW50RGVkdWN0aW9uT3JDb2xsZWN0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RQYXltZW50TGluZUl0ZW1TdGF0dXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFNoaXBtZW50QWR2aWNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJvbGxlZEludmVudG9yeUl0ZW1Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cm9sVW5pdERlc2lnbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyb3ZlcnRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb252aWN0aW9uT2ZmZW5zZVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvb3BlcmF0aXZlTG9naXN0aWNzUHJvZ3JhbVN1cHBvcnRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3Jwb3JhdGVGaW5hbmNpYWxGaWxpbmdDcml0ZXJpYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ycG9yYXRlU3RhdGVtZW50RmlsaW5nQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ycmVjdGlvbk9yQ2hhbmdlRm9yU3RvcmFnZUl0ZW1SZWNvcmRzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291bnRyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291bnRyeUFuZEFjdGl2aXR5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291bnRyeUNvZGUtRmluYW5jZUFuZEFjcXVpc2l0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VudHJ5U3ViLUVudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291bnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VudHlEZXNpZ25hdG9yQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291cG9uQWRqdXN0bWVudFJlYXNvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdXJ0QXBwZWFyYW5jZVR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VydENhc2VTdGF0dXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VydERpc3Bvc2l0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291cnREb2N1bWVudFR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VydElzc3VlZFdhcnJhbnRUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291cnRPZkxhd0V2ZW50VHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291cnRPZkxhd1R5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdXJ0UGFydHlTdGF0dXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdXJ0UGxlYWRpbmdUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ292ZXJhZ2VDb2RlTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ292ZXJhZ2VNb2RpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3BhLUNhbmFkaWFuUGF5bWVudHNBc3NvY2lhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JpbWluYWxDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyaW1pbmFsQ2hhcmdlR3JhZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyaXRpY2FsaXR5RGVzaWduYXRvckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1aXNpbmVUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudEFzc2V0RGV0YWlscyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudERlbnRhbFRlcm1pbm9sb2d5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudExpYWJpbGl0eURldGFpbHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnJlbnRQcm9jZWR1cmFsVGVybWlub2xvZ3lDb2RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJNYWludGVuYW5jZUxldmVsTG9va3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lcldpdGhpbkNvdW50cnlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21pemVkTm90aWNlVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNBcmVhT2ZUcmFuc2FjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0RlY2xhcmF0aW9uVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0RvbWVzdGljUG9ydExvY2F0aW9uQ29kZXMtVVNTY2hlZHVsZUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNGb3JlaWduUG9ydExvY2F0aW9uQ29kZXMtVVNTY2hlZHVsZUsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNJbmRpY2F0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNJbnNwZWN0aW9uVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc09mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc1ByZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNQcm9jZWR1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNSZWxlYXNlTm90aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zU2ltcGxpZmllZFByb2NlZHVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc1NwZWNpYWxDb2RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc1N0YXR1c09mR29vZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNUcmFuc2l0R3VhcmFudGVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zVHJhbnNpdFR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNWYWx1YXRpb25NZXRob2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNXYXJlaG91c2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhbmdlcm91c0dvb2RzUGFja2luZ1R5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGFDYXRlZ29yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZVNoaXBwZWRPclJlY2VpdmVkQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVidG9yQnVzaW5lc3NUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVidG9yVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlZmVuZGFudFBsZWFUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVmZW5zZVByaW9yaXRpZXNBbmRBbGxvY2F0aW9uc1N5c3RlbUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlZmVycmFsTG9va3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWZpY2llbmN5Q2F1c2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlZmljaWVuY3lJbmRpY2F0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGlucXVlbmN5SW5kaWNhdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeVNvdXJjZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5VGVybUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbWFuZENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbWlsaXRhcml6YXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50T2ZEZWZlbnNlSWRlbnRpZmljYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXZpY2VBdmFpbGFiaWxpdHlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXZpY2VFdmFsdWF0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGV2aWNlRXZlbnRQcm9ibGVtQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGV2aWNlT3BlcmF0b3JUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGV2aWNlU3RhdHVzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGV2aWNlVXNhZ2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaWFnbm9zaXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpYWdub3Npc0VuY291bnRlcmVkRHVyaW5nRXhhbWluYXRpb25BbmRJbnZlc3RpZ2F0aW9uT2ZJbmRpdmlkdWFsc0FuZFBvcHVsYXRpb25zQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlhZ25vc2lzUmVsYXRlZEdyb3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaWFnbm9zdGljQW5kU3RhdGlzdGljYWxNYW51YWxPZk1lbnRhbERpc29yZGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlyZWN0TnVtZXJpY2FsQ29udHJvbFN5c3RlbUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2J1cnNlbWVudFN0YXR1c0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2NyZXBhbmN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNjcmVwYW5jeUFkdmljZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2NyZXBhbmN5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY3JlcGFuY3lJbmRpY2F0b3JDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNjcmVwYW5jeVN0YXR1c09yRGlzcG9zaXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNwb3NhbEF1dGhvcml0eUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3Bvc2FsQ29uZGl0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpYnV0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRJZGVudGlmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50UmVxdWVzdGVkQnlDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2RhYWMtRGVwYXJ0bWVudE9mRGVmZW5zZUFjdGl2aXR5QWRkcmVzc0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvbWVzdGljTGluZU9mQnVzaW5lc3NDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb3NlRm9ybUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyaXZlclBhcmFtZXRlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyaXZlcnNMaWNlbnNlV2l0aGRyYXdhbEJhc2lzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcml2ZXJzTGljZW5zZVdpdGhkcmF3YWxEdWVQcm9jZXNzU3RhdHVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcml2ZXJzTGljZW5zZVdpdGhkcmF3YWxFeHRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyaXZlcnNMaWNlbnNlV2l0aGRyYXdhbFJlYXNvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJpdmVyc0xpY2Vuc2VXaXRoZHJhd2FsVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJ1Z0RldGFpbENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRydWdTdGF0dXNBZHZlcnNlRXZlbnRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcnVnU3RhdHVzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVtcGluZ09yQ291bnRlcnZhaWxpbmdBc3Nlc3NtZW50TWV0aG9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEdW1waW5nU3BlY2lmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVuQW5kQnJhZHN0cmVldENhbmFkYXM4RGlnaXRTdGFuZGFyZEluZHVzdHJpYWxDbGFzc2lmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1bnMtRHVuQW5kQnJhZHN0cmVldFBsdXM0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEdW5zU3RhbmRhcmRJbmR1c3RyaWFsQ2xhc3NpZmljYXRpb24yUGx1czJEdW5BbmRCcmFkc3RyZWV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEdXR5VGF4T3JGZWVQYXltZW50TWV0aG9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEeW5hbWljR2VuZXJhdG9yU2V0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHluYW1pY0xvY29tb3RpdmVUYWdDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFZGlyYS1JZC1FZGlSZWdpc3RyYXRpb25BdXRob3JpdHlJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWRpdEVycm9yQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWR1Y2F0aW9uYWxJbnN0aXR1dGlvblR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVkdWNhdGlvbmFsU3R1ZHlBcmVhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGVjdHJvbWFnbmV0aWNUcmFuc21pdHRlcklkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llZUlkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmhhbmNlZFBhcnR5SWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVudGl0bGVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbnRpdHlSZWxhdGlvbnNoaXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWlwbWVudFN0YXR1c0xvb2t1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXJyb3JDbGFzc2lmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzc2VudGlhbGl0eUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZFRpbWVPZkFycml2YWxDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZVR5cGVMb29rdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRpbmdNZXRob2RTdGF0dXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFdGhuaWNpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV2YWx1YXRlV29ya0NhbmRpZGF0ZUxvb2t1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXZhbHVhdGVXb3JrQ2FuZGlkYXRlUmVhc29uTG9va3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFdmVudEFiYXRlbWVudENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV2ZW50Q29kZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV2ZW50T3JFeHBvc3VyZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV2ZW50UmVhcHBlYXJhbmNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhhbWluYXRpb25GYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhjYXZhdGlvbkluZm9ybWF0aW9uQ29kZUxpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4Y2Vzc01hdGVyaWFsRGlzcG9zaXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGNpc2VEdXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBvcnRDb21tb2RpdHlDbGFzc2lmaWNhdGlvbi1VU1NjaGVkdWxlQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwb3J0UmVxdWlyZW1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHRlbnNpb25SZWFzb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV5ZUNvbG9yQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFjaWxpdHlJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFjaWxpdHlTZWN1cml0eUNsZWFyYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFpbHVyZVRvQXdhcmRSZWFzb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhbm5pZU1hZUFkanVzdGFibGVSYXRlTW9ydGdhZ2VQbGFuQ29kZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhbm5pZU1hZS1GZWRlcmFsTmF0aW9uYWxNb3J0Z2FnZUFzc29jaWF0aW9uLU1vcnRnYWdlSW5zdXJhbmNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFubmllTWFlLUZlZGVyYWxOYXRpb25hbE1vcnRnYWdlQXNzb2NpYXRpb24tUG9vbEZlYXR1cmVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGYW5uaWVNYWUtRmVkZXJhbE5hdGlvbmFsTW9ydGdhZ2VBc3NvY2lhdGlvbi1SZW1pdHRhbmNlUHJvZ3JhbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhbm5pZU1hZS1GZWRlcmFsTmF0aW9uYWxNb3J0Z2FnZUFzc29jaWF0aW9uLVNwZWNpYWxGZWF0dXJlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFubmllTWFlUmVmaW5hbmNlUGxhbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxGaW5hbmNlQ29kZUxpc3QxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsSGVhbHRoQ2FyZUNvZGVMaXN0MSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbExvZ2lzdGljc0NvZGVMaXN0MSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbFByb2N1cmVtZW50Q29kZUxpc3QxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsVHJhbnNwb3J0YXRpb25Db2RlTGlzdDEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFuY2lhbEFuYWx5c2lzQ2F0ZWdvcmllcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsSW5mb3JtYXRpb25UeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbmNpYWxJdGVtQWxsb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsSXRlbUF0dHJpYnV0ZWRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbmNpYWxJdGVtUmVjbGFzc2lmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsTWFuYWdlbWVudFNlcnZpY2VDYXNoLUxpbmtDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbmNpYWxSYXRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFuY2lhbFJlZ2ltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsUm91dGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsU3RhdGVtZW50Rm9ybWF0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGVldFBhcmFtZXRlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZsb3dPZlRoZUdvb2RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb2xsb3ctVXBDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JlY2FzdFR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVpZ25MaW5lT2ZCdXNpbmVzc0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVpZ25NaWxpdGFyeVNhbGVzQ291bnRyeUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcm1UeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yd2FyZGluZ1Jlc3RyaWN0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZGRpZU1hYy1GZWRlcmFsSG9tZUxvYW5Nb3J0Z2FnZUNvcnBvcmF0aW9uLU1vcnRnYWdlSW5zdXJhbmNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZGRpZU1hYy1GZWRlcmFsSG9tZUxvYW5Nb3J0Z2FnZUNvcnBvcmF0aW9uLVJlbWl0dGFuY2VQcm9ncmFtcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZGRpZU1hYy1GZWRlcmFsSG9tZUxvYW5Nb3J0Z2FnZUNvcnBvcmF0aW9uLVNwZWNpYWxDaGFyYWN0ZXJDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVkZGllTWFjUmVmaW5hbmNlUGxhbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWVPbkJvYXJkU2l0ZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWVab25lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVpZ2h0Rm9yd2FyZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVxdWVuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZXF1ZW5jeUJhbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1bmN0aW9uYWxBcmVhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdW5jdGlvbmFsR3JvdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1bmRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdW5kUHVycG9zZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2Fpbk9yTG9zc0luZGljYXRvckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdlbmVyYWxTZXJ2aWNlc0FkbWluaXN0cmF0aW9uQ3VzdG9tZXJTdXBwbHlDZW50ZXJOdW1iZXJDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW5lcmFsVGVycml0b3J5VHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VuZXJhdG9yU2V0TW91bnRpbmdDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW9ncmFwaGljTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdsYXNzQWN0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZHNEZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJubWVudEFnZW5jeVByb2NlZHVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JhZGVPZkRpZmZpY3VsdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3VwUXVhbGlmaWVyQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGFpckNvbG9yQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGFuZGxpbmdBY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikhhcm1vbml6ZWRTeXN0ZW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhemFyZG91c01hdGVyaWFsQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGF6YXJkb3VzTWF0ZXJpYWxzQ3JlZGVudGlhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGF6YXJkb3VzUmVzcG9uc2VDb2RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhbHRoQ2FyZUNsYWltU3RhdHVzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhbHRoQ2FyZUZpbmFuY2luZ0FkbWluaXN0cmF0aW9uQ29tbW9uUHJvY2VkdXJhbENvZGluZ1N5c3RlbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhbHRoQ2FyZUZpbmFuY2luZ0FkbWluaXN0cmF0aW9uQ29tbW9uUHJvY2VkdXJhbENvZGluZ1N5c3RlbVByaW5jaXBhbFByb2NlZHVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhbHRoQ2FyZUZpbmFuY2luZ0FkbWluaXN0cmF0aW9uRHVyYWJsZU1lZGljYWxFcXVpcG1lbnRSZWdpb25hbENhcnJpZXJDZXJ0aWZpY2F0ZU9mTWVkaWNhbE5lY2Vzc2l0eUZvcm1zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFsdGhjYXJlUHJvdmlkZXJDaGFyYWN0ZXJpc3RpY3NBbmRSZXNvdXJjZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYWx0aGNhcmVQcm92aWRlclRheG9ub215Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFsdGhJbmR1c3RyeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhbHRoSW5kdXN0cnlPcmdhbml6YXRpb25JZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9iYnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkljZDEwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJZGVudGlmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklkZW50aWZ5aW5nQ2hhcmFjdGVyaXN0aWNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJZGVudGl0eURpc2Nsb3N1cmVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbW11bml6YXRpb25JbmplY3Rpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXBhY3RBeGlzT3JBbmFsb2dQb3J0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW1wYWN0UmVjb3JkZXJDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmNpZGVudENvbmRpdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluY2lkZW50Q29uc2VxdWVuY2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmNpZGVudExvY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5jaWRlbnRSZWxhdGVkQWN0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5jb3Rlcm1zMTk4MCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5kaWNhdG9yQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5kaXZpZHVhbEluc3VyYW5jZUZpbmFuY2lhbERldGFpbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5kaXZpZHVhbFBhcnRpY2lwYXRpb25JbkNvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZGl2aWR1YWxTZWN1cml0eUNsZWFyYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5kdXN0cnlSYXRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZm9ybWF0aW9uSW5kaWNhdG9yQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5mb3JtYXRpb25SZXF1ZXN0UmVzdWx0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmZvcm1hdGlvblJlcXVlc3RUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmZvcm1hdGlvblR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluaXRpYWxUcmVhdG1lbnRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnF1aXJ5U2VsZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnNwZWN0aW9uUGFyYW1ldGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJhbmNlQ292ZXJhZ2VEZXRhaWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyYW5jZUluZm9ybWF0aW9uSW5kaWNhdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmFuY2VQbGFuRGVzY3JpcHRpb25DaGFyYWN0ZXJpc3RpY3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybWVkaWF0ZUNvbnRhaW5lckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybWVkaWF0ZUNvbnRhaW5lclF1YW50aXR5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJuYXRpb25hbENsYXNzaWZpY2F0aW9uT2ZEaXNlYXNlc0NsaW5pY2FsTW9kaWZpY2F0aW9uUHJvY2VkdXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm5hdGlvbmFsQ2xhc3NpZmljYXRpb25PZkRpc2Vhc2VzQ2xpbmljYWxNb2RpZmljYXRpb25QcmluY2lwYWxQcm9jZWR1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmF0aW9uYWxDbGFzc2lmaWNhdGlvbk9mRGlzZWFzZXNDbGluaWNhbE1vZGlmaWNhdGlvbi1JY2QtOS1DbUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmF0aW9uYWxTdGFuZGFyZERlc2lnbmF0aW9uU3lzdGVtRm9yVGVldGhBbmRBcmVhc09mVGhlT3JhbENhdml0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52ZW50b3J5Q2F0ZWdvcnlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlbnRvcnlUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52ZXN0aWdhdGlvblN0YXR1c0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVzdG1lbnRGdW5kVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52ZXN0bWVudFR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Iklyc1F1YWxpZmljYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJdGVtTWFuYWdlbWVudENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikl0ZW1Tb3VyY2luZ0NhdGVnb3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJdGVtVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSm9iQ2hhcmFjdGVyaXN0aWNzTG9va3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKb2JPcmlnaW5hdG9yTG9va3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKb2ludExpZmVJbnN1cmFuY2VJbmRpY2F0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikp1ZGljaWFsSGVhcmluZ1R5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKdWRpY2lhbE9yZGVyVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikp1ZGljaWFsU2VudGVuY2VUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSnVyaXNkaWN0aW9uVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS2V5RXZlbnRMb29rdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktpbmRPZkNvbnRyYWN0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS2luZE9mTW9kaWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFib3JhdG9yeVJlc3VsdHNJZGVudGlmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm9yYXRvcnlUZXN0Q29uZGl0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVnYWxDYXNlVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVnYWxFdmVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVnYWxTdHJ1Y3R1cmVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZXR0ZXJPZlJlY29tbWVuZGF0aW9uUmF0aW5nQ2F0ZWdvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpYWJpbGl0eURldGFpbHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpYWJpbGl0eVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpZmVPckFubnVpdHlQcm9kdWN0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlmZU9yQW5udWl0eVNlcnZpY2VGZWF0dXJlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlmZU9yQW5udWl0eVN0YXR1c0NvZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWZlUmVpbnN1cmFuY2VNZXNzYWdlVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGluZUl0ZW1Db25kaXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaW5lT2ZBdXRob3JpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpbmVPZkJ1c2luZXNzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hblR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2FsZU9mQWN0aXZpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2FsU291cmNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhdGlvbk9mR29vZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2F0aW9uc0ZvclRhcmlmZkNhbGN1bGF0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9naWNhbE9ic2VydmF0aW9uSWRlbnRpZmllck5hbWVzQW5kQ29kZXNDb2RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9naXN0aWNzQ29kZUxpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxvc3NEZXNjcmlwdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxvc3NTZXZlcml0eUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvdFR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWpvckZvcmNlUHJvZ3JhbUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbmFnZW1lbnRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW5hZ2VtZW50SW5kaWNhdG9yQ29kZS1QZXRyb2xldW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbnVhbENsYXNzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFyaW5lQmVydGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcmluZVdoYXJmIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXJrZXRQbGFjZU9yZ2FuaXphdGlvbklEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXJrZXRQbGFjZVRyYWRpbmdQYXJ0bmVySUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFsQ29udHJvbENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFscyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVhbnNPZkNvbW11bmljYXRpb25zSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVhbnNPZlRyYW5zcG9ydElkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWNoYW5pemF0aW9uT2ZDb250cmFjdEFkbWluaXN0cmF0aW9uU2VydmljZXNTeXN0ZW1FcnJvckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGlhQW5kU3RhdHVzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaWNhaWRQcm92aWRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaWNhbEJlbmVmaXRzU2NoZWR1bGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYXJlUHJvdmlkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGl1bU9mVHJhbnNtaXNzaW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVtYmVyT3JnYW5pemF0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWV0aG9kRXZhbHVhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1ldGhvZHNPZlBheW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbGl0YXJ5QW5kQ2l2aWxpYW5HcmFkZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbGl0YXJ5QXNzaXN0YW5jZVByb2dyYW1BZGRyZXNzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlub3JpdHlJbmRpY2F0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pc3Npb25JbXBhY3RTdGF0ZW1lbnRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb25ldGFyeUZ1bmN0aW9uRGV0YWlsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3J0Z2FnZUluZGV4U291cmNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTXVsdGktTWVkaWFPYmplY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hY2hhLU5hdGlvbmFsQXV0b21hdGVkQ2xlYXJpbmdIb3VzZUFzc29jaWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbENvdW5jaWxGb3JQcmVzY3JpcHRpb25EcnVnUHJvZ3JhbXNSZWplY3RPclBheW1lbnRDb2RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxDb3VuY2lsT25Db21wZW5zYXRpb25JbnN1cmFuY2VOYXR1cmVPZkluanVyeUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsQ291bmNpbE9uQ29tcGVuc2F0aW9uSW5zdXJhbmNlUGFydE9mQm9keUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsQ291bmNpbE9uQ29tcGVuc2F0aW9uSW5zdXJhbmNlU291cmNlT2ZJbmp1cnlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbERydWdDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbE1vdG9yRnJlaWdodENsYXNzaWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxTdGFuZGFyZFRvb3RoTnVtYmVyaW5nU3lzdGVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXR1cmVPZkJ1eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0dXJlT2ZEZWJ0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0dXJlT2ZFdmVudENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdHVyZU9mSW5qdXJ5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0dXJlT2ZTdWl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXR1cmVPZlN1aXRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXR1cmVPZlRyYW5zYWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb0xvbmdlckNvbnNpZGVyZWRGb3JBd2FyZFJlYXNvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9tZW5jbGF0dXJlQWN0aXZpdHlDbGFzc2lmaWNhdGlvbkVjb25vbXlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tUG9zdGFsVG93biIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9ybWVBY3Rpdml0ZUZyYW5jYWlzZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdGljZVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdGlmaWNhdGlvbkluZGljYXRvckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9ibGlnYXRpb25WYXJpYW5jZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9jY3VwYXRpb25hbFNhZmV0eUFuZEhlYWx0aEFkbWluaXN0cmF0aW9uTmF0dXJlT2ZJbmp1cnlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPY2N1cGF0aW9uYWxTYWZldHlBbmRIZWFsdGhBZG1pbmlzdHJhdGlvblBhcnRPZkJvZHlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPY2N1cGF0aW9uYWxTYWZldHlBbmRIZWFsdGhBZG1pbmlzdHJhdGlvblNvdXJjZU9mSW5qdXJ5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2NjdXBhdGlvbkNsYXNzaWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPY2N1cGF0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2NjdXJyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2NjdXJyZW5jZVNwYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9jZWFuQ2FycmllckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZmVyQW5kUmVsZWFzZU9wdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZmljZU9mV29ya2Vyc0NvbXBlbnNhdGlvblByb2dyYW1zTmF0dXJlT2ZJbmp1cnlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZpY2VPZldvcmtlcnNDb21wZW5zYXRpb25Qcm9ncmFtc09jY3VwYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZpY2VPZldvcmtlcnNDb21wZW5zYXRpb25Qcm9ncmFtc1BhcnRPZkJvZHlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZpY2VPZldvcmtlcnNDb21wZW5zYXRpb25Qcm9ncmFtc1NvdXJjZU9mSW5qdXJ5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3BlcmF0aW5nU3RhdHVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVyYXRpb25UeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdmVyc2l6ZU9yT3ZlcndlaWdodENyZWRlbnRpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik93bmVyc2hpcENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik93bmVyc2hpcFJpZ2h0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFja2FnZUZhaWx1cmVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNraW5nQW5kT3JVbnBhY2tpbmdGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFja2luZ1JlcXVpcmVtZW50TGV2ZWxBQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFja2luZ1JlcXVpcmVtZW50TGV2ZWxCQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFja2luZ1JlcXVpcmVtZW50TGV2ZWxDQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydE9mQm9keUFmZmVjdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0T2ZCb2R5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFzc3BvcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhdGllbnRFdmVudFByb2JsZW1Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50QmVoYXZpb3VyUmF0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50VHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlZGVzdHJpYW5Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJzb25hbFByb3BlcnR5QW5kQ29udGVudHNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXRyb2xldW1CaWxsVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGV0cm9sZXVtTGFuZENhdGVnb3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXRyb2xldW1MZWFzZVN0YXR1cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGV0cm9sZXVtUHJvZHVjdERpc3Bvc2l0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXRyb2xldW1Qcm9kdWN0UG9pbnQtT2YtU2FsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGV0cm9sZXVtUHJvZHVjdFNlbGxpbmdBcnJhbmdlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGV0cm9sZXVtUHJvZHVjdFZhbHVlQWRqdXN0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGV0cm9sZXVtUmVndWxhdG9yeVJlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGV0cm9sZXVtUm95YWx0eUFkanVzdG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBldHJvbGV1bVJveWFsdHlDYWxjdWxhdGlvbk1ldGhvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGV0cm9sZXVtUm95YWx0eVRyYW5zYWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXRyb2xldW1Vbml0ZWRTdGF0ZXNHZW9sb2dpY2FsU3VydmV5Rm9ybWF0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGV0cm9sZXVtV2VsbEFjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGV0cm9sZXVtV2VsbENsYXNzaWZpY2F0aW9uU3RhdHVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXRyb2xldW1XZWxsSW5mb3JtYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBldHJvbGV1bVdlbGxTaHV0LUluUmVhc29uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXRyb2xldW1XZWxsVGVzdEluZm9ybWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaHlzaWNhbENoYXJhY3RlcmlzdGljc0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW50Q2xlYXJhbmNlT2ZmaWNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGx1c09yTWludXNJbmRpY2F0b3JDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb2xpY3lPbkNsYWltSW5kaWNhdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb2xpY3lSZXNlcnZlVmFsdWF0aW9uVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9saWN5VHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9ydGFsSUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvc3RhbERpc3RyaWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3N0YWxTZXJ2aWNlQ2FycmllclJvdXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3N0Y29kZURpcmVjdG9yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9zdE1hcmtldFN0dWR5U3RhdHVzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlY2lvdXNNZXRhbHNJbmRpY2F0b3JDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVzZXJ2YXRpb25EYXRhQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc2VydmF0aW9uTWF0ZXJpYWxDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2ZW50aXZlTWVhc3VyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWFyeURpYWdub3NpcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbmNpcGFsRGlhZ25vc2lzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmluY2lwYWxQYXJ0eUNpdGl6ZW5zaGlwQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JpdHlEZXNpZ25hdG9yQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JpdHlMb29rdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y2VyRmluYW5jaWFsSGlzdG9yeUNvZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdFF1YWxpdHlEZWZpY2llbmN5UmVwb3J0U3VtbWFyeUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3RTdXBwbHlDb25kaXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2Zlc3Npb25hbERlc2lnbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9mZXNzaW9uYWxTdGF0dXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9mZXNzaW9uVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2dyYW1PcmlnaW5hdG9yQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZ3JhbVllYXJDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdGlvblR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3BlcnR5T3duZXJzaGlwRXh0ZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9wZXJ0eU93bmVyc2hpcFR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9wZXJ0eVJlY29yZFN0YXR1c0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3BlcnR5U291cmNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvcGVydHlUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9wZXJ0eVVuZGVyd3JpdGluZ0NvbmRpdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3ByaWV0YXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdXJjaGFzaW5nQ29udHJhY3RPZmZpY2VySW5zdHJ1Y3Rpb25zQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVycG9zZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YWxpdHlBbGVydExpc3RSZWFzb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YWxpdHlBc3N1cmFuY2VTaXRlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGl0eUNvbmZvcm1hbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFsaXR5Q29udHJvbENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5UGVyVW5pdFBhY2tDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWVyeU9wdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1ZXJ5U3RhdHVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWRpb0ZyZXF1ZW5jeVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhZGlvU2VydmljZVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhZGlvU3lzdGVtVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbEFkZGl0aW9uYWxDaGFyZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsY2FyTGV0dGVyTWFya2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbERvY3VtZW50TmFtZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhaWxIYW5kbGluZ1Jlc3RyaWN0aW9uc0FuZEluc3RydWN0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbEhhcm1vbml6ZWRDb2RpZmljYXRpb25PZlRhcmlmZnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhaWxIYXJtb25pemVkRXF1aXBtZW50VHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbFJvdXRlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbFVuaWZpZWROb21lbmNsYXR1cmVPZkdvb2RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsd2F5Q29tcGFueU5ldHdvcmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhaWx3YXlDdXN0b21lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbHdheUZyb250aWVyQW5kVHJhbnNpdFBvaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsd2F5TG9jYXRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsd2F5U2VydmljZXNIYXJtb25pemVkQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmF0ZUNsYXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYXRpbmdTdW1tYXJ5VmFsdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYWxFc3RhdGVBc3NldFR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYXNvbkZvckNvbnRyYWN0RGVsaXZlcnlEYXRlUmV2aXNpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWFzb25Gb3JEZWxheWVkQ2xvc2luZ09mQ29udHJhY3RGaWxlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhc29uRm9yRGlzcG9zYWxDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWFzb25Gb3JGaW5hbmNpYWxJdGVtRGV0YWlsQ2hhbmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWFzb25Gb3JQdWJsaWNSZWNvcmRGaWxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYXNvbkZvclJlcXVpc2l0aW9uaW5nQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjaXBpZW50T2ZCaWxsaW5nU3RhdHVzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjb21tZW5kYXRpb25zUmVnYXJkaW5nRGVsYXllZERlbGl2ZXJpZXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNvcmRDb250cm9sTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNvcmRQcmVjZWRlbmNlQmFzZWRPbkl0c0N1cnJlbmN5SW5UaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZlcmVuY2VBbmRTdGF0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmcmlnZXJhdGlvblVuaXRPcGVyYXRpbmdNb2RlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RlcmVkQ29udHJhY3RvckFjdGl2aXR5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaXN0cmF0aW9uVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVpbnN1cmFuY2VNb25ldGFyeVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlaW5zdXJhbmNlUG9saWN5QXR0cmlidXRlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVqZWN0QWR2aWNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVqZWN0SW5kaWNhdG9yQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRlZERldmljZUFwcGxpY2FiaWxpdHlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxpZ2lvdXNBZmZpbGlhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbWVkaWFsQWN0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVtb3ZhYmxlQWNjZXNzb3JpZXNBbmRTcGVjaWFsRXF1aXBtZW50T25SYWlsY2FycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVudGFsQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBhaXJGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0YWJsZUV2ZW50Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0YWJsZUV2ZW50U3RhdHVzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0RGlzdHJpYnV0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0U291cmNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwcmVzZW50YXRpdmVCdXlJbmRpY2F0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVlc3RDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1ZXN0VHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWlyZW1lbnRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1aXJlbWVudHNJbmRpY2F0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2lkZW5jeUluZGljYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzaWRlbnRpYWxBbmRDb21tZXJjaWFsUm9vbUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3BvbnNlU3RhdHVzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzdHJpY3Rpb25zQW5kUHJvaGliaXRpb25zUGxhY2VkT25UaGVSZS1Vc2VPZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzdWx0RXZhbHVhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldmlld1BlcmlvZEluZGljYXRvckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJpc2tDbGFzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm9hZENoYXJhY3RlcmlzdGljQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm9hZHdheURldGFpbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm9hZHdheVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvdXRlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUnVuVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FmZXR5QW5kRml0bmVzc0VsZWN0cm9uaWNSZWNvcmRTeXN0ZW1zRXJyb3JDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWZldHlBbmRGaXRuZXNzRWxlY3Ryb25pY1JlY29yZFN5c3RlbXNTdWJzY3JpcHRpb25PcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhZmV0eUhhemFyZExvb2t1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FmZXR5UmVndWxhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FsZXNQcmljZUNvbmRpdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbHZhZ2VEaXNwb3NpdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbXBsZUV4dHJhY3Rpb25Mb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VhdmFuT3duZXJzaGlwQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kYXJ5RGlhZ25vc2lzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRhcnlTb3VyY2VPZkluanVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VjdXJpdHlTaGFyZVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VBbmRBZ2VuY3lDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlQ29udHJhY3RBY3RPY2N1cGF0aW9uQ2F0ZWdvcnlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlQ29udHJhY3RBY3RPY2N1cGF0aW9uQ2xhc3NpZmljYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlQ29udHJhY3RBY3RPcGVyYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXR0bGVtZW50T3JQYXlvdXRPcHRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGFyZVR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGVsZkxpZmVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwbWVudEFjY2VwdGFuY2VEaXNjcmVwYW5jeUV4cGxhbmF0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcG1lbnREZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcG1lbnRIb2xkQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcG1lbnRSZWxlYXNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBpbmdBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2lnbmFsQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2luZ2xlU3RhdGVSZWdpc3RyYXRpb25TeXN0ZW1BbmRPcGVyYXRpbmdBdXRob3JpdHlDcmVkZW50aWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaW5nbGVVc2VMYWJlbENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpemVBbmRUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTa2luVG9uZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNtYWxsQXJtc0Vycm9yVHJhbnNhY3Rpb25SZWplY3RDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbWFsbEFybXNUcmFuc2FjdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvY2lhbFNlY3VyaXR5SWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvbGljaXRhdGlvbkNhbmNlbGxhdGlvblJlYXNvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29saWNpdGF0aW9uTWV0aG9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb3VuZENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvdXJjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU291cmNlTWFpbnRlbmFuY2VBbmRSZWNvdmVyYWJpbGl0eUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvdXJjZU9mRGVwb3NpdENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvdXJjZU9mRGlzY2xvc3VyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU291cmNlT2ZJbmp1cnlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb3VyY2VPZkxlYWRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb3VyY2VPZkxvc3NDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsQ2F0ZWdvcnlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsQ29udHJhY3RQcm92aXNpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsRGF0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsSGFuZGxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxNYXJrZXRpbmdUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbE1hcmtpbmdDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsTWF0ZXJpYWxJZGVudGlmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxQcm9ncmFtUmVxdWlyZW1lbnRTdGF0dXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsUmVpbWJ1cnNhYmxlUHJvdmlzaW9uc0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxSZXF1aXJlbWVudExvb2t1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbFJlcXVpcmVtZW50c0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YW5kYXJkSW5kdXN0cmlhbENsYXNzaWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZE9jY3VwYXRpb25DbGFzc2lmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YW5kYXJkVGV4dEFjY29yZGluZ1VTRW1iYXJnb1JlZ3VsYXRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZFRleHRDbGF1c2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZFRleHRGb3JFeHBvcnRBY2NvcmRpbmdOYXRpb25hbFByZXNjcmlwdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGlvbkNsYXNzaWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0aW9uQ2xhc3NpZmljYXRpb25UeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0aXN0aWNhbEFkbWluaXN0cmF0aXZlSW5mb3JtYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0aXN0aWNhbE5hdHVyZU9mVHJhbnNhY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRpc3RpY2FsT2JqZWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0aXN0aWNhbFByb2NlZHVyZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRpc3RpY0J1bmRlc0FtdENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXR1c0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b2NrRXhjaGFuZ2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9ja0V4Y2hhbmdlRGV0YWlsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9ja0Z1bmRPck5vbi1TdG9ja0Z1bmRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9yYWdlRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0dWRlbnRBY3Rpdml0eVR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdHVkZW50QXdhcmRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJjYXNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJyb2dhdGlvbkFjdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnJvZ2F0aW9uUGF5bWVudE9wdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnJvZ2F0aW9uUmVxdWVzdENvZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJyb2dhdGlvblJlc3BvbnNlQ29kZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnNpc3RlbmNlVHlwZU9mUGFja0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1ZmZpeENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1ZmZpeE9yTGltaXRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdW1tb25zVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBsZW1lbnRhbERhdGEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBsZW1lbnRhcnlBY2NvdW50aW5nQ2xhc3NpZmljYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbGllcnNTdG9ja1R1cm5vdmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbHlDb25kaXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJmYWNlRGVzY3JpcHRvckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNXSUZUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTeW50YXhOb3RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3lzdGVtYXRpemVkTm9tZW5jbGF0dXJlT2ZIdW1hbkFuZFZldGVyaW5hcnlNZWRpY2luZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3lzdGVtU3RhdHVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXJpZmZTY2hlZHVsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4QXNzZXNzbWVudE1ldGhvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4T3JGZWVFeGVtcHRpb25SZWFzb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhQYXJ0eUlkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWNobmljYWxBc3Nlc3NtZW50Q2hlY2tsaXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWxlcGhvbmVEaXJlY3RvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbXBsYXRlQ2hhcmFjdGVyaXN0aWNMb29rdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbXBsYXRlT3duZXJMb29rdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbXBsYXRlVHlwZUxvb2t1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVybWluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcm1zT2ZEZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVydGlhcnlEaWFnbm9zaXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlc3RpbmdEZW1vZ3JhcGhpY0NhdGVnb3J5Q29kZUxpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlc3RpbmdTZXJ2aWNlUXVlc3Rpb25Db2RlTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVzdGluZ1N0YXRpc3RpY2FsQ2F0ZWdvcnlDb2RlTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVzdFJlc3VsdHNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaXRsZURvY3VtZW50Q29kZUxpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpdGxlRXhjZXB0aW9uQW5kUmVxdWlyZW1lbnRDb2RlTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhZGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFpbklkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc2FjdGlvblN0YXR1c0luZGljYXRvckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydGF0aW9uQmlsbENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydGF0aW9uSG9sZGluZ0RlbGF5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0YXRpb25Nb2RlT3JNZXRob2RDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRhdGlvbk1vZGVSZWFzb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRhdGlvblByaW9yaXR5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJlYXN1cnlNYW5hZ2VtZW50QXNzb2NpYXRpb25TZXJ2aWNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJlYXN1cnlNYW5hZ2VtZW50QXNzb2NpYXRpb25TZXJ2aWNlQ29kZUFuZEJhbmtTZXJ2aWNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJlYXN1cnlTeW1ib2xDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmVhdG1lbnRDb2RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJlbmRSZWFzb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyaWFsVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVBZGp1c3RtZW50Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZUFuZENhdXNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZUR1ZS1JbkluZGljYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZUlkZW50aXR5Q2hhbmdlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZUluc3BlY3Rpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUeXBlTnVtZXJpY2FsQ29udHJvbFN5c3RlbUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVPZkFzc2V0c0FuZExpYWJpbGl0aWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUeXBlT2ZBc3Npc3RhbmNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZU9mQmlsbENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVPZkJ1c2luZXNzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZU9mQ2FyZ29Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUeXBlT2ZDb250cmFjdENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVPZkNvbnRyYWN0b3JDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUeXBlT2ZEZWxheUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVPZkZpbmFuY2lhbEFjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVPZkZpcm1Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUeXBlT2ZJbmR1c3RyaWFsQWN0aXZpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVPZklucXVpcnlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUeXBlT2ZJbnN1cmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUeXBlT2ZJc3N1ZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVPZkxvY2F0aW9uUmVjb25jaWxpYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUeXBlT2ZNZWRpYUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVPZlBhY2thZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVPZlByb2N1cmVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUeXBlT2ZTdG9yYWdlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZU9mU3VydmV5UXVlc3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVQYWNrQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZVBoeXNpY2FsSW52ZW50b3J5T3JUcmFuc2FjdGlvbkhpc3RvcnlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbHRpbWF0ZVJlY2lwaWVudENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuY2xhaW1lZFByb3BlcnR5QWRkaXRpb25zRGVsZXRpb25zQW5kRGVkdWN0aW9uc0NvZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmNsYWltZWRQcm9wZXJ0eVR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmlmb3JtRnJlaWdodENsYXNzaWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pZm9ybVJlc2lkZW50aWFsQXBwcmFpc2FsQXR0cmlidXRlc0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0ZWROYXRpb25zQ29tbW9uQ29kaW5nU3lzdGVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0ZWROYXRpb25zU3RhbmRhcmRQcm9kdWN0c0FuZFNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0ZWRTdGF0ZXNEZXBhcnRtZW50T2ZIZWFsdGhBbmRIdW1hblNlcnZpY2VzT2ZmaWNlT2ZWaXRhbFN0YXRpc3RpY3NFLUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuc29saWNpdGVkUHJvcG9zYWxSZWplY3Rpb25SZWFzb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlV0aWxpemF0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmFjY2luYXRpb25Jbm5vY3VsYXRpb25Pcklzb2xhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhbHVhdGlvblR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYWx1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmFsdWVBZGRlZFRheElkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZWhpY2xlQ2xhc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlaGljbGVPY2N1cGFudENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlaGljbGVQYXJhbWV0ZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXNzZWxTdGF0dXNBbmRUZXJtc09mQ2FycmlhZ2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXNzZWxTdG93YWdlTG9jYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXNzZWxTdXN0YWluaW5nQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmlld1BhcmFtZXRlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZpb2xhdGlvblR5cGVDb2RlTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVm95YWdlRG9jdW1lbnROdW1iZXJDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWb3lhZ2VNYW5pZmVzdFJlZmVyZW5jZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhcmVob3VzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FyUmVzZXJ2ZU1hdGVyaWFsUmVxdWlyZW1lbnRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXRlckNvbW1vZGl0eUFuZFNwZWNpYWxIYW5kbGluZ0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhdGVyVGVybWluYWxJZGVudGlmaWVyQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2VpZ2h0T3JGcmFnaWxpdHlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaGVuRGlzY292ZXJlZExvb2t1cCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQ29udHJhY3RUeXBlIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDb250cmFjdFR5cGVDb2RlZCIgdHlwZT0iQ29udHJhY3RUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQ29udHJhY3RUeXBlQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQ29udHJhY3RUeXBlIiB0eXBlPSJDb250cmFjdFR5cGUiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iQ29udHJhY3RUeXBlQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpYWdub3Npc1JlbGF0ZWRHcm91cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyRGllbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmFyaWFibGVQZXJEaWVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGF0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXBpdGF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcmNlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5lZ290aWF0ZWRHcm93aW5nRXF1aXR5TW9ydGdhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFudGljaXBhdGVkQ29udHJhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxIb3VzaW5nQXV0aG9yaXR5QWRqdXN0YWJsZVJhdGVNb3J0Z2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbEhvdXNpbmdBdXRob3JpdHlWZXRlcmFuc0FmZmFpcnNGaXhlZFJhdGVNb3J0Z2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udmVudGlvbmFsU2Vjb25kTW9ydGdhZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb252ZW50aW9uYWxGaXhlZFJhdGVNb3J0Z2FnZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxIb3VzaW5nQXV0aG9yaXR5VmV0ZXJhbnNBZmZhaXJzR3JhZHVhdGVkUGF5bWVudE1vcnRnYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZWdvdGlhdGVkQ29udmVudGlvbmFsR3JhZHVhdGVkUGF5bWVudE9yU3RlcFJhdGVNb3J0Z2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udmVudGlvbmFsQWRqdXN0YWJsZVJhdGVNb3J0Z2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zdFBsdXNJbmNlbnRpdmVGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvc3RTaGFyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3N0UGx1cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zdFBsdXNBd2FyZEZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zdFBsdXNGaXhlZEZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpYnV0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4Y2x1c2l2ZUFnZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhjbHVzaXZlUmlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpcm1vckFjdHVhbENvbnRyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXhlZFByaWNlSW5jZW50aXZlRmlybVRhcmdldFdpdGhQZXJmb3JtYW5jZUluY2VudGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRml4ZWRQcmljZUluY2VudGl2ZUZpcm1UYXJnZXRXaXRob3V0UGVyZm9ybWFuY2VJbmNlbnRpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpeGVkUHJpY2VSZWRldGVybWluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpeGVkUHJpY2V3aXRoRXNjYWxhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRml4ZWRQcmljZUluY2VudGl2ZVN1Y2Nlc3NpdmVUYXJnZXRXaXRoUGVyZm9ybWFuY2VJbmNlbnRpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpeGVkUHJpY2VJbmNlbnRpdmVTdWNjZXNzaXZlVGFyZ2V0V2l0aG91dFBlcmZvcm1hbmNlSW5jZW50aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXhlZFByaWNlQXdhcmRGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpeGVkUHJpY2VJbmNlbnRpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpeGVkUHJpY2VMZXZlbG9mRWZmb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb0Nvc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZsYXRBbW91bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldHJvYWN0aXZlRml4ZWRQcmljZVJlZGV0ZXJtaW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlybUZpeGVkUHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpeGVkUHJpY2V3aXRoRWNvbm9taWNQcmljZUFkanVzdG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZXZlbG9mRWZmb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJvckhvdXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlckNvbnRyYWN0VHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvc3BlY3RSZXNlcnZhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FtZVBlcmNlbnRhZ2Vhc0ZpbG1SZW50YWxFYXJuZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpbWVhbmRNYXRlcmlhbHMiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlZhbGlkaXR5RGF0ZXMiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlN0YXJ0RGF0ZSIgdHlwZT0ieGNibERhdGV0aW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iRW5kRGF0ZSIgdHlwZT0ieGNibERhdGV0aW1lIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJWYWxpZGl0eURhdGVzIiB0eXBlPSJWYWxpZGl0eURhdGVzIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZSZWZlcmVuY2VDb2RlZCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iUmVmZXJlbmNlQ29kZWQiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZlJlZmVyZW5jZUNvZGVkIiB0eXBlPSJMaXN0T2ZSZWZlcmVuY2VDb2RlZCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUmVmZXJlbmNlQ29kZWQiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJlZmVyZW5jZVR5cGVDb2RlZCIgdHlwZT0iUmVmZXJlbmNlVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlJlZmVyZW5jZVR5cGVDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUHJpbWFyeVJlZmVyZW5jZSI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlJlZmVyZW5jZSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTdXBwb3J0aW5nUmVmZXJlbmNlIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlN1cHBvcnRpbmdTdWJSZWZlcmVuY2UiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUmVmZXJlbmNlRGVzY3JpcHRpb24iIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlJlZmVyZW5jZUNvZGVkIiB0eXBlPSJSZWZlcmVuY2VDb2RlZCIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJSZWZlcmVuY2VUeXBlQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFiYnJldmlhdGVkTmV3RHJ1Z0FwcGxpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NlcHRhYmxlU291cmNlRFVOU051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjZXB0YWJsZVNvdXJjZVB1cmNoYXNlcklEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NlcHRhYmxlU291cmNlU3VwcGxpZXJJRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjZXNzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjZXNzb3JpYWxSYWlsRGl2ZXJzaW9uUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2Nlc3NvcmlhbFN0YXR1c0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY2lkZW50UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50Q2F0ZWdvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRpbmdDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50aW5nRXF1aXBtZW50TG9jYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRpbmdGaWxlUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50aW5nUGVyaW9kUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50TWFuYWdlcnNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50UGFydHlzQmFua1JlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudFBhcnR5c1JlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudFBheWFibGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRTZXJ2aWNpbmdCYW5rc1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudHNSZWNlaXZhYmxlQ3VzdG9tZXJBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50c1JlY2VpdmFibGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRzUmVjZWl2YWJsZU9wZW5JdGVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50c1JlY2VpdmFibGVTdGF0ZW1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRTdWZmaXhDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2tub3dsZWRnZW1lbnRPZk9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3Rpb25BdXRob3JpemF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRpdGlvbmFsUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRPblN5c3RlbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkcmVzc2VlUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RlZFJlcHJpY2VkQ2xhaW1SZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkanVzdGVkUmVwcmljZWRMaW5lSXRlbVJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRqdXN0bWVudENvbnRyb2xOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkanVzdG1lbnRNZW1vQ2hhcmdlQmFjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRtaW5pc3RyYXRvcnNSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmVyc2FyeUNhc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmVydGlzZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmljZU9mQ29sbGVjdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWR2aXNlVGhyb3VnaEJhbmtzUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZpc2luZ0JhbmtzUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZXJvbmF1dGljYWxFcXVpcG1lbnRSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFGRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWZmZWN0ZWRTdWJzeXN0ZW1Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZmZpbGlhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlbmN5QXNzaWduZWRFbXBsb3llZUlEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ2VuY3lBc3NpZ25lZE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlbmN5Q2FzZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlbmN5Q2xhaW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZW5jeUNsYXVzZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUlEQVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZW5jeUhpZXJhcmNoaWNhbExldmVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ2VuY3lMb2NhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZW5jeXNTdHVkZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ2VudENsYWltTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ2VudENvbnRyYWN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ2VudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlbnRzQmFua1JlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlbnRzUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ2VudHNTaGlwbWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUdFUkQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFncmVlbWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdyZWVtZW50VG9QYXlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpckNhcmdvVHJhbnNmZXJNYW5pZmVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWlyRGltZW5zaW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWlySGFuZGxpbmdDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJsaW5lc0ZsaWdodElkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJsaW5lVGlja2V0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJXYXliaWxsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxvdG1lbnRJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxsb3dhbmNlUmVjaXBpZW50SWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsdGVyYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsdGVybmF0ZUNsYXVzZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1idWxhdG9yeVBhdGllbnRHcm91cE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1lbmRlZFVuaWZvcm1Db21tZXJjaWFsQ29kZUZpbGluZ051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1lbmRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbWVuZG1lbnRGaWxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtZXJpY2FuQmFua2Vyc0Fzc29jaWF0aW9uVHJhbnNpdE9yUm91dGluZ051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1lcmljYW5HYXNBc3NvY2lhdGlvbkVxdWF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbWVyaWNhbk9zdGVvcGF0aGljQXNzb2NpYXRpb25DZXJ0aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbWVyaWNhblBldHJvbGV1bUluc3RpdHV0ZURlZHVjdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtZXJpY2FuUGV0cm9sZXVtSW5zdGl0dXRlV2VsbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW5hbHlzaXNOdW1iZXJPclRlc3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFuZXN0aGVzaWFMaWNlbnNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbmltYWxTcGVjaWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbmltYWxTdHJhaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFudGlEdW1waW5nQ2FzZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVBFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhYmxlQ29lZmZpY2llbnRJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYWJsZUluc3RydWN0aW9uc09yU3RhbmRhcmRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhbnRzQmFua1JlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYW50c1JlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2F0aW9uUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhdGlvblRyYW5zYWN0aW9uUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBvaW50bWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwcmFpc2VyTGljZW5zZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwcm9wcmlhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwcm92YWxDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcmVhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcnJpdmFsQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJ0aWNsZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzZW1ibHlMaW5lRmVlZExvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NlbWJseU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzZXNzbWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzaWduZWRCeVRyYW5zYWN0aW9uU2V0U2VuZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NpZ25lZENvbnRyYWN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NpZ25lZFNlcXVlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NpZ25tZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NpZ25tZW50UmVjb3JkaW5nTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NvY2lhdGVkQ2FzZUNvbnRyb2xOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc29jaWF0ZWRJbnZvaWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzb2NpYXRlZE51bWJlckZvckpvaW5lZFVuaXROb3RSZXN1YmRpdmlkZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc29jaWF0ZWROdW1iZXJGb3JMaW1pdGVkQ29tbW9uRWxlbWVudFBhcmtpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc29jaWF0ZWROdW1iZXJGb3JVbml0UGFya2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzb2NpYXRlZFBvbGljeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzb2NpYXRlZFByb2R1Y3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc29jaWF0ZWRQcm9wZXJ0eU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzb2NpYXRlZFB1cmNoYXNlT3JkZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NvY2lhdGlvbk9mQW1lcmljYW5SYWlscm9hZHNSYWlsd2F5QWNjb3VudGluZ1J1bGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3N1bWluZ0NvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF0YUNhcm5ldE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXRvbWljU2FmZXR5YW5kTGljZW5zaW5nQm9hcmRQYW5lbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXR0YWNoZWRUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXR0YWNobWVudENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF0dG9ybmV5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3Jpc2F0aW9uRm9yUmVwYWlyUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3JpdHlJc3N1ZWRFcXVpcG1lbnRJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXV0aG9yaXphdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXV0aG9yaXphdGlvbk51bWJlckZvckV4Y2VwdGlvblRvRGFuZ2Vyb3VzR29vZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhvcml6YXRpb25Ub01lZXRDb21wZXRpdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXV0b0xvc3NJdGVtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBQ0hSZXR1cm5Pck5vdGlmaWNhdGlvbk9mQ2hhbmdlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUNIRW50cnlEZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUNIU3RhbmRhcmRFbnRyeUNsYXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBQ0hUcmFjZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXV0b21hdGVkVW5kZXJ3cml0aW5nUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBeGxlUmF0aW8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhY2tvdXRQcm9jZWR1cmVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYWRnZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFsYW5jZUR1ZVJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFua0Fzc2lnbmVkQmFua2Vyc1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFua0Fzc2lnbmVkU2VjdXJpdHlJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYW5rZXJzQWNjZXB0YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFua1JlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFua3J1cHRjeVByb2NlZHVyZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFua3NDb21tb25UcmFuc2FjdGlvblJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFua3NJbmRpdmlkdWFsVHJhbnNhY3Rpb25SZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbmtUZWxlZ3JhcGhpY051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFua1RvQmFua0luZm9ybWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXJDb2RlZExhYmVsU2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXJDb2RlZFNlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFyZ2VQZXJtaXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhc2ljQ29udHJhY3RMaW5lSXRlbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmF0Y2hOdW1iZXJPckxvdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmF0Y2hTZXF1ZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVhbUFzc2VtYmx5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVnaW5NaWxlTWFya2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZWdpbm5pbmdKb2JTZXF1ZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVnaW5uaW5nS2FuYmFuU2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZWdpbm5pbmdNZXRlclJlYWRpbmdBY3R1YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlZ2lubmluZ01ldGVyUmVhZGluZ0VzdGltYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVnaW5uaW5nU2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZW5lZmljaWFyeXNCYW5rUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZW5lZmljaWFyeXNSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpZE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsYXRlcmFsQ2FyU2VydmljZUFncmVlbWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxBbmRIb2xkSW52b2ljZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbGluZ0FjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxpbmdDZW50ZXJJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbGluZ1R5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxPZkxhZGluZ051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbG9mTWF0ZXJpYWxSZXZpc2lvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbE9mUXVhbnRpdGllc051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmluYXJ5T2JqZWN0SWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmluTG9jYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJsYW5rZXRPcmRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmxlbmRlZFdpdGhCYXRjaE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmxlbmRlZFdpdGhOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJsb2NrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCbHVlQ3Jvc3NQcm92aWRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmx1ZVNoaWVsZFByb3ZpZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb25kZWRDYXJyaWVySW50ZXJuYWxSZXZlbnVlU2VydmljZUlkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb29raW5nUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb29rTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3JkZXJlYXVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyYW5jaElkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyb2tlcklkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcm9rZXJPclNhbGVzT2ZmaWNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcm9rZXJSZWZlcmVuY2UxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcm9rZXJSZWZlcmVuY2UyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcm9rZXJzT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyb2tlclJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVkZ2V0Q2hhcHRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVyZWF1b2ZMYWJvcmFuZFN0YXRpc3RpY3NTY2hlZHVsZUlkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1cmVhdVNpZ25pbmdPUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVyZWF1U2lnbmluZ1NSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc0FjdGl2aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc0lkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc1RheE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5ZXJJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5ZXJzQXBwcm92YWxNYXJrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllcnNDYXRhbG9ndWVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyc0NvbnRyYWN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllcnNDcmVkaXRNZW1vIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllcnNEZWJpdE1lbW8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyc0RlYnRvck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5ZXJzSXRlbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5ZXJzT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyc1NoaXBtZW50TWFya051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FkRmlsZUxheWVyQ29udmVudGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FsZW5kYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbGVuZGFyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYWxsT2ZmT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbGxTaWduIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5hZGlhbkV4Y2lzZUVudHJ5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5hZGlhbkZpbmFuY2lhbEluc3RpdHV0aW9uQnJhbmNoQW5kSW5zdGl0dXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbmFkaWFuR29vZHNBbmRTZXJ2aWNlc29yUXVlYmVjU2FsZXNUYXhSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbmFkaWFuUHJvdmluY2VPcGVyYXRpbmdBdXRob3JpdHlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbmFkaWFuU29jaWFsSW5zdXJhbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5hZGlhbldoZWF0Qm9hcmRQZXJtaXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbmNlbGVkUmV2aXNpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcmRBY2NvdW50UmVwb3J0aW5nSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyZEFjY291bnRSZXBvcnRpbmdMZXZlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyZEFjY291bnRTdGF0dXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJkQWNjb3VudFR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJkQmlsbGluZ1R5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJkSXNzdWVyVHJhbnNhY3Rpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJnb0FjY2VwdGFuY2VPcmRlclJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyZ29Db250cm9sTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJnb01hbmlmZXN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJuZXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcnJpZXJBc3NpZ25lZENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcnJpZXJBc3NpZ25lZENvbnNpZ25lZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FycmllckFzc2lnbmVkUGFja2FnZUlkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJyaWVyQXNzaWduZWRSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcnJpZXJBc3NpZ25lZFNoaXBwZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcnJpZXJzQWdlbnRSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcnJpZXJzQ3VzdG9tc0JvbmROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcnJpZXJzUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXNlT2ZOZWVkUGFydHlzUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXN1YWx0eVJlcG9ydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzdWFsdHlSZXBvcnRTZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhdGFsb2ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhdGFsb2d1ZVNlcXVlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXRhc3Ryb3BoZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2F0ZWdvcnlPZldvcmtSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlZGVudHNDbGFpbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VkaW5nQ29tcGFueSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VpbGluZ0Zvcm11bGFSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlbnN1c0F1dG9tYXRlZEZpbGVzSUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlbnN1c0Jsb2NrR3JvdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlbnN1c1N0YXRlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2Vuc3VzVHJhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlbnN1c1RyYWN0U3VmZml4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZW50cmFsU2VjcmV0YXJpYXRMb2dOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlbnRyYWxTZWNyZXRhcmlhdExvZ051bWJlckNoaWxkRGF0YU1haW50ZW5hbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZW50cmFsU2VjcmV0YXJpYXRMb2dOdW1iZXJQYXJlbnREYXRhTWFpbnRlbmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmljYXRlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0ZU9mQ29uZm9ybWl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VydGlmaWNhdGVvZkluY29ycG9yYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmljYXRlb2ZUcmFuc3BvcnRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VydGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VydGlmaWVkTWFpbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ1JOQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhbWJlck9mQ29tbWVyY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYW1iZXJPZkNvbW1lcmNlUmVnaXN0cmF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDSEFNUFVTSWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYW5nZURvY3VtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFuZ2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYW5nZU9yZGVyQXV0aG9yaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFuZ2VWZXJpZmljYXRpb25Qcm9jZWR1cmVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2VDYXJkQWNjb3VudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlQ2FyZE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlTm90ZVJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFydGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGVja2luZ051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hlY2tMaXN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGVja051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hlbWljYWxBYnN0cmFjdFNlcnZpY2VSZWdpc3RyeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hlcXVlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaXJjdWl0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaXJjdWxhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2lyY3VsYXJQdWJsaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2l0YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNpdGF0aW9uT2ZPcGluaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaXRhdGlvbk9mU3RhdHV0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2l0aXplbnNoaXBEb2N1bWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2l2aWxBY3Rpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNpdmlsTGlhYmlsaXRpZXNvZk9pbENlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGFpbUFkbWluaXN0cmF0b3JDbGFpbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xhaW1hbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsYWltYW50c0NsYWltTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGFpbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xhaW1PZmZpY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsYXNzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xhc3NPZkNvbnRyYWN0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xhdXNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGVhcmluZ0hvdXNlSW50ZXJiYW5rUGF5bWVudHNTeXN0ZW1TZXF1ZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xlYXJpbmdIb3VzZUludGVyYmFua1BheW1lbnRTeXN0ZW1QYXJ0aWNpcGFudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xlYXJpbmdIb3VzZUludGVyYmFua1BheW1lbnRTeXN0ZW1Vc2VySWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsZWFyaW5nUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGVhclRleHRDbGF1c2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsaWVudENvbXBhbnlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGllbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsaWVudFJlcG9ydGluZ0NhdGVnb3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGluaWNhbExhYm9yYXRvcnlJbXByb3ZlbWVudEFtZW5kbWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xpbmljTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2FsQXV0aG9yaXR5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2RlT2ZGZWRlcmFsUmVndWxhdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvaWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbGRSb2xsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsZWN0aW5nQmFua3NSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbGxlY3RvcklkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsb2NhdGlvbkluZGljYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tYmluZWRTaGlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWVyY2lhbE9yUHJpdmF0ZVBhc3NlbmdlclZlaGljbGVRdWFsaWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1lcmNpYWxBY2NvdW50U3VtbWFyeVJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWVyY2lhbGFuZEdvdmVybm1lbnRFbnRpdHlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tZXJjaWFsRHJpdmVyc0xpY2Vuc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1lcmNpYWxJbnZvaWNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tZXJjaWFsUmVnaXN0cmF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tZXJjaWFsVmVoaWNsZVNhZmV0eUFzc3VyYW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWl0bWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWl0dGVlT25Vbmlmb3JtU2VjdXJpdHlJZGVudGlmaWNhdGlvblByb2NlZHVyZXNOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1vZGl0eU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbW9uQWNjZXNzUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tb25UcmFuc2FjdGlvblJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGFueUFuZFBsYWNlUmVnaXN0cmF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wYW55QW5kU3luZGljYXRlUmVmZXJlbmNlMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGFueUFuZFN5bmRpY2F0ZVJlZmVyZW5jZTIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBhbnlJc3N1ZWRFcXVpcG1lbnRJZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ1JPIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wYXJhYmxlUHJvcGVydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBhcmFibGVQcm9wZXJ0eVBlbmRpbmdTYWxlUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wYXJhYmxlUHJvcGVydHlTYWxlUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wYXJhYmxlUHJvcGVydHlWZXJpZmljYXRpb25Tb3VyY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBldGVudEF1dGhvcml0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGxhaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wbGFpbnRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wbGV0ZWRVbml0c1BheW1lbnRSZXF1ZXN0UmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wbGlhbmNlQ29kZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcG9uZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25kaXRpb25PZlB1cmNoYXNlRG9jdW1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbmRpdGlvbk9mU2FsZURvY3VtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25kb21pbml1bUlkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25ncmVzc2lvbmFsRGlzdHJpY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbm5lY3RpbmdDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zaWduZWVSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNpZ25lZXNGdXJ0aGVyT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNpZ25lZXNJbnZvaWNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zaWduZWVzT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNpZ25lZXNSZWxlYXNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zaWduZWVzU2hpcG1lbnRSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNpZ25tZW50Q2xhc3NpZmljYXRpb25JRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbm9yc0Z1cnRoZXJPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbm9yc1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc29saWRhdGVkSW52b2ljZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc29saWRhdGlvblNoaXBtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zb2xpZGF0b3JzUmVjZWlwdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc3RyYWludE5vdGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zdW1lcklkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnN1bXB0aW9uRGF0YVJlcXVlc3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lck9yRXF1aXBtZW50UmVjZWlwdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyT3JQYWNrYWdpbmdTcGVjaWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJEaXNwb3NpdGlvbk9yZGVyUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJPcGVyYXRvcnNSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lcm9yRXF1aXBtZW50UmVjZWlwdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyUHJlZml4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJTZXF1ZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyV29ya09yZGVyUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250aW51YXRpb25GaWxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRpbnVhdGlvblVuaWZvcm1Db21tZXJjaWFsQ29kZUZpbGluZ051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGludW91c01vdmVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRpbnVvdXNUcmFuc2Zlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RBZGRlbmR1bU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RBdWRpdG9ySUROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0QnJlYWtkb3duUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdENvb3BOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0SG9sZGVyQ2xhaW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0TGluZUl0ZW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdE9wdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RvckRhdGFSZXF1aXJlbWVudHNMaXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdG9yRXN0YWJsaXNobWVudENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0b3JSZXF1ZXN0UmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFBhcnR5UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RSaWRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udmV5YW5jZVJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29vcGVyYXRpb25Db250cmFjdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ybmJvcmVDZXJ0aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3JyZWN0ZWRCYXRjaE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ycmVjdGVkQ29udHJhY3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcnJlY3RlZFNvY2lhbFNlY3VyaXR5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3JyZWN0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3N0QWNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zdEFsbG9jYXRpb25SZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvc3RhUmljYW5KdWRpY2lhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zdENlbnRyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zdEVsZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdW50eUJ1c2luZXNzUmVnaXN0cmF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VudHlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VudHlMZWdpc2xhdGl2ZURpc3RyaWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3Vwb25EaXN0cmlidXRpb25NZXRob2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdXBvblJlZGVtcHRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdmVyYWdlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0Q2FyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0Q291bnNlbGluZ0lkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmVkaXRNZW1vTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmVkaXROb3RlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmVkaXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0b3JEZWJpdEFkanVzdG1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyZWRpdG9yc1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0UmF0aW5nQWdlbmN5c1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmVkaXRSZXBvcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyZWRpdFJlcG9zaXRvcnlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcml0aWNhbEFwcGxpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcml0aWNhbGl0eURlc2lnbmF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyb3BZZWFyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcm9zc0xpc3RlZENvdXJzZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3Jvc3NSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNTNTRLZXlUcmFpbkluZGljYXRvckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNTNTRLZXlUcmFpbkluZGljYXRvckdyb3VwTmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudENlcnRpZmljYXRlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50SW52b2ljZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudG9yTGF0ZXN0Q291cnNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50UHJvY2VkdXJhbFRlcm1pbm9sb2d5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudFJldmlzaW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lckNhdGFsb2dOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbWVyTWFpbnRlbmFuY2VQZXJpb2RTZXF1ZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJNYXRlcmlhbFNwZWNpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbWVyT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbWVyUHJvY2Vzc1NwZWNpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbWVyUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lclJlZmVyZW5jZU51bWJlckFzc2lnbmVkVG9QcmV2aW91c0JhbGFuY2VPZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJzQ29tbW9uVHJhbnNhY3Rpb25SZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbWVyc0luZGl2aWR1YWxUcmFuc2FjdGlvblJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJzUGFydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJTcGVjaWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lcnNSZWxlYXNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lcnNVbml0SW52ZW50b3J5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lclRyYWNraW5nTnVtYmVyRm9yTG9hbmVkTWF0ZXJpYWxzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zQmFyQ29kZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0Jyb2tlclJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0RlY2lzaW9uUmVxdWVzdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0RlY2xhcmF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zRHJhd2JhY2tFbnRyeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0d1YXJhbnRlZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc2hvdXNlQnJva2VyTGljZW5zZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0l0ZW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNQcmVmZXJlbmNlSW5xdWlyeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc1JlbGVhc2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zVGFyaWZmTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zVHJhbnNoaXBtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zVmFsdWF0aW9uRGVjaXNpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1dE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGFuZ2Vyb3VzR29vZHNTZWN1cml0eU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGFuZ2Vyb3VzR29vZHNUcmFuc3BvcnRMaWNlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRhQXV0aGVudGljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGFJdGVtRGVzY3JpcHRpb25SZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGFRdWFsaXR5UmVqZWN0UmVhc29uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRhUmVsaWFiaWxpdHlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRhU291cmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRhU3RydWN0dXJlVGFnIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWFsZXJJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVhbGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWFsZXJPcmRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVhbGVycHVyY2hhc2VvcmRlcm51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVhbGVyVHlwZUlkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWJpdEFjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYml0Tm90ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGViaXRSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYnRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVidG9yc0FjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYnRvcnNSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlY2xhcmFudHNDdXN0b21zSWRlbnRpdHlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlY2xhcmFudHNSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlZmVjdENvZGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlZmVuc2VGZWRlcmFsQWNxdWlzaXRpb25SZWd1bGF0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVmZW5zZVByaW9yaXRpZXNBbGxvY2F0aW9uU3lzdGVtUHJpb3JpdHlSYXRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlZmVybWVudEFwcHJvdmFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWZlcnJlZFBheW1lbnRSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5Tm90ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5T3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5UXVvdGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5UmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeVJlZ2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlTY2hlZHVsZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlUaWNrZXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5VHJhaWxlck1hbmlmZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeVZlcmlmaWNhdGlvbkNlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZW5pYWxSZWFzb25JZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZW5zaXR5T3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbnRhbEluc3VyYW5jZUFjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbnRhbEluc3VyYW5jZVBvbGljeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVudGlzdExpY2Vuc2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydG1lbnRPckFnZW5jeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudG9mQWdyaWN1bHR1cmVBY3F1aXNpdGlvblJlZ3VsYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydG1lbnRvZkNvbW1lcmNlQWNxdWlzaXRpb25SZWd1bGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50T2ZEZWZlbnNlRm9ybTI1MFJlcXVpcmVtZW50Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudE9mRGVmZW5zZUlkZW50aWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRERUU0NOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50b2ZFZHVjYXRpb25BY3F1aXNpdGlvblJlZ3VsYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydG1lbnRvZkVuZXJneUFjcXVpc2l0aW9uUmVndWxhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSEhTQVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhVREFSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50b2ZJbnRlcmlvckFjcXVpc2l0aW9uUmVndWxhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudG9mSnVzdGljZUFjcXVpc2l0aW9uUmVndWxhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudG9mTGFib3JBY3F1aXNpdGlvblJlZ3VsYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydG1lbnRvZlN0YXRlQWNxdWlzaXRpb25SZWd1bGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50b2Z0aGVUcmVhc3VyeUFjcXVpc2l0aW9uT3JQcm9jdXJlbWVudFJlZ3VsYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydG1lbnRvZlRyYW5zcG9ydGF0aW9uQWNxdWlzaXRpb25SZWd1bGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50T2ZUcmFuc3BvcnRhdGlvbkJvbmROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydG1lbnRvZlRyYW5zcG9ydGF0aW9uSGF6YXJkb3VzTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50b2ZWZXRlcmFuc0FmZmFpcnNBY3F1aXNpdGlvblJlZ3VsYXRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50V2hlcmVJbmp1cnlPY2N1cnJlZElkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnR1cmVmcm9tU3BlY2lmaWNhdGlvbkNsYXNzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0dXJlZnJvbVNwZWNpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydHVyZWZyb21TcGVjaWZpY2F0aW9uVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGVuZGVudHNJbmZvcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwb3NpdEFjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcG9zaXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcG9zaXRvck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwb3NpdG9yeVRydXN0Q29tcGFueUlkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBvc2l0U2VxdWVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcmF0Q2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc2NyaXB0aW9uT2ZDaGFuZ2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXNwYXRjaEFkdmljZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzcGF0Y2hOb3RlUG9zdFBhcmNlbHNOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc3BhdGNoTm90ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzdGluYXRpb25vZlNoaXBtZW50SGFybW9uaXplZEJhc2VkQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlhZ25vc2lzUmVsYXRlZEdyb3VwTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXJlY3REZWJpdFJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlyZWN0b3J5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXJlY3RQYXltZW50VmFsdWF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXJlY3RQYXltZW50VmFsdWF0aW9uUmVxdWVzdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzYWJpbGl0eUluc3VyYW5jZUFjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2FiaWxpdHlJbnN1cmFuY2VQb2xpY3lOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2NvdW50ZXJSZWdpc3RyYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3BlbnNhdGlvblJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzcG9zYWxUdXJuSW5Eb2N1bWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzcHV0ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpYnV0aW9uQ2VudGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXN0cmlidXRpb25MaXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXN0cmlidXRpb25TdGF0ZW1lbnRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXN0cmlidXRvckFzc2lnbmVkT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3RyaWJ1dG9yQXNzaWduZWRUcmFuc2FjdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpYnV0T3JJbnZvaWNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXN0cmlidXRvcnNBY2NvdW50SWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3RyaWJ1dG9yc0FjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3RyaWJ1dG9yc1JlcHJlc2VudGF0aXZlSWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3RyaWJ1dG9yc1NwbGl0QWdlbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3RyaWN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXZlcnNpb25BdXRob3JpdHlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpdmlzaW9uSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9ja2V0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2NrTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2NrUmVjZWlwdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRhcnlDcmVkaXRBbWVuZG1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50YXJ5Q3JlZGl0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGFyeVBheW1lbnRSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50YXRpb25BZmZlY3RlZE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRJZGVudGlmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudFZvbHVtZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9tZXN0aWNGbGlnaHROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvbWVzdGljSW52ZW50b3J5TWFuYWdlbWVudENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvbWljaWxlQnJhbmNoTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb21pbmlvbk9mQ2FuYWRhQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG93bnN0cmVhbVNoaXBwZXJDb250cmFjdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJhZnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyYWluaG9sZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJhd2Vlc1JlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJhd2luZ0xpc3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyYXdpbmdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyYXdpbmdSZXZpc2lvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJhd2luZ1R5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyaXZlcnNMaWNlbnNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcnVnRW5mb3JjZW1lbnRBZG1pbmlzdHJhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJ1Z0VuZm9yY2VtZW50QWRtaW5pc3RyYXRpb25PcmRlckJsYW5rTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcnVnRm9ybXVsYXJ5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEdW5BbmRCcmFkc3RyZWV0Q2FuYWRhczhEaWdpdFN0YW5kYXJkSW5kdXN0cmlhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVuQW5kQnJhZHN0cmVldFVTOERpZ2l0U3RhbmRhcmRJbmR1c3RyaWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEVU5TTnVtYmVyd2l0aEZvdXJDaGFyYWN0ZXJTdWZmaXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRVTlNOdW1iZXJEdW5BbmRCcmFkc3RyZWV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEdXBsaWNhdGVCaWxsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEdXBsaWNhdGVXYXliaWxsaW5Sb3V0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVwbGljYXRlV2F5YmlsbE5vdEluUm91dGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1dHlGcmVlUHJvZHVjdHNSZWNlaXB0QXV0aG9yaXNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHV0eUZyZWVQcm9kdWN0c1NlY3VyaXR5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEdXR5TWVtb051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHllTG90TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFQ0NOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFZHVjYXRpb25hbEluc3RpdHV0aW9uSWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVsZWN0aW9uRGlzdHJpY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVsZWN0cm9uaWNEYXRhSW50ZXJjaGFuZ2VBZ3JlZW1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVsZWN0cm9uaWNkZXZpY2VwaW5udW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVsZWN0cm9uaWNGdW5kc1RyYW5zZmVySUROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVsZWN0cm9uaWNQYXltZW50UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGV2YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtYmFyZ29OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtYmFyZ29QZXJtaXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtZXJnZW5jeU9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbWlzc2lvbkRlc2lnbmF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVlT3JOb25FbXBsb3llZUNsYXNzaWZpY2F0aW9uUXVhbGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llZUlkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llZVRheEZpbGluZ1N0YXR1c0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVySWRlbnRpZmljYXRpb25OdW1iZXJPZlNlcnZpY2VCdXJlYXUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVyc0lkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llcnNTb2NpYWxTZWN1cml0eU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95bWVudFZpc2EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcHR5Q29udGFpbmVyQmlsbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wdHlSZXBvc2l0aW9uaW5nTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmRpbmdKb2JTZXF1ZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kaW5nS2FuYmFuU2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmRpbmdNZXRlclJlYWRpbmdBY3R1YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZGluZ01ldGVyUmVhZGluZ0VzdGltYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kaW5nUGFja2FnZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kaW5nU2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmRJdGVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmRJdGVtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmRNaWxlTWFya2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmRvcnNlbWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kVXNlQXV0aG9yaXphdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kVXNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmRVc2Vyc1B1cmNoYXNlT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZ2luZWVyaW5nQ2hhbmdlT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZ2luZWVyaW5nQ2hhbmdlUHJvcG9zYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZ2luZWVyaW5nRGF0YUxpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZ2luZWVyaW5nU3BlY2lmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5xdWlyeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW50cnlQb2ludEFzc2Vzc21lbnRMb2dOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVudHJ5UG9pbnRBc3Nlc3NtZW50TG9nTnVtYmVyQ2hpbGREbXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVudHJ5UG9pbnRBc3Nlc3NtZW50TG9nTnVtYmVyUGFyZW50RG1yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbnZpcm9ubWVudGFsUHJvdGVjdGlvbkFnZW5jeUFjcXVpc2l0aW9uUmVndWxhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW52aXJvbm1lbnRhbFByb3RlY3Rpb25BZ2VuY3lUZXN0VHlwZVB1cnBvc2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbnZpcm9ubWVudGFsUHJvdGVjdGlvbkFnZW5jeVRyYW5zcG9ydGVySWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWlwbWVudEluaXRpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWlwbWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50T3duZXJSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWlwbWVudFNlcXVlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVpcG1lbnRUcmFuc3BvcnRDaGFyZ2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWl2YWxlbnRDb3Vyc2VOdW1iZXJhdFJlcXVlc3RpbmdJbnN0aXR1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXJyb3JJZGVudGlmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzY3Jvd0ZpbGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZU9yZGVyUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZVNlcXVlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFdGVybXNSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV1cjFDZXJ0aWZpY2F0ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXZlbnRSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4Y2Vzc1RyYW5zcG9ydGF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGhpYml0RGlzdHJpYnV0aW9uTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhoaWJpdElkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGFuc2lvbm9uRWZmZWN0b2ZDaGFuZ2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cG9ydENsZWFyYW5jZUluc3RydWN0aW9uUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBvcnREZWNsYXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwb3J0ZXJzUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBvcnRFc3RhYmxpc2htZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBvcnRMaWNlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBvcnRQZXJtaXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cG9ydFJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXh0ZW5kZWRPckV4aGliaXRMaW5lSXRlbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFjaWxpdHlDZXJ0aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGYWNpbGl0eUlETnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGYWNpbGl0eU1lYXN1cmVtZW50UG9pbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhY2lsaXR5TmV0d29ya0lkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGYWlsdXJlQW5hbHlzaXNSZXBvcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhaWx1cmVtZWNoYW5pc21udW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhbWlseU1lbWJlcklkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGYW1pbHlVbml0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGYW5uaWVNYWVTZWxsZXJTZXJ2aWNlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbEFjcXVpc2l0aW9uUmVndWxhdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxCdXJlYXVPZkludmVzdGlnYXRpb25JbmRpdmlkdWFsSWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxDb21tdW5pY2F0aW9uc0NvbW1pc3Npb25Db25kaXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsQ29tbXVuaWNhdGlvbnNDb21taXNzaW9uSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbENvbW11bmljYXRpb25zQ29tbWlzc2lvblRyYWRlT3JCcmFuZElkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxFbmVyZ3lSZWd1bGF0b3J5Q29tbWlzc2lvbkNlcnRpZmljYXRlT2ZQdWJsaWNDb252ZW5pZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRkhMTUNEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsSG9tZUxvYW5Nb3J0Z2FnZUNvcnBvcmF0aW9uTG9hbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbEhvdXNpbmdBZG1pbmlzdHJhdGlvbkNhc2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNIVU1TIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsSG91c2luZ0FkbWluaXN0cmF0aW9uT3JpZ2luYXRvcklkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsSW5mb3JtYXRpb25SZXNvdXJjZXNNYW5hZ2VtZW50UmVndWxhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbE1hcml0aW1lQ29tbWlzc2lvbkZvcndhcmRlcnNOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxNYXJpdGltZUNvbW1pc3Npb25UYXJpZmZOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxOYXRpb25hbE1vcnRnYWdlQXNzb2NpYXRpb25Mb2FuTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsUmVndWxhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbFN1cHBseUNsYXNzaWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbFN1cHBseVNjaGVkdWxlSXRlbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbFN1cHBseVNjaGVkdWxlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsVGF4cGF5ZXJzSWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxXaXJlVHJhbnNmZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZFRFdJUkVDb25maXJtYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZVNjaGVkdWxlSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmllbGQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbGVDb252ZXJzaW9uSm91cm5hbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlsZUlkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaWxlSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlsZUxpbmVJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaWxlckNvZGVJc3N1ZWRieUJ1cmVhdU9mQ2Vuc3VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaWxlckNvZGVJc3N1ZWRCeUN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbGVUcmFuc2ZlckZvcm1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbGVUcmFuc2ZlclByb3RvY29sTG9jYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlsZVZlcnNpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbG1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFsU2VxdWVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFsV29ya0NhbmRpZGF0ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsQ2xhc3NpZmljYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbmNpYWxEZXRhaWxDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbmNpYWxNYW5hZ2VtZW50UmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbmNpYWxQaGFzZVJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsU2V0dGxlbWVudFBhcnR5c1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsVHJhbnNhY3Rpb25SZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluZUxpbmVDbGFzc2lmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluaXNoTG90TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdFRyYW5zZmVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXNjYWxDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXNjYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZsZWV0UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGV4aWJsZVNwZW5kaW5nQWNjb3VudEluc3VyYW5jZUFjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZsZXhpYmxlU3BlbmRpbmdBY2NvdW50SW5zdXJhbmNlUG9saWN5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbG9vZERhdGFJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbG9vZFpvbmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZsb29yTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbG9vclBsYW5BcHByb3ZhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxvd1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9sZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb29kQW5kRHJ1Z0FkbWluaXN0cmF0aW9uQWNjZXNzaW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb29kQW5kRHJ1Z0FkbWluaXN0cmF0aW9uUHJvZHVjdENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvb2RBbmREcnVnQWRtaW5pc3RyYXRpb25Qcm9kdWN0VHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWNsb3NpbmdTdGF0dXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVjbG9zdXJlQWNjb3VudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWlnbkV4Y2hhbmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JlaWduRXhjaGFuZ2VDb250cmFjdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWlnbk1pbGl0YXJ5U2FsZXNDYXNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JlaWduTWlsaXRhcnlTYWxlc05vdGljZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWlnbk1pbGl0YXJ5U2FsZXNOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVpZ25UcmFkZVpvbmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVzdHJ5UGVybWl0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JtYWxTdGF0ZW1lbnRSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9ybWF0aW9uSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9ybU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yUGlja3VwTGltaXRlZEZyZWlnaHRUYXJpZmZOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcndhcmRlcnNPckFnZW50c1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yd2FyZGluZ09yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJhbmNoaXNlVGF4QWNjb3VudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZGRpZU1hY1NlbGxlclNlcnZpY2VyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVlWm9uZUlkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWlnaHRCaWxsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVpZ2h0Rm9yd2FyZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVpZ2h0Rm9yd2FyZGVyc1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlaWdodFBheW9yUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdWxsVGltZU9yUGFydFRpbWVFbXBsb3llZUNsYXNzaWZpY2F0aW9uUXVhbGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdW5jdGlvbmFsQ2F0ZWdvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1bmN0aW9uYWxXb3JrR3JvdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1bmRDb2RlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdW5kSWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1bmRNYW5hZ2Vyc1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnVuZHNBdXRob3JpemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXNBbmFseXNpc1NvdXJjZU1ldGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXNDdXN0b2RpYW5JZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2F1Z2VUaWNrZXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdlbmVyYWxBZ2VuY3lOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdlbmVyYWxDYXJnb0NvbnNpZ25tZW50UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW5lcmFsRGVjbGFyYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdlbmVyYWxMZWRnZXJBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW5lcmFsT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdlbmVyYWxQdXJwb3NlTWVzc2FnZVJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VuZXJhbFNlcnZpY2VzQWRtaW5pc3RyYXRpb25SZWd1bGF0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VvZ3JhcGhpY0Rlc3RpbmF0aW9uWm9uZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VvZ3JhcGhpY0luZGV4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW9ncmFwaGljS2V5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW9ncmFwaGljTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW9ncmFwaGljU2NvcmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdpbm5pZU1hZVBvb2xQYWNrYWdlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb29kc0FuZFNlcnZpY2VzVGF4SWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdvb2RzYW5kU2VydmljZVRheFJlZ2lzdHJhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZHNEZWNsYXJhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJuaW5nQ2xhc3NDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb3Zlcm5tZW50QWNjb3VudGluZ0NsYXNzUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb3Zlcm5tZW50QWR2YW5jZVByb2dyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb3Zlcm5tZW50QWdlbmN5UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb3Zlcm5tZW50QmlsbE9mTGFkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb3Zlcm5tZW50QmlsbG9mTGFkaW5nT2ZmaWNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJubWVudENvbnRyYWN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb3Zlcm5tZW50UHJpb3JpdHlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdvdmVybm1lbnRRdWFsaXR5QXNzdXJhbmNlQW5kQ29udHJvbExldmVsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb3Zlcm5tZW50UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb3Zlcm5tZW50UmVnaXN0cmF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb3Zlcm5tZW50VHJhbnNwb3J0YXRpb25SZXF1ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmFpbkJsb2NrTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmFpbk9yZGVyUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmF2aXR5U291cmNlTWV0ZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdyZWVuQ2FyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JvdXBBY2NvdW50aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcm91cE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JvdXBPclBvbGljeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JvdXBXb3JrQ2FuZGlkYXRlU2VxdWVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3d0aEZhY3RvclJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3VhcmFudG9yTG9hbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3VhcmFudG9yVXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYXJtb25pc2VkU3lzdGVtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYXJtb25pemVkQ29kZVN5c3RlbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGFzdGVuaW5nTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYXphcmRvdXNDZXJ0aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYXphcmRvdXNFeGVtcHRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhemFyZG91c1dhc3RlTWFuaWZlc3REb2N1bWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhbHRoQ2FyZUZpbmFuY2luZ0FkbWluaXN0cmF0aW9uTmF0aW9uYWxQYXllcklkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFsdGhDYXJlRmluYW5jaW5nQWRtaW5pc3RyYXRpb25OYXRpb25hbFByb3ZpZGVySWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhbHRoY2FyZU1hbnBvd2VyU2hvcnRhZ2VBcmVhRmFjaWxpdHlJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhbHRoQ2VydGlmaWNhdGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhJQkNDTGFiZWxlcklkZW50aWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhbHRoSW5kdXN0cnlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYWx0aEluc3VyYW5jZUFjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYWx0aEluc3VyYW5jZUNsYWltTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFsdGhJbnN1cmFuY2VQb2xpY3lOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYWx0aEluc3VyYW5jZVJhdGluZ0FjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYWx0aEluc3VyYW5jZVJhdGluZ1N1ZmZpeENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYWx0aE1haW50ZW5hbmNlT3JnYW5pemF0aW9uUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFsdGhNYWludGVuYW5jZU9yZ2FuaXphdGlvbkF1dGhvcml6YXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYWx0aE1haW50ZW5hbmNlT3JnYW5pemF0aW9uQ29kZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhdENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhpZ2hPcldpZGVGaWxlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIaWdoRmFicmljYXRpb25BdXRob3JpemF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIaWdoUmF3TWF0ZXJpYWxBdXRob3JpemF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb21lTW9ydGdhZ2VEaXNjbG9zdXJlQWN0Q2Vuc3VzVHJhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvbWVNb3J0Z2FnZURpc2Nsb3N1cmVBY3RCbG9ja051bWJlckFyZWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvbWVNb3J0Z2FnZURpc2Nsb3N1cmVBY3RDb3VudHlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb21lTW9ydGdhZ2VEaXNjbG9zdXJlQWN0TWV0cm9wb2xpdGFuU3RhdGlzdGljYWxBcmVhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb21lTW9ydGdhZ2VEaXNjbG9zdXJlQWN0U3RhdGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3Jpem9udGFsQ29vcmRpbmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9yc2Vwb3dlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG90Um9sbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG91c2VCaWxsT2ZMYWRpbmdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvdXNlV2F5YmlsbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSWF0YUNhcmdvQWdlbnRDYXNzQWRkcmVzc051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSWF0YUNhcmdvQWdlbnRDb2RlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJQ0Q5Q00iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklkZW50aWZpY2F0aW9uQ2FyZFNlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSWRlbnRpdHlDYXJkTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbWFnZUlkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkltbWVkaWF0ZUV4cG9ydGF0aW9uTm9Gb3JJbkJvbmRNb3ZlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW1tZWRpYXRlVHJhbnNwb3J0YXRpb25Ob0ZvckluQm9uZE1vdmVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXBsZW1lbnRhdGlvblZlcnNpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkltcG9ydENsZWFyYW5jZUluc3RydWN0aW9uUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXBvcnRlclJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW1wb3J0ZXJzUmVmZXJlbmNlTnVtYmVyVG9MZXR0ZXJPZkNyZWRpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW1wb3J0TGljZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW1wb3J0UGVybWl0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXB1dGF0aW9uQWNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5Cb25kTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmJvdW5kVG9Pck91dGJvdW5kRnJvbVBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmJvdW5kVG9QYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5jaWRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluY29ycG9yYXRlZExlZ2FsUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmRpdmlkdWFsVHJhbnNhY3Rpb25SZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluaXRpYWxEZWFsZXJDbGFpbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5pdGlhbEZhaWx1cmVDbGFpbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5pdGlhbFNhbXBsZUluc3BlY3Rpb25SZXBvcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluaXRpYWxUcm91YmxlSW5kaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5sYW5kVHJhbnNwb3J0T3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklucXVpcnlSZXF1ZXN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnNwZWN0aW9uYW5kU3VydmV5U2VxdWVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3BlY3Rpb25SZXBvcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3BlY3RvcklkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN0aXR1dGVPZlNlY3VyaXR5QW5kRnV0dXJlTWFya2V0RGV2ZWxvcG1lbnRTZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3RpdHV0aW9uTG9hbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdGl0dXRpb25Ob3RlSG9sZGVySWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3RpdHV0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmFuY2VDZXJ0aWZpY2F0ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJhbmNlQ2VydGlmaWNhdGVSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyYW5jZUNvbnRyYWN0UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmFuY2VMaWNlbnNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmFuY2VQb2xpY3lOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyZWRMb2NhdGlvbklkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyZWRQYXJjZWxQb3N0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmVkc0xvYW5OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyZXJBc3NpZ25lZFJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJvclBvb2xJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZWdyYXRlZExvZ2lzdGljU3VwcG9ydENyb3NzUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlZ3JhdGVkTWFzdGVyUGxhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZWdyYXRlZE1hc3RlclNjaGVkdWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcmNoYW5nZUFncmVlbWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJjaGFuZ2VOdW1iZXJOZXciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVyY2hhbmdlTnVtYmVyT2xkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcmNoYW5nZVRyYWluSWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVyZ292ZXJubWVudGFsTWFyaXRpbWVPcmdhbml6YXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVyaW1GdW5kaW5nT3JnYW5pemF0aW9uTG9hbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJtZWRpYXJ5QnJva2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm5hbENvbnRyb2xOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmFsQ3VzdG9tZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmFsRGF0YVByb2Nlc3NOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmFsT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmFsUHVyY2hhc2VPcmRlckl0ZW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmFsUHVyY2hhc2VPcmRlclJlbGVhc2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmFsVmVuZG9yTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm5hdGlvbmFsQXNzZXNzbWVudExvZ051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJuYXRpb25hbEFzc2Vzc21lbnRMb2dOdW1iZXJDaGlsZERhdGFNYWludGVuYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJuYXRpb25hbEFzc2Vzc21lbnRMb2dOdW1iZXJQYXJlbnREYXRhTWFpbnRlbmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmF0aW9uYWxGbGlnaHROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmF0aW9uYWxGdWVsVGF4QWdyZWVtZW50QWNjb3VudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJuYXRpb25hbFJlZ2lzdHJhdGlvblBsYW5BY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm5hdGlvbmFsUmVnaXN0cmF0aW9uUGxhblN0aWNrZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmF0aW9uYWxTdGFuZGFyZEluZHVzdHJpYWxDbGFzc2lmaWNhdGlvbkRvbWluaW9uT2ZDYW5hZGFDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm5hdGlvbmFsU3RhbmRhcmRJbmR1c3RyeUNsYXNzaWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJzdGF0ZUNvbW1lcmNlQ29tbWlzc2lvbkFjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVydmlld2VySUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludHJhUGxhbnRSb3V0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlbnRvcnlSZXBvcnRSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVzdGlnYXRvcmlhbE5ld0RydWdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVzdG1lbnRSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVzdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlc3RvckFzc2lnbmVkSWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVzdG9yTG9hbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52ZXN0b3JOb3RlSG9sZGVySWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikludm9pY2VJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52b2ljZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52b2ljZU51bWJlclN1ZmZpeCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52b2ljaW5nRGF0YVNoZWV0UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJcm9uQ2hhcmdlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJU0ZNRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXNzdWVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Iklzc3Vlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXNzdWluZ0JhbmtzUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJdGVtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKb2JPclByb2plY3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkpvYk9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKb2JTZXF1ZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSm9pbnRDcmVkaXRTcGVjaWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKb2ludGx5QWRtaW5pc3RlcmVkQ2FzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSm9pbnRWZW50dXJlUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKdWRnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSnVkZ21lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikp1ZGljaWFsRGlzdHJpY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikp1ZGljaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKdXJpc2RpY3Rpb25hbENvbW11bml0eU5hbWVJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKdXJpc2RpY3Rpb25hbENvbW11bml0eU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFib3JhdG9yeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFib3JhdG9yeVJlZ2lzdHJhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFib3JPcGVyYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm9yb3JBZmZpbGlhdGlvbklkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYW5lTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0VHJhbnNmZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhdGl0dWRlRXhwcmVzc2VkaW5EZWdyZWVzTWludXRlc2FuZFNlY29uZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhdGl0dWRlRXhwcmVzc2VkaW5TZWNvbmRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWFkQ2FzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhc2VBZ3JlZW1lbnRBbWVuZG1lbnROdW1iZXJNYXN0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlYXNlQ29udHJhY3RSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlYXNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWFzZVJpZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWFzZVNjaGVkdWxlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWFzZVNjaGVkdWxlTnVtYmVyQmxhbmtldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhc2VTY2hlZHVsZU51bWJlclByaW9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWFzZVNjaGVkdWxlTnVtYmVyUmVwbGFjZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlbmRlckFjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlbmRlckNhc2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlbmRlckVudGl0eU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVuZGVyVXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZXNzZWVCaWxsQ29kZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVzc2VlSWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxldHRlcm9mQ3JlZGl0RHJhZnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxldHRlck9mQ3JlZGl0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZXR0ZXJvZkNyZWRpdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGV0dGVyc29yTm90ZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxldnlpbmdPZmZpY2VySWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpY2Vuc2VQbGF0ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlmZUluc3VyYW5jZUJpbGxpbmdBY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWZlSW5zdXJhbmNlQmlsbGluZ1N1ZmZpeENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpZmVJbnN1cmFuY2VQb2xpY3lOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpbWl0ZWRQYXJ0bmVyc2hpcElkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaW5lSXRlbUNvbnRyb2xOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpbmVJdGVtSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGluZUl0ZW1SZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpbmVvZkJ1c2luZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaW5lT2ZDcmVkaXRDYXRlZ29yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlua1NlcXVlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaXN0QmlsbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlzdE9mTWF0ZXJpYWxzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMbG95ZHNDbGFpbXNPZmZpY2VSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYWRpbmdBdXRob3JpemF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2FkTGluZUNlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2FkUGxhbm5pbmdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYW5BY3F1aXNpdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hbkZlYXR1cmVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2FuTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2FuUHJvc3BlY3RvcktleU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hblJlcXVlc3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYW5UeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhbEp1cmlzZGljdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYWxseUFzc2lnbmVkQ29udHJvbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYWxNZWRpYUlkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2FsU2Nob29sQ291cnNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhbFNjaG9vbERpc3RyaWN0Q291cnNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhbFN0dWRlbnRJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYXRpb25FeGNlcHRpb25PcmRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2F0aW9ub25Qcm9kdWN0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYXRpb25TcGVjaWZpY1NlcnZpY2VzUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhdGlvbldpdGhpbkVxdWlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9ja2JveCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2dpY2FsT2JzZXJ2YXRpb25JZGVudGlmaWVyTmFtZXNhbmRDb2RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9naXN0aWNzU3VwcG9ydERvY3VtZW50YXRpb25UeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9uZ2l0dWRlRXhwcmVzc2VkSW5EZWdyZWVzTWludXRlc2FuZFNlY29uZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvbmdpdHVkZUV4cHJlc3NlZGluU2Vjb25kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9uZ1Rlcm1EaXNhYmlsaXR5UG9saWN5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3NzT3JFdmVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9zc1JlcG9ydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG90TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3dlckFydGljbGVOdW1iZXJPZlJhbmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWdhemluZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haWxib3giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haWxpbmdSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haWxTbG90Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWludGVuYW5jZUF2YWlsYWJpbGl0eVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haW50ZW5hbmNlUmVxdWVzdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFqb3JGb3JjZVByb2dyYW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1ham9yU3lzdGVtQWZmZWN0ZWRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWtlZ29vZENvbW1lcmNpYWxMaW5lTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW1tb2dyYXBoeUNlcnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbmFnZWRDYXJlT3JnYW5pemF0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFuYWdlZENhcmVPcmdhbml6YXRpb25JZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFuaWZlc3RLZXlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbnVhbFByb2Nlc3NpbmdBdXRob3JpdHlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbnVmYWN0dXJlckRlZmluZWRSZXBhaXJSYXRlc1JlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFudWZhY3R1cmVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW51ZmFjdHVyZXJzTWF0ZXJpYWxTYWZldHlEYXRhU2hlZXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbnVmYWN0dXJlcnNQYXJ0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW51ZmFjdHVyaW5nRGlyZWN0aXZlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW51ZmFjdHVyaW5nT3BlcmF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW51ZmFjdHVyaW5nT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFwUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXJpdGltZURlY2xhcmF0aW9ub2ZIZWFsdGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcmtldEFyZWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcmtpbmdPckxhYmVsUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXN0ZXJBY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXN0ZXJBaXJXYXliaWxsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXN0ZXJCaWxsT2ZMYWRpbmdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hc3RlckNvbnRyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXN0ZXJMYWJlbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFzdGVyTGVhc2VBZ3JlZW1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hc3RlclBvbGljeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFzdGVyUHJvcGVydHlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hc3RlclJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFzdGVyU29saWNpdGF0aW9uUHJvY2VkdXJlc1Rlcm1zQW5kQ29uZGl0aW9uc051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0ZXJpYWxDaGFuZ2VOb3RpY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFsU3RvcmFnZUxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXR1cmVkQ2VydGlmaWNhdGVPZkRlcG9zaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lYXRQcm9jZXNzaW5nRXN0YWJsaXNobWVudFJlZ2lzdHJhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaWNhaWRQcm92aWRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaWNhaWRSZWNpcGllbnRJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaWNhbEFzc2lzdGFuY2VDYXRlZ29yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaWNhbFJlY29yZElkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FyZVByb3ZpZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FyZVZlcnNpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZW1iZXJJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVtYmVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXJjaGFuZGlzZVR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXJjaGFudENhdGVnb3J5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVzc2FnZUFkZHJlc3NvcklEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXNzYWdlQmF0Y2hOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lc3NhZ2VEZXNpZ25Hcm91cE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVzc2FnZVJlY2lwaWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVzc2FnZVNlbmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWV0ZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1ldGVyUHJvdmluZ1JlcG9ydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWV0ZXJSZWFkaW5nQXRUaGVCZWdpbm5pbmdPZlRoZURlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXRlclJlYWRpbmdBdFRoZUVuZE9mRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1ldGVyVGlja2V0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXRlclVuaXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1JQ1JOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pY3JvZmlsbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlncmFudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlsZXN0b25lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaWxpdGFyeUNhbGxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbGl0YXJ5SUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbGl0YXJ5SW50ZXJkZXBhcnRtZW50YWxQdXJjaGFzZVJlcXVlc3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbGl0YXJ5T3JkbmFuY2VTZWN1cml0eVJpc2tOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbGl0YXJ5UmFua09yQ2l2aWxpYW5QYXlHcmFkZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlsaXRhcnlTcGVjaWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaWxpdGFyeVN0YW5kYXJkTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaWxsaW5naW5UcmFuc2l0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaWxsT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1Sb3lhbHR5UGF5b3JJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaXN0ZXJpYWxDZXJ0aWZpY2F0ZU9mSG9tb2xvZ2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb2RlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9kZWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vZGVseWVhcm51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTU9STkVUUGx1c0Nhc2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1PUk5FVFBsdXNJbnN0aXR1dGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTU9STkVUUGx1c1VzZXJJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9ydGdhZ2VCYWNrZWRTZWN1cml0eUxvYW5OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vcnRnYWdlQmFja2VkU2VjdXJpdHlQb29sTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3J0Z2FnZUVsZWN0cm9uaWNSZWdpc3RyYXRpb25TeXN0ZW1Pcmdhbml6YXRpb25JZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3J0Z2FnZWVMb2FuTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3J0Z2FnZUlkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3J0Z2FnZUluc3VyYW5jZUNvbXBhbnlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vcnRnYWdlSW5zdXJhbmNlSW5kaWNhdG9yTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3J0Z2FnZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW90b3JDYXJyaWVySWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vdG9yRnVlbENlcnRpZmljYXRlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3RvclZlaGljbGVJRE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTXVsdGlmYW1pbHlQcm9qZWN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNdWx0aXBsZUxpc3RpbmdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik11bHRpcGxlTGlzdGluZ1NlcnZpY2VBcmVhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNdWx0aXBsZUxpc3RpbmdTZXJ2aWNlQm9va1R5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik11bHRpcGxlTGlzdGluZ1NlcnZpY2VNYXBYQ29vcmRpbmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTXVsdGlwbGVMaXN0aW5nU2VydmljZU1hcFlDb29yZGluYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNdWx0aXBsZUxpc3RpbmdTZXJ2aWNlU3ViQXJlYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTXVsdGlwbGVQT09mQW5JbnZvaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNdWx0aXBsZVpvbmVPcmRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTXVuaWNpcGFsaXR5QXNzaWduZWRCdXNpbmVzc1JlZ2lzdHJ5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOQUNFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOQUYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hbWVkQmFua3NSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsQWVyb25hdXRpY3NhbmRTcGFjZUFkbWluaXN0cmF0aW9uRkFSU3VwcGxlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxBc3NvY2lhdGlvbk9mQm9hcmRzT2ZQaGFybWFjeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxBc3NvY2lhdGlvbk9mSW5zdXJhbmNlQ29tbWlzc2lvbmVyc0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsQnVzaW5lc3NJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxDcmltaW5hbEluZm9ybWF0aW9uQ2VudGVyT3JpZ2luYXRpbmdBZ2VuY3lJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxGbG9vZEluc3VyYW5jZVByb2dyYW1Db21tdW5pdHlOYW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbEZsb29kSW5zdXJhbmNlUHJvZ3JhbUNvbW11bml0eU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxGbG9vZEluc3VyYW5jZVByb2dyYW1Db3VudHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsRmxvb2RJbnN1cmFuY2VQcm9ncmFtTWFwTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbEZsb29kSW5zdXJhbmNlUHJvZ3JhbVN0YXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbEdvdmVybm1lbnRCdXNpbmVzc0lkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbFByb3BlcnR5UmVnaXN0cnlTeXN0ZW1MZXZlbDEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsUHJvcGVydHlSZWdpc3RyeVN5c3RlbUxldmVsMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxQcm9wZXJ0eVJlZ2lzdHJ5U3lzdGVtTGV2ZWwzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbFN0b2NrTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXR1cmFsR2FzUG9saWN5QWN0Q2F0ZWdvcnlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXdEcnVnQXBwbGljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld0hlYWx0aEluc3VyYW5jZUNsYWltTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXdQYXJ0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXh0UmVudGFsQWdyZWVtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXh0UmVudGFsQWdyZWVtZW50UmVhc29uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXh0U2hpcG1lbnRJZGVudGlmaWNhdGlvbk51bWJlckNvbnRpbnVvdXNNb3ZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOSVQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbWluYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbkFtZXJpY2FuSWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbkNvbmZvcm1hbmNlUmVwb3J0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25OZWdvdGlhYmxlTWFyaXRpbWVUcmFuc3BvcnREb2N1bWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uT3JpZ2luYXRpbmdUaGlyZFBhcnR5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25QaWNrdXBMaW1pdGVkVGFyaWZmTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25Qcm92aXNpb25hbFBhdGVudEFwcGxpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25TcG91c2VUaWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vT1Q1QXV0aG9yaXR5WmVyb01pbGVhZ2VSYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3J0aEFtZXJpY2FuRGF0dW1TdGFuZGFyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9ydGhBbWVyaWNhbkZyZWVUcmFkZUFncmVlbWVudENvbXBsaWFuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vcnRoQW1lcmljYW5IYXphcmRvdXNDbGFzc2lmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9ydGhBbWVyaWNhbkhhemFyZG91c0dvb2RzQ2xhc3NpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vcnRoQW1lcmljYW5JbmR1c3RyaWFsQ2xhc3NpZmljYXRpb25TeXN0ZW1Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOT1RJQ09MIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlRlbXBvcmFyeUltcG9ydGF0aW9uRG9jdW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWVyb2RlQ2VkdWxhZGVJZGVudGlkYWROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWVyb2RlSWRlbnRpZmljYWNpb25UcmlidXRhcmlhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPYmplY3RJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPY2N1cGF0aW9uYWxTYWZldHlhbmRIZWFsdGhBZG1pbmlzdHJhdGlvbkNsYWltTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPY2N1cGF0aW9uQ2xhc3NpZmljYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPY2N1cGF0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2NlYW5CaWxsb2ZMYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9jZWFuQ29udGFpbmVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPY2Vhbk1hbmlmZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZlbmRlclRyYWNraW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZlbnNlVHJhY2tpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZmVyR3JvdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZmVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZpY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZmljZXJMaWNlbnNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZpY2VTeW1ib2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9sZEFjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9sZE1ldGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbGRQYXJ0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbmVDYWxsQWdlbmN5VGlja2V0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbmxpbmVQcm9jdXJlbWVudGFuZEFjY291bnRpbmdDb250cm9sVHJhbnNhY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wZW5hbmRQcmVwYWlkU3RhdGlvbkxpc3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wZXJhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3BlcmF0b3JBc3NpZ25lZFVuaXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wZXJhdG9ySWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wZXJhdG9yTGVhc2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wdGlvblBvbGljeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JkZXJPclBhcmFncmFwaE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JkZXJpbmdDdXN0b21lckNvbnNpZ25tZW50UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlcmluZ0N1c3RvbWVyc1NlY29uZFJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlbmRvck9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmdhbml6YXRpb25CcmVha2Rvd25TdHJ1Y3R1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsQ2VydGlmaWNhdGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsRmRvVHJhbnNhY3Rpb25SZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsRmlsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbEZpbGluZ051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luYWxJbnZvaWNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbFB1cmNoYXNlT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbFJldHVyblJlcXVlc3RSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsU2hpcHBlcnNCaWxsT2ZMYWRpbmdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsU3VibWl0dGVyQ2hpbGREYXRhTWFpbnRlbmFuY2VSZXF1ZXN0TG9nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbFN1Ym1pdHRlckxvZ051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luYWxTdWJtaXR0ZXJQYXJlbnREYXRhTWFpbnRlbmFuY2VSZXF1ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbFVuaWZvcm1Db21tZXJjaWFsQ29kZUZpbGluZ051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luYWxWb3VjaGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hdGluZ0Nhc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmF0aW5nQ29tcGFueUlkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmF0aW5nRGVwb3NpdG9yeUZpbmFuY2lhbEluc3RpdHV0aW9uSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luYXRvcnNSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbkhvdXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5PZlNoaXBtZW50SGFybW9uaXplZEJhc2VkQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT1Q1QXV0aG9yaXR5Q29uZGl0aW9uT3JSZXN0cmljdGlvbm9uQ2FySGlyZVJhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyVW5saXN0ZWRUeXBlT2ZSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik91dGJvdW5kRnJvbVBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdXRlckNvbnRpbmVudGFsU2hlbGZBcmVhQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0ZXJDb250aW5lbnRhbFNoZWxmQmxvY2tOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik91dGVycGFja2FnaW5nVW5pdElkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdXRsZXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik91dG9mU2VydmljZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3duaW5nQnVyZWF1SWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhY2tBbmRIb2xkSW52b2ljZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFja2FnZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFja2FnaW5nR3JvdXBOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhY2thZ2luZ1NwZWNpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhY2thZ2luZ1VuaXRJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFja2VyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNrZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhY2tpbmdHcm91cENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhY2tpbmdMaXN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNraW5nUGxhbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhZ2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcmFncmFwaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFyYWdyYXBoTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJhbWVkaWNhbElETnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJlbnRGaWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0Q2F1c2luZ1JlcGFpck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydENvbnNpZ25tZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0aWFsUGF5bWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydGljaXBhdGluZ0FyZWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnRJbnRlcmNoYW5nZWFiaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnRSZWZlcmVuY2VJbmRpY2F0b3JJbkFEcmF3aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eUluZm9ybWF0aW9uTWVzc2FnZVJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlTZXF1ZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFzc3BvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhc3Nwb3J0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXRlbnRDb29wZXJhdGlvblRyZWF0eUFwcGxpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXRlbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhdGVudFR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhdGllbnRBY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXRyb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheWVlSWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheWVlTG9hbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5ZWVzRmluYW5jaWFsSW5zdGl0dXRpb25BY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXllZXNGaW5hbmNpYWxJbnN0aXR1dGlvblRyYW5zaXRSb3V0aW5nTm8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheWVlc1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5ZXJBc3NpZ25lZFJlc3VibWlzc2lvblJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5ZXJDYXRlZ29yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5ZXJJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5ZXJzRmluYW5jaWFsSW5zdGl0dXRpb25BY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXllcnNGaW5hbmNpYWxJbnN0aXR1dGlvblRyYW5zaXRSb3V0aW5nTm8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheWVyc1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5R3JhZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRDYXRlZ29yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudEhpc3RvcnlSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRJbkFkdmFuY2VSZXF1ZXN0UmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50SW5zdGFsbWVudFJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudExvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50T3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRQbGFuUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50UmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50VmFsdWF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXlvcnNDbGFpbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5cm9sbEFjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheXJvbGxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBjc0NhdGFzdHJvcGhlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZWVyUmV2aWV3T3JnYW5pemF0aW9uQXBwcm92YWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlbmRpbmdDYXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZW5zaW9uQ29udHJhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcmlvZGljaXR5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVybWl0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJzb25hbElkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJzb25hbElkZW50aXR5Q2FyZE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyc29uYWxJRE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGV0cm9sZXVtUG9vbENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBoYXJtYWN5UHJlc2NyaXB0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaG9uZUNhbGxzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaHlzaWNhbEludmVudG9yeVJlY291bnRSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpY2t1cFJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGljdHVyZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGljdHVyZU9mQWN0dWFsUHJvZHVjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGljdHVyZU9mQUdlbmVyaWNQcm9kdWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWdneWJhY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpbG90TGljZW5zZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlwZWxpbmVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW5OZXR3b3JrSWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW5uaW5nUGFja2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYXRlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGF0Zm9ybUlkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbG90RmlsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGx1Z051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9saWN5Rm9ybU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9saWN5TGlua051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9saWN5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb2xpY3lUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb2xsdXRhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvb2xDb250cmFjdENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvb2xOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvb2xTdWZmaXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvc2l0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9zdEVudHJ5UmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVBd2FyZFN1cnZleSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlY2luY3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWRlY2Vzc29yQWNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlZGV0ZXJtaW5hdGlvbm9mQmVuZWZpdHNJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlZmVycmVkQ2FsbFNpZ24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWZlcnJlZFByb3ZpZGVyT3JnYW5pemF0aW9uQXV0aG9yaXphdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlZmVycmVkUHJvdmlkZXJPcmdhbml6YXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWZlcnJlZFByb3ZpZGVyT3JnYW5pemF0aW9uU2l0ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlbGltaW5hcnlXb3JrQ2FuZGlkYXRlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVtYXJrZXRBcHBsaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlbWFya2V0Tm90aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVtaXVtQXVkaXRQcmlvcml0eUlkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZW1pdW1BdWRpdFB1cnBvc2VJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVtaXVtQXVkaXRUeXBlSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlbWl1bVJhdGVUYWJsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlcGFyZXJzVmVyaWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVzZW50aW5nQmFua3NSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXNzRm9ybUlkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXNzSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNCaWxsb2ZMYWRpbmdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzQ2FyZ29Db250cm9sTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c0NsYWltSGlzdG9yeUlkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzQ29udHJhY3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzQ291cnNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c0NyZWRpdE9yRGViaXRBZGp1c3RtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c0NyZWRpdEFkdmljZVJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNDdXN0b21lclJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNEZWxpdmVyeUluc3RydWN0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c0RlbGl2ZXJ5U2NoZWR1bGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzRGlzdHJpYnV0b3JOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzRHJpdmVyc0xpY2Vuc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzRHJ1Z0VuZm9yY2VtZW50QWRtaW5pc3RyYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzSGlnaGVzdFNjaGVkdWxlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c0ludm9pY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzbHlSZXBvcnRlZFNvY2lhbFNlY3VyaXR5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c01lbWJlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNQb2xpY3lOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzUmVudGFsQWdyZWVtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c1JlcG9ydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNSZXF1ZXN0Rm9yTWV0ZXJlZFJlYWRpbmdSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzU2NoZW1lT3JQbGFuTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c1NlcXVlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c1NoaXBtZW50SWRlbnRpZmljYXRpb25OdW1iZXJDb250aW51b3VzTW92ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNUYXhDb250cm9sTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c1RpY2tldE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpY2VPclNhbGVzQ2F0YWxvZ3VlUmVzcG9uc2VSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaWNlQXJlYU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpY2VMaXN0Q2hhbmdlb3JJc3N1ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpY2VMaXN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmljZUxpc3RWZXJzaW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmljZVF1b3RlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmljZVZhcmlhdGlvbkZvcm11bGFSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1hcnlSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1lQ29udHJhY3RvckNvbnRyYWN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmluY2lwYWxSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW5jaXBhbHNCYW5rUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmluY2lwYWxzUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvckF1dGhvcml6YXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW9yQ2FzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JDZXJ0aWZpY2F0ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JDb250cmFjdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JEYXRhVW5pdmVyc2FsTnVtYmVyU3lzdGVtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvckhlYWx0aEluZHVzdHJ5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvcklkZW50aWZpZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW9ySW5jb3JyZWN0QmF0Y2hOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW9ySW5jb3JyZWN0U29jaWFsU2VjdXJpdHlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW9yaXR5UmF0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvckxvYW5OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW9yUGhvbmVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW9yUG9saWN5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvclBvc3RhbFppcENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW9yUHVyY2hhc2VPcmRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JwdXJjaGFzZW9yZGVybnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvclRheElkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvclRyYWRpbmdQYXJ0bmVySWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW9yVW5pdmVyc2FsUHJvdmlkZXJJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvY2VlZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvY2Vzc0hhbmRsaW5nQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvY2Vzc2luZ0FyZWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2Nlc3NpbmdQbGFudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvY2Vzc29ySWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2Nlc3NvcnNJbnZvaWNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9jdXJlbWVudEJ1ZGdldE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvY3VyZW1lbnRSZXF1ZXN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9jdXJpbmdBZ2VuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3RDaGFuZ2VBdXRob3JpdHlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3RDaGFuZ2VJbmZvcm1hdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdENoYW5nZU5vdGljZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdEdyb3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdExpY2Vuc2luZ0FncmVlbWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdExpbmVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3RQZXJpb2RGb3JXaGljaExhYm9yQ29zdHNBcmVGaXJtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0UmVzZXJ2YXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3RTb3VyY2luZ0FncmVlbWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdFNwZWNpZmljYXRpb25Eb2N1bWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdFR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2ZpbGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2Zvcm1hSW52b2ljZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZ3JhbUlkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9ncmVzc1BheW1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2plY3RDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0UGFyYWdyYXBoTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0UHJvcGVydHlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2plY3RTcGVjaWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9tb3Rpb25PckRlYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb29mT2ZEZWxpdmVyeVJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvcGVydHlDb21wb25lbnRMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvcGVydHlDb250cm9sTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9wZXJ0eUxvc3NJdGVtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9wb3NhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvcG9zYWxQYXJhZ3JhcGhOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3Bvc2VkQ29udHJhY3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3Bvc2VkR3JvdXBXb3JrQ2FuZGlkYXRlU2VxdWVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3Bvc2VkU2VxdWVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3Bvc2VkV29ya0NhbmRpZGF0ZVNlcXVlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm90b2NvbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvdHJhY3Rpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3ZpZGVyQ2xhaW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3ZpZGVyQ29tbWVyY2lhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvdmlkZXJDb250cm9sTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm92aWRlck9yZGVyVGlja2V0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm92aWRlclBsYW5OZXR3b3JrSWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3ZpZGVyU2l0ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvdmlkZXJVUElOTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm92aW5jaWFsQ2FuYWRpYW5TYWxlc1RheEV4ZW1wdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvdmluY2lhbFRheElkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm92aXNpb25hbFBhdGVudEFwcGxpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdWJsaWNhdGlvbklzc3VlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdWJsaWNEZWVkTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdWJsaWNGaWxpbmdSZWdpc3RyYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1YmxpY1V0aWxpdGllc0NvbW1pc3Npb25DZXJ0aWZpY2F0ZU9mUHVibGljQ29udmVuaWVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlRGVzY3JpcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlT3B0aW9uQWdyZWVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdXJjaGFzZU9yZGVyQ2hhbmdlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdXJjaGFzZU9yZGVyTGluZUl0ZW1JZGVudGlmaWVyQnV5ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlT3JkZXJOdW1iZXJJbmNsdWRlZGluT25PcmRlclBvc2l0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdXJjaGFzZU9yZGVyTnVtYmVyT2ZPcmRlclJlY2VpdmVkU2luY2VMYXN0UmVwb3J0aW5nRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVyY2hhc2VPcmRlck51bWJlck9mU2hpcG1lbnRSZWNlaXZlZFNpbmNlTGFzdFJlcG9ydGluZ0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlT3JkZXJOdW1iZXJTdWZmaXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlT3JkZXJSZXNwb25zZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVyY2hhc2VPcmRlclJldmlzaW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdXJjaGFzZVJlcXVpc2l0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdXJjaGFzZXJzUmVxdWVzdFJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVyY2hhc2luZ0FjdGl2aXR5Q2xhdXNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFsaWZpZWRNYXRlcmlhbHNMaXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFsaWZpZWRQcm9kdWN0c0xpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YWxpdHlDbGF1c2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YWxpdHlEaXNwb3NpdGlvbkFyZWFJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFsaXR5SW5zcGVjdGlvbkFyZWFJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFsaXR5UmVwb3J0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFsaXR5UmV2aWV3TWF0ZXJpYWxDcmliSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlWYWx1YXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5VmFsdWF0aW9uUmVxdWVzdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhcmFudGluZU9yVHJlYXRtZW50U3RhdHVzUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFydGVyUXVhcnRlclNlY3Rpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YXJ0ZXJRdWFydGVyU3BvdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVlc3Rpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1b3RhTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdW90ZU9yU2hvcHBpbmdDYXJ0SUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhY2tUeXBlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsT3JSb2FkUm91dGluZ0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhaWxyb2FkQ29tbWlzc2lvbk9pbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbHJvYWRDb21taXNzaW9uUmVjb3JkTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsUm91dGluZ0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhaWxXYXlCaWxsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsd2F5Q29uc2lnbm1lbnROb3RlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsd2F5V2Fnb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhbmdlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYXRlQ2FyZE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmF0ZUNvZGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhdGVDb25mZXJlbmNlSURDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYXRlTm90ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmF0aW5nUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYXdtYXRlcmlhbFN1cHBsaWVyRHVuQW5kQnJhZHN0cmVldE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhbEVzdGF0ZU93bmVkUHJvcGVydHlJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWFzb25Gb3JDaGFuZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYXNvbk5vdExvd2VzdENvc3RDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWJhdGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2FsbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWlwdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2ZWROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmVyQXNzaWduZWREcm9wWm9uZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2ZXJDbGFpbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2ZXJJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2ZXJJRFF1YWxpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2ZXJzRmlsZVJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2ZXJTdWJJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2aW5nQWR2aWNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXZpbmdCYW5rc0F1dGhvcml6YXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmluZ0NvbXBhbnlJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXZpbmdEZXBvc2l0b3J5RmluYW5jaWFsSW5zdGl0dXRpb25JZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXZpbmdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmluZ1BhcnR5c01lbWJlcklkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNvbmNpbGlhdGlvblJlcG9ydFNlY3Rpb25JZGVudGlmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY29yZGluZ051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVkdWNlZEVhcm5pbmdXZWVrSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVlbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJlbmNlZEJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZlcmVuY2VkUGF0dGVybklkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZlcmVuY2VEcmF3aW5nTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZlcmVuY2VOdW1iZXJBc3NpZ25lZEJ5VGhpcmRQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJlbmNlTnVtYmVyT2ZBUmVxdWVzdEZvck1ldGVyZWRSZWFkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZlcmVuY2VOdW1iZXJRdW90ZWRPblN0YXRlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJlbmNlTnVtYmVyVG9QcmV2aW91c01lc3NhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVyZW5jZVZlcnNpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVycmFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZlcnJlZFByb2R1Y3RGb3JDaGVtaWNhbEFuYWx5c2lzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZlcnJlZFByb2R1Y3RGb3JNZWNoYW5pY2FsQW5hbHlzaXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmluZXJJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpb25hbEFjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2lyaXN0b0ZlZGVyYWxEZUNvbnRyaWJ1eWVudGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpcmlzdG9GZWRlcmFsZGVDb250cmlidXllbnRlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaXN0ZXJlZENhcGl0YWxSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2lzdGVyZWRDb250cmFjdG9yQWN0aXZpdHlUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RlcmVkTWFpbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaXN0cmF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RyYXRpb25OdW1iZXJPZlByZXZpb3VzQ3VzdG9tc0RlY2xhcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3Ryb0luZm9ybWFjaW9uRmlzY2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3Ryb05hY2lvbmFsZGVDb250cmlidXllbnRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3Ryb1VuaWNvZGVDb250cmlidXllbnRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWd1bGF0aW9uUHJpbWFyeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVndWxhdGlvblNlY29uZGFyeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVndWxhdG9yeUd1aWRlbGluZUlkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlaW5zdXJhbmNlUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWluc3VyZXJzQ2xhaW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlaXNzdWVDZXNzaW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWplY3Rpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0ZWRDYXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGVkQ29udHJhY3RMaW5lSXRlbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRlZERvY3VtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGVkTm9uY29uZm9ybWFuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0ZWRPYmplY3RJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRlZFRyYW5zYWN0aW9uUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGVkVmVuZG9yT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUHJpb3JpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGVhc2VJbnZvaWNlTnVtYmVyRm9yUHJpb3JCaWxsQW5kSG9sZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsZWFzZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVtaXR0YW5jZUFkdmljZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVtaXR0aW5nQmFua3NSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbW92YWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbnRhbEFjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbnRhbEFncmVlbWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVudFBheW9ySWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGFpckFjdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwYWlyQ2F0ZWdvcnlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGFpckRhdGFSZXF1ZXN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBhaXJFc3RpbWF0ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwYWlyT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGFpclBhcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGVhdExvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBldGl0aXZlQm9va2luZ051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwZXRpdGl2ZUNhcmdvU2hpcG1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGV0aXRpdmVQYXR0ZXJuQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwZXRpdGl2ZVdheWJpbGxDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBsYWNlbWVudEFzc2VtYmx5TW9kZWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGxhY2VtZW50QXNzZW1ibHlTZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGxhY2VtZW50Q2xhaW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGxhY2VtZW50Q3VzdG9tZXJSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGxhY2VtZW50RHJ1Z0VuZm9yY2VtZW50QWRtaW5pc3RyYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGxhY2luZ1BhcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGxlbmlzaG1lbnRQdXJjaGFzZU9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBsZW5pc2htZW50UHVyY2hhc2VPcmRlclJhbmdlRW5kTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBsZW5pc2htZW50UHVyY2hhc2VPcmRlclJhbmdlU3RhcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcG9ydGVySWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcG9ydGluZ0Zvcm1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcG9ydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwcmVzZW50YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcHJlc2VudGF0aXZlSWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcHJpY2VkQ2xhaW1SZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcHJpY2VkTGluZUl0ZW1SZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVlc3RGb3JDYW5jZWxsYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVlc3Rmb3JRdW90YXRpb25SZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVlc3RGb3JRdW90ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWVzdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzZXJ2YXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2VydmVBc3NlbWJseUxpbmVGZWVkTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc291cmNlU2NyZWVuaW5nUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNvdXJjZVV0aWxpemF0aW9uR3JvdXBOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3BvbnNldG9hUmVxdWVzdGZvclF1b3RhdGlvblJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzdHJpY3RlZEF2YWlsYWJpbGl0eUF1dGhvcml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3RyaWN0ZWRBdmFpbGFiaWxpdHlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3VibWlzc2lvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzdWJtaXNzaW9uUmVhc29uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzdWJtaXRudW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldGFpbE1lcmNoYW50c0NlcnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldGlyZW1lbnRQbGFuQWNjb3VudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0aXJlbWVudFBsYW5Qb2xpY3lOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldHVybmFibGVDb250YWluZXJSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldHVybmFibGVDb250YWluZXJTZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldHVybmVkR29vZHNBdXRob3JpemF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXR1cm5Hb29kc0JpbGxPZkxhZGluZ051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0dXJuTWF0ZXJpYWxBdXRob3JpemF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXR1cm5zTm90aWNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXZlbnVlU291cmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXZpZXciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldmlld2VyRmlsZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV2aWV3UGVyaW9kTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXZpc2lvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUklGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSaWdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvYWRDb25zaWdubWVudE5vdGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvdXRlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb3V0ZU9yZGVyTnVtYmVyRG9tZXN0aWMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvdXRlT3JkZXJOdW1iZXJFbWVyZ2VuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvdXRlT3JkZXJOdW1iZXJFeHBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvdXRpbmdJbnN0cnVjdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUlVDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSdWxlU2VjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUnVuTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWZla2VlcGluZ0FjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhZmV0eUVxdWlwbWVudENlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWZldHlvZlJhZGlvQ2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhZmV0eW9mU2hpcENlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWxlc09yVGVycml0b3J5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FsZXNBbGxvd2FuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbGVzRGVwYXJ0bWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FsZXNGb3JlY2FzdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FsZXNPZmZpY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbGVzUGVyc29uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWxlc1Byb2dyYW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbGVzUmVnaW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWxlc1JlcG9ydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FsZXNSZXByZXNlbnRhdGl2ZU9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWxlc1Jlc3BvbnNpYmlsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYW1wbGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhdmluZ3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNCQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2NhbGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjYW5MaW5lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTY2hlZHVsZVJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2NoZW1lT3JQbGFuTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTY2hvb2xMb2FuTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTY2hvb2xVc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlYWxPZmZOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlYWxPbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VhcmNoS2V5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRhcnlDb3ZlcmFnZUNlcnRpZmljYXRlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRhcnlDb3ZlcmFnZUNvbXBhbnlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY29uZGFyeUN1c3RvbXNSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY29uZGFyeUVtcGxveWVlSWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY29uZGFyeUhlYWx0aEluc3VyYW5jZUlkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRhcnlQb2xpY3lOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY29uZGFyeVByb3ZpZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRhcnlTdWZmaXhDb2RlSW5kaWNhdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRCZW5lZmljaWFyeXNSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY3JldGFyaWFkZUNvbWVyY2lheUZhbWVudGFJbmR1c3RyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNyZXRhcnlvZlN0YXRlQXNzaWduZWRJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VjdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VjdGlvbk9mVGhlTmF0aW9uYWxIb3VzaW5nQWN0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VjdXJpdHlJbnN0cnVtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWN1cml0eVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGZJbnN1cmFuY2VJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VsZkluc3VyZXJBdXRob3JpemF0aW9uVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGZJbnN1cmVyT3JnYW5pemF0aW9uVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VsbGVyTG9hbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VsbGVyc0NhdGFsb2d1ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VsbGVyc0NyZWRpdE1lbW8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGxlcnNEZWJpdE1lbW8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGxlcnNJbnZvaWNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxsZXJzUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxsZXJzU2FsZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VsbGluZ0FycmFuZ2VtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZW5kZXJEZWZpbmVkQ2xhdXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZW5kZXJzQ2xhdXNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZW5kZXJzRmlsZVJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VuZGVyc1JlZmVyZW5jZVRvVGhlT3JpZ2luYWxNZXNzYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZW5kaW5nQmFua1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VuZGluZ0NvbXBhbnlBdWRpdE51bWJlckF1dG9tYXRlZENsZWFyaW5naG91c2VUcmFuc2ZlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcXVlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VBdXRob3JpemF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlQnVsbGV0aW5OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VCdXJlYXUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VDaGFuZ2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VDaGFyZ2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VDb250cmFjdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZUVzdGltYXRlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlR3JvdXBJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZUludGVycnVwdFRyYWNraW5nTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VQZXJmb3JtZWRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZVJlcXVlc3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VyTG9hbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vzc2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2V0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGVldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hlbGZMaWZlSW5kaWNhdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwRnJvbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcG1lbnREZXN0aW5hdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBtZW50T3JpZ2luQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcG1lbnRSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBOb3RpY2VPck1hbmlmZXN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwb3duZXJzQXV0aG9yaXphdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBlckNhck9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwcGVyc0JvbmROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwZXJzSGF6YXJkb3VzTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwcGVyc09yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwcGluZ0xhYmVsU2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwcGluZ05vdGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwaW5nVW5pdElkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwcGluZ1pvbmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNob3J0VGVybURpc2FiaWxpdHlQb2xpY3lOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNob3dJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0lDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTSUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpZ25hbENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpZ25hbENvZGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpbmdsZVRyYW5zYWN0aW9uU2VxdWVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNJUkVOTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTSVJFVE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2l0ZVNwZWNpZmljUHJvY2VkdXJlc1Rlcm1zQW5kQ29uZGl0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2l0dWF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbGF1Z2h0ZXJQbGFudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29jaWFsSW5zdXJhbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb2NpYWxTZWN1cml0eU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29jaWV0eW9mUHJvcGVydHlJbmZvcm1hdGlvbkNvbXBpbGVyc2FuZEFuYWx5c3RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb2Z0d2FyZUFwcGxpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb2xpY2l0YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvcnRBbmRTZWdyZWdhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvdXJjZURvY3VtZW50SW50ZXJuYWxSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwYWNpbmdVbml0T3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxBcHByb3ZhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbEJ1ZGdldEFjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxDaGFyZ2VPckFsbG93YW5jZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxDbGF1c2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxHb3Zlcm5tZW50QWNjb3VudGluZ0NsYXNzaWZpY2F0aW9uUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsSW5zdHJ1Y3Rpb25zTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsTW92ZVJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbFBhY2thZ2luZ0luc3RydWN0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsUGF5bWVudFJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbFByb2Nlc3NpbmdDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsUXVvdGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWx0eUxpY2Vuc2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpZmljYXRpb25DbGFzc051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lmaWNhdGlvblJldmlzaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaW1lbklkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwbGl0Qm9va2luZ051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BsaXRQcmVtaXVtQXVkaXRDaGFuZ2VJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGxpdFNoaXBtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcG9uc29yc1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BvdXNlVGllIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFja1RyYWluSWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YW5kYXJkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZENhcnJpZXJBbHBoYUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YW5kYXJkQ2xhdXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZEluZHVzdHJ5Q2xhc3NpZmljYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZE51bWJlck9mSW5zcGVjdGlvbkRvY3VtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZFBvaW50TG9jYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZHNDb2RlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZHNOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YW5kYXJkc1ZlcnNpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YW5kYXJkVHJhbnNwb3J0YXRpb25Db21tb2RpdHlDb2RlQnJpZGdlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZFRyYW5zcG9ydGF0aW9uQ29tbW9kaXR5Q29kZVJlcGxhY2VtZW50Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhcnRpbmdQYWNrYWdlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZUFzc2VtYmx5RGlzdHJpY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlQ2hhcnRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVDb250cm9sbGVkU3Vic3RhbmNlTGljZW5zZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVDcmltaW5hbEhpc3RvcnlSZXBvc2l0b3J5SW5kaXZpZHVhbElkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZURlcGFydG1lbnRJMjBGb3JtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZURlcGFydG1lbnRJQVA2NkZvcm1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlSGF6YXJkb3VzV2FzdGVFbnRpdHlJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZUluZHVzdHJpYWxBY2NpZGVudFByb3ZpZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZUxlZ2lzbGF0aXZlRGlzdHJpY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlTGljZW5zZUlkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZUxpY2Vuc2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlbWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVtZW50T2ZXb3JrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZU5vblJlc2lkZW50VmlvbGF0b3JDb21wYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZW9yUHJvdmluY2VBc3NpZ25lZEJ1c2luZXNzUmVnaXN0cnlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlT3JQcm92aW5jZUFzc2lnbmVkRW50aXR5SWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlU2FsZXNUYXhJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVTZW5hdGVEaXN0cmljdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVTdHVkZW50SWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlVGF4SWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRld2lkZUNvdXJzZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGlvblJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdHVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0dXNSZXBvcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b2NrQ2VydGlmaWNhdGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b2NrRXhjaGFuZ2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9ja0V4Y2hhbmdlQ29tcGFueUlkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b2NrS2VlcGluZ1VuaXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b2NrTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9wU2VxdWVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b3JhZ2VJbmZvcm1hdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b3JlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdHVkeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3ViYXNzZW1ibHlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YmNvbnRyYWN0TGluZUl0ZW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YmNvbnRyYWN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJjb250cmFjdG9yRGF0YVJlcXVpcmVtZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3ViZGF5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJkaXZpc2lvbklkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YmV4aGliaXRMaW5lSXRlbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3ViRmlsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3ViaG91c2VCaWxsT2ZMYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YmplY3RQcm9wZXJ0eU5vblNhbGVSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YmplY3RQcm9wZXJ0eVJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3ViamVjdFByb3BlcnR5VmVyaWZpY2F0aW9uU291cmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJsaW5lb2ZJbnN1cmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1Ym1pc3Npb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1Ym1pdHRlcklkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJzY3JpYmVyQXV0aG9yaXphdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3Vic2NyaWJlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3Vic2VydmljZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YlNlcnZpY2VyTG9hbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3Vic2lzdGVuY2VJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3Vic3RhbnRpdmVseUNvbnNvbGlkYXRlZENhc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnN0aXR1dGVBaXJXYXliaWxsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJzdGl0dXRlTWFudWZhY3R1cmVyc1BhcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnN0aXR1dGVOYXRpb25hbFN0b2NrTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJzdGl0dXRlUGFydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3ViU3ViaG91c2VCaWxsT2ZMYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1Y2Nlc3NvckFjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1ZmZpeCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwZXJpbnRlbmRlbmNpYWRlSW52ZXJzaW9uZXNFeHRyYW5qZXJhc051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwZXJ2aXNvcnlBcHByYWlzZXJDZXJ0aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbGVtZW50YWxBY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbGVtZW50YWxBZ3JlZW1lbnRBdXRob3JpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBsZW1lbnRhbENsYWltTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbGVtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbGllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxpZXJSZXBsYWNlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxpZXJEb2N1bWVudElkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbGllcnNDb250cm9sTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbGllcnNDcmVkaXRDbGFpbVJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcG9ydGluZ0RvY3VtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJldHlCb25kTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXNwZW5zaW9uSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3dhcE9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTV0lGVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1dJRlRNVDEwMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1dJRlRNVDIwMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1dJRlRDb25maXJtYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN5bWJvbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3ltYm9sTnVtYmVyRm9yTWlsZXN0b25lT3JMT0JSZXBvcnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTeXN0ZW1hdGl6ZWROb21lbmNsYXR1cmVvZkh1bWFuYW5kVmV0ZXJpbmFyeU1lZGljaW5lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTeXN0ZW1lSW5mb3JtYXRpcXVlUG91ckxlUmVwZXJ0b2lyZURlc0VudHJlcHJpc2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTeXN0ZW1lSW5mb3JtYXRpcXVlUG91ckxlUmVwZXJ0b2lyZURlc0V0YWJsaXNzZW1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTeXN0ZW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFua051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFyaWZmTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXJpZmZQYWdlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXJpZmZSdWxlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXJpZmZTZWN0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXJpZmZTdWZmaXhOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhcmlmZlN1cHBsZW1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhc2tPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4QWdlbmN5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhFeGNoYW5nZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheEV4ZW1wdGlvbkxpY2VuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheEV4ZW1wdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4RmlsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhGb3JtQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4aW5nQXV0aG9yaXR5SWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheExpY2Vuc2VFeGVtcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheExpZW5KdXJpc2RpY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheFJlZ2lzdHJhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4U2NoZWR1bGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhTaGVsdGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhXb3Jrc2hlZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRDTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVhbUFzc2lnbm1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlY2huaWNhbERvY3VtZW50YXRpb25UeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWNobmljYWxEb2N1bWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVjaG5pY2FsSW5mb3JtYXRpb25QYWNrYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWNobmljYWxPcmRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVjaG5pY2FsUGhhc2VSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlY2huaWNhbFJlZ3VsYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbGVjb21tdW5pY2F0aW9uQ2lyY3VpdFN1cHBsZW1lbnRhbElEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWxleE1lc3NhZ2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbXBsYXRlU2VxdWVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbm9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXJtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXJtaW5hbENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcm1pbmFsT3BlcmF0b3JOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcm1pbmFsUmVsZWFzZU9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXJtaW5hdGlvbkZpbGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVzdGVySWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlc3RSZXBvcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlc3RTcGVjaWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXh0RWxlbWVudElkZW50aWZpZXJEZWxldGlvblJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhlYXRlclNjcmVlbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhpcmRCYW5rc1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhpcmRCYW5rc1JlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhpcmRQYXJ0eUFkbWluaXN0cmF0b3JDbGFpbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhpcmRQYXJ0eU5vdGVIb2xkZXJJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhpcmRQYXJ0eU9yZ2FuaXphdGlvbkF1dGhvcml6YXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaXJkUGFydHlPcmlnaW5hdG9yTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaGlyZFBhcnR5UHVyY2hhc2VPcmRlckl0ZW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaXJkUGFydHlQdXJjaGFzZU9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaGlyZFBhcnR5UHVyY2hhc2VPcmRlclJlbGVhc2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaXJkUGFydHlSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRocm91Z2hCaWxsT2ZMYWRpbmdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpY2tldE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGltZUZhaWx1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpckNhcm5ldE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVElSTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaXRsZUNvbXBhbnlDb2RlQm9va1JlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGl0bGVEb2N1bWVudFNjaGVkdWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaXRsZVBvbGljeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGl0bGVSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpdGxlWElYSWRlbnRpZmllck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG9reW9TaG9rb1Jlc2VhcmNoQnVzaW5lc3NJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb2xsQmlsbGluZ1RlbGVwaG9uZVJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxDeWNsZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxPcmRlckN5Y2xlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3duc2hpcE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG94aWNvbG9neUlEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFjZXJBY3Rpb25SZXF1ZXN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFja2luZ051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWRlckFjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWRpbmdQYXJ0bmVySWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWlsZXJUeXBlUXVhbGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFpbGVyVXNlQWdyZWVtZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaW5pbmdGbGlnaHROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zYWN0aW9uQ2F0ZWdvcnlPclR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zYWN0aW9uUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc2Zlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNpdEd1YXJhbnRlZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb25kZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydGF0aW9uQWNjb3VudENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydGF0aW9uQWNjb3VudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0YXRpb25Db250cm9sTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRhdGlvbkV4cG9ydGF0aW9uTm9Gb3JJbkJvbmRNb3ZlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0YXRpb25Qcmlvcml0eU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0Q29udHJhY3RSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydENvc3RzUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnREb2N1bWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50UmV0dXJuUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFcXVpcG1lbnRTdHJpcHBpbmdPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50U3R1ZmZpbmdPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50U3VydmV5UmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFcXVpcG1lbnRTdXJ2ZXlSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydEVxdWlwbWVudFN1cnZleVJlcG9ydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0Um91dGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydFNlY3Rpb25SZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYXZlbE1hbmlmZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmVhdHlJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmVhdHlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyaWFsTG9jYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmlwbGViYWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcnVja2Vyc0JpbGxPZkxhZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1c3RlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVFNSQnVzaW5lc3NJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUeXBlT2ZDb21tZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUeXBlT2ZFc2Nyb3dOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVPZkhvdXNlaG9sZEdvb2RzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZU9mTGF3U3VpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZU9mT3V0c3RhbmRpbmdKdWRnbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZU9mU2NpZW5jZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlUuUy5EZWZlbnNlRmVkZXJhbEFjcXVpc2l0aW9uUmVndWxhdGlvblN1cHBsZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlUuUy5EZXBhcnRtZW50T2ZWZXRlcmFuc0FmZmFpcnNBY3F1aXNpdGlvblJlZ3VsYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlUuUy5Hb3Zlcm5tZW50VHJhbnNwb3J0YXRpb25Db250cm9sTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbHRpbWF0ZUNvbnNpZ25lZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVWx0aW1hdGVDdXN0b21lcnNPcmRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVWx0aW1hdGVDdXN0b21lcnNSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuYWNjZXB0YWJsZVNvdXJjZURVTlNOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuYWNjZXB0YWJsZVNvdXJjZVB1cmNoYXNlcklEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmFjY2VwdGFibGVTb3VyY2VTdXBwbGllcklEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmRlcndyaXRlcklkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmRlcndyaXRpbmdBbGVydFJlZmVyZW5jZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVOREciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuZW1wbG95bWVudEluc3VyYW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pZm9ybUNvbW1lcmNpYWxDb2RlRmlsaW5nQ29sbGF0ZXJhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pZm9ybVJlc291cmNlTG9jYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXF1ZUNsYWltc1JlZmVyZW5jZU51bWJlck9mVGhlU2VuZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmlxdWVDb25zaWdubWVudElkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXF1ZUNvbnNpZ25tZW50UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmlxdWVDdXJyYWNSZWZlcmVuY2VOdW1iZXJPZlRoZVNlbmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pcXVlTWFya2V0UmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmlxdWVSZWluYWNSZWZlcmVuY2VOdW1iZXJPZlRoZVNlbmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pcXVlU3VwcGxpZXJJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdGVkTmF0aW9uc0hhemFyZG91c0NsYXNzaWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0ZWRTdGF0ZXNHb3Zlcm5tZW50VmlzYU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdGVkU3RhdGVzU3RhbmRhcmRNZXRyb3BvbGl0YW5TdGF0aXN0aWNhbEFyZWFDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0TG9hZERldmljZUlkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0UHJvcGVydHlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRSZWxpZWZOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRSZXBvcnRQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRSZXBvcnRQZXJpb2RJRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdFRyYWluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml2ZXJzYWxSYWlscm9hZFJldmVudWVXYXliaWxsSWRlbnRpZmllZE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdmVyc2FsVHJhbnN2ZXJzZU1lcmNhdG9yRWFzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdmVyc2FsVHJhbnN2ZXJzZU1lcmNhdG9yTm9ydGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXZlcnNhbFRyYW5zdmVyc2VNZXJjYXRvclpvbmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVucGFpZEluc3RhbGxtZW50UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVcHBlclNlcmlhbE51bWJlck9mUmFuZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVwc3RyZWFtU2hpcHBlckNvbnRyYWN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVU0NGUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNDUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNDdXN0b21zU2VydmljZUFudGlEdW1waW5nRHV0eUNhc2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTQ3VzdG9tc1NlcnZpY2VCaW5kaW5nUnVsaW5nTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVU0N1c3RvbXNTZXJ2aWNlQ29tbWVyY2lhbERlc2NyaXB0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVU0N1c3RvbXNTZXJ2aWNlQ291bnRlcnZhaWxpbmdEdXR5Q2FzZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNDdXN0b21zU2VydmljZUVudHJ5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVU0N1c3RvbXNTZXJ2aWNlRW50cnlUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNDdXN0b21zU2VydmljZVByZUFwcHJvdmFsUnVsaW5nTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVU0N1c3RvbXNTZXJ2aWNlUHJlQ2xhc3NpZmljYXRpb25SdWxpbmdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTQ3VzdG9tc1NlcnZpY2VTdGF0ZW1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTRE9FQW5kTkNFUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNET1RCb25kU3VyZXR5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVXNlcklEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVc2VySWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTRkNDSW1wb3J0Q29uZGl0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVU0ZlZGVyYWxBY3F1aXNpdGlvblJlZ3VsYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTRmVkZXJhbEluZm9ybWF0aW9uUmVzb3VyY2VzTWFuYWdlbWVudFJlZ3VsYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTRm9vZEFuZERydWdBZG1pbmlzdHJhdGlvbkVzdGFibGlzaG1lbnRJbmRpY2F0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTR2VuZXJhbFNlcnZpY2VzQWRtaW5pc3RyYXRpb25SZWd1bGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVU0dvdmVybm1lbnRBZ2VuY3lOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhbHVlQWRkZWRUYXhSZWdpc3RyYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhdFJlZ2lzdHJhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVoaWNsZUJ1c2luZXNzVXNlUXVhbGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZWhpY2xlTGljZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVoaWNsZVJhZGl1c29mT3BlcmF0aW9uUXVhbGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZWhpY2xlUmVsYXRlZFNlcnZpY2VzUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZWhpY2xlU2l6ZUNsYXNzUXVhbGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZW5kb3JBYmJyZXZpYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZW5kb3JDaGFuZ2VJZGVudGlmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlbmRvckNoYW5nZVByb2NlZHVyZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlbmRvckNvbnRyYWN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZW5kb3JJRE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVuZG9yT3JkZXJOdW1iZXJTdWZmaXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlbmRvclByb2R1Y3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlbmRvcnNQcmV2aW91c0pvYk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVuZG9yVGVybXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlcmlmaWNhdGlvblNvdXJjZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlcnNpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlcnNpb25Db2RlTG9jYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlcnNpb25Db2RlTmF0aW9uYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlcnRpY2FsQ29vcmRpbmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVzc2VsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXNzZWxBZ2VudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVzc2VsSWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlc3NlbE5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZldGVyYW5zQWRtaW5pc3RyYXRpb25PcmlnaW5hdG9ySWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZldGVyYW5zQWZmYWlyc0Nhc2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZJTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmlzYVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZvbHVtZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVm9sdW1lUHVyY2hhc2VBZ3JlZW1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZvdWNoZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZveWFnZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FnZURldGVybWluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhaXZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FyZWhvdXNlRW50cnlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhcmVob3VzZVBpY2tUaWNrZXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhcmVob3VzZVJlY2VpcHROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhcmVob3VzZVN0b3JhZ2VMb2NhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FycmFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FycmFudHlDb3ZlcmFnZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhcnJhbnR5UmVnaXN0cmF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXliaWxsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWFwb25TeXN0ZW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldlaWdodEFncmVlbWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2VsbENsYXNzaWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2VsbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2l0aGRyYXdhbEFjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldpdGhkcmF3YWxSZWNvcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ildvb2xJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29vbFRheFJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29ya0JyZWFrZG93blN0cnVjdHVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29ya0NhbmRpZGF0ZVNlcXVlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JrQ2VudGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JraW5nU2hpZnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldvcmtJdGVtUXVhbnRpdHlEZXRlcm1pbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JrT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldvcmtQYWNrYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JrU2hpZnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldvcmtzaXRlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JrVGFza0NoYXJnZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29ya1RlYW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IllhcmRQb3NpdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWm9uZSIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUHVycG9zZSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUHVycG9zZUNvZGVkIiB0eXBlPSJQdXJwb3NlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUHVycG9zZUNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlB1cnBvc2UiIHR5cGU9IlB1cnBvc2UiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iUHVycG9zZUNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5jZWxsYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGxhY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbmZpcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVwbGljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhbmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmZvcm1hdGlvbk9ubHkiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlJlcXVlc3RlZFJlc3BvbnNlIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0ZWRSZXNwb25zZUNvZGVkIiB0eXBlPSJSZXF1ZXN0ZWRSZXNwb25zZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlJlcXVlc3RlZFJlc3BvbnNlQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVxdWVzdGVkUmVzcG9uc2UiIHR5cGU9IlJlcXVlc3RlZFJlc3BvbnNlIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IlJlcXVlc3RlZFJlc3BvbnNlQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYml0QWR2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2tub3dsZWRnZUhvbGRTdGF0dXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFja25vd2xlZGdlbWVudFdoZW5FcnJvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNrbm93bGVkZ2VOb0RldGFpbE9yQ2hhbmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2tub3dsZWRnZU9ubHlDaGFuZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2tub3dsZWRnZVByb2R1Y3RSZXBsZW5pc2htZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2tub3dsZWRnZVdpdGhEZXRhaWxBbmRDaGFuZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFja25vd2xlZGdlV2l0aERldGFpbE5vQ2hhbmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZpY2VXaXRoRGV0YWlscyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWR2aWNlV2l0aG91dERldGFpbHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhlbnRpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmVkaXRBZHZpY2VBbmRBY2tub3dsZWRnZW1lbnRGb3JEaXJlY3REZWJpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0QWR2aWNlTWVzc2FnZUFja25vd2xlZGdlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0QWR2aWNlUmVxdWVzdGVkRm9yRGlyZWN0RGViaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYml0QWR2aWNlRm9yRWFjaFRyYW5zYWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWJpdEFkdmljZU1lc3NhZ2VBY2tub3dsZWRnZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYml0QWR2aWNlTWVzc2FnZUFja25vd2xlZGdlbWVudEZvckVhY2hUcmFuc2FjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGViaXRBZHZpY2VSZXF1ZXN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lc3NhZ2VBY2tub3dsZWRnZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vQWNrbm93bGVkZ2VtZW50TmVlZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1ZXN0QXV0aG9yaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNwb25zZUV4cGVjdGVkIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJPcmRlclR5cGUiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik9yZGVyVHlwZUNvZGVkIiB0eXBlPSJPcmRlclR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJPcmRlclR5cGVDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJPcmRlclR5cGUiIHR5cGU9Ik9yZGVyVHlwZSIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJPcmRlclR5cGVDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNrbm93bGVkZ2VtZW50TWVzc2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNrbm93bGVkZ2VtZW50T2ZPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUNsYWltRm9yUGFydHNBbmRPckxhYm91ckNoYXJnZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmljZU9mQW5BbWVuZG1lbnRPZkFEb2N1bWVudGFyeUNyZWRpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWR2aWNlT2ZDb2xsZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZpY2VPZkRpc3RyaWJ1dGlvbk9mRG9jdW1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZpc2luZ0l0ZW1zVG9CZUJvb2tlZFRvQUZpbmFuY2lhbEFjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFncmVlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdyZWVtZW50VG9QYXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpcldheWJpbGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFPR0NyaXRpY2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBT0dTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhdGlvbkFja25vd2xlZGdlbWVudEFuZEVycm9yUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhdGlvbkVycm9yQW5kQWNrbm93bGVkZ2VtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhdGlvbkVycm9yTWVzc2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYXRpb25Gb3JCYW5rZXJzRHJhZnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2F0aW9uRm9yQmFua2Vyc0d1YXJhbnRlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYXRpb25Gb3JEZXNpZ25hdGlvbk9mQmVydGhpbmdQbGFjZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2F0aW9uRm9yRG9jdW1lbnRhcnlDcmVkaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2F0aW9uRm9yRXhjaGFuZ2VBbGxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhdGlvbkZvckdvb2RzQ29udHJvbENlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhdGlvbkZvckluc3BlY3Rpb25DZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYXRpb25Gb3JQaHl0b3Nhbml0YXJ5Q2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2F0aW9uRm9yU2hpZnRpbmdGcm9tVGhlRGVzaWduYXRlZFBsYWNlSW5Qb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhdGlvbkZvclVzYWdlT2ZCZXJ0aE9yTW9vcmluZ0ZhY2lsaXRpZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2F0aW9uRm9yVmVzc2Vsc0VudGVyaW5nSW50b1BvcnRBcmVhSW5OaWdodC1UaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHByb3ZlZFVucHJpY2VkQmlsbE9mUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFycml2YWxJbmZvcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJyaXZhbE5vdGljZUdvb2RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NvcnRtZW50QWdhaW5zdEJsYW5rZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF0YUNhcm5ldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXV0aG9yaXphdGlvblRvUGxhbkFuZFNoaXBPcmRlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhvcml6YXRpb25Ub1BsYW5BbmRTdWdnZXN0T3JkZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3JpdHlUb1Byb2NlZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhaWxtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYWlsbWVudENvbnRyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYWxhbmNlQ29uZmlybWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYW5rZXJzRHJhZnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbmtlcnNHdWFyYW50ZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbmtpbmdTdGF0dXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbmtUb0JhbmtGdW5kc1RyYW5zZmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXNpY0FncmVlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFzaWNPcmRlcmluZ0FncmVlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlkZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbGFuZEhvbGQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxPZkV4Y2hhbmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsT2ZMYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxPZkxhZGluZ0NvcHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxPZkxhZGluZ09yaWdpbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCbGFua2V0T3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJsYW5rZXRPcmRlckVzdGltYXRlZFF1YW50aXRpZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJsYW5rZXRQdXJjaGFzZUFncmVlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9va2luZ0NvbmZpcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9va2luZ1JlcXVlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvcmRlcmVhdSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVkZ2V0YXJ5UXVvdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eUFtZXJpY2FDZXJ0aWZpY2F0ZU9mQ29tcGxpYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYWxsaW5nRm9yd2FyZE5vdGljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FsbE9mZkRlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYWxsT2ZmT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbXBhaWduUHJpY2VTYWxlc0NhdGFsb2d1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyZ29BY2NlcHRhbmNlT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcmdvQW5hbHlzaXNWb3lhZ2VSZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcmdvRGVjbGFyYXRpb25BcnJpdmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJnb0RlY2xhcmF0aW9uRGVwYXJ0dXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJnb01hbmlmZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJnb01vdmVtZW50RXZlbnRMb2ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcmdvTW92ZW1lbnRWb3lhZ2VTdW1tYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJnb1JlbGVhc2VOb3RpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcmdvU3RhdHVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJnb1Zlc3NlbERpc2NoYXJnZU9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJnb1Zlc3NlbExvYWRpbmdPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FydGFnZU9yZGVyTG9jYWxUcmFuc3BvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2hQb29sRmluYW5jaWFsU3RhdGVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXNpbmdTYW5pdGFyeUNlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXRhbG9nT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0ZU9mQW5hbHlzaXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmljYXRlT2ZDb25mb3JtaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0ZU9mT3JpZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhdGlvbkZvckNlcnRpZmljYXRlT2ZPcmlnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmljYXRlT2ZPcmlnaW5Gb3JtR3NwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0ZU9mUXVhbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VydGlmaWNhdGVPZlF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0ZU9mUmVnaXN0cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmljYXRlT2ZTZWFsaW5nT2ZFeHBvcnRNZWF0TG9ja2VycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VydGlmaWVkQ29zdEFuZFByaWNlRGF0YSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VydGlmaWVkSW5zcGVjdGlvbkFuZFRlc3RSZXN1bHRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFuZ2VUb0NvbnRyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFuZ2VUb1B1cmNoYXNlT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYW5nZVRvUmVsZWFzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlYmFjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlc05vdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNpdmlsTGlhYmlsaXR5Rm9yT2lsQ2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsb3NlT3V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbG9zaW5nU3RhdGVtZW50T2ZBbkFjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvZGVDaGFuZ2VSZXF1ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDby1JbnN1cmFuY2VDZWRpbmdCb3JkZXJlYXUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbGxhdGVyYWxBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsZWN0aW9uT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbGxlY3Rpb25QYXltZW50QWR2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21iaW5lZENlcnRpZmljYXRlT2ZWYWx1ZUFuZE9yaWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tYmluZWRUcmFuc3BvcnRCaWxsT2ZMYWRpbmdNdWx0aW1vZGFsQmlsbE9mTGFkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21iaW5lZFRyYW5zcG9ydERvY3VtZW50R2VuZXJpYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWVyY2lhbEFjY291bnRTdW1tYXJ5UmVzcG9uc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1lcmNpYWxEaXNwdXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tZXJjaWFsSW52b2ljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWVyY2lhbEludm9pY2VXaGljaEluY2x1ZGVzQVBhY2tpbmdMaXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21taXNzaW9uTm90ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcG9zaXRlRGF0YUVsZW1lbnRDaGFuZ2VSZXF1ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wb3NpdGVEYXRhRWxlbWVudFJlcXVlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbmZpcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbm1lbnRJbnZvaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zaWdubWVudE9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zaWdubWVudFN0YXR1c1JlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbm1lbnRVbnBhY2tSZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNvbGlkYXRlZENyZWRpdE5vdGVHb29kc0FuZFNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zb2xpZGF0ZWRJbnZvaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zdWxhckludm9pY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lckRpc2NoYXJnZUxpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lckxpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lck1hbmlmZXN0VW5pdFBhY2tpbmdMaXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJPZmZIaXJlTm90aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJTdHJpcHBpbmdPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyU3R1ZmZpbmdPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0QXdhcmROb3RpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0QmlsbE9mUXVhbnRpdGllcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RGdW5kc1N0YXR1c1JlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RTZWN1cml0eUNsYXNzaWZpY2F0aW9uU3BlY2lmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJvbERvY3VtZW50VDUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnZleWFuY2VEZWNsYXJhdGlvbkFycml2YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnZleWFuY2VEZWNsYXJhdGlvbkNvbWJpbmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb252ZXlhbmNlRGVjbGFyYXRpb25EZXBhcnR1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcnBvcmF0ZVN1cGVyYW5udWF0aW9uQ29udHJpYnV0aW9uc0FkdmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ycG9yYXRlU3VwZXJhbm51YXRpb25NZW1iZXJNYWludGVuYW5jZU1lc3NhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcnJlY3RlZEludm9pY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvc3REYXRhU3VtbWFyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zdFBlcmZvcm1hbmNlUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3N0UGVyZm9ybWFuY2VSZXBvcnRGb3JtYXQxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3N0UGVyZm9ybWFuY2VSZXBvcnRGb3JtYXQyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3N0UGVyZm9ybWFuY2VSZXBvcnRGb3JtYXQzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3N0UGVyZm9ybWFuY2VSZXBvcnRGb3JtYXQ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3N0UGVyZm9ybWFuY2VSZXBvcnRGb3JtYXQ1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3N0U2NoZWR1bGVTdGF0dXNSZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdmVyTm90ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0QWR2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmVkaXRDb3ZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0Tm90ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0Tm90ZUZvclByaWNlVmFyaWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmVkaXROb3RlUmVsYXRlZFRvRmluYW5jaWFsQWRqdXN0bWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyZWRpdE5vdGVSZWxhdGVkVG9Hb29kc09yU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyZXdMaXN0RGVjbGFyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyZXdzRWZmZWN0c0RlY2xhcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcm9zc0RvY2tpbmdEZXNwYXRjaEFkdmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3Jvc3NEb2NraW5nT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyb3NzRG9ja2luZ1NlcnZpY2VzT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnJlbnRBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lclBheW1lbnRPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0NsZWFyYW5jZU5vdGljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0NyZXdBbmRDb252ZXlhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zRGVjbGFyYXRpb25Qb3N0UGFyY2VscyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0RlY2xhcmF0aW9uRm9yQ2FyZ29FeGFtaW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0RlY2xhcmF0aW9uRm9yQ2FyZ29FeGFtaW5hdGlvbkFsdGVybmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0RlY2xhcmF0aW9uV2l0aENvbW1lcmNpYWxBbmRJdGVtRGV0YWlsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zRGVjbGFyYXRpb25XaXRob3V0Q29tbWVyY2lhbERldGFpbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0RlY2xhcmF0aW9uV2l0aG91dEl0ZW1EZXRhaWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNEZWxpdmVyeU5vdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNEb2N1bWVudHNFeHBpcmF0aW9uTm90aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zSW1tZWRpYXRlUmVsZWFzZURlY2xhcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zSW52b2ljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc01hbmlmZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zU3VtbWFyeURlY2xhcmF0aW9uV2l0aENvbW1lcmNpYWxEZXRhaWxBbHRlcm5hdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNTdW1tYXJ5RGVjbGFyYXRpb25XaXRob3V0Q29tbWVyY2lhbERldGFpbEFsdGVybmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGFtYWdlQ2VydGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGFuZ2Vyb3VzR29vZHNEZWNsYXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGFuZ2Vyb3VzR29vZHNMaXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWJpdEFkdmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGViaXROb3RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWJpdE5vdGVSZWxhdGVkVG9GaW5hbmNpYWxBZGp1c3RtZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGViaXROb3RlUmVsYXRlZFRvR29vZHNPclNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWNsYXJhdGlvbk9mT3JpZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWNsYXJhdGlvblJlZ2FyZGluZ1RoZUlud2FyZEFuZE91dHdhcmRNb3ZlbWVudE9mVmVzc2VsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxjcmVkZXJlQ3JlZGl0Tm90ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsY3JlZGVyZUludm9pY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5Rm9yZWNhc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5SW5zdHJ1Y3Rpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeUp1c3RJblRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5Tm90ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlOb3RpY2VHb29kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlOb3RpY2VSYWlsVHJhbnNwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeU9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeVJlbGVhc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5U2NoZWR1bGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5U2NoZWR1bGVSZXNwb25zZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlWZXJpZmljYXRpb25DZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVyYXREb2N1bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzcGF0Y2hBZHZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc3BhdGNoTm90ZVBvc3RQYXJjZWxzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXNwYXRjaE5vdGVNb2RlbFQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc3BhdGNoTm90ZU1vZGVsVDEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc3BhdGNoTm90ZU1vZGVsVDIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc3BhdGNoTm90ZU1vZGVsVDJMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXNwYXRjaE9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXJlY3RQYXltZW50VmFsdWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXJlY3RQYXltZW50VmFsdWF0aW9uUmVxdWVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlyZWN0U2hpcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRhcnlDcmVkaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50YXJ5Q3JlZGl0QWNjZXB0YW5jZUFkdmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRhcnlDcmVkaXRBbWVuZG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50YXJ5Q3JlZGl0QW1lbmRtZW50SW5mb3JtYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50YXJ5Q3JlZGl0QW1lbmRtZW50Tm90aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGFyeUNyZWRpdEFwcGxpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGFyeUNyZWRpdENvbGxlY3Rpb25JbnN0cnVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRhcnlDcmVkaXRJc3N1YW5jZUluZm9ybWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGFyeUNyZWRpdExldHRlck9mSW5kZW1uaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGFyeUNyZWRpdE5lZ290aWF0aW9uQWR2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGFyeUNyZWRpdE5vdGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRhcnlDcmVkaXRQYXltZW50QWR2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGFyeUNyZWRpdFRyYW5zZmVyQWR2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudFJlc3BvbnNlQ3VzdG9tcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRzUHJlc2VudGF0aW9uRm9ybSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJhZnRCaWxsT2ZRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJhd2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJpdmluZ0xpY2VuY2VJbnRlcm5hdGlvbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcml2aW5nTGljZW5jZU5hdGlvbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcm9wc2hpcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWNDYXJuZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVkaUFzc29jaWF0ZWRPYmplY3RBZG1pbmlzdHJhdGlvbk1lc3NhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtYmFyZ29QZXJtaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtZXJnZW5jeU9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXB0eUNvbnRhaW5lckJpbGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcHR5Q29udGFpbmVyRGlzcG9zaXRpb25PcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kVXNlQXV0aG9yaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5xdWlyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXJyb3JSZXNwb25zZUN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzY29ydE9mZmljaWFsUmVjb2duaXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZFByaWNlZEJpbGxPZlF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFdXIxQ2VydGlmaWNhdGVPZk9yaWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhjZXB0aW9uYWxPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhjaGFuZ2VDb250cm9sRGVjbGFyYXRpb25JbXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4Y2hhbmdlQ29udHJvbERlY2xhcmF0aW9uRXhwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGNpc2VDZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwb3J0TGljZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYXRpb25Gb3JFeHBvcnRMaWNlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHRlbmRlZENyZWRpdEFkdmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXh0ZW5kZWRQYXltZW50T3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4dHJhLUNvbW11bml0eVRyYWRlU3RhdGlzdGljYWxEZWNsYXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFicmljYXRlQW5kSG9sZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFjdG9yZWRDcmVkaXROb3RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGYWN0b3JlZEludm9pY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxMYWJlbEFwcHJvdmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbFBheW1lbnRSZXF1ZXN0QmFzZWRPbkNvbXBsZXRpb25PZldvcmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFuY2lhbFN0YXRlbWVudE9mQWNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlyc3RTYW1wbGVUZXN0UmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JlaWduRXhjaGFuZ2VQZXJtaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcm11bGFGdW5kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yd2FyZGVyc0FkdmljZVRvRXhwb3J0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcndhcmRlcnNBZHZpY2VUb0ltcG9ydEFnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3J3YXJkZXJzQmlsbE9mTGFkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3J3YXJkZXJzQ2VydGlmaWNhdGVPZlJlY2VpcHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcndhcmRlcnNDZXJ0aWZpY2F0ZU9mVHJhbnNwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3J3YXJkZXJzSW52b2ljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yd2FyZGVyc1dhcmVob3VzZVJlY2VpcHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcndhcmRpbmdJbnN0cnVjdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWVQYXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVpZ2h0SW52b2ljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlaWdodE1hbmlmZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdW1pZ2F0aW9uQ2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdhdGVQYXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW5lcmFsQ2FyZ29TdW1tYXJ5TWFuaWZlc3RSZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdlbmVyYWxSZXNwb25zZUN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdvb2RzQ29udHJvbENlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb29kc0RlY2xhcmF0aW9uRm9yQ3VzdG9tc1RyYW5zaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdvb2RzRGVjbGFyYXRpb25Gb3JFeHBvcnRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZHNEZWNsYXJhdGlvbkZvckhvbWVVc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdvb2RzRGVjbGFyYXRpb25Gb3JJbXBvcnRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZHNSZWNlaXB0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb29kc1JlY2VpcHRDYXJyaWFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJubWVudENvbnRyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGFuZGxpbmdPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGlyZUludm9pY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhpcmVPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9yc2VtZWF0U2FuaXRhcnlDZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG91c2VCaWxsT2ZMYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvdXNlV2F5YmlsbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSWRlbnRpdHlDYXJkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXBlbmRpbmdBcnJpdmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXBsZW1lbnRhdGlvbkd1aWRlbGluZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW1wb3J0TGljZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYXRpb25Gb3JJbXBvcnRMaWNlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmRlZmluaXRlRGVsaXZlcnlEZWZpbml0ZVF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmRlZmluaXRlRGVsaXZlcnlEZWZpbml0ZVF1YW50aXR5Q29udHJhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZGVmaW5pdGVEZWxpdmVyeUluZGVmaW5pdGVRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5kZWZpbml0ZURlbGl2ZXJ5SW5kZWZpbml0ZVF1YW50aXR5Q29udHJhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZHVzdHJ5U3VwZXJhbm51YXRpb25Db250cmlidXRpb25zQWR2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmR1c3RyeVN1cGVyYW5udWF0aW9uTWVtYmVyTWFpbnRlbmFuY2VNZXNzYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmVkaWJsZVNhbml0YXJ5Q2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZm9ybWF0aW9uQ29weSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5sYW5kV2F0ZXJ3YXlCaWxsT2ZMYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklucXVpcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3BlY3Rpb25DZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zcGVjdGlvblJlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zcGVjdGlvblJlcXVlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3RydWN0aW9uc0ZvckJhbmtUcmFuc2ZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdHJ1Y3Rpb25Ub0NvbGxlY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyYW5jZUNlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmFuY2VEZWNsYXJhdGlvblNoZWV0Qm9yZGVyZWF1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmFuY2VQb2xpY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyZXJzSW52b2ljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJpbUFwcGxpY2F0aW9uRm9yUGF5bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJuYWxUcmFuc3BvcnRPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50cmFzdGF0RGVjbGFyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVudG9yeUFkanVzdG1lbnRTdGF0dXNSZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVudG9yeU1vdmVtZW50QWR2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlbnRvcnlSZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVudG9yeVN0YXR1c0FkdmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52b2ljaW5nRGF0YVNoZWV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJdGVtc0Jvb2tlZFRvQUZpbmFuY2lhbEFjY291bnRSZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkpvYkxvdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS2FuYmFuU2NoZWR1bGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlYXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWFzZUJsYW5rZXRBZ3JlZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlYXNlSW52b2ljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhc2VPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVnYWxTdGF0ZW1lbnRPZkFuQWNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGV0dGVyQ29udHJhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxldHRlck9mSW5kZW1uaXR5Rm9yTm9uLVN1cnJlbmRlck9mQmlsbE9mTGFkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZXR0ZXJPZkludGVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlmZUluc3VyYW5jZVBheXJvbGxEZWR1Y3Rpb25zQWR2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaXN0aW5nU3RhdGVtZW50T2ZBbkFjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYWRsaW5lRG9jdW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxvd1ZhbHVlUGF5bWVudE9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWtlT3JCdXlQbGFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW51ZmFjdHVyaW5nSW5zdHJ1Y3Rpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW51ZmFjdHVyaW5nU3BlY2lmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFyaXRpbWVEZWNsYXJhdGlvbk9mSGVhbHRoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXN0ZXJBaXJXYXliaWxsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXN0ZXJCaWxsT2ZMYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFsSW5zcGVjdGlvbkFuZFJlY2VpdmluZ1JlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0ZVNSZWNlaXB0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWFuc09mVHJhbnNwb3J0QWR2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWFuc09mVHJhbnNwb3J0YXRpb25BdmFpbGFiaWxpdHlJbmZvcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVhbnNPZlRyYW5zcG9ydGF0aW9uU2NoZWR1bGVJbmZvcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVhdEFuZE1lYXRCeS1Qcm9kdWN0c1Nhbml0YXJ5Q2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lYXRGb29kUHJvZHVjdHNTYW5pdGFyeUNlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXNzYWdlSW5EZXZlbG9wbWVudFJlcXVlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1ldGVyZWRTZXJ2aWNlc0ludm9pY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbGxDZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9kaWZpY2F0aW9uT2ZFeGlzdGluZ01lc3NhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vdmVtZW50Q2VydGlmaWNhdGVBVHIxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNdWx0aWRyb3BPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTXVsdGltb2RhbENvbWJpbmVkVHJhbnNwb3J0RG9jdW1lbnRHZW5lcmljIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNdWx0aW1vZGFsVHJhbnNwb3J0RG9jdW1lbnRHZW5lcmljIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNdWx0aXBsZVBheW1lbnRPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmFtZVByb2R1Y3RQbGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV3Q29kZVJlcXVlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld01lc3NhZ2VSZXF1ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXdPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV3UHJvZHVjdEludHJvZHVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV3U3RvcmVPcGVuaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tTmVnb3RpYWJsZU1hcml0aW1lVHJhbnNwb3J0RG9jdW1lbnRHZW5lcmljIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tUHJlLUF1dGhvcmlzZWREaXJlY3REZWJpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uLVByZS1BdXRob3Jpc2VkRGlyZWN0RGViaXRSZXF1ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RGb3JTYWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RpY2VPZkNpcmN1bXN0YW5jZXNQcmV2ZW50aW5nRGVsaXZlcnlHb29kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90aWNlT2ZDaXJjdW1zdGFuY2VzUHJldmVudGluZ1RyYW5zcG9ydEdvb2RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RpZmljYXRpb25PZkVtZXJnZW5jeVNoaWZ0aW5nRnJvbVRoZURlc2lnbmF0ZWRQbGFjZUluUG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90aWZpY2F0aW9uT2ZVc2FnZU9mQmVydGhPck1vb3JpbmdGYWNpbGl0aWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZlclF1b3RhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3BlcmF0aW5nSW5zdHJ1Y3Rpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcHRpY2FsQ2hhcmFjdGVyUmVhZGluZ1BheW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlclN0YXR1c0VucXVpcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yZGVyU3RhdHVzUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNrYWdlUmVzcG9uc2VDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNraW5nSW5zdHJ1Y3Rpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNraW5nTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydGlhbEludm9pY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5SW5mb3JtYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhc3Nlbmdlckxpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhc3Nwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50Qm9uZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudE9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50T3JQZXJmb3JtYW5jZUJvbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRSZXF1ZXN0Rm9yQ29tcGxldGVkVW5pdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRWYWx1YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRWYWx1YXRpb25Gb3JVbnNjaGVkdWxlZEl0ZW1zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJmb3JtYW5jZUJvbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBoYXJtYWNldXRpY2FsU2FuaXRhcnlDZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGh5dG9zYW5pdGFyeUNlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWNrVXBOb3RpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvcnRDaGFyZ2VzRG9jdW1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3N0UmVjZWlwdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG91bHRyeVNhbml0YXJ5Q2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWFkdmljZU9mQUNyZWRpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlQXV0aG9yaXplZERpcmVjdERlYml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVBdXRob3JpemVkRGlyZWN0RGViaXRSZXF1ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVmZXJlbmNlQ2VydGlmaWNhdGVPZk9yaWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlbGltaW5hcnlDcmVkaXRBc3Nlc3NtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVsaW1pbmFyeVNhbGVzUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVwYXltZW50SW52b2ljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNDdXN0b21zRG9jdW1lbnRNZXNzYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmljZVNhbGVzQ2F0YWxvZ3VlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmljZVNhbGVzQ2F0YWxvZ3VlUmVzcG9uc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaWNlZEFsdGVybmF0ZVRlbmRlckJpbGxPZlF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmljZWRUZW5kZXJCb3EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaWNlTmVnb3RpYXRpb25SZXN1bHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaWNlVmFyaWF0aW9uSW52b2ljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvY2Vzc0RhdGFSZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3REYXRhTWVzc2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdFBlcmZvcm1hbmNlUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0U3BlY2lmaWNhdGlvblJlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZm9ybWFJbnZvaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9ncmVzc2l2ZURpc2NoYXJnZVJlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdE1hc3RlclBsYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2plY3RNYXN0ZXJTY2hlZHVsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdFBsYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2plY3RQbGFubmluZ0F2YWlsYWJsZVJlc291cmNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdFBsYW5uaW5nQ2FsZW5kYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2plY3RQcm9kdWN0aW9uUGxhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdFJlY292ZXJ5UGxhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdFNjaGVkdWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9taXNzb3J5Tm90ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbW90aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm92aXNpb25hbFBheW1lbnRWYWx1YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlT3JkZXJDaGFuZ2VSZXF1ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdXJjaGFzZU9yZGVyUmVzcG9uc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNpbmdTcGVjaWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFsaXR5RGF0YU1lc3NhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5VmFsdWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eVZhbHVhdGlvblJlcXVlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdW90YVByaW9yQWxsb2NhdGlvbkNlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsQ29uc2lnbm1lbnROb3RlR2VuZXJpY1Rlcm0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYWR5Rm9yRGVzcGF0Y2hBZHZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYXNzaWdubWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWlwdEN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2hhcmdpbmdEb2N1bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjb3JkVXBkYXRlU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaW9uYWxBcHBlbGxhdGlvbkNlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RyYXRpb25DaGFuZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2lzdHJhdGlvbkRvY3VtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RyYXRpb25SZW5ld2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWplY3RlZERpcmVjdERlYml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGVkRG9jdW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGVhc2VBZ2FpbnN0QXNzb3J0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsZWFzZU9yRGVsaXZlcnlPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVtaXR0YW5jZUFkdmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVuZXdhbE9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZW50YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlb3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGFpckFuZFJldHVybiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwYWlyT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcG9ydE9mVHJhbnNhY3Rpb25zRm9ySW5mb3JtYXRpb25Pbmx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBvcnRPZlRyYW5zYWN0aW9uc1doaWNoTmVlZEZ1cnRoZXJJbmZvcm1hdGlvbkZyb21UaGVSZWNlaXZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWVzdEZvckFuQW1lbmRtZW50T2ZBRG9jdW1lbnRhcnlDcmVkaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVlc3RGb3JEZWxpdmVyeUluc3RydWN0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWVzdEZvckZpbmFuY2lhbENhbmNlbGxhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWVzdEZvclBheW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVlc3RGb3JRdW90ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWVzdEZvclN0YXRpc3RpY2FsRGF0YSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWVzdEZvclRyYW5zZmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1aXJlbWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVpcmVtZW50c0NvbnRyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZS1TZW5kaW5nQ29uc2lnbm1lbnROb3RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNwb25zZVRvQW5BbWVuZG1lbnRPZkFEb2N1bWVudGFyeUNyZWRpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzcG9uc2VUb0FUcmFkZVN0YXRpc3RpY3NNZXNzYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNwb25zZVRvUHJldmlvdXNCYW5raW5nU3RhdHVzTWVzc2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzcG9uc2VUb1F1ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNwb25zZVRvUmVnaXN0cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXN0b3ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3VtZVdvcmtPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0YWlsZXJQcmVjb21taXRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXZlcnNhbE9mQ3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXZlcnNhbE9mRGViaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvYWRDb25zaWdubWVudE5vdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvYWRMaXN0LVNtZ3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJ1c2hPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FmZXR5QW5kSGF6YXJkRGF0YVNoZWV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWZldHlPZkVxdWlwbWVudENlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWZldHlPZlJhZGlvQ2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhZmV0eU9mU2hpcENlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYW1wbGVPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FuaXRhcnlDZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vhc29uVGlja2V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWFXYXliaWxsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWdtZW50Q2hhbmdlUmVxdWVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VnbWVudFJlcXVlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGZCaWxsZWRDcmVkaXROb3RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxmLUJpbGxlZEludm9pY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcXVlbmNlZERlbGl2ZXJ5U2NoZWR1bGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VEaXJlY3RvcnlEZWZpbml0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXR0bGVtZW50T2ZBTGV0dGVyT2ZDcmVkaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwZWRPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBlcnNMZXR0ZXJPZkluc3RydWN0aW9uc0FpciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBpbmdJbnN0cnVjdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwaW5nTm90ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHNTdG9yZXNEZWNsYXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2ltcGxlRGF0YUVsZW1lbnRDaGFuZ2VSZXF1ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaW1wbGVEYXRhRWxlbWVudFJlcXVlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpbmdsZUFkbWluaXN0cmF0aXZlRG9jdW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwYXJlUGFydHNPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbE9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcG90T3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YW5kQWxvbmVPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhbmRpbmdPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVtZW50T2ZBY2NvdW50TWVzc2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGlzdGljYWxBbmRPdGhlckFkbWluaXN0cmF0aXZlSW50ZXJuYWxEb2N1bWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRpc3RpY2FsRGF0YSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGlzdGljYWxEZWZpbml0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGlzdGljYWxEb2N1bWVudEV4cG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGlzdGljYWxEb2N1bWVudEltcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdHVzSW5mb3JtYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXR1c1JlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvcFdvcmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b3Jlc1JlcXVpc2l0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJjb250cmFjdG9yUGxhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3Vic3RpdHV0ZUFpcldheWJpbGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1bW1hcnlTYWxlc1JlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxlbWVudGFyeURvY3VtZW50Rm9yQXBwbGljYXRpb25Gb3JDYXJnb09wZXJhdGlvbk9mRGFuZ2Vyb3VzR29vZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBsZW1lbnRhcnlEb2N1bWVudEZvckFwcGxpY2F0aW9uRm9yVHJhbnNwb3J0T2ZEYW5nZXJvdXNHb29kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGx5T3JTZXJ2aWNlT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN3YXBPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFua2VyQmlsbE9mTGFkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXNrT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheENhbGN1bGF0aW9uQ29uZmlybWF0aW9uUmVzcG9uc2VDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhEZWNsYXJhdGlvbkdlbmVyYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheERlY2xhcmF0aW9uVmFsdWVBZGRlZFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4RGVtYW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhJbnZvaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhOb3RpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcm1pbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXN0UmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaHJvdWdoQmlsbE9mTGFkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaWZGb3JtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW1lTWF0ZXJpYWxzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaXJDYXJuZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvbGxDb252ZXJzaW9uT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWNraW5nTnVtYmVyQXNzaWdubWVudFJlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhZGVEYXRhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRDYXJnb1JlbGVhc2VPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RGVwYXJ0dXJlUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnREaXNjaGFyZ2VJbnN0cnVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RGlzY2hhcmdlUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFbWVyZ2VuY3lDYXJkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFbXB0eUVxdWlwbWVudEFkdmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50QWNjZXB0YW5jZU9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFcXVpcG1lbnREYW1hZ2VSZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydEVxdWlwbWVudERlbGl2ZXJ5Tm90aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFcXVpcG1lbnREaXJlY3RJbnRlcmNoYW5nZVJlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50RW1wdHlSZWxlYXNlSW5zdHJ1Y3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydEVxdWlwbWVudEltcGVuZGluZ0Fycml2YWxBZHZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydEVxdWlwbWVudE1haW50ZW5hbmNlQW5kUmVwYWlyTm90aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFcXVpcG1lbnRNYWludGVuYW5jZUFuZFJlcGFpcldvcmtBdXRob3JpemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFcXVpcG1lbnRNYWludGVuYW5jZUFuZFJlcGFpcldvcmtFc3RpbWF0ZUFkdmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50TWFpbnRlbmFuY2VBbmRSZXBhaXJXb3JrRXN0aW1hdGVPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50TW92ZW1lbnRJbnN0cnVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50TW92ZW1lbnRSZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydEVxdWlwbWVudE9mZkhpcmVSZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydEVxdWlwbWVudE9mZkhpcmVSZXF1ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFcXVpcG1lbnRPbkhpcmVPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50T25IaXJlUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFcXVpcG1lbnRPbkhpcmVSZXF1ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFcXVpcG1lbnRQYWNraW5nSW5zdHJ1Y3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydEVxdWlwbWVudFBpY2tVcEF2YWlsYWJpbGl0eUNvbmZpcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50UGlja1VwQXZhaWxhYmlsaXR5UmVxdWVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50UGlja1VwUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFcXVpcG1lbnRTaGlmdFJlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50U3BlY2lhbFNlcnZpY2VJbnN0cnVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50U3RhdHVzQ2hhbmdlUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFcXVpcG1lbnRTdG9ja1JlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50U3VydmV5T3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydEVxdWlwbWVudFN1cnZleU9yZGVyUmVzcG9uc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydEVxdWlwbWVudFN1cnZleVJlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50VW5wYWNraW5nSW5zdHJ1Y3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydEVxdWlwbWVudFVucGFja2luZ1JlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0TG9hZGluZ0luc3RydWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRMb2FkaW5nUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRNb3ZlbWVudEdhdGVJblJlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0TW92ZW1lbnRHYXRlT3V0UmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRTdGF0dXNSZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydFN0YXR1c1JlcXVlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zc2hpcG1lbnREZXNwYXRjaEFkdmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNzaGlwbWVudE9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmVhdG1lbnROaWxPdXR0dXJuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmVhdG1lbnRQZXJzb25hbEVmZmVjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJlYXRtZW50VGltYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmVhdG1lbnRUaW1lVXBVbmRlcmJvbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyZWF0bWVudFVuZGVyYm9uZEJ5U2VhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmRlcmJvbmRBcHByb3ZhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5kZXJib25kUmVxdWVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdERvd24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRlZE5hdGlvbnNTdGFuZGFyZE1lc3NhZ2VSZXF1ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0RXhjaGFuZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXZlcnNhbE11bHRpcHVycG9zZVRyYW5zcG9ydERvY3VtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbnByaWNlZEJpbGxPZlF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbnNoaXBQZXJtaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVyZ2VudFNlcnZpY2VSZXF1ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVc2VyRGlyZWN0b3J5RGVmaW5pdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmFjY2luYXRpb25DZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmFsaWRhdGVkUHJpY2VkVGVuZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYWx1ZURlY2xhcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXNzZWxVbnBhY2tSZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZldGVyaW5hcnlDZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FnZURldGVybWluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhcmVob3VzZVdhcnJhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhcnJhbnR5T3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldheWJpbGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldlaWdodENlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWlnaHRMaXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaW5lQ2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ildvb2xIZWFsdGhDZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV3JpdHRlbkluc3RydWN0aW9uc0luQ29uZm9ybWFuY2VXaXRoQWRyQXJ0aWNsZU51bWJlcjEwMzg1Ii8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJDdXJyZW5jeSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQ3VycmVuY3lDb2RlZCIgdHlwZT0iQ3VycmVuY3lDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJDdXJyZW5jeUNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IkN1cnJlbmN5IiB0eXBlPSJDdXJyZW5jeSIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJDdXJyZW5jeUNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBRkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRaRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQURGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBRFAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFSUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVJTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBUkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFNRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVdGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBVUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFUUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVpNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCU0QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJIRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQkRUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCQkQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJZQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQkVGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCWkQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJNRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlROIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCT0IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJBSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQldQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCUkwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJORCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQkdMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCSUYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktIUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0FEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDVkUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktZRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWE9GIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJYQUYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlhQRiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0xQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDTEYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNOWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ09QIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLTUYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNSQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSFJLIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDVVAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNZUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ1pLIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJES0siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRFTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQkFEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJESkYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRPUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWENEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFQ1MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVHUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1ZDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFUk4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVFSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRVRCIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFVVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlhFVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRktQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGSkQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlpBTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRklNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGUkYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdNRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0VMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHSEMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdJUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWEFVIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHUkQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdUUSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR05GIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHV1AiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdZRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSFRHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJITkwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhLRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSFVGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJU0siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklOUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSURSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJUkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklSUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVFEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJRVAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklMUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKTUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkpQWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSk9EIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLWlQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktFUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS1dEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBT1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktHUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTEFLIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMVkwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxCUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUxMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMU0wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxSRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTFlEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMVEwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxVRiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTU9QIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNS0QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1HRiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTVdLIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNWVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1WUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTVRMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNUk8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1VUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTVhOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNREwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1OVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUFEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNWk0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJPViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTU1LIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOQUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5QUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQU5HIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBV0ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5MRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQU9OIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUV0QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlpSTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTlpEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOSU8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5HTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS1BXIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOT0siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBLUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUEFCIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQR0siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBZRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUEVOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQSFAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBMTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUExaIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQVEUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUUFSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPTVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJPTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUlVSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSV0YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldTVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1REIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTQVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNCTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0NSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTTEwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNHRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0tLIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTSVQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNCRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU09TIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJaQVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktSVyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRVNQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMS1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNIUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0RBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTREQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNEUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1JHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTWkwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNFSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0hGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTWVAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRKUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVFpTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUSEIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRQRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVE9QIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUVEQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRORCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVFJMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUTU0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUVEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVR1giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVBSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRUNWIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVWVUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVpTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWVVYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZFQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVk5EIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJZRVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IllVTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWk1LIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJaV0QiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ikxhbmd1YWdlIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMYW5ndWFnZUNvZGVkIiB0eXBlPSJMYW5ndWFnZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ikxhbmd1YWdlQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iTG9jYWxlQ29kZWQiIHR5cGU9IkxvY2FsZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkxvY2FsZUNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9Ikxhbmd1YWdlRGVwZW5kZW50IiB0eXBlPSJ4Y2JsQm9vbGVhbiIgdXNlPSJvcHRpb25hbCIvPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMYW5ndWFnZSIgdHlwZT0iTGFuZ3VhZ2UiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTGFuZ3VhZ2VDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImFiIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJhZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImFyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJhcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImF6Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJiYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJnIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJiaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYmkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJibyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYnIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImNhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJjbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iY3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJkYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImR6Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImVvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImV1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJmYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZmkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImZqIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJmbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZnIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImZ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJnYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZ2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImdsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJnbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZ3UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImhhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJoZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iaGkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImhyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJodSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iaHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImlhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJpZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iaWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImlrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJpcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Iml1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJqYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ianciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImthIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJrayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ia2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImttIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJrbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ia28iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImtzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJrdSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ia3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImxhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJsbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Imx0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJsdiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibWciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im1pIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJtayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im1uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJtbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im1zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJtdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im5hIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJuZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibmwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im5vIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJvYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ib20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJwYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0icGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InBzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJwdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0icXUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InJtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJybiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0icm8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InJ1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJydyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ic2EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InNkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ic2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InNpIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ic2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InNtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ic28iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InNxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ic3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzdSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ic3YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InN3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ0YSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InRnIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ0aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idGkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InRrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ0bCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idG4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ0ciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InR0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ0dyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idWciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InVrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ1ciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idXoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InZpIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ2byIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0id28iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InhoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ5aSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ieW8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InphIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ6aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ienUiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTG9jYWxlQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImFlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJhZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYWciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImFpIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJhbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYXEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImFyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJhcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImF1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJhdyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYXoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJiYiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJiZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJiaSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYmoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJibiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYm8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJicyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJ1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJidyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJ6Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJjYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iY2MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImNkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJjZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iY2ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJjaSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImNsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJjbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iY24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImNvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJjciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iY3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImN1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJjdiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iY3giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJjeiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImRqIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJkayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZG0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJkeiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZWMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJlZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZWgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImZpIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJmaiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImZtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJmbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZnIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImdhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJnYiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZ2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJnZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZ2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImdpIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJnbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZ20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImduIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJncCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZ3EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImdyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJncyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZ3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Imd1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJndyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZ3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImhrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJobiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iaHIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Imh0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJodSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iaWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImllIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJpbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImlvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJpcSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iaXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImlzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iam0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImpvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJqcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ia2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImtnIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJraCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ia2kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImttIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJrbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ia3AiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImtyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJrdyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ia3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Imt6Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJsYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibGIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImxjIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJsaSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibGsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImxyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJscyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Imx1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJsdiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im1hIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJtYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im1nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJtaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibWsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im1sIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJtbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im1vIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJtcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibXEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im1yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJtcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im11Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJtdiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibXciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im14Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJteSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibXoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im5hIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJuYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im5mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJuZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibmkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im5sIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJubyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibnAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im5yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJudSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibnoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im9tIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJwYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0icGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InBmIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJwZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0icGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InBrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJwbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0icG0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InBuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJwciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0icHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InB3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJweSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0icWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJybyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0icnUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InJ3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ic2IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InNjIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ic2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InNnIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ic2kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InNqIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ic2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InNtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ic28iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InNyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ic3YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzeiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idGMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InRkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ0ZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idGciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InRoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ0aiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idG0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InRuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ0byIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idHAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InRyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ0dCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idHYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InR3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ0eiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InVnIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ1bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InV5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ1eiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idmEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InZjIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InZpIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ2biIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idnUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IndmIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ3cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ieWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Inl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ5dSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iemEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InptIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ6dyIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iVGF4UmVmZXJlbmNlIj4KLSAgICAgICAgPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgIDx4c2Q6ZXh0ZW5zaW9uIGJhc2U9IlRheCI+Ci0gICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlRheFRyZWF0bWVudENvZGVkIiB0eXBlPSJUYXhUcmVhdG1lbnRDb2RlIi8+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRheFRyZWF0bWVudENvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDwveHNkOmV4dGVuc2lvbj4KLSAgICAgICAgPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlRheFJlZmVyZW5jZSIgdHlwZT0iVGF4UmVmZXJlbmNlIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJUYXhMb2NhdGlvbiI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJMb2NhdGlvbiIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVGF4TG9jYXRpb24iIHR5cGU9IlRheExvY2F0aW9uIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJUYXgiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlRheEZ1bmN0aW9uUXVhbGlmaWVyQ29kZWQiIHR5cGU9IlRheEZ1bmN0aW9uUXVhbGlmaWVyQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVGF4RnVuY3Rpb25RdWFsaWZpZXJDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVGF4Q2F0ZWdvcnlDb2RlZCIgdHlwZT0iVGF4Q2F0ZWdvcnlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJUYXhDYXRlZ29yeUNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlJlYXNvblRheEV4ZW1wdENvZGVkIiB0eXBlPSJSZWFzb25UYXhFeGVtcHRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJSZWFzb25UYXhFeGVtcHRDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVGF4VHlwZUNvZGVkIiB0eXBlPSJUYXhUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVGF4VHlwZUNvZGVkT3RoZXIiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRheFBlcmNlbnQiIHR5cGU9IkRlY2ltYWwxMF80Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJUYXhQYXltZW50TWV0aG9kQ29kZWQiIHR5cGU9IlRheFBheW1lbnRNZXRob2RDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJUYXhQYXltZW50TWV0aG9kQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVGF4YWJsZUFtb3VudCIgdHlwZT0iRGVjaW1hbDIxXzYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRheGFibGVBbW91bnRJblRheEFjY291bnRpbmdDdXJyZW5jeSIgdHlwZT0iRGVjaW1hbDIxXzYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJUYXhBbW91bnQiIHR5cGU9IkRlY2ltYWwyMV82Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJUYXhBbW91bnRJblRheEFjY291bnRpbmdDdXJyZW5jeSIgdHlwZT0iRGVjaW1hbDIxXzYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iVGF4TG9jYXRpb24iLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlRheCIgdHlwZT0iVGF4Ii8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IlRheEZ1bmN0aW9uUXVhbGlmaWVyQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZGl2aWR1YWxEdXR5VGF4T3JGZWVDdXN0b21zSXRlbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxPZkFsbER1dGllc1RheGVzQW5kRmVlc0N1c3RvbXNJdGVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbE9mRWFjaER1dHlUYXhPckZlZVR5cGVDdXN0b21zRGVjbGFyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsT2ZBbGxEdXRpZXNUYXhlc0FuZEZlZVR5cGVzQ3VzdG9tc0RlY2xhcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zRHV0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheFJlbGF0ZWRJbmZvcm1hdGlvbiIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJUYXhDYXRlZ29yeUNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ3JpY3VsdHVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlyZWN0UGF5SUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2FibGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNhYmxlZFZldGVyYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1dHlQYWlkQnlTdXBwbGllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhlbXB0Rm9yRXhwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGVtcHRGb3JSZXNhbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZW1wdGZyb21Db3VudHlQcm9wZXJ0eVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhlbXB0ZnJvbUxvY2FsUHJvcGVydHlUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZW1wdGZyb21TY2hvb2xQcm9wZXJ0eVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhlbXB0ZnJvbVN0YXRlUHJvcGVydHlUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZW1wdEZyb21UYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZW1wdEdvb2RzYW5kU2VydmljZXNUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZW1wdExldHRlck9uRmlsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhlbXB0TG9jYWxTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGVtcHROb3RGb3JSZXNhbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZW1wdC1QZXJTdGF0ZUxhdyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhlbXB0UHJvdmluY2lhbFNhbGVzVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGVtcHRTYWxlVG9VU0dvdmVybm1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZW1wdFRvbGxTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVlRXhwb3J0SXRlbVRheE5vdENoYXJnZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhpZ2hlclJhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvbWVzdGVhZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFib3JUYXhhYmxlTWF0ZXJpYWxFeGVtcHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxvd2VyUmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0ZXJpYWxUYXhhYmxlTGFib3JFeGVtcHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1peGVkVGF4UmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uLUhvbWVzdGVhZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm8tTm90VGF4RXhlbXB0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RFeGVtcHRGb3JSZXNhbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdEV4ZW1wdE5vdEZvclJlc2FsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90VGF4YWJsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3BlblNwYWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlclByb3BlcnR5VGF4RXhlbXB0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdmVyNjUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY3VycmluZ0V4ZW1wdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZXNPdXRzaWRlU2NvcGVPZlRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhbmRhcmRSYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbGx5RXhlbXB0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc2ZlcnJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVXNhZ2VFeGVtcHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhbHVlQWRkZWRUYXhEdWVGcm9tQVByZXZpb3VzSW52b2ljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmFsdWVBZGRlZFRheE5vdE5vd0R1ZUZvclBheW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldvcmtpbmdGYXJtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJZZXMtVGF4RXhlbXB0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJaZXJvUmF0ZWRHb29kcyIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJSZWFzb25UYXhFeGVtcHRDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhlbXB0LUZvckV4cG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWWVzLVRheEV4ZW1wdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm8tTm90VGF4RXhlbXB0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGVtcHQtRm9yUmVzYWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RFeGVtcHRPckZvclJlc2FsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhlbXB0LU5vdEZvclJlc2FsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90RXhlbXB0Tm90Rm9yUmVzYWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXJlY3RQYXlJZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhlbXB0LVNhbGVUb1VTR292ZXJubWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhlbXB0LVBlclN0YXRlTGF3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJvclRheGFibGVNYXRlcmlhbEV4ZW1wdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0ZXJpYWxUYXhhYmxlTGFib3JFeGVtcHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdFRheGFibGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2FibGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGVtcHRUb2xsU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhlbXB0LUdvb2RzQW5kU2VydmljZXNUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZW1wdC1Qcm92aW5jaWFsU2FsZXNUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvbWVzdGVhZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdyaWN1bHR1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldvcmtpbmdGYXJtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVuU3BhY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZW1wdExvY2FsU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzYWJsZWRWZXRlcmFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tSG9tZXN0ZWFkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdmVyNjUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZW1wdEZyb21TY2hvb2xQcm9wZXJ0eVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhlbXB0RnJvbUxvY2FsUHJvcGVydHlUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY3VycmluZ0V4ZW1wdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhlbXB0RnJvbUNvdW50eVByb3BlcnR5VGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbGx5RXhlbXB0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVc2FnZUV4ZW1wdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhlbXB0RnJvbVN0YXRlUHJvcGVydHlUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyUHJvcGVydHlUYXhFeGVtcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZW1wdC1MZXR0ZXJPbkZpbGUiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iVGF4VHlwZUNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI5MTFDaXR5VGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI5MTFDb3VudHlUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjkxMUV4Y2lzZVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iOTExU3RhdGVUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjkxMVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb21tb2RhdGlvbnNUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkVmFsb3JlbVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdyaWN1bHR1cmFsRXhwb3J0UmViYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ3JpY3VsdHVyYWxsZXZ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGNvaG9saWNCZXZlcmFnZVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxjb2hvbE1hcmtUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbFRheGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbnRpLUR1bXBpbmdEdXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3Nlc3NtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc0xpY2Vuc2VGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1c2luZXNzUHJpdmlsZWdlVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNpdHlSZW50YWxUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNpdHlTYWxlc1RheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2l0eVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29mZmVlVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2luT3BlcmF0ZWREZXZpY2VUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1vZGl0eVNwZWNpZmljVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3Jwb3JhdGVJbmNvbWVUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdW50ZXJ2YWlsaW5nRHV0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291bnR5T3JQYXJpc2hTYWxlc1RheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291bnR5UmVudGFsVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VudHlUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNEdXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWZhdWx0TGFib3JUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveW1lbnRUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZXJneVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5oYW5jZWQ5MTFTdGF0ZUV4Y2lzZVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW52aXJvbm1lbnRhbFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50VGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RhdGVUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4Y2lzZUR1dHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxFeGNpc2VUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxJbmNvbWVUYXhXaXRoaG9sZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbFZhbHVlQWRkZWRUYXhPbkdvb2RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsVmFsdWVBZGRlZFRheE9uU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZUluTGlldSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRklDQU1lZGljYXJlVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGSUNBU29jaWFsU2VjdXJpdHlUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZJQ0FUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyYW5jaGlzZVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnVlbExVU1RUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1ZWxTcGlsbFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnVlbFN1cGVyRnVuZFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FtaW5nVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW5lcmFsQ29uc3RydWN0aW9uVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHaWZ0VGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb29kc0FuZFNlcnZpY2VzVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcm9zc1JlY2VpcHRzVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYW5kaWNhcFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGF6YXJkb3VzV2FzdGVUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhpZ2h3YXlVc2VUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklsbHVtaW5hbnRzVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXBvcnRUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZGl2aWR1YWxJbmNvbWVUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZGl2aWR1YWxUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluaGVyaXRhbmNlVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm5hdGlvbmFsRnVlbFRheEFncmVlbWVudFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFib3JCeVRyYWRlVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWFreVVuZGVyZ3JvdW5kU3RvcmFnZVRhbmtUYXhGZWRlcmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWFreVVuZGVyZ3JvdW5kU3RvcmFnZVRhbmtUYXhTdGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGljZW5zZVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlnaHREdWVzUGF5YWJsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYWxDb25zdHJ1Y3Rpb25UYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2FsU2FsZXNUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2FsVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMdXN0VGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXRlcmlhbFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWV0cm9wb2xpdGFuVHJhbnNpdFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaW11bVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlzY2VsbGFuZW91c0Nhc2hEZXBvc2l0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaXNjZWxsYW5lb3VzU3RhdGVUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vbmV0YXJ5Q29tcGVuc2F0b3J5QW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3RvckZ1ZWxUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik11bmljaXBhbFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2NjdXBhdGlvbmFsVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlclRheGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXBlckNvbnNvcnRpdW1UYXgtSXRhbHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcnNvbmFsUHJvcGVydHlUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBldHJvbGV1bVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9zdFRocmVzaG9sZFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlZmVyZW5jZUR1dHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZVRocmVzaG9sZFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvdmlzaW9uYWxjb3VudGVydmFpbGluZ0R1dHlCb25kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm92aXNpb25hbENvdW50ZXJ2YWlsaW5nRHV0eUNhc2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3Zpc2lvbmFsRHV0eUJvbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3Zpc2lvbmFsRHV0eUNhc2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1YmxpY0hlYWx0aEFuZEVkdWNhdGlvblRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhbFByb3BlcnR5VGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWxlc0FuZFVzZVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Nob29sVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRhcnlQZXJjZW50YWdlVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXZlcmFuY2VUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaWZ0ZWRTb2NpYWxTZWN1cml0aWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlmdGVkV2FnZVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29saWRXYXN0ZVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbENvbnN0cnVjdGlvblRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhZGl1bVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhbXBEdXR5LUltcG9zdGFkaUJvbGxvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZWFuZExvY2FsU2FsZXNUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlQW5kTG9jYWxUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlQW5kUHJvdmluY2lhbFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVFeGNpc2VUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlb3JQcm92aW5jaWFsRnVlbFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVPclByb3ZpbmNpYWxTYWxlc1RheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVvclByb3ZpbmNpYWxUYXhPbkdvb2RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZW9yUHJvdmluY2lhbFRheE9uU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlUmVudGFsVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZVRheG9uU3BlY2lmaWNMYWJvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwZXJmdW5kVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1c3BlbmRlZER1dHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbGVjb21tdW5pY2F0aW9uc0RldmljZUZvclRoZURlYWZTZXJ2aWNlRXhjaXNlVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWxlY29tbXVuaWNhdGlvbnNUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRocmVzaG9sZFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG9iYWNjb1RheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG9ubmFnZVRheGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG91cmlzbVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNpdFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHVybk92ZXJUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuZW1wbG95bWVudFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVXNlVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVdGlsaXR5VXNlcnNUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhbHVhdGlvbkRlcG9zaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhbHVlQWRkZWRUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldlbGxTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaXRoaG9sZGluZ1RheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29ya2Vyc0NvbXBlbnNhdGlvblRheCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJEZWNpbWFsMTBfNCI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOmRlY2ltYWwiPgotICAgICAgICAgICAgPHhzZDp0b3RhbERpZ2l0cyB2YWx1ZT0iMTAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZnJhY3Rpb25EaWdpdHMgdmFsdWU9IjQiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iVGF4UGF5bWVudE1ldGhvZENvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3JtYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpcmVjdFBheSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VsZkFzc2VzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5VmVuZG9yIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkRlY2ltYWwyMV82Ij4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6ZGVjaW1hbCI+Ci0gICAgICAgICAgICA8eHNkOnRvdGFsRGlnaXRzIHZhbHVlPSIyMSIvPgotICAgICAgICAgICAgPHhzZDpmcmFjdGlvbkRpZ2l0cyB2YWx1ZT0iNiIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTG9jYXRpb24iPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iTG9jYXRpb25RdWFsaWZpZXJDb2RlZCIgdHlwZT0iTG9jYXRpb25RdWFsaWZpZXJDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJMb2NhdGlvblF1YWxpZmllckNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6Y2hvaWNlPgotICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IkxvY2F0aW9uSWRlbnRpZmllciIvPgotICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJFeHRlcm5hbEFkZHJlc3NJRCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ik5hbWVBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8L3hzZDpjaG9pY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IkdQU0Nvb3JpZGluYXRlcyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTG9jYXRpb24iIHR5cGU9IkxvY2F0aW9uIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkxvY2F0aW9uUXVhbGlmaWVyQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikp1cmlzZGljdGlvblRvUmVjZWl2ZUNyZWRpdEZvclVuaWZvcm1Db21tZXJjaWFsQ29kZUZpbGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNtaXR0aW5nVXRpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbm9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZW5zdXNTY2hlZHVsZUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaWZvcm1Db21tZXJjaWFsQ29kZUZpbGluZ09mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudEFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlbnN1c0Jsb2NrR3JvdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvbWVBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb21lQmFzZUFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlbnN1c1RyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZW5zdXNTY2hlZHVsZUsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2FsQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFpbGluZ0FkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZmljZUFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcm1hbmVudEFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpcnRocGxhY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ildvcmxkd2lkZUdlb2dyYXBoaWNMb2NhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5lYXJlc3RDcm9zc1N0cmVldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kYXJ5Q3Jvc3NTdHJlZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhbmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFydGVyU2VjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFya2VySWRlbnRpZmllckxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb3V0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm91dGVTdWJkaXZpc2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JpZExvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXJrZXJUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXRpdHVkZS1Mb25naXR1ZGVTb3VyY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcFNvdXJjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFwUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmlkU291cmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGlxdW90Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCbG9jayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyYWluaG9sZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2l0eUJsb2NrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb290YWdlQ2FsbERpcmVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYXRpb25EaXJlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik91dGVyQ29udGluZW50YWxMZWFzZUxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcFF1YWRyYW5nbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW5jaXBhbE1lcmlkaWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdXRlckNvbnRpbmVudGFsU2hlbGZBcmVhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdXRlckNvbnRpbmVudGFsU2hlbGZCbG9jayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2ZmaWNpYWxQcm90cmFjdGlvbkRpYWdyYW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YXJ0ZXJRdWFydGVyUXVhcnRlclNlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YXJ0ZXJRdWFydGVyU2VjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VjdGlvblR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFic3RyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhZ3VlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJ2ZXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml2ZXJzYWxUcmFuc3ZlcnNlTWVyY2F0b3JRdWFkcmFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291cnNlRGlyZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcmVhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZW5kZXJzTG9jYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXZlcnNMb2NhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW5udWFsU3RhdGVtZW50c01haWxpbmdBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaXR5YW5kU3RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbFBvaW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJtZWRTZXJ2aWNlc0xvY2F0aW9uRGVzaWduYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyYW5jaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NFY29ub21pY0FyZWFSZWdpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb3Zlcm5tZW50QmlsbG9mTGFkaW5nT2ZmaWNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhY2VPZkJ1c2luZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW9wb2xpdGljYWxOYW1lQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291bnRyeU9mT3JpZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25maXJtYXRpb25NYWlsaW5nQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291bnRyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuYWRpYW5DdXN0b21zT2ZmaWNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ycmVzcG9uZGVuY2VNYWlsaW5nQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2l0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxSYXRlQmFzaXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdW50eU9yUGFyaXNoQW5kU3RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluVGFua0NhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuYWRpYW5TUExDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VudHlPclBhcmlzaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpYnV0aW9uQ2VudGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXN0aW5hdGlvbi1TaGlwcGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpY3RPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3RyaWN0T2ZSZXNpZGVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvbWljaWxlVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV2ZW50TG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVyTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhY3RvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWlnaHRFcXVhbGl6YXRpb25Qb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWlnbkZyZWlnaHRGb3J3YXJkZXJMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbEluZm9ybWF0aW9uUHJvY2Vzc2luZ1N0YW5kYXJkczU1LU5hbWVkUG9wdWxhdGVkUGxhY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVLlMuQ3VzdG9tc0ZhY2lsaXRpZXNJbmZvcm1hdGlvbmFuZFJlc291cmNlTWFuYWdlbWVudFN5c3RlbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWlnaHRTdGF0aW9uQWNjb3VudGluZ0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVpZ25UcmFkZVpvbmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWVBbG9uZ3NpZGVWZXNzZWwtRnJlZU9uQm9hcmRQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlaWdodFN0YXRpb25HZW9ncmFwaGljTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmF0aW9uYWxBaXJUcmFuc3BvcnRBc3NvY2lhdGlvbkxvY2F0aW9uUXVhbGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJc3N1ZUxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaWxpdGFyeVN0YW5kYXJkTW92ZW1lbnRQcm9jZWR1cmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3N0YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluU3RvcmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybWVkaWF0ZUZPQlBvaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3J0T2ZFbWJhcmthdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJubWVudEZ1cm5pc2hlZFByb3BlcnR5Rk9CUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2FsT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaWxsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXRyb3BvbGl0YW5TYW1wbGluZ0FyZWFSZWdpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXhpY2FuUG9zdGFsQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2l0eU9yU3RhdGVGcm9tUG9pbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW4tQWZ0ZXJMb2FkaW5nT25FcXVpcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyVW5saXN0ZWRGcmVlT25Cb2FyZFBvaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVuYW5kUHJlcGF5U3RhdGlvbkxpc3RDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlclVubGlzdGVkQWNjZXB0YW5jZVBvaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW4tU2hpcHBpbmdQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25WZXNzZWwtRnJlZU9uQm9hcmRQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9ydG9mQXJyaXZhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9ydG9mRGlzY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb2xpY3lNYWlsaW5nQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFyZW50c0FkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1hcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW9yQnVzaW5lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmluY2lwYWxTZXJ2aWNpbmdPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvb2xQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iM0RpZ2l0VVNaSVAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjREaWdpdFVTWklQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI1RGlnaXRVU1pJUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iM0RpZ2l0Q2FuYWRpYW5Qb3N0YWxDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI2RGlnaXRDYW5hZGlhblBvc3RhbENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhdGVBcmVhQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5SYWlsQ2FyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpb25hbEVkdWNhdGlvblNlcnZpY2VBZ2VuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2lvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUnVyYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YW5kYXJkQ2FycmllckFscGhhQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm91dGVBZG1pbmlzdHJhdGl2ZU1lc3NhZ2VUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJ1cmJhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2l0eU9yU3RhdGVBbmRQb2ludHNXaXRoaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjaG9vbERpc3RyaWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdW1tZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b3JhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjaG9vbENhbXB1c0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLVNQTEMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b3JlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZU9yUHJvdmluY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjaG9vbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5TdG9yYWdlVGFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3dpdGNoaW5nRGlzdHJpY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zY29udGluZW50YWxGcmVpZ2h0QnVyZWF1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXJtaW5hbENhcmdvTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcm1pbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3duc2hpcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVtcG9yYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsVGVycml0b3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhpbmdEaXN0cmljdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdGVkTmF0aW9uc0xvY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVXJiYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1c2luZXNzVW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmFjYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZpbGxhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlc3NlbFN0b3dhZ2VMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2hhcmYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhcmVob3VzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2ludGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJab25lQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3ZlcnNlYXNBbmRQb2ludExvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbFBvcnRPZkRpc2NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29sbGVjdENoYXJnZUxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zT2ZmaWNlT2ZNYW5pZmVzdE9yaWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc09mZmljZU9mTWFuaWZlc3REZXN0aW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0aXZpdHlMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luUmFpbEludGVybW9kYWxUZXJtaW5hbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzdGluYXRpb25SYWlsSW50ZXJtb2RhbFRlcm1pbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdE9wdGlvbmFsUG9ydE9mRGlzY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRPcHRpb25hbFBvcnRPZkRpc2NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhY2VPZkFjY2VwdGFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY29uc29saWRhdGlvblBvaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZS1Db25zb2xpZGF0aW9uUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvcnRPZkRpc2NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhY2VPZkRlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVpZ2h0UGF5YWJsZUF0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3J0T2ZFbnRyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9ydE9mRXhpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJpbVBvaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsT2ZMYWRpbmdQb3J0T2ZMb2FkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsT2ZMYWRpbmdQb3J0T2ZEaXNjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvcnRPZkxvYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc3RpbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbERlc3RpbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3BhdGNoaW5nUG9vbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbE9mTGFkaW5nT3JpZ2luT2ZHb29kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhY2VPZlJlY2VpcHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldHVyblBvb2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zc2hpcG1lbnRQb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVwYWlkQ2hhcmdlTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxPZkxhZGluZ1JlbGVhc2VPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaXJkT3B0aW9uYWxQb3J0T2ZEaXNjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF5UG9ydCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTG9jYXRpb25JZGVudGlmaWVyIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMb2NJRCI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IklkZW50aWZpZXIiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iTG9jYXRpb25EZXNjcmlwdGlvbiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTG9jYXRpb25JZGVudGlmaWVyIiB0eXBlPSJMb2NhdGlvbklkZW50aWZpZXIiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik5hbWVBZGRyZXNzIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkV4dGVybmFsQWRkcmVzc0lEIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmFtZTEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ik5hbWUyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJOYW1lMyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IlBPQm94Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTdHJlZXQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkhvdXNlTnVtYmVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTdHJlZXRTdXBwbGVtZW50MSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU3RyZWV0U3VwcGxlbWVudDIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkJ1aWxkaW5nIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJGbG9vciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUm9vbU51bWJlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iSW5ob3VzZU1haWwiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkRlcGFydG1lbnQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlBvc3RhbENvZGUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkNpdHkiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkNvdW50eSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJSZWdpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkRpc3RyaWN0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IkNvdW50cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iVGltZXpvbmUiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkFkZHJlc3NUeXBlQ29kZWQiIHR5cGU9IkFkZHJlc3NUeXBlQ29kZSIgdXNlPSJvcHRpb25hbCIgZGVmYXVsdD0iTm90QXBwbGljYWJsZSIvPgotICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJBZGRyZXNzVHlwZUNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmFtZUFkZHJlc3MiIHR5cGU9Ik5hbWVBZGRyZXNzIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJQT0JveCI+Ci0gICAgICAgIDx4c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgIDx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IlBPQm94UG9zdGFsQ29kZSIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgICAgPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQT0JveCIgdHlwZT0iUE9Cb3giLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlJlZ2lvbiI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVnaW9uQ29kZWQiIHR5cGU9IlJlZ2lvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlJlZ2lvbkNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlJlZ2lvbiIgdHlwZT0iUmVnaW9uIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IlJlZ2lvbkNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBVUFDVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVVOU1ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFVTlQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFVUUxEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBVVNBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBVVRBUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVVWSUMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFVV0EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSQUMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSQUwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSQU0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSQVAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSQkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSQ0UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSREYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSRVMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSR08iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSTUEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSTUciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSTVMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSTVQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSUEEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSUEIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSUEUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSUEkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSUFIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSUkoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSUk4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSUk8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSUlIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSUlMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSU0MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSU0UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSU1AiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSVE8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNBQUIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNBQkMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNBTUIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNBTkIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNBTkYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNBTlMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNBTlQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNBT04iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNBUEUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNBUUMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNBU0siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNBWVQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQU0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQVQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQkIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQkUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQkYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQkgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQksiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQkwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQk0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQk4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQk8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQlAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQlIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQlMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQlUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQlkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQ0EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQ0UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQ0ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQ0giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQ0kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQ0siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQ0wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQ08iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQ1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQ1MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQ1UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCQ1YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCREIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCREYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCREciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCREwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCRE4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCRE8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCRFUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCRFYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCRFkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCRVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCRVMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCRkkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCRk0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCR0wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCR00iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCR1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCR1MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCR1ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCR1kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCSEEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCSEkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCSEwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCSFIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCSFQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCSFciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCSVciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCS0UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCS0giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTEEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTEMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTEQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTEUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTEkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTE0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTE8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTFIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTFMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTFQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTFUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTUEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTUciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTUkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTUsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTU8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTVkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTkIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTkMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTkQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTkUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTkgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTksiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTkwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTk0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTlMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTlQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCTlUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCT00iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCT1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCT1giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCUEIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCUEwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCUE0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCUE8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCUFkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCUkQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCUkUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCUk0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCUlUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCU0MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCU0QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCU0UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCU0ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCU0giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCU0siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCU0wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCU04iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCU08iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCU1AiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCU1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCU1QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCU1UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCU1ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCU1kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCVEEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCVEQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCVEgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCVE8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCVFciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCV0EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCV0QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCV0ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCV0kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCV0wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCV00iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCV08iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCV1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCV1QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCWUsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCWU4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCWVMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCWVciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQUciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQUwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQU4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQU8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQVAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQVEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQVQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQVYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQkciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQkkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQkwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQk4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQk8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQlIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQlMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQloiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQ0EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQ0IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQ0UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQ0giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQ0wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQ04iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQ08iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQ1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQ1MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQ1QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUQ1oiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklURU4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklURkUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklURkciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklURkkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklURk8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklURlIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUR0UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUR08iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUR1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUSU0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUSVMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUS1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUTEMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUTEUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUTEkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUTE8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUTFQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUTFUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUTUMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUTUUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUTUkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUTU4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUTU8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUTVMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUTVQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUTkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUTk8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUTlUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUT1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUUEEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUUEMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUUEQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUUEUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUUEciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUUEkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUUE4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUUE8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUUFIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUUFMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUUFQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUUFYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUUFoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUUkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUUkMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUUkUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUUkciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUUkkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUUk0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUUk4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUUk8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUUlYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUU0EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUU0kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUU08iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUU1AiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUU1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUU1MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUU1YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUVEEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUVEUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUVE4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUVE8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUVFAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUVFIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUVFMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUVFYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUVUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUVkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUVkMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUVkUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUVkkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUVlIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUVlQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUVlYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTQUsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTQUwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTQVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTQVMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTQVoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTQ0EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTQ08iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTQ1QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTREMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTREUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTRkwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTR0EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTR1UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTSEkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTSUEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTSUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTSUwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTSU4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTS1MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTS1kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTTEEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTTUEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTTUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTTUUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTTUkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTTU4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTTU8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTTVAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTTVMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTTVQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTTkMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTTkQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTTkUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTTkgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTTkoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTTk0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTTlYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTTlkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTT0giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTT0siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTT1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTUEEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTUFIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTUkkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTU0MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTU0QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTVE4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTVFgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTVVQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTVkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTVkkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTVlQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTV0EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTV0kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTV1YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTV1kiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkNvdW50cnkiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkNvdW50cnlDb2RlZCIgdHlwZT0iQ291bnRyeUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkNvdW50cnlDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDb3VudHJ5IiB0eXBlPSJDb3VudHJ5Ii8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkNvdW50cnlDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQU4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFPIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBUSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFXIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBWiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJCIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQkUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQkgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCSiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQk0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJXIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQloiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ08iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ1UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNWIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDWCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ1kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNaIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJERSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iREoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRLIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJETSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRE8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRaIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRUUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRkkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZKIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRk0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZPIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR04iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHUSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR1UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdXIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSEsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSFQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhVIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSUUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSU8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklRIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSk8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkpQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS0ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS00iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktXIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS1oiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTEMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTFIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTFUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxWIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1DIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1IIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1NIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTU8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1QIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNUSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1TIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTVUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1WIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNVyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTVgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1ZIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNWiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5DIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJORSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5HIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5PIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTlIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5VIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOWiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT00iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUEYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUEsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUE4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUFciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBZIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUkUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJPIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUlciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0oiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNLIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU00iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNaIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVEQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJURyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVEgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRKIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVE4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRPIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVFIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVFciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRaIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVUciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVaIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVkMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVkkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV0YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJZRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWVQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IllVIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJaQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWk0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlpXIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJUaW1lem9uZSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVGltZXpvbmVDb2RlZCIgdHlwZT0iVGltZXpvbmVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJUaW1lem9uZUNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlRpbWV6b25lIiB0eXBlPSJUaW1lem9uZSIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJUaW1lem9uZUNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjEyLjAwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxMS40NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMTEuMzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjExLjE1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxMS4wMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMTAuNDUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjEwLjMwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxMC4xNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMTAuMDAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjA5LjQ1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwOS4zMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDkuMTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjA5LjAwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwOC40NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDguMzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjA4LjE1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwOC4wMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDcuNDUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjA3LjMwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwNy4xNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDcuMDAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjA2LjQ1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwNi4zMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDYuMTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjA2LjAwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwNS40NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDUuMzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjA1LjE1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwNS4wMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDQuNDUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjA0LjMwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwNC4xNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDQuMDAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjAzLjQ1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwMy4zMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDMuMTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjAzLjAwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwMi40NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDIuMzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjAyLjE1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwMi4wMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDEuNDUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjAxLjMwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwMS4xNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDEuMDAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjAwLjQ1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwMC4zMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDAuMTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjAwLjAwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDAuMTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wMC4zMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTAwLjQ1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDEuMDAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wMS4xNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTAxLjMwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDEuNDUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wMi4wMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTAyLjE1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDIuMzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wMi40NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTAzLjAwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDMuMTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wMy4zMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTAzLjQ1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDQuMDAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wNC4xNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTA0LjMwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDQuNDUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wNS4wMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTA1LjE1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDUuMzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wNS40NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTA2LjAwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDYuMTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wNi4zMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTA2LjQ1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDcuMDAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wNy4xNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTA3LjMwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDcuNDUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wOC4wMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTA4LjE1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDguMzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wOC40NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTA5LjAwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDkuMTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wOS4zMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTA5LjQ1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMTAuMDAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0xMC4xNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTEwLjMwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMTAuNDUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0xMS4wMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTExLjE1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMTEuMzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0xMS40NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTEyLjAwIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkFkZHJlc3NUeXBlQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY2VwdGFuY2VMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudHNQYXlhYmxlT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2tub3dsZWRnZW1lbnRSZWNpcGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkZGl0aW9uYWxBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRpdGlvbmFsRGVsaXZlcnlBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRpdGlvbmFsUGlja1VwQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxjb2hvbEJldmVyYWdlRGVwYXJ0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWx0ZXJuYXRlUmV0dXJuQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWx0ZXJuYXRpdmVBZGRyZXNzZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1ZGl0T2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYWlsbWVudFdhcmVob3VzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlkT3BlbmluZ0xvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsQW5kU2hpcFRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsZWRGcm9tIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsT2ZMYWRpbmdSZWNpcGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9va2luZ09mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuZHlBbmRDb25mZWN0aW9uc0RlcGFydG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYW5nZWRBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wYW55QXNzaWduZWRXZWxsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wYW55LU93bmVkT2lsRmllbGQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNpZ25lZUNvdXJpZXJUcmFuc2ZlclN0YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNpZ25vckNvdXJpZXJUcmFuc2ZlclN0YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnN1bHRhbnRzT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWN0T2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29weU1lc3NhZ2VUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ycG9yYXRlT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3JyZWN0ZWRBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeUFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc3RpbmF0aW9uTWFpbEZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaWZmZXJlbnRQcmVtaXNlQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpYnV0aW9uUmVjaXBpZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudE9yTWVzc2FnZUlzc3Vlck9yU2VuZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudFJlY2lwaWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9tZXN0aWNGaW5hbmNpYWxJbnN0aXR1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG93bnN0cmVhbU1ldGVyTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyb3AtT2ZmTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtZXJnZW5jeURlcGFydG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGFibGlzaGVkTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV2ZW50TG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbGluZ0FkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbGluZ0xvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaWxpbmdPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFsTWVzc2FnZVJlY2lwaWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYWxSZWNpcGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFsU2NoZWR1bGVkRGVzdGluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFuY2lhbEluc3RpdHV0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdENvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZsb3JhbERlcGFydG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVpZ25EaXNjbG9zdXJlSW5mb3JtYXRpb25PZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVpZ25PZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVpZ25SZWdpc3RyYXRpb25Mb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9ybWVyQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZW9uQm9hcmRQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJvemVuRGVwYXJ0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FyYWdlZExvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXNQbGFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FzVHJhbnNhY3Rpb25FbmRpbmdQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FzVHJhbnNhY3Rpb25Qb2ludDEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdhc1RyYW5zYWN0aW9uUG9pbnQyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXNUcmFuc2FjdGlvblN0YXJ0aW5nUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhemFyZG91c01hdGVyaWFsT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFkT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb21lT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXBvcnRlZEZyb21Mb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5jb3Jwb3JhdGVkTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluY29ycG9yYXRpb25TdGF0ZVBsYWNlT2ZCdXNpbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5jb3Jwb3JhdGlvblN0YXRlUHJpbmNpcGFsT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnF1aXJ5QWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zcGVjdGlvbkFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3BlY3Rpb25BbmRBY2NlcHRhbmNlTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3BlY3Rpb25Mb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdGFsbGVkQXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluLVN0b3JlQmFrZXJ5RGVwYXJ0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJlZExvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJvcmF0b3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0QnJlYWtUZXJtaW5hbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhc2VMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlzdGluZ09mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYWxDaGFpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYXRpb25PZkdvb2RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhdGlvbk9mR29vZHNGb3JDdXN0b21zRXhhbWluYXRpb25CZWZvcmVDbGVhcmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2F0aW9uT2ZMb2FkRXhjaGFuZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2F0aW9uT2ZTcG90Rm9yU3RvcmFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG90Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWlsQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFpbFRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW51ZmFjdHVyaW5nUGxhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hc3RlclByb3BlcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXRlcmlhbENoYW5nZU5vdGljZUFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFsRGlzcG9zaXRpb25BdXRob3JpemF0aW9uTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lYXREZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWV0aW5nTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lc3NhZ2VGcm9tIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXNzYWdlUmVjaXBpZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXNzYWdlVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5laWdoYm9yaG9vZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV3QWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV3U3VwcGx5U291cmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXh0RGVzdGluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5leHRTY2hlZHVsZWREZXN0aW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uLVRlbXBvcmFyeVN0b3JhZ2VGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90QXBwbGljYWJsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3BlcmF0b3JPZlRoZVRyYW5zZmVyUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbk1haWxGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luU3VibG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpblRlcm1pbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlckRlcGFydG1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdXRlckNvbnRpbmVudGFsU2hlbGZBcmVhTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik91dC1PZi1TdGF0ZVByaW5jaXBhbE9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3duaW5nSW52ZW50b3J5Q29udHJvbFBvaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0U291cmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50QWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyc29ubmVsT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaGFybWFjeURlcGFydG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBoeXNpY2FsQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlja1VwQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlwZWxpbmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpcGVsaW5lU2VnbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlwZWxpbmVTZWdtZW50Qm91bmRhcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYWNlT2ZCb3R0bGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhY2VPZkJ1c2luZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3N0YWxNYWlsaW5nQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlbGltaW5hcnlJbnNwZWN0aW9uTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZW1pc2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVzZW50QWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWFyeUNvbnRyb2xQb2ludExvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWNlRGVwYXJ0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdFNlcnZpY2VzQW5kUmVwYWlyc0NlbnRyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdENvb3JkaW5hdGlvbk9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdE1hbmFnZW1lbnRPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2plY3RQcm9wZXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvcGVydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YWxpdHlDb250cm9sIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWRpb0NvbnRyb2xTdGF0aW9uTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhaWxyb2FkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXB0TWV0ZXJMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWlwdFpvbmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmVkRnJvbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2ZXJTaXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXZpbmdMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2aW5nUG9pbnRGb3JDdXN0b21lclNhbXBsZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmluZ1N1Yi1Mb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjbGFtYXRpb25DZW50ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY29yZC1LZWVwaW5nQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmaW5lcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2lvbmFsT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RlcmVkT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxlYXNlVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbWl0VG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGFpcmluZ091dGxldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwYWlyT3JSZWZ1cmJpc2hMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0aW5nTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2VhcmNoSW5zdGl0dXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNpZGVuY2VPckRvbWljaWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXR1cm5lZFRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb3V0aW5nUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbGVzT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYW1wbGVzVG9CZVJldHVybmVkVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbXBsaW5nTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY29uZGFyeUxvY2F0aW9uQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kSG9tZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VsbGluZ09mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZUJ1cmVhdSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZUxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGVsdGVyZWRXb3Jrc2hvcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcEZyb20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU21hbGxCYXNlU3RhdGlvbkxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbWFsbENvbnRyb2xTdGF0aW9uTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvbGRUb0FuZFNoaXBUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29sZFRvSWZEaWZmZXJlbnRGcm9tQmlsbFRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9yYWdlQXJlYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvcmFnZUZhY2lsaXR5YXREZXN0aW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvcmFnZUZhY2lsaXR5QXRPcmlnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b3JlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb2xkVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YmNvbnRyYWN0T3JDb2duaXphbnRTZWN1cml0eU9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3ViamVjdFByb3BlcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWItT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJzaWRpYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJzaWRpYXJ5RGl2aXNpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBsaWVyT3JNYW51ZmFjdHVyZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBsaWVyc0NvcnBvcmF0ZU9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGx5U291cmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYW5rRmFybSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4QWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4Q29sbGVjdG9yc09mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVjaG5pY2FsT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXJtaW5hbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVybWluYWxMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVzdGluZ0xhYm9yYXRvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvb2xTb3VyY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zZmVyUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zZmVyVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydGF0aW9uT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbHRpbWF0ZUNvbnNpZ25lZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVWx0aW1hdGVDdXN0b21lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVWx0aW1hdGVQYXJlbnRDb21wYW55Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0UHJvcGVydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVwc3RyZWFtTWV0ZXJMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmFjYXRpb25Ib21lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZW5kb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZpZGVvRGVwYXJ0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FyZWhvdXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaG9sZXNhbGVyIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJHUFNDb29yaWRpbmF0ZXMiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkdQU1N5c3RlbSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkxhdGl0dWRlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTG9uZ2l0dWRlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJHUFNDb29yaWRpbmF0ZXMiIHR5cGU9IkdQU0Nvb3JpZGluYXRlcyIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJUYXhUcmVhdG1lbnRDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9UYXhBcHBsaWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXRJbnZvaWNlTGV2ZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3NzSW52b2ljZUxldmVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXRMaW5lTGV2ZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3NzTGluZUxldmVsIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik9yZGVySW52b2ljZU1lZGl1bVR5cGVDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2lyY3VpdHN3aXRjaGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0lUQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVJJTkMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdXJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhYmxlQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRURJVHJhbnNtaXNzaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGVjdHJvbmljTWFpbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXh0ZW5zaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaWxlVHJhbnNmZXJBY2Nlc3NNZXRob2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbGVGYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdFSVNNYWlsYm94Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJQk1JbmZvcm1hdGlvbkV4Y2hhbmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm5hbE1haWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvc3RCb3hObyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFja2V0U3dpdGNoaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTV0lGVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVsZXBob25lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWxlZ3JhcGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbGV4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWxlTWFpbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVsZVRleHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRXWCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWC40MDAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdFJlcXVpcmVkIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJPcmRlckRhdGVzIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlJlcXVlc3RlZFNoaXBCeURhdGUiIHR5cGU9InhjYmxEYXRldGltZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUmVxdWVzdGVkRGVsaXZlckJ5RGF0ZSIgdHlwZT0ieGNibERhdGV0aW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJQcm9taXNlRGF0ZSIgdHlwZT0ieGNibERhdGV0aW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IlZhbGlkaXR5RGF0ZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkNhbmNlbEJ5RGF0ZSIgdHlwZT0ieGNibERhdGV0aW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Ikxpc3RPZkRhdGVDb2RlZCIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iT3JkZXJEYXRlcyIgdHlwZT0iT3JkZXJEYXRlcyIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRGF0ZUNvZGVkIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJEYXRlQ29kZWQiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZkRhdGVDb2RlZCIgdHlwZT0iTGlzdE9mRGF0ZUNvZGVkIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJEYXRlQ29kZWQiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkRhdGUiIHR5cGU9InhjYmxEYXRldGltZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iRGF0ZVF1YWxpZmllciIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iRGF0ZUNvZGVkIiB0eXBlPSJEYXRlQ29kZWQiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkRhdGVRdWFsaWZpZXIiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkRhdGVRdWFsaWZpZXJDb2RlZCIgdHlwZT0iRGF0ZVF1YWxpZmllckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkRhdGVRdWFsaWZpZXJDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJEYXRlUXVhbGlmaWVyIiB0eXBlPSJEYXRlUXVhbGlmaWVyIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkRhdGVRdWFsaWZpZXJDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMzYwMzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjM2NTMwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIzNjU2MzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjM2MDI4MzEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjM2NTI4MzEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjM2NTYyODMxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxc3RTY2hlZHVsZURlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxc3RTY2hlZHVsZVNoaXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY2VsZXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjZXB0YW5jZURhdGVPZkRvY3VtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NlcHRhbmNlRGF0ZU9mR29vZHNEZWNsYXJhdGlvbkN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY2VwdGFuY2VEYXRlVGltZU9mR29vZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY2lkZW50QmVuZWZpdEFnZUxpbWl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NpZGVudEJlbmVmaXRQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY2lkZW50RGF0ZUFuZE9yVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjaWRlbnRJbnN1cmFuY2VFbGltaW5hdGlvblBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjaWRlbnRMaWZldGltZUJlbmVmaXRRdWFsaWZpY2F0aW9uQWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50YW50c09waW5pb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50Q2xvc2VkRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudGluZ01ldGhvZG9sb2d5Q2hhbmdlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudGluZ1BlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudGluZ1BlcmlvZEVuZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRpbmdQZXJpb2RTdGFydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRpbmdUcmFuc2FjdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRpbmdWYWx1ZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRpbmdZZWFyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50T3BlbmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50c1JlY2VpdmFibGUtU3RhdGVtZW50RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNrbm93bGVkZ21lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjcXVpc2l0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0aW9uRW5kRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0aXZpdHlSZXBvcnRpbmdEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3Rpdml0eVBlcmlvZERhdGVSYW5nZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0dWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3R1YWxBcmNoaXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcnJpdmFsRGF0ZVRpbWVBY3R1YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdHVhbENvbXBsZXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnR1cmVEYXRlVGltZUFjdHVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY2hhcmdlRGF0ZVRpbWVBY3R1YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdHVhbFBvcnRPZkVudHJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3R1YWxSZWxlYXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3R1YWxSZXR1cm5Ub1dvcmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXJ0RGF0ZUFjdHVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN1dGVNYW5pZmVzdGF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN1dGVNYW5pZmVzdGF0aW9uT2ZBQ2hyb25pY0NvbmRpdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkZHJlc3NQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkam91cm5tZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RlZEFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRqdXN0ZWRDb250ZXN0YWJpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRqdXN0ZWREZWF0aEJlbmVmaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkanVzdGVkRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RlZEhpcmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkanVzdGVkU3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkanVzdG1lbnRFZmZlY3RpdmVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RtZW50UGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RtZW50UGVyaW9kRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RtZW50UGVyaW9kU3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkanVzdG1lbnRQcm9jZXNzZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkanVzdG1lbnRQcm9taXNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRqdXN0bWVudFRvQmlsbERhdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZG1pbmlzdHJhdG9yT3JkZXJlZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkbWlzc2lvbkRhdGVBbmRPclRpbWVFeHBlY3RlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRvcHRpb25EYXRlQWN0dWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZpc2VBZnRlckRhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZpc2VCZWZvcmVEYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWR2aXNlQ29tcGxldGVkRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmlzZU9uRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmlzaW5nRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ3JlZW1lbnRUb1BheURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpcmVkRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxsb3RtZW50UGVyaW9kU3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbG93YWJsZUVmZmVjdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxsb3dlZFJlbmV3YWxEdXJhdGlvblBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWx0ZXJuYXRlQmFzZVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWx0ZXJuYXRlUHJvYmxlbVJlc29sdXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsdGVybmF0aXZlRHVlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW5hbHlzaXNNb250aEVuZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW5lc3RoZXNpYUFkbWluaXN0cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbm5pdmVyc2FyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW5udWFsUmVwb3J0RGVsaW5xdWVudE9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW5udWFsUmVwb3J0RHVlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW5udWFsUmVwb3J0RmlsaW5nRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW5udWFsUmVwb3J0TWFpbGluZ0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFubnVpdGl6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFubnVpdHlDb21tZW5jZW1lbnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbnRpY2lwYXRlZENsb3NpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpYW5jZVBsYWNlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYW50U2lnbmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYXRpb25FbnRyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYXRpb25Mb2dnZWREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhdGlvblN0YXR1cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwb2ludG1lbnRFZmZlY3RpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcG9pbnRtZW50RXhwaXJ5RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwcmFpc2FsT3JkZXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwcm92YWxPZmZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwcm92YWxEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcnJlc3RlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJyaXZhbERhdGVUaW1lQXRJbml0aWFsUG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJyaXZhbERhdGVUaW1lRWFybGllc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFycml2YWxEYXRlVGltZU9mVHJhbnNwb3J0TGVhZFRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFycml2YWxEYXRlVGltZVNjaGVkdWxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJyaXZhbERhdGVUaW1lVWx0aW1hdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFycml2YWxJbkNvdW50cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFydGVyaWFsQmxvb2RHYXNUZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc09mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NlbWJseVN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzZXRBbmRMaWFiaWxpdHlTY2hlZHVsZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2V0RG9jdW1lbnRhdGlvbkV4cGlyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2lnbmVkRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzaWdubWVudFJlY29yZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdHRlbmRhbmNlRGF0ZUFuZE9yVGltZUFuZE9yUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdWRpZW5jZURlZmljaWVuY3lQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1ZGl0UGVyaW9kQWZ0ZXJTcGxpdERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1ZGl0UGVyaW9kUHJpb3JUb1NwbGl0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXV0aGVudGljYXRpb25EYXRlVGltZU9mRG9jdW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhlbnRpY2F0aW9uVmFsaWRhdGlvbkRhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3JpemF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXV0b21hdGljUHJlbWl1bUxvYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF2YWlsYWJpbGl0eUR1ZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF2YWlsYWJpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXZlcmFnZURlbGl2ZXJ5RGVsYXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF2ZXJhZ2VQYXltZW50UGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBd2FyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFja09uTWFya2V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYWNrT3JkZXJEZWxpdmVyeURhdGVUaW1lUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYWxhbmNlRGF0ZVRpbWVQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbGFuY2VTaGVldERhdGVMYXRlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhc2VsaW5lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXNlbGluZUNvbXBsZXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXNlbGluZVN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZWZvcmVJbnZlbnRvcnlJc1JlcGxlbmlzaGVkQmFzZWRPblN0b2NrQ2hlY2tMZWFkVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVnaW5uaW5nTGF5RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVnaW5UaGVyYXB5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZW5lZmljaWFyeXNCYW5rc0R1ZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbmVmaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbmVmaXRBZGp1c3RtZW50RW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZW5lZml0QWRqdXN0bWVudFBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVuZWZpdEFkanVzdG1lbnRTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVuZWZpdEFwcGxpY2F0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVuZWZpdEJlZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZW5lZml0Q2hhbmdlRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbmVmaXRDcmVkaXRFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbmVmaXRDcmVkaXRQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbmVmaXRDcmVkaXRTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVuZWZpdERlYml0RW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZW5lZml0RGViaXRTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVuZWZpdEVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVuZWZpdFBheW1lbnRzVGVybWluYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZW5lZml0UGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZW5lZml0UmVsZWFzZUF1dGhvcml6YXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZW5lZml0c1BhaWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbmVmaXRUcmFuc2ZlckVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVuZWZpdFRyYW5zZmVyUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZW5lZml0VHJhbnNmZXJTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVuZWZpdFR5cGVHcm9zc1dlZWtseUFtb3VudEVmZmVjdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVuZWZpdFR5cGVOZXRXZWVrbHlBbW91bnRFZmZlY3RpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbmVmaXRQZXJpb2RFbmREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZW5lZml0UGVyaW9kU3RhcnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZXN0QmVmb3JlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVzdFRpbWVUb0NhbGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpYW5udWFsVGVybWluYWxJbnNwZWN0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlkRWZmZWN0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWRPcGVuRGF0ZUJpZHNXaWxsQmVPcGVuZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpZFByaWNlRXhjZXB0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsZWRUaHJvdWdoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsT2ZMYWRpbmdEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaXJ0aENlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaXJ0aERhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCbGFua3NWYWx1ZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJsdWVwcmludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9hcmRPZkRpcmVjdG9yc0luY29tcGxldGVBc09mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb2FyZE9mRGlyZWN0b3JzTm90QXV0aG9yaXplZEFzT2ZHaXZlbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvYXJkT2ZEaXJlY3RvcnNOb3RDb21wbGV0ZUFzT2ZHaXZlbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvYXJkT2ZEaXJlY3RvcnNSZWdpc3RyYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb29rRW50cnlEZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9va2luZ0RhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcml0aXNoVGhlcm1hbFVuaXRUZXN0UGVyZm9ybWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdWRnZXRMaW5lQXBwbGljYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc0NvbnRyb2xDaGFuZ2VEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc09wZW5lZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1c2luZXNzVGVybWluYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllcnNEb2NrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllcnNMb2NhbFRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbGN1bGF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FsZW5kYXJBbm5pdmVyc2FyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FsZW5kYXJZZWFyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5jZWxBZnRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuY2VsQWZ0ZXJFeENvdW50cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbmNlbEFmdGVyRXhGYWN0b3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5jZWxJZk5vdERlbGl2ZXJlZEJ5VGhpc0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbmNlbElmTm90UHVibGlzaGVkQnlUaGlzRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuY2VsSWZOb3RTaGlwcGVkQnlUaGlzRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuY2VsbGF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuY2VsbGF0aW9uRGF0ZVRpbWVMYXRlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcGl0YWxpemF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FwaXRhdGlvblBlcmlvZEVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FwaXRhdGlvblBlcmlvZFN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJnb0Jvb2tpbmdDb25maXJtZWREYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyZ29SZWxlYXNlRGF0ZVRpbWVVbHRpbWF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzZUNvbnZlcnRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzZVJlb3BlbmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXNoQ2FsbERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhdGVnb3J5Q2hhbmdlRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlYXNlZE9wZXJhdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmljYXRlRWZmZWN0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0aW9uT2ZXZWlnaHREYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VydGlmaWNhdGlvblBlcmlvZFN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0aW9uUmV2aXNpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYW5nZWRBY2NvdW50aW5nRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhbmdlZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZUJhY2tEYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2VQZXJpb2RFbmREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2VQZXJpb2RTdGFydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJ0T2ZBY2NvdW50UGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGVjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hlY2tlZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoaWxkYmlydGhEYXRlQW5kT3JUaW1lQWN0dWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGlsZGJpcnRoRGF0ZUVzdGltYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hyaXN0ZW5pbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNpdGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaXRpemVuc2hpcENoYW5nZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsYWltQWRtaW5pc3RyYXRvcktub3dsZWRnZU9mVGhlSW5qdXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGFpbUFkbWluaXN0cmF0b3JOb3RpZmllZE9mRW1wbG95ZWVMZWdhbFJlcHJlc2VudGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGFpbUluY3VycmVkRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xhaW1NYWRlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xhaW1Ob3RpZmljYXRpb25SZWNlaXZlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xhaW1zTWFkZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xhaW1TdGF0ZW1lbnRQZXJpb2RFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsYWltU3RhdGVtZW50UGVyaW9kU3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsYXVzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xlYXJhbmNlRGF0ZUN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsaW5pY2FsRXhhbWluYXRpb25EYXRlQW5kT3JUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbG9zZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsb3NlZFVudGlsRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xvc2luZ0RhdGVPZkZpcnN0QmFsYW5jZVNoZWV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbG9zaW5nRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsb3N1cmVEYXRlVGltZVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29sbGF0ZXJhbERlcGVuZGVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29sbGF0ZXJhbERlcGVuZGVudEJlZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsYXRlcmFsRGVwZW5kZW50RW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsZWN0aW9uRGF0ZVRpbWVFYXJsaWVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29sbGVjdGlvbkRhdGVUaW1lTGF0ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tZW5jZWRQdW1waW5nQmFsbGFzdERhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tZW5jZWRUYW5rQ2xlYW5pbmdEYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWVyY2lhbFJhdGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGFueVRlcm1pbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wYXJpc29uUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21waWxhdGlvbkRhdGVBbmRUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wbGFpbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBsZXRlZFB1bXBpbmdCYWxsYXN0RGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBsZXRlZFRhbmtDbGVhbmluZ0RhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wbGV0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGxldGlvbkRhdGVPclRpbWVOb3RBZnRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGxldGlvbkRhdGVPclRpbWVOb3RCZWZvcmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBsZXRpb25EYXRlT3JUaW1lU2NoZWR1bGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wbGlhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25kaXRpb25Jbml0aWFsVHJlYXRtZW50RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uZmluZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbmZpbmVtZW50RW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25maW5lbWVudFN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25maXJtYXRpb25EYXRlTGVhZFRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbmZpcm1lZERhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25uZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zb2xpZGF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNvbGlkYXRlZE9tbmlidXNCdWRnZXRSZWNvbmNpbGlhdGlvbkFjdENPQlJBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zb2xpZGF0ZWRPbW5pYnVzQnVkZ2V0UmVjb25jaWxpYXRpb25BY3RDT0JSQUJlZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zb2xpZGF0ZWRPbW5pYnVzQnVkZ2V0UmVjb25jaWxpYXRpb25BY3RDT0JSQUVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc29saWRhdGVkT21uaWJ1c0J1ZGdldFJlY29uY2lsaWF0aW9uQWN0Q09CUkFRdWFsaWZ5aW5nRXZlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNvbGlkYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zdHJ1Y3Rpb25EYXRlQWN0dWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zdHJ1Y3Rpb25TdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyU2FmZXR5Q29udmVudGlvbkNzY0luc3BlY3Rpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJTYWZldHlDb252ZW50aW9uQ3NjUGxhdGVFeHBpcmF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyU3RyaXBwaW5nRGF0ZVRpbWVVbHRpbWF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyU3R1ZmZpbmdEYXRlVGltZVVsdGltYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250ZXN0YWJpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGluZ2VuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRpbmdlbmN5RW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250aW51YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGludWF0aW9uT2ZQYXlTdGFydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRpbnVpbmdFZHVjYXRpb25SZXF1aXJlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGludW91c0NvdmVyYWdlRGF0ZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRpbnVvdXNQYXNzaXZlTW90aW9uQ1BNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdEF1ZGl0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RBd2FyZERhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdEJpbmRpbmdEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdENvbXBsZXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdENvc3RzVGhyb3VnaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3REYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdERlZmluaXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0RWZmZWN0aXZlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RFeHBpcnlEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdE1haWxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RQZXJmb3JtYW5jZURlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFBlcmZvcm1hbmNlU3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0UGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFJlLU9wZW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0U3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0dWFsRGVsaXZlcnlEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdHVhbFN0YXJ0RGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyaWJ1dGlvblBlcmlvZEVuZERhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmlidXRpb25QZXJpb2RTdGFydERhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmlidXRpb25zQ2Vhc2luZ0RhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cm9sUGxhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJvdmVydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnZlcnNpb25Qcml2aWxlZ2VFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnZlcnNpb25Ub1JlcGF5bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udmVyc2lvbkludG9Ib2xkaW5nQ29tcGFueURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnZlcnRlZFRvRWxlY3Ryb25pY0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnZleWFuY2VSZWdpc3RyYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb252aWN0ZWREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb29yZGluYXRpb25PZkJlbmVmaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb29yZGluYXRpb25PZkJlbmVmaXRzQmVnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvb3JkaW5hdGlvbk9mQmVuZWZpdHNFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcnJlY3RlZERhdGVPZkJpcnRoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3JyZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3NpZ25lclNpZ25lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291cnREaXNtaXNzYWxEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VydEV2ZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VydE5vdGljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291cnRSZWdpc3RyYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3ZlcmFnZUR1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3ZlcmFnZUlzc3VlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ292ZXJlZEluY29tZVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0QWR2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmVkaXREb2N1bWVudGF0aW9uRXhwaXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0ZWRTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmVkaXRlZFNlcnZpY2VCZWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0ZWRTZXJ2aWNlRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmVkaXRvcnNSZXF1ZXN0ZWRWYWx1ZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmltaW5hbFNlbnRlbmNlRHVyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyb3NzYm9yZGVyRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVRdWFudGl0eUVuZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVRdWFudGl0eVN0YXJ0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VyZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnJlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnJlbnRBdXRob3JpdHlDb250cm9sU3RhcnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50RGlzYWJpbGl0eVBlcmlvZEVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudERpc2FiaWxpdHlQZXJpb2RMYXN0RGF5V29ya2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50RGlzYWJpbGl0eVBlcmlvZFN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50SW5jb21lUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50TGVnYWxTdHJ1Y3R1cmVFZmZlY3RpdmVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50TGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudE1vbnRoRW5kaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50TmFtZUVmZmVjdGl2ZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnJlbnRSZXBvcnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50U2NoZWR1bGVEZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudFNjaGVkdWxlU2hpcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VydGFpbG1lbnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJ0YWlsbWVudERhdGVmcm9tQWR2aWNlT2ZQYXltZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lckNvbnRyYWN0RWZmZWN0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lckNvbnRyYWN0RXhwaXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJWYWx1ZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNDYXJnb1JlbGVhc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNDbGVhcmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNFbnRyeURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN5Y2xlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDeWNsZUJlZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDeWNsZUVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3ljbGVUb0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVBY2NvdW50TWF0dXJlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZUFjcXVpcmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlQW5kT3JUaW1lT2ZIYW5kbGluZ0VzdGltYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZUFzQXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVBc3NpZ25tZW50RmlsZWRGb3JSZWNvcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbmtydXB0Y3lGaWxlZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVCZWNhbWVBd2FyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZUNsYWltUGFpZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZUNvdXJzZU9mT3J0aG9kb250aWNzVHJlYXRtZW50QmVnYW5PcklzRXhwZWN0ZWRUb0JlZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlRGVlZEZpbGVkRm9yUmVjb3JkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlRGVmYXVsdFdhc0N1cmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlRG9jdW1lbnRhdGlvbk9yUGFwZXJ3b3JrT3JCb3RoV2FzU2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlsZWREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlRm9yZWNsb3N1cmVIZWxkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlRm9yZWNsb3N1cmVQcm9jZWVkaW5nc0luc3RpdHV0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVGb3JlY2xvc3VyZVNhbGVTY2hlZHVsZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVGb3JUaGVMYXN0VXBkYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlSGF6YXJkSW5zdXJhbmNlUG9saWN5Q2FuY2VsbGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlSGF6YXJkSW5zdXJhbmNlUG9saWN5UmVmdXNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU1hdGVyaWFsVXNhZ2VTdXNwZW5kZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZkFiYW5kb25tZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZBY3F1aXNpdGlvbk9mVGl0bGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZkFjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mQWR2YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mQXBwcmFpc2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZBc3NpZ25tZW50QXBwcm92YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZkFzc2lnbm1lbnRSZWplY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZkNsYWltIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZDbG9zaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZEYW1hZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlY2Vhc2VEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZEZWVkSW5MaWV1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZEaXZvcmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZFeHRlbnNpb25Ub0NvbnZleSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mRmlybUNvbW1pdG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZkZpcnN0TW9ydGdhZ2VQYXltZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZGaXJzdFJlZ2lzdHJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mRmlyc3RVbmN1cmVkRGVmYXVsdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mRm9yZWNsb3N1cmVOb3RpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZkxhc3RDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZMYXN0RHJhdyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mTGFzdEluc3RhbGxtZW50UmVjZWl2ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZkxhc3RQYXltZW50UmVjZWl2ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZkxhc3RVcGRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZkxvYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZkxvY2FsT2ZmaWNlQXBwcm92YWxPZkNvbnZleWFuY2VPZkRhbWFnZWRSZWFsRXN0YXRlUHJvcGVydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZkxvY2FsT2ZmaWNlQXBwcm92YWxPZkNvbnZleWFuY2VPZk9jY3VwaWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZMb2NhbE9mZmljZUNlcnRpZmljYXRpb25PZkNvbnZleWFuY2VPZkRhbWFnZWRSZWFsRXN0YXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZNYXhpbXVtTWVkaWNhbEltcHJvdmVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZOb3RpY2VPZlByb2JhYmxlSW5lbGlnaWJpbGl0eUZvckFzc2lnbm1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZk5vdGljZU9mUmVmZXJyYWxGb3JBc3NpZ25tZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZOb3RpY2VUb0NvbnZleSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mT3BlcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZPcmRlckxlYWRUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZQb3NzZXNzaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZQcm9kdWN0RmFpbHVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mUHJvcGVydHlJbnNwZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxlYXNlRnJvbUJhbmtydXB0Y3lEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZSZXBhaXJPclNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZlNlaXp1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZlNlcGFyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZlNvdXJjZURvY3VtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZTcGVjaWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZTdGFuZGFyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9uV2hpY2hBc3NldHNKdWRnZWRJbnN1ZmZpY2llbnRUb1BheUNyZWRpdG9ycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU91dHN0YW5kaW5nTG9hbkJhbGFuY2VSZXBvcnRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFja2FnaW5nRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZVBhaWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVQbGFjZWRJbkRpc2Zhdm91ciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZVBvc3Nlc3NvcnlBY3Rpb25Jbml0aWF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVQcmFjdGljZUNlYXNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZVByYWN0aWNlRXN0YWJsaXNoZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVQcm9wZXJ0eVNvbGQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVSZWFkeUZvckNvbGxlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVSZWRlbXB0aW9uUGVyaW9kRW5kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZVJlZmVycmVkVG9BdHRvcm5leUZvckZvcmVjbG9zdXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1ZXN0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZVRocm91Z2hXaGljaFByb3BlcnR5VGF4ZXNIYXZlQmVlblBhaWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVUaW1lT2ZEaXNjb3VudFRlcm1pbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlVGltZU9mSW50ZXJlc3REdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVUaW1lT2ZMYXRlc3RBY2NvdW50c0ZpbGluZ0F0UHVibGljUmVnaXN0cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVUb3RhbEFtb3VudE9mRGVsaW5xdWVuY3lSZXBvcnRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZVZvbHVudGFyeUNvbnZleWFuY2VBY2NlcHRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZVdoZW5Db250YWluZXJFcXVpcG1lbnRCZWNvbWVzRG9tZXN0aWMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRheWxpZ2h0T3ZlcmRyYWZ0VGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF5c09mT3BlcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWF0aERhdGVBbmRPclRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYml0QWR2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWJpdFZhbHVlRGF0ZVJlcXVlc3RlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVidEluY3VycmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWNpc2lvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlY2xhcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWNsYXJhdGlvblByZXNlbnRhdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlY2xhcmF0aW9uUmVmZXJlbmNlUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWR1Y3RpYmxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWVkTm90QXZhaWxhYmxlQXNPZkdpdmVuRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVmZXJyYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlZmVycmVkRGlzdHJpYnV0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWZlcnJlZFBheW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlZmVycmVkUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWZpbml0aW9uT2ZEaXNhYmlsaXR5RHVyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGF5ZWRCaWxsaW5nTm90RGVsYXllZFBheW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGV0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyTm90QmVmb3JlQW5kTm90QWZ0ZXJEYXRlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlBcHBvaW50bWVudERhdGVBbmRUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeURhdGVUaW1lMVN0U2NoZWR1bGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5RGF0ZVRpbWVBY3R1YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5RGF0ZVRpbWVDdXJyZW50U2NoZWR1bGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5RGF0ZVRpbWVEZWZlcnJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlEYXRlVGltZUVhcmxpZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeURhdGVUaW1lRXhwZWN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5RGF0ZVRpbWVGaXJzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlEYXRlVGltZUxhc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5RGF0ZVRpbWVMYXRlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5RGF0ZVRpbWVQcm9taXNlZEZvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlEYXRlVGltZVByb21pc2VkRm9yQWZ0ZXJBbmRJbmNsdWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5RGF0ZVRpbWVQcm9taXNlZEZvclByaW9yVG9BbmRJbmNsdWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5RGF0ZVRpbWVSZXF1ZXN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5RGF0ZVRpbWVTY2hlZHVsZWRGb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5RW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeU9yZGVySXNzdWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeVJhdGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlSZXF1ZXN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5U3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5VGlja2V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZW5pYWxFZmZlY3RpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbmlhbFJlc2Npc3Npb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydG1lbnRBZG1pc3Npb25EYXRlQW5kT3JUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50RGlzY2hhcmdlRGF0ZUFuZE9yVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudE9mTGFib3JXYWdlRGV0ZXJtaW5hdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydHVyZURhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnR1cmVEYXRlVGltZUVhcmxpZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnR1cmVEYXRlVGltZUZyb21MYXN0UG9ydE9mQ2FsbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0dXJlRGF0ZVRpbWVTY2hlZHVsZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydHVyZURhdGVUaW1lVWx0aW1hdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydHVyZUZyb21TcGVjaWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBvc2l0RGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc3BhdGNoRGF0ZUFuZE9yVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzcGF0Y2hOb3RlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGV0cmltZW50YWxJbmZvcm1hdGlvblJlY2VpcHREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXJlY3RJbnRlcmNoYW5nZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2FiaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2FiaWxpdHlXYWl0UGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNidXJzZW1lbnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNjaGFyZ2VEYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY2hhcmdlQW5kTG9hZGluZ0NvbXBsZXRlZERhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNjaGFyZ2UtUGxhbm5lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY292ZXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY3JlcGFuY3lEYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzZW1iYXJrYXRpb25EYXRlQW5kVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzbWlzc2FsRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzcG9zYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3Bvc2l0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXN0cmlidXRvckVmZmVjdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpYnV0b3JUZXJtaW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGl2aWRlbmRBcHBsaWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGFyeUNyZWRpdEFtZW5kbWVudERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50YXJ5Q3JlZGl0RXhwaXJ5RGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50YXJ5Q3JlZGl0SXNzdWVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGFyeUNyZWRpdFByZXNlbnRhdGlvblBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudER1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRNZXNzYWdlRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50UmVjZWl2ZWREYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRSZXF1ZXN0ZWREYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9Ob3REZWxpdmVyQWZ0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvTm90RGVsaXZlckJlZm9yZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9Ob3RTaGlwQmVmb3JlRXhDb3VudHJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb05vdFNoaXBCZWZvcmVFeEZhY3RvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyYWZ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcmF3aW5nUmV2aXNpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcm9wQWN0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJvcHBlZFRvTGVzc1RoYW5IYWxmVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVlRGF0ZUxhc3RDb21wbGV0ZUluc3RhbGxtZW50UGFpZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVlRGF0ZU9mRmlyc3RQYXltZW50VG9QcmluY2lwYWxBbmRJbnRlcmVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVlVG9DdXN0b21lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVwbGljYXRlQmlsbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVhcmxpZXN0RmlsaW5nUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFYXJsaWVzdFNhbGVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFYXJseUZpbmlzaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWFybHlTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWFybHlXaXRoZHJhd2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFYXJuaW5nc0VmZmVjdGl2ZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVkdWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWR1Y2F0aW9uQmVnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVkdWNhdGlvbkVuZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVkdWNhdGlvblN0YXJ0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWZmZWN0aXZlRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVmZmVjdGl2ZURhdGVPZkNoYW5nZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWxlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVsaWdpYmlsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGlnaWJpbGl0eUJlZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGlnaWJpbGl0eUVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1iYXJrYXRpb25EYXRlQW5kVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWRJblRoaXNQb3NpdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWRJblRoaXNQcm9mZXNzaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llZUVmZmVjdGl2ZURhdGVPZkNvdmVyYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llZUxhaWRPZmYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVlVGVtcG9yYXJ5TGFpZE9mZlBlcmlvZFN0YXJ0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWVUZW1wb3JhcnlMYWlkT2ZmUGVyaW9kRW5kRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWVXYWdlc0NlYXNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZXJLbm93bGVkZ2VPZlRoZUluanVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZXJSZXBvcnRlZEluanVyeVRvQ2xhaW1BZG1pbmlzdHJhdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3ltZW50UG9zaXRpb25TdGFydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveW1lbnRFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveW1lbnRPckhpcmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveW1lbnRQb3NpdGlvblN0YXJ0RGF0ZUVzdGltYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95bWVudFByb2Zlc3Npb25TdGFydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZERhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmRBdmFpbGFiaWxpdHlEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmREYXRlT2ZTdXBwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmREYXRlU2NoZWR1bGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmRpbmdMYXlEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmRPZkdyYWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmRPZkxhc3RGaXNjYWxZZWFyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmRvcnNlZENlcnRpZmljYXRlSXNzdWVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmRvcnNlbWVudERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZ2luZWVyaW5nQ2hhbmdlTGV2ZWxEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmdpbmVlcmluZ0RhdGFMaXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbnJvbGxtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbnJvbGxtZW50U2lnbmF0dXJlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW50cnlEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbnRyeURhdGVFc3RpbWF0ZWRDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVpcG1lbnRDb2xsZWN0aW9uT3JQaWNrVXBEYXRlVGltZUFjdHVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50Q29sbGVjdGlvbk9yUGlja1VwRGF0ZVRpbWVFYXJsaWVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50Q29sbGVjdGlvbk9yUGlja1VwRGF0ZVRpbWVQbGFubmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVpcG1lbnRMb2dFbnRyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50UG9zaXRpb25pbmdEYXRlVGltZUFjdHVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50UG9zaXRpb25pbmdEYXRlVGltZUVzdGltYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50UG9zaXRpb25pbmdEYXRlVGltZVJlcXVlc3RlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50UG9zaXRpb25pbmdEYXRlVGltZVVsdGltYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVpcG1lbnRQcmVUcmlwRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50UmVjb25kaXRpb25pbmdEYXRlVGltZUFjdHVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50UmVwYWlyUmVhZHlEYXRlVGltZVVsdGltYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVpcG1lbnRSZXR1cm5QZXJpb2RFeHBlY3RlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50U3RvY2tDaGVja0RhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc2NhbGF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXNjYWxhdGlvblN0YXJ0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXN0YWJsaXNoZWREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZUNvbW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXN0aW1hdGVkQWNjZXB0YW5jZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFycml2YWxEYXRlVGltZUVzdGltYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGxldGlvbkRhdGVPclRpbWVFc3RpbWF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZENvbXBsZXRpb24tRmlyc3RQcmlvck1vbnRoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZWRDb21wbGV0aW9uLVNlY29uZFByaW9yTW9udGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZENvbXBsZXRpb24tVGhpcmRQcmlvck1vbnRoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zdHJ1Y3Rpb25EYXRlRXN0aW1hdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZCaXJ0aEVzdGltYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlEYXRlVGltZUVzdGltYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0dXJlRGF0ZVRpbWVFc3RpbWF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZEVzY3Jvd0Nsb3NpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZEltbWlncmF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXN0aW1hdGVkUG9pbnRPZkFycml2YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZFBvaW50T2ZEaXNjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZFBvcnRPZkVudHJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFydERhdGVFc3RpbWF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZFN0YXJ0LUZpcnN0UHJpb3JNb250aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXN0aW1hdGVkU3RhcnQtU2Vjb25kUHJpb3JNb250aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXN0aW1hdGVkU3RhcnQtVGhpcmRQcmlvck1vbnRoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZVByZXBhcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFdmFsdWF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXZlbnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGFtaW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhlY3V0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhlY3V0aW9uRGF0ZVRpbWVSZXF1ZXN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4aXRQbGFudERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGVjdGVkQ29udGFpbmVySGlyZUZyb21EYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwZWN0ZWRGdW5kaW5nRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwZWN0ZWRQcm9ibGVtUmVzb2x1dGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGVjdGVkUmVwbHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGVjdGVkVmFsdWVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBlZGl0ZWRPbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwaXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwaXJhdGlvbkRhdGVPZkV4dGVuc2lvblRvQXNzaWduIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBpcmF0aW9uRGF0ZU9mRXh0ZW5zaW9udG9Gb3JlY2xvc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGlyYXRpb25EYXRlVGltZU9mQ3VzdG9tc0RvY3VtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBpcmF0aW9uRGF0ZVRvU3VibWl0VGl0bGVFdmlkZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwaXJhdGlvbk9mRXh0ZW5zaW9uVG9Db252ZXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGlyYXRpb25PZkV4dGVuc2lvblRvU3VibWl0RmlzY2FsRGF0YSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwaXJhdGlvbk9mRm9yZWNsb3N1cmVUaW1lZnJhbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGlyeURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGlyeURhdGVPZkV4cG9ydExpY2VuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGlyeURhdGVPZkltcG9ydExpY2VuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGxhbnRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwb3J0YXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBvcnRhdGlvbkRhdGVGb3JUZXh0aWxlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwb3N1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cG9zdXJlU291cmNlUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHRlbmRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXh0cmFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFjc2ltaWxlRHVlQnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhaWxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFpbHVyZU1vZGVFZmZlY3RpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlYXNpYmlsaXR5U2lnbk9mZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbEhpZ2h3YXlBZG1pbmlzdHJhdGlvbkZod2FJbnNwZWN0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVlQ2FwaXRhbGl6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpZWxkRmFpbHVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmllbGRUZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaWxlR2VuZXJhdGlvbkRhdGVBbmRPclRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbGluZ1BlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYWxJc3N1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYWxSZWNvbmNpbGlhdGlvblZhbHVlRXN0aW1hdGVBc09mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbFNjaGVkdWxlZFBheW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFuY2lhbENvdmVyYWdlUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbmNpYWxJbmZvcm1hdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFuY2lhbEluZm9ybWF0aW9uU3VibWlzc2lvbkRhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5pc2hEYXRlT3JUaW1lTWFuZGF0b3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5pc2hEYXRlT3JUaW1lRWFybGllc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmlzaERhdGVPclRpbWVMYXRlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpcnN0Q29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlyc3REYXRlT2ZPcmRlcmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlyc3RJbnRlcmVzdEJlYXJpbmdEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdEludGVyZXN0UGF5bWVudER1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlyc3RJbnZvbHZlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlyc3RJc3N1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlyc3RNYXJrZXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlyc3RQYXltZW50Q2hhbmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdFBheW1lbnREdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpcnN0UHJvZHVjZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpcnN0UHVibGlzaGVkRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlyc3RSYXRlQWRqdXN0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlyc3RTYWxlRGF0ZUFuZE9yVGltZUFuZE9yUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdFN1Ym1pc3Npb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpcnN0VmlzaXRvckNvbnN1bHRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlzY2FsQW5uaXZlcnNhcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZsYXRFeHRyYUVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxhdEV4dHJhUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JlY2FzdFBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWNhc3RQZXJpb2RFbmREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JlY2FzdFBlcmlvZFN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JtYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWlnaHRCaWxsRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyb21EYXRlT2ZBd2FyZFRvQ29tcGxldGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJvbURhdGVPZkF3YXJkVG9EZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJvbURhdGVPZkF3YXJkVG9FYXJsaWVzdERlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcm9tRGF0ZU9mQXdhcmRUb0xhdGVzdERlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcm9tRGF0ZU9mTm90aWNlVG9Qcm9jZWVkVG9Db21tZW5jZW1lbnRPZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJvbURhdGVPZk5vdGljZVRvUHJvY2VlZFRvQ29tcGxldGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJvbURhdGVPZk9yZGVyUmVjZWlwdFRvRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyb21EYXRlT2ZPcmRlclJlY2VpcHRUb1NhbXBsZVJlYWR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcm9tRGF0ZU9mT3JkZXJSZWNlaXB0VG9TaGlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJvbURhdGVPZlJlY2VpcHRPZkl0ZW1Ub0FwcHJvdmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcm9tRGF0ZU9mUmVjZWlwdE9mVG9vbGluZ0FpZHNUb1NhbXBsZVJlYWR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcm9tRGF0ZU9mU2FtcGxlQXBwcm92YWxUb0ZpcnN0UHJvZHVjdFNoaXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcm9tRGF0ZU9mVG9vbGluZ0F1dGhvcml6YXRpb25Ub1NhbXBsZVJlYWR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcm9tTGFzdEJvb2tlZE9yZGVyVG9EZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnVtaWdhdGlvbkRhdGVBbmRPclRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1bmN0aW9uYWxUZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdW5kc0FwcHJvcHJpYXRpb24tRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdW5kc0FwcHJvcHJpYXRpb24tU3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1dHVyZVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FsbG9uc1Blck1pbnV0ZVRlc3RQZXJmb3JtZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdvb2RzQ29sbGVjdGlvbk9yUGlja1VwRGF0ZVRpbWVQbGFubmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb29kc1Bvc2l0aW9uaW5nRGF0ZVRpbWVFeHBlY3RlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZHNQb3NpdGlvbmluZ0RhdGVUaW1lUGxhbm5lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZHNSZWNlaXB0RGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdyYWR1YXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcm91cENvbnRyYWN0RWZmZWN0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcm91cENvbnRyYWN0RXhwaXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3VhcmFudGVlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3VhcmFudGVlUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHdWFyYW50b3JSZWNlaXZlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGFuZE92ZXJEYXRlVGltZUFjdHVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGFuZE92ZXJEYXRlVGltZVBsYW5uZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhpZ2hDYXBpdGFsWWVhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGlnaEZhYnJpY2F0aW9uUmVsZWFzZUF1dGhvcml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhpZ2hSYXdNYXRlcmlhbEF1dGhvcml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhpcmVkRnJvbURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhpcmVkVW50aWxEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb2xkQXNPZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9sZEFzU3RvY2tBc09mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb2xpZGF5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb2xpZGF5RmluaXNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb2xpZGF5U3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvbWVzdGVhZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9yaXpvbkVuZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikhvcml6b25QZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikhvcml6b25TdGFydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikhvc2VzQ29ubmVjdGVkRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikhvc2VzRGlzY29ubmVjdGVkRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikhvc3BpdGFsQWRtaXNzaW9uRGF0ZUFuZE9yVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9zcGl0YWxEaXNjaGFyZ2VEYXRlQW5kT3JUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIeWRyb3Rlc3REYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbGxuZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbGxuZXNzQmVnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklsbG5lc3NSZWNvdmVyeURhdGVFeHBlY3RlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW1taWdyYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXBsYW50YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkltcGxlbWVudGF0aW9uRGF0ZVRpbWVQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkltcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW1wb3J0YXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXBvcnRMaWNlbmNlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5hY3Rpdml0eUVuZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluYWN0aXZpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluYm91bmRNb3ZlbWVudEF1dGhvcml6YXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmNpZGVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5jb21lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmNvbWVEb2N1bWVudGF0aW9uRXhwaXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5jb21lSW5jcmVhc2VQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluY29tZVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5jb3Jwb3JhdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluY29ycG9yYXRpb25EaXNzb2x1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5jdW1iZW5jeVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5kaXZpZHVhbEVkdWNhdGlvblBsYW5JRVAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluLWZvcmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmZvcm1hdGlvblJlbGVhc2VBdXRob3JpemF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5pdGlhbENsYWltIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbml0aWFsQ29tcGxldGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5pdGlhbENvbnRhY3REYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbml0aWFsRGlzYWJpbGl0eVBlcmlvZEVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5pdGlhbERpc2FiaWxpdHlQZXJpb2RMYXN0RGF5V29ya2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbml0aWFsRGlzYWJpbGl0eVBlcmlvZFJldHVyblRvV29yayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5pdGlhbERpc2FiaWxpdHlQZXJpb2RTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5pdGlhbEZlZUR1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5pdGlhbEZpbmFuY2lhbEFjY291bnRzRmlsZWREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFjZW1lbnREYXRlSW5pdGlhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5pdGlhbFByZW1pdW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluaXRpYWxQcmVtaXVtRWZmZWN0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbml0aWFsUmVxdWVzdERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluaXRpYWxUcmVhdG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluanVyeUJlZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmp1cnlFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluanVyeU9ySWxsbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5sYW5kU2hpcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5xdWlyeURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluU2VydmljZVN1cnZleURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc29sdmVuY3lEaXNjaGFyZ2VHcmFudGVkRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zcGVjdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3RhbGxhdGlvbkRhdGVUaW1lUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN0YWxsbWVudERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3RhbG1lbnRQYXltZW50RHVlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdHJ1Y3Rpb25zT3JpZ2luYWxFeGVjdXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1ZmZpY2llbnRBc3NldHNKdWRnZW1lbnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmFuY2VDYXJkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcmVzdENhcGl0YWxpemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcmVzdFBhaWRUaHJvdWdoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcmVzdFBhaWRUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJlc3RQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVyZXN0UmF0ZVZhbGlkaXR5UGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm5hdGlvbmFsQXNzZXNzbWVudEFwcHJvdmFsRm9yUHVibGljYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm5hdGlvbmFsUmV2aWV3Q3ljbGVTdGFydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVycnVwdGlvbkVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJydXB0aW9uU3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVydmlld2VkRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJ2aWV3ZXJTaWduZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVudG9yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52ZW50b3J5UmVwb3J0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52ZXN0aWdhdGlvbkVuZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVzdGlnYXRpb25TdGFydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVzdG1lbnROdW1iZXJBbGxvY2F0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52aXRhdGlvblRvVGVuZGVyRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikludm9pY2VEYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52b2ljZURhdGVSZXF1aXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52b2ljZVBlcmlvZEVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52b2ljZVBlcmlvZFN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZvaWNpbmdQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklycmVndWxhckludGVyZXN0UGF5bWVudER1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXNzdWVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJdGVtQ29udHJhY3RFZmZlY3RpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikl0ZW1Db250cmFjdEV4cGlyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkpvaW5lZEVtcGxveWVyRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSm9pbmVkRnVuZERhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKdWRnZW1lbnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKdWRnbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS2V5RXZlbnRDYWxlbmRhclllYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktleUV2ZW50RmlzY2FsWWVhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFib3VyV2FnZURldGVybWluYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0QWN0aXZpdHlEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0QW5udWFsUmVwb3J0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdENhcGl0YWxDaGFuZ2VEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0Q2VydGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdENoYW5nZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdENoZWNrRm9yQmFsYW5jZVNoZWV0VXBkYXRlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdENpdmlsaWFuRmxpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0RGF0ZUZvckFHb3Zlcm5tZW50QWdlbmN5VG9GaWxlQUNsYWltIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0RGF0ZU9mQWNjb3VudHNGaWxlZEF0UHVibGljUmVnaXN0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3REYXRlT2ZPcmRlcmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdERhdGVUb0ZpbGVBQ2xhaW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3REYXRlVG9PYmplY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RFcGlzb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0RmxpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0Rm9sbG93LXVwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0SW5zdXJhbmNlTWVkaWNhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdEludGVyZXN0QmVhcmluZ0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RJdGVtRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RMb2dnZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RNYXJrZXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdE1lYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RNZW5zdHJ1YWxDeWNsZVN0YXJ0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdE1lbnN0cnVhbFBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdE1pbGl0YXJ5RmxpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0Tm90aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0T2ZmSGlyZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RPbkhpcmVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0UGFpZEluc3RhbGxtZW50RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdFBheW1lbnRNYWRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0UGh5c2ljYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RQcmVtaXVtRWZmZWN0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0UHJlbWl1bVBhaWREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0UHJvZHVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdFB1YmxpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0UHVibGlzaGVkRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdFNhbGFyeUluY3JlYXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0U2FsZURhdGVBbmRPclRpbWVBbmRPclBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdFNjcmVlbmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdFNlZW5EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0VmlzaXREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0WFJheURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhdGVGaW5pc2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhdGVzdEFic2VuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhdGVTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGF0ZXN0QmFsYW5jZVNoZWV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXRlc3RDaGVja0luVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGF0ZXN0RGVsaXZlcnlEYXRlYXRQaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXRlc3REZWxpdmVyeURhdGVBdFJhaWxSYW1wIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXRlc3RGaWxpbmdQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhdGVzdE1hdGVyaWFsU2FmZXR5RGF0YVNoZWV0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGF0ZXN0TWV0ZXJSZWFkaW5nRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGF0ZXN0T25Cb2FyZENhcnJpZXJEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXRlc3RQcmljZUFkanVzdG1lbnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXRlc3RSZWNlaXZpbmdEYXRlQ3V0b2ZmRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGF0ZXN0VmlzaXRvckNvbnN1bHRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGF5VGltZUZpcnN0RGF5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXlUaW1lTGFzdERheSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhZFRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlYXNlQ29tbWVuY2VtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWFzZVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhc2VUZXJtRW5kRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhc2VUZXJtU3RhcnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWZ0RW1wbG95ZXJEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWdhbEFjdGlvbkNsb3NlZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlZ2FsQWN0aW9uU3RhcnRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVnYWxTZXR0bGVtZW50VGVybXNNZXREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWdhbFN0cnVjdHVyZUNoYW5nZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlbmRlckNyZWRpdENoZWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZXR0ZXJPZkFncmVlbWVudERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxldHRlck9mTGlhYmlsaXR5RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGljZW5zZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGljZW5zZUVmZmVjdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGljZW5zZUV4cGlyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpY2Vuc2VSZW5ld2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWNlbnNlUmVxdWVzdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWVuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaXF1aWRhdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxpc3RpbmdSZWNlaXZlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlzdFByaWNlQ2hhbmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2FkZWRvblZlc3NlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hZGluZ0RhdGVUaW1lQWN0dWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2FuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2FuUHVyY2hhc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYW5TZXJ2aWNpbmdUcmFuc2ZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYXRpb25FeGNlcHRpb25PcmRlck51bWJlckFzc2lnbmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3NzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3ROdW1iZXJFeHBpcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3dlc3RBY3Rpdml0eVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG93UGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWlsQnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haWxpbmdEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWlsUmVjZWlwdERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haW50ZW5hbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWludGVuYW5jZUNvbW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haW50ZW5hbmNlRWZmZWN0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWtlZ29vZENvbW1lcmNpYWxEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW5hZ2VtZW50QXZhaWxhYmxlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFuYWdlck5vdFJlZ2lzdGVyZWRBc09mR2l2ZW5EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW5kYXRvcnlPclRhcmdldEZpbmlzaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFuZGF0b3J5T3JUYXJnZXRTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFuaWZlc3RTaGlwTm90aWNlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFudWZhY3R1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mTWFycmlhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hc3RlckxlYXNlQWdyZWVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXRlcmlhbENoYW5nZU5vdGljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0ZXJpYWxDbGFzc2lmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0ZXJpYWxTcGVjaWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXR1cml0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0dXJpdHlEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXhpbXVtQ3JlZGl0R3JhbnRlZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lYXRBZ2VpbmdQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYWlkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FpZEJlZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FpZEVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaWNhbENlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FsSW5mb3JtYXRpb25TaWduYXR1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYWxJbmZvcm1hdGlvblN5c3RlbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaWNhcmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYXJlQmVnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYXJlRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FyZVBhcnRBQ292ZXJhZ2VFZmZlY3RpdmVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FyZVBhcnRBRWxpZ2liaWxpdHlCZWdpbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYXJlUGFydEFFbGlnaWJpbGl0eUVuZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYXJlUGFydEFUZXJtaW5hdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYXJlUGFydEJDb3ZlcmFnZUVmZmVjdGl2ZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYXJlUGFydEJFbGlnaWJpbGl0eUJlZ2luRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaWNhcmVQYXJ0QkVsaWdpYmlsaXR5RW5kRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaWNhcmVQYXJ0QlRlcm1pbmF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVldGluZ0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lcmdlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVzc2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWV0ZXJSZWFkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaWRwb2ludE9mUGVyZm9ybWFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1SZXF1aXJlZERpc3RyaWJ1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaW11bVNoZWxmTGlmZVJlbWFpbmluZ0F0VGltZU9mRGVzcGF0Y2hQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1TaGVsZkxpZmVSZW1haW5pbmdBdFRpbWVPZlJlY2VpcHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vbnRoRW5kaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb250aFRvRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9vcmluZ0RhdGVBbmRUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3J0Z2FnZWVPZmZpY2lhbFNpZ25hdHVyZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vcnRnYWdlZVJlcG9ydGVkQ3VydGFpbG1lbnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3J0Z2FnZU5vdGVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3N0TGlrZWx5RWFybHlGaW5pc2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vc3RMaWtlbHlFYXJseVN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3N0TGlrZWx5TGF0ZUZpbmlzaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9zdExpa2VseUxhdGVTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9zdFJlY2VudEhlbW9nbG9iaW5PckhlbWF0b2NyaXRPckJvdGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vc3RSZWNlbnRSZW5ld2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3N0UmVjZW50UmV2aXNpb25vckluaXRpYWxWZXJzaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3N0UmVjZW50U2VydW1DcmVhdGluZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW92ZWRGcm9tTG9jYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZWdvdGlhdGVkRXh0ZW5zaW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmVnb3RpYXRlZEZpbmlzaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmVnb3RpYXRlZFN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZWdvdGlhdGlvbnNTdGFydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ldENyZWRpdFNlcnZpY2VEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXRXb3J0aERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5leHRBY3Rpdml0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV4dEFubml2ZXJzYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXh0QW5udWFsTWVldGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV4dEluc3RhbGxtZW50RHVlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV4dEludGVyZXN0Q2hhbmdlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV4dFBheUluY3JlYXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXh0UGF5bWVudER1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV4dFJldmlld0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbldvcmtpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vUHJvZHVjdGlvblNjaGVkdWxlRXN0YWJsaXNoZWRBc09mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb1Byb21pc2VBc09mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb1NoaXBwaW5nU2NoZWR1bGVFc3RhYmxpc2hlZEFzT2YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdEFmdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RCZWZvcmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdGljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90aWZpY2F0aW9uRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdGlmaWNhdGlvbk9mRGVhdGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdGlmaWNhdGlvblRpbWVMaW1pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90aWZpZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdFJlZ2lzdGVyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdFJlZ2lzdGVyZWRBc09mR2l2ZW5EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdXJzaW5nSG9tZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVyc2luZ0hvbWVGcm9tIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdXJzaW5nSG9tZVRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPY2N1cGFuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9jY3VycmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9jY3VycmVuY2VTcGFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPY2N1cnJlbmNlU3BhbkZyb20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9jY3VycmVuY2VTcGFuVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZmVyRXhwaXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2ZmSGlyZVN1cnZleURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZkhvbGQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZmljaWFsUmFpbENhckludGVyY2hhbmdlRWl0aGVyQWN0dWFsb3JBZ3JlZWRVcG9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmYtTWFya2V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZzZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZnNldEJlZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZzZXRFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZnNldEZyb21Db29yZGluYXRlZFVuaXZlcnNhbFRpbWVVdGMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9sZGVzdFVucGFpZEluc3RhbGxtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25Cb2FyZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9uSGlyZVN1cnZleURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9uSG9sZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25zZXRPZkN1cnJlbnRTeW1wdG9tc09ySWxsbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25zZXRPZlNpbWlsYXJTeW1wdG9tc09ySWxsbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3BlbkhvdXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVuaW5nRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3BlcmF0aW9uc0NlYXNlZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9waW5pb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wdGltaXN0aWNFYXJseUZpbmlzaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3B0aW1pc3RpY0Vhcmx5U3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wdGltaXN0aWNMYXRlRmluaXNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcHRpbWlzdGljTGF0ZVN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlckFtZW5kbWVudEJpbmRpbmdEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlckNvbXBsZXRpb25EYXRlVGltZVVsdGltYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlckRhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlckVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JkZXJSZWNlaXZlZERhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlclN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlclRvUHJvY2VlZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbER1ZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsRHVyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsRWFybHlGaW5pc2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsRWFybHlTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luYWxFc3RpbWF0ZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsSXNzdWVBZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luYWxseVNjaGVkdWxlZFNoaXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsTWF0dXJpdHlEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbE5hbWVDaGFuZ2VEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbFBvc3RpbmdEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbFJlY2VpcHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9ydGhvZG9udGljVHJlYXRtZW50UGVyaW9kUmVtYWluaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcnRob2RvbnRpY1RyZWF0bWVudFBlcmlvZFRvdGFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdXQtT2YtUG9ja2V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdXRzaWRlQXVkaXRvcnNSZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXJoYXVsZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXJyaWRlRGF0ZUZvclNldHRsZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXJUYXJnZXRCYXNlbGluZU1vbnRoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdmVydGltZUVuZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXJ0aW1lU3RhcnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lcnNoaXBDaGFuZ2VEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lcnNoaXBQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik94eWdlblNhdHVyYXRpb25UZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPeHlnZW5UaGVyYXB5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPeHlnZW5UaGVyYXB5RXZhbHVhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3h5Z2VuVGhlcmFweUZyb20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik94eWdlblRoZXJhcHlUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFja2luZ0VuZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhY2tpbmdTdGFydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhaWRJbkZ1bGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhaWRUaHJvdWdoRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFpZC1UaHJvdWdoRGF0ZUZvckFjY3J1ZWRTaWNrUGF5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWlkVGhyb3VnaERhdGVGb3JNaW5pbXVtUGF5bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFpZC1UaHJvdWdoRGF0ZUZvclNhbGFyeUNvbnRpbnVhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFpZFRocm91Z2hEYXRlRm9yVG90YWxQYXltZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWlkLVRocm91Z2hEYXRlRm9yVmFjYXRpb25QYXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhaWRUb0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhaWQtdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcGVyd29ya01haWxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydGlhbEFubnVpdGl6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnRpY2lwYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0VGltZVdvcmtpbmdDaGFuZ2VEYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFzdER1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF0aWVudEZpcnN0VmlzaXRGb3JDb25kaXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRDb21tZW5jZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50RGF0ZVRpbWVEZWZlcnJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudER1ZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRFZmZlY3RpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRJbml0aWF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRJbnN0cnVjdGlvbkRhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50SXNzdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRQZXJpb2RFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRQZXJpb2RTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudFZhbHVhdGlvblByZXNlbnRhdGlvbkRhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXlyb2xsRGVkdWN0aW9uRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheXJvbGxQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheXJvbGxQZXJpb2RCZWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5cm9sbFBlcmlvZEVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVha0FjdGl2aXR5UGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZWVyUmV2aWV3T3JnYW5pemF0aW9uUFJPQXBwcm92ZWRTdGF5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZWVyUmV2aWV3T3JnYW5pemF0aW9uUFJPQXBwcm92ZWRTdGF5RnJvbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVlclJldmlld09yZ2FuaXphdGlvblBST0FwcHJvdmVkU3RheVRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZW5hbHR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZW5hbHR5QmVnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlbmFsdHlFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlbmRpbmdBcmNoaXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJjb2xhdGlvblRlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcmlvZEFuRXZlbnRJc0xhdGVEdWVUb0N1c3RvbWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJpb2RBc3NpZ25lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyaW9kQmV0d2VlbkNoYW5nZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcmlvZENvdmVyZWRCeVNvdXJjZURvY3VtZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyaW9kRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJpb2RFeHRlbmRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyaW9kaWNJbnNwZWN0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyaW9kT2ZDYXJlRW5kRGF0ZUFuZE9yVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyaW9kT2ZDYXJlU3RhcnREYXRlQW5kT3JUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJpb2RPZklsbG5lc3NFbmREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJpb2RPZklsbG5lc3NTdGFydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcmlvZE92ZXJkdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcmlvZFN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJpb2RXb3JrZWRGb3JUaGVDb21wYW55Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJtaXRUb0FkbWl0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVybWl0WWVhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVzc2ltaXN0aWNFYXJseUZpbmlzaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVzc2ltaXN0aWNFYXJseVN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXNzaW1pc3RpY0xhdGVGaW5pc2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlc3NpbWlzdGljTGF0ZVN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWNrVXBDb2xsZWN0aW9uRGF0ZVRpbWVPZkNhcmdvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWNrVXBEYXRlVGltZU9mRXF1aXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFjZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYWNlbWVudERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYWNlbWVudERhdGVQcmV2aW91cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhY2VtZW50UGVyaW9kRXhwaXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhbkFubml2ZXJzYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFuQmVnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW5FbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW5FbnRyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhbm5lZER1cmF0aW9uT2ZXb3JrcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhbm5lZFJlbGVhc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW5PZlRyZWF0bWVudFBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhblBhcnRpY2lwYXRpb25TdXNwZW5zaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFuUGVyaW9kRWxlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW5QZXJpb2RFbGVjdGlvbkJlZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFuUGVyaW9kRWxlY3Rpb25FbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW5UZXJtaW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGx1Z2dlZEFuZEFiYW5kb25lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9saWN5RWZmZWN0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb2xpY3lFZmZlY3RpdmVPbk9yQWZ0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvbGljeUVmZmVjdGl2ZU9uT3JCZWZvcmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvbGljeUV4cGlyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvbGljeVN1cnJlbmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9vbFNldHRsZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvc2l0aW9uaW5nRGF0ZVRpbWVPZkVxdWlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9zaXRpb25pbmdEYXRlVGltZU9mR29vZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvc3RpbmdEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3N0bWFya0RhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3N0LVJlY2xhc3NpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvc3QtUmVjbGFzc2lmaWNhdGlvbkVuZE9mU2Vjb25kWWVhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9zdC1SZWNsYXNzaWZpY2F0aW9uRmlyc3RSZXBvcnRDYXJkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3N0LVJlY2xhc3NpZmljYXRpb25GaXJzdFNlbWktYW5udWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3N0LVJlY2xhc3NpZmljYXRpb25TZWNvbmRTZW1pLWFubnVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlYXJyYW5nZWREZWFsTWF0Y2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZS1Bd2FyZFN1cnZleSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlY2VkaW5nUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmUtY2VydGlmaWNhdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWZvcmVjbG9zdXJlQWNjZXB0YW5jZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWZvcmVjbG9zdXJlU2FsZUNsb3NpbmdEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVnbmFuY3lCZWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlZ25hbmN5RHVyYXRpb25BY3R1YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWduYW5jeUVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlbWl1bUNoYW5nZVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlbWl1bVBhaWRUb0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZW1pdW1QYWlkVG9EYXRlQmVnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZW1pdW1QYWlkVG9EYXRlRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVwYXJhdGlvbkRhdGVUaW1lT2ZEb2N1bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc2NyaXB0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVzY3JpcHRpb25EaXNwZW5zaW5nRGF0ZUFuZE9yVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc2NyaXB0aW9uRmlsbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc2NyaXB0aW9uRnJvbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc2NyaXB0aW9uSXNzdWVEYXRlQW5kT3JUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVzY3JpcHRpb25UbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc2VudGF0aW9uRGF0ZUxhdGVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc2VudGF0aW9uRGF0ZU9mR29vZHNEZWNsYXJhdGlvbkN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXNlbnRhdGlvblRvQmFua3J1cHRjeVJlY2VpdmVyc0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXNlbnRDb250cm9sIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVzZW50ZWRUb1JlY2VpdmVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc2VudExlZ2FsU3RydWN0dXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVzZW50bHlSZXNpZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc2VudG1lbnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVzZW50TmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc2VudFJlc2lkZW5jZVN0YXJ0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNCb29raW5nRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzQ291cnRFdmVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNDdXJyZW50QWNjb3VudERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzRW1wbG95bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNFbXBsb3ltZW50RW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c0VtcGxveW1lbnRTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNJbnZvaWNlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNseVJlcG9ydGVkRGF0ZU9mQmlydGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzbHlSZXNpZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c01ldGVyUmVhZGluZ0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzTW9udGhFbmRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c1JlcG9ydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzUmVzaWRlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c1Jlc2lkZW5jZUVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNSZXNpZGVuY2VTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNUZXJtaW5hdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaWNlQWRqdXN0bWVudERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaWNlQWRqdXN0bWVudExpbWl0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpY2VBZGp1c3RtZW50U3RhcnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmljZUJhc2VEYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpY2VQcm90ZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltYXJ5Q2FyZVByb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltYXJ5Q2FyZVByb3ZpZGVyQmVnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1hcnlDYXJlUHJvdmlkZXJFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW50ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW9yQ29udHJhY3RBbm5pdmVyc2FyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JDb250cmFjdElzc3VlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvckhvc3BpdGFsaXphdGlvbkRhdGVzUmVsYXRlZFRvQ3VycmVudFNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvckluY29ycmVjdERhdGVPZkJpcnRoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvck5vdGljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JQbGFjZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaXZpbGVnZURldGFpbHNWZXJpZmljYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9jZXNzaW5nRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2Nlc3NpbmdEYXRlUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9jZXNzaW5nRW5kRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2Nlc3NpbmdTdGFydERhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0QXZhaWxhYmlsaXR5RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdEhlbGRVbnRpbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdGlvbkRhdGVOb1NjaGVkdWxlRXN0YWJsaXNoZWRBc09mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0aW9uSW5zcGVjdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3Rpb25NYW51ZmFjdHVyZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3RMaWZlc3BhbkF0VGltZU9mUHJvZHVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZml0UGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9ncmFtbWVkQ2FsZW5kYXJZZWFyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9ncmFtbWVkRmlzY2FsWWVhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZ3Jlc3NQYXltZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0ZWRBY3Rpb25FbmREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0ZWRGb3JlY2xvc3VyZVNhbGVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0T3ZlclRhcmdldEJhc2VsaW5lRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbWlzZWRGb3JEZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbWlzZWRGb3JEZWxpdmVyeUFmdGVyQW5kSW5jbHVkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9taXNlZEZvckRlbGl2ZXJ5UHJpb3JUb0FuZEluY2x1ZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbWlzZWRGb3JEZWxpdmVyeVdlZWtPZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbWlzZWRGb3JTaGlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbWlzZWRGb3JTaGlwbWVudEFmdGVyQW5kSW5jbHVkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9taXNlZEZvclNoaXBtZW50UHJpb3J0b0FuZEluY2x1ZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbWlzZWRGb3JTaGlwbWVudFdlZWtPZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbW90aW9uRGF0ZVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbW90aW9uRW5kRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21vdGlvbkZsb29yU3RvY2tQcm90ZWN0LUVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbW90aW9uRmxvb3JTdG9ja1Byb3RlY3QtU3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21vdGlvbkludm9pY2VQZXJmb3JtYW5jZS1FbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21vdGlvbkludm9pY2VQZXJmb3JtYW5jZS1TdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbW90aW9uT3JkZXItRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9tb3Rpb25PcmRlci1TdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbW90aW9uUGVyZm9ybWFuY2UtRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9tb3Rpb25QZXJmb3JtYW5jZS1TdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbW90aW9uUmVxdWVzdGVkRGVsaXZlcnktRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9tb3Rpb25SZXF1ZXN0ZWREZWxpdmVyeS1TdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbW90aW9uU2hpcC1FbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21vdGlvblNoaXAtU3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21vdGlvblN0YXJ0RGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3BlcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9wZXJ0eUFjcXVpcmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9wZXJ0eUJ1aWx0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm90b3R5cGVUZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm92aWRlclNpZ25hdHVyZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1YmxpY2F0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVyY2hhc2VkRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVyY2hhc2VPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVyY2hhc2VPcmRlckxhdGVzdFBvc3NpYmxlQ2hhbmdlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVyY2hhc2VPcmRlclJlY2VpdmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdXRJbnRvU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGl0eVJhdGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhcnRlckVuZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVvdGFEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdW90ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVvdGVUb0JlUmVjZWl2ZWRCeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmF0ZUFkanVzdG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhdGVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYXRlT2ZFeGNoYW5nZURhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYXRlUHJpY2VEYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhY2hlZFRvdGFsRGVwdGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYWR5Rm9ySW5zcGVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhbEVzdGF0ZVByb3BlcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWFsRXN0YXRlVGF4WWVhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVidWlsdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjYXB0dXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXZhYmxlc0NvbGxlY3Rpb25QZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXZlQXRMb2NrYm94RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2ZWREYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2ZWRJblRoZU1haWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmVyQXBwb2ludGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXZlcnNoaXBQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmVyc2hpcFJlc3VsdERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2xhc3NpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2xhc3NpZmljYXRpb25FeGl0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjb21wbGV0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNvcmRlZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY292ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNvdmVyeUZpbmlzaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjb3ZlcnlTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmUtZW50cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlLWV2YWx1YXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZUV4cG9ydGF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJlbmNlRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVyZW5jZWRJdGVtQ3JlYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZlcnJhbERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVycmVkRnJvbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJyZWRUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmaW5hbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZ1c2FsUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RlcmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RlcmVkQ29udHJhY3Rvck51bWJlckFzc2lnbm1lbnREYXRlT3JpZ2luYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2lzdHJhdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2lzdHJhdGlvbkRhdGVPZlByZXZpb3VzQ3VzdG9tc0RlY2xhcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RyYXRpb25PZkJvYXJkT2ZEaXJlY3RvcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlaGlyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVpbWJ1cnNlbWVudENsYWltSXNzdWVEYXRlQW5kT3JUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZUltcG9ydGF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVpbnN0YXRlbWVudERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlaW5zdXJhbmNlQWNjb3VudGluZ1BlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVpbnN1cmFuY2VDb3ZlcmFnZUR1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWluc3VyYW5jZUN1cnJlbnRBY2NvdW50UGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWluc3VyYW5jZUVmZmVjdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVpbnN1cmFuY2VJc3N1ZUFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVpbnN1cmFuY2VQYWlkVXBEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWluc3VyYW5jZVBheW1lbnRGcmVxdWVuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlaXNzdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlamVjdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxlYXNlRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGVhc2VEYXRlQ3VzdG9tcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsZWFzZURhdGVPZkN1c3RvbWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxlYXNlRGF0ZU9mU3VwcGxpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGVhc2VkUmV0dXJuVG9Xb3JrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxlYXNlZFRvVmVzc2VsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxlYXNlRnJlcXVlbmN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxlYXNlT2ZJbmZvcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVtaXR0YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVtb2RlbGluZ0NvbXBsZXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVtb3ZlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVuZXdhbERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbnRhbFBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVudFN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZW50U3VydmV5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBhaXJUdXJuYXJvdW5kVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwYXltZW50QmVnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGF5bWVudFNjaGVkdWxlU2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwbGFjZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGxhY2VtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBsYWNlbWVudEVmZmVjdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwbHlEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcG9ydGVkRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0RW5kRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0aW5nQ3ljbGVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBvcnRQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcG9ydFN0YXJ0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWFsaWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1ZXN0ZWRDb250cmFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWVzdGVkRGVwYXJ0dXJlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWVzdGVkRmluaXNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeURhdGVUaW1lUmVxdWVzdGVkRm9yQWZ0ZXJBbmRJbmNsdWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5RGF0ZVRpbWVSZXF1ZXN0ZWRGb3JQcmlvclRvQW5kSW5jbHVkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1ZXN0ZWRGb3JEZWxpdmVyeVdlZWtPZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcG1lbnREYXRlVGltZVJlcXVlc3RlZEZvckFmdGVyQW5kSW5jbHVkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwbWVudERhdGVUaW1lUmVxdWVzdGVkRm9yUHJpb3JUb0FuZEluY2x1ZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWVzdGVkRm9yU2hpcG1lbnRXZWVrT2YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVlc3RlZE9mZmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1ZXN0ZWRQaWNrLXVwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1ZXN0ZWRTZXR0bGVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1ZXN0ZWRTaGlwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1ZXN0ZWRTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWVzdEZvclF1b3RhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWlyZWRCeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWlyZWREZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzZXJ2YXRpb25PZkZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNpZGVudExpY2Vuc2VFZmZlY3RpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2lkZW50TGljZW5zZUV4cGlyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2lnbmF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzaWduZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc29sdmVkRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzdERheSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzdEZpbmlzaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzdFN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXN1Ym1pc3Npb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldGVudGlvblJlbGVhc2VEYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0ZW50aW9uUmVsZWFzZURhdGVUaW1lUGFydGlhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0ZXJtaW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0aXJlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0cmFuc21pc3Npb25UaW1lU3RhbXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldHVybmVkRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0dXJuZWRUb0N1c3RvbWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXR1cm5Ub1dvcmtEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXR1cm5Ub1dvcmtQYXJ0VGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV2aWV3RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV2aWV3UGVyaW9kRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXZpc2VkQWRqdXN0ZWRFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldmlzZWRBZGp1c3RlZFN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXZpc2VkRXN0aW1hdGVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXZpc2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV2b2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV2b2tlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmlnQXJyaXZhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm9hZEZ1bmRUYXhFeHBpcnlEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWlsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWxhcnlDaGFuZ2VFZmZlY3RpdmVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWxhcnlEZWZlcnJhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FsZWFibGVTdG9ja0RlbWFuZENvdmVyUGVyaW9kRXhwZWN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbGVzRGF0ZUFuZE9yVGltZUFuZE9yUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWxlc1BlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FtcGxlQXZhaWxhYmxlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FtcGxlQ29sbGVjdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYW1wbGVSZXF1aXJlZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbXBsZXNUb0JlUmV0dXJuZWRCeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FuY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhdGlzZmFjdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhdGlzZmllZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2NoZWR1bGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjaGVkdWxlZEZpbmlzaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2NoZWR1bGVkRm9yRGVsaXZlcnlPbk9yQWZ0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjaGVkdWxlZEZvckRlbGl2ZXJ5T25PckJlZm9yZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2NoZWR1bGVkRm9yRGVsaXZlcnlXZWVrT2YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjaGVkdWxlZEZvclNoaXBtZW50QWZ0ZXJBbmRJbmNsdWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjaGVkdWxlZEZvclNoaXBtZW50UHJpb3JUb0FuZEluY2x1ZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2NoZWR1bGVkRm9yU2hpcG1lbnRXZWVrT2YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjaGVkdWxlZEludGVyY2hhbmdlRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjaGVkdWxlZFN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTY2hlZHVsZVJlbGVhc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjaG9vbFJlZnVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kQWRtaXNzaW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kRGlzY2hhcmdlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VjdXJpdHlSYXRlQWRqdXN0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VjdXJpdHlTaGFyZVByaWNlQXNPZkdpdmVuRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VsZWN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGVjdGlvblBlcmlvZEVuZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGVjdGlvblBlcmlvZFN0YXJ0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VsbEJ5RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VsbGVyc0xvY2FsVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VtaWFubnVhbEVuZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VuZGluZ1JvYWRUaW1lU3RhbXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcHRpY0FwcHJvdmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlQ29tcGxldGlvbkRhdGVUaW1lQWN0dWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlSW50ZXJydXB0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlUGVyaW9kRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlUGVyaW9kU3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VSZXF1ZXN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VyU2lnbmF0dXJlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2V0b2ZmIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXR0bGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXR0bGVtZW50RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2V0dGxlbWVudERhdGVBc1NwZWNpZmllZEJ5VGhlT3JpZ2luYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2V0dGxlbWVudERhdGVGcm9tSW50ZXJsaW5lU2V0dGxlbWVudFN5c3RlbU9ubHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNldHRsZW1lbnREYXRlUGxhbm5lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2V0dGxlbWVudER1ZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNldHRsZW1lbnRTdGF0dXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoYXJlUHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoZWxmTGlmZUV4cGlyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBEYXRlT3JpZ2luYWxseVNjaGVkdWxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcER1cmluZ0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBtZW50RGF0ZVRpbWVQcm9taXNlZEZvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcG1lbnREYXRlVGltZVByb21pc2VkRm9yUHJpb3JUb0FuZEluY2x1ZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcG1lbnREYXRlVGltZVJlcXVlc3RlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcE5vdExhdGVyVGhhbkRhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwTm90QmVmb3JlRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBOb3RCZWZvcmVBbmROb3RBZnRlckRhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwT25PckFib3V0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBpbmdEYXRlQW5kT3JUaW1lQ3VycmVudFNjaGVkdWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwcGluZ0RhdGVOb1NjaGVkdWxlRXN0YWJsaXNoZWRBc09mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwV2Vla09mRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2h1dEluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaWNrbmVzc0JlbmVmaXRBZ2VMaW1pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2lja25lc3NCZW5lZml0UGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaWNrbmVzc0luc3VyYW5jZUVsaW1pbmF0aW9uUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaWNrbmVzc0xpZmV0aW1lQmVuZWZpdFF1YWxpZmljYXRpb25BZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpZGV0cmFja2VkV2VsbGJvcmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpZ25hdHVyZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpZ25hdHVyZVJlY2VpdmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaW1pbGFySWxsbmVzc09uc2V0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2ltcGxlSW50ZXJlc3REdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNsYXVnaHRlcmluZ0VuZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNsYXVnaHRlcmluZ1N0YXJ0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29jaWFsU2VjdXJpdHlDbGFpbXNWZXJpZmljYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb2xkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb2xkQm9va1B1YmxpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb2xlRGlyZWN0b3JzaGlwUmVnaXN0cmF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29saWNpdGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb3VyY2VEb2N1bWVudENhcHR1cmVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGFjaW5nT3JkZXJVbml0QXNzaWduZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwb25zb3JlZERlcGVuZGVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BvbnNvcmVkRGVwZW5kZW50QmVnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwb25zb3JlZERlcGVuZGVudEVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BvdXNlUmV0aXJlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3B1ZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhcnREYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhcnREYXRlT3JUaW1lQWN0dWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFydERhdGVPclRpbWVFYXJsaWVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhcnREYXRlT3JUaW1lRXN0aW1hdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFydERhdGVPclRpbWVMYXRlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXJ0RGF0ZU9yVGltZU1hbmRhdG9yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhcnREYXRlT3JUaW1lTm90QWZ0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXJ0RGF0ZU9yVGltZU5vdEJlZm9yZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhcnREYXRlT3JUaW1lU2NoZWR1bGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFydERhdGVUaW1lUGxhbm5lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhcnRlZERvaW5nQnVzaW5lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXJ0Tm9FYXJsaWVyVGhhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhcnROb0xhdGVyVGhhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZVJlc2lkZW5jeURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlVGVybWluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRpc3RpY2FsVGltZVNlcmllc0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXR1cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdHVzQWZ0ZXJBbmRJbmNsdWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXR1c0Fzc2lnbm1lbnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0dXNDaGFuZ2VEYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdHVzQ29tbWVyY2lhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdHVzT3V0c2lkZVByb2Nlc3NvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdHVzUHJpb3JBbmRJbmNsdWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b3BEaXN0cmlidXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9wV29ya0FzT2ZHaXZlbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b3JlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3R1ZGVudFNpZ25lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3ViY29udHJhY3RvclBlcmlvZE9mSGlyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VibWlzc2lvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1Ym1pdHRhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3Vic2VxdWVudEludGVyZXN0UGF5bWVudER1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3Vic2VxdWVudFN1Ym1pc3Npb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cGVyc2VkZWREYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxlbWVudGFsSXNzdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBsaWVyc0F2ZXJhZ2VDcmVkaXRQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cmZhY2VDYXNpbmdBdXRob3JpdHlBcHByb3ZhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VyZ2VyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VycmVuZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJ2ZXlZZWFyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXNwZW5kZWREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXNwZW5zaW9uRWZmZWN0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXNwZW5zaW9uUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTd29ybkFuZFN1YnNjcmliZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN5bXB0b21zT25zZXRQYXRpZW50QWxsZWdlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3lzdGVtU3VydmV5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTeXN0ZW1UZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYWJsZVJhdGluZ0VuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFpbENvdmVyYWdlQmVnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhaWxDb3ZlcmFnZUVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFua3NBY2NlcHRlZERhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYW5rc0luc3BlY3RlZERhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheFBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4UGVyaW9kRW5kRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4UGVyaW9kU3RhcnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhQb2ludERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheFllYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlY2huaWNhbFJhdGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVsZXhEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZW1wb3JhcnlQcm9zdGhlc2lzRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVuZGVyU3VibWlzc2lvbkRhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXJtaW5hdGVkRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVybWluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcm1pbmF0aW9uT2ZGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVybXNEaXNjb3VudER1ZURhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXJtc01ldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVybXNOZXREdWVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXN0Q29tcGxldGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlc3RQZXJmb3JtZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlc3RQZXJpb2RFbmRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlc3RTdGFydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRleGFzTGluZVRlcm1pbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaGVyYXB5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW1lRW1wbG95ZWVCZWdhbldvcmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpbWVJblVTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW1lTGltaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpbWVOb3dEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW1lUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaXRsZVRyYW5zZmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb29saW5nUmVxdWlyZWREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbFNoZWxmTGlmZVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG91ciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhZGVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFkZVN0eWxlUmVnaXN0cmF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaW5pbmdCZWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaW5pbmdFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zYWN0aW9uQ3JlYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc2Zlck5vdGVBY2NlcHRhbmNlRGF0ZUFuZFRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zZmVycmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc2hpcG1lbnREYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNpdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNpdFRpbWVMaW1pdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zbWlzc2lvbkRhdGVUaW1lT2ZEb2N1bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNtaXR0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydEVxdWlwbWVudFN0cmlwcGluZ0RhdGVBbmRPclRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydEVxdWlwbWVudFN0dWZmaW5nRGF0ZUFuZE9yVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhdmVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmVhdG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyZWF0bWVudEVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJlYXRtZW50U3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyaWFsQmFsYW5jZVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJpYWxTZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyaWFsU3RhcnREYXRlQWN0dWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmlhbFN0YXJ0RGF0ZVNjaGVkdWxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1c3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuZGVyd3JpdGluZ1llYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVubG9hZGVkRGF0ZUFuZFRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhbGlkYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYWxpZGl0eVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmFsaWRpdHlTdGFydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhbGlkVW50aWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhbHVhdGlvbkRhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYWx1YXRpb25EYXRlQ3VzdG9tcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmFsdWVBZGRlZFRheENsYWltc1ZlcmlmaWNhdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhbHVlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmFsdWVEYXRlT2ZJbmRleCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVyYmFsUmVwb3J0TmVlZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXJpZmljYXRpb25SZWNlaXZlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVyaWZpY2F0aW9uU2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVyaWZpZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlcnNpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlc3NlbFJlZ2lzdHJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXN0aW5nU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVzdGluZ1NlcnZpY2VCZWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVzdGluZ1NlcnZpY2VFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZvbHVudGFyeVRlcm1pbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWb3VjaGVyRGF0ZU9mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYWdlRWZmZWN0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYWdlc0Vhcm5lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FnZVBlcmlvZEVuZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhZ2VQZXJpb2RTdGFydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhaXRpbmdUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJyYW50eUV4cGlyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldheWJpbGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldlZWtFbmRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldlaWdoZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldlbGxMb2dSdW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ildob2xlc2FsZUNvbnRyYWN0RWZmZWN0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaG9sZXNhbGVDb250cmFjdEV4cGlyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldpbGxBZHZpc2VBc09mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaXRoZHJhd25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaXRoaGVsZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldvcmtFZmZlY3RpdmVTdGFydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldvcmtpbmdQZXJpb2RFbmREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JraW5nUGVyaW9kU3RhcnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JrUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3Jrc0NvbXBsZXRpb25EYXRlVGltZUFjdHVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29ya3NDb21wbGV0aW9uRGF0ZVRpbWVQbGFubmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JzdFRpbWVUb0NhbGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlllYXJCZWdpbm5pbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlllYXJEdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlllYXJFbmRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlllYXJPZk9jY3VycmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlllYXJUb0RhdGUiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik9yZGVyUGFydHkiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkJ1eWVyUGFydHkiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJQYXJ0eSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJCdXllclRheEluZm9ybWF0aW9uIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUGFydHlUYXhJbmZvcm1hdGlvbiIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iU2VsbGVyUGFydHkiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJQYXJ0eSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTZWxsZXJUYXhJbmZvcm1hdGlvbiI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlBhcnR5VGF4SW5mb3JtYXRpb24iLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU2hpcFRvUGFydHkiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJQYXJ0eSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJCaWxsVG9QYXJ0eSI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlBhcnR5Ii8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlJlbWl0VG9QYXJ0eSI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlBhcnR5Ii8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlNoaXBGcm9tUGFydHkiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJQYXJ0eSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJXYXJlaG91c2VQYXJ0eSI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlBhcnR5Ii8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlNvbGRUb1BhcnR5Ij4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUGFydHkiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iTWFudWZhY3R1cmluZ1RvUGFydHkiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJQYXJ0eSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJNYXRlcmlhbElzc3VlciI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlBhcnR5Ii8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iTGlzdE9mUGFydHlDb2RlZCIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iT3JkZXJQYXJ0eSIgdHlwZT0iT3JkZXJQYXJ0eSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUGFydHkiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlBhcnR5SUQiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iTGlzdE9mSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iTURGQnVzaW5lc3MiIHR5cGU9InhjYmxCb29sZWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Ik5hbWVBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJPcmRlckNvbnRhY3QiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJDb250YWN0Ii8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlJlY2VpdmluZ0NvbnRhY3QiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJDb250YWN0Ii8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlNoaXBwaW5nQ29udGFjdCI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IkNvbnRhY3QiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iT3RoZXJDb250YWN0cyI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ikxpc3RPZkNvbnRhY3QiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQ29ycmVzcG9uZGVuY2VMYW5ndWFnZSI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ikxhbmd1YWdlIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlBhcnR5IiB0eXBlPSJQYXJ0eSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mSWRlbnRpZmllciI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iSWRlbnRpZmllciIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mSWRlbnRpZmllciIgdHlwZT0iTGlzdE9mSWRlbnRpZmllciIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQ29udGFjdCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJDb250YWN0SUQiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDb250YWN0TmFtZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJDb250YWN0RnVuY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkNvbnRhY3REZXNjcmlwdGlvbiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJMaXN0T2ZDb250YWN0TnVtYmVyIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDb250YWN0IiB0eXBlPSJDb250YWN0Ii8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJDb250YWN0RnVuY3Rpb24iPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkNvbnRhY3RGdW5jdGlvbkNvZGVkIiB0eXBlPSJDb250YWN0RnVuY3Rpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJDb250YWN0RnVuY3Rpb25Db2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDb250YWN0RnVuY3Rpb24iIHR5cGU9IkNvbnRhY3RGdW5jdGlvbiIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJDb250YWN0RnVuY3Rpb25Db2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjZXB0aW5nQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjZXB0aW5nT2ZmaWNpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRpbmdjb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50c1BheWFibGVDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50c1JlY2VpdmFibGVDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRpdGlvbmFsSW5zdXJhbmNlSW5mb3JtYXRpb25Db250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZG1pbmlzdHJhdGl2ZUNvbnRyYWN0aW5nT2ZmaWNlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRtaW5pc3RyYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWR2aXNvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWZ0ZXItSG91cnNDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWx0ZXJuYXRlQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBvaW50bWVudFNjaGVkdWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwcmFpc2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdHRlbnRpb24tVG9QYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXR0b3JuZXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1ZGl0aW5nQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXV0aG9yaXplZEZpbmFuY2lhbENvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhvcml6ZWROZWdvdGlhdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3JpemVkUmVwcmVzZW50YXRpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhvcml6ZWRTaWduYXR1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dG9tYXRlZENsZWFyaW5naG91c2VDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYW5raW5nQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbElucXVpcnlDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb2FyZFN0YWZmIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcm9rZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyb2tlckNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1c2luZXNzVW5pdE1hbmFnZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyTmFtZW9yRGVwYXJ0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0FEQW5kQ0FNU3BlY2lhbGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzZU1hbmFnZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmljYXRpb25Db250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYWlybWFuT2ZUaGVCb2FyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhbmdlZEJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFuZ2VPcmRlckFwcHJvdmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGllZkV4ZWN1dGl2ZU9mZmljZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoaWVmRmluYW5jaWFsT2ZmaWNlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hpZWZJbmZvcm1hdGlvbk9mZmljZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoaWVmT3BlcmF0aW5nT2ZmaWNlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2l0eVdvcmtzQXV0aG9yaXR5Q29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xhaW1hbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsYWltQXBwcm92ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsYWltUmVjaXBpZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGFpbXNDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGVhcmluZ2hvdXNlQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xlcmtPZkNvdXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDby1Cb3Jyb3dlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ28tSW52ZXN0aWdhdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsZWN0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbGxlZ2VvZkVkdWNhdGlvbkFkbWlzc2lvbnNPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBsaWFuY2VPZmZpY2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wb25lbnRFbmdpbmVlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcHV0ZXJTeXN0ZW1zQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uY3VycmVudEVtcGxveWVyQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uZmlybWVkV2l0aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zaWdub3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lck1hbmFnZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0Q29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29vcmRpbmF0aW9uQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29vcmRpbmF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcnBvcmF0ZVB1cmNoYXNpbmdBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zdEFuZFNjaGVkdWxlQ29vcmRpbmF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbWVyQ29udGFjdEdyYW50aW5nQXBwb2ludG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbWVyRW5naW5lZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbWVyTWFpbnRlbmFuY2VNYW5hZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lclJlbGF0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGFuZ2Vyb3VzR29vZHNDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeUNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5SW5zdHJ1Y3Rpb25zQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVudGFsU2Nob29sQWRtaXNzaW9uc09mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudE9yRW1wbG95ZWVUb0V4ZWN1dGVFeHBvcnRQcm9jZWR1cmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50T3JFbXBsb3llZVRvRXhlY3V0ZUltcG9ydFByb2NlZHVyZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydG1lbnRPclBlcnNvblJlc3BvbnNpYmxlRm9yUHJvY2Vzc2luZ1B1cmNoYXNlT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc2lnbkVuZ2luZWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXZlbG9wbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlyZWN0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpcmVjdG9yeUFkdmVydGlzaW5nQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGl2aXNpb25EaXJlY3RvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGl2aXNpb25NYW5hZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFRElDb29yZGluYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWR1Y2F0aW9uQ29vcmRpbmF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVsZWN0cmljaXR5U3VwcGx5Q29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWxlY3Ryb25pY0RhdGFJbnRlcmNoYW5nZUNvb3JkaW5hdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGVjdHJvbmljU3VibWlzc2lvblJlY2lwaWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1lcmdlbmN5Q29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1lcmdlbmN5Q29udGFjdC1Db25zaWduZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtZXJnZW5jeUNvbnRhY3QtTWlsaXRhcnlUcmFmZmljTWFuYWdlbWVudENvbW1hbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtZXJnZW5jeUNvbnRhY3QtU2hpcHBlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1lcmdlbmN5RGFuZ2Vyb3VzR29vZHNDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llckNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZ2luZWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmdpbmVlcmluZ0NvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVudGVyZWRCeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXN0aW1hdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFdmVuaW5nUHJvZ3JhbXNPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZWN1dGl2ZU9mZmljZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZWN1dGl2ZVZpY2UtUHJlc2lkZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBlZGl0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFuY2lhbEFpZE9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWNsb3NpbmdMZW5kZXJBZG1pbmlzdHJhdGl2ZUNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcndhcmRlckNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1bmN0aW9uYWxNYW5hZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXNTdXBwbHlDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW5lcmFsQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZHNSZWNlaXZpbmdDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmFkdWF0ZUFkbWlzc2lvbnNPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdyYWR1YXRlQnVzaW5lc3NPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdyYWR1YXRlRW5naW5lZXJpbmdPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdyYWR1YXRlRmluZUFydHNPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikd1aWRhbmNlQ291bnNlbG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYXphcmRvdXNNYXRlcmlhbENvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYWRPZlVuaXRGb3JJbmZvcm1hdGlvbkRpc3NlbWluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYWRPZlVuaXRGb3JJbmZvcm1hdGlvblByb2R1Y3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYWRPZlVuaXRPckNvbXB1dGVyRGF0YVByb2Nlc3NpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYWx0aE1haW50ZW5hbmNlT3JnYW5pemF0aW9uQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSHVtYW5SZXNvdXJjZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZm9ybWF0aW9uQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJhbmNlQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJlZFBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmVyQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJ2aWV3ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVzdGlnYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52ZXN0bWVudENvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Iklzc3VpbmdPZmZpY2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKb2ludFdvcmtBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFib3JhdG9yeUNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhbmRyZWdpc3RyeUNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhd0Zpcm0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhd1NjaG9vbEFkbWlzc2lvbnNPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlZ2FsQXVkaXRpbmdDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWNlbnNlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYWxQdXJjaGFzaW5nQWdlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haW50ZW5hbmNlQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFuYWdlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFudWZhY3R1cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFudWZhY3R1cmluZ1BsYW50Q29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFya2V0aW5nRGVwYXJ0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFya2V0aW5nRGlyZWN0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFsQ29udHJvbENvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFsRGlzcG9zaXRpb25Db250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXRlcmlhbEhhbmRsaW5nQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0ZXJpYWxTYWZldHlEYXRhU2hlZXRDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXlvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaWNhbEFkbWlzc2lvbnNPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYWxDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXNzYWdlUmVjaXBpZW50Q29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVzc2FnZVNlbmRlckNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik11bHRpcGxlTGlzdGluZ1NlcnZpY2VTdGFmZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTXVsdGlwbGVMaXN0aW5nU2VydmljZVZlbmRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV3QnVzaW5lc3NQcm9jZXNzaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXdEZXZlbG9wbWVudHNDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RhcnlQdWJsaWMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdGlmaWNhdGlvbkNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWVyaWNhbENvbnRyb2xFbmdpbmVlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2ZmaWNlTWFuYWdlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2ZmaWNlU3RhZmYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wZXJhdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yZGVyQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JkZXJEZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlcmluZ09mZmljZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyQWR1bHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik93bmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lclJlcHJlc2VudGF0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNrYWdlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFyZW50b3JHdWFyZGlhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydGljaXBhdGluZ0xhYm9yYXRvcnlDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0bmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXRpZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXllZUNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheWVyc0NsYWltT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJmb3JtYW5jZUV2YWx1YXRpb25Db21taXR0ZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcnNvbm5lbENvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBoeXNpY2lhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhY2VPZkNvbGxlY3Rpb25Db250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFjZU9mRGVsaXZlcnlDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFudE1hbmFnZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW50T3JFcXVpcG1lbnRDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGF0Zm9ybU1haW50ZW5hbmNlTWFuYWdlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9ydEVuZ2luZWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVhd2FyZFN1cnZleU1hbmFnZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWZlcnJlZFByb3ZpZGVyT3JnYW5pemF0aW9uQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlcGFyZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXNpZGVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpY2VBZG1pbmlzdHJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWFyeUNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1hcnlDb250cm9sUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1hcnlUYXhwYXllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbmNpcGFsU3R1ZHlDb250YWN0b3JBdXRob3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2JhdGlvbm9yTGVnYWxPZmZpY2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9jZXNzRW5naW5lZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2Nlc3NvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdGlvblJlcHJlc2VudGF0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0TWFuYWdlbWVudENvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2dyYW1EaXJlY3RvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZ3JhbU1hbmFnZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2plY3REaXJlY3RvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdE1hbmFnZW1lbnRDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0TWFuYWdlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvdG90eXBlQ29vcmRpbmF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdWJsaWNSZWxhdGlvbnNDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdXJjaGFzZVNlcnZpY2VQcm92aWRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVyY2hhc2luZ0NvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNpbmdDb250cmFjdGluZ09mZmljZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YWxpdHlBc3N1cmFuY2VDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFsaXR5Q29vcmRpbmF0b3JDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFsaXR5SW5zcGVjdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFsaXR5TWFuYWdlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlTdXJ2ZXlvckNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1b3RpbmdQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmF0ZVN1cGVydmlzb3JPckNsZXJrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWFsRXN0YXRlUHJvcGVydHlLZXlIb2xkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYWxFc3RhdGVQcm9wZXJ0eU9jY3VwYW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWJhdGVPckNoYXJnZWJhY2tDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXZpbmdDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXZpbmdEb2NrQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaXN0cmFyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZW50YWxDb21wYW55QWRtaW5pc3RyYXRpdmVDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBvcnRBdXRob3JpemVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBvcnRQcmVwYXJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWVzdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNwb25kYW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNwb25zaWJsZVBlcnNvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzcG9uc2libGVQZXJzb25Gb3JDb21wdXRlckRhdGFQcm9jZXNzaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNwb25zaWJsZVBlcnNvbmZvckluZm9ybWF0aW9uRGlzc2VtaW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzcG9uc2libGVQZXJzb25Gb3JJbmZvcm1hdGlvblByb2R1Y3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldmlld0FuZFJlcHJpY2luZ0NvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbGVzQWRtaW5pc3RyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbGVzUmVwcmVzZW50YXRpdmVPckRlcGFydG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjaGVkdWxlQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Nob29sQ2xlcmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjaG9vbG9mVGhlb2xvZ3lBZG1pc3Npb25zT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTY2hvb2xvZlZldGVyaW5hcnlNZWRpY2luZUFkbWlzc2lvbnNPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjaG9vbFByaW5jaXBhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kYXJ5VGF4cGF5ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY3JldGFyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZUNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VNYW5hZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlT3JkZXJXcml0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VPcmdhbml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VUZWFtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlVGVjaG5pY2lhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBlckNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwaW5nQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29jaWFsU2VydmljZXNXb3JrZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvZnR3YXJlSG91c2VDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsUHJvZ3JhbUNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwb3VzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhZmYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0dWRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0dWRlbnRpbkFic2VudGlhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdHVkeVN1Ym1pdHRlckNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1Ym1pdHRpbmdDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBlcnZpc29yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbGllckNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN5c3RlbXNBZG1pbmlzdHJhdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWNobmljYWxDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWNobmljYWxEZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWNobmljYWxEb2N1bWVudGF0aW9uUmVjaXBpZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWNobmljYWxNYXJrZXRpbmdSZXByZXNlbnRhdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVjaG5pY2FsV3JpdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWxlY29tbXVuaWNhdGlvbnNOZXR3b3JrQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVsZXBob25lQW5zd2VyaW5nU2VydmljZUNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbmFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVuZGVyRGV2ZWxvcGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXN0Q29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhpcmQtUGFydHlBZG1pbmlzdHJhdG9yQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG93blBsYW5uaW5nQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhZmZpY0FkbWluaXN0cmF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWZmaWNBdXRob3JpdHlDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc21pdHRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0Q29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0SW5mcmFzdHJ1Y3R1cmVBdXRob3JpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyZWFzdXJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVWx0aW1hdGVDb25zaWduZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVsdGltYXRlUmVjZWl2ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuZGVyZ3JhZHVhdGVBZG1pc3Npb25zT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmRlcndyaXRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pb25QcmVzaWRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZpY2VQcmVzaWRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhaXZlckNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhcmVob3VzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2F0ZXJTdXBwbHlDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaXRuZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JrQnJva2VyTWFpbnRlbmFuY2VNYW5hZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3Jrc2hvcENvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldvcmtzTWFuYWdlbWVudENvbnRhY3QiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkNvbnRhY3ROdW1iZXIiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9IkNvbnRhY3ROdW1iZXIiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZkNvbnRhY3ROdW1iZXIiIHR5cGU9Ikxpc3RPZkNvbnRhY3ROdW1iZXIiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkNvbnRhY3ROdW1iZXIiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkNvbnRhY3ROdW1iZXJWYWx1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkNvbnRhY3ROdW1iZXJUeXBlQ29kZWQiIHR5cGU9IkNvbnRhY3ROdW1iZXJUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQ29udGFjdE51bWJlclR5cGVDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDb250YWN0TnVtYmVyIiB0eXBlPSJDb250YWN0TnVtYmVyIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkNvbnRhY3ROdW1iZXJUeXBlQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbGVwaG9uZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmF4TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbWFpbEFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vYmlsZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVsZXhOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhZ2VyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb21lUGFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV1dXIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGVFAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVSTE90aGVyIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZDb250YWN0Ij4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJDb250YWN0Ii8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMaXN0T2ZDb250YWN0IiB0eXBlPSJMaXN0T2ZDb250YWN0Ii8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJQYXJ0eVRheEluZm9ybWF0aW9uIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRheElkZW50aWZpZXIiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlJlZ2lzdGVyZWROYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJSZWdpc3RlcmVkT2ZmaWNlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IlRheExvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJDb21wYW55UmVnaXN0cmF0aW9uTnVtYmVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQYXJ0eVRheEluZm9ybWF0aW9uIiB0eXBlPSJQYXJ0eVRheEluZm9ybWF0aW9uIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZQYXJ0eUNvZGVkIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJQYXJ0eUNvZGVkIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMaXN0T2ZQYXJ0eUNvZGVkIiB0eXBlPSJMaXN0T2ZQYXJ0eUNvZGVkIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJQYXJ0eUNvZGVkIj4KLSAgICAgICAgPHhzZDpjb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgIDx4c2Q6ZXh0ZW5zaW9uIGJhc2U9IlBhcnR5Ij4KLSAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUGFydHlSb2xlQ29kZWQiIHR5cGU9IlBhcnR5Um9sZUNvZGUiLz4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUGFydHlSb2xlQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICA8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUGFydHlDb2RlZCIgdHlwZT0iUGFydHlDb2RlZCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVHJhbnNwb3J0Ij4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJUcmFuc3BvcnQiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZlRyYW5zcG9ydCIgdHlwZT0iTGlzdE9mVHJhbnNwb3J0Ii8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJUcmFuc3BvcnQiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlRyYW5zcG9ydElEIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IlRyYW5zcG9ydE1vZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iVHJhbnNwb3J0TWVhbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkNhcnJpZXJOYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJDYXJyaWVySUQiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkN1c3RTaGlwcGluZ0NvbnRyYWN0TnVtIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTZXJ2aWNlTGV2ZWxDb2RlZCIgdHlwZT0iU2VydmljZUxldmVsQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU2VydmljZUxldmVsQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU2hpcHBpbmdJbnN0cnVjdGlvbnMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRyYW5zcG9ydExlZ0NvZGVkIiB0eXBlPSJUcmFuc3BvcnRMZWdDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJUcmFuc3BvcnRMZWdDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Ikxpc3RPZlRyYW5zcG9ydEVxdWlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJUcmFuc2l0RGlyZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJUcmFuc3BvcnROb3RlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJUcmFuc3BvcnQiIHR5cGU9IlRyYW5zcG9ydCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iVHJhbnNwb3J0TW9kZSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0TW9kZUNvZGVkIiB0eXBlPSJUcmFuc3BvcnRNb2RlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVHJhbnNwb3J0TW9kZUNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlRyYW5zcG9ydE1vZGUiIHR5cGU9IlRyYW5zcG9ydE1vZGUiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iVHJhbnNwb3J0TW9kZUNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpckNoYXJ0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpckV4cHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpckZyZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpckZyaWVnaHRGb3J3YXJkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpclRheGkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpclRyYW5zcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJtZWRGb3JjZXNDb3VyaWVyU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFja2hhdWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZXN0V2F5LVNoaXBwZXJzT3B0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb29rUG9zdGFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhYk9yVGF4aSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbW9uSXJyZWd1bGFyQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc29saWRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyaXplZE9jZWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdENhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnZlbnRpb25hbE9jZWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lclBpY2t1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJQaWNrdXBPckN1c3RvbWVyc0V4cGVuc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyaXZlYXdheSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJpdmVhd2F5U2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXVyb3BlYW5PclBhY2lmaWNEaXN0cmlidXRpb25TeXN0ZW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGVkaXRlZFRydWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXhlZFRyYW5zcG9ydEluc3RhbGxhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmx5YXdheSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VvZ3JhcGhpY1JlY2VpdmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VvZ3JhcGhpY1JlY2VpdmluZ09yU2hpcHBpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdlb2dyYXBoaWNTaGlwcGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5sYW5kV2F0ZXJUcmFuc3BvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklubGFuZFdhdGVyd2F5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm1vZGFsLVBpZ2d5YmFjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVzc1RoYW5UcmFpbGVyTG9hZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9nYWlyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWlsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXJpdGltZVRyYW5zcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlsaXRhcnlJbnRyYXRoZWF0ZXJBaXJsaWZ0U2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlsaXRhcnlPZmZpY2lhbE1haWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vZGVVbmtub3duIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3RvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW90b3ItQnVsa0NhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vdG9yLUNvbW1vbkNhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vdG9yLUZsYXRiZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vdG9yLVBhY2thZ2VDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3Rvci1WYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik11dGltb2RhbFRyYW5zcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2NlYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9jZWFuQ29uZmVyZW5jZUNhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9jZWFuTm9uLUNvbmZlcmVuY2VDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJjZWxQb3N0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaXBlbGluZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9vbGVkQWlyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb29sZWRQaWdneWJhY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvb2xlZFJhaWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvb2xlZFRydWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb29sVG9Qb29sIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcml2YXRlQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpdmF0ZVBhcmNlbFNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaXZhdGVWZXNzZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1aWNrdHJhbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhaWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhaWxUcmFuc3BvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvYWRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvYWRUcmFuc3BvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlYU9yQWlyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwcGVyQWdlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwZXJBZ2VudC1UcnVjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBlckFzc29jaWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFja1RyYWluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGVhbXNoaXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBsaWVyVHJ1Y2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvd2F3YXlTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXNzZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhdGVyT3JQaXBlbGluZUludGVybW9kYWxNb3ZlbWVudCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iVHJhbnNwb3J0TWVhbnMiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlRyYW5zcG9ydE1lYW5zQ29kZWQiIHR5cGU9IlRyYW5zcG9ydE1lYW5zQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVHJhbnNwb3J0TWVhbnNDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJUcmFuc3BvcnRNZWFucyIgdHlwZT0iVHJhbnNwb3J0TWVhbnMiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iVHJhbnNwb3J0TWVhbnNDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMjBGdElMQ29udGFpbmVyLUNsb3NlZFRvcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMjBGdElMQ29udGFpbmVyLU9wZW5Ub3AiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjQwRnRJTENvbnRhaW5lci1PcGVuVG9wIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0MEZ0SUxDb250YWluZXItQ2xvc2VkVG9wIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJjcmFmdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWlyRnJlaWdodC1CcmVha0J1bGsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpclJpZGVWYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXJnZUNoZW1pY2FsVGFua2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXJnZU9wZW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGV2ZWxSYWlsY2FyRnVsbHlFbmNsb3NlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsZXZlbFJhaWxjYXJGdWxseU9wZW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGV2ZWxSYWlsY2FyU2NyZWVuZWQtTm9Sb29mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxldmVsUmFpbGNhclNjcmVlbmVkLVdpdGhSb29mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb2dpZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm94Y2FyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3hjYXJDdXNoaW9uVW5kZXJGcmFtZU9GIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3hjYXItRGFtYWdlRnJlZUVxdWlwcGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3hjYXItSW5zdWxhdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3hjYXItSW50ZXJpb3JCdWxraGVhZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1bGt0cnVjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVsa1RydWNrQW5kQnVsa1RyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1bGtUcnVja0FuZEV4dGVuZGFibGVHb25kb2xhVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVsa1RydWNrQW5kRXh0ZW5kYWJsZVRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1bGtUcnVja0FuZEdvbmRvbGFUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdWxrVHJ1Y2tBbmRUYW5rVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVsa1RydWNrQW5kVHJhaWxlcldpdGhPcGVuaW5nRmxvb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2Fib29zZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJnb0FuZFBhc3NlbmdlclZlc3NlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyV2l0aENhcmF2YW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlbWVudFZlc3NlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhc3NpcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhc3Npcy1Hb29zZW5lY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsb3NlZENvbnRhaW5lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xvc2VkQ29udGFpbmVyLUNvbnRyb2xsZWRUZW1wZXJhdHVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xvc2VkVmFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2FsVmVzc2VsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2FzdGVyQ2hlbWljYWxUYW5rZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvaWwtQ2FyQ292ZXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29pbENhck9wZW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLUFsdW1pbnVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXItQnVsayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLUNsb3NlZFRvcC1MZW5ndGhVbnNwZWNpZmllZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLUhlYXRlZE9ySW5zdWxhdGVkT3JWZW50aWxhdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXItSGlnaFNpZGVPcGVuVG9wIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXItSW5zdWxhdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXItSW5zdWxhdGVkT3JWZW50aWxhdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXItTG93U2lkZU9wZW5Ub3AiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lck9ubHlWZXNzZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lci1PcGVuLVNpZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXItT3BlblRvcC1MZW5ndGhVbnNwZWNpZmllZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLVBsYXRmb3JtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJyZXN0aW5nb25hQ2hhc3NpcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyU2hpcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLVN0ZWVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXItVGFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLVRhbmtDaGVtaWNhbHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lci1UYW5rRm9vZEdyYWRlLUxpcXVpZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLVRhbmtHYXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lci1VcGdyYWRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLVZlbnRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyd2l0aEJhZ0hhbmdlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lcndpdGhGbG9vclNlY3VyaW5nUmluZ3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lcndpdGhGbHVzaERvb3JzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJ3aXRoSGFuZ2FyQmFycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyV2l0aFNtb290aFNpZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJXaXRoV2F2eU9yUmlwcGxlU2lkZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyb2xsZWRUZW1wZXJhdHVyZVRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyb2xVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3ZlcmVkQmFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNydWRlT2lsVGFua2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lckRldGVybWluZWREZWFuc09mVHJhbnNwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lclJhaWxUYW5rZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1dC1JbkhlbHBlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVlcFNlYUNoZW1pY2FsVGFua2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb3VibGUtRHJvcFRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyb3BCYWNrVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJ5QnVsa0NhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZG9mVHJhaW5EZXZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4Y2VwdGlvbmFsVHJhbnNwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZXJyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlzaGluZ1Zlc3NlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRml4ZWQtUmFja0RvdWJsZURyb3BUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXhlZFJhY2stRmxhdEJlZFRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpeGVkUmFjay1TaW5nbGVEcm9wVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxhdGJlZFNsaWRpbmdUYW5kZW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZsYXRCZWRUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGF0QmVkVHJhaWxlci1SZW1vdmFibGVTaWRlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxhdEJlZFRyYWlsZXJ3aXRoSGVhZGJvYXJkcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxhdEJlZFRyYWlsZXJ3aXRoTm9IZWFkYm9hcmRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGF0Q2FyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGF0Q2FyLUVuZEJ1bGtoZWFkcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxhdGNhcldpdGhQZWRlc3RhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZXplclRydWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVlemVyVHJ1Y2tBbmRJc290aGVybWljVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZXplclRydWNrQW5kUmVmcmlnZXJhdGVkVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZXplclRydWNrQW5kVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZXplclZhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJvemVuRm9vZFRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1cm5pdHVyZVRydWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXNUYW5rZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdlbmVyYWxDYXJnb1Zlc3NlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VuZXJhdG9yU2V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb25kb2xhQ2FyLUNvdmVyZWRJbnRlcmlvckJ1bGtoZWFkcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29uZG9sYUNhci1PcGVuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb25kb2xhQ292ZXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JhaW5jYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmF2ZWxWZXNzZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhbGZIZWlnaHRGbGF0UmFjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhZC1FbmRIZWxwZXJVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFkb2ZUcmFpbkRldmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGlnaEN1YmVWYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvcHBlckNhci1Db3ZlcmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3BwZXJDYXItQ292ZXJlZFBuZXVtYXRpY0Rpc2NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9wcGVyQ2FyLU9wZW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikh5ZHJhbnRDYXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJZGxlckNhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXNvdGhlcm1pY1RydWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJc290aGVybWljVHJ1Y2tBbmRGcmVlemVyVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXNvdGhlcm1pY1RydWNrQW5kSXNvdGhlcm1pY1RyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Iklzb3RoZXJtaWN0cnVja2FuZHJlZnJpZ2VyYXRlZHRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Iklzb3RoZXJtaWNWYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpcXVlZmllZE5hdHVyYWxHYXNDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaXF1ZWZpZWRQZXRyb2xldW1HYXNDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2FkT3JVbmxvYWREZXZpY2VPbkVxdWlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jb21vdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2NlYW5WZXNzZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9pbFByb2R1Y3RzVGFua2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVuLVRvcE9yRmxhdEJlZFRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wZW5Ub3BWYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yZUNhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhc3NlbmdlclZlc3NlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF0cm9sVmVzc2VsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWNrLVVwVHJ1Y2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpcGVsaW5lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3dlclBhY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3RlY3RlZFRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhaWxCdWxrQ2FyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsQ2FyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsRXhwcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbHJvYWRNYWludGVuYW5jZU9mV2F5Q2FyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsU2lsb1RhbmtlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbFRhbmtlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhci1FbmRIZWxwZXJVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZyaWdlcmF0ZWRDYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZnJpZ2VyYXRlZENvbnRhaW5lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmcmlnZXJhdGVkVHJ1Y2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZnJpZ2VyYXRlZFRydWNrQW5kRnJlZXplclRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZnJpZ2VyYXRlZFRydWNrQW5kSXNvdGhlcm1pY1RyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZnJpZ2VyYXRlZFRydWNrQW5kVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmcmlnZXJhdGVkVmFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZW1vdmFibGVTaWRlVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVtb3ZhbFRydWNrQW5kVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmlnaWRUcnVja1dpdGhUYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSaWdpZFRydWNrV2l0aFRhbmtBbmRCdWxrVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmlnaWRUcnVja1dpdGhUYW5rQW5kVGFua1RyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvYWRSYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvYWRTaWxvVGFua2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb2FkVGFua2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb2xsT24tUm9sbE9mZlZlc3NlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FkZGxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxsZXJEZXRlcm1pbmVkTWVhbnNPZlRyYW5zcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZUNhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcFRhbmtlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2luZ2xlLURyb3BUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFja0NhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1RBSy1SQUsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0ZWVsUHJvZHVjdHNWZXNzZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhbmtDYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhdXRsaW5lcjI1VG9ubmVXaXRoOTBDdWJpY01ldGVyVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF1dGxpbmVyVHJ1Y2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhdXRsaW5lclRydWNrQW5kRXh0ZW5kYWJsZUdvbmRvbGFUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXV0bGluZXJUcnVja0FuZEV4dGVuZGFibGVUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXV0bGluZXJUcnVja0FuZEdvbmRvbGFUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXV0bGluZXJUcnVja0FuZFJlbW92YWxUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXV0bGluZXJUcnVja0FuZFRyYWlsZXJXaXRoT3BlbmluZ0Zsb29yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXV0bGluZXJUcnVja1dpdGhSZW1vdmFibGVSb29mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXV0bGluZXJUcnVja1dpdGhSZW1vdmFibGVSb29mQW5kRXh0ZW5kYWJsZUdvbmRvbGFUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXV0bGluZXJUcnVja1dpdGhSZW1vdmFibGVSb29mQW5kRXh0ZW5kYWJsZVRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhdXRsaW5lclRydWNrV2l0aFJlbW92YWJsZVJvb2ZBbmRHb25kb2xhVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF1dGxpbmVyVHJ1Y2tXaXRoUmVtb3ZhYmxlUm9vZkFuZFJlbW92YWxUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXV0bGluZXJUcnVja1dpdGhSZW1vdmFibGVSb29mYW5kVHJhaWxlcldpdGhPcGVuaW5nRmxvb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheGkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbGVzY29waW5nVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGltYmVyT3JMb2dDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaXAtVXBBcnRpY3VsYXRlZFRydWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaXAtVXB0cnVjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGlwLVVwVHJ1Y2tBbmRFeHRlbmRhYmxlR29uZG9sYVRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpcC1VcFRydWNrQW5kR29uZG9sYVRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpcC1VcFRydWNrQW5kVHJhaWxlcldpdGhPcGVuaW5nRmxvb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWN0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWlsZXItQm9hdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaWxlci1DYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWlsZXItRHJ5RnJlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaWxlci1FbGVjdHJpY0hlYXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWlsZXItSGVhdGVkT3JJbnN1bGF0ZWRPclZlbnRpbGF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWlsZXItSW5zdWxhdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFpbGVyLUluc3VsYXRlZE9yVmVudGlsYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaWxlci1Ob3RPdGhlcndpc2VTcGVjaWZpZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWlsZXItUG5ldW1hdGljIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFpbGVyLVJlZnJpZ2VyYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaWxlci1UYW5rLUNoZW1pY2FscyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaWxlci1UYW5rLUZvb2RHcmFkZUxpcXVpZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaWxlci1UYW5rLUdhcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaW5pbmdWZXNzZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWluV2l0aDIwT3JNb3JlV2Fnb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFpbldpdGhNb3JlVGhhbk9uZUFuZExlc3NUaGFuMjBXYWdvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWluV2l0aE9uZVdhZ29uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmlsZXZlbFJhaWxjYXIyMEZlZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyaWxldmVsUmFpbGNhclNjcmVlbmVkLUZ1bGx5RW5jbG9zZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyaWxldmVsUmFpbGNhclNjcmVlbmVkLU5vUm9vZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJpbGV2ZWxSYWlsY2FyU2NyZWVuZWQtV2l0aERvb3JzTm9Sb29mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmlsZXZlbFJhaWxjYXJTY3JlZW5lZC1XaXRoUm9vZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1Y2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydWNrQW5kVHJhaWxlcldpdGhPcGVuaW5nRmxvb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydWNrLU9wZW5Ub3AiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydWNrLU9wZW5Ub3BIaWdoU2lkZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1Y2stT3BlblRvcExvd1NpZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydWNrT3JUcmFpbGVyV2l0aFRpbHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydWNrLVZhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1Y2tXaXRoT3BlbmluZ0Zsb29yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcnVja1dpdGhPcGVuaW5nRmxvb3JBbmRFeHRlbmRhYmxlR29uZG9sYVRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydWNrV2l0aE9wZW5pbmdGbG9vckFuZEV4dGVuZGFibGVUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcnVja1dpdGhPcGVuaW5nRmxvb3JBbmRHb25kb2xhVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHVnYW5kT3JQdXNoYm9hdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdExvYWREZXZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmFuLVNwZWNpYWxJbnNpZGVMZW5ndGhXaWR0aE9ySGVpZ2h0UmVxdWlyZW1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXNzZWwtTGFrZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVzc2VsLU9jZWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXNzZWwtT2NlYW4tQ29udGFpbmVyc2hpcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVzc2VsLU9jZWFuLUxhc2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlc3NlbC1PY2Vhbi1Sb2xsT24tUm9sbE9mZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29vZGNoaXBjYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JrVmVzc2VsIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IlNlcnZpY2VMZXZlbENvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdWxrQ29tbW9kaXR5VHJhaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZW1pdW1TdXJmYWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaHJlZURheVNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjlBTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWlyQ2FyZ28iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpckVjb25vbXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc0NsYXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zaWduZWVCaWxsaW5nU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291cmllckV4cHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3VuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwcmVzc1NlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5U2NoZWR1bGVkTmV4dERheUJ5Q2FydGFnZUFnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeVNjaGVkdWxlZFNlY29uZERheUJ5Q2FydGFnZUFnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeVNjaGVkdWxlZFRoaXJkRGF5QnlDYXJ0YWdlQWdlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5Q29uZmlybWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWZlcnJlZFNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5Q29uZmlybWF0aW9uUmV0dXJuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb29yU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlOb3RpZmljYXRpb25Pbmx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBlZGl0ZWRTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9vZk9mRGVsaXZlcnlXaXRoU2lnbmF0dXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdENsYXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZFNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cHJlc3NTZXJ2aWNlUGx1cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhY2tpbmdHcm91bmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklhdGEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGVkaXRlZFNlcnZpY2VXb3JsZHdpZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cHJlc3NTZXJ2aWNlV29ybGR3aWRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXRybyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTXVsdGl3ZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5leHREYXlBaXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5leHRGbGlnaHRPdXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5leHREYXlIdW5kcmVkV2VpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXh0TW9ybmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90U2VydmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdmVybmlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1hcnlTZXJ2aWNlQXJlYU5leHREYXlCeTEwMzBBTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JpdHlNYWlsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltYXJ5U2VydmljZUFyZWFOZXh0RGF5Qnk5MzBBTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JpdHlNYWlsSW5zdXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUE0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1hcnlTZXJ2aWNlQXJlYU5leHREYXlCeU5vb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBPQm94WmlwQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWFyeVNlcnZpY2VBcmVhTmV4dERheUJ5NTAwUE0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1hcnlTZXJ2aWNlQXJlYVNlY29uZERheUJ5Tm9vbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFzc2VuZ2VyU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGl0eUludGVybW9kYWxIaWdoU3BlZWQ3ME1pbGVzUGVySG91ciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXJJbnRlcm1vZGFsQW5kU3RhY2tTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI2ME1pbGVzUGVySG91clNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbmlmZXN0RnJlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2lyY3VzVHJhaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldvcmtUcmFpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbXV0ZXJTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3JpemVkUmV0dXJuU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FtZURheSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kRGF5QWlyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYXR1cmRheSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kRGF5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZEdyb3VuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kRGF5SHVuZHJlZFdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhbmRhcmRHcm91bmRIdW5kcmVkV2VpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRNb3JuaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYXR1cmRheVBpY2t1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhbmRhcmRDbGFzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGlnaFNwZWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3JtYWxTcGVlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9zdFNlcnZpY2UiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iVHJhbnNwb3J0TGVnQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklubGFuZFRyYW5zcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXRUaGVTdGF0aXN0aWNhbFRlcnJpdG9yeUxpbWl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmUtQ2FycmlhZ2VUcmFuc3BvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF0Qm9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdERlcGFydHVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXREZXN0aW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFpbkNhcnJpYWdlLUZvdXJ0aENhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haW5DYXJyaWFnZS1GaWZ0aENhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haW5DYXJyaWFnZS1TaXh0aENhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haW5DYXJyaWFnZS1TZXZlbnRoQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFpbkNhcnJpYWdlLUVpZ2h0aENhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haW4tQ2FycmlhZ2VUcmFuc3BvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haW5DYXJyaWFnZS1GaXJzdENhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haUNhcnJpYWdlLVNlY29uZENhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haW5DYXJyaWFnZS1UaGlyZENhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklubGFuZFdhdGVyd2F5VHJhbnNwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeUNhcnJpZXJBbGxUcmFuc3BvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY29uZFByZS1DYXJyaWFnZVRyYW5zcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlLUFjY2VwdGFuY2VUcmFuc3BvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY29uZE9uLUNhcnJpYWdlVHJhbnNwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWluQ2FycmlhZ2UtTmludGhDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbi1DYXJyaWFnZVRyYW5zcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFpbkNhcnJpYWdlLVRlbnRoQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFpbkNhcnJpYWdlLUVsZXZlbnRoQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFpbkNhcnJpYWdlLVR3ZWxmdGhDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxc3RDYXJyaWVyQWZ0ZXJPcmlnaW5DYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIybmRDYXJyaWVyQWZ0ZXJPcmlnaW5DYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIzcmRDYXJyaWVyQWZ0ZXJPcmlnaW5DYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0dGhDYXJyaWVyQWZ0ZXJPcmlnaW5DYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI1dGhDYXJyaWVyQWZ0ZXJPcmlnaW5DYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI2dGhDYXJyaWVyQWZ0ZXJPcmlnaW5DYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI3dGhDYXJyaWVyQWZ0ZXJPcmlnaW5DYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI4dGhDYXJyaWVyQWZ0ZXJPcmlnaW5DYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI5dGhDYXJyaWVyQWZ0ZXJPcmlnaW5DYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ2VudHNSb3V0aW5nT3JpZ2luQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luRGVsaXZlcnlDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJERUxZIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYXVsYWdlUmlnaHRzQ2FycmllckFuZEp1bmN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5Td2l0Y2hDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYXVsYWdlTW92ZW1lbnRDYXJyaWVyQW5kSnVuY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbkNhcnJpZXJBaXJNb3Rvck9yT2NlYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbkNhcnJpZXJSdWxlMTFTaGlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBlcnNSb3V0aW5nT3JpZ2luQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJtZWRpYXRlU3dpdGNoQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdENhcnJpZXJJblJvdXRlT25SZXR1cm5Sb3V0ZU1vdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikp1bmN0aW9uU2V0dGxlbWVudENhcnJpZXJGb2xsb3dpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikp1bmN0aW9uU2V0dGxlbWVudENhcnJpZXJQcmVkZWNlc3NvciIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVHJhbnNwb3J0RXF1aXBtZW50Ij4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJUcmFuc3BvcnRFcXVpcG1lbnQiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZlRyYW5zcG9ydEVxdWlwbWVudCIgdHlwZT0iTGlzdE9mVHJhbnNwb3J0RXF1aXBtZW50Ii8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJUcmFuc3BvcnRFcXVpcG1lbnQiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRXF1aXBtZW50UHJvdmlkZXJDb2RlZCIgdHlwZT0iRXF1aXBtZW50UHJvdmlkZXJDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJFcXVpcG1lbnRQcm92aWRlckNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkVxdWlwbWVudE93bmVyQ29kZWQiIHR5cGU9IkVxdWlwbWVudE93bmVyQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRXF1aXBtZW50T3duZXJDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iRXF1aXBtZW50SUQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkVxdWlwbWVudFNpemVUeXBlQ29kZWQiIHR5cGU9IkVxdWlwbWVudFNpemVUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRXF1aXBlbWVudFNpemVUeXBlQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRXF1aXBtZW50U3RhdHVzQ29kZWQiIHR5cGU9IkVxdWlwbWVudFN0YXR1c0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkVxdWlwbWVudFN0YXR1c0NvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkZ1bGxJbmRpY2F0b3JDb2RlZCIgdHlwZT0iRnVsbEluZGljYXRvckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkZ1bGxJbmRpY2F0b3JDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IkNvbmRpdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkVxdWlwbWVudE5vdGUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iTGlzdE9mU2VhbEluZm8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ikxpc3RPZkVxdWlwbWVudE1lYXN1cmVtZW50cyI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ikxpc3RPZkRpbWVuc2lvbiIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJUcmFuc3BvcnRFcXVpcG1lbnQiIHR5cGU9IlRyYW5zcG9ydEVxdWlwbWVudCIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJFcXVpcG1lbnRQcm92aWRlckNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwcGVyU3VwcGxpZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcnJpZXJTdXBwbGllZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc29saWRhdG9yU3VwcGxpZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlY29uc29saWRhdG9yU3VwcGxpZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaXJkUGFydHlTdXBwbGllZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yd2FyZGVyU3VwcGxpZWRGcm9tQUxlYXNpbmdDb21wYW55Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3J3YXJkZXJTdXBwbGllZEZyb21UaGVSYWlsd2F5c1Bvb2wiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iRXF1aXBtZW50T3duZXJDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90Q3VzdG9tZXJPd25lZE9yTGVhc2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxsZXJPd25lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJPd25lZE9yTGVhc2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmlwTGVhc2VkIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkVxdWlwbWVudFNpemVUeXBlQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjIwRnRJbENvbnRhaW5lci1DbG9zZWRUb3AiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjIwRnRJbENvbnRhaW5lci1PcGVuVG9wIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0MEZ0SWxDb250YWluZXItQ2xvc2VkVG9wIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0MEZ0SWxDb250YWluZXItT3BlblRvcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWlyY3JhZnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpckZyZWlnaHQtQnJlYWtCdWxrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJSaWRlVmFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFyZ2VPcGVuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxldmVsUmFpbGNhckZ1bGx5RW5jbG9zZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGV2ZWxSYWlsY2FyRnVsbHlPcGVuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxldmVsUmFpbGNhclNjcmVlbmVkLU5vUm9vZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsZXZlbFJhaWxjYXJTY3JlZW5lZFdpdGhSb29mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb2dpZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm94Y2FyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3hjYXJDdXNoaW9uVW5kZXJGcmFtZU9mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3hjYXItRGFtYWdlRnJlZUVxdWlwcGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3hjYXItSW5zdWxhdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3hjYXItSW50ZXJpb3JCdWxraGVhZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJveFBhbGxldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2Fib29zZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhc3NpcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhc3Npcy1Hb29zZW5lY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsb3NlZENvbnRhaW5lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xvc2VkQ29udGFpbmVyLUNvbnRyb2xsZWRUZW1wZXJhdHVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xvc2VkVmFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2lsLUNhckNvdmVyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvaWxDYXJPcGVuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lci1BbHVtaW51bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLUJ1bGsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lci1DbG9zZWRUb3AtTGVuZ3RoVW5zcGVjaWZpZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lci1IZWF0ZWRPckluc3VsYXRlZE9yVmVudGlsYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLUhpZ2hTaWRlT3BlblRvcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVySWMyMEZlZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lckljMzBGZWV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJJYzQwRmVldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLUluc3VsYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLUluc3VsYXRlZE9yVmVudGlsYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLUxvd1NpZGVPcGVuVG9wIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXItT3Blbi1TaWRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLU9wZW5Ub3AtTGVuZ3RoVW5zcGVjaWZpZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lci1QbGF0Zm9ybSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyUmVzdGluZ09uQUNoYXNzaXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lci1TdGVlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLVRhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lci1UYW5rLUNoZW1pY2FscyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLVRhbmstRm9vZEdyYWRlLUxpcXVpZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLVRhbmstR2FzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXItVXBncmFkZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lci1WZW50ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lcldpdGhCYWdIYW5nZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJXaXRoRmxvb3JTZWN1cmluZ1JpbmdzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJXaXRoRmx1c2hEb29ycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyV2l0aEhhbmdhckJhcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lcldpdGhTbW9vdGhTaWRlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyV2l0aFdhdnlPclJpcHBsZVNpZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cm9sbGVkVGVtcGVyYXR1cmVUcmFpbGVyLVJlZWZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJvbFVuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdmVyZWRCYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3V0LUluSGVscGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaW1lQ29hdGVkVGFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG91YmxlLURyb3BUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcm9wQmFja1RyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1YWxUcmFpbGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kT2ZUcmFpbkRldmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXBveHlDb2F0ZWRUYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFdXJvUGFsbGV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGNoYW5nZWFibGVQYWxsZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpeGVkLVJhY2stRG91YmxlRHJvcFRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpeGVkLVJhY2stRmxhdC1CZWRUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXhlZC1SYWNrLVNpbmdsZS1Ecm9wVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxhdGJlZFNsaWRpbmdUYW5kZW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZsYXRCZWRUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGF0QmVkVHJhaWxlci1SZW1vdmFibGVTaWRlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxhdEJlZFRyYWlsZXJXaXRoSGVhZGJvYXJkcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxhdEJlZFRyYWlsZXJXaXRoTm9IZWFkYm9hcmRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGF0Q2FyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGF0Q2FyLUVuZEJ1bGtoZWFkcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxhdGNhcldpdGhQZWRlc3RhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJvemVuRm9vZFRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdlbmVyYXRvclNldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29uZG9sYUNhci1Db3ZlcmVkLUludGVyaW9yQnVsa2hlYWRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb25kb2xhQ2FyLU9wZW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdvbmRvbGFDb3ZlcmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYWxmSGVpZ2h0RmxhdFJhY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYWQtRW5kSGVscGVyVW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhZE9mVHJhaW5EZXZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhpZ2hDdWJlVmFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3BwZXJDYXItQ292ZXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9wcGVyQ2FyLUNvdmVyZWQtUG5ldW1hdGljRGlzY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3BwZXJDYXItT3BlbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSHlkcmFudC1DYXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJZGxlckNhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSU1PMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSU1PMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSU1PMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hZE9yVW5sb2FkRGV2aWNlT25FcXVpcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY29tb3RpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vdmFibGVDYXNlLUJldHdlZW4xMC45ME1BbmQxMy43NU0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vdmFibGVDYXNlLUJldHdlZW42LjE1TUFuZDcuODJNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3ZhYmxlQ2FzZS1CZXR3ZWVuNy44Mk1BbmQ5LjE1TSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW92YWJsZUNhc2UtQmV0d2VlbjkuMTVNQW5kMTAuOTBNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3ZhYmxlQ2FzZS1MZXNzVGhhbjYuMTVNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb253b3JraW5nUmVlZmVyQ29udGFpbmVyMjBGdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9ud29ya2luZ1JlZWZlckNvbnRhaW5lcjQwRnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbldvcmtpbmdSZWZyaWdlcmF0ZWRPclJlZWZlckNvbnRhaW5lcjMwRnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9jZWFuVmVzc2VsLUJyZWFrQnVsayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3Blbi1Ub3BPckZsYXRiZWRUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVuVG9wVmFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWNrLVVwVHJ1Y2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvd2VyUGFjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc3N1cml6ZWRUYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm90ZWN0ZWRUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsQ2FyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlscm9hZE1haW50ZW5hbmNlT2ZXYXlDYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYXItRW5kSGVscGVyVW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmcmlnZXJhdGVkQ29udGFpbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZyaWdlcmF0ZWRPclJlZWZlckNhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmcmlnZXJhdGVkVGFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmcmlnZXJhdGVkVGFuazIwRmVldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmcmlnZXJhdGVkVGFuazMwRmVldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmcmlnZXJhdGVkVGFuazQwRmVldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmcmlnZXJhdGVkVGFua0ljMjBGZWV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZyaWdlcmF0ZWRUYW5rSWM0MEZlZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbW92YWJsZVNpZGVUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb2FkcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWRkbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjYW5kaW5hdmlhblBhbGxldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VtaS1SZWZyaWdlcmF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbWktVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZUNhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2luZ2xlLURyb3BUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFja0NhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhaW5sZXNzU3RlZWxUYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFrLVJhayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFua0NhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFua0NvbnRhaW5lcjIwRmVldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFua0NvbnRhaW5lcjMwRmVldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFua0NvbnRhaW5lcjQwRmVldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFua0NvbnRhaW5lckljMjBGZWV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYW5rQ29udGFpbmVySWMzMEZlZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhbmtDb250YWluZXJJYzQwRmVldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVsZXNjb3BpbmdUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZW1wZXJhdHVyZUNvbnRyb2xsZWRDb250YWluZXIyMEZ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZW1wZXJhdHVyZUNvbnRyb2xsZWRDb250YWluZXIzMEZ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZW1wZXJhdHVyZUNvbnRyb2xsZWRDb250YWluZXI0MEZ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RlYmluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFjdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFpbGVyLUJvYXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWlsZXItQ2FyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFpbGVyLURyeUZyZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWlsZXItRWxlY3RyaWNIZWF0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFpbGVyLUhlYXRlZE9ySW5zdWxhdGVkT3JWZW50aWxhdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFpbGVyLUluc3VsYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaWxlci1JbnN1bGF0ZWRPclZlbnRpbGF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWlsZXItTm90T3RoZXJ3aXNlU3BlY2lmaWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFpbGVyLVBuZXVtYXRpYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaWxlci1SZWZyaWdlcmF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWlsZXItVGFuay1DaGVtaWNhbHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWlsZXItVGFuay1Gb29kR3JhZGUtTGlxdWlkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFpbGVyLVRhbmstR2FzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmlsZXZlbFJhaWxjYXIyMEZlZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyaWxldmVsUmFpbGNhclNjcmVlbmVkLUZ1bGx5RW5jbG9zZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyaWxldmVsUmFpbGNhclNjcmVlbmVkLU5vUm9vZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJpbGV2ZWxSYWlsY2FyU2NyZWVuZWQtV2l0aERvb3JzLU5vUm9vZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJpbGV2ZWxSYWlsY2FyU2NyZWVuZWQtV2l0aFJvb2YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydWNrLU9wZW5Ub3AiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydWNrLU9wZW5Ub3BIaWdoU2lkZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1Y2stT3BlblRvcExvd1NpZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydWNrLVZhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdExvYWREZXZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhbi1TcGVjaWFsSW5zaWRlTGVuZ3RoLVdpZHRoT3JIZWlnaHRSZXF1aXJlbWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlc3NlbC1MYWtlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXNzZWwtT2NlYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlc3NlbC1PY2Vhbi1Db250YWluZXJzaGlwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXNzZWwtT2NlYW4tTGFzaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVzc2VsLU9jZWFuLVJvbGxvbi1Sb2xsb2ZmIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkVxdWlwbWVudFN0YXR1c0NvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250aW5lbnRhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbWFpbk9uQm9hcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaWZ0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zaGlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hvcnRsYW5kZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXJsYW5kZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvbWVzdGljIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3NpdGlvbmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGFpciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsb2FkZXIiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iRnVsbEluZGljYXRvckNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdWxsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXB0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydGlhbCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQ29uZGl0aW9ucyI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJSZWZyaWdlcmF0aW9uT24iIHR5cGU9InhjYmxCb29sZWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJSZXNpZHVlIiB0eXBlPSJ4Y2JsQm9vbGVhbiIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iTGlzdE9mQ29uZGl0aW9ucyI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ikxpc3RPZkRpbWVuc2lvbiIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDb25kaXRpb25zIiB0eXBlPSJDb25kaXRpb25zIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZEaW1lbnNpb24iPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9IkRpbWVuc2lvbiIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mRGltZW5zaW9uIiB0eXBlPSJMaXN0T2ZEaW1lbnNpb24iLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkRpbWVuc2lvbiI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJNZWFzdXJlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkRpbWVuc2lvbkNvZGVkIiB0eXBlPSJEaW1lbnNpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJEaW1lbnNpb25Db2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJEaW1lbnNpb24iIHR5cGU9IkRpbWVuc2lvbiIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWVhc3VyZW1lbnQiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDpjaG9pY2U+Ci0gICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTWVhc3VyZW1lbnRWYWx1ZSIvPgotICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ik1lYXN1cmVtZW50UmFuZ2UiLz4KLSAgICAgICAgICAgIDwveHNkOmNob2ljZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlVuaXRPZk1lYXN1cmVtZW50Ii8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNZWFzdXJlbWVudCIgdHlwZT0iTWVhc3VyZW1lbnQiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1lYXN1cmVtZW50VmFsdWUiPgotICAgICAgICA8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6ZGVjaW1hbCI+Ci0gICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iU2lnbmlmaWNhbmNlQ29kZWQiIHR5cGU9IlNpZ25pZmljYW5jZUNvZGUiIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJTaWduaWZpY2FuY2VDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iQ29uZGl0aW9uc0NvZGVkIiB0eXBlPSJDb25kaXRpb25zQ29kZSIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkNvbmRpdGlvbnNDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgIDwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1lYXN1cmVtZW50VmFsdWUiIHR5cGU9Ik1lYXN1cmVtZW50VmFsdWUiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iU2lnbmlmaWNhbmNlQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcHJveGltYXRlbHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWFsVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdyZWF0ZXJUaGFuT3JFcXVhbFRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmVhdGVyVGhhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVzc1RoYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxlc3NUaGFuT3JFcXVhbFRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RFcXVhbFRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1ZVZhbHVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPYnNlcnZlZFZhbHVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdXRPZlJhbmdlIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkNvbmRpdGlvbnNDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2hlcmVBaXJFcXVhbHMxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaGVyZUJ1dHlsQWNldGF0ZUVxdWFsczEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldoZXJlSDJPRXF1YWxzMU9yV2F0ZXJFcXVhbHMxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3JyZWN0ZWRUbzYwRGVncmVlc0ZhaHJlbmhlaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldoZXJlVG9sdWVuZUVxdWFsczEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhcG9ySW5BaXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhcG9ySW5PdGhlclRoYW5BaXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YW5kYXJkVGVtcGVyYXR1cmVBbmRQcmVzc3VyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uZGl0aW9uc090aGVyVGhhblN0YW5kYXJkVGVtcGVyYXR1cmVBbmRQcmVzc3VyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5FdGh5bEFsY29ob2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluRXRoeWxFdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5XYXRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXQxQXRtb3NwaGVyZVByZXNzdXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaGVyZUV0aGVyRXF1YWxzMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0dWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVkaWN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpci1EcmllZEJhc2lzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcy1SZWNlaXZlZEJhc2lzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcnlCYXNpcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aWxpYnJpdW1CYXNpcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9pc3R1cmVBbmRBc2gtRnJlZUJhc2lzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPeGlkaXppbmdBdG1vc3BoZXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWR1Y2luZ0F0bW9zcGhlcmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbGN1bGF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjYWxlZFdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmF0Y2hldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2F0dXJhdGVkVmFwb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuY29uZGl0aW9uYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNob3J0LVRlcm0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpbWUtV2VpZ2h0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcnJlY3RlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5jb3JyZWN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZlBlYWsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9uUGVhayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJtZWRpYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdmVyYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJHYWxsb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaW11bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlZG9taW5hbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3N0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZW5hbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik93bmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JTYWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWFsRXN0YXRlT3duZWRPckNvcnBvcmF0ZU93bmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb2FyZGVkT3JCbG9ja2VkVXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW5uZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBsZXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29sZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVudGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50TGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWZmZWN0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaXN0V2hlblNvbGQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbExpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzSXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzUmVwYWlyZWRPckltcHJvdmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN0YW50YW5lb3VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxvd1RvR29vZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG93VG9IaWdoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3dUb01lZGl1bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG93VG9Nb2RlcmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpdW1Ub0dvb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGl1bVRvSGlnaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9kZXJhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vZGVyYXRlVG9Hb29kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb2RlcmF0ZVRvSGlnaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9kZXJhdGVUb01lZGl1bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZFRvSGlnaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGlnaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVkZ2V0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVjYXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxsb2NhdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmNyZWFzaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFibGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlY2xpbmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvdGVudGlhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9kZWxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVhc3VyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1heGltdW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1bW1lck9uLVBlYWsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1bW1lck1pZC1QZWFrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdW1tZXJPZmYtUGVhayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VtbWVyU3VwZXJPbi1QZWFrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdW1tZXJTdXBlck9mZi1QZWFrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaW50ZXJPbi1QZWFrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaW50ZXJNaWQtUGVhayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2ludGVyT2ZmLVBlYWsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldpbnRlclN1cGVyT24tUGVhayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2ludGVyU3VwZXJPZmYtUGVhayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VtbWVyRGF5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdW1tZXJOaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2ludGVyRGF5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaW50ZXJOaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VtbWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaW50ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRheSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlYWstMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVhay0zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZWFrLTQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNob3VsZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25UaW1lUmVsYXRlZERlbWFuZCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWVhc3VyZW1lbnRSYW5nZSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJNaW5pbXVtVmFsdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ik1heGltdW1WYWx1ZSIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWVhc3VyZW1lbnRSYW5nZSIgdHlwZT0iTWVhc3VyZW1lbnRSYW5nZSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWluaW11bVZhbHVlIj4KLSAgICAgICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOmRlY2ltYWwiPgotICAgICAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IlNpZ25pZmljYW5jZUNvZGVkIiB0eXBlPSJTaWduaWZpY2FuY2VDb2RlIiB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iU2lnbmlmaWNhbmNlQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkNvbmRpdGlvbnNDb2RlZCIgdHlwZT0iQ29uZGl0aW9uc0NvZGUiIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJDb25kaXRpb25zQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgICAgPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNaW5pbXVtVmFsdWUiIHR5cGU9Ik1pbmltdW1WYWx1ZSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWF4aW11bVZhbHVlIj4KLSAgICAgICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOmRlY2ltYWwiPgotICAgICAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IlNpZ25pZmljYW5jZUNvZGVkIiB0eXBlPSJTaWduaWZpY2FuY2VDb2RlIiB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iU2lnbmlmaWNhbmNlQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkNvbmRpdGlvbnNDb2RlZCIgdHlwZT0iQ29uZGl0aW9uc0NvZGUiIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJDb25kaXRpb25zQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgICAgPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYXhpbXVtVmFsdWUiIHR5cGU9Ik1heGltdW1WYWx1ZSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iVW5pdE9mTWVhc3VyZW1lbnQiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlVPTUNvZGVkIiB0eXBlPSJVT01Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJVT01Db2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJVbml0T2ZNZWFzdXJlbWVudCIgdHlwZT0iVW5pdE9mTWVhc3VyZW1lbnQiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iVU9NQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjEwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMTMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjE0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMTYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjE3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxOCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMTkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjIwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIyMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMjIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjIzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIyNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMjUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjI2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIyNyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMjgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjI5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIzMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMzEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjMyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIzMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMzQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjM1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIzNiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMzciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjM4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0MCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNDEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjQzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0NCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNDUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjQ2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0NyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNDgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjUwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI1MSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNTMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjU0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI1NiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNTciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjU4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI1OSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNjAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjYxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI2MiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNjMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjY0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI2NiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNjkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjcxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI3MiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNzMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ijc0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI3NiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNzciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ijc4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI4MCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iODEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ijg0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI4NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iODYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ijg3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI4OSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iOTAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjkxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI5MiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iOTMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ijk0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI5NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iOTYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ijk3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI5OCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMUEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjFCIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjFFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxRiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMUciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjFIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMUoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjFLIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMU0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjFYIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIyQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMkIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjJDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIyRiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMkciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjJIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIySSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMkoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjJLIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIyTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMk0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjJOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIyUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMlEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjJSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIyVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMlYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjJXIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIyWCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMlkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjJaIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIzQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iM0MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjNFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIzRiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iM0ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjNIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIzSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNEEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjRCIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0QyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNEUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjRHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0SCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNEkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjRKIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0SyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNEwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjRNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0TiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNE8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjRQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0USIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNFIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjRUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0VSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNFciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjRYIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI1QSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNUIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjVDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI1RSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNUYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjVHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI1SCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNUkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjVKIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI1SyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNVAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjVRIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTEwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBMTEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkExMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTEzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBMTQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkExNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTE2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBMTciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkExOCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTE5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTIwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBMjIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkEyMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTI0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBMjUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkEyNiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTI3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBMjgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkEyOSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkEzMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTMxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBMzIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkEzMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTM0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBMzUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkEzNiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTM3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBMzgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkEzOSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE0MCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTQxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNDIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE0MyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTQ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNDUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE0NyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTQ4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNDkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNTAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE1MSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTUyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNTMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE1NCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTU1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNTYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE1NyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTU4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTYwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNjEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE2MiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTYzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNjQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE2NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTY2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNjciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE2OCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTY5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTcwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNzEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE3MyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTc0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNzUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE3NiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTc3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNzgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE3OSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE4MCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTgxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBODIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE4MyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTg0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBODUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE4NiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTg3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBODgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE4OSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE5MCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTkxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBOTMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE5NCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTk1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBOTYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE5NyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTk4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFDUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFKIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBTUgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFNUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQU4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFOTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFQWiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBUkUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBU00iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFTVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFUTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVRUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFXIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBWCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFaIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkIxMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjEyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCMTMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkIxNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjE1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCMTYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkIxOCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkIyMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjIxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCMjIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkIyMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjI0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCMjUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkIyNiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjI3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCMjgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkIyOSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkIzMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjMyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCMzMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkIzNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjM1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCMzYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkIzNyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjM4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCMzkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNDAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI0MSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjQyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNDMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI0NCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjQ1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNDYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI0NyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjQ4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNDkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNTAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI1MSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjUyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNTMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI1NCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjU1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNTYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI1NyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjU4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNTkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNjAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI2MSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjYyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNjMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI2NCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjY1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNjYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI2NyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjY5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjcwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNzEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI3MiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjczIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNzQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI3NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjc2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNzciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI3OCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjc5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCOCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjgxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCODMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI4NCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjg1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCODYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI4NyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjg4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCODkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCOTAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI5MSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjkyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCOTMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI5NCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjk1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCOTYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI5NyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjk4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCOTkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJBUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQkIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQkZUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQkgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJIUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQklMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCSiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQksiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCTEQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJMTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQk8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCUUwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCVFUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJVIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCVUEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJVSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJYIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCWiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkMxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDMTAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkMxMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzEyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDMTMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkMxNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzE1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDMTYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkMxNyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzE4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDMTkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkMyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDMjAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkMyMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzIzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDMjQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkMyNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzI2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDMjciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkMyOCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzI5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzMwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDMzEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkMzMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzMzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDMzQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkMzNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzM2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDMzgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkMzOSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM0MCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzQxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNDIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM0MyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzQ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNDUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM0NiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzQ3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNDgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM0OSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM1MCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzUxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNTIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM1MyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzU0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM1NiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzU3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNTgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM1OSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM2MCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzYxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNjIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM2MyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzY0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNjUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM2NiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzY3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNjgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM2OSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM3MCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzcxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNzIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM3MyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzc1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNzYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM3NyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzc4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDOCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzgwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDODEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM4MiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzgzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDODQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM4NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzg2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDODciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM4OCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzg5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDOSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzkwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDOTEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM5MiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzkzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDOTQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM5NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzk2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDOTciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM5OCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzk5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0NUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0RMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0VMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDRU4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDR00iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDSiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNLRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNMRiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0xUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDTUsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNNUSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ01UIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDTlAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNOVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ08iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNPVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ1EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ1QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNUTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ1UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNVUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ1YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNXQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ1dJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ1oiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEMTAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQxMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDEzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEMTQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQxNiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDE3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEMTgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQxOSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQyMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDIxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEMjIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQyMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDI0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEMjUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQyNiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDI3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEMjgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQyOSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDMwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEMzEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQzMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDM0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEMzUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQzNyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDM4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEMzkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ0MCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDQxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJENDIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ0MyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDQ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJENDUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ0NiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDQ3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJENDgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ0OSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ1MCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDUxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJENTIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ1MyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDU0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJENTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ1NiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDU3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJENTgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ1OSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ2MCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDYzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJENjQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ2NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDY2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJENjciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ2OSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ3MCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDcxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJENzIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ3MyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDc0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJENzUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ3NiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDc3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJENzkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEODAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ4MSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDgyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEODMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ4NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDg2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEODciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ4OCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDg5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEOSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDkwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEOTEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ5MiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDkzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEOTQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ5NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDk2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEOTciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ5OCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDk5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEQUEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRBRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iREFZIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iREMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkREIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJERSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iREVDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJERiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iREciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJESSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iREoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRMVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRE1LIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJETVEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRNVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRE4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRPIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEUEMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRQUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRFBUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEUSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRFIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRSQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRFJJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEUkwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRSTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRFMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEVE4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRVIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEV1QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRYIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRFpOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEWlAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkUyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRTQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkU1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFOSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRUEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVCIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRVAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVRIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRVgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVaIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRjkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZBSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRkFSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRkMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRkYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRkwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRk9UIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRlIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGVEsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZUUSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRloiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkcyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRzUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikc3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JRIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHRiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0ZJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0dSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdJQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0lJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHSiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHTEQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdMSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0xMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR04iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdPIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR1EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdSTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR1JOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHUk8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdSVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR1QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdWIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHVyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR1dIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR1oiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkgxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSEEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhBUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSEJBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIQlgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSEUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIR00iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJISSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSElVIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJISiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSEsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJITFQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJITVEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhNVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSE4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhPIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSFBBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSFQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhUWiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSFVSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSFciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhZIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSUIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSUYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSU0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklOSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSU5LIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJTlEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklWIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJVyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSjIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkpCIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSkciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkpLIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSk8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkpPVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSlIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IksxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSzMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Iks1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLNiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS0EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktCIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLQkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLRUwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS0dNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLR1MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktIWiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS0kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktKIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLSk8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktLIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS01IIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLTUsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktNUSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS05JIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLTlMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktOVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS08iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktQQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS1BIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLUE8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktQUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLU0QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktTSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS1QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktNVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS1ROIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLVVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktWQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS1ZSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLVlQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktXIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLV0giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktXVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS1giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkwyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTEJSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMQlQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTEUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxFRiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTEYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTEkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxKIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTE0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTFAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxQQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTFIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMVE4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxUUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTFVNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMVVgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxYIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTTAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik0xIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTTQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik01Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNNyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTTkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1BIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNQUwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1BTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUFXIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUJFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNQkYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1CUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1DVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1GIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNR00iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1IIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNSFoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1JIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNSUsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1JTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUlOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNSU8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1JVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1MRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUxUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNTUsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1NUSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTU1UIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNT04iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1QQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTVEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1RSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTVFTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNU0siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1UIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNVEsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1UUSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTVRSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNVFMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1WIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNVkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1XIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNV0giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1YIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTVoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik4xIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTjMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5BIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOQVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5CIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOQkIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5DIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOQ0wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5EIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJORSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkVXIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJORiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5IIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTklVIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOSiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5NSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTk1QIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTlBMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOUFIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5QVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTlEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5SIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOUkwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5UIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOVFQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5VIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTlgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ZIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT0hNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT05aIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT1QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9aIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPWkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9aSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUDAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlAxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUDMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlA0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUDYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlA3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQOCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUDkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQQUwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBCIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUEUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUEdMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUEsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUE4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBPIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQUSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUFIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUFREIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQVEkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBUTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUFUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBWIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQVyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUFkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBaIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUTIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlEzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlE2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRNyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUUEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlFBTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUUIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlFEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUUsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlFSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUVQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlFURCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUVRJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRVEwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlFUUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUjEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlI0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUjYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlI5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUkQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUksiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUk4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJPIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUlBNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSUFMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUlUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlMzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUzUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlM2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTNyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUzgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTQU4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNDTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0NSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNFQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0VUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0hUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTSUUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNLIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU01JIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU08iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTUSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTU1QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTVEkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNUTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNXIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTWCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVDAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlQxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVDMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlQ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVDYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlQ3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUOCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVDkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUQUgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJURCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVEUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVEoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRLIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVE0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlROIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUTkUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUUFIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRRIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUUUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUUkwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUU0QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRTSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVFQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRVIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVFciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRZIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVTIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlUzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVUEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVCIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVRiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVUgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVkxUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWUSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVlMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVzQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV0NEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV0VCIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXRUUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV0hSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV00iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXU0QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldUVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV1ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlgxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJZREsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IllEUSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWUwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IllSRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWVQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IloxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJaMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWjMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ilo0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJaNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWjYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ilo4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJaUCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJEaW1lbnNpb25Db2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc29saWRhdGVkV2VpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0TmV0V2VpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0R3Jvc3NXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsTmV0V2VpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbEdyb3NzV2VpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJdGVtR3Jvc3NXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ldE5ldFdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZVbml0c1BlclBhbGxldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmF0Q29udGVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV0V2VpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcm9zc1Rvbm5hZ2VPZlRoZVZlc3NlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV0VG9ubmFnZU9mVGhlVmVzc2VsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIdW1pZGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVm9sdGFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG93ZXJDb25zdW1wdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhdERpc3NpcGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJGbG93Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaG9ja0ltcGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3BlcmF0aXZlVGVtcGVyYXR1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbk9wZXJhdGl2ZVRlbXBlcmF0dXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcm9zc1ZvbHVtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV0Vm9sdW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXRlckNvbnRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbnNpbGVTdHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpYnJvc2l0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2F1Z2VMZW5ndGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhZGl1cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RyYWlnaHRuZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdHJhaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZvbHVtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXRlbVdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2VpZ2h0T2ZDb252ZXlhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb252ZXlhbmNlU3VtbWVyRGVhZFdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyaXplZENhcmdvT25WZXNzZWxzV2VpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tQ29udGFpbmVyaXplZENhcmdvT25WZXNzZWxzV2VpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWlnaHRBc2NlcnRhaW5lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlYWJsZVdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXN0aW1hdGVkR3Jvc3NXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZFZvbHVtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVzc2VsT3ZlcmFsbExlbmd0aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hZGluZ01ldGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZBeGxlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bG9hZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhcnRQb3NpdGlvbkluVGhlTGVuZ3RoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmRQb3NpdGlvbkluVGhlTGVuZ3RoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFydFBvc2l0aW9uSW5UaGVXaWR0aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kUG9zaXRpb25JblRoZVdpZHRoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFydFBvc2l0aW9uSW5UaGVUaGlja25lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZFBvc2l0aW9uSW5UaGVUaGlja25lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydENvbnRhaW5lckFjdHVhbEZpbGxpbmdXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydENvbnRhaW5lck1heGltdW1DYXBhY2l0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVjbGFyZWROZXRXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYWRpbmdIZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YWNraW5nSGVpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYWxjdWxhdGVkV2VpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZXJyaXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXB1cml0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JhaW5TaXplIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYW50aGFuaWRlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWxhc3RpY2l0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJhaW5lZFdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FsbGl1bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3Ryb250aXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVpcG1lbnRTdG9yYWdlTGltaXRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFkaW9hY3RpdmVJbmRleE9mVHJhbnNwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWRpb2FjdGl2aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdmVyYWdlR3Jvc3NXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcndhcmREcmFmdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWZ0ZXJEcmFmdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50R3Jvc3NXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsVHJhbnNwb3J0RXF1aXBtZW50R3Jvc3NXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjaWRpdHlPZkp1aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZW5ldHJvbWV0cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1cm9mZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikp1aWNlV2VpZ2h0UGVyMTAwR3JhbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZydWl0U2tpbkNvbG91ciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW5nbGVPZkJlbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpeGVkSW5jcmVtZW50YWxNZWFzdXJlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVyb2ZlbEQxMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVyb2ZlbEQyNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVyb2ZlbEQ1MCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bVN0YWNraW5nV2VpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcm9zc01lYXN1cmVDdWJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJjZW50YWdlRmF0Q29udGVudEluRHJ5TWF0dGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWNjaGFyb21ldHJpY0NvbnRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikh5ZHJhdGVDb250ZW50T2ZBbkFsY29ob2xpY1Byb2R1Y3RBZnRlckJvdHRsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbmh5ZHJvdXNDb250ZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpZWRXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxlZFdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJlYWtpbmdMb2FkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGF0aW51bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2lsdmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmltIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVlV2F0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbmRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbWVyaWNhblBldHJvbGV1bUluc3RpdHV0ZUdyYXZpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBldHJvbGV1bUdyb3NzT2JzZXJ2ZWRWb2x1bWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBldHJvbGV1bUdyb3NzU3RhbmRhcmRWb2x1bWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZvbHVtZVZhcmlhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXRyb2xldW1OZXRTdGFuZGFyZFZvbHVtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0ZXJpYWxPbi1Cb2FyZFF1YW50aXR5LUFmdGVyRGlzY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXRyb2xldW1Ub3RhbENhbGN1bGF0ZWRWb2x1bWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBldHJvbGV1bVRvdGFsT2JzZXJ2ZWRWb2x1bWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklubmFnZUdhdWdlRGlzdGFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBldHJvbGV1bU5ldFN0YW5kYXJkV2VpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWRpbWVudEFuZFdhdGVySW5QZXRyb2xldW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9ic2VydmVkUmVmZXJlbmNlSGVpZ2h0LVRhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVyZW5jZUhlaWdodC1UYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbGxhZ2VHYXVnZURpc3RhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmltQ29ycmVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm93VG9CcmlkZ2VEaXN0YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJpZ2h0bmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJha2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcmVhayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJlYWtpbmdTdHJlbmd0aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJlYWtpbmdTdHJlbmd0aFdldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFzaXNXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYW5nZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29sb3VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250ZW50c09mUGFja2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWVyY2lhbFdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29yZUxlbmd0aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzdGluYXRpb25XZWlnaHRBZ3JlZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpYW1ldGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWx0YVZhbHVlTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVuc2l0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwdGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdGFuY2VCZXR3ZWVuUG9pbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaWR0aC1Cb3hjYXJEb29yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZWROZXdXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVsb25nYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlZmljaXRXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbGFtZW50Q291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvbmdpdHVkaW5hbEZsYXRuZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGF0bmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnN2ZXJzZUZsYXRuZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcm9zc1dlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2F1Z2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3NzV2VpZ2h0LU1heGltdW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhcmRuZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWlnaHQtTWF4aW11bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVpZ2h0RGltZW5zaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXBhY3RFbmVyZ3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc2lkZURpYW1ldGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWdhbFdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVuZ3RoLU1heGltdW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxlbmd0aERpbWVuc2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9zdEVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaW11bVdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9pc3R1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1heGltdW1XZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdHVhbE5ldFdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0c2lkZURpYW1ldGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVTdHJldGNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJUb25uZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVIdW1pZGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzaXN0aXZpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvY2t3ZWxsQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhbVdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVkdWN0aW9uT2ZBcmVhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSdW4tUHJvY2VzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmF0aW8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwZWRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFyZVdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVtcGVyYXR1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaWNrbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGltZVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2VpZ2h0UGVyVW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVpZ2h0LVZhbkRvb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldpZHRoLVZhbkRvb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldlaWdodFBlclVuaXRPZkFyZWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldpZHRoRGltZW5zaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaWR0aC1NYXhpbXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldlaWdodFBlclVuaXRPZkxlbmd0aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2lkZUhlaWdodC1GbGF0QmVkV2l0aFJlbW92YWJsZVNpZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWlyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCbG9jayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3F1YXJlbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3Bvb2xTaXplIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJZaWVsZFN0cmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWx1bWluaXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcnNlbmljIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3JvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlzbXV0aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyYm9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYWxjaXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2x1bWJpdW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcml1bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hsb3JpbmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvYmFsdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hyb21pdW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcHBlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXJvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXJvblBsdXNTaWxpY29uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZXJtYW5pdW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikh5ZHJvZ2VuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3Rhc3NpdW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hZ25lc2l1bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFuZ2FuZXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb2x5YmRlbnVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOaXRyb2dlbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29kaXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOaW9iaXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOaWNrZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik94eWdlbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGhvc3Bob3J1cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VscGh1ciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW50aW1vbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGVuaXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaWxpY29uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaWxpY2l1bU94eWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFudGFsaXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWxsdXJpdW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpdGFuaXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYW5hZGl1bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHVuZ3N0ZW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ildhc3RlQ29udGVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWmluYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWmlyY29uaXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9yYWdlVGVtcGVyYXR1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydFRlbXBlcmF0dXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJnb09wZXJhdGluZ1RlbXBlcmF0dXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFbWVyZ2VuY3lUZW1wZXJhdHVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0Q29udHJvbFRlbXBlcmF0dXJlIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTZWFsSW5mbyI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iU2VhbEluZm8iLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZlNlYWxJbmZvIiB0eXBlPSJMaXN0T2ZTZWFsSW5mbyIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iU2VhbEluZm8iPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlNlYWxOdW1iZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iU2VhbElzc3VlciIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJTZWFsU3RhdHVzRGVzY3JpcHRpb24iLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlNlYWxJbmZvIiB0eXBlPSJTZWFsSW5mbyIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iU2VhbElzc3VlciI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iU2VhbElzc3VlckNvZGVkIiB0eXBlPSJTZWFsSXNzdWVyQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU2VhbElzc3VlckNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlNlYWxJc3N1ZXIiIHR5cGU9IlNlYWxJc3N1ZXIiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iU2VhbElzc3VlckNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zb2xpZGF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVua25vd24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YXJhbnRpbmVBZ2VuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcm1pbmFsT3BlcmF0b3IiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlNlYWxTdGF0dXNEZXNjcmlwdGlvbiI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTZWFsU3RhdHVzQ29kZWQiIHR5cGU9IlNlYWxTdGF0dXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTZWFsU3RhdHVzQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU2VhbFN0YXR1c0luZm8iIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlNlYWxTdGF0dXNEZXNjcmlwdGlvbiIgdHlwZT0iU2VhbFN0YXR1c0Rlc2NyaXB0aW9uIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IlNlYWxTdGF0dXNDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJva2VuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYW1hZ2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJblJpZ2h0Q29uZGl0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaXNzaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBsYWNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhlRWxlY3Ryb25pY1NlYWxJc0ZhdWx0eSIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iVHJhbnNpdERpcmVjdGlvbiI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVHJhbnNpdERpcmVjdGlvbkNvZGVkIiB0eXBlPSJUcmFuc2l0RGlyZWN0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVHJhbnNpdERpcmVjdGlvbkNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRyYW5zaXRUaW1lUXVhbGlmaWVyQ29kZWQiIHR5cGU9IlRyYW5zaXRUaW1lUXVhbGlmaWVyQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVHJhbnNpdFRpbWVRdWFsaWZpZXJDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJUcmFuc2l0VGltZSIgdHlwZT0ieHNkOmRlY2ltYWwiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlRyYW5zaXREaXJlY3Rpb24iIHR5cGU9IlRyYW5zaXREaXJlY3Rpb24iLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iVHJhbnNpdERpcmVjdGlvbkNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllclRvU2VsbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxsZXJUb0J1eWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJjb250cmFjdG9yVG9TZWxsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGxlclRvRHJvcFNoaXBEZXNpZ25hdGVkTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGxlclRvRnJlaWdodEZvcndhcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VsbGVyVG9TdWJjb250cmFjdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3RoZXJWZXNzZWxUb0xpZ2h0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpZ2h0ZXJUb01vdGhlclZlc3NlbCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJUcmFuc2l0VGltZVF1YWxpZmllckNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJIb3VycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWlyRGF5cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FsZW5kYXJEYXlzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYWxlbmRhcldlZWtzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3VycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VyZmFjZURheXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cmZhY2VIb3VycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29ya2luZ0RheXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjVEYXlXb3JrV2VlayIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iVGVybXNPZkRlbGl2ZXJ5Ij4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJUZXJtc09mRGVsaXZlcnlGdW5jdGlvbkNvZGVkIiB0eXBlPSJUZXJtc09mRGVsaXZlcnlGdW5jdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRlcm1zT2ZEZWxpdmVyeUZ1bmN0aW9uQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVHJhbnNwb3J0VGVybXNDb2RlZCIgdHlwZT0iVHJhbnNwb3J0VGVybXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJUcmFuc3BvcnRUZXJtc0NvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTaGlwbWVudE1ldGhvZE9mUGF5bWVudENvZGVkIiB0eXBlPSJTaGlwbWVudE1ldGhvZE9mUGF5bWVudENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlNoaXBtZW50TWV0aG9kT2ZQYXltZW50Q29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVGVybXNPZkRlbGl2ZXJ5RGVzY3JpcHRpb24iIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRyYW5zcG9ydERlc2NyaXB0aW9uIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJSaXNrT2ZMb3NzQ29kZWQiIHR5cGU9IlJpc2tPZkxvc3NDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJSaXNrT2ZMb3NzQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUmlza09mTG9zc0Rlc2NyaXB0aW9uIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJUZXJtc09mRGVsaXZlcnkiIHR5cGU9IlRlcm1zT2ZEZWxpdmVyeSIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJUZXJtc09mRGVsaXZlcnlGdW5jdGlvbkNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmljZUNvbmRpdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzcGF0Y2hDb25kaXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaWNlYW5kRGVzcGF0Y2hDb25kaXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbGxlY3RlZEJ5Q3VzdG9tZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydENvbmRpdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlDb25kaXRpb24iLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iVHJhbnNwb3J0VGVybXNDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXgtV29ya3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWUtQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZUFsb25nc2lkZVNoaXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWVPbkJvYXJkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3N0QW5kRnJlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zdC1JbnN1cmFuY2VBbmRGcmVpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJyaWFnZVBhaWRUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FycmlhZ2UtSW5zdXJhbmNlUGFpZFRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyZWRBdEZyb250aWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyZWRFeC1TaGlwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyZWRFeC1RdWF5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyZWREdXR5VW5wYWlkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyZWREdXR5UGFpZCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJTaGlwbWVudE1ldGhvZE9mUGF5bWVudENvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZhbmNlQ29sbGVjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWR2YW5jZVByZXBhaWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2hPbkRlbGl2ZXJ5U2VydmljZUNoYXJnZVBhaWRCeUNvbnNpZ25lZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzaE9uRGVsaXZlcnlTZXJ2aWNlQ2hhcmdlUGFpZEJ5Q29uc2lnbm9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsZWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsZWN0RnJlaWdodENyZWRpdGVkVG9QYXltZW50Q3VzdG9tZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbGxlY3RPbkRlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lclBpY2stVXBPckJhY2toYXVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWZpbmVkQnlCdXllckFuZFNlbGxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9iUG9ydE9mQ2FsbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGFsZlByZXBhaWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZm9ybWF0aW9uQ29weS1Ob1BheW1lbnREdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyYW5jZUNvc3RzUGFpZEJ5Q29uc2lnbmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmFuY2VDb3N0c1BhaWRCeUNvbnNpZ25vciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWl4ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vblJldmVudWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdFNwZWNpZmllZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFpZEJ5QnV5ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhaWRCeVN1cHBsaWVyT3JTZWxsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheWFibGVFbHNld2hlcmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlckNvbnRyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWNrdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXBhaWRBbmRTdW1tYXJ5QmlsbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlcGFpZEJ1dENoYXJnZWRUb0N1c3RvbWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVwYWlkQnlQcm9jZXNzb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXBhaWQtQnlTZWxsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXBhaWRMb2NhbENvbGxlY3RPdXRzdGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlcGFpZE9ubHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldHVybkNvbnRhaW5lckZyZWlnaHRGcmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXR1cm5Db250YWluZXJGcmVpZ2h0UGFpZEJ5Q3VzdG9tZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldHVybkNvbnRhaW5lckZyZWlnaHRQYWlkQnlTdXBwbGllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUnVsZTExU2hpcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VGcmVpZ2h0LU5vQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaGlyZFBhcnR5UGF5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWlnaHRDb25kaXRpb24iLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iUmlza09mTG9zc0NvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSaXNrT2ZMb3NzSW5UcmFuc2l0VG9EZXN0aW5hdGlvbklzQnV5ZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSaXNrT2ZMb3NzSW5UcmFuc2l0VG9GcmVpZ2h0RXF1YWxpemF0aW9uUG9pbnRJc1NlbGxlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJpc2tPZkxvc3NJblRyYW5zaXRUb1Bvb2xQb2ludElzU2VsbGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmlza09mTG9zc0luVHJhbnNpdFRvRGVzdGluYXRpb25Jc1NlbGxlcnMiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlByaWNlIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJQcmljZSIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mUHJpY2UiIHR5cGU9Ikxpc3RPZlByaWNlIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJQcmljZSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IlByaWNpbmdUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJVbml0UHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlByaWNlQmFzaXNRdWFudGl0eSI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlF1YW50aXR5Ii8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkNhbGN1bGF0ZWRQcmljZUJhc2lzUXVhbnRpdHkiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJRdWFudGl0eSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IlZhbGlkaXR5RGF0ZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlByaWNlUXVhbnRpdHlSYW5nZSI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlF1YW50aXR5Ii8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iUHJpY2VNdWx0aXBsaWVyIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQcmljZSIgdHlwZT0iUHJpY2UiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlByaWNpbmdUeXBlIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQcmljZVR5cGVDb2RlZCIgdHlwZT0iUHJpY2VUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUHJpY2VUeXBlQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUHJpY2luZ1R5cGUiIHR5cGU9IlByaWNpbmdUeXBlIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IlByaWNlVHlwZUNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5jZWxsYXRpb25QcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyVG9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaW5pbXVtT3JkZXJQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwb3J0UHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhbmdlRGVwZW5kZW50UHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdGl2ZUluZ3JlZGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzSXNRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FsY3VsYXRpb25OZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbGN1bGF0aW9uR3Jvc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheEluY2x1ZGVkQWxsb3dhbmNlc0FuZENoYXJnZXNOb3RJbmNsdWRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0dWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdmVyYWdlU2VsbGluZ1ByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmZvcm1hdGlvblByaWNlVGF4SW5jbHVkZWRFeGNsdWRpbmdBbGxvd2FuY2VzT3JDaGFyZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmZvcm1hdGlvblByaWNlRXhjbHVkaW5nQWxsb3dhbmNlc09yQ2hhcmdlc0FuZFRheGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRpdGl2ZVVuaXRQcmljZUNvbXBvbmVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXZlcmFnZUdlbmVyaWNQcm9kdWN0UHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsdGVybmF0ZVByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdmVyYWdlV2hvbGVzYWxlUHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhc2VDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0VGllcjEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0VGllcjIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0VGllcjMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0VGllcjQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0VGllcjUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0VGllcjYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0VGllcjciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0VGllcjgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0VGllcjkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0VGllcjEwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFRpZXIxMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RUaWVyMTIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0VGllcjEzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFRpZXIxNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RUaWVyMTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0VGllcjE2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFRpZXIxNyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RUaWVyMTgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0VGllcjE5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFRpZXIyMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RUaWVyMjEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0VGllcjIyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFRpZXIyMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RUaWVyMjQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0VGllcjI1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFRpZXIyNiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RUaWVyMjciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0VGllcjI4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFRpZXIyOSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RUaWVyMzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbGN1bGF0aW9uUHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhdGFsb2dQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VudHJhbERpc3RyaWJ1dGlvbkZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50RG9tZXN0aWNWYWx1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhbmdlZFByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zdW1lclVuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbmZpcm1lZFVuaXRQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVjbGFyZWRDdXN0b21zVW5pdFZhbHVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWFsZXJBZGp1c3RlZFByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXN0cmlidXRvcnNQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY291bnRQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY291bnRBbW91bnRBbGxvd2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXJlY3RTdG9yZURlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXJlY3RTaGlwUHJvZ3JhbVByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFY3NjUHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtZXJnZW5jeURpcmVjdFNoaXBQcmljZU9yaWdpbmFsRXF1aXBtZW50TWFudWZhY3R1cmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbWVyZ2VuY3lEaXJlY3RTaGlwUHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtZXJnZW5jeURpcmVjdFNoaXBQcmljZVN1cHBsaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbWVyZ2VuY3lEaXJlY3RTaGlwUHJpY2VXYXJlaG91c2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZFByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBlY3RlZFVuaXRQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxhdENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlcXVlbnREZWxpdmVyeVNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxFeGNpc2VUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWVHb29kc1ByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsVXBwZXJMaW1pdFByaWNlTWF4aW11bUFsbG93YWJsZUNvc3RQcmljaW5nRm9yRHJ1Z3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpcm1QcmljZURvTm90QWR2aXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb3Zlcm5tZW50UHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRQcmljZVRocm91Z2hRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5kdXN0cmlhbFByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmZvcm1hdGlvblByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN0aXR1dGlvbmFsUHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikludm9pY2VCaWxsaW5nUHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxpc3RQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFuZGF0b3J5VG9BZHZpc2VVbml0UHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1BY3Rpdml0eVN1cmNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bU9yZGVyUXVhbnRpdHlQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaW11bU9yZGVyUXVhbnRpdHlQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaW11bUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaW11bVJlbGVhc2VRdWFudGl0eVByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXhpbXVtUHJpY2VSZWR1Y3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbnVmYWN0dXJlcnNTdWdnZXN0ZWRSZXRhaWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1heGltdW1SZWxlYXNlUXVhbnRpdHlQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uY29udHJhY3RUaWVyMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uY29udHJhY3RUaWVyMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uY29udHJhY3RUaWVyMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uY29udHJhY3RUaWVyNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uY29udHJhY3RUaWVyNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uY29udHJhY3RUaWVyNiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uY29udHJhY3RUaWVyNyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uY29udHJhY3RUaWVyOCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uY29udHJhY3RUaWVyOSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uY29udHJhY3RUaWVyMTAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbnRyYWN0VGllcjExIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25jb250cmFjdFRpZXIxMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uY29udHJhY3RUaWVyMTMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbnRyYWN0VGllcjE0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25jb250cmFjdFRpZXIxNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uY29udHJhY3RUaWVyMTYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbnRyYWN0VGllcjE3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25jb250cmFjdFRpZXIxOCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uY29udHJhY3RUaWVyMTkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbnRyYWN0VGllcjIwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25jb250cmFjdFRpZXIyMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uY29udHJhY3RUaWVyMjIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbnRyYWN0VGllcjIzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25jb250cmFjdFRpZXIyNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uY29udHJhY3RUaWVyMjUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbnRyYWN0VGllcjI2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25jb250cmFjdFRpZXIyNyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uY29udHJhY3RUaWVyMjgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbnRyYWN0VGllcjI5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25jb250cmFjdFRpZXIzMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV0SXRlbVByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXRXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wdGlvbmFsVG9BZHZpc2VVbml0UHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsUHVyY2hhc2VPcmRlclByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmljZUJyZWFrUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRQcmljZUJlZ2lubmluZ1F1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmljZUJyZWFrUHVyY2hhc2VPcmRlckNvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmljZUNhdGFsb2d1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyRWFjaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpY2VJbkVmZmVjdEF0VGltZU9mU2hpcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcktpbG9ncmFtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJMaXRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlcGFpZEZyZWlnaHRDaGFyZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9mZXNzaW9uYWxQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjZXJzUHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21vdGlvbmFsUHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlclRvbm5lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWZpZWRVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm92aXNpb25hbFByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcm9zc1dlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVyY2hhc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1b3RlUHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2FsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0YWlsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWdnZXN0ZWREZWFsZXJOZXRQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VnZ2VzdGVkRmxlZXRQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcEFuZERlYml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWdnZXN0ZWRMaXN0UHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2luZ2xlUHJpY2VGYWN0b3JzRXF1YWxpemVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWdnZXN0ZWRSZXRhaWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YW5kYXJkUHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1bU9mTGluZUl0ZW1zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWdnZXN0ZWRXaG9sZXNhbGVQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG9CZU5lZ290aWF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRocmVzaG9sZFByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbEludm9pY2VBbW91bnREdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zZmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFkZWRVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaGVvcmV0aWNhbFdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdENvc3RQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2hvbGVzYWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJab25lUHJpY2UiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlVuaXRQcmljZSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVW5pdFByaWNlVmFsdWUiIHR5cGU9IkRlY2ltYWwyMV82Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IkN1cnJlbmN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IlVuaXRPZk1lYXN1cmVtZW50Ii8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJVbml0UHJpY2UiIHR5cGU9IlVuaXRQcmljZSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUXVhbnRpdHkiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDpjaG9pY2U+Ci0gICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUXVhbnRpdHlWYWx1ZSIvPgotICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlF1YW50aXR5UmFuZ2UiLz4KLSAgICAgICAgICAgIDwveHNkOmNob2ljZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlVuaXRPZk1lYXN1cmVtZW50Ii8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJRdWFudGl0eSIgdHlwZT0iUXVhbnRpdHkiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlF1YW50aXR5VmFsdWUiPgotICAgICAgICA8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6ZGVjaW1hbCI+Ci0gICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iU2lnbmlmaWNhbmNlQ29kZWQiIHR5cGU9IlNpZ25pZmljYW5jZUNvZGUiIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJTaWduaWZpY2FuY2VDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iQ29uZGl0aW9uc0NvZGVkIiB0eXBlPSJDb25kaXRpb25zQ29kZSIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkNvbmRpdGlvbnNDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgIDwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlF1YW50aXR5VmFsdWUiIHR5cGU9IlF1YW50aXR5VmFsdWUiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlF1YW50aXR5UmFuZ2UiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTWluaW11bVZhbHVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJNYXhpbXVtVmFsdWUiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlF1YW50aXR5UmFuZ2UiIHR5cGU9IlF1YW50aXR5UmFuZ2UiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlByaWNlTXVsdGlwbGllciI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUHJpY2VNdWx0aXBsaWVyQ29kZWQiIHR5cGU9IlByaWNlTXVsdGlwbGllckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlByaWNlTXVsdGlwbGllckNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNdWx0aXBsaWVyIiB0eXBlPSJ4c2Q6ZGVjaW1hbCIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUHJpY2VNdWx0aXBsaWVyIiB0eXBlPSJQcmljZU11bHRpcGxpZXIiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iUHJpY2VNdWx0aXBsaWVyQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvc3RNYXJrdXBNdWx0aXBsaWVyLU9yaWdpbmFsQ29zdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zdE1hcmt1cE11bHRpcGxpZXItUmV0YWlsQ29zdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY291bnRNdWx0aXBsaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3N0TWFya3VwTXVsdGlwbGllci1XaG9sZXNhbGVDb3N0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJjZW50U29sdXRpb25NdWx0aXBsaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxsaW5nTXVsdGlwbGllciIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUGF5bWVudEluc3RydWN0aW9ucyI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iUGF5bWVudFRlcm1zIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iUGF5bWVudE1ldGhvZCIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUGF5bWVudEluc3RydWN0aW9ucyIgdHlwZT0iUGF5bWVudEluc3RydWN0aW9ucyIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUGF5bWVudFRlcm1zIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJQYXltZW50VGVybSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iRGlzY291bnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJQYXltZW50VGVybXNOb3RlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQYXltZW50VGVybXMiIHR5cGU9IlBheW1lbnRUZXJtcyIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUGF5bWVudFRlcm0iPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlBheW1lbnRUZXJtQ29kZWQiIHR5cGU9IlBheW1lbnRUZXJtQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUGF5bWVudFRlcm1Db2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJQYXltZW50VGVybVZhbHVlIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJQYXltZW50VGVybURldGFpbHMiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJEaXNjb3VudHMiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUGF5bWVudFRlcm0iIHR5cGU9IlBheW1lbnRUZXJtIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IlBheW1lbnRUZXJtQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjEwRGF5c0FmdGVyRW5kT2ZNb250aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRqdXN0bWVudFBheW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmFuY2VkUGF5bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW50aWNpcGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdmFpbGFibGVCeUFjY2VwdGFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF2YWlsYWJsZUJ5RGVmZXJyZWRQYXltZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdmFpbGFibGVCeU5lZ290aWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdmFpbGFibGVCeU5lZ290aWF0aW9uQnlOYW1lZEJhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF2YWlsYWJsZUJ5TmVnb3RpYXRpb25XaXRoQW55QmFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXZhaWxhYmxlQnlOZWdvdGlhdGlvbldpdGhBbnlCYW5raW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF2YWlsYWJsZUJ5U2lnaHRQYXltZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYW5rVHJhbnNmZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhc2ljIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXNpY0NvbW1pc3Npb25UZXJtcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFzaWNEaXNjb3VudE9mZmVyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxPZkV4Y2hhbmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsVG9CaWxsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5jZWxsYXRpb25PcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2hBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXNoQWdhaW5zdERvY3VtZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzaEJ5U3RhdGVMYXciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2hEaXNjb3VudFRlcm1zQXBwbHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2hvbkFkdmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2hvbkFycml2YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2hPbkRlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXNoUGVyVmVuZG9yUmVxdWVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzaFdpdGhPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VydGlmaWVkQ2hlY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZUNhcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBsZXRlUGF5bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbm1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0QmFzaXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvc3RQbHVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmVkaXRDb250cm9sbGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRpbmdHaXZlbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVmZXJyZWRPckluc3RhbGxtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBvc2l0UmVxdWlyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNjb3VudE5vdEFwcGxpY2FibGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2NvdW50V2l0aEFkdmFuY2VQYXltZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNjb3VudFdpdGhQcm9tcHRQYXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50c0FnYWluc3RBY2NlcHRhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudHNBZ2FpbnN0UGF5bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWxlY3RpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZE9mTW9udGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4dGVuZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGYXN0UGF5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXhlZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpeGVkRGF0ZUxhdGVQYXltZW50UGVuYWx0eUFwcGxpZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpeGVkRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN0YWxsbWVudFBheW1lbnRzQXJlRHVlQW5udWFsbHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3RhbGxtZW50UGF5bWVudHNBcmVEdWVNb250aGx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN0YWxsbWVudFBheW1lbnRzQXJlRHVlUXVhcnRlcmx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN0YWxsbWVudFBheW1lbnRzQXJlRHVlU2VtaUFubnVhbGx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN0YW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlckNvbXBhbnlBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJcnJldm9jYWJsZUxldHRlck9mQ3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXRlUGF5bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhc2VBZ3JlZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxldHRlck9mQ3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZXR0ZXJPZkNyZWRpdEF0U2lnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpcXVpZGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMdW1wU3VtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaXhlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV0TW9udGhGb2xsb3dpbmdJbnZvaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uU3RhbmRhcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdFlldERlZmluZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhaWRBZ2FpbnN0U3RhdGVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0aWFsQWR2YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudEJ5SW5zdGFsbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudEJ5aW5zdGFsbWVudHNBY2NvcmRpbmdUb1Byb2dyZXNzQUEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRCeUluc3RhbG1lbnRzQWNjb3JkaW5nVG9Qcm9ncmVzc1RCQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudER1ZVVwb25SZWNlaXB0T2ZJbnZvaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50T3JkZXJUaHJvdWdoQmFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudFRlcm1zRGVmaW5lZEluQ29uc29saWRhdGVkSW52b2ljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudFVwb25Db21wbGV0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZW5hbHR5VGVybXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXBheW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzbHlBZ3JlZWRVcG9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9ncmVzc1BheW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21pc3NvcnlOb3RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbXB0UGF5bWVudEFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJveGltbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VjdXJlZEFjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGxCeU5vdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGxlclRvQWR2aXNlQnV5ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxQcm94aW1vIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbGllckZsb29yUGxhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVub3JQYXltZW50VGVybXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcm1zTm90QXBwbGljYWJsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhZGVBY2NlcHRhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbHRpbW8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRlZFN0YXRlc0Z1bmRzUmVxdWlyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVua25vd24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVzYW5jZUJpbGwiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkRpc2NvdW50cyI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJEaXNjb3VudFBlcmNlbnQiIHR5cGU9IkRlY2ltYWwxMF80Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJEaXNjb3VudEFtb3VudCI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ik1vbmV0YXJ5VmFsdWUiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRGlzY291bnREYXlzRHVlIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJEaXNjb3VudER1ZURhdGUiIHR5cGU9InhjYmxEYXRldGltZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRGlzY291bnREYXlPZk1vbnRoIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJEaXNjb3VudERhdGVUaW1lUmVmQ29kZWQiIHR5cGU9IkRhdGVUaW1lUmVmQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRGlzY291bnREYXRlVGltZVJlZkNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ik5ldERheXNEdWUiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ik5ldER1ZURhdGUiIHR5cGU9InhjYmxEYXRldGltZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iTmV0RGF0ZVRpbWVSZWZDb2RlZCIgdHlwZT0iRGF0ZVRpbWVSZWZDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJOZXREYXRlVGltZVJlZkNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IkRpc2NvdW50cyIgdHlwZT0iRGlzY291bnRzIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNb25ldGFyeVZhbHVlIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNb25ldGFyeUFtb3VudCIgdHlwZT0iRGVjaW1hbDIxXzYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iQ3VycmVuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iUmF0ZU9mRXhjaGFuZ2VEZXRhaWwiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1vbmV0YXJ5VmFsdWUiIHR5cGU9Ik1vbmV0YXJ5VmFsdWUiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlJhdGVPZkV4Y2hhbmdlRGV0YWlsIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VDdXJyZW5jeSI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IkN1cnJlbmN5Ii8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJUYXJnZXRDdXJyZW5jeSI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IkN1cnJlbmN5Ii8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSYXRlT2ZFeGNoYW5nZSIgdHlwZT0iRGVjaW1hbDE5XzkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkludmVyc2VSYXRlT2ZFeGNoYW5nZSIgdHlwZT0iRGVjaW1hbDE5XzkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkRhdGVPZlJhdGVPZkV4Y2hhbmdlIiB0eXBlPSJ4Y2JsRGF0ZXRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ikxpc3RPZlJhdGVPZkV4Y2hhbmdlUmVmZXJlbmNlIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTGlzdE9mUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlJhdGVPZkV4Y2hhbmdlRGV0YWlsIiB0eXBlPSJSYXRlT2ZFeGNoYW5nZURldGFpbCIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJEZWNpbWFsMTlfOSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOmRlY2ltYWwiPgotICAgICAgICAgICAgPHhzZDp0b3RhbERpZ2l0cyB2YWx1ZT0iMTkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZnJhY3Rpb25EaWdpdHMgdmFsdWU9IjkiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlJlZmVyZW5jZSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iUmVmZXJlbmNlIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMaXN0T2ZSZWZlcmVuY2UiIHR5cGU9Ikxpc3RPZlJlZmVyZW5jZSIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJEYXRlVGltZVJlZkNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbnRpY2lwYXRlZERlbGl2ZXJ5RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwcm92YWxPZkdhZ2VEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHByb3ZhbE9mU2FtcGxlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGxldGlvbkFuZEFjY2VwdGFuY2VEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zQ2xlYXJhbmNlRGF0ZUV4cG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0NsZWFyYW5jZURhdGVJbXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVDcmVkaXROb3RlUmVjZWl2ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVFeFdvcmtzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlR29vZHNIYW5kZWRPdmVyRm9yU2hpcG1lbnRCeVNlbGxlck9yQWdlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVHb29kc1JlY2VpdmVkQnlCdXllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZUdvb2RzUmVjZWl2ZWRCeUJ1eWVyc0FnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlR29vZHNSZWNlaXZlZEJ5Q2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZUludm9pY2VSZWNlaXZlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mQWNjZXB0YW5jZU9mRmlyc3RTYW1wbGVzUHJvZHVjZWRVbmRlclByb2R1Y3Rpb25Db25kaXRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZBY2NlcHRhbmNlT2ZOZWdvdGlhYmxlSW5zdHJ1bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mQWNjZXB0YW5jZU9mVG9vbGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mQXJyaXZhbE9mVHJhbnNwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZCaWxsT2ZMYWRpbmdDb25zaWdubWVudE5vdGVPck90aGVyVHJhbnNwb3J0RG9jdW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZkNlcnRpZmljYXRlT2ZGaW5hbEFjY2VwdGFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZkNlcnRpZmljYXRlT2ZQcmVsaW1pbmFyeUFjY2VwdGFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZkNvbmZpcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mQ29uZmlybWF0aW9uT2ZPcmRlclJlY2VpdmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZDb250cmFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mQ3JlZGl0Tm90ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZEZWxpdmVyeU9mR29vZHNUb0VzdGFibGlzaG1lbnRzRG9taWNpbGVTaXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZEZWxpdmVyeVRvQnV5ZXJPZkRvY3VtZW50c1JlcHJlc2VudGluZ0dvb2RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZEZWxpdmVyeVRvQnV5ZXJzQWdlbnRPZkRvY3VtZW50c1JlcHJlc2VudGluZ0dvb2RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZEZWxpdmVyeVRvQ2Fycmllck9mRG9jdW1lbnRzUmVwcmVzZW50aW5nR29vZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZkRlbGl2ZXJ5VG9JbnRlcm1lZGlhcnlCYW5rT2ZEb2N1bWVudHNSZXByZXNlbnRpbmdHb29kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZFbmRPZldvcmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZkZpbmFsQWNjZXB0YW5jZU9mV29yayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mSW52b2ljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mSW53YXJkRnJvbnRpZXJDcm9zc2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mSXNzdWVPZlRyYW5zcG9ydERvY3VtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZOZWdvdGlhYmxlSW5zdHJ1bWVudERyYWZ0UHJvbWlzc29yeU5vdGVCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mT3V0d2FyZEZyb250aWVyQ3Jvc3NpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZlByZXNlbnRhdGlvbk9mRG9jdW1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZQcmVzZW50YXRpb25PZk5lZ290aWFibGVJbnN0cnVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZQcmVzZW50RG9jdW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZlByb3Zpc2lvbmFsUmVjZXB0aW9uT2ZXb3JrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZSZWNlaXB0Rm9yTG9hZGluZ01hdGVzUmVjZWlwdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mUmVjZWlwdE9mVG9vbERlcGVuZGVudEluaXRpYWxTYW1wbGVzUGx1c1VubGltaXRlZEFic29sdXRlQmFua0d1YXJhbnRlZVBsdXNWYWx1ZUFkZGVkVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZSZWNlaXB0T2ZUb29saW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZSZXNhbGVCeUJ1eWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZTYWxhcnlQYXltZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mU2hpcG1lbnRBc0V2aWRlbmNlZEJ5VGhlVHJhbnNwb3J0RG9jdW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZlNpZ25hdHVyZU9mQ29udHJhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZlN0YXJ0T2ZXb3JrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlUHJlc2VudERvY3VtZW50UmVjZWl2ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVQcm9jZWVkc09mUmVzYWxlQ29sbGVjdGVkQnlCdXllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJhZnRBdERheXNBZnRlckRhdGVPZklzc3VhbmNlT2ZUcmFuc3BvcnREb2N1bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJhZnRBdERheXNBZnRlckRhdGVPZlByZXNlbnRhdGlvbk9mRG9jdW1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcmFmdEF0RGF5c0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyYWZ0QXREYXlzU2lnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1ZURhdGVPZk5lZ290aWFibGVJbnN0cnVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFZmZlY3RpdmVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZvaWNlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52b2ljZVJlY2VpcHREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZvaWNlVHJhbnNtaXNzaW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52b2ljZVZlcmlmaWNhdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyUmVmZXJlbmNlRGF0ZUFncmVlZFVwb25CZXR3ZWVuVGhlUGFydGllcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnREdWVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdXJjaGFzZU9yZGVyRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGl0eUFwcHJvdmFsRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhcnRlclN0YXJ0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWlwdE9mR29vZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVlc3RlZERhdGVPZkRlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWZpZWREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWZpZWREcmFmdERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0aXB1bGF0ZWREYXRlRm9yQWNjZXB0YW5jZU9mRG9jdW1lbnRhcnlDcmVkaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0aXB1bGF0ZWREYXRlRm9yTmVnb3RpYXRpb25PZkRvY3VtZW50YXJ5Q3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGlwdWxhdGVkRGF0ZUZvclBheW1lbnRPZkRvY3VtZW50YXJ5Q3JlZGl0Ii8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJQYXltZW50TWV0aG9kIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQYXltZW50TWVhbkNvZGVkIiB0eXBlPSJQYXltZW50TWVhbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlBheW1lbnRNZWFuQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUGF5bWVudE1lYW5SZWZlcmVuY2UiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUGF5bWVudFN5c3RlbUNvZGVkIiB0eXBlPSJQYXltZW50U3lzdGVtQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUGF5bWVudFN5c3RlbUNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ik9yaWdpbmF0aW5nRklBY2NvdW50Ij4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iRklBY2NvdW50Ii8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlJlY2VpdmluZ0ZJQWNjb3VudCI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IkZJQWNjb3VudCIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IkNhcmRJbmZvIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQYXltZW50TWV0aG9kIiB0eXBlPSJQYXltZW50TWV0aG9kIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IlBheW1lbnRNZWFuQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjEwMzVFeGNoYW5nZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjZXB0ZWRCaWxsT2ZFeGNoYW5nZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUNIRGVtYW5kQ2FzaENvbmNlbnRyYXRpb25PckRpc2J1cnNlbWVudENyZWRpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUNIRGVtYW5kQ2FzaENvbmNlbnRyYXRpb25PckRpc2J1cnNlbWVudERlYml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBQ0hEZW1hbmRDYXNoQ29uY2VudHJhdGlvbk9yRGlzYnVyc2VtZW50UGx1c0NyZWRpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUNIRGVtYW5kQ2FzaENvbmNlbnRyYXRpb25PckRpc2J1cnNlbWVudFBsdXNEZWJpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUNIRGVtYW5kQ29ycG9yYXRlVHJhZGVFeGNoYW5nZUNyZWRpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUNIRGVtYW5kQ29ycG9yYXRlVHJhZGVFeGNoYW5nZURlYml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBQ0hEZW1hbmRDb3Jwb3JhdGVUcmFkZVBheW1lbnRDcmVkaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFDSERlbWFuZENvcnBvcmF0ZVRyYWRlUGF5bWVudERlYml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBQ0hEZW1hbmRDcmVkaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFDSERlbWFuZENyZWRpdFJldmVyc2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBQ0hEZW1hbmREZWJpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUNIRGVtYW5kRGViaXRSZXZlcnNhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUNIUHJlQXJyYW5nZWRQYXltZW50QW5kRGVwb3NpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUNIUmV2ZXJzYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFDSFNhdmluZ3NDYXNoQ29uY2VudHJhdGlvbk9yRGlzYnVyc2VtZW50Q3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBQ0hTYXZpbmdzQ2FzaENvbmNlbnRyYXRpb25PckRpc2J1cnNlbWVudERlYml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBQ0hTYXZpbmdzQ2FzaENvbmNlbnRyYXRpb25PckRpc2J1cnNlbWVudFBQRENyZWRpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUNIU2F2aW5nc0Nhc2hDb25jZW50cmF0aW9uT3JEaXNidXJzZW1lbnRQUEREZWJpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUNIU2F2aW5nc0Nhc2hDb25jZW50cmF0aW9uT3JEaXNidXJzZW1lbnRQUERQbHVzQ3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBQ0hTYXZpbmdzQ2FzaENvbmNlbnRyYXRpb25PckRpc2J1cnNlbWVudFBQRFBsdXNEZWJpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUNIU2F2aW5nc0Nhc2hDb25jZW50cmF0aW9uT3JEaXNidXJzZW1lbnRQbHVzQ3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBQ0hTYXZpbmdzQ2FzaENvbmNlbnRyYXRpb25PckRpc2J1cnNlbWVudFBsdXNEZWJpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUNIU2F2aW5nc0NvcnBvcmF0ZVRyYWRlRXhjaGFuZ2VDcmVkaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFDSFNhdmluZ3NDb3Jwb3JhdGVUcmFkZUV4Y2hhbmdlRGViaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFDSFNhdmluZ3NDb3Jwb3JhdGVUcmFkZVBheW1lbnRDcmVkaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFDSFNhdmluZ3NDb3Jwb3JhdGVUcmFkZVBheW1lbnREZWJpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUNIU2F2aW5nc0NyZWRpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUNIU2F2aW5nc0NyZWRpdFJldmVyc2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBQ0hTYXZpbmdzRGViaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFDSFNhdmluZ3NEZWJpdFJldmVyc2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRvbWF0ZWRDbGVhcmluZ0hvdXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRvbWF0ZWRDbGVhcmluZ0hvdXNlQ3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRvbWF0ZWRDbGVhcmluZ0hvdXNlRGViaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbmtDYXJkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYW5rY2hlcXVlLUlzc3VlZEJ5QUJhbmtpbmdPclNpbWlsYXJFc3RhYmxpc2htZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYW5rRHJhZnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbmtlcnNEcmFmdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbERyYXduQnlDcmVkaXRvck9uVGhpcmRQYXJ0eUFuZEFjY2VwdGVkQW5kRW5kb3JzZWRCeUFCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsRHJhd25CeVRoZUNyZWRpdG9yQW5kRW5kb3JzZWRCeUFub3RoZXJCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsRHJhd25CeVRoZUNyZWRpdG9yT25BQmFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbERyYXduQnlUaGVDcmVkaXRvck9uQUJhbmtBbmRFbmRvcnNlZEJ5QVRoaXJkUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxEcmF3bkJ5VGhlQ3JlZGl0b3JPbkFUaGlyZFBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsRHJhd25CeVRoZUNyZWRpdG9yT25UaGVEZWJ0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxpbmdBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb29rRW50cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvb2tFbnRyeUNyZWRpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9va0VudHJ5RGViaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2hpZXJzQ2hlY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNjZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2NkUGx1cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VydGlmaWVkQmFua2Vyc0RyYWZ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpZWRDaGVxdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoZXF1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xlYXJpbmdCZXR3ZWVuUGFydG5lcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsZWFyaW5nSG91c2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsZWFyaW5nSG91c2VJbnRlcmJhbmtQYXltZW50U3lzdGVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsZWN0UGF5bWVudEJ5Q2VydGlmaWVkRnVuZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbGxlY3RQYXltZW50QnlDb21wYW55Q2hlY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBlbnNhdGlvbkJ5QmFsYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmVkaXRBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmVkaXREZWJpdEFjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyZWRpdENhcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyZWRpdFRyYW5zZmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdHAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN0eCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGViaXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGViaXRDYXJkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWJpdFRyYW5zZmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWR1Y3Rpb25Gcm9tRmlsbVJlbnRhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlyZWN0RGViaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpcmVjdERlcG9zaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpcmVjdFBheVRvT3RoZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcmFmdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRUJJTkFYQ2xlYXJpbmdOZXR3b3JrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGVjdHJvbmljUGF5bWVudFN5c3RlbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbFJlc2VydmVGdW5kc09yV2lyZVRyYW5zZmVyUmVwZXRpdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbFJlc2VydmVGdW5kc09yV2lyZVRyYW5zZmVyTm9uUmVwZXRpdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsSW5zdGl0dXRpb25PcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWVGb3JtYXRHaXJvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVpZ2h0UGF5bWVudEJhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdyYWR1YXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9sZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9tZS1CYW5raW5nRGViaXRUcmFuc2ZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5DYXNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmNvbWVDb250aW5nZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmNvbWVTZW5zaXRpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluS2luZFBheW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3RydW1lbnROb3REZWZpbmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlckJhbmtEZWJpdFRyYW5zZmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZvaWNlZFNlcGFyYXRlbHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxldHRlck9mQ3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZXZlbC1TdW1Db25zdGFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYWxDaGVxdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2tCb3giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vbmV5T3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsT3JSZWdpb25hbENsZWFyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25QYXltZW50RGF0YSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90VHJhbnNmZXJhYmxlQmFua2Vyc0RyYWZ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RUcmFuc2ZlcmFibGVMb2NhbENoZXF1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5QnlDaGVjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudEJ5UG9zdEdpcm8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRUb0JhbmtBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXlyb2xsRGVkdWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXRyb2xldW1DbGVhcmluZ2hvdXNlQmFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUFBEQ3JlZGl0VG9EZW1hbmREZXBvc2l0QWNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUFBERGViaXRUb0RlbWFuZERlcG9zaXRBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQUERQbHVzQWRkZW5kdW1DcmVkaXRUb0RlbWFuZERlcG9zaXRBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQUERQbHVzQWRkZW5kdW1EZWJpdFRvRGVtYW5kRGVwb3NpdEFjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWF1dGhyb2l6ZWRDaGVjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNseUNoYXJnZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaXZhdGVOZXR0aW5nQWdyZWVtZW50UGF5QnlXaXJlVHJhbnNmZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaXZhdGVOZXR0aW5nUGF5QnlDaGVjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbWlzc29yeU5vdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21pc3NvcnlOb3RlU2lnbmVkQnlBQmFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbWlzc29yeU5vdGVTaWduZWRCeUFCYW5rQW5kRW5kb3JzZWRCeUFub3RoZXJCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9taXNzb3J5Tm90ZVNpZ25lZEJ5QVRoaXJkUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21pc3NvcnlOb3RlU2lnbmVkQnlBVGhpcmRQYXJ0eUFuZEVuZG9yc2VkQnlBQmFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbWlzc29yeU5vdGVTaWduZWRCeVRoZURlYnRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbWlzc29yeU5vdGVTaWduZWRCeVRoZURlYnRvckFuZEVuZG9yc2VkQnlBVGhpcmRQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbWlzc29yeU5vdGVTaWduZWRCeVRoZURlYnRvckFuZEVuZG9yc2VkQnlCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9wcmlldGFyeU5ldHdvcmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVyZW5jZWRIb21lLUJhbmtpbmdDcmVkaXRUcmFuc2ZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJlbmNlR2lybyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRlZERldGFpbEFjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVlc3RlZE1ldGhvZEZvclBheW1lbnRXYXNOb3RVc2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsQWNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VtbWFyeUFjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNXSUZUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmF2ZWxlcnNDaGVjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVXJnZW50R2lybyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVklTQVNwZWNpYWxFbGVjdHJvbmljRnVuZHNUcmFuc2Zlck5ldHdvcmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhaXZlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2lyZVRyYW5zZmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJYMTIiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iUGF5bWVudFN5c3RlbUNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRpbmFyeVBvc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpck1haWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxQYXltZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zdW1lckVtcGxveWVlQ2hlY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2hDb25jZW50cmF0aW9uRGlzYnVyc2VtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXNoQ29uY2VudHJhdGlvbkRpc2J1cnNlbWVudFBsdXNBZGRlbmRhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lckluaXRpYXRlZEVudHJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lckluaXRpYXRlZEVudHJ5UGx1c0FkZGVuZGEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcnBvcmF0ZVRyYWRlRXhjaGFuZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcnBvcmF0ZUNoZWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWxlZ3JhcGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbGV4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTV0lGVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXJUcmFuc21pc3Npb25OZXR3b3JrcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV0d29ya3NOb3REZWZpbmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWR3aXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJzb25hbC1GYWNlLVRvLUZhY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWFycmFuZ2VkUGF5bWVudEFuZERlcG9zaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWFycmFuZ2VkUGF5bWVudEFuZERlcG9zaXRQbHVzQWRkZW5kYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlYXV0aG9yaXplZERyYWZ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RlcmVkQWlyTWFpbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaXN0ZXJlZE1haWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdXJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lc3NlbmdlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxBQ0giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyQUNIIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJGSUFjY291bnQiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJBY2NvdW50RGV0YWlsIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJGaW5hbmNpYWxJbnN0aXR1dGlvbiIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iRklBY2NvdW50IiB0eXBlPSJGSUFjY291bnQiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkFjY291bnREZXRhaWwiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkFjY291bnRJRCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU2Vjb25kYXJ5QWNjb3VudElEIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJJQkFOIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJBY2NvdW50Q29udHJvbEtleSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkFjY291bnRUeXBlQ29kZWQiIHR5cGU9IkFjY291bnRUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQWNjb3VudFR5cGVDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQWNjb3VudE5hbWUxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJBY2NvdW50TmFtZTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iQ3VycmVuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkFjY291bnRSZWZlcmVuY2VzIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTGlzdE9mUmVmZXJlbmNlQ29kZWQiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQWNjb3VudERldGFpbCIgdHlwZT0iQWNjb3VudERldGFpbCIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJBY2NvdW50VHlwZUNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXdCdXNpbmVzc0FjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3VwTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb2xpY3lOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vbmV5TWFya2V0RnVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0aXJlbWVudEFjY291bnRWZXN0ZWRJbnRlcmVzdGF0TWFya2V0VmFsdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldGlyZW1lbnRBY2NvdW50VmVzdGVkSW50ZXJlc3ROZXRDYXNoVmFsdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZGl2aWR1YWxSZXRpcmVtZW50QWNjb3VudC1JUkEtVmVzdGVkSW50ZXJlc3RhdE1hcmtldFZhbHVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmRpdmlkdWFsUmV0aXJlbWVudEFjY291bnQtSVJBLVZlc3RlZEludGVyZXN0TmV0Q2FzaFZhbHVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3Jwb3JhdGVDb250cm9sbGVkUmV0aXJlbWVudEFjY291bnRWZXN0ZWRJbnRlcmVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGltZURlcG9zaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoZWNraW5nQWNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpZmVJbnN1cmFuY2VGYWNlVmFsdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldGlyZW1lbnRBY2NvdW50LVZlc3RlZEludGVyZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc0FjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydXN0RnVuZEFjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b2Nrc2FuZEJvbmRzQWNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlmZUluc3VyYW5jZUFjY291bnQtTmV0Q2FzaFZhbHVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llZVJldGlyZW1lbnRBY2NvdW50LTQwMUsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyb2tlcmFnZUFjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZUJhY2tBY2NvdW50Zm9yUmV0dXJucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0Q2FyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzaE1hbmFnZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbWFuZERlcG9zaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYml0Q2FyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhpc3RpbmdDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXR1cm5JdGVtc29uRGVtYW5kRGVwb3NpdEFjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldHVybkl0ZW1zb25TYXZpbmdzQWNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2F2aW5ncyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlbmN5TG9jYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbm51aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cm9sbGVkRGlzYnVyc2VtZW50TWFzdGVyQWNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJvbGxlZERpc2J1cnNlbWVudFN1YkFjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyZWRpdFVuaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbnJpY2hlZFBsYW5Db250cmFjdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9uZy10ZXJtRGlzYWJpbGl0eVBvbGljeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTXV0dWFsRnVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWFyeUJhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aW9uc2hpcFN1bW1hcnlBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWZla2VlcGluZy1DdXN0b2R5QWNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWmVyb0JhbGFuY2VNYXN0ZXJBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJaZXJvQmFsYW5jZUFmZmlsaWF0ZUFjY291bnQiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkZpbmFuY2lhbEluc3RpdHV0aW9uIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJGaW5hbmNpYWxJbnN0aXR1dGlvbklEIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iRmluYW5jaWFsSW5zdGl0dXRpb25OYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJGSUJyYW5jaElEIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJGSUJyYW5jaE5hbWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkZJQnJhbmNoU3RyZWV0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJGSUJyYW5jaEhvdXNlTnVtYmVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJGSUJyYW5jaFN0cmVldFN1cHBsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJGSUJyYW5jaFN0cmVldFN1cHBsZW1lbnQyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJGSUJyYW5jaFBvc3RhbENvZGUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkZJQnJhbmNoQ2l0eSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRklCcmFuY2hSZWdpb24iPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJSZWdpb24iLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRklCcmFuY2hDb3VudHJ5Ij4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iQ291bnRyeSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJGaW5hbmNpYWxJbnN0aXR1dGlvbiIgdHlwZT0iRmluYW5jaWFsSW5zdGl0dXRpb24iLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkNhcmRJbmZvIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDYXJkTnVtIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJDYXJkQXV0aENvZGUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkNhcmRSZWZOdW0iIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkNhcmRFeHBpcmF0aW9uRGF0ZSIgdHlwZT0ieGNibERhdGV0aW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJDYXJkVHlwZSIgdHlwZT0iQ2FyZFR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJDYXJkVHlwZU90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJDYXJkSG9sZGVyTmFtZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQ2FyZEluZm8iIHR5cGU9IkNhcmRJbmZvIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkNhcmRUeXBlQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFNRVgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZJU0EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1DIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNjb3ZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSkNCIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaW5lcnMiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkFsbG93T3JDaGFyZ2UiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9IkFsbG93T3JDaGFyZ2UiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZkFsbG93T3JDaGFyZ2UiIHR5cGU9Ikxpc3RPZkFsbG93T3JDaGFyZ2UiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkFsbG93T3JDaGFyZ2UiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkluZGljYXRvckNvZGVkIiB0eXBlPSJJbmRpY2F0b3JDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJJbmRpY2F0b3JDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJCYXNpc0NvZGVkIiB0eXBlPSJCYXNpc0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkJhc2lzQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik1ldGhvZE9mSGFuZGxpbmdDb2RlZCIgdHlwZT0iTWV0aG9kT2ZIYW5kbGluZ0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ik1ldGhvZE9mSGFuZGxpbmdDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQWxsb3dhbmNlT3JDaGFyZ2VEZXNjcmlwdGlvbiI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IkFsbG93T3JDaGdEZXNjIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iVmFsaWRpdHlEYXRlcyIvPgotICAgICAgICAgICAgPHhzZDpjaG9pY2UgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQmFzaXNRdWFudGl0eVJhbmdlIj4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUXVhbnRpdHkiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IkJhc2lzTW9uZXRhcnlSYW5nZSIvPgotICAgICAgICAgICAgPC94c2Q6Y2hvaWNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iVHlwZU9mQWxsb3dhbmNlT3JDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9IlRheCIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iU2VxTm8iIHR5cGU9InhzZDppbnQiIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9IjEiLz4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQWxsb3dPckNoYXJnZSIgdHlwZT0iQWxsb3dPckNoYXJnZSIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJbmRpY2F0b3JDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWJvdXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkanVzdG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxsb3dhbmNlTGluZUl0ZW1zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxvd2FuY2VNZXNzYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxvd2FuY2VQZXJDYWxsT2YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbG93YW5jZVJlcXVlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlTGluZUl0ZW1zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2VNZXNzYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2VQZXJDYWxsT2YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZVJlcXVlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaW5lSXRlbUFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGluZUl0ZW1DaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1heGltdW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbnVzLUFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWludXMtUGVyY2VudGFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9BbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vQWxsb3dhbmNlT3JDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbHVzLUFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGx1cy1QZXJjZW50YWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbHVzT3JNaW51c09yQW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbHVzT3JNaW51cy1QZXJjZW50YWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9tb3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsT3RoZXIiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iQmFzaXNDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcmNlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vbmV0YXJ5QW1vdW50Ii8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik1ldGhvZE9mSGFuZGxpbmdDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbEJhY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZkludm9pY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlbmRvckNoZWNrVG9DdXN0b21lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0Q3VzdG9tZXJBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2VUb0JlUGFpZEJ5VmVuZG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2VUb0JlUGFpZEJ5Q3VzdG9tZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wdGlvbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZHcm9zc1F1YW50aXR5SW52b2ljZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbG93YW5jZVRvQmVJc3N1ZWRCeVZlbmRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxsb3dhbmNlVG9CZUlzc3VlZEJ5UmVzZWxsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZURlbmllZEJ5VmVuZG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5jZWxBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3ZpZGVBbW91bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZm9ybWF0aW9uT25seSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uLVBheWFibGVUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY3J1YWxGdW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGF0RnVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzaEluQWR2YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FsY3VsYXRlQW5kQWRkdG9JbnZvaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsZWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVwYWlkIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJBbGxvd09yQ2hnRGVzYyI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJSZWZJRCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJMaXN0T2ZEZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlNlcnZpY2VDb2RlZCIgdHlwZT0iU2VydmljZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlNlcnZpY2VDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJBbGxvd09yQ2hnRGVzYyIgdHlwZT0iQWxsb3dPckNoZ0Rlc2MiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRlc2NyaXB0aW9uIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJEZXNjcmlwdGlvbiIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mRGVzY3JpcHRpb24iIHR5cGU9Ikxpc3RPZkRlc2NyaXB0aW9uIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJEZXNjcmlwdGlvbiI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iRGVzY3JpcHRpb25UZXh0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJMYW5ndWFnZSIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iRGVzY3JpcHRpb24iIHR5cGU9IkRlc2NyaXB0aW9uIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IlNlcnZpY2VDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWJvdXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFic29sdXRlTWluaW11bUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjZXNzQ2hhcmdlLUZlZGVyYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY2Vzc0NoYXJnZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY2Vzc0NoYXJnZS1TdGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudE51bWJlckNvcnJlY3Rpb25DaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjaWRCYXR0ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2tub3dsZWRnbWVudG9mRGVsaXZlcnlGZWVBT0QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdGl2YXRpb25PZkNhcm5ldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkaXRpb25hbENvbW1lcmNpYWxJbnZvaWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkaXRpb25hbENvcGllc09mRnJlaWdodEJpbGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkZGl0aW9uYWxNYXRlcmlhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkaXRpb25hbFRhcmlmZkNsYXNzaWZpY2F0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkT24tRGVzdGluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkZE9uLU9yaWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkcmVzc0NvcnJlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkZFRvTWFrZU1hcmtldFZhbHVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RtZW50Rm9yTWF4aW11bUNoYXJnZXNCaWxsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RtZW50Rm9yTWluaW11bUF2ZXJhZ2VUaW1lUmVxdWlyZW1lbnRCaWxsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RtZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRtaW5pc3RyYXRpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkVmFsb3JlbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWR2YW5jZUNoYXJnZXNIYW5kbGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWR2YW5jZURlc3RpbmF0aW9uQW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZhbmNlRGVzdGluYXRpb25GZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmFuY2VGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmFuY2VMYWRpbmdDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmFuY2VPcmlnaW5BbW91bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmFuY2VPcmlnaW5GZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmFuY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZlcnRpc2luZ0FsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWZmaWRhdml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ2VudERpc2J1cnNlbWVudC1EZXN0aW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlbnREaXNidXJzZW1lbnQtT3JpZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJjcmFmdE9uR3JvdW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJFeHBvcnRDZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWlyRXhwcmVzc0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWlybGluZU9wZW5pbmdGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpcnBvcnRUZXJtaW5hbEhhbmRsaW5nQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJUcmFuc3BvcnRhdGlvbkNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxjb2hvbGljQmV2ZXJhZ2VSZXBvcnRDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbGVnaGVueUNvdW50eVBBRGVsaXZlcnlDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxsb3dhbmNlTGluZUl0ZW1zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxvd2FuY2VNZXNzYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxvd2FuY2VQZXJDYWxsT2YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbG93YW5jZUFkdmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbG93YW5jZUZvckNvbnNpZ25tZW50TWVyY2hhbmRpc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbG93YW5jZU5vbi1QZXJmb3JtYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxsb3dhbmNlUmVxdWVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWx0ZXJhdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtZW5kaW5nRXhwb3J0RG9jdW1lbnRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW5uZWFsSGVhdFN0ZWVsb3JHbGFzc1RyZWF0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW5vZGl6aW5nQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbnRpLWR1bXBpbmdEdXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBvaW50bWVudE5vdGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJiaXRyYXJ5SW5BZGRpdGlvblRvVGhyb3VnaFJhdGVzYW5kQ2hhcmdlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJ0V29yayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzZW1ibHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2lzdEFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXR0YWNobWVudHNUb0JpbGxPZkxhZGluZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFkRGVidCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFua2luZ0RyYWZ0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFyZ2VGcmVpZ2h0QWxsS2luZHNTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXNlQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXNpY1Jlb3JkZXJBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlYW1pbmdDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlZGRpbmdGZWVkaW5nRGlzaW5mZWN0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZWVmRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZXlvbmRDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJleW9uZEZyZWlnaHRDaGFyZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsQW5kSG9sZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbGVkRGVtYW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsT2ZMYWRpbmdBdHRlbmRhbmN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsT2ZMYWRpbmdDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJsYWNrTHVuZ1RheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmxvY2tpbmdBbmRCcmFjaW5nQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCbG93ZXJDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvYnRhaWxDaGFyZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb25kQW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb25kQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3BTaGVldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9yZGVhdXhBcmJpdHJhcmllcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm90aC1GbGF0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcmVha2J1bGtTZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJlYWtCdWxrU3VyZmFjZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJpZGdlVG9sbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJva2VuTG90Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcm9rZW5QYWNrYWdlQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcm9rZXJhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyb2tlcmFnZU9yRHV0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVua2VyQWRqdXN0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVua2VyQWRqdXN0bWVudC0yMEZvb3RDb250YWluZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1bmtlckFkanVzdG1lbnQtNDBGb290Q29udGFpbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdW5rZXJTdXJjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1cmRlbk92ZXJoZWFkT3JBbGxvd2FuY2VGb3JJbmRpcmVjdENvc3RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXJuaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllckhhbmRDYXJyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5ZXJzQ2FyQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYWJsZVByZXNzdXJpemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYWJsZXNTZW5kaW5nT2YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbGxUYWciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbXBBcmJpdHJhcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbmFkYUdyZWF0TGFrZXNBZGRpdGlvbmFscyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuYWRpYW5DUUN1c3RvbXNDbGVhcmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbmFkaWFuQ3VycmVuY3lFeGNoYW5nZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuYWRpYW5JbXBvcnRUZXJtaW5hdGlvbkZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuYWRpYW5SZWNvbnNpZ25tZW50RmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5hZGlhblJlbWFuaWZlc3RGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbmNlbGxhdGlvbkNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuY2VsbGVkT3JkZXJIZWF2eUR1dHlGbGF0Y2FyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXBwaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXB0dXJlQWRkaXRpb25hbERhdGEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcmdvVGF4ZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhckxvYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhclJlbnRhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FycmllckNyZWRpdEFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FycmllckRlYml0QWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJyaWVyTm90aWZpY2F0aW9uQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJ0YWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJ0YWdlQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXRhbG9naW5nU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlbnRyYWxCdXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlbnRzT2ZmIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0ZU9mQ29uZm9ybWFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmljYXRlT2ZPcmlnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmljYXRlT2ZSZWdpc3RyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYWluQW5kQmluZGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhbWJlck9mQ29tbWVyY2VTZXJ2aWNlQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFuZ2VPZkFpcmJpbGwtU2VydmljZUZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2VMaW5lSXRlbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZU1lc3NhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZVBlckNhbGxPZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlc0ZvcndhcmRBZHZhbmNlQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFydGVyU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXNzaXNUcmFuc2ZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hlbWljYWxNaWxsaW5nQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGljYWdvTG9vcENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2lnYXJldHRlU3RhbXBpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNpdHlEZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2l0eU1haW50ZW5hbmNlRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaXR5UGljay11cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2l0eVRlcm1pbmFsQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGVhbmluZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xvc2luZ1NlYWxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvYXRpbmdEaXBSdXN0cHJvb2ZFRFAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNPREFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ09EQ2hhcmdlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29sbGVjdE9uRGVsaXZlcnlBbHRlcmF0aW9uQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsZWN0T25EZWxpdmVyeURlbGV0aW9uQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsZWN0U3VyY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDby1tYW51ZmFjdHVyaW5nRGlzY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbWJpbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21iaW5hdGlvblBlcmZvcm1hbmNlQW5kTm9uLXBlcmZvcm1hbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21iaW5lQWxsU2FtZURheVNoaXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21taXNzaW9uQW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tdW5pY2F0aW9uc0NoYXJnZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBldGl0aXZlQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wZXRpdGl2ZUNhckFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGV0aXRpdmVQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcHJlc3NvckNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uY2Vzc2lvbkNyZWRpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uY2Vzc2lvbk1vbmV5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25nZXN0aW9uU3VyY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25uZWN0Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zZXJ2YXRpb25SZXNlYXJjaEZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbmVlVW5sb2FkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zb2xpZGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zdGFudFN1cnZlaWxsYW5jZVNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnN0YW50U3VydmVpbGxhbmNlU2VydmljZS1Bcm1lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc3VsYXJpemF0aW9uRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zdWxhckxlZ2FsaXphdGlvblNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnN1bHRpbmdTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zdW1lclNlcnZpY2VQcm92aWRlckNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJEZXBvc2l0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyRGVzdHVmZmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyRGlzY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lckRpdmVyc2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyTGVhc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lckxlYXNpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lckxvc3NEYW1hZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lclNlcnZpY2VDaGFyZ2VVS0VVUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyU2VydmljZUNoYXJnZVVTQUNhbmFkYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyU3R1ZmZpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lclRyYWlsZXJBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRpbnVvdXNNaWxlYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdEFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RFc2NhbGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFNlcnZpY2VDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyb2xsZWRBdG1vc3BoZXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb252ZXJ0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDby1vcENyZWRpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29vcGVyYXRpdmVBZHZlcnRpc2luZ01lcmNoYW5kaXNpbmdBbGxvd2FuY2VQZXJmb3JtYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29weWluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29weU9mQmlsbE9mTGFkaW5nQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3B5T2ZEZWxpdmVyeVJlY2VpcHRDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcmVDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvc3RSZWNvdmVyeUFkanVzdG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvc3RSZWNvdmVyeUZhY3RvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ290dG9uRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VudEFuZFJlY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdW50ZXJ2YWlsaW5nRHV0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291cG9uUmVpbWJ1cnNlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JhZnRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyYXRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyZWRpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVuY3lBZGp1c3RtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW5jeUFkanVzdG1lbnQtMjBGb290Q29udGFpbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW5jeUFkanVzdG1lbnQtNDBGb290Q29udGFpbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW5jeUFkanVzdG1lbnQtQnJlYWtCdWxrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW5jeUFkanVzdG1lbnRGYWN0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnJlbmN5RGlzY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbWVyQWNjb3VudElkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lckVxdWlwbWVudEFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0Jyb2tlckZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0R1dHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNFbnRyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0V4YW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNGZWVzLUNvbnRhaW5lckxldmVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zRmVlcy1MaWZ0TGV2ZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNGb3JtYWxpdGllcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0ludm9pY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNJbnZvaWNlLUFkZGl0aW9uYWxQYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zUGVuYWx0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXRBbmRQYXJhbGxlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3V0dGluZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGFtYWdlZE1lcmNoYW5kaXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYW1hZ2VUb0NhcnJpZXJFcXVpcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhbWFnZVRvQ2FycmllclZlc3NlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGFtYWdlVG9Hb3Zlcm5tZW50RXF1aXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRhRHJhd2luZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVhZGhlYWRNaWxlYWdlQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWFmQW5kRGlzYWJsZWRTdXJjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlY2xhcmVkVmFsdWVGb3JDYXJyaWFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVjbGFyZWRWYWx1ZUZvckN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlY2xhcmVkVmFsdWVGb3JJbnN1cmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlZHVjdFRvTWFrZU1hcmtldFZhbHVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWZlY3RpdmVBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlZmljaXRGcmVpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZS1JbnN0YWxsYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGF5RnVybmlzaGluZ0Rlc3RpbmF0aW9uV2VpZ2h0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5U3VyY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZW1hbmRDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbXVycmFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVtdXJyYWdlLUF2ZXJhZ2VBZ3JlZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbXVycmFnZS1TcGVjaWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBvc2l0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBvc2l0Q2hhcmdlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwb3NpdEluTGlldU9mT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcmFtcGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVycmlja0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzaWduYXRlZFN1cHBsaWVySW5zcGVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzdGluYXRpb25DaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRldGVudGlvbkxvYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRldGVudGlvbk9mUG93ZXJVbml0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGV0ZW50aW9uT2ZUcmFpbGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGV0ZW50aW9uLVNwZWNpYWxUeXBlRmxhdENhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGV0ZW50aW9uVW5sb2FkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXRlcm1pbmVkRnJlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGV2ZWxvcG1lbnRDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpZVNlcnZpY2VDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpcmVjdFByb2R1Y3RIYW5kbGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzYnVyc2VtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNjb25uZWN0Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY291bnQtRHJvcEJveENvbnZlbmllbmNlQ3RyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNjb3VudC1JbmNlbnRpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2NvdW50LU11bHRpcGxlU2hpcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2NvdW50LVNlcnZpY2VPcHRpb25EZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY291bnQtU2VydmljZU9wdGlvblBpY2t1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY291bnQtU3BlY2lhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzcGxheUFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpYnV0aW9uRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXN0cmlidXRpb25TZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXN0cmlidXRvckRpc2NvdW50QWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXZlcnNpb25BbmRSZWNvbnNpZ25tZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXZlcnNpb25DaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpdmVyc2lvblRvQWlyQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2NrYWdlLUJvYXREZXRlbnRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50YXRpb25DaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50SGFuZGxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvb3ItVG8tRG9vciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG93ZWxQaW5DaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyYXlhZ0F0UG9ydE9mRGViYXJrYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyYXlhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyYXlhZ2VhdFBvcnRPZkRlYmFya2F0aW9uUmF0ZVpvbmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyYXlhZ2VBdFBvcnRPZkVtYmFya2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcmF5YWdlYXRQb3J0T2ZFbWJhcmthdGlvblJhdGVab25lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcmF5YWdlTGluZUhhdWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyaXZlckFzc2lzdGVkVW5sb2FkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcml2ZXJzV2FnZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyb3BEb2NrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcm9wWWFyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJ1bUNvc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRydW1EZXBvc2l0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcnVtVXBDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyeWVyQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcnlJY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1bm5hZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1dHlDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1dHlEcmF3YmFjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWFybHlCdXlBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVhcmx5UGF5bWVudEFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWFybHlTaGlwQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbWVyZ2VuY3lQb3J0Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbWVyZ2VuY3lTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbWVyZ2VuY3lTdXJjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcHR5V2VpZ2hpbmdDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuY2xvc3VyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kb3JzZW1lbnRGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZXJneWNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5lcmd5U3VyY2hhcmdlRnVlbEFkanVzdG1lbnRGYWN0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZ2luZWVyaW5nQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmdpbmVlcmluZ1N1cHBsaWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmdyYXZpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVudGVyZWRWYWx1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW52aXJvbm1lbnRhbFByb3RlY3Rpb25TZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVpcG1lbnRNYW51ZmFjdHVyZXJSZXN0b3JhdGlvbkF1ZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc2NhbGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc2NvcnRTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc2Nyb3ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV1cjFQcmVzZW50YXRpb25GZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV1cm9wZWFuUG9ydENoYXJnZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGNlc3NpdmVWYWx1ZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhjZXNzTWlsZWFnZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhjZXNzUGVyaW9kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhjZXNzVmFsdWVGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4Y2Vzc1dlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhjaGFuZ2VBY2Nlc3NDcmVkaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4Y2x1c2l2ZVVzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhjbHVzaXZlVXNlT2ZFcXVpcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4aGliaXRpb25EZWxpdmVyeUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhoaWJpdGlvblBpY2t1cENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwYW5kZWRTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBlZGl0ZWRPbmVEYXlDb25zdWxhclNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGVkaXRlZFNlcnZpY2VDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGVkaXRlZFNoaXBtZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwZWRpdGluZ0ZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwZWRpdGluZ1ByZW1pdW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cG9ydEN1c3RvbXNDbGVhcmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cG9ydERlY2xhcmF0aW9ucy1BdXRvbWF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cG9ydERlY2xhcmF0aW9ucy1VU1NoaXBwZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBvcnRJbXBvcnRDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cG9ydExpY2Vuc2VBcHBsaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwb3J0U2hpcHBpbmdDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4dHJhQ29waWVzYW5kTWFpbGluZ3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4dHJhTGFib3JIZWxwZXJTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHRyYUxlbmd0aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXh0cmFMZW5ndGhTdXJjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4dHJhU2VydmljZS1Db3VudGVyLVRvLUNvdW50ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhYnJpY2F0aW9uQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGYWNzaW1pbGVDaGFyZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGYWNzaW1pbGVDaGFyZ2VzLUFkZGl0aW9uYWxQYWdlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFpbGVkTGFtcFBhbmVsQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGYXhQcmUtYWxlcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxUcmFuc2ZlclN1cmNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbmNlQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdEFydGljbGVDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpcnN0RmxpZ2h0T3V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGF0cmFja1N1cmNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxhdFJhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZsb29yU3RvY2tQcm90ZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb29kQW5kTG9kZ2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWlnbkN1c3RvbXNEdXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JlaWduTWlsaXRhcnlTYWxlc1JlbnRhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWlnbk1pbGl0YXJ5U2FsZXNTcGVjaWFsQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JlaWduT2ZmaWNlQWR2YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yd2FyZENvdXBvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcndhcmRpbmdBZ2VudENvbW1pc3Npb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcndhcmRpbmdDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyYW5jaGlzZUZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZURvbWljaWxlU2hpcG1lbnRQcm9jZXNzaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVlR29vZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWlnaHRCYXNlZE9uRG9sbGFyTWluaW11bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlaWdodENoYXJnZXNUb0JvcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlaWdodENoYXJnZXNUb0Rlc3RpbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVpZ2h0RXF1YWxpemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVpZ2h0SW50ZXJuYXRpb25hbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlaWdodEludGVybmF0aW9uYWxOb24tVVNEb2xsYXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVpZ2h0SW50ZXJuYXRpb25hbFVTRG9sbGFycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlaWdodFBhc3N0aHJvdWdoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVpZ2h0U3VyY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVzaG5lc3NMZWFrZXJBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1ZWxDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1ZWxTdXJjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1bGxTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdWxsVHJ1Y2tsb2FkQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdW1pZ2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXJtZW50RGlzdHJpY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdhcm1lbnRTdXJjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdhc1ByZXNzdXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXRld2F5RmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHbGF6ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29sZEZhY3RvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZHNBbmRTZXJ2aWNlc0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZHNBbmRTZXJ2aWNlc0NyZWRpdEFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZHNBbmRTZXJ2aWNlc1RheENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJubWVudEluc3BlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdvdmVybm1lbnRXYXJlaG91c2VGZWUtRGVzdGluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdvdmVybm1lbnRXYXJlaG91c2VGZWUtT3JpZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmFpbkRvb3JzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmFpbkZsb3dDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdyYXR1aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmluZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3Jvc3NSZWNlaXB0c1N1cmNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JvdXBhZ2VEaXNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JvdXBlZEl0ZW1zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHdWFyYW50ZWVkSW5zcGVjdGlvblRlY2huaWNhbFNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikd1bGZQb3J0RGVsaXZlcnlDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhbmRsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYW5kbGluZ0NoYXJnZXNPbkRpc3RyaWJ1dGlvbkZyZWlnaHRGb3J3YXJkZWRCZXlvbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhbmRsaW5nRnJlaWdodEF0UG9zaXRpb25zTm90SW1tZWRpYXRlbHlBZGphY2VudFRvVmVoaWNsZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGFyYm9yTWFpbnRlbmFuY2VGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhcmJvck1haW50ZW5hbmNlUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYXVsaW5nQW5kSG9pc3RpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhdWxpbmdBbmRIb2lzdGluZ1RvQmVEaXJlY3RCaWxsZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhemFyZG91c0NhcmdvQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYXphcmRvdXNDYXJnb09uRGVjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGF6YXJkb3VzTWF0ZXJpYWxzSGFuZGxpbmdGZWUtRG9tZXN0aWMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhemFyZG91c01hdGVyaWFsc0hhbmRsaW5nRmVlLUludGVybmF0aW9uYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhemFyZG91c1N0b3JhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYXRJblRyYW5zaXRDaGFyZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWF0VHJlYXRDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYXZ5RHV0eUZsYXRDYXJDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYXZ5TGlmdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGlnaFNlY3VyaXR5UmVkSW4tYm9uZFNlYWxDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhpZ2h3YXlJbnRlcmNoYW5nZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9pbnRpbnNBbmRIYXVsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb2xkaW5nQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb21lTGluZUZyZWlnaHRDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvbmV5RmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb29rLXVwY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3NlQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3NlQ2hhcmdlU3BlY2lhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG91c2Vob2xkR29vZHNQaWNrLXVwT3JEZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSUFUQUFpcmJpbGxQcmVwYXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSUFUQUZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkltcG9ydFNlcnZpY2VGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkltcHJvcGVyRG9jdW1lbnRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5ib3VuZEZyZWlnaHRDaGFyZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmNvbWVGcmVpZ2h0TWFudWZhY3R1cmluZ1RvU2hpcHBpbmdQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5jb3JyZWN0QmlsbGluZ0FjY291bnRDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZHVzdHJ5UHJpY2VBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluaXRpYWxMaWNlbnNlRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmxhbmRUcmFuc3BvcnRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zaWRlQ2FibGVDb25uZWN0b3JzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnNpZGVEZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zaWRlUGljay11cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zcGVjdEF0RGVzdGluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3BlY3RBdE9yaWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zcGVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdGFsbGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN0YWxsYXRpb25BbmRUcmFpbmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdGFsbGF0aW9uV2FycmFudHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VsYXRlZFRhbmtDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJhbmNlRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmFuY2VQbGFjZW1lbnRDb3N0Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmFuY2VQcmVtaXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmFuY2VQcm92aWRlZEJ5TGVzc2VlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmFuY2VQcm92aWRlZEJ5TGVzc29yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmFuY2VTdXJjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVyZGl2aXNpb25Qcm9maXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVyZXN0QW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcmVzdE9uUmVmdW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcmVzdE9uU2VjdXJpdHlEZXBvc2l0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcmltVXNlUGVybWl0dGVkQXRTcGVjaWFsUmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJuYXRpb25hbEFpclRyYW5zcG9ydEFzc29jaWF0aW9uQ29tbWlzc2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJuYXRpb25hbEFpclRyYW5zcG9ydEFzc29jaWF0aW9uTWFya3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm5hdGlvbmFsQ291cmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJuYXRpb25hbERvb3ItdG8tRG9vckhhbmRsaW5nRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcnBsYW50Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcnN0YXRlSGlnaHdheVRvbGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluVHJhbnNpdFByaWNlUHJvdGVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50cmEtcGxhbnRDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikludm9pY2VBZGRpdGlvbmFsQW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZvaWNlQWRqdXN0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52b2ljZUF0LUNvc3RBbW91bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikludm9pY2VEZWxpdmVyeVRlcm1zQW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZvaWNlTm8tQ2hhcmdlQW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZvaWNlU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikludm9pY2VXaXRoR29vZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklyaXNoQXJiaXRyYXJpZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklzbGFuZERlbGl2ZXJ5Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJc2xhbmRQaWNrLVVwQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJdGFsaWFuUmVsZWFzZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXRlbVBlcmNlbnRhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikl0ZW0tVW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS2VlcEZyb21GcmVlemluZ1BlcmNlbnREaWZmZXJlbnRpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Iktvc2hlcmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFiZWxBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYmVsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJvckNoYXJnZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm9yQ29zdE9mUmVtb3ZhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFib3JNb2RpZnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm9yTm9Ucm91YmxlRm91bmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm9yT3ZlcnRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm9yUHJlbWl1bU92ZXJ0aW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJvclJlcGFpckFuZFJldHVybk9yZGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFib3JTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJvclN0cmFpZ2h0LXRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm9yVGVzdEFuZENhbGlicmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFkaW5nQWRqdXN0bWVudENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFuZEN1cnJlbmN5QWRqdXN0bWVudEZhY3Rvci0yMEZvb3RDb250YWluZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhbmRDdXJyZW5jeUFkanVzdG1lbnRGYWN0b3ItNDBGb290Q29udGFpbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXNoaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXRlT3JkZXJDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhdGVQYXltZW50Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXlvdXREZXNpZ24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxheW92ZXJDaGFyZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWFkRmFjdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWFraW5nVW5kZXJncm91bmRTdG9yYWdlVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWFzZVNob3J0ZmFsbENvbnNpZGVyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxlc3NUaGFuQ29udGFpbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZXNzVGhhblRydWNrbG9hZENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGV0dGVyT2ZDcmVkaXRQcm9jZXNzaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWNlbnNlQW5kVGl0bGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpZmVsaW5lU3VyY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWZ0R2F0ZVRydWNrT3JGb3JrbGlmdFNlcnZpY2VBdFBpY2stdXBEZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGltZUZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGluZUl0ZW1BbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpbmVJdGVtQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaW5laGF1bEZyb21Qb3J0T2ZEZWJhcmthdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGluZWhhdWxQZXJjZW50RGlmZmVyZW50aWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaW5laGF1bFRvUG9ydE9mRW1iYXJrYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpbmVyVGVybXNBdFBvcnRPZkRlYmFya2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaW5lclRlcm1zQXRQb3J0T2ZFbWJhcmthdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlxdWlkYXRlZERhbWFnZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpcXVpZGF0aW9uQW50aS1EdW1waW5nRHV0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlxdWlkYXRpb25Db3VudGVydmFpbGluZ0R1dHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpcXVpZGF0aW9uVGF4QW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaXF1aWRhdGlvblRvdGFsRHVlVVNDdXN0b21zU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlxdWlkYXRpb25Ub3RhbEZlZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYWRpbmdMYWJvckNoYXJnZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYWRXZWlnaGluZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hbkZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYWxEZWxpdmVyeURyYXlhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY29tb3RpdmVEZWxheWVkSW5Td2l0Y2hpbmdTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NvbW90aXZlVW5kZXJPd25Qb3dlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG90Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3R0ZXJ5Q2hhcmdlQmFjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG90dGVyeUNyb3NzUmVkZWVtZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxvdy1UaWVyTG90dGVyeUNhc2hpbmdCb251cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG93LVRpZXJMb3R0ZXJ5V2lubmVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTHVtcFN1bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFjaGluaW5nQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWlsRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWlsaW5nLVBvc3RhZ2VDb3N0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWlsaW5nLVNlcnZpY2VGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haWxJbnZvaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWlsSW52b2ljZVRvRWFjaExvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW5pZmVzdENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFudWZhY3R1cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFya2V0RGV2ZWxvcG1lbnRGdW5kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFya2luZ09yVGFnZ2luZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFycmlhZ2VSdWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXhpbXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZW1vUmV0dXJuYWJsZUNvbnRhaW5lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVyY2hhbmRpc2VQcm9jZXNzaW5nRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXNzYWdlQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXNzYWdlUmF0ZUFkanVzdG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lc3NlbmdlclNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1ldGFsc1N1cmNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWV0ZXJDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pZC1UaWVyTG90dGVyeUNhc2hpbmdCb251cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlkLVRpZXJMb3R0ZXJ5V2lubmVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlsZWFnZUZlZUZvclJlcGFpckFuZFJldHVybiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlsZWFnZU9yVHJhdmVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaW51cy1BbW91bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbnVzLVBlcmNlbnRhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vZGlmaWVkQXRtb3NwaGVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9udGhseVJlbnRhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW91bnREZW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3VudGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTXVuaWNpcGFsU3VyY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNdXNocm9vbUZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV3RGlzY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld0Rpc3RyaWJ1dGlvbkFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV3SXRlbUFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV3U3RvcmVBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld1N0b3JlRGlzY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld1dhcmVob3VzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV3V2FyZWhvdXNlRGlzY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld1lvcmtEZWxpdmVyeUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV3WW9ya1BpY2stdXBDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5IRFdoYXJmYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb0FsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9BbGxvd2FuY2VPckNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9DaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbi1EdXRpYWJsZUNoYXJnZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbkdlbmVyYXRlZEZyZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbi1yZXR1cm5hYmxlQ29udGFpbmVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9SZXR1cm5DcmVkaXRBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vcm1hbFB1bXBDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdGFyaXplZEFmZmlkYXZpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90aWZ5Q29uc2lnbmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RpZnlDb25zaWduZWVCZWZvcmVEZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm96emxlQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPY2VhbkNoYXJnZXMtSGF6YXJkb3VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPY2VhbkZyZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZmljZVN1cHBsaWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZzaG9yZS1BbGFza2FIYXdhaWkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9uQ2FycmlhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9uRGVja0JyZWFrQnVsa0RpZmZlcmVudGlhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25lLURheVNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9uZVRpbWVFbmdpbmVlcmluZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25lLVRpbWVMaWNlbnNlRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbmUtVGltZS1Pbmx5Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbmV0aW1lVG9vbGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25IYW5kU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3BlcmF0b3JDcmVkaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wdGlvbmFsQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcHRpb25hbFNvZnR3YXJlU3VwcG9ydEZvck9wZXJhdGlvbmFsU3VwcG9ydFN5c3RlbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wdGlvbmFsU29mdHdhcmVTdXBwb3J0Rm9yU3dpdGNoaW5nU3lzdGVtcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3B0aW9uQ2hhcmdlQ29sb3JGYWJyaWNPZmZpY2VGdXJuaXR1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yZGVyLUZsYXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yZGVyTm90aWZ5Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlckFjY2Vzc29yaWFsU2VydmljZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXJBZHZhbmNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXJFeHBvcnRDaGFyZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlckdvdmVybm1lbnRBZ2VuY3lEZWNsYXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXJHb3Zlcm5tZW50QWdlbmN5RXhhbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXJJbXBvcnRDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyTWlzY2VsbGFuZW91c0Vhcm5pbmdPckFkZGl0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlclNlZVJlbGF0ZWREZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0T2ZSb3V0ZU1pbGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdXRPZlpvbmVQaWNrLXVwT3JEZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0c2lkZUNhYmxlQ29ubmVjdG9ycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3ZlckRpbWVuc2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3ZlckhlaWdodENvbnRhaW5lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3ZlcnJ1bkNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3ZlcnNpemVkUHJlbWl1bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3ZlcnRpbWVMb2FkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdmVyV2lkdGhDb250YWluZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhY2thZ2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFja2FnaW5nU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFja2luZ0NyYXRpbmdBbmRIYW5kbGluZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFja2luZ0NyYXRpbmdIYW5kbGluZ0FuZFRyYW5zcG9ydGF0aW9uQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNrSW52b2ljZVdpdGhTaGlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFpbnRpbmdQcmltZXJPckZpbmlzaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFsbGV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWxsZXRFeGNoYW5nZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFsbGV0aXppbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcmFsbGVsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJpc2hDb3VudHlTYWxlc1RheE9ubHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhc3NpbmdTaGlwcGVyc0V4cG9ydEVudHJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXlyb2xsQWRkaXRpdmVzT3ZlcnRpbWVMYWJvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5cm9sbEFkZGl0aXZlc1N0cmFpZ2h0VGltZUxhYm9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXlyb2xsVGF4ZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlY2FuRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZW5hbHR5Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJjZW50RGlmZmVyZW50aWFsLUxlc3NUaGFuQ29udGFpbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJjZW50T2ZQcm9kdWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJjZW50T2ZTaGlwbWVudFZhbHVlVGhhdElzUmV0dXJuYWJsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyY2VudE9mU2hpcHBlZFF1YW50aXR5VGhhdElzUmV0dXJuYWJsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyZm9ybWFuY2VBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcmZvcm1hbmNlQXdhcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlckl0ZW1DaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcm1pdENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVybWl0c0JvbmRzRXNjb3J0QXR0ZW5kYW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJPcmRlckNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyUG91bmRDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcnNvbmFsUHJvcGVydHlNZW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcnNvbmFsUHJvcGVydHlTcG91c2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBob3NwaGF0aXppbmdTdGVlbFRyZWF0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlja2xlQW5kT2lsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWNrVXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpY2stdXBBbmREZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlja3VwLU91dE9mQXJlYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlja3VwU3VyY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWVyQ2hhcmdlc090aGVyVGhhbldoYXJmYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWVyQ2hhcmdlcy1XaGFyZmFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGllclBpY2stdXBBbmRPckRlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWVyVW5sb2FkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWxvdEluc3BlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYWNlbWVudEFuZE9yUmVtb3ZhbENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhdGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGx1cy1BbW91bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsdXMtUGVyY2VudGFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGx1c09yTWludXMtQW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbHVzT3JNaW51cy1QZXJjZW50YWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb2xlTGFzaGluZ0VxdWlwbWVudFN1cmNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9sZVdvb2QtU2VydmljZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9ya0ZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9ydENoYW5nZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvcnRIYW5kbGluZ0FuZFVubG9hZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9zaXRpb25pbmdBdE9yaWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9zdGFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9zdERhbWFnZWRIYW5kbGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG90YXRvRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3dlckZhY3RvckFkanVzdG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZS1jYXJyaWFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlLWNhcnJpYWdlRXhjZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVjaW91c01ldGFsQ29udGVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlbG9hZGluZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlbG9kZ2VDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZW1pc2VVc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZW1pdW1DaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZW1pdW1UcmFuc3BvcnRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlcGFpZFVzYWdlQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVwYXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlcGFyYXRpb25BbmREZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlcGFyYXRpb25PZkFpcldheWJpbGwtT3JpZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVwYXJhdGlvbk9mQ2FuYWRpYW5DdXN0b21zSW52b2ljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlcGFyYXRpb25PZkNvbW1lcmNpYWxJbnZvaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVwYXJhdGlvbk9mRXhwb3J0RW50cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXBhcmF0aW9uT2ZJbnN1cmFuY2VDZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlcGFyYXRpb25PZlVTRXhwb3J0RG9jdW1lbnRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlLVBvc2l0aW9uZWRJbnZlbnRvcnlTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c0JpbGxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaWNlQWRqdXN0bWVudFBlcmNlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaWNlQW5kTWFya2V0aW5nQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmljZURldmlhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JCYWxhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvckJpbGxpbmdBbW91bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW9yRGVsaXZlcnlPZkJpbGxDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW9yaXR5U2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JNb250aENyZWRpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpdmF0ZU93bmVkVmVoaWNsZVByb2Nlc3NpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2Nlc3NpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2Nlc3NpbmdDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2Nlc3NJblRyYW5zaXRQcml2aWxlZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2N1cmVtZW50Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9mZXNzaW9uYWxGZWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9mb3JtYUludm9pY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2dyZXNzUGF5bWVudFJlcXVpcmVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9tb3Rpb25hbEFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbW90aW9uYWxEaXNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvb2ZDb21wb3NpdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvb2ZPZkRlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm90ZWN0aXZlU2VydmljZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvdGVjdGl2ZVNlcnZpY2UtQ29sZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvdGVjdGl2ZVNlcnZpY2UtSGVhdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvdmlkZUhvdXNlaG9sZElkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3ZpZGVOYW1lQW5kQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVsbGluZ0V5ZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1bXBBaXJDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1bXBDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlT3B0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eURpc2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eVN1cmNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbGhlYWRIYW5kbGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFtcGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmF0ZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhdGVSZWR1Y3Rpb25Cb25kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWJhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlLUJpbGxDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYmlsbGVkRHJheWFnZS1EZXN0aW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmViaWxsZWREcmF5YWdlLU9yaWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNpcGllbnRBZGRyZXNzQ29ycmVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjbGFtYXRpb25DZW50ZXJIYW5kbGluZ0NodXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNsYW1hdGlvbkZlZGVyYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2xhbWF0aW9uU2hhcmVkUmVzcG9uc2liaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2xhbWF0aW9uU3RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY29uY2lsaWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNvbm5lY3RjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY29uc2lnbkNvbnNpZ25lZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjb25zaWduRGVsaXZlcnlDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY29uc2lnbm1lbnRDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY29vcGVyaW5nQXRPd25lcnNPclNoaXBwZXJzRXhwZW5zZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjb3JkRmlsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNvdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjb3ZlcnlGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY3JhdGluZ1JlY29vcGVyaW5nLURlc3RpbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNyYXRpbmdSZWNvb3BlcmluZy1PcmlnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY3VycmluZ0hhcmR3YXJlTWFpbnRlbmFuY2VDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY3VycmluZ0xpY2Vuc2VGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY3VycmluZ1NvZnR3YXJlTWFpbnRlbmFuY2VDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZGlzdHJpYnV0aW9uQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWR1Y3Rpb25QcmVwYWxsZXRpemVkQ2FyZ28iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZWZlckNhcmdvUGVyY2VudERpZmZlcmVudGlhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVlZmVyTWFpbnRlbmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZWxDYWJsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVlbERlcG9zaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZnJpZ2VyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZnJpZ2VyYXRpb25NZWNoYW5pY2FsRGV0ZW50aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZ1bmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZnVyYmlzaGluZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnYWluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RyYXRpb25PZkV4cG9ydEZvclJlZW50cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2lzdHJhdGlvbk9mRXhwb3J0U2hpcG1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWd1bGF0b3J5RmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWd1bGF0b3J5UmVxdWlyZWRSZWZ1bmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGlhYmlsaXR5Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxpbnF1aXNobWVudENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsaXF1aWRhdGlvbkFudGktRHVtcGluZ0R1dHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGlxdWlkYXRpb25Db3VudGVydmFpbGluZ0R1dHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGlxdWlkYXRpb25UYXhBbW91bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGlxdWlkYXRpb25Ub3RhbER1ZVVTQ3VzdG9tc1NlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGlxdWlkYXRpb25Ub3RhbEZlZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbnRhbENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVudGFsRGVkdWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZW50c0FuZExlYXNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwYWNrQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBhaXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGFpckF0QnV5ZXJzRXhwZW5zZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwYWlyQXRDdXN0b21lckV4cGVuc2VDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGFpckF0R292ZXJubWVudEV4cGVuc2VDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGlja3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1ZXN0VmlhQ2FuYWRhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNlYXJjaERldmVsb3BtZW50RmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNlbGxlcnNEaXNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzaWRlbnRpYWxEZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzaWRlbnRpYWxQaWNrLXVwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNwb3R0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXN0b2NraW5nQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXN0cmljdGVkQXJ0aWNsZUZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0YWluZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldHVybmFibGVDb250YWluZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldHVybkNhcmdvQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXR1cm5lZExvYWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJld29yayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmlkaW5nQXR0ZW5kYW50Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb2NreU1vdW50YWluQnVyZWF1NTgzSXRlbTExMDBBcmJpdHJhcnlDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvbGxPdXRBZGp1c3RtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb2xsUmViYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb3lhbHRpZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbHZhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbWUtRGF5U2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2F0dXJkYXlEZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2F0dXJkYXlQaWNrLVVwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYXR1cmRheVBpY2stdXBPckRlbGl2ZXJ5Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTY2FsZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2NhbGVDaGFyZ2VVbmxvYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjcmFwQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWN1cml0eVNpZ25hdHVyZVNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlZ3JlZ2F0aW5nU29ydGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VsZWN0Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxmVW5sb2FkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGxlckhhbmRDYXJyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZUFzc2lzdGFuY2VQcm9ncmFtU3VyY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlQ2hhcmdlV2l0aENhc2hEaXNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZVVwZ3JhZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNldC11cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hlYXJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoZWVwRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwcGVyTG9hZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBlckxvYWRBbmRDb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBlckxvYWRDYXJyaWVyQ291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwZXJMb2FkQ29uc2lnbmVlVW5sb2FkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwcGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBpbmdBbmRIYW5kbGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHNpZGVQaWNrdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBUb1N0b2NrUXVhbGl0eUF1ZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaG90Ymxhc3RpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNocmlua2FnZUFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hyaW5rQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaHJpbmstV3JhcENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2luZ2xlRmFjdG9yT3JpZ2luYXRpb25EZXN0aW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2luZ2xlRmFjdG9yT3JpZ2luYXRpb25Qb3J0T2ZEZWJhcmthdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2luZ2xlRmFjdG9yUG9ydE9mRW1iYXJrYXRpb25EZXN0aW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2luZ2xlSW52b2ljZUFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2luZ2xlUGljay11cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2luZ2xlU2hpcG1lbnRGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNsZWV2aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbGlwU2hlZXRSYWlsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbGlwU2hlZXRUcnVjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2xpcFNoZWV0VW5sb2FkaW5nQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbG90dGluZ0FsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU21hbGxPcmRlckNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29mdHdhcmVTdXBwb3J0U2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU291cmNlSW5zcGVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbEFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbEJ1eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbENpcmN1c1RyYWlucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbENyZWRpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbERlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsRGV0ZW50aW9uQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsRXF1aXBtZW50Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsRmluaXNoQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsRnJlaWdodFN1cHBsZW1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsSGFuZGxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxNaWxlYWdlTW92ZW1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsUGFja2FnaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsUGVybWl0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbFBpY2t1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbFB1bXBDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxTZWFsQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxUZXN0RXF1aXBtZW50Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsVG9vbGluZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbFRvb2xpbmdyZXdvcmtjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxUcmFpbk1vdmVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsVXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsVmVoaWNsZVJlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpZmljYXRpb25SZXZpZXciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpZmljRHV0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BsaXREZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BsaXRQaWNrLXVwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGxpdFBpY2stVXBBdFBpZXJDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwb29sQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcG90dGluZ09mVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3ByZWFkZXJDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YW1wRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFtcGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhbmRieUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVNZXRyb3BvbGl0YW5UcmFuc2l0QXV0aG9yaXR5U3VyY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZU1vdG9yRnVlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVTYWxlc0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVTdXJjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0ZWFtaW5nQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGVuY2lsaW5nQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9wY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9wLW9mZkF0RGVzdGluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b3Atb2ZmQXRPcmlnaW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvcC1vZmZBdFBpZXJDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b3Atb2ZmQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9wcGluZ0luVHJhbnNpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvcmFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvcmFnZUluVHJhbnNpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RyYWlnaHRlbmluZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RyYXBwaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdHJlZXRMYW1wc0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RyaXBwaW5nU29ydGluZ0FuZENvbnNvbGlkYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0dWZmaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdHVmZmluZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3ViamVjdFRvQ29vcGVyYXRpdmVBZHZlcnRpc2luZ0FsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3ViamVjdFRvVGF4T25SZXNhbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1ZmZlcmFuY2VXYXJlaG91c2VDaGFyZ2VFeHBvcnRPckltcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VnYXJGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1bU9mQWRkc0FuZERlZHVjdHNUb01ha2VNYXJrZXRWYWx1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VuZGF5T3JIb2xpZGF5UGljay11cE9yRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cGVyQmFnQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBlcnZpc29yQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbGVtZW50YWxEdXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbGVtZW50YWxJdGVtcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VyY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJldHlCb25kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTd2VsbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3dpdGNoQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTd2l0Y2hpbmdDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhbmtDYXJBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhbmtSZW50YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhcnBpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4LUFpcnBvcnRUYXhEZXN0aW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4LUFpcnBvcnRUYXhPcmlnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheC1CZXZlcmFnZVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4LUNpdHlTYWxlc1RheE9ubHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheENyZWRpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4LUV4Y2lzZVRheC1EZXN0aW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4LUV4Y2lzZVRheC1PcmlnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheC1GZWRlcmFsRXhjaXNlVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXgtRmVkZXJhbEV4Y2lzZVRheE9uVGlyZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheC1Hb3Zlcm5tZW50YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheC1IYW5kbGluZ0NoYXJnZVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4TGlhYmlsaXR5LUFtb3J0aXplZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4TGlhYmlsaXR5LU9uZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheC1Mb2NhbFNhbGVzVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXgtTG9jYWxUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheC1NZXRyb3BvbGl0YW5UcmFuc2l0VGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhPbk1pc2NlbGxhbmVvdXNDaGFyZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhPblRyYW5zcG9ydGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXgtUmVndWxhdG9yeVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4LVNhbGVzYW5kVXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXgtU2FsZXNUYXhTdGF0ZUFuZExvY2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXgtU3RhdGVIYXphcmRvdXNTdWJzdGFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheC1TdGF0ZVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4LVN1cGVyRnVuZEV4Y2lzZVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4LVVzZVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4LVZhbHVlQWRkZWRUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlYUZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVjaG5vbG9neUV4Y2hhbmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWxlZ3JhbUNoYXJnZWJhY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbGVwaG9uZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVsZXBob25lLURlc3RpbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWxlcGhvbmUtT3JpZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZW1wZXJhdHVyZVByb3RlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbXBvcmFyeUFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVtcG9yYXJ5Vm9sdW50YXJ5QWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZW5kZXJlZEFzVHJ1Y2tsb2FkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXJtaW5hbENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVybWluYWxEaWZmZXJlbnRpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcm1pbmFsSGFuZGxpbmdDaGFyZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXJtaW5hbFNlcnZpY2VGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcm1zQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXN0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXN0aW5nU2VydmljZXNDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlc3RRdWFsaWZpY2F0aW9uQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaGlyZFBhcnR5QWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaGlyZFBhcnR5UGFsbGV0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhyb3VnaHB1dEFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhyb3VnaHB1dENvbnRhaW5lckNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhydXdheUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGlja2V0aW5nU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG9iYWNjb1Byb2R1Y3RzUmVwb3J0Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUT0ZDU2VydmljZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG9vbENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG9vbGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG9vbGluZ1Jld29ya0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG9vbHNGb3JQcmludGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxBc3Nlc3NvcmlhbENoYXJnZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsRHVlVVNDdXN0b21zU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxGZWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbEludm9pY2VBbW91bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsSW52b2ljZUFtb3VudE5vbi1VU0RvbGxhcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsSW52b2ljZUFtb3VudFVTRG9sbGFycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxNYXRlcmlhbEludm9pY2VBbW91bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWNpbmdJbmJvdW5kVmlhT3RoZXJDYXJyaWVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhY2luZ1NlcnZpY2VGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWNrU3RvcmFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhZGVEaXNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhZGVJbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaWxlclJlbnRhbENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNmZXJDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zZmVyT2ZMYWRpbmdDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zZmVycmVkQ2hhcmdlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNtaXNzaW9uQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRhdGlvbkFuZFNldHVwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRhdGlvbkNoYXJnZU1pbmltdW1SYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRhdGlvbkRpcmVjdEJpbGxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydGF0aW9uVGhpcmRQYXJ0eUJpbGxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydGF0aW9uVmVuZG9yUHJvdmlkZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyaW1taW5nQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcnVja0RldGVudGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1Y2tsb2FkRGlzY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR1cm5pbmdDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR3by1EYXlTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUd29Eb29yUGlja1VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmFic29yYmVkU3dpdGNoaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0aXplZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5sb2FkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmxvYWRpbmdMYWJvckNoYXJnZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVubG9hZGluZ1JlbG9hZGluZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5zYWxlYWJsZU1lcmNoYW5kaXNlQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbnNjaGVkdWxlZEZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVXBDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVzYWdlUGxhbkRldGFpbENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNDdXN0b21zU2VydmljZUZsYXRBc3Npc3RBbW91bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTQ3VzdG9tc1NlcnZpY2VNYXhpbXVtQXNzaXN0QW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVU0RBSW5zcGVjdGVkU3RhbXBpbmdDZXJ0aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVc2VDaGFyZ2VUb29saW5nUGVyc29ubmVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVc2UtU3BlY2lhbFR5cGVGbGF0Q2FyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVU1ZlaGljbGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYWx1YXRpb25GZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhbkNsZWFuaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZWhpY2xlT3JkZXJlZEJ1dE5vdFVzZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlaGljbGVQcmVwQ2hhcmdlQ291cnRlc3lEZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVoaWNsZVJvYWRDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlbmRvckZyZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlbnRpbmdJbnN0cnVjdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZpcmdpbklzbGFuZFRyYW5zZmVyQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWb2x1bWVEaXNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVm9sdW50YXJ5Q29udHJpYnV0aW9uQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYWl0aW5nVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FyZWhvdXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJlaG91c2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FycmFudGllcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FyUmlza0NyZXdJbnN1cmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhclJpc2tJbnN1cmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhclJpc2tTdXJjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ildhc3RlZEZ1dGlsZVRyaXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhdGVybWVsb25GZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldheWJpbGxBbmRJbnZvaWNlRGlzdHJpYnV0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWF0aGVyUHJvdGVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2VpZ2h0VmVyaWZpY2F0aW9uQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaGFyZmFnZS1CcmVha2J1bGsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldoYXJmYWdlQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaGFyZmFnZS1Db250YWluZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldoYXJmYWdlSGFuZGxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldpZGVBcmVhVGVsZXBob25lU2VydmljZVVzYWdlQ3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaWxsQ2FsbENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV3JpdHRlblByb29mT2ZEZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWC1yYXlDaGFyZ2UiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkJhc2lzTW9uZXRhcnlSYW5nZSI+Ci0gICAgICAgIDx4c2Q6Y2hvaWNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTW9uZXRhcnlSYW5nZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTW9uZXRhcnlMaW1pdCIvPgotICAgICAgICA8L3hzZDpjaG9pY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IkJhc2lzTW9uZXRhcnlSYW5nZSIgdHlwZT0iQmFzaXNNb25ldGFyeVJhbmdlIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNb25ldGFyeVJhbmdlIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNaW5pbXVtTW9uZXRhcnlWYWx1ZSIgdHlwZT0iRGVjaW1hbDIxXzYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYXhpbXVtTW9uZXRhcnlWYWx1ZSIgdHlwZT0iRGVjaW1hbDIxXzYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IkN1cnJlbmN5Ii8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNb25ldGFyeVJhbmdlIiB0eXBlPSJNb25ldGFyeVJhbmdlIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJNb25ldGFyeUxpbWl0Ij4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNb25ldGFyeUxpbWl0VmFsdWUiIHR5cGU9IkRlY2ltYWwyMV82Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJDdXJyZW5jeSIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iU2lnbmlmaWNhbmNlQ29kZWQiIHR5cGU9IlNpZ25pZmljYW5jZUNvZGUiIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iU2lnbmlmaWNhbmNlQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNb25ldGFyeUxpbWl0IiB0eXBlPSJNb25ldGFyeUxpbWl0Ii8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJUeXBlT2ZBbGxvd2FuY2VPckNoYXJnZSI+Ci0gICAgICAgIDx4c2Q6Y2hvaWNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUXVhbnRpdHlBbGxvd2FuY2VPckNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUGVyY2VudGFnZUFsbG93YW5jZU9yQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJNb25ldGFyeVZhbHVlIi8+Ci0gICAgICAgIDwveHNkOmNob2ljZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVHlwZU9mQWxsb3dhbmNlT3JDaGFyZ2UiIHR5cGU9IlR5cGVPZkFsbG93YW5jZU9yQ2hhcmdlIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJRdWFudGl0eUFsbG93YW5jZU9yQ2hhcmdlIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJSYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJRdWFudGl0eU1vbmV0YXJ5VmFsdWUiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJNb25ldGFyeVZhbHVlIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlF1YW50aXR5QWxsb3dhbmNlT3JDaGFyZ2UiIHR5cGU9IlF1YW50aXR5QWxsb3dhbmNlT3JDaGFyZ2UiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlJhdGUiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJhdGVQZXJVbml0Ij4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iVW5pdFByaWNlIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJVbml0UHJpY2VCYXNpcyIgdHlwZT0iRGVjaW1hbDE4XzMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iVW5pdE9mTWVhc3VyZW1lbnQiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlJhdGUiIHR5cGU9IlJhdGUiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iRGVjaW1hbDE4XzMiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpkZWNpbWFsIj4KLSAgICAgICAgICAgIDx4c2Q6dG90YWxEaWdpdHMgdmFsdWU9IjE4Ii8+Ci0gICAgICAgICAgICA8eHNkOmZyYWN0aW9uRGlnaXRzIHZhbHVlPSIzIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJQZXJjZW50YWdlQWxsb3dhbmNlT3JDaGFyZ2UiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUGVyY2VudFF1YWxpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlBlcmNlbnQiIHR5cGU9IkRlY2ltYWwxMF80Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJQZXJjZW50YWdlTW9uZXRhcnlWYWx1ZSI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ik1vbmV0YXJ5VmFsdWUiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUGVyY2VudGFnZUFsbG93YW5jZU9yQ2hhcmdlIiB0eXBlPSJQZXJjZW50YWdlQWxsb3dhbmNlT3JDaGFyZ2UiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlBlcmNlbnRRdWFsaWZpZXIiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlBlcmNlbnRRdWFsaWZpZXJDb2RlZCIgdHlwZT0iUGVyY2VudFF1YWxpZmllckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlBlcmNlbnRRdWFsaWZpZXJDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQZXJjZW50UXVhbGlmaWVyIiB0eXBlPSJQZXJjZW50UXVhbGlmaWVyIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IlBlcmNlbnRRdWFsaWZpZXJDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXRlbUxpc3RDb3N0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJdGVtTmV0Q29zdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY291bnQtR3Jvc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2NvdW50LU5ldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFzZVByaWNlcGVyVW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFzZVByaWNlQW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXNlUHJpY2VBbW91bnRMZXNzUHJldmlvdXNEaXNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV0TW9udGhseU9uQWxsSW52b2ljZXNQYXN0RHVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXRlUGF5bWVudENoYXJnZUJhc2VBbW91bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1ZWxSYXRlIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJSb3VuZFRyaXBJbmZvcm1hdGlvbiI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJJbW11dGFibGUiIHR5cGU9InhjYmxCb29sZWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJSZUxpbmsiIHR5cGU9InhzZDphbnlVUkkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlN1cHBsaWVyU2hvcHBpbmdDYXJ0SUQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IlJvdW5kVHJpcE9yZGVyIiB0eXBlPSJ4Y2JsQm9vbGVhbiIgZml4ZWQ9InRydWUiLz4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUm91bmRUcmlwSW5mb3JtYXRpb24iIHR5cGU9IlJvdW5kVHJpcEluZm9ybWF0aW9uIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTdHJ1Y3R1cmVkTm90ZSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iU3RydWN0dXJlZE5vdGUiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZlN0cnVjdHVyZWROb3RlIiB0eXBlPSJMaXN0T2ZTdHJ1Y3R1cmVkTm90ZSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iU3RydWN0dXJlZE5vdGUiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iR2VuZXJhbE5vdGUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ik5vdGVJRCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJBZ2VuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ik5vdGVVUkwiIHR5cGU9InhzZDphbnlVUkkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRleHRUeXBlQ29kZWQiIHR5cGU9IlRleHRUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVGV4dFR5cGVDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTdHJ1Y3R1cmVkTm90ZSIgdHlwZT0iU3RydWN0dXJlZE5vdGUiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iVGV4dFR5cGVDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVhZGxpbmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJyYW50aWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZW5hbHR5Rm9yQnJlYWNoT2ZDb250cmFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3VhcmFudGVlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RSaWRlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlckNvbnRyYWN0dWFsU3RpcHVsYXRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmZvUmVjb3JkUE9UZXh0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXRlcmlhbFBPVGV4dCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mTmFtZVZhbHVlU2V0Ij4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJOYW1lVmFsdWVTZXQiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZk5hbWVWYWx1ZVNldCIgdHlwZT0iTGlzdE9mTmFtZVZhbHVlU2V0Ii8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJOYW1lVmFsdWVTZXQiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlNldE5hbWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlNldElEIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJMaXN0T2ZOYW1lVmFsdWVQYWlyIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOYW1lVmFsdWVTZXQiIHR5cGU9Ik5hbWVWYWx1ZVNldCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mTmFtZVZhbHVlUGFpciI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iTmFtZVZhbHVlUGFpciIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mTmFtZVZhbHVlUGFpciIgdHlwZT0iTGlzdE9mTmFtZVZhbHVlUGFpciIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTmFtZVZhbHVlUGFpciI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlZhbHVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJEYXRhdHlwZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmFtZVZhbHVlUGFpciIgdHlwZT0iTmFtZVZhbHVlUGFpciIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQXR0YWNobWVudCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iQXR0YWNobWVudCIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mQXR0YWNobWVudCIgdHlwZT0iTGlzdE9mQXR0YWNobWVudCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQXR0YWNobWVudCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJBdHRhY2htZW50QWN0aW9uQ29kZWQiIHR5cGU9IkF0dGFjaG1lbnRBY3Rpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJBdHRhY2htZW50QWN0aW9uQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkF0dGFjaG1lbnRQdXJwb3NlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJGaWxlTmFtZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQXR0YWNobWVudFRpdGxlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJBdHRhY2htZW50RGVzY3JpcHRpb24iIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iTGFuZ3VhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ik1JTUVUeXBlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJSZXBsYWNlbWVudEZpbGUiIHR5cGU9InhjYmxCb29sZWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQXR0YWNobWVudExvY2F0aW9uIiB0eXBlPSJ4c2Q6YW55VVJJIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJBdHRhY2htZW50IiB0eXBlPSJBdHRhY2htZW50Ii8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkF0dGFjaG1lbnRBY3Rpb25Db2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVcGRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGV0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9DaGFuZ2UiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik9yZGVyRGV0YWlsIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ikxpc3RPZkl0ZW1EZXRhaWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iTGlzdE9mUGFja2FnZURldGFpbCIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iT3JkZXJEZXRhaWwiIHR5cGU9Ik9yZGVyRGV0YWlsIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZJdGVtRGV0YWlsIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJJdGVtRGV0YWlsIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMaXN0T2ZJdGVtRGV0YWlsIiB0eXBlPSJMaXN0T2ZJdGVtRGV0YWlsIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJdGVtRGV0YWlsIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IkJhc2VJdGVtRGV0YWlsIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IlByaWNpbmdEZXRhaWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iRGVsaXZlcnlEZXRhaWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iUm91bmRUcmlwSW5mb3JtYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkxpbmVJdGVtTm90ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJMaXN0T2ZTdHJ1Y3R1cmVkTm90ZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJMaXN0T2ZOYW1lVmFsdWVTZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkxpbmVJdGVtQXR0YWNobWVudHMiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJMaXN0T2ZBdHRhY2htZW50Ii8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikl0ZW1EZXRhaWwiIHR5cGU9Ikl0ZW1EZXRhaWwiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkJhc2VJdGVtRGV0YWlsIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IkxpbmVJdGVtTnVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IkxpbmVJdGVtVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUGFyZW50SXRlbU51bWJlciI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IkxpbmVJdGVtTnVtYmVyUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iSXRlbUlkZW50aWZpZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Ikxpc3RPZkRpbWVuc2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVG90YWxRdWFudGl0eSI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlF1YW50aXR5Ii8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ik1heEJhY2tPcmRlclF1YW50aXR5Ij4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUXVhbnRpdHkiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJMaXN0T2ZRdWFudGl0eUNvZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJPZmZDYXRhbG9nRmxhZyIgdHlwZT0ieGNibEJvb2xlYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iQ2F0YWxvZ1JlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iSXRlbUNvbnRyYWN0UmVmZXJlbmNlcyI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ikxpc3RPZkNvbnRyYWN0SXRlbSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJMaXN0T2ZJdGVtUmVmZXJlbmNlcyI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ikxpc3RPZlJlZmVyZW5jZUNvZGVkIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkNvdW50cnlPZk9yaWdpbiI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IkNvdW50cnkiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQ291bnRyeU9mRGVzdGluYXRpb24iPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJDb3VudHJ5Ii8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkZpbmFsUmVjaXBpZW50Ij4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUGFydHkiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJMaXN0T2ZQYXJ0eUNvZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IkNvbmRpdGlvbnNPZlNhbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkhhemFyZG91c01hdGVyaWFscyI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IkhhemFyZG91cyIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJCYXNlSXRlbURldGFpbCIgdHlwZT0iQmFzZUl0ZW1EZXRhaWwiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkxpbmVJdGVtTnVtIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJCdXllckxpbmVJdGVtTnVtIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTZWxsZXJMaW5lSXRlbU51bSIgdHlwZT0ieHNkOmludCIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGluZUl0ZW1OdW0iIHR5cGU9IkxpbmVJdGVtTnVtIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJMaW5lSXRlbVR5cGUiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkxpbmVJdGVtVHlwZUNvZGVkIiB0eXBlPSJMaW5lSXRlbVR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJMaW5lSXRlbVR5cGVDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMaW5lSXRlbVR5cGUiIHR5cGU9IkxpbmVJdGVtVHlwZSIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJMaW5lSXRlbVR5cGVDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJdGVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wb25lbnRHcm91cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGV4dEl0ZW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJMaW5lSXRlbU51bWJlclJlZmVyZW5jZSI+Ci0gICAgICAgIDx4c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgIDx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDppbnQiPgotICAgICAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkxpbmVJdGVtTnVtVHlwZUNvZGVkIiB0eXBlPSJMaW5lSXRlbU51bVR5cGVDb2RlIiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJCdXllciIvPgotICAgICAgICAgICAgPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMaW5lSXRlbU51bWJlclJlZmVyZW5jZSIgdHlwZT0iTGluZUl0ZW1OdW1iZXJSZWZlcmVuY2UiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iTGluZUl0ZW1OdW1UeXBlQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGxlciIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSXRlbUlkZW50aWZpZXJzIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iUGFydE51bWJlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlNlcnZpY2UiIHR5cGU9InhjYmxCb29sZWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJJdGVtRGVzY3JpcHRpb24iIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iTGlzdE9mSXRlbUNoYXJhY3RlcmlzdGljIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJDb21tb2RpdHlDb2RlIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iSWRlbnRpZmllciIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IkNhdGVnb3J5Ii8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJdGVtSWRlbnRpZmllcnMiIHR5cGU9Ikl0ZW1JZGVudGlmaWVycyIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUGFydE51bWJlcnMiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU2VsbGVyUGFydE51bWJlciI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlBhcnROdW0iLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQnV5ZXJQYXJ0TnVtYmVyIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUGFydE51bSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Ik1hbnVmYWN0dXJlclBhcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlN0YW5kYXJkUGFydE51bWJlciI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlByb2R1Y3RJZGVudGlmaWVyQ29kZWQiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU3Vic3RpdHV0ZVBhcnROdW1iZXJzIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTGlzdE9mUHJvZHVjdElkZW50aWZpZXJDb2RlZCIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJPdGhlckl0ZW1JZGVudGlmaWVycyI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ikxpc3RPZlByb2R1Y3RJZGVudGlmaWVyQ29kZWQiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUGFydE51bWJlcnMiIHR5cGU9IlBhcnROdW1iZXJzIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJQYXJ0TnVtIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQYXJ0SUQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlBhcnRJREV4dCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUmV2aXNpb25OdW1iZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlBhcnROdW0iIHR5cGU9IlBhcnROdW0iLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1hbnVmYWN0dXJlclBhcnROdW1iZXIiPgotICAgICAgICA8eHNkOmNvbXBsZXhDb250ZW50PgotICAgICAgICAgICAgPHhzZDpleHRlbnNpb24gYmFzZT0iUGFydE51bSI+Ci0gICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iTWFudWZhY3R1cmVySUQiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iTWFudWZhY3R1cmVyTmFtZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICA8L3hzZDpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWFudWZhY3R1cmVyUGFydE51bWJlciIgdHlwZT0iTWFudWZhY3R1cmVyUGFydE51bWJlciIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUHJvZHVjdElkZW50aWZpZXJDb2RlZCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUHJvZHVjdElkZW50aWZpZXJRdWFsaWZpZXJDb2RlZCIgdHlwZT0iUHJvZHVjdElkZW50aWZpZXJRdWFsaWZpZXJDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJQcm9kdWN0SWRlbnRpZmllclF1YWxpZmllckNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQcm9kdWN0SWRlbnRpZmllciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUHJvZHVjdElkZW50aWZpZXJFeHQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlByb2R1Y3RJZGVudGlmaWVyQ29kZWQiIHR5cGU9IlByb2R1Y3RJZGVudGlmaWVyQ29kZWQiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iUHJvZHVjdElkZW50aWZpZXJRdWFsaWZpZXJDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkaXRpb25hbFByb2R1Y3RJZGVudGlmaWNhdGlvbkFzc2lnbmVkQnlUaGVNYW51ZmFjdHVyZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmVydGlzaW5nUGFja2FnZUlkZW50aWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ2dyZWdhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpclRyYW5zcG9ydGF0aW9uQXNzb2NpYXRpb25Qcm9wcmlldGFyeVJpZ2h0c0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbG9jYXRpb25NZXRob2RvbG9neUlkZW50aWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWx0ZXJuYXRlSVNCTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1lcmljYW5EZW50YWxBc3NvY2lhdGlvbkNvZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbWVyaWNhblRydWNraW5nQXNzb2NpYXRpb25zQXNzZW1ibHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtZXJpY2FuVHJ1Y2tpbmdBc3NvY2lhdGlvbnNQYXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbWVyaWNhblRydWNraW5nQXNzb2NpYXRpb25zU3lzdGVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbm5pdmVyc2FyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYXRpb25Db21wbGV0aW9uTWV0aG9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhdGlvblN0YXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHByYWlzYWxQcm9kdWN0VHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwcmFpc2FsU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVJOSUNQYXJ0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NlbWJseSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzZW1ibHlMb3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2V0Q2F0ZWdvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2V0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NldFR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc29ydGFiaWxpdHlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3JDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3JpemVkUGFydHNMaXN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRvbWF0aWNUcmFuc21pc3Npb25TZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1eGlsaWFyeVRyYW5zbWlzc2lvblNlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXV4aWxsYXJ5VHJhbnNtaXNzaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBeGxlUmF0aW8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF4bGVTZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhY2tpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhci1Db2RlZFNlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmF0Y2hOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlYW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbmVmaXRJRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmV2ZXJhZ2VDb21tb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsYm9hcmRzQ29tbWVyY2lhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbENyZWRpdENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxTdWJncm91cENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbmRpbmdDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcmFuZE9yTGFiZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyb2tlclByaWNlT3BpbmlvblNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1c0JvZHlTZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyR3JvdW5kU2hhZGVJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllcnNDYXRhbG9nTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllcnNDb2xvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5ZXJzRW5kUHJvZHVjdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5ZXJzRW5naW5lZXJpbmdDaGFuZ2VMZXZlbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5ZXJzSW50ZXJuYWxQcm9kdWN0R3JvdXBDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllcnNJdGVtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllcnNQYXJ0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllcnNRdWFsaWZpZXJGb3JTaXplIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllcnNTaXplQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5ZXJzU3R5bGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyc1N1YmxpbmVJdGVtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDQUdFQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuZGlkYXRlT2lsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJyeS1PdmVyUGFydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2F0YWxvZ051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhbm5lbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhc3Npc1NlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hlbWljYWxBYnN0cmFjdFNlcnZpY2VSZWdpc3RyeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xhc3NpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsYXNzT2ZDb250cmFjdENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNMRUlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2duaXphbmNlU3ltYm9sIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xkUm9sbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29sb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbWJpbmVkTkNDTUFPckJhbmtTZXJ2aWNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWlzc2lvbklkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1pc3Npb25ZZWFyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21taXR0ZWVGb3JVbmlmb3JtU2VjdXJpdHlJZGVudGlmaWNhdGlvblByb2NlZHVyZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbW9kaXR5R3JvdXBpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1vZGl0eU5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1vbkxhbmd1YWdlRXF1aXBtZW50SWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGFueS1Pd25lZFVuaXRUcmFpbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGFueVBhcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBhdGlibGVDdXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBlbnNhdGlvbkFsbG9jYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wZW5zYXRpb25UeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGxldGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uY2VwdENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbmZpZ3VyYXRpb25JdGVtSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ubmVjdG9yVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGludWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdEFjdGl2aXR5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RCcmVha2Rvd24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0Q2hhbmdlQXV0aG9yaXphdGlvblR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdG9yRXN0YWJsaXNobWVudENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0VHJhbnNmZXJSZWFzb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmlidXRpb25ZZWFyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cm9sTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VudHJ5RnJvbVdoaWNoUHJvY3VyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdW50cnlPZk9yaWdpbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdXBvbkZhbWlseUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdXBvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ292ZXJhZ2VSaXNrVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ292ZXJhZ2VUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50UHJvY2VkdXJhbFRlcm1pbm9sb2d5Q29kZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbWVyQ29tcGFueVJlZ2lzdHJ5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lck9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lclByb3ZpZGVkRXF1aXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zQXJ0aWNsZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3V0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRhQ2F0ZWdvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydG1lbnRPZkRlZmVuc2VJZGVudGlmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcG9zaXRJdGVtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXNpZ25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRldmljZUZhbWlseSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGV2aWNlVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlhZ25vc2lzQ29kZVBvaW50ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY29udGludWVkUGFydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY291bnRHcm91cGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpYnV0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpdmlkZW5kVXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudElkZW50aWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJhd2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJhd2luZ1JldmlzaW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcnVnVVBDQ29uc3VtZXJQYWNrYWdlQ29kZTEtNC02LTEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRydWdVUENTaGlwcGluZ0NvbnRhaW5lckNvZGUxLTItNC02LTEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1bkFuZEJyYWRzdHJlZXRTdGFuZGFyZFByb2R1Y3RBbmRTZXJ2aWNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHllTG90TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFQU4yLTUtNS0xIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFQU4tOTlJbi1TdG9yZUNvdXBvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVkaXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmRJdGVtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmQtSXRlbURlc2NyaXB0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmdpbmVEaXNwbGFjZW1lbnRJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5naW5lZXJpbmdDaGFuZ2VMZXZlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5naW5lZXJpbmdEYXRhTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5naW5lU2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVpcG1lbnRDb2RlUGVyQ09QQVNTdGFuZGFyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50SGllcmFyY2hpY2FsU2VxdWVuY2VJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVpcG1lbnRJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50TG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWlwbWVudFR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV2ZW50VHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhjaGFuZ2VkUGFydE9yQXNzZW1ibHlPclByb2R1Y3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4aGliaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4aGliaXRJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGhpYml0TGluZUl0ZW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGVuZGFibGVDb250YWluZXJJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwZW5zZUlkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZBQVNlcnZpY2VCdWxsZXRpbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFicmljUGllY2VzUGVyUm9sbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFpbGVkU3ViYXNzZW1ibHlNb2RlbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFpbGVkU3ViYXNzZW1ibHlTZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhbm5pZU1hZUFmZm9yZGFibGVMZW5kaW5nUHJvZHVjdENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhbm5pZU1hZVByb2plY3RDb25kb21pbml1bUNsYXNzaWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVhdHVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbFN1cHBseUNsYXNzaWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaWZ0aFdoZWVsU2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbFRlc3RMb3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFuY2lhbFBoYXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5pc2hMb3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmlzaE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluaXNoT3JIYW5kU3RhbmRhcmRSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpcmVQdW1wIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdFByaW9ySWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9ybWVyUHVibGlzaGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVkZGllTWFjQWZmb3JkYWJsZUxlbmRpbmdQcm9kdWN0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZGRpZU1hY1Byb2plY3RDb25kb21pbml1bUNsYXNzaWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJvbnRBeGxlLVJlYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyb250QXhsZURyaXZlblNlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJvbnRBeGxlTm9uRHJpdmVuU2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcm9udEF4bGVTZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1ZWxUYW5rU2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdW5kQWJicmV2aWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdW5kTWFuYWdlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnVuZFN1Yi1BZHZpc29yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdW5kVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0FTRkxPV0ludm9pY2VQb3N0aW5nQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0FTRkxPV1Byb2R1Y3RvclNlcnZpY2VDaGFyZ2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXRoZXJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdlYXJSYXRpbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VuZXJhbFNwZWNpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdlbmVyaWNOYW1lRGVzY3JpcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdsaWRlcktpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JhZGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmFkZU5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdyYWluRGlyZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmFwaGljc0luZHVzdHJ5QmFyQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JvdW5kU2hhZGVTdGFuZGFyZFJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JvdXBJRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JvdXBRdWFsaWZpZXJDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHVElOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYXJtb25pc2VkU3lzdGVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIQ1BDUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSElCQy1IZWFsdGhJbmR1c3RyeUJhckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhJQkNTdXBwbGllckxhYmVsaW5nU3RhbmRhcmRQcmltYXJ5RGF0YU1lc3NhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhJRUNQcm9kdWN0T3JTZXJ2aWNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG90Um9sbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSUNELTktQ00tUHJvY2VkdXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJZ25pdGlvbktleU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW1wcmludC1UcmFkZW1hcmtDb2RlT2ZTdWJzaWRpYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmR1c3RyeUNvbW1vZGl0eUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZm9ybWF0aW9uTWVkaWFUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmdyZWRpZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmFuY2VQbGFuRGVzY3JpcHRpb25DaGFyYWN0ZXJpc3RpY3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyZXJzRnVuZENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVyY2hhbmdlYWJpbGl0eUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVyaW9yQ29sb3JOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm5hdGlvbmFsQXJ0aWNsZU51bWJlcmluZ0Fzc29jaWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJQ0QtOS1DTS1EaWFnbm9zaXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmF0aW9uYWxIYXJtb25pemVkQ29tbW9kaXR5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJuYXRpb25hbFN0YW5kYXJkQm9va051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52ZXN0bWVudEZ1bmRUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJUlNRdWFsaWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVNCTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVNTTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXRlbU1hbmFnZW1lbnRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJdGVtVHlwZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSm9iTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKb2JTZXF1ZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSm9pbnRMaWZlVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSnVyaXNkaWN0aW9uU3BlY2lmaWNQcm9jZWR1cmVBbmRTdXBwbHlDb2RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS2FuYmFuUGxhbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFib3JhdG9yeVNhbXBsZUlkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJvcmF0b3J5VGVzdENvbmRpdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm9yR3JvdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlYXNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWJyYXJ5T2ZDb25ncmVzc0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpZmVPckFubnVpdHlQcm9kdWN0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlmZU9yQW5udWl0eVNlcnZpY2VGZWF0dXJlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlmdEdhdGVTZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpbmVPZkF1dGhvcml0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGluZU9mQnVzaW5lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYWRTZXF1ZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYWxseUFzc2lnbmVkQ29udHJvbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYWxTdG9ja051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMT0lOQ0NvZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvdFByaWNpbmdVbml0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWNoaW5lTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWludGVuYW5jZUluZGV4UGFnZVJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFqb3JQcm9kdWN0T3JNYXRlcmlhbE9yTWFjaGluZVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbnVhbFRyYW5zbWlzc2lvblNlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFudWZhY3R1cmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW51ZmFjdHVyZXJzQXJ0aWNsZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFudWZhY3R1cmVyc1BhcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcmtldFByb2dyYW1Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXRlcmlhbENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFsQ29udHJvbENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFsRGlzY2hhcmdlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWFzdXJlbWVudFR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FsSW5mb3JtYXRpb25CdXJlYXVBdXRob3JpemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FsU3RvcExvc3NDb3ZlcmFnZUNvZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FsU3RvcExvc3NMZXZlbENvZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FsU3RvcExvc3NQcm9kdWN0TGluZUNvZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUVNQVByb2R1Y3RUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWV0aG9kT2ZEZWxpdmVyeUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbGVzdG9uZUV2ZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaWxpdGFyeVN0YW5kYXJkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNSUxTUEVDTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb2RlbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9ydGdhZ2VDcmVkaXREYXRhT3JkZXJUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3J0Z2FnZUluc3VyYW5jZVByb2R1Y3RDb2RlT3JOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vcnRnYWdlUHJvZHVjdENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vcnRnYWdlVW5kZXJ3cml0aW5nVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW90b3JWZWhpY2xlSWROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vdG9yVmVoaWNsZS1MaW5lRGVzaWduYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW92ZW1lbnRUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxEcnVnQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxEcnVnQ29kZTQtNC0yRm9ybWF0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbERydWdDb2RlNS0zLTJGb3JtYXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsRHJ1Z0NvZGU1LTQtMUZvcm1hdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxEcnVnQ29kZTUtNC0yRm9ybWF0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbEhlYWx0aFJlbGF0ZWRJdGVtQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxIZWFsdGhSZWxhdGVkSXRlbUNvZGVJbjQtNkZvcm1hdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxIZWFsdGhSZWxhdGVkSXRlbUNvZGVJbjUtNUZvcm1hdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxQcm9kdWN0R3JvdXBDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbFJldGFpbEZlZGVyYXRpb25Db2xvckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsUmV0YWlsRmVkZXJhdGlvblNpemVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbFN0b2NrTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOREMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld01pY3JvY29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV3UmVwbGFjZW1lbnRQYXJ0T3JBc3NlbWJseURlZmVjdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV4dEhpZ2hlckFzc2VtYmx5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXh0SGlnaGVyVXNlZEFzc2VtYmx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25mb3JmZWl0dXJlT3B0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tUmVzYWxlYWJsZUl0ZW1FeGNsdWRpbmdEZXBvc2l0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOU04tTm9ydGhBdGxhbnRpY1RyZWF0eU9yZ2FuaXphdGlvblN0b2NrTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOVUJDVUI4MkNvZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOVUJDVUI5MkNvZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlBvc2l0aW9uc09uTWFjaGluZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2JsaWdhdGlvbkF1dGhvcml0eU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2Jzb2xldGVQYXJ0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2xkTWljcm9jb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbGRVUENPckVBTkNhc2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbGRVUENPckVBTkNvbnN1bWVyUGFja2FnZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9sZFVQQ09yRUFOTW9kdWxlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2xkVVBDT3JFQU5NdWx0aXBhY2tDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVyYXRvckFzc2lnbmVkUHJvcGVydHlJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3Bwb3NpdGUtSGFuZFBhcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wdGljYWxDYWJsZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wdGljYWxJbmR1c3RyeVByb2R1Y3RDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbEVxdWlwbWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0c2lkZVByb2R1Y3Rpb25PcGVyYXRpb25TaGVldE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFja2FnZVR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNrYWdpbmdEcmF3aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNrYWdpbmdTcGVjaWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNrTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0RHJhd2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydE51bWJlckRlc2NyaXB0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXR0ZXJuTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQQVNDQ0VDLUdvb2RzQW5kU2VydmljZXNUYXhGb3J3YXJkZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBBU0NDRUMtR29vZHNBbmRTZXJ2aWNlc1RheE5vdEFwcGxpY2FibGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBBU0MtTm9uVHVidWxhckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBBU0NPTUMtR29vZHNBbmRTZXJ2aWNlc1RheEZvcndhcmRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUEFTQ09NQy1Hb29kc0FuZFNlcnZpY2VzVGF4Tm90QXBwbGljYWJsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGV0cm9sZXVtQWNjb3VudGFudHNTb2NpZXR5T2ZDYW5hZGFUdWJ1bGFyQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGhhc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpZWNlc0luUm9sbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlnZ3liYWNrQ29tbWVyY2lhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlwZWxpbmVUcmFuc2FjdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW5Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFudEVxdWlwbWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb2xpY3lGb3JtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3NpdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlZmVycmVkTWFudWZhY3R1cmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVmZXJyZWROYXRpb25hbFN0b2NrTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVmZXJyZWRQYXJ0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVtaXVtUmF0ZVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZW1pdW1Vc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNTYW1wbGVJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpY2VMb29rVXBOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1lQ29udHJhY3RvclBhcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW50Q29sb3JTdGFuZGFyZFJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbnRPckRyYXdpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2Nlc3NOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3RPclNlcnZpY2VJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdENoYW5nZU5vdGljZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdERhdGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0SWRBdHRyaWJ1dGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0VHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3RWZXJzaW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9ncmFtQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZ3JhbURlc2NyaXB0aW9uSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZ3JhbUxldmVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9tb3Rpb25hbFZhcmlhbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3BlcnR5QW5kQ2FzdWFsdHlTZXJ2aWNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVibGljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1Ymxpc2hlckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlcnNJdGVtQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVyY2hhc2Vyc09yZGVyTGluZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVycG9zZU9mSW5zdXJhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWNrTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWRpYXRvclNlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbHJvYWQtT3duZWRVbml0VHJhaW5OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhbmRvbVdlaWdodEFnZ3JlZ2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmF0ZURldGFpbENhcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYWxFc3RhdGVQcm9wZXJ0eUluZm9ybWF0aW9uU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhckF4bGVFeHRlbmRlZFRhZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhckF4bGVGcm9udFJlYXJEcml2ZW5TZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYXJBeGxlTWlkZGxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWFyQXhsZVB1c2hlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhckF4bGVSZWFyRHJpdmVuU2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWFyQXhsZVJlYXJOb25Ecml2ZW5TZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYXJBeGxlU2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWFyQXhsZVRhZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjbGFtYXRpb25Qcm9jZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNvcmRLZWVwaW5nT3JNb2RlbFllYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZWZlclNlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVlbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVlbFR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVyZW5jZU9pbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmaW5lZFByb2R1Y3RDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGVkTW9kZWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0ZWRNb2RlbFR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0ZWRQb2xpY3lJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVWYWx1ZVVuaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxlYXNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxpZ2lvdXNSZXRhaWxOb24tQm9va0l0ZW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGFpckZyb21Qcm9kdWN0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwYWlySW5kdWN0aW9uSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwYWlyVGFnTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBsYWNlZFBhcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGxhY2VtZW50TmF0aW9uYWxTdG9ja051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwbGFjZW1lbnRQcm9kdWN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBsYWNlbWVudFN1YmFzc2VtYmx5TW9kZWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGxhY2VtZW50U3ViYXNzZW1ibHlTZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc291cmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXRhaWxQTFUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldHVybmFibGVDb250YWluZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldHVybkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvbGxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvbGxTZXF1ZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUlNLTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSdW5OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbGVzUHJlc2VudGF0aW9uSUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbXBsZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2NoZW1hdGljRGlhZ3JhbVJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VhdFNlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kYXJ5UGx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRQcmlvcklkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY3Rpb25QcmludE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VsbGVyc0RhdGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxsZXJzTG90TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJpYWxJdGVtQW5kQ29udHJpYnV0aW9uSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJpZXNJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlQ29kZVBlckNPUEFTU3RhbmRhcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VDb250cm9sSWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VGZWF0dXJlSUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VSZW5kZXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZVJlcXVlc3RlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2V0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXR0bGVtZW50T3JQYXlvdXRPcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoZWxmLUxpZmVBY3Rpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGVsZi1MaWZlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpZnRXb3JrZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpZGVVcE9yU2lkZURvd24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNraWxsQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0tVIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbGFiTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbGVlcGVyQm94S2V5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbGVlcGVyQm94U2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTTk9NRUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvZnR3YXJlUmV2aXNpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvdXJjZU9mRGVwb3NpdENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvdXJjZU9mTGVhZENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxNYXRlcmlhbElkZW50aWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1NDQy0xOEFuZEFwcGxpY2F0aW9uSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhbmRhcmRHcm91cE9mUHJvZHVjdHMtTWl4ZWRBc3NvcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZEluZHVzdHJpYWxDbGFzc2lmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlTGFiZWxDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZVNhbXBsZUlkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9ja051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3R5bGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YmxpbmVJdGVtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJtaXNzaW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJzaXN0ZW5jZUlkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJzdGl0dXRlUHJvZHVjdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VidG9waWNMZXZlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwZXJzZWRlZFBhcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cGVyc2VkZWRQdXJjaGFzZU9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbGllckJyYW5kQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxpZXJDb21wYW55UmVnaXN0cnlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBsaWVyc0FydGljbGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBsaWVyc1N1cHBsaWVyQXJ0aWNsZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VyZmFjZUZpbmlzaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3ludGhldGljTHViZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3lzdGVtSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVEFDVENvbW1vZGl0eUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlY2huaWNhbE1hbnVhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVjaG5pY2FsT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlY2huaWNhbFBoYXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWxlY29tbXVuaWNhdGlvbnNDaXJjdWl0SWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbGVjb21tdW5pY2F0aW9uc0luZHVzdHJ5U2VydmljZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbGVjb21TZXJ2aWNlVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVsZXBob25lSW5kdXN0cnlNYW51ZmFjdHVyZXJDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXN0ZWRNYXRlcmlhbElkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaXJkUHJpb3JJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW1lQ29tcGxpYW50VGVjaG5pY2FsT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpdGxlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG9waWNMZXZlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhZGVJbklkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zZmVyQ2FzZVNlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNtaXNzaW9uU2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRHcm91cE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJlYXN1cnlNYW5hZ2VtZW50QXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyZWFzdXJ5TWFuYWdlbWVudEFzc29jaWF0aW9uU2VydmljZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyZWFzdXJ5TWFuYWdlbWVudEFzc29jaWF0aW9uU2VydmljZUNvZGVBbmRCYW5rU2VydmljZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyZWF0bWVudENvZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcnVja0JvZHlTZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVTZWx2YWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVQ0NPckVBTi0xMjhDb3Vwb25FeHRlbmRlZENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVsdGltYXRlQ3VzdG9tZXJzQXJ0aWNsZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVU5DQ1MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuZGVyd3JpdGluZ01ldGhvZE9mRGlyZWN0V3JpdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmlmb3JtU3RvY2tTeW1ib2xTeXN0ZW1Db2RlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml2ZXJzYWxQcm9kdWN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVTk51bWJlckRhbmdlcm91c0dvb2RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUEMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVQQ09yRUFOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUENDYXNlQ29kZU51bWJlcjEtMS01LTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVQQ0NvbnN1bWVyUGFja2FnZUNvZGUxLTUtNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVBDQ29uc3VtZXJQYWNrYWdlQ29kZTEtNS01LTEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVQQ0NvdXBvbkNvZGUxLTUtNS0xIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUENPckVBTkNhc2VDb2RlMi01LTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVQQ09yRUFOQ29uc3VtZXJQYWNrYWdlQ29kZTItNS01Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUENPckVBTkNvdXBvbkNvZGUyLTUtNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVBDT3JFQU5Nb2R1bGVDb2RlMi01LTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVQQ09yRUFOTXVsdGlwYWNrQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVBDT3JFQU5TaGlwcGluZ0NvbnRhaW5lckNvZGUxLTItNS01LTEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVQQ1NoaXBwaW5nQ29udGFpbmVyQ29kZTEtMi01LTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVQQ1N1ZmZpeCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVBDU3VmZml4LURlZmluZXNQYWNraW5nVmFyaWF0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVXNlci1EZWZpbmVkU2hpcHBpbmdDb250YWluZXJJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVVk1SUE1MaW5lcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVZNVUxpbmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhcmlhYmxlTWVhc3VyZVByb2R1Y3RDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYXJ5SXRlbVByb2R1Y3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlaGljbGVNYWludGVuYW5jZVJlcG9ydGluZ1N0YW5kYXJkcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVuZG9yQWxwaGFudW1lcmljU2l6ZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlbmRvckNvbG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZW5kb3JHcm91bmRTaGFkZUlkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlbmRvckl0ZW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlbmRvcnNDYXRhbG9nTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZW5kb3JzSXRlbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVuZG9yc1BhcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlbmRvcnNCYXNpY1VuaXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlbmRvcnNFbmdpbmVlcmluZ0NoYW5nZUxldmVsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZW5kb3JzT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlbmRvclNwZWNpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlbmRvcnNTdHlsZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVuZG9yc1N1cHBsZW1lbnRhbEl0ZW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZpbnRhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZvbHVtZVNldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVm9sdW1lVHlwZUlkZW50aWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVm9sdW1lVXNhZ2VJZGVudGlmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhZmVyTG90SWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2VsbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2hlZWxDaGFpckxpZnRTZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ildvb2xlbkN1dCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29vbGVuUnVuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JrVGFza051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29ya1VuaXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldvcmxkQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWWFybkNvdW50LUVuZ2xpc2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Illhcm5Db3VudC1NZXRyaWMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Illhcm5Db3VudFdvcnN0ZWQiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlByb2R1Y3RJZGVudGlmaWVyQ29kZWQiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9IlByb2R1Y3RJZGVudGlmaWVyQ29kZWQiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZlByb2R1Y3RJZGVudGlmaWVyQ29kZWQiIHR5cGU9Ikxpc3RPZlByb2R1Y3RJZGVudGlmaWVyQ29kZWQiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkl0ZW1DaGFyYWN0ZXJpc3RpYyI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iSXRlbUNoYXJhY3RlcmlzdGljIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMaXN0T2ZJdGVtQ2hhcmFjdGVyaXN0aWMiIHR5cGU9Ikxpc3RPZkl0ZW1DaGFyYWN0ZXJpc3RpYyIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iSXRlbUNoYXJhY3RlcmlzdGljIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ikl0ZW1DaGFyYWN0ZXJpc3RpY0NvZGVkIiB0eXBlPSJJdGVtQ2hhcmFjdGVyaXN0aWNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJJdGVtQ2hhcmFjdGVyaXN0aWNDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTdXJmYWNlTGF5ZXJQb3NpdGlvbkNvZGVkIiB0eXBlPSJTdXJmYWNlTGF5ZXJQb3NpdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlN1cmZhY2VMYXllclBvc2l0aW9uQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ikl0ZW1DaGFyYWN0ZXJpc3RpY1ZhbHVlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IklkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iVW5pdE9mTWVhc3VyZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iTGlzdE9mRGltZW5zaW9uIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJdGVtQ2hhcmFjdGVyaXN0aWMiIHR5cGU9Ikl0ZW1DaGFyYWN0ZXJpc3RpYyIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJdGVtQ2hhcmFjdGVyaXN0aWNDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkaXRpb25hbFNlY3RvcmlhbENoYXJhY3RlcmlzdGljcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGNvaG9sQmV2ZXJhZ2VDbGFzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxjb2hvbEJldmVyYWdlVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxsb3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFuYXRvbWljYWxPcmlnaW5PZlNhbXBsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwZWFyYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJ0aXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NlbWJseVJlcXVpcmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbGFuY2VPdXRBcnRpY2xlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXNpc1dlaWdodFNpemUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlaGluZC10aGUtQ291bnRlckRydWdzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZXZlcmFnZUFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmV2ZXJhZ2VCcmFuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmV2ZXJhZ2VDYXRlZ29yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmV2ZXJhZ2VDb250YWluZXJDaGFyYWN0ZXJpc3RpY3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJldmVyYWdlRmxhdm91ciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmV2ZXJhZ2VTZWdtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaW5kaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3R0b21ob2xlTG9jYXRpb25NZXRob2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvdHRvbWhvbGVQcmVzc3VyZU1ldGhvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJhbmRHcm91cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJhbmRHcm91cC1BR3JvdXBpbmdPZlNpbWlsYXJCcmFuZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1cmVhdW9mQWxjb2hvbFRvYmFjY29BbmRGaXJlYXJtc0NsYXNzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVyZWF1T2ZBbGNvaG9sVG9iYWNjb0FuZEZpcmVhcm1zVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyc0NvbG9yRGVzY3JpcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyc0l0ZW1TaXplRGVzY3JpcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2luZy1MaW5lci1UdWJpbmdUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXNpbmdPckxpbmVyVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VydGlmaWNhdGVPZkNvbmZvcm1pdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXNzaXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoZW1pY2FsRmFtaWx5TmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hlbWlzdHJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDSUQtQ29tbWVyY2lhbEl0ZW1EZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29hdGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29hdGluZ09yUGFpbnRTeXN0ZW1Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2F0aW5nT3JQYWludFN5c3RlbU5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbGxhdGVyYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbGxlY3Rpb25NZXRob2RDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29sb3ItTG93ZXJCb2R5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xvci1VcHBlckJvZHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1lcmNpYWxTdGF0dXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1vbkNoZW1pY2FsTmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGFueUZpZWxkQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGxpYW5jZU1ldGhvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcG9zZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbmRpdGlvbmVkQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc3RydWN0aW9uTWV0aG9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zdW1hYmxlUmVzb3VyY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnN1bWVySW5zdHJ1Y3Rpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cm9sSXRlbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJvbGxlZFN1YnN0YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJvbGxlZFN1YnN0YW5jZS1DbGFzczIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyb2xsZWRTdWJzdGFuY2UtQ2xhc3MzTmFyY290aWMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyb2xsZWRTdWJzdGFuY2UtQ2xhc3MzTk5vbi1uYXJjb3RpYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJvbGxlZFN1YnN0YW5jZS1DbGFzczQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyb2xsZWRTdWJzdGFuY2UtQ2xhc3M1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb29yZGluYXRlRGVzY3JpcHRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb29yZGluYXRlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ycm9zaW9uUmVzaXN0YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291cGxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnJlbnRBcnRpY2xlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50QXJ0aWNsZVNwYXJlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc1NwZWNpZmljYXRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYW1hZ2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYW1hZ2VGYXVsdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVuaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZW5zaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaW1lbnNpb25hbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlyZWN0aW9uYWxJbmRpY2F0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3BlcnNpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvc2FnZUZvcm0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRydWdFZmZpY2FjeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJ1Z0VmZmljYWN5U3R1ZHlJbXBsZW1lbnRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHllTG90Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEeWVMb3REZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWRnZVRyZWF0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWRpdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWRpdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGVjdHJpY2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGVjdHJvbmljYWxseUNsZWFuZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVsZWN0cm9uaWNGaWVsZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kcy1TbGl0dGluZy1TcGxpdHRpbmctQ3V0dGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kVHJlYXRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmRVc2VBcHBsaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5naW5lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmdpbmV3aXRoVHJhbnNtaXNzaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVpcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzY3Jvd0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV1cm9wZWFuQ29tbXVuaXR5Umlza0NsYXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGYWJyaWMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhYnJpY0Rlc2NyaXB0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGYWlsdXJlQW5hbHlzaXNQcm9jZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGRURTUEVDLUZlZGVyYWxTcGVjaWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGRUQtU1RELUZlZGVyYWxTdGFuZGFyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmliZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpYnJlVG93Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaWVsZENvZGUtRUlBT3JET0QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpZWxkVGVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlsYW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbHRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluaXNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5pc2hPclN1cmZhY2VSb3VnaG5lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZsYXZvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxvdyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmx1aWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvbGRDb25maWd1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb250Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JlY2FzdERldmlhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9ybWluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9ybXVsYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJhZ3JhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdWVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdW5jdGlvbmFsUGVyZm9ybWFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1cnRoZXJJZGVudGlmeWluZ0NoYXJhY3RlcmlzdGljIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW5lcmFsRGVzY3JpcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdlbmVyYWxNZXJjaGFuZGlzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VuZXJhbFByb2R1Y3RGb3JtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW5lcmljRHJ1ZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdyYWRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmFpbkRpcmVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JhcGVWYXJpZXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYXphcmRvdXNNYXRlcmlhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGF6YXJkUmF0aW5nU3lzdGVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFsdGhBbmRCZWF1dHlBaWRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWF0VHJlYXRPckFubmVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSHlkcmF1bGljcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5ncmVkaWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5pdGlhbFNhbXBsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5qZWN0YWJsZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktleS1Xb3JkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm91ciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFib3VyRG91YmxlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFib3VyT3ZlcnRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlYWRPckNvcHBlclNhbXBsZVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlYXNlZFJlc291cmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaW1pdGluZ09wZXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTHVzdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWNoaW5lUnVuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWduZXRpYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFqb3JHcmFkZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFudWZhY3R1cmluZ01ldGhvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFudWZhY3R1cmluZ1Byb2Nlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcmtldFNlZ21lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcmtpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXRlcmlhbENsYXNzaWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXRlcmlhbERlc2NyaXB0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXRlcmlhbFJlc291cmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXRlcmlhbFN0YXR1cy1PdXRzaWRlUHJvY2Vzc29yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWNoYW5pY2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FsU3VwcGxpZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1ldGFsbG9ncmFwaGljIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNSUxTUEVDLU1pbGl0YXJ5U3BlY2lmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTU1TQkxNLUluZGlhbkxhbmRQcm9wZXJ0eU9yVW5pdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9pc3R1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik11bHRpLU1lZGlhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNdXNpY1N0eWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNdXR1YWxseURlZmluZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld0FydGljbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbi1IYXphcmRvdXNNYXRlcmlhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uLVByZXNjcmlwdGlvbkRydWciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vblJlY3VycmluZ1Jlc291cmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdXRyaXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9ic29sZXRlQXJ0aWNsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2RvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2Rvcml6ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWVudGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlckRpcmVjdFJlc291cmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlclBoeXNpY2FsRGVzY3JpcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXItdGhlLUNvdW50ZXJEcnVnIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNrYWdlSW50ZWdyaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJhbWV0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhdHRlcm4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcmNlbnRhZ2VPZkFsY29ob2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcmZvcmF0aW9uQ29udGludWl0eUluZGljYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyZm9yYXRpb25JbnRlcnZhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyZm9yYXRpb25UeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaHlzaWNhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGh5c2ljYWxGb3JtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaHlzaWNhbEZvcm0tQWVyb3NvbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGh5c2ljYWxGb3JtLUFzRGlsdXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGh5c2ljYWxGb3JtLUNvbmNlbnRyYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaHlzaWNhbEZvcm0tRW11bHNpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBoeXNpY2FsRm9ybS1HYXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBoeXNpY2FsRm9ybS1MaXF1aWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBoeXNpY2FsRm9ybS1Qb3dkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBoeXNpY2FsRm9ybS1TZW1pc29saWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBoeXNpY2FsRm9ybS1Tb2xpZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlwZUNvdXBsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaXBlbGluZVN0cmVhbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlY2F1dGlvbmFyeUluc3RydWN0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc2NyaXB0aW9uRHJ1ZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc2VudGF0aW9uRWZmZWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVzZXJ2YXRpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1hcnlHcmFwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbnRPcmllbnRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpdmF0ZUxhYmVsTmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvY2Vzc0FjdGlvblRha2VuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9jZXNzT3JQcm9kdWN0aW9uVW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdEFwcGxpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0RGF0YUJhc2VNYW5hZ2VtZW50RGVzY3JpcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3RMaWZlQ3ljbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2dyYW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2plY3RTdWJqZWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9tb3Rpb25hbEV2ZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9tb3Rpb25hbE9mZmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9vZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvcHJpZXRhcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1YmxpY0luZm9ybWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdWJsaXNoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmVGb3JtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdXQtdXBEZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGl0eUFzc3VyYW5jZVN0YXR1cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGl0eS1RdWFsaXR5TGV2ZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY29yZGluZ01lZGl1bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjdXJyaW5nUmVzb3VyY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY3ljbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZnVyYmlzaGVkQXJ0aWNsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVndWxhdG9yeU9yU3RhdGVEaXN0cmljdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVndWxhdG9yeS1TdGF0ZU9yRW50aXR5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVpbnN0YXRlZEFydGljbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlamVjdGlvblJlYXNvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzZXJ2b2lyQ29kZS1Db21wYW55Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXN1bHRzTWV0aG9kQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV2aXNlZEFydGljbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldmlzZWREZXNpZ24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvdXRlT2ZBZG1pbmlzdHJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FtcGxlVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kYXJ5R3JhcGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY3JldE9yQ29uZmlkZW50aWFsSW5mb3JtYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY3Rpb25Qcm9maWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJpZXNUaXRsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZUZlYXR1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGFkZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hlbGYtTGlmZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoZWxmVGFnIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwcGluZ1VuaXRDb21wb25lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBUb0xpbmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBUb1N0b2NrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaWxob3VldHRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaXplIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaXplU3lzdGVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb2NpZXR5R292ZXJubWVudEFuZE9yQ3VzdG9tZXJTcGVjaWZpY2F0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29sdWJpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU291cmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsUHJvY2Vzc2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbFNwZWNpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlQ29udHJvbGxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvcmFnZUFuZERpc3BsYXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YmNvbnRyYWN0UmVzb3VyY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1Yi1Qcm9kdWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJmYWNlQ29uZGl0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJmYWNlTG9jYXRpb25NZXRob2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cmZhY2VQcm90ZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJmYWNlVHJlYXRtZW50LUNoZW1pY2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJmYWNlVHJlYXRtZW50LU1lY2hhbmljYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN5bm9ueW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbXBlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVzdGluZ0FuZEluc3BlY3Rpb25BZ2VuY2llcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVzdFBhbmVsVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVzdFNhbXBsZURpcmVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVzdFNhbXBsZUZyZXF1ZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVzdFNhbXBsZUxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaGVvcmV0aWNhbFdlaWdodEZvcm11bGEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoZXJhcGV1dGljQ2xhc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoZXJhcGV1dGljRXF1aXZhbGVuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRocmVzaG9sZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGlyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGl0bGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpdGxlSW5zdXJhbmNlRm9ybSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG93Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFkZU5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zbGF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zbWlzc2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJpbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHdpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVBbmRPclByb2Nlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVmYWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUeXBlT2ZTYW1wbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVPZlRlc3QtSW5zcGVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZVNwaW5uaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZWhpY2xlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZW5kb3JDb2xvckRlc2NyaXB0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZW5kb3JTaXplRGVzY3JpcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZpbnRhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZpc3VhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVm9sYXRpbGVPcmdhbmljQ29tcG91bmRDb250cm9sIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWb2x1bWVUaXRsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FycmFudHlEZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FycmFudHlUeXBlRGVzY3JpcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ildhc3RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXhDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWxkc09yU3BsaWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2VsbENsYXNzaWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWxsRGlyZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWxsUGVyZm9yYXRpb25Db250aW51aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWxsUGVyZm9yYXRpb25JbnRlcnZhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2VsbFRlc3RUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaW5kaW5nSW5zdHJ1Y3Rpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaW5lRnJ1aXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldpbmVHcm93aW5nUmVnaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJZYXJuQ291bnQiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iU3VyZmFjZUxheWVyUG9zaXRpb25Db2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYWNrT2ZDYWIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGF0ZXJhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmxvY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvbHN0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvdGhTaWRlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm90dG9tIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcmljayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzaW5nSGVhZEZsYW5nZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VudGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3JuZXJEaWFnb25hbHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvdWJsZUVuZE92ZXJoYW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb3duc3RyZWFtVGFwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEdWFsRnVlbFRhbmtQb3NpdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4dGVyaW9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcm9udCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJvbnRTcGFyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zaWRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnNpZGVMZWZ0UmVhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zaWRlUmlnaHRSZWFyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcmlvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS2VsbHlCdXNoaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWZ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWZ0RnJvbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlZnRSZWFyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZXNzQ3JpdGljYWxTdXJmYWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3dlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlkZGxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3JlQ3JpdGljYWxTdXJmYWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNdWx0aXBsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV4dFJlbGF0aXZlUG9zaXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdFNwZWNpZmllZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2ZmU3VyZmFjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25lU2lkZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25TdXJmYWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcHBvc2l0ZUNvcm5lcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik91dHNpZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik91dHNpZGVMZWZ0UmVhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0c2lkZVJpZ2h0UmVhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3ZlcmFsbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhclNwYXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjEwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uMTEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb24xMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjEzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uMTQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb24xNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjE2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uMTciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb24xOCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjE5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjIwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uMjEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb24yMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjIzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uMjQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb24yNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjI2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uMjciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb24yOCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjI5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjMwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uMzEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb24zMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjMzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uMzQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb24zNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjM2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uMzciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb24zOCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjM5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjQwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uNDEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb240MiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjQzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uNDQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb240NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjQ2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uNDciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb240OCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjQ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjUwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uNiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb244Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uOSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmlnRmxvb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSaWdodEZyb250Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSaWdodFJlYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpZGVPbmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpZGVUd28iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2luZ2xlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaW5nbGVFbmRPdmVyaGFuZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29sdWJsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BhcmVUaXJlUG9zaXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXJib2FyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvbmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0dWNjbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3ViLVNlYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFua0JvdHRvbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG9vdGhCdWNjYWxTdXJmYWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb290aERpc3RhbFN1cmZhY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvb3RoRmFjaWFsU3VyZmFjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG9vdGhJbmNpc2FsU3VyZmFjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG9vdGhMaW5ndWFsU3VyZmFjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG9vdGhNZXNpYWxTdXJmYWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb290aE9jY2x1c2FsU3VyZmFjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG9wIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUd29TaWRlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5kZXJDYWIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaWxhdGVyYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVwcGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVcHN0cmVhbVRhcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29vZCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQ2F0ZWdvcnkiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQ2F0ZWdvcnlJRCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJTdGFuZGFyZENhdGVnb3J5SUQiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IkNhdGVnb3J5IiB0eXBlPSJDYXRlZ29yeSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iU3RhbmRhcmRDYXRlZ29yeUlEIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTdGFuZGFyZENhdGVnb3J5VHlwZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkNsYXNzaWZpY2F0aW9uSUQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRlY2huaWNhbElEIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTdGFuZGFyZENhdGVnb3J5SUQiIHR5cGU9IlN0YW5kYXJkQ2F0ZWdvcnlJRCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUXVhbnRpdHlDb2RlZCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iUXVhbnRpdHlDb2RlZCIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mUXVhbnRpdHlDb2RlZCIgdHlwZT0iTGlzdE9mUXVhbnRpdHlDb2RlZCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUXVhbnRpdHlDb2RlZCI+Ci0gICAgICAgIDx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJRdWFudGl0eSI+Ci0gICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlF1YW50aXR5UXVhbGlmaWVyQ29kZWQiIHR5cGU9IlF1YW50aXR5UXVhbGlmaWVyQ29kZSIvPgotICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJRdWFudGl0eVF1YWxpZmllckNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDwveHNkOmV4dGVuc2lvbj4KLSAgICAgICAgPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlF1YW50aXR5Q29kZWQiIHR5cGU9IlF1YW50aXR5Q29kZWQiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iUXVhbnRpdHlRdWFsaWZpZXJDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjZXB0YWJsZVVuc2VydmljZWFibGVRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjaWRlbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudHNQYXlhYmxlQXZlcmFnZU92ZXJkdWVEYXlzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50c1BsYWNlZEZvckNvbGxlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFja25vd2xlZGdlZFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3RpdmVBY2NvdW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0aXZlQ29udHJhY3RzRGVsaW5xdWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0aXZlQ29udHJhY3RzRGVsaW5xdWVudC1CdXlpbmdQYXJ0eUNhdXNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0aXZlQ29udHJhY3RzRGVsaW5xdWVudC1Db250cmFjdG9yQ2F1c2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3RpdmVDb250cmFjdHNEZWxpbnF1ZW50LVVua25vd25DYXVzZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdGl2ZUluZ3JlZGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdGl2ZUluZ3JlZGllbnREb3NlUGVyVW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0aXZlSW5ncmVkaWVudERvc2VQZXJVbml0RGlzcGVuc2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3RpdmVMaW5lSXRlbXNEZWxpbnF1ZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3RpdmVMaW5lSXRlbXNEZWxpbnF1ZW50LUJ1eWluZ1BhcnR5Q2F1c2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3RpdmVMaW5lSXRlbXNEZWxpbnF1ZW50LUNvbnRyYWN0b3JDYXVzZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdGl2ZUxpbmVJdGVtc0RlbGlucXVlbnQtVW5rbm93bkNhdXNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0aXZlTGlzdGluZ3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdGl2ZU1haW50ZW5hbmNlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0aXZpdHlDb2RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0dWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3R1YWxEdXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0dWFsSG91cnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdHVhbFN0b2NrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3R1YWxVbml0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0dWFsVW5pdHNDdW11bGF0aXZlVG9EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRlZEVtcGxveWVlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkaXRpb25hbEFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkaXRpb25hbERlbWFuZFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRpdGlvbmFsUHJvbW90aW9uU2FsZXNGb3JlY2FzdFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRpdGlvbmFsUmVwbGVuaXNobWVudERlbWFuZFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRpdGlvbmFsVXNhZ2VRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRqdXN0ZWRDb3JyZWN0b3JSZWFkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RlZFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RlZFVuaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RtZW50VG9JbnZlbnRvcnlRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRtaW5pc3RyYXRvcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlQXREZWF0aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlZEFjdGl2ZUxpbmVJdGVtc0RlbGlucXVlbnQtQ29udHJhY3RvckNhdXNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlZExpbmVJdGVtc0NvbXBsZXRlZC1Db250cmFjdG9yQ2F1c2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ2VkTGluZUl0ZW1zRGVsaW5xdWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlSGlnaFZhbHVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ2VMb3dWYWx1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlTW9kaWZ5aW5nVW5pdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZU5lYXJlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZU5leHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlT2ZGaW5hbmNpYWxJbmZvcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdncmVnYXRlQmVuZWZpdFBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdyaWN1bHR1cmFsV29ya2VycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWlyY3JhZnRSYWRpb3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpcmxpbmVBdHRlbmRhbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxvY2F0ZWRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxsb3R0ZWRVc2FnZVF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbFRpbWVCdXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtb3J0aXNhdGlvblF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbW9ydGl6YXRpb25DdW11bGF0ZWRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1vcnRpemF0aW9uT3JkZXJRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1vcnRpemF0aW9uVGVybSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1vcnRpemF0aW9uVG90YWxRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW50aWNpcGF0ZWRMZW5ndGhPZlNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcHJvdmFsT3JPZmZlckR1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHByb3ZlZEFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwcm94aW1hdGVOdW1iZXJPZkhvbGRlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcHJveGltYXRlTnVtYmVyT2ZVbml0c0ZvclNhbGVQcm9qZWN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcHJveGltYXRlTnVtYmVyT2ZVbml0c1Byb2plY3RlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJlYURhbWFnZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFyZWFPZkxldmVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcmVhUGVyVW5pdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFycmVzdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzSXNRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzZXRTZWl6ZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NvY2lhdGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdENvbXBsZXRlVmFyaWFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF0Q29tcGxldGlvblF1YW50aXR5RXN0aW1hdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdHRlbmRhbnQtSGFuZGxlZFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdWN0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXVkaXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXV0aG9yaXNlZFNoYXJlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXV0aG9yaXplZFJldGVudGlvbkxldmVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3JpemVkU2hhcmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdmFpbGFibGVRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXZhaWxhYmxlUmVzb3VyY2VUYXNrUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF2YWlsYWJsZVVuaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdmVyYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdmVyYWdlRW1wbG95ZWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdmVyYWdlTnVtYmVyT2ZFbXBsb3llZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF4bGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYWNrb3JkZXJMaW5lcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFja29yZGVyUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbmtSZWplY3RJdGVtQ291bnQuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYW5rcnVwdGN5UGV0aXRpb25zRmlsZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhdGhyb29tQ291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhdGhyb29tc0ZpbmlzaGVkQXJlYUFib3ZlR3JhZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlZHJvb21Db3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVkcm9vbXNGaW5pc2hlZEFyZWFBYm92ZUdyYWRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZWRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZWdpbm5pbmdTaGFyZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbmVmaXRBbW91bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbmVmaXRQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxhYmxlUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbGluZ1VuaXRQZXJQcmljaW5nVW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlydGhXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJsYW5rVm90ZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJsb29kUmVjb3JkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb29rSW52ZW50b3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb29rT3JkZXJRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJhbmNoZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyYW5jaExvY2F0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJhbmNoTG9jYXRpb25zTGVhc2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcmFuY2hMb2NhdGlvbnNPd25lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJhbmNoT2ZmaWNlTG9jYXRpb25zRXN0aW1hdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcm90aGVyc0RlY2Vhc2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcm90aGVyc0xpdmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVkZ2V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdWRnZXRBdENvbXBsZXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdWRnZXRDdW11bGF0aXZlVG9EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdWRnZXRlZEhvdXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc0NsYXNzRmFpbHVyZUluY2lkZW5jZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1c2luZXNzRmFpbHVyZUNsYXNzSW5jaWRlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc0ZhaWx1cmVJbmR1c3RyeUluY2lkZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NGYWlsdXJlTmF0aW9uYWxBdmVyYWdlSW5jaWRlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5dXBPckJ1eWRvd25SYXRlUGVyQmFzaXNQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnl0ZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbGVuZGFyVW5pdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbmNlbGxlZFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXBpdGFsQ2hhbmdlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VydGlmaWVkUmVnaXN0ZXJlZE51cnNlQW5lc3RoZXRpc3ROdW1iZXJPZkNvbmN1cnJlbnRQcm9jZWR1cmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFuZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFuZ2VzSW5DYXBpdGFsU3RydWN0dXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZWFibGVDdWJpY01lYXN1cmVtZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlYWJsZURpc3RhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2VhYmxlR3Jvc3NXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZWFibGVMZW5ndGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZWFibGVOdW1iZXJPZkF4bGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2VhYmxlTnVtYmVyT2ZDb250YWluZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2VhYmxlTnVtYmVyT2ZQYWNrYWdlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlYWJsZU51bWJlck9mUmFpbFdhZ29ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlYWJsZU51bWJlck9mVW5pdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZWFibGVQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZWFibGVTdXJmYWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2VhYmxlVGFyZVdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlYWJsZVZvbHVtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlYWJsZVdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hpbGRyZW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNpcmN1bGF0aW5nT2lsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaXRhdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsYWltUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGVya3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsb3NpbmdTdGF0ZW1lbnRCYWxhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbG9zaW5nU3RvY2tCYWxhbmNlUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvMkluamVjdGlvblZvbHVtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ28tSW5zdXJlZC1BY3R1YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvLUluc3VyZWQtRXN0aW1hdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsYXRlcmFsUmVxdWlyZW1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsZWN0aW9uUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21taXRtZW50UGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21taXR0ZWRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbXVuaXR5U2VydmljZUR1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wYW5pZXNJbmNsdWRlZEluQ29uc29saWRhdGVkRmluYW5jaWFsU3RhdGVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wYW5pZXNJbmNsdWRlZEluQ29uc29saWRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGFuaWVzSW5TYW1lQWN0aXZpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBhcmlzb25QZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBsZXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGxldGVkQ29udHJhY3RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wbGV0ZWRMaW5lSXRlbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBsZXRlZFByb2plY3RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wb25lbnRNZXRlclJlYWRpbmdDb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uY3VycmVudEl0ZW1PdXRwdXRPZlRvb2xpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbmZpcm1lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc29saWRhdGVkRGlzY291bnRJbnZlbnRvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnN1bWVyUmVzZXJ2ZWRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGludWFuY2VEdXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RCdXlkb3duIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdEJ1eXVwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdENvbXBsZXRlZERlbGlucXVlbnQtQ29udHJhY3RvckNhdXNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RMaW5lSXRlbVF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdG9yQXRDb21wbGV0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RvckN1bXVsYXRpdmVUb0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0c0NvbXBsZXRlZERlbGlucXVlbnQtQnV5aW5nUGFydHlDYXVzZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0c0NvbXBsZXRlZERlbGlucXVlbnQtVW5rbm93bkNhdXNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJpYnV0aW9uVG90YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyb2xRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udmVudGlvbmFsTW9iaWxlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udmljdGlvbnNTZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb29wZXJhdGl2ZVNoYXJlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ycmVjdGVkUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcnJlY3RpdmVBY3Rpb25SZXF1ZXN0cy1NZXRob2RDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3JyZWN0aXZlQWN0aW9uUmVxdWVzdHMtTWV0aG9kRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ycmVjdGl2ZUFjdGlvblJlcXVlc3RzLU1ldGhvZEUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcnJlY3RpdmVBY3Rpb25SZXF1ZXN0cy1WZXJiYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcnJlY3RpdmVBY3Rpb25SZXF1ZXN0cy1Xcml0dGVuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VudGVyQ2xlcmtzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3Vyc2VTZWdtZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ292ZXJhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdmVyZWQtQWN0dWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3ZlcmVkLUVzdGltYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0b3JzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmltaW5hbFNlbnRlbmNlRHVyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVBY3R1YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVCdWRnZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVFYXJuZWRWYWx1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VtdWxhdGl2ZUVmZmVjdE9mUHJpb3JQZXJpb2RBZGp1c3RtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdW11bGF0aXZlR2FzSW5qZWN0aW9uVm9sdW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdW11bGF0aXZlR2FzVm9sdW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdW11bGF0aXZlTGlxdWlkSW5qZWN0aW9uVm9sdW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdW11bGF0aXZlT2lsT3JDb25kZW5zYXRlVm9sdW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdW11bGF0aXZlUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVRdWFudGl0eUFjdHVhbEVzdGltYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VtdWxhdGl2ZVF1YW50aXR5QWN0dWFsTWVhc3VyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVRdWFudGl0eUFjdHVhbFBsYW5uZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVRdWFudGl0eU9yZGVyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVRdWFudGl0eVByZWNlZGluZ1BlcmlvZEVzdGltYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VtdWxhdGl2ZVF1YW50aXR5UHJlY2VkaW5nUGVyaW9kTWVhc3VyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVRdWFudGl0eVByZWNlZGluZ1BlcmlvZFBsYW5uZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVRdWFudGl0eVByZWNlZGluZ1BlcmlvZFJlYWNoZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVRdWFudGl0eVJlY2VpdmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdW11bGF0aXZlUXVhbnRpdHlSZWNlaXZlZEVuZE9mUHJpb3JZZWFyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdW11bGF0aXZlUXVhbnRpdHktUmVqZWN0ZWRNYXRlcmlhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VtdWxhdGl2ZVF1YW50aXR5LVJlamVjdGVkTWF0ZXJpYWwtRGlzcG9zaXRpb25DcmVkaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVRdWFudGl0eS1SZWplY3RlZE1hdGVyaWFsLURpc3Bvc2l0aW9uUGVuZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VtdWxhdGl2ZVF1YW50aXR5LVJlamVjdGVkTWF0ZXJpYWwtRGlzcG9zaXRpb25SZXBsYWNlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VtdWxhdGl2ZVF1YW50aXR5UmVxdWlyZWRQcmlvclRvVGhlRmlyc3RTY2hlZHVsZWRQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVRdWFudGl0eVNjaGVkdWxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VtdWxhdGl2ZVF1YW50aXR5U2NoZWR1bGVkVXBUb0FjY3VtdWxhdGlvblN0YXJ0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VtdWxhdGl2ZVF1YW50aXR5U2hpcHBlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VtdWxhdGl2ZVF1YW50aXR5U2hpcHBlZExvbmctRGlzcG9zaXRpb25DaGFsbGVuZ2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdW11bGF0aXZlUXVhbnRpdHlTaGlwcGVkTG9uZy1EaXNwb3NpdGlvblBlbmRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVRdWFudGl0eVNoaXBwZWRTaG9ydC1EaXNwb3NpdGlvbkNoYWxsZW5nZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVRdWFudGl0eVNoaXBwZWRTaG9ydC1EaXNwb3NpdGlvblBlbmRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVTY2hlZHVsZVZhcmlhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdW11bGF0aXZlU2NyYXBRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VtdWxhdGl2ZVZhcmlhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdW11bGF0aXZlV2F0ZXJWb2x1bWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnJlbnREYXlzT25NYXJrZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlZHVjdGlibGVCbG9vZFVuaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWZhdWx0Tm90aWZpY2F0aW9uUmVzcG9uc2VQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlZ3JlZVNlZ21lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxldGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeUJhdGNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeUJhdGNoTXVsdGlwbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5UXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5UXVhbnRpdHlCYWxhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwZW5kZW50Q291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGVuZGVudHNBZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGVuZGVudFRvdGFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXNpZ25FbXBsb3llZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc3BhdGNoTm90ZVF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXNwYXRjaFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXN0cm95ZWRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGV0cmltZW50YWxMZWdhbEZpbGluZ3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRldHJpbWVudGFsTGVnYWxGaWxpbmdzQWdhaW5zdERpcmVjdG9ycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGltZW5zaW9uYWxTYW1wbGVRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlyZWN0b3JzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXJlY3RTaGlwbWVudFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXJlY3RXb3JrZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNidXJzZW1lbnRQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2NyZWV0UXVhbnRpdHktUmVqZWN0ZWRNYXRlcmlhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY3JldGVRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY3JldGVRdWFudGl0eS1SZWplY3RlZE1hdGVyaWFsLURpc3Bvc2l0aW9uQ3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNjcmV0ZVF1YW50aXR5LVJlamVjdGVkTWF0ZXJpYWwtRGlzcG9zaXRpb25QZW5kaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNjcmV0ZVF1YW50aXR5LVJlamVjdGVkTWF0ZXJpYWwtRGlzcG9zaXRpb25SZXBsYWNlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzcG9zZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3Bvc2l0aW9uVW5kZXRlcm1pbmVkUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3RyaWJ1dGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXN0cmlidXRvckludmVudG9yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9tZXN0aWNBZmZpbGlhdGVkQ29tcGFuaWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb21lc3RpY1VzZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyYWZ0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJpdmVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEdWUtSW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1cGxpY2F0ZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1cmF0aW9uSW5DdXJyZW50Sm9iIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEd2VsbGluZ0FyZWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVhcm5lZFZhbHVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFYXJuZWRWYWx1ZUN1bXVsYXRpdmVUb0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVhcm5lZFZhbHVlSG91cnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVmZmVjdGl2ZUFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWxhcHNlZER1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGVjdHJvbmljU2lnbmF0dXJlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWxpbWluYXRpb25QZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVsaW1pbmF0aW9uUGVyaW9kLUFjY2lkZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGltaW5hdGlvblBlcmlvZC1TaWNrbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1lcmdlbmN5TW9kaWZ5aW5nVW5pdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVkQXRMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWRBdFRoaXNMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWRCeVRoaXNDb21wYW55Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llZEluVGhpc1Byb2Zlc3Npb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVkT25UaGlzSm9iIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llZUF2ZXJhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWVzQWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llZXMtTm9ub3duZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVlc05vdEluY2x1ZGluZ093bmVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWVzTnVtYmVyT2ZEYXlzQXdheUZyb21Xb3JrRHVlVG9Jbmp1cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVlc051bWJlck9mRGF5c09mUmVzdHJpY3RlZFdvcmtBY3Rpdml0eUR1ZVRvSW5qdXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llZXMtT3duZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVlcy1QYXJ0VGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWVzLVNhbWVEdXRpZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVlcy1TYW1lT2NjdXBhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWVzU2hhcmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llZXNUb3RhbE51bWJlck9mRGF5c0F3YXlGcm9tV29ya0R1ZVRvSWxsbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWVUb3RhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWVUb3RhbEZpcnN0TW9udGhPZlF1YXJ0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVlVG90YWxTZWNvbmRNb250aE9mUXVhcnRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWVUb3RhbFRoaXJkTW9udGhPZlF1YXJ0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZGluZ1N0b2NrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmRPZk1vbnRoSW52ZW50b3J5UHJpb3JUb1NoaXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmdpbmVlcmVkU3RhbmRhcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZ2luZWVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50UXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWl0eVNlY3VyaXR5SG9sZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZUF0Q29tcGxldGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXN0aW1hdGVkQWNjb3VudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZEFubnVhbFZvbHVtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXN0aW1hdGVkRHVyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZEVtcGxveWVlc0F0TG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZEhvdXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZWRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXN0aW1hdGVkUmVhZGluZ1F1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZWRSZW1haW5pbmdFY29ub21pY0xpZmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZFJlbWFpbmluZ1BoeXNpY2FsTGlmZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXN0aW1hdGVkVG90YWxFbXBsb3llZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV2YXBvcmF0ZWRXYXRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhjbHVzaXZlVXNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhlY3V0aXZlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhpc3RlbmNlTGltaXRQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGVuZGl0dXJlUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGVuc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4dGVuZGVkVGVybSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXh0cmFVbnBsYW5uZWREZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFjdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsTWVkaWNhcmVPck1lZGljYWlkQ2xhaW1NYW5kYXRlLUNhdGVnb3J5MSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbE1lZGljYXJlT3JNZWRpY2FpZENsYWltTWFuZGF0ZS1DYXRlZ29yeTIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxNZWRpY2FyZU9yTWVkaWNhaWRDbGFpbU1hbmRhdGUtQ2F0ZWdvcnkzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsTWVkaWNhcmVPck1lZGljYWlkQ2xhaW1NYW5kYXRlLUNhdGVnb3J5NCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbE1lZGljYXJlT3JNZWRpY2FpZENsYWltTWFuZGF0ZS1DYXRlZ29yeTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxNZWRpY2FyZU9yTWVkaWNhaWRQYXltZW50TWFuZGF0ZS1DYXRlZ29yeTEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxNZWRpY2FyZU9yTWVkaWNhaWRQYXltZW50TWFuZGF0ZS1DYXRlZ29yeTIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxNZWRpY2FyZU9yTWVkaWNhaWRQYXltZW50TWFuZGF0ZS1DYXRlZ29yeTMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxNZWRpY2FyZU9yTWVkaWNhaWRQYXltZW50TWFuZGF0ZS1DYXRlZ29yeTQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxNZWRpY2FyZU9yTWVkaWNhaWRQYXltZW50TWFuZGF0ZS1DYXRlZ29yeTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxQZW5zaW9uTWFuZGF0ZS1DYXRlZ29yeTEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxQZW5zaW9uTWFuZGF0ZS1DYXRlZ29yeTIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxQZW5zaW9uTWFuZGF0ZS1DYXRlZ29yeTMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxQZW5zaW9uTWFuZGF0ZS1DYXRlZ29yeTQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxQZW5zaW9uTWFuZGF0ZS1DYXRlZ29yeTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxWb3RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmllbGRXb3JrZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaWxlU2l6ZUFmdGVyQ29tcHJlc3Npb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbGVTaXplQmVmb3JlQ29tcHJlc3Npb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFsRGVsaXZlcnlRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsQ292ZXJhZ2VQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFuY2lhbEluc3RpdHV0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluaXNoT2Zmc2V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdFF1YXJ0ZXJOb24tUmVjdXJyaW5nRGVtYW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdFF1YXJ0ZXJOb24tUmVjdXJyaW5nT3JkZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdFF1YXJ0ZXJSZWN1cnJpbmdEZW1hbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpcnN0UXVhcnRlclJlY3VycmluZ09yZGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxhcmVPckZsYXNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGF0RXh0cmFQcmVtaXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbG9vcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZsb29yc09jY3VwaWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JlY2FzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWNhc3RBdENvbXBsZXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JlY2FzdGVkU2Nhbm5lZFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JlY2FzdFRvQ29tcGxldGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVpZ25SZWxhdGVkRW50aXRpZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVtZW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvdXJ0aFF1YXJ0ZXJOb24tUmVjdXJyaW5nRGVtYW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3VydGhRdWFydGVyTm9uLVJlY3VycmluZ09yZGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm91cnRoUXVhcnRlclJlY3VycmluZ0RlbWFuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm91cnRoUXVhcnRlclJlY3VycmluZ09yZGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZUZsb2F0LUluQ2FsZW5kYXJVbml0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZUZsb2F0VGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZUdvb2RzUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWVsYW5jZURlYnRDb2xsZWN0b3JzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVlbGFuY2VTYWxlc3BlcnNvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWVRdWFudGl0eUluY2x1ZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVlUXVhbnRpdHlOb3RJbmNsdWRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlcXVlbmN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdWVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdWVsQ29uc3VtZWRPckJ1cm5lZEFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnVlbFB1bXBzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdWxsQmF0aHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1bmN0aW9uYWxHcm91cHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1bmN0aW9uYWxTYW1wbGVRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnVybmlzaGVkQmxvb2RVbml0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FyYWdlT3JDYXJwb3J0QXJlYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FzSW5qZWN0aW9uVm9sdW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXNMaWZ0Vm9sdW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXNSZWNlaXB0Vm9sdW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXNSZXR1cm5lZFRvRWFydGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdhc1JldHVybmVkVG9Qcm9wZXJ0eUZvckZ1ZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdhc1Nocmlua2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FzU29sZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FzVXNlZEZvckRyaWxsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXNVc2VkRm9yRnVlbFN5c3RlbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FzVXNlZEZvclBsYW50RnVlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FzVXNlZEZvclJlcHJlc3N1cmluZ09yUHJlc3N1cmVNYWludGVuYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FzVXNlZE9uUHJvcGVydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdhc1ZlbnRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FzVm9sdW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW5lcmFsRWxpbWluYXRpb25QZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdvdmVybm1lbnRSZXBvcnRpbmdRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JhZGVUcmFuc2ZlckFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3Jvc3NBbm51YWxJbmNvbWVNdWx0aXBsaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcm9zc0J1aWxkaW5nQXJlYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3Jvc3NFc3RpbWF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3Jvc3NMaXZpbmdBcmVhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcm9zc0xpdmluZ0ZpbmlzaGVkQXJlYUFib3ZlR3JhZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3NzUHJvZHVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3Jvc3NSZW50TXVsdGlwbGllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JvdXBFbXBsb3llZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikd1YXJhbnRlZUZlZUJ1eXVwTWF4aW11bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3VhcmFudGVlRmVlUmF0ZUFmdGVyQWx0ZXJuYXRlUGF5bWVudE1ldGhvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3VhcmFudGVlRmVlUmF0ZUFmdGVyQnV5dXBPckJ1eWRvd24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikd1YXJhbnRlZVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIaWdoRmFicmljYXRpb25BdXRob3JpemF0aW9uUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhpZ2hSYXdNYXRlcmlhbEF1dGhvcml6YXRpb25RdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9sZGluZ1BlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG91cnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvdXJzRmxvd24tQWlyY3JhZnRPclR5cGVGbHlpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvdXJzRmxvd24tQWlyY3JhZnRUeXBlT3JMaWZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3Vyc0Zsb3duLUFpcmNyYWZ0VHlwZU9yUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3Vyc0Zsb3duLUxpZmV0aW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3Vyc0Zsb3duLVR5cGVGbHlpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkltcGFpcm1lbnREdXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW1wYWlybWVudEZyZXF1ZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5jcmVtZW50YWxPcmRlclF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmRpcmVjdEVtcGxveWVlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5kdXN0cnlCdXNpbmVzc0ZhaWx1cmVJbmNpZGVuY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmZvcm1hdGlvblByb3ZpZGVyU3RhbmRhcmRpemVkTW90b3JWZWhpY2xlUGVuYWx0eVBvaW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5mb3JtYXRpb25SZWFkaW5nUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3BlY3RvcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3RhbGxlZENhcGFjaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN0YWxsZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN0YWxsbWVudEZyZXF1ZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdGFsbG1lbnRQYXltZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdGFsbG1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1ZmZpY2llbnRGdW5kc1JldHVybmVkQ2hlcXVlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZW5kZWRDaGFuZ2VUaW1lUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcmVzdEZvck92ZXJkcmF3bkFjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVyaW1UZXJtUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcnRhbmtUcmFuc2ZlckFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5UcmFuc2l0UXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluLVVzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52ZW50b3J5Q2F0ZWdvcnlUcmFuc2ZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52ZW50b3J5RGlzY3JlcGFuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVudG9yeU1vdmVtZW50UXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVudG9yeU9uU2hlbGZXb3JrSW5Qcm9ncmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52ZW50b3J5UXVhbnRpdHlBdFN1cHBsaWVyc05vdFN1YmplY3RUb0luc3BlY3Rpb25CeUN1c3RvbWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlbnRvcnlRdWFudGl0eUF0U3VwcGxpZXJzU3ViamVjdFRvSW5zcGVjdGlvbkJ5Q3VzdG9tZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVudG9yeVdpdGhkcmF3YWxRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52b2ljZWRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52b2ljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikludm9sdmVtZW50UGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJc3N1ZWRTaGFyZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkphaWxTZW50ZW5jZUR1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKdWRnZW1lbnRzUmVnaXN0ZXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSnVkZ21lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKdWRpY2lhbFN0YXlEdXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFib3JlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm91ckhvdXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWdUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYW5kSG9sZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFuZFNpemUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhbmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXRlUGF5bWVudFBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGF0ZXN0Q3VtdWxhdGl2ZVF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXdTdWl0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhZFRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlYXNlUGVyaW9kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVuZ3RoT2ZSZXNpZGVuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxldmVsUmVzb3VyY2UtUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxldmVsUmVzb3VyY2VUYXNrUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxldmVsc09jY3VwaWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWNlbnNlV2l0aGRyYXdhbER1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWNlbnNlV2l0aGRyYXdhbHNTZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWVucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGllbnNSZWdpc3RlcmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWZldGltZUNhcGFjaXR5T2ZUb29saW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWZlLVRpbWVSZXNlcnZlLUFjdHVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlmZXRpbWVSZXNlcnZlRGF5cy1BcHBsaWVkVG9UaGlzQ2xhaW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpZmUtVGltZVJlc2VydmUtRXN0aW1hdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaW1pdGVkUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpbmVJdGVtc0NvbXBsZXRlZERlbGlucXVlbnQtQnV5aW5nUGFydHlDYXVzZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpbmVJdGVtc0NvbXBsZXRlZERlbGlucXVlbnQtQ29udHJhY3RvckNhdXNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGluZUl0ZW1zQ29tcGxldGVkRGVsaW5xdWVudC1Vbmtub3duQ2F1c2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaW5lVGhyZWFkUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpcXVpZEluamVjdGlvblZvbHVtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGl2ZXN0b2NrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2FuUmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hblJlcGF5bWVudFRvdGFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3NzQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3NzT3JHYWluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3N0R2FzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3N0R29vZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxvc3RPaWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxvc3RXb3JrVGltZUFjdHVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9zdFdvcmtUaW1lRXN0aW1hdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3RTaXplIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWNoaW5lcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFpbnRlbmFuY2VVbml0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFudWZhY3R1cmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW51ZmFjdHVyZWRVbml0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFyaW5lUmFkaW9zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXJrZXRQcmljZUNoYW5nZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0Y2hpbmdFcXVpcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFsT24tQm9hcmRRdWFudGl0eVByaW9yVG9Mb2FkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXhpbXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXhpbXVtQWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXhpbXVtQmVuZWZpdFBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bUJlbmVmaXRQZXJpb2QtQWNjaWRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1heGltdW1CZW5lZml0UGVyaW9kQWNjaWRlbnRUb0FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bUJlbmVmaXRQZXJpb2QtU2lja25lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1heGltdW1CZW5lZml0UGVyaW9kU2lja25lc3NUb0FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bUNyaW1pbmFsU2VudGVuY2VEdXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bURlbGl2ZXJ5QmF0Y2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1heGltdW1Gb3JlY2FzdFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXhpbXVtSW52ZW50b3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXhpbXVtTWF0dXJpdHlFeHRlbnNpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1heGltdW1OdW1iZXJPZkVtcGxveWVlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bU51bWJlck9mRW1wbG95ZWVzQXRMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bU51bWJlck9mUHVyY2hhc2VPcmRlcnNBbGxvd2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXhpbXVtTnVtYmVyT2ZTaGlwbWVudHNBbGxvd2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXhpbXVtT3JkZXJRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bVByb2R1Y3Rpb25CYXRjaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bVF1YW50aXR5VG9XaGljaFRheFJhdGVBcHBsaWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXhpbXVtUmVxdWVzdGFibGVRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bVNoaXBRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bVN0YWNrYWJpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bVN0b2NrTGV2ZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1heGltdW1TdXBwbHlRdWFudGl0eVN1cHBsaWVyRW5kb3JzZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1heGltdW1UcmFuc2ZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVjaGFuaWNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2F0aW9uRHVyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lbWJlcnNJbkdyb3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXNzZW5nZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXRlclJlYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaWxpdGFyeVNhbGVzUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbGxpb25Eb2xsYXJSb3VuZHRhYmxlQ3JlZGl0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaW11bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaW11bUFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaW11bUF2ZXJhZ2VUaW1lUmVxdWlyZW1lbnRVbml0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaW11bUNvbnRyYWN0UXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1DcmltaW5hbFNlbnRlbmNlRHVyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1EZWxpdmVyeUJhdGNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaW5pbXVtRW1wbG95ZWVzQXRMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaW11bUZhYnJpY2F0aW9uUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1Gb3JlY2FzdFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaW5pbXVtSW52ZW50b3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaW5pbXVtTnVtYmVyT2ZFbXBsb3llZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1PcmRlclBhY2thZ2VMZXZlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaW11bU9yZGVyUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1Qcm9kdWN0aW9uQmF0Y2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1RdWFudGl0eVRvV2hpY2hUYXhSYXRlQXBwbGllcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaW11bVJlcXVlc3RhYmxlUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1TaGlwUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1TdG9ja0xldmVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaW5pbXVtVHJhbnNmZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pc2NlbGxhbmVvdXNBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vYmlsZUxvYWRpbmdBbGxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb2RlbE9yVGFyZ2V0U3RvY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vbnRoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3J0Z2FnZVBvb2xDb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9zdExpa2VseUR1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbEJ1c2luZXNzRmFpbHVyZUluY2lkZW5jZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV0UXVhbnRpdHlEZWNyZWFzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV0UXVhbnRpdHlJbmNyZWFzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV0VG9QYXlJdGVtQ291bnQuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb0RlbGl2ZXJ5UmVxdWlyZW1lbnRJblRoaXNJbnN0cnVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uLUJpbGxhYmxlUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbW1pdHRlZEludmVudG9yeU9uU2hlbGYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbmZvcm1hbmNlUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbi1Db25zb2xpZGF0ZWRUb3RhbC1Eb21lc3RpY1N1YnNpZGlhcmllcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uLUNvbnNvbGlkYXRlZFRvdGFsLUZvcmVpZ25TdWJzaWRpYXJpZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvdmVyZWQtQWN0dWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tQ292ZXJlZC1Fc3RpbWF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbi1Eb21lc3RpY1N0b2NraG9sZGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uZXhjbHVzaXZlVXNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uLVVuaW9uRW1wbG95ZWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tVXJnZW50RGVsaXZlcnlRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9ybWFsRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vcm1hbFJlYWRpbmdRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90UmVwbGFjZWRCbG9vZFVuaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb1ZvdGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZkFjY291bnRzUGFzdER1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZBY3RpdmVBY2NvdW50c1RoaXNDeWNsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZBZGRlZExvY2F0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZBZGp1c3RtZW50UGVyaW9kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZBdHRhY2tzT3JPY2N1cnJlbmNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZCYXRjaGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZkJvcnJvd2VycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZDYXJkc05vdFJlY2VpdmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZkNhcmRzT3V0c3RhbmRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mQ2hlY2tzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZkNsYWltYW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZDbG9zZWRMb2NhdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mQ28tSW5zdXJhbmNlRGF5cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZDb3BpZXNPZkJpbGxPZkxhZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZDcmV3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZkRheXNDb3ZlcmVkQnlJbnZlbnRvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mRGVhZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZEZWxpbnF1ZW50SW5zdGFsbG1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZkRlbGl2ZXJpZXNQZXJEZXNwYXRjaFBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZEZXBlbmRlbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZkVuZFVzZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZkVudGl0bGVkRXhlbXB0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZGYWlsZWRCdXNpbmVzc2VzT2ZEaXJlY3RvcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mRnJhbmNoaXNlZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mRnVsbC1UaW1lRW1wbG95ZWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZkhvc3BpdGFscyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZJZGVudGljYWxIYW5kbGluZ1VuaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZkluc3VyZWRMaXZlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZJbnRlcmVzdFBheW1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZklycmVndWxhckludGVyZXN0UGF5bWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mSXRlbXNBdXRob3JpemVkQXRTdG9yZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZJdGVtc0F1dGhvcml6ZWRBdFdhcmVob3VzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZJdGVtc0luU3RvY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mTGF0ZUNoYXJnZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mTGV2ZWxzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZkxpbWl0ZWRQYXJ0bmVyc2hpcFNoYXJlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZMaXZpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mTG9hbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mTG9zdENhcmRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZk1lbWJlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mTWVzc2FnZVJlY2lwaWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mTW9udGhzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZk1vcnRnYWdvcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mTW91bGRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZk5vbi1Db3ZlcmVkRGF5cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZOb25zdWZmaWNpZW50RnVuZEl0ZW1zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZk9wZW5BY2NvdW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZPcGVyYXRpbmdQZXJpb2RzQXRGYWlsdXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZk9wZXJhdG9yQ3JlZGl0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZPcmlnaW5hbHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mUGFja2FnZXNJbkhhbmRsaW5nVW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZQYXNzZW5nZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlBhdGllbnRBZG1pc3Npb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlBlb3BsZUxpdmluZ0F0UmVzaWRlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlBoeXNpY2lhbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mUHJvZHVjaW5nV2VsbHNSZW1haW5pbmdPblByb3BlcnR5T3JGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZQcm9kdWNpbmdXZWxsc1JlbWFpbmluZ09uUm95YWx0eUFjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mUXVhbnRpdGF0aXZlSW5jZW50aXZlU2NoZW1lVW5pdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mU2VydmljZXNPclByb2NlZHVyZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mU2hlbGZGYWNpbmdzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlNoZWxmVGFncyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZTaWduZWRCaWxsc09mTGFkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlN0YXRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlN0b2xlbkNhcmRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlN0b3BzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlRoZWF0cmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlRpbWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlRpbWVzRGVwb3J0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mVHJhbnNwb3J0RG9jdW1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlVuaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlVuaXRzLUhvdXNpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mVW5pdHNJblRoZURlcHRoT2ZBTGF5ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mVW5pdHNJblRoZVdpZHRoT2ZBTGF5ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mVW5zaWduZWRCaWxsc09mTGFkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZldpdGhob2xkaW5nRXhlbXB0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyc09mQ29uc3VtZXJVbml0c0luVGhlVHJhZGVkVW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyV2Vla3NQYWlkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdXJzZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9lbUludmVudG9yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2ZmaWNlU2l6ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2ZmaWNlV29ya2VycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2ZmTGVhc2VGdWVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZQcmVtaXNlU2FsZXNRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2ZmUHJlbWlzZXNTYWxlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2lsQ29uZGVuc2F0ZVNvbGQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9pbENvbmRlbnNhdGVVc2VkT25Qcm9wZXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2lsT3JDb25kZW5zYXRlVm9sdW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPaWxTZWRpbWVudGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPaWxUaGVmdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25IYW5kQW5kRHVlLUluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbkhvbGRGb3JTaGlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25PcmRlclF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPblByZW1pc2VTYWxlc1F1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPblByZW1pc2VzU2FsZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wZW5pbmdTdGF0ZW1lbnRCYWxhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVuaW5nU3RvY2tCYWxhbmNlUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wZW5RdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3BlcmF0aW5nQmVkcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3BlcmF0aW5nRGl2aXNpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVyYXRpbmdRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3BlcmF0b3JzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVyYXRvcnNXb3JraW5nSW50ZXJlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wdGltYWxRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3B0aW1pc3RpY0R1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlckNvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlcmVkUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yZGVyUXVhbnRpdHlNdWx0aXBsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsRHVyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsTG9hblRlcm0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsUGF5bWVudEl0ZW1Db3VudC4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsVGVybUluWWVhcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyRW1wbG95ZWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlckdhc0Rpc3Bvc2l0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlckluamVjdGlvblZvbHVtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXJNaXNjZWxsYW5lb3VzRGlzcG9zaXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyT2lsQ29uZGVuc2F0ZURpc3Bvc2l0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlclVubGlzdGVkUGFydGljaXBhbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlclVubGlzdGVkU3RvY2tob2xkZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlcldhclJlc2VydmVNYXRlcmlhbFJlcXVpcmVtZW50c1Byb3RlY3RhYmxlUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyV2F0ZXJEaXNwb3NpdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0bGllckRheXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik91dE9mSW52ZW50b3J5UXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik91dHN0YW5kaW5nUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik91dHN0YW5kaW5nU2hhcmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdXQtVHVybmVkUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXJhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXJmbG93UXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXJTaGlwcGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3duZXJzRXF1aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lcnNoaXBDaGFuZ2VBZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik93bmVyc2hpcER1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lcnNoaXBQZXJjZW50YWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25PY2N1cGF0aW9uUXVhbGlmaWNhdGlvblBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFnZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWlkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWlkLUluQ29tbW9uU2hhcmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWlkLUluUHJlZmVycmVkU2hhcmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWlkLUluU2VjdXJpdHlTaGFyZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcmtpbmdTcGFjZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnRpYWxCYXRocyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydGljaXBhbnRUb3RhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydGljaXBhdGlvblNoYXJlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydG5lcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnRUaW1lRW1wbG95ZWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXN0RHVlUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhdGllbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50Q2FuY2VsbGF0aW9uSXRlbUNvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50RHVyYXRpb25XZWVrcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudEV4cGVyaWVuY2VzSW5UaGVMYXN0MTJNb250aHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRFeHBlcmllbmNlc0luVGhlTGFzdDNNb250aHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRGcmVxdWVuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRPcmRlcnNGaWxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudHNOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcmNlbnRhZ2VPZk9yZGVyZWRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyaW9kaWNDYXBhY2l0eU9mVG9vbGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyaW9kT2ZFbXBsb3ltZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJpb2RRdWFudGl0eU1lYXN1cmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJpb2RRdWFudGl0eVBsYW5uZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcmlvZFF1YW50aXR5UmVhY2hlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyc2lzdGVuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlc3NpbWlzdGljRHVyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBldGl0aW9uc0ZpbGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaHlzaWNhbFN0YXR1c0lpaSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGh5c2ljYWxTdGF0dXNJdiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGh5c2ljYWxTdGF0dXNWIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaHlzaWNpYW5zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWN0dXJlQ291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpZWNlc0RlbGl2ZXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlsZmVyYWdlR29vZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpbG90cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlwZWxpbmVBZGp1c3RtZW50T3JBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpcGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaXR0ZWRXYXRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhY2VtZW50UGVyaW9kRXhwaXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhbm5lZFVuaXREZXZlbG9wbWVudFVuaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFudFNpemUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW50V29ya2VycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhdGZvcm1Db3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9ydGFibGVSYWRpb3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvcnRlZFRlbGVwaG9uZUxpbmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3N0LU9wRGF5cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG91bHRyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlZG9taW5hdGVBZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZS1PcERheXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXBhaWRRdWFudGl0eU5vdFNoaXBwZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXBhaWRRdWFudGl0eVNoaXBwZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZS1Qcm9kdWN0aW9uUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc2NyaXB0aW9uRG9zYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVzY3JpcHRpb25FZmZlY3RpdmVQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXNjcmlwdGlvbkZyZXF1ZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc2lkZW50aWFsVm90ZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXNzdXJlQmFzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNCZW5lZml0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNDdW11bGF0aXZlUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzSGlnaGVzdEN1bXVsYXRpdmVRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNseUFtb3J0aXNlZFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c01vbnRoc1VzYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c051bWJlck9mQWNjb3VudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzTnVtYmVyT2ZCcmFuY2hMb2NhdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzTnVtYmVyT2ZFbXBsb3llZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzT3JkZXJRdWFudGl0eVRvQmVDYW5jZWxsZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzV2Vla1F1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmljZUJyZWFrRnJvbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpY2VCcmVha1RvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmljaW5nVW5pdFBlckJpbGxpbmdVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltYXJ5TWFuYWdlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1hcnlNZXRlclJlYWRpbmdWYWx1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWFyeU5ldFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmluY2lwYWxzSW5jbHVkZWRBc0VtcGxveWVlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JDdW11bGF0aXZlSW1iYWxhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvclVuaXRzQWNjZXB0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2JhdGlvbkR1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWNpbmdXZWxscyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdEV4Y2hhbmdlQW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0aW9uUmVxdWlyZW1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0aW9uV29ya2VycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdFNhbGVzQW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9mZXNzaW9uYWxzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9mZXNzb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2plY3RlZEF2YWlsYWJsZUludmVudG9yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdFBoYXNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdHNJblByb2Nlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2plY3RVbml0c1NvbGQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21vdGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbW90aW9uUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3Rlc3RlZEJpbGxzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm92aWRlZFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdWJsaWNhdGlvblR1cm5TaXplIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdXJjaGFzZU9mUHJvZHVjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGlmaWNhdGlvblBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGlmeWluZ1dlZWtzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFsaXR5Q29udHJvbEZhaWxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGl0eUNvbnRyb2xIZWxkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0YXRpdmVJbmNlbnRpdmVTY2hlbWVCYXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eUFkdmlzZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5QXBwcm92ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5QXQxMDBQY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5QXZhaWxhYmxlRm9yUmV0dXJuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eUF2YWlsYWJsZUZvclNhbGUtU3RvY2tRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlBdmFpbGFibGVPblNoZWxmIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eUF3YWl0aW5nRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5QnlQb3NpdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlDYW5jZWxsZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5Q2FycmllZEZvcndhcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5RGVmZXJyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5RGVsaXZlcmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eURpc2FwcHJvdmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eURpc3BlbnNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlEaXNwbGF5ZWROb3RBdmFpbGFibGVGb3JTYWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eUVhcm5lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlIZWxkQnlEZWxpdmVyeVZlaGljbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5SGVsZEJ5TG9naXN0aWNTZXJ2aWNlUHJvdmlkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5SGVsZEJ5UmV0YWlsT3V0bGV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eUluRmxvYXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5SW5Ib2xkT3V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eUluTWFudWZhY3R1cmluZ1Byb2Nlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5SW5QaHlzaWNhbEludmVudG9yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlJblF1YXJhbnRpbmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5SW5UcmFuc2l0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eUxhbmRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlMb2FkZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5TWFuaWZlc3RlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlOb3RBdmFpbGFibGVGb3JEZXNwYXRjaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlPZkRlYWxlckxpY2Vuc2VQbGF0ZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5T2ZNYXRlcmlhbEluT3JkZXJlZFRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5T25IYW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eU9uSG9sZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlQZXJOZXh0SGlnaGVyQXNzZW1ibHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5UGVyUGFjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlQZXJTa2lkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eVBlclVuaXRPZklzc3VlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eVJlY2VpdmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eVJlbWFpbmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlSZXF1aXJlbWVudEZvck1haW50ZW5hbmNlQW5kUmVwYWlyT2YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5UmVxdWlyZW1lbnRGb3JTYW1wbGVJbnNwZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eVJlcXVpcmluZ01hbmlwdWxhdGlvbkJlZm9yZURlc3BhdGNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eVJldHVybmVkRGVmZWN0aXZlT3JEYW1hZ2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eVNjaGVkdWxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlTZXJ2aWNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlTb2xkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eVNvbGROZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5U3VzcGVuZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eVRvQmVEZWxpdmVyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5VXNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlXaXRoZHJhd24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5V2l0aGhlbGRCeU93bmVyT2ZHb29kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVvdGVRdWFudGl0eU9uSW52ZW50b3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYW5nZUF2ZXJhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhbmdlTWF4aW11bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFuZ2VNaW5pbXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYXRlUGVyRGF5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXB0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2ZWRBbmRBY2NlcHRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2ZWROb3RBY2NlcHRlZFRvQmVEZXN0cm95ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmVkTm90QWNjZXB0ZWRUb0JlUmV0dXJuZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmVkUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY29tbWVuZGVkTWFpbnRlbmFuY2VRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjb21tZW5kZWRPdmVyaGF1bEFuZFJlcGFpclF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNvbnNpZGVyYXRpb25QZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZGVsaXZlcnlBZnRlclBvc3RQcm9jZXNzaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZpbGxzQXV0aG9yaXplZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaXN0ZXJlZEJyYW5kc0Rpc3RyaWJ1dGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RlcmVkQnJhbmRzTWFudWZhY3R1cmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWplY3RlZFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWplY3RlZFJldHVyblF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGVkQnVzaW5lc3NFbnRpdGllcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRlZEVudGl0aWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGlvbnNoaXBEdXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVzRW1wbG95ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbWFpbmluZ0F1dGhvcml6ZWRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVtYWluaW5nRHVyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbWFpbmluZ1F1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZW9yZGVyaW5nTGV2ZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlb3JkZXJQb2ludFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBsYWNlZEFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwbGFjZWRCbG9vZFVuaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBsZW5pc2htZW50T3ZlcnJpZGVRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwbGVuaXNobWVudFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBvcnREaWZmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBvcnRlZERlZmljaWVuY2llcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWVzdGVkQW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1aXJlbWVudFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1aXJlbWVudFF1YW50aXR5VGhhdFdhc1ByZXZpb3VzbHlSZWxlYXNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWlzaXRpb25pbmdPYmplY3RpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2VydmVkUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2VydmVkUXVhbnRpdHlDdXN0b21lckRpcmVjdERlbGl2ZXJ5U2FsZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2VydmVkUXVhbnRpdHlSZXRhaWxTYWxlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzaWRlbmNlRHVyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc291cmNlLVF1YW50aXR5LUF2YWlsYWJsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzdGluZ1F1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXN0cmljdGlvbkR1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXRhaWxTYWxlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0ZW50aW9uUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldHVybmVkQnlDb25zdW1lclF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXR1cm5RdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0dXJuc1JlcGxhY2VtZW50UXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvb21Db3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm9vbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvb21zRmluaXNoZWRBcmVhQWJvdmVHcmFkZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm95YWx0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FmZXR5TGV2ZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbGVzcGVyc29ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FsZXNRdWFudGl0eU5vdEluY2x1ZGVkSW5UaGVSZXBsZW5pc2htZW50Q2FsY3VsYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbGVzUXVhbnRpdHlQbGFubmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYW1wbGVBbW91bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjYXR0ZXJlZFZvdGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTY2hlZHVsZVZhcmlhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTY3JhcEFsbG93ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjcmFwUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlYXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRhcnlOZXRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kUXVhcnRlck5vbi1SZWN1cnJpbmdEZW1hbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY29uZFF1YXJ0ZXJOb24tUmVjdXJyaW5nT3JkZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRRdWFydGVyUmVjdXJyaW5nRGVtYW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRRdWFydGVyUmVjdXJyaW5nT3JkZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNyZXRhcmllcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VjdXJlZENoYXJnZXNSZWdpc3RlcmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWN1cml0aWVzU2hhcmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWdtZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VsbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlUmVzYWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGFyZWhvbGRlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoYXJlaG9sZGVyc0hvbGRpbmdSZW1haW5kZXJPZlNoYXJlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hhcmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGFyZXNBZGRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hhcmVzRGVsZXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hhcmVzSGVsZEFzVHJlYXN1cnlTdG9jayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hhcmVzT2ZDb21tb25TdG9jayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hhcmVzT2ZQcmVmZXJyZWRTdG9jayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hhcmVzT3duZWRCeUluLVN0YXRlUmVzaWRlbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGFyZXNPd25lZEJ5T3V0LU9mLVN0YXRlUmVzaWRlbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGFyZXNTdWJzY3JpYmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGFyZXNTdWJzY3JpYmVkQnV0Tm90SXNzdWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlmdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBtZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcE5vdGljZVF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwcGVkUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNob3J0YWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaG9ydC1MYW5kZWRHb29kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hvcnRTaGlwcGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaWxlbnRQYXJ0bmVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2luY2VMYXN0VHJhdmVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaW5nbGVEZWxpdmVyeVF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaXN0ZXJzRGVjZWFzZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpc3RlcnNMaXZpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpemVPZkhvdXNlaG9sZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2tpbGxlZFdvcmtlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU21hbGxCdXNpbmVzc1VzZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvbGljaXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29ydGVkUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvcnRlZFF1YW50aXR5UmVqZWN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwYWNlT2NjdXBpZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxQYXJ0bmVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlZWRDYXBhY2l0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BsaXRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BsaXRTaGlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhbmRhcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXJ0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXJ0T2Zmc2V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFydFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZU9yUHJvdmluY2VNb3RvclZlaGljbGVQZW5hbHR5UG9pbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0aXN0aWNhbFNhbGVzUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b2NrVHJhbnNmZXJzSW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b2NrVHJhbnNmZXJzT3V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9sZW5DaGVxdWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJjb250cmFjdG9yQXRDb21wbGV0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3ViY29udHJhY3RvckN1bXVsYXRpdmVUb0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YmNvbnRyYWN0b3JzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJtaXR0ZWRRdWFudGl0eVJldHVybmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJtaXR0ZWRRdWFudGl0eVNvbGQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnNlcXVlbnREZWxpdmVyeVF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJzaWRpYXJpZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnN0aXR1dGlvbmFsUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1aXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBlcnZpc29ycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxpZWRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxpZXJFc3RpbWF0ZWRMYXRlc3RNZXRlclJlYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBsaWVyRXN0aW1hdGVkUHJldmlvdXNNZXRlclJlYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBsaWVyTGF0ZXN0TWV0ZXJSZWFkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbGllclByZXZpb3VzTWV0ZXJSZWFkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbGllcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBsaWVyc0NyZWRpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VycGx1c0dvb2RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJ2ZXlzSW5BdmVyYWdlUmF0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXNwZW5kZWREdXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3dhbi1HYW56Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYWJsZXNBdmFpbGFibGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhbGtQYXRocyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFua0FsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFyaWZmTG9zc0FsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4YWJsZVF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWFjaGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVjaG5pY2lhbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoZW9yZXRpY2FsUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaXJkUXVhcnRlck5vbi1SZWN1cnJpbmdEZW1hbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaXJkUXVhcnRlck5vbi1SZWN1cnJpbmdPcmRlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaXJkUXVhcnRlclJlY3VycmluZ0RlbWFuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhpcmRRdWFydGVyUmVjdXJyaW5nT3JkZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW1lRXhwZW5kZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpbWVGcmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGltZUluQ291bnRyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGltZUluUG9zaXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpbWVTaW5jZUhvc3BpdGFsaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGltZVNpbmNlTGFzdEFwcGxpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW1lU2luY2VMYXN0Q2l2aWxpYW5GbGlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpbWVTaW5jZUxhc3RJbnN1cmFuY2VNZWRpY2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW1lU2luY2VMYXN0TWlsaXRhcnlGbGlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpbWVTaW5jZU1lZGljYWxDb25zdWx0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW1lU2luY2VNZWRpY2F0aW9uRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW1lU2luY2VNZWRpY2F0aW9uU3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpbWVTaW5jZU9uc2V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW1lU2luY2VTdXJnZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW1lU2luY2VUcmlwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW1lVW5pdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpbWVVbml0c0tub3duIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW1lVW5pdHNQZXJTaGlmdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGltZVVuaXRzU3BlbnRPbkR1dHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpcmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb0NvbXBsZXRlUXVhbnRpdHlFc3RpbWF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvbGVyYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsQWRqdXN0bWVudHNWb2x1bWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsQW1vcnRpc2F0aW9uUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsQXRDb21wbGV0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxBdXRob3JpemVkUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsQmVnaW5uaW5nSW52ZW50b3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbENsYWltc0Fzc29jaWF0ZWRXaXRoUmVwZWF0ZWRUcmF1bWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsQ2xhaW1zV2l0aERheXNBd2F5RnJvbVdvcmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsQ2xhaW1zV2l0aERpc29yZGVyc0R1ZVRvUGh5c2ljYWxBZ2VudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsQ2xhaW1zV2l0aER1c3REaXNlYXNlc09mVGhlTHVuZ3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsQ2xhaW1zV2l0aG91dERheXNBd2F5RnJvbVdvcmtBbmRXaXRob3V0UmVzdHJpY3RlZFdvcmtBY3Rpdml0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxDbGFpbXNXaXRoUG9pc29uaW5nSWxsbmVzc2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbENsYWltc1dpdGhSZXNwaXJhdG9yeUNvbmRpdGlvbnNEdWVUb1RveGljQWdlbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbENsYWltc1dpdGhTa2luRGlzZWFzZXNPckRpc29yZGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxDb25zb2xpZGF0ZWREb21lc3RpY1N1YnNpZGlhcmllcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxDb25zb2xpZGF0ZWRGb3JlaWduU3Vic2lkaWFyaWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbENvbnNvbGlkYXRlZFN1YnNpZGlhcmllcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxDcmVkaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbENyZWRpdHNBY2NlcHRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxDcmVkaXRzUmVjZWl2ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsQ3JlZGl0c1JlamVjdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbERheXNBd2F5RnJvbVdvcmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsRGF5c0F3YXlGcm9tV29ya0R1ZVRvSWxsbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxEYXlzQXdheUZyb21Xb3JrRHVlVG9Jbmp1cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsRGF5c09mUmVzdHJpY3RlZFdvcmtBY3Rpdml0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxEYXlzT2ZSZXN0cmljdGVkV29ya0FjdGl2aXR5RHVlVG9JbGxuZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbERheXNPbk1hcmtldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxEYXlzV2l0aFJlc3RyaWN0ZWRXb3JrQWN0aXZpdHlEdWVUb0luanVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxEZWF0aENsYWltcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxEZWF0aHNBc0FSZXN1bHRPZklsbG5lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsRGVhdGhzQXNBUmVzdWx0T2ZJbmp1cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsRGViaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbERlYml0c0FjY2VwdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbERlYml0c1JlY2VpdmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbERlYml0c1JlamVjdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbERlbGl2ZXJ5UXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsRGVtYW5kT3JkZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbERlbWFuZFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbEVtcGxveWVlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxFbmRpbmdJbnZlbnRvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsRmxvYXRUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbEdhc0Rpc3Bvc2l0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbEdhc0luamVjdGlvblZvbHVtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxJbGxuZXNzQ2xhaW1zV2l0aERheXNBd2F5RnJvbVdvcmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsSWxsbmVzc0NsYWltc1dpdGhPY2N1cGF0aW9uYWxJbGxuZXNzZXNOb3RPdGhlcndpc2VDbGFzc2lmaWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbElsbG5lc3NDbGFpbXNXaXRob3V0TG9zdFdvcmtEYXlzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbElsbG5lc3NXaXRoTG9zdFdvcmtEYXlzT3JSZXN0cmljdGVkV29ya0FjdGl2aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbEluanVyeUNsYWltc1dpdGhEYXlzQXdheUZyb21Xb3JrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbEluanVyeUNsYWltc1dpdGhEYXlzQXdheUZyb21Xb3JrT3JSZXN0cmljdGVkV29ya0FjdGl2aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbEluanVyeUNsYWltc1dpdGhvdXRMb3N0V29ya0RheXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsSW52ZW50b3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbE5vbi1Db25zb2xpZGF0ZWRTdWJzaWRpYXJpZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsTnVtYmVyT2ZDb252aWN0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxOdW1iZXJPZkRvbWVzdGljU3Vic2lkaWFyaWVzSW5jbHVkZWRJbkZpbmFuY2lhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxOdW1iZXJPZkRvbWVzdGljU3Vic2lkaWFyaWVzTm90SW5jbHVkZWRJbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxOdW1iZXJPZkZvcmVpZ25TdWJzaWRpYXJpZXNJbmNsdWRlZEluRmluYW5jaWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbE51bWJlck9mRm9yZWlnblN1YnNpZGlhcmllc05vdEluY2x1ZGVkSW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsTnVtYmVyT2ZMb2FuRGV0YWlsUmVjb3JkcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxOdW1iZXJPZk1vcnRnYWdlZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsTnVtYmVyT2ZQYXJraW5nU3BhY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbE51bWJlck9mU3Vic2lkaWFyaWVzTm90SW5jbHVkZWRJblRoZUZpbmFuY2lhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxOdW1iZXJPZlVuaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbE51bWJlck9mVW5pdHNGb3JTYWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbE51bWJlck9mV29ya2Vyc0NvbXBlbnNhdGlvbkNvbWJpbmVkUmVwb3J0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxOdW1iZXJPZldvcmtlcnNDb21wZW5zYXRpb25GaXJzdFJlcG9ydHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsTnVtYmVyT2ZXb3JrZXJzQ29tcGVuc2F0aW9uU3Vic2VxdWVudFJlcG9ydHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsT2ZJc3N1YWJsZUFzc2V0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxPaWxBbmRPckNvbmRlbnNhdGVEaXNwb3NpdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxPaWxBbmRPckNvbmRlbnNhdGVJbmplY3Rpb25Wb2x1bWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsT3RoZXJQcm9wZXJ0aWVzT3duZWRBbmRGaW5hbmNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxQYXltZW50c1JlamVjdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbFBvc3QtQWR2aWNlc0FjY2VwdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbFBvc3QtQWR2aWNlc1JlY2VpdmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbFBvc3QtQWR2aWNlc1JlamVjdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbFByZS1BZHZpY2VzQWNjZXB0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsUHJlLUFkdmljZXNSZWNlaXZlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxQcmUtQWR2aWNlc1JlamVjdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbFByZW5vdGVzQWNjZXB0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsUHJlbm90ZXNSZWNlaXZlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxQcmVub3Rlc1JlamVjdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbFByb2R1Y3Rpb25Wb2x1bWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsUHJvcGVydGllc093bmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbFF1YW50aXR5UGxhbm5lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxSZXNvdXJjZS1RdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxSb29tcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxTYWxlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxTZXJ2aWNlQmFja29yZGVyUXVhbnRpdHlIaWdoUHJpb3JpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsU2VydmljZUJhY2tvcmRlclF1YW50aXR5TG93UHJpb3JpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsU2hhcmVzT2ZTdG9jayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxTeXN0ZW1CYWNrb3JkZXJRdWFudGl0eUhpZ2hQcmlvcml0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxTeXN0ZW1CYWNrb3JkZXJRdWFudGl0eUxvd1ByaW9yaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbFRvRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxUcmFuc2FjdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsVW5pZGVudGlmaWVkVHJhbnNhY3Rpb25zUmVqZWN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsV2F0ZXJEaXNwb3NpdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxXYXRlckluamVjdGlvblZvbHVtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxXb3JrZWRCeUFsbEVtcGxveWVlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxXb3JraW5nSW50ZXJlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWRlbWFya1JlcHJlc2VudGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFkZW1hcmtzVXNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaW5lZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWluZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc2FjdGlvblNldHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zZmVyUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zZmVycmVkSW5RdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNmZXJyZWRPdXRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhdmVsRnJlcXVlbmN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmF2ZWxsaW5nRW1wbG95ZWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmF2ZWxQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyaXBEdXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJpcHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydW5rZWRDaGFubmVscyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5hY2tub3dsZWRnZWRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5hZGp1c3RlZENvcnJlY3RvclJlYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuY292ZXJlZENoZXF1ZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaWZvcm1Db21tZXJjaWFsQ29kZUZpbGluZ3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaW9uRW1wbG95ZWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdHNDb21wbGV0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRzRm9yU2FsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdHNQZXJVbml0UHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRzUHJvZHVjZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRzUmVudGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0c1dvcmtlZExhc3REYXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRzV29ya2VkUGVyRGF5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0c1dvcmtlZFBlclF1YXJ0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRzV29ya2VkUGVyV2VlayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5wYWlkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbnNhbGVhYmxlUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuc29sZFF1YW50aXR5SGVsZEJ5V2hvbGVzYWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW50aWxOZXh0VHJhdmVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbnVzYWJsZVF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbnVzZWRBY2N1bXVsYXRlZFNpY2tEYXlzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbnZlcmlmaWVkUmVjZWlwdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVyZ2VudERlbGl2ZXJ5UXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVzZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVzZU9mRXh0cmFjb3Jwb3JlYWxDaXJjdWxhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVXNlT2ZIeXBlcmJhcmljUHJlc3N1cml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVzZU9mSHlwZXJ0ZW5zaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVc2VPZkh5cG90ZW5zaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVc2VPZkh5cG90aGVybWlhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYWNhbmNpZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhcmlhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYXJpYW5jZUFkanVzdG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlaGljdWxhclJhZGlvcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVyaWZpZWRSZWNlaXB0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmlzaXRhdGlvbkZyZXF1ZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmlzaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWb2ljZVN0b3JhZ2VRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVm9pZFZvdGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWb2x1bWVTaHJpbmthZ2VBZGp1c3RtZW50T3JBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZvdGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWb3RpbmdTaGFyZXNIZWxkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJlaG91c2VFbXBsb3llZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhcmVob3VzZVNpemUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhdGVyUmUtSW5qZWN0ZWRPblByb3BlcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXRlclZvbHVtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2Vla3NXb3JrZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2VpZ2h0Q2hhbmdlUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWlnaHRHYWluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWlnaHRMb3NzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaG9sZXNhbGVyVG9XaG9sZXNhbGVyU2FsZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldpZGVBcmVhVGVsZXBob25lU2VydmljZVBlcjgwMFNlcnZpY2VVbml0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29ya0NhbGVuZGFyVW5pdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldvcmtEYXlzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JrSW5Qcm9jZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JrUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JrVGltZVVuaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JrVGltZVVuaXRzUGVyU2hpZnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlllYXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJZZWFyc0luU2Nob29sIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJZZWFyc0luVGhpc0xpbmVPZldvcmtPclByb2Zlc3Npb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlllYXJzT25Kb2IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlllYXJzUmVtYWluaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJZZXNWb3RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudER1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50SW52ZW50b3J5UXVhbnRpdHlBdmFpbGFibGVGb3JTaGlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudFBlcmlvZEltYmFsYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudFNlcnZpY2VMaWZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50U2hhcmVCYWxhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lckVzdGltYXRlZExhdGVzdE1ldGVyUmVhZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJFc3RpbWF0ZWRQcmV2aW91c01ldGVyUmVhZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJSZWFkaW5nUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhaWx5QWRqdXN0bWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhaWx5QXZlcmFnZVF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYWlseVdvcmtTaGlmdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhbWFnZWRHb29kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0YVN0b3JhZ2VRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF5cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF5c09wZXJhdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXlzUHJvZHVjZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRheXNTdXBwbHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYmVudHVyZUJvbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYmVudHVyZXNGaWxlZEFnYWluc3REaXJlY3RvcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYml0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYnRDb2xsZWN0b3JzIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJDYXRhbG9nUmVmZXJlbmNlIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDYXRhbG9nVVJMIiB0eXBlPSJ4c2Q6YW55VVJJIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJDYXRhbG9nSUQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkNhdGFsb2dJdGVtSUQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IkNhdGFsb2dSZWZlcmVuY2UiIHR5cGU9IkNhdGFsb2dSZWZlcmVuY2UiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkNvbnRyYWN0SXRlbSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iQ29udHJhY3RJdGVtIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMaXN0T2ZDb250cmFjdEl0ZW0iIHR5cGU9Ikxpc3RPZkNvbnRyYWN0SXRlbSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQ29udHJhY3RJdGVtIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IkNvbnRyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJDb250cmFjdEl0ZW1OdW1iZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IkNvbnRyYWN0SXRlbSIgdHlwZT0iQ29udHJhY3RJdGVtIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJDb25kaXRpb25zT2ZTYWxlIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJTYWxlc1JlcXVpcmVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTYWxlc0FjdGlvbkNvZGVkIiB0eXBlPSJTYWxlc0FjdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlNhbGVzQWN0aW9uQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU2FsZXNBY3Rpb25WYWx1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQ29uZGl0aW9uc09mU2FsZSIgdHlwZT0iQ29uZGl0aW9uc09mU2FsZSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iU2FsZXNSZXF1aXJlbWVudCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iU2FsZXNSZXF1aXJlbWVudENvZGVkIiB0eXBlPSJTYWxlc1JlcXVpcmVtZW50Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU2FsZXNSZXF1aXJlbWVudENvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlNhbGVzUmVxdWlyZW1lbnQiIHR5cGU9IlNhbGVzUmVxdWlyZW1lbnQiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iU2FsZXNSZXF1aXJlbWVudENvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRRdWFudGl0eVRvTWFrZU1pbmltdW1XZWlnaHRSZXF1aXJlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFja09yZGVySWZJdGVtc0FyZU91dE9mU3RvY2tPck5vdFlldFB1Ymxpc2hlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFja09yZGVySWZPdXRPZlN0b2NrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYWNrT3JkZXJPbmx5SWZOZXdJdGVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWRHdWFyYW50ZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbWJpbmVkU21hbGxEaXNhZHZhbnRhZ2VkQnVzaW5lc3NBbmRMYWJvclN1cnBsdXNBcmVhU2V0LUFzaWRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zaWdubWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9Ob3RQcmVzaGlwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVhbFByb2R1Y3RBbGxvd2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGNsdWRlSW1wb3J0UXVvdGFJbkZpcnN0Q29zdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFjdG9yeVNoaXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikd1YXJhbnRlZWRTYWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmNsdWRlSW1wb3J0UXVvdGFJbkZpcnN0Q29zdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFib3JTdXJwbHVzQXJlYVNldC1Bc2lkZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFyZ2VQdXJjaGFzZVNldC1Bc2lkZUZvclNtYWxsQnVzaW5lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1heVByZXNoaXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik11bHRpLXllYXJBd2FyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9CYWNrT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vU3Vic3RpdHV0ZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdGlmeVByaW9yVG9TaGlwbWVudElmUXVhbnRpdHlTcGVjaWZpZWRJc05vdEF2YWlsYWJsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25RdWFsaWZpZWRCaWRkZXJzTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25RdWFsaWZpZWRNYW51ZmFjdHVyZXJzTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXJVbmxpc3RlZFNhbGVzQ29uZGl0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0aWFsTGFib3JTdXJwbHVzQXJlYVNldEFzaWRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXN0cmljdGVkVG9BcHByb3ZlZFNvdXJjZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3RyaWN0ZWRUb0VkdWNhdGlvbmFsSW5zdGl0dXRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXN0cmljdGVkVG9IaXN0b3JpY2FsbHlCbGFja0NvbGxlZ2VPclVuaXZlcnNpdHlPck1pbm9yaXR5SW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3RyaWN0ZWRUb0luZHVzdHJpYWxQcmVwYXJlZG5lc3NQcm9ncmFtUGFydGljaXBhbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXN0cmljdGVkVG9RdWFsaWZpZWRQcm9kdWN0c0xpc3RQcm9kdWN0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzdHJpY3RlZFRvVVNBbmRDYW5hZGlhblNvdXJjZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3RyaWN0ZWRUb1lvdW5nSW52ZXN0aWdhdG9yUHJvZ3JhbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VjdGlvbjhhU2V0LUFzaWRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXQtYXNpZGVGb3JBbWVyaWNhbkluZGlhbi1vd25lZEJ1c2luZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwQXNTb29uQXNQb3NzaWJsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcENvbXBsZXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwRnVsbFRydWNrT25seSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcEluLVBsYWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwUGFydGlhbC1CYWxhbmNlQmFja09yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwUGFydGlhbEJhbGFuY2VDYW5jZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBQYXJ0aWFsQmFsYW5jZVN1YnN0aXR1dGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBQYXJ0aWFsQ2FybG9hZExvdHNPbmx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwUGFydGlhbEl0ZW1RdHlQcm9wb3J0aW9uYWxUb1RvdGFsT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBQYXJ0aWFsVHJ1Y2tsb2FkTG90c09ubHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBQZXJSZWxlYXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwUGVyUmVsZWFzZW9yQnV5ZXJBdXRob3JpemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwUGVyU2NoZWR1bGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNtYWxsQnVzaW5lc3NXaXRoU21hbGxEaXNhZHZhbnRhZ2VkQnVzaW5lc3NDb25zaWRlcmF0aW9uU2V0LUFzaWRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbWFsbERpc2FkdmFudGFnZWRCdXNpbmVzc1NldC1Bc2lkZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU21hbGxQdXJjaGFzZVNldEFzaWRlRm9yU21hbGxCdXNpbmVzc2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbWFsbFJlbWFpbmluZ0JhbGFuY2VDYW5jZWxsYXRpb25BbGxvd2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbWFsbFJlbWFpbmluZ0JhbGFuY2VDYW5jZWxsYXRpb25Ob3RBbGxvd2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJzdGl0dXRlSXRlbUFsbG93ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVucmVzdHJpY3RlZFByb2N1cmVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJlaG91c2VTaGlwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJyYW50eSIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJTYWxlc0FjdGlvbkNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5jZWxCYWxhbmNlVGhhdEV4Y2VlZHNTYWxlc0FjdGlvblZhbHVlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuY2VsRW50aXJlIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJIYXphcmRvdXMiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJMaXN0T2ZIYXphcmRvdXNJZGVudGlmaWVycyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iSGF6YXJkQ2xhc3NDb2RlZCIgdHlwZT0iSGF6YXJkQ2xhc3NDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJIYXphcmRDbGFzc0NvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iSGF6YXJkb3VzUGxhY2FyZEluZm9ybWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJIYXphcmRvdXNSZWZlcmVuY2VzIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTGlzdE9mUmVmZXJlbmNlQ29kZWQiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iSGF6YXJkb3VzQ29udGFjdCI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IkNvbnRhY3QiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iSGF6YXJkTm90ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVU5ER051bSIgdHlwZT0ieHNkOmludCIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJIYXphcmRvdXNUZW1wZXJhdHVyZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iSGF6YXJkb3VzU2hpcG1lbnRJbmZvcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRU1TTnVtIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJNZmFnIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJIYXphcmRvdXMiIHR5cGU9IkhhemFyZG91cyIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mSGF6YXJkb3VzSWRlbnRpZmllcnMiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9IkhhemFyZG91c0lkZW50aWZpZXJzIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMaXN0T2ZIYXphcmRvdXNJZGVudGlmaWVycyIgdHlwZT0iTGlzdE9mSGF6YXJkb3VzSWRlbnRpZmllcnMiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkhhemFyZG91c0lkZW50aWZpZXJzIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJIYXphcmRvdXNSZWd1bGF0aW9uc0NvZGVkIiB0eXBlPSJBZ2VuY3lDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJIYXphcmRvdXNSZWd1bGF0aW9uc0NvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkhhemFyZENvZGUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkNvZGVFeHRlbnNpb24iIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkNvZGVWZXJzaW9uIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJIYXphcmRPZmZpY2lhbFRleHQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRyZW1DYXJkTnVtIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJIYXphcmRvdXNJZGVudGlmaWVycyIgdHlwZT0iSGF6YXJkb3VzSWRlbnRpZmllcnMiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSGF6YXJkQ2xhc3NDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWFyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kYXJ5Ii8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJIYXphcmRvdXNQbGFjYXJkSW5mb3JtYXRpb24iPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iSGF6YXJkb3VzUGxhY2FyZElkZW50aWZpY2F0aW9uIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJIYXphcmRvdXNQbGFjYXJkVGV4dCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSGF6YXJkb3VzUGxhY2FyZEluZm9ybWF0aW9uIiB0eXBlPSJIYXphcmRvdXNQbGFjYXJkSW5mb3JtYXRpb24iLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkhhemFyZG91c1RlbXBlcmF0dXJlcyI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJGbGFzaHBvaW50Ij4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUXVhbnRpdHkiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRW1lcmdlbmN5Ij4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUXVhbnRpdHkiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQ29udHJvbCI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlF1YW50aXR5Ii8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ikxpc3RPZlRlbXBlcmF0dXJlQ29kZWQiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJMaXN0T2ZEaW1lbnNpb24iLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSGF6YXJkb3VzVGVtcGVyYXR1cmVzIiB0eXBlPSJIYXphcmRvdXNUZW1wZXJhdHVyZXMiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkhhemFyZG91c1NoaXBtZW50SW5mb3JtYXRpb24iPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iSGF6YXJkUGFja2luZ0NvZGVkIiB0eXBlPSJIYXphcmRQYWNraW5nQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iSGF6YXJkUGFja2luZ0NvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkhhemFyZG91c1NoaXBtZW50Q29kZWQiIHR5cGU9IkhhemFyZG91c1NoaXBtZW50Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iSGF6YXJkb3VzU2hpcG1lbnRDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJIYXphcmRvdXNTaGlwbWVudE5vdGUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkhhemFyZG91c1pvbmVDb2RlZCIgdHlwZT0iSGF6YXJkb3VzWm9uZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkhhemFyZG91c1pvbmVDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJIYXphcmRvdXNTaGlwbWVudEluZm9ybWF0aW9uIiB0eXBlPSJIYXphcmRvdXNTaGlwbWVudEluZm9ybWF0aW9uIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkhhemFyZFBhY2tpbmdDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90U3BlY2lmaWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmVhdERhbmdlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaXVtRGFuZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaW5vckRhbmdlciIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJIYXphcmRvdXNTaGlwbWVudENvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRpdGlvbmFsRGVzY3JpcHRpdmVJbmZvcm1hdGlvbk5vdFJlcXVpcmVkQnlSZWd1bGF0aW9uQnV0RGVzaXJlZFRvQWNjb21wYW55VGhlTW92ZW1lbnRCeVRoZVNoaXBwZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcmdvQWlybGlmdE9ubHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRPVC0xMTNEb05vdEJ1bXBPckN1dE9mZkNhcldoaWxlSW5Nb3Rpb25EZWNsYXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGFtYWdlZENhck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGFuZ2Vyb3VzV2hlbldldERlY2xhcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFTVNQYWdlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJZGVudGlmaWVzUHJvZHVjdHNJbkFIZWF0ZWRNb2x0ZW5TdGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGF6YXJkb3VzU3Vic3RhbmNlQ29uc3RpdHVlbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmhhbGF0aW9uSGF6YXJkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaW1pdGVkUXVhbnRpdHlEZWNsYXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUZBR1BhZ2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1heGltdW1PcGVyYXRpbmdTcGVlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFyaW5lUG9sbHV0YW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb2lzb24tSW5oYWxhdGlvbkhhemFyZERlY2xhcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb2lzb25EZWNsYXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFkaW9hY3RpdmVNYXRlcmlhbERhdGEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlY2huaWNhbE9yQ2hlbWljYWxHcm91cE5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWRlTmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FzdGVEZWNsYXJhdGlvbiIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJIYXphcmRvdXNab25lQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhemFyZFpvbmVBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYXphcmRab25lQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGF6YXJkWm9uZUMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhemFyZFpvbmVEIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJQcmljaW5nRGV0YWlsIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ikxpc3RPZlByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ikl0ZW1BbGxvd2FuY2VzT3JDaGFyZ2VzIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTGlzdE9mQWxsb3dPckNoYXJnZSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJUb3RhbFZhbHVlIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTW9uZXRhcnlWYWx1ZSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQcmljaW5nRGV0YWlsIiB0eXBlPSJQcmljaW5nRGV0YWlsIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJEZWxpdmVyeURldGFpbCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTaGlwVG9Mb2NhdGlvbiI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IkxvY2F0aW9uIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlNoaXBGcm9tTG9jYXRpb24iPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJMb2NhdGlvbiIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Ikxpc3RPZlNjaGVkdWxlTGluZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJJdGVtUGFja2FnaW5nUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTaW1wbGVQYWNrYWdlTm90ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iVGVybXNPZkRlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IkNhcmdvQ2xhc3NpZmljYXRpb24iLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IkRlbGl2ZXJ5RGV0YWlsIiB0eXBlPSJEZWxpdmVyeURldGFpbCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU2NoZWR1bGVMaW5lIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJTY2hlZHVsZUxpbmUiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZlNjaGVkdWxlTGluZSIgdHlwZT0iTGlzdE9mU2NoZWR1bGVMaW5lIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJTY2hlZHVsZUxpbmUiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU2NoZWR1bGVMaW5lSUQiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlNoaXBtZW50U3RhdHVzRXZlbnRDb2RlZCIgdHlwZT0iU2hpcG1lbnRTdGF0dXNFdmVudENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlNoaXBtZW50U3RhdHVzRXZlbnRDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTaGlwbWVudFN0YXR1c1JlYXNvbnMiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJMaXN0T2ZTdGF0dXNSZWFzb24iLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlJlcXVlc3RlZERlbGl2ZXJ5RGF0ZSIgdHlwZT0ieGNibERhdGV0aW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJMaXN0T2ZPdGhlckRlbGl2ZXJ5RGF0ZSI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ikxpc3RPZkRhdGVDb2RlZCIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTY2hlZHVsZUxpbmVOb3RlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmNob2ljZSBtaW5PY2N1cnM9IjAiPgotICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlRyYW5zcG9ydCIvPgotICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJUcmFuc3BvcnRSZWZlcmVuY2UiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgICAgICAgIDwveHNkOmNob2ljZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iTGlzdE9mU2hpcFRvU3ViSW5mb3JtYXRpb24iLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlNjaGVkdWxlTGluZSIgdHlwZT0iU2NoZWR1bGVMaW5lIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IlNoaXBtZW50U3RhdHVzRXZlbnRDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90QXBwbGljYWJsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90WWV0U2hpcHBlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFja09yZGVyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhY2tPcmRlclNoaXBwZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYWR5Rm9yUGlja3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJblRyYW5zaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnRpYWxseVNoaXBwZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnRpYWxseURlbGl2ZXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcG1lbnRDb21wbGV0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcmVkIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTdGF0dXNSZWFzb24iPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9IlN0YXR1c1JlYXNvbiIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mU3RhdHVzUmVhc29uIiB0eXBlPSJMaXN0T2ZTdGF0dXNSZWFzb24iLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlN0YXR1c1JlYXNvbiI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iU3RhdHVzUmVhc29uQ29kZWQiIHR5cGU9IlN0YXR1c1JlYXNvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlN0YXR1c1JlYXNvbkNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlN0YXR1c1JlYXNvbiIgdHlwZT0iU3RhdHVzUmVhc29uIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IlN0YXR1c1JlYXNvbkNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYW5nZWRTY2hlZHVsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdHJ1Y3Rpb25zQXdhaXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGFtYWdlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNSZWZ1c2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXB0eU9uSW5zcGVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzdGluYXRpb25JbmNvcnJlY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cG9ydFJlc3RyaWN0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW1wb3J0UmVzdHJpY3Rpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50Tm90UmVjZWl2ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5RGlmZmVyZW50RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlUb29MYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmNpZGVudEF0dHJpYnV0ZWRUb1NlbGxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5jaWRlbnRBdHRyaWJ1dGVkVG9UaGVCdXllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5jaWRlbnRBdHRyaWJ1dGVkVG9UaGVDYXJyaWVyIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTaGlwVG9TdWJJbmZvcm1hdGlvbiI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iU2hpcFRvU3ViSW5mb3JtYXRpb24iLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZlNoaXBUb1N1YkluZm9ybWF0aW9uIiB0eXBlPSJMaXN0T2ZTaGlwVG9TdWJJbmZvcm1hdGlvbiIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iU2hpcFRvU3ViSW5mb3JtYXRpb24iPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlNoaXBUb1N1YkxvY2F0aW9uIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTG9jYXRpb24iLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlNoaXBUb1N1YlF1YW50aXR5Ij4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUXVhbnRpdHkiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU3ViTG9jYXRpb25JdGVtUGFja2FnaW5nUmVmZXJlbmNlIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iSXRlbVBhY2thZ2luZ1JlZmVyZW5jZSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTaGlwVG9TdWJJbmZvcm1hdGlvbiIgdHlwZT0iU2hpcFRvU3ViSW5mb3JtYXRpb24iLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ikl0ZW1QYWNrYWdpbmdSZWZlcmVuY2UiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9IlBhY2thZ2VSZWZlcmVuY2UiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikl0ZW1QYWNrYWdpbmdSZWZlcmVuY2UiIHR5cGU9Ikl0ZW1QYWNrYWdpbmdSZWZlcmVuY2UiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlBhY2thZ2VSZWZlcmVuY2UiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlBhY2thZ2VJRFJlZmVyZW5jZSIgdHlwZT0ieHNkOmludCIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJQYWNrYWdlUmVmZXJlbmNlIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQYWNrYWdlUmVmZXJlbmNlIiB0eXBlPSJQYWNrYWdlUmVmZXJlbmNlIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJDYXJnb0NsYXNzaWZpY2F0aW9uIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ik5hdHVyZU9mR29vZHMiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ik9wZXJhdGlvbmFsVHlwZUNvZGVkIiB0eXBlPSJPcGVyYXRpb25hbFR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJPcGVyYXRpb25hbFR5cGVDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJUeXBlT2ZDYXJnbyIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQ2FyZ29DbGFzc2lmaWNhdGlvbiIgdHlwZT0iQ2FyZ29DbGFzc2lmaWNhdGlvbiIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJPcGVyYXRpb25hbFR5cGVDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3dWYWx1ZU5vbi1EdXRpYWJsZUNvbnNpZ25tZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG93VmFsdWVEdXRpYWJsZUNvbnNpZ25tZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGlnaFZhbHVlQ29uc2lnbm1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlck5vbi1Db250YWluZXJpemVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZWhpY2xlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm9sbC1PblJvbGwtT2ZmIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWxsZXRpemVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJpemVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcmVha2J1bGsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhemFyZG91c0NhcmdvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW5lcmFsQ2FyZ28iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpcXVpZENhcmdvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZW1wZXJhdHVyZUNvbnRyb2xsZWRDYXJnbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW52aXJvbm1lbnRhbFBvbGx1dGFudENhcmdvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3QtSGF6YXJkb3VzQ2FyZ28iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpcGxvbWF0aWMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbGl0YXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPYm5veGlvdXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik91dE9mR2F1Z2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvdXNlaG9sZEdvb2RzQW5kUGVyc29uYWxFZmZlY3RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcm96ZW5DYXJnbyIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUGFja2FnZURldGFpbCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iUGFja2FnZURldGFpbCIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mUGFja2FnZURldGFpbCIgdHlwZT0iTGlzdE9mUGFja2FnZURldGFpbCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUGFja2FnZURldGFpbCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJQYWNrYWdlVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik51bWJlck9mUGFja2FnZXMiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iTGlzdE9mUGFja2FnZSIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUGFja2FnZURldGFpbCIgdHlwZT0iUGFja2FnZURldGFpbCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUGFja2FnZVR5cGUiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlBhY2thZ2VUeXBlQ29kZWQiIHR5cGU9IlBhY2thZ2VUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUGFja2FnZVR5cGVDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJQYWNrYWdlVHlwZURlc2NyaXB0aW9uIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTGlzdE9mRGVzY3JpcHRpb24iLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUGFja2FnZVR5cGUiIHR5cGU9IlBhY2thZ2VUeXBlIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IlBhY2thZ2VUeXBlQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFlcm9zb2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsdW1pbnVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbW1vUGFjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1wb3VsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1wb3VsZS1Ob24tUHJvdGVjdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbXBvdWxlLVByb3RlY3RlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNTcGVjaWZpZWRCeVRoZURPVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXRvbWl6ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF0dGFjaG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFsZS1Db21wcmVzc2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYWxlLU5vbi1Db21wcmVzc2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYWxsb29uLU5vbi1Qcm90ZWN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbGxvb24tUHJvdGVjdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYW5kaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXJyZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhcnMtSW5CdW5kbGVPckJ1bmNoT3JUcnVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFza2V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZWFtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZWVyQ3JhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbHRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmluZ0NoZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb2FyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9hcmQtSW5CdW5kbGVPckJ1bmNoT3JUcnVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9iYmluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb2x0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3R0bGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvdHRsZWNyYXRlLUJvdHRsZXJhY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvdHRsZS1Ob24tUHJvdGVjdGVkLUJ1bGJvdXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvdHRsZS1Ob24tUHJvdGVjdGVkLUN5bGluZHJpY2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3R0bGUtUHJvdGVjdGVkQnVsYm91cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm90dGxlLVByb3RlY3RlZEN5bGluZHJpY2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJveFdpdGhJbm5lckNvbnRhaW5lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJhY2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVja2V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdWxrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdWxrLUdhcy1BdDEwMzFNYmFyQW5kMTVEZWdDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdWxrLUxpcXVlZmllZEdhcy1BdEFibm9ybWFsVGVtcGVyYXR1cmVPclByZXNzdXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdWxrLUxpcXVpZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVsay1Tb2xpZC1GaW5lUGFydGljbGVzLVBvd2RlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1bGstU29saWQtR3JhbnVsYXJQYXJ0aWNsZXMtR3JhaW5zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdWxrLVNvbGlkLUxhcmdlUGFydGljbGVzLU5vZHVsZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1bmNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdW5kbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1cmxhcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV0dCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FiaW5ldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuQ2FzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuLUN5bGluZHJpY2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5pc3RlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuLVJlY3Rhbmd1bGFyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW52YXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcmJveSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyYm95LU5vbi1Qcm90ZWN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcmJveS1Qcm90ZWN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhckxvYWQtUmFpbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FydG9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGVlc2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGVtaWNhbGx5SGFyZGVuZWRGaWJyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNodXJuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbG90aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xvdGhPckZhYnJpYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xvdGhUb3AiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvZmZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29mZmluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2lsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsYXBzaWJsZVR1YmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXByZXNzZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25leCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXItQ29tbWVyY2lhbEhpZ2h3YXlMaWZ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXItRW5naW5lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXItTWFjLUlzby1MdC5XZ3Q4WDhYMjBGb290QWlyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXItTXVsdGktV2FsbGVkLVNlY3VyZWRUb1dhcmVob3VzZVBhbGxldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLU5hdnlDYXJnb1RyYW5zcG9ydGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJzT2ZCdWxrQ2FyZ28iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcm5lclJlaW5mb3JjZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcnJ1Z2F0ZWRPclNvbGlkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3ZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JhZGxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3lsaW5kZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbWlqb2huLU5vbi1Qcm90ZWN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbWlqb2huLVByb3RlY3RlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG91YmxlLUxlbmd0aFJhY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvdWJsZS1MZW5ndGhTa2lkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb3VibGUtTGVuZ3RoVG90ZUJpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG91YmxlV2FsbENvcnJ1Z2F0ZWRCb2FyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG91YmxlLVdhbGxQYXBlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJ1bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJ5QnVsayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVmZmVsYmFnIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFZGdlUHJvdGVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWdnQ3JhdGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW52ZWxvcGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpYmVyYm9hcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpYmVyYm9hcmRNZXRhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlicmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpYnJlLVBhcGVyYm9hcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbG1wYWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJraW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZsYXNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbG8tQmluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb2FtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb290bG9ja2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3J3YXJkUmVlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJhbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyYW1lZENyYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcnVpdENyYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXNCb3R0bGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdpcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2lyZGVycy1JbkJ1bmRsZU9yQnVuY2hPclRydXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHbGFzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGFsZi1TdGFuZGFyZFJhY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhbGYtU3RhbmRhcmRUb3RlQmluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYW1wZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYWRzT2ZCZWVmIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb2dzaGVhZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9wcGVyVHJ1Y2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvdXNlaG9sZEdvb2RzQ29udGFpbmVyLVdvb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZ290Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmdvdHMtSW5CdW5kbGVCdW5jaFRydXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbklubmVyQ29udGFpbmVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdWxhdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm1lZGlhdGVDb250YWluZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybW9kYWxUcmFpbGVyT3JDb250YWluZXJMb2FkLVJhaWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Iklyb25PclN0ZWVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkplcnJpY2FuLUN5bGluZHJpY2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKZXJyaWNhbi1SZWN0YW5ndWxhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSnVnIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKdW1ibyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSnV0ZWJhZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS2VnIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Iktub2NrZG93blJhY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Iktub2NrZG93blRvdGVCaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlYWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpZnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWZ0VmFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaW5lcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpcE9yVG9wIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaXF1aWRCdWxrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvZ3MtSW5CdW5kbGVPckJ1bmNoT3JUcnVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9vc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikx1ZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXRjaEJveCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWV0YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1ldGFsQ2FucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlsa0NyYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaWx2YW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1peGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaXhlZENvbnRhaW5lclR5cGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb2lzdHVyZVJlc2lzdGFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9sZGVkUGxhc3RpYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTXNjdmFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNdWx0aXBsZS1XYWxsUGFwZXItMk9yTW9yZVdhbGxzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNdWx0aXBsZS1XYWxsUGFwZXIzT3JNb3JlV2FsbHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik11bHRpcGx5QmFnIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNdWx0aS1Sb2xsUGFjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTXVsdGl3YWxsU2FjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb2lsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RPdGhlcndpc2VTcGVjaWZpZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9uSGFuZ2VyT3JSYWNrSW5Cb3hlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25Pd25XaGVlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXJUaGFuR2xhc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyVGhhbk1ldGFsT3JQbGFzdGljVHViZXNPckdsYXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNrYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNrZWQtTm90T3RoZXJ3aXNlU3BlY2lmaWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNrZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhaWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhbGxldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWx1bWludW1QYWxsZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1ldGFsUGFsbGV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZFBhbGxldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RlZWxQYWxsZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ildvb2RQYWxsZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNsaXBTaGVldFBhbGxldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRE9UUGFsbGV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWxsZXQtMldheSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFsbGV0LTRXYXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXBlci1WY2kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcmNlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydGl0aW9uaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWVjZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpcGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpcGVsaW5lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaXBlUmFjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlwZXMtSW5CdW5kbGVPckJ1bmNoT3JUcnVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlybnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpdGNoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFua3MtSW5CdW5kbGVPckJ1bmNoT3JUcnVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhc3RpYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhc3RpYy1JbmplY3Rpb25Nb2xkZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYXN0aWMtUmVncmluZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhc3RpYy1TdHJ1Y3R1cmFsRm9hbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhc3RpYy1WYWN1dW1Gb3JtZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYXN0aWMtVmlyZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFzdGljLVdyYXBwZWRUcmF5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhdGVzLUluQnVuZGxlT3JCdW5jaE9yVHJ1c3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYXRmb3JtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb2x5ZXRoeWxlbmVMaW5lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9seXN0eXJlbmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG91Y2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1hcnlMaWZ0Q29udGFpbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcml2YXRlVmVoaWNsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVscGJvYXJkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFydGVyT2ZCZWVmIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsLVNlbWljb25kdWN0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZG5ldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVpbmZvcmNlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV2ZXJzZVJlZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm9kcy1JbkJ1bmRsZU9yQnVuY2hPclRydXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb2xsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSdWJiZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJ1YmJlckFuZEZhYnJpYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FjaGV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWEtQ2hlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlYXZhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VwYXJhdG9yT3JEaXZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGFsbG93Q3JhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoZWV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGVldG1ldGFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGVldHMtSW5CdW5kbGVPckJ1bmNoT3JUcnVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hvb2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNocmlua1dyYXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNocmlua3dyYXBwZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpZGVPZkJlZWYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpbmdsZVdhbGxDb3JydWdhdGVkQm9hcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNrZWxldG9uQ2FzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2tpZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2tpZC1FbGV2YXRpbmdPckxpZnRUcnVjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2xlZXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbGlwc2hlZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxKdW1ibyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BpbkN5bGluZGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BpbmRsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3Bvb2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YWlubGVzc1N0ZWVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RlZWwtVmlueWxDb2F0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0cmV0Y2hXcmFwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWl0Y2FzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFua0NhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFuay1DeWxpbmRyaWNhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFuay1SZWN0YW5ndWxhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFua1RydWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWEtQ2hlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpZXJjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RlQmluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmF5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmF5UGFjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJpcGxlV2FsbENvcnJ1Z2F0ZWRCb2FyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1Y2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydW5rQW5kQ2hlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydW5rLVNhbGVzbWVuU2FtcGxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcnVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHViIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUdWJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUdWJlLUNvbGxhcHNpYmxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUdWJlcy1JbkJ1bmRsZU9yQnVuY2hPclRydXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUdWJlcy1NZXRhbE9yUGxhc3RpYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHVuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbnBhY2tlZE9yVW5wYWNrYWdlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmFjdXVtLVBhY2tlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmFuUGFjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmF0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZWhpY2xlSW5PcGVyYXRpbmdDb25kaXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlaGljbGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWaWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaGVlbGVkQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2lja2VyYm90dGxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaXJlTWVzaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2lyZU9yQ29yZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29vZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV3JhcHBlZCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUGFja2FnZSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iUGFja2FnZSIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mUGFja2FnZSIgdHlwZT0iTGlzdE9mUGFja2FnZSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUGFja2FnZSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUGFja2FnZUlEIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJMaXN0T2ZJdGVtUmVmZXJlbmNlIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTGlzdE9mT3JkZXJSZWZlcmVuY2VzIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iTGlzdE9mUGFja2FnZU1hcmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iTGlzdE9mUGFja2FnZUNoYXJhY3RlcmlzdGljIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Ikxpc3RPZkRpbWVuc2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJMaXN0T2ZQYWNrYWdlRGVzY3JpcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRyYW5zcG9ydFJlZmVyZW5jZSIgdHlwZT0ieHNkOmludCIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJTcGVjaWFsSGFuZGxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkhhemFyZG91c1BhY2thZ2luZyI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IkhhemFyZG91cyIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IkFzc29jaWF0ZWREb2N1bWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlNoaXBwaW5nSW5zdHJ1Y3Rpb25zIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IlJldHVybmFibGVDb250YWluZXJJbmZvIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJQYWNrYWdlRGV0YWlsIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQYWNrYWdlIiB0eXBlPSJQYWNrYWdlIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZPcmRlclJlZmVyZW5jZXMiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Ik9yZGVyUmVmZXJlbmNlcyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mT3JkZXJSZWZlcmVuY2VzIiB0eXBlPSJMaXN0T2ZPcmRlclJlZmVyZW5jZXMiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlBhY2thZ2VNYXJrIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJQYWNrYWdlTWFyayIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mUGFja2FnZU1hcmsiIHR5cGU9Ikxpc3RPZlBhY2thZ2VNYXJrIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJQYWNrYWdlTWFyayI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUGFja2FnZU1hcmtDb2RlZCIgdHlwZT0iUGFja2FnZU1hcmtDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJQYWNrYWdlTWFya0NvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlBhY2thZ2VNYXJrVmFsdWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlBhY2thZ2VNYXJrIiB0eXBlPSJQYWNrYWdlTWFyayIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJQYWNrYWdlTWFya0NvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllcnNJbnN0cnVjdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcnJpZXItQXNzaWduZWRQYWNrYWdlSWROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcnJpZXJzSW5zdHJ1Y3Rpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb05vdE1hcmtTdXBwbGllcnNDb21wYW55TmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW50aXJlU2hpcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZHVzdHJ5SW5zdHJ1Y3Rpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWdhbFJlcXVpcmVtZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGluZUl0ZW1Pbmx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXJrQWRkaXRpb25hbGx5Q3VzdG9tZXJzQXJ0aWNsZURlc2NyaXB0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXJrQXJ0aWNsZU51bWJlckN1c3RvbWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXJrQmF0Y2hOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcmtDYXNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXJrQ3VzdG9tZXJzQ29tcGFueU5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcmtDdXN0b21lcnNSZWZlcmVuY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXJrRGF0ZU9mUHJvZHVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFya0V4Y2x1c2l2ZWx5Q3VzdG9tZXJzQXJ0aWNsZURlc2NyaXB0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXJrRXhwaXJ5RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFya0ZyZWVUZXh0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXJrR3Jvc3NXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcmtOZXRXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcmtQYWNrYWdlc0RpbWVuc2lvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcmtSdW5uaW5nTnVtYmVyT2ZQYWNrYWdlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFya1NlcmlhbFNoaXBwaW5nQ29udGFpbmVyQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFya1N1cHBsaWVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXJrVGFyZVdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFzdGVyQ2FydG9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hdG9yQXNzaWduZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhbGxldENvbmZpZ3VyYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhbGxldE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlTWFya2VkQnlCdXllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2ZXJBc3NpZ25lZERyb3Bab25lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxmLUlkZW50aWZ5aW5nQ29udGFpbmVyVmlhUmFkaW9GcmVxdWVuY3lJZERldmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VsbGVyc0luc3RydWN0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBlckFzc2lnbmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwcGVyLUFzc2lnbmVkQ2FzZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBlckFzc2lnbmVkUm9sbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBlckFzc2lnbmVkU2tpZE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1NDQy0xOCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1NDQy0xOEFuZEFwcGxpY2F0aW9uSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVBDU2hpcHBpbmdDb250YWluZXJDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVQ0NPckVBTjEyOEFwcGxpY2F0aW9uSWRlbnRpZmllckFuZERhdGEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaWZvcm1Db2RlQ291bmNpbEZvcm1hdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVBDQ29uc3VtZXJQYWNrYWdlQ29kZS0xLTUtNS0xIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZQYWNrYWdlQ2hhcmFjdGVyaXN0aWMiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9IlBhY2thZ2VDaGFyYWN0ZXJpc3RpYyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mUGFja2FnZUNoYXJhY3RlcmlzdGljIiB0eXBlPSJMaXN0T2ZQYWNrYWdlQ2hhcmFjdGVyaXN0aWMiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlBhY2thZ2VDaGFyYWN0ZXJpc3RpYyI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUGFja2FnZUNoYXJhY3RlcmlzdGljQ29kZWQiIHR5cGU9IlBhY2thZ2VDaGFyYWN0ZXJpc3RpY0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlBhY2thZ2VDaGFyYWN0ZXJpc3RpY0NvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQYWNrYWdlQ2hhcmFjdGVyaXN0aWNEZXNjcmlwdGlvbiI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IklkZW50aWZpZXIiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUGFja2FnZUNoYXJhY3RlcmlzdGljIiB0eXBlPSJQYWNrYWdlQ2hhcmFjdGVyaXN0aWMiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iUGFja2FnZUNoYXJhY3RlcmlzdGljQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2luZ1R5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwaW5nUGFja2FnZUxhYmVsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwcGluZ1BhY2thZ2VTZWFsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0TWFya2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZW9mUGFja2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFja2FnZVNwZWNpZmljYXRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNrYWdlUHJvdGVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFycGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhdGZvcm1PclNraWRMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVhcmluZ1BpZWNlTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYWNlbWVudG9uQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BhY2luZ0RpcmVjdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVubG9hZGluZ0RldmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5sb2FkaW5nRXF1aXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0TWFya2luZ1BhdHRlcm4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3RNYXJraW5nTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhY2thZ2VPckNvbnRhaW5lck1hcmtMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFya2luZ01ldGhvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29yZUNoYXJhY3RlcmlzdGljcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2aW5nRmFjaWxpdHlMaW1pdGF0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFnZ2luZ09yQmFyQ29kZUluc3RydWN0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2tpZE9yUGFsbGV0VHlwZSIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUGFja2FnZURlc2NyaXB0aW9uIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJQYWNrYWdlRGVzY3JpcHRpb24iLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZlBhY2thZ2VEZXNjcmlwdGlvbiIgdHlwZT0iTGlzdE9mUGFja2FnZURlc2NyaXB0aW9uIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJQYWNrYWdlRGVzY3JpcHRpb24iPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJMaXN0T2ZQYWNrYWdlSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQ29udGFpbmVyQ291bnRlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iTG9hZE9yZGVyQ291bnRlciIgdHlwZT0ieHNkOmludCIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUGFja2FnZURlc2NyaXB0aW9uIiB0eXBlPSJQYWNrYWdlRGVzY3JpcHRpb24iLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlBhY2thZ2VJZGVudGlmaWVyIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJQYWNrYWdlSWRlbnRpZmllciIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mUGFja2FnZUlkZW50aWZpZXIiIHR5cGU9Ikxpc3RPZlBhY2thZ2VJZGVudGlmaWVyIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJQYWNrYWdlSWRlbnRpZmllciI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUGFja2FnZUlkZW50aWZpZXJDb2RlZCIgdHlwZT0iUGFja2FnZUlkZW50aWZpZXJDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJQYWNrYWdlSWRlbnRpZmllckNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlBhY2thZ2VJZGVudGlmaWVyVmFsdWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlBhY2thZ2VJZGVudGlmaWVyIiB0eXBlPSJQYWNrYWdlSWRlbnRpZmllciIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJQYWNrYWdlSWRlbnRpZmllckNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFQU44T3JFQU4xM0JhcmNvZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJVEYxNE9ySVRGNkJhcmNvZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVQ0NPckVBTjEyOEJhcmNvZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBRFIiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlNwZWNpYWxIYW5kbGluZyI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iU3BlY2lhbEhhbmRsaW5nQ29kZWQiIHR5cGU9IlNwZWNpYWxIYW5kbGluZ0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlNwZWNpYWxIYW5kbGluZ0NvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlNwZWNpYWxIYW5kbGluZ05vdGUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlNwZWNpYWxIYW5kbGluZyIgdHlwZT0iU3BlY2lhbEhhbmRsaW5nIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IlNwZWNpYWxIYW5kbGluZ0NvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWVkUmVzdHJpY3RlZFRvMTVNaWxlc1BlckhvdXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWVkUmVzdHJpY3RlZFRvMjVNaWxlc1BlckhvdXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWVkUmVzdHJpY3RlZFRvMzVNaWxlc1BlckhvdXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWVkUmVzdHJpY3RlZFRvNDVNaWxlc1BlckhvdXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vRmFjaWFsSGFpciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FySXNBaXJCcmFrZUNvbnRyb2xsZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbWVyUmVxdWlyZWRQYWNraW5nTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJSZXF1aXJlZFBST051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJSZXF1aXJlZEFwcG9pbnRtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2FkT25Ub3BPZlJlc2lkdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3Bvc2VPZlJlc2lkdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF0dGFjaG1lbnQtQXV0b0tleXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF0dGFjaG1lbnRUb01vdmVXaXRoQ2FyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbm51YWxWb2x1bWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF0dGFjaG1lbnRzLUFkdmFuY2VPbmx5V2F5YmlsbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xlYXJpbmdob3VzZUJhbGFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJsb3dhYmxlTG9hZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSWZCYWRPcmRlcmVkTm90aWZ5U2hpcHBlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbFNoaXBwZXJGb3JXZWlnaENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyQ29uc29saWRhdG9yTG9hZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXR0YWNobWVudC1DdXN0b21lcnNEb2N1bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xlYXJlZEZvckV4cG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyRmFjdG9yeUxvYWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNJbnNwZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdHRhY2htZW50LUNvdHRvbk1hbmlmZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb01hcnNoYWxsaW5nUmVxdWlyZWRGb3JIYXphcmRvdXNNYXRlcmlhbHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNpcmN1c1JhbXBPbmx5VE9GQ1ZhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbENvbnNpZ25lZUZvcldlaWdoQ2hhcmdlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG9wTG9hZE9ubHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmljYXRpb25UaGF0VGhpc1NoaXBtZW50SXNGb3JSZWN5Y2xpbmdBc0RlZmluZWRJbkFwcGxpY2FibGVUYXJpZmZzQ29udGFpbmluZ1N1Y2hQcm92aXNpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYW5nZXJvdXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbXVycmFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9tZXN0aWMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwZXJBdXRob3JpemF0aW9uUmVxdWlyZWRGb3JEaXZlcnNpb25PckNvbnNpZ25tZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcm9wWWFyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlPbmx5T25TdXJyZW5kZXJPZldyaXR0ZW5PcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVhZEluVG93Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb05vdFVuY291cGxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVpcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc3RpbmF0aW9uV2VpZ2h0c0FwcGx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGNlc3NpdmVEaW1lbnNpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGVjdHJvbmljRXF1aXBtZW50VHJhbnNmZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVudmlyb25tZW50YWxDb250cm9sTGltaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBlZGl0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0dXJuRW1wdHlWaWFSZXZlcnNlUm91dGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhbWFnZXNJbmN1cnJlZElmU2hpcG1lbnRGYWlsc1RvTWVldFZlc3NlbExvYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4Y2Vzc2l2ZVdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwbG9zaXZlRmxhbW1hYmxlR2FzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGYWNlQS1FbmRUb0hlYWRPZlRyYWluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGYWNlQi1FbmRUb0hlYWRPZlRyYWluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3ZpbmdVbmRlckZvckZ1cnRoZXJhbmNlSW5zdHJ1Y3Rpb25zQW5kTWF5QmVEZWxpdmVyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1bGxTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGFtbWFibGVHYXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZsYW1tYWJsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxhbW1hYmxlUG9pc29uR2FzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmFnaWxlLUhhbmRsZVdpdGhDYXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb250cmFuc2l0RmxhdFNoaXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmFpbkluc3BlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYWRFbmRDYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvdXNlaG9sZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kb3JzZWRBc0hhemFyZG91c01hdGVyaWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb2xkRm9yT3JkZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWF0ZWRQcmlvclRvTG9hZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9tZUZvclJlcGFpciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGlnaFZhbHVlTG9hZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGlnaFdpZGVMb2FkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbi1Cb25kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBtZW50VG9CZUluc3BlY3RlZEF0RGVzdGluYXRpb25BbmREaXNwb3NpdGlvbkluc3RydWN0aW9uc1dpbGxCZUZ1cm5pc2hlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJvZmZpY2VNb3ZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXBvcnRTaGlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbEluY2VudGl2ZVJhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cnZlaWxsYW5jZVNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikp1bmN0aW9uU2V0dGxlbWVudEFjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhbmRCcmlkZ2VJbXBvcnRPckV4cG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyVHJpcExlYXNlZFRvQ29uc2lnbmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2FkaW5nRGV2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hZGVkVG9GdWxsVmlzaWJsZUNhcGFjaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZXNzVGhhbkNvbnRhaW5lckNvbnNvbGlkYXRvckxvYWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3RlY3RMb3dlc3RUaHJvdWdoUmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVzc1RoYW5Db250YWluZXJGYWN0b3J5TG9hZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYWxTZXJ2aWNlT25seSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVzc1RoYW5GdWxsQ2FybG9hZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyc29uSW5DaGFyZ2VPZkNhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xlYXJlZEZvckJvcmRlckNyb3NzaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNdWx0aXBsZVBpY2t1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVjaGFuaWNhbFJlZnJpZ2VyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdGlmeUNvbnNpZ25lZUJlZm9yZURlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb05vdERpdmVydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9TcGVjaWFsRW50cmFpbm1lbnRSZXF1aXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9Ob3RIdW1wIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXdFcXVpcG1lbnRGaXJzdFRyYW5zYm9yZGVyTW92ZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvTm90UG9vbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90aWZ5U2hpcHBlckJlZm9yZVJlY29uc2lnbm1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvTm90VHJhbnNmZXJDb250ZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5DYXNlT2ZGaXJlRG9Ob3RVc2VXYXRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90Rm9yRXhwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tb2RpdHlMb2FkZWRMZXNzVGhhbk9yRXF1YWxUb1RoZUNhck9yZGVyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXJ3ZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcmlzaGFibGVJbkJveENhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpdmF0ZWx5Q29udHJvbGxlZFByaXZhdGVFcXVpcG1lbnRTdWJqZWN0VG9EZW11cnJhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvaXNvbm91c0dhcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSWNlZFByaW9yVG9Mb2FkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0UHJvdGVjdGlvblNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF0dGFjaG1lbnQtUHJlcGFpZFdheWJpbGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldHVybkF1dGhvcml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbmRlckJpbGxGb3JDaGFyZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlscm9hZENvbnRyb2xsZWRQcml2YXRlRXF1aXBtZW50U3ViamVjdFRvRGVtdXJyYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWRpb2FjdGl2ZU1hdGVyaWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSdXNoT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYXJSaWRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zcGVjdEhvdXJseUlmQ2FyU3RvcHBlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjb3JkRm9yVHJhbnNpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBlckxvYWRPckNhcnJpZXJDb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hvdmVUb1Jlc3RBbmRDb3ZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3ViamVjdFRvU3BlY2lhbERldGVudGlvblJ1bGVzT3JDaGFyZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdHRhY2htZW50LVNoaXBwZXJzRXhwb3J0RG9jdW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaWZ0YWJsZUxvYWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBUb0Nyb3NzRG9ja09yUG9vbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWlyZXNTaGVsZkNvdXBsZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdHRhY2htZW50LVNoaXBwZXJzTWFuaWZlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF0dGFjaG1lbnQtU2hpcHBlcnNQYWNraW5nSW5zdHJ1Y3Rpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVlZFJlc3RyaWN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YWNrVHJhaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0cmV0Y2hXcmFwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJzVGVtcG9yYXJpbHlBcnRpY3VsYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaWxlckNvbnNvbGlkYXRvckxvYWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWlsZXJGYWN0b3J5TG9hZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHVybkNhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNpdFNoaXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWFtVHJhY2tEZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGltZVZvbHVtZVJhdGVzT25seSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5sb2FkQXRCdW1wZXJDaXJjdXNSYW1wIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0aXplZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5sb2FkRnJvbUxlZnRTaWRlT2ZDYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVubG9hZEFzUGxhY2FyZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbnByb3RlY3RlZFBlcmlzaGFibGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVubG9hZEZyb21SaWdodFNpZGVPZkNhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBlckNlcnRpZmllc0dyb3NzV2VpZ2h0VW5kZXIyNDAwMDBQb3VuZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlcmlmaWNhdGlvbldlaWdoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZW50aWxhdGlvbkluc3RydWN0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2lkZS1Cb2R5UGlja3VwVHJ1Y2tBcHBsaWVzVG9GaW5pc2hlZFZlaGljbGVMb2FkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYWl2ZWRJbnNwZWN0aW9uLVNldERpcmVjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2VpZ2hFbXB0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXR0YWNobWVudHMtSGlnaFdpZGVOb3RpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhaXZlSW5zcGVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFuaWZlc3RNdXN0QWNjb21wYW55V2F5YmlsbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2VpZ2hUb0NoZWNrRm9yT3ZlcmxvYWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ildhc3RlV2F0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3Jvc3NUb3duIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZhbmNlZEZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VydGlmaWNhdGVPZk9yaWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnVlbFN1cmNoYXJnZUF1dGhvcml6ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZnNob3JlLUFsYXNrYU9ySGF3YWlpU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3ZlcnNpemVkUHJlbWl1bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlcGFyYXRpb25PZkFpcldheWJpbGwtT3JpZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVwYXJhdGlvbk9mQ2FuYWRpYW5DdXN0b21zSW52b2ljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlcGFyYXRpb25PZkV4cG9ydEVudHJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVwYXJhdGlvbk9mSW5zdXJhbmNlQ2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXBhcmF0aW9uT2ZVLlMuRXhwb3J0RG9jdW1lbnRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2F0dXJkYXlEZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2F0dXJkYXlQaWNrLVVwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWN1cml0eVNpZ25hdHVyZVNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldyaXR0ZW5Qcm9vZk9mRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZ3JlZ2F0ZTEwMDAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZ3JlZ2F0ZTMwMDAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZ3JlZ2F0ZTUwMDAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF0dGVuZGFudHNBY2NvbXBhbnlpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmFuY2VMb2FkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJDcmFmdEZ1cm5pc2hlZEFuZE5vdFVzZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZ3JlZ2F0ZVRlbmRlckRpc2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcm1lZEd1YXJkU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkaXRpb25hbEluamVjdGlvbk9yQmxlbmRpbmdTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3J0Q2hhbmdlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVXNlT2ZBbHRlcm5hdGVUZXJtaW5hbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQS5NLkRlbGl2ZXJ5UmVxdWlyZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFuY2hvcmluZ0FuZFVuYW5jaG9yaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRpdGlvbmFsQ29weU9mU2hpcHBpbmdQYXBlcnNGb3JQcm9vZk9mRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpYW5jZVNlcnZpY2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWlyQ29uZGl0aW9uaW5nRGlzY29ubmVjdEFuZENvbm5lY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhaWxBcm1lZEd1YXJkU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWlyUmlkZVRyYWN0b3JTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJSaWRlVHJ1Y2tTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NlbWJseVNlcnZpY2VSZXF1ZXN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1eGlsaWFyeVNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ5cGFzc0NvbnNvbGlkYXRpb25Qb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVsa3lBcnRpY2xlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCbG9ja2luZ0FuZEJyYWNpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJsaW5kU2hpcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvbHN0ZXJMb2FkRG9Ob3RTd2l0Y2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJveGluZ1NlcnZpY2UtRHJ5QnVsayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVua2VyU3VyY2hhcmdlQXV0aG9yaXplZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVua2VyQWRqdXN0bWVudC0yMEZvb3RDb250YWluZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1bmtlckFkanVzdG1lbnQtNDBGb290Q29udGFpbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdW5rZXJBZGp1c3RtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW5jeUFkanVzdG1lbnQtMjBGb290Q29udGFpbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW5jeUFkanVzdG1lbnQtNDBGb290Q29udGFpbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb2VlQ2FyT3JQaWNrLVVwVHJ1Y2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnZlcnRDb21tZXJjaWFsQmlsbE9mTGFkaW5nQm9sVG9Hb3Zlcm5tZW50Qm9sIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJyaWVyQ2Fib29zZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ycm9zaW9uQWRkaXRpdmVTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zRmVlcy1Db250YWluZXJMZXZlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0ZlZXMtTGlmdExldmVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJyaWVyR3VhcmRDYXJTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXR1cm5DYXJyaWVyR3VhcmRDYXJTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJnb1RheGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFpbkFuZEJpbmRlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1lcmNpYWxJbnZvaWNlUHJlcGFyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnN0YW50U3VydmVpbGxhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGVhbmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xhc3NSYXRlc0FwcGxpZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbWIuUmF0ZXNPdmVyRGV0cm9pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc29saWRhdGlvbkFuZExpbmVIYXVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zb2xpZGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFJhdGVzQXBwbHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmljYXRpb25UaGF0VGhlTmV3c3ByaW50V2luZGluZ0NvcmVzQmVpbmdSZXR1cm5lZEVtcHR5V2VyZVJlY2VpdmVkRmlsbGVkQnlSYWlsRnJlaWdodFNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNpZ25lZVVubG9hZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291cmllck92ZXJuaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29waWxvdFNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNQYXBlcnNNYWlsZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lckxlYXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VyaWVyU2FtZURheSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJubWVudENhYm9vc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyb2xsZWRBdG1vc3BoZXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJNb3VudGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2lyY3VpdG91c1JvdXRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnJlbmN5QWRqdXN0bWVudC1CcmVha0J1bGsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvdWJsZVdpZGVTZXBhcmF0ZUFuZFJlYXNzZW1ibGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5T2ZGdWVsRnJvbUJhcmdlVG9QaXBlbGluZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9kQ29uc3RhbnRTdXJ2ZWlsbGFuY2VTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEdWFsRHJpdmVyV2l0aE5hdGlvbmFsQWdlbmN5Q2hlY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1YWxEcml2ZXJQcm90ZWN0aXZlU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlyZWN0RGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyYXlhZ2VBdFBvcnRPZkRlYmFya2F0aW9uUmF0ZVpvbmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5U2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGV0ZW50aW9uT2ZDb252ZXlpbmdFcXVpcG1lbnRBbmRUaGVQb3dlclVuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRldGVudGlvbk9mQ29udmV5aW5nRXF1aXBtZW50RXhjbHVkaW5nVGhlUG93ZXJVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcmF5YWdlQXRQb3J0T2ZFbWJhcmthdGlvblJhdGVab25lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLZWVwRnJvbUZyZWV6aW5nUGVyY2VudERpZmZlcmVudGlhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNDEwRHJvbWVkYXJ5V2l0aE1lY2hhbmljYWxSZXN0cmFpbmluZ0RldmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjQxMERyb21lZGFyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpYnV0aW9uU2VydmljZVJlcXVlc3RlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlPZkZ1ZWxGcm9tUmFpbFRhbmtDYXJUb1BpcGVsaW5lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RpZnlTaGlwcGVySW1tZWRpYXRlbHlJZlNoaXBtZW50SXNEZWxheWVkRW5Sb3V0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9Ob3RDb3VwbGVUb090aGVyRGlhcGhyYWdtZWRDYXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb05vdEZyZWV6ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9Ob3RDb3VwbGVUb1RhbmtDYXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGF0aW9uLVNwZWNpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lckRpdmVyc2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlPZkZ1ZWxGcm9tUGlwZWxpbmVUb0JhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcmF5YWdlQXRQb3J0T2ZEZWJhcmthdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJheWFnZUF0UG9ydE9mRW1iYXJrYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5T2ZGdWVsRnJvbVBpcGVsaW5lVG9SYWlsVGFua0NhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlPZkZ1ZWxGcm9tUGlwZWxpbmVUb1RhbmtUcnVja09yVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGV0ZW50aW9uV2l0aFBvd2VyVW5pdHMzME1pbnV0ZVBlcmlvZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyb3AtT2ZmRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRydW1taW5nU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9Ob3RDb3VwbGVUb0RvdWJsZVNoZWxmQ291cGxlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJvbWVkYXJ5V2l0aE1lY2hhbmljYWxSZXN0cmFpbmluZ0RldmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyb21lZGFyeVNlcnZpY2VSZXF1ZXN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvb3JTaWRlVmFubmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFib3JBc3NvY2lhdGVkV2l0aERldGVudGlvbk9mQ29udmV5aW5nRXF1aXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeU9mRnVlbEZyb21UYW5rVHJ1Y2tPclRyYWlsZXJUb1BpcGVsaW5lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXRlbnRpb25WZWhpY2xlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXRlbnRpb25XaXRoUG93ZXJVbml0czYwTWludXRlUGVyaW9kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXh0cmFBeGxlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXNjb3J0T3JDb3VyaWVyU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wdHlSYWlsY2FyT3JkZXJlZEJ1dE5vdFVzZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWlwbWVudEhvc2VBdERlc3RpbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVpcG1lbnRIb3NlQXRPcmlnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4Y2x1c2l2ZVVzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXh0cmFMaWdodHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtZXJnZW5jeVNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcHR5TW92ZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZG9yc2VtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXB0eVJldHVybiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2F0aXNmYWN0b3J5U2VydmljZVN0YW5kYXJkcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhjZXNzaXZlVmFsdWF0aW9uQXV0aG9yaXplZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhjbHVzaXZlVXNlT2ZWZWhpY2xlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHRyYURyaXZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXh0cmFMZW5ndGhTdXJjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cG9ydFByZXBhcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBlZGl0ZWRSYXRlc0FwcGxpZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGVkaXRlZFNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4dHJhTGFib3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4Y2x1c2l2ZVVzZU9mVmVoaWNsZURhbWFnZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGFuZFJlbW92ZUFuZEluc3RhbGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvYWR3YXlFYXN5UmF0ZXNBcHBsaWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXJnZUZyZWlnaHRBbGxLaW5kc1NlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpcmVhcm1zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdXJuaXNoaW5nQ2hhc3NpcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnVlbEZpbHRlcnNGdXJuaXNoZWRCeUNhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1ZWxGaWx0ZXJzRnVybmlzaGVkQnlTaGlwcGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGF0cmFja1N1cmNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yUHJvY2Vzc2luZ0luVHJhbnNpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjZXB0ZWRCeUNhcnJpZXJBdE93bmVyU1Jpc2tPZkZyZWV6aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JTdG9yYWdlSW5UcmFuc2l0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaWx0cmF0aW9uU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FybWVudFN1cmNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJubWVudC1Pd25lZENvbnRhaW5lcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdvdmVybm1lbnRHdWFyZENhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JlYXRlclNlY3VyaXR5U2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9sZEF0TG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhbmRsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYW5kQnJha2VzQXRFYWNoRW5kTXVzdEJlUmVsZWFzZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBtZW50SG9sZG92ZXJGb3JIb2xpZGF5cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcG1lbnRIb2xkb3ZlckZvcldlZWtlbmRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWF0SW5UcmFuc2l0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWF0LVNwZWNpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYXRXaXRoU3RlYW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY2Vzc2libGVIYXphcmRvdXNNYXRlcmlhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5hY2Nlc3NpYmxlSGF6YXJkb3VzTWF0ZXJpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1bmRheU9ySG9saWRheVBpY2t1cE9yRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjI0SG91ckF2YWlsYWJpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9zZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbEhvc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhpZ2hDdWJlVHJhaWxlclJhdGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWF0ZXJPclJlZnJpZ2VyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhpdGNoSW5zdGFsbGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYXphcmRvdXNNYXRlcmlhbHNTdXJjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhemFyZG91c0NhcmdvT25EZWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJZGxlckNhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zaWRlRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkljaW5nSW5oaWJpdG9yU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW1wYWN0b2dyYXBocyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJtb2RhbFNoaXBtZW50U2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50cmEtUGxhbnRNb3ZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnNpZGVQaWNrdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybGluZVRyYW5zZmVyU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSnVzdC1Jbi1UaW1lSml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKb2ludExpbmVFeGNlcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmljYXRpb25UaGF0VGhlQ29udGFpbmVyc0JlaW5nUmV0dXJuZWRFbXB0eVdlcmVSZWNlaXZlZEZpbGxlZEJ5UmFpbEZyZWlnaHRTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLZWVwTWF0ZXJpYWxEcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm9yRGlzdHVyYmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxheW92ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGx5QVVDQ09yRUFOU2VyaWFsU2hpcHBpbmdDb250YWluZXJMYWJlbFRvVGhlU2hpcHBpbmdDb250YWluZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWdodEJhclNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxvd0JveVRyYWlsZXJPckZsYXRCZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhbmRDdXJyZW5jeUFkanVzdG1lbnRGYWN0b3ItMjBGb290Q29udGFpbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYW5kQ3VycmVuY3lBZGp1c3RtZW50LTQwRm9vdENvbnRhaW5lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyY2VudERpZmZlcmVudGlhbC1MZXNzVGhhbkNvbnRhaW5lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVzc1RoYW5Db250YWluZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpbmVoYXVsRnJvbVBvcnRPZkRlYmFya2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaW5laGF1bFNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpYWJpbGl0eU9mQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGluZXJUZXJtc0F0UG9ydE9mRGViYXJrYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpbmVyVGVybXNBdFBvcnRPZkVtYmFya2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaW5laGF1bFBlcmNlbnREaWZmZXJlbnRpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpbmVoYXVsVG9Qb3J0T2ZFbWJhcmthdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVzc1RoYW5UcnVja2xvYWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxheW92ZXJTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb2RpZmllZEF0bW9zcGhlcmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzY29ydFNlcnZpY2VXaXRoT3Zlcm5pZ2h0U3Vic2lzdGVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzY29ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXNjb3J0U2VydmljZXNUZWxlcGhvbmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VsYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW90b3JTdXJ2ZWlsbGFuY2VTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmcmlnZXJhdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaWxpdGFyeVRyYWZmaWNFeHBlZGl0aW5nU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbE1vdG9yU3VydmVpbGxhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb05vdEh1bXBPckh1bXBJbnRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb05vdFVzZUhlbHBlckxvY29tb3RpdmVUb1B1c2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vUGxhY2FyZHNSZXF1aXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9zZVNpZGVWYW5uaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG93QXdheUZyb21IZWF0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCbG9ja1N0b3dhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcmdvQWJvYXJkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJyaWVyTG9hZEFuZENvbnNpZ25lZVVubG9hZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3ZlckhlaWdodENvbnRhaW5lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGxldGluZ1NoaXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeVZlcmlmaWNhdGlvbk5vdFJlcXVpcmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG93V2l0aERvb3JzRmFjaW5nSW53YXJkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGVtcHRDb21tb2RpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluRnJvbnRPZkhvdXNlU3Rvd2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnVtaWdhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGFybWxlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9pbEZpZWxkU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVXNlTm9Ib29rcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90UmVzdHJpY3RlZENhcmdvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJnb09uQm9hcmRDZXJ0aWZpY2F0aW9uUmVxdWlyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9uRGVja1N0b3dhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcnJpZXJMb2FkQW5kQ2FycmllclVubG9hZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyaXNoYWJsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydGlhbFNoaXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG93QmVsb3dEZWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG93QmV0d2VlbkRlY2tzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZW1wZXJhdHVyZUNvbnRyb2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpbWVPZkRlbGl2ZXJ5QW5kU2lnbmF0dXJlUmVxdWlyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9uVG9wSW4tSGF0Y2hTdG93YWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPblRvcE9uLURlY2tTdG93YWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbFNoaXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmRlckNvbnRhaW5lck9uLURlY2tTdG93YWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZWxvd1dhdGVyTGluZVN0b3dhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXJmbG93Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdmVyV2lkdGhDb250YWluZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9uZVdheVJhdGVzQXBwbGllZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVtcGluZ0VxdWlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlja3VwT2ZTaGlwbWVudHNPblNhdHVyZGF5U3VuZGF5QW5kT3JIb2xpZGF5c1JlcXVpcmluZ0Fic29sdXRlTmV4dERheURlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWNrdXBBbmREZWxpdmVyeUZyb21TdG9yYWdlSW5UcmFuc2l0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWNrdXBBbmREZWxpdmVyeUJleW9uZFNlcnZpY2VBcmVhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsUGVybWl0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvdGVjdEZyb21IZWF0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJIb3VyUmF0ZXNBcHBsaWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWVyVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFsbGV0c09yU2tpZHNPclBsYXRmb3JtcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUC5NLkRlbGl2ZXJ5UmVxdWlyZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlck1pbGVSYXRlc0FwcGx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWNrdXBPZlNoaXBtZW50c1JlcXVpcmluZ1NhbWVEYXlEZWxpdmVyeVNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpY2t1cE9mU2hpcG1lbnRzUmVxdWlyaW5nU2FtZURheURlbGl2ZXJ5U2VydmljZUFuZE9yRGVsaXZlcnlBdEFTcGVjaWZpZWRUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWFub09yT3JnYW5DYXJyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9zaXRpb25pbmdBdE9yaWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlja3VwQW5kRGVsaXZlcnlTZXJ2aWNlRm9yUGVyaXNoYWJsZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWxvZGdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdHVmZmluZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvdGVjdGl2ZVNlcnZpY2VTZWN1cml0eVdpdGhBcm1lZEd1YXJkcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvdGVjdGl2ZVNlY3VyaXR5U2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvdGVjdGl2ZVRhcnBGb3JTZWN1cml0eVB1cnBvc2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWNrdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpY2t1cEFuZERlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNrQW5kVW5wYWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQVVBUcmFpbGVyUmF0ZXNBcHBseSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9uZGVkUHJpdmF0ZWx5T3duZWRWZWhpY2xlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXRlbnRpb25PZlByaXZhdGVseU93bmVkVmVoaWNsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5vcGVyYWJsZVByaXZhdGVseU93bmVkVmVoaWNsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hZGluZ09yVW5sb2FkaW5nT2ZQcml2YXRlbHlPd25lZFZlaGljbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaXZhdGVPd25lZFZlaGljbGVQcm9jZXNzaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9wLU9mZnNGb3JQcml2YXRlbHlPd25lZFZlaGljbGVTaGlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpdmF0ZWx5T3duZWRWZWhpY2xlSW5UcnVja2F3YXlTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvcml0eVNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY29uc2lnbm1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhaWxoZWFkSGFuZGxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvYWRyYWlsZXJTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNwb3R0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNpZGVudGlhbERlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWVmZXJNYWludGVuYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsZWFzZWRWYWx1ZUNoYXJnZUluRXhjZXNzT2ZDYXJyaWVyTWF4aW11bUxpYWJpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsb2NhdGlvbk9mVmVoaWNsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0dXJuT2ZFbXB0eUNvbnRhaW5lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0dXJuTW92ZW1lbnRPZlBhbGxldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbFN1cnZlaWxsYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVlZmVyQ2FyZ29QZXJjZW50RGlmZmVyZW50aWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb3VuZFRyaXBTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNoaXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXN0cmljdGVkU3BlZWRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNlcnZhdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJld2VpZ2h0UmVxdWVzdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwbWVudEhvbGRvdmVyT25XZWVrZW5kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2F0dXJkYXlQaWNrdXBPckRlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsQ29udGFpbmVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBlckxvYWRBbmRDb25zaWduZWVVbmxvYWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwbGl0RGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxEcm9tZWRhcnlTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsRXF1aXBtZW50Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwcGVyRXhwb3J0RGVjbGFyYXRpb25SZXF1aXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhaXJzRWxldmF0b3JFeGNlc3NDYXJyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZUNoYXJnZUFwcGxpZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY3VyaXR5RXNjb3J0VmVoaWNsZVNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpbmdsZUZhY3Rvck9yaWdpbmF0aW9uT3JEZXN0aW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2luZ2xlRmFjdG9yT3JpZ2luYXRpb25PclBvcnRPZkRlYmFya2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaW5nbGVGYWN0b3JQb3J0T2ZFbWJhcmthdGlvbk9yRGVzdGluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxUcmFpbk1vdmVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaW5nbGVTaGlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcG1lbnRIb2xkb3Zlck9uSG9saWRheXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwZXJMb2FkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwbWVudEhvbGRvdmVyT25XZWVrZGF5cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2tpcnRpbmdBbmRVbnNraXJ0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwcGVyTG9hZEFuZENvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbWFsbFBhY2thZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zbWl0QVNoaXBOb3RpY2VPck1hbmlmZXN0VHJhbnNhY3Rpb25TZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhdGVsbGl0ZVN1cnZlaWxsYW5jZVNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBtZW50RnJvbU5vbi1UZW1wU3RvcmFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvcC1PZmYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwZXJMb2FkQW5kQ2FycmllclVubG9hZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbFBlcm1pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3ByZWFkZXJTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcG90Rm9yU3RvcmFnZS1Ob1NoaXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGxpdFBpY2t1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvcmFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VydmV5aW5nUm91dGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdHJpcHBpbmdTb3J0aW5nQW5kQ29uc29saWRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3Vic3RpdHV0ZVNlcnZpY2VOb3RUb0JlVXNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9sZUxhc2hpbmdFcXVpcG1lbnRQbGVTdXJjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbmR1Y3Rpdml0eU9yQW50aS1TdGF0aWNBZGRpdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvcC1PZmZBdERlc3RpbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG93YWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9wLU9mZkF0T3JpZ2luYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpZ25hdHVyZUFuZFRhbGx5UmVjb3JkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcG90Rm9yVW5sb2FkaW5nRnJvbUFFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwb3RGb3JVbmxvYWRpbmdGcm9tQkJyYWtlRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBlcnZpc29yUmVxdWVzdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9yYWdlT2ZWZWhpY2xlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1Y2tsb2FkLURvdWJsZU9wZXJhdG9yLUNvbW1vbkNhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydWNrbG9hZC1Eb3VibGVPcGVyYXRvci1QYWRkZWRWYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcm1pbmFsSGFuZGxpbmdDaGFyZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZW5kZXJlZEFzVHJ1Y2tsb2FkVHJ1Y2tsb2FkU2VydmljZVJlcXVlc3RlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTXVsdGktVGFua1N1cnZlaWxsYW5jZVNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbmRlcmluZ09mTXVsdGlwbGVWZWhpY2xlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaWxlck9uRmxhdENhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhpcmRQYXJ0eVNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWN0b3JPbmx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcnVja1JhdGVzQXBwbGljYWJsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaWxlclByZXBhcmF0aW9uLVNwZWNpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcm1pbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc2ZlclByb2R1Y3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpcmVSZXBhaXJBbmRSZXBsYWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFkZVNob3ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWN0b3JBbmRUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcnVja2xvYWQtU2luZ2xlT3BlcmF0b3ItQ29tbW9uQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1Y2tsb2FkLVNpbmdsZU9wZXJhdG9yLVBhZGRlZFZhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFua1N1cnZlaWxsYW5jZVNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuZGVyQ2FycmlhZ2VGdXJuaXNoZWRCeUNhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVucGFja2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5sb2FkaW5nT3JSZWxvYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlV0aWxpdGllc0Rpc2Nvbm5lY3RBbmRDb25uZWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYWN1dW1TZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb2VlVmFuVHlwZVRydWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYW5DbGVhbmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVoaWNsZXNGdXJuaXNoZWRCdXROb3RVc2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZWhpY2xlc0lub3BlcmFibGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b3AtT2ZmRGVsaXZlcnlPZlBlcnNvbmFsVmVoaWNsZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlaGljbGVzSW5UcnVja2F3YXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldoYXJmYWdlLUJyZWFrYnVsayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2hhcmZhZ2UtQ29udGFpbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXRlcmZyb250RGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldoYXJmYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJSaXNrQ3Jld0JvbnVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJSaXNrSW5zdXJhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYWl0aW5nVGltZUF1dGhvcml6ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldlaWdodFZlcmlmaWNhdGlvbiIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQXNzb2NpYXRlZERvY3VtZW50cyI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Ikxpc3RPZkRvY3VtZW50TG9vc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iTGlzdE9mRG9jdW1lbnRBdHRhY2hlZCIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQXNzb2NpYXRlZERvY3VtZW50cyIgdHlwZT0iQXNzb2NpYXRlZERvY3VtZW50cyIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRG9jdW1lbnRMb29zZSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5hbWU9IkRvY3VtZW50TG9vc2UiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJQYWNrYWdlRG9jIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZkRvY3VtZW50TG9vc2UiIHR5cGU9Ikxpc3RPZkRvY3VtZW50TG9vc2UiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlBhY2thZ2VEb2MiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRG9jdW1lbnRUaXRsZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iRG9jdW1lbnRUeXBlQ29kZWQiIHR5cGU9IkRvY3VtZW50VHlwZUNvZGUiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iRG9jdW1lbnRUeXBlQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQYWNrYWdlRG9jIiB0eXBlPSJQYWNrYWdlRG9jIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkRvY3VtZW50VHlwZUNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0ZU9mQW5hbHlzaXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmljYXRlT2ZDb25mb3JtaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0ZU9mUXVhbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVzdFJlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdFBlcmZvcm1hbmNlUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0U3BlY2lmaWNhdGlvblJlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvY2Vzc0RhdGFSZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpcnN0U2FtcGxlVGVzdFJlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpY2VTYWxlc0NhdGFsb2d1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlJbmZvcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbExhYmVsQXBwcm92YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbGxDZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9zdFJlY2VpcHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldlaWdodENlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWlnaHRMaXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tYmluZWRDZXJ0aWZpY2F0ZU9mVmFsdWVBbmRPcmlnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vdmVtZW50Q2VydGlmaWNhdGVBVHIxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0ZU9mUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YWxpdHlEYXRhTWVzc2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3BvbnNlVG9RdWVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdHVzSW5mb3JtYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3RvdyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyRGlzY2hhcmdlTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ycG9yYXRlU3VwZXJhbm51YXRpb25Db250cmlidXRpb25zQWR2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmR1c3RyeVN1cGVyYW5udWF0aW9uQ29udHJpYnV0aW9uc0FkdmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ycG9yYXRlU3VwZXJhbm51YXRpb25NZW1iZXJNYWludGVuYW5jZU1lc3NhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZHVzdHJ5U3VwZXJhbm51YXRpb25NZW1iZXJNYWludGVuYW5jZU1lc3NhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpZmVJbnN1cmFuY2VQYXlyb2xsRGVkdWN0aW9uc0FkdmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5kZXJib25kUmVxdWVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5kZXJib25kQXBwcm92YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmljYXRlT2ZTZWFsaW5nT2ZFeHBvcnRNZWF0TG9ja2VycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyZ29TdGF0dXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVudG9yeVJlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSWRlbnRpdHlDYXJkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNwb25zZVRvQVRyYWRlU3RhdGlzdGljc01lc3NhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhY2NpbmF0aW9uQ2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhc3Nwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcml2aW5nTGljZW5jZU5hdGlvbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcml2aW5nTGljZW5jZUludGVybmF0aW9uYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWVQYXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWFzb25UaWNrZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydFN0YXR1c1JlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0U3RhdHVzUmVxdWVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFua2luZ1N0YXR1cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXh0cmEtQ29tbXVuaXR5VHJhZGVTdGF0aXN0aWNhbERlY2xhcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXcml0dGVuSW5zdHJ1Y3Rpb25zSW5Db25mb3JtYW5jZVdpdGhBZHJBcnRpY2xlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYW1hZ2VDZXJ0aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYWxpZGF0ZWRQcmljZWRUZW5kZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaWNlU2FsZXNDYXRhbG9ndWVSZXNwb25zZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpY2VOZWdvdGlhdGlvblJlc3VsdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FmZXR5QW5kSGF6YXJkRGF0YVNoZWV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWdhbFN0YXRlbWVudE9mQW5BY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaXN0aW5nU3RhdGVtZW50T2ZBbkFjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsb3NpbmdTdGF0ZW1lbnRPZkFuQWNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50T24tSGlyZVJlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50T2ZmLUhpcmVSZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyZWF0bWVudC1OaWxPdXR0dXJuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmVhdG1lbnQtVGltZS1VcFVuZGVyYm9uZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJlYXRtZW50LVVuZGVyYm9uZEJ5U2VhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmVhdG1lbnQtUGVyc29uYWxFZmZlY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyZWF0bWVudC1UaW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWxpbWluYXJ5Q3JlZGl0QXNzZXNzbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0Q292ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnJlbnRBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tZXJjaWFsRGlzcHV0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlYmFjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhc3NpZ25tZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsYXRlcmFsQWNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWVzdEZvclBheW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuc2hpcFBlcm1pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGlzdGljYWxEZWZpbml0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGlzdGljYWxEYXRhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1ZXN0Rm9yU3RhdGlzdGljYWxEYXRhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYWxsLU9mZkRlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zaWdubWVudFN0YXR1c1JlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52ZW50b3J5TW92ZW1lbnRBZHZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVudG9yeVN0YXR1c0FkdmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGViaXROb3RlUmVsYXRlZFRvR29vZHNPclNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmVkaXROb3RlUmVsYXRlZFRvR29vZHNPclNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXRlcmVkU2VydmljZXNJbnZvaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmVkaXROb3RlUmVsYXRlZFRvRmluYW5jaWFsQWRqdXN0bWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYml0Tm90ZVJlbGF0ZWRUb0ZpbmFuY2lhbEFkanVzdG1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zTWFuaWZlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlc3NlbFVucGFja1JlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VuZXJhbENhcmdvU3VtbWFyeU1hbmlmZXN0UmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zaWdubWVudFVucGFja1JlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVhdEFuZE1lYXRCeS1Qcm9kdWN0c1Nhbml0YXJ5Q2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lYXRGb29kUHJvZHVjdHNTYW5pdGFyeUNlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3VsdHJ5U2FuaXRhcnlDZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9yc2VtZWF0U2FuaXRhcnlDZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzaW5nU2FuaXRhcnlDZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGhhcm1hY2V1dGljYWxTYW5pdGFyeUNlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmVkaWJsZVNhbml0YXJ5Q2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkltcGVuZGluZ0Fycml2YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lYW5zT2ZUcmFuc3BvcnRBZHZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFycml2YWxJbmZvcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyZ29SZWxlYXNlTm90aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGNpc2VDZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaXN0cmF0aW9uRG9jdW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheE5vdGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50RGlyZWN0SW50ZXJjaGFuZ2VSZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydEVxdWlwbWVudEltcGVuZGluZ0Fycml2YWxBZHZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydEVxdWlwbWVudERhbWFnZVJlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50TWFpbnRlbmFuY2VBbmRSZXBhaXJXb3JrRXN0aW1hdGVBZHZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydEVxdWlwbWVudEVtcHR5UmVsZWFzZUluc3RydWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRNb3ZlbWVudEdhdGVJblJlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFudWZhY3R1cmluZ0luc3RydWN0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0TW92ZW1lbnRHYXRlT3V0UmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFcXVpcG1lbnRVbnBhY2tpbmdJbnN0cnVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50VW5wYWNraW5nUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFcXVpcG1lbnRQaWNrLVVwQXZhaWxhYmlsaXR5UmVxdWVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50UGljay1VcEF2YWlsYWJpbGl0eUNvbmZpcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50UGljay1VcFJlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50U2hpZnRSZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydERpc2NoYXJnZUluc3RydWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnREaXNjaGFyZ2VSZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b3Jlc1JlcXVpc2l0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRMb2FkaW5nSW5zdHJ1Y3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydExvYWRpbmdSZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydEVxdWlwbWVudE1haW50ZW5hbmNlQW5kUmVwYWlyV29yayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RGVwYXJ0dXJlUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFbXB0eUVxdWlwbWVudEFkdmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50QWNjZXB0YW5jZU9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFcXVpcG1lbnRTcGVjaWFsU2VydmljZUluc3RydWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFcXVpcG1lbnRTdG9ja1JlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0Q2FyZ29SZWxlYXNlT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikludm9pY2luZ0RhdGFTaGVldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50UGFja2luZ0luc3RydWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zQ2xlYXJhbmNlTm90aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zRG9jdW1lbnRzRXhwaXJhdGlvbk5vdGljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50T24tSGlyZVJlcXVlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydEVxdWlwbWVudE9uLUhpcmVPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50T2ZmLUhpcmVSZXF1ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFcXVpcG1lbnRTdXJ2ZXlPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50U3VydmV5T3JkZXJSZXNwb25zZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50U3VydmV5UmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNraW5nSW5zdHJ1Y3Rpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZpc2luZ0l0ZW1zVG9CZUJvb2tlZFRvQUZpbmFuY2lhbEFjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydEVxdWlwbWVudE1haW50ZW5hbmNlQW5kUmVwYWlyV29ya0VzdGltYXRlT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydEVxdWlwbWVudE1haW50ZW5hbmNlQW5kUmVwYWlyTm90aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXB0eUNvbnRhaW5lckRpc3Bvc2l0aW9uT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcmdvVmVzc2VsRGlzY2hhcmdlT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcmdvVmVzc2VsTG9hZGluZ09yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNdWx0aWRyb3BPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFpbG1lbnRDb250cmFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFzaWNBZ3JlZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmFsVHJhbnNwb3J0T3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdyYW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmRlZmluaXRlRGVsaXZlcnlJbmRlZmluaXRlUXVhbnRpdHlDb250cmFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5kZWZpbml0ZURlbGl2ZXJ5RGVmaW5pdGVRdWFudGl0eUNvbnRyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1aXJlbWVudHNDb250cmFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFza09yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWtlT3JCdXlQbGFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJjb250cmFjdG9yUGxhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zdERhdGFTdW1tYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpZWRDb3N0QW5kUHJpY2VEYXRhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYWdlRGV0ZXJtaW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RGdW5kc1N0YXR1c1JlcG9ydENmc3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmllZEluc3BlY3Rpb25BbmRUZXN0UmVzdWx0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0ZXJpYWxJbnNwZWN0aW9uQW5kUmVjZWl2aW5nUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdXJjaGFzaW5nU3BlY2lmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudE9yUGVyZm9ybWFuY2VCb25kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFNlY3VyaXR5Q2xhc3NpZmljYXRpb25TcGVjaWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW51ZmFjdHVyaW5nU3BlY2lmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5QW1lcmljYUNlcnRpZmljYXRlT2ZDb21wbGlhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJPZmYtSGlyZU5vdGljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyZ29BY2NlcHRhbmNlT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpY2stVXBOb3RpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhvcmlzYXRpb25Ub1BsYW5BbmRTdWdnZXN0T3JkZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3Jpc2F0aW9uVG9QbGFuQW5kU2hpcE9yZGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJhd2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zdFBlcmZvcm1hbmNlUmVwb3J0Q3ByRm9ybWF0MiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zdFNjaGVkdWxlU3RhdHVzUmVwb3J0Q3NzciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zdFBlcmZvcm1hbmNlUmVwb3J0Q3ByRm9ybWF0MSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zdFBlcmZvcm1hbmNlUmVwb3J0Q3ByRm9ybWF0MyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zdFBlcmZvcm1hbmNlUmVwb3J0Q3ByRm9ybWF0NCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zdFBlcmZvcm1hbmNlUmVwb3J0Q3ByRm9ybWF0NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZ3Jlc3NpdmVEaXNjaGFyZ2VSZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbGFuY2VDb25maXJtYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lclN0cmlwcGluZ09yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJTdHVmZmluZ09yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb252ZXlhbmNlRGVjbGFyYXRpb25BcnJpdmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb252ZXlhbmNlRGVjbGFyYXRpb25EZXBhcnR1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnZleWFuY2VEZWNsYXJhdGlvbkNvbWJpbmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0UmVjb3ZlcnlQbGFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0UHJvZHVjdGlvblBsYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRpc3RpY2FsQW5kT3RoZXJBZG1pbmlzdHJhdGl2ZUludGVybmFsRG9jdW1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0TWFzdGVyU2NoZWR1bGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaWNlZEFsdGVybmF0ZVRlbmRlckJpbGxPZlF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZWRQcmljZWRCaWxsT2ZRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJhZnRCaWxsT2ZRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRhcnlDcmVkaXRDb2xsZWN0aW9uSW5zdHJ1Y3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVlc3RGb3JBbkFtZW5kbWVudE9mQURvY3VtZW50YXJ5Q3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGFyeUNyZWRpdEFtZW5kbWVudEluZm9ybWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZpY2VPZkFuQW1lbmRtZW50T2ZBRG9jdW1lbnRhcnlDcmVkaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3BvbnNlVG9BbkFtZW5kbWVudE9mQURvY3VtZW50YXJ5Q3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGFyeUNyZWRpdElzc3VhbmNlSW5mb3JtYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpcmVjdFBheW1lbnRWYWx1YXRpb25SZXF1ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXJlY3RQYXltZW50VmFsdWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm92aXNpb25hbFBheW1lbnRWYWx1YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRWYWx1YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5VmFsdWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eVZhbHVhdGlvblJlcXVlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0QmlsbE9mUXVhbnRpdGllcy1Cb3EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVucHJpY2VkQmlsbE9mUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaWNlZFRlbmRlckJvcSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5xdWlyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJpbUFwcGxpY2F0aW9uRm9yUGF5bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdyZWVtZW50VG9QYXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVlc3RGb3JGaW5hbmNpYWxDYW5jZWxsYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZS1BdXRob3Jpc2VkRGlyZWN0RGViaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZXR0ZXJPZkludGVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwcm92ZWRVbnByaWNlZEJpbGxPZlF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50VmFsdWF0aW9uRm9yVW5zY2hlZHVsZWRJdGVtcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYWxQYXltZW50UmVxdWVzdEJhc2VkT25Db21wbGV0aW9uT2ZXb3JrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50UmVxdWVzdEZvckNvbXBsZXRlZFVuaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmxhbmtldE9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcG90T3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlYXNlT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJ1c2hPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwYWlyT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbGxPZmZPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbm1lbnRPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FtcGxlT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN3YXBPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVyY2hhc2VPcmRlckNoYW5nZVJlcXVlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlT3JkZXJSZXNwb25zZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGlyZU9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGFyZVBhcnRzT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbXBhaWduUHJpY2VTYWxlc0NhdGFsb2d1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlGb3JlY2FzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3Jvc3NEb2NraW5nU2VydmljZXNPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uLVByZS1BdXRob3Jpc2VkRGlyZWN0RGViaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWplY3RlZERpcmVjdERlYml0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlJbnN0cnVjdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5U2NoZWR1bGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5SnVzdC1Jbi1UaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmUtQXV0aG9yaXNlZERpcmVjdERlYml0UmVxdWVzdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbi1QcmUtQXV0aG9yaXNlZERpcmVjdERlYml0UmVxdWVzdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5UmVsZWFzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2V0dGxlbWVudE9mQUxldHRlck9mQ3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYW5rVG9CYW5rRnVuZHNUcmFuc2ZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJQYXltZW50T3JkZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3dWYWx1ZVBheW1lbnRPcmRlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyZXdMaXN0RGVjbGFyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklucXVpcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3BvbnNlVG9QcmV2aW91c0JhbmtpbmdTdGF0dXNNZXNzYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0TWFzdGVyUGxhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdFBsYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2plY3RTY2hlZHVsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdFBsYW5uaW5nQXZhaWxhYmxlUmVzb3VyY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0UGxhbm5pbmdDYWxlbmRhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhbmRpbmdPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyZ29Nb3ZlbWVudEV2ZW50TG9nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJnb0FuYWx5c2lzVm95YWdlUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxmQmlsbGVkQ3JlZGl0Tm90ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc29saWRhdGVkQ3JlZGl0Tm90ZS1Hb29kc0FuZFNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlbnRvcnlBZGp1c3RtZW50U3RhdHVzUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFcXVpcG1lbnRNb3ZlbWVudEluc3RydWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFcXVpcG1lbnRNb3ZlbWVudFJlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50U3RhdHVzQ2hhbmdlUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdW1pZ2F0aW9uQ2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldpbmVDZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29vbEhlYWx0aENlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeU5vdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhY2tpbmdMaXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXdDb2RlUmVxdWVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29kZUNoYW5nZVJlcXVlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpbXBsZURhdGFFbGVtZW50UmVxdWVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2ltcGxlRGF0YUVsZW1lbnRDaGFuZ2VSZXF1ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wb3NpdGVEYXRhRWxlbWVudFJlcXVlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBvc2l0ZURhdGFFbGVtZW50Q2hhbmdlUmVxdWVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VnbWVudFJlcXVlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlZ21lbnRDaGFuZ2VSZXF1ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXdNZXNzYWdlUmVxdWVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVzc2FnZUluRGV2ZWxvcG1lbnRSZXF1ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb2RpZmljYXRpb25PZkV4aXN0aW5nTWVzc2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhY2tpbmdOdW1iZXJBc3NpZ25tZW50UmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVc2VyRGlyZWN0b3J5RGVmaW5pdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdGVkTmF0aW9uc1N0YW5kYXJkTWVzc2FnZVJlcXVlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VEaXJlY3RvcnlEZWZpbml0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0dXNSZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkthbmJhblNjaGVkdWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0RGF0YU1lc3NhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFDbGFpbUZvclBhcnRzQW5kT3JMYWJvdXJDaGFyZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeVNjaGVkdWxlUmVzcG9uc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3BlY3Rpb25SZXF1ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnNwZWN0aW9uUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhdGlvbkFja25vd2xlZGdlbWVudEFuZEVycm9yUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmljZVZhcmlhdGlvbkludm9pY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyZWRpdE5vdGVGb3JQcmljZVZhcmlhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdHJ1Y3Rpb25Ub0NvbGxlY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhbmdlcm91c0dvb2RzTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaXN0cmF0aW9uUmVuZXdhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaXN0cmF0aW9uQ2hhbmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNwb25zZVRvUmVnaXN0cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXBsZW1lbnRhdGlvbkd1aWRlbGluZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWVzdEZvclRyYW5zZmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3N0UGVyZm9ybWFuY2VSZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2F0aW9uRXJyb3JBbmRBY2tub3dsZWRnZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2hQb29sRmluYW5jaWFsU3RhdGVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXF1ZW5jZWREZWxpdmVyeVNjaGVkdWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxjcmVkZXJlQ3JlZGl0Tm90ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2ZmZXJRdW90YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVlc3RGb3JRdW90ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNrbm93bGVkZ2VtZW50TWVzc2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYXRpb25FcnJvck1lc3NhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcmdvTW92ZW1lbnRWb3lhZ2VTdW1tYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYXRpb25Gb3JVc2FnZU9mQmVydGhPck1vb3JpbmdGYWNpbGl0aWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhdGlvbkZvckRlc2lnbmF0aW9uT2ZCZXJ0aGluZ1BsYWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYXRpb25Gb3JTaGlmdGluZ0Zyb21UaGVEZXNpZ25hdGVkUGxhY2VJblBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBsZW1lbnRhcnlEb2N1bWVudEZvckFwcGxpY2F0aW9uRm9yQ2FyZ29PcGVyYXRpb25PZkRhbmdlcm91c0dvb2RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2tub3dsZWRnZW1lbnRPZk9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbGVtZW50YXJ5RG9jdW1lbnRGb3JBcHBsaWNhdGlvbkZvclRyYW5zcG9ydE9mRGFuZ2Vyb3VzR29vZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wdGljYWxDaGFyYWN0ZXJSZWFkaW5nT2NyUGF5bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlbGltaW5hcnlTYWxlc1JlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RW1lcmdlbmN5Q2FyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZm9ybWFJbnZvaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0aWFsSW52b2ljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3BlcmF0aW5nSW5zdHJ1Y3Rpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYW1lUHJvZHVjdFBsYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDby1JbnN1cmFuY2VDZWRpbmdCb3JkZXJlYXUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVlc3RGb3JEZWxpdmVyeUluc3RydWN0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWVyY2lhbEludm9pY2VXaGljaEluY2x1ZGVzQVBhY2tpbmdMaXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFkZURhdGEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNEZWNsYXJhdGlvbkZvckNhcmdvRXhhbWluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNEZWNsYXJhdGlvbkZvckNhcmdvRXhhbWluYXRpb25BbHRlcm5hdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvb2tpbmdSZXF1ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zQ3Jld0FuZENvbnZleWFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNTdW1tYXJ5RGVjbGFyYXRpb25XaXRoQ29tbWVyY2lhbERldGFpbEFsdGVybmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXRlbXNCb29rZWRUb0FGaW5hbmNpYWxBY2NvdW50UmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBvcnRPZlRyYW5zYWN0aW9uc1doaWNoTmVlZEZ1cnRoZXJJbmZvcm1hdGlvbkZyb21UaGVSZWNlaXZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBpbmdJbnN0cnVjdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwZXJzTGV0dGVyT2ZJbnN0cnVjdGlvbnNBaXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcG9ydE9mVHJhbnNhY3Rpb25zRm9ySW5mb3JtYXRpb25Pbmx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJ0YWdlT3JkZXJMb2NhbFRyYW5zcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWRpQXNzb2NpYXRlZE9iamVjdEFkbWluaXN0cmF0aW9uTWVzc2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhZHlGb3JEZXNwYXRjaEFkdmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VtbWFyeVNhbGVzUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlclN0YXR1c0VucXVpcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yZGVyU3RhdHVzUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWNsYXJhdGlvblJlZ2FyZGluZ1RoZUlud2FyZEFuZE91dHdhcmRNb3ZlbWVudE9mVmVzc2VsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXNwYXRjaE9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXNwYXRjaEFkdmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90aWZpY2F0aW9uT2ZVc2FnZU9mQmVydGhPck1vb3JpbmdGYWNpbGl0aWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhdGlvbkZvclZlc3NlbHNFbnRlcmluZ0ludG9Qb3J0QXJlYUluTmlnaHQtVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90aWZpY2F0aW9uT2ZFbWVyZ2VuY3lTaGlmdGluZ0Zyb21UaGVEZXNpZ25hdGVkUGxhY2VJblBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNTdW1tYXJ5RGVjbGFyYXRpb25XaXRob3V0Q29tbWVyY2lhbERldGFpbEFsdGVybmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyZm9ybWFuY2VCb25kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50Qm9uZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWR2aWNlT2ZEaXN0cmlidXRpb25PZkRvY3VtZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWVyY2lhbEludm9pY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyZWRpdE5vdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1pc3Npb25Ob3RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWJpdE5vdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcnJlY3RlZEludm9pY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNvbGlkYXRlZEludm9pY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXBheW1lbnRJbnZvaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIaXJlSW52b2ljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4SW52b2ljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VsZi1CaWxsZWRJbnZvaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxjcmVkZXJlSW52b2ljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFjdG9yZWRJbnZvaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWFzZUludm9pY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNpZ25tZW50SW52b2ljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFjdG9yZWRDcmVkaXROb3RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tZXJjaWFsQWNjb3VudFN1bW1hcnlSZXNwb25zZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3Jvc3NEb2NraW5nRGVzcGF0Y2hBZHZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zc2hpcG1lbnREZXNwYXRjaEFkdmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhjZXB0aW9uYWxPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNzaGlwbWVudE9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcm9zc0RvY2tpbmdPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVhbnNPZlRyYW5zcG9ydGF0aW9uQXZhaWxhYmlsaXR5SW5mb3JtYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lYW5zT2ZUcmFuc3BvcnRhdGlvblNjaGVkdWxlSW5mb3JtYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydEVxdWlwbWVudERlbGl2ZXJ5Tm90aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN0cnVjdGlvbnNGb3JCYW5rVHJhbnNmZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2F0aW9uRm9yQmFua2Vyc0RyYWZ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsZWN0aW9uUGF5bWVudEFkdmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRhcnlDcmVkaXRQYXltZW50QWR2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGFyeUNyZWRpdEFjY2VwdGFuY2VBZHZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50YXJ5Q3JlZGl0TmVnb3RpYXRpb25BZHZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2F0aW9uRm9yQmFua2Vyc0d1YXJhbnRlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFua2Vyc0d1YXJhbnRlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRhcnlDcmVkaXRMZXR0ZXJPZkluZGVtbml0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlYWR2aWNlT2ZBQ3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsZWN0aW9uT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50c1ByZXNlbnRhdGlvbkZvcm0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXh0ZW5kZWRQYXltZW50T3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik11bHRpcGxlUGF5bWVudE9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmVkaXRBZHZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4dGVuZGVkQ3JlZGl0QWR2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWJpdEFkdmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV2ZXJzYWxPZkRlYml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXZlcnNhbE9mQ3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGFyeUNyZWRpdEFwcGxpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGFyeUNyZWRpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRhcnlDcmVkaXROb3RpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50YXJ5Q3JlZGl0VHJhbnNmZXJBZHZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50YXJ5Q3JlZGl0QW1lbmRtZW50Tm90aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGFyeUNyZWRpdEFtZW5kbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVtaXR0YW5jZUFkdmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFua2Vyc0RyYWZ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsT2ZFeGNoYW5nZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbWlzc29yeU5vdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFuY2lhbFN0YXRlbWVudE9mQWNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVtZW50T2ZBY2NvdW50TWVzc2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJhbmNlQ2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyYW5jZVBvbGljeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJhbmNlRGVjbGFyYXRpb25TaGVldEJvcmRlcmVhdSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJlcnNJbnZvaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3Zlck5vdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcndhcmRpbmdJbnN0cnVjdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcndhcmRlcnNBZHZpY2VUb0ltcG9ydEFnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3J3YXJkZXJzQWR2aWNlVG9FeHBvcnRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yd2FyZGVyc0ludm9pY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcndhcmRlcnNDZXJ0aWZpY2F0ZU9mUmVjZWlwdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBpbmdOb3RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3J3YXJkZXJzV2FyZWhvdXNlUmVjZWlwdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZHNSZWNlaXB0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3J0Q2hhcmdlc0RvY3VtZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FyZWhvdXNlV2FycmFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGFuZGxpbmdPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2F0ZVBhc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldheWJpbGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXZlcnNhbE11bHRpcHVycG9zZVRyYW5zcG9ydERvY3VtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb29kc1JlY2VpcHRDYXJyaWFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG91c2VXYXliaWxsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXN0ZXJCaWxsT2ZMYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxPZkxhZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbE9mTGFkaW5nT3JpZ2luYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxPZkxhZGluZ0NvcHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcHR5Q29udGFpbmVyQmlsbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFua2VyQmlsbE9mTGFkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWFXYXliaWxsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmxhbmRXYXRlcndheUJpbGxPZkxhZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uLU5lZ290aWFibGVNYXJpdGltZVRyYW5zcG9ydERvY3VtZW50R2VuZXJpYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0ZXNSZWNlaXB0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3VzZUJpbGxPZkxhZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGV0dGVyT2ZJbmRlbW5pdHlGb3JOb24tU3VycmVuZGVyT2ZCaWxsT2ZMYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcndhcmRlcnNCaWxsT2ZMYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhaWxDb25zaWdubWVudE5vdGVHZW5lcmljVGVybSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm9hZExpc3QtU21ncyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXNjb3J0T2ZmaWNpYWxSZWNvZ25pdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjaGFyZ2luZ0RvY3VtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb2FkQ29uc2lnbm1lbnROb3RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJXYXliaWxsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXN0ZXJBaXJXYXliaWxsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJzdGl0dXRlQWlyV2F5YmlsbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3Jld3NFZmZlY3RzRGVjbGFyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhc3Nlbmdlckxpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5Tm90aWNlUmFpbFRyYW5zcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzcGF0Y2hOb3RlUG9zdFBhcmNlbHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik11bHRpbW9kYWxDb21iaW5lZFRyYW5zcG9ydERvY3VtZW50R2VuZXJpYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhyb3VnaEJpbGxPZkxhZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yd2FyZGVyc0NlcnRpZmljYXRlT2ZUcmFuc3BvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbWJpbmVkVHJhbnNwb3J0RG9jdW1lbnRHZW5lcmljIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNdWx0aW1vZGFsVHJhbnNwb3J0RG9jdW1lbnRHZW5lcmljIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21iaW5lZFRyYW5zcG9ydEJpbGxPZkxhZGluZ011bHRpbW9kYWxCaWxsT2ZMYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvb2tpbmdDb25maXJtYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbGxpbmdGb3J3YXJkTm90aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVpZ2h0SW52b2ljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJyaXZhbE5vdGljZUdvb2RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RpY2VPZkNpcmN1bXN0YW5jZXNQcmV2ZW50aW5nRGVsaXZlcnlHb29kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90aWNlT2ZDaXJjdW1zdGFuY2VzUHJldmVudGluZ1RyYW5zcG9ydEdvb2RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeU5vdGljZUdvb2RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJnb01hbmlmZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVpZ2h0TWFuaWZlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvcmRlcmVhdSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyTWFuaWZlc3RVbml0UGFja2luZ0xpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZXNOb3RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZpY2VPZkNvbGxlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhZmV0eU9mU2hpcENlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWZldHlPZlJhZGlvQ2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhZmV0eU9mRXF1aXBtZW50Q2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNpdmlsTGlhYmlsaXR5Rm9yT2lsQ2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYWRsaW5lRG9jdW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcmF0RG9jdW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcml0aW1lRGVjbGFyYXRpb25PZkhlYWx0aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VydGlmaWNhdGVPZlJlZ2lzdHJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwc1N0b3Jlc0RlY2xhcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBvcnRMaWNlbmNlQXBwbGljYXRpb25Gb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cG9ydExpY2VuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4Y2hhbmdlQ29udHJvbERlY2xhcmF0aW9uRXhwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXNwYXRjaE5vdGVNb2RlbFQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc3BhdGNoTm90ZU1vZGVsVDEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc3BhdGNoTm90ZU1vZGVsVDIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyb2xEb2N1bWVudFQ1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZS1TZW5kaW5nQ29uc2lnbm1lbnROb3RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXNwYXRjaE5vdGVNb2RlbFQyTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZHNEZWNsYXJhdGlvbkZvckV4cG9ydGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJnb0RlY2xhcmF0aW9uRGVwYXJ0dXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhdGlvbkZvckdvb2RzQ29udHJvbENlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb29kc0NvbnRyb2xDZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYXRpb25Gb3JQaHl0b3Nhbml0YXJ5Q2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBoeXRvc2FuaXRhcnlDZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FuaXRhcnlDZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmV0ZXJpbmFyeUNlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhdGlvbkZvckluc3BlY3Rpb25DZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zcGVjdGlvbkNlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0ZU9mT3JpZ2luQXBwbGljYXRpb25Gb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmljYXRlT2ZPcmlnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlY2xhcmF0aW9uT2ZPcmlnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2lvbmFsQXBwZWxsYXRpb25DZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlZmVyZW5jZUNlcnRpZmljYXRlT2ZPcmlnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmljYXRlT2ZPcmlnaW5Gb3JtR3NwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zdWxhckludm9pY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhbmdlcm91c0dvb2RzRGVjbGFyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRpc3RpY2FsRG9jdW1lbnRFeHBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludHJhc3RhdERlY2xhcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeVZlcmlmaWNhdGlvbkNlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXBvcnRMaWNlbmNlQXBwbGljYXRpb25Gb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkltcG9ydExpY2VuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNEZWNsYXJhdGlvbldpdGhvdXRDb21tZXJjaWFsRGV0YWlsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zRGVjbGFyYXRpb25XaXRoQ29tbWVyY2lhbEFuZEl0ZW1EZXRhaWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNEZWNsYXJhdGlvbldpdGhvdXRJdGVtRGV0YWlsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGVkRG9jdW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpcHRDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhdGlvbkZvckV4Y2hhbmdlQWxsb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWlnbkV4Y2hhbmdlUGVybWl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGNoYW5nZUNvbnRyb2xEZWNsYXJhdGlvbkltcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZHNEZWNsYXJhdGlvbkZvckltcG9ydGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb29kc0RlY2xhcmF0aW9uRm9ySG9tZVVzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0ltbWVkaWF0ZVJlbGVhc2VEZWNsYXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0RlbGl2ZXJ5Tm90ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyZ29EZWNsYXJhdGlvbkFycml2YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhbHVlRGVjbGFyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNJbnZvaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zRGVjbGFyYXRpb25Qb3N0UGFyY2VscyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4RGVjbGFyYXRpb25WYWx1ZUFkZGVkVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhEZWNsYXJhdGlvbkdlbmVyYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheERlbWFuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1iYXJnb1Blcm1pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZHNEZWNsYXJhdGlvbkZvckN1c3RvbXNUcmFuc2l0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaWZGb3JtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaXJDYXJuZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVjQ2FybmV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFdXIxQ2VydGlmaWNhdGVPZk9yaWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXRhQ2FybmV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaW5nbGVBZG1pbmlzdHJhdGl2ZURvY3VtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW5lcmFsUmVzcG9uc2VDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudFJlc3BvbnNlQ3VzdG9tcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXJyb3JSZXNwb25zZUN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhY2thZ2VSZXNwb25zZUN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheENhbGN1bGF0aW9uQ29uZmlybWF0aW9uUmVzcG9uc2VDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdW90YVByaW9yQWxsb2NhdGlvbkNlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmRVc2VBdXRob3JpemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb3Zlcm5tZW50Q29udHJhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRpc3RpY2FsRG9jdW1lbnRJbXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2F0aW9uRm9yRG9jdW1lbnRhcnlDcmVkaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzQ3VzdG9tc0RvY3VtZW50TWVzc2FnZSIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mRG9jdW1lbnRBdHRhY2hlZCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG5hbWU9IkRvY3VtZW50QXR0YWNoZWQiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJQYWNrYWdlRG9jIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZkRvY3VtZW50QXR0YWNoZWQiIHR5cGU9Ikxpc3RPZkRvY3VtZW50QXR0YWNoZWQiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlJldHVybmFibGVDb250YWluZXJJbmZvIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlJldHVybmFibGVDb250YWluZXJQYXJ0TnVtYmVyIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUGFydE51bSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJQYXltZW50UmVzcG9uc2liaWxpdHlDb2RlZCIgdHlwZT0iUGF5bWVudFJlc3BvbnNpYmlsaXR5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUGF5bWVudFJlc3BvbnNpYmlsaXR5Q29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUmV0dXJuTG9hZENvZGVkIiB0eXBlPSJSZXR1cm5Mb2FkQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUmV0dXJuTG9hZENvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlJldHVybk5vdGUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlJldHVybmFibGVDb250YWluZXJJbmZvIiB0eXBlPSJSZXR1cm5hYmxlQ29udGFpbmVySW5mbyIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJQYXltZW50UmVzcG9uc2liaWxpdHlDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFpZEJ5Q3VzdG9tZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhaWRCeVN1cHBsaWVyIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IlJldHVybkxvYWRDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hZGVkRWl0aEVtcHR5NEJsb2NrRm9yQmxvY2tpbmdQdXJwb3NlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wdHlDb250YWluZXJXaXRoRHVubmFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wdHlDb250YWluZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYWRlZFdpdGhQcm9kdWN0aW9uTWF0ZXJpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1peGVkRW1wdHlBbmRMb2FkZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9ic29sZXRlTWF0ZXJpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYWRlZFdpdGhFeGNlc3NSZXR1cm5lZFByb2R1Y3Rpb25NYXRlcmlhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hZGVkV2l0aFJlamVjdGVkTWF0ZXJpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VQYXJ0T2Jzb2xldGVDb250YWluZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYWRlZFdpdGhSZXR1cm5lZFByb2Nlc3NlZE1hdGVyaWFsIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJPcmRlclN1bW1hcnkiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iTnVtYmVyT2ZMaW5lcyIgdHlwZT0ieHNkOmludCIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVG90YWxUYXgiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJNb25ldGFyeVZhbHVlIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRvdGFsQW1vdW50Ij4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTW9uZXRhcnlWYWx1ZSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IlRyYW5zcG9ydFBhY2thZ2luZ1RvdGFscyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU3VtbWFyeU5vdGUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik9yZGVyU3VtbWFyeSIgdHlwZT0iT3JkZXJTdW1tYXJ5Ii8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJUcmFuc3BvcnRQYWNrYWdpbmdUb3RhbHMiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVG90YWxQYWNrYWdlcyIgdHlwZT0ieHNkOmludCIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVG90YWxQYWNrYWdlRGVwdGgiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRvdGFsVHJhbnNwb3J0IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJUb3RhbEdyb3NzV2VpZ2h0Ij4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTWVhc3VyZW1lbnQiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVG90YWxOZXRXZWlnaHQiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJNZWFzdXJlbWVudCIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJUb3RhbE5ldE5ldFdlaWdodCI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ik1lYXN1cmVtZW50Ii8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRvdGFsVGFyZVdlaWdodCI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ik1lYXN1cmVtZW50Ii8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ikdyb3NzVm9sdW1lIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTWVhc3VyZW1lbnQiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0UGFja2FnaW5nVG90YWxzIiB0eXBlPSJUcmFuc3BvcnRQYWNrYWdpbmdUb3RhbHMiLz4KLSAgICA8IS0tIFNPWCBmb3JtYXQgZGF0YXR5cGVzIHdoZXJlIHRoZXkgZGlmZXIgZnJvbSBzdGFuZGFyZCBYU0RMIGRhdGF0eXBlcy0tPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJ4Y2JsRGF0ZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICA8eHNkOnBhdHRlcm4gdmFsdWU9IlswLTldezR9KCgoMDF8MDN8MDV8MDd8MDh8MTB8MTIpKCgwWzEtOV0pfChbMS0yXVswLTldKXwoM1swLTFdKSkpfCgoMDR8MDZ8MDl8MTEpKCgwWzEtOV0pfChbMS0yXVswLTldKXwzMCkpfCgoMDIpKCgwWzEtOV0pfChbMS0yXVswLTldKSkpKSIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJ4Y2JsVGltZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICA8eHNkOnBhdHRlcm4gdmFsdWU9IigoKFswLTFdWzAtOV0pfCgyWzAtM10pKSg6KFswLTVdWzAtOV0pKXsyfSgoXCt8LSkoKFswLTFdWzAtOV0pfCgyWzAtM10pKTooWzAtNV1bMC05XSkpPykiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0ieGNibERhdGV0aW1lIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgIDx4c2Q6cGF0dGVybiB2YWx1ZT0iWzAtOV17NH0oKCgwMXwwM3wwNXwwN3wwOHwxMHwxMikoKDBbMS05XSl8KFsxLTJdWzAtOV0pfCgzWzAtMV0pKSl8KCgwNHwwNnwwOXwxMSkoKDBbMS05XSl8KFsxLTJdWzAtOV0pfDMwKSl8KCgwMikoKDBbMS05XSl8KFsxLTJdWzAtOV0pKSkpVCgoKFswLTFdWzAtOV0pfCgyWzAtM10pKSg6KFswLTVdWzAtOV0pKXsyfSgoXCt8LSkoKFswLTFdWzAtOV0pfCgyWzAtM10pKTooWzAtNV1bMC05XSkpPykiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0ieGNibEJvb2xlYW4iPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpib29sZWFuIj4KLSAgICAgICAgICAgIDx4c2Q6cGF0dGVybiB2YWx1ZT0idHJ1ZXxmYWxzZSIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJ4Y2JsRmxvYXQiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpmbG9hdCI+Ci0gICAgICAgICAgICA8eHNkOnBhdHRlcm4gdmFsdWU9IihcK3wtKT9bMC05XSpcLj9bMC05XSooRXxlKT9bMC05XSoiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0ieGNibERvdWJsZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOmRvdWJsZSI+Ci0gICAgICAgICAgICA8eHNkOnBhdHRlcm4gdmFsdWU9IihcK3wtKT9bMC05XSpcLj9bMC05XSooRXxlKT9bMC05XSoiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLTwveHNkOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL3dsaS9PcmRlckNvbmZpcm1hdGlvbi54c2QgYi92Mi90ZXN0L2Nhc2VzL3NjaGVtYS93bGkvT3JkZXJDb25maXJtYXRpb24ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzljZDM2Li4wMDAwMDAwCi0tLSBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL3dsaS9PcmRlckNvbmZpcm1hdGlvbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNzA1NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM9InB1YmxpY2lkOm9yZy54Q0JMOnNjaGVtYXMvWENCTDM1L09yZGVyQ29uZmlybWF0aW9uLnhzZCIgdGFyZ2V0TmFtZXNwYWNlPSJwdWJsaWNpZDpvcmcueENCTDpzY2hlbWFzL1hDQkwzNS9PcmRlckNvbmZpcm1hdGlvbi54c2QiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLSAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbiB4bWw6bGFuZz0iZW4iPgotICAgICAgICAgICAgWE1MIENvbW1vbiBCdXNpbmVzcyBMaWJyYXJ5IDMuNQotICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDAgQ29tbWVyY2UgT25lLCBJbmMuCi0gICAgICAgICAgICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhlCi0gICAgICAgICAgICBEVEQncywgc2NoZW1hcyBhbmQgbW9kdWxlcyBpbiB0aGUgQ29tbWVyY2UgT25lIFhNTCBDb21tb24gQnVzaW5lc3MKLSAgICAgICAgICAgIExpYnJhcnkgVmVyc2lvbiAzLjUgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgc3BlY2lmaWVkCi0gICAgICAgICAgICBhdCBodHRwOi8vd3d3LnhjYmwub3JnL2xpY2Vuc2UuaHRtbAotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIAlQTEVBU0UgTk9URTogVGhpcyBzY2hlbWEsIHdoaWxzdCBpdCBkZXNjcmliZXMgaW4gZW50aXJldHkgYSB2YWxpZCwgc2luZ2xlLAotICAgICAgICAJeENCTCAzLjUgZG9jdW1lbnQsIGlzIGRlZmluZWQgdG8gYmUgaW4gYSBuYW1lc3BhY2Ugb3RoZXIgdGhhbiB0aGUgbWFpbiB4Q0JMIDMuNQotICAgICAgICAJbmFtZXNwYWNlLiBUaGVyZWZvcmUgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgZnVsbCB4Q0JMIDMuNSBzY2hlbWEgaXMgdXNlZAotICAgICAgICAJZm9yIGZ1bGwgcHJvZHVjdGlvbiBzaXR1YXRpb25zLiBQbGVhc2Ugc2VlIHRoZSBub3RlcyBhdAotICAgICAgICAJPGEgaHJlZj0iaHR0cDovL3d3dy54Y2JsLm9yZy94Y2JsMzUveHNkL3NjaGVtYXMuaHRtbCI+d3d3LnhDQkwub3JnPC9hPi4KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iT3JkZXJDb25maXJtYXRpb24iPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iT3JkZXJDb25maXJtYXRpb25IZWFkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ik9yZGVyQ29uZmlybWF0aW9uRGV0YWlsIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJPcmRlckNvbmZpcm1hdGlvbiIgdHlwZT0iT3JkZXJDb25maXJtYXRpb24iLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik9yZGVyQ29uZmlybWF0aW9uSGVhZGVyIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTZWxsZXJPcmRlckNvbmZpcm1hdGlvbk51bWJlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlNlbGxlck9yZGVyTnVtYmVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iT3JkZXJDb25maXJtYXRpb25Jc3N1ZURhdGUiIHR5cGU9InhjYmxEYXRldGltZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJPcmRlckNvbmZpcm1hdGlvblR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iTGFuZ3VhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iQ3VycmVuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iT3JkZXJDb25maXJtYXRpb25QYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJPcmRlckNvbmZpcm1hdGlvbkFjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iT3JkZXJDb25maXJtYXRpb25IZWFkZXJTaG9ydERlc2NyaXB0aW9uIiB0eXBlPSJBbHBoYU51bTQwIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJPcmRlckNvbmZpcm1hdGlvbkhlYWRlck5vdGUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iTGlzdE9mU3RydWN0dXJlZE5vdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iTGlzdE9mTmFtZVZhbHVlU2V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Ikxpc3RPZkF0dGFjaG1lbnQiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik9yZGVyQ29uZmlybWF0aW9uSGVhZGVyIiB0eXBlPSJPcmRlckNvbmZpcm1hdGlvbkhlYWRlciIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iT3JkZXJDb25maXJtYXRpb25UeXBlIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJPcmRlckNvbmZpcm1hdGlvblR5cGVDb2RlZCIgdHlwZT0iT3JkZXJDb25maXJtYXRpb25UeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iT3JkZXJDb25maXJtYXRpb25UeXBlQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iT3JkZXJDb25maXJtYXRpb25UeXBlIiB0eXBlPSJPcmRlckNvbmZpcm1hdGlvblR5cGUiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iT3JkZXJDb25maXJtYXRpb25UeXBlQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yZGVyQ29uZmlybWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXR1cm5EZWxpdmVyeSIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGFuZ3VhZ2UiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ikxhbmd1YWdlQ29kZWQiIHR5cGU9Ikxhbmd1YWdlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iTGFuZ3VhZ2VDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJMb2NhbGVDb2RlZCIgdHlwZT0iTG9jYWxlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iTG9jYWxlQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iTGFuZ3VhZ2VEZXBlbmRlbnQiIHR5cGU9InhjYmxCb29sZWFuIiB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxhbmd1YWdlIiB0eXBlPSJMYW5ndWFnZSIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJMYW5ndWFnZUNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJhYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYWIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImFmIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJhbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImFzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJheSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYXoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJiZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJiaSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYm4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJiciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iY2EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImNvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJjcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImRhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJkZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZHoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJlbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZW8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZXUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImZhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJmaSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZmoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImZvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJmciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImdhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJnZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZ2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImduIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJndSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iaGEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImhlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJoaSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iaHIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Imh1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJoeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iaWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImlkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJpZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iaWsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImlzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iaXUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImphIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJqdyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ia2EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImtrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJrbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ia20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImtuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJrbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ia3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Imt1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJreSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibGEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImxuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJsbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Imx2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJtZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibWkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im1rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJtbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im1vIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJtciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im10Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJteSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibmEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im5lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJubCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibm8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im9jIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJvbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ib3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InBhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJwbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0icHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InB0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJxdSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0icm0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InJuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJybyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0icnUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InJ3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ic2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InNnIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ic2kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ic20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InNuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ic3EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InNyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ic3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InN1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzdiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ic3ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InRhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idGciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InRoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ0aSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idGsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InRsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ0biIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InRyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InR3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ1ZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idWsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ1eiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idmkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InZvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ3byIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ieGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InlpIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ5byIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iemEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InpoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ6dSIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJMb2NhbGVDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImFmIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJhZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYWkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJhbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImFvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJhcSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImFzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJhdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYXUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImF3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJheiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYmEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJiIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJiZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJmIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJiZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYmgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJpIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJiaiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYm0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJibyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYnIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJidCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYnUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImJ3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJieSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iYnoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImNhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJjYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iY2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImNmIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJjZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iY2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImNpIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iY2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImNtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJjbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iY28iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImNyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJjcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iY3UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImN2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJjeCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImN6Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJkZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZGoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImRrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJkbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImR6Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJlYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImVnIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJlaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZmkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImZqIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJmayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZm0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImZvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJmciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZ2EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImdiIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJnZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImdmIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJnaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZ2kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImdsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJnbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZ24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImdwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJncSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZ3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImdzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJndCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZ3UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Imd3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJneSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iaGsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImhuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJociIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Imh1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJpZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iaWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImlsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iaW8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImlxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJpciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iaXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Iml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJqbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iam8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImpwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJrZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ia2ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImtoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJraSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ia20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImtuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJrcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ia3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Imt3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJreSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ia3oiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImxhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJsYiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibGMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImxpIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJsayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibHIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImxzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJsdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibHUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Imx2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJseSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im1jIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJtZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibWciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im1oIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJtayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im1tIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJtbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibW8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im1wIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJtcSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im1zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJtdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibXUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im12Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJtdyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im15Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJteiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibmEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im5jIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJuZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibmYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJuaSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibmwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im5vIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJucCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibnIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im51Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJueiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ib20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InBhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0icGYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InBnIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJwaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0icGsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InBsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJwbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0icG4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InByIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJwdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0icHciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InB5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJxYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0icmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InJvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJydSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0icnciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InNhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzYiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ic2MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InNkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ic2ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzaSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ic2oiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ic20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InNuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ic3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJzdiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ic3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InN6Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ0YyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idGQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InRmIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ0ZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InRqIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ0bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idG4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ0cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idHIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InR0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ0diIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idHciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InR6Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ1YSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idWciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ1cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InV6Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ2YSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idmMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ2ZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idmkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InZuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ2dSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0id2YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IndzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ5ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ieXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Inl1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ6YSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iem0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Inp3Ii8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJDdXJyZW5jeSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQ3VycmVuY3lDb2RlZCIgdHlwZT0iQ3VycmVuY3lDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJDdXJyZW5jeUNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IkN1cnJlbmN5IiB0eXBlPSJDdXJyZW5jeSIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJDdXJyZW5jeUNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBRkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRaRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQURGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBRFAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFSUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVJTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBUkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFNRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVdGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBVUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFUUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVpNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCU0QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJIRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQkRUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCQkQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJZQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQkVGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCWkQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJNRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlROIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCT0IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJBSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQldQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCUkwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJORCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQkdMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCSUYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktIUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0FEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDVkUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktZRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWE9GIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJYQUYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlhQRiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0xQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDTEYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNOWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ09QIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLTUYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNSQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSFJLIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDVVAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNZUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ1pLIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJES0siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRFTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQkFEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJESkYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRPUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWENEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFQ1MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVHUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1ZDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFUk4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVFSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRVRCIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFVVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlhFVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRktQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGSkQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlpBTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRklNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGUkYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdNRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0VMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHSEMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdJUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWEFVIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHUkQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdUUSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR05GIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHV1AiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdZRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSFRHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJITkwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhLRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSFVGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJU0siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklOUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSURSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJUkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklSUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVFEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJRVAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklMUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKTUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkpQWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSk9EIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLWlQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktFUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS1dEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBT1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktHUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTEFLIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMVkwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxCUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUxMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMU0wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxSRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTFlEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMVEwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxVRiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTU9QIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNS0QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1HRiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTVdLIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNWVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1WUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTVRMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNUk8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1VUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTVhOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNREwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1OVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUFEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNWk0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJPViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTU1LIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOQUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5QUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQU5HIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBV0ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5MRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQU9OIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUV0QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlpSTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTlpEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOSU8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5HTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS1BXIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOT0siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBLUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUEFCIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQR0siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBZRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUEVOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQSFAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBMTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUExaIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQVEUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUUFSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPTVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJPTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUlVSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSV0YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldTVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1REIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTQVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNCTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0NSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTTEwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNHRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0tLIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTSVQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNCRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU09TIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJaQVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktSVyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRVNQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMS1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNIUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0RBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTREQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNEUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1JHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTWkwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNFSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0hGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTWVAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRKUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVFpTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUSEIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRQRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVE9QIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUVEQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRORCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVFJMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUTU0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUVEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVR1giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVBSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRUNWIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVWVUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVpTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWVVYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZFQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVk5EIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJZRVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IllVTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWk1LIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJaV0QiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik9yZGVyQ29uZmlybWF0aW9uUGFydHkiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQnV5ZXJQYXJ0eSI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlBhcnR5Ii8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlNlbGxlclBhcnR5Ij4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUGFydHkiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU2hpcFRvUGFydHkiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJQYXJ0eSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Ikxpc3RPZlBhcnR5Q29kZWQiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik9yZGVyQ29uZmlybWF0aW9uUGFydHkiIHR5cGU9Ik9yZGVyQ29uZmlybWF0aW9uUGFydHkiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlBhcnR5Ij4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQYXJ0eUlEIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iSWRlbnRpZmllciIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Ikxpc3RPZklkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ik1ERkJ1c2luZXNzIiB0eXBlPSJ4Y2JsQm9vbGVhbiIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJOYW1lQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iT3JkZXJDb250YWN0Ij4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iQ29udGFjdCIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJSZWNlaXZpbmdDb250YWN0Ij4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iQ29udGFjdCIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTaGlwcGluZ0NvbnRhY3QiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJDb250YWN0Ii8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ik90aGVyQ29udGFjdHMiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJMaXN0T2ZDb250YWN0Ii8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkNvcnJlc3BvbmRlbmNlTGFuZ3VhZ2UiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJMYW5ndWFnZSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQYXJ0eSIgdHlwZT0iUGFydHkiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IklkZW50aWZpZXIiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iQWdlbmN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSWRlbnQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IklkZW50aWZpZXIiIHR5cGU9IklkZW50aWZpZXIiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkFnZW5jeSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQWdlbmN5Q29kZWQiIHR5cGU9IkFnZW5jeUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkFnZW5jeUNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkFnZW5jeURlc2NyaXB0aW9uIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJDb2RlTGlzdElkZW50aWZpZXJDb2RlZCIgdHlwZT0iQ29kZUxpc3RJZGVudGlmaWVyQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQ29kZUxpc3RJZGVudGlmaWVyQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQWdlbmN5IiB0eXBlPSJBZ2VuY3kiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iQWdlbmN5Q29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFBTVZBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBQkNELVRoZU1pY3JvY29tcHV0ZXJJbmR1c3RyeUFzc29jaWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBQ0dJSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUNPUkQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmVydGlzaW5nSW5kdXN0cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFFQ01BIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBSUhBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJUcmFuc3BvcnRBc3NvY2lhdGlvbk9mQW1lcmljYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxhYmFtYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxhc2thIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbHVtaW51bUFzc29jaWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbWVyaWNhbkFwcGFyZWxNYW51ZmFjdHVyZXJzQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtZXJpY2FuRnVybml0dXJlTWFudWZhY3R1cmVyc0Fzc29jaWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbWVyaWNhbklyb25BbmRTdGVlbEluc3RpdHV0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1lcmljYW5MYW5kVGl0bGVBc3NvY2lhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1lcmljYW5NZWRpY2FsQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtZXJpY2FuUGFwZXJJbnN0aXR1dGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtZXJpY2FuUGV0cm9sZXVtSW5zdGl0dXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBUFdBQW5kT0NTSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1lcmljYW5Tb2NpZXR5Rm9yQXV0b21hdGlvbkluUGhhcm1hY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtZXJpY2FuVGV4dGlsZU1hbnVmYWN0dXJlcnNJbnN0aXR1dGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtZXJpY2FuVHJ1Y2tpbmdBc3NvY2lhdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFOU0lBY2NyZWRpdGVkU3RhbmRhcmRzQ29tbWl0dGVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcml6b25hIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcmthbnNhcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVNNRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzaWduZWRCeUJ1eWVyT3JCdXllcnNBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzaWduZWRCeUNhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2lnbmVkQnlEaXN0cmlidXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzaWduZWRCeU1hbnVmYWN0dXJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzaWduZWRCeU1hcmtldFBsYWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NpZ25lZEJ5TmF0aW9uYWxUcmFkZUFnZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzaWduZWRCeU93bmVyT2ZPcGVyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2lnbmVkQnlQYXJ0eU9yaWdpbmF0aW5nVGhlTWVzc2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzaWduZWRCeVNlbGxlck9yU2VsbGVyc0FnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NpZ25lZEJ5VHJhbnNwb3J0Q29tcGFueSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVNUTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFULUdlbGRhdXNnYWJlYXV0b21hdGVuU2VydmljZUdlc2VsbHNjaGFmdE1CSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVQtQXVzdHJpYW5DdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBVC1BdXN0cmlhblBUVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVQtVmVyYmFuZE9lc3RlcnJlaWNoaXNjaGVyQmFua2VuVW5kQmFua2llcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFVLUFDT1MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFVLUFEQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVUtQUlIVyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVUtQVBDQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVUtQVFJUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVUtQXVzdHJpYW5DdXN0b21zU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVUtRE9IIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBVS1ISUMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFVLUxJRkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFVLU5DQ0giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFVLVJPQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVUtU0FBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBVS1UcmFkZWdhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFXUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVlTQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQkUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJFLUJlbGdpYW5CYW5rZXJzQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJFLUJlbGdpYW5DdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCRS1CZWxnaWFuTWluaXN0cnlPZkZpbmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbGxjb3JlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQklDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb29rSW5kdXN0cnlTeXN0ZW1zQWR2aXNvcnlDb21taXR0ZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJSLUJhbmNvQ2VudHJhbERvQnJhemlsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCUi1NQUFuZFJBQUFuZExJTU5FVEFuZFJJTkVUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDQS1DUEEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNBLUNTSU8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbGlmb3JuaWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbGlmb3JuaWFMYW5kVGl0bGVBc3NvY2lhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuYWRpYW5GcmVpZ2h0Q2xhc3NpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcmJpZGVNYW51ZmFjdHVyZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDQS1SZXZlbnVlQ2FuYWRhQ3VzdG9tc0FuZEV4Y2lzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0FTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDQS1TQ0MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNDQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0VDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDRUNER1hJSUlENSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0VDREdYWEkwMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0VDREdYWElCMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0VDREdYWFhJViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0VGSUMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDSC1BZG1pbmlzdHJhdGlvbkZlZGVyYWxlRGVzQ29udHJpYnV0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0gtQXNzb2NpYXRpb25TdWlzc2VDb2RlRGVzQXJ0aWNsZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNILUNhcmJ1cmEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNILUNlbnRyYWxlU3Vpc3NlUG91ckxJbXBvcnRhdGlvbkR1Q2hhcmJvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0gtRGlyZWN0aW9uR2VuZXJhbGVEZXNEb3VhbmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDSC1EaXZpc2lvbkRlc0ltcG9ydGF0aW9uc0V0RXhwb3J0YXRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDSC1FbnRyZXByaXNlRGVzUFRUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDSC1NaW5pc3RyeU9mVGF4YXRpb25DZW50cmFsQ3VzdG9tc0FuZFRheEFkbWluaXN0cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDSC1PZmZpY2VGaWR1Y2lhaXJlRGVzSW1wb3J0YXRldXJzRGVEZW5yZWVzQWxpbWVudGFpcmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDSC1Td2lzc1NlY3VyaXRpZXNDbGVhcmluZ0NvcnBvcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDSC1UZWxla3Vyc0FHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDSURYIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDSUVDQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29kZUFzc2lnbmVkQnlUaGVPcmdhbml6YXRpb25UaGF0SXNUaGVVbHRpbWF0ZURlc3RpbmF0aW9uT2ZUaGVUcmFuc2FjdGlvblNldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ08tRElBTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29sb3JhZG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1hbmRlclJvbWVBaXJEZXZlbG9wbWVudENlbnRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uY29yZEVESUdyb3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25uZWN0aWN1dCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udmVudGlvbnNPblNBREFuZFRyYW5zaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcHBlckFuZEJyYXNzRmFicmljYXRvcnNDb3VuY2lsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDTy1TQkRDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VudHlEZXNpZ25hdG9yQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ1NJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDU0lFeHRlbmRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ1VTSVAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNaIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJERSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iREUtQVJFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJERS1CREkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRFLUJJQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iREUtQlJEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJERS1ESU4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRFLURUQUciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRFLUVESUJBVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVmZW5zZUxvZ2lzdGljc0FnZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iREUtR0RWIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJERS1HZXJtYW5CYW5rZXJzQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRFLUdlcm1hbkN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRFLUdNQkgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGF3YXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50T2ZBaXJGb3JjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudE9mQXJteSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudE9mRGVmZW5zZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudE9mSGVhbHRoQW5kSHVtYW5TZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudE9mSG91c2luZ0FuZFVyYmFuRGV2ZWxvcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydG1lbnRPZkxhYm9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50T2ZUaGVOYXZ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJERS1TaWVtZW5zQUciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRFLVZEQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iREZBUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRElOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXJlY3Rpb25HZW5lcmFsZURlc0RvdWFuZXNFdERyb2l0c0luZGlyZWN0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpY3RPZkNvbHVtYmlhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJESyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iREstRUFOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJESy1NSEEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRLLU5CSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iREstUEJTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEdW5BbmRCcmFkc3RyZWV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFQU4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVkaWJ1aWxkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFZGllbE5vcmRpY0ZvcnVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFRElGSUNFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFRElURVVSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFRElURVgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVFRzciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVJRFgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVsZWN0cmljVXRpbGl0aWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGVjdHJvbmljSW5kdXN0cmllc0Fzc29jaWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFUEEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFU0RYIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFUy1PREVUVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRVMtU3BhbmlzaEN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVVLUVESUZJQ0FTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFVS1FVElTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFVS1ST0ZFUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRkFTTElOQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRkNDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGQ0kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZEQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbEdvdmVybm1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxIaWdod2F5QWRtaW5pc3RyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGSS1BVEEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZJLUZpbm5pc2hDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGSS1UQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRkktVGhlRmlubmlzaEJhbmtlcnNBc3NvY2lhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxvcmlkYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRlIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZSLUFHRiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRlItQXJ2QSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRlItQmFucXVlRGVGcmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZSLUNGT05CIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGUi1DTkFNVFMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZSLURDUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRlItREdJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGUi1FRElGQ0FTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGUi1FRElGUkFOQ0UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZSLUVESVRSQU5TUE9SVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRlItR0FMSUEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZSLUdFTkNPRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRlItSU5TRUUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZSLVJDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0ItQUJJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHQi1BQlRBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHQi1BcnRpY2xlTnVtYmVyQXNzb2NpYXRpb25MaW1pdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHQi1Bc3NvY2lhdGlvbkZvclBheW1lbnRDbGVhcmluZ1NlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHQi1CQUNTTGltaXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0ItQ0hBUFNBbmRUb3duQ2xlYXJpbmdDb21wYW55TGltaXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0ItRkxFRVRORVQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCLUhNQ3VzdG9tc0FuZEV4Y2lzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0ItT0RFVFRFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHQi1UaGVDbGVhcmluZ0hvdXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW9yZ2lhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmFwaGljc0NvbW11bmljYXRpb25zQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdSRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR1ItR3JlZWtDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHU0EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdUSU4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikhhd2FpaSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhbHRoQ2FyZUZpbmFuY2luZ0FkbWluaXN0cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFsdGhJbnN1cmFuY2VBc3NvY2lhdGlvbk9mQW1lcmljYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSEstSG9uZ0tvbmdDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSUFQU08iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklBUkMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklBVEEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklDQU8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklDQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSUNTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJZGFobyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSUUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklFLVJldmVudWVDb21taXNzaW9uZXJzQ3VzdG9tc0FFUHJvamVjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSUwtSXNyYWVsQ3VzdG9tcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSWxsaW5vaXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklNTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5kaWFuYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJDb250YWluZXJJbnRlckZyaWdvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm5hdGlvbmFsQXNzb2NpYXRpb25PZkNvcnBvcmF0aW9uQWRtaW5pc3RyYXRvcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmF0aW9uYWxBc3NvY2lhdGlvbk9mSW5kdXN0cmlhbEFjY2lkZW50Qm9hcmRzQW5kQ29tbWlzc2lvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmF0aW9uYWxTdGFuZGFyZHNPcmdhbml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Iklvd2EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJcm9uQW5kU3RlZWxTdGFuZGFyZHNDb21taXR0ZWVJU00iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklTLUljZWxhbmRDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJU08iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyYW5jZVNlcnZpY2VzT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVQtQXNzb2NpYXppb25lQmFuY2FyaWFJdGFsaWFuYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVQtSXRhbGlhbkN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklULU9ERVRURSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVQtU29jaWVhdGFJbnRlcmJhbmNhcmlhUGVyTEF1dG9tYXppb25lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKYXBhbmVzZVN0YW5kYXJkc0Fzc29jaWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKUC1KYXBhbkN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkpQLU1PVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSlAtTVNBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKUC1OQUNDUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS2Fuc2FzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLZW50dWNreSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhc2luZ0luZHVzdHJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWZlQW5kQW5udWl0eUluZHVzdHJ5Q29tbWl0dGVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMSS1MaWVjaHRlbnN0ZWluQXV0aG9yaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMbG95ZHNSZWdpc3Rlck9mU2hpcHBpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvdWlzaWFuYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTFUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxVLUx1eGVtYm91cmdDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWluZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFudWZhY3R1cmluZ0NvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcnlsYW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXNzYWNodXNldHRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXRlcmlhbFNhZmV0eURhdGFTaGVldFByb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaWNoaWdhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlsaXRhcnlTdGFuZGFyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlubmVzb3RhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaXNzaXNzaXBwaSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlzc291cmkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vbnRhbmEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vcnRnYWdlQmFua2Vyc0Fzc29jaWF0aW9uT2ZBbWVyaWNhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNWS1EYWdhbmdOZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1ZLU1hbGF5c2lhQ2VudHJhbEJhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1ZLU1hbGF5c2lhQ3VzdG9tc0FuZEV4Y2lzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkFDRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkFHUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxBbGNvaG9sQmV2ZXJhZ2VDb250cm9sQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsQXNzb2NpYXRpb25PZkJ1c2luZXNzQW5kRWR1Y2F0aW9uYWxSYWRpbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxCdXNpbmVzc0Zvcm1zQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsQ2VudGVyZm9yU3RhdGVDb3VydHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsQ290dG9uQ291bmNpbE9mQW1lcmljYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxDb3VuY2lsT25Db21wZW5zYXRpb25JbnN1cmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsUmV0YWlsTWVyY2hhbnRzQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsV2hvbGVzYWxlRHJ1Z2dpc3RzQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5BVE8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdHVyYWxHYXNVdGlsaXRpZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5DSUMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5lYnJhc2thIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJORU1BIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXZhZGEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld0hhbXBzaGlyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV3SmVyc2V5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXdNZXhpY28iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld3NwYXBlckFzc29jaWF0aW9uT2ZBbWVyaWNhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXdZb3JrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJORlBBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOSUNCIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOSU9TSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ldGhlcmxhbmRzUmFpbHdheXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5MLUJhbmtHaXJvY2VudHJhbGVCViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkwtQkVBTkVUQlYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5MLUVBTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkwtSW50ZXJwYXlDYXJkcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkwtSW50ZXJwYXlHaXJhYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5MLU5ldGhlcmxhbmRzQ3VzdG9tcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkwtT0RFVFRFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3J3ZWlnaWFuU3RhdGVSYWlsd2F5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTk8tTk9SUFJPIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOTy1Ob3J3ZWdpYW5CYW5rZXJzQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5PLU5vcndlZ2lhbkN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5PLU5vcndlZ2lhbkludGVyYmFua1Jlc2VhcmNoT3JnYW5pemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3J0aEFtZXJpY2EtVGVsZWNvbW11bmljYXRpb25zSW5kdXN0cnlGb3J1bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9ydGhDYXJvbGluYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9ydGhEYWtvdGEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5UUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTlotTmV3WmVhbGFuZEN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9ERVRURSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2ZmaWNlT2ZNYW5hZ2VtZW50QW5kQnVkZ2V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZpY2VPZldvcmtlcnNDb21wZW5zYXRpb25Qcm9ncmFtcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2ZmaWNlUHJvZHVjdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9oaW8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9rbGFob21hIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcHRpY2FsSW5kdXN0cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yZWdvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT1NIQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVubnN5bHZhbmlhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZW5uc3lsdmFuaWFDb3VydHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUFQtQ0IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBULVBvcnR1Z3Vlc2VDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQVC1TSUJTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWFsRXN0YXRlSW5mb3JtYXRpb25JbmR1c3RyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmhvZGVJc2xhbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJJTkVUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUlUtQklDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSVS1TRlQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNBRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0EtU2F1ZGlBcmFiaWFDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0UtQ2VudHJhbEJhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNFLU9ERVRURSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0UtU3ZlbnNrYUJhbmtmb2VyZW5pbmdlbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0UtU3dlZGlzaEN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwZXJzQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNJU0FDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU291dGhDYXJvbGluYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU291dGhEYWtvdGEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlQWdlbmN5QXNzaWduZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0dWRlbnRMb2FuR3VhcmFudG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTV0lGVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVEFMQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVsZWNvbW11bmljYXRpb25zSW5kdXN0cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbXBvcmFyeUhlbHBJbmR1c3RyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVubmVzc2VlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXhhcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGV4YXNMYW5kVGl0bGVBc3NvY2lhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGV4dGlsZURpc3RyaWJ1dG9yc0Fzc29jaWF0aW9uSW5jIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJURENDLUVESUEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRXLUNoaW5lc2VUYWlwZWlDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUVy1UcmFkZS12YW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVDUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVUlDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVU5FQ0UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVOQ1RBRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdGVkU3RhdGVzQ291cnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0ZWRTdGF0ZXNNYXJpbmVDb3JwcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdGVkU3RhdGVzTnVjbGVhclJlZ3VsYXRvcnlDb21taXNzaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUFUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLUFBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1BQVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLUFCQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtQUlBRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtQWlyVHJhbnNwb3J0QXNzb2NpYXRpb25PZkFtZXJpY2EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLUFJU0kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLUFtZXJpY2FuUGV0cm9sZXVtSW5zdGl0dXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1BTlNJQVNDWDEyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1BUEkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLUFTVE0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLUFURiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtQkFURiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtQlhBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1DSElQUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtQ0lEWCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtQ00iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLUNPUEFTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1EQW5kQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtRENJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1ERUEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLURISFMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLURJU0EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLURJU0NVUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtRExNU08iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLURPQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtRE9EIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1ET0RBQUMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLURPTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtRE9UIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1EU0FBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1FSUEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLUZDQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtRkRBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1GSVBTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1GTUMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLUZXUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtR1NBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1IQklDQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtSEkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLUhMNyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtSVNBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1NQVJBRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtTkFCQ0EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLU5BSUMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTTmF0aW9uYWxDZW50ZXJGb3JIZWFsdGhTdGF0aXN0aWNzQ29tbWlzc2lvbk9mUHJvZmVzc2lvbmFsQW5kSG9zcGl0YWxBY3Rpdml0aWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1OYXRpb25hbE1vdG9yRnJlaWdodENsYXNzaWZpY2F0aW9uQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLU5hdGlvbmFsUmV0YWlsRmVkZXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtTkNDTUEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLU5JU1QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLU5SQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtTldEQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtT0RUQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtT0ZBQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtT01CIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1TdGFuZGFyZENhcnJpZXJBbHBoYUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLVREQ0MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLVVDQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtVU4tU1BTQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtVU9QIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUy1VU0NlbnN1c0J1cmVhdSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtVVNDdXN0b21zU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtVVNQUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVMtVkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLVZJQ1MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLVdTU0EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlV0YWgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlV0aWxpdHlJbmR1c3RyeUdyb3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXJtb250Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWSUNTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWaXJnaW5pYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FzaGluZ3RvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2VzdFZpcmdpbmlhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXSE1JUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2lzY29uc2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXeW9taW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXJlY3RvckdlbmVyYWxPZkNhbmFkYSIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJDb2RlTGlzdElkZW50aWZpZXJDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjZXB0YW5jZVNpdGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NpZGVudFBhcmFtZXRlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY29yZEV1cm9wZWVuUmVsYXRpZkF1VHJhbnNwb3J0SW50ZXJuYXRpb25hbERlc01hcmNoYW5kaXNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudEFuYWx5c2lzQ29kZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRDaGFyYWN0ZXJpc3RpY3NDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50aW5nSW5mb3JtYXRpb25JZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50UmF0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50UmVsYXRpb25zaGlwVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNxdWlzaXRpb25BZHZpY2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3F1aXNpdGlvbk1ldGhvZENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjcXVpc2l0aW9uTWV0aG9kU3VmZml4Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0aXZpdGVQcmluY2lwYWxlRXhlcmNlZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdGl2aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZG1pdHRpbmdEaWFnbm9zaXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmVyc2VFdmVudENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmVyc2VFdmVudE91dGNvbWVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZpY2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ2VudFN0YXR1c0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpZFR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJDb21tb2RpdHlBbmRTcGVjaWFsSGFuZGxpbmdDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJjcmFmdE1pc3Npb25EZXNpZ25TZXJpZXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJEaW1lbnNpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJwb3J0T3JDaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJwb3J0VGVybWluYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpclRlcm1pbmFsSWRlbnRpZmllckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbGVnYXRpb25UeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxsUGF0aWVudERpYWdub3Npc1JlbGF0ZWRHcm91cHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbFBhdGllbnRSZWZpbmVkRGlhZ25vc2lzUmVsYXRlZEdyb3VwcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWx0ZXJhdGlvbkxvb2t1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1idWxhdG9yeVBhdGllbnRHcm91cHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtZW5kbWVudENvZGUtQ3VzdG9tcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1lcmljYW5Qc3ljaGlhdHJpY0Fzc29jaWF0aW9uRGlhZ25vc3RpY1N0YXRpc3RpY2FsTWFudWFsT2ZNZW50YWxEaXNvcmRlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtZXJpY2FuU29jaWV0eUZvclRlc3RpbmdBbmRNYXRlcmlhbHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFudGVubmFQb2xhcml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFudGVubmFTdHJ1Y3R1cmVUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhbnRDbGFzc2lmaWNhdGlvblR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2FudFR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2F0aW9uQWNrbm93bGVkZ2VtZW50QW5kRXJyb3JDb2RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYXRpb25FcnJvckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2F0aW9uUXVlc3Rpb25JZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhdGlvblR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFyZWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFyZWFPZk9wZXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJyZXN0UmVhc29uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcnRpY2xlU3RhdHVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NldERldGFpbHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2V0UmVjdXJyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzZXRTdGF0dXNPclRyYW5zYWN0aW9uUmVwb3J0aW5nQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzZXRUcmFuc2ZlclN0YXR1c0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2V0VHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzaWduZWRCeVJlY2VpdmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NpZ25lZEJ5U2VuZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NvY2lhdGlvbk9mQW1lcmljYW5SYWlscm9hZHNEZXByZXNjcmlwdGlvbkRpc3RyaWJ1dGlvbkxpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc29jaWF0aW9uT2ZBbWVyaWNhblJhaWxyb2Fkc0RlcHJlc2NyaXB0aW9uRXhjZXB0aW9uTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzb2NpYXRpb25PZkFtZXJpY2FuUmFpbHJvYWRzUmF0ZUVkaU5ldHdvcmtFcnJvckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc29jaWF0aW9uT2ZBbWVyaWNhblJhaWxyb2Fkc1N0YW5kYXJkVHJhbnNwb3J0YXRpb25Db21tb2RpdHlDb2RlRGVzY3JpcHRpb25RdWFsaWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc29jaWF0aW9uT2ZBbWVyaWNhblJhaWxyb2Fkc1N0YW5kYXJkVHJhbnNwb3J0YXRpb25Db21tb2RpdHlDb2RlTWFzdGVyRGVzY3JpcHRpb25JbmZvcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzb2NpYXRpb25PZkFtZXJpY2FuUmFpbHJvYWRzU3dpdGNoUmVsZWFzZUNvZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3N1cmVkRGVsaXZlcnlJbmRpY2F0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhvcml6YXRpb25UeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRvbWF0ZWRDbGVhcmluZ0hvdXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRvbWF0ZWREYXRhUHJvY2Vzc2luZ0VxdWlwbWVudElkZW50aWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXdhcmRTb3VyY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbGFuY2VUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFua0FkbWluaXN0cmF0aW9uSW5zdGl0dXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYW5rQnJhbmNoU29ydGluZ0lkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYW5rSWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbmtTZWN1cml0aWVzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFzaXNPZkp1cmlzZGljdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbmVmaWNpYXJ5VHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlkUmVqZWN0aW9uUmVhc29uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsZWRPZmZpY2VJbmRpY2F0b3JDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsaW5nQWR2aWNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbGluZ1N0YXR1c0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxPZkxhZGluZ0NsYXVzZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvYXJkT2ZJbnNwZWN0aW9uQW5kU3VydmV5UGFydExvb2t1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9hcmRPZkluc3BlY3Rpb25BbmRTdXJ2ZXlSZXNwb25zaWJpbGl0eUxvb2t1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9hcmRPZkluc3BlY3Rpb25BbmRTdXJ2ZXlTaGlwTG9va3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc0FjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1c2luZXNzQ2hhbmdlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NDbGFzc2lmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NDcmVkaXRSYXRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1c2luZXNzRW50aXR5RmlsaW5nRGV0YWlsQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NFbnRpdHlGaWxpbmdMb2NhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1c2luZXNzRW50aXR5RmlsaW5nUmVwb3J0VHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1c2luZXNzRW50aXR5RmlsaW5nU2VjdXJpdGllc0luZm9ybWF0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NFbnRpdHlGaWxpbmdTdGF0dXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc0VudGl0eUZpbmFuY2lhbEluZm9ybWF0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NFbnRpdHlTdGF0dXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc0Z1bmN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc0xlZ2FsU3RydWN0dXJlVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NTaXplQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYWxsU2lnbkRpcmVjdG9yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuYWRpYW5JbnRlckVkaSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuY2VsbGF0aW9uUmVhc29uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJyaWVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzZURlc2lnbmF0b3JOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2VPcmlnaW5Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXNoRGlzY291bnRTdGlwdWxhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhdXNlTG9va3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXVzZU9mSW5qdXJ5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2F1c2VPZkxvc3NDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZWlsaW5nVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmljYXRpb25SZXF1aXJlbWVudHNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNpdGl6ZW5JZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2l0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2l0eVN1YmRpdmlzaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGFpbVBheW1lbnRSZW1hcmtDb2RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xhaW1UeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGFzc09mT3BlcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGFzc09mUGl0Y2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsYXVzZVN0YXR1c1R5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsZWFyaW5nQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xlYXJpbmdIb3VzZUF1dG9tYXRlZFBheW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsZWFyaW5nSG91c2VJbnRlcmJhbmtQYXltZW50U3lzdGVtUGFydGljaXBhbnRzSWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsZWFyaW5nSG91c2VJbnRlcmJhbmtQYXltZW50U3lzdGVtVW5pdmVyc2FsSWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvYXN0RGVzaWduYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2duaXphbmNlU3ltYm9sIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsaXNpb25JbmR1c3RyeUVsZWN0cm9uaWNDb21tZXJjZUFzc29jaWF0aW9uLUluc3BlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbGxpc2lvbkluZHVzdHJ5RWxlY3Ryb25pY0NvbW1lcmNlQXNzb2NpYXRpb24tTG9zc0NhdGVnb3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsaXNpb25JbmR1c3RyeUVsZWN0cm9uaWNDb21tZXJjZUFzc29jaWF0aW9uLVBvaW50c09mSW1wYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsaXNpb25JbmR1c3RyeUVsZWN0cm9uaWNDb21tZXJjZUFzc29jaWF0aW9uLVByb2ZpbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbWJpdGVybXMxOTkwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tZXJjaWFsQW5kR292ZXJubWVudEVudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWVyY2lhbERyaXZlcnNMaWNlbnNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tZXJjaWFsVmVoaWNsZU9wZXJhdGlvbnNDb21tb2RpdHlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tZXJjaWFsVmVoaWNsZU9wZXJhdGlvbnNIYXphcmRvdXNNYXRlcmlhbENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1lcmNpYWxWZWhpY2xlT3BlcmF0aW9uc0luc3VyYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWVyY2lhbFZlaGljbGVPcGVyYXRpb25zU2FmZXR5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWVyY2lhbFZlaGljbGVPcGVyYXRpb25zU3RhdHVzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWVyY2lhbFZlaGljbGVSZWdpc3RyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1lcmNpYWxWZWhpY2xlVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tZXJjaWFsVmVoaWNsZVRpdGxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tZXJjaWFsVmVoaWNsZVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1vZGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbXVuaWNhdGlvbnNSb3V0aW5nSWRlbnRpZmllckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBlbnNhdGlvblR5cGVDb2RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGV0aXRpdmVDaGFyYWN0ZXJpc3RpY3NDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wbGFpbnRSZXF1ZXN0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGxpYW5jZVJldmlld0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbmNsdXNpb25FdmFsdWF0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uZGl0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25kaXRpb25EZXRhaWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNpZ25lZXNQcmVtaXNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbm9yc1ByZW1pc2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zb2xpZGF0aW9uQW5kQ29udGFpbmVyaXphdGlvblBvaW50Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc29saWRhdGlvbkRldGFpbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc3RydWN0aW9uTWF0ZXJpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhY3RvckFsZXJ0TGlzdFJlYXNvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFjdFN0YXR1c0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lckFuZFJvbGwtT25PclJvbGwtT2ZmTnVtYmVyQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyVGVybWluYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRlbnRJbmRpY2F0b3JDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250aW5lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdENsb3NlLU91dEdyb3VwQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3REZWxpdmVyeURhdGVSZXZpc2lvbkFnZW50Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RGdW5kUmVwb3J0aW5nVHJhbnNhY3Rpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdG9yQWxlcnRMaXN0U3RhdHVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdG9yUmV2aWV3TGlzdFN0YXR1cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RQYXltZW50RGVkdWN0aW9uT3JDb2xsZWN0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RQYXltZW50TGluZUl0ZW1TdGF0dXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFNoaXBtZW50QWR2aWNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJvbGxlZEludmVudG9yeUl0ZW1Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cm9sVW5pdERlc2lnbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyb3ZlcnRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb252aWN0aW9uT2ZmZW5zZVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvb3BlcmF0aXZlTG9naXN0aWNzUHJvZ3JhbVN1cHBvcnRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3Jwb3JhdGVGaW5hbmNpYWxGaWxpbmdDcml0ZXJpYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ycG9yYXRlU3RhdGVtZW50RmlsaW5nQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ycmVjdGlvbk9yQ2hhbmdlRm9yU3RvcmFnZUl0ZW1SZWNvcmRzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291bnRyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291bnRyeUFuZEFjdGl2aXR5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291bnRyeUNvZGUtRmluYW5jZUFuZEFjcXVpc2l0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VudHJ5U3ViLUVudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291bnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VudHlEZXNpZ25hdG9yQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291cG9uQWRqdXN0bWVudFJlYXNvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdXJ0QXBwZWFyYW5jZVR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VydENhc2VTdGF0dXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VydERpc3Bvc2l0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291cnREb2N1bWVudFR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VydElzc3VlZFdhcnJhbnRUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291cnRPZkxhd0V2ZW50VHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291cnRPZkxhd1R5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdXJ0UGFydHlTdGF0dXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdXJ0UGxlYWRpbmdUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ292ZXJhZ2VDb2RlTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ292ZXJhZ2VNb2RpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3BhLUNhbmFkaWFuUGF5bWVudHNBc3NvY2lhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JpbWluYWxDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyaW1pbmFsQ2hhcmdlR3JhZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyaXRpY2FsaXR5RGVzaWduYXRvckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1aXNpbmVUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudEFzc2V0RGV0YWlscyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudERlbnRhbFRlcm1pbm9sb2d5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudExpYWJpbGl0eURldGFpbHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnJlbnRQcm9jZWR1cmFsVGVybWlub2xvZ3lDb2RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJNYWludGVuYW5jZUxldmVsTG9va3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lcldpdGhpbkNvdW50cnlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21pemVkTm90aWNlVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNBcmVhT2ZUcmFuc2FjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0RlY2xhcmF0aW9uVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0RvbWVzdGljUG9ydExvY2F0aW9uQ29kZXMtVVNTY2hlZHVsZUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNGb3JlaWduUG9ydExvY2F0aW9uQ29kZXMtVVNTY2hlZHVsZUsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNJbmRpY2F0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNJbnNwZWN0aW9uVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc09mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc1ByZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNQcm9jZWR1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNSZWxlYXNlTm90aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zU2ltcGxpZmllZFByb2NlZHVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc1NwZWNpYWxDb2RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc1N0YXR1c09mR29vZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNUcmFuc2l0R3VhcmFudGVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zVHJhbnNpdFR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNWYWx1YXRpb25NZXRob2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNXYXJlaG91c2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhbmdlcm91c0dvb2RzUGFja2luZ1R5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGFDYXRlZ29yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZVNoaXBwZWRPclJlY2VpdmVkQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVidG9yQnVzaW5lc3NUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVidG9yVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlZmVuZGFudFBsZWFUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVmZW5zZVByaW9yaXRpZXNBbmRBbGxvY2F0aW9uc1N5c3RlbUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlZmVycmFsTG9va3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWZpY2llbmN5Q2F1c2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlZmljaWVuY3lJbmRpY2F0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGlucXVlbmN5SW5kaWNhdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeVNvdXJjZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5VGVybUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbWFuZENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbWlsaXRhcml6YXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50T2ZEZWZlbnNlSWRlbnRpZmljYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXZpY2VBdmFpbGFiaWxpdHlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXZpY2VFdmFsdWF0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGV2aWNlRXZlbnRQcm9ibGVtQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGV2aWNlT3BlcmF0b3JUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGV2aWNlU3RhdHVzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGV2aWNlVXNhZ2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaWFnbm9zaXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpYWdub3Npc0VuY291bnRlcmVkRHVyaW5nRXhhbWluYXRpb25BbmRJbnZlc3RpZ2F0aW9uT2ZJbmRpdmlkdWFsc0FuZFBvcHVsYXRpb25zQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlhZ25vc2lzUmVsYXRlZEdyb3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaWFnbm9zdGljQW5kU3RhdGlzdGljYWxNYW51YWxPZk1lbnRhbERpc29yZGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlyZWN0TnVtZXJpY2FsQ29udHJvbFN5c3RlbUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2J1cnNlbWVudFN0YXR1c0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2NyZXBhbmN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNjcmVwYW5jeUFkdmljZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2NyZXBhbmN5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY3JlcGFuY3lJbmRpY2F0b3JDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNjcmVwYW5jeVN0YXR1c09yRGlzcG9zaXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNwb3NhbEF1dGhvcml0eUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3Bvc2FsQ29uZGl0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpYnV0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRJZGVudGlmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50UmVxdWVzdGVkQnlDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2RhYWMtRGVwYXJ0bWVudE9mRGVmZW5zZUFjdGl2aXR5QWRkcmVzc0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvbWVzdGljTGluZU9mQnVzaW5lc3NDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb3NlRm9ybUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyaXZlclBhcmFtZXRlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyaXZlcnNMaWNlbnNlV2l0aGRyYXdhbEJhc2lzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcml2ZXJzTGljZW5zZVdpdGhkcmF3YWxEdWVQcm9jZXNzU3RhdHVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcml2ZXJzTGljZW5zZVdpdGhkcmF3YWxFeHRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyaXZlcnNMaWNlbnNlV2l0aGRyYXdhbFJlYXNvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJpdmVyc0xpY2Vuc2VXaXRoZHJhd2FsVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJ1Z0RldGFpbENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRydWdTdGF0dXNBZHZlcnNlRXZlbnRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcnVnU3RhdHVzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVtcGluZ09yQ291bnRlcnZhaWxpbmdBc3Nlc3NtZW50TWV0aG9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEdW1waW5nU3BlY2lmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVuQW5kQnJhZHN0cmVldENhbmFkYXM4RGlnaXRTdGFuZGFyZEluZHVzdHJpYWxDbGFzc2lmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1bnMtRHVuQW5kQnJhZHN0cmVldFBsdXM0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEdW5zU3RhbmRhcmRJbmR1c3RyaWFsQ2xhc3NpZmljYXRpb24yUGx1czJEdW5BbmRCcmFkc3RyZWV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEdXR5VGF4T3JGZWVQYXltZW50TWV0aG9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEeW5hbWljR2VuZXJhdG9yU2V0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHluYW1pY0xvY29tb3RpdmVUYWdDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFZGlyYS1JZC1FZGlSZWdpc3RyYXRpb25BdXRob3JpdHlJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWRpdEVycm9yQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWR1Y2F0aW9uYWxJbnN0aXR1dGlvblR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVkdWNhdGlvbmFsU3R1ZHlBcmVhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGVjdHJvbWFnbmV0aWNUcmFuc21pdHRlcklkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llZUlkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmhhbmNlZFBhcnR5SWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVudGl0bGVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbnRpdHlSZWxhdGlvbnNoaXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWlwbWVudFN0YXR1c0xvb2t1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXJyb3JDbGFzc2lmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzc2VudGlhbGl0eUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZFRpbWVPZkFycml2YWxDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZVR5cGVMb29rdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRpbmdNZXRob2RTdGF0dXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFdGhuaWNpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV2YWx1YXRlV29ya0NhbmRpZGF0ZUxvb2t1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXZhbHVhdGVXb3JrQ2FuZGlkYXRlUmVhc29uTG9va3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFdmVudEFiYXRlbWVudENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV2ZW50Q29kZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV2ZW50T3JFeHBvc3VyZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV2ZW50UmVhcHBlYXJhbmNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhhbWluYXRpb25GYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhjYXZhdGlvbkluZm9ybWF0aW9uQ29kZUxpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4Y2Vzc01hdGVyaWFsRGlzcG9zaXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGNpc2VEdXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBvcnRDb21tb2RpdHlDbGFzc2lmaWNhdGlvbi1VU1NjaGVkdWxlQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwb3J0UmVxdWlyZW1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHRlbnNpb25SZWFzb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV5ZUNvbG9yQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFjaWxpdHlJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFjaWxpdHlTZWN1cml0eUNsZWFyYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFpbHVyZVRvQXdhcmRSZWFzb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhbm5pZU1hZUFkanVzdGFibGVSYXRlTW9ydGdhZ2VQbGFuQ29kZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhbm5pZU1hZS1GZWRlcmFsTmF0aW9uYWxNb3J0Z2FnZUFzc29jaWF0aW9uLU1vcnRnYWdlSW5zdXJhbmNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFubmllTWFlLUZlZGVyYWxOYXRpb25hbE1vcnRnYWdlQXNzb2NpYXRpb24tUG9vbEZlYXR1cmVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGYW5uaWVNYWUtRmVkZXJhbE5hdGlvbmFsTW9ydGdhZ2VBc3NvY2lhdGlvbi1SZW1pdHRhbmNlUHJvZ3JhbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhbm5pZU1hZS1GZWRlcmFsTmF0aW9uYWxNb3J0Z2FnZUFzc29jaWF0aW9uLVNwZWNpYWxGZWF0dXJlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFubmllTWFlUmVmaW5hbmNlUGxhbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxGaW5hbmNlQ29kZUxpc3QxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsSGVhbHRoQ2FyZUNvZGVMaXN0MSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbExvZ2lzdGljc0NvZGVMaXN0MSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbFByb2N1cmVtZW50Q29kZUxpc3QxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsVHJhbnNwb3J0YXRpb25Db2RlTGlzdDEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFuY2lhbEFuYWx5c2lzQ2F0ZWdvcmllcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsSW5mb3JtYXRpb25UeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbmNpYWxJdGVtQWxsb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsSXRlbUF0dHJpYnV0ZWRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbmNpYWxJdGVtUmVjbGFzc2lmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsTWFuYWdlbWVudFNlcnZpY2VDYXNoLUxpbmtDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbmNpYWxSYXRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFuY2lhbFJlZ2ltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsUm91dGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsU3RhdGVtZW50Rm9ybWF0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGVldFBhcmFtZXRlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZsb3dPZlRoZUdvb2RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb2xsb3ctVXBDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JlY2FzdFR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVpZ25MaW5lT2ZCdXNpbmVzc0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVpZ25NaWxpdGFyeVNhbGVzQ291bnRyeUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcm1UeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yd2FyZGluZ1Jlc3RyaWN0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZGRpZU1hYy1GZWRlcmFsSG9tZUxvYW5Nb3J0Z2FnZUNvcnBvcmF0aW9uLU1vcnRnYWdlSW5zdXJhbmNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZGRpZU1hYy1GZWRlcmFsSG9tZUxvYW5Nb3J0Z2FnZUNvcnBvcmF0aW9uLVJlbWl0dGFuY2VQcm9ncmFtcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZGRpZU1hYy1GZWRlcmFsSG9tZUxvYW5Nb3J0Z2FnZUNvcnBvcmF0aW9uLVNwZWNpYWxDaGFyYWN0ZXJDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVkZGllTWFjUmVmaW5hbmNlUGxhbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWVPbkJvYXJkU2l0ZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWVab25lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVpZ2h0Rm9yd2FyZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVxdWVuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZXF1ZW5jeUJhbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1bmN0aW9uYWxBcmVhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdW5jdGlvbmFsR3JvdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1bmRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdW5kUHVycG9zZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2Fpbk9yTG9zc0luZGljYXRvckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdlbmVyYWxTZXJ2aWNlc0FkbWluaXN0cmF0aW9uQ3VzdG9tZXJTdXBwbHlDZW50ZXJOdW1iZXJDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW5lcmFsVGVycml0b3J5VHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VuZXJhdG9yU2V0TW91bnRpbmdDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW9ncmFwaGljTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdsYXNzQWN0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZHNEZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJubWVudEFnZW5jeVByb2NlZHVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JhZGVPZkRpZmZpY3VsdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3VwUXVhbGlmaWVyQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGFpckNvbG9yQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGFuZGxpbmdBY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikhhcm1vbml6ZWRTeXN0ZW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhemFyZG91c01hdGVyaWFsQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGF6YXJkb3VzTWF0ZXJpYWxzQ3JlZGVudGlhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGF6YXJkb3VzUmVzcG9uc2VDb2RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhbHRoQ2FyZUNsYWltU3RhdHVzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhbHRoQ2FyZUZpbmFuY2luZ0FkbWluaXN0cmF0aW9uQ29tbW9uUHJvY2VkdXJhbENvZGluZ1N5c3RlbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhbHRoQ2FyZUZpbmFuY2luZ0FkbWluaXN0cmF0aW9uQ29tbW9uUHJvY2VkdXJhbENvZGluZ1N5c3RlbVByaW5jaXBhbFByb2NlZHVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhbHRoQ2FyZUZpbmFuY2luZ0FkbWluaXN0cmF0aW9uRHVyYWJsZU1lZGljYWxFcXVpcG1lbnRSZWdpb25hbENhcnJpZXJDZXJ0aWZpY2F0ZU9mTWVkaWNhbE5lY2Vzc2l0eUZvcm1zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFsdGhjYXJlUHJvdmlkZXJDaGFyYWN0ZXJpc3RpY3NBbmRSZXNvdXJjZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYWx0aGNhcmVQcm92aWRlclRheG9ub215Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFsdGhJbmR1c3RyeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhbHRoSW5kdXN0cnlPcmdhbml6YXRpb25JZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9iYnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkljZDEwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJZGVudGlmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklkZW50aWZ5aW5nQ2hhcmFjdGVyaXN0aWNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJZGVudGl0eURpc2Nsb3N1cmVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbW11bml6YXRpb25JbmplY3Rpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXBhY3RBeGlzT3JBbmFsb2dQb3J0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW1wYWN0UmVjb3JkZXJDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmNpZGVudENvbmRpdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluY2lkZW50Q29uc2VxdWVuY2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmNpZGVudExvY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5jaWRlbnRSZWxhdGVkQWN0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5jb3Rlcm1zMTk4MCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5kaWNhdG9yQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5kaXZpZHVhbEluc3VyYW5jZUZpbmFuY2lhbERldGFpbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5kaXZpZHVhbFBhcnRpY2lwYXRpb25JbkNvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZGl2aWR1YWxTZWN1cml0eUNsZWFyYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5kdXN0cnlSYXRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZm9ybWF0aW9uSW5kaWNhdG9yQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5mb3JtYXRpb25SZXF1ZXN0UmVzdWx0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmZvcm1hdGlvblJlcXVlc3RUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmZvcm1hdGlvblR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluaXRpYWxUcmVhdG1lbnRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnF1aXJ5U2VsZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnNwZWN0aW9uUGFyYW1ldGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJhbmNlQ292ZXJhZ2VEZXRhaWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyYW5jZUluZm9ybWF0aW9uSW5kaWNhdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmFuY2VQbGFuRGVzY3JpcHRpb25DaGFyYWN0ZXJpc3RpY3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybWVkaWF0ZUNvbnRhaW5lckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybWVkaWF0ZUNvbnRhaW5lclF1YW50aXR5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJuYXRpb25hbENsYXNzaWZpY2F0aW9uT2ZEaXNlYXNlc0NsaW5pY2FsTW9kaWZpY2F0aW9uUHJvY2VkdXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm5hdGlvbmFsQ2xhc3NpZmljYXRpb25PZkRpc2Vhc2VzQ2xpbmljYWxNb2RpZmljYXRpb25QcmluY2lwYWxQcm9jZWR1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmF0aW9uYWxDbGFzc2lmaWNhdGlvbk9mRGlzZWFzZXNDbGluaWNhbE1vZGlmaWNhdGlvbi1JY2QtOS1DbUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmF0aW9uYWxTdGFuZGFyZERlc2lnbmF0aW9uU3lzdGVtRm9yVGVldGhBbmRBcmVhc09mVGhlT3JhbENhdml0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52ZW50b3J5Q2F0ZWdvcnlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlbnRvcnlUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52ZXN0aWdhdGlvblN0YXR1c0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVzdG1lbnRGdW5kVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52ZXN0bWVudFR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Iklyc1F1YWxpZmljYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJdGVtTWFuYWdlbWVudENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikl0ZW1Tb3VyY2luZ0NhdGVnb3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJdGVtVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSm9iQ2hhcmFjdGVyaXN0aWNzTG9va3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKb2JPcmlnaW5hdG9yTG9va3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKb2ludExpZmVJbnN1cmFuY2VJbmRpY2F0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikp1ZGljaWFsSGVhcmluZ1R5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKdWRpY2lhbE9yZGVyVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikp1ZGljaWFsU2VudGVuY2VUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSnVyaXNkaWN0aW9uVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS2V5RXZlbnRMb29rdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktpbmRPZkNvbnRyYWN0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS2luZE9mTW9kaWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFib3JhdG9yeVJlc3VsdHNJZGVudGlmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm9yYXRvcnlUZXN0Q29uZGl0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVnYWxDYXNlVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVnYWxFdmVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVnYWxTdHJ1Y3R1cmVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZXR0ZXJPZlJlY29tbWVuZGF0aW9uUmF0aW5nQ2F0ZWdvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpYWJpbGl0eURldGFpbHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpYWJpbGl0eVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpZmVPckFubnVpdHlQcm9kdWN0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlmZU9yQW5udWl0eVNlcnZpY2VGZWF0dXJlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlmZU9yQW5udWl0eVN0YXR1c0NvZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWZlUmVpbnN1cmFuY2VNZXNzYWdlVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGluZUl0ZW1Db25kaXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaW5lT2ZBdXRob3JpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpbmVPZkJ1c2luZXNzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hblR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2FsZU9mQWN0aXZpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2FsU291cmNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhdGlvbk9mR29vZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2F0aW9uc0ZvclRhcmlmZkNhbGN1bGF0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9naWNhbE9ic2VydmF0aW9uSWRlbnRpZmllck5hbWVzQW5kQ29kZXNDb2RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9naXN0aWNzQ29kZUxpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxvc3NEZXNjcmlwdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxvc3NTZXZlcml0eUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvdFR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWpvckZvcmNlUHJvZ3JhbUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbmFnZW1lbnRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW5hZ2VtZW50SW5kaWNhdG9yQ29kZS1QZXRyb2xldW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbnVhbENsYXNzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFyaW5lQmVydGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcmluZVdoYXJmIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXJrZXRQbGFjZU9yZ2FuaXphdGlvbklEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXJrZXRQbGFjZVRyYWRpbmdQYXJ0bmVySUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFsQ29udHJvbENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFscyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVhbnNPZkNvbW11bmljYXRpb25zSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVhbnNPZlRyYW5zcG9ydElkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWNoYW5pemF0aW9uT2ZDb250cmFjdEFkbWluaXN0cmF0aW9uU2VydmljZXNTeXN0ZW1FcnJvckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGlhQW5kU3RhdHVzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaWNhaWRQcm92aWRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaWNhbEJlbmVmaXRzU2NoZWR1bGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYXJlUHJvdmlkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGl1bU9mVHJhbnNtaXNzaW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVtYmVyT3JnYW5pemF0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWV0aG9kRXZhbHVhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1ldGhvZHNPZlBheW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbGl0YXJ5QW5kQ2l2aWxpYW5HcmFkZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbGl0YXJ5QXNzaXN0YW5jZVByb2dyYW1BZGRyZXNzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlub3JpdHlJbmRpY2F0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pc3Npb25JbXBhY3RTdGF0ZW1lbnRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb25ldGFyeUZ1bmN0aW9uRGV0YWlsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3J0Z2FnZUluZGV4U291cmNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTXVsdGktTWVkaWFPYmplY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hY2hhLU5hdGlvbmFsQXV0b21hdGVkQ2xlYXJpbmdIb3VzZUFzc29jaWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbENvdW5jaWxGb3JQcmVzY3JpcHRpb25EcnVnUHJvZ3JhbXNSZWplY3RPclBheW1lbnRDb2RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxDb3VuY2lsT25Db21wZW5zYXRpb25JbnN1cmFuY2VOYXR1cmVPZkluanVyeUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsQ291bmNpbE9uQ29tcGVuc2F0aW9uSW5zdXJhbmNlUGFydE9mQm9keUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsQ291bmNpbE9uQ29tcGVuc2F0aW9uSW5zdXJhbmNlU291cmNlT2ZJbmp1cnlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbERydWdDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbE1vdG9yRnJlaWdodENsYXNzaWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxTdGFuZGFyZFRvb3RoTnVtYmVyaW5nU3lzdGVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXR1cmVPZkJ1eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0dXJlT2ZEZWJ0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0dXJlT2ZFdmVudENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdHVyZU9mSW5qdXJ5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0dXJlT2ZTdWl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXR1cmVPZlN1aXRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXR1cmVPZlRyYW5zYWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb0xvbmdlckNvbnNpZGVyZWRGb3JBd2FyZFJlYXNvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9tZW5jbGF0dXJlQWN0aXZpdHlDbGFzc2lmaWNhdGlvbkVjb25vbXlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tUG9zdGFsVG93biIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9ybWVBY3Rpdml0ZUZyYW5jYWlzZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdGljZVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdGlmaWNhdGlvbkluZGljYXRvckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9ibGlnYXRpb25WYXJpYW5jZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9jY3VwYXRpb25hbFNhZmV0eUFuZEhlYWx0aEFkbWluaXN0cmF0aW9uTmF0dXJlT2ZJbmp1cnlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPY2N1cGF0aW9uYWxTYWZldHlBbmRIZWFsdGhBZG1pbmlzdHJhdGlvblBhcnRPZkJvZHlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPY2N1cGF0aW9uYWxTYWZldHlBbmRIZWFsdGhBZG1pbmlzdHJhdGlvblNvdXJjZU9mSW5qdXJ5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2NjdXBhdGlvbkNsYXNzaWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPY2N1cGF0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2NjdXJyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2NjdXJyZW5jZVNwYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9jZWFuQ2FycmllckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZmVyQW5kUmVsZWFzZU9wdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZmljZU9mV29ya2Vyc0NvbXBlbnNhdGlvblByb2dyYW1zTmF0dXJlT2ZJbmp1cnlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZpY2VPZldvcmtlcnNDb21wZW5zYXRpb25Qcm9ncmFtc09jY3VwYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZpY2VPZldvcmtlcnNDb21wZW5zYXRpb25Qcm9ncmFtc1BhcnRPZkJvZHlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZpY2VPZldvcmtlcnNDb21wZW5zYXRpb25Qcm9ncmFtc1NvdXJjZU9mSW5qdXJ5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3BlcmF0aW5nU3RhdHVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVyYXRpb25UeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdmVyc2l6ZU9yT3ZlcndlaWdodENyZWRlbnRpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik93bmVyc2hpcENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik93bmVyc2hpcFJpZ2h0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFja2FnZUZhaWx1cmVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNraW5nQW5kT3JVbnBhY2tpbmdGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFja2luZ1JlcXVpcmVtZW50TGV2ZWxBQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFja2luZ1JlcXVpcmVtZW50TGV2ZWxCQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFja2luZ1JlcXVpcmVtZW50TGV2ZWxDQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydE9mQm9keUFmZmVjdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0T2ZCb2R5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFzc3BvcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhdGllbnRFdmVudFByb2JsZW1Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50QmVoYXZpb3VyUmF0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50VHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlZGVzdHJpYW5Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJzb25hbFByb3BlcnR5QW5kQ29udGVudHNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXRyb2xldW1CaWxsVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGV0cm9sZXVtTGFuZENhdGVnb3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXRyb2xldW1MZWFzZVN0YXR1cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGV0cm9sZXVtUHJvZHVjdERpc3Bvc2l0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXRyb2xldW1Qcm9kdWN0UG9pbnQtT2YtU2FsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGV0cm9sZXVtUHJvZHVjdFNlbGxpbmdBcnJhbmdlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGV0cm9sZXVtUHJvZHVjdFZhbHVlQWRqdXN0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGV0cm9sZXVtUmVndWxhdG9yeVJlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGV0cm9sZXVtUm95YWx0eUFkanVzdG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBldHJvbGV1bVJveWFsdHlDYWxjdWxhdGlvbk1ldGhvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGV0cm9sZXVtUm95YWx0eVRyYW5zYWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXRyb2xldW1Vbml0ZWRTdGF0ZXNHZW9sb2dpY2FsU3VydmV5Rm9ybWF0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGV0cm9sZXVtV2VsbEFjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGV0cm9sZXVtV2VsbENsYXNzaWZpY2F0aW9uU3RhdHVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXRyb2xldW1XZWxsSW5mb3JtYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBldHJvbGV1bVdlbGxTaHV0LUluUmVhc29uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXRyb2xldW1XZWxsVGVzdEluZm9ybWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaHlzaWNhbENoYXJhY3RlcmlzdGljc0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW50Q2xlYXJhbmNlT2ZmaWNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGx1c09yTWludXNJbmRpY2F0b3JDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb2xpY3lPbkNsYWltSW5kaWNhdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb2xpY3lSZXNlcnZlVmFsdWF0aW9uVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9saWN5VHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9ydGFsSUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvc3RhbERpc3RyaWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3N0YWxTZXJ2aWNlQ2FycmllclJvdXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3N0Y29kZURpcmVjdG9yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9zdE1hcmtldFN0dWR5U3RhdHVzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlY2lvdXNNZXRhbHNJbmRpY2F0b3JDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVzZXJ2YXRpb25EYXRhQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc2VydmF0aW9uTWF0ZXJpYWxDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2ZW50aXZlTWVhc3VyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWFyeURpYWdub3NpcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbmNpcGFsRGlhZ25vc2lzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmluY2lwYWxQYXJ0eUNpdGl6ZW5zaGlwQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JpdHlEZXNpZ25hdG9yQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JpdHlMb29rdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y2VyRmluYW5jaWFsSGlzdG9yeUNvZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdFF1YWxpdHlEZWZpY2llbmN5UmVwb3J0U3VtbWFyeUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3RTdXBwbHlDb25kaXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2Zlc3Npb25hbERlc2lnbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9mZXNzaW9uYWxTdGF0dXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9mZXNzaW9uVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2dyYW1PcmlnaW5hdG9yQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZ3JhbVllYXJDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdGlvblR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3BlcnR5T3duZXJzaGlwRXh0ZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9wZXJ0eU93bmVyc2hpcFR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9wZXJ0eVJlY29yZFN0YXR1c0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3BlcnR5U291cmNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvcGVydHlUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9wZXJ0eVVuZGVyd3JpdGluZ0NvbmRpdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3ByaWV0YXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdXJjaGFzaW5nQ29udHJhY3RPZmZpY2VySW5zdHJ1Y3Rpb25zQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVycG9zZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YWxpdHlBbGVydExpc3RSZWFzb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YWxpdHlBc3N1cmFuY2VTaXRlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGl0eUNvbmZvcm1hbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFsaXR5Q29udHJvbENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5UGVyVW5pdFBhY2tDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWVyeU9wdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1ZXJ5U3RhdHVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWRpb0ZyZXF1ZW5jeVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhZGlvU2VydmljZVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhZGlvU3lzdGVtVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbEFkZGl0aW9uYWxDaGFyZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsY2FyTGV0dGVyTWFya2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbERvY3VtZW50TmFtZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhaWxIYW5kbGluZ1Jlc3RyaWN0aW9uc0FuZEluc3RydWN0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbEhhcm1vbml6ZWRDb2RpZmljYXRpb25PZlRhcmlmZnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhaWxIYXJtb25pemVkRXF1aXBtZW50VHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbFJvdXRlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbFVuaWZpZWROb21lbmNsYXR1cmVPZkdvb2RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsd2F5Q29tcGFueU5ldHdvcmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhaWx3YXlDdXN0b21lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbHdheUZyb250aWVyQW5kVHJhbnNpdFBvaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsd2F5TG9jYXRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsd2F5U2VydmljZXNIYXJtb25pemVkQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmF0ZUNsYXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYXRpbmdTdW1tYXJ5VmFsdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYWxFc3RhdGVBc3NldFR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYXNvbkZvckNvbnRyYWN0RGVsaXZlcnlEYXRlUmV2aXNpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWFzb25Gb3JEZWxheWVkQ2xvc2luZ09mQ29udHJhY3RGaWxlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhc29uRm9yRGlzcG9zYWxDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWFzb25Gb3JGaW5hbmNpYWxJdGVtRGV0YWlsQ2hhbmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWFzb25Gb3JQdWJsaWNSZWNvcmRGaWxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYXNvbkZvclJlcXVpc2l0aW9uaW5nQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjaXBpZW50T2ZCaWxsaW5nU3RhdHVzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjb21tZW5kYXRpb25zUmVnYXJkaW5nRGVsYXllZERlbGl2ZXJpZXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNvcmRDb250cm9sTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNvcmRQcmVjZWRlbmNlQmFzZWRPbkl0c0N1cnJlbmN5SW5UaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZlcmVuY2VBbmRTdGF0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmcmlnZXJhdGlvblVuaXRPcGVyYXRpbmdNb2RlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RlcmVkQ29udHJhY3RvckFjdGl2aXR5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaXN0cmF0aW9uVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVpbnN1cmFuY2VNb25ldGFyeVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlaW5zdXJhbmNlUG9saWN5QXR0cmlidXRlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVqZWN0QWR2aWNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVqZWN0SW5kaWNhdG9yQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRlZERldmljZUFwcGxpY2FiaWxpdHlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxpZ2lvdXNBZmZpbGlhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbWVkaWFsQWN0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVtb3ZhYmxlQWNjZXNzb3JpZXNBbmRTcGVjaWFsRXF1aXBtZW50T25SYWlsY2FycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVudGFsQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBhaXJGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0YWJsZUV2ZW50Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0YWJsZUV2ZW50U3RhdHVzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0RGlzdHJpYnV0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0U291cmNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwcmVzZW50YXRpdmVCdXlJbmRpY2F0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVlc3RDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1ZXN0VHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWlyZW1lbnRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1aXJlbWVudHNJbmRpY2F0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2lkZW5jeUluZGljYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzaWRlbnRpYWxBbmRDb21tZXJjaWFsUm9vbUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3BvbnNlU3RhdHVzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzdHJpY3Rpb25zQW5kUHJvaGliaXRpb25zUGxhY2VkT25UaGVSZS1Vc2VPZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzdWx0RXZhbHVhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldmlld1BlcmlvZEluZGljYXRvckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJpc2tDbGFzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm9hZENoYXJhY3RlcmlzdGljQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm9hZHdheURldGFpbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm9hZHdheVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvdXRlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUnVuVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FmZXR5QW5kRml0bmVzc0VsZWN0cm9uaWNSZWNvcmRTeXN0ZW1zRXJyb3JDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWZldHlBbmRGaXRuZXNzRWxlY3Ryb25pY1JlY29yZFN5c3RlbXNTdWJzY3JpcHRpb25PcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhZmV0eUhhemFyZExvb2t1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FmZXR5UmVndWxhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FsZXNQcmljZUNvbmRpdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbHZhZ2VEaXNwb3NpdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbXBsZUV4dHJhY3Rpb25Mb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VhdmFuT3duZXJzaGlwQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kYXJ5RGlhZ25vc2lzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRhcnlTb3VyY2VPZkluanVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VjdXJpdHlTaGFyZVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VBbmRBZ2VuY3lDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlQ29udHJhY3RBY3RPY2N1cGF0aW9uQ2F0ZWdvcnlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlQ29udHJhY3RBY3RPY2N1cGF0aW9uQ2xhc3NpZmljYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlQ29udHJhY3RBY3RPcGVyYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXR0bGVtZW50T3JQYXlvdXRPcHRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGFyZVR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGVsZkxpZmVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwbWVudEFjY2VwdGFuY2VEaXNjcmVwYW5jeUV4cGxhbmF0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcG1lbnREZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcG1lbnRIb2xkQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcG1lbnRSZWxlYXNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBpbmdBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2lnbmFsQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2luZ2xlU3RhdGVSZWdpc3RyYXRpb25TeXN0ZW1BbmRPcGVyYXRpbmdBdXRob3JpdHlDcmVkZW50aWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaW5nbGVVc2VMYWJlbENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpemVBbmRUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTa2luVG9uZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNtYWxsQXJtc0Vycm9yVHJhbnNhY3Rpb25SZWplY3RDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbWFsbEFybXNUcmFuc2FjdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvY2lhbFNlY3VyaXR5SWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvbGljaXRhdGlvbkNhbmNlbGxhdGlvblJlYXNvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29saWNpdGF0aW9uTWV0aG9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb3VuZENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvdXJjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU291cmNlTWFpbnRlbmFuY2VBbmRSZWNvdmVyYWJpbGl0eUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvdXJjZU9mRGVwb3NpdENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvdXJjZU9mRGlzY2xvc3VyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU291cmNlT2ZJbmp1cnlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb3VyY2VPZkxlYWRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb3VyY2VPZkxvc3NDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsQ2F0ZWdvcnlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsQ29udHJhY3RQcm92aXNpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsRGF0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsSGFuZGxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxNYXJrZXRpbmdUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbE1hcmtpbmdDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsTWF0ZXJpYWxJZGVudGlmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxQcm9ncmFtUmVxdWlyZW1lbnRTdGF0dXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsUmVpbWJ1cnNhYmxlUHJvdmlzaW9uc0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxSZXF1aXJlbWVudExvb2t1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbFJlcXVpcmVtZW50c0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YW5kYXJkSW5kdXN0cmlhbENsYXNzaWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZE9jY3VwYXRpb25DbGFzc2lmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YW5kYXJkVGV4dEFjY29yZGluZ1VTRW1iYXJnb1JlZ3VsYXRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZFRleHRDbGF1c2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZFRleHRGb3JFeHBvcnRBY2NvcmRpbmdOYXRpb25hbFByZXNjcmlwdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGlvbkNsYXNzaWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0aW9uQ2xhc3NpZmljYXRpb25UeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0aXN0aWNhbEFkbWluaXN0cmF0aXZlSW5mb3JtYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0aXN0aWNhbE5hdHVyZU9mVHJhbnNhY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRpc3RpY2FsT2JqZWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0aXN0aWNhbFByb2NlZHVyZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRpc3RpY0J1bmRlc0FtdENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXR1c0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b2NrRXhjaGFuZ2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9ja0V4Y2hhbmdlRGV0YWlsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9ja0Z1bmRPck5vbi1TdG9ja0Z1bmRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9yYWdlRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0dWRlbnRBY3Rpdml0eVR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdHVkZW50QXdhcmRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJjYXNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJyb2dhdGlvbkFjdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnJvZ2F0aW9uUGF5bWVudE9wdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnJvZ2F0aW9uUmVxdWVzdENvZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJyb2dhdGlvblJlc3BvbnNlQ29kZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnNpc3RlbmNlVHlwZU9mUGFja0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1ZmZpeENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1ZmZpeE9yTGltaXRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdW1tb25zVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBsZW1lbnRhbERhdGEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBsZW1lbnRhcnlBY2NvdW50aW5nQ2xhc3NpZmljYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbGllcnNTdG9ja1R1cm5vdmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbHlDb25kaXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJmYWNlRGVzY3JpcHRvckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNXSUZUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTeW50YXhOb3RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3lzdGVtYXRpemVkTm9tZW5jbGF0dXJlT2ZIdW1hbkFuZFZldGVyaW5hcnlNZWRpY2luZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3lzdGVtU3RhdHVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXJpZmZTY2hlZHVsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4QXNzZXNzbWVudE1ldGhvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4T3JGZWVFeGVtcHRpb25SZWFzb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhQYXJ0eUlkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWNobmljYWxBc3Nlc3NtZW50Q2hlY2tsaXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWxlcGhvbmVEaXJlY3RvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbXBsYXRlQ2hhcmFjdGVyaXN0aWNMb29rdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbXBsYXRlT3duZXJMb29rdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbXBsYXRlVHlwZUxvb2t1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVybWluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcm1zT2ZEZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVydGlhcnlEaWFnbm9zaXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlc3RpbmdEZW1vZ3JhcGhpY0NhdGVnb3J5Q29kZUxpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlc3RpbmdTZXJ2aWNlUXVlc3Rpb25Db2RlTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVzdGluZ1N0YXRpc3RpY2FsQ2F0ZWdvcnlDb2RlTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVzdFJlc3VsdHNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaXRsZURvY3VtZW50Q29kZUxpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpdGxlRXhjZXB0aW9uQW5kUmVxdWlyZW1lbnRDb2RlTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhZGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFpbklkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc2FjdGlvblN0YXR1c0luZGljYXRvckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydGF0aW9uQmlsbENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydGF0aW9uSG9sZGluZ0RlbGF5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0YXRpb25Nb2RlT3JNZXRob2RDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRhdGlvbk1vZGVSZWFzb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRhdGlvblByaW9yaXR5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJlYXN1cnlNYW5hZ2VtZW50QXNzb2NpYXRpb25TZXJ2aWNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJlYXN1cnlNYW5hZ2VtZW50QXNzb2NpYXRpb25TZXJ2aWNlQ29kZUFuZEJhbmtTZXJ2aWNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJlYXN1cnlTeW1ib2xDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmVhdG1lbnRDb2RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJlbmRSZWFzb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyaWFsVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVBZGp1c3RtZW50Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZUFuZENhdXNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZUR1ZS1JbkluZGljYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZUlkZW50aXR5Q2hhbmdlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZUluc3BlY3Rpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUeXBlTnVtZXJpY2FsQ29udHJvbFN5c3RlbUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVPZkFzc2V0c0FuZExpYWJpbGl0aWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUeXBlT2ZBc3Npc3RhbmNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZU9mQmlsbENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVPZkJ1c2luZXNzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZU9mQ2FyZ29Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUeXBlT2ZDb250cmFjdENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVPZkNvbnRyYWN0b3JDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUeXBlT2ZEZWxheUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVPZkZpbmFuY2lhbEFjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVPZkZpcm1Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUeXBlT2ZJbmR1c3RyaWFsQWN0aXZpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVPZklucXVpcnlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUeXBlT2ZJbnN1cmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUeXBlT2ZJc3N1ZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVPZkxvY2F0aW9uUmVjb25jaWxpYXRpb25SZXF1ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUeXBlT2ZNZWRpYUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVPZlBhY2thZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVPZlByb2N1cmVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUeXBlT2ZTdG9yYWdlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZU9mU3VydmV5UXVlc3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVQYWNrQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZVBoeXNpY2FsSW52ZW50b3J5T3JUcmFuc2FjdGlvbkhpc3RvcnlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbHRpbWF0ZVJlY2lwaWVudENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuY2xhaW1lZFByb3BlcnR5QWRkaXRpb25zRGVsZXRpb25zQW5kRGVkdWN0aW9uc0NvZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmNsYWltZWRQcm9wZXJ0eVR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmlmb3JtRnJlaWdodENsYXNzaWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pZm9ybVJlc2lkZW50aWFsQXBwcmFpc2FsQXR0cmlidXRlc0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0ZWROYXRpb25zQ29tbW9uQ29kaW5nU3lzdGVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0ZWROYXRpb25zU3RhbmRhcmRQcm9kdWN0c0FuZFNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0ZWRTdGF0ZXNEZXBhcnRtZW50T2ZIZWFsdGhBbmRIdW1hblNlcnZpY2VzT2ZmaWNlT2ZWaXRhbFN0YXRpc3RpY3NFLUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuc29saWNpdGVkUHJvcG9zYWxSZWplY3Rpb25SZWFzb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlV0aWxpemF0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmFjY2luYXRpb25Jbm5vY3VsYXRpb25Pcklzb2xhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhbHVhdGlvblR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYWx1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmFsdWVBZGRlZFRheElkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZWhpY2xlQ2xhc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlaGljbGVPY2N1cGFudENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlaGljbGVQYXJhbWV0ZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXNzZWxTdGF0dXNBbmRUZXJtc09mQ2FycmlhZ2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXNzZWxTdG93YWdlTG9jYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXNzZWxTdXN0YWluaW5nQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmlld1BhcmFtZXRlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZpb2xhdGlvblR5cGVDb2RlTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVm95YWdlRG9jdW1lbnROdW1iZXJDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWb3lhZ2VNYW5pZmVzdFJlZmVyZW5jZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhcmVob3VzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FyUmVzZXJ2ZU1hdGVyaWFsUmVxdWlyZW1lbnRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXRlckNvbW1vZGl0eUFuZFNwZWNpYWxIYW5kbGluZ0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhdGVyVGVybWluYWxJZGVudGlmaWVyQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2VpZ2h0T3JGcmFnaWxpdHlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaGVuRGlzY292ZXJlZExvb2t1cCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mSWRlbnRpZmllciI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iSWRlbnRpZmllciIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mSWRlbnRpZmllciIgdHlwZT0iTGlzdE9mSWRlbnRpZmllciIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTmFtZUFkZHJlc3MiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRXh0ZXJuYWxBZGRyZXNzSUQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOYW1lMSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iTmFtZTIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ik5hbWUzIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IklkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iUE9Cb3giLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlN0cmVldCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iSG91c2VOdW1iZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlN0cmVldFN1cHBsZW1lbnQxIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTdHJlZXRTdXBwbGVtZW50MiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQnVpbGRpbmciIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkZsb29yIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJSb29tTnVtYmVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJJbmhvdXNlTWFpbCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRGVwYXJ0bWVudCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUG9zdGFsQ29kZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQ2l0eSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQ291bnR5IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IlJlZ2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRGlzdHJpY3QiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iQ291bnRyeSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJUaW1lem9uZSIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iQWRkcmVzc1R5cGVDb2RlZCIgdHlwZT0iQWRkcmVzc1R5cGVDb2RlIiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJOb3RBcHBsaWNhYmxlIi8+Ci0gICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkFkZHJlc3NUeXBlQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJOYW1lQWRkcmVzcyIgdHlwZT0iTmFtZUFkZHJlc3MiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlBPQm94Ij4KLSAgICAgICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iUE9Cb3hQb3N0YWxDb2RlIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgIDwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlBPQm94IiB0eXBlPSJQT0JveCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUmVnaW9uIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZWdpb25Db2RlZCIgdHlwZT0iUmVnaW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUmVnaW9uQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVnaW9uIiB0eXBlPSJSZWdpb24iLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iUmVnaW9uQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFVQUNUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBVU5TVyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVVOVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVVRTEQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFVU0EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFVVEFTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBVVZJQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVVXQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJBQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJBTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJBTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJBUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJCQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJDRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJERiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJFUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJHTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJNQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJNRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJNUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJNVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJQQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJQQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJQRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJQSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJQUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJSSiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJSTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJSTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJSUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJSUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJTQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJTRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJTUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlJUTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0FBQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0FCQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0FNQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0FOQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0FORiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0FOUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0FOVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0FPTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0FQRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0FRQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0FTSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0FZVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JBTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JBUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JBVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JCQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JCQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JCRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JCRiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JCSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JCSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JCTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JCTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JCTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JCTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JCUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JCUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JCUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JCVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JCWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JDQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JDRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JDRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JDSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JDSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JDSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JDTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JDTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JDUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JDUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JDVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JDViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JEQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JERiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JERyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JETCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JETiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JETyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JEVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JEViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JEWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JFUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JFUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JGSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JGTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JHTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JHTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JHUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JHUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JHVyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JHWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JIQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JISSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JITCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JIUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JIVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JIVyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JJVyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JLRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JLSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JMQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JMQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JMRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JMRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JMSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JMTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JMTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JMUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JMUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JMVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JMVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JNQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JNRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JNSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JNSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JNTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JNWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JOQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JOQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JOQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JORCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JORSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JOSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JOSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JOTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JOTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JOUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JOVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JOVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JPTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JPUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JPWCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JQQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JQTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JQTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JQTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JQWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JSRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JSRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JSTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JSVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JTQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JTRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JTRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JTRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JTSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JTSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JTTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JTTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JTTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JTUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JTUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JTVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JTVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JTVyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JTWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JUQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JURCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JUSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JUTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JUVyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JXQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JXRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JXRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JXSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JXTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JXTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JXTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JXUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JXVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JZSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JZTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JZUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0JZVyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRBRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRBTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRBTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRBTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRBUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRBUSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRBUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRBVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRBViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRCQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRCRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRCSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRCTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRCTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRCTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRCUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRCUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRCWiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRDQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRDQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRDRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRDSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRDTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRDTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRDTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRDUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRDUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRDVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRDWiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRFTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRGRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRGRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRGSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRGTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRGUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRHRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRHTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRHUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRJTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRJUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRLUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRMQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRMRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRMSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRMTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRMVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRMVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRNQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRNRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRNSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRNTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRNTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRNUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRNVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVROQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVROTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVROVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRPUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRQQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRQQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRQRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRQRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRQRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRQSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRQTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRQTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRQUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRQUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRQVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRQViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRQWiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRSQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRSQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRSRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRSRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRSSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRSTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRSTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRSTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRSViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRTQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRTSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRTTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRTUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRTUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRTUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRTViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRUQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRURSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRUTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRUTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRUUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRUUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRUUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRUViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRVRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRWQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRWQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRWRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRWSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRWUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRWVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVRWViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNBSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNBTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNBUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNBUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNBWiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNDQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNDTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNDVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNEQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNERSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNGTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNHQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNHVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNISSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNJQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNJRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNJTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNJTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNLUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNLWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNMQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNNQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNNRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNNRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNNSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNNTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNNTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNNUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNNUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNNVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNOQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNORCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNORSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNOSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNOSiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNOTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNOViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNOWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNPSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNPSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNPUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNQQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNQUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNSSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNTQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNTRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNUTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNUWCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNVVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNWQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNWSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNWVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNXQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNXSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNXViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNXWSIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQ291bnRyeSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQ291bnRyeUNvZGVkIiB0eXBlPSJDb3VudHJ5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQ291bnRyeUNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IkNvdW50cnkiIHR5cGU9IkNvdW50cnkiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iQ291bnRyeUNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQU8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFRIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFaIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQkIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQkYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQkkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJKIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQk4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJPIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJZIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCWiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNLIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ00iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ1YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNYIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ1oiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJESiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iREsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJETyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRFoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRUciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRVMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRkoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZLIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRk8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR1AiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdRIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR1MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR1ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdZIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJISyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSE4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSFUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSUwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkpNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSlAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS0giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS04iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS1ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktZIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLWiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTEEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxCIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTEkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxLIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTFMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTFYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxZIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1EIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1LIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTU0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1OIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTVAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1RIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTVMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1UIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTVYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1XIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNWCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTVkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1aIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5FIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJORiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5JIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTk8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5QIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTlUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5aIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUEEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQRiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUEciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUEwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUFIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQVyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUFkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlFBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUk8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJVIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSVyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNCIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTSiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU04iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNPIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNWIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1oiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJURCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVEYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVEoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVE8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVFQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRWIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUVyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVFoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVU0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVkUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVk4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZVIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXRiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV1MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IllFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJZVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWVUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlpBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJaTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWlciLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlRpbWV6b25lIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJUaW1lem9uZUNvZGVkIiB0eXBlPSJUaW1lem9uZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRpbWV6b25lQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVGltZXpvbmUiIHR5cGU9IlRpbWV6b25lIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IlRpbWV6b25lQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMTIuMDAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjExLjQ1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxMS4zMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMTEuMTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjExLjAwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxMC40NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMTAuMzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjEwLjE1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxMC4wMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDkuNDUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjA5LjMwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwOS4xNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDkuMDAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjA4LjQ1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwOC4zMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDguMTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjA4LjAwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwNy40NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDcuMzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjA3LjE1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwNy4wMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDYuNDUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjA2LjMwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwNi4xNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDYuMDAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjA1LjQ1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwNS4zMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDUuMTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjA1LjAwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwNC40NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDQuMzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjA0LjE1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwNC4wMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDMuNDUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjAzLjMwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwMy4xNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDMuMDAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjAyLjQ1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwMi4zMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDIuMTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjAyLjAwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwMS40NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDEuMzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjAxLjE1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwMS4wMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDAuNDUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjAwLjMwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIwMC4xNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMDAuMDAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wMC4xNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTAwLjMwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDAuNDUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wMS4wMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTAxLjE1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDEuMzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wMS40NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTAyLjAwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDIuMTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wMi4zMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTAyLjQ1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDMuMDAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wMy4xNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTAzLjMwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDMuNDUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wNC4wMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTA0LjE1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDQuMzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wNC40NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTA1LjAwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDUuMTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wNS4zMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTA1LjQ1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDYuMDAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wNi4xNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTA2LjMwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDYuNDUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wNy4wMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTA3LjE1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDcuMzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wNy40NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTA4LjAwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDguMTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wOC4zMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTA4LjQ1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDkuMDAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0wOS4xNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTA5LjMwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMDkuNDUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0xMC4wMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTEwLjE1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMTAuMzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0xMC40NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTExLjAwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMTEuMTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ii0xMS4zMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iLTExLjQ1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSItMTIuMDAiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iQWRkcmVzc1R5cGVDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjZXB0YW5jZUxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50c1BheWFibGVPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFja25vd2xlZGdlbWVudFJlY2lwaWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkaXRpb25hbEFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkZGl0aW9uYWxEZWxpdmVyeUFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkZGl0aW9uYWxQaWNrVXBBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGNvaG9sQmV2ZXJhZ2VEZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbHRlcm5hdGVSZXR1cm5BZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbHRlcm5hdGl2ZUFkZHJlc3NlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXVkaXRPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhaWxtZW50V2FyZWhvdXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWRPcGVuaW5nTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxBbmRTaGlwVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxlZEZyb20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxPZkxhZGluZ1JlY2lwaWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbFRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb29raW5nT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5keUFuZENvbmZlY3Rpb25zRGVwYXJ0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhbmdlZEFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBhbnlBc3NpZ25lZFdlbGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBhbnktT3duZWRPaWxGaWVsZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbmVlQ291cmllclRyYW5zZmVyU3RhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbm9yQ291cmllclRyYW5zZmVyU3RhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc3VsdGFudHNPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhY3RPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lckxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3B5TWVzc2FnZVRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3Jwb3JhdGVPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcnJlY3RlZEFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5QWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzdGluYXRpb25NYWlsRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpZmZlcmVudFByZW1pc2VBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXN0cmlidXRpb25SZWNpcGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50T3JNZXNzYWdlSXNzdWVyT3JTZW5kZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50UmVjaXBpZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb21lc3RpY0ZpbmFuY2lhbEluc3RpdHV0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb3duc3RyZWFtTWV0ZXJMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJvcC1PZmZMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1lcmdlbmN5RGVwYXJ0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXN0YWJsaXNoZWRMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXZlbnRMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlsaW5nQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlsaW5nTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbGluZ09mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYWxNZXNzYWdlUmVjaXBpZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbFJlY2lwaWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYWxTY2hlZHVsZWREZXN0aW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsSW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpcnN0Q29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxvcmFsRGVwYXJ0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWlnbkRpc2Nsb3N1cmVJbmZvcm1hdGlvbk9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWlnbk9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWlnblJlZ2lzdHJhdGlvbkxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JtZXJBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVlb25Cb2FyZFBvaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcm96ZW5EZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXJhZ2VkTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdhc1BsYW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXNUcmFuc2FjdGlvbkVuZGluZ1BvaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXNUcmFuc2FjdGlvblBvaW50MSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FzVHJhbnNhY3Rpb25Qb2ludDIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdhc1RyYW5zYWN0aW9uU3RhcnRpbmdQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGF6YXJkb3VzTWF0ZXJpYWxPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYWRPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvbWVPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkltcG9ydGVkRnJvbUxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmNvcnBvcmF0ZWRMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5jb3Jwb3JhdGlvblN0YXRlUGxhY2VPZkJ1c2luZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmNvcnBvcmF0aW9uU3RhdGVQcmluY2lwYWxPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklucXVpcnlBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnNwZWN0aW9uQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zcGVjdGlvbkFuZEFjY2VwdGFuY2VMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zcGVjdGlvbkxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN0YWxsZWRBdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW4tU3RvcmVCYWtlcnlEZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmVkTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm9yYXRvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RCcmVha1Rlcm1pbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWFzZUxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaXN0aW5nT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhbENoYWluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhdGlvbk9mR29vZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2F0aW9uT2ZHb29kc0ZvckN1c3RvbXNFeGFtaW5hdGlvbkJlZm9yZUNsZWFyYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYXRpb25PZkxvYWRFeGNoYW5nZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYXRpb25PZlNwb3RGb3JTdG9yYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haWxBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWlsVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbnVmYWN0dXJpbmdQbGFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFzdGVyUHJvcGVydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFsQ2hhbmdlTm90aWNlQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0ZXJpYWxEaXNwb3NpdGlvbkF1dGhvcml6YXRpb25Mb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVhdERlcGFydG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZXRpbmdMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVzc2FnZUZyb20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lc3NhZ2VSZWNpcGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lc3NhZ2VUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmVpZ2hib3Job29kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXdBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXdTdXBwbHlTb3VyY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5leHREZXN0aW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV4dFNjaGVkdWxlZERlc3RpbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tVGVtcG9yYXJ5U3RvcmFnZUZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RBcHBsaWNhYmxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVyYXRvck9mVGhlVHJhbnNmZXJQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luYWxMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luTWFpbEZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5TdWJsb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luVGVybWluYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyRGVwYXJ0bWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik91dGVyQ29udGluZW50YWxTaGVsZkFyZWFMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0LU9mLVN0YXRlUHJpbmNpcGFsT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25pbmdJbnZlbnRvcnlDb250cm9sUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnRTb3VyY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJzb25uZWxPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBoYXJtYWN5RGVwYXJ0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGh5c2ljYWxBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWNrVXBBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaXBlbGluZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlwZWxpbmVTZWdtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaXBlbGluZVNlZ21lbnRCb3VuZGFyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhY2VPZkJvdHRsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFjZU9mQnVzaW5lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvc3RhbE1haWxpbmdBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVsaW1pbmFyeUluc3BlY3Rpb25Mb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlbWlzZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXNlbnRBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltYXJ5Q29udHJvbFBvaW50TG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y2VEZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0U2VydmljZXNBbmRSZXBhaXJzQ2VudHJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0Q29vcmRpbmF0aW9uT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0TWFuYWdlbWVudE9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdFByb3BlcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9wZXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGl0eUNvbnRyb2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhZGlvQ29udHJvbFN0YXRpb25Mb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbHJvYWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpcHRNZXRlckxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXB0Wm9uZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2ZWRGcm9tIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXZlclNpdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmluZ0xvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXZpbmdQb2ludEZvckN1c3RvbWVyU2FtcGxlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2aW5nU3ViLUxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNsYW1hdGlvbkNlbnRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjb3JkLUtlZXBpbmdBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZpbmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaW9uYWxPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2lzdGVyZWRPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGVhc2VUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVtaXRUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwYWlyaW5nT3V0bGV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBhaXJPclJlZnVyYmlzaExvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBvcnRpbmdMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzZWFyY2hJbnN0aXR1dGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2lkZW5jZU9yRG9taWNpbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldHVybmVkVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvdXRpbmdQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FsZXNPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbXBsZXNUb0JlUmV0dXJuZWRUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FtcGxpbmdMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kYXJ5TG9jYXRpb25BZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRIb21lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxsaW5nT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlQnVyZWF1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoZWx0ZXJlZFdvcmtzaG9wIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwRnJvbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcFRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbWFsbEJhc2VTdGF0aW9uTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNtYWxsQ29udHJvbFN0YXRpb25Mb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29sZFRvQW5kU2hpcFRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb2xkVG9JZkRpZmZlcmVudEZyb21CaWxsVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b3JhZ2VBcmVhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9yYWdlRmFjaWxpdHlhdERlc3RpbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9yYWdlRmFjaWxpdHlBdE9yaWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvcmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvbGRUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3ViY29udHJhY3RPckNvZ25pemFudFNlY3VyaXR5T2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJqZWN0UHJvcGVydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1Yi1PZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnNpZGlhcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnNpZGlhcnlEaXZpc2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxpZXJPck1hbnVmYWN0dXJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxpZXJzQ29ycG9yYXRlT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbHlTb3VyY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhbmtGYXJtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhDb2xsZWN0b3JzT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWNobmljYWxPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcm1pbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXJtaW5hbExvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXN0aW5nTGFib3JhdG9yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG9vbFNvdXJjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNmZXJQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNmZXJUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0YXRpb25PZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVsdGltYXRlQ29uc2lnbmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbHRpbWF0ZUN1c3RvbWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbHRpbWF0ZVBhcmVudENvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRQcm9wZXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVXBzdHJlYW1NZXRlckxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYWNhdGlvbkhvbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlbmRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmlkZW9EZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJlaG91c2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ildob2xlc2FsZXIiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkNvbnRhY3QiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQ29udGFjdElEIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iSWRlbnRpZmllciIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQ29udGFjdE5hbWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iQ29udGFjdEZ1bmN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJDb250YWN0RGVzY3JpcHRpb24iIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iTGlzdE9mQ29udGFjdE51bWJlciIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQ29udGFjdCIgdHlwZT0iQ29udGFjdCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQ29udGFjdEZ1bmN0aW9uIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDb250YWN0RnVuY3Rpb25Db2RlZCIgdHlwZT0iQ29udGFjdEZ1bmN0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQ29udGFjdEZ1bmN0aW9uQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQ29udGFjdEZ1bmN0aW9uIiB0eXBlPSJDb250YWN0RnVuY3Rpb24iLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iQ29udGFjdEZ1bmN0aW9uQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY2VwdGluZ0NvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY2VwdGluZ09mZmljaWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50aW5nY29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudHNQYXlhYmxlQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudHNSZWNlaXZhYmxlQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkaXRpb25hbEluc3VyYW5jZUluZm9ybWF0aW9uQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRtaW5pc3RyYXRpdmVDb250cmFjdGluZ09mZmljZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkbWluaXN0cmF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmlzb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFmdGVyLUhvdXJzQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsdGVybmF0ZUNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2FudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwb2ludG1lbnRTY2hlZHVsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcHJhaXNlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXR0ZW50aW9uLVRvUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF0dG9ybmV5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdWRpdGluZ0NvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhvcml6ZWRGaW5hbmNpYWxDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3JpemVkTmVnb3RpYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXV0aG9yaXplZFJlcHJlc2VudGF0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3JpemVkU2lnbmF0dXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRvbWF0ZWRDbGVhcmluZ2hvdXNlQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFua2luZ0NvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxJbnF1aXJ5Q29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9hcmRTdGFmZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJva2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcm9rZXJDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc1VuaXRNYW5hZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllck5hbWVvckRlcGFydG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNBREFuZENBTVNwZWNpYWxpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2VNYW5hZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0aW9uQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VydGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFpcm1hbk9mVGhlQm9hcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYW5nZWRCeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhbmdlT3JkZXJBcHByb3ZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hpZWZFeGVjdXRpdmVPZmZpY2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGllZkZpbmFuY2lhbE9mZmljZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoaWVmSW5mb3JtYXRpb25PZmZpY2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGllZk9wZXJhdGluZ09mZmljZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNpdHlXb3Jrc0F1dGhvcml0eUNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsYWltYW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGFpbUFwcHJvdmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGFpbVJlY2lwaWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xhaW1zQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xlYXJpbmdob3VzZUNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsZXJrT2ZDb3VydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ28tQm9ycm93ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvLUludmVzdGlnYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29sbGVjdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsZWdlb2ZFZHVjYXRpb25BZG1pc3Npb25zT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wbGlhbmNlT2ZmaWNlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcG9uZW50RW5naW5lZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXB1dGVyU3lzdGVtc0NvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbmN1cnJlbnRFbXBsb3llckNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbmZpcm1lZFdpdGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNpZ25lZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbm9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJNYW5hZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdENvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvb3JkaW5hdGlvbkNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvb3JkaW5hdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3Jwb3JhdGVQdXJjaGFzaW5nQWdlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvc3RBbmRTY2hlZHVsZUNvb3JkaW5hdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lckNvbnRhY3RHcmFudGluZ0FwcG9pbnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lckVuZ2luZWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lck1haW50ZW5hbmNlTWFuYWdlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJSZWxhdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhbmdlcm91c0dvb2RzQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeUluc3RydWN0aW9uc0NvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbnRhbFNjaG9vbEFkbWlzc2lvbnNPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydG1lbnRPckVtcGxveWVlVG9FeGVjdXRlRXhwb3J0UHJvY2VkdXJlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudE9yRW1wbG95ZWVUb0V4ZWN1dGVJbXBvcnRQcm9jZWR1cmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50T3JQZXJzb25SZXNwb25zaWJsZUZvclByb2Nlc3NpbmdQdXJjaGFzZU9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXNpZ25FbmdpbmVlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGV2ZWxvcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpcmVjdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXJlY3RvcnlBZHZlcnRpc2luZ0NvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpdmlzaW9uRGlyZWN0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpdmlzaW9uTWFuYWdlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRURJQ29vcmRpbmF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVkdWNhdGlvbkNvb3JkaW5hdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGVjdHJpY2l0eVN1cHBseUNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVsZWN0cm9uaWNEYXRhSW50ZXJjaGFuZ2VDb29yZGluYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWxlY3Ryb25pY1N1Ym1pc3Npb25SZWNpcGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtZXJnZW5jeUNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtZXJnZW5jeUNvbnRhY3QtQ29uc2lnbmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbWVyZ2VuY3lDb250YWN0LU1pbGl0YXJ5VHJhZmZpY01hbmFnZW1lbnRDb21tYW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbWVyZ2VuY3lDb250YWN0LVNoaXBwZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtZXJnZW5jeURhbmdlcm91c0dvb2RzQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZXJDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmdpbmVlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5naW5lZXJpbmdDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbnRlcmVkQnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXZlbmluZ1Byb2dyYW1zT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGVjdXRpdmVPZmZpY2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGVjdXRpdmVWaWNlLVByZXNpZGVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwZWRpdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbmNpYWxBaWRPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVjbG9zaW5nTGVuZGVyQWRtaW5pc3RyYXRpdmVDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3J3YXJkZXJDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdW5jdGlvbmFsTWFuYWdlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FzU3VwcGx5Q29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VuZXJhbENvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdvb2RzUmVjZWl2aW5nQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JhZHVhdGVBZG1pc3Npb25zT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmFkdWF0ZUJ1c2luZXNzT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmFkdWF0ZUVuZ2luZWVyaW5nT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmFkdWF0ZUZpbmVBcnRzT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHdWlkYW5jZUNvdW5zZWxvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGF6YXJkb3VzTWF0ZXJpYWxDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFkT2ZVbml0Rm9ySW5mb3JtYXRpb25EaXNzZW1pbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFkT2ZVbml0Rm9ySW5mb3JtYXRpb25Qcm9kdWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFkT2ZVbml0T3JDb21wdXRlckRhdGFQcm9jZXNzaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFsdGhNYWludGVuYW5jZU9yZ2FuaXphdGlvbkNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikh1bWFuUmVzb3VyY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmZvcm1hdGlvbkNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyYW5jZUNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyZWRQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJlckNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVydmlld2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlc3RpZ2F0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVzdG1lbnRDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJc3N1aW5nT2ZmaWNlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSm9pbnRXb3JrQWdlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm9yYXRvcnlDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYW5kcmVnaXN0cnlDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXdGaXJtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXdTY2hvb2xBZG1pc3Npb25zT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWdhbEF1ZGl0aW5nQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGljZW5zZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2FsUHVyY2hhc2luZ0FnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWludGVuYW5jZUNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbmFnZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbnVmYWN0dXJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbnVmYWN0dXJpbmdQbGFudENvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcmtldGluZ0RlcGFydG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcmtldGluZ0RpcmVjdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXRlcmlhbENvbnRyb2xDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXRlcmlhbERpc3Bvc2l0aW9uQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0ZXJpYWxIYW5kbGluZ0NvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFsU2FmZXR5RGF0YVNoZWV0Q29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF5b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYWxBZG1pc3Npb25zT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FsQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVzc2FnZVJlY2lwaWVudENvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lc3NhZ2VTZW5kZXJDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNdWx0aXBsZUxpc3RpbmdTZXJ2aWNlU3RhZmYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik11bHRpcGxlTGlzdGluZ1NlcnZpY2VWZW5kb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsQWdlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld0J1c2luZXNzUHJvY2Vzc2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV3RGV2ZWxvcG1lbnRzQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90YXJ5UHVibGljIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RpZmljYXRpb25Db250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1lcmljYWxDb250cm9sRW5naW5lZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZmljZU1hbmFnZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZmljZVN0YWZmIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVyYXRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlckNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yZGVyRGVwYXJ0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JkZXJpbmdPZmZpY2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlckFkdWx0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3duZXJSZXByZXNlbnRhdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFja2FnZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcmVudG9yR3VhcmRpYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnRpY2lwYXRpbmdMYWJvcmF0b3J5Q29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydG5lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF0aWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5ZWVDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXllcnNDbGFpbU9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyZm9ybWFuY2VFdmFsdWF0aW9uQ29tbWl0dGVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJzb25uZWxDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaHlzaWNpYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYWNlT2ZDb2xsZWN0aW9uQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhY2VPZkRlbGl2ZXJ5Q29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhbnRNYW5hZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFudE9yRXF1aXBtZW50Q29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhdGZvcm1NYWludGVuYW5jZU1hbmFnZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvcnRFbmdpbmVlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlYXdhcmRTdXJ2ZXlNYW5hZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVmZXJyZWRQcm92aWRlck9yZ2FuaXphdGlvbkNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXBhcmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVzaWRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaWNlQWRtaW5pc3RyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1hcnlDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltYXJ5Q29udHJvbFBvaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltYXJ5VGF4cGF5ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW5jaXBhbFN0dWR5Q29udGFjdG9yQXV0aG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9iYXRpb25vckxlZ2FsT2ZmaWNlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvY2Vzc0VuZ2luZWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9jZXNzb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3Rpb25SZXByZXNlbnRhdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdE1hbmFnZW1lbnRDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9ncmFtRGlyZWN0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2dyYW1NYW5hZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0RGlyZWN0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2plY3RNYW5hZ2VtZW50Q29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdE1hbmFnZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3RvdHlwZUNvb3JkaW5hdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm92aWRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVibGljUmVsYXRpb25zQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVyY2hhc2VTZXJ2aWNlUHJvdmlkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNpbmdDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdXJjaGFzaW5nQ29udHJhY3RpbmdPZmZpY2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFsaXR5QXNzdXJhbmNlQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGl0eUNvb3JkaW5hdG9yQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGl0eUluc3BlY3RvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGl0eU1hbmFnZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5U3VydmV5b3JDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdW90aW5nUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhdGVTdXBlcnZpc29yT3JDbGVyayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhbEVzdGF0ZVByb3BlcnR5S2V5SG9sZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWFsRXN0YXRlUHJvcGVydHlPY2N1cGFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmViYXRlT3JDaGFyZ2ViYWNrQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2aW5nQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2aW5nRG9ja0NvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2lzdHJhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVudGFsQ29tcGFueUFkbWluaXN0cmF0aXZlQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0QXV0aG9yaXplciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0UHJlcGFyZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVlc3RvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzcG9uZGFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzcG9uc2libGVQZXJzb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3BvbnNpYmxlUGVyc29uRm9yQ29tcHV0ZXJEYXRhUHJvY2Vzc2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzcG9uc2libGVQZXJzb25mb3JJbmZvcm1hdGlvbkRpc3NlbWluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3BvbnNpYmxlUGVyc29uRm9ySW5mb3JtYXRpb25Qcm9kdWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXZpZXdBbmRSZXByaWNpbmdDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWxlc0FkbWluaXN0cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWxlc1JlcHJlc2VudGF0aXZlT3JEZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTY2hlZHVsZUNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjaG9vbENsZXJrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTY2hvb2xvZlRoZW9sb2d5QWRtaXNzaW9uc09mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Nob29sb2ZWZXRlcmluYXJ5TWVkaWNpbmVBZG1pc3Npb25zT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTY2hvb2xQcmluY2lwYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY29uZGFyeVRheHBheWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNyZXRhcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlTWFuYWdlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZU9yZGVyV3JpdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlT3JnYW5pemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlVGVhbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZVRlY2huaWNpYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwZXJDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwcGluZ0NvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvY2lhbFNlcnZpY2VzV29ya2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb2Z0d2FyZUhvdXNlQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbFByb2dyYW1Db250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcG91c2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YWZmIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdHVkZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdHVkZW50aW5BYnNlbnRpYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3R1ZHlTdWJtaXR0ZXJDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJtaXR0aW5nQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwZXJ2aXNvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxpZXJDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTeXN0ZW1zQWRtaW5pc3RyYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVjaG5pY2FsQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVjaG5pY2FsRGVwYXJ0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVjaG5pY2FsRG9jdW1lbnRhdGlvblJlY2lwaWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVjaG5pY2FsTWFya2V0aW5nUmVwcmVzZW50YXRpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlY2huaWNhbFdyaXRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVsZWNvbW11bmljYXRpb25zTmV0d29ya0NvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbGVwaG9uZUFuc3dlcmluZ1NlcnZpY2VDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZW5hbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbmRlckRldmVsb3BlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVzdENvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaXJkLVBhcnR5QWRtaW5pc3RyYXRvckNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvd25QbGFubmluZ0NvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWZmaWNBZG1pbmlzdHJhdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFmZmljQXV0aG9yaXR5Q29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNtaXR0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydENvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydEluZnJhc3RydWN0dXJlQXV0aG9yaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmVhc3VyZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVsdGltYXRlQ29uc2lnbmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbHRpbWF0ZVJlY2VpdmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmRlcmdyYWR1YXRlQWRtaXNzaW9uc09mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5kZXJ3cml0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaW9uUHJlc2lkZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWaWNlUHJlc2lkZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYWl2ZXJDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJlaG91c2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhdGVyU3VwcGx5Q29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2l0bmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29ya0Jyb2tlck1haW50ZW5hbmNlTWFuYWdlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29ya3Nob3BDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3Jrc01hbmFnZW1lbnRDb250YWN0Ii8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZDb250YWN0TnVtYmVyIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJDb250YWN0TnVtYmVyIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMaXN0T2ZDb250YWN0TnVtYmVyIiB0eXBlPSJMaXN0T2ZDb250YWN0TnVtYmVyIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJDb250YWN0TnVtYmVyIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDb250YWN0TnVtYmVyVmFsdWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDb250YWN0TnVtYmVyVHlwZUNvZGVkIiB0eXBlPSJDb250YWN0TnVtYmVyVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkNvbnRhY3ROdW1iZXJUeXBlQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQ29udGFjdE51bWJlciIgdHlwZT0iQ29udGFjdE51bWJlciIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJDb250YWN0TnVtYmVyVHlwZUNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWxlcGhvbmVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZheE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1haWxBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb2JpbGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbGV4TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWdlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9tZVBhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldXVyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRlRQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUkxPdGhlciIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mQ29udGFjdCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iQ29udGFjdCIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mQ29udGFjdCIgdHlwZT0iTGlzdE9mQ29udGFjdCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUGFydHlDb2RlZCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iUGFydHlDb2RlZCIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mUGFydHlDb2RlZCIgdHlwZT0iTGlzdE9mUGFydHlDb2RlZCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUGFydHlDb2RlZCI+Ci0gICAgICAgIDx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJQYXJ0eSI+Ci0gICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlBhcnR5Um9sZUNvZGVkIiB0eXBlPSJQYXJ0eVJvbGVDb2RlIi8+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlBhcnR5Um9sZUNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDwveHNkOmV4dGVuc2lvbj4KLSAgICAgICAgPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlBhcnR5Q29kZWQiIHR5cGU9IlBhcnR5Q29kZWQiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iUGFydHlSb2xlQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY2VwdGFuY2VMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjZXB0aW5nUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRDb29yZGluYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudGluZ1N0YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRPZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudE9mRGVzdGluYXRpb25QYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudE9mLU9yaWdpblBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50T3duZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRPd25lcnNTZXJ2aWNpbmdCYW5rT25UaGVSZWNlaXZpbmdTaWRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50T3duZXJzU2VydmljaW5nQmFua09uVGhlU2VuZGluZ1NpZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRTZXJ2aWNpbmdGaW5hbmNpYWxJbnN0aXR1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudHNQYXlhYmxlT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2tub3dsZWRnZW1lbnRSZWNpcGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjcm9ueW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdGlvblBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3R1YWxQdXJjaGFzZXJzQ3VzdG9tZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdHVhbFJlZmVycmVkQnlPcmdhbml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdHVhbFJlZmVycmVkVG9Pcmdhbml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdXRlQ2FyZUhvc3BpdGFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRpdGlvbmFsQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkaXRpb25hbERlYnRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkaXRpb25hbERlbGl2ZXJ5QWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkaXRpb25hbFBpY2tVcEFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkanVzdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZG1pbmlzdHJhdGlvbkNlbnRyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRtaW5pc3RyYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRtaXR0aW5nSGVhbHRoQ2FyZVByb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZG1pdHRpbmdTZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRtaXR0aW5nU3VyZ2VvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWR1bHREYXlDYXJlUHJvZ3JhbUZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZlcnRpc2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZlcnRpc2luZ0dyb3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZpc2VUaHJvdWdoQmFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWR2aXNpbmdCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZpc29yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZmZpYW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZmZpbGlhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFmZmlsaWF0ZWRDb21wYW55Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZmZpbGlhdGVkUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlbmN5R3JhbnRpbmdTZWN1cml0eUNsZWFyYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlbnRPclJlcHJlc2VudGF0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ2VudHNCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBSURTT3JBUkNVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJBbWJ1bGFuY2VTZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWlyQ2FyZ29Db21wYW55Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJGb3JjZUZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJsaW5lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJwb3J0QXV0aG9yaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGNvaG9sQmV2ZXJhZ2VEZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGNvaG9saXNtQW5kT3RoZXJDaGVtaWNhbERlcGVuZGVuY3lGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxjb2hvbE9yRHJ1Z0FidXNlT3JEZXBlbmRlbmN5SW5wYXRpZW50VW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxjb2hvbE9yRHJ1Z0FidXNlT3JEZXBlbmRlbmN5T3V0cGF0aWVudFNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGlhcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxpZW5BZmZpbGlhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbGVnZWREZWJ0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbGlhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxpZWRIZWFsdGhQcm9mZXNzaW9uYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbG90bWVudEN1c3RvbWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxvd2FibGVSZWNpcGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsdGVybmF0ZVJldHVybkFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsdGVybmF0aXZlQWRkcmVzc2VlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbHRlcm5hdGl2ZU1hbnVmYWN0dXJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWx6aGVpbWVyc0RpYWdub3N0aWNPckFzc2Vzc21lbnRTZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1lbmRlZE5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtZXJpY2FuSW5kaWFuLU93bmVkQnVzaW5lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtaWN1c0N1cmlhZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW5lc3RoZXNpb2xvZ3lTZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW5naW9wbGFzdHlGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW5pbWFsQmVpbmdJbnZlc3RpZ2F0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFuaW1hbFNvdXJjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW5udWl0YW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbm51aXRhbnRQYXlvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW50ZW5uYVNpdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGVsbGFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwZWxsZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2FudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYW50Q29tYWtlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYW50Rm9ySm9iIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhbnRzQmFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYW50c0Nvc2lnbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhbnRzRW1wbG95ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2FudHNSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2F0aW9uUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcHJhaXNhbENvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcHJhaXNlck5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcHJvdmVkQ29uc2lnbm9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHByb3ZlZEltcG9ydGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHByb3ZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJiaXRyYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJjaGl0ZWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcmNoaXRlY3QtRGVzaWduZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFyZWFPZk9wZXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJtZWRTZXJ2aWNlc0xvY2F0aW9uRGVzaWduYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFybXlGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJyZXN0aW5nT2ZmaWNlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJ0aHJpdGlzVHJlYXRtZW50Q2VudGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NldEFjY291bnRIb2xkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2lnbmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NpZ25lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzaWdub3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2lzdGFudFN1cmdlb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2lzdGFudFVTVHJ1c3RlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzb2NpYXRlR2VuZXJhbEFnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NvY2lhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXR0ZW5kaW5nUGh5c2ljaWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdHRvcm5leSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXR0b3JuZXlGb3JEZWZlbmRhbnRQcml2YXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdHRvcm5leUZvckRlZmVuZGFudFB1YmxpYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXR0b3JuZXlGb3JQbGFpbnRpZmYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF0dG9ybmV5T2ZSZWNvcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1Y3Rpb25lZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1ZGl0T2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdWRpdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRoZW50aWNhdGluZ1BhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhvcml0eUZvclNoaXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3JpemF0aW9uQXNzaWduZWRCeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXV0aG9yaXplZEFjY2VwdGluZ09mZmljaWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3JpemVkRW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3JpemVkRXhwb3J0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhvcml6ZWRGcm9tIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3JpemVkSW1wb3J0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhvcml6ZWRNYXJrZXRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXV0aG9yaXplZE9mZmljaWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3JpemVkVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhvcml6ZWRUcmFkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhvcml6aW5nT2ZmaWNpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dG9tYXRlZERhdGFQcm9jZXNzaW5nUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dG9tYXRlZFVuZGVyd3JpdGluZ1N5c3RlbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXZhaWxhYmxlV2l0aEJhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF2YWlsYWJpbGl0eVNoaXBUb1BhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYWlsaWZmIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYWlsbWVudFdhcmVob3VzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFpbFBheW9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYWtlcnlEZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYW5rZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbmtydXB0Y3lSZWZlcmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYW5rcnVwdGN5VHJ1c3RlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFzZUp1cmlzZGljdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFzZVBlcmlvZEVtcGxveWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXR0ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZW5lZmljaWFsT3duZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbmVmaWNpYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZW5lZmljaWFyeXNCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWRkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpZE9wZW5pbmdMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbEFuZFNoaXBUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbGVkRnJvbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbGluZ1Byb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsaW5nU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbE9mTGFkaW5nUmVjaXBpZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGwtVG9QYXJ0eUZvckRpdmVyc2lvbkNoYXJnZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpcnRoaW5nUm9vbU9yTERSUFJvb20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpcnRoTmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlydGhwbGFjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmxvb2RCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb2FyZE9mUmVhbHRvcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvYnRhaWxTZXJ2aWNlUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvbmRzbWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb29raW5nQWdlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvb2tpbmdPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvb2trZWVwZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvcmRlckNyb3NzaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3Jyb3dlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9ycm93ZXJzRW1wbG95ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvdHRsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyYWtlbWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcmFuY2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyYW5kTmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJlYWtCdWxrQmVydGhPcGVyYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJlYWtCdWxrUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyb2FkY2FzdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcm9rZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyb2tlckRlYWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJva2VyT3Bpbmlvbk9yQW5hbHlzaXNSZXF1ZXN0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyb2tlck9yU2FsZXNPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyb2tlcnNBc3Npc3RhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1aWxkZXJOYW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdWlsZGluZ0luc3BlY3RvcmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVpbGRpbmdTaXRlRW5naW5lZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1aWxkaW5nU2l0ZUZvcndhcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVpbGRpbmdTaXRlUHVyY2hhc2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXJlYXVPZkxhbmRNYW5hZ2VtZW50UHJvcGVydHlVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXJuQ2FyZVVuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1c2luZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc0FyZWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1c2luZXNzQXNzb2NpYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc0VudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NQYXJ0bmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5ZXJBc09mZmljaWFsbHlSZWdpc3RlcmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllcnNBZ2VudE9yUmVwcmVzZW50YXRpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyc0JhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyc0NvcnBvcmF0ZU9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5ZXJzRmluYW5jaWFsSW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyc1BhcmVudENvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyc1F1YWxpdHlSZXZpZXdCb2FyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5aW5nR3JvdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWluZ1BhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5hZGlhbkN1c3RvbXNCcm9rZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbmRpZGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuZHlBbmRDb25mZWN0aW9uc0RlcGFydG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcmRpYWNDYXRoZXJpemF0aW9uTGFib3JhdG9yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyZGlhY0ludGVuc2l2ZUNhcmVVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJkaWFjUmVoYWJpbGl0YXRpb25Qcm9ncmFtRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcmRpYWNSZWhhYmlsaXRhdGlvblNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJuZXRJc3N1ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcnJpZXJzQWdlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2VNYW5hZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXNlT2ZOZWVkUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2hQb29sTGV2ZWxBY2NvdW50U2VydmljaW5nRmluYW5jaWFsSW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2hQb29sU3ViLUFjY291bnRTZXJ2aWNpbmdGaW5hbmNpYWxJbnN0aXR1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzaFBvb2xUb3BBY2NvdW50U2VydmljaW5nRmluYW5jaWFsSW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlZGluZ0NvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlbnRyYWxCYW5rT3JSZWd1bGF0b3J5QXV0aG9yaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZW50cmFsQ2F0YWxvZ3VlUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmllZEFjY291bnRhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZnlpbmdQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhaXJwZXJzb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYW1iZXJPZkNvbW1lcmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFuZ2VkQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlc1BheWVyQXREZXN0aW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcml0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcnRlclNjaG9vbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhc3Npc1Byb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGVja2luZ1BhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGVxdWVEcmF3bkJhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoZXF1ZU9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGllZkRlcHV0eUNsZXJrT2ZDb3VydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hpbGQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoaWxkcmVuc0Nocm9uaWNEaXNlYXNlRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoaWxkcmVuc0RheUNhcmVDZW50ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoaWxkcmVuc0V5ZUVhck5vc2VBbmRUaHJvYXRGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hpbGRyZW5zR2VuZXJhbEZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGlsZHJlbnNIb3NwaXRhbFVuaXRPZkFuSW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoaWxkcmVuc09ydGhvcGVkaWNGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hpbGRyZW5zT3RoZXJTcGVjaWFsdHlGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hpbGRyZW5zUHN5Y2hpYXRyaWNGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hpbGRyZW5zUmVoYWJpbGl0YXRpb25GYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hpbGRyZW5zVHViZXJjdWxvc2lzQW5kT3RoZXJSZXNwaXJhdG9yeURpc2Vhc2VzRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoaXJvcHJhY3RvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hyb25pY0Rpc2Vhc2VGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hyb25pY09ic3RydWN0aXZlUHVsbW9uYXJ5RGlzZWFzZVNlcnZpY2VGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2h1cmNoT3BlcmF0ZWRGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2lnYXJldHRlc0FuZFRvYmFjY29EZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaXJjdWl0TG9jYXRpb25JZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGFpbUFkbWluaXN0cmF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsYWltYW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGFpbWFudEF1dGhvcml6ZWRSZXByZXNlbnRhdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xhaW1SZWNpcGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsZWFyaW5nSG91c2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsZXJrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGVya09mQ291cnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsaW5pYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xvc2VkRG9vclBoYXJtYWN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbG9zZWRTYWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbG9zaW5nQWdlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvYXRpbmdPclBhaW50U3VwcGxpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvLUJvcnJvd2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDby1Db250cmFjdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDby1Db3Vuc2VsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDby1EZWJ0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvLURlZmVuZGFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ28tRHJpdmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDby1JbnZlc3RpZ2F0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbGxhdGVyYWxBc3NpZ25lZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29sbGVjdGluZ0JhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbGxlY3Rpb25QcmluY2lwYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1lcmNpYWxJbnN1cmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21taXNzaW9uYWJsZUFnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21taXNzaW9uUHJvY2Vzc29yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tdW5pdHlBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbXVuaXR5SGVhbHRoUHJvbW90aW9uRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBhbnlBc3NpZ25lZFdlbGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBhbnlJbnRlcnZpZXdlcldvcmtzRm9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wYW55SW5XaGljaEludGVyZXN0SGVsZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGFueU1lcmdlZFdpdGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBhbnktT3duZWRPaWxGaWVsZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGFueVdoaWNoSG9sZHNGaW5hbmNpYWxJbnRlcmVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGFyYWJsZVByb3BlcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wYXJhYmxlUHJvcGVydHlMaXN0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wYXJhYmxlUmVudGFscyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGV0aW5nUHJvcGVydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBldGl0aXZlUHJvcGVydHlMaXN0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21waWxhdGlvbkFnZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGxhaW5hbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBsYWluYW50c0F0dG9ybmV5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wb25lbnRNYW51ZmFjdHVyZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXByZWhlbnNpdmVHZXJpYXRyaWNBc3Nlc3NtZW50RmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbmN1cnJlbnRFbXBsb3llciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uZHVjdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25kdWN0b3JQaWxvdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uZHVpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ubmVjdGluZ0NhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbm5lY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNpZ25lZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbmVlQ291cmllclRyYW5zZmVyU3RhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbmVlT2ZWZXNzZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNpZ25lZXNBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbmVlVG9CZVNwZWNpZmllZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbmVlLVRvUmVjZWl2ZUxhcmdlUGFyY2Vsc0FuZEZyZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNpZ25lZS1Ub1JlY2VpdmVNYWlsQW5kU21hbGxQYXJjZWxzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zaWdub3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNpZ25vckNvdXJpZXJUcmFuc2ZlclN0YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNpZ25vcnNSZXByZXNlbnRhdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc29saWRhdGVkRGVidG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zb2xpZGF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnN0cnVjdGlvbkNvbnRyYWN0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnN0cnVjdGlvbkZpcm0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnN1bHRhbnRzT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zdWx0aW5nUGh5c2ljaWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zdW1lckNyZWRpdEFjY291bnRDb21wYW55Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zdW1lclJlZmVycmFsQ29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc3VtZXJTZXJ2aWNlUHJvdmlkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnN1bWVyU2VydmljZVByb3ZpZGVyQ3VzdG9tZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhY3RCYW5rMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFjdEJhbmsyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWN0T2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWN0UGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhY3RQYXJ0eTEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhY3RQYXJ0eTIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhY3RQYXJ0eTMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhY3RQYXJ0eTQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhY3RQZXJzb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lckxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJMb2NhdGlvblBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJPcGVyYXRvck9yTGVzc2VlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJSZXR1cm5Db21wYW55Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJTdXJ2ZXlBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGluZ2VudEFubnVpdGFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGluZ2VudEJlbmVmaWNpYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250aW5nZW50T3duZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0QWRtaW5pc3RyYXRpb25PZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0ZWRTZXJ2aWNlUHJvdmlkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0SG9sZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdGluZ09mZmljZXJSZXByZXNlbnRhdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3Rvci1HZW5lcmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdE9yQ29nbml6YW50U2VjdXJpdHlPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0b3ItTGVhZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3Rvci1NYWluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdHVhbERlbGl2ZXJ5TWV0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0dWFsUmVjZWlwdE1ldGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cm9sbGVyUXVhbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udmVydGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb252b3lpbmdQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ28tT2NjdXBhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvLU9wZXJhdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29vcGVyYXRpdmVCdXlpbmdHcm91cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29vcmRpbmF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvLU93bmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDby1QYXJ0aWNpcGFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ28tUHJvZHVjZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcHlNZXNzYWdlVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcnBvcmF0ZU9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ycG9yYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcnBvcmF0aW9uRm9yLVByb2ZpdEZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3JyZWN0ZWRBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3JyZWN0ZWRJbnN1cmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3JyZWN0ZWROYW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3NpZ25lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zaWduZXJzRW1wbG95ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdW5jaWxPZkdvdmVybm1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VudGVyQ2xhaW1hbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdW50cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdW50cnlPZkRlc3RpbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VudHJ5T2ZFeHBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdW50cnlPZk9yaWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291bnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291cnRBcHBvaW50ZWRBdHRvcm5leSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0R3JhbnRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyZWRpdG9yc0F0dG9ybmV5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmVkaXRSYXRpbmdBZ2VuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyZWRpdFJlcG9ydGluZ0FnZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3Jld01lbWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JpbWVWaWN0aW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyb3NzQ2xhaW1hbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyb3NzLVRvd25Td2l0Y2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNUU2Nhbm5lclVuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnJlbnRFbXBsb3llci1QcmltYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50RW1wbG95ZXItU2Vjb25kYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50UmVjZWl2ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnJlbnRTZW5kZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvZGlhbFBhcmVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9kaWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJGT3JXaG9tU2FtZU9yU2ltaWxhcldPcmtXYXNQZXJGb3JtZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbWVySWRlbnRpZmljYXRpb25GaWxlQ3VzdG9tZXJJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zQnJva2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zT2ZmaWNlT2ZDbGVhcmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhaXJ5RGVwYXJ0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0YVByb2Nlc3NpbmdTZXJ2aWNlQnVyZWF1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWFsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYnRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVidG9yQ29tcGFueSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVidG9ySW5kaXZpZHVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVidG9yLUluLVBvc3Nlc3Npb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYnRvcnNBdHRvcm5leSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVidFBheW1lbnRBdXRob3Jpc2F0aW9uUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlY2lzaW9uTWFrZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlY2xhcmFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVjbGFyYW50c0FnZW50T3JSZXByZXNlbnRhdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVjb25zb2xpZGF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlZmF1bHRPckZvcmVjbG9zdXJlU3BlY2lhbGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVmZW5kYW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpY2F0ZXNzZW5EZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeUFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5UGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5Wm9uZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVudGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudE9mSnVzdGljZUZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBlbmRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGVuZGVudEluc3VyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGVuZGVudE5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcG9zaXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzaWduYXRlZEhhemFyZG91c1dhc3RlRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc2lnbkVuZ2luZWVyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXNpZ25lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzcGF0Y2hDaGFyZ2VQYXllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzcGF0Y2hQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzdGluYXRpb25DYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXN0aW5hdGlvbkRyYXltYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc3RpbmF0aW9uSW50ZXJtb2RhbFJhbXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc3RpbmF0aW9uTWFpbEZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXN0aW5hdGlvblRlcm1pbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaWFnbm9zdGljUmFkaW9pc290b3BlRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpYWx5c2lzQ2VudGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlmZmVyZW50UHJlbWlzZUFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpcmVjdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNhYmxlZEluZGl2aWR1YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2J1cnNpbmdPZmZpY2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNjaGFyZ2VQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY2lwbGluYXJ5Q29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzcGF0Y2hlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdGlsbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXN0cmlidXRpb25SZWNpcGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3RyaWJ1dG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXN0cmlidXRvckJyYW5jaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3RyaWN0QXR0b3JuZXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3RyaWN0SnVzdGljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGl2aXNpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3Rvck9mT3B0b21ldHJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N0b3JPZk9zdGVvcGF0aHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50YXJ5Q3JlZGl0QWNjb3VudFBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGFyeUNyZWRpdEFjY291bnRQYXJ0eXNCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGFyeUNyZWRpdEFwcGxpY2FudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRhcnlDcmVkaXRCZW5lZmljaWFyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRhcnlDcmVkaXRCZW5lZmljaWFyeXNCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGFyeUNyZWRpdFJlaW1idXJzaW5nQmFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRhcnlDcmVkaXRTZWNvbmRCZW5lZmljaWFyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRDdXN0b2RpYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50T3JNZXNzYWdlSXNzdWVyT3JTZW5kZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50UmVjaXBpZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2luZ0J1c2luZXNzQXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvbWVzdGljRmluYW5jaWFsSW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvd25zdHJlYW1GaXJzdFN1cHBsaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb3duc3RyZWFtTWV0ZXJMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG93bnN0cmVhbVBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcmF3ZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyaWxsaW5nQ29udHJhY3RvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJpdmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcm9wLU9mZkxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcnlHcm9jZXJ5RGVwYXJ0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVyYWJsZU1lZGljYWxFcXVpcG1lbnRTdXBwbGllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWNvbm9taWNhbGx5RGlzYWR2YW50YWdlZEluZGl2aWR1YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVkdWNhdGlvbmFsSW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVsZWN0cm9uaWNEYXRhSW50ZXJjaGFuZ2VDb29yZGluYXRvclBvaW50QWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWxlY3Ryb25pY0ZpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGVjdHJvbmljUmVnaXN0cmF0aW9uVXRpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWxlY3Ryb25pY1JldHVybk9yaWdpbmF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVsZW1lbnRhcnlTY2hvb2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVsaWdpYmxlUGFydHlUb1RoZUNvbnRyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGlnaWJsZVBhcnR5VG9UaGVSYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbWVyZ2VuY3lEZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbWVyZ2VuY3lEZXBhcnRtZW50U29jaWFsV29ya1NlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbWVyZ2VuY3lNZWRpY2FsVGVjaG5pY2lhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1lcmdlbmN5UHJvdmlkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtZXJnZW5jeVJlc3BvbnNlVW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1lcmdpbmdTbWFsbEJ1c2luZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWVOYW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wdHlDb250YWluZXJSZXNwb25zaWJsZVBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXB0eUNvbnRhaW5lclJldHVybkFnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXB0eUVxdWlwbWVudERlc3BhdGNoUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcHR5RXF1aXBtZW50UmV0dXJuUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZEl0ZW1NYW51ZmFjdHVyZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZFVzZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZXJneUluZm9ybWF0aW9uQWRtaW5pc3RyYXRpb24tT3duZWRPaWxGaWVsZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5naW5lZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZ2luZWVyLUNvbnN0cnVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5naW5lZXItQ29uc3VsdGFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5naW5lZXJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZ2luZWVyTWVhc3VyZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZ2luZWVyUGlsb3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZ2luZWVyLVJlc2lkZW50Q29uc3RydWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbnJvbGxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW50aXR5SG9sZGluZ1RoZUluZm9ybWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbnRpdHlJbldoaWNoQUZpbmFuY2lhbEludGVyZXN0SXNIZWxkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbnRpdHlQcm92aWRpbmdUaGVTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbnRpdHlSZXNwb25zaWJsZUZvckZvbGxvdy1VcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW50cnlQb2ludFRlY2huaWNhbEFzc2Vzc21lbnRHcm91cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50RHJvcC1PZmZQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50T3duZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWlwbWVudFJlcGFpclBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RhYmxpc2hlZExvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV2ZW50TG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4YW1pbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGNoYW5nZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4Y2lzZVBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGNsdWRlZFBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGVjdXRpdmVDb21taXR0ZWVNZW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZWN1dG9yT2ZFc3RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4aGliaXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwZXJ0V2l0bmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwb3J0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4LVNwb3VzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXh0ZW5kZWRDYXJlRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4dHJhY29ycG9yZWFsU2hvY2stV2F2ZUxpdGhvdHJpcHRlclVuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV5ZUVhck5vc2VBbmRUaHJvYXRGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhY3RvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFjdG9yLUNvcnJlc3BvbmRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhbWlseU1lbWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmF0aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxHb3Zlcm5tZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsbHlDaGFydGVyZWRGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbFN0YXRlQ291bnR5T3JDaXR5RmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlbGxvd3NoaXBJbnN0aXR1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVsb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpZWxkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaWVsZG9yQnJhbmNoT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaWxlck5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbGluZ0FkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbGluZ0xvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaWxpbmdPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFsQ3VzdG9tZXJPcmdhbml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFsTWFpbnRlbmFuY2VPcmdhbml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFsTWFpbnRlbmFuY2VQZXJpb2REZXNpZ25hdGluZ09yZ2FuaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYWxNZXNzYWdlUmVjaXBpZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbFJlY2lwaWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYWxSZWZlcnJlZFRvT3JnYW5pemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbFNjaGVkdWxlZERlc3RpbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbmNpYWxJbnN0aXR1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsUGxhbm5lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsU3RhdGVtZW50UmVjaXBpZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJlbWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdEFwcHJhaXNlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlyc3RCcmVha1Rlcm1pbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdENvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpcnN0U3VwcGxpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpdG5lc3NDZW50ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZsb29kQ2VydGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbG9vZERldGVybWluYXRpb25Qcm92aWRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxvcmFsRGVwYXJ0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9vZFNlcnZpY2VPcGVyYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWNsb3NpbmdMZW5kZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVpZ25EaXNjbG9zdXJlSW5mb3JtYXRpb25PZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVpZ25MYW5ndWFnZVN5bm9ueW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVpZ25PZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVpZ25SZWdpc3RyYXRpb25Mb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWlnblN1cHBsaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JtYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcm1lckFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcm1lcmx5RG9pbmdCdXNpbmVzc0FzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JtZXJseUtub3duQXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcm1lclByZXNpZGVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9ybWVyUmVnaXN0ZXJlZEFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcm1lclJlc2lkZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yUHJvZml0SGVhbHRoQ2FyZVByb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3J3YXJkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvdW5kYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvdW5kZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyYW5jaGlzZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyYW5jaGlzb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWVvbkJvYXJkUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWlnaHRGb3J3YXJkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWlnaHRNYW5hZ2VtZW50RmFjaWxpdGF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWlnaHRPckNoYXJnZXNQYXllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlaWdodFBheWVyT25CZWhhbGZPZlRoZUNvbnNpZ25lZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlaWdodFBheWVyT25CZWhhbGZPZlRoZUNvbnNpZ25vciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJvemVuRGVwYXJ0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnV0dXJlQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FpbmluZ0ludmVudG9yeU1hbmFnZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdhcmFnZWRMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FybmlzaGVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXNQbGFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FzVHJhbnNhY3Rpb25FbmRpbmdQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FzVHJhbnNhY3Rpb25Qb2ludDEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdhc1RyYW5zYWN0aW9uUG9pbnQyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXNUcmFuc2FjdGlvblN0YXJ0aW5nUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdhdGV3YXlQcm92aWRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VuZXJhbEFnZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VuZXJhbElucGF0aWVudENhcmVGb3JBSURTT3JBUkNGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VuZXJhbE1lZGljYWxBbmRTdXJnaWNhbEZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW5lcmFsTWVyY2hhbmRpc2VEZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW5ldGljQ291bnNlbGluZ09yU2NyZWVuaW5nU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdlcmlhdHJpY0FjdXRlQ2FyZVVuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdlcmlhdHJpY0NsaW5pY3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdpZnRSZWNpcGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdvb2RzQ29sbGVjdGlvblBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb29kc0N1c3RvZGlhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZHNPd25lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZHNSZWxlYXNlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJubWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJubWVudC1Db21iaW5lZENvbnRyb2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdvdmVybm1lbnQtRmVkZXJhbC1NaWxpdGFyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJubWVudC1GZWRlcmFsLU90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb3Zlcm5tZW50LUZlZGVyYWwtVmV0ZXJhbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdvdmVybm1lbnRGdXJuaXNoZWRQcm9wZXJ0eUZPQlBvaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb3Zlcm5tZW50TG9hbkFnZW5jeVNwb25zb3JPckFnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb3Zlcm5tZW50LUxvY2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmFuZHBhcmVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JhbnRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JvdW5kQW1idWxhbmNlU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcm91cEFmZmlsaWF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JvdXBBZmZpbGlhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JvdXBpbmdDZW50cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3VwUHJhY3RpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3VwUHVyY2hhc2luZ09yZ2FuaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3VhcmFudGVlQWdlbmN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHdWFyZGlhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGF6YXJkb3VzTWF0ZXJpYWxPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhemFyZG91c1dhc3RlR2VuZXJhdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFkT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFsdGhBbmRCZWF1dHlEZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFsdGhjYXJlUHJvZmVzc2lvbmFsU2hvcnRhZ2VBcmVhRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYWx0aE1haW50ZW5hbmNlT3JnYW5pemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFsdGhNaXNjZWxsYW5lb3VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFsdGhTY2llbmNlc0xpYnJhcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlbW9kaWFseXNpc0ZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIaWdoU2Nob29sIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIaXNvcGF0aG9sb2d5TGFib3JhdG9yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGlzcGFuaWNTZXJ2aWNlSW5zdGl0dXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIaXN0b3JpY2FsbHlCbGFja0NvbGxlZ2VPclVuaXZlcnNpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvbWVIZWFsdGhBZ2VuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvbWVIZWFsdGhDYXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb21lSGVhbHRoQ29ycG9yYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvbWVIZWFsdGhTZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9tZU9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9tZVNjaG9vbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9tZVN0YXRlTmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9zcGljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9zcGl0YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikhvc3BpdGFsQXV4aWxpYXJ5VW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9zcGl0YWxEaXN0cmljdE9yQXV0aG9yaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3NwaXRhbFVuaXRPZkFuSW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikhvc3BpdGFsVW5pdFdpdGhpbkFuSW5zdGl0dXRpb25Gb3JUaGVNZW50YWxseVJldGFyZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3N0aWxlV2l0bmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW1wb3J0ZWRGcm9tTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkltcG9ydGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbkNhcmVPZlBhcnR5Tm8xIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbkNhcmVPZlBhcnR5Tm8yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmNvcnBvcmF0ZWRCeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5jb3Jwb3JhdGVkTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluY29ycG9yYXRpb25KdXJpc2RpY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluY29ycG9yYXRpb25TdGF0ZVBsYWNlT2ZCdXNpbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5jb3Jwb3JhdGlvblN0YXRlUHJpbmNpcGFsT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmRlcGVuZGVudEFkanVzdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmRlcGVuZGVudExhYiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5kZXBlbmRlbnRQaHlzaWNpYW5zQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZGl2aWR1YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZGl2aWR1YWxGb3ItUHJvZml0RmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZHVzdHJ5QXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZHVzdHJ5QnVyZWF1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmVsaWdpYmxlUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZm9ybWF0aW9uRGlzc2VtaW5hdGlvbkFnZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5mb3JtYXRpb25NYWludGVuYW5jZUFnZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5mb3JtYXRpb25Qcm92aWRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5mb3JtYXRpb25SZWZlcmVuY2VBZ2VuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZm9ybWF0aW9uU291cmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbml0aWFsRGVhbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbml0aWFsTWVkaWNhbFByb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbml0aWFsU3Vic2NyaWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5pdGlhdGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5qZWN0aW9uUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluLVBhdGllbnRQaGFybWFjeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5xdWlyaW5nUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklucXVpcnlBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbi1TZXJ2aWNlU291cmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnNwZWN0aW9uQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zcGVjdGlvbkFuZEFjY2VwdGFuY2VMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zcGVjdGlvbkFuZEFjY2VwdGFuY2VQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zcGVjdGlvbkNvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3BlY3Rpb25MZWFkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3BlY3Rpb25Mb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zcGVjdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN0YWxsYXRpb25PblNpdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3RhbGxlZEF0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN0aXR1dGlvbmFsUHJvdmlkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3RpdHV0aW9uRm9yTWVudGFsUmV0YXJkYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluLVN0b3JlQmFrZXJ5RGVwYXJ0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJhbmNlQmVuZWZpY2lhcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyYW5jZUNsYWltQWRqdXN0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyYW5jZUNvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyYW5jZUluc3RpdHV0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJlZExvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmVkT3JTdWJzY3JpYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlZ3JhdGVkTWF0ZXJpYWxNYW5hZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlbGxlY3R1YWxQcm9wZXJ0eU93bmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcmVzdGVkUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVyaW1GdW5kaW5nT3JnYW5pemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcmltVHJ1c3RlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJsaW5lU2VydmljZUNvbW1pdG1lbnRDdXN0b21lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJtZWRpYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm1lZGlhcnlCYW5rMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJtZWRpYXJ5QmFuazIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybWVkaWFyeU9yQnJva2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm1lZGlhdGVDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm1lZGlhdGVDb25zaWduZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybWVkaWF0ZUxldmVsUGFyZW50Q29tcGFueSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJuYXRpb25hbEZyZWlnaHRGb3J3YXJkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmF0aW9uYWxPcmdhbml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybnNoaXBFbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVycHJldGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcnZpZXdlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJ2aWV3ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVudG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlbnRvcnlDb250cm9sbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlbnRvcnlDb250cm9sUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVudG9yeVJlcG9ydGluZ1BhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlc3RpZ2F0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVzdG1lbnRBZHZpc29yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlc3RvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52b2ljZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikludm9pY2luZ0RlYWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52b2x2ZWRQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXJyZXZvY2FibGVCZW5lZmljaWFyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXNzdWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJc3N1ZXJPZkRlYml0T3JDcmVkaXRNZW1vIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJc3N1ZXJPZkludm9pY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Iklzc3Vlck9mV2F5YmlsbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXNzdWluZ0JhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikl0ZW1NYW5hZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJdGVtU2hpcFRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJdGVtU2hpcEZyb20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkpvaW50QW5udWl0YW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKb2ludEFubnVpdGFudE93bmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKb2ludERlYnRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSm9pbnREZWJ0b3JBdHRvcm5leSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSm9pbnRPd25lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSm9pbnRPd25lckFubnVpdGFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSm9pbnRPd25lckFubnVpdGFudFBheW9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKb2ludE93bmVySm9pbnRBbm51aXRhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkpvaW50T3duZXJKb2ludEFubnVpdGFudFBheW9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKb2ludE93bmVyUGF5b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkpvaW50VmVudHVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSnVkZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikp1bmlvckhpZ2hTY2hvb2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikp1cmlzZGljdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSnV2ZW5pbGVEZWZlbmRhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikp1dmVuaWxlT3duZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikp1dmVuaWxlVmljdGltIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKdXZlbmlsZVdpdG5lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktleVBlcnNvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS2lkbmV5RGlhbHlzaXNVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJlbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJvcmF0b3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJvclN1cnBsdXNBcmVhRmlybSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFuZGxvcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhcmdlQnVzaW5lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RCcmVha1Rlcm1pbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0RW1wbG95ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RLbm93blNvdXJjZU9mU3VwcGx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0U3VwcGxpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhd0VuZm9yY2VtZW50QWdlbmN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXdGaXJtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWFzZUxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWdhbFJlY2VpdmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWdhbFJlcHJlc2VudGF0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWdhbFRpdGxlSG9sZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZW5kZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlbmRpbmdJbnN0aXR1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVzc2VlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZXNzZWVzU3VydmV5b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxlc3NvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlhYmlsaXR5SG9sZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWNlbnNlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGllbkhvbGRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGltaXRlZExpYWJpbGl0eUNvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpbWl0ZWRMaWFiaWxpdHlQYXJ0bmVyc2hpcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGltaXRlZFBhcnRuZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpcXVpZGF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxpc3RpbmdBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlzdGluZ0NvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxpc3RpbmdPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxpc3RNYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxpc3RPd25lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGl0ZXJhbGx5VHJhbnNsYXRlZE5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYWRpbmdQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hbkFwcGxpY2FudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hbkJyb2tlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hbkNvcnJlc3BvbmRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYW5Ib2xkZXJGb3JSZWFsRXN0YXRlQXNzZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYW5PcmlnaW5hdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2FuU2VydmljZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2FsQ2hhaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2FsR292ZXJubWVudFNwb25zb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2F0aW9uT2ZHb29kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYXRpb25PZkdvb2RzRm9yQ3VzdG9tc0V4YW1pbmF0aW9uQmVmb3JlQ2xlYXJhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhdGlvbk9mTG9hZEV4Y2hhbmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhdGlvbk9mUHJpbmNpcGFsQXNzZXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhdGlvbk9mU3BvdEZvclN0b3JhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvbmdUZXJtQ2FyZUZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb25nLVRlcm1EaXNhYmlsaXR5Q2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9zaW5nSW52ZW50b3J5TWFuYWdlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9zc1BheWVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hZ2lzdHJhdGVKdWRnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFnbmV0aWNSZXNvbmFuY2VJbWFnaW5nRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haWRlbk5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haWxBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWlsVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haW5saW5lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWludGVuYW5jZU9yZ2FuaXphdGlvblVzZWRGb3JFc3RpbWF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFtbW9ncmFwaHlTY3JlZW5pbmdDZW50ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbmFnZWRDYXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW5hZ2VkQ2FyZU9yZ2FuaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFuYWdlbWVudENvbnRyb2xBY3Rpdml0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFuYWdlbWVudE5vbi1PZmZpY2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW5hZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW5hZ2luZ0FnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW5hZ2luZ0dlbmVyYWxBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFudWZhY3R1cmVyT2ZHb29kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFudWZhY3R1cmVyc1JlcHJlc2VudGF0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW51ZmFjdHVyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW51ZmFjdHVyaW5nUGxhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcmluZVN1cnZleW9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXJrZXJPd25lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFya2V0VGltZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcmstRm9yUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hc3RlckFnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXN0ZXJHZW5lcmFsQWdlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hc3RlclByb3BlcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXRlcmlhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0ZXJpYWxDaGFuZ2VOb3RpY2VBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXRlcmlhbERpc3Bvc2l0aW9uQXV0aG9yaXphdGlvbkxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXRlcmlhbElzc3VlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0ZXJpYWxTYWZldHlEYXRhU2hlZXRSZWNpcGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lYW5zT2ZUcmFuc3BvcnRDaGFydGVyZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lYXREZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FsRG9jdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FsSW5zdXJhbmNlQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaWNhbE51cnNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FsU2Nob29sIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FsU3VyZ2ljYWxPck90aGVySW50ZW5zaXZlQ2FyZVVuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYWxUcmVhdG1lbnRFeGVjdXRhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYWxUcmVhdG1lbnRQcmVzY3JpYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWV0aW5nTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZ2F2b2x0YWdlUmFkaWF0aW9uVGhlcmFweVVuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lbWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVyY2hhbnRCYW5rZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lcmdlZENvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lcmdlZENvbXBhbnlXaXRoUmV0YWluZWRJZGVudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVyZ2VkTmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVzc2FnZUZyb20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lc3NhZ2VSZWNpcGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lc3NhZ2VUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWV0ZXJpbmdMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWV4aWNhbkN1c3RvbXNCcm9rZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pZGRsZVNjaG9vbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlncmFudEhlYWx0aENsaW5pYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlsaXRhcnlCcmFuY2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbGl0YXJ5RmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1Sb3lhbHR5UGF5b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmlzdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaW5vcml0eUluc3RpdHV0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaW5vcml0eS1Pd25lZEJ1c2luZXNzTGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbm9yaXR5LU93bmVkQnVzaW5lc3NTbWFsbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlzY2VsbGFuZW91c0hlYWx0aENhcmVGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9uaXRvcmluZ1BhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3J0Z2FnZUNvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vcnRnYWdlSW5zdXJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9ydGdhZ2VMaWFiaWxpdHlBY2NvdW50SG9sZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3N0UmVjZW50RW1wbG95ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW90b3JDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3RvclZlaGljbGVSZXBvcnRQcm92aWRlckNvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik11bHRpcGxlTGlzdGluZ1NlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik11bmljaXBhbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmFtZUNoYW5nZWRUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmFtZU5vdFRvQmVDb25mdXNlZFdpdGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hbWVvbkNyZWRpdENhcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hbWVVbmRlcldoaWNoRmlsZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hbWVWYXJpYXRpb25TeW5vbnltIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbENoYWluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbE9yZ2FuaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aXZlSGF3YWlpYW5Pcmdhbml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdnlGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmVnbGVjdGVkT3JEZWxpbnF1ZW50SW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5lZ290aWF0aW5nQmFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmVpZ2hib3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5laWdoYm9yaG9vZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmVvbmF0YWxJbnRlbnNpdmVDYXJlVW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV0d29ya05hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld0FkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld0Fzc2lnbmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXdEZWJ0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld1NlY3VyZWRQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV3U2VydmljZVByb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXdzcGFwZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld1N1cHBseVNvdXJjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV4dERlc3RpbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXh0U2NoZWR1bGVkRGVzdGluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5pY2tuYW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb0hlYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbWluYXRlZEJhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbWluYXRlZEZyZWlnaHRDb21wYW55Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tRG9tZXN0aWNGaW5hbmNpYWxJbnN0aXR1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uZW1wbG95bWVudEluY29tZVNvdXJjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uLUhlYWx0aENhcmVNaXNjZWxsYW5lb3VzRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbi1JbnN1cmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tSW52YXNpdmVDYXJkaWFjQXNzZXNzbWVudFNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tTW9ydGdhZ2VMaWFiaWxpdHlBY2NvdW50SG9sZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tT2NjdXBhbnRDby1Cb3Jyb3dlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uLVByb2R1Y3Rpb25TdXBwbGllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uLVByb2ZpdEhlYWx0aENhcmVQcm92aWRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9ucHJvZml0SW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbi1SYWlscm9hZEVudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uUmVnaXN0ZXJlZEJ1c2luZXNzTmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uLVJlZ2lzdGVyZWRJbnZlc3RtZW50QWR2aXNvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uLVJlc2lkZW50QmVuZWZpY2lhcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbi1SZXNpZGVudENyZWRpdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tUmVzaWRlbnREZWJ0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbi1SZXNpZGVudEdyb3VwQ29tcGFueVdpdGhXaG9tRmluYW5jaWFsQWNjb3VudElzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tUmVzaWRlbnRJbnN0cnVjdGluZ1BhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tUmVzaWRlbnRUaGlyZFBhcnR5Q29tcGFueVdpdGhXaG9tRmluYW5jaWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tVGVtcG9yYXJ5U3RvcmFnZUZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RhcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdGFyeVB1YmxpYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90ZUNvLVNpZ25lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90Rm9yUHJvZml0SGVhbHRoQ2FyZVByb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RpZnlQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90aWZ5UGFydHlGb3JTaGlwcGVyc09yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RpZnlQYXJ0eU5vMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90aWZ5UGFydHlObzIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51cnNpbmdIb21lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdXJzaW5nSG9tZUNoYWluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPYnNlcnZhdGlvblJvb21TZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2JzdGV0cmljc0FuZEd5bmVjb2xvZ3lGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2JzdGV0cmljc1VuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9jY3VwYW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPY2N1cGF0aW9uYWxIZWFsdGhTZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2NjdXBhdGlvbmFsVGhlcmFweVNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPY2VhblRhcmlmZkNvbmZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZmljZU1hbmFnZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZmljZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZnNldE9wZXJhdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPaWxBbmRHYXNDdXN0b2RpYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9pbEFuZEdhc1JlZ3VsYXRvcnlBZ2VuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9sZEFzc2lnbmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbGREZWJ0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9sZFNlY3VyZWRQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25CZWhhbGZPZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT24tQ2FsbFByb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbmNvbG9neUNlbnRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3Blbi1IZWFydFN1cmdlcnlGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3BlcmF0aW5nUGh5c2ljaWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVyYXRvci1Db21tdW5pY2F0aW9uQ2hhbm5lbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3BlcmF0b3ItRXNzZW50aWFsU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wZXJhdG9yT2ZQcm9wZXJ0eU9yRXF1aXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVyYXRvck9mUHJvcGVydHlPclVuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wZXJhdG9yT2ZUaGVTb3VyY2VUcmFuc2ZlclBvaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVyYXRvck9mVGhlVHJhbnNmZXJQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JkZXJlZEJhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yZGVyZWRCeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JkZXJpbmdCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlcmluZ0N1c3RvbWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlcmluZ1BhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlcmluZ1BoeXNpY2lhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JkZXJPZlNoaXBwZXJzT3JkZXJzLVRyYW5zcG9ydGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlck9mVGhlU2hpcHBlclBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlcldyaXRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JnYW5pemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmdhbml6YXRpb25Db21wbGV0aW5nQ29uZmlndXJhdGlvbkNoYW5nZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JnYW5pemF0aW9uR3JvdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yZ2FuaXphdGlvbkhhdmluZ1NvdXJjZUNvbnRyb2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yZ2FuaXplZE91dHBhdGllbnRTZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JnYW5pemVkU29jaWFsV29ya1NlcnZpY2VGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JnYW5pemVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmdhbk9yVGlzc3VlVHJhbnNwbGFudFVuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsQ2xhaW1hbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsSW50ZXJtb2RhbFJhbXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsSnVyaXNkaWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbExvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbE5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsU2hpcHBlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luYXRpbmdCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hdGluZ0NvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmF0b3JPZkFydGljbGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbkNhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbkRyYXltYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbk1haWxGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luU3VibG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpblRlcm1pbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcnRob3BlZGljRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9ydGhvcGVkaWNTdXJnZXJ5RmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyRGVwYXJ0bWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyRGlzYWR2YW50YWdlZEJ1c2luZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlckluZGl2aWR1YWxEaXNhYmlsaXR5Q2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXJJbnN1cmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlck5vdC1Gb3ItUHJvZml0RmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyUGVyc29uT3JFbnRpdHlBc3NvY2lhdGVkV2l0aFN0dWRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyUGh5c2ljaWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlclJlbGF0ZWRQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXJTcGVjaWFsdHlGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXJVbmxpc3RlZFR5cGVPZk9yZ2FuaXphdGlvbmFsRW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdXRlckNvbnRpbmVudGFsU2hlbGZBcmVhTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik91dC1PZi1TdGF0ZVByaW5jaXBhbE9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0cGF0aWVudFNvY2lhbFdvcmtTZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0cGF0aWVudFN1cmdlcnlTZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0cGF0aWVudFN1cmdpY2VudGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdXRzaWRlSW5zcGVjdGlvbkFnZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0c2lkZVByb2Nlc3NvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0c2lkZVRlc3RBZ2VuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXJyaWRlSW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik93bmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lckFubnVpdGFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3duZXJBbm51aXRhbnRQYXlvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3duZXJKb2ludEFubnVpdGFudFBheW9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lck9mRXF1aXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lck9mTWVhbnNPZlRyYW5zcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3duZXJPZk9wZXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3duZXJPZlByb3BlcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lck9mUHJvcGVydHlPclVuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik93bmVyT2ZSZXNpZGVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik93bmVyT2ZWZWhpY2xlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lck9mVmVzc2VsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lck9yTGVzc29yc1N1cnZleW9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lclBheW9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lcnNBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3duZXJzUmVwcmVzZW50YXRpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik93bmluZ0ludmVudG9yeUNvbnRyb2xQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3h5Z2VuVGhlcmFweUZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNrZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcmFtZWRpYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFyYW1lZGljYWxDb21wYW55Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcmVudENvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnRpY2lwYW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0aWNpcGF0aW5nQXJlYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydGljaXBhdGluZ0xhYm9yYXRvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnRuZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnRuZXJzaGlwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0bmVyc2hpcEZvci1Qcm9maXRGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydFJlbWFudWZhY3R1cmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0c0Rpc3RyaWJ1dG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0U291cmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eUFjY29yZGluZ1RvRG9jdW1lbnRhcnlDcmVkaXRUcmFuc2FjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlBc3NpZ25pbmdBU3RhdHVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eUF0RmluYWxQbGFjZU9mUG9zaXRpb25pbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5QXRQaWNrLVVwTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5QXV0aG9yaXplZHRvRGVmaW5pdGl6ZUNvbnRyYWN0QWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eUF1dGhvcml6ZWRUb01ha2VEZWZpbml0ZUFDb250cmFjdEFjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlBdXRob3JpemluZ0Rpc3Bvc2l0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eUF1dGhvcml6aW5nUmVsZWFzZU9mU2VjdXJpdHlJbmZvcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlEYXRhUmVzcG9uc2libGVQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlEZWNsYXJpbmdUaGVWYWx1ZUFkZGVkVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eURlc2lnbmF0ZWRUb0V4ZWN1dGVSZS1JY2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlEZXNpZ25hdGVkVG9FeGVjdXRlU2FuaXRhcnlQcm9jZWR1cmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eURlc2lnbmF0ZWRUb1Byb3ZpZGVMaXZpbmdBbmltYWxDYXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eUV4ZWN1dGluZ0FuZFZlcmlmeWluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlGaWxsaW5nU2hpcHBlcnNPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlGb3JXaG9tSXRlbUlzVWx0aW1hdGVseUludGVuZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eUZyb21XaG9tQ3VzdG9tc0RvY3VtZW50c0FyZVRvQmVQaWNrZWRVcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlGcm9tV2hvbU5vbi1DdXN0b21zRG9jdW1lbnRzQXJlVG9CZVBpY2tlZFVwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eUZ1bGZpbGxpbmdBbGxPcGVyYXRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eUluUG9zc2Vzc2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlJc3N1aW5nTXV0dWFsbHlBZ3JlZWRDb2RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlNYWludGFpbmluZ1RoZUNvZGVzVXNlZEluVGhlTWVzc2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlNYWludGFpbmluZ1RoZUlkZW50aWZpZXJzVXNlZEluVGhlTWVzc2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlNYW5kYXRlZFRvTGlxdWlkYXRlQW5FbnRlcnByaXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eU1hbnVmYWN0dXJlZEZvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlOb3RUb0JlQ29uZnVzZWRXaXRoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVBhc3NpbmdUaGVUcmFuc2FjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlQZXJmb3JtaW5nQ2VydGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlQZXJmb3JtaW5nQ291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5UGVyZm9ybWluZ0luc3BlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5UGVyZm9ybWluZ1Rhc2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5UGVyZm9ybWluZ1ZlcmlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlQcm92aWRpbmdGaW5hbmNpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5UHJvdmlkaW5nR292ZXJubWVudEZ1cm5pc2hlZFByb3BlcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVJlY292ZXJpbmdUaGVWYWx1ZUFkZGVkVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVJlcHJlc2VudGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVJlc3BvbnNpYmxlRm9yRGlzaW5mZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVJlc3BvbnNpYmxlRm9yRmluYW5jaWFsU2V0dGxlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlSZXNwb25zaWJsZUZvclJlZnVlbGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlTdWJtaXR0aW5nUXVvdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5VGhhdFJlY2VpdmVkRGlzY2xvc3VyZVN0YXRlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlUaGF0UmVtaXRzUGF5bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHl0b0FwcGVhckJlZm9yZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlUb0FwcHJvdmVTcGVjaWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eXRvYmVhZHZpc2VkLVdyaXR0ZW5PcmRlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5VG9CZUJpbGxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlUb0JlQmlsbGVkRm9yT3RoZXJUaGFuRnJlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHl0b0NvbnRyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvRmlsZVBlcnNvbmFsUHJvcGVydHlUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5dG9MZWFzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHl0b1BlcmZvcm1QYWNrYWdpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5VG9QcmludFNvbWVEb2N1bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHl0b1Byb3ZpZGVEaXNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlUb1JlY2VpdmVBbGxEb2N1bWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5dG9SZWNlaXZlQmlsbE9mTGFkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvUmVjZWl2ZUNlcnRpZmljYXRlT2ZDb21wbGlhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvUmVjZWl2ZUNlcnRpZmljYXRlT2ZDb25mb3JtYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlUb1JlY2VpdmVDZXJ0aWZpZWRJbnNwZWN0aW9uUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvUmVjZWl2ZUNlcnRpZmllZFRlc3RSZXN1bHRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvUmVjZWl2ZUNvbW1lcmNpYWxJbnZvaWNlUmVtaXR0YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlUb1JlY2VpdmVDb250cmFjdFNlY3VyaXR5Q2xhc3NpZmljYXRpb25TcGVjaWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvUmVjZWl2ZUNvcHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5VG9SZWNlaXZlQ29ycmVzcG9uZGVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5dG9SZWNlaXZlQ3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvUmVjZWl2ZUN1c3RvbXNEb2N1bWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5VG9SZWNlaXZlRWxlY3Ryb25pY01lbW9PZkludm9pY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5VG9SZWNlaXZlRXF1aXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvUmVjZWl2ZUZyZWlnaHRCaWxsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvUmVjZWl2ZUluc3BlY3Rpb25SZXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5VG9SZWNlaXZlSW52aXRhdGlvblRvT2ZmZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5dG9SZWNlaXZlSW52b2ljZUZPckdvb2RzT3JTZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlUb1JlY2VpdmVJbnZvaWNlRm9yTGVhc2VQYXltZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHl0b1JlY2VpdmVMaW1pdGF0aW9uc09mSGVhdnlFbGVtZW50c1JlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHl0b1JlY2VpdmVNYXRlcmlhbFJlbGVhc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5VG9SZWNlaXZlTm9uLUN1c3RvbXNEb2N1bWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5VG9SZWNlaXZlT3JkZXJUb1N1cHBseSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlUb1JlY2VpdmVQYWNraW5nQ3JhdGluZ0FuZEhhbmRsaW5nQ3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvUmVjZWl2ZVBhcGVyTWVtb09mSW52b2ljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHl0b1JlY2VpdmVQcm9wb3NhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlUb1JlY2VpdmVQdXJjaGFzZU9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvUmVjZWl2ZVJlcG9ydHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5dG9SZWNlaXZlU2NhbGVUaWNrZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5dG9SZWNlaXZlU2hpcHBpbmdNYW5pZmVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlUb1JlY2VpdmVTaGlwcGluZ05vdGljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHl0b1JlY2VpdmVTb2xpY2l0YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5VG9SZWNlaXZlU3RhdGVtZW50T2ZBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvUmVjZWl2ZVN0YXRlbWVudE9mRmVlc0R1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHl0b1JlY2VpdmVTdGF0dXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5VG9SZWNlaXZlVGVjaG5pY2FsRG9jdW1lbnRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlUb1JlY2VpdmVUZXN0UmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eXRvUmVjZWl2ZVRyYW5zcG9ydGF0aW9uQ3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eXRvV2hvbUFja25vd2xlZGdtZW50U2hvdWxkQmVTZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVRvV2hvbURvY3VtZW50c0FyZVRvQmVQcmVzZW50ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5dG9XaG9tUHJvdGVzdFN1Ym1pdHRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlXYWl2aW5nUmVxdWlyZW1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVdoaWNoRGVsaXZlcnNDb25zaWdubWVudHNUb1RoZVRlcm1pbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0eVdoaWNoUGlja3NVcENvbnNpZ25tZW50c0Zyb21UaGVUZXJtaW5hbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlXaG9TaWduZWRUaGVEZWxpdmVyeVJlY2VpcHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5V2l0aEtub3dsZWRnZU9mQWZmYWlyc09mVGhlQ29tcGFueSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlXaXRoUG93ZXJUb1ZvdGVTZWN1cml0aWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXNzZW5nZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhdGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhdGllbnRDb21wYW5pb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhdGllbnRFZHVjYXRpb25Vbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXRpZW50RmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhdGllbnRSZXByZXNlbnRhdGl2ZVNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXllZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5ZWVzQ29tcGFueU5hbWVPcklkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5ZXJPZkxhc3RSZXNvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheWVyc0NvbXBhbnlOYW1lT3JJZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5ZXJzRmluYW5jaWFsSW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheWluZ0FnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXlpbmdCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXlpbmdGaW5hbmNpYWxJbnN0aXR1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudEFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXktVG9Qcm92aWRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVkZXN0cmlhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVkaWF0cmljQWN1dGVJbnBhdGllbnRVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJmb3JtZWRBdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVybWl0SG9sZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJzb25Gb3JXaG9zZUJlbmVmaXRQcm9wZXJ0eXdhc1NlaXplZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyc29ubmVsT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJzb25PbkNsYWltIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJzb25Pck90aGVyRW50aXR5TGVnYWxseVJlc3BvbnNpYmxlRm9yQUNoaWxkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJzb25Pck90aGVyRW50aXR5TGVnYWxseVJlc3BvbnNpYmxlRm9yQW5kV2l0aFdob21BQ2hpbGRSZXNpZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJzb25Pck90aGVyRW50aXR5V2l0aFdob21BQ2hpbGRSZXNpZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXRpdGlvbmluZ0NyZWRpdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXRpdGlvbmluZ0NyZWRpdG9yc0F0dG9ybmV5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaGFybWFjaXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaGFybWFjeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGhhcm1hY3lEZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaHlzaWNhbEFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBoeXNpY2FsVGhlcmFweVNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaHlzaWNpYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBoeXNpY2lhbkNsaW5pY09yR3JvdXBQcmFjdGljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGh5c2ljaWFuSG9zcGl0YWxPcmdhbml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBoeXNpY2lhbi1TcGVjaWFsaXN0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlja1VwQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGllck5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpcGVsaW5lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaXBlbGluZVNlZ21lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpcGVsaW5lU2VnbWVudEJvdW5kYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFjZU9mQm90dGxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYWNlT2ZCdXNpbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhY2VPZkRpc3RpbGxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYWNlT2ZPY2N1cnJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFjZU9mUGVyZm9ybWFuY2VDb2duaXphbnRTZWN1cml0eU9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhaW50aWZmIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFuQWRtaW5pc3RyYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhbm5pbmdPck1haW50ZW5hbmNlT3JnYW5pemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFubmluZ0NvbW1pc3Npb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW5uaW5nU2NoZWR1bGVPck1hdGVyaWFsUmVsZWFzZUlzc3VlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhblNwb25zb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFudENsZWFyYW5jZU9mZmljZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvZGlhdHJpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvaW50T2ZTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb2xpY3lIb2xkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvbGljeVdyaXRpbmdBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9sbGluZ1NpdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvcnRBdXRob3JpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvc3RhbE1haWxpbmdBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3N0c2Vjb25kYXJ5RWR1Y2F0aW9uUmVjaXBpZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3N0c2Vjb25kYXJ5RWR1Y2F0aW9uU2VuZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3N0LVNlY29uZGFyeUluc3RpdHV0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3RlbnRpYWxTb3VyY2VPZlN1cHBseSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG93ZXJPZkF0dG9ybmV5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVmZXJyZWRQcm92aWRlck9yZ2FuaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlLUtEYXlDYXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmUta2luZGVyZ2FydGVuVG9HcmFkZTEyUmVjaXBpZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmUta2luZGVyZ2FydGVuVG9HcmFkZTEyU2VuZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVsaW1pbmFyeUN1c3RvbWVyT3JnYW5pemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVsaW1pbmFyeUluc3BlY3Rpb25Mb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlbGltaW5hcnlNYWludGVuYW5jZU9yZ2FuaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlbGltaW5hcnlNYWludGVuYW5jZVBlcmlvZERlc2lnbmF0aW5nT3JnYW5pemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVsaW1pbmFyeVJlZmVycmVkVG9Pcmdhbml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZW1pc2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVwYXJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc2VudEFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXNlbnRpbmdCYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVzaWRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzQnVzaW5lc3NQYXJ0bmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c0NyZWRpdEdyYW50b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzRGVidEhvbGRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNEaXN0cmlidXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNFbXBsb3llciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNHcm91cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNJbnN1cmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c01lbWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNOYW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c05hbWVPZkZpcm0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzTmVpZ2hib3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzT2NjdXBhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzT3duZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzUmVzaWRlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c1N0YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzVGl0bGVDb21wYW55Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c1RyYWRlVW5pb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaWNlQWRtaW5pc3RyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1hcnlCZW5lZmljaWFyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWFyeUNhcmVQcm92aWRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpY2VDaGVja1NoaXBUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWFyeUNvbnRyb2xQb2ludExvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltYXJ5SGVhbHRoQ2FyZVByb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltYXJ5SW5zdXJlZE9yU3Vic2NyaWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWFyeUludGVyZXhjaGFuZ2VDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltYXJ5SW50ZXJuYXRpb25hbFRlbGVjb21DYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltYXJ5SW50cmEtTEFUQUNhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1hcnlJbnZlbnRvcnlDb250cm9sQWN0aXZpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1hcnlPd25lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWFyeVBheWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltYXJ5UGh5c2ljaWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltYXJ5UmVzaWRlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltYXJ5U3VwcG9ydE9yZ2FuaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWFyeVN1cmdlb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1hcnlUYXhwYXllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWVDb250cmFjdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmluY2lwYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW5jaXBhbEJvcnJvd2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmluY2lwYWxFeGVjdXRpdmVPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW5jaXBhbFBlcnNvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbnRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JCYXNlSnVyaXNkaWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvckluY29ycmVjdEluc3VyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW9ySW5zdXJhbmNlQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JUaXRsZUV2aWRlbmNlSG9sZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcml2YXRlUHJlLUtFZHVjYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaXZhdGVTY2hvb2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb0Jvbm9BdHRvcm5leSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvY2Vzc29yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9jdXJlbWVudFJlc3BvbnNpYmlsaXR5Rm9yT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y2VEZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWNlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdGlvbk1hbmFnZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3RQb3NpdGlvbkhvbGRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdFNlcnZpY2VzQW5kUmVwYWlyc0NlbnRyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZmVzc2lvbmFsT3JnYW5pemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0Q29vcmRpbmF0aW9uT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0TWFuYWdlbWVudE9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdE1hbmFnZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2plY3ROYW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0UHJvcGVydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3BlcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9wZXJ0eU9yQnVpbGRpbmdNYW5hZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9wb3NlZEluc3VyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3Bvc2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9TZUNvdW5zZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3RvdHlwZVN1cHBsaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm92aWRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHN5Y2hpYXRyaWNDaGlsZE9yQWRvbGVzY2VudFNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQc3ljaGlhdHJpY0NvbnN1bHRhdGlvbi1MaWFpc29uU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBzeWNoaWF0cmljRWR1Y2F0aW9uU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBzeWNoaWF0cmljRW1lcmdlbmN5U2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBzeWNoaWF0cmljRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBzeWNoaWF0cmljR2VyaWF0cmljU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBzeWNoaWF0cmljSGVhbHRoRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBzeWNoaWF0cmljSW5wYXRpZW50VW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHN5Y2hpYXRyaWNPdXRwYXRpZW50U2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBzeWNoaWF0cmljUGFydGlhbEhvc3BpdGFsaXphdGlvblByb2dyYW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBzeWNoaWF0cmlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHN5Y2hvbG9naXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdWJsaWNBbHRlcm5hdGl2ZVNjaG9vbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVibGljSGVhbHRoU2VydmljZUZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdWJsaWNIZWFsdGhTZXJ2aWNlSW5kaWFuU2VydmljZUZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdWJsaWNvclByaXZhdGVPcmdhbml6YXRpb25Gb3JUaGVEaXNhYmxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVibGljUHJlLUtFZHVjYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1YmxpY1NjaG9vbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVibGlzaGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdW1wZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlZENvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlcnNEZXBhcnRtZW50QnV5ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlU2VydmljZVByb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFsaWZ5aW5nT2ZmaWNlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGl0eUNvbnRyb2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1b3RhdGlvblJlcXVlc3RpbmdQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFkaW9hY3RpdmVJbXBsYW50c1VuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhZGlvQ29udHJvbFN0YXRpb25Mb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFkaW9TdGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbHJvYWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhdGluZ09yZ2FuaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWlwdE1ldGVyTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpcHRab25lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXZlZEZyb20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXZlck1hbmFnZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmVyT2ZDaGVxdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmVyT2ZGdW5kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2ZXJzQ29ycmVzcG9uZGVudEJhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmVyU2l0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2ZXJzU3ViLUVudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2aW5nQmFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2aW5nQ29tcGFueSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2aW5nRmFjaWxpdHlTY2hlZHVsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmluZ0ZpbmFuY2lhbEluc3RpdHV0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXZpbmdMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2aW5nUG9pbnRGb3JDdXN0b21lclNhbXBsZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmluZ1N1Yi1Mb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjaXBpZW50T2ZDaXZpbG9yTGVnYWxMaWFiaWxpdHlQYXltZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNsYW1hdGlvbkNlbnRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjb3JkLUtlZXBpbmdBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNvdmVyeVJvb20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY3JlYXRpb25hbFRoZXJhcHlTZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZlcmVuY2VzRW1wbG95ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVycmFsUHJvdmlkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVycmluZ0hlYWx0aENhcmVQcm92aWRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJyaW5nUHJvdmlkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmluZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZpbmVyeU9wZXJhdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZ1c2FsUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaW9uYWxPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2lzdGVyZWRCdXNpbmVzc05hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2lzdGVyZWRJbnZlc3RtZW50QWR2aXNvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaXN0ZXJlZE9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaXN0ZXJlZE93bmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RlcmVkUHJpbmNpcGFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RlcmluZ05vbnBhcmVudFBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RlcmluZ1BhcmVudFBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RlcmluZ1BhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RyYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2lzdHJhdGlvblRyaWJ1bmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWd1bGFyRGVhbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWd1bGF0b3J5U3RhdGVEaXN0cmljdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVndWxhdG9yeVN0YXRlRW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWhhYmlsaXRhdGlvbkZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWhhYmlsaXRhdGlvbklucGF0aWVudFVuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlaGFiaWxpdGF0aW9uT3V0cGF0aWVudFNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWltYnVyc2luZ0JhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlaW5zdXJhbmNlSW50ZXJtZWRpYXJ5T3JCcm9rZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlaW5zdXJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGVhc2VEcmF5bWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxlYXNlVG9QYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVtaXR0aW5nQmFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVtaXRUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVuZGVyaW5nUHJvdmlkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbnRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVudFBheW9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBhaXJpbmdPdXRsZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGFpck9yUmVmdXJiaXNoTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGxhY2luZ01hbnVmYWN0dXJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcG9ydGluZ0NhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcG9ydGluZ0NhcnJpZXJzTm9taW5hdGVkQWdlbnRPclJlcHJlc2VudGF0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBvcnRpbmdMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0aW5nT2ZmaWNlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwcmVzZW50YXRpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcHJvZHVjdGl2ZUhlYWx0aFNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1ZXN0ZWRMZW5kZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVlc3RvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzYWxlQ3VzdG9tZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2FsZURlYWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzZWFyY2hJbnN0aXR1dGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2Vydm9pciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzaWRlbmNlT3JEb21pY2lsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzaWRlbmN5SW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2lkZW50QmVuZWZpY2lhcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2lkZW50SW5zdHJ1Y3RpbmdQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzcGlyYXRvcnlUaGVyYXB5U2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3BpdGVDYXJlRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3BvbnNpYmxlRXhoaWJpdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNwb25zaWJsZUdvdmVybm1lbnRBZ2VuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3BvbnNpYmxlSW5zdGFsbGF0aW9uRGVzdGluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3BvbnNpYmxlSW5zdGFsbGF0aW9uT3JpZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNwb25zaWJsZVBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXRhaWxBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXRhaWxQaGFybWFjeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0cm9jZXNzaW9uYWlyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0dXJuZWRUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm9hZENhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvdXRpbmdQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm91dGluZ1BvaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb3lhbHR5T3duZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJ1cmFsSGVhbHRoQ2xpbmljIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWxlc0Fzc2lzdGFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FsZXNPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbGVzcGVyc29uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWxlc1Jlc3BvbnNpYmlsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWx2YWdlQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FtcGxlc1RvQmVSZXR1cm5lZFRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYW1wbGluZ0xvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTY2hvb2wtQmFzZWRTZXJ2aWNlUHJvdmlkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjaG9vbERpc3RyaWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTQ29ycG9yYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjcmVlbmluZ1BvaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWFsaW5nQ29tcGFueSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kYXJ5SW52ZW50b3J5Q29udHJvbEFjdGl2aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRhcnlMb2NhdGlvbkFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY29uZGFyeVBheWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRhcnlUYXhwYXllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kYXJ5V2FycmFudGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRDb250YWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRDb250YWN0T3JnYW5pemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRIb21lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRMZXZlbFBhcmVudENvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY3JldGFyaWF0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWN0aW9uOEFQcm9ncmFtUGFydGljaXBhbnRGaXJtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWN1cmVkUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY3VyZWRQYXJ0eUNvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY3VyZWRQYXJ0eUluZGl2aWR1YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGZJbnN1cmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGxlckFzT2ZmaWNpYWxseVJlZ2lzdGVyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGxlcnNBZ2VudE9yUmVwcmVzZW50YXRpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGxlcnNGaW5hbmNpYWxJbnN0aXR1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VsbGluZ0FnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxsaW5nT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxsaW5nUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbmRlck9mRnVuZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbmRlcnNDb3JyZXNwb25kZW50QmFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VuaW9yTWVtYmVyc2hpcFByb2dyYW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VCdXJlYXUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZU1hbmFnZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VPcmdhbml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VQZXJmb3JtYW5jZVNpdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VQZXJmb3JtZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VQcm92aWRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZVJlcXVlc3RlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZVN1cHBsaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNpbmdBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljaW5nQnJva2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNpbmdEZWFsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2luZ09yZ2FuaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hhcmVkU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hhcmVob2xkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoZWx0ZXJlZFdvcmtzaG9wIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwRnJvbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBlcnNBc3NvY2lhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBpbmdMaW5lU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBpbmdTY2hlZHVsZUlzc3VlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcFRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaG93aW5nQWdlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpYmxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpZ25hdG9yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2lnbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaWduaWZpY2FudE90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaW5nbGVQaG90b25FbWlzc2lvbkNvbXB1dGVyaXplZFRvbW9ncmFwaHlVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaXRlT3BlcmF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNraWxsZWROdXJzaW5nRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNraWxsZWROdXJzaW5nb3JPdGhlckxvbmctVGVybUNhcmVVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTa2lsbGVkTnVyc2luZ1NlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbGF1Z2h0ZXJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2xvdENoYXJ0ZXJQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU21hbGxCYXNlU3RhdGlvbkxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbWFsbEJ1c2luZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbWFsbENvbnRyb2xTdGF0aW9uTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNtYWxsRGlzYWR2YW50YWdlZEJ1c2luZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb2NpYWxseURpc2FkdmFudGFnZWRCdXNpbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29jaWFsbHlEaXNhZHZhbnRhZ2VkSW5kaXZpZHVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29jaWFsbHlJbnN1cmVkUGVyc29uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb2NpYWxTZWN1cml0aWVzQ29sbGVjdG9yc09mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29jaWV0eU9mUHJvcGVydHlJbmZvcm1hdGlvbkNvbXBpbGVyc0FuZEFuYWx5c3RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb2xkVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvbGRUb0FuZFNoaXBUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29sZFRvSWZEaWZmZXJlbnRGcm9tQmlsbFRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb2xlUHJvcHJpZXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU291cmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb3VyY2VNZXRlckxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb3VyY2VPZkluZm9ybWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb3VyY2VQYXJ0eU9mSW5mb3JtYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsQ291bnNlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbGl6ZWRNb2JpbGVSYWRpb1NlcnZpY2VMaWNlbnNlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbGl6ZWRPdXRwYXRpZW50UHJvZ3JhbUZvckFJRFNPckFSQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lmaWVkUmVwb3NpdG9yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlZWNoVGhlcmFweVNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcG9ydHNNZWRpY2luZUNsaW5pY09yU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwb3VzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BvdXNlSW5zdXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3B1ZENvbnRyYWN0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZUNoYXJ0ZXJlZEZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZURpdmlzaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGVhbXNoaXBDb21wYW55Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9ja2hvbGRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvcmFnZUFyZWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b3JhZ2VGYWNpbGl0eWF0RGVzdGluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b3JhZ2VGYWNpbGl0eUF0T3JpZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9yZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvcmVDbGFzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvcmVHcm91cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvcmVLZWVwZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b3JlTWFuYWdlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3R1ZGVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3R1ZHlTdWJtaXR0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1Yi1BY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJjb250cmFjdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJjb250cmFjdE9yQ29nbml6YW50U2VjdXJpdHlPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YmNvbnRyYWN0b3ItTm9taW5hdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJjb250cmFjdG9yV2l0aERpcmVjdFBheW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1Yi1FbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1Ymdyb3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJqZWN0T2ZJbnF1aXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJqZWN0UHJvcGVydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1Ym1pdHRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VibWl0dGVyT2ZTYW1wbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1Yi1PZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnNjcmliZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnNjcmliZXJzRW1wbG95ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnNjcmliZXJzU2Nob29sIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJzZXF1ZW50T3duZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1Yi1TZXJ2aWNlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3Vic2lkaWFyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3Vic2lkaWFyeURpdmlzaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJzdGl0dXRlU3VwcGxpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1Y2Nlc3NmdWxKb2JBcHBsaWNhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cGVydmlzaW5nSGVhbHRoQ2FyZVByb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBlcnZpc2luZ1BoeXNpY2lhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwZXJ2aXNvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwZXJ2aXNvcnlBcHByYWlzZXJOYW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbGllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxpZXJPck1hbnVmYWN0dXJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxpZXJzQ29ycG9yYXRlT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbGllcldvcmtUZWFtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbHlTb3VyY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBvcnRpbmdQZXJzb25uZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBvcnRQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VyZXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJldHlGb3JBZGRpdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cmV0eUZvckFudGlkdW1waW5nT3JDb3VudGVydmFpbGluZ0R1dHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cmZhY2VEaXNjaGFyZ2VBZ2VuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cmZhY2VNYW5hZ2VtZW50RW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJnZW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJwbHVzRGVhbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJ2ZXlvci1Qb2Zlc3Npb25hbFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJ2ZXlvclF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJ2ZXlvclRvcG9ncmFwaGljYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN5c3RlbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFua0Zhcm0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhbmtGYXJtT3duZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhcmlmZklzc3VlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4QWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4QXV0aG9yaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhDb2xsZWN0b3JzT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhFeGVtcHRPcmdhbml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlYW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlY2huaWNhbE9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVsZXBob25lQW5zd2VyaW5nU2VydmljZUJ1cmVhdSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVuYW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZW5hbnRNYW5hZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZW5kZXJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVybWluYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcm1pbmFsTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcm1pbmFsT3BlcmF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcnRpYXJ5UGF5ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlc3RpbmdMYWJvcmF0b3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXN0aW5nU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVzdFNwb25zb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoZWF0ZXJDaXJjdWl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaGVhdHJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaGVyYXBldXRpY1JhZGlvaXNvdG9wZUZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaGlyZFBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaGlyZFBhcnR5QWRtaW5pc3RyYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhpcmRQYXJ0eUludmVzdG1lbnRBZHZpc29yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaGlyZFBhcnR5TWFya2V0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaXJkUGFydHlSZXByaWNpbmdPcmdhbml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaXJkUGFydHlSZXByaWNpbmdQcmVmZXJyZWRQcm92aWRlck9yZ2FuaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhpcmRQYXJ0eVJldmlld2luZ09yZ2FuaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhpcmRQYXJ0eVJldmlld2luZ1ByZWZlcnJlZFByb3ZpZGVyT3JnYW5pemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaXRsZWhvbGRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGl0bGVJbnN1cmFuY2VTZXJ2aWNlc1Byb3ZpZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaXRsZVVuZGVyd3JpdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb29saW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb29saW5nRGVzaWduIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb29saW5nRmFicmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvb2xTb3VyY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvcFBhcmVudENvbXBhbnlJblNhbWVDb3VudHJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3dpbmdBZ2VuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWRlbmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhZGVOYW1lU3lub255bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhZGVVbmlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaW5pbmdJbnN0aXR1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNmZXJQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNmZXJyaW5nUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zZmVyVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zaXRBdXRob3JpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zaXRDaGFyZ2VQYXllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNpdEZyZWlnaHRGb3J3YXJkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zaXRQcmluY2lwYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zaXRQcmluY2lwYWxzQWdlbnRPclJlcHJlc2VudGF0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc21pdHRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0YXRpb25PZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydGVyT2ZIYXphcmRvdXNXYXN0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNzaGlwbWVudFBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmF1bWFDZW50ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyZWF0bWVudEZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmliYWxHb3Zlcm5tZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcnVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1c3RlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1c3RlZXNBdHRvcm5leSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1c3RPZmZpY2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcnVzdE9yRXN0YXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUdWJlcmN1bG9zaXNBbmRPVGhlclJlc3BpcmF0b3J5RGlzZWFzZXNGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVWx0aW1hdGVDb25zaWduZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVsdGltYXRlQ3VzdG9tZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVsdGltYXRlUGFyZW50Q29tcGFueSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVWx0aW1hdGVTYW1lQ291bnRyeVBhcmVudENvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVsdHJhc291bmRVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmFzc2lnbmVkQWdlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuZGVyd3JpdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmV4cGVjdGVkSGFuZGxpbmdQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRlZFN0YXRlc0N1c3RvbXNCcm9rZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRlZFN0YXRlc092ZXJzZWFzU2VjdXJpdHlBZG1pbmlzdHJhdGlvbk9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdFByb3BlcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml2ZXJzaXR5LUNvbGxlZ2VPclNjaG9vbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5sb2FkaW5nUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuc2VydmljZWFibGVNYXRlcmlhbENvbnNpZ25lZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVXBzdHJlYW1NZXRlckxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVcHN0cmVhbVBhcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVU1RydXN0ZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlV0aWxpemF0aW9uTWFuYWdlbWVudE9yZ2FuaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmFjYXRpb25Ib21lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYWxpZGF0aW5nUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhbHVlQWRkZWROZXR3b3JrUHJvdmlkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlaGljbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlaGljbGVDdXN0b2RpYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlaGljbGVTYWx2YWdlQXNzaWdubWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVuZG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXNzZWxNYXN0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlc3NlbE5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZldGVyYW4tT3duZWRCdXNpbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmV0ZXJhbnNBZG1pbmlzdHJhdGlvbkZhY2lsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXRlcmFuc0FkbWluaXN0cmF0aW9uTG9hbkF1dGhvcml6ZWRTdXBwbGllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmV0ZXJhbnNBZG1pbmlzdHJhdGlvbkxvYW5HdWFyYW50eUF1dGhvcml0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmV0ZXJpbmFyaWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXRlcmluYXJ5SG9zcGl0YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZpY3RpbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmlkZW9EZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWb2x1bnRlZXJTZXJ2aWNlc0RlcGFydG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZvdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYWdlRWFybmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJlaG91c2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhcmVob3VzZURlcG9zaXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FyZWhvdXNlS2VlcGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJyYW50ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhdGVyQW1idWxhbmNlU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhdGVyU3lzdGVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWlnaHRpbmdQYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2VsbENhc2luZ0RlcHRoQXV0aG9yaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWxsUGFkQ29uc3RydWN0aW9uQ29udHJhY3RvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2hvbGVzYWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2hvbGx5LU93bmVkU3Vic2lkaWFyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2lubmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaXRoZHJhd2FsUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldpdG5lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldpdG5lc3NGb3JEZWZlbmRhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldpdG5lc3NGb3JQbGFpbnRpZmYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldpdG5lc3NGb3JQcm9zZWN1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29tYW4tT3duZWRCdXNpbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29tYW4tT3duZWRCdXNpbmVzc0xhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb21hbi1Pd25lZEJ1c2luZXNzU21hbGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldvbWVuc0hlYWx0aENlbnRlck9yU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldvcmtzaXRlSGVhbHRoUHJvbW90aW9uRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldvcmtzTWFuYWdlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29ya1RlYW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldyaXRpbmdBZ2VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWC1SYXlSYWRpYXRpb25UaGVyYXB5VW5pdCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iT3JkZXJDb25maXJtYXRpb25BY3Rpb24iPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik9yZGVyQ29uZmlybWF0aW9uQWN0aW9uQ29kZWQiIHR5cGU9Ik9yZGVyQ29uZmlybWF0aW9uQWN0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iT3JkZXJDb25maXJtYXRpb25BY3Rpb25Db2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJPcmRlckNvbmZpcm1hdGlvbkFjdGlvbiIgdHlwZT0iT3JkZXJDb25maXJtYXRpb25BY3Rpb24iLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iT3JkZXJDb25maXJtYXRpb25BY3Rpb25Db2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVcGRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGV0ZSIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJBbHBoYU51bTQwIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSI0MCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU3RydWN0dXJlZE5vdGUiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9IlN0cnVjdHVyZWROb3RlIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTdHJ1Y3R1cmVkTm90ZSIgdHlwZT0iTGlzdE9mU3RydWN0dXJlZE5vdGUiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlN0cnVjdHVyZWROb3RlIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkdlbmVyYWxOb3RlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJOb3RlSUQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iQWdlbmN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJOb3RlVVJMIiB0eXBlPSJ4c2Q6YW55VVJJIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJUZXh0VHlwZUNvZGVkIiB0eXBlPSJUZXh0VHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRleHRUeXBlQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iU3RydWN0dXJlZE5vdGUiIHR5cGU9IlN0cnVjdHVyZWROb3RlIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IlRleHRUeXBlQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYWRsaW5lcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FycmFudGllcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVuYWx0eUZvckJyZWFjaE9mQ29udHJhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikd1YXJhbnRlZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0UmlkZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXJDb250cmFjdHVhbFN0aXB1bGF0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5mb1JlY29yZFBPVGV4dCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0ZXJpYWxQT1RleHQiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZk5hbWVWYWx1ZVNldCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iTmFtZVZhbHVlU2V0Ii8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMaXN0T2ZOYW1lVmFsdWVTZXQiIHR5cGU9Ikxpc3RPZk5hbWVWYWx1ZVNldCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTmFtZVZhbHVlU2V0Ij4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTZXROYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTZXRJRCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTGlzdE9mTmFtZVZhbHVlUGFpciIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmFtZVZhbHVlU2V0IiB0eXBlPSJOYW1lVmFsdWVTZXQiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZk5hbWVWYWx1ZVBhaXIiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9Ik5hbWVWYWx1ZVBhaXIiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZk5hbWVWYWx1ZVBhaXIiIHR5cGU9Ikxpc3RPZk5hbWVWYWx1ZVBhaXIiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik5hbWVWYWx1ZVBhaXIiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5hbWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJWYWx1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRGF0YXR5cGUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik5hbWVWYWx1ZVBhaXIiIHR5cGU9Ik5hbWVWYWx1ZVBhaXIiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkF0dGFjaG1lbnQiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9IkF0dGFjaG1lbnQiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZkF0dGFjaG1lbnQiIHR5cGU9Ikxpc3RPZkF0dGFjaG1lbnQiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkF0dGFjaG1lbnQiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQXR0YWNobWVudEFjdGlvbkNvZGVkIiB0eXBlPSJBdHRhY2htZW50QWN0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQXR0YWNobWVudEFjdGlvbkNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJBdHRhY2htZW50UHVycG9zZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRmlsZU5hbWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkF0dGFjaG1lbnRUaXRsZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQXR0YWNobWVudERlc2NyaXB0aW9uIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Ikxhbmd1YWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJNSU1FVHlwZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUmVwbGFjZW1lbnRGaWxlIiB0eXBlPSJ4Y2JsQm9vbGVhbiIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkF0dGFjaG1lbnRMb2NhdGlvbiIgdHlwZT0ieHNkOmFueVVSSSIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQXR0YWNobWVudCIgdHlwZT0iQXR0YWNobWVudCIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJBdHRhY2htZW50QWN0aW9uQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVXBkYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxldGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vQ2hhbmdlIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJPcmRlckNvbmZpcm1hdGlvbkRldGFpbCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJMaXN0T2ZPcmRlckNvbmZpcm1hdGlvbkl0ZW1EZXRhaWwiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik9yZGVyQ29uZmlybWF0aW9uRGV0YWlsIiB0eXBlPSJPcmRlckNvbmZpcm1hdGlvbkRldGFpbCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mT3JkZXJDb25maXJtYXRpb25JdGVtRGV0YWlsIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJPcmRlckNvbmZpcm1hdGlvbkl0ZW1EZXRhaWwiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZk9yZGVyQ29uZmlybWF0aW9uSXRlbURldGFpbCIgdHlwZT0iTGlzdE9mT3JkZXJDb25maXJtYXRpb25JdGVtRGV0YWlsIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJPcmRlckNvbmZpcm1hdGlvbkl0ZW1EZXRhaWwiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik9yZGVyQ29uZmlybWF0aW9uSXRlbU51bSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJPcmRlckNvbmZpcm1hdGlvbkFjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iT3JkZXJDb25maXJtYXRpb25EZXRhaWxTaG9ydERlc2NyaXB0aW9uIiB0eXBlPSJBbHBoYU51bTQwIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJPcmRlckNvbmZpcm1hdGlvbkRldGFpbFJlZmVyZW5jZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkRlbGl2ZXJ5Q29tcGxldGUiIHR5cGU9InhjYmxCb29sZWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJJdGVtRGV0YWlsIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Ikxpc3RPZkFjY291bnRBc3NpZ25tZW50Ii8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJPcmRlckNvbmZpcm1hdGlvbkl0ZW1EZXRhaWwiIHR5cGU9Ik9yZGVyQ29uZmlybWF0aW9uSXRlbURldGFpbCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iT3JkZXJDb25maXJtYXRpb25EZXRhaWxSZWZlcmVuY2VzIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlB1cmNoYXNlT3JkZXJSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iQ2F0ZWdvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iQ2F0YWxvZ1JlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJDb250cmFjdEFuZFN5c3RlbVJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJMaXN0T2ZSZWZlcmVuY2VDb2RlZCIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iT3JkZXJDb25maXJtYXRpb25EZXRhaWxSZWZlcmVuY2VzIiB0eXBlPSJPcmRlckNvbmZpcm1hdGlvbkRldGFpbFJlZmVyZW5jZXMiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlB1cmNoYXNlT3JkZXJSZWZlcmVuY2UiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlB1cmNoYXNlT3JkZXJOdW1iZXIiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUHVyY2hhc2VPcmRlckRhdGUiIHR5cGU9InhjYmxEYXRldGltZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUHVyY2hhc2VPcmRlckxpbmVJdGVtTnVtYmVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJQYXJ0aWFsT3JkZXJDb2RlZCIgdHlwZT0iQVNOUGFydGlhbE9yZGVyQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUGFydGlhbE9yZGVyQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUHVyY2hhc2VPcmRlclJlZmVyZW5jZSIgdHlwZT0iUHVyY2hhc2VPcmRlclJlZmVyZW5jZSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUmVmZXJlbmNlIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZWZOdW0iIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlJlZkRhdGUiIHR5cGU9InhjYmxEYXRldGltZSIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlIiB0eXBlPSJSZWZlcmVuY2UiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iQVNOUGFydGlhbE9yZGVyQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBsZXRlT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnRpYWxPcmRlciIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQ2F0ZWdvcnkiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQ2F0ZWdvcnlJRCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJTdGFuZGFyZENhdGVnb3J5SUQiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IkNhdGVnb3J5IiB0eXBlPSJDYXRlZ29yeSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iU3RhbmRhcmRDYXRlZ29yeUlEIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTdGFuZGFyZENhdGVnb3J5VHlwZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkNsYXNzaWZpY2F0aW9uSUQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRlY2huaWNhbElEIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTdGFuZGFyZENhdGVnb3J5SUQiIHR5cGU9IlN0YW5kYXJkQ2F0ZWdvcnlJRCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQ2F0YWxvZ1JlZmVyZW5jZSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQ2F0YWxvZ1VSTCIgdHlwZT0ieHNkOmFueVVSSSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQ2F0YWxvZ0lEIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJDYXRhbG9nSXRlbUlEIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDYXRhbG9nUmVmZXJlbmNlIiB0eXBlPSJDYXRhbG9nUmVmZXJlbmNlIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJDb250cmFjdElEIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IklkZW50aWZpZXIiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IkNvbnRyYWN0SUQiIHR5cGU9IkNvbnRyYWN0SUQiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkNvbnRyYWN0QW5kU3lzdGVtUmVmZXJlbmNlIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IkNvbnRyYWN0SUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDb250cmFjdEl0ZW1JRCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU3lzdGVtSUQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IkNvbnRyYWN0QW5kU3lzdGVtUmVmZXJlbmNlIiB0eXBlPSJDb250cmFjdEFuZFN5c3RlbVJlZmVyZW5jZSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUmVmZXJlbmNlQ29kZWQiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9IlJlZmVyZW5jZUNvZGVkIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMaXN0T2ZSZWZlcmVuY2VDb2RlZCIgdHlwZT0iTGlzdE9mUmVmZXJlbmNlQ29kZWQiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlJlZmVyZW5jZUNvZGVkIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VUeXBlQ29kZWQiIHR5cGU9IlJlZmVyZW5jZVR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJSZWZlcmVuY2VUeXBlQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlByaW1hcnlSZWZlcmVuY2UiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU3VwcG9ydGluZ1JlZmVyZW5jZSI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlJlZmVyZW5jZSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTdXBwb3J0aW5nU3ViUmVmZXJlbmNlIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlJlZmVyZW5jZURlc2NyaXB0aW9uIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2VDb2RlZCIgdHlwZT0iUmVmZXJlbmNlQ29kZWQiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iUmVmZXJlbmNlVHlwZUNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBYmJyZXZpYXRlZE5ld0RydWdBcHBsaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjZXB0YWJsZVNvdXJjZURVTlNOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY2VwdGFibGVTb3VyY2VQdXJjaGFzZXJJRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjZXB0YWJsZVNvdXJjZVN1cHBsaWVySUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY2Vzc0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY2Vzc29yaWFsUmFpbERpdmVyc2lvblJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjZXNzb3JpYWxTdGF0dXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NpZGVudFJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudENhdGVnb3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50aW5nQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudGluZ0VxdWlwbWVudExvY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50aW5nRmlsZVJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudGluZ1BlcmlvZFJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudE1hbmFnZXJzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudFBhcnR5c0JhbmtSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRQYXJ0eXNSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRQYXlhYmxlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50U2VydmljaW5nQmFua3NSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRzUmVjZWl2YWJsZUN1c3RvbWVyQWNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudHNSZWNlaXZhYmxlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50c1JlY2VpdmFibGVPcGVuSXRlbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudHNSZWNlaXZhYmxlU3RhdGVtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50U3VmZml4Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNrbm93bGVkZ2VtZW50T2ZPcmRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0aW9uQXV0aG9yaXphdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkaXRpb25hbFJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkT25TeXN0ZW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkZHJlc3NlZVJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRqdXN0ZWRSZXByaWNlZENsYWltUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RlZFJlcHJpY2VkTGluZUl0ZW1SZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkanVzdG1lbnRDb250cm9sTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RtZW50TWVtb0NoYXJnZUJhY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkbWluaXN0cmF0b3JzUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZlcnNhcnlDYXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZlcnRpc2VyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZpY2VPZkNvbGxlY3Rpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmlzZVRocm91Z2hCYW5rc1JlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWR2aXNpbmdCYW5rc1JlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWVyb25hdXRpY2FsRXF1aXBtZW50UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBRkUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFmZmVjdGVkU3Vic3lzdGVtQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWZmaWxpYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZW5jeUFzc2lnbmVkRW1wbG95ZWVJRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlbmN5QXNzaWduZWROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZW5jeUNhc2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZW5jeUNsYWltTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ2VuY3lDbGF1c2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFJREFSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ2VuY3lIaWVyYXJjaGljYWxMZXZlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlbmN5TG9jYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ2VuY3lzU3R1ZGVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlbnRDbGFpbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlbnRDb250cmFjdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZW50c0JhbmtSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZW50c1JlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlbnRzU2hpcG1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFHRVJEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ3JlZW1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFncmVlbWVudFRvUGF5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJDYXJnb1RyYW5zZmVyTWFuaWZlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpckRpbWVuc2lvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpckhhbmRsaW5nQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWlybGluZXNGbGlnaHRJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWlybGluZVRpY2tldE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWlyV2F5YmlsbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxsb3RtZW50SWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbG93YW5jZVJlY2lwaWVudElkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbHRlcmF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbHRlcm5hdGVDbGF1c2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtYnVsYXRvcnlQYXRpZW50R3JvdXBOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtZW5kZWRVbmlmb3JtQ29tbWVyY2lhbENvZGVGaWxpbmdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtZW5kbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1lbmRtZW50RmlsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbWVyaWNhbkJhbmtlcnNBc3NvY2lhdGlvblRyYW5zaXRPclJvdXRpbmdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtZXJpY2FuR2FzQXNzb2NpYXRpb25FcXVhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1lcmljYW5Pc3Rlb3BhdGhpY0Fzc29jaWF0aW9uQ2VydGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1lcmljYW5QZXRyb2xldW1JbnN0aXR1dGVEZWR1Y3Rpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbWVyaWNhblBldHJvbGV1bUluc3RpdHV0ZVdlbGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFuYWx5c2lzTnVtYmVyT3JUZXN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbmVzdGhlc2lhTGljZW5zZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW5pbWFsU3BlY2llcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW5pbWFsU3RyYWluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbnRpRHVtcGluZ0Nhc2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFQRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYWJsZUNvZWZmaWNpZW50SWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2FibGVJbnN0cnVjdGlvbnNPclN0YW5kYXJkcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYW50c0JhbmtSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2FudHNSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhdGlvblJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYXRpb25UcmFuc2FjdGlvblJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwb2ludG1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcHJhaXNlckxpY2Vuc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcHJvcHJpYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcHJvdmFsQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJlYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJyaXZhbENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFydGljbGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2VtYmx5TGluZUZlZWRMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzZW1ibHlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2Vzc21lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2lnbmVkQnlUcmFuc2FjdGlvblNldFNlbmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzaWduZWRDb250cmFjdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzaWduZWRTZXF1ZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzaWdubWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzaWdubWVudFJlY29yZGluZ051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzb2NpYXRlZENhc2VDb250cm9sTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NvY2lhdGVkSW52b2ljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc29jaWF0ZWROdW1iZXJGb3JKb2luZWRVbml0Tm90UmVzdWJkaXZpZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NvY2lhdGVkTnVtYmVyRm9yTGltaXRlZENvbW1vbkVsZW1lbnRQYXJraW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NvY2lhdGVkTnVtYmVyRm9yVW5pdFBhcmtpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc29jaWF0ZWRQb2xpY3lOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc29jaWF0ZWRQcm9kdWN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NvY2lhdGVkUHJvcGVydHlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc29jaWF0ZWRQdXJjaGFzZU9yZGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzb2NpYXRpb25PZkFtZXJpY2FuUmFpbHJvYWRzUmFpbHdheUFjY291bnRpbmdSdWxlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzdW1pbmdDb21wYW55Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdGFDYXJuZXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF0b21pY1NhZmV0eWFuZExpY2Vuc2luZ0JvYXJkUGFuZWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF0dGFjaGVkVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF0dGFjaG1lbnRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdHRvcm5leSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXV0aG9yaXNhdGlvbkZvclJlcGFpclJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXV0aG9yaXR5SXNzdWVkRXF1aXBtZW50SWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhvcml6YXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhvcml6YXRpb25OdW1iZXJGb3JFeGNlcHRpb25Ub0Rhbmdlcm91c0dvb2RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3JpemF0aW9uVG9NZWV0Q29tcGV0aXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dG9Mb3NzSXRlbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUNIUmV0dXJuT3JOb3RpZmljYXRpb25PZkNoYW5nZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFDSEVudHJ5RGVzY3JpcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFDSFN0YW5kYXJkRW50cnlDbGFzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUNIVHJhY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dG9tYXRlZFVuZGVyd3JpdGluZ1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXhsZVJhdGlvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYWNrb3V0UHJvY2VkdXJlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFkZ2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbGFuY2VEdWVSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbmtBc3NpZ25lZEJhbmtlcnNSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbmtBc3NpZ25lZFNlY3VyaXR5SWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFua2Vyc0FjY2VwdGFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbmtSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbmtydXB0Y3lQcm9jZWR1cmVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbmtzQ29tbW9uVHJhbnNhY3Rpb25SZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbmtzSW5kaXZpZHVhbFRyYW5zYWN0aW9uUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYW5rVGVsZWdyYXBoaWNOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbmtUb0JhbmtJbmZvcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFyQ29kZWRMYWJlbFNlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFyQ29kZWRTZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhcmdlUGVybWl0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXNpY0NvbnRyYWN0TGluZUl0ZW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhdGNoTnVtYmVyT3JMb3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhdGNoU2VxdWVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlYW1Bc3NlbWJseUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlZ2luTWlsZU1hcmtlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVnaW5uaW5nSm9iU2VxdWVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlZ2lubmluZ0thbmJhblNlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVnaW5uaW5nTWV0ZXJSZWFkaW5nQWN0dWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZWdpbm5pbmdNZXRlclJlYWRpbmdFc3RpbWF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlZ2lubmluZ1NlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVuZWZpY2lhcnlzQmFua1JlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVuZWZpY2lhcnlzUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGF0ZXJhbENhclNlcnZpY2VBZ3JlZW1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsQW5kSG9sZEludm9pY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxpbmdBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsaW5nQ2VudGVySWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxpbmdUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsT2ZMYWRpbmdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxvZk1hdGVyaWFsUmV2aXNpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxPZlF1YW50aXRpZXNOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbmFyeU9iamVjdElkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbkxvY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCbGFua2V0T3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJsZW5kZWRXaXRoQmF0Y2hOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJsZW5kZWRXaXRoTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCbG9jayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmx1ZUNyb3NzUHJvdmlkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJsdWVTaGllbGRQcm92aWRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9uZGVkQ2FycmllckludGVybmFsUmV2ZW51ZVNlcnZpY2VJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9va2luZ1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9va051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9yZGVyZWF1TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcmFuY2hJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcm9rZXJJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJva2VyT3JTYWxlc09mZmljZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJva2VyUmVmZXJlbmNlMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJva2VyUmVmZXJlbmNlMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJva2Vyc09yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcm9rZXJSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1ZGdldENoYXB0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1cmVhdW9mTGFib3JhbmRTdGF0aXN0aWNzU2NoZWR1bGVJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXJlYXVTaWduaW5nT1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1cmVhdVNpZ25pbmdTUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NBY3Rpdml0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NUYXhOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVySWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyc0FwcHJvdmFsTWFyayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5ZXJzQ2F0YWxvZ3VlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllcnNDb250cmFjdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5ZXJzQ3JlZGl0TWVtbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5ZXJzRGViaXRNZW1vIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllcnNEZWJ0b3JOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyc0l0ZW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyc09yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllcnNTaGlwbWVudE1hcmtOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhZEZpbGVMYXllckNvbnZlbnRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbGVuZGFyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYWxlbmRhck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FsbE9mZk9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYWxsU2lnbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuYWRpYW5FeGNpc2VFbnRyeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuYWRpYW5GaW5hbmNpYWxJbnN0aXR1dGlvbkJyYW5jaEFuZEluc3RpdHV0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5hZGlhbkdvb2RzQW5kU2VydmljZXNvclF1ZWJlY1NhbGVzVGF4UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5hZGlhblByb3ZpbmNlT3BlcmF0aW5nQXV0aG9yaXR5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5hZGlhblNvY2lhbEluc3VyYW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuYWRpYW5XaGVhdEJvYXJkUGVybWl0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5jZWxlZFJldmlzaW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJkQWNjb3VudFJlcG9ydGluZ0lkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcmRBY2NvdW50UmVwb3J0aW5nTGV2ZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcmRBY2NvdW50U3RhdHVzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyZEFjY291bnRUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyZEJpbGxpbmdUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyZElzc3VlclRyYW5zYWN0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyZ29BY2NlcHRhbmNlT3JkZXJSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcmdvQ29udHJvbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyZ29NYW5pZmVzdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FybmV0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJyaWVyQXNzaWduZWRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJyaWVyQXNzaWduZWRDb25zaWduZWVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcnJpZXJBc3NpZ25lZFBhY2thZ2VJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FycmllckFzc2lnbmVkUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJyaWVyQXNzaWduZWRTaGlwcGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJyaWVyc0FnZW50UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJyaWVyc0N1c3RvbXNCb25kTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJyaWVyc1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzZU9mTmVlZFBhcnR5c1JlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzdWFsdHlSZXBvcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc3VhbHR5UmVwb3J0U2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXRhbG9nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXRhbG9ndWVTZXF1ZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2F0YXN0cm9waGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhdGVnb3J5T2ZXb3JrUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZWRlbnRzQ2xhaW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlZGluZ0NvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlaWxpbmdGb3JtdWxhUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZW5zdXNBdXRvbWF0ZWRGaWxlc0lEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZW5zdXNCbG9ja0dyb3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZW5zdXNTdGF0ZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlbnN1c1RyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZW5zdXNUcmFjdFN1ZmZpeCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VudHJhbFNlY3JldGFyaWF0TG9nTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZW50cmFsU2VjcmV0YXJpYXRMb2dOdW1iZXJDaGlsZERhdGFNYWludGVuYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VudHJhbFNlY3JldGFyaWF0TG9nTnVtYmVyUGFyZW50RGF0YU1haW50ZW5hbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VydGlmaWNhdGVPZkNvbmZvcm1pdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmljYXRlb2ZJbmNvcnBvcmF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0ZW9mVHJhbnNwb3J0YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmllZE1haWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNSTkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYW1iZXJPZkNvbW1lcmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFtYmVyT2ZDb21tZXJjZVJlZ2lzdHJhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0hBTVBVU0lkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFuZ2VEb2N1bWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhbmdlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFuZ2VPcmRlckF1dGhvcml0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhbmdlVmVyaWZpY2F0aW9uUHJvY2VkdXJlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlQ2FyZEFjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZUNhcmROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZU5vdGVSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcnRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hlY2tpbmdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoZWNrTGlzdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hlY2tOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoZW1pY2FsQWJzdHJhY3RTZXJ2aWNlUmVnaXN0cnlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoZXF1ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2lyY3VpdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2lyY3VsYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNpcmN1bGFyUHVibGljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNpdGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaXRhdGlvbk9mT3BpbmlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2l0YXRpb25PZlN0YXR1dGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNpdGl6ZW5zaGlwRG9jdW1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNpdmlsQWN0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaXZpbExpYWJpbGl0aWVzb2ZPaWxDZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xhaW1BZG1pbmlzdHJhdG9yQ2xhaW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsYWltYW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGFpbWFudHNDbGFpbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xhaW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsYWltT2ZmaWNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGFzc0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsYXNzT2ZDb250cmFjdENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsYXVzZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xlYXJpbmdIb3VzZUludGVyYmFua1BheW1lbnRzU3lzdGVtU2VxdWVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsZWFyaW5nSG91c2VJbnRlcmJhbmtQYXltZW50U3lzdGVtUGFydGljaXBhbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsZWFyaW5nSG91c2VJbnRlcmJhbmtQYXltZW50U3lzdGVtVXNlcklkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGVhcmluZ1JlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xlYXJUZXh0Q2xhdXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGllbnRDb21wYW55Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xpZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGllbnRSZXBvcnRpbmdDYXRlZ29yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xpbmljYWxMYWJvcmF0b3J5SW1wcm92ZW1lbnRBbWVuZG1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsaW5pY051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29hbEF1dGhvcml0eU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29kZU9mRmVkZXJhbFJlZ3VsYXRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2lsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xkUm9sbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29sbGVjdGluZ0JhbmtzUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsZWN0b3JJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29sbG9jYXRpb25JbmRpY2F0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbWJpbmVkU2hpcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1lcmNpYWxPclByaXZhdGVQYXNzZW5nZXJWZWhpY2xlUXVhbGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tZXJjaWFsQWNjb3VudFN1bW1hcnlSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1lcmNpYWxhbmRHb3Zlcm5tZW50RW50aXR5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWVyY2lhbERyaXZlcnNMaWNlbnNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tZXJjaWFsSW52b2ljZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWVyY2lhbFJlZ2lzdHJhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWVyY2lhbFZlaGljbGVTYWZldHlBc3N1cmFuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1pdG1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1pdHRlZU9uVW5pZm9ybVNlY3VyaXR5SWRlbnRpZmljYXRpb25Qcm9jZWR1cmVzTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tb2RpdHlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1vbkFjY2Vzc1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbW9uVHJhbnNhY3Rpb25SZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBhbnlBbmRQbGFjZVJlZ2lzdHJhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGFueUFuZFN5bmRpY2F0ZVJlZmVyZW5jZTEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBhbnlBbmRTeW5kaWNhdGVSZWZlcmVuY2UyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wYW55SXNzdWVkRXF1aXBtZW50SWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNSTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGFyYWJsZVByb3BlcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wYXJhYmxlUHJvcGVydHlQZW5kaW5nU2FsZVJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGFyYWJsZVByb3BlcnR5U2FsZVJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGFyYWJsZVByb3BlcnR5VmVyaWZpY2F0aW9uU291cmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wZXRlbnRBdXRob3JpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBsYWludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGxhaW50Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGxldGVkVW5pdHNQYXltZW50UmVxdWVzdFJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGxpYW5jZUNvZGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBvbmVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uZGl0aW9uT2ZQdXJjaGFzZURvY3VtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25kaXRpb25PZlNhbGVEb2N1bWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uZG9taW5pdW1JZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uZ3Jlc3Npb25hbERpc3RyaWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25uZWN0aW5nQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbmVlUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zaWduZWVzRnVydGhlck9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zaWduZWVzSW52b2ljZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbmVlc09yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zaWduZWVzUmVsZWFzZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbmVlc1NoaXBtZW50UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zaWdubWVudENsYXNzaWZpY2F0aW9uSUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNpZ25vcnNGdXJ0aGVyT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNpZ25vcnNSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNvbGlkYXRlZEludm9pY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNvbGlkYXRpb25TaGlwbWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc29saWRhdG9yc1JlY2VpcHROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnN0cmFpbnROb3RhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc3VtZXJJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zdW1wdGlvbkRhdGFSZXF1ZXN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJPckVxdWlwbWVudFJlY2VpcHROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lck9yUGFja2FnaW5nU3BlY2lmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyRGlzcG9zaXRpb25PcmRlclJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyT3BlcmF0b3JzUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJvckVxdWlwbWVudFJlY2VpcHROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lclByZWZpeCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyU2VxdWVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lcldvcmtPcmRlclJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGludWF0aW9uRmlsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250aW51YXRpb25Vbmlmb3JtQ29tbWVyY2lhbENvZGVGaWxpbmdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRpbnVvdXNNb3ZlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250aW51b3VzVHJhbnNmZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0QWRkZW5kdW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0QXVkaXRvcklETnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdEJyZWFrZG93blJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RDb29wTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdEhvbGRlckNsYWltTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdExpbmVJdGVtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RPcHRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0b3JEYXRhUmVxdWlyZW1lbnRzTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RvckVzdGFibGlzaG1lbnRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdG9yUmVxdWVzdFJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RQYXJ0eVJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0UmlkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnZleWFuY2VSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvb3BlcmF0aW9uQ29udHJhY3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcm5ib3JlQ2VydGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ycmVjdGVkQmF0Y2hOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcnJlY3RlZENvbnRyYWN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3JyZWN0ZWRTb2NpYWxTZWN1cml0eU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ycmVjdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zdEFjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvc3RBbGxvY2F0aW9uUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3N0YVJpY2FuSnVkaWNpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvc3RDZW50cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvc3RFbGVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VudHlCdXNpbmVzc1JlZ2lzdHJhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291bnR5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291bnR5TGVnaXNsYXRpdmVEaXN0cmljdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291cG9uRGlzdHJpYnV0aW9uTWV0aG9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3Vwb25SZWRlbXB0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3ZlcmFnZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyZWRpdENhcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyZWRpdENvdW5zZWxpbmdJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0TWVtb051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0Tm90ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyZWRpdG9yRGViaXRBZGp1c3RtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmVkaXRvcnNSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyZWRpdFJhdGluZ0FnZW5jeXNSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyZWRpdFJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0UmVwb3J0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmVkaXRSZXBvc2l0b3J5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JpdGljYWxBcHBsaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JpdGljYWxpdHlEZXNpZ25hdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcm9wWWVhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3Jvc3NMaXN0ZWRDb3Vyc2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyb3NzUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDUzU0S2V5VHJhaW5JbmRpY2F0b3JDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDUzU0S2V5VHJhaW5JbmRpY2F0b3JHcm91cE5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnJlbnRDZXJ0aWZpY2F0ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudEludm9pY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnJlbnRvckxhdGVzdENvdXJzZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudFByb2NlZHVyYWxUZXJtaW5vbG9neUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnJlbnRSZXZpc2lvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJDYXRhbG9nTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lck1haW50ZW5hbmNlUGVyaW9kU2VxdWVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbWVyTWF0ZXJpYWxTcGVjaWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lck9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lclByb2Nlc3NTcGVjaWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lclJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJSZWZlcmVuY2VOdW1iZXJBc3NpZ25lZFRvUHJldmlvdXNCYWxhbmNlT2YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbWVyc0NvbW1vblRyYW5zYWN0aW9uUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lcnNJbmRpdmlkdWFsVHJhbnNhY3Rpb25SZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbWVyc1BhcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbWVyU3BlY2lmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJzUmVsZWFzZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJzVW5pdEludmVudG9yeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJUcmFja2luZ051bWJlckZvckxvYW5lZE1hdGVyaWFscyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0JhckNvZGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNCcm9rZXJSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNEZWNpc2lvblJlcXVlc3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNEZWNsYXJhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0RyYXdiYWNrRW50cnlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNHdWFyYW50ZWVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNob3VzZUJyb2tlckxpY2Vuc2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNJdGVtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zUHJlZmVyZW5jZUlucXVpcnlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNSZWxlYXNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc1RhcmlmZk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc1RyYW5zaGlwbWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc1ZhbHVhdGlvbkRlY2lzaW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhbmdlcm91c0dvb2RzU2VjdXJpdHlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhbmdlcm91c0dvb2RzVHJhbnNwb3J0TGljZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0YUF1dGhlbnRpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRhSXRlbURlc2NyaXB0aW9uUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRhUXVhbGl0eVJlamVjdFJlYXNvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0YVJlbGlhYmlsaXR5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0YVNvdXJjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0YVN0cnVjdHVyZVRhZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVhbGVySWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYWxlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVhbGVyT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYWxlcnB1cmNoYXNlb3JkZXJudW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYWxlclR5cGVJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGViaXRBY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWJpdE5vdGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYml0UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWJ0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYnRvcnNBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWJ0b3JzUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWNsYXJhbnRzQ3VzdG9tc0lkZW50aXR5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWNsYXJhbnRzUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWZlY3RDb2RlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWZlbnNlRmVkZXJhbEFjcXVpc2l0aW9uUmVndWxhdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlZmVuc2VQcmlvcml0aWVzQWxsb2NhdGlvblN5c3RlbVByaW9yaXR5UmF0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWZlcm1lbnRBcHByb3ZhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVmZXJyZWRQYXltZW50UmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeU5vdGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeU9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeVF1b3RlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeVJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlSZWdpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5U2NoZWR1bGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5VGlja2V0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeVRyYWlsZXJNYW5pZmVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlWZXJpZmljYXRpb25DZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVuaWFsUmVhc29uSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVuc2l0eU9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZW50YWxJbnN1cmFuY2VBY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZW50YWxJbnN1cmFuY2VQb2xpY3lOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbnRpc3RMaWNlbnNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50T3JBZ2VuY3lOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydG1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydG1lbnRvZkFncmljdWx0dXJlQWNxdWlzaXRpb25SZWd1bGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50b2ZDb21tZXJjZUFjcXVpc2l0aW9uUmVndWxhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudE9mRGVmZW5zZUZvcm0yNTBSZXF1aXJlbWVudENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydG1lbnRPZkRlZmVuc2VJZGVudGlmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkREVFNDTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudG9mRWR1Y2F0aW9uQWNxdWlzaXRpb25SZWd1bGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50b2ZFbmVyZ3lBY3F1aXNpdGlvblJlZ3VsYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhIU0FSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIVURBUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudG9mSW50ZXJpb3JBY3F1aXNpdGlvblJlZ3VsYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydG1lbnRvZkp1c3RpY2VBY3F1aXNpdGlvblJlZ3VsYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydG1lbnRvZkxhYm9yQWNxdWlzaXRpb25SZWd1bGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50b2ZTdGF0ZUFjcXVpc2l0aW9uUmVndWxhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudG9mdGhlVHJlYXN1cnlBY3F1aXNpdGlvbk9yUHJvY3VyZW1lbnRSZWd1bGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50b2ZUcmFuc3BvcnRhdGlvbkFjcXVpc2l0aW9uUmVndWxhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudE9mVHJhbnNwb3J0YXRpb25Cb25kTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50b2ZUcmFuc3BvcnRhdGlvbkhhemFyZG91c051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudG9mVmV0ZXJhbnNBZmZhaXJzQWNxdWlzaXRpb25SZWd1bGF0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudFdoZXJlSW5qdXJ5T2NjdXJyZWRJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0dXJlZnJvbVNwZWNpZmljYXRpb25DbGFzc0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydHVyZWZyb21TcGVjaWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnR1cmVmcm9tU3BlY2lmaWNhdGlvblR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBlbmRlbnRzSW5mb3JtYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcG9zaXRBY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBvc2l0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBvc2l0b3JOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcG9zaXRvcnlUcnVzdENvbXBhbnlJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwb3NpdFNlcXVlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXJhdENlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXNjcmlwdGlvbk9mQ2hhbmdlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzcGF0Y2hBZHZpY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc3BhdGNoTm90ZVBvc3RQYXJjZWxzTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXNwYXRjaE5vdGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc3RpbmF0aW9ub2ZTaGlwbWVudEhhcm1vbml6ZWRCYXNlZENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpYWdub3Npc1JlbGF0ZWRHcm91cE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlyZWN0RGViaXRSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpcmVjdG9yeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlyZWN0UGF5bWVudFZhbHVhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlyZWN0UGF5bWVudFZhbHVhdGlvblJlcXVlc3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2FiaWxpdHlJbnN1cmFuY2VBY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNhYmlsaXR5SW5zdXJhbmNlUG9saWN5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNjb3VudGVyUmVnaXN0cmF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNwZW5zYXRpb25SZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3Bvc2FsVHVybkluRG9jdW1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3B1dGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3RyaWJ1dGlvbkNlbnRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpYnV0aW9uTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpYnV0aW9uU3RhdGVtZW50Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpYnV0b3JBc3NpZ25lZE9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXN0cmlidXRvckFzc2lnbmVkVHJhbnNhY3Rpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3RyaWJ1dE9ySW52b2ljZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpYnV0b3JzQWNjb3VudElkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXN0cmlidXRvcnNBY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXN0cmlidXRvcnNSZXByZXNlbnRhdGl2ZUlkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXN0cmlidXRvcnNTcGxpdEFnZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXN0cmljdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGl2ZXJzaW9uQXV0aG9yaXR5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXZpc2lvbklkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY2tldE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9ja051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9ja1JlY2VpcHROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50YXJ5Q3JlZGl0QW1lbmRtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGFyeUNyZWRpdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRhcnlQYXltZW50UmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGF0aW9uQWZmZWN0ZWROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50SWRlbnRpZmljYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRWb2x1bWVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvbWVzdGljRmxpZ2h0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb21lc3RpY0ludmVudG9yeU1hbmFnZW1lbnRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb21pY2lsZUJyYW5jaE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9taW5pb25PZkNhbmFkYUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvd25zdHJlYW1TaGlwcGVyQ29udHJhY3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyYWZ0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcmFpbmhvbGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyYXdlZXNSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyYXdpbmdMaXN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcmF3aW5nTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcmF3aW5nUmV2aXNpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyYXdpbmdUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcml2ZXJzTGljZW5zZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJ1Z0VuZm9yY2VtZW50QWRtaW5pc3RyYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRydWdFbmZvcmNlbWVudEFkbWluaXN0cmF0aW9uT3JkZXJCbGFua051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJ1Z0Zvcm11bGFyeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVuQW5kQnJhZHN0cmVldENhbmFkYXM4RGlnaXRTdGFuZGFyZEluZHVzdHJpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1bkFuZEJyYWRzdHJlZXRVUzhEaWdpdFN0YW5kYXJkSW5kdXN0cmlhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRFVOU051bWJlcndpdGhGb3VyQ2hhcmFjdGVyU3VmZml4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEVU5TTnVtYmVyRHVuQW5kQnJhZHN0cmVldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVwbGljYXRlQmlsbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVwbGljYXRlV2F5YmlsbGluUm91dGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1cGxpY2F0ZVdheWJpbGxOb3RJblJvdXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEdXR5RnJlZVByb2R1Y3RzUmVjZWlwdEF1dGhvcmlzYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1dHlGcmVlUHJvZHVjdHNTZWN1cml0eU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHV0eU1lbW9OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR5ZUxvdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRUNDTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWR1Y2F0aW9uYWxJbnN0aXR1dGlvbklkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGVjdGlvbkRpc3RyaWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGVjdHJvbmljRGF0YUludGVyY2hhbmdlQWdyZWVtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGVjdHJvbmljZGV2aWNlcGlubnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGVjdHJvbmljRnVuZHNUcmFuc2ZlcklETnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGVjdHJvbmljUGF5bWVudFJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWxldmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbWJhcmdvTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbWJhcmdvUGVybWl0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbWVyZ2VuY3lPcmRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1pc3Npb25EZXNpZ25hdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llZU9yTm9uRW1wbG95ZWVDbGFzc2lmaWNhdGlvblF1YWxpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWVJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWVUYXhGaWxpbmdTdGF0dXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llcklkZW50aWZpY2F0aW9uTnVtYmVyT2ZTZXJ2aWNlQnVyZWF1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llcnNJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZXJzU29jaWFsU2VjdXJpdHlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveW1lbnRWaXNhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXB0eUNvbnRhaW5lckJpbGxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcHR5UmVwb3NpdGlvbmluZ051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kaW5nSm9iU2VxdWVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZGluZ0thbmJhblNlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kaW5nTWV0ZXJSZWFkaW5nQWN0dWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmRpbmdNZXRlclJlYWRpbmdFc3RpbWF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZGluZ1BhY2thZ2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZGluZ1NlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kSXRlbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kSXRlbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kTWlsZU1hcmtlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kb3JzZW1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZFVzZUF1dGhvcml6YXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZFVzZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kVXNlcnNQdXJjaGFzZU9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmdpbmVlcmluZ0NoYW5nZU9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmdpbmVlcmluZ0NoYW5nZVByb3Bvc2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmdpbmVlcmluZ0RhdGFMaXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmdpbmVlcmluZ1NwZWNpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVucXVpcnlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVudHJ5UG9pbnRBc3Nlc3NtZW50TG9nTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbnRyeVBvaW50QXNzZXNzbWVudExvZ051bWJlckNoaWxkRG1yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbnRyeVBvaW50QXNzZXNzbWVudExvZ051bWJlclBhcmVudERtciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW52aXJvbm1lbnRhbFByb3RlY3Rpb25BZ2VuY3lBY3F1aXNpdGlvblJlZ3VsYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVudmlyb25tZW50YWxQcm90ZWN0aW9uQWdlbmN5VGVzdFR5cGVQdXJwb3NlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW52aXJvbm1lbnRhbFByb3RlY3Rpb25BZ2VuY3lUcmFuc3BvcnRlcklkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVpcG1lbnRJbml0aWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVpcG1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWlwbWVudE93bmVyUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVpcG1lbnRTZXF1ZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50VHJhbnNwb3J0Q2hhcmdlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVpdmFsZW50Q291cnNlTnVtYmVyYXRSZXF1ZXN0aW5nSW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVycm9ySWRlbnRpZmljYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc2Nyb3dGaWxlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXN0aW1hdGVPcmRlclJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXN0aW1hdGVTZXF1ZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXRlcm1zUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFdXIxQ2VydGlmaWNhdGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV2ZW50UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGNlc3NUcmFuc3BvcnRhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhoaWJpdERpc3RyaWJ1dGlvbkxpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4aGliaXRJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBhbnNpb25vbkVmZmVjdG9mQ2hhbmdlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBvcnRDbGVhcmFuY2VJbnN0cnVjdGlvblJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwb3J0RGVjbGFyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cG9ydGVyc1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwb3J0RXN0YWJsaXNobWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwb3J0TGljZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwb3J0UGVybWl0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBvcnRSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4dGVuZGVkT3JFeGhpYml0TGluZUl0ZW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhY2lsaXR5Q2VydGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFjaWxpdHlJRE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFjaWxpdHlNZWFzdXJlbWVudFBvaW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGYWNpbGl0eU5ldHdvcmtJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFpbHVyZUFuYWx5c2lzUmVwb3J0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGYWlsdXJlbWVjaGFuaXNtbnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGYW1pbHlNZW1iZXJJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFtaWx5VW5pdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFubmllTWFlU2VsbGVyU2VydmljZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxBY3F1aXNpdGlvblJlZ3VsYXRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsQnVyZWF1T2ZJbnZlc3RpZ2F0aW9uSW5kaXZpZHVhbElkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsQ29tbXVuaWNhdGlvbnNDb21taXNzaW9uQ29uZGl0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbENvbW11bmljYXRpb25zQ29tbWlzc2lvbklkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxDb21tdW5pY2F0aW9uc0NvbW1pc3Npb25UcmFkZU9yQnJhbmRJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsRW5lcmd5UmVndWxhdG9yeUNvbW1pc3Npb25DZXJ0aWZpY2F0ZU9mUHVibGljQ29udmVuaWVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZITE1DRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbEhvbWVMb2FuTW9ydGdhZ2VDb3Jwb3JhdGlvbkxvYW5OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxIb3VzaW5nQWRtaW5pc3RyYXRpb25DYXNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDSFVNUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbEhvdXNpbmdBZG1pbmlzdHJhdGlvbk9yaWdpbmF0b3JJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbEluZm9ybWF0aW9uUmVzb3VyY2VzTWFuYWdlbWVudFJlZ3VsYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxNYXJpdGltZUNvbW1pc3Npb25Gb3J3YXJkZXJzTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsTWFyaXRpbWVDb21taXNzaW9uVGFyaWZmTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsTmF0aW9uYWxNb3J0Z2FnZUFzc29jaWF0aW9uTG9hbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbFJlZ3VsYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxTdXBwbHlDbGFzc2lmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxTdXBwbHlTY2hlZHVsZUl0ZW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxTdXBwbHlTY2hlZHVsZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbFRheHBheWVyc0lkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsV2lyZVRyYW5zZmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGRURXSVJFQ29uZmlybWF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWVTY2hlZHVsZUlkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpZWxkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaWxlQ29udmVyc2lvbkpvdXJuYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbGVJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlsZUlkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbGVMaW5lSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlsZXJDb2RlSXNzdWVkYnlCdXJlYXVPZkNlbnN1cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlsZXJDb2RlSXNzdWVkQnlDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaWxlVHJhbnNmZXJGb3JtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaWxlVHJhbnNmZXJQcm90b2NvbExvY2F0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbGVWZXJzaW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaWxtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbFNlcXVlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbFdvcmtDYW5kaWRhdGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFuY2lhbENsYXNzaWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsRGV0YWlsQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsTWFuYWdlbWVudFJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsUGhhc2VSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFuY2lhbFNldHRsZW1lbnRQYXJ0eXNSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFuY2lhbFRyYW5zYWN0aW9uUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5kZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmVMaW5lQ2xhc3NpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmlzaExvdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlyc3RUcmFuc2Zlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlzY2FsQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlzY2FsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGVldFJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxleGlibGVTcGVuZGluZ0FjY291bnRJbnN1cmFuY2VBY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGV4aWJsZVNwZW5kaW5nQWNjb3VudEluc3VyYW5jZVBvbGljeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxvb2REYXRhSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxvb2Rab25lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbG9vck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxvb3JQbGFuQXBwcm92YWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZsb3dSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvbGRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9vZEFuZERydWdBZG1pbmlzdHJhdGlvbkFjY2Vzc2lvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9vZEFuZERydWdBZG1pbmlzdHJhdGlvblByb2R1Y3RDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb29kQW5kRHJ1Z0FkbWluaXN0cmF0aW9uUHJvZHVjdFR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVjbG9zaW5nU3RhdHVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JlY2xvc3VyZUFjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVpZ25FeGNoYW5nZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWlnbkV4Y2hhbmdlQ29udHJhY3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVpZ25NaWxpdGFyeVNhbGVzQ2FzZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWlnbk1pbGl0YXJ5U2FsZXNOb3RpY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVpZ25NaWxpdGFyeVNhbGVzTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JlaWduVHJhZGVab25lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3Jlc3RyeVBlcm1pdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9ybWFsU3RhdGVtZW50UmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JtYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcm1hdGlvbklkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcm1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvclBpY2t1cExpbWl0ZWRGcmVpZ2h0VGFyaWZmTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3J3YXJkZXJzT3JBZ2VudHNSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcndhcmRpbmdPcmRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJhbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyYW5jaGlzZVRheEFjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWRkaWVNYWNTZWxsZXJTZXJ2aWNlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZVpvbmVJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVpZ2h0QmlsbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlaWdodEZvcndhcmRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlaWdodEZvcndhcmRlcnNSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWlnaHRQYXlvclJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnVsbFRpbWVPclBhcnRUaW1lRW1wbG95ZWVDbGFzc2lmaWNhdGlvblF1YWxpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnVuY3Rpb25hbENhdGVnb3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdW5jdGlvbmFsV29ya0dyb3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdW5kQ29kZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnVuZElkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdW5kTWFuYWdlcnNSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1bmRzQXV0aG9yaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FzQW5hbHlzaXNTb3VyY2VNZXRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FzQ3VzdG9kaWFuSWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdhdWdlVGlja2V0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW5lcmFsQWdlbmN5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW5lcmFsQ2FyZ29Db25zaWdubWVudFJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VuZXJhbERlY2xhcmF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW5lcmFsTGVkZ2VyQWNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VuZXJhbE9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW5lcmFsUHVycG9zZU1lc3NhZ2VSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdlbmVyYWxTZXJ2aWNlc0FkbWluaXN0cmF0aW9uUmVndWxhdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdlb2dyYXBoaWNEZXN0aW5hdGlvblpvbmVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdlb2dyYXBoaWNJbmRleCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VvZ3JhcGhpY0tleSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VvZ3JhcGhpY051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VvZ3JhcGhpY1Njb3JlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHaW5uaWVNYWVQb29sUGFja2FnZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZHNBbmRTZXJ2aWNlc1RheElkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb29kc2FuZFNlcnZpY2VUYXhSZWdpc3RyYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdvb2RzRGVjbGFyYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdvdmVybmluZ0NsYXNzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJubWVudEFjY291bnRpbmdDbGFzc1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJubWVudEFkdmFuY2VQcm9ncmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJubWVudEFnZW5jeVJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJubWVudEJpbGxPZkxhZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJubWVudEJpbGxvZkxhZGluZ09mZmljZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdvdmVybm1lbnRDb250cmFjdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJubWVudFByaW9yaXR5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb3Zlcm5tZW50UXVhbGl0eUFzc3VyYW5jZUFuZENvbnRyb2xMZXZlbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJubWVudFJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJubWVudFJlZ2lzdHJhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJubWVudFRyYW5zcG9ydGF0aW9uUmVxdWVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JhaW5CbG9ja051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JhaW5PcmRlclJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3Jhdml0eVNvdXJjZU1ldGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmVlbkNhcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3VwQWNjb3VudGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JvdXBOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3VwT3JQb2xpY3lOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3VwV29ya0NhbmRpZGF0ZVNlcXVlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcm93dGhGYWN0b3JSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikd1YXJhbnRvckxvYW5OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikd1YXJhbnRvclVzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGFybW9uaXNlZFN5c3RlbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGFybW9uaXplZENvZGVTeXN0ZW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikhhc3RlbmluZ051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGF6YXJkb3VzQ2VydGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGF6YXJkb3VzRXhlbXB0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYXphcmRvdXNXYXN0ZU1hbmlmZXN0RG9jdW1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYWx0aENhcmVGaW5hbmNpbmdBZG1pbmlzdHJhdGlvbk5hdGlvbmFsUGF5ZXJJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhbHRoQ2FyZUZpbmFuY2luZ0FkbWluaXN0cmF0aW9uTmF0aW9uYWxQcm92aWRlcklkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYWx0aGNhcmVNYW5wb3dlclNob3J0YWdlQXJlYUZhY2lsaXR5SWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYWx0aENlcnRpZmljYXRlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJISUJDQ0xhYmVsZXJJZGVudGlmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYWx0aEluZHVzdHJ5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFsdGhJbnN1cmFuY2VBY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFsdGhJbnN1cmFuY2VDbGFpbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhbHRoSW5zdXJhbmNlUG9saWN5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFsdGhJbnN1cmFuY2VSYXRpbmdBY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFsdGhJbnN1cmFuY2VSYXRpbmdTdWZmaXhDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFsdGhNYWludGVuYW5jZU9yZ2FuaXphdGlvblJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhbHRoTWFpbnRlbmFuY2VPcmdhbml6YXRpb25BdXRob3JpemF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFsdGhNYWludGVuYW5jZU9yZ2FuaXphdGlvbkNvZGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYXRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIaWdoT3JXaWRlRmlsZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGlnaEZhYnJpY2F0aW9uQXV0aG9yaXphdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGlnaFJhd01hdGVyaWFsQXV0aG9yaXphdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9tZU1vcnRnYWdlRGlzY2xvc3VyZUFjdENlbnN1c1RyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb21lTW9ydGdhZ2VEaXNjbG9zdXJlQWN0QmxvY2tOdW1iZXJBcmVhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb21lTW9ydGdhZ2VEaXNjbG9zdXJlQWN0Q291bnR5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9tZU1vcnRnYWdlRGlzY2xvc3VyZUFjdE1ldHJvcG9saXRhblN0YXRpc3RpY2FsQXJlYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9tZU1vcnRnYWdlRGlzY2xvc3VyZUFjdFN0YXRlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9yaXpvbnRhbENvb3JkaW5hdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvcnNlcG93ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvdFJvbGxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvdXNlQmlsbE9mTGFkaW5nTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3VzZVdheWJpbGxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklhdGFDYXJnb0FnZW50Q2Fzc0FkZHJlc3NOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklhdGFDYXJnb0FnZW50Q29kZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSUNEOUNNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJZGVudGlmaWNhdGlvbkNhcmRTZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklkZW50aXR5Q2FyZE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW1hZ2VJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbW1lZGlhdGVFeHBvcnRhdGlvbk5vRm9ySW5Cb25kTW92ZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkltbWVkaWF0ZVRyYW5zcG9ydGF0aW9uTm9Gb3JJbkJvbmRNb3ZlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW1wbGVtZW50YXRpb25WZXJzaW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXBvcnRDbGVhcmFuY2VJbnN0cnVjdGlvblJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW1wb3J0ZXJSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkltcG9ydGVyc1JlZmVyZW5jZU51bWJlclRvTGV0dGVyT2ZDcmVkaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkltcG9ydExpY2VuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkltcG9ydFBlcm1pdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW1wdXRhdGlvbkFjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluQm9uZE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5ib3VuZFRvT3JPdXRib3VuZEZyb21QYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5ib3VuZFRvUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluY2lkZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmNvcnBvcmF0ZWRMZWdhbFJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5kaXZpZHVhbFRyYW5zYWN0aW9uUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbml0aWFsRGVhbGVyQ2xhaW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluaXRpYWxGYWlsdXJlQ2xhaW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluaXRpYWxTYW1wbGVJbnNwZWN0aW9uUmVwb3J0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbml0aWFsVHJvdWJsZUluZGljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklubGFuZFRyYW5zcG9ydE9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnF1aXJ5UmVxdWVzdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zcGVjdGlvbmFuZFN1cnZleVNlcXVlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnNwZWN0aW9uUmVwb3J0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnNwZWN0b3JJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdGl0dXRlT2ZTZWN1cml0eUFuZEZ1dHVyZU1hcmtldERldmVsb3BtZW50U2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN0aXR1dGlvbkxvYW5OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3RpdHV0aW9uTm90ZUhvbGRlcklkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN0aXR1dGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJhbmNlQ2VydGlmaWNhdGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyYW5jZUNlcnRpZmljYXRlUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmFuY2VDb250cmFjdFJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJhbmNlTGljZW5zZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJhbmNlUG9saWN5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmVkTG9jYXRpb25JZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmVkUGFyY2VsUG9zdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJlZHNMb2FuTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmVyQXNzaWduZWRSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3Vyb3JQb29sSWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVncmF0ZWRMb2dpc3RpY1N1cHBvcnRDcm9zc1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZWdyYXRlZE1hc3RlclBsYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVncmF0ZWRNYXN0ZXJTY2hlZHVsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJjaGFuZ2VBZ3JlZW1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVyY2hhbmdlTnVtYmVyTmV3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcmNoYW5nZU51bWJlck9sZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJjaGFuZ2VUcmFpbklkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcmdvdmVybm1lbnRhbE1hcml0aW1lT3JnYW5pemF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcmltRnVuZGluZ09yZ2FuaXphdGlvbkxvYW5OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybWVkaWFyeUJyb2tlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJuYWxDb250cm9sTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm5hbEN1c3RvbWVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm5hbERhdGFQcm9jZXNzTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm5hbE9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm5hbFB1cmNoYXNlT3JkZXJJdGVtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm5hbFB1cmNoYXNlT3JkZXJSZWxlYXNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm5hbFZlbmRvck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJuYXRpb25hbEFzc2Vzc21lbnRMb2dOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmF0aW9uYWxBc3Nlc3NtZW50TG9nTnVtYmVyQ2hpbGREYXRhTWFpbnRlbmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmF0aW9uYWxBc3Nlc3NtZW50TG9nTnVtYmVyUGFyZW50RGF0YU1haW50ZW5hbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm5hdGlvbmFsRmxpZ2h0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm5hdGlvbmFsRnVlbFRheEFncmVlbWVudEFjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmF0aW9uYWxSZWdpc3RyYXRpb25QbGFuQWNjb3VudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJuYXRpb25hbFJlZ2lzdHJhdGlvblBsYW5TdGlja2VyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm5hdGlvbmFsU3RhbmRhcmRJbmR1c3RyaWFsQ2xhc3NpZmljYXRpb25Eb21pbmlvbk9mQ2FuYWRhQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJuYXRpb25hbFN0YW5kYXJkSW5kdXN0cnlDbGFzc2lmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVyc3RhdGVDb21tZXJjZUNvbW1pc3Npb25BY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcnZpZXdlcklEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRyYVBsYW50Um91dGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52ZW50b3J5UmVwb3J0UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlc3RpZ2F0b3JpYWxOZXdEcnVnTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlc3RtZW50UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlc3RvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52ZXN0b3JBc3NpZ25lZElkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlc3RvckxvYW5OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVzdG9yTm90ZUhvbGRlcklkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZvaWNlSWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikludm9pY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikludm9pY2VOdW1iZXJTdWZmaXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikludm9pY2luZ0RhdGFTaGVldFJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXJvbkNoYXJnZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVNGTUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Iklzc3VlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJc3N1ZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Iklzc3VpbmdCYW5rc1JlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXRlbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSm9iT3JQcm9qZWN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKb2JPcmRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSm9iU2VxdWVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkpvaW50Q3JlZGl0U3BlY2lmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSm9pbnRseUFkbWluaXN0ZXJlZENhc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkpvaW50VmVudHVyZVJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSnVkZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikp1ZGdtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKdWRpY2lhbERpc3RyaWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKdWRpY2lhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSnVyaXNkaWN0aW9uYWxDb21tdW5pdHlOYW1lSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSnVyaXNkaWN0aW9uYWxDb21tdW5pdHlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm9yYXRvcnlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm9yYXRvcnlSZWdpc3RyYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm9yT3BlcmF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJvcm9yQWZmaWxpYXRpb25JZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFuZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdFRyYW5zZmVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXRpdHVkZUV4cHJlc3NlZGluRGVncmVlc01pbnV0ZXNhbmRTZWNvbmRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXRpdHVkZUV4cHJlc3NlZGluU2Vjb25kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhZENhc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlYXNlQWdyZWVtZW50QW1lbmRtZW50TnVtYmVyTWFzdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWFzZUNvbnRyYWN0UmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWFzZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhc2VSaWRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhc2VTY2hlZHVsZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhc2VTY2hlZHVsZU51bWJlckJsYW5rZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlYXNlU2NoZWR1bGVOdW1iZXJQcmlvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhc2VTY2hlZHVsZU51bWJlclJlcGxhY2VtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZW5kZXJBY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZW5kZXJDYXNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZW5kZXJFbnRpdHlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlbmRlclVzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVzc2VlQmlsbENvZGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxlc3NlZUlkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZXR0ZXJvZkNyZWRpdERyYWZ0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZXR0ZXJPZkNyZWRpdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGV0dGVyb2ZDcmVkaXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxldHRlcnNvck5vdGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZXZ5aW5nT2ZmaWNlcklkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWNlbnNlUGxhdGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpZmVJbnN1cmFuY2VCaWxsaW5nQWNjb3VudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlmZUluc3VyYW5jZUJpbGxpbmdTdWZmaXhDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWZlSW5zdXJhbmNlUG9saWN5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaW1pdGVkUGFydG5lcnNoaXBJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGluZUl0ZW1Db250cm9sTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaW5lSXRlbUlkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpbmVJdGVtUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaW5lb2ZCdXNpbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGluZU9mQ3JlZGl0Q2F0ZWdvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpbmtTZXF1ZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlzdEJpbGxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxpc3RPZk1hdGVyaWFscyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGxveWRzQ2xhaW1zT2ZmaWNlUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2FkaW5nQXV0aG9yaXphdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hZExpbmVDZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hZFBsYW5uaW5nTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2FuQWNxdWlzaXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYW5GZWF0dXJlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hblByb3NwZWN0b3JLZXlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYW5SZXF1ZXN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2FuVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYWxKdXJpc2RpY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2FsbHlBc3NpZ25lZENvbnRyb2xOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2FsTWVkaWFJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhbFNjaG9vbENvdXJzZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYWxTY2hvb2xEaXN0cmljdENvdXJzZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYWxTdHVkZW50SWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2F0aW9uRXhjZXB0aW9uT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhdGlvbm9uUHJvZHVjdENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2F0aW9uU3BlY2lmaWNTZXJ2aWNlc1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYXRpb25XaXRoaW5FcXVpcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2tib3giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9naWNhbE9ic2VydmF0aW9uSWRlbnRpZmllck5hbWVzYW5kQ29kZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvZ2lzdGljc1N1cHBvcnREb2N1bWVudGF0aW9uVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvbmdpdHVkZUV4cHJlc3NlZEluRGVncmVlc01pbnV0ZXNhbmRTZWNvbmRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb25naXR1ZGVFeHByZXNzZWRpblNlY29uZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvbmdUZXJtRGlzYWJpbGl0eVBvbGljeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9zc09yRXZlbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxvc3NSZXBvcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG93ZXJBcnRpY2xlTnVtYmVyT2ZSYW5nZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFnYXppbmVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWlsYm94Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWlsaW5nUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWlsU2xvdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFpbnRlbmFuY2VBdmFpbGFiaWxpdHlUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWludGVuYW5jZVJlcXVlc3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1ham9yRm9yY2VQcm9ncmFtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWpvclN5c3RlbUFmZmVjdGVkQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFrZWdvb2RDb21tZXJjaWFsTGluZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFtbW9ncmFwaHlDZXJ0aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW5hZ2VkQ2FyZU9yZ2FuaXphdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbmFnZWRDYXJlT3JnYW5pemF0aW9uSWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbmlmZXN0S2V5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW51YWxQcm9jZXNzaW5nQXV0aG9yaXR5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW51ZmFjdHVyZXJEZWZpbmVkUmVwYWlyUmF0ZXNSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbnVmYWN0dXJlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFudWZhY3R1cmVyc01hdGVyaWFsU2FmZXR5RGF0YVNoZWV0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW51ZmFjdHVyZXJzUGFydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFudWZhY3R1cmluZ0RpcmVjdGl2ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFudWZhY3R1cmluZ09wZXJhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFudWZhY3R1cmluZ09yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXBOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcFJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFyaXRpbWVEZWNsYXJhdGlvbm9mSGVhbHRoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXJrZXRBcmVhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXJraW5nT3JMYWJlbFJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFzdGVyQWNjb3VudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFzdGVyQWlyV2F5YmlsbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFzdGVyQmlsbE9mTGFkaW5nTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXN0ZXJDb250cmFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFzdGVyTGFiZWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hc3RlckxlYXNlQWdyZWVtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXN0ZXJQb2xpY3lOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hc3RlclByb3BlcnR5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXN0ZXJSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hc3RlclNvbGljaXRhdGlvblByb2NlZHVyZXNUZXJtc0FuZENvbmRpdGlvbnNOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFsQ2hhbmdlTm90aWNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXRlcmlhbFN0b3JhZ2VMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0dXJlZENlcnRpZmljYXRlT2ZEZXBvc2l0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWF0UHJvY2Vzc2luZ0VzdGFibGlzaG1lbnRSZWdpc3RyYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYWlkUHJvdmlkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYWlkUmVjaXBpZW50SWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYWxBc3Npc3RhbmNlQ2F0ZWdvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYWxSZWNvcmRJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaWNhcmVQcm92aWRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaWNhcmVWZXJzaW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVtYmVySWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lbWJlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVyY2hhbmRpc2VUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVyY2hhbnRDYXRlZ29yeUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lc3NhZ2VBZGRyZXNzb3JJRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVzc2FnZUJhdGNoTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXNzYWdlRGVzaWduR3JvdXBOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lc3NhZ2VSZWNpcGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lc3NhZ2VTZW5kZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1ldGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXRlclByb3ZpbmdSZXBvcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1ldGVyUmVhZGluZ0F0VGhlQmVnaW5uaW5nT2ZUaGVEZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWV0ZXJSZWFkaW5nQXRUaGVFbmRPZkRlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXRlclRpY2tldE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWV0ZXJVbml0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNSUNSTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaWNyb2ZpbG1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pZ3JhbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbGVzdG9uZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlsaXRhcnlDYWxsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaWxpdGFyeUlEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaWxpdGFyeUludGVyZGVwYXJ0bWVudGFsUHVyY2hhc2VSZXF1ZXN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaWxpdGFyeU9yZG5hbmNlU2VjdXJpdHlSaXNrTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaWxpdGFyeVJhbmtPckNpdmlsaWFuUGF5R3JhZGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbGl0YXJ5U3BlY2lmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlsaXRhcnlTdGFuZGFyZE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlsbGluZ2luVHJhbnNpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlsbE9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaW5pbXVtUm95YWx0eVBheW9ySWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmlzdGVyaWFsQ2VydGlmaWNhdGVPZkhvbW9sb2dhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9kZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vZGVsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb2RlbHllYXJudW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1PUk5FVFBsdXNDYXNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNT1JORVRQbHVzSW5zdGl0dXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1PUk5FVFBsdXNVc2VySWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vcnRnYWdlQmFja2VkU2VjdXJpdHlMb2FuTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3J0Z2FnZUJhY2tlZFNlY3VyaXR5UG9vbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9ydGdhZ2VFbGVjdHJvbmljUmVnaXN0cmF0aW9uU3lzdGVtT3JnYW5pemF0aW9uSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9ydGdhZ2VlTG9hbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9ydGdhZ2VJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9ydGdhZ2VJbnN1cmFuY2VDb21wYW55TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3J0Z2FnZUluc3VyYW5jZUluZGljYXRvck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9ydGdhZ2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vdG9yQ2FycmllcklkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3RvckZ1ZWxDZXJ0aWZpY2F0ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW90b3JWZWhpY2xlSUROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik11bHRpZmFtaWx5UHJvamVjdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTXVsdGlwbGVMaXN0aW5nTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNdWx0aXBsZUxpc3RpbmdTZXJ2aWNlQXJlYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTXVsdGlwbGVMaXN0aW5nU2VydmljZUJvb2tUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNdWx0aXBsZUxpc3RpbmdTZXJ2aWNlTWFwWENvb3JkaW5hdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik11bHRpcGxlTGlzdGluZ1NlcnZpY2VNYXBZQ29vcmRpbmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTXVsdGlwbGVMaXN0aW5nU2VydmljZVN1YkFyZWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik11bHRpcGxlUE9PZkFuSW52b2ljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTXVsdGlwbGVab25lT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik11bmljaXBhbGl0eUFzc2lnbmVkQnVzaW5lc3NSZWdpc3RyeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkFDRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkFGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYW1lZEJhbmtzUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbEFlcm9uYXV0aWNzYW5kU3BhY2VBZG1pbmlzdHJhdGlvbkZBUlN1cHBsZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsQXNzb2NpYXRpb25PZkJvYXJkc09mUGhhcm1hY3lOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsQXNzb2NpYXRpb25PZkluc3VyYW5jZUNvbW1pc3Npb25lcnNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbEJ1c2luZXNzSWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsQ3JpbWluYWxJbmZvcm1hdGlvbkNlbnRlck9yaWdpbmF0aW5nQWdlbmN5SWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsRmxvb2RJbnN1cmFuY2VQcm9ncmFtQ29tbXVuaXR5TmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxGbG9vZEluc3VyYW5jZVByb2dyYW1Db21tdW5pdHlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsRmxvb2RJbnN1cmFuY2VQcm9ncmFtQ291bnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbEZsb29kSW5zdXJhbmNlUHJvZ3JhbU1hcE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxGbG9vZEluc3VyYW5jZVByb2dyYW1TdGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxHb3Zlcm5tZW50QnVzaW5lc3NJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxQcm9wZXJ0eVJlZ2lzdHJ5U3lzdGVtTGV2ZWwxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbFByb3BlcnR5UmVnaXN0cnlTeXN0ZW1MZXZlbDIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsUHJvcGVydHlSZWdpc3RyeVN5c3RlbUxldmVsMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxTdG9ja051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0dXJhbEdhc1BvbGljeUFjdENhdGVnb3J5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV3RHJ1Z0FwcGxpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXdIZWFsdGhJbnN1cmFuY2VDbGFpbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV3UGFydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV4dFJlbnRhbEFncmVlbWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV4dFJlbnRhbEFncmVlbWVudFJlYXNvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV4dFNoaXBtZW50SWRlbnRpZmljYXRpb25OdW1iZXJDb250aW51b3VzTW92ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTklUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb21pbmF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25BbWVyaWNhbklkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25Db25mb3JtYW5jZVJlcG9ydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uTmVnb3RpYWJsZU1hcml0aW1lVHJhbnNwb3J0RG9jdW1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbk9yaWdpbmF0aW5nVGhpcmRQYXJ0eU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uUGlja3VwTGltaXRlZFRhcmlmZk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uUHJvdmlzaW9uYWxQYXRlbnRBcHBsaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uU3BvdXNlVGllIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb09UNUF1dGhvcml0eVplcm9NaWxlYWdlUmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9ydGhBbWVyaWNhbkRhdHVtU3RhbmRhcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vcnRoQW1lcmljYW5GcmVlVHJhZGVBZ3JlZW1lbnRDb21wbGlhbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3J0aEFtZXJpY2FuSGF6YXJkb3VzQ2xhc3NpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vcnRoQW1lcmljYW5IYXphcmRvdXNHb29kc0NsYXNzaWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3J0aEFtZXJpY2FuSW5kdXN0cmlhbENsYXNzaWZpY2F0aW9uU3lzdGVtQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTk9USUNPTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZUZW1wb3JhcnlJbXBvcnRhdGlvbkRvY3VtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1lcm9kZUNlZHVsYWRlSWRlbnRpZGFkTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1lcm9kZUlkZW50aWZpY2FjaW9uVHJpYnV0YXJpYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2JqZWN0SWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2NjdXBhdGlvbmFsU2FmZXR5YW5kSGVhbHRoQWRtaW5pc3RyYXRpb25DbGFpbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2NjdXBhdGlvbkNsYXNzaWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2NjdXBhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9jZWFuQmlsbG9mTGFkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPY2VhbkNvbnRhaW5lck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2NlYW5NYW5pZmVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2ZmZW5kZXJUcmFja2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2ZmZW5zZVRyYWNraW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZlckdyb3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2ZmaWNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZpY2VyTGljZW5zZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2ZmaWNlU3ltYm9sIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbGRBY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbGRNZXRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2xkUGFydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25lQ2FsbEFnZW5jeVRpY2tldE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25saW5lUHJvY3VyZW1lbnRhbmRBY2NvdW50aW5nQ29udHJvbFRyYW5zYWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVuYW5kUHJlcGFpZFN0YXRpb25MaXN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVyYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wZXJhdG9yQXNzaWduZWRVbml0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVyYXRvcklkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVyYXRvckxlYXNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcHRpb25Qb2xpY3lOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yZGVyT3JQYXJhZ3JhcGhOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yZGVyaW5nQ3VzdG9tZXJDb25zaWdubWVudFJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JkZXJpbmdDdXN0b21lcnNTZWNvbmRSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdXJjaGFzZU9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZW5kb3JPcmRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JnYW5pemF0aW9uQnJlYWtkb3duU3RydWN0dXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbENlcnRpZmljYXRlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbEZkb1RyYW5zYWN0aW9uUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbEZpbGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luYWxGaWxpbmdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsSW52b2ljZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luYWxQdXJjaGFzZU9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbFJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luYWxSZXR1cm5SZXF1ZXN0UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbFNoaXBwZXJzQmlsbE9mTGFkaW5nTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbFN1Ym1pdHRlckNoaWxkRGF0YU1haW50ZW5hbmNlUmVxdWVzdExvZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luYWxTdWJtaXR0ZXJMb2dOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsU3VibWl0dGVyUGFyZW50RGF0YU1haW50ZW5hbmNlUmVxdWVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luYWxVbmlmb3JtQ29tbWVyY2lhbENvZGVGaWxpbmdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsVm91Y2hlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luYXRpbmdDYXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hdGluZ0NvbXBhbnlJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hdGluZ0RlcG9zaXRvcnlGaW5hbmNpYWxJbnN0aXR1dGlvbklkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmF0b3JzUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5Ib3VzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luT2ZTaGlwbWVudEhhcm1vbml6ZWRCYXNlZENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9UNUF1dGhvcml0eUNvbmRpdGlvbk9yUmVzdHJpY3Rpb25vbkNhckhpcmVSYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlclVubGlzdGVkVHlwZU9mUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdXRib3VuZEZyb21QYXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0ZXJDb250aW5lbnRhbFNoZWxmQXJlYUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik91dGVyQ29udGluZW50YWxTaGVsZkJsb2NrTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdXRlcnBhY2thZ2luZ1VuaXRJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0bGV0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdXRvZlNlcnZpY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik93bmluZ0J1cmVhdUlkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNrQW5kSG9sZEludm9pY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhY2thZ2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhY2thZ2luZ0dyb3VwTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNrYWdpbmdTcGVjaWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNrYWdpbmdVbml0SWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhY2tlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFja2V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNraW5nR3JvdXBDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNraW5nTGlzdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFja2luZ1BsYW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWdlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJhZ3JhcGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcmFncmFwaE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFyYW1lZGljYWxJRE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFyZW50RmlsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydENhdXNpbmdSZXBhaXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnRDb25zaWdubWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydGlhbFBheW1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnRpY2lwYXRpbmdBcmVhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0SW50ZXJjaGFuZ2VhYmlsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0UmVmZXJlbmNlSW5kaWNhdG9ySW5BRHJhd2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydHlJbmZvcm1hdGlvbk1lc3NhZ2VSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnR5U2VxdWVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhc3Nwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXNzcG9ydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF0ZW50Q29vcGVyYXRpb25UcmVhdHlBcHBsaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF0ZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXRlbnRUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXRpZW50QWNjb3VudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF0cm9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXllZUlkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXllZUxvYW5OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheWVlc0ZpbmFuY2lhbEluc3RpdHV0aW9uQWNjb3VudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5ZWVzRmluYW5jaWFsSW5zdGl0dXRpb25UcmFuc2l0Um91dGluZ05vIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXllZXNSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheWVyQXNzaWduZWRSZXN1Ym1pc3Npb25SZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheWVyQ2F0ZWdvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheWVySWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheWVyc0ZpbmFuY2lhbEluc3RpdHV0aW9uQWNjb3VudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5ZXJzRmluYW5jaWFsSW5zdGl0dXRpb25UcmFuc2l0Um91dGluZ05vIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXllcnNSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheUdyYWRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50Q2F0ZWdvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRIaXN0b3J5UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50SW5BZHZhbmNlUmVxdWVzdFJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudEluc3RhbG1lbnRSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudE9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50UGxhblJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudFJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudFZhbHVhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5b3JzQ2xhaW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheXJvbGxBY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXlyb2xsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQY3NDYXRhc3Ryb3BoZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVlclJldmlld09yZ2FuaXphdGlvbkFwcHJvdmFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZW5kaW5nQ2FzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVuc2lvbkNvbnRyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJpb2RpY2l0eUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcm1pdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyc29uYWxJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyc29uYWxJZGVudGl0eUNhcmROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcnNvbmFsSUROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBldHJvbGV1bVBvb2xDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaGFybWFjeVByZXNjcmlwdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGhvbmVDYWxscyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGh5c2ljYWxJbnZlbnRvcnlSZWNvdW50UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWNrdXBSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpY3R1cmVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpY3R1cmVPZkFjdHVhbFByb2R1Y3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpY3R1cmVPZkFHZW5lcmljUHJvZHVjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGllck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlnZ3liYWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWxvdExpY2Vuc2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpcGVsaW5lTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFuTmV0d29ya0lkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFubmluZ1BhY2thZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW5OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGF0ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhdGZvcm1JZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxvdEZpbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsdWdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvbGljeUZvcm1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvbGljeUxpbmtOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvbGljeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9saWN5VHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9sbHV0YW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb29sQ29udHJhY3RDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb29sTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb29sU3VmZml4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3NpdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvc3RFbnRyeVJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlQXdhcmRTdXJ2ZXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWNpbmN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVkZWNlc3NvckFjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWRldGVybWluYXRpb25vZkJlbmVmaXRzSWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWZlcnJlZENhbGxTaWduIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVmZXJyZWRQcm92aWRlck9yZ2FuaXphdGlvbkF1dGhvcml6YXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWZlcnJlZFByb3ZpZGVyT3JnYW5pemF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVmZXJyZWRQcm92aWRlck9yZ2FuaXphdGlvblNpdGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWxpbWluYXJ5V29ya0NhbmRpZGF0ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlbWFya2V0QXBwbGljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZW1hcmtldE5vdGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlbWl1bUF1ZGl0UHJpb3JpdHlJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVtaXVtQXVkaXRQdXJwb3NlSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlbWl1bUF1ZGl0VHlwZUlkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZW1pdW1SYXRlVGFibGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXBhcmVyc1ZlcmlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc2VudGluZ0JhbmtzUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVzc0Zvcm1JZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVzc0lkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzQmlsbG9mTGFkaW5nTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c0NhcmdvQ29udHJvbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNDbGFpbUhpc3RvcnlJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c0NvbnRyYWN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c0NvdXJzZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNDcmVkaXRPckRlYml0QWRqdXN0bWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNDcmVkaXRBZHZpY2VSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzQ3VzdG9tZXJSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzRGVsaXZlcnlJbnN0cnVjdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNEZWxpdmVyeVNjaGVkdWxlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c0Rpc3RyaWJ1dG9yTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c0RyaXZlcnNMaWNlbnNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c0RydWdFbmZvcmNlbWVudEFkbWluaXN0cmF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c0hpZ2hlc3RTY2hlZHVsZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNJbnZvaWNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c2x5UmVwb3J0ZWRTb2NpYWxTZWN1cml0eU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNNZW1iZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzUG9saWN5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c1JlbnRhbEFncmVlbWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNSZXBvcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzUmVxdWVzdEZvck1ldGVyZWRSZWFkaW5nUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c1NjaGVtZU9yUGxhbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNTZXF1ZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNTaGlwbWVudElkZW50aWZpY2F0aW9uTnVtYmVyQ29udGludW91c01vdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzVGF4Q29udHJvbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNUaWNrZXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaWNlT3JTYWxlc0NhdGFsb2d1ZVJlc3BvbnNlUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmljZUFyZWFOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaWNlTGlzdENoYW5nZW9ySXNzdWVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaWNlTGlzdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpY2VMaXN0VmVyc2lvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpY2VRdW90ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpY2VWYXJpYXRpb25Gb3JtdWxhUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltYXJ5UmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltZUNvbnRyYWN0b3JDb250cmFjdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbmNpcGFsUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmluY2lwYWxzQmFua1JlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbmNpcGFsc1JlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JBdXRob3JpemF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvckNhc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW9yQ2VydGlmaWNhdGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW9yQ29udHJhY3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW9yRGF0YVVuaXZlcnNhbE51bWJlclN5c3RlbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JIZWFsdGhJbmR1c3RyeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JJZGVudGlmaWVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvckluY29ycmVjdEJhdGNoTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvckluY29ycmVjdFNvY2lhbFNlY3VyaXR5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvcml0eVJhdGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JMb2FuTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvclBob25lTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvclBvbGljeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JQb3N0YWxaaXBDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvclB1cmNoYXNlT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW9ycHVyY2hhc2VvcmRlcm51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JUYXhJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JUcmFkaW5nUGFydG5lcklkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvclVuaXZlcnNhbFByb3ZpZGVySWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2NlZWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2Nlc3NIYW5kbGluZ0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2Nlc3NpbmdBcmVhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9jZXNzaW5nUGxhbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2Nlc3NvcklkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9jZXNzb3JzSW52b2ljZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvY3VyZW1lbnRCdWRnZXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2N1cmVtZW50UmVxdWVzdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvY3VyaW5nQWdlbmN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0Q2hhbmdlQXV0aG9yaXR5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0Q2hhbmdlSW5mb3JtYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3RDaGFuZ2VOb3RpY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3RHcm91cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3RMaWNlbnNpbmdBZ3JlZW1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3RMaW5lTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0UGVyaW9kRm9yV2hpY2hMYWJvckNvc3RzQXJlRmlybSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdFJlc2VydmF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0U291cmNpbmdBZ3JlZW1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3RTcGVjaWZpY2F0aW9uRG9jdW1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3RUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9maWxlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9mb3JtYUludm9pY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2dyYW1JZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZ3Jlc3NQYXltZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdFBhcmFncmFwaE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdFByb3BlcnR5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9qZWN0U3BlY2lmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbW90aW9uT3JEZWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9vZk9mRGVsaXZlcnlSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3BlcnR5Q29tcG9uZW50TG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3BlcnR5Q29udHJvbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvcGVydHlMb3NzSXRlbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvcG9zYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3Bvc2FsUGFyYWdyYXBoTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9wb3NlZENvbnRyYWN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9wb3NlZEdyb3VwV29ya0NhbmRpZGF0ZVNlcXVlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9wb3NlZFNlcXVlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9wb3NlZFdvcmtDYW5kaWRhdGVTZXF1ZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvdG9jb2xOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3RyYWN0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm92aWRlckNsYWltTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm92aWRlckNvbW1lcmNpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3ZpZGVyQ29udHJvbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvdmlkZXJPcmRlclRpY2tldE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvdmlkZXJQbGFuTmV0d29ya0lkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm92aWRlclNpdGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3ZpZGVyVVBJTk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvdmluY2lhbENhbmFkaWFuU2FsZXNUYXhFeGVtcHRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3ZpbmNpYWxUYXhJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvdmlzaW9uYWxQYXRlbnRBcHBsaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVibGljYXRpb25Jc3N1ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVibGljRGVlZE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVibGljRmlsaW5nUmVnaXN0cmF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdWJsaWNVdGlsaXRpZXNDb21taXNzaW9uQ2VydGlmaWNhdGVPZlB1YmxpY0NvbnZlbmllbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdXJjaGFzZURlc2NyaXB0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdXJjaGFzZU9wdGlvbkFncmVlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVyY2hhc2VPcmRlckNoYW5nZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVyY2hhc2VPcmRlckxpbmVJdGVtSWRlbnRpZmllckJ1eWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdXJjaGFzZU9yZGVyTnVtYmVySW5jbHVkZWRpbk9uT3JkZXJQb3NpdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVyY2hhc2VPcmRlck51bWJlck9mT3JkZXJSZWNlaXZlZFNpbmNlTGFzdFJlcG9ydGluZ0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlT3JkZXJOdW1iZXJPZlNoaXBtZW50UmVjZWl2ZWRTaW5jZUxhc3RSZXBvcnRpbmdEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdXJjaGFzZU9yZGVyTnVtYmVyU3VmZml4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdXJjaGFzZU9yZGVyUmVzcG9uc2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlT3JkZXJSZXZpc2lvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVyY2hhc2VSZXF1aXNpdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVyY2hhc2Vyc1JlcXVlc3RSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNpbmdBY3Rpdml0eUNsYXVzZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGlmaWVkTWF0ZXJpYWxzTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGlmaWVkUHJvZHVjdHNMaXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFsaXR5Q2xhdXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFsaXR5RGlzcG9zaXRpb25BcmVhSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGl0eUluc3BlY3Rpb25BcmVhSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGl0eVJlcG9ydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGl0eVJldmlld01hdGVyaWFsQ3JpYklkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5VmFsdWF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eVZhbHVhdGlvblJlcXVlc3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YXJhbnRpbmVPclRyZWF0bWVudFN0YXR1c1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhcnRlclF1YXJ0ZXJTZWN0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFydGVyUXVhcnRlclNwb3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1ZXN0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdW90YU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVvdGVPclNob3BwaW5nQ2FydElEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWNrVHlwZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbE9yUm9hZFJvdXRpbmdDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlscm9hZENvbW1pc3Npb25PaWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhaWxyb2FkQ29tbWlzc2lvblJlY29yZE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbFJvdXRpbmdDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsV2F5QmlsbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbHdheUNvbnNpZ25tZW50Tm90ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbHdheVdhZ29uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYW5nZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmF0ZUNhcmROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhdGVDb2RlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYXRlQ29uZmVyZW5jZUlEQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmF0ZU5vdGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhdGluZ1BlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmF3bWF0ZXJpYWxTdXBwbGllckR1bkFuZEJyYWRzdHJlZXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYWxFc3RhdGVPd25lZFByb3BlcnR5SWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhc29uRm9yQ2hhbmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWFzb25Ob3RMb3dlc3RDb3N0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmViYXRlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNhbGxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpcHROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmVkTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXZlckFzc2lnbmVkRHJvcFpvbmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmVyQ2xhaW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmVySWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmVySURRdWFsaWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmVyc0ZpbGVSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmVyU3ViSWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmluZ0FkdmljZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2aW5nQmFua3NBdXRob3JpemF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXZpbmdDb21wYW55SWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2aW5nRGVwb3NpdG9yeUZpbmFuY2lhbEluc3RpdHV0aW9uSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2aW5nTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXZpbmdQYXJ0eXNNZW1iZXJJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjb25jaWxpYXRpb25SZXBvcnRTZWN0aW9uSWRlbnRpZmljYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNvcmRpbmdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZHVjZWRFYXJuaW5nV2Vla0lkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVyZW5jZWRCeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJlbmNlZFBhdHRlcm5JZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJlbmNlRHJhd2luZ051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJlbmNlTnVtYmVyQXNzaWduZWRCeVRoaXJkUGFydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVyZW5jZU51bWJlck9mQVJlcXVlc3RGb3JNZXRlcmVkUmVhZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJlbmNlTnVtYmVyUXVvdGVkT25TdGF0ZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVyZW5jZU51bWJlclRvUHJldmlvdXNNZXNzYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZlcmVuY2VWZXJzaW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZlcnJhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJyZWRQcm9kdWN0Rm9yQ2hlbWljYWxBbmFseXNpcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJyZWRQcm9kdWN0Rm9yTWVjaGFuaWNhbEFuYWx5c2lzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZpbmVySWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaW9uYWxBY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpcmlzdG9GZWRlcmFsRGVDb250cmlidXllbnRlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaXJpc3RvRmVkZXJhbGRlQ29udHJpYnV5ZW50ZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2lzdGVyZWRDYXBpdGFsUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RlcmVkQ29udHJhY3RvckFjdGl2aXR5VHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaXN0ZXJlZE1haWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2lzdHJhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaXN0cmF0aW9uTnVtYmVyT2ZQcmV2aW91c0N1c3RvbXNEZWNsYXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaXN0cm9JbmZvcm1hY2lvbkZpc2NhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaXN0cm9OYWNpb25hbGRlQ29udHJpYnV5ZW50ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaXN0cm9Vbmljb2RlQ29udHJpYnV5ZW50ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVndWxhdGlvblByaW1hcnlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ3VsYXRpb25TZWNvbmRhcnlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ3VsYXRvcnlHdWlkZWxpbmVJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWluc3VyYW5jZVJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVpbnN1cmVyc0NsYWltTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWlzc3VlQ2Vzc2lvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVqZWN0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGVkQ2FzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRlZENvbnRyYWN0TGluZUl0ZW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0ZWREb2N1bWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRlZE5vbmNvbmZvcm1hbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGVkT2JqZWN0SWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0ZWRUcmFuc2FjdGlvblJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRlZFZlbmRvck9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVByaW9yaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxlYXNlSW52b2ljZU51bWJlckZvclByaW9yQmlsbEFuZEhvbGQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGVhc2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbWl0dGFuY2VBZHZpY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbWl0dGluZ0JhbmtzUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZW1vdmFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZW50YWxBY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZW50YWxBZ3JlZW1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbnRQYXlvcklkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBhaXJBY3Rpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGFpckNhdGVnb3J5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBhaXJEYXRhUmVxdWVzdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwYWlyRXN0aW1hdGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGFpck9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBhaXJQYXJ0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBlYXRMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwZXRpdGl2ZUJvb2tpbmdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGV0aXRpdmVDYXJnb1NoaXBtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBldGl0aXZlUGF0dGVybkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGV0aXRpdmVXYXliaWxsQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwbGFjZW1lbnRBc3NlbWJseU1vZGVsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBsYWNlbWVudEFzc2VtYmx5U2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBsYWNlbWVudENsYWltTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBsYWNlbWVudEN1c3RvbWVyUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBsYWNlbWVudERydWdFbmZvcmNlbWVudEFkbWluaXN0cmF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBsYWNpbmdQYXJ0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBsZW5pc2htZW50UHVyY2hhc2VPcmRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwbGVuaXNobWVudFB1cmNoYXNlT3JkZXJSYW5nZUVuZE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwbGVuaXNobWVudFB1cmNoYXNlT3JkZXJSYW5nZVN0YXJ0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBvcnRlcklkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBvcnRpbmdGb3JtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBvcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcHJlc2VudGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXByZXNlbnRhdGl2ZUlkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXByaWNlZENsYWltUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXByaWNlZExpbmVJdGVtUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1ZXN0Rm9yQ2FuY2VsbGF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1ZXN0Zm9yUXVvdGF0aW9uUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1ZXN0Rm9yUXVvdGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVlc3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2VydmF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNlcnZlQXNzZW1ibHlMaW5lRmVlZExvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNvdXJjZVNjcmVlbmluZ1JlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzb3VyY2VVdGlsaXphdGlvbkdyb3VwTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNwb25zZXRvYVJlcXVlc3Rmb3JRdW90YXRpb25SZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3RyaWN0ZWRBdmFpbGFiaWxpdHlBdXRob3JpemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXN0cmljdGVkQXZhaWxhYmlsaXR5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXN1Ym1pc3Npb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3VibWlzc2lvblJlYXNvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3VibWl0bnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXRhaWxNZXJjaGFudHNDZXJ0aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXRpcmVtZW50UGxhbkFjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldGlyZW1lbnRQbGFuUG9saWN5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXR1cm5hYmxlQ29udGFpbmVyUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXR1cm5hYmxlQ29udGFpbmVyU2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXR1cm5lZEdvb2RzQXV0aG9yaXphdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0dXJuR29vZHNCaWxsT2ZMYWRpbmdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldHVybk1hdGVyaWFsQXV0aG9yaXphdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0dXJuc05vdGljZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV2ZW51ZVNvdXJjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV2aWV3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXZpZXdlckZpbGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldmlld1BlcmlvZE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV2aXNpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJJRiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmlnTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb2FkQ29uc2lnbm1lbnROb3RlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb3V0ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm91dGVPcmRlck51bWJlckRvbWVzdGljIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb3V0ZU9yZGVyTnVtYmVyRW1lcmdlbmN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb3V0ZU9yZGVyTnVtYmVyRXhwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb3V0aW5nSW5zdHJ1Y3Rpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJVQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUnVsZVNlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJ1bk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FmZWtlZXBpbmdBY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWZldHlFcXVpcG1lbnRDZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FmZXR5b2ZSYWRpb0NlcnRpZmljYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWZldHlvZlNoaXBDZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FsZXNPclRlcnJpdG9yeUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbGVzQWxsb3dhbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWxlc0RlcGFydG1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbGVzRm9yZWNhc3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbGVzT2ZmaWNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWxlc1BlcnNvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FsZXNQcm9ncmFtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWxlc1JlZ2lvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FsZXNSZXBvcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbGVzUmVwcmVzZW50YXRpdmVPcmRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FsZXNSZXNwb25zaWJpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FtcGxlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYXZpbmdzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTQkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjYWxlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTY2FuTGluZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2NoZWR1bGVSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjaGVtZU9yUGxhbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Nob29sTG9hbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Nob29sVXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWFsT2ZmTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWFsT25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlYXJjaEtleSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kYXJ5Q292ZXJhZ2VDZXJ0aWZpY2F0ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kYXJ5Q292ZXJhZ2VDb21wYW55TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRhcnlDdXN0b21zUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRhcnlFbXBsb3llZUlkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRhcnlIZWFsdGhJbnN1cmFuY2VJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kYXJ5UG9saWN5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRhcnlQcm92aWRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kYXJ5U3VmZml4Q29kZUluZGljYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kQmVuZWZpY2lhcnlzUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNyZXRhcmlhZGVDb21lcmNpYXlGYW1lbnRhSW5kdXN0cmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VjcmV0YXJ5b2ZTdGF0ZUFzc2lnbmVkSWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY3Rpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY3Rpb25PZlRoZU5hdGlvbmFsSG91c2luZ0FjdENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY3VyaXR5SW5zdHJ1bWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VjdXJpdHlUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxmSW5zdXJhbmNlSWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGZJbnN1cmVyQXV0aG9yaXphdGlvblR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxmSW5zdXJlck9yZ2FuaXphdGlvblR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGxlckxvYW5OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGxlcnNDYXRhbG9ndWVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGxlcnNDcmVkaXRNZW1vIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxsZXJzRGViaXRNZW1vIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxsZXJzSW52b2ljZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VsbGVyc1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VsbGVyc1NhbGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGxpbmdBcnJhbmdlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VuZGVyRGVmaW5lZENsYXVzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VuZGVyc0NsYXVzZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VuZGVyc0ZpbGVSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbmRlcnNSZWZlcmVuY2VUb1RoZU9yaWdpbmFsTWVzc2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VuZGluZ0JhbmtSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbmRpbmdDb21wYW55QXVkaXROdW1iZXJBdXRvbWF0ZWRDbGVhcmluZ2hvdXNlVHJhbnNmZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXF1ZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlQXV0aG9yaXphdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZUJ1bGxldGluTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlQnVyZWF1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlQ2hhbmdlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlQ2hhcmdlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlQ29udHJhY3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VFc3RpbWF0ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZUdyb3VwSWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VJbnRlcnJ1cHRUcmFja2luZ051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZU9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlUGVyZm9ybWVkQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VSZXF1ZXN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlckxvYW5OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlc3Npb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNldE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hlZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoZWxmTGlmZUluZGljYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcEZyb20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBtZW50RGVzdGluYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwbWVudE9yaWdpbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBtZW50UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwTm90aWNlT3JNYW5pZmVzdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcG93bmVyc0F1dGhvcml6YXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwZXJDYXJPcmRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBlcnNCb25kTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwcGVyc0hhemFyZG91c051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBlcnNPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBpbmdMYWJlbFNlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBpbmdOb3RlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwcGluZ1VuaXRJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBpbmdab25lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaG9ydFRlcm1EaXNhYmlsaXR5UG9saWN5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaG93SWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNJQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0lEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaWduYWxDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaWduYWxDb2RlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaW5nbGVUcmFuc2FjdGlvblNlcXVlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTSVJFTk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0lSRVROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpdGVTcGVjaWZpY1Byb2NlZHVyZXNUZXJtc0FuZENvbmRpdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpdHVhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2xhdWdodGVyUGxhbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvY2lhbEluc3VyYW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29jaWFsU2VjdXJpdHlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvY2lldHlvZlByb3BlcnR5SW5mb3JtYXRpb25Db21waWxlcnNhbmRBbmFseXN0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29mdHdhcmVBcHBsaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29saWNpdGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb3J0QW5kU2VncmVnYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb3VyY2VEb2N1bWVudEludGVybmFsUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGFjaW5nVW5pdE9yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsQXBwcm92YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxCdWRnZXRBY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsQ2hhcmdlT3JBbGxvd2FuY2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsQ2xhdXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsR292ZXJubWVudEFjY291bnRpbmdDbGFzc2lmaWNhdGlvblJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbEluc3RydWN0aW9uc051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbE1vdmVSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxQYWNrYWdpbmdJbnN0cnVjdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbFBheW1lbnRSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxQcm9jZXNzaW5nQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbFF1b3RlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsdHlMaWNlbnNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWZpY2F0aW9uQ2xhc3NOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpZmljYXRpb25SZXZpc2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2ltZW5JZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGxpdEJvb2tpbmdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwbGl0UHJlbWl1bUF1ZGl0Q2hhbmdlSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BsaXRTaGlwbWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BvbnNvcnNSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwb3VzZVRpZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhY2tUcmFpbklkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhbmRhcmRDYXJyaWVyQWxwaGFDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZENsYXVzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhbmRhcmRJbmR1c3RyeUNsYXNzaWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhbmRhcmROdW1iZXJPZkluc3BlY3Rpb25Eb2N1bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhbmRhcmRQb2ludExvY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhbmRhcmRzQ29kZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhbmRhcmRzTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZHNWZXJzaW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZFRyYW5zcG9ydGF0aW9uQ29tbW9kaXR5Q29kZUJyaWRnZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhbmRhcmRUcmFuc3BvcnRhdGlvbkNvbW1vZGl0eUNvZGVSZXBsYWNlbWVudENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXJ0aW5nUGFja2FnZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVBc3NlbWJseURpc3RyaWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZUNoYXJ0ZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlQ29udHJvbGxlZFN1YnN0YW5jZUxpY2Vuc2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlQ3JpbWluYWxIaXN0b3J5UmVwb3NpdG9yeUluZGl2aWR1YWxJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVEZXBhcnRtZW50STIwRm9ybU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVEZXBhcnRtZW50SUFQNjZGb3JtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZUhhemFyZG91c1dhc3RlRW50aXR5SWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVJbmR1c3RyaWFsQWNjaWRlbnRQcm92aWRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVMZWdpc2xhdGl2ZURpc3RyaWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZUxpY2Vuc2VJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVMaWNlbnNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZW1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlbWVudE9mV29yayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVOb25SZXNpZGVudFZpb2xhdG9yQ29tcGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVvclByb3ZpbmNlQXNzaWduZWRCdXNpbmVzc1JlZ2lzdHJ5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZU9yUHJvdmluY2VBc3NpZ25lZEVudGl0eUlkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZVNhbGVzVGF4SWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlU2VuYXRlRGlzdHJpY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlU3R1ZGVudElkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZVRheElkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZXdpZGVDb3Vyc2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRpb25SZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXR1cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdHVzUmVwb3J0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9ja0NlcnRpZmljYXRlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9ja0V4Y2hhbmdlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvY2tFeGNoYW5nZUNvbXBhbnlJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9ja0tlZXBpbmdVbml0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9ja051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvcFNlcXVlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9yYWdlSW5mb3JtYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9yZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3R1ZHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YmFzc2VtYmx5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJjb250cmFjdExpbmVJdGVtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJjb250cmFjdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3ViY29udHJhY3RvckRhdGFSZXF1aXJlbWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YmRheU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3ViZGl2aXNpb25JZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJleGhpYml0TGluZUl0ZW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YkZpbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YmhvdXNlQmlsbE9mTGFkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJqZWN0UHJvcGVydHlOb25TYWxlUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJqZWN0UHJvcGVydHlSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YmplY3RQcm9wZXJ0eVZlcmlmaWNhdGlvblNvdXJjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VibGluZW9mSW5zdXJhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJtaXNzaW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJtaXR0ZXJJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3Vic2NyaWJlckF1dGhvcml6YXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnNjcmliZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnNlcnZpY2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJTZXJ2aWNlckxvYW5OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnNpc3RlbmNlSWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnN0YW50aXZlbHlDb25zb2xpZGF0ZWRDYXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJzdGl0dXRlQWlyV2F5YmlsbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3Vic3RpdHV0ZU1hbnVmYWN0dXJlcnNQYXJ0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJzdGl0dXRlTmF0aW9uYWxTdG9ja051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3Vic3RpdHV0ZVBhcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YlN1YmhvdXNlQmlsbE9mTGFkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWNjZXNzb3JBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWZmaXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cGVyaW50ZW5kZW5jaWFkZUludmVyc2lvbmVzRXh0cmFuamVyYXNOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cGVydmlzb3J5QXBwcmFpc2VyQ2VydGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxlbWVudGFsQWNjb3VudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxlbWVudGFsQWdyZWVtZW50QXV0aG9yaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbGVtZW50YWxDbGFpbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxlbWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBsaWVyUmVwbGFjZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBsaWVyRG9jdW1lbnRJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxpZXJzQ29udHJvbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxpZXJzQ3JlZGl0Q2xhaW1SZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBvcnRpbmdEb2N1bWVudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VyZXR5Qm9uZE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VzcGVuc2lvbklkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN3YXBPcmRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1dJRlQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNXSUZUTVQxMDAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNXSUZUTVQyMDIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNXSUZUQ29uZmlybWF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTeW1ib2xOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN5bWJvbE51bWJlckZvck1pbGVzdG9uZU9yTE9CUmVwb3J0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3lzdGVtYXRpemVkTm9tZW5jbGF0dXJlb2ZIdW1hbmFuZFZldGVyaW5hcnlNZWRpY2luZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3lzdGVtZUluZm9ybWF0aXF1ZVBvdXJMZVJlcGVydG9pcmVEZXNFbnRyZXByaXNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3lzdGVtZUluZm9ybWF0aXF1ZVBvdXJMZVJlcGVydG9pcmVEZXNFdGFibGlzc2VtZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3lzdGVtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYWciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhbmtOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhcmlmZk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFyaWZmUGFnZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFyaWZmUnVsZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFyaWZmU2VjdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFyaWZmU3VmZml4TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXJpZmZTdXBwbGVtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXNrT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheEFnZW5jeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4RXhjaGFuZ2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhFeGVtcHRpb25MaWNlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhFeGVtcHROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheEZpbGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4Rm9ybUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheGluZ0F1dGhvcml0eUlkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhMaWNlbnNlRXhlbXB0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhMaWVuSnVyaXNkaWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhSZWdpc3RyYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheFNjaGVkdWxlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4U2hlbHRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4V29ya3NoZWV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUQ04iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlYW1Bc3NpZ25tZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWNobmljYWxEb2N1bWVudGF0aW9uVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVjaG5pY2FsRG9jdW1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlY2huaWNhbEluZm9ybWF0aW9uUGFja2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVjaG5pY2FsT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlY2huaWNhbFBoYXNlUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWNobmljYWxSZWd1bGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWxlY29tbXVuaWNhdGlvbkNpcmN1aXRTdXBwbGVtZW50YWxJRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVsZXhNZXNzYWdlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZW1wbGF0ZVNlcXVlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZW5vciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVybSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVybWluYWxDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXJtaW5hbE9wZXJhdG9yTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXJtaW5hbFJlbGVhc2VPcmRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVybWluYXRpb25GaWxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlc3RlcklkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXN0UmVwb3J0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXN0U3BlY2lmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGV4dEVsZW1lbnRJZGVudGlmaWVyRGVsZXRpb25SZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoZWF0ZXJTY3JlZW5OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaXJkQmFua3NSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaXJkQmFua3NSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaXJkUGFydHlBZG1pbmlzdHJhdG9yQ2xhaW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaXJkUGFydHlOb3RlSG9sZGVySWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaXJkUGFydHlPcmdhbml6YXRpb25BdXRob3JpemF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaGlyZFBhcnR5T3JpZ2luYXRvck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhpcmRQYXJ0eVB1cmNoYXNlT3JkZXJJdGVtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaGlyZFBhcnR5UHVyY2hhc2VPcmRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhpcmRQYXJ0eVB1cmNoYXNlT3JkZXJSZWxlYXNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaGlyZFBhcnR5UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaHJvdWdoQmlsbE9mTGFkaW5nTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaWNrZXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpbWVGYWlsdXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaXJDYXJuZXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRJUk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGl0bGVDb21wYW55Q29kZUJvb2tSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpdGxlRG9jdW1lbnRTY2hlZHVsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGl0bGVQb2xpY3lOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpdGxlUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaXRsZVhJWElkZW50aWZpZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRva3lvU2hva29SZXNlYXJjaEJ1c2luZXNzSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG9sbEJpbGxpbmdUZWxlcGhvbmVSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsQ3ljbGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsT3JkZXJDeWNsZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG93bnNoaXBOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRveGljb2xvZ3lJRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhY2VyQWN0aW9uUmVxdWVzdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhY2tpbmdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFkZXJBY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFkaW5nUGFydG5lcklkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFpbGVyVHlwZVF1YWxpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaWxlclVzZUFncmVlbWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWluaW5nRmxpZ2h0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc2FjdGlvbkNhdGVnb3J5T3JUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc2FjdGlvblJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNmZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zaXRHdWFyYW50ZWVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9uZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRhdGlvbkFjY291bnRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRhdGlvbkFjY291bnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydGF0aW9uQ29udHJvbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0YXRpb25FeHBvcnRhdGlvbk5vRm9ySW5Cb25kTW92ZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydGF0aW9uUHJpb3JpdHlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydENvbnRyYWN0UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRDb3N0c1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RG9jdW1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydEVxdWlwbWVudFJldHVyblJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50U3RyaXBwaW5nT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydEVxdWlwbWVudFN0dWZmaW5nT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydEVxdWlwbWVudFN1cnZleVJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50U3VydmV5UmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFcXVpcG1lbnRTdXJ2ZXlSZXBvcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydFJvdXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRTZWN0aW9uUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmF2ZWxNYW5pZmVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJlYXR5SWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJlYXR5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmlhbExvY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJpcGxlYmFjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1Y2tlcnNCaWxsT2ZMYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydXN0ZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRTUkJ1c2luZXNzSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZU9mQ29tbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZU9mRXNjcm93TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUeXBlT2ZIb3VzZWhvbGRHb29kc0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVPZkxhd1N1aXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVPZk91dHN0YW5kaW5nSnVkZ21lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVPZlNjaWVuY2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVLlMuRGVmZW5zZUZlZGVyYWxBY3F1aXNpdGlvblJlZ3VsYXRpb25TdXBwbGVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVLlMuRGVwYXJ0bWVudE9mVmV0ZXJhbnNBZmZhaXJzQWNxdWlzaXRpb25SZWd1bGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVLlMuR292ZXJubWVudFRyYW5zcG9ydGF0aW9uQ29udHJvbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVWx0aW1hdGVDb25zaWduZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVsdGltYXRlQ3VzdG9tZXJzT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVsdGltYXRlQ3VzdG9tZXJzUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmFjY2VwdGFibGVTb3VyY2VEVU5TTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmFjY2VwdGFibGVTb3VyY2VQdXJjaGFzZXJJRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5hY2NlcHRhYmxlU291cmNlU3VwcGxpZXJJRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5kZXJ3cml0ZXJJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5kZXJ3cml0aW5nQWxlcnRSZWZlcmVuY2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVTkRHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmVtcGxveW1lbnRJbnN1cmFuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaWZvcm1Db21tZXJjaWFsQ29kZUZpbGluZ0NvbGxhdGVyYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaWZvcm1SZXNvdXJjZUxvY2F0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmlxdWVDbGFpbXNSZWZlcmVuY2VOdW1iZXJPZlRoZVNlbmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pcXVlQ29uc2lnbm1lbnRJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmlxdWVDb25zaWdubWVudFJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pcXVlQ3VycmFjUmVmZXJlbmNlTnVtYmVyT2ZUaGVTZW5kZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXF1ZU1hcmtldFJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pcXVlUmVpbmFjUmVmZXJlbmNlTnVtYmVyT2ZUaGVTZW5kZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXF1ZVN1cHBsaWVySWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRlZE5hdGlvbnNIYXphcmRvdXNDbGFzc2lmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdGVkU3RhdGVzR292ZXJubWVudFZpc2FOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRlZFN0YXRlc1N0YW5kYXJkTWV0cm9wb2xpdGFuU3RhdGlzdGljYWxBcmVhQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdExvYWREZXZpY2VJZGVudGlmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdFByb3BlcnR5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0UmVsaWVmTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0UmVwb3J0UGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0UmVwb3J0UGVyaW9kSUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRUcmFpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdmVyc2FsUmFpbHJvYWRSZXZlbnVlV2F5YmlsbElkZW50aWZpZWROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXZlcnNhbFRyYW5zdmVyc2VNZXJjYXRvckVhc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXZlcnNhbFRyYW5zdmVyc2VNZXJjYXRvck5vcnRoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml2ZXJzYWxUcmFuc3ZlcnNlTWVyY2F0b3Jab25lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbnBhaWRJbnN0YWxsbWVudFJlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVXBwZXJTZXJpYWxOdW1iZXJPZlJhbmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVcHN0cmVhbVNoaXBwZXJDb250cmFjdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNDRlIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTQ1MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTQ3VzdG9tc1NlcnZpY2VBbnRpRHVtcGluZ0R1dHlDYXNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVU0N1c3RvbXNTZXJ2aWNlQmluZGluZ1J1bGluZ051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNDdXN0b21zU2VydmljZUNvbW1lcmNpYWxEZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNDdXN0b21zU2VydmljZUNvdW50ZXJ2YWlsaW5nRHV0eUNhc2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTQ3VzdG9tc1NlcnZpY2VFbnRyeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNDdXN0b21zU2VydmljZUVudHJ5VHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTQ3VzdG9tc1NlcnZpY2VQcmVBcHByb3ZhbFJ1bGluZ051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNDdXN0b21zU2VydmljZVByZUNsYXNzaWZpY2F0aW9uUnVsaW5nTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVU0N1c3RvbXNTZXJ2aWNlU3RhdGVtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVU0RPRUFuZE5DRVMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTRE9UQm9uZFN1cmV0eUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVzZXJJRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVXNlcklkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVU0ZDQ0ltcG9ydENvbmRpdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNGZWRlcmFsQWNxdWlzaXRpb25SZWd1bGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVU0ZlZGVyYWxJbmZvcm1hdGlvblJlc291cmNlc01hbmFnZW1lbnRSZWd1bGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVU0Zvb2RBbmREcnVnQWRtaW5pc3RyYXRpb25Fc3RhYmxpc2htZW50SW5kaWNhdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVU0dlbmVyYWxTZXJ2aWNlc0FkbWluaXN0cmF0aW9uUmVndWxhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNHb3Zlcm5tZW50QWdlbmN5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYWx1ZUFkZGVkVGF4UmVnaXN0cmF0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYXRSZWdpc3RyYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlaGljbGVCdXNpbmVzc1VzZVF1YWxpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVoaWNsZUxpY2VuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlaGljbGVSYWRpdXNvZk9wZXJhdGlvblF1YWxpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVoaWNsZVJlbGF0ZWRTZXJ2aWNlc1JlZmVyZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVoaWNsZVNpemVDbGFzc1F1YWxpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVuZG9yQWJicmV2aWF0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVuZG9yQ2hhbmdlSWRlbnRpZmljYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZW5kb3JDaGFuZ2VQcm9jZWR1cmVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZW5kb3JDb250cmFjdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVuZG9ySUROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlbmRvck9yZGVyTnVtYmVyU3VmZml4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZW5kb3JQcm9kdWN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZW5kb3JzUHJldmlvdXNKb2JOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlbmRvclRlcm1zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXJpZmljYXRpb25Tb3VyY2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXJzaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXJzaW9uQ29kZUxvY2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXJzaW9uQ29kZU5hdGlvbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXJ0aWNhbENvb3JkaW5hdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlc3NlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVzc2VsQWdlbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlc3NlbElkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXNzZWxOYW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXRlcmFuc0FkbWluaXN0cmF0aW9uT3JpZ2luYXRvcklkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXRlcmFuc0FmZmFpcnNDYXNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWSU4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZpc2FUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWb2x1bWVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZvbHVtZVB1cmNoYXNlQWdyZWVtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWb3VjaGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWb3lhZ2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhZ2VEZXRlcm1pbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYWl2ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhcmVob3VzZUVudHJ5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJlaG91c2VQaWNrVGlja2V0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJlaG91c2VSZWNlaXB0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJlaG91c2VTdG9yYWdlTG9jYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhcnJhbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhcnJhbnR5Q292ZXJhZ2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJyYW50eVJlZ2lzdHJhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2F5YmlsbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2VhcG9uU3lzdGVtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWlnaHRBZ3JlZW1lbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldlbGxDbGFzc2lmaWNhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldlbGxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldpdGhkcmF3YWxBY2NvdW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaXRoZHJhd2FsUmVjb3JkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb29sSWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ildvb2xUYXhSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldvcmtCcmVha2Rvd25TdHJ1Y3R1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldvcmtDYW5kaWRhdGVTZXF1ZW5jZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29ya0NlbnRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29ya2luZ1NoaWZ0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JrSXRlbVF1YW50aXR5RGV0ZXJtaW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29ya09yZGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JrUGFja2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29ya1NoaWZ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3Jrc2l0ZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29ya1Rhc2tDaGFyZ2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldvcmtUZWFtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJZYXJkUG9zaXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlpvbmUiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ikl0ZW1EZXRhaWwiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iQmFzZUl0ZW1EZXRhaWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iUHJpY2luZ0RldGFpbCIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJEZWxpdmVyeURldGFpbCIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJSb3VuZFRyaXBJbmZvcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iTGluZUl0ZW1Ob3RlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Ikxpc3RPZlN0cnVjdHVyZWROb3RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Ikxpc3RPZk5hbWVWYWx1ZVNldCIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iTGluZUl0ZW1BdHRhY2htZW50cyI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ikxpc3RPZkF0dGFjaG1lbnQiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSXRlbURldGFpbCIgdHlwZT0iSXRlbURldGFpbCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQmFzZUl0ZW1EZXRhaWwiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTGluZUl0ZW1OdW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iTGluZUl0ZW1UeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJQYXJlbnRJdGVtTnVtYmVyIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTGluZUl0ZW1OdW1iZXJSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJJdGVtSWRlbnRpZmllcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iTGlzdE9mRGltZW5zaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJUb3RhbFF1YW50aXR5Ij4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUXVhbnRpdHkiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iTWF4QmFja09yZGVyUXVhbnRpdHkiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJRdWFudGl0eSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Ikxpc3RPZlF1YW50aXR5Q29kZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ik9mZkNhdGFsb2dGbGFnIiB0eXBlPSJ4Y2JsQm9vbGVhbiIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJDYXRhbG9nUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJJdGVtQ29udHJhY3RSZWZlcmVuY2VzIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTGlzdE9mQ29udHJhY3RJdGVtIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ikxpc3RPZkl0ZW1SZWZlcmVuY2VzIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTGlzdE9mUmVmZXJlbmNlQ29kZWQiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQ291bnRyeU9mT3JpZ2luIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iQ291bnRyeSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJDb3VudHJ5T2ZEZXN0aW5hdGlvbiI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IkNvdW50cnkiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRmluYWxSZWNpcGllbnQiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJQYXJ0eSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Ikxpc3RPZlBhcnR5Q29kZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iQ29uZGl0aW9uc09mU2FsZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iSGF6YXJkb3VzTWF0ZXJpYWxzIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iSGF6YXJkb3VzIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IkJhc2VJdGVtRGV0YWlsIiB0eXBlPSJCYXNlSXRlbURldGFpbCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGluZUl0ZW1OdW0iPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkJ1eWVyTGluZUl0ZW1OdW0iIHR5cGU9InhzZDppbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlNlbGxlckxpbmVJdGVtTnVtIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMaW5lSXRlbU51bSIgdHlwZT0iTGluZUl0ZW1OdW0iLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkxpbmVJdGVtVHlwZSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGluZUl0ZW1UeXBlQ29kZWQiIHR5cGU9IkxpbmVJdGVtVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkxpbmVJdGVtVHlwZUNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IkxpbmVJdGVtVHlwZSIgdHlwZT0iTGluZUl0ZW1UeXBlIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkxpbmVJdGVtVHlwZUNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikl0ZW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBvbmVudEdyb3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXh0SXRlbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkxpbmVJdGVtTnVtYmVyUmVmZXJlbmNlIj4KLSAgICAgICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOmludCI+Ci0gICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iTGluZUl0ZW1OdW1UeXBlQ29kZWQiIHR5cGU9IkxpbmVJdGVtTnVtVHlwZUNvZGUiIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9IkJ1eWVyIi8+Ci0gICAgICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgIDwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IkxpbmVJdGVtTnVtYmVyUmVmZXJlbmNlIiB0eXBlPSJMaW5lSXRlbU51bWJlclJlZmVyZW5jZSIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJMaW5lSXRlbU51bVR5cGVDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VsbGVyIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJdGVtSWRlbnRpZmllcnMiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJQYXJ0TnVtYmVycyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU2VydmljZSIgdHlwZT0ieGNibEJvb2xlYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ikl0ZW1EZXNjcmlwdGlvbiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJMaXN0T2ZJdGVtQ2hhcmFjdGVyaXN0aWMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkNvbW1vZGl0eUNvZGUiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iQ2F0ZWdvcnkiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikl0ZW1JZGVudGlmaWVycyIgdHlwZT0iSXRlbUlkZW50aWZpZXJzIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJQYXJ0TnVtYmVycyI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTZWxsZXJQYXJ0TnVtYmVyIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUGFydE51bSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJCdXllclBhcnROdW1iZXIiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJQYXJ0TnVtIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iTWFudWZhY3R1cmVyUGFydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU3RhbmRhcmRQYXJ0TnVtYmVyIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUHJvZHVjdElkZW50aWZpZXJDb2RlZCIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTdWJzdGl0dXRlUGFydE51bWJlcnMiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJMaXN0T2ZQcm9kdWN0SWRlbnRpZmllckNvZGVkIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ik90aGVySXRlbUlkZW50aWZpZXJzIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTGlzdE9mUHJvZHVjdElkZW50aWZpZXJDb2RlZCIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQYXJ0TnVtYmVycyIgdHlwZT0iUGFydE51bWJlcnMiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlBhcnROdW0iPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlBhcnRJRCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUGFydElERXh0IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJSZXZpc2lvbk51bWJlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUGFydE51bSIgdHlwZT0iUGFydE51bSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWFudWZhY3R1cmVyUGFydE51bWJlciI+Ci0gICAgICAgIDx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJQYXJ0TnVtIj4KLSAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJNYW51ZmFjdHVyZXJJRCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IklkZW50aWZpZXIiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJNYW51ZmFjdHVyZXJOYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgIDwveHNkOmNvbXBsZXhDb250ZW50PgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYW51ZmFjdHVyZXJQYXJ0TnVtYmVyIiB0eXBlPSJNYW51ZmFjdHVyZXJQYXJ0TnVtYmVyIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJQcm9kdWN0SWRlbnRpZmllckNvZGVkIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQcm9kdWN0SWRlbnRpZmllclF1YWxpZmllckNvZGVkIiB0eXBlPSJQcm9kdWN0SWRlbnRpZmllclF1YWxpZmllckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlByb2R1Y3RJZGVudGlmaWVyUXVhbGlmaWVyQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlByb2R1Y3RJZGVudGlmaWVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJQcm9kdWN0SWRlbnRpZmllckV4dCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUHJvZHVjdElkZW50aWZpZXJDb2RlZCIgdHlwZT0iUHJvZHVjdElkZW50aWZpZXJDb2RlZCIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJQcm9kdWN0SWRlbnRpZmllclF1YWxpZmllckNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRpdGlvbmFsUHJvZHVjdElkZW50aWZpY2F0aW9uQXNzaWduZWRCeVRoZU1hbnVmYWN0dXJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWR2ZXJ0aXNpbmdQYWNrYWdlSWRlbnRpZmljYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZ3JlZ2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWlyVHJhbnNwb3J0YXRpb25Bc3NvY2lhdGlvblByb3ByaWV0YXJ5UmlnaHRzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxsb2NhdGlvbk1ldGhvZG9sb2d5SWRlbnRpZmljYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbHRlcm5hdGVJU0JOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbWVyaWNhbkRlbnRhbEFzc29jaWF0aW9uQ29kZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtZXJpY2FuVHJ1Y2tpbmdBc3NvY2lhdGlvbnNBc3NlbWJseSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1lcmljYW5UcnVja2luZ0Fzc29jaWF0aW9uc1BhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtZXJpY2FuVHJ1Y2tpbmdBc3NvY2lhdGlvbnNTeXN0ZW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFubml2ZXJzYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWNhdGlvbkNvbXBsZXRpb25NZXRob2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2F0aW9uU3RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcHJhaXNhbFByb2R1Y3RUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHByYWlzYWxTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBUk5JQ1BhcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2VtYmx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NlbWJseUxvdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzZXRDYXRlZ29yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzZXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2V0VHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzb3J0YWJpbGl0eUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhvckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhvcml6ZWRQYXJ0c0xpc3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dG9tYXRpY1RyYW5zbWlzc2lvblNlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXV4aWxpYXJ5VHJhbnNtaXNzaW9uU2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXhpbGxhcnlUcmFuc21pc3Npb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF4bGVSYXRpbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXhsZVNlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFja2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFsZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFyLUNvZGVkU2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXRjaE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVhbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVuZWZpdElEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZXZlcmFnZUNvbW1vbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxib2FyZHNDb21tZXJjaWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsQ3JlZGl0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbFN1Ymdyb3VwQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmluZGluZ0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyYW5kT3JMYWJlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJva2VyUHJpY2VPcGluaW9uU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzQm9keVNlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5ZXJHcm91bmRTaGFkZUlkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyc0NhdGFsb2dOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyc0NvbG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllcnNFbmRQcm9kdWN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllcnNFbmdpbmVlcmluZ0NoYW5nZUxldmVsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllcnNJbnRlcm5hbFByb2R1Y3RHcm91cENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyc0l0ZW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyc1BhcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyc1F1YWxpZmllckZvclNpemUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyc1NpemVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllcnNTdHlsZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5ZXJzU3VibGluZUl0ZW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNBR0VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5kaWRhdGVPaWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcnJ5LU92ZXJQYXJ0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXRhbG9nTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFubmVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFzc2lzU2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGVtaWNhbEFic3RyYWN0U2VydmljZVJlZ2lzdHJ5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGFzc2lmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xhc3NPZkNvbnRyYWN0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0xFSUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvZ25pemFuY2VTeW1ib2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbGRSb2xsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tYmluZWROQ0NNQU9yQmFua1NlcnZpY2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21taXNzaW9uSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWlzc2lvblllYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1pdHRlZUZvclVuaWZvcm1TZWN1cml0eUlkZW50aWZpY2F0aW9uUHJvY2VkdXJlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tb2RpdHlHcm91cGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbW9kaXR5TmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbW9uTGFuZ3VhZ2VFcXVpcG1lbnRJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wYW55LU93bmVkVW5pdFRyYWluTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wYW55UGFydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGF0aWJsZUN1dE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGVuc2F0aW9uQWxsb2NhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBlbnNhdGlvblR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wbGV0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25jZXB0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uZmlndXJhdGlvbkl0ZW1JZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25uZWN0b3JUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250aW51YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0QWN0aXZpdHlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdEJyZWFrZG93biIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RDaGFuZ2VBdXRob3JpemF0aW9uVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0b3JFc3RhYmxpc2htZW50Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RUcmFuc2ZlclJlYXNvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyaWJ1dGlvblllYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyb2xOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdW50cnlGcm9tV2hpY2hQcm9jdXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291bnRyeU9mT3JpZ2luQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291cG9uRmFtaWx5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291cG9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3ZlcmFnZVJpc2tUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3ZlcmFnZVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnJlbnRQcm9jZWR1cmFsVGVybWlub2xvZ3lDb2RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJDb21wYW55UmVnaXN0cnlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbWVyT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbWVyUHJvdmlkZWRFcXVpcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNBcnRpY2xlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGFDYXRlZ29yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudE9mRGVmZW5zZUlkZW50aWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwb3NpdEl0ZW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc2lnbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGV2aWNlRmFtaWx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXZpY2VUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaWFnbm9zaXNDb2RlUG9pbnRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGllTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNjb250aW51ZWRQYXJ0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNjb3VudEdyb3VwaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXN0cmlidXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGl2aWRlbmRVc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50SWRlbnRpZmljYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcmF3aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcmF3aW5nUmV2aXNpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRydWdVUENDb25zdW1lclBhY2thZ2VDb2RlMS00LTYtMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJ1Z1VQQ1NoaXBwaW5nQ29udGFpbmVyQ29kZTEtMi00LTYtMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVuQW5kQnJhZHN0cmVldFN0YW5kYXJkUHJvZHVjdEFuZFNlcnZpY2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEeWVMb3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVBTjItNS01LTEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVBTi05OUluLVN0b3JlQ291cG9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWRpdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZEl0ZW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZC1JdGVtRGVzY3JpcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZ2luZURpc3BsYWNlbWVudElkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmdpbmVlcmluZ0NoYW5nZUxldmVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmdpbmVlcmluZ0RhdGFMaXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmdpbmVTZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWlwbWVudENvZGVQZXJDT1BBU1N0YW5kYXJkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVpcG1lbnRIaWVyYXJjaGljYWxTZXF1ZW5jZUlkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWlwbWVudElkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVpcG1lbnRMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50VHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXZlbnRUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGNoYW5nZWRQYXJ0T3JBc3NlbWJseU9yUHJvZHVjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhoaWJpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhoaWJpdElkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4aGliaXRMaW5lSXRlbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwZW5kYWJsZUNvbnRhaW5lcklkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBlbnNlSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRkFBU2VydmljZUJ1bGxldGluTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGYWJyaWNQaWVjZXNQZXJSb2xsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGYWlsZWRTdWJhc3NlbWJseU1vZGVsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGYWlsZWRTdWJhc3NlbWJseVNlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFubmllTWFlQWZmb3JkYWJsZUxlbmRpbmdQcm9kdWN0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFubmllTWFlUHJvamVjdENvbmRvbWluaXVtQ2xhc3NpZmljYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWF0dXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsU3VwcGx5Q2xhc3NpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpZnRoV2hlZWxTZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFsVGVzdExvdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsUGhhc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmlzaExvdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluaXNoTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5pc2hPckhhbmRTdGFuZGFyZFJlZmVyZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlyZVB1bXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpcnN0UHJpb3JJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JtZXJQdWJsaXNoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcm1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWRkaWVNYWNBZmZvcmRhYmxlTGVuZGluZ1Byb2R1Y3RDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVkZGllTWFjUHJvamVjdENvbmRvbWluaXVtQ2xhc3NpZmljYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcm9udEF4bGUtUmVhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJvbnRBeGxlRHJpdmVuU2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcm9udEF4bGVOb25Ecml2ZW5TZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyb250QXhsZVNlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnVlbFRhbmtTZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1bmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1bmRBYmJyZXZpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1bmRNYW5hZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdW5kU3ViLUFkdmlzb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1bmRUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHQVNGTE9XSW52b2ljZVBvc3RpbmdDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHQVNGTE9XUHJvZHVjdG9yU2VydmljZUNoYXJnZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdhdGhlcmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VhclJhdGlvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW5lcmFsU3BlY2lmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VuZXJpY05hbWVEZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2xpZGVyS2l0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmFkZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdyYWRlTmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JhaW5EaXJlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdyYXBoaWNzSW5kdXN0cnlCYXJDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcm91bmRTaGFkZVN0YW5kYXJkUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcm91cElEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcm91cFF1YWxpZmllckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdUSU4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikhhcm1vbmlzZWRTeXN0ZW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhDUENTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWF0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJISUJDLUhlYWx0aEluZHVzdHJ5QmFyQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSElCQ1N1cHBsaWVyTGFiZWxpbmdTdGFuZGFyZFByaW1hcnlEYXRhTWVzc2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSElFQ1Byb2R1Y3RPclNlcnZpY2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3RSb2xsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJQ0QtOS1DTS1Qcm9jZWR1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Iklnbml0aW9uS2V5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXByaW50LVRyYWRlbWFya0NvZGVPZlN1YnNpZGlhcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZHVzdHJ5Q29tbW9kaXR5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5mb3JtYXRpb25NZWRpYVR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZ3JlZGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyYW5jZVBsYW5EZXNjcmlwdGlvbkNoYXJhY3RlcmlzdGljcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJlcnNGdW5kQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJjaGFuZ2VhYmlsaXR5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJpb3JDb2xvck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJuYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmF0aW9uYWxBcnRpY2xlTnVtYmVyaW5nQXNzb2NpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklDRC05LUNNLURpYWdub3NpcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJuYXRpb25hbEhhcm1vbml6ZWRDb21tb2RpdHlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm5hdGlvbmFsU3RhbmRhcmRCb29rTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlc3RtZW50RnVuZFR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklSU1F1YWxpZmljYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJU0JOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJU1NOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJdGVtTWFuYWdlbWVudENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikl0ZW1UeXBlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKb2JOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkpvYlNlcXVlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKb2ludExpZmVUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKdXJpc2RpY3Rpb25TcGVjaWZpY1Byb2NlZHVyZUFuZFN1cHBseUNvZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLYW5iYW5QbGFuTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJvcmF0b3J5U2FtcGxlSWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm9yYXRvcnlUZXN0Q29uZGl0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFib3JHcm91cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhc2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpYnJhcnlPZkNvbmdyZXNzQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlmZU9yQW5udWl0eVByb2R1Y3RDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWZlT3JBbm51aXR5U2VydmljZUZlYXR1cmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWZ0R2F0ZVNlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGluZU9mQXV0aG9yaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaW5lT2ZCdXNpbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hZFNlcXVlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhbGx5QXNzaWduZWRDb250cm9sTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhbFN0b2NrTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxPSU5DQ29kZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG90UHJpY2luZ1VuaXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hY2hpbmVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haW50ZW5hbmNlSW5kZXhQYWdlUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWpvclByb2R1Y3RPck1hdGVyaWFsT3JNYWNoaW5lVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFudWFsVHJhbnNtaXNzaW9uU2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW51ZmFjdHVyZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbnVmYWN0dXJlcnNBcnRpY2xlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW51ZmFjdHVyZXJzUGFydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFya2V0UHJvZ3JhbUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFsQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0ZXJpYWxDb250cm9sQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0ZXJpYWxEaXNjaGFyZ2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lYXN1cmVtZW50VHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYWxJbmZvcm1hdGlvbkJ1cmVhdUF1dGhvcml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYWxTdG9wTG9zc0NvdmVyYWdlQ29kZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYWxTdG9wTG9zc0xldmVsQ29kZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYWxTdG9wTG9zc1Byb2R1Y3RMaW5lQ29kZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNRU1BUHJvZHVjdFR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXRob2RPZkRlbGl2ZXJ5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlsZXN0b25lRXZlbnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbGl0YXJ5U3RhbmRhcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1JTFNQRUNOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vZGVsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3J0Z2FnZUNyZWRpdERhdGFPcmRlclR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vcnRnYWdlSW5zdXJhbmNlUHJvZHVjdENvZGVPck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9ydGdhZ2VQcm9kdWN0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9ydGdhZ2VVbmRlcndyaXRpbmdUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3RvclZlaGljbGVJZE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW90b3JWZWhpY2xlLUxpbmVEZXNpZ25hdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3ZlbWVudFR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbERydWdDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbERydWdDb2RlNC00LTJGb3JtYXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsRHJ1Z0NvZGU1LTMtMkZvcm1hdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxEcnVnQ29kZTUtNC0xRm9ybWF0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbERydWdDb2RlNS00LTJGb3JtYXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsSGVhbHRoUmVsYXRlZEl0ZW1Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbEhlYWx0aFJlbGF0ZWRJdGVtQ29kZUluNC02Rm9ybWF0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbEhlYWx0aFJlbGF0ZWRJdGVtQ29kZUluNS01Rm9ybWF0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbFByb2R1Y3RHcm91cENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsUmV0YWlsRmVkZXJhdGlvbkNvbG9yQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxSZXRhaWxGZWRlcmF0aW9uU2l6ZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5hdGlvbmFsU3RvY2tOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5EQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV3TWljcm9jb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXdSZXBsYWNlbWVudFBhcnRPckFzc2VtYmx5RGVmZWN0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXh0SGlnaGVyQXNzZW1ibHlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5leHRIaWdoZXJVc2VkQXNzZW1ibHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmZvcmZlaXR1cmVPcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbi1SZXNhbGVhYmxlSXRlbUV4Y2x1ZGluZ0RlcG9zaXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5TTi1Ob3J0aEF0bGFudGljVHJlYXR5T3JnYW5pemF0aW9uU3RvY2tOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5VQkNVQjgyQ29kZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5VQkNVQjkyQ29kZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mUG9zaXRpb25zT25NYWNoaW5lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPYmxpZ2F0aW9uQXV0aG9yaXR5TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPYnNvbGV0ZVBhcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZmVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbGRNaWNyb2NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9sZFVQQ09yRUFOQ2FzZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9sZFVQQ09yRUFOQ29uc3VtZXJQYWNrYWdlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2xkVVBDT3JFQU5Nb2R1bGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbGRVUENPckVBTk11bHRpcGFja0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wZXJhdG9yQXNzaWduZWRQcm9wZXJ0eUlkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcHBvc2l0ZS1IYW5kUGFydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3B0aWNhbENhYmxlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3B0aWNhbEluZHVzdHJ5UHJvZHVjdENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsRXF1aXBtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdXRzaWRlUHJvZHVjdGlvbk9wZXJhdGlvblNoZWV0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNrYWdlVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhY2thZ2luZ0RyYXdpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhY2thZ2luZ1NwZWNpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhY2tOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnREcmF3aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0TnVtYmVyRGVzY3JpcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnRSZWZlcmVuY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhdHRlcm5OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBBU0NDRUMtR29vZHNBbmRTZXJ2aWNlc1RheEZvcndhcmRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUEFTQ0NFQy1Hb29kc0FuZFNlcnZpY2VzVGF4Tm90QXBwbGljYWJsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUEFTQy1Ob25UdWJ1bGFyQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUEFTQ09NQy1Hb29kc0FuZFNlcnZpY2VzVGF4Rm9yd2FyZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQQVNDT01DLUdvb2RzQW5kU2VydmljZXNUYXhOb3RBcHBsaWNhYmxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXRyb2xldW1BY2NvdW50YW50c1NvY2lldHlPZkNhbmFkYVR1YnVsYXJDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaGFzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGllY2VzSW5Sb2xsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWdneWJhY2tDb21tZXJjaWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaXBlbGluZVRyYW5zYWN0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW50RXF1aXBtZW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvbGljeUZvcm0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvc2l0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVmZXJyZWRNYW51ZmFjdHVyZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWZlcnJlZE5hdGlvbmFsU3RvY2tOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWZlcnJlZFBhcnROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZW1pdW1SYXRlVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlbWl1bVVzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c1NhbXBsZUlkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmljZUxvb2tVcE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWVDb250cmFjdG9yUGFydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbnRDb2xvclN0YW5kYXJkUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmludE9yRHJhd2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvY2Vzc051bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdE9yU2VydmljZUlkZW50aWZpY2F0aW9uTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0Q2hhbmdlTm90aWNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0RGF0ZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3RJZEF0dHJpYnV0ZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3RUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdFZlcnNpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2dyYW1Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9ncmFtRGVzY3JpcHRpb25JZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9ncmFtTGV2ZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21vdGlvbmFsVmFyaWFudE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvcGVydHlBbmRDYXN1YWx0eVNlcnZpY2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdWJsaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVibGlzaGVyQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVyY2hhc2VPcmRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVyY2hhc2Vyc0l0ZW1Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdXJjaGFzZXJzT3JkZXJMaW5lTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdXJwb3NlT2ZJbnN1cmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhY2tOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhZGlhdG9yU2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlscm9hZC1Pd25lZFVuaXRUcmFpbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFuZG9tV2VpZ2h0QWdncmVnYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYXRlRGV0YWlsQ2FyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhbEVzdGF0ZVByb3BlcnR5SW5mb3JtYXRpb25TZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWFyQXhsZUV4dGVuZGVkVGFnIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWFyQXhsZUZyb250UmVhckRyaXZlblNlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhckF4bGVNaWRkbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYXJBeGxlUHVzaGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWFyQXhsZVJlYXJEcml2ZW5TZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYXJBeGxlUmVhck5vbkRyaXZlblNlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhckF4bGVTZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYXJBeGxlVGFnIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNsYW1hdGlvblByb2Nlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY29yZEtlZXBpbmdPck1vZGVsWWVhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVlZmVyU2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWVsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWVsVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJlbmNlT2lsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZpbmVkUHJvZHVjdENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0ZWRNb2RlbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRlZE1vZGVsVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRlZFBvbGljeUlkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVZhbHVlVW5pdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGVhc2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGlnaW91c1JldGFpbE5vbi1Cb29rSXRlbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwYWlyRnJvbVByb2R1Y3RDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBhaXJJbmR1Y3Rpb25JZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBhaXJUYWdOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGxhY2VkUGFydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwbGFjZW1lbnROYXRpb25hbFN0b2NrTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBsYWNlbWVudFByb2R1Y3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGxhY2VtZW50U3ViYXNzZW1ibHlNb2RlbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwbGFjZW1lbnRTdWJhc3NlbWJseVNlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzb3VyY2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldGFpbFBMVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0dXJuYWJsZUNvbnRhaW5lck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0dXJuQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm9sbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm9sbFNlcXVlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSU0tOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJ1bk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FsZXNQcmVzZW50YXRpb25JRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FtcGxlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTY2hlbWF0aWNEaWFncmFtUmVmZXJlbmNlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWF0U2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRhcnlQbHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY29uZFByaW9ySWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VjdGlvblByaW50TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxsZXJzRGF0ZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGxlcnNMb3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcmlhbEl0ZW1BbmRDb250cmlidXRpb25JZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcmllc0lkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VDb2RlUGVyQ09QQVNTdGFuZGFyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZUNvbnRyb2xJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZUZlYXR1cmVJRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZVJlbmRlcmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlUmVxdWVzdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNldHRsZW1lbnRPclBheW91dE9wdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hlbGYtTGlmZUFjdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoZWxmLUxpZmVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlmdFdvcmtlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2lkZVVwT3JTaWRlRG93biIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2tpbGxDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTS1UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNsYWJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNsZWVwZXJCb3hLZXlOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNsZWVwZXJCb3hTZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNOT01FRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29mdHdhcmVSZXZpc2lvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU291cmNlT2ZEZXBvc2l0Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU291cmNlT2ZMZWFkQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbE1hdGVyaWFsSWRlbnRpZmljYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTU0NDLTE4QW5kQXBwbGljYXRpb25JZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZEdyb3VwT2ZQcm9kdWN0cy1NaXhlZEFzc29ydG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YW5kYXJkSW5kdXN0cmlhbENsYXNzaWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVMYWJlbENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlU2FtcGxlSWRlbnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b2NrTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdHlsZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VibGluZUl0ZW1OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1Ym1pc3Npb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnNpc3RlbmNlSWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnN0aXR1dGVQcm9kdWN0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJ0b3BpY0xldmVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBlcnNlZGVkUGFydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwZXJzZWRlZFB1cmNoYXNlT3JkZXJOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBsaWVyQnJhbmRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbGllckNvbXBhbnlSZWdpc3RyeU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxpZXJzQXJ0aWNsZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxpZXJzU3VwcGxpZXJBcnRpY2xlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJmYWNlRmluaXNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTeW50aGV0aWNMdWJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTeXN0ZW1JZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUQUNUQ29tbW9kaXR5Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVjaG5pY2FsTWFudWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWNobmljYWxPcmRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVjaG5pY2FsUGhhc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbGVjb21tdW5pY2F0aW9uc0NpcmN1aXRJZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVsZWNvbW11bmljYXRpb25zSW5kdXN0cnlTZXJ2aWNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVsZWNvbVNlcnZpY2VUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWxlcGhvbmVJbmR1c3RyeU1hbnVmYWN0dXJlckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlc3RlZE1hdGVyaWFsSWRlbnRpZmljYXRpb25OdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRleCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhpcmRQcmlvcklkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpbWVDb21wbGlhbnRUZWNobmljYWxPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGl0bGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3BpY0xldmVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFkZUluSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNmZXJDYXNlU2VyaWFsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc21pc3Npb25TZXJpYWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydEdyb3VwTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmVhc3VyeU1hbmFnZW1lbnRBc3NvY2lhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJlYXN1cnlNYW5hZ2VtZW50QXNzb2NpYXRpb25TZXJ2aWNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJlYXN1cnlNYW5hZ2VtZW50QXNzb2NpYXRpb25TZXJ2aWNlQ29kZUFuZEJhbmtTZXJ2aWNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJlYXRtZW50Q29kZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydWNrQm9keVNlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZVNlbHZhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVDQ09yRUFOLTEyOENvdXBvbkV4dGVuZGVkQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVWx0aW1hdGVDdXN0b21lcnNBcnRpY2xlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVTkNDUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5kZXJ3cml0aW5nTWV0aG9kT2ZEaXJlY3RXcml0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaWZvcm1TdG9ja1N5bWJvbFN5c3RlbUNvZGVOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXZlcnNhbFByb2R1Y3ROdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVOTnVtYmVyRGFuZ2Vyb3VzR29vZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVQQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVBDT3JFQU4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVQQ0Nhc2VDb2RlTnVtYmVyMS0xLTUtNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVBDQ29uc3VtZXJQYWNrYWdlQ29kZTEtNS01Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUENDb25zdW1lclBhY2thZ2VDb2RlMS01LTUtMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVBDQ291cG9uQ29kZTEtNS01LTEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVQQ09yRUFOQ2FzZUNvZGUyLTUtNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVBDT3JFQU5Db25zdW1lclBhY2thZ2VDb2RlMi01LTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVQQ09yRUFOQ291cG9uQ29kZTItNS01Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUENPckVBTk1vZHVsZUNvZGUyLTUtNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVBDT3JFQU5NdWx0aXBhY2tDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUENPckVBTlNoaXBwaW5nQ29udGFpbmVyQ29kZTEtMi01LTUtMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVBDU2hpcHBpbmdDb250YWluZXJDb2RlMS0yLTUtNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVBDU3VmZml4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVUENTdWZmaXgtRGVmaW5lc1BhY2tpbmdWYXJpYXRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVc2VyLURlZmluZWRTaGlwcGluZ0NvbnRhaW5lcklkZW50aWZpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVWTVJQTUxpbmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVVk1VTGluZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmFyaWFibGVNZWFzdXJlUHJvZHVjdENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhcnlJdGVtUHJvZHVjdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVoaWNsZU1haW50ZW5hbmNlUmVwb3J0aW5nU3RhbmRhcmRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZW5kb3JBbHBoYW51bWVyaWNTaXplQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVuZG9yQ29sb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlbmRvckdyb3VuZFNoYWRlSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVuZG9ySXRlbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVuZG9yc0NhdGFsb2dOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlbmRvcnNJdGVtTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZW5kb3JzUGFydE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVuZG9yc0Jhc2ljVW5pdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVuZG9yc0VuZ2luZWVyaW5nQ2hhbmdlTGV2ZWxOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlbmRvcnNPcmRlck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVuZG9yU3BlY2lmaWNhdGlvbk51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVuZG9yc1N0eWxlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZW5kb3JzU3VwcGxlbWVudGFsSXRlbU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmludGFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVm9sdW1lU2V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWb2x1bWVUeXBlSWRlbnRpZmljYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWb2x1bWVVc2FnZUlkZW50aWZpY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FmZXJMb3RJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWxsTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaGVlbENoYWlyTGlmdFNlcmlhbE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29vbGVuQ3V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb29sZW5SdW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldvcmtUYXNrTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JrVW5pdE51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29ybGRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJZYXJuQ291bnQtRW5nbGlzaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWWFybkNvdW50LU1ldHJpYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWWFybkNvdW50V29yc3RlZCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUHJvZHVjdElkZW50aWZpZXJDb2RlZCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iUHJvZHVjdElkZW50aWZpZXJDb2RlZCIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mUHJvZHVjdElkZW50aWZpZXJDb2RlZCIgdHlwZT0iTGlzdE9mUHJvZHVjdElkZW50aWZpZXJDb2RlZCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mSXRlbUNoYXJhY3RlcmlzdGljIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJJdGVtQ2hhcmFjdGVyaXN0aWMiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZkl0ZW1DaGFyYWN0ZXJpc3RpYyIgdHlwZT0iTGlzdE9mSXRlbUNoYXJhY3RlcmlzdGljIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJdGVtQ2hhcmFjdGVyaXN0aWMiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iSXRlbUNoYXJhY3RlcmlzdGljQ29kZWQiIHR5cGU9Ikl0ZW1DaGFyYWN0ZXJpc3RpY0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ikl0ZW1DaGFyYWN0ZXJpc3RpY0NvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlN1cmZhY2VMYXllclBvc2l0aW9uQ29kZWQiIHR5cGU9IlN1cmZhY2VMYXllclBvc2l0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU3VyZmFjZUxheWVyUG9zaXRpb25Db2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSXRlbUNoYXJhY3RlcmlzdGljVmFsdWUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iSWRlbnRpZmllciIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJVbml0T2ZNZWFzdXJlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJMaXN0T2ZEaW1lbnNpb24iLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikl0ZW1DaGFyYWN0ZXJpc3RpYyIgdHlwZT0iSXRlbUNoYXJhY3RlcmlzdGljIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ikl0ZW1DaGFyYWN0ZXJpc3RpY0NvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRpdGlvbmFsU2VjdG9yaWFsQ2hhcmFjdGVyaXN0aWNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsY29ob2xCZXZlcmFnZUNsYXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGNvaG9sQmV2ZXJhZ2VUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxveSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW5hdG9taWNhbE9yaWdpbk9mU2FtcGxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBlYXJhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcnRpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2VtYmx5UmVxdWlyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFsYW5jZU91dEFydGljbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhc2lzV2VpZ2h0U2l6ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVoaW5kLXRoZS1Db3VudGVyRHJ1Z3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJldmVyYWdlQWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZXZlcmFnZUJyYW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZXZlcmFnZUNhdGVnb3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZXZlcmFnZUNvbnRhaW5lckNoYXJhY3RlcmlzdGljcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmV2ZXJhZ2VGbGF2b3VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZXZlcmFnZVNlZ21lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbmRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvdHRvbWhvbGVMb2NhdGlvbk1ldGhvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm90dG9taG9sZVByZXNzdXJlTWV0aG9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcmFuZEdyb3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcmFuZEdyb3VwLUFHcm91cGluZ09mU2ltaWxhckJyYW5kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVyZWF1b2ZBbGNvaG9sVG9iYWNjb0FuZEZpcmVhcm1zQ2xhc3NDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXJlYXVPZkFsY29ob2xUb2JhY2NvQW5kRmlyZWFybXNUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5ZXJzQ29sb3JEZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5ZXJzSXRlbVNpemVEZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzaW5nLUxpbmVyLVR1YmluZ1R5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2luZ09yTGluZXJUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0ZU9mQ29uZm9ybWl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhc3NpcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hlbWljYWxGYW1pbHlOYW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGVtaXN0cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNJRC1Db21tZXJjaWFsSXRlbURlc2NyaXB0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2F0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2F0aW5nT3JQYWludFN5c3RlbUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvYXRpbmdPclBhaW50U3lzdGVtTmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29sbGF0ZXJhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29sbGVjdGlvbk1ldGhvZENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xvci1Mb3dlckJvZHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbG9yLVVwcGVyQm9keSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWVyY2lhbFN0YXR1cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbW9uQ2hlbWljYWxOYW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wYW55RmllbGRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wbGlhbmNlTWV0aG9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wb3NlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uZGl0aW9uZWRDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zdHJ1Y3Rpb25NZXRob2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnN1bWFibGVSZXNvdXJjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc3VtZXJJbnN0cnVjdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyb2xJdGVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cm9sbGVkU3Vic3RhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cm9sbGVkU3Vic3RhbmNlLUNsYXNzMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJvbGxlZFN1YnN0YW5jZS1DbGFzczNOYXJjb3RpYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJvbGxlZFN1YnN0YW5jZS1DbGFzczNOTm9uLW5hcmNvdGljIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cm9sbGVkU3Vic3RhbmNlLUNsYXNzNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJvbGxlZFN1YnN0YW5jZS1DbGFzczUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvb3JkaW5hdGVEZXNjcmlwdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvb3JkaW5hdGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3Jyb3Npb25SZXNpc3RhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VwbGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudEFydGljbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnJlbnRBcnRpY2xlU3BhcmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zU3BlY2lmaWNhdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhbWFnZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhbWFnZUZhdWx0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZW5pZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbnNpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpbWVuc2lvbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXJlY3Rpb25hbEluZGljYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzcGVyc2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9zYWdlRm9ybSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJ1Z0VmZmljYWN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcnVnRWZmaWNhY3lTdHVkeUltcGxlbWVudGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEeWVMb3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR5ZUxvdERlc2NyaXB0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFZGdlVHJlYXRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFZGl0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFZGl0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVsZWN0cmljYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVsZWN0cm9uaWNhbGx5Q2xlYW5lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWxlY3Ryb25pY0ZpZWxkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmRzLVNsaXR0aW5nLVNwbGl0dGluZy1DdXR0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmRUcmVhdG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZFVzZUFwcGxpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmdpbmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZ2luZXdpdGhUcmFuc21pc3Npb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXNjcm93Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXVyb3BlYW5Db21tdW5pdHlSaXNrQ2xhc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhYnJpYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFicmljRGVzY3JpcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhaWx1cmVBbmFseXNpc1Byb2Nlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZFRFNQRUMtRmVkZXJhbFNwZWNpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZFRC1TVEQtRmVkZXJhbFN0YW5kYXJkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlicmVUb3ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpZWxkQ29kZS1FSUFPckRPRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmllbGRUZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaWxhbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlsdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5pc2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmlzaE9yU3VyZmFjZVJvdWdobmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxhdm9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbG93Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbHVpZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9sZENvbmZpZ3VyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVjYXN0RGV2aWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JtaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JtdWxhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmFncmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1ZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1bmN0aW9uYWxQZXJmb3JtYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnVydGhlcklkZW50aWZ5aW5nQ2hhcmFjdGVyaXN0aWMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdlbmVyYWxEZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VuZXJhbE1lcmNoYW5kaXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW5lcmFsUHJvZHVjdEZvcm0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdlbmVyaWNEcnVnIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb29kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JhZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdyYWluRGlyZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmFwZVZhcmlldHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhemFyZG91c01hdGVyaWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYXphcmRSYXRpbmdTeXN0ZW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYWx0aEFuZEJlYXV0eUFpZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYXRUcmVhdE9yQW5uZWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIeWRyYXVsaWNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmdyZWRpZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbml0aWFsU2FtcGxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmplY3RhYmxlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS2V5LVdvcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFib3VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJvdXJEb3VibGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJvdXJPdmVydGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhZE9yQ29wcGVyU2FtcGxlVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhc2VkUmVzb3VyY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpbWl0aW5nT3BlcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMdXN0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hY2hpbmVSdW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hZ25ldGljIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWpvckdyYWRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW51ZmFjdHVyaW5nTWV0aG9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW51ZmFjdHVyaW5nUHJvY2VzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFya2V0U2VnbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFya2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0ZXJpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFsQ2xhc3NpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFsRGVzY3JpcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFsUmVzb3VyY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFsU3RhdHVzLU91dHNpZGVQcm9jZXNzb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lY2hhbmljYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYWxTdXBwbGllcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWV0YWxsb2dyYXBoaWMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1JTFNQRUMtTWlsaXRhcnlTcGVjaWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNTVNCTE0tSW5kaWFuTGFuZFByb3BlcnR5T3JVbml0TnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb2lzdHVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTXVsdGktTWVkaWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik11c2ljU3R5bGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik11dHVhbGx5RGVmaW5lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV3QXJ0aWNsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uLUhhemFyZG91c01hdGVyaWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tUHJlc2NyaXB0aW9uRHJ1ZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uUmVjdXJyaW5nUmVzb3VyY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51dHJpdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2Jzb2xldGVBcnRpY2xlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZG9yaXplZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3B0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZW50YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyRGlyZWN0UmVzb3VyY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyUGh5c2ljYWxEZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3Zlci10aGUtQ291bnRlckRydWciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhY2thZ2VJbnRlZ3JpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcmFtZXRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF0dGVybiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyY2VudGFnZU9mQWxjb2hvbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyZm9yYXRpb25Db250aW51aXR5SW5kaWNhdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJmb3JhdGlvbkludGVydmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJmb3JhdGlvblR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBoeXNpY2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaHlzaWNhbEZvcm0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBoeXNpY2FsRm9ybS1BZXJvc29sIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaHlzaWNhbEZvcm0tQXNEaWx1dGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaHlzaWNhbEZvcm0tQ29uY2VudHJhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBoeXNpY2FsRm9ybS1FbXVsc2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGh5c2ljYWxGb3JtLUdhcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGh5c2ljYWxGb3JtLUxpcXVpZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGh5c2ljYWxGb3JtLVBvd2RlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGh5c2ljYWxGb3JtLVNlbWlzb2xpZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGh5c2ljYWxGb3JtLVNvbGlkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaXBlQ291cGxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpcGVsaW5lU3RyZWFtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVjYXV0aW9uYXJ5SW5zdHJ1Y3Rpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVzY3JpcHRpb25EcnVnIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVzZW50YXRpb25FZmZlY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXNlcnZhdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWFyeUdyYXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmludE9yaWVudGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcml2YXRlTGFiZWxOYW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9jZXNzQWN0aW9uVGFrZW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2Nlc3NPclByb2R1Y3Rpb25Vbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0QXBwbGljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3REYXRhQmFzZU1hbmFnZW1lbnREZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdExpZmVDeWNsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZ3JhbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdFN1YmplY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21vdGlvbmFsRXZlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21vdGlvbmFsT2ZmZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb29mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9wcmlldGFyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVibGljSW5mb3JtYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1Ymxpc2hlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHVyZUZvcm0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1dC11cERlc2NyaXB0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFsaXR5QXNzdXJhbmNlU3RhdHVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFsaXR5LVF1YWxpdHlMZXZlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjb3JkaW5nTWVkaXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWN1cnJpbmdSZXNvdXJjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjeWNsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmdXJiaXNoZWRBcnRpY2xlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWd1bGF0b3J5T3JTdGF0ZURpc3RyaWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWd1bGF0b3J5LVN0YXRlT3JFbnRpdHlDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWluc3RhdGVkQXJ0aWNsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVqZWN0aW9uUmVhc29uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNlcnZvaXJDb2RlLUNvbXBhbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3VsdHNNZXRob2RDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXZpc2VkQXJ0aWNsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV2aXNlZERlc2lnbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm91dGVPZkFkbWluaXN0cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYW1wbGVUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRhcnlHcmFwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VjcmV0T3JDb25maWRlbnRpYWxJbmZvcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VjdGlvblByb2ZpbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcmllc1RpdGxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlRmVhdHVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoYWRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGVsZi1MaWZlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hlbGZUYWciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwaW5nVW5pdENvbXBvbmVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcFRvTGluZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcFRvU3RvY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpbGhvdWV0dGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpemUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpemVTeXN0ZW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvY2lldHlHb3Zlcm5tZW50QW5kT3JDdXN0b21lclNwZWNpZmljYXRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb2x1YmlsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb3VyY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxQcm9jZXNzaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsU3BlY2lmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVDb250cm9sbGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9yYWdlQW5kRGlzcGxheSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3ViY29udHJhY3RSZXNvdXJjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3ViLVByb2R1Y3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cmZhY2VDb25kaXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cmZhY2VMb2NhdGlvbk1ldGhvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VyZmFjZVByb3RlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cmZhY2VUcmVhdG1lbnQtQ2hlbWljYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cmZhY2VUcmVhdG1lbnQtTWVjaGFuaWNhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3lub255bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVtcGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXN0aW5nQW5kSW5zcGVjdGlvbkFnZW5jaWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXN0UGFuZWxUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXN0U2FtcGxlRGlyZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXN0U2FtcGxlRnJlcXVlbmN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXN0U2FtcGxlTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoZW9yZXRpY2FsV2VpZ2h0Rm9ybXVsYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhlcmFwZXV0aWNDbGFzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhlcmFwZXV0aWNFcXVpdmFsZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhyZXNob2xkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaXRsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGl0bGVJbnN1cmFuY2VGb3JtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWRlTmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNsYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNtaXNzaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmltIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUd2lzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZUFuZE9yUHJvY2VzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZWZhY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR5cGVPZlNhbXBsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHlwZU9mVGVzdC1JbnNwZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUeXBlU3Bpbm5pbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlaGljbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlbmRvckNvbG9yRGVzY3JpcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlbmRvclNpemVEZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmludGFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmlzdWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWb2xhdGlsZU9yZ2FuaWNDb21wb3VuZENvbnRyb2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZvbHVtZVRpdGxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJyYW50eURlc2NyaXB0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJyYW50eVR5cGVEZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FzdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldheENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldlbGRzT3JTcGxpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWxsQ2xhc3NpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldlbGxEaXJlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldlbGxQZXJmb3JhdGlvbkNvbnRpbnVpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldlbGxQZXJmb3JhdGlvbkludGVydmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWxsVGVzdFR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldpbmRpbmdJbnN0cnVjdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldpbmVGcnVpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2luZUdyb3dpbmdSZWdpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Illhcm5Db3VudCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJTdXJmYWNlTGF5ZXJQb3NpdGlvbkNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhY2tPZkNhYiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsYXRlcmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCbG9jayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9sc3RlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm90aFNpZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3R0b20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyaWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXNpbmdIZWFkRmxhbmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZW50ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcm5lckRpYWdvbmFscyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG91YmxlRW5kT3ZlcmhhbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvd25zdHJlYW1UYXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1YWxGdWVsVGFua1Bvc2l0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXh0ZXJpb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyb250Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcm9udFNwYXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnNpZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc2lkZUxlZnRSZWFyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnNpZGVSaWdodFJlYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVyaW9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLZWxseUJ1c2hpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlZnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlZnRGcm9udCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVmdFJlYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxlc3NDcml0aWNhbFN1cmZhY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxvd2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaWRkbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vcmVDcml0aWNhbFN1cmZhY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik11bHRpcGxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXh0UmVsYXRpdmVQb3NpdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90U3BlY2lmaWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZTdXJmYWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbmVTaWRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPblN1cmZhY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wcG9zaXRlQ29ybmVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0c2lkZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0c2lkZUxlZnRSZWFyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdXRzaWRlUmlnaHRSZWFyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdmVyYWxsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWFyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWFyU3BhcmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb24xIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uMTAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb24xMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjEyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uMTMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb24xNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjE1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uMTYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb24xNyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjE4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uMTkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb24yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uMjAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb24yMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjIyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uMjMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb24yNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjI1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uMjYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb24yNyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjI4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uMjkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb24zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uMzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb24zMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjMyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uMzMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb24zNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjM1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uMzYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb24zNyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjM4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uMzkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb240Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uNDAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb240MSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjQyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uNDMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb240NCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjQ1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uNDYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb240NyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjQ4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uNDkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb241Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uNTAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb242Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGl2ZVBvc2l0aW9uNyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVQb3NpdGlvbjgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF0aXZlUG9zaXRpb245Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSaWdGbG9vciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJpZ2h0RnJvbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJpZ2h0UmVhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2lkZU9uZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2lkZVR3byIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2lkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaW5nbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpbmdsZUVuZE92ZXJoYW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTb2x1YmxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGFyZVRpcmVQb3NpdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhcmJvYXJkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9uZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3R1Y2NvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWItU2VhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYW5rQm90dG9tIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb290aEJ1Y2NhbFN1cmZhY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvb3RoRGlzdGFsU3VyZmFjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG9vdGhGYWNpYWxTdXJmYWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb290aEluY2lzYWxTdXJmYWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb290aExpbmd1YWxTdXJmYWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb290aE1lc2lhbFN1cmZhY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvb3RoT2NjbHVzYWxTdXJmYWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3AiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR3b1NpZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmRlckNhYiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pbGF0ZXJhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVXBwZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVwc3RyZWFtVGFwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb29kIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJVbml0T2ZNZWFzdXJlbWVudCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVU9NQ29kZWQiIHR5cGU9IlVPTUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlVPTUNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlVuaXRPZk1lYXN1cmVtZW50IiB0eXBlPSJVbml0T2ZNZWFzdXJlbWVudCIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJVT01Db2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iOCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMTAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjExIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMTQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjE1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxNiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMTciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjE4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxOSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMjAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjIxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIyMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMjMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjI0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIyNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMjYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjI3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIyOCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMjkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjMwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIzMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMzIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjMzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIzNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMzUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjM2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIzNyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMzgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjQwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0MSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNDMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjQ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNDYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjQ3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0OCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNTAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjUxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI1MyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNTQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjU2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI1NyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNTgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjU5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI2MCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNjEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjYyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI2MyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNjQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjY2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI2OSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNzEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjcyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI3MyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNzQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ijc2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI3NyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNzgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjgwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI4MSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iODQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ijg1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI4NiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iODciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ijg5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI5MCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iOTEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjkyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI5MyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iOTQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ijk1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI5NiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iOTciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ijk4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMUIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjFDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMUUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjFGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMUgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjFJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxSiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMUsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjFMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMVgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjJBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIyQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMkMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjJGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIyRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMkgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjJJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIySiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMksiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjJMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIyTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMk4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjJQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIyUSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMlIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjJVIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIyViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMlciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjJYIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIyWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMloiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjNCIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIzQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iM0UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjNGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIzRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iM0giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjNJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0QSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNEIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjRDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0RSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNEciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjRIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0SSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNEoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjRLIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0TCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNE0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjROIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0TyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNFAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjRRIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0UiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNFQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjRVIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0VyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNFgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjVBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI1QiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNUMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjVFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI1RiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNUciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjVIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI1SSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNUoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjVLIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI1UCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNVEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkExIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBMTAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkExMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTEyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBMTMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkExNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTE1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBMTYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkExNyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTE4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBMTkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkEyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBMjAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkEyMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTIzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBMjQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkEyNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTI2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBMjciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkEyOCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTI5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTMwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBMzEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkEzMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTMzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBMzQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkEzNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTM2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBMzciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkEzOCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTM5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTQwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNDEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE0MiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTQzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNDQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE0NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTQ3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNDgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE0OSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE1MCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTUxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNTIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE1MyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTU0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE1NiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTU3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNTgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNjAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE2MSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTYyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNjMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE2NCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTY1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNjYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE2NyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTY4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNjkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE3MSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTczIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNzQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE3NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTc2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBNzciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE3OCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTc5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBOCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTgwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBODEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE4MiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTgzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBODQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE4NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTg2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBODciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE4OCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTg5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBOSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTkwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBOTEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE5MyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTk0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBOTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkE5NiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQTk3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBOTgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUNSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFLIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQU0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFNSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQU1QIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQU5OIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVBaIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBUSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFSRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFTTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVNVIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVRNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBVFQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFVIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFYIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkIwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjExIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCMTIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkIxMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjE0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCMTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkIxNiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjE4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjIwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCMjEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkIyMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjIzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCMjQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkIyNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjI2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCMjciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkIyOCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjI5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjMxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCMzIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkIzMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjM0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCMzUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkIzNiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjM3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCMzgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkIzOSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI0MCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjQxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNDIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI0MyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjQ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNDUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI0NiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjQ3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNDgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI0OSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI1MCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjUxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNTIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI1MyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjU0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI1NiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjU3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNTgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI1OSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI2MCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjYxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNjIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI2MyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjY0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNjUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI2NiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjY3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNjkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI3MSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjcyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNzMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI3NCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjc1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNzYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI3NyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjc4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCNzkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCODEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI4MyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjg0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCODUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI4NiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjg3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCODgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI4OSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI5MCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjkxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCOTIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI5MyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjk0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCOTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI5NiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQjk3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCOTgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkI5OSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQkFSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQkQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCRlQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQkhQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCSUwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJKIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQkwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJMRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQkxMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJRTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJUVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJVQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlVJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCVyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJaIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkMxMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzExIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDMTIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkMxMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzE0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDMTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkMxNiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzE3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDMTgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkMxOSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkMyMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzIyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDMjMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkMyNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzI1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDMjYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkMyNyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzI4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDMjkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkMzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDMzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkMzMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzMyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDMzMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkMzNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzM1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDMzYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkMzOCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzM5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzQwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNDEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM0MiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzQzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNDQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM0NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzQ2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNDciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM0OCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzQ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzUwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNTEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM1MiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzUzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNTQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM1NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzU2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNTciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM1OCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzU5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzYwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNjEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM2MiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzYzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNjQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM2NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzY2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNjciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM2OCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzY5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzcwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNzEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM3MiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzczIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNzUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM3NiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzc3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDNzgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDODAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM4MSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzgyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDODMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM4NCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzg1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDODYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM4NyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzg4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDODkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDOTAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM5MSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzkyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDOTMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM5NCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzk1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDOTYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkM5NyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQzk4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDOTkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDQ1QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDREwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDRUwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNFTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNHTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNKIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0tHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0xGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDTFQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNNSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ01RIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDTVQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNOUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ05UIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ09VIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDUSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ1RNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ1VSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ1dBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDV0kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNZIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDWiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQxMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDEyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEMTMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQxNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDE2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEMTciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQxOCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDE5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDIwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEMjEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQyMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDIzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEMjQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQyNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDI2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEMjciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQyOCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDI5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEMzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQzMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDMzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEMzQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQzNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDM3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEMzgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQzOSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDQwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJENDEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ0MiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDQzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJENDQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ0NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDQ2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJENDciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ0OCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDQ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJENSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDUwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJENTEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ1MiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDUzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJENTQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ1NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDU2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJENTciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ1OCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDU5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJENiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDYwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJENjMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ2NCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDY1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJENjYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ2NyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDY5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJENyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDcwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJENzEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ3MiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDczIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJENzQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ3NSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDc2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJENzciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ3OSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ4MCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDgxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEODIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ4MyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDg1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEODYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ4NyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDg4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEODkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEOTAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ5MSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDkyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEOTMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ5NCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDk1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEOTYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkQ5NyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRDk4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEOTkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRBQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iREFEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEQVkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRCIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iREQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJERUMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJERyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iREgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJESiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRExUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJETUsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRNUSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRE1UIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJETiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRE8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRQQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRFBSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEUFQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRRIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRFJBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEUkkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRSTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRFJNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRFQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRUTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRFUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRXVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRFgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRZIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEWk4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRaUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRTIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkUzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkU5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRUIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRVEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVWIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFWCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRVoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkYxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGOSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRkFIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGQVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZCIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRkQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGRiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRkciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRk0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZPIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGT1QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRlMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZUSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRlRRIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGWiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRzIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkczIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRzciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdCIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHQlEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHRkkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHR1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0lBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHSUkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdKIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdMRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR0xJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHTEwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR08iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHUSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR1JNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHUk4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdSTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR1JUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR1YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdXIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHV0giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdZIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHWiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSDEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkgyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSEFSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIQkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhCWCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSEMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSEYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhHTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSEgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJISVUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhKIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJISyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSEwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhMVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSE0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhNUSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSE1UIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJITiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSE8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIUEEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSFRaIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIVVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhWIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIVyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSFkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSUMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJRiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSUkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSU5IIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJTksiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklOUSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklXIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSkIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkpFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKRyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSksiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkpNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSk9VIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSzEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IksyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSzUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Iks2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS0IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktCQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS0QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktFTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS0YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLR00iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktHUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS0haIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS0oiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktKTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS0siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLTUgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktNSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS01RIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLTkkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktOUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS05UIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS1BBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLUEgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktQTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS1BQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS1MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktTRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS1NIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS01UIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLVE4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktVUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS1ZBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLVlIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktWVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS1ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktXSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iS1dUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLWCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTDIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMQlIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxCVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTEMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTEVGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMRiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTEciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTEoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxLIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTE4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxPIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTFBBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTFMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxUTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTFRSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMVU0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxVWCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTFgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxZIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTTEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik0yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik03Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNOSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1BTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUFNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNQVciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1CIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNQkUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1CRiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUJSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUNVIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1HTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1IWiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1JSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUlMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNSU4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1JTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUlVIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUxEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNTFQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1NSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTU1RIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNTVQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1PTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTVBBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNUSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTVFIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNUVMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1TSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTVQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1USyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTVRRIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNVFIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1UUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTVYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1WQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTVciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1XSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTVgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1ZIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNWiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTjEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik4yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5BUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5CQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5DTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5FIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJORVciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5GIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJORyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTkgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5JIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOSVUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5KIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTk1JIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOTVAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5OIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOUEwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5QUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTlBUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOUSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTlIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5STCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTlQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5UVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTlUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5WIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOWCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTlkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9BIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPSE0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9OIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPTloiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9QIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT1oiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9aQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT1pJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUDEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlAyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUDQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlA1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQNiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUDciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlA4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQOSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUEEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBBTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUEIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUEYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQR0wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUEwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUE8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBRIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUFMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQVEQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBUSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUFRMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUFYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBXIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQWSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUFoiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlExIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUTMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlE0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUTYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlE3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUUFOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlFIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlFTIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUVREIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRVEkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlFUTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUVRSIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUjQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlI1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSNiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUjkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUkciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSSyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUkwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUk8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSUE0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJQUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUlMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSVSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUzMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlM0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUzYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlM3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTOCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNBTiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0NPIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTQ1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0VDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTRVQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNHIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTSFQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNJRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTTUkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNOIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTTyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1AiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNRIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNTVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNUSSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1ROIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTViIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNYIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVDEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlQyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVDQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlQ1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUNiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVDciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlQ4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUOSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVEEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRBSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVEMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlREIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJURSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVEYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUSiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVEsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRMIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVE4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRORSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVFAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRQUiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVFEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRRRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVFIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRSTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVFMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRTRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVFNIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVFUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRWIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUVyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVFkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlUxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVTMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlU1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVUIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVUUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVGIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVSCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVUwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVkMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWTFQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZRIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVlQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlcyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV0EiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldCIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXQ0QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldFIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXRUIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldFRSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV0ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldIIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXSFIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldJIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV1IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldTRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV1RUIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXVyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWDEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IllESyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWURRIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJZTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWVJEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJZVCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWjEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IloyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJaMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWjQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ilo1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJaNiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWjgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlpQIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZEaW1lbnNpb24iPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9IkRpbWVuc2lvbiIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mRGltZW5zaW9uIiB0eXBlPSJMaXN0T2ZEaW1lbnNpb24iLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkRpbWVuc2lvbiI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJNZWFzdXJlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkRpbWVuc2lvbkNvZGVkIiB0eXBlPSJEaW1lbnNpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJEaW1lbnNpb25Db2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJEaW1lbnNpb24iIHR5cGU9IkRpbWVuc2lvbiIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWVhc3VyZW1lbnQiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDpjaG9pY2U+Ci0gICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTWVhc3VyZW1lbnRWYWx1ZSIvPgotICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ik1lYXN1cmVtZW50UmFuZ2UiLz4KLSAgICAgICAgICAgIDwveHNkOmNob2ljZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlVuaXRPZk1lYXN1cmVtZW50Ii8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNZWFzdXJlbWVudCIgdHlwZT0iTWVhc3VyZW1lbnQiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ik1lYXN1cmVtZW50VmFsdWUiPgotICAgICAgICA8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6ZGVjaW1hbCI+Ci0gICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iU2lnbmlmaWNhbmNlQ29kZWQiIHR5cGU9IlNpZ25pZmljYW5jZUNvZGUiIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJTaWduaWZpY2FuY2VDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iQ29uZGl0aW9uc0NvZGVkIiB0eXBlPSJDb25kaXRpb25zQ29kZSIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkNvbmRpdGlvbnNDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgIDwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ik1lYXN1cmVtZW50VmFsdWUiIHR5cGU9Ik1lYXN1cmVtZW50VmFsdWUiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iU2lnbmlmaWNhbmNlQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcHJveGltYXRlbHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWFsVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdyZWF0ZXJUaGFuT3JFcXVhbFRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmVhdGVyVGhhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVzc1RoYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxlc3NUaGFuT3JFcXVhbFRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RFcXVhbFRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1ZVZhbHVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPYnNlcnZlZFZhbHVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdXRPZlJhbmdlIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkNvbmRpdGlvbnNDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2hlcmVBaXJFcXVhbHMxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaGVyZUJ1dHlsQWNldGF0ZUVxdWFsczEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldoZXJlSDJPRXF1YWxzMU9yV2F0ZXJFcXVhbHMxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3JyZWN0ZWRUbzYwRGVncmVlc0ZhaHJlbmhlaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldoZXJlVG9sdWVuZUVxdWFsczEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhcG9ySW5BaXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhcG9ySW5PdGhlclRoYW5BaXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YW5kYXJkVGVtcGVyYXR1cmVBbmRQcmVzc3VyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uZGl0aW9uc090aGVyVGhhblN0YW5kYXJkVGVtcGVyYXR1cmVBbmRQcmVzc3VyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5FdGh5bEFsY29ob2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluRXRoeWxFdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5XYXRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXQxQXRtb3NwaGVyZVByZXNzdXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaGVyZUV0aGVyRXF1YWxzMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0dWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVkaWN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpci1EcmllZEJhc2lzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcy1SZWNlaXZlZEJhc2lzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcnlCYXNpcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aWxpYnJpdW1CYXNpcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9pc3R1cmVBbmRBc2gtRnJlZUJhc2lzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPeGlkaXppbmdBdG1vc3BoZXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWR1Y2luZ0F0bW9zcGhlcmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbGN1bGF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjYWxlZFdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmF0Y2hldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2F0dXJhdGVkVmFwb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuY29uZGl0aW9uYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNob3J0LVRlcm0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpbWUtV2VpZ2h0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcnJlY3RlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5jb3JyZWN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZlBlYWsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9uUGVhayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJtZWRpYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdmVyYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJHYWxsb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaW11bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlZG9taW5hbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3N0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZW5hbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik93bmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JTYWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWFsRXN0YXRlT3duZWRPckNvcnBvcmF0ZU93bmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb2FyZGVkT3JCbG9ja2VkVXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW5uZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBsZXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29sZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVudGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50TGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWZmZWN0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaXN0V2hlblNvbGQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbExpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzSXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzUmVwYWlyZWRPckltcHJvdmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN0YW50YW5lb3VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3ciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxvd1RvR29vZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG93VG9IaWdoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3dUb01lZGl1bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG93VG9Nb2RlcmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpdW1Ub0dvb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGl1bVRvSGlnaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9kZXJhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vZGVyYXRlVG9Hb29kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb2RlcmF0ZVRvSGlnaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9kZXJhdGVUb01lZGl1bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZFRvSGlnaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGlnaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVkZ2V0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVjYXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxsb2NhdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmNyZWFzaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFibGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlY2xpbmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvdGVudGlhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9kZWxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVhc3VyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1heGltdW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1bW1lck9uLVBlYWsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1bW1lck1pZC1QZWFrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdW1tZXJPZmYtUGVhayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VtbWVyU3VwZXJPbi1QZWFrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdW1tZXJTdXBlck9mZi1QZWFrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaW50ZXJPbi1QZWFrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaW50ZXJNaWQtUGVhayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2ludGVyT2ZmLVBlYWsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldpbnRlclN1cGVyT24tUGVhayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2ludGVyU3VwZXJPZmYtUGVhayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VtbWVyRGF5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdW1tZXJOaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2ludGVyRGF5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaW50ZXJOaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VtbWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaW50ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRheSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlYWstMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVhay0zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZWFrLTQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNob3VsZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25UaW1lUmVsYXRlZERlbWFuZCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWVhc3VyZW1lbnRSYW5nZSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJNaW5pbXVtVmFsdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ik1heGltdW1WYWx1ZSIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWVhc3VyZW1lbnRSYW5nZSIgdHlwZT0iTWVhc3VyZW1lbnRSYW5nZSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWluaW11bVZhbHVlIj4KLSAgICAgICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOmRlY2ltYWwiPgotICAgICAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IlNpZ25pZmljYW5jZUNvZGVkIiB0eXBlPSJTaWduaWZpY2FuY2VDb2RlIiB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iU2lnbmlmaWNhbmNlQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkNvbmRpdGlvbnNDb2RlZCIgdHlwZT0iQ29uZGl0aW9uc0NvZGUiIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJDb25kaXRpb25zQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgICAgPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNaW5pbXVtVmFsdWUiIHR5cGU9Ik1pbmltdW1WYWx1ZSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTWF4aW11bVZhbHVlIj4KLSAgICAgICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOmRlY2ltYWwiPgotICAgICAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IlNpZ25pZmljYW5jZUNvZGVkIiB0eXBlPSJTaWduaWZpY2FuY2VDb2RlIiB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iU2lnbmlmaWNhbmNlQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkNvbmRpdGlvbnNDb2RlZCIgdHlwZT0iQ29uZGl0aW9uc0NvZGUiIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJDb25kaXRpb25zQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgICAgPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNYXhpbXVtVmFsdWUiIHR5cGU9Ik1heGltdW1WYWx1ZSIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJEaW1lbnNpb25Db2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc29saWRhdGVkV2VpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0TmV0V2VpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0R3Jvc3NXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsTmV0V2VpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbEdyb3NzV2VpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJdGVtR3Jvc3NXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ldE5ldFdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZVbml0c1BlclBhbGxldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmF0Q29udGVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV0V2VpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcm9zc1Rvbm5hZ2VPZlRoZVZlc3NlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV0VG9ubmFnZU9mVGhlVmVzc2VsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIdW1pZGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVm9sdGFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG93ZXJDb25zdW1wdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhdERpc3NpcGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJGbG93Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaG9ja0ltcGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3BlcmF0aXZlVGVtcGVyYXR1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbk9wZXJhdGl2ZVRlbXBlcmF0dXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcm9zc1ZvbHVtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV0Vm9sdW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXRlckNvbnRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbnNpbGVTdHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpYnJvc2l0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2F1Z2VMZW5ndGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhZGl1cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RyYWlnaHRuZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdHJhaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZvbHVtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXRlbVdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2VpZ2h0T2ZDb252ZXlhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb252ZXlhbmNlU3VtbWVyRGVhZFdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyaXplZENhcmdvT25WZXNzZWxzV2VpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tQ29udGFpbmVyaXplZENhcmdvT25WZXNzZWxzV2VpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWlnaHRBc2NlcnRhaW5lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlYWJsZVdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXN0aW1hdGVkR3Jvc3NXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZFZvbHVtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVzc2VsT3ZlcmFsbExlbmd0aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hZGluZ01ldGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZBeGxlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bG9hZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhcnRQb3NpdGlvbkluVGhlTGVuZ3RoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmRQb3NpdGlvbkluVGhlTGVuZ3RoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFydFBvc2l0aW9uSW5UaGVXaWR0aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kUG9zaXRpb25JblRoZVdpZHRoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFydFBvc2l0aW9uSW5UaGVUaGlja25lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZFBvc2l0aW9uSW5UaGVUaGlja25lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydENvbnRhaW5lckFjdHVhbEZpbGxpbmdXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydENvbnRhaW5lck1heGltdW1DYXBhY2l0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVjbGFyZWROZXRXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYWRpbmdIZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YWNraW5nSGVpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYWxjdWxhdGVkV2VpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZXJyaXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXB1cml0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JhaW5TaXplIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYW50aGFuaWRlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWxhc3RpY2l0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJhaW5lZFdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FsbGl1bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3Ryb250aXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVpcG1lbnRTdG9yYWdlTGltaXRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFkaW9hY3RpdmVJbmRleE9mVHJhbnNwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWRpb2FjdGl2aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdmVyYWdlR3Jvc3NXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcndhcmREcmFmdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWZ0ZXJEcmFmdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0RXF1aXBtZW50R3Jvc3NXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsVHJhbnNwb3J0RXF1aXBtZW50R3Jvc3NXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjaWRpdHlPZkp1aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZW5ldHJvbWV0cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1cm9mZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikp1aWNlV2VpZ2h0UGVyMTAwR3JhbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZydWl0U2tpbkNvbG91ciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW5nbGVPZkJlbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpeGVkSW5jcmVtZW50YWxNZWFzdXJlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVyb2ZlbEQxMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVyb2ZlbEQyNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVyb2ZlbEQ1MCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bVN0YWNraW5nV2VpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcm9zc01lYXN1cmVDdWJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJjZW50YWdlRmF0Q29udGVudEluRHJ5TWF0dGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWNjaGFyb21ldHJpY0NvbnRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikh5ZHJhdGVDb250ZW50T2ZBbkFsY29ob2xpY1Byb2R1Y3RBZnRlckJvdHRsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbmh5ZHJvdXNDb250ZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpZWRXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxlZFdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJlYWtpbmdMb2FkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGF0aW51bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2lsdmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmltIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVlV2F0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbmRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbWVyaWNhblBldHJvbGV1bUluc3RpdHV0ZUdyYXZpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBldHJvbGV1bUdyb3NzT2JzZXJ2ZWRWb2x1bWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBldHJvbGV1bUdyb3NzU3RhbmRhcmRWb2x1bWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZvbHVtZVZhcmlhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXRyb2xldW1OZXRTdGFuZGFyZFZvbHVtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0ZXJpYWxPbi1Cb2FyZFF1YW50aXR5LUFmdGVyRGlzY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXRyb2xldW1Ub3RhbENhbGN1bGF0ZWRWb2x1bWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBldHJvbGV1bVRvdGFsT2JzZXJ2ZWRWb2x1bWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklubmFnZUdhdWdlRGlzdGFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBldHJvbGV1bU5ldFN0YW5kYXJkV2VpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWRpbWVudEFuZFdhdGVySW5QZXRyb2xldW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9ic2VydmVkUmVmZXJlbmNlSGVpZ2h0LVRhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVyZW5jZUhlaWdodC1UYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbGxhZ2VHYXVnZURpc3RhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmltQ29ycmVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm93VG9CcmlkZ2VEaXN0YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJpZ2h0bmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJha2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcmVhayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJlYWtpbmdTdHJlbmd0aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJlYWtpbmdTdHJlbmd0aFdldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFzaXNXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYW5nZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29sb3VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250ZW50c09mUGFja2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWVyY2lhbFdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29yZUxlbmd0aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzdGluYXRpb25XZWlnaHRBZ3JlZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpYW1ldGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWx0YVZhbHVlTCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVuc2l0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwdGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdGFuY2VCZXR3ZWVuUG9pbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaWR0aC1Cb3hjYXJEb29yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZWROZXdXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVsb25nYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlZmljaXRXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbGFtZW50Q291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvbmdpdHVkaW5hbEZsYXRuZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGF0bmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnN2ZXJzZUZsYXRuZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcm9zc1dlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2F1Z2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3NzV2VpZ2h0LU1heGltdW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhcmRuZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWlnaHQtTWF4aW11bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVpZ2h0RGltZW5zaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXBhY3RFbmVyZ3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc2lkZURpYW1ldGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWdhbFdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVuZ3RoLU1heGltdW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxlbmd0aERpbWVuc2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9zdEVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaW11bVdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9pc3R1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1heGltdW1XZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdHVhbE5ldFdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0c2lkZURpYW1ldGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVTdHJldGNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJUb25uZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVIdW1pZGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzaXN0aXZpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvY2t3ZWxsQyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhbVdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVkdWN0aW9uT2ZBcmVhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSdW4tUHJvY2VzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmF0aW8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwZWRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFyZVdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVtcGVyYXR1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaWNrbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGltZVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2VpZ2h0UGVyVW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVpZ2h0LVZhbkRvb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldpZHRoLVZhbkRvb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldlaWdodFBlclVuaXRPZkFyZWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldpZHRoRGltZW5zaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaWR0aC1NYXhpbXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldlaWdodFBlclVuaXRPZkxlbmd0aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2lkZUhlaWdodC1GbGF0QmVkV2l0aFJlbW92YWJsZVNpZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWlyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCbG9jayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3F1YXJlbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3Bvb2xTaXplIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJZaWVsZFN0cmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWx1bWluaXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcnNlbmljIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3JvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlzbXV0aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyYm9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYWxjaXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2x1bWJpdW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcml1bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hsb3JpbmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvYmFsdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hyb21pdW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcHBlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXJvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXJvblBsdXNTaWxpY29uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZXJtYW5pdW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikh5ZHJvZ2VuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3Rhc3NpdW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hZ25lc2l1bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFuZ2FuZXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb2x5YmRlbnVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOaXRyb2dlbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29kaXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOaW9iaXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOaWNrZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik94eWdlbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGhvc3Bob3J1cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VscGh1ciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW50aW1vbnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGVuaXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaWxpY29uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaWxpY2l1bU94eWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFudGFsaXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWxsdXJpdW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpdGFuaXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYW5hZGl1bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHVuZ3N0ZW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ildhc3RlQ29udGVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWmluYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWmlyY29uaXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9yYWdlVGVtcGVyYXR1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydFRlbXBlcmF0dXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJnb09wZXJhdGluZ1RlbXBlcmF0dXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFbWVyZ2VuY3lUZW1wZXJhdHVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0Q29udHJvbFRlbXBlcmF0dXJlIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJRdWFudGl0eSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmNob2ljZT4KLSAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJRdWFudGl0eVZhbHVlIi8+Ci0gICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUXVhbnRpdHlSYW5nZSIvPgotICAgICAgICAgICAgPC94c2Q6Y2hvaWNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iVW5pdE9mTWVhc3VyZW1lbnQiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlF1YW50aXR5IiB0eXBlPSJRdWFudGl0eSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUXVhbnRpdHlWYWx1ZSI+Ci0gICAgICAgIDx4c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgIDx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpkZWNpbWFsIj4KLSAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJTaWduaWZpY2FuY2VDb2RlZCIgdHlwZT0iU2lnbmlmaWNhbmNlQ29kZSIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IlNpZ25pZmljYW5jZUNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJDb25kaXRpb25zQ29kZWQiIHR5cGU9IkNvbmRpdGlvbnNDb2RlIiB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iQ29uZGl0aW9uc0NvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgICAgICAgIDwveHNkOmV4dGVuc2lvbj4KLSAgICAgICAgPC94c2Q6c2ltcGxlQ29udGVudD4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUXVhbnRpdHlWYWx1ZSIgdHlwZT0iUXVhbnRpdHlWYWx1ZSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUXVhbnRpdHlSYW5nZSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJNaW5pbXVtVmFsdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ik1heGltdW1WYWx1ZSIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUXVhbnRpdHlSYW5nZSIgdHlwZT0iUXVhbnRpdHlSYW5nZSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mUXVhbnRpdHlDb2RlZCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iUXVhbnRpdHlDb2RlZCIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mUXVhbnRpdHlDb2RlZCIgdHlwZT0iTGlzdE9mUXVhbnRpdHlDb2RlZCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUXVhbnRpdHlDb2RlZCI+Ci0gICAgICAgIDx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJRdWFudGl0eSI+Ci0gICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlF1YW50aXR5UXVhbGlmaWVyQ29kZWQiIHR5cGU9IlF1YW50aXR5UXVhbGlmaWVyQ29kZSIvPgotICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJRdWFudGl0eVF1YWxpZmllckNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDwveHNkOmV4dGVuc2lvbj4KLSAgICAgICAgPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlF1YW50aXR5Q29kZWQiIHR5cGU9IlF1YW50aXR5Q29kZWQiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iUXVhbnRpdHlRdWFsaWZpZXJDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjZXB0YWJsZVVuc2VydmljZWFibGVRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjaWRlbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudHNQYXlhYmxlQXZlcmFnZU92ZXJkdWVEYXlzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50c1BsYWNlZEZvckNvbGxlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFja25vd2xlZGdlZFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3RpdmVBY2NvdW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0aXZlQ29udHJhY3RzRGVsaW5xdWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0aXZlQ29udHJhY3RzRGVsaW5xdWVudC1CdXlpbmdQYXJ0eUNhdXNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0aXZlQ29udHJhY3RzRGVsaW5xdWVudC1Db250cmFjdG9yQ2F1c2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3RpdmVDb250cmFjdHNEZWxpbnF1ZW50LVVua25vd25DYXVzZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdGl2ZUluZ3JlZGllbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdGl2ZUluZ3JlZGllbnREb3NlUGVyVW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0aXZlSW5ncmVkaWVudERvc2VQZXJVbml0RGlzcGVuc2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3RpdmVMaW5lSXRlbXNEZWxpbnF1ZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3RpdmVMaW5lSXRlbXNEZWxpbnF1ZW50LUJ1eWluZ1BhcnR5Q2F1c2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3RpdmVMaW5lSXRlbXNEZWxpbnF1ZW50LUNvbnRyYWN0b3JDYXVzZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdGl2ZUxpbmVJdGVtc0RlbGlucXVlbnQtVW5rbm93bkNhdXNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0aXZlTGlzdGluZ3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdGl2ZU1haW50ZW5hbmNlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0aXZpdHlDb2RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0dWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3R1YWxEdXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0dWFsSG91cnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdHVhbFN0b2NrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3R1YWxVbml0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0dWFsVW5pdHNDdW11bGF0aXZlVG9EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRlZEVtcGxveWVlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkaXRpb25hbEFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkaXRpb25hbERlbWFuZFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRpdGlvbmFsUHJvbW90aW9uU2FsZXNGb3JlY2FzdFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRpdGlvbmFsUmVwbGVuaXNobWVudERlbWFuZFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRpdGlvbmFsVXNhZ2VRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRqdXN0ZWRDb3JyZWN0b3JSZWFkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RlZFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RlZFVuaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RtZW50VG9JbnZlbnRvcnlRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRtaW5pc3RyYXRvcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlQXREZWF0aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlZEFjdGl2ZUxpbmVJdGVtc0RlbGlucXVlbnQtQ29udHJhY3RvckNhdXNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlZExpbmVJdGVtc0NvbXBsZXRlZC1Db250cmFjdG9yQ2F1c2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ2VkTGluZUl0ZW1zRGVsaW5xdWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlSGlnaFZhbHVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ2VMb3dWYWx1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlTW9kaWZ5aW5nVW5pdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZU5lYXJlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZU5leHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlT2ZGaW5hbmNpYWxJbmZvcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdncmVnYXRlQmVuZWZpdFBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdyaWN1bHR1cmFsV29ya2VycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWlyY3JhZnRSYWRpb3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpcmxpbmVBdHRlbmRhbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxvY2F0ZWRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxsb3R0ZWRVc2FnZVF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbFRpbWVCdXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFtb3J0aXNhdGlvblF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbW9ydGl6YXRpb25DdW11bGF0ZWRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1vcnRpemF0aW9uT3JkZXJRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1vcnRpemF0aW9uVGVybSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW1vcnRpemF0aW9uVG90YWxRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW50aWNpcGF0ZWRMZW5ndGhPZlNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcHJvdmFsT3JPZmZlckR1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHByb3ZlZEFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwcm94aW1hdGVOdW1iZXJPZkhvbGRlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcHJveGltYXRlTnVtYmVyT2ZVbml0c0ZvclNhbGVQcm9qZWN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcHJveGltYXRlTnVtYmVyT2ZVbml0c1Byb2plY3RlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJlYURhbWFnZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFyZWFPZkxldmVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcmVhUGVyVW5pdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFycmVzdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzSXNRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzZXRTZWl6ZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NvY2lhdGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdENvbXBsZXRlVmFyaWFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF0Q29tcGxldGlvblF1YW50aXR5RXN0aW1hdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdHRlbmRhbnQtSGFuZGxlZFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdWN0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXVkaXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXV0aG9yaXNlZFNoYXJlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXV0aG9yaXplZFJldGVudGlvbkxldmVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3JpemVkU2hhcmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdmFpbGFibGVRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXZhaWxhYmxlUmVzb3VyY2VUYXNrUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF2YWlsYWJsZVVuaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdmVyYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdmVyYWdlRW1wbG95ZWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdmVyYWdlTnVtYmVyT2ZFbXBsb3llZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF4bGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYWNrb3JkZXJMaW5lcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFja29yZGVyUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbmtSZWplY3RJdGVtQ291bnQuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYW5rcnVwdGN5UGV0aXRpb25zRmlsZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhdGhyb29tQ291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhdGhyb29tc0ZpbmlzaGVkQXJlYUFib3ZlR3JhZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlZHJvb21Db3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVkcm9vbXNGaW5pc2hlZEFyZWFBYm92ZUdyYWRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZWRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZWdpbm5pbmdTaGFyZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbmVmaXRBbW91bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbmVmaXRQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxhYmxlUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbGluZ1VuaXRQZXJQcmljaW5nVW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlydGhXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJsYW5rVm90ZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJsb29kUmVjb3JkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb29rSW52ZW50b3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb29rT3JkZXJRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJhbmNoZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyYW5jaExvY2F0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJhbmNoTG9jYXRpb25zTGVhc2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcmFuY2hMb2NhdGlvbnNPd25lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJhbmNoT2ZmaWNlTG9jYXRpb25zRXN0aW1hdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcm90aGVyc0RlY2Vhc2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcm90aGVyc0xpdmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVkZ2V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdWRnZXRBdENvbXBsZXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdWRnZXRDdW11bGF0aXZlVG9EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdWRnZXRlZEhvdXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc0NsYXNzRmFpbHVyZUluY2lkZW5jZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1c2luZXNzRmFpbHVyZUNsYXNzSW5jaWRlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc0ZhaWx1cmVJbmR1c3RyeUluY2lkZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NGYWlsdXJlTmF0aW9uYWxBdmVyYWdlSW5jaWRlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5dXBPckJ1eWRvd25SYXRlUGVyQmFzaXNQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnl0ZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbGVuZGFyVW5pdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbmNlbGxlZFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXBpdGFsQ2hhbmdlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VydGlmaWVkUmVnaXN0ZXJlZE51cnNlQW5lc3RoZXRpc3ROdW1iZXJPZkNvbmN1cnJlbnRQcm9jZWR1cmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFuZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFuZ2VzSW5DYXBpdGFsU3RydWN0dXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZWFibGVDdWJpY01lYXN1cmVtZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlYWJsZURpc3RhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2VhYmxlR3Jvc3NXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZWFibGVMZW5ndGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZWFibGVOdW1iZXJPZkF4bGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2VhYmxlTnVtYmVyT2ZDb250YWluZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2VhYmxlTnVtYmVyT2ZQYWNrYWdlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlYWJsZU51bWJlck9mUmFpbFdhZ29ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlYWJsZU51bWJlck9mVW5pdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZWFibGVQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZWFibGVTdXJmYWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2VhYmxlVGFyZVdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlYWJsZVZvbHVtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlYWJsZVdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hpbGRyZW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNpcmN1bGF0aW5nT2lsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaXRhdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsYWltUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGVya3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsb3NpbmdTdGF0ZW1lbnRCYWxhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbG9zaW5nU3RvY2tCYWxhbmNlUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvMkluamVjdGlvblZvbHVtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ28tSW5zdXJlZC1BY3R1YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvLUluc3VyZWQtRXN0aW1hdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsYXRlcmFsUmVxdWlyZW1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsZWN0aW9uUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21taXRtZW50UGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21taXR0ZWRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbXVuaXR5U2VydmljZUR1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wYW5pZXNJbmNsdWRlZEluQ29uc29saWRhdGVkRmluYW5jaWFsU3RhdGVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wYW5pZXNJbmNsdWRlZEluQ29uc29saWRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGFuaWVzSW5TYW1lQWN0aXZpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBhcmlzb25QZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBsZXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGxldGVkQ29udHJhY3RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wbGV0ZWRMaW5lSXRlbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBsZXRlZFByb2plY3RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wb25lbnRNZXRlclJlYWRpbmdDb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uY3VycmVudEl0ZW1PdXRwdXRPZlRvb2xpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbmZpcm1lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc29saWRhdGVkRGlzY291bnRJbnZlbnRvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnN1bWVyUmVzZXJ2ZWRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGludWFuY2VEdXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RCdXlkb3duIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdEJ1eXVwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdENvbXBsZXRlZERlbGlucXVlbnQtQ29udHJhY3RvckNhdXNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RMaW5lSXRlbVF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdG9yQXRDb21wbGV0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RvckN1bXVsYXRpdmVUb0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0c0NvbXBsZXRlZERlbGlucXVlbnQtQnV5aW5nUGFydHlDYXVzZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0c0NvbXBsZXRlZERlbGlucXVlbnQtVW5rbm93bkNhdXNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJpYnV0aW9uVG90YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyb2xRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udmVudGlvbmFsTW9iaWxlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udmljdGlvbnNTZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb29wZXJhdGl2ZVNoYXJlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ycmVjdGVkUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcnJlY3RpdmVBY3Rpb25SZXF1ZXN0cy1NZXRob2RDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3JyZWN0aXZlQWN0aW9uUmVxdWVzdHMtTWV0aG9kRCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ycmVjdGl2ZUFjdGlvblJlcXVlc3RzLU1ldGhvZEUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcnJlY3RpdmVBY3Rpb25SZXF1ZXN0cy1WZXJiYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcnJlY3RpdmVBY3Rpb25SZXF1ZXN0cy1Xcml0dGVuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VudGVyQ2xlcmtzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3Vyc2VTZWdtZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ292ZXJhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdmVyZWQtQWN0dWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3ZlcmVkLUVzdGltYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0b3JzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmltaW5hbFNlbnRlbmNlRHVyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVBY3R1YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVCdWRnZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVFYXJuZWRWYWx1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VtdWxhdGl2ZUVmZmVjdE9mUHJpb3JQZXJpb2RBZGp1c3RtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdW11bGF0aXZlR2FzSW5qZWN0aW9uVm9sdW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdW11bGF0aXZlR2FzVm9sdW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdW11bGF0aXZlTGlxdWlkSW5qZWN0aW9uVm9sdW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdW11bGF0aXZlT2lsT3JDb25kZW5zYXRlVm9sdW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdW11bGF0aXZlUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVRdWFudGl0eUFjdHVhbEVzdGltYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VtdWxhdGl2ZVF1YW50aXR5QWN0dWFsTWVhc3VyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVRdWFudGl0eUFjdHVhbFBsYW5uZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVRdWFudGl0eU9yZGVyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVRdWFudGl0eVByZWNlZGluZ1BlcmlvZEVzdGltYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VtdWxhdGl2ZVF1YW50aXR5UHJlY2VkaW5nUGVyaW9kTWVhc3VyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVRdWFudGl0eVByZWNlZGluZ1BlcmlvZFBsYW5uZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVRdWFudGl0eVByZWNlZGluZ1BlcmlvZFJlYWNoZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVRdWFudGl0eVJlY2VpdmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdW11bGF0aXZlUXVhbnRpdHlSZWNlaXZlZEVuZE9mUHJpb3JZZWFyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdW11bGF0aXZlUXVhbnRpdHktUmVqZWN0ZWRNYXRlcmlhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VtdWxhdGl2ZVF1YW50aXR5LVJlamVjdGVkTWF0ZXJpYWwtRGlzcG9zaXRpb25DcmVkaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVRdWFudGl0eS1SZWplY3RlZE1hdGVyaWFsLURpc3Bvc2l0aW9uUGVuZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VtdWxhdGl2ZVF1YW50aXR5LVJlamVjdGVkTWF0ZXJpYWwtRGlzcG9zaXRpb25SZXBsYWNlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VtdWxhdGl2ZVF1YW50aXR5UmVxdWlyZWRQcmlvclRvVGhlRmlyc3RTY2hlZHVsZWRQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVRdWFudGl0eVNjaGVkdWxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VtdWxhdGl2ZVF1YW50aXR5U2NoZWR1bGVkVXBUb0FjY3VtdWxhdGlvblN0YXJ0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VtdWxhdGl2ZVF1YW50aXR5U2hpcHBlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VtdWxhdGl2ZVF1YW50aXR5U2hpcHBlZExvbmctRGlzcG9zaXRpb25DaGFsbGVuZ2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdW11bGF0aXZlUXVhbnRpdHlTaGlwcGVkTG9uZy1EaXNwb3NpdGlvblBlbmRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVRdWFudGl0eVNoaXBwZWRTaG9ydC1EaXNwb3NpdGlvbkNoYWxsZW5nZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVRdWFudGl0eVNoaXBwZWRTaG9ydC1EaXNwb3NpdGlvblBlbmRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1bXVsYXRpdmVTY2hlZHVsZVZhcmlhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdW11bGF0aXZlU2NyYXBRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VtdWxhdGl2ZVZhcmlhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdW11bGF0aXZlV2F0ZXJWb2x1bWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnJlbnREYXlzT25NYXJrZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlZHVjdGlibGVCbG9vZFVuaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWZhdWx0Tm90aWZpY2F0aW9uUmVzcG9uc2VQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlZ3JlZVNlZ21lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxldGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeUJhdGNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeUJhdGNoTXVsdGlwbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5UXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5UXVhbnRpdHlCYWxhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwZW5kZW50Q291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGVuZGVudHNBZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGVuZGVudFRvdGFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXNpZ25FbXBsb3llZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc3BhdGNoTm90ZVF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXNwYXRjaFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXN0cm95ZWRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGV0cmltZW50YWxMZWdhbEZpbGluZ3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRldHJpbWVudGFsTGVnYWxGaWxpbmdzQWdhaW5zdERpcmVjdG9ycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGltZW5zaW9uYWxTYW1wbGVRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlyZWN0b3JzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXJlY3RTaGlwbWVudFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXJlY3RXb3JrZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNidXJzZW1lbnRQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2NyZWV0UXVhbnRpdHktUmVqZWN0ZWRNYXRlcmlhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY3JldGVRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY3JldGVRdWFudGl0eS1SZWplY3RlZE1hdGVyaWFsLURpc3Bvc2l0aW9uQ3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNjcmV0ZVF1YW50aXR5LVJlamVjdGVkTWF0ZXJpYWwtRGlzcG9zaXRpb25QZW5kaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNjcmV0ZVF1YW50aXR5LVJlamVjdGVkTWF0ZXJpYWwtRGlzcG9zaXRpb25SZXBsYWNlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzcG9zZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3Bvc2l0aW9uVW5kZXRlcm1pbmVkUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3RyaWJ1dGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXN0cmlidXRvckludmVudG9yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9tZXN0aWNBZmZpbGlhdGVkQ29tcGFuaWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb21lc3RpY1VzZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyYWZ0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJpdmVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEdWUtSW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1cGxpY2F0ZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1cmF0aW9uSW5DdXJyZW50Sm9iIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEd2VsbGluZ0FyZWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVhcm5lZFZhbHVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFYXJuZWRWYWx1ZUN1bXVsYXRpdmVUb0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVhcm5lZFZhbHVlSG91cnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVmZmVjdGl2ZUFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWxhcHNlZER1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGVjdHJvbmljU2lnbmF0dXJlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWxpbWluYXRpb25QZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVsaW1pbmF0aW9uUGVyaW9kLUFjY2lkZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGltaW5hdGlvblBlcmlvZC1TaWNrbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1lcmdlbmN5TW9kaWZ5aW5nVW5pdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVkQXRMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWRBdFRoaXNMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWRCeVRoaXNDb21wYW55Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llZEluVGhpc1Byb2Zlc3Npb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVkT25UaGlzSm9iIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llZUF2ZXJhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWVzQWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llZXMtTm9ub3duZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVlc05vdEluY2x1ZGluZ093bmVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWVzTnVtYmVyT2ZEYXlzQXdheUZyb21Xb3JrRHVlVG9Jbmp1cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVlc051bWJlck9mRGF5c09mUmVzdHJpY3RlZFdvcmtBY3Rpdml0eUR1ZVRvSW5qdXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llZXMtT3duZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVlcy1QYXJ0VGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWVzLVNhbWVEdXRpZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVlcy1TYW1lT2NjdXBhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWVzU2hhcmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llZXNUb3RhbE51bWJlck9mRGF5c0F3YXlGcm9tV29ya0R1ZVRvSWxsbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWVUb3RhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWVUb3RhbEZpcnN0TW9udGhPZlF1YXJ0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVlVG90YWxTZWNvbmRNb250aE9mUXVhcnRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWVUb3RhbFRoaXJkTW9udGhPZlF1YXJ0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZGluZ1N0b2NrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmRPZk1vbnRoSW52ZW50b3J5UHJpb3JUb1NoaXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmdpbmVlcmVkU3RhbmRhcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZ2luZWVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50UXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWl0eVNlY3VyaXR5SG9sZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZUF0Q29tcGxldGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXN0aW1hdGVkQWNjb3VudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZEFubnVhbFZvbHVtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXN0aW1hdGVkRHVyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZEVtcGxveWVlc0F0TG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZEhvdXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZWRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXN0aW1hdGVkUmVhZGluZ1F1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZWRSZW1haW5pbmdFY29ub21pY0xpZmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZFJlbWFpbmluZ1BoeXNpY2FsTGlmZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXN0aW1hdGVkVG90YWxFbXBsb3llZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV2YXBvcmF0ZWRXYXRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhjbHVzaXZlVXNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhlY3V0aXZlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhpc3RlbmNlTGltaXRQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGVuZGl0dXJlUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGVuc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4dGVuZGVkVGVybSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXh0cmFVbnBsYW5uZWREZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFjdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsTWVkaWNhcmVPck1lZGljYWlkQ2xhaW1NYW5kYXRlLUNhdGVnb3J5MSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbE1lZGljYXJlT3JNZWRpY2FpZENsYWltTWFuZGF0ZS1DYXRlZ29yeTIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxNZWRpY2FyZU9yTWVkaWNhaWRDbGFpbU1hbmRhdGUtQ2F0ZWdvcnkzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsTWVkaWNhcmVPck1lZGljYWlkQ2xhaW1NYW5kYXRlLUNhdGVnb3J5NCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbE1lZGljYXJlT3JNZWRpY2FpZENsYWltTWFuZGF0ZS1DYXRlZ29yeTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxNZWRpY2FyZU9yTWVkaWNhaWRQYXltZW50TWFuZGF0ZS1DYXRlZ29yeTEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxNZWRpY2FyZU9yTWVkaWNhaWRQYXltZW50TWFuZGF0ZS1DYXRlZ29yeTIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxNZWRpY2FyZU9yTWVkaWNhaWRQYXltZW50TWFuZGF0ZS1DYXRlZ29yeTMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxNZWRpY2FyZU9yTWVkaWNhaWRQYXltZW50TWFuZGF0ZS1DYXRlZ29yeTQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxNZWRpY2FyZU9yTWVkaWNhaWRQYXltZW50TWFuZGF0ZS1DYXRlZ29yeTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxQZW5zaW9uTWFuZGF0ZS1DYXRlZ29yeTEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxQZW5zaW9uTWFuZGF0ZS1DYXRlZ29yeTIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxQZW5zaW9uTWFuZGF0ZS1DYXRlZ29yeTMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxQZW5zaW9uTWFuZGF0ZS1DYXRlZ29yeTQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxQZW5zaW9uTWFuZGF0ZS1DYXRlZ29yeTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxWb3RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmllbGRXb3JrZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaWxlU2l6ZUFmdGVyQ29tcHJlc3Npb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbGVTaXplQmVmb3JlQ29tcHJlc3Npb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFsRGVsaXZlcnlRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsQ292ZXJhZ2VQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFuY2lhbEluc3RpdHV0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluaXNoT2Zmc2V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdFF1YXJ0ZXJOb24tUmVjdXJyaW5nRGVtYW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdFF1YXJ0ZXJOb24tUmVjdXJyaW5nT3JkZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdFF1YXJ0ZXJSZWN1cnJpbmdEZW1hbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpcnN0UXVhcnRlclJlY3VycmluZ09yZGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxhcmVPckZsYXNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGF0RXh0cmFQcmVtaXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbG9vcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZsb29yc09jY3VwaWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JlY2FzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWNhc3RBdENvbXBsZXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JlY2FzdGVkU2Nhbm5lZFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3JlY2FzdFRvQ29tcGxldGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVpZ25SZWxhdGVkRW50aXRpZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVtZW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvdXJ0aFF1YXJ0ZXJOb24tUmVjdXJyaW5nRGVtYW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3VydGhRdWFydGVyTm9uLVJlY3VycmluZ09yZGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm91cnRoUXVhcnRlclJlY3VycmluZ0RlbWFuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm91cnRoUXVhcnRlclJlY3VycmluZ09yZGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZUZsb2F0LUluQ2FsZW5kYXJVbml0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZUZsb2F0VGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZUdvb2RzUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWVsYW5jZURlYnRDb2xsZWN0b3JzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVlbGFuY2VTYWxlc3BlcnNvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWVRdWFudGl0eUluY2x1ZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVlUXVhbnRpdHlOb3RJbmNsdWRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlcXVlbmN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdWVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdWVsQ29uc3VtZWRPckJ1cm5lZEFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnVlbFB1bXBzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdWxsQmF0aHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1bmN0aW9uYWxHcm91cHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1bmN0aW9uYWxTYW1wbGVRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnVybmlzaGVkQmxvb2RVbml0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FyYWdlT3JDYXJwb3J0QXJlYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FzSW5qZWN0aW9uVm9sdW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXNMaWZ0Vm9sdW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXNSZWNlaXB0Vm9sdW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXNSZXR1cm5lZFRvRWFydGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdhc1JldHVybmVkVG9Qcm9wZXJ0eUZvckZ1ZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdhc1Nocmlua2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FzU29sZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FzVXNlZEZvckRyaWxsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXNVc2VkRm9yRnVlbFN5c3RlbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FzVXNlZEZvclBsYW50RnVlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FzVXNlZEZvclJlcHJlc3N1cmluZ09yUHJlc3N1cmVNYWludGVuYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FzVXNlZE9uUHJvcGVydHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdhc1ZlbnRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FzVm9sdW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW5lcmFsRWxpbWluYXRpb25QZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdvdmVybm1lbnRSZXBvcnRpbmdRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JhZGVUcmFuc2ZlckFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3Jvc3NBbm51YWxJbmNvbWVNdWx0aXBsaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcm9zc0J1aWxkaW5nQXJlYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3Jvc3NFc3RpbWF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3Jvc3NMaXZpbmdBcmVhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcm9zc0xpdmluZ0ZpbmlzaGVkQXJlYUFib3ZlR3JhZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3NzUHJvZHVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3Jvc3NSZW50TXVsdGlwbGllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JvdXBFbXBsb3llZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikd1YXJhbnRlZUZlZUJ1eXVwTWF4aW11bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3VhcmFudGVlRmVlUmF0ZUFmdGVyQWx0ZXJuYXRlUGF5bWVudE1ldGhvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3VhcmFudGVlRmVlUmF0ZUFmdGVyQnV5dXBPckJ1eWRvd24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikd1YXJhbnRlZVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIaWdoRmFicmljYXRpb25BdXRob3JpemF0aW9uUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhpZ2hSYXdNYXRlcmlhbEF1dGhvcml6YXRpb25RdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9sZGluZ1BlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG91cnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvdXJzRmxvd24tQWlyY3JhZnRPclR5cGVGbHlpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvdXJzRmxvd24tQWlyY3JhZnRUeXBlT3JMaWZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3Vyc0Zsb3duLUFpcmNyYWZ0VHlwZU9yUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3Vyc0Zsb3duLUxpZmV0aW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3Vyc0Zsb3duLVR5cGVGbHlpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkltcGFpcm1lbnREdXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW1wYWlybWVudEZyZXF1ZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5jcmVtZW50YWxPcmRlclF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmRpcmVjdEVtcGxveWVlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5kdXN0cnlCdXNpbmVzc0ZhaWx1cmVJbmNpZGVuY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmZvcm1hdGlvblByb3ZpZGVyU3RhbmRhcmRpemVkTW90b3JWZWhpY2xlUGVuYWx0eVBvaW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5mb3JtYXRpb25SZWFkaW5nUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3BlY3RvcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3RhbGxlZENhcGFjaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN0YWxsZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN0YWxsbWVudEZyZXF1ZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdGFsbG1lbnRQYXltZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdGFsbG1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1ZmZpY2llbnRGdW5kc1JldHVybmVkQ2hlcXVlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZW5kZWRDaGFuZ2VUaW1lUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcmVzdEZvck92ZXJkcmF3bkFjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVyaW1UZXJtUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcnRhbmtUcmFuc2ZlckFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5UcmFuc2l0UXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluLVVzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52ZW50b3J5Q2F0ZWdvcnlUcmFuc2ZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52ZW50b3J5RGlzY3JlcGFuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVudG9yeU1vdmVtZW50UXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVudG9yeU9uU2hlbGZXb3JrSW5Qcm9ncmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52ZW50b3J5UXVhbnRpdHlBdFN1cHBsaWVyc05vdFN1YmplY3RUb0luc3BlY3Rpb25CeUN1c3RvbWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlbnRvcnlRdWFudGl0eUF0U3VwcGxpZXJzU3ViamVjdFRvSW5zcGVjdGlvbkJ5Q3VzdG9tZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVudG9yeVdpdGhkcmF3YWxRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52b2ljZWRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52b2ljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikludm9sdmVtZW50UGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJc3N1ZWRTaGFyZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkphaWxTZW50ZW5jZUR1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKdWRnZW1lbnRzUmVnaXN0ZXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSnVkZ21lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKdWRpY2lhbFN0YXlEdXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFib3JlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm91ckhvdXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWdUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYW5kSG9sZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFuZFNpemUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhbmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXRlUGF5bWVudFBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGF0ZXN0Q3VtdWxhdGl2ZVF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXdTdWl0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhZFRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlYXNlUGVyaW9kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVuZ3RoT2ZSZXNpZGVuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxldmVsUmVzb3VyY2UtUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxldmVsUmVzb3VyY2VUYXNrUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxldmVsc09jY3VwaWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWNlbnNlV2l0aGRyYXdhbER1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWNlbnNlV2l0aGRyYXdhbHNTZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWVucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGllbnNSZWdpc3RlcmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWZldGltZUNhcGFjaXR5T2ZUb29saW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWZlLVRpbWVSZXNlcnZlLUFjdHVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlmZXRpbWVSZXNlcnZlRGF5cy1BcHBsaWVkVG9UaGlzQ2xhaW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpZmUtVGltZVJlc2VydmUtRXN0aW1hdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaW1pdGVkUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpbmVJdGVtc0NvbXBsZXRlZERlbGlucXVlbnQtQnV5aW5nUGFydHlDYXVzZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpbmVJdGVtc0NvbXBsZXRlZERlbGlucXVlbnQtQ29udHJhY3RvckNhdXNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGluZUl0ZW1zQ29tcGxldGVkRGVsaW5xdWVudC1Vbmtub3duQ2F1c2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaW5lVGhyZWFkUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpcXVpZEluamVjdGlvblZvbHVtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGl2ZXN0b2NrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2FuUmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hblJlcGF5bWVudFRvdGFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3NzQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3NzT3JHYWluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3N0R2FzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3N0R29vZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxvc3RPaWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxvc3RXb3JrVGltZUFjdHVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9zdFdvcmtUaW1lRXN0aW1hdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3RTaXplIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWNoaW5lcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFpbnRlbmFuY2VVbml0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFudWZhY3R1cmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW51ZmFjdHVyZWRVbml0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFyaW5lUmFkaW9zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXJrZXRQcmljZUNoYW5nZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0Y2hpbmdFcXVpcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFsT24tQm9hcmRRdWFudGl0eVByaW9yVG9Mb2FkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXhpbXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXhpbXVtQWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXhpbXVtQmVuZWZpdFBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bUJlbmVmaXRQZXJpb2QtQWNjaWRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1heGltdW1CZW5lZml0UGVyaW9kQWNjaWRlbnRUb0FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bUJlbmVmaXRQZXJpb2QtU2lja25lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1heGltdW1CZW5lZml0UGVyaW9kU2lja25lc3NUb0FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bUNyaW1pbmFsU2VudGVuY2VEdXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bURlbGl2ZXJ5QmF0Y2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1heGltdW1Gb3JlY2FzdFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXhpbXVtSW52ZW50b3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXhpbXVtTWF0dXJpdHlFeHRlbnNpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1heGltdW1OdW1iZXJPZkVtcGxveWVlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bU51bWJlck9mRW1wbG95ZWVzQXRMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bU51bWJlck9mUHVyY2hhc2VPcmRlcnNBbGxvd2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXhpbXVtTnVtYmVyT2ZTaGlwbWVudHNBbGxvd2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXhpbXVtT3JkZXJRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bVByb2R1Y3Rpb25CYXRjaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bVF1YW50aXR5VG9XaGljaFRheFJhdGVBcHBsaWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXhpbXVtUmVxdWVzdGFibGVRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bVNoaXBRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bVN0YWNrYWJpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bVN0b2NrTGV2ZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1heGltdW1TdXBwbHlRdWFudGl0eVN1cHBsaWVyRW5kb3JzZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1heGltdW1UcmFuc2ZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVjaGFuaWNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2F0aW9uRHVyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lbWJlcnNJbkdyb3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXNzZW5nZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXRlclJlYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaWxpdGFyeVNhbGVzUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbGxpb25Eb2xsYXJSb3VuZHRhYmxlQ3JlZGl0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaW11bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaW11bUFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaW11bUF2ZXJhZ2VUaW1lUmVxdWlyZW1lbnRVbml0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaW11bUNvbnRyYWN0UXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1DcmltaW5hbFNlbnRlbmNlRHVyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1EZWxpdmVyeUJhdGNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaW5pbXVtRW1wbG95ZWVzQXRMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaW11bUZhYnJpY2F0aW9uUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1Gb3JlY2FzdFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaW5pbXVtSW52ZW50b3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaW5pbXVtTnVtYmVyT2ZFbXBsb3llZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1PcmRlclBhY2thZ2VMZXZlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaW11bU9yZGVyUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1Qcm9kdWN0aW9uQmF0Y2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1RdWFudGl0eVRvV2hpY2hUYXhSYXRlQXBwbGllcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaW11bVJlcXVlc3RhYmxlUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1TaGlwUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1TdG9ja0xldmVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaW5pbXVtVHJhbnNmZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pc2NlbGxhbmVvdXNBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vYmlsZUxvYWRpbmdBbGxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb2RlbE9yVGFyZ2V0U3RvY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vbnRoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3J0Z2FnZVBvb2xDb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9zdExpa2VseUR1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOYXRpb25hbEJ1c2luZXNzRmFpbHVyZUluY2lkZW5jZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV0UXVhbnRpdHlEZWNyZWFzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV0UXVhbnRpdHlJbmNyZWFzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV0VG9QYXlJdGVtQ291bnQuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb0RlbGl2ZXJ5UmVxdWlyZW1lbnRJblRoaXNJbnN0cnVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uLUJpbGxhYmxlUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbW1pdHRlZEludmVudG9yeU9uU2hlbGYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbmZvcm1hbmNlUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbi1Db25zb2xpZGF0ZWRUb3RhbC1Eb21lc3RpY1N1YnNpZGlhcmllcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uLUNvbnNvbGlkYXRlZFRvdGFsLUZvcmVpZ25TdWJzaWRpYXJpZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvdmVyZWQtQWN0dWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tQ292ZXJlZC1Fc3RpbWF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbi1Eb21lc3RpY1N0b2NraG9sZGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uZXhjbHVzaXZlVXNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uLVVuaW9uRW1wbG95ZWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tVXJnZW50RGVsaXZlcnlRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9ybWFsRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vcm1hbFJlYWRpbmdRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90UmVwbGFjZWRCbG9vZFVuaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb1ZvdGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZkFjY291bnRzUGFzdER1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZBY3RpdmVBY2NvdW50c1RoaXNDeWNsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZBZGRlZExvY2F0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZBZGp1c3RtZW50UGVyaW9kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZBdHRhY2tzT3JPY2N1cnJlbmNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZCYXRjaGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZkJvcnJvd2VycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZDYXJkc05vdFJlY2VpdmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZkNhcmRzT3V0c3RhbmRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mQ2hlY2tzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZkNsYWltYW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZDbG9zZWRMb2NhdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mQ28tSW5zdXJhbmNlRGF5cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZDb3BpZXNPZkJpbGxPZkxhZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZDcmV3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZkRheXNDb3ZlcmVkQnlJbnZlbnRvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mRGVhZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZEZWxpbnF1ZW50SW5zdGFsbG1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZkRlbGl2ZXJpZXNQZXJEZXNwYXRjaFBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZEZXBlbmRlbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZkVuZFVzZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZkVudGl0bGVkRXhlbXB0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZGYWlsZWRCdXNpbmVzc2VzT2ZEaXJlY3RvcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mRnJhbmNoaXNlZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mRnVsbC1UaW1lRW1wbG95ZWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZkhvc3BpdGFscyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZJZGVudGljYWxIYW5kbGluZ1VuaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZkluc3VyZWRMaXZlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZJbnRlcmVzdFBheW1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZklycmVndWxhckludGVyZXN0UGF5bWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mSXRlbXNBdXRob3JpemVkQXRTdG9yZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZJdGVtc0F1dGhvcml6ZWRBdFdhcmVob3VzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZJdGVtc0luU3RvY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mTGF0ZUNoYXJnZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mTGV2ZWxzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZkxpbWl0ZWRQYXJ0bmVyc2hpcFNoYXJlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZMaXZpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mTG9hbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mTG9zdENhcmRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZk1lbWJlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mTWVzc2FnZVJlY2lwaWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mTW9udGhzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZk1vcnRnYWdvcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mTW91bGRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZk5vbi1Db3ZlcmVkRGF5cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZOb25zdWZmaWNpZW50RnVuZEl0ZW1zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZk9wZW5BY2NvdW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZPcGVyYXRpbmdQZXJpb2RzQXRGYWlsdXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZk9wZXJhdG9yQ3JlZGl0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZPcmlnaW5hbHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mUGFja2FnZXNJbkhhbmRsaW5nVW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZQYXNzZW5nZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlBhdGllbnRBZG1pc3Npb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlBlb3BsZUxpdmluZ0F0UmVzaWRlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlBoeXNpY2lhbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mUHJvZHVjaW5nV2VsbHNSZW1haW5pbmdPblByb3BlcnR5T3JGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZQcm9kdWNpbmdXZWxsc1JlbWFpbmluZ09uUm95YWx0eUFjY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mUXVhbnRpdGF0aXZlSW5jZW50aXZlU2NoZW1lVW5pdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mU2VydmljZXNPclByb2NlZHVyZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mU2hlbGZGYWNpbmdzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlNoZWxmVGFncyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyT2ZTaWduZWRCaWxsc09mTGFkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlN0YXRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlN0b2xlbkNhcmRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlN0b3BzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlRoZWF0cmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlRpbWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlRpbWVzRGVwb3J0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mVHJhbnNwb3J0RG9jdW1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlVuaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZlVuaXRzLUhvdXNpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mVW5pdHNJblRoZURlcHRoT2ZBTGF5ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mVW5pdHNJblRoZVdpZHRoT2ZBTGF5ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51bWJlck9mVW5zaWduZWRCaWxsc09mTGFkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdW1iZXJPZldpdGhob2xkaW5nRXhlbXB0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyc09mQ29uc3VtZXJVbml0c0luVGhlVHJhZGVkVW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVtYmVyV2Vla3NQYWlkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOdXJzZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9lbUludmVudG9yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2ZmaWNlU2l6ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2ZmaWNlV29ya2VycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2ZmTGVhc2VGdWVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZQcmVtaXNlU2FsZXNRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2ZmUHJlbWlzZXNTYWxlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2lsQ29uZGVuc2F0ZVNvbGQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9pbENvbmRlbnNhdGVVc2VkT25Qcm9wZXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2lsT3JDb25kZW5zYXRlVm9sdW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPaWxTZWRpbWVudGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPaWxUaGVmdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25IYW5kQW5kRHVlLUluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbkhvbGRGb3JTaGlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25PcmRlclF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPblByZW1pc2VTYWxlc1F1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPblByZW1pc2VzU2FsZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wZW5pbmdTdGF0ZW1lbnRCYWxhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVuaW5nU3RvY2tCYWxhbmNlUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wZW5RdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3BlcmF0aW5nQmVkcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3BlcmF0aW5nRGl2aXNpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVyYXRpbmdRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3BlcmF0b3JzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVyYXRvcnNXb3JraW5nSW50ZXJlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wdGltYWxRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3B0aW1pc3RpY0R1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlckNvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlcmVkUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yZGVyUXVhbnRpdHlNdWx0aXBsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsRHVyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsTG9hblRlcm0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsUGF5bWVudEl0ZW1Db3VudC4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsVGVybUluWWVhcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyRW1wbG95ZWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlckdhc0Rpc3Bvc2l0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlckluamVjdGlvblZvbHVtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXJNaXNjZWxsYW5lb3VzRGlzcG9zaXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyT2lsQ29uZGVuc2F0ZURpc3Bvc2l0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlclVubGlzdGVkUGFydGljaXBhbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlclVubGlzdGVkU3RvY2tob2xkZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlcldhclJlc2VydmVNYXRlcmlhbFJlcXVpcmVtZW50c1Byb3RlY3RhYmxlUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyV2F0ZXJEaXNwb3NpdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0bGllckRheXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik91dE9mSW52ZW50b3J5UXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik91dHN0YW5kaW5nUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik91dHN0YW5kaW5nU2hhcmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdXQtVHVybmVkUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXJhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXJmbG93UXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXJTaGlwcGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3duZXJzRXF1aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lcnNoaXBDaGFuZ2VBZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik93bmVyc2hpcER1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25lcnNoaXBQZXJjZW50YWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPd25PY2N1cGF0aW9uUXVhbGlmaWNhdGlvblBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFnZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWlkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWlkLUluQ29tbW9uU2hhcmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWlkLUluUHJlZmVycmVkU2hhcmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWlkLUluU2VjdXJpdHlTaGFyZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcmtpbmdTcGFjZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnRpYWxCYXRocyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydGljaXBhbnRUb3RhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydGljaXBhdGlvblNoYXJlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydG5lcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnRUaW1lRW1wbG95ZWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXN0RHVlUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhdGllbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50Q2FuY2VsbGF0aW9uSXRlbUNvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50RHVyYXRpb25XZWVrcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudEV4cGVyaWVuY2VzSW5UaGVMYXN0MTJNb250aHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRFeHBlcmllbmNlc0luVGhlTGFzdDNNb250aHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRGcmVxdWVuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRPcmRlcnNGaWxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudHNOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcmNlbnRhZ2VPZk9yZGVyZWRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyaW9kaWNDYXBhY2l0eU9mVG9vbGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyaW9kT2ZFbXBsb3ltZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJpb2RRdWFudGl0eU1lYXN1cmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJpb2RRdWFudGl0eVBsYW5uZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcmlvZFF1YW50aXR5UmVhY2hlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyc2lzdGVuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlc3NpbWlzdGljRHVyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBldGl0aW9uc0ZpbGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaHlzaWNhbFN0YXR1c0lpaSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGh5c2ljYWxTdGF0dXNJdiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGh5c2ljYWxTdGF0dXNWIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaHlzaWNpYW5zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWN0dXJlQ291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpZWNlc0RlbGl2ZXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlsZmVyYWdlR29vZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpbG90cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlwZWxpbmVBZGp1c3RtZW50T3JBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpcGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaXR0ZWRXYXRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhY2VtZW50UGVyaW9kRXhwaXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhbm5lZFVuaXREZXZlbG9wbWVudFVuaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFudFNpemUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW50V29ya2VycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhdGZvcm1Db3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9ydGFibGVSYWRpb3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvcnRlZFRlbGVwaG9uZUxpbmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3N0LU9wRGF5cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG91bHRyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlZG9taW5hdGVBZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZS1PcERheXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXBhaWRRdWFudGl0eU5vdFNoaXBwZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXBhaWRRdWFudGl0eVNoaXBwZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZS1Qcm9kdWN0aW9uUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc2NyaXB0aW9uRG9zYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVzY3JpcHRpb25FZmZlY3RpdmVQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXNjcmlwdGlvbkZyZXF1ZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc2lkZW50aWFsVm90ZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXNzdXJlQmFzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNCZW5lZml0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNDdW11bGF0aXZlUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzSGlnaGVzdEN1bXVsYXRpdmVRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNseUFtb3J0aXNlZFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c01vbnRoc1VzYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c051bWJlck9mQWNjb3VudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzTnVtYmVyT2ZCcmFuY2hMb2NhdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzTnVtYmVyT2ZFbXBsb3llZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzT3JkZXJRdWFudGl0eVRvQmVDYW5jZWxsZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzV2Vla1F1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmljZUJyZWFrRnJvbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpY2VCcmVha1RvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmljaW5nVW5pdFBlckJpbGxpbmdVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltYXJ5TWFuYWdlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1hcnlNZXRlclJlYWRpbmdWYWx1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWFyeU5ldFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmluY2lwYWxzSW5jbHVkZWRBc0VtcGxveWVlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JDdW11bGF0aXZlSW1iYWxhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvclVuaXRzQWNjZXB0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2JhdGlvbkR1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWNpbmdXZWxscyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdEV4Y2hhbmdlQW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0aW9uUmVxdWlyZW1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0aW9uV29ya2VycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdFNhbGVzQW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9mZXNzaW9uYWxzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9mZXNzb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2plY3RlZEF2YWlsYWJsZUludmVudG9yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdFBoYXNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdHNJblByb2Nlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2plY3RVbml0c1NvbGQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21vdGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbW90aW9uUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3Rlc3RlZEJpbGxzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm92aWRlZFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdWJsaWNhdGlvblR1cm5TaXplIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdXJjaGFzZU9mUHJvZHVjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGlmaWNhdGlvblBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGlmeWluZ1dlZWtzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFsaXR5Q29udHJvbEZhaWxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGl0eUNvbnRyb2xIZWxkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0YXRpdmVJbmNlbnRpdmVTY2hlbWVCYXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eUFkdmlzZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5QXBwcm92ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5QXQxMDBQY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5QXZhaWxhYmxlRm9yUmV0dXJuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eUF2YWlsYWJsZUZvclNhbGUtU3RvY2tRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlBdmFpbGFibGVPblNoZWxmIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eUF3YWl0aW5nRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5QnlQb3NpdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlDYW5jZWxsZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5Q2FycmllZEZvcndhcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5RGVmZXJyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5RGVsaXZlcmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eURpc2FwcHJvdmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eURpc3BlbnNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlEaXNwbGF5ZWROb3RBdmFpbGFibGVGb3JTYWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eUVhcm5lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlIZWxkQnlEZWxpdmVyeVZlaGljbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5SGVsZEJ5TG9naXN0aWNTZXJ2aWNlUHJvdmlkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5SGVsZEJ5UmV0YWlsT3V0bGV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eUluRmxvYXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5SW5Ib2xkT3V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eUluTWFudWZhY3R1cmluZ1Byb2Nlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5SW5QaHlzaWNhbEludmVudG9yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlJblF1YXJhbnRpbmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5SW5UcmFuc2l0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eUxhbmRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlMb2FkZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5TWFuaWZlc3RlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlOb3RBdmFpbGFibGVGb3JEZXNwYXRjaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlPZkRlYWxlckxpY2Vuc2VQbGF0ZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5T2ZNYXRlcmlhbEluT3JkZXJlZFRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5T25IYW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eU9uSG9sZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlQZXJOZXh0SGlnaGVyQXNzZW1ibHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5UGVyUGFjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlQZXJTa2lkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eVBlclVuaXRPZklzc3VlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eVJlY2VpdmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eVJlbWFpbmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlSZXF1aXJlbWVudEZvck1haW50ZW5hbmNlQW5kUmVwYWlyT2YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5UmVxdWlyZW1lbnRGb3JTYW1wbGVJbnNwZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eVJlcXVpcmluZ01hbmlwdWxhdGlvbkJlZm9yZURlc3BhdGNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eVJldHVybmVkRGVmZWN0aXZlT3JEYW1hZ2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eVNjaGVkdWxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlTZXJ2aWNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlTb2xkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eVNvbGROZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5U3VzcGVuZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFudGl0eVRvQmVEZWxpdmVyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5VXNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlXaXRoZHJhd24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5V2l0aGhlbGRCeU93bmVyT2ZHb29kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVvdGVRdWFudGl0eU9uSW52ZW50b3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYW5nZUF2ZXJhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhbmdlTWF4aW11bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFuZ2VNaW5pbXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYXRlUGVyRGF5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXB0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2ZWRBbmRBY2NlcHRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2ZWROb3RBY2NlcHRlZFRvQmVEZXN0cm95ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmVkTm90QWNjZXB0ZWRUb0JlUmV0dXJuZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmVkUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY29tbWVuZGVkTWFpbnRlbmFuY2VRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjb21tZW5kZWRPdmVyaGF1bEFuZFJlcGFpclF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNvbnNpZGVyYXRpb25QZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZGVsaXZlcnlBZnRlclBvc3RQcm9jZXNzaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZpbGxzQXV0aG9yaXplZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaXN0ZXJlZEJyYW5kc0Rpc3RyaWJ1dGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RlcmVkQnJhbmRzTWFudWZhY3R1cmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWplY3RlZFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWplY3RlZFJldHVyblF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGVkQnVzaW5lc3NFbnRpdGllcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRlZEVudGl0aWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxhdGlvbnNoaXBEdXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsYXRpdmVzRW1wbG95ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbWFpbmluZ0F1dGhvcml6ZWRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVtYWluaW5nRHVyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbWFpbmluZ1F1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZW9yZGVyaW5nTGV2ZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlb3JkZXJQb2ludFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBsYWNlZEFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwbGFjZWRCbG9vZFVuaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBsZW5pc2htZW50T3ZlcnJpZGVRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwbGVuaXNobWVudFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBvcnREaWZmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBvcnRlZERlZmljaWVuY2llcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWVzdGVkQW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1aXJlbWVudFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1aXJlbWVudFF1YW50aXR5VGhhdFdhc1ByZXZpb3VzbHlSZWxlYXNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWlzaXRpb25pbmdPYmplY3RpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2VydmVkUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2VydmVkUXVhbnRpdHlDdXN0b21lckRpcmVjdERlbGl2ZXJ5U2FsZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2VydmVkUXVhbnRpdHlSZXRhaWxTYWxlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzaWRlbmNlRHVyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc291cmNlLVF1YW50aXR5LUF2YWlsYWJsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzdGluZ1F1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXN0cmljdGlvbkR1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXRhaWxTYWxlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0ZW50aW9uUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldHVybmVkQnlDb25zdW1lclF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXR1cm5RdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0dXJuc1JlcGxhY2VtZW50UXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvb21Db3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm9vbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvb21zRmluaXNoZWRBcmVhQWJvdmVHcmFkZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm95YWx0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FmZXR5TGV2ZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbGVzcGVyc29ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FsZXNRdWFudGl0eU5vdEluY2x1ZGVkSW5UaGVSZXBsZW5pc2htZW50Q2FsY3VsYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbGVzUXVhbnRpdHlQbGFubmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYW1wbGVBbW91bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjYXR0ZXJlZFZvdGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTY2hlZHVsZVZhcmlhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTY3JhcEFsbG93ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjcmFwUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlYXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRhcnlOZXRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kUXVhcnRlck5vbi1SZWN1cnJpbmdEZW1hbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY29uZFF1YXJ0ZXJOb24tUmVjdXJyaW5nT3JkZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRRdWFydGVyUmVjdXJyaW5nRGVtYW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRRdWFydGVyUmVjdXJyaW5nT3JkZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNyZXRhcmllcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VjdXJlZENoYXJnZXNSZWdpc3RlcmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWN1cml0aWVzU2hhcmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWdtZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VsbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlUmVzYWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGFyZWhvbGRlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoYXJlaG9sZGVyc0hvbGRpbmdSZW1haW5kZXJPZlNoYXJlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hhcmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGFyZXNBZGRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hhcmVzRGVsZXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hhcmVzSGVsZEFzVHJlYXN1cnlTdG9jayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hhcmVzT2ZDb21tb25TdG9jayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hhcmVzT2ZQcmVmZXJyZWRTdG9jayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hhcmVzT3duZWRCeUluLVN0YXRlUmVzaWRlbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGFyZXNPd25lZEJ5T3V0LU9mLVN0YXRlUmVzaWRlbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGFyZXNTdWJzY3JpYmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGFyZXNTdWJzY3JpYmVkQnV0Tm90SXNzdWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlmdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBtZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcE5vdGljZVF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwcGVkUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNob3J0YWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaG9ydC1MYW5kZWRHb29kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hvcnRTaGlwcGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaWxlbnRQYXJ0bmVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2luY2VMYXN0VHJhdmVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaW5nbGVEZWxpdmVyeVF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaXN0ZXJzRGVjZWFzZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpc3RlcnNMaXZpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpemVPZkhvdXNlaG9sZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2tpbGxlZFdvcmtlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU21hbGxCdXNpbmVzc1VzZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvbGljaXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29ydGVkUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvcnRlZFF1YW50aXR5UmVqZWN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwYWNlT2NjdXBpZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxQYXJ0bmVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlZWRDYXBhY2l0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BsaXRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BsaXRTaGlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhbmRhcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXJ0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXJ0T2Zmc2V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFydFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZU9yUHJvdmluY2VNb3RvclZlaGljbGVQZW5hbHR5UG9pbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0aXN0aWNhbFNhbGVzUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b2NrVHJhbnNmZXJzSW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b2NrVHJhbnNmZXJzT3V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9sZW5DaGVxdWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJjb250cmFjdG9yQXRDb21wbGV0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3ViY29udHJhY3RvckN1bXVsYXRpdmVUb0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YmNvbnRyYWN0b3JzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJtaXR0ZWRRdWFudGl0eVJldHVybmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJtaXR0ZWRRdWFudGl0eVNvbGQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnNlcXVlbnREZWxpdmVyeVF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJzaWRpYXJpZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnN0aXR1dGlvbmFsUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1aXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBlcnZpc29ycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxpZWRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxpZXJFc3RpbWF0ZWRMYXRlc3RNZXRlclJlYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBsaWVyRXN0aW1hdGVkUHJldmlvdXNNZXRlclJlYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBsaWVyTGF0ZXN0TWV0ZXJSZWFkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbGllclByZXZpb3VzTWV0ZXJSZWFkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbGllcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBsaWVyc0NyZWRpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VycGx1c0dvb2RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJ2ZXlzSW5BdmVyYWdlUmF0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXNwZW5kZWREdXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3dhbi1HYW56Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYWJsZXNBdmFpbGFibGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhbGtQYXRocyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFua0FsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFyaWZmTG9zc0FsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4YWJsZVF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWFjaGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVjaG5pY2lhbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoZW9yZXRpY2FsUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaXJkUXVhcnRlck5vbi1SZWN1cnJpbmdEZW1hbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaXJkUXVhcnRlck5vbi1SZWN1cnJpbmdPcmRlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaXJkUXVhcnRlclJlY3VycmluZ0RlbWFuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhpcmRRdWFydGVyUmVjdXJyaW5nT3JkZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW1lRXhwZW5kZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpbWVGcmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGltZUluQ291bnRyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGltZUluUG9zaXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpbWVTaW5jZUhvc3BpdGFsaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGltZVNpbmNlTGFzdEFwcGxpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW1lU2luY2VMYXN0Q2l2aWxpYW5GbGlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpbWVTaW5jZUxhc3RJbnN1cmFuY2VNZWRpY2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW1lU2luY2VMYXN0TWlsaXRhcnlGbGlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpbWVTaW5jZU1lZGljYWxDb25zdWx0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW1lU2luY2VNZWRpY2F0aW9uRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW1lU2luY2VNZWRpY2F0aW9uU3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpbWVTaW5jZU9uc2V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW1lU2luY2VTdXJnZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW1lU2luY2VUcmlwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW1lVW5pdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpbWVVbml0c0tub3duIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW1lVW5pdHNQZXJTaGlmdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGltZVVuaXRzU3BlbnRPbkR1dHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpcmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb0NvbXBsZXRlUXVhbnRpdHlFc3RpbWF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvbGVyYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsQWRqdXN0bWVudHNWb2x1bWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsQW1vcnRpc2F0aW9uUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsQXRDb21wbGV0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxBdXRob3JpemVkUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsQmVnaW5uaW5nSW52ZW50b3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbENsYWltc0Fzc29jaWF0ZWRXaXRoUmVwZWF0ZWRUcmF1bWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsQ2xhaW1zV2l0aERheXNBd2F5RnJvbVdvcmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsQ2xhaW1zV2l0aERpc29yZGVyc0R1ZVRvUGh5c2ljYWxBZ2VudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsQ2xhaW1zV2l0aER1c3REaXNlYXNlc09mVGhlTHVuZ3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsQ2xhaW1zV2l0aG91dERheXNBd2F5RnJvbVdvcmtBbmRXaXRob3V0UmVzdHJpY3RlZFdvcmtBY3Rpdml0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxDbGFpbXNXaXRoUG9pc29uaW5nSWxsbmVzc2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbENsYWltc1dpdGhSZXNwaXJhdG9yeUNvbmRpdGlvbnNEdWVUb1RveGljQWdlbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbENsYWltc1dpdGhTa2luRGlzZWFzZXNPckRpc29yZGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxDb25zb2xpZGF0ZWREb21lc3RpY1N1YnNpZGlhcmllcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxDb25zb2xpZGF0ZWRGb3JlaWduU3Vic2lkaWFyaWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbENvbnNvbGlkYXRlZFN1YnNpZGlhcmllcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxDcmVkaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbENyZWRpdHNBY2NlcHRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxDcmVkaXRzUmVjZWl2ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsQ3JlZGl0c1JlamVjdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbERheXNBd2F5RnJvbVdvcmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsRGF5c0F3YXlGcm9tV29ya0R1ZVRvSWxsbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxEYXlzQXdheUZyb21Xb3JrRHVlVG9Jbmp1cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsRGF5c09mUmVzdHJpY3RlZFdvcmtBY3Rpdml0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxEYXlzT2ZSZXN0cmljdGVkV29ya0FjdGl2aXR5RHVlVG9JbGxuZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbERheXNPbk1hcmtldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxEYXlzV2l0aFJlc3RyaWN0ZWRXb3JrQWN0aXZpdHlEdWVUb0luanVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxEZWF0aENsYWltcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxEZWF0aHNBc0FSZXN1bHRPZklsbG5lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsRGVhdGhzQXNBUmVzdWx0T2ZJbmp1cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsRGViaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbERlYml0c0FjY2VwdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbERlYml0c1JlY2VpdmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbERlYml0c1JlamVjdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbERlbGl2ZXJ5UXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsRGVtYW5kT3JkZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbERlbWFuZFF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbEVtcGxveWVlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxFbmRpbmdJbnZlbnRvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsRmxvYXRUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbEdhc0Rpc3Bvc2l0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbEdhc0luamVjdGlvblZvbHVtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxJbGxuZXNzQ2xhaW1zV2l0aERheXNBd2F5RnJvbVdvcmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsSWxsbmVzc0NsYWltc1dpdGhPY2N1cGF0aW9uYWxJbGxuZXNzZXNOb3RPdGhlcndpc2VDbGFzc2lmaWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbElsbG5lc3NDbGFpbXNXaXRob3V0TG9zdFdvcmtEYXlzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbElsbG5lc3NXaXRoTG9zdFdvcmtEYXlzT3JSZXN0cmljdGVkV29ya0FjdGl2aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbEluanVyeUNsYWltc1dpdGhEYXlzQXdheUZyb21Xb3JrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbEluanVyeUNsYWltc1dpdGhEYXlzQXdheUZyb21Xb3JrT3JSZXN0cmljdGVkV29ya0FjdGl2aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbEluanVyeUNsYWltc1dpdGhvdXRMb3N0V29ya0RheXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsSW52ZW50b3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbE5vbi1Db25zb2xpZGF0ZWRTdWJzaWRpYXJpZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsTnVtYmVyT2ZDb252aWN0aW9ucyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxOdW1iZXJPZkRvbWVzdGljU3Vic2lkaWFyaWVzSW5jbHVkZWRJbkZpbmFuY2lhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxOdW1iZXJPZkRvbWVzdGljU3Vic2lkaWFyaWVzTm90SW5jbHVkZWRJbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxOdW1iZXJPZkZvcmVpZ25TdWJzaWRpYXJpZXNJbmNsdWRlZEluRmluYW5jaWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbE51bWJlck9mRm9yZWlnblN1YnNpZGlhcmllc05vdEluY2x1ZGVkSW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsTnVtYmVyT2ZMb2FuRGV0YWlsUmVjb3JkcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxOdW1iZXJPZk1vcnRnYWdlZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsTnVtYmVyT2ZQYXJraW5nU3BhY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbE51bWJlck9mU3Vic2lkaWFyaWVzTm90SW5jbHVkZWRJblRoZUZpbmFuY2lhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxOdW1iZXJPZlVuaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbE51bWJlck9mVW5pdHNGb3JTYWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbE51bWJlck9mV29ya2Vyc0NvbXBlbnNhdGlvbkNvbWJpbmVkUmVwb3J0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxOdW1iZXJPZldvcmtlcnNDb21wZW5zYXRpb25GaXJzdFJlcG9ydHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsTnVtYmVyT2ZXb3JrZXJzQ29tcGVuc2F0aW9uU3Vic2VxdWVudFJlcG9ydHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsT2ZJc3N1YWJsZUFzc2V0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxPaWxBbmRPckNvbmRlbnNhdGVEaXNwb3NpdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxPaWxBbmRPckNvbmRlbnNhdGVJbmplY3Rpb25Wb2x1bWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsT3RoZXJQcm9wZXJ0aWVzT3duZWRBbmRGaW5hbmNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxQYXltZW50c1JlamVjdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbFBvc3QtQWR2aWNlc0FjY2VwdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbFBvc3QtQWR2aWNlc1JlY2VpdmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbFBvc3QtQWR2aWNlc1JlamVjdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbFByZS1BZHZpY2VzQWNjZXB0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsUHJlLUFkdmljZXNSZWNlaXZlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxQcmUtQWR2aWNlc1JlamVjdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbFByZW5vdGVzQWNjZXB0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsUHJlbm90ZXNSZWNlaXZlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxQcmVub3Rlc1JlamVjdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbFByb2R1Y3Rpb25Wb2x1bWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsUHJvcGVydGllc093bmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbFF1YW50aXR5UGxhbm5lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxSZXNvdXJjZS1RdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxSb29tcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxTYWxlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxTZXJ2aWNlQmFja29yZGVyUXVhbnRpdHlIaWdoUHJpb3JpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsU2VydmljZUJhY2tvcmRlclF1YW50aXR5TG93UHJpb3JpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsU2hhcmVzT2ZTdG9jayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxTeXN0ZW1CYWNrb3JkZXJRdWFudGl0eUhpZ2hQcmlvcml0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxTeXN0ZW1CYWNrb3JkZXJRdWFudGl0eUxvd1ByaW9yaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbFRvRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxUcmFuc2FjdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsVW5pZGVudGlmaWVkVHJhbnNhY3Rpb25zUmVqZWN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsV2F0ZXJEaXNwb3NpdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxXYXRlckluamVjdGlvblZvbHVtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxXb3JrZWRCeUFsbEVtcGxveWVlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxXb3JraW5nSW50ZXJlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWRlbWFya1JlcHJlc2VudGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFkZW1hcmtzVXNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaW5lZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWluZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc2FjdGlvblNldHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zZmVyUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zZmVycmVkSW5RdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNmZXJyZWRPdXRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhdmVsRnJlcXVlbmN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmF2ZWxsaW5nRW1wbG95ZWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmF2ZWxQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyaXBEdXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJpcHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydW5rZWRDaGFubmVscyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5hY2tub3dsZWRnZWRRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5hZGp1c3RlZENvcnJlY3RvclJlYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuY292ZXJlZENoZXF1ZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaWZvcm1Db21tZXJjaWFsQ29kZUZpbGluZ3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaW9uRW1wbG95ZWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdHNDb21wbGV0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRzRm9yU2FsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdHNQZXJVbml0UHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRzUHJvZHVjZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRzUmVudGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0c1dvcmtlZExhc3REYXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRzV29ya2VkUGVyRGF5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0c1dvcmtlZFBlclF1YXJ0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRzV29ya2VkUGVyV2VlayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5wYWlkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbnNhbGVhYmxlUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuc29sZFF1YW50aXR5SGVsZEJ5V2hvbGVzYWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW50aWxOZXh0VHJhdmVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbnVzYWJsZVF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbnVzZWRBY2N1bXVsYXRlZFNpY2tEYXlzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbnZlcmlmaWVkUmVjZWlwdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVyZ2VudERlbGl2ZXJ5UXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVzZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVzZU9mRXh0cmFjb3Jwb3JlYWxDaXJjdWxhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVXNlT2ZIeXBlcmJhcmljUHJlc3N1cml6YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVzZU9mSHlwZXJ0ZW5zaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVc2VPZkh5cG90ZW5zaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVc2VPZkh5cG90aGVybWlhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYWNhbmNpZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhcmlhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYXJpYW5jZUFkanVzdG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlaGljdWxhclJhZGlvcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVyaWZpZWRSZWNlaXB0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmlzaXRhdGlvbkZyZXF1ZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmlzaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWb2ljZVN0b3JhZ2VRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVm9pZFZvdGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWb2x1bWVTaHJpbmthZ2VBZGp1c3RtZW50T3JBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZvdGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWb3RpbmdTaGFyZXNIZWxkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJlaG91c2VFbXBsb3llZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhcmVob3VzZVNpemUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhdGVyUmUtSW5qZWN0ZWRPblByb3BlcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXRlclZvbHVtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2Vla3NXb3JrZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2VpZ2h0Q2hhbmdlUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWlnaHRHYWluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWlnaHRMb3NzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaG9sZXNhbGVyVG9XaG9sZXNhbGVyU2FsZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldpZGVBcmVhVGVsZXBob25lU2VydmljZVBlcjgwMFNlcnZpY2VVbml0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29ya0NhbGVuZGFyVW5pdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldvcmtEYXlzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JrSW5Qcm9jZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JrUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JrVGltZVVuaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JrVGltZVVuaXRzUGVyU2hpZnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlllYXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJZZWFyc0luU2Nob29sIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJZZWFyc0luVGhpc0xpbmVPZldvcmtPclByb2Zlc3Npb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlllYXJzT25Kb2IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlllYXJzUmVtYWluaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJZZXNWb3RlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudER1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50SW52ZW50b3J5UXVhbnRpdHlBdmFpbGFibGVGb3JTaGlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudFBlcmlvZEltYmFsYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudFNlcnZpY2VMaWZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50U2hhcmVCYWxhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lckVzdGltYXRlZExhdGVzdE1ldGVyUmVhZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJFc3RpbWF0ZWRQcmV2aW91c01ldGVyUmVhZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJSZWFkaW5nUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhaWx5QWRqdXN0bWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhaWx5QXZlcmFnZVF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYWlseVdvcmtTaGlmdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhbWFnZWRHb29kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0YVN0b3JhZ2VRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF5cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF5c09wZXJhdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXlzUHJvZHVjZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRheXNTdXBwbHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYmVudHVyZUJvbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYmVudHVyZXNGaWxlZEFnYWluc3REaXJlY3RvcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYml0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYnRDb2xsZWN0b3JzIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZDb250cmFjdEl0ZW0iPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9IkNvbnRyYWN0SXRlbSIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mQ29udHJhY3RJdGVtIiB0eXBlPSJMaXN0T2ZDb250cmFjdEl0ZW0iLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkNvbnRyYWN0SXRlbSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJDb250cmFjdCIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQ29udHJhY3RJdGVtTnVtYmVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDb250cmFjdEl0ZW0iIHR5cGU9IkNvbnRyYWN0SXRlbSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQ29udHJhY3QiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iQ29udHJhY3RJRCIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJDb250cmFjdFR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iVmFsaWRpdHlEYXRlcyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU3lzdGVtSUQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IkNvbnRyYWN0IiB0eXBlPSJDb250cmFjdCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQ29udHJhY3RUeXBlIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDb250cmFjdFR5cGVDb2RlZCIgdHlwZT0iQ29udHJhY3RUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQ29udHJhY3RUeXBlQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQ29udHJhY3RUeXBlIiB0eXBlPSJDb250cmFjdFR5cGUiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iQ29udHJhY3RUeXBlQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpYWdub3Npc1JlbGF0ZWRHcm91cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyRGllbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmFyaWFibGVQZXJEaWVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGF0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXBpdGF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcmNlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5lZ290aWF0ZWRHcm93aW5nRXF1aXR5TW9ydGdhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFudGljaXBhdGVkQ29udHJhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxIb3VzaW5nQXV0aG9yaXR5QWRqdXN0YWJsZVJhdGVNb3J0Z2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbEhvdXNpbmdBdXRob3JpdHlWZXRlcmFuc0FmZmFpcnNGaXhlZFJhdGVNb3J0Z2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udmVudGlvbmFsU2Vjb25kTW9ydGdhZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb252ZW50aW9uYWxGaXhlZFJhdGVNb3J0Z2FnZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxIb3VzaW5nQXV0aG9yaXR5VmV0ZXJhbnNBZmZhaXJzR3JhZHVhdGVkUGF5bWVudE1vcnRnYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZWdvdGlhdGVkQ29udmVudGlvbmFsR3JhZHVhdGVkUGF5bWVudE9yU3RlcFJhdGVNb3J0Z2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udmVudGlvbmFsQWRqdXN0YWJsZVJhdGVNb3J0Z2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zdFBsdXNJbmNlbnRpdmVGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvc3RTaGFyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3N0UGx1cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zdFBsdXNBd2FyZEZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zdFBsdXNGaXhlZEZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpYnV0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4Y2x1c2l2ZUFnZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhjbHVzaXZlUmlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpcm1vckFjdHVhbENvbnRyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXhlZFByaWNlSW5jZW50aXZlRmlybVRhcmdldFdpdGhQZXJmb3JtYW5jZUluY2VudGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRml4ZWRQcmljZUluY2VudGl2ZUZpcm1UYXJnZXRXaXRob3V0UGVyZm9ybWFuY2VJbmNlbnRpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpeGVkUHJpY2VSZWRldGVybWluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpeGVkUHJpY2V3aXRoRXNjYWxhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRml4ZWRQcmljZUluY2VudGl2ZVN1Y2Nlc3NpdmVUYXJnZXRXaXRoUGVyZm9ybWFuY2VJbmNlbnRpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpeGVkUHJpY2VJbmNlbnRpdmVTdWNjZXNzaXZlVGFyZ2V0V2l0aG91dFBlcmZvcm1hbmNlSW5jZW50aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXhlZFByaWNlQXdhcmRGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpeGVkUHJpY2VJbmNlbnRpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpeGVkUHJpY2VMZXZlbG9mRWZmb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb0Nvc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZsYXRBbW91bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldHJvYWN0aXZlRml4ZWRQcmljZVJlZGV0ZXJtaW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlybUZpeGVkUHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpeGVkUHJpY2V3aXRoRWNvbm9taWNQcmljZUFkanVzdG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZXZlbG9mRWZmb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJvckhvdXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlckNvbnRyYWN0VHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvc3BlY3RSZXNlcnZhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FtZVBlcmNlbnRhZ2Vhc0ZpbG1SZW50YWxFYXJuZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpbWVhbmRNYXRlcmlhbHMiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlZhbGlkaXR5RGF0ZXMiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlN0YXJ0RGF0ZSIgdHlwZT0ieGNibERhdGV0aW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iRW5kRGF0ZSIgdHlwZT0ieGNibERhdGV0aW1lIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJWYWxpZGl0eURhdGVzIiB0eXBlPSJWYWxpZGl0eURhdGVzIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJDb25kaXRpb25zT2ZTYWxlIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJTYWxlc1JlcXVpcmVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTYWxlc0FjdGlvbkNvZGVkIiB0eXBlPSJTYWxlc0FjdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlNhbGVzQWN0aW9uQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU2FsZXNBY3Rpb25WYWx1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQ29uZGl0aW9uc09mU2FsZSIgdHlwZT0iQ29uZGl0aW9uc09mU2FsZSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iU2FsZXNSZXF1aXJlbWVudCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iU2FsZXNSZXF1aXJlbWVudENvZGVkIiB0eXBlPSJTYWxlc1JlcXVpcmVtZW50Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU2FsZXNSZXF1aXJlbWVudENvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlNhbGVzUmVxdWlyZW1lbnQiIHR5cGU9IlNhbGVzUmVxdWlyZW1lbnQiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iU2FsZXNSZXF1aXJlbWVudENvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRRdWFudGl0eVRvTWFrZU1pbmltdW1XZWlnaHRSZXF1aXJlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFja09yZGVySWZJdGVtc0FyZU91dE9mU3RvY2tPck5vdFlldFB1Ymxpc2hlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFja09yZGVySWZPdXRPZlN0b2NrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYWNrT3JkZXJPbmx5SWZOZXdJdGVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWRHdWFyYW50ZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbWJpbmVkU21hbGxEaXNhZHZhbnRhZ2VkQnVzaW5lc3NBbmRMYWJvclN1cnBsdXNBcmVhU2V0LUFzaWRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zaWdubWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9Ob3RQcmVzaGlwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFcXVhbFByb2R1Y3RBbGxvd2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGNsdWRlSW1wb3J0UXVvdGFJbkZpcnN0Q29zdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFjdG9yeVNoaXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikd1YXJhbnRlZWRTYWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmNsdWRlSW1wb3J0UXVvdGFJbkZpcnN0Q29zdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFib3JTdXJwbHVzQXJlYVNldC1Bc2lkZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFyZ2VQdXJjaGFzZVNldC1Bc2lkZUZvclNtYWxsQnVzaW5lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1heVByZXNoaXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik11bHRpLXllYXJBd2FyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9CYWNrT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vU3Vic3RpdHV0ZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdGlmeVByaW9yVG9TaGlwbWVudElmUXVhbnRpdHlTcGVjaWZpZWRJc05vdEF2YWlsYWJsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25RdWFsaWZpZWRCaWRkZXJzTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25RdWFsaWZpZWRNYW51ZmFjdHVyZXJzTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXJVbmxpc3RlZFNhbGVzQ29uZGl0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0aWFsTGFib3JTdXJwbHVzQXJlYVNldEFzaWRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXN0cmljdGVkVG9BcHByb3ZlZFNvdXJjZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3RyaWN0ZWRUb0VkdWNhdGlvbmFsSW5zdGl0dXRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXN0cmljdGVkVG9IaXN0b3JpY2FsbHlCbGFja0NvbGxlZ2VPclVuaXZlcnNpdHlPck1pbm9yaXR5SW5zdGl0dXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3RyaWN0ZWRUb0luZHVzdHJpYWxQcmVwYXJlZG5lc3NQcm9ncmFtUGFydGljaXBhbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXN0cmljdGVkVG9RdWFsaWZpZWRQcm9kdWN0c0xpc3RQcm9kdWN0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzdHJpY3RlZFRvVVNBbmRDYW5hZGlhblNvdXJjZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3RyaWN0ZWRUb1lvdW5nSW52ZXN0aWdhdG9yUHJvZ3JhbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VjdGlvbjhhU2V0LUFzaWRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXQtYXNpZGVGb3JBbWVyaWNhbkluZGlhbi1vd25lZEJ1c2luZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwQXNTb29uQXNQb3NzaWJsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcENvbXBsZXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwRnVsbFRydWNrT25seSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcEluLVBsYWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwUGFydGlhbC1CYWxhbmNlQmFja09yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwUGFydGlhbEJhbGFuY2VDYW5jZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBQYXJ0aWFsQmFsYW5jZVN1YnN0aXR1dGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBQYXJ0aWFsQ2FybG9hZExvdHNPbmx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwUGFydGlhbEl0ZW1RdHlQcm9wb3J0aW9uYWxUb1RvdGFsT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBQYXJ0aWFsVHJ1Y2tsb2FkTG90c09ubHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBQZXJSZWxlYXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwUGVyUmVsZWFzZW9yQnV5ZXJBdXRob3JpemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwUGVyU2NoZWR1bGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNtYWxsQnVzaW5lc3NXaXRoU21hbGxEaXNhZHZhbnRhZ2VkQnVzaW5lc3NDb25zaWRlcmF0aW9uU2V0LUFzaWRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbWFsbERpc2FkdmFudGFnZWRCdXNpbmVzc1NldC1Bc2lkZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU21hbGxQdXJjaGFzZVNldEFzaWRlRm9yU21hbGxCdXNpbmVzc2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbWFsbFJlbWFpbmluZ0JhbGFuY2VDYW5jZWxsYXRpb25BbGxvd2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbWFsbFJlbWFpbmluZ0JhbGFuY2VDYW5jZWxsYXRpb25Ob3RBbGxvd2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJzdGl0dXRlSXRlbUFsbG93ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVucmVzdHJpY3RlZFByb2N1cmVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJlaG91c2VTaGlwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJyYW50eSIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJTYWxlc0FjdGlvbkNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5jZWxCYWxhbmNlVGhhdEV4Y2VlZHNTYWxlc0FjdGlvblZhbHVlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuY2VsRW50aXJlIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJIYXphcmRvdXMiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJMaXN0T2ZIYXphcmRvdXNJZGVudGlmaWVycyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iSGF6YXJkQ2xhc3NDb2RlZCIgdHlwZT0iSGF6YXJkQ2xhc3NDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJIYXphcmRDbGFzc0NvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iSGF6YXJkb3VzUGxhY2FyZEluZm9ybWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJIYXphcmRvdXNSZWZlcmVuY2VzIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTGlzdE9mUmVmZXJlbmNlQ29kZWQiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iSGF6YXJkb3VzQ29udGFjdCI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IkNvbnRhY3QiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iSGF6YXJkTm90ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVU5ER051bSIgdHlwZT0ieHNkOmludCIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJIYXphcmRvdXNUZW1wZXJhdHVyZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iSGF6YXJkb3VzU2hpcG1lbnRJbmZvcm1hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRU1TTnVtIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJNZmFnIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJIYXphcmRvdXMiIHR5cGU9IkhhemFyZG91cyIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mSGF6YXJkb3VzSWRlbnRpZmllcnMiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9IkhhemFyZG91c0lkZW50aWZpZXJzIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMaXN0T2ZIYXphcmRvdXNJZGVudGlmaWVycyIgdHlwZT0iTGlzdE9mSGF6YXJkb3VzSWRlbnRpZmllcnMiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkhhemFyZG91c0lkZW50aWZpZXJzIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJIYXphcmRvdXNSZWd1bGF0aW9uc0NvZGVkIiB0eXBlPSJBZ2VuY3lDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJIYXphcmRvdXNSZWd1bGF0aW9uc0NvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkhhemFyZENvZGUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkNvZGVFeHRlbnNpb24iIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkNvZGVWZXJzaW9uIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJIYXphcmRPZmZpY2lhbFRleHQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRyZW1DYXJkTnVtIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJIYXphcmRvdXNJZGVudGlmaWVycyIgdHlwZT0iSGF6YXJkb3VzSWRlbnRpZmllcnMiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSGF6YXJkQ2xhc3NDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWFyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kYXJ5Ii8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJIYXphcmRvdXNQbGFjYXJkSW5mb3JtYXRpb24iPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iSGF6YXJkb3VzUGxhY2FyZElkZW50aWZpY2F0aW9uIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJIYXphcmRvdXNQbGFjYXJkVGV4dCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSGF6YXJkb3VzUGxhY2FyZEluZm9ybWF0aW9uIiB0eXBlPSJIYXphcmRvdXNQbGFjYXJkSW5mb3JtYXRpb24iLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkhhemFyZG91c1RlbXBlcmF0dXJlcyI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJGbGFzaHBvaW50Ij4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUXVhbnRpdHkiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRW1lcmdlbmN5Ij4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUXVhbnRpdHkiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQ29udHJvbCI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlF1YW50aXR5Ii8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ikxpc3RPZlRlbXBlcmF0dXJlQ29kZWQiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJMaXN0T2ZEaW1lbnNpb24iLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSGF6YXJkb3VzVGVtcGVyYXR1cmVzIiB0eXBlPSJIYXphcmRvdXNUZW1wZXJhdHVyZXMiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkhhemFyZG91c1NoaXBtZW50SW5mb3JtYXRpb24iPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iSGF6YXJkUGFja2luZ0NvZGVkIiB0eXBlPSJIYXphcmRQYWNraW5nQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iSGF6YXJkUGFja2luZ0NvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkhhemFyZG91c1NoaXBtZW50Q29kZWQiIHR5cGU9IkhhemFyZG91c1NoaXBtZW50Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iSGF6YXJkb3VzU2hpcG1lbnRDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJIYXphcmRvdXNTaGlwbWVudE5vdGUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkhhemFyZG91c1pvbmVDb2RlZCIgdHlwZT0iSGF6YXJkb3VzWm9uZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkhhemFyZG91c1pvbmVDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJIYXphcmRvdXNTaGlwbWVudEluZm9ybWF0aW9uIiB0eXBlPSJIYXphcmRvdXNTaGlwbWVudEluZm9ybWF0aW9uIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkhhemFyZFBhY2tpbmdDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90U3BlY2lmaWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmVhdERhbmdlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaXVtRGFuZ2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaW5vckRhbmdlciIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJIYXphcmRvdXNTaGlwbWVudENvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRpdGlvbmFsRGVzY3JpcHRpdmVJbmZvcm1hdGlvbk5vdFJlcXVpcmVkQnlSZWd1bGF0aW9uQnV0RGVzaXJlZFRvQWNjb21wYW55VGhlTW92ZW1lbnRCeVRoZVNoaXBwZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcmdvQWlybGlmdE9ubHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRPVC0xMTNEb05vdEJ1bXBPckN1dE9mZkNhcldoaWxlSW5Nb3Rpb25EZWNsYXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGFtYWdlZENhck51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGFuZ2Vyb3VzV2hlbldldERlY2xhcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFTVNQYWdlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJZGVudGlmaWVzUHJvZHVjdHNJbkFIZWF0ZWRNb2x0ZW5TdGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGF6YXJkb3VzU3Vic3RhbmNlQ29uc3RpdHVlbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmhhbGF0aW9uSGF6YXJkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaW1pdGVkUXVhbnRpdHlEZWNsYXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUZBR1BhZ2VOdW1iZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1heGltdW1PcGVyYXRpbmdTcGVlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFyaW5lUG9sbHV0YW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb2lzb24tSW5oYWxhdGlvbkhhemFyZERlY2xhcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb2lzb25EZWNsYXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFkaW9hY3RpdmVNYXRlcmlhbERhdGEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlY2huaWNhbE9yQ2hlbWljYWxHcm91cE5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWRlTmFtZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FzdGVEZWNsYXJhdGlvbiIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJIYXphcmRvdXNab25lQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhemFyZFpvbmVBIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYXphcmRab25lQiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGF6YXJkWm9uZUMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhemFyZFpvbmVEIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJQcmljaW5nRGV0YWlsIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ikxpc3RPZlByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ikl0ZW1BbGxvd2FuY2VzT3JDaGFyZ2VzIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTGlzdE9mQWxsb3dPckNoYXJnZSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJUb3RhbFZhbHVlIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTW9uZXRhcnlWYWx1ZSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQcmljaW5nRGV0YWlsIiB0eXBlPSJQcmljaW5nRGV0YWlsIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZQcmljZSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iUHJpY2UiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZlByaWNlIiB0eXBlPSJMaXN0T2ZQcmljZSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUHJpY2UiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJQcmljaW5nVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iVW5pdFByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJQcmljZUJhc2lzUXVhbnRpdHkiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJRdWFudGl0eSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJDYWxjdWxhdGVkUHJpY2VCYXNpc1F1YW50aXR5Ij4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUXVhbnRpdHkiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJWYWxpZGl0eURhdGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJQcmljZVF1YW50aXR5UmFuZ2UiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJRdWFudGl0eSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IlByaWNlTXVsdGlwbGllciIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUHJpY2UiIHR5cGU9IlByaWNlIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJQcmljaW5nVHlwZSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUHJpY2VUeXBlQ29kZWQiIHR5cGU9IlByaWNlVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlByaWNlVHlwZUNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlByaWNpbmdUeXBlIiB0eXBlPSJQcmljaW5nVHlwZSIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJQcmljZVR5cGVDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuY2VsbGF0aW9uUHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlclRvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWluaW11bU9yZGVyUHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cG9ydFByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYW5nZURlcGVuZGVudFByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3RpdmVJbmdyZWRpZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc0lzUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbGN1bGF0aW9uTmV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYWxjdWxhdGlvbkdyb3NzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhJbmNsdWRlZEFsbG93YW5jZXNBbmRDaGFyZ2VzTm90SW5jbHVkZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdHVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXZlcmFnZVNlbGxpbmdQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5mb3JtYXRpb25QcmljZVRheEluY2x1ZGVkRXhjbHVkaW5nQWxsb3dhbmNlc09yQ2hhcmdlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5mb3JtYXRpb25QcmljZUV4Y2x1ZGluZ0FsbG93YW5jZXNPckNoYXJnZXNBbmRUYXhlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRkaXRpdmVVbml0UHJpY2VDb21wb25lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF2ZXJhZ2VHZW5lcmljUHJvZHVjdFByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbHRlcm5hdGVQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXZlcmFnZVdob2xlc2FsZVByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXNlQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFRpZXIxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFRpZXIyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFRpZXIzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFRpZXI0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFRpZXI1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFRpZXI2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFRpZXI3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFRpZXI4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFRpZXI5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFRpZXIxMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RUaWVyMTEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0VGllcjEyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFRpZXIxMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RUaWVyMTQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0VGllcjE1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFRpZXIxNiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RUaWVyMTciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0VGllcjE4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFRpZXIxOSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RUaWVyMjAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0VGllcjIxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFRpZXIyMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RUaWVyMjMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0VGllcjI0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFRpZXIyNSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RUaWVyMjYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0VGllcjI3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFRpZXIyOCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RUaWVyMjkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0VGllcjMwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYWxjdWxhdGlvblByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXRhbG9nUHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlbnRyYWxEaXN0cmlidXRpb25GYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudERvbWVzdGljVmFsdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYW5nZWRQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc3VtZXJVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25maXJtZWRVbml0UHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlY2xhcmVkQ3VzdG9tc1VuaXRWYWx1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVhbGVyQWRqdXN0ZWRQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpYnV0b3JzUHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2NvdW50UHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2NvdW50QW1vdW50QWxsb3dlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlyZWN0U3RvcmVEZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlyZWN0U2hpcFByb2dyYW1QcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWNzY1ByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbWVyZ2VuY3lEaXJlY3RTaGlwUHJpY2VPcmlnaW5hbEVxdWlwbWVudE1hbnVmYWN0dXJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1lcmdlbmN5RGlyZWN0U2hpcFByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbWVyZ2VuY3lEaXJlY3RTaGlwUHJpY2VTdXBwbGllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1lcmdlbmN5RGlyZWN0U2hpcFByaWNlV2FyZWhvdXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZWRQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwZWN0ZWRVbml0UHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZsYXRDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZXF1ZW50RGVsaXZlcnlTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsRXhjaXNlVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVlR29vZHNQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbFVwcGVyTGltaXRQcmljZU1heGltdW1BbGxvd2FibGVDb3N0UHJpY2luZ0ZvckRydWdzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJtUHJpY2VEb05vdEFkdmlzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJubWVudFByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0UHJpY2VUaHJvdWdoUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZHVzdHJpYWxQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5mb3JtYXRpb25QcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdGl0dXRpb25hbFByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZvaWNlQmlsbGluZ1ByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaXN0UHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbmRhdG9yeVRvQWR2aXNlVW5pdFByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaW5pbXVtQWN0aXZpdHlTdXJjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1heGltdW1PcmRlclF1YW50aXR5UHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1PcmRlclF1YW50aXR5UHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1DaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1SZWxlYXNlUXVhbnRpdHlQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bVByaWNlUmVkdWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYW51ZmFjdHVyZXJzU3VnZ2VzdGVkUmV0YWlsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXhpbXVtUmVsZWFzZVF1YW50aXR5UHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbnRyYWN0VGllcjEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbnRyYWN0VGllcjIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbnRyYWN0VGllcjMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbnRyYWN0VGllcjQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbnRyYWN0VGllcjUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbnRyYWN0VGllcjYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbnRyYWN0VGllcjciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbnRyYWN0VGllcjgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbnRyYWN0VGllcjkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbnRyYWN0VGllcjEwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25jb250cmFjdFRpZXIxMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uY29udHJhY3RUaWVyMTIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbnRyYWN0VGllcjEzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25jb250cmFjdFRpZXIxNCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uY29udHJhY3RUaWVyMTUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbnRyYWN0VGllcjE2Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25jb250cmFjdFRpZXIxNyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uY29udHJhY3RUaWVyMTgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbnRyYWN0VGllcjE5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25jb250cmFjdFRpZXIyMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uY29udHJhY3RUaWVyMjEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbnRyYWN0VGllcjIyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25jb250cmFjdFRpZXIyMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uY29udHJhY3RUaWVyMjQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbnRyYWN0VGllcjI1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25jb250cmFjdFRpZXIyNiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uY29udHJhY3RUaWVyMjciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmNvbnRyYWN0VGllcjI4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25jb250cmFjdFRpZXIyOSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uY29udHJhY3RUaWVyMzAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ldEl0ZW1QcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV0V2VpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcHRpb25hbFRvQWR2aXNlVW5pdFByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbFB1cmNoYXNlT3JkZXJQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpY2VCcmVha1F1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml0UHJpY2VCZWdpbm5pbmdRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpY2VCcmVha1B1cmNoYXNlT3JkZXJDb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpY2VDYXRhbG9ndWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlckVhY2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaWNlSW5FZmZlY3RBdFRpbWVPZlNoaXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJLaWxvZ3JhbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyTGl0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXBhaWRGcmVpZ2h0Q2hhcmdlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZmVzc2lvbmFsUHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y2Vyc1ByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9tb3Rpb25hbFByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJUb25uZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lmaWVkVW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvdmlzaW9uYWxQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3Jvc3NXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdW90ZVByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNhbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldGFpbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VnZ2VzdGVkRGVhbGVyTmV0UHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1Z2dlc3RlZEZsZWV0UHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBBbmREZWJpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VnZ2VzdGVkTGlzdFByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsUHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpbmdsZVByaWNlRmFjdG9yc0VxdWFsaXplZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VnZ2VzdGVkUmV0YWlsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZFByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdW1PZkxpbmVJdGVtcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VnZ2VzdGVkV2hvbGVzYWxlUHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvQmVOZWdvdGlhdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaHJlc2hvbGRQcmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxJbnZvaWNlQW1vdW50RHVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc2ZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhZGVkVW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhlb3JldGljYWxXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaXRDb3N0UHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ildob2xlc2FsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWm9uZVByaWNlIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJVbml0UHJpY2UiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlVuaXRQcmljZVZhbHVlIiB0eXBlPSJEZWNpbWFsMjFfNiIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJDdXJyZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJVbml0T2ZNZWFzdXJlbWVudCIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVW5pdFByaWNlIiB0eXBlPSJVbml0UHJpY2UiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iRGVjaW1hbDIxXzYiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpkZWNpbWFsIj4KLSAgICAgICAgICAgIDx4c2Q6dG90YWxEaWdpdHMgdmFsdWU9IjIxIi8+Ci0gICAgICAgICAgICA8eHNkOmZyYWN0aW9uRGlnaXRzIHZhbHVlPSI2Ii8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJQcmljZU11bHRpcGxpZXIiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlByaWNlTXVsdGlwbGllckNvZGVkIiB0eXBlPSJQcmljZU11bHRpcGxpZXJDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJQcmljZU11bHRpcGxpZXJDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTXVsdGlwbGllciIgdHlwZT0ieHNkOmRlY2ltYWwiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlByaWNlTXVsdGlwbGllciIgdHlwZT0iUHJpY2VNdWx0aXBsaWVyIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IlByaWNlTXVsdGlwbGllckNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3N0TWFya3VwTXVsdGlwbGllci1PcmlnaW5hbENvc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvc3RNYXJrdXBNdWx0aXBsaWVyLVJldGFpbENvc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2NvdW50TXVsdGlwbGllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zdE1hcmt1cE11bHRpcGxpZXItV2hvbGVzYWxlQ29zdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyY2VudFNvbHV0aW9uTXVsdGlwbGllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VsbGluZ011bHRpcGxpZXIiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlRheCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVGF4RnVuY3Rpb25RdWFsaWZpZXJDb2RlZCIgdHlwZT0iVGF4RnVuY3Rpb25RdWFsaWZpZXJDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJUYXhGdW5jdGlvblF1YWxpZmllckNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJUYXhDYXRlZ29yeUNvZGVkIiB0eXBlPSJUYXhDYXRlZ29yeUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRheENhdGVnb3J5Q29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUmVhc29uVGF4RXhlbXB0Q29kZWQiIHR5cGU9IlJlYXNvblRheEV4ZW1wdENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlJlYXNvblRheEV4ZW1wdENvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJUYXhUeXBlQ29kZWQiIHR5cGU9IlRheFR5cGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJUYXhUeXBlQ29kZWRPdGhlciI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IklkZW50aWZpZXIiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVGF4UGVyY2VudCIgdHlwZT0iRGVjaW1hbDEwXzQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRheFBheW1lbnRNZXRob2RDb2RlZCIgdHlwZT0iVGF4UGF5bWVudE1ldGhvZENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRheFBheW1lbnRNZXRob2RDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJUYXhhYmxlQW1vdW50IiB0eXBlPSJEZWNpbWFsMjFfNiIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVGF4YWJsZUFtb3VudEluVGF4QWNjb3VudGluZ0N1cnJlbmN5IiB0eXBlPSJEZWNpbWFsMjFfNiIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlRheEFtb3VudCIgdHlwZT0iRGVjaW1hbDIxXzYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRheEFtb3VudEluVGF4QWNjb3VudGluZ0N1cnJlbmN5IiB0eXBlPSJEZWNpbWFsMjFfNiIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVGF4TG9jYXRpb24iPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJMb2NhdGlvbiIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJUYXgiIHR5cGU9IlRheCIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJUYXhGdW5jdGlvblF1YWxpZmllckNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmRpdmlkdWFsRHV0eVRheE9yRmVlQ3VzdG9tc0l0ZW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsT2ZBbGxEdXRpZXNUYXhlc0FuZEZlZXNDdXN0b21zSXRlbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxPZkVhY2hEdXR5VGF4T3JGZWVUeXBlQ3VzdG9tc0RlY2xhcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbE9mQWxsRHV0aWVzVGF4ZXNBbmRGZWVUeXBlc0N1c3RvbXNEZWNsYXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0R1dHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhSZWxhdGVkSW5mb3JtYXRpb24iLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iVGF4Q2F0ZWdvcnlDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdyaWN1bHR1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpcmVjdFBheUlEIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNhYmxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzYWJsZWRWZXRlcmFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEdXR5UGFpZEJ5U3VwcGxpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZW1wdEZvckV4cG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhlbXB0Rm9yUmVzYWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGVtcHRmcm9tQ291bnR5UHJvcGVydHlUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZW1wdGZyb21Mb2NhbFByb3BlcnR5VGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGVtcHRmcm9tU2Nob29sUHJvcGVydHlUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZW1wdGZyb21TdGF0ZVByb3BlcnR5VGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGVtcHRGcm9tVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGVtcHRHb29kc2FuZFNlcnZpY2VzVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGVtcHRMZXR0ZXJPbkZpbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZW1wdExvY2FsU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhlbXB0Tm90Rm9yUmVzYWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGVtcHQtUGVyU3RhdGVMYXciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZW1wdFByb3ZpbmNpYWxTYWxlc1RheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhlbXB0U2FsZVRvVVNHb3Zlcm5tZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGVtcHRUb2xsU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZUV4cG9ydEl0ZW1UYXhOb3RDaGFyZ2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIaWdoZXJSYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb21lc3RlYWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm9yVGF4YWJsZU1hdGVyaWFsRXhlbXB0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3dlclJhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFsVGF4YWJsZUxhYm9yRXhlbXB0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaXhlZFRheFJhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbi1Ib21lc3RlYWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vLU5vdFRheEV4ZW1wdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90RXhlbXB0Rm9yUmVzYWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RFeGVtcHROb3RGb3JSZXNhbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdFRheGFibGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wZW5TcGFjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXJQcm9wZXJ0eVRheEV4ZW1wdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3ZlcjY1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWN1cnJpbmdFeGVtcHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VzT3V0c2lkZVNjb3BlT2ZUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YW5kYXJkUmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxseUV4ZW1wdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNmZXJyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVzYWdlRXhlbXB0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYWx1ZUFkZGVkVGF4RHVlRnJvbUFQcmV2aW91c0ludm9pY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhbHVlQWRkZWRUYXhOb3ROb3dEdWVGb3JQYXltZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JraW5nRmFybSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWWVzLVRheEV4ZW1wdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWmVyb1JhdGVkR29vZHMiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iUmVhc29uVGF4RXhlbXB0Q29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZW1wdC1Gb3JFeHBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Illlcy1UYXhFeGVtcHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vLU5vdFRheEV4ZW1wdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhlbXB0LUZvclJlc2FsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90RXhlbXB0T3JGb3JSZXNhbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZW1wdC1Ob3RGb3JSZXNhbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdEV4ZW1wdE5vdEZvclJlc2FsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlyZWN0UGF5SWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZW1wdC1TYWxlVG9VU0dvdmVybm1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZW1wdC1QZXJTdGF0ZUxhdyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFib3JUYXhhYmxlTWF0ZXJpYWxFeGVtcHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFsVGF4YWJsZUxhYm9yRXhlbXB0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RUYXhhYmxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNhYmxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhlbXB0VG9sbFNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZW1wdC1Hb29kc0FuZFNlcnZpY2VzVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGVtcHQtUHJvdmluY2lhbFNhbGVzVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb21lc3RlYWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFncmljdWx0dXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JraW5nRmFybSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3BlblNwYWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGVtcHRMb2NhbFNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2FibGVkVmV0ZXJhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9uLUhvbWVzdGVhZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3ZlcjY1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGVtcHRGcm9tU2Nob29sUHJvcGVydHlUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZW1wdEZyb21Mb2NhbFByb3BlcnR5VGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWN1cnJpbmdFeGVtcHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZW1wdEZyb21Db3VudHlQcm9wZXJ0eVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxseUV4ZW1wdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVXNhZ2VFeGVtcHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZW1wdEZyb21TdGF0ZVByb3BlcnR5VGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlclByb3BlcnR5VGF4RXhlbXB0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGVtcHQtTGV0dGVyT25GaWxlIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IlRheFR5cGVDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iOTExQ2l0eVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iOTExQ291bnR5VGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI5MTFFeGNpc2VUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjkxMVN0YXRlVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI5MTFUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY29tbW9kYXRpb25zVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZFZhbG9yZW1UYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFncmljdWx0dXJhbEV4cG9ydFJlYmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdyaWN1bHR1cmFsbGV2eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxjb2hvbGljQmV2ZXJhZ2VUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsY29ob2xNYXJrVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxUYXhlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW50aS1EdW1waW5nRHV0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzZXNzbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NMaWNlbnNlRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc1ByaXZpbGVnZVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaXR5UmVudGFsVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaXR5U2FsZXNUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNpdHlUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvZmZlZVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29pbk9wZXJhdGVkRGV2aWNlVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21tb2RpdHlTcGVjaWZpY1RheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ycG9yYXRlSW5jb21lVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VudGVydmFpbGluZ0R1dHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdW50eU9yUGFyaXNoU2FsZXNUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdW50eVJlbnRhbFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291bnR5VGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zRHV0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVmYXVsdExhYm9yVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3ltZW50VGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmVyZ3lUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuaGFuY2VkOTExU3RhdGVFeGNpc2VUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVudmlyb25tZW50YWxUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWlwbWVudFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXN0YXRlVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGNpc2VEdXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsRXhjaXNlVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsSW5jb21lVGF4V2l0aGhvbGRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxWYWx1ZUFkZGVkVGF4T25Hb29kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbFZhbHVlQWRkZWRUYXhPblNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWVJbkxpZXUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZJQ0FNZWRpY2FyZVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRklDQVNvY2lhbFNlY3VyaXR5VGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGSUNBVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmFuY2hpc2VUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1ZWxMVVNUVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdWVsU3BpbGxUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1ZWxTdXBlckZ1bmRUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdhbWluZ1RheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VuZXJhbENvbnN0cnVjdGlvblRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2lmdFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZHNBbmRTZXJ2aWNlc1RheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3Jvc3NSZWNlaXB0c1RheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGFuZGljYXBUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhemFyZG91c1dhc3RlVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIaWdod2F5VXNlVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbGx1bWluYW50c1RheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW1wb3J0VGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmRpdmlkdWFsSW5jb21lVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmRpdmlkdWFsVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmhlcml0YW5jZVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJuYXRpb25hbEZ1ZWxUYXhBZ3JlZW1lbnRUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm9yQnlUcmFkZVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVha3lVbmRlcmdyb3VuZFN0b3JhZ2VUYW5rVGF4RmVkZXJhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVha3lVbmRlcmdyb3VuZFN0b3JhZ2VUYW5rVGF4U3RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpY2Vuc2VUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpZ2h0RHVlc1BheWFibGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2FsQ29uc3RydWN0aW9uVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhbFNhbGVzVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhbFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTHVzdFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0ZXJpYWxUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1ldHJvcG9saXRhblRyYW5zaXRUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1UYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pc2NlbGxhbmVvdXNDYXNoRGVwb3NpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlzY2VsbGFuZW91c1N0YXRlVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb25ldGFyeUNvbXBlbnNhdG9yeUFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW90b3JGdWVsVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNdW5pY2lwYWxUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9jY3VwYXRpb25hbFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXJUYXhlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFwZXJDb25zb3J0aXVtVGF4LUl0YWx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJzb25hbFByb3BlcnR5VGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXRyb2xldW1UYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvc3RUaHJlc2hvbGRUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWZlcmVuY2VEdXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVUaHJlc2hvbGRUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3Zpc2lvbmFsY291bnRlcnZhaWxpbmdEdXR5Qm9uZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvdmlzaW9uYWxDb3VudGVydmFpbGluZ0R1dHlDYXNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm92aXNpb25hbER1dHlCb25kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm92aXNpb25hbER1dHlDYXNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdWJsaWNIZWFsdGhBbmRFZHVjYXRpb25UYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYWxQcm9wZXJ0eVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FsZXNBbmRVc2VUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjaG9vbFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kYXJ5UGVyY2VudGFnZVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2V2ZXJhbmNlVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlmdGVkU29jaWFsU2VjdXJpdGllcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpZnRlZFdhZ2VUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvbGlkV2FzdGVUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxDb25zdHJ1Y3Rpb25UYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YWRpdW1UYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YW1wRHV0eS1JbXBvc3RhZGlCb2xsbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVhbmRMb2NhbFNhbGVzVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZUFuZExvY2FsVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZUFuZFByb3ZpbmNpYWxUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlRXhjaXNlVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZW9yUHJvdmluY2lhbEZ1ZWxUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlT3JQcm92aW5jaWFsU2FsZXNUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlb3JQcm92aW5jaWFsVGF4T25Hb29kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVvclByb3ZpbmNpYWxUYXhPblNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZVJlbnRhbFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVUYXhvblNwZWNpZmljTGFib3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cGVyZnVuZFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VyVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXNwZW5kZWREdXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWxlY29tbXVuaWNhdGlvbnNEZXZpY2VGb3JUaGVEZWFmU2VydmljZUV4Y2lzZVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVsZWNvbW11bmljYXRpb25zVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaHJlc2hvbGRUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvYmFjY29UYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvbm5hZ2VUYXhlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdXJpc21UYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zaXRUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlR1cm5PdmVyVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmVtcGxveW1lbnRUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVzZVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVXRpbGl0eVVzZXJzVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYWx1YXRpb25EZXBvc2l0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYWx1ZUFkZGVkVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWxsU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2l0aGhvbGRpbmdUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldvcmtlcnNDb21wZW5zYXRpb25UYXgiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iRGVjaW1hbDEwXzQiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpkZWNpbWFsIj4KLSAgICAgICAgICAgIDx4c2Q6dG90YWxEaWdpdHMgdmFsdWU9IjEwIi8+Ci0gICAgICAgICAgICA8eHNkOmZyYWN0aW9uRGlnaXRzIHZhbHVlPSI0Ii8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IlRheFBheW1lbnRNZXRob2RDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9ybWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXJlY3RQYXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGZBc3Nlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheVZlbmRvciIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTG9jYXRpb24iPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iTG9jYXRpb25RdWFsaWZpZXJDb2RlZCIgdHlwZT0iTG9jYXRpb25RdWFsaWZpZXJDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJMb2NhdGlvblF1YWxpZmllckNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6Y2hvaWNlPgotICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IkxvY2F0aW9uSWRlbnRpZmllciIvPgotICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJFeHRlcm5hbEFkZHJlc3NJRCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ik5hbWVBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8L3hzZDpjaG9pY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IkdQU0Nvb3JpZGluYXRlcyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTG9jYXRpb24iIHR5cGU9IkxvY2F0aW9uIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkxvY2F0aW9uUXVhbGlmaWVyQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikp1cmlzZGljdGlvblRvUmVjZWl2ZUNyZWRpdEZvclVuaWZvcm1Db21tZXJjaWFsQ29kZUZpbGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNtaXR0aW5nVXRpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2lnbm9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZW5zdXNTY2hlZHVsZUQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuaWZvcm1Db21tZXJjaWFsQ29kZUZpbGluZ09mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudEFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlbnN1c0Jsb2NrR3JvdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvbWVBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb21lQmFzZUFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlbnN1c1RyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZW5zdXNTY2hlZHVsZUsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2FsQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFpbGluZ0FkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZmljZUFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcm1hbmVudEFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpcnRocGxhY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ildvcmxkd2lkZUdlb2dyYXBoaWNMb2NhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5lYXJlc3RDcm9zc1N0cmVldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kYXJ5Q3Jvc3NTdHJlZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhbmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJRdWFydGVyU2VjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFya2VySWRlbnRpZmllckxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb3V0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm91dGVTdWJkaXZpc2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JpZExvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXJrZXJUeXBlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXRpdHVkZS1Mb25naXR1ZGVTb3VyY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcFNvdXJjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFwUmVmZXJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmlkU291cmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGlxdW90Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCbG9jayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyYWluaG9sZU51bWJlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2l0eUJsb2NrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb290YWdlQ2FsbERpcmVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYXRpb25EaXJlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik91dGVyQ29udGluZW50YWxMZWFzZUxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcFF1YWRyYW5nbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW5jaXBhbE1lcmlkaWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdXRlckNvbnRpbmVudGFsU2hlbGZBcmVhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdXRlckNvbnRpbmVudGFsU2hlbGZCbG9jayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2ZmaWNpYWxQcm90cmFjdGlvbkRpYWdyYW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YXJ0ZXJRdWFydGVyUXVhcnRlclNlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YXJ0ZXJRdWFydGVyU2VjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VjdGlvblR5cGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFic3RyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhZ3VlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJ2ZXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbml2ZXJzYWxUcmFuc3ZlcnNlTWVyY2F0b3JRdWFkcmFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291cnNlRGlyZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcmVhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZW5kZXJzTG9jYXRpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXZlcnNMb2NhdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW5udWFsU3RhdGVtZW50c01haWxpbmdBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaXR5YW5kU3RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbFBvaW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJtZWRTZXJ2aWNlc0xvY2F0aW9uRGVzaWduYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyYW5jaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NFY29ub21pY0FyZWFSZWdpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb3Zlcm5tZW50QmlsbG9mTGFkaW5nT2ZmaWNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhY2VPZkJ1c2luZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHZW9wb2xpdGljYWxOYW1lQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291bnRyeU9mT3JpZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25maXJtYXRpb25NYWlsaW5nQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291bnRyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuYWRpYW5DdXN0b21zT2ZmaWNlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ycmVzcG9uZGVuY2VNYWlsaW5nQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2l0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmF0aW9uYWxSYXRlQmFzaXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdW50eU9yUGFyaXNoQW5kU3RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluVGFua0NhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuYWRpYW5TUExDIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VudHlPclBhcmlzaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpYnV0aW9uQ2VudGVyTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXN0aW5hdGlvbi1TaGlwcGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpY3RPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3RyaWN0T2ZSZXNpZGVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvbWljaWxlVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV2ZW50TG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVyTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhY3RvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWlnaHRFcXVhbGl6YXRpb25Qb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWlnbkZyZWlnaHRGb3J3YXJkZXJMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmVkZXJhbEluZm9ybWF0aW9uUHJvY2Vzc2luZ1N0YW5kYXJkczU1LU5hbWVkUG9wdWxhdGVkUGxhY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVLlMuQ3VzdG9tc0ZhY2lsaXRpZXNJbmZvcm1hdGlvbmFuZFJlc291cmNlTWFuYWdlbWVudFN5c3RlbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWlnaHRTdGF0aW9uQWNjb3VudGluZ0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVpZ25UcmFkZVpvbmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWVBbG9uZ3NpZGVWZXNzZWwtRnJlZU9uQm9hcmRQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlaWdodFN0YXRpb25HZW9ncmFwaGljTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmF0aW9uYWxBaXJUcmFuc3BvcnRBc3NvY2lhdGlvbkxvY2F0aW9uUXVhbGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJc3N1ZUxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaWxpdGFyeVN0YW5kYXJkTW92ZW1lbnRQcm9jZWR1cmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3N0YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluU3RvcmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybWVkaWF0ZUZPQlBvaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3J0T2ZFbWJhcmthdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR292ZXJubWVudEZ1cm5pc2hlZFByb3BlcnR5Rk9CUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2FsT2ZmaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaWxsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXRyb3BvbGl0YW5TYW1wbGluZ0FyZWFSZWdpb25Db2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXhpY2FuUG9zdGFsQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2l0eU9yU3RhdGVGcm9tUG9pbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW4tQWZ0ZXJMb2FkaW5nT25FcXVpcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyVW5saXN0ZWRGcmVlT25Cb2FyZFBvaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVuYW5kUHJlcGF5U3RhdGlvbkxpc3RDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlclVubGlzdGVkQWNjZXB0YW5jZVBvaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW4tU2hpcHBpbmdQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25WZXNzZWwtRnJlZU9uQm9hcmRQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9ydG9mQXJyaXZhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9ydG9mRGlzY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb2xpY3lNYWlsaW5nQWRkcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFyZW50c0FkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1hcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW9yQnVzaW5lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmluY2lwYWxTZXJ2aWNpbmdPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvb2xQb2ludCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iM0RpZ2l0VVNaSVAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjREaWdpdFVTWklQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI1RGlnaXRVU1pJUCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iM0RpZ2l0Q2FuYWRpYW5Qb3N0YWxDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI2RGlnaXRDYW5hZGlhblBvc3RhbENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhdGVBcmVhQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5SYWlsQ2FyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpb25hbEVkdWNhdGlvblNlcnZpY2VBZ2VuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2lvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUnVyYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YW5kYXJkQ2FycmllckFscGhhQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm91dGVBZG1pbmlzdHJhdGl2ZU1lc3NhZ2VUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJ1cmJhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2l0eU9yU3RhdGVBbmRQb2ludHNXaXRoaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjaG9vbERpc3RyaWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdW1tZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b3JhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjaG9vbENhbXB1c0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTLVNQTEMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b3JlTnVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZU9yUHJvdmluY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjaG9vbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5TdG9yYWdlVGFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3dpdGNoaW5nRGlzdHJpY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zY29udGluZW50YWxGcmVpZ2h0QnVyZWF1Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXJtaW5hbENhcmdvTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcm1pbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3duc2hpcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVtcG9yYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsVGVycml0b3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhpbmdEaXN0cmljdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdGVkTmF0aW9uc0xvY2F0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVXJiYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1c2luZXNzVW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmFjYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZpbGxhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlc3NlbFN0b3dhZ2VMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2hhcmYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhcmVob3VzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2ludGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJab25lQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3ZlcnNlYXNBbmRQb2ludExvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbFBvcnRPZkRpc2NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29sbGVjdENoYXJnZUxvY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zT2ZmaWNlT2ZNYW5pZmVzdE9yaWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc09mZmljZU9mTWFuaWZlc3REZXN0aW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0aXZpdHlMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luUmFpbEludGVybW9kYWxUZXJtaW5hbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzdGluYXRpb25SYWlsSW50ZXJtb2RhbFRlcm1pbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdE9wdGlvbmFsUG9ydE9mRGlzY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRPcHRpb25hbFBvcnRPZkRpc2NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhY2VPZkFjY2VwdGFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY29uc29saWRhdGlvblBvaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZS1Db25zb2xpZGF0aW9uUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvcnRPZkRpc2NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhY2VPZkRlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVpZ2h0UGF5YWJsZUF0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3J0T2ZFbnRyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9ydE9mRXhpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJpbVBvaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsT2ZMYWRpbmdQb3J0T2ZMb2FkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsT2ZMYWRpbmdQb3J0T2ZEaXNjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvcnRPZkxvYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc3RpbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbERlc3RpbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3BhdGNoaW5nUG9vbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbE9mTGFkaW5nT3JpZ2luT2ZHb29kcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhY2VPZlJlY2VpcHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldHVyblBvb2wiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zc2hpcG1lbnRQb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVwYWlkQ2hhcmdlTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxPZkxhZGluZ1JlbGVhc2VPZmZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaXJkT3B0aW9uYWxQb3J0T2ZEaXNjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGF5UG9ydCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTG9jYXRpb25JZGVudGlmaWVyIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMb2NJRCI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IklkZW50aWZpZXIiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iTG9jYXRpb25EZXNjcmlwdGlvbiIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTG9jYXRpb25JZGVudGlmaWVyIiB0eXBlPSJMb2NhdGlvbklkZW50aWZpZXIiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkdQU0Nvb3JpZGluYXRlcyI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iR1BTU3lzdGVtIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGF0aXR1ZGUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMb25naXR1ZGUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IkdQU0Nvb3JpZGluYXRlcyIgdHlwZT0iR1BTQ29vcmlkaW5hdGVzIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZBbGxvd09yQ2hhcmdlIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJBbGxvd09yQ2hhcmdlIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMaXN0T2ZBbGxvd09yQ2hhcmdlIiB0eXBlPSJMaXN0T2ZBbGxvd09yQ2hhcmdlIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJBbGxvd09yQ2hhcmdlIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJbmRpY2F0b3JDb2RlZCIgdHlwZT0iSW5kaWNhdG9yQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iSW5kaWNhdG9yQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQmFzaXNDb2RlZCIgdHlwZT0iQmFzaXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJCYXNpc0NvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNZXRob2RPZkhhbmRsaW5nQ29kZWQiIHR5cGU9Ik1ldGhvZE9mSGFuZGxpbmdDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJNZXRob2RPZkhhbmRsaW5nQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkFsbG93YW5jZU9yQ2hhcmdlRGVzY3JpcHRpb24iPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJBbGxvd09yQ2hnRGVzYyIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IlZhbGlkaXR5RGF0ZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkJhc2lzUXVhbnRpdHlSYW5nZSI+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlF1YW50aXR5Ii8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJCYXNpc01vbmV0YXJ5UmFuZ2UiLz4KLSAgICAgICAgICAgIDwveHNkOmNob2ljZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlR5cGVPZkFsbG93YW5jZU9yQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJUYXgiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IlNlcU5vIiB0eXBlPSJ4c2Q6aW50IiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSIxIi8+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IkFsbG93T3JDaGFyZ2UiIHR5cGU9IkFsbG93T3JDaGFyZ2UiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSW5kaWNhdG9yQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFib3V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbG93YW5jZUxpbmVJdGVtcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxsb3dhbmNlTWVzc2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxsb3dhbmNlUGVyQ2FsbE9mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxvd2FuY2VSZXF1ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZUxpbmVJdGVtcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlTWVzc2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlUGVyQ2FsbE9mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2VSZXF1ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGluZUl0ZW1BbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpbmVJdGVtQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXhpbXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaW51cy1BbW91bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbnVzLVBlcmNlbnRhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb0FsbG93YW5jZU9yQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGx1cy1BbW91bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsdXMtUGVyY2VudGFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGx1c09yTWludXNPckFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGx1c09yTWludXMtUGVyY2VudGFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbW90aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbE90aGVyIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkJhc2lzQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YW50aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJjZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb25ldGFyeUFtb3VudCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJNZXRob2RPZkhhbmRsaW5nQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxCYWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZJbnZvaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZW5kb3JDaGVja1RvQ3VzdG9tZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyZWRpdEN1c3RvbWVyQWNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlVG9CZVBhaWRCeVZlbmRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlVG9CZVBhaWRCeUN1c3RvbWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcHRpb25hbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2ZmR3Jvc3NRdWFudGl0eUludm9pY2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxvd2FuY2VUb0JlSXNzdWVkQnlWZW5kb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbG93YW5jZVRvQmVJc3N1ZWRCeVJlc2VsbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2VEZW5pZWRCeVZlbmRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuY2VsQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm92aWRlQW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmZvcm1hdGlvbk9ubHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbi1QYXlhYmxlVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NydWFsRnVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxhdEZ1bmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2hJbkFkdmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbGN1bGF0ZUFuZEFkZHRvSW52b2ljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29sbGVjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlcGFpZCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQWxsb3dPckNoZ0Rlc2MiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUmVmSUQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iTGlzdE9mRGVzY3JpcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTZXJ2aWNlQ29kZWQiIHR5cGU9IlNlcnZpY2VDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTZXJ2aWNlQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQWxsb3dPckNoZ0Rlc2MiIHR5cGU9IkFsbG93T3JDaGdEZXNjIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZEZXNjcmlwdGlvbiI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iRGVzY3JpcHRpb24iLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZkRlc2NyaXB0aW9uIiB0eXBlPSJMaXN0T2ZEZXNjcmlwdGlvbiIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iRGVzY3JpcHRpb24iPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkRlc2NyaXB0aW9uVGV4dCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTGFuZ3VhZ2UiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IkRlc2NyaXB0aW9uIiB0eXBlPSJEZXNjcmlwdGlvbiIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJTZXJ2aWNlQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFib3V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBYnNvbHV0ZU1pbmltdW1DaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY2Vzc0NoYXJnZS1GZWRlcmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2Nlc3NDaGFyZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2Nlc3NDaGFyZ2UtU3RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnROdW1iZXJDb3JyZWN0aW9uQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2lkQmF0dGVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNrbm93bGVkZ21lbnRvZkRlbGl2ZXJ5RmVlQU9EIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3RpdmF0aW9uT2ZDYXJuZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkZGl0aW9uYWxDb21tZXJjaWFsSW52b2ljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkZGl0aW9uYWxDb3BpZXNPZkZyZWlnaHRCaWxsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRpdGlvbmFsTWF0ZXJpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkZGl0aW9uYWxUYXJpZmZDbGFzc2lmaWNhdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkZE9uLURlc3RpbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRPbi1PcmlnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkZHJlc3NDb3JyZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRUb01ha2VNYXJrZXRWYWx1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRqdXN0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRqdXN0bWVudEZvck1heGltdW1DaGFyZ2VzQmlsbGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRqdXN0bWVudEZvck1pbmltdW1BdmVyYWdlVGltZVJlcXVpcmVtZW50QmlsbGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRqdXN0bWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkbWluaXN0cmF0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZFZhbG9yZW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmFuY2VDaGFyZ2VzSGFuZGxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmFuY2VEZXN0aW5hdGlvbkFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWR2YW5jZURlc3RpbmF0aW9uRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZhbmNlRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZhbmNlTGFkaW5nQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZhbmNlT3JpZ2luQW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZhbmNlT3JpZ2luRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZhbmNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWR2ZXJ0aXNpbmdBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFmZmlkYXZpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdlbnREaXNidXJzZW1lbnQtRGVzdGluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZW50RGlzYnVyc2VtZW50LU9yaWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWlyY3JhZnRPbkdyb3VuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWlyRXhwb3J0Q2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpckV4cHJlc3NDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpcmxpbmVPcGVuaW5nRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJwb3J0VGVybWluYWxIYW5kbGluZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWlyVHJhbnNwb3J0YXRpb25DaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsY29ob2xpY0JldmVyYWdlUmVwb3J0Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxlZ2hlbnlDb3VudHlQQURlbGl2ZXJ5Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbG93YW5jZUxpbmVJdGVtcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxsb3dhbmNlTWVzc2FnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWxsb3dhbmNlUGVyQ2FsbE9mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxvd2FuY2VBZHZhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxvd2FuY2VGb3JDb25zaWdubWVudE1lcmNoYW5kaXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxvd2FuY2VOb24tUGVyZm9ybWFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbG93YW5jZVJlcXVlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsdGVyYXRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbWVuZGluZ0V4cG9ydERvY3VtZW50YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFubmVhbEhlYXRTdGVlbG9yR2xhc3NUcmVhdG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFub2RpemluZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW50aS1kdW1waW5nRHV0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwb2ludG1lbnROb3RpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFyYml0cmFyeUluQWRkaXRpb25Ub1Rocm91Z2hSYXRlc2FuZENoYXJnZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFydFdvcmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2VtYmx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3Npc3RBbW91bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF0dGFjaG1lbnRzVG9CaWxsT2ZMYWRpbmdDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhZERlYnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhbmtpbmdEcmFmdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhcmdlRnJlaWdodEFsbEtpbmRzU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFzZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFzaWNSZW9yZGVyQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZWFtaW5nQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZWRkaW5nRmVlZGluZ0Rpc2luZmVjdGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVlZkZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmV5b25kQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZXlvbmRGcmVpZ2h0Q2hhcmdlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbEFuZEhvbGQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGxlZERlbWFuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbE9mTGFkaW5nQXR0ZW5kYW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbE9mTGFkaW5nQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCbGFja0x1bmdUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJsb2NraW5nQW5kQnJhY2luZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmxvd2VyQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb2J0YWlsQ2hhcmdlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9uZEFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9uZENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9wU2hlZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvcmRlYXV4QXJiaXRyYXJpZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvdGgtRmxhdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJlYWtidWxrU2VydmljZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyZWFrQnVsa1N1cmZhY2VDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyaWRnZVRvbGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyb2tlbkxvdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJva2VuUGFja2FnZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJva2VyYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCcm9rZXJhZ2VPckR1dHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1bmtlckFkanVzdG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1bmtlckFkanVzdG1lbnQtMjBGb290Q29udGFpbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdW5rZXJBZGp1c3RtZW50LTQwRm9vdENvbnRhaW5lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVua2VyU3VyY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXJkZW5PdmVyaGVhZE9yQWxsb3dhbmNlRm9ySW5kaXJlY3RDb3N0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVybmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5ZXJIYW5kQ2FycnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1eWVyc0NhckFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FibGVQcmVzc3VyaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FibGVzU2VuZGluZ09mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYWxsVGFnIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW1wQXJiaXRyYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5hZGFHcmVhdExha2VzQWRkaXRpb25hbHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbmFkaWFuQ1FDdXN0b21zQ2xlYXJhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5hZGlhbkN1cnJlbmN5RXhjaGFuZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbmFkaWFuSW1wb3J0VGVybWluYXRpb25GZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbmFkaWFuUmVjb25zaWdubWVudEZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuYWRpYW5SZW1hbmlmZXN0RmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5jZWxsYXRpb25DaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbmNlbGxlZE9yZGVySGVhdnlEdXR5RmxhdGNhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FwcGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FwdHVyZUFkZGl0aW9uYWxEYXRhIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJnb1RheGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJMb2FkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJSZW50YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcnJpZXJDcmVkaXRBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcnJpZXJEZWJpdEFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2Fycmllck5vdGlmaWNhdGlvbkNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FydGFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FydGFnZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2F0YWxvZ2luZ1NlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZW50cmFsQnV5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZW50c09mZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VydGlmaWNhdGVPZkNvbmZvcm1hbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0ZU9mT3JpZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0ZU9mUmVnaXN0cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFpbkFuZEJpbmRlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYW1iZXJPZkNvbW1lcmNlU2VydmljZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhbmdlT2ZBaXJiaWxsLVNlcnZpY2VGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlTGluZUl0ZW1zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2VNZXNzYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2VQZXJDYWxsT2YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZXNGb3J3YXJkQWR2YW5jZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcnRlclNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFzc2lzVHJhbnNmZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoZW1pY2FsTWlsbGluZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hpY2Fnb0xvb3BDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNpZ2FyZXR0ZVN0YW1waW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaXR5RGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNpdHlNYWludGVuYW5jZUZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2l0eVBpY2stdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNpdHlUZXJtaW5hbENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xlYW5pbmdDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsb3NpbmdTZWFsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2F0aW5nRGlwUnVzdHByb29mRURQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDT0RBbW91bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNPRENoYXJnZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbGxlY3RPbkRlbGl2ZXJ5QWx0ZXJhdGlvbkNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29sbGVjdE9uRGVsaXZlcnlEZWxldGlvbkNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29sbGVjdFN1cmNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ28tbWFudWZhY3R1cmluZ0Rpc2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21iaW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tYmluYXRpb25QZXJmb3JtYW5jZUFuZE5vbi1wZXJmb3JtYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tYmluZUFsbFNhbWVEYXlTaGlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWlzc2lvbkFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbXVuaWNhdGlvbnNDaGFyZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wZXRpdGl2ZUFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGV0aXRpdmVDYXJBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBldGl0aXZlUHJpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXByZXNzb3JDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbmNlc3Npb25DcmVkaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbmNlc3Npb25Nb25leSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uZ2VzdGlvblN1cmNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ubmVjdENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc2VydmF0aW9uUmVzZWFyY2hGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNpZ25lZVVubG9hZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc29saWRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc3RhbnRTdXJ2ZWlsbGFuY2VTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zdGFudFN1cnZlaWxsYW5jZVNlcnZpY2UtQXJtZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnN1bGFyaXphdGlvbkZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc3VsYXJMZWdhbGl6YXRpb25TZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zdWx0aW5nU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc3VtZXJTZXJ2aWNlUHJvdmlkZXJDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lckFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyRGVwb3NpdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lckRlc3R1ZmZpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lckRpc2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJEaXZlcnNpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lckxlYXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJMZWFzaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJMb3NzRGFtYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJTZXJ2aWNlQ2hhcmdlVUtFVVIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lclNlcnZpY2VDaGFyZ2VVU0FDYW5hZGEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lclN0dWZmaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJUcmFpbGVyQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250aW51b3VzTWlsZWFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0RXNjYWxhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RTZXJ2aWNlQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cm9sbGVkQXRtb3NwaGVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udmVydGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ28tb3BDcmVkaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvb3BlcmF0aXZlQWR2ZXJ0aXNpbmdNZXJjaGFuZGlzaW5nQWxsb3dhbmNlUGVyZm9ybWFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcHlpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvcHlPZkJpbGxPZkxhZGluZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29weU9mRGVsaXZlcnlSZWNlaXB0Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3JlQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3N0UmVjb3ZlcnlBZGp1c3RtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3N0UmVjb3ZlcnlGYWN0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdHRvbkZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291bnRBbmRSZWNvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3VudGVydmFpbGluZ0R1dHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdXBvblJlaW1idXJzZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyYWZ0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmF0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmVkaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnJlbmN5QWRqdXN0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVuY3lBZGp1c3RtZW50LTIwRm9vdENvbnRhaW5lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVuY3lBZGp1c3RtZW50LTQwRm9vdENvbnRhaW5lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVuY3lBZGp1c3RtZW50LUJyZWFrQnVsayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVuY3lBZGp1c3RtZW50RmFjdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW5jeURpc2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lckFjY291bnRJZGVudGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJFcXVpcG1lbnRBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNCcm9rZXJGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNEdXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zRW50cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNFeGFtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zRmVlcy1Db250YWluZXJMZXZlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc0ZlZXMtTGlmdExldmVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zRm9ybWFsaXRpZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXNJbnZvaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zSW52b2ljZS1BZGRpdGlvbmFsUGFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc1BlbmFsdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1dCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3V0QW5kUGFyYWxsZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1dHRpbmdDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhbWFnZWRNZXJjaGFuZGlzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGFtYWdlVG9DYXJyaWVyRXF1aXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYW1hZ2VUb0NhcnJpZXJWZXNzZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhbWFnZVRvR292ZXJubWVudEVxdWlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0YURyYXdpbmdDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYWRoZWFkTWlsZWFnZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVhZkFuZERpc2FibGVkU3VyY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWNsYXJlZFZhbHVlRm9yQ2FycmlhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlY2xhcmVkVmFsdWVGb3JDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWNsYXJlZFZhbHVlRm9ySW5zdXJhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWR1Y3RUb01ha2VNYXJrZXRWYWx1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVmZWN0aXZlQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWZpY2l0RnJlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGUtSW5zdGFsbGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxheUZ1cm5pc2hpbmdEZXN0aW5hdGlvbldlaWdodHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeVN1cmNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVtYW5kQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZW11cnJhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbXVycmFnZS1BdmVyYWdlQWdyZWVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZW11cnJhZ2UtU3BlY2lhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwb3NpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwb3NpdENoYXJnZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcG9zaXRJbkxpZXVPZk9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXJhbXBpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcnJpY2tDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc2lnbmF0ZWRTdXBwbGllckluc3BlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc3RpbmF0aW9uQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXRlbnRpb25Mb2FkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXRlbnRpb25PZlBvd2VyVW5pdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRldGVudGlvbk9mVHJhaWxlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRldGVudGlvbi1TcGVjaWFsVHlwZUZsYXRDYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRldGVudGlvblVubG9hZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGV0ZXJtaW5lZEZyZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRldmVsb3BtZW50Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaWVTZXJ2aWNlQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXJlY3RQcm9kdWN0SGFuZGxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2J1cnNlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY29ubmVjdENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2NvdW50LURyb3BCb3hDb252ZW5pZW5jZUN0ciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY291bnQtSW5jZW50aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNjb3VudC1NdWx0aXBsZVNoaXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNjb3VudC1TZXJ2aWNlT3B0aW9uRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2NvdW50LVNlcnZpY2VPcHRpb25QaWNrdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2NvdW50LVNwZWNpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3BsYXlBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3RyaWJ1dGlvbkZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpYnV0aW9uU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpYnV0b3JEaXNjb3VudEFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGl2ZXJzaW9uQW5kUmVjb25zaWdubWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGl2ZXJzaW9uQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXZlcnNpb25Ub0FpckNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9ja2FnZS1Cb2F0RGV0ZW50aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGF0aW9uQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudEhhbmRsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb29yLVRvLURvb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvd2VsUGluQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcmF5YWdBdFBvcnRPZkRlYmFya2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcmF5YWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcmF5YWdlYXRQb3J0T2ZEZWJhcmthdGlvblJhdGVab25lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcmF5YWdlQXRQb3J0T2ZFbWJhcmthdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJheWFnZWF0UG9ydE9mRW1iYXJrYXRpb25SYXRlWm9uZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJheWFnZUxpbmVIYXVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcml2ZXJBc3Npc3RlZFVubG9hZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJpdmVyc1dhZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcm9wRG9jayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJvcFlhcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRydW1Db3N0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcnVtRGVwb3NpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJ1bVVwQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcnllckNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJ5SWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEdW5uYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEdXR5Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEdXR5RHJhd2JhY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVhcmx5QnV5QWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFYXJseVBheW1lbnRBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVhcmx5U2hpcEFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1lcmdlbmN5UG9ydENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1lcmdlbmN5U2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1lcmdlbmN5U3VyY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXB0eVdlaWdoaW5nQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmNsb3N1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZG9yc2VtZW50RmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmVyZ3ljaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZXJneVN1cmNoYXJnZUZ1ZWxBZGp1c3RtZW50RmFjdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmdpbmVlcmluZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5naW5lZXJpbmdTdXBwbGllcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5ncmF2aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbnRlcmVkVmFsdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVudmlyb25tZW50YWxQcm90ZWN0aW9uU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50TWFudWZhY3R1cmVyUmVzdG9yYXRpb25BdWRpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXNjYWxhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXNjb3J0U2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXNjcm93Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFdXIxUHJlc2VudGF0aW9uRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFdXJvcGVhblBvcnRDaGFyZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhjZXNzaXZlVmFsdWVDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4Y2Vzc01pbGVhZ2VDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4Y2Vzc1BlcmlvZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4Y2Vzc1ZhbHVlRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGNlc3NXZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4Y2hhbmdlQWNjZXNzQ3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGNsdXNpdmVVc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4Y2x1c2l2ZVVzZU9mRXF1aXBtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGhpYml0aW9uRGVsaXZlcnlDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4aGliaXRpb25QaWNrdXBDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGFuZGVkU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwZWRpdGVkT25lRGF5Q29uc3VsYXJTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBlZGl0ZWRTZXJ2aWNlQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBlZGl0ZWRTaGlwbWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGVkaXRpbmdGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGVkaXRpbmdQcmVtaXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBvcnRDdXN0b21zQ2xlYXJhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBvcnREZWNsYXJhdGlvbnMtQXV0b21hdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBvcnREZWNsYXJhdGlvbnMtVVNTaGlwcGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwb3J0SW1wb3J0Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBvcnRMaWNlbnNlQXBwbGljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cG9ydFNoaXBwaW5nQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHRyYUNvcGllc2FuZE1haWxpbmdzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHRyYUxhYm9ySGVscGVyU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXh0cmFMZW5ndGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4dHJhTGVuZ3RoU3VyY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHRyYVNlcnZpY2UtQ291bnRlci1Uby1Db3VudGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGYWJyaWNhdGlvbkNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFjc2ltaWxlQ2hhcmdlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmFjc2ltaWxlQ2hhcmdlcy1BZGRpdGlvbmFsUGFnZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhaWxlZExhbXBQYW5lbENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmF4UHJlLWFsZXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWRlcmFsVHJhbnNmZXJTdXJjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlyc3RBcnRpY2xlQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdEZsaWdodE91dCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxhdHJhY2tTdXJjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZsYXRSYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbG9vclN0b2NrUHJvdGVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9vZEFuZExvZGdpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVpZ25DdXN0b21zRHV0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWlnbk1pbGl0YXJ5U2FsZXNSZW50YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVpZ25NaWxpdGFyeVNhbGVzU3BlY2lhbENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWlnbk9mZmljZUFkdmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcndhcmRDb3Vwb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3J3YXJkaW5nQWdlbnRDb21taXNzaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3J3YXJkaW5nQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmFuY2hpc2VGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWVEb21pY2lsZVNoaXBtZW50UHJvY2Vzc2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZUdvb2RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVpZ2h0QmFzZWRPbkRvbGxhck1pbmltdW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWlnaHRDaGFyZ2VzVG9Cb3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWlnaHRDaGFyZ2VzVG9EZXN0aW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlaWdodEVxdWFsaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlaWdodEludGVybmF0aW9uYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWlnaHRJbnRlcm5hdGlvbmFsTm9uLVVTRG9sbGFycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlaWdodEludGVybmF0aW9uYWxVU0RvbGxhcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWlnaHRQYXNzdGhyb3VnaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlaWdodFN1cmNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlc2huZXNzTGVha2VyQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdWVsQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdWVsU3VyY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdWxsU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnVsbFRydWNrbG9hZEFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnVtaWdhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2FybWVudERpc3RyaWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXJtZW50U3VyY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXNQcmVzc3VyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2F0ZXdheUZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2xhemUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdvbGRGYWN0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdvb2RzQW5kU2VydmljZXNDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdvb2RzQW5kU2VydmljZXNDcmVkaXRBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdvb2RzQW5kU2VydmljZXNUYXhDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdvdmVybm1lbnRJbnNwZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb3Zlcm5tZW50V2FyZWhvdXNlRmVlLURlc3RpbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb3Zlcm5tZW50V2FyZWhvdXNlRmVlLU9yaWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JhaW5Eb29ycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JhaW5GbG93Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmF0dWl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JpbmRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3NzUmVjZWlwdHNTdXJjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3VwYWdlRGlzY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3VwZWRJdGVtcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3VhcmFudGVlZEluc3BlY3Rpb25UZWNobmljYWxTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHdWxmUG9ydERlbGl2ZXJ5Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYW5kbGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGFuZGxpbmdDaGFyZ2VzT25EaXN0cmlidXRpb25GcmVpZ2h0Rm9yd2FyZGVkQmV5b25kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYW5kbGluZ0ZyZWlnaHRBdFBvc2l0aW9uc05vdEltbWVkaWF0ZWx5QWRqYWNlbnRUb1ZlaGljbGVDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhcmJvck1haW50ZW5hbmNlRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYXJib3JNYWludGVuYW5jZVJlcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGF1bGluZ0FuZEhvaXN0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYXVsaW5nQW5kSG9pc3RpbmdUb0JlRGlyZWN0QmlsbGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYXphcmRvdXNDYXJnb0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGF6YXJkb3VzQ2FyZ29PbkRlY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhemFyZG91c01hdGVyaWFsc0hhbmRsaW5nRmVlLURvbWVzdGljIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYXphcmRvdXNNYXRlcmlhbHNIYW5kbGluZ0ZlZS1JbnRlcm5hdGlvbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYXphcmRvdXNTdG9yYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWF0SW5UcmFuc2l0Q2hhcmdlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhdFRyZWF0Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWF2eUR1dHlGbGF0Q2FyQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWF2eUxpZnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhpZ2hTZWN1cml0eVJlZEluLWJvbmRTZWFsQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIaWdod2F5SW50ZXJjaGFuZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvaW50aW5zQW5kSGF1bGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9sZGluZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9tZUxpbmVGcmVpZ2h0Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb25leUZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9vay11cGNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9zZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9zZUNoYXJnZVNwZWNpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvdXNlaG9sZEdvb2RzUGljay11cE9yRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklBVEFBaXJiaWxsUHJlcGFyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklBVEFGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklkZW50aWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXBvcnRTZXJ2aWNlRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXByb3BlckRvY3VtZW50YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluYm91bmRGcmVpZ2h0Q2hhcmdlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5jb21lRnJlaWdodE1hbnVmYWN0dXJpbmdUb1NoaXBwaW5nUG9pbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluY29ycmVjdEJpbGxpbmdBY2NvdW50Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmR1c3RyeVByaWNlQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbml0aWFsTGljZW5zZUZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5sYW5kVHJhbnNwb3J0YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc2lkZUNhYmxlQ29ubmVjdG9ycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zaWRlRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc2lkZVBpY2stdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3BlY3RBdERlc3RpbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnNwZWN0QXRPcmlnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3BlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3RhbGxhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdGFsbGF0aW9uQW5kVHJhaW5pbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3RhbGxhdGlvbldhcnJhbnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1bGF0ZWRUYW5rQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyYW5jZUZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJhbmNlUGxhY2VtZW50Q29zdENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJhbmNlUHJlbWl1bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJhbmNlUHJvdmlkZWRCeUxlc3NlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJhbmNlUHJvdmlkZWRCeUxlc3NvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJhbmNlU3VyY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcmRpdmlzaW9uUHJvZml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcmVzdEFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJlc3RPblJlZnVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJlc3RPblNlY3VyaXR5RGVwb3NpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJpbVVzZVBlcm1pdHRlZEF0U3BlY2lhbFJhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmF0aW9uYWxBaXJUcmFuc3BvcnRBc3NvY2lhdGlvbkNvbW1pc3Npb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmF0aW9uYWxBaXJUcmFuc3BvcnRBc3NvY2lhdGlvbk1hcmt1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJuYXRpb25hbENvdXJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVybmF0aW9uYWxEb29yLXRvLURvb3JIYW5kbGluZ0ZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJwbGFudENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJzdGF0ZUhpZ2h3YXlUb2xsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJblRyYW5zaXRQcmljZVByb3RlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludHJhLXBsYW50Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZvaWNlQWRkaXRpb25hbEFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52b2ljZUFkanVzdG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikludm9pY2VBdC1Db3N0QW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZvaWNlRGVsaXZlcnlUZXJtc0Ftb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52b2ljZU5vLUNoYXJnZUFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52b2ljZVNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZvaWNlV2l0aEdvb2RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJcmlzaEFyYml0cmFyaWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJc2xhbmREZWxpdmVyeUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXNsYW5kUGljay1VcENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXRhbGlhblJlbGVhc2VDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikl0ZW1QZXJjZW50YWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJdGVtLVVuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktlZXBGcm9tRnJlZXppbmdQZXJjZW50RGlmZmVyZW50aWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLb3NoZXJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYmVsQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJlbGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFib3JDaGFyZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJvckNvc3RPZlJlbW92YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm9yTW9kaWZ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJvck5vVHJvdWJsZUZvdW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJvck92ZXJ0aW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJvclByZW1pdW1PdmVydGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFib3JSZXBhaXJBbmRSZXR1cm5PcmRlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm9yU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFib3JTdHJhaWdodC10aW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYWJvclRlc3RBbmRDYWxpYnJhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhZGluZ0FkanVzdG1lbnRDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhbmRDdXJyZW5jeUFkanVzdG1lbnRGYWN0b3ItMjBGb290Q29udGFpbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYW5kQ3VycmVuY3lBZGp1c3RtZW50RmFjdG9yLTQwRm9vdENvbnRhaW5lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzaGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGF0ZU9yZGVyQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXRlUGF5bWVudENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGF5b3V0RGVzaWduIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXlvdmVyQ2hhcmdlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhZEZhY3RvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVha2luZ1VuZGVyZ3JvdW5kU3RvcmFnZVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhc2VTaG9ydGZhbGxDb25zaWRlcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZXNzVGhhbkNvbnRhaW5lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVzc1RoYW5UcnVja2xvYWRDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxldHRlck9mQ3JlZGl0UHJvY2Vzc2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGljZW5zZUFuZFRpdGxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWZlbGluZVN1cmNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlmdEdhdGVUcnVja09yRm9ya2xpZnRTZXJ2aWNlQXRQaWNrLXVwRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpbWVGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpbmVJdGVtQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaW5lSXRlbUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGluZWhhdWxGcm9tUG9ydE9mRGViYXJrYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpbmVoYXVsUGVyY2VudERpZmZlcmVudGlhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGluZWhhdWxUb1BvcnRPZkVtYmFya2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaW5lclRlcm1zQXRQb3J0T2ZEZWJhcmthdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGluZXJUZXJtc0F0UG9ydE9mRW1iYXJrYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpcXVpZGF0ZWREYW1hZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaXF1aWRhdGlvbkFudGktRHVtcGluZ0R1dHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpcXVpZGF0aW9uQ291bnRlcnZhaWxpbmdEdXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaXF1aWRhdGlvblRheEFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlxdWlkYXRpb25Ub3RhbER1ZVVTQ3VzdG9tc1NlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpcXVpZGF0aW9uVG90YWxGZWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2FkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2FkaW5nTGFib3JDaGFyZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2FkV2VpZ2hpbmdDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYW5GZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2FsRGVsaXZlcnlEcmF5YWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NvbW90aXZlRGVsYXllZEluU3dpdGNoaW5nU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jb21vdGl2ZVVuZGVyT3duUG93ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvdENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG90dGVyeUNoYXJnZUJhY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvdHRlcnlDcm9zc1JlZGVlbWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3ctVGllckxvdHRlcnlDYXNoaW5nQm9udXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxvdy1UaWVyTG90dGVyeVdpbm5lcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikx1bXBTdW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hY2hpbmluZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFpbEZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFpbGluZy1Qb3N0YWdlQ29zdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFpbGluZy1TZXJ2aWNlRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWlsSW52b2ljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFpbEludm9pY2VUb0VhY2hMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFuaWZlc3RDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbnVmYWN0dXJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcmtldERldmVsb3BtZW50RnVuZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcmtpbmdPclRhZ2dpbmdDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hcnJpYWdlUnVsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVtb1JldHVybmFibGVDb250YWluZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lcmNoYW5kaXNlUHJvY2Vzc2luZ0ZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVzc2FnZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVzc2FnZVJhdGVBZGp1c3RtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXNzZW5nZXJTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXRhbHNTdXJjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1ldGVyQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaWQtVGllckxvdHRlcnlDYXNoaW5nQm9udXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pZC1UaWVyTG90dGVyeVdpbm5lcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbGVhZ2VGZWVGb3JSZXBhaXJBbmRSZXR1cm4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbGVhZ2VPclRyYXZlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWludXMtQW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaW51cy1QZXJjZW50YWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb2RpZmllZEF0bW9zcGhlcmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vbnRobHlSZW50YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vdW50RGVtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW91bnRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik11bmljaXBhbFN1cmNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTXVzaHJvb21GZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld0Rpc2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXdEaXN0cmlidXRpb25BbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld0l0ZW1BbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld1N0b3JlQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXdTdG9yZURpc2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXdXYXJlaG91c2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld1dhcmVob3VzZURpc2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXdZb3JrRGVsaXZlcnlDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5ld1lvcmtQaWNrLXVwQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOSERXaGFyZmFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9BbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vQWxsb3dhbmNlT3JDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tRHV0aWFibGVDaGFyZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25HZW5lcmF0ZWRGcmVpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb24tcmV0dXJuYWJsZUNvbnRhaW5lcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vUmV0dXJuQ3JlZGl0QWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3JtYWxQdW1wQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3Rhcml6ZWRBZmZpZGF2aXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdGlmeUNvbnNpZ25lZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90aWZ5Q29uc2lnbmVlQmVmb3JlRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5venpsZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2NlYW5DaGFyZ2VzLUhhemFyZG91cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2NlYW5GcmVpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZpY2VTdXBwbGllcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2Zmc2hvcmUtQWxhc2thSGF3YWlpIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbkNhcnJpYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbkRlY2tCcmVha0J1bGtEaWZmZXJlbnRpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9uZS1EYXlTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbmVUaW1lRW5naW5lZXJpbmdDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9uZS1UaW1lTGljZW5zZUZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25lLVRpbWUtT25seUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25ldGltZVRvb2xpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9uSGFuZFNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wZXJhdG9yQ3JlZGl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcHRpb25hbENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3B0aW9uYWxTb2Z0d2FyZVN1cHBvcnRGb3JPcGVyYXRpb25hbFN1cHBvcnRTeXN0ZW1zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcHRpb25hbFNvZnR3YXJlU3VwcG9ydEZvclN3aXRjaGluZ1N5c3RlbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wdGlvbkNoYXJnZUNvbG9yRmFicmljT2ZmaWNlRnVybml0dXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlci1GbGF0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlck5vdGlmeUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXJBY2Nlc3NvcmlhbFNlcnZpY2VDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyQWR2YW5jZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyRXhwb3J0Q2hhcmdlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXJHb3Zlcm5tZW50QWdlbmN5RGVjbGFyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyR292ZXJubWVudEFnZW5jeUV4YW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVySW1wb3J0Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlck1pc2NlbGxhbmVvdXNFYXJuaW5nT3JBZGRpdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXJTZWVSZWxhdGVkRGVzY3JpcHRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik91dE9mUm91dGVNaWxlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0T2Zab25lUGljay11cE9yRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik91dHNpZGVDYWJsZUNvbm5lY3RvcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXJEaW1lbnNpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXJIZWlnaHRDb250YWluZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXJydW5DaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXJzaXplZFByZW1pdW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXJ0aW1lTG9hZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3ZlcldpZHRoQ29udGFpbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNrYWdpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhY2thZ2luZ1NlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhY2tpbmdDcmF0aW5nQW5kSGFuZGxpbmdDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhY2tpbmdDcmF0aW5nSGFuZGxpbmdBbmRUcmFuc3BvcnRhdGlvbkNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFja0ludm9pY2VXaXRoU2hpcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhaW50aW5nUHJpbWVyT3JGaW5pc2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhbGxldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFsbGV0RXhjaGFuZ2VDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhbGxldGl6aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJhbGxlbGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFyaXNoQ291bnR5U2FsZXNUYXhPbmx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXNzaW5nU2hpcHBlcnNFeHBvcnRFbnRyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5cm9sbEFkZGl0aXZlc092ZXJ0aW1lTGFib3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheXJvbGxBZGRpdGl2ZXNTdHJhaWdodFRpbWVMYWJvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5cm9sbFRheGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZWNhbkZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVuYWx0eUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyY2VudERpZmZlcmVudGlhbC1MZXNzVGhhbkNvbnRhaW5lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyY2VudE9mUHJvZHVjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyY2VudE9mU2hpcG1lbnRWYWx1ZVRoYXRJc1JldHVybmFibGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcmNlbnRPZlNoaXBwZWRRdWFudGl0eVRoYXRJc1JldHVybmFibGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcmZvcm1hbmNlQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJmb3JtYW5jZUF3YXJkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJJdGVtQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJtaXRDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcm1pdHNCb25kc0VzY29ydEF0dGVuZGFudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyT3JkZXJDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlclBvdW5kQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJzb25hbFByb3BlcnR5TWVtYmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJzb25hbFByb3BlcnR5U3BvdXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaG9zcGhhdGl6aW5nU3RlZWxUcmVhdG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpY2tsZUFuZE9pbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlja1VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWNrLXVwQW5kRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpY2t1cC1PdXRPZkFyZWEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpY2t1cFN1cmNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGllckNoYXJnZXNPdGhlclRoYW5XaGFyZmFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGllckNoYXJnZXMtV2hhcmZhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpZXJQaWNrLXVwQW5kT3JEZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGllclVubG9hZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlsb3RJbnNwZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFjZW1lbnRBbmRPclJlbW92YWxDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYXRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsdXMtQW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbHVzLVBlcmNlbnRhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsdXNPck1pbnVzLUFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGx1c09yTWludXMtUGVyY2VudGFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9sZUxhc2hpbmdFcXVpcG1lbnRTdXJjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvbGVXb29kLVNlcnZpY2VDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvcmtGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvcnRDaGFuZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3J0SGFuZGxpbmdBbmRVbmxvYWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvc2l0aW9uaW5nQXRPcmlnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvc3RhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvc3REYW1hZ2VkSGFuZGxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvdGF0b0ZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG93ZXJGYWN0b3JBZGp1c3RtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmUtY2FycmlhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZS1jYXJyaWFnZUV4Y2VzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlY2lvdXNNZXRhbENvbnRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWxvYWRpbmdDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWxvZGdlQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVtaXNlVXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVtaXVtQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVtaXVtVHJhbnNwb3J0YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXBhaWRVc2FnZUFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlcGFyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXBhcmF0aW9uQW5kRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXBhcmF0aW9uT2ZBaXJXYXliaWxsLU9yaWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlcGFyYXRpb25PZkNhbmFkaWFuQ3VzdG9tc0ludm9pY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXBhcmF0aW9uT2ZDb21tZXJjaWFsSW52b2ljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlcGFyYXRpb25PZkV4cG9ydEVudHJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVwYXJhdGlvbk9mSW5zdXJhbmNlQ2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXBhcmF0aW9uT2ZVU0V4cG9ydERvY3VtZW50YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZS1Qb3NpdGlvbmVkSW52ZW50b3J5U2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNCaWxsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmljZUFkanVzdG1lbnRQZXJjZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmljZUFuZE1hcmtldGluZ0FsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpY2VEZXZpYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW9yQmFsYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JCaWxsaW5nQW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvckRlbGl2ZXJ5T2ZCaWxsQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvcml0eVNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW9yTW9udGhDcmVkaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaXZhdGVPd25lZFZlaGljbGVQcm9jZXNzaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9jZXNzaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9jZXNzaW5nQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9jZXNzSW5UcmFuc2l0UHJpdmlsZWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9jdXJlbWVudENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZmVzc2lvbmFsRmVlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZm9ybWFJbnZvaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9ncmVzc1BheW1lbnRSZXF1aXJlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbW90aW9uYWxBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21vdGlvbmFsRGlzY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb29mQ29tcG9zaXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb29mT2ZEZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvdGVjdGl2ZVNlcnZpY2VDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3RlY3RpdmVTZXJ2aWNlLUNvbGQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3RlY3RpdmVTZXJ2aWNlLUhlYXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3ZpZGVIb3VzZWhvbGRJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm92aWRlTmFtZUFuZEFkZHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1bGxpbmdFeWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdW1wQWlyQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdW1wQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdXJjaGFzZU9wdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlEaXNjb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbnRpdHlTdXJjaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhaWxoZWFkSGFuZGxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhbXBpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhdGVDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYXRlUmVkdWN0aW9uQm9uZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmViYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZS1CaWxsQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWJpbGxlZERyYXlhZ2UtRGVzdGluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYmlsbGVkRHJheWFnZS1PcmlnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjaXBpZW50QWRkcmVzc0NvcnJlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2xhbWF0aW9uQ2VudGVySGFuZGxpbmdDaHV0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjbGFtYXRpb25GZWRlcmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNsYW1hdGlvblNoYXJlZFJlc3BvbnNpYmlsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNsYW1hdGlvblN0YXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNvbmNpbGlhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjb25uZWN0Y2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNvbnNpZ25Db25zaWduZWVDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY29uc2lnbkRlbGl2ZXJ5Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNvbnNpZ25tZW50Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNvb3BlcmluZ0F0T3duZXJzT3JTaGlwcGVyc0V4cGVuc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY29yZEZpbGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjb3ZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY292ZXJ5RmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNyYXRpbmdSZWNvb3BlcmluZy1EZXN0aW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjcmF0aW5nUmVjb29wZXJpbmctT3JpZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWN1cnJpbmdIYXJkd2FyZU1haW50ZW5hbmNlQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWN1cnJpbmdMaWNlbnNlRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWN1cnJpbmdTb2Z0d2FyZU1haW50ZW5hbmNlQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWRlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWRpc3RyaWJ1dGlvbkFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVkdWN0aW9uUHJlcGFsbGV0aXplZENhcmdvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWVmZXJDYXJnb1BlcmNlbnREaWZmZXJlbnRpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZWZlck1haW50ZW5hbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWVsQ2FibGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZWxEZXBvc2l0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZyaWdlcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZyaWdlcmF0aW9uTWVjaGFuaWNhbERldGVudGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmdW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZ1cmJpc2hpbmdDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZ2FpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaXN0cmF0aW9uT2ZFeHBvcnRGb3JSZWVudHJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RyYXRpb25PZkV4cG9ydFNoaXBtZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVndWxhdG9yeUZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVndWxhdG9yeVJlcXVpcmVkUmVmdW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxpYWJpbGl0eUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsaW5xdWlzaG1lbnRDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGlxdWlkYXRpb25BbnRpLUR1bXBpbmdEdXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxpcXVpZGF0aW9uQ291bnRlcnZhaWxpbmdEdXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxpcXVpZGF0aW9uVGF4QW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxpcXVpZGF0aW9uVG90YWxEdWVVU0N1c3RvbXNTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxpcXVpZGF0aW9uVG90YWxGZWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZW50YWxDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbnRhbERlZHVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVudHNBbmRMZWFzZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGFja0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwYWlyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBhaXJBdEJ1eWVyc0V4cGVuc2VDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGFpckF0Q3VzdG9tZXJFeHBlbnNlQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBhaXJBdEdvdmVybm1lbnRFeHBlbnNlQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBpY2t1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWVzdFZpYUNhbmFkYSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzZWFyY2hEZXZlbG9wbWVudEZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzZWxsZXJzRGlzY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2lkZW50aWFsRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2lkZW50aWFsUGljay11cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzcG90dGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzdG9ja2luZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzdHJpY3RlZEFydGljbGVGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldGFpbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXR1cm5hYmxlQ29udGFpbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXR1cm5DYXJnb0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0dXJuZWRMb2FkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXdvcmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJpZGluZ0F0dGVuZGFudENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm9ja3lNb3VudGFpbkJ1cmVhdTU4M0l0ZW0xMTAwQXJiaXRyYXJ5Q2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb2xsT3V0QWRqdXN0bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm9sbFJlYmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUm95YWx0aWVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWx2YWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYW1lLURheVNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhdHVyZGF5RGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhdHVyZGF5UGljay1VcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2F0dXJkYXlQaWNrLXVwT3JEZWxpdmVyeUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2NhbGVDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjYWxlQ2hhcmdlVW5sb2FkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTY3JhcEFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VjdXJpdHlTaWduYXR1cmVTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWdyZWdhdGluZ1NvcnRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGVjdENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VsZlVubG9hZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxsZXJIYW5kQ2FycnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VBc3Npc3RhbmNlUHJvZ3JhbVN1cmNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZUNoYXJnZVdpdGhDYXNoRGlzY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VVcGdyYWRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXQtdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoZWFyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGVlcEZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBlckxvYWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwZXJMb2FkQW5kQ291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwZXJMb2FkQ2FycmllckNvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwcGVyTG9hZENvbnNpZ25lZVVubG9hZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwaW5nQW5kSGFuZGxpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBzaWRlUGlja3VwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwVG9TdG9ja1F1YWxpdHlBdWRpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hvdGJsYXN0aW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaHJpbmthZ2VBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNocmlua0FsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hyaW5rLVdyYXBDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpbmdsZUZhY3Rvck9yaWdpbmF0aW9uRGVzdGluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpbmdsZUZhY3Rvck9yaWdpbmF0aW9uUG9ydE9mRGViYXJrYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpbmdsZUZhY3RvclBvcnRPZkVtYmFya2F0aW9uRGVzdGluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpbmdsZUludm9pY2VBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpbmdsZVBpY2stdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpbmdsZVNoaXBtZW50RmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbGVldmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2xpcFNoZWV0UmFpbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2xpcFNoZWV0VHJ1Y2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNsaXBTaGVldFVubG9hZGluZ0FsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2xvdHRpbmdBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNtYWxsT3JkZXJDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvZnR3YXJlU3VwcG9ydFNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvdXJjZUluc3BlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxCdXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxDaXJjdXNUcmFpbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxDcmVkaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxEZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbERldGVudGlvbkNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbEVxdWlwbWVudENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbEZpbmlzaENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbEZyZWlnaHRTdXBwbGVtZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbEhhbmRsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsTWlsZWFnZU1vdmVtZW50cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbFBhY2thZ2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbFBlcm1pdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxQaWNrdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxQdW1wQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsU2VhbENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbFNlcnZpY2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsVGVzdEVxdWlwbWVudENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbFRvb2xpbmdDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwZWNpYWxUb29saW5ncmV3b3JrY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWFsVHJhaW5Nb3ZlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbFVzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BlY2lhbFZlaGljbGVSZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWZpY2F0aW9uUmV2aWV3Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcGVjaWZpY0R1dHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwbGl0RGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwbGl0UGljay11cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BsaXRQaWNrLVVwQXRQaWVyQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcG9vbENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BvdHRpbmdPZlRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwcmVhZGVyQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFtcEZlZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhbXBpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YW5kYnlDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlTWV0cm9wb2xpdGFuVHJhbnNpdEF1dGhvcml0eVN1cmNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVNb3RvckZ1ZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlU2FsZXNDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlU3VyY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGVhbWluZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RlbmNpbGluZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvcGNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvcC1vZmZBdERlc3RpbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9wLW9mZkF0T3JpZ2luYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b3Atb2ZmQXRQaWVyQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9wLW9mZkNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvcHBpbmdJblRyYW5zaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b3JhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0b3JhZ2VJblRyYW5zaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0cmFpZ2h0ZW5pbmdDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0cmFwcGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RyZWV0TGFtcHNDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0cmlwcGluZ1NvcnRpbmdBbmRDb25zb2xpZGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdHVmZmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3R1ZmZpbmdDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YmplY3RUb0Nvb3BlcmF0aXZlQWR2ZXJ0aXNpbmdBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YmplY3RUb1RheE9uUmVzYWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWZmZXJhbmNlV2FyZWhvdXNlQ2hhcmdlRXhwb3J0T3JJbXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1Z2FyRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdW1PZkFkZHNBbmREZWR1Y3RzVG9NYWtlTWFya2V0VmFsdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1bmRheU9ySG9saWRheVBpY2stdXBPckRlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBlckJhZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwZXJ2aXNvckNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxlbWVudGFsRHV0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxlbWVudGFsSXRlbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cmNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VyZXR5Qm9uZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3dlbGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN3aXRjaENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3dpdGNoaW5nQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYW5rQ2FyQWxsb3dhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYW5rUmVudGFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXJwaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheC1BaXJwb3J0VGF4RGVzdGluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheC1BaXJwb3J0VGF4T3JpZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXgtQmV2ZXJhZ2VUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheC1DaXR5U2FsZXNUYXhPbmx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhDcmVkaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheC1FeGNpc2VUYXgtRGVzdGluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheC1FeGNpc2VUYXgtT3JpZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXgtRmVkZXJhbEV4Y2lzZVRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4LUZlZGVyYWxFeGNpc2VUYXhPblRpcmVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXgtR292ZXJubWVudGFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXgtSGFuZGxpbmdDaGFyZ2VUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheExpYWJpbGl0eS1BbW9ydGl6ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheExpYWJpbGl0eS1PbmVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXgtTG9jYWxTYWxlc1RheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4LUxvY2FsVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXgtTWV0cm9wb2xpdGFuVHJhbnNpdFRheCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4T25NaXNjZWxsYW5lb3VzQ2hhcmdlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4T25UcmFuc3BvcnRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4LVJlZ3VsYXRvcnlUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheC1TYWxlc2FuZFVzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4LVNhbGVzVGF4U3RhdGVBbmRMb2NhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4LVN0YXRlSGF6YXJkb3VzU3Vic3RhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXgtU3RhdGVUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheC1TdXBlckZ1bmRFeGNpc2VUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheC1Vc2VUYXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheC1WYWx1ZUFkZGVkVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWFGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlY2hub2xvZ3lFeGNoYW5nZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVsZWdyYW1DaGFyZ2ViYWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWxlcGhvbmVDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbGVwaG9uZS1EZXN0aW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVsZXBob25lLU9yaWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVtcGVyYXR1cmVQcm90ZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZW1wb3JhcnlBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbXBvcmFyeVZvbHVudGFyeUFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVuZGVyZWRBc1RydWNrbG9hZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVybWluYWxDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcm1pbmFsRGlmZmVyZW50aWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXJtaW5hbEhhbmRsaW5nQ2hhcmdlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVybWluYWxTZXJ2aWNlRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXJtc0FsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVzdGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVzdGluZ1NlcnZpY2VzQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXN0UXVhbGlmaWNhdGlvbkNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhpcmRQYXJ0eUFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhpcmRQYXJ0eVBhbGxldHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRocm91Z2hwdXRBbGxvd2FuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRocm91Z2hwdXRDb250YWluZXJDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRocnV3YXlDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpY2tldGluZ1NlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvYmFjY29Qcm9kdWN0c1JlcG9ydENoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVE9GQ1NlcnZpY2VDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvb2xDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvb2xpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvb2xpbmdSZXdvcmtDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvb2xzRm9yUHJpbnRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsQXNzZXNzb3JpYWxDaGFyZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbER1ZVVTQ3VzdG9tc1NlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsRmVlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxJbnZvaWNlQW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbEludm9pY2VBbW91bnROb24tVVNEb2xsYXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RhbEludm9pY2VBbW91bnRVU0RvbGxhcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdGFsTWF0ZXJpYWxJbnZvaWNlQW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFjaW5nSW5ib3VuZFZpYU90aGVyQ2FycmllcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWNpbmdTZXJ2aWNlRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFja1N0b3JhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWRlRGlzY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWRlSW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWlsZXJSZW50YWxDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zZmVyQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc2Zlck9mTGFkaW5nQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc2ZlcnJlZENoYXJnZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zbWlzc2lvbkNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0YXRpb25BbmRTZXR1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0YXRpb25DaGFyZ2VNaW5pbXVtUmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNwb3J0YXRpb25EaXJlY3RCaWxsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRhdGlvblRoaXJkUGFydHlCaWxsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRhdGlvblZlbmRvclByb3ZpZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmltbWluZ0NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1Y2tEZXRlbnRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydWNrbG9hZERpc2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUdXJuaW5nQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUd28tRGF5U2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHdvRG9vclBpY2tVcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5hYnNvcmJlZFN3aXRjaGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdGl6ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVubG9hZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5sb2FkaW5nTGFib3JDaGFyZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmxvYWRpbmdSZWxvYWRpbmdDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVuc2FsZWFibGVNZXJjaGFuZGlzZUFsbG93YW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5zY2hlZHVsZWRGZWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVwQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVc2FnZVBsYW5EZXRhaWxDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVTQ3VzdG9tc1NlcnZpY2VGbGF0QXNzaXN0QW1vdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVU0N1c3RvbXNTZXJ2aWNlTWF4aW11bUFzc2lzdEFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNEQUluc3BlY3RlZFN0YW1waW5nQ2VydGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVXNlQ2hhcmdlVG9vbGluZ1BlcnNvbm5lbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVXNlLVNwZWNpYWxUeXBlRmxhdENhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVVNWZWhpY2xlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmFsdWF0aW9uRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYW5DbGVhbmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVoaWNsZU9yZGVyZWRCdXROb3RVc2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZWhpY2xlUHJlcENoYXJnZUNvdXJ0ZXN5RGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlaGljbGVSb2FkQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZW5kb3JGcmVpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZW50aW5nSW5zdHJ1Y3Rpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWaXJnaW5Jc2xhbmRUcmFuc2ZlckNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVm9sdW1lRGlzY291bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZvbHVudGFyeUNvbnRyaWJ1dGlvbkNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FpdGluZ1RpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhcmVob3VzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FyZWhvdXNpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhcnJhbnRpZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhclJpc2tDcmV3SW5zdXJhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJSaXNrSW5zdXJhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXJSaXNrU3VyY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXN0ZWRGdXRpbGVUcmlwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXRlcm1lbG9uRmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXliaWxsQW5kSW52b2ljZURpc3RyaWJ1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2VhdGhlclByb3RlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldlaWdodFZlcmlmaWNhdGlvbkNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2hhcmZhZ2UtQnJlYWtidWxrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaGFyZmFnZUNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2hhcmZhZ2UtQ29udGFpbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaGFyZmFnZUhhbmRsaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaWRlQXJlYVRlbGVwaG9uZVNlcnZpY2VVc2FnZUNyZWRpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2lsbENhbGxDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldyaXR0ZW5Qcm9vZk9mRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlgtcmF5Q2hhcmdlIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJCYXNpc01vbmV0YXJ5UmFuZ2UiPgotICAgICAgICA8eHNkOmNob2ljZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ik1vbmV0YXJ5UmFuZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ik1vbmV0YXJ5TGltaXQiLz4KLSAgICAgICAgPC94c2Q6Y2hvaWNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJCYXNpc01vbmV0YXJ5UmFuZ2UiIHR5cGU9IkJhc2lzTW9uZXRhcnlSYW5nZSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTW9uZXRhcnlSYW5nZSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWluaW11bU1vbmV0YXJ5VmFsdWUiIHR5cGU9IkRlY2ltYWwyMV82Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTWF4aW11bU1vbmV0YXJ5VmFsdWUiIHR5cGU9IkRlY2ltYWwyMV82Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJDdXJyZW5jeSIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTW9uZXRhcnlSYW5nZSIgdHlwZT0iTW9uZXRhcnlSYW5nZSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTW9uZXRhcnlMaW1pdCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTW9uZXRhcnlMaW1pdFZhbHVlIiB0eXBlPSJEZWNpbWFsMjFfNiIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iQ3VycmVuY3kiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IlNpZ25pZmljYW5jZUNvZGVkIiB0eXBlPSJTaWduaWZpY2FuY2VDb2RlIiB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IlNpZ25pZmljYW5jZUNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTW9uZXRhcnlMaW1pdCIgdHlwZT0iTW9uZXRhcnlMaW1pdCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iVHlwZU9mQWxsb3dhbmNlT3JDaGFyZ2UiPgotICAgICAgICA8eHNkOmNob2ljZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlF1YW50aXR5QWxsb3dhbmNlT3JDaGFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlBlcmNlbnRhZ2VBbGxvd2FuY2VPckNoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTW9uZXRhcnlWYWx1ZSIvPgotICAgICAgICA8L3hzZDpjaG9pY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlR5cGVPZkFsbG93YW5jZU9yQ2hhcmdlIiB0eXBlPSJUeXBlT2ZBbGxvd2FuY2VPckNoYXJnZSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUXVhbnRpdHlBbGxvd2FuY2VPckNoYXJnZSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iUmF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUXVhbnRpdHlNb25ldGFyeVZhbHVlIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTW9uZXRhcnlWYWx1ZSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJRdWFudGl0eUFsbG93YW5jZU9yQ2hhcmdlIiB0eXBlPSJRdWFudGl0eUFsbG93YW5jZU9yQ2hhcmdlIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJSYXRlIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSYXRlUGVyVW5pdCI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlVuaXRQcmljZSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVW5pdFByaWNlQmFzaXMiIHR5cGU9IkRlY2ltYWwxOF8zIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IlVuaXRPZk1lYXN1cmVtZW50Ii8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSYXRlIiB0eXBlPSJSYXRlIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkRlY2ltYWwxOF8zIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6ZGVjaW1hbCI+Ci0gICAgICAgICAgICA8eHNkOnRvdGFsRGlnaXRzIHZhbHVlPSIxOCIvPgotICAgICAgICAgICAgPHhzZDpmcmFjdGlvbkRpZ2l0cyB2YWx1ZT0iMyIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTW9uZXRhcnlWYWx1ZSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTW9uZXRhcnlBbW91bnQiIHR5cGU9IkRlY2ltYWwyMV82Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IkN1cnJlbmN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IlJhdGVPZkV4Y2hhbmdlRGV0YWlsIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJNb25ldGFyeVZhbHVlIiB0eXBlPSJNb25ldGFyeVZhbHVlIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJSYXRlT2ZFeGNoYW5nZURldGFpbCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmVmZXJlbmNlQ3VycmVuY3kiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJDdXJyZW5jeSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVGFyZ2V0Q3VycmVuY3kiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJDdXJyZW5jeSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUmF0ZU9mRXhjaGFuZ2UiIHR5cGU9IkRlY2ltYWwxOV85Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJJbnZlcnNlUmF0ZU9mRXhjaGFuZ2UiIHR5cGU9IkRlY2ltYWwxOV85Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJEYXRlT2ZSYXRlT2ZFeGNoYW5nZSIgdHlwZT0ieGNibERhdGV0aW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJMaXN0T2ZSYXRlT2ZFeGNoYW5nZVJlZmVyZW5jZSI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ikxpc3RPZlJlZmVyZW5jZSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSYXRlT2ZFeGNoYW5nZURldGFpbCIgdHlwZT0iUmF0ZU9mRXhjaGFuZ2VEZXRhaWwiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iRGVjaW1hbDE5XzkiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpkZWNpbWFsIj4KLSAgICAgICAgICAgIDx4c2Q6dG90YWxEaWdpdHMgdmFsdWU9IjE5Ii8+Ci0gICAgICAgICAgICA8eHNkOmZyYWN0aW9uRGlnaXRzIHZhbHVlPSI5Ii8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZSZWZlcmVuY2UiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9IlJlZmVyZW5jZSIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mUmVmZXJlbmNlIiB0eXBlPSJMaXN0T2ZSZWZlcmVuY2UiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlBlcmNlbnRhZ2VBbGxvd2FuY2VPckNoYXJnZSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJQZXJjZW50UXVhbGlmaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUGVyY2VudCIgdHlwZT0iRGVjaW1hbDEwXzQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlBlcmNlbnRhZ2VNb25ldGFyeVZhbHVlIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTW9uZXRhcnlWYWx1ZSIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQZXJjZW50YWdlQWxsb3dhbmNlT3JDaGFyZ2UiIHR5cGU9IlBlcmNlbnRhZ2VBbGxvd2FuY2VPckNoYXJnZSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUGVyY2VudFF1YWxpZmllciI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUGVyY2VudFF1YWxpZmllckNvZGVkIiB0eXBlPSJQZXJjZW50UXVhbGlmaWVyQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUGVyY2VudFF1YWxpZmllckNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlBlcmNlbnRRdWFsaWZpZXIiIHR5cGU9IlBlcmNlbnRRdWFsaWZpZXIiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iUGVyY2VudFF1YWxpZmllckNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJdGVtTGlzdENvc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikl0ZW1OZXRDb3N0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNjb3VudC1Hcm9zcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY291bnQtTmV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXNlUHJpY2VwZXJVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXNlUHJpY2VBbW91bnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhc2VQcmljZUFtb3VudExlc3NQcmV2aW91c0Rpc2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXRNb250aGx5T25BbGxJbnZvaWNlc1Bhc3REdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhdGVQYXltZW50Q2hhcmdlQmFzZUFtb3VudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnVlbFJhdGUiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkRlbGl2ZXJ5RGV0YWlsIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlNoaXBUb0xvY2F0aW9uIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTG9jYXRpb24iLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU2hpcEZyb21Mb2NhdGlvbiI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IkxvY2F0aW9uIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iTGlzdE9mU2NoZWR1bGVMaW5lIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Ikl0ZW1QYWNrYWdpbmdSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlNpbXBsZVBhY2thZ2VOb3RlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJUZXJtc09mRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iQ2FyZ29DbGFzc2lmaWNhdGlvbiIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iRGVsaXZlcnlEZXRhaWwiIHR5cGU9IkRlbGl2ZXJ5RGV0YWlsIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTY2hlZHVsZUxpbmUiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9IlNjaGVkdWxlTGluZSIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTGlzdE9mU2NoZWR1bGVMaW5lIiB0eXBlPSJMaXN0T2ZTY2hlZHVsZUxpbmUiLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlNjaGVkdWxlTGluZSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTY2hlZHVsZUxpbmVJRCIgdHlwZT0ieHNkOmludCIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU2hpcG1lbnRTdGF0dXNFdmVudENvZGVkIiB0eXBlPSJTaGlwbWVudFN0YXR1c0V2ZW50Q29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU2hpcG1lbnRTdGF0dXNFdmVudENvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlNoaXBtZW50U3RhdHVzUmVhc29ucyI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ikxpc3RPZlN0YXR1c1JlYXNvbiIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJRdWFudGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUmVxdWVzdGVkRGVsaXZlcnlEYXRlIiB0eXBlPSJ4Y2JsRGF0ZXRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ikxpc3RPZk90aGVyRGVsaXZlcnlEYXRlIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iTGlzdE9mRGF0ZUNvZGVkIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlNjaGVkdWxlTGluZU5vdGUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0iVHJhbnNwb3J0Ii8+Ci0gICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlRyYW5zcG9ydFJlZmVyZW5jZSIgdHlwZT0ieHNkOmludCIvPgotICAgICAgICAgICAgPC94c2Q6Y2hvaWNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJMaXN0T2ZTaGlwVG9TdWJJbmZvcm1hdGlvbiIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iU2NoZWR1bGVMaW5lIiB0eXBlPSJTY2hlZHVsZUxpbmUiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iU2hpcG1lbnRTdGF0dXNFdmVudENvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RBcHBsaWNhYmxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RZZXRTaGlwcGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYWNrT3JkZXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFja09yZGVyU2hpcHBlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhZHlGb3JQaWNrdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluVHJhbnNpdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydGlhbGx5U2hpcHBlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydGlhbGx5RGVsaXZlcmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwbWVudENvbXBsZXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyZWQiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZlN0YXR1c1JlYXNvbiI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iU3RhdHVzUmVhc29uIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTdGF0dXNSZWFzb24iIHR5cGU9Ikxpc3RPZlN0YXR1c1JlYXNvbiIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iU3RhdHVzUmVhc29uIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTdGF0dXNSZWFzb25Db2RlZCIgdHlwZT0iU3RhdHVzUmVhc29uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU3RhdHVzUmVhc29uQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iU3RhdHVzUmVhc29uIiB0eXBlPSJTdGF0dXNSZWFzb24iLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iU3RhdHVzUmVhc29uQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhbmdlZFNjaGVkdWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN0cnVjdGlvbnNBd2FpdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYW1hZ2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tc1JlZnVzYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcHR5T25JbnNwZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXN0aW5hdGlvbkluY29ycmVjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwb3J0UmVzdHJpY3Rpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXBvcnRSZXN0cmljdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnROb3RSZWNlaXZlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlEaWZmZXJlbnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeVRvb0xhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluY2lkZW50QXR0cmlidXRlZFRvU2VsbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmNpZGVudEF0dHJpYnV0ZWRUb1RoZUJ1eWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmNpZGVudEF0dHJpYnV0ZWRUb1RoZUNhcnJpZXIiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9Ikxpc3RPZkRhdGVDb2RlZCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iRGF0ZUNvZGVkIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMaXN0T2ZEYXRlQ29kZWQiIHR5cGU9Ikxpc3RPZkRhdGVDb2RlZCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iRGF0ZUNvZGVkIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJEYXRlIiB0eXBlPSJ4Y2JsRGF0ZXRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IkRhdGVRdWFsaWZpZXIiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IkRhdGVDb2RlZCIgdHlwZT0iRGF0ZUNvZGVkIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJEYXRlUXVhbGlmaWVyIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJEYXRlUXVhbGlmaWVyQ29kZWQiIHR5cGU9IkRhdGVRdWFsaWZpZXJDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJEYXRlUXVhbGlmaWVyQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iRGF0ZVF1YWxpZmllciIgdHlwZT0iRGF0ZVF1YWxpZmllciIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJEYXRlUXVhbGlmaWVyQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjM2MDMwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIzNjUzMCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMzY1NjMwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIzNjAyODMxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIzNjUyODMxIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIzNjU2MjgzMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMXN0U2NoZWR1bGVEZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMXN0U2NoZWR1bGVTaGlwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NlbGVyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY2VwdGFuY2VEYXRlT2ZEb2N1bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjZXB0YW5jZURhdGVPZkdvb2RzRGVjbGFyYXRpb25DdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NlcHRhbmNlRGF0ZVRpbWVPZkdvb2RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NpZGVudEJlbmVmaXRBZ2VMaW1pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjaWRlbnRCZW5lZml0UGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NpZGVudERhdGVBbmRPclRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY2lkZW50SW5zdXJhbmNlRWxpbWluYXRpb25QZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY2lkZW50TGlmZXRpbWVCZW5lZml0UXVhbGlmaWNhdGlvbkFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudGFudHNPcGluaW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudENsb3NlZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRpbmdNZXRob2RvbG9neUNoYW5nZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRpbmdQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjY291bnRpbmdQZXJpb2RFbmREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50aW5nUGVyaW9kU3RhcnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50aW5nVHJhbnNhY3Rpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50aW5nVmFsdWVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50aW5nWWVhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudE9wZW5lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWNjb3VudHNSZWNlaXZhYmxlLVN0YXRlbWVudERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFja25vd2xlZGdtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3F1aXNpdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdGlvbkVuZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdGl2aXR5UmVwb3J0aW5nRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0aXZpdHlQZXJpb2REYXRlUmFuZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdHVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0dWFsQXJjaGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJyaXZhbERhdGVUaW1lQWN0dWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3R1YWxDb21wbGV0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0dXJlRGF0ZVRpbWVBY3R1YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2NoYXJnZURhdGVUaW1lQWN0dWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY3R1YWxQb3J0T2ZFbnRyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0dWFsUmVsZWFzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWN0dWFsUmV0dXJuVG9Xb3JrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFydERhdGVBY3R1YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdXRlTWFuaWZlc3RhdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFjdXRlTWFuaWZlc3RhdGlvbk9mQUNocm9uaWNDb25kaXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGRyZXNzUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGpvdXJubWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRqdXN0ZWRBZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkanVzdGVkQ29udGVzdGFiaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkanVzdGVkRGVhdGhCZW5lZml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RlZEVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRqdXN0ZWRIaXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RlZFN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RtZW50RWZmZWN0aXZlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRqdXN0bWVudFBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRqdXN0bWVudFBlcmlvZEVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRqdXN0bWVudFBlcmlvZFN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RtZW50UHJvY2Vzc2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZGp1c3RtZW50UHJvbWlzZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkanVzdG1lbnRUb0JpbGxEYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWRtaW5pc3RyYXRvck9yZGVyZWREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZG1pc3Npb25EYXRlQW5kT3JUaW1lRXhwZWN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkb3B0aW9uRGF0ZUFjdHVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWR2aXNlQWZ0ZXJEYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWR2aXNlQmVmb3JlRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFkdmlzZUNvbXBsZXRlZERhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZpc2VPbkRhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZpc2luZ0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWdyZWVtZW50VG9QYXlEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJlZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbG90bWVudFBlcmlvZFN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbGxvd2FibGVFZmZlY3RpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsbG93ZWRSZW5ld2FsRHVyYXRpb25QZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsdGVybmF0ZUJhc2VQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFsdGVybmF0ZVByb2JsZW1SZXNvbHV0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbHRlcm5hdGl2ZUR1ZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFuYWx5c2lzTW9udGhFbmRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFuZXN0aGVzaWFBZG1pbmlzdHJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW5uaXZlcnNhcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFubnVhbFJlcG9ydERlbGlucXVlbnRPbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFubnVhbFJlcG9ydER1ZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFubnVhbFJlcG9ydEZpbGluZ0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFubnVhbFJlcG9ydE1haWxpbmdEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbm51aXRpemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbm51aXR5Q29tbWVuY2VtZW50RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQW50aWNpcGF0ZWRDbG9zaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBsaWFuY2VQbGFjZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2FudFNpZ25lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2F0aW9uRW50cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2F0aW9uTG9nZ2VkRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXBwbGljYXRpb25TdGF0dXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcG9pbnRtZW50RWZmZWN0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcHBvaW50bWVudEV4cGlyeURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcHJhaXNhbE9yZGVyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcHJvdmFsT2ZmZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcHJvdmFsRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJyZXN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFycml2YWxEYXRlVGltZUF0SW5pdGlhbFBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFycml2YWxEYXRlVGltZUVhcmxpZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcnJpdmFsRGF0ZVRpbWVPZlRyYW5zcG9ydExlYWRUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcnJpdmFsRGF0ZVRpbWVTY2hlZHVsZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFycml2YWxEYXRlVGltZVVsdGltYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcnJpdmFsSW5Db3VudHJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcnRlcmlhbEJsb29kR2FzVGVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNPZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzZW1ibHlTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXNzZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2V0QW5kTGlhYmlsaXR5U2NoZWR1bGVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NldERvY3VtZW50YXRpb25FeHBpcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBc3NpZ25lZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFzc2lnbm1lbnRSZWNvcmRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXR0ZW5kYW5jZURhdGVBbmRPclRpbWVBbmRPclBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXVkaWVuY2VEZWZpY2llbmN5UGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdWRpdFBlcmlvZEFmdGVyU3BsaXREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdWRpdFBlcmlvZFByaW9yVG9TcGxpdERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dGhlbnRpY2F0aW9uRGF0ZVRpbWVPZkRvY3VtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRoZW50aWNhdGlvblZhbGlkYXRpb25EYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXV0aG9yaXphdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF1dG9tYXRpY1ByZW1pdW1Mb2FuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdmFpbGFiaWxpdHlEdWVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdmFpbGFiaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF2ZXJhZ2VEZWxpdmVyeURlbGF5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdmVyYWdlUGF5bWVudFBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXdhcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhY2tPbk1hcmtldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFja09yZGVyRGVsaXZlcnlEYXRlVGltZVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFsYW5jZURhdGVUaW1lUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYWxhbmNlU2hlZXREYXRlTGF0ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXNlbGluZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFzZWxpbmVDb21wbGV0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFzZWxpbmVTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVmb3JlSW52ZW50b3J5SXNSZXBsZW5pc2hlZEJhc2VkT25TdG9ja0NoZWNrTGVhZFRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlZ2lubmluZ0xheURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlZ2luVGhlcmFweSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVuZWZpY2lhcnlzQmFua3NEdWVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZW5lZml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZW5lZml0QWRqdXN0bWVudEVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVuZWZpdEFkanVzdG1lbnRQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbmVmaXRBZGp1c3RtZW50U3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbmVmaXRBcHBsaWNhdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbmVmaXRCZWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVuZWZpdENoYW5nZURhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZW5lZml0Q3JlZGl0RW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZW5lZml0Q3JlZGl0UGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZW5lZml0Q3JlZGl0U3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbmVmaXREZWJpdEVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVuZWZpdERlYml0U3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbmVmaXRFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbmVmaXRQYXltZW50c1Rlcm1pbmF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVuZWZpdFBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVuZWZpdFJlbGVhc2VBdXRob3JpemF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVuZWZpdHNQYWlkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZW5lZml0VHJhbnNmZXJFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbmVmaXRUcmFuc2ZlclBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVuZWZpdFRyYW5zZmVyU3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbmVmaXRUeXBlR3Jvc3NXZWVrbHlBbW91bnRFZmZlY3RpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlbmVmaXRUeXBlTmV0V2Vla2x5QW1vdW50RWZmZWN0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZW5lZml0UGVyaW9kRW5kRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVuZWZpdFBlcmlvZFN0YXJ0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVzdEJlZm9yZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlc3RUaW1lVG9DYWxsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWFubnVhbFRlcm1pbmFsSW5zcGVjdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpZEVmZmVjdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlkT3BlbkRhdGVCaWRzV2lsbEJlT3BlbmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWRQcmljZUV4Y2VwdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbGVkVGhyb3VnaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsbE9mTGFkaW5nRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlydGhDZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlydGhEYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmxhbmtzVmFsdWVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCbHVlcHJpbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvYXJkT2ZEaXJlY3RvcnNJbmNvbXBsZXRlQXNPZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9hcmRPZkRpcmVjdG9yc05vdEF1dGhvcml6ZWRBc09mR2l2ZW5EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb2FyZE9mRGlyZWN0b3JzTm90Q29tcGxldGVBc09mR2l2ZW5EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb2FyZE9mRGlyZWN0b3JzUmVnaXN0cmF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm9va0VudHJ5RGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJvb2tpbmdEYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJpdGlzaFRoZXJtYWxVbml0VGVzdFBlcmZvcm1lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVkZ2V0TGluZUFwcGxpY2F0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NDb250cm9sQ2hhbmdlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVzaW5lc3NPcGVuZWREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc1Rlcm1pbmF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5ZXJzRG9jayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnV5ZXJzTG9jYWxUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYWxjdWxhdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbGVuZGFyQW5uaXZlcnNhcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbGVuZGFyWWVhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuY2VsQWZ0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbmNlbEFmdGVyRXhDb3VudHJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5jZWxBZnRlckV4RmFjdG9yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FuY2VsSWZOb3REZWxpdmVyZWRCeVRoaXNEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYW5jZWxJZk5vdFB1Ymxpc2hlZEJ5VGhpc0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbmNlbElmTm90U2hpcHBlZEJ5VGhpc0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbmNlbGxhdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhbmNlbGxhdGlvbkRhdGVUaW1lTGF0ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXBpdGFsaXphdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcGl0YXRpb25QZXJpb2RFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcGl0YXRpb25QZXJpb2RTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyZ29Cb29raW5nQ29uZmlybWVkRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcmdvUmVsZWFzZURhdGVUaW1lVWx0aW1hdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2VDb252ZXJ0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2VSZW9wZW5lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzaENhbGxEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXRlZ29yeUNoYW5nZURhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZWFzZWRPcGVyYXRpb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDZXJ0aWZpY2F0ZUVmZmVjdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VydGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VydGlmaWNhdGlvbk9mV2VpZ2h0RGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlcnRpZmljYXRpb25QZXJpb2RTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2VydGlmaWNhdGlvblJldmlzaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFuZ2VkQWNjb3VudGluZ0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYW5nZWREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFyZ2VCYWNrRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoYXJnZVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlUGVyaW9kRW5kRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhcmdlUGVyaW9kU3RhcnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGFydE9mQWNjb3VudFBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hlY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNoZWNrZWREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaGlsZGJpcnRoRGF0ZUFuZE9yVGltZUFjdHVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hpbGRiaXJ0aERhdGVFc3RpbWF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNocmlzdGVuaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDaXRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2l0aXplbnNoaXBDaGFuZ2VEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGFpbUFkbWluaXN0cmF0b3JLbm93bGVkZ2VPZlRoZUluanVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xhaW1BZG1pbmlzdHJhdG9yTm90aWZpZWRPZkVtcGxveWVlTGVnYWxSZXByZXNlbnRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xhaW1JbmN1cnJlZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsYWltTWFkZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsYWltTm90aWZpY2F0aW9uUmVjZWl2ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsYWltc01hZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsYWltU3RhdGVtZW50UGVyaW9kRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGFpbVN0YXRlbWVudFBlcmlvZFN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGF1c2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsZWFyYW5jZURhdGVDdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbGluaWNhbEV4YW1pbmF0aW9uRGF0ZUFuZE9yVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xvc2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbG9zZWRVbnRpbERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsb3NpbmdEYXRlT2ZGaXJzdEJhbGFuY2VTaGVldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xvc2luZ0RhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDbG9zdXJlRGF0ZVRpbWVQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbGxhdGVyYWxEZXBlbmRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbGxhdGVyYWxEZXBlbmRlbnRCZWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29sbGF0ZXJhbERlcGVuZGVudEVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29sbGVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29sbGVjdGlvbkRhdGVUaW1lRWFybGllc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbGxlY3Rpb25EYXRlVGltZUxhdGVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWVuY2VkUHVtcGluZ0JhbGxhc3REYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbWVuY2VkVGFua0NsZWFuaW5nRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbW1lcmNpYWxSYXRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBhbnlUZXJtaW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGFyaXNvblBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGlsYXRpb25EYXRlQW5kVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGxhaW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wbGV0ZWRQdW1waW5nQmFsbGFzdERhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wbGV0ZWRUYW5rQ2xlYW5pbmdEYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGxldGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBsZXRpb25EYXRlT3JUaW1lTm90QWZ0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBsZXRpb25EYXRlT3JUaW1lTm90QmVmb3JlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb21wbGV0aW9uRGF0ZU9yVGltZVNjaGVkdWxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tcGxpYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uZGl0aW9uSW5pdGlhbFRyZWF0bWVudERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbmZpbmVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25maW5lbWVudEVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uZmluZW1lbnRTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uZmlybWF0aW9uRGF0ZUxlYWRUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25maXJtZWREYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ubmVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc29saWRhdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zb2xpZGF0ZWRPbW5pYnVzQnVkZ2V0UmVjb25jaWxpYXRpb25BY3RDT0JSQSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc29saWRhdGVkT21uaWJ1c0J1ZGdldFJlY29uY2lsaWF0aW9uQWN0Q09CUkFCZWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc29saWRhdGVkT21uaWJ1c0J1ZGdldFJlY29uY2lsaWF0aW9uQWN0Q09CUkFFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnNvbGlkYXRlZE9tbmlidXNCdWRnZXRSZWNvbmNpbGlhdGlvbkFjdENPQlJBUXVhbGlmeWluZ0V2ZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zb2xpZGF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc3RydWN0aW9uRGF0ZUFjdHVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc3RydWN0aW9uU3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lclNhZmV0eUNvbnZlbnRpb25Dc2NJbnNwZWN0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyU2FmZXR5Q29udmVudGlvbkNzY1BsYXRlRXhwaXJhdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lclN0cmlwcGluZ0RhdGVUaW1lVWx0aW1hdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lclN0dWZmaW5nRGF0ZVRpbWVVbHRpbWF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGVzdGFiaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRpbmdlbmN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250aW5nZW5jeUVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGludWFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRpbnVhdGlvbk9mUGF5U3RhcnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250aW51aW5nRWR1Y2F0aW9uUmVxdWlyZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRpbnVvdXNDb3ZlcmFnZURhdGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250aW51b3VzUGFzc2l2ZU1vdGlvbkNQTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RBdWRpdERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0QXdhcmREYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RCaW5kaW5nRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RDb21wbGV0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RDb3N0c1Rocm91Z2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3REZWZpbml0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdEVmZmVjdGl2ZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0RXhwaXJ5RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RNYWlsZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyYWN0UGVyZm9ybWFuY2VEZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RQZXJmb3JtYW5jZVN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3RSZS1PcGVuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdFN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdHVhbERlbGl2ZXJ5RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJhY3R1YWxTdGFydERhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmlidXRpb25QZXJpb2RFbmREYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJpYnV0aW9uUGVyaW9kU3RhcnREYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJpYnV0aW9uc0NlYXNpbmdEYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJvbFBsYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyb3ZlcnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb252ZXJzaW9uUHJpdmlsZWdlRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb252ZXJzaW9uVG9SZXBheW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnZlcnNpb25JbnRvSG9sZGluZ0NvbXBhbnlEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb252ZXJ0ZWRUb0VsZWN0cm9uaWNEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb252ZXlhbmNlUmVnaXN0cmF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udmljdGVkRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29vcmRpbmF0aW9uT2ZCZW5lZml0cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29vcmRpbmF0aW9uT2ZCZW5lZml0c0JlZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb29yZGluYXRpb25PZkJlbmVmaXRzRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3JyZWN0ZWREYXRlT2ZCaXJ0aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29ycmVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zaWduZXJTaWduZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdXJ0RGlzbWlzc2FsRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291cnRFdmVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291cnROb3RpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdXJ0UmVnaXN0cmF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ292ZXJhZ2VEdXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ292ZXJhZ2VJc3N1ZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdmVyZWRJbmNvbWVQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyZWRpdEFkdmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0RG9jdW1lbnRhdGlvbkV4cGlyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyZWRpdGVkU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0ZWRTZXJ2aWNlQmVnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNyZWRpdGVkU2VydmljZUVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JlZGl0b3JzUmVxdWVzdGVkVmFsdWVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcmltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3JpbWluYWxTZW50ZW5jZUR1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDcm9zc2JvcmRlckRhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdW11bGF0aXZlUXVhbnRpdHlFbmREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdW11bGF0aXZlUXVhbnRpdHlTdGFydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cmVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50QXV0aG9yaXR5Q29udHJvbFN0YXJ0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudERpc2FiaWxpdHlQZXJpb2RFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnJlbnREaXNhYmlsaXR5UGVyaW9kTGFzdERheVdvcmtlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudERpc2FiaWxpdHlQZXJpb2RTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudEluY29tZVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudExlZ2FsU3RydWN0dXJlRWZmZWN0aXZlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudExpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnJlbnRNb250aEVuZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudE5hbWVFZmZlY3RpdmVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXJyZW50UmVwb3J0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VycmVudFNjaGVkdWxlRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnJlbnRTY2hlZHVsZVNoaXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1cnRhaWxtZW50RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VydGFpbG1lbnREYXRlZnJvbUFkdmljZU9mUGF5bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJDb250cmFjdEVmZmVjdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJDb250cmFjdEV4cGlyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbWVyT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbWVyVmFsdWVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zQ2FyZ29SZWxlYXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zQ2xlYXJhbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21zRW50cnlEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDeWNsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3ljbGVCZWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3ljbGVFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN5Y2xlVG9EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlQWNjb3VudE1hdHVyZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVBY3F1aXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZUFuZE9yVGltZU9mSGFuZGxpbmdFc3RpbWF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVBc0F0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlQXNzaWdubWVudEZpbGVkRm9yUmVjb3JkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYW5rcnVwdGN5RmlsZWREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlQmVjYW1lQXdhcmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVDbGFpbVBhaWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVDb3Vyc2VPZk9ydGhvZG9udGljc1RyZWF0bWVudEJlZ2FuT3JJc0V4cGVjdGVkVG9CZWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZURlZWRGaWxlZEZvclJlY29yZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZURlZmF1bHRXYXNDdXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZURvY3VtZW50YXRpb25PclBhcGVyd29ya09yQm90aFdhc1NlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbGVkRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZUZvcmVjbG9zdXJlSGVsZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZUZvcmVjbG9zdXJlUHJvY2VlZGluZ3NJbnN0aXR1dGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlRm9yZWNsb3N1cmVTYWxlU2NoZWR1bGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlRm9yVGhlTGFzdFVwZGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZUhhemFyZEluc3VyYW5jZVBvbGljeUNhbmNlbGxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZUhhemFyZEluc3VyYW5jZVBvbGljeVJlZnVzZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVNYXRlcmlhbFVzYWdlU3VzcGVuZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZBYmFuZG9ubWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mQWNxdWlzaXRpb25PZlRpdGxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZBY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZkFkdmFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZkFwcHJhaXNhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mQXNzaWdubWVudEFwcHJvdmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZBc3NpZ25tZW50UmVqZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZDbGFpbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mQ2xvc2luZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mRGFtYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWNlYXNlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mRGVlZEluTGlldSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mRGl2b3JjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mRXh0ZW5zaW9uVG9Db252ZXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZkZpcm1Db21taXRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZGaXJzdE1vcnRnYWdlUGF5bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mRmlyc3RSZWdpc3RyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZkZpcnN0VW5jdXJlZERlZmF1bHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZkZvcmVjbG9zdXJlTm90aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZMYXN0Q29udGFjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mTGFzdERyYXciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZkxhc3RJbnN0YWxsbWVudFJlY2VpdmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZMYXN0UGF5bWVudFJlY2VpdmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZMYXN0VXBkYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZMb2FuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZMb2NhbE9mZmljZUFwcHJvdmFsT2ZDb252ZXlhbmNlT2ZEYW1hZ2VkUmVhbEVzdGF0ZVByb3BlcnR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZMb2NhbE9mZmljZUFwcHJvdmFsT2ZDb252ZXlhbmNlT2ZPY2N1cGllZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mTG9jYWxPZmZpY2VDZXJ0aWZpY2F0aW9uT2ZDb252ZXlhbmNlT2ZEYW1hZ2VkUmVhbEVzdGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mTWF4aW11bU1lZGljYWxJbXByb3ZlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mTm90aWNlT2ZQcm9iYWJsZUluZWxpZ2liaWxpdHlGb3JBc3NpZ25tZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZOb3RpY2VPZlJlZmVycmFsRm9yQXNzaWdubWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mTm90aWNlVG9Db252ZXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZk9wZXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mT3JkZXJMZWFkVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mUG9zc2Vzc2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mUHJvZHVjdEZhaWx1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZlByb3BlcnR5SW5zcGVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsZWFzZUZyb21CYW5rcnVwdGN5RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mUmVwYWlyT3JTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZTZWl6dXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZTZXBhcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlT2ZTb3VyY2VEb2N1bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mU3BlY2lmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mU3RhbmRhcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPbldoaWNoQXNzZXRzSnVkZ2VkSW5zdWZmaWNpZW50VG9QYXlDcmVkaXRvcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPdXRzdGFuZGluZ0xvYW5CYWxhbmNlUmVwb3J0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhY2thZ2luZ0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVQYWlkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlUGxhY2VkSW5EaXNmYXZvdXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVQb3NzZXNzb3J5QWN0aW9uSW5pdGlhdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlUHJhY3RpY2VDZWFzZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVQcmFjdGljZUVzdGFibGlzaGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlUHJvcGVydHlTb2xkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlUmVhZHlGb3JDb2xsZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlUmVkZW1wdGlvblBlcmlvZEVuZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVSZWZlcnJlZFRvQXR0b3JuZXlGb3JGb3JlY2xvc3VyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWVzdERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVUaHJvdWdoV2hpY2hQcm9wZXJ0eVRheGVzSGF2ZUJlZW5QYWlkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlVGltZU9mRGlzY291bnRUZXJtaW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZVRpbWVPZkludGVyZXN0RHVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlVGltZU9mTGF0ZXN0QWNjb3VudHNGaWxpbmdBdFB1YmxpY1JlZ2lzdHJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXRlVG90YWxBbW91bnRPZkRlbGlucXVlbmN5UmVwb3J0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVWb2x1bnRhcnlDb252ZXlhbmNlQWNjZXB0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVXaGVuQ29udGFpbmVyRXF1aXBtZW50QmVjb21lc0RvbWVzdGljIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYXlsaWdodE92ZXJkcmFmdFRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRheXNPZk9wZXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVhdGhEYXRlQW5kT3JUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWJpdEFkdmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGViaXRWYWx1ZURhdGVSZXF1ZXN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlYnRJbmN1cnJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVjaXNpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWNsYXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVjbGFyYXRpb25QcmVzZW50YXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWNsYXJhdGlvblJlZmVyZW5jZVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVkdWN0aWJsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVlZE5vdEF2YWlsYWJsZUFzT2ZHaXZlbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlZmVycmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWZlcnJlZERpc3RyaWJ1dGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVmZXJyZWRQYXltZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWZlcnJlZFBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVmaW5pdGlvbk9mRGlzYWJpbGl0eUR1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxheWVkQmlsbGluZ05vdERlbGF5ZWRQYXltZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxldGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlck5vdEJlZm9yZUFuZE5vdEFmdGVyRGF0ZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5QXBwb2ludG1lbnREYXRlQW5kVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlEYXRlVGltZTFTdFNjaGVkdWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeURhdGVUaW1lQWN0dWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeURhdGVUaW1lQ3VycmVudFNjaGVkdWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeURhdGVUaW1lRGVmZXJyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5RGF0ZVRpbWVFYXJsaWVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlEYXRlVGltZUV4cGVjdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeURhdGVUaW1lRmlyc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5RGF0ZVRpbWVMYXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeURhdGVUaW1lTGF0ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeURhdGVUaW1lUHJvbWlzZWRGb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5RGF0ZVRpbWVQcm9taXNlZEZvckFmdGVyQW5kSW5jbHVkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeURhdGVUaW1lUHJvbWlzZWRGb3JQcmlvclRvQW5kSW5jbHVkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeURhdGVUaW1lUmVxdWVzdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeURhdGVUaW1lU2NoZWR1bGVkRm9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeUVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlPcmRlcklzc3VlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlSYXRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5UmVxdWVzdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeVN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeVRpY2tldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVuaWFsRWZmZWN0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZW5pYWxSZXNjaXNzaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnRtZW50QWRtaXNzaW9uRGF0ZUFuZE9yVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0bWVudERpc2NoYXJnZURhdGVBbmRPclRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydG1lbnRPZkxhYm9yV2FnZURldGVybWluYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnR1cmVEYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0dXJlRGF0ZVRpbWVFYXJsaWVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwYXJ0dXJlRGF0ZVRpbWVGcm9tTGFzdFBvcnRPZkNhbGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydHVyZURhdGVUaW1lU2NoZWR1bGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnR1cmVEYXRlVGltZVVsdGltYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXBhcnR1cmVGcm9tU3BlY2lmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVwb3NpdERhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZXNwYXRjaERhdGVBbmRPclRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlc3BhdGNoTm90ZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRldHJpbWVudGFsSW5mb3JtYXRpb25SZWNlaXB0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlyZWN0SW50ZXJjaGFuZ2VEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNhYmlsaXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNhYmlsaXR5V2FpdFBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzYnVyc2VtZW50RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY2hhcmdlRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2NoYXJnZUFuZExvYWRpbmdDb21wbGV0ZWREYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzY2hhcmdlLVBsYW5uZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2NvdmVyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2NyZXBhbmN5RGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2VtYmFya2F0aW9uRGF0ZUFuZFRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc21pc3NhbERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3Bvc2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaXNwb3NpdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlzdHJpYnV0b3JFZmZlY3RpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc3RyaWJ1dG9yVGVybWluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpdmlkZW5kQXBwbGllZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRhcnlDcmVkaXRBbWVuZG1lbnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGFyeUNyZWRpdEV4cGlyeURhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudGFyeUNyZWRpdElzc3VlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnRhcnlDcmVkaXRQcmVzZW50YXRpb25QZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9jdW1lbnREdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50TWVzc2FnZURhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudFJlY2VpdmVkRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvY3VtZW50UmVxdWVzdGVkRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvTm90RGVsaXZlckFmdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb05vdERlbGl2ZXJCZWZvcmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvTm90U2hpcEJlZm9yZUV4Q291bnRyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG9Ob3RTaGlwQmVmb3JlRXhGYWN0b3J5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcmFmdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJhd2luZ1JldmlzaW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJvcEFjdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyb3BwZWRUb0xlc3NUaGFuSGFsZlRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1ZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1ZURhdGVMYXN0Q29tcGxldGVJbnN0YWxsbWVudFBhaWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1ZURhdGVPZkZpcnN0UGF5bWVudFRvUHJpbmNpcGFsQW5kSW50ZXJlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1ZVRvQ3VzdG9tZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1cGxpY2F0ZUJpbGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFYXJsaWVzdEZpbGluZ1BlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWFybGllc3RTYWxlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWFybHlGaW5pc2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVhcmx5U3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVhcmx5V2l0aGRyYXdhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWFybmluZ3NFZmZlY3RpdmVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFZHVjYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVkdWNhdGlvbkJlZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFZHVjYXRpb25FbmREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFZHVjYXRpb25TdGFydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVmZmVjdGl2ZURhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFZmZlY3RpdmVEYXRlT2ZDaGFuZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVsZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbGlnaWJpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWxpZ2liaWxpdHlCZWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRWxpZ2liaWxpdHlFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtYmFya2F0aW9uRGF0ZUFuZFRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVkSW5UaGlzUG9zaXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVkSW5UaGlzUHJvZmVzc2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWVFZmZlY3RpdmVEYXRlT2ZDb3ZlcmFnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95ZWVMYWlkT2ZmIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llZVRlbXBvcmFyeUxhaWRPZmZQZXJpb2RTdGFydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVlVGVtcG9yYXJ5TGFpZE9mZlBlcmlvZEVuZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVlV2FnZXNDZWFzZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVyS25vd2xlZGdlT2ZUaGVJbmp1cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveWVyUmVwb3J0ZWRJbmp1cnlUb0NsYWltQWRtaW5pc3RyYXRvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW1wbG95bWVudFBvc2l0aW9uU3RhcnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3ltZW50RW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3ltZW50T3JIaXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3ltZW50UG9zaXRpb25TdGFydERhdGVFc3RpbWF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVtcGxveW1lbnRQcm9mZXNzaW9uU3RhcnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmREYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kQXZhaWxhYmlsaXR5RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kRGF0ZU9mU3VwcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kRGF0ZVNjaGVkdWxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kaW5nTGF5RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kT2ZHcmFjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kT2ZMYXN0RmlzY2FsWWVhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kb3JzZWRDZXJ0aWZpY2F0ZUlzc3VlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kb3JzZW1lbnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbmdpbmVlcmluZ0NoYW5nZUxldmVsRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5naW5lZXJpbmdEYXRhTGlzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5yb2xsbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5yb2xsbWVudFNpZ25hdHVyZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVudHJ5RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW50cnlEYXRlRXN0aW1hdGVkQ3VzdG9tcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50Q29sbGVjdGlvbk9yUGlja1VwRGF0ZVRpbWVBY3R1YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWlwbWVudENvbGxlY3Rpb25PclBpY2tVcERhdGVUaW1lRWFybGllc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWlwbWVudENvbGxlY3Rpb25PclBpY2tVcERhdGVUaW1lUGxhbm5lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50TG9nRW50cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWlwbWVudFBvc2l0aW9uaW5nRGF0ZVRpbWVBY3R1YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWlwbWVudFBvc2l0aW9uaW5nRGF0ZVRpbWVFc3RpbWF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWlwbWVudFBvc2l0aW9uaW5nRGF0ZVRpbWVSZXF1ZXN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWlwbWVudFBvc2l0aW9uaW5nRGF0ZVRpbWVVbHRpbWF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50UHJlVHJpcERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWlwbWVudFJlY29uZGl0aW9uaW5nRGF0ZVRpbWVBY3R1YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWlwbWVudFJlcGFpclJlYWR5RGF0ZVRpbWVVbHRpbWF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXF1aXBtZW50UmV0dXJuUGVyaW9kRXhwZWN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVxdWlwbWVudFN0b2NrQ2hlY2tEYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXNjYWxhdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzY2FsYXRpb25TdGFydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGFibGlzaGVkRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXN0aW1hdGVDb21tZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZEFjY2VwdGFuY2VEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBcnJpdmFsRGF0ZVRpbWVFc3RpbWF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbXBsZXRpb25EYXRlT3JUaW1lRXN0aW1hdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZWRDb21wbGV0aW9uLUZpcnN0UHJpb3JNb250aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXN0aW1hdGVkQ29tcGxldGlvbi1TZWNvbmRQcmlvck1vbnRoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZWRDb21wbGV0aW9uLVRoaXJkUHJpb3JNb250aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc3RydWN0aW9uRGF0ZUVzdGltYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGF0ZU9mQmlydGhFc3RpbWF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5RGF0ZVRpbWVFc3RpbWF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlcGFydHVyZURhdGVUaW1lRXN0aW1hdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZWRFc2Nyb3dDbG9zaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZWRJbW1pZ3JhdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZFBvaW50T2ZBcnJpdmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZWRQb2ludE9mRGlzY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZWRQb3J0T2ZFbnRyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhcnREYXRlRXN0aW1hdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFc3RpbWF0ZWRTdGFydC1GaXJzdFByaW9yTW9udGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZFN0YXJ0LVNlY29uZFByaW9yTW9udGgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVzdGltYXRlZFN0YXJ0LVRoaXJkUHJpb3JNb250aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXN0aW1hdGVQcmVwYXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXZhbHVhdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV2ZW50RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhhbWluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZWN1dGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4ZWN1dGlvbkRhdGVUaW1lUmVxdWVzdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGl0UGxhbnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBlY3RlZENvbnRhaW5lckhpcmVGcm9tRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGVjdGVkRnVuZGluZ0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGVjdGVkUHJvYmxlbVJlc29sdXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBlY3RlZFJlcGx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBlY3RlZFZhbHVlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwZWRpdGVkT24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGlyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGlyYXRpb25EYXRlT2ZFeHRlbnNpb25Ub0Fzc2lnbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwaXJhdGlvbkRhdGVPZkV4dGVuc2lvbnRvRm9yZWNsb3NlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBpcmF0aW9uRGF0ZVRpbWVPZkN1c3RvbXNEb2N1bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwaXJhdGlvbkRhdGVUb1N1Ym1pdFRpdGxlRXZpZGVuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGlyYXRpb25PZkV4dGVuc2lvblRvQ29udmV5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBpcmF0aW9uT2ZFeHRlbnNpb25Ub1N1Ym1pdEZpc2NhbERhdGEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGlyYXRpb25PZkZvcmVjbG9zdXJlVGltZWZyYW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBpcnlEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBpcnlEYXRlT2ZFeHBvcnRMaWNlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBpcnlEYXRlT2ZJbXBvcnRMaWNlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBsYW50YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cG9ydGF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwb3J0YXRpb25EYXRlRm9yVGV4dGlsZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cG9zdXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBvc3VyZVNvdXJjZVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXh0ZW5kZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4dHJhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhY3NpbWlsZUR1ZUJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGYWlsZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZhaWx1cmVNb2RlRWZmZWN0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZWFzaWJpbGl0eVNpZ25PZmYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZGVyYWxIaWdod2F5QWRtaW5pc3RyYXRpb25GaHdhSW5zcGVjdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZlZUNhcGl0YWxpemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaWVsZEZhaWx1cmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpZWxkVGVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlsZUdlbmVyYXRpb25EYXRlQW5kT3JUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaWxpbmdQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFsSXNzdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpbmFsUmVjb25jaWxpYXRpb25WYWx1ZUVzdGltYXRlQXNPZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYWxTY2hlZHVsZWRQYXltZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbmNpYWxDb3ZlcmFnZVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluYW5jaWFsSW5mb3JtYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5hbmNpYWxJbmZvcm1hdGlvblN1Ym1pc3Npb25EYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluaXNoRGF0ZU9yVGltZU1hbmRhdG9yeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmluaXNoRGF0ZU9yVGltZUVhcmxpZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaW5pc2hEYXRlT3JUaW1lTGF0ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdENvbnRhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpcnN0RGF0ZU9mT3JkZXJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpcnN0SW50ZXJlc3RCZWFyaW5nRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlyc3RJbnRlcmVzdFBheW1lbnREdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpcnN0SW52b2x2ZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpcnN0SXNzdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpcnN0TWFya2V0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpcnN0UGF5bWVudENoYW5nZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlyc3RQYXltZW50RHVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdFByb2R1Y2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdFB1Ymxpc2hlZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpcnN0UmF0ZUFkanVzdG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpcnN0U2FsZURhdGVBbmRPclRpbWVBbmRPclBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlyc3RTdWJtaXNzaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdFZpc2l0b3JDb25zdWx0YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpc2NhbEFubml2ZXJzYXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGF0RXh0cmFFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZsYXRFeHRyYVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWNhc3RQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZvcmVjYXN0UGVyaW9kRW5kRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yZWNhc3RQZXJpb2RTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9ybWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVpZ2h0QmlsbERhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcm9tRGF0ZU9mQXdhcmRUb0NvbXBsZXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyb21EYXRlT2ZBd2FyZFRvRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyb21EYXRlT2ZBd2FyZFRvRWFybGllc3REZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJvbURhdGVPZkF3YXJkVG9MYXRlc3REZWxpdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJvbURhdGVPZk5vdGljZVRvUHJvY2VlZFRvQ29tbWVuY2VtZW50T2YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyb21EYXRlT2ZOb3RpY2VUb1Byb2NlZWRUb0NvbXBsZXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyb21EYXRlT2ZPcmRlclJlY2VpcHRUb0RlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcm9tRGF0ZU9mT3JkZXJSZWNlaXB0VG9TYW1wbGVSZWFkeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJvbURhdGVPZk9yZGVyUmVjZWlwdFRvU2hpcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyb21EYXRlT2ZSZWNlaXB0T2ZJdGVtVG9BcHByb3ZhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJvbURhdGVPZlJlY2VpcHRPZlRvb2xpbmdBaWRzVG9TYW1wbGVSZWFkeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJvbURhdGVPZlNhbXBsZUFwcHJvdmFsVG9GaXJzdFByb2R1Y3RTaGlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJvbURhdGVPZlRvb2xpbmdBdXRob3JpemF0aW9uVG9TYW1wbGVSZWFkeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJvbUxhc3RCb29rZWRPcmRlclRvRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1bWlnYXRpb25EYXRlQW5kT3JUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdW5jdGlvbmFsVGVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnVuZHNBcHByb3ByaWF0aW9uLUVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnVuZHNBcHByb3ByaWF0aW9uLVN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdXR1cmVQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdhbGxvbnNQZXJNaW51dGVUZXN0UGVyZm9ybWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb29kc0NvbGxlY3Rpb25PclBpY2tVcERhdGVUaW1lUGxhbm5lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29vZHNQb3NpdGlvbmluZ0RhdGVUaW1lRXhwZWN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdvb2RzUG9zaXRpb25pbmdEYXRlVGltZVBsYW5uZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdvb2RzUmVjZWlwdERhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmFkdWF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JvdXBDb250cmFjdEVmZmVjdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JvdXBDb250cmFjdEV4cGlyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikd1YXJhbnRlZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikd1YXJhbnRlZVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3VhcmFudG9yUmVjZWl2ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhbmRPdmVyRGF0ZVRpbWVBY3R1YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhbmRPdmVyRGF0ZVRpbWVQbGFubmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIaWdoQ2FwaXRhbFllYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhpZ2hGYWJyaWNhdGlvblJlbGVhc2VBdXRob3JpemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIaWdoUmF3TWF0ZXJpYWxBdXRob3JpemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIaXJlZEZyb21EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIaXJlZFVudGlsRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9sZEFzT2YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvbGRBc1N0b2NrQXNPZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9saWRheSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9saWRheUZpbmlzaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9saWRheVN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb21lc3RlYWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikhvcml6b25FbmREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3Jpem9uUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3Jpem9uU3RhcnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3Nlc0Nvbm5lY3RlZERhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3Nlc0Rpc2Nvbm5lY3RlZERhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3NwaXRhbEFkbWlzc2lvbkRhdGVBbmRPclRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikhvc3BpdGFsRGlzY2hhcmdlRGF0ZUFuZE9yVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSHlkcm90ZXN0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSWxsbmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSWxsbmVzc0JlZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbGxuZXNzUmVjb3ZlcnlEYXRlRXhwZWN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkltbWlncmF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW1wbGFudGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXBsZW1lbnRhdGlvbkRhdGVUaW1lUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkltcG9ydGF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW1wb3J0TGljZW5jZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluYWN0aXZpdHlFbmREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmFjdGl2aXR5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmJvdW5kTW92ZW1lbnRBdXRob3JpemF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5jaWRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluY29tZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5jb21lRG9jdW1lbnRhdGlvbkV4cGlyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluY29tZUluY3JlYXNlUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmNvbWVQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluY29ycG9yYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmNvcnBvcmF0aW9uRGlzc29sdXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluY3VtYmVuY3lQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZGl2aWR1YWxFZHVjYXRpb25QbGFuSUVQIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbi1mb3JjZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5mb3JtYXRpb25SZWxlYXNlQXV0aG9yaXphdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluaXRpYWxDbGFpbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5pdGlhbENvbXBsZXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluaXRpYWxDb250YWN0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5pdGlhbERpc2FiaWxpdHlQZXJpb2RFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluaXRpYWxEaXNhYmlsaXR5UGVyaW9kTGFzdERheVdvcmtlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5pdGlhbERpc2FiaWxpdHlQZXJpb2RSZXR1cm5Ub1dvcmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluaXRpYWxEaXNhYmlsaXR5UGVyaW9kU3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluaXRpYWxGZWVEdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluaXRpYWxGaW5hbmNpYWxBY2NvdW50c0ZpbGVkRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhY2VtZW50RGF0ZUluaXRpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluaXRpYWxQcmVtaXVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbml0aWFsUHJlbWl1bUVmZmVjdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5pdGlhbFJlcXVlc3REYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbml0aWFsVHJlYXRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmp1cnlCZWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5qdXJ5RW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbmp1cnlPcklsbG5lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklubGFuZFNoaXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklucXVpcnlEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJblNlcnZpY2VTdXJ2ZXlEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnNvbHZlbmN5RGlzY2hhcmdlR3JhbnRlZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3BlY3Rpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN0YWxsYXRpb25EYXRlVGltZVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdGFsbG1lbnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN0YWxtZW50UGF5bWVudER1ZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3RydWN0aW9uc09yaWdpbmFsRXhlY3V0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdWZmaWNpZW50QXNzZXRzSnVkZ2VtZW50RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5zdXJhbmNlQ2FyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJlc3RDYXBpdGFsaXphdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJlc3RQYWlkVGhyb3VnaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJlc3RQYWlkVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVyZXN0UGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcmVzdFJhdGVWYWxpZGl0eVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJuYXRpb25hbEFzc2Vzc21lbnRBcHByb3ZhbEZvclB1YmxpY2F0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJuYXRpb25hbFJldmlld0N5Y2xlU3RhcnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcnJ1cHRpb25FbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVycnVwdGlvblN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcnZpZXdlZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludGVydmlld2VyU2lnbmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlbnRvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVudG9yeVJlcG9ydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkludmVzdGlnYXRpb25FbmREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlc3RpZ2F0aW9uU3RhcnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZlc3RtZW50TnVtYmVyQWxsb2NhdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikludml0YXRpb25Ub1RlbmRlckRhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnZvaWNlRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikludm9pY2VEYXRlUmVxdWlyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikludm9pY2VQZXJpb2RFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikludm9pY2VQZXJpb2RTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW52b2ljaW5nUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJcnJlZ3VsYXJJbnRlcmVzdFBheW1lbnREdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Iklzc3VlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXRlbUNvbnRyYWN0RWZmZWN0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJdGVtQ29udHJhY3RFeHBpcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKb2luZWRFbXBsb3llckRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkpvaW5lZEZ1bmREYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSnVkZ2VtZW50RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSnVkZ21lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IktleUV2ZW50Q2FsZW5kYXJZZWFyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJLZXlFdmVudEZpc2NhbFllYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhYm91cldhZ2VEZXRlcm1pbmF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdEFjdGl2aXR5RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdEFubnVhbFJlcG9ydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RDYXBpdGFsQ2hhbmdlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdENlcnRpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RDaGFuZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RDaGVja0ZvckJhbGFuY2VTaGVldFVwZGF0ZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RDaXZpbGlhbkZsaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdERhdGVGb3JBR292ZXJubWVudEFnZW5jeVRvRmlsZUFDbGFpbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdERhdGVPZkFjY291bnRzRmlsZWRBdFB1YmxpY1JlZ2lzdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0RGF0ZU9mT3JkZXJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3REYXRlVG9GaWxlQUNsYWltIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0RGF0ZVRvT2JqZWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0RXBpc29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdEZsaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdEZvbGxvdy11cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdEluc3VyYW5jZU1lZGljYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RJbnRlcmVzdEJlYXJpbmdEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0SXRlbURlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0TG9nZ2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0TWFya2V0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RNZWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0TWVuc3RydWFsQ3ljbGVTdGFydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RNZW5zdHJ1YWxQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RNaWxpdGFyeUZsaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdE5vdGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdE9mZkhpcmVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0T25IaXJlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdFBhaWRJbnN0YWxsbWVudERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RQYXltZW50TWFkZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdFBoeXNpY2FsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXN0UHJlbWl1bUVmZmVjdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdFByZW1pdW1QYWlkRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdFByb2R1Y3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RQdWJsaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdFB1Ymxpc2hlZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RTYWxhcnlJbmNyZWFzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdFNhbGVEYXRlQW5kT3JUaW1lQW5kT3JQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RTY3JlZW5pbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxhc3RTZWVuRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdFZpc2l0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdFhSYXlEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXRlRmluaXNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXRlc3RBYnNlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXRlU3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhdGVzdEJhbGFuY2VTaGVldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGF0ZXN0Q2hlY2tJblRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhdGVzdERlbGl2ZXJ5RGF0ZWF0UGllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGF0ZXN0RGVsaXZlcnlEYXRlQXRSYWlsUmFtcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGF0ZXN0RmlsaW5nUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMYXRlc3RNYXRlcmlhbFNhZmV0eURhdGFTaGVldERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhdGVzdE1ldGVyUmVhZGluZ0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhdGVzdE9uQm9hcmRDYXJyaWVyRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGF0ZXN0UHJpY2VBZGp1c3RtZW50RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGF0ZXN0UmVjZWl2aW5nRGF0ZUN1dG9mZkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxhdGVzdFZpc2l0b3JDb25zdWx0YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxheVRpbWVGaXJzdERheSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGF5VGltZUxhc3REYXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlYWRUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWFzZUNvbW1lbmNlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVhc2VQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlYXNlVGVybUVuZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlYXNlVGVybVN0YXJ0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVmdEVtcGxveWVyRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVnYWxBY3Rpb25DbG9zZWREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZWdhbEFjdGlvblN0YXJ0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxlZ2FsU2V0dGxlbWVudFRlcm1zTWV0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVnYWxTdHJ1Y3R1cmVDaGFuZ2VEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZW5kZXJDcmVkaXRDaGVjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGV0dGVyT2ZBZ3JlZW1lbnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMZXR0ZXJPZkxpYWJpbGl0eURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpY2Vuc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpY2Vuc2VFZmZlY3RpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpY2Vuc2VFeHBpcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaWNlbnNlUmVuZXdhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGljZW5zZVJlcXVlc3RlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGllbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlxdWlkYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaXN0aW5nUmVjZWl2ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxpc3RQcmljZUNoYW5nZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hZGVkb25WZXNzZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvYWRpbmdEYXRlVGltZUFjdHVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hblB1cmNoYXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2FuU2VydmljaW5nVHJhbnNmZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY2F0aW9uRXhjZXB0aW9uT3JkZXJOdW1iZXJBc3NpZ25lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9zcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG90TnVtYmVyRXhwaXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG93ZXN0QWN0aXZpdHlQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxvd1BlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFpbEJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWlsaW5nRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFpbFJlY2VpcHREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWludGVuYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFpbnRlbmFuY2VDb21tZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWludGVuYW5jZUVmZmVjdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFrZWdvb2RDb21tZXJjaWFsRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFuYWdlbWVudEF2YWlsYWJsZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbmFnZXJOb3RSZWdpc3RlcmVkQXNPZkdpdmVuRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFuZGF0b3J5T3JUYXJnZXRGaW5pc2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbmRhdG9yeU9yVGFyZ2V0U3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbmlmZXN0U2hpcE5vdGljZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbnVmYWN0dXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRhdGVPZk1hcnJpYWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXN0ZXJMZWFzZUFncmVlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0ZXJpYWxDaGFuZ2VOb3RpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFsQ2xhc3NpZmljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdGVyaWFsU3BlY2lmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF0dXJpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hdHVyaXR5RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWF4aW11bUNyZWRpdEdyYW50ZWREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWF0QWdlaW5nUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FpZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaWNhaWRCZWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaWNhaWRFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYWxDZXJ0aWZpY2F0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaWNhbEluZm9ybWF0aW9uU2lnbmF0dXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FsSW5mb3JtYXRpb25TeXN0ZW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FyZUJlZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FyZUVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaWNhcmVQYXJ0QUNvdmVyYWdlRWZmZWN0aXZlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWVkaWNhcmVQYXJ0QUVsaWdpYmlsaXR5QmVnaW5EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FyZVBhcnRBRWxpZ2liaWxpdHlFbmREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FyZVBhcnRBVGVybWluYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FyZVBhcnRCQ292ZXJhZ2VFZmZlY3RpdmVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZWRpY2FyZVBhcnRCRWxpZ2liaWxpdHlCZWdpbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYXJlUGFydEJFbGlnaWJpbGl0eUVuZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYXJlUGFydEJUZXJtaW5hdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZGljYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lZXRpbmdEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXJnZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1lc3NhZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1ldGVyUmVhZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlkcG9pbnRPZlBlcmZvcm1hbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaW5pbXVtUmVxdWlyZWREaXN0cmlidXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1pbmltdW1TaGVsZkxpZmVSZW1haW5pbmdBdFRpbWVPZkRlc3BhdGNoUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaW5pbXVtU2hlbGZMaWZlUmVtYWluaW5nQXRUaW1lT2ZSZWNlaXB0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb250aEVuZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9udGhUb0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vb3JpbmdEYXRlQW5kVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9ydGdhZ2VlT2ZmaWNpYWxTaWduYXR1cmVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3J0Z2FnZWVSZXBvcnRlZEN1cnRhaWxtZW50RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9ydGdhZ2VOb3RlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9zdExpa2VseUVhcmx5RmluaXNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3N0TGlrZWx5RWFybHlTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9zdExpa2VseUxhdGVGaW5pc2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vc3RMaWtlbHlMYXRlU3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vc3RSZWNlbnRIZW1vZ2xvYmluT3JIZW1hdG9jcml0T3JCb3RoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3N0UmVjZW50UmVuZXdhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9zdFJlY2VudFJldmlzaW9ub3JJbml0aWFsVmVyc2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW9zdFJlY2VudFNlcnVtQ3JlYXRpbmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vdmVkRnJvbUxvY2F0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmVnb3RpYXRlZEV4dGVuc2lvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5lZ290aWF0ZWRGaW5pc2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5lZ290aWF0ZWRTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmVnb3RpYXRpb25zU3RhcnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXRDcmVkaXRTZXJ2aWNlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV0V29ydGhEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXh0QWN0aXZpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5leHRBbm5pdmVyc2FyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV4dEFubnVhbE1lZXRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5leHRJbnN0YWxsbWVudER1ZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5leHRJbnRlcmVzdENoYW5nZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5leHRQYXlJbmNyZWFzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTmV4dFBheW1lbnREdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5leHRSZXZpZXdEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb25Xb3JraW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb1Byb2R1Y3Rpb25TY2hlZHVsZUVzdGFibGlzaGVkQXNPZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9Qcm9taXNlQXNPZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9TaGlwcGluZ1NjaGVkdWxlRXN0YWJsaXNoZWRBc09mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RBZnRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90QmVmb3JlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdGlmaWNhdGlvbkRhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RpZmljYXRpb25PZkRlYXRoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RpZmljYXRpb25UaW1lTGltaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdGlmaWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RSZWdpc3RlcmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3RSZWdpc3RlcmVkQXNPZkdpdmVuRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVyc2luZ0hvbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik51cnNpbmdIb21lRnJvbSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTnVyc2luZ0hvbWVUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2NjdXBhbmN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPY2N1cnJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPY2N1cnJlbmNlU3BhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2NjdXJyZW5jZVNwYW5Gcm9tIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPY2N1cnJlbmNlU3BhblRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZlckV4cGlyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9mZkhpcmVTdXJ2ZXlEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZIb2xkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZpY2lhbFJhaWxDYXJJbnRlcmNoYW5nZUVpdGhlckFjdHVhbG9yQWdyZWVkVXBvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2ZmLU1hcmtldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2Zmc2V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZzZXRCZWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2Zmc2V0RW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPZmZzZXRGcm9tQ29vcmRpbmF0ZWRVbml2ZXJzYWxUaW1lVXRjIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbGRlc3RVbnBhaWRJbnN0YWxsbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9uQm9hcmREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbkhpcmVTdXJ2ZXlEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbkhvbGQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9uc2V0T2ZDdXJyZW50U3ltcHRvbXNPcklsbG5lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9uc2V0T2ZTaW1pbGFyU3ltcHRvbXNPcklsbG5lc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wZW5Ib3VzZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3BlbmluZ0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wZXJhdGlvbnNDZWFzZWREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGluaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcHRpbWlzdGljRWFybHlGaW5pc2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wdGltaXN0aWNFYXJseVN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcHRpbWlzdGljTGF0ZUZpbmlzaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3B0aW1pc3RpY0xhdGVTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3B0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JkZXJBbWVuZG1lbnRCaW5kaW5nRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JkZXJDb21wbGV0aW9uRGF0ZVRpbWVVbHRpbWF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JkZXJEYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JkZXJFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yZGVyUmVjZWl2ZWREYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JkZXJTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JkZXJUb1Byb2NlZWREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luYWxEdWVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbER1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbEVhcmx5RmluaXNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbEVhcmx5U3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsRXN0aW1hdGVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbElzc3VlQWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbExpc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbmFsbHlTY2hlZHVsZWRTaGlwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5hbE1hdHVyaXR5RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luYWxOYW1lQ2hhbmdlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luYWxQb3N0aW5nRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luYWxSZWNlaXB0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcnRob2RvbnRpY1RyZWF0bWVudFBlcmlvZFJlbWFpbmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3J0aG9kb250aWNUcmVhdG1lbnRQZXJpb2RUb3RhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0LU9mLVBvY2tldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0c2lkZUF1ZGl0b3JzUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdmVyaGF1bGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdmVycmlkZURhdGVGb3JTZXR0bGVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdmVyVGFyZ2V0QmFzZWxpbmVNb250aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3ZlcnRpbWVFbmREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdmVydGltZVN0YXJ0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3duZXJzaGlwQ2hhbmdlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3duZXJzaGlwUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPeHlnZW5TYXR1cmF0aW9uVGVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3h5Z2VuVGhlcmFweSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3h5Z2VuVGhlcmFweUV2YWx1YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik94eWdlblRoZXJhcHlGcm9tIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPeHlnZW5UaGVyYXB5VG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhY2tpbmdFbmREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWNraW5nU3RhcnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWlkSW5GdWxsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWlkVGhyb3VnaERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhaWQtVGhyb3VnaERhdGVGb3JBY2NydWVkU2lja1BheSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFpZFRocm91Z2hEYXRlRm9yTWluaW11bVBheW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhaWQtVGhyb3VnaERhdGVGb3JTYWxhcnlDb250aW51YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhaWRUaHJvdWdoRGF0ZUZvclRvdGFsUGF5bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFpZC1UaHJvdWdoRGF0ZUZvclZhY2F0aW9uUGF5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWlkVG9EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYWlkLXVwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXBlcndvcmtNYWlsZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhcnRpYWxBbm51aXRpemF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJ0aWNpcGF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydFRpbWVXb3JraW5nQ2hhbmdlRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhc3REdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhdGllbnRGaXJzdFZpc2l0Rm9yQ29uZGl0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50Q29tbWVuY2VtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudERhdGVUaW1lRGVmZXJyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnREdWVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50RWZmZWN0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50SW5pdGlhdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50SW5zdHJ1Y3Rpb25EYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5bWVudElzc3VlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50UGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50UGVyaW9kRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXltZW50UGVyaW9kU3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheW1lbnRWYWx1YXRpb25QcmVzZW50YXRpb25EYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF5cm9sbERlZHVjdGlvbkRhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXlyb2xsUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXlyb2xsUGVyaW9kQmVnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheXJvbGxQZXJpb2RFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlYWtBY3Rpdml0eVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVlclJldmlld09yZ2FuaXphdGlvblBST0FwcHJvdmVkU3RheSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVlclJldmlld09yZ2FuaXphdGlvblBST0FwcHJvdmVkU3RheUZyb20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlZXJSZXZpZXdPcmdhbml6YXRpb25QUk9BcHByb3ZlZFN0YXlUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVuYWx0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVuYWx0eUJlZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZW5hbHR5RW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZW5kaW5nQXJjaGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyY29sYXRpb25UZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJpb2RBbkV2ZW50SXNMYXRlRHVlVG9DdXN0b21lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyaW9kQXNzaWduZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcmlvZEJldHdlZW5DaGFuZ2VzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJpb2RDb3ZlcmVkQnlTb3VyY2VEb2N1bWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcmlvZEVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyaW9kRXh0ZW5kZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcmlvZGljSW5zcGVjdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcmlvZE9mQ2FyZUVuZERhdGVBbmRPclRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcmlvZE9mQ2FyZVN0YXJ0RGF0ZUFuZE9yVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyaW9kT2ZJbGxuZXNzRW5kRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyaW9kT2ZJbGxuZXNzU3RhcnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJpb2RPdmVyZHVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXJpb2RTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVyaW9kV29ya2VkRm9yVGhlQ29tcGFueSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVybWl0VG9BZG1pdERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlcm1pdFllYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlc3NpbWlzdGljRWFybHlGaW5pc2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlc3NpbWlzdGljRWFybHlTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGVzc2ltaXN0aWNMYXRlRmluaXNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQZXNzaW1pc3RpY0xhdGVTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlja1VwQ29sbGVjdGlvbkRhdGVUaW1lT2ZDYXJnbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGlja1VwRGF0ZVRpbWVPZkVxdWlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhY2VtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFjZW1lbnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFjZW1lbnREYXRlUHJldmlvdXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYWNlbWVudFBlcmlvZEV4cGlyYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW5Bbm5pdmVyc2FyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhbkJlZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFuRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFuRW50cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW5uZWREdXJhdGlvbk9mV29ya3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW5uZWRSZWxlYXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFuT2ZUcmVhdG1lbnRQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsYW5QYXJ0aWNpcGF0aW9uU3VzcGVuc2lvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhblBlcmlvZEVsZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFuUGVyaW9kRWxlY3Rpb25CZWdpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGxhblBlcmlvZEVsZWN0aW9uRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQbGFuVGVybWluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBsdWdnZWRBbmRBYmFuZG9uZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvbGljeUVmZmVjdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9saWN5RWZmZWN0aXZlT25PckFmdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb2xpY3lFZmZlY3RpdmVPbk9yQmVmb3JlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb2xpY3lFeHBpcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb2xpY3lTdXJyZW5kZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvb2xTZXR0bGVtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3NpdGlvbmluZ0RhdGVUaW1lT2ZFcXVpcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvc2l0aW9uaW5nRGF0ZVRpbWVPZkdvb2RzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3N0aW5nRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9zdG1hcmtEYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9zdC1SZWNsYXNzaWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3N0LVJlY2xhc3NpZmljYXRpb25FbmRPZlNlY29uZFllYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvc3QtUmVjbGFzc2lmaWNhdGlvbkZpcnN0UmVwb3J0Q2FyZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9zdC1SZWNsYXNzaWZpY2F0aW9uRmlyc3RTZW1pLWFubnVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9zdC1SZWNsYXNzaWZpY2F0aW9uU2Vjb25kU2VtaS1hbm51YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWFycmFuZ2VkRGVhbE1hdGNoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmUtQXdhcmRTdXJ2ZXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWNlZGluZ1BlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlLWNlcnRpZmljYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVmb3JlY2xvc3VyZUFjY2VwdGFuY2VEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVmb3JlY2xvc3VyZVNhbGVDbG9zaW5nRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlZ25hbmN5QmVnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZWduYW5jeUR1cmF0aW9uQWN0dWFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVnbmFuY3lFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZW1pdW1DaGFuZ2VQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZW1pdW1QYWlkVG9EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVtaXVtUGFpZFRvRGF0ZUJlZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVtaXVtUGFpZFRvRGF0ZUVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlcGFyYXRpb25EYXRlVGltZU9mRG9jdW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXNjcmlwdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc2NyaXB0aW9uRGlzcGVuc2luZ0RhdGVBbmRPclRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXNjcmlwdGlvbkZpbGwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXNjcmlwdGlvbkZyb20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXNjcmlwdGlvbklzc3VlRGF0ZUFuZE9yVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc2NyaXB0aW9uVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXNlbnRhdGlvbkRhdGVMYXRlc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXNlbnRhdGlvbkRhdGVPZkdvb2RzRGVjbGFyYXRpb25DdXN0b21zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVzZW50YXRpb25Ub0JhbmtydXB0Y3lSZWNlaXZlcnNEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVzZW50Q29udHJvbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc2VudGVkVG9SZWNlaXZlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXNlbnRMZWdhbFN0cnVjdHVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc2VudGx5UmVzaWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXNlbnRtZW50RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc2VudE5hbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXNlbnRSZXNpZGVuY2VTdGFydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzQm9va2luZ0RhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c0NvdXJ0RXZlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzQ3VycmVudEFjY291bnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c0VtcGxveW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzRW1wbG95bWVudEVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNFbXBsb3ltZW50U3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzSW52b2ljZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzbHlSZXBvcnRlZERhdGVPZkJpcnRoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c2x5UmVzaWRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNNZXRlclJlYWRpbmdEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c01vbnRoRW5kaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c1BlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNSZXBvcnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmV2aW91c1Jlc2lkZW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJldmlvdXNSZXNpZGVuY2VFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzUmVzaWRlbmNlU3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXZpb3VzVGVybWluYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmljZUFkanVzdG1lbnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmljZUFkanVzdG1lbnRMaW1pdERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaWNlQWRqdXN0bWVudFN0YXJ0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpY2VCYXNlRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaWNlUHJvdGVjdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWFyeUNhcmVQcm92aWRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWFyeUNhcmVQcm92aWRlckJlZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltYXJ5Q2FyZVByb3ZpZGVyRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmludGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmlvckNvbnRyYWN0QW5uaXZlcnNhcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW9yQ29udHJhY3RJc3N1ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JIb3NwaXRhbGl6YXRpb25EYXRlc1JlbGF0ZWRUb0N1cnJlbnRTZXJ2aWNlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JJbmNvcnJlY3REYXRlT2ZCaXJ0aCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JOb3RpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW9yUGxhY2VtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcml2aWxlZ2VEZXRhaWxzVmVyaWZpY2F0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvY2Vzc2luZ0RhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9jZXNzaW5nRGF0ZVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvY2Vzc2luZ0VuZERhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9jZXNzaW5nU3RhcnREYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdEF2YWlsYWJpbGl0eURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3RIZWxkVW50aWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y3Rpb25EYXRlTm9TY2hlZHVsZUVzdGFibGlzaGVkQXNPZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZHVjdGlvbkluc3BlY3Rpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0aW9uTWFudWZhY3R1cmVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9kdWN0TGlmZXNwYW5BdFRpbWVPZlByb2R1Y3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2ZpdFBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZ3JhbW1lZENhbGVuZGFyWWVhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvZ3JhbW1lZEZpc2NhbFllYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2dyZXNzUGF5bWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdGVkQWN0aW9uRW5kRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdGVkRm9yZWNsb3N1cmVTYWxlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvamVjdE92ZXJUYXJnZXRCYXNlbGluZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21pc2VkRm9yRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21pc2VkRm9yRGVsaXZlcnlBZnRlckFuZEluY2x1ZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbWlzZWRGb3JEZWxpdmVyeVByaW9yVG9BbmRJbmNsdWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21pc2VkRm9yRGVsaXZlcnlXZWVrT2YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21pc2VkRm9yU2hpcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21pc2VkRm9yU2hpcG1lbnRBZnRlckFuZEluY2x1ZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbWlzZWRGb3JTaGlwbWVudFByaW9ydG9BbmRJbmNsdWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21pc2VkRm9yU2hpcG1lbnRXZWVrT2YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21vdGlvbkRhdGVQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21vdGlvbkVuZERhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9tb3Rpb25GbG9vclN0b2NrUHJvdGVjdC1FbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21vdGlvbkZsb29yU3RvY2tQcm90ZWN0LVN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9tb3Rpb25JbnZvaWNlUGVyZm9ybWFuY2UtRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9tb3Rpb25JbnZvaWNlUGVyZm9ybWFuY2UtU3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21vdGlvbk9yZGVyLUVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbW90aW9uT3JkZXItU3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21vdGlvblBlcmZvcm1hbmNlLUVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbW90aW9uUGVyZm9ybWFuY2UtU3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21vdGlvblJlcXVlc3RlZERlbGl2ZXJ5LUVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvbW90aW9uUmVxdWVzdGVkRGVsaXZlcnktU3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb21vdGlvblNoaXAtRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9tb3Rpb25TaGlwLVN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9tb3Rpb25TdGFydERhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9wZXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvcGVydHlBY3F1aXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvcGVydHlCdWlsdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvdG90eXBlVGVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJvdmlkZXJTaWduYXR1cmVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQdWJsaWNhdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlT3JkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlT3JkZXJMYXRlc3RQb3NzaWJsZUNoYW5nZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlB1cmNoYXNlT3JkZXJSZWNlaXZlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHV0SW50b1NlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YWxpdHlSYXRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YXJ0ZXJFbmRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1b3RhRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVvdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1b3RlVG9CZVJlY2VpdmVkQnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhdGVBZGp1c3RtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYXRlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmF0ZU9mRXhjaGFuZ2VEYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmF0ZVByaWNlRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYWNoZWRUb3RhbERlcHRoIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWFkeUZvckluc3BlY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYWxFc3RhdGVQcm9wZXJ0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhbEVzdGF0ZVRheFllYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYnVpbHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2FwdHVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2YWJsZXNDb2xsZWN0aW9uUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXZlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2ZUF0TG9ja2JveERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmVkRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY2VpdmVkSW5UaGVNYWlsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXZlckFwcG9pbnRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjZWl2ZXJzaGlwUGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNlaXZlcnNoaXBSZXN1bHREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNsYXNzaWZpY2F0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNsYXNzaWZpY2F0aW9uRXhpdERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY29tcGxldGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjb3JkZWREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWNvdmVyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVjb3ZlcnlGaW5pc2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlY292ZXJ5U3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlLWVudHJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZS1ldmFsdWF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVFeHBvcnRhdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVyZW5jZURhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZlcmVuY2VkSXRlbUNyZWF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmZXJyYWxEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZlcnJlZEZyb20iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmVycmVkVG8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZmluYW5jZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmdXNhbFBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaXN0ZXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaXN0ZXJlZENvbnRyYWN0b3JOdW1iZXJBc3NpZ25tZW50RGF0ZU9yaWdpbmFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RyYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWdpc3RyYXRpb25EYXRlT2ZQcmV2aW91c0N1c3RvbXNEZWNsYXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVnaXN0cmF0aW9uT2ZCb2FyZE9mRGlyZWN0b3JzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWhpcmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlaW1idXJzZW1lbnRDbGFpbUlzc3VlRGF0ZUFuZE9yVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVJbXBvcnRhdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlaW5zdGF0ZW1lbnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWluc3VyYW5jZUFjY291bnRpbmdQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlaW5zdXJhbmNlQ292ZXJhZ2VEdXJhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVpbnN1cmFuY2VDdXJyZW50QWNjb3VudFBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVpbnN1cmFuY2VFZmZlY3RpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlaW5zdXJhbmNlSXNzdWVBZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlaW5zdXJhbmNlUGFpZFVwRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVpbnN1cmFuY2VQYXltZW50RnJlcXVlbmN5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWlzc3VlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWplY3RlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsZWFzZURhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxlYXNlRGF0ZUN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbGVhc2VEYXRlT2ZDdXN0b21lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsZWFzZURhdGVPZlN1cHBsaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWxlYXNlZFJldHVyblRvV29yayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsZWFzZWRUb1Zlc3NlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsZWFzZUZyZXF1ZW5jeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsZWFzZU9mSW5mb3JtYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbWl0dGFuY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbW9kZWxpbmdDb21wbGV0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbW92ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbmV3YWxEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZW50YWxQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbnRTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVudFN1cnZleSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwYWlyVHVybmFyb3VuZFRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGF5bWVudEJlZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBheW1lbnRTY2hlZHVsZVNlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGxhY2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBsYWNlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwbGFjZW1lbnRFZmZlY3RpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGx5RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBvcnRlZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcG9ydEVuZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcG9ydGluZ0N5Y2xlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVwb3J0UGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBvcnRTdGFydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVhbGlmaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWVzdGVkQ29udHJhY3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVlc3RlZERlcGFydHVyZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVlc3RlZEZpbmlzaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlEYXRlVGltZVJlcXVlc3RlZEZvckFmdGVyQW5kSW5jbHVkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeURhdGVUaW1lUmVxdWVzdGVkRm9yUHJpb3JUb0FuZEluY2x1ZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWVzdGVkRm9yRGVsaXZlcnlXZWVrT2YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBtZW50RGF0ZVRpbWVSZXF1ZXN0ZWRGb3JBZnRlckFuZEluY2x1ZGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcG1lbnREYXRlVGltZVJlcXVlc3RlZEZvclByaW9yVG9BbmRJbmNsdWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVlc3RlZEZvclNoaXBtZW50V2Vla09mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXF1ZXN0ZWRPZmZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWVzdGVkUGljay11cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWVzdGVkU2V0dGxlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWVzdGVkU2hpcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVxdWVzdGVkU3RhcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVlc3RGb3JRdW90YXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVpcmVkQnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVpcmVkRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2VydmF0aW9uT2ZGYWNpbGl0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzaWRlbnRMaWNlbnNlRWZmZWN0aXZlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNpZGVudExpY2Vuc2VFeHBpcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNpZ25hdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc2lnbmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXNvbHZlZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3REYXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3RGaW5pc2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlc3RTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVzdWJtaXNzaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXRlbnRpb25SZWxlYXNlRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldGVudGlvblJlbGVhc2VEYXRlVGltZVBhcnRpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldGVybWluYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldGlyZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldHJhbnNtaXNzaW9uVGltZVN0YW1wIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXR1cm5lZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldHVybmVkVG9DdXN0b21lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0dXJuVG9Xb3JrRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV0dXJuVG9Xb3JrUGFydFRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldmlld0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldmlld1BlcmlvZEVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV2aXNlZEFkanVzdGVkRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXZpc2VkQWRqdXN0ZWRTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV2aXNlZEVzdGltYXRlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmV2aXNpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldm9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldm9rZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJpZ0Fycml2YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvYWRGdW5kVGF4RXhwaXJ5RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FpbGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FsYXJ5Q2hhbmdlRWZmZWN0aXZlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FsYXJ5RGVmZXJyYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbGVhYmxlU3RvY2tEZW1hbmRDb3ZlclBlcmlvZEV4cGVjdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWxlc0RhdGVBbmRPclRpbWVBbmRPclBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FsZXNQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbXBsZUF2YWlsYWJsZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbXBsZUNvbGxlY3RlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FtcGxlUmVxdWlyZWREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYW1wbGVzVG9CZVJldHVybmVkQnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNhbmN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYXRpc2ZhY3Rpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYXRpc2ZpZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjaGVkdWxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTY2hlZHVsZWRGaW5pc2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjaGVkdWxlZEZvckRlbGl2ZXJ5T25PckFmdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTY2hlZHVsZWRGb3JEZWxpdmVyeU9uT3JCZWZvcmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjaGVkdWxlZEZvckRlbGl2ZXJ5V2Vla09mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTY2hlZHVsZWRGb3JTaGlwbWVudEFmdGVyQW5kSW5jbHVkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTY2hlZHVsZWRGb3JTaGlwbWVudFByaW9yVG9BbmRJbmNsdWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjaGVkdWxlZEZvclNoaXBtZW50V2Vla09mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTY2hlZHVsZWRJbnRlcmNoYW5nZURlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTY2hlZHVsZWRTdGFydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2NoZWR1bGVSZWxlYXNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTY2hvb2xSZWZ1bmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY29uZEFkbWlzc2lvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY29uZERpc2NoYXJnZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY3VyaXR5UmF0ZUFkanVzdG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY3VyaXR5U2hhcmVQcmljZUFzT2ZHaXZlbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGVjdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxlY3Rpb25QZXJpb2RFbmREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxlY3Rpb25QZXJpb2RTdGFydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGxCeURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGxlcnNMb2NhbFRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbWlhbm51YWxFbmRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbmRpbmdSb2FkVGltZVN0YW1wIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXB0aWNBcHByb3ZhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZUNvbXBsZXRpb25EYXRlVGltZUFjdHVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZUludGVycnVwdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZVBlcmlvZEVuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZVBlcmlvZFN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlUmVxdWVzdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlclNpZ25hdHVyZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNldG9mZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2V0dGxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2V0dGxlbWVudERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNldHRsZW1lbnREYXRlQXNTcGVjaWZpZWRCeVRoZU9yaWdpbmF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNldHRsZW1lbnREYXRlRnJvbUludGVybGluZVNldHRsZW1lbnRTeXN0ZW1Pbmx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXR0bGVtZW50RGF0ZVBsYW5uZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNldHRsZW1lbnREdWVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXR0bGVtZW50U3RhdHVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGFyZVByaWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGVsZkxpZmVFeHBpcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwRGF0ZU9yaWdpbmFsbHlTY2hlZHVsZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBEdXJpbmdEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwbWVudERhdGVUaW1lUHJvbWlzZWRGb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBtZW50RGF0ZVRpbWVQcm9taXNlZEZvclByaW9yVG9BbmRJbmNsdWRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBtZW50RGF0ZVRpbWVSZXF1ZXN0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBOb3RMYXRlclRoYW5EYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcE5vdEJlZm9yZURhdGVUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwTm90QmVmb3JlQW5kTm90QWZ0ZXJEYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcE9uT3JBYm91dERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwaW5nRGF0ZUFuZE9yVGltZUN1cnJlbnRTY2hlZHVsZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBpbmdEYXRlTm9TY2hlZHVsZUVzdGFibGlzaGVkQXNPZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcFdlZWtPZkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNodXRJbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2lja25lc3NCZW5lZml0QWdlTGltaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpY2tuZXNzQmVuZWZpdFBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2lja25lc3NJbnN1cmFuY2VFbGltaW5hdGlvblBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2lja25lc3NMaWZldGltZUJlbmVmaXRRdWFsaWZpY2F0aW9uQWdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaWRldHJhY2tlZFdlbGxib3JlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaWduYXR1cmVEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaWduYXR1cmVSZWNlaXZlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2ltaWxhcklsbG5lc3NPbnNldERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNpbXBsZUludGVyZXN0RHVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbGF1Z2h0ZXJpbmdFbmREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTbGF1Z2h0ZXJpbmdTdGFydERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvY2lhbFNlY3VyaXR5Q2xhaW1zVmVyaWZpY2F0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29sZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29sZEJvb2tQdWJsaWNhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU29sZURpcmVjdG9yc2hpcFJlZ2lzdHJhdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNvbGljaXRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU291cmNlRG9jdW1lbnRDYXB0dXJlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3BhY2luZ09yZGVyVW5pdEFzc2lnbmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcG9uc29yZWREZXBlbmRlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwb25zb3JlZERlcGVuZGVudEJlZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTcG9uc29yZWREZXBlbmRlbnRFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwb3VzZVJldGlyZW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNwdWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXJ0RGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXJ0RGF0ZU9yVGltZUFjdHVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhcnREYXRlT3JUaW1lRWFybGllc3QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXJ0RGF0ZU9yVGltZUVzdGltYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhcnREYXRlT3JUaW1lTGF0ZXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFydERhdGVPclRpbWVNYW5kYXRvcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXJ0RGF0ZU9yVGltZU5vdEFmdGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFydERhdGVPclRpbWVOb3RCZWZvcmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXJ0RGF0ZU9yVGltZVNjaGVkdWxlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhcnREYXRlVGltZVBsYW5uZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXJ0ZWREb2luZ0J1c2luZXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFydE5vRWFybGllclRoYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXJ0Tm9MYXRlclRoYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXRlbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVSZXNpZGVuY3lEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0ZVRlcm1pbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0aXN0aWNhbFRpbWVTZXJpZXNEYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0dXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXR1c0FmdGVyQW5kSW5jbHVkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGF0dXNBc3NpZ25tZW50RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdHVzQ2hhbmdlRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXR1c0NvbW1lcmNpYWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXR1c091dHNpZGVQcm9jZXNzb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0YXR1c1ByaW9yQW5kSW5jbHVkaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9wRGlzdHJpYnV0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RvcFdvcmtBc09mR2l2ZW5EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdG9yZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0dWRlbnRTaWduZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YmNvbnRyYWN0b3JQZXJpb2RPZkhpcmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1Ym1pc3Npb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJtaXR0YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnNlcXVlbnRJbnRlcmVzdFBheW1lbnREdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1YnNlcXVlbnRTdWJtaXNzaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBlcnNlZGVkRGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBsZW1lbnRhbElzc3VlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXBwbGllcnNBdmVyYWdlQ3JlZGl0UGVyaW9kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdXJmYWNlQ2FzaW5nQXV0aG9yaXR5QXBwcm92YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cmdlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cnJlbmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VydmV5WWVhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VzcGVuZGVkRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VzcGVuc2lvbkVmZmVjdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VzcGVuc2lvblBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3dvcm5BbmRTdWJzY3JpYmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTeW1wdG9tc09uc2V0UGF0aWVudEFsbGVnZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN5c3RlbVN1cnZleSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3lzdGVtVGVzdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFibGVSYXRpbmdFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhaWxDb3ZlcmFnZUJlZ2luIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYWlsQ292ZXJhZ2VFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhbmtzQWNjZXB0ZWREYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFua3NJbnNwZWN0ZWREYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheFBlcmlvZEVuZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheFBlcmlvZFN0YXJ0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF4UG9pbnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXhZZWFyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZWNobmljYWxSYXRpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbGV4RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVtcG9yYXJ5UHJvc3RoZXNpc0RhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbmRlclN1Ym1pc3Npb25EYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVybWluYXRlZERhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcm1pbmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXJtaW5hdGlvbk9mRmFjaWxpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcm1zRGlzY291bnREdWVEYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVybXNNZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcm1zTmV0RHVlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVzdENvbXBsZXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXN0UGVyZm9ybWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXN0UGVyaW9kRW5kaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXN0U3RhcnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZXhhc0xpbmVUZXJtaW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhlcmFweSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGltZUVtcGxveWVlQmVnYW5Xb3JrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW1lSW5VUyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGltZUxpbWl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaW1lTm93RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGltZVBlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGl0bGVUcmFuc2ZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG9vbGluZ1JlcXVpcmVkRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVG90YWxTaGVsZkxpZmVQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvdXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWRlRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhZGVTdHlsZVJlZ2lzdHJhdGlvbkRhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWluaW5nQmVnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWluaW5nRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc2FjdGlvbkNyZWF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNmZXJOb3RlQWNjZXB0YW5jZURhdGVBbmRUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc2ZlcnJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhbnNoaXBtZW50RGF0ZVRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zaXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zaXRUaW1lTGltaXRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc21pc3Npb25EYXRlVGltZU9mRG9jdW1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zbWl0dGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFcXVpcG1lbnRTdHJpcHBpbmdEYXRlQW5kT3JUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFuc3BvcnRFcXVpcG1lbnRTdHVmZmluZ0RhdGVBbmRPclRpbWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYXZlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJlYXRtZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmVhdG1lbnRFbmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyZWF0bWVudFN0YXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmlhbEJhbGFuY2VQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyaWFsU2V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmlhbFN0YXJ0RGF0ZUFjdHVhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJpYWxTdGFydERhdGVTY2hlZHVsZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydXN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmRlcndyaXRpbmdZZWFyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJVbmxvYWRlZERhdGVBbmRUaW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYWxpZGF0aW9uRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmFsaWRpdHlQZXJpb2QiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhbGlkaXR5U3RhcnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYWxpZFVudGlsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYWx1YXRpb25EYXRlVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmFsdWF0aW9uRGF0ZUN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhbHVlQWRkZWRUYXhDbGFpbXNWZXJpZmljYXRpb25EYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWYWx1ZURhdGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhbHVlRGF0ZU9mSW5kZXgiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlcmJhbFJlcG9ydE5lZWRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVyaWZpY2F0aW9uUmVjZWl2ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlcmlmaWNhdGlvblNlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlcmlmaWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXJzaW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXNzZWxSZWdpc3RyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVzdGluZ1NlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlc3RpbmdTZXJ2aWNlQmVnaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlc3RpbmdTZXJ2aWNlRW5kIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWb2x1bnRhcnlUZXJtaW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVm91Y2hlckRhdGVPZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FnZUVmZmVjdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FnZXNFYXJuZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhZ2VQZXJpb2RFbmREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYWdlUGVyaW9kU3RhcnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYWl0aW5nVGltZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2FycmFudHlFeHBpcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXYXliaWxsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWVrRW5kaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWlnaGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWxsTG9nUnVuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaG9sZXNhbGVDb250cmFjdEVmZmVjdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2hvbGVzYWxlQ29udHJhY3RFeHBpcmF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXaWxsQWR2aXNlQXNPZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2l0aGRyYXduRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV2l0aGhlbGREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JrRWZmZWN0aXZlU3RhcnREYXRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JraW5nUGVyaW9kRW5kRGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29ya2luZ1BlcmlvZFN0YXJ0RGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29ya1BlcmlvZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29ya3NDb21wbGV0aW9uRGF0ZVRpbWVBY3R1YWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldvcmtzQ29tcGxldGlvbkRhdGVUaW1lUGxhbm5lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29yc3RUaW1lVG9DYWxsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJZZWFyQmVnaW5uaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJZZWFyRHVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJZZWFyRW5kaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJZZWFyT2ZPY2N1cnJlbmNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJZZWFyVG9EYXRlIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJUcmFuc3BvcnQiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlRyYW5zcG9ydElEIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IlRyYW5zcG9ydE1vZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iVHJhbnNwb3J0TWVhbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkNhcnJpZXJOYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJDYXJyaWVySUQiPgotICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgcmVmPSJJZGVudGlmaWVyIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkN1c3RTaGlwcGluZ0NvbnRyYWN0TnVtIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTZXJ2aWNlTGV2ZWxDb2RlZCIgdHlwZT0iU2VydmljZUxldmVsQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU2VydmljZUxldmVsQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU2hpcHBpbmdJbnN0cnVjdGlvbnMiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRyYW5zcG9ydExlZ0NvZGVkIiB0eXBlPSJUcmFuc3BvcnRMZWdDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJUcmFuc3BvcnRMZWdDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Ikxpc3RPZlRyYW5zcG9ydEVxdWlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJUcmFuc2l0RGlyZWN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJUcmFuc3BvcnROb3RlIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJUcmFuc3BvcnQiIHR5cGU9IlRyYW5zcG9ydCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iVHJhbnNwb3J0TW9kZSI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0TW9kZUNvZGVkIiB0eXBlPSJUcmFuc3BvcnRNb2RlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVHJhbnNwb3J0TW9kZUNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlRyYW5zcG9ydE1vZGUiIHR5cGU9IlRyYW5zcG9ydE1vZGUiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iVHJhbnNwb3J0TW9kZUNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpckNoYXJ0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpckV4cHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpckZyZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpckZyaWVnaHRGb3J3YXJkZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpclRheGkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpclRyYW5zcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXJtZWRGb3JjZXNDb3VyaWVyU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFja2hhdWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCZXN0V2F5LVNoaXBwZXJzT3B0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb29rUG9zdGFsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhYk9yVGF4aSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbW9uSXJyZWd1bGFyQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc29saWRhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyaXplZE9jZWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cmFjdENhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnZlbnRpb25hbE9jZWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lclBpY2t1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJQaWNrdXBPckN1c3RvbWVyc0V4cGVuc2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyaXZlYXdheSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJpdmVhd2F5U2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXVyb3BlYW5PclBhY2lmaWNEaXN0cmlidXRpb25TeXN0ZW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGVkaXRlZFRydWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXhlZFRyYW5zcG9ydEluc3RhbGxhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmx5YXdheSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VvZ3JhcGhpY1JlY2VpdmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VvZ3JhcGhpY1JlY2VpdmluZ09yU2hpcHBpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdlb2dyYXBoaWNTaGlwcGluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW5sYW5kV2F0ZXJUcmFuc3BvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklubGFuZFdhdGVyd2F5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnRlcm1vZGFsLVBpZ2d5YmFjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGVzc1RoYW5UcmFpbGVyTG9hZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9nYWlyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWlsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYXJpdGltZVRyYW5zcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlsaXRhcnlJbnRyYXRoZWF0ZXJBaXJsaWZ0U2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlsaXRhcnlPZmZpY2lhbE1haWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vZGVVbmtub3duIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3RvciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW90b3ItQnVsa0NhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vdG9yLUNvbW1vbkNhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vdG9yLUZsYXRiZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vdG9yLVBhY2thZ2VDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3Rvci1WYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik11dGltb2RhbFRyYW5zcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2NlYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9jZWFuQ29uZmVyZW5jZUNhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9jZWFuTm9uLUNvbmZlcmVuY2VDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQYXJjZWxQb3N0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaXBlbGluZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9vbGVkQWlyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb29sZWRQaWdneWJhY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvb2xlZFJhaWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvb2xlZFRydWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb29sVG9Qb29sIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcml2YXRlQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpdmF0ZVBhcmNlbFNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaXZhdGVWZXNzZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1aWNrdHJhbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhaWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhaWxUcmFuc3BvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvYWRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvYWRUcmFuc3BvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlYU9yQWlyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwcGVyQWdlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwZXJBZ2VudC1UcnVjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBlckFzc29jaWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFja1RyYWluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGVhbXNoaXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBsaWVyVHJ1Y2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRvd2F3YXlTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXNzZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldhdGVyT3JQaXBlbGluZUludGVybW9kYWxNb3ZlbWVudCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iVHJhbnNwb3J0TWVhbnMiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlRyYW5zcG9ydE1lYW5zQ29kZWQiIHR5cGU9IlRyYW5zcG9ydE1lYW5zQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVHJhbnNwb3J0TWVhbnNDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJUcmFuc3BvcnRNZWFucyIgdHlwZT0iVHJhbnNwb3J0TWVhbnMiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iVHJhbnNwb3J0TWVhbnNDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMjBGdElMQ29udGFpbmVyLUNsb3NlZFRvcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMjBGdElMQ29udGFpbmVyLU9wZW5Ub3AiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjQwRnRJTENvbnRhaW5lci1PcGVuVG9wIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0MEZ0SUxDb250YWluZXItQ2xvc2VkVG9wIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJjcmFmdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWlyRnJlaWdodC1CcmVha0J1bGsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpclJpZGVWYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXJnZUNoZW1pY2FsVGFua2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXJnZU9wZW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGV2ZWxSYWlsY2FyRnVsbHlFbmNsb3NlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsZXZlbFJhaWxjYXJGdWxseU9wZW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGV2ZWxSYWlsY2FyU2NyZWVuZWQtTm9Sb29mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxldmVsUmFpbGNhclNjcmVlbmVkLVdpdGhSb29mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb2dpZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm94Y2FyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3hjYXJDdXNoaW9uVW5kZXJGcmFtZU9GIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3hjYXItRGFtYWdlRnJlZUVxdWlwcGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3hjYXItSW5zdWxhdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3hjYXItSW50ZXJpb3JCdWxraGVhZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1bGt0cnVjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVsa1RydWNrQW5kQnVsa1RyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1bGtUcnVja0FuZEV4dGVuZGFibGVHb25kb2xhVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVsa1RydWNrQW5kRXh0ZW5kYWJsZVRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1bGtUcnVja0FuZEdvbmRvbGFUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdWxrVHJ1Y2tBbmRUYW5rVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnVsa1RydWNrQW5kVHJhaWxlcldpdGhPcGVuaW5nRmxvb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJ1cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2Fib29zZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJnb0FuZFBhc3NlbmdlclZlc3NlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FyV2l0aENhcmF2YW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNlbWVudFZlc3NlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhc3NpcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhc3Npcy1Hb29zZW5lY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsb3NlZENvbnRhaW5lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xvc2VkQ29udGFpbmVyLUNvbnRyb2xsZWRUZW1wZXJhdHVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xvc2VkVmFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2FsVmVzc2VsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2FzdGVyQ2hlbWljYWxUYW5rZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvaWwtQ2FyQ292ZXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29pbENhck9wZW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLUFsdW1pbnVtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXItQnVsayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLUNsb3NlZFRvcC1MZW5ndGhVbnNwZWNpZmllZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLUhlYXRlZE9ySW5zdWxhdGVkT3JWZW50aWxhdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXItSGlnaFNpZGVPcGVuVG9wIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXItSW5zdWxhdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXItSW5zdWxhdGVkT3JWZW50aWxhdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXItTG93U2lkZU9wZW5Ub3AiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lck9ubHlWZXNzZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lci1PcGVuLVNpZGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXItT3BlblRvcC1MZW5ndGhVbnNwZWNpZmllZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLVBsYXRmb3JtIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJyZXN0aW5nb25hQ2hhc3NpcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyU2hpcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLVN0ZWVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXItVGFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLVRhbmtDaGVtaWNhbHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lci1UYW5rRm9vZEdyYWRlLUxpcXVpZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLVRhbmtHYXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lci1VcGdyYWRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLVZlbnRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyd2l0aEJhZ0hhbmdlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lcndpdGhGbG9vclNlY3VyaW5nUmluZ3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lcndpdGhGbHVzaERvb3JzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJ3aXRoSGFuZ2FyQmFycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyV2l0aFNtb290aFNpZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJXaXRoV2F2eU9yUmlwcGxlU2lkZXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyb2xsZWRUZW1wZXJhdHVyZVRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRyb2xVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3ZlcmVkQmFyZ2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNydWRlT2lsVGFua2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lckRldGVybWluZWREZWFuc09mVHJhbnNwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lclJhaWxUYW5rZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1dC1JbkhlbHBlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVlcFNlYUNoZW1pY2FsVGFua2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb3VibGUtRHJvcFRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRyb3BCYWNrVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRHJ5QnVsa0NhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkVuZG9mVHJhaW5EZXZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4Y2VwdGlvbmFsVHJhbnNwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGZXJyeSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmlzaGluZ1Zlc3NlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRml4ZWQtUmFja0RvdWJsZURyb3BUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXhlZFJhY2stRmxhdEJlZFRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpeGVkUmFjay1TaW5nbGVEcm9wVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxhdGJlZFNsaWRpbmdUYW5kZW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZsYXRCZWRUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGF0QmVkVHJhaWxlci1SZW1vdmFibGVTaWRlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxhdEJlZFRyYWlsZXJ3aXRoSGVhZGJvYXJkcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxhdEJlZFRyYWlsZXJ3aXRoTm9IZWFkYm9hcmRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGF0Q2FyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGF0Q2FyLUVuZEJ1bGtoZWFkcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxhdGNhcldpdGhQZWRlc3RhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZXplclRydWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGcmVlemVyVHJ1Y2tBbmRJc290aGVybWljVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZXplclRydWNrQW5kUmVmcmlnZXJhdGVkVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZXplclRydWNrQW5kVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZXplclZhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJvemVuRm9vZFRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZ1cm5pdHVyZVRydWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHYXNUYW5rZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdlbmVyYWxDYXJnb1Zlc3NlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR2VuZXJhdG9yU2V0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb25kb2xhQ2FyLUNvdmVyZWRJbnRlcmlvckJ1bGtoZWFkcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29uZG9sYUNhci1PcGVuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb25kb2xhQ292ZXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR3JhaW5jYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHcmF2ZWxWZXNzZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhhbGZIZWlnaHRGbGF0UmFjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhZC1FbmRIZWxwZXJVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIZWFkb2ZUcmFpbkRldmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGlnaEN1YmVWYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhvcHBlckNhci1Db3ZlcmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3BwZXJDYXItQ292ZXJlZFBuZXVtYXRpY0Rpc2NoYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9wcGVyQ2FyLU9wZW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikh5ZHJhbnRDYXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJZGxlckNhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXNvdGhlcm1pY1RydWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJc290aGVybWljVHJ1Y2tBbmRGcmVlemVyVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSXNvdGhlcm1pY1RydWNrQW5kSXNvdGhlcm1pY1RyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Iklzb3RoZXJtaWN0cnVja2FuZHJlZnJpZ2VyYXRlZHRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Iklzb3RoZXJtaWNWYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpcXVlZmllZE5hdHVyYWxHYXNDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMaXF1ZWZpZWRQZXRyb2xldW1HYXNDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2FkT3JVbmxvYWREZXZpY2VPbkVxdWlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jb21vdGl2ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT2NlYW5WZXNzZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9pbFByb2R1Y3RzVGFua2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVuLVRvcE9yRmxhdEJlZFRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9wZW5Ub3BWYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yZUNhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhc3NlbmdlclZlc3NlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGF0cm9sVmVzc2VsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWNrLVVwVHJ1Y2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBpcGVsaW5lIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3dlclBhY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb3RlY3RlZFRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJhaWxCdWxrQ2FyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsQ2FyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsRXhwcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbHJvYWRNYWludGVuYW5jZU9mV2F5Q2FyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsU2lsb1RhbmtlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmFpbFRhbmtlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVhci1FbmRIZWxwZXJVbml0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZyaWdlcmF0ZWRDYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZnJpZ2VyYXRlZENvbnRhaW5lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmcmlnZXJhdGVkVHJ1Y2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZnJpZ2VyYXRlZFRydWNrQW5kRnJlZXplclRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZnJpZ2VyYXRlZFRydWNrQW5kSXNvdGhlcm1pY1RyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZnJpZ2VyYXRlZFRydWNrQW5kVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmcmlnZXJhdGVkVmFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZW1vdmFibGVTaWRlVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVtb3ZhbFRydWNrQW5kVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmlnaWRUcnVja1dpdGhUYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSaWdpZFRydWNrV2l0aFRhbmtBbmRCdWxrVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmlnaWRUcnVja1dpdGhUYW5rQW5kVGFua1RyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvYWRSYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJvYWRTaWxvVGFua2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb2FkVGFua2VyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb2xsT24tUm9sbE9mZlZlc3NlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FkZGxlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxsZXJEZXRlcm1pbmVkTWVhbnNPZlRyYW5zcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZUNhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcFRhbmtlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2luZ2xlLURyb3BUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFja0NhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU1RBSy1SQUsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN0ZWVsUHJvZHVjdHNWZXNzZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhbmtDYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhdXRsaW5lcjI1VG9ubmVXaXRoOTBDdWJpY01ldGVyVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF1dGxpbmVyVHJ1Y2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhdXRsaW5lclRydWNrQW5kRXh0ZW5kYWJsZUdvbmRvbGFUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXV0bGluZXJUcnVja0FuZEV4dGVuZGFibGVUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXV0bGluZXJUcnVja0FuZEdvbmRvbGFUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXV0bGluZXJUcnVja0FuZFJlbW92YWxUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXV0bGluZXJUcnVja0FuZFRyYWlsZXJXaXRoT3BlbmluZ0Zsb29yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXV0bGluZXJUcnVja1dpdGhSZW1vdmFibGVSb29mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXV0bGluZXJUcnVja1dpdGhSZW1vdmFibGVSb29mQW5kRXh0ZW5kYWJsZUdvbmRvbGFUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXV0bGluZXJUcnVja1dpdGhSZW1vdmFibGVSb29mQW5kRXh0ZW5kYWJsZVRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhdXRsaW5lclRydWNrV2l0aFJlbW92YWJsZVJvb2ZBbmRHb25kb2xhVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGF1dGxpbmVyVHJ1Y2tXaXRoUmVtb3ZhYmxlUm9vZkFuZFJlbW92YWxUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYXV0bGluZXJUcnVja1dpdGhSZW1vdmFibGVSb29mYW5kVHJhaWxlcldpdGhPcGVuaW5nRmxvb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRheGkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbGVzY29waW5nVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGltYmVyT3JMb2dDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaXAtVXBBcnRpY3VsYXRlZFRydWNrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaXAtVXB0cnVjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGlwLVVwVHJ1Y2tBbmRFeHRlbmRhYmxlR29uZG9sYVRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpcC1VcFRydWNrQW5kR29uZG9sYVRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRpcC1VcFRydWNrQW5kVHJhaWxlcldpdGhPcGVuaW5nRmxvb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWN0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWlsZXItQm9hdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaWxlci1DYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWlsZXItRHJ5RnJlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaWxlci1FbGVjdHJpY0hlYXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWlsZXItSGVhdGVkT3JJbnN1bGF0ZWRPclZlbnRpbGF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWlsZXItSW5zdWxhdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFpbGVyLUluc3VsYXRlZE9yVmVudGlsYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaWxlci1Ob3RPdGhlcndpc2VTcGVjaWZpZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWlsZXItUG5ldW1hdGljIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFpbGVyLVJlZnJpZ2VyYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaWxlci1UYW5rLUNoZW1pY2FscyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaWxlci1UYW5rLUZvb2RHcmFkZUxpcXVpZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaWxlci1UYW5rLUdhcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaW5pbmdWZXNzZWwiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWluV2l0aDIwT3JNb3JlV2Fnb25zIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFpbldpdGhNb3JlVGhhbk9uZUFuZExlc3NUaGFuMjBXYWdvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWluV2l0aE9uZVdhZ29uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmlsZXZlbFJhaWxjYXIyMEZlZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyaWxldmVsUmFpbGNhclNjcmVlbmVkLUZ1bGx5RW5jbG9zZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyaWxldmVsUmFpbGNhclNjcmVlbmVkLU5vUm9vZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJpbGV2ZWxSYWlsY2FyU2NyZWVuZWQtV2l0aERvb3JzTm9Sb29mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmlsZXZlbFJhaWxjYXJTY3JlZW5lZC1XaXRoUm9vZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1Y2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydWNrQW5kVHJhaWxlcldpdGhPcGVuaW5nRmxvb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydWNrLU9wZW5Ub3AiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydWNrLU9wZW5Ub3BIaWdoU2lkZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1Y2stT3BlblRvcExvd1NpZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydWNrT3JUcmFpbGVyV2l0aFRpbHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydWNrLVZhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1Y2tXaXRoT3BlbmluZ0Zsb29yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcnVja1dpdGhPcGVuaW5nRmxvb3JBbmRFeHRlbmRhYmxlR29uZG9sYVRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydWNrV2l0aE9wZW5pbmdGbG9vckFuZEV4dGVuZGFibGVUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcnVja1dpdGhPcGVuaW5nRmxvb3JBbmRHb25kb2xhVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHVnYW5kT3JQdXNoYm9hdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdExvYWREZXZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmFuLVNwZWNpYWxJbnNpZGVMZW5ndGhXaWR0aE9ySGVpZ2h0UmVxdWlyZW1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXNzZWwtTGFrZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVzc2VsLU9jZWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXNzZWwtT2NlYW4tQ29udGFpbmVyc2hpcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVzc2VsLU9jZWFuLUxhc2giLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlc3NlbC1PY2Vhbi1Sb2xsT24tUm9sbE9mZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29vZGNoaXBjYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXb3JrVmVzc2VsIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IlNlcnZpY2VMZXZlbENvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdWxrQ29tbW9kaXR5VHJhaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZW1pdW1TdXJmYWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaHJlZURheVNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjlBTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWlyQ2FyZ28iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpckVjb25vbXkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXNpbmVzc0NsYXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zaWduZWVCaWxsaW5nU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ291cmllckV4cHJlc3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikdyb3VuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwcmVzc1NlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5U2NoZWR1bGVkTmV4dERheUJ5Q2FydGFnZUFnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeVNjaGVkdWxlZFNlY29uZERheUJ5Q2FydGFnZUFnZW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeVNjaGVkdWxlZFRoaXJkRGF5QnlDYXJ0YWdlQWdlbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5Q29uZmlybWF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWZlcnJlZFNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlbGl2ZXJ5Q29uZmlybWF0aW9uUmV0dXJuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb29yU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlOb3RpZmljYXRpb25Pbmx5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeHBlZGl0ZWRTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm9vZk9mRGVsaXZlcnlXaXRoU2lnbmF0dXJlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXJzdENsYXNzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZFNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cHJlc3NTZXJ2aWNlUGx1cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhY2tpbmdHcm91bmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklhdGEiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cGVkaXRlZFNlcnZpY2VXb3JsZHdpZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkV4cHJlc3NTZXJ2aWNlV29ybGR3aWRlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNZXRybyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTXVsdGl3ZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5leHREYXlBaXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5leHRGbGlnaHRPdXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5leHREYXlIdW5kcmVkV2VpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXh0TW9ybmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90U2VydmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdmVybmlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1hcnlTZXJ2aWNlQXJlYU5leHREYXlCeTEwMzBBTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JpdHlNYWlsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmltYXJ5U2VydmljZUFyZWFOZXh0RGF5Qnk5MzBBTSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpb3JpdHlNYWlsSW5zdXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUE0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1hcnlTZXJ2aWNlQXJlYU5leHREYXlCeU5vb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBPQm94WmlwQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJpbWFyeVNlcnZpY2VBcmVhTmV4dERheUJ5NTAwUE0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaW1hcnlTZXJ2aWNlQXJlYVNlY29uZERheUJ5Tm9vbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFzc2VuZ2VyU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUXVhbGl0eUludGVybW9kYWxIaWdoU3BlZWQ3ME1pbGVzUGVySG91ciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXJJbnRlcm1vZGFsQW5kU3RhY2tTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI2ME1pbGVzUGVySG91clNlcnZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbmlmZXN0RnJlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2lyY3VzVHJhaW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IldvcmtUcmFpbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29tbXV0ZXJTZXJ2aWNlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdXRob3JpemVkUmV0dXJuU2VydmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2FtZURheSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kRGF5QWlyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYXR1cmRheSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kRGF5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFuZGFyZEdyb3VuZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vjb25kRGF5SHVuZHJlZFdlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhbmRhcmRHcm91bmRIdW5kcmVkV2VpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWNvbmRNb3JuaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYXR1cmRheVBpY2t1cCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhbmRhcmRDbGFzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwcmVzcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGlnaFNwZWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb3JtYWxTcGVlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9zdFNlcnZpY2UiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iVHJhbnNwb3J0TGVnQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklubGFuZFRyYW5zcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXRUaGVTdGF0aXN0aWNhbFRlcnJpdG9yeUxpbWl0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmUtQ2FycmlhZ2VUcmFuc3BvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkF0Qm9yZGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBdERlcGFydHVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXREZXN0aW5hdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFpbkNhcnJpYWdlLUZvdXJ0aENhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haW5DYXJyaWFnZS1GaWZ0aENhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haW5DYXJyaWFnZS1TaXh0aENhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haW5DYXJyaWFnZS1TZXZlbnRoQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFpbkNhcnJpYWdlLUVpZ2h0aENhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haW4tQ2FycmlhZ2VUcmFuc3BvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haW5DYXJyaWFnZS1GaXJzdENhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haUNhcnJpYWdlLVNlY29uZENhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1haW5DYXJyaWFnZS1UaGlyZENhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklubGFuZFdhdGVyd2F5VHJhbnNwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyeUNhcnJpZXJBbGxUcmFuc3BvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY29uZFByZS1DYXJyaWFnZVRyYW5zcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlLUFjY2VwdGFuY2VUcmFuc3BvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlY29uZE9uLUNhcnJpYWdlVHJhbnNwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNYWluQ2FycmlhZ2UtTmludGhDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPbi1DYXJyaWFnZVRyYW5zcG9ydCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFpbkNhcnJpYWdlLVRlbnRoQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFpbkNhcnJpYWdlLUVsZXZlbnRoQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWFpbkNhcnJpYWdlLVR3ZWxmdGhDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIxc3RDYXJyaWVyQWZ0ZXJPcmlnaW5DYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIybmRDYXJyaWVyQWZ0ZXJPcmlnaW5DYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSIzcmRDYXJyaWVyQWZ0ZXJPcmlnaW5DYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0dGhDYXJyaWVyQWZ0ZXJPcmlnaW5DYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI1dGhDYXJyaWVyQWZ0ZXJPcmlnaW5DYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI2dGhDYXJyaWVyQWZ0ZXJPcmlnaW5DYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI3dGhDYXJyaWVyQWZ0ZXJPcmlnaW5DYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI4dGhDYXJyaWVyQWZ0ZXJPcmlnaW5DYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI5dGhDYXJyaWVyQWZ0ZXJPcmlnaW5DYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZ2VudHNSb3V0aW5nT3JpZ2luQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3JpZ2luRGVsaXZlcnlDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJERUxZIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYXVsYWdlUmlnaHRzQ2FycmllckFuZEp1bmN0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcmlnaW5Td2l0Y2hDYXJyaWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYXVsYWdlTW92ZW1lbnRDYXJyaWVyQW5kSnVuY3Rpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbkNhcnJpZXJBaXJNb3Rvck9yT2NlYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9yaWdpbkNhcnJpZXJSdWxlMTFTaGlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hpcHBlcnNSb3V0aW5nT3JpZ2luQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSW50ZXJtZWRpYXRlU3dpdGNoQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGFzdENhcnJpZXJJblJvdXRlT25SZXR1cm5Sb3V0ZU1vdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikp1bmN0aW9uU2V0dGxlbWVudENhcnJpZXJGb2xsb3dpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikp1bmN0aW9uU2V0dGxlbWVudENhcnJpZXJQcmVkZWNlc3NvciIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mVHJhbnNwb3J0RXF1aXBtZW50Ij4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJUcmFuc3BvcnRFcXVpcG1lbnQiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZlRyYW5zcG9ydEVxdWlwbWVudCIgdHlwZT0iTGlzdE9mVHJhbnNwb3J0RXF1aXBtZW50Ii8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJUcmFuc3BvcnRFcXVpcG1lbnQiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRXF1aXBtZW50UHJvdmlkZXJDb2RlZCIgdHlwZT0iRXF1aXBtZW50UHJvdmlkZXJDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJFcXVpcG1lbnRQcm92aWRlckNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkVxdWlwbWVudE93bmVyQ29kZWQiIHR5cGU9IkVxdWlwbWVudE93bmVyQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRXF1aXBtZW50T3duZXJDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iRXF1aXBtZW50SUQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkVxdWlwbWVudFNpemVUeXBlQ29kZWQiIHR5cGU9IkVxdWlwbWVudFNpemVUeXBlQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRXF1aXBlbWVudFNpemVUeXBlQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRXF1aXBtZW50U3RhdHVzQ29kZWQiIHR5cGU9IkVxdWlwbWVudFN0YXR1c0NvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkVxdWlwbWVudFN0YXR1c0NvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkZ1bGxJbmRpY2F0b3JDb2RlZCIgdHlwZT0iRnVsbEluZGljYXRvckNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkZ1bGxJbmRpY2F0b3JDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9IkNvbmRpdGlvbnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkVxdWlwbWVudE5vdGUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iTGlzdE9mU2VhbEluZm8iLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ikxpc3RPZkVxdWlwbWVudE1lYXN1cmVtZW50cyI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ikxpc3RPZkRpbWVuc2lvbiIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJUcmFuc3BvcnRFcXVpcG1lbnQiIHR5cGU9IlRyYW5zcG9ydEVxdWlwbWVudCIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJFcXVpcG1lbnRQcm92aWRlckNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGlwcGVyU3VwcGxpZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcnJpZXJTdXBwbGllZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29uc29saWRhdG9yU3VwcGxpZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRlY29uc29saWRhdG9yU3VwcGxpZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRoaXJkUGFydHlTdXBwbGllZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9yd2FyZGVyU3VwcGxpZWRGcm9tQUxlYXNpbmdDb21wYW55Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGb3J3YXJkZXJTdXBwbGllZEZyb21UaGVSYWlsd2F5c1Bvb2wiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iRXF1aXBtZW50T3duZXJDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90Q3VzdG9tZXJPd25lZE9yTGVhc2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxsZXJPd25lZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3VzdG9tZXJPd25lZE9yTGVhc2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmlwTGVhc2VkIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkVxdWlwbWVudFNpemVUeXBlQ29kZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOk5NVE9LRU4iPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3RoZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjIwRnRJbENvbnRhaW5lci1DbG9zZWRUb3AiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjIwRnRJbENvbnRhaW5lci1PcGVuVG9wIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0MEZ0SWxDb250YWluZXItQ2xvc2VkVG9wIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0MEZ0SWxDb250YWluZXItT3BlblRvcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWlyY3JhZnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFpckZyZWlnaHQtQnJlYWtCdWxrIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJSaWRlVmFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmFyZ2VPcGVuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxldmVsUmFpbGNhckZ1bGx5RW5jbG9zZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJpbGV2ZWxSYWlsY2FyRnVsbHlPcGVuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxldmVsUmFpbGNhclNjcmVlbmVkLU5vUm9vZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmlsZXZlbFJhaWxjYXJTY3JlZW5lZFdpdGhSb29mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb2dpZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQm94Y2FyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3hjYXJDdXNoaW9uVW5kZXJGcmFtZU9mIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3hjYXItRGFtYWdlRnJlZUVxdWlwcGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3hjYXItSW5zdWxhdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCb3hjYXItSW50ZXJpb3JCdWxraGVhZHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJveFBhbGxldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2Fib29zZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhc3NpcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2hhc3Npcy1Hb29zZW5lY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNsb3NlZENvbnRhaW5lciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xvc2VkQ29udGFpbmVyLUNvbnRyb2xsZWRUZW1wZXJhdHVyZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2xvc2VkVmFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2lsLUNhckNvdmVyZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvaWxDYXJPcGVuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lci1BbHVtaW51bSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLUJ1bGsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lci1DbG9zZWRUb3AtTGVuZ3RoVW5zcGVjaWZpZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lci1IZWF0ZWRPckluc3VsYXRlZE9yVmVudGlsYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLUhpZ2hTaWRlT3BlblRvcCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVySWMyMEZlZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lckljMzBGZWV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJJYzQwRmVldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLUluc3VsYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLUluc3VsYXRlZE9yVmVudGlsYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLUxvd1NpZGVPcGVuVG9wIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXItT3Blbi1TaWRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLU9wZW5Ub3AtTGVuZ3RoVW5zcGVjaWZpZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lci1QbGF0Zm9ybSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyUmVzdGluZ09uQUNoYXNzaXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lci1TdGVlbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLVRhbmsiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lci1UYW5rLUNoZW1pY2FscyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLVRhbmstRm9vZEdyYWRlLUxpcXVpZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyLVRhbmstR2FzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXItVXBncmFkZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lci1WZW50ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lcldpdGhCYWdIYW5nZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJXaXRoRmxvb3JTZWN1cmluZ1JpbmdzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXJXaXRoRmx1c2hEb29ycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyV2l0aEhhbmdhckJhcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lcldpdGhTbW9vdGhTaWRlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyV2l0aFdhdnlPclJpcHBsZVNpZGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250cm9sbGVkVGVtcGVyYXR1cmVUcmFpbGVyLVJlZWZlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udHJvbFVuaXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvdmVyZWRCYXJnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ3V0LUluSGVscGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEaW1lQ29hdGVkVGFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRG91YmxlLURyb3BUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEcm9wQmFja1RyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkR1YWxUcmFpbGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRW5kT2ZUcmFpbkRldmljZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXBveHlDb2F0ZWRUYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFdXJvUGFsbGV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFeGNoYW5nZWFibGVQYWxsZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpeGVkLVJhY2stRG91YmxlRHJvcFRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZpeGVkLVJhY2stRmxhdC1CZWRUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGaXhlZC1SYWNrLVNpbmdsZS1Ecm9wVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxhdGJlZFNsaWRpbmdUYW5kZW0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZsYXRCZWRUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGF0QmVkVHJhaWxlci1SZW1vdmFibGVTaWRlcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxhdEJlZFRyYWlsZXJXaXRoSGVhZGJvYXJkcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxhdEJlZFRyYWlsZXJXaXRoTm9IZWFkYm9hcmRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGF0Q2FyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGbGF0Q2FyLUVuZEJ1bGtoZWFkcyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRmxhdGNhcldpdGhQZWRlc3RhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJvemVuRm9vZFRyYWlsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdlbmVyYXRvclNldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iR29uZG9sYUNhci1Db3ZlcmVkLUludGVyaW9yQnVsa2hlYWRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHb25kb2xhQ2FyLU9wZW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdvbmRvbGFDb3ZlcmVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIYWxmSGVpZ2h0RmxhdFJhY2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhlYWQtRW5kSGVscGVyVW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGVhZE9mVHJhaW5EZXZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkhpZ2hDdWJlVmFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3BwZXJDYXItQ292ZXJlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG9wcGVyQ2FyLUNvdmVyZWQtUG5ldW1hdGljRGlzY2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3BwZXJDYXItT3BlbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSHlkcmFudC1DYXJ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJZGxlckNhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSU1PMSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSU1PMiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSU1PMyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9hZE9yVW5sb2FkRGV2aWNlT25FcXVpcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxvY29tb3RpdmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vdmFibGVDYXNlLUJldHdlZW4xMC45ME1BbmQxMy43NU0iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1vdmFibGVDYXNlLUJldHdlZW42LjE1TUFuZDcuODJNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3ZhYmxlQ2FzZS1CZXR3ZWVuNy44Mk1BbmQ5LjE1TSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTW92YWJsZUNhc2UtQmV0d2VlbjkuMTVNQW5kMTAuOTBNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3ZhYmxlQ2FzZS1MZXNzVGhhbjYuMTVNIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOb253b3JraW5nUmVlZmVyQ29udGFpbmVyMjBGdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9ud29ya2luZ1JlZWZlckNvbnRhaW5lcjQwRnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vbldvcmtpbmdSZWZyaWdlcmF0ZWRPclJlZWZlckNvbnRhaW5lcjMwRnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9jZWFuVmVzc2VsLUJyZWFrQnVsayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3Blbi1Ub3BPckZsYXRiZWRUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPcGVuVG9wVmFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWNrLVVwVHJ1Y2siLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBvd2VyUGFjayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlc3N1cml6ZWRUYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcm90ZWN0ZWRUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlsQ2FyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSYWlscm9hZE1haW50ZW5hbmNlT2ZXYXlDYXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlYXItRW5kSGVscGVyVW5pdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmcmlnZXJhdGVkQ29udGFpbmVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZyaWdlcmF0ZWRPclJlZWZlckNhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmcmlnZXJhdGVkVGFuayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmcmlnZXJhdGVkVGFuazIwRmVldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmcmlnZXJhdGVkVGFuazMwRmVldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmcmlnZXJhdGVkVGFuazQwRmVldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVmcmlnZXJhdGVkVGFua0ljMjBGZWV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZWZyaWdlcmF0ZWRUYW5rSWM0MEZlZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbW92YWJsZVNpZGVUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb2FkcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTYWRkbGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNjYW5kaW5hdmlhblBhbGxldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VtaS1SZWZyaWdlcmF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbWktVHJhaWxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VydmljZUNhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2luZ2xlLURyb3BUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFja0NhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhaW5sZXNzU3RlZWxUYW5rIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdGFrLVJhayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFua0NhciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFua0NvbnRhaW5lcjIwRmVldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFua0NvbnRhaW5lcjMwRmVldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFua0NvbnRhaW5lcjQwRmVldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGFua0NvbnRhaW5lckljMjBGZWV0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUYW5rQ29udGFpbmVySWMzMEZlZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRhbmtDb250YWluZXJJYzQwRmVldCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGVsZXNjb3BpbmdUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZW1wZXJhdHVyZUNvbnRyb2xsZWRDb250YWluZXIyMEZ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZW1wZXJhdHVyZUNvbnRyb2xsZWRDb250YWluZXIzMEZ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUZW1wZXJhdHVyZUNvbnRyb2xsZWRDb250YWluZXI0MEZ0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUb3RlYmluIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFjdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFpbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFpbGVyLUJvYXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWlsZXItQ2FyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFpbGVyLURyeUZyZWlnaHQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWlsZXItRWxlY3RyaWNIZWF0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFpbGVyLUhlYXRlZE9ySW5zdWxhdGVkT3JWZW50aWxhdGVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFpbGVyLUluc3VsYXRlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaWxlci1JbnN1bGF0ZWRPclZlbnRpbGF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWlsZXItTm90T3RoZXJ3aXNlU3BlY2lmaWVkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFpbGVyLVBuZXVtYXRpYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJhaWxlci1SZWZyaWdlcmF0ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWlsZXItVGFuay1DaGVtaWNhbHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYWlsZXItVGFuay1Gb29kR3JhZGUtTGlxdWlkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmFpbGVyLVRhbmstR2FzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUcmlsZXZlbFJhaWxjYXIyMEZlZXQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyaWxldmVsUmFpbGNhclNjcmVlbmVkLUZ1bGx5RW5jbG9zZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyaWxldmVsUmFpbGNhclNjcmVlbmVkLU5vUm9vZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJpbGV2ZWxSYWlsY2FyU2NyZWVuZWQtV2l0aERvb3JzLU5vUm9vZiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJpbGV2ZWxSYWlsY2FyU2NyZWVuZWQtV2l0aFJvb2YiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydWNrLU9wZW5Ub3AiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydWNrLU9wZW5Ub3BIaWdoU2lkZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVHJ1Y2stT3BlblRvcExvd1NpZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRydWNrLVZhbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5pdExvYWREZXZpY2UiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZhbi1TcGVjaWFsSW5zaWRlTGVuZ3RoLVdpZHRoT3JIZWlnaHRSZXF1aXJlbWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlc3NlbC1MYWtlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXNzZWwtT2NlYW4iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlc3NlbC1PY2Vhbi1Db250YWluZXJzaGlwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWZXNzZWwtT2NlYW4tTGFzaCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVmVzc2VsLU9jZWFuLVJvbGxvbi1Sb2xsb2ZmIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkVxdWlwbWVudFN0YXR1c0NvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250aW5lbnRhbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXhwb3J0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbXBvcnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlbWFpbk9uQm9hcmQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaWZ0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zaGlwbWVudCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2hvcnRsYW5kZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik92ZXJsYW5kZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRvbWVzdGljIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQb3NpdGlvbmluZyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlZGVsaXZlcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcGFpciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVsb2FkZXIiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iRnVsbEluZGljYXRvckNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJGdWxsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbXB0eSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFydGlhbCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQ29uZGl0aW9ucyI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJSZWZyaWdlcmF0aW9uT24iIHR5cGU9InhjYmxCb29sZWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJSZXNpZHVlIiB0eXBlPSJ4Y2JsQm9vbGVhbiIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iTGlzdE9mQ29uZGl0aW9ucyI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ikxpc3RPZkRpbWVuc2lvbiIvPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDb25kaXRpb25zIiB0eXBlPSJDb25kaXRpb25zIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZTZWFsSW5mbyI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iU2VhbEluZm8iLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZlNlYWxJbmZvIiB0eXBlPSJMaXN0T2ZTZWFsSW5mbyIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iU2VhbEluZm8iPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlNlYWxOdW1iZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iU2VhbElzc3VlciIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJTZWFsU3RhdHVzRGVzY3JpcHRpb24iLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlNlYWxJbmZvIiB0eXBlPSJTZWFsSW5mbyIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iU2VhbElzc3VlciI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iU2VhbElzc3VlckNvZGVkIiB0eXBlPSJTZWFsSXNzdWVyQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU2VhbElzc3VlckNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlNlYWxJc3N1ZXIiIHR5cGU9IlNlYWxJc3N1ZXIiLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iU2VhbElzc3VlckNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb25zb2xpZGF0b3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlVua25vd24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlF1YXJhbnRpbmVBZ2VuY3kiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhcnJpZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkN1c3RvbXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBwZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlcm1pbmFsT3BlcmF0b3IiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlNlYWxTdGF0dXNEZXNjcmlwdGlvbiI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTZWFsU3RhdHVzQ29kZWQiIHR5cGU9IlNlYWxTdGF0dXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJTZWFsU3RhdHVzQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iU2VhbFN0YXR1c0luZm8iIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlNlYWxTdGF0dXNEZXNjcmlwdGlvbiIgdHlwZT0iU2VhbFN0YXR1c0Rlc2NyaXB0aW9uIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9IlNlYWxTdGF0dXNDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQnJva2VuIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEYW1hZ2VkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJblJpZ2h0Q29uZGl0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNaXNzaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXBsYWNlZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVGhlRWxlY3Ryb25pY1NlYWxJc0ZhdWx0eSIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iVHJhbnNpdERpcmVjdGlvbiI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVHJhbnNpdERpcmVjdGlvbkNvZGVkIiB0eXBlPSJUcmFuc2l0RGlyZWN0aW9uQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVHJhbnNpdERpcmVjdGlvbkNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRyYW5zaXRUaW1lUXVhbGlmaWVyQ29kZWQiIHR5cGU9IlRyYW5zaXRUaW1lUXVhbGlmaWVyQ29kZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVHJhbnNpdFRpbWVRdWFsaWZpZXJDb2RlZE90aGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJUcmFuc2l0VGltZSIgdHlwZT0ieHNkOmRlY2ltYWwiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlRyYW5zaXREaXJlY3Rpb24iIHR5cGU9IlRyYW5zaXREaXJlY3Rpb24iLz4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iVHJhbnNpdERpcmVjdGlvbkNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCdXllclRvU2VsbGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZWxsZXJUb0J1eWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTdWJjb250cmFjdG9yVG9TZWxsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGxlclRvRHJvcFNoaXBEZXNpZ25hdGVkTG9jYXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlbGxlclRvRnJlaWdodEZvcndhcmRlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2VsbGVyVG9TdWJjb250cmFjdG9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNb3RoZXJWZXNzZWxUb0xpZ2h0ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkxpZ2h0ZXJUb01vdGhlclZlc3NlbCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJUcmFuc2l0VGltZVF1YWxpZmllckNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBaXJIb3VycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWlyRGF5cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FsZW5kYXJEYXlzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYWxlbmRhcldlZWtzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb3VycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3VyZmFjZURheXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cmZhY2VIb3VycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV29ya2luZ0RheXMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjVEYXlXb3JrV2VlayIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTGlzdE9mU2hpcFRvU3ViSW5mb3JtYXRpb24iPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz0idW5ib3VuZGVkIiByZWY9IlNoaXBUb1N1YkluZm9ybWF0aW9uIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMaXN0T2ZTaGlwVG9TdWJJbmZvcm1hdGlvbiIgdHlwZT0iTGlzdE9mU2hpcFRvU3ViSW5mb3JtYXRpb24iLz4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlNoaXBUb1N1YkluZm9ybWF0aW9uIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTaGlwVG9TdWJMb2NhdGlvbiI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IkxvY2F0aW9uIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTaGlwVG9TdWJRdWFudGl0eSI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IlF1YW50aXR5Ii8+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlN1YkxvY2F0aW9uSXRlbVBhY2thZ2luZ1JlZmVyZW5jZSI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9Ikl0ZW1QYWNrYWdpbmdSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iU2hpcFRvU3ViSW5mb3JtYXRpb24iIHR5cGU9IlNoaXBUb1N1YkluZm9ybWF0aW9uIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJJdGVtUGFja2FnaW5nUmVmZXJlbmNlIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9InVuYm91bmRlZCIgcmVmPSJQYWNrYWdlUmVmZXJlbmNlIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJdGVtUGFja2FnaW5nUmVmZXJlbmNlIiB0eXBlPSJJdGVtUGFja2FnaW5nUmVmZXJlbmNlIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJQYWNrYWdlUmVmZXJlbmNlIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iUXVhbnRpdHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQYWNrYWdlSURSZWZlcmVuY2UiIHR5cGU9InhzZDppbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIHJlZj0iUGFja2FnZVJlZmVyZW5jZSIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUGFja2FnZVJlZmVyZW5jZSIgdHlwZT0iUGFja2FnZVJlZmVyZW5jZSIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iVGVybXNPZkRlbGl2ZXJ5Ij4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJUZXJtc09mRGVsaXZlcnlGdW5jdGlvbkNvZGVkIiB0eXBlPSJUZXJtc09mRGVsaXZlcnlGdW5jdGlvbkNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRlcm1zT2ZEZWxpdmVyeUZ1bmN0aW9uQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVHJhbnNwb3J0VGVybXNDb2RlZCIgdHlwZT0iVHJhbnNwb3J0VGVybXNDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJUcmFuc3BvcnRUZXJtc0NvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTaGlwbWVudE1ldGhvZE9mUGF5bWVudENvZGVkIiB0eXBlPSJTaGlwbWVudE1ldGhvZE9mUGF5bWVudENvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlNoaXBtZW50TWV0aG9kT2ZQYXltZW50Q29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgcmVmPSJMb2NhdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iVGVybXNPZkRlbGl2ZXJ5RGVzY3JpcHRpb24iIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlRyYW5zcG9ydERlc2NyaXB0aW9uIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJSaXNrT2ZMb3NzQ29kZWQiIHR5cGU9IlJpc2tPZkxvc3NDb2RlIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJSaXNrT2ZMb3NzQ29kZWRPdGhlciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iUmlza09mTG9zc0Rlc2NyaXB0aW9uIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJUZXJtc09mRGVsaXZlcnkiIHR5cGU9IlRlcm1zT2ZEZWxpdmVyeSIvPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJUZXJtc09mRGVsaXZlcnlGdW5jdGlvbkNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmljZUNvbmRpdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVzcGF0Y2hDb25kaXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByaWNlYW5kRGVzcGF0Y2hDb25kaXRpb24iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbGxlY3RlZEJ5Q3VzdG9tZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRyYW5zcG9ydENvbmRpdGlvbiIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGVsaXZlcnlDb25kaXRpb24iLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iVHJhbnNwb3J0VGVybXNDb2RlIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPdGhlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRXgtV29ya3MiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWUtQ2FycmllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRnJlZUFsb25nc2lkZVNoaXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyZWVPbkJvYXJkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb3N0QW5kRnJlaWdodCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29zdC1JbnN1cmFuY2VBbmRGcmVpZ2h0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJyaWFnZVBhaWRUbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FycmlhZ2UtSW5zdXJhbmNlUGFpZFRvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyZWRBdEZyb250aWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyZWRFeC1TaGlwIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyZWRFeC1RdWF5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyZWREdXR5VW5wYWlkIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWxpdmVyZWREdXR5UGFpZCIvPgotICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJTaGlwbWVudE1ldGhvZE9mUGF5bWVudENvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBY2NvdW50Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBZHZhbmNlQ29sbGVjdCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQWR2YW5jZVByZXBhaWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNhc2hPbkRlbGl2ZXJ5U2VydmljZUNoYXJnZVBhaWRCeUNvbnNpZ25lZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ2FzaE9uRGVsaXZlcnlTZXJ2aWNlQ2hhcmdlUGFpZEJ5Q29uc2lnbm9yIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsZWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb2xsZWN0RnJlaWdodENyZWRpdGVkVG9QYXltZW50Q3VzdG9tZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbGxlY3RPbkRlbGl2ZXJ5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDdXN0b21lclBpY2stVXBPckJhY2toYXVsIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEZWZpbmVkQnlCdXllckFuZFNlbGxlciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRm9iUG9ydE9mQ2FsbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGFsZlByZXBhaWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkluZm9ybWF0aW9uQ29weS1Ob1BheW1lbnREdWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikluc3VyYW5jZUNvc3RzUGFpZEJ5Q29uc2lnbmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJbnN1cmFuY2VDb3N0c1BhaWRCeUNvbnNpZ25vciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWl4ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vblJldmVudWUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdFNwZWNpZmllZCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFpZEJ5QnV5ZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhaWRCeVN1cHBsaWVyT3JTZWxsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBheWFibGVFbHNld2hlcmUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBlckNvbnRyYWN0Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQaWNrdXAiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXBhaWRBbmRTdW1tYXJ5QmlsbCIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlcGFpZEJ1dENoYXJnZWRUb0N1c3RvbWVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQcmVwYWlkQnlQcm9jZXNzb3IiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXBhaWQtQnlTZWxsZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByZXBhaWRMb2NhbENvbGxlY3RPdXRzdGF0ZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUHJlcGFpZE9ubHkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldHVybkNvbnRhaW5lckZyZWlnaHRGcmVlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXR1cm5Db250YWluZXJGcmVpZ2h0UGFpZEJ5Q3VzdG9tZXIiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJldHVybkNvbnRhaW5lckZyZWlnaHRQYWlkQnlTdXBwbGllciIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUnVsZTExU2hpcG1lbnQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNlcnZpY2VGcmVpZ2h0LU5vQ2hhcmdlIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUaGlyZFBhcnR5UGF5Ii8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJXZWlnaHRDb25kaXRpb24iLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iUmlza09mTG9zc0NvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSaXNrT2ZMb3NzSW5UcmFuc2l0VG9EZXN0aW5hdGlvbklzQnV5ZXJzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSaXNrT2ZMb3NzSW5UcmFuc2l0VG9GcmVpZ2h0RXF1YWxpemF0aW9uUG9pbnRJc1NlbGxlcnMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJpc2tPZkxvc3NJblRyYW5zaXRUb1Bvb2xQb2ludElzU2VsbGVycyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmlza09mTG9zc0luVHJhbnNpdFRvRGVzdGluYXRpb25Jc1NlbGxlcnMiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkNhcmdvQ2xhc3NpZmljYXRpb24iPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iTmF0dXJlT2ZHb29kcyI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9IklkZW50aWZpZXIiLz4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iT3BlcmF0aW9uYWxUeXBlQ29kZWQiIHR5cGU9Ik9wZXJhdGlvbmFsVHlwZUNvZGUiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ik9wZXJhdGlvbmFsVHlwZUNvZGVkT3RoZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlR5cGVPZkNhcmdvIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDYXJnb0NsYXNzaWZpY2F0aW9uIiB0eXBlPSJDYXJnb0NsYXNzaWZpY2F0aW9uIi8+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik9wZXJhdGlvbmFsVHlwZUNvZGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEb2N1bWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ikxvd1ZhbHVlTm9uLUR1dGlhYmxlQ29uc2lnbm1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb3dWYWx1ZUR1dGlhYmxlQ29uc2lnbm1lbnRzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIaWdoVmFsdWVDb25zaWdubWVudHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik90aGVyTm9uLUNvbnRhaW5lcml6ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZlaGljbGVzIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSb2xsLU9uUm9sbC1PZmYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBhbGxldGl6ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lcml6ZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJyZWFrYnVsayIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSGF6YXJkb3VzQ2FyZ28iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdlbmVyYWxDYXJnbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTGlxdWlkQ2FyZ28iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRlbXBlcmF0dXJlQ29udHJvbGxlZENhcmdvIi8+Ci0gICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbnZpcm9ubWVudGFsUG9sbHV0YW50Q2FyZ28iLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5vdC1IYXphcmRvdXNDYXJnbyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRGlwbG9tYXRpYyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlsaXRhcnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9ibm94aW91cyIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT3V0T2ZHYXVnZSIvPgotICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSG91c2Vob2xkR29vZHNBbmRQZXJzb25hbEVmZmVjdHMiLz4KLSAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkZyb3plbkNhcmdvIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJSb3VuZFRyaXBJbmZvcm1hdGlvbiI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJJbW11dGFibGUiIHR5cGU9InhjYmxCb29sZWFuIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJSZUxpbmsiIHR5cGU9InhzZDphbnlVUkkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlN1cHBsaWVyU2hvcHBpbmdDYXJ0SUQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IlJvdW5kVHJpcE9yZGVyIiB0eXBlPSJ4Y2JsQm9vbGVhbiIgZml4ZWQ9InRydWUiLz4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUm91bmRUcmlwSW5mb3JtYXRpb24iIHR5cGU9IlJvdW5kVHJpcEluZm9ybWF0aW9uIi8+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJMaXN0T2ZBY2NvdW50QXNzaWdubWVudCI+Ci0gICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHJlZj0iQWNjb3VudEFzc2lnbm1lbnQiLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9Ikxpc3RPZkFjY291bnRBc3NpZ25tZW50IiB0eXBlPSJMaXN0T2ZBY2NvdW50QXNzaWdubWVudCIvPgotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iQWNjb3VudEFzc2lnbm1lbnQiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkFjY291bnRBc3NpZ25tZW50SUQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJEaXN0cmlidXRpb25QZXJjZW50YWdlIiB0eXBlPSJ4c2Q6ZGVjaW1hbCIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iR0xBY2NvdW50IiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJDb3N0Q2VudGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJBY2NvdW50QXNzaWdubWVudE9yZGVyTnVtYmVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJPcGVyYXRpb25OdW1iZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IlNhbGVzT3JkZXJSZWZlcmVuY2UiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkJ1c2luZXNzQXJlYSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iQ29udHJvbGxpbmdBcmVhIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJQcm9maXRDZW50ZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IldvcmtCcmVha2Rvd25TdHJ1Y3R1cmUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9Ik5ldHdvcmsiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkZpeGVkQXNzZXQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkZpeGVkQXNzZXRTdWIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkZ1bmRzQ2VudGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJGdW5kIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiBuYW1lPSJDb21taXRtZW50SXRlbSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG1pbk9jY3Vycz0iMCIgbmFtZT0iRnVuY3Rpb25hbEFyZWEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtaW5PY2N1cnM9IjAiIG5hbWU9IkdlbmVyaWNBY2NvdW50aW5nIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWluT2NjdXJzPSIwIiByZWY9Ikxpc3RPZk5hbWVWYWx1ZVNldCIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQWNjb3VudEFzc2lnbm1lbnQiIHR5cGU9IkFjY291bnRBc3NpZ25tZW50Ii8+Ci0gICAgPCEtLSBTT1ggZm9ybWF0IGRhdGF0eXBlcyB3aGVyZSB0aGV5IGRpZmVyIGZyb20gc3RhbmRhcmQgWFNETCBkYXRhdHlwZXMtLT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0ieGNibERhdGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgPHhzZDpwYXR0ZXJuIHZhbHVlPSJbMC05XXs0fSgoKDAxfDAzfDA1fDA3fDA4fDEwfDEyKSgoMFsxLTldKXwoWzEtMl1bMC05XSl8KDNbMC0xXSkpKXwoKDA0fDA2fDA5fDExKSgoMFsxLTldKXwoWzEtMl1bMC05XSl8MzApKXwoKDAyKSgoMFsxLTldKXwoWzEtMl1bMC05XSkpKSkiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0ieGNibFRpbWUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgPHhzZDpwYXR0ZXJuIHZhbHVlPSIoKChbMC0xXVswLTldKXwoMlswLTNdKSkoOihbMC01XVswLTldKSl7Mn0oKFwrfC0pKChbMC0xXVswLTldKXwoMlswLTNdKSk6KFswLTVdWzAtOV0pKT8pIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9InhjYmxEYXRldGltZSI+Ci0gICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICA8eHNkOnBhdHRlcm4gdmFsdWU9IlswLTldezR9KCgoMDF8MDN8MDV8MDd8MDh8MTB8MTIpKCgwWzEtOV0pfChbMS0yXVswLTldKXwoM1swLTFdKSkpfCgoMDR8MDZ8MDl8MTEpKCgwWzEtOV0pfChbMS0yXVswLTldKXwzMCkpfCgoMDIpKCgwWzEtOV0pfChbMS0yXVswLTldKSkpKVQoKChbMC0xXVswLTldKXwoMlswLTNdKSkoOihbMC01XVswLTldKSl7Mn0oKFwrfC0pKChbMC0xXVswLTldKXwoMlswLTNdKSk6KFswLTVdWzAtOV0pKT8pIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9InhjYmxCb29sZWFuIj4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Ym9vbGVhbiI+Ci0gICAgICAgICAgICA8eHNkOnBhdHRlcm4gdmFsdWU9InRydWV8ZmFsc2UiLz4KLSAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0ieGNibEZsb2F0Ij4KLSAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6ZmxvYXQiPgotICAgICAgICAgICAgPHhzZDpwYXR0ZXJuIHZhbHVlPSIoXCt8LSk/WzAtOV0qXC4/WzAtOV0qKEV8ZSk/WzAtOV0qIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgPHhzZDpzaW1wbGVUeXBlIG5hbWU9InhjYmxEb3VibGUiPgotICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpkb3VibGUiPgotICAgICAgICAgICAgPHhzZDpwYXR0ZXJuIHZhbHVlPSIoXCt8LSk/WzAtOV0qXC4/WzAtOV0qKEV8ZSk/WzAtOV0qIi8+Ci0gICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgIDwveHNkOnNpbXBsZVR5cGU+Ci08L3hzZDpzY2hlbWE+CmRpZmYgLS1naXQgYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS93bGkvYW5udWl0eW5ldF9uZXcueHNkIGIvdjIvdGVzdC9jYXNlcy9zY2hlbWEvd2xpL2FubnVpdHluZXRfbmV3LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYyOTliNy4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS93bGkvYW5udWl0eW5ldF9uZXcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTMzNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiID8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuYW5udWl0eW5ldC5jb20vbmFtZXNwYWNlL3Byb2ZpbGVzIgotCi0gIHhtbG5zPSJodHRwOi8vd3d3LmFubnVpdHluZXQuY29tL25hbWVzcGFjZS9wcm9maWxlcyIKLSAgeG1sbnM6Y3ZvZT0iaHR0cDovL3d3dy5jb250aXZvLmNvbS94bWxucy8yMDAyL2VucmljaG1lbnQiCi0gIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotCi0gIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iVHlwZTIiPgotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQ09ERSI+Ci0gICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgPHhzZDpsZW5ndGggdmFsdWU9IjIiLz4KLSAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQkVHSU5fREFURSIgbWluT2NjdXJzPSIwIiB0eXBlPSJ4c2Q6ZGF0ZSIvPgotICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkVORF9EQVRFIiBtaW5PY2N1cnM9IjAiIHR5cGU9InhzZDpkYXRlIi8+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVEVSTV9EQVRFIiBtaW5PY2N1cnM9IjAiIHR5cGU9InhzZDpkYXRlIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0gIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iVHlwZTEiPgotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSUQiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICA8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iQFBBUlRZX0xJTktfSUQiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgIDwveHNkOmV4dGVuc2lvbj4KLSAgICAgICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0gIDwveHNkOmNvbXBsZXhUeXBlPgotCi0gIDx4c2Q6ZWxlbWVudCBuYW1lPSJFTlZFTE9QRSI+Ci0gICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJIRUFERVIiPgotICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iU0VORElOR19QQVJUWV9JRCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUkVDRUlWSU5HX1BBUlRZX0lEIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJUUkFOU0FDVElPTl9DT1VOVCIgdHlwZT0ieHNkOmludGVnZXIiLz4KLSAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlRFU1QiIG1pbk9jY3Vycz0iMCIgZGVmYXVsdD0iMCIgdHlwZT0ieHNkOmJvb2xlYW4iLz4KLSAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVFJBTlNBQ1RJT04iIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkhFQURFUiI+Ci0gICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJFRkZFQ1RJVkVfREFURSIgbWluT2NjdXJzPSIwIiB0eXBlPSJ4c2Q6ZGF0ZSIvPgotICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQVNfT0ZfREFURVRJTUUiIG1pbk9jY3Vycz0iMCIgdHlwZT0ieHNkOmRhdGVUaW1lIi8+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJBQ1RJVklUWSI+Ci0gICAgICAgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQUREIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1PRElGWSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJERUxFVEUiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJUUkFOU0FDVElPTl9JRCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUEFSVFlfSUQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlRSQU5TQUNUSU9OX0lEIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJPVVRJTkciPgotICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iU1RFUCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUkVDRUlWSU5HX1BBUlRZX0lEIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTRU5ESU5HX1BBUlRZX0lEIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJPUkRFUiIgdHlwZT0ieHNkOmludGVnZXIiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJST1VUSU5HX0hJU1RPUlkiPgotICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iU1RFUCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUkVDRUlWSU5HX1BBUlRZX0lEIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTRU5ESU5HX1BBUlRZX0lEIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTRU5EX0RBVEVUSU1FIiB0eXBlPSJ4c2Q6ZGF0ZVRpbWUiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJFQ0VJVkVfREFURVRJTUUiIG1pbk9jY3Vycz0iMCIgdHlwZT0ieHNkOmRhdGVUaW1lIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVFJBTlNBQ1RJT05fVFlQRSI+Ci0gICAgICAgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQlVTSU5FU1NfVU5JVF9ERUZJTklUSU9OIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSRVFVRVNUIj4KLSAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkJVU0lORVNTX1VOSVRTIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQlVTSU5FU1NfVU5JVCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSUQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkBQQVJUWV9MSU5LX0lEIiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmV4dGVuc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJBQ1RJVkUiIG1pbk9jY3Vycz0iMCIgdHlwZT0ieHNkOmJvb2xlYW4iLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IklEUyIgdHlwZT0iVHlwZTEiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5BTUUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkNMQVNTIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJUSU4iIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkFDQ09VTlRfTElOS1MiIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJBQ0NPVU5UX0xJTksiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IklEIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJAUEFSVFlfTElOS19JRCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkNPTlRBQ1RfTElOS1MiIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDT05UQUNUX0xJTksiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IklEIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJAUEFSVFlfTElOS19JRCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUkVTUE9OU0lCSUxJVFkiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVVNFUlMiIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJVU0VSIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJRFMiIHR5cGU9IlR5cGUxIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJBQ1RJVkUiIG1pbk9jY3Vycz0iMCIgdHlwZT0ieHNkOmJvb2xlYW4iLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlRJTiIgbWluT2NjdXJzPSIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJVU0VSX0xPR09OX0lEIiBtaW5PY2N1cnM9IjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlBBU1NXT1JEIiBtaW5PY2N1cnM9IjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkxBU1RfTkFNRSIgbWluT2NjdXJzPSIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJGSVJTVF9OQU1FIiBtaW5PY2N1cnM9IjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik1JRERMRV9JTklUSUFMIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6bWF4TGVuZ3RoIHZhbHVlPSIxIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iU0FMVVRBVElPTl9DRCIgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNciIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNcnMiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTXMiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTWlzcyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEciIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSZXYiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQXR0eSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlNVRkZJWF9DRCIgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJKciIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTciIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJSSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJJSUkiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSVYiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTUQiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJFTUFJTCIgbWluT2NjdXJzPSIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQSE9ORV9OVU1CRVIiIG1pbk9jY3Vycz0iMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTElDRU5TRVMiIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJMSUNFTlNFIiBtYXhPY2N1cnM9IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVFlQRSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRklYRUQiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVkFSSUFCTEUiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTVEFURVMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iRVhDRVBUSU9OIiBtaW5PY2N1cnM9IjAiIGRlZmF1bHQ9IjAiIHR5cGU9InhzZDpib29sZWFuIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTVEFURSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgdHlwZT0iVHlwZTIiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkFQUE9JTlRNRU5UUyIgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkFQUE9JTlRNRU5UIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTVEFUVVMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBFTkRJTkciLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVBQT0lOVEVEIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRFUk1JTkFURUQiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJORVdfQlVTSU5FU1MiIHR5cGU9InhzZDpib29sZWFuIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDT01NSVNTSU9OUyIgdHlwZT0ieHNkOmJvb2xlYW4iLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IldSSVRJTkdfQ09NUEFOWSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJRCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iQFBBUlRZX0xJTktfSUQiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkxJTkVTX09GX0JVU0lORVNTIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTElORV9PRl9CVVNJTkVTUyIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklORElWSURVQUxfTElGRSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJWQVJJQUJMRV9BTk5VSVRJRVMiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRklYRURfQU5OVUlUSUVTIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdST1VQX0xJRkUiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVkFSSUFCTEVfTElGRSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBTEwiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iU1RBVEVTIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkVYQ0VQVElPTiIgbWluT2NjdXJzPSIwIiBkZWZhdWx0PSIwIiB0eXBlPSJ4c2Q6Ym9vbGVhbiIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iU1RBVEUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHR5cGU9IlR5cGUyIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVVNFUl9ST0xFUyIgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlVTRVJfUk9MRSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSURTIiB0eXBlPSJUeXBlMSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iREVTQ1JJUFRJT04iIG1pbk9jY3Vycz0iMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkFDQ09VTlRTIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQUNDT1VOVCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSURTIiB0eXBlPSJUeXBlMSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQUNDT1VOVF9OQU1FIiBtaW5PY2N1cnM9IjAiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik9XTkVSX05BTUUiIG1pbk9jY3Vycz0iMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQUJBX05VTUJFUiIgbWluT2NjdXJzPSIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJBQ0NPVU5UX05VTUJFUiIgbWluT2NjdXJzPSIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQVVJQT1NFIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBSRU1JVU0gQ09MTEVDVElPTiIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDT01NSVNTSU9OIFJFQ0lFUFRTIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkNPTlRBQ1RTIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQ09OVEFDVCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSURTIiB0eXBlPSJUeXBlMSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTkFNRSIgbWluT2NjdXJzPSIwIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQSE9ORV9OVU1CRVIiIG1pbk9jY3Vycz0iMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iRU1BSUwiIG1pbk9jY3Vycz0iMCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkJVU0lORVNTX1VOSVRfQVZBSUxBQklMSVRZIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQlVTSU5FU1NfVU5JVF9MSU5LUyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJCVVNJTkVTU19VTklUX0xJTksiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IklEIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJAUEFSVFlfTElOS19JRCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQVZBSUxBQklMSVRZIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlBST0RVQ1RTIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUFJPRFVDVF9MSU5LUyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQUk9EVUNUX0xJTksiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IklEIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJAUEFSVFlfTElOS19JRCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iU1RBVEVTIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iRVhDRVBUSU9OIiBtaW5PY2N1cnM9IjAiIGRlZmF1bHQ9IjAiIHR5cGU9InhzZDpib29sZWFuIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTVEFURSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgdHlwZT0iVHlwZTIiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUFJPRFVDVFNfUExBTlMiIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQUk9EVUNUX0xJTktTIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlBST0RVQ1RfTElOSyIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSUQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkBQQVJUWV9MSU5LX0lEIiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmV4dGVuc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQTEFOX0xJTktTIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUExBTl9MSU5LIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJRCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iQFBBUlRZX0xJTktfSUQiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlNUQVRFUyIgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkVYQ0VQVElPTiIgbWluT2NjdXJzPSIwIiBkZWZhdWx0PSIwIiB0eXBlPSJ4c2Q6Ym9vbGVhbiIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iU1RBVEUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHR5cGU9IlR5cGUyIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQUk9EVUNUU19SSURFUlMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUFJPRFVDVF9MSU5LUyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQUk9EVUNUX0xJTksiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IklEIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJAUEFSVFlfTElOS19JRCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUklERVJfTElOS1MiIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSSURFUl9MSU5LIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJRCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iQFBBUlRZX0xJTktfSUQiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkNPTkZJR1VSQVRJT05fTElOS1MiIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDT05GSUdVUkFUSU9OX0xJTksiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IklEIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJAUEFSVFlfTElOS19JRCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iU1RBVEVTIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iRVhDRVBUSU9OIiBtaW5PY2N1cnM9IjAiIGRlZmF1bHQ9IjAiIHR5cGU9InhzZDpib29sZWFuIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTVEFURSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgdHlwZT0iVHlwZTIiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik9QVElPTkFMSVRZIiBtaW5PY2N1cnM9IjAiIGRlZmF1bHQ9Ik9QVElPTkFMIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSRVFVSVJFRCIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPUFRJT05BTCIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQUk9EVUNUU19QTEFOU19SSURFUlMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUFJPRFVDVF9MSU5LUyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQUk9EVUNUX0xJTksiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IklEIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJAUEFSVFlfTElOS19JRCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUExBTl9MSU5LUyIgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlBMQU5fTElOSyIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSUQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkBQQVJUWV9MSU5LX0lEIiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmV4dGVuc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJSSURFUl9MSU5LUyIgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlJJREVSX0xJTksiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IklEIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJAUEFSVFlfTElOS19JRCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQ09ORklHVVJBVElPTl9MSU5LUyIgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkNPTkZJR1VSQVRJT05fTElOSyIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSUQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkBQQVJUWV9MSU5LX0lEIiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmV4dGVuc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTVEFURVMiIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJFWENFUFRJT04iIG1pbk9jY3Vycz0iMCIgZGVmYXVsdD0iMCIgdHlwZT0ieHNkOmJvb2xlYW4iLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlNUQVRFIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiB0eXBlPSJUeXBlMiIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iT1BUSU9OQUxJVFkiIG1pbk9jY3Vycz0iMCIgZGVmYXVsdD0iT1BUSU9OQUwiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJFUVVJUkVEIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik9QVElPTkFMIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQUk9EVUNUU19TRVJWSUNFX1BST0dSQU1TIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlBST0RVQ1RfTElOS1MiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUFJPRFVDVF9MSU5LIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJRCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iQFBBUlRZX0xJTktfSUQiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlNFUlZJQ0VfUFJPR1JBTV9MSU5LUyIgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlNFUlZJQ0VfUFJPR1JBTV9MSU5LIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJRCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iQFBBUlRZX0xJTktfSUQiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik9QVElPTl9MSU5LUyIgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik9QVElPTl9MSU5LIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJRCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iQFBBUlRZX0xJTktfSUQiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDT05GSUdVUkFUSU9OX0xJTktTIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQ09ORklHVVJBVElPTl9MSU5LIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJRCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iQFBBUlRZX0xJTktfSUQiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlNUQVRFUyIgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkVYQ0VQVElPTiIgbWluT2NjdXJzPSIwIiBkZWZhdWx0PSIwIiB0eXBlPSJ4c2Q6Ym9vbGVhbiIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iU1RBVEUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHR5cGU9IlR5cGUyIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJPUFRJT05BTElUWSIgbWluT2NjdXJzPSIwIiBkZWZhdWx0PSJPUFRJT05BTCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUkVRVUlSRUQiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT1BUSU9OQUwiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUFJPRFVDVFNfUExBTlNfU0VSVklDRV9QUk9HUkFNUyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQUk9EVUNUX0xJTktTIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlBST0RVQ1RfTElOSyIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSUQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkBQQVJUWV9MSU5LX0lEIiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmV4dGVuc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQTEFOX0xJTktTIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUExBTl9MSU5LIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJRCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iQFBBUlRZX0xJTktfSUQiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlNFUlZJQ0VfUFJPR1JBTV9MSU5LUyIgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlNFUlZJQ0VfUFJPR1JBTV9MSU5LIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJRCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iQFBBUlRZX0xJTktfSUQiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik9QVElPTl9fTElOS1MiIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJPUFRJT05fX0xJTksiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IklEIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJAUEFSVFlfTElOS19JRCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkNPTkZJR1VSQVRJT05fTElOS1MiIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDT05GSUdVUkFUSU9OX0xJTksiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IklEIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJAUEFSVFlfTElOS19JRCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iU1RBVEVTIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iRVhDRVBUSU9OIiBtaW5PY2N1cnM9IjAiIGRlZmF1bHQ9IjAiIHR5cGU9InhzZDpib29sZWFuIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTVEFURSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgdHlwZT0iVHlwZTIiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik9QVElPTkFMSVRZIiBtaW5PY2N1cnM9IjAiIGRlZmF1bHQ9Ik9QVElPTkFMIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSRVFVSVJFRCIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPUFRJT05BTCIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUFJPRFVDVFNfSU5WRVNUTUVOVF9PUFRJT05TIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUFJPRFVDVF9MSU5LUyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQUk9EVUNUX0xJTksiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IklEIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJAUEFSVFlfTElOS19JRCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSU5WRVNUTUVOVF9PUFRJT05TX0xJTktTIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSU5WRVNUTUVOVF9PUFRJT05TX0xJTksiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IklEIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJAUEFSVFlfTElOS19JRCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iU1RBVEVTIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iRVhDRVBUSU9OIiBtaW5PY2N1cnM9IjAiIGRlZmF1bHQ9IjAiIHR5cGU9InhzZDpib29sZWFuIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTVEFURSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgdHlwZT0iVHlwZTIiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iT1BFUkFUSU5HX1BST0ZJTEVTIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iT1BFUkFUSU5HX1BST0ZJTEUiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IklEUyIgdHlwZT0iVHlwZTEiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5FVFRJTkdfT1BUSU9OIiBtaW5PY2N1cnM9IjAiIHR5cGU9InhzZDpib29sZWFuIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDT01NSVNTSU9OX09QVElPTl9MSU5LUyIgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkNPTU1JU1NJT05fT1BUSU9OX0xJTksiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IklEIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJAUEFSVFlfTElOS19JRCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlRSQU5TQUNUSU9OX1RZUEVTIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVFJBTlNBQ1RJT05fVFlQRSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVFlQRSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQVBQTElDQVRJT04iLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSU5JVElBTF9QUkVNSVVNIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNVQlNFUVVFTlRfUFJFTUlVTSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTQ0hFRFVMRURfQUNIX1BST0dSQU0iLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iV0lUSERSQVdBTCIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTVVJSRU5ERVIiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVFJBTlNGRVIiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUkVCQUxBTkNFIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNZU1RFTUFUSUNfV0lUSERSQVdBTF9QUk9HUkFNIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1SRF9QUk9HUkFNIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1SRCIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTQ0hFRFVMRURfUkVCQUxBTkNFX1BST0dSQU0iLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRENBIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRDQV9QUk9HUkFNIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlNZU1RFTUFUSUNfV0lUSERSQVdBTF9QUk9HUkFNIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJFTkVXQUwiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQU5OVUlUSVpBVElPTiIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQQVlPVVQiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iREVBVEhfQ0xBSU1fUEVORElORyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJERUFUSF9DTEFJTSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTWVNURU1BVElDX1dJVEhEUkFXQUwiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0NIRURVTEVEX0FDSCIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik1PTkVZX0ZPUk1TIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTU9ORVlfRk9STSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlRSQU5TQUNUSU9OX1JPVVRJTkdfTElOSyIgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IklEIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJAUEFSVFlfTElOS19JRCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUEFSQU1FVEVSUyIgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlBBUkFNRVRFUiIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTkFNRSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmV3IENoYXJhY3RlciBJdGVtIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iVFJBTlNBQ1RJT05fUk9VVElOR1MiIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJUUkFOU0FDVElPTl9ST1VUSU5HIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJRCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iQFBBUlRZX0xJTktfSUQiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IklEUyIgdHlwZT0iVHlwZTEiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik5BTUUiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkZPUk1BVCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQU5TSSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOU0NDIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFOTlVJVFlORVRfUFJPRklMRV9WMS4wIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlhNTElGRSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJUWE1MSUZFIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iUEFSQU1FVEVSUyIgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlBBUkFNRVRFUiIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTkFNRSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJVU0VSX1RPX0JVU0lORVNTX1VOSVRfTUFQUElOR1MiIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJVU0VSX1RPX0JVU0lORVNTX1VOSVRfTUFQUElORyIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQlVTSU5FU1NfVU5JVF9MSU5LIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IklEIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJAUEFSVFlfTElOS19JRCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJVU0VSX0xJTksiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSUQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkBQQVJUWV9MSU5LX0lEIiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmV4dGVuc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlVTRVJfUk9MRV9MSU5LIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IklEIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJAUEFSVFlfTElOS19JRCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQlVTSU5FU1NfVU5JVF9SRUxBVElPTlNISVBTIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQlVTSU5FU1NfVU5JVF9SRUxBVElPTlNISVAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlBBUkVOVF9CVVNJTkVTU19VTklUX0xJTksiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSUQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkBQQVJUWV9MSU5LX0lEIiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmV4dGVuc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkNISUxEX0JVU0lORVNTX1VOSVRfTElOSyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJJRCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iQFBBUlRZX0xJTktfSUQiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZXh0ZW5zaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkJVU0lORVNTX1VOSVRfT1BFUkFUSU5HX1BST0ZJTEVfTElOS1MiIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJCVVNJTkVTU19VTklUX0xJTktTIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkJVU0lORVNTX1VOSVRfTElOSyIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSUQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkBQQVJUWV9MSU5LX0lEIiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmV4dGVuc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJQUk9EVUNUX0xJTktTIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlBST0RVQ1RfTElOSyIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iSUQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9IkBQQVJUWV9MSU5LX0lEIiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4c2Q6c3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmV4dGVuc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJPUEVSQVRJTkdfUFJPRklMRV9MSU5LUyIgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Ik9QRVJBVElOR19QUk9GSUxFX0xJTksiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IklEIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJAUEFSVFlfTElOS19JRCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iU0NIRU1BX1ZFUlNJT04iIHVzZT0icmVxdWlyZWQiPgotICAgICAgICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBBUlRORVJfWE1MX0lOVEVSRkFDRV9WMS4xMCIvPgotICAgICAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgICAgICAgICAgPC94c2Q6YXR0cmlidXRlPgotICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gIDwveHNkOmVsZW1lbnQ+Ci0KLTwveHNkOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL3dsaS9jeG1sLnhzZCBiL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL3dsaS9jeG1sLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ4M2QyMi4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L2Nhc2VzL3NjaGVtYS93bGkvY3htbC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tVzNDIFNjaGVtYSBnZW5lcmF0ZWQgYnkgWE1MIFNweSB2NC40IFUgKGh0dHA6Ly93d3cueG1sc3B5LmNvbSktLT4KLTx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQWNjb3VudGluZyI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpjaG9pY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iU2VnbWVudCIgcmVmPSJTZWdtZW50IiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iQWNjb3VudGluZ1NlZ21lbnQiIHJlZj0iQWNjb3VudGluZ1NlZ21lbnQiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTwveHM6Y2hvaWNlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQWNjb3VudGluZ1NlZ21lbnQiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIgcmVmPSJOYW1lIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iRGVzY3JpcHRpb24iIHJlZj0iRGVzY3JpcHRpb24iLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQWRkcmVzcyI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJOYW1lIiByZWY9Ik5hbWUiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJQb3N0YWxBZGRyZXNzIiByZWY9IlBvc3RhbEFkZHJlc3MiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iRW1haWwiIHJlZj0iRW1haWwiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iUGhvbmUiIHJlZj0iUGhvbmUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iRmF4IiByZWY9IkZheCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJVUkwiIHJlZj0iVVJMIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iaXNvQ291bnRyeUNvZGUiIHR5cGU9InhzOnN0cmluZyIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJhZGRyZXNzSUQiIHR5cGU9InhzOnN0cmluZyIvPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJBcmVhT3JDaXR5Q29kZSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQXR0YWNobWVudCI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJVUkwiIHJlZj0iVVJMIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJCaWxsVG8iPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iQWRkcmVzcyIgcmVmPSJBZGRyZXNzIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJCcm93c2VyRm9ybVBvc3QiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iVVJMIiByZWY9IlVSTCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQnV5ZXJDb29raWUiPgotCQk8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiLz4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQ0lGQ29udGVudCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQ2hhbmdldGltZSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQ2hhcmdlIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IG5hbWU9Ik1vbmV5IiByZWY9Ik1vbmV5Ii8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJDaXR5IiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJDbGFzc2lmaWNhdGlvbiI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzaW1wbGVDb250ZW50PgotCQkJCTx4czpleHRlbnNpb24gYmFzZT0ieHM6c3RyaW5nIj4KLQkJCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJkb21haW4iIHR5cGU9InhzOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotCQkJCTwveHM6ZXh0ZW5zaW9uPgotCQkJPC94czpzaW1wbGVDb250ZW50PgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJDb21tZW50cyI+Ci0JCTx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0JCQk8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJCTx4czplbGVtZW50IG5hbWU9IkF0dGFjaG1lbnQiIHJlZj0iQXR0YWNobWVudCIvPgotCQkJPC94czpjaG9pY2U+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImxhbmciIHR5cGU9InhzOnN0cmluZyIvPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJDb250YWN0Ij4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IG5hbWU9Ik5hbWUiIHJlZj0iTmFtZSIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IlBvc3RhbEFkZHJlc3MiIHJlZj0iUG9zdGFsQWRkcmVzcyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IkVtYWlsIiByZWY9IkVtYWlsIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iUGhvbmUiIHJlZj0iUGhvbmUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJGYXgiIHJlZj0iRmF4IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iVVJMIiByZWY9IlVSTCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0icm9sZSIgdHlwZT0ieHM6Tk1UT0tFTiIvPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJDb250cmFjdCI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJTdXBwbGllcklEIiByZWY9IlN1cHBsaWVySUQiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJDb21tZW50cyIgcmVmPSJDb21tZW50cyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJJdGVtU2VnbWVudCIgcmVmPSJJdGVtU2VnbWVudCIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iZWZmZWN0aXZlRGF0ZSIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImV4cGlyYXRpb25EYXRlIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQ29udHJhY3RJdGVtIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IG5hbWU9Ikl0ZW1JRCIgcmVmPSJJdGVtSUQiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJVbml0UHJpY2UiIHJlZj0iVW5pdFByaWNlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IkV4dHJpbnNpYyIgcmVmPSJFeHRyaW5zaWMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IkNvdW50cnkiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2ltcGxlQ29udGVudD4KLQkJCQk8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOnN0cmluZyI+Ci0JCQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iaXNvQ291bnRyeUNvZGUiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotCQkJCTwveHM6ZXh0ZW5zaW9uPgotCQkJPC94czpzaW1wbGVDb250ZW50PgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJDb3VudHJ5Q29kZSI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzaW1wbGVDb250ZW50PgotCQkJCTx4czpleHRlbnNpb24gYmFzZT0ieHM6c3RyaW5nIj4KLQkJCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJpc29Db3VudHJ5Q29kZSIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQkJPC94czpleHRlbnNpb24+Ci0JCQk8L3hzOnNpbXBsZUNvbnRlbnQ+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IkNyZWRlbnRpYWwiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iSWRlbnRpdHkiIHJlZj0iSWRlbnRpdHkiLz4KLQkJCQk8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIj4KLQkJCQkJPHhzOmVsZW1lbnQgbmFtZT0iU2hhcmVkU2VjcmV0IiByZWY9IlNoYXJlZFNlY3JldCIvPgotCQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJEaWdpdGFsU2lnbmF0dXJlIiByZWY9IkRpZ2l0YWxTaWduYXR1cmUiLz4KLQkJCQk8L3hzOmNob2ljZT4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImRvbWFpbiIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InR5cGUiPgotCQkJCTx4czpzaW1wbGVUeXBlPgotCQkJCQk8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Tk1UT0tFTiI+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im1hcmtldHBsYWNlIi8+Ci0JCQkJCTwveHM6cmVzdHJpY3Rpb24+Ci0JCQkJPC94czpzaW1wbGVUeXBlPgotCQkJPC94czphdHRyaWJ1dGU+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IkRlbGl2ZXJUbyIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iRGVzY3JpcHRpb24iPgotCQk8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgotCQkJPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJTaG9ydE5hbWUiIHJlZj0iU2hvcnROYW1lIi8+Ci0JCQk8L3hzOmNob2ljZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibGFuZyIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IkRpZ2l0YWxTaWduYXR1cmUiPgotCQk8eHM6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB0eXBlPSJ4czpzdHJpbmciIGRlZmF1bHQ9IlBLNyBzZWxmLWNvbnRhaW5lZCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJlbmNvZGluZyIgdHlwZT0ieHM6c3RyaW5nIiBkZWZhdWx0PSJCYXNlNjQiLz4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iRGlzdHJpYnV0aW9uIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IG5hbWU9IkFjY291bnRpbmciIHJlZj0iQWNjb3VudGluZyIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IkNoYXJnZSIgcmVmPSJDaGFyZ2UiLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IkRvY3VtZW50UmVmZXJlbmNlIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJwYXlsb2FkSUQiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJFZmZlY3RpdmVEYXRlIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJFbWFpbCI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzaW1wbGVDb250ZW50PgotCQkJCTx4czpleHRlbnNpb24gYmFzZT0ieHM6c3RyaW5nIj4KLQkJCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJCQk8L3hzOmV4dGVuc2lvbj4KLQkJCTwveHM6c2ltcGxlQ29udGVudD4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iRXhwaXJhdGlvbkRhdGUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkV4dGVuc2lvbiIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iRXh0cmluc2ljIj4KLQkJPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IkZheCI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpjaG9pY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iVGVsZXBob25lTnVtYmVyIiByZWY9IlRlbGVwaG9uZU51bWJlciIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IlVSTCIgcmVmPSJVUkwiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJFbWFpbCIgcmVmPSJFbWFpbCIvPgotCQkJPC94czpjaG9pY2U+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzOnN0cmluZyIvPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJGb2xsb3d1cCI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJVUkwiIHJlZj0iVVJMIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJGb3JtYXQiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2ltcGxlQ29udGVudD4KLQkJCQk8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOnN0cmluZyI+Ci0JCQkJCTx4czphdHRyaWJ1dGUgbmFtZT0idmVyc2lvbiIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQkJPC94czpleHRlbnNpb24+Ci0JCQk8L3hzOnNpbXBsZUNvbnRlbnQ+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IkZyb20iPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iQ3JlZGVudGlhbCIgcmVmPSJDcmVkZW50aWFsIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJHZXRQZW5kaW5nUmVxdWVzdCI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJNZXNzYWdlVHlwZSIgcmVmPSJNZXNzYWdlVHlwZSIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibWF4TWVzc2FnZXMiIHR5cGU9InhzOnN0cmluZyIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJsYXN0UmVjZWl2ZWRUaW1lc3RhbXAiIHR5cGU9InhzOnN0cmluZyIvPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJHZXRQZW5kaW5nUmVzcG9uc2UiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iY1hNTCIgcmVmPSJjWE1MIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJIZWFkZXIiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iRnJvbSIgcmVmPSJGcm9tIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iVG8iIHJlZj0iVG8iLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJTZW5kZXIiIHJlZj0iU2VuZGVyIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJJZGVudGl0eSI+Ci0JCTx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9Imxhc3RDaGFuZ2VkVGltZXN0YW1wIiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iSW5kZXgiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iU3VwcGxpZXJJRCIgcmVmPSJTdXBwbGllcklEIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iQ29tbWVudHMiIHJlZj0iQ29tbWVudHMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iU2VhcmNoR3JvdXAiIHJlZj0iU2VhcmNoR3JvdXAiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJJbmRleEl0ZW0iIHJlZj0iSW5kZXhJdGVtIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJJbmRleEl0ZW0iPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6Y2hvaWNlPgotCQkJCTx4czplbGVtZW50IG5hbWU9IkluZGV4SXRlbUFkZCIgcmVmPSJJbmRleEl0ZW1BZGQiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJJbmRleEl0ZW1EZWxldGUiIHJlZj0iSW5kZXhJdGVtRGVsZXRlIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iSW5kZXhJdGVtUHVuY2hvdXQiIHJlZj0iSW5kZXhJdGVtUHVuY2hvdXQiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTwveHM6Y2hvaWNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJJbmRleEl0ZW1BZGQiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iSXRlbUlEIiByZWY9Ikl0ZW1JRCIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9Ikl0ZW1EZXRhaWwiIHJlZj0iSXRlbURldGFpbCIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IkluZGV4SXRlbURldGFpbCIgcmVmPSJJbmRleEl0ZW1EZXRhaWwiLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IkluZGV4SXRlbURlbGV0ZSI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJJdGVtSUQiIHJlZj0iSXRlbUlEIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJJbmRleEl0ZW1EZXRhaWwiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iTGVhZFRpbWUiIHJlZj0iTGVhZFRpbWUiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJFeHBpcmF0aW9uRGF0ZSIgcmVmPSJFeHBpcmF0aW9uRGF0ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJFZmZlY3RpdmVEYXRlIiByZWY9IkVmZmVjdGl2ZURhdGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iU2VhcmNoR3JvdXBEYXRhIiByZWY9IlNlYXJjaEdyb3VwRGF0YSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IlRlcnJpdG9yeUF2YWlsYWJsZSIgcmVmPSJUZXJyaXRvcnlBdmFpbGFibGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IkluZGV4SXRlbVB1bmNob3V0Ij4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IG5hbWU9Ikl0ZW1JRCIgcmVmPSJJdGVtSUQiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJQdW5jaG91dERldGFpbCIgcmVmPSJQdW5jaG91dERldGFpbCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iSW50ZXJuYWxJRCI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzaW1wbGVDb250ZW50PgotCQkJCTx4czpleHRlbnNpb24gYmFzZT0ieHM6c3RyaW5nIj4KLQkJCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJkb21haW4iIHR5cGU9InhzOnN0cmluZyIvPgotCQkJCTwveHM6ZXh0ZW5zaW9uPgotCQkJPC94czpzaW1wbGVDb250ZW50PgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJJdGVtRGV0YWlsIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IG5hbWU9IlVuaXRQcmljZSIgcmVmPSJVbml0UHJpY2UiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJEZXNjcmlwdGlvbiIgcmVmPSJEZXNjcmlwdGlvbiIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IlVuaXRPZk1lYXN1cmUiIHJlZj0iVW5pdE9mTWVhc3VyZSIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IkNsYXNzaWZpY2F0aW9uIiByZWY9IkNsYXNzaWZpY2F0aW9uIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iTWFudWZhY3R1cmVyUGFydElEIiByZWY9Ik1hbnVmYWN0dXJlclBhcnRJRCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJNYW51ZmFjdHVyZXJOYW1lIiByZWY9Ik1hbnVmYWN0dXJlck5hbWUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iVVJMIiByZWY9IlVSTCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJFeHRyaW5zaWMiIHJlZj0iRXh0cmluc2ljIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJJdGVtSUQiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iU3VwcGxpZXJQYXJ0SUQiIHJlZj0iU3VwcGxpZXJQYXJ0SUQiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJTdXBwbGllclBhcnRBdXhpbGlhcnlJRCIgcmVmPSJTdXBwbGllclBhcnRBdXhpbGlhcnlJRCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9Ikl0ZW1JbiI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJJdGVtSUQiIHJlZj0iSXRlbUlEIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iSXRlbURldGFpbCIgcmVmPSJJdGVtRGV0YWlsIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iU3VwcGxpZXJJRCIgcmVmPSJTdXBwbGllcklEIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IlNoaXBUbyIgcmVmPSJTaGlwVG8iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iU2hpcHBpbmciIHJlZj0iU2hpcHBpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iVGF4IiByZWY9IlRheCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InF1YW50aXR5IiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibGluZU51bWJlciIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9Ikl0ZW1PdXQiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iSXRlbUlEIiByZWY9Ikl0ZW1JRCIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9Ikl0ZW1EZXRhaWwiIHJlZj0iSXRlbURldGFpbCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJTdXBwbGllcklEIiByZWY9IlN1cHBsaWVySUQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iU2hpcFRvIiByZWY9IlNoaXBUbyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJTaGlwcGluZyIgcmVmPSJTaGlwcGluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJUYXgiIHJlZj0iVGF4IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IkRpc3RyaWJ1dGlvbiIgcmVmPSJEaXN0cmlidXRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJDb250YWN0IiByZWY9IkNvbnRhY3QiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJDb21tZW50cyIgcmVmPSJDb21tZW50cyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InF1YW50aXR5IiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibGluZU51bWJlciIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InJlcXVpc2l0aW9uSUQiIHR5cGU9InhzOnN0cmluZyIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZXF1ZXN0ZWREZWxpdmVyeURhdGUiIHR5cGU9InhzOnN0cmluZyIvPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJJdGVtU2VnbWVudCI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJDb250cmFjdEl0ZW0iIHJlZj0iQ29udHJhY3RJdGVtIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZWdtZW50S2V5IiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iTGVhZFRpbWUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9Ik1hbnVmYWN0dXJlck5hbWUiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2ltcGxlQ29udGVudD4KLQkJCQk8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOnN0cmluZyI+Ci0JCQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibGFuZyIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JCQkJPC94czpleHRlbnNpb24+Ci0JCQk8L3hzOnNpbXBsZUNvbnRlbnQ+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9Ik1hbnVmYWN0dXJlclBhcnRJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iTWVzc2FnZSI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXMiIHJlZj0iU3RhdHVzIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgotCQkJCTx4czpjaG9pY2U+Ci0JCQkJCTx4czplbGVtZW50IG5hbWU9IlB1bmNoT3V0T3JkZXJNZXNzYWdlIiByZWY9IlB1bmNoT3V0T3JkZXJNZXNzYWdlIi8+Ci0JCQkJCTx4czplbGVtZW50IG5hbWU9IlN1YnNjcmlwdGlvbkNoYW5nZU1lc3NhZ2UiIHJlZj0iU3Vic2NyaXB0aW9uQ2hhbmdlTWVzc2FnZSIvPgotCQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJTdXBwbGllckNoYW5nZU1lc3NhZ2UiIHJlZj0iU3VwcGxpZXJDaGFuZ2VNZXNzYWdlIi8+Ci0JCQkJPC94czpjaG9pY2U+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJkZXBsb3ltZW50TW9kZSIgZGVmYXVsdD0icHJvZHVjdGlvbiI+Ci0JCQkJPHhzOnNpbXBsZVR5cGU+Ci0JCQkJCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0icHJvZHVjdGlvbiIvPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0ZXN0Ii8+Ci0JCQkJCTwveHM6cmVzdHJpY3Rpb24+Ci0JCQkJPC94czpzaW1wbGVUeXBlPgotCQkJPC94czphdHRyaWJ1dGU+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImluUmVwbHlUbyIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9Ik1lc3NhZ2VUeXBlIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJNb25leSI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzaW1wbGVDb250ZW50PgotCQkJCTx4czpleHRlbnNpb24gYmFzZT0ieHM6c3RyaW5nIj4KLQkJCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJjdXJyZW5jeSIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iYWx0ZXJuYXRlQW1vdW50IiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJhbHRlcm5hdGVDdXJyZW5jeSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JCQkJPC94czpleHRlbnNpb24+Ci0JCQk8L3hzOnNpbXBsZUNvbnRlbnQ+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9Ik5hbWUiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2ltcGxlQ29udGVudD4KLQkJCQk8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOnN0cmluZyI+Ci0JCQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibGFuZyIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQkJPC94czpleHRlbnNpb24+Ci0JCQk8L3hzOnNpbXBsZUNvbnRlbnQ+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9Ik51bWJlciIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iT3B0aW9uIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNpbXBsZUNvbnRlbnQ+Ci0JCQkJPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpzdHJpbmciPgotCQkJCQk8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotCQkJCQk8eHM6YXR0cmlidXRlIG5hbWU9ImEtZHR5cGUiIHR5cGU9InhzOk5NVE9LRU5TIiBmaXhlZD0ibmFtZSBzdHJpbmciLz4KLQkJCQk8L3hzOmV4dGVuc2lvbj4KLQkJCTwveHM6c2ltcGxlQ29udGVudD4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iT3JkZXJNZXRob2QiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iT3JkZXJUYXJnZXQiIHJlZj0iT3JkZXJUYXJnZXQiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJPcmRlclByb3RvY29sIiByZWY9Ik9yZGVyUHJvdG9jb2wiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJPcmRlck1ldGhvZHMiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iT3JkZXJNZXRob2QiIHJlZj0iT3JkZXJNZXRob2QiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJDb250YWN0IiByZWY9IkNvbnRhY3QiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJPcmRlclByb3RvY29sIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJPcmRlclJlcXVlc3QiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iT3JkZXJSZXF1ZXN0SGVhZGVyIiByZWY9Ik9yZGVyUmVxdWVzdEhlYWRlciIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9Ikl0ZW1PdXQiIHJlZj0iSXRlbU91dCIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iT3JkZXJSZXF1ZXN0SGVhZGVyIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IG5hbWU9IlRvdGFsIiByZWY9IlRvdGFsIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iU2hpcFRvIiByZWY9IlNoaXBUbyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJCaWxsVG8iIHJlZj0iQmlsbFRvIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iU2hpcHBpbmciIHJlZj0iU2hpcHBpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iVGF4IiByZWY9IlRheCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJQYXltZW50IiByZWY9IlBheW1lbnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iQ29udGFjdCIgcmVmPSJDb250YWN0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iQ29tbWVudHMiIHJlZj0iQ29tbWVudHMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iRm9sbG93dXAiIHJlZj0iRm9sbG93dXAiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iRG9jdW1lbnRSZWZlcmVuY2UiIHJlZj0iRG9jdW1lbnRSZWZlcmVuY2UiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iRXh0cmluc2ljIiByZWY9IkV4dHJpbnNpYyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ib3JkZXJJRCIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9Im9yZGVyRGF0ZSIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InR5cGUiIGRlZmF1bHQ9Im5ldyI+Ci0JCQkJPHhzOnNpbXBsZVR5cGU+Ci0JCQkJCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibmV3Ii8+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9InVwZGF0ZSIvPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJkZWxldGUiLz4KLQkJCQkJPC94czpyZXN0cmljdGlvbj4KLQkJCQk8L3hzOnNpbXBsZVR5cGU+Ci0JCQk8L3hzOmF0dHJpYnV0ZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0icmVxdWlzaXRpb25JRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InNoaXBDb21wbGV0ZSI+Ci0JCQkJPHhzOnNpbXBsZVR5cGU+Ci0JCQkJCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0ieWVzIi8+Ci0JCQkJCTwveHM6cmVzdHJpY3Rpb24+Ci0JCQkJPC94czpzaW1wbGVUeXBlPgotCQkJPC94czphdHRyaWJ1dGU+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9Ik9yZGVyVGFyZ2V0Ij4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOmNob2ljZT4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJQaG9uZSIgcmVmPSJQaG9uZSIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IkVtYWlsIiByZWY9IkVtYWlsIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iRmF4IiByZWY9IkZheCIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IlVSTCIgcmVmPSJVUkwiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJPdGhlck9yZGVyVGFyZ2V0IiByZWY9Ik90aGVyT3JkZXJUYXJnZXQiLz4KLQkJCTwveHM6Y2hvaWNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJPdGhlck9yZGVyVGFyZ2V0Ij4KLQkJPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IlBDYXJkIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IG5hbWU9IlBvc3RhbEFkZHJlc3MiIHJlZj0iUG9zdGFsQWRkcmVzcyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9Im51bWJlciIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImV4cGlyYXRpb24iIHR5cGU9InhzOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUGF5bWVudCI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJQQ2FyZCIgcmVmPSJQQ2FyZCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUGhvbmUiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iVGVsZXBob25lTnVtYmVyIiByZWY9IlRlbGVwaG9uZU51bWJlciIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IlBvc3RhbEFkZHJlc3MiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iRGVsaXZlclRvIiByZWY9IkRlbGl2ZXJUbyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IlN0cmVldCIgcmVmPSJTdHJlZXQiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJDaXR5IiByZWY9IkNpdHkiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJTdGF0ZSIgcmVmPSJTdGF0ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJQb3N0YWxDb2RlIiByZWY9IlBvc3RhbENvZGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iQ291bnRyeSIgcmVmPSJDb3VudHJ5Ii8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUG9zdGFsQ29kZSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUHJvZmlsZVJlcXVlc3QiPgotCQk8eHM6Y29tcGxleFR5cGUvPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJQcm9maWxlUmVzcG9uc2UiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iT3B0aW9uIiByZWY9Ik9wdGlvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IlRyYW5zYWN0aW9uIiByZWY9IlRyYW5zYWN0aW9uIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJlZmZlY3RpdmVEYXRlIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iYS1kdHlwZSIgdHlwZT0ieHM6Tk1UT0tFTlMiIGZpeGVkPSJlZmZlY3RpdmVEYXRlIGRhdGVUaW1lIi8+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IlB1bmNoT3V0T3JkZXJNZXNzYWdlIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IG5hbWU9IkJ1eWVyQ29va2llIiByZWY9IkJ1eWVyQ29va2llIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iUHVuY2hPdXRPcmRlck1lc3NhZ2VIZWFkZXIiIHJlZj0iUHVuY2hPdXRPcmRlck1lc3NhZ2VIZWFkZXIiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJJdGVtSW4iIHJlZj0iSXRlbUluIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJQdW5jaE91dE9yZGVyTWVzc2FnZUhlYWRlciI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJUb3RhbCIgcmVmPSJUb3RhbCIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IlNoaXBUbyIgcmVmPSJTaGlwVG8iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iU2hpcHBpbmciIHJlZj0iU2hpcHBpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iVGF4IiByZWY9IlRheCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9Im9wZXJhdGlvbkFsbG93ZWQiIHVzZT0icmVxdWlyZWQiPgotCQkJCTx4czpzaW1wbGVUeXBlPgotCQkJCQk8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Tk1UT0tFTiI+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNyZWF0ZSIvPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJpbnNwZWN0Ii8+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImVkaXQiLz4KLQkJCQkJPC94czpyZXN0cmljdGlvbj4KLQkJCQk8L3hzOnNpbXBsZVR5cGU+Ci0JCQk8L3hzOmF0dHJpYnV0ZT4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUHVuY2hPdXRTZXR1cFJlcXVlc3QiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iQnV5ZXJDb29raWUiIHJlZj0iQnV5ZXJDb29raWUiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJFeHRyaW5zaWMiIHJlZj0iRXh0cmluc2ljIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iQnJvd3NlckZvcm1Qb3N0IiByZWY9IkJyb3dzZXJGb3JtUG9zdCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJDb250YWN0IiByZWY9IkNvbnRhY3QiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJTdXBwbGllclNldHVwIiByZWY9IlN1cHBsaWVyU2V0dXAiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iU2hpcFRvIiByZWY9IlNoaXBUbyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJTZWxlY3RlZEl0ZW0iIHJlZj0iU2VsZWN0ZWRJdGVtIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9Ikl0ZW1PdXQiIHJlZj0iSXRlbU91dCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ib3BlcmF0aW9uIiB1c2U9InJlcXVpcmVkIj4KLQkJCQk8eHM6c2ltcGxlVHlwZT4KLQkJCQkJPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJjcmVhdGUiLz4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaW5zcGVjdCIvPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJlZGl0Ii8+Ci0JCQkJCTwveHM6cmVzdHJpY3Rpb24+Ci0JCQkJPC94czpzaW1wbGVUeXBlPgotCQkJPC94czphdHRyaWJ1dGU+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IlB1bmNoT3V0U2V0dXBSZXNwb25zZSI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJTdGFydFBhZ2UiIHJlZj0iU3RhcnRQYWdlIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJQdW5jaG91dERldGFpbCI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJEZXNjcmlwdGlvbiIgcmVmPSJEZXNjcmlwdGlvbiIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IlVSTCIgcmVmPSJVUkwiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJDbGFzc2lmaWNhdGlvbiIgcmVmPSJDbGFzc2lmaWNhdGlvbiIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9Ik1hbnVmYWN0dXJlck5hbWUiIHJlZj0iTWFudWZhY3R1cmVyTmFtZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJNYW51ZmFjdHVyZXJQYXJ0SUQiIHJlZj0iTWFudWZhY3R1cmVyUGFydElEIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IkV4cGlyYXRpb25EYXRlIiByZWY9IkV4cGlyYXRpb25EYXRlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IkVmZmVjdGl2ZURhdGUiIHJlZj0iRWZmZWN0aXZlRGF0ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJTZWFyY2hHcm91cERhdGEiIHJlZj0iU2VhcmNoR3JvdXBEYXRhIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iVGVycml0b3J5QXZhaWxhYmxlIiByZWY9IlRlcnJpdG9yeUF2YWlsYWJsZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUmVxdWVzdCI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpjaG9pY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iUHJvZmlsZVJlcXVlc3QiIHJlZj0iUHJvZmlsZVJlcXVlc3QiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJPcmRlclJlcXVlc3QiIHJlZj0iT3JkZXJSZXF1ZXN0Ii8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iUHVuY2hPdXRTZXR1cFJlcXVlc3QiIHJlZj0iUHVuY2hPdXRTZXR1cFJlcXVlc3QiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJTdGF0dXNVcGRhdGVSZXF1ZXN0IiByZWY9IlN0YXR1c1VwZGF0ZVJlcXVlc3QiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJHZXRQZW5kaW5nUmVxdWVzdCIgcmVmPSJHZXRQZW5kaW5nUmVxdWVzdCIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IlN1YnNjcmlwdGlvbkxpc3RSZXF1ZXN0IiByZWY9IlN1YnNjcmlwdGlvbkxpc3RSZXF1ZXN0Ii8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uQ29udGVudFJlcXVlc3QiIHJlZj0iU3Vic2NyaXB0aW9uQ29udGVudFJlcXVlc3QiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJTdXBwbGllckxpc3RSZXF1ZXN0IiByZWY9IlN1cHBsaWVyTGlzdFJlcXVlc3QiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJTdXBwbGllckRhdGFSZXF1ZXN0IiByZWY9IlN1cHBsaWVyRGF0YVJlcXVlc3QiLz4KLQkJCTwveHM6Y2hvaWNlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJkZXBsb3ltZW50TW9kZSIgZGVmYXVsdD0icHJvZHVjdGlvbiI+Ci0JCQkJPHhzOnNpbXBsZVR5cGU+Ci0JCQkJCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0icHJvZHVjdGlvbiIvPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ0ZXN0Ii8+Ci0JCQkJCTwveHM6cmVzdHJpY3Rpb24+Ci0JCQkJPC94czpzaW1wbGVUeXBlPgotCQkJPC94czphdHRyaWJ1dGU+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IlJlc3BvbnNlIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IG5hbWU9IlN0YXR1cyIgcmVmPSJTdGF0dXMiLz4KLQkJCQk8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIj4KLQkJCQkJPHhzOmNob2ljZT4KLQkJCQkJCTx4czplbGVtZW50IG5hbWU9IlByb2ZpbGVSZXNwb25zZSIgcmVmPSJQcm9maWxlUmVzcG9uc2UiLz4KLQkJCQkJCTx4czplbGVtZW50IG5hbWU9IlB1bmNoT3V0U2V0dXBSZXNwb25zZSIgcmVmPSJQdW5jaE91dFNldHVwUmVzcG9uc2UiLz4KLQkJCQkJCTx4czplbGVtZW50IG5hbWU9IkdldFBlbmRpbmdSZXNwb25zZSIgcmVmPSJHZXRQZW5kaW5nUmVzcG9uc2UiLz4KLQkJCQkJCTx4czplbGVtZW50IG5hbWU9IlN1YnNjcmlwdGlvbkxpc3RSZXNwb25zZSIgcmVmPSJTdWJzY3JpcHRpb25MaXN0UmVzcG9uc2UiLz4KLQkJCQkJCTx4czplbGVtZW50IG5hbWU9IlN1YnNjcmlwdGlvbkNvbnRlbnRSZXNwb25zZSIgcmVmPSJTdWJzY3JpcHRpb25Db250ZW50UmVzcG9uc2UiLz4KLQkJCQkJCTx4czplbGVtZW50IG5hbWU9IlN1cHBsaWVyTGlzdFJlc3BvbnNlIiByZWY9IlN1cHBsaWVyTGlzdFJlc3BvbnNlIi8+Ci0JCQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJTdXBwbGllckRhdGFSZXNwb25zZSIgcmVmPSJTdXBwbGllckRhdGFSZXNwb25zZSIvPgotCQkJCQk8L3hzOmNob2ljZT4KLQkJCQk8L3hzOmNob2ljZT4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IlNlYXJjaEF0dHJpYnV0ZSI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InR5cGUiIHR5cGU9InhzOnN0cmluZyIvPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTZWFyY2hEYXRhRWxlbWVudCI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InZhbHVlIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU2VhcmNoR3JvdXAiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iTmFtZSIgcmVmPSJOYW1lIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iU2VhcmNoQXR0cmlidXRlIiByZWY9IlNlYXJjaEF0dHJpYnV0ZSIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU2VhcmNoR3JvdXBEYXRhIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IG5hbWU9Ik5hbWUiIHJlZj0iTmFtZSIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IlNlYXJjaERhdGFFbGVtZW50IiByZWY9IlNlYXJjaERhdGFFbGVtZW50IiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTZWdtZW50Ij4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJkZXNjcmlwdGlvbiIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IlNlbGVjdGVkSXRlbSI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJJdGVtSUQiIHJlZj0iSXRlbUlEIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTZW5kZXIiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iQ3JlZGVudGlhbCIgcmVmPSJDcmVkZW50aWFsIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iVXNlckFnZW50IiByZWY9IlVzZXJBZ2VudCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU2hhcmVkU2VjcmV0Ij4KLQkJPHhzOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIi8+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IlNoaXBUbyI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJBZGRyZXNzIiByZWY9IkFkZHJlc3MiLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IlNoaXBwaW5nIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IG5hbWU9Ik1vbmV5IiByZWY9Ik1vbmV5Ii8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iRGVzY3JpcHRpb24iIHJlZj0iRGVzY3JpcHRpb24iLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InRyYWNraW5nRG9tYWluIiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0idHJhY2tpbmdJZCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InRyYWNraW5nIiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU2hvcnROYW1lIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTdGFydFBhZ2UiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iVVJMIiByZWY9IlVSTCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU3RhdGUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlN0YXR1cyI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzaW1wbGVDb250ZW50PgotCQkJCTx4czpleHRlbnNpb24gYmFzZT0ieHM6c3RyaW5nIj4KLQkJCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb2RlIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0ZXh0IiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJsYW5nIiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJCQk8L3hzOmV4dGVuc2lvbj4KLQkJCTwveHM6c2ltcGxlQ29udGVudD4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU3RhdHVzVXBkYXRlUmVxdWVzdCI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJEb2N1bWVudFJlZmVyZW5jZSIgcmVmPSJEb2N1bWVudFJlZmVyZW5jZSIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IlN0YXR1cyIgcmVmPSJTdGF0dXMiLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IlN0cmVldCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IG5hbWU9IkludGVybmFsSUQiIHJlZj0iSW50ZXJuYWxJRCIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9Ik5hbWUiIHJlZj0iTmFtZSIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IkNoYW5nZXRpbWUiIHJlZj0iQ2hhbmdldGltZSIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IlN1cHBsaWVySUQiIHJlZj0iU3VwcGxpZXJJRCIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IkZvcm1hdCIgcmVmPSJGb3JtYXQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iRGVzY3JpcHRpb24iIHJlZj0iRGVzY3JpcHRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25DaGFuZ2VNZXNzYWdlIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IG5hbWU9IlN1YnNjcmlwdGlvbiIgcmVmPSJTdWJzY3JpcHRpb24iIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InR5cGUiIHVzZT0icmVxdWlyZWQiPgotCQkJCTx4czpzaW1wbGVUeXBlPgotCQkJCQk8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Tk1UT0tFTiI+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5ldyIvPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ1cGRhdGUiLz4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZGVsZXRlIi8+Ci0JCQkJCTwveHM6cmVzdHJpY3Rpb24+Ci0JCQkJPC94czpzaW1wbGVUeXBlPgotCQkJPC94czphdHRyaWJ1dGU+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IlN1YnNjcmlwdGlvbkNvbnRlbnQiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6Y2hvaWNlPgotCQkJCTx4czplbGVtZW50IG5hbWU9IkNJRkNvbnRlbnQiIHJlZj0iQ0lGQ29udGVudCIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IkluZGV4IiByZWY9IkluZGV4Ii8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iQ29udHJhY3QiIHJlZj0iQ29udHJhY3QiLz4KLQkJCTwveHM6Y2hvaWNlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJmaWxlbmFtZSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IlN1YnNjcmlwdGlvbkNvbnRlbnRSZXF1ZXN0Ij4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IG5hbWU9IkludGVybmFsSUQiIHJlZj0iSW50ZXJuYWxJRCIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IlN1cHBsaWVySUQiIHJlZj0iU3VwcGxpZXJJRCIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uQ29udGVudFJlc3BvbnNlIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IG5hbWU9IlN1YnNjcmlwdGlvbiIgcmVmPSJTdWJzY3JpcHRpb24iLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJTdWJzY3JpcHRpb25Db250ZW50IiByZWY9IlN1YnNjcmlwdGlvbkNvbnRlbnQiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IlN1YnNjcmlwdGlvbkxpc3RSZXF1ZXN0Ij4KLQkJPHhzOmNvbXBsZXhUeXBlLz4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU3Vic2NyaXB0aW9uTGlzdFJlc3BvbnNlIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IG5hbWU9IlN1YnNjcmlwdGlvbiIgcmVmPSJTdWJzY3JpcHRpb24iIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IlN1cHBsaWVyIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IG5hbWU9Ik5hbWUiIHJlZj0iTmFtZSIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IkNvbW1lbnRzIiByZWY9IkNvbW1lbnRzIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IlN1cHBsaWVySUQiIHJlZj0iU3VwcGxpZXJJRCIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9IlN1cHBsaWVyTG9jYXRpb24iIHJlZj0iU3VwcGxpZXJMb2NhdGlvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iY29ycG9yYXRlVVJMIiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ic3RvcmVGcm9udFVSTCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IlN1cHBsaWVyQ2hhbmdlTWVzc2FnZSI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJTdXBwbGllciIgcmVmPSJTdXBwbGllciIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0idHlwZSIgdXNlPSJyZXF1aXJlZCI+Ci0JCQkJPHhzOnNpbXBsZVR5cGU+Ci0JCQkJCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibmV3Ii8+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9InVwZGF0ZSIvPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJkZWxldGUiLz4KLQkJCQkJPC94czpyZXN0cmljdGlvbj4KLQkJCQk8L3hzOnNpbXBsZVR5cGU+Ci0JCQk8L3hzOmF0dHJpYnV0ZT4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU3VwcGxpZXJEYXRhUmVxdWVzdCI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJTdXBwbGllcklEIiByZWY9IlN1cHBsaWVySUQiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IlN1cHBsaWVyRGF0YVJlc3BvbnNlIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IG5hbWU9IlN1cHBsaWVyIiByZWY9IlN1cHBsaWVyIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTdXBwbGllcklEIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNpbXBsZUNvbnRlbnQ+Ci0JCQkJPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpzdHJpbmciPgotCQkJCQk8eHM6YXR0cmlidXRlIG5hbWU9ImRvbWFpbiIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQkJPC94czpleHRlbnNpb24+Ci0JCQk8L3hzOnNpbXBsZUNvbnRlbnQ+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IlN1cHBsaWVyTGlzdFJlcXVlc3QiPgotCQk8eHM6Y29tcGxleFR5cGUvPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTdXBwbGllckxpc3RSZXNwb25zZSI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJTdXBwbGllciIgcmVmPSJTdXBwbGllciIgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU3VwcGxpZXJMb2NhdGlvbiI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJBZGRyZXNzIiByZWY9IkFkZHJlc3MiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJPcmRlck1ldGhvZHMiIHJlZj0iT3JkZXJNZXRob2RzIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTdXBwbGllclBhcnRBdXhpbGlhcnlJRCI+Ci0JCTx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSIvPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTdXBwbGllclBhcnRJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU3VwcGxpZXJTZXR1cCI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJVUkwiIHJlZj0iVVJMIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJUYXgiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iTW9uZXkiIHJlZj0iTW9uZXkiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJEZXNjcmlwdGlvbiIgcmVmPSJEZXNjcmlwdGlvbiIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iVGVsZXBob25lTnVtYmVyIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IG5hbWU9IkNvdW50cnlDb2RlIiByZWY9IkNvdW50cnlDb2RlIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iQXJlYU9yQ2l0eUNvZGUiIHJlZj0iQXJlYU9yQ2l0eUNvZGUiLz4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJOdW1iZXIiIHJlZj0iTnVtYmVyIi8+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iRXh0ZW5zaW9uIiByZWY9IkV4dGVuc2lvbiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IlRlcnJpdG9yeUF2YWlsYWJsZSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iVG8iPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iQ3JlZGVudGlhbCIgcmVmPSJDcmVkZW50aWFsIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJUb3RhbCI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJNb25leSIgcmVmPSJNb25leSIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iVHJhbnNhY3Rpb24iPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgbmFtZT0iVVJMIiByZWY9IlVSTCIvPgotCQkJCTx4czplbGVtZW50IG5hbWU9Ik9wdGlvbiIgcmVmPSJPcHRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InJlcXVlc3ROYW1lIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iYS1kdHlwZSIgdHlwZT0ieHM6Tk1UT0tFTlMiIGZpeGVkPSJyZXF1ZXN0TmFtZSBOTVRPS0VOIi8+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IlVSTCI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzaW1wbGVDb250ZW50PgotCQkJCTx4czpleHRlbnNpb24gYmFzZT0ieHM6c3RyaW5nIj4KLQkJCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJCQk8L3hzOmV4dGVuc2lvbj4KLQkJCTwveHM6c2ltcGxlQ29udGVudD4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iVW5pdE9mTWVhc3VyZSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iVW5pdFByaWNlIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IG5hbWU9Ik1vbmV5IiByZWY9Ik1vbmV5Ii8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJVc2VyQWdlbnQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9ImNYTUwiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6Y2hvaWNlPgotCQkJCTx4czpzZXF1ZW5jZT4KLQkJCQkJPHhzOmVsZW1lbnQgbmFtZT0iSGVhZGVyIiByZWY9IkhlYWRlciIvPgotCQkJCQk8eHM6Y2hvaWNlPgotCQkJCQkJPHhzOmVsZW1lbnQgbmFtZT0iTWVzc2FnZSIgcmVmPSJNZXNzYWdlIi8+Ci0JCQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJSZXF1ZXN0IiByZWY9IlJlcXVlc3QiLz4KLQkJCQkJPC94czpjaG9pY2U+Ci0JCQkJPC94czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCBuYW1lPSJSZXNwb25zZSIgcmVmPSJSZXNwb25zZSIvPgotCQkJPC94czpjaG9pY2U+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InZlcnNpb24iIHR5cGU9InhzOnN0cmluZyIgZGVmYXVsdD0iMS4xLjAwOSIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJwYXlsb2FkSUQiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0aW1lc3RhbXAiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJsYW5nIiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci08L3hzOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL3dsaS9vYWdpc19maWVsZHMueHNkIGIvdjIvdGVzdC9jYXNlcy9zY2hlbWEvd2xpL29hZ2lzX2ZpZWxkcy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5OTgwYjIuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvd2xpL29hZ2lzX2ZpZWxkcy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw5MjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS1HZW5lcmF0ZWQgYnkgWE1MIEF1dGhvcml0eS4gQ29uZm9ybXMgdG8gdzNjIGh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLS0+Ci08eHM6c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3Lm9wZW5hcHBsaWNhdGlvbnMub3JnL29hZ2lzX2ZpZWxkcyIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3Lm9wZW5hcHBsaWNhdGlvbnMub3JnL29hZ2lzX2ZpZWxkcyIgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0JPHhzOmFubm90YXRpb24+Ci0JCTx4czpkb2N1bWVudGF0aW9uPgotCQkJCi0JCUxpY2Vuc2UgaW5mb3JtYXRpb24gZm9yIHRoaXMgZmlsZSBpcyBwcm92aWRlZCBpbiBMSUNFTlNFLlRYVCwgYXMgcHVibGlzaGVkCi0JCW9uIHRoZSBPcGVuIEFwcGxpY2F0aW9ucyBHcm91cCB3ZWIgc2l0ZS4gd3d3Lm9wZW5hcHBsaWNhdGlvbnMub3JnCi0JCQotCQlGb3Igc3VwcG9ydCwgbW9yZSBpbmZvcm1hdGlvbiwgb3IgdG8gcmVwb3J0IGltcGxlbWVudGF0aW9uIGJ1Z3MsCi0JCXBsZWFzZSBjb250YWN0IHRoZSBPcGVuIEFwcGxpY2F0aW9ucyBHcm91cCBhdCB4bWxAb3BlbmFwcGxpY2F0aW9ucy5vcmcKLQkJCi0JCSRSZXZpc2lvbjogMS4xICQKLQkJJERhdGU6IDIwMDMvMDkvMjYgMjE6MjM6MzkgJAotCQlPcGVuIEFwcGxpY2F0aW9ucyBHcm91cCBYTUwKLQkJQ29weXJpZ2h0IDE5OTgtMjAwMSwgQWxsIFJpZ2h0cyBSZXNlcnZlZAotCQkKLQkJJE5hbWU6ICAkCi0JCQotCQlhancJNy4yCQkwOS8xNC8yMDAxCUZpZWxkcyB0byBzdXBwb3J0IEVDYXRhbG9nOiBDTEFTU0ZOSUQsQ0xBU1NGTixDTEFTU0xFVkVMLENMU1NTQ0hNUlYsRlRHUk9VUCwKLQkJCQkJCQkJCUZUVkFMSU5ELEZUVkFMUVVBTCwJUFJJQ0VDT0RFLAlQUklDRVRZUEUsU0VRTkNFTlVNLFVTQUdFUkVTVE4KLQkJYWp3CTcuMgkJMDkvMTQvMjAwMQlGaWVsZHMgdG8gc3VwcG9ydCBDb25zdW1wdG46IENPTlNMSU5FTlVNLFJPVVRFTEVWRUwxLVJPVVRFTEVWRUw5ICAKLQkJbWxyCTcuMiAJCTA5LzE0LzIwMDEJQWRkZWQgZmllbGRzIHRvIHN1cHBvcnQgdXBkYXRlZCBkZWxpdmVyeTogQUNLTU9ERSwgRElTQ1JQVFlQRSwgUkVDRUlQVFlQRS4KLQkJYWp3CTcuMi4xCTEwLzMxLzIwMDEJVzNDIFNjaGVtYSBSZWxlYXNlIAotCQkKLQotCQlTdHJ1Y3R1cmUgT3ZlcnZpZXcKLQkJCi0JCQlUaGlzIHNjaGVtYSBkZWZpbmVzIHRoZSBPQUdJIEZpZWxkIGRhdGF0eXBlcyB1c2VkIHRocm91Z2hvdXQgdGhlIHNwZWNpZmljYXRpb24uCi0JCQlCZWxvdyBpcyBhbiBvdXRsaW5lIGRlcGljdGluZyB0aGVpciBwbGFjZW1lbnQgYW5kIHVzYWdlLgotCQkJCi0JCQlCT0QgTmFtZXNwYWNlICgiaHR0cDovL3d3dy5vcGVuYXBwbGljYXRpb25zLm9yZy9ubm5fdmVyYl9ub3VuX3JlbCIpCi0JCQkJfAotCQkJCXwtLS0gU2VnbWVudHMgTmFtZXNwYWNlIC0gb2FnaXNfc2VnbWVudHMueHNkIChvczogImh0dHA6Ly93d3cub3BlbmFwcGxpY2F0aW9ucy5vcmcvb2FnaXNfc2VnbWVudHMiKQotCQkJCXwJfAotCQkJCXwtLS0JfC0tLSBGaWVsZHMgTmFtZXNwYWNlIC0gb2FnaXNfZmllbGRzLnhzZCAob2Y6Imh0dHA6Ly93d3cub3BlbmFwcGxpY2F0aW9ucy5vcmcvb2FnaXNfZmllbGRzIikgCi0JCQkJCQotCQkJCQkKLQkJCQotCQk8L3hzOmRvY3VtZW50YXRpb24+Ci0JPC94czphbm5vdGF0aW9uPgotCTx4czplbGVtZW50IG5hbWU9IlZFUkIiIHR5cGU9IlZFUkIiLz4KLQk8eHM6c2ltcGxlVHlwZSBuYW1lPSJWRVJCIj4KLQkJPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFDS05PV0xFREdFIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFMTE9DQVRFIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFERCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJDQU5DRUwiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQ0hBTkdFIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkNPTkZJUk0iLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQ1JFQVRFIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkdFVCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJHRVRMSVNUIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IklTU1VFIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkxJU1QiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTE9BRCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJQT1NUIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBST0NFU1MiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUkVDRUlWRSIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSRVNQT05EIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlNIT1ciLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU1lOQyIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJUUkFOU0ZFUiIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJVUERBVEUiLz4KLQkJPC94czpyZXN0cmljdGlvbj4KLQk8L3hzOnNpbXBsZVR5cGU+Ci0JPHhzOnNpbXBsZVR5cGUgbmFtZT0iTk9VTiI+Ci0JCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJBQ1RJVklUWSIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJCT00iLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQk9EIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkNBVEFMT0ciLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQ09BIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkNPTlNVTVBUTiIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJDT1VOVElORk8iLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQ1JFRElUIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkNVU1RPTUVSIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRFTElWRVJZIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRTUFRDSExJU1QiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRUNBVEFMT0ciLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRU5HQ0hHT1JEUiIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFWENITkdSQVRFIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkZJRUxEIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IklOU1BFQ1RJT04iLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSU5WRU5DT1VOVCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJTlZFTlRPUlkiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSU5WT0lDRSIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJU1NVRSIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJU1NVRUlORk8iLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSVRFTSIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJVEVNQ0xBU1MiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSVRFTVNQRUNTIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IklURU1YUkVGIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkpPVVJOQUwiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTERHUkFDVFVBTCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJMREdSQlVER0VUIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik1BSU5UT1JERVIiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTUFUQ0hET0MiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTUFUQ0hGQUlMIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik1BVENIT0siLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTUZHVExDT0RFIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik1JU0NJVEVNIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBBWUFCTEUiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUEVSU09OTkVMIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBFUlNPTlRJTUUiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUElDS0xJU1QiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUExBTlNDSEQiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUExJTlZPSUNFIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBPIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBSSUNFTElTVCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJQUk9EQVZBSUwiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUFJPRE9SREVSIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBST0RVQ1RSRVEiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUFJPSkFDQ1RORyIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJQUk9KSU5GTyIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJRVU9URSIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSRUNFSVZBQkxFIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJFUVVJU0lUTiIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSRVNPVVJDRSIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSRlEiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUk9VVElORyIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTQUxFU09SREVSIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlNFUVNDSEQiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU0hJUE1FTlQiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU0hJUFNDSEQiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU0lURUxFVkVMIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlNUQVRVUyIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTVVBQTElFUiIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJVT01HUk9VUCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJXSVBDT05GSVJNIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IldJUE1FUkdFIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IldJUE1PVkUiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iV0lQUkVDT1ZFUiIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJXSVBTUExJVCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJXSVBTVEFUVVMiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iV1JLU0NIRFVMRSIvPgotCQk8L3hzOnJlc3RyaWN0aW9uPgotCTwveHM6c2ltcGxlVHlwZT4KLQk8eHM6c2ltcGxlVHlwZSBuYW1lPSJSRVZJU0lPTiI+Ci0JCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciLz4KLQk8L3hzOnNpbXBsZVR5cGU+Ci0JPHhzOnNpbXBsZVR5cGUgbmFtZT0iTE9HSUNBTElEIj4KLQkJPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyIvPgotCTwveHM6c2ltcGxlVHlwZT4KLQk8eHM6c2ltcGxlVHlwZSBuYW1lPSJDT05GSVJNQVRJT04iPgotCQk8eHM6YW5ub3RhdGlvbj4KLQkJCTx4czpkb2N1bWVudGF0aW9uPgotCQkJMCAtIE5vIENvbmZpcm0gQk9EIHJlcXVlc3RlZCwgMSAtIFNlbmQgQ29uZmlybSBCT0Qgb25seSBvbiBlcnJvciwgMiAtIFNlbmQgQ29uZmlybSBCT0QgYWx3YXlzCQkJCQkJCQk8L3hzOmRvY3VtZW50YXRpb24+Ci0JCTwveHM6YW5ub3RhdGlvbj4KLQkJPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IjAiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iMSIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIyIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik5PQ09ORklSTSIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJPTkVSUk9SIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IllFU0NPTkZJUk0iLz4KLQkJPC94czpyZXN0cmljdGlvbj4KLQk8L3hzOnNpbXBsZVR5cGU+Ci0JPHhzOnNpbXBsZVR5cGUgbmFtZT0iTEFOR1VBR0UiPgotCQk8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIi8+Ci0JPC94czpzaW1wbGVUeXBlPgotCTx4czpzaW1wbGVUeXBlIG5hbWU9IkNIQVJHRVRZUEUiPgotCQk8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIi8+Ci0JPC94czpzaW1wbGVUeXBlPgotCTx4czpzaW1wbGVUeXBlIG5hbWU9IkRPQ1RZUEUiPgotCQk8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIi8+Ci0JPC94czpzaW1wbGVUeXBlPgotCTx4czpzaW1wbGVUeXBlIG5hbWU9IkRPQ1VNRU5USUQiPgotCQk8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIi8+Ci0JPC94czpzaW1wbGVUeXBlPgotCTx4czpzaW1wbGVUeXBlIG5hbWU9IkRPQ1VNRU5UUlYiPgotCQk8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIi8+Ci0JPC94czpzaW1wbGVUeXBlPgotCTx4czpzaW1wbGVUeXBlIG5hbWU9IklURU0iPgotCQk8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIi8+Ci0JPC94czpzaW1wbGVUeXBlPgotCTx4czpzaW1wbGVUeXBlIG5hbWU9Ik9SSUdSRUYiPgotCQk8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIi8+Ci0JPC94czpzaW1wbGVUeXBlPgotCTx4czpzaW1wbGVUeXBlIG5hbWU9IlBBUlROUklEIj4KLQkJPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyIvPgotCTwveHM6c2ltcGxlVHlwZT4KLQk8eHM6c2ltcGxlVHlwZSBuYW1lPSJQQVJUTlJUWVBFIj4KLQkJPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBUbyIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJCaWxsVG8iLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU29sZFRvIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBheUZyb20iLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU3VwcGxpZXIiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUmVtaXRUbyIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJDYXJyaWVyIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkJyb2tlciIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFbXBsb3llZSIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJKViIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJQdWJsaXNoZXIiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTWFudWZhY3R1cmVyIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlNoaXBGcm9tIi8+Ci0JCTwveHM6cmVzdHJpY3Rpb24+Ci0JPC94czpzaW1wbGVUeXBlPgotCTx4czpzaW1wbGVUeXBlIG5hbWU9IlBBWU1FVEhPRCI+Ci0JCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciLz4KLQk8L3hzOnNpbXBsZVR5cGU+Ci0JPHhzOnNpbXBsZVR5cGUgbmFtZT0iUkVBU09OQ09ERSI+Ci0JCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciLz4KLQk8L3hzOnNpbXBsZVR5cGU+Ci0JPHhzOnNpbXBsZVR5cGUgbmFtZT0iU0NITElORU5VTSI+Ci0JCTwhLS0gZnV0dXJlIHhzOmRlY2ltYWwgIC0tPgotCQk8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c3RyaW5nIi8+Ci0JPC94czpzaW1wbGVUeXBlPgotCTx4czpzaW1wbGVUeXBlIG5hbWU9IlNUQVRVU0xWTCI+Ci0JCTx4czphbm5vdGF0aW9uPgotCQkJPHhzOmRvY3VtZW50YXRpb24+MDAgLSBTdWNjZXNzLCA5OSAtIEZhaWx1cmU8L3hzOmRvY3VtZW50YXRpb24+Ci0JCTwveHM6YW5ub3RhdGlvbj4KLQkJPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmludGVnZXIiPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIwMCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSI5OSIvPgotCQk8L3hzOnJlc3RyaWN0aW9uPgotCTwveHM6c2ltcGxlVHlwZT4KLQk8eHM6c2ltcGxlVHlwZSBuYW1lPSJTVUJMSU5FTlVNIj4KLQkJPCEtLSBmdXR1cmUgeHM6ZGVjaW1hbCAgLS0+Ci0JCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciLz4KLQk8L3hzOnNpbXBsZVR5cGU+Ci0JPHhzOnNpbXBsZVR5cGUgbmFtZT0iVEFYQ09ERSI+Ci0JCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciLz4KLQk8L3hzOnNpbXBsZVR5cGU+Ci0JPHhzOnNpbXBsZVR5cGUgbmFtZT0iVEFYSlJTRENUTiI+Ci0JCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciLz4KLQk8L3hzOnNpbXBsZVR5cGU+Ci0JPHhzOnNpbXBsZVR5cGUgbmFtZT0iVEVSTUlEIj4KLQkJPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyIvPgotCTwveHM6c2ltcGxlVHlwZT4KLQk8eHM6ZWxlbWVudCBuYW1lPSJOT1VOIiB0eXBlPSJOT1VOIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUkVWSVNJT04iIHR5cGU9IlJFVklTSU9OIi8+Ci0JPCEtLSBBVzogc3VwcG9ydCBCU1IgVHlwZSAtIEVuZCAtLT4KLQk8IS0tIEFXOiBCZWxvdyBzdXBwb3J0IFNFTkRFUiBUeXBlIC0gU3RhcnQgLS0+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iTE9HSUNBTElEIiB0eXBlPSJMT0dJQ0FMSUQiLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJDT01QT05FTlQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlRBU0siIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlJFRkVSRU5DRUlEIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJDT05GSVJNQVRJT04iIHR5cGU9IkNPTkZJUk1BVElPTiIvPgotCTx4czplbGVtZW50IG5hbWU9IkxBTkdVQUdFIiB0eXBlPSJMQU5HVUFHRSIvPgotCTx4czplbGVtZW50IG5hbWU9IkNPREVQQUdFIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJBVVRISUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTwhLS0gRW5kIC0gU3VwcG9ydCBTRU5ERVIgVHlwZSAtLT4KLQk8IS0tIFN0YXJ0IC0gU3VwcG9ydCBEQVRFVElNRSBUeXBlIC0tPgotCTx4czplbGVtZW50IG5hbWU9IllFQVIiIHR5cGU9InhzOmdZZWFyIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iTU9OVEgiIHR5cGU9InhzOmludGVnZXIiLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJEQVkiIHR5cGU9InhzOmludGVnZXIiLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJIT1VSIiB0eXBlPSJ4czppbnRlZ2VyIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iTUlOVVRFIiB0eXBlPSJ4czppbnRlZ2VyIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU0VDT05EIiB0eXBlPSJ4czppbnRlZ2VyIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU1VCU0VDT05EIiB0eXBlPSJ4czppbnRlZ2VyIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iVElNRVpPTkUiIHR5cGU9InhzOnN0cmluZyIvPgotCTwhLS0gRW5kIC0gU3VwcG9ydCBEQVRFVElNRSBUeXBlIC0tPgotCTwhLS0gU3RhcnQgLSBBbHBoYWJldGljYWwgZnJvbSBoZXJlIG9uIC0tPgotCTx4czplbGVtZW50IG5hbWU9IkFCU0VOQ0VUWVAiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkFDQ1RQRVJJT0QiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkFDQ1RUWVBFIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJBQ0NUWUVBUiIgdHlwZT0ieHM6aW50ZWdlciIvPgotCTx4czplbGVtZW50IG5hbWU9IkFDS0NPREUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkFDS01PREUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkFDS1JFUVVFU1QiPgotCQk8eHM6c2ltcGxlVHlwZT4KLQkJCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPgotCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iMCIvPgotCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iMSIvPgotCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iMiIvPgotCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTk9BQ0siLz4KLQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik9OQ0hBTkdFIi8+Ci0JCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJZRVNBQ0siLz4KLQkJCTwveHM6cmVzdHJpY3Rpb24+Ci0JCTwveHM6c2ltcGxlVHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQUNUSU9OQ09ERSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQUNUSVZFIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJBQ1RUWVBFIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJBRERSTElORSI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzaW1wbGVDb250ZW50PgotCQkJCTx4czpleHRlbnNpb24gYmFzZT0ieHM6c3RyaW5nIj4KLQkJCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJpbmRleCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JCQkJPC94czpleHRlbnNpb24+Ci0JCQk8L3hzOnNpbXBsZUNvbnRlbnQ+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IkFERFJUWVBFIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJBTExPV1RZUEUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkFQUFJPVkFMIiB0eXBlPSJ4czpib29sZWFuIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQVBQUk9WRSIgdHlwZT0ieHM6Ym9vbGVhbiIvPgotCTx4czplbGVtZW50IG5hbWU9IkFQUFJPVkVEIiB0eXBlPSJ4czpib29sZWFuIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQVBQUk9WRVJJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQVVUSENPREUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkJBQ0tPUkRJTkQiIHR5cGU9InhzOmJvb2xlYW4iLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJCSUxMT0xBRE5HIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJCS1RZUEUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkJPTUFMVElEIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJCT01JRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQk9NTkFNRSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQk9NUkVWSVNPTiIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQk9NU1RBVFVTIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJCT01UWVBFIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJCT01VU0FHRSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQlVER1NUQVQiIHR5cGU9InhzOmludGVnZXIiLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJCVURHVFhOIiB0eXBlPSJ4czpib29sZWFuIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQlVER1ZFUiIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQlVTTkFSRUEiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkJVWUVSSUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkNBUlJJRVIiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkNBUlJTUlZMVkwiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkNBVEFMR05BTUUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkNBVEFMT0dSViIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQ0hBUkdFSUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkNIQVJHRVRZUEUiIHR5cGU9IkNIQVJHRVRZUEUiLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJDSEdMSU5FTlVNIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8IS0tIGZ1dHVyZSB4czpkZWNpbWFsICAtLT4KLQk8eHM6ZWxlbWVudCBuYW1lPSJDSVRZIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJDTEFTU0ZOIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNpbXBsZUNvbnRlbnQ+Ci0JCQkJPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpzdHJpbmciPgotCQkJCQk8eHM6YXR0cmlidXRlIG5hbWU9ImluZGV4IiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJCQk8L3hzOmV4dGVuc2lvbj4KLQkJCTwveHM6c2ltcGxlQ29udGVudD4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQ0xBU1NGTklEIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJDTEFTU0xFVkVMIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJDTFNTU0NITVJWIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJDTFNFTE1MVkwiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkNMU1NFTE1UIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNpbXBsZUNvbnRlbnQ+Ci0JCQkJPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpzdHJpbmciPgotCQkJCQk8eHM6YXR0cmlidXRlIG5hbWU9ImluZGV4IiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJCQk8L3hzOmV4dGVuc2lvbj4KLQkJCTwveHM6c2ltcGxlQ29udGVudD4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQ0xTU0xNTlRJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQ0xTU1NDSE1JRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQ01QUlNOSUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkNNUFJTTlRZUEUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkNOVENUVFlQRSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQ09NTUVOVFMiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkNPTU1PRElUWSI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzaW1wbGVDb250ZW50PgotCQkJCTx4czpleHRlbnNpb24gYmFzZT0ieHM6c3RyaW5nIj4KLQkJCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJpbmRleCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JCQkJPC94czpleHRlbnNpb24+Ci0JCQk8L3hzOnNpbXBsZUNvbnRlbnQ+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IkNPTVBMRVZFTCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQ09NUFJFRkRFUyIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQ09ORFNUQVRVUyIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQ09OU0xJTkVOVU0iIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkNPTlNVTVBUTiIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQ09OVEFJTlJJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQ09OVENUVFlQRSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQ09OVE5SU0VBTCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQ09OVE5SVFlQRSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQ09OVFJBQ1RCIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJDT05UUkFDVElEIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJDT05UUkFDVFMiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkNPU1RDRU5URVIiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkNPU1RUWVBFIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJDT1VOVFJZIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJDT1VOVFJZRFNUIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJDT1VOVFJZT1JHIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJDT1VOVFkiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkNSQUZUSUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkNUQ0hXQ09OViIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQ1RDSFdGTEFHIiB0eXBlPSJ4czppbnRlZ2VyIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQ1VSUkVOQ1kiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkNVUlJGUk9NIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJDVVJSVE8iIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkRBVEVUWVBFIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJEQVlPRk1PTlRIIiB0eXBlPSJ4czppbnRlZ2VyIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iREFZU05VTSIgdHlwZT0ieHM6aW50ZWdlciIvPgotCTx4czplbGVtZW50IG5hbWU9IkRFRkFVTFQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkRFRkxUVkFMVUUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkRFTElWRVJUTyIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iREVOU0lUWUZBQyIgdHlwZT0ieHM6aW50ZWdlciIvPgotCTx4czplbGVtZW50IG5hbWU9IkRFUEFSVE1FTlQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkRFU0NSSVBUTiIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iRElTQ1JQVFlQRSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iRElTUE9TSVROIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJESVNQT1NJVE9OIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJESVNUQ0VOVEVSIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJESVZJU0lPTiIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iRE9DS0lEIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJET0NUWVBFIiB0eXBlPSJET0NUWVBFIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iRE9DVU1FTlRJRCIgdHlwZT0iRE9DVU1FTlRJRCIvPgotCTx4czplbGVtZW50IG5hbWU9IkRPQ1VNRU5UUlYiIHR5cGU9IkRPQ1VNRU5UUlYiLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJEUkFXSU5HIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJEUkNSIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJEUk9QU0hJUCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iRFNQU1ROSU5WIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJEVU5TTlVNQkVSIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJFQ09BUFBTVEFUIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJFQ09OQU1FIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJFQ09QUklPUklUWSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iRUNPUkVWSVNPTiIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iRUNPVFlQRSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iRUxFTUVOVCI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzaW1wbGVDb250ZW50PgotCQkJCTx4czpleHRlbnNpb24gYmFzZT0ieHM6c3RyaW5nIj4KLQkJCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJpbmRleCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JCQkJPC94czpleHRlbnNpb24+Ci0JCQk8L3hzOnNpbXBsZUNvbnRlbnQ+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IkVNQUlMIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJFTVBDQVRFR1JZIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJFTVBERVBUIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJFTVBMT1lFRUlEIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJFTVBOQU1FIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJFTVBRVUFMSUYiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkVNUFNUQVRVUyIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iRU5ESVRFTUlEIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJFWENMVVNJVkUiIHR5cGU9InhzOmJvb2xlYW4iLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJFWENQTElOTlVNIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJFWENQVE5DT0RFIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJFWFBJUkVGTEFHIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJFWFBPUlRMSUMiIHR5cGU9InhzOmJvb2xlYW4iLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJGQUNUT1IiIHR5cGU9InhzOmludGVnZXIiLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJGQUlMQ0xBU1MiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkZBSUxDT0RFIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJGQUlMVFlQRSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iRkFJTFVSRUlEIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJGQVgiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2ltcGxlQ29udGVudD4KLQkJCQk8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOnN0cmluZyI+Ci0JCQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iaW5kZXgiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzOnN0cmluZyIvPgotCQkJCTwveHM6ZXh0ZW5zaW9uPgotCQkJPC94czpzaW1wbGVDb250ZW50PgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJGRUFUVVJFSUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkZFQVRWQUwiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkZJRUxESUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkZJRUxEVkFMVUUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkZJTEVOQU1FIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJGSUxFVFlQRSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iRklYRFFUWUlORCIgdHlwZT0ieHM6Ym9vbGVhbiIvPgotCTx4czplbGVtZW50IG5hbWU9IkZJWEVEQVNTRVQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkZMRVhCS1RJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iRlJFSUdIVENMUyIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iRlJHSFRDTFMiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkZSR0hUSVRFTSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iRlJHSFRURVJNUyIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iRlJNSVRNQ0xTUyIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iRlJNSVRNTk0iIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkZSTUlUTU5NUlYiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkZSTVNJVEVMVkwiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2ltcGxlQ29udGVudD4KLQkJCQk8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOnN0cmluZyI+Ci0JCQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iaW5kZXgiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzOnN0cmluZyIvPgotCQkJCTwveHM6ZXh0ZW5zaW9uPgotCQkJPC94czpzaW1wbGVDb250ZW50PgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJGUk9NUEFSVFkiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkZUREFUQVRZUEUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkZUR1JPVVAiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkZUVkFMSU5EIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJGVFZBTFFVQUwiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkZVTkQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkdFT0dSQVBIWSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iR0xFTlRJVFlEIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJHTEVOVElUWVMiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkdMTk9NQUNDVCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iSEFaUkRNQVRMIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJIRFJTVEFUVVMiIHR5cGU9InhzOmludGVnZXIiLz4KLQk8IS0tCTx4czplbGVtZW50IG5hbWU9IkhPVVIiIHR5cGU9InhzOmludGVnZXIiLz4gIGRlZidkIGFib3ZlIC0tPgotCTx4czplbGVtZW50IG5hbWU9IkhST1JHIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNpbXBsZUNvbnRlbnQ+Ci0JCQkJPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpzdHJpbmciPgotCQkJCQk8eHM6YXR0cmlidXRlIG5hbWU9ImluZGV4IiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJCQk8L3hzOmV4dGVuc2lvbj4KLQkJCTwveHM6c2ltcGxlQ29udGVudD4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iSU1QT1JUTElDIiB0eXBlPSJ4czpib29sZWFuIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iSU5DUExBTkZMRyIgdHlwZT0ieHM6Ym9vbGVhbiIvPgotCTx4czplbGVtZW50IG5hbWU9IklORExJTkVOVU0iIHR5cGU9InhzOnN0cmluZyIvPgotCTwhLS0gZnV0dXJlIHhzOmRlY2ltYWwgIC0tPgotCTx4czplbGVtZW50IG5hbWU9IklOTVJQUExBTiIgdHlwZT0ieHM6Ym9vbGVhbiIvPgotCTx4czplbGVtZW50IG5hbWU9IklOUVVFVUVJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iSU5TTElORU5VTSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPCEtLSBmdXR1cmUgeHM6ZGVjaW1hbCAgLS0+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iSU5TUERPQ1JFViIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iSU5TUEVDVERPQyIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iSU5TUEVDVFJJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iSU5WRU5ESVNQIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJJTlZMSU5FTlVNIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8IS0tIGZ1dHVyZSB4czpkZWNpbWFsICAtLT4KLQk8eHM6ZWxlbWVudCBuYW1lPSJJVEVNIiB0eXBlPSJJVEVNIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iSVRFTVgiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IklURU1DQVRJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iSVRFTUNMQVNTIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJJVEVNQ0xBU1NJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iSVRFTURFRk4iIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IklURU1ERVNDIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJJVEVNUlYiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IklURU1SVlgiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IklURU1TVEFUVVMiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IklURU1UWVBFIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJJVEVNVkFSIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJJVE1GVFZBTCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iSVRNSURGTEciIHR5cGU9InhzOmJvb2xlYW4iLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJKRUlEIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJKT0JDT0RFIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJKUElEIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJLQU5CQU4iIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkxBQk9SSUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkxFREdFUiIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iTElORSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iTElORUZFRUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkxJTkVOVU0iIHR5cGU9InhzOnN0cmluZyIvPgotCTwhLS0gZnV0dXJlIHhzOmRlY2ltYWwgIC0tPgotCTx4czplbGVtZW50IG5hbWU9IkxJTkVUWVBFIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJMT0FEUE9JTlQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IkxPQ0siIHR5cGU9InhzOmludGVnZXIiLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJMT1RMRVZFTCI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzaW1wbGVDb250ZW50PgotCQkJCTx4czpleHRlbnNpb24gYmFzZT0ieHM6c3RyaW5nIj4KLQkJCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJpbmRleCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JCQkJPC94czpleHRlbnNpb24+Ci0JCQk8L3hzOnNpbXBsZUNvbnRlbnQ+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IkxPVFNORkxBRyIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iTUFDSENMQVNTIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJNQUNISUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9Ik1BQ0hJTkVJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iTUFDSFNUQVRFIiB0eXBlPSJ4czpib29sZWFuIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iTUFDSFNVREVQIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJNQUNIVFlQRSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iTUFJTlRDQUxJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iTUFJTlRMT0NJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iTUFJTlRPUkRJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iTUFOREFUT1JZIiB0eXBlPSJ4czpib29sZWFuIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iTUFUQ0hUWVBFIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJNQ0hET0NJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iTUNIRE9DVFlQRSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iTUNITElORU5VTSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPCEtLSBmdXR1cmUgeHM6ZGVjaW1hbCAgLS0+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iTU9QQVJFTlRJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iTU9QUklPUklUWSIgdHlwZT0ieHM6aW50ZWdlciIvPgotCTx4czplbGVtZW50IG5hbWU9Ik1PU1RBVFVTIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJNT1RZUEUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9Ik1TRFNJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iTVNHSUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9Ik1TR1RFWFQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9Ik1TR1RZUEUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9Ik5BTUUiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2ltcGxlQ29udGVudD4KLQkJCQk8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOnN0cmluZyI+Ci0JCQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iaW5kZXgiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzOnN0cmluZyIvPgotCQkJCTwveHM6ZXh0ZW5zaW9uPgotCQkJPC94czpzaW1wbGVDb250ZW50PgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJORVdJVE1SRVYiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9Ik5FV1JFVkZMQUciIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9Ik5PVEVTIiB0eXBlPSJOT1RFUyIvPgotCTx4czpjb21wbGV4VHlwZSBuYW1lPSJOT1RFUyI+Ci0JCTx4czpzaW1wbGVDb250ZW50PgotCQkJPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpzdHJpbmciPgotCQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iaW5kZXgiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzOnN0cmluZyIvPgotCQkJPC94czpleHRlbnNpb24+Ci0JCTwveHM6c2ltcGxlQ29udGVudD4KLQk8L3hzOmNvbXBsZXhUeXBlPgotCTx4czplbGVtZW50IG5hbWU9Ik5VTU9GREVDIiB0eXBlPSJ4czppbnRlZ2VyIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iT0lMSU5FTlVNIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8IS0tIGZ1dHVyZSB4czpkZWNpbWFsICAtLT4KLQk8eHM6ZWxlbWVudCBuYW1lPSJPTERJVE1SRVYiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9Ik9ORVRJTUUiIHR5cGU9InhzOmJvb2xlYW4iLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJPUEVOSVRFTSIgdHlwZT0ieHM6Ym9vbGVhbiIvPgotCTx4czplbGVtZW50IG5hbWU9Ik9QRVJBVE5BTUUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9Ik9QRVJBVE5JRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iT1BFUkFUTlNFUSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iT1BFUkFUVFlQRSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iT1BSQU1UQVVUSCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iT1BSR1JQTkFNRSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iT1BSR1JQVFlQRSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iT1BTVEFUVVMiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9Ik9QVENMU05BTUUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9Ik9QVENMU1NJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iT1BUSU9OSUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9Ik9QVElPTk5BTUUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9Ik9SSUdSRUYiIHR5cGU9Ik9SSUdSRUYiLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJPVEVMSUdJQkxFIiB0eXBlPSJ4czpib29sZWFuIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iT1VUUVVFVUVJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iT1ZFUklEUFJJQyIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iT1ZFUlRJTUUiIHR5cGU9InhzOmJvb2xlYW4iLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJPV05SU0hQQ0RFIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJQQUNLSU5HIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJQQUNLTkdERVNDIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJQQVJDTlROUklEIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJQQVJFTlRJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUEFSRU5UTE9UIiB0eXBlPSJQQVJFTlRMT1QiLz4KLQk8eHM6Y29tcGxleFR5cGUgbmFtZT0iUEFSRU5UTE9UIj4KLQkJPHhzOnNpbXBsZUNvbnRlbnQ+Ci0JCQk8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOnN0cmluZyI+Ci0JCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJpbmRleCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JCQk8L3hzOmV4dGVuc2lvbj4KLQkJPC94czpzaW1wbGVDb250ZW50PgotCTwveHM6Y29tcGxleFR5cGU+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUEFSRU5UU05VTSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUEFSVElBTFNIUCIgdHlwZT0ieHM6Ym9vbGVhbiIvPgotCTx4czplbGVtZW50IG5hbWU9IlBBUlROUklEIiB0eXBlPSJQQVJUTlJJRCIvPgotCTx4czplbGVtZW50IG5hbWU9IlBBUlROUklEWCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUEFSVE5SUkFURyIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUEFSVE5SUk9MRSIgdHlwZT0ieHM6aW50ZWdlciIvPgotCTx4czplbGVtZW50IG5hbWU9IlBBUlROUlRZUEUiIHR5cGU9IlBBUlROUlRZUEUiLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJQQVlNRVRIT0QiIHR5cGU9IlBBWU1FVEhPRCIvPgotCTx4czplbGVtZW50IG5hbWU9IlBFUlNPTkNPREUiIHR5cGU9IlJFQVNPTkNPREUiLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJQSUNMSU5FTlVNIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8IS0tIGZ1dHVyZSB4czpkZWNpbWFsICAtLT4KLQk8eHM6ZWxlbWVudCBuYW1lPSJQTEFOTkVSSUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlBNSUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlBPRU5USVRZIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJQT0lEIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJQT0xJTkVOVU0iIHR5cGU9InhzOnN0cmluZyIvPgotCTwhLS0gZnV0dXJlIHhzOmRlY2ltYWwgIC0tPgotCTx4czplbGVtZW50IG5hbWU9IlBPTE5TVEFUVVMiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlBPUkVMRUFTRSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUE9TSVRJT04iIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlBPU1RBTENPREUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlBPU1RBVFVTIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJQT1RZUEUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlBSQ0VTU0NPREUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlBSRExJTkVOVU0iIHR5cGU9InhzOnN0cmluZyIvPgotCTwhLS0gZnV0dXJlIHhzOmRlY2ltYWwgIC0tPgotCTx4czplbGVtZW50IG5hbWU9IlBSRUZFUkVOQ0UiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlBSSUNFQ09ERSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUFJJQ0VMU1RJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUFJJQ0VMU1RSViIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUFJJQ0VUWVBFIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJQUklOVCIgdHlwZT0ieHM6Ym9vbGVhbiIvPgotCTx4czplbGVtZW50IG5hbWU9IlBSSU5UQ05UTCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUFJJT1JJVFkiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlBSTlRDTFNFTE0iIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlBST0RDVExJTkUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlBST0RPUkRFUiIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUFJPRE9SRElEIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJQUk9ET1NUQVRTIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJQUk9ET1RZUEUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlBST0RTRVFCRUciIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlBST0RTRVFFTkQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlBST0RTRVFOVU0iIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlBST0ZJVENUUiIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUFJPSkFDVFNUUyIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUFJPSkFDVFZUWSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUFJPSkVDVCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUFJPSlJFU0VMIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNpbXBsZUNvbnRlbnQ+Ci0JCQkJPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpzdHJpbmciPgotCQkJCQk8eHM6YXR0cmlidXRlIG5hbWU9ImluZGV4IiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJCQk8L3hzOmV4dGVuc2lvbj4KLQkJCTwveHM6c2ltcGxlQ29udGVudD4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUFJPSlNUQVRVUyIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUFJPSlRYVFlQRSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUFJPUEVSVFkiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2ltcGxlQ29udGVudD4KLQkJCQk8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOnN0cmluZyI+Ci0JCQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iaW5kZXgiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzOnN0cmluZyIvPgotCQkJCTwveHM6ZXh0ZW5zaW9uPgotCQkJPC94czpzaW1wbGVDb250ZW50PgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJQUk9YTU9OVEgiIHR5cGU9InhzOmludGVnZXIiLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJQU0JMSU5FTlVNIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8IS0tIGZ1dHVyZSB4czpkZWNpbWFsICAtLT4KLQk8eHM6ZWxlbWVudCBuYW1lPSJQU0NMSU5FTlVNIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8IS0tIGZ1dHVyZSB4czpkZWNpbWFsICAtLT4KLQk8eHM6ZWxlbWVudCBuYW1lPSJQU0RMSU5FTlVNIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8IS0tIGZ1dHVyZSB4czpkZWNpbWFsICAtLT4KLQk8eHM6ZWxlbWVudCBuYW1lPSJQU1NUQVRVUyIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUFVCTElTSEVSIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJRU0xJTkVOVU0iIHR5cGU9InhzOnN0cmluZyIvPgotCTwhLS0gZnV0dXJlIHhzOmRlY2ltYWwgIC0tPgotCTx4czplbGVtZW50IG5hbWU9IlFTTElORVNUQVQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlFTTElORVRZUEUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlFURUlEIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJRVEVJRFgiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlFURUxJTkVOVU0iIHR5cGU9InhzOnN0cmluZyIvPgotCTwhLS0gZnV0dXJlIHhzOmRlY2ltYWwgIC0tPgotCTx4czplbGVtZW50IG5hbWU9IlFURUxOU1RBVCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUVRFUkVWSVNPTiIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUVRFU1RBVFVTIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJRVEVUWVBFIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJRVUFMRk5JRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUVVBTEZOVFlQRSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUVVBTEZOVkFMIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJRVUFMSUYiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlJBVEVUWVBFIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJSRUFTT05DT0RFIiB0eXBlPSJSRUFTT05DT0RFIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUkVDRUlQVElEIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJSRUNFSVBUWVBFIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJSRUNFUFRESVNQIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJSRUNMSU5FTlVNIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8IS0tIGZ1dHVyZSB4czpkZWNpbWFsICAtLT4KLQk8eHM6ZWxlbWVudCBuYW1lPSJSRUYiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2ltcGxlQ29udGVudD4KLQkJCQk8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOnN0cmluZyI+Ci0JCQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iaW5kZXgiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzOnN0cmluZyIvPgotCQkJCTwveHM6ZXh0ZW5zaW9uPgotCQkJPC94czpzaW1wbGVDb250ZW50PgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJSRUdJT04iIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlJFTElURU1JRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUkVMTE9DSUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlJFTE1BQ0hJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUkVNSVRUQU5DRSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUkVQUlRHRkxBRyIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUkVRTElORU5VTSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUkVRTE5TVEFUIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJSRVFVRVNURVIiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlJFUVVJU1ROSUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlJFU09SQ0VVU0UiIHR5cGU9InhzOnN0cmluZyIvPgotCTwhLS0gRGVwcmVjYXRlZCAtLT4KLQkJPHhzOmVsZW1lbnQgbmFtZT0iUkVTT1JDS0lOIiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJPHhzOmVsZW1lbnQgbmFtZT0iUkVTT1JDVVNFIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8IS0tIERlcHJlY2F0ZWQJLS0+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUkVTT1JDR1JQIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJSRVNPUkNMVkwiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlJFU09SQ1RZUCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUkVTT1VSQ0VJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUkVTVFJJQ1ROIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8IS0tCTx4czplbGVtZW50IG5hbWU9IlJFVklTSU9OIj4gICBBbHJlYWR5IGRlZmluZWQgYWJvdmUgLS0+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUkVWSVRNU1RBVCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUkZRSUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlJGUUlEWCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUkZRTElORU5VTSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPCEtLSBmdXR1cmUgeHM6ZGVjaW1hbCAgLS0+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUkZRTE5TVEFUIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJSRlFOQU1FIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJSRlFSRVZJU09OIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJSRlFTVEFUVVMiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlJGUVRZUEUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlJPVVRFSUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlJPVVRFTEVWRUwiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2ltcGxlQ29udGVudD4KLQkJCQk8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOnN0cmluZyI+Ci0JCQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iaW5kZXgiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzOnN0cmluZyIvPgotCQkJCTwveHM6ZXh0ZW5zaW9uPgotCQkJPC94czpzaW1wbGVDb250ZW50PgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJST1VURVRZUEUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlJPVVRFVkFSIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJST1VUSU5HSUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlJPVVRJTkdSRVYiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlJPVVRJTkdWQVIiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlJRU0xJTkVOVU0iIHR5cGU9InhzOnN0cmluZyIvPgotCTwhLS0gZnV0dXJlIHhzOmRlY2ltYWwgIC0tPgotCTx4czplbGVtZW50IG5hbWU9IlJTQkxJTkVOVU0iIHR5cGU9InhzOnN0cmluZyIvPgotCTwhLS0gZnV0dXJlIHhzOmRlY2ltYWwgIC0tPgotCTx4czplbGVtZW50IG5hbWU9IlJTTElORU5VTSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPCEtLSBmdXR1cmUgeHM6ZGVjaW1hbCAgLS0+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUlNMSU5FVFlQRSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iUlNQTElOTlVNIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8IS0tIGZ1dHVyZSB4czpkZWNpbWFsICAtLT4KLQk8eHM6ZWxlbWVudCBuYW1lPSJSU1BSRVZOVU0iIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlJTUFNDSEVESUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlJTUFNETE5VTSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU0FGRVRZSUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlNBRkVUWVRZUEUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlNBRlRZQ0xBU1MiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlNBTEVTT1JESUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlNBTEVTT1JHIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNpbXBsZUNvbnRlbnQ+Ci0JCQkJPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpzdHJpbmciPgotCQkJCQk8eHM6YXR0cmlidXRlIG5hbWU9ImluZGV4IiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJCQk8L3hzOmV4dGVuc2lvbj4KLQkJCTwveHM6c2ltcGxlQ29udGVudD4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU0FMRVNQRVJTTiIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU0FWRVNFVFVQIiB0eXBlPSJ4czpib29sZWFuIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU0NIRFVMRVRZUCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU0NIRURVTEVJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU0NITElORU5VTSIgdHlwZT0iU0NITElORU5VTSIvPgotCTx4czplbGVtZW50IG5hbWU9IlNDUkFQIiB0eXBlPSJ4czpib29sZWFuIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU0VSSUFMTlVNIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTRVFOQ0VOVU0iIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlNISUZUIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTSElQTUFUTElEIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTSElQTk9URVMiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlNISVBQRVJJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU0hJUFBFUk5VTSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU0hJUFBPSU5UIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTSElQUFJJT1IiIHR5cGU9InhzOmJvb2xlYW4iLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTSElQU1JWTFZMIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTSFBNVExERVNDIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTSFBVTklUU0VRIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTSFBVTklUU1RTIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTSFBVTklUVE9UIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTSUdOIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTSVRFTEVWRUwiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2ltcGxlQ29udGVudD4KLQkJCQk8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOnN0cmluZyI+Ci0JCQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iaW5kZXgiIHVzZT0icmVxdWlyZWQiIHR5cGU9InhzOnN0cmluZyIvPgotCQkJCTwveHM6ZXh0ZW5zaW9uPgotCQkJPC94czpzaW1wbGVDb250ZW50PgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTT0xJTkVOVU0iIHR5cGU9InhzOnN0cmluZyIvPgotCTwhLS0gZnV0dXJlIHhzOmRlY2ltYWwgIC0tPgotCTx4czplbGVtZW50IG5hbWU9IlNPTE5TVEFUVVMiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlNPU0xJTkVOVU0iIHR5cGU9InhzOnN0cmluZyIvPgotCTwhLS0gZnV0dXJlIHhzOmRlY2ltYWwgIC0tPgotCTx4czplbGVtZW50IG5hbWU9IlNPU1RBVFVTIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTUEVDSUFMSE5EIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTUExJVEFCTEUiIHR5cGU9InhzOmJvb2xlYW4iLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTVEFHRVBPSU5UIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTVEFURVBST1ZOIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTVEFUVVNMVkwiIHR5cGU9IlNUQVRVU0xWTCIvPgotCTx4czplbGVtZW50IG5hbWU9IlNURVBJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU1RFUE5VTSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU1RFUFRZUEUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlNVQkxJTkVOVU0iIHR5cGU9IlNVQkxJTkVOVU0iLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJTVUJTRkxBRyIgdHlwZT0ieHM6Ym9vbGVhbiIvPgotCTx4czplbGVtZW50IG5hbWU9IlNVRkZJWCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU1VQRVJWSVNPUiIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU1lOQ0lORCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPCEtLSBTZWUgYWJvdmUKLQk8eHM6ZWxlbWVudCBuYW1lPSJUQVNLIiB0eXBlPSJUQVNLIi8+Ci0JPHhzOnNpbXBsZVR5cGUgbmFtZT0iVEFTSyI+Ci0JCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPgotCQkJPHhzOm1heExlbmd0aCB2YWx1ZT0iMTAiLz4KLQkJPC94czpyZXN0cmljdGlvbj4KLQk8L3hzOnNpbXBsZVR5cGU+IC0tPgotCTx4czplbGVtZW50IG5hbWU9IlRBWENPREUiIHR5cGU9IlRBWENPREUiLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJUQVhFWEVNUFQiIHR5cGU9InhzOmJvb2xlYW4iLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJUQVhJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iVEFYSlJTRENUTiIgdHlwZT0iVEFYSlJTRENUTiIvPgotCTx4czplbGVtZW50IG5hbWU9IlRBWExJTkUiIHR5cGU9InhzOmJvb2xlYW4iLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJUQVhXSEVYTVBUIiB0eXBlPSJ4czpib29sZWFuIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iVEVMRVBIT05FIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNpbXBsZUNvbnRlbnQ+Ci0JCQkJPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpzdHJpbmciPgotCQkJCQk8eHM6YXR0cmlidXRlIG5hbWU9ImluZGV4IiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4czpzdHJpbmciLz4KLQkJCQk8L3hzOmV4dGVuc2lvbj4KLQkJCTwveHM6c2ltcGxlQ29udGVudD4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iVEVSTUZMQUciIHR5cGU9InhzOmJvb2xlYW4iLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJURVJNSUQiIHR5cGU9IlRFUk1JRCIvPgotCTx4czplbGVtZW50IG5hbWU9IlRJVExFIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJUT0lUTUNMU1MiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlRPSVRNTk0iIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlRPSVRNTk1SViIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iVE9PTENMQVNTIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJUT09MSUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlRPUEFSVFkiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlRPU0lURUxWTCI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzaW1wbGVDb250ZW50PgotCQkJCTx4czpleHRlbnNpb24gYmFzZT0ieHM6c3RyaW5nIj4KLQkJCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJpbmRleCIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JCQkJPC94czpleHRlbnNpb24+Ci0JCQk8L3hzOnNpbXBsZUNvbnRlbnQ+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IlRSQUNLRkxHIiB0eXBlPSJ4czpib29sZWFuIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iVFJBQ0tJTkdJRCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iVFJBS05HRkxBRyIgdHlwZT0ieHM6Ym9vbGVhbiIvPgotCTx4czplbGVtZW50IG5hbWU9IlRSQU5TTUVUSEQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlRSQU5TVEVSTVMiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlRSTlNGUlRZUEUiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlRYQU5BTFlTSVMiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlVOSVQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlVOSVRUWVBFIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJVT00iIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlVPTUdST1VQSUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlVPTU5VTURFQyIgdHlwZT0ieHM6aW50ZWdlciIvPgotCTx4czplbGVtZW50IG5hbWU9IlVPTVZBTFVFIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJVUEMiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlVQQ1BLR0lORCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iVVBDU0NDMTQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlVQRFRXSVBGRyIgdHlwZT0ieHM6Ym9vbGVhbiIvPgotCTx4czplbGVtZW50IG5hbWU9IlVSSSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPCEtLXhzOnVyaVJlZmVyZW5jZSAtLT4KLQk8eHM6ZWxlbWVudCBuYW1lPSJVUkwiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlVTQUdFUkVTVE4iIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlVTRVJBUkVBIiB0eXBlPSJVU0VSQVJFQSIvPgotCTx4czpjb21wbGV4VHlwZSBuYW1lPSJVU0VSQVJFQSIgbWl4ZWQ9InRydWUiPgotCQk8eHM6c2VxdWVuY2U+Ci0JCQk8eHM6YW55IG5hbWVzcGFjZT0iIyNhbnkiIHByb2Nlc3NDb250ZW50cz0ic2tpcCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQk8L3hzOnNlcXVlbmNlPgotCTwveHM6Y29tcGxleFR5cGU+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iVVNFUklEIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJVU0VVUElURU0iIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlVTVVBJTlZGRyIgdHlwZT0ieHM6Ym9vbGVhbiIvPgotCTx4czplbGVtZW50IG5hbWU9IlZBTFVFIiB0eXBlPSJ4czpkZWNpbWFsIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iVkFMVUVDTEFTUyIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iVk9VQ0hFUiIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iV0FHRUdST1VQIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJXQUdFVFlQRSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iV0FSRUhPVVNFIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJXQVJSQU5UWSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iV09SS0NFTlRFUiIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iV09SS09SREVSIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJXUktTQ0hESUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTx4czplbGVtZW50IG5hbWU9IlhSRUZUWVBFSUQiIHR5cGU9InhzOnN0cmluZyIvPgotCTwhLS0gRW5kIC0gU3VwcG9ydGluZyBGaWVsZHMgJiBUeXBlcyAtLT4KLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvd2xpL29hZ2lzX3NlZ21lbnRzLnhzZCBiL3YyL3Rlc3QvY2FzZXMvc2NoZW1hL3dsaS9vYWdpc19zZWdtZW50cy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5ZWNkN2YuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9jYXNlcy9zY2hlbWEvd2xpL29hZ2lzX3NlZ21lbnRzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDU2MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cub3BlbmFwcGxpY2F0aW9ucy5vcmcvb2FnaXNfc2VnbWVudHMiIHhtbG5zPSJodHRwOi8vd3d3Lm9wZW5hcHBsaWNhdGlvbnMub3JnL29hZ2lzX3NlZ21lbnRzIiB4bWxuczpvZj0iaHR0cDovL3d3dy5vcGVuYXBwbGljYXRpb25zLm9yZy9vYWdpc19maWVsZHMiIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCTx4czppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3Lm9wZW5hcHBsaWNhdGlvbnMub3JnL29hZ2lzX2ZpZWxkcyIgc2NoZW1hTG9jYXRpb249Im9hZ2lzX2ZpZWxkcy54c2QiLz4KLQk8eHM6YW5ub3RhdGlvbj4KLQkJPHhzOmRvY3VtZW50YXRpb24+Ci0JCQkKLQkJTGljZW5zZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBmaWxlIGlzIHByb3ZpZGVkIGluIExJQ0VOU0UuVFhULCBhcyBwdWJsaXNoZWQKLQkJb24gdGhlIE9wZW4gQXBwbGljYXRpb25zIEdyb3VwIHdlYiBzaXRlLiB3d3cub3BlbmFwcGxpY2F0aW9ucy5vcmcKLQkJCi0JCUZvciBzdXBwb3J0LCBtb3JlIGluZm9ybWF0aW9uLCBvciB0byByZXBvcnQgaW1wbGVtZW50YXRpb24gYnVncywKLQkJcGxlYXNlIGNvbnRhY3QgdGhlIE9wZW4gQXBwbGljYXRpb25zIEdyb3VwIGF0IHhtbEBvcGVuYXBwbGljYXRpb25zLm9yZwotCQkKLQkJJFJldmlzaW9uOiAxLjEgJAotCQkkRGF0ZTogMjAwMy8wOS8yNiAyMToyMzozOSAkCi0JCU9wZW4gQXBwbGljYXRpb25zIEdyb3VwIFhNTAotCQlDb3B5cmlnaHQgMTk5OC0yMDAxLCBBbGwgUmlnaHRzIFJlc2VydmVkCi0JCQotCQkkTmFtZTogICQKLQkJCi0JCWFqdwk3LjIuMQkxMC8zMS8yMDAxCVczQyBTY2hlbWEgUmVsZWFzZSAKLQkJCi0KLQkJU3RydWN0dXJlIE92ZXJ2aWV3Ci0JCQotCQkJVGhpcyBzY2hlbWEgZGVmaW5lcyB0aGUgT0FHSSBTZWdtZW50IGRhdGF0eXBlcyB1c2VkIHRocm91Z2hvdXQgdGhlIHNwZWNpZmljYXRpb24uCi0JCQlCZWxvdyBpcyBhbiBvdXRsaW5lIGRlcGljdGluZyB0aGVpciBwbGFjZW1lbnQgYW5kIHVzYWdlLgotCQkJCi0JCQlCT0QgTmFtZXNwYWNlICgiaHR0cDovL3d3dy5vcGVuYXBwbGljYXRpb25zLm9yZy9ubm5fdmVyYl9ub3VuX3JlbCIpCi0JCQkJfAotCQkJCXwtLS0gU2VnbWVudHMgTmFtZXNwYWNlIC0gb2FnaXNfc2VnbWVudHMueHNkIChvczogImh0dHA6Ly93d3cub3BlbmFwcGxpY2F0aW9ucy5vcmcvb2FnaXNfc2VnbWVudHMiKQotCQkJCXwJfAotCQkJCXwtLS0JfC0tLSBGaWVsZHMgTmFtZXNwYWNlIC0gb2FnaXNfZmllbGRzLnhzZCAob2Y6Imh0dHA6Ly93d3cub3BlbmFwcGxpY2F0aW9ucy5vcmcvb2FnaXNfZmllbGRzIikgCi0JCQkJCQotCQkJCQkKLQkJCQotCQk8L3hzOmRvY3VtZW50YXRpb24+Ci0JPC94czphbm5vdGF0aW9uPgotCTx4czplbGVtZW50IG5hbWU9IkNOVFJPTEFSRUEiIHR5cGU9IkNOVFJPTEFSRUEiLz4KLQk8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ05UUk9MQVJFQSI+Ci0JCTx4czpzZXF1ZW5jZT4KLQkJCTx4czplbGVtZW50IHJlZj0iQlNSIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9IlNFTkRFUiIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJEQVRFVElNRUFOWSIvPgotCQkJPCEtLSBFaXRoZXIgREFURVRJTUUgb3IgREFURVRJTUVJU08gLS0+Ci0JCTwveHM6c2VxdWVuY2U+Ci0JPC94czpjb21wbGV4VHlwZT4KLQk8eHM6ZWxlbWVudCBuYW1lPSJCU1IiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpWRVJCIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpOT1VOIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpSRVZJU0lPTiIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iU0VOREVSIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6TE9HSUNBTElEIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpDT01QT05FTlQiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOlRBU0siLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOlJFRkVSRU5DRUlEIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpDT05GSVJNQVRJT04iLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9Im9mOkxBTkdVQUdFIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpDT0RFUEFHRSIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6QVVUSElEIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJEQVRFVElNRUFOWSIgYWJzdHJhY3Q9InRydWUiLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJEQVRFVElNRUlTTyIgdHlwZT0iREFURVRJTUVJU08iIHN1YnN0aXR1dGlvbkdyb3VwPSJEQVRFVElNRUFOWSIvPgotCTx4czpjb21wbGV4VHlwZSBuYW1lPSJEQVRFVElNRUlTTyI+Ci0JCTx4czpzaW1wbGVDb250ZW50PgotCQkJPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czpkYXRlVGltZSI+Ci0JCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJxdWFsaWZpZXIiIHR5cGU9IkRBVEVUSU1FcXVhbCIvPgotCQkJPC94czpleHRlbnNpb24+Ci0JCTwveHM6c2ltcGxlQ29udGVudD4KLQk8L3hzOmNvbXBsZXhUeXBlPgotCTwhLS0gREFURVRJTUVJU08gLS0+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iREFURVRJTUUiIHR5cGU9IkRBVEVUSU1FIiBzdWJzdGl0dXRpb25Hcm91cD0iREFURVRJTUVBTlkiLz4KLQk8eHM6Y29tcGxleFR5cGUgbmFtZT0iREFURVRJTUUiPgotCQk8eHM6c2VxdWVuY2U+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOllFQVIiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6TU9OVEgiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6REFZIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOkhPVVIiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6TUlOVVRFIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOlNFQ09ORCIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpTVUJTRUNPTkQiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6VElNRVpPTkUiLz4KLQkJPC94czpzZXF1ZW5jZT4KLQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJxdWFsaWZpZXIiIHR5cGU9IkRBVEVUSU1FcXVhbCIgdXNlPSJyZXF1aXJlZCIvPgotCTwveHM6Y29tcGxleFR5cGU+Ci0JCTx4czpzaW1wbGVUeXBlIG5hbWU9IkRBVEVUSU1FdHlwZSI+Ci0JCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJBQ0NPVU5USU5HIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFDVEVORCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJBQ1RTVEFSVCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJBUFBSRVEiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQVBQUk9WQUwiLz4KLQkJPC94czpyZXN0cmljdGlvbj4KLQk8L3hzOnNpbXBsZVR5cGU+Ci0JPHhzOnNpbXBsZVR5cGUgbmFtZT0iREFURVRJTUVxdWFsIj4KLQkJPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFDQ09VTlRJTkciLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQUNURU5EIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFDVFNUQVJUIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFQUFJFUSIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJBUFBST1ZBTCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJBVkFJTEFCTEUiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQktURU5EIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkJLVFNUQVJUIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkNBTkNFTCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJDSEFOR0VEQVRFIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkNPTVBEQVRFIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkNPTlNVTUUiLz4JCQkKLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQ1JFQVRJT04iLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQ1VNVUxBVElWRSIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJERUxJVkFDVCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJERUxJVlNDSEVEIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRJU0NOVCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJET0NVTUVOVCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJEVUUiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRUFSTFNURUZGIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkVBUkxTVFNISVAiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRUZGRUNUSVZFIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkVOR0NIRyIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFWEVDRklOSVNIIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkVYRUNTVEFSVCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFWFBJUkFUSU9OIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkZBSUxEQVRFIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkZPUkVDQVNURiIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJGT1JFQ0FTVFMiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRlJPTSIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJHRU5FUkFUSU9OIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkpPQkRVRSIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJTVBMIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IklOVk9JQ0UiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTEFCT1JGSU5TSCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJMQUJPUlNUQVJUIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkxBU1RVU0VEIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkxPQURJTkciLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTUFUQ0hJTkciLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTVNNRU5UREFURSIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJORUVEREVMViIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJPUEZJTklTSCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJPUFNUQVJUIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBBWUVORCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJQTEFORU5EIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBMQU5TVEFSVCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJQTyIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJQUk9NREVMViIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJQUk9NU0hJUCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJQWU1UVEVSTSIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSRUNFSVZFRCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSRVBPUlREQVRFIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJFUE9SVE5HRk4iLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUkVQT1JUTkdTVCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSRVFVSVJFRCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSRVNPUkNEV05GIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJFU09SQ0RXTlMiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUlNQRERBVEUiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUlNQRE9DR0VOIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlNDSEVORCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTQ0hTVEFSVCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTRVRVUEZJTlNIIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlNFVFVQU1RBUlQiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU0hJUCIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTSElQU0NIRUQiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU1RBVFVTREFURSIvPgotCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJURUFSRE9XTkYiLz4KLQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVEVBUkRPV05TIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlRPIi8+Ci0JCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik9USEVSIi8+Ci0JCTwveHM6cmVzdHJpY3Rpb24+Ci0JPC94czpzaW1wbGVUeXBlPgotCTwhLS0gREFURVRJTUUgLS0+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQUREUkVTUyIgdHlwZT0iQUREUkVTUyIvPgotCTx4czpjb21wbGV4VHlwZSBuYW1lPSJBRERSRVNTIj4KLQkJPHhzOnNlcXVlbmNlPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpBRERSTElORSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpBRERSVFlQRSIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOkNJVFkiIG1pbk9jY3Vycz0iMCIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpDT1VOVFJZIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6Q09VTlRZIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6REVTQ1JJUFROIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6RkFYIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOlBPU1RBTENPREUiIG1pbk9jY3Vycz0iMCIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpSRUdJT04iIG1pbk9jY3Vycz0iMCIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpTVEFURVBST1ZOIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6VEFYSlJTRENUTiIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOlRFTEVQSE9ORSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpVUkwiIG1pbk9jY3Vycz0iMCIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpVU0VSQVJFQSIgbWluT2NjdXJzPSIwIi8+Ci0JCTwveHM6c2VxdWVuY2U+Ci0JCTx4czphdHRyaWJ1dGUgbmFtZT0icmV0dXJuZGF0YSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPC94czpjb21wbGV4VHlwZT4KLQk8eHM6ZWxlbWVudCBuYW1lPSJDT05UQUNUIiB0eXBlPSJDT05UQUNUIi8+Ci0JPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkNPTlRBQ1QiPgotCQk8eHM6c2VxdWVuY2U+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOk5BTUUiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6Q09OVENUVFlQRSIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOkRFU0NSSVBUTiIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOkVNQUlMIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6RkFYIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOk5BTUUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6VEVMRVBIT05FIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOlVTRVJBUkVBIiBtaW5PY2N1cnM9IjAiLz4KLQkJPC94czpzZXF1ZW5jZT4KLQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZXR1cm5kYXRhIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8L3hzOmNvbXBsZXhUeXBlPgotCTx4czplbGVtZW50IG5hbWU9IkFNT1VOVCIgdHlwZT0iQU1PVU5UIi8+Ci0JPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkFNT1VOVCI+Ci0JCTx4czpzZXF1ZW5jZT4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6VkFMVUUiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6TlVNT0ZERUMiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6U0lHTiIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpDVVJSRU5DWSIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpEUkNSIi8+Ci0JCTwveHM6c2VxdWVuY2U+Ci0JCTx4czphdHRyaWJ1dGUgbmFtZT0icXVhbGlmaWVyIiB1c2U9InJlcXVpcmVkIj4KLQkJCTx4czpzaW1wbGVUeXBlPgotCQkJCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJBQ1RVQUwiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJBUFBSVk9SRCIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFWQUlMQUJMRSIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkJVREdFVCIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkNPTU1JU1NJT04iLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJERUNMQVJFVkFMIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRFNDUFJDTlQiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJEU0NWQUxVRSIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRJU0NOVCIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRPQ1VNRU5UIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRVNURU5HSU1QIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRVNURlJFSUdIVCIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkVTVEhSUyIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkVTVElNQVRFIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRVNUTUFOSU1QIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRVNUVUNPU1QiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFWFRFTkRFRCIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkZSRUlHSFQiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJJVEVNIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iT1BFTklURU0iLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJPUkRFUiIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik9SRExJTUlUIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUEFZUkFURSIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJBVEUiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJQUkNCUksiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJUQVgiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJUQVhCQVNFIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVE9UQUwiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJUT1RMSU1JVCIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik9USEVSIi8+Ci0JCQkJPC94czpyZXN0cmljdGlvbj4KLQkJCTwveHM6c2ltcGxlVHlwZT4KLQkJPC94czphdHRyaWJ1dGU+Ci0JCTx4czphdHRyaWJ1dGUgbmFtZT0idHlwZSI+Ci0JCQk8eHM6c2ltcGxlVHlwZT4KLQkJCQk8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Tk1UT0tFTiI+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVCIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkYiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJUQVgiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJPVEhFUiIvPgotCQkJCTwveHM6cmVzdHJpY3Rpb24+Ci0JCQk8L3hzOnNpbXBsZVR5cGU+Ci0JCTwveHM6YXR0cmlidXRlPgotCQk8eHM6YXR0cmlidXRlIG5hbWU9ImluZGV4IiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8L3hzOmNvbXBsZXhUeXBlPgotCTwhLS0gQU1PVU5UIC0tPgotCTx4czplbGVtZW50IG5hbWU9IkFUVENIUkVGIiB0eXBlPSJBVFRDSFJFRiIvPgotCTx4czpjb21wbGV4VHlwZSBuYW1lPSJBVFRDSFJFRiI+Ci0JCTx4czpzZXF1ZW5jZT4KLQkJCTx4czplbGVtZW50IHJlZj0iREFURVRJTUUiIG1pbk9jY3Vycz0iMCIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJRVUFOVElUWSIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOkNNUFJTTlRZUEUiIG1pbk9jY3Vycz0iMCIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpDTVBSU05JRCIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOkRFU0NSSVBUTiIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOkZJTEVUWVBFIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6Tk9URVMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6VElUTEUiIG1pbk9jY3Vycz0iMCIvPgotCQkJPCEtLSA8eHM6ZWxlbWVudCByZWY9Im9mOlVTRVJBUkVBIiBtaW5PY2N1cnM9IjAiLz4gLS0+Ci0JCQk8eHM6Y2hvaWNlPgotCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6RklMRU5BTUUiLz4KLQkJCQk8eHM6c2VxdWVuY2U+Ci0JCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6VVJJIi8+Ci0JCQkJCTx4czplbGVtZW50IHJlZj0ib2Y6RklMRU5BTUUiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTwveHM6c2VxdWVuY2U+Ci0JCQk8L3hzOmNob2ljZT4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6VVNFUkFSRUEiIG1pbk9jY3Vycz0iMCIvPgotCQk8L3hzOnNlcXVlbmNlPgotCQk8eHM6YXR0cmlidXRlIG5hbWU9InJldHVybmRhdGEiIHR5cGU9InhzOnN0cmluZyIvPgotCTwveHM6Y29tcGxleFR5cGU+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iQ0hBUkdFIiB0eXBlPSJDSEFSR0UiLz4KLQk8eHM6Y29tcGxleFR5cGUgbmFtZT0iQ0hBUkdFIj4KLQkJPHhzOnNlcXVlbmNlPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJPUEVSQU1UIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6Q0hBUkdFSUQiIG1pbk9jY3Vycz0iMCIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpDSEFSR0VUWVBFIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6Q0hHTElORU5VTSIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOkRFU0NSSVBUTiIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOlVTRVJBUkVBIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0iRElTVFJJQlVUTiIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQk8L3hzOnNlcXVlbmNlPgotCQk8eHM6YXR0cmlidXRlIG5hbWU9InJldHVybmRhdGEiIHR5cGU9InhzOnN0cmluZyIvPgotCTwveHM6Y29tcGxleFR5cGU+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iRElTVFJJQlVUTiIgdHlwZT0iRElTVFJJQlVUTiIvPgotCTx4czpjb21wbGV4VHlwZSBuYW1lPSJESVNUUklCVVROIj4KLQkJPHhzOnNlcXVlbmNlPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJPUEVSQU1UIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6QlVTTkFSRUEiIG1pbk9jY3Vycz0iMCIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpDT1NUQ0VOVEVSIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6REVQQVJUTUVOVCIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOkRJVklTSU9OIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6RUxFTUVOVCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpGVU5EIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6R0VPR1JBUEhZIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6R0xFTlRJVFlTIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6R0xOT01BQ0NUIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6UFJPRklUQ1RSIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6UFJPSkVDVCIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOlVOSVQiIG1pbk9jY3Vycz0iMCIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpXQVJFSE9VU0UiIG1pbk9jY3Vycz0iMCIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpVU0VSQVJFQSIgbWluT2NjdXJzPSIwIi8+Ci0JCTwveHM6c2VxdWVuY2U+Ci0JCTx4czphdHRyaWJ1dGUgbmFtZT0icmV0dXJuZGF0YSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPC94czpjb21wbGV4VHlwZT4KLQk8eHM6ZWxlbWVudCBuYW1lPSJPUEVSQU1UIiB0eXBlPSJPUEVSQU1UIi8+Ci0JPHhzOmNvbXBsZXhUeXBlIG5hbWU9Ik9QRVJBTVQiPgotCQk8eHM6c2VxdWVuY2U+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOlZBTFVFIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOk5VTU9GREVDIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOlNJR04iLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6Q1VSUkVOQ1kiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6VU9NVkFMVUUiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6VU9NTlVNREVDIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOlVPTSIvPgotCQk8L3hzOnNlcXVlbmNlPgotCQk8eHM6YXR0cmlidXRlIG5hbWU9InF1YWxpZmllciIgdXNlPSJyZXF1aXJlZCI+Ci0JCQk8eHM6c2ltcGxlVHlwZT4KLQkJCQk8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Tk1UT0tFTiI+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQ09TVCIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkVYVEVOREVEIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRlJFSUdIVCIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlVOSVQiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJPVEhFUiIvPgotCQkJCTwveHM6cmVzdHJpY3Rpb24+Ci0JCQk8L3hzOnNpbXBsZVR5cGU+Ci0JCTwveHM6YXR0cmlidXRlPgotCQk8eHM6YXR0cmlidXRlIG5hbWU9InR5cGUiIHVzZT0icmVxdWlyZWQiPgotCQkJPHhzOnNpbXBsZVR5cGU+Ci0JCQkJPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlQiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJGIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iT1RIRVIiLz4KLQkJCQk8L3hzOnJlc3RyaWN0aW9uPgotCQkJPC94czpzaW1wbGVUeXBlPgotCQk8L3hzOmF0dHJpYnV0ZT4KLQk8L3hzOmNvbXBsZXhUeXBlPgotCTx4czplbGVtZW50IG5hbWU9IlBBUlRORVIiIHR5cGU9IlBBUlRORVIiLz4KLQk8eHM6Y29tcGxleFR5cGUgbmFtZT0iUEFSVE5FUiI+Ci0JCTx4czpzZXF1ZW5jZT4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6TkFNRSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpPTkVUSU1FIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6UEFSVE5SSUQiIG1pbk9jY3Vycz0iMCIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpQQVJUTlJUWVBFIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6U1lOQ0lORCIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOkFDVElWRSIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOkNVUlJFTkNZIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6REVTQ1JJUFROIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6RFVOU05VTUJFUiIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOkdMRU5USVRZUyIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOlBBUkVOVElEIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6UEFSVE5SSURYIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6UEFSVE5SUkFURyIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOlBBUlROUlJPTEUiIG1pbk9jY3Vycz0iMCIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpQQVlNRVRIT0QiIG1pbk9jY3Vycz0iMCIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpUQVhFWEVNUFQiIG1pbk9jY3Vycz0iMCIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpUQVhJRCIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOlRFUk1JRCIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOlVTRVJBUkVBIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0iQUREUkVTUyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJDT05UQUNUIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCTwveHM6c2VxdWVuY2U+Ci0JCTx4czphdHRyaWJ1dGUgbmFtZT0icmV0dXJuZGF0YSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPC94czpjb21wbGV4VHlwZT4KLQk8eHM6ZWxlbWVudCBuYW1lPSJURU1QUkFUVVJFIiB0eXBlPSJURU1QRVJBVFVSRSIvPgotCTx4czpjb21wbGV4VHlwZSBuYW1lPSJURU1QRVJBVFVSRSI+Ci0JCTx4czpzZXF1ZW5jZT4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6VkFMVUUiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6TlVNT0ZERUMiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6U0lHTiIvPgotCQk8L3hzOnNlcXVlbmNlPgotCQk8eHM6YXR0cmlidXRlIG5hbWU9InF1YWxpZmllciIgdXNlPSJyZXF1aXJlZCI+Ci0JCQk8eHM6c2ltcGxlVHlwZT4KLQkJCQk8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Tk1UT0tFTiI+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQUNUVUFMIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iREVMSVZFUlkiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJMT0FESU5HIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iT1RIRVIiLz4KLQkJCQk8L3hzOnJlc3RyaWN0aW9uPgotCQkJPC94czpzaW1wbGVUeXBlPgotCQk8L3hzOmF0dHJpYnV0ZT4KLQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB1c2U9InJlcXVpcmVkIj4KLQkJCTx4czpzaW1wbGVUeXBlPgotCQkJCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJDRUxTSVVTIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRkFIUkVOSEVJVCIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IktFTFZJTiIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik9USEVSIi8+Ci0JCQkJPC94czpyZXN0cmljdGlvbj4KLQkJCTwveHM6c2ltcGxlVHlwZT4KLQkJPC94czphdHRyaWJ1dGU+Ci0JPC94czpjb21wbGV4VHlwZT4KLQk8eHM6ZWxlbWVudCBuYW1lPSJRVUFOVElUWSIgdHlwZT0iUVVBTlRJVFkiLz4KLQk8eHM6Y29tcGxleFR5cGUgbmFtZT0iUVVBTlRJVFkiPgotCQk8eHM6c2VxdWVuY2U+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOlZBTFVFIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOk5VTU9GREVDIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOlNJR04iLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6VU9NIi8+Ci0JCTwveHM6c2VxdWVuY2U+Ci0JCTx4czphdHRyaWJ1dGUgbmFtZT0icXVhbGlmaWVyIiB1c2U9InJlcXVpcmVkIj4KLQkJCTx4czpzaW1wbGVUeXBlPgotCQkJCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJBQ0NFUFRFRCIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFDVERVUiIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFDVEhSUyIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFMTE9DQVRFRCIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFMTE9XRURXVCIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFWQUlMQUJMRSIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFWR1JVTlNJWkUiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJCQUNLT1JERVJEIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQkFUQ0hTSVpFIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQkFUQ0hUSU1FIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQkxPQ0tFRCIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkJSRUFLVElNRSIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkNBUFBFUkNFTlQiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJDQVRDSFdFR0hUIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQ09NTUlTU0lPTiIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkNPTVBMRVRFRCIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkNVTVVMQVRJVkUiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJERUxJVkVSRUQiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJEVVJBVElPTiIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkRVUk9WRVIiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJEVVJVTkRFUiIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkVNUExPWUVFUyIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkVNUFJFUUQiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFU1REVVIiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFU1RIUlMiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFU1RXRUlHSFQiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJGSUxFTkFNRSIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkZJTEVTSVpFIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRklYRURUSU1FIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSEVJR0hUIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSU5TUEVDVEVEIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iSU5TUEVDVElPTiIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IklURU0iLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJMRFRNT0ZGU0VUIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTEVOR1RIIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTEFCT1IiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJMT0FESU5HV1QiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJMT1RTSVpFTUFYIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTE9UU0laRU1JTiIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkxPVFNJWkVNTFQiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJMT1dFUkxJTUlUIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTUFDSElORUhSUyIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik1BWElNVU0iLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJNQVhQQVJMVE0iLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJNSU5JTVVNIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTU9WRVRJTUUiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJNU01FTlQiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJNVUxUSVBMSUVSIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTkVUV0VJR0hUIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iT1BFTiIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik9SREVSRUQiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJPVEhFUlJFSiIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik9WRVJTSElQIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUEFDS0lORyIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBFUkNFTlQiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJQRVJDRU5UUkVRIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUEVSU0hCTk9QUiIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBFUlNIV0lPUFIiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJQTE5EUFJDVCIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBSQ0JSSyIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBSSU9SIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUVVFVUVUSU1FIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUkFURSIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJFQ0VJVkVEIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUkVKRUNURUQiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSRUpGSVhFRCIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJFSlBFUkNFTlQiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSRU1EVVIiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSRU1IUlMiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSRVFVSVJFRCIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJFVFVSTkVEIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUkVXT1JLIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUlVOVElNRSIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlNDUkFQIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU0VUVVBUSU1FIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU0hFTEZMSUZFIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU0hJUFBFRCIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlNISVBVTklUIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU1RBUlQiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJURUFSRE9XTiIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlRPT0xSRVFEIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVE9UV0VJR0hUIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVFJBTlNGUkxPVCIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlVOREVSU0hJUCIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlVOSVQiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJVUFBFUkxJTUlUIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVk9MVU1FIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iV0FJVFRJTUUiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJXRUlHSFQiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJXSURUSCIvPgotCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik9USEVSIi8+Ci0JCQkJPC94czpyZXN0cmljdGlvbj4KLQkJCTwveHM6c2ltcGxlVHlwZT4KLQkJPC94czphdHRyaWJ1dGU+Ci0JPC94czpjb21wbGV4VHlwZT4KLQk8IS0tIFFVQU5USVRZIC0tPgotCTx4czplbGVtZW50IG5hbWU9IkRPQ1VNTlRSRUYiIHR5cGU9IkRPQ1VNTlRSRUYiLz4KLQk8eHM6Y29tcGxleFR5cGUgbmFtZT0iRE9DVU1OVFJFRiI+Ci0JCTx4czpzZXF1ZW5jZT4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6RE9DVFlQRSIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpET0NVTUVOVElEIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOlBBUlROUklEIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOlBBUlROUlRZUEUiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6REVTQ1JJUFROIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6RE9DVU1FTlRSViIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOkxJTkVOVU0iIG1pbk9jY3Vycz0iMCIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpOT1RFUyIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOlNDSExJTkVOVU0iIG1pbk9jY3Vycz0iMCIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpTVUJMSU5FTlVNIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6VVNFUkFSRUEiIG1pbk9jY3Vycz0iMCIvPgotCQk8L3hzOnNlcXVlbmNlPgotCTwveHM6Y29tcGxleFR5cGU+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iRE9DVU1FTlQiIHR5cGU9IkRPQ1VNRU5UIi8+Ci0JPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkRPQ1VNRU5UIj4KLQkJPHhzOnNlcXVlbmNlPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpET0NVTUVOVElEIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6RE9DVU1FTlRSViIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOkRPQ1RZUEUiIG1pbk9jY3Vycz0iMCIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpVU0VSQVJFQSIgbWluT2NjdXJzPSIwIi8+Ci0JCTwveHM6c2VxdWVuY2U+Ci0JCTx4czphdHRyaWJ1dGUgbmFtZT0icmV0dXJuZGF0YSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0JPC94czpjb21wbGV4VHlwZT4KLQk8eHM6ZWxlbWVudCBuYW1lPSJMT1RTRVJJQUwiIHR5cGU9IkxPVFNFUklBTCIvPgotCTx4czpjb21wbGV4VHlwZSBuYW1lPSJMT1RTRVJJQUwiPgotCQk8eHM6c2VxdWVuY2U+Ci0JCQk8eHM6ZWxlbWVudCByZWY9IlFVQU5USVRZIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTwhLS0oJVFVQU5USVRZLklURU07KT8gLS0+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOkxPVExFVkVMIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOlBBUkVOVExPVCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPHhzOmVsZW1lbnQgcmVmPSJvZjpQQVJFTlRTTlVNIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTx4czplbGVtZW50IHJlZj0ib2Y6U0VSSUFMTlVNIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8eHM6ZWxlbWVudCByZWY9Im9mOlVTRVJBUkVBIiBtaW5PY2N1cnM9IjAiLz4KLQkJPC94czpzZXF1ZW5jZT4KLQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZXR1cm5kYXRhIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8L3hzOmNvbXBsZXhUeXBlPgotPC94czpzY2hlbWE+CmRpZmYgLS1naXQgYS92Mi90ZXN0L2Nhc2VzL3N0b3JlL0NvbnNvbGlkYXRlVGVzdC54bWwgYi92Mi90ZXN0L2Nhc2VzL3N0b3JlL0NvbnNvbGlkYXRlVGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyMTA4NmEuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9jYXNlcy9zdG9yZS9Db25zb2xpZGF0ZVRlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPGVtcGxveWVlcz4KLSAgPGVtcGxveWVlPgotICAgIDxuYW1lPkZyZWQgSm9uZXM8L25hbWU+Ci0gICAgPGFkZHJlc3MgbG9jYXRpb249ImhvbWUiPgotICAgICAgPHN0cmVldD45MDAgQXVyb3JhIEF2ZS48L3N0cmVldD4KLSAgICAgIDxjaXR5PlNlYXR0bGU8L2NpdHk+Ci0gICAgICA8c3RhdGU+V0E8L3N0YXRlPgotICAgICAgPHppcD45ODEwOTwvemlwPgotICAgIDwvYWRkcmVzcz4KLSAgICA8YWRkcmVzcyBsb2NhdGlvbj0id29yayI+Ci0gICAgICA8c3RyZWV0PjIwMTEgMTUybmQgQXZlbnVlIE5FPC9zdHJlZXQ+Ci0gICAgICA8Y2l0eT5SZWRtb25kPC9jaXR5PgotICAgICAgPHN0YXRlPldBPC9zdGF0ZT4KLSAgICAgIDx6aXA+OTgwNTI8L3ppcD4KLSAgICA8L2FkZHJlc3M+Ci0gICAgPHBob25lIGxvY2F0aW9uPSJ3b3JrIj4oNDI1KTY0MS05Mzg1PC9waG9uZT4KLSAgICA8cGhvbmUgbG9jYXRpb249ImhvbWUiPigyMDYpNDQxLTE2OTU8L3Bob25lPgotICAgIDxwaG9uZSBsb2NhdGlvbj0ibW9iaWxlIj4oMjA2KTcxNC0yNTE1PC9waG9uZT4KLSAgPC9lbXBsb3llZT4KLSAgPGVtcGxveWVlPgotICAgIDxuYW1lPlNhbGx5IFNtaXRoPC9uYW1lPgotICAgIDxhZGRyZXNzIGxvY2F0aW9uPSJob21lIj4KLSAgICAgIDxzdHJlZXQ+MTQzMCBPYWsgUGxhY2U8L3N0cmVldD4KLSAgICAgIDxjaXR5PlNhbGVtPC9jaXR5PgotICAgICAgPHN0YXRlPk9SPC9zdGF0ZT4KLSAgICAgIDx6aXA+OTcxMjU8L3ppcD4KLSAgICA8L2FkZHJlc3M+Ci0gICAgPGFkZHJlc3MgbG9jYXRpb249IndvcmsiPgotICAgICAgPHN0cmVldD43NjUgTWFpbiBTdC48L3N0cmVldD4KLSAgICAgIDxjaXR5PkthaXNlcjwvY2l0eT4KLSAgICAgIDxzdGF0ZT5PUjwvc3RhdGU+Ci0gICAgICA8emlwPjk3MTAzPC96aXA+Ci0gICAgPC9hZGRyZXNzPgotICAgIDxwaG9uZSBsb2NhdGlvbj0id29yayI+KDUwMykyNjQtMzg1NjwvcGhvbmU+Ci0gICAgPHBob25lIGxvY2F0aW9uPSJob21lIj4oNTAzKTQxNi02OTUxPC9waG9uZT4KLSAgICA8cGhvbmUgbG9jYXRpb249Im1vYmlsZSI+KDUwMykyMTQtNTE1MjwvcGhvbmU+Ci0gIDwvZW1wbG95ZWU+Ci08L2VtcGxveWVlcz4KZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc3RvcmUvZWFzeXBvMS54bWwgYi92Mi90ZXN0L2Nhc2VzL3N0b3JlL2Vhc3lwbzEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGQ4NzdlLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3QvY2FzZXMvc3RvcmUvZWFzeXBvMS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi08cG86cHVyY2hhc2Utb3JkZXIgeG1sbnM6cG89Imh0dHA6Ly9vcGVudXJpLm9yZy9lYXN5cG8iPgotICA8cG86Y3VzdG9tZXI+Ci0gICAgPHBvOm5hbWU+RGF2aWQgQmF1PC9wbzpuYW1lPgotICAgIDxwbzphZGRyZXNzPkdsYWR3eW5lLCBQQTwvcG86YWRkcmVzcz4KLSAgPC9wbzpjdXN0b21lcj4KLSAgPHBvOmRhdGU+MjAwMi0wOS0zMFQxNDoxNjowMC0wNTowMDwvcG86ZGF0ZT4KLSAgPHBvOmxpbmUtaXRlbT4KLSAgICA8cG86ZGVzY3JpcHRpb24+QnVybmhhbSdzIENlbGVzdGlhbCBIYW5kYm9vaywgVm9sIDE8L3BvOmRlc2NyaXB0aW9uPgotICAgIDxwbzpwZXItdW5pdC1vdW5jZXM+NTwvcG86cGVyLXVuaXQtb3VuY2VzPgotICAgIDxwbzpwcmljZT4yMS43OTwvcG86cHJpY2U+Ci0gICAgPHBvOnF1YW50aXR5PjI8L3BvOnF1YW50aXR5PgotICA8L3BvOmxpbmUtaXRlbT4KLSAgPHBvOmxpbmUtaXRlbT4KLSAgICA8cG86ZGVzY3JpcHRpb24+QnVybmhhbSdzIENlbGVzdGlhbCBIYW5kYm9vaywgVm9sIDI8L3BvOmRlc2NyaXB0aW9uPgotICAgIDxwbzpwZXItdW5pdC1vdW5jZXM+NTwvcG86cGVyLXVuaXQtb3VuY2VzPgotICAgIDxwbzpwcmljZT4xOS44OTwvcG86cHJpY2U+Ci0gICAgPHBvOnF1YW50aXR5PjI8L3BvOnF1YW50aXR5PgotICA8L3BvOmxpbmUtaXRlbT4KLSAgPHBvOmxpbmUtaXRlbT4KLSAgICA8cG86ZGVzY3JpcHRpb24+QnVybmhhbSdzIENlbGVzdGlhbCBIYW5kYm9vaywgVm9sIDM8L3BvOmRlc2NyaXB0aW9uPgotICAgIDxwbzpwZXItdW5pdC1vdW5jZXM+NTwvcG86cGVyLXVuaXQtb3VuY2VzPgotICAgIDxwbzpwcmljZT4xOS44OTwvcG86cHJpY2U+Ci0gICAgPHBvOnF1YW50aXR5PjE8L3BvOnF1YW50aXR5PgotICA8L3BvOmxpbmUtaXRlbT4KLSAgPHBvOnNoaXBwZXI+Ci0gICAgPHBvOm5hbWU+VVBTPC9wbzpuYW1lPgotICAgIDxwbzpwZXItb3VuY2UtcmF0ZT4wLjc0PC9wbzpwZXItb3VuY2UtcmF0ZT4KLSAgPC9wbzpzaGlwcGVyPgotPC9wbzpwdXJjaGFzZS1vcmRlcj4KZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc3RvcmUvZXJpY3Rlc3QueG1sIGIvdjIvdGVzdC9jYXNlcy9zdG9yZS9lcmljdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiOTkzYmQuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9jYXNlcy9zdG9yZS9lcmljdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08YmFyPjxmb28+MTwvZm9vPjxmb28+MjwvZm9vPjwvYmFyPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc3RvcmUvcGVvcGxlLnhtbCBiL3YyL3Rlc3QvY2FzZXMvc3RvcmUvcGVvcGxlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRkMTA0NC4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L2Nhc2VzL3N0b3JlL3Blb3BsZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotPHBlb3BsZSB4PSIiPgotCi0gIDxwZXJzb24+Ci0gICAgPG5hbWU+Ci0gICAgICA8Zmlyc3Q+RXJpYzwvZmlyc3Q+Ci0gICAgICA8bGFzdD5WYXNpbGlrPC9sYXN0PgotICAgIDwvbmFtZT4KLSAgICA8YWdlPjM3PC9hZ2U+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24+Ci0gICAgPG5hbWU+Ci0gICAgICA8Zmlyc3Q+U3lsdmlhPC9maXJzdD4KLSAgICAgIDxsYXN0PlZhc2lsaWs8L2xhc3Q+Ci0gICAgPC9uYW1lPgotICAgIDxhZ2U+MzQ8L2FnZT4KLSAgPC9wZXJzb24+Ci0KLSAgPHBlcnNvbj4KLSAgICA8bmFtZT4KLSAgICAgIDxmaXJzdD5Sb2Q8L2ZpcnN0PgotICAgICAgPGxhc3Q+Q2hhdmV6PC9sYXN0PgotICAgIDwvbmFtZT4KLSAgICA8YWdlPjM5PC9hZ2U+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24+Ci0gICAgPG5hbWU+Ci0gICAgICA8Zmlyc3Q+VGVycnk8L2ZpcnN0PgotICAgICAgPGxhc3Q+THVjYXM8L2xhc3Q+Ci0gICAgPC9uYW1lPgotICAgIDxhZ2U+NDI8L2FnZT4KLSAgPC9wZXJzb24+Ci0KLSAgPHBlcnNvbj4KLSAgICA8bmFtZT4KLSAgICAgIDxmaXJzdD5EYXZpZDwvZmlyc3Q+Ci0gICAgICA8bGFzdD5CYXU8L2xhc3Q+Ci0gICAgPC9uYW1lPgotICAgIDxhZ2U+MzE8L2FnZT4KLSAgPC9wZXJzb24+Ci0KLSAgPHBlcnNvbj4KLSAgICA8bmFtZT4KLSAgICAgIDxmaXJzdD5FcmljPC9maXJzdD4KLSAgICAgIDxsYXN0PlZhc2lsaWs8L2xhc3Q+Ci0gICAgPC9uYW1lPgotICAgIDxhZ2U+Mzc8L2FnZT4KLSAgPC9wZXJzb24+Ci0KLSAgPHBlcnNvbj4KLSAgICA8bmFtZT4KLSAgICAgIDxmaXJzdD5TeWx2aWE8L2ZpcnN0PgotICAgICAgPGxhc3Q+VmFzaWxpazwvbGFzdD4KLSAgICA8L25hbWU+Ci0gICAgPGFnZT4zNDwvYWdlPgotICA8L3BlcnNvbj4KLQotICA8cGVyc29uPgotICAgIDxuYW1lPgotICAgICAgPGZpcnN0PlJvZDwvZmlyc3Q+Ci0gICAgICA8bGFzdD5DaGF2ZXo8L2xhc3Q+Ci0gICAgPC9uYW1lPgotICAgIDxhZ2U+Mzk8L2FnZT4KLSAgPC9wZXJzb24+Ci0KLSAgPHBlcnNvbj4KLSAgICA8bmFtZT4KLSAgICAgIDxmaXJzdD5UZXJyeTwvZmlyc3Q+Ci0gICAgICA8bGFzdD5MdWNhczwvbGFzdD4KLSAgICA8L25hbWU+Ci0gICAgPGFnZT40MjwvYWdlPgotICA8L3BlcnNvbj4KLQotICA8cGVyc29uPgotICAgIDxuYW1lPgotICAgICAgPGZpcnN0PkRhdmlkPC9maXJzdD4KLSAgICAgIDxsYXN0PkJhdTwvbGFzdD4KLSAgICA8L25hbWU+Ci0gICAgPGFnZT4zMTwvYWdlPgotICA8L3BlcnNvbj4KLQotICA8cGVyc29uPgotICAgIDxuYW1lPgotICAgICAgPGZpcnN0PkVyaWM8L2ZpcnN0PgotICAgICAgPGxhc3Q+VmFzaWxpazwvbGFzdD4KLSAgICA8L25hbWU+Ci0gICAgPGFnZT4zNzwvYWdlPgotICA8L3BlcnNvbj4KLQotICA8cGVyc29uPgotICAgIDxuYW1lPgotICAgICAgPGZpcnN0PlN5bHZpYTwvZmlyc3Q+Ci0gICAgICA8bGFzdD5WYXNpbGlrPC9sYXN0PgotICAgIDwvbmFtZT4KLSAgICA8YWdlPjM0PC9hZ2U+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24+Ci0gICAgPG5hbWU+Ci0gICAgICA8Zmlyc3Q+Um9kPC9maXJzdD4KLSAgICAgIDxsYXN0PkNoYXZlejwvbGFzdD4KLSAgICA8L25hbWU+Ci0gICAgPGFnZT4zOTwvYWdlPgotICA8L3BlcnNvbj4KLQotICA8cGVyc29uPgotICAgIDxuYW1lPgotICAgICAgPGZpcnN0PlRlcnJ5PC9maXJzdD4KLSAgICAgIDxsYXN0Pkx1Y2FzPC9sYXN0PgotICAgIDwvbmFtZT4KLSAgICA8YWdlPjQyPC9hZ2U+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24+Ci0gICAgPG5hbWU+Ci0gICAgICA8Zmlyc3Q+RGF2aWQ8L2ZpcnN0PgotICAgICAgPGxhc3Q+QmF1PC9sYXN0PgotICAgIDwvbmFtZT4KLSAgICA8YWdlPjMxPC9hZ2U+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24+Ci0gICAgPG5hbWU+Ci0gICAgICA8Zmlyc3Q+Um9kPC9maXJzdD4KLSAgICAgIDxsYXN0PkNoYXZlejwvbGFzdD4KLSAgICA8L25hbWU+Ci0gICAgPGFnZT4zOTwvYWdlPgotICA8L3BlcnNvbj4KLQotICA8cGVyc29uPgotICAgIDxuYW1lPgotICAgICAgPGZpcnN0PkVyaWM8L2ZpcnN0PgotICAgICAgPGxhc3Q+VmFzaWxpazwvbGFzdD4KLSAgICA8L25hbWU+Ci0gICAgPGFnZT4zNzwvYWdlPgotICA8L3BlcnNvbj4KLQotICA8cGVyc29uPgotICAgIDxuYW1lPgotICAgICAgPGZpcnN0PlN5bHZpYTwvZmlyc3Q+Ci0gICAgICA8bGFzdD5WYXNpbGlrPC9sYXN0PgotICAgIDwvbmFtZT4KLSAgICA8YWdlPjM0PC9hZ2U+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24+Ci0gICAgPG5hbWU+Ci0gICAgICA8Zmlyc3Q+Um9kPC9maXJzdD4KLSAgICAgIDxsYXN0PkNoYXZlejwvbGFzdD4KLSAgICA8L25hbWU+Ci0gICAgPGFnZT4zOTwvYWdlPgotICA8L3BlcnNvbj4KLQotICA8cGVyc29uPgotICAgIDxuYW1lPgotICAgICAgPGZpcnN0PlRlcnJ5PC9maXJzdD4KLSAgICAgIDxsYXN0Pkx1Y2FzPC9sYXN0PgotICAgIDwvbmFtZT4KLSAgICA8YWdlPjQyPC9hZ2U+Ci0gIDwvcGVyc29uPgotCi0gIDxwZXJzb24+Ci0gICAgPG5hbWU+Ci0gICAgICA8Zmlyc3Q+RGF2aWQ8L2ZpcnN0PgotICAgICAgPGxhc3Q+QmF1PC9sYXN0PgotICAgIDwvbmFtZT4KLSAgICA8YWdlPjMxPC9hZ2U+Ci0gIDwvcGVyc29uPgotCi08L3Blb3BsZT4KZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc3RvcmUvc21hbGwueG1sIGIvdjIvdGVzdC9jYXNlcy9zdG9yZS9zbWFsbC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkZTY0NTMuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9jYXNlcy9zdG9yZS9zbWFsbC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCAgIAotCi0gICB2ZXJzaW9uCi09Ci0KLQotIgotIgotc3RhbmRhbG9uZT0neWVzJyAgID8+Ci08YWFhYSBhPSJhX3ZhbHVlIiBiOmEgPSAnYl92YWx1ZScgIHhtbG5zOmI9ImJfbnMiPgkKLSAgPD9waQl0YWIgIHRlc3h0IHJ0Pz4KLTwvYWFhYT4KZGlmZiAtLWdpdCBhL3YyL3Rlc3QvY2FzZXMvc3RvcmUvdGVzdC54bWwgYi92Mi90ZXN0L2Nhc2VzL3N0b3JlL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWQ5MjhhLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3QvY2FzZXMvc3RvcmUvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08Zm9vIHg9InkiPmFiPC9mb28+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9jYXNlcy94cGF0aC9tdWNoX2Fkby54bWwgYi92Mi90ZXN0L2Nhc2VzL3hwYXRoL211Y2hfYWRvLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjAwOGZhZC4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L2Nhc2VzL3hwYXRoL211Y2hfYWRvLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDY4NTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08UExBWT4KLTxUSVRMRT5NdWNoIEFkbyBhYm91dCBOb3RoaW5nPC9USVRMRT4KLQotPEZNPgotPFA+VGV4dCBwbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21haW4gYnkgTW9ieSBMZXhpY2FsIFRvb2xzLCAxOTkyLjwvUD4KLTxQPlNHTUwgbWFya3VwIGJ5IEpvbiBCb3NhaywgMTk5Mi0xOTk0LjwvUD4KLTxQPlhNTCB2ZXJzaW9uIGJ5IEpvbiBCb3NhaywgMTk5Ni0xOTk4LjwvUD4KLTxQPlRoaXMgd29yayBtYXkgYmUgZnJlZWx5IGNvcGllZCBhbmQgZGlzdHJpYnV0ZWQgd29ybGR3aWRlLjwvUD4KLTwvRk0+Ci0KLQotPFBFUlNPTkFFPgotPFRJVExFPkRyYW1hdGlzIFBlcnNvbmFlPC9USVRMRT4KLQotPFBFUlNPTkE+RE9OIFBFRFJPLCBwcmluY2Ugb2YgQXJyYWdvbi48L1BFUlNPTkE+Ci08UEVSU09OQT5ET04gSk9ITiwgaGlzIGJhc3RhcmQgYnJvdGhlci48L1BFUlNPTkE+Ci08UEVSU09OQT5DTEFVRElPLCBhIHlvdW5nIGxvcmQgb2YgRmxvcmVuY2UuPC9QRVJTT05BPgotPFBFUlNPTkE+QkVORURJQ0ssIGEgeW91bmcgbG9yZCBvZiBQYWR1YS48L1BFUlNPTkE+Ci08UEVSU09OQT5MRU9OQVRPLCBnb3Zlcm5vciBvZiBNZXNzaW5hLjwvUEVSU09OQT4KLTxQRVJTT05BPkFOVE9OSU8sIGhpcyBicm90aGVyLjwvUEVSU09OQT4KLTxQRVJTT05BPkJBTFRIQVNBUiwgYXR0ZW5kYW50IG9uIERvbiBQZWRyby48L1BFUlNPTkE+Ci0KLTxQR1JPVVA+Ci08UEVSU09OQT5DT05SQURFPC9QRVJTT05BPgotPFBFUlNPTkE+Qk9SQUNISU88L1BFUlNPTkE+Ci08R1JQREVTQ1I+Zm9sbG93ZXJzIG9mIERvbiBKb2huLjwvR1JQREVTQ1I+Ci08L1BHUk9VUD4KLQotPFBFUlNPTkE+RlJJQVIgRlJBTkNJUzwvUEVSU09OQT4KLTxQRVJTT05BPkRPR0JFUlJZLCBhIGNvbnN0YWJsZS48L1BFUlNPTkE+Ci08UEVSU09OQT5WRVJHRVMsIGEgaGVhZGJvcm91Z2guPC9QRVJTT05BPgotPFBFUlNPTkE+QSBTZXh0b24uPC9QRVJTT05BPgotPFBFUlNPTkE+QSBCb3kuPC9QRVJTT05BPgotPFBFUlNPTkE+SEVSTywgZGF1Z2h0ZXIgdG8gTGVvbmF0by48L1BFUlNPTkE+Ci08UEVSU09OQT5CRUFUUklDRSwgbmllY2UgdG8gTGVvbmF0by48L1BFUlNPTkE+Ci0KLTxQR1JPVVA+Ci08UEVSU09OQT5NQVJHQVJFVDwvUEVSU09OQT4KLTxQRVJTT05BPlVSU1VMQTwvUEVSU09OQT4KLTxHUlBERVNDUj5nZW50bGV3b21lbiBhdHRlbmRpbmcgb24gSGVyby48L0dSUERFU0NSPgotPC9QR1JPVVA+Ci0KLTxQRVJTT05BPk1lc3NlbmdlcnMsIFdhdGNoLCBBdHRlbmRhbnRzLCAmYW1wO2MuIDwvUEVSU09OQT4KLTwvUEVSU09OQUU+Ci0KLTxTQ05ERVNDUj5TQ0VORSAgTWVzc2luYS48L1NDTkRFU0NSPgotCi08UExBWVNVQlQ+TVVDSCBBRE8gQUJPVVQgTk9USElORzwvUExBWVNVQlQ+Ci0KLTxBQ1Q+PFRJVExFPkFDVCBJPC9USVRMRT4KLQotPFNDRU5FPjxUSVRMRT5TQ0VORSBJLiAgQmVmb3JlIExFT05BVE8nUyBob3VzZS48L1RJVExFPgotPFNUQUdFRElSPkVudGVyIExFT05BVE8sIEhFUk8sIGFuZCBCRUFUUklDRSwgd2l0aCBhCi1NZXNzZW5nZXI8L1NUQUdFRElSPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPkkgbGVhcm4gaW4gdGhpcyBsZXR0ZXIgdGhhdCBEb24gUGV0ZXIgb2YgQXJyYWdvbjwvTElORT4KLTxMSU5FPmNvbWVzIHRoaXMgbmlnaHQgdG8gTWVzc2luYS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPk1lc3NlbmdlcjwvU1BFQUtFUj4KLTxMSU5FPkhlIGlzIHZlcnkgbmVhciBieSB0aGlzOiBoZSB3YXMgbm90IHRocmVlIGxlYWd1ZXMgb2ZmPC9MSU5FPgotPExJTkU+d2hlbiBJIGxlZnQgaGltLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPkhvdyBtYW55IGdlbnRsZW1lbiBoYXZlIHlvdSBsb3N0IGluIHRoaXMgYWN0aW9uPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TWVzc2VuZ2VyPC9TUEVBS0VSPgotPExJTkU+QnV0IGZldyBvZiBhbnkgc29ydCwgYW5kIG5vbmUgb2YgbmFtZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5BIHZpY3RvcnkgaXMgdHdpY2UgaXRzZWxmIHdoZW4gdGhlIGFjaGlldmVyIGJyaW5nczwvTElORT4KLTxMSU5FPmhvbWUgZnVsbCBudW1iZXJzLiBJIGZpbmQgaGVyZSB0aGF0IERvbiBQZXRlciBoYXRoPC9MSU5FPgotPExJTkU+YmVzdG93ZWQgbXVjaCBob25vdXIgb24gYSB5b3VuZyBGbG9yZW50aW5lIGNhbGxlZCBDbGF1ZGlvLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TWVzc2VuZ2VyPC9TUEVBS0VSPgotPExJTkU+TXVjaCBkZXNlcnZlZCBvbiBoaXMgcGFydCBhbmQgZXF1YWxseSByZW1lbWJlcmVkIGJ5PC9MSU5FPgotPExJTkU+RG9uIFBlZHJvOiBoZSBoYXRoIGJvcm5lIGhpbXNlbGYgYmV5b25kIHRoZTwvTElORT4KLTxMSU5FPnByb21pc2Ugb2YgaGlzIGFnZSwgZG9pbmcsIGluIHRoZSBmaWd1cmUgb2YgYSBsYW1iLDwvTElORT4KLTxMSU5FPnRoZSBmZWF0cyBvZiBhIGxpb246IGhlIGhhdGggaW5kZWVkIGJldHRlcjwvTElORT4KLTxMSU5FPmJldHRlcmVkIGV4cGVjdGF0aW9uIHRoYW4geW91IG11c3QgZXhwZWN0IG9mIG1lIHRvPC9MSU5FPgotPExJTkU+dGVsbCB5b3UgaG93LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPkhlIGhhdGggYW4gdW5jbGUgaGVyZSBpbiBNZXNzaW5hIHdpbGwgYmUgdmVyeSBtdWNoPC9MSU5FPgotPExJTkU+Z2xhZCBvZiBpdC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPk1lc3NlbmdlcjwvU1BFQUtFUj4KLTxMSU5FPkkgaGF2ZSBhbHJlYWR5IGRlbGl2ZXJlZCBoaW0gbGV0dGVycywgYW5kIHRoZXJlPC9MSU5FPgotPExJTkU+YXBwZWFycyBtdWNoIGpveSBpbiBoaW07IGV2ZW4gc28gbXVjaCB0aGF0IGpveSBjb3VsZDwvTElORT4KLTxMSU5FPm5vdCBzaG93IGl0c2VsZiBtb2Rlc3QgZW5vdWdoIHdpdGhvdXQgYSBiYWRnZSBvZjwvTElORT4KLTxMSU5FPmJpdHRlcm5lc3MuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+RGlkIGhlIGJyZWFrIG91dCBpbnRvIHRlYXJzPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TWVzc2VuZ2VyPC9TUEVBS0VSPgotPExJTkU+SW4gZ3JlYXQgbWVhc3VyZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5BIGtpbmQgb3ZlcmZsb3cgb2Yga2luZG5lc3M6IHRoZXJlIGFyZSBubyBmYWNlczwvTElORT4KLTxMSU5FPnRydWVyIHRoYW4gdGhvc2UgdGhhdCBhcmUgc28gd2FzaGVkLiBIb3cgbXVjaDwvTElORT4KLTxMSU5FPmJldHRlciBpcyBpdCB0byB3ZWVwIGF0IGpveSB0aGFuIHRvIGpveSBhdCB3ZWVwaW5nITwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5JIHByYXkgeW91LCBpcyBTaWduaW9yIE1vdW50YW50byByZXR1cm5lZCBmcm9tIHRoZTwvTElORT4KLTxMSU5FPndhcnMgb3Igbm8/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5NZXNzZW5nZXI8L1NQRUFLRVI+Ci08TElORT5JIGtub3cgbm9uZSBvZiB0aGF0IG5hbWUsIGxhZHk6IHRoZXJlIHdhcyBub25lIHN1Y2g8L0xJTkU+Ci08TElORT5pbiB0aGUgYXJteSBvZiBhbnkgc29ydC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5XaGF0IGlzIGhlIHRoYXQgeW91IGFzayBmb3IsIG5pZWNlPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+SEVSTzwvU1BFQUtFUj4KLTxMSU5FPk15IGNvdXNpbiBtZWFucyBTaWduaW9yIEJlbmVkaWNrIG9mIFBhZHVhLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TWVzc2VuZ2VyPC9TUEVBS0VSPgotPExJTkU+TywgaGUncyByZXR1cm5lZDsgYW5kIGFzIHBsZWFzYW50IGFzIGV2ZXIgaGUgd2FzLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5IZSBzZXQgdXAgaGlzIGJpbGxzIGhlcmUgaW4gTWVzc2luYSBhbmQgY2hhbGxlbmdlZDwvTElORT4KLTxMSU5FPkN1cGlkIGF0IHRoZSBmbGlnaHQ7IGFuZCBteSB1bmNsZSdzIGZvb2wsIHJlYWRpbmc8L0xJTkU+Ci08TElORT50aGUgY2hhbGxlbmdlLCBzdWJzY3JpYmVkIGZvciBDdXBpZCwgYW5kIGNoYWxsZW5nZWQ8L0xJTkU+Ci08TElORT5oaW0gYXQgdGhlIGJpcmQtYm9sdC4gSSBwcmF5IHlvdSwgaG93IG1hbnkgaGF0aCBoZTwvTElORT4KLTxMSU5FPmtpbGxlZCBhbmQgZWF0ZW4gaW4gdGhlc2Ugd2Fycz8gQnV0IGhvdyBtYW55IGhhdGg8L0xJTkU+Ci08TElORT5oZSBraWxsZWQ/IGZvciBpbmRlZWQgSSBwcm9taXNlZCB0byBlYXQgYWxsIG9mIGhpcyBraWxsaW5nLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPkZhaXRoLCBuaWVjZSwgeW91IHRheCBTaWduaW9yIEJlbmVkaWNrIHRvbyBtdWNoOzwvTElORT4KLTxMSU5FPmJ1dCBoZSdsbCBiZSBtZWV0IHdpdGggeW91LCBJIGRvdWJ0IGl0IG5vdC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPk1lc3NlbmdlcjwvU1BFQUtFUj4KLTxMSU5FPkhlIGhhdGggZG9uZSBnb29kIHNlcnZpY2UsIGxhZHksIGluIHRoZXNlIHdhcnMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPllvdSBoYWQgbXVzdHkgdmljdHVhbCwgYW5kIGhlIGhhdGggaG9scCB0byBlYXQgaXQ6PC9MSU5FPgotPExJTkU+aGUgaXMgYSB2ZXJ5IHZhbGlhbnQgdHJlbmNoZXJtYW47IGhlIGhhdGggYW48L0xJTkU+Ci08TElORT5leGNlbGxlbnQgc3RvbWFjaC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPk1lc3NlbmdlcjwvU1BFQUtFUj4KLTxMSU5FPkFuZCBhIGdvb2Qgc29sZGllciB0b28sIGxhZHkuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPkFuZCBhIGdvb2Qgc29sZGllciB0byBhIGxhZHk6IGJ1dCB3aGF0IGlzIGhlIHRvIGEgbG9yZD88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPk1lc3NlbmdlcjwvU1BFQUtFUj4KLTxMSU5FPkEgbG9yZCB0byBhIGxvcmQsIGEgbWFuIHRvIGEgbWFuOyBzdHVmZmVkIHdpdGggYWxsPC9MSU5FPgotPExJTkU+aG9ub3VyYWJsZSB2aXJ0dWVzLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5JdCBpcyBzbywgaW5kZWVkOyBoZSBpcyBubyBsZXNzIHRoYW4gYSBzdHVmZmVkIG1hbjo8L0xJTkU+Ci08TElORT5idXQgZm9yIHRoZSBzdHVmZmluZywtLXdlbGwsIHdlIGFyZSBhbGwgbW9ydGFsLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPllvdSBtdXN0IG5vdCwgc2lyLCBtaXN0YWtlIG15IG5pZWNlLiBUaGVyZSBpcyBhPC9MSU5FPgotPExJTkU+a2luZCBvZiBtZXJyeSB3YXIgYmV0d2l4dCBTaWduaW9yIEJlbmVkaWNrIGFuZCBoZXI6PC9MSU5FPgotPExJTkU+dGhleSBuZXZlciBtZWV0IGJ1dCB0aGVyZSdzIGEgc2tpcm1pc2ggb2Ygd2l0PC9MSU5FPgotPExJTkU+YmV0d2VlbiB0aGVtLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5BbGFzISBoZSBnZXRzIG5vdGhpbmcgYnkgdGhhdC4gSW4gb3VyIGxhc3Q8L0xJTkU+Ci08TElORT5jb25mbGljdCBmb3VyIG9mIGhpcyBmaXZlIHdpdHMgd2VudCBoYWx0aW5nIG9mZiwgYW5kPC9MSU5FPgotPExJTkU+bm93IGlzIHRoZSB3aG9sZSBtYW4gZ292ZXJuZWQgd2l0aCBvbmU6IHNvIHRoYXQgaWY8L0xJTkU+Ci08TElORT5oZSBoYXZlIHdpdCBlbm91Z2ggdG8ga2VlcCBoaW1zZWxmIHdhcm0sIGxldCBoaW08L0xJTkU+Ci08TElORT5iZWFyIGl0IGZvciBhIGRpZmZlcmVuY2UgYmV0d2VlbiBoaW1zZWxmIGFuZCBoaXM8L0xJTkU+Ci08TElORT5ob3JzZTsgZm9yIGl0IGlzIGFsbCB0aGUgd2VhbHRoIHRoYXQgaGUgaGF0aCBsZWZ0LDwvTElORT4KLTxMSU5FPnRvIGJlIGtub3duIGEgcmVhc29uYWJsZSBjcmVhdHVyZS4gV2hvIGlzIGhpczwvTElORT4KLTxMSU5FPmNvbXBhbmlvbiBub3c/IEhlIGhhdGggZXZlcnkgbW9udGggYSBuZXcgc3dvcm4gYnJvdGhlci48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPk1lc3NlbmdlcjwvU1BFQUtFUj4KLTxMSU5FPklzJ3QgcG9zc2libGU/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPlZlcnkgZWFzaWx5IHBvc3NpYmxlOiBoZSB3ZWFycyBoaXMgZmFpdGggYnV0IGFzPC9MSU5FPgotPExJTkU+dGhlIGZhc2hpb24gb2YgaGlzIGhhdDsgaXQgZXZlciBjaGFuZ2VzIHdpdGggdGhlPC9MSU5FPgotPExJTkU+bmV4dCBibG9jay48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPk1lc3NlbmdlcjwvU1BFQUtFUj4KLTxMSU5FPkkgc2VlLCBsYWR5LCB0aGUgZ2VudGxlbWFuIGlzIG5vdCBpbiB5b3VyIGJvb2tzLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5ObzsgYW4gaGUgd2VyZSwgSSB3b3VsZCBidXJuIG15IHN0dWR5LiBCdXQsIEkgcHJheTwvTElORT4KLTxMSU5FPnlvdSwgd2hvIGlzIGhpcyBjb21wYW5pb24/IElzIHRoZXJlIG5vIHlvdW5nPC9MSU5FPgotPExJTkU+c3F1YXJlciBub3cgdGhhdCB3aWxsIG1ha2UgYSB2b3lhZ2Ugd2l0aCBoaW0gdG8gdGhlIGRldmlsPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TWVzc2VuZ2VyPC9TUEVBS0VSPgotPExJTkU+SGUgaXMgbW9zdCBpbiB0aGUgY29tcGFueSBvZiB0aGUgcmlnaHQgbm9ibGUgQ2xhdWRpby48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+TyBMb3JkLCBoZSB3aWxsIGhhbmcgdXBvbiBoaW0gbGlrZSBhIGRpc2Vhc2U6IGhlPC9MSU5FPgotPExJTkU+aXMgc29vbmVyIGNhdWdodCB0aGFuIHRoZSBwZXN0aWxlbmNlLCBhbmQgdGhlIHRha2VyPC9MSU5FPgotPExJTkU+cnVucyBwcmVzZW50bHkgbWFkLiBHb2QgaGVscCB0aGUgbm9ibGUgQ2xhdWRpbyEgaWY8L0xJTkU+Ci08TElORT5oZSBoYXZlIGNhdWdodCB0aGUgQmVuZWRpY2ssIGl0IHdpbGwgY29zdCBoaW0gYTwvTElORT4KLTxMSU5FPnRob3VzYW5kIHBvdW5kIGVyZSBhJyBiZSBjdXJlZC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPk1lc3NlbmdlcjwvU1BFQUtFUj4KLTxMSU5FPkkgd2lsbCBob2xkIGZyaWVuZHMgd2l0aCB5b3UsIGxhZHkuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPkRvLCBnb29kIGZyaWVuZC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5Zb3Ugd2lsbCBuZXZlciBydW4gbWFkLCBuaWVjZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+Tm8sIG5vdCB0aWxsIGEgaG90IEphbnVhcnkuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5NZXNzZW5nZXI8L1NQRUFLRVI+Ci08TElORT5Eb24gUGVkcm8gaXMgYXBwcm9hY2hlZC48L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+RW50ZXIgRE9OIFBFRFJPLCBET04gSk9ITiwgQ0xBVURJTywgQkVORURJQ0ssCi1hbmQgQkFMVEhBU0FSPC9TVEFHRURJUj4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPkdvb2QgU2lnbmlvciBMZW9uYXRvLCB5b3UgYXJlIGNvbWUgdG8gbWVldCB5b3VyPC9MSU5FPgotPExJTkU+dHJvdWJsZTogdGhlIGZhc2hpb24gb2YgdGhlIHdvcmxkIGlzIHRvIGF2b2lkPC9MSU5FPgotPExJTkU+Y29zdCwgYW5kIHlvdSBlbmNvdW50ZXIgaXQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+TmV2ZXIgY2FtZSB0cm91YmxlIHRvIG15IGhvdXNlIGluIHRoZSBsaWtlbmVzcyBvZjwvTElORT4KLTxMSU5FPnlvdXIgZ3JhY2U6IGZvciB0cm91YmxlIGJlaW5nIGdvbmUsIGNvbWZvcnQgc2hvdWxkPC9MSU5FPgotPExJTkU+cmVtYWluOyBidXQgd2hlbiB5b3UgZGVwYXJ0IGZyb20gbWUsIHNvcnJvdyBhYmlkZXM8L0xJTkU+Ci08TElORT5hbmQgaGFwcGluZXNzIHRha2VzIGhpcyBsZWF2ZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPllvdSBlbWJyYWNlIHlvdXIgY2hhcmdlIHRvbyB3aWxsaW5nbHkuIEkgdGhpbmsgdGhpczwvTElORT4KLTxMSU5FPmlzIHlvdXIgZGF1Z2h0ZXIuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+SGVyIG1vdGhlciBoYXRoIG1hbnkgdGltZXMgdG9sZCBtZSBzby48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+V2VyZSB5b3UgaW4gZG91YnQsIHNpciwgdGhhdCB5b3UgYXNrZWQgaGVyPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPlNpZ25pb3IgQmVuZWRpY2ssIG5vOyBmb3IgdGhlbiB3ZXJlIHlvdSBhIGNoaWxkLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+WW91IGhhdmUgaXQgZnVsbCwgQmVuZWRpY2s6IHdlIG1heSBndWVzcyBieSB0aGlzPC9MSU5FPgotPExJTkU+d2hhdCB5b3UgYXJlLCBiZWluZyBhIG1hbi4gVHJ1bHksIHRoZSBsYWR5IGZhdGhlcnM8L0xJTkU+Ci08TElORT5oZXJzZWxmLiBCZSBoYXBweSwgbGFkeTsgZm9yIHlvdSBhcmUgbGlrZSBhbjwvTElORT4KLTxMSU5FPmhvbm91cmFibGUgZmF0aGVyLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5JZiBTaWduaW9yIExlb25hdG8gYmUgaGVyIGZhdGhlciwgc2hlIHdvdWxkIG5vdDwvTElORT4KLTxMSU5FPmhhdmUgaGlzIGhlYWQgb24gaGVyIHNob3VsZGVycyBmb3IgYWxsIE1lc3NpbmEsIGFzPC9MSU5FPgotPExJTkU+bGlrZSBoaW0gYXMgc2hlIGlzLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5JIHdvbmRlciB0aGF0IHlvdSB3aWxsIHN0aWxsIGJlIHRhbGtpbmcsIFNpZ25pb3I8L0xJTkU+Ci08TElORT5CZW5lZGljazogbm9ib2R5IG1hcmtzIHlvdS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+V2hhdCwgbXkgZGVhciBMYWR5IERpc2RhaW4hIGFyZSB5b3UgeWV0IGxpdmluZz88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+SXMgaXQgcG9zc2libGUgZGlzZGFpbiBzaG91bGQgZGllIHdoaWxlIHNoZSBoYXRoPC9MSU5FPgotPExJTkU+c3VjaCBtZWV0IGZvb2QgdG8gZmVlZCBpdCBhcyBTaWduaW9yIEJlbmVkaWNrPzwvTElORT4KLTxMSU5FPkNvdXJ0ZXN5IGl0c2VsZiBtdXN0IGNvbnZlcnQgdG8gZGlzZGFpbiwgaWYgeW91IGNvbWU8L0xJTkU+Ci08TElORT5pbiBoZXIgcHJlc2VuY2UuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPlRoZW4gaXMgY291cnRlc3kgYSB0dXJuY29hdC4gQnV0IGl0IGlzIGNlcnRhaW4gSTwvTElORT4KLTxMSU5FPmFtIGxvdmVkIG9mIGFsbCBsYWRpZXMsIG9ubHkgeW91IGV4Y2VwdGVkOiBhbmQgSTwvTElORT4KLTxMSU5FPndvdWxkIEkgY291bGQgZmluZCBpbiBteSBoZWFydCB0aGF0IEkgaGFkIG5vdCBhIGhhcmQ8L0xJTkU+Ci08TElORT5oZWFydDsgZm9yLCB0cnVseSwgSSBsb3ZlIG5vbmUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPkEgZGVhciBoYXBwaW5lc3MgdG8gd29tZW46IHRoZXkgd291bGQgZWxzZSBoYXZlPC9MSU5FPgotPExJTkU+YmVlbiB0cm91YmxlZCB3aXRoIGEgcGVybmljaW91cyBzdWl0b3IuIEkgdGhhbmsgR29kPC9MSU5FPgotPExJTkU+YW5kIG15IGNvbGQgYmxvb2QsIEkgYW0gb2YgeW91ciBodW1vdXIgZm9yIHRoYXQ6IEk8L0xJTkU+Ci08TElORT5oYWQgcmF0aGVyIGhlYXIgbXkgZG9nIGJhcmsgYXQgYSBjcm93IHRoYW4gYSBtYW48L0xJTkU+Ci08TElORT5zd2VhciBoZSBsb3ZlcyBtZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+R29kIGtlZXAgeW91ciBsYWR5c2hpcCBzdGlsbCBpbiB0aGF0IG1pbmQhIHNvIHNvbWU8L0xJTkU+Ci08TElORT5nZW50bGVtYW4gb3Igb3RoZXIgc2hhbGwgJ3NjYXBlIGEgcHJlZGVzdGluYXRlPC9MSU5FPgotPExJTkU+c2NyYXRjaGVkIGZhY2UuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPlNjcmF0Y2hpbmcgY291bGQgbm90IG1ha2UgaXQgd29yc2UsIGFuICd0d2VyZSBzdWNoPC9MSU5FPgotPExJTkU+YSBmYWNlIGFzIHlvdXJzIHdlcmUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPldlbGwsIHlvdSBhcmUgYSByYXJlIHBhcnJvdC10ZWFjaGVyLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5BIGJpcmQgb2YgbXkgdG9uZ3VlIGlzIGJldHRlciB0aGFuIGEgYmVhc3Qgb2YgeW91cnMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPkkgd291bGQgbXkgaG9yc2UgaGFkIHRoZSBzcGVlZCBvZiB5b3VyIHRvbmd1ZSwgYW5kPC9MSU5FPgotPExJTkU+c28gZ29vZCBhIGNvbnRpbnVlci4gQnV0IGtlZXAgeW91ciB3YXksIGknIEdvZCdzPC9MSU5FPgotPExJTkU+bmFtZTsgSSBoYXZlIGRvbmUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPllvdSBhbHdheXMgZW5kIHdpdGggYSBqYWRlJ3MgdHJpY2s6IEkga25vdyB5b3Ugb2Ygb2xkLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+VGhhdCBpcyB0aGUgc3VtIG9mIGFsbCwgTGVvbmF0by4gU2lnbmlvciBDbGF1ZGlvPC9MSU5FPgotPExJTkU+YW5kIFNpZ25pb3IgQmVuZWRpY2ssIG15IGRlYXIgZnJpZW5kIExlb25hdG8gaGF0aDwvTElORT4KLTxMSU5FPmludml0ZWQgeW91IGFsbC4gSSB0ZWxsIGhpbSB3ZSBzaGFsbCBzdGF5IGhlcmUgYXQ8L0xJTkU+Ci08TElORT50aGUgbGVhc3QgYSBtb250aDsgYW5kIGhlIGhlYXJ0aWx5IHByYXlzIHNvbWU8L0xJTkU+Ci08TElORT5vY2Nhc2lvbiBtYXkgZGV0YWluIHVzIGxvbmdlci4gSSBkYXJlIHN3ZWFyIGhlIGlzIG5vPC9MSU5FPgotPExJTkU+aHlwb2NyaXRlLCBidXQgcHJheXMgZnJvbSBoaXMgaGVhcnQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+SWYgeW91IHN3ZWFyLCBteSBsb3JkLCB5b3Ugc2hhbGwgbm90IGJlIGZvcnN3b3JuLjwvTElORT4KLTxTVEFHRURJUj5UbyBET04gSk9ITjwvU1RBR0VESVI+Ci08TElORT5MZXQgbWUgYmlkIHlvdSB3ZWxjb21lLCBteSBsb3JkOiBiZWluZyByZWNvbmNpbGVkIHRvPC9MSU5FPgotPExJTkU+dGhlIHByaW5jZSB5b3VyIGJyb3RoZXIsIEkgb3dlIHlvdSBhbGwgZHV0eS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBKT0hOPC9TUEVBS0VSPgotPExJTkU+SSB0aGFuayB5b3U6IEkgYW0gbm90IG9mIG1hbnkgd29yZHMsIGJ1dCBJIHRoYW5rPC9MSU5FPgotPExJTkU+eW91LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPlBsZWFzZSBpdCB5b3VyIGdyYWNlIGxlYWQgb24/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5Zb3VyIGhhbmQsIExlb25hdG87IHdlIHdpbGwgZ28gdG9nZXRoZXIuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLQotPFNUQUdFRElSPkV4ZXVudCBhbGwgZXhjZXB0IEJFTkVESUNLIGFuZCBDTEFVRElPPC9TVEFHRURJUj4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5CZW5lZGljaywgZGlkc3QgdGhvdSBub3RlIHRoZSBkYXVnaHRlciBvZiBTaWduaW9yIExlb25hdG8/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPkkgbm90ZWQgaGVyIG5vdDsgYnV0IEkgbG9va2VkIG9uIGhlci48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5JcyBzaGUgbm90IGEgbW9kZXN0IHlvdW5nIGxhZHk/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPkRvIHlvdSBxdWVzdGlvbiBtZSwgYXMgYW4gaG9uZXN0IG1hbiBzaG91bGQgZG8sIGZvcjwvTElORT4KLTxMSU5FPm15IHNpbXBsZSB0cnVlIGp1ZGdtZW50OyBvciB3b3VsZCB5b3UgaGF2ZSBtZSBzcGVhazwvTElORT4KLTxMSU5FPmFmdGVyIG15IGN1c3RvbSwgYXMgYmVpbmcgYSBwcm9mZXNzZWQgdHlyYW50IHRvIHRoZWlyIHNleD88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5ObzsgSSBwcmF5IHRoZWUgc3BlYWsgaW4gc29iZXIganVkZ21lbnQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPldoeSwgaScgZmFpdGgsIG1ldGhpbmtzIHNoZSdzIHRvbyBsb3cgZm9yIGEgaGlnaDwvTElORT4KLTxMSU5FPnByYWlzZSwgdG9vIGJyb3duIGZvciBhIGZhaXIgcHJhaXNlIGFuZCB0b28gbGl0dGxlPC9MSU5FPgotPExJTkU+Zm9yIGEgZ3JlYXQgcHJhaXNlOiBvbmx5IHRoaXMgY29tbWVuZGF0aW9uIEkgY2FuPC9MSU5FPgotPExJTkU+YWZmb3JkIGhlciwgdGhhdCB3ZXJlIHNoZSBvdGhlciB0aGFuIHNoZSBpcywgc2hlPC9MSU5FPgotPExJTkU+d2VyZSB1bmhhbmRzb21lOyBhbmQgYmVpbmcgbm8gb3RoZXIgYnV0IGFzIHNoZSBpcywgSTwvTElORT4KLTxMSU5FPmRvIG5vdCBsaWtlIGhlci48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5UaG91IHRoaW5rZXN0IEkgYW0gaW4gc3BvcnQ6IEkgcHJheSB0aGVlIHRlbGwgbWU8L0xJTkU+Ci08TElORT50cnVseSBob3cgdGhvdSBsaWtlc3QgaGVyLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5Xb3VsZCB5b3UgYnV5IGhlciwgdGhhdCB5b3UgaW5xdWlyZSBhZnRlciBoZXI/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+Q2FuIHRoZSB3b3JsZCBidXkgc3VjaCBhIGpld2VsPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5ZZWEsIGFuZCBhIGNhc2UgdG8gcHV0IGl0IGludG8uIEJ1dCBzcGVhayB5b3UgdGhpczwvTElORT4KLTxMSU5FPndpdGggYSBzYWQgYnJvdz8gb3IgZG8geW91IHBsYXkgdGhlIGZsb3V0aW5nIEphY2ssPC9MSU5FPgotPExJTkU+dG8gdGVsbCB1cyBDdXBpZCBpcyBhIGdvb2QgaGFyZS1maW5kZXIgYW5kIFZ1bGNhbiBhPC9MSU5FPgotPExJTkU+cmFyZSBjYXJwZW50ZXI/IENvbWUsIGluIHdoYXQga2V5IHNoYWxsIGEgbWFuIHRha2U8L0xJTkU+Ci08TElORT55b3UsIHRvIGdvIGluIHRoZSBzb25nPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPkluIG1pbmUgZXllIHNoZSBpcyB0aGUgc3dlZXRlc3QgbGFkeSB0aGF0IGV2ZXIgSTwvTElORT4KLTxMSU5FPmxvb2tlZCBvbi48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+SSBjYW4gc2VlIHlldCB3aXRob3V0IHNwZWN0YWNsZXMgYW5kIEkgc2VlIG5vIHN1Y2g8L0xJTkU+Ci08TElORT5tYXR0ZXI6IHRoZXJlJ3MgaGVyIGNvdXNpbiwgYW4gc2hlIHdlcmUgbm90PC9MSU5FPgotPExJTkU+cG9zc2Vzc2VkIHdpdGggYSBmdXJ5LCBleGNlZWRzIGhlciBhcyBtdWNoIGluIGJlYXV0eTwvTElORT4KLTxMSU5FPmFzIHRoZSBmaXJzdCBvZiBNYXkgZG90aCB0aGUgbGFzdCBvZiBEZWNlbWJlci4gQnV0IEk8L0xJTkU+Ci08TElORT5ob3BlIHlvdSBoYXZlIG5vIGludGVudCB0byB0dXJuIGh1c2JhbmQsIGhhdmUgeW91PzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPkkgd291bGQgc2NhcmNlIHRydXN0IG15c2VsZiwgdGhvdWdoIEkgaGFkIHN3b3JuIHRoZTwvTElORT4KLTxMSU5FPmNvbnRyYXJ5LCBpZiBIZXJvIHdvdWxkIGJlIG15IHdpZmUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPklzJ3QgY29tZSB0byB0aGlzPyBJbiBmYWl0aCwgaGF0aCBub3QgdGhlIHdvcmxkPC9MSU5FPgotPExJTkU+b25lIG1hbiBidXQgaGUgd2lsbCB3ZWFyIGhpcyBjYXAgd2l0aCBzdXNwaWNpb24/PC9MSU5FPgotPExJTkU+U2hhbGwgSSBuZXZlciBzZWUgYSBiYWNoZWxvciBvZiB0aHJlZS1zY29yZSBhZ2Fpbj88L0xJTkU+Ci08TElORT5HbyB0bywgaScgZmFpdGg7IGFuIHRob3Ugd2lsdCBuZWVkcyB0aHJ1c3QgdGh5IG5lY2s8L0xJTkU+Ci08TElORT5pbnRvIGEgeW9rZSwgd2VhciB0aGUgcHJpbnQgb2YgaXQgYW5kIHNpZ2ggYXdheTwvTElORT4KLTxMSU5FPlN1bmRheXMuIExvb2sgRG9uIFBlZHJvIGlzIHJldHVybmVkIHRvIHNlZWsgeW91LjwvTElORT4KLTwvU1BFRUNIPgotCi0KLTxTVEFHRURJUj5SZS1lbnRlciBET04gUEVEUk88L1NUQUdFRElSPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+V2hhdCBzZWNyZXQgaGF0aCBoZWxkIHlvdSBoZXJlLCB0aGF0IHlvdSBmb2xsb3dlZDwvTElORT4KLTxMSU5FPm5vdCB0byBMZW9uYXRvJ3M/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPkkgd291bGQgeW91ciBncmFjZSB3b3VsZCBjb25zdHJhaW4gbWUgdG8gdGVsbC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPkkgY2hhcmdlIHRoZWUgb24gdGh5IGFsbGVnaWFuY2UuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPllvdSBoZWFyLCBDb3VudCBDbGF1ZGlvOiBJIGNhbiBiZSBzZWNyZXQgYXMgYSBkdW1iPC9MSU5FPgotPExJTkU+bWFuOyBJIHdvdWxkIGhhdmUgeW91IHRoaW5rIHNvOyBidXQsIG9uIG15PC9MSU5FPgotPExJTkU+YWxsZWdpYW5jZSwgbWFyayB5b3UgdGhpcywgb24gbXkgYWxsZWdpYW5jZS4gSGUgaXM8L0xJTkU+Ci08TElORT5pbiBsb3ZlLiBXaXRoIHdobz8gbm93IHRoYXQgaXMgeW91ciBncmFjZSdzIHBhcnQuPC9MSU5FPgotPExJTkU+TWFyayBob3cgc2hvcnQgaGlzIGFuc3dlciBpczstLVdpdGggSGVybywgTGVvbmF0bydzPC9MSU5FPgotPExJTkU+c2hvcnQgZGF1Z2h0ZXIuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+SWYgdGhpcyB3ZXJlIHNvLCBzbyB3ZXJlIGl0IHV0dGVyZWQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPkxpa2UgdGhlIG9sZCB0YWxlLCBteSBsb3JkOiAnaXQgaXMgbm90IHNvLCBub3I8L0xJTkU+Ci08TElORT4ndHdhcyBub3Qgc28sIGJ1dCwgaW5kZWVkLCBHb2QgZm9yYmlkIGl0IHNob3VsZCBiZTwvTElORT4KLTxMSU5FPnNvLic8L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5JZiBteSBwYXNzaW9uIGNoYW5nZSBub3Qgc2hvcnRseSwgR29kIGZvcmJpZCBpdDwvTElORT4KLTxMSU5FPnNob3VsZCBiZSBvdGhlcndpc2UuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5BbWVuLCBpZiB5b3UgbG92ZSBoZXI7IGZvciB0aGUgbGFkeSBpcyB2ZXJ5IHdlbGwgd29ydGh5LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPllvdSBzcGVhayB0aGlzIHRvIGZldGNoIG1lIGluLCBteSBsb3JkLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+QnkgbXkgdHJvdGgsIEkgc3BlYWsgbXkgdGhvdWdodC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5BbmQsIGluIGZhaXRoLCBteSBsb3JkLCBJIHNwb2tlIG1pbmUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPkFuZCwgYnkgbXkgdHdvIGZhaXRocyBhbmQgdHJvdGhzLCBteSBsb3JkLCBJIHNwb2tlIG1pbmUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+VGhhdCBJIGxvdmUgaGVyLCBJIGZlZWwuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5UaGF0IHNoZSBpcyB3b3J0aHksIEkga25vdy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+VGhhdCBJIG5laXRoZXIgZmVlbCBob3cgc2hlIHNob3VsZCBiZSBsb3ZlZCBub3I8L0xJTkU+Ci08TElORT5rbm93IGhvdyBzaGUgc2hvdWxkIGJlIHdvcnRoeSwgaXMgdGhlIG9waW5pb24gdGhhdDwvTElORT4KLTxMSU5FPmZpcmUgY2Fubm90IG1lbHQgb3V0IG9mIG1lOiBJIHdpbGwgZGllIGluIGl0IGF0IHRoZSBzdGFrZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPlRob3Ugd2FzdCBldmVyIGFuIG9ic3RpbmF0ZSBoZXJldGljIGluIHRoZSBkZXNwaXRlPC9MSU5FPgotPExJTkU+b2YgYmVhdXR5LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPkFuZCBuZXZlciBjb3VsZCBtYWludGFpbiBoaXMgcGFydCBidXQgaW4gdGhlIGZvcmNlPC9MSU5FPgotPExJTkU+b2YgaGlzIHdpbGwuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPlRoYXQgYSB3b21hbiBjb25jZWl2ZWQgbWUsIEkgdGhhbmsgaGVyOyB0aGF0IHNoZTwvTElORT4KLTxMSU5FPmJyb3VnaHQgbWUgdXAsIEkgbGlrZXdpc2UgZ2l2ZSBoZXIgbW9zdCBodW1ibGU8L0xJTkU+Ci08TElORT50aGFua3M6IGJ1dCB0aGF0IEkgd2lsbCBoYXZlIGEgcmVjaGVhdCB3aW5kZWQgaW4gbXk8L0xJTkU+Ci08TElORT5mb3JlaGVhZCwgb3IgaGFuZyBteSBidWdsZSBpbiBhbiBpbnZpc2libGUgYmFsZHJpY2ssPC9MSU5FPgotPExJTkU+YWxsIHdvbWVuIHNoYWxsIHBhcmRvbiBtZS4gQmVjYXVzZSBJIHdpbGwgbm90IGRvPC9MSU5FPgotPExJTkU+dGhlbSB0aGUgd3JvbmcgdG8gbWlzdHJ1c3QgYW55LCBJIHdpbGwgZG8gbXlzZWxmIHRoZTwvTElORT4KLTxMSU5FPnJpZ2h0IHRvIHRydXN0IG5vbmU7IGFuZCB0aGUgZmluZSBpcywgZm9yIHRoZSB3aGljaDwvTElORT4KLTxMSU5FPkkgbWF5IGdvIHRoZSBmaW5lciwgSSB3aWxsIGxpdmUgYSBiYWNoZWxvci48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPkkgc2hhbGwgc2VlIHRoZWUsIGVyZSBJIGRpZSwgbG9vayBwYWxlIHdpdGggbG92ZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+V2l0aCBhbmdlciwgd2l0aCBzaWNrbmVzcywgb3Igd2l0aCBodW5nZXIsIG15IGxvcmQsPC9MSU5FPgotPExJTkU+bm90IHdpdGggbG92ZTogcHJvdmUgdGhhdCBldmVyIEkgbG9zZSBtb3JlIGJsb29kPC9MSU5FPgotPExJTkU+d2l0aCBsb3ZlIHRoYW4gSSB3aWxsIGdldCBhZ2FpbiB3aXRoIGRyaW5raW5nLCBwaWNrPC9MSU5FPgotPExJTkU+b3V0IG1pbmUgZXllcyB3aXRoIGEgYmFsbGFkLW1ha2VyJ3MgcGVuIGFuZCBoYW5nIG1lPC9MSU5FPgotPExJTkU+dXAgYXQgdGhlIGRvb3Igb2YgYSBicm90aGVsLWhvdXNlIGZvciB0aGUgc2lnbiBvZjwvTElORT4KLTxMSU5FPmJsaW5kIEN1cGlkLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+V2VsbCwgaWYgZXZlciB0aG91IGRvc3QgZmFsbCBmcm9tIHRoaXMgZmFpdGgsIHRob3U8L0xJTkU+Ci08TElORT53aWx0IHByb3ZlIGEgbm90YWJsZSBhcmd1bWVudC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+SWYgSSBkbywgaGFuZyBtZSBpbiBhIGJvdHRsZSBsaWtlIGEgY2F0IGFuZCBzaG9vdDwvTElORT4KLTxMSU5FPmF0IG1lOyBhbmQgaGUgdGhhdCBoaXRzIG1lLCBsZXQgaGltIGJlIGNsYXBwZWQgb248L0xJTkU+Ci08TElORT50aGUgc2hvdWxkZXIsIGFuZCBjYWxsZWQgQWRhbS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPldlbGwsIGFzIHRpbWUgc2hhbGwgdHJ5OiAnSW4gdGltZSB0aGUgc2F2YWdlIGJ1bGw8L0xJTkU+Ci08TElORT5kb3RoIGJlYXIgdGhlIHlva2UuJzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5UaGUgc2F2YWdlIGJ1bGwgbWF5OyBidXQgaWYgZXZlciB0aGUgc2Vuc2libGU8L0xJTkU+Ci08TElORT5CZW5lZGljayBiZWFyIGl0LCBwbHVjayBvZmYgdGhlIGJ1bGwncyBob3JucyBhbmQgc2V0PC9MSU5FPgotPExJTkU+dGhlbSBpbiBteSBmb3JlaGVhZDogYW5kIGxldCBtZSBiZSB2aWxlbHkgcGFpbnRlZCw8L0xJTkU+Ci08TElORT5hbmQgaW4gc3VjaCBncmVhdCBsZXR0ZXJzIGFzIHRoZXkgd3JpdGUgJ0hlcmUgaXM8L0xJTkU+Ci08TElORT5nb29kIGhvcnNlIHRvIGhpcmUsJyBsZXQgdGhlbSBzaWduaWZ5IHVuZGVyIG15IHNpZ248L0xJTkU+Ci08TElORT4nSGVyZSB5b3UgbWF5IHNlZSBCZW5lZGljayB0aGUgbWFycmllZCBtYW4uJzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPklmIHRoaXMgc2hvdWxkIGV2ZXIgaGFwcGVuLCB0aG91IHdvdWxkc3QgYmUgaG9ybi1tYWQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5OYXksIGlmIEN1cGlkIGhhdmUgbm90IHNwZW50IGFsbCBoaXMgcXVpdmVyIGluPC9MSU5FPgotPExJTkU+VmVuaWNlLCB0aG91IHdpbHQgcXVha2UgZm9yIHRoaXMgc2hvcnRseS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+SSBsb29rIGZvciBhbiBlYXJ0aHF1YWtlIHRvbywgdGhlbi48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPldlbGwsIHlvdSB0ZW1wb3JpemUgd2l0aCB0aGUgaG91cnMuIEluIHRoZTwvTElORT4KLTxMSU5FPm1lYW50aW1lLCBnb29kIFNpZ25pb3IgQmVuZWRpY2ssIHJlcGFpciB0bzwvTElORT4KLTxMSU5FPkxlb25hdG8nczogY29tbWVuZCBtZSB0byBoaW0gYW5kIHRlbGwgaGltIEkgd2lsbDwvTElORT4KLTxMSU5FPm5vdCBmYWlsIGhpbSBhdCBzdXBwZXI7IGZvciBpbmRlZWQgaGUgaGF0aCBtYWRlPC9MSU5FPgotPExJTkU+Z3JlYXQgcHJlcGFyYXRpb24uPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPkkgaGF2ZSBhbG1vc3QgbWF0dGVyIGVub3VnaCBpbiBtZSBmb3Igc3VjaCBhbjwvTElORT4KLTxMSU5FPmVtYmFzc2FnZTsgYW5kIHNvIEkgY29tbWl0IHlvdS0tPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+VG8gdGhlIHR1aXRpb24gb2YgR29kOiBGcm9tIG15IGhvdXNlLCBpZiBJIGhhZCBpdCwtLTwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+VGhlIHNpeHRoIG9mIEp1bHk6IFlvdXIgbG92aW5nIGZyaWVuZCwgQmVuZWRpY2suPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPk5heSwgbW9jayBub3QsIG1vY2sgbm90LiBUaGUgYm9keSBvZiB5b3VyPC9MSU5FPgotPExJTkU+ZGlzY291cnNlIGlzIHNvbWV0aW1lIGd1YXJkZWQgd2l0aCBmcmFnbWVudHMsIGFuZDwvTElORT4KLTxMSU5FPnRoZSBndWFyZHMgYXJlIGJ1dCBzbGlnaHRseSBiYXN0ZWQgb24gbmVpdGhlcjogZXJlPC9MSU5FPgotPExJTkU+eW91IGZsb3V0IG9sZCBlbmRzIGFueSBmdXJ0aGVyLCBleGFtaW5lIHlvdXI8L0xJTkU+Ci08TElORT5jb25zY2llbmNlOiBhbmQgc28gSSBsZWF2ZSB5b3UuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLQotPFNUQUdFRElSPkV4aXQ8L1NUQUdFRElSPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPk15IGxpZWdlLCB5b3VyIGhpZ2huZXNzIG5vdyBtYXkgZG8gbWUgZ29vZC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPk15IGxvdmUgaXMgdGhpbmUgdG8gdGVhY2g6IHRlYWNoIGl0IGJ1dCBob3csPC9MSU5FPgotPExJTkU+QW5kIHRob3Ugc2hhbHQgc2VlIGhvdyBhcHQgaXQgaXMgdG8gbGVhcm48L0xJTkU+Ci08TElORT5BbnkgaGFyZCBsZXNzb24gdGhhdCBtYXkgZG8gdGhlZSBnb29kLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPkhhdGggTGVvbmF0byBhbnkgc29uLCBteSBsb3JkPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+Tm8gY2hpbGQgYnV0IEhlcm87IHNoZSdzIGhpcyBvbmx5IGhlaXIuPC9MSU5FPgotPExJTkU+RG9zdCB0aG91IGFmZmVjdCBoZXIsIENsYXVkaW8/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+TywgbXkgbG9yZCw8L0xJTkU+Ci08TElORT5XaGVuIHlvdSB3ZW50IG9ud2FyZCBvbiB0aGlzIGVuZGVkIGFjdGlvbiw8L0xJTkU+Ci08TElORT5JIGxvb2snZCB1cG9uIGhlciB3aXRoIGEgc29sZGllcidzIGV5ZSw8L0xJTkU+Ci08TElORT5UaGF0IGxpa2VkLCBidXQgaGFkIGEgcm91Z2hlciB0YXNrIGluIGhhbmQ8L0xJTkU+Ci08TElORT5UaGFuIHRvIGRyaXZlIGxpa2luZyB0byB0aGUgbmFtZSBvZiBsb3ZlOjwvTElORT4KLTxMSU5FPkJ1dCBub3cgSSBhbSByZXR1cm4nZCBhbmQgdGhhdCB3YXItdGhvdWdodHM8L0xJTkU+Ci08TElORT5IYXZlIGxlZnQgdGhlaXIgcGxhY2VzIHZhY2FudCwgaW4gdGhlaXIgcm9vbXM8L0xJTkU+Ci08TElORT5Db21lIHRocm9uZ2luZyBzb2Z0IGFuZCBkZWxpY2F0ZSBkZXNpcmVzLDwvTElORT4KLTxMSU5FPkFsbCBwcm9tcHRpbmcgbWUgaG93IGZhaXIgeW91bmcgSGVybyBpcyw8L0xJTkU+Ci08TElORT5TYXlpbmcsIEkgbGlrZWQgaGVyIGVyZSBJIHdlbnQgdG8gd2Fycy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPlRob3Ugd2lsdCBiZSBsaWtlIGEgbG92ZXIgcHJlc2VudGx5PC9MSU5FPgotPExJTkU+QW5kIHRpcmUgdGhlIGhlYXJlciB3aXRoIGEgYm9vayBvZiB3b3Jkcy48L0xJTkU+Ci08TElORT5JZiB0aG91IGRvc3QgbG92ZSBmYWlyIEhlcm8sIGNoZXJpc2ggaXQsPC9MSU5FPgotPExJTkU+QW5kIEkgd2lsbCBicmVhayB3aXRoIGhlciBhbmQgd2l0aCBoZXIgZmF0aGVyLDwvTElORT4KLTxMSU5FPkFuZCB0aG91IHNoYWx0IGhhdmUgaGVyLiBXYXMndCBub3QgdG8gdGhpcyBlbmQ8L0xJTkU+Ci08TElORT5UaGF0IHRob3UgYmVnYW4nc3QgdG8gdHdpc3Qgc28gZmluZSBhIHN0b3J5PzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPkhvdyBzd2VldGx5IHlvdSBkbyBtaW5pc3RlciB0byBsb3ZlLDwvTElORT4KLTxMSU5FPlRoYXQga25vdyBsb3ZlJ3MgZ3JpZWYgYnkgaGlzIGNvbXBsZXhpb24hPC9MSU5FPgotPExJTkU+QnV0IGxlc3QgbXkgbGlraW5nIG1pZ2h0IHRvbyBzdWRkZW4gc2VlbSw8L0xJTkU+Ci08TElORT5JIHdvdWxkIGhhdmUgc2FsdmVkIGl0IHdpdGggYSBsb25nZXIgdHJlYXRpc2UuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5XaGF0IG5lZWQgdGhlIGJyaWRnZSBtdWNoIGJyb2FkZXIgdGhhbiB0aGUgZmxvb2Q/PC9MSU5FPgotPExJTkU+VGhlIGZhaXJlc3QgZ3JhbnQgaXMgdGhlIG5lY2Vzc2l0eS48L0xJTkU+Ci08TElORT5Mb29rLCB3aGF0IHdpbGwgc2VydmUgaXMgZml0OiAndGlzIG9uY2UsIHRob3UgbG92ZXN0LDwvTElORT4KLTxMSU5FPkFuZCBJIHdpbGwgZml0IHRoZWUgd2l0aCB0aGUgcmVtZWR5LjwvTElORT4KLTxMSU5FPkkga25vdyB3ZSBzaGFsbCBoYXZlIHJldmVsbGluZyB0by1uaWdodDo8L0xJTkU+Ci08TElORT5JIHdpbGwgYXNzdW1lIHRoeSBwYXJ0IGluIHNvbWUgZGlzZ3Vpc2U8L0xJTkU+Ci08TElORT5BbmQgdGVsbCBmYWlyIEhlcm8gSSBhbSBDbGF1ZGlvLDwvTElORT4KLTxMSU5FPkFuZCBpbiBoZXIgYm9zb20gSSdsbCB1bmNsYXNwIG15IGhlYXJ0PC9MSU5FPgotPExJTkU+QW5kIHRha2UgaGVyIGhlYXJpbmcgcHJpc29uZXIgd2l0aCB0aGUgZm9yY2U8L0xJTkU+Ci08TElORT5BbmQgc3Ryb25nIGVuY291bnRlciBvZiBteSBhbW9yb3VzIHRhbGU6PC9MSU5FPgotPExJTkU+VGhlbiBhZnRlciB0byBoZXIgZmF0aGVyIHdpbGwgSSBicmVhazs8L0xJTkU+Ci08TElORT5BbmQgdGhlIGNvbmNsdXNpb24gaXMsIHNoZSBzaGFsbCBiZSB0aGluZS48L0xJTkU+Ci08TElORT5JbiBwcmFjdGlzZSBsZXQgdXMgcHV0IGl0IHByZXNlbnRseS48L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+RXhldW50PC9TVEFHRURJUj4KLTwvU0NFTkU+Ci0KLTxTQ0VORT48VElUTEU+U0NFTkUgSUkuICBBIHJvb20gaW4gTEVPTkFUTydzIGhvdXNlLjwvVElUTEU+Ci08U1RBR0VESVI+RW50ZXIgTEVPTkFUTyBhbmQgQU5UT05JTywgbWVldGluZzwvU1RBR0VESVI+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+SG93IG5vdywgYnJvdGhlciEgV2hlcmUgaXMgbXkgY291c2luLCB5b3VyIHNvbj88L0xJTkU+Ci08TElORT5oYXRoIGhlIHByb3ZpZGVkIHRoaXMgbXVzaWM/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5BTlRPTklPPC9TUEVBS0VSPgotPExJTkU+SGUgaXMgdmVyeSBidXN5IGFib3V0IGl0LiBCdXQsIGJyb3RoZXIsIEkgY2FuIHRlbGw8L0xJTkU+Ci08TElORT55b3Ugc3RyYW5nZSBuZXdzIHRoYXQgeW91IHlldCBkcmVhbXQgbm90IG9mLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPkFyZSB0aGV5IGdvb2Q/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5BTlRPTklPPC9TUEVBS0VSPgotPExJTkU+QXMgdGhlIGV2ZW50IHN0YW1wcyB0aGVtOiBidXQgdGhleSBoYXZlIGEgZ29vZDwvTElORT4KLTxMSU5FPmNvdmVyOyB0aGV5IHNob3cgd2VsbCBvdXR3YXJkLiBUaGUgcHJpbmNlIGFuZCBDb3VudDwvTElORT4KLTxMSU5FPkNsYXVkaW8sIHdhbGtpbmcgaW4gYSB0aGljay1wbGVhY2hlZCBhbGxleSBpbiBtaW5lPC9MSU5FPgotPExJTkU+b3JjaGFyZCwgd2VyZSB0aHVzIG11Y2ggb3ZlcmhlYXJkIGJ5IGEgbWFuIG9mIG1pbmU6PC9MSU5FPgotPExJTkU+dGhlIHByaW5jZSBkaXNjb3ZlcmVkIHRvIENsYXVkaW8gdGhhdCBoZSBsb3ZlZCBteTwvTElORT4KLTxMSU5FPm5pZWNlIHlvdXIgZGF1Z2h0ZXIgYW5kIG1lYW50IHRvIGFja25vd2xlZGdlIGl0PC9MSU5FPgotPExJTkU+dGhpcyBuaWdodCBpbiBhIGRhbmNlOiBhbmQgaWYgaGUgZm91bmQgaGVyPC9MSU5FPgotPExJTkU+YWNjb3JkYW50LCBoZSBtZWFudCB0byB0YWtlIHRoZSBwcmVzZW50IHRpbWUgYnkgdGhlPC9MSU5FPgotPExJTkU+dG9wIGFuZCBpbnN0YW50bHkgYnJlYWsgd2l0aCB5b3Ugb2YgaXQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+SGF0aCB0aGUgZmVsbG93IGFueSB3aXQgdGhhdCB0b2xkIHlvdSB0aGlzPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QU5UT05JTzwvU1BFQUtFUj4KLTxMSU5FPkEgZ29vZCBzaGFycCBmZWxsb3c6IEkgd2lsbCBzZW5kIGZvciBoaW07IGFuZDwvTElORT4KLTxMSU5FPnF1ZXN0aW9uIGhpbSB5b3Vyc2VsZi48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5Obywgbm87IHdlIHdpbGwgaG9sZCBpdCBhcyBhIGRyZWFtIHRpbGwgaXQgYXBwZWFyPC9MSU5FPgotPExJTkU+aXRzZWxmOiBidXQgSSB3aWxsIGFjcXVhaW50IG15IGRhdWdodGVyIHdpdGhhbCw8L0xJTkU+Ci08TElORT50aGF0IHNoZSBtYXkgYmUgdGhlIGJldHRlciBwcmVwYXJlZCBmb3IgYW4gYW5zd2VyLDwvTElORT4KLTxMSU5FPmlmIHBlcmFkdmVudHVyZSB0aGlzIGJlIHRydWUuIEdvIHlvdSBhbmQgdGVsbCBoZXIgb2YgaXQuPC9MSU5FPgotPFNUQUdFRElSPkVudGVyIEF0dGVuZGFudHM8L1NUQUdFRElSPgotPExJTkU+Q291c2lucywgeW91IGtub3cgd2hhdCB5b3UgaGF2ZSB0byBkby4gTywgSSBjcnkgeW91PC9MSU5FPgotPExJTkU+bWVyY3ksIGZyaWVuZDsgZ28geW91IHdpdGggbWUsIGFuZCBJIHdpbGwgdXNlIHlvdXI8L0xJTkU+Ci08TElORT5za2lsbC4gR29vZCBjb3VzaW4sIGhhdmUgYSBjYXJlIHRoaXMgYnVzeSB0aW1lLjwvTElORT4KLTwvU1BFRUNIPgotCi0KLTxTVEFHRURJUj5FeGV1bnQ8L1NUQUdFRElSPgotPC9TQ0VORT4KLQotPFNDRU5FPjxUSVRMRT5TQ0VORSBJSUkuICBUaGUgc2FtZS48L1RJVExFPgotPFNUQUdFRElSPkVudGVyIERPTiBKT0hOIGFuZCBDT05SQURFPC9TVEFHRURJUj4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNPTlJBREU8L1NQRUFLRVI+Ci08TElORT5XaGF0IHRoZSBnb29kLXllYXIsIG15IGxvcmQhIHdoeSBhcmUgeW91IHRodXMgb3V0PC9MSU5FPgotPExJTkU+b2YgbWVhc3VyZSBzYWQ/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gSk9ITjwvU1BFQUtFUj4KLTxMSU5FPlRoZXJlIGlzIG5vIG1lYXN1cmUgaW4gdGhlIG9jY2FzaW9uIHRoYXQgYnJlZWRzOzwvTElORT4KLTxMSU5FPnRoZXJlZm9yZSB0aGUgc2FkbmVzcyBpcyB3aXRob3V0IGxpbWl0LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q09OUkFERTwvU1BFQUtFUj4KLTxMSU5FPllvdSBzaG91bGQgaGVhciByZWFzb24uPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gSk9ITjwvU1BFQUtFUj4KLTxMSU5FPkFuZCB3aGVuIEkgaGF2ZSBoZWFyZCBpdCwgd2hhdCBibGVzc2luZyBicmluZ3MgaXQ/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DT05SQURFPC9TUEVBS0VSPgotPExJTkU+SWYgbm90IGEgcHJlc2VudCByZW1lZHksIGF0IGxlYXN0IGEgcGF0aWVudDwvTElORT4KLTxMSU5FPnN1ZmZlcmFuY2UuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gSk9ITjwvU1BFQUtFUj4KLTxMSU5FPkkgd29uZGVyIHRoYXQgdGhvdSwgYmVpbmcsIGFzIHRob3Ugc2F5ZXN0IHRob3UgYXJ0LDwvTElORT4KLTxMSU5FPmJvcm4gdW5kZXIgU2F0dXJuLCBnb2VzdCBhYm91dCB0byBhcHBseSBhIG1vcmFsPC9MSU5FPgotPExJTkU+bWVkaWNpbmUgdG8gYSBtb3J0aWZ5aW5nIG1pc2NoaWVmLiBJIGNhbm5vdCBoaWRlPC9MSU5FPgotPExJTkU+d2hhdCBJIGFtOiBJIG11c3QgYmUgc2FkIHdoZW4gSSBoYXZlIGNhdXNlIGFuZCBzbWlsZTwvTElORT4KLTxMSU5FPmF0IG5vIG1hbidzIGplc3RzLCBlYXQgd2hlbiBJIGhhdmUgc3RvbWFjaCBhbmQgd2FpdDwvTElORT4KLTxMSU5FPmZvciBubyBtYW4ncyBsZWlzdXJlLCBzbGVlcCB3aGVuIEkgYW0gZHJvd3N5IGFuZDwvTElORT4KLTxMSU5FPnRlbmQgb24gbm8gbWFuJ3MgYnVzaW5lc3MsIGxhdWdoIHdoZW4gSSBhbSBtZXJyeSBhbmQ8L0xJTkU+Ci08TElORT5jbGF3IG5vIG1hbiBpbiBoaXMgaHVtb3VyLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q09OUkFERTwvU1BFQUtFUj4KLTxMSU5FPlllYSwgYnV0IHlvdSBtdXN0IG5vdCBtYWtlIHRoZSBmdWxsIHNob3cgb2YgdGhpczwvTElORT4KLTxMSU5FPnRpbGwgeW91IG1heSBkbyBpdCB3aXRob3V0IGNvbnRyb2xtZW50LiBZb3UgaGF2ZSBvZjwvTElORT4KLTxMSU5FPmxhdGUgc3Rvb2Qgb3V0IGFnYWluc3QgeW91ciBicm90aGVyLCBhbmQgaGUgaGF0aDwvTElORT4KLTxMSU5FPnRhJ2VuIHlvdSBuZXdseSBpbnRvIGhpcyBncmFjZTsgd2hlcmUgaXQgaXM8L0xJTkU+Ci08TElORT5pbXBvc3NpYmxlIHlvdSBzaG91bGQgdGFrZSB0cnVlIHJvb3QgYnV0IGJ5IHRoZTwvTElORT4KLTxMSU5FPmZhaXIgd2VhdGhlciB0aGF0IHlvdSBtYWtlIHlvdXJzZWxmOiBpdCBpcyBuZWVkZnVsPC9MSU5FPgotPExJTkU+dGhhdCB5b3UgZnJhbWUgdGhlIHNlYXNvbiBmb3IgeW91ciBvd24gaGFydmVzdC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBKT0hOPC9TUEVBS0VSPgotPExJTkU+SSBoYWQgcmF0aGVyIGJlIGEgY2Fua2VyIGluIGEgaGVkZ2UgdGhhbiBhIHJvc2UgaW48L0xJTkU+Ci08TElORT5oaXMgZ3JhY2UsIGFuZCBpdCBiZXR0ZXIgZml0cyBteSBibG9vZCB0byBiZTwvTElORT4KLTxMSU5FPmRpc2RhaW5lZCBvZiBhbGwgdGhhbiB0byBmYXNoaW9uIGEgY2FycmlhZ2UgdG8gcm9iPC9MSU5FPgotPExJTkU+bG92ZSBmcm9tIGFueTogaW4gdGhpcywgdGhvdWdoIEkgY2Fubm90IGJlIHNhaWQgdG88L0xJTkU+Ci08TElORT5iZSBhIGZsYXR0ZXJpbmcgaG9uZXN0IG1hbiwgaXQgbXVzdCBub3QgYmUgZGVuaWVkPC9MSU5FPgotPExJTkU+YnV0IEkgYW0gYSBwbGFpbi1kZWFsaW5nIHZpbGxhaW4uIEkgYW0gdHJ1c3RlZCB3aXRoPC9MSU5FPgotPExJTkU+YSBtdXp6bGUgYW5kIGVuZnJhbmNoaXNlZCB3aXRoIGEgY2xvZzsgdGhlcmVmb3JlIEk8L0xJTkU+Ci08TElORT5oYXZlIGRlY3JlZWQgbm90IHRvIHNpbmcgaW4gbXkgY2FnZS4gSWYgSSBoYWQgbXk8L0xJTkU+Ci08TElORT5tb3V0aCwgSSB3b3VsZCBiaXRlOyBpZiBJIGhhZCBteSBsaWJlcnR5LCBJIHdvdWxkIGRvPC9MSU5FPgotPExJTkU+bXkgbGlraW5nOiBpbiB0aGUgbWVhbnRpbWUgbGV0IG1lIGJlIHRoYXQgSSBhbSBhbmQ8L0xJTkU+Ci08TElORT5zZWVrIG5vdCB0byBhbHRlciBtZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNPTlJBREU8L1NQRUFLRVI+Ci08TElORT5DYW4geW91IG1ha2Ugbm8gdXNlIG9mIHlvdXIgZGlzY29udGVudD88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBKT0hOPC9TUEVBS0VSPgotPExJTkU+SSBtYWtlIGFsbCB1c2Ugb2YgaXQsIGZvciBJIHVzZSBpdCBvbmx5LjwvTElORT4KLTxMSU5FPldobyBjb21lcyBoZXJlPzwvTElORT4KLTxTVEFHRURJUj5FbnRlciBCT1JBQ0hJTzwvU1RBR0VESVI+Ci08TElORT5XaGF0IG5ld3MsIEJvcmFjaGlvPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Qk9SQUNISU88L1NQRUFLRVI+Ci08TElORT5JIGNhbWUgeW9uZGVyIGZyb20gYSBncmVhdCBzdXBwZXI6IHRoZSBwcmluY2UgeW91cjwvTElORT4KLTxMSU5FPmJyb3RoZXIgaXMgcm95YWxseSBlbnRlcnRhaW5lZCBieSBMZW9uYXRvOiBhbmQgSTwvTElORT4KLTxMSU5FPmNhbiBnaXZlIHlvdSBpbnRlbGxpZ2VuY2Ugb2YgYW4gaW50ZW5kZWQgbWFycmlhZ2UuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gSk9ITjwvU1BFQUtFUj4KLTxMSU5FPldpbGwgaXQgc2VydmUgZm9yIGFueSBtb2RlbCB0byBidWlsZCBtaXNjaGllZiBvbj88L0xJTkU+Ci08TElORT5XaGF0IGlzIGhlIGZvciBhIGZvb2wgdGhhdCBiZXRyb3RocyBoaW1zZWxmIHRvPC9MSU5FPgotPExJTkU+dW5xdWlldG5lc3M/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CT1JBQ0hJTzwvU1BFQUtFUj4KLTxMSU5FPk1hcnJ5LCBpdCBpcyB5b3VyIGJyb3RoZXIncyByaWdodCBoYW5kLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIEpPSE48L1NQRUFLRVI+Ci08TElORT5XaG8/IHRoZSBtb3N0IGV4cXVpc2l0ZSBDbGF1ZGlvPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Qk9SQUNISU88L1NQRUFLRVI+Ci08TElORT5FdmVuIGhlLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIEpPSE48L1NQRUFLRVI+Ci08TElORT5BIHByb3BlciBzcXVpcmUhIEFuZCB3aG8sIGFuZCB3aG8/IHdoaWNoIHdheSBsb29rczwvTElORT4KLTxMSU5FPmhlPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Qk9SQUNISU88L1NQRUFLRVI+Ci08TElORT5NYXJyeSwgb24gSGVybywgdGhlIGRhdWdodGVyIGFuZCBoZWlyIG9mIExlb25hdG8uPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gSk9ITjwvU1BFQUtFUj4KLTxMSU5FPkEgdmVyeSBmb3J3YXJkIE1hcmNoLWNoaWNrISBIb3cgY2FtZSB5b3UgdG8gdGhpcz88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJPUkFDSElPPC9TUEVBS0VSPgotPExJTkU+QmVpbmcgZW50ZXJ0YWluZWQgZm9yIGEgcGVyZnVtZXIsIGFzIEkgd2FzIHNtb2tpbmcgYTwvTElORT4KLTxMSU5FPm11c3R5IHJvb20sIGNvbWVzIG1lIHRoZSBwcmluY2UgYW5kIENsYXVkaW8sIGhhbmQ8L0xJTkU+Ci08TElORT5pbiBoYW5kIGluIHNhZCBjb25mZXJlbmNlOiBJIHdoaXB0IG1lIGJlaGluZCB0aGU8L0xJTkU+Ci08TElORT5hcnJhczsgYW5kIHRoZXJlIGhlYXJkIGl0IGFncmVlZCB1cG9uIHRoYXQgdGhlPC9MSU5FPgotPExJTkU+cHJpbmNlIHNob3VsZCB3b28gSGVybyBmb3IgaGltc2VsZiwgYW5kIGhhdmluZzwvTElORT4KLTxMSU5FPm9idGFpbmVkIGhlciwgZ2l2ZSBoZXIgdG8gQ291bnQgQ2xhdWRpby48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBKT0hOPC9TUEVBS0VSPgotPExJTkU+Q29tZSwgY29tZSwgbGV0IHVzIHRoaXRoZXI6IHRoaXMgbWF5IHByb3ZlIGZvb2QgdG88L0xJTkU+Ci08TElORT5teSBkaXNwbGVhc3VyZS4gVGhhdCB5b3VuZyBzdGFydC11cCBoYXRoIGFsbCB0aGU8L0xJTkU+Ci08TElORT5nbG9yeSBvZiBteSBvdmVydGhyb3c6IGlmIEkgY2FuIGNyb3NzIGhpbSBhbnkgd2F5LCBJPC9MSU5FPgotPExJTkU+Ymxlc3MgbXlzZWxmIGV2ZXJ5IHdheS4gWW91IGFyZSBib3RoIHN1cmUsIGFuZCB3aWxsIGFzc2lzdCBtZT88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNPTlJBREU8L1NQRUFLRVI+Ci08TElORT5UbyB0aGUgZGVhdGgsIG15IGxvcmQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gSk9ITjwvU1BFQUtFUj4KLTxMSU5FPkxldCB1cyB0byB0aGUgZ3JlYXQgc3VwcGVyOiB0aGVpciBjaGVlciBpcyB0aGU8L0xJTkU+Ci08TElORT5ncmVhdGVyIHRoYXQgSSBhbSBzdWJkdWVkLiBXb3VsZCB0aGUgY29vayB3ZXJlIG9mPC9MSU5FPgotPExJTkU+bXkgbWluZCEgU2hhbGwgd2UgZ28gcHJvdmUgd2hhdCdzIHRvIGJlIGRvbmU/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CT1JBQ0hJTzwvU1BFQUtFUj4KLTxMSU5FPldlJ2xsIHdhaXQgdXBvbiB5b3VyIGxvcmRzaGlwLjwvTElORT4KLTwvU1BFRUNIPgotCi0KLTxTVEFHRURJUj5FeGV1bnQ8L1NUQUdFRElSPgotPC9TQ0VORT4KLQotPC9BQ1Q+Ci0KLTxBQ1Q+PFRJVExFPkFDVCBJSTwvVElUTEU+Ci0KLTxTQ0VORT48VElUTEU+U0NFTkUgSS4gIEEgaGFsbCBpbiBMRU9OQVRPJ1MgaG91c2UuPC9USVRMRT4KLTxTVEFHRURJUj5FbnRlciBMRU9OQVRPLCBBTlRPTklPLCBIRVJPLCBCRUFUUklDRSwgYW5kIG90aGVyczwvU1RBR0VESVI+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+V2FzIG5vdCBDb3VudCBKb2huIGhlcmUgYXQgc3VwcGVyPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QU5UT05JTzwvU1BFQUtFUj4KLTxMSU5FPkkgc2F3IGhpbSBub3QuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPkhvdyB0YXJ0bHkgdGhhdCBnZW50bGVtYW4gbG9va3MhIEkgbmV2ZXIgY2FuIHNlZTwvTElORT4KLTxMSU5FPmhpbSBidXQgSSBhbSBoZWFydC1idXJuZWQgYW4gaG91ciBhZnRlci48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkhFUk88L1NQRUFLRVI+Ci08TElORT5IZSBpcyBvZiBhIHZlcnkgbWVsYW5jaG9seSBkaXNwb3NpdGlvbi48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+SGUgd2VyZSBhbiBleGNlbGxlbnQgbWFuIHRoYXQgd2VyZSBtYWRlIGp1c3QgaW4gdGhlPC9MSU5FPgotPExJTkU+bWlkd2F5IGJldHdlZW4gaGltIGFuZCBCZW5lZGljazogdGhlIG9uZSBpcyB0b288L0xJTkU+Ci08TElORT5saWtlIGFuIGltYWdlIGFuZCBzYXlzIG5vdGhpbmcsIGFuZCB0aGUgb3RoZXIgdG9vPC9MSU5FPgotPExJTkU+bGlrZSBteSBsYWR5J3MgZWxkZXN0IHNvbiwgZXZlcm1vcmUgdGF0dGxpbmcuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+VGhlbiBoYWxmIFNpZ25pb3IgQmVuZWRpY2sncyB0b25ndWUgaW4gQ291bnQgSm9obidzPC9MSU5FPgotPExJTkU+bW91dGgsIGFuZCBoYWxmIENvdW50IEpvaG4ncyBtZWxhbmNob2x5IGluIFNpZ25pb3I8L0xJTkU+Ci08TElORT5CZW5lZGljaydzIGZhY2UsLS08L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+V2l0aCBhIGdvb2QgbGVnIGFuZCBhIGdvb2QgZm9vdCwgdW5jbGUsIGFuZCBtb25leTwvTElORT4KLTxMSU5FPmVub3VnaCBpbiBoaXMgcHVyc2UsIHN1Y2ggYSBtYW4gd291bGQgd2luIGFueSB3b21hbjwvTElORT4KLTxMSU5FPmluIHRoZSB3b3JsZCwgaWYgYScgY291bGQgZ2V0IGhlciBnb29kLXdpbGwuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+QnkgbXkgdHJvdGgsIG5pZWNlLCB0aG91IHdpbHQgbmV2ZXIgZ2V0IHRoZWUgYTwvTElORT4KLTxMSU5FPmh1c2JhbmQsIGlmIHRob3UgYmUgc28gc2hyZXdkIG9mIHRoeSB0b25ndWUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5BTlRPTklPPC9TUEVBS0VSPgotPExJTkU+SW4gZmFpdGgsIHNoZSdzIHRvbyBjdXJzdC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+VG9vIGN1cnN0IGlzIG1vcmUgdGhhbiBjdXJzdDogSSBzaGFsbCBsZXNzZW4gR29kJ3M8L0xJTkU+Ci08TElORT5zZW5kaW5nIHRoYXQgd2F5OyBmb3IgaXQgaXMgc2FpZCwgJ0dvZCBzZW5kcyBhIGN1cnN0PC9MSU5FPgotPExJTkU+Y293IHNob3J0IGhvcm5zOycgYnV0IHRvIGEgY293IHRvbyBjdXJzdCBoZSBzZW5kcyBub25lLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPlNvLCBieSBiZWluZyB0b28gY3Vyc3QsIEdvZCB3aWxsIHNlbmQgeW91IG5vIGhvcm5zLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5KdXN0LCBpZiBoZSBzZW5kIG1lIG5vIGh1c2JhbmQ7IGZvciB0aGUgd2hpY2g8L0xJTkU+Ci08TElORT5ibGVzc2luZyBJIGFtIGF0IGhpbSB1cG9uIG15IGtuZWVzIGV2ZXJ5IG1vcm5pbmcgYW5kPC9MSU5FPgotPExJTkU+ZXZlbmluZy4gTG9yZCwgSSBjb3VsZCBub3QgZW5kdXJlIGEgaHVzYmFuZCB3aXRoIGE8L0xJTkU+Ci08TElORT5iZWFyZCBvbiBoaXMgZmFjZTogSSBoYWQgcmF0aGVyIGxpZSBpbiB0aGUgd29vbGxlbi48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5Zb3UgbWF5IGxpZ2h0IG9uIGEgaHVzYmFuZCB0aGF0IGhhdGggbm8gYmVhcmQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPldoYXQgc2hvdWxkIEkgZG8gd2l0aCBoaW0/IGRyZXNzIGhpbSBpbiBteSBhcHBhcmVsPC9MSU5FPgotPExJTkU+YW5kIG1ha2UgaGltIG15IHdhaXRpbmctZ2VudGxld29tYW4/IEhlIHRoYXQgaGF0aCBhPC9MSU5FPgotPExJTkU+YmVhcmQgaXMgbW9yZSB0aGFuIGEgeW91dGgsIGFuZCBoZSB0aGF0IGhhdGggbm88L0xJTkU+Ci08TElORT5iZWFyZCBpcyBsZXNzIHRoYW4gYSBtYW46IGFuZCBoZSB0aGF0IGlzIG1vcmUgdGhhbjwvTElORT4KLTxMSU5FPmEgeW91dGggaXMgbm90IGZvciBtZSwgYW5kIGhlIHRoYXQgaXMgbGVzcyB0aGFuIGE8L0xJTkU+Ci08TElORT5tYW4sIEkgYW0gbm90IGZvciBoaW06IHRoZXJlZm9yZSwgSSB3aWxsIGV2ZW4gdGFrZTwvTElORT4KLTxMSU5FPnNpeHBlbmNlIGluIGVhcm5lc3Qgb2YgdGhlIGJlYXItd2FyZCwgYW5kIGxlYWQgaGlzPC9MSU5FPgotPExJTkU+YXBlcyBpbnRvIGhlbGwuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+V2VsbCwgdGhlbiwgZ28geW91IGludG8gaGVsbD88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+Tm8sIGJ1dCB0byB0aGUgZ2F0ZTsgYW5kIHRoZXJlIHdpbGwgdGhlIGRldmlsIG1lZXQ8L0xJTkU+Ci08TElORT5tZSwgbGlrZSBhbiBvbGQgY3Vja29sZCwgd2l0aCBob3JucyBvbiBoaXMgaGVhZCwgYW5kPC9MSU5FPgotPExJTkU+c2F5ICdHZXQgeW91IHRvIGhlYXZlbiwgQmVhdHJpY2UsIGdldCB5b3UgdG88L0xJTkU+Ci08TElORT5oZWF2ZW47IGhlcmUncyBubyBwbGFjZSBmb3IgeW91IG1haWRzOicgc28gZGVsaXZlcjwvTElORT4KLTxMSU5FPkkgdXAgbXkgYXBlcywgYW5kIGF3YXkgdG8gU2FpbnQgUGV0ZXIgZm9yIHRoZTwvTElORT4KLTxMSU5FPmhlYXZlbnM7IGhlIHNob3dzIG1lIHdoZXJlIHRoZSBiYWNoZWxvcnMgc2l0LCBhbmQ8L0xJTkU+Ci08TElORT50aGVyZSBsaXZlIHdlIGFzIG1lcnJ5IGFzIHRoZSBkYXkgaXMgbG9uZy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkFOVE9OSU88L1NQRUFLRVI+Ci08TElORT48U1RBR0VESVI+VG8gSEVSTzwvU1RBR0VESVI+ICBXZWxsLCBuaWVjZSwgSSB0cnVzdCB5b3Ugd2lsbCBiZSBydWxlZDwvTElORT4KLTxMSU5FPmJ5IHlvdXIgZmF0aGVyLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5ZZXMsIGZhaXRoOyBpdCBpcyBteSBjb3VzaW4ncyBkdXR5IHRvIG1ha2UgY3VydHN5PC9MSU5FPgotPExJTkU+YW5kIHNheSAnRmF0aGVyLCBhcyBpdCBwbGVhc2UgeW91LicgQnV0IHlldCBmb3IgYWxsPC9MSU5FPgotPExJTkU+dGhhdCwgY291c2luLCBsZXQgaGltIGJlIGEgaGFuZHNvbWUgZmVsbG93LCBvciBlbHNlPC9MSU5FPgotPExJTkU+bWFrZSBhbm90aGVyIGN1cnRzeSBhbmQgc2F5ICdGYXRoZXIsIGFzIGl0IHBsZWFzZTwvTElORT4KLTxMSU5FPm1lLic8L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5XZWxsLCBuaWVjZSwgSSBob3BlIHRvIHNlZSB5b3Ugb25lIGRheSBmaXR0ZWQgd2l0aCBhIGh1c2JhbmQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPk5vdCB0aWxsIEdvZCBtYWtlIG1lbiBvZiBzb21lIG90aGVyIG1ldGFsIHRoYW48L0xJTkU+Ci08TElORT5lYXJ0aC4gV291bGQgaXQgbm90IGdyaWV2ZSBhIHdvbWFuIHRvIGJlPC9MSU5FPgotPExJTkU+b3Zlcm1hc3RlcmVkIHdpdGggYSBwaWVyY2Ugb2YgdmFsaWFudCBkdXN0PyB0byBtYWtlPC9MSU5FPgotPExJTkU+YW4gYWNjb3VudCBvZiBoZXIgbGlmZSB0byBhIGNsb2Qgb2Ygd2F5d2FyZCBtYXJsPzwvTElORT4KLTxMSU5FPk5vLCB1bmNsZSwgSSdsbCBub25lOiBBZGFtJ3Mgc29ucyBhcmUgbXkgYnJldGhyZW47PC9MSU5FPgotPExJTkU+YW5kLCB0cnVseSwgSSBob2xkIGl0IGEgc2luIHRvIG1hdGNoIGluIG15IGtpbmRyZWQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+RGF1Z2h0ZXIsIHJlbWVtYmVyIHdoYXQgSSB0b2xkIHlvdTogaWYgdGhlIHByaW5jZTwvTElORT4KLTxMSU5FPmRvIHNvbGljaXQgeW91IGluIHRoYXQga2luZCwgeW91IGtub3cgeW91ciBhbnN3ZXIuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPlRoZSBmYXVsdCB3aWxsIGJlIGluIHRoZSBtdXNpYywgY291c2luLCBpZiB5b3UgYmU8L0xJTkU+Ci08TElORT5ub3Qgd29vZWQgaW4gZ29vZCB0aW1lOiBpZiB0aGUgcHJpbmNlIGJlIHRvbzwvTElORT4KLTxMSU5FPmltcG9ydGFudCwgdGVsbCBoaW0gdGhlcmUgaXMgbWVhc3VyZSBpbiBldmVyeSB0aGluZzwvTElORT4KLTxMSU5FPmFuZCBzbyBkYW5jZSBvdXQgdGhlIGFuc3dlci4gRm9yLCBoZWFyIG1lLCBIZXJvOjwvTElORT4KLTxMSU5FPndvb2luZywgd2VkZGluZywgYW5kIHJlcGVudGluZywgaXMgYXMgYSBTY290Y2ggamlnLDwvTElORT4KLTxMSU5FPmEgbWVhc3VyZSwgYW5kIGEgY2lucXVlIHBhY2U6IHRoZSBmaXJzdCBzdWl0IGlzIGhvdDwvTElORT4KLTxMSU5FPmFuZCBoYXN0eSwgbGlrZSBhIFNjb3RjaCBqaWcsIGFuZCBmdWxsIGFzPC9MSU5FPgotPExJTkU+ZmFudGFzdGljYWw7IHRoZSB3ZWRkaW5nLCBtYW5uZXJseS1tb2Rlc3QsIGFzIGE8L0xJTkU+Ci08TElORT5tZWFzdXJlLCBmdWxsIG9mIHN0YXRlIGFuZCBhbmNpZW50cnk7IGFuZCB0aGVuIGNvbWVzPC9MSU5FPgotPExJTkU+cmVwZW50YW5jZSBhbmQsIHdpdGggaGlzIGJhZCBsZWdzLCBmYWxscyBpbnRvIHRoZTwvTElORT4KLTxMSU5FPmNpbnF1ZSBwYWNlIGZhc3RlciBhbmQgZmFzdGVyLCB0aWxsIGhlIHNpbmsgaW50byBoaXMgZ3JhdmUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+Q291c2luLCB5b3UgYXBwcmVoZW5kIHBhc3Npbmcgc2hyZXdkbHkuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPkkgaGF2ZSBhIGdvb2QgZXllLCB1bmNsZTsgSSBjYW4gc2VlIGEgY2h1cmNoIGJ5IGRheWxpZ2h0LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPlRoZSByZXZlbGxlcnMgYXJlIGVudGVyaW5nLCBicm90aGVyOiBtYWtlIGdvb2Qgcm9vbS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNUQUdFRElSPkFsbCBwdXQgb24gdGhlaXIgbWFza3M8L1NUQUdFRElSPgotPFNUQUdFRElSPkVudGVyIERPTiBQRURSTywgQ0xBVURJTywgQkVORURJQ0ssIEJBTFRIQVNBUiwKLURPTiBKT0hOLCBCT1JBQ0hJTywgTUFSR0FSRVQsIFVSU1VMQSBhbmQgb3RoZXJzLCBtYXNrZWQ8L1NUQUdFRElSPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+TGFkeSwgd2lsbCB5b3Ugd2FsayBhYm91dCB3aXRoIHlvdXIgZnJpZW5kPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+SEVSTzwvU1BFQUtFUj4KLTxMSU5FPlNvIHlvdSB3YWxrIHNvZnRseSBhbmQgbG9vayBzd2VldGx5IGFuZCBzYXkgbm90aGluZyw8L0xJTkU+Ci08TElORT5JIGFtIHlvdXJzIGZvciB0aGUgd2FsazsgYW5kIGVzcGVjaWFsbHkgd2hlbiBJIHdhbGsgYXdheS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPldpdGggbWUgaW4geW91ciBjb21wYW55PzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+SEVSTzwvU1BFQUtFUj4KLTxMSU5FPkkgbWF5IHNheSBzbywgd2hlbiBJIHBsZWFzZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPkFuZCB3aGVuIHBsZWFzZSB5b3UgdG8gc2F5IHNvPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+SEVSTzwvU1BFQUtFUj4KLTxMSU5FPldoZW4gSSBsaWtlIHlvdXIgZmF2b3VyOyBmb3IgR29kIGRlZmVuZCB0aGUgbHV0ZTwvTElORT4KLTxMSU5FPnNob3VsZCBiZSBsaWtlIHRoZSBjYXNlITwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+TXkgdmlzb3IgaXMgUGhpbGVtb24ncyByb29mOyB3aXRoaW4gdGhlIGhvdXNlIGlzIEpvdmUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5IRVJPPC9TUEVBS0VSPgotPExJTkU+V2h5LCB0aGVuLCB5b3VyIHZpc29yIHNob3VsZCBiZSB0aGF0Y2hlZC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPlNwZWFrIGxvdywgaWYgeW91IHNwZWFrIGxvdmUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLQotPFNUQUdFRElSPkRyYXdpbmcgaGVyIGFzaWRlPC9TVEFHRURJUj4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJBTFRIQVNBUjwvU1BFQUtFUj4KLTxMSU5FPldlbGwsIEkgd291bGQgeW91IGRpZCBsaWtlIG1lLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TUFSR0FSRVQ8L1NQRUFLRVI+Ci08TElORT5TbyB3b3VsZCBub3QgSSwgZm9yIHlvdXIgb3duIHNha2U7IGZvciBJIGhhdmUgbWFueTwvTElORT4KLTxMSU5FPmlsbC1xdWFsaXRpZXMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CQUxUSEFTQVI8L1NQRUFLRVI+Ci08TElORT5XaGljaCBpcyBvbmU/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5NQVJHQVJFVDwvU1BFQUtFUj4KLTxMSU5FPkkgc2F5IG15IHByYXllcnMgYWxvdWQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CQUxUSEFTQVI8L1NQRUFLRVI+Ci08TElORT5JIGxvdmUgeW91IHRoZSBiZXR0ZXI6IHRoZSBoZWFyZXJzIG1heSBjcnksIEFtZW4uPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5NQVJHQVJFVDwvU1BFQUtFUj4KLTxMSU5FPkdvZCBtYXRjaCBtZSB3aXRoIGEgZ29vZCBkYW5jZXIhPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CQUxUSEFTQVI8L1NQRUFLRVI+Ci08TElORT5BbWVuLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TUFSR0FSRVQ8L1NQRUFLRVI+Ci08TElORT5BbmQgR29kIGtlZXAgaGltIG91dCBvZiBteSBzaWdodCB3aGVuIHRoZSBkYW5jZSBpczwvTElORT4KLTxMSU5FPmRvbmUhIEFuc3dlciwgY2xlcmsuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CQUxUSEFTQVI8L1NQRUFLRVI+Ci08TElORT5ObyBtb3JlIHdvcmRzOiB0aGUgY2xlcmsgaXMgYW5zd2VyZWQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5VUlNVTEE8L1NQRUFLRVI+Ci08TElORT5JIGtub3cgeW91IHdlbGwgZW5vdWdoOyB5b3UgYXJlIFNpZ25pb3IgQW50b25pby48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkFOVE9OSU88L1NQRUFLRVI+Ci08TElORT5BdCBhIHdvcmQsIEkgYW0gbm90LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+VVJTVUxBPC9TUEVBS0VSPgotPExJTkU+SSBrbm93IHlvdSBieSB0aGUgd2FnZ2xpbmcgb2YgeW91ciBoZWFkLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QU5UT05JTzwvU1BFQUtFUj4KLTxMSU5FPlRvIHRlbGwgeW91IHRydWUsIEkgY291bnRlcmZlaXQgaGltLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+VVJTVUxBPC9TUEVBS0VSPgotPExJTkU+WW91IGNvdWxkIG5ldmVyIGRvIGhpbSBzbyBpbGwtd2VsbCwgdW5sZXNzIHlvdSB3ZXJlPC9MSU5FPgotPExJTkU+dGhlIHZlcnkgbWFuLiBIZXJlJ3MgaGlzIGRyeSBoYW5kIHVwIGFuZCBkb3duOiB5b3U8L0xJTkU+Ci08TElORT5hcmUgaGUsIHlvdSBhcmUgaGUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5BTlRPTklPPC9TUEVBS0VSPgotPExJTkU+QXQgYSB3b3JkLCBJIGFtIG5vdC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPlVSU1VMQTwvU1BFQUtFUj4KLTxMSU5FPkNvbWUsIGNvbWUsIGRvIHlvdSB0aGluayBJIGRvIG5vdCBrbm93IHlvdSBieSB5b3VyPC9MSU5FPgotPExJTkU+ZXhjZWxsZW50IHdpdD8gY2FuIHZpcnR1ZSBoaWRlIGl0c2VsZj8gR28gdG8sPC9MSU5FPgotPExJTkU+bXVtLCB5b3UgYXJlIGhlOiBncmFjZXMgd2lsbCBhcHBlYXIsIGFuZCB0aGVyZSdzIGFuPC9MSU5FPgotPExJTkU+ZW5kLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5XaWxsIHlvdSBub3QgdGVsbCBtZSB3aG8gdG9sZCB5b3Ugc28/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPk5vLCB5b3Ugc2hhbGwgcGFyZG9uIG1lLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5Ob3Igd2lsbCB5b3Ugbm90IHRlbGwgbWUgd2hvIHlvdSBhcmU/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPk5vdCBub3cuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPlRoYXQgSSB3YXMgZGlzZGFpbmZ1bCwgYW5kIHRoYXQgSSBoYWQgbXkgZ29vZCB3aXQ8L0xJTkU+Ci08TElORT5vdXQgb2YgdGhlICdIdW5kcmVkIE1lcnJ5IFRhbGVzOictLXdlbGwgdGhpcyB3YXM8L0xJTkU+Ci08TElORT5TaWduaW9yIEJlbmVkaWNrIHRoYXQgc2FpZCBzby48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+V2hhdCdzIGhlPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5JIGFtIHN1cmUgeW91IGtub3cgaGltIHdlbGwgZW5vdWdoLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5Ob3QgSSwgYmVsaWV2ZSBtZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+RGlkIGhlIG5ldmVyIG1ha2UgeW91IGxhdWdoPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5JIHByYXkgeW91LCB3aGF0IGlzIGhlPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5XaHksIGhlIGlzIHRoZSBwcmluY2UncyBqZXN0ZXI6IGEgdmVyeSBkdWxsIGZvb2w7PC9MSU5FPgotPExJTkU+b25seSBoaXMgZ2lmdCBpcyBpbiBkZXZpc2luZyBpbXBvc3NpYmxlIHNsYW5kZXJzOjwvTElORT4KLTxMSU5FPm5vbmUgYnV0IGxpYmVydGluZXMgZGVsaWdodCBpbiBoaW07IGFuZCB0aGU8L0xJTkU+Ci08TElORT5jb21tZW5kYXRpb24gaXMgbm90IGluIGhpcyB3aXQsIGJ1dCBpbiBoaXMgdmlsbGFueTs8L0xJTkU+Ci08TElORT5mb3IgaGUgYm90aCBwbGVhc2VzIG1lbiBhbmQgYW5nZXJzIHRoZW0sIGFuZCB0aGVuPC9MSU5FPgotPExJTkU+dGhleSBsYXVnaCBhdCBoaW0gYW5kIGJlYXQgaGltLiBJIGFtIHN1cmUgaGUgaXMgaW48L0xJTkU+Ci08TElORT50aGUgZmxlZXQ6IEkgd291bGQgaGUgaGFkIGJvYXJkZWQgbWUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPldoZW4gSSBrbm93IHRoZSBnZW50bGVtYW4sIEknbGwgdGVsbCBoaW0gd2hhdCB5b3Ugc2F5LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5EbywgZG86IGhlJ2xsIGJ1dCBicmVhayBhIGNvbXBhcmlzb24gb3IgdHdvIG9uIG1lOzwvTElORT4KLTxMSU5FPndoaWNoLCBwZXJhZHZlbnR1cmUgbm90IG1hcmtlZCBvciBub3QgbGF1Z2hlZCBhdCw8L0xJTkU+Ci08TElORT5zdHJpa2VzIGhpbSBpbnRvIG1lbGFuY2hvbHk7IGFuZCB0aGVuIHRoZXJlJ3MgYTwvTElORT4KLTxMSU5FPnBhcnRyaWRnZSB3aW5nIHNhdmVkLCBmb3IgdGhlIGZvb2wgd2lsbCBlYXQgbm88L0xJTkU+Ci08TElORT5zdXBwZXIgdGhhdCBuaWdodC48L0xJTkU+Ci08U1RBR0VESVI+TXVzaWM8L1NUQUdFRElSPgotPExJTkU+V2UgbXVzdCBmb2xsb3cgdGhlIGxlYWRlcnMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPkluIGV2ZXJ5IGdvb2QgdGhpbmcuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPk5heSwgaWYgdGhleSBsZWFkIHRvIGFueSBpbGwsIEkgd2lsbCBsZWF2ZSB0aGVtIGF0PC9MSU5FPgotPExJTkU+dGhlIG5leHQgdHVybmluZy48L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+RGFuY2UuIFRoZW4gZXhldW50IGFsbCBleGNlcHQgRE9OIEpPSE4sIEJPUkFDSElPLAotYW5kIENMQVVESU88L1NUQUdFRElSPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIEpPSE48L1NQRUFLRVI+Ci08TElORT5TdXJlIG15IGJyb3RoZXIgaXMgYW1vcm91cyBvbiBIZXJvIGFuZCBoYXRoPC9MSU5FPgotPExJTkU+d2l0aGRyYXduIGhlciBmYXRoZXIgdG8gYnJlYWsgd2l0aCBoaW0gYWJvdXQgaXQuPC9MSU5FPgotPExJTkU+VGhlIGxhZGllcyBmb2xsb3cgaGVyIGFuZCBidXQgb25lIHZpc29yIHJlbWFpbnMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CT1JBQ0hJTzwvU1BFQUtFUj4KLTxMSU5FPkFuZCB0aGF0IGlzIENsYXVkaW86IEkga25vdyBoaW0gYnkgaGlzIGJlYXJpbmcuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gSk9ITjwvU1BFQUtFUj4KLTxMSU5FPkFyZSBub3QgeW91IFNpZ25pb3IgQmVuZWRpY2s/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+WW91IGtub3cgbWUgd2VsbDsgSSBhbSBoZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBKT0hOPC9TUEVBS0VSPgotPExJTkU+U2lnbmlvciwgeW91IGFyZSB2ZXJ5IG5lYXIgbXkgYnJvdGhlciBpbiBoaXMgbG92ZTo8L0xJTkU+Ci08TElORT5oZSBpcyBlbmFtb3VyZWQgb24gSGVybzsgSSBwcmF5IHlvdSwgZGlzc3VhZGUgaGltPC9MSU5FPgotPExJTkU+ZnJvbSBoZXI6IHNoZSBpcyBubyBlcXVhbCBmb3IgaGlzIGJpcnRoOiB5b3UgbWF5PC9MSU5FPgotPExJTkU+ZG8gdGhlIHBhcnQgb2YgYW4gaG9uZXN0IG1hbiBpbiBpdC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5Ib3cga25vdyB5b3UgaGUgbG92ZXMgaGVyPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIEpPSE48L1NQRUFLRVI+Ci08TElORT5JIGhlYXJkIGhpbSBzd2VhciBoaXMgYWZmZWN0aW9uLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Qk9SQUNISU88L1NQRUFLRVI+Ci08TElORT5TbyBkaWQgSSB0b287IGFuZCBoZSBzd29yZSBoZSB3b3VsZCBtYXJyeSBoZXIgdG8tbmlnaHQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gSk9ITjwvU1BFQUtFUj4KLTxMSU5FPkNvbWUsIGxldCB1cyB0byB0aGUgYmFucXVldC48L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+RXhldW50IERPTiBKT0hOIGFuZCBCT1JBQ0hJTzwvU1RBR0VESVI+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+VGh1cyBhbnN3ZXIgSSBpbiB0aGUgbmFtZSBvZiBCZW5lZGljayw8L0xJTkU+Ci08TElORT5CdXQgaGVhciB0aGVzZSBpbGwgbmV3cyB3aXRoIHRoZSBlYXJzIG9mIENsYXVkaW8uPC9MSU5FPgotPExJTkU+J1RpcyBjZXJ0YWluIHNvOyB0aGUgcHJpbmNlIHdvb2VzIGZvciBoaW1zZWxmLjwvTElORT4KLTxMSU5FPkZyaWVuZHNoaXAgaXMgY29uc3RhbnQgaW4gYWxsIG90aGVyIHRoaW5nczwvTElORT4KLTxMSU5FPlNhdmUgaW4gdGhlIG9mZmljZSBhbmQgYWZmYWlycyBvZiBsb3ZlOjwvTElORT4KLTxMSU5FPlRoZXJlZm9yZSwgYWxsIGhlYXJ0cyBpbiBsb3ZlIHVzZSB0aGVpciBvd24gdG9uZ3Vlczs8L0xJTkU+Ci08TElORT5MZXQgZXZlcnkgZXllIG5lZ290aWF0ZSBmb3IgaXRzZWxmPC9MSU5FPgotPExJTkU+QW5kIHRydXN0IG5vIGFnZW50OyBmb3IgYmVhdXR5IGlzIGEgd2l0Y2g8L0xJTkU+Ci08TElORT5BZ2FpbnN0IHdob3NlIGNoYXJtcyBmYWl0aCBtZWx0ZXRoIGludG8gYmxvb2QuPC9MSU5FPgotPExJTkU+VGhpcyBpcyBhbiBhY2NpZGVudCBvZiBob3VybHkgcHJvb2YsPC9MSU5FPgotPExJTkU+V2hpY2ggSSBtaXN0cnVzdGVkIG5vdC4gRmFyZXdlbGwsIHRoZXJlZm9yZSwgSGVybyE8L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+UmUtZW50ZXIgQkVORURJQ0s8L1NUQUdFRElSPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5Db3VudCBDbGF1ZGlvPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPlllYSwgdGhlIHNhbWUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPkNvbWUsIHdpbGwgeW91IGdvIHdpdGggbWU/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+V2hpdGhlcj88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+RXZlbiB0byB0aGUgbmV4dCB3aWxsb3csIGFib3V0IHlvdXIgb3duIGJ1c2luZXNzLDwvTElORT4KLTxMSU5FPmNvdW50eS4gV2hhdCBmYXNoaW9uIHdpbGwgeW91IHdlYXIgdGhlIGdhcmxhbmQgb2Y/PC9MSU5FPgotPExJTkU+YWJvdXQgeW91ciBuZWNrLCBsaWtlIGFuIHVzdXJlcidzIGNoYWluPyBvciB1bmRlcjwvTElORT4KLTxMSU5FPnlvdXIgYXJtLCBsaWtlIGEgbGlldXRlbmFudCdzIHNjYXJmPyBZb3UgbXVzdCB3ZWFyPC9MSU5FPgotPExJTkU+aXQgb25lIHdheSwgZm9yIHRoZSBwcmluY2UgaGF0aCBnb3QgeW91ciBIZXJvLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPkkgd2lzaCBoaW0gam95IG9mIGhlci48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+V2h5LCB0aGF0J3Mgc3Bva2VuIGxpa2UgYW4gaG9uZXN0IGRyb3ZpZXI6IHNvIHRoZXk8L0xJTkU+Ci08TElORT5zZWxsIGJ1bGxvY2tzLiBCdXQgZGlkIHlvdSB0aGluayB0aGUgcHJpbmNlIHdvdWxkPC9MSU5FPgotPExJTkU+aGF2ZSBzZXJ2ZWQgeW91IHRodXM/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+SSBwcmF5IHlvdSwgbGVhdmUgbWUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPkhvISBub3cgeW91IHN0cmlrZSBsaWtlIHRoZSBibGluZCBtYW46ICd0d2FzIHRoZTwvTElORT4KLTxMSU5FPmJveSB0aGF0IHN0b2xlIHlvdXIgbWVhdCwgYW5kIHlvdSdsbCBiZWF0IHRoZSBwb3N0LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPklmIGl0IHdpbGwgbm90IGJlLCBJJ2xsIGxlYXZlIHlvdS48L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+RXhpdDwvU1RBR0VESVI+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPkFsYXMsIHBvb3IgaHVydCBmb3dsISBub3cgd2lsbCBoZSBjcmVlcCBpbnRvIHNlZGdlcy48L0xJTkU+Ci08TElORT5CdXQgdGhhdCBteSBMYWR5IEJlYXRyaWNlIHNob3VsZCBrbm93IG1lLCBhbmQgbm90PC9MSU5FPgotPExJTkU+a25vdyBtZSEgVGhlIHByaW5jZSdzIGZvb2whIEhhPyBJdCBtYXkgYmUgSSBnbzwvTElORT4KLTxMSU5FPnVuZGVyIHRoYXQgdGl0bGUgYmVjYXVzZSBJIGFtIG1lcnJ5LiBZZWEsIGJ1dCBzbyBJPC9MSU5FPgotPExJTkU+YW0gYXB0IHRvIGRvIG15c2VsZiB3cm9uZzsgSSBhbSBub3Qgc28gcmVwdXRlZDogaXQ8L0xJTkU+Ci08TElORT5pcyB0aGUgYmFzZSwgdGhvdWdoIGJpdHRlciwgZGlzcG9zaXRpb24gb2YgQmVhdHJpY2U8L0xJTkU+Ci08TElORT50aGF0IHB1dHMgdGhlIHdvcmxkIGludG8gaGVyIHBlcnNvbiBhbmQgc28gZ2l2ZXMgbWU8L0xJTkU+Ci08TElORT5vdXQuIFdlbGwsIEknbGwgYmUgcmV2ZW5nZWQgYXMgSSBtYXkuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLQotPFNUQUdFRElSPlJlLWVudGVyIERPTiBQRURSTzwvU1RBR0VESVI+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5Ob3csIHNpZ25pb3IsIHdoZXJlJ3MgdGhlIGNvdW50PyBkaWQgeW91IHNlZSBoaW0/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPlRyb3RoLCBteSBsb3JkLCBJIGhhdmUgcGxheWVkIHRoZSBwYXJ0IG9mIExhZHkgRmFtZS48L0xJTkU+Ci08TElORT5JIGZvdW5kIGhpbSBoZXJlIGFzIG1lbGFuY2hvbHkgYXMgYSBsb2RnZSBpbiBhPC9MSU5FPgotPExJTkU+d2FycmVuOiBJIHRvbGQgaGltLCBhbmQgSSB0aGluayBJIHRvbGQgaGltIHRydWUsPC9MSU5FPgotPExJTkU+dGhhdCB5b3VyIGdyYWNlIGhhZCBnb3QgdGhlIGdvb2Qgd2lsbCBvZiB0aGlzIHlvdW5nPC9MSU5FPgotPExJTkU+bGFkeTsgYW5kIEkgb2ZmZXJlZCBoaW0gbXkgY29tcGFueSB0byBhIHdpbGxvdy10cmVlLDwvTElORT4KLTxMSU5FPmVpdGhlciB0byBtYWtlIGhpbSBhIGdhcmxhbmQsIGFzIGJlaW5nIGZvcnNha2VuLCBvcjwvTElORT4KLTxMSU5FPnRvIGJpbmQgaGltIHVwIGEgcm9kLCBhcyBiZWluZyB3b3J0aHkgdG8gYmUgd2hpcHBlZC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPlRvIGJlIHdoaXBwZWQhIFdoYXQncyBoaXMgZmF1bHQ/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPlRoZSBmbGF0IHRyYW5zZ3Jlc3Npb24gb2YgYSBzY2hvb2xib3ksIHdobywgYmVpbmc8L0xJTkU+Ci08TElORT5vdmVyam95ZWQgd2l0aCBmaW5kaW5nIGEgYmlyZHMnIG5lc3QsIHNob3dzIGl0IGhpczwvTElORT4KLTxMSU5FPmNvbXBhbmlvbiwgYW5kIGhlIHN0ZWFscyBpdC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPldpbHQgdGhvdSBtYWtlIGEgdHJ1c3QgYSB0cmFuc2dyZXNzaW9uPyBUaGU8L0xJTkU+Ci08TElORT50cmFuc2dyZXNzaW9uIGlzIGluIHRoZSBzdGVhbGVyLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5ZZXQgaXQgaGFkIG5vdCBiZWVuIGFtaXNzIHRoZSByb2QgaGFkIGJlZW4gbWFkZSw8L0xJTkU+Ci08TElORT5hbmQgdGhlIGdhcmxhbmQgdG9vOyBmb3IgdGhlIGdhcmxhbmQgaGUgbWlnaHQgaGF2ZTwvTElORT4KLTxMSU5FPndvcm4gaGltc2VsZiwgYW5kIHRoZSByb2QgaGUgbWlnaHQgaGF2ZSBiZXN0b3dlZCBvbjwvTElORT4KLTxMSU5FPnlvdSwgd2hvLCBhcyBJIHRha2UgaXQsIGhhdmUgc3RvbGVuIGhpcyBiaXJkcycgbmVzdC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPkkgd2lsbCBidXQgdGVhY2ggdGhlbSB0byBzaW5nLCBhbmQgcmVzdG9yZSB0aGVtIHRvPC9MSU5FPgotPExJTkU+dGhlIG93bmVyLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5JZiB0aGVpciBzaW5naW5nIGFuc3dlciB5b3VyIHNheWluZywgYnkgbXkgZmFpdGgsPC9MSU5FPgotPExJTkU+eW91IHNheSBob25lc3RseS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPlRoZSBMYWR5IEJlYXRyaWNlIGhhdGggYSBxdWFycmVsIHRvIHlvdTogdGhlPC9MSU5FPgotPExJTkU+Z2VudGxlbWFuIHRoYXQgZGFuY2VkIHdpdGggaGVyIHRvbGQgaGVyIHNoZSBpcyBtdWNoPC9MSU5FPgotPExJTkU+d3JvbmdlZCBieSB5b3UuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPk8sIHNoZSBtaXN1c2VkIG1lIHBhc3QgdGhlIGVuZHVyYW5jZSBvZiBhIGJsb2NrITwvTElORT4KLTxMSU5FPmFuIG9hayBidXQgd2l0aCBvbmUgZ3JlZW4gbGVhZiBvbiBpdCB3b3VsZCBoYXZlPC9MSU5FPgotPExJTkU+YW5zd2VyZWQgaGVyOyBteSB2ZXJ5IHZpc29yIGJlZ2FuIHRvIGFzc3VtZSBsaWZlIGFuZDwvTElORT4KLTxMSU5FPnNjb2xkIHdpdGggaGVyLiBTaGUgdG9sZCBtZSwgbm90IHRoaW5raW5nIEkgaGFkIGJlZW48L0xJTkU+Ci08TElORT5teXNlbGYsIHRoYXQgSSB3YXMgdGhlIHByaW5jZSdzIGplc3RlciwgdGhhdCBJIHdhczwvTElORT4KLTxMSU5FPmR1bGxlciB0aGFuIGEgZ3JlYXQgdGhhdzsgaHVkZGxpbmcgamVzdCB1cG9uIGplc3Q8L0xJTkU+Ci08TElORT53aXRoIHN1Y2ggaW1wb3NzaWJsZSBjb252ZXlhbmNlIHVwb24gbWUgdGhhdCBJIHN0b29kPC9MSU5FPgotPExJTkU+bGlrZSBhIG1hbiBhdCBhIG1hcmssIHdpdGggYSB3aG9sZSBhcm15IHNob290aW5nIGF0PC9MSU5FPgotPExJTkU+bWUuIFNoZSBzcGVha3MgcG9uaWFyZHMsIGFuZCBldmVyeSB3b3JkIHN0YWJzOjwvTElORT4KLTxMSU5FPmlmIGhlciBicmVhdGggd2VyZSBhcyB0ZXJyaWJsZSBhcyBoZXIgdGVybWluYXRpb25zLDwvTElORT4KLTxMSU5FPnRoZXJlIHdlcmUgbm8gbGl2aW5nIG5lYXIgaGVyOyBzaGUgd291bGQgaW5mZWN0IHRvPC9MSU5FPgotPExJTkU+dGhlIG5vcnRoIHN0YXIuIEkgd291bGQgbm90IG1hcnJ5IGhlciwgdGhvdWdoIHNoZTwvTElORT4KLTxMSU5FPndlcmUgZW5kb3dlZCB3aXRoIGFsbCB0aGF0IEFkYW0gYmFkIGxlZnQgaGltIGJlZm9yZTwvTElORT4KLTxMSU5FPmhlIHRyYW5zZ3Jlc3NlZDogc2hlIHdvdWxkIGhhdmUgbWFkZSBIZXJjdWxlcyBoYXZlPC9MSU5FPgotPExJTkU+dHVybmVkIHNwaXQsIHllYSwgYW5kIGhhdmUgY2xlZnQgaGlzIGNsdWIgdG8gbWFrZTwvTElORT4KLTxMSU5FPnRoZSBmaXJlIHRvby4gQ29tZSwgdGFsayBub3Qgb2YgaGVyOiB5b3Ugc2hhbGwgZmluZDwvTElORT4KLTxMSU5FPmhlciB0aGUgaW5mZXJuYWwgQXRlIGluIGdvb2QgYXBwYXJlbC4gSSB3b3VsZCB0byBHb2Q8L0xJTkU+Ci08TElORT5zb21lIHNjaG9sYXIgd291bGQgY29uanVyZSBoZXI7IGZvciBjZXJ0YWlubHksIHdoaWxlPC9MSU5FPgotPExJTkU+c2hlIGlzIGhlcmUsIGEgbWFuIG1heSBsaXZlIGFzIHF1aWV0IGluIGhlbGwgYXMgaW4gYTwvTElORT4KLTxMSU5FPnNhbmN0dWFyeTsgYW5kIHBlb3BsZSBzaW4gdXBvbiBwdXJwb3NlLCBiZWNhdXNlIHRoZXk8L0xJTkU+Ci08TElORT53b3VsZCBnbyB0aGl0aGVyOyBzbywgaW5kZWVkLCBhbGwgZGlzcXVpZXQsIGhvcnJvcjwvTElORT4KLTxMSU5FPmFuZCBwZXJ0dXJiYXRpb24gZm9sbG93cyBoZXIuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5Mb29rLCBoZXJlIHNoZSBjb21lcy48L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+RW50ZXIgQ0xBVURJTywgQkVBVFJJQ0UsIEhFUk8sIGFuZCBMRU9OQVRPPC9TVEFHRURJUj4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+V2lsbCB5b3VyIGdyYWNlIGNvbW1hbmQgbWUgYW55IHNlcnZpY2UgdG8gdGhlPC9MSU5FPgotPExJTkU+d29ybGQncyBlbmQ/IEkgd2lsbCBnbyBvbiB0aGUgc2xpZ2h0ZXN0IGVycmFuZCBub3c8L0xJTkU+Ci08TElORT50byB0aGUgQW50aXBvZGVzIHRoYXQgeW91IGNhbiBkZXZpc2UgdG8gc2VuZCBtZSBvbjs8L0xJTkU+Ci08TElORT5JIHdpbGwgZmV0Y2ggeW91IGEgdG9vdGgtcGlja2VyIG5vdyBmcm9tIHRoZTwvTElORT4KLTxMSU5FPmZ1cnRoZXN0IGluY2ggb2YgQXNpYSwgYnJpbmcgeW91IHRoZSBsZW5ndGggb2Y8L0xJTkU+Ci08TElORT5QcmVzdGVyIEpvaG4ncyBmb290LCBmZXRjaCB5b3UgYSBoYWlyIG9mZiB0aGUgZ3JlYXQ8L0xJTkU+Ci08TElORT5DaGFtJ3MgYmVhcmQsIGRvIHlvdSBhbnkgZW1iYXNzYWdlIHRvIHRoZSBQaWdtaWVzLDwvTElORT4KLTxMSU5FPnJhdGhlciB0aGFuIGhvbGQgdGhyZWUgd29yZHMnIGNvbmZlcmVuY2Ugd2l0aCB0aGlzPC9MSU5FPgotPExJTkU+aGFycHkuIFlvdSBoYXZlIG5vIGVtcGxveW1lbnQgZm9yIG1lPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+Tm9uZSwgYnV0IHRvIGRlc2lyZSB5b3VyIGdvb2QgY29tcGFueS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+TyBHb2QsIHNpciwgaGVyZSdzIGEgZGlzaCBJIGxvdmUgbm90OiBJIGNhbm5vdDwvTElORT4KLTxMSU5FPmVuZHVyZSBteSBMYWR5IFRvbmd1ZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+RXhpdDwvU1RBR0VESVI+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5Db21lLCBsYWR5LCBjb21lOyB5b3UgaGF2ZSBsb3N0IHRoZSBoZWFydCBvZjwvTElORT4KLTxMSU5FPlNpZ25pb3IgQmVuZWRpY2suPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPkluZGVlZCwgbXkgbG9yZCwgaGUgbGVudCBpdCBtZSBhd2hpbGU7IGFuZCBJIGdhdmU8L0xJTkU+Ci08TElORT5oaW0gdXNlIGZvciBpdCwgYSBkb3VibGUgaGVhcnQgZm9yIGhpcyBzaW5nbGUgb25lOjwvTElORT4KLTxMSU5FPm1hcnJ5LCBvbmNlIGJlZm9yZSBoZSB3b24gaXQgb2YgbWUgd2l0aCBmYWxzZSBkaWNlLDwvTElORT4KLTxMSU5FPnRoZXJlZm9yZSB5b3VyIGdyYWNlIG1heSB3ZWxsIHNheSBJIGhhdmUgbG9zdCBpdC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPllvdSBoYXZlIHB1dCBoaW0gZG93biwgbGFkeSwgeW91IGhhdmUgcHV0IGhpbSBkb3duLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5TbyBJIHdvdWxkIG5vdCBoZSBzaG91bGQgZG8gbWUsIG15IGxvcmQsIGxlc3QgSTwvTElORT4KLTxMSU5FPnNob3VsZCBwcm92ZSB0aGUgbW90aGVyIG9mIGZvb2xzLiBJIGhhdmUgYnJvdWdodDwvTElORT4KLTxMSU5FPkNvdW50IENsYXVkaW8sIHdob20geW91IHNlbnQgbWUgdG8gc2Vlay48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPldoeSwgaG93IG5vdywgY291bnQhIHdoZXJlZm9yZSBhcmUgeW91IHNhZD88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5Ob3Qgc2FkLCBteSBsb3JkLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+SG93IHRoZW4/IHNpY2s/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+TmVpdGhlciwgbXkgbG9yZC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+VGhlIGNvdW50IGlzIG5laXRoZXIgc2FkLCBub3Igc2ljaywgbm9yIG1lcnJ5LCBub3I8L0xJTkU+Ci08TElORT53ZWxsOyBidXQgY2l2aWwgY291bnQsIGNpdmlsIGFzIGFuIG9yYW5nZSwgYW5kPC9MSU5FPgotPExJTkU+c29tZXRoaW5nIG9mIHRoYXQgamVhbG91cyBjb21wbGV4aW9uLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+SScgZmFpdGgsIGxhZHksIEkgdGhpbmsgeW91ciBibGF6b24gdG8gYmUgdHJ1ZTs8L0xJTkU+Ci08TElORT50aG91Z2gsIEknbGwgYmUgc3dvcm4sIGlmIGhlIGJlIHNvLCBoaXMgY29uY2VpdCBpczwvTElORT4KLTxMSU5FPmZhbHNlLiBIZXJlLCBDbGF1ZGlvLCBJIGhhdmUgd29vZWQgaW4gdGh5IG5hbWUsIGFuZDwvTElORT4KLTxMSU5FPmZhaXIgSGVybyBpcyB3b246IEkgaGF2ZSBicm9rZSB3aXRoIGhlciBmYXRoZXIsPC9MSU5FPgotPExJTkU+YW5kIGhpcyBnb29kIHdpbGwgb2J0YWluZWQ6IG5hbWUgdGhlIGRheSBvZjwvTElORT4KLTxMSU5FPm1hcnJpYWdlLCBhbmQgR29kIGdpdmUgdGhlZSBqb3khPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+Q291bnQsIHRha2Ugb2YgbWUgbXkgZGF1Z2h0ZXIsIGFuZCB3aXRoIGhlciBteTwvTElORT4KLTxMSU5FPmZvcnR1bmVzOiBoaXMgZ3JhY2UgaGF0aCBtYWRlIHRoZSBtYXRjaCwgYW5kIGFuPC9MSU5FPgotPExJTkU+Z3JhY2Ugc2F5IEFtZW4gdG8gaXQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPlNwZWFrLCBjb3VudCwgJ3RpcyB5b3VyIGN1ZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5TaWxlbmNlIGlzIHRoZSBwZXJmZWN0ZXN0IGhlcmFsZCBvZiBqb3k6IEkgd2VyZTwvTElORT4KLTxMSU5FPmJ1dCBsaXR0bGUgaGFwcHksIGlmIEkgY291bGQgc2F5IGhvdyBtdWNoLiBMYWR5LCBhczwvTElORT4KLTxMSU5FPnlvdSBhcmUgbWluZSwgSSBhbSB5b3VyczogSSBnaXZlIGF3YXkgbXlzZWxmIGZvcjwvTElORT4KLTxMSU5FPnlvdSBhbmQgZG90ZSB1cG9uIHRoZSBleGNoYW5nZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+U3BlYWssIGNvdXNpbjsgb3IsIGlmIHlvdSBjYW5ub3QsIHN0b3AgaGlzIG1vdXRoPC9MSU5FPgotPExJTkU+d2l0aCBhIGtpc3MsIGFuZCBsZXQgbm90IGhpbSBzcGVhayBuZWl0aGVyLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+SW4gZmFpdGgsIGxhZHksIHlvdSBoYXZlIGEgbWVycnkgaGVhcnQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPlllYSwgbXkgbG9yZDsgSSB0aGFuayBpdCwgcG9vciBmb29sLCBpdCBrZWVwcyBvbjwvTElORT4KLTxMSU5FPnRoZSB3aW5keSBzaWRlIG9mIGNhcmUuIE15IGNvdXNpbiB0ZWxscyBoaW0gaW4gaGlzPC9MSU5FPgotPExJTkU+ZWFyIHRoYXQgaGUgaXMgaW4gaGVyIGhlYXJ0LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPkFuZCBzbyBzaGUgZG90aCwgY291c2luLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5Hb29kIExvcmQsIGZvciBhbGxpYW5jZSEgVGh1cyBnb2VzIGV2ZXJ5IG9uZSB0byB0aGU8L0xJTkU+Ci08TElORT53b3JsZCBidXQgSSwgYW5kIEkgYW0gc3VuYnVybnQ7IEkgbWF5IHNpdCBpbiBhPC9MSU5FPgotPExJTkU+Y29ybmVyIGFuZCBjcnkgaGVpZ2gtaG8gZm9yIGEgaHVzYmFuZCE8L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPkxhZHkgQmVhdHJpY2UsIEkgd2lsbCBnZXQgeW91IG9uZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+SSB3b3VsZCByYXRoZXIgaGF2ZSBvbmUgb2YgeW91ciBmYXRoZXIncyBnZXR0aW5nLjwvTElORT4KLTxMSU5FPkhhdGggeW91ciBncmFjZSBuZSdlciBhIGJyb3RoZXIgbGlrZSB5b3U/IFlvdXI8L0xJTkU+Ci08TElORT5mYXRoZXIgZ290IGV4Y2VsbGVudCBodXNiYW5kcywgaWYgYSBtYWlkIGNvdWxkIGNvbWUgYnkgdGhlbS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPldpbGwgeW91IGhhdmUgbWUsIGxhZHk/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPk5vLCBteSBsb3JkLCB1bmxlc3MgSSBtaWdodCBoYXZlIGFub3RoZXIgZm9yPC9MSU5FPgotPExJTkU+d29ya2luZy1kYXlzOiB5b3VyIGdyYWNlIGlzIHRvbyBjb3N0bHkgdG8gd2VhcjwvTElORT4KLTxMSU5FPmV2ZXJ5IGRheS4gQnV0LCBJIGJlc2VlY2ggeW91ciBncmFjZSwgcGFyZG9uIG1lOiBJPC9MSU5FPgotPExJTkU+d2FzIGJvcm4gdG8gc3BlYWsgYWxsIG1pcnRoIGFuZCBubyBtYXR0ZXIuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5Zb3VyIHNpbGVuY2UgbW9zdCBvZmZlbmRzIG1lLCBhbmQgdG8gYmUgbWVycnkgYmVzdDwvTElORT4KLTxMSU5FPmJlY29tZXMgeW91OyBmb3IsIG91dCBvZiBxdWVzdGlvbiwgeW91IHdlcmUgYm9ybiBpbjwvTElORT4KLTxMSU5FPmEgbWVycnkgaG91ci48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+Tm8sIHN1cmUsIG15IGxvcmQsIG15IG1vdGhlciBjcmllZDsgYnV0IHRoZW4gdGhlcmU8L0xJTkU+Ci08TElORT53YXMgYSBzdGFyIGRhbmNlZCwgYW5kIHVuZGVyIHRoYXQgd2FzIEkgYm9ybi48L0xJTkU+Ci08TElORT5Db3VzaW5zLCBHb2QgZ2l2ZSB5b3Ugam95ITwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPk5pZWNlLCB3aWxsIHlvdSBsb29rIHRvIHRob3NlIHRoaW5ncyBJIHRvbGQgeW91IG9mPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5JIGNyeSB5b3UgbWVyY3ksIHVuY2xlLiBCeSB5b3VyIGdyYWNlJ3MgcGFyZG9uLjwvTElORT4KLTwvU1BFRUNIPgotCi0KLTxTVEFHRURJUj5FeGl0PC9TVEFHRURJUj4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPkJ5IG15IHRyb3RoLCBhIHBsZWFzYW50LXNwaXJpdGVkIGxhZHkuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+VGhlcmUncyBsaXR0bGUgb2YgdGhlIG1lbGFuY2hvbHkgZWxlbWVudCBpbiBoZXIsIG15PC9MSU5FPgotPExJTkU+bG9yZDogc2hlIGlzIG5ldmVyIHNhZCBidXQgd2hlbiBzaGUgc2xlZXBzLCBhbmQ8L0xJTkU+Ci08TElORT5ub3QgZXZlciBzYWQgdGhlbjsgZm9yIEkgaGF2ZSBoZWFyZCBteSBkYXVnaHRlciBzYXksPC9MSU5FPgotPExJTkU+c2hlIGhhdGggb2Z0ZW4gZHJlYW1lZCBvZiB1bmhhcHBpbmVzcyBhbmQgd2FrZWQ8L0xJTkU+Ci08TElORT5oZXJzZWxmIHdpdGggbGF1Z2hpbmcuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5TaGUgY2Fubm90IGVuZHVyZSB0byBoZWFyIHRlbGwgb2YgYSBodXNiYW5kLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPk8sIGJ5IG5vIG1lYW5zOiBzaGUgbW9ja3MgYWxsIGhlciB3b29lcnMgb3V0IG9mIHN1aXQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5TaGUgd2VyZSBhbiBleGNlbGxlbnQgd2lmZSBmb3IgQmVuZWRpY3QuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+TyBMb3JkLCBteSBsb3JkLCBpZiB0aGV5IHdlcmUgYnV0IGEgd2VlayBtYXJyaWVkLDwvTElORT4KLTxMSU5FPnRoZXkgd291bGQgdGFsayB0aGVtc2VsdmVzIG1hZC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPkNvdW50eSBDbGF1ZGlvLCB3aGVuIG1lYW4geW91IHRvIGdvIHRvIGNodXJjaD88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5Uby1tb3Jyb3csIG15IGxvcmQ6IHRpbWUgZ29lcyBvbiBjcnV0Y2hlcyB0aWxsIGxvdmU8L0xJTkU+Ci08TElORT5oYXZlIGFsbCBoaXMgcml0ZXMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+Tm90IHRpbGwgTW9uZGF5LCBteSBkZWFyIHNvbiwgd2hpY2ggaXMgaGVuY2UgYSBqdXN0PC9MSU5FPgotPExJTkU+c2V2ZW4tbmlnaHQ7IGFuZCBhIHRpbWUgdG9vIGJyaWVmLCB0b28sIHRvIGhhdmUgYWxsPC9MSU5FPgotPExJTkU+dGhpbmdzIGFuc3dlciBteSBtaW5kLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+Q29tZSwgeW91IHNoYWtlIHRoZSBoZWFkIGF0IHNvIGxvbmcgYSBicmVhdGhpbmc6PC9MSU5FPgotPExJTkU+YnV0LCBJIHdhcnJhbnQgdGhlZSwgQ2xhdWRpbywgdGhlIHRpbWUgc2hhbGwgbm90IGdvPC9MSU5FPgotPExJTkU+ZHVsbHkgYnkgdXMuIEkgd2lsbCBpbiB0aGUgaW50ZXJpbSB1bmRlcnRha2Ugb25lIG9mPC9MSU5FPgotPExJTkU+SGVyY3VsZXMnIGxhYm91cnM7IHdoaWNoIGlzLCB0byBicmluZyBTaWduaW9yPC9MSU5FPgotPExJTkU+QmVuZWRpY2sgYW5kIHRoZSBMYWR5IEJlYXRyaWNlIGludG8gYSBtb3VudGFpbiBvZjwvTElORT4KLTxMSU5FPmFmZmVjdGlvbiB0aGUgb25lIHdpdGggdGhlIG90aGVyLiBJIHdvdWxkIGZhaW4gaGF2ZTwvTElORT4KLTxMSU5FPml0IGEgbWF0Y2gsIGFuZCBJIGRvdWJ0IG5vdCBidXQgdG8gZmFzaGlvbiBpdCwgaWY8L0xJTkU+Ci08TElORT55b3UgdGhyZWUgd2lsbCBidXQgbWluaXN0ZXIgc3VjaCBhc3Npc3RhbmNlIGFzIEk8L0xJTkU+Ci08TElORT5zaGFsbCBnaXZlIHlvdSBkaXJlY3Rpb24uPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+TXkgbG9yZCwgSSBhbSBmb3IgeW91LCB0aG91Z2ggaXQgY29zdCBtZSB0ZW48L0xJTkU+Ci08TElORT5uaWdodHMnIHdhdGNoaW5ncy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5BbmQgSSwgbXkgbG9yZC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPkFuZCB5b3UgdG9vLCBnZW50bGUgSGVybz88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkhFUk88L1NQRUFLRVI+Ci08TElORT5JIHdpbGwgZG8gYW55IG1vZGVzdCBvZmZpY2UsIG15IGxvcmQsIHRvIGhlbHAgbXk8L0xJTkU+Ci08TElORT5jb3VzaW4gdG8gYSBnb29kIGh1c2JhbmQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5BbmQgQmVuZWRpY2sgaXMgbm90IHRoZSB1bmhvcGVmdWxsZXN0IGh1c2JhbmQgdGhhdDwvTElORT4KLTxMSU5FPkkga25vdy4gVGh1cyBmYXIgY2FuIEkgcHJhaXNlIGhpbTsgaGUgaXMgb2YgYSBub2JsZTwvTElORT4KLTxMSU5FPnN0cmFpbiwgb2YgYXBwcm92ZWQgdmFsb3VyIGFuZCBjb25maXJtZWQgaG9uZXN0eS4gSTwvTElORT4KLTxMSU5FPndpbGwgdGVhY2ggeW91IGhvdyB0byBodW1vdXIgeW91ciBjb3VzaW4sIHRoYXQgc2hlPC9MSU5FPgotPExJTkU+c2hhbGwgZmFsbCBpbiBsb3ZlIHdpdGggQmVuZWRpY2s7IGFuZCBJLCB3aXRoIHlvdXI8L0xJTkU+Ci08TElORT50d28gaGVscHMsIHdpbGwgc28gcHJhY3Rpc2Ugb24gQmVuZWRpY2sgdGhhdCwgaW48L0xJTkU+Ci08TElORT5kZXNwaXRlIG9mIGhpcyBxdWljayB3aXQgYW5kIGhpcyBxdWVhc3kgc3RvbWFjaCwgaGU8L0xJTkU+Ci08TElORT5zaGFsbCBmYWxsIGluIGxvdmUgd2l0aCBCZWF0cmljZS4gSWYgd2UgY2FuIGRvIHRoaXMsPC9MSU5FPgotPExJTkU+Q3VwaWQgaXMgbm8gbG9uZ2VyIGFuIGFyY2hlcjogaGlzIGdsb3J5IHNoYWxsIGJlPC9MSU5FPgotPExJTkU+b3VycywgZm9yIHdlIGFyZSB0aGUgb25seSBsb3ZlLWdvZHMuIEdvIGluIHdpdGggbWUsPC9MSU5FPgotPExJTkU+YW5kIEkgd2lsbCB0ZWxsIHlvdSBteSBkcmlmdC48L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+RXhldW50PC9TVEFHRURJUj4KLTwvU0NFTkU+Ci0KLTxTQ0VORT48VElUTEU+U0NFTkUgSUkuICBUaGUgc2FtZS48L1RJVExFPgotPFNUQUdFRElSPkVudGVyIERPTiBKT0hOIGFuZCBCT1JBQ0hJTzwvU1RBR0VESVI+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gSk9ITjwvU1BFQUtFUj4KLTxMSU5FPkl0IGlzIHNvOyB0aGUgQ291bnQgQ2xhdWRpbyBzaGFsbCBtYXJyeSB0aGU8L0xJTkU+Ci08TElORT5kYXVnaHRlciBvZiBMZW9uYXRvLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Qk9SQUNISU88L1NQRUFLRVI+Ci08TElORT5ZZWEsIG15IGxvcmQ7IGJ1dCBJIGNhbiBjcm9zcyBpdC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBKT0hOPC9TUEVBS0VSPgotPExJTkU+QW55IGJhciwgYW55IGNyb3NzLCBhbnkgaW1wZWRpbWVudCB3aWxsIGJlPC9MSU5FPgotPExJTkU+bWVkaWNpbmFibGUgdG8gbWU6IEkgYW0gc2ljayBpbiBkaXNwbGVhc3VyZSB0byBoaW0sPC9MSU5FPgotPExJTkU+YW5kIHdoYXRzb2V2ZXIgY29tZXMgYXRod2FydCBoaXMgYWZmZWN0aW9uIHJhbmdlczwvTElORT4KLTxMSU5FPmV2ZW5seSB3aXRoIG1pbmUuIEhvdyBjYW5zdCB0aG91IGNyb3NzIHRoaXMgbWFycmlhZ2U/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CT1JBQ0hJTzwvU1BFQUtFUj4KLTxMSU5FPk5vdCBob25lc3RseSwgbXkgbG9yZDsgYnV0IHNvIGNvdmVydGx5IHRoYXQgbm88L0xJTkU+Ci08TElORT5kaXNob25lc3R5IHNoYWxsIGFwcGVhciBpbiBtZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBKT0hOPC9TUEVBS0VSPgotPExJTkU+U2hvdyBtZSBicmllZmx5IGhvdy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJPUkFDSElPPC9TUEVBS0VSPgotPExJTkU+SSB0aGluayBJIHRvbGQgeW91ciBsb3Jkc2hpcCBhIHllYXIgc2luY2UsIGhvdyBtdWNoPC9MSU5FPgotPExJTkU+SSBhbSBpbiB0aGUgZmF2b3VyIG9mIE1hcmdhcmV0LCB0aGUgd2FpdGluZzwvTElORT4KLTxMSU5FPmdlbnRsZXdvbWFuIHRvIEhlcm8uPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gSk9ITjwvU1BFQUtFUj4KLTxMSU5FPkkgcmVtZW1iZXIuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CT1JBQ0hJTzwvU1BFQUtFUj4KLTxMSU5FPkkgY2FuLCBhdCBhbnkgdW5zZWFzb25hYmxlIGluc3RhbnQgb2YgdGhlIG5pZ2h0LDwvTElORT4KLTxMSU5FPmFwcG9pbnQgaGVyIHRvIGxvb2sgb3V0IGF0IGhlciBsYWR5J3MgY2hhbWJlciB3aW5kb3cuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gSk9ITjwvU1BFQUtFUj4KLTxMSU5FPldoYXQgbGlmZSBpcyBpbiB0aGF0LCB0byBiZSB0aGUgZGVhdGggb2YgdGhpcyBtYXJyaWFnZT88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJPUkFDSElPPC9TUEVBS0VSPgotPExJTkU+VGhlIHBvaXNvbiBvZiB0aGF0IGxpZXMgaW4geW91IHRvIHRlbXBlci4gR28geW91IHRvPC9MSU5FPgotPExJTkU+dGhlIHByaW5jZSB5b3VyIGJyb3RoZXI7IHNwYXJlIG5vdCB0byB0ZWxsIGhpbSB0aGF0PC9MSU5FPgotPExJTkU+aGUgaGF0aCB3cm9uZ2VkIGhpcyBob25vdXIgaW4gbWFycnlpbmcgdGhlIHJlbm93bmVkPC9MSU5FPgotPExJTkU+Q2xhdWRpby0td2hvc2UgZXN0aW1hdGlvbiBkbyB5b3UgbWlnaHRpbHkgaG9sZDwvTElORT4KLTxMSU5FPnVwLS10byBhIGNvbnRhbWluYXRlZCBzdGFsZSwgc3VjaCBhIG9uZSBhcyBIZXJvLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIEpPSE48L1NQRUFLRVI+Ci08TElORT5XaGF0IHByb29mIHNoYWxsIEkgbWFrZSBvZiB0aGF0PzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Qk9SQUNISU88L1NQRUFLRVI+Ci08TElORT5Qcm9vZiBlbm91Z2ggdG8gbWlzdXNlIHRoZSBwcmluY2UsIHRvIHZleCBDbGF1ZGlvLDwvTElORT4KLTxMSU5FPnRvIHVuZG8gSGVybyBhbmQga2lsbCBMZW9uYXRvLiBMb29rIHlvdSBmb3IgYW55PC9MSU5FPgotPExJTkU+b3RoZXIgaXNzdWU/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gSk9ITjwvU1BFQUtFUj4KLTxMSU5FPk9ubHkgdG8gZGVzcGl0ZSB0aGVtLCBJIHdpbGwgZW5kZWF2b3VyIGFueSB0aGluZy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJPUkFDSElPPC9TUEVBS0VSPgotPExJTkU+R28sIHRoZW47IGZpbmQgbWUgYSBtZWV0IGhvdXIgdG8gZHJhdyBEb24gUGVkcm8gYW5kPC9MSU5FPgotPExJTkU+dGhlIENvdW50IENsYXVkaW8gYWxvbmU6IHRlbGwgdGhlbSB0aGF0IHlvdSBrbm93PC9MSU5FPgotPExJTkU+dGhhdCBIZXJvIGxvdmVzIG1lOyBpbnRlbmQgYSBraW5kIG9mIHplYWwgYm90aCB0byB0aGU8L0xJTkU+Ci08TElORT5wcmluY2UgYW5kIENsYXVkaW8sIGFzLC0taW4gbG92ZSBvZiB5b3VyIGJyb3RoZXInczwvTElORT4KLTxMSU5FPmhvbm91ciwgd2hvIGhhdGggbWFkZSB0aGlzIG1hdGNoLCBhbmQgaGlzIGZyaWVuZCdzPC9MSU5FPgotPExJTkU+cmVwdXRhdGlvbiwgd2hvIGlzIHRodXMgbGlrZSB0byBiZSBjb3plbmVkIHdpdGggdGhlPC9MSU5FPgotPExJTkU+c2VtYmxhbmNlIG9mIGEgbWFpZCwtLXRoYXQgeW91IGhhdmUgZGlzY292ZXJlZDwvTElORT4KLTxMSU5FPnRodXMuIFRoZXkgd2lsbCBzY2FyY2VseSBiZWxpZXZlIHRoaXMgd2l0aG91dCB0cmlhbDo8L0xJTkU+Ci08TElORT5vZmZlciB0aGVtIGluc3RhbmNlczsgd2hpY2ggc2hhbGwgYmVhciBubyBsZXNzPC9MSU5FPgotPExJTkU+bGlrZWxpaG9vZCB0aGFuIHRvIHNlZSBtZSBhdCBoZXIgY2hhbWJlci13aW5kb3csPC9MSU5FPgotPExJTkU+aGVhciBtZSBjYWxsIE1hcmdhcmV0IEhlcm8sIGhlYXIgTWFyZ2FyZXQgdGVybSBtZTwvTElORT4KLTxMSU5FPkNsYXVkaW87IGFuZCBicmluZyB0aGVtIHRvIHNlZSB0aGlzIHRoZSB2ZXJ5IG5pZ2h0PC9MSU5FPgotPExJTkU+YmVmb3JlIHRoZSBpbnRlbmRlZCB3ZWRkaW5nLC0tZm9yIGluIHRoZSBtZWFudGltZSBJPC9MSU5FPgotPExJTkU+d2lsbCBzbyBmYXNoaW9uIHRoZSBtYXR0ZXIgdGhhdCBIZXJvIHNoYWxsIGJlPC9MSU5FPgotPExJTkU+YWJzZW50LC0tYW5kIHRoZXJlIHNoYWxsIGFwcGVhciBzdWNoIHNlZW1pbmcgdHJ1dGg8L0xJTkU+Ci08TElORT5vZiBIZXJvJ3MgZGlzbG95YWx0eSB0aGF0IGplYWxvdXN5IHNoYWxsIGJlIGNhbGxlZDwvTElORT4KLTxMSU5FPmFzc3VyYW5jZSBhbmQgYWxsIHRoZSBwcmVwYXJhdGlvbiBvdmVydGhyb3duLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIEpPSE48L1NQRUFLRVI+Ci08TElORT5Hcm93IHRoaXMgdG8gd2hhdCBhZHZlcnNlIGlzc3VlIGl0IGNhbiwgSSB3aWxsIHB1dDwvTElORT4KLTxMSU5FPml0IGluIHByYWN0aXNlLiBCZSBjdW5uaW5nIGluIHRoZSB3b3JraW5nIHRoaXMsIGFuZDwvTElORT4KLTxMSU5FPnRoeSBmZWUgaXMgYSB0aG91c2FuZCBkdWNhdHMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CT1JBQ0hJTzwvU1BFQUtFUj4KLTxMSU5FPkJlIHlvdSBjb25zdGFudCBpbiB0aGUgYWNjdXNhdGlvbiwgYW5kIG15IGN1bm5pbmc8L0xJTkU+Ci08TElORT5zaGFsbCBub3Qgc2hhbWUgbWUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gSk9ITjwvU1BFQUtFUj4KLTxMSU5FPkkgd2lsbCBwcmVzZW50bHkgZ28gbGVhcm4gdGhlaXIgZGF5IG9mIG1hcnJpYWdlLjwvTElORT4KLTwvU1BFRUNIPgotCi0KLTxTVEFHRURJUj5FeGV1bnQ8L1NUQUdFRElSPgotPC9TQ0VORT4KLQotPFNDRU5FPjxUSVRMRT5TQ0VORSBJSUkuICBMRU9OQVRPJ1Mgb3JjaGFyZC48L1RJVExFPgotPFNUQUdFRElSPkVudGVyIEJFTkVESUNLPC9TVEFHRURJUj4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+Qm95ITwvTElORT4KLTwvU1BFRUNIPgotCi0KLTxTVEFHRURJUj5FbnRlciBCb3k8L1NUQUdFRElSPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Qm95PC9TUEVBS0VSPgotPExJTkU+U2lnbmlvcj88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+SW4gbXkgY2hhbWJlci13aW5kb3cgbGllcyBhIGJvb2s6IGJyaW5nIGl0IGhpdGhlcjwvTElORT4KLTxMSU5FPnRvIG1lIGluIHRoZSBvcmNoYXJkLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Qm95PC9TUEVBS0VSPgotPExJTkU+SSBhbSBoZXJlIGFscmVhZHksIHNpci48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+SSBrbm93IHRoYXQ7IGJ1dCBJIHdvdWxkIGhhdmUgdGhlZSBoZW5jZSwgYW5kIGhlcmUgYWdhaW4uPC9MSU5FPgotPFNUQUdFRElSPkV4aXQgQm95PC9TVEFHRURJUj4KLTxMSU5FPkkgZG8gbXVjaCB3b25kZXIgdGhhdCBvbmUgbWFuLCBzZWVpbmcgaG93IG11Y2g8L0xJTkU+Ci08TElORT5hbm90aGVyIG1hbiBpcyBhIGZvb2wgd2hlbiBoZSBkZWRpY2F0ZXMgaGlzPC9MSU5FPgotPExJTkU+YmVoYXZpb3JzIHRvIGxvdmUsIHdpbGwsIGFmdGVyIGhlIGhhdGggbGF1Z2hlZCBhdDwvTElORT4KLTxMSU5FPnN1Y2ggc2hhbGxvdyBmb2xsaWVzIGluIG90aGVycywgYmVjb21lIHRoZSBhcmd1bWVudDwvTElORT4KLTxMSU5FPm9mIGhpcyBvd24gc2Nvcm4gYnkgZmFpbGluZyBpbiBsb3ZlOiBhbmQgc3VjaCBhIG1hbjwvTElORT4KLTxMSU5FPmlzIENsYXVkaW8uIEkgaGF2ZSBrbm93biB3aGVuIHRoZXJlIHdhcyBubyBtdXNpYzwvTElORT4KLTxMSU5FPndpdGggaGltIGJ1dCB0aGUgZHJ1bSBhbmQgdGhlIGZpZmU7IGFuZCBub3cgaGFkIGhlPC9MSU5FPgotPExJTkU+cmF0aGVyIGhlYXIgdGhlIHRhYm91ciBhbmQgdGhlIHBpcGU6IEkgaGF2ZSBrbm93bjwvTElORT4KLTxMSU5FPndoZW4gaGUgd291bGQgaGF2ZSB3YWxrZWQgdGVuIG1pbGUgYS1mb290IHRvIHNlZSBhPC9MSU5FPgotPExJTkU+Z29vZCBhcm1vdXI7IGFuZCBub3cgd2lsbCBoZSBsaWUgdGVuIG5pZ2h0cyBhd2FrZSw8L0xJTkU+Ci08TElORT5jYXJ2aW5nIHRoZSBmYXNoaW9uIG9mIGEgbmV3IGRvdWJsZXQuIEhlIHdhcyB3b250IHRvPC9MSU5FPgotPExJTkU+c3BlYWsgcGxhaW4gYW5kIHRvIHRoZSBwdXJwb3NlLCBsaWtlIGFuIGhvbmVzdCBtYW48L0xJTkU+Ci08TElORT5hbmQgYSBzb2xkaWVyOyBhbmQgbm93IGlzIGhlIHR1cm5lZCBvcnRob2dyYXBoeTsgaGlzPC9MSU5FPgotPExJTkU+d29yZHMgYXJlIGEgdmVyeSBmYW50YXN0aWNhbCBiYW5xdWV0LCBqdXN0IHNvIG1hbnk8L0xJTkU+Ci08TElORT5zdHJhbmdlIGRpc2hlcy4gTWF5IEkgYmUgc28gY29udmVydGVkIGFuZCBzZWUgd2l0aDwvTElORT4KLTxMSU5FPnRoZXNlIGV5ZXM/IEkgY2Fubm90IHRlbGw7IEkgdGhpbmsgbm90OiBJIHdpbGwgbm90PC9MSU5FPgotPExJTkU+YmUgc3dvcm4sIGJ1dCBsb3ZlIG1heSB0cmFuc2Zvcm0gbWUgdG8gYW4gb3lzdGVyOyBidXQ8L0xJTkU+Ci08TElORT5JJ2xsIHRha2UgbXkgb2F0aCBvbiBpdCwgdGlsbCBoZSBoYXZlIG1hZGUgYW4gb3lzdGVyPC9MSU5FPgotPExJTkU+b2YgbWUsIGhlIHNoYWxsIG5ldmVyIG1ha2UgbWUgc3VjaCBhIGZvb2wuIE9uZSB3b21hbjwvTElORT4KLTxMSU5FPmlzIGZhaXIsIHlldCBJIGFtIHdlbGw7IGFub3RoZXIgaXMgd2lzZSwgeWV0IEkgYW08L0xJTkU+Ci08TElORT53ZWxsOyBhbm90aGVyIHZpcnR1b3VzLCB5ZXQgSSBhbSB3ZWxsOyBidXQgdGlsbCBhbGw8L0xJTkU+Ci08TElORT5ncmFjZXMgYmUgaW4gb25lIHdvbWFuLCBvbmUgd29tYW4gc2hhbGwgbm90IGNvbWUgaW48L0xJTkU+Ci08TElORT5teSBncmFjZS4gUmljaCBzaGUgc2hhbGwgYmUsIHRoYXQncyBjZXJ0YWluOyB3aXNlLDwvTElORT4KLTxMSU5FPm9yIEknbGwgbm9uZTsgdmlydHVvdXMsIG9yIEknbGwgbmV2ZXIgY2hlYXBlbiBoZXI7PC9MSU5FPgotPExJTkU+ZmFpciwgb3IgSSdsbCAgIG5ldmVyIGxvb2sgb24gaGVyOyBtaWxkLCBvciBjb21lIG5vdDwvTElORT4KLTxMSU5FPm5lYXIgbWU7IG5vYmxlLCBvciBub3QgSSBmb3IgYW4gYW5nZWw7IG9mIGdvb2Q8L0xJTkU+Ci08TElORT5kaXNjb3Vyc2UsIGFuIGV4Y2VsbGVudCBtdXNpY2lhbiwgYW5kIGhlciBoYWlyIHNoYWxsPC9MSU5FPgotPExJTkU+YmUgb2Ygd2hhdCBjb2xvdXIgaXQgcGxlYXNlIEdvZC4gSGEhIHRoZSBwcmluY2UgYW5kPC9MSU5FPgotPExJTkU+TW9uc2lldXIgTG92ZSEgSSB3aWxsIGhpZGUgbWUgaW4gdGhlIGFyYm91ci48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNUQUdFRElSPldpdGhkcmF3czwvU1RBR0VESVI+Ci08U1RBR0VESVI+RW50ZXIgRE9OIFBFRFJPLCBDTEFVRElPLCBhbmQgTEVPTkFUTzwvU1RBR0VESVI+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5Db21lLCBzaGFsbCB3ZSBoZWFyIHRoaXMgbXVzaWM/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+WWVhLCBteSBnb29kIGxvcmQuIEhvdyBzdGlsbCB0aGUgZXZlbmluZyBpcyw8L0xJTkU+Ci08TElORT5BcyBodXNoJ2Qgb24gcHVycG9zZSB0byBncmFjZSBoYXJtb255ITwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+U2VlIHlvdSB3aGVyZSBCZW5lZGljayBoYXRoIGhpZCBoaW1zZWxmPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPk8sIHZlcnkgd2VsbCwgbXkgbG9yZDogdGhlIG11c2ljIGVuZGVkLDwvTElORT4KLTxMSU5FPldlJ2xsIGZpdCB0aGUga2lkLWZveCB3aXRoIGEgcGVubnl3b3J0aC48L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+RW50ZXIgQkFMVEhBU0FSIHdpdGggTXVzaWM8L1NUQUdFRElSPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+Q29tZSwgQmFsdGhhc2FyLCB3ZSdsbCBoZWFyIHRoYXQgc29uZyBhZ2Fpbi48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJBTFRIQVNBUjwvU1BFQUtFUj4KLTxMSU5FPk8sIGdvb2QgbXkgbG9yZCwgdGF4IG5vdCBzbyBiYWQgYSB2b2ljZTwvTElORT4KLTxMSU5FPlRvIHNsYW5kZXIgbXVzaWMgYW55IG1vcmUgdGhhbiBvbmNlLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+SXQgaXMgdGhlIHdpdG5lc3Mgc3RpbGwgb2YgZXhjZWxsZW5jeTwvTElORT4KLTxMSU5FPlRvIHB1dCBhIHN0cmFuZ2UgZmFjZSBvbiBoaXMgb3duIHBlcmZlY3Rpb24uPC9MSU5FPgotPExJTkU+SSBwcmF5IHRoZWUsIHNpbmcsIGFuZCBsZXQgbWUgd29vIG5vIG1vcmUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CQUxUSEFTQVI8L1NQRUFLRVI+Ci08TElORT5CZWNhdXNlIHlvdSB0YWxrIG9mIHdvb2luZywgSSB3aWxsIHNpbmc7PC9MSU5FPgotPExJTkU+U2luY2UgbWFueSBhIHdvb2VyIGRvdGggY29tbWVuY2UgaGlzIHN1aXQ8L0xJTkU+Ci08TElORT5UbyBoZXIgaGUgdGhpbmtzIG5vdCB3b3J0aHksIHlldCBoZSB3b29lcyw8L0xJTkU+Ci08TElORT5ZZXQgd2lsbCBoZSBzd2VhciBoZSBsb3Zlcy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPk5vdywgcHJheSB0aGVlLCBjb21lOzwvTElORT4KLTxMSU5FPk9yLCBpZiB0aG91IHdpbHQgaG9sZCBsb25nZXIgYXJndW1lbnQsPC9MSU5FPgotPExJTkU+RG8gaXQgaW4gbm90ZXMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CQUxUSEFTQVI8L1NQRUFLRVI+Ci08TElORT5Ob3RlIHRoaXMgYmVmb3JlIG15IG5vdGVzOzwvTElORT4KLTxMSU5FPlRoZXJlJ3Mgbm90IGEgbm90ZSBvZiBtaW5lIHRoYXQncyB3b3J0aCB0aGUgbm90aW5nLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+V2h5LCB0aGVzZSBhcmUgdmVyeSBjcm90Y2hldHMgdGhhdCBoZSBzcGVha3M7PC9MSU5FPgotPExJTkU+Tm90ZSwgbm90ZXMsIGZvcnNvb3RoLCBhbmQgbm90aGluZy48L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+QWlyPC9TVEFHRURJUj4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+Tm93LCBkaXZpbmUgYWlyISBub3cgaXMgaGlzIHNvdWwgcmF2aXNoZWQhIElzIGl0PC9MSU5FPgotPExJTkU+bm90IHN0cmFuZ2UgdGhhdCBzaGVlcHMnIGd1dHMgc2hvdWxkIGhhbGUgc291bHMgb3V0PC9MSU5FPgotPExJTkU+b2YgbWVuJ3MgYm9kaWVzPyBXZWxsLCBhIGhvcm4gZm9yIG15IG1vbmV5LCB3aGVuPC9MSU5FPgotPExJTkU+YWxsJ3MgZG9uZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+VGhlIFNvbmc8L1NUQUdFRElSPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkFMVEhBU0FSPC9TUEVBS0VSPgotPExJTkU+U2lnaCBubyBtb3JlLCBsYWRpZXMsIHNpZ2ggbm8gbW9yZSw8L0xJTkU+Ci08TElORT5NZW4gd2VyZSBkZWNlaXZlcnMgZXZlciw8L0xJTkU+Ci08TElORT5PbmUgZm9vdCBpbiBzZWEgYW5kIG9uZSBvbiBzaG9yZSw8L0xJTkU+Ci08TElORT5UbyBvbmUgdGhpbmcgY29uc3RhbnQgbmV2ZXI6PC9MSU5FPgotPExJTkU+VGhlbiBzaWdoIG5vdCBzbywgYnV0IGxldCB0aGVtIGdvLDwvTElORT4KLTxMSU5FPkFuZCBiZSB5b3UgYmxpdGhlIGFuZCBib25ueSw8L0xJTkU+Ci08TElORT5Db252ZXJ0aW5nIGFsbCB5b3VyIHNvdW5kcyBvZiB3b2U8L0xJTkU+Ci08TElORT5JbnRvIEhleSBub25ueSwgbm9ubnkuPC9MSU5FPgotPExJTkU+U2luZyBubyBtb3JlIGRpdHRpZXMsIHNpbmcgbm8gbW9lLDwvTElORT4KLTxMSU5FPk9mIGR1bXBzIHNvIGR1bGwgYW5kIGhlYXZ5OzwvTElORT4KLTxMSU5FPlRoZSBmcmF1ZCBvZiBtZW4gd2FzIGV2ZXIgc28sPC9MSU5FPgotPExJTkU+U2luY2Ugc3VtbWVyIGZpcnN0IHdhcyBsZWFmeTo8L0xJTkU+Ci08TElORT5UaGVuIHNpZ2ggbm90IHNvLCAmYW1wO2MuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5CeSBteSB0cm90aCwgYSBnb29kIHNvbmcuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CQUxUSEFTQVI8L1NQRUFLRVI+Ci08TElORT5BbmQgYW4gaWxsIHNpbmdlciwgbXkgbG9yZC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPkhhLCBubywgbm8sIGZhaXRoOyB0aG91IHNpbmdlc3Qgd2VsbCBlbm91Z2ggZm9yIGEgc2hpZnQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPkFuIGhlIGhhZCBiZWVuIGEgZG9nIHRoYXQgc2hvdWxkIGhhdmUgaG93bGVkIHRodXMsPC9MSU5FPgotPExJTkU+dGhleSB3b3VsZCBoYXZlIGhhbmdlZCBoaW06IGFuZCBJIHByYXkgR29kIGhpcyBiYWQ8L0xJTkU+Ci08TElORT52b2ljZSBib2RlIG5vIG1pc2NoaWVmLiBJIGhhZCBhcyBsaWVmIGhhdmUgaGVhcmQgdGhlPC9MSU5FPgotPExJTkU+bmlnaHQtcmF2ZW4sIGNvbWUgd2hhdCBwbGFndWUgY291bGQgaGF2ZSBjb21lIGFmdGVyPC9MSU5FPgotPExJTkU+aXQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5ZZWEsIG1hcnJ5LCBkb3N0IHRob3UgaGVhciwgQmFsdGhhc2FyPyBJIHByYXkgdGhlZSw8L0xJTkU+Ci08TElORT5nZXQgdXMgc29tZSBleGNlbGxlbnQgbXVzaWM7IGZvciB0by1tb3Jyb3cgbmlnaHQgd2U8L0xJTkU+Ci08TElORT53b3VsZCBoYXZlIGl0IGF0IHRoZSBMYWR5IEhlcm8ncyBjaGFtYmVyLXdpbmRvdy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJBTFRIQVNBUjwvU1BFQUtFUj4KLTxMSU5FPlRoZSBiZXN0IEkgY2FuLCBteSBsb3JkLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+RG8gc286IGZhcmV3ZWxsLjwvTElORT4KLTxTVEFHRURJUj5FeGl0IEJBTFRIQVNBUjwvU1RBR0VESVI+Ci08TElORT5Db21lIGhpdGhlciwgTGVvbmF0by4gV2hhdCB3YXMgaXQgeW91IHRvbGQgbWUgb2Y8L0xJTkU+Ci08TElORT50by1kYXksIHRoYXQgeW91ciBuaWVjZSBCZWF0cmljZSB3YXMgaW4gbG92ZSB3aXRoPC9MSU5FPgotPExJTkU+U2lnbmlvciBCZW5lZGljaz88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5PLCBheTogc3RhbGsgb24uIHN0YWxrIG9uOyB0aGUgZm93bCBzaXRzLiBJIGRpZDwvTElORT4KLTxMSU5FPm5ldmVyIHRoaW5rIHRoYXQgbGFkeSB3b3VsZCBoYXZlIGxvdmVkIGFueSBtYW4uPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+Tm8sIG5vciBJIG5laXRoZXI7IGJ1dCBtb3N0IHdvbmRlcmZ1bCB0aGF0IHNoZTwvTElORT4KLTxMSU5FPnNob3VsZCBzbyBkb3RlIG9uIFNpZ25pb3IgQmVuZWRpY2ssIHdob20gc2hlIGhhdGggaW48L0xJTkU+Ci08TElORT5hbGwgb3V0d2FyZCBiZWhhdmlvcnMgc2VlbWVkIGV2ZXIgdG8gYWJob3IuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPklzJ3QgcG9zc2libGU/IFNpdHMgdGhlIHdpbmQgaW4gdGhhdCBjb3JuZXI/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+QnkgbXkgdHJvdGgsIG15IGxvcmQsIEkgY2Fubm90IHRlbGwgd2hhdCB0byB0aGluazwvTElORT4KLTxMSU5FPm9mIGl0IGJ1dCB0aGF0IHNoZSBsb3ZlcyBoaW0gd2l0aCBhbiBlbnJhZ2VkPC9MSU5FPgotPExJTkU+YWZmZWN0aW9uOiBpdCBpcyBwYXN0IHRoZSBpbmZpbml0ZSBvZiB0aG91Z2h0LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+TWF5IGJlIHNoZSBkb3RoIGJ1dCBjb3VudGVyZmVpdC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5GYWl0aCwgbGlrZSBlbm91Z2guPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+TyBHb2QsIGNvdW50ZXJmZWl0ISBUaGVyZSB3YXMgbmV2ZXIgY291bnRlcmZlaXQgb2Y8L0xJTkU+Ci08TElORT5wYXNzaW9uIGNhbWUgc28gbmVhciB0aGUgbGlmZSBvZiBwYXNzaW9uIGFzIHNoZTwvTElORT4KLTxMSU5FPmRpc2NvdmVycyBpdC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPldoeSwgd2hhdCBlZmZlY3RzIG9mIHBhc3Npb24gc2hvd3Mgc2hlPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPkJhaXQgdGhlIGhvb2sgd2VsbDsgdGhpcyBmaXNoIHdpbGwgYml0ZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5XaGF0IGVmZmVjdHMsIG15IGxvcmQ/IFNoZSB3aWxsIHNpdCB5b3UsIHlvdSBoZWFyZDwvTElORT4KLTxMSU5FPm15IGRhdWdodGVyIHRlbGwgeW91IGhvdy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5TaGUgZGlkLCBpbmRlZWQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5Ib3csIGhvdywgcHJheSB5b3U/IFlvdSBhbWF6ZSBtZTogSSB3b3VsZCBoYXZlIEk8L0xJTkU+Ci08TElORT50aG91Z2h0IGhlciBzcGlyaXQgaGFkIGJlZW4gaW52aW5jaWJsZSBhZ2FpbnN0IGFsbDwvTElORT4KLTxMSU5FPmFzc2F1bHRzIG9mIGFmZmVjdGlvbi48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5JIHdvdWxkIGhhdmUgc3dvcm4gaXQgaGFkLCBteSBsb3JkOyBlc3BlY2lhbGx5PC9MSU5FPgotPExJTkU+YWdhaW5zdCBCZW5lZGljay48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+SSBzaG91bGQgdGhpbmsgdGhpcyBhIGd1bGwsIGJ1dCB0aGF0IHRoZTwvTElORT4KLTxMSU5FPndoaXRlLWJlYXJkZWQgZmVsbG93IHNwZWFrcyBpdDoga25hdmVyeSBjYW5ub3QsPC9MSU5FPgotPExJTkU+c3VyZSwgaGlkZSBoaW1zZWxmIGluIHN1Y2ggcmV2ZXJlbmNlLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPkhlIGhhdGggdGEnZW4gdGhlIGluZmVjdGlvbjogaG9sZCBpdCB1cC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPkhhdGggc2hlIG1hZGUgaGVyIGFmZmVjdGlvbiBrbm93biB0byBCZW5lZGljaz88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5ObzsgYW5kIHN3ZWFycyBzaGUgbmV2ZXIgd2lsbDogdGhhdCdzIGhlciB0b3JtZW50LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPidUaXMgdHJ1ZSwgaW5kZWVkOyBzbyB5b3VyIGRhdWdodGVyIHNheXM6ICdTaGFsbDwvTElORT4KLTxMSU5FPkksJyBzYXlzIHNoZSwgJ3RoYXQgaGF2ZSBzbyBvZnQgZW5jb3VudGVyZWQgaGltPC9MSU5FPgotPExJTkU+d2l0aCBzY29ybiwgd3JpdGUgdG8gaGltIHRoYXQgSSBsb3ZlIGhpbT8nPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+VGhpcyBzYXlzIHNoZSBub3cgd2hlbiBzaGUgaXMgYmVnaW5uaW5nIHRvIHdyaXRlIHRvPC9MSU5FPgotPExJTkU+aGltOyBmb3Igc2hlJ2xsIGJlIHVwIHR3ZW50eSB0aW1lcyBhIG5pZ2h0LCBhbmQ8L0xJTkU+Ci08TElORT50aGVyZSB3aWxsIHNoZSBzaXQgaW4gaGVyIHNtb2NrIHRpbGwgc2hlIGhhdmUgd3JpdCBhPC9MSU5FPgotPExJTkU+c2hlZXQgb2YgcGFwZXI6IG15IGRhdWdodGVyIHRlbGxzIHVzIGFsbC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5Ob3cgeW91IHRhbGsgb2YgYSBzaGVldCBvZiBwYXBlciwgSSByZW1lbWJlciBhPC9MSU5FPgotPExJTkU+cHJldHR5IGplc3QgeW91ciBkYXVnaHRlciB0b2xkIHVzIG9mLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPk8sIHdoZW4gc2hlIGhhZCB3cml0IGl0IGFuZCB3YXMgcmVhZGluZyBpdCBvdmVyLCBzaGU8L0xJTkU+Ci08TElORT5mb3VuZCBCZW5lZGljayBhbmQgQmVhdHJpY2UgYmV0d2VlbiB0aGUgc2hlZXQ/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+VGhhdC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5PLCBzaGUgdG9yZSB0aGUgbGV0dGVyIGludG8gYSB0aG91c2FuZCBoYWxmcGVuY2U7PC9MSU5FPgotPExJTkU+cmFpbGVkIGF0IGhlcnNlbGYsIHRoYXQgc2hlIHNob3VsZCBiZSBzbyBpbW1vZGVzdDwvTElORT4KLTxMSU5FPnRvIHdyaXRlIHRvIG9uZSB0aGF0IHNoZSBrbmV3IHdvdWxkIGZsb3V0IGhlcjsgJ0k8L0xJTkU+Ci08TElORT5tZWFzdXJlIGhpbSwnIHNheXMgc2hlLCAnYnkgbXkgb3duIHNwaXJpdDsgZm9yIEk8L0xJTkU+Ci08TElORT5zaG91bGQgZmxvdXQgaGltLCBpZiBoZSB3cml0IHRvIG1lOyB5ZWEsIHRob3VnaCBJPC9MSU5FPgotPExJTkU+bG92ZSBoaW0sIEkgc2hvdWxkLic8L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5UaGVuIGRvd24gdXBvbiBoZXIga25lZXMgc2hlIGZhbGxzLCB3ZWVwcywgc29icyw8L0xJTkU+Ci08TElORT5iZWF0cyBoZXIgaGVhcnQsIHRlYXJzIGhlciBoYWlyLCBwcmF5cywgY3Vyc2VzOyAnTzwvTElORT4KLTxMSU5FPnN3ZWV0IEJlbmVkaWNrISBHb2QgZ2l2ZSBtZSBwYXRpZW5jZSEnPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+U2hlIGRvdGggaW5kZWVkOyBteSBkYXVnaHRlciBzYXlzIHNvOiBhbmQgdGhlPC9MSU5FPgotPExJTkU+ZWNzdGFzeSBoYXRoIHNvIG11Y2ggb3ZlcmJvcm5lIGhlciB0aGF0IG15IGRhdWdodGVyPC9MSU5FPgotPExJTkU+aXMgc29tZXRpbWUgYWZlYXJlZCBzaGUgd2lsbCBkbyBhIGRlc3BlcmF0ZSBvdXRyYWdlPC9MSU5FPgotPExJTkU+dG8gaGVyc2VsZjogaXQgaXMgdmVyeSB0cnVlLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+SXQgd2VyZSBnb29kIHRoYXQgQmVuZWRpY2sga25ldyBvZiBpdCBieSBzb21lPC9MSU5FPgotPExJTkU+b3RoZXIsIGlmIHNoZSB3aWxsIG5vdCBkaXNjb3ZlciBpdC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5UbyB3aGF0IGVuZD8gSGUgd291bGQgbWFrZSBidXQgYSBzcG9ydCBvZiBpdCBhbmQ8L0xJTkU+Ci08TElORT50b3JtZW50IHRoZSBwb29yIGxhZHkgd29yc2UuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5BbiBoZSBzaG91bGQsIGl0IHdlcmUgYW4gYWxtcyB0byBoYW5nIGhpbS4gU2hlJ3MgYW48L0xJTkU+Ci08TElORT5leGNlbGxlbnQgc3dlZXQgbGFkeTsgYW5kLCBvdXQgb2YgYWxsIHN1c3BpY2lvbiw8L0xJTkU+Ci08TElORT5zaGUgaXMgdmlydHVvdXMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+QW5kIHNoZSBpcyBleGNlZWRpbmcgd2lzZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPkluIGV2ZXJ5IHRoaW5nIGJ1dCBpbiBsb3ZpbmcgQmVuZWRpY2suPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+TywgbXkgbG9yZCwgd2lzZG9tIGFuZCBibG9vZCBjb21iYXRpbmcgaW4gc28gdGVuZGVyPC9MSU5FPgotPExJTkU+YSBib2R5LCB3ZSBoYXZlIHRlbiBwcm9vZnMgdG8gb25lIHRoYXQgYmxvb2QgaGF0aDwvTElORT4KLTxMSU5FPnRoZSB2aWN0b3J5LiBJIGFtIHNvcnJ5IGZvciBoZXIsIGFzIEkgaGF2ZSBqdXN0PC9MSU5FPgotPExJTkU+Y2F1c2UsIGJlaW5nIGhlciB1bmNsZSBhbmQgaGVyIGd1YXJkaWFuLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+SSB3b3VsZCBzaGUgaGFkIGJlc3Rvd2VkIHRoaXMgZG90YWdlIG9uIG1lOiBJIHdvdWxkPC9MSU5FPgotPExJTkU+aGF2ZSBkYWZmZWQgYWxsIG90aGVyIHJlc3BlY3RzIGFuZCBtYWRlIGhlciBoYWxmPC9MSU5FPgotPExJTkU+bXlzZWxmLiBJIHByYXkgeW91LCB0ZWxsIEJlbmVkaWNrIG9mIGl0LCBhbmQgaGVhcjwvTElORT4KLTxMSU5FPndoYXQgYScgd2lsbCBzYXkuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+V2VyZSBpdCBnb29kLCB0aGluayB5b3U/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+SGVybyB0aGlua3Mgc3VyZWx5IHNoZSB3aWxsIGRpZTsgZm9yIHNoZSBzYXlzIHNoZTwvTElORT4KLTxMSU5FPndpbGwgZGllLCBpZiBoZSBsb3ZlIGhlciBub3QsIGFuZCBzaGUgd2lsbCBkaWUsIGVyZTwvTElORT4KLTxMSU5FPnNoZSBtYWtlIGhlciBsb3ZlIGtub3duLCBhbmQgc2hlIHdpbGwgZGllLCBpZiBoZSB3b288L0xJTkU+Ci08TElORT5oZXIsIHJhdGhlciB0aGFuIHNoZSB3aWxsIGJhdGUgb25lIGJyZWF0aCBvZiBoZXI8L0xJTkU+Ci08TElORT5hY2N1c3RvbWVkIGNyb3NzbmVzcy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPlNoZSBkb3RoIHdlbGw6IGlmIHNoZSBzaG91bGQgbWFrZSB0ZW5kZXIgb2YgaGVyPC9MSU5FPgotPExJTkU+bG92ZSwgJ3RpcyB2ZXJ5IHBvc3NpYmxlIGhlJ2xsIHNjb3JuIGl0OyBmb3IgdGhlPC9MSU5FPgotPExJTkU+bWFuLCBhcyB5b3Uga25vdyBhbGwsIGhhdGggYSBjb250ZW1wdGlibGUgc3Bpcml0LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPkhlIGlzIGEgdmVyeSBwcm9wZXIgbWFuLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+SGUgaGF0aCBpbmRlZWQgYSBnb29kIG91dHdhcmQgaGFwcGluZXNzLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPkJlZm9yZSBHb2QhIGFuZCwgaW4gbXkgbWluZCwgdmVyeSB3aXNlLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+SGUgZG90aCBpbmRlZWQgc2hvdyBzb21lIHNwYXJrcyB0aGF0IGFyZSBsaWtlIHdpdC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5BbmQgSSB0YWtlIGhpbSB0byBiZSB2YWxpYW50LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+QXMgSGVjdG9yLCBJIGFzc3VyZSB5b3U6IGFuZCBpbiB0aGUgbWFuYWdpbmcgb2Y8L0xJTkU+Ci08TElORT5xdWFycmVscyB5b3UgbWF5IHNheSBoZSBpcyB3aXNlOyBmb3IgZWl0aGVyIGhlPC9MSU5FPgotPExJTkU+YXZvaWRzIHRoZW0gd2l0aCBncmVhdCBkaXNjcmV0aW9uLCBvciB1bmRlcnRha2VzPC9MSU5FPgotPExJTkU+dGhlbSB3aXRoIGEgbW9zdCBDaHJpc3RpYW4tbGlrZSBmZWFyLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPklmIGhlIGRvIGZlYXIgR29kLCBhJyBtdXN0IG5lY2Vzc2FyaWx5IGtlZXAgcGVhY2U6PC9MSU5FPgotPExJTkU+aWYgaGUgYnJlYWsgdGhlIHBlYWNlLCBoZSBvdWdodCB0byBlbnRlciBpbnRvIGE8L0xJTkU+Ci08TElORT5xdWFycmVsIHdpdGggZmVhciBhbmQgdHJlbWJsaW5nLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+QW5kIHNvIHdpbGwgaGUgZG87IGZvciB0aGUgbWFuIGRvdGggZmVhciBHb2QsPC9MSU5FPgotPExJTkU+aG93c29ldmVyIGl0IHNlZW1zIG5vdCBpbiBoaW0gYnkgc29tZSBsYXJnZSBqZXN0czwvTElORT4KLTxMSU5FPmhlIHdpbGwgbWFrZS4gV2VsbCBJIGFtIHNvcnJ5IGZvciB5b3VyIG5pZWNlLiBTaGFsbDwvTElORT4KLTxMSU5FPndlIGdvIHNlZWsgQmVuZWRpY2ssIGFuZCB0ZWxsIGhpbSBvZiBoZXIgbG92ZT88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5OZXZlciB0ZWxsIGhpbSwgbXkgbG9yZDogbGV0IGhlciB3ZWFyIGl0IG91dCB3aXRoPC9MSU5FPgotPExJTkU+Z29vZCBjb3Vuc2VsLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPk5heSwgdGhhdCdzIGltcG9zc2libGU6IHNoZSBtYXkgd2VhciBoZXIgaGVhcnQgb3V0IGZpcnN0LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+V2VsbCwgd2Ugd2lsbCBoZWFyIGZ1cnRoZXIgb2YgaXQgYnkgeW91ciBkYXVnaHRlcjo8L0xJTkU+Ci08TElORT5sZXQgaXQgY29vbCB0aGUgd2hpbGUuIEkgbG92ZSBCZW5lZGljayB3ZWxsOyBhbmQgSTwvTElORT4KLTxMSU5FPmNvdWxkIHdpc2ggaGUgd291bGQgbW9kZXN0bHkgZXhhbWluZSBoaW1zZWxmLCB0byBzZWU8L0xJTkU+Ci08TElORT5ob3cgbXVjaCBoZSBpcyB1bndvcnRoeSBzbyBnb29kIGEgbGFkeS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5NeSBsb3JkLCB3aWxsIHlvdSB3YWxrPyBkaW5uZXIgaXMgcmVhZHkuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+SWYgaGUgZG8gbm90IGRvdGUgb24gaGVyIHVwb24gdGhpcywgSSB3aWxsIG5ldmVyPC9MSU5FPgotPExJTkU+dHJ1c3QgbXkgZXhwZWN0YXRpb24uPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5MZXQgdGhlcmUgYmUgdGhlIHNhbWUgbmV0IHNwcmVhZCBmb3IgaGVyOyBhbmQgdGhhdDwvTElORT4KLTxMSU5FPm11c3QgeW91ciBkYXVnaHRlciBhbmQgaGVyIGdlbnRsZXdvbWVuIGNhcnJ5LiBUaGU8L0xJTkU+Ci08TElORT5zcG9ydCB3aWxsIGJlLCB3aGVuIHRoZXkgaG9sZCBvbmUgYW4gb3BpbmlvbiBvZjwvTElORT4KLTxMSU5FPmFub3RoZXIncyBkb3RhZ2UsIGFuZCBubyBzdWNoIG1hdHRlcjogdGhhdCdzIHRoZTwvTElORT4KLTxMSU5FPnNjZW5lIHRoYXQgSSB3b3VsZCBzZWUsIHdoaWNoIHdpbGwgYmUgbWVyZWx5IGE8L0xJTkU+Ci08TElORT5kdW1iLXNob3cuIExldCB1cyBzZW5kIGhlciB0byBjYWxsIGhpbSBpbiB0byBkaW5uZXIuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLQotPFNUQUdFRElSPkV4ZXVudCBET04gUEVEUk8sIENMQVVESU8sIGFuZCBMRU9OQVRPPC9TVEFHRURJUj4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+PFNUQUdFRElSPkNvbWluZyBmb3J3YXJkPC9TVEFHRURJUj4gIFRoaXMgY2FuIGJlIG5vIHRyaWNrOiB0aGU8L0xJTkU+Ci08TElORT5jb25mZXJlbmNlIHdhcyBzYWRseSBib3JuZS4gVGhleSBoYXZlIHRoZSB0cnV0aCBvZjwvTElORT4KLTxMSU5FPnRoaXMgZnJvbSBIZXJvLiBUaGV5IHNlZW0gdG8gcGl0eSB0aGUgbGFkeTogaXQ8L0xJTkU+Ci08TElORT5zZWVtcyBoZXIgYWZmZWN0aW9ucyBoYXZlIHRoZWlyIGZ1bGwgYmVudC4gTG92ZSBtZSE8L0xJTkU+Ci08TElORT53aHksIGl0IG11c3QgYmUgcmVxdWl0ZWQuIEkgaGVhciBob3cgSSBhbSBjZW5zdXJlZDo8L0xJTkU+Ci08TElORT50aGV5IHNheSBJIHdpbGwgYmVhciBteXNlbGYgcHJvdWRseSwgaWYgSSBwZXJjZWl2ZTwvTElORT4KLTxMSU5FPnRoZSBsb3ZlIGNvbWUgZnJvbSBoZXI7IHRoZXkgc2F5IHRvbyB0aGF0IHNoZSB3aWxsPC9MSU5FPgotPExJTkU+cmF0aGVyIGRpZSB0aGFuIGdpdmUgYW55IHNpZ24gb2YgYWZmZWN0aW9uLiBJIGRpZDwvTElORT4KLTxMSU5FPm5ldmVyIHRoaW5rIHRvIG1hcnJ5OiBJIG11c3Qgbm90IHNlZW0gcHJvdWQ6IGhhcHB5PC9MSU5FPgotPExJTkU+YXJlIHRoZXkgdGhhdCBoZWFyIHRoZWlyIGRldHJhY3Rpb25zIGFuZCBjYW4gcHV0PC9MSU5FPgotPExJTkU+dGhlbSB0byBtZW5kaW5nLiBUaGV5IHNheSB0aGUgbGFkeSBpcyBmYWlyOyAndGlzIGE8L0xJTkU+Ci08TElORT50cnV0aCwgSSBjYW4gYmVhciB0aGVtIHdpdG5lc3M7IGFuZCB2aXJ0dW91czsgJ3RpczwvTElORT4KLTxMSU5FPnNvLCBJIGNhbm5vdCByZXByb3ZlIGl0OyBhbmQgd2lzZSwgYnV0IGZvciBsb3Zpbmc8L0xJTkU+Ci08TElORT5tZTsgYnkgbXkgdHJvdGgsIGl0IGlzIG5vIGFkZGl0aW9uIHRvIGhlciB3aXQsIG5vcjwvTElORT4KLTxMSU5FPm5vIGdyZWF0IGFyZ3VtZW50IG9mIGhlciBmb2xseSwgZm9yIEkgd2lsbCBiZTwvTElORT4KLTxMSU5FPmhvcnJpYmx5IGluIGxvdmUgd2l0aCBoZXIuIEkgbWF5IGNoYW5jZSBoYXZlIHNvbWU8L0xJTkU+Ci08TElORT5vZGQgcXVpcmtzIGFuZCByZW1uYW50cyBvZiB3aXQgYnJva2VuIG9uIG1lLDwvTElORT4KLTxMSU5FPmJlY2F1c2UgSSBoYXZlIHJhaWxlZCBzbyBsb25nIGFnYWluc3QgbWFycmlhZ2U6IGJ1dDwvTElORT4KLTxMSU5FPmRvdGggbm90IHRoZSBhcHBldGl0ZSBhbHRlcj8gYSBtYW4gbG92ZXMgdGhlIG1lYXQ8L0xJTkU+Ci08TElORT5pbiBoaXMgeW91dGggdGhhdCBoZSBjYW5ub3QgZW5kdXJlIGluIGhpcyBhZ2UuPC9MSU5FPgotPExJTkU+U2hhbGwgcXVpcHMgYW5kIHNlbnRlbmNlcyBhbmQgdGhlc2UgcGFwZXIgYnVsbGV0cyBvZjwvTElORT4KLTxMSU5FPnRoZSBicmFpbiBhd2UgYSBtYW4gZnJvbSB0aGUgY2FyZWVyIG9mIGhpcyBodW1vdXI/PC9MSU5FPgotPExJTkU+Tm8sIHRoZSB3b3JsZCBtdXN0IGJlIHBlb3BsZWQuIFdoZW4gSSBzYWlkIEkgd291bGQ8L0xJTkU+Ci08TElORT5kaWUgYSBiYWNoZWxvciwgSSBkaWQgbm90IHRoaW5rIEkgc2hvdWxkIGxpdmUgdGlsbCBJPC9MSU5FPgotPExJTkU+d2VyZSBtYXJyaWVkLiBIZXJlIGNvbWVzIEJlYXRyaWNlLiBCeSB0aGlzIGRheSE8L0xJTkU+Ci08TElORT5zaGUncyBhIGZhaXIgbGFkeTogSSBkbyBzcHkgc29tZSBtYXJrcyBvZiBsb3ZlIGluPC9MSU5FPgotPExJTkU+aGVyLjwvTElORT4KLTwvU1BFRUNIPgotCi0KLTxTVEFHRURJUj5FbnRlciBCRUFUUklDRTwvU1RBR0VESVI+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPkFnYWluc3QgbXkgd2lsbCBJIGFtIHNlbnQgdG8gYmlkIHlvdSBjb21lIGluIHRvIGRpbm5lci48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+RmFpciBCZWF0cmljZSwgSSB0aGFuayB5b3UgZm9yIHlvdXIgcGFpbnMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPkkgdG9vayBubyBtb3JlIHBhaW5zIGZvciB0aG9zZSB0aGFua3MgdGhhbiB5b3UgdGFrZTwvTElORT4KLTxMSU5FPnBhaW5zIHRvIHRoYW5rIG1lOiBpZiBpdCBoYWQgYmVlbiBwYWluZnVsLCBJIHdvdWxkPC9MSU5FPgotPExJTkU+bm90IGhhdmUgY29tZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+WW91IHRha2UgcGxlYXN1cmUgdGhlbiBpbiB0aGUgbWVzc2FnZT88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+WWVhLCBqdXN0IHNvIG11Y2ggYXMgeW91IG1heSB0YWtlIHVwb24gYSBrbmlmZSdzPC9MSU5FPgotPExJTkU+cG9pbnQgYW5kIGNob2tlIGEgZGF3IHdpdGhhbC4gWW91IGhhdmUgbm8gc3RvbWFjaCw8L0xJTkU+Ci08TElORT5zaWduaW9yOiBmYXJlIHlvdSB3ZWxsLjwvTElORT4KLTwvU1BFRUNIPgotCi0KLTxTVEFHRURJUj5FeGl0PC9TVEFHRURJUj4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+SGEhICdBZ2FpbnN0IG15IHdpbGwgSSBhbSBzZW50IHRvIGJpZCB5b3UgY29tZSBpbjwvTElORT4KLTxMSU5FPnRvIGRpbm5lcjsnIHRoZXJlJ3MgYSBkb3VibGUgbWVhbmluZyBpbiB0aGF0ICdJIHRvb2s8L0xJTkU+Ci08TElORT5ubyBtb3JlIHBhaW5zIGZvciB0aG9zZSB0aGFua3MgdGhhbiB5b3UgdG9vayBwYWluczwvTElORT4KLTxMSU5FPnRvIHRoYW5rIG1lLicgdGhhdCdzIGFzIG11Y2ggYXMgdG8gc2F5LCBBbnkgcGFpbnM8L0xJTkU+Ci08TElORT50aGF0IEkgdGFrZSBmb3IgeW91IGlzIGFzIGVhc3kgYXMgdGhhbmtzLiBJZiBJIGRvPC9MSU5FPgotPExJTkU+bm90IHRha2UgcGl0eSBvZiBoZXIsIEkgYW0gYSB2aWxsYWluOyBpZiBJIGRvIG5vdDwvTElORT4KLTxMSU5FPmxvdmUgaGVyLCBJIGFtIGEgSmV3LiBJIHdpbGwgZ28gZ2V0IGhlciBwaWN0dXJlLjwvTElORT4KLTwvU1BFRUNIPgotCi0KLTxTVEFHRURJUj5FeGl0PC9TVEFHRURJUj4KLTwvU0NFTkU+Ci0KLTwvQUNUPgotCi08QUNUPjxUSVRMRT5BQ1QgSUlJPC9USVRMRT4KLQotPFNDRU5FPjxUSVRMRT5TQ0VORSBJLiAgTEVPTkFUTydTIGdhcmRlbi48L1RJVExFPgotPFNUQUdFRElSPkVudGVyIEhFUk8sIE1BUkdBUkVULCBhbmQgVVJTVUxBPC9TVEFHRURJUj4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkhFUk88L1NQRUFLRVI+Ci08TElORT5Hb29kIE1hcmdhcmV0LCBydW4gdGhlZSB0byB0aGUgcGFybG9yOzwvTElORT4KLTxMSU5FPlRoZXJlIHNoYWx0IHRob3UgZmluZCBteSBjb3VzaW4gQmVhdHJpY2U8L0xJTkU+Ci08TElORT5Qcm9wb3Npbmcgd2l0aCB0aGUgcHJpbmNlIGFuZCBDbGF1ZGlvOjwvTElORT4KLTxMSU5FPldoaXNwZXIgaGVyIGVhciBhbmQgdGVsbCBoZXIsIEkgYW5kIFVyc3VsYTwvTElORT4KLTxMSU5FPldhbGsgaW4gdGhlIG9yY2hhcmQgYW5kIG91ciB3aG9sZSBkaXNjb3Vyc2U8L0xJTkU+Ci08TElORT5JcyBhbGwgb2YgaGVyOyBzYXkgdGhhdCB0aG91IG92ZXJoZWFyZCdzdCB1czs8L0xJTkU+Ci08TElORT5BbmQgYmlkIGhlciBzdGVhbCBpbnRvIHRoZSBwbGVhY2hlZCBib3dlciw8L0xJTkU+Ci08TElORT5XaGVyZSBob25leXN1Y2tsZXMsIHJpcGVuJ2QgYnkgdGhlIHN1biw8L0xJTkU+Ci08TElORT5Gb3JiaWQgdGhlIHN1biB0byBlbnRlciwgbGlrZSBmYXZvdXJpdGVzLDwvTElORT4KLTxMSU5FPk1hZGUgcHJvdWQgYnkgcHJpbmNlcywgdGhhdCBhZHZhbmNlIHRoZWlyIHByaWRlPC9MSU5FPgotPExJTkU+QWdhaW5zdCB0aGF0IHBvd2VyIHRoYXQgYnJlZCBpdDogdGhlcmUgd2lsbCBzaGUgaGlkZSBoZXIsPC9MSU5FPgotPExJTkU+VG8gbGlzdGVuIG91ciBwdXJwb3NlLiAgVGhpcyBpcyB0aHkgb2ZmaWNlOzwvTElORT4KLTxMSU5FPkJlYXIgdGhlZSB3ZWxsIGluIGl0IGFuZCBsZWF2ZSB1cyBhbG9uZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPk1BUkdBUkVUPC9TUEVBS0VSPgotPExJTkU+SSdsbCBtYWtlIGhlciBjb21lLCBJIHdhcnJhbnQgeW91LCBwcmVzZW50bHkuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLQotPFNUQUdFRElSPkV4aXQ8L1NUQUdFRElSPgotCi08U1BFRUNIPgotPFNQRUFLRVI+SEVSTzwvU1BFQUtFUj4KLTxMSU5FPk5vdywgVXJzdWxhLCB3aGVuIEJlYXRyaWNlIGRvdGggY29tZSw8L0xJTkU+Ci08TElORT5BcyB3ZSBkbyB0cmFjZSB0aGlzIGFsbGV5IHVwIGFuZCBkb3duLDwvTElORT4KLTxMSU5FPk91ciB0YWxrIG11c3Qgb25seSBiZSBvZiBCZW5lZGljay48L0xJTkU+Ci08TElORT5XaGVuIEkgZG8gbmFtZSBoaW0sIGxldCBpdCBiZSB0aHkgcGFydDwvTElORT4KLTxMSU5FPlRvIHByYWlzZSBoaW0gbW9yZSB0aGFuIGV2ZXIgbWFuIGRpZCBtZXJpdDo8L0xJTkU+Ci08TElORT5NeSB0YWxrIHRvIHRoZWUgbXVzdCBiZSBob3cgQmVuZWRpY2s8L0xJTkU+Ci08TElORT5JcyBzaWNrIGluIGxvdmUgd2l0aCBCZWF0cmljZS4gT2YgdGhpcyBtYXR0ZXI8L0xJTkU+Ci08TElORT5JcyBsaXR0bGUgQ3VwaWQncyBjcmFmdHkgYXJyb3cgbWFkZSw8L0xJTkU+Ci08TElORT5UaGF0IG9ubHkgd291bmRzIGJ5IGhlYXJzYXkuPC9MSU5FPgotPFNUQUdFRElSPkVudGVyIEJFQVRSSUNFLCBiZWhpbmQ8L1NUQUdFRElSPgotPExJTkU+Tm93IGJlZ2luOzwvTElORT4KLTxMSU5FPkZvciBsb29rIHdoZXJlIEJlYXRyaWNlLCBsaWtlIGEgbGFwd2luZywgcnVuczwvTElORT4KLTxMSU5FPkNsb3NlIGJ5IHRoZSBncm91bmQsIHRvIGhlYXIgb3VyIGNvbmZlcmVuY2UuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5VUlNVTEE8L1NQRUFLRVI+Ci08TElORT5UaGUgcGxlYXNhbnQnc3QgYW5nbGluZyBpcyB0byBzZWUgdGhlIGZpc2g8L0xJTkU+Ci08TElORT5DdXQgd2l0aCBoZXIgZ29sZGVuIG9hcnMgdGhlIHNpbHZlciBzdHJlYW0sPC9MSU5FPgotPExJTkU+QW5kIGdyZWVkaWx5IGRldm91ciB0aGUgdHJlYWNoZXJvdXMgYmFpdDo8L0xJTkU+Ci08TElORT5TbyBhbmdsZSB3ZSBmb3IgQmVhdHJpY2U7IHdobyBldmVuIG5vdzwvTElORT4KLTxMSU5FPklzIGNvdWNoZWQgaW4gdGhlIHdvb2RiaW5lIGNvdmVydHVyZS48L0xJTkU+Ci08TElORT5GZWFyIHlvdSBub3QgbXkgcGFydCBvZiB0aGUgZGlhbG9ndWUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5IRVJPPC9TUEVBS0VSPgotPExJTkU+VGhlbiBnbyB3ZSBuZWFyIGhlciwgdGhhdCBoZXIgZWFyIGxvc2Ugbm90aGluZzwvTElORT4KLTxMSU5FPk9mIHRoZSBmYWxzZSBzd2VldCBiYWl0IHRoYXQgd2UgbGF5IGZvciBpdC48L0xJTkU+Ci08U1RBR0VESVI+QXBwcm9hY2hpbmcgdGhlIGJvd2VyPC9TVEFHRURJUj4KLTxMSU5FPk5vLCB0cnVseSwgVXJzdWxhLCBzaGUgaXMgdG9vIGRpc2RhaW5mdWw7PC9MSU5FPgotPExJTkU+SSBrbm93IGhlciBzcGlyaXRzIGFyZSBhcyBjb3kgYW5kIHdpbGQ8L0xJTkU+Ci08TElORT5BcyBoYWdnZXJkcyBvZiB0aGUgcm9jay48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPlVSU1VMQTwvU1BFQUtFUj4KLTxMSU5FPkJ1dCBhcmUgeW91IHN1cmU8L0xJTkU+Ci08TElORT5UaGF0IEJlbmVkaWNrIGxvdmVzIEJlYXRyaWNlIHNvIGVudGlyZWx5PzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+SEVSTzwvU1BFQUtFUj4KLTxMSU5FPlNvIHNheXMgdGhlIHByaW5jZSBhbmQgbXkgbmV3LXRyb3RoZWQgbG9yZC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPlVSU1VMQTwvU1BFQUtFUj4KLTxMSU5FPkFuZCBkaWQgdGhleSBiaWQgeW91IHRlbGwgaGVyIG9mIGl0LCBtYWRhbT88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkhFUk88L1NQRUFLRVI+Ci08TElORT5UaGV5IGRpZCBlbnRyZWF0IG1lIHRvIGFjcXVhaW50IGhlciBvZiBpdDs8L0xJTkU+Ci08TElORT5CdXQgSSBwZXJzdWFkZWQgdGhlbSwgaWYgdGhleSBsb3ZlZCBCZW5lZGljayw8L0xJTkU+Ci08TElORT5UbyB3aXNoIGhpbSB3cmVzdGxlIHdpdGggYWZmZWN0aW9uLDwvTElORT4KLTxMSU5FPkFuZCBuZXZlciB0byBsZXQgQmVhdHJpY2Uga25vdyBvZiBpdC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPlVSU1VMQTwvU1BFQUtFUj4KLTxMSU5FPldoeSBkaWQgeW91IHNvPyBEb3RoIG5vdCB0aGUgZ2VudGxlbWFuPC9MSU5FPgotPExJTkU+RGVzZXJ2ZSBhcyBmdWxsIGFzIGZvcnR1bmF0ZSBhIGJlZDwvTElORT4KLTxMSU5FPkFzIGV2ZXIgQmVhdHJpY2Ugc2hhbGwgY291Y2ggdXBvbj88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkhFUk88L1NQRUFLRVI+Ci08TElORT5PIGdvZCBvZiBsb3ZlISBJIGtub3cgaGUgZG90aCBkZXNlcnZlPC9MSU5FPgotPExJTkU+QXMgbXVjaCBhcyBtYXkgYmUgeWllbGRlZCB0byBhIG1hbjo8L0xJTkU+Ci08TElORT5CdXQgTmF0dXJlIG5ldmVyIGZyYW1lZCBhIHdvbWFuJ3MgaGVhcnQ8L0xJTkU+Ci08TElORT5PZiBwcm91ZGVyIHN0dWZmIHRoYW4gdGhhdCBvZiBCZWF0cmljZTs8L0xJTkU+Ci08TElORT5EaXNkYWluIGFuZCBzY29ybiByaWRlIHNwYXJrbGluZyBpbiBoZXIgZXllcyw8L0xJTkU+Ci08TElORT5NaXNwcmlzaW5nIHdoYXQgdGhleSBsb29rIG9uLCBhbmQgaGVyIHdpdDwvTElORT4KLTxMSU5FPlZhbHVlcyBpdHNlbGYgc28gaGlnaGx5IHRoYXQgdG8gaGVyPC9MSU5FPgotPExJTkU+QWxsIG1hdHRlciBlbHNlIHNlZW1zIHdlYWs6IHNoZSBjYW5ub3QgbG92ZSw8L0xJTkU+Ci08TElORT5Ob3IgdGFrZSBubyBzaGFwZSBub3IgcHJvamVjdCBvZiBhZmZlY3Rpb24sPC9MSU5FPgotPExJTkU+U2hlIGlzIHNvIHNlbGYtZW5kZWFyZWQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5VUlNVTEE8L1NQRUFLRVI+Ci08TElORT5TdXJlLCBJIHRoaW5rIHNvOzwvTElORT4KLTxMSU5FPkFuZCB0aGVyZWZvcmUgY2VydGFpbmx5IGl0IHdlcmUgbm90IGdvb2Q8L0xJTkU+Ci08TElORT5TaGUga25ldyBoaXMgbG92ZSwgbGVzdCBzaGUgbWFrZSBzcG9ydCBhdCBpdC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkhFUk88L1NQRUFLRVI+Ci08TElORT5XaHksIHlvdSBzcGVhayB0cnV0aC4gSSBuZXZlciB5ZXQgc2F3IG1hbiw8L0xJTkU+Ci08TElORT5Ib3cgd2lzZSwgaG93IG5vYmxlLCB5b3VuZywgaG93IHJhcmVseSBmZWF0dXJlZCw8L0xJTkU+Ci08TElORT5CdXQgc2hlIHdvdWxkIHNwZWxsIGhpbSBiYWNrd2FyZDogaWYgZmFpci1mYWNlZCw8L0xJTkU+Ci08TElORT5TaGUgd291bGQgc3dlYXIgdGhlIGdlbnRsZW1hbiBzaG91bGQgYmUgaGVyIHNpc3Rlcjs8L0xJTkU+Ci08TElORT5JZiBibGFjaywgd2h5LCBOYXR1cmUsIGRyYXdpbmcgb2YgYW4gYW50aXF1ZSw8L0xJTkU+Ci08TElORT5NYWRlIGEgZm91bCBibG90OyBpZiB0YWxsLCBhIGxhbmNlIGlsbC1oZWFkZWQ7PC9MSU5FPgotPExJTkU+SWYgbG93LCBhbiBhZ2F0ZSB2ZXJ5IHZpbGVseSBjdXQ7PC9MSU5FPgotPExJTkU+SWYgc3BlYWtpbmcsIHdoeSwgYSB2YW5lIGJsb3duIHdpdGggYWxsIHdpbmRzOzwvTElORT4KLTxMSU5FPklmIHNpbGVudCwgd2h5LCBhIGJsb2NrIG1vdmVkIHdpdGggbm9uZS48L0xJTkU+Ci08TElORT5TbyB0dXJucyBzaGUgZXZlcnkgbWFuIHRoZSB3cm9uZyBzaWRlIG91dDwvTElORT4KLTxMSU5FPkFuZCBuZXZlciBnaXZlcyB0byB0cnV0aCBhbmQgdmlydHVlIHRoYXQ8L0xJTkU+Ci08TElORT5XaGljaCBzaW1wbGVuZXNzIGFuZCBtZXJpdCBwdXJjaGFzZXRoLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+VVJTVUxBPC9TUEVBS0VSPgotPExJTkU+U3VyZSwgc3VyZSwgc3VjaCBjYXJwaW5nIGlzIG5vdCBjb21tZW5kYWJsZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkhFUk88L1NQRUFLRVI+Ci08TElORT5Obywgbm90IHRvIGJlIHNvIG9kZCBhbmQgZnJvbSBhbGwgZmFzaGlvbnM8L0xJTkU+Ci08TElORT5BcyBCZWF0cmljZSBpcywgY2Fubm90IGJlIGNvbW1lbmRhYmxlOjwvTElORT4KLTxMSU5FPkJ1dCB3aG8gZGFyZSB0ZWxsIGhlciBzbz8gSWYgSSBzaG91bGQgc3BlYWssPC9MSU5FPgotPExJTkU+U2hlIHdvdWxkIG1vY2sgbWUgaW50byBhaXI7IE8sIHNoZSB3b3VsZCBsYXVnaCBtZTwvTElORT4KLTxMSU5FPk91dCBvZiBteXNlbGYsIHByZXNzIG1lIHRvIGRlYXRoIHdpdGggd2l0LjwvTElORT4KLTxMSU5FPlRoZXJlZm9yZSBsZXQgQmVuZWRpY2ssIGxpa2UgY292ZXInZCBmaXJlLDwvTElORT4KLTxMSU5FPkNvbnN1bWUgYXdheSBpbiBzaWdocywgd2FzdGUgaW53YXJkbHk6PC9MSU5FPgotPExJTkU+SXQgd2VyZSBhIGJldHRlciBkZWF0aCB0aGFuIGRpZSB3aXRoIG1vY2tzLDwvTElORT4KLTxMSU5FPldoaWNoIGlzIGFzIGJhZCBhcyBkaWUgd2l0aCB0aWNrbGluZy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPlVSU1VMQTwvU1BFQUtFUj4KLTxMSU5FPllldCB0ZWxsIGhlciBvZiBpdDogaGVhciB3aGF0IHNoZSB3aWxsIHNheS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkhFUk88L1NQRUFLRVI+Ci08TElORT5ObzsgcmF0aGVyIEkgd2lsbCBnbyB0byBCZW5lZGljazwvTElORT4KLTxMSU5FPkFuZCBjb3Vuc2VsIGhpbSB0byBmaWdodCBhZ2FpbnN0IGhpcyBwYXNzaW9uLjwvTElORT4KLTxMSU5FPkFuZCwgdHJ1bHksIEknbGwgZGV2aXNlIHNvbWUgaG9uZXN0IHNsYW5kZXJzPC9MSU5FPgotPExJTkU+VG8gc3RhaW4gbXkgY291c2luIHdpdGg6IG9uZSBkb3RoIG5vdCBrbm93PC9MSU5FPgotPExJTkU+SG93IG11Y2ggYW4gaWxsIHdvcmQgbWF5IGVtcG9pc29uIGxpa2luZy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPlVSU1VMQTwvU1BFQUtFUj4KLTxMSU5FPk8sIGRvIG5vdCBkbyB5b3VyIGNvdXNpbiBzdWNoIGEgd3JvbmcuPC9MSU5FPgotPExJTkU+U2hlIGNhbm5vdCBiZSBzbyBtdWNoIHdpdGhvdXQgdHJ1ZSBqdWRnbWVudC0tPC9MSU5FPgotPExJTkU+SGF2aW5nIHNvIHN3aWZ0IGFuZCBleGNlbGxlbnQgYSB3aXQ8L0xJTkU+Ci08TElORT5BcyBzaGUgaXMgcHJpemVkIHRvIGhhdmUtLWFzIHRvIHJlZnVzZTwvTElORT4KLTxMSU5FPlNvIHJhcmUgYSBnZW50bGVtYW4gYXMgU2lnbmlvciBCZW5lZGljay48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkhFUk88L1NQRUFLRVI+Ci08TElORT5IZSBpcyB0aGUgb25seSBtYW4gb2YgSXRhbHkuPC9MSU5FPgotPExJTkU+QWx3YXlzIGV4Y2VwdGVkIG15IGRlYXIgQ2xhdWRpby48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPlVSU1VMQTwvU1BFQUtFUj4KLTxMSU5FPkkgcHJheSB5b3UsIGJlIG5vdCBhbmdyeSB3aXRoIG1lLCBtYWRhbSw8L0xJTkU+Ci08TElORT5TcGVha2luZyBteSBmYW5jeTogU2lnbmlvciBCZW5lZGljayw8L0xJTkU+Ci08TElORT5Gb3Igc2hhcGUsIGZvciBiZWFyaW5nLCBhcmd1bWVudCBhbmQgdmFsb3VyLDwvTElORT4KLTxMSU5FPkdvZXMgZm9yZW1vc3QgaW4gcmVwb3J0IHRocm91Z2ggSXRhbHkuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5IRVJPPC9TUEVBS0VSPgotPExJTkU+SW5kZWVkLCBoZSBoYXRoIGFuIGV4Y2VsbGVudCBnb29kIG5hbWUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5VUlNVTEE8L1NQRUFLRVI+Ci08TElORT5IaXMgZXhjZWxsZW5jZSBkaWQgZWFybiBpdCwgZXJlIGhlIGhhZCBpdC48L0xJTkU+Ci08TElORT5XaGVuIGFyZSB5b3UgbWFycmllZCwgbWFkYW0/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5IRVJPPC9TUEVBS0VSPgotPExJTkU+V2h5LCBldmVyeSBkYXksIHRvLW1vcnJvdy4gQ29tZSwgZ28gaW46PC9MSU5FPgotPExJTkU+SSdsbCBzaG93IHRoZWUgc29tZSBhdHRpcmVzLCBhbmQgaGF2ZSB0aHkgY291bnNlbDwvTElORT4KLTxMSU5FPldoaWNoIGlzIHRoZSBiZXN0IHRvIGZ1cm5pc2ggbWUgdG8tbW9ycm93LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+VVJTVUxBPC9TUEVBS0VSPgotPExJTkU+U2hlJ3MgbGltZWQsIEkgd2FycmFudCB5b3U6IHdlIGhhdmUgY2F1Z2h0IGhlciwgbWFkYW0uPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5IRVJPPC9TUEVBS0VSPgotPExJTkU+SWYgaXQgcHJvdmVzIHNvLCB0aGVuIGxvdmluZyBnb2VzIGJ5IGhhcHM6PC9MSU5FPgotPExJTkU+U29tZSBDdXBpZCBraWxscyB3aXRoIGFycm93cywgc29tZSB3aXRoIHRyYXBzLjwvTElORT4KLTwvU1BFRUNIPgotCi0KLTxTVEFHRURJUj5FeGV1bnQgSEVSTyBhbmQgVVJTVUxBPC9TVEFHRURJUj4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+PFNUQUdFRElSPkNvbWluZyBmb3J3YXJkPC9TVEFHRURJUj48L0xJTkU+Ci08TElORT5XaGF0IGZpcmUgaXMgaW4gbWluZSBlYXJzPyBDYW4gdGhpcyBiZSB0cnVlPzwvTElORT4KLTxMSU5FPlN0YW5kIEkgY29uZGVtbidkIGZvciBwcmlkZSBhbmQgc2Nvcm4gc28gbXVjaD88L0xJTkU+Ci08TElORT5Db250ZW1wdCwgZmFyZXdlbGwhIGFuZCBtYWlkZW4gcHJpZGUsIGFkaWV1ITwvTElORT4KLTxMSU5FPk5vIGdsb3J5IGxpdmVzIGJlaGluZCB0aGUgYmFjayBvZiBzdWNoLjwvTElORT4KLTxMSU5FPkFuZCwgQmVuZWRpY2ssIGxvdmUgb247IEkgd2lsbCByZXF1aXRlIHRoZWUsPC9MSU5FPgotPExJTkU+VGFtaW5nIG15IHdpbGQgaGVhcnQgdG8gdGh5IGxvdmluZyBoYW5kOjwvTElORT4KLTxMSU5FPklmIHRob3UgZG9zdCBsb3ZlLCBteSBraW5kbmVzcyBzaGFsbCBpbmNpdGUgdGhlZTwvTElORT4KLTxMSU5FPlRvIGJpbmQgb3VyIGxvdmVzIHVwIGluIGEgaG9seSBiYW5kOzwvTElORT4KLTxMSU5FPkZvciBvdGhlcnMgc2F5IHRob3UgZG9zdCBkZXNlcnZlLCBhbmQgSTwvTElORT4KLTxMSU5FPkJlbGlldmUgaXQgYmV0dGVyIHRoYW4gcmVwb3J0aW5nbHkuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLQotPFNUQUdFRElSPkV4aXQ8L1NUQUdFRElSPgotPC9TQ0VORT4KLQotPFNDRU5FPjxUSVRMRT5TQ0VORSBJSS4gIEEgcm9vbSBpbiBMRU9OQVRPJ1MgaG91c2U8L1RJVExFPgotPFNUQUdFRElSPkVudGVyIERPTiBQRURSTywgQ0xBVURJTywgQkVORURJQ0ssIGFuZCBMRU9OQVRPPC9TVEFHRURJUj4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPkkgZG8gYnV0IHN0YXkgdGlsbCB5b3VyIG1hcnJpYWdlIGJlIGNvbnN1bW1hdGUsIGFuZDwvTElORT4KLTxMSU5FPnRoZW4gZ28gSSB0b3dhcmQgQXJyYWdvbi48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5JJ2xsIGJyaW5nIHlvdSB0aGl0aGVyLCBteSBsb3JkLCBpZiB5b3UnbGw8L0xJTkU+Ci08TElORT52b3VjaHNhZmUgbWUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5OYXksIHRoYXQgd291bGQgYmUgYXMgZ3JlYXQgYSBzb2lsIGluIHRoZSBuZXcgZ2xvc3M8L0xJTkU+Ci08TElORT5vZiB5b3VyIG1hcnJpYWdlIGFzIHRvIHNob3cgYSBjaGlsZCBoaXMgbmV3IGNvYXQ8L0xJTkU+Ci08TElORT5hbmQgZm9yYmlkIGhpbSB0byB3ZWFyIGl0LiBJIHdpbGwgb25seSBiZSBib2xkPC9MSU5FPgotPExJTkU+d2l0aCBCZW5lZGljayBmb3IgaGlzIGNvbXBhbnk7IGZvciwgZnJvbSB0aGUgY3Jvd248L0xJTkU+Ci08TElORT5vZiBoaXMgaGVhZCB0byB0aGUgc29sZSBvZiBoaXMgZm9vdCwgaGUgaXMgYWxsPC9MSU5FPgotPExJTkU+bWlydGg6IGhlIGhhdGggdHdpY2Ugb3IgdGhyaWNlIGN1dCBDdXBpZCdzPC9MSU5FPgotPExJTkU+Ym93LXN0cmluZyBhbmQgdGhlIGxpdHRsZSBoYW5nbWFuIGRhcmUgbm90IHNob290IGF0PC9MSU5FPgotPExJTkU+aGltOyBoZSBoYXRoIGEgaGVhcnQgYXMgc291bmQgYXMgYSBiZWxsIGFuZCBoaXM8L0xJTkU+Ci08TElORT50b25ndWUgaXMgdGhlIGNsYXBwZXIsIGZvciB3aGF0IGhpcyBoZWFydCB0aGlua3MgaGlzPC9MSU5FPgotPExJTkU+dG9uZ3VlIHNwZWFrcy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+R2FsbGFudHMsIEkgYW0gbm90IGFzIEkgaGF2ZSBiZWVuLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPlNvIHNheSBJIG1ldGhpbmtzIHlvdSBhcmUgc2FkZGVyLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPkkgaG9wZSBoZSBiZSBpbiBsb3ZlLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+SGFuZyBoaW0sIHRydWFudCEgdGhlcmUncyBubyB0cnVlIGRyb3Agb2YgYmxvb2QgaW48L0xJTkU+Ci08TElORT5oaW0sIHRvIGJlIHRydWx5IHRvdWNoZWQgd2l0aCBsb3ZlOiBpZiBoZSBiZSBzYWQsPC9MSU5FPgotPExJTkU+aGUgd2FudHMgbW9uZXkuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPkkgaGF2ZSB0aGUgdG9vdGhhY2hlLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+RHJhdyBpdC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+SGFuZyBpdCE8L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5Zb3UgbXVzdCBoYW5nIGl0IGZpcnN0LCBhbmQgZHJhdyBpdCBhZnRlcndhcmRzLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+V2hhdCEgc2lnaCBmb3IgdGhlIHRvb3RoYWNoZT88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5XaGVyZSBpcyBidXQgYSBodW1vdXIgb3IgYSB3b3JtLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5XZWxsLCBldmVyeSBvbmUgY2FuIG1hc3RlciBhIGdyaWVmIGJ1dCBoZSB0aGF0IGhhczwvTElORT4KLTxMSU5FPml0LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPllldCBzYXkgSSwgaGUgaXMgaW4gbG92ZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPlRoZXJlIGlzIG5vIGFwcGVhcmFuY2Ugb2YgZmFuY3kgaW4gaGltLCB1bmxlc3MgaXQgYmU8L0xJTkU+Ci08TElORT5hIGZhbmN5IHRoYXQgaGUgaGF0aCB0byBzdHJhbmdlIGRpc2d1aXNlczsgYXMsIHRvIGJlPC9MSU5FPgotPExJTkU+YSBEdXRjaG1hbiB0b2RheSwgYSBGcmVuY2htYW4gdG8tbW9ycm93LCBvciBpbiB0aGU8L0xJTkU+Ci08TElORT5zaGFwZSBvZiB0d28gY291bnRyaWVzIGF0IG9uY2UsIGFzLCBhIEdlcm1hbiBmcm9tPC9MSU5FPgotPExJTkU+dGhlIHdhaXN0IGRvd253YXJkLCBhbGwgc2xvcHMsIGFuZCBhIFNwYW5pYXJkIGZyb208L0xJTkU+Ci08TElORT50aGUgaGlwIHVwd2FyZCwgbm8gZG91YmxldC4gVW5sZXNzIGhlIGhhdmUgYSBmYW5jeTwvTElORT4KLTxMSU5FPnRvIHRoaXMgZm9vbGVyeSwgYXMgaXQgYXBwZWFycyBoZSBoYXRoLCBoZSBpcyBubzwvTElORT4KLTxMSU5FPmZvb2wgZm9yIGZhbmN5LCBhcyB5b3Ugd291bGQgaGF2ZSBpdCBhcHBlYXIgaGUgaXMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+SWYgaGUgYmUgbm90IGluIGxvdmUgd2l0aCBzb21lIHdvbWFuLCB0aGVyZSBpcyBubzwvTElORT4KLTxMSU5FPmJlbGlldmluZyBvbGQgc2lnbnM6IGEnIGJydXNoZXMgaGlzIGhhdCBvJzwvTElORT4KLTxMSU5FPm1vcm5pbmdzOyB3aGF0IHNob3VsZCB0aGF0IGJvZGU/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5IYXRoIGFueSBtYW4gc2VlbiBoaW0gYXQgdGhlIGJhcmJlcidzPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPk5vLCBidXQgdGhlIGJhcmJlcidzIG1hbiBoYXRoIGJlZW4gc2VlbiB3aXRoIGhpbSw8L0xJTkU+Ci08TElORT5hbmQgdGhlIG9sZCBvcm5hbWVudCBvZiBoaXMgY2hlZWsgaGF0aCBhbHJlYWR5PC9MSU5FPgotPExJTkU+c3R1ZmZlZCB0ZW5uaXMtYmFsbHMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+SW5kZWVkLCBoZSBsb29rcyB5b3VuZ2VyIHRoYW4gaGUgZGlkLCBieSB0aGUgbG9zcyBvZiBhIGJlYXJkLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+TmF5LCBhJyBydWJzIGhpbXNlbGYgd2l0aCBjaXZldDogY2FuIHlvdSBzbWVsbCBoaW08L0xJTkU+Ci08TElORT5vdXQgYnkgdGhhdD88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5UaGF0J3MgYXMgbXVjaCBhcyB0byBzYXksIHRoZSBzd2VldCB5b3V0aCdzIGluIGxvdmUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5UaGUgZ3JlYXRlc3Qgbm90ZSBvZiBpdCBpcyBoaXMgbWVsYW5jaG9seS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5BbmQgd2hlbiB3YXMgaGUgd29udCB0byB3YXNoIGhpcyBmYWNlPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+WWVhLCBvciB0byBwYWludCBoaW1zZWxmPyBmb3IgdGhlIHdoaWNoLCBJIGhlYXI8L0xJTkU+Ci08TElORT53aGF0IHRoZXkgc2F5IG9mIGhpbS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5OYXksIGJ1dCBoaXMgamVzdGluZyBzcGlyaXQ7IHdoaWNoIGlzIG5vdyBjcmVwdCBpbnRvPC9MSU5FPgotPExJTkU+YSBsdXRlLXN0cmluZyBhbmQgbm93IGdvdmVybmVkIGJ5IHN0b3BzLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+SW5kZWVkLCB0aGF0IHRlbGxzIGEgaGVhdnkgdGFsZSBmb3IgaGltOiBjb25jbHVkZSw8L0xJTkU+Ci08TElORT5jb25jbHVkZSBoZSBpcyBpbiBsb3ZlLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPk5heSwgYnV0IEkga25vdyB3aG8gbG92ZXMgaGltLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+VGhhdCB3b3VsZCBJIGtub3cgdG9vOiBJIHdhcnJhbnQsIG9uZSB0aGF0IGtub3dzIGhpbSBub3QuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+WWVzLCBhbmQgaGlzIGlsbCBjb25kaXRpb25zOyBhbmQsIGluIGRlc3BpdGUgb2Y8L0xJTkU+Ci08TElORT5hbGwsIGRpZXMgZm9yIGhpbS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPlNoZSBzaGFsbCBiZSBidXJpZWQgd2l0aCBoZXIgZmFjZSB1cHdhcmRzLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5ZZXQgaXMgdGhpcyBubyBjaGFybSBmb3IgdGhlIHRvb3RoYWNoZS4gT2xkPC9MSU5FPgotPExJTkU+c2lnbmlvciwgd2FsayBhc2lkZSB3aXRoIG1lOiBJIGhhdmUgc3R1ZGllZCBlaWdodDwvTElORT4KLTxMSU5FPm9yIG5pbmUgd2lzZSB3b3JkcyB0byBzcGVhayB0byB5b3UsIHdoaWNoIHRoZXNlPC9MSU5FPgotPExJTkU+aG9iYnktaG9yc2VzIG11c3Qgbm90IGhlYXIuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLQotPFNUQUdFRElSPkV4ZXVudCBCRU5FRElDSyBhbmQgTEVPTkFUTzwvU1RBR0VESVI+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5Gb3IgbXkgbGlmZSwgdG8gYnJlYWsgd2l0aCBoaW0gYWJvdXQgQmVhdHJpY2UuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+J1RpcyBldmVuIHNvLiBIZXJvIGFuZCBNYXJnYXJldCBoYXZlIGJ5IHRoaXM8L0xJTkU+Ci08TElORT5wbGF5ZWQgdGhlaXIgcGFydHMgd2l0aCBCZWF0cmljZTsgYW5kIHRoZW4gdGhlIHR3bzwvTElORT4KLTxMSU5FPmJlYXJzIHdpbGwgbm90IGJpdGUgb25lIGFub3RoZXIgd2hlbiB0aGV5IG1lZXQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLQotPFNUQUdFRElSPkVudGVyIERPTiBKT0hOPC9TVEFHRURJUj4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBKT0hOPC9TUEVBS0VSPgotPExJTkU+TXkgbG9yZCBhbmQgYnJvdGhlciwgR29kIHNhdmUgeW91ITwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+R29vZCBkZW4sIGJyb3RoZXIuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gSk9ITjwvU1BFQUtFUj4KLTxMSU5FPklmIHlvdXIgbGVpc3VyZSBzZXJ2ZWQsIEkgd291bGQgc3BlYWsgd2l0aCB5b3UuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5JbiBwcml2YXRlPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIEpPSE48L1NQRUFLRVI+Ci08TElORT5JZiBpdCBwbGVhc2UgeW91OiB5ZXQgQ291bnQgQ2xhdWRpbyBtYXkgaGVhcjsgZm9yPC9MSU5FPgotPExJTkU+d2hhdCBJIHdvdWxkIHNwZWFrIG9mIGNvbmNlcm5zIGhpbS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPldoYXQncyB0aGUgbWF0dGVyPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIEpPSE48L1NQRUFLRVI+Ci08TElORT48U1RBR0VESVI+VG8gQ0xBVURJTzwvU1RBR0VESVI+ICBNZWFucyB5b3VyIGxvcmRzaGlwIHRvIGJlIG1hcnJpZWQ8L0xJTkU+Ci08TElORT50by1tb3Jyb3c/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5Zb3Uga25vdyBoZSBkb2VzLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIEpPSE48L1NQRUFLRVI+Ci08TElORT5JIGtub3cgbm90IHRoYXQsIHdoZW4gaGUga25vd3Mgd2hhdCBJIGtub3cuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+SWYgdGhlcmUgYmUgYW55IGltcGVkaW1lbnQsIEkgcHJheSB5b3UgZGlzY292ZXIgaXQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gSk9ITjwvU1BFQUtFUj4KLTxMSU5FPllvdSBtYXkgdGhpbmsgSSBsb3ZlIHlvdSBub3Q6IGxldCB0aGF0IGFwcGVhcjwvTElORT4KLTxMSU5FPmhlcmVhZnRlciwgYW5kIGFpbSBiZXR0ZXIgYXQgbWUgYnkgdGhhdCBJIG5vdyB3aWxsPC9MSU5FPgotPExJTkU+bWFuaWZlc3QuIEZvciBteSBicm90aGVyLCBJIHRoaW5rIGhlIGhvbGRzIHlvdTwvTElORT4KLTxMSU5FPndlbGwsIGFuZCBpbiBkZWFybmVzcyBvZiBoZWFydCBoYXRoIGhvbHAgdG8gZWZmZWN0PC9MSU5FPgotPExJTkU+eW91ciBlbnN1aW5nIG1hcnJpYWdlOy0tc3VyZWx5IHN1aXQgaWxsIHNwZW50IGFuZDwvTElORT4KLTxMSU5FPmxhYm91ciBpbGwgYmVzdG93ZWQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5XaHksIHdoYXQncyB0aGUgbWF0dGVyPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIEpPSE48L1NQRUFLRVI+Ci08TElORT5JIGNhbWUgaGl0aGVyIHRvIHRlbGwgeW91OyBhbmQsIGNpcmN1bXN0YW5jZXM8L0xJTkU+Ci08TElORT5zaG9ydGVuZWQsIGZvciBzaGUgaGFzIGJlZW4gdG9vIGxvbmcgYSB0YWxraW5nIG9mLDwvTElORT4KLTxMSU5FPnRoZSBsYWR5IGlzIGRpc2xveWFsLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPldobywgSGVybz88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPkV2ZW4gc2hlOyBMZW9uYXRvJ3MgSGVybywgeW91ciBIZXJvLCBldmVyeSBtYW4ncyBIZXJvOjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPkRpc2xveWFsPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIEpPSE48L1NQRUFLRVI+Ci08TElORT5UaGUgd29yZCBpcyB0b28gZ29vZCB0byBwYWludCBvdXQgaGVyIHdpY2tlZG5lc3M7IEk8L0xJTkU+Ci08TElORT5jb3VsZCBzYXkgc2hlIHdlcmUgd29yc2U6IHRoaW5rIHlvdSBvZiBhIHdvcnNlPC9MSU5FPgotPExJTkU+dGl0bGUsIGFuZCBJIHdpbGwgZml0IGhlciB0byBpdC4gV29uZGVyIG5vdCB0aWxsPC9MSU5FPgotPExJTkU+ZnVydGhlciB3YXJyYW50OiBnbyBidXQgd2l0aCBtZSB0by1uaWdodCwgeW91IHNoYWxsPC9MSU5FPgotPExJTkU+c2VlIGhlciBjaGFtYmVyLXdpbmRvdyBlbnRlcmVkLCBldmVuIHRoZSBuaWdodDwvTElORT4KLTxMSU5FPmJlZm9yZSBoZXIgd2VkZGluZy1kYXk6IGlmIHlvdSBsb3ZlIGhlciB0aGVuLDwvTElORT4KLTxMSU5FPnRvLW1vcnJvdyB3ZWQgaGVyOyBidXQgaXQgd291bGQgYmV0dGVyIGZpdCB5b3VyIGhvbm91cjwvTElORT4KLTxMSU5FPnRvIGNoYW5nZSB5b3VyIG1pbmQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+TWF5IHRoaXMgYmUgc28/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5JIHdpbGwgbm90IHRoaW5rIGl0LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIEpPSE48L1NQRUFLRVI+Ci08TElORT5JZiB5b3UgZGFyZSBub3QgdHJ1c3QgdGhhdCB5b3Ugc2VlLCBjb25mZXNzIG5vdDwvTElORT4KLTxMSU5FPnRoYXQgeW91IGtub3c6IGlmIHlvdSB3aWxsIGZvbGxvdyBtZSwgSSB3aWxsIHNob3c8L0xJTkU+Ci08TElORT55b3UgZW5vdWdoOyBhbmQgd2hlbiB5b3UgaGF2ZSBzZWVuIG1vcmUgYW5kIGhlYXJkPC9MSU5FPgotPExJTkU+bW9yZSwgcHJvY2VlZCBhY2NvcmRpbmdseS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5JZiBJIHNlZSBhbnkgdGhpbmcgdG8tbmlnaHQgd2h5IEkgc2hvdWxkIG5vdCBtYXJyeTwvTElORT4KLTxMSU5FPmhlciB0by1tb3Jyb3cgaW4gdGhlIGNvbmdyZWdhdGlvbiwgd2hlcmUgSSBzaG91bGQ8L0xJTkU+Ci08TElORT53ZWQsIHRoZXJlIHdpbGwgSSBzaGFtZSBoZXIuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5BbmQsIGFzIEkgd29vZWQgZm9yIHRoZWUgdG8gb2J0YWluIGhlciwgSSB3aWxsIGpvaW48L0xJTkU+Ci08TElORT53aXRoIHRoZWUgdG8gZGlzZ3JhY2UgaGVyLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIEpPSE48L1NQRUFLRVI+Ci08TElORT5JIHdpbGwgZGlzcGFyYWdlIGhlciBubyBmYXJ0aGVyIHRpbGwgeW91IGFyZSBteTwvTElORT4KLTxMSU5FPndpdG5lc3NlczogYmVhciBpdCBjb2xkbHkgYnV0IHRpbGwgbWlkbmlnaHQsIGFuZDwvTElORT4KLTxMSU5FPmxldCB0aGUgaXNzdWUgc2hvdyBpdHNlbGYuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5PIGRheSB1bnRvd2FyZGx5IHR1cm5lZCE8L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5PIG1pc2NoaWVmIHN0cmFuZ2VseSB0aHdhcnRpbmchPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gSk9ITjwvU1BFQUtFUj4KLTxMSU5FPk8gcGxhZ3VlIHJpZ2h0IHdlbGwgcHJldmVudGVkISBzbyB3aWxsIHlvdSBzYXkgd2hlbjwvTElORT4KLTxMSU5FPnlvdSBoYXZlIHNlZW4gdGhlIHNlcXVlbC48L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+RXhldW50PC9TVEFHRURJUj4KLTwvU0NFTkU+Ci0KLTxTQ0VORT48VElUTEU+U0NFTkUgSUlJLiAgQSBzdHJlZXQuPC9USVRMRT4KLTxTVEFHRURJUj5FbnRlciBET0dCRVJSWSBhbmQgVkVSR0VTIHdpdGggdGhlIFdhdGNoPC9TVEFHRURJUj4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPR0JFUlJZPC9TUEVBS0VSPgotPExJTkU+QXJlIHlvdSBnb29kIG1lbiBhbmQgdHJ1ZT88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPlZFUkdFUzwvU1BFQUtFUj4KLTxMSU5FPlllYSwgb3IgZWxzZSBpdCB3ZXJlIHBpdHkgYnV0IHRoZXkgc2hvdWxkIHN1ZmZlcjwvTElORT4KLTxMSU5FPnNhbHZhdGlvbiwgYm9keSBhbmQgc291bC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPR0JFUlJZPC9TUEVBS0VSPgotPExJTkU+TmF5LCB0aGF0IHdlcmUgYSBwdW5pc2htZW50IHRvbyBnb29kIGZvciB0aGVtLCBpZjwvTElORT4KLTxMSU5FPnRoZXkgc2hvdWxkIGhhdmUgYW55IGFsbGVnaWFuY2UgaW4gdGhlbSwgYmVpbmc8L0xJTkU+Ci08TElORT5jaG9zZW4gZm9yIHRoZSBwcmluY2UncyB3YXRjaC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPlZFUkdFUzwvU1BFQUtFUj4KLTxMSU5FPldlbGwsIGdpdmUgdGhlbSB0aGVpciBjaGFyZ2UsIG5laWdoYm91ciBEb2diZXJyeS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPR0JFUlJZPC9TUEVBS0VSPgotPExJTkU+Rmlyc3QsIHdobyB0aGluayB5b3UgdGhlIG1vc3QgZGVzZXJ0bGVzcyBtYW4gdG8gYmU8L0xJTkU+Ci08TElORT5jb25zdGFibGU/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5GaXJzdCBXYXRjaG1hbjwvU1BFQUtFUj4KLTxMSU5FPkh1Z2ggT3RlY2FrZSwgc2lyLCBvciBHZW9yZ2UgU2VhY29sZTsgZm9yIHRoZXkgY2FuPC9MSU5FPgotPExJTkU+d3JpdGUgYW5kIHJlYWQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET0dCRVJSWTwvU1BFQUtFUj4KLTxMSU5FPkNvbWUgaGl0aGVyLCBuZWlnaGJvdXIgU2VhY29sZS4gR29kIGhhdGggYmxlc3NlZDwvTElORT4KLTxMSU5FPnlvdSB3aXRoIGEgZ29vZCBuYW1lOiB0byBiZSBhIHdlbGwtZmF2b3VyZWQgbWFuIGlzPC9MSU5FPgotPExJTkU+dGhlIGdpZnQgb2YgZm9ydHVuZTsgYnV0IHRvIHdyaXRlIGFuZCByZWFkIGNvbWVzIGJ5IG5hdHVyZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPlNlY29uZCBXYXRjaG1hbjwvU1BFQUtFUj4KLTxMSU5FPkJvdGggd2hpY2gsIG1hc3RlciBjb25zdGFibGUsLS08L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPR0JFUlJZPC9TUEVBS0VSPgotPExJTkU+WW91IGhhdmU6IEkga25ldyBpdCB3b3VsZCBiZSB5b3VyIGFuc3dlci4gV2VsbCw8L0xJTkU+Ci08TElORT5mb3IgeW91ciBmYXZvdXIsIHNpciwgd2h5LCBnaXZlIEdvZCB0aGFua3MsIGFuZCBtYWtlPC9MSU5FPgotPExJTkU+bm8gYm9hc3Qgb2YgaXQ7IGFuZCBmb3IgeW91ciB3cml0aW5nIGFuZCByZWFkaW5nLDwvTElORT4KLTxMSU5FPmxldCB0aGF0IGFwcGVhciB3aGVuIHRoZXJlIGlzIG5vIG5lZWQgb2Ygc3VjaDwvTElORT4KLTxMSU5FPnZhbml0eS4gWW91IGFyZSB0aG91Z2h0IGhlcmUgdG8gYmUgdGhlIG1vc3Q8L0xJTkU+Ci08TElORT5zZW5zZWxlc3MgYW5kIGZpdCBtYW4gZm9yIHRoZSBjb25zdGFibGUgb2YgdGhlPC9MSU5FPgotPExJTkU+d2F0Y2g7IHRoZXJlZm9yZSBiZWFyIHlvdSB0aGUgbGFudGVybi4gVGhpcyBpcyB5b3VyPC9MSU5FPgotPExJTkU+Y2hhcmdlOiB5b3Ugc2hhbGwgY29tcHJlaGVuZCBhbGwgdmFncm9tIG1lbjsgeW91IGFyZTwvTElORT4KLTxMSU5FPnRvIGJpZCBhbnkgbWFuIHN0YW5kLCBpbiB0aGUgcHJpbmNlJ3MgbmFtZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPlNlY29uZCBXYXRjaG1hbjwvU1BFQUtFUj4KLTxMSU5FPkhvdyBpZiBhJyB3aWxsIG5vdCBzdGFuZD88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPR0JFUlJZPC9TUEVBS0VSPgotPExJTkU+V2h5LCB0aGVuLCB0YWtlIG5vIG5vdGUgb2YgaGltLCBidXQgbGV0IGhpbSBnbzsgYW5kPC9MSU5FPgotPExJTkU+cHJlc2VudGx5IGNhbGwgdGhlIHJlc3Qgb2YgdGhlIHdhdGNoIHRvZ2V0aGVyIGFuZDwvTElORT4KLTxMSU5FPnRoYW5rIEdvZCB5b3UgYXJlIHJpZCBvZiBhIGtuYXZlLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+VkVSR0VTPC9TUEVBS0VSPgotPExJTkU+SWYgaGUgd2lsbCBub3Qgc3RhbmQgd2hlbiBoZSBpcyBiaWRkZW4sIGhlIGlzIG5vbmU8L0xJTkU+Ci08TElORT5vZiB0aGUgcHJpbmNlJ3Mgc3ViamVjdHMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET0dCRVJSWTwvU1BFQUtFUj4KLTxMSU5FPlRydWUsIGFuZCB0aGV5IGFyZSB0byBtZWRkbGUgd2l0aCBub25lIGJ1dCB0aGU8L0xJTkU+Ci08TElORT5wcmluY2UncyBzdWJqZWN0cy4gWW91IHNoYWxsIGFsc28gbWFrZSBubyBub2lzZSBpbjwvTElORT4KLTxMSU5FPnRoZSBzdHJlZXRzOyBmb3IsIGZvciB0aGUgd2F0Y2ggdG8gYmFiYmxlIGFuZCB0bzwvTElORT4KLTxMSU5FPnRhbGsgaXMgbW9zdCB0b2xlcmFibGUgYW5kIG5vdCB0byBiZSBlbmR1cmVkLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+V2F0Y2htYW48L1NQRUFLRVI+Ci08TElORT5XZSB3aWxsIHJhdGhlciBzbGVlcCB0aGFuIHRhbGs6IHdlIGtub3cgd2hhdDwvTElORT4KLTxMSU5FPmJlbG9uZ3MgdG8gYSB3YXRjaC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPR0JFUlJZPC9TUEVBS0VSPgotPExJTkU+V2h5LCB5b3Ugc3BlYWsgbGlrZSBhbiBhbmNpZW50IGFuZCBtb3N0IHF1aWV0PC9MSU5FPgotPExJTkU+d2F0Y2htYW47IGZvciBJIGNhbm5vdCBzZWUgaG93IHNsZWVwaW5nIHNob3VsZDwvTElORT4KLTxMSU5FPm9mZmVuZDogb25seSwgaGF2ZSBhIGNhcmUgdGhhdCB5b3VyIGJpbGxzIGJlIG5vdDwvTElORT4KLTxMSU5FPnN0b2xlbi4gV2VsbCwgeW91IGFyZSB0byBjYWxsIGF0IGFsbCB0aGU8L0xJTkU+Ci08TElORT5hbGUtaG91c2VzLCBhbmQgYmlkIHRob3NlIHRoYXQgYXJlIGRydW5rIGdldCB0aGVtIHRvIGJlZC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPldhdGNobWFuPC9TUEVBS0VSPgotPExJTkU+SG93IGlmIHRoZXkgd2lsbCBub3Q/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET0dCRVJSWTwvU1BFQUtFUj4KLTxMSU5FPldoeSwgdGhlbiwgbGV0IHRoZW0gYWxvbmUgdGlsbCB0aGV5IGFyZSBzb2JlcjogaWY8L0xJTkU+Ci08TElORT50aGV5IG1ha2UgeW91IG5vdCB0aGVuIHRoZSBiZXR0ZXIgYW5zd2VyLCB5b3UgbWF5PC9MSU5FPgotPExJTkU+c2F5IHRoZXkgYXJlIG5vdCB0aGUgbWVuIHlvdSB0b29rIHRoZW0gZm9yLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+V2F0Y2htYW48L1NQRUFLRVI+Ci08TElORT5XZWxsLCBzaXIuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET0dCRVJSWTwvU1BFQUtFUj4KLTxMSU5FPklmIHlvdSBtZWV0IGEgdGhpZWYsIHlvdSBtYXkgc3VzcGVjdCBoaW0sIGJ5IHZpcnR1ZTwvTElORT4KLTxMSU5FPm9mIHlvdXIgb2ZmaWNlLCB0byBiZSBubyB0cnVlIG1hbjsgYW5kLCBmb3Igc3VjaDwvTElORT4KLTxMSU5FPmtpbmQgb2YgbWVuLCB0aGUgbGVzcyB5b3UgbWVkZGxlIG9yIG1ha2Ugd2l0aCB0aGVtLDwvTElORT4KLTxMSU5FPndoeSB0aGUgbW9yZSBpcyBmb3IgeW91ciBob25lc3R5LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+V2F0Y2htYW48L1NQRUFLRVI+Ci08TElORT5JZiB3ZSBrbm93IGhpbSB0byBiZSBhIHRoaWVmLCBzaGFsbCB3ZSBub3QgbGF5PC9MSU5FPgotPExJTkU+aGFuZHMgb24gaGltPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9HQkVSUlk8L1NQRUFLRVI+Ci08TElORT5UcnVseSwgYnkgeW91ciBvZmZpY2UsIHlvdSBtYXk7IGJ1dCBJIHRoaW5rIHRoZXk8L0xJTkU+Ci08TElORT50aGF0IHRvdWNoIHBpdGNoIHdpbGwgYmUgZGVmaWxlZDogdGhlIG1vc3QgcGVhY2VhYmxlPC9MSU5FPgotPExJTkU+d2F5IGZvciB5b3UsIGlmIHlvdSBkbyB0YWtlIGEgdGhpZWYsIGlzIHRvIGxldCBoaW08L0xJTkU+Ci08TElORT5zaG93IGhpbXNlbGYgd2hhdCBoZSBpcyBhbmQgc3RlYWwgb3V0IG9mIHlvdXIgY29tcGFueS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPlZFUkdFUzwvU1BFQUtFUj4KLTxMSU5FPllvdSBoYXZlIGJlZW4gYWx3YXlzIGNhbGxlZCBhIG1lcmNpZnVsIG1hbiwgcGFydG5lci48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPR0JFUlJZPC9TUEVBS0VSPgotPExJTkU+VHJ1bHksIEkgd291bGQgbm90IGhhbmcgYSBkb2cgYnkgbXkgd2lsbCwgbXVjaCBtb3JlPC9MSU5FPgotPExJTkU+YSBtYW4gd2hvIGhhdGggYW55IGhvbmVzdHkgaW4gaGltLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+VkVSR0VTPC9TUEVBS0VSPgotPExJTkU+SWYgeW91IGhlYXIgYSBjaGlsZCBjcnkgaW4gdGhlIG5pZ2h0LCB5b3UgbXVzdCBjYWxsPC9MSU5FPgotPExJTkU+dG8gdGhlIG51cnNlIGFuZCBiaWQgaGVyIHN0aWxsIGl0LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+V2F0Y2htYW48L1NQRUFLRVI+Ci08TElORT5Ib3cgaWYgdGhlIG51cnNlIGJlIGFzbGVlcCBhbmQgd2lsbCBub3QgaGVhciB1cz88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPR0JFUlJZPC9TUEVBS0VSPgotPExJTkU+V2h5LCB0aGVuLCBkZXBhcnQgaW4gcGVhY2UsIGFuZCBsZXQgdGhlIGNoaWxkIHdha2U8L0xJTkU+Ci08TElORT5oZXIgd2l0aCBjcnlpbmc7IGZvciB0aGUgZXdlIHRoYXQgd2lsbCBub3QgaGVhciBoZXI8L0xJTkU+Ci08TElORT5sYW1iIHdoZW4gaXQgYmFlcyB3aWxsIG5ldmVyIGFuc3dlciBhIGNhbGYgd2hlbiBoZSBibGVhdHMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5WRVJHRVM8L1NQRUFLRVI+Ci08TElORT4nVGlzIHZlcnkgdHJ1ZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPR0JFUlJZPC9TUEVBS0VSPgotPExJTkU+VGhpcyBpcyB0aGUgZW5kIG9mIHRoZSBjaGFyZ2U6LS15b3UsIGNvbnN0YWJsZSwgYXJlPC9MSU5FPgotPExJTkU+dG8gcHJlc2VudCB0aGUgcHJpbmNlJ3Mgb3duIHBlcnNvbjogaWYgeW91IG1lZXQgdGhlPC9MSU5FPgotPExJTkU+cHJpbmNlIGluIHRoZSBuaWdodCwgeW91IG1heSBzdGF5IGhpbS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPlZFUkdFUzwvU1BFQUtFUj4KLTxMSU5FPk5heSwgYnknciBvdXIgbGFkeSwgdGhhdCBJIHRoaW5rIGEnIGNhbm5vdC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPR0JFUlJZPC9TUEVBS0VSPgotPExJTkU+Rml2ZSBzaGlsbGluZ3MgdG8gb25lIG9uJ3QsIHdpdGggYW55IG1hbiB0aGF0IGtub3dzPC9MSU5FPgotPExJTkU+dGhlIHN0YXR1dGVzLCBoZSBtYXkgc3RheSBoaW06IG1hcnJ5LCBub3Qgd2l0aG91dDwvTElORT4KLTxMSU5FPnRoZSBwcmluY2UgYmUgd2lsbGluZzsgZm9yLCBpbmRlZWQsIHRoZSB3YXRjaCBvdWdodDwvTElORT4KLTxMSU5FPnRvIG9mZmVuZCBubyBtYW47IGFuZCBpdCBpcyBhbiBvZmZlbmNlIHRvIHN0YXkgYTwvTElORT4KLTxMSU5FPm1hbiBhZ2FpbnN0IGhpcyB3aWxsLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+VkVSR0VTPC9TUEVBS0VSPgotPExJTkU+QnknciBsYWR5LCBJIHRoaW5rIGl0IGJlIHNvLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9HQkVSUlk8L1NQRUFLRVI+Ci08TElORT5IYSwgaGEsIGhhISBXZWxsLCBtYXN0ZXJzLCBnb29kIG5pZ2h0OiBhbiB0aGVyZSBiZTwvTElORT4KLTxMSU5FPmFueSBtYXR0ZXIgb2Ygd2VpZ2h0IGNoYW5jZXMsIGNhbGwgdXAgbWU6IGtlZXAgeW91cjwvTElORT4KLTxMSU5FPmZlbGxvd3MnIGNvdW5zZWxzIGFuZCB5b3VyIG93bjsgYW5kIGdvb2QgbmlnaHQuPC9MSU5FPgotPExJTkU+Q29tZSwgbmVpZ2hib3VyLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+V2F0Y2htYW48L1NQRUFLRVI+Ci08TElORT5XZWxsLCBtYXN0ZXJzLCB3ZSBoZWFyIG91ciBjaGFyZ2U6IGxldCB1cyBnbyBzaXQgaGVyZTwvTElORT4KLTxMSU5FPnVwb24gdGhlIGNodXJjaC1iZW5jaCB0aWxsIHR3bywgYW5kIHRoZW4gYWxsIHRvIGJlZC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPR0JFUlJZPC9TUEVBS0VSPgotPExJTkU+T25lIHdvcmQgbW9yZSwgaG9uZXN0IG5laWdoYm91cnMuIEkgcHJheSB5b3Ugd2F0Y2g8L0xJTkU+Ci08TElORT5hYm91dCBTaWduaW9yIExlb25hdG8ncyBkb29yOyBmb3IgdGhlIHdlZGRpbmcgYmVpbmc8L0xJTkU+Ci08TElORT50aGVyZSB0by1tb3Jyb3csIHRoZXJlIGlzIGEgZ3JlYXQgY29pbCB0by1uaWdodC48L0xJTkU+Ci08TElORT5BZGlldTogYmUgdmlnaXRhbnQsIEkgYmVzZWVjaCB5b3UuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTVEFHRURJUj5FeGV1bnQgRE9HQkVSUlkgYW5kIFZFUkdFUzwvU1RBR0VESVI+Ci08U1RBR0VESVI+RW50ZXIgQk9SQUNISU8gYW5kIENPTlJBREU8L1NUQUdFRElSPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Qk9SQUNISU88L1NQRUFLRVI+Ci08TElORT5XaGF0IENvbnJhZGUhPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5XYXRjaG1hbjwvU1BFQUtFUj4KLTxMSU5FPjxTVEFHRURJUj5Bc2lkZTwvU1RBR0VESVI+ICBQZWFjZSEgc3RpciBub3QuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CT1JBQ0hJTzwvU1BFQUtFUj4KLTxMSU5FPkNvbnJhZGUsIEkgc2F5ITwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q09OUkFERTwvU1BFQUtFUj4KLTxMSU5FPkhlcmUsIG1hbjsgSSBhbSBhdCB0aHkgZWxib3cuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CT1JBQ0hJTzwvU1BFQUtFUj4KLTxMSU5FPk1hc3MsIGFuZCBteSBlbGJvdyBpdGNoZWQ7IEkgdGhvdWdodCB0aGVyZSB3b3VsZCBhPC9MSU5FPgotPExJTkU+c2NhYiBmb2xsb3cuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DT05SQURFPC9TUEVBS0VSPgotPExJTkU+SSB3aWxsIG93ZSB0aGVlIGFuIGFuc3dlciBmb3IgdGhhdDogYW5kIG5vdyBmb3J3YXJkPC9MSU5FPgotPExJTkU+d2l0aCB0aHkgdGFsZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJPUkFDSElPPC9TUEVBS0VSPgotPExJTkU+U3RhbmQgdGhlZSBjbG9zZSwgdGhlbiwgdW5kZXIgdGhpcyBwZW50LWhvdXNlLCBmb3I8L0xJTkU+Ci08TElORT5pdCBkcml6emxlcyByYWluOyBhbmQgSSB3aWxsLCBsaWtlIGEgdHJ1ZSBkcnVua2FyZCw8L0xJTkU+Ci08TElORT51dHRlciBhbGwgdG8gdGhlZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPldhdGNobWFuPC9TUEVBS0VSPgotPExJTkU+PFNUQUdFRElSPkFzaWRlPC9TVEFHRURJUj4gIFNvbWUgdHJlYXNvbiwgbWFzdGVyczogeWV0IHN0YW5kIGNsb3NlLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Qk9SQUNISU88L1NQRUFLRVI+Ci08TElORT5UaGVyZWZvcmUga25vdyBJIGhhdmUgZWFybmVkIG9mIERvbiBKb2huIGEgdGhvdXNhbmQgZHVjYXRzLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q09OUkFERTwvU1BFQUtFUj4KLTxMSU5FPklzIGl0IHBvc3NpYmxlIHRoYXQgYW55IHZpbGxhbnkgc2hvdWxkIGJlIHNvIGRlYXI/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CT1JBQ0hJTzwvU1BFQUtFUj4KLTxMSU5FPlRob3Ugc2hvdWxkc3QgcmF0aGVyIGFzayBpZiBpdCB3ZXJlIHBvc3NpYmxlIGFueTwvTElORT4KLTxMSU5FPnZpbGxhbnkgc2hvdWxkIGJlIHNvIHJpY2g7IGZvciB3aGVuIHJpY2ggdmlsbGFpbnM8L0xJTkU+Ci08TElORT5oYXZlIG5lZWQgb2YgcG9vciBvbmVzLCBwb29yIG9uZXMgbWF5IG1ha2Ugd2hhdDwvTElORT4KLTxMSU5FPnByaWNlIHRoZXkgd2lsbC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNPTlJBREU8L1NQRUFLRVI+Ci08TElORT5JIHdvbmRlciBhdCBpdC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJPUkFDSElPPC9TUEVBS0VSPgotPExJTkU+VGhhdCBzaG93cyB0aG91IGFydCB1bmNvbmZpcm1lZC4gVGhvdSBrbm93ZXN0IHRoYXQ8L0xJTkU+Ci08TElORT50aGUgZmFzaGlvbiBvZiBhIGRvdWJsZXQsIG9yIGEgaGF0LCBvciBhIGNsb2FrLCBpczwvTElORT4KLTxMSU5FPm5vdGhpbmcgdG8gYSBtYW4uPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DT05SQURFPC9TUEVBS0VSPgotPExJTkU+WWVzLCBpdCBpcyBhcHBhcmVsLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Qk9SQUNISU88L1NQRUFLRVI+Ci08TElORT5JIG1lYW4sIHRoZSBmYXNoaW9uLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q09OUkFERTwvU1BFQUtFUj4KLTxMSU5FPlllcywgdGhlIGZhc2hpb24gaXMgdGhlIGZhc2hpb24uPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CT1JBQ0hJTzwvU1BFQUtFUj4KLTxMSU5FPlR1c2ghIEkgbWF5IGFzIHdlbGwgc2F5IHRoZSBmb29sJ3MgdGhlIGZvb2wuIEJ1dDwvTElORT4KLTxMSU5FPnNlZXN0IHRob3Ugbm90IHdoYXQgYSBkZWZvcm1lZCB0aGllZiB0aGlzIGZhc2hpb248L0xJTkU+Ci08TElORT5pcz88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPldhdGNobWFuPC9TUEVBS0VSPgotPExJTkU+PFNUQUdFRElSPkFzaWRlPC9TVEFHRURJUj4gIEkga25vdyB0aGF0IERlZm9ybWVkOyBhJyBoYXMgYmVlbiBhIHZpbGU8L0xJTkU+Ci08TElORT50aGllZiB0aGlzIHNldmVuIHllYXI7IGEnIGdvZXMgdXAgYW5kIGRvd24gbGlrZSBhPC9MSU5FPgotPExJTkU+Z2VudGxlbWFuOiBJIHJlbWVtYmVyIGhpcyBuYW1lLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Qk9SQUNISU88L1NQRUFLRVI+Ci08TElORT5EaWRzdCB0aG91IG5vdCBoZWFyIHNvbWVib2R5PzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q09OUkFERTwvU1BFQUtFUj4KLTxMSU5FPk5vOyAndHdhcyB0aGUgdmFuZSBvbiB0aGUgaG91c2UuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CT1JBQ0hJTzwvU1BFQUtFUj4KLTxMSU5FPlNlZXN0IHRob3Ugbm90LCBJIHNheSwgd2hhdCBhIGRlZm9ybWVkIHRoaWVmIHRoaXM8L0xJTkU+Ci08TElORT5mYXNoaW9uIGlzPyBob3cgZ2lkZGlseSBhJyB0dXJucyBhYm91dCBhbGwgdGhlIGhvdDwvTElORT4KLTxMSU5FPmJsb29kcyBiZXR3ZWVuIGZvdXJ0ZWVuIGFuZCBmaXZlLWFuZC10aGlydHk/PC9MSU5FPgotPExJTkU+c29tZXRpbWVzIGZhc2hpb25pbmcgdGhlbSBsaWtlIFBoYXJhb2gncyBzb2xkaWVyczwvTElORT4KLTxMSU5FPmluIHRoZSByZWVreSBwYWludGluZywgc29tZXRpbWUgbGlrZSBnb2QgQmVsJ3M8L0xJTkU+Ci08TElORT5wcmllc3RzIGluIHRoZSBvbGQgY2h1cmNoLXdpbmRvdywgc29tZXRpbWUgbGlrZSB0aGU8L0xJTkU+Ci08TElORT5zaGF2ZW4gSGVyY3VsZXMgaW4gdGhlIHNtaXJjaGVkIHdvcm0tZWF0ZW4gdGFwZXN0cnksPC9MSU5FPgotPExJTkU+d2hlcmUgaGlzIGNvZHBpZWNlIHNlZW1zIGFzIG1hc3N5IGFzIGhpcyBjbHViPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q09OUkFERTwvU1BFQUtFUj4KLTxMSU5FPkFsbCB0aGlzIEkgc2VlOyBhbmQgSSBzZWUgdGhhdCB0aGUgZmFzaGlvbiB3ZWFyczwvTElORT4KLTxMSU5FPm91dCBtb3JlIGFwcGFyZWwgdGhhbiB0aGUgbWFuLiBCdXQgYXJ0IG5vdCB0aG91PC9MSU5FPgotPExJTkU+dGh5c2VsZiBnaWRkeSB3aXRoIHRoZSBmYXNoaW9uIHRvbywgdGhhdCB0aG91IGhhc3Q8L0xJTkU+Ci08TElORT5zaGlmdGVkIG91dCBvZiB0aHkgdGFsZSBpbnRvIHRlbGxpbmcgbWUgb2YgdGhlIGZhc2hpb24/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CT1JBQ0hJTzwvU1BFQUtFUj4KLTxMSU5FPk5vdCBzbywgbmVpdGhlcjogYnV0IGtub3cgdGhhdCBJIGhhdmUgdG8tbmlnaHQ8L0xJTkU+Ci08TElORT53b29lZCBNYXJnYXJldCwgdGhlIExhZHkgSGVybydzIGdlbnRsZXdvbWFuLCBieSB0aGU8L0xJTkU+Ci08TElORT5uYW1lIG9mIEhlcm86IHNoZSBsZWFucyBtZSBvdXQgYXQgaGVyIG1pc3RyZXNzJzwvTElORT4KLTxMSU5FPmNoYW1iZXItd2luZG93LCBiaWRzIG1lIGEgdGhvdXNhbmQgdGltZXMgZ29vZDwvTElORT4KLTxMSU5FPm5pZ2h0LC0tSSB0ZWxsIHRoaXMgdGFsZSB2aWxlbHk6LS1JIHNob3VsZCBmaXJzdDwvTElORT4KLTxMSU5FPnRlbGwgdGhlZSBob3cgdGhlIHByaW5jZSwgQ2xhdWRpbyBhbmQgbXkgbWFzdGVyLDwvTElORT4KLTxMSU5FPnBsYW50ZWQgYW5kIHBsYWNlZCBhbmQgcG9zc2Vzc2VkIGJ5IG15IG1hc3RlciBEb248L0xJTkU+Ci08TElORT5Kb2huLCBzYXcgYWZhciBvZmYgaW4gdGhlIG9yY2hhcmQgdGhpcyBhbWlhYmxlIGVuY291bnRlci48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNPTlJBREU8L1NQRUFLRVI+Ci08TElORT5BbmQgdGhvdWdodCB0aGV5IE1hcmdhcmV0IHdhcyBIZXJvPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Qk9SQUNISU88L1NQRUFLRVI+Ci08TElORT5Ud28gb2YgdGhlbSBkaWQsIHRoZSBwcmluY2UgYW5kIENsYXVkaW87IGJ1dCB0aGU8L0xJTkU+Ci08TElORT5kZXZpbCBteSBtYXN0ZXIga25ldyBzaGUgd2FzIE1hcmdhcmV0OyBhbmQgcGFydGx5PC9MSU5FPgotPExJTkU+YnkgaGlzIG9hdGhzLCB3aGljaCBmaXJzdCBwb3NzZXNzZWQgdGhlbSwgcGFydGx5IGJ5PC9MSU5FPgotPExJTkU+dGhlIGRhcmsgbmlnaHQsIHdoaWNoIGRpZCBkZWNlaXZlIHRoZW0sIGJ1dCBjaGllZmx5PC9MSU5FPgotPExJTkU+YnkgbXkgdmlsbGFueSwgd2hpY2ggZGlkIGNvbmZpcm0gYW55IHNsYW5kZXIgdGhhdDwvTElORT4KLTxMSU5FPkRvbiBKb2huIGhhZCBtYWRlLCBhd2F5IHdlbnQgQ2xhdWRpbyBlbnJhZ2VkOyBzd29yZTwvTElORT4KLTxMSU5FPmhlIHdvdWxkIG1lZXQgaGVyLCBhcyBoZSB3YXMgYXBwb2ludGVkLCBuZXh0IG1vcm5pbmc8L0xJTkU+Ci08TElORT5hdCB0aGUgdGVtcGxlLCBhbmQgdGhlcmUsIGJlZm9yZSB0aGUgd2hvbGU8L0xJTkU+Ci08TElORT5jb25ncmVnYXRpb24sIHNoYW1lIGhlciB3aXRoIHdoYXQgaGUgc2F3IG8nZXIgbmlnaHQ8L0xJTkU+Ci08TElORT5hbmQgc2VuZCBoZXIgaG9tZSBhZ2FpbiB3aXRob3V0IGEgaHVzYmFuZC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkZpcnN0IFdhdGNobWFuPC9TUEVBS0VSPgotPExJTkU+V2UgY2hhcmdlIHlvdSwgaW4gdGhlIHByaW5jZSdzIG5hbWUsIHN0YW5kITwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+U2Vjb25kIFdhdGNobWFuPC9TUEVBS0VSPgotPExJTkU+Q2FsbCB1cCB0aGUgcmlnaHQgbWFzdGVyIGNvbnN0YWJsZS4gV2UgaGF2ZSBoZXJlPC9MSU5FPgotPExJTkU+cmVjb3ZlcmVkIHRoZSBtb3N0IGRhbmdlcm91cyBwaWVjZSBvZiBsZWNoZXJ5IHRoYXQ8L0xJTkU+Ci08TElORT5ldmVyIHdhcyBrbm93biBpbiB0aGUgY29tbW9ud2VhbHRoLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Rmlyc3QgV2F0Y2htYW48L1NQRUFLRVI+Ci08TElORT5BbmQgb25lIERlZm9ybWVkIGlzIG9uZSBvZiB0aGVtOiBJIGtub3cgaGltOyBhJzwvTElORT4KLTxMSU5FPndlYXJzIGEgbG9jay48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNPTlJBREU8L1NQRUFLRVI+Ci08TElORT5NYXN0ZXJzLCBtYXN0ZXJzLC0tPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5TZWNvbmQgV2F0Y2htYW48L1NQRUFLRVI+Ci08TElORT5Zb3UnbGwgYmUgbWFkZSBicmluZyBEZWZvcm1lZCBmb3J0aCwgSSB3YXJyYW50IHlvdS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNPTlJBREU8L1NQRUFLRVI+Ci08TElORT5NYXN0ZXJzLC0tPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5GaXJzdCBXYXRjaG1hbjwvU1BFQUtFUj4KLTxMSU5FPk5ldmVyIHNwZWFrOiB3ZSBjaGFyZ2UgeW91IGxldCB1cyBvYmV5IHlvdSB0byBnbyB3aXRoIHVzLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Qk9SQUNISU88L1NQRUFLRVI+Ci08TElORT5XZSBhcmUgbGlrZSB0byBwcm92ZSBhIGdvb2RseSBjb21tb2RpdHksIGJlaW5nIHRha2VuPC9MSU5FPgotPExJTkU+dXAgb2YgdGhlc2UgbWVuJ3MgYmlsbHMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DT05SQURFPC9TUEVBS0VSPgotPExJTkU+QSBjb21tb2RpdHkgaW4gcXVlc3Rpb24sIEkgd2FycmFudCB5b3UuIENvbWUsIHdlJ2xsIG9iZXkgeW91LjwvTElORT4KLTwvU1BFRUNIPgotCi0KLTxTVEFHRURJUj5FeGV1bnQ8L1NUQUdFRElSPgotPC9TQ0VORT4KLQotPFNDRU5FPjxUSVRMRT5TQ0VORSBJVi4gIEhFUk8ncyBhcGFydG1lbnQuPC9USVRMRT4KLTxTVEFHRURJUj5FbnRlciBIRVJPLCBNQVJHQVJFVCwgYW5kIFVSU1VMQTwvU1RBR0VESVI+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5IRVJPPC9TUEVBS0VSPgotPExJTkU+R29vZCBVcnN1bGEsIHdha2UgbXkgY291c2luIEJlYXRyaWNlLCBhbmQgZGVzaXJlPC9MSU5FPgotPExJTkU+aGVyIHRvIHJpc2UuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5VUlNVTEE8L1NQRUFLRVI+Ci08TElORT5JIHdpbGwsIGxhZHkuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5IRVJPPC9TUEVBS0VSPgotPExJTkU+QW5kIGJpZCBoZXIgY29tZSBoaXRoZXIuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5VUlNVTEE8L1NQRUFLRVI+Ci08TElORT5XZWxsLjwvTElORT4KLTwvU1BFRUNIPgotCi0KLTxTVEFHRURJUj5FeGl0PC9TVEFHRURJUj4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPk1BUkdBUkVUPC9TUEVBS0VSPgotPExJTkU+VHJvdGgsIEkgdGhpbmsgeW91ciBvdGhlciByYWJhdG8gd2VyZSBiZXR0ZXIuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5IRVJPPC9TUEVBS0VSPgotPExJTkU+Tm8sIHByYXkgdGhlZSwgZ29vZCBNZWcsIEknbGwgd2VhciB0aGlzLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TUFSR0FSRVQ8L1NQRUFLRVI+Ci08TElORT5CeSBteSB0cm90aCwgJ3Mgbm90IHNvIGdvb2Q7IGFuZCBJIHdhcnJhbnQgeW91cjwvTElORT4KLTxMSU5FPmNvdXNpbiB3aWxsIHNheSBzby48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkhFUk88L1NQRUFLRVI+Ci08TElORT5NeSBjb3VzaW4ncyBhIGZvb2wsIGFuZCB0aG91IGFydCBhbm90aGVyOiBJJ2xsIHdlYXI8L0xJTkU+Ci08TElORT5ub25lIGJ1dCB0aGlzLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TUFSR0FSRVQ8L1NQRUFLRVI+Ci08TElORT5JIGxpa2UgdGhlIG5ldyB0aXJlIHdpdGhpbiBleGNlbGxlbnRseSwgaWYgdGhlIGhhaXI8L0xJTkU+Ci08TElORT53ZXJlIGEgdGhvdWdodCBicm93bmVyOyBhbmQgeW91ciBnb3duJ3MgYSBtb3N0IHJhcmU8L0xJTkU+Ci08TElORT5mYXNoaW9uLCBpJyBmYWl0aC4gSSBzYXcgdGhlIER1Y2hlc3Mgb2YgTWlsYW4nczwvTElORT4KLTxMSU5FPmdvd24gdGhhdCB0aGV5IHByYWlzZSBzby48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkhFUk88L1NQRUFLRVI+Ci08TElORT5PLCB0aGF0IGV4Y2VlZHMsIHRoZXkgc2F5LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TUFSR0FSRVQ8L1NQRUFLRVI+Ci08TElORT5CeSBteSB0cm90aCwgJ3MgYnV0IGEgbmlnaHQtZ293biBpbiByZXNwZWN0IG9mPC9MSU5FPgotPExJTkU+eW91cnM6IGNsb3RoIG8nIGdvbGQsIGFuZCBjdXRzLCBhbmQgbGFjZWQgd2l0aDwvTElORT4KLTxMSU5FPnNpbHZlciwgc2V0IHdpdGggcGVhcmxzLCBkb3duIHNsZWV2ZXMsIHNpZGUgc2xlZXZlcyw8L0xJTkU+Ci08TElORT5hbmQgc2tpcnRzLCByb3VuZCB1bmRlcmJvcm5lIHdpdGggYSBibHVpc2ggdGluc2VsOjwvTElORT4KLTxMSU5FPmJ1dCBmb3IgYSBmaW5lLCBxdWFpbnQsIGdyYWNlZnVsIGFuZCBleGNlbGxlbnQ8L0xJTkU+Ci08TElORT5mYXNoaW9uLCB5b3VycyBpcyB3b3J0aCB0ZW4gb24gJ3QuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5IRVJPPC9TUEVBS0VSPgotPExJTkU+R29kIGdpdmUgbWUgam95IHRvIHdlYXIgaXQhIGZvciBteSBoZWFydCBpczwvTElORT4KLTxMSU5FPmV4Y2VlZGluZyBoZWF2eS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPk1BUkdBUkVUPC9TUEVBS0VSPgotPExJTkU+J1R3aWxsIGJlIGhlYXZpZXIgc29vbiBieSB0aGUgd2VpZ2h0IG9mIGEgbWFuLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+SEVSTzwvU1BFQUtFUj4KLTxMSU5FPkZpZSB1cG9uIHRoZWUhIGFydCBub3QgYXNoYW1lZD88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPk1BUkdBUkVUPC9TUEVBS0VSPgotPExJTkU+T2Ygd2hhdCwgbGFkeT8gb2Ygc3BlYWtpbmcgaG9ub3VyYWJseT8gSXMgbm90PC9MSU5FPgotPExJTkU+bWFycmlhZ2UgaG9ub3VyYWJsZSBpbiBhIGJlZ2dhcj8gSXMgbm90IHlvdXIgbG9yZDwvTElORT4KLTxMSU5FPmhvbm91cmFibGUgd2l0aG91dCBtYXJyaWFnZT8gSSB0aGluayB5b3Ugd291bGQgaGF2ZTwvTElORT4KLTxMSU5FPm1lIHNheSwgJ3NhdmluZyB5b3VyIHJldmVyZW5jZSwgYSBodXNiYW5kOicgYW5kIGJhZDwvTElORT4KLTxMSU5FPnRoaW5raW5nIGRvIG5vdCB3cmVzdCB0cnVlIHNwZWFraW5nLCBJJ2xsIG9mZmVuZDwvTElORT4KLTxMSU5FPm5vYm9keTogaXMgdGhlcmUgYW55IGhhcm0gaW4gJ3RoZSBoZWF2aWVyIGZvciBhPC9MSU5FPgotPExJTkU+aHVzYmFuZCc/IE5vbmUsIEkgdGhpbmssIGFuZCBpdCBiZSB0aGUgcmlnaHQgaHVzYmFuZDwvTElORT4KLTxMSU5FPmFuZCB0aGUgcmlnaHQgd2lmZTsgb3RoZXJ3aXNlICd0aXMgbGlnaHQsIGFuZCBub3Q8L0xJTkU+Ci08TElORT5oZWF2eTogYXNrIG15IExhZHkgQmVhdHJpY2UgZWxzZTsgaGVyZSBzaGUgY29tZXMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLQotPFNUQUdFRElSPkVudGVyIEJFQVRSSUNFPC9TVEFHRURJUj4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkhFUk88L1NQRUFLRVI+Ci08TElORT5Hb29kIG1vcnJvdywgY296LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5Hb29kIG1vcnJvdywgc3dlZXQgSGVyby48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkhFUk88L1NQRUFLRVI+Ci08TElORT5XaHkgaG93IG5vdz8gZG8geW91IHNwZWFrIGluIHRoZSBzaWNrIHR1bmU/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPkkgYW0gb3V0IG9mIGFsbCBvdGhlciB0dW5lLCBtZXRoaW5rcy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPk1BUkdBUkVUPC9TUEVBS0VSPgotPExJTkU+Q2xhcCdzIGludG8gJ0xpZ2h0IG8nIGxvdmU7JyB0aGF0IGdvZXMgd2l0aG91dCBhPC9MSU5FPgotPExJTkU+YnVyZGVuOiBkbyB5b3Ugc2luZyBpdCwgYW5kIEknbGwgZGFuY2UgaXQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPlllIGxpZ2h0IG8nIGxvdmUsIHdpdGggeW91ciBoZWVscyEgdGhlbiwgaWYgeW91cjwvTElORT4KLTxMSU5FPmh1c2JhbmQgaGF2ZSBzdGFibGVzIGVub3VnaCwgeW91J2xsIHNlZSBoZSBzaGFsbDwvTElORT4KLTxMSU5FPmxhY2sgbm8gYmFybnMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5NQVJHQVJFVDwvU1BFQUtFUj4KLTxMSU5FPk8gaWxsZWdpdGltYXRlIGNvbnN0cnVjdGlvbiEgSSBzY29ybiB0aGF0IHdpdGggbXkgaGVlbHMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPidUaXMgYWxtb3N0IGZpdmUgbydjbG9jaywgY291c2luOyB0aXMgdGltZSB5b3Ugd2VyZTwvTElORT4KLTxMSU5FPnJlYWR5LiBCeSBteSB0cm90aCwgSSBhbSBleGNlZWRpbmcgaWxsOiBoZWlnaC1obyE8L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPk1BUkdBUkVUPC9TUEVBS0VSPgotPExJTkU+Rm9yIGEgaGF3aywgYSBob3JzZSwgb3IgYSBodXNiYW5kPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5Gb3IgdGhlIGxldHRlciB0aGF0IGJlZ2lucyB0aGVtIGFsbCwgSC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPk1BUkdBUkVUPC9TUEVBS0VSPgotPExJTkU+V2VsbCwgYW5kIHlvdSBiZSBub3QgdHVybmVkIFR1cmssIHRoZXJlJ3Mgbm8gbW9yZTwvTElORT4KLTxMSU5FPnNhaWxpbmcgYnkgdGhlIHN0YXIuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPldoYXQgbWVhbnMgdGhlIGZvb2wsIHRyb3c/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5NQVJHQVJFVDwvU1BFQUtFUj4KLTxMSU5FPk5vdGhpbmcgSTsgYnV0IEdvZCBzZW5kIGV2ZXJ5IG9uZSB0aGVpciBoZWFydCdzIGRlc2lyZSE8L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkhFUk88L1NQRUFLRVI+Ci08TElORT5UaGVzZSBnbG92ZXMgdGhlIGNvdW50IHNlbnQgbWU7IHRoZXkgYXJlIGFuPC9MSU5FPgotPExJTkU+ZXhjZWxsZW50IHBlcmZ1bWUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPkkgYW0gc3R1ZmZlZCwgY291c2luOyBJIGNhbm5vdCBzbWVsbC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPk1BUkdBUkVUPC9TUEVBS0VSPgotPExJTkU+QSBtYWlkLCBhbmQgc3R1ZmZlZCEgdGhlcmUncyBnb29kbHkgY2F0Y2hpbmcgb2YgY29sZC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+TywgR29kIGhlbHAgbWUhIEdvZCBoZWxwIG1lISBob3cgbG9uZyBoYXZlIHlvdTwvTElORT4KLTxMSU5FPnByb2Zlc3NlZCBhcHByZWhlbnNpb24/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5NQVJHQVJFVDwvU1BFQUtFUj4KLTxMSU5FPkV2ZW4gc2luY2UgeW91IGxlZnQgaXQuIERvdGggbm90IG15IHdpdCBiZWNvbWUgbWUgcmFyZWx5PzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5JdCBpcyBub3Qgc2VlbiBlbm91Z2gsIHlvdSBzaG91bGQgd2VhciBpdCBpbiB5b3VyPC9MSU5FPgotPExJTkU+Y2FwLiBCeSBteSB0cm90aCwgSSBhbSBzaWNrLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TUFSR0FSRVQ8L1NQRUFLRVI+Ci08TElORT5HZXQgeW91IHNvbWUgb2YgdGhpcyBkaXN0aWxsZWQgQ2FyZHV1cyBCZW5lZGljdHVzLDwvTElORT4KLTxMSU5FPmFuZCBsYXkgaXQgdG8geW91ciBoZWFydDogaXQgaXMgdGhlIG9ubHkgdGhpbmcgZm9yIGEgcXVhbG0uPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5IRVJPPC9TUEVBS0VSPgotPExJTkU+VGhlcmUgdGhvdSBwcmlja2VzdCBoZXIgd2l0aCBhIHRoaXN0bGUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPkJlbmVkaWN0dXMhIHdoeSBCZW5lZGljdHVzPyB5b3UgaGF2ZSBzb21lIG1vcmFsIGluPC9MSU5FPgotPExJTkU+dGhpcyBCZW5lZGljdHVzLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TUFSR0FSRVQ8L1NQRUFLRVI+Ci08TElORT5Nb3JhbCEgbm8sIGJ5IG15IHRyb3RoLCBJIGhhdmUgbm8gbW9yYWwgbWVhbmluZzsgSTwvTElORT4KLTxMSU5FPm1lYW50LCBwbGFpbiBob2x5LXRoaXN0bGUuIFlvdSBtYXkgdGhpbmsgcGVyY2hhbmNlPC9MSU5FPgotPExJTkU+dGhhdCBJIHRoaW5rIHlvdSBhcmUgaW4gbG92ZTogbmF5LCBieSdyIGxhZHksIEkgYW08L0xJTkU+Ci08TElORT5ub3Qgc3VjaCBhIGZvb2wgdG8gdGhpbmsgd2hhdCBJIGxpc3QsIG5vciBJIGxpc3Q8L0xJTkU+Ci08TElORT5ub3QgdG8gdGhpbmsgd2hhdCBJIGNhbiwgbm9yIGluZGVlZCBJIGNhbm5vdCB0aGluayw8L0xJTkU+Ci08TElORT5pZiBJIHdvdWxkIHRoaW5rIG15IGhlYXJ0IG91dCBvZiB0aGlua2luZywgdGhhdCB5b3U8L0xJTkU+Ci08TElORT5hcmUgaW4gbG92ZSBvciB0aGF0IHlvdSB3aWxsIGJlIGluIGxvdmUgb3IgdGhhdCB5b3U8L0xJTkU+Ci08TElORT5jYW4gYmUgaW4gbG92ZS4gWWV0IEJlbmVkaWNrIHdhcyBzdWNoIGFub3RoZXIsIGFuZDwvTElORT4KLTxMSU5FPm5vdyBpcyBoZSBiZWNvbWUgYSBtYW46IGhlIHN3b3JlIGhlIHdvdWxkIG5ldmVyPC9MSU5FPgotPExJTkU+bWFycnksIGFuZCB5ZXQgbm93LCBpbiBkZXNwaXRlIG9mIGhpcyBoZWFydCwgaGUgZWF0czwvTElORT4KLTxMSU5FPmhpcyBtZWF0IHdpdGhvdXQgZ3J1ZGdpbmc6IGFuZCBob3cgeW91IG1heSBiZTwvTElORT4KLTxMSU5FPmNvbnZlcnRlZCBJIGtub3cgbm90LCBidXQgbWV0aGlua3MgeW91IGxvb2sgd2l0aDwvTElORT4KLTxMSU5FPnlvdXIgZXllcyBhcyBvdGhlciB3b21lbiBkby48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+V2hhdCBwYWNlIGlzIHRoaXMgdGhhdCB0aHkgdG9uZ3VlIGtlZXBzPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TUFSR0FSRVQ8L1NQRUFLRVI+Ci08TElORT5Ob3QgYSBmYWxzZSBnYWxsb3AuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLQotPFNUQUdFRElSPlJlLWVudGVyIFVSU1VMQTwvU1RBR0VESVI+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5VUlNVTEE8L1NQRUFLRVI+Ci08TElORT5NYWRhbSwgd2l0aGRyYXc6IHRoZSBwcmluY2UsIHRoZSBjb3VudCwgU2lnbmlvcjwvTElORT4KLTxMSU5FPkJlbmVkaWNrLCBEb24gSm9obiwgYW5kIGFsbCB0aGUgZ2FsbGFudHMgb2YgdGhlPC9MSU5FPgotPExJTkU+dG93biwgYXJlIGNvbWUgdG8gZmV0Y2ggeW91IHRvIGNodXJjaC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkhFUk88L1NQRUFLRVI+Ci08TElORT5IZWxwIHRvIGRyZXNzIG1lLCBnb29kIGNveiwgZ29vZCBNZWcsIGdvb2QgVXJzdWxhLjwvTElORT4KLTwvU1BFRUNIPgotCi0KLTxTVEFHRURJUj5FeGV1bnQ8L1NUQUdFRElSPgotPC9TQ0VORT4KLQotPFNDRU5FPjxUSVRMRT5TQ0VORSBWLiAgQW5vdGhlciByb29tIGluIExFT05BVE8nUyBob3VzZS48L1RJVExFPgotPFNUQUdFRElSPkVudGVyIExFT05BVE8sIHdpdGggRE9HQkVSUlkgYW5kIFZFUkdFUzwvU1RBR0VESVI+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+V2hhdCB3b3VsZCB5b3Ugd2l0aCBtZSwgaG9uZXN0IG5laWdoYm91cj88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPR0JFUlJZPC9TUEVBS0VSPgotPExJTkU+TWFycnksIHNpciwgSSB3b3VsZCBoYXZlIHNvbWUgY29uZmlkZW5jZSB3aXRoIHlvdTwvTElORT4KLTxMSU5FPnRoYXQgZGVjZXJucyB5b3UgbmVhcmx5LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPkJyaWVmLCBJIHByYXkgeW91OyBmb3IgeW91IHNlZSBpdCBpcyBhIGJ1c3kgdGltZSB3aXRoIG1lLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9HQkVSUlk8L1NQRUFLRVI+Ci08TElORT5NYXJyeSwgdGhpcyBpdCBpcywgc2lyLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+VkVSR0VTPC9TUEVBS0VSPgotPExJTkU+WWVzLCBpbiB0cnV0aCBpdCBpcywgc2lyLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPldoYXQgaXMgaXQsIG15IGdvb2QgZnJpZW5kcz88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPR0JFUlJZPC9TUEVBS0VSPgotPExJTkU+R29vZG1hbiBWZXJnZXMsIHNpciwgc3BlYWtzIGEgbGl0dGxlIG9mZiB0aGU8L0xJTkU+Ci08TElORT5tYXR0ZXI6IGFuIG9sZCBtYW4sIHNpciwgYW5kIGhpcyB3aXRzIGFyZSBub3Qgc288L0xJTkU+Ci08TElORT5ibHVudCBhcywgR29kIGhlbHAsIEkgd291bGQgZGVzaXJlIHRoZXkgd2VyZTsgYnV0LDwvTElORT4KLTxMSU5FPmluIGZhaXRoLCBob25lc3QgYXMgdGhlIHNraW4gYmV0d2VlbiBoaXMgYnJvd3MuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5WRVJHRVM8L1NQRUFLRVI+Ci08TElORT5ZZXMsIEkgdGhhbmsgR29kIEkgYW0gYXMgaG9uZXN0IGFzIGFueSBtYW4gbGl2aW5nPC9MSU5FPgotPExJTkU+dGhhdCBpcyBhbiBvbGQgbWFuIGFuZCBubyBob25lc3RlciB0aGFuIEkuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET0dCRVJSWTwvU1BFQUtFUj4KLTxMSU5FPkNvbXBhcmlzb25zIGFyZSBvZG9yb3VzOiBwYWxhYnJhcywgbmVpZ2hib3VyIFZlcmdlcy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5OZWlnaGJvdXJzLCB5b3UgYXJlIHRlZGlvdXMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET0dCRVJSWTwvU1BFQUtFUj4KLTxMSU5FPkl0IHBsZWFzZXMgeW91ciB3b3JzaGlwIHRvIHNheSBzbywgYnV0IHdlIGFyZSB0aGU8L0xJTkU+Ci08TElORT5wb29yIGR1a2UncyBvZmZpY2VyczsgYnV0IHRydWx5LCBmb3IgbWluZSBvd24gcGFydCw8L0xJTkU+Ci08TElORT5pZiBJIHdlcmUgYXMgdGVkaW91cyBhcyBhIGtpbmcsIEkgY291bGQgZmluZCBpdCBpbjwvTElORT4KLTxMSU5FPm15IGhlYXJ0IHRvIGJlc3RvdyBpdCBhbGwgb2YgeW91ciB3b3JzaGlwLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPkFsbCB0aHkgdGVkaW91c25lc3Mgb24gbWUsIGFoPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9HQkVSUlk8L1NQRUFLRVI+Ci08TElORT5ZZWEsIGFuICd0d2VyZSBhIHRob3VzYW5kIHBvdW5kIG1vcmUgdGhhbiAndGlzOyBmb3I8L0xJTkU+Ci08TElORT5JIGhlYXIgYXMgZ29vZCBleGNsYW1hdGlvbiBvbiB5b3VyIHdvcnNoaXAgYXMgb2YgYW55PC9MSU5FPgotPExJTkU+bWFuIGluIHRoZSBjaXR5OyBhbmQgdGhvdWdoIEkgYmUgYnV0IGEgcG9vciBtYW4sIEk8L0xJTkU+Ci08TElORT5hbSBnbGFkIHRvIGhlYXIgaXQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5WRVJHRVM8L1NQRUFLRVI+Ci08TElORT5BbmQgc28gYW0gSS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5JIHdvdWxkIGZhaW4ga25vdyB3aGF0IHlvdSBoYXZlIHRvIHNheS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPlZFUkdFUzwvU1BFQUtFUj4KLTxMSU5FPk1hcnJ5LCBzaXIsIG91ciB3YXRjaCB0by1uaWdodCwgZXhjZXB0aW5nIHlvdXI8L0xJTkU+Ci08TElORT53b3JzaGlwJ3MgcHJlc2VuY2UsIGhhJyB0YSdlbiBhIGNvdXBsZSBvZiBhcyBhcnJhbnQ8L0xJTkU+Ci08TElORT5rbmF2ZXMgYXMgYW55IGluIE1lc3NpbmEuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET0dCRVJSWTwvU1BFQUtFUj4KLTxMSU5FPkEgZ29vZCBvbGQgbWFuLCBzaXI7IGhlIHdpbGwgYmUgdGFsa2luZzogYXMgdGhleTwvTElORT4KLTxMSU5FPnNheSwgd2hlbiB0aGUgYWdlIGlzIGluLCB0aGUgd2l0IGlzIG91dDogR29kIGhlbHA8L0xJTkU+Ci08TElORT51cyEgaXQgaXMgYSB3b3JsZCB0byBzZWUuIFdlbGwgc2FpZCwgaScgZmFpdGgsPC9MSU5FPgotPExJTkU+bmVpZ2hib3VyIFZlcmdlczogd2VsbCwgR29kJ3MgYSBnb29kIG1hbjsgYW4gdHdvIG1lbjwvTElORT4KLTxMSU5FPnJpZGUgb2YgYSBob3JzZSwgb25lIG11c3QgcmlkZSBiZWhpbmQuIEFuIGhvbmVzdDwvTElORT4KLTxMSU5FPnNvdWwsIGknIGZhaXRoLCBzaXI7IGJ5IG15IHRyb3RoIGhlIGlzLCBhcyBldmVyPC9MSU5FPgotPExJTkU+YnJva2UgYnJlYWQ7IGJ1dCBHb2QgaXMgdG8gYmUgd29yc2hpcHBlZDsgYWxsIG1lbjwvTElORT4KLTxMSU5FPmFyZSBub3QgYWxpa2U7IGFsYXMsIGdvb2QgbmVpZ2hib3VyITwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPkluZGVlZCwgbmVpZ2hib3VyLCBoZSBjb21lcyB0b28gc2hvcnQgb2YgeW91LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9HQkVSUlk8L1NQRUFLRVI+Ci08TElORT5HaWZ0cyB0aGF0IEdvZCBnaXZlcy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5JIG11c3QgbGVhdmUgeW91LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9HQkVSUlk8L1NQRUFLRVI+Ci08TElORT5PbmUgd29yZCwgc2lyOiBvdXIgd2F0Y2gsIHNpciwgaGF2ZSBpbmRlZWQ8L0xJTkU+Ci08TElORT5jb21wcmVoZW5kZWQgdHdvIGFzcGljaW91cyBwZXJzb25zLCBhbmQgd2Ugd291bGQ8L0xJTkU+Ci08TElORT5oYXZlIHRoZW0gdGhpcyBtb3JuaW5nIGV4YW1pbmVkIGJlZm9yZSB5b3VyIHdvcnNoaXAuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+VGFrZSB0aGVpciBleGFtaW5hdGlvbiB5b3Vyc2VsZiBhbmQgYnJpbmcgaXQgbWU6IEk8L0xJTkU+Ci08TElORT5hbSBub3cgaW4gZ3JlYXQgaGFzdGUsIGFzIGl0IG1heSBhcHBlYXIgdW50byB5b3UuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET0dCRVJSWTwvU1BFQUtFUj4KLTxMSU5FPkl0IHNoYWxsIGJlIHN1ZmZpZ2FuY2UuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+RHJpbmsgc29tZSB3aW5lIGVyZSB5b3UgZ286IGZhcmUgeW91IHdlbGwuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLQotPFNUQUdFRElSPkVudGVyIGEgTWVzc2VuZ2VyPC9TVEFHRURJUj4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPk1lc3NlbmdlcjwvU1BFQUtFUj4KLTxMSU5FPk15IGxvcmQsIHRoZXkgc3RheSBmb3IgeW91IHRvIGdpdmUgeW91ciBkYXVnaHRlciB0bzwvTElORT4KLTxMSU5FPmhlciBodXNiYW5kLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPkknbGwgd2FpdCB1cG9uIHRoZW06IEkgYW0gcmVhZHkuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLQotPFNUQUdFRElSPkV4ZXVudCBMRU9OQVRPIGFuZCBNZXNzZW5nZXI8L1NUQUdFRElSPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9HQkVSUlk8L1NQRUFLRVI+Ci08TElORT5HbywgZ29vZCBwYXJ0bmVyLCBnbywgZ2V0IHlvdSB0byBGcmFuY2lzIFNlYWNvbGU7PC9MSU5FPgotPExJTkU+YmlkIGhpbSBicmluZyBoaXMgcGVuIGFuZCBpbmtob3JuIHRvIHRoZSBnYW9sOiB3ZTwvTElORT4KLTxMSU5FPmFyZSBub3cgdG8gZXhhbWluYXRpb24gdGhlc2UgbWVuLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+VkVSR0VTPC9TUEVBS0VSPgotPExJTkU+QW5kIHdlIG11c3QgZG8gaXQgd2lzZWx5LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9HQkVSUlk8L1NQRUFLRVI+Ci08TElORT5XZSB3aWxsIHNwYXJlIGZvciBubyB3aXQsIEkgd2FycmFudCB5b3U7IGhlcmUnczwvTElORT4KLTxMSU5FPnRoYXQgc2hhbGwgZHJpdmUgc29tZSBvZiB0aGVtIHRvIGEgbm9uLWNvbWU6IG9ubHk8L0xJTkU+Ci08TElORT5nZXQgdGhlIGxlYXJuZWQgd3JpdGVyIHRvIHNldCBkb3duIG91cjwvTElORT4KLTxMSU5FPmV4Y29tbXVuaWNhdGlvbiBhbmQgbWVldCBtZSBhdCB0aGUgZ2FvbC48L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+RXhldW50PC9TVEFHRURJUj4KLTwvU0NFTkU+Ci0KLTwvQUNUPgotCi08QUNUPjxUSVRMRT5BQ1QgSVY8L1RJVExFPgotCi08U0NFTkU+PFRJVExFPlNDRU5FIEkuICBBIGNodXJjaC48L1RJVExFPgotPFNUQUdFRElSPkVudGVyIERPTiBQRURSTywgRE9OIEpPSE4sIExFT05BVE8sIEZSSUFSIEZSQU5DSVMsCi1DTEFVRElPLCBCRU5FRElDSywgSEVSTywgQkVBVFJJQ0UsIGFuZCBBdHRlbmRhbnRzPC9TVEFHRURJUj4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5Db21lLCBGcmlhciBGcmFuY2lzLCBiZSBicmllZjsgb25seSB0byB0aGUgcGxhaW48L0xJTkU+Ci08TElORT5mb3JtIG9mIG1hcnJpYWdlLCBhbmQgeW91IHNoYWxsIHJlY291bnQgdGhlaXI8L0xJTkU+Ci08TElORT5wYXJ0aWN1bGFyIGR1dGllcyBhZnRlcndhcmRzLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RlJJQVIgRlJBTkNJUzwvU1BFQUtFUj4KLTxMSU5FPllvdSBjb21lIGhpdGhlciwgbXkgbG9yZCwgdG8gbWFycnkgdGhpcyBsYWR5LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPk5vLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPlRvIGJlIG1hcnJpZWQgdG8gaGVyOiBmcmlhciwgeW91IGNvbWUgdG8gbWFycnkgaGVyLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RlJJQVIgRlJBTkNJUzwvU1BFQUtFUj4KLTxMSU5FPkxhZHksIHlvdSBjb21lIGhpdGhlciB0byBiZSBtYXJyaWVkIHRvIHRoaXMgY291bnQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5IRVJPPC9TUEVBS0VSPgotPExJTkU+SSBkby48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkZSSUFSIEZSQU5DSVM8L1NQRUFLRVI+Ci08TElORT5JZiBlaXRoZXIgb2YgeW91IGtub3cgYW55IGlud2FyZCBpbXBlZGltZW50IHdoeSB5b3U8L0xJTkU+Ci08TElORT5zaG91bGQgbm90IGJlIGNvbmpvaW5lZCwgY2hhcmdlIHlvdSwgb24geW91ciBzb3Vscyw8L0xJTkU+Ci08TElORT50byB1dHRlciBpdC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5Lbm93IHlvdSBhbnksIEhlcm8/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5IRVJPPC9TUEVBS0VSPgotPExJTkU+Tm9uZSwgbXkgbG9yZC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkZSSUFSIEZSQU5DSVM8L1NQRUFLRVI+Ci08TElORT5Lbm93IHlvdSBhbnksIGNvdW50PzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPkkgZGFyZSBtYWtlIGhpcyBhbnN3ZXIsIG5vbmUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+Tywgd2hhdCBtZW4gZGFyZSBkbyEgd2hhdCBtZW4gbWF5IGRvISB3aGF0IG1lbiBkYWlseTwvTElORT4KLTxMSU5FPmRvLCBub3Qga25vd2luZyB3aGF0IHRoZXkgZG8hPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPkhvdyBub3chIGludGVyamVjdGlvbnM/IFdoeSwgdGhlbiwgc29tZSBiZSBvZjwvTElORT4KLTxMSU5FPmxhdWdoaW5nLCBhcywgYWgsIGhhLCBoZSE8L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5TdGFuZCB0aGVlIGJ5LCBmcmlhci4gRmF0aGVyLCBieSB5b3VyIGxlYXZlOjwvTElORT4KLTxMSU5FPldpbGwgeW91IHdpdGggZnJlZSBhbmQgdW5jb25zdHJhaW5lZCBzb3VsPC9MSU5FPgotPExJTkU+R2l2ZSBtZSB0aGlzIG1haWQsIHlvdXIgZGF1Z2h0ZXI/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+QXMgZnJlZWx5LCBzb24sIGFzIEdvZCBkaWQgZ2l2ZSBoZXIgbWUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+QW5kIHdoYXQgaGF2ZSBJIHRvIGdpdmUgeW91IGJhY2ssIHdob3NlIHdvcnRoPC9MSU5FPgotPExJTkU+TWF5IGNvdW50ZXJwb2lzZSB0aGlzIHJpY2ggYW5kIHByZWNpb3VzIGdpZnQ/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5Ob3RoaW5nLCB1bmxlc3MgeW91IHJlbmRlciBoZXIgYWdhaW4uPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+U3dlZXQgcHJpbmNlLCB5b3UgbGVhcm4gbWUgbm9ibGUgdGhhbmtmdWxuZXNzLjwvTElORT4KLTxMSU5FPlRoZXJlLCBMZW9uYXRvLCB0YWtlIGhlciBiYWNrIGFnYWluOjwvTElORT4KLTxMSU5FPkdpdmUgbm90IHRoaXMgcm90dGVuIG9yYW5nZSB0byB5b3VyIGZyaWVuZDs8L0xJTkU+Ci08TElORT5TaGUncyBidXQgdGhlIHNpZ24gYW5kIHNlbWJsYW5jZSBvZiBoZXIgaG9ub3VyLjwvTElORT4KLTxMSU5FPkJlaG9sZCBob3cgbGlrZSBhIG1haWQgc2hlIGJsdXNoZXMgaGVyZSE8L0xJTkU+Ci08TElORT5PLCB3aGF0IGF1dGhvcml0eSBhbmQgc2hvdyBvZiB0cnV0aDwvTElORT4KLTxMSU5FPkNhbiBjdW5uaW5nIHNpbiBjb3ZlciBpdHNlbGYgd2l0aGFsITwvTElORT4KLTxMSU5FPkNvbWVzIG5vdCB0aGF0IGJsb29kIGFzIG1vZGVzdCBldmlkZW5jZTwvTElORT4KLTxMSU5FPlRvIHdpdG5lc3Mgc2ltcGxlIHZpcnR1ZT8gV291bGQgeW91IG5vdCBzd2Vhciw8L0xJTkU+Ci08TElORT5BbGwgeW91IHRoYXQgc2VlIGhlciwgdGhhdCBzaGUgd2VyZSBhIG1haWQsPC9MSU5FPgotPExJTkU+QnkgdGhlc2UgZXh0ZXJpb3Igc2hvd3M/IEJ1dCBzaGUgaXMgbm9uZTo8L0xJTkU+Ci08TElORT5TaGUga25vd3MgdGhlIGhlYXQgb2YgYSBsdXh1cmlvdXMgYmVkOzwvTElORT4KLTxMSU5FPkhlciBibHVzaCBpcyBndWlsdGluZXNzLCBub3QgbW9kZXN0eS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5XaGF0IGRvIHlvdSBtZWFuLCBteSBsb3JkPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPk5vdCB0byBiZSBtYXJyaWVkLDwvTElORT4KLTxMSU5FPk5vdCB0byBrbml0IG15IHNvdWwgdG8gYW4gYXBwcm92ZWQgd2FudG9uLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPkRlYXIgbXkgbG9yZCwgaWYgeW91LCBpbiB5b3VyIG93biBwcm9vZiw8L0xJTkU+Ci08TElORT5IYXZlIHZhbnF1aXNoJ2QgdGhlIHJlc2lzdGFuY2Ugb2YgaGVyIHlvdXRoLDwvTElORT4KLTxMSU5FPkFuZCBtYWRlIGRlZmVhdCBvZiBoZXIgdmlyZ2luaXR5LC0tPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+SSBrbm93IHdoYXQgeW91IHdvdWxkIHNheTogaWYgSSBoYXZlIGtub3duIGhlciw8L0xJTkU+Ci08TElORT5Zb3Ugd2lsbCBzYXkgc2hlIGRpZCBlbWJyYWNlIG1lIGFzIGEgaHVzYmFuZCw8L0xJTkU+Ci08TElORT5BbmQgc28gZXh0ZW51YXRlIHRoZSAnZm9yZWhhbmQgc2luOjwvTElORT4KLTxMSU5FPk5vLCBMZW9uYXRvLDwvTElORT4KLTxMSU5FPkkgbmV2ZXIgdGVtcHRlZCBoZXIgd2l0aCB3b3JkIHRvbyBsYXJnZTs8L0xJTkU+Ci08TElORT5CdXQsIGFzIGEgYnJvdGhlciB0byBoaXMgc2lzdGVyLCBzaG93J2Q8L0xJTkU+Ci08TElORT5CYXNoZnVsIHNpbmNlcml0eSBhbmQgY29tZWx5IGxvdmUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5IRVJPPC9TUEVBS0VSPgotPExJTkU+QW5kIHNlZW0nZCBJIGV2ZXIgb3RoZXJ3aXNlIHRvIHlvdT88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5PdXQgb24gdGhlZSEgU2VlbWluZyEgSSB3aWxsIHdyaXRlIGFnYWluc3QgaXQ6PC9MSU5FPgotPExJTkU+WW91IHNlZW0gdG8gbWUgYXMgRGlhbiBpbiBoZXIgb3JiLDwvTElORT4KLTxMSU5FPkFzIGNoYXN0ZSBhcyBpcyB0aGUgYnVkIGVyZSBpdCBiZSBibG93bjs8L0xJTkU+Ci08TElORT5CdXQgeW91IGFyZSBtb3JlIGludGVtcGVyYXRlIGluIHlvdXIgYmxvb2Q8L0xJTkU+Ci08TElORT5UaGFuIFZlbnVzLCBvciB0aG9zZSBwYW1wZXInZCBhbmltYWxzPC9MSU5FPgotPExJTkU+VGhhdCByYWdlIGluIHNhdmFnZSBzZW5zdWFsaXR5LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+SEVSTzwvU1BFQUtFUj4KLTxMSU5FPklzIG15IGxvcmQgd2VsbCwgdGhhdCBoZSBkb3RoIHNwZWFrIHNvIHdpZGU/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+U3dlZXQgcHJpbmNlLCB3aHkgc3BlYWsgbm90IHlvdT88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPldoYXQgc2hvdWxkIEkgc3BlYWs/PC9MSU5FPgotPExJTkU+SSBzdGFuZCBkaXNob25vdXInZCwgdGhhdCBoYXZlIGdvbmUgYWJvdXQ8L0xJTkU+Ci08TElORT5UbyBsaW5rIG15IGRlYXIgZnJpZW5kIHRvIGEgY29tbW9uIHN0YWxlLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPkFyZSB0aGVzZSB0aGluZ3Mgc3Bva2VuLCBvciBkbyBJIGJ1dCBkcmVhbT88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBKT0hOPC9TUEVBS0VSPgotPExJTkU+U2lyLCB0aGV5IGFyZSBzcG9rZW4sIGFuZCB0aGVzZSB0aGluZ3MgYXJlIHRydWUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPlRoaXMgbG9va3Mgbm90IGxpa2UgYSBudXB0aWFsLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+SEVSTzwvU1BFQUtFUj4KLTxMSU5FPlRydWUhIE8gR29kITwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPkxlb25hdG8sIHN0YW5kIEkgaGVyZT88L0xJTkU+Ci08TElORT5JcyB0aGlzIHRoZSBwcmluY2U/IGlzIHRoaXMgdGhlIHByaW5jZSdzIGJyb3RoZXI/PC9MSU5FPgotPExJTkU+SXMgdGhpcyBmYWNlIEhlcm8ncz8gYXJlIG91ciBleWVzIG91ciBvd24/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+QWxsIHRoaXMgaXMgc286IGJ1dCB3aGF0IG9mIHRoaXMsIG15IGxvcmQ/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+TGV0IG1lIGJ1dCBtb3ZlIG9uZSBxdWVzdGlvbiB0byB5b3VyIGRhdWdodGVyOzwvTElORT4KLTxMSU5FPkFuZCwgYnkgdGhhdCBmYXRoZXJseSBhbmQga2luZGx5IHBvd2VyPC9MSU5FPgotPExJTkU+VGhhdCB5b3UgaGF2ZSBpbiBoZXIsIGJpZCBoZXIgYW5zd2VyIHRydWx5LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPkkgY2hhcmdlIHRoZWUgZG8gc28sIGFzIHRob3UgYXJ0IG15IGNoaWxkLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+SEVSTzwvU1BFQUtFUj4KLTxMSU5FPk8sIEdvZCBkZWZlbmQgbWUhIGhvdyBhbSBJIGJlc2V0ITwvTElORT4KLTxMSU5FPldoYXQga2luZCBvZiBjYXRlY2hpc2luZyBjYWxsIHlvdSB0aGlzPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPlRvIG1ha2UgeW91IGFuc3dlciB0cnVseSB0byB5b3VyIG5hbWUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5IRVJPPC9TUEVBS0VSPgotPExJTkU+SXMgaXQgbm90IEhlcm8/IFdobyBjYW4gYmxvdCB0aGF0IG5hbWU8L0xJTkU+Ci08TElORT5XaXRoIGFueSBqdXN0IHJlcHJvYWNoPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPk1hcnJ5LCB0aGF0IGNhbiBIZXJvOzwvTElORT4KLTxMSU5FPkhlcm8gaXRzZWxmIGNhbiBibG90IG91dCBIZXJvJ3MgdmlydHVlLjwvTElORT4KLTxMSU5FPldoYXQgbWFuIHdhcyBoZSB0YWxrJ2Qgd2l0aCB5b3UgeWVzdGVybmlnaHQ8L0xJTkU+Ci08TElORT5PdXQgYXQgeW91ciB3aW5kb3cgYmV0d2l4dCB0d2VsdmUgYW5kIG9uZT88L0xJTkU+Ci08TElORT5Ob3csIGlmIHlvdSBhcmUgYSBtYWlkLCBhbnN3ZXIgdG8gdGhpcy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkhFUk88L1NQRUFLRVI+Ci08TElORT5JIHRhbGsnZCB3aXRoIG5vIG1hbiBhdCB0aGF0IGhvdXIsIG15IGxvcmQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5XaHksIHRoZW4gYXJlIHlvdSBubyBtYWlkZW4uIExlb25hdG8sPC9MSU5FPgotPExJTkU+SSBhbSBzb3JyeSB5b3UgbXVzdCBoZWFyOiB1cG9uIG1pbmUgaG9ub3VyLDwvTElORT4KLTxMSU5FPk15c2VsZiwgbXkgYnJvdGhlciBhbmQgdGhpcyBncmlldmVkIGNvdW50PC9MSU5FPgotPExJTkU+RGlkIHNlZSBoZXIsIGhlYXIgaGVyLCBhdCB0aGF0IGhvdXIgbGFzdCBuaWdodDwvTElORT4KLTxMSU5FPlRhbGsgd2l0aCBhIHJ1ZmZpYW4gYXQgaGVyIGNoYW1iZXItd2luZG93PC9MSU5FPgotPExJTkU+V2hvIGhhdGggaW5kZWVkLCBtb3N0IGxpa2UgYSBsaWJlcmFsIHZpbGxhaW4sPC9MSU5FPgotPExJTkU+Q29uZmVzcydkIHRoZSB2aWxlIGVuY291bnRlcnMgdGhleSBoYXZlIGhhZDwvTElORT4KLTxMSU5FPkEgdGhvdXNhbmQgdGltZXMgaW4gc2VjcmV0LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIEpPSE48L1NQRUFLRVI+Ci08TElORT5GaWUsIGZpZSEgdGhleSBhcmUgbm90IHRvIGJlIG5hbWVkLCBteSBsb3JkLDwvTElORT4KLTxMSU5FPk5vdCB0byBiZSBzcG9rZSBvZjs8L0xJTkU+Ci08TElORT5UaGVyZSBpcyBub3QgY2hhc3RpdHkgZW5vdWdoIGluIGxhbmd1YWdlPC9MSU5FPgotPExJTkU+V2l0aG91dCBvZmZlbmNlIHRvIHV0dGVyIHRoZW0uIFRodXMsIHByZXR0eSBsYWR5LDwvTElORT4KLTxMSU5FPkkgYW0gc29ycnkgZm9yIHRoeSBtdWNoIG1pc2dvdmVybm1lbnQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+TyBIZXJvLCB3aGF0IGEgSGVybyBoYWRzdCB0aG91IGJlZW4sPC9MSU5FPgotPExJTkU+SWYgaGFsZiB0aHkgb3V0d2FyZCBncmFjZXMgaGFkIGJlZW4gcGxhY2VkPC9MSU5FPgotPExJTkU+QWJvdXQgdGh5IHRob3VnaHRzIGFuZCBjb3Vuc2VscyBvZiB0aHkgaGVhcnQhPC9MSU5FPgotPExJTkU+QnV0IGZhcmUgdGhlZSB3ZWxsLCBtb3N0IGZvdWwsIG1vc3QgZmFpciEgZmFyZXdlbGwsPC9MSU5FPgotPExJTkU+VGhvdSBwdXJlIGltcGlldHkgYW5kIGltcGlvdXMgcHVyaXR5ITwvTElORT4KLTxMSU5FPkZvciB0aGVlIEknbGwgbG9jayB1cCBhbGwgdGhlIGdhdGVzIG9mIGxvdmUsPC9MSU5FPgotPExJTkU+QW5kIG9uIG15IGV5ZWxpZHMgc2hhbGwgY29uamVjdHVyZSBoYW5nLDwvTElORT4KLTxMSU5FPlRvIHR1cm4gYWxsIGJlYXV0eSBpbnRvIHRob3VnaHRzIG9mIGhhcm0sPC9MSU5FPgotPExJTkU+QW5kIG5ldmVyIHNoYWxsIGl0IG1vcmUgYmUgZ3JhY2lvdXMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+SGF0aCBubyBtYW4ncyBkYWdnZXIgaGVyZSBhIHBvaW50IGZvciBtZT88L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+SEVSTyBzd29vbnM8L1NUQUdFRElSPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5XaHksIGhvdyBub3csIGNvdXNpbiEgd2hlcmVmb3JlIHNpbmsgeW91IGRvd24/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gSk9ITjwvU1BFQUtFUj4KLTxMSU5FPkNvbWUsIGxldCB1cyBnby4gVGhlc2UgdGhpbmdzLCBjb21lIHRodXMgdG8gbGlnaHQsPC9MSU5FPgotPExJTkU+U21vdGhlciBoZXIgc3Bpcml0cyB1cC48L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+RXhldW50IERPTiBQRURSTywgRE9OIEpPSE4sIGFuZCBDTEFVRElPPC9TVEFHRURJUj4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+SG93IGRvdGggdGhlIGxhZHk/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPkRlYWQsIEkgdGhpbmsuIEhlbHAsIHVuY2xlITwvTElORT4KLTxMSU5FPkhlcm8hIHdoeSwgSGVybyEgVW5jbGUhIFNpZ25pb3IgQmVuZWRpY2shIEZyaWFyITwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPk8gRmF0ZSEgdGFrZSBub3QgYXdheSB0aHkgaGVhdnkgaGFuZC48L0xJTkU+Ci08TElORT5EZWF0aCBpcyB0aGUgZmFpcmVzdCBjb3ZlciBmb3IgaGVyIHNoYW1lPC9MSU5FPgotPExJTkU+VGhhdCBtYXkgYmUgd2lzaCdkIGZvci48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+SG93IG5vdywgY291c2luIEhlcm8hPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5GUklBUiBGUkFOQ0lTPC9TUEVBS0VSPgotPExJTkU+SGF2ZSBjb21mb3J0LCBsYWR5LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPkRvc3QgdGhvdSBsb29rIHVwPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RlJJQVIgRlJBTkNJUzwvU1BFQUtFUj4KLTxMSU5FPlllYSwgd2hlcmVmb3JlIHNob3VsZCBzaGUgbm90PzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPldoZXJlZm9yZSEgV2h5LCBkb3RoIG5vdCBldmVyeSBlYXJ0aGx5IHRoaW5nPC9MSU5FPgotPExJTkU+Q3J5IHNoYW1lIHVwb24gaGVyPyBDb3VsZCBzaGUgaGVyZSBkZW55PC9MSU5FPgotPExJTkU+VGhlIHN0b3J5IHRoYXQgaXMgcHJpbnRlZCBpbiBoZXIgYmxvb2Q/PC9MSU5FPgotPExJTkU+RG8gbm90IGxpdmUsIEhlcm87IGRvIG5vdCBvcGUgdGhpbmUgZXllczo8L0xJTkU+Ci08TElORT5Gb3IsIGRpZCBJIHRoaW5rIHRob3Ugd291bGRzdCBub3QgcXVpY2tseSBkaWUsPC9MSU5FPgotPExJTkU+VGhvdWdodCBJIHRoeSBzcGlyaXRzIHdlcmUgc3Ryb25nZXIgdGhhbiB0aHkgc2hhbWVzLDwvTElORT4KLTxMSU5FPk15c2VsZiB3b3VsZCwgb24gdGhlIHJlYXJ3YXJkIG9mIHJlcHJvYWNoZXMsPC9MSU5FPgotPExJTkU+U3RyaWtlIGF0IHRoeSBsaWZlLiBHcmlldmVkIEksIEkgaGFkIGJ1dCBvbmU/PC9MSU5FPgotPExJTkU+Q2hpZCBJIGZvciB0aGF0IGF0IGZydWdhbCBuYXR1cmUncyBmcmFtZT88L0xJTkU+Ci08TElORT5PLCBvbmUgdG9vIG11Y2ggYnkgdGhlZSEgV2h5IGhhZCBJIG9uZT88L0xJTkU+Ci08TElORT5XaHkgZXZlciB3YXN0IHRob3UgbG92ZWx5IGluIG15IGV5ZXM/PC9MSU5FPgotPExJTkU+V2h5IGhhZCBJIG5vdCB3aXRoIGNoYXJpdGFibGUgaGFuZDwvTElORT4KLTxMSU5FPlRvb2sgdXAgYSBiZWdnYXIncyBpc3N1ZSBhdCBteSBnYXRlcyw8L0xJTkU+Ci08TElORT5XaG8gc21pcmNoJ2QgdGh1cyBhbmQgbWlyZWQgd2l0aCBpbmZhbXksPC9MSU5FPgotPExJTkU+SSBtaWdodCBoYXZlIHNhaWQgJ05vIHBhcnQgb2YgaXQgaXMgbWluZTs8L0xJTkU+Ci08TElORT5UaGlzIHNoYW1lIGRlcml2ZXMgaXRzZWxmIGZyb20gdW5rbm93biBsb2lucyc/PC9MSU5FPgotPExJTkU+QnV0IG1pbmUgYW5kIG1pbmUgSSBsb3ZlZCBhbmQgbWluZSBJIHByYWlzZWQ8L0xJTkU+Ci08TElORT5BbmQgbWluZSB0aGF0IEkgd2FzIHByb3VkIG9uLCBtaW5lIHNvIG11Y2g8L0xJTkU+Ci08TElORT5UaGF0IEkgbXlzZWxmIHdhcyB0byBteXNlbGYgbm90IG1pbmUsPC9MSU5FPgotPExJTkU+VmFsdWluZyBvZiBoZXIsLS13aHksIHNoZSwgTywgc2hlIGlzIGZhbGxlbjwvTElORT4KLTxMSU5FPkludG8gYSBwaXQgb2YgaW5rLCB0aGF0IHRoZSB3aWRlIHNlYTwvTElORT4KLTxMSU5FPkhhdGggZHJvcHMgdG9vIGZldyB0byB3YXNoIGhlciBjbGVhbiBhZ2FpbjwvTElORT4KLTxMSU5FPkFuZCBzYWx0IHRvbyBsaXR0bGUgd2hpY2ggbWF5IHNlYXNvbiBnaXZlPC9MSU5FPgotPExJTkU+VG8gaGVyIGZvdWwtdGFpbnRlZCBmbGVzaCE8L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+U2lyLCBzaXIsIGJlIHBhdGllbnQuPC9MSU5FPgotPExJTkU+Rm9yIG15IHBhcnQsIEkgYW0gc28gYXR0aXJlZCBpbiB3b25kZXIsPC9MSU5FPgotPExJTkU+SSBrbm93IG5vdCB3aGF0IHRvIHNheS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+Tywgb24gbXkgc291bCwgbXkgY291c2luIGlzIGJlbGllZCE8L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+TGFkeSwgd2VyZSB5b3UgaGVyIGJlZGZlbGxvdyBsYXN0IG5pZ2h0PzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5ObywgdHJ1bHkgbm90OyBhbHRob3VnaCwgdW50aWwgbGFzdCBuaWdodCw8L0xJTkU+Ci08TElORT5JIGhhdmUgdGhpcyB0d2VsdmVtb250aCBiZWVuIGhlciBiZWRmZWxsb3cuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+Q29uZmlybSdkLCBjb25maXJtJ2QhIE8sIHRoYXQgaXMgc3Ryb25nZXIgbWFkZTwvTElORT4KLTxMSU5FPldoaWNoIHdhcyBiZWZvcmUgYmFycidkIHVwIHdpdGggcmlicyBvZiBpcm9uITwvTElORT4KLTxMSU5FPldvdWxkIHRoZSB0d28gcHJpbmNlcyBsaWUsIGFuZCBDbGF1ZGlvIGxpZSw8L0xJTkU+Ci08TElORT5XaG8gbG92ZWQgaGVyIHNvLCB0aGF0LCBzcGVha2luZyBvZiBoZXIgZm91bG5lc3MsPC9MSU5FPgotPExJTkU+V2FzaCdkIGl0IHdpdGggdGVhcnM/IEhlbmNlIGZyb20gaGVyISBsZXQgaGVyIGRpZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkZSSUFSIEZSQU5DSVM8L1NQRUFLRVI+Ci08TElORT5IZWFyIG1lIGEgbGl0dGxlOyBmb3IgSSBoYXZlIG9ubHkgYmVlbjwvTElORT4KLTxMSU5FPlNpbGVudCBzbyBsb25nIGFuZCBnaXZlbiB3YXkgdW50bzwvTElORT4KLTxMSU5FPlRoaXMgY291cnNlIG9mIGZvcnR1bmU8L0xJTkU+Ci08TElORT5CeSBub3Rpbmcgb2YgdGhlIGxhZHkuIEkgaGF2ZSBtYXJrJ2Q8L0xJTkU+Ci08TElORT5BIHRob3VzYW5kIGJsdXNoaW5nIGFwcGFyaXRpb25zPC9MSU5FPgotPExJTkU+VG8gc3RhcnQgaW50byBoZXIgZmFjZSwgYSB0aG91c2FuZCBpbm5vY2VudCBzaGFtZXM8L0xJTkU+Ci08TElORT5JbiBhbmdlbCB3aGl0ZW5lc3MgYmVhdCBhd2F5IHRob3NlIGJsdXNoZXM7PC9MSU5FPgotPExJTkU+QW5kIGluIGhlciBleWUgdGhlcmUgaGF0aCBhcHBlYXInZCBhIGZpcmUsPC9MSU5FPgotPExJTkU+VG8gYnVybiB0aGUgZXJyb3JzIHRoYXQgdGhlc2UgcHJpbmNlcyBob2xkPC9MSU5FPgotPExJTkU+QWdhaW5zdCBoZXIgbWFpZGVuIHRydXRoLiBDYWxsIG1lIGEgZm9vbDs8L0xJTkU+Ci08TElORT5UcnVzdCBub3QgbXkgcmVhZGluZyBub3IgbXkgb2JzZXJ2YXRpb25zLDwvTElORT4KLTxMSU5FPldoaWNoIHdpdGggZXhwZXJpbWVudGFsIHNlYWwgZG90aCB3YXJyYW50PC9MSU5FPgotPExJTkU+VGhlIHRlbm9yIG9mIG15IGJvb2s7IHRydXN0IG5vdCBteSBhZ2UsPC9MSU5FPgotPExJTkU+TXkgcmV2ZXJlbmNlLCBjYWxsaW5nLCBub3IgZGl2aW5pdHksPC9MSU5FPgotPExJTkU+SWYgdGhpcyBzd2VldCBsYWR5IGxpZSBub3QgZ3VpbHRsZXNzIGhlcmU8L0xJTkU+Ci08TElORT5VbmRlciBzb21lIGJpdGluZyBlcnJvci48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5GcmlhciwgaXQgY2Fubm90IGJlLjwvTElORT4KLTxMSU5FPlRob3Ugc2Vlc3QgdGhhdCBhbGwgdGhlIGdyYWNlIHRoYXQgc2hlIGhhdGggbGVmdDwvTElORT4KLTxMSU5FPklzIHRoYXQgc2hlIHdpbGwgbm90IGFkZCB0byBoZXIgZGFtbmF0aW9uPC9MSU5FPgotPExJTkU+QSBzaW4gb2YgcGVyanVyeTsgc2hlIG5vdCBkZW5pZXMgaXQ6PC9MSU5FPgotPExJTkU+V2h5IHNlZWsnc3QgdGhvdSB0aGVuIHRvIGNvdmVyIHdpdGggZXhjdXNlPC9MSU5FPgotPExJTkU+VGhhdCB3aGljaCBhcHBlYXJzIGluIHByb3BlciBuYWtlZG5lc3M/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5GUklBUiBGUkFOQ0lTPC9TUEVBS0VSPgotPExJTkU+TGFkeSwgd2hhdCBtYW4gaXMgaGUgeW91IGFyZSBhY2N1c2VkIG9mPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+SEVSTzwvU1BFQUtFUj4KLTxMSU5FPlRoZXkga25vdyB0aGF0IGRvIGFjY3VzZSBtZTsgSSBrbm93IG5vbmU6PC9MSU5FPgotPExJTkU+SWYgSSBrbm93IG1vcmUgb2YgYW55IG1hbiBhbGl2ZTwvTElORT4KLTxMSU5FPlRoYW4gdGhhdCB3aGljaCBtYWlkZW4gbW9kZXN0eSBkb3RoIHdhcnJhbnQsPC9MSU5FPgotPExJTkU+TGV0IGFsbCBteSBzaW5zIGxhY2sgbWVyY3khIE8gbXkgZmF0aGVyLDwvTElORT4KLTxMSU5FPlByb3ZlIHlvdSB0aGF0IGFueSBtYW4gd2l0aCBtZSBjb252ZXJzZWQ8L0xJTkU+Ci08TElORT5BdCBob3VycyB1bm1lZXQsIG9yIHRoYXQgSSB5ZXN0ZXJuaWdodDwvTElORT4KLTxMSU5FPk1haW50YWluJ2QgdGhlIGNoYW5nZSBvZiB3b3JkcyB3aXRoIGFueSBjcmVhdHVyZSw8L0xJTkU+Ci08TElORT5SZWZ1c2UgbWUsIGhhdGUgbWUsIHRvcnR1cmUgbWUgdG8gZGVhdGghPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5GUklBUiBGUkFOQ0lTPC9TUEVBS0VSPgotPExJTkU+VGhlcmUgaXMgc29tZSBzdHJhbmdlIG1pc3ByaXNpb24gaW4gdGhlIHByaW5jZXMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPlR3byBvZiB0aGVtIGhhdmUgdGhlIHZlcnkgYmVudCBvZiBob25vdXI7PC9MSU5FPgotPExJTkU+QW5kIGlmIHRoZWlyIHdpc2RvbXMgYmUgbWlzbGVkIGluIHRoaXMsPC9MSU5FPgotPExJTkU+VGhlIHByYWN0aXNlIG9mIGl0IGxpdmVzIGluIEpvaG4gdGhlIGJhc3RhcmQsPC9MSU5FPgotPExJTkU+V2hvc2Ugc3Bpcml0cyB0b2lsIGluIGZyYW1lIG9mIHZpbGxhbmllcy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5JIGtub3cgbm90LiBJZiB0aGV5IHNwZWFrIGJ1dCB0cnV0aCBvZiBoZXIsPC9MSU5FPgotPExJTkU+VGhlc2UgaGFuZHMgc2hhbGwgdGVhciBoZXI7IGlmIHRoZXkgd3JvbmcgaGVyIGhvbm91ciw8L0xJTkU+Ci08TElORT5UaGUgcHJvdWRlc3Qgb2YgdGhlbSBzaGFsbCB3ZWxsIGhlYXIgb2YgaXQuPC9MSU5FPgotPExJTkU+VGltZSBoYXRoIG5vdCB5ZXQgc28gZHJpZWQgdGhpcyBibG9vZCBvZiBtaW5lLDwvTElORT4KLTxMSU5FPk5vciBhZ2Ugc28gZWF0IHVwIG15IGludmVudGlvbiw8L0xJTkU+Ci08TElORT5Ob3IgZm9ydHVuZSBtYWRlIHN1Y2ggaGF2b2Mgb2YgbXkgbWVhbnMsPC9MSU5FPgotPExJTkU+Tm9yIG15IGJhZCBsaWZlIHJlZnQgbWUgc28gbXVjaCBvZiBmcmllbmRzLDwvTElORT4KLTxMSU5FPkJ1dCB0aGV5IHNoYWxsIGZpbmQsIGF3YWtlZCBpbiBzdWNoIGEga2luZCw8L0xJTkU+Ci08TElORT5Cb3RoIHN0cmVuZ3RoIG9mIGxpbWIgYW5kIHBvbGljeSBvZiBtaW5kLDwvTElORT4KLTxMSU5FPkFiaWxpdHkgaW4gbWVhbnMgYW5kIGNob2ljZSBvZiBmcmllbmRzLDwvTElORT4KLTxMSU5FPlRvIHF1aXQgbWUgb2YgdGhlbSB0aHJvdWdobHkuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5GUklBUiBGUkFOQ0lTPC9TUEVBS0VSPgotPExJTkU+UGF1c2UgYXdoaWxlLDwvTElORT4KLTxMSU5FPkFuZCBsZXQgbXkgY291bnNlbCBzd2F5IHlvdSBpbiB0aGlzIGNhc2UuPC9MSU5FPgotPExJTkU+WW91ciBkYXVnaHRlciBoZXJlIHRoZSBwcmluY2VzIGxlZnQgZm9yIGRlYWQ6PC9MSU5FPgotPExJTkU+TGV0IGhlciBhd2hpbGUgYmUgc2VjcmV0bHkga2VwdCBpbiw8L0xJTkU+Ci08TElORT5BbmQgcHVibGlzaCBpdCB0aGF0IHNoZSBpcyBkZWFkIGluZGVlZDs8L0xJTkU+Ci08TElORT5NYWludGFpbiBhIG1vdXJuaW5nIG9zdGVudGF0aW9uPC9MSU5FPgotPExJTkU+QW5kIG9uIHlvdXIgZmFtaWx5J3Mgb2xkIG1vbnVtZW50PC9MSU5FPgotPExJTkU+SGFuZyBtb3VybmZ1bCBlcGl0YXBocyBhbmQgZG8gYWxsIHJpdGVzPC9MSU5FPgotPExJTkU+VGhhdCBhcHBlcnRhaW4gdW50byBhIGJ1cmlhbC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5XaGF0IHNoYWxsIGJlY29tZSBvZiB0aGlzPyB3aGF0IHdpbGwgdGhpcyBkbz88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkZSSUFSIEZSQU5DSVM8L1NQRUFLRVI+Ci08TElORT5NYXJyeSwgdGhpcyB3ZWxsIGNhcnJpZWQgc2hhbGwgb24gaGVyIGJlaGFsZjwvTElORT4KLTxMSU5FPkNoYW5nZSBzbGFuZGVyIHRvIHJlbW9yc2U7IHRoYXQgaXMgc29tZSBnb29kOjwvTElORT4KLTxMSU5FPkJ1dCBub3QgZm9yIHRoYXQgZHJlYW0gSSBvbiB0aGlzIHN0cmFuZ2UgY291cnNlLDwvTElORT4KLTxMSU5FPkJ1dCBvbiB0aGlzIHRyYXZhaWwgbG9vayBmb3IgZ3JlYXRlciBiaXJ0aC48L0xJTkU+Ci08TElORT5TaGUgZHlpbmcsIGFzIGl0IG11c3Qgc28gYmUgbWFpbnRhaW4nZCw8L0xJTkU+Ci08TElORT5VcG9uIHRoZSBpbnN0YW50IHRoYXQgc2hlIHdhcyBhY2N1c2VkLDwvTElORT4KLTxMSU5FPlNoYWxsIGJlIGxhbWVudGVkLCBwaXRpZWQgYW5kIGV4Y3VzZWQ8L0xJTkU+Ci08TElORT5PZiBldmVyeSBoZWFyZXI6IGZvciBpdCBzbyBmYWxscyBvdXQ8L0xJTkU+Ci08TElORT5UaGF0IHdoYXQgd2UgaGF2ZSB3ZSBwcml6ZSBub3QgdG8gdGhlIHdvcnRoPC9MSU5FPgotPExJTkU+V2hpbGVzIHdlIGVuam95IGl0LCBidXQgYmVpbmcgbGFjaydkIGFuZCBsb3N0LDwvTElORT4KLTxMSU5FPldoeSwgdGhlbiB3ZSByYWNrIHRoZSB2YWx1ZSwgdGhlbiB3ZSBmaW5kPC9MSU5FPgotPExJTkU+VGhlIHZpcnR1ZSB0aGF0IHBvc3Nlc3Npb24gd291bGQgbm90IHNob3cgdXM8L0xJTkU+Ci08TElORT5XaGlsZXMgaXQgd2FzIG91cnMuIFNvIHdpbGwgaXQgZmFyZSB3aXRoIENsYXVkaW86PC9MSU5FPgotPExJTkU+V2hlbiBoZSBzaGFsbCBoZWFyIHNoZSBkaWVkIHVwb24gaGlzIHdvcmRzLDwvTElORT4KLTxMSU5FPlRoZSBpZGVhIG9mIGhlciBsaWZlIHNoYWxsIHN3ZWV0bHkgY3JlZXA8L0xJTkU+Ci08TElORT5JbnRvIGhpcyBzdHVkeSBvZiBpbWFnaW5hdGlvbiw8L0xJTkU+Ci08TElORT5BbmQgZXZlcnkgbG92ZWx5IG9yZ2FuIG9mIGhlciBsaWZlPC9MSU5FPgotPExJTkU+U2hhbGwgY29tZSBhcHBhcmVsbCdkIGluIG1vcmUgcHJlY2lvdXMgaGFiaXQsPC9MSU5FPgotPExJTkU+TW9yZSBtb3ZpbmctZGVsaWNhdGUgYW5kIGZ1bGwgb2YgbGlmZSw8L0xJTkU+Ci08TElORT5JbnRvIHRoZSBleWUgYW5kIHByb3NwZWN0IG9mIGhpcyBzb3VsLDwvTElORT4KLTxMSU5FPlRoYW4gd2hlbiBzaGUgbGl2ZWQgaW5kZWVkOyB0aGVuIHNoYWxsIGhlIG1vdXJuLDwvTElORT4KLTxMSU5FPklmIGV2ZXIgbG92ZSBoYWQgaW50ZXJlc3QgaW4gaGlzIGxpdmVyLDwvTElORT4KLTxMSU5FPkFuZCB3aXNoIGhlIGhhZCBub3Qgc28gYWNjdXNlZCBoZXIsPC9MSU5FPgotPExJTkU+Tm8sIHRob3VnaCBoZSB0aG91Z2h0IGhpcyBhY2N1c2F0aW9uIHRydWUuPC9MSU5FPgotPExJTkU+TGV0IHRoaXMgYmUgc28sIGFuZCBkb3VidCBub3QgYnV0IHN1Y2Nlc3M8L0xJTkU+Ci08TElORT5XaWxsIGZhc2hpb24gdGhlIGV2ZW50IGluIGJldHRlciBzaGFwZTwvTElORT4KLTxMSU5FPlRoYW4gSSBjYW4gbGF5IGl0IGRvd24gaW4gbGlrZWxpaG9vZC48L0xJTkU+Ci08TElORT5CdXQgaWYgYWxsIGFpbSBidXQgdGhpcyBiZSBsZXZlbGwnZCBmYWxzZSw8L0xJTkU+Ci08TElORT5UaGUgc3VwcG9zaXRpb24gb2YgdGhlIGxhZHkncyBkZWF0aDwvTElORT4KLTxMSU5FPldpbGwgcXVlbmNoIHRoZSB3b25kZXIgb2YgaGVyIGluZmFteTo8L0xJTkU+Ci08TElORT5BbmQgaWYgaXQgc29ydCBub3Qgd2VsbCwgeW91IG1heSBjb25jZWFsIGhlciw8L0xJTkU+Ci08TElORT5BcyBiZXN0IGJlZml0cyBoZXIgd291bmRlZCByZXB1dGF0aW9uLDwvTElORT4KLTxMSU5FPkluIHNvbWUgcmVjbHVzaXZlIGFuZCByZWxpZ2lvdXMgbGlmZSw8L0xJTkU+Ci08TElORT5PdXQgb2YgYWxsIGV5ZXMsIHRvbmd1ZXMsIG1pbmRzIGFuZCBpbmp1cmllcy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+U2lnbmlvciBMZW9uYXRvLCBsZXQgdGhlIGZyaWFyIGFkdmlzZSB5b3U6PC9MSU5FPgotPExJTkU+QW5kIHRob3VnaCB5b3Uga25vdyBteSBpbndhcmRuZXNzIGFuZCBsb3ZlPC9MSU5FPgotPExJTkU+SXMgdmVyeSBtdWNoIHVudG8gdGhlIHByaW5jZSBhbmQgQ2xhdWRpbyw8L0xJTkU+Ci08TElORT5ZZXQsIGJ5IG1pbmUgaG9ub3VyLCBJIHdpbGwgZGVhbCBpbiB0aGlzPC9MSU5FPgotPExJTkU+QXMgc2VjcmV0bHkgYW5kIGp1c3RseSBhcyB5b3VyIHNvdWw8L0xJTkU+Ci08TElORT5TaG91bGQgd2l0aCB5b3VyIGJvZHkuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+QmVpbmcgdGhhdCBJIGZsb3cgaW4gZ3JpZWYsPC9MSU5FPgotPExJTkU+VGhlIHNtYWxsZXN0IHR3aW5lIG1heSBsZWFkIG1lLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RlJJQVIgRlJBTkNJUzwvU1BFQUtFUj4KLTxMSU5FPidUaXMgd2VsbCBjb25zZW50ZWQ6IHByZXNlbnRseSBhd2F5OzwvTElORT4KLTxMSU5FPkZvciB0byBzdHJhbmdlIHNvcmVzIHN0cmFuZ2VseSB0aGV5IHN0cmFpbiB0aGUgY3VyZS48L0xJTkU+Ci08TElORT5Db21lLCBsYWR5LCBkaWUgdG8gbGl2ZTogdGhpcyB3ZWRkaW5nLWRheTwvTElORT4KLTxMSU5FPlBlcmhhcHMgaXMgYnV0IHByb2xvbmcnZDogaGF2ZSBwYXRpZW5jZSBhbmQgZW5kdXJlLjwvTElORT4KLTwvU1BFRUNIPgotCi0KLTxTVEFHRURJUj5FeGV1bnQgYWxsIGJ1dCBCRU5FRElDSyBhbmQgQkVBVFJJQ0U8L1NUQUdFRElSPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5MYWR5IEJlYXRyaWNlLCBoYXZlIHlvdSB3ZXB0IGFsbCB0aGlzIHdoaWxlPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5ZZWEsIGFuZCBJIHdpbGwgd2VlcCBhIHdoaWxlIGxvbmdlci48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+SSB3aWxsIG5vdCBkZXNpcmUgdGhhdC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+WW91IGhhdmUgbm8gcmVhc29uOyBJIGRvIGl0IGZyZWVseS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+U3VyZWx5IEkgZG8gYmVsaWV2ZSB5b3VyIGZhaXIgY291c2luIGlzIHdyb25nZWQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPkFoLCBob3cgbXVjaCBtaWdodCB0aGUgbWFuIGRlc2VydmUgb2YgbWUgdGhhdCB3b3VsZCByaWdodCBoZXIhPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPklzIHRoZXJlIGFueSB3YXkgdG8gc2hvdyBzdWNoIGZyaWVuZHNoaXA/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPkEgdmVyeSBldmVuIHdheSwgYnV0IG5vIHN1Y2ggZnJpZW5kLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5NYXkgYSBtYW4gZG8gaXQ/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPkl0IGlzIGEgbWFuJ3Mgb2ZmaWNlLCBidXQgbm90IHlvdXJzLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5JIGRvIGxvdmUgbm90aGluZyBpbiB0aGUgd29ybGQgc28gd2VsbCBhcyB5b3U6IGlzPC9MSU5FPgotPExJTkU+bm90IHRoYXQgc3RyYW5nZT88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+QXMgc3RyYW5nZSBhcyB0aGUgdGhpbmcgSSBrbm93IG5vdC4gSXQgd2VyZSBhczwvTElORT4KLTxMSU5FPnBvc3NpYmxlIGZvciBtZSB0byBzYXkgSSBsb3ZlZCBub3RoaW5nIHNvIHdlbGwgYXM8L0xJTkU+Ci08TElORT55b3U6IGJ1dCBiZWxpZXZlIG1lIG5vdDsgYW5kIHlldCBJIGxpZSBub3Q7IEk8L0xJTkU+Ci08TElORT5jb25mZXNzIG5vdGhpbmcsIG5vciBJIGRlbnkgbm90aGluZy4gSSBhbSBzb3JyeSBmb3IgbXkgY291c2luLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5CeSBteSBzd29yZCwgQmVhdHJpY2UsIHRob3UgbG92ZXN0IG1lLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5EbyBub3Qgc3dlYXIsIGFuZCBlYXQgaXQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPkkgd2lsbCBzd2VhciBieSBpdCB0aGF0IHlvdSBsb3ZlIG1lOyBhbmQgSSB3aWxsIG1ha2U8L0xJTkU+Ci08TElORT5oaW0gZWF0IGl0IHRoYXQgc2F5cyBJIGxvdmUgbm90IHlvdS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+V2lsbCB5b3Ugbm90IGVhdCB5b3VyIHdvcmQ/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPldpdGggbm8gc2F1Y2UgdGhhdCBjYW4gYmUgZGV2aXNlZCB0byBpdC4gSSBwcm90ZXN0PC9MSU5FPgotPExJTkU+SSBsb3ZlIHRoZWUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPldoeSwgdGhlbiwgR29kIGZvcmdpdmUgbWUhPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPldoYXQgb2ZmZW5jZSwgc3dlZXQgQmVhdHJpY2U/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPllvdSBoYXZlIHN0YXllZCBtZSBpbiBhIGhhcHB5IGhvdXI6IEkgd2FzIGFib3V0IHRvPC9MSU5FPgotPExJTkU+cHJvdGVzdCBJIGxvdmVkIHlvdS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+QW5kIGRvIGl0IHdpdGggYWxsIHRoeSBoZWFydC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+SSBsb3ZlIHlvdSB3aXRoIHNvIG11Y2ggb2YgbXkgaGVhcnQgdGhhdCBub25lIGlzPC9MSU5FPgotPExJTkU+bGVmdCB0byBwcm90ZXN0LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5Db21lLCBiaWQgbWUgZG8gYW55IHRoaW5nIGZvciB0aGVlLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5LaWxsIENsYXVkaW8uPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPkhhISBub3QgZm9yIHRoZSB3aWRlIHdvcmxkLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5Zb3Uga2lsbCBtZSB0byBkZW55IGl0LiBGYXJld2VsbC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+VGFycnksIHN3ZWV0IEJlYXRyaWNlLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5JIGFtIGdvbmUsIHRob3VnaCBJIGFtIGhlcmU6IHRoZXJlIGlzIG5vIGxvdmUgaW48L0xJTkU+Ci08TElORT55b3U6IG5heSwgSSBwcmF5IHlvdSwgbGV0IG1lIGdvLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5CZWF0cmljZSwtLTwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5JbiBmYWl0aCwgSSB3aWxsIGdvLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5XZSdsbCBiZSBmcmllbmRzIGZpcnN0LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5Zb3UgZGFyZSBlYXNpZXIgYmUgZnJpZW5kcyB3aXRoIG1lIHRoYW4gZmlnaHQgd2l0aCBtaW5lIGVuZW15LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5JcyBDbGF1ZGlvIHRoaW5lIGVuZW15PzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5JcyBoZSBub3QgYXBwcm92ZWQgaW4gdGhlIGhlaWdodCBhIHZpbGxhaW4sIHRoYXQ8L0xJTkU+Ci08TElORT5oYXRoIHNsYW5kZXJlZCwgc2Nvcm5lZCwgZGlzaG9ub3VyZWQgbXkga2luc3dvbWFuPyBPPC9MSU5FPgotPExJTkU+dGhhdCBJIHdlcmUgYSBtYW4hIFdoYXQsIGJlYXIgaGVyIGluIGhhbmQgdW50aWwgdGhleTwvTElORT4KLTxMSU5FPmNvbWUgdG8gdGFrZSBoYW5kczsgYW5kIHRoZW4sIHdpdGggcHVibGljPC9MSU5FPgotPExJTkU+YWNjdXNhdGlvbiwgdW5jb3ZlcmVkIHNsYW5kZXIsIHVubWl0aWdhdGVkIHJhbmNvdXIsPC9MSU5FPgotPExJTkU+LS1PIEdvZCwgdGhhdCBJIHdlcmUgYSBtYW4hIEkgd291bGQgZWF0IGhpcyBoZWFydDwvTElORT4KLTxMSU5FPmluIHRoZSBtYXJrZXQtcGxhY2UuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPkhlYXIgbWUsIEJlYXRyaWNlLC0tPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPlRhbGsgd2l0aCBhIG1hbiBvdXQgYXQgYSB3aW5kb3chIEEgcHJvcGVyIHNheWluZyE8L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+TmF5LCBidXQsIEJlYXRyaWNlLC0tPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPlN3ZWV0IEhlcm8hIFNoZSBpcyB3cm9uZ2VkLCBzaGUgaXMgc2xhbmRlcmVkLCBzaGUgaXMgdW5kb25lLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5CZWF0LS08L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+UHJpbmNlcyBhbmQgY291bnRpZXMhIFN1cmVseSwgYSBwcmluY2VseSB0ZXN0aW1vbnksPC9MSU5FPgotPExJTkU+YSBnb29kbHkgY291bnQsIENvdW50IENvbWZlY3Q7IGEgc3dlZXQgZ2FsbGFudCw8L0xJTkU+Ci08TElORT5zdXJlbHkhIE8gdGhhdCBJIHdlcmUgYSBtYW4gZm9yIGhpcyBzYWtlISBvciB0aGF0IEk8L0xJTkU+Ci08TElORT5oYWQgYW55IGZyaWVuZCB3b3VsZCBiZSBhIG1hbiBmb3IgbXkgc2FrZSEgQnV0PC9MSU5FPgotPExJTkU+bWFuaG9vZCBpcyBtZWx0ZWQgaW50byBjb3VydGVzaWVzLCB2YWxvdXIgaW50bzwvTElORT4KLTxMSU5FPmNvbXBsaW1lbnQsIGFuZCBtZW4gYXJlIG9ubHkgdHVybmVkIGludG8gdG9uZ3VlLCBhbmQ8L0xJTkU+Ci08TElORT50cmltIG9uZXMgdG9vOiBoZSBpcyBub3cgYXMgdmFsaWFudCBhcyBIZXJjdWxlczwvTElORT4KLTxMSU5FPnRoYXQgb25seSB0ZWxscyBhIGxpZSBhbmQgc3dlYXJzIGl0LiBJIGNhbm5vdCBiZSBhPC9MSU5FPgotPExJTkU+bWFuIHdpdGggd2lzaGluZywgdGhlcmVmb3JlIEkgd2lsbCBkaWUgYSB3b21hbiB3aXRoIGdyaWV2aW5nLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5UYXJyeSwgZ29vZCBCZWF0cmljZS4gQnkgdGhpcyBoYW5kLCBJIGxvdmUgdGhlZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+VXNlIGl0IGZvciBteSBsb3ZlIHNvbWUgb3RoZXIgd2F5IHRoYW4gc3dlYXJpbmcgYnkgaXQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPlRoaW5rIHlvdSBpbiB5b3VyIHNvdWwgdGhlIENvdW50IENsYXVkaW8gaGF0aCB3cm9uZ2VkIEhlcm8/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPlllYSwgYXMgc3VyZSBhcyBJIGhhdmUgYSB0aG91Z2h0IG9yIGEgc291bC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+RW5vdWdoLCBJIGFtIGVuZ2FnZWQ7IEkgd2lsbCBjaGFsbGVuZ2UgaGltLiBJIHdpbGw8L0xJTkU+Ci08TElORT5raXNzIHlvdXIgaGFuZCwgYW5kIHNvIEkgbGVhdmUgeW91LiBCeSB0aGlzIGhhbmQsPC9MSU5FPgotPExJTkU+Q2xhdWRpbyBzaGFsbCByZW5kZXIgbWUgYSBkZWFyIGFjY291bnQuIEFzIHlvdTwvTElORT4KLTxMSU5FPmhlYXIgb2YgbWUsIHNvIHRoaW5rIG9mIG1lLiBHbywgY29tZm9ydCB5b3VyPC9MSU5FPgotPExJTkU+Y291c2luOiBJIG11c3Qgc2F5IHNoZSBpcyBkZWFkOiBhbmQgc28sIGZhcmV3ZWxsLjwvTElORT4KLTwvU1BFRUNIPgotCi0KLTxTVEFHRURJUj5FeGV1bnQ8L1NUQUdFRElSPgotPC9TQ0VORT4KLQotPFNDRU5FPjxUSVRMRT5TQ0VORSBJSS4gIEEgcHJpc29uLjwvVElUTEU+Ci08U1RBR0VESVI+RW50ZXIgRE9HQkVSUlksIFZFUkdFUywgYW5kIFNleHRvbiwgaW4gZ293bnM7IGFuZAotdGhlIFdhdGNoLCB3aXRoIENPTlJBREUgYW5kIEJPUkFDSElPPC9TVEFHRURJUj4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPR0JFUlJZPC9TUEVBS0VSPgotPExJTkU+SXMgb3VyIHdob2xlIGRpc3NlbWJseSBhcHBlYXJlZD88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPlZFUkdFUzwvU1BFQUtFUj4KLTxMSU5FPk8sIGEgc3Rvb2wgYW5kIGEgY3VzaGlvbiBmb3IgdGhlIHNleHRvbi48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPlNleHRvbjwvU1BFQUtFUj4KLTxMSU5FPldoaWNoIGJlIHRoZSBtYWxlZmFjdG9ycz88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPR0JFUlJZPC9TUEVBS0VSPgotPExJTkU+TWFycnksIHRoYXQgYW0gSSBhbmQgbXkgcGFydG5lci48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPlZFUkdFUzwvU1BFQUtFUj4KLTxMSU5FPk5heSwgdGhhdCdzIGNlcnRhaW47IHdlIGhhdmUgdGhlIGV4aGliaXRpb24gdG8gZXhhbWluZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPlNleHRvbjwvU1BFQUtFUj4KLTxMSU5FPkJ1dCB3aGljaCBhcmUgdGhlIG9mZmVuZGVycyB0aGF0IGFyZSB0byBiZTwvTElORT4KLTxMSU5FPmV4YW1pbmVkPyBsZXQgdGhlbSBjb21lIGJlZm9yZSBtYXN0ZXIgY29uc3RhYmxlLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9HQkVSUlk8L1NQRUFLRVI+Ci08TElORT5ZZWEsIG1hcnJ5LCBsZXQgdGhlbSBjb21lIGJlZm9yZSBtZS4gV2hhdCBpcyB5b3VyPC9MSU5FPgotPExJTkU+bmFtZSwgZnJpZW5kPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Qk9SQUNISU88L1NQRUFLRVI+Ci08TElORT5Cb3JhY2hpby48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPR0JFUlJZPC9TUEVBS0VSPgotPExJTkU+UHJheSwgd3JpdGUgZG93biwgQm9yYWNoaW8uIFlvdXJzLCBzaXJyYWg/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DT05SQURFPC9TUEVBS0VSPgotPExJTkU+SSBhbSBhIGdlbnRsZW1hbiwgc2lyLCBhbmQgbXkgbmFtZSBpcyBDb25yYWRlLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9HQkVSUlk8L1NQRUFLRVI+Ci08TElORT5Xcml0ZSBkb3duLCBtYXN0ZXIgZ2VudGxlbWFuIENvbnJhZGUuIE1hc3RlcnMsIGRvPC9MSU5FPgotPExJTkU+eW91IHNlcnZlIEdvZD88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNPTlJBREU8L1NQRUFLRVI+Ci08U1BFQUtFUj5CT1JBQ0hJTzwvU1BFQUtFUj4KLTxMSU5FPlllYSwgc2lyLCB3ZSBob3BlLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9HQkVSUlk8L1NQRUFLRVI+Ci08TElORT5Xcml0ZSBkb3duLCB0aGF0IHRoZXkgaG9wZSB0aGV5IHNlcnZlIEdvZDogYW5kPC9MSU5FPgotPExJTkU+d3JpdGUgR29kIGZpcnN0OyBmb3IgR29kIGRlZmVuZCBidXQgR29kIHNob3VsZCBnbzwvTElORT4KLTxMSU5FPmJlZm9yZSBzdWNoIHZpbGxhaW5zISBNYXN0ZXJzLCBpdCBpcyBwcm92ZWQgYWxyZWFkeTwvTElORT4KLTxMSU5FPnRoYXQgeW91IGFyZSBsaXR0bGUgYmV0dGVyIHRoYW4gZmFsc2Uga25hdmVzOyBhbmQgaXQ8L0xJTkU+Ci08TElORT53aWxsIGdvIG5lYXIgdG8gYmUgdGhvdWdodCBzbyBzaG9ydGx5LiBIb3cgYW5zd2VyPC9MSU5FPgotPExJTkU+eW91IGZvciB5b3Vyc2VsdmVzPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q09OUkFERTwvU1BFQUtFUj4KLTxMSU5FPk1hcnJ5LCBzaXIsIHdlIHNheSB3ZSBhcmUgbm9uZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPR0JFUlJZPC9TUEVBS0VSPgotPExJTkU+QSBtYXJ2ZWxsb3VzIHdpdHR5IGZlbGxvdywgSSBhc3N1cmUgeW91OiBidXQgSTwvTElORT4KLTxMSU5FPndpbGwgZ28gYWJvdXQgd2l0aCBoaW0uIENvbWUgeW91IGhpdGhlciwgc2lycmFoOyBhPC9MSU5FPgotPExJTkU+d29yZCBpbiB5b3VyIGVhcjogc2lyLCBJIHNheSB0byB5b3UsIGl0IGlzIHRob3VnaHQ8L0xJTkU+Ci08TElORT55b3UgYXJlIGZhbHNlIGtuYXZlcy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJPUkFDSElPPC9TUEVBS0VSPgotPExJTkU+U2lyLCBJIHNheSB0byB5b3Ugd2UgYXJlIG5vbmUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET0dCRVJSWTwvU1BFQUtFUj4KLTxMSU5FPldlbGwsIHN0YW5kIGFzaWRlLiAnRm9yZSBHb2QsIHRoZXkgYXJlIGJvdGggaW4gYTwvTElORT4KLTxMSU5FPnRhbGUuIEhhdmUgeW91IHdyaXQgZG93biwgdGhhdCB0aGV5IGFyZSBub25lPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+U2V4dG9uPC9TUEVBS0VSPgotPExJTkU+TWFzdGVyIGNvbnN0YWJsZSwgeW91IGdvIG5vdCB0aGUgd2F5IHRvIGV4YW1pbmU6PC9MSU5FPgotPExJTkU+eW91IG11c3QgY2FsbCBmb3J0aCB0aGUgd2F0Y2ggdGhhdCBhcmUgdGhlaXIgYWNjdXNlcnMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET0dCRVJSWTwvU1BFQUtFUj4KLTxMSU5FPlllYSwgbWFycnksIHRoYXQncyB0aGUgZWZ0ZXN0IHdheS4gTGV0IHRoZSB3YXRjaDwvTElORT4KLTxMSU5FPmNvbWUgZm9ydGguIE1hc3RlcnMsIEkgY2hhcmdlIHlvdSwgaW4gdGhlIHByaW5jZSdzPC9MSU5FPgotPExJTkU+bmFtZSwgYWNjdXNlIHRoZXNlIG1lbi48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkZpcnN0IFdhdGNobWFuPC9TUEVBS0VSPgotPExJTkU+VGhpcyBtYW4gc2FpZCwgc2lyLCB0aGF0IERvbiBKb2huLCB0aGUgcHJpbmNlJ3M8L0xJTkU+Ci08TElORT5icm90aGVyLCB3YXMgYSB2aWxsYWluLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9HQkVSUlk8L1NQRUFLRVI+Ci08TElORT5Xcml0ZSBkb3duIFByaW5jZSBKb2huIGEgdmlsbGFpbi4gV2h5LCB0aGlzIGlzIGZsYXQ8L0xJTkU+Ci08TElORT5wZXJqdXJ5LCB0byBjYWxsIGEgcHJpbmNlJ3MgYnJvdGhlciB2aWxsYWluLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Qk9SQUNISU88L1NQRUFLRVI+Ci08TElORT5NYXN0ZXIgY29uc3RhYmxlLC0tPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET0dCRVJSWTwvU1BFQUtFUj4KLTxMSU5FPlByYXkgdGhlZSwgZmVsbG93LCBwZWFjZTogSSBkbyBub3QgbGlrZSB0aHkgbG9vayw8L0xJTkU+Ci08TElORT5JIHByb21pc2UgdGhlZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPlNleHRvbjwvU1BFQUtFUj4KLTxMSU5FPldoYXQgaGVhcmQgeW91IGhpbSBzYXkgZWxzZT88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPlNlY29uZCBXYXRjaG1hbjwvU1BFQUtFUj4KLTxMSU5FPk1hcnJ5LCB0aGF0IGhlIGhhZCByZWNlaXZlZCBhIHRob3VzYW5kIGR1Y2F0cyBvZjwvTElORT4KLTxMSU5FPkRvbiBKb2huIGZvciBhY2N1c2luZyB0aGUgTGFkeSBIZXJvIHdyb25nZnVsbHkuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET0dCRVJSWTwvU1BFQUtFUj4KLTxMSU5FPkZsYXQgYnVyZ2xhcnkgYXMgZXZlciB3YXMgY29tbWl0dGVkLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+VkVSR0VTPC9TUEVBS0VSPgotPExJTkU+WWVhLCBieSBtYXNzLCB0aGF0IGl0IGlzLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+U2V4dG9uPC9TUEVBS0VSPgotPExJTkU+V2hhdCBlbHNlLCBmZWxsb3c/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5GaXJzdCBXYXRjaG1hbjwvU1BFQUtFUj4KLTxMSU5FPkFuZCB0aGF0IENvdW50IENsYXVkaW8gZGlkIG1lYW4sIHVwb24gaGlzIHdvcmRzLCB0bzwvTElORT4KLTxMSU5FPmRpc2dyYWNlIEhlcm8gYmVmb3JlIHRoZSB3aG9sZSBhc3NlbWJseS4gYW5kIG5vdCBtYXJyeSBoZXIuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET0dCRVJSWTwvU1BFQUtFUj4KLTxMSU5FPk8gdmlsbGFpbiEgdGhvdSB3aWx0IGJlIGNvbmRlbW5lZCBpbnRvIGV2ZXJsYXN0aW5nPC9MSU5FPgotPExJTkU+cmVkZW1wdGlvbiBmb3IgdGhpcy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPlNleHRvbjwvU1BFQUtFUj4KLTxMSU5FPldoYXQgZWxzZT88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPldhdGNobWFuPC9TUEVBS0VSPgotPExJTkU+VGhpcyBpcyBhbGwuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5TZXh0b248L1NQRUFLRVI+Ci08TElORT5BbmQgdGhpcyBpcyBtb3JlLCBtYXN0ZXJzLCB0aGFuIHlvdSBjYW4gZGVueS48L0xJTkU+Ci08TElORT5QcmluY2UgSm9obiBpcyB0aGlzIG1vcm5pbmcgc2VjcmV0bHkgc3RvbGVuIGF3YXk7PC9MSU5FPgotPExJTkU+SGVybyB3YXMgaW4gdGhpcyBtYW5uZXIgYWNjdXNlZCwgaW4gdGhpcyB2ZXJ5IG1hbm5lcjwvTElORT4KLTxMSU5FPnJlZnVzZWQsIGFuZCB1cG9uIHRoZSBncmllZiBvZiB0aGlzIHN1ZGRlbmx5IGRpZWQuPC9MSU5FPgotPExJTkU+TWFzdGVyIGNvbnN0YWJsZSwgbGV0IHRoZXNlIG1lbiBiZSBib3VuZCwgYW5kPC9MSU5FPgotPExJTkU+YnJvdWdodCB0byBMZW9uYXRvJ3M6IEkgd2lsbCBnbyBiZWZvcmUgYW5kIHNob3c8L0xJTkU+Ci08TElORT5oaW0gdGhlaXIgZXhhbWluYXRpb24uPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLQotPFNUQUdFRElSPkV4aXQ8L1NUQUdFRElSPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9HQkVSUlk8L1NQRUFLRVI+Ci08TElORT5Db21lLCBsZXQgdGhlbSBiZSBvcGluaW9uZWQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5WRVJHRVM8L1NQRUFLRVI+Ci08TElORT5MZXQgdGhlbSBiZSBpbiB0aGUgaGFuZHMtLTwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q09OUkFERTwvU1BFQUtFUj4KLTxMSU5FPk9mZiwgY294Y29tYiE8L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPR0JFUlJZPC9TUEVBS0VSPgotPExJTkU+R29kJ3MgbXkgbGlmZSwgd2hlcmUncyB0aGUgc2V4dG9uPyBsZXQgaGltIHdyaXRlPC9MSU5FPgotPExJTkU+ZG93biB0aGUgcHJpbmNlJ3Mgb2ZmaWNlciBjb3hjb21iLiBDb21lLCBiaW5kIHRoZW0uPC9MSU5FPgotPExJTkU+VGhvdSBuYXVnaHR5IHZhcmxldCE8L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNPTlJBREU8L1NQRUFLRVI+Ci08TElORT5Bd2F5ISB5b3UgYXJlIGFuIGFzcywgeW91IGFyZSBhbiBhc3MuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET0dCRVJSWTwvU1BFQUtFUj4KLTxMSU5FPkRvc3QgdGhvdSBub3Qgc3VzcGVjdCBteSBwbGFjZT8gZG9zdCB0aG91IG5vdDwvTElORT4KLTxMSU5FPnN1c3BlY3QgbXkgeWVhcnM/IE8gdGhhdCBoZSB3ZXJlIGhlcmUgdG8gd3JpdGUgbWU8L0xJTkU+Ci08TElORT5kb3duIGFuIGFzcyEgQnV0LCBtYXN0ZXJzLCByZW1lbWJlciB0aGF0IEkgYW0gYW48L0xJTkU+Ci08TElORT5hc3M7IHRob3VnaCBpdCBiZSBub3Qgd3JpdHRlbiBkb3duLCB5ZXQgZm9yZ2V0IG5vdDwvTElORT4KLTxMSU5FPnRoYXQgSSBhbSBhbiBhc3MuIE5vLCB0aG91IHZpbGxhaW4sIHRob3UgYXJ0IGZ1bGwgb2Y8L0xJTkU+Ci08TElORT5waWV0eSwgYXMgc2hhbGwgYmUgcHJvdmVkIHVwb24gdGhlZSBieSBnb29kIHdpdG5lc3MuPC9MSU5FPgotPExJTkU+SSBhbSBhIHdpc2UgZmVsbG93LCBhbmQsIHdoaWNoIGlzIG1vcmUsIGFuIG9mZmljZXIsPC9MSU5FPgotPExJTkU+YW5kLCB3aGljaCBpcyBtb3JlLCBhIGhvdXNlaG9sZGVyLCBhbmQsIHdoaWNoIGlzPC9MSU5FPgotPExJTkU+bW9yZSwgYXMgcHJldHR5IGEgcGllY2Ugb2YgZmxlc2ggYXMgYW55IGlzIGluPC9MSU5FPgotPExJTkU+TWVzc2luYSwgYW5kIG9uZSB0aGF0IGtub3dzIHRoZSBsYXcsIGdvIHRvOyBhbmQgYTwvTElORT4KLTxMSU5FPnJpY2ggZmVsbG93IGVub3VnaCwgZ28gdG87IGFuZCBhIGZlbGxvdyB0aGF0IGhhdGg8L0xJTkU+Ci08TElORT5oYWQgbG9zc2VzLCBhbmQgb25lIHRoYXQgaGF0aCB0d28gZ293bnMgYW5kIGV2ZXJ5PC9MSU5FPgotPExJTkU+dGhpbmcgaGFuZHNvbWUgYWJvdXQgaGltLiBCcmluZyBoaW0gYXdheS4gTyB0aGF0PC9MSU5FPgotPExJTkU+SSBoYWQgYmVlbiB3cml0IGRvd24gYW4gYXNzITwvTElORT4KLTwvU1BFRUNIPgotCi0KLTxTVEFHRURJUj5FeGV1bnQ8L1NUQUdFRElSPgotPC9TQ0VORT4KLQotPC9BQ1Q+Ci0KLTxBQ1Q+PFRJVExFPkFDVCBWPC9USVRMRT4KLQotPFNDRU5FPjxUSVRMRT5TQ0VORSBJLiAgQmVmb3JlIExFT05BVE8nUyBob3VzZS48L1RJVExFPgotPFNUQUdFRElSPkVudGVyIExFT05BVE8gYW5kIEFOVE9OSU88L1NUQUdFRElSPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QU5UT05JTzwvU1BFQUtFUj4KLTxMSU5FPklmIHlvdSBnbyBvbiB0aHVzLCB5b3Ugd2lsbCBraWxsIHlvdXJzZWxmOjwvTElORT4KLTxMSU5FPkFuZCAndGlzIG5vdCB3aXNkb20gdGh1cyB0byBzZWNvbmQgZ3JpZWY8L0xJTkU+Ci08TElORT5BZ2FpbnN0IHlvdXJzZWxmLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPkkgcHJheSB0aGVlLCBjZWFzZSB0aHkgY291bnNlbCw8L0xJTkU+Ci08TElORT5XaGljaCBmYWxscyBpbnRvIG1pbmUgZWFycyBhcyBwcm9maXRsZXNzPC9MSU5FPgotPExJTkU+QXMgd2F0ZXIgaW4gYSBzaWV2ZTogZ2l2ZSBub3QgbWUgY291bnNlbDs8L0xJTkU+Ci08TElORT5Ob3IgbGV0IG5vIGNvbWZvcnRlciBkZWxpZ2h0IG1pbmUgZWFyPC9MSU5FPgotPExJTkU+QnV0IHN1Y2ggYSBvbmUgd2hvc2Ugd3JvbmdzIGRvIHN1aXQgd2l0aCBtaW5lLjwvTElORT4KLTxMSU5FPkJyaW5nIG1lIGEgZmF0aGVyIHRoYXQgc28gbG92ZWQgaGlzIGNoaWxkLDwvTElORT4KLTxMSU5FPldob3NlIGpveSBvZiBoZXIgaXMgb3ZlcndoZWxtJ2QgbGlrZSBtaW5lLDwvTElORT4KLTxMSU5FPkFuZCBiaWQgaGltIHNwZWFrIG9mIHBhdGllbmNlOzwvTElORT4KLTxMSU5FPk1lYXN1cmUgaGlzIHdvZSB0aGUgbGVuZ3RoIGFuZCBicmVhZHRoIG9mIG1pbmU8L0xJTkU+Ci08TElORT5BbmQgbGV0IGl0IGFuc3dlciBldmVyeSBzdHJhaW4gZm9yIHN0cmFpbiw8L0xJTkU+Ci08TElORT5BcyB0aHVzIGZvciB0aHVzIGFuZCBzdWNoIGEgZ3JpZWYgZm9yIHN1Y2gsPC9MSU5FPgotPExJTkU+SW4gZXZlcnkgbGluZWFtZW50LCBicmFuY2gsIHNoYXBlLCBhbmQgZm9ybTo8L0xJTkU+Ci08TElORT5JZiBzdWNoIGEgb25lIHdpbGwgc21pbGUgYW5kIHN0cm9rZSBoaXMgYmVhcmQsPC9MSU5FPgotPExJTkU+QmlkIHNvcnJvdyB3YWcsIGNyeSAnaGVtIScgd2hlbiBoZSBzaG91bGQgZ3JvYW4sPC9MSU5FPgotPExJTkU+UGF0Y2ggZ3JpZWYgd2l0aCBwcm92ZXJicywgbWFrZSBtaXNmb3J0dW5lIGRydW5rPC9MSU5FPgotPExJTkU+V2l0aCBjYW5kbGUtd2FzdGVyczsgYnJpbmcgaGltIHlldCB0byBtZSw8L0xJTkU+Ci08TElORT5BbmQgSSBvZiBoaW0gd2lsbCBnYXRoZXIgcGF0aWVuY2UuPC9MSU5FPgotPExJTkU+QnV0IHRoZXJlIGlzIG5vIHN1Y2ggbWFuOiBmb3IsIGJyb3RoZXIsIG1lbjwvTElORT4KLTxMSU5FPkNhbiBjb3Vuc2VsIGFuZCBzcGVhayBjb21mb3J0IHRvIHRoYXQgZ3JpZWY8L0xJTkU+Ci08TElORT5XaGljaCB0aGV5IHRoZW1zZWx2ZXMgbm90IGZlZWw7IGJ1dCwgdGFzdGluZyBpdCw8L0xJTkU+Ci08TElORT5UaGVpciBjb3Vuc2VsIHR1cm5zIHRvIHBhc3Npb24sIHdoaWNoIGJlZm9yZTwvTElORT4KLTxMSU5FPldvdWxkIGdpdmUgcHJlY2VwdGlhbCBtZWRpY2luZSB0byByYWdlLDwvTElORT4KLTxMSU5FPkZldHRlciBzdHJvbmcgbWFkbmVzcyBpbiBhIHNpbGtlbiB0aHJlYWQsPC9MSU5FPgotPExJTkU+Q2hhcm0gYWNoZSB3aXRoIGFpciBhbmQgYWdvbnkgd2l0aCB3b3Jkczo8L0xJTkU+Ci08TElORT5Obywgbm87ICd0aXMgYWxsIG1lbidzIG9mZmljZSB0byBzcGVhayBwYXRpZW5jZTwvTElORT4KLTxMSU5FPlRvIHRob3NlIHRoYXQgd3JpbmcgdW5kZXIgdGhlIGxvYWQgb2Ygc29ycm93LDwvTElORT4KLTxMSU5FPkJ1dCBubyBtYW4ncyB2aXJ0dWUgbm9yIHN1ZmZpY2llbmN5PC9MSU5FPgotPExJTkU+VG8gYmUgc28gbW9yYWwgd2hlbiBoZSBzaGFsbCBlbmR1cmU8L0xJTkU+Ci08TElORT5UaGUgbGlrZSBoaW1zZWxmLiBUaGVyZWZvcmUgZ2l2ZSBtZSBubyBjb3Vuc2VsOjwvTElORT4KLTxMSU5FPk15IGdyaWVmcyBjcnkgbG91ZGVyIHRoYW4gYWR2ZXJ0aXNlbWVudC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkFOVE9OSU88L1NQRUFLRVI+Ci08TElORT5UaGVyZWluIGRvIG1lbiBmcm9tIGNoaWxkcmVuIG5vdGhpbmcgZGlmZmVyLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPkkgcHJheSB0aGVlLCBwZWFjZS4gSSB3aWxsIGJlIGZsZXNoIGFuZCBibG9vZDs8L0xJTkU+Ci08TElORT5Gb3IgdGhlcmUgd2FzIG5ldmVyIHlldCBwaGlsb3NvcGhlcjwvTElORT4KLTxMSU5FPlRoYXQgY291bGQgZW5kdXJlIHRoZSB0b290aGFjaGUgcGF0aWVudGx5LDwvTElORT4KLTxMSU5FPkhvd2V2ZXIgdGhleSBoYXZlIHdyaXQgdGhlIHN0eWxlIG9mIGdvZHM8L0xJTkU+Ci08TElORT5BbmQgbWFkZSBhIHB1c2ggYXQgY2hhbmNlIGFuZCBzdWZmZXJhbmNlLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QU5UT05JTzwvU1BFQUtFUj4KLTxMSU5FPllldCBiZW5kIG5vdCBhbGwgdGhlIGhhcm0gdXBvbiB5b3Vyc2VsZjs8L0xJTkU+Ci08TElORT5NYWtlIHRob3NlIHRoYXQgZG8gb2ZmZW5kIHlvdSBzdWZmZXIgdG9vLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPlRoZXJlIHRob3Ugc3BlYWsnc3QgcmVhc29uOiBuYXksIEkgd2lsbCBkbyBzby48L0xJTkU+Ci08TElORT5NeSBzb3VsIGRvdGggdGVsbCBtZSBIZXJvIGlzIGJlbGllZDs8L0xJTkU+Ci08TElORT5BbmQgdGhhdCBzaGFsbCBDbGF1ZGlvIGtub3c7IHNvIHNoYWxsIHRoZSBwcmluY2U8L0xJTkU+Ci08TElORT5BbmQgYWxsIG9mIHRoZW0gdGhhdCB0aHVzIGRpc2hvbm91ciBoZXIuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5BTlRPTklPPC9TUEVBS0VSPgotPExJTkU+SGVyZSBjb21lcyB0aGUgcHJpbmNlIGFuZCBDbGF1ZGlvIGhhc3RpbHkuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLQotPFNUQUdFRElSPkVudGVyIERPTiBQRURSTyBhbmQgQ0xBVURJTzwvU1RBR0VESVI+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5Hb29kIGRlbiwgZ29vZCBkZW4uPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+R29vZCBkYXkgdG8gYm90aCBvZiB5b3UuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+SGVhciB5b3UuIG15IGxvcmRzLC0tPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5XZSBoYXZlIHNvbWUgaGFzdGUsIExlb25hdG8uPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+U29tZSBoYXN0ZSwgbXkgbG9yZCEgd2VsbCwgZmFyZSB5b3Ugd2VsbCwgbXkgbG9yZDo8L0xJTkU+Ci08TElORT5BcmUgeW91IHNvIGhhc3R5IG5vdz8gd2VsbCwgYWxsIGlzIG9uZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPk5heSwgZG8gbm90IHF1YXJyZWwgd2l0aCB1cywgZ29vZCBvbGQgbWFuLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QU5UT05JTzwvU1BFQUtFUj4KLTxMSU5FPklmIGhlIGNvdWxkIHJpZ2h0IGhpbXNlbGYgd2l0aCBxdWFycmVsaW5nLDwvTElORT4KLTxMSU5FPlNvbWUgb2YgdXMgd291bGQgbGllIGxvdy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5XaG8gd3JvbmdzIGhpbT88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5NYXJyeSwgdGhvdSBkb3N0IHdyb25nIG1lOyB0aG91IGRpc3NlbWJsZXIsIHRob3U6LS08L0xJTkU+Ci08TElORT5OYXksIG5ldmVyIGxheSB0aHkgaGFuZCB1cG9uIHRoeSBzd29yZDs8L0xJTkU+Ci08TElORT5JIGZlYXIgdGhlZSBub3QuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+TWFycnksIGJlc2hyZXcgbXkgaGFuZCw8L0xJTkU+Ci08TElORT5JZiBpdCBzaG91bGQgZ2l2ZSB5b3VyIGFnZSBzdWNoIGNhdXNlIG9mIGZlYXI6PC9MSU5FPgotPExJTkU+SW4gZmFpdGgsIG15IGhhbmQgbWVhbnQgbm90aGluZyB0byBteSBzd29yZC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5UdXNoLCB0dXNoLCBtYW47IG5ldmVyIGZsZWVyIGFuZCBqZXN0IGF0IG1lOjwvTElORT4KLTxMSU5FPkkgc3BlYWsgbm90IGxpa2UgYSBkb3RhcmQgbm9yIGEgZm9vbCw8L0xJTkU+Ci08TElORT5BcyB1bmRlciBwcml2aWxlZ2Ugb2YgYWdlIHRvIGJyYWc8L0xJTkU+Ci08TElORT5XaGF0IEkgaGF2ZSBkb25lIGJlaW5nIHlvdW5nLCBvciB3aGF0IHdvdWxkIGRvPC9MSU5FPgotPExJTkU+V2VyZSBJIG5vdCBvbGQuIEtub3csIENsYXVkaW8sIHRvIHRoeSBoZWFkLDwvTElORT4KLTxMSU5FPlRob3UgaGFzdCBzbyB3cm9uZydkIG1pbmUgaW5ub2NlbnQgY2hpbGQgYW5kIG1lPC9MSU5FPgotPExJTkU+VGhhdCBJIGFtIGZvcmNlZCB0byBsYXkgbXkgcmV2ZXJlbmNlIGJ5PC9MSU5FPgotPExJTkU+QW5kLCB3aXRoIGdyZXkgaGFpcnMgYW5kIGJydWlzZSBvZiBtYW55IGRheXMsPC9MSU5FPgotPExJTkU+RG8gY2hhbGxlbmdlIHRoZWUgdG8gdHJpYWwgb2YgYSBtYW4uPC9MSU5FPgotPExJTkU+SSBzYXkgdGhvdSBoYXN0IGJlbGllZCBtaW5lIGlubm9jZW50IGNoaWxkOzwvTElORT4KLTxMSU5FPlRoeSBzbGFuZGVyIGhhdGggZ29uZSB0aHJvdWdoIGFuZCB0aHJvdWdoIGhlciBoZWFydCw8L0xJTkU+Ci08TElORT5BbmQgc2hlIGxpZXMgYnVyaWVkIHdpdGggaGVyIGFuY2VzdG9yczs8L0xJTkU+Ci08TElORT5PLCBpbiBhIHRvbWIgd2hlcmUgbmV2ZXIgc2NhbmRhbCBzbGVwdCw8L0xJTkU+Ci08TElORT5TYXZlIHRoaXMgb2YgaGVycywgZnJhbWVkIGJ5IHRoeSB2aWxsYW55ITwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPk15IHZpbGxhbnk/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+VGhpbmUsIENsYXVkaW87IHRoaW5lLCBJIHNheS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPllvdSBzYXkgbm90IHJpZ2h0LCBvbGQgbWFuLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPk15IGxvcmQsIG15IGxvcmQsPC9MSU5FPgotPExJTkU+SSdsbCBwcm92ZSBpdCBvbiBoaXMgYm9keSwgaWYgaGUgZGFyZSw8L0xJTkU+Ci08TElORT5EZXNwaXRlIGhpcyBuaWNlIGZlbmNlIGFuZCBoaXMgYWN0aXZlIHByYWN0aXNlLDwvTElORT4KLTxMSU5FPkhpcyBNYXkgb2YgeW91dGggYW5kIGJsb29tIG9mIGx1c3RpaG9vZC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5Bd2F5ISBJIHdpbGwgbm90IGhhdmUgdG8gZG8gd2l0aCB5b3UuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+Q2Fuc3QgdGhvdSBzbyBkYWZmIG1lPyBUaG91IGhhc3Qga2lsbCdkIG15IGNoaWxkOjwvTElORT4KLTxMSU5FPklmIHRob3Uga2lsbCdzdCBtZSwgYm95LCB0aG91IHNoYWx0IGtpbGwgYSBtYW4uPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5BTlRPTklPPC9TUEVBS0VSPgotPExJTkU+SGUgc2hhbGwga2lsbCB0d28gb2YgdXMsIGFuZCBtZW4gaW5kZWVkOjwvTElORT4KLTxMSU5FPkJ1dCB0aGF0J3Mgbm8gbWF0dGVyOyBsZXQgaGltIGtpbGwgb25lIGZpcnN0OzwvTElORT4KLTxMSU5FPldpbiBtZSBhbmQgd2VhciBtZTsgbGV0IGhpbSBhbnN3ZXIgbWUuPC9MSU5FPgotPExJTkU+Q29tZSwgZm9sbG93IG1lLCBib3k7IGNvbWUsIHNpciBib3ksIGNvbWUsIGZvbGxvdyBtZTo8L0xJTkU+Ci08TElORT5TaXIgYm95LCBJJ2xsIHdoaXAgeW91IGZyb20geW91ciBmb2luaW5nIGZlbmNlOzwvTElORT4KLTxMSU5FPk5heSwgYXMgSSBhbSBhIGdlbnRsZW1hbiwgSSB3aWxsLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPkJyb3RoZXIsLS08L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkFOVE9OSU88L1NQRUFLRVI+Ci08TElORT5Db250ZW50IHlvdXJzZWxmLiBHb2Qga25vd3MgSSBsb3ZlZCBteSBuaWVjZTs8L0xJTkU+Ci08TElORT5BbmQgc2hlIGlzIGRlYWQsIHNsYW5kZXInZCB0byBkZWF0aCBieSB2aWxsYWlucyw8L0xJTkU+Ci08TElORT5UaGF0IGRhcmUgYXMgd2VsbCBhbnN3ZXIgYSBtYW4gaW5kZWVkPC9MSU5FPgotPExJTkU+QXMgSSBkYXJlIHRha2UgYSBzZXJwZW50IGJ5IHRoZSB0b25ndWU6PC9MSU5FPgotPExJTkU+Qm95cywgYXBlcywgYnJhZ2dhcnRzLCBKYWNrcywgbWlsa3NvcHMhPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+QnJvdGhlciBBbnRvbnksLS08L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkFOVE9OSU88L1NQRUFLRVI+Ci08TElORT5Ib2xkIHlvdSBjb250ZW50LiBXaGF0LCBtYW4hIEkga25vdyB0aGVtLCB5ZWEsPC9MSU5FPgotPExJTkU+QW5kIHdoYXQgdGhleSB3ZWlnaCwgZXZlbiB0byB0aGUgdXRtb3N0IHNjcnVwbGUsLS08L0xJTkU+Ci08TElORT5TY3JhbWJsaW5nLCBvdXQtZmFjaW5nLCBmYXNoaW9uLW1vbmdpbmcgYm95cyw8L0xJTkU+Ci08TElORT5UaGF0IGxpZSBhbmQgY29nIGFuZCBmbG91dCwgZGVwcmF2ZSBhbmQgc2xhbmRlciw8L0xJTkU+Ci08TElORT5HbyBhbnRpY2x5LCBzaG93IG91dHdhcmQgaGlkZW91c25lc3MsPC9MSU5FPgotPExJTkU+QW5kIHNwZWFrIG9mZiBoYWxmIGEgZG96ZW4gZGFuZ2Vyb3VzIHdvcmRzLDwvTElORT4KLTxMSU5FPkhvdyB0aGV5IG1pZ2h0IGh1cnQgdGhlaXIgZW5lbWllcywgaWYgdGhleSBkdXJzdDs8L0xJTkU+Ci08TElORT5BbmQgdGhpcyBpcyBhbGwuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+QnV0LCBicm90aGVyIEFudG9ueSwtLTwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QU5UT05JTzwvU1BFQUtFUj4KLTxMSU5FPkNvbWUsICd0aXMgbm8gbWF0dGVyOjwvTElORT4KLTxMSU5FPkRvIG5vdCB5b3UgbWVkZGxlOyBsZXQgbWUgZGVhbCBpbiB0aGlzLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+R2VudGxlbWVuIGJvdGgsIHdlIHdpbGwgbm90IHdha2UgeW91ciBwYXRpZW5jZS48L0xJTkU+Ci08TElORT5NeSBoZWFydCBpcyBzb3JyeSBmb3IgeW91ciBkYXVnaHRlcidzIGRlYXRoOjwvTElORT4KLTxMSU5FPkJ1dCwgb24gbXkgaG9ub3VyLCBzaGUgd2FzIGNoYXJnZWQgd2l0aCBub3RoaW5nPC9MSU5FPgotPExJTkU+QnV0IHdoYXQgd2FzIHRydWUgYW5kIHZlcnkgZnVsbCBvZiBwcm9vZi48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5NeSBsb3JkLCBteSBsb3JkLC0tPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5JIHdpbGwgbm90IGhlYXIgeW91LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPk5vPyBDb21lLCBicm90aGVyOyBhd2F5ISBJIHdpbGwgYmUgaGVhcmQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5BTlRPTklPPC9TUEVBS0VSPgotPExJTkU+QW5kIHNoYWxsLCBvciBzb21lIG9mIHVzIHdpbGwgc21hcnQgZm9yIGl0LjwvTElORT4KLTwvU1BFRUNIPgotCi0KLTxTVEFHRURJUj5FeGV1bnQgTEVPTkFUTyBhbmQgQU5UT05JTzwvU1RBR0VESVI+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5TZWUsIHNlZTsgaGVyZSBjb21lcyB0aGUgbWFuIHdlIHdlbnQgdG8gc2Vlay48L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+RW50ZXIgQkVORURJQ0s8L1NUQUdFRElSPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPk5vdywgc2lnbmlvciwgd2hhdCBuZXdzPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5Hb29kIGRheSwgbXkgbG9yZC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPldlbGNvbWUsIHNpZ25pb3I6IHlvdSBhcmUgYWxtb3N0IGNvbWUgdG8gcGFydDwvTElORT4KLTxMSU5FPmFsbW9zdCBhIGZyYXkuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+V2UgaGFkIGxpa2UgdG8gaGF2ZSBoYWQgb3VyIHR3byBub3NlcyBzbmFwcGVkIG9mZjwvTElORT4KLTxMSU5FPndpdGggdHdvIG9sZCBtZW4gd2l0aG91dCB0ZWV0aC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPkxlb25hdG8gYW5kIGhpcyBicm90aGVyLiBXaGF0IHRoaW5rZXN0IHRob3U/IEhhZDwvTElORT4KLTxMSU5FPndlIGZvdWdodCwgSSBkb3VidCB3ZSBzaG91bGQgaGF2ZSBiZWVuIHRvbyB5b3VuZyBmb3IgdGhlbS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+SW4gYSBmYWxzZSBxdWFycmVsIHRoZXJlIGlzIG5vIHRydWUgdmFsb3VyLiBJIGNhbWU8L0xJTkU+Ci08TElORT50byBzZWVrIHlvdSBib3RoLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPldlIGhhdmUgYmVlbiB1cCBhbmQgZG93biB0byBzZWVrIHRoZWU7IGZvciB3ZSBhcmU8L0xJTkU+Ci08TElORT5oaWdoLXByb29mIG1lbGFuY2hvbHkgYW5kIHdvdWxkIGZhaW4gaGF2ZSBpdCBiZWF0ZW48L0xJTkU+Ci08TElORT5hd2F5LiBXaWx0IHRob3UgdXNlIHRoeSB3aXQ/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPkl0IGlzIGluIG15IHNjYWJiYXJkOiBzaGFsbCBJIGRyYXcgaXQ/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5Eb3N0IHRob3Ugd2VhciB0aHkgd2l0IGJ5IHRoeSBzaWRlPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPk5ldmVyIGFueSBkaWQgc28sIHRob3VnaCB2ZXJ5IG1hbnkgaGF2ZSBiZWVuIGJlc2lkZTwvTElORT4KLTxMSU5FPnRoZWlyIHdpdC4gSSB3aWxsIGJpZCB0aGVlIGRyYXcsIGFzIHdlIGRvIHRoZTwvTElORT4KLTxMSU5FPm1pbnN0cmVsczsgZHJhdywgdG8gcGxlYXN1cmUgdXMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5BcyBJIGFtIGFuIGhvbmVzdCBtYW4sIGhlIGxvb2tzIHBhbGUuIEFydCB0aG91PC9MSU5FPgotPExJTkU+c2ljaywgb3IgYW5ncnk/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+V2hhdCwgY291cmFnZSwgbWFuISBXaGF0IHRob3VnaCBjYXJlIGtpbGxlZCBhIGNhdCw8L0xJTkU+Ci08TElORT50aG91IGhhc3QgbWV0dGxlIGVub3VnaCBpbiB0aGVlIHRvIGtpbGwgY2FyZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+U2lyLCBJIHNoYWxsIG1lZXQgeW91ciB3aXQgaW4gdGhlIGNhcmVlciwgYW5kIHlvdTwvTElORT4KLTxMSU5FPmNoYXJnZSBpdCBhZ2FpbnN0IG1lLiBJIHByYXkgeW91IGNob29zZSBhbm90aGVyIHN1YmplY3QuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+TmF5LCB0aGVuLCBnaXZlIGhpbSBhbm90aGVyIHN0YWZmOiB0aGlzIGxhc3Qgd2FzPC9MSU5FPgotPExJTkU+YnJva2UgY3Jvc3MuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5CeSB0aGlzIGxpZ2h0LCBoZSBjaGFuZ2VzIG1vcmUgYW5kIG1vcmU6IEkgdGhpbms8L0xJTkU+Ci08TElORT5oZSBiZSBhbmdyeSBpbmRlZWQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+SWYgaGUgYmUsIGhlIGtub3dzIGhvdyB0byB0dXJuIGhpcyBnaXJkbGUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPlNoYWxsIEkgc3BlYWsgYSB3b3JkIGluIHlvdXIgZWFyPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPkdvZCBibGVzcyBtZSBmcm9tIGEgY2hhbGxlbmdlITwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT48U1RBR0VESVI+QXNpZGUgdG8gQ0xBVURJTzwvU1RBR0VESVI+ICBZb3UgYXJlIGEgdmlsbGFpbjsgSSBqZXN0IG5vdDo8L0xJTkU+Ci08TElORT5JIHdpbGwgbWFrZSBpdCBnb29kIGhvdyB5b3UgZGFyZSwgd2l0aCB3aGF0IHlvdTwvTElORT4KLTxMSU5FPmRhcmUsIGFuZCB3aGVuIHlvdSBkYXJlLiBEbyBtZSByaWdodCwgb3IgSSB3aWxsPC9MSU5FPgotPExJTkU+cHJvdGVzdCB5b3VyIGNvd2FyZGljZS4gWW91IGhhdmUga2lsbGVkIGEgc3dlZXQ8L0xJTkU+Ci08TElORT5sYWR5LCBhbmQgaGVyIGRlYXRoIHNoYWxsIGZhbGwgaGVhdnkgb24geW91LiBMZXQgbWU8L0xJTkU+Ci08TElORT5oZWFyIGZyb20geW91LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPldlbGwsIEkgd2lsbCBtZWV0IHlvdSwgc28gSSBtYXkgaGF2ZSBnb29kIGNoZWVyLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+V2hhdCwgYSBmZWFzdCwgYSBmZWFzdD88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5JJyBmYWl0aCwgSSB0aGFuayBoaW07IGhlIGhhdGggYmlkIG1lIHRvIGEgY2FsZidzPC9MSU5FPgotPExJTkU+aGVhZCBhbmQgYSBjYXBvbjsgdGhlIHdoaWNoIGlmIEkgZG8gbm90IGNhcnZlIG1vc3Q8L0xJTkU+Ci08TElORT5jdXJpb3VzbHksIHNheSBteSBrbmlmZSdzIG5hdWdodC4gU2hhbGwgSSBub3QgZmluZDwvTElORT4KLTxMSU5FPmEgd29vZGNvY2sgdG9vPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5TaXIsIHlvdXIgd2l0IGFtYmxlcyB3ZWxsOyBpdCBnb2VzIGVhc2lseS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPkknbGwgdGVsbCB0aGVlIGhvdyBCZWF0cmljZSBwcmFpc2VkIHRoeSB3aXQgdGhlPC9MSU5FPgotPExJTkU+b3RoZXIgZGF5LiBJIHNhaWQsIHRob3UgaGFkc3QgYSBmaW5lIHdpdDogJ1RydWUsJzwvTElORT4KLTxMSU5FPnNhaWQgc2hlLCAnYSBmaW5lIGxpdHRsZSBvbmUuJyAnTm8sJyBzYWlkIEksICdhPC9MSU5FPgotPExJTkU+Z3JlYXQgd2l0OicgJ1JpZ2h0LCcgc2F5cyBzaGUsICdhIGdyZWF0IGdyb3NzIG9uZS4nPC9MSU5FPgotPExJTkU+J05heSwnIHNhaWQgSSwgJ2EgZ29vZCB3aXQ6JyAnSnVzdCwnIHNhaWQgc2hlLCAnaXQ8L0xJTkU+Ci08TElORT5odXJ0cyBub2JvZHkuJyAnTmF5LCcgc2FpZCBJLCAndGhlIGdlbnRsZW1hbjwvTElORT4KLTxMSU5FPmlzIHdpc2U6JyAnQ2VydGFpbiwnIHNhaWQgc2hlLCAnYSB3aXNlIGdlbnRsZW1hbi4nPC9MSU5FPgotPExJTkU+J05heSwnIHNhaWQgSSwgJ2hlIGhhdGggdGhlIHRvbmd1ZXM6JyAnVGhhdCBJPC9MSU5FPgotPExJTkU+YmVsaWV2ZSwnIHNhaWQgc2hlLCAnZm9yIGhlIHN3b3JlIGEgdGhpbmcgdG8gbWUgb248L0xJTkU+Ci08TElORT5Nb25kYXkgbmlnaHQsIHdoaWNoIGhlIGZvcnN3b3JlIG9uIFR1ZXNkYXkgbW9ybmluZzs8L0xJTkU+Ci08TElORT50aGVyZSdzIGEgZG91YmxlIHRvbmd1ZTsgdGhlcmUncyB0d28gdG9uZ3Vlcy4nIFRodXM8L0xJTkU+Ci08TElORT5kaWQgc2hlLCBhbiBob3VyIHRvZ2V0aGVyLCB0cmFuc3NoYXBlIHRoeSBwYXJ0aWN1bGFyPC9MSU5FPgotPExJTkU+dmlydHVlczogeWV0IGF0IGxhc3Qgc2hlIGNvbmNsdWRlZCB3aXRoIGEgc2lnaCwgdGhvdTwvTElORT4KLTxMSU5FPndhc3QgdGhlIHByb3BlcmVzdCBtYW4gaW4gSXRhbHkuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+Rm9yIHRoZSB3aGljaCBzaGUgd2VwdCBoZWFydGlseSBhbmQgc2FpZCBzaGUgY2FyZWQ8L0xJTkU+Ci08TElORT5ub3QuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5ZZWEsIHRoYXQgc2hlIGRpZDogYnV0IHlldCwgZm9yIGFsbCB0aGF0LCBhbiBpZiBzaGU8L0xJTkU+Ci08TElORT5kaWQgbm90IGhhdGUgaGltIGRlYWRseSwgc2hlIHdvdWxkIGxvdmUgaGltIGRlYXJseTo8L0xJTkU+Ci08TElORT50aGUgb2xkIG1hbidzIGRhdWdodGVyIHRvbGQgdXMgYWxsLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPkFsbCwgYWxsOyBhbmQsIG1vcmVvdmVyLCBHb2Qgc2F3IGhpbSB3aGVuIGhlIHdhczwvTElORT4KLTxMSU5FPmhpZCBpbiB0aGUgZ2FyZGVuLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+QnV0IHdoZW4gc2hhbGwgd2Ugc2V0IHRoZSBzYXZhZ2UgYnVsbCdzIGhvcm5zIG9uPC9MSU5FPgotPExJTkU+dGhlIHNlbnNpYmxlIEJlbmVkaWNrJ3MgaGVhZD88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5ZZWEsIGFuZCB0ZXh0IHVuZGVybmVhdGgsICdIZXJlIGR3ZWxscyBCZW5lZGljayB0aGU8L0xJTkU+Ci08TElORT5tYXJyaWVkIG1hbic/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPkZhcmUgeW91IHdlbGwsIGJveTogeW91IGtub3cgbXkgbWluZC4gSSB3aWxsIGxlYXZlPC9MSU5FPgotPExJTkU+eW91IG5vdyB0byB5b3VyIGdvc3NpcC1saWtlIGh1bW91cjogeW91IGJyZWFrIGplc3RzPC9MSU5FPgotPExJTkU+YXMgYnJhZ2dhcnRzIGRvIHRoZWlyIGJsYWRlcywgd2hpY2ggR29kIGJlIHRoYW5rZWQsPC9MSU5FPgotPExJTkU+aHVydCBub3QuIE15IGxvcmQsIGZvciB5b3VyIG1hbnkgY291cnRlc2llcyBJIHRoYW5rPC9MSU5FPgotPExJTkU+eW91OiBJIG11c3QgZGlzY29udGludWUgeW91ciBjb21wYW55OiB5b3VyIGJyb3RoZXI8L0xJTkU+Ci08TElORT50aGUgYmFzdGFyZCBpcyBmbGVkIGZyb20gTWVzc2luYTogeW91IGhhdmUgYW1vbmc8L0xJTkU+Ci08TElORT55b3Uga2lsbGVkIGEgc3dlZXQgYW5kIGlubm9jZW50IGxhZHkuIEZvciBteSBMb3JkPC9MSU5FPgotPExJTkU+TGFja2JlYXJkIHRoZXJlLCBoZSBhbmQgSSBzaGFsbCBtZWV0OiBhbmQsIHRpbGw8L0xJTkU+Ci08TElORT50aGVuLCBwZWFjZSBiZSB3aXRoIGhpbS48L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+RXhpdDwvU1RBR0VESVI+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5IZSBpcyBpbiBlYXJuZXN0LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPkluIG1vc3QgcHJvZm91bmQgZWFybmVzdDsgYW5kLCBJJ2xsIHdhcnJhbnQgeW91LCBmb3I8L0xJTkU+Ci08TElORT50aGUgbG92ZSBvZiBCZWF0cmljZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPkFuZCBoYXRoIGNoYWxsZW5nZWQgdGhlZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5Nb3N0IHNpbmNlcmVseS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPldoYXQgYSBwcmV0dHkgdGhpbmcgbWFuIGlzIHdoZW4gaGUgZ29lcyBpbiBoaXM8L0xJTkU+Ci08TElORT5kb3VibGV0IGFuZCBob3NlIGFuZCBsZWF2ZXMgb2ZmIGhpcyB3aXQhPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+SGUgaXMgdGhlbiBhIGdpYW50IHRvIGFuIGFwZTsgYnV0IHRoZW4gaXMgYW4gYXBlIGE8L0xJTkU+Ci08TElORT5kb2N0b3IgdG8gc3VjaCBhIG1hbi48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPkJ1dCwgc29mdCB5b3UsIGxldCBtZSBiZTogcGx1Y2sgdXAsIG15IGhlYXJ0LCBhbmQ8L0xJTkU+Ci08TElORT5iZSBzYWQuIERpZCBoZSBub3Qgc2F5LCBteSBicm90aGVyIHdhcyBmbGVkPzwvTElORT4KLTwvU1BFRUNIPgotCi0KLTxTVEFHRURJUj5FbnRlciBET0dCRVJSWSwgVkVSR0VTLCBhbmQgdGhlIFdhdGNoLCB3aXRoIENPTlJBREUKLWFuZCBCT1JBQ0hJTzwvU1RBR0VESVI+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET0dCRVJSWTwvU1BFQUtFUj4KLTxMSU5FPkNvbWUgeW91LCBzaXI6IGlmIGp1c3RpY2UgY2Fubm90IHRhbWUgeW91LCBzaGU8L0xJTkU+Ci08TElORT5zaGFsbCBuZSdlciB3ZWlnaCBtb3JlIHJlYXNvbnMgaW4gaGVyIGJhbGFuY2U6IG5heSw8L0xJTkU+Ci08TElORT5hbiB5b3UgYmUgYSBjdXJzaW5nIGh5cG9jcml0ZSBvbmNlLCB5b3UgbXVzdCBiZSBsb29rZWQgdG8uPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5Ib3cgbm93PyB0d28gb2YgbXkgYnJvdGhlcidzIG1lbiBib3VuZCEgQm9yYWNoaW88L0xJTkU+Ci08TElORT5vbmUhPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+SGVhcmtlbiBhZnRlciB0aGVpciBvZmZlbmNlLCBteSBsb3JkLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+T2ZmaWNlcnMsIHdoYXQgb2ZmZW5jZSBoYXZlIHRoZXNlIG1lbiBkb25lPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9HQkVSUlk8L1NQRUFLRVI+Ci08TElORT5NYXJyeSwgc2lyLCB0aGV5IGhhdmUgY29tbWl0dGVkIGZhbHNlIHJlcG9ydDs8L0xJTkU+Ci08TElORT5tb3Jlb3ZlciwgdGhleSBoYXZlIHNwb2tlbiB1bnRydXRoczsgc2Vjb25kYXJpbHksPC9MSU5FPgotPExJTkU+dGhleSBhcmUgc2xhbmRlcnM7IHNpeHRoIGFuZCBsYXN0bHksIHRoZXkgaGF2ZTwvTElORT4KLTxMSU5FPmJlbGllZCBhIGxhZHk7IHRoaXJkbHksIHRoZXkgaGF2ZSB2ZXJpZmllZCB1bmp1c3Q8L0xJTkU+Ci08TElORT50aGluZ3M7IGFuZCwgdG8gY29uY2x1ZGUsIHRoZXkgYXJlIGx5aW5nIGtuYXZlcy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPkZpcnN0LCBJIGFzayB0aGVlIHdoYXQgdGhleSBoYXZlIGRvbmU7IHRoaXJkbHksIEk8L0xJTkU+Ci08TElORT5hc2sgdGhlZSB3aGF0J3MgdGhlaXIgb2ZmZW5jZTsgc2l4dGggYW5kIGxhc3RseSwgd2h5PC9MSU5FPgotPExJTkU+dGhleSBhcmUgY29tbWl0dGVkOyBhbmQsIHRvIGNvbmNsdWRlLCB3aGF0IHlvdSBsYXk8L0xJTkU+Ci08TElORT50byB0aGVpciBjaGFyZ2UuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+UmlnaHRseSByZWFzb25lZCwgYW5kIGluIGhpcyBvd24gZGl2aXNpb246IGFuZCwgYnk8L0xJTkU+Ci08TElORT5teSB0cm90aCwgdGhlcmUncyBvbmUgbWVhbmluZyB3ZWxsIHN1aXRlZC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPldobyBoYXZlIHlvdSBvZmZlbmRlZCwgbWFzdGVycywgdGhhdCB5b3UgYXJlIHRodXM8L0xJTkU+Ci08TElORT5ib3VuZCB0byB5b3VyIGFuc3dlcj8gdGhpcyBsZWFybmVkIGNvbnN0YWJsZSBpczwvTElORT4KLTxMSU5FPnRvbyBjdW5uaW5nIHRvIGJlIHVuZGVyc3Rvb2Q6IHdoYXQncyB5b3VyIG9mZmVuY2U/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CT1JBQ0hJTzwvU1BFQUtFUj4KLTxMSU5FPlN3ZWV0IHByaW5jZSwgbGV0IG1lIGdvIG5vIGZhcnRoZXIgdG8gbWluZSBhbnN3ZXI6PC9MSU5FPgotPExJTkU+ZG8geW91IGhlYXIgbWUsIGFuZCBsZXQgdGhpcyBjb3VudCBraWxsIG1lLiBJIGhhdmU8L0xJTkU+Ci08TElORT5kZWNlaXZlZCBldmVuIHlvdXIgdmVyeSBleWVzOiB3aGF0IHlvdXIgd2lzZG9tczwvTElORT4KLTxMSU5FPmNvdWxkIG5vdCBkaXNjb3ZlciwgdGhlc2Ugc2hhbGxvdyBmb29scyBoYXZlIGJyb3VnaHQ8L0xJTkU+Ci08TElORT50byBsaWdodDogd2hvIGluIHRoZSBuaWdodCBvdmVyaGVhcmQgbWUgY29uZmVzc2luZzwvTElORT4KLTxMSU5FPnRvIHRoaXMgbWFuIGhvdyBEb24gSm9obiB5b3VyIGJyb3RoZXIgaW5jZW5zZWQgbWU8L0xJTkU+Ci08TElORT50byBzbGFuZGVyIHRoZSBMYWR5IEhlcm8sIGhvdyB5b3Ugd2VyZSBicm91Z2h0IGludG88L0xJTkU+Ci08TElORT50aGUgb3JjaGFyZCBhbmQgc2F3IG1lIGNvdXJ0IE1hcmdhcmV0IGluIEhlcm8nczwvTElORT4KLTxMSU5FPmdhcm1lbnRzLCBob3cgeW91IGRpc2dyYWNlZCBoZXIsIHdoZW4geW91IHNob3VsZDwvTElORT4KLTxMSU5FPm1hcnJ5IGhlcjogbXkgdmlsbGFueSB0aGV5IGhhdmUgdXBvbiByZWNvcmQ7IHdoaWNoPC9MSU5FPgotPExJTkU+SSBoYWQgcmF0aGVyIHNlYWwgd2l0aCBteSBkZWF0aCB0aGFuIHJlcGVhdCBvdmVyPC9MSU5FPgotPExJTkU+dG8gbXkgc2hhbWUuIFRoZSBsYWR5IGlzIGRlYWQgdXBvbiBtaW5lIGFuZCBteTwvTElORT4KLTxMSU5FPm1hc3RlcidzIGZhbHNlIGFjY3VzYXRpb247IGFuZCwgYnJpZWZseSwgSSBkZXNpcmU8L0xJTkU+Ci08TElORT5ub3RoaW5nIGJ1dCB0aGUgcmV3YXJkIG9mIGEgdmlsbGFpbi48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPlJ1bnMgbm90IHRoaXMgc3BlZWNoIGxpa2UgaXJvbiB0aHJvdWdoIHlvdXIgYmxvb2Q/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+SSBoYXZlIGRydW5rIHBvaXNvbiB3aGlsZXMgaGUgdXR0ZXInZCBpdC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPkJ1dCBkaWQgbXkgYnJvdGhlciBzZXQgdGhlZSBvbiB0byB0aGlzPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Qk9SQUNISU88L1NQRUFLRVI+Ci08TElORT5ZZWEsIGFuZCBwYWlkIG1lIHJpY2hseSBmb3IgdGhlIHByYWN0aXNlIG9mIGl0LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+SGUgaXMgY29tcG9zZWQgYW5kIGZyYW1lZCBvZiB0cmVhY2hlcnk6PC9MSU5FPgotPExJTkU+QW5kIGZsZWQgaGUgaXMgdXBvbiB0aGlzIHZpbGxhbnkuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+U3dlZXQgSGVybyEgbm93IHRoeSBpbWFnZSBkb3RoIGFwcGVhcjwvTElORT4KLTxMSU5FPkluIHRoZSByYXJlIHNlbWJsYW5jZSB0aGF0IEkgbG92ZWQgaXQgZmlyc3QuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET0dCRVJSWTwvU1BFQUtFUj4KLTxMSU5FPkNvbWUsIGJyaW5nIGF3YXkgdGhlIHBsYWludGlmZnM6IGJ5IHRoaXMgdGltZSBvdXI8L0xJTkU+Ci08TElORT5zZXh0b24gaGF0aCByZWZvcm1lZCBTaWduaW9yIExlb25hdG8gb2YgdGhlIG1hdHRlcjo8L0xJTkU+Ci08TElORT5hbmQsIG1hc3RlcnMsIGRvIG5vdCBmb3JnZXQgdG8gc3BlY2lmeSwgd2hlbiB0aW1lPC9MSU5FPgotPExJTkU+YW5kIHBsYWNlIHNoYWxsIHNlcnZlLCB0aGF0IEkgYW0gYW4gYXNzLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+VkVSR0VTPC9TUEVBS0VSPgotPExJTkU+SGVyZSwgaGVyZSBjb21lcyBtYXN0ZXIgU2lnbmlvciBMZW9uYXRvLCBhbmQgdGhlPC9MSU5FPgotPExJTkU+U2V4dG9uIHRvby48L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+UmUtZW50ZXIgTEVPTkFUTyBhbmQgQU5UT05JTywgd2l0aCB0aGUgU2V4dG9uPC9TVEFHRURJUj4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5XaGljaCBpcyB0aGUgdmlsbGFpbj8gbGV0IG1lIHNlZSBoaXMgZXllcyw8L0xJTkU+Ci08TElORT5UaGF0LCB3aGVuIEkgbm90ZSBhbm90aGVyIG1hbiBsaWtlIGhpbSw8L0xJTkU+Ci08TElORT5JIG1heSBhdm9pZCBoaW06IHdoaWNoIG9mIHRoZXNlIGlzIGhlPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Qk9SQUNISU88L1NQRUFLRVI+Ci08TElORT5JZiB5b3Ugd291bGQga25vdyB5b3VyIHdyb25nZXIsIGxvb2sgb24gbWUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+QXJ0IHRob3UgdGhlIHNsYXZlIHRoYXQgd2l0aCB0aHkgYnJlYXRoIGhhc3Qga2lsbCdkPC9MSU5FPgotPExJTkU+TWluZSBpbm5vY2VudCBjaGlsZD88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJPUkFDSElPPC9TUEVBS0VSPgotPExJTkU+WWVhLCBldmVuIEkgYWxvbmUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+Tm8sIG5vdCBzbywgdmlsbGFpbjsgdGhvdSBiZWxpZXN0IHRoeXNlbGY6PC9MSU5FPgotPExJTkU+SGVyZSBzdGFuZCBhIHBhaXIgb2YgaG9ub3VyYWJsZSBtZW47PC9MSU5FPgotPExJTkU+QSB0aGlyZCBpcyBmbGVkLCB0aGF0IGhhZCBhIGhhbmQgaW4gaXQuPC9MSU5FPgotPExJTkU+SSB0aGFuayB5b3UsIHByaW5jZXMsIGZvciBteSBkYXVnaHRlcidzIGRlYXRoOjwvTElORT4KLTxMSU5FPlJlY29yZCBpdCB3aXRoIHlvdXIgaGlnaCBhbmQgd29ydGh5IGRlZWRzOjwvTElORT4KLTxMSU5FPidUd2FzIGJyYXZlbHkgZG9uZSwgaWYgeW91IGJldGhpbmsgeW91IG9mIGl0LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPkkga25vdyBub3QgaG93IHRvIHByYXkgeW91ciBwYXRpZW5jZTs8L0xJTkU+Ci08TElORT5ZZXQgSSBtdXN0IHNwZWFrLiBDaG9vc2UgeW91ciByZXZlbmdlIHlvdXJzZWxmOzwvTElORT4KLTxMSU5FPkltcG9zZSBtZSB0byB3aGF0IHBlbmFuY2UgeW91ciBpbnZlbnRpb248L0xJTkU+Ci08TElORT5DYW4gbGF5IHVwb24gbXkgc2luOiB5ZXQgc2lubidkIEkgbm90PC9MSU5FPgotPExJTkU+QnV0IGluIG1pc3Rha2luZy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPkJ5IG15IHNvdWwsIG5vciBJOjwvTElORT4KLTxMSU5FPkFuZCB5ZXQsIHRvIHNhdGlzZnkgdGhpcyBnb29kIG9sZCBtYW4sPC9MSU5FPgotPExJTkU+SSB3b3VsZCBiZW5kIHVuZGVyIGFueSBoZWF2eSB3ZWlnaHQ8L0xJTkU+Ci08TElORT5UaGF0IGhlJ2xsIGVuam9pbiBtZSB0by48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5JIGNhbm5vdCBiaWQgeW91IGJpZCBteSBkYXVnaHRlciBsaXZlOzwvTElORT4KLTxMSU5FPlRoYXQgd2VyZSBpbXBvc3NpYmxlOiBidXQsIEkgcHJheSB5b3UgYm90aCw8L0xJTkU+Ci08TElORT5Qb3NzZXNzIHRoZSBwZW9wbGUgaW4gTWVzc2luYSBoZXJlPC9MSU5FPgotPExJTkU+SG93IGlubm9jZW50IHNoZSBkaWVkOyBhbmQgaWYgeW91ciBsb3ZlPC9MSU5FPgotPExJTkU+Q2FuIGxhYm91ciBvdWdodCBpbiBzYWQgaW52ZW50aW9uLDwvTElORT4KLTxMSU5FPkhhbmcgaGVyIGFuIGVwaXRhcGggdXBvbiBoZXIgdG9tYjwvTElORT4KLTxMSU5FPkFuZCBzaW5nIGl0IHRvIGhlciBib25lcywgc2luZyBpdCB0by1uaWdodDo8L0xJTkU+Ci08TElORT5Uby1tb3Jyb3cgbW9ybmluZyBjb21lIHlvdSB0byBteSBob3VzZSw8L0xJTkU+Ci08TElORT5BbmQgc2luY2UgeW91IGNvdWxkIG5vdCBiZSBteSBzb24taW4tbGF3LDwvTElORT4KLTxMSU5FPkJlIHlldCBteSBuZXBoZXc6IG15IGJyb3RoZXIgaGF0aCBhIGRhdWdodGVyLDwvTElORT4KLTxMSU5FPkFsbW9zdCB0aGUgY29weSBvZiBteSBjaGlsZCB0aGF0J3MgZGVhZCw8L0xJTkU+Ci08TElORT5BbmQgc2hlIGFsb25lIGlzIGhlaXIgdG8gYm90aCBvZiB1czo8L0xJTkU+Ci08TElORT5HaXZlIGhlciB0aGUgcmlnaHQgeW91IHNob3VsZCBoYXZlIGdpdmVuIGhlciBjb3VzaW4sPC9MSU5FPgotPExJTkU+QW5kIHNvIGRpZXMgbXkgcmV2ZW5nZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5PIG5vYmxlIHNpciw8L0xJTkU+Ci08TElORT5Zb3VyIG92ZXIta2luZG5lc3MgZG90aCB3cmluZyB0ZWFycyBmcm9tIG1lITwvTElORT4KLTxMSU5FPkkgZG8gZW1icmFjZSB5b3VyIG9mZmVyOyBhbmQgZGlzcG9zZTwvTElORT4KLTxMSU5FPkZvciBoZW5jZWZvcnRoIG9mIHBvb3IgQ2xhdWRpby48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5Uby1tb3Jyb3cgdGhlbiBJIHdpbGwgZXhwZWN0IHlvdXIgY29taW5nOzwvTElORT4KLTxMSU5FPlRvLW5pZ2h0IEkgdGFrZSBteSBsZWF2ZS4gVGhpcyBuYXVnaHR5IG1hbjwvTElORT4KLTxMSU5FPlNoYWxsIGZhY2UgdG8gZmFjZSBiZSBicm91Z2h0IHRvIE1hcmdhcmV0LDwvTElORT4KLTxMSU5FPldobyBJIGJlbGlldmUgd2FzIHBhY2snZCBpbiBhbGwgdGhpcyB3cm9uZyw8L0xJTkU+Ci08TElORT5IaXJlZCB0byBpdCBieSB5b3VyIGJyb3RoZXIuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CT1JBQ0hJTzwvU1BFQUtFUj4KLTxMSU5FPk5vLCBieSBteSBzb3VsLCBzaGUgd2FzIG5vdCw8L0xJTkU+Ci08TElORT5Ob3Iga25ldyBub3Qgd2hhdCBzaGUgZGlkIHdoZW4gc2hlIHNwb2tlIHRvIG1lLDwvTElORT4KLTxMSU5FPkJ1dCBhbHdheXMgaGF0aCBiZWVuIGp1c3QgYW5kIHZpcnR1b3VzPC9MSU5FPgotPExJTkU+SW4gYW55IHRoaW5nIHRoYXQgSSBkbyBrbm93IGJ5IGhlci48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPR0JFUlJZPC9TUEVBS0VSPgotPExJTkU+TW9yZW92ZXIsIHNpciwgd2hpY2ggaW5kZWVkIGlzIG5vdCB1bmRlciB3aGl0ZSBhbmQ8L0xJTkU+Ci08TElORT5ibGFjaywgdGhpcyBwbGFpbnRpZmYgaGVyZSwgdGhlIG9mZmVuZGVyLCBkaWQgY2FsbDwvTElORT4KLTxMSU5FPm1lIGFzczogSSBiZXNlZWNoIHlvdSwgbGV0IGl0IGJlIHJlbWVtYmVyZWQgaW4gaGlzPC9MSU5FPgotPExJTkU+cHVuaXNobWVudC4gQW5kIGFsc28sIHRoZSB3YXRjaCBoZWFyZCB0aGVtIHRhbGsgb2Y8L0xJTkU+Ci08TElORT5vbmUgRGVmb3JtZWQ6IHRoZXkgc2F5IGJlIHdlYXJzIGEga2V5IGluIGhpcyBlYXIgYW5kPC9MSU5FPgotPExJTkU+YSBsb2NrIGhhbmdpbmcgYnkgaXQsIGFuZCBib3Jyb3dzIG1vbmV5IGluIEdvZCdzPC9MSU5FPgotPExJTkU+bmFtZSwgdGhlIHdoaWNoIGhlIGhhdGggdXNlZCBzbyBsb25nIGFuZCBuZXZlciBwYWlkPC9MSU5FPgotPExJTkU+dGhhdCBub3cgbWVuIGdyb3cgaGFyZC1oZWFydGVkIGFuZCB3aWxsIGxlbmQgbm90aGluZzwvTElORT4KLTxMSU5FPmZvciBHb2QncyBzYWtlOiBwcmF5IHlvdSwgZXhhbWluZSBoaW0gdXBvbiB0aGF0IHBvaW50LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPkkgdGhhbmsgdGhlZSBmb3IgdGh5IGNhcmUgYW5kIGhvbmVzdCBwYWlucy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPR0JFUlJZPC9TUEVBS0VSPgotPExJTkU+WW91ciB3b3JzaGlwIHNwZWFrcyBsaWtlIGEgbW9zdCB0aGFua2Z1bCBhbmQ8L0xJTkU+Ci08TElORT5yZXZlcmVuZCB5b3V0aDsgYW5kIEkgcHJhaXNlIEdvZCBmb3IgeW91LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPlRoZXJlJ3MgZm9yIHRoeSBwYWlucy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPR0JFUlJZPC9TUEVBS0VSPgotPExJTkU+R29kIHNhdmUgdGhlIGZvdW5kYXRpb24hPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+R28sIEkgZGlzY2hhcmdlIHRoZWUgb2YgdGh5IHByaXNvbmVyLCBhbmQgSSB0aGFuayB0aGVlLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9HQkVSUlk8L1NQRUFLRVI+Ci08TElORT5JIGxlYXZlIGFuIGFycmFudCBrbmF2ZSB3aXRoIHlvdXIgd29yc2hpcDsgd2hpY2ggSTwvTElORT4KLTxMSU5FPmJlc2VlY2ggeW91ciB3b3JzaGlwIHRvIGNvcnJlY3QgeW91cnNlbGYsIGZvciB0aGU8L0xJTkU+Ci08TElORT5leGFtcGxlIG9mIG90aGVycy4gR29kIGtlZXAgeW91ciB3b3JzaGlwISBJIHdpc2g8L0xJTkU+Ci08TElORT55b3VyIHdvcnNoaXAgd2VsbDsgR29kIHJlc3RvcmUgeW91IHRvIGhlYWx0aCEgSTwvTElORT4KLTxMSU5FPmh1bWJseSBnaXZlIHlvdSBsZWF2ZSB0byBkZXBhcnQ7IGFuZCBpZiBhIG1lcnJ5PC9MSU5FPgotPExJTkU+bWVldGluZyBtYXkgYmUgd2lzaGVkLCBHb2QgcHJvaGliaXQgaXQhIENvbWUsIG5laWdoYm91ci48L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+RXhldW50IERPR0JFUlJZIGFuZCBWRVJHRVM8L1NUQUdFRElSPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPlVudGlsIHRvLW1vcnJvdyBtb3JuaW5nLCBsb3JkcywgZmFyZXdlbGwuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5BTlRPTklPPC9TUEVBS0VSPgotPExJTkU+RmFyZXdlbGwsIG15IGxvcmRzOiB3ZSBsb29rIGZvciB5b3UgdG8tbW9ycm93LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+V2Ugd2lsbCBub3QgZmFpbC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5Uby1uaWdodCBJJ2xsIG1vdXJuIHdpdGggSGVyby48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT48U1RBR0VESVI+VG8gdGhlIFdhdGNoPC9TVEFHRURJUj4gIEJyaW5nIHlvdSB0aGVzZSBmZWxsb3dzIG9uLiBXZSdsbDwvTElORT4KLTxMSU5FPnRhbGsgd2l0aCBNYXJnYXJldCw8L0xJTkU+Ci08TElORT5Ib3cgaGVyIGFjcXVhaW50YW5jZSBncmV3IHdpdGggdGhpcyBsZXdkIGZlbGxvdy48L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+RXhldW50LCBzZXZlcmFsbHk8L1NUQUdFRElSPgotPC9TQ0VORT4KLQotPFNDRU5FPjxUSVRMRT5TQ0VORSBJSS4gIExFT05BVE8nUyBnYXJkZW4uPC9USVRMRT4KLTxTVEFHRURJUj5FbnRlciBCRU5FRElDSyBhbmQgTUFSR0FSRVQsIG1lZXRpbmc8L1NUQUdFRElSPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5QcmF5IHRoZWUsIHN3ZWV0IE1pc3RyZXNzIE1hcmdhcmV0LCBkZXNlcnZlIHdlbGwgYXQ8L0xJTkU+Ci08TElORT5teSBoYW5kcyBieSBoZWxwaW5nIG1lIHRvIHRoZSBzcGVlY2ggb2YgQmVhdHJpY2UuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5NQVJHQVJFVDwvU1BFQUtFUj4KLTxMSU5FPldpbGwgeW91IHRoZW4gd3JpdGUgbWUgYSBzb25uZXQgaW4gcHJhaXNlIG9mIG15IGJlYXV0eT88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+SW4gc28gaGlnaCBhIHN0eWxlLCBNYXJnYXJldCwgdGhhdCBubyBtYW4gbGl2aW5nPC9MSU5FPgotPExJTkU+c2hhbGwgY29tZSBvdmVyIGl0OyBmb3IsIGluIG1vc3QgY29tZWx5IHRydXRoLCB0aG91PC9MSU5FPgotPExJTkU+ZGVzZXJ2ZXN0IGl0LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TUFSR0FSRVQ8L1NQRUFLRVI+Ci08TElORT5UbyBoYXZlIG5vIG1hbiBjb21lIG92ZXIgbWUhIHdoeSwgc2hhbGwgSSBhbHdheXM8L0xJTkU+Ci08TElORT5rZWVwIGJlbG93IHN0YWlycz88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+VGh5IHdpdCBpcyBhcyBxdWljayBhcyB0aGUgZ3JleWhvdW5kJ3MgbW91dGg7IGl0IGNhdGNoZXMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5NQVJHQVJFVDwvU1BFQUtFUj4KLTxMSU5FPkFuZCB5b3VycyBhcyBibHVudCBhcyB0aGUgZmVuY2VyJ3MgZm9pbHMsIHdoaWNoIGhpdCw8L0xJTkU+Ci08TElORT5idXQgaHVydCBub3QuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPkEgbW9zdCBtYW5seSB3aXQsIE1hcmdhcmV0OyBpdCB3aWxsIG5vdCBodXJ0IGE8L0xJTkU+Ci08TElORT53b21hbjogYW5kIHNvLCBJIHByYXkgdGhlZSwgY2FsbCBCZWF0cmljZTogSSBnaXZlPC9MSU5FPgotPExJTkU+dGhlZSB0aGUgYnVja2xlcnMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5NQVJHQVJFVDwvU1BFQUtFUj4KLTxMSU5FPkdpdmUgdXMgdGhlIHN3b3Jkczsgd2UgaGF2ZSBidWNrbGVycyBvZiBvdXIgb3duLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5JZiB5b3UgdXNlIHRoZW0sIE1hcmdhcmV0LCB5b3UgbXVzdCBwdXQgaW4gdGhlPC9MSU5FPgotPExJTkU+cGlrZXMgd2l0aCBhIHZpY2U7IGFuZCB0aGV5IGFyZSBkYW5nZXJvdXMgd2VhcG9ucyBmb3IgbWFpZHMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5NQVJHQVJFVDwvU1BFQUtFUj4KLTxMSU5FPldlbGwsIEkgd2lsbCBjYWxsIEJlYXRyaWNlIHRvIHlvdSwgd2hvIEkgdGhpbmsgaGF0aCBsZWdzLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5BbmQgdGhlcmVmb3JlIHdpbGwgY29tZS48L0xJTkU+Ci08U1RBR0VESVI+RXhpdCBNQVJHQVJFVDwvU1RBR0VESVI+Ci08U1RBR0VESVI+U2luZ3M8L1NUQUdFRElSPgotPExJTkU+VGhlIGdvZCBvZiBsb3ZlLDwvTElORT4KLTxMSU5FPlRoYXQgc2l0cyBhYm92ZSw8L0xJTkU+Ci08TElORT5BbmQga25vd3MgbWUsIGFuZCBrbm93cyBtZSw8L0xJTkU+Ci08TElORT5Ib3cgcGl0aWZ1bCBJIGRlc2VydmUsLS08L0xJTkU+Ci08TElORT5JIG1lYW4gaW4gc2luZ2luZzsgYnV0IGluIGxvdmluZywgTGVhbmRlciB0aGUgZ29vZDwvTElORT4KLTxMSU5FPnN3aW1tZXIsIFRyb2lsdXMgdGhlIGZpcnN0IGVtcGxveWVyIG9mIHBhbmRlcnMsIGFuZDwvTElORT4KLTxMSU5FPmEgd2hvbGUgYm9va2Z1bCBvZiB0aGVzZSBxdW9uZGFtIGNhcnBldC1tYW5nZXJzLDwvTElORT4KLTxMSU5FPndob3NlIG5hbWVzIHlldCBydW4gc21vb3RobHkgaW4gdGhlIGV2ZW4gcm9hZCBvZiBhPC9MSU5FPgotPExJTkU+YmxhbmsgdmVyc2UsIHdoeSwgdGhleSB3ZXJlIG5ldmVyIHNvIHRydWx5IHR1cm5lZDwvTElORT4KLTxMSU5FPm92ZXIgYW5kIG92ZXIgYXMgbXkgcG9vciBzZWxmIGluIGxvdmUuIE1hcnJ5LCBJPC9MSU5FPgotPExJTkU+Y2Fubm90IHNob3cgaXQgaW4gcmh5bWU7IEkgaGF2ZSB0cmllZDogSSBjYW4gZmluZDwvTElORT4KLTxMSU5FPm91dCBubyByaHltZSB0byAnbGFkeScgYnV0ICdiYWJ5LCcgYW4gaW5ub2NlbnQ8L0xJTkU+Ci08TElORT5yaHltZTsgZm9yICdzY29ybiwnICdob3JuLCcgYSBoYXJkIHJoeW1lOyBmb3IsPC9MSU5FPgotPExJTkU+J3NjaG9vbCwnICdmb29sLCcgYSBiYWJibGluZyByaHltZTsgdmVyeSBvbWlub3VzPC9MSU5FPgotPExJTkU+ZW5kaW5nczogbm8sIEkgd2FzIG5vdCBib3JuIHVuZGVyIGEgcmh5bWluZyBwbGFuZXQsPC9MSU5FPgotPExJTkU+bm9yIEkgY2Fubm90IHdvbyBpbiBmZXN0aXZhbCB0ZXJtcy48L0xJTkU+Ci08U1RBR0VESVI+RW50ZXIgQkVBVFJJQ0U8L1NUQUdFRElSPgotPExJTkU+U3dlZXQgQmVhdHJpY2UsIHdvdWxkc3QgdGhvdSBjb21lIHdoZW4gSSBjYWxsZWQgdGhlZT88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+WWVhLCBzaWduaW9yLCBhbmQgZGVwYXJ0IHdoZW4geW91IGJpZCBtZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+Tywgc3RheSBidXQgdGlsbCB0aGVuITwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT4nVGhlbicgaXMgc3Bva2VuOyBmYXJlIHlvdSB3ZWxsIG5vdzogYW5kIHlldCwgZXJlPC9MSU5FPgotPExJTkU+SSBnbywgbGV0IG1lIGdvIHdpdGggdGhhdCBJIGNhbWU7IHdoaWNoIGlzLCB3aXRoPC9MSU5FPgotPExJTkU+a25vd2luZyB3aGF0IGhhdGggcGFzc2VkIGJldHdlZW4geW91IGFuZCBDbGF1ZGlvLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5Pbmx5IGZvdWwgd29yZHM7IGFuZCB0aGVyZXVwb24gSSB3aWxsIGtpc3MgdGhlZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+Rm91bCB3b3JkcyBpcyBidXQgZm91bCB3aW5kLCBhbmQgZm91bCB3aW5kIGlzIGJ1dDwvTElORT4KLTxMSU5FPmZvdWwgYnJlYXRoLCBhbmQgZm91bCBicmVhdGggaXMgbm9pc29tZTsgdGhlcmVmb3JlIEk8L0xJTkU+Ci08TElORT53aWxsIGRlcGFydCB1bmtpc3NlZC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+VGhvdSBoYXN0IGZyaWdodGVkIHRoZSB3b3JkIG91dCBvZiBoaXMgcmlnaHQgc2Vuc2UsPC9MSU5FPgotPExJTkU+c28gZm9yY2libGUgaXMgdGh5IHdpdC4gQnV0IEkgbXVzdCB0ZWxsIHRoZWU8L0xJTkU+Ci08TElORT5wbGFpbmx5LCBDbGF1ZGlvIHVuZGVyZ29lcyBteSBjaGFsbGVuZ2U7IGFuZCBlaXRoZXI8L0xJTkU+Ci08TElORT5JIG11c3Qgc2hvcnRseSBoZWFyIGZyb20gaGltLCBvciBJIHdpbGwgc3Vic2NyaWJlPC9MSU5FPgotPExJTkU+aGltIGEgY293YXJkLiBBbmQsIEkgcHJheSB0aGVlIG5vdywgdGVsbCBtZSBmb3I8L0xJTkU+Ci08TElORT53aGljaCBvZiBteSBiYWQgcGFydHMgZGlkc3QgdGhvdSBmaXJzdCBmYWxsIGluIGxvdmUgd2l0aCBtZT88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+Rm9yIHRoZW0gYWxsIHRvZ2V0aGVyOyB3aGljaCBtYWludGFpbmVkIHNvIHBvbGl0aWM8L0xJTkU+Ci08TElORT5hIHN0YXRlIG9mIGV2aWwgdGhhdCB0aGV5IHdpbGwgbm90IGFkbWl0IGFueSBnb29kPC9MSU5FPgotPExJTkU+cGFydCB0byBpbnRlcm1pbmdsZSB3aXRoIHRoZW0uIEJ1dCBmb3Igd2hpY2ggb2YgbXk8L0xJTkU+Ci08TElORT5nb29kIHBhcnRzIGRpZCB5b3UgZmlyc3Qgc3VmZmVyIGxvdmUgZm9yIG1lPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5TdWZmZXIgbG92ZSEgYSBnb29kIGVwaXRoZXQhIEkgZG8gc3VmZmVyIGxvdmU8L0xJTkU+Ci08TElORT5pbmRlZWQsIGZvciBJIGxvdmUgdGhlZSBhZ2FpbnN0IG15IHdpbGwuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPkluIHNwaXRlIG9mIHlvdXIgaGVhcnQsIEkgdGhpbms7IGFsYXMsIHBvb3IgaGVhcnQhPC9MSU5FPgotPExJTkU+SWYgeW91IHNwaXRlIGl0IGZvciBteSBzYWtlLCBJIHdpbGwgc3BpdGUgaXQgZm9yPC9MSU5FPgotPExJTkU+eW91cnM7IGZvciBJIHdpbGwgbmV2ZXIgbG92ZSB0aGF0IHdoaWNoIG15IGZyaWVuZCBoYXRlcy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+VGhvdSBhbmQgSSBhcmUgdG9vIHdpc2UgdG8gd29vIHBlYWNlYWJseS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+SXQgYXBwZWFycyBub3QgaW4gdGhpcyBjb25mZXNzaW9uOiB0aGVyZSdzIG5vdCBvbmU8L0xJTkU+Ci08TElORT53aXNlIG1hbiBhbW9uZyB0d2VudHkgdGhhdCB3aWxsIHByYWlzZSBoaW1zZWxmLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5BbiBvbGQsIGFuIG9sZCBpbnN0YW5jZSwgQmVhdHJpY2UsIHRoYXQgbGl2ZWQgaW48L0xJTkU+Ci08TElORT50aGUgbGltZSBvZiBnb29kIG5laWdoYm91cnMuIElmIGEgbWFuIGRvIG5vdCBlcmVjdDwvTElORT4KLTxMSU5FPmluIHRoaXMgYWdlIGhpcyBvd24gdG9tYiBlcmUgaGUgZGllcywgaGUgc2hhbGwgbGl2ZTwvTElORT4KLTxMSU5FPm5vIGxvbmdlciBpbiBtb251bWVudCB0aGFuIHRoZSBiZWxsIHJpbmdzIGFuZCB0aGU8L0xJTkU+Ci08TElORT53aWRvdyB3ZWVwcy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+QW5kIGhvdyBsb25nIGlzIHRoYXQsIHRoaW5rIHlvdT88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+UXVlc3Rpb246IHdoeSwgYW4gaG91ciBpbiBjbGFtb3VyIGFuZCBhIHF1YXJ0ZXIgaW48L0xJTkU+Ci08TElORT5yaGV1bTogdGhlcmVmb3JlIGlzIGl0IG1vc3QgZXhwZWRpZW50IGZvciB0aGU8L0xJTkU+Ci08TElORT53aXNlLCBpZiBEb24gV29ybSwgaGlzIGNvbnNjaWVuY2UsIGZpbmQgbm88L0xJTkU+Ci08TElORT5pbXBlZGltZW50IHRvIHRoZSBjb250cmFyeSwgdG8gYmUgdGhlIHRydW1wZXQgb2YgaGlzPC9MSU5FPgotPExJTkU+b3duIHZpcnR1ZXMsIGFzIEkgYW0gdG8gbXlzZWxmLiBTbyBtdWNoIGZvcjwvTElORT4KLTxMSU5FPnByYWlzaW5nIG15c2VsZiwgd2hvLCBJIG15c2VsZiB3aWxsIGJlYXIgd2l0bmVzcywgaXM8L0xJTkU+Ci08TElORT5wcmFpc2V3b3J0aHk6IGFuZCBub3cgdGVsbCBtZSwgaG93IGRvdGggeW91ciBjb3VzaW4/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPlZlcnkgaWxsLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5BbmQgaG93IGRvIHlvdT88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+VmVyeSBpbGwgdG9vLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5TZXJ2ZSBHb2QsIGxvdmUgbWUgYW5kIG1lbmQuIFRoZXJlIHdpbGwgSSBsZWF2ZTwvTElORT4KLTxMSU5FPnlvdSB0b28sIGZvciBoZXJlIGNvbWVzIG9uZSBpbiBoYXN0ZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+RW50ZXIgVVJTVUxBPC9TVEFHRURJUj4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPlVSU1VMQTwvU1BFQUtFUj4KLTxMSU5FPk1hZGFtLCB5b3UgbXVzdCBjb21lIHRvIHlvdXIgdW5jbGUuIFlvbmRlcidzIG9sZDwvTElORT4KLTxMSU5FPmNvaWwgYXQgaG9tZTogaXQgaXMgcHJvdmVkIG15IExhZHkgSGVybyBoYXRoIGJlZW48L0xJTkU+Ci08TElORT5mYWxzZWx5IGFjY3VzZWQsIHRoZSBwcmluY2UgYW5kIENsYXVkaW8gbWlnaHRpbHk8L0xJTkU+Ci08TElORT5hYnVzZWQ7IGFuZCBEb24gSm9obiBpcyB0aGUgYXV0aG9yIG9mIGFsbCwgd2hvIGlzPC9MSU5FPgotPExJTkU+ZmVkIGFuZCBnb25lLiBXaWxsIHlvdSBjb21lIHByZXNlbnRseT88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+V2lsbCB5b3UgZ28gaGVhciB0aGlzIG5ld3MsIHNpZ25pb3I/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPkkgd2lsbCBsaXZlIGluIHRoeSBoZWFydCwgZGllIGluIHRoeSBsYXAsIGFuZCBiZTwvTElORT4KLTxMSU5FPmJ1cmllZCBpbiB0aHkgZXllczsgYW5kIG1vcmVvdmVyIEkgd2lsbCBnbyB3aXRoPC9MSU5FPgotPExJTkU+dGhlZSB0byB0aHkgdW5jbGUncy48L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+RXhldW50PC9TVEFHRURJUj4KLTwvU0NFTkU+Ci0KLTxTQ0VORT48VElUTEU+U0NFTkUgSUlJLiAgQSBjaHVyY2guPC9USVRMRT4KLTxTVEFHRURJUj5FbnRlciBET04gUEVEUk8sIENMQVVESU8sIGFuZCB0aHJlZSBvciBmb3VyCi13aXRoIHRhcGVyczwvU1RBR0VESVI+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+SXMgdGhpcyB0aGUgbW9udW1lbnQgb2YgTGVvbmF0bz88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxvcmQ8L1NQRUFLRVI+Ci08TElORT5JdCBpcywgbXkgbG9yZC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT48U1RBR0VESVI+UmVhZGluZyBvdXQgb2YgYSBzY3JvbGw8L1NUQUdFRElSPjwvTElORT4KLTxMSU5FPkRvbmUgdG8gZGVhdGggYnkgc2xhbmRlcm91cyB0b25ndWVzPC9MSU5FPgotPExJTkU+V2FzIHRoZSBIZXJvIHRoYXQgaGVyZSBsaWVzOjwvTElORT4KLTxMSU5FPkRlYXRoLCBpbiBndWVyZG9uIG9mIGhlciB3cm9uZ3MsPC9MSU5FPgotPExJTkU+R2l2ZXMgaGVyIGZhbWUgd2hpY2ggbmV2ZXIgZGllcy48L0xJTkU+Ci08TElORT5TbyB0aGUgbGlmZSB0aGF0IGRpZWQgd2l0aCBzaGFtZTwvTElORT4KLTxMSU5FPkxpdmVzIGluIGRlYXRoIHdpdGggZ2xvcmlvdXMgZmFtZS48L0xJTkU+Ci08TElORT5IYW5nIHRob3UgdGhlcmUgdXBvbiB0aGUgdG9tYiw8L0xJTkU+Ci08TElORT5QcmFpc2luZyBoZXIgd2hlbiBJIGFtIGR1bWIuPC9MSU5FPgotPExJTkU+Tm93LCBtdXNpYywgc291bmQsIGFuZCBzaW5nIHlvdXIgc29sZW1uIGh5bW4uPC9MSU5FPgotPFNVQkhFQUQ+U09ORy48L1NVQkhFQUQ+Ci08TElORT5QYXJkb24sIGdvZGRlc3Mgb2YgdGhlIG5pZ2h0LDwvTElORT4KLTxMSU5FPlRob3NlIHRoYXQgc2xldyB0aHkgdmlyZ2luIGtuaWdodDs8L0xJTkU+Ci08TElORT5Gb3IgdGhlIHdoaWNoLCB3aXRoIHNvbmdzIG9mIHdvZSw8L0xJTkU+Ci08TElORT5Sb3VuZCBhYm91dCBoZXIgdG9tYiB0aGV5IGdvLjwvTElORT4KLTxMSU5FPk1pZG5pZ2h0LCBhc3Npc3Qgb3VyIG1vYW47PC9MSU5FPgotPExJTkU+SGVscCB1cyB0byBzaWdoIGFuZCBncm9hbiw8L0xJTkU+Ci08TElORT5IZWF2aWx5LCBoZWF2aWx5OjwvTElORT4KLTxMSU5FPkdyYXZlcywgeWF3biBhbmQgeWllbGQgeW91ciBkZWFkLDwvTElORT4KLTxMSU5FPlRpbGwgZGVhdGggYmUgdXR0ZXJlZCw8L0xJTkU+Ci08TElORT5IZWF2aWx5LCBoZWF2aWx5LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPk5vdywgdW50byB0aHkgYm9uZXMgZ29vZCBuaWdodCE8L0xJTkU+Ci08TElORT5ZZWFybHkgd2lsbCBJIGRvIHRoaXMgcml0ZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPkdvb2QgbW9ycm93LCBtYXN0ZXJzOyBwdXQgeW91ciB0b3JjaGVzIG91dDo8L0xJTkU+Ci08TElORT5UaGUgd29sdmVzIGhhdmUgcHJleSdkOyBhbmQgbG9vaywgdGhlIGdlbnRsZSBkYXksPC9MSU5FPgotPExJTkU+QmVmb3JlIHRoZSB3aGVlbHMgb2YgUGhvZWJ1cywgcm91bmQgYWJvdXQ8L0xJTkU+Ci08TElORT5EYXBwbGVzIHRoZSBkcm93c3kgZWFzdCB3aXRoIHNwb3RzIG9mIGdyZXkuPC9MSU5FPgotPExJTkU+VGhhbmtzIHRvIHlvdSBhbGwsIGFuZCBsZWF2ZSB1czogZmFyZSB5b3Ugd2VsbC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5Hb29kIG1vcnJvdywgbWFzdGVyczogZWFjaCBoaXMgc2V2ZXJhbCB3YXkuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5ET04gUEVEUk88L1NQRUFLRVI+Ci08TElORT5Db21lLCBsZXQgdXMgaGVuY2UsIGFuZCBwdXQgb24gb3RoZXIgd2VlZHM7PC9MSU5FPgotPExJTkU+QW5kIHRoZW4gdG8gTGVvbmF0bydzIHdlIHdpbGwgZ28uPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+QW5kIEh5bWVuIG5vdyB3aXRoIGx1Y2tpZXIgaXNzdWUgc3BlZWQnczwvTElORT4KLTxMSU5FPlRoYW4gdGhpcyBmb3Igd2hvbSB3ZSByZW5kZXInZCB1cCB0aGlzIHdvZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+RXhldW50PC9TVEFHRURJUj4KLTwvU0NFTkU+Ci0KLTxTQ0VORT48VElUTEU+U0NFTkUgSVYuICBBIHJvb20gaW4gTEVPTkFUTydTIGhvdXNlLjwvVElUTEU+Ci08U1RBR0VESVI+RW50ZXIgTEVPTkFUTywgQU5UT05JTywgQkVORURJQ0ssIEJFQVRSSUNFLAotTUFSR0FSRVQsIFVSU1VMQSwgRlJJQVIgRlJBTkNJUywgYW5kIEhFUk88L1NUQUdFRElSPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RlJJQVIgRlJBTkNJUzwvU1BFQUtFUj4KLTxMSU5FPkRpZCBJIG5vdCB0ZWxsIHlvdSBzaGUgd2FzIGlubm9jZW50PzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPlNvIGFyZSB0aGUgcHJpbmNlIGFuZCBDbGF1ZGlvLCB3aG8gYWNjdXNlZCBoZXI8L0xJTkU+Ci08TElORT5VcG9uIHRoZSBlcnJvciB0aGF0IHlvdSBoZWFyZCBkZWJhdGVkOjwvTElORT4KLTxMSU5FPkJ1dCBNYXJnYXJldCB3YXMgaW4gc29tZSBmYXVsdCBmb3IgdGhpcyw8L0xJTkU+Ci08TElORT5BbHRob3VnaCBhZ2FpbnN0IGhlciB3aWxsLCBhcyBpdCBhcHBlYXJzPC9MSU5FPgotPExJTkU+SW4gdGhlIHRydWUgY291cnNlIG9mIGFsbCB0aGUgcXVlc3Rpb24uPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5BTlRPTklPPC9TUEVBS0VSPgotPExJTkU+V2VsbCwgSSBhbSBnbGFkIHRoYXQgYWxsIHRoaW5ncyBzb3J0IHNvIHdlbGwuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPkFuZCBzbyBhbSBJLCBiZWluZyBlbHNlIGJ5IGZhaXRoIGVuZm9yY2VkPC9MSU5FPgotPExJTkU+VG8gY2FsbCB5b3VuZyBDbGF1ZGlvIHRvIGEgcmVja29uaW5nIGZvciBpdC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5XZWxsLCBkYXVnaHRlciwgYW5kIHlvdSBnZW50bGUtd29tZW4gYWxsLDwvTElORT4KLTxMSU5FPldpdGhkcmF3IGludG8gYSBjaGFtYmVyIGJ5IHlvdXJzZWx2ZXMsPC9MSU5FPgotPExJTkU+QW5kIHdoZW4gSSBzZW5kIGZvciB5b3UsIGNvbWUgaGl0aGVyIG1hc2snZC48L0xJTkU+Ci08U1RBR0VESVI+RXhldW50IExhZGllczwvU1RBR0VESVI+Ci08TElORT5UaGUgcHJpbmNlIGFuZCBDbGF1ZGlvIHByb21pc2VkIGJ5IHRoaXMgaG91cjwvTElORT4KLTxMSU5FPlRvIHZpc2l0IG1lLiBZb3Uga25vdyB5b3VyIG9mZmljZSwgYnJvdGhlcjo8L0xJTkU+Ci08TElORT5Zb3UgbXVzdCBiZSBmYXRoZXIgdG8geW91ciBicm90aGVyJ3MgZGF1Z2h0ZXI8L0xJTkU+Ci08TElORT5BbmQgZ2l2ZSBoZXIgdG8geW91bmcgQ2xhdWRpby48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkFOVE9OSU88L1NQRUFLRVI+Ci08TElORT5XaGljaCBJIHdpbGwgZG8gd2l0aCBjb25maXJtJ2QgY291bnRlbmFuY2UuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPkZyaWFyLCBJIG11c3QgZW50cmVhdCB5b3VyIHBhaW5zLCBJIHRoaW5rLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RlJJQVIgRlJBTkNJUzwvU1BFQUtFUj4KLTxMSU5FPlRvIGRvIHdoYXQsIHNpZ25pb3I/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPlRvIGJpbmQgbWUsIG9yIHVuZG8gbWU7IG9uZSBvZiB0aGVtLjwvTElORT4KLTxMSU5FPlNpZ25pb3IgTGVvbmF0bywgdHJ1dGggaXQgaXMsIGdvb2Qgc2lnbmlvciw8L0xJTkU+Ci08TElORT5Zb3VyIG5pZWNlIHJlZ2FyZHMgbWUgd2l0aCBhbiBleWUgb2YgZmF2b3VyLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPlRoYXQgZXllIG15IGRhdWdodGVyIGxlbnQgaGVyOiAndGlzIG1vc3QgdHJ1ZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+QW5kIEkgZG8gd2l0aCBhbiBleWUgb2YgbG92ZSByZXF1aXRlIGhlci48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5UaGUgc2lnaHQgd2hlcmVvZiBJIHRoaW5rIHlvdSBoYWQgZnJvbSBtZSw8L0xJTkU+Ci08TElORT5Gcm9tIENsYXVkaW8gYW5kIHRoZSBwcmluY2U6IGJ1dCB3aGF0J3MgeW91ciB3aWxsPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5Zb3VyIGFuc3dlciwgc2lyLCBpcyBlbmlnbWF0aWNhbDo8L0xJTkU+Ci08TElORT5CdXQsIGZvciBteSB3aWxsLCBteSB3aWxsIGlzIHlvdXIgZ29vZCB3aWxsPC9MSU5FPgotPExJTkU+TWF5IHN0YW5kIHdpdGggb3VycywgdGhpcyBkYXkgdG8gYmUgY29uam9pbidkPC9MSU5FPgotPExJTkU+SW4gdGhlIHN0YXRlIG9mIGhvbm91cmFibGUgbWFycmlhZ2U6PC9MSU5FPgotPExJTkU+SW4gd2hpY2gsIGdvb2QgZnJpYXIsIEkgc2hhbGwgZGVzaXJlIHlvdXIgaGVscC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5NeSBoZWFydCBpcyB3aXRoIHlvdXIgbGlraW5nLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RlJJQVIgRlJBTkNJUzwvU1BFQUtFUj4KLTxMSU5FPkFuZCBteSBoZWxwLjwvTElORT4KLTxMSU5FPkhlcmUgY29tZXMgdGhlIHByaW5jZSBhbmQgQ2xhdWRpby48L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+RW50ZXIgRE9OIFBFRFJPIGFuZCBDTEFVRElPLCBhbmQgdHdvIG9yCi10aHJlZSBvdGhlcnM8L1NUQUdFRElSPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+R29vZCBtb3Jyb3cgdG8gdGhpcyBmYWlyIGFzc2VtYmx5LjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPkdvb2QgbW9ycm93LCBwcmluY2U7IGdvb2QgbW9ycm93LCBDbGF1ZGlvOjwvTElORT4KLTxMSU5FPldlIGhlcmUgYXR0ZW5kIHlvdS4gQXJlIHlvdSB5ZXQgZGV0ZXJtaW5lZDwvTElORT4KLTxMSU5FPlRvLWRheSB0byBtYXJyeSB3aXRoIG15IGJyb3RoZXIncyBkYXVnaHRlcj88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5JJ2xsIGhvbGQgbXkgbWluZCwgd2VyZSBzaGUgYW4gRXRoaW9wZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkxFT05BVE88L1NQRUFLRVI+Ci08TElORT5DYWxsIGhlciBmb3J0aCwgYnJvdGhlcjsgaGVyZSdzIHRoZSBmcmlhciByZWFkeS48L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+RXhpdCBBTlRPTklPPC9TVEFHRURJUj4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPkdvb2QgbW9ycm93LCBCZW5lZGljay4gV2h5LCB3aGF0J3MgdGhlIG1hdHRlciw8L0xJTkU+Ci08TElORT5UaGF0IHlvdSBoYXZlIHN1Y2ggYSBGZWJydWFyeSBmYWNlLDwvTElORT4KLTxMSU5FPlNvIGZ1bGwgb2YgZnJvc3QsIG9mIHN0b3JtIGFuZCBjbG91ZGluZXNzPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPkkgdGhpbmsgaGUgdGhpbmtzIHVwb24gdGhlIHNhdmFnZSBidWxsLjwvTElORT4KLTxMSU5FPlR1c2gsIGZlYXIgbm90LCBtYW47IHdlJ2xsIHRpcCB0aHkgaG9ybnMgd2l0aCBnb2xkPC9MSU5FPgotPExJTkU+QW5kIGFsbCBFdXJvcGEgc2hhbGwgcmVqb2ljZSBhdCB0aGVlLDwvTElORT4KLTxMSU5FPkFzIG9uY2UgRXVyb3BhIGRpZCBhdCBsdXN0eSBKb3ZlLDwvTElORT4KLTxMSU5FPldoZW4gaGUgd291bGQgcGxheSB0aGUgbm9ibGUgYmVhc3QgaW4gbG92ZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+QnVsbCBKb3ZlLCBzaXIsIGhhZCBhbiBhbWlhYmxlIGxvdzs8L0xJTkU+Ci08TElORT5BbmQgc29tZSBzdWNoIHN0cmFuZ2UgYnVsbCBsZWFwJ2QgeW91ciBmYXRoZXIncyBjb3csPC9MSU5FPgotPExJTkU+QW5kIGdvdCBhIGNhbGYgaW4gdGhhdCBzYW1lIG5vYmxlIGZlYXQ8L0xJTkU+Ci08TElORT5NdWNoIGxpa2UgdG8geW91LCBmb3IgeW91IGhhdmUganVzdCBoaXMgYmxlYXQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+Rm9yIHRoaXMgSSBvd2UgeW91OiBoZXJlIGNvbWVzIG90aGVyIHJlY2tvbmluZ3MuPC9MSU5FPgotPFNUQUdFRElSPlJlLWVudGVyIEFOVE9OSU8sIHdpdGggdGhlIExhZGllcyBtYXNrZWQ8L1NUQUdFRElSPgotPExJTkU+V2hpY2ggaXMgdGhlIGxhZHkgSSBtdXN0IHNlaXplIHVwb24/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5BTlRPTklPPC9TUEVBS0VSPgotPExJTkU+VGhpcyBzYW1lIGlzIHNoZSwgYW5kIEkgZG8gZ2l2ZSB5b3UgaGVyLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+Q0xBVURJTzwvU1BFQUtFUj4KLTxMSU5FPldoeSwgdGhlbiBzaGUncyBtaW5lLiBTd2VldCwgbGV0IG1lIHNlZSB5b3VyIGZhY2UuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+Tm8sIHRoYXQgeW91IHNoYWxsIG5vdCwgdGlsbCB5b3UgdGFrZSBoZXIgaGFuZDwvTElORT4KLTxMSU5FPkJlZm9yZSB0aGlzIGZyaWFyIGFuZCBzd2VhciB0byBtYXJyeSBoZXIuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+R2l2ZSBtZSB5b3VyIGhhbmQ6IGJlZm9yZSB0aGlzIGhvbHkgZnJpYXIsPC9MSU5FPgotPExJTkU+SSBhbSB5b3VyIGh1c2JhbmQsIGlmIHlvdSBsaWtlIG9mIG1lLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+SEVSTzwvU1BFQUtFUj4KLTxMSU5FPkFuZCB3aGVuIEkgbGl2ZWQsIEkgd2FzIHlvdXIgb3RoZXIgd2lmZTo8L0xJTkU+Ci08U1RBR0VESVI+VW5tYXNraW5nPC9TVEFHRURJUj4KLTxMSU5FPkFuZCB3aGVuIHlvdSBsb3ZlZCwgeW91IHdlcmUgbXkgb3RoZXIgaHVzYmFuZC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5Bbm90aGVyIEhlcm8hPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5IRVJPPC9TUEVBS0VSPgotPExJTkU+Tm90aGluZyBjZXJ0YWluZXI6PC9MSU5FPgotPExJTkU+T25lIEhlcm8gZGllZCBkZWZpbGVkLCBidXQgSSBkbyBsaXZlLDwvTElORT4KLTxMSU5FPkFuZCBzdXJlbHkgYXMgSSBsaXZlLCBJIGFtIGEgbWFpZC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkRPTiBQRURSTzwvU1BFQUtFUj4KLTxMSU5FPlRoZSBmb3JtZXIgSGVybyEgSGVybyB0aGF0IGlzIGRlYWQhPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+U2hlIGRpZWQsIG15IGxvcmQsIGJ1dCB3aGlsZXMgaGVyIHNsYW5kZXIgbGl2ZWQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5GUklBUiBGUkFOQ0lTPC9TUEVBS0VSPgotPExJTkU+QWxsIHRoaXMgYW1hemVtZW50IGNhbiBJIHF1YWxpZnk6PC9MSU5FPgotPExJTkU+V2hlbiBhZnRlciB0aGF0IHRoZSBob2x5IHJpdGVzIGFyZSBlbmRlZCw8L0xJTkU+Ci08TElORT5JJ2xsIHRlbGwgeW91IGxhcmdlbHkgb2YgZmFpciBIZXJvJ3MgZGVhdGg6PC9MSU5FPgotPExJTkU+TWVhbnRpbWUgbGV0IHdvbmRlciBzZWVtIGZhbWlsaWFyLDwvTElORT4KLTxMSU5FPkFuZCB0byB0aGUgY2hhcGVsIGxldCB1cyBwcmVzZW50bHkuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPlNvZnQgYW5kIGZhaXIsIGZyaWFyLiBXaGljaCBpcyBCZWF0cmljZT88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+PFNUQUdFRElSPlVubWFza2luZzwvU1RBR0VESVI+ICBJIGFuc3dlciB0byB0aGF0IG5hbWUuIFdoYXQgaXMgeW91ciB3aWxsPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5EbyBub3QgeW91IGxvdmUgbWU/PC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPldoeSwgbm87IG5vIG1vcmUgdGhhbiByZWFzb24uPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPldoeSwgdGhlbiB5b3VyIHVuY2xlIGFuZCB0aGUgcHJpbmNlIGFuZCBDbGF1ZGlvPC9MSU5FPgotPExJTkU+SGF2ZSBiZWVuIGRlY2VpdmVkOyB0aGV5IHN3b3JlIHlvdSBkaWQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPkRvIG5vdCB5b3UgbG92ZSBtZT88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+VHJvdGgsIG5vOyBubyBtb3JlIHRoYW4gcmVhc29uLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5XaHksIHRoZW4gbXkgY291c2luIE1hcmdhcmV0IGFuZCBVcnN1bGE8L0xJTkU+Ci08TElORT5BcmUgbXVjaCBkZWNlaXZlZDsgZm9yIHRoZXkgZGlkIHN3ZWFyIHlvdSBkaWQuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPlRoZXkgc3dvcmUgdGhhdCB5b3Ugd2VyZSBhbG1vc3Qgc2ljayBmb3IgbWUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRUFUUklDRTwvU1BFQUtFUj4KLTxMSU5FPlRoZXkgc3dvcmUgdGhhdCB5b3Ugd2VyZSB3ZWxsLW5pZ2ggZGVhZCBmb3IgbWUuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPidUaXMgbm8gc3VjaCBtYXR0ZXIuIFRoZW4geW91IGRvIG5vdCBsb3ZlIG1lPzwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVBVFJJQ0U8L1NQRUFLRVI+Ci08TElORT5ObywgdHJ1bHksIGJ1dCBpbiBmcmllbmRseSByZWNvbXBlbnNlLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+TEVPTkFUTzwvU1BFQUtFUj4KLTxMSU5FPkNvbWUsIGNvdXNpbiwgSSBhbSBzdXJlIHlvdSBsb3ZlIHRoZSBnZW50bGVtYW4uPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5DTEFVRElPPC9TUEVBS0VSPgotPExJTkU+QW5kIEknbGwgYmUgc3dvcm4gdXBvbid0IHRoYXQgaGUgbG92ZXMgaGVyOzwvTElORT4KLTxMSU5FPkZvciBoZXJlJ3MgYSBwYXBlciB3cml0dGVuIGluIGhpcyBoYW5kLDwvTElORT4KLTxMSU5FPkEgaGFsdGluZyBzb25uZXQgb2YgaGlzIG93biBwdXJlIGJyYWluLDwvTElORT4KLTxMSU5FPkZhc2hpb24nZCB0byBCZWF0cmljZS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkhFUk88L1NQRUFLRVI+Ci08TElORT5BbmQgaGVyZSdzIGFub3RoZXI8L0xJTkU+Ci08TElORT5Xcml0IGluIG15IGNvdXNpbidzIGhhbmQsIHN0b2xlbiBmcm9tIGhlciBwb2NrZXQsPC9MSU5FPgotPExJTkU+Q29udGFpbmluZyBoZXIgYWZmZWN0aW9uIHVudG8gQmVuZWRpY2suPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5CRU5FRElDSzwvU1BFQUtFUj4KLTxMSU5FPkEgbWlyYWNsZSEgaGVyZSdzIG91ciBvd24gaGFuZHMgYWdhaW5zdCBvdXIgaGVhcnRzLjwvTElORT4KLTxMSU5FPkNvbWUsIEkgd2lsbCBoYXZlIHRoZWU7IGJ1dCwgYnkgdGhpcyBsaWdodCwgSSB0YWtlPC9MSU5FPgotPExJTkU+dGhlZSBmb3IgcGl0eS48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFQVRSSUNFPC9TUEVBS0VSPgotPExJTkU+SSB3b3VsZCBub3QgZGVueSB5b3U7IGJ1dCwgYnkgdGhpcyBnb29kIGRheSwgSSB5aWVsZDwvTElORT4KLTxMSU5FPnVwb24gZ3JlYXQgcGVyc3Vhc2lvbjsgYW5kIHBhcnRseSB0byBzYXZlIHlvdXIgbGlmZSw8L0xJTkU+Ci08TElORT5mb3IgSSB3YXMgdG9sZCB5b3Ugd2VyZSBpbiBhIGNvbnN1bXB0aW9uLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5QZWFjZSEgSSB3aWxsIHN0b3AgeW91ciBtb3V0aC48L0xJTkU+Ci08L1NQRUVDSD4KLQotCi08U1RBR0VESVI+S2lzc2luZyBoZXI8L1NUQUdFRElSPgotCi08U1BFRUNIPgotPFNQRUFLRVI+RE9OIFBFRFJPPC9TUEVBS0VSPgotPExJTkU+SG93IGRvc3QgdGhvdSwgQmVuZWRpY2ssIHRoZSBtYXJyaWVkIG1hbj88L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+SSdsbCB0ZWxsIHRoZWUgd2hhdCwgcHJpbmNlOyBhIGNvbGxlZ2Ugb2Y8L0xJTkU+Ci08TElORT53aXQtY3JhY2tlcnMgY2Fubm90IGZsb3V0IG1lIG91dCBvZiBteSBodW1vdXIuIERvc3Q8L0xJTkU+Ci08TElORT50aG91IHRoaW5rIEkgIGNhcmUgZm9yIGEgc2F0aXJlIG9yIGFuIGVwaWdyYW0/IE5vOjwvTElORT4KLTxMSU5FPmlmIGEgbWFuIHdpbGwgYmUgYmVhdGVuIHdpdGggYnJhaW5zLCBhJyBzaGFsbCB3ZWFyPC9MSU5FPgotPExJTkU+bm90aGluZyBoYW5kc29tZSBhYm91dCBoaW0uIEluIGJyaWVmLCBzaW5jZSBJIGRvPC9MSU5FPgotPExJTkU+cHVycG9zZSB0byBtYXJyeSwgSSB3aWxsIHRoaW5rIG5vdGhpbmcgdG8gYW55PC9MSU5FPgotPExJTkU+cHVycG9zZSB0aGF0IHRoZSB3b3JsZCBjYW4gc2F5IGFnYWluc3QgaXQ7IGFuZDwvTElORT4KLTxMSU5FPnRoZXJlZm9yZSBuZXZlciBmbG91dCBhdCBtZSBmb3Igd2hhdCBJIGhhdmUgc2FpZDwvTElORT4KLTxMSU5FPmFnYWluc3QgaXQ7IGZvciBtYW4gaXMgYSBnaWRkeSB0aGluZywgYW5kIHRoaXMgaXMgbXk8L0xJTkU+Ci08TElORT5jb25jbHVzaW9uLiBGb3IgdGh5IHBhcnQsIENsYXVkaW8sIEkgZGlkIHRoaW5rIHRvPC9MSU5FPgotPExJTkU+aGF2ZSBiZWF0ZW4gdGhlZSwgYnV0IGluIHRoYXQgdGhvdSBhcnQgbGlrZSB0byBiZSBteTwvTElORT4KLTxMSU5FPmtpbnNtYW4sIGxpdmUgdW5icnVpc2VkIGFuZCBsb3ZlIG15IGNvdXNpbi48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkNMQVVESU88L1NQRUFLRVI+Ci08TElORT5JIGhhZCB3ZWxsIGhvcGVkIHRob3Ugd291bGRzdCBoYXZlIGRlbmllZCBCZWF0cmljZSw8L0xJTkU+Ci08TElORT50aGF0IEkgbWlnaHQgaGF2ZSBjdWRnZWxsZWQgdGhlZSBvdXQgb2YgdGh5IHNpbmdsZTwvTElORT4KLTxMSU5FPmxpZmUsIHRvIG1ha2UgdGhlZSBhIGRvdWJsZS1kZWFsZXI7IHdoaWNoLCBvdXQgb2Y8L0xJTkU+Ci08TElORT5xdWVzdGlvbiwgdGhvdSB3aWx0IGJlLCBpZiBteSBjb3VzaW4gZG8gbm90IGxvb2s8L0xJTkU+Ci08TElORT5leGNlZWRpbmdseSBuYXJyb3dseSB0byB0aGVlLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5Db21lLCBjb21lLCB3ZSBhcmUgZnJpZW5kczogbGV0J3MgaGF2ZSBhIGRhbmNlIGVyZTwvTElORT4KLTxMSU5FPndlIGFyZSBtYXJyaWVkLCB0aGF0IHdlIG1heSBsaWdodGVuIG91ciBvd24gaGVhcnRzPC9MSU5FPgotPExJTkU+YW5kIG91ciB3aXZlcycgaGVlbHMuPC9MSU5FPgotPC9TUEVFQ0g+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5MRU9OQVRPPC9TUEVBS0VSPgotPExJTkU+V2UnbGwgaGF2ZSBkYW5jaW5nIGFmdGVyd2FyZC48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNQRUVDSD4KLTxTUEVBS0VSPkJFTkVESUNLPC9TUEVBS0VSPgotPExJTkU+Rmlyc3QsIG9mIG15IHdvcmQ7IHRoZXJlZm9yZSBwbGF5LCBtdXNpYy4gUHJpbmNlLDwvTElORT4KLTxMSU5FPnRob3UgYXJ0IHNhZDsgZ2V0IHRoZWUgYSB3aWZlLCBnZXQgdGhlZSBhIHdpZmU6PC9MSU5FPgotPExJTkU+dGhlcmUgaXMgbm8gc3RhZmYgbW9yZSByZXZlcmVuZCB0aGFuIG9uZSB0aXBwZWQgd2l0aCBob3JuLjwvTElORT4KLTwvU1BFRUNIPgotCi0KLTxTVEFHRURJUj5FbnRlciBhIE1lc3NlbmdlcjwvU1RBR0VESVI+Ci0KLTxTUEVFQ0g+Ci08U1BFQUtFUj5NZXNzZW5nZXI8L1NQRUFLRVI+Ci08TElORT5NeSBsb3JkLCB5b3VyIGJyb3RoZXIgSm9obiBpcyB0YSdlbiBpbiBmbGlnaHQsPC9MSU5FPgotPExJTkU+QW5kIGJyb3VnaHQgd2l0aCBhcm1lZCBtZW4gYmFjayB0byBNZXNzaW5hLjwvTElORT4KLTwvU1BFRUNIPgotCi08U1BFRUNIPgotPFNQRUFLRVI+QkVORURJQ0s8L1NQRUFLRVI+Ci08TElORT5UaGluayBub3Qgb24gaGltIHRpbGwgdG8tbW9ycm93OjwvTElORT4KLTxMSU5FPkknbGwgZGV2aXNlIHRoZWUgYnJhdmUgcHVuaXNobWVudHMgZm9yIGhpbS48L0xJTkU+Ci08TElORT5TdHJpa2UgdXAsIHBpcGVycy48L0xJTkU+Ci08L1NQRUVDSD4KLQotPFNUQUdFRElSPkRhbmNlPC9TVEFHRURJUj4KLTxTVEFHRURJUj5FeGV1bnQ8L1NUQUdFRElSPgotPC9TQ0VORT4KLTwvQUNUPgotPC9QTEFZPgpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL0FsbFRlc3RzLmphdmEgYi92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvQWxsVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc5MDhjMi4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvQWxsVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2UgZHJ0Y2FzZXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLQotcHVibGljIGNsYXNzIEFsbFRlc3RzIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgICBwdWJsaWMgQWxsVGVzdHMoU3RyaW5nIG5hbWUpIHsgc3VwZXIobmFtZSk7IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gICAgewotICAgICAgICBUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0gICAgICAgIHN1aXRlLmFkZFRlc3QoUU5hbWVTZXRUZXN0LnN1aXRlKCkpOwotICAgICAgICBzdWl0ZS5hZGRUZXN0KFNtb2tlVGVzdHMuc3VpdGUoKSk7Ci0gICAgICAgIC8vc3VpdGUuYWRkVGVzdFN1aXRlKEphdmVsaW5UZXN0cy5jbGFzcyk7Ci0KLSAgICAgICAgcmV0dXJuIHN1aXRlOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9Bbm5vdGF0aW9uc1Rlc3RzLmphdmEgYi92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvQW5ub3RhdGlvbnNUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDVjZjNjLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9Bbm5vdGF0aW9uc1Rlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBkcnRjYXNlczsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJlYW5zOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLXB1YmxpYyBjbGFzcyBBbm5vdGF0aW9uc1Rlc3RzIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgICBwdWJsaWMgQW5ub3RhdGlvbnNUZXN0cyhTdHJpbmcgbmFtZSkgeyBzdXBlcihuYW1lKTsgfQotICAgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsgcmV0dXJuIG5ldyBUZXN0U3VpdGUoQW5ub3RhdGlvbnNUZXN0cy5jbGFzcyk7IH0KLQotICAgIHN0YXRpYyBTdHJpbmdbXSBfYXJnczsKLSAgICBzdGF0aWMgU3RyaW5nIF90ZXN0OwotCi0gICAgcHVibGljIHN0YXRpYyBGaWxlIGdldENhc2VGaWxlKFN0cmluZyB0aGVDYXNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFRlc3RFbnYueGJlYW5DYXNlKCJzdG9yZS8iICsgdGhlQ2FzZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFhtbEN1cnNvciBsb2FkQ2FzZShTdHJpbmcgdGhlQ2FzZSkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgcmV0dXJuIFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKGdldENhc2VGaWxlKHRoZUNhc2UpLCBudWxsKS5uZXdDdXJzb3IoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY2xhc3MgVGVzdEJvb2ttYXJrIGV4dGVuZHMgWG1sQ3Vyc29yLlhtbEJvb2ttYXJrCi0gICAgewotICAgIH0KLQotICAgIC8vCi0gICAgLy8gQmFzaWMgbG9hZCB1cCBhIGZpbGUgYW5kIGl0ZXJhdGUgdGhyb3VnaCBpdAotICAgIC8vCi0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0QmFzaWNYbWwoICkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgWG1sQ3Vyc29yIGMgPSBsb2FkQ2FzZSgidGVzdC54bWwiKTsKLQotICAgICAgICBUZXN0Qm9va21hcmsgYTEgPSBuZXcgVGVzdEJvb2ttYXJrKCk7Ci0KLSAgICAgICAgYy5zZXRCb29rbWFyayggYTEgKTsKLSAgICAgICAgCi0gICAgICAgIFRlc3RCb29rbWFyayBhMiA9IG5ldyBUZXN0Qm9va21hcmsoKTsKLQotICAgICAgICBjLnRvTmV4dFRva2VuKCk7Ci0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLSAgICAgICAgCi0gICAgICAgIGMuc2V0Qm9va21hcmsoIGEyICk7Ci0gICAgICAgIAotICAgICAgICBjLnRvUHJldlRva2VuKCk7Ci0gICAgICAgIGMudG9QcmV2VG9rZW4oKTsKLQotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCBjLmdldEJvb2ttYXJrKCBUZXN0Qm9va21hcmsuY2xhc3MgKSwgYTEgKTsKLSAgICAgICAgCi0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLSAgICAgICAgYy50b05leHRUb2tlbigpOwotICAgICAgICAKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyggYy5nZXRCb29rbWFyayggVGVzdEJvb2ttYXJrLmNsYXNzICksIGEyICk7Ci0gICAgICAgIAotICAgICAgICBjLnRvTmV4dFRva2VuKCk7Ci0gICAgICAgIAotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy5nZXRCb29rbWFyayggVGVzdEJvb2ttYXJrLmNsYXNzICkgPT0gbnVsbCApOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9Bc3NvcnRlZFRlc3RzLmphdmEgYi92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvQXNzb3J0ZWRUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmUyOGM2Li4wMDAwMDAwCi0tLSBhL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9Bc3NvcnRlZFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDMgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBkcnRjYXNlczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxUaW1lOwotaW1wb3J0IGNvbS5lYXN5cG8uWG1sUHVyY2hhc2VPcmRlckRvY3VtZW50QmVhbjsKLWltcG9ydCBjb20uZWFzeXBvLlhtbExpbmVJdGVtQmVhbjsKLQotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotCi1pbXBvcnQgb3JnLnczLngyMDAxLnhtbFNjaGVtYS5TY2hlbWFEb2N1bWVudDsKLWltcG9ydCB4aW50LnRlc3QuUG9zaXRpb25Eb2N1bWVudDsKLQotcHVibGljIGNsYXNzIEFzc29ydGVkVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZQotewotICAgIHB1YmxpYyBBc3NvcnRlZFRlc3RzKFN0cmluZyBuYW1lKSB7IHN1cGVyKG5hbWUpOyB9Ci0gICAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeyByZXR1cm4gbmV3IFRlc3RTdWl0ZShBc3NvcnRlZFRlc3RzLmNsYXNzKTsgfQotICAgIAotICAgIC8vIGJ1ZyAyNzQ4OQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0U2F2ZXJDaGFyRXNjYXBpbmcoKSB0aHJvd3MgWG1sRXhjZXB0aW9uCi0gICAgewotICAgICAgICBTdHJpbmcgbmV3TGluZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSggImxpbmUuc2VwYXJhdG9yIiApOwotICAgICAgICBYbWxPYmplY3QgeGRvYyA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCI8dGVzdD5zb21ldGhpbmc8L3Rlc3Q+Iik7Ci0gICAgICAgIFhtbEN1cnNvciBjdXIgPSB4ZG9jLm5ld0N1cnNvcigpOwotICAgICAgICBjdXIudG9GaXJzdENoaWxkKCk7Ci0gICAgICAgIC8vIHZhbGlkIGNoYXJzCi0gICAgICAgIGN1ci5zZXRUZXh0VmFsdWUoIjxzb21ldGhpbmcgb3Igb3RoZXI6XHUwM0MwXHVEN0ZGPiIpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCI8dGVzdD4mbHQ7c29tZXRoaW5nIG9yIG90aGVyOlx1MDNDMFx1RDdGRj48L3Rlc3Q+IiArIG5ld0xpbmUsIHhkb2MudG9TdHJpbmcoKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBpbnZhbGlkIGNoYXJzIC0gY29udHJvbCBjaGFycywgdW5pY29kZSBzdXJyb2dhdGVzLCBGRkZGL0ZGRkUsIGV0YwotICAgICAgICBjdXIuc2V0VGV4dFZhbHVlKCI8c29tZXRoaW5nXDBvclwxb3RoZXI6XHUwMDQ1XHVGRkZFXHVEODAwXHVERkZGXHVEQjgwXHVEQzAwXHUwM0MwXHVEN0ZGXHUwMDFGPiIpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCI8dGVzdD4mbHQ7c29tZXRoaW5nP29yP290aGVyOlx1MDA0NT8/Pz8/XHUwM0MwXHVEN0ZGPz48L3Rlc3Q+IiArIG5ld0xpbmUsIHhkb2MudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIAotICAgIC8vIGJ1ZyAyNjE0MC8yNjEwNAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0Tm9UeXBlSW52YWxpZCgpIHRocm93cyBYbWxFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbE9iamVjdCB4ZG9jID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoIjx0ZXN0LW5vLXR5cGU+c29tZXRoaW5nPC90ZXN0LW5vLXR5cGU+Iik7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCJVbnR5cGVkIGRvY3VtZW50IHNob3VsZCBiZSBpbnZhbGlkIiwgIXhkb2MudmFsaWRhdGUoKSk7Ci0gICAgICAgIAotICAgICAgICB4ZG9jID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoIjx4OmJsYWggeG1sbnM6eD1cImh0dHA6Ly9uby10eXBlLmNvbS9cIi8+Iik7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCJVbnR5cGVkIGRvY3VtZW50IHNob3VsZCBiZSBpbnZhbGlkIiwgIXhkb2MudmFsaWRhdGUoKSk7Ci0gICAgfQotICAgIAotICAgIC8vIGJ1ZyAyNjc5MAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0Q29tcGxleFNldHRlcigpIHRocm93cyBYbWxFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbFB1cmNoYXNlT3JkZXJEb2N1bWVudEJlYW4geGRvYyA9IFhtbFB1cmNoYXNlT3JkZXJEb2N1bWVudEJlYW4uRmFjdG9yeS5wYXJzZSgKLSAgICAgICAgICAgICAgICAiPHB1cmNoYXNlLW9yZGVyIHhtbG5zPSdodHRwOi8vb3BlbnVyaS5vcmcvZWFzeXBvJz4iICsKLSAgICAgICAgICAgICAgICAgIjxjdXN0b21lcj4iICsKLSAgICAgICAgICAgICAgICAgICAiPG5hbWU+RGF2aWQgQmF1PC9uYW1lPiIgKwotICAgICAgICAgICAgICAgICAgICI8YWRkcmVzcz4xMDAgTWFpbiBTdHJlZXQ8L2FkZHJlc3M+IiArIAotICAgICAgICAgICAgICAgICAiPC9jdXN0b21lcj4iICsKLSAgICAgICAgICAgICAgICAgIjxkYXRlPjIwMDMtMDUtMThUMTE6NTA6MDA8L2RhdGU+IiArCi0gICAgICAgICAgICAgICAgICI8bGluZS1pdGVtPiIgKwotICAgICAgICAgICAgICAgICAgIjxkZXNjcmlwdGlvbj5SZWQgQ2FuZHk8L2Rlc2NyaXB0aW9uPiIgKwotICAgICAgICAgICAgICAgICAgIjxwZXItdW5pdC1vdW5jZXM+MC40MjM8L3Blci11bml0LW91bmNlcz4iICsKLSAgICAgICAgICAgICAgICAgICI8cXVhbnRpdHk+NDwvcXVhbnRpdHk+IiArCi0gICAgICAgICAgICAgICAgICI8L2xpbmUtaXRlbT4iICsKLSAgICAgICAgICAgICAgICAgIjxsaW5lLWl0ZW0+IiArCi0gICAgICAgICAgICAgICAgICAiPGRlc2NyaXB0aW9uPkJsdWUgQ2FuZHk8L2Rlc2NyaXB0aW9uPiIgKwotICAgICAgICAgICAgICAgICAgIjxwZXItdW5pdC1vdW5jZXM+NS4wPC9wZXItdW5pdC1vdW5jZXM+IiArCi0gICAgICAgICAgICAgICAgICAiPHF1YW50aXR5PjE8L3F1YW50aXR5PiIgKwotICAgICAgICAgICAgICAgICAiPC9saW5lLWl0ZW0+IiArCi0gICAgICAgICAgICAgICAgIjwvcHVyY2hhc2Utb3JkZXI+Iik7Ci0gICAgICAgIC8vIHRlc3QgY29weS13aXRoaW4gZG9jCi0gICAgICAgIFhtbExpbmVJdGVtQmVhbiBuZXdJdGVtID0geGRvYy5nZXRQdXJjaGFzZU9yZGVyKCkuYWRkTmV3TGluZUl0ZW0oKTsKLSAgICAgICAgbmV3SXRlbS5zZXQoeGRvYy5nZXRQdXJjaGFzZU9yZGVyKCkuZ2V0TGluZUl0ZW1BcnJheSgwKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoQmlnSW50ZWdlci52YWx1ZU9mKDQpLCB4ZG9jLmdldFB1cmNoYXNlT3JkZXIoKS5nZXRMaW5lSXRlbUFycmF5KDIpLmdldFF1YW50aXR5KCkpOwotICAgICAgICB4ZG9jLmdldFB1cmNoYXNlT3JkZXIoKS5zZXRMaW5lSXRlbUFycmF5KDAsIHhkb2MuZ2V0UHVyY2hhc2VPcmRlcigpLmdldExpbmVJdGVtQXJyYXkoMSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKEJpZ0ludGVnZXIudmFsdWVPZigxKSwgeGRvYy5nZXRQdXJjaGFzZU9yZGVyKCkuZ2V0TGluZUl0ZW1BcnJheSgwKS5nZXRRdWFudGl0eSgpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIHRlc3QgY29weS1iZXR3ZWVuIGRvY3MKLSAgICAgICAgWG1sTGluZUl0ZW1CZWFuIGFub3RoZXJJdGVtID0gWG1sTGluZUl0ZW1CZWFuLkZhY3RvcnkucGFyc2UoCi0gICAgICAgICAgICAgICAgIjx4bWwtZnJhZ21lbnQgeG1sbnM6ZXA9J2h0dHA6Ly9vcGVudXJpLm9yZy9lYXN5cG8nIHhtbG5zOnhzaT0naHR0cDovL3d3d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJyB4c2k6dHlwZT0nbGluZS1pdGVtJz4iICsKLSAgICAgICAgICAgICAgICAgIjxlcDpkZXNjcmlwdGlvbj5ZZWxsb3cgQmFsbG9vbjwvZXA6ZGVzY3JpcHRpb24+IiArCi0gICAgICAgICAgICAgICAgICI8ZXA6cGVyLXVuaXQtb3VuY2VzPjAuMDAxPC9lcDpwZXItdW5pdC1vdW5jZXM+IiArCi0gICAgICAgICAgICAgICAgICI8ZXA6cXVhbnRpdHk+MjAwPC9lcDpxdWFudGl0eT4iICsKLSAgICAgICAgICAgICAgICAiPC94bWwtZnJhZ21lbnQ+Iik7Ci0gICAgICAgIAotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJZZWxsb3cgQmFsbG9vbiIsIGFub3RoZXJJdGVtLmdldERlc2NyaXB0aW9uKCkpOwotICAgICAgICB4ZG9jLmdldFB1cmNoYXNlT3JkZXIoKS5zZXRMaW5lSXRlbUFycmF5KDEsIGFub3RoZXJJdGVtKTsKLSAgICAgICAgCi0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIlllbGxvdyBCYWxsb29uIiwgeGRvYy5nZXRQdXJjaGFzZU9yZGVyKCkuZ2V0TGluZUl0ZW1BcnJheSgxKS5nZXREZXNjcmlwdGlvbigpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhCaWdJbnRlZ2VyLnZhbHVlT2YoMSksIHhkb2MuZ2V0UHVyY2hhc2VPcmRlcigpLmdldExpbmVJdGVtQXJyYXkoMCkuZ2V0UXVhbnRpdHkoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoQmlnSW50ZWdlci52YWx1ZU9mKDIwMCksIHhkb2MuZ2V0UHVyY2hhc2VPcmRlcigpLmdldExpbmVJdGVtQXJyYXkoMSkuZ2V0UXVhbnRpdHkoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoQmlnSW50ZWdlci52YWx1ZU9mKDQpLCB4ZG9jLmdldFB1cmNoYXNlT3JkZXIoKS5nZXRMaW5lSXRlbUFycmF5KDIpLmdldFF1YW50aXR5KCkpOwotICAgICAgICAKLSAgICAgICAgLy8gdGVzdCBjb3B5LXRvLXNlbGYKLSAgICAgICAgeGRvYy5nZXRQdXJjaGFzZU9yZGVyKCkuc2V0TGluZUl0ZW1BcnJheSgxLCB4ZG9jLmdldFB1cmNoYXNlT3JkZXIoKS5nZXRMaW5lSXRlbUFycmF5KDEpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiWWVsbG93IEJhbGxvb24iLCB4ZG9jLmdldFB1cmNoYXNlT3JkZXIoKS5nZXRMaW5lSXRlbUFycmF5KDEpLmdldERlc2NyaXB0aW9uKCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKEJpZ0ludGVnZXIudmFsdWVPZigxKSwgeGRvYy5nZXRQdXJjaGFzZU9yZGVyKCkuZ2V0TGluZUl0ZW1BcnJheSgwKS5nZXRRdWFudGl0eSgpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhCaWdJbnRlZ2VyLnZhbHVlT2YoMjAwKSwgeGRvYy5nZXRQdXJjaGFzZU9yZGVyKCkuZ2V0TGluZUl0ZW1BcnJheSgxKS5nZXRRdWFudGl0eSgpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhCaWdJbnRlZ2VyLnZhbHVlT2YoNCksIHhkb2MuZ2V0UHVyY2hhc2VPcmRlcigpLmdldExpbmVJdGVtQXJyYXkoMikuZ2V0UXVhbnRpdHkoKSk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBkb250dGVzdFByZXR0eVByaW50KCkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgWG1sT2JqZWN0IHhvYmogPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSgiPHRlc3QgeG1sbnM6eD0nZm9vJz4mbHQ7U0hPVUxETk9UQkVBVEFHJmd0OzxhPnNpbXBsZTxiLz48L2E+Jmx0O0FMU09TSE9VTEROT1RCRUFUQUcmZ3Q7PC90ZXN0PiIpOwotICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oeG9iaik7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih4b2JqLnhtbFRleHQoKSk7Ci0gICAgICAgIC8qCi0gICAgICAgIFhtbEN1cnNvciB4Y3VyID0geG9iai5uZXdDdXJzb3IoKTsKLSAgICAgICAgeGN1ci50b0ZpcnN0Q2hpbGQoKTsKLSAgICAgICAgeG9iaiA9IHhjdXIuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIFN0cmluZyByZXN1bHQgPSB4b2JqLnRvU3RyaW5nKCk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXN1bHQpOwotICAgICAgICAKLSAgICAgICAgeGN1ci50b0ZpcnN0Q2hpbGQoKTsKLSAgICAgICAgeGN1ci50b0ZpcnN0Q2hpbGQoKTsKLSAgICAgICAgeGN1ci50b0ZpcnN0Q29udGVudFRva2VuKCk7Ci0gICAgICAgIHhjdXIuaW5zZXJ0Q2hhcnMoIjxodG1sPjxib2R5PnRoaXMgaXMgYSB0ZXN0PC9ib2R5PjwvaHRtbD4iKTsKLSAgICAgICAgCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbih4b2JqKTsKLSAgICAgICAgKi8KLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGRvbnRUZXN0UU5hbWVDb3B5KCkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgU2NoZW1hRG9jdW1lbnQgeG9iaiA9IFNjaGVtYURvY3VtZW50LkZhY3RvcnkucGFyc2UoCi0gICAgICAgICAgICAgICAgIjx4czpzY2hlbWEgeG1sbnM6eHM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJz4iICsKLSAgICAgICAgICAgICAgICAiPHhzOmVsZW1lbnQgbmFtZT0nZm9vJyB0eXBlPSd4czpzdHJpbmcnLz48L3hzOnNjaGVtYT4iKTsKLSAgICAgICAgU2NoZW1hRG9jdW1lbnQgeG9iajIgPSBTY2hlbWFEb2N1bWVudC5GYWN0b3J5LnBhcnNlKAotICAgICAgICAgICAgICAgICI8eHNkOnNjaGVtYSB4bWxuczp4c2Q9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJy8+Iik7Ci0gICAgICAgIHhvYmoyLmdldFNjaGVtYSgpLmFkZE5ld0VsZW1lbnQoKS5zZXQoeG9iai5nZXRTY2hlbWEoKS5nZXRFbGVtZW50QXJyYXkoMCkpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oeG9iajIpOwotICAgIH0KLSAgICAKLSAgICAvLyBkb24ndCBydW4gb24gbm9ybWFsIGRydCBiZWNhdXNlIGl0J3MgdG9vIHNsb3c6IGFib3V0IDIwLTMwIHNlY3MKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgZG9udHRlc3RDdXJzb3JGaW5hbGl6ZSgpCi0gICAgewotICAgICAgICBYbWxPYmplY3Qgb2JqID0gWG1sT2JqZWN0LkZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgaW50IGkgPSAwOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDIwMDAgKiAxMDAwOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgWG1sQ3Vyc29yIGN1ciA9IG9iai5uZXdDdXJzb3IoKTsKLSAgICAgICAgICAgICAgICAvLyBjdXIuZGlzcG9zZSgpOyBza2lwcGluZyB0aGlzIGRlcGVuZHMgb24gZmluYWxpemF0aW9uIG9yIGVsc2UgT09NCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKE91dE9mTWVtb3J5RXJyb3IgZSkKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJEaWQgIiArIGkgKyAiIGl0ZXJhdGlvbnMgYmVmb3JlIHJ1bm5pbmcgb3V0IG9mIG1lbW9yeSIpOwotICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdE91dE9mUmFuZ2UoKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBQb3NpdGlvbkRvY3VtZW50IGRvYyA9IFBvc2l0aW9uRG9jdW1lbnQuRmFjdG9yeS5wYXJzZSgiPHBvc2l0aW9uIHhtbG5zPSdqYXZhOmludC50ZXN0Jz48bGF0PjQzPC9sYXQ+PGxvbj4wMzc8L2xvbj48L3Bvc2l0aW9uPiIpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDQzLCBkb2MuZ2V0UG9zaXRpb24oKS5nZXRMYXQoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMzcsIGRvYy5nZXRQb3NpdGlvbigpLmdldExvbigpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoZG9jLnZhbGlkYXRlKCkpOwotICAgICAgICAKLSAgICAgICAgZG9jID0gUG9zaXRpb25Eb2N1bWVudC5GYWN0b3J5LnBhcnNlKCI8cG9zaXRpb24geG1sbnM9J2phdmE6aW50LnRlc3QnPjxsYXQ+NDQzPC9sYXQ+PGxvbj43Mzc8L2xvbj48L3Bvc2l0aW9uPiIpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDQ0MywgZG9jLmdldFBvc2l0aW9uKCkuZ2V0TGF0KCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDczNywgZG9jLmdldFBvc2l0aW9uKCkuZ2V0TG9uKCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSghZG9jLnZhbGlkYXRlKCkpOwotICAgICAgICAKLSAgICAgICAgZG9jLmdldFBvc2l0aW9uKCkuc2V0TGF0KChzaG9ydCktMzAwKTsKLSAgICAgICAgZG9jLmdldFBvc2l0aW9uKCkuc2V0TG9uKChzaG9ydCkzMjc2Nyk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoLTMwMCwgZG9jLmdldFBvc2l0aW9uKCkuZ2V0TGF0KCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDMyNzY3LCBkb2MuZ2V0UG9zaXRpb24oKS5nZXRMb24oKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCFkb2MudmFsaWRhdGUoKSk7Ci0gICAgICAgIAotICAgICAgICBkb2MuZ2V0UG9zaXRpb24oKS5zZXRMYXQoKHNob3J0KTQzKTsKLSAgICAgICAgZG9jLmdldFBvc2l0aW9uKCkuc2V0TG9uKChzaG9ydCkxMjcpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDQzLCBkb2MuZ2V0UG9zaXRpb24oKS5nZXRMYXQoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMTI3LCBkb2MuZ2V0UG9zaXRpb24oKS5nZXRMb24oKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGRvYy52YWxpZGF0ZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RQYXJzZSgpIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbFRpbWUgeHQgPSBYbWxUaW1lLkZhY3RvcnkucGFyc2UoIjx4bWwtZnJhZ21lbnQ+MTI6MDA6MDA8L3htbC1mcmFnbWVudD4iKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiMTI6MDA6MDAiLCB4dC5jYWxlbmRhclZhbHVlKCkudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgCi0gICAgCi19CmRpZmYgLS1naXQgYS92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvQmluZGluZ1Rlc3RzLmphdmEgYi92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvQmluZGluZ1Rlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmNjUwYjQuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL0JpbmRpbmdUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg3ICswLDAgQEAKLS8qKgotICogWEJlYW5zIGltcGxlbWVudGF0aW9uLgotICogQXV0aG9yOiBEYXZpZCBCYXUKLSAqIERhdGU6IE9jdCAzLCAyMDAzCi0gKi8KLXBhY2thZ2UgZHJ0Y2FzZXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0cy5CaW5kaW5nRmlsZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHMuQmluZGluZ0xvYWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHMuQmluZGluZ1R5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzLkJ1aWx0aW5CaW5kaW5nTG9hZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0cy5CeU5hbWVCZWFuOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0cy5KYXZhTmFtZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuYmluZGluZy5idHMuUGF0aEJpbmRpbmdMb2FkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzLlFOYW1lUHJvcGVydHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuYnRzLlNpbXBsZUJpbmRpbmdUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0cy5YbWxOYW1lOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0cy5CaW5kaW5nVHlwZU5hbWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuY29tcGlsZS5KQVhSUENTY2hlbWFCaW5kZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuY29tcGlsZS5TY2hlbWFUb0phdmFSZXN1bHQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmJpbmRpbmcuY29tcGlsZS5KYXZhQ29kZUdlbmVyYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLngyMDAzLngwOS5iaW5kaW5nQ29uZmlnLkJpbmRpbmdDb25maWdEb2N1bWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJlYW5zOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVN5c3RlbTsKLWltcG9ydCBvcmcudzMueDIwMDEueG1sU2NoZW1hLlNjaGVtYURvY3VtZW50OwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1wdWJsaWMgY2xhc3MgQmluZGluZ1Rlc3RzIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgICBwdWJsaWMgQmluZGluZ1Rlc3RzKFN0cmluZyBuYW1lKSB7IHN1cGVyKG5hbWUpOyB9Ci0gICAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeyByZXR1cm4gbmV3IFRlc3RTdWl0ZShCaW5kaW5nVGVzdHMuY2xhc3MpOyB9Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBib29sZWFuIHZlcmJvc2UgPSBmYWxzZTsKLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0SkFYUlBDQmluZGluZygpIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIEZpbGUgdHlwZXNvbmx5ZmlsZSA9IFRlc3RFbnYueGJlYW5DYXNlKCJzY2hlbWEvdHlwZXNvbmx5L3R5cGVzb25seS54c2QiKTsKLSAgICAgICAgU2NoZW1hVHlwZVN5c3RlbSBzdHMgPSBYbWxCZWFucy5jb21waWxlWHNkKG5ldyBYbWxPYmplY3RbXSB7IFNjaGVtYURvY3VtZW50LkZhY3RvcnkucGFyc2UodHlwZXNvbmx5ZmlsZSkgfSwgWG1sQmVhbnMuZ2V0QnVpbHRpblR5cGVTeXN0ZW0oKSwgbnVsbCk7Ci0gICAgICAgIFNjaGVtYVRvSmF2YVJlc3VsdCByZXN1bHQgPSBKQVhSUENTY2hlbWFCaW5kZXIuYmluZChzdHMsIEJ1aWx0aW5CaW5kaW5nTG9hZGVyLmdldEluc3RhbmNlKCkpOwotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIHJlc3VsdC5nZXRCaW5kaW5nRmlsZUdlbmVyYXRvcigpLnByaW50QmluZGluZ0ZpbGUoU3lzdGVtLm91dCk7Ci0gICAgICAgIEphdmFDb2RlR2VuZXJhdG9yIGphdmFjb2RlID0gcmVzdWx0LmdldEphdmFDb2RlR2VuZXJhdG9yKCk7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IGphdmFjb2RlLmdldFRvcGxldmVsQ2xhc3NlcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBqYXZhY2xhc3MgPSAoU3RyaW5nKWkubmV4dCgpOwotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09PT09PT09PT09PT09PSIpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihqYXZhY2xhc3MpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPT09PT09PT09PT09PT09PT09PT09PT0iKTsKLSAgICAgICAgICAgICAgICBqYXZhY29kZS5wcmludFNvdXJjZUNvZGUoamF2YWNsYXNzLCBTeXN0ZW0ub3V0KTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LmZsdXNoKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0QmluZGluZ0ZpbGUoKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBCaW5kaW5nRmlsZSBiZiA9IG5ldyBCaW5kaW5nRmlsZSgpOwotICAgICAgICBCaW5kaW5nTG9hZGVyIGJ1aWx0aW5zID0gQnVpbHRpbkJpbmRpbmdMb2FkZXIuZ2V0SW5zdGFuY2UoKTsKLQotICAgICAgICAvLyBzb21lIGNvbXBsZXggdHlwZXMKLSAgICAgICAgQnlOYW1lQmVhbiBibmIgPSBuZXcgQnlOYW1lQmVhbihCaW5kaW5nVHlwZU5hbWUuZm9yUGFpcihKYXZhTmFtZS5mb3JTdHJpbmcoImNvbS5teXRlc3QuTXlDbGFzcyIpLCBYbWxOYW1lLmZvclN0cmluZygidD1teS10eXBlQGh0dHA6Ly93d3cubXl0ZXN0LmNvbS8iKSkpOwotICAgICAgICBiZi5hZGRCaW5kaW5nVHlwZShibmIsIHRydWUsIHRydWUpOwotICAgICAgICBCeU5hbWVCZWFuIGJuYjIgPSBuZXcgQnlOYW1lQmVhbihCaW5kaW5nVHlwZU5hbWUuZm9yUGFpcihKYXZhTmFtZS5mb3JTdHJpbmcoImNvbS5teXRlc3QuWW91ckNsYXNzIiksIFhtbE5hbWUuZm9yU3RyaW5nKCJ0PXlvdXItdHlwZUBodHRwOi8vd3d3Lm15dGVzdC5jb20vIikpKTsKLSAgICAgICAgYmYuYWRkQmluZGluZ1R5cGUoYm5iMiwgdHJ1ZSwgdHJ1ZSk7Ci0KLSAgICAgICAgLy8gYSBjdXN0b20gc2ltcGxlIHR5cGUKLSAgICAgICAgU2ltcGxlQmluZGluZ1R5cGUgc2J0ID0gbmV3IFNpbXBsZUJpbmRpbmdUeXBlKEJpbmRpbmdUeXBlTmFtZS5mb3JQYWlyKEphdmFOYW1lLmZvclN0cmluZygiamF2YS5sYW5nLlN0cmluZyIpLCBYbWxOYW1lLmZvclN0cmluZygidD1jdXN0b20tc3RyaW5nQGh0dHA6Ly93d3cubXl0ZXN0LmNvbS8iKSkpOwotICAgICAgICBiZi5hZGRCaW5kaW5nVHlwZShzYnQsIGZhbHNlLCB0cnVlKTsgLy8gbm90ZSBub3QgZnJvbS1qYXZhLWRlZmF1bHQgZm9yIFN0cmluZwotCi0KLSAgICAgICAgLy8gYm5iCi0KLSAgICAgICAgUU5hbWVQcm9wZXJ0eSBwcm9wID0gbmV3IFFOYW1lUHJvcGVydHkoKTsKLSAgICAgICAgcHJvcC5zZXRRTmFtZShuZXcgUU5hbWUoImh0dHA6Ly93d3cubXl0ZXN0LmNvbS8iLCAibXllbHQiKSk7Ci0gICAgICAgIHByb3Auc2V0U2V0dGVyTmFtZSgic2V0TXllbHQiKTsKLSAgICAgICAgcHJvcC5zZXRHZXR0ZXJOYW1lKCJnZXRNeWVsdCIpOwotICAgICAgICBwcm9wLnNldEJpbmRpbmdUeXBlKGJuYjIpOwotICAgICAgICBibmIuYWRkUHJvcGVydHkocHJvcCk7Ci0KLSAgICAgICAgcHJvcCA9IG5ldyBRTmFtZVByb3BlcnR5KCk7Ci0gICAgICAgIHByb3Auc2V0UU5hbWUobmV3IFFOYW1lKCJodHRwOi8vd3d3Lm15dGVzdC5jb20vIiwgIm15ZWx0MiIpKTsKLSAgICAgICAgcHJvcC5zZXRTZXR0ZXJOYW1lKCJzZXRNeWVsdDIiKTsKLSAgICAgICAgcHJvcC5zZXRHZXR0ZXJOYW1lKCJnZXRNeWVsdDIiKTsKLSAgICAgICAgcHJvcC5zZXRCaW5kaW5nVHlwZShibmIpOwotICAgICAgICBibmIuYWRkUHJvcGVydHkocHJvcCk7Ci0KLSAgICAgICAgcHJvcCA9IG5ldyBRTmFtZVByb3BlcnR5KCk7Ci0gICAgICAgIHByb3Auc2V0UU5hbWUobmV3IFFOYW1lKCJodHRwOi8vd3d3Lm15dGVzdC5jb20vIiwgIm15YXR0IikpOwotICAgICAgICBwcm9wLnNldFNldHRlck5hbWUoInNldE15YXR0Iik7Ci0gICAgICAgIHByb3Auc2V0R2V0dGVyTmFtZSgiZ2V0TXlhdHQiKTsKLSAgICAgICAgcHJvcC5zZXRCaW5kaW5nVHlwZShzYnQpOwotICAgICAgICBibmIuYWRkUHJvcGVydHkocHJvcCk7Ci0KLSAgICAgICAgLy8gbm93IGJuYjIKLQotICAgICAgICBwcm9wID0gbmV3IFFOYW1lUHJvcGVydHkoKTsKLSAgICAgICAgcHJvcC5zZXRRTmFtZShuZXcgUU5hbWUoImh0dHA6Ly93d3cubXl0ZXN0LmNvbS8iLCAieW91cmVsdCIpKTsKLSAgICAgICAgcHJvcC5zZXRTZXR0ZXJOYW1lKCJzZXRZb3VyZWx0Iik7Ci0gICAgICAgIHByb3Auc2V0R2V0dGVyTmFtZSgiZ2V0WW91cmVsdCIpOwotICAgICAgICBwcm9wLnNldEJpbmRpbmdUeXBlKGJuYjIpOwotICAgICAgICBibmIyLmFkZFByb3BlcnR5KHByb3ApOwotCi0gICAgICAgIHByb3AgPSBuZXcgUU5hbWVQcm9wZXJ0eSgpOwotICAgICAgICBwcm9wLnNldFFOYW1lKG5ldyBRTmFtZSgiaHR0cDovL3d3dy5teXRlc3QuY29tLyIsICJ5b3VyZWx0MiIpKTsKLSAgICAgICAgcHJvcC5zZXRTZXR0ZXJOYW1lKCJzZXRZb3VyZWx0MiIpOwotICAgICAgICBwcm9wLnNldEdldHRlck5hbWUoImdldFlvdXJlbHQyIik7Ci0gICAgICAgIHByb3Auc2V0QmluZGluZ1R5cGUoYm5iKTsKLSAgICAgICAgYm5iMi5hZGRQcm9wZXJ0eShwcm9wKTsKLQotICAgICAgICAvLyBzYnQKLSAgICAgICAgc2J0LnNldEFzSWZYbWxUeXBlKFhtbE5hbWUuZm9yU3RyaW5nKCJ0PXN0cmluZ0BodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIpKTsKLQotICAgICAgICAvLyBub3cgc2VyaWFsaXplCi0gICAgICAgIEJpbmRpbmdDb25maWdEb2N1bWVudCBkb2MgPSBiZi53cml0ZSgpOwotICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihkb2MudG9TdHJpbmcoKSk7Ci0KLSAgICAgICAgLy8gbm93IGxvYWQKLSAgICAgICAgQmluZGluZ0ZpbGUgYmZjID0gQmluZGluZ0ZpbGUuZm9yRG9jKGRvYyk7Ci0gICAgICAgIEJpbmRpbmdMb2FkZXIgbGMgPSBQYXRoQmluZGluZ0xvYWRlci5mb3JQYXRoKG5ldyBCaW5kaW5nTG9hZGVyW10ge2J1aWx0aW5zLCBiZmN9KTsKLSAgICAgICAgQnlOYW1lQmVhbiBibmJjID0gKEJ5TmFtZUJlYW4pYmZjLmdldEJpbmRpbmdUeXBlKEJpbmRpbmdUeXBlTmFtZS5mb3JQYWlyKEphdmFOYW1lLmZvclN0cmluZygiY29tLm15dGVzdC5NeUNsYXNzIiksIFhtbE5hbWUuZm9yU3RyaW5nKCJ0PW15LXR5cGVAaHR0cDovL3d3dy5teXRlc3QuY29tLyIpKSk7Ci0gICAgICAgIEJ5TmFtZUJlYW4gYm5iMmMgPSAoQnlOYW1lQmVhbiliZmMuZ2V0QmluZGluZ1R5cGUoQmluZGluZ1R5cGVOYW1lLmZvclBhaXIoSmF2YU5hbWUuZm9yU3RyaW5nKCJjb20ubXl0ZXN0LllvdXJDbGFzcyIpLCBYbWxOYW1lLmZvclN0cmluZygidD15b3VyLXR5cGVAaHR0cDovL3d3dy5teXRlc3QuY29tLyIpKSk7Ci0gICAgICAgIFNpbXBsZUJpbmRpbmdUeXBlIHNidGMgPSAoU2ltcGxlQmluZGluZ1R5cGUpYmZjLmdldEJpbmRpbmdUeXBlKEJpbmRpbmdUeXBlTmFtZS5mb3JQYWlyKEphdmFOYW1lLmZvclN0cmluZygiamF2YS5sYW5nLlN0cmluZyIpLCBYbWxOYW1lLmZvclN0cmluZygidD1jdXN0b20tc3RyaW5nQGh0dHA6Ly93d3cubXl0ZXN0LmNvbS8iKSkpOwotCi0gICAgICAgIC8vIGNoZWNrIGxvYWRpbmcgeHNkOmZsb2F0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFFOYW1lIHFuID0gbmV3IFFOYW1lKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsICJmbG9hdCIpOwotICAgICAgICAgICAgWG1sTmFtZSB4biA9IFhtbE5hbWUuZm9yVHlwZU5hbWVkKHFuKTsKLSAgICAgICAgICAgIFhtbE5hbWUgeG5zID0gWG1sTmFtZS5mb3JTdHJpbmcoInQ9ZmxvYXRAaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiKTsKLSAgICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoeG4sIHhucyk7Ci0gICAgICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHhuLmhhc2hDb2RlKCksIHhucy5oYXNoQ29kZSgpKTsKLSAgICAgICAgICAgIEJpbmRpbmdUeXBlIGJ0eXBlID0gbGMuZ2V0QmluZGluZ1R5cGUobGMubG9va3VwUG9qb0Zvcih4bikpOwotICAgICAgICAgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoYnR5cGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gY2hlY2sgbG9hZGluZyB4c2Q6c3RyaW5nCi0gICAgICAgIHsKLSAgICAgICAgICAgIFFOYW1lIHFuID0gbmV3IFFOYW1lKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsICJzdHJpbmciKTsKLSAgICAgICAgICAgIFhtbE5hbWUgeG4gPSBYbWxOYW1lLmZvclR5cGVOYW1lZChxbik7Ci0gICAgICAgICAgICBYbWxOYW1lIHhucyA9IFhtbE5hbWUuZm9yU3RyaW5nKCJ0PXN0cmluZ0BodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIpOwotICAgICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyh4biwgeG5zKTsKLSAgICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoeG4uaGFzaENvZGUoKSwgeG5zLmhhc2hDb2RlKCkpOwotICAgICAgICAgICAgQmluZGluZ1R5cGUgYnR5cGUgPSBsYy5nZXRCaW5kaW5nVHlwZShsYy5sb29rdXBQb2pvRm9yKHhuKSk7Ci0gICAgICAgICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChidHlwZSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjaGVjayBibmIKLSAgICAgICAgcHJvcCA9IGJuYmMuZ2V0UHJvcGVydHlGb3JFbGVtZW50KG5ldyBRTmFtZSgiaHR0cDovL3d3dy5teXRlc3QuY29tLyIsICJteWVsdCIpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygic2V0TXllbHQiLCBwcm9wLmdldFNldHRlck5hbWUoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoImdldE15ZWx0IiwgcHJvcC5nZXRHZXR0ZXJOYW1lKCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKGJuYjJjLCBsYy5nZXRCaW5kaW5nVHlwZShwcm9wLmdldFR5cGVOYW1lKCkpKTsKLQotICAgICAgICBwcm9wID0gYm5iYy5nZXRQcm9wZXJ0eUZvckVsZW1lbnQobmV3IFFOYW1lKCJodHRwOi8vd3d3Lm15dGVzdC5jb20vIiwgIm15ZWx0MiIpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygic2V0TXllbHQyIiwgcHJvcC5nZXRTZXR0ZXJOYW1lKCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJnZXRNeWVsdDIiLCBwcm9wLmdldEdldHRlck5hbWUoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoYm5iYywgbGMuZ2V0QmluZGluZ1R5cGUocHJvcC5nZXRUeXBlTmFtZSgpKSk7Ci0KLSAgICAgICAgcHJvcCA9IGJuYmMuZ2V0UHJvcGVydHlGb3JFbGVtZW50KG5ldyBRTmFtZSgiaHR0cDovL3d3dy5teXRlc3QuY29tLyIsICJteWF0dCIpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygic2V0TXlhdHQiLCBwcm9wLmdldFNldHRlck5hbWUoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoImdldE15YXR0IiwgcHJvcC5nZXRHZXR0ZXJOYW1lKCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHNidGMsIGxjLmdldEJpbmRpbmdUeXBlKHByb3AuZ2V0VHlwZU5hbWUoKSkpOwotCi0gICAgICAgIC8vIGNoZWNrIGJuYjIKLSAgICAgICAgcHJvcCA9IGJuYjJjLmdldFByb3BlcnR5Rm9yRWxlbWVudChuZXcgUU5hbWUoImh0dHA6Ly93d3cubXl0ZXN0LmNvbS8iLCAieW91cmVsdCIpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygic2V0WW91cmVsdCIsIHByb3AuZ2V0U2V0dGVyTmFtZSgpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiZ2V0WW91cmVsdCIsIHByb3AuZ2V0R2V0dGVyTmFtZSgpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhibmIyYywgbGMuZ2V0QmluZGluZ1R5cGUocHJvcC5nZXRUeXBlTmFtZSgpKSk7Ci0KLSAgICAgICAgcHJvcCA9IGJuYjJjLmdldFByb3BlcnR5Rm9yRWxlbWVudChuZXcgUU5hbWUoImh0dHA6Ly93d3cubXl0ZXN0LmNvbS8iLCAieW91cmVsdDIiKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoInNldFlvdXJlbHQyIiwgcHJvcC5nZXRTZXR0ZXJOYW1lKCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJnZXRZb3VyZWx0MiIsIHByb3AuZ2V0R2V0dGVyTmFtZSgpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhibmJjLCBsYy5nZXRCaW5kaW5nVHlwZShwcm9wLmdldFR5cGVOYW1lKCkpKTsKLQotICAgICAgICAvLyBjaGVjayBzYnRjCi0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoWG1sTmFtZS5mb3JTdHJpbmcoInQ9c3RyaW5nQGh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiksIHNidGMuZ2V0QXNJZlhtbFR5cGUoKSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL0NvbXBpbGF0aW9uVGVzdHMuamF2YSBiL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9Db21waWxhdGlvblRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyMWMxODUuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL0NvbXBpbGF0aW9uVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0NSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIGRydGNhc2VzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudG9vbC5TY2hlbWFDb21waWxlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudG9vbC5Db2RlR2VuVXRpbDsKLWltcG9ydCBvcmcudzMueDIwMDEueG1sU2NoZW1hLlNjaGVtYURvY3VtZW50OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQmVhbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb247Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotCi1wdWJsaWMgY2xhc3MgQ29tcGlsYXRpb25UZXN0cyBleHRlbmRzIFRlc3RDYXNlCi17Ci0gICAgcHVibGljIENvbXBpbGF0aW9uVGVzdHMoU3RyaW5nIG5hbWUpIHsgc3VwZXIobmFtZSk7IH0KLSAgICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7IHJldHVybiBuZXcgVGVzdFN1aXRlKENvbXBpbGF0aW9uVGVzdHMuY2xhc3MpOyB9Ci0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0SjJFRSgpIHRocm93cyBUaHJvd2FibGUKLSAgICB7Ci0gICAgICAgIFRlc3RFbnYuZGVsdHJlZShUZXN0RW52LnhiZWFuT3V0cHV0KCJzY2hlbWEvajJlZSIpKTsKLSAgICAgICAgLy8gRmlyc3QsIGNvbXBpbGUgc2NoZW1hCi0gICAgICAgIEZpbGUgc3JjZGlyID0gVGVzdEVudi54YmVhbk91dHB1dCgic2NoZW1hL2oyZWUvajJlZWNvbmZpZ3htbC9zcmMiKTsKLSAgICAgICAgRmlsZSBjbGFzc2VzZGlyID0gVGVzdEVudi54YmVhbk91dHB1dCgic2NoZW1hL2oyZWUvajJlZWNvbmZpZ3htbC9jbGFzc2VzIik7Ci0gICAgICAgIEZpbGUgb3V0cHV0amFyID0gVGVzdEVudi54YmVhbk91dHB1dCgic2NoZW1hL2oyZWUvajJlZWNvbmZpZ3htbC5qYXIiKTsKLSAgICAgICAgU2NoZW1hQ29tcGlsZXIuUGFyYW1ldGVycyBwYXJhbXMgPSBuZXcgU2NoZW1hQ29tcGlsZXIuUGFyYW1ldGVycygpOwotICAgICAgICBwYXJhbXMuc2V0WHNkRmlsZXMobmV3IEZpbGVbXSB7Ci0gICAgICAgICAgICBUZXN0RW52LnhiZWFuQ2FzZSgic2NoZW1hL2oyZWUvYXBwbGljYXRpb24tY2xpZW50XzFfNC54c2QiKSwKLSAgICAgICAgICAgIFRlc3RFbnYueGJlYW5DYXNlKCJzY2hlbWEvajJlZS9hcHBsaWNhdGlvbl8xXzQueHNkIiksCi0gICAgICAgICAgICBUZXN0RW52LnhiZWFuQ2FzZSgic2NoZW1hL2oyZWUvY29ubmVjdG9yXzFfNS54c2QiKSwKLSAgICAgICAgICAgIFRlc3RFbnYueGJlYW5DYXNlKCJzY2hlbWEvajJlZS9lamItamFyXzJfMS54c2QiKSwKLSAgICAgICAgICAgIFRlc3RFbnYueGJlYW5DYXNlKCJzY2hlbWEvajJlZS9qMmVlXzFfNC54c2QiKSwKLSAgICAgICAgICAgIFRlc3RFbnYueGJlYW5DYXNlKCJzY2hlbWEvajJlZS9qc3BfMl8wLnhzZCIpLAotICAgICAgICAgICAgVGVzdEVudi54YmVhbkNhc2UoInNjaGVtYS9qMmVlL3dlYi1hcHBfMl80LnhzZCIpLAotICAgICAgICAgICAgVGVzdEVudi54YmVhbkNhc2UoInNjaGVtYS9qMmVlL1hNTC54c2QiKSwKLSAgICAgICAgfSk7Ci0gICAgICAgIHBhcmFtcy5zZXRTcmNEaXIoc3JjZGlyKTsKLSAgICAgICAgcGFyYW1zLnNldENsYXNzZXNEaXIoY2xhc3Nlc2Rpcik7Ci0gICAgICAgIHBhcmFtcy5zZXRPdXRwdXRKYXIob3V0cHV0amFyKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIkJ1aWxkIGZhaWxlZCIsIFNjaGVtYUNvbXBpbGVyLmNvbXBpbGUocGFyYW1zKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCJDYW5ub3V0IGZpbmQgIiArIG91dHB1dGphciwgb3V0cHV0amFyLmV4aXN0cygpKTsKLSAgICB9Ci0KLQotICAgIHB1YmxpYyB2b2lkIF9fdGVzdEJ1aWxkKCkKLSAgICB7Ci0gICAgICAgIFRlc3RFbnYuZGVsdHJlZShUZXN0RW52LnhiZWFuT3V0cHV0KCJzY2hlbWEvczRzIikpOwotICAgICAgICBGaWxlIGlucHV0ZmlsZTEgPSBUZXN0RW52LnhiZWFuQ2FzZSgic2NoZW1hL3M0cy9YTUwueHNkIik7Ci0gICAgICAgIEZpbGUgaW5wdXRmaWxlMiA9IFRlc3RFbnYueGJlYW5DYXNlKCJzY2hlbWEvczRzL1hNTFNjaGVtYS54c2QiKTsKLSAgICAgICAgRmlsZSBzcmNkaXIgPSBUZXN0RW52LnhiZWFuT3V0cHV0KCJzY2hlbWEvczRzL3M0c3R5cGVzL3NyYyIpOwotICAgICAgICBGaWxlIGNsYXNzZXNkaXIgPSBUZXN0RW52LnhiZWFuT3V0cHV0KCJzY2hlbWEvczRzL3M0c3R5cGVzL2NsYXNzZXMiKTsKLSAgICAgICAgRmlsZSBvdXRwdXRqYXIgPSBUZXN0RW52LnhiZWFuT3V0cHV0KCJzY2hlbWEvczRzL3M0c3R5cGVzLmphciIpOwotICAgICAgICBTY2hlbWFDb21waWxlci5QYXJhbWV0ZXJzIHBhcmFtcyA9IG5ldyBTY2hlbWFDb21waWxlci5QYXJhbWV0ZXJzKCk7Ci0gICAgICAgIHBhcmFtcy5zZXRYc2RGaWxlcyhuZXcgRmlsZVtdIHsgaW5wdXRmaWxlMSwgaW5wdXRmaWxlMiB9KTsKLSAgICAgICAgcGFyYW1zLnNldFNyY0RpcihzcmNkaXIpOwotICAgICAgICBwYXJhbXMuc2V0Q2xhc3Nlc0RpcihjbGFzc2VzZGlyKTsKLSAgICAgICAgcGFyYW1zLnNldE91dHB1dEphcihvdXRwdXRqYXIpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiQnVpbGQgZmFpbGVkIiwgU2NoZW1hQ29tcGlsZXIuY29tcGlsZShwYXJhbXMpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIkNhbm5vdXQgZmluZCAiICsgb3V0cHV0amFyLCBvdXRwdXRqYXIuZXhpc3RzKCkpOwotICAgIH0KLQotICAgIC8qIHRlc3Qgbm90IG5lZWRlZCBiZWNhdXNlIGJvb3RzdHJhcCBidWlsZCB0ZXN0cyB0aGlzIGJldHRlcgotICAgIHB1YmxpYyB2b2lkIHRlc3ROZXdCdWlsZCgpCi0gICAgewotICAgICAgICBUZXN0RW52LmRlbHRyZWUoVGVzdEVudi54YmVhbk91dHB1dCgic2NoZW1hL3M0cyIpKTsKLSAgICAgICAgRmlsZSBpbnB1dGZpbGUxID0gVGVzdEVudi54YmVhbkNhc2UoInNjaGVtYS9zNHMvWE1MLnhzZCIpOwotICAgICAgICBGaWxlIGlucHV0ZmlsZTIgPSBUZXN0RW52LnhiZWFuQ2FzZSgic2NoZW1hL3M0cy9YTUxTY2hlbWEueHNkIik7Ci0gICAgICAgIEZpbGUgb3V0cHV0amFyID0gVGVzdEVudi54YmVhbk91dHB1dCgic2NoZW1hL3M0cy9zNHN0eXBlcy5qYXIiKTsKLSAgICAgICAgU2NoZW1hQ29tcGlsZXIuY29tcGlsZShuZXcgRmlsZVtdIHsgaW5wdXRmaWxlMSwgaW5wdXRmaWxlMiB9LCBuZXcgRmlsZVswXSwgbmV3IEZpbGVbMF0sIG5ldyBGaWxlWzBdLCBudWxsLCBvdXRwdXRqYXIsICJzY2hlbWEuczRzIiwgbnVsbCwgbnVsbCwgbnVsbCwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIkNhbm5vdXQgZmluZCAiICsgb3V0cHV0amFyLCBvdXRwdXRqYXIuZXhpc3RzKCkpOwotICAgIH0KLSAgICAqLwotCi0gICAgcHVibGljIHZvaWQgX190ZXN0U2ltcGxlKCkgdGhyb3dzIFRocm93YWJsZQotICAgIHsKLSAgICAgICAgVGVzdEVudi5kZWx0cmVlKFRlc3RFbnYueGJlYW5PdXRwdXQoInNjaGVtYS9zaW1wbGUiKSk7Ci0gICAgICAgIC8vIEZpcnN0LCBjb21waWxlIHNjaGVtYQotICAgICAgICBGaWxlIGlucHV0ZmlsZTEgPSBUZXN0RW52LnhiZWFuQ2FzZSgic2NoZW1hL3NpbXBsZS9wZXJzb24ueHNkIik7Ci0gICAgICAgIEZpbGUgaW5wdXRmaWxlMiA9IFRlc3RFbnYueGJlYW5DYXNlKCJzY2hlbWEvc2ltcGxlL3NpbXBsZWMueHNkIik7Ci0gICAgICAgIEZpbGUgc3JjZGlyID0gVGVzdEVudi54YmVhbk91dHB1dCgic2NoZW1hL3NpbXBsZS9zaW1wbGV0eXBlcy9zcmMiKTsKLSAgICAgICAgRmlsZSBjbGFzc2VzZGlyID0gVGVzdEVudi54YmVhbk91dHB1dCgic2NoZW1hL3NpbXBsZS9zaW1wbGV0eXBlcy9jbGFzc2VzIik7Ci0gICAgICAgIEZpbGUgb3V0cHV0amFyID0gVGVzdEVudi54YmVhbk91dHB1dCgic2NoZW1hL3NpbXBsZS9zaW1wbGV0eXBlcy5qYXIiKTsKLSAgICAgICAgU2NoZW1hQ29tcGlsZXIuUGFyYW1ldGVycyBwYXJhbXMgPSBuZXcgU2NoZW1hQ29tcGlsZXIuUGFyYW1ldGVycygpOwotICAgICAgICBwYXJhbXMuc2V0WHNkRmlsZXMobmV3IEZpbGVbXSB7IGlucHV0ZmlsZTEsIGlucHV0ZmlsZTIgfSk7Ci0gICAgICAgIHBhcmFtcy5zZXRTcmNEaXIoc3JjZGlyKTsKLSAgICAgICAgcGFyYW1zLnNldENsYXNzZXNEaXIoY2xhc3Nlc2Rpcik7Ci0gICAgICAgIHBhcmFtcy5zZXRPdXRwdXRKYXIob3V0cHV0amFyKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIkJ1aWxkIGZhaWxlZCIsIFNjaGVtYUNvbXBpbGVyLmNvbXBpbGUocGFyYW1zKSk7Ci0KLSAgICAgICAgLy8gVGhlbiwgY29tcGlsZSBqYXZhIGNsYXNzZXMKLSAgICAgICAgRmlsZSBqYXZhc3JjID0gVGVzdEVudi54YmVhbkNhc2UoInNjaGVtYS9zaW1wbGUvamF2YXNyYyIpOwotICAgICAgICBGaWxlIGphdmFjbGFzc2VzID0gVGVzdEVudi54YmVhbk91dHB1dCgic2NoZW1hL3NpbXBsZS9qYXZhY2xhc3NlcyIpOwotICAgICAgICBqYXZhY2xhc3Nlcy5ta2RpcnMoKTsKLSAgICAgICAgTGlzdCB0ZXN0Y3AgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIHRlc3RjcC5hZGRBbGwoQXJyYXlzLmFzTGlzdChDb2RlR2VuVXRpbC5zeXN0ZW1DbGFzc3BhdGgoKSkpOwotICAgICAgICB0ZXN0Y3AuYWRkKG91dHB1dGphcik7Ci0gICAgICAgIENvZGVHZW5VdGlsLmV4dGVybmFsQ29tcGlsZShBcnJheXMuYXNMaXN0KG5ldyBGaWxlW10geyBqYXZhc3JjIH0pLCBqYXZhY2xhc3NlcywgKEZpbGVbXSl0ZXN0Y3AudG9BcnJheShuZXcgRmlsZVt0ZXN0Y3Auc2l6ZSgpXSksIHRydWUpOwotCi0gICAgICAgIC8vIFRoZW4gcnVuIHRoZSB0ZXN0Ci0gICAgICAgIHRlc3RjcC5hZGQoamF2YWNsYXNzZXMpOwotICAgICAgICBUZXN0UnVuVXRpbC5ydW4oIlNpbXBsZVBlcnNvblRlc3QiLCBuZXcgRmlsZVtdIHsgb3V0cHV0amFyLCBqYXZhY2xhc3NlcyB9KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBfX3Rlc3REb3dubG9hZCgpIHRocm93cyBUaHJvd2FibGUKLSAgICB7Ci0gICAgICAgIFRlc3RFbnYuZGVsdHJlZShUZXN0RW52LnhiZWFuT3V0cHV0KCJzY2hlbWEvaW5jbHVkZSIpKTsKLQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBGaXJzdCwgY29tcGlsZSBzY2hlbWEgd2l0aG91dCBkb3dubG9hZCBhbmQgdmVyaWZ5IGZhaWx1cmUKLSAgICAgICAgICAgIEZpbGUgc3JjZGlyID0gVGVzdEVudi54YmVhbk91dHB1dCgic2NoZW1hL2luY2x1ZGUvc2hvdWxkZmFpbC9zcmMiKTsKLSAgICAgICAgICAgIEZpbGUgY2xhc3Nlc2RpciA9IFRlc3RFbnYueGJlYW5PdXRwdXQoInNjaGVtYS9pbmNsdWRlL3Nob3VsZGZhaWwvY2xhc3NlcyIpOwotICAgICAgICAgICAgRmlsZSBvdXRwdXRqYXIgPSBUZXN0RW52LnhiZWFuT3V0cHV0KCJzY2hlbWEvaW5jbHVkZS9zaG91bGRmYWlsLmphciIpOwotICAgICAgICAgICAgU2NoZW1hQ29tcGlsZXIuUGFyYW1ldGVycyBwYXJhbXMgPSBuZXcgU2NoZW1hQ29tcGlsZXIuUGFyYW1ldGVycygpOwotICAgICAgICAgICAgcGFyYW1zLnNldFhzZEZpbGVzKG5ldyBGaWxlW10gewotICAgICAgICAgICAgICAgIFRlc3RFbnYueGJlYW5DYXNlKCJzY2hlbWEvajJlZS9qMmVlXzFfNC54c2QiKSwKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcGFyYW1zLnNldFNyY0RpcihzcmNkaXIpOwotICAgICAgICAgICAgcGFyYW1zLnNldENsYXNzZXNEaXIoY2xhc3Nlc2Rpcik7Ci0gICAgICAgICAgICBwYXJhbXMuc2V0T3V0cHV0SmFyKG91dHB1dGphcik7Ci0gICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiQnVpbGQgc2hvdWxkIGhhdmUgZmFpbGVkIiwgIVNjaGVtYUNvbXBpbGVyLmNvbXBpbGUocGFyYW1zKSk7Ci0gICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiU2hvdWxkIG5vdCBoYXZlIGNyZWF0ZWQgIiArIG91dHB1dGphciwgIW91dHB1dGphci5leGlzdHMoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBub3cgdHVybiBvbiBkb3dubG9hZCBhbmQgdmVyaWZ5IHN1Y2Nlc3MKLSAgICAgICAgICAgIEZpbGUgc3JjZGlyID0gVGVzdEVudi54YmVhbk91dHB1dCgic2NoZW1hL2luY2x1ZGUvc2hvdWxkc3VjY2VlZC9zcmMiKTsKLSAgICAgICAgICAgIEZpbGUgY2xhc3Nlc2RpciA9IFRlc3RFbnYueGJlYW5PdXRwdXQoInNjaGVtYS9pbmNsdWRlL3Nob3VsZHN1Y2NlZWQvY2xhc3NlcyIpOwotICAgICAgICAgICAgRmlsZSBvdXRwdXRqYXIgPSBUZXN0RW52LnhiZWFuT3V0cHV0KCJzY2hlbWEvaW5jbHVkZS9zaG91bGRzdWNjZWVkLmphciIpOwotICAgICAgICAgICAgU2NoZW1hQ29tcGlsZXIuUGFyYW1ldGVycyBwYXJhbXMgPSBuZXcgU2NoZW1hQ29tcGlsZXIuUGFyYW1ldGVycygpOwotICAgICAgICAgICAgcGFyYW1zLnNldERvd25sb2FkKHRydWUpOwotICAgICAgICAgICAgcGFyYW1zLnNldFhzZEZpbGVzKG5ldyBGaWxlW10gewotICAgICAgICAgICAgICAgIFRlc3RFbnYueGJlYW5DYXNlKCJzY2hlbWEvajJlZS9qMmVlXzFfNC54c2QiKSwKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgcGFyYW1zLnNldFNyY0RpcihzcmNkaXIpOwotICAgICAgICAgICAgcGFyYW1zLnNldENsYXNzZXNEaXIoY2xhc3Nlc2Rpcik7Ci0gICAgICAgICAgICBwYXJhbXMuc2V0T3V0cHV0SmFyKG91dHB1dGphcik7Ci0gICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiQnVpbGQgZmFpbGVkIiwgU2NoZW1hQ29tcGlsZXIuY29tcGlsZShwYXJhbXMpKTsKLSAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCJDYW5ub3V0IGZpbmQgIiArIG91dHB1dGphciwgb3V0cHV0amFyLmV4aXN0cygpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIF9fdGVzdFByaWNlcXVvdGUoKSB0aHJvd3MgVGhyb3dhYmxlCi0gICAgewotICAgICAgICBUZXN0RW52LmRlbHRyZWUoVGVzdEVudi54YmVhbk91dHB1dCgic2NoZW1hL3ByaWNlcXVvdGUiKSk7Ci0gICAgICAgIC8vIEZpcnN0LCBjb21waWxlIHNjaGVtYQotICAgICAgICBGaWxlIHNyY2RpciA9IFRlc3RFbnYueGJlYW5PdXRwdXQoInNjaGVtYS9wcmljZXF1b3RlL3NyYyIpOwotICAgICAgICBGaWxlIGNsYXNzZXNkaXIgPSBUZXN0RW52LnhiZWFuT3V0cHV0KCJzY2hlbWEvcHJpY2VxdW90ZS9jbGFzc2VzIik7Ci0gICAgICAgIEZpbGUgb3V0cHV0amFyID0gVGVzdEVudi54YmVhbk91dHB1dCgic2NoZW1hL3ByaWNlcXVvdGUvcHJpY2VxdW90ZS5qYXIiKTsKLSAgICAgICAgU2NoZW1hQ29tcGlsZXIuUGFyYW1ldGVycyBwYXJhbXMgPSBuZXcgU2NoZW1hQ29tcGlsZXIuUGFyYW1ldGVycygpOwotICAgICAgICBwYXJhbXMuc2V0WHNkRmlsZXMobmV3IEZpbGVbXSB7IFRlc3RFbnYueGJlYW5DYXNlKCJzY2hlbWEvcHJpY2VxdW90ZS9QcmljZVF1b3RlLnhzZCIpIH0pOwotICAgICAgICBwYXJhbXMuc2V0U3JjRGlyKHNyY2Rpcik7Ci0gICAgICAgIHBhcmFtcy5zZXRDbGFzc2VzRGlyKGNsYXNzZXNkaXIpOwotICAgICAgICBwYXJhbXMuc2V0T3V0cHV0SmFyKG91dHB1dGphcik7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCJCdWlsZCBmYWlsZWQiLCBTY2hlbWFDb21waWxlci5jb21waWxlKHBhcmFtcykpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiQ2Fubm91dCBmaW5kICIgKyBvdXRwdXRqYXIsIG91dHB1dGphci5leGlzdHMoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgX190ZXN0QW5udWl0eSgpIHRocm93cyBUaHJvd2FibGUKLSAgICB7Ci0gICAgICAgIFRlc3RFbnYuZGVsdHJlZShUZXN0RW52LnhiZWFuT3V0cHV0KCJzY2hlbWEvYW5udWl0eSIpKTsKLSAgICAgICAgLy8gRmlyc3QsIGNvbXBpbGUgc2NoZW1hCi0gICAgICAgIEZpbGUgc3JjZGlyID0gVGVzdEVudi54YmVhbk91dHB1dCgic2NoZW1hL2FubnVpdHkvc3JjIik7Ci0gICAgICAgIEZpbGUgb3V0cHV0ZGlyID0gVGVzdEVudi54YmVhbk91dHB1dCgic2NoZW1hL2FubnVpdHkvY2xhc3NlcyIpOwotICAgICAgICBTY2hlbWFDb21waWxlci5QYXJhbWV0ZXJzIHBhcmFtcyA9IG5ldyBTY2hlbWFDb21waWxlci5QYXJhbWV0ZXJzKCk7Ci0gICAgICAgIHBhcmFtcy5zZXRYc2RGaWxlcyhuZXcgRmlsZVtdIHsgVGVzdEVudi54YmVhbkNhc2UoInNjaGVtYS9hbm51aXR5L2FubnVpdHluZXQueHNkIikgfSk7Ci0gICAgICAgIHBhcmFtcy5zZXRTcmNEaXIoc3JjZGlyKTsKLSAgICAgICAgcGFyYW1zLnNldENsYXNzZXNEaXIob3V0cHV0ZGlyKTsKLSAgICAgICAgcGFyYW1zLnNldENvbmZpZ0ZpbGVzKG5ldyBGaWxlW10geyBUZXN0RW52LnhiZWFuQ2FzZSgic2NoZW1hL2FubnVpdHkvYW5udWl0eW5ldC54c2Rjb25maWciKSB9KTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIkJ1aWxkIGZhaWxlZCIsIFNjaGVtYUNvbXBpbGVyLmNvbXBpbGUocGFyYW1zKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCJDYW5ub3V0IGZpbmQgIiArIG91dHB1dGRpciwgb3V0cHV0ZGlyLmV4aXN0cygpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgU3RyaW5nIFtdIGludmFsaWRTY2hlbWFzID0gewotICAgICAgICAiPHhzOnNjaGVtYSB4bWxuczp4cz0naHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEnPlxuIiArCi0gICAgICAgICIgIDx4czpjb21wbGV4VHlwZSBuYW1lPSdiYXNlJyBmaW5hbD0nZXh0ZW5zaW9uJy8+XG4iICsKLSAgICAgICAgIiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J2V4dCc+XG4iICsKLSAgICAgICAgIiAgICA8eHM6Y29tcGxleENvbnRlbnQ+XG4iICsKLSAgICAgICAgIiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0nYmFzZScvPlxuIiArCi0gICAgICAgICIgICAgPC94czpjb21wbGV4Q29udGVudD5cbiIgKwotICAgICAgICAiICA8L3hzOmNvbXBsZXhUeXBlPlxuIiArCi0gICAgICAgICI8L3hzOnNjaGVtYT5cbiIsCi0KLSAgICAgICAgIjx4czpzY2hlbWEgeG1sbnM6eHM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJz5cbiIgKwotICAgICAgICAiICA8eHM6Y29tcGxleFR5cGUgbmFtZT0nYmFzZScgZmluYWw9JyNhbGwnLz5cbiIgKwotICAgICAgICAiICA8eHM6Y29tcGxleFR5cGUgbmFtZT0nZXh0Jz5cbiIgKwotICAgICAgICAiICAgIDx4czpjb21wbGV4Q29udGVudD5cbiIgKwotICAgICAgICAiICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSdiYXNlJy8+XG4iICsKLSAgICAgICAgIiAgICA8L3hzOmNvbXBsZXhDb250ZW50PlxuIiArCi0gICAgICAgICIgIDwveHM6Y29tcGxleFR5cGU+XG4iICsKLSAgICAgICAgIjwveHM6c2NoZW1hPlxuIiwKLQotICAgICAgICAiPHhzOnNjaGVtYSB4bWxuczp4cz0naHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEnIGZpbmFsRGVmYXVsdD0nI2FsbCc+XG4iICsKLSAgICAgICAgIiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J2Jhc2UnLz5cbiIgKwotICAgICAgICAiICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ncmVzdCc+XG4iICsKLSAgICAgICAgIiAgICA8eHM6Y29tcGxleENvbnRlbnQ+XG4iICsKLSAgICAgICAgIiAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSdiYXNlJy8+XG4iICsKLSAgICAgICAgIiAgICA8L3hzOmNvbXBsZXhDb250ZW50PlxuIiArCi0gICAgICAgICIgIDwveHM6Y29tcGxleFR5cGU+XG4iICsKLSAgICAgICAgIjwveHM6c2NoZW1hPlxuIiwKLQotICAgICAgICAiPHhzOnNjaGVtYSB4bWxuczp4cz0naHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEnIGZpbmFsRGVmYXVsdD0ncmVzdHJpY3Rpb24nPlxuIiArCi0gICAgICAgICIgIDx4czpjb21wbGV4VHlwZSBuYW1lPSdiYXNlJy8+XG4iICsKLSAgICAgICAgIiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J3Jlc3QnPlxuIiArCi0gICAgICAgICIgICAgPHhzOmNvbXBsZXhDb250ZW50PlxuIiArCi0gICAgICAgICIgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0nYmFzZScvPlxuIiArCi0gICAgICAgICIgICAgPC94czpjb21wbGV4Q29udGVudD5cbiIgKwotICAgICAgICAiICA8L3hzOmNvbXBsZXhUeXBlPlxuIiArCi0gICAgICAgICI8L3hzOnNjaGVtYT5cbiIsCi0gICAgfTsKLQotICAgIHN0YXRpYyBTdHJpbmcgW10gdmFsaWRTY2hlbWFzID0gewotICAgICAgICAiPHhzOnNjaGVtYSB4bWxuczp4cz0naHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEnPlxuIiArCi0gICAgICAgICIgIDx4czpjb21wbGV4VHlwZSBuYW1lPSdiYXNlJyBmaW5hbD0nZXh0ZW5zaW9uJy8+XG4iICsKLSAgICAgICAgIiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J3Jlc3QnPlxuIiArCi0gICAgICAgICIgICAgPHhzOmNvbXBsZXhDb250ZW50PlxuIiArCi0gICAgICAgICIgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0nYmFzZScvPlxuIiArCi0gICAgICAgICIgICAgPC94czpjb21wbGV4Q29udGVudD5cbiIgKwotICAgICAgICAiICA8L3hzOmNvbXBsZXhUeXBlPlxuIiArCi0gICAgICAgICI8L3hzOnNjaGVtYT5cbiIsCi0KLSAgICAgICAgIjx4czpzY2hlbWEgeG1sbnM6eHM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJz5cbiIgKwotICAgICAgICAiICA8eHM6Y29tcGxleFR5cGUgbmFtZT0nYmFzZScgZmluYWw9J3Jlc3RyaWN0aW9uJy8+XG4iICsKLSAgICAgICAgIiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J2V4dCc+XG4iICsKLSAgICAgICAgIiAgICA8eHM6Y29tcGxleENvbnRlbnQ+XG4iICsKLSAgICAgICAgIiAgICAgIDx4czpleHRlbnNpb24gYmFzZT0nYmFzZScvPlxuIiArCi0gICAgICAgICIgICAgPC94czpjb21wbGV4Q29udGVudD5cbiIgKwotICAgICAgICAiICA8L3hzOmNvbXBsZXhUeXBlPlxuIiArCi0gICAgICAgICI8L3hzOnNjaGVtYT5cbiIsCi0KLSAgICAgICAgIjx4czpzY2hlbWEgeG1sbnM6eHM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJyBmaW5hbERlZmF1bHQ9J3Jlc3RyaWN0aW9uJz5cbiIgKwotICAgICAgICAiICA8eHM6Y29tcGxleFR5cGUgbmFtZT0nYmFzZScvPlxuIiArCi0gICAgICAgICIgIDx4czpjb21wbGV4VHlwZSBuYW1lPSdleHQnPlxuIiArCi0gICAgICAgICIgICAgPHhzOmNvbXBsZXhDb250ZW50PlxuIiArCi0gICAgICAgICIgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9J2Jhc2UnLz5cbiIgKwotICAgICAgICAiICAgIDwveHM6Y29tcGxleENvbnRlbnQ+XG4iICsKLSAgICAgICAgIiAgPC94czpjb21wbGV4VHlwZT5cbiIgKwotICAgICAgICAiPC94czpzY2hlbWE+XG4iLAotCi0gICAgICAgICI8eHM6c2NoZW1hIHhtbG5zOnhzPSdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYScgZmluYWxEZWZhdWx0PSdleHRlbnNpb24nPlxuIiArCi0gICAgICAgICIgIDx4czpjb21wbGV4VHlwZSBuYW1lPSdiYXNlJy8+XG4iICsKLSAgICAgICAgIiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J3Jlc3QnPlxuIiArCi0gICAgICAgICIgICAgPHhzOmNvbXBsZXhDb250ZW50PlxuIiArCi0gICAgICAgICIgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0nYmFzZScvPlxuIiArCi0gICAgICAgICIgICAgPC94czpjb21wbGV4Q29udGVudD5cbiIgKwotICAgICAgICAiICA8L3hzOmNvbXBsZXhUeXBlPlxuIiArCi0gICAgICAgICI8L3hzOnNjaGVtYT5cbiIsCi0gICAgfTsKLQotICAgIHB1YmxpYyB2b2lkIF9fdGVzdEZpbmFsKCkgdGhyb3dzIFRocm93YWJsZQotICAgIHsKLSAgICAgICAgU2NoZW1hRG9jdW1lbnRbXSBzY2hlbWFzID0gbmV3IFNjaGVtYURvY3VtZW50W2ludmFsaWRTY2hlbWFzLmxlbmd0aF07Ci0KLSAgICAgICAgLy8gUGFyc2UgdGhlIGludmFsaWQgc2NoZW1hIGZpbGVzCi0gICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IGludmFsaWRTY2hlbWFzLmxlbmd0aCA7IGkrKykKLSAgICAgICAgICAgIHNjaGVtYXNbaV0gPSBTY2hlbWFEb2N1bWVudC5GYWN0b3J5LnBhcnNlKGludmFsaWRTY2hlbWFzW2ldKTsKLQotICAgICAgICAvLyBOb3cgY29tcGlsZSB0aGUgaW52YWxpZCBzY2hlbWFzLCB0ZXN0IHRoYXQgdGhleSBmYWlsCi0gICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IHNjaGVtYXMubGVuZ3RoIDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIFhtbEJlYW5zLmxvYWRYc2QobmV3IFhtbE9iamVjdFtdIHtzY2hlbWFzW2ldfSk7Ci0gICAgICAgICAgICAgICAgZmFpbCgiU2NoZW1hIHNob3VsZCBoYXZlIGZhaWxlZCB0byBjb21waWxlOlxuIiArIGludmFsaWRTY2hlbWFzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChYbWxFeGNlcHRpb24gc3VjY2Vzcykge30KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFBhcnNlIHRoZSB2YWxpZCBzY2hlbWEgZmlsZXMKLSAgICAgICAgc2NoZW1hcyA9IG5ldyBTY2hlbWFEb2N1bWVudFt2YWxpZFNjaGVtYXMubGVuZ3RoXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgdmFsaWRTY2hlbWFzLmxlbmd0aCA7IGkrKykKLSAgICAgICAgICAgIHNjaGVtYXNbaV0gPSBTY2hlbWFEb2N1bWVudC5GYWN0b3J5LnBhcnNlKHZhbGlkU2NoZW1hc1tpXSk7Ci0KLSAgICAgICAgLy8gQ29tcGlsZSB0aGUgdmFsaWQgc2NoZW1hcy4gVGhleSBzaG91bGQgbm90IGZhaWwKLSAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgc2NoZW1hcy5sZW5ndGggOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgWG1sQmVhbnMubG9hZFhzZChuZXcgWG1sT2JqZWN0W117c2NoZW1hc1tpXX0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFhtbEV4Y2VwdGlvbiBmYWlsKSB7Ci0gICAgICAgICAgICAgICAgZmFpbCgiRmFpbGVkIHRvIGNvbXBpbGUgc2NoZW1hOlxuIiArIHZhbGlkU2NoZW1hc1tpXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9DcmVhdGlvblRlc3RzLmphdmEgYi92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvQ3JlYXRpb25UZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzE0Mjk0Li4wMDAwMDAwCi0tLSBhL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9DcmVhdGlvblRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBkcnRjYXNlczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQgY29tLmVhc3lwby5YbWxQdXJjaGFzZU9yZGVyRG9jdW1lbnRCZWFuOwotaW1wb3J0IGNvbS5lYXN5cG8uWG1sUHVyY2hhc2VPcmRlckRvY3VtZW50QmVhbi5QdXJjaGFzZU9yZGVyOwotaW1wb3J0IGNvbS5lYXN5cG8uWG1sTGluZUl0ZW1CZWFuOwotaW1wb3J0IGNvbS5lYXN5cG8uWG1sU2hpcHBlckJlYW47Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotcHVibGljIGNsYXNzIENyZWF0aW9uVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZQotewotICAgIHB1YmxpYyBDcmVhdGlvblRlc3RzKFN0cmluZyBuYW1lKSB7IHN1cGVyKG5hbWUpOyB9Ci0gICAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeyByZXR1cm4gbmV3IFRlc3RTdWl0ZShDcmVhdGlvblRlc3RzLmNsYXNzKTsgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdENyZWF0ZVBvKCkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgWG1sUHVyY2hhc2VPcmRlckRvY3VtZW50QmVhbiBkb2MgPQotICAgICAgICAgICAgWG1sUHVyY2hhc2VPcmRlckRvY3VtZW50QmVhbi5GYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAgIAotICAgICAgICBQdXJjaGFzZU9yZGVyIG9yZGVyID0gZG9jLmFkZE5ld1B1cmNoYXNlT3JkZXIoKTsKLSAgICAgICAgb3JkZXIuYWRkTmV3Q3VzdG9tZXIoKS5zZXROYW1lKCJEYXZpZCBCYXUiKTsKLSAgICAgICAgb3JkZXIuZ2V0Q3VzdG9tZXIoKS5zZXRBZGRyZXNzKCJHbGFkd3luZSwgUEEiKTsKLSAgICAgICAgWG1sTGluZUl0ZW1CZWFuIGxpOwotICAgICAgICBsaSA9IG9yZGVyLmFkZE5ld0xpbmVJdGVtKCk7Ci0gICAgICAgIGxpLnNldERlc2NyaXB0aW9uKCJCdXJuaGFtJ3MgQ2VsZXN0aWFsIEhhbmRib29rLCBWb2wgMSIpOwotICAgICAgICBsaS5zZXRQcmljZShuZXcgQmlnRGVjaW1hbCgiMjEuNzkiKSk7Ci0gICAgICAgIGxpLnNldFF1YW50aXR5KEJpZ0ludGVnZXIudmFsdWVPZigyKSk7Ci0gICAgICAgIGxpLnNldFBlclVuaXRPdW5jZXMobmV3IEJpZ0RlY2ltYWwoIjUiKSk7Ci0gICAgICAgIGxpID0gb3JkZXIuYWRkTmV3TGluZUl0ZW0oKTsKLSAgICAgICAgbGkuc2V0RGVzY3JpcHRpb24oIkJ1cm5oYW0ncyBDZWxlc3RpYWwgSGFuZGJvb2ssIFZvbCAyIik7Ci0gICAgICAgIGxpLnNldFByaWNlKG5ldyBCaWdEZWNpbWFsKCIxOS44OSIpKTsKLSAgICAgICAgbGkuc2V0UXVhbnRpdHkoQmlnSW50ZWdlci52YWx1ZU9mKDIpKTsKLSAgICAgICAgbGkuc2V0UGVyVW5pdE91bmNlcyhuZXcgQmlnRGVjaW1hbCgiNSIpKTsKLSAgICAgICAgbGkgPSBvcmRlci5hZGROZXdMaW5lSXRlbSgpOwotICAgICAgICBsaS5zZXREZXNjcmlwdGlvbigiQnVybmhhbSdzIENlbGVzdGlhbCBIYW5kYm9vaywgVm9sIDMiKTsKLSAgICAgICAgbGkuc2V0UHJpY2UobmV3IEJpZ0RlY2ltYWwoIjE5Ljg5IikpOwotICAgICAgICBsaS5zZXRRdWFudGl0eShCaWdJbnRlZ2VyLnZhbHVlT2YoMSkpOwotICAgICAgICBsaS5zZXRQZXJVbml0T3VuY2VzKG5ldyBCaWdEZWNpbWFsKCI1IikpOwotICAgICAgICBYbWxTaGlwcGVyQmVhbiBzaCA9IG9yZGVyLmFkZE5ld1NoaXBwZXIoKTsKLSAgICAgICAgc2guc2V0TmFtZSgiVVBTIik7Ci0gICAgICAgIHNoLnNldFBlck91bmNlUmF0ZShuZXcgQmlnRGVjaW1hbCgiMC43NCIpKTsKLQotLy8gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihkb2MueG1sVGV4dCgpKTsKLQotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJEYXZpZCBCYXUiLCBvcmRlci5nZXRDdXN0b21lcigpLmdldE5hbWUoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIkdsYWR3eW5lLCBQQSIsIG9yZGVyLmdldEN1c3RvbWVyKCkuZ2V0QWRkcmVzcygpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygzLCBvcmRlci5zaXplT2ZMaW5lSXRlbUFycmF5KCkpOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIkJ1cm5oYW0ncyBDZWxlc3RpYWwgSGFuZGJvb2ssIFZvbCAxIiwgb3JkZXIuZ2V0TGluZUl0ZW1BcnJheSgwKS5nZXREZXNjcmlwdGlvbigpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhuZXcgQmlnRGVjaW1hbCgiMjEuNzkiKSwgb3JkZXIuZ2V0TGluZUl0ZW1BcnJheSgwKS5nZXRQcmljZSgpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhuZXcgQmlnSW50ZWdlcigiMiIpLCBvcmRlci5nZXRMaW5lSXRlbUFycmF5KDApLmdldFF1YW50aXR5KCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKG5ldyBCaWdEZWNpbWFsKCI1IiksIG9yZGVyLmdldExpbmVJdGVtQXJyYXkoMCkuZ2V0UGVyVW5pdE91bmNlcygpKTsKLQotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJCdXJuaGFtJ3MgQ2VsZXN0aWFsIEhhbmRib29rLCBWb2wgMiIsIG9yZGVyLmdldExpbmVJdGVtQXJyYXkoMSkuZ2V0RGVzY3JpcHRpb24oKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMobmV3IEJpZ0RlY2ltYWwoIjE5Ljg5IiksIG9yZGVyLmdldExpbmVJdGVtQXJyYXkoMSkuZ2V0UHJpY2UoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMobmV3IEJpZ0ludGVnZXIoIjIiKSwgb3JkZXIuZ2V0TGluZUl0ZW1BcnJheSgxKS5nZXRRdWFudGl0eSgpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhuZXcgQmlnRGVjaW1hbCgiNSIpLCBvcmRlci5nZXRMaW5lSXRlbUFycmF5KDEpLmdldFBlclVuaXRPdW5jZXMoKSk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiQnVybmhhbSdzIENlbGVzdGlhbCBIYW5kYm9vaywgVm9sIDMiLCBvcmRlci5nZXRMaW5lSXRlbUFycmF5KDIpLmdldERlc2NyaXB0aW9uKCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKG5ldyBCaWdEZWNpbWFsKCIxOS44OSIpLCBvcmRlci5nZXRMaW5lSXRlbUFycmF5KDIpLmdldFByaWNlKCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKG5ldyBCaWdJbnRlZ2VyKCIxIiksIG9yZGVyLmdldExpbmVJdGVtQXJyYXkoMikuZ2V0UXVhbnRpdHkoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMobmV3IEJpZ0RlY2ltYWwoIjUiKSwgb3JkZXIuZ2V0TGluZUl0ZW1BcnJheSgyKS5nZXRQZXJVbml0T3VuY2VzKCkpOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHModHJ1ZSwgb3JkZXIuaXNTZXRTaGlwcGVyKCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJVUFMiLCBvcmRlci5nZXRTaGlwcGVyKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhuZXcgQmlnRGVjaW1hbCgiMC43NCIpLCBvcmRlci5nZXRTaGlwcGVyKCkuZ2V0UGVyT3VuY2VSYXRlKCkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9Eb21UZXN0cy5qYXZhIGIvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL0RvbVRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MTgwZmUuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL0RvbVRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTcgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBkcnRjYXNlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zdG9yZS5Sb290OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlU3lzdGVtOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yLlRva2VuVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvci5YbWxCb29rbWFyazsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJlYW5zOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9uczsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLQotcHVibGljIGNsYXNzIERvbVRlc3RzIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgICBwdWJsaWMgRG9tVGVzdHMoU3RyaW5nIG5hbWUpIHsgc3VwZXIobmFtZSk7IH0KLSAgICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7IHJldHVybiBuZXcgVGVzdFN1aXRlKERvbVRlc3RzLmNsYXNzKTsgfQotCi0gICAgc3RhdGljIFN0cmluZ1tdIF9hcmdzOwotICAgIHN0YXRpYyBTdHJpbmcgX3Rlc3Q7Ci0KLSAgICBwdWJsaWMgc3RhdGljIEZpbGUgZ2V0Q2FzZUZpbGUoU3RyaW5nIHRoZUNhc2UpCi0gICAgewotICAgICAgICByZXR1cm4gVGVzdEVudi54YmVhbkNhc2UoInN0b3JlLyIgKyB0aGVDYXNlKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgWG1sQ3Vyc29yIGxvYWRDYXNlKFN0cmluZyB0aGVDYXNlKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICByZXR1cm4gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoZ2V0Q2FzZUZpbGUodGhlQ2FzZSksIG51bGwpLm5ld0N1cnNvcigpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGRvVGVzdERvbUltcG9ydCAoIFN0cmluZyB4bWwgKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGYgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAgIGYuc2V0TmFtZXNwYWNlQXdhcmUodHJ1ZSk7Ci0gICAgICAgIERvY3VtZW50QnVpbGRlciBwYXJzZXIgPSBmLm5ld0RvY3VtZW50QnVpbGRlcigpOwotCi0gICAgICAgIERvY3VtZW50IGRvYyA9IHBhcnNlci5wYXJzZSggbmV3IElucHV0U291cmNlKCBuZXcgU3RyaW5nUmVhZGVyKCB4bWwgKSApICk7Ci0KLSAgICAgICAgWG1sT2JqZWN0IHggPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSggZG9jICk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHgueG1sVGV4dCgpLmVxdWFscyggeG1sICkgKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgZG9UZXN0RG9tRXhwb3J0ICggU3RyaW5nIHhtbCApCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbE9iamVjdCB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoIFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCB4bWwgKS5uZXdEb21Ob2RlKCkgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHgueG1sVGV4dCgpLmVxdWFscyggeG1sICkgKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgZG9UZXN0ICggU3RyaW5nIHhtbCApCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGRvVGVzdERvbUltcG9ydCggeG1sICk7Ci0gICAgICAgIGRvVGVzdERvbUV4cG9ydCggeG1sICk7Ci0gICAgfQotCi0vLyAgICBwdWJsaWMgdm9pZCB0ZXN0RG9tMiAoICkKLS8vICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0vLyAgICB7Ci0vLyAgICAgICAgRE9NUGFyc2VyIHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTsKLS8vICAgICAgICAKLS8vICAgICAgICBwYXJzZXIuc2V0RmVhdHVyZSggImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy9uYW1lc3BhY2VzIiwgdHJ1ZSApOwotLy8gICAgICAgIAotLy8gICAgICAgIHBhcnNlci5wYXJzZSggbmV3IElucHV0U291cmNlKCBuZXcgU3RyaW5nUmVhZGVyKCAiPGZvbyBhPSd4XG5cbnknPjwvZm9vPiIgKSApICk7Ci0vLwotLy8gICAgICAgIFhtbE9iamVjdCB4ID0gWG1sTG9hZGVyLkZhY3RvcnkucGFyc2UoIHBhcnNlci5nZXREb2N1bWVudCgpICk7Ci0vLwotLy8gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggeC54bWxUZXh0KCkgKTsKLS8vICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0RG9tICggKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBkb1Rlc3QoICI8Zm9vIHhtbG5zPVwieFwiLz4iICk7Ci0gICAgICAgIGRvVGVzdCggIjxmb28geG1sbnM9XCJ4XCIgeG1sbnM6ZT1cInZcIi8+IiApOwotICAgICAgICBkb1Rlc3QoICI8Zm9vPmE8P1g/PmI8L2Zvbz4iICk7Ci0gICAgICAgIGRvVGVzdCggIjxmb28+YTwhLS1YLS0+YjwvZm9vPiIgKTsKLSAgICAgICAgZG9UZXN0KCAiPCEtLVgtLT48Zm9vLz4iICk7Ci0gICAgICAgIGRvVGVzdCggIjxmb28vPiIgKTsKLSAgICAgICAgZG9UZXN0KCAiPGZvbyB4PVwieVwiLz4iICk7Ci0gICAgICAgIGRvVGVzdCggIjxmb28+PGEvPjxiPm1vbzwvYj48L2Zvbz4iICk7Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcgeHggPQotICAgICAgICAgICAgIjwhLS1nZy0tPjw/YSBiPz48Zm9vPnNkc2Q8YS8+c2RzZDxiPm1vbzwvYj5zZDwhLS1hc2FzLS0+c2Q8L2Zvbz48IS0taGgtLT4iOwotICAgICAgICAKLSAgICAgICAgZG9UZXN0KCB4eCApOwotCi0gICAgICAgIFN0cmluZyB4bWwgPQotICAgICAgICAgICAgIjx4bWwtZnJhZ21lbnQ+IiArCi0gICAgICAgICAgICAiZm9vIiArCi0gICAgICAgICAgICAiPC94bWwtZnJhZ21lbnQ+IjsKLQotICAgICAgICBkb1Rlc3REb21FeHBvcnQoIHhtbCApOwotICAgICAgICAKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHhtbCA9Ci0gICAgICAgICAgICAgICAgIjx4bWwtZnJhZ21lbnQgIiArCi0gICAgICAgICAgICAgICAgIiAgZm9vPSdiYXInPiIgKwotICAgICAgICAgICAgICAgICI8L3htbC1mcmFnbWVudD4iOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZG9UZXN0RG9tRXhwb3J0KCB4bWwgKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGZhbHNlICk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKCBFeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIFhtbE9iamVjdCB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoIHh4ICk7Ci0KLSAgICAgICAgWG1sQ3Vyc29yIGMgPSB4Lm5ld0N1cnNvcigpOwotCi0gICAgICAgIGZvciAoIDsgOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIE5vZGUgbiA9IGMubmV3RG9tTm9kZSgpOwotICAgICAgICAgICAgWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoIG4gKTsKLQotICAgICAgICAgICAgaWYgKGMudG9OZXh0VG9rZW4oKS5pc05vbmUoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9FYXN5UG9UZXN0cy5qYXZhIGIvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL0Vhc3lQb1Rlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MjAxZTkuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL0Vhc3lQb1Rlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBkcnRjYXNlczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uOwotaW1wb3J0IGNvbS5lYXN5cG8uWG1sUHVyY2hhc2VPcmRlckRvY3VtZW50QmVhbjsKLWltcG9ydCBjb20uZWFzeXBvLlhtbFB1cmNoYXNlT3JkZXJEb2N1bWVudEJlYW4uUHVyY2hhc2VPcmRlcjsKLQotcHVibGljIGNsYXNzIEVhc3lQb1Rlc3RzIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgICBwdWJsaWMgRWFzeVBvVGVzdHMoU3RyaW5nIG5hbWUpIHsgc3VwZXIobmFtZSk7IH0KLSAgICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7IHJldHVybiBuZXcgVGVzdFN1aXRlKEVhc3lQb1Rlc3RzLmNsYXNzKTsgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdEVhc3lQbygpIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbFB1cmNoYXNlT3JkZXJEb2N1bWVudEJlYW4gZG9jID0gKFhtbFB1cmNoYXNlT3JkZXJEb2N1bWVudEJlYW4pCi0gICAgICAgICAgICBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZShUZXN0RW52LnhiZWFuQ2FzZSgic3RvcmUvZWFzeXBvMS54bWwiKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoZmFsc2UsIGRvYy5pc05pbCgpKTsKLSAgICAgICAgUHVyY2hhc2VPcmRlciBvcmRlciA9IGRvYy5nZXRQdXJjaGFzZU9yZGVyKCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIkRhdmlkIEJhdSIsIG9yZGVyLmdldEN1c3RvbWVyKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiR2xhZHd5bmUsIFBBIiwgb3JkZXIuZ2V0Q3VzdG9tZXIoKS5nZXRBZGRyZXNzKCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDMsIG9yZGVyLnNpemVPZkxpbmVJdGVtQXJyYXkoKSk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiQnVybmhhbSdzIENlbGVzdGlhbCBIYW5kYm9vaywgVm9sIDEiLCBvcmRlci5nZXRMaW5lSXRlbUFycmF5KDApLmdldERlc2NyaXB0aW9uKCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKG5ldyBCaWdEZWNpbWFsKCIyMS43OSIpLCBvcmRlci5nZXRMaW5lSXRlbUFycmF5KDApLmdldFByaWNlKCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKG5ldyBCaWdJbnRlZ2VyKCIyIiksIG9yZGVyLmdldExpbmVJdGVtQXJyYXkoMCkuZ2V0UXVhbnRpdHkoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMobmV3IEJpZ0RlY2ltYWwoIjUiKSwgb3JkZXIuZ2V0TGluZUl0ZW1BcnJheSgwKS5nZXRQZXJVbml0T3VuY2VzKCkpOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIkJ1cm5oYW0ncyBDZWxlc3RpYWwgSGFuZGJvb2ssIFZvbCAyIiwgb3JkZXIuZ2V0TGluZUl0ZW1BcnJheSgxKS5nZXREZXNjcmlwdGlvbigpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhuZXcgQmlnRGVjaW1hbCgiMTkuODkiKSwgb3JkZXIuZ2V0TGluZUl0ZW1BcnJheSgxKS5nZXRQcmljZSgpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhuZXcgQmlnSW50ZWdlcigiMiIpLCBvcmRlci5nZXRMaW5lSXRlbUFycmF5KDEpLmdldFF1YW50aXR5KCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKG5ldyBCaWdEZWNpbWFsKCI1IiksIG9yZGVyLmdldExpbmVJdGVtQXJyYXkoMSkuZ2V0UGVyVW5pdE91bmNlcygpKTsKLQotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJCdXJuaGFtJ3MgQ2VsZXN0aWFsIEhhbmRib29rLCBWb2wgMyIsIG9yZGVyLmdldExpbmVJdGVtQXJyYXkoMikuZ2V0RGVzY3JpcHRpb24oKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMobmV3IEJpZ0RlY2ltYWwoIjE5Ljg5IiksIG9yZGVyLmdldExpbmVJdGVtQXJyYXkoMikuZ2V0UHJpY2UoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMobmV3IEJpZ0ludGVnZXIoIjEiKSwgb3JkZXIuZ2V0TGluZUl0ZW1BcnJheSgyKS5nZXRRdWFudGl0eSgpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhuZXcgQmlnRGVjaW1hbCgiNSIpLCBvcmRlci5nZXRMaW5lSXRlbUFycmF5KDIpLmdldFBlclVuaXRPdW5jZXMoKSk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyh0cnVlLCBvcmRlci5pc1NldFNoaXBwZXIoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIlVQUyIsIG9yZGVyLmdldFNoaXBwZXIoKS5nZXROYW1lKCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKG5ldyBCaWdEZWNpbWFsKCIwLjc0IiksIG9yZGVyLmdldFNoaXBwZXIoKS5nZXRQZXJPdW5jZVJhdGUoKSk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygzLCBvcmRlci5zaXplT2ZMaW5lSXRlbUFycmF5KCkpOwotICAgIH0KLSAgICAKLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlQXV0b1ZhbGlkYWl0b24oKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBYbWxQdXJjaGFzZU9yZGVyRG9jdW1lbnRCZWFuLkZhY3RvcnkucGFyc2UoCi0gICAgICAgICAgICAiPHB1cmNoYXNlLW9yZGVyIHhtbG5zPSdodHRwOi8vb3BlbnVyaS5vcmcvZWFzeXBvJy8+IiApOwotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxQdXJjaGFzZU9yZGVyRG9jdW1lbnRCZWFuLkZhY3RvcnkucGFyc2UoCi0gICAgICAgICAgICAgICAgIjxwdXJjaGFzZS1vcmRlIHhtbG5zPSdodHRwOi8vb3BlbnVyaS5vcmcvZWFzeXBvJy8+IiApOwotCi0gICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggZmFsc2UgKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoIFhtbEV4Y2VwdGlvbiBlICkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFhtbFB1cmNoYXNlT3JkZXJEb2N1bWVudEJlYW4uRmFjdG9yeS5wYXJzZSgKLSAgICAgICAgICAgICAgICAiPHB1cmNoYXNlLW9yZGVyIHhtbG5zPSdodHRwOi8vb3BlbnVyaS5vcmcvZWFzeXAnLz4iICk7Ci0KLSAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBmYWxzZSApOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoICggWG1sRXhjZXB0aW9uIGUgKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxQdXJjaGFzZU9yZGVyRG9jdW1lbnRCZWFuLkZhY3RvcnkucGFyc2UoCi0gICAgICAgICAgICAgICAgIjxmOmZyYWdtZW50IHhtbG5zOmY9J2h0dHA6Ly93d3cub3BlbnVyaS5vcmcvZnJhZ21lbnQnLz4iICk7Ci0KLSAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBmYWxzZSApOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoICggWG1sRXhjZXB0aW9uIGUgKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxQdXJjaGFzZU9yZGVyRG9jdW1lbnRCZWFuLkZhY3RvcnkucGFyc2UoCi0gICAgICAgICAgICAgICAgIjxmOmZyYWdtZW50IHhtbG5zOmY9J2h0dHA6Ly93d3cub3BlbnVyaS5vcmcvZnJhZ21lbnQnPjxhLz48L2Y6ZnJhZ21lbnQ+IiApOwotCi0gICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggZmFsc2UgKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoIFhtbEV4Y2VwdGlvbiBlICkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgWG1sUHVyY2hhc2VPcmRlckRvY3VtZW50QmVhbi5GYWN0b3J5LnBhcnNlKAotICAgICAgICAgICAgICAgICI8ZjpmcmFnbWVudCB4bWxuczpmPSdodHRwOi8vd3d3Lm9wZW51cmkub3JnL2ZyYWdtZW50Jz48YS8+PGEvPjwvZjpmcmFnbWVudD4iICk7Ci0KLSAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBmYWxzZSApOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoICggWG1sRXhjZXB0aW9uIGUgKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvRW51bVRlc3RzLmphdmEgYi92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvRW51bVRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1OWU3OTUuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL0VudW1UZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBkcnRjYXNlczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLm9wZW51cmkuZW51bXRlc3QuU3RhdHVzcmVwb3J0RG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLm9wZW51cmkuZW51bXRlc3QuUXVhbnRpdHk7Ci1pbXBvcnQgb3JnLm9wZW51cmkuZW51bXRlc3QuRGF0YTsKLQotcHVibGljIGNsYXNzIEVudW1UZXN0cyBleHRlbmRzIFRlc3RDYXNlCi17Ci0gICAgcHVibGljIEVudW1UZXN0cyhTdHJpbmcgbmFtZSkgeyBzdXBlcihuYW1lKTsgfQotICAgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsgcmV0dXJuIG5ldyBUZXN0U3VpdGUoRW51bVRlc3RzLmNsYXNzKTsgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RSZXBvcnQxKCkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgU3RhdHVzcmVwb3J0RG9jdW1lbnQgZG9jID0gKFN0YXR1c3JlcG9ydERvY3VtZW50KQotICAgICAgICAgICAgICAgICAgICBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZShUZXN0RW52LnhiZWFuQ2FzZSgiZW51bXRlc3QvcmVwb3J0MS54bWwiKSk7Ci0KLSAgICAgICAgUXVhbnRpdHkuRW51bVtdIGNvbnRlbnRzID0gbmV3IFF1YW50aXR5LkVudW1bXQotICAgICAgICB7Ci0gICAgICAgICAgICBRdWFudGl0eS5BTEwsCi0gICAgICAgICAgICBRdWFudGl0eS5BTEwsCi0gICAgICAgICAgICBRdWFudGl0eS5GRVcsCi0gICAgICAgICAgICBRdWFudGl0eS5BTEwsCi0gICAgICAgICAgICBRdWFudGl0eS5NT1NULAotICAgICAgICAgICAgUXVhbnRpdHkuTk9ORSwKLSAgICAgICAgICAgIFF1YW50aXR5Lk5PTkUsCi0gICAgICAgICAgICBRdWFudGl0eS5OT05FLAotICAgICAgICB9OwotICAgICAgICBEYXRhW10gZGF0YSA9IGRvYy5nZXRTdGF0dXNyZXBvcnQoKS5nZXRTdGF0dXNBcnJheSgpOwotICAgICAgICBpbnQgdCA9IDA7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhjb250ZW50c1t0KytdLCBkYXRhW2ldLmVudW1WYWx1ZSgpKTsKLSAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiVGFyZ2V0OiAiICsgZGF0YVtpXS5nZXRUYXJnZXQoKSArICIsIHZhbHVlOiAiICsgZGF0YVtpXS5lbnVtVmFsdWUoKSk7Ci0gICAgICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKGNvbnRlbnRzW3QrK10sIGRhdGFbaV0uZ2V0VGFyZ2V0KCkpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL0dEYXRlVGVzdHMuamF2YSBiL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9HRGF0ZVRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiZjMwZmIuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL0dEYXRlVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3MyArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIGRydGNhc2VzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlQnVpbGRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvbkJ1aWxkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDYWxlbmRhcjsKLQotaW1wb3J0IGphdmEudXRpbC5HcmVnb3JpYW5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci0KLXB1YmxpYyBjbGFzcyBHRGF0ZVRlc3RzIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgICBwdWJsaWMgR0RhdGVUZXN0cyhTdHJpbmcgbmFtZSkgeyBzdXBlcihuYW1lKTsgfQotICAgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsgcmV0dXJuIG5ldyBUZXN0U3VpdGUoR0RhdGVUZXN0cy5jbGFzcyk7IH0KLQotICAgIHN0YXRpYyBTdHJpbmdbXSB2YWxpZER1cmF0aW9ucyA9Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIlBUMFMiLAotICAgICAgICAgICAgICAgICJQMVkiLAotICAgICAgICAgICAgICAgICJQMU0iLAotICAgICAgICAgICAgICAgICJQMUQiLAotICAgICAgICAgICAgICAgICJQMlkiLAotICAgICAgICAgICAgICAgICJQMk0iLAotICAgICAgICAgICAgICAgICJQMkQiLAotICAgICAgICAgICAgICAgICJQVDFIIiwKLSAgICAgICAgICAgICAgICAiUFQxTSIsCi0gICAgICAgICAgICAgICAgIlBUMVMiLAotICAgICAgICAgICAgICAgICJQVDM2MDBTIiwKLSAgICAgICAgICAgICAgICAiUDFZMU0xRFQxSDFNMVMiLAotICAgICAgICAgICAgICAgICJQMVkxTTFEVDFIMU0xLjFTIiwKLSAgICAgICAgICAgICAgICAiUDFZMzY1RCIsCi0gICAgICAgICAgICAgICAgIlAxWTM2NkQiLAotICAgICAgICAgICAgICAgICJQVDAuMVMiLAotICAgICAgICAgICAgICAgICJQMVktMzY0RCIsCi0gICAgICAgICAgICAgICAgIlAxWS0zNjVEIiwKLSAgICAgICAgICAgICAgICAiUDFZLTM2NkQiLAotICAgICAgICAgICAgICAgICJQMVktMzY3RCIsCi0gICAgICAgICAgICAgICAgIlAxWS0xMk0iLAotICAgICAgICAgICAgICAgICJQMU0yOUQiLAotICAgICAgICAgICAgICAgICJQMU0tMjdEIiwKLSAgICAgICAgICAgICAgICAiUDFNLTI4RCIsCi0gICAgICAgICAgICAgICAgIlAxTS0yOUQiLAotICAgICAgICAgICAgICAgICJQMU0tMzFEIiwKLSAgICAgICAgICAgICAgICAiUDFNLTMyRCIsCi0gICAgICAgICAgICAgICAgIlAxTVQtNjYwSCIsCi0gICAgICAgICAgICAgICAgIlAxTVQtNjcwSCIsCi0gICAgICAgICAgICAgICAgIlAxTVQtNjgwSCIsCi0gICAgICAgICAgICAgICAgIlAxTVQtNjkwSCIsCi0gICAgICAgICAgICAgICAgIlAxTVQtNzAwSCIsCi0gICAgICAgICAgICAgICAgIlAxTVQtNzEwSCIsCi0gICAgICAgICAgICAgICAgIlAxTVQtNzIwSCIsCi0gICAgICAgICAgICAgICAgIlAxTVQtNzMwSCIsCi0gICAgICAgICAgICAgICAgIlAxTVQtNzQwSCIsCi0gICAgICAgICAgICAgICAgIlBUMC4xNDE1OTI2UyIsCi0gICAgICAgICAgICAgICAgIlBUNTIzMzEzMlMiLAotICAgICAgICAgICAgICAgICJQVDE0MjMzMk0iLAotICAgICAgICAgICAgICAgICJQVDk4MDIzSCIsCi0KLSAgICAgICAgICAgICAgICAiLVBUMFMiLAotICAgICAgICAgICAgICAgICItUDFZIiwKLSAgICAgICAgICAgICAgICAiLVAxTSIsCi0gICAgICAgICAgICAgICAgIi1QMUQiLAotICAgICAgICAgICAgICAgICItUFQxSCIsCi0gICAgICAgICAgICAgICAgIi1QVDFNIiwKLSAgICAgICAgICAgICAgICAiLVBUMVMiLAotICAgICAgICAgICAgICAgICItUDFZMU0xRFQxSDFNMVMiLAotICAgICAgICAgICAgICAgICItUDFZMU0xRFQxSDFNMS4xUyIsCi0gICAgICAgICAgICAgICAgIi1QMjdEIiwKLSAgICAgICAgICAgICAgICAiLVAyOEQiLAotICAgICAgICAgICAgICAgICItUDI5RCIsCi0gICAgICAgICAgICAgICAgIi1QMzBEIiwKLSAgICAgICAgICAgICAgICAiLVAzMUQiLAotICAgICAgICAgICAgICAgICItUDM2NEQiLAotICAgICAgICAgICAgICAgICItUDM2NUQiLAotICAgICAgICAgICAgICAgICItUDM2NkQiLAotICAgICAgICAgICAgICAgICItUFQwLjFTIiwKLSAgICAgICAgICAgICAgICAiLVBUMC4xNDE1OTI2UyIsCi0gICAgICAgICAgICAgICAgIi1QVDUyMzMxMzJTIiwKLSAgICAgICAgICAgICAgICAiLVBUMTQyMzMyTSIsCi0gICAgICAgICAgICAgICAgIi1QVDk4MDIzSCIsCi0KLSAgICAgICAgICAgIH07Ci0KLSAgICBzdGF0aWMgU3RyaW5nW10gaW52YWxpZERhdGVzID0KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAiKzE0OjAxIiwgLy8gdHoKLSAgICAgICAgICAgICAgICAiLTE0OjAxIiwgLy8gdHoKLSAgICAgICAgICAgICAgICAiKzE1OjAwIiwgLy8gdHoKLSAgICAgICAgICAgICAgICAiLTE1OjAwIiwgLy8gdHoKLSAgICAgICAgICAgICAgICAiWCIsCi0gICAgICAgICAgICAgICAgIiwiLAotICAgICAgICAgICAgICAgICJUIiwKLSAgICAgICAgICAgICAgICAiKyIsCi0gICAgICAgICAgICAgICAgIi0iLAotICAgICAgICAgICAgICAgICI6IiwKLSAgICAgICAgICAgICAgICAiMCIsCi0gICAgICAgICAgICAgICAgIk1hcmNoIDIiLAotICAgICAgICAgICAgICAgICJUMDA6MDA6MDBaIiwgLy8gVCBub3QgYWxsb3dlZAotICAgICAgICAgICAgICAgICItMDA6MDA6MDBaIiwgLy8gLSBub3QgYWxsb3dlZAotICAgICAgICAgICAgICAgICI5Ni0wMi0yOFQwMDowMDowMFoiLCAvLyB5ZWFyIHdpZHRoCi0gICAgICAgICAgICAgICAgIjEwMC0wMi0yOFQwMDowMDowMFoiLCAvLyB5ZWFyIHdpZHRoCi0gICAgICAgICAgICAgICAgIjE5MDAtMi0yOFQwMDowMDowMFoiLCAvLyBtb250aCB3aWR0aAotICAgICAgICAgICAgICAgICIxOTAwLTAyLThUMDA6MDA6MDBaIiwgLy8gZGF5IHdpZHRoCi0gICAgICAgICAgICAgICAgIjE5MDAtMDItMDhUMDowMDowMFoiLCAvLyBob3VyIHdpZHRoCi0gICAgICAgICAgICAgICAgIjE5MDAtMDItMDhUMDA6MDowMFoiLCAvLyBob3VyIHdpZHRoCi0gICAgICAgICAgICAgICAgIjE5MDAtMDItMDhUMDA6MDA6MFoiLCAvLyBob3VyIHdpZHRoCi0gICAgICAgICAgICAgICAgIjE5MDAtMDItMDhUMDA6MDBaIiwgLy8gdGltZSBpbmNvbXBsZXRlCi0gICAgICAgICAgICAgICAgIjE5MDAtMDItMDggVDAwOjAwOjAwWiIsIC8vIHNwYWNlCi0gICAgICAgICAgICAgICAgIjE5MDAtMDItMDhUIDAwOjAwOjAwWiIsIC8vIHNwYWNlCi0gICAgICAgICAgICAgICAgIjE5MDAtMDItMDhUMDA6MDA6MDAgWiIsIC8vIHNwYWNlCi0gICAgICAgICAgICAgICAgIjE5MDAtMDItMjlUMDBaIiwgLy8gdGltZSBpbmNvbXBsZXRlCi0gICAgICAgICAgICAgICAgIjAwOjAwIiwgLy8gdGltZSBpbmNvbXBsZXRlCi0gICAgICAgICAgICAgICAgIjAwIiwgLy8gaW5jb21wbGV0ZQotICAgICAgICAgICAgICAgICIyMTAwLTAyLTI5IiwgLy8gbm90IGxlYXAKLSAgICAgICAgICAgICAgICAiLTk5OTk5OTktMDItMjhUMDA6MDA6MDBaIiwgLy8gdG9vIGxvbmcgYWdvCi0gICAgICAgICAgICAgICAgIjk5OTk5OTktMDItMjhUMDA6MDA6MDBaIiwgLy8gdG9vIGxvbmcgZnJvbSBub3cKLSAgICAgICAgICAgICAgICAiOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OS0wMi0yOFQwMDowMDowMFoiLCAvLyBvdmVyZmxvdz8KLSAgICAgICAgICAgICAgICAiMTk5Ni0wMC0yOFQwMDowMDowMFoiLCAvLyBtb250aAotICAgICAgICAgICAgICAgICIxOTk2LTEzLTI4VDAwOjAwOjAwWiIsIC8vIG1vbnRoCi0gICAgICAgICAgICAgICAgIjE5OTYtMDItMDBUMDA6MDA6MDBaIiwgLy8gZGF5Ci0gICAgICAgICAgICAgICAgIjIwMDAtMDItMzBUMDA6MDA6MDBaIiwgLy8gZGF5Ci0gICAgICAgICAgICAgICAgIjE5OTYtMDItMjlUMjQ6MDA6MDBaIiwgLy8gaHIKLSAgICAgICAgICAgICAgICAiMTk5Ni0wMi0yOVQwMDo2MDowMFoiLCAvLyBtaW4KLSAgICAgICAgICAgICAgICAiMTk5Ni0wMi0yOVQwMDowMDo2MFoiLCAvLyBzZWMKLSAgICAgICAgICAgICAgICAiMTk5Ni0wMi0yOVQwMDowMDowMCsxNDowMSIsIC8vIHR6Ci0gICAgICAgICAgICAgICAgIjE5OTYtMDItMjlUMDA6MDA6MDAtMTQ6MDEiLCAvLyB0egotICAgICAgICAgICAgICAgICIxOTk2LTAyLTI5VDAwOjAwOjAwKzE1OjAwIiwgLy8gdHoKLSAgICAgICAgICAgICAgICAiMTk5Ni0wMi0yOVQwMDowMDowMC0xNTowMCIsIC8vIHR6Ci0gICAgICAgICAgICAgICAgIjE5OTYtMDAtMjkiLCAvLyBtb250aAotICAgICAgICAgICAgICAgICIxOTk2LTEzLTI5IiwgLy8gbW9udGgKLSAgICAgICAgICAgICAgICAiMTk5Ni0wMi0wMCIsIC8vIGRheQotICAgICAgICAgICAgICAgICIyMDAwLTAyLTMwIiwgLy8gZGF5Ci0gICAgICAgICAgICAgICAgIi0tMDAiLCAvLyBtb250aAotICAgICAgICAgICAgICAgICItLTEzIiwgLy8gbW9udGgKLSAgICAgICAgICAgICAgICAiLS0wMC0wMSIsIC8vIG1vbnRoCi0gICAgICAgICAgICAgICAgIi0tMTMtMDEiLCAvLyBtb250aAotICAgICAgICAgICAgICAgICItLTAyLTAwIiwgLy8gZGF5Ci0gICAgICAgICAgICAgICAgIi0tMDItMzAiLCAvLyBkYXkKLSAgICAgICAgICAgICAgICAiLS0wMS0zMiIsIC8vIGRheQotICAgICAgICAgICAgICAgICItLTExLTMxIiwgLy8gZGF5Ci0gICAgICAgICAgICAgICAgIi0tLTAwIiwgLy8gZGF5Ci0gICAgICAgICAgICAgICAgIi0tLTMyIiwgLy8gZGF5Ci0gICAgICAgICAgICAgICAgIjI0OjAwOjAwWiIsIC8vIGhyCi0gICAgICAgICAgICAgICAgIjAwOjYwOjAwWiIsIC8vIG1pbgotICAgICAgICAgICAgICAgICIwMDowMDo2MFoiLCAvLyBzZWMKLSAgICAgICAgICAgICAgICAiMDA6MDA6MDArMTQ6MDEiLCAvLyB0egotICAgICAgICAgICAgICAgICIwMDowMDowMC0xNDowMSIsIC8vIHR6Ci0gICAgICAgICAgICAgICAgIjAwOjAwOjAwKzE1OjAwIiwgLy8gdHoKLSAgICAgICAgICAgICAgICAiMDA6MDA6MDAtMTU6MDAiLCAvLyB0egotICAgICAgICAgICAgfTsKLQotICAgIHN0YXRpYyBTdHJpbmdbXSB2YWxpZERhdGVzID0KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAiIiwKLSAgICAgICAgICAgICAgICAiWiIsIC8vIHRpbWV6b25lIG9ubHkKLSAgICAgICAgICAgICAgICAiLTE0OjAwIiwgLy8gdGltZXpvbmUgb25seQotICAgICAgICAgICAgICAgICI5OTk5OTktMTItMzFUMjM6NTk6NTkuOTk5WiIsCi0gICAgICAgICAgICAgICAgIjE5NzAtMTItMzFUMjM6NTk6NTkuOTkwKzE0OjAwIiwKLSAgICAgICAgICAgICAgICAiMTk5Ni0wMi0yOVQwMDowMDowMFoiLCAvLyBsZWFwCi0gICAgICAgICAgICAgICAgIjIwMDAtMDItMjlUMDA6MDA6MDBaIiwgLy8gbGVhcAotICAgICAgICAgICAgICAgICIyMDA0LTAyLTI5VDAwOjAwOjAwWiIsIC8vIGxlYXAKLSAgICAgICAgICAgICAgICAiMjAwOC0wMi0yOVQwMDowMDowMFoiLCAvLyBsZWFwCi0gICAgICAgICAgICAgICAgIjIwMTItMDItMjlUMDA6MDA6MDBaIiwgLy8gbGVhcAotICAgICAgICAgICAgICAgICIxOTAwLTAyLTI4VDAwOjAwOjAwWiIsIC8vIG5vdCBsZWFwCi0gICAgICAgICAgICAgICAgIjIxMDAtMDItMjhUMDA6MDA6MDBaIiwgLy8gbm90IGxlYXAKLSAgICAgICAgICAgICAgICAiMTkwMC0wMy0yOFQwMDowMDowMFoiLCAvLyBub3QgbGVhcAotICAgICAgICAgICAgICAgICItNDcxMi0wMS0wMVQwMDowMDowMFoiLAotICAgICAgICAgICAgICAgICIxOTk5LTAxLTAxVDAwOjAwOjAwKzAxOjAwIiwKLSAgICAgICAgICAgICAgICAiMjAwMS0xMi0zMVQyMzo1OTo1OS4wMTAiLAotICAgICAgICAgICAgICAgICIyMDAxLTEyLTMxVDIzOjU5OjU5Ljk5OTkwMTAwMCIsCi0gICAgICAgICAgICAgICAgIjE5OTktMTItMzFUMjM6NTk6NTkuMTIzNDU2Nzg5MC0xNDowMCIsCi0gICAgICAgICAgICAgICAgIjE5OTItMTItMzFUMjM6NTk6NTkuMDEtMTQ6MDAiLAotICAgICAgICAgICAgICAgICIxOTY1LTEyLTMxVDIzOjU5OjU5LjAwMFoiLAotICAgICAgICAgICAgICAgICIwMDAwLTEyLTMxVDA0OjM1OjIyLjQ1NiIsCi0gICAgICAgICAgICAgICAgIjE2OTYtMDktMDFUMDA6MDA6MDBaIiwKLSAgICAgICAgICAgICAgICAiMTY5Ny0wMi0wMVQwMDowMDowMFoiLAotICAgICAgICAgICAgICAgICIxOTAzLTAzLTAxVDAwOjAwOjAwWiIsCi0gICAgICAgICAgICAgICAgIjE5MDMtMDctMDFUMDA6MDA6MDBaIiwKLSAgICAgICAgICAgICAgICAiMTY5Ni0wOS0wMVQwMDowMDowMCswMDowMCIsCi0gICAgICAgICAgICAgICAgIjE2OTctMDItMDFUMDA6MDA6MDAtMDA6MDAiLAotICAgICAgICAgICAgICAgICIyMDAyIiwKLSAgICAgICAgICAgICAgICAiLTAwMDEiLAotICAgICAgICAgICAgICAgICItLTEyIiwKLSAgICAgICAgICAgICAgICAiLTAwMDEtMTEiLAotICAgICAgICAgICAgICAgICIyMDAyLTAxIiwKLSAgICAgICAgICAgICAgICAiLS0tMzEiLAotICAgICAgICAgICAgICAgICIxNTU0LS0zMSIsCi0gICAgICAgICAgICAgICAgIi0wMDA0LS0zMSIsCi0gICAgICAgICAgICAgICAgIi0tMDItMjkiLAotICAgICAgICAgICAgICAgICItLTEyLTMxIiwKLSAgICAgICAgICAgICAgICAiMjAwMi0wNC0xOCIsCi0gICAgICAgICAgICAgICAgIi0wNDIzLTEyLTMxIiwKLSAgICAgICAgICAgICAgICAiMjM6NTk6NTkiLAotICAgICAgICAgICAgICAgICIwMDowMDowMCIsCi0gICAgICAgICAgICAgICAgIjIwMTBUMjM6NTk6NTkiLAotICAgICAgICAgICAgICAgICItMDAwMVQwMDowMDowMCIsCi0gICAgICAgICAgICAgICAgIi0tMTJUMjM6NTk6NTkiLAotICAgICAgICAgICAgICAgICItMDAwMS0xMVQwMDowMDowMCIsCi0gICAgICAgICAgICAgICAgIjIwMTEtMDFUMjM6NTk6NTkiLAotICAgICAgICAgICAgICAgICItLS0zMVQwMDowMDowMCIsCi0gICAgICAgICAgICAgICAgIjIwMDItLTMxVDIzOjU5OjU5IiwKLSAgICAgICAgICAgICAgICAiLTAwMDQtLTMxVDAwOjAwOjAwIiwKLSAgICAgICAgICAgICAgICAiMjAwMi0wMi0xOFQyMzo1OTo1OSIsCi0gICAgICAgICAgICAgICAgIi0wNDIzLTEyLTMxVDAwOjAwOjAwIiwKLSAgICAgICAgICAgICAgICAiMjAwMloiLAotICAgICAgICAgICAgICAgICItMDAwMSswMTozMCIsCi0gICAgICAgICAgICAgICAgIi0tMTItMTQ6MDAiLAotICAgICAgICAgICAgICAgICItMDAwMS0xMVoiLAotICAgICAgICAgICAgICAgICIxOTcwLTEyLTAxOjAwIiwKLSAgICAgICAgICAgICAgICAiLS0tMzErMDE6MzAiLAotICAgICAgICAgICAgICAgICIyMDAyLS0zMVoiLAotICAgICAgICAgICAgICAgICItLTAzLTMxLTAzOjAwIiwKLSAgICAgICAgICAgICAgICAiLS0wNC0zMCswNTowMCIsCi0gICAgICAgICAgICAgICAgIi0wMDA0LS0zMS0wMTowMCIsCi0gICAgICAgICAgICAgICAgIjIwMDItMDQtMTgtMTQ6MDAiLAotICAgICAgICAgICAgICAgICItMDQyMy0xMi0zMVoiLAotICAgICAgICAgICAgICAgICIyMzo1OTo1OS0wMTowMCIsCi0gICAgICAgICAgICAgICAgIjAwOjAwOjAwWiIsCi0gICAgICAgICAgICAgICAgIjAwOjAwOjAwKzAxOjMwIiwKLSAgICAgICAgICAgICAgICAiMTc3NlQyMzo1OTo1OS0xNDowMCIsCi0gICAgICAgICAgICAgICAgIi0wMDAxVDAwOjAwOjAwWiIsCi0gICAgICAgICAgICAgICAgIi0tMTJUMjM6NTk6NTkrMDE6MzAiLAotICAgICAgICAgICAgICAgICItMDAwMS0xMVQwMDowMDowMC0wMTowMCIsCi0gICAgICAgICAgICAgICAgIjIwMDItMDJUMjM6NTk6NTlaIiwKLSAgICAgICAgICAgICAgICAiLS0tMzFUMDA6MDA6MDAtMTQ6MDAiLAotICAgICAgICAgICAgICAgICIyMDAyLS0zMVQyMzo1OTo1OS0wMTowMCIsCi0gICAgICAgICAgICAgICAgIi0wMDA0LS0zMVQwMDowMDowMCswMTozMCIsCi0gICAgICAgICAgICAgICAgIjIwMDItMDQtMThUMjM6NTk6NTlaIiwKLSAgICAgICAgICAgICAgICAiLTA0MjMtMTItMzFUMDA6MDA6MDAtMDU6MDAiLAotICAgICAgICAgICAgfTsKLQotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaGFzVGltZShHRHVyYXRpb24gZ2QpCi0gICAgewotICAgICAgICByZXR1cm4gZ2QuZ2V0SG91cigpICE9IDAgfHwgZ2QuZ2V0TWludXRlKCkgIT0gMCB8fCBnZC5nZXRTZWNvbmQoKSAhPSAwIHx8IGdkLmdldEZyYWN0aW9uKCkuc2lnbnVtKCkgIT0gMDsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RHcmVnb3JpYW5DYWxlbmRhcigpCi0gICAgewotICAgICAgICAvLyB0aGlzIGlzIGEgY2hlY2sgb2YgRFNUIG9mZnNldHMKLSAgICAgICAgRGF0ZSBkYXRlID0gbmV3IEdEYXRlKCIyMDAyLTA0LTE4VDIzOjU5OjU5WiIpLmdldERhdGUoKTsKLSAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgZ2NhbCA9IG5ldyBYbWxDYWxlbmRhcihkYXRlKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhkYXRlLCBnY2FsLmdldFRpbWUoKSk7Ci0KLSAgICAgICAgLy8gbm93IGNoZWNrIG91dCBzb21lIHRoaW5ncwotICAgICAgICBHRGF0ZSBnZCA9IG5ldyBHRGF0ZSgiMjAwMS0xMi0zMVQwNzowMDo1OS4wMTAiKTsKLSAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgZ2MgPSBnZC5nZXRDYWxlbmRhcigpOwotICAgICAgICBEYXRlIGdkZCA9IGdkLmdldERhdGUoKTsKLSAgICAgICAgRGF0ZSBnY2QgPSBnYy5nZXRUaW1lKCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoZ2RkLCBnY2QpOwotICAgICAgICAKLSAgICAgICAgLy8gc2V0IHVwIDIvMjksIGFuZCByZWFkIG91dCBGZWIgMjkgaW4gdGhlIHllYXIgMSBCQy4KLSAgICAgICAgQ2FsZW5kYXIgZ3JlZ2NhbCA9IG5ldyBHRGF0ZSgiLS0wMi0yOSIpLmdldENhbGVuZGFyKCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMjksIGdyZWdjYWwuZ2V0KENhbGVuZGFyLkRBWV9PRl9NT05USCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIgLSAxLCBncmVnY2FsLmdldChDYWxlbmRhci5NT05USCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDEsIGdyZWdjYWwuZ2V0KENhbGVuZGFyLllFQVIpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygwLCBncmVnY2FsLmdldChDYWxlbmRhci5FUkEpKTsKLSAgICAgICAgLy8gcmVwZWF0IHNvbWUgdGVzdHMgdG8gbWFrZSBzdXJlIGl0J3Mgc3RhYmxlLgotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDI5LCBncmVnY2FsLmdldChDYWxlbmRhci5EQVlfT0ZfTU9OVEgpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyIC0gMSwgZ3JlZ2NhbC5nZXQoQ2FsZW5kYXIuTU9OVEgpKTsKLQotICAgICAgICAvLyBub3cgdHJ5IHNvbWUgc2V0dGVycwotICAgICAgICBncmVnY2FsID0gbmV3IEdEYXRlKCItLTAyLTI5IikuZ2V0Q2FsZW5kYXIoKTsKLSAgICAgICAgZ3JlZ2NhbC5zZXQoQ2FsZW5kYXIuTU9OVEgsIDEwKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiLS0xMS0yOSIsIGdyZWdjYWwudG9TdHJpbmcoKSk7Ci0gICAgICAgIC8vIHJlcGVhdCB0byBlbnN1cmUgaXQncyBzdGFibGUuCi0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIi0tMTEtMjkiLCBncmVnY2FsLnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0VmFsaWREdXJhdGlvbigpCi0gICAgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbGlkRHVyYXRpb25zLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBHRHVyYXRpb24gZ2QgPSBudWxsOwotICAgICAgICAgICAgU3RyaW5nIHN0ciA9IHZhbGlkRHVyYXRpb25zW2ldOwotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2QgPSBuZXcgR0R1cmF0aW9uKHN0cik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIlByb2JsZW0gd2l0aCAiICsgc3RyICsgIjogIiArIGUuZ2V0TWVzc2FnZSgpLCBmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoc3RyLCBnZC50b1N0cmluZygpKTsKLQotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB2YWxpZER1cmF0aW9ucy5sZW5ndGg7IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBHRHVyYXRpb24gZ2QyID0gbnVsbDsKLSAgICAgICAgICAgICAgICBTdHJpbmcgc3RyMiA9IHZhbGlkRHVyYXRpb25zW2pdOwotICAgICAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZ2QyID0gbmV3IEdEdXJhdGlvbihzdHIyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIlByb2JsZW0gd2l0aCAiICsgc3RyMiArICI6ICIgKyBlLmdldE1lc3NhZ2UoKSwgZmFsc2UpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIHN1YnRyYWN0aW5nIHR3byB3YXlzIHdvcmtzCi0gICAgICAgICAgICAgICAgR0R1cmF0aW9uIGRpZmYgPSBnZC5zdWJ0cmFjdChnZDIpOwotICAgICAgICAgICAgICAgIEdEdXJhdGlvbkJ1aWxkZXIgZ2RiID0gbmV3IEdEdXJhdGlvbkJ1aWxkZXIoZ2QyKTsKLSAgICAgICAgICAgICAgICBnZGIuc2V0U2lnbigtZ2RiLmdldFNpZ24oKSk7Ci0gICAgICAgICAgICAgICAgZ2RiLmFkZEdEdXJhdGlvbihnZCk7Ci0gICAgICAgICAgICAgICAgR0R1cmF0aW9uIHN1bTIgPSBnZGIudG9HRHVyYXRpb24oKTsKLSAgICAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIGRpZmYuY29tcGFyZVRvR0R1cmF0aW9uKHN1bTIpKTsKLSAgICAgICAgICAgICAgICBnZGIubm9ybWFsaXplKCk7Ci0gICAgICAgICAgICAgICAgR0R1cmF0aW9uQnVpbGRlciBnZGIxID0gbmV3IEdEdXJhdGlvbkJ1aWxkZXIoZGlmZik7Ci0gICAgICAgICAgICAgICAgZ2RiMS5ub3JtYWxpemUoKTsKLSAgICAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJQcm9ibGVtOiAiICsgZ2QgKyAiIGFuZCAiICsgZ2QyLCBnZGIudG9TdHJpbmcoKSwgZ2RiMS50b1N0cmluZygpKTsKLQotCi0gICAgICAgICAgICAgICAgLy8gY29tcGFyaW5nIGlzIHJldmVyc2libGUKLSAgICAgICAgICAgICAgICBpbnQgY29tcDEgPSBnZC5jb21wYXJlVG9HRHVyYXRpb24oZ2QyKTsKLSAgICAgICAgICAgICAgICBpbnQgY29tcDIgPSBnZDIuY29tcGFyZVRvR0R1cmF0aW9uKGdkKTsKLSAgICAgICAgICAgICAgICBpZiAoY29tcDEgPT0gMikKLSAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBjb21wMik7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKC1jb21wMSwgY29tcDIpOwotCi0gICAgICAgICAgICAgICAgLy8gY29tcGFyaW5nIHRyYW5zbGF0ZXMgdG8gYWRkaXRpb24gdG8gZGF0ZXMKLSAgICAgICAgICAgICAgICBib29sZWFuW10gc2VlbiA9IG5ldyBib29sZWFuWzNdOwotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCB2YWxpZERhdGVzLmxlbmd0aDsgaysrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0RhdGUgZGF0ZSA9IG5ldyBHRGF0ZSh2YWxpZERhdGVzW2tdKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRlLmhhc0RhdGUoKSB8fCBkYXRlLmdldFllYXIoKSA+IDk5OTk5IHx8IGRhdGUuZ2V0WWVhcigpIDwgLTQwMDApCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChoYXNUaW1lKGdkKSB8fCBoYXNUaW1lKGdkMikpICYmICFkYXRlLmhhc1RpbWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIkFkZGluZyAiICsgZ2QgKyAiIGFuZCAiICsgZ2QyICsgIiB0byAiICsgZGF0ZSArICIsIGV4cGVjdGluZyAiICsgY29tcDEpOwotICAgICAgICAgICAgICAgICAgICBHRGF0ZSBkYXRlMSA9IGRhdGUuYWRkKGdkKTsKLSAgICAgICAgICAgICAgICAgICAgR0RhdGUgZGF0ZTIgPSBkYXRlLmFkZChnZDIpOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbXAyID0gZGF0ZTEuY29tcGFyZVRvR0RhdGUoZGF0ZTIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY29tcDEgIT0gMikKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiQWRkaW5nICIgKyBkYXRlICsgIiArICIgKyBnZCArICIgLT4gIiArIGRhdGUxICsgIiwgIiArIGdkMiArICIgLT4gIiArIGRhdGUyICsgIiwgZXhwZWN0aW5nICIgKyBjb21wMSwgY29tcDEsIGNvbXAyKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGNvbXAyICE9IDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2Vlbltjb21wMiArIDFdID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIC8vIHN1YnRyYWN0aW9uIHNob3VsZCB5ZWlsZCB0aGUgc2FtZSByZXN1bHQKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXAxICE9IDIpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdEYXRlIGRhdGUzID0gZGF0ZS5hZGQoZGlmZik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKGNvbXAxLCBkYXRlMy5jb21wYXJlVG9HRGF0ZShkYXRlKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29tcDEgPT0gMikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBzZWVuY291bnQgPSAwOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IHNlZW4ubGVuZ3RoOyBrKyspCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VlbltrXSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVuY291bnQgKz0gMTsKLSAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIk5vdCBhbWJpZ3VvdXMgYXMgYWR2ZXJ0aXNlZCIgLyogKyBnZCArICIsICIgKyBnZDIgKyAiIGQ6ICIgKyBkaWZmICovLCBzZWVuY291bnQgPiAxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdE9yZGVyKCkKLSAgICB7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoLTEsIG5ldyBHRGF0ZSgiMTk5OC0wOC0yNiIpLmNvbXBhcmVUb0dEYXRlKG5ldyBHRGF0ZSgiMjAwMS0wOC0wNiIpKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoLTEsIG5ldyBHRGF0ZSgiMTk3MC0xMi0yMFQwNDoxNDoyMloiKS5jb21wYXJlVG9HRGF0ZShuZXcgR0RhdGUoIjE5NzEtMDQtMThUMTI6NTE6NDFaIikpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBuZXcgR0RhdGUoIjIwMDEtMDgtMDYiKS5jb21wYXJlVG9HRGF0ZShuZXcgR0RhdGUoIjIwMDEtMDgtMDZaIikpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBuZXcgR0RhdGUoIjIwMDEtMDgtMDYiKS5jb21wYXJlVG9HRGF0ZShuZXcgR0RhdGUoIjIwMDEtMDgtMDcrMTA6MDAiKSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG5ldyBHRGF0ZSgiMjAwMS0wOC0wNiIpLmNvbXBhcmVUb0dEYXRlKG5ldyBHRGF0ZSgiMjAwMS0wOC0wNS0xMDowMCIpKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbmV3IEdEYXRlKCIyMDAxLTAyLTI4IikuY29tcGFyZVRvR0RhdGUobmV3IEdEYXRlKCIyMDAxLTAzLTAxKzEwOjAwIikpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBuZXcgR0RhdGUoIjIwMDEtMDMtMDEiKS5jb21wYXJlVG9HRGF0ZShuZXcgR0RhdGUoIjIwMDEtMDItMjgtMTA6MDAiKSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKC0xLCBuZXcgR0RhdGUoIjIwMDAtMDItMjgiKS5jb21wYXJlVG9HRGF0ZShuZXcgR0RhdGUoIjIwMDAtMDMtMDErMTA6MDAiKSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDEsIG5ldyBHRGF0ZSgiMjAwMC0wMy0wMSIpLmNvbXBhcmVUb0dEYXRlKG5ldyBHRGF0ZSgiMjAwMC0wMi0yOC0xMDowMCIpKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoLTEsIG5ldyBHRGF0ZSgiMjAwMS0wOC0wNloiKS5jb21wYXJlVG9HRGF0ZShuZXcgR0RhdGUoIjIwMDEtMDgtMDYtMDA6MDEiKSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIG5ldyBHRGF0ZSgiMDA6MDA6MDBaIikuY29tcGFyZVRvR0RhdGUobmV3IEdEYXRlKCIwMDowMTowMCswMDowMSIpKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwgbmV3IEdEYXRlKCIxMjowMDowMC0wNTowMCIpLmNvbXBhcmVUb0dEYXRlKG5ldyBHRGF0ZSgiMDk6MDA6MDAtMDg6MDAiKSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKC0xLCBuZXcgR0RhdGUoIjA5OjAwOjAwLTA1OjAwIikuY29tcGFyZVRvR0RhdGUobmV3IEdEYXRlKCIwOTowMDowMC0wODowMCIpKSk7IC8vIHRoZSBlYXN0IGNvYXN0IHJpc2VzIGJlZm9yZSB0aGUgd2VzdAotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKC0xLCBuZXcgR0RhdGUoIjIwMDMtMDUtMDVUMDk6MDA6MDAtMDU6MDAiKS5jb21wYXJlVG9HRGF0ZShuZXcgR0RhdGUoIjIwMDMtMDUtMDVUMDk6MDA6MDAtMDg6MDAiKSkpOyAvLyB0aGUgZWFzdCBjb2FzdCByaXNlcyBiZWZvcmUgdGhlIHdlc3QKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygtMSwgbmV3IEdEYXRlKCItLS0wMSIpLmNvbXBhcmVUb0dEYXRlKG5ldyBHRGF0ZSgiLS0tMzEiKSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKC0xLCBuZXcgR0RhdGUoIi0tLTAxIikuY29tcGFyZVRvR0RhdGUobmV3IEdEYXRlKCItLS0zMSsxNDowMCIpKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoLTEsIG5ldyBHRGF0ZSgiLS0tMDEiKS5jb21wYXJlVG9HRGF0ZShuZXcgR0RhdGUoIi0tLTMxLTE0OjAwIikpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygxLCBuZXcgR0RhdGUoIi0tLTMxIikuY29tcGFyZVRvR0RhdGUobmV3IEdEYXRlKCItLS0wMSIpKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMSwgbmV3IEdEYXRlKCItLS0zMSIpLmNvbXBhcmVUb0dEYXRlKG5ldyBHRGF0ZSgiLS0tMDErMTQ6MDAiKSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDEsIG5ldyBHRGF0ZSgiLS0tMzEiKS5jb21wYXJlVG9HRGF0ZShuZXcgR0RhdGUoIi0tLTAxLTE0OjAwIikpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygtMSwgbmV3IEdEYXRlKCItLS0wMSIpLmNvbXBhcmVUb0dEYXRlKG5ldyBHRGF0ZSgiLS0tMDIiKSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDEsIG5ldyBHRGF0ZSgiLS0tMDIiKS5jb21wYXJlVG9HRGF0ZShuZXcgR0RhdGUoIi0tLTAxIikpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygtMSwgbmV3IEdEYXRlKCItLS0wMSIpLmNvbXBhcmVUb0dEYXRlKG5ldyBHRGF0ZSgiLS0tMDJaIikpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygxLCBuZXcgR0RhdGUoIi0tLTAyIikuY29tcGFyZVRvR0RhdGUobmV3IEdEYXRlKCItLS0wMVoiKSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG5ldyBHRGF0ZSgiLS0tMDIiKS5jb21wYXJlVG9HRGF0ZShuZXcgR0RhdGUoIi0tLTAxLTEwOjAwIikpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBuZXcgR0RhdGUoIi0tLTAxIikuY29tcGFyZVRvR0RhdGUobmV3IEdEYXRlKCItLS0wMisxMDowMCIpKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMSwgbmV3IEdEYXRlKCItLS0wMiIpLmNvbXBhcmVUb0dEYXRlKG5ldyBHRGF0ZSgiLS0tMDEtMDk6MDAiKSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKC0xLCBuZXcgR0RhdGUoIi0tLTAxIikuY29tcGFyZVRvR0RhdGUobmV3IEdEYXRlKCItLS0wMiswOTowMCIpKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwgbmV3IEdEYXRlKCItLS0wMSIpLmNvbXBhcmVUb0dEYXRlKG5ldyBHRGF0ZSgiLS0tMDEiKSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKC0xLCBuZXcgR0RhdGUoIjIwMDMiKS5jb21wYXJlVG9HRGF0ZShuZXcgR0RhdGUoIjIwMDQiKSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKC0xLCBuZXcgR0RhdGUoIi0tMTEiKS5jb21wYXJlVG9HRGF0ZShuZXcgR0RhdGUoIi0tMTIiKSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKC0xLCBuZXcgR0RhdGUoIjIwMDMtMTIiKS5jb21wYXJlVG9HRGF0ZShuZXcgR0RhdGUoIjIwMDQtMDEiKSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKC0xLCBuZXcgR0RhdGUoIi0tMTEtMzAiKS5jb21wYXJlVG9HRGF0ZShuZXcgR0RhdGUoIi0tMTItMDEiKSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKC0xLCBuZXcgR0RhdGUoIi0tMDItMjgiKS5jb21wYXJlVG9HRGF0ZShuZXcgR0RhdGUoIi0tMDItMjkiKSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKC0xLCBuZXcgR0RhdGUoIi0tMDItMjkiKS5jb21wYXJlVG9HRGF0ZShuZXcgR0RhdGUoIi0tMDMtMDEiKSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG5ldyBHRGF0ZSgiLS0wMi0yOSIpLmNvbXBhcmVUb0dEYXRlKG5ldyBHRGF0ZSgiLS0wMy0wMSsxMDowMCIpKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgbmV3IEdEYXRlKCItLTAyLTI4IikuY29tcGFyZVRvR0RhdGUobmV3IEdEYXRlKCItLTAzLTAxKzEwOjAwIikpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBuZXcgR0RhdGUoIi0tMDMtMDEiKS5jb21wYXJlVG9HRGF0ZShuZXcgR0RhdGUoIi0tMDItMjgtMTA6MDAiKSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG5ldyBHRGF0ZSgiLS0wMy0wMSIpLmNvbXBhcmVUb0dEYXRlKG5ldyBHRGF0ZSgiLS0wMi0yOS0xMDowMCIpKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoLTEsIG5ldyBHRGF0ZSgiLS0wMi0yOSIpLmNvbXBhcmVUb0dEYXRlKG5ldyBHRGF0ZSgiLS0wMy0wMSswOTowMCIpKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoLTEsIG5ldyBHRGF0ZSgiLS0wMi0yOCIpLmNvbXBhcmVUb0dEYXRlKG5ldyBHRGF0ZSgiLS0wMy0wMSswOTowMCIpKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMSwgbmV3IEdEYXRlKCItLTAzLTAxIikuY29tcGFyZVRvR0RhdGUobmV3IEdEYXRlKCItLTAyLTI4LTA5OjAwIikpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygxLCBuZXcgR0RhdGUoIi0tMDMtMDEiKS5jb21wYXJlVG9HRGF0ZShuZXcgR0RhdGUoIi0tMDItMjktMDk6MDAiKSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKC0xLCBuZXcgR0RhdGUoIjAwOjAwOjAwIikuY29tcGFyZVRvR0RhdGUobmV3IEdEYXRlKCIyMzo1OTo1OSIpKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoLTEsIG5ldyBHRGF0ZSgiMDA6MDA6MDAiKS5jb21wYXJlVG9HRGF0ZShuZXcgR0RhdGUoIjIzOjU5OjU5KzA5OjU5IikpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygtMSwgbmV3IEdEYXRlKCIwMDowMDowMCIpLmNvbXBhcmVUb0dEYXRlKG5ldyBHRGF0ZSgiMjM6NTk6MDErMDk6NTkiKSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG5ldyBHRGF0ZSgiMDA6MDA6MDAiKS5jb21wYXJlVG9HRGF0ZShuZXcgR0RhdGUoIjIzOjU5OjAwKzA5OjU5IikpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBuZXcgR0RhdGUoIjAwOjAwOjAwIikuY29tcGFyZVRvR0RhdGUobmV3IEdEYXRlKCIyMzo1OTo1OSsxMDowMCIpKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoLTEsIG5ldyBHRGF0ZSgiMDA6MDA6MDAiKS5jb21wYXJlVG9HRGF0ZShuZXcgR0RhdGUoIjIzOjU5OjU5LTE0OjAwIikpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygxLCBuZXcgR0RhdGUoIjIzOjU5OjU5IikuY29tcGFyZVRvR0RhdGUobmV3IEdEYXRlKCIwMDowMDowMC0wOTo1OSIpKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMSwgbmV3IEdEYXRlKCIyMzo1OTo1OSIpLmNvbXBhcmVUb0dEYXRlKG5ldyBHRGF0ZSgiMDA6MDA6NTgtMDk6NTkiKSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIG5ldyBHRGF0ZSgiMjM6NTk6NTkiKS5jb21wYXJlVG9HRGF0ZShuZXcgR0RhdGUoIjAwOjAwOjU5LTA5OjU5IikpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBuZXcgR0RhdGUoIjIzOjU5OjU5IikuY29tcGFyZVRvR0RhdGUobmV3IEdEYXRlKCIwMDowMDowMC0xMDowMCIpKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMSwgbmV3IEdEYXRlKCIyMzo1OTo1OSIpLmNvbXBhcmVUb0dEYXRlKG5ldyBHRGF0ZSgiMDA6MDA6MDArMTQ6MDAiKSkpOwotICAgIH0KLQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RGYWlsdXJlKCkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnZhbGlkRGF0ZXMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBzdHIgPSBpbnZhbGlkRGF0ZXNbaV07Ci0gICAgICAgICAgICB0cnkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBuZXcgR0RhdGUoc3RyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCJNaXNzaW5nIGV4Y2VwdGlvbiBmb3IgR0RhdGUgIiArIHN0ciwgZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RTdWNjZXNzKCkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWxpZERhdGVzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgc3RyID0gdmFsaWREYXRlc1tpXTsKLSAgICAgICAgICAgIEdEYXRlIGdkYXRlID0gbnVsbDsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdkYXRlID0gbmV3IEdEYXRlKHN0cik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIlByb2JsZW0gd2l0aCAiICsgc3RyICsgIjogIiArIGUuZ2V0TWVzc2FnZSgpLCBmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIG11c3Qgcm91bmQtdHJpcCB0byBzdHJpbmcKLSAgICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoc3RyLCBnZGF0ZS50b1N0cmluZygpKTsKLQotICAgICAgICAgICAgLy8gbXVzdCByb3VuZC10cmlwIHRvIEdyZWdvcmlhbkNhbGVuZGFyIGlmIGZyYWN0aW9ucy1vZi1zZWNvbmRzIDw9MyBkaWdpdHMKLSAgICAgICAgICAgIGlmIChnZGF0ZS5nZXRGcmFjdGlvbigpID09IG51bGwgfHwgZ2RhdGUuZ2V0RnJhY3Rpb24oKS5zY2FsZSgpIDw9IDMpCi0gICAgICAgICAgICAgICAgaWYgKCFnZGF0ZS50b1N0cmluZygpLmVxdWFscygiLS0wMi0yOSIpKSAvLyBidWcgaW4gZ2NhbCAtPiAwMy0wMQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIGdjYWwgPSBnZGF0ZS5nZXRDYWxlbmRhcigpOwotICAgICAgICAgICAgICAgIEdEYXRlIGdkYXRlMiA9IG5ldyBHRGF0ZShnY2FsKTsKLSAgICAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKGdkYXRlLCBnZGF0ZTIpOwotCi0gICAgICAgICAgICAgICAgLy8gYW5kIGlmIGZyYWN0aW9ucy1vZi1zZWNvbmRzIGlzIDMgZGlnaXRzLCBzdHJpbmdyZXAgbXVzdCByb3VuZC10cmlwCi0gICAgICAgICAgICAgICAgaWYgKGdkYXRlLmdldEZyYWN0aW9uKCkgPT0gbnVsbCB8fCBnZGF0ZS5nZXRGcmFjdGlvbigpLnNjYWxlKCkgPT0gMyB8fCBnZGF0ZS5nZXRGcmFjdGlvbigpLnNjYWxlKCkgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhnZGF0ZS50b1N0cmluZygpLCBnZGF0ZTIudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIG11c3Qgcm91bmQtdHJpcCB0byBEYXRlIGlmIGFic29sdXRlIHRpbWUrdGltZXpvbmUgKyBmcmFjdGlvbnMtb2Ytc2Vjb25kcyA8PSAzCi0gICAgICAgICAgICBpZiAoZ2RhdGUuaGFzVGltZVpvbmUoKSAmJiBnZGF0ZS5nZXRZZWFyKCkgPiAtNDAwMCAmJiBnZGF0ZS5nZXRZZWFyKCkgPCA5OTk5OSAmJiBnZGF0ZS5nZXRCdWlsdGluVHlwZUNvZGUoKSA9PSBTY2hlbWFUeXBlLkJUQ19EQVRFX1RJTUUgJiYgZ2RhdGUuZ2V0RnJhY3Rpb24oKS5zY2FsZSgpIDw9IDMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRGF0ZSBkYXRlID0gZ2RhdGUuZ2V0RGF0ZSgpOwotICAgICAgICAgICAgICAgIEdEYXRlIGdkYXRlMiA9IG5ldyBHRGF0ZShkYXRlKTsKLSAgICAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKGdkYXRlLCBnZGF0ZTIpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSB0byBVVEMgZnJhY3Rpb25zLW9mLXNlY29uZHMgaXMgMCBvciAzIGRpZ2l0cyBbbm90IDAwMF0sIHN0cmluZ3JlcCBtdXN0IHJvdW5kLXRyaXAKLSAgICAgICAgICAgICAgICBpZiAoZ2RhdGUuZ2V0VGltZVpvbmVTaWduKCkgPT0gMCAmJiAoKGdkYXRlLmdldEZyYWN0aW9uKCkuc2NhbGUoKSA9PSAzICYmIGdkYXRlLmdldEZyYWN0aW9uKCkuc2lnbnVtKCkgIT0gMCkgfHwgZ2RhdGUuZ2V0RnJhY3Rpb24oKS5zY2FsZSgpID09IDApKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0RhdGVCdWlsZGVyIGdkYiA9IG5ldyBHRGF0ZUJ1aWxkZXIoZ2RhdGUyKTsKLSAgICAgICAgICAgICAgICAgICAgZ2RiLm5vcm1hbGl6ZVRvVGltZVpvbmUoMCwgMCwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoZ2RhdGUudG9TdHJpbmcoKSwgZ2RiLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIHZlcmlmeSB0aGF0IGdvaW5nIHRocm91Z2ggZ2NhbCBnaXZlcyB1cyB0aGUgc2FtZSB0aGluZwotICAgICAgICAgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIGdjYWwgPSBnZGF0ZS5nZXRDYWxlbmRhcigpOwotICAgICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoZGF0ZSwgZ2NhbC5nZXRUaW1lKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIGRvdWJsZS1jaGVjayBYbWxDYWxlbmRhciBjb25zdHJ1Y3RvcgotICAgICAgICAgICAgICAgIGdjYWwgPSBuZXcgWG1sQ2FsZW5kYXIoZGF0ZSk7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiRG9pbmcgIiArIGdkYXRlLCBkYXRlLCBnY2FsLmdldFRpbWUoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChnZGF0ZS5oYXNEYXRlKCkgJiYgKGdkYXRlLmdldEZyYWN0aW9uKCkgPT0gbnVsbCB8fCBnZGF0ZS5nZXRGcmFjdGlvbigpLnNjYWxlKCkgPD0gMykpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gbXVzdCBiZSBhYmxlIHRvIGdldCBhIGRhdGUgaWYgdGltZSt0aW1lem9uZSBpcyB1bnNldCAobWlkbmlnaHQsIGx0eiBhcmUgYXNzdW1lZCkKLSAgICAgICAgICAgICAgICBEYXRlIGRhdGUgPSBnZGF0ZS5nZXREYXRlKCk7Ci0gICAgICAgICAgICAgICAgR0RhdGVCdWlsZGVyIGdkYXRlMSA9IG5ldyBHRGF0ZUJ1aWxkZXIoZ2RhdGUpOwotICAgICAgICAgICAgICAgIGlmICghZ2RhdGUxLmhhc1RpbWUoKSkKLSAgICAgICAgICAgICAgICAgICAgZ2RhdGUxLnNldFRpbWUoMCwgMCwgMCwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhnZGF0ZTEuZ2V0RGF0ZSgpLCBkYXRlKTsKLQotICAgICAgICAgICAgICAgIC8vIHZlcmlmeSB0aGF0IGdvaW5nIHRocm91Z2ggZ2NhbCBnaXZlcyB1cyB0aGUgc2FtZSB0aGluZwotICAgICAgICAgICAgICAgIEdyZWdvcmlhbkNhbGVuZGFyIGdjYWwgPSBnZGF0ZS5nZXRDYWxlbmRhcigpOwotICAgICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIkNvbXBhcmluZyAiICsgZ2RhdGUgKyAiIGFuZCAiICsgZ2NhbCwgZGF0ZSwgZ2NhbC5nZXRUaW1lKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL0lERUN1cnNvclVzYWdlVGVzdC5qYXZhIGIvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL0lERUN1cnNvclVzYWdlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmEyZjFhLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9JREVDdXJzb3JVc2FnZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIGRydGNhc2VzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxCZWFuczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotLyoqCi0gKiBUZXN0cyBhIHNpbXBsZSB1c2FnZSBvZiB0aGUgY3Vyc29yIEknbSBoYXZpbmcgdHJvdWJsZSB3aXRoIGluIElERSBjb2RlLgotICovCi1wdWJsaWMgY2xhc3MgSURFQ3Vyc29yVXNhZ2VUZXN0IGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgICBwdWJsaWMgSURFQ3Vyc29yVXNhZ2VUZXN0KFN0cmluZyBuYW1lKSB7IHN1cGVyKG5hbWUpOyB9Ci0gICAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeyByZXR1cm4gbmV3IFRlc3RTdWl0ZShJREVDdXJzb3JVc2FnZVRlc3QuY2xhc3MpOyB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIEZpbGUgZ2V0Q2FzZUZpbGUoU3RyaW5nIHRoZUNhc2UpCi0gICAgewotICAgICAgICByZXR1cm4gVGVzdEVudi54YmVhbkNhc2UoInN0b3JlLyIgKyB0aGVDYXNlKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgWG1sQ3Vyc29yIGxvYWRDYXNlKFN0cmluZyB0aGVDYXNlKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICByZXR1cm4gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoZ2V0Q2FzZUZpbGUodGhlQ2FzZSkpLm5ld0N1cnNvcigpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHRlc3RTY2FuRWxlbWVudCgpIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbEN1cnNvciBjdXJzb3IgPSBsb2FkQ2FzZSgiQ29uc29saWRhdGVUZXN0LnhtbCIpOwotICAgICAgICBjdXJzb3IudG9GaXJzdENoaWxkKCk7Ci0KLSAgICAgICAgWG1sQ3Vyc29yIGN1ciA9IGN1cnNvci5uZXdDdXJzb3IoKTsKLQotICAgICAgICAvLyBiYWNrIHVwIHRvIHByZXZpb3VzIHN0YXJ0IG9yIGVuZCB0YWcKLSAgICAgICAgd2hpbGUgKCFpc1N0YXJ0T3JFbmQoY3VyLnRvUHJldlRva2VuKCkpKSB7IFN5c3RlbS5vdXQucHJpbnRsbigiQmFja2luZyB1cDogYXQgIiArIGN1ci5jdXJyZW50VG9rZW5UeXBlKCkpOyB9Ci0gICAgICAgIC8vIHRoZW4gZm9yd2FyZCB0byBmaXJzdCBzdGFydCBvciBjb21tZW50IChtYXkgZW5kIHVwIHdoZXJlIHdlIHN0YXJ0ZWQpCi0gICAgICAgIHdoaWxlICghaXNTdGFydE9yQ29tbWVudChjdXIudG9OZXh0VG9rZW4oKSkpIHsgU3lzdGVtLm91dC5wcmludGxuKCJBZHZhbmNpbmc6IGF0ICIgKyBjdXIuY3VycmVudFRva2VuVHlwZSgpKTsgfQotICAgICAgICAvLyB0aGVuIGdyYWIgdGhlICJzdGFydCIgamF2ZWxpbiBhbm5vdGF0aW9uLCBhbmQgZ3JhYiB0aGUgc3RhcnQgdG9rZW4gYW5kIHRoZSBmaXJzdCBjaGFyCi0gICAgICAgIC8vIF9maXJzdFRva2VuID0gKChKYXZlbGluQW5ub3RhdGlvbiljdXIuZ2V0QW5ub3RhdGlvbihKYXZlbGluQW5ub3RhdGlvbi5jbGFzcykpLmdldFN0YXJ0VG9rZW4oKTsKLQotICAgICAgICAvLyBub3cgcGVlayBhdCB0aGUgZW5kIHRhZyAoaXQgbWF5IGJlIHVucGxhY2VkIGZvciB0aGUgPGEvPiBjYXNlLCBzbyB1c2UgdGhlIHN0YXJ0IHRhZyBpZiBuZWVkZWQKLSAgICAgICAgY3VyLnRvQ3Vyc29yKGN1cnNvcik7Ci0gICAgICAgIC8vIF9sYXN0VG9rZW4gPSAoKEphdmVsaW5Bbm5vdGF0aW9uKWN1ci5nZXRBbm5vdGF0aW9uKEphdmVsaW5Bbm5vdGF0aW9uLmNsYXNzKSkuZ2V0RW5kVG9rZW4oKTsKLSAgICAgICAgY3VyLnRvRW5kVG9rZW4oKTsKLSAgICAgICAgLy8gSmF2ZWxpbkFubm90YXRpb24gZW5kQW5uID0gKEphdmVsaW5Bbm5vdGF0aW9uKWN1ci5nZXRBbm5vdGF0aW9uKEphdmVsaW5Bbm5vdGF0aW9uLmNsYXNzKTsKLSAgICAgICAgLy8gaWYgKGVuZEFubiAhPSBudWxsKQotICAgICAgICAvLyAgICBfbGFzdFRva2VuID0gZW5kQW5uLmdldEVuZFRva2VuKCk7Ci0gICAgfQotCi0gICAgYm9vbGVhbiBpc1N0YXJ0T3JFbmQoWG1sQ3Vyc29yLlRva2VuVHlwZSB0b2tUeXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNoICh0b2tUeXBlLmludFZhbHVlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgWG1sQ3Vyc29yLlRva2VuVHlwZS5JTlRfRU5EOgotICAgICAgICAgICAgY2FzZSBYbWxDdXJzb3IuVG9rZW5UeXBlLklOVF9FTkRET0M6Ci0gICAgICAgICAgICBjYXNlIFhtbEN1cnNvci5Ub2tlblR5cGUuSU5UX1NUQVJUOgotICAgICAgICAgICAgY2FzZSBYbWxDdXJzb3IuVG9rZW5UeXBlLklOVF9TVEFSVERPQzoKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbGVhbiBpc1N0YXJ0T3JDb21tZW50KFhtbEN1cnNvci5Ub2tlblR5cGUgdG9rVHlwZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAodG9rVHlwZS5pbnRWYWx1ZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIFhtbEN1cnNvci5Ub2tlblR5cGUuSU5UX1NUQVJUOgotICAgICAgICAgICAgY2FzZSBYbWxDdXJzb3IuVG9rZW5UeXBlLklOVF9TVEFSVERPQzoKLSAgICAgICAgICAgIGNhc2UgWG1sQ3Vyc29yLlRva2VuVHlwZS5JTlRfQ09NTUVOVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvSW50VGVzdHMuamF2YSBiL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9JbnRUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzhhYjZhLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9JbnRUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBkcnRjYXNlczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci0KLWltcG9ydCB4aW50LnRlc3QuUG9zaXRpb25Eb2N1bWVudDsKLQotcHVibGljIGNsYXNzIEludFRlc3RzIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgICBwdWJsaWMgSW50VGVzdHMoU3RyaW5nIG5hbWUpIHsgc3VwZXIobmFtZSk7IH0KLSAgICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7IHJldHVybiBuZXcgVGVzdFN1aXRlKEludFRlc3RzLmNsYXNzKTsgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RMYXRMb25nKCkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgUG9zaXRpb25Eb2N1bWVudCBkb2MgPSBQb3NpdGlvbkRvY3VtZW50LkZhY3RvcnkucGFyc2UoCi0gICAgICAgICAgIjxwOnBvc2l0aW9uIHhtbG5zOnA9J2phdmE6aW50LnRlc3QnPjxwOmxhdD40MzwvcDpsYXQ+PHA6bG9uPjAyMDwvcDpsb24+PC9wOnBvc2l0aW9uPiIpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDQzLCBkb2MuZ2V0UG9zaXRpb24oKS5nZXRMYXQoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMjAsIGRvYy5nZXRQb3NpdGlvbigpLmdldExvbigpKTsKLSAgICAgICAgZG9jLmdldFBvc2l0aW9uKCkueGdldExhdCgpLnNldCgiMDciKTsKLSAgICAgICAgZG9jLmdldFBvc2l0aW9uKCkueGdldExvbigpLnNldCgiMDQwIik7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNywgZG9jLmdldFBvc2l0aW9uKCkuZ2V0TGF0KCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDQwLCBkb2MuZ2V0UG9zaXRpb24oKS5nZXRMb24oKSk7Ci0gICAgICAgIGRvYy5nZXRQb3NpdGlvbigpLnNldExhdCgoc2hvcnQpMjIpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9MaXN0QW5kVW5pb25UZXN0cy5qYXZhIGIvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL0xpc3RBbmRVbmlvblRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhM2Q4NjYuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL0xpc3RBbmRVbmlvblRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjIgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBkcnRjYXNlczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQgb3JnLm9wZW51cmkubHV0Lkxpc3RzRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLm9wZW51cmkubHV0LlVuaW9uc0RvY3VtZW50OwotaW1wb3J0IG9yZy5vcGVudXJpLmx1dC5JbmNpZGVudFJlcG9ydHNEb2N1bWVudDsKLWltcG9ydCBvcmcub3BlbnVyaS5sdXQuRGF0ZU9yRGF0ZVRpbWU7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TaW1wbGVWYWx1ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxEYXRlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRGF0ZVRpbWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDYWxlbmRhcjsKLQotcHVibGljIGNsYXNzIExpc3RBbmRVbmlvblRlc3RzIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgICBwdWJsaWMgTGlzdEFuZFVuaW9uVGVzdHMoU3RyaW5nIG5hbWUpIHsgc3VwZXIobmFtZSk7IH0KLSAgICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7IHJldHVybiBuZXcgVGVzdFN1aXRlKExpc3RBbmRVbmlvblRlc3RzLmNsYXNzKTsgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdExpc3RHZXR0ZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgTGlzdHNEb2N1bWVudCBsaXN0cyA9IExpc3RzRG9jdW1lbnQuRmFjdG9yeS5wYXJzZSgKLSAgICAgICAgICAgICAgICAiPGx1dDpsaXN0cyB4bWxuczpsdXQ9J2h0dHA6Ly9vcGVudXJpLm9yZy9sdXQnPjxsdXQ6aW50LWxpc3Q+MiA0IDggMTYgMzI8L2x1dDppbnQtbGlzdD48bHV0Om5uaS1saXN0PnVuYm91bmRlZCAzIHVuYm91bmRlZCA2PC9sdXQ6bm5pLWxpc3Q+PC9sdXQ6bGlzdHM+Iik7Ci0gICAgICAgIExpc3QgaW50TGlzdCA9IGxpc3RzLmdldExpc3RzKCkuZ2V0SW50TGlzdCgpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKG5ldyBJbnRlZ2VyKDIpLCBpbnRMaXN0LmdldCgwKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMobmV3IEludGVnZXIoNCksIGludExpc3QuZ2V0KDEpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhuZXcgSW50ZWdlcig4KSwgaW50TGlzdC5nZXQoMikpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKG5ldyBJbnRlZ2VyKDE2KSwgaW50TGlzdC5nZXQoMykpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKG5ldyBJbnRlZ2VyKDMyKSwgaW50TGlzdC5nZXQoNCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGludExpc3Quc2l6ZSgpKTsKLQotICAgICAgICBMaXN0IG5uaUxpc3QgPSBsaXN0cy5nZXRMaXN0cygpLmdldE5uaUxpc3QoKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygidW5ib3VuZGVkIiwgbm5pTGlzdC5nZXQoMCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKEJpZ0ludGVnZXIudmFsdWVPZigzKSwgbm5pTGlzdC5nZXQoMSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJ1bmJvdW5kZWQiLCBubmlMaXN0LmdldCgyKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoQmlnSW50ZWdlci52YWx1ZU9mKDYpLCBubmlMaXN0LmdldCgzKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNCwgbm5pTGlzdC5zaXplKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHRlc3RMaXN0U2V0dGVycygpIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIExpc3RzRG9jdW1lbnQgZG9jID0gTGlzdHNEb2N1bWVudC5GYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAgIExpc3RzRG9jdW1lbnQuTGlzdHMgbGlzdHMgPSBkb2MuYWRkTmV3TGlzdHMoKTsKLSAgICAgICAgbGlzdHMuc2V0SW50TGlzdChBcnJheXMuYXNMaXN0KG5ldyBPYmplY3RbXSB7IG5ldyBJbnRlZ2VyKDQpLCBuZXcgSW50ZWdlcigxOCkgfSkpOwotICAgICAgICBsaXN0cy5zZXRObmlMaXN0KEFycmF5cy5hc0xpc3QobmV3IE9iamVjdFtdIHsgQmlnSW50ZWdlci52YWx1ZU9mKDEpLCBCaWdJbnRlZ2VyLnZhbHVlT2YoMiksICJ1bmJvdW5kZWQiIH0pKTsKLSAgICAgICAgU3RyaW5nIHh0ZXh0ID0gZG9jLnhtbFRleHQoKTsKLQotICAgICAgICBMaXN0c0RvY3VtZW50IGRvY3J0ID0gTGlzdHNEb2N1bWVudC5GYWN0b3J5LnBhcnNlKHh0ZXh0KTsKLSAgICAgICAgTGlzdCBpbnRMaXN0ID0gZG9jcnQuZ2V0TGlzdHMoKS5nZXRJbnRMaXN0KCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMobmV3IEludGVnZXIoNCksIGludExpc3QuZ2V0KDApKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhuZXcgSW50ZWdlcigxOCksIGludExpc3QuZ2V0KDEpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBpbnRMaXN0LnNpemUoKSk7Ci0KLSAgICAgICAgTGlzdCBubmlMaXN0ID0gZG9jcnQuZ2V0TGlzdHMoKS5nZXRObmlMaXN0KCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoQmlnSW50ZWdlci52YWx1ZU9mKDEpLCBubmlMaXN0LmdldCgwKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoQmlnSW50ZWdlci52YWx1ZU9mKDIpLCBubmlMaXN0LmdldCgxKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoInVuYm91bmRlZCIsIG5uaUxpc3QuZ2V0KDIpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygzLCBubmlMaXN0LnNpemUoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdFVuaW9uR2V0dGVycygpIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFVuaW9uc0RvY3VtZW50IHVuaW9ucyA9IFVuaW9uc0RvY3VtZW50LkZhY3RvcnkucGFyc2UoCi0gICAgICAgICAgICAgICAgIjxsdXQ6dW5pb25zIHhtbG5zOmx1dD0naHR0cDovL29wZW51cmkub3JnL2x1dCc+PGx1dDpubmk+dW5ib3VuZGVkPC9sdXQ6bm5pPjxsdXQ6c2l6ZXM+MiAzIDUgNyAxMTwvbHV0OnNpemVzPjwvbHV0OnVuaW9ucz4iKTsKLQotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJ1bmJvdW5kZWQiLCB1bmlvbnMuZ2V0VW5pb25zKCkuZ2V0Tm5pKCkpOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKHVuaW9ucy5nZXRVbmlvbnMoKS5nZXRTaXplcygpIGluc3RhbmNlb2YgTGlzdCk7Ci0gICAgICAgIExpc3Qgc2l6ZXMgPSAoTGlzdCl1bmlvbnMuZ2V0VW5pb25zKCkuZ2V0U2l6ZXMoKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhuZXcgSW50ZWdlcigyKSwgc2l6ZXMuZ2V0KDApKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhuZXcgSW50ZWdlcigzKSwgc2l6ZXMuZ2V0KDEpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhuZXcgSW50ZWdlcig1KSwgc2l6ZXMuZ2V0KDIpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhuZXcgSW50ZWdlcig3KSwgc2l6ZXMuZ2V0KDMpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhuZXcgSW50ZWdlcigxMSksIHNpemVzLmdldCg0KSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNSwgc2l6ZXMuc2l6ZSgpKTsKLQotICAgICAgICBVbmlvbnNEb2N1bWVudCB1bmlvbnMyID0gVW5pb25zRG9jdW1lbnQuRmFjdG9yeS5wYXJzZSgKLSAgICAgICAgICAgICAgICAiPGx1dDp1bmlvbnMgeG1sbnM6bHV0PSdodHRwOi8vb3BlbnVyaS5vcmcvbHV0Jz48bHV0Om5uaT4zNzwvbHV0Om5uaT48bHV0OnNpemVzPmFsbDwvbHV0OnNpemVzPjwvbHV0OnVuaW9ucz4iKTsKLQotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKEJpZ0ludGVnZXIudmFsdWVPZigzNyksIHVuaW9uczIuZ2V0VW5pb25zKCkuZ2V0Tm5pKCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJhbGwiLCB1bmlvbnMyLmdldFVuaW9ucygpLmdldFNpemVzKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHRlc3RVbmlvblNldHRlcnMoKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotCi0gICAgICAgIC8vIGNyZWF0ZSBhIGRvY3VtZW50Ci0gICAgICAgIFVuaW9uc0RvY3VtZW50IGRvYyA9IFVuaW9uc0RvY3VtZW50LkZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgVW5pb25zRG9jdW1lbnQuVW5pb25zIHVuaW9ucyA9IGRvYy5hZGROZXdVbmlvbnMoKTsKLSAgICAgICAgdW5pb25zLnNldE5uaSgidW5ib3VuZGVkIik7Ci0gICAgICAgIHVuaW9ucy5zZXRTaXplcyhBcnJheXMuYXNMaXN0KG5ldyBPYmplY3RbXSB7IG5ldyBJbnRlZ2VyKDUpLCBuZXcgSW50ZWdlcigyMikgfSkpOwotCi0gICAgICAgIC8vIHJvdW5kIHRyaXAgdG8gcyB0ZXh0Ci0gICAgICAgIFN0cmluZyB4dGV4dCA9IGRvYy54bWxUZXh0KCk7Ci0gICAgICAgIFVuaW9uc0RvY3VtZW50IGRvY3J0ID0gVW5pb25zRG9jdW1lbnQuRmFjdG9yeS5wYXJzZSh4dGV4dCk7Ci0KLSAgICAgICAgLy8gdmVyaWZ5IGNvbnRlbnRzCi0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoInVuYm91bmRlZCIsIGRvY3J0LmdldFVuaW9ucygpLmdldE5uaSgpKTsKLSAgICAgICAgTGlzdCBzaXplcyA9IChMaXN0KWRvY3J0LmdldFVuaW9ucygpLmdldFNpemVzKCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMobmV3IEludGVnZXIoNSksIHNpemVzLmdldCgwKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMobmV3IEludGVnZXIoMjIpLCBzaXplcy5nZXQoMSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIHNpemVzLnNpemUoKSk7Ci0KLSAgICAgICAgLy8gY2hhbmdlIHRoZSBvcmlnaW5hbCBkb2N1bWVudAotICAgICAgICB1bmlvbnMuc2V0Tm5pKG5ldyBJbnRlZ2VyKDExKSk7Ci0gICAgICAgIHVuaW9ucy5zZXRTaXplcygidW5rbm93biIpOwotCi0gICAgICAgIC8vIHJvdW5kIHRyaXAgaXQgYWdhaW4KLSAgICAgICAgeHRleHQgPSBkb2MueG1sVGV4dCgpOwotICAgICAgICBkb2NydCA9IFVuaW9uc0RvY3VtZW50LkZhY3RvcnkucGFyc2UoeHRleHQpOwotCi0gICAgICAgIC8vIHZlcmlmeSBjb250ZW50cyBhZ2FpbgotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKEJpZ0ludGVnZXIudmFsdWVPZigxMSksIGRvY3J0LmdldFVuaW9ucygpLmdldE5uaSgpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygidW5rbm93biIsIGRvY3J0LmdldFVuaW9ucygpLmdldFNpemVzKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHRlc3RVbmlvbkFycmF5KCkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgSW5jaWRlbnRSZXBvcnRzRG9jdW1lbnQgZG9jID0gSW5jaWRlbnRSZXBvcnRzRG9jdW1lbnQuRmFjdG9yeS5wYXJzZSgKLSAgICAgICAgICAgICAgICAgIjxsdXQ6aW5jaWRlbnQtcmVwb3J0cyB4bWxuczpsdXQ9J2h0dHA6Ly9vcGVudXJpLm9yZy9sdXQnPjxsdXQ6d2hlbj4yMDAxLTA4LTA2VDAzOjM0OjAwPC9sdXQ6d2hlbj48bHV0OndoZW4+MjAwMi0wMS0wNDwvbHV0OndoZW4+PGx1dDp3aGVuPjIwMDItMDgtMjZUMjM6MTA6MDA8L2x1dDp3aGVuPjwvbHV0OmluY2lkZW50LXJlcG9ydHM+Iik7Ci0gICAgICAgIEluY2lkZW50UmVwb3J0c0RvY3VtZW50LkluY2lkZW50UmVwb3J0cyByZXBvcnRzID0gZG9jLmdldEluY2lkZW50UmVwb3J0cygpOwotICAgICAgICBEYXRlT3JEYXRlVGltZVtdIGR0ID0gcmVwb3J0cy54Z2V0V2hlbkFycmF5KCk7Ci0gICAgICAgIENhbGVuZGFyW10gZ2QgPSByZXBvcnRzLmdldFdoZW5BcnJheSgpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDMsIGR0Lmxlbmd0aCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMywgZ2QubGVuZ3RoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoKChTaW1wbGVWYWx1ZSlkdFtpXSkuZ0RhdGVWYWx1ZSgpLCBuZXcgR0RhdGUoZ2RbaV0pKTsKLSAgICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoZ2RbaV0sIGR0W2ldLm9iamVjdFZhbHVlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhuZXcgWG1sQ2FsZW5kYXIoIjIwMDEtMDgtMDZUMDM6MzQ6MDAiKSwgZ2RbMF0pOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKG5ldyBYbWxDYWxlbmRhcigiMjAwMi0wMS0wNCIpLCBnZFsxXSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMobmV3IFhtbENhbGVuZGFyKCIyMDAyLTA4LTI2VDIzOjEwOjAwIiksIGdkWzJdKTsKLQotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKFhtbERhdGVUaW1lLnR5cGUsIGR0WzBdLmluc3RhbmNlVHlwZSgpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhYbWxEYXRlLnR5cGUsIGR0WzFdLmluc3RhbmNlVHlwZSgpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhYbWxEYXRlVGltZS50eXBlLCBkdFsyXS5pbnN0YW5jZVR5cGUoKSk7Ci0KLSAgICAgICAgcmVwb3J0cy5zZXRXaGVuQXJyYXkoMCwgbmV3IFhtbENhbGVuZGFyKCIxOTgwLTA0LTE4IikpOwotICAgICAgICByZXBvcnRzLnNldFdoZW5BcnJheSgxLCBuZXcgWG1sQ2FsZW5kYXIoIjE5NzAtMTItMjBUMDQ6MzM6MDAiKSk7Ci0KLSAgICAgICAgZHQgPSByZXBvcnRzLnhnZXRXaGVuQXJyYXkoKTsKLSAgICAgICAgZ2QgPSByZXBvcnRzLmdldFdoZW5BcnJheSgpOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMobmV3IFhtbENhbGVuZGFyKCIxOTgwLTA0LTE4IiksIGdkWzBdKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhuZXcgWG1sQ2FsZW5kYXIoIjE5NzAtMTItMjBUMDQ6MzM6MDAiKSwgZ2RbMV0pOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKG5ldyBYbWxDYWxlbmRhcigiMjAwMi0wOC0yNlQyMzoxMDowMCIpLCBnZFsyXSk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhYbWxEYXRlLnR5cGUsIGR0WzBdLmluc3RhbmNlVHlwZSgpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhYbWxEYXRlVGltZS50eXBlLCBkdFsxXS5pbnN0YW5jZVR5cGUoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoWG1sRGF0ZVRpbWUudHlwZSwgZHRbMl0uaW5zdGFuY2VUeXBlKCkpOwotCi0gICAgfQotCi19CmRpZmYgLS1naXQgYS92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvTWFyc2hhbFRlc3RzLmphdmEgYi92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvTWFyc2hhbFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNjIwN2IuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL01hcnNoYWxUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLXBhY2thZ2UgZHJ0Y2FzZXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5iaW5kaW5nLmJ0cy5CaW5kaW5nRmlsZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwubWFyc2hhbC5CaW5kaW5nQ29udGV4dDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwubWFyc2hhbC5CaW5kaW5nQ29udGV4dEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLm1hcnNoYWwuVW5tYXJzaGFsbGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMueDIwMDMueDA5LmJpbmRpbmdDb25maWcuQmluZGluZ0NvbmZpZ0RvY3VtZW50OwotCi1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxJbnB1dEZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5DaGFyQXJyYXlSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5DaGFyQXJyYXlXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uV3JpdGVyOwotCi1wdWJsaWMgY2xhc3MgTWFyc2hhbFRlc3RzIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgICBwdWJsaWMgTWFyc2hhbFRlc3RzKFN0cmluZyBuYW1lKQotICAgIHsKLSAgICAgICAgc3VwZXIobmFtZSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKE1hcnNoYWxUZXN0cy5jbGFzcyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdE1hbnlTaW1wbGVUeXBlc1VubWFyc2hhbGwoKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICB0ZXN0U2ltcGxlVHlwZVVubWFyc2hhbGwobmV3IExvbmcoNTU0MzQ1MzU0NDQ1NTU1NTU1TCksICJsb25nIik7Ci0gICAgICAgIHRlc3RTaW1wbGVUeXBlVW5tYXJzaGFsbChuZXcgRmxvYXQoNTQuNTQyM2YpLCAiZmxvYXQiKTsKLSAgICAgICAgdGVzdFNpbXBsZVR5cGVVbm1hcnNoYWxsKCJyYW5kb20gc3RyaW5nIiwgInN0cmluZyIpOwotICAgIH0KLQotCi0gICAgLy9vbmx5IHdvcmtzIGZvciB2YWx1ZXMgd2hlcmUgLnRvU3RyaW5nKCkgaXMgZXF1aXZhbGVudCB0byBtYXJzaGFsbGluZwotICAgIHB1YmxpYyB2b2lkIHRlc3RTaW1wbGVUeXBlVW5tYXJzaGFsbChPYmplY3QgZXhwZWN0ZWQsIFN0cmluZyB4c2RfdHlwZSkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgVW5tYXJzaGFsbGVyIHVubWFyc2hhbGxlciA9IGdldFNpbXBsZVVubWFyc2hhbGxlcigpOwotCi0gICAgICAgIFN0cmluZyB4bWxkb2MgPSAiPGEgeG1sbnM6eHNpPSdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSciICsKLSAgICAgICAgICAgICIgeG1sbnM6eHM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJyB4c2k6dHlwZT0neHM6IiArCi0gICAgICAgICAgICB4c2RfdHlwZSArICInID4iICsgZXhwZWN0ZWQgKyAiPC9hPiI7Ci0KLSAgICAgICAgU3RyaW5nUmVhZGVyIHN0cmluZ1JlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIoeG1sZG9jKTsKLSAgICAgICAgWE1MU3RyZWFtUmVhZGVyIHhyZHIgPQotICAgICAgICAgICAgWE1MSW5wdXRGYWN0b3J5Lm5ld0luc3RhbmNlKCkuY3JlYXRlWE1MU3RyZWFtUmVhZGVyKHN0cmluZ1JlYWRlcik7Ci0KLSAgICAgICAgT2JqZWN0IG9iaiA9IHVubWFyc2hhbGxlci51bm1hcnNoYWwoeHJkcik7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhleHBlY3RlZCwgb2JqKTsKLQotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk9LIGZvciAiICsgZXhwZWN0ZWQpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHRlc3RCeU5hbWVCZWFuVW5tYXJzaGFsbCgpCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIEJpbmRpbmdDb25maWdEb2N1bWVudCBiY2RvYyA9IGdldEJpbmRpbmdDb25maWdEb2N1bWVudCgpOwotCi0gICAgICAgIEJpbmRpbmdDb250ZXh0IGJpbmRpbmdDb250ZXh0ID0KLSAgICAgICAgICAgIEJpbmRpbmdDb250ZXh0RmFjdG9yeS5jcmVhdGVCaW5kaW5nQ29udGV4dChiY2RvYyk7Ci0KLSAgICAgICAgVW5tYXJzaGFsbGVyIHVubWFyc2hhbGxlciA9IGJpbmRpbmdDb250ZXh0LmNyZWF0ZVVubWFyc2hhbGxlcigpOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKHVubWFyc2hhbGxlcik7Ci0KLSAgICAgICAgLy9UT0RPOiByZW1vdmUgaGFyZCBjb2RlZCBwYXRoCi0gICAgICAgIEZpbGUgZG9jID0gbmV3IEZpbGUoInRlc3QvY2FzZXMvbWFyc2hhbC9kb2MueG1sIik7Ci0KLQotICAgICAgICBmaW5hbCBYTUxJbnB1dEZhY3RvcnkgeG1sSW5wdXRGYWN0b3J5ID0gWE1MSW5wdXRGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAgIFhNTFN0cmVhbVJlYWRlciB4cmRyID0KLSAgICAgICAgICAgIHhtbElucHV0RmFjdG9yeS5jcmVhdGVYTUxTdHJlYW1SZWFkZXIobmV3IEZpbGVSZWFkZXIoZG9jKSk7Ci0KLSAgICAgICAgT2JqZWN0IG9iaiA9IHVubWFyc2hhbGxlci51bm1hcnNoYWwoeHJkcik7Ci0KLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJvYmogPSAiICsgb2JqKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0UGVyZkJ5TmFtZUJlYW5Vbm1hcnNoYWxsKCkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgQmluZGluZ0NvbmZpZ0RvY3VtZW50IGJjZG9jID0gZ2V0QmluZGluZ0NvbmZpZ0RvY3VtZW50KCk7Ci0KLSAgICAgICAgQmluZGluZ0NvbnRleHQgYmluZGluZ0NvbnRleHQgPQotICAgICAgICAgICAgQmluZGluZ0NvbnRleHRGYWN0b3J5LmNyZWF0ZUJpbmRpbmdDb250ZXh0KGJjZG9jKTsKLQotICAgICAgICBVbm1hcnNoYWxsZXIgdW5tYXJzaGFsbGVyID0gYmluZGluZ0NvbnRleHQuY3JlYXRlVW5tYXJzaGFsbGVyKCk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwodW5tYXJzaGFsbGVyKTsKLQotICAgICAgICAvL1RPRE86IHJlbW92ZSBoYXJkIGNvZGVkIHBhdGgKLSAgICAgICAgRmlsZSBkb2MgPSBuZXcgRmlsZSgidGVzdC9jYXNlcy9tYXJzaGFsL2RvYy54bWwiKTsKLSAgICAgICAgZmluYWwgRmlsZVJlYWRlciBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoZG9jKTsKLSAgICAgICAgQ2hhckFycmF5V3JpdGVyIGN3ID0gbmV3IENoYXJBcnJheVdyaXRlcigpOwotCi0gICAgICAgIGJ1ZmZlcmVkU3RyZWFtQ29weShmaWxlUmVhZGVyLCBjdyk7Ci0gICAgICAgIGZpbmFsIGNoYXJbXSBjaGFycyA9IGN3LnRvQ2hhckFycmF5KCk7Ci0gICAgICAgIGZpbmFsIENoYXJBcnJheVJlYWRlciBjciA9IG5ldyBDaGFyQXJyYXlSZWFkZXIoY2hhcnMpOwotCi0gICAgICAgIGZpbmFsIGludCB0cmlhbHMgPSA1MDAwOwotCi0gICAgICAgIGZpbmFsIFhNTElucHV0RmFjdG9yeSB4bWxJbnB1dEZhY3RvcnkgPSBYTUxJbnB1dEZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQotICAgICAgICBmaW5hbCBsb25nIGJlZm9yZV9taWxsaXMgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0cmlhbHM7IGkrKykgewotICAgICAgICAgICAgY3IucmVzZXQoKTsKLSAgICAgICAgICAgIFhNTFN0cmVhbVJlYWRlciB4cmRyID0KLSAgICAgICAgICAgICAgICB4bWxJbnB1dEZhY3RvcnkuY3JlYXRlWE1MU3RyZWFtUmVhZGVyKGNyKTsKLQotICAgICAgICAgICAgT2JqZWN0IG9iaiA9IHVubWFyc2hhbGxlci51bm1hcnNoYWwoeHJkcik7Ci0KLSAgICAgICAgICAgIGlmICgoaSAlIDEwMDApID09IDApCi0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJpPSIgKyBpICsgIlx0b2JqID0gIiArIG9iaik7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWwgbG9uZyBhZnRlcl9taWxsaXMgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgICAgZmluYWwgbG9uZyBkaWZmID0gKGFmdGVyX21pbGxpcyAtIGJlZm9yZV9taWxsaXMpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm1pbGxpc2Vjb25kczogIiArIGRpZmYgKyAiIHRyaWFsczogIiArIHRyaWFscyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibWlsbGlzZWNvbmRzIFBFUiB0cmlhbDogIiArIChkaWZmIC8gKGRvdWJsZSl0cmlhbHMpKTsKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgc3RhdGljIHZvaWQgYnVmZmVyZWRTdHJlYW1Db3B5KFJlYWRlciBpbiwgV3JpdGVyIG91dCkKLSAgICAgICAgdGhyb3dzIElPRXhjZXB0aW9uCi0gICAgewotICAgICAgICBpbnQgY2hhcnNSZWFkOwotICAgICAgICBjaGFyW10gYnVmID0gbmV3IGNoYXJbMTAyNF07Ci0KLSAgICAgICAgd2hpbGUgKChjaGFyc1JlYWQgPSBpbi5yZWFkKGJ1ZikpICE9IC0xKSB7Ci0gICAgICAgICAgICBvdXQud3JpdGUoYnVmLCAwLCBjaGFyc1JlYWQpOwotICAgICAgICB9Ci0gICAgfQotCi0KLSAgICBwcml2YXRlIEJpbmRpbmdDb25maWdEb2N1bWVudCBnZXRCaW5kaW5nQ29uZmlnRG9jdW1lbnQoKQotICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIFhtbEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgLy9UT0RPOiByZW1vdmUgaGFyZCBjb2RlZCBwYXRoCi0gICAgICAgIEZpbGUgbG9jID0gbmV3IEZpbGUoInRlc3QvY2FzZXMvbWFyc2hhbC9leGFtcGxlX2NvbmZpZy54bWwiKTsKLSAgICAgICAgQmluZGluZ0NvbmZpZ0RvY3VtZW50IGJjZG9jID0gQmluZGluZ0NvbmZpZ0RvY3VtZW50LkZhY3RvcnkucGFyc2UobG9jKTsKLSAgICAgICAgcmV0dXJuIGJjZG9jOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIFVubWFyc2hhbGxlciBnZXRTaW1wbGVVbm1hcnNoYWxsZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIEJpbmRpbmdGaWxlIGJmID0gbmV3IEJpbmRpbmdGaWxlKCk7Ci0gICAgICAgIEJpbmRpbmdDb25maWdEb2N1bWVudCBiaW5kaW5nQ29uZmlnRG9jdW1lbnQgPSBiZi53cml0ZSgpOwotCi0gICAgICAgIEJpbmRpbmdDb250ZXh0IGJpbmRpbmdDb250ZXh0ID0KLSAgICAgICAgICAgIEJpbmRpbmdDb250ZXh0RmFjdG9yeS5jcmVhdGVCaW5kaW5nQ29udGV4dChiaW5kaW5nQ29uZmlnRG9jdW1lbnQpOwotCi0gICAgICAgIFVubWFyc2hhbGxlciB1bm1hcnNoYWxsZXIgPSBiaW5kaW5nQ29udGV4dC5jcmVhdGVVbm1hcnNoYWxsZXIoKTsKLSAgICAgICAgcmV0dXJuIHVubWFyc2hhbGxlcjsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkKLSAgICB7Ci0gICAgICAgIGp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9OYW1ld29ybGRUZXN0LmphdmEgYi92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvTmFtZXdvcmxkVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDk0YmNmLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9OYW1ld29ybGRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBkcnRjYXNlczsKLQotaW1wb3J0IG9yZy5vcGVudXJpLm5hbWV3b3JsZC5OYW1ld29ybGREb2N1bWVudDsKLWltcG9ydCBvcmcub3BlbnVyaS5uYW1ld29ybGQuTmFtZXdvcmxkRG9jdW1lbnQuTmFtZXdvcmxkOwotaW1wb3J0IG9yZy5vcGVudXJpLm5hbWV3b3JsZC5Mb2M7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxCZWFuczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotcHVibGljIGNsYXNzIE5hbWV3b3JsZFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQotewotICAgIHB1YmxpYyBOYW1ld29ybGRUZXN0KFN0cmluZyBuYW1lKSB7IHN1cGVyKG5hbWUpOyB9Ci0gICAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeyByZXR1cm4gbmV3IFRlc3RTdWl0ZShOYW1ld29ybGRUZXN0LmNsYXNzKTsgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RXb3JsZDEoKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBOYW1ld29ybGREb2N1bWVudCBkb2MgPSAoTmFtZXdvcmxkRG9jdW1lbnQpCi0gICAgICAgICAgICAgICAgICAgIFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKFRlc3RFbnYueGJlYW5DYXNlKCJuYW1ld29ybGQvd29ybGQxLnhtbCIpKTsKLQotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKG5ldyBRTmFtZSgiaHR0cDovL29wZW51cmkub3JnL25hbWV3b3JsZCIsICJuYW1ld29ybGQiKSwgZG9jLnNjaGVtYVR5cGUoKS5nZXREb2N1bWVudEVsZW1lbnROYW1lKCkpOwotCi0gICAgICAgIFFOYW1lW10gY29udGVudHMgPSBuZXcgUU5hbWVbXQotICAgICAgICB7Ci0gICAgICAgICAgICBuZXcgUU5hbWUoImh0dHA6Ly9iYXIuY29tLyIsICJiYXJjaXR5IiksCi0gICAgICAgICAgICBuZXcgUU5hbWUoImh0dHA6Ly9mb28uY29tLyIsICJmb290b3duIiksCi0gICAgICAgICAgICBuZXcgUU5hbWUoImh0dHA6Ly9iYXIuY29tLyIsICJiYXJ2aWxsYWdlIiksCi0gICAgICAgICAgICBuZXcgUU5hbWUoImh0dHA6Ly9iYXIuY29tLyIsICJiYXJ0b3duIiksCi0gICAgICAgICAgICBuZXcgUU5hbWUoImh0dHA6Ly9mb28uY29tLyIsICJmb292aWxsYWdlIiksCi0gICAgICAgICAgICBuZXcgUU5hbWUoImh0dHA6Ly9iYXIuY29tLyIsICJiYXJ2aWxsYWdlIiksCi0gICAgICAgICAgICBuZXcgUU5hbWUoImh0dHA6Ly9mb28uY29tLyIsICJmb29jaXR5IiksCi0gICAgICAgICAgICBuZXcgUU5hbWUoImh0dHA6Ly9iYXIuY29tLyIsICJiYXJ0b3duIiksCi0gICAgICAgICAgICBuZXcgUU5hbWUoImh0dHA6Ly9mb28uY29tLyIsICJmb292aWxsYWdlIiksCi0gICAgICAgICAgICBuZXcgUU5hbWUoImh0dHA6Ly9mb28uY29tLyIsICJmb290b3duIiksCi0gICAgICAgICAgICBuZXcgUU5hbWUoImh0dHA6Ly9iYXIuY29tLyIsICJiYXJ2aWxsYWdlIiksCi0gICAgICAgICAgICBuZXcgUU5hbWUoImh0dHA6Ly9mb28uY29tLyIsICJmb292aWxsYWdlIiksCi0gICAgICAgIH07Ci0gICAgICAgIGludCB0ID0gMDsKLQotICAgICAgICBOYW1ld29ybGQgd29ybGQgPSBkb2MuZ2V0TmFtZXdvcmxkKCk7Ci0gICAgICAgIE5hbWV3b3JsZC5Jc2xhbmRbXSBpc2xhbmRzID0gd29ybGQuZ2V0SXNsYW5kQXJyYXkoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpc2xhbmRzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBMb2NbXSBsb2NzID0gaXNsYW5kc1tpXS5nZXRMb2NhdGlvbkFycmF5KCk7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGxvY3MubGVuZ3RoOyBqKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTG9jLlJlZmVyZW5jZVtdIHJlZnMgPSBsb2NzW2pdLmdldFJlZmVyZW5jZUFycmF5KCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCByZWZzLmxlbmd0aDsgaysrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhjb250ZW50c1t0KytdLCByZWZzW2tdLmdldFRvKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RBY2Nlc3NCeU5hbWUoKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBOYW1ld29ybGREb2N1bWVudCBkb2MgPSAoTmFtZXdvcmxkRG9jdW1lbnQpCi0gICAgICAgICAgICAgICAgICAgIFhtbExvYWRlci5GYWN0b3J5LnBhcnNlKFRlc3RFbnYueGJlYW5DYXNlKCJuYW1ld29ybGQvd29ybGQxLnhtbCIpLAotICAgICAgICAgICAgICAgICAgICBOYW1ld29ybGREb2N1bWVudC50eXBlKTsKLSAgICAgICAgU3RyaW5nW10gY29udGVudHMgPSBuZXcgU3RyaW5nW10KLSAgICAgICAgewotICAgICAgICAgICAgImh0dHA6Ly9mb28uY29tLyIsCi0gICAgICAgICAgICAiZm9vY2l0eSIsCi0gICAgICAgICAgICAiZm9vdG93biIsCi0gICAgICAgICAgICAiZm9vdmlsbGFnZSIsCi0gICAgICAgICAgICAiaHR0cDovL2Jhci5jb20vIiwKLSAgICAgICAgICAgICJiYXJjaXR5IiwKLSAgICAgICAgICAgICJiYXJ0b3duIiwKLSAgICAgICAgICAgICJiYXJ2aWxsYWdlIiwKLSAgICAgICAgfTsKLSAgICAgICAgaW50IHQgPSAwOwotICAgICAgICBOYW1ld29ybGQgd29ybGQgPSAoTmFtZXdvcmxkKWRvYy5lbGVtZW50QnlOYW1lKG5ldyBOYW1lKCJodHRwOi8vb3BlbnVyaS5vcmcvbmFtZXdvcmxkIiwgIm5hbWV3b3JsZCIpLCAwKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3b3JsZC5jb3VudE9mRWxlbWVudEJ5TmFtZShuZXcgTmFtZSgiaHR0cDovL29wZW51cmkub3JnL25hbWV3b3JsZCIsICJpc2xhbmQiKSk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgTmFtZXdvcmxkLklzbGFuZCBpc2xhbmQgPSAoTmFtZXdvcmxkLklzbGFuZCl3b3JsZC5lbGVtZW50QnlOYW1lKG5ldyBOYW1lKCJodHRwOi8vb3BlbnVyaS5vcmcvbmFtZXdvcmxkIiwgImlzbGFuZCIpLCBpKTsKLSAgICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoY29udGVudHNbdCsrXSwgKChTaW1wbGVWYWx1ZSlpc2xhbmQuYXR0cmlidXRlQnlOYW1lKG5ldyBOYW1lKCJ0YXJnZXROYW1lc3BhY2UiKSkpLnN0cmluZ1ZhbHVlKCkpOwotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBpc2xhbmQuY291bnRPZkVsZW1lbnRCeU5hbWUobmV3IE5hbWUoICJodHRwOi8vb3BlbnVyaS5vcmcvbmFtZXdvcmxkIiwgImxvY2F0aW9uIikpOyBqKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTG9jIGxvYyA9IChMb2MpaXNsYW5kLmVsZW1lbnRCeU5hbWUobmV3IE5hbWUoImh0dHA6Ly9vcGVudXJpLm9yZy9uYW1ld29ybGQiLCAibG9jYXRpb24iKSwgaik7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhjb250ZW50c1t0KytdLCAoKFNpbXBsZVZhbHVlKWxvYy5hdHRyaWJ1dGVCeU5hbWUobmV3IE5hbWUoIm5hbWUiKSkpLnN0cmluZ1ZhbHVlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgICovCi0KLX0KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9RTmFtZVNldFRlc3QuamF2YSBiL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9RTmFtZVNldFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc2YmJmMS4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvUU5hbWVTZXRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNTUgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBkcnRjYXNlczsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBqYXZhLnRleHQuRGVjaW1hbEZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOwotaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRCdWlsZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLXB1YmxpYyBjbGFzcyBRTmFtZVNldFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQotewotICAgIHB1YmxpYyBRTmFtZVNldFRlc3QoU3RyaW5nIG5hbWUpIHsgc3VwZXIobmFtZSk7IH0KLSAgICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7IHJldHVybiBuZXcgVGVzdFN1aXRlKFFOYW1lU2V0VGVzdC5jbGFzcyk7IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGZvcm1hdChpbnQgaW5kZW50LCBpbnQgaXRlciwgU3RyaW5nIHAsIFFOYW1lU2V0QnVpbGRlciBzZXQpCi0gICAgewotICAgICAgICAvKgotICAgICAgICBTeXN0ZW0uZXJyLnByaW50KG5ldyBEZWNpbWFsRm9ybWF0KCIwMDAwMCAiKS5mb3JtYXQoaXRlcikpOwotICAgICAgICB3aGlsZSAoaW5kZW50LS0gPiAwKQotICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludCgnICcpOwotICAgICAgICBTeXN0ZW0uZXJyLnByaW50KHApOwotICAgICAgICBTeXN0ZW0uZXJyLnByaW50KCIgPSAiKTsKLSAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKHNldC5kdW1wKCkpOwotICAgICAgICAqLwotCi0gICAgICAgIHJldHVybiAiY2FzZSMgIiArIGl0ZXIgKyAiICIgKyBwICsgIiAiICsgc2V0LnRvU3RyaW5nKCk7Ci0KLSAgICB9Ci0KLQotICAgIHB1YmxpYyB2b2lkIHRlc3RRTmFtZVNldHMoKQotICAgIHsKLSAgICAgICAgaW50IGl0ZXJhdGlvbnMgPSAxMDAwMDsKLSAgICAgICAgaW50IHNlZWQgPSAwOwotICAgICAgICBpbnQgc3RvcGF0ID0gLTE7Ci0KLSAgICAgICAgUmFuZG9tIHJuZCA9IG5ldyBSYW5kb20oc2VlZCk7Ci0gICAgICAgIFN0cmluZ1tdIGxvY2FsbmFtZSA9IHsiYSIsICJiIiwgImMiLCAiZCIsICJlIn07Ci0gICAgICAgIFN0cmluZ1tdIG5hbWVzcGFjZSA9IHsibjEiLCAibjIiLCAibjMiLCAibjQiLCAibjUifTsKLSAgICAgICAgaW50IHdpZHRoID0gbG9jYWxuYW1lLmxlbmd0aDsKLQotICAgICAgICBRTmFtZVtdIG5hbWUgPSBuZXcgUU5hbWVbd2lkdGggKiBuYW1lc3BhY2UubGVuZ3RoXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG5hbWVzcGFjZS5sZW5ndGg7IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBuYW1lW2kgKyB3aWR0aCAqIGpdID0gbmV3IFFOYW1lKG5hbWVzcGFjZVtqXSwgbG9jYWxuYW1lW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFN0YWNrIHRlc3RzdGFjayA9IG5ldyBTdGFjaygpOyAvLyBzdGFjayBvZiBzZXRzCi0gICAgICAgIFN0YWNrIHRyYWNrc3RhY2sgPSBuZXcgU3RhY2soKTsgLy8gc3RhY2sgb2YgYm9vbGVhbiBhcnJheXMKLQotICAgICAgICBRTmFtZVNldEJ1aWxkZXIgY3VycmVudCA9IG5ldyBRTmFtZVNldEJ1aWxkZXIoKTsKLSAgICAgICAgYm9vbGVhbltdIGNvbnRlbnRzID0gbmV3IGJvb2xlYW5bd2lkdGggKiBuYW1lc3BhY2UubGVuZ3RoXTsKLSAgICAgICAgYm9vbGVhbltdIHRlbXA7Ci0gICAgICAgIGludCBpID0gMDsKLSAgICAgICAgaW50IGogPSAwOwotCi0gICAgICAgIGZvciAoaW50IGwgPSAwOyBsIDwgaXRlcmF0aW9uczsgbCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBmb3IgZGVidWdnaW5nCi0KLSAgICAgICAgICAgIGlmIChsID09IHN0b3BhdCkKLSAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIldlJ3JlIGhlcmUiKTsKLQotICAgICAgICAgICAgLy8gYXBwbHkgYSByYW5kb20gb3BlcmF0aW9uCi0KLSAgICAgICAgICAgIGlmIChybmQubmV4dEludCgzKSAhPSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGkgPSBybmQubmV4dEludCh3aWR0aCAtIDEpOyAvLyBkb24ndCBkbyB0aGUgbGFzdCBvbmUgZm9yIGlzQWxsIHRlc3QKLSAgICAgICAgICAgICAgICBqID0gcm5kLm5leHRJbnQobmFtZXNwYWNlLmxlbmd0aCAtIDEpOyAvLyBkb24ndCBkbyB0aGUgbGFzdCBvbmUgZm9yIGlzQWxsIHRlc3QKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU3RyaW5nIGxhYmVsOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHRlc3RzdGFjay5zaXplKCkgPCAxID8gMjQgOiBybmQubmV4dEludChpdGVyYXRpb25zIC0gbCA+IHRlc3RzdGFjay5zaXplKCkgPyAyNCA6IDUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHRlc3RzdGFjay5wdXNoKGN1cnJlbnQpOwotICAgICAgICAgICAgICAgICAgICB0cmFja3N0YWNrLnB1c2goY29udGVudHMpOwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gbmV3IFFOYW1lU2V0QnVpbGRlcigpOwotICAgICAgICAgICAgICAgICAgICBjb250ZW50cyA9IG5ldyBib29sZWFuW3dpZHRoICogbmFtZXNwYWNlLmxlbmd0aF07Ci0gICAgICAgICAgICAgICAgICAgIGxhYmVsID0gIm5ldyI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSAxOToKLSAgICAgICAgICAgICAgICBjYXNlIDIwOgotICAgICAgICAgICAgICAgIGNhc2UgMjI6Ci0gICAgICAgICAgICAgICAgICAgIHRlc3RzdGFjay5wdXNoKGN1cnJlbnQpOwotICAgICAgICAgICAgICAgICAgICB0cmFja3N0YWNrLnB1c2goY29udGVudHMpOwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gbmV3IFFOYW1lU2V0QnVpbGRlcigpOwotICAgICAgICAgICAgICAgICAgICBjb250ZW50cyA9IG5ldyBib29sZWFuW3dpZHRoICogbmFtZXNwYWNlLmxlbmd0aF07Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJuZC5uZXh0SW50KDIpID09IDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuaW52ZXJ0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IHdpZHRoOyBrKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHNbayArIHdpZHRoICogKG5hbWVzcGFjZS5sZW5ndGggLSAxKV0gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaCA9IDA7IGggPCBuYW1lc3BhY2UubGVuZ3RoIC0gMTsgaCsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocm5kLm5leHRJbnQoMikgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnJlbW92ZU5hbWVzcGFjZShuYW1lc3BhY2VbaF0pOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuYWRkTmFtZXNwYWNlKG5hbWVzcGFjZVtoXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHNbd2lkdGggLSAxICsgd2lkdGggKiBoXSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IHdpZHRoIC0gMTsgaysrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChybmQubmV4dEludCgyKSA9PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnJlbW92ZShuYW1lW2sgKyB3aWR0aCAqIGhdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmFkZChuYW1lW2sgKyB3aWR0aCAqIGhdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHNbayArIHdpZHRoICogaF0gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBsYWJlbCA9ICJyYW5kb20iOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudC5hZGRBbGwoKFFOYW1lU2V0U3BlY2lmaWNhdGlvbil0ZXN0c3RhY2sucG9wKCkpOwotICAgICAgICAgICAgICAgICAgICB0ZW1wID0gKGJvb2xlYW5bXSl0cmFja3N0YWNrLnBvcCgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IHdpZHRoICogbmFtZXNwYWNlLmxlbmd0aDsgaysrKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBba10pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHNba10gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBsYWJlbCA9ICJhZGQgc2V0IjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQucmVtb3ZlQWxsKChRTmFtZVNldFNwZWNpZmljYXRpb24pdGVzdHN0YWNrLnBvcCgpKTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcCA9IChib29sZWFuW10pdHJhY2tzdGFjay5wb3AoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCB3aWR0aCAqIG5hbWVzcGFjZS5sZW5ndGg7IGsrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wW2tdKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzW2tdID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGxhYmVsID0gInJlbW92ZSBzZXQiOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudC5yZXN0cmljdCgoUU5hbWVTZXRTcGVjaWZpY2F0aW9uKXRlc3RzdGFjay5wb3AoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXAgPSAoYm9vbGVhbltdKXRyYWNrc3RhY2sucG9wKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgd2lkdGggKiBuYW1lc3BhY2UubGVuZ3RoOyBrKyspCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRlbXBba10pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHNba10gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSAicmVzdHJpY3Qgc2V0IjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICAgICAgICAgIGxhYmVsID0gInVuaW9uIjsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IG5ldyBRTmFtZVNldEJ1aWxkZXIoY3VycmVudC51bmlvbigoUU5hbWVTZXRTcGVjaWZpY2F0aW9uKXRlc3RzdGFjay5wb3AoKSkpOwotICAgICAgICAgICAgICAgICAgICB0ZW1wID0gKGJvb2xlYW5bXSl0cmFja3N0YWNrLnBvcCgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IHdpZHRoICogbmFtZXNwYWNlLmxlbmd0aDsgaysrKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBba10pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHNba10gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBsYWJlbCA9ICJ1bmlvbiI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAgICAgICBsYWJlbCA9ICJpbnRlcnNlY3QiOwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gbmV3IFFOYW1lU2V0QnVpbGRlcihjdXJyZW50LmludGVyc2VjdCgoUU5hbWVTZXRTcGVjaWZpY2F0aW9uKXRlc3RzdGFjay5wb3AoKSkpOwotICAgICAgICAgICAgICAgICAgICB0ZW1wID0gKGJvb2xlYW5bXSl0cmFja3N0YWNrLnBvcCgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IHdpZHRoICogbmFtZXNwYWNlLmxlbmd0aDsgaysrKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZW1wW2tdKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzW2tdID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGxhYmVsID0gImludGVyc2VjdCI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gbmV3IFFOYW1lU2V0QnVpbGRlcihjdXJyZW50KTsKLSAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSAiY29weSI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSA2OgotICAgICAgICAgICAgICAgIGNhc2UgNzoKLSAgICAgICAgICAgICAgICBjYXNlIDg6Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuYWRkKG5hbWVbaSArIHdpZHRoICogal0pOwotICAgICAgICAgICAgICAgICAgICBjb250ZW50c1tpICsgd2lkdGggKiBqXSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGxhYmVsID0gImFkZCBvbmUgIiArIG5hbWVbaSArIHdpZHRoICogal07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSA5OgotICAgICAgICAgICAgICAgIGNhc2UgMTA6Ci0gICAgICAgICAgICAgICAgY2FzZSAxMToKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudC5yZW1vdmUobmFtZVtpICsgd2lkdGggKiBqXSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzW2kgKyB3aWR0aCAqIGpdID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGxhYmVsID0gInJlbW92ZSBvbmUgIiArIG5hbWVbaSArIHdpZHRoICogal07Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSAxMjoKLSAgICAgICAgICAgICAgICBjYXNlIDEzOgotICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmFkZE5hbWVzcGFjZShuYW1lc3BhY2Vbal0pOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IHdpZHRoOyBrKyspCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50c1trICsgd2lkdGggKiBqXSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGxhYmVsID0gImFkZCBuYW1lc3BhY2UgIiArIG5hbWVzcGFjZVtqXTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIDE0OgotICAgICAgICAgICAgICAgIGNhc2UgMTU6Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQucmVtb3ZlTmFtZXNwYWNlKG5hbWVzcGFjZVtqXSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgd2lkdGg7IGsrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzW2sgKyB3aWR0aCAqIGpdID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGxhYmVsID0gInJlbW92ZSBuYW1lc3BhY2UgIiArIG5hbWVzcGFjZVtqXTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIDE2OgotICAgICAgICAgICAgICAgIGNhc2UgMTc6Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuaW52ZXJ0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgd2lkdGggKiBuYW1lc3BhY2UubGVuZ3RoOyBrKyspCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50c1trXSA9ICFjb250ZW50c1trXTsKLSAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSAiaW52ZXJ0IjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIDE4OgotICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gbmV3IFFOYW1lU2V0QnVpbGRlcihjdXJyZW50LmludmVyc2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgd2lkdGggKiBuYW1lc3BhY2UubGVuZ3RoOyBrKyspCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50c1trXSA9ICFjb250ZW50c1trXTsKLSAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSAiaW52ZXJzZSI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbihmb3JtYXQodGVzdHN0YWNrLnNpemUoKSwgbCwgbGFiZWwsIGN1cnJlbnQpKTsKLQotICAgICAgICAgICAgLy8gdGhlbiwgdmVyaWZ5IGN1cnJlbnQgbWF0Y2hlcyBjb250ZW50cwotICAgICAgICAgICAgaW50IGNvdW50ID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgd2lkdGggKiBuYW1lc3BhY2UubGVuZ3RoOyBrKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoZm9ybWF0KDAsIGwsICJDb250ZW50IG1pc21hdGNoICIgKyBuYW1lW2tdLCBjdXJyZW50KSwgKGN1cnJlbnQuY29udGFpbnMobmFtZVtrXSkgPT0gY29udGVudHNba10pKTsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRlc3RwcmludCgwLCBsLCAiRVJST1IgT04gIiArIG5hbWVba10sIGN1cnJlbnQpOwotICAgICAgICAgICAgICAgICAgICAvLyB0ZXN0cHJpbnQoMCwgbCwgImV4cGVjdGVkICIgKyBjb250ZW50c1trXSArICIsIGdvdCAiICsgIWNvbnRlbnRzW2tdLCBjdXJyZW50KTsKLSAgICAgICAgICAgICAgICAgICAgLy8gU3lzdGVtLmV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjb250ZW50c1trXSkKLSAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoZm9ybWF0KDAsIGwsICJFUlJPUjogaXNFbXB0eSBpcyB3cm9uZyIsIGN1cnJlbnQpLCAoKGNvdW50ID09IDApID09IGN1cnJlbnQuaXNFbXB0eSgpKSk7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gdGVzdHByaW50KDAsIGwsICJFUlJPUjogaXNFbXB0eSBpcyB3cm9uZyIsIGN1cnJlbnQpOwotICAgICAgICAgICAgICAgIC8vIHRlc3RwcmludCgwLCBsLCAiZXhwZWN0ZWQgIiArIChjb3VudCA9PSAwKSArICIsIGdvdCAiICsgIShjb3VudCA9PSAwKSwgY3VycmVudCk7Ci0gICAgICAgICAgICAgICAgLy8gU3lzdGVtLmV4aXQoMSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGZvcm1hdCgwLCBsLCAiRVJST1I6IGlzQWxsIGlzIHdyb25nIiwgY3VycmVudCksIChjb3VudCA9PSB3aWR0aCAqIG5hbWVzcGFjZS5sZW5ndGgpID09IGN1cnJlbnQuaXNBbGwoKSk7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gdGVzdHByaW50KDAsIGwsICJFUlJPUjogaXNBbGwgaXMgd3JvbmciLCBjdXJyZW50KTsKLSAgICAgICAgICAgICAgICAvLyB0ZXN0cHJpbnQoMCwgbCwgImV4cGVjdGVkICIgKyAoY291bnQgPT0gd2lkdGggKiBuYW1lc3BhY2UubGVuZ3RoKSArICIsIGdvdCAiICsgIShjb3VudCA9PSB3aWR0aCAqIG5hbWVzcGFjZS5sZW5ndGgpLCBjdXJyZW50KTsKLSAgICAgICAgICAgICAgICAvLyBTeXN0ZW0uZXhpdCgxKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gdGVzdCBpc0Rpc2pvaW50IGFuZCBjb250YWluc0FsbAotICAgICAgICAgICAgaWYgKHRlc3RzdGFjay5zaXplKCkgPj0gMSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBib29sZWFuIGRpc2pvaW50ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB0ZW1wID0gKGJvb2xlYW5bXSl0cmFja3N0YWNrLnBlZWsoKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IHdpZHRoICogbmFtZXNwYWNlLmxlbmd0aDsgaysrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBba10gJiYgY29udGVudHNba10pCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc2pvaW50ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShmb3JtYXQoMCwgbCwgIkVSUk9SOiBkaXNqb2ludCBpcyB3cm9uZyIsIGN1cnJlbnQpLCBkaXNqb2ludCA9PSBjdXJyZW50LmlzRGlzam9pbnQoKFFOYW1lU2V0U3BlY2lmaWNhdGlvbil0ZXN0c3RhY2sucGVlaygpKSk7Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyB0ZXN0cHJpbnQoMCwgbCwgIkVSUk9SOiBkaXNqb2ludCBpcyB3cm9uZyIsIGN1cnJlbnQpOwotICAgICAgICAgICAgICAgICAgICAvLyB0ZXN0cHJpbnQoMCwgbCwgImV4cGVjdGVkICIgKyBkaXNqb2ludCArICIsIGdvdCAiICsgIWRpc2pvaW50LCAoUU5hbWVTZXRCdWlsZGVyKXRlc3RzdGFjay5wZWVrKCkpOwotICAgICAgICAgICAgICAgICAgICAvLyBTeXN0ZW0uZXhpdCgxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYm9vbGVhbiBjb250YWluc0FsbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCB3aWR0aCAqIG5hbWVzcGFjZS5sZW5ndGg7IGsrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wW2tdICYmICFjb250ZW50c1trXSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbnNBbGwgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGZvcm1hdCgwLCBsLCAiRVJST1I6IGNvbnRhaW5zQWxsIGlzIHdyb25nIiwgY3VycmVudCksIGNvbnRhaW5zQWxsID09IGN1cnJlbnQuY29udGFpbnNBbGwoKFFOYW1lU2V0U3BlY2lmaWNhdGlvbil0ZXN0c3RhY2sucGVlaygpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9RTmFtZVRlc3RzLmphdmEgYi92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvUU5hbWVUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjY2N2UxLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9RTmFtZVRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBkcnRjYXNlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sUU5hbWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxCZWFuczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1wdWJsaWMgY2xhc3MgUU5hbWVUZXN0cyBleHRlbmRzIFRlc3RDYXNlCi17Ci0gICAgcHVibGljIFFOYW1lVGVzdHMoU3RyaW5nIG5hbWUpIHsgc3VwZXIobmFtZSk7IH0KLSAgICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7IHJldHVybiBuZXcgVGVzdFN1aXRlKFFOYW1lVGVzdHMuY2xhc3MpOyB9Ci0KLSAgICBzdGF0aWMgU3RyaW5nW10gX2FyZ3M7Ci0gICAgc3RhdGljIFN0cmluZyBfdGVzdDsKLQotICAgIHB1YmxpYyB2b2lkIHRlc3RRTmFtZSAoICkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgU3RyaW5nIHNjaGVtYSA9Ci0gICAgICAgICAgICAiPHhzOnNjaGVtYSB4bWxuczp4cz0naHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEnPlxuIiArCi0gICAgICAgICAgICAiIiArCi0gICAgICAgICAgICAiICA8eHM6ZWxlbWVudCBuYW1lPSdhbnknPlxuIiArCi0gICAgICAgICAgICAiICA8L3hzOmVsZW1lbnQ+XG4iICsKLSAgICAgICAgICAgICIiICsKLSAgICAgICAgICAgICI8L3hzOnNjaGVtYT5cbiIgKwotICAgICAgICAgICAgIiI7Ci0KLSAgICAgICAgU2NoZW1hVHlwZUxvYWRlciBzdGwgPQotICAgICAgICAgICAgWG1sQmVhbnMubG9hZFhzZCggbmV3IFhtbE9iamVjdFtdIHsKLSAgICAgICAgICAgICAgICBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZShzY2hlbWEpIH0gKTsKLQotICAgICAgICAKLSAgICAgICAgLy8KLSAgICAgICAgLy8gVGVzdCB0aGUgc2V0X1hNTE5hbWUgZnVuY3Rpb24gb24gWG1sUU5hbWVJbXBsCi0gICAgICAgIC8vCi0KLSAgICAgICAgU3RyaW5nIG5zID0KLSAgICAgICAgICAgICJ4bWxuczp4c2k9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJyAiICsKLSAgICAgICAgICAgICAgICAieG1sbnM6eHM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJyI7Ci0gICAgICAgIAotICAgICAgICBYbWxPYmplY3Qgc291cmNlRG9jdW1lbnQgPQotICAgICAgICAgICAgc3RsLnBhcnNlKAotICAgICAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3hzOlFOYW1lJyB4bWxuczp4eHg9J3h4eC5jb20nPiIgKwotICAgICAgICAgICAgICAgICAgICAieHh4OmFiYzwvYW55PiIsIG51bGwsIG51bGwgKTsKLQotICAgICAgICBYbWxDdXJzb3Igc291cmNlQ3Vyc29yID0gc291cmNlRG9jdW1lbnQubmV3Q3Vyc29yKCk7Ci0KLSAgICAgICAgc291cmNlQ3Vyc29yLnRvRmlyc3RDaGlsZCgpOwotCi0gICAgICAgIFhtbFFOYW1lIHNvdXJjZVFOYW1lID0gKFhtbFFOYW1lKSBzb3VyY2VDdXJzb3IuZ2V0T2JqZWN0KCk7Ci0KLSAgICAgICAgWG1sT2JqZWN0IHRhcmdldERvY3VtZW50ID0KLSAgICAgICAgICAgIHN0bC5wYXJzZSgKLSAgICAgICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSd4czpRTmFtZSc+IiArCi0gICAgICAgICAgICAgICAgICAgICI8L2FueT4iLCBudWxsLCBudWxsICk7Ci0KLSAgICAgICAgWG1sQ3Vyc29yIHRhcmdldEN1cnNvciA9IHRhcmdldERvY3VtZW50Lm5ld0N1cnNvcigpOwotCi0gICAgICAgIHRhcmdldEN1cnNvci50b0ZpcnN0Q2hpbGQoKTsKLQotICAgICAgICBYbWxRTmFtZSB0YXJnZXRRTmFtZSA9IChYbWxRTmFtZSkgdGFyZ2V0Q3Vyc29yLmdldE9iamVjdCgpOwotCi0gICAgICAgIHRhcmdldFFOYW1lLnNldCggc291cmNlUU5hbWUgKTsKLQotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgKLSAgICAgICAgICAgIHRhcmdldFFOYW1lLnFOYW1lVmFsdWUoKS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoICJ4eHguY29tIiApICk7Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8gVGVzdCB0aGUgc2V0X3RleHQgZnVuY3Rpb24gb24gWG1sUU5hbWVJbXBsCi0gICAgICAgIC8vCi0gICAgICAgIAotICAgICAgICB0YXJnZXREb2N1bWVudCA9Ci0gICAgICAgICAgICBzdGwucGFyc2UoCi0gICAgICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0neHM6UU5hbWUnIHhtbG5zOnh4eD0neHh4LmNvbSc+IiArCi0gICAgICAgICAgICAgICAgICAgICI8L2FueT4iLCBudWxsLCBudWxsICk7Ci0KLSAgICAgICAgdGFyZ2V0Q3Vyc29yID0gdGFyZ2V0RG9jdW1lbnQubmV3Q3Vyc29yKCk7Ci0KLSAgICAgICAgdGFyZ2V0Q3Vyc29yLnRvRmlyc3RDaGlsZCgpOwotCi0gICAgICAgIHRhcmdldFFOYW1lID0gKFhtbFFOYW1lKSB0YXJnZXRDdXJzb3IuZ2V0T2JqZWN0KCk7Ci0KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFFOYW1lLnNldCggInp6ejphYmMiICk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBmYWxzZSApOyAvLyBNdXN0IGZhaWwKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoIFRocm93YWJsZSB0ICkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB0YXJnZXRRTmFtZS5zZXQoICJ4eHg6YWJjIiApOwotICAgICAgICAKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoCi0gICAgICAgICAgICB0YXJnZXRRTmFtZS5xTmFtZVZhbHVlKCkuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKCAieHh4LmNvbSIgKSApOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9SdW50aW1lU2NoZW1hTG9hZGVyVGVzdC5qYXZhIGIvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL1J1bnRpbWVTY2hlbWFMb2FkZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2ZmUwOWYuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL1J1bnRpbWVTY2hlbWFMb2FkZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBkcnRjYXNlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQmVhbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlcjsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotaW1wb3J0IG9yZy53My54MjAwMS54bWxTY2hlbWEuU2NoZW1hRG9jdW1lbnQuU2NoZW1hOwotCi1wdWJsaWMgY2xhc3MgUnVudGltZVNjaGVtYUxvYWRlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQotewotICAgIHB1YmxpYyBSdW50aW1lU2NoZW1hTG9hZGVyVGVzdChTdHJpbmcgbmFtZSkgeyBzdXBlcihuYW1lKTsgfQotICAgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsgcmV0dXJuIG5ldyBUZXN0U3VpdGUoUnVudGltZVNjaGVtYUxvYWRlclRlc3QuY2xhc3MpOyB9Ci0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0RHluYW1pY0xvYWQoKSB0aHJvd3MgVGhyb3dhYmxlCi0gICAgewotICAgICAgICBGaWxlIGlucHV0ZmlsZTEgPSBUZXN0RW52LnhiZWFuQ2FzZSgic2NoZW1hL2R5bmFtaWMvZHludGVzdC54c2QiKTsKLSAgICAgICAgU2NoZW1hVHlwZUxvYWRlciBsb2FkZXIgPSBYbWxCZWFucy5sb2FkWHNkKG5ldyBYbWxPYmplY3RbXSB7IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKGlucHV0ZmlsZTEpIH0pOwotICAgICAgICBYbWxPYmplY3QgcmVzdWx0ID0gbG9hZGVyLnBhcnNlKFRlc3RFbnYueGJlYW5DYXNlKCJzY2hlbWEvZHluYW1pYy9keW50ZXN0LnhtbCIpLCBudWxsLCBudWxsKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiRD13cmFwcGVkaW5zdGFuY2VAaHR0cDovL29wZW51cmkub3JnL3Rlc3QvZHludGVzdCIsIHJlc3VsdC5zY2hlbWFUeXBlKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMobG9hZGVyLmZpbmREb2N1bWVudFR5cGUobmV3IFFOYW1lKCJodHRwOi8vb3BlbnVyaS5vcmcvdGVzdC9keW50ZXN0IiwgIndyYXBwZWRpbnN0YW5jZSIgKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNjaGVtYVR5cGUoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdER5bmFtaWNMb2FkMigpIHRocm93cyBUaHJvd2FibGUKLSAgICB7Ci0gICAgICAgIEZpbGUgaW5wdXRmaWxlMSA9IFRlc3RFbnYueGJlYW5DYXNlKCJzY2hlbWEvZHluYW1pYy9keW50ZXN0Mi54c2QiKTsKLSAgICAgICAgU2NoZW1hVHlwZUxvYWRlciBsb2FkZXIgPSBYbWxCZWFucy5sb2FkWHNkKG5ldyBYbWxPYmplY3RbXSB7IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKGlucHV0ZmlsZTEpIH0pOwotICAgICAgICBYbWxPYmplY3QgcmVzdWx0ID0gbG9hZGVyLnBhcnNlKFRlc3RFbnYueGJlYW5DYXNlKCJzY2hlbWEvZHluYW1pYy9keW50ZXN0Mi54bWwiKSwgbnVsbCwgbnVsbCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIkQ9d3JhcHBlZHdpbGRjYXJkQGh0dHA6Ly9vcGVudXJpLm9yZy90ZXN0L2R5bnRlc3QiLCByZXN1bHQuc2NoZW1hVHlwZSgpLnRvU3RyaW5nKCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKGxvYWRlci5maW5kRG9jdW1lbnRUeXBlKG5ldyBRTmFtZSgiaHR0cDovL29wZW51cmkub3JnL3Rlc3QvZHludGVzdCIsICJ3cmFwcGVkd2lsZGNhcmQiKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNjaGVtYVR5cGUoKSk7Ci0gICAgICAgIFhtbEN1cnNvciBjdXIgPSByZXN1bHQubmV3Q3Vyc29yKCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCJTaG91bGQgaGF2ZSBhIHJvb3QgZWxlbWVudCIsIGN1ci50b0ZpcnN0Q2hpbGQoKSk7Ci0gICAgICAgIHJlc3VsdCA9IGN1ci5nZXRPYmplY3QoKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiRT13cmFwcGVkd2lsZGNhcmR8RD13cmFwcGVkd2lsZGNhcmRAaHR0cDovL29wZW51cmkub3JnL3Rlc3QvZHludGVzdCIsIHJlc3VsdC5zY2hlbWFUeXBlKCkudG9TdHJpbmcoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMobG9hZGVyLmZpbmRFbGVtZW50KG5ldyBRTmFtZSgiaHR0cDovL29wZW51cmkub3JnL3Rlc3QvZHludGVzdCIsICJ3cmFwcGVkd2lsZGNhcmQiKSkuZ2V0VHlwZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zY2hlbWFUeXBlKCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiU2hvdWxkIGhhdmUgYSBmaXJzdCBjaGlsZCIsIGN1ci50b0ZpcnN0Q2hpbGQoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMobmV3IFFOYW1lKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsICJzY2hlbWEiKSwgY3VyLmdldE5hbWUoKSk7Ci0gICAgICAgIFhtbE9iamVjdCBvYmogPSBjdXIuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoU2NoZW1hLnR5cGUsIG9iai5zY2hlbWFUeXBlKCkpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9TY2hlbWFUeXBlc1Rlc3RzLmphdmEgYi92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvU2NoZW1hVHlwZXNUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTZlYjlhLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9TY2hlbWFUeXBlc1Rlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNDkgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBkcnRjYXNlczsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9uczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJlYW5zOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ2FsZW5kYXI7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotaW1wb3J0IG9yZy5vcGVudXJpLnhzdHlwZXMudGVzdC4qOwotaW1wb3J0IG9yZy5vcGVudXJpLmRlZi5EZWZhdWx0c0RvY3VtZW50OwotaW1wb3J0IG9yZy53My54MjAwMS54bWxTY2hlbWEuU2NoZW1hRG9jdW1lbnQ7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1wdWJsaWMgY2xhc3MgU2NoZW1hVHlwZXNUZXN0cyBleHRlbmRzIFRlc3RDYXNlCi17Ci0gICAgcHVibGljIFNjaGVtYVR5cGVzVGVzdHMoU3RyaW5nIG5hbWUpIHsgc3VwZXIobmFtZSk7IH0KLSAgICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7IHJldHVybiBuZXcgVGVzdFN1aXRlKFNjaGVtYVR5cGVzVGVzdHMuY2xhc3MpOyB9Ci0KLSAgICBwcml2YXRlIEN1c3RvbWVyRG9jdW1lbnQgZG9jOwotCi0gICAgcHJpdmF0ZSB2b2lkIGVuc3VyZURvYygpCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGlmKCBkb2M9PW51bGwgKQotICAgICAgICB7Ci0gICAgICAgICAgICBkb2MgPSAoQ3VzdG9tZXJEb2N1bWVudCkKLSAgICAgICAgICAgICAgICAgICAgWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoVGVzdEVudi54YmVhbkNhc2UoIi4uL3NyYy94c3R5cGVzL3hzdHlwZXMueG1sIikpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdERlZmF1bHRzKCkgdGhyb3dzIFRocm93YWJsZQotICAgIHsKLSAgICAgICAgRGVmYXVsdHNEb2N1bWVudCBkb2MgPSBEZWZhdWx0c0RvY3VtZW50LkZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgRGVmYXVsdHNEb2N1bWVudC5EZWZhdWx0cyBkZWZzID0gZG9jLmFkZE5ld0RlZmF1bHRzKCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNzgzLCBkZWZzLmdldENvb2woKSk7IC8vIHRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0U291cmNlTmFtZSgpIHRocm93cyBUaHJvd2FibGUKLSAgICB7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gRGVmYXVsdHNEb2N1bWVudC50eXBlLmdldFNvdXJjZU5hbWUoKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiZGVmYXVsdHMueHNkIiwgbmFtZSk7Ci0gICAgICAgIElucHV0U3RyZWFtIHN0ciA9IFhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCkuZ2V0U291cmNlQXNTdHJlYW0oImRlZmF1bHRzLnhzZCIpOwotICAgICAgICBTY2hlbWFEb2N1bWVudCBkb2MgPSBTY2hlbWFEb2N1bWVudC5GYWN0b3J5LnBhcnNlKHN0cik7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGRvYy52YWxpZGF0ZSgpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0UmVhZCgpIHRocm93cyBUaHJvd2FibGUKLSAgICB7Ci0gICAgICAgIGVuc3VyZURvYygpOwotCi0gICAgICAgIC8vIE1vdmUgZnJvbSB0aGUgcm9vdCB0byB0aGUgcm9vdCBjdXN0b21lciBlbGVtZW50Ci0gICAgICAgIFBlcnNvbiBwZXJzb24gPSBkb2MuZ2V0Q3VzdG9tZXIoKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiSG93ZHkiLCBwZXJzb24uZ2V0Rmlyc3RuYW1lKCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDQsICAgcGVyc29uLnNpemVPZk51bWJlckFycmF5KCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDQzNiwgcGVyc29uLmdldE51bWJlckFycmF5KDApKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygxMjMsIHBlcnNvbi5nZXROdW1iZXJBcnJheSgxKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNDQsICBwZXJzb24uZ2V0TnVtYmVyQXJyYXkoMikpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDkzMywgcGVyc29uLmdldE51bWJlckFycmF5KDMpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCAgIHBlcnNvbi5zaXplT2ZCaXJ0aGRheUFycmF5KCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKG5ldyBYbWxDYWxlbmRhcigiMTk5OC0wOC0yNloiKSwKLSAgICAgICAgICAgICBwZXJzb24uZ2V0QmlydGhkYXlBcnJheSgwKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMobmV3IFhtbENhbGVuZGFyKCIyMDAwLTA4LTA2LTA4OjAwIiksCi0gICAgICAgICAgICAgcGVyc29uLmdldEJpcnRoZGF5QXJyYXkoMSkpOwotCi0gICAgICAgIFBlcnNvbi5HZW5kZXIuRW51bSBnID0gcGVyc29uLmdldEdlbmRlcigpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKFBlcnNvbi5HZW5kZXIuTUFMRSwgZyk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiRUdJUVRXWVpKIiwgbmV3IFN0cmluZyhwZXJzb24uZ2V0SGV4KCkpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiVGhpcyBzdHJpbmcgaXMgYmFzZTY0QmluYXJ5IGVuY29kZWQhIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nKHBlcnNvbi5nZXRCYXNlNjQoKSkpOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIkdHSVFUV1lHRyIsIG5ldyBTdHJpbmcocGVyc29uLmdldEhleEF0dCgpKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIlRoaXMgc3RyaW5nIGlzIGJhc2U2NEJpbmFyeSBlbmNvZGVkISIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZyhwZXJzb24uZ2V0QmFzZTY0QXR0KCkpKTsKLQotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJ7c29tZV91cml9bG9jYWxuYW1lIiwgcGVyc29uLmdldFFuYW1lQXR0KCkudG9TdHJpbmcoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIntodHRwOi8vb3BlbnVyaS5vcmcveHN0eXBlcy90ZXN0fW9wZW51cmlfb3JnX2xvY2FsbmFtZSIsIHBlcnNvbi5nZXRRbmFtZSgpLnRvU3RyaW5nKCkpOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoImh0dHA6Ly9kbW96Lm9yZy9Xb3JsZC9GcmFuXHUwMGU3YWlzLyIsIHBlcnNvbi5nZXRBbnl1cmlBdHQoKS50b1N0cmluZygpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiaHR0cDovLzNzcGFjZS5vcmcvc3BhY2UlMjBzcGFjZS8iLCBwZXJzb24uZ2V0QW55dXJpKCkudG9TdHJpbmcoKSk7Ci0KLSAgICAgICAgLy9SdW50aW1lRXhjZXB0aW9uOiBzcmMveG1sc3RvcmUvY29tL2JlYS94bWwvc3RvcmUvU3BsYXkuamF2YSgxNTM3KTogbnMgIT0gbnVsbCAmJiBucy5sZW5ndGgoKSA+IDAgZmFpbGVkCi0gICAgICAgIC8vQXNzZXJ0LmFzc2VydEVxdWFscygiSlBFRyIsIHBlcnNvbi5nZXROb3RhdGlvbkF0dCgpLnRvU3RyaW5nKCkpOwotICAgICAgICAvL0Fzc2VydC5hc3NlcnRFcXVhbHMoIkdJRiIsIHBlcnNvbi5nZXROb3RhdGlvbigpLnRvU3RyaW5nKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHRlc3RXcml0ZVJlYWQoKSB0aHJvd3MgVGhyb3dhYmxlCi0gICAgewotICAgICAgICBlbnN1cmVEb2MoKTsKLSAgICAgICAgLy8gTW92ZSBmcm9tIHRoZSByb290IHRvIHRoZSByb290IGN1c3RvbWVyIGVsZW1lbnQKLSAgICAgICAgUGVyc29uIHBlcnNvbiA9IGRvYy5nZXRDdXN0b21lcigpOwotCi0gICAgICAgIHBlcnNvbi5zZXRGaXJzdG5hbWUoIkdlb3JnZSIpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJHZW9yZ2UiLCBwZXJzb24uZ2V0Rmlyc3RuYW1lKCkpOwotCi0gICAgICAgIHBlcnNvbi5zZXRIZXgoImhleCBlbmNvZGluZyIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoImhleCBlbmNvZGluZyIsIG5ldyBTdHJpbmcocGVyc29uLmdldEhleCgpKSk7Ci0KLSAgICAgICAgcGVyc29uLnNldEJhc2U2NCgiYmFzZTY0IGVuY29kZWQiLmdldEJ5dGVzKCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJiYXNlNjQgZW5jb2RlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZyhwZXJzb24uZ2V0QmFzZTY0KCkpKTsKLQotICAgICAgICBwZXJzb24uc2V0SGV4QXR0KCJoZXggZW5jb2RpbmcgaW4gYXR0cmlidXRlcyIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoImhleCBlbmNvZGluZyBpbiBhdHRyaWJ1dGVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nKHBlcnNvbi5nZXRIZXhBdHQoKSkpOwotCi0gICAgICAgIHBlcnNvbi5zZXRCYXNlNjRBdHQoIlRoaXMgc3RyaW5nIGlzIGJhc2U2NEJpbmFyeSBlbmNvZGVkISIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIlRoaXMgc3RyaW5nIGlzIGJhc2U2NEJpbmFyeSBlbmNvZGVkISIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFN0cmluZyhwZXJzb24uZ2V0QmFzZTY0QXR0KCkpKTsKLQotICAgICAgICBwZXJzb24uc2V0QW55dXJpKCJhLmM6NzAwMSIpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJhLmM6NzAwMSIsIHBlcnNvbi5nZXRBbnl1cmkoKSk7Ci0KLSAgICAgICAgcGVyc29uLnNldEFueXVyaUF0dCgiYi5kOjcwMDIiKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiYi5kOjcwMDIiLCBwZXJzb24uZ2V0QW55dXJpQXR0KCkpOwotCi0gICAgICAgIHBlcnNvbi5zZXRRbmFtZUF0dChuZXcgUU5hbWUoImFhYSIsImJiYiIpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygie2FhYX1iYmIiLCBwZXJzb24uZ2V0UW5hbWVBdHQoKS50b1N0cmluZygpKTsKLQotICAgICAgICBwZXJzb24uc2V0UW5hbWUobmV3IFFOYW1lKCJkZGQiLCJlZWUiKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIntkZGR9ZWVlIiwgcGVyc29uLmdldFFuYW1lKCkudG9TdHJpbmcoKSk7Ci0KLSAgICAgICAgLy9FeGNlcHRpb246IHNyYy94bWxzdG9yZS9jb20vYmVhL3htbC9zdG9yZS9UeXBlLmphdmEoMTg5KTogdXNlciA9PSBfdXNlciBmYWlsZWQKLS8vICAgICAgICBwZXJzb24uc2V0QW55dXJpQXR0KFVSSS5jcmVhdGUoImIuZDo3MDAyIikpOwotLy8gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoImIuZDo3MDAyIiwgcGVyc29uLmdldEFueXVyaUF0dCgpLnRvU3RyaW5nKCkpOwotCi0gICAgICAgIC8vWG1sTk9UQVRJT04gbm90YXRpb24gPSAoWG1sTk9UQVRJT04pUGVyc29uLk5vdGF0aW9uLnR5cGUuY3JlYXRlTm9kZSgpOwotICAgICAgICAvL25vdGF0aW9uLnNldFZhbHVlKCJKUEVHIik7Ci0gICAgICAgIC8vcGVyc29uLnNldE5vdGF0aW9uKCBub3RhdGlvbiApOwotICAgICAgICAvL0Fzc2VydC5hc3NlcnRFcXVhbHMoIkpQRUciLCBwZXJzb24uZ2V0Tm90YXRpb24oKS50b1N0cmluZygpKTsKLQotICAgICAgICAvL1htbE5PVEFUSU9OIG5vdGF0aW9uQXR0ID0gKFhtbE5PVEFUSU9OKVBlcnNvbi5Ob3RhdGlvbkF0dC50eXBlLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgLy9ub3RhdGlvbkF0dC5zZXRWYWx1ZSgiR0lGIik7Ci0gICAgICAgIC8vcGVyc29uLnNldE5vdGF0aW9uQXR0KCBub3RhdGlvbkF0dCApOwotICAgICAgICAvL3BlcnNvbi5zZXROb3RhdGlvbkF0dChub3RhdGlvbik7Ci0gICAgICAgIC8vQXNzZXJ0LmFzc2VydEVxdWFscygiR0lGIiwgcGVyc29uLmdldE5vdGF0aW9uQXR0KCkudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdFN0b3JlV3JpdGUoKSB0aHJvd3MgVGhyb3dhYmxlCi0gICAgewotICAgICAgICBlbnN1cmVEb2MoKTsKLSAgICAgICAgLy8gTW92ZSBmcm9tIHRoZSByb290IHRvIHRoZSByb290IGN1c3RvbWVyIGVsZW1lbnQKLSAgICAgICAgUGVyc29uIHBlcnNvbiA9IGRvYy5nZXRDdXN0b21lcigpOwotCi0gICAgICAgIFhtbE9iamVjdCB4bWxvYmo7Ci0gICAgICAgIFhtbEN1cnNvciB4bWxjdXJzOwotCi0gICAgICAgIHBlcnNvbi5zZXRGaXJzdG5hbWUoIkdlb3JnZSIpOwotICAgICAgICB4bWxvYmogPSBwZXJzb24ueGdldEZpcnN0bmFtZSgpOwotICAgICAgICB4bWxjdXJzID0geG1sb2JqLm5ld0N1cnNvcigpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJHZW9yZ2UiLCB4bWxjdXJzLmdldFRleHRWYWx1ZSgpICk7Ci0KLSAgICAgICAgcGVyc29uLnNldFFuYW1lQXR0KCBuZXcgUU5hbWUoImh0dHA6Ly9nZ2cuY29tIiwiaGhoIikgKTsKLSAgICAgICAgeG1sb2JqID0gcGVyc29uLnhnZXRRbmFtZUF0dCgpOwotICAgICAgICB4bWxjdXJzID0geG1sb2JqLm5ld0N1cnNvcigpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJnZ2c6aGhoIiwgeG1sY3Vycy5nZXRUZXh0VmFsdWUoKSApOwotCi0gICAgICAgIHBlcnNvbi5zZXRRbmFtZSggbmV3IFFOYW1lKCJodHRwOi8vZ2dnLmNvbS9nZ2dBZ2FpbiIsImtrayIpICk7Ci0gICAgICAgIHhtbG9iaiA9IHBlcnNvbi54Z2V0UW5hbWUoKTsKLSAgICAgICAgeG1sY3VycyA9IHhtbG9iai5uZXdDdXJzb3IoKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiZ2dnMTpra2siLCB4bWxjdXJzLmdldFRleHRWYWx1ZSgpICk7Ci0KLSAgICAgICAgcGVyc29uLnNldEFueXVyaSggImNyb3NzZ2Fpbi5jb20iICk7Ci0gICAgICAgIHhtbG9iaiA9IHBlcnNvbi54Z2V0QW55dXJpKCk7Ci0gICAgICAgIHhtbGN1cnMgPSB4bWxvYmoubmV3Q3Vyc29yKCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoImNyb3NzZ2Fpbi5jb20iLCB4bWxjdXJzLmdldFRleHRWYWx1ZSgpICk7Ci0KLSAgICAgICAgcGVyc29uLnNldEFueXVyaUF0dCggInd3dy5jcm9zc2dhaW4uY29tIiApOwotICAgICAgICB4bWxvYmogPSBwZXJzb24ueGdldEFueXVyaUF0dCgpOwotICAgICAgICB4bWxjdXJzID0geG1sb2JqLm5ld0N1cnNvcigpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJ3d3cuY3Jvc3NnYWluLmNvbSIsIHhtbGN1cnMuZ2V0VGV4dFZhbHVlKCkgKTsKLQotICAgICAgICAvL3BlcnNvbi5zZXROb3RhdGlvbigiR0lGIik7Ci0gICAgICAgIC8veG1sb2JqID0gcGVyc29uLmdldE5vdGF0aW9uKCk7Ci0gICAgICAgIC8veG1sY3VycyA9IHhtbG9iai5uZXdYbWxDdXJzb3IoKTsKLSAgICAgICAgLy9Bc3NlcnQuYXNzZXJ0RXF1YWxzKCJHSUYiLCB4bWxjdXJzLmdldFRleHQoKSApOwotCi0gICAgICAgIC8vcGVyc29uLnNldE5vdGF0aW9uQXR0KCJKUEVHdSIpOwotICAgICAgICAvL3htbG9iaiA9IHBlcnNvbi54Z2V0Tm90YXRpb25BdHQoKTsKLSAgICAgICAgLy94bWxjdXJzID0geG1sb2JqLm5ld1htbEN1cnNvcigpOwotICAgICAgICAvL0Fzc2VydC5hc3NlcnRFcXVhbHMoIkpQRUciLCB4bWxjdXJzLmdldFRleHQoKSApOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9TZXJpYWxpemF0aW9uVGVzdHMuamF2YSBiL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9TZXJpYWxpemF0aW9uVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY2NDJhZC4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvU2VyaWFsaXphdGlvblRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBkcnRjYXNlczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQgY29tLmVhc3lwby5YbWxQdXJjaGFzZU9yZGVyRG9jdW1lbnRCZWFuLlB1cmNoYXNlT3JkZXI7Ci1pbXBvcnQgY29tLmVhc3lwby5YbWxMaW5lSXRlbUJlYW47Ci1pbXBvcnQgY29tLmVhc3lwby5YbWxTaGlwcGVyQmVhbjsKLWltcG9ydCBjb20uZWFzeXBvLlhtbFB1cmNoYXNlT3JkZXJEb2N1bWVudEJlYW47Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci0KLWltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKLWltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk9iamVjdE91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT2JqZWN0SW5wdXRTdHJlYW07Ci0KLXB1YmxpYyBjbGFzcyBTZXJpYWxpemF0aW9uVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZQotewotICAgIHB1YmxpYyBTZXJpYWxpemF0aW9uVGVzdHMgKFN0cmluZyBuYW1lKSB7IHN1cGVyKG5hbWUpOyB9Ci0gICAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgeyByZXR1cm4gbmV3IFRlc3RTdWl0ZShTZXJpYWxpemF0aW9uVGVzdHMuY2xhc3MpOyB9Ci0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0WG1sT2JqZWN0U2VyaWFsaXphdGlvbigpIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFN0cmluZyBzaW1wbGVEb2N1bWVudCA9ICI8c2ltcGxlRG9jPjxuZXN0ZWRUYWcgYXR0cj1cInNhbXBsZVwiPjQzPC9uZXN0ZWRUYWc+PC9zaW1wbGVEb2M+IjsKLSAgICAgICAgWG1sT2JqZWN0IGRvYyA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKHNpbXBsZURvY3VtZW50KTsKLQotICAgICAgICAvLyBiYXNlbGluZSB0ZXN0Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoc2ltcGxlRG9jdW1lbnQsIGRvYy54bWxUZXh0KCkpOwotCi0gICAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0gICAgICAgIE9iamVjdE91dHB1dFN0cmVhbSBvb3MgPSBuZXcgT2JqZWN0T3V0cHV0U3RyZWFtKG91dCk7Ci0gICAgICAgIG9vcy53cml0ZU9iamVjdChkb2MpOwotICAgICAgICBvb3MuY2xvc2UoKTsKLQotICAgICAgICBieXRlW10gYnl0ZUFycmF5ID0gb3V0LnRvQnl0ZUFycmF5KCk7Ci0gICAgICAgIEJ5dGVBcnJheUlucHV0U3RyZWFtIGluID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGJ5dGVBcnJheSk7Ci0gICAgICAgIE9iamVjdElucHV0U3RyZWFtIG9pcyA9IG5ldyBPYmplY3RJbnB1dFN0cmVhbShpbik7Ci0gICAgICAgIFhtbE9iamVjdCBuZXdkb2MgPSAoWG1sT2JqZWN0KW9pcy5yZWFkT2JqZWN0KCk7Ci0gICAgICAgIG9pcy5jbG9zZSgpOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoc2ltcGxlRG9jdW1lbnQsIG5ld2RvYy54bWxUZXh0KCkpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHRlc3RYQmVhblNlcmlhbGl6YXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBYbWxQdXJjaGFzZU9yZGVyRG9jdW1lbnRCZWFuIGRvYyA9IFhtbFB1cmNoYXNlT3JkZXJEb2N1bWVudEJlYW4uRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgICBQdXJjaGFzZU9yZGVyIG9yZGVyID0gZG9jLmFkZE5ld1B1cmNoYXNlT3JkZXIoKTsKLSAgICAgICAgb3JkZXIuYWRkTmV3Q3VzdG9tZXIoKS5zZXROYW1lKCJEYXZpZCBCYXUiKTsKLSAgICAgICAgb3JkZXIuZ2V0Q3VzdG9tZXIoKS5zZXRBZGRyZXNzKCJHbGFkd3luZSwgUEEiKTsKLSAgICAgICAgWG1sTGluZUl0ZW1CZWFuIGxpOwotICAgICAgICBsaSA9IG9yZGVyLmFkZE5ld0xpbmVJdGVtKCk7Ci0gICAgICAgIGxpLnNldERlc2NyaXB0aW9uKCJCdXJuaGFtJ3MgQ2VsZXN0aWFsIEhhbmRib29rLCBWb2wgMSIpOwotICAgICAgICBsaS5zZXRQcmljZShuZXcgQmlnRGVjaW1hbCgiMjEuNzkiKSk7Ci0gICAgICAgIGxpLnNldFF1YW50aXR5KEJpZ0ludGVnZXIudmFsdWVPZigyKSk7Ci0gICAgICAgIGxpLnNldFBlclVuaXRPdW5jZXMobmV3IEJpZ0RlY2ltYWwoIjUiKSk7Ci0gICAgICAgIGxpID0gb3JkZXIuYWRkTmV3TGluZUl0ZW0oKTsKLSAgICAgICAgbGkuc2V0RGVzY3JpcHRpb24oIkJ1cm5oYW0ncyBDZWxlc3RpYWwgSGFuZGJvb2ssIFZvbCAyIik7Ci0gICAgICAgIGxpLnNldFByaWNlKG5ldyBCaWdEZWNpbWFsKCIxOS44OSIpKTsKLSAgICAgICAgbGkuc2V0UXVhbnRpdHkoQmlnSW50ZWdlci52YWx1ZU9mKDIpKTsKLSAgICAgICAgbGkuc2V0UGVyVW5pdE91bmNlcyhuZXcgQmlnRGVjaW1hbCgiNSIpKTsKLSAgICAgICAgbGkgPSBvcmRlci5hZGROZXdMaW5lSXRlbSgpOwotICAgICAgICBsaS5zZXREZXNjcmlwdGlvbigiQnVybmhhbSdzIENlbGVzdGlhbCBIYW5kYm9vaywgVm9sIDMiKTsKLSAgICAgICAgbGkuc2V0UHJpY2UobmV3IEJpZ0RlY2ltYWwoIjE5Ljg5IikpOwotICAgICAgICBsaS5zZXRRdWFudGl0eShCaWdJbnRlZ2VyLnZhbHVlT2YoMSkpOwotICAgICAgICBsaS5zZXRQZXJVbml0T3VuY2VzKG5ldyBCaWdEZWNpbWFsKCI1IikpOwotICAgICAgICBYbWxTaGlwcGVyQmVhbiBzaCA9IG9yZGVyLmFkZE5ld1NoaXBwZXIoKTsKLSAgICAgICAgc2guc2V0TmFtZSgiVVBTIik7Ci0gICAgICAgIHNoLnNldFBlck91bmNlUmF0ZShuZXcgQmlnRGVjaW1hbCgiMC43NCIpKTsKLQotICAgICAgICBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotICAgICAgICBPYmplY3RPdXRwdXRTdHJlYW0gb29zID0gbmV3IE9iamVjdE91dHB1dFN0cmVhbShvdXQpOwotICAgICAgICBvb3Mud3JpdGVPYmplY3QoZG9jLmdldFB1cmNoYXNlT3JkZXIoKS5nZXRMaW5lSXRlbUFycmF5KDEpKTsKLSAgICAgICAgb29zLndyaXRlT2JqZWN0KGRvYyk7Ci0gICAgICAgIG9vcy53cml0ZU9iamVjdChkb2MuZ2V0UHVyY2hhc2VPcmRlcigpLmdldExpbmVJdGVtQXJyYXkoMikpOwotICAgICAgICBvb3MuY2xvc2UoKTsKLQotICAgICAgICBieXRlW10gYnl0ZUFycmF5ID0gb3V0LnRvQnl0ZUFycmF5KCk7Ci0gICAgICAgIEJ5dGVBcnJheUlucHV0U3RyZWFtIGluID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGJ5dGVBcnJheSk7Ci0gICAgICAgIE9iamVjdElucHV0U3RyZWFtIG9pcyA9IG5ldyBPYmplY3RJbnB1dFN0cmVhbShpbik7Ci0gICAgICAgIFhtbExpbmVJdGVtQmVhbiBuZXdsaTEgPSAoWG1sTGluZUl0ZW1CZWFuKW9pcy5yZWFkT2JqZWN0KCk7Ci0gICAgICAgIFhtbFB1cmNoYXNlT3JkZXJEb2N1bWVudEJlYW4gbmV3ZG9jID0gKFhtbFB1cmNoYXNlT3JkZXJEb2N1bWVudEJlYW4pb2lzLnJlYWRPYmplY3QoKTsKLSAgICAgICAgWG1sTGluZUl0ZW1CZWFuIG5ld2xpMiA9IChYbWxMaW5lSXRlbUJlYW4pb2lzLnJlYWRPYmplY3QoKTsKLSAgICAgICAgb2lzLmNsb3NlKCk7Ci0KLSAgICAgICAgUHVyY2hhc2VPcmRlciBuZXdvcmRlciA9IG5ld2RvYy5nZXRQdXJjaGFzZU9yZGVyKCk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhuZXdsaTEsIG5ld29yZGVyLmdldExpbmVJdGVtQXJyYXkoMSkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKG5ld2xpMiwgbmV3b3JkZXIuZ2V0TGluZUl0ZW1BcnJheSgyKSk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiRGF2aWQgQmF1IiwgbmV3b3JkZXIuZ2V0Q3VzdG9tZXIoKS5nZXROYW1lKCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJHbGFkd3luZSwgUEEiLCBuZXdvcmRlci5nZXRDdXN0b21lcigpLmdldEFkZHJlc3MoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMywgbmV3b3JkZXIuc2l6ZU9mTGluZUl0ZW1BcnJheSgpKTsKLQotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJCdXJuaGFtJ3MgQ2VsZXN0aWFsIEhhbmRib29rLCBWb2wgMSIsIG5ld29yZGVyLmdldExpbmVJdGVtQXJyYXkoMCkuZ2V0RGVzY3JpcHRpb24oKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMobmV3IEJpZ0RlY2ltYWwoIjIxLjc5IiksIG5ld29yZGVyLmdldExpbmVJdGVtQXJyYXkoMCkuZ2V0UHJpY2UoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMobmV3IEJpZ0ludGVnZXIoIjIiKSwgbmV3b3JkZXIuZ2V0TGluZUl0ZW1BcnJheSgwKS5nZXRRdWFudGl0eSgpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhuZXcgQmlnRGVjaW1hbCgiNSIpLCBuZXdvcmRlci5nZXRMaW5lSXRlbUFycmF5KDApLmdldFBlclVuaXRPdW5jZXMoKSk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiQnVybmhhbSdzIENlbGVzdGlhbCBIYW5kYm9vaywgVm9sIDIiLCBuZXdvcmRlci5nZXRMaW5lSXRlbUFycmF5KDEpLmdldERlc2NyaXB0aW9uKCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKG5ldyBCaWdEZWNpbWFsKCIxOS44OSIpLCBuZXdvcmRlci5nZXRMaW5lSXRlbUFycmF5KDEpLmdldFByaWNlKCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKG5ldyBCaWdJbnRlZ2VyKCIyIiksIG5ld29yZGVyLmdldExpbmVJdGVtQXJyYXkoMSkuZ2V0UXVhbnRpdHkoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMobmV3IEJpZ0RlY2ltYWwoIjUiKSwgbmV3b3JkZXIuZ2V0TGluZUl0ZW1BcnJheSgxKS5nZXRQZXJVbml0T3VuY2VzKCkpOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIkJ1cm5oYW0ncyBDZWxlc3RpYWwgSGFuZGJvb2ssIFZvbCAzIiwgbmV3b3JkZXIuZ2V0TGluZUl0ZW1BcnJheSgyKS5nZXREZXNjcmlwdGlvbigpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhuZXcgQmlnRGVjaW1hbCgiMTkuODkiKSwgbmV3b3JkZXIuZ2V0TGluZUl0ZW1BcnJheSgyKS5nZXRQcmljZSgpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhuZXcgQmlnSW50ZWdlcigiMSIpLCBuZXdvcmRlci5nZXRMaW5lSXRlbUFycmF5KDIpLmdldFF1YW50aXR5KCkpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKG5ldyBCaWdEZWNpbWFsKCI1IiksIG5ld29yZGVyLmdldExpbmVJdGVtQXJyYXkoMikuZ2V0UGVyVW5pdE91bmNlcygpKTsKLQotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKHRydWUsIG5ld29yZGVyLmlzU2V0U2hpcHBlcigpKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiVVBTIiwgbmV3b3JkZXIuZ2V0U2hpcHBlcigpLmdldE5hbWUoKSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMobmV3IEJpZ0RlY2ltYWwoIjAuNzQiKSwgbmV3b3JkZXIuZ2V0U2hpcHBlcigpLmdldFBlck91bmNlUmF0ZSgpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvU21va2VUZXN0cy5qYXZhIGIvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL1Ntb2tlVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAzNzQ2Zi4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvU21va2VUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBkcnRjYXNlczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgU21va2VUZXN0cyBleHRlbmRzIFRlc3RDYXNlCi17Ci0gICAgU21va2VUZXN0cyhTdHJpbmcgbmFtZSkgeyBzdXBlcihuYW1lKTsgfQotCi0gICAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgICB7Ci0gICAgICAgIFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoU21va2VUZXN0cy5jbGFzcy5nZXROYW1lKCkpOwotICAgICAgICBzdWl0ZS5hZGRUZXN0KEFzc29ydGVkVGVzdHMuc3VpdGUoKSk7Ci0gICAgICAgIHN1aXRlLmFkZFRlc3QoSW50VGVzdHMuc3VpdGUoKSk7Ci0gICAgICAgIHN1aXRlLmFkZFRlc3QoUnVudGltZVNjaGVtYUxvYWRlclRlc3Quc3VpdGUoKSk7Ci0gICAgICAgIHN1aXRlLmFkZFRlc3QoU3RvcmVUZXN0cy5zdWl0ZSgpKTsKLSAgICAgICAgc3VpdGUuYWRkVGVzdChRTmFtZVRlc3RzLnN1aXRlKCkpOwotICAgICAgICBzdWl0ZS5hZGRUZXN0KFZhbGlkYXRpb25UZXN0cy5zdWl0ZSgpKTsKLSAgICAgICAgc3VpdGUuYWRkVGVzdChDb21waWxhdGlvblRlc3RzLnN1aXRlKCkpOwotICAgICAgICBzdWl0ZS5hZGRUZXN0KEFubm90YXRpb25zVGVzdHMuc3VpdGUoKSk7Ci0gICAgICAgIHN1aXRlLmFkZFRlc3QoRWFzeVBvVGVzdHMuc3VpdGUoKSk7Ci0gICAgICAgIHN1aXRlLmFkZFRlc3QoTmFtZXdvcmxkVGVzdC5zdWl0ZSgpKTsKLSAgICAgICAgc3VpdGUuYWRkVGVzdChTY2hlbWFUeXBlc1Rlc3RzLnN1aXRlKCkpOwotICAgICAgICBzdWl0ZS5hZGRUZXN0KEVudW1UZXN0cy5zdWl0ZSgpKTsKLSAgICAgICAgc3VpdGUuYWRkVGVzdChDcmVhdGlvblRlc3RzLnN1aXRlKCkpOwotICAgICAgICBzdWl0ZS5hZGRUZXN0KFRocmVhZGluZ1Rlc3Quc3VpdGUoKSk7Ci0gICAgICAgIHN1aXRlLmFkZFRlc3QoU2VyaWFsaXphdGlvblRlc3RzLnN1aXRlKCkpOwotICAgICAgICBzdWl0ZS5hZGRUZXN0KERvbVRlc3RzLnN1aXRlKCkpOwotICAgICAgICBzdWl0ZS5hZGRUZXN0KEdEYXRlVGVzdHMuc3VpdGUoKSk7Ci0gICAgICAgIHN1aXRlLmFkZFRlc3QoU3Vic3RHcm91cFRlc3RzLnN1aXRlKCkpOwotICAgICAgICBzdWl0ZS5hZGRUZXN0KEJpbmRpbmdUZXN0cy5zdWl0ZSgpKTsKLSAgICAgICAgcmV0dXJuIHN1aXRlOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9TdGFuZGFsb25lVGVzdHMuamF2YSBiL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9TdGFuZGFsb25lVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQyNDcxNy4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvU3RhbmRhbG9uZVRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIGRydGNhc2VzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBTdGFuZGFsb25lVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZQotewotICAgIFN0YW5kYWxvbmVUZXN0cyhTdHJpbmcgbmFtZSkgeyBzdXBlcihuYW1lKTsgfQotCi0gICAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgICB7Ci0gICAgICAgIFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoU3RhbmRhbG9uZVRlc3RzLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgICAgIHN1aXRlLmFkZFRlc3QoQXNzb3J0ZWRUZXN0cy5zdWl0ZSgpKTsKLSAgICAgICAgc3VpdGUuYWRkVGVzdChJbnRUZXN0cy5zdWl0ZSgpKTsKLSAgICAgICAgc3VpdGUuYWRkVGVzdChSdW50aW1lU2NoZW1hTG9hZGVyVGVzdC5zdWl0ZSgpKTsKLSAgICAgICAgc3VpdGUuYWRkVGVzdChTdG9yZVRlc3RzLnN1aXRlKCkpOwotICAgICAgICBzdWl0ZS5hZGRUZXN0KFFOYW1lVGVzdHMuc3VpdGUoKSk7Ci0gICAgICAgIHN1aXRlLmFkZFRlc3QoVmFsaWRhdGlvblRlc3RzLnN1aXRlKCkpOwotICAgICAgICBzdWl0ZS5hZGRUZXN0KENvbXBpbGF0aW9uVGVzdHMuc3VpdGUoKSk7Ci0gICAgICAgIHN1aXRlLmFkZFRlc3QoQW5ub3RhdGlvbnNUZXN0cy5zdWl0ZSgpKTsKLSAgICAgICAgc3VpdGUuYWRkVGVzdChFYXN5UG9UZXN0cy5zdWl0ZSgpKTsKLSAgICAgICAgc3VpdGUuYWRkVGVzdChOYW1ld29ybGRUZXN0LnN1aXRlKCkpOwotICAgICAgICBzdWl0ZS5hZGRUZXN0KFNjaGVtYVR5cGVzVGVzdHMuc3VpdGUoKSk7Ci0gICAgICAgIHN1aXRlLmFkZFRlc3QoRW51bVRlc3RzLnN1aXRlKCkpOwotICAgICAgICBzdWl0ZS5hZGRUZXN0KENyZWF0aW9uVGVzdHMuc3VpdGUoKSk7Ci0gICAgICAgIHN1aXRlLmFkZFRlc3QoVGhyZWFkaW5nVGVzdC5zdWl0ZSgpKTsKLSAgICAgICAgc3VpdGUuYWRkVGVzdChTZXJpYWxpemF0aW9uVGVzdHMuc3VpdGUoKSk7Ci0gICAgICAgIHN1aXRlLmFkZFRlc3QoRG9tVGVzdHMuc3VpdGUoKSk7Ci0gICAgICAgIHN1aXRlLmFkZFRlc3QoR0RhdGVUZXN0cy5zdWl0ZSgpKTsKLSAgICAgICAgc3VpdGUuYWRkVGVzdChTdWJzdEdyb3VwVGVzdHMuc3VpdGUoKSk7Ci0gICAgICAgIHJldHVybiBzdWl0ZTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvU3RvcmVUZXN0cy5qYXZhIGIvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL1N0b3JlVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRjNDc1Ni4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvU3RvcmVUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYyMyArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIGRydGNhc2VzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IuVG9rZW5UeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yLlhtbEJvb2ttYXJrOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sU2F4SGFuZGxlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbExpbmVOdW1iZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxCZWFuczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLmNvbW1vbi5YbWxOYW1lSW1wbDsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5SYW5kb207Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuU0FYUGFyc2VyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlckZhY3Rvcnk7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLWltcG9ydCBvcmcueG1sLnNheC5BdHRyaWJ1dGVzOwotaW1wb3J0IG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyOwotaW1wb3J0IG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcjsKLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcueG1sLnNheC5Mb2NhdG9yOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5YTUxSZWFkZXI7Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5BdHRyaWJ1dGU7Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5BdHRyaWJ1dGVJdGVyYXRvcjsKLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLkNoYW5nZVByZWZpeE1hcHBpbmc7Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5DaGFyYWN0ZXJEYXRhOwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uQ29tbWVudDsKLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLkVuZERvY3VtZW50OwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uRW5kRWxlbWVudDsKLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLkVuZFByZWZpeE1hcHBpbmc7Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5TdGFydERvY3VtZW50OwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uU3RhcnRFbGVtZW50OwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uU3RhcnRQcmVmaXhNYXBwaW5nOwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MRXZlbnQ7Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbTsKLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTE5hbWU7Ci0gICAKLXB1YmxpYyBjbGFzcyBTdG9yZVRlc3RzIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgICBwdWJsaWMgU3RvcmVUZXN0cyhTdHJpbmcgbmFtZSkgeyBzdXBlcihuYW1lKTsgfQotICAgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsgcmV0dXJuIG5ldyBUZXN0U3VpdGUoU3RvcmVUZXN0cy5jbGFzcyk7IH0KLQotICAgIHN0YXRpYyBTdHJpbmdbXSBfYXJnczsKLSAgICBzdGF0aWMgU3RyaW5nIF90ZXN0OwotCi0gICAgcHVibGljIHN0YXRpYyBGaWxlIGdldENhc2VGaWxlKFN0cmluZyB0aGVDYXNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFRlc3RFbnYueGJlYW5DYXNlKCJzdG9yZS8iICsgdGhlQ2FzZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFhtbEN1cnNvciBsb2FkQ2FzZShTdHJpbmcgdGhlQ2FzZSkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgcmV0dXJuIFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKGdldENhc2VGaWxlKHRoZUNhc2UpLCBudWxsKS5uZXdDdXJzb3IoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc3RyZWFtVGVzdCAoIFN0cmluZyB4bWwgKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBYbWxPYmplY3QgeDEgPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSggeG1sICk7Ci0gICAgICAgIFhtbE9iamVjdCB4MiA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCB4MS5uZXdDdXJzb3IoKS5uZXdYTUxTdHJlYW1SZWFkZXIoKSApOwotCi0gICAgICAgIFN0cmluZyB4MVRleHQgPSB4MS54bWxUZXh0KCk7Ci0gICAgICAgIFN0cmluZyB4MlRleHQgPSB4Mi54bWxUZXh0KCk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHgxVGV4dC5lcXVhbHMoIHgyVGV4dCApICk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdFhNTFN0cmVhbVJlYWRlciAoICkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgc3RyZWFtVGVzdCggIjxhLz4iICk7Ci0gICAgICAgIHN0cmVhbVRlc3QoICI8YSB4PSd5Jy8+IiApOwotICAgICAgICBzdHJlYW1UZXN0KCAiPGE+PGI+Zm9vPC9iPjwvYT4iICk7Ci0gICAgICAgIHN0cmVhbVRlc3QoICI8YT48Yj5mbzwhLS1tb28tLT5vPD9nb29mIGJhbGw/PmRzZmRmPC9iPjwvYT4iICk7Ci0gICAgICAgIHN0cmVhbVRlc3QoICI8YSB4bWxucz0nbm5uJz48L2E+IiApOwotICAgICAgICBzdHJlYW1UZXN0KCAiPGEgeD0neSc+PCEtLS0tPng8Yi8+PGMgcD0ncSc+ejwvYz48L2E+IiApOwotICAgICAgICBzdHJlYW1UZXN0KCAiPGEgeD0neSc+PCEtLS0tPjxiPm1vbzwvYj48YyBwPSdxJz48L2M+PC9hPiIgKTsKLSAgICAgICAgc3RyZWFtVGVzdCggIjxhPmFzYTxiLz5zZHNkPGM+YWF6PC9jPmFkc2FzZDwvYT4iICk7Ci0gICAgICAgIHN0cmVhbVRlc3QoICI8YT48P3RhcmdldCB2YWx1ZT8+PC9hPiIgKTsKLSAgICAgICAgc3RyZWFtVGVzdCggIjxuOmEgeG1sbnM6bj0nbm5uJz48L246YT4iICk7Ci0gICAgICAgIHN0cmVhbVRlc3QoICI8ajphIHg9J3knIHA9J3EnIHhtbG5zOmo9J2snPjwvajphPiIgKTsKLSAgICAgICAgc3RyZWFtVGVzdCggIjxmb28geG1sbnM9XCJmb28uY29tXCI+PGJhcj4xPC9iYXI+PC9mb28+IiApOwotICAgICAgICBzdHJlYW1UZXN0KCAiPGZvbz48IS0tY29tbWVudC0tPjw/dGFyZ2V0IGZvbz8+PC9mb28+IiApOwotICAgICAgICBzdHJlYW1UZXN0KCAiPGZvbz5hPGJhcj5iPC9iYXI+YzxiYXI+ZDwvYmFyPmU8L2Zvbz4iICk7Ci0gICAgICAgIHN0cmVhbVRlc3QoICI8Zm9vIHhtbG5zOng9XCJ5XCI+PGJhciB4bWxuczp4PVwielwiLz48L2Zvbz4iICk7Ci0gICAgICAgIHN0cmVhbVRlc3QoICI8Zm9vIHg9XCJ5XCIgcD1cInJcIi8+IiApOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0UmVwbGFjZUNvbnRlbnRzICggKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBYbWxPYmplY3QgeERzdCA9IFhtbE9iamVjdC5GYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAgIFhtbE9iamVjdCB4U3JjID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8Zm9vLz4iICk7Ci0gICAgICAgIFhtbE9iamVjdCBuZXdEc3QgPSB4RHN0LnNldCggeFNyYyApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggbmV3RHN0LnhtbFRleHQoKS5lcXVhbHMoICI8Zm9vLz4iICkgKTsKLSAgICAgICAgCi0gICAgICAgIHhEc3QgPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSggIjxiYXIvPiIgKTsKLSAgICAgICAgeFNyYyA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCAiPGZvby8+IiApOwotICAgICAgICBYbWxDdXJzb3IgYyA9IHhEc3QubmV3Q3Vyc29yKCk7Ci0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLSAgICAgICAgeERzdCA9IGMuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIHhEc3Quc2V0KCB4U3JjICk7Ci0gICAgICAgIGMudG9TdGFydERvYygpOwotICAgICAgICB4RHN0ID0gYy5nZXRPYmplY3QoKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHhEc3QueG1sVGV4dCgpLmVxdWFscyggIjxiYXI+PGZvby8+PC9iYXI+IiApICk7Ci0KLSAgICAgICAgeERzdCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCAiPGJhciB4PSd5Jy8+IiApOwotICAgICAgICB4U3JjID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8Zm9vPm1vbzwvZm9vPiIgKTsKLSAgICAgICAgYyA9IHhEc3QubmV3Q3Vyc29yKCk7Ci0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLSAgICAgICAgYy50b05leHRUb2tlbigpOwotICAgICAgICB4RHN0ID0gYy5nZXRPYmplY3QoKTsKLSAgICAgICAgeERzdC5zZXQoIHhTcmMgKTsKLSAgICAgICAgYy50b1N0YXJ0RG9jKCk7Ci0gICAgICAgIHhEc3QgPSBjLmdldE9iamVjdCgpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggeERzdC54bWxUZXh0KCkuZXF1YWxzKCAiPGJhciB4PVwibW9vXCIvPiIgKSApOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0U25pZmZpbmcgKCApCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbE9iamVjdCB4OwotICAgICAgICAKLSAgICAgICAgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCAiPHhvby8+IiApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggeC5zY2hlbWFUeXBlKCkgPT0gWG1sQmVhbnMuTk9fVFlQRSApOwotICAgICAgICAKLSAgICAgICAgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKAotICAgICAgICAgICAgIjxzY2hlbWEgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJy8+IiApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgKLSAgICAgICAgICAgIHguc2NoZW1hVHlwZSgpID09IG9yZy53My54MjAwMS54bWxTY2hlbWEuU2NoZW1hRG9jdW1lbnQudHlwZSApOwotCi0gICAgICAgIHggPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSgKLSAgICAgICAgICAgICI8c2NoZW1hIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS9tb28nLz4iICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB4LnNjaGVtYVR5cGUoKSA9PSBYbWxCZWFucy5OT19UWVBFICk7Ci0KLSAgICAgICAgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKAotICAgICAgICAgICAgIjxzY2hlbWEgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJy8+IiApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgKLSAgICAgICAgICAgIHguc2NoZW1hVHlwZSgpID09IG9yZy53My54MjAwMS54bWxTY2hlbWEuU2NoZW1hRG9jdW1lbnQudHlwZSApOwotCi0gICAgICAgIHggPSBvcmcudzMueDIwMDEueG1sU2NoZW1hLlNjaGVtYURvY3VtZW50LkZhY3RvcnkucGFyc2UoCi0gICAgICAgICAgICAgICAgIjxzY2hlbWEgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJy8+IiApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgKLSAgICAgICAgICAgIHguc2NoZW1hVHlwZSgpID09IG9yZy53My54MjAwMS54bWxTY2hlbWEuU2NoZW1hRG9jdW1lbnQudHlwZSApOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB4ID0gCi0gICAgICAgICAgICAgICAgb3JnLnczLngyMDAxLnhtbFNjaGVtYS5TY2hlbWFEb2N1bWVudC5GYWN0b3J5LnBhcnNlKAotICAgICAgICAgICAgICAgICAgICAiPHNjaGVtYSB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEvbW9vJy8+IiApOwotICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGZhbHNlICk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKCBUaHJvd2FibGUgZSApIHsgfQotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0Q3Vyc29yU3RhY2sgKCApCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbE9iamVjdCB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8Zm9vIHg9J3knLz4iICk7Ci0gICAgICAgIFhtbEN1cnNvciBjID0geC5uZXdDdXJzb3IoKTsKLSAgICAgICAgYy5wdXNoKCk7Ci0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLSAgICAgICAgYy5wdXNoKCk7Ci0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMuaXNBdHRyKCkgKTsKLSAgICAgICAgYy5wb3AoKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMuaXNTdGFydCgpICk7Ci0gICAgICAgIGMucG9wKCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLmlzU3RhcnRkb2MoKSApOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0SW1wbGljaXROYW1lc3BhY2VzICggKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBNYXAgbmFtZXNwYWNlcyA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgIG5hbWVzcGFjZXMucHV0KCAiZm9vIiwgImZvby5jb20iICk7Ci0gICAgICAgIG5hbWVzcGFjZXMucHV0KCAiYmFyIiwgImJhci5jb20iICk7Ci0gICAgICAgIG5hbWVzcGFjZXMucHV0KCAiIiwgImRlZmF1bHQuY29tIiApOwotCi0gICAgICAgIFhtbE9wdGlvbnMgb3B0aW9ucyA9IG5ldyBYbWxPcHRpb25zKCk7Ci0gICAgICAgIG9wdGlvbnMucHV0KCBYbWxPcHRpb25zLlNBVkVfSU1QTElDSVRfTkFNRVNQQUNFUywgbmFtZXNwYWNlcyApOwotCi0gICAgICAgIFhtbE9iamVjdCB4ID0gWG1sT2JqZWN0LkZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgWG1sQ3Vyc29yIGMgPSB4Lm5ld0N1cnNvcigpOwotCi0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLQotICAgICAgICBjLmJlZ2luRWxlbWVudCggImEiLCAiZm9vLmNvbSIgKTsKLSAgICAgICAgYy5iZWdpbkVsZW1lbnQoICJiIiwgImRlZmF1bHQuY29tIiApOwotICAgICAgICBjLmJlZ2luRWxlbWVudCggImMiLCAiYmFyLmNvbSIgKTsKLQotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgKLSAgICAgICAgICAgIHgueG1sVGV4dCggb3B0aW9ucyApLmVxdWFscyggIjxmb286YT48Yj48YmFyOmMvPjwvYj48L2ZvbzphPiIgKSApOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIENvbnRlbnQgaW1wbGVtZW50cyBDb250ZW50SGFuZGxlciwgTGV4aWNhbEhhbmRsZXIKLSAgICB7Ci0gICAgICAgIHB1YmxpYyB2b2lkIHN0YXJ0RG9jdW1lbnQgKCApIHRocm93cyBTQVhFeGNlcHRpb24gCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFkZCggIlNUQVJUX0RPQ1VNRU5UIiApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgZW5kRG9jdW1lbnQgKCApIHRocm93cyBTQVhFeGNlcHRpb24gCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFkZCggIkVORF9ET0NVTUVOVCIgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHN0YXJ0RWxlbWVudCAoCi0gICAgICAgICAgICBTdHJpbmcgbmFtZXNwYWNlVVJJLCBTdHJpbmcgbG9jYWxOYW1lLAotICAgICAgICAgICAgU3RyaW5nIHFOYW1lLCBBdHRyaWJ1dGVzIGF0dHMgKQotICAgICAgICAgICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgICAgYWRkKCAiU1RBUlRfRUxFTUVOVCIgKTsKLSAgICAgICAgICAgIGFkZCggIiAgbmFtZXNwYWNlVVJJOiAiICsgbmFtZXNwYWNlVVJJICk7Ci0gICAgICAgICAgICBhZGQoICIgIGxvY2FsTmFtZTogIiArIGxvY2FsTmFtZSApOwotLy8gICAgICAgICAgICBhZGQoICIgIHFOYW1lOiAiICsgcU5hbWUgKTsgCi0KLSAgICAgICAgICAgIFRyZWVTZXQgc29ydGVkQXR0cnMgPSBuZXcgVHJlZVNldCgpOwotCi0gICAgICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgYXR0cy5nZXRMZW5ndGgoKSA7IGkrKyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGxuID0gYXR0cy5nZXRMb2NhbE5hbWUoIGkgKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgdXJpID0gYXR0cy5nZXRVUkkoIGkgKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcW5hbWUgPSBhdHRzLmdldFFOYW1lKCBpICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobG4uZXF1YWxzKCJ4bWxucyIpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAocW5hbWUuc3RhcnRzV2l0aCgieG1sbnMiKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLS8vICAgICAgICAgICAgICAgIGlmIChsbi5lcXVhbHMoICJ4bWxucyIgKSkKLS8vICAgICAgICAgICAgICAgICAgICBsbiA9ICIiOwotLy8KLS8vICAgICAgICAgICAgICAgIGlmICh1cmkuZXF1YWxzKCAieG1sbnMiICkpCi0vLyAgICAgICAgICAgICAgICAgICAgdXJpID0gIiI7Ci0KLSAgICAgICAgICAgICAgICBzb3J0ZWRBdHRycy5hZGQoCi0gICAgICAgICAgICAgICAgICAgIHVyaSArICItIiArIGxuICsgIi0iICsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF0dHMuZ2V0UU5hbWUoIGkgKSArICItIiArIGF0dHMuZ2V0VHlwZSggaSApICsgIi0iICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRzLmdldFZhbHVlKCBpICkgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICggSXRlcmF0b3IgaSA9IHNvcnRlZEF0dHJzLml0ZXJhdG9yKCkgOyBpLmhhc05leHQoKSA7ICkKLSAgICAgICAgICAgICAgICBhZGQoICIgIEF0dHI6ICIgKyBpLm5leHQoKSApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgZW5kRWxlbWVudCAoCi0gICAgICAgICAgICBTdHJpbmcgbmFtZXNwYWNlVVJJLCBTdHJpbmcgbG9jYWxOYW1lLCBTdHJpbmcgcU5hbWUgKQotICAgICAgICAgICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgICAgYWRkKCAiRU5EX0VMRU1FTlQiICk7Ci0gICAgICAgICAgICBhZGQoICIgIG5hbWVzcGFjZVVSSTogIiArIG5hbWVzcGFjZVVSSSApOwotICAgICAgICAgICAgYWRkKCAiICBsb2NhbE5hbWU6ICIgKyBsb2NhbE5hbWUgKTsKLS8vICAgICAgICAgICAgYWRkKCAiICBxTmFtZTogIiArIHFOYW1lICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBjaGFyYWN0ZXJzICggY2hhciBjaFtdLCBpbnQgc3RhcnQsIGludCBsZW5ndGggKQotICAgICAgICAgICAgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobGVuZ3RoID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhZGQoICJDSEFSQUNURVJTIiApOwotICAgICAgICAgICAgICAgIGFkZCggY2gsIHN0YXJ0LCBsZW5ndGggKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIGNvbW1lbnQgKCBjaGFyIGNoW10sIGludCBzdGFydCwgaW50IGxlbmd0aCApIAotICAgICAgICAgICAgdGhyb3dzIFNBWEV4Y2VwdGlvbiAKLSAgICAgICAgeyAKLSAgICAgICAgICAgIGFkZCggIkNPTU1FTlQiICk7Ci0gICAgICAgICAgICBhZGQoICIgIENvbW1lbnQ6ICIsIGNoLCBzdGFydCwgbGVuZ3RoICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gKCBTdHJpbmcgdGFyZ2V0LCBTdHJpbmcgZGF0YSApCi0gICAgICAgICAgICB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFkZCggIlBST0NFU1NJTkdfSU5TVFJVQ1RJT04iICk7Ci0gICAgICAgICAgICBhZGQoICAgInRhcmdldDogIiArIHRhcmdldCApOwotICAgICAgICAgICAgYWRkKCAgICJkYXRhOiAiICsgZGF0YSApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgaWdub3JhYmxlV2hpdGVzcGFjZSAoIGNoYXIgY2hbXSwgaW50IHN0YXJ0LCBpbnQgbGVuZ3RoICkKLSAgICAgICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGxlbmd0aCA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYWRkKCAiSUdOT1JBQkxFX1dISVRFU1BBQ0UiICk7Ci0gICAgICAgICAgICAgICAgYWRkKCAiICB3aGl0ZXNwYWNlOiAiLCBjaCwgc3RhcnQsIGxlbmd0aCApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwdWJsaWMgdm9pZCBzdGFydFByZWZpeE1hcHBpbmcgKCBTdHJpbmcgcHJlZml4LCBTdHJpbmcgdXJpICkKLSAgICAgICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgICAgYWRkKCAiU1RBUlRfUFJFRklYX01BUFBJTkciICk7Ci0vLyAgICAgICAgICAgIGFkZCggIiAgcHJlZml4OiAiICsgcHJlZml4ICk7Ci0gICAgICAgICAgICBhZGQoICIgIHVyaTogIiArIHVyaSApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwdWJsaWMgdm9pZCBlbmRQcmVmaXhNYXBwaW5nICggU3RyaW5nIHByZWZpeCApIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgICAgYWRkKCAiRU5EX1BSRUZJWF9NQVBQSU5HIiApOwotLy8gICAgICAgICAgICBhZGQoICIgIHByZWZpeDogIiArIHByZWZpeCApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwdWJsaWMgdm9pZCBzdGFydENEQVRBICggKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFkZCggIlNUQVJUX0NEQVRBIiApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwdWJsaWMgdm9pZCBlbmRDREFUQSAoICkgdGhyb3dzIFNBWEV4Y2VwdGlvbgotICAgICAgICB7Ci0gICAgICAgICAgICBhZGQoICJFTkRfQ0RBVEEiICk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHB1YmxpYyB2b2lkIHN0YXJ0RFREICggU3RyaW5nIG5hbWUsIFN0cmluZyBwdWJsaWNJZCwgU3RyaW5nIHN5c3RlbUlkICkKLSAgICAgICAgICAgIHRocm93cyBTQVhFeGNlcHRpb24KLSAgICAgICAgewotICAgICAgICAgICAgYWRkKCAiU1RBUlRfRFREIiApOwotICAgICAgICAgICAgYWRkKCAiICBuYW1lOiAiICsgbmFtZSApOwotICAgICAgICAgICAgYWRkKCAiICBwdWJsaWNJZDogIiArIHB1YmxpY0lkICk7Ci0gICAgICAgICAgICBhZGQoICIgIHN5c3RlbUlkOiAiICsgc3lzdGVtSWQgKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHVibGljIHZvaWQgZW5kRFREICggKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFkZCggIkVORF9EVEQiICk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHB1YmxpYyB2b2lkIHN0YXJ0RW50aXR5ICggU3RyaW5nIG5hbWUgKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFkZCggIlNUQVJUX0VOVElUWSIgKTsKLSAgICAgICAgICAgIGFkZCggIiAgbmFtZTogIiArIG5hbWUgKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHVibGljIHZvaWQgZW5kRW50aXR5ICggU3RyaW5nIG5hbWUgKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFkZCggIkVORF9FTlRJVFkiICk7Ci0gICAgICAgICAgICBhZGQoICIgIG5hbWU6ICIgKyBuYW1lICk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldERvY3VtZW50TG9jYXRvciAoIExvY2F0b3IgbG9jYXRvciApCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGFkZCggIlNUQVJUX0RPQ1VNRU5UX0xPQ0FUT1IiICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBza2lwcGVkRW50aXR5ICggU3RyaW5nIG5hbWUgKSB0aHJvd3MgU0FYRXhjZXB0aW9uCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFkZCggIlNLSVBQRURfRU5USVRZIiApOwotICAgICAgICAgICAgYWRkKCAiICBuYW1lOiAiICsgbmFtZSApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZSB2b2lkIGFkZCAoIFN0cmluZyBzICkKLSAgICAgICAgewotICAgICAgICAgICAgX3NiLmFwcGVuZCggcyApOwotICAgICAgICAgICAgX3NiLmFwcGVuZCggIlxuIiApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwcml2YXRlIHZvaWQgYWRkICggU3RyaW5nIHMsIGNoYXJbXSBidWYsIGludCBvZmYsIGludCBjY2ggKQotICAgICAgICB7Ci0gICAgICAgICAgICBfc2IuYXBwZW5kKCBzICk7Ci0gICAgICAgICAgICBfc2IuYXBwZW5kKCBidWYsIG9mZiwgY2NoICk7Ci0gICAgICAgICAgICBfc2IuYXBwZW5kKCAiXG4iICk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHByaXZhdGUgdm9pZCBhZGQgKCBjaGFyW10gYnVmLCBpbnQgb2ZmLCBpbnQgY2NoICkKLSAgICAgICAgewotICAgICAgICAgICAgX3NiLmFwcGVuZCggYnVmLCBvZmYsIGNjaCApOwotICAgICAgICAgICAgX3NiLmFwcGVuZCggIlxuIiApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMgKCBPYmplY3QgdGhhdCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0b1N0cmluZygpLmVxdWFscyggdGhhdC50b1N0cmluZygpICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nICggKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gX3NiLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwcml2YXRlIFN0cmluZ0J1ZmZlciBfc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGRvVGVzdFNheFNhdmVyICggU3RyaW5nIHhtbCApCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIC8vIE1FCi0gICAgICAgIAotICAgICAgICBDb250ZW50IGNvbnRlbnQyID0gbmV3IENvbnRlbnQoKTsKLQotICAgICAgICBYbWxPYmplY3QgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCB4bWwgKTsKLQotICAgICAgICB4LnNhdmUoIGNvbnRlbnQyLCBjb250ZW50MiApOwotCi0gICAgICAgIC8vIFRIRU0KLQotICAgICAgICBTQVhQYXJzZXJGYWN0b3J5IHNwZiA9IFNBWFBhcnNlckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICAgICAgU0FYUGFyc2VyIHNwID0gc3BmLm5ld1NBWFBhcnNlcigpOwotICAgICAgICAKLSAgICAgICAgWE1MUmVhZGVyIHhyID0gc3AuZ2V0WE1MUmVhZGVyKCk7Ci0gICAgICAgIAotICAgICAgICBDb250ZW50IGNvbnRlbnQxID0gbmV3IENvbnRlbnQoKTsKLSAgICAgICAgCi0gICAgICAgIHhyLnNldFByb3BlcnR5KCAiaHR0cDovL3htbC5vcmcvc2F4L3Byb3BlcnRpZXMvbGV4aWNhbC1oYW5kbGVyIiwgY29udGVudDEgKTsKLSAgICAgICAgeHIuc2V0RmVhdHVyZSggImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy9uYW1lc3BhY2UtcHJlZml4ZXMiLCB0cnVlICk7Ci0gICAgICAgIHhyLnNldEZlYXR1cmUoICJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvbmFtZXNwYWNlcyIsIHRydWUgKTsKLSAgICAgICAgeHIuc2V0RmVhdHVyZSggImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy92YWxpZGF0aW9uIiwgZmFsc2UgKTsKLQotICAgICAgICB4ci5zZXRDb250ZW50SGFuZGxlciggY29udGVudDEgKTsKLSAgICAgICAgCi0gICAgICAgIElucHV0U291cmNlIGlzID0gbmV3IElucHV0U291cmNlKCBuZXcgU3RyaW5nUmVhZGVyKCAgeG1sICkgKTsKLQotICAgICAgICB4ci5wYXJzZSggaXMgKTsKLQotCi0gICAgICAgIGlmICghY29udGVudDEuZXF1YWxzKCBjb250ZW50MiApKQotICAgICAgICB7Ci0gICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oICJTQVggc2F2ZSBmYWlsdXJlOiAiICk7Ci0gICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIHhtbCApOwotICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiggIlNBWDogIiApOwotICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCBjb250ZW50MS50b1N0cmluZygpICk7Ci0gICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiTUU6ICIgKTsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiggY29udGVudDIudG9TdHJpbmcoKSApOwotICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBmYWxzZSApOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHRlc3RTYXhTYXZlciAoICkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgZG9UZXN0U2F4U2F2ZXIoICI8YSB4bWxucz0nbm5uJz48L2E+IiApOwotICAgICAgICBkb1Rlc3RTYXhTYXZlciggIjxhIHg9J3knPjwhLS0tLT54PGIvPjxjIHA9J3EnPno8L2M+PC9hPiIgKTsKLSAgICAgICAgZG9UZXN0U2F4U2F2ZXIoICI8YSB4PSd5Jz48IS0tLS0+PGI+bW9vPC9iPjxjIHA9J3EnPjwvYz48L2E+IiApOwotICAgICAgICBkb1Rlc3RTYXhTYXZlciggIjxhPmFzYTxiLz5zZHNkPGM+YWF6PC9jPmFkc2FzZDwvYT4iICk7Ci0gICAgICAgIGRvVGVzdFNheFNhdmVyKCAiPGE+PD90YXJnZXQgdmFsdWU/PjwvYT4iICk7Ci0gICAgICAgIGRvVGVzdFNheFNhdmVyKCAiPG46YSB4bWxuczpuPSdubm4nPjwvbjphPiIgKTsKLSAgICAgICAgZG9UZXN0U2F4U2F2ZXIoICI8ajphIHg9J3knIHA9J3EnIHhtbG5zOmo9J2snPjwvajphPiIgKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgX190ZXN0UGFyc2luZyAoICkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgUmFuZG9tIHIgPSBuZXcgUmFuZG9tKCAxICk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgMTAwMDAwIDsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHhtbCA9IG1ha2VSYW5kb21Eb2N1bWVudCggciApOwotCi0vLyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiggIlN0YXJ0aW5nLi4uIiApOwotLy8KLS8vICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCB4bWwgKTsKLQotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoIHhtbCApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKCBUaHJvd2FibGUgZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiRmFpbGVkIHBhcnNlIHRlc3Q6IiApOwotICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCB4bWwgKTsKLQotICAgICAgICAgICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKCAiYzpcXGVlLnhtbCIgKTsKLSAgICAgICAgICAgICAgICBQcmludFN0cmVhbSBwcyA9IG5ldyBQcmludFN0cmVhbSggb3MgKTsKLSAgICAgICAgICAgICAgICBwcy5wcmludGxuKCB4bWwgKTsKLSAgICAgICAgICAgICAgICBwcy5jbG9zZSgpOwotICAgICAgICAgICAgICAgIG9zLmNsb3NlKCk7Ci0KLSAgICAgICAgICAgICAgICB0aHJvdyAoUnVudGltZUV4Y2VwdGlvbikgZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotLy8gICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oICJGaW5pc2hlZC4uLiIgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGRvVGVzdExpbmVOdW1iZXJzICggU3RyaW5nIHhtbCApCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGludCBsaW5lID0gMTsKLSAgICAgICAgaW50IGNvbCA9IDE7Ci0KLSAgICAgICAgWG1sQ3Vyc29yIGMgPQotICAgICAgICAgICAgWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoCi0gICAgICAgICAgICAgICAgeG1sLCBuZXcgWG1sT3B0aW9ucygpLnNldExvYWRMaW5lTnVtYmVycygpICkuCi0gICAgICAgICAgICAgICAgICAgIG5ld0N1cnNvcigpOwotCi0gICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCB4bWwubGVuZ3RoKCkgOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyIGNoID0geG1sLmNoYXJBdCggaSApOwotCi0gICAgICAgICAgICBpZiAoY2ggPT0gJzwnICYmIENoYXJhY3Rlci5pc0xldHRlciggeG1sLmNoYXJBdCggaSArIDEgKSApICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAoIWMuY3VycmVudFRva2VuVHlwZSgpLmlzU3RhcnQoKSkKLSAgICAgICAgICAgICAgICAgICAgYy50b05leHRUb2tlbigpOwotCi0gICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMuY3VycmVudFRva2VuVHlwZSgpLmlzU3RhcnQoKSApOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBYbWxMaW5lTnVtYmVyIGxuID0KLSAgICAgICAgICAgICAgICAgICAgKFhtbExpbmVOdW1iZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICBjLmdldEJvb2ttYXJrKCBYbWxMaW5lTnVtYmVyLmNsYXNzICk7Ci0KLSAgICAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggbG4gIT0gbnVsbCApOwotCi0gICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGxuLmdldExpbmUoKSAgID09IC0xIHx8IGxuLmdldExpbmUoKSA9PSBsaW5lICk7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGxuLmdldENvbHVtbigpID09IC0xIHx8IGxuLmdldENvbHVtbigpID09IGNvbCApOwotICAgICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBsbi5nZXRPZmZzZXQoKSA9PSAtMSB8fCBsbi5nZXRPZmZzZXQoKSA9PSBpICk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgYy50b05leHRUb2tlbigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY2ggPT0gJ1xuJykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsaW5lKys7Ci0gICAgICAgICAgICAgICAgY29sPSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbCsrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIF9fdGVzdExpbmVOdW1iZXJzICggKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBSYW5kb20gciA9IG5ldyBSYW5kb20oIDEgKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCAxMDAwIDsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHhtbCA9IG1ha2VSYW5kb21Eb2N1bWVudCggciApOwotCi0vLyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiggIlN0YXJ0aW5nLi4uIiApOwotLy8KLS8vICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCB4bWwgKTsKLQotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZG9UZXN0TGluZU51bWJlcnMoIHhtbCApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKCBUaHJvd2FibGUgZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiRmFpbGVkIGxpbmUgbnVtYmVyIHRlc3Q6IiApOwotICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiggeG1sICk7Ci0KLSAgICAgICAgICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBuZXcgRmlsZU91dHB1dFN0cmVhbSggImM6XFxlZS54bWwiICk7Ci0gICAgICAgICAgICAgICAgUHJpbnRTdHJlYW0gcHMgPSBuZXcgUHJpbnRTdHJlYW0oIG9zICk7Ci0gICAgICAgICAgICAgICAgcHMucHJpbnRsbiggeG1sICk7Ci0gICAgICAgICAgICAgICAgcHMuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICBvcy5jbG9zZSgpOwotCi0gICAgICAgICAgICAgICAgdGhyb3cgKFJ1bnRpbWVFeGNlcHRpb24pIGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLS8vICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiRmluaXNoZWQuLi4iICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBEb2NCdWlsZGVyCi0gICAgewotICAgICAgICBSYW5kb20gcjsKLSAgICAgICAgU3RyaW5nQnVmZmVyIHNiOwotICAgICAgICAKLSAgICAgICAgRG9jQnVpbGRlciAoIFJhbmRvbSBfciwgU3RyaW5nQnVmZmVyIF9zYiApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHIgPSBfcjsKLSAgICAgICAgICAgIHNiID0gX3NiOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBhcHBlbmQgKCBjaGFyIGNoICkKLSAgICAgICAgewotICAgICAgICAgICAgc2IuYXBwZW5kKCBjaCApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIGFwcGVuZCAoIFN0cmluZyBzICkKLSAgICAgICAgewotICAgICAgICAgICAgc2IuYXBwZW5kKCBzICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCB3aGl0ZXNwYWNlICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgcCA9IHIubmV4dEludCggMTAwICk7Ci0KLSAgICAgICAgICAgIGlmIChwIDwgMjApCi0gICAgICAgICAgICAgICAgYXBwZW5kKCAnXHQnICk7Ci0gICAgICAgICAgICBlbHNlIGlmIChwIDwgNDApCi0gICAgICAgICAgICAgICAgYXBwZW5kKCAnXG4nICk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYXBwZW5kKCAnICcgKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHdoaXRlc3BhY2VzICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKCBpbnQgaSA9IHIubmV4dEludCggOCApIDsgaSA+IDAgOyBpLS0gKQotICAgICAgICAgICAgICAgIHdoaXRlc3BhY2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBjaGFyIG1ha2VMZXR0ZXIgKCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAoY2hhcikgKCgoaW50KSAnYScpICsgci5uZXh0SW50KCAyNiApKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHVibGljIHZvaWQgbGV0dGVyICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBhcHBlbmQoIG1ha2VMZXR0ZXIoKSApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgY2hhckVudGl0eSAoICkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoICggci5uZXh0SW50KCA1ICkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgY2FzZSAwIDogYXBwZW5kKCAiJmx0OyIgKTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDEgOiBhcHBlbmQoICImZ3Q7IiApOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMiA6IGFwcGVuZCggIiZhbXA7IiApOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgMyA6IGFwcGVuZCggIiZhcG9zOyIgKTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDQgOiBhcHBlbmQoICImcXVvdDsiICk7IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIHB1YmxpYyB2b2lkIHRleHQgKCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoIGludCBpID0gci5uZXh0SW50KCAyMCApIDsgaSA+IDAgOyBpLS0gKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBwID0gci5uZXh0SW50KCAxMDAgKTsKLQotICAgICAgICAgICAgICAgIGlmIChwIDwgNzApCi0gICAgICAgICAgICAgICAgICAgIGxldHRlcigpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHAgPCA3NCkKLSAgICAgICAgICAgICAgICAgICAgY2hhckVudGl0eSgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgd2hpdGVzcGFjZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIFN0cmluZyBtYWtlTmNOYW1lICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmdCdWZmZXIgbmFtZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICggOyA7ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjaGFyIGNoID0gbWFrZUxldHRlcigpOwotCi0gICAgICAgICAgICAgICAgaWYgKGNoID09ICd4JyB8fCBjaCA9PSAnWCcpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgbmFtZS5hcHBlbmQoIGNoICk7Ci0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICggaW50IGkgPSByLm5leHRJbnQoIDIwICkgOyBpID4gMCA7IGktLSApCi0gICAgICAgICAgICAgICAgbmFtZS5hcHBlbmQoIG1ha2VMZXR0ZXIoKSApOwotCi0gICAgICAgICAgICByZXR1cm4gbmFtZS50b1N0cmluZygpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgbmNOYW1lICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBhcHBlbmQoIG1ha2VOY05hbWUoKSApOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgY29tbWVudCAoICkKLSAgICAgICAgewotICAgICAgICAgICAgYXBwZW5kKCAiPCEtLSIgKTsKLSAgICAgICAgICAgIHRleHQoKTsKLSAgICAgICAgICAgIGFwcGVuZCggIi0tPiIgKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHVibGljIHZvaWQgcHJvY2luc3QgKCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFwcGVuZCggIjw/IiApOwotICAgICAgICAgICAgbmNOYW1lKCk7Ci0KLSAgICAgICAgICAgIGlmIChyLm5leHRJbnQoIDEwMCApIDwgOTApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgd2hpdGVzcGFjZSgpOwotICAgICAgICAgICAgICAgIHRleHQoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYXBwZW5kKCAiPz4iICk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCB3aGl0ZUNvbnRlbnQgKCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoIDsgOyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHAgPSByLm5leHRJbnQoIDEwMCApOwotCi0gICAgICAgICAgICAgICAgaWYgKHAgPCAyMCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAocCA8IDUwKQotICAgICAgICAgICAgICAgICAgICB3aGl0ZXNwYWNlcygpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHAgPCA3MCkKLSAgICAgICAgICAgICAgICAgICAgY29tbWVudCgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcHJvY2luc3QoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHVibGljIHZvaWQgeG1sRGVjbCAoICkKLSAgICAgICAgewotICAgICAgICAgICAgYXBwZW5kKCAiPD94bWwgdmVyc2lvbj1cIjEuMFwiPz4iICk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHB1YmxpYyB2b2lkIGNvbnRlbnQgKCBpbnQgZGVwdGggKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKCBpbnQgaSA9IHIubmV4dEludCggMTAgKSA7IGkgPiAwIDsgaS0tICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKCByLm5leHRJbnQoIDQgKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgMCA6Ci0gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRDb250ZW50KCBkZXB0aCArIDEgKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgMSA6IHRleHQoKTsgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMiA6IGNvbW1lbnQoKTsgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMyA6IHByb2NpbnN0KCk7ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHVibGljIHZvaWQgYXR0cmlidXRlICggKQotICAgICAgICB7Ci0gICAgICAgICAgICBuY05hbWUoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHIubmV4dEludCggMTAwICkgPT0gMCkKLSAgICAgICAgICAgICAgICB3aGl0ZXNwYWNlcygpOwotCi0gICAgICAgICAgICBhcHBlbmQoICc9JyApOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoci5uZXh0SW50KCAxMDAgKSA9PSAwKQotICAgICAgICAgICAgICAgIHdoaXRlc3BhY2VzKCk7Ci0KLSAgICAgICAgICAgIGNoYXIgcSA9IHIubmV4dEludCggMiApID09IDAgPyAnXCcnIDogJyInOwotCi0gICAgICAgICAgICBhcHBlbmQoIHEgKTsKLQotICAgICAgICAgICAgdGV4dCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhcHBlbmQoIHEgKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcHVibGljIHZvaWQgZWxlbWVudENvbnRlbnQgKCBpbnQgZGVwdGggKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBJZiBkZXB0aCA9PSAwLCBndWFyYW50ZWUgYW4gZWxlbWVudCwgb3RoZXJ3aXNlLCBhcyBkZXB0aAotICAgICAgICAgICAgLy8gaW5jcmVhc2VzLCB0aGUgcHJvYmFibGlsaXR5IHdlJ2xsIHNwaXQgb3V0IGFuIGVsZW1lbnQKLSAgICAgICAgICAgIC8vIGdldHMgc21hbGxlci4KLQotICAgICAgICAgICAgaWYgKHIubmV4dEludCggZGVwdGggKyAxICkgPD0gMSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IG1ha2VOY05hbWUoKTsKLQotICAgICAgICAgICAgICAgIGFwcGVuZCggJzwnICk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kKCBuYW1lICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoci5uZXh0SW50KCAxMDAgKSA9PSAwKQotICAgICAgICAgICAgICAgICAgICB3aGl0ZXNwYWNlcygpOwotCi0gICAgICAgICAgICAgICAgSGFzaE1hcCBhdHRycyA9IG5ldyBIYXNoTWFwKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZm9yICggaW50IGkgPSByLm5leHRJbnQoIDMgKSA7IGkgPiAwIDsgaS0tICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZCggJyAnICk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYW5hbWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICggOyA7ICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgYW5hbWUgPSBtYWtlTmNOYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF0dHJzLmNvbnRhaW5zS2V5KCBhbmFtZSApKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgYXR0cnMucHV0KCBhbmFtZSwgbnVsbCApOwotCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZCggYW5hbWUgKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoci5uZXh0SW50KCAxMDAgKSA9PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVzcGFjZXMoKTsKLQotICAgICAgICAgICAgICAgICAgICBhcHBlbmQoICc9JyApOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChyLm5leHRJbnQoIDEwMCApID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICB3aGl0ZXNwYWNlcygpOwotCi0gICAgICAgICAgICAgICAgICAgIGNoYXIgcSA9IHIubmV4dEludCggMiApID09IDAgPyAnXCcnIDogJyInOwotCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZCggcSApOwotCi0gICAgICAgICAgICAgICAgICAgIHRleHQoKTsKLQotICAgICAgICAgICAgICAgICAgICBhcHBlbmQoIHEgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHIubmV4dEludCggMTAgKSA9PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVzcGFjZXMoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBhcHBlbmQoICc+JyApOwotCi0gICAgICAgICAgICAgICAgY29udGVudCggZGVwdGggKTsKLQotICAgICAgICAgICAgICAgIGFwcGVuZCggIjwvIiApOwotICAgICAgICAgICAgICAgIGFwcGVuZCggbmFtZSApOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChyLm5leHRJbnQoIDEwMCApID09IDApCi0gICAgICAgICAgICAgICAgICAgIHdoaXRlc3BhY2VzKCk7Ci0KLSAgICAgICAgICAgICAgICBhcHBlbmQoICc+JyApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwdWJsaWMgdm9pZCBkb2N1bWVudCAoICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHIubmV4dEludCggMiApID09IDApCi0gICAgICAgICAgICAgICAgeG1sRGVjbCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB3aGl0ZUNvbnRlbnQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZWxlbWVudENvbnRlbnQoIDAgKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgd2hpdGVDb250ZW50KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHVibGljIFN0cmluZyBtYWtlUmFuZG9tRG9jdW1lbnQgKCBSYW5kb20gciApCi0gICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLSAgICAgICAgRG9jQnVpbGRlciBkYiA9IG5ldyBEb2NCdWlsZGVyKCByLCBzYiApOwotCi0gICAgICAgIGRiLmRvY3VtZW50KCk7Ci0KLSAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHRlc3RUaGF0QXNzZXJ0SXNPbiAoICkKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQgZmFsc2U7Ci0KLSAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBmYWxzZSApOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoICggVGhyb3dhYmxlIGUgKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgICAgICAgICAKLSAgICBzdGF0aWMgY2xhc3MgTXlNYXJrIGV4dGVuZHMgWG1sQm9va21hcmsKLSAgICB7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdEJvb2ttYXJrcyAoICkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgWG1sT2JqZWN0IHggPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSggIjxmb28geD0neSc+YWJjZGVmZzwhLS0tLT54eTwvZm9vPiIgKTsKLSAgICAgICAgCi0gICAgICAgIFhtbEN1cnNvciBjID0geC5uZXdDdXJzb3IoKTsKLSAgICAgICAgTXlNYXJrIG0xID0gbmV3IE15TWFyaygpOyBjLnNldEJvb2ttYXJrKCBtMSApOwotICAgICAgICAKLSAgICAgICAgYy50b05leHRUb2tlbigpOwotICAgICAgICBNeU1hcmsgbTIgPSBuZXcgTXlNYXJrKCk7IGMuc2V0Qm9va21hcmsoIG0yICk7Ci0gICAgICAgIAotICAgICAgICBjLnRvTmV4dFRva2VuKCk7Ci0gICAgICAgIE15TWFyayBtMyA9IG5ldyBNeU1hcmsoKTsgYy5zZXRCb29rbWFyayggbTMgKTsKLSAgICAgICAgCi0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLSAgICAgICAgTXlNYXJrIG00ID0gbmV3IE15TWFyaygpOyBjLnNldEJvb2ttYXJrKCBtNCApOwotICAgICAgICAKLSAgICAgICAgYy50b05leHRDaGFyKCAxICk7Ci0gICAgICAgIE15TWFyayBtNSA9IG5ldyBNeU1hcmsoKTsgYy5zZXRCb29rbWFyayggbTUgKTsKLSAgICAgICAgCi0gICAgICAgIGMudG9OZXh0Q2hhciggMyApOwotICAgICAgICBNeU1hcmsgbTYgPSBuZXcgTXlNYXJrKCk7IGMuc2V0Qm9va21hcmsoIG02ICk7Ci0KLSAgICAgICAgYy50b05leHRUb2tlbigpOwotICAgICAgICBjLnRvTmV4dFRva2VuKCk7Ci0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLSAgICAgICAgTXlNYXJrIG03ID0gbmV3IE15TWFyaygpOyBjLnNldEJvb2ttYXJrKCBtNyApOwotICAgICAgICAKLSAgICAgICAgYy50b05leHRUb2tlbigpOwotICAgICAgICBNeU1hcmsgbTggPSBuZXcgTXlNYXJrKCk7IGMuc2V0Qm9va21hcmsoIG04ICk7Ci0KLSAgICAgICAgYy50b1N0YXJ0RG9jKCk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMuZ2V0Qm9va21hcmsgICAoIE15TWFyay5jbGFzcyApID09IG0xICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLnRvTmV4dEJvb2ttYXJrKCBNeU1hcmsuY2xhc3MgKSA9PSBtMiApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy50b05leHRCb29rbWFyayggTXlNYXJrLmNsYXNzICkgPT0gbTMgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMudG9OZXh0Qm9va21hcmsoIE15TWFyay5jbGFzcyApID09IG00ICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLnRvTmV4dEJvb2ttYXJrKCBNeU1hcmsuY2xhc3MgKSA9PSBtNSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy50b05leHRCb29rbWFyayggTXlNYXJrLmNsYXNzICkgPT0gbTYgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMudG9OZXh0Qm9va21hcmsoIE15TWFyay5jbGFzcyApID09IG03ICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLnRvTmV4dEJvb2ttYXJrKCBNeU1hcmsuY2xhc3MgKSA9PSBtOCApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy50b05leHRCb29rbWFyayggTXlNYXJrLmNsYXNzICkgPT0gbnVsbCApOwotICAgICAgICAKLSAgICAgICAgYy50b0VuZERvYygpOwotICAgICAgICAKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMuZ2V0Qm9va21hcmsgICAoIE15TWFyay5jbGFzcyApID09IG04ICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLnRvUHJldkJvb2ttYXJrKCBNeU1hcmsuY2xhc3MgKSA9PSBtNyApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy50b1ByZXZCb29rbWFyayggTXlNYXJrLmNsYXNzICkgPT0gbTYgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMudG9QcmV2Qm9va21hcmsoIE15TWFyay5jbGFzcyApID09IG01ICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLnRvUHJldkJvb2ttYXJrKCBNeU1hcmsuY2xhc3MgKSA9PSBtNCApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy50b1ByZXZCb29rbWFyayggTXlNYXJrLmNsYXNzICkgPT0gbTMgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMudG9QcmV2Qm9va21hcmsoIE15TWFyay5jbGFzcyApID09IG0yICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLnRvUHJldkJvb2ttYXJrKCBNeU1hcmsuY2xhc3MgKSA9PSBtMSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy50b1ByZXZCb29rbWFyayggTXlNYXJrLmNsYXNzICkgPT0gbnVsbCApOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0U2V0TmFtZSggKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBYbWxPYmplY3QgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCAiPGZvbyB4PSdhJy8+IiApOwotICAgICAgICBYbWxDdXJzb3IgYyA9IHgubmV3Q3Vyc29yKCk7Ci0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLSAgICAgICAgYy5zZXROYW1lKCBuZXcgUU5hbWUoICJiYXIiICkgKTsKLSAgICAgICAgYy50b05leHRUb2tlbigpOwotICAgICAgICBjLnNldE5hbWUoIG5ldyBRTmFtZSggInkiICkgKTsKLQotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggeC54bWxUZXh0KCkuZXF1YWxzKCAiPGJhciB5PVwiYVwiLz4iICkgKTsKLSAgICB9Ci0gICAgCi0gICAgLy8KLSAgICAvLyBCYXNpYyBsb2FkIHVwIGEgZmlsZSBhbmQgaXRlcmF0ZSB0aHJvdWdoIGl0Ci0gICAgLy8KLQotICAgCi0gICAgcHVibGljIHZvaWQgdGVzdEJhc2ljWG1sKCApCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbEN1cnNvciBjID0gbG9hZENhc2UoInRlc3QueG1sIik7Ci0KLSAgICAgICAgaW50IG4gPSAwOwotICAgICAgICAKLSAgICAgICAgZm9yICggOyA7ICkKLSAgICAgICAgewotICAgICAgICAgICAgVG9rZW5UeXBlIHQgPSBjLnRvTmV4dFRva2VuKCk7Ci0KLSAgICAgICAgICAgIG4rKzsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHQgPT0gVG9rZW5UeXBlLk5PTkUpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBuID09IDYgKTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIE1ha2Ugc3VyZSB0aGUgdG9rZW5zIGdvaW5nIGZvcndhcmQgdGhlIHRoZSByZXZlcnNlIG9mIHRoZSB0b2tlbnMKLSAgICAvLyBnb2luZyBiYWNrd2FyZAotICAgIC8vCi0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0Q29uc2lzdGVudFRva2VuT3JkZXIoICkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgQXJyYXlMaXN0IGwgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLSAgICAgICAgWG1sQ3Vyc29yIGMgPSBsb2FkQ2FzZSgidGVzdC54bWwiKTsKLQotICAgICAgICBmb3IgKCA7IDsgKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBTeXN0ZW0uZXJyLnByaW50bG4oYy5jdXJyZW50VG9rZW5UeXBlKCkpOwotICAgICAgICAgICAgbC5hZGQoYy5jdXJyZW50VG9rZW5UeXBlKCkpOwotCi0gICAgICAgICAgICBpZiAoYy50b05leHRUb2tlbigpID09IFRva2VuVHlwZS5OT05FKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgYy50b0VuZERvYygpOwotICAgICAgICAvLyBTeXN0ZW0uZXJyLnByaW50bG4oIlJldmVyc2luZyIpOwotCi0gICAgICAgIGZvciAoIGludCBpID0gbC5zaXplKCkgLSAxIDsgOyBpLS0gKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBTeXN0ZW0uZXJyLnByaW50bG4oYy5jdXJyZW50VG9rZW5UeXBlKCkpOwotICAgICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhsLmdldChpKSwgYy5jdXJyZW50VG9rZW5UeXBlKCkpOwotCi0gICAgICAgICAgICBpZiAoYy50b1ByZXZUb2tlbigpID09IFRva2VuVHlwZS5OT05FKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8KLSAgICAvLyBNYWtlIHN1cmUgeW91IGNhbid0IGluc2VydCB0ZXh0IGJlZm9yZSB0aGUgZG9jIGJlZ2luCi0gICAgLy8gZ29pbmcgYmFja3dhcmQKLSAgICAvLwotCi0gICAgcHVibGljIHZvaWQgdGVzdElsbGVnYWxUZXh0SW5zZXJ0KCApCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbEN1cnNvciBjID0gbG9hZENhc2UoInRlc3QueG1sIik7Ci0KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGMuaW5zZXJ0Q2hhcnMoICJIbyBobyBobyIgKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCJEaWQgbm90IGNhdGNoIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiIsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIE1ha2Ugc3VyZSBnZXRUZXh0IHdvcmtzIGluIGEgYmFzaWMgd2F5Ci0gICAgLy8KLQotICAgIHB1YmxpYyB2b2lkIHRlc3RnZXRUZXh0KCApCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbEN1cnNvciBjID0gbG9hZENhc2UoInRlc3QueG1sIik7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMuZ2V0VGV4dFZhbHVlKCkuZXF1YWxzKCAiYWIiICkgKTsgLy8gRG9jIG5vZGUKLQotICAgICAgICBjLnRvTmV4dFRva2VuKCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLmdldFRleHRWYWx1ZSgpLmVxdWFscyggImFiIiApICk7IC8vIERvYyBlbGVtCi0KLSAgICAgICAgYy50b05leHRUb2tlbigpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy5nZXRUZXh0VmFsdWUoKS5lcXVhbHMoICJ5IiApICk7IC8vIEF0dHIgeAotCi0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMuZ2V0Q2hhcnMoKS5lcXVhbHMoICJhYiIgKSApOyAvLyBUZXh0Ci0KLSAgICAgICAgYy50b05leHRDaGFyKCAxICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLmdldENoYXJzKCkuZXF1YWxzKCAiYiIgKSApOyAvLyBUZXh0Ci0KLSAgICAgICAgYy50b05leHRUb2tlbigpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy5nZXRDaGFycygpLmxlbmd0aCgpID09IDAgKTsgICAgICAgLy8gRW5kIHRhZwotCi0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMuZ2V0Q2hhcnMoKS5sZW5ndGgoKSA9PSAwICk7ICAgICAgIC8vIEVuZCBkb2MKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIFRleHQgWE1MSW5wdXRTdHJlYW0gc3VwcG9ydAotICAgIC8vCi0KLSAgICBwcml2YXRlIHZvaWQgYXNzZXJ0TmFtZSAoCi0gICAgICAgIFhNTE5hbWUgbmFtZSwgU3RyaW5nIHVyaSwgU3RyaW5nIGxvY2FsLCBTdHJpbmcgcHJlZml4ICkKLSAgICB7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBsb2NhbCAhPSBudWxsICk7Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcgbmFtZVVyaSA9IG5hbWUuZ2V0TmFtZXNwYWNlVXJpKCk7Ci0gICAgICAgIFN0cmluZyBuYW1lTG9jYWwgPSBuYW1lLmdldExvY2FsTmFtZSgpOwotICAgICAgICBTdHJpbmcgbmFtZVByZWZpeCA9IG5hbWUuZ2V0UHJlZml4KCk7Ci0KLSAgICAgICAgaWYgKHVyaSA9PSBudWxsKQotICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIG5hbWVVcmkgPT0gbnVsbCApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggbmFtZVVyaS5lcXVhbHMoIHVyaSApICk7Ci0gICAgICAgIAotICAgICAgICBpZiAobG9jYWwgPT0gbnVsbCkKLSAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBuYW1lTG9jYWwgPT0gbnVsbCApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggbmFtZUxvY2FsLmVxdWFscyggbG9jYWwgKSApOwotICAgICAgICAKLSAgICAgICAgaWYgKHByZWZpeCA9PSBudWxsKQotICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIG5hbWVQcmVmaXggPT0gbnVsbCApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggbmFtZVByZWZpeC5lcXVhbHMoIHByZWZpeCApICk7Ci0KLSAgICAgICAgaWYgKHByZWZpeCAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgcU5hbWUgPSBwcmVmaXggKyAiOiIgKyBsb2NhbDsKLSAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBuYW1lLmdldFF1YWxpZmllZE5hbWUoKS5lcXVhbHMoIHFOYW1lICkgKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggbmFtZS5nZXRRdWFsaWZpZWROYW1lKCkuZXF1YWxzKCBsb2NhbCApICk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGRvWG1sU3RyZWFtVGVzdCAoIFN0cmluZyB4bWwgKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBYbWxDdXJzb3IgYyA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCB4bWwgKS5uZXdDdXJzb3IoKTsKLSAgICAgICAgWE1MSW5wdXRTdHJlYW0geG1sU3RyZWFtID0gYy5uZXdYTUxJbnB1dFN0cmVhbSgpOwotICAgICAgICBYbWxPYmplY3QgbyA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCB4bWxTdHJlYW0gKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIG8ueG1sVGV4dCgpLmVxdWFscyggeG1sICkgKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgZG9TYXZlclRlc3QgKCBTdHJpbmcgeG1sICkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgWG1sQ3Vyc29yIGMgPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSggeG1sICkubmV3Q3Vyc29yKCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLnhtbFRleHQoKS5lcXVhbHMoIHhtbCApICk7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBkb1NhdmVUZXN0ICggU3RyaW5nIHhtbCApCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGRvWG1sU3RyZWFtVGVzdCggeG1sICk7Ci0gICAgICAgIGRvU2F2ZXJUZXN0KCB4bWwgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0U2F2aW5nICggKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBkb1NhdmVUZXN0KCAiPGZvbyB4bWxucz1cImZvby5jb21cIj48YmFyPjE8L2Jhcj48L2Zvbz4iICk7Ci0gICAgICAgIGRvU2F2ZVRlc3QoICI8Zm9vPjwhLS1jb21tZW50LS0+PD90YXJnZXQgZm9vPz48L2Zvbz4iICk7Ci0gICAgICAgIGRvU2F2ZVRlc3QoICI8Zm9vPmE8YmFyPmI8L2Jhcj5jPGJhcj5kPC9iYXI+ZTwvZm9vPiIgKTsKLSAgICAgICAgZG9TYXZlVGVzdCggIjxmb28geG1sbnM6eD1cInlcIj48YmFyIHhtbG5zOng9XCJ6XCIvPjwvZm9vPiIgKTsKLSAgICAgICAgZG9TYXZlVGVzdCggIjxmb28geD1cInlcIiBwPVwiclwiLz4iICk7Ci0KLSAgICAgICAgU3RyaW5nIHMgPSAiPGZvbz5hYWE8L2Zvbz5iYmIiOwotICAgICAgICBzID0gcyArIHMgKyBzICsgcyArIHMgKyBzICsgcyArIHMgKyBzICsgcyArIHMgKyBzICsgcyArIHMgKyBzOwotICAgICAgICBzID0gIjxiYXI+eHh4eCIgKyBzICsgIjwvYmFyPiI7Ci0gICAgICAgIAotICAgICAgICBkb1NhdmVUZXN0KCBzICk7Ci0KLSAgICAgICAgWG1sT2JqZWN0IHggPQotICAgICAgICAgICAgWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8Zm9vIHhtbG5zOmE9J2EuY29tJz48YmFyIHhtbG5zOmE9J2IuY29tJy8+PC9mb28+IiApOwotCi0gICAgICAgIFhtbEN1cnNvciBjID0geC5uZXdDdXJzb3IoKTsKLQotICAgICAgICBjLnRvRmlyc3RDaGlsZCgpOwotICAgICAgICBjLnRvRmlyc3RDaGlsZCgpOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLnhtbFRleHQoKS5lcXVhbHMoICI8YmFyIHhtbG5zOmE9XCJiLmNvbVwiLz4iICkgKTsKLSAgICAgICAgCi0gICAgICAgIHggPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSggIjxmb28geG1sbnM6YT0nYS5jb20nPjxiYXIvPjwvZm9vPiIgKTsKLQotICAgICAgICBjID0geC5uZXdDdXJzb3IoKTsKLQotICAgICAgICBjLnRvRmlyc3RDaGlsZCgpOwotICAgICAgICBjLnRvRmlyc3RDaGlsZCgpOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLnhtbFRleHQoKS5lcXVhbHMoICI8YmFyIHhtbG5zOmE9XCJhLmNvbVwiLz4iICkgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0WE1MU3RyZWFtICggKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBYbWxPYmplY3QgbyA9Ci0gICAgICAgICAgICBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSgKLSAgICAgICAgICAgICAgICAiPGZvbyB4PVwieVwiIHhtbG5zPVwiZGVmYXVsdC5jb21cIj4iICsKLSAgICAgICAgICAgICAgICAgICAgIjwhLS0geCAtLT5iYXI8L2Zvbz4iICk7Ci0gICAgICAgIAotICAgICAgICBYbWxDdXJzb3IgYyA9IG8ubmV3Q3Vyc29yKCk7Ci0gICAgICAgIAotICAgICAgICBjLnRvTmV4dFRva2VuKCk7Ci0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLSAgICAgICAgYy50b05leHRUb2tlbigpOwotICAgICAgICBjLnRvTmV4dFRva2VuKCk7Ci0gICAgICAgIAotICAgICAgICBjLmluc2VydEVsZW1lbnQoICJiYXIiLCAiYmFyLmNvbSIgKTsKLSAgICAgICAgCi0gICAgICAgIGMudG9TdGFydERvYygpOwotCi0gICAgICAgIFhNTElucHV0U3RyZWFtIHhpcyA9IGMubmV3WE1MSW5wdXRTdHJlYW0oKTsKLQotICAgICAgICBYTUxFdmVudCB4ZXY7Ci0gICAgICAgIFN0YXJ0RG9jdW1lbnQgc3RhcnREb2N1bWVudDsKLSAgICAgICAgRW5kRG9jdW1lbnQgZW5kRG9jdW1lbnQ7Ci0gICAgICAgIFN0YXJ0RWxlbWVudCBzdGFydEVsZW1lbnQ7Ci0gICAgICAgIEF0dHJpYnV0ZUl0ZXJhdG9yIGF0dHJpYnV0ZUl0ZXJhdG9yOwotICAgICAgICBTdGFydFByZWZpeE1hcHBpbmcgc3RhcnRQcmVmaXhNYXBwaW5nOwotICAgICAgICBFbmRQcmVmaXhNYXBwaW5nIGVuZFByZWZpeE1hcHBpbmc7Ci0gICAgICAgIENoYW5nZVByZWZpeE1hcHBpbmcgY3BtOwotICAgICAgICBFbmRFbGVtZW50IGVuZEVsZW1lbnQ7Ci0gICAgICAgIEF0dHJpYnV0ZSBhdHRyaWJ1dGU7Ci0gICAgICAgIENvbW1lbnQgY29tbWVudDsKLSAgICAgICAgQ2hhcmFjdGVyRGF0YSBjaGFyYWN0ZXJEYXRhOwotICAgICAgICBYTUxOYW1lIG5hbWU7Ci0gICAgICAgIFN0cmluZyBzdHI7Ci0gICAgICAgIE1hcCBtYXA7Ci0gICAgICAgIAotICAgICAgICB4ZXYgPSBzdGFydERvY3VtZW50ID0gKFN0YXJ0RG9jdW1lbnQpIHhpcy5uZXh0KCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB4ZXYuZ2V0VHlwZSgpID09IFhNTEV2ZW50LlNUQVJUX0RPQ1VNRU5UICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCAheGV2Lmhhc05hbWUoKSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggc3RhcnREb2N1bWVudC5pc1N0YXJ0RG9jdW1lbnQoKSApOwotICAgICAgICAKLSAgICAgICAgeGV2ID0gc3RhcnRQcmVmaXhNYXBwaW5nID0gKFN0YXJ0UHJlZml4TWFwcGluZykgeGlzLm5leHQoKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHhldi5nZXRUeXBlKCkgPT0gWE1MRXZlbnQuU1RBUlRfUFJFRklYX01BUFBJTkcgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoICF4ZXYuaGFzTmFtZSgpICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB4ZXYuaXNTdGFydFByZWZpeE1hcHBpbmcoKSApOwotICAgICAgICBzdHIgPSBzdGFydFByZWZpeE1hcHBpbmcuZ2V0TmFtZXNwYWNlVXJpKCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBzdHIuZXF1YWxzKCAiZGVmYXVsdC5jb20iICkgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHN0YXJ0UHJlZml4TWFwcGluZy5nZXRQcmVmaXgoKS5sZW5ndGgoKSA9PSAwICk7Ci0gICAgICAgIAotICAgICAgICB4ZXYgPSBzdGFydEVsZW1lbnQgPSAoU3RhcnRFbGVtZW50KSB4aXMubmV4dCgpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggeGV2LmdldFR5cGUoKSA9PSBYTUxFdmVudC5TVEFSVF9FTEVNRU5UICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB4ZXYuaGFzTmFtZSgpICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB4ZXYuaXNTdGFydEVsZW1lbnQoKSApOwotICAgICAgICBhc3NlcnROYW1lKCBzdGFydEVsZW1lbnQuZ2V0TmFtZSgpLCAiZGVmYXVsdC5jb20iLCAiZm9vIiwgbnVsbCApOwotICAgICAgICBhdHRyaWJ1dGVJdGVyYXRvciA9IHN0YXJ0RWxlbWVudC5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgICAgIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZUl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0TmFtZSggYXR0cmlidXRlLmdldE5hbWUoKSwgbnVsbCwgIngiLCBudWxsICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBhdHRyaWJ1dGUuZ2V0VmFsdWUoKS5lcXVhbHMoICJ5IiApICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBhdHRyaWJ1dGVJdGVyYXRvci5uZXh0KCkgPT0gbnVsbCApOwotICAgICAgICBhdHRyaWJ1dGVJdGVyYXRvciA9IHN0YXJ0RWxlbWVudC5nZXROYW1lc3BhY2VzKCk7Ci0gICAgICAgIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZUl0ZXJhdG9yLm5leHQoKTsKLSAgICAgICAgYXNzZXJ0TmFtZSggYXR0cmlidXRlLmdldE5hbWUoKSwgbnVsbCwgInhtbG5zIiwgbnVsbCApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYXR0cmlidXRlLmdldFZhbHVlKCkuZXF1YWxzKCAiZGVmYXVsdC5jb20iICkgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGF0dHJpYnV0ZUl0ZXJhdG9yLm5leHQoKSA9PSBudWxsICk7Ci0gICAgICAgIGF0dHJpYnV0ZUl0ZXJhdG9yID0gc3RhcnRFbGVtZW50LmdldEF0dHJpYnV0ZXNBbmROYW1lc3BhY2VzKCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBhdHRyaWJ1dGVJdGVyYXRvci5uZXh0KCkgIT0gbnVsbCApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYXR0cmlidXRlSXRlcmF0b3IubmV4dCgpICE9IG51bGwgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGF0dHJpYnV0ZUl0ZXJhdG9yLm5leHQoKSA9PSBudWxsICk7Ci0gICAgICAgIG5hbWUgPSBuZXcgWG1sTmFtZUltcGwoIG51bGwsICJ4IiwgbnVsbCApOwotICAgICAgICBhdHRyaWJ1dGUgPSBzdGFydEVsZW1lbnQuZ2V0QXR0cmlidXRlQnlOYW1lKCBuYW1lICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBhdHRyaWJ1dGUgIT0gbnVsbCApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYXR0cmlidXRlLmdldFZhbHVlKCkuZXF1YWxzKCAieSIgKSApOwotICAgICAgICBuYW1lID0gbmV3IFhtbE5hbWVJbXBsKCBudWxsLCAieG1sbnMiLCBudWxsICk7Ci0gICAgICAgIGF0dHJpYnV0ZSA9IHN0YXJ0RWxlbWVudC5nZXRBdHRyaWJ1dGVCeU5hbWUoIG5hbWUgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGF0dHJpYnV0ZSA9PSBudWxsICk7Ci0gICAgICAgIHN0ciA9IHN0YXJ0RWxlbWVudC5nZXROYW1lc3BhY2VVcmkoIG51bGwgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHN0ci5lcXVhbHMoICJkZWZhdWx0LmNvbSIgKSApOwotCi0gICAgICAgIHhldiA9IHN0YXJ0UHJlZml4TWFwcGluZyA9IChTdGFydFByZWZpeE1hcHBpbmcpIHhpcy5uZXh0KCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB4ZXYuZ2V0VHlwZSgpID09IFhNTEV2ZW50LlNUQVJUX1BSRUZJWF9NQVBQSU5HICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCAheGV2Lmhhc05hbWUoKSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggeGV2LmlzU3RhcnRQcmVmaXhNYXBwaW5nKCkgKTsKLSAgICAgICAgc3RyID0gc3RhcnRQcmVmaXhNYXBwaW5nLmdldE5hbWVzcGFjZVVyaSgpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggc3RyLmVxdWFscyggImJhci5jb20iICkgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHN0YXJ0UHJlZml4TWFwcGluZy5nZXRQcmVmaXgoKS5lcXVhbHMoICJiYXIiICkgKTsKLSAgICAgICAgCi0gICAgICAgIHhldiA9IHN0YXJ0RWxlbWVudCA9IChTdGFydEVsZW1lbnQpIHhpcy5uZXh0KCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB4ZXYuZ2V0VHlwZSgpID09IFhNTEV2ZW50LlNUQVJUX0VMRU1FTlQgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHhldi5oYXNOYW1lKCkgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHhldi5pc1N0YXJ0RWxlbWVudCgpICk7Ci0gICAgICAgIGFzc2VydE5hbWUoIHN0YXJ0RWxlbWVudC5nZXROYW1lKCksICJiYXIuY29tIiwgImJhciIsICJiYXIiICk7Ci0gICAgICAgIGF0dHJpYnV0ZUl0ZXJhdG9yID0gc3RhcnRFbGVtZW50LmdldEF0dHJpYnV0ZXMoKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGF0dHJpYnV0ZUl0ZXJhdG9yLm5leHQoKSA9PSBudWxsICk7Ci0gICAgICAgIGF0dHJpYnV0ZUl0ZXJhdG9yID0gc3RhcnRFbGVtZW50LmdldE5hbWVzcGFjZXMoKTsKLSAgICAgICAgYXR0cmlidXRlID0gYXR0cmlidXRlSXRlcmF0b3IubmV4dCgpOwotICAgICAgICBhc3NlcnROYW1lKCBhdHRyaWJ1dGUuZ2V0TmFtZSgpLCBudWxsLCAiYmFyIiwgInhtbG5zIiApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYXR0cmlidXRlLmdldFZhbHVlKCkuZXF1YWxzKCAiYmFyLmNvbSIgKSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYXR0cmlidXRlSXRlcmF0b3IubmV4dCgpID09IG51bGwgKTsKLSAgICAgICAgYXR0cmlidXRlSXRlcmF0b3IgPSBzdGFydEVsZW1lbnQuZ2V0QXR0cmlidXRlc0FuZE5hbWVzcGFjZXMoKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGF0dHJpYnV0ZUl0ZXJhdG9yLm5leHQoKSAhPSBudWxsICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBhdHRyaWJ1dGVJdGVyYXRvci5uZXh0KCkgPT0gbnVsbCApOwotICAgICAgICBzdHIgPSBzdGFydEVsZW1lbnQuZ2V0TmFtZXNwYWNlVXJpKCAiYmFyIiApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggc3RyLmVxdWFscyggImJhci5jb20iICkgKTsKLSAgICAgICAgbWFwID0gc3RhcnRFbGVtZW50LmdldE5hbWVzcGFjZU1hcCgpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggbWFwLmdldCggImJhciIgKS5lcXVhbHMoICJiYXIuY29tIiApICk7Ci0gICAgICAgIAotICAgICAgICB4ZXYgPSBlbmRFbGVtZW50ID0gKEVuZEVsZW1lbnQpIHhpcy5uZXh0KCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB4ZXYuZ2V0VHlwZSgpID09IFhNTEV2ZW50LkVORF9FTEVNRU5UICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB4ZXYuaGFzTmFtZSgpICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB4ZXYuaXNFbmRFbGVtZW50KCkgKTsKLSAgICAgICAgYXNzZXJ0TmFtZSggZW5kRWxlbWVudC5nZXROYW1lKCksICJiYXIuY29tIiwgImJhciIsICJiYXIiICk7Ci0KLSAgICAgICAgeGV2ID0gZW5kUHJlZml4TWFwcGluZyA9IChFbmRQcmVmaXhNYXBwaW5nKSB4aXMubmV4dCgpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggeGV2LmdldFR5cGUoKSA9PSBYTUxFdmVudC5FTkRfUFJFRklYX01BUFBJTkcgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoICF4ZXYuaGFzTmFtZSgpICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB4ZXYuaXNFbmRQcmVmaXhNYXBwaW5nKCkgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGVuZFByZWZpeE1hcHBpbmcuZ2V0UHJlZml4KCkuZXF1YWxzKCAiYmFyIiApICk7Ci0KLSAgICAgICAgeGV2ID0gY29tbWVudCA9IChDb21tZW50KSB4aXMubmV4dCgpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggeGV2LmdldFR5cGUoKSA9PSBYTUxFdmVudC5DT01NRU5UICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCAheGV2Lmhhc05hbWUoKSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggY29tbWVudC5oYXNDb250ZW50KCkgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGNvbW1lbnQuZ2V0Q29udGVudCgpLmVxdWFscyggIiB4ICIgKSApOwotICAgICAgICAKLSAgICAgICAgeGV2ID0gY2hhcmFjdGVyRGF0YSA9IChDaGFyYWN0ZXJEYXRhKSB4aXMubmV4dCgpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggeGV2LmdldFR5cGUoKSA9PSBYTUxFdmVudC5DSEFSQUNURVJfREFUQSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggIXhldi5oYXNOYW1lKCkgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHhldi5pc0NoYXJhY3RlckRhdGEoKSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggY2hhcmFjdGVyRGF0YS5oYXNDb250ZW50KCkgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGNoYXJhY3RlckRhdGEuZ2V0Q29udGVudCgpLmVxdWFscyggImJhciIgKSApOwotCi0gICAgICAgIHhldiA9IGVuZEVsZW1lbnQgPSAoRW5kRWxlbWVudCkgeGlzLm5leHQoKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHhldi5nZXRUeXBlKCkgPT0gWE1MRXZlbnQuRU5EX0VMRU1FTlQgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHhldi5oYXNOYW1lKCkgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHhldi5pc0VuZEVsZW1lbnQoKSApOwotICAgICAgICBhc3NlcnROYW1lKCBlbmRFbGVtZW50LmdldE5hbWUoKSwgImRlZmF1bHQuY29tIiwgImZvbyIsIG51bGwgKTsKLQotICAgICAgICB4ZXYgPSBjcG0gPSAoQ2hhbmdlUHJlZml4TWFwcGluZykgeGlzLm5leHQoKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHhldi5nZXRUeXBlKCkgPT0gWE1MRXZlbnQuQ0hBTkdFX1BSRUZJWF9NQVBQSU5HICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCAheGV2Lmhhc05hbWUoKSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggeGV2LmlzQ2hhbmdlUHJlZml4TWFwcGluZygpICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjcG0uZ2V0UHJlZml4KCkubGVuZ3RoKCkgPT0gMCApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggY3BtLmdldE9sZE5hbWVzcGFjZVVyaSgpLmVxdWFscyggImRlZmF1bHQuY29tIiApICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjcG0uZ2V0TmV3TmFtZXNwYWNlVXJpKCkuZXF1YWxzKCAiIiApICk7Ci0KLSAgICAgICAgeGV2ID0gZW5kRG9jdW1lbnQgPSAoRW5kRG9jdW1lbnQpIHhpcy5uZXh0KCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB4ZXYuZ2V0VHlwZSgpID09IFhNTEV2ZW50LkVORF9ET0NVTUVOVCApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggIXhldi5oYXNOYW1lKCkgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHhldi5pc0VuZERvY3VtZW50KCkgKTsKLSAgICAgICAgCi0gICAgICAgIHhldiA9IHhpcy5uZXh0KCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB4ZXYgPT0gbnVsbCApOwotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRlc3QgQ2hhbmdlUHJlZml4TWFwcGluZyBldmVudAotICAgICAgICAvLwotCi0gICAgICAgIG8gPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSggIjxmb28geG1sbnM6eD1cInlcIj48YmFyIHhtbG5zOng9XCJ6XCIvPjwvZm9vPiIgKTsKLSAgICAgICAgYyA9IG8ubmV3Q3Vyc29yKCk7Ci0gICAgICAgIHhpcyA9IGMubmV3WE1MSW5wdXRTdHJlYW0oKTsKLSAgICAgICAgCi0gICAgICAgIHN0YXJ0RG9jdW1lbnQgPSAoU3RhcnREb2N1bWVudCkgeGlzLm5leHQoKTsKLSAgICAgICAgCi0gICAgICAgIHN0YXJ0UHJlZml4TWFwcGluZyA9IChTdGFydFByZWZpeE1hcHBpbmcpIHhpcy5uZXh0KCk7Ci0gICAgICAgIHN0ciA9IHN0YXJ0UHJlZml4TWFwcGluZy5nZXROYW1lc3BhY2VVcmkoKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHN0ci5lcXVhbHMoICJ5IiApICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBzdGFydFByZWZpeE1hcHBpbmcuZ2V0UHJlZml4KCkuZXF1YWxzKCAieCIgKSApOwotICAgICAgICAKLSAgICAgICAgc3RhcnRFbGVtZW50ID0gKFN0YXJ0RWxlbWVudCkgeGlzLm5leHQoKTsKLQotICAgICAgICBzdGFydFByZWZpeE1hcHBpbmcgPSAoU3RhcnRQcmVmaXhNYXBwaW5nKSB4aXMubmV4dCgpOwotICAgICAgICBzdHIgPSBzdGFydFByZWZpeE1hcHBpbmcuZ2V0TmFtZXNwYWNlVXJpKCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBzdHIuZXF1YWxzKCAieiIgKSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggc3RhcnRQcmVmaXhNYXBwaW5nLmdldFByZWZpeCgpLmVxdWFscyggIngiICkgKTsKLSAgICAgICAgCi0gICAgICAgIHN0YXJ0RWxlbWVudCA9IChTdGFydEVsZW1lbnQpIHhpcy5uZXh0KCk7Ci0gICAgICAgIAotICAgICAgICBlbmRFbGVtZW50ID0gKEVuZEVsZW1lbnQpIHhpcy5uZXh0KCk7Ci0KLSAgICAgICAgY3BtID0gKENoYW5nZVByZWZpeE1hcHBpbmcpIHhpcy5uZXh0KCk7Ci0gICAgICAgIHN0ciA9IGNwbS5nZXRPbGROYW1lc3BhY2VVcmkoKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHN0ci5lcXVhbHMoICJ6IiApICk7Ci0gICAgICAgIHN0ciA9IGNwbS5nZXROZXdOYW1lc3BhY2VVcmkoKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHN0ci5lcXVhbHMoICJ5IiApICk7Ci0gICAgICAgIHN0ciA9IGNwbS5nZXRQcmVmaXgoKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHN0ci5lcXVhbHMoICJ4IiApICk7Ci0KLSAgICAgICAgZW5kRWxlbWVudCA9IChFbmRFbGVtZW50KSB4aXMubmV4dCgpOwotICAgICAgICAKLSAgICAgICAgZW5kUHJlZml4TWFwcGluZyA9IChFbmRQcmVmaXhNYXBwaW5nKSB4aXMubmV4dCgpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggZW5kUHJlZml4TWFwcGluZy5nZXRQcmVmaXgoKS5lcXVhbHMoICJ4IiApICk7Ci0KLSAgICAgICAgZW5kRG9jdW1lbnQgPSAoRW5kRG9jdW1lbnQpIHhpcy5uZXh0KCk7Ci0gICAgICAgIAotICAgICAgICB4ZXYgPSB4aXMubmV4dCgpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggeGV2ID09IG51bGwgKTsKLQotICAgICAgICAvLwotICAgICAgICAvLyBUZXN0IENoYXJhY3RlckRhdGEgZXZlbnRzCi0gICAgICAgIC8vCi0KLSAgICAgICAgbyA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCAiPGZvbz5hPGJhcj5iPGJhej5jPC9iYXo+ZDwvYmFyPmU8L2Zvbz4iICk7Ci0gICAgICAgIGMgPSBvLm5ld0N1cnNvcigpOwotICAgICAgICB4aXMgPSBjLm5ld1hNTElucHV0U3RyZWFtKCk7Ci0gICAgICAgIAotICAgICAgICBzdGFydERvY3VtZW50ID0gKFN0YXJ0RG9jdW1lbnQpIHhpcy5uZXh0KCk7Ci0KLSAgICAgICAgc3RhcnRFbGVtZW50ID0gKFN0YXJ0RWxlbWVudCkgeGlzLm5leHQoKTsKLQotICAgICAgICBjaGFyYWN0ZXJEYXRhID0gKENoYXJhY3RlckRhdGEpIHhpcy5uZXh0KCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjaGFyYWN0ZXJEYXRhLmhhc0NvbnRlbnQoKSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggY2hhcmFjdGVyRGF0YS5nZXRDb250ZW50KCkuZXF1YWxzKCAiYSIgKSApOwotCi0gICAgICAgIHN0YXJ0RWxlbWVudCA9IChTdGFydEVsZW1lbnQpIHhpcy5uZXh0KCk7Ci0gICAgICAgIAotICAgICAgICBjaGFyYWN0ZXJEYXRhID0gKENoYXJhY3RlckRhdGEpIHhpcy5uZXh0KCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjaGFyYWN0ZXJEYXRhLmhhc0NvbnRlbnQoKSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggY2hhcmFjdGVyRGF0YS5nZXRDb250ZW50KCkuZXF1YWxzKCAiYiIgKSApOwotCi0gICAgICAgIHN0YXJ0RWxlbWVudCA9IChTdGFydEVsZW1lbnQpIHhpcy5uZXh0KCk7Ci0gICAgICAgIAotICAgICAgICBjaGFyYWN0ZXJEYXRhID0gKENoYXJhY3RlckRhdGEpIHhpcy5uZXh0KCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjaGFyYWN0ZXJEYXRhLmhhc0NvbnRlbnQoKSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggY2hhcmFjdGVyRGF0YS5nZXRDb250ZW50KCkuZXF1YWxzKCAiYyIgKSApOwotCi0gICAgICAgIGVuZEVsZW1lbnQgPSAoRW5kRWxlbWVudCkgeGlzLm5leHQoKTsKLSAgICAgICAgCi0gICAgICAgIGNoYXJhY3RlckRhdGEgPSAoQ2hhcmFjdGVyRGF0YSkgeGlzLm5leHQoKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGNoYXJhY3RlckRhdGEuaGFzQ29udGVudCgpICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjaGFyYWN0ZXJEYXRhLmdldENvbnRlbnQoKS5lcXVhbHMoICJkIiApICk7Ci0KLSAgICAgICAgZW5kRWxlbWVudCA9IChFbmRFbGVtZW50KSB4aXMubmV4dCgpOwotCi0gICAgICAgIGNoYXJhY3RlckRhdGEgPSAoQ2hhcmFjdGVyRGF0YSkgeGlzLm5leHQoKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGNoYXJhY3RlckRhdGEuaGFzQ29udGVudCgpICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjaGFyYWN0ZXJEYXRhLmdldENvbnRlbnQoKS5lcXVhbHMoICJlIiApICk7Ci0KLSAgICAgICAgZW5kRWxlbWVudCA9IChFbmRFbGVtZW50KSB4aXMubmV4dCgpOwotICAgICAgICAKLSAgICAgICAgZW5kRG9jdW1lbnQgPSAoRW5kRG9jdW1lbnQpIHhpcy5uZXh0KCk7Ci0gICAgICAgIAotICAgICAgICB4ZXYgPSB4aXMubmV4dCgpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggeGV2ID09IG51bGwgKTsKLQotICAgICAgICAvLwotICAgICAgICAvLyBUZXN0IFN1YlN0cmVhbXMKLSAgICAgICAgLy8KLQotICAgICAgICBvID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8Zm9vPmE8YmFyPmI8YmF6PmM8L2Jhej5kPC9iYXI+ZTwvZm9vPiIgKTsKLSAgICAgICAgYyA9IG8ubmV3Q3Vyc29yKCk7Ci0gICAgICAgIHhpcyA9IGMubmV3WE1MSW5wdXRTdHJlYW0oKTsKLSAgICAgICAgCi0gICAgICAgIHN0YXJ0RG9jdW1lbnQgPSAoU3RhcnREb2N1bWVudCkgeGlzLm5leHQoKTsKLQotICAgICAgICBzdGFydEVsZW1lbnQgPSAoU3RhcnRFbGVtZW50KSB4aXMubmV4dCgpOwotCi0gICAgICAgIGNoYXJhY3RlckRhdGEgPSAoQ2hhcmFjdGVyRGF0YSkgeGlzLm5leHQoKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGNoYXJhY3RlckRhdGEuaGFzQ29udGVudCgpICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjaGFyYWN0ZXJEYXRhLmdldENvbnRlbnQoKS5lcXVhbHMoICJhIiApICk7Ci0KLSAgICAgICAgc3RhcnRFbGVtZW50ID0gKFN0YXJ0RWxlbWVudCkgeGlzLm5leHQoKTsKLSAgICAgICAgCi0gICAgICAgIGNoYXJhY3RlckRhdGEgPSAoQ2hhcmFjdGVyRGF0YSkgeGlzLm5leHQoKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGNoYXJhY3RlckRhdGEuaGFzQ29udGVudCgpICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjaGFyYWN0ZXJEYXRhLmdldENvbnRlbnQoKS5lcXVhbHMoICJiIiApICk7Ci0KLSAgICAgICAgICAgIFhNTElucHV0U3RyZWFtIHhpczIgPSB4aXMuZ2V0U3ViU3RyZWFtKCk7Ci0KLSAgICAgICAgc3RhcnRFbGVtZW50ID0gKFN0YXJ0RWxlbWVudCkgeGlzLm5leHQoKTsKLSAgICAgICAgCi0gICAgICAgIGNoYXJhY3RlckRhdGEgPSAoQ2hhcmFjdGVyRGF0YSkgeGlzLm5leHQoKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGNoYXJhY3RlckRhdGEuaGFzQ29udGVudCgpICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjaGFyYWN0ZXJEYXRhLmdldENvbnRlbnQoKS5lcXVhbHMoICJjIiApICk7Ci0KLSAgICAgICAgZW5kRWxlbWVudCA9IChFbmRFbGVtZW50KSB4aXMubmV4dCgpOwotICAgICAgICAKLSAgICAgICAgY2hhcmFjdGVyRGF0YSA9IChDaGFyYWN0ZXJEYXRhKSB4aXMubmV4dCgpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggY2hhcmFjdGVyRGF0YS5oYXNDb250ZW50KCkgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGNoYXJhY3RlckRhdGEuZ2V0Q29udGVudCgpLmVxdWFscyggImQiICkgKTsKLQotICAgICAgICAgICAgc3RhcnRFbGVtZW50ID0gKFN0YXJ0RWxlbWVudCkgeGlzMi5uZXh0KCk7Ci0KLSAgICAgICAgICAgIGNoYXJhY3RlckRhdGEgPSAoQ2hhcmFjdGVyRGF0YSkgeGlzMi5uZXh0KCk7Ci0gICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggY2hhcmFjdGVyRGF0YS5oYXNDb250ZW50KCkgKTsKLSAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjaGFyYWN0ZXJEYXRhLmdldENvbnRlbnQoKS5lcXVhbHMoICJjIiApICk7Ci0KLSAgICAgICAgICAgIGVuZEVsZW1lbnQgPSAoRW5kRWxlbWVudCkgeGlzMi5uZXh0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHhldiA9IHhpczIubmV4dCgpOwotICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHhldiA9PSBudWxsICk7Ci0gICAgICAgICAgICAKLSAgICAgICAgZW5kRWxlbWVudCA9IChFbmRFbGVtZW50KSB4aXMubmV4dCgpOwotCi0gICAgICAgIGNoYXJhY3RlckRhdGEgPSAoQ2hhcmFjdGVyRGF0YSkgeGlzLm5leHQoKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGNoYXJhY3RlckRhdGEuaGFzQ29udGVudCgpICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjaGFyYWN0ZXJEYXRhLmdldENvbnRlbnQoKS5lcXVhbHMoICJlIiApICk7Ci0KLSAgICAgICAgZW5kRWxlbWVudCA9IChFbmRFbGVtZW50KSB4aXMubmV4dCgpOwotICAgICAgICAKLSAgICAgICAgZW5kRG9jdW1lbnQgPSAoRW5kRG9jdW1lbnQpIHhpcy5uZXh0KCk7Ci0gICAgICAgIAotICAgICAgICB4ZXYgPSB4aXMubmV4dCgpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggeGV2ID09IG51bGwgKTsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBYbWxDdXJzb3IgbmF2RG9jICggWG1sT2JqZWN0IHgsIFN0cmluZyBkaXJzICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuYXZDdXJzb3IoIHgubmV3Q3Vyc29yKCksIGRpcnMgKTsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBYbWxDdXJzb3IgbmF2TmV3Q3Vyc29yICggWG1sQ3Vyc29yIGMsIFN0cmluZyBkaXJzICkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuYXZDdXJzb3IoIGMubmV3Q3Vyc29yKCksIGRpcnMgKTsKLSAgICB9Ci0KLSAgICAvLwotICAgIC8vIEZvcm1hdDoKLSAgICAvLwotICAgIC8vICAgICggWy1dW05dIHR5cGUgKSAqCi0gICAgLy8KLSAgICAvLyAgICB0eXBlOgotICAgIC8vCi0gICAgLy8gICAgICBjIC0gY2hhcmFjdGVyCi0gICAgLy8gICAgICB0IC0gdG9rZW4KLSAgICAvLyAgICAgIHAgLSBwYXJlbnQgZWxlbWVudAotICAgIC8vICAgICAgcyAtIHNpYmxpbmcgZWxlbWVudAotICAgIC8vICAgICAgZCAtIGRlc2NlbmRlbnQgKGNoaWxkKSBlbGVtZW50Ci0gICAgLy8gICAgICByIC0gZW5kIG9mIHRoZSBkb2MgKHJvb3QpCi0gICAgLy8gICAgICBiIC0gYmVnaW4gb2YgdGhlIGRvYwotICAgIC8vCi0gICAgCi0gICAgcHJpdmF0ZSBYbWxDdXJzb3IgbmF2Q3Vyc29yICggWG1sQ3Vyc29yIGMsIFN0cmluZyBkaXJzICkKLSAgICB7Ci0gICAgICAgIGludCBuID0gMDsKLSAgICAgICAgYm9vbGVhbiBwcmV2ID0gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgZGlycy5sZW5ndGgoKSA7IGkrKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIgY2ggPSBkaXJzLmNoYXJBdCggaSApOwotCi0gICAgICAgICAgICBpZiAoY2ggPT0gJy0nKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByZXYgPSAhIHByZXY7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG4gPSBuICogMTAgKyAoY2ggLSAnMCcpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobiA9PSAwKQotICAgICAgICAgICAgICAgIG4gPSAxOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoY2ggPT0gJ2MnKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChwcmV2KQotICAgICAgICAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy50b1ByZXZDaGFyKCBuICkgPT0gbiApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMudG9OZXh0Q2hhciggbiApID09IG4gKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGNoID09ICd0JykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAoIG4tLSA+IDAgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYpCi0gICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy50b1ByZXZUb2tlbigpICE9IFRva2VuVHlwZS5OT05FICk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLnRvTmV4dFRva2VuKCkgIT0gVG9rZW5UeXBlLk5PTkUgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAncCcpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoICEgcHJldiApOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHdoaWxlICggbi0tID4gMCApCi0gICAgICAgICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLnRvUGFyZW50KCkgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGNoID09ICdyJykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggISBwcmV2ICk7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIG4gPT0gMSApOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGMudG9FbmREb2MoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGNoID09ICdiJykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggISBwcmV2ICk7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIG4gPT0gMSApOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGMudG9TdGFydERvYygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT0gJ3MnKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdoaWxlICggbi0tID4gMCApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAocHJldikKLSAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLnRvUHJldlNpYmxpbmcoKSApOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy50b05leHRTaWJsaW5nKCkgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnZCcpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoICEgcHJldiApOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHdoaWxlICggbi0tID4gMCApCi0gICAgICAgICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLnRvRmlyc3RDaGlsZCgpICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGZhbHNlICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG4gPSAwOwotICAgICAgICAgICAgcHJldiA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGM7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHRlc3RPcHMgKCApCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbE9iamVjdCB4LCB4MiwgeTsKLSAgICAgICAgWG1sQ3Vyc29yIGNGcm9tLCBjVG8sIGNUZW1wLCBjVGVtcDIsIGMsIGQ7Ci0gICAgICAgIFhtbEJvb2ttYXJrIGFubm87Ci0gICAgICAgIAotICAgICAgICAvLwotICAgICAgICAKLSAgICAgICAgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCAiPGZvbz5hYmNkZWY8L2Zvbz4iICk7Ci0gICAgICAgIGNGcm9tID0gbmF2RG9jKCB4LCAiZCIgKTsKLSAgICAgICAgY1RvID0gbmF2TmV3Q3Vyc29yKCBjRnJvbSwgIiIgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoICFjRnJvbS5tb3ZlWG1sKCBjVG8gKSApOwotICAgICAgICBjRnJvbS5pbnNlcnRDaGFycyggIltGUk9NXSIgKTsKLSAgICAgICAgY1RvLmluc2VydENoYXJzKCAiW1RPXSIgKTsKLQotICAgICAgICBYbWxPcHRpb25zIG9wdGlvbnMgPSBuZXcgWG1sT3B0aW9ucygpOwotICAgICAgICAKLSAgICAgICAgb3B0aW9ucy5wdXQoCi0gICAgICAgICAgICBYbWxPcHRpb25zLlNBVkVfU1lOVEhFVElDX0RPQ1VNRU5UX0VMRU1FTlQsCi0gICAgICAgICAgICBuZXcgUU5hbWUoIG51bGwsICJiYXIiICkgKTsKLQotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgKLSAgICAgICAgICAgIHgueG1sVGV4dCggb3B0aW9ucyApLmVxdWFscyggIjxiYXI+W0ZST01dW1RPXTxmb28+YWJjZGVmPC9mb28+PC9iYXI+IiApIHx8Ci0gICAgICAgICAgICAgICAgeC54bWxUZXh0KCBvcHRpb25zICkuZXF1YWxzKCAiPGJhcj5bVE9dW0ZST01dPGZvbz5hYmNkZWY8L2Zvbz48L2Jhcj4iICkgKTsKLSAgICAgICAgCi0gICAgICAgIC8vCi0gICAgICAgIAotICAgICAgICB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8Zm9vPmFiY2RlZjwvZm9vPiIgKTsKLSAgICAgICAgCi0gICAgICAgIGNGcm9tID0gbmF2RG9jKCB4LCAiZCIgKTsKLSAgICAgICAgY1RvID0gbmF2TmV3Q3Vyc29yKCBjRnJvbSwgInR0dCIgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoICFjRnJvbS5tb3ZlWG1sKCBjVG8gKSApOwotICAgICAgICBjRnJvbS5pbnNlcnRDaGFycyggIltGUk9NXSIgKTsKLSAgICAgICAgY1RvLmluc2VydENoYXJzKCAiW1RPXSIgKTsKLQotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgKLSAgICAgICAgICAgIHgueG1sVGV4dCggb3B0aW9ucyApLmVxdWFscyggIjxiYXI+W0ZST01dPGZvbz5hYmNkZWY8L2Zvbz5bVE9dPC9iYXI+IiApICk7Ci0gICAgICAgIAotICAgICAgICAvLwotICAgICAgICAKLSAgICAgICAgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCAiPGZvbz5hYmNkZWY8L2Zvbz4iICk7Ci0gICAgICAgIAotICAgICAgICBjRnJvbSA9IG5hdkRvYyggeCwgImQiICk7Ci0gICAgICAgIGNUbyA9IG5hdk5ld0N1cnNvciggY0Zyb20sICJ0M2MiICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCAhY0Zyb20ubW92ZVhtbCggY1RvICkgKTsKLSAgICAgICAgY0Zyb20uaW5zZXJ0Q2hhcnMoICJbRlJPTV0iICk7Ci0gICAgICAgIGNUby5pbnNlcnRDaGFycyggIltUT10iICk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoCi0gICAgICAgICAgICB4LnhtbFRleHQoIG9wdGlvbnMgKS5lcXVhbHMoICI8YmFyPltGUk9NXTxmb28+YWJjW1RPXWRlZjwvZm9vPjwvYmFyPiIgKSApOwotICAgICAgICAKLSAgICAgICAgLy8KLSAgICAgICAgCi0gICAgICAgIHggPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSggIjxyPjxhPnh5ejwvYT48Yj5wcXI8L2I+PC9yPiIgKTsKLSAgICAgICAgCi0gICAgICAgIGNGcm9tID0gbmF2RG9jKCB4LCAiZGQiICk7Ci0gICAgICAgIGNUbyA9IG5hdk5ld0N1cnNvciggY0Zyb20sICJyLTF0IiApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggY0Zyb20ubW92ZVhtbCggY1RvICkgKTsKLSAgICAgICAgY0Zyb20uaW5zZXJ0Q2hhcnMoICJbRlJPTV0iICk7Ci0gICAgICAgIGNUby5pbnNlcnRDaGFycyggIltUT10iICk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoCi0gICAgICAgICAgICB4LnhtbFRleHQoKS5lcXVhbHMoICI8cj5bRlJPTV08Yj5wcXI8L2I+PGE+eHl6PC9hPltUT108L3I+IiApICk7Ci0gICAgICAgIAotICAgICAgICAvLwotICAgICAgICAKLSAgICAgICAgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCAiPHI+PGE+eHl6PC9hPjxiPnBxcjwvYj5BQjwvcj4iICk7Ci0gICAgICAgIAotICAgICAgICBjRnJvbSA9IG5hdkRvYyggeCwgImRkIiApOwotICAgICAgICBjVG8gPSBuYXZOZXdDdXJzb3IoIGNGcm9tLCAici0xdC0xYyIgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGNGcm9tLm1vdmVYbWwoIGNUbyApICk7Ci0gICAgICAgIGNGcm9tLmluc2VydENoYXJzKCAiW0ZST01dIiApOwotICAgICAgICBjVG8uaW5zZXJ0Q2hhcnMoICJbVE9dIiApOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKAotICAgICAgICAgICAgeC54bWxUZXh0KCkuZXF1YWxzKCAiPHI+W0ZST01dPGI+cHFyPC9iPkE8YT54eXo8L2E+W1RPXUI8L3I+IiApICk7Ci0gICAgICAgIAotICAgICAgICAvLwotICAgICAgICAKLSAgICAgICAgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCAiPHI+PGE+eHl6PC9hPjxiPnBxcjwvYj5BQjwvcj4iICk7Ci0gICAgICAgIAotICAgICAgICBjRnJvbSA9IG5hdkRvYyggeCwgImRkIiApOwotICAgICAgICBjVG8gPSBuYXZOZXdDdXJzb3IoIGNGcm9tLCAic3RjIiApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggY0Zyb20ubW92ZVhtbCggY1RvICkgKTsKLSAgICAgICAgY0Zyb20uaW5zZXJ0Q2hhcnMoICJbRlJPTV0iICk7Ci0gICAgICAgIGNUby5pbnNlcnRDaGFycyggIltUT10iICk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoCi0gICAgICAgICAgICB4LnhtbFRleHQoKS5lcXVhbHMoICI8cj5bRlJPTV08Yj5wPGE+eHl6PC9hPltUT11xcjwvYj5BQjwvcj4iICkgKTsKLSAgICAgICAgCi0gICAgICAgIC8vCi0gICAgICAgIAotICAgICAgICB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8cj48YT54eXo8L2E+PGI+cHFyPC9iPkFCPC9yPiIgKTsKLSAgICAgICAgCi0gICAgICAgIGNGcm9tID0gbmF2RG9jKCB4LCAiZGQiICk7Ci0gICAgICAgIGNUbyA9IG5hdkRvYyggeCwgImQiICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjRnJvbS5tb3ZlWG1sKCBjVG8gKSApOwotICAgICAgICBjRnJvbS5pbnNlcnRDaGFycyggIltGUk9NXSIgKTsKLSAgICAgICAgY1RvLmluc2VydENoYXJzKCAiW1RPXSIgKTsKLQotICAgICAgICB0ZXN0VGV4dEZyYWcoIHgueG1sVGV4dCgpLCAiPGE+eHl6PC9hPltUT108cj5bRlJPTV08Yj5wcXI8L2I+QUI8L3I+IiApOwotICAgICAgICAKLSAgICAgICAgLy8KLSAgICAgICAgCi0gICAgICAgIHggPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSggIjxyPjxhPnh5ejwvYT48Yj5wcXI8L2I+QUI8L3I+IiApOwotICAgICAgICAKLSAgICAgICAgY0Zyb20gPSBuYXZEb2MoIHgsICJkZCIgKTsKLSAgICAgICAgY1RvID0gbmF2RG9jKCB4LCAiciIgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGNGcm9tLm1vdmVYbWwoIGNUbyApICk7Ci0gICAgICAgIGNGcm9tLmluc2VydENoYXJzKCAiW0ZST01dIiApOwotICAgICAgICBjVG8uaW5zZXJ0Q2hhcnMoICJbVE9dIiApOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKAotICAgICAgICAgICAgeC54bWxUZXh0KCBvcHRpb25zICkuZXF1YWxzKCAiPGJhcj48cj5bRlJPTV08Yj5wcXI8L2I+QUI8L3I+PGE+eHl6PC9hPltUT108L2Jhcj4iICkgKTsKLSAgICAgICAgCi0gICAgICAgIC8vCi0gICAgICAgIAotICAgICAgICB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8cj48YT54eXo8L2E+PC9yPiIgKTsKLSAgICAgICAgeDIgPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSggIjxzPjwvcz4iICk7Ci0gICAgICAgIAotICAgICAgICBjRnJvbSA9IG5hdkRvYyggeCwgImRkIiApOwotICAgICAgICBjVG8gPSBuYXZEb2MoIHgyLCAiZHQiICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjRnJvbS5tb3ZlWG1sKCBjVG8gKSApOwotICAgICAgICBjRnJvbS5pbnNlcnRDaGFycyggIltGUk9NXSIgKTsKLSAgICAgICAgY1RvLmluc2VydENoYXJzKCAiW1RPXSIgKTsKLQotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggIHgueG1sVGV4dCgpLmVxdWFscyggIjxyPltGUk9NXTwvcj4iICkgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHgyLnhtbFRleHQoKS5lcXVhbHMoICI8cz48YT54eXo8L2E+W1RPXTwvcz4iICkgKTsKLSAgICAgICAgCi0gICAgICAgIC8vCi0gICAgICAgIAotICAgICAgICB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8cj48YT5wcTwvYT48Yj48L2I+PC9yPiIgKTsKLSAgICAgICAgCi0gICAgICAgIGNGcm9tID0gbmF2RG9jKCB4LCAiZGQiICk7Ci0gICAgICAgIGNUbyA9IG5hdkRvYyggeCwgImRkc3QiICk7Ci0gICAgICAgIGNUZW1wID0gbmF2RG9jKCB4LCAiZGR0MWMiICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjRnJvbS5tb3ZlWG1sKCBjVG8gKSApOwotICAgICAgICBjRnJvbS5pbnNlcnRDaGFycyggIltGUk9NXSIgKTsKLSAgICAgICAgY1RvLmluc2VydENoYXJzKCAiW1RPXSIgKTsKLSAgICAgICAgY1RlbXAuaW5zZXJ0Q2hhcnMoICJbVEVNUF0iICk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoCi0gICAgICAgICAgICB4LnhtbFRleHQoKS5lcXVhbHMoICI8cj5bRlJPTV1bVEVNUF08Yj48YT5wcTwvYT5bVE9dPC9iPjwvcj4iICkgKTsKLSAgICAgICAgCi0gICAgICAgIC8vCi0gICAgICAgIAotICAgICAgICB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8Zm9vPmFiY2RlZjwvZm9vPiIgKTsKLSAgICAgICAgCi0gICAgICAgIGNGcm9tID0gbmF2RG9jKCB4LCAiMnQyYyIgKTsKLSAgICAgICAgY1RvID0gbmF2TmV3Q3Vyc29yKCBjRnJvbSwgIi0xYyIgKTsKLSAgICAgICAgY0Zyb20ubW92ZUNoYXJzKCAyLCBjVG8gKTsKLSAgICAgICAgY0Zyb20uaW5zZXJ0Q2hhcnMoICJbRlJPTV0iICk7Ci0gICAgICAgIGNUby5pbnNlcnRDaGFycyggIltUT10iICk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoCi0gICAgICAgICAgICB4LnhtbFRleHQoKS5lcXVhbHMoICI8Zm9vPmFjZFtUT11iW0ZST01dZWY8L2Zvbz4iICkgKTsKLSAgICAgICAgCi0gICAgICAgIC8vCi0gICAgICAgIAotICAgICAgICB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8Zm9vPmFiY2RlZjwvZm9vPiIgKTsKLSAgICAgICAgCi0gICAgICAgIGNGcm9tID0gbmF2RG9jKCB4LCAiMnQyYyIgKTsKLSAgICAgICAgY1RvID0gbmF2TmV3Q3Vyc29yKCBjRnJvbSwgIjNjIiApOwotICAgICAgICBjRnJvbS5tb3ZlQ2hhcnMoIDIsIGNUbyApOwotICAgICAgICBjRnJvbS5pbnNlcnRDaGFycyggIltGUk9NXSIgKTsKLSAgICAgICAgY1RvLmluc2VydENoYXJzKCAiW1RPXSIgKTsKLQotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgKLSAgICAgICAgICAgIHgueG1sVGV4dCgpLmVxdWFscyggIjxmb28+YWJbRlJPTV1lY2RbVE9dZjwvZm9vPiIgKSApOwotICAgIAotICAgICAgICAvLwotICAgICAgICAKLSAgICAgICAgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCAiPGJhcj48Zm9vPmFiY2RlZjwvZm9vPjxmb28+MTIzNDU2PC9mb28+PC9iYXI+IiApOwotICAgICAgICAKLSAgICAgICAgY0Zyb20gPSBuYXZEb2MoIHgsICIzdDJjIiApOwotICAgICAgICBjVG8gPSBuYXZOZXdDdXJzb3IoIGNGcm9tLCAiM3QzYyIgKTsKLSAgICAgICAgY0Zyb20ubW92ZUNoYXJzKCAyLCBjVG8gKTsKLSAgICAgICAgY0Zyb20uaW5zZXJ0Q2hhcnMoICJbRlJPTV0iICk7Ci0gICAgICAgIGNUby5pbnNlcnRDaGFycyggIltUT10iICk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoCi0gICAgICAgICAgICB4LnhtbFRleHQoKS5lcXVhbHMoCi0gICAgICAgICAgICAgICAgIjxiYXI+PGZvbz5hYltGUk9NXWVmPC9mb28+PGZvbz4xMjNjZFtUT100NTY8L2Zvbz48L2Jhcj4iICkgKTsKLSAgICAgICAgCi0gICAgICAgIC8vCi0gICAgICAgIAotICAgICAgICB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8YmFyPjxmb28+YWJjZGVmPC9mb28+PGZvbz4xMjM0NTY8L2Zvbz48L2Jhcj4iICk7Ci0gICAgICAgIAotICAgICAgICBjRnJvbSA9IG5hdkRvYyggeCwgIjJkIiApOwotICAgICAgICBjVG8gPSBuYXZEb2MoIHgsICIyZHN0MmMiICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjRnJvbS5jb3B5WG1sKCBjVG8gKSApOwotICAgICAgICBjRnJvbS5pbnNlcnRDaGFycyggIltGUk9NXSIgKTsKLSAgICAgICAgY1RvLmluc2VydENoYXJzKCAiW1RPXSIgKTsKLQotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgKLSAgICAgICAgICAgIHgueG1sVGV4dCgpLmVxdWFscygKLSAgICAgICAgICAgICAgICAiPGJhcj5bRlJPTV08Zm9vPmFiY2RlZjwvZm9vPjxmb28+MTIiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICI8Zm9vPmFiY2RlZjwvZm9vPltUT10zNDU2PC9mb28+PC9iYXI+IiApICk7Ci0KLSAgICAgICAgLy8KLSAgICAgICAgCi0gICAgICAgIHggPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSggIjxyPjxhPnh5ejwvYT48L3I+IiApOwotICAgICAgICB4MiA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCAiPHM+PC9zPiIgKTsKLSAgICAgICAgCi0gICAgICAgIGNGcm9tID0gbmF2RG9jKCB4LCAiZGQiICk7Ci0gICAgICAgIGNUbyA9IG5hdkRvYyggeDIsICJkdCIgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGNGcm9tLmNvcHlYbWwoIGNUbyApICk7Ci0gICAgICAgIGNGcm9tLmluc2VydENoYXJzKCAiW0ZST01dIiApOwotICAgICAgICBjVG8uaW5zZXJ0Q2hhcnMoICJbVE9dIiApOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCAgeC54bWxUZXh0KCkuZXF1YWxzKCAiPHI+W0ZST01dPGE+eHl6PC9hPjwvcj4iICkgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHgyLnhtbFRleHQoKS5lcXVhbHMoICI8cz48YT54eXo8L2E+W1RPXTwvcz4iICkgKTsKLSAgICAgICAgCi0gICAgICAgIC8vCi0gICAgICAgIAotICAgICAgICB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoCi0gICAgICAgICAgICAiPGJhcj48Zm9vPmFiY2RlZjwvZm9vPmJsYWg8Zm9vPjEyMzQ1NjwvZm9vPjwvYmFyPiIgKTsKLSAgICAgICAgCi0gICAgICAgIGNGcm9tID0gbmF2RG9jKCB4LCAiMmQiICk7Ci0gICAgICAgIGNUbyA9IG5hdkRvYyggeCwgIjJkc3QyYyIgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGNGcm9tLmNvcHlYbWwoIGNUbyApICk7Ci0gICAgICAgIGNGcm9tLmluc2VydENoYXJzKCAiW0ZST01dIiApOwotICAgICAgICBjVG8uaW5zZXJ0Q2hhcnMoICJbVE9dIiApOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKAotICAgICAgICAgICAgeC54bWxUZXh0KCkuZXF1YWxzKAotICAgICAgICAgICAgICAgICI8YmFyPltGUk9NXTxmb28+YWJjZGVmPC9mb28+YmxhaDxmb28+MTIiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICI8Zm9vPmFiY2RlZjwvZm9vPltUT10zNDU2PC9mb28+PC9iYXI+IiApICk7Ci0gICAgICAgIAotICAgICAgICAvLwotICAgICAgICAKLSAgICAgICAgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKAotICAgICAgICAgICAgIjxiYXI+PGZvbyB4PSd5Jz5hYmNkZWY8L2Zvbz48Zm9vPjEyMzQ1NjwvZm9vPjc4OTA8L2Jhcj4iICk7Ci0gICAgICAgIAotICAgICAgICBjRnJvbSA9IG5hdkRvYyggeCwgIjJkdCIgKTsKLSAgICAgICAgY1RvID0gbmF2RG9jKCB4LCAiMmRzdCIgKTsKLSAgICAgICAgY1RlbXAgPSBuYXZEb2MoIHgsICIyZHN0M2MiICk7Ci0gICAgICAgIGNUZW1wMiA9IG5hdkRvYyggeCwgIjJkczN0MmMiICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjRnJvbS5jb3B5WG1sKCBjVG8gKSApOwotICAgICAgICBjVGVtcC5pbnNlcnRDaGFycyggIltURU1QXSIgKTsKLSAgICAgICAgY1RlbXAyLmluc2VydENoYXJzKCAiW1RFTVAyXSIgKTsKLQotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgKLSAgICAgICAgICAgIHgueG1sVGV4dCgpLmVxdWFscygKLSAgICAgICAgICAgICAgICAiPGJhcj48Zm9vIHg9XCJ5XCI+YWJjZGVmPC9mb28+IiArCi0gICAgICAgICAgICAgICAgICAgICI8Zm9vIHg9XCJ5XCI+MTIzW1RFTVBdNDU2PC9mb28+NzhbVEVNUDJdOTA8L2Jhcj4iICkgKTsKLQotICAgICAgICAvLwotICAgICAgICAKLSAgICAgICAgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKAotICAgICAgICAgICAgIjxiYXI+eHk8Zm9vIHg9J3knPmFiY2RlZjwvZm9vPnBxcjxmb28+MTIzNDU2PC9mb28+PC9iYXI+IiApOwotICAgICAgICAKLSAgICAgICAgY0Zyb20gPSBuYXZEb2MoIHgsICIyZCIgKTsKLSAgICAgICAgY1RvID0gbmF2RG9jKCB4LCAiMmRzLTJjIiApOwotICAgICAgICAKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGNGcm9tLnJlbW92ZVhtbCgpICk7Ci0KLSAgICAgICAgY0Zyb20uaW5zZXJ0Q2hhcnMoICJbRlJPTV0iICk7Ci0gICAgICAgIGNUby5pbnNlcnRDaGFycyggIltUT10iICk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoCi0gICAgICAgICAgICB4LnhtbFRleHQoKS5lcXVhbHMoCi0gICAgICAgICAgICAgICAgIjxiYXI+eHlbRlJPTV1wW1RPXXFyPGZvbz4xMjM0NTY8L2Zvbz48L2Jhcj4iICkgKTsKLSAgICAgICAgCi0gICAgICAgIC8vCi0gICAgICAgIAotICAgICAgICB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoCi0gICAgICAgICAgICAiPGJhcj54eTxmb28geD0neSc+YWJjZGVmPC9mb28+cHFyPGZvbz4xMjM0NTY8L2Zvbz48L2Jhcj4iICk7Ci0gICAgICAgIAotICAgICAgICBjRnJvbSA9IG5hdkRvYyggeCwgIjJkMnQyYyIgKTsKLSAgICAgICAgY1RvID0gbmF2RG9jKCB4LCAiMmQydDVjIiApOwotICAgICAgICAKLSAgICAgICAgY0Zyb20ucmVtb3ZlQ2hhcnMoIDIgKTsKLQotICAgICAgICBjRnJvbS5pbnNlcnRDaGFycyggIltGUk9NXSIgKTsKLSAgICAgICAgY1RvLmluc2VydENoYXJzKCAiW1RPXSIgKTsKLQotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgKLSAgICAgICAgICAgIHgueG1sVGV4dCgpLmVxdWFscygKLSAgICAgICAgICAgICAgICAiPGJhcj54eTxmb28geD1cInlcIj5hYltGUk9NXWVbVE9dZiIgKwotICAgICAgICAgICAgICAgICAgICAiPC9mb28+cHFyPGZvbz4xMjM0NTY8L2Zvbz48L2Jhcj4iICkgKTsKLSAgICAgICAgCi0gICAgICAgIC8vCi0gICAgICAgIAotICAgICAgICB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8YmFyPjwhLS0tLT5hYmM8L2Jhcj4iICk7Ci0gICAgICAgIAotICAgICAgICBjRnJvbSA9IG5hdkRvYyggeCwgInR0IiApOwotICAgICAgICBjVG8gPSBuYXZEb2MoIHgsICJ0dHRjIiApOwotICAgICAgICAKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGNGcm9tLnJlbW92ZVhtbCgpICk7Ci0KLSAgICAgICAgY0Zyb20uaW5zZXJ0Q2hhcnMoICJbRlJPTV0iICk7Ci0gICAgICAgIGNUby5pbnNlcnRDaGFycyggIltUT10iICk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHgueG1sVGV4dCgpLmVxdWFscyggIjxiYXI+W0ZST01dYVtUT11iYzwvYmFyPiIgKSApOwotCi0gICAgICAgIC8vCi0gICAgICAgIAotICAgICAgICB4ID0gWG1sT2JqZWN0LkZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQotICAgICAgICBjVG8gPSBuYXZEb2MoIHgsICJ0IiApOwotICAgICAgICBjVG8uaW5zZXJ0RWxlbWVudCggImJvbyIgKTsKLSAgICAgICAgY1RvLnRvUHJldlRva2VuKCk7Ci0gICAgICAgIGNUby5pbnNlcnRFbGVtZW50KCAibW9vIiApOwotICAgICAgICBjVG8udG9QcmV2VG9rZW4oKTsKLSAgICAgICAgY1RvLmluc2VydEVsZW1lbnQoICJnb28iICk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHgueG1sVGV4dCgpLmVxdWFscygKLSAgICAgICAgICAgICI8Ym9vPjxtb28+PGdvby8+PC9tb28+PC9ib28+IiApICk7Ci0KLSAgICAgICAgLy8KLSAgICAgICAgCi0gICAgICAgIHggPSBYbWxPYmplY3QuRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCi0gICAgICAgIGNUbyA9IG5hdkRvYyggeCwgInQiICk7Ci0gICAgICAgIGNUby5pbnNlcnRFbGVtZW50KCAiYm9vIiApOwotICAgICAgICBjVG8udG9QcmV2VG9rZW4oKTsKLSAgICAgICAgY1RvLmluc2VydEVsZW1lbnQoICJtb28iICk7Ci0gICAgICAgIGNUby50b1ByZXZUb2tlbigpOwotICAgICAgICBjVG8uaW5zZXJ0QXR0cmlidXRlV2l0aFZhbHVlKCAieCIsICJ5IiApOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB4LnhtbFRleHQoKS5lcXVhbHMoCi0gICAgICAgICAgICAiPGJvbz48bW9vIHg9XCJ5XCIvPjwvYm9vPiIgKSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAvLwotICAgICAgICAKLSAgICAgICAgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCAiPGJhciB4PSd5Jz5hYmM8L2Jhcj4iICk7Ci0gICAgICAgIGNUbyA9IG5hdkRvYyggeCwgInR0IiApOwotICAgICAgICBjVG8uaW5zZXJ0QXR0cmlidXRlV2l0aFZhbHVlKCAicCIsICJxIiApOwotICAgICAgICAKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHgueG1sVGV4dCgpLmVxdWFscygKLSAgICAgICAgICAgICI8YmFyIHA9XCJxXCIgeD1cInlcIj5hYmM8L2Jhcj4iICkgKTsKLQotICAgICAgICAvLyBUZXh0IFhtbEJvb2ttYXJrCi0KLSAgICAgICAgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCAiPHI+PGZvbz5hYmM8L2Zvbz48YmFyPjwvYmFyPjwvcj4iICk7Ci0gICAgICAgIGNGcm9tID0gbmF2RG9jKCB4LCAidHQiICk7Ci0gICAgICAgIGFubm8gPSBuZXcgQW5ubygpOwotICAgICAgICBjRnJvbS5zZXRCb29rbWFyayggYW5ubyApOwotICAgICAgICBjVG8gPSBuYXZEb2MoIHgsICI2dCIgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGNGcm9tLm1vdmVYbWwoIGNUbyApICk7Ci0gICAgICAgIGNGcm9tLmluc2VydENoYXJzKCAiW0ZST01dIiApOwotICAgICAgICBjVG8uaW5zZXJ0Q2hhcnMoICJbVE9dIiApOwotICAgICAgICBhbm5vLmNyZWF0ZUN1cnNvcigpLmluc2VydENoYXJzKCAiW0FOTk9dIiApOwotICAgICAgICAKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHgueG1sVGV4dCgpLmVxdWFscygKLSAgICAgICAgICAgICI8cj5bRlJPTV08YmFyPltBTk5PXTxmb28+YWJjPC9mb28+W1RPXTwvYmFyPjwvcj4iICkgKTsKLQotICAgICAgICAvLyBUZXN0IGNvbnRlbnQgb3BzCi0KLSAgICAgICAgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCAiPGZvbyB4PSd5Jz5hYmM8L2Zvbz4iICk7Ci0gICAgICAgIHkgPSBYbWxPYmplY3QuRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgICBkID0geS5uZXdDdXJzb3IoKTsKLSAgICAgICAgZC50b05leHRUb2tlbigpOwotICAgICAgICB4Lm5ld0N1cnNvcigpLm1vdmVYbWxDb250ZW50cyggZCApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggeS54bWxUZXh0KCkuZXF1YWxzKCAiPGZvbyB4PVwieVwiPmFiYzwvZm9vPiIgKSApOwotICAgICAgICAKLSAgICAgICAgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCAiPGJhcj48Zm9vIHg9J3knPmFiYzwvZm9vPjwvYmFyPiIgKTsKLSAgICAgICAgeSA9IFhtbE9iamVjdC5GYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAgIGMgPSB4Lm5ld0N1cnNvcigpOwotICAgICAgICBjLnRvTmV4dFRva2VuKCk7Ci0gICAgICAgIGQgPSB5Lm5ld0N1cnNvcigpOwotICAgICAgICBkLnRvTmV4dFRva2VuKCk7Ci0gICAgICAgIGMubW92ZVhtbENvbnRlbnRzKCBkICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB5LnhtbFRleHQoKS5lcXVhbHMoICI8Zm9vIHg9XCJ5XCI+YWJjPC9mb28+IiApICk7Ci0KLSAgICAgICAgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCAiPGJhcj48Zm9vIHg9J3knPmFiYzwvZm9vPjwvYmFyPiIgKTsKLSAgICAgICAgYyA9IHgubmV3Q3Vyc29yKCk7Ci0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLSAgICAgICAgYy5yZW1vdmVYbWxDb250ZW50cygpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggeC54bWxUZXh0KCkuZXF1YWxzKCAiPGJhci8+IiApICk7Ci0KLSAgICAgICAgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCAiPGZvbyB4PSd5Jz5hYmM8L2Zvbz4iICk7Ci0gICAgICAgIHkgPSBYbWxPYmplY3QuRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotICAgICAgICBkID0geS5uZXdDdXJzb3IoKTsKLSAgICAgICAgZC50b05leHRUb2tlbigpOwotICAgICAgICB4Lm5ld0N1cnNvcigpLmNvcHlYbWxDb250ZW50cyggZCApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggeS54bWxUZXh0KCkuZXF1YWxzKCAiPGZvbyB4PVwieVwiPmFiYzwvZm9vPiIgKSApOwotICAgIH0gICAgICAgIAotCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBBbm5vIGV4dGVuZHMgWG1sQm9va21hcmsKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHRlc3RTYXZlICggKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBYbWxPYmplY3QgeDsKLSAgICAgICAgWG1sQ3Vyc29yIGNUbzsKLSAgICAgICAgCi0gICAgICAgIC8vCi0gICAgICAgIAotICAgICAgICB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8Zm9vPmFiY2RlZjwvZm9vPiIgKTsKLSAgICAgICAgCi0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB4LnhtbFRleHQoKS5lcXVhbHMoICI8Zm9vPmFiY2RlZjwvZm9vPiIgKSApOwotCi0gICAgICAgIC8vCi0gICAgICAgIAotICAgICAgICB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8Zm9vPmEmbHQ7YiZhbXA7YzwvZm9vPiIgKTsKLSAgICAgICAgCi0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB4LnhtbFRleHQoKS5lcXVhbHMoICI8Zm9vPmEmbHQ7YiZhbXA7YzwvZm9vPiIgKSApOwotCi0gICAgICAgIC8vCi0gICAgICAgIAotICAgICAgICB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8Zm9vPjwvZm9vPiIgKTsKLSAgICAgICAgCi0gICAgICAgIGNUbyA9IG5hdkRvYyggeCwgImR0IiApOwotICAgICAgICBjVG8uaW5zZXJ0Q2hhcnMoICImPCIgKTsKLSAgICAgICAgCi0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB4LnhtbFRleHQoKS5lcXVhbHMoICI8Zm9vPiZhbXA7Jmx0OzwvZm9vPiIgKSApOwotCi0gICAgICAgIC8vCi0gICAgICAgIAotICAgICAgICB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8Zm9vPjxib28+YmFyPC9ib28+PC9mb28+IiApOwotICAgICAgICAKLSAgICAgICAgY1RvID0gbmF2RG9jKCB4LCAiZHQiICk7Ci0gICAgICAgIAotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggY1RvLnhtbFRleHQoKS5lcXVhbHMoICI8Ym9vPmJhcjwvYm9vPiIgKSApOwotCi0gICAgICAgIC8vCi0gICAgICAgIAotICAgICAgICB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8Zm9vPjxib28geD1cInlcIj5iYXI8L2Jvbz48L2Zvbz4iICk7Ci0gICAgICAgIAotICAgICAgICBjVG8gPSBuYXZEb2MoIHgsICJkdCIgKTsKLSAgICAgICAgCi0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjVG8ueG1sVGV4dCgpLmVxdWFscyggIjxib28geD1cInlcIj5iYXI8L2Jvbz4iICkgKTsKLQotICAgICAgICAvLyBUZXN0cyBmcmFnbWVudCBzYXZpbmcgYW5kIGxvYWRpbmcKLSAgICAgICAgCi0gICAgICAgIHggPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSggIjxmb28+RXJpYzwvZm9vPiIgKTsKLSAgICAgICAgCi0gICAgICAgIGNUbyA9IG5hdkRvYyggeCwgImR0IiApOwotCi0gICAgICAgIHggPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSggY1RvLnhtbFRleHQoKSApOwotICAgICAgICAKLSAgICAgICAgY1RvID0gbmF2RG9jKCB4LCAiIiApOwotICAgICAgICAKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGNUby5nZXRUZXh0VmFsdWUoKS5lcXVhbHMoICJFcmljIiApICk7Ci0KLSAgICAgICAgLy8gdGVzdCBzYXZlIHdoZXJlIEkgcmVwbGFjZSB0aGUgbmFtZSBvZiBhbiBlbGVtZW50Ci0gICAgICAgIAotICAgICAgICB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8Zm9vPkVyaWM8L2Zvbz4iICk7Ci0gICAgICAgIAotICAgICAgICBjVG8gPSBuYXZEb2MoIHgsICJkIiApOwotCi0gICAgICAgIFhtbE9wdGlvbnMgb3B0aW9ucyA9IG5ldyBYbWxPcHRpb25zKCk7Ci0gICAgICAgIAotICAgICAgICBvcHRpb25zLnB1dCgKLSAgICAgICAgICAgIFhtbE9wdGlvbnMuU0FWRV9TWU5USEVUSUNfRE9DVU1FTlRfRUxFTUVOVCwKLSAgICAgICAgICAgIG5ldyBRTmFtZSggbnVsbCwgImJhciIgKSApOwotICAgICAgICAKLSAgICAgICAgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCBjVG8ueG1sVGV4dCggb3B0aW9ucyApICk7Ci0gICAgICAgIAotICAgICAgICBjVG8gPSBuYXZEb2MoIHgsICIiICk7Ci0gICAgICAgIAotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggY1RvLnhtbFRleHQoKS5lcXVhbHMoICI8YmFyPkVyaWM8L2Jhcj4iICkgKTsKLQotICAgICAgICAvLyB0ZXN0IHNhdmUgd2hlcmUgSSByZXBsYWNlIHRoZSBuYW1lIG9mIHRoZSBkb2N1bWVudAotICAgICAgICAKLSAgICAgICAgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCAiPGZvbz5FcmljPC9mb28+IiApOwotICAgICAgICAKLSAgICAgICAgY1RvID0gbmF2RG9jKCB4LCAiIiApOwotCi0gICAgICAgIG9wdGlvbnMgPSBuZXcgWG1sT3B0aW9ucygpOwotICAgICAgICAKLSAgICAgICAgb3B0aW9ucy5wdXQoCi0gICAgICAgICAgICBYbWxPcHRpb25zLlNBVkVfU1lOVEhFVElDX0RPQ1VNRU5UX0VMRU1FTlQsCi0gICAgICAgICAgICBuZXcgUU5hbWUoIG51bGwsICJiYXIiICkgKTsKLSAgICAgICAgCi0gICAgICAgIHggPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSggY1RvLnhtbFRleHQoIG9wdGlvbnMgKSApOwotICAgICAgICAKLSAgICAgICAgY1RvID0gbmF2RG9jKCB4LCAiIiApOwotICAgICAgICAKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoCi0gICAgICAgICAgICBjVG8ueG1sVGV4dCgpLmVxdWFscyggIjxiYXI+PGZvbz5FcmljPC9mb28+PC9iYXI+IiApICk7Ci0KLSAgICAgICAgLy8KLSAgICAgICAgLy8KLSAgICAgICAgLy8KLSAgICAgICAgCi0gICAgICAgIHggPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSggIjxhIHhtbG5zPSdmb28nLz4iICk7Ci0KLSAgICAgICAgWG1sQ3Vyc29yIGMgPSB4Lm5ld0N1cnNvcigpOwotCi0gICAgICAgIGMudG9GaXJzdENvbnRlbnRUb2tlbigpOwotICAgICAgICBjLnRvRmlyc3RDb250ZW50VG9rZW4oKTsKLQotICAgICAgICBjLmluc2VydEVsZW1lbnQoICJiIiApOwotICAgICAgICBjLnRvUHJldlNpYmxpbmcoKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMuZ2V0TmFtZSgpLmdldExvY2FsUGFydCgpLmVxdWFscyggImIiICkgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMuZ2V0TmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpLmxlbmd0aCgpID09IDAgKTsKLSAgICAgICAgCi0gICAgICAgIHggPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSggeC54bWxUZXh0KCkgKTsKLSAgICAgICAgCi0gICAgICAgIGMgPSB4Lm5ld0N1cnNvcigpOwotICAgICAgICAKLSAgICAgICAgYy50b0ZpcnN0Q29udGVudFRva2VuKCk7Ci0gICAgICAgIGMudG9GaXJzdENvbnRlbnRUb2tlbigpOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLmdldE5hbWUoKS5nZXRMb2NhbFBhcnQoKS5lcXVhbHMoICJiIiApICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLmdldE5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKS5sZW5ndGgoKSA9PSAwICk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHRlc3RUZXh0RnJhZyAoIFN0cmluZyBhY3R1YWwsIFN0cmluZyBleHBlY3RlZCApCi0gICAgewotICAgICAgICBTdHJpbmcgcHJlID0gIjx4bWwtZnJhZ21lbnQ+IjsKLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBwb3N0ID0gIjwveG1sLWZyYWdtZW50PiI7Ci0gICAgICAgIAotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYWN0dWFsLnN0YXJ0c1dpdGgoIHByZSApICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBhY3R1YWwuZW5kc1dpdGgoIHBvc3QgKSApOwotICAgICAgICAKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoCi0gICAgICAgICAgICBleHBlY3RlZC5lcXVhbHMoCi0gICAgICAgICAgICAgICAgYWN0dWFsLnN1YnN0cmluZygKLSAgICAgICAgICAgICAgICAgICAgcHJlLmxlbmd0aCgpLCBhY3R1YWwubGVuZ3RoKCkgLSBwb3N0Lmxlbmd0aCgpICkgKSApOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0U2F2ZUZyYWcgKCApCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbE9iamVjdCB4OwotICAgICAgICBYbWxDdXJzb3IgYzsKLSAgICAgICAgCi0gICAgICAgIHggPSBYbWxPYmplY3QuRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCi0gICAgICAgIGMgPSB4Lm5ld0N1cnNvcigpOwotICAgICAgICAKLSAgICAgICAgYy50b05leHRUb2tlbigpOwotICAgICAgICAKLSAgICAgICAgYy5pbnNlcnRDaGFycyggIkVyaWMiICk7Ci0KLSAgICAgICAgdGVzdFRleHRGcmFnKCB4LnhtbFRleHQoKSwgIkVyaWMiICk7Ci0KLSAgICAgICAgLy8KLQotICAgICAgICB4ID0gWG1sT2JqZWN0LkZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLQotICAgICAgICBjID0geC5uZXdDdXJzb3IoKTsKLQotICAgICAgICBjLnRvTmV4dFRva2VuKCk7Ci0KLSAgICAgICAgYy5pbnNlcnRDb21tZW50KCAiIiApOwotICAgICAgICBjLmluc2VydENoYXJzKCAieCIgKTsKLSAgICAgICAgCi0gICAgICAgIHRlc3RUZXh0RnJhZyggeC54bWxUZXh0KCksICI8IS0tLS0+eCIgKTsKLQotICAgICAgICAvLwotCi0gICAgICAgIHggPSBYbWxPYmplY3QuRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCi0gICAgICAgIGMgPSB4Lm5ld0N1cnNvcigpOwotCi0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLQotICAgICAgICBjLmluc2VydEVsZW1lbnQoICJmb28iICk7Ci0gICAgICAgIGMuaW5zZXJ0Q2hhcnMoICJ4IiApOwotICAgICAgICAKLSAgICAgICAgdGVzdFRleHRGcmFnKCB4LnhtbFRleHQoKSwgIjxmb28vPngiICk7Ci0gICAgICAgIAotICAgICAgICAvLwotCi0gICAgICAgIHggPSBYbWxPYmplY3QuRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCi0gICAgICAgIGMgPSB4Lm5ld0N1cnNvcigpOwotCi0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLQotICAgICAgICBjLmluc2VydEVsZW1lbnQoICJmb28iICk7Ci0gICAgICAgIGMuaW5zZXJ0RWxlbWVudCggImJhciIgKTsKLSAgICAgICAgCi0gICAgICAgIHRlc3RUZXh0RnJhZyggeC54bWxUZXh0KCksICI8Zm9vLz48YmFyLz4iICk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHRlc3RMb2FkICggKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBYbWxPYmplY3QgeDsKLSAgICAgICAgCi0gICAgICAgIFhtbE9wdGlvbnMgb3B0aW9ucyA9IG5ldyBYbWxPcHRpb25zKCk7Ci0gICAgICAgIAotICAgICAgICBvcHRpb25zLnB1dCggWG1sT3B0aW9ucy5MT0FEX1JFUExBQ0VfRE9DVU1FTlRfRUxFTUVOVCwgbnVsbCApOwotICAgICAgICAKLSAgICAgICAgeCA9Ci0gICAgICAgICAgICBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSgKLSAgICAgICAgICAgICAgICAiPGJhciBwPSdxJyB4PSd5Jz5hYjxmb28+eHk8L2Zvbz5jZDwvYmFyPiIsIG9wdGlvbnMgKTsKLSAgICAgICAgCi0gICAgICAgIFhtbEN1cnNvciBjID0gbmF2RG9jKCB4LCAidCIgKTsKLQotICAgICAgICBhc3NlcnRUcnVlKCBjLmN1cnJlbnRUb2tlblR5cGUoKSA9PSBUb2tlblR5cGUuQVRUUiApOwotCi0gICAgICAgIFN0cmluZyBvcGVuID0gInhtbG5zOm9wZW49J2h0dHA6Ly93d3cub3BlbnVyaS5vcmcvZnJhZ21lbnQnIjsKLSAgICAgICAgCi0gICAgICAgIHggPQotICAgICAgICAgICAgWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoCi0gICAgICAgICAgICAgICAgIjxvcGVuOmZyYWdtZW50IHA9J3EnIHg9J3knICIgKyBvcGVuICsKLSAgICAgICAgICAgICAgICAgICAgIj5hYjxmb28+eHk8L2Zvbz5jZDwvb3BlbjpmcmFnbWVudD4iICk7Ci0gICAgICAgIAotICAgICAgICBjID0gbmF2RG9jKCB4LCAidCIgKTsKLQotICAgICAgICBhc3NlcnRUcnVlKCBjLmN1cnJlbnRUb2tlblR5cGUoKSA9PSBUb2tlblR5cGUuQVRUUiApOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0Q29tcGFyZSAoICkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgWG1sT2JqZWN0IHg7Ci0gICAgICAgIFhtbEN1cnNvciBjRnJvbSwgY1RvOwotCi0gICAgICAgIC8vIEZvcndhcmQgbmF2aWdhdGlvbiAKLSAgICAgICAgCi0gICAgICAgIHggPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSggIjxiYXIgcD0ncScgeD0neSc+YWI8Zm9vPnh5PC9mb28+Y2Q8L2Jhcj4iICk7Ci0KLSAgICAgICAgY0Zyb20gPSBuYXZEb2MoIHgsICIiICk7Ci0gICAgICAgIGNUbyA9IG5hdkRvYyggeCwgIiIgKTsKLSAgICAgICAgICAgIAotICAgICAgICBmb3IgKCA7IDsgKQotICAgICAgICB7Ci0gICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggY0Zyb20uY29tcGFyZVBvc2l0aW9uKCBjVG8gKSA9PSAwICk7Ci0gICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggY0Zyb20uaXNBdFNhbWVQb3NpdGlvbkFzKCBjVG8gKSApOwotCi0gICAgICAgICAgICBUb2tlblR5cGUgdHQgPSBjRnJvbS5jdXJyZW50VG9rZW5UeXBlKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh0dCA9PSBUb2tlblR5cGUuRU5ERE9DKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodHQgPT0gVG9rZW5UeXBlLlRFWFQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY0Zyb20udG9OZXh0Q2hhciggMSApOwotICAgICAgICAgICAgICAgIGNUby50b05leHRDaGFyKCAxICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY0Zyb20udG9OZXh0VG9rZW4oKTsKLSAgICAgICAgICAgICAgICBjVG8udG9OZXh0VG9rZW4oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIEJhY2t3YXJkIG5hdmlnYXRpb24gCi0gICAgICAgIAotICAgICAgICB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8YmFyIHA9J3EnIHg9J3knPmFiPGZvbz54eTwvZm9vPmNkPC9iYXI+IiApOwotCi0gICAgICAgIGNGcm9tID0gbmF2RG9jKCB4LCAiciIgKTsKLSAgICAgICAgY1RvID0gbmF2RG9jKCB4LCAiciIgKTsKLSAgICAgICAgICAgIAotICAgICAgICBmb3IgKCA7IDsgKQotICAgICAgICB7Ci0gICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggY0Zyb20uY29tcGFyZVBvc2l0aW9uKCBjVG8gKSA9PSAwICk7Ci0gICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggY0Zyb20uaXNBdFNhbWVQb3NpdGlvbkFzKCBjVG8gKSApOwotCi0gICAgICAgICAgICBpZiAoY0Zyb20udG9QcmV2Q2hhciggMSApID09IDEpCi0gICAgICAgICAgICAgICAgY1RvLnRvUHJldkNoYXIoIDEgKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNGcm9tLnRvUHJldlRva2VuKCkgIT0gVG9rZW5UeXBlLk5PTkUpCi0gICAgICAgICAgICAgICAgY1RvLnRvUHJldlRva2VuKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvLwotICAgICAgICAKLSAgICAgICAgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKAotICAgICAgICAgICAgIjxiYXIgcD0ncScgeD0neSc+YWI8Zm9vPnh5PC9mb28+YzxmIHk9J3gnPnh5PC9mPmQ8L2Jhcj4iICk7Ci0KLSAgICAgICAgY0Zyb20gPSBuYXZEb2MoIHgsICIiICk7Ci0KLSAgICAgICAgZm9yICggOyA7ICkKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbGVhbiBwYXNzZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY1RvID0gbmF2RG9jKCB4LCAiIiApOwotCi0gICAgICAgICAgICBmb3IgKCA7IDsgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjVG8uaXNBdFNhbWVQb3NpdGlvbkFzKCBjRnJvbSApKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoICFwYXNzZWQgKTsKLSAgICAgICAgICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY1RvLmlzTGVmdE9mKCBjRnJvbSApKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoICFwYXNzZWQgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHBhc3NlZCApOwotICAgICAgICAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggY1RvLmlzUmlnaHRPZiggY0Zyb20gKSApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoY1RvLnRvTmV4dENoYXIoIDEgKSAhPSAxKQotICAgICAgICAgICAgICAgICAgICBpZiAoY1RvLnRvTmV4dFRva2VuKCkgPT0gVG9rZW5UeXBlLkVORERPQykKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoY0Zyb20udG9OZXh0Q2hhciggMSApICE9IDEpCi0gICAgICAgICAgICAgICAgaWYgKGNGcm9tLnRvTmV4dFRva2VuKCkgPT0gVG9rZW5UeXBlLkVORERPQykKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0aWMgY2xhc3MgTXlBbm5vIGV4dGVuZHMgWG1sQm9va21hcmsKLSAgICB7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdEFubm90YXRpb24gKCApCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbE9iamVjdCB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8Zm9vLz4iICk7Ci0gICAgICAgIFhtbEN1cnNvciBjID0geC5uZXdDdXJzb3IoKTsKLSAgICAgICAgYy50b05leHRUb2tlbigpOwotICAgICAgICBNeUFubm8gYSA9IG5ldyBNeUFubm8oKTsKLSAgICAgICAgYy5zZXRCb29rbWFyayggYSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy5yZW1vdmVYbWwoKSApOwotICAgICAgICBYbWxDdXJzb3IgYzIgPSBhLmNyZWF0ZUN1cnNvcigpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYzIgPT0gbnVsbCApOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0QXR0clNldHRlciAoICkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgWG1sT2JqZWN0IHggPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSggIjxmb28vPiIgKTsKLSAgICAgICAgWG1sQ3Vyc29yIGMgPSB4Lm5ld0N1cnNvcigpOwotICAgICAgICBjLnRvTmV4dFRva2VuKCk7Ci0gICAgICAgIGMuc2V0QXR0cmlidXRlVGV4dCggbmV3IFFOYW1lKCBudWxsLCAieCIgKSwgImhhcmRlaGFyIiApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggeC54bWxUZXh0KCkuZXF1YWxzKCAiPGZvbyB4PVwiaGFyZGVoYXJcIi8+IiApICk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHRlc3ROYXZpZ2F0aW9uICggKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBYbWxPYmplY3QgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCAiPGE+PHgvPjx5Lz48ei8+PC9hPiIgKTsKLSAgICAgICAgWG1sQ3Vyc29yIGMgPSB4Lm5ld0N1cnNvcigpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy50b05leHRTaWJsaW5nKCkgPT0gZmFsc2UgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMudG9QcmV2U2libGluZygpID09IGZhbHNlICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLnRvRmlyc3RBdHRyaWJ1dGUoKSA9PSBmYWxzZSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy50b0xhc3RBdHRyaWJ1dGUoKSA9PSBmYWxzZSApOwotICAgICAgICBjLnRvTmV4dFRva2VuKCk7Ci0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMudG9OZXh0U2libGluZygpID09IHRydWUgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMuZ2V0TmFtZSgpLmdldExvY2FsUGFydCgpLmVxdWFscyggInkiICkgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMudG9OZXh0U2libGluZygpID09IHRydWUgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMuZ2V0TmFtZSgpLmdldExvY2FsUGFydCgpLmVxdWFscyggInoiICkgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMudG9OZXh0U2libGluZygpID09IGZhbHNlICk7Ci0KLSAgICAgICAgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCAiPGEgcD0ncScgbT0nbic+PHgvPjx5Lz48ei8+PC9hPiIgKTsKLSAgICAgICAgYyA9IHgubmV3Q3Vyc29yKCk7Ci0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLSAgICAgICAgYy50b05leHRUb2tlbigpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy5jdXJyZW50VG9rZW5UeXBlKCkuaXNBdHRyKCkgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMudG9QcmV2U2libGluZygpID09IGZhbHNlICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLmN1cnJlbnRUb2tlblR5cGUoKS5pc0F0dHIoKSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy50b05leHRTaWJsaW5nKCkgPT0gdHJ1ZSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy5nZXROYW1lKCkuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKCAieCIgKSApOwotCi0gICAgICAgIGMudG9FbmREb2MoKTsKLSAgICAgICAgYy50b1ByZXZUb2tlbigpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy50b1ByZXZTaWJsaW5nKCkgPT0gdHJ1ZSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy5nZXROYW1lKCkuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKCAieiIgKSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy50b1ByZXZTaWJsaW5nKCkgPT0gdHJ1ZSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy5nZXROYW1lKCkuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKCAieSIgKSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy50b1ByZXZTaWJsaW5nKCkgPT0gdHJ1ZSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy5nZXROYW1lKCkuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKCAieCIgKSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy50b1ByZXZTaWJsaW5nKCkgPT0gZmFsc2UgKTsKLSAgICAgICAgCi0gICAgICAgIGMudG9FbmREb2MoKTsKLSAgICAgICAgYy50b1ByZXZUb2tlbigpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy50b1BhcmVudCgpID09IHRydWUgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMuZ2V0TmFtZSgpLmdldExvY2FsUGFydCgpLmVxdWFscyggImEiICkgKTsKLSAgICAgICAgCi0gICAgICAgIGMudG9FbmREb2MoKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMudG9QYXJlbnQoKSA9PSB0cnVlICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLmN1cnJlbnRUb2tlblR5cGUoKS5pc1N0YXJ0ZG9jKCkgKTsKLSAgICAgICAgCi0gICAgICAgIHggPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSggIjxhPm1vbzwhLS0tLT5mb288L2E+IiApOwotICAgICAgICBjID0geC5uZXdDdXJzb3IoKTsKLSAgICAgICAgYy50b1N0YXJ0RG9jKCk7Ci0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLSAgICAgICAgYy50b05leHRUb2tlbigpOwotICAgICAgICBjLnRvTmV4dFRva2VuKCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLnRvUGFyZW50KCkgPT0gdHJ1ZSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy5nZXROYW1lKCkuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKCAiYSIgKSApOwotICAgICAgICAKLSAgICAgICAgYy50b1N0YXJ0RG9jKCk7Ci0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLSAgICAgICAgYy50b05leHRUb2tlbigpOwotICAgICAgICBjLnRvTmV4dFRva2VuKCk7Ci0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMudG9QYXJlbnQoKSA9PSB0cnVlICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLmdldE5hbWUoKS5nZXRMb2NhbFBhcnQoKS5lcXVhbHMoICJhIiApICk7Ci0KLSAgICAgICAgYy50b1N0YXJ0RG9jKCk7Ci0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLSAgICAgICAgYy50b05leHRUb2tlbigpOwotICAgICAgICBjLnRvTmV4dFRva2VuKCk7Ci0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLSAgICAgICAgYy50b05leHRDaGFyKCAyICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLnRvUGFyZW50KCkgPT0gdHJ1ZSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy5nZXROYW1lKCkuZ2V0TG9jYWxQYXJ0KCkuZXF1YWxzKCAiYSIgKSApOwotICAgICAgICAKLSAgICAgICAgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCAiPGZvbz5lYXJseTxiYXI+dGV4dDxjaGFyPnphcDwvY2hhcj48L2Jhcj48L2Zvbz4iICk7Ci0gICAgICAgIGMgPSB4Lm5ld0N1cnNvcigpOwotICAgICAgICBjLnRvTmV4dFRva2VuKCk7Ci0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMudG9GaXJzdENoaWxkKCkgPT0gdHJ1ZSApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy5nZXRUZXh0VmFsdWUoKS5lcXVhbHMoICJ6YXAiICkgKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgdGVzdEdldE5hbWUgKCApCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbE9iamVjdCB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8YSB4PSd5Jz5lcmljPCEtLS0tPjw/bW9vPz48L2E+IiApOwotICAgICAgICBYbWxDdXJzb3IgYyA9IHgubmV3Q3Vyc29yKCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLmdldE5hbWUoKSA9PSBudWxsICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCAhYy50b05leHRUb2tlbigpLmlzTm9uZSgpICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLmdldE5hbWUoKS5nZXRMb2NhbFBhcnQoKS5lcXVhbHMoICJhIiApICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLmdldE5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKS5sZW5ndGgoKSA9PSAwICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCAhYy50b05leHRUb2tlbigpLmlzTm9uZSgpICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLmdldE5hbWUoKS5nZXRMb2NhbFBhcnQoKS5lcXVhbHMoICJ4IiApICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLmdldE5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKS5sZW5ndGgoKSA9PSAwICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCAhYy50b05leHRUb2tlbigpLmlzTm9uZSgpICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLmdldE5hbWUoKSA9PSBudWxsICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCAhYy50b05leHRUb2tlbigpLmlzTm9uZSgpICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLmdldE5hbWUoKSA9PSBudWxsICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCAhYy50b05leHRUb2tlbigpLmlzTm9uZSgpICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLmdldE5hbWUoKS5nZXRMb2NhbFBhcnQoKS5lcXVhbHMoICJtb28iICkgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMuZ2V0TmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpLmxlbmd0aCgpID09IDAgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoICFjLnRvTmV4dFRva2VuKCkuaXNOb25lKCkgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMuZ2V0TmFtZSgpID09IG51bGwgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoICFjLnRvTmV4dFRva2VuKCkuaXNOb25lKCkgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMuZ2V0TmFtZSgpID09IG51bGwgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMudG9OZXh0VG9rZW4oKS5pc05vbmUoKSApOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0Q2hhcnMgKCApCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbE9iamVjdCB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8Zm9vPmFiY2RlZmdoaWprbDwvZm9vPiIgKTsKLSAgICAgICAgWG1sQ3Vyc29yIGMgPSB4Lm5ld0N1cnNvcigpOwotICAgICAgICBjLnRvTmV4dFRva2VuKCk7Ci0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLSAgICAgICAgYy50b05leHRDaGFyKCAyICk7Ci0gICAgICAgIAotICAgICAgICBjaGFyW10gYnVmID0gbmV3IGNoYXJbIDMgXTsKLSAgICAgICAgaW50IG4gPSBjLmdldENoYXJzKCBidWYsIDAsIDQwMCApOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBuID09IDMgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGJ1ZlswXSA9PSAnYycgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGJ1ZlsxXSA9PSAnZCcgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGJ1ZlsyXSA9PSAnZScgKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgdGVzdE5hbWVzcGFjZVN1YnN0aXR1dGlvbiAoICkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgSGFzaE1hcCBzdWJzID0gbmV3IEhhc2hNYXAoKTsKLSAgICAgICAgc3Vicy5wdXQoICJmb28iLCAibW9vIiApOwotICAgICAgICBzdWJzLnB1dCggImEiLCAiYiIgKTsKLSAgICAgICAgCi0gICAgICAgIFhtbE9wdGlvbnMgb3B0aW9ucyA9IG5ldyBYbWxPcHRpb25zKCk7Ci0gICAgICAgIG9wdGlvbnMucHV0KCBYbWxPcHRpb25zLkxPQURfU1VCU1RJVFVURV9OQU1FU1BBQ0VTLCBzdWJzICk7Ci0gICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgWG1sT2JqZWN0IHggPQotICAgICAgICAgICAgWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoCi0gICAgICAgICAgICAgICAgIjxhIHhtbG5zPSdmb28nIHhtbG5zOmE9J2EnIGE6eD0neScvPiIsCi0gICAgICAgICAgICAgICAgb3B0aW9ucyApOwotCi0gICAgICAgIFhtbEN1cnNvciBjID0geC5uZXdDdXJzb3IoKTsKLQotICAgICAgICBjLnRvTmV4dFRva2VuKCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBjLmdldE5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKS5lcXVhbHMoICJtb28iICkgKTsKLSAgICAgICAgCi0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGMuZ2V0TmFtZSgpLmdldE5hbWVzcGFjZVVSSSgpLmVxdWFscyggIm1vbyIgKSApOwotICAgICAgICAKLSAgICAgICAgYy50b05leHRUb2tlbigpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKCAiYiIgKSApOwotICAgICAgICAKLSAgICAgICAgYy50b05leHRUb2tlbigpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCkuZXF1YWxzKCAiYiIgKSApOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0TmFtZXNwYWNlSW5zZXJ0aW9uICggKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBYbWxPYmplY3QgeCA9IFhtbE9iamVjdC5GYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0KLSAgICAgICAgWG1sQ3Vyc29yIGMgPSB4Lm5ld0N1cnNvcigpOwotCi0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLSAgICAgICAgYy5pbnNlcnRFbGVtZW50KCAiZm9vIiwgImh0dHA6Ly9wLmNvbSIgKTsKLSAgICAgICAgYy50b1ByZXZUb2tlbigpOwotICAgICAgICBjLmluc2VydE5hbWVzcGFjZSggInAiLCAiaHR0cDovL3AuY29tIiApOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKAotICAgICAgICAgICAgeC54bWxUZXh0KCkuZXF1YWxzKCAiPHA6Zm9vIHhtbG5zOnA9XCJodHRwOi8vcC5jb21cIi8+IiApICk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGRvdGVzdFBhcnNlciAoIFN0cmluZyB4bWwsIFN0cmluZyB4bWxSZXN1bHQgKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBYbWxPYmplY3QgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCB4bWwgKTsKLSAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHgueG1sVGV4dCgpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggeG1sUmVzdWx0LmVxdWFscyggcmVzdWx0ICkgKTsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIGRvdGVzdFBhcnNlckVycm9ycyAoIFN0cmluZyB4bWwgKQotICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCB4bWwgKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoIFRocm93YWJsZSB0ICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggZmFsc2UgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0TmlsICggKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBYbWxPYmplY3QgeCA9IG5vTmFtZXNwYWNlLkNhbkJlTmlsRG9jdW1lbnQuRmFjdG9yeS5wYXJzZSggIjxjYW5CZU5pbC8+IiApOwotICAgICAgICBYbWxDdXJzb3IgYyA9IHgubmV3Q3Vyc29yKCk7Ci0gICAgICAgIGMudG9GaXJzdENoaWxkKCk7Ci0gICAgICAgIFhtbE9iamVjdCBmYyA9IGMuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCAhIGZjLmlzTmlsKCkgKTsKLSAgICAgICAgZmMuc2V0TmlsKCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBmYy5pc05pbCgpICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB4LnhtbFRleHQoKS5lcXVhbHMoICI8Y2FuQmVOaWwgeHNpOm5pbD1cInRydWVcIiB4bWxuczp4c2k9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZVwiLz4iICkgKTsKLSAgICAgICAgYy50b05leHRUb2tlbigpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggYy5pc0F0dHIoKSApOwotICAgICAgICBjLnJlbW92ZVhtbCgpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggeC54bWxUZXh0KCkuZXF1YWxzKCAiPGNhbkJlTmlsLz4iICkgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoICEgZmMuaXNOaWwoKSApOwotICAgIH0KLSAgICAKLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0UGFyc2VyICggKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBkb3Rlc3RQYXJzZXJFcnJvcnMoICI8aGVlIHllZT0nZml2ZSc+PGhhdz42NjwvaGF3PjwvYW55PiIgKTsKLSAgICAgICAgZG90ZXN0UGFyc2VyRXJyb3JzKCAiPGZvbz48L21vbz4iICk7Ci0gICAgICAgIGRvdGVzdFBhcnNlckVycm9ycyggIjxhPjxmb28+PC9tb28+PC9hPiIgKTsKLSAgICAgICAgZG90ZXN0UGFyc2VyRXJyb3JzKCAiIiApOwotICAgICAgICBkb3Rlc3RQYXJzZXJFcnJvcnMoICIgICAgIiApOwotICAgICAgICAKLSAgICAgICAgZG90ZXN0UGFyc2VyRXJyb3JzKCAiaGFyIiApOwotICAgICAgICBkb3Rlc3RQYXJzZXJFcnJvcnMoICI8IS0tIGNvbW1lbnQgLS0+IiApOwotICAgICAgICBkb3Rlc3RQYXJzZXJFcnJvcnMoICI8P21vbz8+IiApOwotICAgICAgICBkb3Rlc3RQYXJzZXJFcnJvcnMoICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJ1dGYtOFwiPz4iICk7Ci0gICAgICAgIGRvdGVzdFBhcnNlckVycm9ycyggIjxhJC8+IiApOwotICAgICAgICBkb3Rlc3RQYXJzZXJFcnJvcnMoICI8Zm9vIGE9JzwnPjwvZm9vPiIgKTsKLSAgICAgICAgZG90ZXN0UGFyc2VyRXJyb3JzKCAiPGZvbyBhPjwvZm9vPiIgKTsKLSAgICAgICAgZG90ZXN0UGFyc2VyRXJyb3JzKCAiPGZvbz4iICk7Ci0gICAgICAgIGRvdGVzdFBhcnNlckVycm9ycyggIjwvZm9vPiIgKTsKLS8vIEZpeCB0aGUgcGFyc2VyIHRvIG1ha2UgdGhlc2Ugd29yawotLy8gICAgICAgIGRvdGVzdFBhcnNlckVycm9ycyggIjxmb28+PCEtLSAtLSAtLT48L2Zvbz4iICk7Ci0vLyAgICAgICAgZG90ZXN0UGFyc2VyRXJyb3JzKCAiPGZvbz48IS0tIC0tLT48L2Zvbz4iICk7Ci0KLSAgICAgICAgZG90ZXN0UGFyc2VyKCAiPGEgYj1cInhcblxueVwiLz4iLCAiPGEgYj1cInggIHlcIi8+IiApOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0U2F4UGFyc2VyICggKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBTdHJpbmcgeG1sID0gICI8YSB4PSd5Jz48IS0tLS0+eDxiLz48YyBwPSdxJz56PC9jPjwvYT4iOwotICAgICAgICAKLSAgICAgICAgU0FYUGFyc2VyRmFjdG9yeSBzcGYgPSBTQVhQYXJzZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAgIFNBWFBhcnNlciBzcCA9IHNwZi5uZXdTQVhQYXJzZXIoKTsKLSAgICAgICAgWE1MUmVhZGVyIHhyID0gc3AuZ2V0WE1MUmVhZGVyKCk7Ci0gICAgICAgIElucHV0U291cmNlIGlzID0gbmV3IElucHV0U291cmNlKCBuZXcgU3RyaW5nUmVhZGVyKCAgeG1sICkgKTsKLSAgICAgICAgWG1sU2F4SGFuZGxlciBzaCA9IFhtbE9iamVjdC5GYWN0b3J5Lm5ld1htbFNheEhhbmRsZXIoKTsKLSAgICAgICAgCi0gICAgICAgIHhyLnNldEZlYXR1cmUoCi0gICAgICAgICAgICAiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL25hbWVzcGFjZS1wcmVmaXhlcyIsCi0gICAgICAgICAgICB0cnVlICk7Ci0KLSAgICAgICAgeHIuc2V0RmVhdHVyZSgKLSAgICAgICAgICAgICJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvbmFtZXNwYWNlcyIsIHRydWUgKTsKLQotICAgICAgICB4ci5zZXRGZWF0dXJlKAotICAgICAgICAgICAgImh0dHA6Ly94bWwub3JnL3NheC9mZWF0dXJlcy92YWxpZGF0aW9uIiwgZmFsc2UgKTsKLQotICAgICAgICB4ci5zZXRDb250ZW50SGFuZGxlciggc2guZ2V0Q29udGVudEhhbmRsZXIoKSApOwotICAgICAgICAKLSAgICAgICAgeHIuc2V0UHJvcGVydHkoCi0gICAgICAgICAgICAiaHR0cDovL3htbC5vcmcvc2F4L3Byb3BlcnRpZXMvbGV4aWNhbC1oYW5kbGVyIiwKLSAgICAgICAgICAgIHNoLmdldExleGljYWxIYW5kbGVyKCkgKTsKLQotICAgICAgICB4ci5wYXJzZSggaXMgKTsKLQotICAgICAgICBYbWxPYmplY3QgeDEgPSBzaC5nZXRPYmplY3QoKTsKLQotICAgICAgICBYbWxPYmplY3QgeDIgPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSggeG1sICk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHgxLnhtbFRleHQoKS5lcXVhbHMoIHgyLnhtbFRleHQoKSApICk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL1N1YnN0R3JvdXBUZXN0cy5qYXZhIGIvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL1N1YnN0R3JvdXBUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzcwMzI5Li4wMDAwMDAwCi0tLSBhL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9TdWJzdEdyb3VwVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwNiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIGRydGNhc2VzOwotCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc3RvcmUuUm9vdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQmVhbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWE1MU3RyZWFtVmFsaWRhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERlY2ltYWw7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxTdHJpbmc7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxUb2tlbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE5vcm1hbGl6ZWRTdHJpbmc7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnZhbHVlcy5YbWxWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8vIFR5cGVzIGZyb20gc3Vic3Rncm91cC54c2QKLWltcG9ydCBvcmcub3BlbnVyaS5zZ3MuQURvY3VtZW50OwotaW1wb3J0IG9yZy5vcGVudXJpLnNncy5CRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLm9wZW51cmkuc2dzLkNEb2N1bWVudDsKLWltcG9ydCBvcmcub3BlbnVyaS5zZ3MuUm9vdERvY3VtZW50OwotCi1pbXBvcnQgb3JnLnczLngyMDAxLnhtbFNjaGVtYS5TY2hlbWFEb2N1bWVudDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLXB1YmxpYyBjbGFzcyBTdWJzdEdyb3VwVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZQotewotICAgIHB1YmxpYyBTdWJzdEdyb3VwVGVzdHMoU3RyaW5nIG5hbWUpIHsgc3VwZXIobmFtZSk7IH0KLSAgICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7IHJldHVybiBuZXcgVGVzdFN1aXRlKFN1YnN0R3JvdXBUZXN0cy5jbGFzcyk7IH0KLQotICAgIHB1YmxpYyB2b2lkIHRlc3QxKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFN0cmluZyB4bWwxID0gIjxyb290IHhtbG5zPSdodHRwOi8vb3BlbnVyaS5vcmcvc2dzJz4iICsKLSAgICAgICAgICAgICI8QT5cdGFcdGFcdDwvQT4iICsKLSAgICAgICAgICAgICI8Qj5cdGJcdGJcdDwvQj4iICsKLSAgICAgICAgICAgICI8Qz5cdGNcdGNcdDwvQz4iICsKLSAgICAgICAgICAgICI8L3Jvb3Q+IjsKLQotCi0gICAgICAgIFJvb3REb2N1bWVudCBkb2MxID0gUm9vdERvY3VtZW50LkZhY3RvcnkucGFyc2UoeG1sMSk7Ci0gICAgICAgIFJvb3REb2N1bWVudC5Sb290IHJvb3QgPSBkb2MxLmdldFJvb3QoKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShkb2MxLnZhbGlkYXRlKCkpOwotCi0gICAgICAgIFhtbFN0cmluZyBhID0gcm9vdC54Z2V0QUFycmF5KDApOwotICAgICAgICBhc3NlcnRUcnVlKGEuc2NoZW1hVHlwZSgpLmVxdWFscyhYbWxTdHJpbmcudHlwZSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIlx0YVx0YVx0IiwgYS5zdHJpbmdWYWx1ZSgpKTsKLQotICAgICAgICBYbWxTdHJpbmcgYiA9IHJvb3QueGdldEFBcnJheSgxKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShiLnNjaGVtYVR5cGUoKS5lcXVhbHMoWG1sTm9ybWFsaXplZFN0cmluZy50eXBlKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiIGIgYiAiLCBiLnN0cmluZ1ZhbHVlKCkpOwotCi0gICAgICAgIFhtbFN0cmluZyBjID0gcm9vdC54Z2V0QUFycmF5KDIpOwotICAgICAgICBhc3NlcnRUcnVlKGMuc2NoZW1hVHlwZSgpLmVxdWFscyhYbWxUb2tlbi50eXBlKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiYyBjIiwgYy5zdHJpbmdWYWx1ZSgpKTsKLQotICAgICAgICByb290Lmluc2VydEEoMiwgImQgZCIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImQgZCIsIHJvb3QuZ2V0QUFycmF5KDIpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDQsIHJvb3Quc2l6ZU9mQUFycmF5KCkpOwotICAgICAgICByb290LnJlbW92ZUEoMik7Ci0KLSAgICAgICAgcm9vdC5yZW1vdmVBKDEpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImMgYyIsIHJvb3QuZ2V0QUFycmF5KDEpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIHJvb3Quc2l6ZU9mQUFycmF5KCkpOwotCi0gICAgICAgIHJvb3QuYWRkQSgiZiBmIik7Ci0gICAgICAgIGFzc2VydEVxdWFscygzLCByb290LnNpemVPZkFBcnJheSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJmIGYiLCByb290LmdldEFBcnJheSgyKSk7Ci0KLSAgICAgICAgLy8gVGVzdCBhcnJheSBzZXR0ZXJzCi0KLSAgICAgICAgLy8gdGVzdCBtIDwgbiBjYXNlCi0gICAgICAgIFN0cmluZ1tdIHNtYWxsZXIgPSBuZXcgU3RyaW5nW117ICJ4IiwgInkiIH07Ci0gICAgICAgIHJvb3Quc2V0QUFycmF5KHNtYWxsZXIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMiwgcm9vdC5zaXplT2ZBQXJyYXkoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygieSIsIHJvb3QuZ2V0QUFycmF5KDEpKTsKLQotICAgICAgICAvLyB0ZXN0IG0gPiBuIGNhc2UKLSAgICAgICAgU3RyaW5nW10gbGFyZ2VyID0gbmV3IFN0cmluZ1tdIHsgInAiLCAicSIsICJyIiwgInMiIH07Ci0gICAgICAgIHJvb3Quc2V0QUFycmF5KGxhcmdlcik7Ci0gICAgICAgIGFzc2VydEVxdWFscyg0LCByb290LnNpemVPZkFBcnJheSgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJyIiwgcm9vdC5nZXRBQXJyYXkoMikpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHRlc3QyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFN0cmluZyB4bWwxID0gIjxBIHhtbG5zPSdodHRwOi8vb3BlbnVyaS5vcmcvc2dzJz5cdGFcdGFcdDwvQT4iOwotICAgICAgICBTdHJpbmcgeG1sMiA9ICI8QiB4bWxucz0naHR0cDovL29wZW51cmkub3JnL3Nncyc+XHRiXHRiXHQ8L0I+IjsKLSAgICAgICAgU3RyaW5nIHhtbDMgPSAiPEMgeG1sbnM9J2h0dHA6Ly9vcGVudXJpLm9yZy9zZ3MnPlx0Y1x0Y1x0PC9DPiI7Ci0KLSAgICAgICAgQURvY3VtZW50IGQxID0gQURvY3VtZW50LkZhY3RvcnkucGFyc2UoeG1sMSk7Ci0gICAgICAgIFhtbFN0cmluZyBhID0gZDEueGdldEEoKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShhLnNjaGVtYVR5cGUoKS5lcXVhbHMoWG1sU3RyaW5nLnR5cGUpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJcdGFcdGFcdCIsIGEuc3RyaW5nVmFsdWUoKSk7Ci0KLSAgICAgICAgQURvY3VtZW50IGQyID0gQURvY3VtZW50LkZhY3RvcnkucGFyc2UoeG1sMik7Ci0gICAgICAgIFhtbFN0cmluZyBiID0gZDIueGdldEEoKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShkMi5zY2hlbWFUeXBlKCkuZXF1YWxzKEJEb2N1bWVudC50eXBlKSk7Ci0gICAgICAgIGFzc2VydFRydWUoYi5zY2hlbWFUeXBlKCkuZXF1YWxzKFhtbE5vcm1hbGl6ZWRTdHJpbmcudHlwZSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIiBiIGIgIiwgYi5zdHJpbmdWYWx1ZSgpKTsKLQotICAgICAgICBBRG9jdW1lbnQgZDMgPSBBRG9jdW1lbnQuRmFjdG9yeS5wYXJzZSh4bWwzKTsKLSAgICAgICAgWG1sU3RyaW5nIGMgPSBkMy54Z2V0QSgpOwotICAgICAgICBhc3NlcnRUcnVlKGQzLnNjaGVtYVR5cGUoKS5lcXVhbHMoQ0RvY3VtZW50LnR5cGUpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShjLnNjaGVtYVR5cGUoKS5lcXVhbHMoWG1sVG9rZW4udHlwZSkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImMgYyIsIGMuc3RyaW5nVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBpbnZhbGlkU2NoZW1hcyA9IAotICAgIHsKLSAgICAgICAgIjx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0naHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEnPiAiICsKLSAgICAgICAgIiAgPHhzZDplbGVtZW50IG5hbWU9J0EnIHR5cGU9J3hzZDpzdHJpbmcnLz4gIiArCi0gICAgICAgICIgIDx4c2Q6ZWxlbWVudCBuYW1lPSdCJyB0eXBlPSd4c2Q6aW50JyBzdWJzdGl0dXRpb25Hcm91cD0nQScvPiAiICsKLSAgICAgICAgIjwveHNkOnNjaGVtYT4iLAotICAgICAgICAiPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSc+ICIgKwotICAgICAgICAiICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9J2Zvbyc+ICIgKwotICAgICAgICAiICAgIDx4c2Q6c2VxdWVuY2U+ICIgKwotICAgICAgICAiICAgICAgPHhzZDplbGVtZW50IG5hbWU9J2Jhcicgc3Vic3RpdHV0aW9uR3JvdXA9J0EnLz4iICsKLSAgICAgICAgIiAgICA8L3hzZDpzZXF1ZW5jZT4gIiArCi0gICAgICAgICIgIDwveHNkOmNvbXBsZXhUeXBlPiIgKwotICAgICAgICAiPC94c2Q6c2NoZW1hPiIsCi0gICAgICAgICI8eHNkOnNjaGVtYSB4bWxuczp4c2Q9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJz4gIiArCi0gICAgICAgICIgIDx4c2Q6ZWxlbWVudCBuYW1lPSdBJyB0eXBlPSd4c2Q6c3RyaW5nJyBmaW5hbD0nI2FsbCcvPiAiICsKLSAgICAgICAgIiAgPHhzZDplbGVtZW50IG5hbWU9J0InIHR5cGU9J3hzZDpzdHJpbmcnIHN1YnN0aXR1dGlvbkdyb3VwPSdBJy8+ICIgKwotICAgICAgICAiPC94c2Q6c2NoZW1hPiIsCi0gICAgICAgICI8eHNkOnNjaGVtYSB4bWxuczp4c2Q9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJz4gIiArCi0gICAgICAgICIgIDx4c2Q6ZWxlbWVudCBuYW1lPSdBJyB0eXBlPSd4c2Q6c3RyaW5nJyBmaW5hbD0ncmVzdHJpY3Rpb24nLz4gIiArCi0gICAgICAgICIgIDx4c2Q6ZWxlbWVudCBuYW1lPSdCJyB0eXBlPSd4c2Q6dG9rZW4nIHN1YnN0aXR1dGlvbkdyb3VwPSdBJy8+ICIgKwotICAgICAgICAiPC94c2Q6c2NoZW1hPiIsCi0gICAgICAgICI8eHNkOnNjaGVtYSB4bWxuczp4c2Q9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJz4gIiArCi0gICAgICAgICIgIDx4c2Q6ZWxlbWVudCBuYW1lPSdBJyB0eXBlPSd4c2Q6c3RyaW5nJyBzdWJzdGl0dXRpb25Hcm91cD0nQicvPiAiICsKLSAgICAgICAgIiAgPHhzZDplbGVtZW50IG5hbWU9J0InIHR5cGU9J3hzZDpzdHJpbmcnIHN1YnN0aXR1dGlvbkdyb3VwPSdDJy8+ICIgKwotICAgICAgICAiICA8eHNkOmVsZW1lbnQgbmFtZT0nQycgdHlwZT0neHNkOnN0cmluZycgc3Vic3RpdHV0aW9uR3JvdXA9J0QnLz4gIiArCi0gICAgICAgICIgIDx4c2Q6ZWxlbWVudCBuYW1lPSdEJyB0eXBlPSd4c2Q6c3RyaW5nJyBzdWJzdGl0dXRpb25Hcm91cD0nRScvPiAiICsKLSAgICAgICAgIiAgPHhzZDplbGVtZW50IG5hbWU9J0UnIHR5cGU9J3hzZDpzdHJpbmcnIHN1YnN0aXR1dGlvbkdyb3VwPSdBJy8+ICIgKwotICAgICAgICAiPC94c2Q6c2NoZW1hPiIsCi0gICAgICAgICI8eHNkOnNjaGVtYSB4bWxuczp4c2Q9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJz4gIiArCi0gICAgICAgICIgIDx4c2Q6ZWxlbWVudCBuYW1lPSdBJyB0eXBlPSd4c2Q6dG9rZW4nIHN1YnN0aXR1dGlvbkdyb3VwPSdCJy8+ICIgKwotICAgICAgICAiPC94c2Q6c2NoZW1hPiIsCi0gICAgICAgICI8eHNkOnNjaGVtYSB4bWxuczp4c2Q9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJz4gIiArCi0gICAgICAgICIgIDx4c2Q6ZWxlbWVudCBuYW1lPSdBJyB0eXBlPSd4c2Q6c3RyaW5nJy8+ICIgKwotICAgICAgICAiICA8eHNkOmVsZW1lbnQgbmFtZT0nQicgdHlwZT0neHNkOnN0cmluZycgc3Vic3RpdHV0aW9uR3JvdXA9J0EnLz4gIiArCi0gICAgICAgICIgIDx4c2Q6ZWxlbWVudCBuYW1lPSdDb21wbGV4Jz4gIiArCi0gICAgICAgICIgICAgPHhzZDpjb21wbGV4VHlwZT4gIiArCi0gICAgICAgICIgICAgICA8eHNkOmNob2ljZT4gIiArCi0gICAgICAgICIgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9J0EnLz4iICsKLSAgICAgICAgIiAgICAgICAgPHhzZDplbGVtZW50IHJlZj0nQicvPiIgKwotICAgICAgICAiICAgICAgPC94c2Q6Y2hvaWNlPiAiICsKLSAgICAgICAgIiAgICA8L3hzZDpjb21wbGV4VHlwZT4gIiArCi0gICAgICAgICIgIDwveHNkOmVsZW1lbnQ+ICIgKwotICAgICAgICAiPC94c2Q6c2NoZW1hPiIsCi0gICAgfTsKLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nW10gdmFsaWRTY2hlbWFzID0gCi0gICAgewotICAgICAgICAiPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSc+IiArCi0gICAgICAgICIgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0nYmFzZSc+IiArCi0gICAgICAgICIgICAgPHhzZDphbGw+IiArCi0gICAgICAgICIgICAgICA8eHNkOmVsZW1lbnQgcmVmPSdoZWFkJy8+IiArCi0gICAgICAgICIgICAgPC94c2Q6YWxsPiIgKwotICAgICAgICAiICA8L3hzZDpjb21wbGV4VHlwZT4iICsKLSAgICAgICAgIiAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSdyZXN0cic+IiArCi0gICAgICAgICIgICAgPHhzZDpjb21wbGV4Q29udGVudD4iICsKLSAgICAgICAgIiAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9J2Jhc2UnPiIgKwotICAgICAgICAiICAgICAgICAgPHhzZDphbGw+IiArCi0gICAgICAgICIgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9J3RhaWwnLz4iICsKLSAgICAgICAgIiAgICAgICAgIDwveHNkOmFsbD4iICsKLSAgICAgICAgIiAgICAgICA8L3hzZDpyZXN0cmljdGlvbj4iICsKLSAgICAgICAgIiAgICA8L3hzZDpjb21wbGV4Q29udGVudD4iICsKLSAgICAgICAgIiAgPC94c2Q6Y29tcGxleFR5cGU+IiArCi0gICAgICAgICIgIDx4c2Q6ZWxlbWVudCBuYW1lPSdoZWFkJyB0eXBlPSd4c2Q6c3RyaW5nJy8+IiArCi0gICAgICAgICIgIDx4c2Q6ZWxlbWVudCBuYW1lPSd0YWlsJyBzdWJzdGl0dXRpb25Hcm91cD0naGVhZCcvPiIgKwotICAgICAgICAiPC94c2Q6c2NoZW1hPiIsCi0gICAgfTsKLSAgICAgICAgCi0gICAgcHVibGljIHZvaWQgdGVzdDMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgU2NoZW1hRG9jdW1lbnRbXSBzY2hlbWFzID0gbmV3IFNjaGVtYURvY3VtZW50W2ludmFsaWRTY2hlbWFzLmxlbmd0aF07Ci0KLSAgICAgICAgLy8gUGFyc2UgdGhlIGludmFsaWQgc2NoZW1hIGZpbGVzCi0gICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IGludmFsaWRTY2hlbWFzLmxlbmd0aCA7IGkrKykKLSAgICAgICAgICAgIHNjaGVtYXNbaV0gPSBTY2hlbWFEb2N1bWVudC5GYWN0b3J5LnBhcnNlKGludmFsaWRTY2hlbWFzW2ldKTsKLQotICAgICAgICAvLyBOb3cgY29tcGlsZSB0aGUgaW52YWxpZCBzY2hlbWFzLCB0ZXN0IHRoYXQgdGhleSBmYWlsCi0gICAgICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IHNjaGVtYXMubGVuZ3RoIDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIFhtbEJlYW5zLmxvYWRYc2QobmV3IFhtbE9iamVjdFtdIHtzY2hlbWFzW2ldfSk7Ci0gICAgICAgICAgICAgICAgZmFpbCgiU2NoZW1hIHNob3VsZCBoYXZlIGZhaWxlZCB0byBjb21waWxlOlxuIiArIGludmFsaWRTY2hlbWFzW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChYbWxFeGNlcHRpb24gc3VjY2VzcykgeyAvKiBTeXN0ZW0ub3V0LnByaW50bG4oc3VjY2Vzcyk7ICovIH0KLSAgICAgICAgfQotCi0KLSAgICAgICAgLy8gUGFyc2UgdGhlIHZhbGlkIHNjaGVtYSBmaWxlcwotICAgICAgICBzY2hlbWFzID0gbmV3IFNjaGVtYURvY3VtZW50W3ZhbGlkU2NoZW1hcy5sZW5ndGhdOwotICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCB2YWxpZFNjaGVtYXMubGVuZ3RoIDsgaSsrKQotICAgICAgICAgICAgc2NoZW1hc1tpXSA9IFNjaGVtYURvY3VtZW50LkZhY3RvcnkucGFyc2UodmFsaWRTY2hlbWFzW2ldKTsKLQotICAgICAgICAvLyBOb3cgY29tcGlsZSB0aGUgdmFsaWQgc2NoZW1hcywgdGVzdCB0aGF0IHRoZXkgc3VjY2VlZAotICAgICAgICBmb3IgKGludCBpID0gMCA7IGkgPCBzY2hlbWFzLmxlbmd0aCA7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBYbWxCZWFucy5sb2FkWHNkKG5ldyBYbWxPYmplY3RbXSB7c2NoZW1hc1tpXX0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFhtbEV4Y2VwdGlvbiBmYWlsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgZmFpbCgiRmFpbGVkIHRvIGNvbXBpbGUgc2NoZW1hOiAiICsgc2NoZW1hc1tpXSArICIgd2l0aCBlcnJvcjogIiArIGZhaWwpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSBpbnZhbGlkRG9jcyA9IAotICAgIHsKLSAgICAgICAgIjxhYnN0cmFjdFRlc3QgeG1sbnM9J2h0dHA6Ly9vcGVudXJpLm9yZy9zZ3MnPiIgKwotICAgICAgICAiICAgIDxhYnN0cmFjdD5jb250ZW50PC9hYnN0cmFjdD4gIiArCi0gICAgICAgICI8L2Fic3RyYWN0VGVzdD4gIiwKLSAgICB9OwotCi0gICAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSB2YWxpZERvY3MgPSAKLSAgICB7Ci0gICAgICAgICI8YWJzdHJhY3RUZXN0IHhtbG5zPSdodHRwOi8vb3BlbnVyaS5vcmcvc2dzJz4iICsKLSAgICAgICAgIiAgICA8Y29uY3JldGU+Y29udGVudDwvY29uY3JldGU+ICIgKwotICAgICAgICAiPC9hYnN0cmFjdFRlc3Q+ICIsCi0gICAgfTsKLQotICAgIHB1YmxpYyB2b2lkIHRlc3Q0KCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgICB7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgaW52YWxpZERvY3MubGVuZ3RoIDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxPYmplY3QgeG8gPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZShpbnZhbGlkRG9jc1tpXSk7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKCJEb2Mgd2FzIHZhbGlkLiBTaG91bGQgYmUgaW52YWxpZDogIiArIGludmFsaWREb2NzW2ldLCAKLSAgICAgICAgICAgICAgICAhIHhvLnZhbGlkYXRlKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgdmFsaWREb2NzLmxlbmd0aCA7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgWG1sT2JqZWN0IHhvID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UodmFsaWREb2NzW2ldKTsKLSAgICAgICAgICAgIGFzc2VydFRydWUoIkRvYyB3YXMgaW52YWxpZC4gU2hvdWxkIGJlIHZhbGlkOiAiICsgdmFsaWREb2NzW2ldLAotICAgICAgICAgICAgICAgIHhvLnZhbGlkYXRlKCkpOwotICAgICAgICB9Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvVGVzdEVudi5qYXZhIGIvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL1Rlc3RFbnYuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg1ODQwMC4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvVGVzdEVudi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2UgZHJ0Y2FzZXM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFRlc3RFbnYKLXsKLSAgICBwcml2YXRlIHN0YXRpYyBGaWxlIGZ3cm9vdCA9IGdldFJvb3RGaWxlKCk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgRmlsZSBjYXNlcm9vdCA9IG5ldyBGaWxlKGZ3cm9vdCwgInRlc3QvY2FzZXMiKTsKLSAgICBwcml2YXRlIHN0YXRpYyBGaWxlIG91dHB1dHJvb3QgPSBuZXcgRmlsZShmd3Jvb3QsICJidWlsZC90ZXN0L291dHB1dCIpOwotCi0gICAgcHVibGljIHN0YXRpYyBGaWxlIGdldFJvb3RGaWxlKCkgdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZSggU3lzdGVtLmdldFByb3BlcnR5KCAieGJlYW4ucm9vdGRpciIgKSApLmdldENhbm9uaWNhbEZpbGUoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCggSU9FeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oZS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgRmlsZSB4YmVhbkNhc2UoU3RyaW5nIHN0cikKLSAgICB7Ci0gICAgICAgIHJldHVybiAobmV3IEZpbGUoY2FzZXJvb3QsIHN0cikpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgRmlsZSB4YmVhbk91dHB1dChTdHJpbmcgc3RyKQotICAgIHsKLSAgICAgICAgRmlsZSByZXN1bHQgPSAobmV3IEZpbGUob3V0cHV0cm9vdCwgc3RyKSk7Ci0gICAgICAgIEZpbGUgcGFyZW50ZGlyID0gcmVzdWx0LmdldFBhcmVudEZpbGUoKTsKLSAgICAgICAgcGFyZW50ZGlyLm1rZGlycygpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBkZWx0cmVlKEZpbGUgZGlyKQotICAgIHsKLSAgICAgICAgaWYgKGRpci5leGlzdHMoKSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGRpci5pc0RpcmVjdG9yeSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN0cmluZ1tdIGxpc3QgPSBkaXIubGlzdCgpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgZGVsdHJlZShuZXcgRmlsZShkaXIsIGxpc3RbaV0pKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghZGlyLmRlbGV0ZSgpKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNvdWxkIG5vdCBkZWxldGUgIiArIGRpcik7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvVGVzdFJ1blV0aWwuamF2YSBiL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9UZXN0UnVuVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmFkZjhjLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9UZXN0UnVuVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2UgZHJ0Y2FzZXM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5uZXQuVVJMQ2xhc3NMb2FkZXI7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFRlc3RSdW5VdGlsCi17Ci0gICAgLyoqCi0gICAgICogUnVucyBtZXRob2QgdGhhdCBtdXN0IGJlIGRlY2xhcmVkICJzdGF0aWMgdm9pZCB0ZXN0KCkiIG9uIHRoZSBnaXZlbgotICAgICAqIGNsYXNzLCB3aXRoIHRoZSBnaXZlbiBhZGRpdGlvbmFsIGphcnMgb3IgZGlyZWN0b3JpZXMgb24gdGhlIGNsYXNzcGF0aC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgcnVuKFN0cmluZyBjbGFzc25hbWUsIEZpbGVbXSBjbGFzc3BhdGgpIHRocm93cyBUaHJvd2FibGUKLSAgICB7Ci0gICAgICAgIC8vIFN5c3RlbS5lcnIucHJpbnRsbigiUnVubmluZyAiICsgY2xhc3NuYW1lICsgIiB3aXRoIGNsYXNzcGF0aDoiKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbGFzc3BhdGgubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFN5c3RlbS5lcnIucHJpbnRsbihjbGFzc3BhdGhbaV0pOwotICAgICAgICAgICAgaWYgKCFjbGFzc3BhdGhbaV0uZXhpc3RzKCkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ2xhc3NwYXRoIGNvbXBvbmVudCAiICsgY2xhc3NwYXRoICsgIiBjYW5ub3QgYmUgZm91bmQhIik7Ci0gICAgICAgIH0KLQotICAgICAgICBVUkxbXSBleHRyYWNwID0gbmV3IFVSTFtjbGFzc3BhdGgubGVuZ3RoXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbGFzc3BhdGgubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGV4dHJhY3BbaV0gPSBjbGFzc3BhdGhbaV0udG9VUkwoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJNYWxmb3JtZWQgY2xhc3NwYXRoIGZpbGVuYW1lIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBDbGFzc0xvYWRlciBjdXJjbCA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCk7Ci0KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENsYXNzTG9hZGVyIGNoaWxkY2wgPSBuZXcgVVJMQ2xhc3NMb2FkZXIoZXh0cmFjcCk7Ci0gICAgICAgICAgICBDbGFzcyBqYXZhQ2xhc3MgPSBjaGlsZGNsLmxvYWRDbGFzcyhjbGFzc25hbWUpOwotICAgICAgICAgICAgQ2xhc3MgdGVzdENsYXNzID0gY2hpbGRjbC5sb2FkQ2xhc3MoIm9yZy5vcGVudXJpLm15dGVzdC5DdXN0b21lckRvY3VtZW50Iik7Ci0gICAgICAgICAgICBpZiAodGVzdENsYXNzID09IG51bGwpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotICAgICAgICAgICAgTWV0aG9kIG1ldGggPSBqYXZhQ2xhc3MuZ2V0TWV0aG9kKCJ0ZXN0IiwgbmV3IENsYXNzWzBdKTsgLy8gc2hvdWxkIGJlIHN0YXRpYwotICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoY2hpbGRjbCk7Ci0gICAgICAgICAgICBtZXRoLmludm9rZShudWxsLCBuZXcgT2JqZWN0WzBdKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjbGFzcyBub3QgZm91bmQiKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIm5vIHRlc3QoKSBtZXRob2QgZm91bmQiKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjb3VsZCBub3QgaW52b2tlIHN0YXRpYyBwdWJsaWMgdGVzdCBtZXRob2QiKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJvdyBlLmdldENhdXNlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWxseQotICAgICAgICB7Ci0gICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLnNldENvbnRleHRDbGFzc0xvYWRlcihjdXJjbCk7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvVGhyZWFkaW5nVGVzdC5qYXZhIGIvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL1RocmVhZGluZ1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM4Nzg0Yy4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvVGhyZWFkaW5nVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM3ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2UgZHJ0Y2FzZXM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJlYW5zOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9uczsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLXB1YmxpYyBjbGFzcyBUaHJlYWRpbmdUZXN0IGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgICBwdWJsaWMgVGhyZWFkaW5nVGVzdChTdHJpbmcgbmFtZSkgeyBzdXBlcihuYW1lKTsgfQotICAgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsgcmV0dXJuIG5ldyBUZXN0U3VpdGUoVGhyZWFkaW5nVGVzdC5jbGFzcyk7IH0KLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFRIUkVBRF9DT1VOVCA9IDQ7Ci0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSVRFUkFUSU9OX0NPVU5UID0gMTsKLQotICAgIHB1YmxpYyBjbGFzcyBDb21waWxhdGlvblRocmVhZCBleHRlbmRzIFRocmVhZAotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBUaHJvd2FibGUgX3Rocm93YWJsZTsKLSAgICAgICAgcHJpdmF0ZSBib29sZWFuIF9yZXN1bHQ7Ci0KLSAgICAgICAgcHVibGljIFRocm93YWJsZSBnZXRFeGNlcHRpb24oKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gX3Rocm93YWJsZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBib29sZWFuIGdldFJlc3VsdCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBfcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkKLSAgICAgICAgewotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJVEVSQVRJT05fQ09VTlQ7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFNjaGVtYVR5cGVMb2FkZXIgbG9hZGVyID0gWG1sQmVhbnMubG9hZFhzZChuZXcgWG1sT2JqZWN0W10geyBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZShUZXN0RW52LnhiZWFuQ2FzZSgic2NoZW1hL1htbFNpZ25hdHVyZS94bWxkc2lnLWNvcmUtc2NoZW1hLnhzZCIpKSB9KTsKLSAgICAgICAgICAgICAgICAgICAgWG1sT2JqZWN0IHJlc3VsdCA9IGxvYWRlci5wYXJzZShUZXN0RW52LnhiZWFuQ2FzZSgic2NoZW1hL1htbFNpZ25hdHVyZS9zaWduYXR1cmUtZXhhbXBsZS54bWwiKSwgbnVsbCwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMobG9hZGVyLmZpbmREb2N1bWVudFR5cGUobmV3IFFOYW1lKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIiwgIlNpZ25hdHVyZSIpKSwgcmVzdWx0LnNjaGVtYVR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIF9yZXN1bHQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFRocm93YWJsZSB0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF90aHJvd2FibGUgPSB0OwotICAgICAgICAgICAgICAgIHQucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0VGhyZWFkZWRDb21waWxhdGlvbigpIHRocm93cyBUaHJvd2FibGUKLSAgICB7Ci0gICAgICAgIENvbXBpbGF0aW9uVGhyZWFkW10gdGhyZWFkcyA9IG5ldyBDb21waWxhdGlvblRocmVhZFtUSFJFQURfQ09VTlRdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRocmVhZHMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRocmVhZHNbaV0gPSBuZXcgQ29tcGlsYXRpb25UaHJlYWQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGhyZWFkcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGhyZWFkc1tpXS5zdGFydCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aHJlYWRzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0aHJlYWRzW2ldLmpvaW4oKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGhyZWFkcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgQXNzZXJ0LmFzc2VydE51bGwodGhyZWFkc1tpXS5nZXRFeGNlcHRpb24oKSk7Ci0gICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSgiVGhyZWFkICIgKyBpICsgIiBkaWRuJ3Qgc3VjY2VlZCIsIHRocmVhZHNbaV0uZ2V0UmVzdWx0KCkpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL1R5cGVkU2V0dGVyc1Rlc3RzLmphdmEgYi92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvVHlwZWRTZXR0ZXJzVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjYyNTY5YS4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L3NyYy9kcnQvZHJ0Y2FzZXMvVHlwZWRTZXR0ZXJzVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIGRydGNhc2VzOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IuVG9rZW5UeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yLlhtbEJvb2ttYXJrOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sU2F4SGFuZGxlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbExpbmVOdW1iZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxCZWFuczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxJbnQ7Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotaW1wb3J0IGphdmEubGFuZy5Db21wYXJhYmxlOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlNBWFBhcnNlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXJGYWN0b3J5OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLSAgIAotcHVibGljIGNsYXNzIFR5cGVkU2V0dGVyc1Rlc3RzIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgICBwdWJsaWMgVHlwZWRTZXR0ZXJzVGVzdHMoU3RyaW5nIG5hbWUpIHsgc3VwZXIobmFtZSk7IH0KLSAgICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7IHJldHVybiBuZXcgVGVzdFN1aXRlKFR5cGVkU2V0dGVyc1Rlc3RzLmNsYXNzKTsgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIHNjaGVtYU5zID0ieG1sbnM6eHNpPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2VcIiI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIGluc3RhbmNlTnMgPSAieG1sbnM6eHM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYVwiIjsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBmbXQgKCBTdHJpbmcgcyApCi0gICAgewotICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLSAgICAgICAgZm9yICggaW50IGkgPSAwIDsgaSA8IHMubGVuZ3RoKCkgOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyIGNoID0gcy5jaGFyQXQoIGkgKTsKLQotICAgICAgICAgICAgaWYgKGNoICE9ICckJykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIGNoICk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNoID0gcy5jaGFyQXQoICsraSApOwotCi0gICAgICAgICAgICBTdHJpbmcgaWQgPSAiIjsKLQotICAgICAgICAgICAgd2hpbGUgKCAoY2ggPj0gJ2EnICYmIGNoIDw9ICd6JykgfHwgKGNoID49ICdBJyAmJiBjaCA8PSAnWicpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlkID0gaWQgKyBjaDsKLSAgICAgICAgICAgICAgICBjaCA9IHMuY2hhckF0KCArK2kgKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU3RyaW5nIGFyZyA9ICIiOwotCi0gICAgICAgICAgICBpZiAoY2ggPT0gJygnKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNoID0gcy5jaGFyQXQoICsraSApOwotCi0gICAgICAgICAgICAgICAgd2hpbGUgKCBjaCAhPSAnKScgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXJnICs9IGNoOwotICAgICAgICAgICAgICAgICAgICBjaCA9IHMuY2hhckF0KCArK2kgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaS0tOwotCi0gICAgICAgICAgICBpZiAoaWQuZXF1YWxzKCAic2NoZW1hIiApKQotICAgICAgICAgICAgICAgIHNiLmFwcGVuZCggc2NoZW1hTnMgKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlkLmVxdWFscyggInhzaSIgKSkKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoIGluc3RhbmNlTnMgKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlkLmVxdWFscyggInR5cGUiICkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGFyZy5sZW5ndGgoKSA+IDAgKTsKLSAgICAgICAgICAgICAgICBzYi5hcHBlbmQoICJ4c2k6dHlwZT1cIiIgKyBhcmcgKyAiXCIiICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGZhbHNlICk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgbnNlcyA9IHNjaGVtYU5zICsgIiAiICsgaW5zdGFuY2VOczsKLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0SmF2YU5vVHlwZVNpbmdsZXRvbkVsZW1lbnQgKCApCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbE9iamVjdCB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8eHl6enkvPiIgKTsKLSAgICAgICAgWG1sT2JqZWN0IHgyID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8YnViYmE+bW9vPC9idWJiYT4iICk7Ci0gICAgICAgIFhtbEN1cnNvciBjID0geC5uZXdDdXJzb3IoKTsKLSAgICAgICAgWG1sQ3Vyc29yIGMyID0geDIubmV3Q3Vyc29yKCk7Ci0KLSAgICAgICAgYy50b05leHRUb2tlbigpOwotICAgICAgICBjMi50b05leHRUb2tlbigpOwotCi0gICAgICAgIGMuZ2V0T2JqZWN0KCkuc2V0KCBjMi5nZXRPYmplY3QoKSApOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB4LnhtbFRleHQoKS5lcXVhbHMoICI8eHl6enk+bW9vPC94eXp6eT4iICkgKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgdGVzdEphdmFOb1R5cGVTaW5nbGV0b25BdHRyaWJ1dGUgKCApCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbE9iamVjdCB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8eHl6enkgYT0nJy8+IiApOwotICAgICAgICBYbWxPYmplY3QgeDIgPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSggIjxidWJiYSBiPSdtb28nLz4iICk7Ci0gICAgICAgIFhtbEN1cnNvciBjID0geC5uZXdDdXJzb3IoKTsKLSAgICAgICAgWG1sQ3Vyc29yIGMyID0geDIubmV3Q3Vyc29yKCk7Ci0KLSAgICAgICAgYy50b05leHRUb2tlbigpOwotICAgICAgICBjLnRvTmV4dFRva2VuKCk7Ci0gICAgICAgIGMyLnRvTmV4dFRva2VuKCk7Ci0gICAgICAgIGMyLnRvTmV4dFRva2VuKCk7Ci0KLSAgICAgICAgYy5nZXRPYmplY3QoKS5zZXQoIGMyLmdldE9iamVjdCgpICk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHgueG1sVGV4dCgpLmVxdWFscyggIjx4eXp6eSBhPVwibW9vXCIvPiIgKSApOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0SmF2YU5vVHlwZVNpbmdsZXRvbkVsZW1lbnRXaXRoWHNpVHlwZSAoICkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgWG1sT2JqZWN0IHggPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSggIjx4eXp6eS8+IiwgbmV3IFhtbE9wdGlvbnMoKS5zZXREb2N1bWVudFR5cGUoIFhtbE9iamVjdC50eXBlICkgKTsKLSAgICAgICAgWG1sT2JqZWN0IHgyID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoIGZtdCggIjxidWJiYSAkdHlwZSh4czppbnQpICR4c2kgJHNjaGVtYT42OTwvYnViYmE+IiApICk7Ci0gICAgICAgIFhtbEN1cnNvciBjID0geC5uZXdDdXJzb3IoKTsKLSAgICAgICAgWG1sQ3Vyc29yIGMyID0geDIubmV3Q3Vyc29yKCk7Ci0KLSAgICAgICAgYy50b05leHRUb2tlbigpOwotICAgICAgICBjMi50b05leHRUb2tlbigpOwotCi0gICAgICAgIFhtbE9iamVjdCB4eXp6eSA9IGMuZ2V0T2JqZWN0KCk7Ci0gICAgICAgIFhtbE9iamVjdCBidWJiYSA9IGMyLmdldE9iamVjdCgpOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBidWJiYS5zY2hlbWFUeXBlKCkgPT0gWG1sSW50LnR5cGUgKTsKLQotLy8gICAgICAgIHh5enp5LnNldCggYnViYmEgKTsKLQotLy8gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB4LnhtbFRleHQoKS5lcXVhbHMoIGZtdCggIjx4eXp6eSAkdHlwZSh4czppbnQpICR4c2kgJHNjaGVtYT5tb288L3h5enp5PiIgKSApICk7Ci0gICAgfQotICAgIAotfQpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL1ZhbGlkYXRpb25UZXN0cy5qYXZhIGIvdjIvdGVzdC9zcmMvZHJ0L2RydGNhc2VzL1ZhbGlkYXRpb25UZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTU5OGE1Li4wMDAwMDAwCi0tLSBhL3YyL3Rlc3Qvc3JjL2RydC9kcnRjYXNlcy9WYWxpZGF0aW9uVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MTIgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBkcnRjYXNlczsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnN0b3JlLlJvb3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJlYW5zOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9uczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhNTFN0cmVhbVZhbGlkYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxEZWNpbWFsOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC52YWx1ZXMuWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLXB1YmxpYyBjbGFzcyBWYWxpZGF0aW9uVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZQotewotICAgIHB1YmxpYyBWYWxpZGF0aW9uVGVzdHMoU3RyaW5nIG5hbWUpIHsgc3VwZXIobmFtZSk7IH0KLSAgICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7IHJldHVybiBuZXcgVGVzdFN1aXRlKFZhbGlkYXRpb25UZXN0cy5jbGFzcyk7IH0KLQotICAgIHN0YXRpYyBTdHJpbmdbXSBfYXJnczsKLSAgICBzdGF0aWMgU3RyaW5nIF90ZXN0OwotCi0gICAgcHVibGljIHN0YXRpYyBGaWxlIGdldENhc2VGaWxlKFN0cmluZyB0aGVDYXNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFRlc3RFbnYueGJlYW5DYXNlKCJzdG9yZS8iICsgdGhlQ2FzZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFhtbEN1cnNvciBsb2FkQ2FzZShTdHJpbmcgdGhlQ2FzZSkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSgKLSAgICAgICAgICAgICAgICBnZXRDYXNlRmlsZSggdGhlQ2FzZSApICkubmV3Q3Vyc29yKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFNjaGVtYVR5cGVMb2FkZXIgbWFrZVNjaGVtYVR5cGVMb2FkZXIgKCBTdHJpbmdbXSBzY2hlbWFzICkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgWG1sT2JqZWN0W10gc2NoZW1hRG9jcyA9IG5ldyBYbWxPYmplY3QgWyBzY2hlbWFzLmxlbmd0aCBdOwotCi0gICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCBzY2hlbWFzLmxlbmd0aCA7IGkrKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNjaGVtYURvY3NbIGkgXSA9Ci0gICAgICAgICAgICAgICAgWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoCi0gICAgICAgICAgICAgICAgICAgIHNjaGVtYXNbIGkgXSApOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFhtbEJlYW5zLmxvYWRYc2QoIHNjaGVtYURvY3MgKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIFNjaGVtYVR5cGVMb2FkZXIgbWFrZVNjaGVtYVR5cGVMb2FkZXIgKCBGaWxlW10gc2NoZW1hcyApCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbE9iamVjdFtdIHNjaGVtYURvY3MgPSBuZXcgWG1sT2JqZWN0IFsgc2NoZW1hcy5sZW5ndGggXTsKLQotICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgc2NoZW1hcy5sZW5ndGggOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBzY2hlbWFEb2NzWyBpIF0gPQotICAgICAgICAgICAgICAgIFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKAotICAgICAgICAgICAgICAgICAgICBzY2hlbWFzWyBpIF0sIG5ldyBYbWxPcHRpb25zKCkuc2V0TG9hZExpbmVOdW1iZXJzKCkuc2V0TG9hZE1lc3NhZ2VEaWdlc3QoKSApOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gWG1sQmVhbnMubG9hZFhzZCggc2NoZW1hRG9jcyApOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCB2ICggU3RyaW5nIHhtbCApIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbE9iamVjdCB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoIHhtbCApOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggeC5zY2hlbWFUeXBlKCkgIT0gWG1sT2JqZWN0LnR5cGUgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHgudmFsaWRhdGUoKSApOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBudiAoIFN0cmluZyB4bWwgKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBYbWxPYmplY3QgeCA9IFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCB4bWwgKTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIHguc2NoZW1hVHlwZSgpICE9IFhtbE9iamVjdC50eXBlICk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCAheC52YWxpZGF0ZSgpICk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIF9fX3Rlc3REZWZhdWx0ICggKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICAvLyBEZWZhdWx0Ci0gICAgICAgIAotLy8gICAgICAgIHYoICI8dmFsaWRFbGVtRGVmYXVsdC8+IiApOwotLy8gICAgICAgIHYoICI8dmFsaWRBdHRyRGVmYXVsdC8+IiApOwotLy8gICAgICAgIAotLy8gICAgICAgIG52KCAiPGludmFsaWRFbGVtRGVmYXVsdC8+IiApOwotICAgICAgICBudiggIjxpbnZhbGlkQXR0ckRlZmF1bHQvPiIgKTsKLQotICAgICAgICB2KCAiPGludmFsaWRFbGVtRGVmYXVsdD4xMTxpbnZhbGlkRWxlbURlZmF1bHQ+IiApOwotICAgICAgICB2KCAiPGludmFsaWRBdHRyRGVmYXVsdCBhdHRyPScyMic+IiApOwotICAgICAgICAKLSAgICAgICAgLy8gRml4ZWQKLQotICAgICAgICB2KCAiPHZhbGlkRWxlbUZpeGVkLz4iICk7Ci0gICAgICAgIHYoICI8dmFsaWRBdHRyRml4ZWQvPiIgKTsKLSAgICAgICAgCi0gICAgICAgIG52KCAiPGludmFsaWRFbGVtRml4ZWQvPiIgKTsKLSAgICAgICAgbnYoICI8aW52YWxpZEF0dHJGaXhlZC8+IiApOwotICAgICAgICAKLSAgICAgICAgdiggIjxpbnZhbGlkRWxlbUZpeGVkPjMzPGludmFsaWRFbGVtRml4ZWQ+IiApOwotICAgICAgICB2KCAiPGludmFsaWRBdHRyRml4ZWQgYXR0cj0nNDQnLz4iICk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZG9UZXN0ICgKLSAgICAgICAgU3RyaW5nW10gc2NoZW1hcywgUU5hbWUgZG9jVHlwZSwKLSAgICAgICAgU3RyaW5nW10gdmFsaWRJbnN0YW5jZXMsIFN0cmluZ1tdIGludmFsaWRJbnN0YW5jZXMpCi0gICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBkb1Rlc3Qoc2NoZW1hcywgZG9jVHlwZSwgdmFsaWRJbnN0YW5jZXMsIGludmFsaWRJbnN0YW5jZXMsIHRydWUpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGRvVGVzdCAoCi0gICAgICAgIFN0cmluZ1tdIHNjaGVtYXMsIFFOYW1lIGRvY1R5cGUsCi0gICAgICAgIFN0cmluZ1tdIHZhbGlkSW5zdGFuY2VzLCBTdHJpbmdbXSBpbnZhbGlkSW5zdGFuY2VzLCBib29sZWFuIHN0YXJ0T25Eb2N1bWVudCApCi0gICAgICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBTY2hlbWFUeXBlTG9hZGVyIHN0bCA9IG1ha2VTY2hlbWFUeXBlTG9hZGVyKCBzY2hlbWFzICk7Ci0KLSAgICAgICAgWG1sT3B0aW9ucyBvcHRpb25zID0gbmV3IFhtbE9wdGlvbnMoKTsKLQotICAgICAgICBpZiAoZG9jVHlwZSAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBTY2hlbWFUeXBlIGRvY1NjaGVtYSA9IHN0bC5maW5kRG9jdW1lbnRUeXBlKCBkb2NUeXBlICk7Ci0KLSAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBkb2NTY2hlbWEgIT0gbnVsbCApOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBvcHRpb25zLnB1dCggWG1sT3B0aW9ucy5ET0NVTUVOVF9UWVBFLCBkb2NTY2hlbWEgKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCB2YWxpZEluc3RhbmNlcy5sZW5ndGggOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxPYmplY3QgeCA9Ci0gICAgICAgICAgICAgICAgc3RsLnBhcnNlKCAoU3RyaW5nKSB2YWxpZEluc3RhbmNlc1sgaSBdLCBudWxsLCBvcHRpb25zICk7Ci0KLSAgICAgICAgICAgIGlmICghc3RhcnRPbkRvY3VtZW50KSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBYbWxDdXJzb3IgYyA9IHgubmV3Q3Vyc29yKCk7Ci0gICAgICAgICAgICAgICAgYy50b0ZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICB4ID0gYy5nZXRPYmplY3QoKTsKLSAgICAgICAgICAgICAgICBjLmRpc3Bvc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgTGlzdCB4ZWwgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG9wdGlvbnMucHV0KCBYbWxPcHRpb25zLkVSUk9SX0xJU1RFTkVSLCB4ZWwgKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYm9vbGVhbiBpc1ZhbGlkID0geC52YWxpZGF0ZSggb3B0aW9ucyApOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIWlzVmFsaWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiSW52YWxpZCBkb2MsIGV4cGVjdGVkIGEgdmFsaWQgZG9jOiAiICk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiSW5zdGFuY2UoIiArIGkgKyAiKTogIiApOwotICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiggeC54bWxUZXh0KCkgKTsKLSAgICAgICAgICAgICAgICBSb290LmR1bXAoIHggKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oICJFcnJvcnM6ICIgKTsKLSAgICAgICAgICAgICAgICBmb3IgKCBpbnQgaiA9IDAgOyBqIDwgeGVsLnNpemUoKSA7IGorKyApCi0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiggeGVsLmdldCggaiApICk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBpc1ZhbGlkICk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKCBpbnQgaSA9IDAgOyBpIDwgaW52YWxpZEluc3RhbmNlcy5sZW5ndGggOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxPYmplY3QgeDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeCA9IHN0bC5wYXJzZSggKFN0cmluZykgaW52YWxpZEluc3RhbmNlc1sgaSBdLCBudWxsLCBvcHRpb25zICk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoISBzdGFydE9uRG9jdW1lbnQpIAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgWG1sQ3Vyc29yIGMgPSB4Lm5ld0N1cnNvcigpOwotICAgICAgICAgICAgICAgICAgICBjLnRvRmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICAgICAgICB4ID0gYy5nZXRPYmplY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgYy5kaXNwb3NlKCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgYm9vbGVhbiBpc1ZhbGlkID0geC52YWxpZGF0ZSgpOwotCi0gICAgICAgICAgICAgICAgaWYgKGlzVmFsaWQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oICJWYWxpZCBkb2MsIGV4cGVjdGVkIGEgaW52YWxpZCBkb2M6ICIgKTsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiSW5zdGFuY2UoIiArIGkgKyAiKTogIiApOwotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIHgueG1sVGV4dCgpICk7Ci0gICAgICAgICAgICAgICAgICAgIFJvb3QuZHVtcCggeCApOwotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggIWlzVmFsaWQgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoICggWG1sRXhjZXB0aW9uIGUgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gSnVzdCBjb21waWxlIGEgc2NoZW1hLCBnb29kIGFuZCBiYWQKLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGUwICggKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICAvLwotICAgICAgICAvLyBUaGUgbW9zdCBiYXNpYyBzY2hlbWEKLSAgICAgICAgLy8KLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBzY2hlbWEgPQotICAgICAgICAgICAgIjx4czpzY2hlbWEgeG1sbnM6eHM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJz5cbiIgKwotICAgICAgICAgICAgIjwveHM6c2NoZW1hPiIgKwotICAgICAgICAgICAgIiI7Ci0gICAgICAgIAotICAgICAgICBTdHJpbmdbXSBzY2hlbWFzID0geyBzY2hlbWEgfTsKLSAgICAgICAgCi0gICAgICAgIFNjaGVtYVR5cGVMb2FkZXIgc3RsID0gbWFrZVNjaGVtYVR5cGVMb2FkZXIoIHNjaGVtYXMgKTsKLSAgICAgICAgCi0gICAgICAgIC8vCi0gICAgICAgIC8vIE9uZSB3aGljaCB1c2VzICMjdGFyZ2V0TmFtZXNwYWNlIG9uIGEgd2lsZGNhcmQKLSAgICAgICAgLy8KLSAgICAgICAgCi0gICAgICAgIHNjaGVtYSA9Ci0gICAgICAgICAgICAiPHhzOnNjaGVtYSB4bWxuczp4cz0naHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEnPlxuIiArCi0gICAgICAgICAgICAiICA8eHM6Y29tcGxleFR5cGUgbmFtZT0nZm9vJz5cbiIgKwotICAgICAgICAgICAgIiAgICA8eHM6c2VxdWVuY2U+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6YW55IG5hbWVzcGFjZT0nIyN0YXJnZXROYW1lc3BhY2UnLz5cbiIgKwotICAgICAgICAgICAgIiAgICA8L3hzOnNlcXVlbmNlPlxuIiArCi0gICAgICAgICAgICAiICA8L3hzOmNvbXBsZXhUeXBlPlxuIiArCi0gICAgICAgICAgICAiPC94czpzY2hlbWE+IiArCi0gICAgICAgICAgICAiIjsKLSAgICAgICAgCi0gICAgICAgIFN0cmluZ1tdIHNjaGVtYXM5OSA9IHsgc2NoZW1hIH07Ci0gICAgICAgIAotICAgICAgICBzdGwgPSBtYWtlU2NoZW1hVHlwZUxvYWRlciggc2NoZW1hczk5ICk7Ci0gICAgICAgIAotICAgICAgICAvLwotICAgICAgICAvLyBBIGJpZywgbmFzdHkgc2NoZW1hIDotKQotICAgICAgICAvLwotICAgICAgICAKLSAgICAgICAgRmlsZSBmaWxlID0gVGVzdEVudi5nZXRSb290RmlsZSgpOwotICAgICAgICBGaWxlIHNjaGVtZUZpbGUgPSBuZXcgRmlsZSggZmlsZSwgInRlc3QvY2FzZXMvc2NoZW1hL3M0cy9YTUxTY2hlbWEueHNkIiApOwotICAgICAgICBGaWxlIHhtbEZpbGUgPSBuZXcgRmlsZSggZmlsZSwgInRlc3QvY2FzZXMvc2NoZW1hL3M0cy9YTUwueHNkIiApOwotCi0gICAgICAgIEZpbGVbXSBzY2hlbWFzRiA9IHsgc2NoZW1lRmlsZSwgeG1sRmlsZSB9OwotCi0gICAgICAgIFJvb3QuZGlzYWJsZVN0b3JlVmFsaWRhdGlvbigpOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgc3RsID0gbWFrZVNjaGVtYVR5cGVMb2FkZXIoIHNjaGVtYXNGICk7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWxseQotICAgICAgICB7Ci0gICAgICAgICAgICBSb290LmVuYWJsZVN0b3JlVmFsaWRhdGlvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgU2NoZW1hVHlwZSB0eXBlID0KLSAgICAgICAgICAgIHN0bC5maW5kRG9jdW1lbnRUeXBlKAotICAgICAgICAgICAgICAgIG5ldyBRTmFtZSggImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiwgInNjaGVtYSIgKSApOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB0eXBlICE9IG51bGwgKTsKLQotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEEgZ29vZCBwaWVjZSBmcm9tIGEgSjJFRSBzY2hlbWEKLSAgICAgICAgLy8KLSAgICAgICAgCi0gICAgICAgIHNjaGVtYSA9Ci0gICAgICAgICAgICAiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz5cbiIgKyAKLSAgICAgICAgICAgICI8eHNkOnNjaGVtYSB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEnXG4iICsgCi0gICAgICAgICAgICAiICAgICB4bWxuczp4c2Q9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJ1xuIiArIAotICAgICAgICAgICAgIiAgICAgZWxlbWVudEZvcm1EZWZhdWx0PSdxdWFsaWZpZWQnXG4iICsgCi0gICAgICAgICAgICAiICAgICBhdHRyaWJ1dGVGb3JtRGVmYXVsdD0ndW5xdWFsaWZpZWQnPlxuIiArIAotICAgICAgICAgICAgIjx4c2Q6YW5ub3RhdGlvbj5cbiIgKyAKLSAgICAgICAgICAgICI8eHNkOmRvY3VtZW50YXRpb24+XG4iICsgCi0gICAgICAgICAgICAiQCgjKWFwcGxpY2F0aW9uLWNsaWVudF8xXzQueHNkcwkxLjcgMDcvMDgvMDJcbiIgKyAKLSAgICAgICAgICAgICI8L3hzZDpkb2N1bWVudGF0aW9uPlxuIiArIAotICAgICAgICAgICAgIjwveHNkOmFubm90YXRpb24+XG4iICsgCi0gICAgICAgICAgICAiPC94c2Q6c2NoZW1hPlxuIjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgU3RyaW5nW10gc2NoZW1hczUgPSB7IHNjaGVtYSB9OwotCi0gICAgICAgIHN0bCA9IG1ha2VTY2hlbWFUeXBlTG9hZGVyKCBzY2hlbWFzNSApOwotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEEgYmFkIHNjaGVtYQotICAgICAgICAvLwotICAgICAgICAKLSAgICAgICAgc2NoZW1hID0gIjxmb28vPiI7Ci0gICAgICAgIAotICAgICAgICBTdHJpbmdbXSBzY2hlbWFzMiA9IHsgc2NoZW1hIH07Ci0KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHN0bCA9IG1ha2VTY2hlbWFUeXBlTG9hZGVyKCBzY2hlbWFzMiApOwotICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGZhbHNlICk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKCBFeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEEgYmFkIHNjaGVtYQotICAgICAgICAvLwotICAgICAgICBzY2hlbWEgPQotICAgICAgICAgICAgIjx4czpzY2hlbWEgeG1sbnM6eHM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJz5cbiIgKwotICAgICAgICAgICAgIiAgPGZvby8+XG4iICsKLSAgICAgICAgICAgICI8L3hzOnNjaGVtYT4iICsKLSAgICAgICAgICAgICIiOwotICAgICAgICAKLSAgICAgICAgU3RyaW5nW10gc2NoZW1hczMgPSB7IHNjaGVtYSB9OwotCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBtYWtlU2NoZW1hVHlwZUxvYWRlciggc2NoZW1hczMgKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGZhbHNlICk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKCBYbWxFeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGUxICggKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBTdHJpbmcgZXJpY1NjaGVtYSA9Ci0gICAgICAgICAgICAiPHhzOnNjaGVtYVxuIiArCi0gICAgICAgICAgICAiICAgeG1sbnM6eHM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJ1xuIiArCi0gICAgICAgICAgICAiICAgeG1sbnM6bnc9J2h0dHA6Ly9vcGVudXJpLm9yZy9lcmljc2NoZW1hJ1xuIiArCi0gICAgICAgICAgICAiICAgdGFyZ2V0TmFtZXNwYWNlPSdodHRwOi8vb3BlbnVyaS5vcmcvZXJpY3NjaGVtYSdcbiIgKwotICAgICAgICAgICAgIiAgIGVsZW1lbnRGb3JtRGVmYXVsdD0ncXVhbGlmaWVkJz5cbiIgKwotICAgICAgICAgICAgIlxuIiArCi0gICAgICAgICAgICAiICA8eHM6Y29tcGxleFR5cGUgbmFtZT0nZm9vJz5cbiIgKwotICAgICAgICAgICAgIiAgPC94czpjb21wbGV4VHlwZT5cbiIgKwotICAgICAgICAgICAgIlxuIiArCi0gICAgICAgICAgICAiICA8eHM6ZWxlbWVudCBuYW1lPSdmb28nIHR5cGU9J253OmZvbyc+XG4iICsKLSAgICAgICAgICAgICIgIDwveHM6ZWxlbWVudD5cbiIgKwotICAgICAgICAgICAgIlxuIiArCi0gICAgICAgICAgICAiICA8eHM6ZWxlbWVudCBuYW1lPSdlcmljJz5cbiIgKwotICAgICAgICAgICAgIiAgICA8eHM6Y29tcGxleFR5cGU+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6c2VxdWVuY2U+XG4iICsKLSAgICAgICAgICAgICIgICAgICAgIDx4czplbGVtZW50IG5hbWU9J2EnIG1heE9jY3Vycz0ndW5ib3VuZGVkJy8+XG4iICsKLSAgICAgICAgICAgICIgICAgICAgIDx4czplbGVtZW50IG5hbWU9J2InIC8+XG4iICsKLSAgICAgICAgICAgICIgICAgICAgIDx4czphbnkgbmFtZXNwYWNlPSd5YXlhJyBtaW5PY2N1cnM9JzAnIG1heE9jY3Vycz0nMScgcHJvY2Vzc0NvbnRlbnRzPSdsYXgnLz5cbiIgKwotICAgICAgICAgICAgIiAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0nYycgLz5cbiIgKwotICAgICAgICAgICAgIiAgICAgICAgPHhzOmFueSBtaW5PY2N1cnM9JzAnIG1heE9jY3Vycz0ndW5ib3VuZGVkJyBwcm9jZXNzQ29udGVudHM9J3N0cmljdCcvPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPC94czpzZXF1ZW5jZT5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0neCcgdXNlPSdvcHRpb25hbCcvPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSd5JyB1c2U9J3JlcXVpcmVkJy8+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9J3onIHVzZT0ncHJvaGliaXRlZCcvPlxuIiArCi0gICAgICAgICAgICAiICAgIDwveHM6Y29tcGxleFR5cGU+XG4iICsKLSAgICAgICAgICAgICIgIDwveHM6ZWxlbWVudD5cbiIgKwotICAgICAgICAgICAgIiIgKwotICAgICAgICAgICAgIjwveHM6c2NoZW1hPlxuIjsKLQotICAgICAgICBTdHJpbmcgZXJpYzJTY2hlbWEgPQotICAgICAgICAgICAgIjx4czpzY2hlbWFcbiIgKwotICAgICAgICAgICAgIiAgIHhtbG5zOnhzPSdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSdcbiIgKwotICAgICAgICAgICAgIiAgIHhtbG5zOm53PSdodHRwOi8vb3BlbnVyaS5vcmcvZXJpY3NjaGVtYTInXG4iICsKLSAgICAgICAgICAgICIgICB4bWxuczplcmljPSdodHRwOi8vb3BlbnVyaS5vcmcvZXJpY3NjaGVtYSdcbiIgKwotICAgICAgICAgICAgIiAgIHRhcmdldE5hbWVzcGFjZT0naHR0cDovL29wZW51cmkub3JnL2VyaWNzY2hlbWEyJ1xuIiArCi0gICAgICAgICAgICAiICAgZWxlbWVudEZvcm1EZWZhdWx0PSdxdWFsaWZpZWQnPlxuIiArCi0gICAgICAgICAgICAiXG4iICsKLSAgICAgICAgICAgICIgIDx4czpjb21wbGV4VHlwZSBuYW1lPSdlcmljMic+XG4iICsKLSAgICAgICAgICAgICIgICAgPHhzOmNvbXBsZXhDb250ZW50PlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSdlcmljOmZvbyc+XG4iICsKLSAgICAgICAgICAgICIgICAgICAgIDx4czpzZXF1ZW5jZT5cbiIgKwotICAgICAgICAgICAgIiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSdhJyBtYXhPY2N1cnM9J3VuYm91bmRlZCcvPlxuIiArCi0gICAgICAgICAgICAiICAgICAgICA8L3hzOnNlcXVlbmNlPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPC94czpleHRlbnNpb24+XG4iICsKLSAgICAgICAgICAgICIgICAgPC94czpjb21wbGV4Q29udGVudD5cbiIgKwotICAgICAgICAgICAgIiAgPC94czpjb21wbGV4VHlwZT5cbiIgKwotICAgICAgICAgICAgIjwveHM6c2NoZW1hPlxuIjsKLQotICAgICAgICBTdHJpbmcgZXJpYyA9ICI8ZXJpYyB5PSdZJyB4bWxucz0naHR0cDovL29wZW51cmkub3JnL2VyaWNzY2hlbWEnPiI7Ci0gICAgICAgIFN0cmluZyBlcmljMiA9ICI8ZXJpYyB4bWxucz0naHR0cDovL29wZW51cmkub3JnL2VyaWNzY2hlbWEyJz4iOwotICAgICAgICBTdHJpbmcgeHNpID0gInhtbG5zOmVyaWMyPSdodHRwOi8vb3BlbnVyaS5vcmcvZXJpY3NjaGVtYTInIHhtbG5zOnhzaT0naHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UnIjsKLQotICAgICAgICBTdHJpbmdbXSB2YWxpZCA9IHsKLSAgICAgICAgICAgIGVyaWMgKyAiPGEvPjxiLz48Yy8+PGZvbyB4c2k6dHlwZT0nZXJpYzI6ZXJpYzInICIgKwotICAgICAgICAgICAgICAgIHhzaSArICI+PGEgeG1sbnM9XCJodHRwOi8vb3BlbnVyaS5vcmcvZXJpY3NjaGVtYTJcIi8+PC9mb28+PC9lcmljPiIsCi0gICAgICAgICAgICBlcmljICsgIjxhLz48Yi8+PGJvbyB4bWxucz0neWF5YScvPjxjLz48L2VyaWM+IiwKLSAgICAgICAgICAgIGVyaWMgKyAiPGEvPjxiLz48Yy8+PC9lcmljPiIsCi0gICAgICAgICAgICBlcmljICsgIjxhIHg9J3knLz48Yi8+PGMvPjwvZXJpYz4iLAotICAgICAgICAgICAgIjxlcmljIHk9J1knIHg9J1gnIHhtbG5zPSdodHRwOi8vb3BlbnVyaS5vcmcvZXJpY3NjaGVtYSc+IiArCi0gICAgICAgICAgICAgICAgIjxhLz48Yi8+PGMvPjwvZXJpYz4iCi0gICAgICAgIH07Ci0KLSAgICAgICAgU3RyaW5nIGVyaWNTYW5zWSA9Ci0gICAgICAgICAgICAiPGVyaWMgeG1sbnM9J2h0dHA6Ly9vcGVudXJpLm9yZy9lcmljc2NoZW1hJz4iOwotCi0gICAgICAgIFN0cmluZ1tdIGludmFsaWQgPSB7Ci0gICAgICAgICAgICAiPGZvby8+IiwKLSAgICAgICAgICAgICI8ZXJpYz48YS8+PGZvby8+PGMvPjwvZXJpYz4iLAotICAgICAgICAgICAgZXJpYyArICJ0ZXh0PGEvPjxiLz48Yy8+PC9lcmljPiIsCi0gICAgICAgICAgICBlcmljICsgIjxhLz50ZXh0PGIvPjxjLz48L2VyaWM+IiwKLSAgICAgICAgICAgIGVyaWMgKyAiPGEvPjxiLz50ZXh0PGMvPjwvZXJpYz4iLAotICAgICAgICAgICAgZXJpYyArICI8YS8+PGIvPjxjLz50ZXh0PC9lcmljPiIsCi0gICAgICAgICAgICBlcmljICsgIjxhIHg9J3knLz48Yi8+PGMvPnRleHQ8L2VyaWM+IiwKLSAgICAgICAgICAgIGVyaWMgKyAiPGEvPjxiLz48Ym9vIHhtbG5zPSd5YXlhJy8+PG1vbyB4bWxucz0neWF5YScvPjxjLz48L2VyaWM+IiwKLSAgICAgICAgICAgIGVyaWNTYW5zWSArICI8YS8+PGIvPjxjLz48L2VyaWM+IiwKLSAgICAgICAgICAgICI8ZXJpYyB5PScnIHo9JycgeG1sbnM9J2h0dHA6Ly9vcGVudXJpLm9yZy9lcmljc2NoZW1hJz4iICsKLSAgICAgICAgICAgICAgICAiPGEvPjxiLz48Yy8+PC9lcmljPiIKLSAgICAgICAgfTsKLQotICAgICAgICBTdHJpbmdbXSBzY2hlbWFzID0geyBlcmljU2NoZW1hLCBlcmljMlNjaGVtYSB9OwotICAgICAgICAKLSAgICAgICAgZG9UZXN0KAotICAgICAgICAgICAgc2NoZW1hcywKLSAgICAgICAgICAgIG5ldyBRTmFtZSggImh0dHA6Ly9vcGVudXJpLm9yZy9lcmljc2NoZW1hIiwgImVyaWMiICksCi0gICAgICAgICAgICB2YWxpZCwgaW52YWxpZCApOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZTIgKCApCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFN0cmluZyBib2JTY2hlbWEgPQotICAgICAgICAgICAgIjx4czpzY2hlbWFcbiIgKwotICAgICAgICAgICAgIiAgIHhtbG5zOnhzPSdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSdcbiIgKwotICAgICAgICAgICAgIiAgIHhtbG5zOmJvYj0naHR0cDovL29wZW51cmkub3JnL2JvYnNjaGVtYSdcbiIgKwotICAgICAgICAgICAgIiAgIHRhcmdldE5hbWVzcGFjZT0naHR0cDovL29wZW51cmkub3JnL2JvYnNjaGVtYSdcbiIgKwotICAgICAgICAgICAgIiAgIGVsZW1lbnRGb3JtRGVmYXVsdD0ncXVhbGlmaWVkJz5cbiIgKwotICAgICAgICAgICAgIlxuIiArCi0gICAgICAgICAgICAiICA8eHM6Y29tcGxleFR5cGUgbmFtZT0nYmlmZic+XG4iICsKLSAgICAgICAgICAgICIgICA8eHM6Y29tcGxleENvbnRlbnQ+XG4iICsKLSAgICAgICAgICAgICIgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSdib2I6Zm9vJz5cbiIgKwotICAgICAgICAgICAgIiAgICAgPHhzOnNlcXVlbmNlPlxuIiArCi0gICAgICAgICAgICAiICAgICAgIDx4czplbGVtZW50IG5hbWU9J2EnIG1pbk9jY3Vycz0nMCcgbWF4T2NjdXJzPSd1bmJvdW5kZWQnLz5cbiIgKwotICAgICAgICAgICAgIiAgICAgPC94czpzZXF1ZW5jZT5cbiIgKwotICAgICAgICAgICAgIiAgICA8L3hzOmV4dGVuc2lvbj5cbiIgKwotICAgICAgICAgICAgIiAgIDwveHM6Y29tcGxleENvbnRlbnQ+XG4iICsKLSAgICAgICAgICAgICIgIDwveHM6Y29tcGxleFR5cGU+XG4iICsKLSAgICAgICAgICAgICIiICsKLSAgICAgICAgICAgICIgIDx4czpjb21wbGV4VHlwZSBuYW1lPSdmb28nPlxuIiArCi0gICAgICAgICAgICAiICA8L3hzOmNvbXBsZXhUeXBlPlxuIiArCi0gICAgICAgICAgICAiIiArCi0gICAgICAgICAgICAiICA8eHM6ZWxlbWVudCBuYW1lPSdmb28nIHR5cGU9J2JvYjpmb28nPlxuIiArCi0gICAgICAgICAgICAiICA8L3hzOmVsZW1lbnQ+XG4iICsKLSAgICAgICAgICAgICIiICsKLSAgICAgICAgICAgICI8L3hzOnNjaGVtYT5cbiI7Ci0KLSAgICAgICAgU3RyaW5nIHhzaVR5cGUgPSAieG1sbnM6eHNpPSdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSciOwotCi0gICAgICAgIFN0cmluZ1tdIHZhbGlkID0gewotICAgICAgICAgICAgIjxib2I6Zm9vIHhtbG5zOnhzaT0naHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UnIHhtbG5zOmJvYj0naHR0cDovL29wZW51cmkub3JnL2JvYnNjaGVtYScgIiArCi0gICAgICAgICAgICAgICAgInhzaTp0eXBlPSdib2I6YmlmZic+PGJvYjphLz48Ym9iOmEvPjxib2I6YS8+PC9ib2I6Zm9vPiIKLSAgICAgICAgfTsKLQotICAgICAgICBTdHJpbmdbXSBpbnZhbGlkID0gewotICAgICAgICAgICAgIjxib2I6Zm9vIHhtbG5zOnhzaT0naHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UnIHhtbG5zOmJvYj0naHR0cDovL29wZW51cmkub3JnL2JvYnNjaGVtYScgIiArCi0gICAgICAgICAgICAgICAgInhzaTp0eXBlPSdib2I6YmlmZic+PGJvYjpxLz48L2JvYjpmb28+IiwKLSAgICAgICAgICAgICI8Ym9iOmZvbyBhPSdiJyB4bWxuczp4c2k9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJyB4bWxuczpib2I9J2h0dHA6Ly9vcGVudXJpLm9yZy9ib2JzY2hlbWEnICIgKwotICAgICAgICAgICAgICAgICJ4c2k6dHlwZT0nYm9iOmJpZmYnPjxib2I6YS8+PGJvYjphLz48Ym9iOmEvPjwvYm9iOmZvbz4iCi0gICAgICAgIH07Ci0KLSAgICAgICAgU3RyaW5nW10gc2NoZW1hcyA9IHsgYm9iU2NoZW1hIH07Ci0gICAgICAgIAotICAgICAgICBkb1Rlc3QoIHNjaGVtYXMsIG51bGwsIHZhbGlkLCBpbnZhbGlkICk7Ci0gICAgfQotICAgIAotICAgIFN0cmluZyBucyA9Ci0gICAgICAgICJ4bWxuczp4c2k9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlJyAiICsKLSAgICAgICAgICAgICJ4bWxuczp4cz0naHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEnIjsKLQotICAgIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZTMgKCApCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFN0cmluZyBzY2hlbWEgPQotICAgICAgICAgICAgIjx4czpzY2hlbWEgeG1sbnM6eHM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJz5cbiIgKwotICAgICAgICAgICAgIiIgKwotICAgICAgICAgICAgIiA8eHM6c2ltcGxlVHlwZSBuYW1lPSdhbGxOTkknPlxuIiArIAotICAgICAgICAgICAgIiAgPHhzOmFubm90YXRpb24+PHhzOmRvY3VtZW50YXRpb24+XG4iICsgCi0gICAgICAgICAgICAiICAgZm9yIG1heE9jY3VyczwveHM6ZG9jdW1lbnRhdGlvbj48L3hzOmFubm90YXRpb24+XG4iICsgCi0gICAgICAgICAgICAiICA8eHM6dW5pb24gbWVtYmVyVHlwZXM9J3hzOm5vbk5lZ2F0aXZlSW50ZWdlcic+XG4iICsgCi0gICAgICAgICAgICAiICAgPHhzOnNpbXBsZVR5cGU+XG4iICsgCi0gICAgICAgICAgICAiICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSd4czpOTVRPS0VOJz5cbiIgKyAKLSAgICAgICAgICAgICIgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ndW5ib3VuZGVkJy8+XG4iICsgCi0gICAgICAgICAgICAiICAgIDwveHM6cmVzdHJpY3Rpb24+XG4iICsgCi0gICAgICAgICAgICAiICAgPC94czpzaW1wbGVUeXBlPlxuIiArIAotICAgICAgICAgICAgIiAgPC94czp1bmlvbj5cbiIgKyAKLSAgICAgICAgICAgICIgPC94czpzaW1wbGVUeXBlPlxuIiArCi0gICAgICAgICAgICAiIiArCi0gICAgICAgICAgICAiICA8eHM6c2ltcGxlVHlwZSBuYW1lPSdlcmljQmFzZTY0QmluYXJ5Jz5cbiIgKwotICAgICAgICAgICAgIiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0neHM6YmFzZTY0QmluYXJ5Jz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0nRXJpYycvPlxuIiArCi0gICAgICAgICAgICAiICAgIDwveHM6cmVzdHJpY3Rpb24+XG4iICsKLSAgICAgICAgICAgICIgIDwveHM6c2ltcGxlVHlwZT5cbiIgKwotICAgICAgICAgICAgIiIgKwotICAgICAgICAgICAgIiAgPHhzOnNpbXBsZVR5cGUgbmFtZT0nYWJjZEhleEJpbmFyeSc+XG4iICsKLSAgICAgICAgICAgICIgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9J3hzOmhleEJpbmFyeSc+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9J2FiY2QnLz5cbiIgKwotICAgICAgICAgICAgIiAgICA8L3hzOnJlc3RyaWN0aW9uPlxuIiArCi0gICAgICAgICAgICAiICA8L3hzOnNpbXBsZVR5cGU+XG4iICsKLSAgICAgICAgICAgICIiICsKLSAgICAgICAgICAgICIgIDx4czpzaW1wbGVUeXBlIG5hbWU9J3plcm9OdW1iZXInPlxuIiArCi0gICAgICAgICAgICAiICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSdudW1iZXInPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSdaZXJvJy8+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9JzAnLz5cbiIgKwotICAgICAgICAgICAgIiAgICA8L3hzOnJlc3RyaWN0aW9uPlxuIiArCi0gICAgICAgICAgICAiICA8L3hzOnNpbXBsZVR5cGU+XG4iICsKLSAgICAgICAgICAgICIiICsKLSAgICAgICAgICAgICIgIDx4czpzaW1wbGVUeXBlIG5hbWU9J251bWJlcic+XG4iICsKLSAgICAgICAgICAgICIgICAgPHhzOnVuaW9uPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOnNpbXBsZVR5cGU+XG4iICsKLSAgICAgICAgICAgICIgICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSd4czpkZWNpbWFsJy8+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8L3hzOnNpbXBsZVR5cGU+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6c2ltcGxlVHlwZT5cbiIgKwotICAgICAgICAgICAgIiAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9J3hzOnN0cmluZyc+XG4iICsKLSAgICAgICAgICAgICIgICAgICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9J2NvbGxhcHNlJy8+XG4iICsKLSAgICAgICAgICAgICIgICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSdaZXJvJy8+XG4iICsKLSAgICAgICAgICAgICIgICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSdPbmUnLz5cbiIgKwotICAgICAgICAgICAgIiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9J1R3bycvPlxuIiArCi0gICAgICAgICAgICAiICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0nVGhyZWUnLz5cbiIgKwotICAgICAgICAgICAgIiAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9J01hbnknLz5cbiIgKwotICAgICAgICAgICAgIiAgICAgICAgPC94czpyZXN0cmljdGlvbj5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDwveHM6c2ltcGxlVHlwZT5cbiIgKwotICAgICAgICAgICAgIiAgICA8L3hzOnVuaW9uPlxuIiArCi0gICAgICAgICAgICAiICA8L3hzOnNpbXBsZVR5cGU+XG4iICsKLSAgICAgICAgICAgICIiICsKLSAgICAgICAgICAgICIgIDx4czpzaW1wbGVUeXBlIG5hbWU9J2xpc3RPZkludCc+XG4iICsKLSAgICAgICAgICAgICIgICAgPHhzOmxpc3QgaXRlbVR5cGU9J3hzOmludCcvPlxuIiArCi0gICAgICAgICAgICAiICA8L3hzOnNpbXBsZVR5cGU+XG4iICsKLSAgICAgICAgICAgICIiICsKLSAgICAgICAgICAgICIgIDx4czpzaW1wbGVUeXBlIG5hbWU9J2xpc3RPZlByaW1lJz5cbiIgKwotICAgICAgICAgICAgIiAgICA8eHM6bGlzdCBpdGVtVHlwZT0ncHJpbWUnLz5cbiIgKwotICAgICAgICAgICAgIiAgPC94czpzaW1wbGVUeXBlPlxuIiArCi0gICAgICAgICAgICAiIiArCi0gICAgICAgICAgICAiICA8eHM6c2ltcGxlVHlwZSBuYW1lPSdlcmljQnJvdGhlcic+XG4iICsKLSAgICAgICAgICAgICIgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9J3hzOnN0cmluZyc+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6d2hpdGVTcGFjZSB2YWx1ZT0nY29sbGFwc2UnLz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0nQnJpYW4nLz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0nS2V2aW4nLz5cbiIgKwotICAgICAgICAgICAgIiAgICA8L3hzOnJlc3RyaWN0aW9uPlxuIiArCi0gICAgICAgICAgICAiICA8L3hzOnNpbXBsZVR5cGU+XG4iICsKLSAgICAgICAgICAgICIiICsKLSAgICAgICAgICAgICIgIDx4czpzaW1wbGVUeXBlIG5hbWU9J2VyaWNCcm90aGVycyc+XG4iICsKLSAgICAgICAgICAgICIgICAgPHhzOmxpc3QgaXRlbVR5cGU9J2VyaWNCcm90aGVyJy8+XG4iICsKLSAgICAgICAgICAgICIgIDwveHM6c2ltcGxlVHlwZT5cbiIgKwotICAgICAgICAgICAgIiIgKwotICAgICAgICAgICAgIiAgPHhzOnNpbXBsZVR5cGUgbmFtZT0nd2Vla1N0cmluZyc+XG4iICsKLSAgICAgICAgICAgICIgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9J3hzOnN0cmluZyc+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6d2hpdGVTcGFjZSB2YWx1ZT0nY29sbGFwc2UnLz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0nTW9uZGF5Jy8+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9J1R1ZXNkYXknLz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0nV2VkbmVzZGF5Jy8+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9J1RodXJzZGF5Jy8+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9J0ZyaWRheScvPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSdTYXR1cmRheScvPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSdTdW5kYXknLz5cbiIgKwotICAgICAgICAgICAgIiAgICA8L3hzOnJlc3RyaWN0aW9uPlxuIiArCi0gICAgICAgICAgICAiICA8L3hzOnNpbXBsZVR5cGU+XG4iICsKLSAgICAgICAgICAgICIiICsKLSAgICAgICAgICAgICIgIDx4czpzaW1wbGVUeXBlIG5hbWU9J2FZZWFyJz5cbiIgKwotICAgICAgICAgICAgIiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0neHM6ZHVyYXRpb24nPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSdQMVknLz5cbiIgKwotICAgICAgICAgICAgIiAgICA8L3hzOnJlc3RyaWN0aW9uPlxuIiArCi0gICAgICAgICAgICAiICA8L3hzOnNpbXBsZVR5cGU+XG4iICsKLSAgICAgICAgICAgICIiICsKLSAgICAgICAgICAgICIgIDx4czpzaW1wbGVUeXBlIG5hbWU9J2VyaWNCRGF5Jz5cbiIgKwotICAgICAgICAgICAgIiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0neHM6ZGF0ZSc+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9JzE5NjUtMDYtMTAnLz5cbiIgKwotICAgICAgICAgICAgIiAgICA8L3hzOnJlc3RyaWN0aW9uPlxuIiArCi0gICAgICAgICAgICAiICA8L3hzOnNpbXBsZVR5cGU+XG4iICsKLSAgICAgICAgICAgICIiICsKLSAgICAgICAgICAgICIgIDx4czpzaW1wbGVUeXBlIG5hbWU9J3lvdW5nZXJUaGFuRXJpYyc+XG4iICsKLSAgICAgICAgICAgICIgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9J3hzOmRhdGUnPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOm1pbkV4Y2x1c2l2ZSB2YWx1ZT0nMTk2NS0wNi0xMCcvPlxuIiArCi0gICAgICAgICAgICAiICAgIDwveHM6cmVzdHJpY3Rpb24+XG4iICsKLSAgICAgICAgICAgICIgIDwveHM6c2ltcGxlVHlwZT5cbiIgKwotICAgICAgICAgICAgIiIgKwotICAgICAgICAgICAgIiAgPHhzOnNpbXBsZVR5cGUgbmFtZT0nZml2ZUNoYXJRbmFtZSc+XG4iICsKLSAgICAgICAgICAgICIgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9J3hzOlFOYW1lJz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czpsZW5ndGggdmFsdWU9JzUnLz5cbiIgKwotICAgICAgICAgICAgIiAgICA8L3hzOnJlc3RyaWN0aW9uPlxuIiArCi0gICAgICAgICAgICAiICA8L3hzOnNpbXBsZVR5cGU+XG4iICsKLSAgICAgICAgICAgICIiICsKLSAgICAgICAgICAgICIgIDx4czpzaW1wbGVUeXBlIG5hbWU9J3dhY2t5UW5hbWUnPlxuIiArCi0gICAgICAgICAgICAiICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSd4czpRTmFtZSc+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6bWluTGVuZ3RoIHZhbHVlPSczJy8+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6bWF4TGVuZ3RoIHZhbHVlPScxMCcvPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOnBhdHRlcm4gdmFsdWU9J1t4czphYmNkZV0qJy8+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9J3hzOmFiYycvPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSd4czpiY2QnLz5cbiIgKwotICAgICAgICAgICAgIiAgICA8L3hzOnJlc3RyaWN0aW9uPlxuIiArCi0gICAgICAgICAgICAiICA8L3hzOnNpbXBsZVR5cGU+XG4iICsKLSAgICAgICAgICAgICIiICsKLSAgICAgICAgICAgICIgIDx4czpzaW1wbGVUeXBlIG5hbWU9J2ZpdmVDaGFyQW55VVJJJz5cbiIgKwotICAgICAgICAgICAgIiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0neHM6YW55VVJJJz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czpsZW5ndGggdmFsdWU9JzUnLz5cbiIgKwotICAgICAgICAgICAgIiAgICA8L3hzOnJlc3RyaWN0aW9uPlxuIiArCi0gICAgICAgICAgICAiICA8L3hzOnNpbXBsZVR5cGU+XG4iICsKLSAgICAgICAgICAgICIiICsKLSAgICAgICAgICAgICIgIDx4czpzaW1wbGVUeXBlIG5hbWU9J3dhY2t5QW55VVJJJz5cbiIgKwotICAgICAgICAgICAgIiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0neHM6YW55VVJJJz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czptaW5MZW5ndGggdmFsdWU9JzMnLz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czptYXhMZW5ndGggdmFsdWU9JzEwJy8+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9J2ZvbycvPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSdiYXInLz5cbiIgKwotICAgICAgICAgICAgIiAgICA8L3hzOnJlc3RyaWN0aW9uPlxuIiArCi0gICAgICAgICAgICAiICA8L3hzOnNpbXBsZVR5cGU+XG4iICsKLSAgICAgICAgICAgICIiICsKLSAgICAgICAgICAgICIgIDx4czpzaW1wbGVUeXBlIG5hbWU9J2JpdCc+XG4iICsKLSAgICAgICAgICAgICIgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9J3hzOmJvb2xlYW4nPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOnBhdHRlcm4gdmFsdWU9JzF8MCcvPlxuIiArCi0gICAgICAgICAgICAiICAgIDwveHM6cmVzdHJpY3Rpb24+XG4iICsKLSAgICAgICAgICAgICIgIDwveHM6c2ltcGxlVHlwZT5cbiIgKwotICAgICAgICAgICAgIiIgKwotICAgICAgICAgICAgIiAgPHhzOnNpbXBsZVR5cGUgbmFtZT0nZXZlbkludGVnZXInPlxuIiArCi0gICAgICAgICAgICAiICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSd4czpkZWNpbWFsJz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czpwYXR0ZXJuIHZhbHVlPSdbMC05XSpbMDI0NjhdJy8+XG4iICsKLSAgICAgICAgICAgICIgICAgPC94czpyZXN0cmljdGlvbj5cbiIgKwotICAgICAgICAgICAgIiAgPC94czpzaW1wbGVUeXBlPlxuIiArCi0gICAgICAgICAgICAiIiArCi0gICAgICAgICAgICAiICA8eHM6c2ltcGxlVHlwZSBuYW1lPSdwcmltZSc+XG4iICsKLSAgICAgICAgICAgICIgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9J3hzOmRlY2ltYWwnPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOnBhdHRlcm4gdmFsdWU9J1swLTldKlsxMzU3OV0nLz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0nMycvPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSc1Jy8+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9JzcnLz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0nMTEnLz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0nMTMnLz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0nMTcnLz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0nMTknLz5cbiIgKwotICAgICAgICAgICAgIiAgICA8L3hzOnJlc3RyaWN0aW9uPlxuIiArCi0gICAgICAgICAgICAiICA8L3hzOnNpbXBsZVR5cGU+XG4iICsKLSAgICAgICAgICAgICIiICsKLSAgICAgICAgICAgICIgIDx4czpzaW1wbGVUeXBlIG5hbWU9J2ZvdXJDaGFyU3RyaW5nJz5cbiIgKwotICAgICAgICAgICAgIiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0neHM6c3RyaW5nJz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czpsZW5ndGggdmFsdWU9JzQnLz5cbiIgKwotICAgICAgICAgICAgIiAgICA8L3hzOnJlc3RyaWN0aW9uPlxuIiArCi0gICAgICAgICAgICAiICA8L3hzOnNpbXBsZVR5cGU+XG4iICsKLSAgICAgICAgICAgICIiICsKLSAgICAgICAgICAgICIgIDx4czpzaW1wbGVUeXBlIG5hbWU9J3RocmVlT3JNb3JlQ2hhclN0cmluZyc+XG4iICsKLSAgICAgICAgICAgICIgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9J3hzOnN0cmluZyc+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6bWluTGVuZ3RoIHZhbHVlPSczJy8+XG4iICsKLSAgICAgICAgICAgICIgICAgPC94czpyZXN0cmljdGlvbj5cbiIgKwotICAgICAgICAgICAgIiAgPC94czpzaW1wbGVUeXBlPlxuIiArCi0gICAgICAgICAgICAiIiArCi0gICAgICAgICAgICAiICA8eHM6c2ltcGxlVHlwZSBuYW1lPSdmaXZlT3JMZXNzQ2hhclN0cmluZyc+XG4iICsKLSAgICAgICAgICAgICIgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9J3hzOnN0cmluZyc+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6bWF4TGVuZ3RoIHZhbHVlPSc1Jy8+XG4iICsKLSAgICAgICAgICAgICIgICAgPC94czpyZXN0cmljdGlvbj5cbiIgKwotICAgICAgICAgICAgIiAgPC94czpzaW1wbGVUeXBlPlxuIiArCi0gICAgICAgICAgICAiIiArCi0gICAgICAgICAgICAiICA8eHM6c2ltcGxlVHlwZSBuYW1lPSdmaXZlVG90YWxEaWdpdHMnPlxuIiArCi0gICAgICAgICAgICAiICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSd4czpkZWNpbWFsJz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czp0b3RhbERpZ2l0cyB2YWx1ZT0nNScvPlxuIiArCi0gICAgICAgICAgICAiICAgIDwveHM6cmVzdHJpY3Rpb24+XG4iICsKLSAgICAgICAgICAgICIgIDwveHM6c2ltcGxlVHlwZT5cbiIgKwotICAgICAgICAgICAgIiIgKwotICAgICAgICAgICAgIiAgPHhzOnNpbXBsZVR5cGUgbmFtZT0ndGhyZWVGcmFjdGlvbkRpZ2l0cyc+XG4iICsKLSAgICAgICAgICAgICIgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9J3hzOmRlY2ltYWwnPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOmZyYWN0aW9uRGlnaXRzIHZhbHVlPSczJy8+XG4iICsKLSAgICAgICAgICAgICIgICAgPC94czpyZXN0cmljdGlvbj5cbiIgKwotICAgICAgICAgICAgIiAgPC94czpzaW1wbGVUeXBlPlxuIiArCi0gICAgICAgICAgICAiIiArCi0gICAgICAgICAgICAiICA8eHM6c2ltcGxlVHlwZSBuYW1lPSd0ZW5NaW5FeGNsdXNpdmUnPlxuIiArCi0gICAgICAgICAgICAiICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSd4czpkZWNpbWFsJz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czptaW5FeGNsdXNpdmUgdmFsdWU9JzEwJy8+XG4iICsKLSAgICAgICAgICAgICIgICAgPC94czpyZXN0cmljdGlvbj5cbiIgKwotICAgICAgICAgICAgIiAgPC94czpzaW1wbGVUeXBlPlxuIiArCi0gICAgICAgICAgICAiIiArCi0gICAgICAgICAgICAiICA8eHM6c2ltcGxlVHlwZSBuYW1lPSd0ZW5NYXhFeGNsdXNpdmUnPlxuIiArCi0gICAgICAgICAgICAiICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSd4czpkZWNpbWFsJz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czptYXhFeGNsdXNpdmUgdmFsdWU9JzEwJy8+XG4iICsKLSAgICAgICAgICAgICIgICAgPC94czpyZXN0cmljdGlvbj5cbiIgKwotICAgICAgICAgICAgIiAgPC94czpzaW1wbGVUeXBlPlxuIiArCi0gICAgICAgICAgICAiIiArCi0gICAgICAgICAgICAiICA8eHM6c2ltcGxlVHlwZSBuYW1lPSd0ZW5NYXhJbmNsdXNpdmUnPlxuIiArCi0gICAgICAgICAgICAiICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSd4czpkZWNpbWFsJz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czptYXhJbmNsdXNpdmUgdmFsdWU9JzEwJy8+XG4iICsKLSAgICAgICAgICAgICIgICAgPC94czpyZXN0cmljdGlvbj5cbiIgKwotICAgICAgICAgICAgIiAgPC94czpzaW1wbGVUeXBlPlxuIiArCi0gICAgICAgICAgICAiIiArCi0gICAgICAgICAgICAiICA8eHM6c2ltcGxlVHlwZSBuYW1lPSd0ZW5NaW5JbmNsdXNpdmUnPlxuIiArCi0gICAgICAgICAgICAiICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSd4czpkZWNpbWFsJz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czptaW5JbmNsdXNpdmUgdmFsdWU9JzEwJy8+XG4iICsKLSAgICAgICAgICAgICIgICAgPC94czpyZXN0cmljdGlvbj5cbiIgKwotICAgICAgICAgICAgIiAgPC94czpzaW1wbGVUeXBlPlxuIiArCi0gICAgICAgICAgICAiIiArCi0gICAgICAgICAgICAiICA8eHM6c2ltcGxlVHlwZSBuYW1lPSd0ZW5NaW5FeGNsdXNpdmVGbG9hdCc+XG4iICsKLSAgICAgICAgICAgICIgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9J3hzOmZsb2F0Jz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czptaW5FeGNsdXNpdmUgdmFsdWU9JzEwJy8+XG4iICsKLSAgICAgICAgICAgICIgICAgPC94czpyZXN0cmljdGlvbj5cbiIgKwotICAgICAgICAgICAgIiAgPC94czpzaW1wbGVUeXBlPlxuIiArCi0gICAgICAgICAgICAiIiArCi0gICAgICAgICAgICAiICA8eHM6c2ltcGxlVHlwZSBuYW1lPSd0ZW5NYXhFeGNsdXNpdmVGbG9hdCc+XG4iICsKLSAgICAgICAgICAgICIgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9J3hzOmZsb2F0Jz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czptYXhFeGNsdXNpdmUgdmFsdWU9JzEwJy8+XG4iICsKLSAgICAgICAgICAgICIgICAgPC94czpyZXN0cmljdGlvbj5cbiIgKwotICAgICAgICAgICAgIiAgPC94czpzaW1wbGVUeXBlPlxuIiArCi0gICAgICAgICAgICAiIiArCi0gICAgICAgICAgICAiICA8eHM6c2ltcGxlVHlwZSBuYW1lPSd0ZW5NYXhJbmNsdXNpdmVGbG9hdCc+XG4iICsKLSAgICAgICAgICAgICIgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9J3hzOmZsb2F0Jz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czptYXhJbmNsdXNpdmUgdmFsdWU9JzEwJy8+XG4iICsKLSAgICAgICAgICAgICIgICAgPC94czpyZXN0cmljdGlvbj5cbiIgKwotICAgICAgICAgICAgIiAgPC94czpzaW1wbGVUeXBlPlxuIiArCi0gICAgICAgICAgICAiIiArCi0gICAgICAgICAgICAiICA8eHM6c2ltcGxlVHlwZSBuYW1lPSd0ZW5NaW5JbmNsdXNpdmVGbG9hdCc+XG4iICsKLSAgICAgICAgICAgICIgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9J3hzOmZsb2F0Jz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czptaW5JbmNsdXNpdmUgdmFsdWU9JzEwJy8+XG4iICsKLSAgICAgICAgICAgICIgICAgPC94czpyZXN0cmljdGlvbj5cbiIgKwotICAgICAgICAgICAgIiAgPC94czpzaW1wbGVUeXBlPlxuIiArCi0gICAgICAgICAgICAiXG4iICsKLSAgICAgICAgICAgICIgIDx4czpzaW1wbGVUeXBlIG5hbWU9J3Rlbk1pbkV4Y2x1c2l2ZURvdWJsZSc+XG4iICsKLSAgICAgICAgICAgICIgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9J3hzOmRvdWJsZSc+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6bWluRXhjbHVzaXZlIHZhbHVlPScxMCcvPlxuIiArCi0gICAgICAgICAgICAiICAgIDwveHM6cmVzdHJpY3Rpb24+XG4iICsKLSAgICAgICAgICAgICIgIDwveHM6c2ltcGxlVHlwZT5cbiIgKwotICAgICAgICAgICAgIiIgKwotICAgICAgICAgICAgIiAgPHhzOnNpbXBsZVR5cGUgbmFtZT0ndGVuTWF4RXhjbHVzaXZlRG91YmxlJz5cbiIgKwotICAgICAgICAgICAgIiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0neHM6ZG91YmxlJz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czptYXhFeGNsdXNpdmUgdmFsdWU9JzEwJy8+XG4iICsKLSAgICAgICAgICAgICIgICAgPC94czpyZXN0cmljdGlvbj5cbiIgKwotICAgICAgICAgICAgIiAgPC94czpzaW1wbGVUeXBlPlxuIiArCi0gICAgICAgICAgICAiIiArCi0gICAgICAgICAgICAiICA8eHM6c2ltcGxlVHlwZSBuYW1lPSd0ZW5NYXhJbmNsdXNpdmVEb3VibGUnPlxuIiArCi0gICAgICAgICAgICAiICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSd4czpkb3VibGUnPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOm1heEluY2x1c2l2ZSB2YWx1ZT0nMTAnLz5cbiIgKwotICAgICAgICAgICAgIiAgICA8L3hzOnJlc3RyaWN0aW9uPlxuIiArCi0gICAgICAgICAgICAiICA8L3hzOnNpbXBsZVR5cGU+XG4iICsKLSAgICAgICAgICAgICIiICsKLSAgICAgICAgICAgICIgIDx4czpzaW1wbGVUeXBlIG5hbWU9J3Rlbk1pbkluY2x1c2l2ZURvdWJsZSc+XG4iICsKLSAgICAgICAgICAgICIgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9J3hzOmRvdWJsZSc+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6bWluSW5jbHVzaXZlIHZhbHVlPScxMCcvPlxuIiArCi0gICAgICAgICAgICAiICAgIDwveHM6cmVzdHJpY3Rpb24+XG4iICsKLSAgICAgICAgICAgICIgIDwveHM6c2ltcGxlVHlwZT5cbiIgKwotICAgICAgICAgICAgIlxuIiArCi0gICAgICAgICAgICAiICA8eHM6ZWxlbWVudCBuYW1lPSdhbnknPlxuIiArCi0gICAgICAgICAgICAiICA8L3hzOmVsZW1lbnQ+XG4iICsKLSAgICAgICAgICAgICIiICsKLSAgICAgICAgICAgICIgIDx4czplbGVtZW50IG5hbWU9J2RlZmF1bHRfMTIzNDUnIGRlZmF1bHQ9JzEyMzQ1Jz5cbiIgKwotICAgICAgICAgICAgIiAgPC94czplbGVtZW50PlxuIiArCi0gICAgICAgICAgICAiIiArCi0gICAgICAgICAgICAiICA8eHM6ZWxlbWVudCBuYW1lPSdkZWZhdWx0XzEyMzQnIGRlZmF1bHQ9JzEyMzQnPlxuIiArCi0gICAgICAgICAgICAiICA8L3hzOmVsZW1lbnQ+XG4iICsKLSAgICAgICAgICAgICIiICsKLSAgICAgICAgICAgICIgIDx4czplbGVtZW50IG5hbWU9J2RlZmF1bHRfZXJpYycgZGVmYXVsdD0nZXJpYyc+XG4iICsKLSAgICAgICAgICAgICIgIDwveHM6ZWxlbWVudD5cbiIgKwotICAgICAgICAgICAgIiIgKwotICAgICAgICAgICAgIjwveHM6c2NoZW1hPlxuIjsKLQotICAgICAgICBTdHJpbmdbXSB2YWxpZCA9IHsKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3RocmVlRnJhY3Rpb25EaWdpdHMnPi4xPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3RocmVlRnJhY3Rpb25EaWdpdHMnPi4xMjwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSd0aHJlZUZyYWN0aW9uRGlnaXRzJz4uMTIzPC9hbnk+IiwKLQotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nYWxsTk5JJz51bmJvdW5kZWQ8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nYWxsTk5JJz4wPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J2FsbE5OSSc+MTwvYW55PiIsCi0KLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3hzOmJhc2U2NEJpbmFyeSc+Q0FGRUJBQkU8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nYWJjZEhleEJpbmFyeSc+YWJjZDwvYW55PiIsCi0KLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3hzOmJhc2U2NEJpbmFyeSc+YWJjZGVmZ2g8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nZXJpY0Jhc2U2NEJpbmFyeSc+RXJpYzwvYW55PiIsCi0KLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3plcm9OdW1iZXInPiBaZXJvPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3plcm9OdW1iZXInPlplcm88L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nemVyb051bWJlcic+MDwvYW55PiIsCi0KLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J251bWJlcic+MTwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSdudW1iZXInPiAxIDwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSdudW1iZXInPlR3bzwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSdudW1iZXInPiBUaHJlZSA8L2FueT4iLAotCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSdlcmljQnJvdGhlcnMnPjwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSdlcmljQnJvdGhlcnMnPkJyaWFuPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J2VyaWNCcm90aGVycyc+S2V2aW48L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nZXJpY0Jyb3RoZXJzJz5LZXZpbiBCcmlhbjwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSdlcmljQnJvdGhlcnMnPkJyaWFuIEtldmluPC9hbnk+IiwKLQotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nbGlzdE9mSW50Jz4gIDEgIDIyICAzMzMgIDQ0NDQgIDwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSdsaXN0T2ZJbnQnPjwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSdsaXN0T2ZJbnQnPjU5OTk8L2FueT4iLAotCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSdhWWVhcic+UDFZPC9hbnk+IiwKLQotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nZml2ZUNoYXJBbnlVUkknPmFiY2RlPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3hzOmFueVVSSSc+Zm9vPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3dhY2t5QW55VVJJJz5mb288L2FueT4iLAotCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSd5b3VuZ2VyVGhhbkVyaWMnPjE5NjUtMDYtMTE8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nZXJpY0JEYXknPjE5NjUtMDYtMTA8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0neHM6ZGF0ZVRpbWUnPjE5OTktMDUtMzFUMTM6MjA6MDAtMDU6MDA8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0neHM6dGltZSc+MDA6MDA6MDA8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0neHM6dGltZSc+MTM6MjA6MDAtMDU6MDA8L2FueT4iLAotCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSd3YWNreVFuYW1lJz54czphYmM8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nZml2ZUNoYXJRbmFtZSc+YWJjZGU8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nZml2ZUNoYXJRbmFtZSc+eHM6YWI8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0ncHJpbWUnPjM8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0ncHJpbWUnPjExPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3hzOmludGVnZXInPis0NTwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSd4czppbnRlZ2VyJz4xPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3hzOmludGVnZXInPjA8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0neHM6aW50ZWdlcic+LTE8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0neHM6aW50ZWdlcic+LTE8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0neHM6aW50ZWdlcic+NDg5NzQzNTc5ODM3NTg5NzQzNDM0PC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3hzOmJvb2xlYW4nPjE8L2FueT4iLAotICAgICAgICAgICAgIjxkZWZhdWx0XzEyMzQgIiArIG5zICsgIiB4c2k6dHlwZT0nZXZlbkludGVnZXInPjwvZGVmYXVsdF8xMjM0PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSdldmVuSW50ZWdlcic+MTI8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nYml0Jz4xPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J2JpdCc+MDwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSd4czpib29sZWFuJz5mYWxzZTwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSdldmVuSW50ZWdlcic+MDwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSd3ZWVrU3RyaW5nJz5Nb25kYXk8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nd2Vla1N0cmluZyc+U3VuZGF5PC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3dlZWtTdHJpbmcnPiAgVGh1cnNkYXkgIDwvYW55PiIsCi0KLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3Rlbk1pbkV4Y2x1c2l2ZSc+MTAuMTwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSd0ZW5NYXhFeGNsdXNpdmUnPjkuOTwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSd0ZW5NaW5JbmNsdXNpdmUnPjEwPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3Rlbk1pbkluY2x1c2l2ZSc+MTAuMTwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSd0ZW5NYXhJbmNsdXNpdmUnPjEwPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3Rlbk1heEluY2x1c2l2ZSc+OS45PC9hbnk+IiwKLQotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0ndGVuTWluRXhjbHVzaXZlRmxvYXQnPjEwLjE8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0ndGVuTWF4RXhjbHVzaXZlRmxvYXQnPjkuOTwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSd0ZW5NaW5JbmNsdXNpdmVGbG9hdCc+MTA8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0ndGVuTWluSW5jbHVzaXZlRmxvYXQnPjEwLjE8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0ndGVuTWF4SW5jbHVzaXZlRmxvYXQnPjEwPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3Rlbk1heEluY2x1c2l2ZUZsb2F0Jz45Ljk8L2FueT4iLAotCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSd0ZW5NaW5FeGNsdXNpdmVEb3VibGUnPjEwLjE8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0ndGVuTWF4RXhjbHVzaXZlRG91YmxlJz45Ljk8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0ndGVuTWluSW5jbHVzaXZlRG91YmxlJz4xMDwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSd0ZW5NaW5JbmNsdXNpdmVEb3VibGUnPjEwLjE8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0ndGVuTWF4SW5jbHVzaXZlRG91YmxlJz4xMDwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSd0ZW5NYXhJbmNsdXNpdmVEb3VibGUnPjkuOTwvYW55PiIsCi0KLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J2ZvdXJDaGFyU3RyaW5nJz5lcmljPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3RocmVlT3JNb3JlQ2hhclN0cmluZyc+MTIzNDU8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nZml2ZU9yTGVzc0NoYXJTdHJpbmcnPjEyMzQ8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nZml2ZVRvdGFsRGlnaXRzJz4xMjM0NTwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSdmaXZlVG90YWxEaWdpdHMnPjEyMzQ8L2FueT4iLAotICAgICAgICAgICAgIjxkZWZhdWx0XzEyMzQgIiArIG5zICsgIiB4c2k6dHlwZT0nZXZlbkludGVnZXInPlxuXG48L2RlZmF1bHRfMTIzND4iCi0gICAgICAgIH07Ci0KLSAgICAgICAgU3RyaW5nW10gaW52YWxpZCA9IHsKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J2FsbE5OSSc+Zm9vPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3hzOmhleEJpbmFyeSc+UDwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSd4czpoZXhCaW5hcnknPkNBRkVCQUJQPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J2FiY2RIZXhCaW5hcnknPmFiY2U8L2FueT4iLAotCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSd4czpiYXNlNjRCaW5hcnknPmFiY2RlPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J2VyaWNCYXNlNjRCaW5hcnknPkVyaWs8L2FueT4iLAotCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSd6ZXJvTnVtYmVyJz5PbmU8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nemVyb051bWJlcic+VHdlbnR5PC9hbnk+IiwKLQotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nbnVtYmVyJz5TZXZlbjwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSdudW1iZXInPkJvYjwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSdudW1iZXInPjwvYW55PiIsCi0KLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J2VyaWNCcm90aGVycyc+MTwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSdlcmljQnJvdGhlcnMnPkJvYjwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSdlcmljQnJvdGhlcnMnPlJhbHBoIEZyYW5rPC9hbnk+IiwKLQotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nbGlzdE9mSW50Jz4gIDEgIDIyICAzMzMgIEVyaWMgIDwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSdsaXN0T2ZJbnQnPkVyaWM8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nbGlzdE9mSW50Jz4tPC9hbnk+IiwKLQotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nYVllYXInPlAyWTwvYW55PiIsCi0KLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3lvdW5nZXJUaGFuRXJpYyc+MTk2NS0wNi0xMDwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSdlcmljQkRheSc+MTk4NS0wNi0xMDwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSd4czpkYXRlVGltZSc+eHgxOTk5LTA1LTMxVDEzOjIwOjAwLTA1OjAwPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3hzOmRhdGVUaW1lJz5lcmljPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3hzOnRpbWUnPjk5Ojk5OjAwPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3hzOnRpbWUnPjEzOjIwOjAwLTk5OjAwPC9hbnk+IiwKLQotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nd2Fja3lBbnlVUkknPm1vbzwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSdmaXZlQ2hhckFueVVSSSc+YWI8L2FueT4iLAotCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSd3YWNreVFuYW1lJz54czphYmNkZWZnaGlqazwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSd3YWNreVFuYW1lJz54czpwcXI8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0neHM6UU5hbWUnPmZvbzpiYXI8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nZml2ZUNoYXJRbmFtZSc+eHM6YWJjPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3ByaW1lJz4xMjwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSdwcmltZSc+NjwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSd4czppbnRlZ2VyJz5mb288L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0neHM6aW50ZWdlcic+LjE8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nZXZlbkludGVnZXInPjE8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nYml0Jz50cnVlPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J2JpdCc+ZmFsc2U8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nYml0Jz5uaWJibGU8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nYml0Jz4yPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3hzOmJvb2xlYW4nPmJsdXJmPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3hzOmJvb2xlYW4nPjwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSdldmVuSW50ZWdlcic+PC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3dlZWtTdHJpbmcnPk1vbmRheSBTdWNrczwvYW55PiIsCi0KLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3Rlbk1heEV4Y2x1c2l2ZSc+MTAuMTwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSd0ZW5NYXhFeGNsdXNpdmUnPjEwPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3Rlbk1pbkV4Y2x1c2l2ZSc+MTA8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0ndGVuTWluRXhjbHVzaXZlJz45Ljk8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0ndGVuTWluSW5jbHVzaXZlJz45Ljk8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0ndGVuTWF4SW5jbHVzaXZlJz4xMC4xPC9hbnk+IiwKLQotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0ndGVuTWF4RXhjbHVzaXZlRmxvYXQnPjEwLjE8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0ndGVuTWF4RXhjbHVzaXZlRmxvYXQnPjEwPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3Rlbk1pbkV4Y2x1c2l2ZUZsb2F0Jz4xMDwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSd0ZW5NaW5FeGNsdXNpdmVGbG9hdCc+OS45PC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3Rlbk1pbkluY2x1c2l2ZUZsb2F0Jz45Ljk8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0ndGVuTWF4SW5jbHVzaXZlRmxvYXQnPjEwLjE8L2FueT4iLAotCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSd0ZW5NYXhFeGNsdXNpdmVEb3VibGUnPjEwLjE8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0ndGVuTWF4RXhjbHVzaXZlRG91YmxlJz4xMDwvYW55PiIsCi0gICAgICAgICAgICAiPGFueSAiICsgbnMgKyAiIHhzaTp0eXBlPSd0ZW5NaW5FeGNsdXNpdmVEb3VibGUnPjEwPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3Rlbk1pbkV4Y2x1c2l2ZURvdWJsZSc+OS45PC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3Rlbk1pbkluY2x1c2l2ZURvdWJsZSc+OS45PC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3Rlbk1heEluY2x1c2l2ZURvdWJsZSc+MTAuMTwvYW55PiIsCi0KLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J2ZpdmVPckxlc3NDaGFyU3RyaW5nJz4gMTIzNCA8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nZml2ZVRvdGFsRGlnaXRzJz4xMjM0NTY8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0nZm91ckNoYXJTdHJpbmcnPnZhc2lsaWs8L2FueT4iLAotICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0ndGhyZWVPck1vcmVDaGFyU3RyaW5nJz4xPC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J2ZpdmVPckxlc3NDaGFyU3RyaW5nJz4xMjM0NTY3PC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J3RocmVlRnJhY3Rpb25EaWdpdHMnPi4xMjM0PC9hbnk+IiwKLSAgICAgICAgICAgICI8YW55ICIgKyBucyArICIgeHNpOnR5cGU9J2ZvdXJDaGFyU3RyaW5nJz4gZXJpYyA8L2FueT4iLAotCi0gICAgICAgICAgICAiPGRlZmF1bHRfMTIzNDUgIiArIG5zICsgIiB4c2k6dHlwZT0nZXZlbkludGVnZXInPjwvZGVmYXVsdF8xMjM0NT4iLAotICAgICAgICAgICAgIjxkZWZhdWx0XzEyMzQ1ICIgKyBucyArICIgeHNpOnR5cGU9J2V2ZW5JbnRlZ2VyJz5cblxuPC9kZWZhdWx0XzEyMzQ1PiIKLSAgICAgICAgfTsKLQotICAgICAgICBTdHJpbmdbXSBzY2hlbWFzID0geyBzY2hlbWEgfTsKLQotICAgICAgICBkb1Rlc3QoIHNjaGVtYXMsIG51bGwsIHZhbGlkLCBpbnZhbGlkICk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlNCAoICkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgU3RyaW5nIHNjaGVtYSA9Ci0gICAgICAgICAgICAiPHhzOnNjaGVtYSB4bWxuczp4cz0naHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEnPlxuIiArCi0gICAgICAgICAgICAiXG4iICsKLSAgICAgICAgICAgICIgIDx4czplbGVtZW50IG5hbWU9J2FueSc+XG4iICsKLSAgICAgICAgICAgICIgIDwveHM6ZWxlbWVudD5cbiIgKwotICAgICAgICAgICAgIlxuIiArCi0gICAgICAgICAgICAiICA8eHM6c2ltcGxlVHlwZSBuYW1lPSdraW5kYVByaW1lJz5cbiIgKwotICAgICAgICAgICAgIiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0neHM6ZGVjaW1hbCc+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6cGF0dGVybiB2YWx1ZT0nWzAtOV0qWzEzNTc5XScvPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSczJy8+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9JzUnLz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0nNycvPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPScxMScvPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPScxMycvPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPScxNycvPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPScxOScvPlxuIiArCi0gICAgICAgICAgICAiICAgIDwveHM6cmVzdHJpY3Rpb24+XG4iICsKLSAgICAgICAgICAgICIgIDwveHM6c2ltcGxlVHlwZT5cbiIgKwotICAgICAgICAgICAgIlxuIiArCi0gICAgICAgICAgICAiPC94czpzY2hlbWE+XG4iICsKLSAgICAgICAgICAgICIiOwotCi0gICAgICAgIFN0cmluZ1tdIHNjaGVtYXMgPSB7IHNjaGVtYSB9OwotCi0gICAgICAgIFNjaGVtYVR5cGVMb2FkZXIgc3RsID0gbWFrZVNjaGVtYVR5cGVMb2FkZXIoIHNjaGVtYXMgKTsKLQotICAgICAgICBYbWxPYmplY3QgeCA9Ci0gICAgICAgICAgICBzdGwucGFyc2UoCi0gICAgICAgICAgICAgICAgIjxhbnkgIiArIG5zICsgIiB4c2k6dHlwZT0na2luZGFQcmltZSc+MTAwPC9hbnk+IiwKLSAgICAgICAgICAgICAgICBudWxsLCBudWxsICk7Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSB1bnZhbGlkYXRlZCBzdHJlYW0gaXMgT0sKLQotICAgICAgICBYTUxJbnB1dFN0cmVhbSB4aXMgPSB4Lm5ld1hNTElucHV0U3RyZWFtKCk7Ci0KLSAgICAgICAgd2hpbGUgKCB4aXMuaGFzTmV4dCgpICkKLSAgICAgICAgICAgIHhpcy5uZXh0KCk7Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSB2YWxpZGF0ZWQgc3RyZWFtIGZhaWxzCi0KLSAgICAgICAgYm9vbGVhbiBibGV3Q2h1bmtzID0gZmFsc2U7Ci0KLSAgICAgICAgeGlzID0KLSAgICAgICAgICAgIHN0bC5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oCi0gICAgICAgICAgICAgICAgeC5uZXdYTUxJbnB1dFN0cmVhbSgpLCBudWxsLCBudWxsICk7Ci0KLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHdoaWxlICggeGlzLmhhc05leHQoKSApCi0gICAgICAgICAgICAgICAgeGlzLm5leHQoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoIFhNTFN0cmVhbVZhbGlkYXRpb25FeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJsZXdDaHVua3MgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoIGJsZXdDaHVua3MgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGU1ICggKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBTdHJpbmcgc2NoZW1hID0KLSAgICAgICAgICAgICI8eHM6c2NoZW1hIHhtbG5zOnhzPSdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSc+XG4iICsKLSAgICAgICAgICAgICJcbiIgKwotICAgICAgICAgICAgIiAgPHhzOmVsZW1lbnQgbmFtZT0naGVlJz5cbiIgKwotICAgICAgICAgICAgIiAgICA8eHM6Y29tcGxleFR5cGU+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6c2VxdWVuY2U+XG4iICsKLSAgICAgICAgICAgICIgICAgICAgIDx4czplbGVtZW50IG5hbWU9J2hhdycgdHlwZT0neHM6aW50Jy8+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8L3hzOnNlcXVlbmNlPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSd5ZWUnIHR5cGU9J3hzOmludCcvPlxuIiArCi0gICAgICAgICAgICAiICAgIDwveHM6Y29tcGxleFR5cGU+XG4iICsKLSAgICAgICAgICAgICIgIDwveHM6ZWxlbWVudD5cbiIgKwotICAgICAgICAgICAgIlxuIiArCi0gICAgICAgICAgICAiICA8eHM6c2ltcGxlVHlwZSBuYW1lPSdraW5kYVByaW1lJz5cbiIgKwotICAgICAgICAgICAgIiAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0neHM6ZGVjaW1hbCc+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6cGF0dGVybiB2YWx1ZT0nWzAtOV0qWzEzNTc5XScvPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSczJy8+XG4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9JzUnLz5cbiIgKwotICAgICAgICAgICAgIiAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0nNycvPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPScxMScvPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPScxMycvPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPScxNycvPlxuIiArCi0gICAgICAgICAgICAiICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPScxOScvPlxuIiArCi0gICAgICAgICAgICAiICAgIDwveHM6cmVzdHJpY3Rpb24+XG4iICsKLSAgICAgICAgICAgICIgIDwveHM6c2ltcGxlVHlwZT5cbiIgKwotICAgICAgICAgICAgIlxuIiArCi0gICAgICAgICAgICAiPC94czpzY2hlbWE+XG4iICsKLSAgICAgICAgICAgICIiOwotCi0gICAgICAgIFN0cmluZ1tdIHNjaGVtYXMgPSB7IHNjaGVtYSB9OwotCi0gICAgICAgIFNjaGVtYVR5cGVMb2FkZXIgc3RsID0gbWFrZVNjaGVtYVR5cGVMb2FkZXIoIHNjaGVtYXMgKTsKLQotICAgICAgICBYbWxPYmplY3QgeCA9Ci0gICAgICAgICAgICBzdGwucGFyc2UoCi0gICAgICAgICAgICAgICAgIjxoZWUgeWVlPSczJz48aGF3PjY2PC9oYXc+PC9oZWU+IiwKLSAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCApOwotCi0gICAgICAgIFhtbEN1cnNvciBjID0geC5uZXdDdXJzb3IoKTsKLQotICAgICAgICBmb3IgKCA7IDsgKQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxPYmplY3Qgb2JqID0gYy5nZXRPYmplY3QoKTsKLQotICAgICAgICAgICAgaWYgKG9iaiAhPSBudWxsKQotICAgICAgICAgICAgICAgIG9iai52YWxpZGF0ZSgpOwotCi0gICAgICAgICAgICBpZiAoYy50b05leHRUb2tlbigpLmlzTm9uZSgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gaW52YWxpZAotCi0gICAgICAgIHggPQotICAgICAgICAgICAgc3RsLnBhcnNlKAotICAgICAgICAgICAgICAgICI8aGVlIHllZT0nZml2ZSc+PGhhdz42NjwvaGF3PjwvaGVlPiIsCi0gICAgICAgICAgICAgICAgbnVsbCwgbnVsbCApOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCAhIHgudmFsaWRhdGUoKSApOwotCi0gICAgICAgIGMgPSB4Lm5ld0N1cnNvcigpOwotICAgICAgICBjLnRvTmV4dFRva2VuKCk7Ci0gICAgICAgIGMudG9OZXh0VG9rZW4oKTsKLQotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggISBjLmdldE9iamVjdCgpLnZhbGlkYXRlKCkgKTsKLQotICAgICAgICAvLyBObyBzY2hlbWEKLQotICAgICAgICB4ID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoICI8Zm9vIHg9J3knPmFzYXM8YmFyPmFzYXM8L2Jhcj48L2Zvbz4iICk7Ci0KLSAgICAgICAgYyA9IHgubmV3Q3Vyc29yKCk7Ci0KLSAgICAgICAgZm9yICggOyA7ICkKLSAgICAgICAgewotICAgICAgICAgICAgWG1sT2JqZWN0IG9iaiA9IGMuZ2V0T2JqZWN0KCk7Ci0KLSAgICAgICAgICAgIGlmIChvYmogIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBvYmoudmFsaWRhdGUoKTsKLQotICAgICAgICAgICAgaWYgKGMudG9OZXh0VG9rZW4oKS5pc05vbmUoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZTYgKCApCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFN0cmluZyBzY2hlbWEgPQotICAgICAgICAgICAgIjx4czpzY2hlbWEgeG1sbnM6eHM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJz5cbiIgKwotICAgICAgICAgICAgIiAgPHhzOmVsZW1lbnQgbmFtZT0naGVlJz5cbiIgKwotICAgICAgICAgICAgIiAgPC94czplbGVtZW50PlxuIiArCi0gICAgICAgICAgICAiPC94czpzY2hlbWE+XG4iICsKLSAgICAgICAgICAgICIiOwotCi0gICAgICAgIFN0cmluZ1tdIHNjaGVtYXMgPSB7IHNjaGVtYSwgc2NoZW1hIH07Ci0KLQotICAgICAgICAvLyBTaG91bGQgZ2V0IGEgc2NoZW1hIGNvbXBpbGUgZXJyb3IKLQotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgbWFrZVNjaGVtYVR5cGVMb2FkZXIoIHNjaGVtYXMgKTsKLSAgICAgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCBmYWxzZSApOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoICggWG1sRXhjZXB0aW9uIGUgKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGU3ICggKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBTdHJpbmcgc2NoZW1hID0KLSAgICAgICAgICAgICI8eHM6c2NoZW1hIHhtbG5zOnhzPSdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSc+IiArCi0gICAgICAgICAgICAiIiArCi0gICAgICAgICAgICAiICA8eHM6ZWxlbWVudCBuYW1lPSdiYXNlJyB0eXBlPSdiYXNlJy8+IiArCi0gICAgICAgICAgICAiIiArCi0gICAgICAgICAgICAiICA8eHM6Y29tcGxleFR5cGUgbmFtZT0nYmFzZSc+IiArCi0gICAgICAgICAgICAiICAgIDx4czpzZXF1ZW5jZT4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6ZWxlbWVudCBuYW1lPSdmb28nLz4iICsKLSAgICAgICAgICAgICIgICAgPC94czpzZXF1ZW5jZT4iICsKLSAgICAgICAgICAgICIgIDwveHM6Y29tcGxleFR5cGU+IiArCi0gICAgICAgICAgICAiIiArCi0gICAgICAgICAgICAiICA8eHM6Y29tcGxleFR5cGUgbmFtZT0nZGVyaXZlZCc+IiArCi0gICAgICAgICAgICAiICAgIDx4czpjb21wbGV4Q29udGVudD4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9J2Jhc2UnPiIgKwotICAgICAgICAgICAgIiAgICAgICAgPHhzOnNlcXVlbmNlPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSdiYXInLz4iICsKLSAgICAgICAgICAgICIgICAgICAgIDwveHM6c2VxdWVuY2U+IiArCi0gICAgICAgICAgICAiICAgICAgPC94czpleHRlbnNpb24+IiArCi0gICAgICAgICAgICAiICAgIDwveHM6Y29tcGxleENvbnRlbnQ+IiArCi0gICAgICAgICAgICAiICA8L3hzOmNvbXBsZXhUeXBlPiIgKwotICAgICAgICAgICAgIiIgKwotICAgICAgICAgICAgIjwveHM6c2NoZW1hPiIgKwotICAgICAgICAgICAgIiI7Ci0KLSAgICAgICAgU3RyaW5nW10gc2NoZW1hcyA9IHsgc2NoZW1hIH07Ci0KLSAgICAgICAgU2NoZW1hVHlwZUxvYWRlciBzdGwgPSBtYWtlU2NoZW1hVHlwZUxvYWRlciggc2NoZW1hcyApOwotCi0gICAgICAgIFhtbE9iamVjdCB4ID0KLSAgICAgICAgICAgIHN0bC5wYXJzZSgKLSAgICAgICAgICAgICAgICAiPGJhc2U+PGZvby8+PC9iYXNlPiIsIG51bGwsIG51bGwgKTsKLQotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZSggeC52YWxpZGF0ZSgpICk7Ci0KLSAgICAgICAgWG1sQ3Vyc29yIGMgPSB4Lm5ld0N1cnNvcigpOwotCi0gICAgICAgIGMudG9GaXJzdENoaWxkKCk7Ci0KLSAgICAgICAgWG1sT2JqZWN0IGJhc2UgPSBjLmdldE9iamVjdCgpOwotCi0gICAgICAgIGMudG9FbmRUb2tlbigpOwotICAgICAgICBjLmluc2VydEVsZW1lbnQoICJiYXIiICk7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoICF4LnZhbGlkYXRlKCkgKTsKLQotICAgICAgICBjLnRvUHJldlNpYmxpbmcoKTsKLQotICAgICAgICBjLnJlbW92ZVhtbCgpOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB4LnZhbGlkYXRlKCkgKTsKLQotICAgICAgICBiYXNlLmNoYW5nZVR5cGUoIHN0bC5maW5kVHlwZSggbmV3IFFOYW1lKCAiZGVyaXZlZCIgKSApICk7Ci0KLSAgICAgICAgYy5pbnNlcnRFbGVtZW50KCAiYmFyIiApOwotCi0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKCB4LnZhbGlkYXRlKCkgKTsKLSAgICB9Ci0KLSAgICAvLyBUZXN0cyBhYnN0cmFjdCAmIGJsb2NrIGF0dHJpYnV0ZXMgb24gQ29tcGxleFR5cGUKLSAgICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGU4KCkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgU3RyaW5nW10gc2NoZW1hcyA9IHsKLSAgICAgICAgICAgICI8eHM6c2NoZW1hIHhtbG5zOnhzPSdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSc+IiArCi0gICAgICAgICAgICAiIiArCi0gICAgICAgICAgICAiICA8eHM6ZWxlbWVudCBuYW1lPSdhYnN0cmFjdCcgdHlwZT0nYWJzdHJhY3QnLz4iICsKLSAgICAgICAgICAgICIgIDx4czplbGVtZW50IG5hbWU9J2Jhc2UnIHR5cGU9J2Jhc2UnLz4iICsKLSAgICAgICAgICAgICIiICsKLSAgICAgICAgICAgICIgIDx4czpjb21wbGV4VHlwZSBuYW1lPSdhYnN0cmFjdCcgYWJzdHJhY3Q9J3RydWUnLz4iICsKLSAgICAgICAgICAgICIiICsKLSAgICAgICAgICAgICIgIDx4czpjb21wbGV4VHlwZSBuYW1lPSdjb25jcmV0ZSc+IiArCi0gICAgICAgICAgICAiICAgIDx4czpjb21wbGV4Q29udGVudD4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9J2Fic3RyYWN0Jy8+IiArCi0gICAgICAgICAgICAiICAgIDwveHM6Y29tcGxleENvbnRlbnQ+IiArCi0gICAgICAgICAgICAiICA8L3hzOmNvbXBsZXhUeXBlPiIgKwotICAgICAgICAgICAgIiIgKwotICAgICAgICAgICAgIiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J2Jhc2UnIGJsb2NrPSdleHRlbnNpb24nLz4iICsKLSAgICAgICAgICAgICIiICsKLSAgICAgICAgICAgICIgIDx4czpjb21wbGV4VHlwZSBuYW1lPSdleHQnPiIgKwotICAgICAgICAgICAgIiAgICA8eHM6Y29tcGxleENvbnRlbnQ+IiArCi0gICAgICAgICAgICAiICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSdiYXNlJy8+IiArCi0gICAgICAgICAgICAiICAgIDwveHM6Y29tcGxleENvbnRlbnQ+IiArCi0gICAgICAgICAgICAiICA8L3hzOmNvbXBsZXhUeXBlPiIgKwotICAgICAgICAgICAgIiIgKwotICAgICAgICAgICAgIiAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J3Jlc3QnPiIgKwotICAgICAgICAgICAgIiAgICA8eHM6Y29tcGxleENvbnRlbnQ+IiArCi0gICAgICAgICAgICAiICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9J2Jhc2UnLz4iICsKLSAgICAgICAgICAgICIgICAgPC94czpjb21wbGV4Q29udGVudD4iICsKLSAgICAgICAgICAgICIgIDwveHM6Y29tcGxleFR5cGU+IiArCi0gICAgICAgICAgICAiIiArCi0gICAgICAgICAgICAiPC94czpzY2hlbWE+IiArCi0gICAgICAgICAgICAiIiwKLSAgICAgICAgfTsKLQotICAgICAgICBTdHJpbmcgeHNpVHlwZSA9ICIgeG1sbnM6eHNpPSdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZScgIjsKLQotICAgICAgICBTdHJpbmdbXSB2YWxpZCA9IHsKLSAgICAgICAgICAgICI8YWJzdHJhY3QiICsgeHNpVHlwZSArICJ4c2k6dHlwZT0nY29uY3JldGUnLz4iLAotICAgICAgICAgICAgIjxiYXNlLz4iLAotICAgICAgICAgICAgIjxiYXNlIiArIHhzaVR5cGUgKyAieHNpOnR5cGU9J3Jlc3QnLz4iLAotICAgICAgICB9OwotICAgICAgICBTdHJpbmdbXSBpbnZhbGlkID0gewotICAgICAgICAgICAgIjxhYnN0cmFjdC8+IiwKLSAgICAgICAgICAgICI8YmFzZSIgKyB4c2lUeXBlICsgInhzaTp0eXBlPSdleHQnLz4iLAotICAgICAgICB9OwotCi0gICAgICAgIGRvVGVzdChzY2hlbWFzLCBudWxsLCB2YWxpZCwgaW52YWxpZCk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlOSgpIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0KLSAgICAgICAgU3RyaW5nW10gc2NoZW1hcyA9IHsKLSAgICAgICAgICAgICI8eHM6c2NoZW1hIHhtbG5zOnhzPSdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSc+IiArCi0gICAgICAgICAgICAiICAgPHhzOmVsZW1lbnQgbmFtZT0nb3JkZXInIHR5cGU9J09yZGVyVHlwZSc+IiArCi0gICAgICAgICAgICAiICAgICAgIDx4czprZXlyZWYgbmFtZT0ncHJvZE51bUtleVJlZicgcmVmZXI9J3Byb2ROdW1LZXknPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgPHhzOnNlbGVjdG9yIHhwYXRoPSdpdGVtcy8qJy8+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICA8eHM6ZmllbGQgeHBhdGg9J0BudW1iZXInLz4iICsKLSAgICAgICAgICAgICIgICAgICAgPC94czprZXlyZWY+IiArCi0gICAgICAgICAgICAiICAgICAgIDx4czprZXkgbmFtZT0ncHJvZE51bUtleSc+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICA8eHM6c2VsZWN0b3IgeHBhdGg9Jy4vL3Byb2R1Y3QnLz4iICsKLSAgICAgICAgICAgICIgICAgICAgICAgIDx4czpmaWVsZCB4cGF0aD0nbnVtYmVyJy8+IiArCi0gICAgICAgICAgICAiICAgICAgIDwveHM6a2V5PiIgKwotICAgICAgICAgICAgIiAgIDwveHM6ZWxlbWVudD4iICsKLQotICAgICAgICAgICAgIiAgIDx4czpjb21wbGV4VHlwZSBuYW1lPSdPcmRlclR5cGUnPiIgKwotICAgICAgICAgICAgIiAgICAgICA8eHM6c2VxdWVuY2U+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSdpdGVtcyc+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgICAgPHhzOmNvbXBsZXhUeXBlPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICA8eHM6c2VxdWVuY2U+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSdpdGVtJyB0eXBlPSdJdGVtVHlwZScgbWluT2NjdXJzPScwJyBtYXhPY2N1cnM9J3VuYm91bmRlZCcvPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICA8L3hzOnNlcXVlbmNlPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgICAgIDwveHM6Y29tcGxleFR5cGU+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICA8L3hzOmVsZW1lbnQ+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSdwcm9kdWN0cyc+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgICAgPHhzOmNvbXBsZXhUeXBlPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICA8eHM6c2VxdWVuY2U+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSdwcm9kdWN0JyB0eXBlPSdQcm9kdWN0VHlwZScgbWF4T2NjdXJzPSd1bmJvdW5kZWQnIG1pbk9jY3Vycz0nMCcvPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICA8L3hzOnNlcXVlbmNlPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgICAgIDwveHM6Y29tcGxleFR5cGU+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICA8L3hzOmVsZW1lbnQ+IiArCi0gICAgICAgICAgICAiICAgICAgIDwveHM6c2VxdWVuY2U+IiArCi0gICAgICAgICAgICAiICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0nbnVtYmVyJyB0eXBlPSd4czpzdHJpbmcnLz4iICsKLSAgICAgICAgICAgICIgICA8L3hzOmNvbXBsZXhUeXBlPiIgKwotCi0gICAgICAgICAgICAiICAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J0l0ZW1UeXBlJz4iICsKLSAgICAgICAgICAgICIgICAgICAgPHhzOnNlcXVlbmNlPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ncXVhbnRpdHknIHR5cGU9J3hzOmludCcvPiIgKwotICAgICAgICAgICAgIiAgICAgICA8L3hzOnNlcXVlbmNlPiIgKwotICAgICAgICAgICAgIiAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9J251bWJlcicgdHlwZT0neHM6aW50Jy8+IiArCi0gICAgICAgICAgICAiICAgPC94czpjb21wbGV4VHlwZT4iICsKLQotICAgICAgICAgICAgIiAgIDx4czpjb21wbGV4VHlwZSBuYW1lPSdQcm9kdWN0VHlwZSc+IiArCi0gICAgICAgICAgICAiICAgICAgIDx4czpzZXF1ZW5jZT4iICsKLSAgICAgICAgICAgICIgICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9J251bWJlcicgdHlwZT0neHM6aW50JyBtaW5PY2N1cnM9JzAnLz4iICsKLSAgICAgICAgICAgICIgICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9J25hbWUnIHR5cGU9J3hzOnN0cmluZycvPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ncHJpY2UnPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgICAgIDx4czpjb21wbGV4VHlwZT4iICsKLSAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgPHhzOnNpbXBsZUNvbnRlbnQ+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9J3hzOmRlY2ltYWwnPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0nY3VycmVuY3knIHR5cGU9J3hzOnN0cmluZycvPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgPC94czpleHRlbnNpb24+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgIDwveHM6c2ltcGxlQ29udGVudD4iICsKLSAgICAgICAgICAgICIgICAgICAgICAgICAgICA8L3hzOmNvbXBsZXhUeXBlPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgPC94czplbGVtZW50PiIgKwotICAgICAgICAgICAgIiAgICAgICA8L3hzOnNlcXVlbmNlPiIgKwotICAgICAgICAgICAgIiAgIDwveHM6Y29tcGxleFR5cGU+IiArCi0gICAgICAgICAgICAiPC94czpzY2hlbWE+ICIsCi0KLSAgICAgICAgICAgICI8eHNkOnNjaGVtYSB4bWxuczp4c2Q9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJz4iICsKLQotICAgICAgICAgICAgIiAgICA8eHNkOmVsZW1lbnQgbmFtZT0ncm9vdCcgdHlwZT0nUm9vdFR5cGUnPiIgKwotICAgICAgICAgICAgIiAgICAgICAgPHhzZDprZXkgbmFtZT0nRm9vSWQnPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9Jy4vL3N0cmluZ3wuLy90b2tlbnwuLy9pbnQnLz4iICsKLSAgICAgICAgICAgICIgICAgICAgICAgICA8eHNkOmZpZWxkIHhwYXRoPSdAaWQnLz4iICsKLSAgICAgICAgICAgICIgICAgICAgIDwveHNkOmtleT4iICsKLSAgICAgICAgICAgICIgICAgPC94c2Q6ZWxlbWVudD4iICsKLQotICAgICAgICAgICAgIiAgICA8eHNkOmdyb3VwIG5hbWU9J2dyb3VwJz4iICsKLSAgICAgICAgICAgICIgICAgICAgIDx4c2Q6Y2hvaWNlPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9J3N0cmluZycvPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCByZWY9J3Rva2VuJy8+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0naW50Jy8+IiArCi0gICAgICAgICAgICAiICAgICAgICA8L3hzZDpjaG9pY2U+IiArCi0gICAgICAgICAgICAiICAgIDwveHNkOmdyb3VwPiIgKwotCi0gICAgICAgICAgICAiICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0nUm9vdFR5cGUnPiIgKwotICAgICAgICAgICAgIiAgICAgICAgPHhzZDpncm91cCByZWY9J2dyb3VwJyBtaW5PY2N1cnM9JzAnIG1heE9jY3Vycz0ndW5ib3VuZGVkJy8+IiArCi0gICAgICAgICAgICAiICAgIDwveHNkOmNvbXBsZXhUeXBlPiIgKwotCi0gICAgICAgICAgICAiICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSdzdHJpbmcnPiIgKwotICAgICAgICAgICAgIiAgICAgICA8eHNkOmNvbXBsZXhUeXBlPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgIDx4c2Q6Z3JvdXAgcmVmPSdncm91cCcgbWluT2NjdXJzPScwJyBtYXhPY2N1cnM9J3VuYm91bmRlZCcvPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9J2lkJyB0eXBlPSd4c2Q6c3RyaW5nJy8+IiArCi0gICAgICAgICAgICAiICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4iICsKLSAgICAgICAgICAgICIgICAgPC94c2Q6ZWxlbWVudD4iICsKLQotICAgICAgICAgICAgIiAgICA8eHNkOmVsZW1lbnQgbmFtZT0naW50Jz4iICsKLSAgICAgICAgICAgICIgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgPHhzZDpncm91cCByZWY9J2dyb3VwJyBtaW5PY2N1cnM9JzAnIG1heE9jY3Vycz0ndW5ib3VuZGVkJy8+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0naWQnIHR5cGU9J3hzZDppbnQnLz4iICsKLSAgICAgICAgICAgICIgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPiIgKwotICAgICAgICAgICAgIiAgICA8L3hzZDplbGVtZW50PiIgKwotCi0gICAgICAgICAgICAiICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSd0b2tlbic+IiArCi0gICAgICAgICAgICAiICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgIDx4c2Q6Z3JvdXAgcmVmPSdncm91cCcgbWluT2NjdXJzPScwJyBtYXhPY2N1cnM9J3VuYm91bmRlZCcvPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9J2lkJyB0eXBlPSd4c2Q6dG9rZW4nLz4iICsKLSAgICAgICAgICAgICIgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPiIgKwotICAgICAgICAgICAgIiAgICA8L3hzZDplbGVtZW50PiIgKwotCi0gICAgICAgICAgICAiPC94c2Q6c2NoZW1hPiIsCi0KLSAgICAgICAgICAgICI8eHNkOnNjaGVtYSB4bWxuczp4c2Q9J2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJyAiICsKLSAgICAgICAgICAgICIgICAgdGFyZ2V0TmFtZXNwYWNlPSdodHRwOi8vd3d3LnRpbS1oYW5zb24uY29tLycgeG1sbnM6dGg9J2h0dHA6Ly93d3cudGltLWhhbnNvbi5jb20vJyAiICsKLSAgICAgICAgICAgICIgICAgYXR0cmlidXRlRm9ybURlZmF1bHQ9J3F1YWxpZmllZCcgZWxlbWVudEZvcm1EZWZhdWx0PSdxdWFsaWZpZWQnPiIgKwotCi0gICAgICAgICAgICAiICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSdyb290Jz4iICsKLSAgICAgICAgICAgICIgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4iICsKLSAgICAgICAgICAgICIgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9J2ZvbycgbWF4T2NjdXJzPSd1bmJvdW5kZWQnPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4iICsKLSAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHNkOmludCcvPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+IiArCi0gICAgICAgICAgICAiICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4iICsKLSAgICAgICAgICAgICIgICAgICAgIDx4c2Q6a2V5IG5hbWU9J2lkJz4iICsKLSAgICAgICAgICAgICIgICAgICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPScuL3RoOmZvbycvPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgIDx4c2Q6ZmllbGQgeHBhdGg9J0B0aDppZCcvPiIgKwotICAgICAgICAgICAgIiAgICAgICAgPC94c2Q6a2V5PiIgKwotICAgICAgICAgICAgIiAgICA8L3hzZDplbGVtZW50PiIgKwotICAgICAgICAgICAgIjwveHNkOnNjaGVtYT4iLAotCi0gICAgICAgICAgICAiPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYScgPiIgKwotICAgICAgICAgICAgIiAgICA8eHNkOmVsZW1lbnQgbmFtZT0naWR0ZXN0Jz4iICsKLSAgICAgICAgICAgICIgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9J3VuYm91bmRlZCc+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgICAgIDx4c2Q6Y2hvaWNlPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9J2lkJyBtYXhPY2N1cnM9J3VuYm91bmRlZCcgdHlwZT0neHNkOklEJy8+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0naWRyZWYnIG1heE9jY3Vycz0ndW5ib3VuZGVkJyB0eXBlPSd4c2Q6SURSRUYnLz4iICsKLSAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSdpZHJlZnMnIG1heE9jY3Vycz0ndW5ib3VuZGVkJyB0eXBlPSd4c2Q6SURSRUZTJy8+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgICAgIDwveHNkOmNob2ljZT4iICsKLSAgICAgICAgICAgICIgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4iICsKLSAgICAgICAgICAgICIgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPiIgKwotICAgICAgICAgICAgIiAgICA8L3hzZDplbGVtZW50PiIgKwotICAgICAgICAgICAgIjwveHNkOnNjaGVtYT4iLAotCi0gICAgICAgIH07Ci0KLSAgICAgICAgU3RyaW5nW10gdmFsaWQgPSB7Ci0gICAgICAgICAgICAiPG9yZGVyPiIgKwotICAgICAgICAgICAgIiAgICA8aXRlbXM+IiArCi0gICAgICAgICAgICAiICAgICAgPGl0ZW0gbnVtYmVyPScxMjQgJz4iICsKLSAgICAgICAgICAgICIgICAgICAgICAgPHF1YW50aXR5PjE8L3F1YW50aXR5PiIgKwotICAgICAgICAgICAgIiAgICAgIDwvaXRlbT4iICsKLSAgICAgICAgICAgICIgICAgICA8aXRlbSBudW1iZXI9JzU2Myc+IiArCi0gICAgICAgICAgICAiICAgICAgICAgIDxxdWFudGl0eT4xPC9xdWFudGl0eT4iICsKLSAgICAgICAgICAgICIgICAgICA8L2l0ZW0+IiArCi0gICAgICAgICAgICAiICAgIDwvaXRlbXM+IiArCi0gICAgICAgICAgICAiICAgIDxwcm9kdWN0cz4iICsKLSAgICAgICAgICAgICIgICAgICAgIDxwcm9kdWN0PiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgIDxudW1iZXI+IDEyNDwvbnVtYmVyPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgIDxuYW1lPlNoaXJ0PC9uYW1lPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgIDxwcmljZSBjdXJyZW5jeT0nVVNEJz4yOS45OTwvcHJpY2U+IiArCi0gICAgICAgICAgICAiICAgICAgICA8L3Byb2R1Y3Q+IiArCi0gICAgICAgICAgICAiICAgICAgICA8cHJvZHVjdD4iICsKLSAgICAgICAgICAgICIgICAgICAgICAgICA8bnVtYmVyPjU2MzwvbnVtYmVyPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgIDxuYW1lPkhhdDwvbmFtZT4iICsKLSAgICAgICAgICAgICIgICAgICAgICAgICA8cHJpY2UgY3VycmVuY3k9J1VTRCc+NjkuOTk8L3ByaWNlPiIgKwotICAgICAgICAgICAgIiAgICAgICAgPC9wcm9kdWN0PiIgKwotICAgICAgICAgICAgIiAgICAgICAgPHByb2R1Y3Q+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgPG51bWJlcj40NDM8L251bWJlcj4iICsKLSAgICAgICAgICAgICIgICAgICAgICAgICA8bmFtZT5VbWJyZWxsYTwvbmFtZT4iICsKLSAgICAgICAgICAgICIgICAgICAgICAgICA8cHJpY2UgY3VycmVuY3k9J1VTRCc+NDkuOTk8L3ByaWNlPiIgKwotICAgICAgICAgICAgIiAgICAgICAgPC9wcm9kdWN0PiIgKwotICAgICAgICAgICAgIiAgICA8L3Byb2R1Y3RzPiIgKwotICAgICAgICAgICAgIjwvb3JkZXI+IiwKLQotICAgICAgICAgICAgIjxyb290PiIgKwotICAgICAgICAgICAgIiAgICA8c3RyaW5nIGlkPSdmb28xJz4iICsKLSAgICAgICAgICAgICIgICAgICAgIDxzdHJpbmcgaWQ9J2ZvbzInPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgIDxzdHJpbmcgaWQ9J2ZvbzMnPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgICAgICA8c3RyaW5nIGlkPSdmb282Jz4iICsKLSAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgIDxzdHJpbmcgaWQ9J2ZvbzcnPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmcgaWQ9J2ZvbzgnLz4iICsKLSAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgIDwvc3RyaW5nPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgICAgICA8L3N0cmluZz4iICsKLSAgICAgICAgICAgICIgICAgICAgICAgICA8L3N0cmluZz4iICsKLSAgICAgICAgICAgICIgICAgICAgICAgICA8c3RyaW5nIGlkPSdmb280Jy8+IiArCi0gICAgICAgICAgICAiICAgICAgICA8L3N0cmluZz4iICsKLSAgICAgICAgICAgICIgICAgICAgIDxzdHJpbmcgaWQ9J2ZvbzknLz4iICsKLSAgICAgICAgICAgICIgICAgPC9zdHJpbmc+IiArCi0gICAgICAgICAgICAiPC9yb290PiIsCi0KLSAgICAgICAgICAgICI8cm9vdD4iICsKLSAgICAgICAgICAgICIgICAgPGludCBpZD0nMScvPiIgKwotICAgICAgICAgICAgIiAgICA8c3RyaW5nIGlkPScxJy8+IiArCi0gICAgICAgICAgICAiPC9yb290PiIsCi0KLSAgICAgICAgICAgICI8eHl6OnJvb3QgeG1sbnM6eHl6PSdodHRwOi8vd3d3LnRpbS1oYW5zb24uY29tLyc+IiArCi0gICAgICAgICAgICAiICA8eHl6OmZvbyB4eXo6aWQ9JzEnLz4iICsKLSAgICAgICAgICAgICIgIDx4eXo6Zm9vIHh5ejppZD0nMicvPiIgKwotICAgICAgICAgICAgIiAgPHh5ejpmb28geHl6OmlkPSczJy8+IiArCi0gICAgICAgICAgICAiPC94eXo6cm9vdD4iLAotCi0gICAgICAgICAgICAiPGlkdGVzdD4iICsKLSAgICAgICAgICAgICIgIDxpZHJlZj54eXo8L2lkcmVmPiIgKwotICAgICAgICAgICAgIiAgPGlkcmVmcz5hYmMgZGVmPC9pZHJlZnM+IiArCi0gICAgICAgICAgICAiICA8aWQ+YWJjPC9pZD4iICsKLSAgICAgICAgICAgICIgIDxpZD5kZWY8L2lkPiIgKwotICAgICAgICAgICAgIiAgPGlkPnh5ejwvaWQ+IiArCi0gICAgICAgICAgICAiICA8aWRyZWY+YWJjPC9pZHJlZj4iICsKLSAgICAgICAgICAgICIgIDxpZHJlZnM+eHl6IGFiYzwvaWRyZWZzPiIgKwotICAgICAgICAgICAgIjwvaWR0ZXN0PiIsCi0gICAgICAgIH07Ci0KLSAgICAgICAgU3RyaW5nW10gaW52YWxpZCA9IHsKLSAgICAgICAgICAgICI8b3JkZXI+IiArCi0gICAgICAgICAgICAiICAgIDxpdGVtcz4iICsKLSAgICAgICAgICAgICIgICAgICA8aXRlbSBudW1iZXI9JzEyNSAnPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICA8cXVhbnRpdHk+MTwvcXVhbnRpdHk+IiArCi0gICAgICAgICAgICAiICAgICAgPC9pdGVtPiIgKwotICAgICAgICAgICAgIiAgICAgIDxpdGVtIG51bWJlcj0nNTYzJz4iICsKLSAgICAgICAgICAgICIgICAgICAgICAgPHF1YW50aXR5PjE8L3F1YW50aXR5PiIgKwotICAgICAgICAgICAgIiAgICAgIDwvaXRlbT4iICsKLSAgICAgICAgICAgICIgICAgPC9pdGVtcz4iICsKLSAgICAgICAgICAgICIgICAgPHByb2R1Y3RzPiIgKwotICAgICAgICAgICAgIiAgICAgICAgPHByb2R1Y3Q+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgPG51bWJlcj4gMTI0PC9udW1iZXI+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgPG5hbWU+U2hpcnQ8L25hbWU+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgPHByaWNlIGN1cnJlbmN5PSdVU0QnPjI5Ljk5PC9wcmljZT4iICsKLSAgICAgICAgICAgICIgICAgICAgIDwvcHJvZHVjdD4iICsKLSAgICAgICAgICAgICIgICAgICAgIDxwcm9kdWN0PiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgIDxudW1iZXI+NTYzPC9udW1iZXI+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgPG5hbWU+SGF0PC9uYW1lPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgIDxwcmljZSBjdXJyZW5jeT0nVVNEJz42OS45OTwvcHJpY2U+IiArCi0gICAgICAgICAgICAiICAgICAgICA8L3Byb2R1Y3Q+IiArCi0gICAgICAgICAgICAiICAgICAgICA8cHJvZHVjdD4iICsKLSAgICAgICAgICAgICIgICAgICAgICAgICA8bnVtYmVyPjQ0MzwvbnVtYmVyPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgIDxuYW1lPlVtYnJlbGxhPC9uYW1lPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgIDxwcmljZSBjdXJyZW5jeT0nVVNEJz40OS45OTwvcHJpY2U+IiArCi0gICAgICAgICAgICAiICAgICAgICA8L3Byb2R1Y3Q+IiArCi0gICAgICAgICAgICAiICAgIDwvcHJvZHVjdHM+IiArCi0gICAgICAgICAgICAiPC9vcmRlcj4iLAotCi0gICAgICAgICAgICAiPHJvb3Q+IiArCi0gICAgICAgICAgICAiICAgIDx0b2tlbiB0b2tlbj0nICBibGFoICBibGFoJy8+IiArCi0gICAgICAgICAgICAiICAgIDxzdHJpbmcgaWQ9J2JsYWggYmxhaCcvPiIgKwotICAgICAgICAgICAgIjwvcm9vdD4iLAotCi0gICAgICAgICAgICAiPHJvb3Q+IiArCi0gICAgICAgICAgICAiICAgIDxzdHJpbmcgaWQ9J2ZvbzEnPiIgKwotICAgICAgICAgICAgIiAgICAgICAgPHN0cmluZyBpZD0nZm9vMic+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgPHN0cmluZyBpZD0nZm9vMyc+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgICAgIDxzdHJpbmcgaWQ9J2ZvbzYnPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgPHN0cmluZyBpZD0nZm9vNyc+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmluZyBpZD0nZm9vMycvPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgPC9zdHJpbmc+IiArCi0gICAgICAgICAgICAiICAgICAgICAgICAgICAgIDwvc3RyaW5nPiIgKwotICAgICAgICAgICAgIiAgICAgICAgICAgIDwvc3RyaW5nPiIgKwotICAgICAgICAgICAgIiAgICAgICAgPC9zdHJpbmc+IiArCi0gICAgICAgICAgICAiICAgIDwvc3RyaW5nPiIgKwotICAgICAgICAgICAgIjwvcm9vdD4iLAotCi0gICAgICAgICAgICAiPHh5ejpyb290IHhtbG5zOnh5ej0naHR0cDovL3d3dy50aW0taGFuc29uLmNvbS8nPiIgKwotICAgICAgICAgICAgIiAgPHh5ejpmb28geHl6OmlkPScxJy8+IiArCi0gICAgICAgICAgICAiICA8eHl6OmZvbyB4eXo6aWQ9JzInLz4iICsKLSAgICAgICAgICAgICIgIDx4eXo6Zm9vIHh5ejppZD0nMicvPiIgKwotICAgICAgICAgICAgIjwveHl6OnJvb3Q+IiwKLSAgICAgICAgfTsKLQotICAgICAgICBTdHJpbmdbXSBpbnZhbGlkT25Eb2NPbmx5ID0gbmV3IFN0cmluZ1tdCi0gICAgICAgIHsKLQotICAgICAgICAgICAgIjxpZHRlc3Q+IiArCi0gICAgICAgICAgICAiICA8aWRyZWY+Zm9vPC9pZHJlZj4iICsKLSAgICAgICAgICAgICIgIDxpZD5hYmM8L2lkPiIgKwotICAgICAgICAgICAgIiAgPGlkPmRlZjwvaWQ+IiArCi0gICAgICAgICAgICAiICA8aWQ+eHl6PC9pZD4iICsKLSAgICAgICAgICAgICI8L2lkdGVzdD4iLAotCi0gICAgICAgICAgICAiPGlkdGVzdD4iICsKLSAgICAgICAgICAgICIgIDxpZHJlZnM+YWJjIGZvbzwvaWRyZWZzPiIgKwotICAgICAgICAgICAgIiAgPGlkPmFiYzwvaWQ+IiArCi0gICAgICAgICAgICAiICA8aWQ+ZGVmPC9pZD4iICsKLSAgICAgICAgICAgICIgIDxpZD54eXo8L2lkPiIgKwotICAgICAgICAgICAgIjwvaWR0ZXN0PiIsCi0gICAgICAgIH07Ci0KLQotICAgICAgICBkb1Rlc3Qoc2NoZW1hcywgbnVsbCwgdmFsaWQsIGludmFsaWQsIHRydWUpOwotICAgICAgICBkb1Rlc3Qoc2NoZW1hcywgbnVsbCwgdmFsaWQsIGludmFsaWQsIGZhbHNlKTsKLQotICAgICAgICAgLy8gSURSZWZzIGFyZSB2YWxpZGF0ZWQgb25seSBpZiBzdGFydGluZyBhdCB0aGUgdmVyeSByb290IG9mIHRoZSB3b3JsZAotICAgICAgICBkb1Rlc3Qoc2NoZW1hcywgbnVsbCwgbmV3IFN0cmluZ1swXSwgaW52YWxpZE9uRG9jT25seSwgdHJ1ZSk7Ci0gICAgICAgIGRvVGVzdChzY2hlbWFzLCBudWxsLCBpbnZhbGlkT25Eb2NPbmx5LCBuZXcgU3RyaW5nWzBdLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgLy8gVGVzdCB2YWxpZGF0aW9uIG9mIHNldHRpbmcgd2l0aCB0aGUgVmFsaWRhdGVPblNldCBvcHRpb24KLSAgICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGUxMCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTdHJpbmcgc2NoZW1hID0KLSAgICAgICAgICAgICI8eHM6c2NoZW1hIHhtbG5zOnhzPSdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSc+XG4iICsKLSAgICAgICAgICAgICIgIDx4czpzaW1wbGVUeXBlIG5hbWU9J2RlYy1yZXN0cmljdGlvbic+IiArCi0gICAgICAgICAgICAiICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSd4czpkZWNpbWFsJz4iICsKLSAgICAgICAgICAgICIgICAgICA8eHM6bWF4RXhjbHVzaXZlIHZhbHVlPScxMDAnLz4iICsKLSAgICAgICAgICAgICIgICAgPC94czpyZXN0cmljdGlvbj4iICsKLSAgICAgICAgICAgICIgIDwveHM6c2ltcGxlVHlwZT4iICsKLSAgICAgICAgICAgICI8L3hzOnNjaGVtYT4iICsKLSAgICAgICAgICAgICIiOwotICAgICAgICAKLSAgICAgICAgU3RyaW5nW10gc2NoZW1hcyA9IHsgc2NoZW1hIH07Ci0gICAgICAgIAotICAgICAgICBTY2hlbWFUeXBlTG9hZGVyIHN0bCA9IG1ha2VTY2hlbWFUeXBlTG9hZGVyKCBzY2hlbWFzICk7Ci0KLSAgICAgICAgWG1sT3B0aW9ucyB2YWxpZGF0ZSA9IG5ldyBYbWxPcHRpb25zKCkuc2V0VmFsaWRhdGVPblNldCgpOwotICAgICAgICBYbWxPcHRpb25zIG5vVmFsaWRhdGUgPSBuZXcgWG1sT3B0aW9ucygpOwotCi0gICAgICAgIFNjaGVtYVR5cGUgc3QgPSBzdGwuZmluZFR5cGUobmV3IFFOYW1lKCIiLCAiZGVjLXJlc3RyaWN0aW9uIikpOwotCi0gICAgICAgIFhtbERlY2ltYWwgZGVjID0gKFhtbERlY2ltYWwpc3RsLm5ld0luc3RhbmNlKHN0LCB2YWxpZGF0ZSk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGRlYy5zZXQoIjIwMCIpOwotICAgICAgICAgICAgZmFpbCgiRXhwZWN0ZWQgWG1sVmFsdWVPdXRPZlJhbmdlRXhjZXB0aW9uIik7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFhtbFZhbHVlT3V0T2ZSYW5nZUV4Y2VwdGlvbiBlKSB7fQotCi0gICAgICAgIGRlYyA9IChYbWxEZWNpbWFsKXN0bC5uZXdJbnN0YW5jZShzdCwgbm9WYWxpZGF0ZSk7Ci0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGRlYy5zZXQoIjIwMCIpOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChYbWxWYWx1ZU91dE9mUmFuZ2VFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgZmFpbCgiU2hvdWxkIG5vdCB0aHJvdyBleGNlcHRpb24iKTsKLSAgICAgICAgfQotCi0gICAgfQotCi19CmRpZmYgLS1naXQgYS92Mi90ZXN0L3NyYy9lYXN5cG8vZWFzeXBvLnhzZCBiL3YyL3Rlc3Qvc3JjL2Vhc3lwby9lYXN5cG8ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjljNjhjLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3Qvc3JjL2Vhc3lwby9lYXN5cG8ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPHhzOnNjaGVtYQotICAgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgeG1sbnM6cG89Imh0dHA6Ly9vcGVudXJpLm9yZy9lYXN5cG8iCi0gICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9vcGVudXJpLm9yZy9lYXN5cG8iCi0gICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0KLSAgPHhzOmVsZW1lbnQgbmFtZT0icHVyY2hhc2Utb3JkZXIiPgotICAgIDx4czpjb21wbGV4VHlwZT4KLSAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iY3VzdG9tZXIiIHR5cGU9InBvOmN1c3RvbWVyIi8+Ci0gICAgICAgIDx4czplbGVtZW50IG5hbWU9ImRhdGUiIHR5cGU9InhzOmRhdGVUaW1lIi8+Ci0gICAgICAgIDx4czplbGVtZW50IG5hbWU9ImxpbmUtaXRlbSIgdHlwZT0icG86bGluZS1pdGVtIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4czplbGVtZW50IG5hbWU9InNoaXBwZXIiIHR5cGU9InBvOnNoaXBwZXIiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+Ci0gICAgICA8L3hzOnNlcXVlbmNlPgotICAgIDwveHM6Y29tcGxleFR5cGU+Ci0gIDwveHM6ZWxlbWVudD4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iY3VzdG9tZXIiPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgIDx4czplbGVtZW50IG5hbWU9Im5hbWUiIHR5cGU9InhzOnN0cmluZyIvPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iYWRkcmVzcyIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFnZSIgdHlwZT0ieHM6aW50Ii8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtb28iIHR5cGU9InhzOmludCIgZGVmYXVsdD0iMTAwIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwb28iIHR5cGU9InhzOmludCIgZml4ZWQ9IjIwMCIvPgotICA8L3hzOmNvbXBsZXhUeXBlPgotCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJsaW5lLWl0ZW0iPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgIDx4czplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICAgIDx4czplbGVtZW50IG5hbWU9InBlci11bml0LW91bmNlcyIgdHlwZT0ieHM6ZGVjaW1hbCIvPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icHJpY2UiIHR5cGU9InhzOmRlY2ltYWwiLz4KLSAgICAgIDx4czplbGVtZW50IG5hbWU9InF1YW50aXR5IiB0eXBlPSJ4czppbnRlZ2VyIi8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ic2hpcHBlciI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJwZXItb3VuY2UtcmF0ZSIgdHlwZT0ieHM6ZGVjaW1hbCIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9zcmMvZWFzeXBvL2Vhc3lwby54c2Rjb25maWcgYi92Mi90ZXN0L3NyYy9lYXN5cG8vZWFzeXBvLnhzZGNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFkYjY4NS4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L3NyYy9lYXN5cG8vZWFzeXBvLnhzZGNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTx4Yjpjb25maWcgeG1sbnM6eGI9Imh0dHA6Ly93d3cuYmVhLmNvbS8yMDAyLzA5L3hiZWFuL2NvbmZpZyIKLSAgICAgICAgICAgeG1sbnM6ZXA9Imh0dHA6Ly9vcGVudXJpLm9yZy9lYXN5cG8iPgotCi0gIDx4YjpuYW1lc3BhY2UgdXJpPSJodHRwOi8vb3BlbnVyaS5vcmcvZWFzeXBvIj4KLSAgICA8eGI6cGFja2FnZT5jb20uZWFzeXBvPC94YjpwYWNrYWdlPgotICA8L3hiOm5hbWVzcGFjZT4KLQotICA8eGI6bmFtZXNwYWNlIHVyaT0iIyNhbnkiPgotICAgIDx4YjpwcmVmaXg+WG1sPC94YjpwcmVmaXg+Ci0gICAgPHhiOnN1ZmZpeD5CZWFuPC94YjpzdWZmaXg+Ci0gIDwveGI6bmFtZXNwYWNlPgotCi08L3hiOmNvbmZpZz4KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL2Vhc3lwb3VzZS9jb20vYmVhL3Rlc3QvTG9hZEFuZFVzZVBvLmphdmEgYi92Mi90ZXN0L3NyYy9lYXN5cG91c2UvY29tL2JlYS90ZXN0L0xvYWRBbmRVc2VQby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGU0ODFkLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3Qvc3JjL2Vhc3lwb3VzZS9jb20vYmVhL3Rlc3QvTG9hZEFuZFVzZVBvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBjb20uYmVhLnRlc3Q7Ci0KLWltcG9ydCB4bWwudXRpbC4qOwotaW1wb3J0IG9yZy5vcGVudXJpLmVhc3lwby4qOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotCi1wdWJsaWMgY2xhc3MgTG9hZEFuZFVzZVBvCi17Ci0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PT09PT09PT09PT09PT09PT09PT0iKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTG9hZGluZyBmaWxlICIgKyBhcmdzW2ldKTsKLSAgICAgICAgICAgIHN1bW1hcml6ZVBvRG9jdW1lbnQoUHVyY2hhc2VPcmRlckRvY3VtZW50LkZhY3RvcnkucGFyc2UobmV3IEZpbGUoYXJnc1tpXSkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzdW1tYXJpemVQb0RvY3VtZW50KFB1cmNoYXNlT3JkZXJEb2N1bWVudCBkb2MpCi0gICAgewotICAgICAgICBQdXJjaGFzZU9yZGVyIG9yZGVyID0gZG9jLmdldFB1cmNoYXNlT3JkZXIoKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDdXN0b21lcjogIiArIG9yZGVyLmdldEN1c3RvbWVyKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBZGRyZXNzOiAgIiArIG9yZGVyLmdldEN1c3RvbWVyKCkuZ2V0QWRkcmVzcygpKTsKLSAgICAgICAgTGluZUl0ZW1bXSBpdGVtID0gb3JkZXIuZ2V0TGluZUl0ZW0oKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSXRlbSBkZXNjcmlwdGlvbjogIiArIGl0ZW1baV0uZ2V0RGVzY3JpcHRpb24oKSk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgUHJpY2U6ICIgKyBpdGVtW2ldLmdldFByaWNlKCkpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIFF1YW50aXR5OiAiICsgaXRlbVtpXS5nZXRRdWFudGl0eSgpKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICBPdW5jZXM6ICIgKyBpdGVtW2ldLmdldFBlclVuaXRPdW5jZXMoKSk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgLS0tLS0tLS0tLS0tLS0tLSIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIEFtb3VudDogIiArIGl0ZW1baV0uZ2V0QW1vdW50KCkpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIFdlaWdodDogIiArIGl0ZW1baV0uZ2V0TGluZUl0ZW1PdW5jZXMoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci0gICAgICAgIGlmIChvcmRlci5pc1NldFNoaXBwZXIoKSkKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTaGlwcGVyOiAiICsgb3JkZXIuZ2V0U2hpcHBlcigpLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgUGVyLW91bmNlIHJhdGU6ICIgKyBvcmRlci5nZXRTaGlwcGVyKCkuZ2V0UGVyT3VuY2VSYXRlKCkpOwotICAgICAgICB9Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIHdlaWdodCBpbiBvdW5jZXM6ICIgKyBvcmRlci5nZXRUb3RhbE91bmNlcygpKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTaGlwcGluZyBhbW91bnQ6ICIgKyBvcmRlci5nZXRTaGlwcGluZ0Ftb3VudCgpKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJUb3RhbCBhbW91bnQ6ICIgKyBvcmRlci5nZXRUb3RhbEFtb3VudCgpKTsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9zcmMvZW51bXRlc3QvZW51bXRlc3QueHNkIGIvdjIvdGVzdC9zcmMvZW51bXRlc3QvZW51bXRlc3QueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmExOTkxLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3Qvc3JjL2VudW10ZXN0L2VudW10ZXN0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTx4czpzY2hlbWEKLSAgIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgIHhtbG5zOmV0PSJodHRwOi8vb3BlbnVyaS5vcmcvZW51bXRlc3QiCi0gICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9vcGVudXJpLm9yZy9lbnVtdGVzdCIKLSAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJxdWFudGl0eSI+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgotICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJhbGwiLz4KLSAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibW9zdCIvPgotICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzb21lIi8+Ci0gICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImZldyIvPgotICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJub25lIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9ImFsbE9yTm9uZSI+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9ImV0OnF1YW50aXR5Ij4KLSAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iYWxsIi8+Ci0gICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im5vbmUiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImRhdGEiPgotICAgIDx4czpzaW1wbGVDb250ZW50PgotICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJldDpxdWFudGl0eSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idGFyZ2V0IiB0eXBlPSJldDphbGxPck5vbmUiLz4KLSAgICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6c2ltcGxlQ29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJzdGF0dXNyZXBvcnQiPgotICAgIDx4czpjb21wbGV4VHlwZT4KLSAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ic3RhdHVzIiB0eXBlPSJldDpkYXRhIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICA8L3hzOnNlcXVlbmNlPgotICAgIDwveHM6Y29tcGxleFR5cGU+Ci0gIDwveHM6ZWxlbWVudD4KLSAKLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9zcmMvZXJpY3NjaGVtYS9lcmljc2NoZW1hLnhzZCBiL3YyL3Rlc3Qvc3JjL2VyaWNzY2hlbWEvZXJpY3NjaGVtYS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNjJkZGYuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9zcmMvZXJpY3NjaGVtYS9lcmljc2NoZW1hLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQk8eHM6ZWxlbWVudCBuYW1lPSJhc2Rhc2QiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9zcmMvZXJpY3Rlc3QvRXJpY1Rlc3QuamF2YSBiL3YyL3Rlc3Qvc3JjL2VyaWN0ZXN0L0VyaWNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyNjk0ODguLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9zcmMvZXJpY3Rlc3QvRXJpY1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1pbXBvcnQgb3JnLnhtbC5zYXguQXR0cmlidXRlczsKLWltcG9ydCBvcmcueG1sLnNheC5Db250ZW50SGFuZGxlcjsKLWltcG9ydCBvcmcueG1sLnNheC5FbnRpdHlSZXNvbHZlcjsKLWltcG9ydCBvcmcueG1sLnNheC5FcnJvckhhbmRsZXI7Ci1pbXBvcnQgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyOwotaW1wb3J0IG9yZy54bWwuc2F4LklucHV0U291cmNlOwotaW1wb3J0IG9yZy54bWwuc2F4LkxvY2F0b3I7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWFBhcnNlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LlhNTFJlYWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc3RvcmUuUm9vdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudG9vbC5Db2RlR2VuVXRpbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudG9vbC5TY2hlbWFDb21waWxlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVN5c3RlbTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJlYW5zOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yLlRva2VuVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvci5YbWxCb29rbWFyazsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlQnVpbGRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERhdGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxEb2N1bWVudFByb3BlcnRpZXM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFcnJvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEludDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEludGVnZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxMaW5lTnVtYmVyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9uczsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQ7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZi5XZWFrUmVmZXJlbmNlOwotaW1wb3J0IGphdmEubGFuZy5yZWYuUmVmZXJlbmNlUXVldWU7Ci1pbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7Ci1pbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7Ci1pbXBvcnQgamF2YS5uZXQuVVJJOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5SYW5kb207Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuU0FYUGFyc2VyRmFjdG9yeTsKLWltcG9ydCBvcmcudzMueDIwMDEueG1sU2NoZW1hLio7Ci1pbXBvcnQgb3JnLnhtbC5zYXguSW5wdXRTb3VyY2U7Ci1pbXBvcnQgb3JnLnhtbC5zYXguWE1MUmVhZGVyOwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MRXZlbnQ7Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbTsKLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTE5hbWU7Ci1pbXBvcnQgY29tLmJlYS54MjAwMi54MDkueGJlYW4uY29uZmlnLkNvbmZpZ0RvY3VtZW50OwotaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOwotCi1wdWJsaWMgY2xhc3MgRXJpY1Rlc3QKLXsKLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIGZvbwotICAgIHsKLS8vICAgICAgICBwcm90ZWN0ZWQgdm9pZCBmaW5hbGl6ZSAoICkKLS8vICAgICAgICB7Ci0vLyAgICAgICAgICAgIF9jb3VudCsrOwotLy8gICAgICAgIH0KLQotICAgICAgICBpbnQgX2NvdW50ID0gMTExOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoIFN0cmluZ1tdIGFyZ3MgKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBSZWZlcmVuY2VRdWV1ZSBxID0gbmV3IFJlZmVyZW5jZVF1ZXVlKCk7Ci0gICAgICAgIGZvciAoIDsgOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvbyBmID0gbmV3IGZvbygpOwotICAgICAgICAgICAgbmV3IFdlYWtSZWZlcmVuY2UoIGYsIHEgKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9zcmMvbmFtZXdvcmxkdXNlL2NvbS9iZWEvdGVzdC9EdW1wTmFtZXdvcmxkLmphdmEgYi92Mi90ZXN0L3NyYy9uYW1ld29ybGR1c2UvY29tL2JlYS90ZXN0L0R1bXBOYW1ld29ybGQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg1ODgwMS4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L3NyYy9uYW1ld29ybGR1c2UvY29tL2JlYS90ZXN0L0R1bXBOYW1ld29ybGQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2UgY29tLmJlYS50ZXN0OwotCi1pbXBvcnQgb3JnLm9wZW51cmkubmFtZXdvcmxkLio7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJlYW5zOwotCi1wdWJsaWMgY2xhc3MgRHVtcE5hbWV3b3JsZAotewotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09PT09PT09PT09PT09Iik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxvYWRpbmcgZmlsZSAiICsgYXJnc1tpXSk7Ci0gICAgICAgICAgICBkdW1wRG9jdW1lbnQoTmFtZXdvcmxkRG9jdW1lbnQuRmFjdG9yeS5wYXJzZShuZXcgRmlsZShhcmdzW2ldKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGR1bXBEb2N1bWVudChOYW1ld29ybGREb2N1bWVudCBkb2MpCi0gICAgewotICAgICAgICBOYW1ld29ybGQgd29ybGQgPSBkb2MuZ2V0TmFtZXdvcmxkKCk7Ci0gICAgICAgIE5hbWV3b3JsZC5Jc2xhbmRbXSBpc2xhbmRzID0gd29ybGQuZ2V0SXNsYW5kKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXNsYW5kcy5sZW5ndGg7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIklzbGFuZCB0YXJnZXQgbmFtZXNwYWNlOiAiICsgaXNsYW5kc1tpXS5nZXRUYXJnZXROYW1lc3BhY2UoKSk7Ci0gICAgICAgICAgICBMb2NbXSBsb2NzID0gaXNsYW5kc1tpXS5nZXRMb2NhdGlvbigpOwotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBsb2NzLmxlbmd0aDsgaisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICBMb2NhdGlvbjogIiArIGxvY3Nbal0uZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICBMb2MuUmVmZXJlbmNlW10gcmVmcyA9IGxvY3Nbal0uZ2V0UmVmZXJlbmNlKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCByZWZzLmxlbmd0aDsgaysrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgIFJlZmVyZW5jZTogIiArIHJlZnNba10uZ2V0VG8oKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL3JhbmRvbS9SYW5kb20uamF2YSBiL3YyL3Rlc3Qvc3JjL3JhbmRvbS9SYW5kb20uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcwZmQzMC4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L3NyYy9yYW5kb20vUmFuZG9tLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MDUgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQmVhbnM7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudG9vbC5Db21tYW5kTGluZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudmFsdWVzLlhtbFZhbHVlRGlzY29ubmVjdGVkRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC5zdG9yZS5DdXJzb3I7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwotaW1wb3J0IGphdmEubWF0aC5CaWdJbnRlZ2VyOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbTsKLQotaW1wb3J0IGNvbS5lYXN5cG8uWG1sUHVyY2hhc2VPcmRlckRvY3VtZW50QmVhbi5QdXJjaGFzZU9yZGVyOwotaW1wb3J0IGNvbS5lYXN5cG8uWG1sQ3VzdG9tZXJCZWFuOwotaW1wb3J0IGNvbS5lYXN5cG8uWG1sTGluZUl0ZW1CZWFuOwotaW1wb3J0IGNvbS5lYXN5cG8uWG1sU2hpcHBlckJlYW47Ci0KLXB1YmxpYyBjbGFzcyBSYW5kb20gaW1wbGVtZW50cyBSdW5uYWJsZQotewotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluICggU3RyaW5nW10gYXJncyApIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIENvbW1hbmRMaW5lIGNsID0gbmV3IENvbW1hbmRMaW5lKGFyZ3MsIEFycmF5cy5hc0xpc3QobmV3IFN0cmluZ1tdIHsgInNlZWQiLCAiaSIsICJ0IiwgImRvY3MiLCAiPyIsICJoZWxwIiB9KSk7Ci0gICAgICAgIGxvbmcgc2VlZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgICAgICBpbnQgaXRlcmF0aW9ucyA9IEludGVnZXIuTUFYX1ZBTFVFOwotICAgICAgICBpbnQgdGhyZWFkcyA9IDE7Ci0gICAgICAgIGludCBkb2NzID0gMTA7Ci0gICAgICAgIAotICAgICAgICBpZiAoY2wuZ2V0T3B0KCI/IikgIT0gbnVsbCB8fCBjbC5nZXRPcHQoImhlbHAiKSAhPSBudWxsIHx8IGNsLmFyZ3MoKS5sZW5ndGggIT0gMCkKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVXNhZ2U6IHJhbmRvbSBbLXNlZWQgI10gWy1pIGl0ZXJhdGlvbnNdIFstdCB0aHJlYWRzXSBbLWRvY3MgZG9jc10gWy1yZWFkb25seV0gWy1ub3NhdmVdIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbGVhbiByZWFkb25seSA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbGVhbiBub3NhdmUgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2xlYW4gbm9xdWVyeSA9IGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoY2wuZ2V0T3B0KCJzZWVkIikgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICBzZWVkID0gTG9uZy5wYXJzZUxvbmcoY2wuZ2V0T3B0KCJzZWVkIikpOwotICAgICAgICAgICAgaWYgKGNsLmdldE9wdCgiaSIpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgaXRlcmF0aW9ucyA9IEludGVnZXIucGFyc2VJbnQoY2wuZ2V0T3B0KCJpIikpOwotICAgICAgICAgICAgaWYgKGNsLmdldE9wdCgidCIpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgdGhyZWFkcyA9IEludGVnZXIucGFyc2VJbnQoY2wuZ2V0T3B0KCJ0IikpOwotICAgICAgICAgICAgaWYgKGNsLmdldE9wdCgiZG9jcyIpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgZG9jcyA9IEludGVnZXIucGFyc2VJbnQoY2wuZ2V0T3B0KCJkb2NzIikpOwotICAgICAgICAgICAgbm9xdWVyeSA9IChjbC5nZXRPcHQoIm5vcXVlcnkiKSAhPSBudWxsKTsKLSAgICAgICAgICAgIHJlYWRvbmx5ID0gKGNsLmdldE9wdCgicmVhZG9ubHkiKSAhPSBudWxsKTsKLSAgICAgICAgICAgIG5vc2F2ZSA9IChjbC5nZXRPcHQoIm5vc2F2ZSIpICE9IG51bGwpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzZWVkPSIgKyBzZWVkKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaXRlcmF0aW9ucz0iICsgaXRlcmF0aW9ucyApOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ0aHJlYWRzPSIgKyB0aHJlYWRzKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiZG9jcz0iICsgZG9jcyApOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJlYWRvbmx5ID8gInJlYWRvbmx5IiA6ICJyZWFkL3dyaXRlIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obm9zYXZlID8gIm5vc2F2ZSIgOiAid2l0aCBzYXZlIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obm9xdWVyeSA/ICJub3F1ZXJ5IiA6ICJ3aXRoIHF1ZXJ5Iik7Ci0gICAgICAgICAgICBkb1Rlc3RzKHNlZWQsIGl0ZXJhdGlvbnMsIHRocmVhZHMsIGRvY3MsIHJlYWRvbmx5LCBub3NhdmUsIG5vcXVlcnkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgZG9UZXN0cyhsb25nIHNlZWQsIGludCBpdGVyYXRpb25zLCBpbnQgdGhyZWFkQ291bnQsIGludCBkb2NDb3VudCwgYm9vbGVhbiByZWFkb25seSwgYm9vbGVhbiBub3NhdmUsIGJvb2xlYW4gbm9xdWVyeSkKLSAgICB7Ci0gICAgICAgIGxvbmcgc3RhcnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgICAgCi0gICAgICAgIFhtbE9iamVjdFtdIHNoYXJlZERvY3MgPSBuZXcgWG1sT2JqZWN0IFtkb2NDb3VudF07Ci0gICAgICAgIFRocmVhZFtdIHRocmVhZHMgPSBuZXcgVGhyZWFkW3RocmVhZENvdW50XTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCBpdGVyYXRpb25zIDsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB0aHJlYWRDb3VudDsgaisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFJhbmRvbSBydW5uYWJsZSA9IG5ldyBSYW5kb20oc2VlZCwgc2hhcmVkRG9jcywgcmVhZG9ubHksIG5vc2F2ZSwgbm9xdWVyeSwgdGhyZWFkQ291bnQgPiAxKTsKLSAgICAgICAgICAgICAgICB0aHJlYWRzW2pdID0gbmV3IFRocmVhZChydW5uYWJsZSk7Ci0gICAgICAgICAgICAgICAgdGhyZWFkc1tqXS5zdGFydCgpOwotICAgICAgICAgICAgICAgIHNlZWQrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdGhyZWFkQ291bnQ7IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0cnkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRocmVhZHNbal0uam9pbigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiVGhyZWFkIGludGVycnVwdGVkIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQotICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oKTsKLSAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKAotICAgICAgICAgICAgIlNlY29uZHMgdG8gcnVuIHJhbmRvbSB0ZXN0czogIiArIChlbmQgLSBzdGFydCkgLyAxMDAwICk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHJ1bigpCi0gICAgewotICAgICAgICBTeXN0ZW0uZXJyLnByaW50KCAiXHJTZWVkOiAiICsgX3NlZWQgKTsKLSAgICAgICAgCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKCBpbnQgZCA9IDAgOyBkIDwgX2RvY3MubGVuZ3RoIDsgZCsrICkKLSAgICAgICAgICAgICAgICBfZG9jc1sgZCBdID0gWG1sT2JqZWN0LkZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSAgICAKLSAgICAgICAgICAgIF9jdXJzb3JzID0gbmV3IEFycmF5TGlzdCgpOwotICAgIAotICAgICAgICAgICAgaW50IG5JdGVyYXRpb25zID0gcm5kKCA2MDAwMCApICsgNTAwMDsKLSAgICAKLSAgICAgICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCBuSXRlcmF0aW9ucyA7IGkrKyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbGVhbiBnb29kID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBfaXRlcisrOwotICAgICAgICAgICAgICAgICAgICBpdGVyYXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGdvb2QgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmaW5hbGx5Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWdvb2QpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCAiRXJyb3Igb24gaXRlcmF0aW9uICIgKyBfaXRlciApOwotICAgICAgICAgICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKCBUaHJvd2FibGUgZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiggIkVycm9yIG9uIHNlZWQgIiArIF9zZWVkICk7Ci0gICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSggU3lzdGVtLmVyciApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBqYXZhLnV0aWwuUmFuZG9tIF9ybmQ7Ci0gICAgCi0gICAgcHJpdmF0ZSBYbWxPYmplY3RbXSBfZG9jczsgLy8gc2hhcmVkIGFtb25nIHRocmVhZHMhIQotICAgIHByaXZhdGUgQXJyYXlMaXN0ICAgX2N1cnNvcnM7Ci0gICAgcHJpdmF0ZSBsb25nICAgICAgICBfc2VlZDsKLSAgICBwcml2YXRlIGludCAgICAgICAgIF9pdGVyOwotICAgIHByaXZhdGUgYm9vbGVhbiAgICAgX3JlYWRvbmx5OwotICAgIHByaXZhdGUgYm9vbGVhbiAgICAgX25vc2F2ZTsKLSAgICBwcml2YXRlIGJvb2xlYW4gICAgIF9ub3F1ZXJ5OwotICAgIHByaXZhdGUgYm9vbGVhbiAgICAgX2ludGVyZmVyZW5jZTsKLQotCi0gICAgcHJpdmF0ZSBpbnQgcm5kICggaW50IG4gKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9ybmQubmV4dEludCggbiApOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIGludCBybmQgKCBpbnQgbWluLCBpbnQgbWF4UGx1c09uZSApCi0gICAgewotICAgICAgICByZXR1cm4gX3JuZC5uZXh0SW50KG1heFBsdXNPbmUgLSBtaW4pICsgbWluOwotICAgIH0KLQotICAgIHByaXZhdGUgWG1sQ3Vyc29yIGdldEN1cnNvciAoICkKLSAgICB7Ci0gICAgICAgIGludCBuID0gX2N1cnNvcnMuc2l6ZSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKG4gPT0gMCB8fCAobiA8IF9kb2NzLmxlbmd0aCAqIDMpICYmIHJuZCggNCApID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFhtbEN1cnNvciBjID0gX2RvY3NbIHJuZCggX2RvY3MubGVuZ3RoICkgXS5uZXdDdXJzb3IoKTsKLSAgICAgICAgICAgIF9jdXJzb3JzLmFkZCggYyApOwotICAgICAgICAgICAgcmV0dXJuIGM7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gKFhtbEN1cnNvcikgX2N1cnNvcnMuZ2V0KCBybmQoIG4gKSApOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBpdGVyYXRlICggKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoICggcm5kICggNiApICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgIDAgOiBpbnRlcmF0ZUhpZ2goKTsgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgIDEgOiBpbnRlcmF0ZUhpZ2goKTsgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgIDIgOiBpbnRlcmF0ZUhpZ2goKTsgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgIDMgOiBpbnRlcmF0ZU1lZGl1bSgpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgIDQgOiBpbnRlcmF0ZU1lZGl1bSgpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgIDUgOiBpbnRlcmF0ZUxvdygpOyAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghX2ludGVyZmVyZW5jZSkKLSAgICAgICAgICAgICAgICB0aHJvdyBlOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFfaW50ZXJmZXJlbmNlKQotICAgICAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFhtbFZhbHVlRGlzY29ubmVjdGVkRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGludGVyYXRlSGlnaCAoICkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgc3dpdGNoICggcm5kICggMiApICkKLSAgICAgICAgewotICAgICAgICBjYXNlICAwIDogbW92ZUN1cnNvclJpZ2h0T25lVG9rZW4oKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgIDEgOiBtb3ZlQ3Vyc29yTGVmdE9uZVRva2VuKCk7ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgaW50ZXJhdGVNZWRpdW0gKCApIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoIF9yZWFkb25seSA/IHJuZCAoIDQgKSA6IHJuZCAoMjQpICkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSAgMCA6IGdldENoYXJzKCk7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAgMSA6IGdldFRleHRWYWx1ZSgpOyAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAgMiA6IGNvbXBhcmVWYWx1ZSgpOyAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAgMyA6IHByZXZUb2tlblR5cGUoKTsgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSAgNCA6IGluc2VydFRleHQoKTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAgNSA6IG1vdmVDaGFyc1JpZ2h0KCk7ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAgNiA6IG1vdmVDaGFyc0xlZnQoKTsgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAgNyA6IGluc2VydEVsZW0oKTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAgOCA6IGluc2VydEF0dHIoKTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAgOSA6IHJlbW92ZVhtbCgpOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxMCA6IHJlbW92ZVhtbENvbnRlbnRzKCk7ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxMSA6IGNvcHlYbWwoKTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxMiA6IGNvcHlYbWxDb250ZW50cygpOyAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxMyA6IG1vdmVYbWwoKTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxNCA6IG1vdmVYbWxDb250ZW50cygpOyAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxNSA6IHJlbW92ZVRleHQoKTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxNiA6IG1vdmVUZXh0KCk7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxNyA6IGNvcHlUZXh0KCk7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxOCA6IGluc2VydENvbW1lbnQoKTsgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxOSA6IGluc2VydFByb2NpbnN0KCk7ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAyMCA6IHNldFRleHRWYWx1ZSgpOyAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAyMSA6IHNldFN0cm9uZygpOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAyMiA6IG9iamVjdFNldCgpOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAyMyA6IHNldE5hbWUoKTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBpbnRlcmF0ZUxvdyAoICkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgc3dpdGNoICggcm5kIChfcmVhZG9ubHkgPyAxIDogMCwgX25vc2F2ZSA/IDggOiAxNykgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlICAwIDogY2hhbmdlVHlwZSgpOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICAxIDogY3JlYXRlQm9va21hcmsoKTsgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICAyIDogY2xlYXJCb29rbWFyaygpOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgIDMgOiBsb2FkRG9jKCk7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgIDQgOiBsb2FkU2NoZW1hZERvYygpOyAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgIDUgOiBjb21wYXJlQ3Vyc29ycygpOyAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgIDYgOiBnZXRPYmplY3QoKTsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgIDcgOiBuZXdDdXJzb3IoKTsgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSAgOCA6IHZhbGlkYXRlKCk7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAgOSA6IGV4ZWNRdWVyeSgpOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxMCA6IHhtbElucHV0U3RyZWFtKCk7ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxMSA6IGRvY0J5dGVzKCk7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxMiA6IGN1cnNvckJ5dGVzKCk7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxMyA6IG5ld0RvbU5vZGUoKTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxNCA6IG9iamVjdFN0cmluZygpOyAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxNSA6IGN1cnNvclN0cmluZygpOyAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAxNiA6IHByZXR0eU9iamVjdCgpOyAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBYbWxPYmplY3QgZmluZE9iamVjdCAoICkKLSAgICB7Ci0gICAgICAgIFhtbEN1cnNvciBjID0gZ2V0Q3Vyc29yKCk7Ci0gICAgICAgIGMucHVzaCgpOwotICAgICAgICAKLSAgICAgICAgd2hpbGUgKCAhKGMuaXNDb250YWluZXIoKSB8fCBjLmlzQXR0cigpKSApCi0gICAgICAgICAgICBpZiAoYy50b05leHRUb2tlbigpLmlzTm9uZSgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmICghYy5pc0VuZGRvYygpKQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxPYmplY3QgeCA9IGMuZ2V0T2JqZWN0KCk7Ci0gICAgICAgICAgICBjLnBvcCgpOwotICAgICAgICAgICAgaWYgKHggPT0gbnVsbCkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJnZXRPYmplY3QgcmV0dXJuZWQgbnVsbCAtIGNvbnRlbnQgbXVzdCBoYXZlIGNoYW5nZWQiKTsKLSAgICAgICAgICAgIHJldHVybiB4OwotICAgICAgICB9Ci0KLSAgICAgICAgYy5wb3AoKTsKLSAgICAgICAgYy5wdXNoKCk7Ci0gICAgICAgIAotICAgICAgICB3aGlsZSAoICEoYy5pc0NvbnRhaW5lcigpIHx8IGMuaXNBdHRyKCkpICkKLSAgICAgICAgICAgIGlmIChjLnRvUHJldlRva2VuKCkuaXNOb25lKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgWG1sT2JqZWN0IHggPSBjLmdldE9iamVjdCgpOwotICAgICAgICBjLnBvcCgpOwotICAgICAgICBpZiAoeCA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiZ2V0T2JqZWN0IHJldHVybmVkIG51bGwgLSBjb250ZW50IG11c3QgaGF2ZSBjaGFuZ2VkIik7Ci0gICAgICAgIHJldHVybiB4OwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBwcmV0dHlPYmplY3QgKCApCi0gICAgewotICAgICAgICBYbWxPcHRpb25zIG9wdGlvbnMgPSBuZXcgWG1sT3B0aW9ucygpOwotICAgICAgICBvcHRpb25zLnNldFNhdmVQcmV0dHlQcmludCgpOwotICAgICAgICBmaW5kT2JqZWN0KCkueG1sVGV4dCggb3B0aW9ucyApOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgb2JqZWN0U3RyaW5nICggKQotICAgIHsKLSAgICAgICAgZmluZE9iamVjdCgpLnRvU3RyaW5nKCk7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBjdXJzb3JTdHJpbmcgKCApCi0gICAgewotICAgICAgICBnZXRDdXJzb3IoKS50b1N0cmluZygpOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgY2hhbmdlVHlwZSAoICkKLSAgICB7Ci0gICAgICAgIFhtbE9iamVjdCBvLCBuOwotICAgICAgICAKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG8gPSBmaW5kT2JqZWN0KCk7Ci0gICAgICAgICAgICBTY2hlbWFUeXBlIHR5cGUgPSBmaW5kT2JqZWN0KCkuc2NoZW1hVHlwZSgpOwotICAgICAgICAgICAgbiA9IG8uY2hhbmdlVHlwZSggdHlwZSApOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoICggSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUgKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKCBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGZvciAoIGludCBpID0gMCA7IGkgPCBfZG9jcy5sZW5ndGggOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobyA9PSBfZG9jc1sgaSBdKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9kb2NzWyBpIF0gPSBuOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBwcmV2VG9rZW5UeXBlICggKQotICAgIHsKLSAgICAgICAgZ2V0Q3Vyc29yKCkucHJldlRva2VuVHlwZSgpOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgbmV3Q3Vyc29yICggKQotICAgIHsKLSAgICAgICAgZmluZE9iamVjdCgpLm5ld0N1cnNvcigpOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgc2V0TmFtZSAoICkKLSAgICB7Ci0gICAgICAgIFhtbEN1cnNvciBjID0gZmluZE9iamVjdCgpLm5ld0N1cnNvcigpOwotCi0gICAgICAgIGlmICghYy5pc1N0YXJ0ZG9jKCkpCi0gICAgICAgICAgICBjLnNldE5hbWUoIGdldFFOYW1lKCkgKTsKLQotICAgICAgICBjLmRpc3Bvc2UoKTsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIG5ld0RvbU5vZGUgKCApCi0gICAgewotICAgICAgICBpZiAocm5kKCA1ICkgIT0gMCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBnZXRDdXJzb3IoKS5uZXdEb21Ob2RlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKCBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB4bWxJbnB1dFN0cmVhbSAoICkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgaWYgKHJuZCggNSApICE9IDApCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBYTUxJbnB1dFN0cmVhbSB4aXM7Ci0gICAgICAgIAotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgeGlzID0gZ2V0Q3Vyc29yKCkubmV3WE1MSW5wdXRTdHJlYW0oKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlICkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgd2hpbGUgKCB4aXMubmV4dCgpICE9IG51bGwgKQotICAgICAgICAgICAgOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBvYmplY3RTZXQgKCApCi0gICAgewotICAgICAgICBmaW5kT2JqZWN0KCkuc2V0KCBmaW5kT2JqZWN0KCkgKTsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIHNldFN0cm9uZyAoICkKLSAgICB7Ci0gICAgICAgIFhtbE9iamVjdCB4ID0gZmluZE9iamVjdCgpOwotCi0gICAgICAgIGlmICh4IGluc3RhbmNlb2YgUHVyY2hhc2VPcmRlcikKLSAgICAgICAgewotICAgICAgICAgICAgUHVyY2hhc2VPcmRlciBvID0gKFB1cmNoYXNlT3JkZXIpIHg7Ci0gICAgICAgICAgICBvLnNldERhdGUoIENhbGVuZGFyLmdldEluc3RhbmNlKCkgKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh4IGluc3RhbmNlb2YgWG1sQ3VzdG9tZXJCZWFuKQotICAgICAgICB7Ci0gICAgICAgICAgICBYbWxDdXN0b21lckJlYW4gbyA9IChYbWxDdXN0b21lckJlYW4pIHg7Ci0gICAgICAgICAgICBvLnNldE5hbWUoICJCb2IiICk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChybmQoIDIgKSA9PSAwKQotICAgICAgICAgICAgICAgIG8uc2V0QWdlKCAyMyApOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAocm5kKCAyICkgPT0gMCkKLSAgICAgICAgICAgICAgICBvLnNldE1vbyggMjQgKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHJuZCggMiApID09IDApCi0gICAgICAgICAgICAgICAgby5zZXRQb28oIDIwMCApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHggaW5zdGFuY2VvZiBYbWxMaW5lSXRlbUJlYW4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIFhtbExpbmVJdGVtQmVhbiBvID0gKFhtbExpbmVJdGVtQmVhbikgeDsKLSAgICAgICAgICAgIG8uc2V0UGVyVW5pdE91bmNlcyggbmV3IEJpZ0RlY2ltYWwoIDEyMi40NCApICk7Ci0gICAgICAgICAgICBvLnNldFByaWNlKCBuZXcgQmlnRGVjaW1hbCggNTU1LjMzICkgKTsKLSAgICAgICAgICAgIG8uc2V0UXVhbnRpdHkoIEJpZ0ludGVnZXIudmFsdWVPZiggMTExICkgKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICh4IGluc3RhbmNlb2YgWG1sU2hpcHBlckJlYW4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIFhtbFNoaXBwZXJCZWFuIG8gPSAoWG1sU2hpcHBlckJlYW4pIHg7Ci0gICAgICAgICAgICBvLnNldFBlck91bmNlUmF0ZSggbmV3IEJpZ0RlY2ltYWwoIDMuMTQxNTkgKSApOwotICAgICAgICAgICAgby5zZXROYW1lKCAiRXJpYyIgKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBjb21wYXJlVmFsdWUgKCApCi0gICAgewotICAgICAgICBmaW5kT2JqZWN0KCkuY29tcGFyZVZhbHVlKCBmaW5kT2JqZWN0KCkgKTsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlICggKQotICAgIHsKLSAgICAgICAgZmluZE9iamVjdCgpLnZhbGlkYXRlKCk7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBleGVjUXVlcnkgKCApCi0gICAgewotICAgICAgICBpZiAoX25vcXVlcnkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBpZiAocm5kKCAyMCApID4gMCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIFFOYW1lIG5hbWUgPSBnZXRRTmFtZSgpOwotICAgICAgICAKLSAgICAgICAgU3RyaW5nIHF1ZXJ5ID0KLSAgICAgICAgICAgICJkZWNsYXJlIG5hbWVzcGFjZSB4eHg9JyIgKyBuYW1lLmdldE5hbWVzcGFjZVVSSSgpICsgIicgIiArCi0gICAgICAgICAgICAgICAgIi4vL3h4eDoiICsgbmFtZS5nZXRMb2NhbFBhcnQoKTsKLSAgICAgICAgCi0gICAgICAgIFhtbE9iamVjdCB4ID0gZ2V0Q3Vyc29yKCkuZXhlY1F1ZXJ5KCBxdWVyeSApLmdldE9iamVjdCgpOwotCi0gICAgICAgIGlmIChybmQoIDMgKSA9PSAwKQotICAgICAgICAgICAgX2RvY3NbIHJuZCggX2RvY3MubGVuZ3RoICkgXSA9IHg7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGdldE9iamVjdCAoICkKLSAgICB7Ci0gICAgICAgIGdldEN1cnNvcigpLmdldE9iamVjdCgpOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgZ2V0Q2hhcnMgKCApCi0gICAgewotICAgICAgICBnZXRDdXJzb3IoKS5nZXRDaGFycygpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBjb21wYXJlQ3Vyc29ycyAoICkKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBnZXRDdXJzb3IoKS5pc0luU2FtZURvY3VtZW50KCBnZXRDdXJzb3IoKSApOwotICAgICAgICAgICAgZ2V0Q3Vyc29yKCkuY29tcGFyZVBvc2l0aW9uKCBnZXRDdXJzb3IoKSApOwotICAgICAgICAgICAgZ2V0Q3Vyc29yKCkuaXNBdFNhbWVQb3NpdGlvbkFzKCBnZXRDdXJzb3IoKSApOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoICggSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUgKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIFN0cmluZ1tdIF94bWxzID0KLSAgICB7Ci0gICAgICAgICI8YS8+IiwKLSAgICB9OwotCi0gICAgcHJpdmF0ZSBTdHJpbmdbXSBfc2NoZW1hX3htbHMgPQotICAgIHsKLSAgICAgICAgIjxwbzpwdXJjaGFzZS1vcmRlciB4bWxuczpwbz0naHR0cDovL29wZW51cmkub3JnL2Vhc3lwbyc+XG4iICsgCi0gICAgICAgICI8cG86Y3VzdG9tZXIgYWdlPSczMScgcG9vPScyMDAnPlxuIiArIAotICAgICAgICAgICAgIjxwbzpuYW1lPkRhdmlkIEJhdTwvcG86bmFtZT5cbiIgKyAKLSAgICAgICAgICAgICI8cG86YWRkcmVzcz5HbGFkd3luZSwgUEE8L3BvOmFkZHJlc3M+XG4iICsgCi0gICAgICAgICI8L3BvOmN1c3RvbWVyPlxuIiArIAotICAgICAgICAiPHBvOmN1c3RvbWVyIGFnZT0nMzcnPlxuIiArIAotICAgICAgICAgICAgIjxwbzpuYW1lPkVyaWMgVmFzaWxpazwvcG86bmFtZT5cbiIgKyAKLSAgICAgICAgICAgICI8cG86YWRkcmVzcz5SZWRtb25kLCBXQTwvcG86YWRkcmVzcz5cbiIgKyAKLSAgICAgICAgIjwvcG86Y3VzdG9tZXI+XG4iICsgCi0gICAgICAgICI8cG86ZGF0ZT4yMDAyLTA5LTMwVDE0OjE2OjAwLTA1OjAwPC9wbzpkYXRlPlxuIiArIAotICAgICAgICAiPHBvOmxpbmUtaXRlbT5cbiIgKyAKLSAgICAgICAgICAgICI8cG86ZGVzY3JpcHRpb24+QnVybmhhbSdzIENlbGVzdGlhbCBIYW5kYm9vaywgVm9sIDE8L3BvOmRlc2NyaXB0aW9uPlxuIiArIAotICAgICAgICAgICAgIjxwbzpwZXItdW5pdC1vdW5jZXM+NTwvcG86cGVyLXVuaXQtb3VuY2VzPlxuIiArIAotICAgICAgICAgICAgIjxwbzpwcmljZT4yMS43OTwvcG86cHJpY2U+XG4iICsgCi0gICAgICAgICAgICAiPHBvOnF1YW50aXR5PjI8L3BvOnF1YW50aXR5PlxuIiArIAotICAgICAgICAiPC9wbzpsaW5lLWl0ZW0+XG4iICsgCi0gICAgICAgICI8cG86bGluZS1pdGVtPlxuIiArIAotICAgICAgICAgICAgIjxwbzpkZXNjcmlwdGlvbj5CdXJuaGFtJ3MgQ2VsZXN0aWFsIEhhbmRib29rLCBWb2wgMjwvcG86ZGVzY3JpcHRpb24+XG4iICsgCi0gICAgICAgICAgICAiPHBvOnBlci11bml0LW91bmNlcz41PC9wbzpwZXItdW5pdC1vdW5jZXM+XG4iICsgCi0gICAgICAgICAgICAiPHBvOnByaWNlPjE5Ljg5PC9wbzpwcmljZT5cbiIgKyAKLSAgICAgICAgICAgICI8cG86cXVhbnRpdHk+MjwvcG86cXVhbnRpdHk+XG4iICsgCi0gICAgICAgICI8L3BvOmxpbmUtaXRlbT5cbiIgKyAKLSAgICAgICAgIjxwbzpsaW5lLWl0ZW0+XG4iICsgCi0gICAgICAgICAgICAiPHBvOmRlc2NyaXB0aW9uPkJ1cm5oYW0ncyBDZWxlc3RpYWwgSGFuZGJvb2ssIFZvbCAzPC9wbzpkZXNjcmlwdGlvbj5cbiIgKyAKLSAgICAgICAgICAgICI8cG86cGVyLXVuaXQtb3VuY2VzPjU8L3BvOnBlci11bml0LW91bmNlcz5cbiIgKyAKLSAgICAgICAgICAgICI8cG86cHJpY2U+MTkuODk8L3BvOnByaWNlPlxuIiArIAotICAgICAgICAgICAgIjxwbzpxdWFudGl0eT4xPC9wbzpxdWFudGl0eT5cbiIgKyAKLSAgICAgICAgIjwvcG86bGluZS1pdGVtPlxuIiArIAotICAgICAgICAiPHBvOnNoaXBwZXI+XG4iICsgCi0gICAgICAgICAgICAiPHBvOm5hbWU+VVBTPC9wbzpuYW1lPlxuIiArIAotICAgICAgICAgICAgIjxwbzpwZXItb3VuY2UtcmF0ZT4wLjc0PC9wbzpwZXItb3VuY2UtcmF0ZT5cbiIgKyAKLSAgICAgICAgIjwvcG86c2hpcHBlcj5cbiIgKyAKLSAgICAgICAgIjwvcG86cHVyY2hhc2Utb3JkZXI+XG4iICsKLSAgICAgICAgIiIsCi0gICAgfTsKLQotICAgIHByaXZhdGUgdm9pZCBsb2FkRG9jICggKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBpZiAocm5kKCAxNSApID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIF9kb2NzWyBybmQoIF9kb2NzLmxlbmd0aCApIF0gPQotICAgICAgICAgICAgICAgIFhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKCBfeG1sc1sgcm5kKCBfeG1scy5sZW5ndGggKSBdICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgbG9hZFNjaGVtYWREb2MgKCApIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGlmIChybmQoIDQgKSA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBfZG9jc1sgcm5kKCBfZG9jcy5sZW5ndGggKSBdID0KLSAgICAgICAgICAgICAgICBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSgKLSAgICAgICAgICAgICAgICAgICAgX3NjaGVtYV94bWxzWyBybmQoIF9zY2hlbWFfeG1scy5sZW5ndGggKSBdICk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgbW92ZUN1cnNvckxlZnRPbmVUb2tlbiAoICkKLSAgICB7Ci0gICAgICAgIGdldEN1cnNvcigpLnRvUHJldlRva2VuKCk7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBtb3ZlQ3Vyc29yUmlnaHRPbmVUb2tlbiAoICkKLSAgICB7Ci0gICAgICAgIGdldEN1cnNvcigpLnRvTmV4dFRva2VuKCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBjaGFyW10gX2NoYXJzID0KLSAgICB7Ci0gICAgICAgICdhJywgJ2InLCAnYycsICdkJywgJ2UnLCAnZicsICdnJywgJ2gnLCAnaScsICdqJywgJ2snLCAnbCcsICdtJywgJ24nLAotICAgICAgICAnbycsICdwJywgJ3EnLCAncicsICdzJywgJ3QnLCAndScsICd2JywgJ3cnLCAneCcsICd5JywgJ3onLCAKLSAgICAgICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLAotICAgICAgICAnICcsICc8JywgJz4nLCAnJicsICctJywgJz8nCi0gICAgfTsKLSAgICAKLSAgICBwcml2YXRlIHZvaWQgZ2V0VGV4dFZhbHVlICggKQotICAgIHsKLSAgICAgICAgWG1sQ3Vyc29yIGMgPSBnZXRDdXJzb3IoKTsKLQotICAgICAgICBpZiAoYy5pc0ZpbmlzaCgpIHx8IGMuaXNOYW1lc3BhY2UoKSB8fCBjLmlzVGV4dCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgYy5nZXRUZXh0VmFsdWUoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2V0VGV4dFZhbHVlICggKQotICAgIHsKLSAgICAgICAgWG1sQ3Vyc29yIGMgPSBnZXRDdXJzb3IoKTsKLQotICAgICAgICBpZiAoYy5pc0ZpbmlzaCgpIHx8IGMuaXNOYW1lc3BhY2UoKSB8fCBjLmlzVGV4dCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0gICAgICAgIGZvciAoIGludCBpID0gcm5kKCAxMCApIDsgaSA+PSAwIDsgaS0tICkKLSAgICAgICAgICAgIHNiLmFwcGVuZCggX2NoYXJzWyBybmQoIF9jaGFycy5sZW5ndGggKSBdICk7Ci0KLSAgICAgICAgYy5zZXRUZXh0VmFsdWUoIHNiLnRvU3RyaW5nKCkgKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgbW92ZVRleHQgKCApCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgZ2V0Q3Vyc29yKCkubW92ZUNoYXJzKCBybmQoIDEwICksIGdldEN1cnNvcigpICk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlICkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBjb3B5VGV4dCAoICkKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBnZXRDdXJzb3IoKS5jb3B5Q2hhcnMoIHJuZCggMTAgKSwgZ2V0Q3Vyc29yKCkgKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlICkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIGNhdGNoICggSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUgKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIHJlbW92ZVRleHQgKCApCi0gICAgewotICAgICAgICBnZXRDdXJzb3IoKS5yZW1vdmVDaGFycyggcm5kKCA2ICkgKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgaW5zZXJ0Q29tbWVudCAoICkKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBnZXRDdXJzb3IoKS5pbnNlcnRDb21tZW50KCAicG9vIiApOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoICggSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUgKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKCBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgaW5zZXJ0UHJvY2luc3QgKCApCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgZ2V0Q3Vyc29yKCkuaW5zZXJ0UHJvY0luc3QoICJ0YXJnZXQiLCAidmFsIiApOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoICggSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUgKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKCBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgaW5zZXJ0VGV4dCAoICkKLSAgICB7Ci0gICAgICAgIFhtbEN1cnNvciBjID0gZ2V0Q3Vyc29yKCk7Ci0KLSAgICAgICAgaWYgKGMuaXNBbnlBdHRyKCkgfHwgYy5pc1N0YXJ0ZG9jKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLSAgICAgICAgZm9yICggaW50IGkgPSBybmQoIDEwICkgOyBpID49IDAgOyBpLS0gKQotICAgICAgICAgICAgc2IuYXBwZW5kKCBfY2hhcnNbIHJuZCggX2NoYXJzLmxlbmd0aCApIF0gKTsKLQotICAgICAgICBjLmluc2VydENoYXJzKCBzYi50b1N0cmluZygpICk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGRvY0NoYXJzICggKQotICAgIHsKLSAgICAgICAgX2RvY3NbIHJuZCggX2RvY3MubGVuZ3RoICkgXS54bWxUZXh0KCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGN1cnNvckNoYXJzICggKQotICAgIHsKLSAgICAgICAgZ2V0Q3Vyc29yKCkueG1sVGV4dCgpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBkb2NCeXRlcyAoICkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgX2RvY3NbIHJuZCggX2RvY3MubGVuZ3RoICkgXS5zYXZlKCBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCkgKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgY3Vyc29yQnl0ZXMgKCApIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGdldEN1cnNvcigpLnNhdmUoIG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKSApOwotICAgIH0KLSAgICAKLSAgICBwcml2YXRlIHZvaWQgbW92ZUNoYXJzUmlnaHQgKCApIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGdldEN1cnNvcigpLnRvTmV4dENoYXIoIHJuZCggMTAgKSApOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBtb3ZlQ2hhcnNMZWZ0ICggKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBnZXRDdXJzb3IoKS50b1ByZXZDaGFyKCBybmQoIDEwICkgKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFFOYW1lIGdldFFOYW1lICggKQotICAgIHsKLSAgICAgICAgUU5hbWUgbmFtZSA9IG51bGw7Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKCBybmQoIDMgKSApCi0gICAgICAgIHsKLSAgICAgICAgY2FzZSAwIDogbmFtZSA9IFhtbEJlYW5zLmdldFFOYW1lKCAiZm9vLmNvbSIsICJmb28iICk7IGJyZWFrOwotICAgICAgICBjYXNlIDEgOiBuYW1lID0gWG1sQmVhbnMuZ2V0UU5hbWUoICJiYXIuY29tIiwgImJhciIgKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgMiA6IG5hbWUgPSBYbWxCZWFucy5nZXRRTmFtZSggIm1vbyIgKTsgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbmFtZTsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIGluc2VydEVsZW0gKCApIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFhtbEN1cnNvciBjID0gZ2V0Q3Vyc29yKCk7Ci0KLSAgICAgICAgaWYgKGMuaXNBbnlBdHRyKCkgfHwgYy5pc1N0YXJ0ZG9jKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBjLmluc2VydEVsZW1lbnQoIGdldFFOYW1lKCkgKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBpbnNlcnRBdHRyICggKQotICAgIHsKLSAgICAgICAgWG1sQ3Vyc29yIGMgPSBnZXRDdXJzb3IoKTsKLQotICAgICAgICB3aGlsZSAoICFjLmlzRW5kZG9jKCkgJiYgIWMuaXNDb250YWluZXIoKSApCi0gICAgICAgICAgICBjLnRvTmV4dFRva2VuKCk7Ci0KLSAgICAgICAgaWYgKGMuaXNFbmRkb2MoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjLnRvTmV4dFRva2VuKCk7Ci0gICAgICAgIAotICAgICAgICBjLmluc2VydEF0dHJpYnV0ZSggZ2V0UU5hbWUoKSApOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVYbWxDb250ZW50cyAoICkKLSAgICB7Ci0gICAgICAgIFhtbEN1cnNvciBjID0gZ2V0Q3Vyc29yKCk7Ci0KLSAgICAgICAgYy5yZW1vdmVYbWxDb250ZW50cygpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBjb3B5WG1sQ29udGVudHMgKCApCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgZ2V0Q3Vyc29yKCkuY29weVhtbENvbnRlbnRzKCBnZXRDdXJzb3IoKSApOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoICggSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUgKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKCBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBjb3B5WG1sICggKQotICAgIHsKLSAgICAgICAgdHJ5Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdldEN1cnNvcigpLmNvcHlYbWwoIGdldEN1cnNvcigpICk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlICkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIG1vdmVYbWxDb250ZW50cyAoICkKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0gICAgICAgICAgICBnZXRDdXJzb3IoKS5tb3ZlWG1sQ29udGVudHMoIGdldEN1cnNvcigpICk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlICkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIG1vdmVYbWwgKCApCi0gICAgewotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgZ2V0Q3Vyc29yKCkubW92ZVhtbCggZ2V0Q3Vyc29yKCkgKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlICkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIGNhdGNoICggSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUgKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHVibGljIHZvaWQgcmVtb3ZlWG1sICggKQotICAgIHsKLSAgICAgICAgWG1sQ3Vyc29yIGMgPSBnZXRDdXJzb3IoKTsKLQotICAgICAgICBpZiAoIWMuaXNTdGFydGRvYygpICYmICFjLmlzRmluaXNoKCkpCi0gICAgICAgICAgICBjLnJlbW92ZVhtbCgpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQm9va21hcmsgZXh0ZW5kcyBYbWxDdXJzb3IuWG1sQm9va21hcmsKLSAgICB7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgY3JlYXRlQm9va21hcmsgKCApIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIGdldEN1cnNvcigpLnNldEJvb2ttYXJrKCBuZXcgQm9va21hcmsoKSApOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBjbGVhckJvb2ttYXJrICggKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBnZXRDdXJzb3IoKS5jbGVhckJvb2ttYXJrKCBCb29rbWFyay5jbGFzcyApOwotICAgIH0KLQotICAgIHB1YmxpYyBSYW5kb20obG9uZyBzZWVkLCBYbWxPYmplY3RbXSBzaGFyZWREb2NzLCBib29sZWFuIHJlYWRvbmx5LCBib29sZWFuIG5vc2F2ZSwgYm9vbGVhbiBub3F1ZXJ5LCBib29sZWFuIGludGVyZmVyZW5jZSkKLSAgICB7Ci0gICAgICAgIF9zZWVkID0gc2VlZDsKLSAgICAgICAgX3JuZCA9IG5ldyBqYXZhLnV0aWwuUmFuZG9tKHNlZWQpOwotICAgICAgICBfZG9jcyA9IHNoYXJlZERvY3M7Ci0gICAgICAgIF9yZWFkb25seSA9IHJlYWRvbmx5OwotICAgICAgICBfbm9zYXZlID0gbm9zYXZlOwotICAgICAgICBfbm9xdWVyeSA9IG5vcXVlcnk7Ci0gICAgICAgIF9pbnRlcmZlcmVuY2UgPSBpbnRlcmZlcmVuY2U7Ci0gICAgfQotCi19Ci0KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL3NjaGVtYXMvZGVmYXVsdHMueHNkIGIvdjIvdGVzdC9zcmMvc2NoZW1hcy9kZWZhdWx0cy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5YTIxMTYuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9zcmMvc2NoZW1hcy9kZWZhdWx0cy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08eHM6c2NoZW1hCi0gICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICB4bWxuczp0bnM9Imh0dHA6Ly9vcGVudXJpLm9yZy9kZWYiCi0gICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9vcGVudXJpLm9yZy9kZWYiCi0gICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0KLSAgPHhzOmVsZW1lbnQgbmFtZT0iZGVmYXVsdHMiPgotICAgIDx4czpjb21wbGV4VHlwZT4KLSAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgICA8eHM6YXR0cmlidXRlIHJlZj0idG5zOmNvb2wiLz4KLSAgICA8L3hzOmNvbXBsZXhUeXBlPgotICA8L3hzOmVsZW1lbnQ+Ci0KLSAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjb29sIiB0eXBlPSJ4czppbnQiIGRlZmF1bHQ9Ijc4MyIvPgotCi08L3hzOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL3NjaGVtYXMvaW5jbHVkZWQueHNkIGIvdjIvdGVzdC9zcmMvc2NoZW1hcy9pbmNsdWRlZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2MjYzYWYuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9zcmMvc2NoZW1hcy9pbmNsdWRlZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08eHM6c2NoZW1hCi0gICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0KLSAgPHhzOmVsZW1lbnQgbmFtZT0iY2hhaW4iIHR5cGU9ImNoYWlubGluayIvPgotCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJjaGFpbmxpbmsiPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgIDx4czplbGVtZW50IHJlZj0iY2hhaW4iLz4KLSAgICA8L3hzOnNlcXVlbmNlPgotICAgIDx4czphdHRyaWJ1dGUgcmVmPSJuYW1lIi8+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0idG9rZW4iPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgICA8eHM6bWF4TGVuZ3RoIHZhbHVlPSI1Ii8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0idG9rZW4iLz4KLQotPC94czpzY2hlbWE+CmRpZmYgLS1naXQgYS92Mi90ZXN0L3NyYy9zY2hlbWFzL2luY2x1ZGVyMS54c2QgYi92Mi90ZXN0L3NyYy9zY2hlbWFzL2luY2x1ZGVyMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4MTEwMjMuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9zcmMvc2NoZW1hcy9pbmNsdWRlcjEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPHhzOnNjaGVtYQotICAgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgeG1sbnM6dG5zPSJodHRwOi8vb3BlbnVyaS5vcmcvaW5jbHVkZXIxIgotICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vb3BlbnVyaS5vcmcvaW5jbHVkZXIxIgotICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCi0gIDx4czppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJpbmNsdWRlZC54c2QiLz4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJvbmVjaGFpbiI+Ci0gICAgPHhzOmNvbXBsZXhUeXBlPgotICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICA8eHM6ZWxlbWVudCByZWY9InRuczpjaGFpbiIvPgotICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICA8L3hzOmNvbXBsZXhUeXBlPgotICA8L3hzOmVsZW1lbnQ+Ci0KLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9zcmMvc2NoZW1hcy9pbmNsdWRlcjIueHNkIGIvdjIvdGVzdC9zcmMvc2NoZW1hcy9pbmNsdWRlcjIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzU2NWRjLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3Qvc3JjL3NjaGVtYXMvaW5jbHVkZXIyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTx4czpzY2hlbWEKLSAgIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgIHhtbG5zOnRucz0iaHR0cDovL29wZW51cmkub3JnL2luY2x1ZGVyMiIKLSAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL29wZW51cmkub3JnL2luY2x1ZGVyMiIKLSAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQotICA8eHM6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iaW5jbHVkZWQueHNkIi8+Ci0KLSAgPHhzOmVsZW1lbnQgbmFtZT0idHdvY2hhaW5zIj4KLSAgICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICAgIDx4czplbGVtZW50IHJlZj0idG5zOmNoYWluIiBtaW5PY2N1cnM9IjIiIG1heE9jY3Vycz0iMiIvPgotICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICA8L3hzOmNvbXBsZXhUeXBlPgotICA8L3hzOmVsZW1lbnQ+Ci0KLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9zcmMvc2NoZW1hcy9pbnR0ZXN0LnhzZCBiL3YyL3Rlc3Qvc3JjL3NjaGVtYXMvaW50dGVzdC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNzIxZGUuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9zcmMvc2NoZW1hcy9pbnR0ZXN0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLTx4czpzY2hlbWEKLSAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotICAgYXR0cmlidXRlRm9ybURlZmF1bHQ9InVucXVhbGlmaWVkIgotICAgdGFyZ2V0TmFtZXNwYWNlPSJqYXZhOmludC50ZXN0IgotICAgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgeG1sbnM6dG5zPSJqYXZhOmludC50ZXN0Ij4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJMYXRpdHVkZURlZ3JlZXNUeXBlIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgICA8ZGVmaW5pdGlvbj5EZWdyZWVzIG9mIExhdGl0dWRlPC9kZWZpbml0aW9uPgotICAgICAgICA8VVNNVEZyZWY+U2VlIFVTTVRGIGZpZWxkIGxhdGl0dWRlLmRlZ3JlZXMuMTcuMTwvVVNNVEZyZWY+Ci0gICAgICAgIDxEb0RYTUxyZWY+VEJEPC9Eb0RYTUxyZWY+Ci0gICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzaG9ydCI+Ci0gICAgICA8eHM6bWluSW5jbHVzaXZlIHZhbHVlPSIwMCIvPgotICAgICAgPHhzOm1heEluY2x1c2l2ZSB2YWx1ZT0iOTAiLz4KLSAgICAgIDx4czpwYXR0ZXJuIHZhbHVlPSJbXGRdezJ9Ii8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9IkxvbmdpdHVkZURlZ3JlZXNUeXBlIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgICA8ZGVmaW5pdGlvbj5EZWdyZWVzIG9mIExvbmdpdHVkZTwvZGVmaW5pdGlvbj4KLSAgICAgICAgPFVTTVRGcmVmPlNlZSBVU01URiBmaWVsZCBsb25naXR1ZGUuZGVncmVlcy4xOC4xPC9VU01URnJlZj4KLSAgICAgICAgPERvRFhNTHJlZj5UQkQ8L0RvRFhNTHJlZj4KLSAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnNob3J0Ij4KLSAgICAgIDx4czptaW5JbmNsdXNpdmUgdmFsdWU9IjAwMCIvPgotICAgICAgPHhzOm1heEluY2x1c2l2ZSB2YWx1ZT0iMTgwIi8+Ci0gICAgICA8eHM6cGF0dGVybiB2YWx1ZT0iW1xkXXszfSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJwb3NpdGlvbiI+Ci0gICAgPHhzOmNvbXBsZXhUeXBlPgotICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJsYXQiIHR5cGU9InRuczpMYXRpdHVkZURlZ3JlZXNUeXBlIi8+Ci0gICAgICAgIDx4czplbGVtZW50IG5hbWU9ImxvbiIgdHlwZT0idG5zOkxvbmdpdHVkZURlZ3JlZXNUeXBlIi8+Ci0gICAgICA8L3hzOnNlcXVlbmNlPgotICAgIDwveHM6Y29tcGxleFR5cGU+Ci0gIDwveHM6ZWxlbWVudD4KLQotPC94czpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9zcmMvc2NoZW1hcy9saXN0YW5kdW5pb24ueHNkIGIvdjIvdGVzdC9zcmMvc2NoZW1hcy9saXN0YW5kdW5pb24ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2RlYWE4Li4wMDAwMDAwCi0tLSBhL3YyL3Rlc3Qvc3JjL3NjaGVtYXMvbGlzdGFuZHVuaW9uLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLTx4czpzY2hlbWEKLSAgIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgIHhtbG5zOnRucz0iaHR0cDovL29wZW51cmkub3JnL2x1dCIKLSAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL29wZW51cmkub3JnL2x1dCIKLSAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJ1bmlvbnMiPgotICAgIDx4czpjb21wbGV4VHlwZT4KLSAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ibm5pIiB0eXBlPSJ0bnM6YWxsTk5JIi8+Ci0gICAgICAgIDx4czplbGVtZW50IG5hbWU9InNpemVzIiB0eXBlPSJ0bnM6bGlzdC1vci1hbGwiLz4KLSAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPC94czpjb21wbGV4VHlwZT4KLSAgPC94czplbGVtZW50PgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9J2xpc3Qtb2YtaW50Jz4KLSAgICA8eHM6bGlzdCBpdGVtVHlwZT0neHM6aW50Jy8+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJhbGxOTkkiPgotICAgIDx4czp1bmlvbiBtZW1iZXJUeXBlcz0ieHM6bm9uTmVnYXRpdmVJbnRlZ2VyIj4KLSAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Tk1UT0tFTiI+Ci0gICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICA8L3hzOnVuaW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0ibGlzdC1vci1hbGwiPgotICAgIDx4czp1bmlvbiBtZW1iZXJUeXBlcz0idG5zOmxpc3Qtb2YtaW50Ij4KLSAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Tk1UT0tFTiI+Ci0gICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJhbGwiLz4KLSAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InVua25vd24iLz4KLSAgICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICA8L3hzOnVuaW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0ibGlzdC1vZi1hbGxOTkkiPgotICAgIDx4czpsaXN0IGl0ZW1UeXBlPSJ0bnM6YWxsTk5JIi8+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJsaXN0cyI+Ci0gICAgPHhzOmNvbXBsZXhUeXBlPgotICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJpbnQtbGlzdCIgdHlwZT0idG5zOmxpc3Qtb2YtaW50Ii8+Ci0gICAgICAgIDx4czplbGVtZW50IG5hbWU9Im5uaS1saXN0IiB0eXBlPSJ0bnM6bGlzdC1vZi1hbGxOTkkiLz4KLSAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPC94czpjb21wbGV4VHlwZT4KLSAgPC94czplbGVtZW50PgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9ImRhdGUtb3ItZGF0ZVRpbWUiPgotICAgIDx4czp1bmlvbiBtZW1iZXJUeXBlcz0ieHM6ZGF0ZSB4czpkYXRlVGltZSIvPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOmVsZW1lbnQgbmFtZT0id2hlbiIgdHlwZT0idG5zOmRhdGUtb3ItZGF0ZVRpbWUiLz4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJpbmNpZGVudC1yZXBvcnRzIj4KLSAgICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICAgIDx4czplbGVtZW50IHJlZj0idG5zOndoZW4iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPC94czpjb21wbGV4VHlwZT4KLSAgPC94czplbGVtZW50PgotCi08L3hzOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL3NjaGVtYXMvbmFtZXdvcmxkLnhzZCBiL3YyL3Rlc3Qvc3JjL3NjaGVtYXMvbmFtZXdvcmxkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNkMGFlOC4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L3NyYy9zY2hlbWFzL25hbWV3b3JsZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08eHM6c2NoZW1hCi0gICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICB4bWxuczpudz0iaHR0cDovL29wZW51cmkub3JnL25hbWV3b3JsZCIKLSAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL29wZW51cmkub3JnL25hbWV3b3JsZCIKLSAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJuYW1ld29ybGQiPgotICAgIDx4czpjb21wbGV4VHlwZT4KLSAgICAgIDx4czpzZXF1ZW5jZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgIDx4czplbGVtZW50IG5hbWU9ImlzbGFuZCI+Ci0gICAgICAgICAgPHhzOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPHhzOnNlcXVlbmNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ibG9jYXRpb24iIHR5cGU9Im53OmxvYyIvPgotICAgICAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idGFyZ2V0TmFtZXNwYWNlIiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICAgICAgICA8L3hzOmNvbXBsZXhUeXBlPgotICAgICAgICA8L3hzOmVsZW1lbnQ+Ci0gICAgICA8L3hzOnNlcXVlbmNlPgotICAgIDwveHM6Y29tcGxleFR5cGU+Ci0gIDwveHM6ZWxlbWVudD4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ibG9jIj4KLSAgICA8eHM6c2VxdWVuY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icmVmZXJlbmNlIj4KLSAgICAgICAgPHhzOmNvbXBsZXhUeXBlPgotICAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idG8iIHR5cGU9InhzOlFOYW1lIi8+Ci0gICAgICAgIDwveHM6Y29tcGxleFR5cGU+Ci0gICAgICA8L3hzOmVsZW1lbnQ+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzOnN0cmluZyIvPgotICA8L3hzOmNvbXBsZXhUeXBlPgotCi08L3hzOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL3NjaGVtYXMvbm9uYW1lc3BhY2UueHNkIGIvdjIvdGVzdC9zcmMvc2NoZW1hcy9ub25hbWVzcGFjZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmNDU2MWQuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9zcmMvc2NoZW1hcy9ub25hbWVzcGFjZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08eHM6c2NoZW1hCi0gICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0KLSAgPHhzOmVsZW1lbnQgbmFtZT0ibmNoYWluIiB0eXBlPSJuY2hhaW5saW5rIi8+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Im5jaGFpbmxpbmsiPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgIDx4czplbGVtZW50IHJlZj0ibmNoYWluIi8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YXR0cmlidXRlIHJlZj0ibm5hbWUiLz4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJudG9rZW4iPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgICA8eHM6bWF4TGVuZ3RoIHZhbHVlPSI1Ii8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czphdHRyaWJ1dGUgbmFtZT0ibm5hbWUiIHR5cGU9Im50b2tlbiIvPgotCi08L3hzOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL3NjaGVtYXMvc3Vic3Rncm91cC54c2QgYi92Mi90ZXN0L3NyYy9zY2hlbWFzL3N1YnN0Z3JvdXAueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjNhODg0Li4wMDAwMDAwCi0tLSBhL3YyL3Rlc3Qvc3JjL3NjaGVtYXMvc3Vic3Rncm91cC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL29wZW51cmkub3JnL3NncyIgeG1sbnM6c2c9Imh0dHA6Ly9vcGVudXJpLm9yZy9zZ3MiPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDIiB0eXBlPSJ4c2Q6dG9rZW4iIHN1YnN0aXR1dGlvbkdyb3VwPSJzZzpCIi8+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IkEiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQiIgdHlwZT0ieHNkOm5vcm1hbGl6ZWRTdHJpbmciIHN1YnN0aXR1dGlvbkdyb3VwPSJzZzpBIi8+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iWiIgdHlwZT0ic2c6RXh0IiBzdWJzdGl0dXRpb25Hcm91cD0ic2c6WSIgLz4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iWSIgc3Vic3RpdHV0aW9uR3JvdXA9InNnOlgiIC8+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IlgiIHR5cGU9InNnOkJhc2UiLz4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJBbnlUeXBlIi8+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9IkFueVR5cGVUYWlsIiBzdWJzdGl0dXRpb25Hcm91cD0ic2c6QW55VHlwZSIvPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9IkFub25TaW1wbGUiPgotICAgICAgICA8eHNkOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDppbnQiPgotICAgICAgICAgICAgICAgIDx4c2Q6bWF4RXhjbHVzaXZlIHZhbHVlPSIxMDAiLz4KLSAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgotICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgotICAgIDwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQW5vblNpbXBsZVRhaWwiIHN1YnN0aXR1dGlvbkdyb3VwPSJzZzpBbm9uU2ltcGxlIi8+Ci0KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQW5vbkNvbXBsZXgiPgotICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZm9vIiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0gICAgPC94c2Q6ZWxlbWVudD4KLQotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJBbm9uQ29tcGxleFRhaWwiIHN1YnN0aXR1dGlvbkdyb3VwPSJzZzpBbm9uQ29tcGxleCIvPgotCi0gICAgPHhzZDplbGVtZW50IG5hbWU9InJvb3QiPgotICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IHJlZj0ic2c6QSIvPgotICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgotICAgIDwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkJhc2UiPgotICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InN0ciIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8L3hzZDpjb21wbGV4VHlwZT4KLQotICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iVW5yZWxhdGVkIj4KLSAgICAgICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzdHIiIHR5cGU9InhzZDpzdHJpbmciLz4KLSAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci0KLSAgICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkV4dCI+Ci0gICAgICAgIDx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJzZzpCYXNlIj4KLSAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaW50IiB0eXBlPSJ4c2Q6aW50Ii8+Ci0gICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgICAgIDwveHNkOmNvbXBsZXhDb250ZW50PgotICAgIDwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDplbGVtZW50IG5hbWU9ImFic3RyYWN0VGVzdCI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmFsbD4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJzZzphYnN0cmFjdCIvPgotCQkJPC94c2Q6YWxsPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCi0JPHhzZDplbGVtZW50IG5hbWU9ImFic3RyYWN0IiB0eXBlPSJ4c2Q6c3RyaW5nIiBhYnN0cmFjdD0idHJ1ZSIvPgotICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJjb25jcmV0ZSIgc3Vic3RpdHV0aW9uR3JvdXA9InNnOmFic3RyYWN0Ii8+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iYmxvY2tUZXN0Ij4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6YWxsPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9InNnOmJsb2NrIi8+Ci0JCQk8L3hzZDphbGw+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0iYmxvY2siIHR5cGU9InhzZDpzdHJpbmciIGJsb2NrPSJzdWJzdGl0dXRpb24iLz4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0ic3ViYmxvY2siIHN1YnN0aXR1dGlvbkdyb3VwPSJzZzpibG9jayIvPgotCi08L3hzZDpzY2hlbWE+CmRpZmYgLS1naXQgYS92Mi90ZXN0L3NyYy9zdHJlYW10ZXN0L0ludGVybi5qYXZhIGIvdjIvdGVzdC9zcmMvc3RyZWFtdGVzdC9JbnRlcm4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNkOTljOS4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L3NyYy9zdHJlYW10ZXN0L0ludGVybi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzQ0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2Ugc3RyZWFtdGVzdDsKLQotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotCi1wdWJsaWMgY2xhc3MgSW50ZXJuCi17Ci0gICAgc3RhdGljIGZpbmFsIGludCBNQVhfSVRFUiA9IDEwMDA7Ci0gICAgc3RhdGljIGZpbmFsIGludCBNQVhfQ1JFQVRFID0gMTAwOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0NPTVAgPSAxMDA7Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICAgIHsKLSAgICAgICAgY2hhcltdIGNhID0geyAnYScsICdhJywgJ2EnfTsKLQotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFhYSIgPT0gImFhYSIpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFhYSIgPT0gbmV3IFN0cmluZygiYWFhIikpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFhYSIgPT0gbmV3IFN0cmluZyhjYSkpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFhYSIgPT0gbmV3IFN0cmluZyhjYSkuaW50ZXJuKCkpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFhYSIgPT0gU3RyaW5nLnZhbHVlT2YoY2EpKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJhYWEiID09IFN0cmluZy5jb3B5VmFsdWVPZihjYSkpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImFhYSIgPT0gImFhYSIpOwotCi0gICAgICAgIGxvbmcgc3RhcnQ7Ci0gICAgICAgIGRvdWJsZSBkMSA9IDA7Ci0gICAgICAgIGRvdWJsZSBkMiA9IDA7Ci0gICAgICAgIGRvdWJsZSBkMyA9IDA7Ci0KLSAgICAgICAgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKLSAgICAgICAgZm9yKCBpbnQgaSA9IDA7IGk8TUFYX0lURVI7IGkrKyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIENhY2hlIGNhY2hlID0gbmV3IENhY2hlKCk7Ci0gICAgICAgICAgICBDYWNoZS5RTmFtZSBxbjEgPSBjYWNoZS5jcmVhdGUxKFN0cmluZy52YWx1ZU9mKCBNYXRoLgotICAgICAgICAgICAgICAgICAgICByb3VuZChNYXRoLnJhbmRvbSgpKk1BWF9DUkVBVEUvMTApKS5pbnRlcm4oKSwKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nLnZhbHVlT2YoTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKk1BWF9DUkVBVEUvMTApKS4KLSAgICAgICAgICAgICAgICAgICAgaW50ZXJuKCkpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHFuMS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIGZvciggaW50IGo9MDsgajxNQVhfQ1JFQVRFOyBqKysgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENhY2hlLlFOYW1lIHFuMiA9IGNhY2hlLmNyZWF0ZTEoU3RyaW5nLnZhbHVlT2YoIE1hdGguCi0gICAgICAgICAgICAgICAgICAgIHJvdW5kKE1hdGgucmFuZG9tKCkqTUFYX0NSRUFURS8xMCkpLmludGVybigpLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcudmFsdWVPZihNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqTUFYX0NSRUFURS8xMCkpLgotICAgICAgICAgICAgICAgICAgICBpbnRlcm4oKSk7Ci0gICAgICAgICAgICAgICAgZm9yKCBpbnQgaz0wOyBrPE1BWF9DT01QOyBrKysgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBiID0gcW4xID09IHFuMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZDEgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHN0YXJ0OwotCi0gICAgICAgIHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7Ci0gICAgICAgIGZvciggaW50IGkgPSAwOyBpPE1BWF9JVEVSOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWNoZSBjYWNoZSA9IG5ldyBDYWNoZSgpOwotICAgICAgICAgICAgQ2FjaGUuUU5hbWUgcW4xID0gY2FjaGUuY3JlYXRlMShTdHJpbmcudmFsdWVPZiggTWF0aC4KLSAgICAgICAgICAgICAgICAgICAgcm91bmQoTWF0aC5yYW5kb20oKSpNQVhfQ1JFQVRFLzEwKSkuaW50ZXJuKCksCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZy52YWx1ZU9mKE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSpNQVhfQ1JFQVRFLzEwKSkuCi0gICAgICAgICAgICAgICAgICAgIGludGVybigpKTsKLSAgICAgICAgICAgIGZvciggaW50IGo9MDsgajxNQVhfQ1JFQVRFOyBqKysgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENhY2hlLlFOYW1lIHFuMiA9IGNhY2hlLmNyZWF0ZTEoU3RyaW5nLnZhbHVlT2YoIE1hdGguCi0gICAgICAgICAgICAgICAgICAgIHJvdW5kKE1hdGgucmFuZG9tKCkqTUFYX0NSRUFURS8xMCkpLmludGVybigpLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcudmFsdWVPZihNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqTUFYX0NSRUFURS8xMCkpLgotICAgICAgICAgICAgICAgICAgICBpbnRlcm4oKSk7Ci0gICAgICAgICAgICAgICAgZm9yKCBpbnQgaz0wOyBrPE1BWF9DT01QOyBrKysgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBiID0gcW4xLmVxdWFsSW50ZXJuKHFuMik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGQyID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydDsKLQotICAgICAgICBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwotICAgICAgICBmb3IoIGludCBpID0gMDsgaTxNQVhfSVRFUjsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgQ2FjaGUgY2FjaGUgPSBuZXcgQ2FjaGUoKTsKLSAgICAgICAgICAgIENhY2hlLlFOYW1lIHFuMSA9IGNhY2hlLmNyZWF0ZTEoU3RyaW5nLnZhbHVlT2YoIE1hdGguCi0gICAgICAgICAgICAgICAgICAgIHJvdW5kKE1hdGgucmFuZG9tKCkqTUFYX0NSRUFURS8xMCkpLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcudmFsdWVPZihNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqTUFYX0NSRUFURS8xMCkpKTsKLSAgICAgICAgICAgIGZvciggaW50IGo9MDsgajxNQVhfQ1JFQVRFOyBqKysgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENhY2hlLlFOYW1lIHFuMiA9IGNhY2hlLmNyZWF0ZTEoU3RyaW5nLnZhbHVlT2YoIE1hdGguCi0gICAgICAgICAgICAgICAgICAgIHJvdW5kKE1hdGgucmFuZG9tKCkqTUFYX0NSRUFURS8xMCkpLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcudmFsdWVPZihNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqTUFYX0NSRUFURS8xMCkpKTsKLSAgICAgICAgICAgICAgICBmb3IoIGludCBrPTA7IGs8TUFYX0NPTVA7IGsrKyApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBib29sZWFuIGIgPSBxbjEuZXF1YWxFeHRlcm4ocW4yKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZDMgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHN0YXJ0OwotCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY3JlYXRlMTpcdCIgKyBkMSArICJcdCIgKyBkMiArICJcdCIgKyBkMyk7Ci0KLSAgICAgICAgLy9jcmVhdGUyCi0gICAgICAgIHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7Ci0gICAgICAgIGZvciggaW50IGkgPSAwOyBpPE1BWF9JVEVSOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWNoZSBjYWNoZSA9IG5ldyBDYWNoZSgpOwotICAgICAgICAgICAgQ2FjaGUuUU5hbWUgcW4xID0gY2FjaGUuY3JlYXRlMihTdHJpbmcudmFsdWVPZiggTWF0aC4KLSAgICAgICAgICAgICAgICAgICAgcm91bmQoTWF0aC5yYW5kb20oKSpNQVhfQ1JFQVRFLzEwKSkuaW50ZXJuKCksCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZy52YWx1ZU9mKE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSpNQVhfQ1JFQVRFLzEwKSkuCi0gICAgICAgICAgICAgICAgICAgIGludGVybigpKTsKLSAgICAgICAgICAgIGZvciggaW50IGo9MDsgajxNQVhfQ1JFQVRFOyBqKysgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENhY2hlLlFOYW1lIHFuMiA9IGNhY2hlLmNyZWF0ZTIoU3RyaW5nLnZhbHVlT2YoIE1hdGguCi0gICAgICAgICAgICAgICAgICAgIHJvdW5kKE1hdGgucmFuZG9tKCkqTUFYX0NSRUFURS8xMCkpLmludGVybigpLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcudmFsdWVPZihNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqTUFYX0NSRUFURS8xMCkpLgotICAgICAgICAgICAgICAgICAgICBpbnRlcm4oKSk7Ci0gICAgICAgICAgICAgICAgZm9yKCBpbnQgaz0wOyBrPE1BWF9DT01QOyBrKysgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBiID0gcW4xID09IHFuMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZDEgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHN0YXJ0OwotCi0gICAgICAgIHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7Ci0gICAgICAgIGZvciggaW50IGkgPSAwOyBpPE1BWF9JVEVSOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWNoZSBjYWNoZSA9IG5ldyBDYWNoZSgpOwotICAgICAgICAgICAgQ2FjaGUuUU5hbWUgcW4xID0gY2FjaGUuY3JlYXRlMihTdHJpbmcudmFsdWVPZiggTWF0aC4KLSAgICAgICAgICAgICAgICAgICAgcm91bmQoTWF0aC5yYW5kb20oKSpNQVhfQ1JFQVRFLzEwKSkuaW50ZXJuKCksCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZy52YWx1ZU9mKE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSpNQVhfQ1JFQVRFLzEwKSkuCi0gICAgICAgICAgICAgICAgICAgIGludGVybigpKTsKLSAgICAgICAgICAgIGZvciggaW50IGo9MDsgajxNQVhfQ1JFQVRFOyBqKysgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENhY2hlLlFOYW1lIHFuMiA9IGNhY2hlLmNyZWF0ZTIoU3RyaW5nLnZhbHVlT2YoIE1hdGguCi0gICAgICAgICAgICAgICAgICAgIHJvdW5kKE1hdGgucmFuZG9tKCkqTUFYX0NSRUFURS8xMCkpLmludGVybigpLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcudmFsdWVPZihNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqTUFYX0NSRUFURS8xMCkpLgotICAgICAgICAgICAgICAgICAgICBpbnRlcm4oKSk7Ci0gICAgICAgICAgICAgICAgZm9yKCBpbnQgaz0wOyBrPE1BWF9DT01QOyBrKysgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBiID0gcW4xLmVxdWFsSW50ZXJuKHFuMik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGQyID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydDsKLQotICAgICAgICBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwotICAgICAgICBmb3IoIGludCBpID0gMDsgaTxNQVhfSVRFUjsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgQ2FjaGUgY2FjaGUgPSBuZXcgQ2FjaGUoKTsKLSAgICAgICAgICAgIENhY2hlLlFOYW1lIHFuMSA9IGNhY2hlLmNyZWF0ZTIoU3RyaW5nLnZhbHVlT2YoIE1hdGguCi0gICAgICAgICAgICAgICAgICAgIHJvdW5kKE1hdGgucmFuZG9tKCkqTUFYX0NSRUFURS8xMCkpLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcudmFsdWVPZihNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqTUFYX0NSRUFURS8xMCkpKTsKLSAgICAgICAgICAgIGZvciggaW50IGo9MDsgajxNQVhfQ1JFQVRFOyBqKysgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENhY2hlLlFOYW1lIHFuMiA9IGNhY2hlLmNyZWF0ZTIoU3RyaW5nLnZhbHVlT2YoIE1hdGguCi0gICAgICAgICAgICAgICAgICAgIHJvdW5kKE1hdGgucmFuZG9tKCkqTUFYX0NSRUFURS8xMCkpLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcudmFsdWVPZihNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqTUFYX0NSRUFURS8xMCkpKTsKLSAgICAgICAgICAgICAgICBmb3IoIGludCBrPTA7IGs8TUFYX0NPTVA7IGsrKyApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBib29sZWFuIGIgPSBxbjEuZXF1YWxFeHRlcm4ocW4yKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZDMgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHN0YXJ0OwotCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY3JlYXRlMjpcdCIgKyBkMSArICJcdCIgKyBkMiArICJcdCIgKyBkMyk7Ci0KLSAgICAgICAgLy9jcmVhdGUzCi0gICAgICAgIHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7Ci0gICAgICAgIGZvciggaW50IGkgPSAwOyBpPE1BWF9JVEVSOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWNoZSBjYWNoZSA9IG5ldyBDYWNoZSgpOwotICAgICAgICAgICAgQ2FjaGUuUU5hbWUgcW4xID0gY2FjaGUuY3JlYXRlMyhTdHJpbmcudmFsdWVPZiggTWF0aC4KLSAgICAgICAgICAgICAgICAgICAgcm91bmQoTWF0aC5yYW5kb20oKSpNQVhfQ1JFQVRFLzEwKSkuaW50ZXJuKCksCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZy52YWx1ZU9mKE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSpNQVhfQ1JFQVRFLzEwKSkuCi0gICAgICAgICAgICAgICAgICAgIGludGVybigpKTsKLSAgICAgICAgICAgIGZvciggaW50IGo9MDsgajxNQVhfQ1JFQVRFOyBqKysgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENhY2hlLlFOYW1lIHFuMiA9IGNhY2hlLmNyZWF0ZTMoU3RyaW5nLnZhbHVlT2YoIE1hdGguCi0gICAgICAgICAgICAgICAgICAgIHJvdW5kKE1hdGgucmFuZG9tKCkqTUFYX0NSRUFURS8xMCkpLmludGVybigpLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcudmFsdWVPZihNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqTUFYX0NSRUFURS8xMCkpLgotICAgICAgICAgICAgICAgICAgICBpbnRlcm4oKSk7Ci0gICAgICAgICAgICAgICAgZm9yKCBpbnQgaz0wOyBrPE1BWF9DT01QOyBrKysgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBiID0gcW4xID09IHFuMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZDEgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHN0YXJ0OwotCi0gICAgICAgIHN0YXJ0ID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7Ci0gICAgICAgIGZvciggaW50IGkgPSAwOyBpPE1BWF9JVEVSOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBDYWNoZSBjYWNoZSA9IG5ldyBDYWNoZSgpOwotICAgICAgICAgICAgQ2FjaGUuUU5hbWUgcW4xID0gY2FjaGUuY3JlYXRlMyhTdHJpbmcudmFsdWVPZiggTWF0aC4KLSAgICAgICAgICAgICAgICAgICAgcm91bmQoTWF0aC5yYW5kb20oKSpNQVhfQ1JFQVRFLzEwKSkuaW50ZXJuKCksCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZy52YWx1ZU9mKE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSpNQVhfQ1JFQVRFLzEwKSkuCi0gICAgICAgICAgICAgICAgICAgIGludGVybigpKTsKLSAgICAgICAgICAgIGZvciggaW50IGo9MDsgajxNQVhfQ1JFQVRFOyBqKysgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENhY2hlLlFOYW1lIHFuMiA9IGNhY2hlLmNyZWF0ZTMoU3RyaW5nLnZhbHVlT2YoIE1hdGguCi0gICAgICAgICAgICAgICAgICAgIHJvdW5kKE1hdGgucmFuZG9tKCkqTUFYX0NSRUFURS8xMCkpLmludGVybigpLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcudmFsdWVPZihNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqTUFYX0NSRUFURS8xMCkpLgotICAgICAgICAgICAgICAgICAgICBpbnRlcm4oKSk7Ci0gICAgICAgICAgICAgICAgZm9yKCBpbnQgaz0wOyBrPE1BWF9DT01QOyBrKysgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBiID0gcW4xLmVxdWFsSW50ZXJuKHFuMik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGQyID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydDsKLQotICAgICAgICBzdGFydCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwotICAgICAgICBmb3IoIGludCBpID0gMDsgaTxNQVhfSVRFUjsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgQ2FjaGUgY2FjaGUgPSBuZXcgQ2FjaGUoKTsKLSAgICAgICAgICAgIENhY2hlLlFOYW1lIHFuMSA9IGNhY2hlLmNyZWF0ZTMoU3RyaW5nLnZhbHVlT2YoIE1hdGguCi0gICAgICAgICAgICAgICAgICAgIHJvdW5kKE1hdGgucmFuZG9tKCkqTUFYX0NSRUFURS8xMCkpLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcudmFsdWVPZihNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqTUFYX0NSRUFURS8xMCkpKTsKLSAgICAgICAgICAgIGZvciggaW50IGo9MDsgajxNQVhfQ1JFQVRFOyBqKysgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENhY2hlLlFOYW1lIHFuMiA9IGNhY2hlLmNyZWF0ZTMoU3RyaW5nLnZhbHVlT2YoIE1hdGguCi0gICAgICAgICAgICAgICAgICAgIHJvdW5kKE1hdGgucmFuZG9tKCkqTUFYX0NSRUFURS8xMCkpLAotICAgICAgICAgICAgICAgICAgICBTdHJpbmcudmFsdWVPZihNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkqTUFYX0NSRUFURS8xMCkpKTsKLSAgICAgICAgICAgICAgICBmb3IoIGludCBrPTA7IGs8TUFYX0NPTVA7IGsrKyApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBib29sZWFuIGIgPSBxbjEuZXF1YWxFeHRlcm4ocW4yKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZDMgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHN0YXJ0OwotCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY3JlYXRlMzpcdCIgKyBkMSArICJcdCIgKyBkMiArICJcdCIgKyBkMyk7Ci0gICAgfQotfQotCi1jbGFzcyBDYWNoZQotewotICAgIEhhc2hNYXAgaDEgPSBuZXcgSGFzaE1hcCgpOwotCi0gICAgUU5hbWUgY3JlYXRlMShTdHJpbmcgbCwgU3RyaW5nIHUpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IFFOYW1lKGwgLHUpOwotICAgIH0KLQotICAgIFFOYW1lIGNyZWF0ZTIoU3RyaW5nIGwsIFN0cmluZyB1KQotICAgIHsKLSAgICAgICAgaW50IGhjb2RlID0gbC5oYXNoQ29kZSgpICsgMzMqdS5oYXNoQ29kZSgpOwotICAgICAgICBJbnRlZ2VyIGtleSA9IG5ldyBJbnRlZ2VyKGhjb2RlKTsKLQotICAgICAgICBpZiggaDEuY29udGFpbnNLZXkoIGtleSApICkKLSAgICAgICAgICAgIHJldHVybiAoUU5hbWUpaDEuZ2V0KGtleSk7Ci0KLSAgICAgICAgUU5hbWUgcW4gPSBuZXcgUU5hbWUobCwgdSk7Ci0gICAgICAgIGgxLnB1dChrZXksIHFuKTsKLSAgICAgICAgcmV0dXJuIHFuOwotICAgIH0KLQotICAgIHN5bmNocm9uaXplZCBRTmFtZSBjcmVhdGUzKFN0cmluZyBsLCBTdHJpbmcgdSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGUyKGwsIHUpOwotICAgIH0KLQotICAgIHN0YXRpYyBjbGFzcyBRTmFtZQotICAgIHsKLSAgICAgICAgcHJpdmF0ZSBTdHJpbmcgbG9jYWw7Ci0gICAgICAgIHByaXZhdGUgU3RyaW5nIHVyaTsKLQotICAgICAgICBwcml2YXRlIFFOYW1lKCkKLSAgICAgICAge30KLSAgICAgICAgcHJpdmF0ZSBRTmFtZShTdHJpbmcgbCwgU3RyaW5nIHUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvY2FsID0gbDsKLSAgICAgICAgICAgIHVyaSA9IHU7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sZWFuIGVxdWFsSW50ZXJuKCBRTmFtZSBxbiApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsb2NhbD09cW4ubG9jYWwgJiYgdXJpPT1xbi51cmk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sZWFuIGVxdWFsRXh0ZXJuKCBRTmFtZSBxbiApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsb2NhbC5lcXVhbHMocW4ubG9jYWwpICYmIHVyaS5lcXVhbHMocW4udXJpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbG9jYWwgKyAiLCIgKyB1cmk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL3N0cmVhbXRlc3QvU3ViU3RyZWFtc1Rlc3QuamF2YSBiL3YyL3Rlc3Qvc3JjL3N0cmVhbXRlc3QvU3ViU3RyZWFtc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdhMDIyNy4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L3NyYy9zdHJlYW10ZXN0L1N1YlN0cmVhbXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMTcgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBzdHJlYW10ZXN0OwotCi0vKgotKiBDcmVhdGVkIGJ5IGNlemFyQGJlYS5jb20KLSovCi0KLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbjsKLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtOwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW1GYWN0b3J5OwotCi1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci0KLWltcG9ydCBvcmcueG1scHVsbC52MS5YbWxQdWxsUGFyc2VyRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWxwdWxsLnN0cmVhbS5YbWxTdHJlYW1Tb3VyY2U7Ci1pbXBvcnQgb3JnLnhtbHB1bGwuc3RyZWFtLlhwcFhtbFN0cmVhbUltcGw7Ci1pbXBvcnQgb3JnLnhtbHB1bGwuc3RyZWFtLlhtbFN0cmVhbUZhY3Rvcnk7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgU3ViU3RyZWFtc1Rlc3QKLXsKLSAgICBwdWJsaWMgU3ViU3RyZWFtc1Rlc3QoU3RyaW5nIG5hbWUpCi0gICAgewotICAgICAgICAvL3N1cGVyKG5hbWUpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHRlc3RTdWJTdHJlYW0oKQotICAgIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJJdCB3b3Jrcy4iKTsKLQotICAgICAgICAvL3Rocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJLZXZpbidzIGV4Y2VwdGlvbiIpOwotCi0gICAgICAgIC8vYXNzZXJ0VHJ1ZSggdHJ1ZSApOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCi0gICAgICAgIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24sIFhNTFN0cmVhbUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sCi0gICAgICAgICAgICBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uCi0gICAgewotICAgICAgICBSZWFkZXIgcmVhZGVyMTsKLSAgICAgICAgUmVhZGVyIHJlYWRlcjI7Ci0gICAgICAgIGlmKCBhcmdzLmxlbmd0aD09MCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBzID0gIjxhPjxiPjxjIGExPSdhMXYnIGEyPSdhMnYnIC8+PC9iPjx4Lz4iICsKLSAgICAgICAgICAgICAgICAiPHk+U29tZSB0ZXh0PC95PjwvYT4iOwotICAgICAgICAgICAgcmVhZGVyMSA9IG5ldyBTdHJpbmdSZWFkZXIocyk7Ci0gICAgICAgICAgICByZWFkZXIyID0gbmV3IFN0cmluZ1JlYWRlcihzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlYWRlcjEgPSBuZXcgRmlsZVJlYWRlcihhcmdzWzBdKTsKLSAgICAgICAgICAgIHJlYWRlcjIgPSBuZXcgRmlsZVJlYWRlcihhcmdzWzBdKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigicmVhZGVyIC4uLiIpOwotICAgICAgICBYbWxTdHJlYW1Tb3VyY2Ugc291cmNlID0gbmV3IFhwcFhtbFN0cmVhbUltcGwocmVhZGVyMSk7Ci0gICAgICAgIFhNTElucHV0U3RyZWFtIG15U3RyZWFtID0gWG1sU3RyZWFtRmFjdG9yeS4KLSAgICAgICAgICAgICAgICBjcmVhdGVYbWxJbnB1dFN0cmVhbSggc291cmNlICk7Ci0KLSAgICAgICAgWE1MSW5wdXRTdHJlYW0gYmFiZWxTdHJlYW0gPSBYTUxJbnB1dFN0cmVhbUZhY3RvcnkubmV3SW5zdGFuY2UoKS4KLSAgICAgICAgICAgIG5ld0lucHV0U3RyZWFtKHJlYWRlcjIpOwotCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibXlTdHJlYW0gLi4uIik7Ci0gICAgICAgIGZvcihpbnQgaT0wOyBteVN0cmVhbS5oYXNOZXh0KCkgJiYgaTwzOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIm15OiAiICsgbXlTdHJlYW0uaGFzTmV4dCgpICsgIiAnIiArCi0gICAgICAgICAgICAgICAgbXlTdHJlYW0ubmV4dCgpICsgIiciKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggImJiOiAiICsgYmFiZWxTdHJlYW0uaGFzTmV4dCgpICsgIiAnIiArCi0gICAgICAgICAgICAgICAgICAgIGJhYmVsU3RyZWFtLm5leHQoKSArICInIik7Ci0gICAgICAgIH0KLQotICAgICAgICBYTUxJbnB1dFN0cmVhbSBteXNzID0gbXlTdHJlYW0uZ2V0U3ViU3RyZWFtKCk7Ci0gICAgICAgIFhNTElucHV0U3RyZWFtIGJic3MgPSBiYWJlbFN0cmVhbS5nZXRTdWJTdHJlYW0oKTsKLQotICAgICAgICBmb3IoaW50IGk9MDsgKG15c3MuaGFzTmV4dCgpIHx8IGJic3MuaGFzTmV4dCgpKSAmJiBpPDM7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAibXkgU1VCU3RyZWFtOiAiICsgbXlzcy5oYXNOZXh0KCkgKyAiICciICsKLSAgICAgICAgICAgICAgICAgICAgbXlzcy5uZXh0KCkgKyAiJyIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiYmIgU1VCU3RyZWFtOiAiICsgYmJzcy5oYXNOZXh0KCkgKyAiICciICsKLSAgICAgICAgICAgICAgICAgICAgYmJzcy5uZXh0KCkgKyAiJyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgWE1MSW5wdXRTdHJlYW0gbXlzczIgPSBteXNzLmdldFN1YlN0cmVhbSgpOwotICAgICAgICBYTUxJbnB1dFN0cmVhbSBiYnNzMiA9IG15c3MuZ2V0U3ViU3RyZWFtKCk7Ci0gICAgICAgIGZvcig7IG15c3MyLmhhc05leHQoKSB8fCBiYnNzMi5oYXNOZXh0KCkgOykKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAibXkgU3ViU1VCU3RyZWFtIDI6ICIgKyBteXNzMi5oYXNOZXh0KCkgKwotICAgICAgICAgICAgICAgICAgICAiICciICsgbXlzczIubmV4dCgpICsgIiciKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggImJiIFN1YlNVQlN0cmVhbSAyOiAiICsgYmJzczIuaGFzTmV4dCgpICsKLSAgICAgICAgICAgICAgICAgICAgIiAnIiArIGJic3MyLm5leHQoKSArICInIik7Ci0gICAgICAgIH0KLSAgICAgICAgbXlzczIuY2xvc2UoKTsKLSAgICAgICAgYmJzczIuY2xvc2UoKTsKLQotICAgICAgICBmb3IoOyBteXNzLmhhc05leHQoKSB8fCBiYnNzLmhhc05leHQoKSA7KQotICAgICAgICB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJteSBTVUJTdHJlYW06ICIgKyBteXNzLmhhc05leHQoKSArICIgJyIgKwotICAgICAgICAgICAgICAgICAgICBteXNzLm5leHQoKSArICInIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJiYiBTVUJTdHJlYW06ICIgKyBiYnNzLmhhc05leHQoKSArICIgJyIgKwotICAgICAgICAgICAgICAgICAgICBiYnNzLm5leHQoKSArICInIik7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IoOyBteVN0cmVhbS5oYXNOZXh0KCkgfHwgYmFiZWxTdHJlYW0uaGFzTmV4dCgpOykKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAibXk6ICIgKyBteVN0cmVhbS5oYXNOZXh0KCkgKyAiICciICsKLSAgICAgICAgICAgICAgICAgICAgbXlTdHJlYW0ubmV4dCgpICsgIiciKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggImJiOiAiICsgYmFiZWxTdHJlYW0uaGFzTmV4dCgpICsgIiAnIiArCi0gICAgICAgICAgICAgICAgICAgIGJhYmVsU3RyZWFtLm5leHQoKSArICInIik7Ci0gICAgICAgIH0KLQotICAgICAgICBtYWluMigpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluMigpCi0gICAgICAgIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24sIFhNTFN0cmVhbUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sCi0gICAgICAgICAgICBYbWxQdWxsUGFyc2VyRXhjZXB0aW9uCi0gICAgewotICAgICAgICBSZWFkZXIgcmVhZGVyMTsKLSAgICAgICAgUmVhZGVyIHJlYWRlcjI7Ci0gICAgICAgICAgICBTdHJpbmcgcyA9ICI8YT48Yj48YyBhMT0nYTF2JyBhMj0nYTJ2JyAvPjwvYj48eC8+IiArCi0gICAgICAgICAgICAgICAgIjx5PlNvbWUgdGV4dDwveT48L2E+IjsKLSAgICAgICAgICAgIHJlYWRlcjEgPSBuZXcgU3RyaW5nUmVhZGVyKHMpOwotICAgICAgICAgICAgcmVhZGVyMiA9IG5ldyBTdHJpbmdSZWFkZXIocyk7Ci0KLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZWFkZXIgLi4uIik7Ci0gICAgICAgIFhtbFN0cmVhbVNvdXJjZSBzb3VyY2UgPSBuZXcgWHBwWG1sU3RyZWFtSW1wbChyZWFkZXIxKTsKLSAgICAgICAgWE1MSW5wdXRTdHJlYW0gbXlTdHJlYW0gPSBYbWxTdHJlYW1GYWN0b3J5LgotICAgICAgICAgICAgICAgIGNyZWF0ZVhtbElucHV0U3RyZWFtKCBzb3VyY2UgKTsKLQotICAgICAgICBYTUxJbnB1dFN0cmVhbSBiYWJlbFN0cmVhbSA9IFhNTElucHV0U3RyZWFtRmFjdG9yeS5uZXdJbnN0YW5jZSgpLgotICAgICAgICAgICAgbmV3SW5wdXRTdHJlYW0ocmVhZGVyMik7Ci0KLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJteVN0cmVhbSAuLi4iKTsKLSAgICAgICAgZm9yKGludCBpPTA7IG15U3RyZWFtLmhhc05leHQoKSAmJiBpPDM7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAibXk6ICIgKyAiICciICsKLSAgICAgICAgICAgICAgICBteVN0cmVhbS5uZXh0KCkgKyAiJyIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAiYmI6ICIgKyAiICciICsKLSAgICAgICAgICAgICAgICAgICAgYmFiZWxTdHJlYW0ubmV4dCgpICsgIiciKTsKLSAgICAgICAgfQotCi0gICAgICAgIFhNTElucHV0U3RyZWFtIG15c3MgPSBteVN0cmVhbS5nZXRTdWJTdHJlYW0oKTsKLSAgICAgICAgWE1MSW5wdXRTdHJlYW0gYmJzcyA9IGJhYmVsU3RyZWFtLmdldFN1YlN0cmVhbSgpOwotCi0gICAgICAgIGZvcihpbnQgaT0wOyBteXNzLmhhc05leHQoKSAmJiBpPDM7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAibXkgU1VCU3RyZWFtOiAiICsgIiAnIiArCi0gICAgICAgICAgICAgICAgICAgIG15c3MubmV4dCgpICsgIiciKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggImJiIFNVQlN0cmVhbTogIiArICIgJyIgKwotICAgICAgICAgICAgICAgICAgICBiYnNzLm5leHQoKSArICInIik7Ci0gICAgICAgIH0KLQotICAgICAgICBYTUxJbnB1dFN0cmVhbSBteXNzMiA9IG15c3MuZ2V0U3ViU3RyZWFtKCk7Ci0gICAgICAgIFhNTElucHV0U3RyZWFtIGJic3MyID0gbXlzcy5nZXRTdWJTdHJlYW0oKTsKLSAgICAgICAgZm9yKDsgbXlzczIuaGFzTmV4dCgpIDspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIm15IFN1YlNVQlN0cmVhbSAyOiAiICsKLSAgICAgICAgICAgICAgICAgICAgIiAnIiArIG15c3MyLm5leHQoKSArICInIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJiYiBTdWJTVUJTdHJlYW0gMjogIiArCi0gICAgICAgICAgICAgICAgICAgICIgJyIgKyBiYnNzMi5uZXh0KCkgKyAiJyIpOwotICAgICAgICB9Ci0gICAgICAgIG15c3MyLmNsb3NlKCk7Ci0gICAgICAgIGJic3MyLmNsb3NlKCk7Ci0KLSAgICAgICAgZm9yKDsgbXlzcy5oYXNOZXh0KCkgfHwgYmJzcy5oYXNOZXh0KCkgOykKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAibXkgU1VCU3RyZWFtOiAiICsgIiAnIiArCi0gICAgICAgICAgICAgICAgICAgIG15c3MubmV4dCgpICsgIiciKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggImJiIFNVQlN0cmVhbTogIiArICIgJyIgKwotICAgICAgICAgICAgICAgICAgICBiYnNzLm5leHQoKSArICInIik7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IoOyBteVN0cmVhbS5oYXNOZXh0KCkgOykKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAibXk6ICIgKyAiICciICsKLSAgICAgICAgICAgICAgICAgICAgbXlTdHJlYW0ubmV4dCgpICsgIiciKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggImJiOiAiICsKLSAgICAgICAgICAgICAgICAgICAgLy9iYWJlbFN0cmVhbS5oYXNOZXh0KCkgKyAgLy9CQUJFTCBidWdidWc6IHVuL2NvbW1lbnQgdGhpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xpbmUgeW91J2xsIGdldCBkaWZmZXJlbnQgYmVoYXZpb3IgZm9yIG5leHQoKQotICAgICAgICAgICAgICAgICAgICAiICciICsKLSAgICAgICAgICAgICAgICAgICAgYmFiZWxTdHJlYW0ubmV4dCgpICsgIiciKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1haW4zKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4zKCkKLSAgICAgICAgdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgWE1MU3RyZWFtRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwKLSAgICAgICAgICAgIFhtbFB1bGxQYXJzZXJFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFJlYWRlciByZWFkZXIxOwotICAgICAgICBSZWFkZXIgcmVhZGVyMjsKLSAgICAgICAgU3RyaW5nIHMgPSAiPD94bWwgdmVyc2lvbj0nMS4xLjEnPz48YT48YiB4bWxucz0nJyB4bWxuczphPSdzZGZzZGYnPjxjIGExPSdhJmx0OzF2JyBhMj0nYTJ2JyAvPjwvYj48eC8+IiArCi0gICAgICAgICAgICAiPHk+U29tZSZsdDsgYW5kICZndDt0ZXh0PC95PjwvYT4iOwotICAgICAgICByZWFkZXIxID0gbmV3IFN0cmluZ1JlYWRlcihzKTsKLSAgICAgICAgcmVhZGVyMiA9IG5ldyBTdHJpbmdSZWFkZXIocyk7Ci0KLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJyZWFkZXIgLi4uIGluIG1haW4zIik7Ci0gICAgICAgIFhtbFN0cmVhbVNvdXJjZSBzb3VyY2UgPSBuZXcgWHBwWG1sU3RyZWFtSW1wbChyZWFkZXIxKTsKLSAgICAgICAgWE1MSW5wdXRTdHJlYW0gbXlTdHJlYW0gPSBYbWxTdHJlYW1GYWN0b3J5LgotICAgICAgICAgICAgICAgIGNyZWF0ZVhtbElucHV0U3RyZWFtKCBzb3VyY2UgKTsKLQotICAgICAgICAvL1hNTElucHV0U3RyZWFtIGJhYmVsU3RyZWFtID0gWE1MSW5wdXRTdHJlYW1GYWN0b3J5Lm5ld0luc3RhbmNlKCkuCi0gICAgICAgIC8vICAgIG5ld0lucHV0U3RyZWFtKHJlYWRlcjIpOwotCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigibXlTdHJlYW0gLi4uIik7Ci0gICAgICAgIGZvcihpbnQgaT0wOyBteVN0cmVhbS5oYXNOZXh0KCkgJiYgaTwwOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIm15OiAiICsgIiAnIiArCi0gICAgICAgICAgICAgICAgbXlTdHJlYW0ubmV4dCgpICsgIiciKTsKLSAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCAiYmI6ICIgKyAiICciICsKLSAgICAgICAgICAgIC8vICAgICAgICBiYWJlbFN0cmVhbS5uZXh0KCkgKyAiJyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgWE1MSW5wdXRTdHJlYW0gbXlzcyA9IG15U3RyZWFtLmdldFN1YlN0cmVhbSgpOwotICAgICAgICAvL1hNTElucHV0U3RyZWFtIGJic3MgPSBiYWJlbFN0cmVhbS5nZXRTdWJTdHJlYW0oKTsKLQotICAgICAgICBmb3IoaW50IGk9MDsgbXlzcy5oYXNOZXh0KCkgJiYgaTwzOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggIm15IFNVQlN0cmVhbTogIiArICIgJyIgKwotICAgICAgICAgICAgICAgICAgICBteXNzLm5leHQoKSArICInIik7Ci0gICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbiggImJiIFNVQlN0cmVhbTogIiArICIgJyIgKwotICAgICAgICAgICAgLy8gICAgICAgIGJic3MubmV4dCgpICsgIiciKTsKLSAgICAgICAgfQotCi0gICAgICAgIFhNTElucHV0U3RyZWFtIG15c3MyID0gbXlzcy5nZXRTdWJTdHJlYW0oKTsKLSAgICAgICAgLy9YTUxJbnB1dFN0cmVhbSBiYnNzMiA9IG15c3MuZ2V0U3ViU3RyZWFtKCk7Ci0gICAgICAgIGZvcig7IG15c3MyLmhhc05leHQoKSA7KQotICAgICAgICB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJteSBTdWJTVUJTdHJlYW0gMjogIiArCi0gICAgICAgICAgICAgICAgICAgICIgJyIgKyBteXNzMi5uZXh0KCkgKyAiJyIpOwotICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oICJiYiBTdWJTVUJTdHJlYW0gMjogIiArCi0gICAgICAgICAgICAvLyAgICAgICAgIiAnIiArIGJic3MyLm5leHQoKSArICInIik7Ci0gICAgICAgIH0KLSAgICAgICAgbXlzczIuY2xvc2UoKTsKLSAgICAgICAgLy9iYnNzMi5jbG9zZSgpOwotCi0gICAgICAgIGZvcig7IG15c3MuaGFzTmV4dCgpIC8qfHwgYmJzcy5oYXNOZXh0KCkqLyA7KQotICAgICAgICB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJteSBTVUJTdHJlYW06ICIgKyAiICciICsKLSAgICAgICAgICAgICAgICAgICAgbXlzcy5uZXh0KCkgKyAiJyIpOwotICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oICJiYiBTVUJTdHJlYW06ICIgKyAiICciICsKLSAgICAgICAgICAgIC8vICAgICAgICBiYnNzLm5leHQoKSArICInIik7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IoOyBteVN0cmVhbS5oYXNOZXh0KCkgOykKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCAibXk6ICIgKyAiICciICsKLSAgICAgICAgICAgICAgICAgICAgbXlTdHJlYW0ubmV4dCgpICsgIiciKTsKLSAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCAiYmI6ICIgKwotICAgICAgICAgICAgICAgICAgICAvL2JhYmVsU3RyZWFtLmhhc05leHQoKSArICAvL0JBQkVMIGJ1Z2J1ZzogdW4vY29tbWVudCB0aGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbGluZSB5b3UnbGwgZ2V0IGRpZmZlcmVudCBiZWhhdmlvciBmb3IgbmV4dCgpCi0gICAgICAgICAgICAvLyAgICAgICAgIiAnIiArCi0gICAgICAgICAgICAvLyAgICAgICAgYmFiZWxTdHJlYW0ubmV4dCgpICsgIiciKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9zcmMvc3RyZWFtdGVzdC9YbWxTdHJlYW1Db25mb3JtYW5jZS5qYXZhIGIvdjIvdGVzdC9zcmMvc3RyZWFtdGVzdC9YbWxTdHJlYW1Db25mb3JtYW5jZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmJhZjllLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3Qvc3JjL3N0cmVhbXRlc3QvWG1sU3RyZWFtQ29uZm9ybWFuY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxNCArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIHN0cmVhbXRlc3Q7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci1pbXBvcnQgb3JnLnhtbHB1bGwubXhwMS5NWFBhcnNlcjsKLWltcG9ydCBvcmcueG1scHVsbC5teHAxLk1YUGFyc2VyQ2FjaGluZ1N0cmluZ3M7Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbTsKLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtRmFjdG9yeTsKLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTEV2ZW50OwotaW1wb3J0IHhtbGV4dC54bWwuWHBwQWRhcHRvcjsKLWltcG9ydCBvcmcueG1scHVsbC5zdHJlYW0uWHBwWG1sU3RyZWFtSW1wbDsKLWltcG9ydCBvcmcueG1scHVsbC5zdHJlYW0uWG1sU3RyZWFtRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJlYW5zOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0OwotCi0vKioKLSAqICAgVGVzdHMgdGhlIGNvbmZvcm1hbmNlIG9mIHRoZSBYTUxJbnB1dFN0cmVhbSBwcm9kdWNlZCBieSBYcHBYbWxTdHJlYW1JbXBsLgotICogICBAYXV0aG9yIENlemFyIEFuZHJlaQotICovCi1wdWJsaWMgY2xhc3MgWG1sU3RyZWFtQ29uZm9ybWFuY2UKLXsKLSAgICBmaW5hbCBzdGF0aWMgaW50IFRJTUVTID0gMzA7Ci0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBpZiggYXJncy5sZW5ndGg+MCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIEZpbGUgZiA9IG5ldyBGaWxlKGFyZ3NbMF0pOwotICAgICAgICAgICAgaWYoIGYuaXNEaXJlY3RvcnkoKSApCi0gICAgICAgICAgICAgICAgY29tcGFyZURpcihmKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAvL2NvbXBhcmVGaWxlKGYpOwotICAgICAgICAgICAgICAgIHByaW50RmlsZShmKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHByaW50VXNhZ2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHByaW50VXNhZ2UoKQotICAgIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcdFRoaXMgYXBwIHRlc3RzIHRoZSBjb25mb3JtYW5jZSBvZiB0aGUgdHdvICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIlhNTElucHV0U3RyZWFtIFxuXHRwcm9kdWNlZCBieSBCYWJlbCBwYXJzZXIgYW5kICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIlhwcDMgcGFyc2VyLiIpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuXG5cdFVTQUdFOiBqYXZhIC4uLiB0ZXN0LlhtbFN0cmVhbUNvbmZvcm1hbmNlICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpcnxmaWxlIik7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG5cdFx0ZGlyXHRcdE1ha2VzIHRoZSB0ZXN0IGZvciBhbGwgdGhlIGZpbGVzIGluICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBkaXIuIik7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXHRcdGZpbGVcdFx0TWFrZXMgdGhlIHRlc3Qgb25seSBmb3IgdGhhdCBmaWxlLiIpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGNvbXBhcmVGaWxlKEZpbGUgZmlsZSkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGZpbGUuZ2V0UGF0aCgpICsgIiBzaXplOiAiICsgZmlsZS5sZW5ndGgoKSk7Ci0KLSAgICAgICAgaWYoIWZpbGUuaXNGaWxlKCkpCi0gICAgICAgICAgICAvL3Rocm93IG5ldyBFeGNlcHRpb24oImNvbXBhcmVGaWxlOiBmaWxlIG5vdCBhIEZpbGUiKTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBSZWFkZXIgcjEgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZpbGUpKTsKLSAgICAgICAgUmVhZGVyIHIyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmaWxlKSk7Ci0KLSAgICAgICAgWE1MSW5wdXRTdHJlYW0geHBwID0gWG1sU3RyZWFtRmFjdG9yeS4KLSAgICAgICAgICAgICAgICBjcmVhdGVYbWxJbnB1dFN0cmVhbShuZXcgWHBwWG1sU3RyZWFtSW1wbChyMikpOwotICAgICAgICBYTUxJbnB1dFN0cmVhbSBiYWJlbCA9IFhNTElucHV0U3RyZWFtRmFjdG9yeS5uZXdJbnN0YW5jZSgpLgotICAgICAgICAgICAgbmV3SW5wdXRTdHJlYW0ocjEpOwotCi0gICAgICAgIHdoaWxlKCB4cHAuaGFzTmV4dCgpIHx8IGJhYmVsLmhhc05leHQoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFhNTEV2ZW50IHhwcGV2ZW50ID0geHBwLnBlZWsoKTsKLSAgICAgICAgICAgIFhNTEV2ZW50IGJhYmVsZXZlbnQgPSBiYWJlbC5wZWVrKCk7Ci0KLSAgICAgICAgICAgIGlmKCAhKCIiK3hwcGV2ZW50KS5lcXVhbHMoKCIiK2JhYmVsZXZlbnQpKSApCi0gICAgICAgICAgICAgICAgcHJpbnRFcnJvcih4cHBldmVudCwgYmFiZWxldmVudCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIiAgIGAiICsgeHBwZXZlbnQgKyAiJ1xuICAgYCIgKyBiYWJlbGV2ZW50ICsKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAiJyIpOyBTeXN0ZW0ub3V0LmZsdXNoKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHhwcGV2ZW50ID0geHBwLm5leHQoKTsKLSAgICAgICAgICAgIGJhYmVsZXZlbnQgPSBiYWJlbC5uZXh0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiICAgeHBwICAgb3ZlcmxpbWl0OiAiICsgeHBwLm5leHQoKSApOwotICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiICAgYmFiZWwgb3ZlcmxpbWl0OiAiICsgYmFiZWwubmV4dCgpICk7Ci0KLSAgICAgICAgcjEuY2xvc2UoKTsKLSAgICAgICAgcjIuY2xvc2UoKTsKLQotICAgICAgICAvL2NvbXBhcmVQZXJmKGZpbGUpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIHByaW50RmlsZShGaWxlIGZpbGUpCi0gICAgICAgIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihmaWxlLmdldFBhdGgoKSArICIgc2l6ZTogIiArIGZpbGUubGVuZ3RoKCkpOwotCi0gICAgICAgIGlmKCFmaWxlLmlzRmlsZSgpKQotICAgICAgICAgICAgLy90aHJvdyBuZXcgRXhjZXB0aW9uKCJjb21wYXJlRmlsZTogZmlsZSBub3QgYSBGaWxlIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgUmVhZGVyIHIyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKCBuZXcgRmlsZVJlYWRlcihmaWxlKSk7Ci0KLSAgICAgICAgWE1MSW5wdXRTdHJlYW0geHBwID0gWG1sU3RyZWFtRmFjdG9yeS4KLSAgICAgICAgICAgICAgICBjcmVhdGVYbWxJbnB1dFN0cmVhbShuZXcgWHBwWG1sU3RyZWFtSW1wbChyMikpOwotICAgICAgICBYTUxJbnB1dFN0cmVhbSBtb3JwaGVkU3RyZWFtOwotICAgICAgICB0cnkKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTdGFydGluZyB4cXVlcnkiKTsKLSAgICAgICAgICAgIFhtbE9iamVjdCB4bWxPYmogPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSh4cHApOwotICAgICAgICAgICAgWG1sQ3Vyc29yIGNycyA9IHhtbE9iai5uZXdDdXJzb3IoKTsKLSAgICAgICAgICAgIFhtbEN1cnNvciByZXNDcnMgPSBjcnMuZXhlY1F1ZXJ5KCIkdGhpcyIpOwotICAgICAgICAgICAgLy8gbm90IHlldCBpbXBsZW1lbnRlZAotICAgICAgICAgICAgLy9tb3JwaGVkU3RyZWFtID0gcmVzQ3JzLm5ld1hNTElucHV0U3RyZWFtKCk7Ci0gICAgICAgICAgICBSZWFkZXIgcmVhZGVyID0gcmVzQ3JzLm5ld1JlYWRlcigpOwotICAgICAgICAgICAgcmVhZGVyID0gcmVzQ3JzLm5ld1JlYWRlcigpOwotICAgICAgICAgICAgbW9ycGhlZFN0cmVhbSA9IFhNTElucHV0U3RyZWFtRmFjdG9yeS5uZXdJbnN0YW5jZSgpLgotICAgICAgICAgICAgICAgIG5ld0lucHV0U3RyZWFtKHJlYWRlcik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCIuLi4iKTsKLQotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKCBFeGNlcHRpb24gZSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICBtb3JwaGVkU3RyZWFtID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIHhwcCA9IG1vcnBoZWRTdHJlYW07Ci0KLSAgICAgICAgd2hpbGUoIHhwcC5oYXNOZXh0KCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBYTUxFdmVudCB4cHBldmVudCA9IHhwcC5wZWVrKCk7Ci0KLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgYCIgKyB4cHBldmVudCArICInIik7IFN5c3RlbS5vdXQuZmx1c2goKTsKLSAgICAgICAgICAgIHhwcGV2ZW50ID0geHBwLm5leHQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHIyLmNsb3NlKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgcHJpbnRFcnJvcihYTUxFdmVudCB4cHBldmVudCwgWE1MRXZlbnQgYmFiZWxldmVudCkKLSAgICB7Ci0gICAgICAgIFN0cmluZyBzeHBwID0gIiIreHBwZXZlbnQ7Ci0gICAgICAgIFN0cmluZyBzYmFiID0gIiIrYmFiZWxldmVudDsKLQotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVSUk9SLS0tLS0iKTsKLSAgICAgICAgaWYoICFzeHBwLnRyaW0oKS5lcXVhbHMoc2JhYi50cmltKCkpICkKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJ4cHAgICA6YCIgKyBzeHBwICsgIiciKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoImJhYmVsIDpgIiArIHNiYWIgKyAiJyIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgieHBwICAgOiIpOwotICAgICAgICAgICAgZm9yKGludCBpPTA7IGk8c3hwcC5sZW5ndGgoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJ5dGUgYiA9IChieXRlKXN4cHAuY2hhckF0KGkpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIiAjIiArIGIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiXG5iYWJlbCA6Iik7Ci0gICAgICAgICAgICBmb3IoaW50IGk9MDsgaTxzYmFiLmxlbmd0aCgpOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnl0ZSBiID0gKGJ5dGUpc2JhYi5jaGFyQXQoaSk7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiICMiICsgYik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbi0tLS0tLS0tLS0iKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBjb21wYXJlRGlyKEZpbGUgZGlyKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBpZighZGlyLmlzRGlyZWN0b3J5KCkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJjb21wYXJlRGlyOiBkaXIgbm90IGEgRGlyZWN0b3J5Iik7Ci0KLSAgICAgICAgRmlsZVtdIGZpbGVzID0gZGlyLmxpc3RGaWxlcygpOwotICAgICAgICBmb3IoIGludCBpPTA7IGk8ZmlsZXMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICBjb21wYXJlRmlsZShmaWxlc1tpXSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgY29tcGFyZVBlcmYoRmlsZSBmaWxlKQotICAgICAgICB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBsb25nIHN0YXJ0OwotICAgICAgICBkb3VibGUgeHN0aW1lID0gMDsKLSAgICAgICAgZG91YmxlIHhydGltZSA9IDA7Ci0gICAgICAgIGRvdWJsZSBiYWJlbHRpbWUgPSAwOwotCi0gICAgICAgIC8vYmFiZWwKLSAgICAgICAgZm9yKCBpbnQgaT0wOyBpPFRJTUVTOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBSZWFkZXIgciA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZmlsZSkpOwotICAgICAgICAgICAgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKLSAgICAgICAgICAgIFhNTElucHV0U3RyZWFtIGJhYmVsID0gWE1MSW5wdXRTdHJlYW1GYWN0b3J5Lm5ld0luc3RhbmNlKCkuCi0gICAgICAgICAgICAgICAgbmV3SW5wdXRTdHJlYW0ocik7Ci0gICAgICAgICAgICB3aGlsZSggYmFiZWwuaGFzTmV4dCgpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBYTUxFdmVudCBiYWJlbGV2ZW50ID0gYmFiZWwucGVlaygpOwotICAgICAgICAgICAgICAgIGJhYmVsZXZlbnQgPSBiYWJlbC5uZXh0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBiYWJlbHRpbWUgKz0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydDsKLSAgICAgICAgICAgIHIuY2xvc2UoKTsKLSAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludCgiLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy94cHAgd2l0aCBkaXJlY3QgYWNjZXMgdG8gdGhlIHhwcCBwYXJzZXIKLSAgICAgICAgZm9yKCBpbnQgaT0wOyBpPFRJTUVTOyBpKysgKQotICAgICAgICB7Ci0gICAgICAgICAgICBSZWFkZXIgciA9IG5ldyBCdWZmZXJlZFJlYWRlciggbmV3IEZpbGVSZWFkZXIoZmlsZSkpOwotICAgICAgICAgICAgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKLSAgICAgICAgICAgIE1YUGFyc2VyIHhwcCA9IChNWFBhcnNlcikgbmV3IE1YUGFyc2VyQ2FjaGluZ1N0cmluZ3MoKTsKLSAgICAgICAgICAgIHhwcC5zZXRGZWF0dXJlKCBNWFBhcnNlci5GRUFUVVJFX1BST0NFU1NfTkFNRVNQQUNFUywgdHJ1ZSk7Ci0gICAgICAgICAgICB4cHAuc2V0SW5wdXQoIHIgKTsKLSAgICAgICAgICAgIGludCBldmVudFR5cGUgPSB4cHAuZ2V0RXZlbnRUeXBlKCk7Ci0gICAgICAgICAgICB3aGlsZSAoIGV2ZW50VHlwZSAhPSB4cHAuRU5EX0RPQ1VNRU5UICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBldmVudFR5cGUgPSB4cHAubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB4cnRpbWUgKz0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydDsKLSAgICAgICAgICAgIHIuY2xvc2UoKTsKLSAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludCgiJyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy94cHAgd2l0aCBYcHBYbWxTdHJlYW1JbXBsCi0gICAgICAgIGZvciggaW50IGk9MDsgaTxUSU1FUzsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgUmVhZGVyIHIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoIG5ldyBGaWxlUmVhZGVyKGZpbGUpKTsKLSAgICAgICAgICAgIC8vWE1MSW5wdXRTdHJlYW0geHBwID0gbmV3IFhwcEFkYXB0b3IoKS5nZXRTdHJlYW0ocjIpOwotICAgICAgICAgICAgc3RhcnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKLSAgICAgICAgICAgIFhNTElucHV0U3RyZWFtIHhwcCA9IChYTUxJbnB1dFN0cmVhbSkgbmV3IFhwcFhtbFN0cmVhbUltcGwocik7Ci0KLSAgICAgICAgICAgIHdoaWxlKCB4cHAuaGFzTmV4dCgpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBYTUxFdmVudCB4cHBldmVudCA9IHhwcC5wZWVrKCk7Ci0gICAgICAgICAgICAgICAgeHBwZXZlbnQgPSB4cHAubmV4dCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgeHN0aW1lICs9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gc3RhcnQ7Ci0gICAgICAgICAgICByLmNsb3NlKCk7Ci0gICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnQoImAiKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUEVSRjogIGJhYmVsL3hwcElTID0gIiArIGRlYyhiYWJlbHRpbWUveHN0aW1lKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiIFx0YmFiZWwveHBwUmF3ID0gIiArIGRlYyhiYWJlbHRpbWUveHJ0aW1lKSApOwotICAgIH0KLQotICAgIHN0YXRpYyBTdHJpbmcgZGVjKCBkb3VibGUgZikKLSAgICB7Ci0gICAgICAgIHJldHVybiAiIiArICgoZG91YmxlKU1hdGgucm91bmQoZioxMDApKS8xMDA7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9zcmMvc3Rzc2NoZW1hL3N0cy54c2QgYi92Mi90ZXN0L3NyYy9zdHNzY2hlbWEvc3RzLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNhZjdmNi4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L3NyYy9zdHNzY2hlbWEvc3RzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLTx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICB4bWxuczpzdHM9Imh0dHA6Ly9iZWEuY29tL2ludGVybmFsL3NvYXAtdGVzdC1zY3JpcHQiCi0gIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2JlYS5jb20vaW50ZXJuYWwvc29hcC10ZXN0LXNjcmlwdCIKLSAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0gIGJsb2NrRGVmYXVsdD0iI2FsbCI+Ci0gIAotCi08eHM6ZWxlbWVudCBuYW1lPSJzb2FwLXRlc3Qtc2NyaXB0Ij4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icmVxdWVzdCIgdHlwZT0ic3RzOnJlcXVlc3RTcGVjIi8+Ci0gICAgICAgIDx4czplbGVtZW50IG5hbWU9ImV2ZW50IiB0eXBlPSJzdHM6ZXZlbnRTcGVjIi8+Ci0gICAgICAgIDx4czplbGVtZW50IG5hbWU9ImFsbCIgdHlwZT0ic3RzOnNldE9mRXZlbnRzIi8+Ci0gICAgICA8L3hzOmNob2ljZT4KLSAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idGltZW91dCIgdHlwZT0ieHM6aW50Ii8+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci08L3hzOmVsZW1lbnQ+Ci0KLTx4czpjb21wbGV4VHlwZSBuYW1lPSJzZXRPZkV2ZW50cyI+Ci0gIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgPHhzOmVsZW1lbnQgbmFtZT0iZXZlbnQiIHR5cGU9InN0czpldmVudFNwZWMiLz4KLSAgPC94czpjaG9pY2U+Ci08L3hzOmNvbXBsZXhUeXBlPgotCi08eHM6Y29tcGxleFR5cGUgbmFtZT0icmVxdWVzdFNwZWMiPgotICA8eHM6c2VxdWVuY2U+Ci0gICAgPHhzOmVsZW1lbnQgbmFtZT0idXJsIiB0eXBlPSJ4czphbnlVUkkiLz4KLSAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJzdGFydCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJjb250aW51ZSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0gICAgPC94czpjaG9pY2U+Ci0gICAgPHhzOmVsZW1lbnQgbmFtZT0ic2VuZCIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0gICAgPHhzOmVsZW1lbnQgbmFtZT0iZXhwZWN0IiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotICA8L3hzOnNlcXVlbmNlPgotPC94czpjb21wbGV4VHlwZT4KLQotPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImV2ZW50U3BlYyI+Ci0gIDx4czpzZXF1ZW5jZT4KLSAgICA8eHM6Y2hvaWNlPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iY29udGludWUiIHR5cGU9InhzOnN0cmluZyIvPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iZmluaXNoIiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICA8L3hzOmNob2ljZT4KLSAgICA8eHM6ZWxlbWVudCBuYW1lPSJleHBlY3QiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+Ci0gICAgPHhzOmVsZW1lbnQgbmFtZT0ic2VuZCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4KLSAgPC94czpzZXF1ZW5jZT4KLTwveHM6Y29tcGxleFR5cGU+Ci0KLQotPC94czpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9zcmMvdGVzdHN0b3JlL2NvbS9iZWEvdGVzdC9UZXN0LmphdmEgYi92Mi90ZXN0L3NyYy90ZXN0c3RvcmUvY29tL2JlYS90ZXN0L1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY4OGYyMC4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L3NyYy90ZXN0c3RvcmUvY29tL2JlYS90ZXN0L1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIGNvbS5iZWEudGVzdDsKLQotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zY2hlbWEubW9kZWwucGFyc2VyLlhTRFBhcnNlckZhY3Rvcnk7Ci1pbXBvcnQgd2VibG9naWMueG1sLnNjaGVtYS5tb2RlbC5wYXJzZXIuWFNEUGFyc2VyOwotaW1wb3J0IHdlYmxvZ2ljLnhtbC5zY2hlbWEubW9kZWwuU2NoZW1hRG9jdW1lbnQ7Ci1pbXBvcnQgd2VibG9naWMueG1sLnNjaGVtYS5tb2RlbC5YU0RTY2hlbWE7Ci1pbXBvcnQgd2VibG9naWMueG1sLnNjaGVtYS5tb2RlbC5YU0RFeGNlcHRpb247Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbUZhY3Rvcnk7Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb247Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5ldmVudHMuTmFtZTsKLQotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLQotaW1wb3J0IHhtbC51dGlsLlNjaGVtYVR5cGU7Ci1pbXBvcnQgeG1sLnV0aWwuU2NoZW1hVHlwZVN5c3RlbTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLnNjaGVtYS5TY2hlbWFUeXBlU3lzdGVtQnVpbGRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLnNjaGVtYS5TY2hlbWFUeXBlQ29kZVByaW50ZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy50b29sLkNvbW1hbmRMaW5lOwotaW1wb3J0IG9yZy5vcGVudXJpLm15dGVzdC5TaW1wbGljaXR5OwotaW1wb3J0IG9yZy5vcGVudXJpLm15dGVzdC5QZXJzb247Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Ci17Ci0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgICB7Ci0gICAgICAgIC8qCi0gICAgICAgIENvbW1hbmRMaW5lIGNsID0gbmV3IENvbW1hbmRMaW5lKGFyZ3MsIG51bGwpOwotICAgICAgICBYU0RQYXJzZXIgeHNkcGFyc2VyID0gWFNEUGFyc2VyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLmNyZWF0ZVhTRFBhcnNlcigpOwotICAgICAgICBYTUxJbnB1dFN0cmVhbUZhY3RvcnkgeG1scGFyc2VyID0gWE1MSW5wdXRTdHJlYW1GYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0gICAgICAgIGJvb2xlYW4gc2ltcGxldGVzdCA9IGZhbHNlOwotCi0gICAgICAgIFNjaGVtYVR5cGVTeXN0ZW1CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU2NoZW1hVHlwZVN5c3RlbUJ1aWxkZXIoInRlc3QiKTsKLQotICAgICAgICBhcmdzID0gY2wuYXJncygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRyeQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFJlYWRlciBpbnB1dCA9IG5ldyBGaWxlUmVhZGVyKGFyZ3NbaV0pOwotICAgICAgICAgICAgICAgIFNjaGVtYURvY3VtZW50IHNkb2MgPSB4c2RwYXJzZXIucGFyc2VTY2hlbWEoeG1scGFyc2VyLm5ld0lucHV0U3RyZWFtKGlucHV0KSk7Ci0gICAgICAgICAgICAgICAgWFNEU2NoZW1hIHMgPSBzZG9jLmdldFNjaGVtYSgpOwotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkQWxsQ29tcG9uZW50cyhzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIG9wZW5pbmcgZmlsZSAiICsgYXJnc1tpXSArICI6XG4iICsgZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXRjaCAoWE1MU3RyZWFtRXhjZXB0aW9uIGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFcnJvciBwYXJzaW5nIGZpbGUgIiArIGFyZ3NbaV0gKyAiOlxuIiArIGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0Y2ggKFhTREV4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3IgcGFyc2luZyBzY2hlbWEgZmlsZSAiICsgYXJnc1tpXSArICI6XG4iICsgZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBidWlsZGVyLnJlc29sdmVBbGxUeXBlcygpOwotICAgICAgICBidWlsZGVyLmphdmFpemVBbGxUeXBlcygpOwotCi0gICAgICAgIC8vIE9LLCBoZXJlIHdlIGdvCi0KLSAgICAgICAgU2NoZW1hVHlwZVtdIGd0eXBlcyA9IGJ1aWxkZXIuZ2xvYmFsVHlwZXMoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBndHlwZXMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNjaGVtYVR5cGUgdHlwZSA9IGd0eXBlc1tpXTsKLQotICAgICAgICAgICAgLy8gcHJpbnQgb25seSB0eXBlcyBpbiB0aGlzIHR5cGUgc3lzdGVtCi0gICAgICAgICAgICBpZiAoIXR5cGUuZ2V0U2NoZW1hVHlwZVN5c3RlbSgpLmVxdWFscyhidWlsZGVyKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgdHJ5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJQcmludGluZyB0eXBlIik7Ci0gICAgICAgICAgICAgICAgU2NoZW1hVHlwZUNvZGVQcmludGVyLnByaW50VHlwZShuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKFN5c3RlbS5vdXQpLCB0eXBlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiSU8gRXJyb3IgIiArIGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgICovCi0KLSAgICAgICAgYm9vbGVhbiBzaW1wbGV0ZXN0ID0gZmFsc2U7Ci0KLSAgICAgICAgaWYgKHNpbXBsZXRlc3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRlc3RTdG9yZSBzdG9yZSA9IG5ldyBUZXN0U3RvcmUob3JnLm9wZW51cmkubXl0ZXN0LlNpbXBsZURvY3VtZW50LnR5cGUpOwotICAgICAgICAgICAgVGVzdFN0b3JlLkN1cnNvciBjdXJzb3IgPSBzdG9yZS5uZXdDdXJzb3IoKTsKLQotICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJHb3Qgc3RvcmUsIGZpbGxpbmcgaXQgaW4uLi4iKTsKLSAgICAgICAgICAgIGN1cnNvci5hZGRDaGlsZChuZXcgTmFtZSgiaHR0cDovL29wZW51cmkub3JnL215dGVzdCIsICJzaW1wbGUiKSk7Ci0gICAgICAgICAgICBjdXJzb3IudG9GaXJzdENoaWxkKCk7Ci0gICAgICAgICAgICBjdXJzb3Iuc2V0QXR0cmlidXRlKG5ldyBOYW1lKG51bGwsICJub3RlIiksICJhIHNtYWxsaXNoIG51bWJlciIpOwotICAgICAgICAgICAgY3Vyc29yLnNldFRleHQoIjE0MyIpOwotICAgICAgICAgICAgY3Vyc29yLnRvUm9vdCgpOwotICAgICAgICAgICAgY3Vyc29yLnRvRmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgU2ltcGxpY2l0eSBzaW1wID0gKFNpbXBsaWNpdHkpY3Vyc29yLm9iaigpOwotICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJUaGUgdmFsdWUgb2Ygc2ltcGxpY2l0eTogIiArIHNpbXAuaW50VmFsdWUoKSk7Ci0gICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkFuZCBhIG5vdGU6ICIgKyBzaW1wLmdldE5vdGUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBUZXN0U3RvcmUgc3RvcmUgPSBuZXcgVGVzdFN0b3JlKG9yZy5vcGVudXJpLm15dGVzdC5DdXN0b21lckRvY3VtZW50LnR5cGUpOwotICAgICAgICAgICAgVGVzdFN0b3JlLkN1cnNvciBjdXJzb3IgPSBzdG9yZS5uZXdDdXJzb3IoKTsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiR290IHN0b3JlLCBmaWxsaW5nIGl0IGluLi4uIik7Ci0gICAgICAgICAgICBjdXJzb3IuYWRkQ2hpbGQobmV3IE5hbWUoImh0dHA6Ly9vcGVudXJpLm9yZy9teXRlc3QiLCAiY3VzdG9tZXIiKSk7Ci0gICAgICAgICAgICBjdXJzb3IudG9GaXJzdENoaWxkKCk7Ci0gICAgICAgICAgICBjdXJzb3IuYWRkQ2hpbGQobmV3IE5hbWUoImh0dHA6Ly9vcGVudXJpLm9yZy9teXRlc3QiLCAiZmlyc3RuYW1lIikpOwotICAgICAgICAgICAgY3Vyc29yLmFkZENoaWxkKG5ldyBOYW1lKCJodHRwOi8vb3BlbnVyaS5vcmcvbXl0ZXN0IiwgIm51bWJlciIpKTsKLSAgICAgICAgICAgIGN1cnNvci5hZGRDaGlsZChuZXcgTmFtZSgiaHR0cDovL29wZW51cmkub3JnL215dGVzdCIsICJudW1iZXIiKSk7Ci0gICAgICAgICAgICBjdXJzb3IuYWRkQ2hpbGQobmV3IE5hbWUoImh0dHA6Ly9vcGVudXJpLm9yZy9teXRlc3QiLCAiYmlydGhkYXkiKSk7Ci0gICAgICAgICAgICBjdXJzb3IuYWRkQ2hpbGQobmV3IE5hbWUoImh0dHA6Ly9vcGVudXJpLm9yZy9teXRlc3QiLCAibnVtYmVyIikpOwotICAgICAgICAgICAgY3Vyc29yLmFkZENoaWxkKG5ldyBOYW1lKCJodHRwOi8vb3BlbnVyaS5vcmcvbXl0ZXN0IiwgIm51bWJlciIpKTsKLSAgICAgICAgICAgIGN1cnNvci5hZGRDaGlsZChuZXcgTmFtZSgiaHR0cDovL29wZW51cmkub3JnL215dGVzdCIsICJiaXJ0aGRheSIpKTsKLSAgICAgICAgICAgIGN1cnNvci50b0ZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgIGN1cnNvci5zZXRUZXh0KCJIb3dkeSIpOwotICAgICAgICAgICAgY3Vyc29yLnRvTmV4dCgpOwotICAgICAgICAgICAgY3Vyc29yLnNldFRleHQoIjQzNiIpOwotICAgICAgICAgICAgY3Vyc29yLnRvTmV4dCgpOwotICAgICAgICAgICAgY3Vyc29yLnNldFRleHQoIjEyMyIpOwotICAgICAgICAgICAgY3Vyc29yLnRvTmV4dCgpOwotICAgICAgICAgICAgY3Vyc29yLnNldFRleHQoIjE5OTgtMDgtMjZaIik7Ci0gICAgICAgICAgICBjdXJzb3IudG9OZXh0KCk7Ci0gICAgICAgICAgICBjdXJzb3Iuc2V0VGV4dCgiNDQiKTsKLSAgICAgICAgICAgIGN1cnNvci50b05leHQoKTsKLSAgICAgICAgICAgIGN1cnNvci5zZXRUZXh0KCI5MzMiKTsKLSAgICAgICAgICAgIGN1cnNvci50b05leHQoKTsKLSAgICAgICAgICAgIGN1cnNvci5zZXRUZXh0KCIyMDAwLTA4LTA2LTA4OjAwIik7Ci0gICAgICAgICAgICBjdXJzb3IudG9Sb290KCk7Ci0gICAgICAgICAgICBjdXJzb3IudG9GaXJzdENoaWxkKCk7Ci0gICAgICAgICAgICBQZXJzb24gcGVyc29uID0gKFBlcnNvbiljdXJzb3Iub2JqKCk7Ci0gICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlBlcnNvbi5nZXRGaXJzdG5hbWUoKSA9ICIgKyBwZXJzb24uZ2V0Rmlyc3RuYW1lKCkpOwotICAgICAgICAgICAgaW50IHN1bSA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBlcnNvbi5jb3VudE9mTnVtYmVyKCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlBlcnNvbi5nZXROdW1iZXIoIiArIGkgKyIpID0gIiArIHBlcnNvbi5nZXROdW1iZXIoaSkpOwotICAgICAgICAgICAgICAgIHN1bSArPSBwZXJzb24uZ2V0TnVtYmVyKGkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJzdW0gb2YgbnVtYmVycyA9ICIgKyBzdW0pOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwZXJzb24uY291bnRPZkJpcnRoZGF5KCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlBlcnNvbi5nZXRCaXJ0aGRheSgiICsgaSArIikgPSAiICsgcGVyc29uLmdldEJpcnRoZGF5KGkpKTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIlBlcnNvbi54Z2V0QmlydGhkYXkoIiArIGkgKyIpID0gIiArIHBlcnNvbi54Z2V0QmlydGhkYXkoaSkpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiUGVyc29uLnhnZXRCaXJ0aGRheSgiICsgaSArIikuZ0RhdGVWYWx1ZSgpLmdldERheSgpID0gIiArIHBlcnNvbi54Z2V0QmlydGhkYXkoaSkuZ0RhdGVWYWx1ZSgpLmdldERheSgpKTsKLSAgICAgICAgICAgICAgICBzdW0gKz0gcGVyc29uLmdldE51bWJlcihpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiU2V0dGluZyBmaXJzdG5hbWUgdG8gR2VvcmdlIik7Ci0gICAgICAgICAgICBwZXJzb24uc2V0Rmlyc3RuYW1lKCJHZW9yZ2UiKTsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiUGVyc29uLmdldEZpcnN0bmFtZSgpID0gIiArIHBlcnNvbi5nZXRGaXJzdG5hbWUoKSk7Ci0gICAgICAgICAgICBTeXN0ZW0uZXJyLmZsdXNoKCk7Ci0gICAgICAgIH0KLQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL3Rlc3RzdG9yZS9jb20vYmVhL3Rlc3QvVGVzdFN0b3JlLmphdmEgYi92Mi90ZXN0L3NyYy90ZXN0c3RvcmUvY29tL2JlYS90ZXN0L1Rlc3RTdG9yZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWQ5ZTBjLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3Qvc3JjL3Rlc3RzdG9yZS9jb20vYmVhL3Rlc3QvVGVzdFN0b3JlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMTcgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBjb20uYmVhLnRlc3Q7Ci0KLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTE5hbWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy52YWx1ZXMuVHlwZVN0b3JlVXNlckZhY3Rvcnk7Ci1pbXBvcnQgeG1sLnV0aWwuU2NoZW1hVHlwZVN5c3RlbTsKLWltcG9ydCB4bWwudXRpbC5YbWxPYmplY3Q7Ci1pbXBvcnQgeG1sLnV0aWwuU2NoZW1hVHlwZTsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotCi1wdWJsaWMgY2xhc3MgVGVzdFN0b3JlCi17Ci0gICAgVGVzdFR5cGVTdG9yZSBfcm9vdDsKLQotICAgIHB1YmxpYyBUZXN0U3RvcmUoU2NoZW1hVHlwZSByb290VHlwZSkKLSAgICB7Ci0gICAgICAgIF9yb290ID0gbWFrZVJvb3RTdG9yZShyb290VHlwZSk7Ci0gICAgfQotCi0gICAgQ3Vyc29yIG5ld0N1cnNvcigpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IEN1cnNvcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBjbGFzcyBDdXJzb3IKLSAgICB7Ci0gICAgICAgIFRlc3RUeXBlU3RvcmUgX2N1cnBvcyA9IF9yb290OwotICAgICAgICBpbnQgX2N1ckluZGV4ID0gMDsKLQotICAgICAgICBwdWJsaWMgWG1sT2JqZWN0IG9iaigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAoWG1sT2JqZWN0KV9jdXJwb3MuX3VzZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBoYXNQYXJlbnQoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gX2N1cnBvcy5fcGFyZW50ICE9IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiB0b1Jvb3QoKQotICAgICAgICB7Ci0gICAgICAgICAgICBfY3VycG9zID0gX3Jvb3Q7Ci0gICAgICAgICAgICBfY3VySW5kZXggPSAwOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiB0b1BhcmVudCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghaGFzUGFyZW50KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgX2N1cnBvcyA9IF9jdXJwb3MuX3BhcmVudDsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gaGFzTmV4dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfY3VycG9zLl9wYXJlbnQgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoX2N1ckluZGV4ICsgMSA8IF9jdXJwb3MuX3BhcmVudC5fY2hpbGRFbGVtZW50VHlwZVN0b3Jlcy5zaXplKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiB0b05leHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWhhc05leHQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBfY3VySW5kZXgrKzsKLSAgICAgICAgICAgIF9jdXJwb3MgPSAoVGVzdFR5cGVTdG9yZSlfY3VycG9zLl9wYXJlbnQuX2NoaWxkRWxlbWVudFR5cGVTdG9yZXMuZ2V0KF9jdXJJbmRleCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHRvUHJldigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghaGFzUHJldigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIF9jdXJJbmRleC0tOwotICAgICAgICAgICAgX2N1cnBvcyA9IChUZXN0VHlwZVN0b3JlKV9jdXJwb3MuX3BhcmVudC5fY2hpbGRFbGVtZW50VHlwZVN0b3Jlcy5nZXQoX2N1ckluZGV4KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gaGFzUHJldigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfY3VycG9zLl9wYXJlbnQgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoX2N1ckluZGV4IC0gMSA+IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBfY3VycG9zLl9jaGlsZEVsZW1lbnRUeXBlU3RvcmVzICE9IG51bGwgJiYKLSAgICAgICAgICAgICAgICAgICBfY3VycG9zLl9jaGlsZEVsZW1lbnRUeXBlU3RvcmVzLnNpemUoKSA+IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiB0b0ZpcnN0Q2hpbGQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWhhc0NoaWxkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgX2N1ckluZGV4ID0gMDsKLSAgICAgICAgICAgIF9jdXJwb3MgPSAoVGVzdFR5cGVTdG9yZSlfY3VycG9zLl9jaGlsZEVsZW1lbnRUeXBlU3RvcmVzLmdldChfY3VySW5kZXgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgYm9vbGVhbiB0b0xhc3RDaGlsZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghaGFzQ2hpbGQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBfY3VySW5kZXggPSBfY3VycG9zLl9jaGlsZEVsZW1lbnRUeXBlU3RvcmVzLnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBfY3VycG9zID0gKFRlc3RUeXBlU3RvcmUpX2N1cnBvcy5fY2hpbGRFbGVtZW50VHlwZVN0b3Jlcy5nZXQoX2N1ckluZGV4KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIGJvb2xlYW4gdG9DaGlsZE5hbWVkKFhNTE5hbWUgbmFtZSwgaW50IGluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWhhc0NoaWxkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaW50IHRhcmdldGluZGV4ID0gMDsKLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IF9jdXJwb3MuX2NoaWxkRWxlbWVudFR5cGVTdG9yZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUZXN0VHlwZVN0b3JlIHN0b3JlID0gKFRlc3RUeXBlU3RvcmUpaS5uZXh0KCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc3RvcmUuX25hbWUuZXF1YWxzKG5hbWUpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIF9jdXJJbmRleCA9IHRhcmdldGluZGV4OwotICAgICAgICAgICAgICAgICAgICAgICAgX2N1cnBvcyA9IHN0b3JlOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaW5kZXgtLTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGFyZ2V0aW5kZXgrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBib29sZWFuIHRvQ2hpbGRBdChpbnQgaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghaGFzQ2hpbGQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IF9jdXJwb3MuX2NoaWxkRWxlbWVudFR5cGVTdG9yZXMuc2l6ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIF9jdXJJbmRleCA9IGluZGV4OwotICAgICAgICAgICAgX2N1cnBvcyA9IChUZXN0VHlwZVN0b3JlKV9jdXJwb3MuX2NoaWxkRWxlbWVudFR5cGVTdG9yZXMuZ2V0KGluZGV4KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgcmVtb3ZlQ2hpbGRBdChpbnQgaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghaGFzQ2hpbGQoKSB8fCBpbmRleCA8IDAgfHwgaW5kZXggPj0gX2N1cnBvcy5fY2hpbGRFbGVtZW50VHlwZVN0b3Jlcy5zaXplKCkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigpOwotICAgICAgICAgICAgVGVzdFR5cGVTdG9yZSB0YXJnZXQgPSAoVGVzdFR5cGVTdG9yZSlfY3VycG9zLl9jaGlsZEVsZW1lbnRUeXBlU3RvcmVzLmdldChpbmRleCk7Ci0gICAgICAgICAgICB0YXJnZXQuZGlzY29ubmVjdCgpOwotICAgICAgICAgICAgX2N1cnBvcy5fY2hpbGRFbGVtZW50VHlwZVN0b3Jlcy5yZW1vdmUoaW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgaW5zZXJ0Q2hpbGRBdChpbnQgaW5kZXgsIFhNTE5hbWUgbmFtZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGluZGV4IDwgMCB8fAotICAgICAgICAgICAgICAgICAgICAoX2N1cnBvcy5fY2hpbGRFbGVtZW50VHlwZVN0b3JlcyA9PSBudWxsID8KLSAgICAgICAgICAgICAgICAgICAgaW5kZXggPiAwIDogaW5kZXggPiBfY3VycG9zLl9jaGlsZEVsZW1lbnRUeXBlU3RvcmVzLnNpemUoKSkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigpOwotICAgICAgICAgICAgX2N1cnBvcy5fdGV4dExlYWZDb250ZW50ID0gbnVsbDsKLSAgICAgICAgICAgIGlmIChfY3VycG9zLl9jaGlsZEVsZW1lbnRUeXBlU3RvcmVzID09IG51bGwpCi0gICAgICAgICAgICAgICAgX2N1cnBvcy5fY2hpbGRFbGVtZW50VHlwZVN0b3JlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgICAgIF9jdXJwb3MuX2NoaWxkRWxlbWVudFR5cGVTdG9yZXMuYWRkKGluZGV4LCBfY3VycG9zLm1ha2VOZXdDaGlsZChuYW1lLCBmYWxzZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcHVibGljIHZvaWQgYWRkQ2hpbGQoWE1MTmFtZSBuYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgICBfY3VycG9zLl90ZXh0TGVhZkNvbnRlbnQgPSBudWxsOwotICAgICAgICAgICAgaWYgKF9jdXJwb3MuX2NoaWxkRWxlbWVudFR5cGVTdG9yZXMgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICBfY3VycG9zLl9jaGlsZEVsZW1lbnRUeXBlU3RvcmVzID0gbmV3IEFycmF5TGlzdCgpOwotICAgICAgICAgICAgX2N1cnBvcy5fY2hpbGRFbGVtZW50VHlwZVN0b3Jlcy5hZGQoX2N1cnBvcy5tYWtlTmV3Q2hpbGQobmFtZSwgZmFsc2UpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyBpbnQgY291bnRDaGlsZCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfY3VycG9zLl9jaGlsZEVsZW1lbnRUeXBlU3RvcmVzID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICByZXR1cm4gX2N1cnBvcy5fY2hpbGRFbGVtZW50VHlwZVN0b3Jlcy5zaXplKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldEF0dHJpYnV0ZShYTUxOYW1lIG5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChfY3VycG9zLl9jaGlsZEF0dHJpYnV0ZVR5cGVTdG9yZXMgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgICAgICAgICAgVGVzdFR5cGVTdG9yZSBhdHRyID0gKFRlc3RUeXBlU3RvcmUpX2N1cnBvcy5fY2hpbGRBdHRyaWJ1dGVUeXBlU3RvcmVzLmdldChuYW1lKTsKLSAgICAgICAgICAgIGlmIChhdHRyID09IG51bGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSBhdHRyLl90ZXh0TGVhZkNvbnRlbnQ7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0ID09IG51bGwgPyAiIiA6IHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIGNsZWFyQXR0cmlidXRlKFhNTE5hbWUgbmFtZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKF9jdXJwb3MuX2NoaWxkQXR0cmlidXRlVHlwZVN0b3JlcyA9PSBudWxsKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHB1YmxpYyB2b2lkIHNldEF0dHJpYnV0ZShYTUxOYW1lIG5hbWUsIFN0cmluZyB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKF9jdXJwb3MuX2NoaWxkQXR0cmlidXRlVHlwZVN0b3JlcyA9PSBudWxsKQotICAgICAgICAgICAgICAgIF9jdXJwb3MuX2NoaWxkQXR0cmlidXRlVHlwZVN0b3JlcyA9IG5ldyBIYXNoTWFwKCk7Ci0KLSAgICAgICAgICAgIFRlc3RUeXBlU3RvcmUgYXR0ciA9IF9jdXJwb3MubWFrZU5ld0NoaWxkKG5hbWUsIHRydWUpOwotCi0gICAgICAgICAgICBhdHRyLl90ZXh0TGVhZkNvbnRlbnQgPSB2YWx1ZTsKLSAgICAgICAgICAgIF9jdXJwb3MuX2NoaWxkQXR0cmlidXRlVHlwZVN0b3Jlcy5wdXQobmFtZSwgYXR0cik7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgdm9pZCBzZXRUZXh0KFN0cmluZyB0ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX2N1cnBvcy5fY2hpbGRFbGVtZW50VHlwZVN0b3JlcyAhPSBudWxsKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IF9jdXJwb3MuX2NoaWxkRWxlbWVudFR5cGVTdG9yZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFRlc3RUeXBlU3RvcmUgc3RvcmUgPSAoVGVzdFR5cGVTdG9yZSlpLm5leHQoKTsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmUuZGlzY29ubmVjdCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBfY3VycG9zLl9jaGlsZEVsZW1lbnRUeXBlU3RvcmVzID0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIF9jdXJwb3MuX3RleHRMZWFmQ29udGVudCA9IHRleHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoX2N1cnBvcy5fY2hpbGRFbGVtZW50VHlwZVN0b3JlcyAhPSBudWxsKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsgLy8gaW4gcHJhY3RpY2UgcGVyaGFwcyB3ZSB3YW50IHRvIGNvbmNhdGVuYXRlIGZsYXR0ZW5lZCBzdHJpcHBlZCB0ZXh0Ci0gICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gX2N1cnBvcy5fdGV4dExlYWZDb250ZW50OwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PSBudWxsID8gIiIgOiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBDdXJzb3IgbmV3Q3Vyc29yKCkKLSAgICAgICAgewotICAgICAgICAgICAgQ3Vyc29yIHJlc3VsdCA9IG5ldyBDdXJzb3IoKTsKLSAgICAgICAgICAgIHJlc3VsdC5fY3VySW5kZXggPSBfY3VySW5kZXg7Ci0gICAgICAgICAgICByZXN1bHQuX2N1cnBvcyA9IF9jdXJwb3M7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBUZXN0VHlwZVN0b3JlIG1ha2VSb290U3RvcmUoU2NoZW1hVHlwZSByb290VHlwZSkKLSAgICB7Ci0gICAgICAgIFRlc3RUeXBlU3RvcmUgcmVzdWx0ID0gbmV3IFRlc3RUeXBlU3RvcmUoKTsKLSAgICAgICAgcmVzdWx0Ll9wYXJlbnQgPSBudWxsOwotICAgICAgICByZXN1bHQuX25hbWUgPSBudWxsOwotICAgICAgICByZXN1bHQuX2lzQXR0cmlidXRlID0gZmFsc2U7Ci0gICAgICAgIHJlc3VsdC5fdXNlciA9ICgoVHlwZVN0b3JlVXNlckZhY3Rvcnkpcm9vdFR5cGUpLmNyZWF0ZVR5cGVTdG9yZVVzZXIoKTsKLSAgICAgICAgaWYgKHJlc3VsdC5fdXNlciA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotICAgICAgICByZXN1bHQuX3VzZXIuYXR0YWNoX3N0b3JlKHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9zcmMvdGVzdHN0b3JlL2NvbS9iZWEvdGVzdC9UZXN0VHlwZVN0b3JlLmphdmEgYi92Mi90ZXN0L3NyYy90ZXN0c3RvcmUvY29tL2JlYS90ZXN0L1Rlc3RUeXBlU3RvcmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc5NmFkMC4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L3NyYy90ZXN0c3RvcmUvY29tL2JlYS90ZXN0L1Rlc3RUeXBlU3RvcmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5NSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIGNvbS5iZWEudGVzdDsKLQotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMudmFsdWVzLlR5cGVTdG9yZTsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLnZhbHVlcy5UeXBlU3RvcmVVc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMudmFsdWVzLlR5cGVTdG9yZVZpc2l0b3I7Ci1pbXBvcnQgd2VibG9naWMueG1sLnN0cmVhbS5YTUxOYW1lOwotCi1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLQotaW1wb3J0IHhtbC51dGlsLlNjaGVtYVR5cGU7Ci1pbXBvcnQgeG1sLnV0aWwuUU5hbWVTZXQ7Ci1pbXBvcnQgeG1sLnV0aWwuWG1sQ3Vyc29yOwotCi1wdWJsaWMgY2xhc3MgVGVzdFR5cGVTdG9yZSBpbXBsZW1lbnRzIFR5cGVTdG9yZQotewotICAgIFRlc3RUeXBlU3RvcmUgX3BhcmVudDsKLSAgICBUeXBlU3RvcmVVc2VyIF91c2VyOwotICAgIFhNTE5hbWUgX25hbWU7Ci0gICAgYm9vbGVhbiBfaXNBdHRyaWJ1dGU7Ci0gICAgYm9vbGVhbiBfaXNOaWw7Ci0gICAgU3RyaW5nIF90ZXh0TGVhZkNvbnRlbnQ7Ci0gICAgTGlzdCBfY2hpbGRFbGVtZW50VHlwZVN0b3JlczsKLSAgICBNYXAgX2NoaWxkQXR0cmlidXRlVHlwZVN0b3JlczsKLQotICAgIHB1YmxpYyBYbWxDdXJzb3IgbmV3X2N1cnNvcigpCi0gICAgewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiTm90IGltcGxlbWVudGVkIik7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgaW52YWxpZGF0ZV90ZXh0KFR5cGVTdG9yZVVzZXIgdXNlcikKLSAgICB7Ci0gICAgICAgIGFzc2VydCghaGFzRWxlbWVudHMoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBmZXRjaF90ZXh0KGludCB3aGl0ZXNwYWNlUnVsZSkKLSAgICB7Ci0gICAgICAgIGFzc2VydCghaGFzRWxlbWVudHMoKSk7Ci0gICAgICAgIHJldHVybiBfdGV4dExlYWZDb250ZW50ID09IG51bGwgPyAiIiA6IGFwcGx5X3dzcihfdGV4dExlYWZDb250ZW50LCB3aGl0ZXNwYWNlUnVsZSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc3RvcmVfdGV4dChUeXBlU3RvcmVVc2VyIHVzZXIsIFN0cmluZyB0ZXh0KQotICAgIHsKLSAgICAgICAgYXNzZXJ0KCFoYXNFbGVtZW50cygpKTsKLSAgICAgICAgX3RleHRMZWFmQ29udGVudCA9IHRleHQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSGVyZSB0aGUgVHlwZVN0b3JlIGlzIHJlc3BvbnNpYmxlIGZvciBsb2NhdGluZyB0aGUgZGVmYXVsdCB2YWx1ZS4KLSAgICAgKiBUaGlzIGlzIGRvbmUgYXMgZm9sbG93cwotICAgICAqICgxKSBnbyB0byB0aGUgcGFyZW50IFR5cGVTdG9yZVVzZXIKLSAgICAgKiAoMikgYXNrIGl0IHRvIGdldF9kZWZhdWx0X2VsZW1lbnRfdGV4dChxbmFtZSkgKG9yIF9hdHRyaWJ1dGVfKSwgYW5kIHJldHVybiBpdCBpZiBub3QgbnVsbC4KLSAgICAgKiAoMikgb3RoZXJ3aXNlLCBncmFiIGEgbmV3IFR5cGVTdG9yZVVzZXJWaXNpdG9yIHZpYSB2ID0gcGFyZW50dXNlci5uZXdfdmlzaXRvcigpOwotICAgICAqICgzKSBjYWxsIHYudmlzaXQobmFtZSkgb24gX2V2ZXJ5XyBlbGVtZW50IHFuYW1lIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhpcyBvbmUgaW4gb3JkZXIKLSAgICAgKiAoNCkgcmV0dXJuIHRoZSByZXN1bHQgb2Ygdi5nZXRfZGVmYXVsdF90ZXh0KCkuCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBjb21wdXRlX2RlZmF1bHRfdGV4dCgpCi0gICAgewotICAgICAgICBpZiAoX3BhcmVudCA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuICIiOwotICAgICAgICBTdHJpbmcgZGVmdGV4dCA9Ci0gICAgICAgICAgICBfaXNBdHRyaWJ1dGUgPyBfcGFyZW50Ll91c2VyLmdldF9kZWZhdWx0X2F0dHJpYnV0ZV90ZXh0KF9uYW1lKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBfcGFyZW50Ll91c2VyLmdldF9kZWZhdWx0X2VsZW1lbnRfdGV4dChfbmFtZSk7Ci0gICAgICAgIGlmIChkZWZ0ZXh0ID09IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFR5cGVTdG9yZVZpc2l0b3IgdmlzaXRvciA9IF9wYXJlbnQuX3VzZXIubmV3X3Zpc2l0b3IoKTsKLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IF9wYXJlbnQuX2NoaWxkRWxlbWVudFR5cGVTdG9yZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUZXN0VHlwZVN0b3JlIHNpYmxpbmcgPSAoVGVzdFR5cGVTdG9yZSlpLm5leHQoKTsKLSAgICAgICAgICAgICAgICB2aXNpdG9yLnZpc2l0KHNpYmxpbmcuX25hbWUpOwotICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nID09IHRoaXMpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB2aXNpdG9yLmdldF9kZWZhdWx0X3RleHQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFzc2VydChmYWxzZSkgOiAiSW52YXJpYW50IGVycm9yOiBwYXJlbnQgZG9lc24ndCBoYXZlIHRoaXMgYXMgY2hpbGQuIjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZGVmdGV4dDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGNvbXB1dGVfZWxlbWVudGZsYWdzKCkKLSAgICB7Ci0gICAgICAgIGlmIChfcGFyZW50ID09IG51bGwpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaW50IGZsYWdzOwotICAgICAgICBpZiAoX2lzQXR0cmlidXRlKQotICAgICAgICB7Ci0gICAgICAgICAgICBmbGFncyA9IF9wYXJlbnQuX3VzZXIuZ2V0X2F0dHJpYnV0ZWZsYWdzKF9uYW1lKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZsYWdzID0gX3BhcmVudC5fdXNlci5nZXRfZWxlbWVudGZsYWdzKF9uYW1lKTsKLSAgICAgICAgICAgIGlmIChmbGFncyA9PSAtMSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUeXBlU3RvcmVWaXNpdG9yIHZpc2l0b3IgPSBfcGFyZW50Ll91c2VyLm5ld192aXNpdG9yKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChJdGVyYXRvciBpID0gX3BhcmVudC5fY2hpbGRFbGVtZW50VHlwZVN0b3Jlcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgVGVzdFR5cGVTdG9yZSBzaWJsaW5nID0gKFRlc3RUeXBlU3RvcmUpaS5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgIHZpc2l0b3IudmlzaXQoc2libGluZy5fbmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzaWJsaW5nID09IHRoaXMpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmlzaXRvci5nZXRfZWxlbWVudGZsYWdzKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSkgOiAiSW52YXJpYW50IGVycm9yOiBwYXJlbnQgZG9lc24ndCBoYXZlIHRoaXMgYXMgY2hpbGQuIjsKLSAgICAgICAgICAgICAgICBmbGFncyA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZsYWdzOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGludmFsaWRhdGVfbmlsKFR5cGVTdG9yZVVzZXIgdXNlcikKLSAgICB7Ci0gICAgICAgIC8vIHRoaXMgY291bGQgYmUgZG9uZSBsYXRlcgotICAgICAgICBfaXNOaWwgPSBfdXNlci5idWlsZF9uaWwoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBmaW5kX25pbCgpCi0gICAgewotICAgICAgICByZXR1cm4gX2lzTmlsOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZmluZF9wcmVmaXhfZm9yX25zdXJpKFN0cmluZyBuc3VyaSwgU3RyaW5nIHN1Z2dlc3RlZF9wcmVmaXgpCi0gICAgewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVGhlIHRlc3QgaGFybmVzcyBoYXMgbm8gbmFtZXNwYWNlIHN1cHBvcnQiKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGNvdW50X2VsZW1lbnRzKFhNTE5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIGludCBjb3VudCA9IDA7Ci0KLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gX2NoaWxkRWxlbWVudFR5cGVTdG9yZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCgoVGVzdFR5cGVTdG9yZSlpLm5leHQoKSkuX25hbWUuZXF1YWxzKG5hbWUpKQotICAgICAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gY291bnQ7Ci0gICAgfQotCi0gICAgcHVibGljIFR5cGVTdG9yZVVzZXIgZmluZF9lbGVtZW50X3VzZXIoWE1MTmFtZSBuYW1lLCBpbnQgaW5kZXgpCi0gICAgewotICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBfY2hpbGRFbGVtZW50VHlwZVN0b3Jlcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICB7Ci0gICAgICAgICAgICBUZXN0VHlwZVN0b3JlIHN0b3JlID0gKFRlc3RUeXBlU3RvcmUpaS5uZXh0KCk7Ci0KLSAgICAgICAgICAgIGlmIChzdG9yZS5fbmFtZS5lcXVhbHMobmFtZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdG9yZS5fdXNlcjsKLSAgICAgICAgICAgICAgICBpbmRleC0tOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7IC8vIG5vIGV4Y2VwdGlvbiBwbGVhc2UKLSAgICB9Ci0KLSAgICBwdWJsaWMgVHlwZVN0b3JlVXNlciBpbnNlcnRfZWxlbWVudF91c2VyKFhNTE5hbWUgbmFtZSwgaW50IGluZGV4KQotICAgIHsKLSAgICAgICAgVHlwZVN0b3JlVXNlciB0YXJnZXQgPSBudWxsOwotICAgICAgICBpbnQgaW5zZXJ0aW5kZXggPSAwOwotCi0gICAgICAgIGlmIChfY2hpbGRFbGVtZW50VHlwZVN0b3JlcyA9PSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBfY2hpbGRFbGVtZW50VHlwZVN0b3JlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBsYXN0Zm91bmRhdCA9IDA7Ci0KLSAgICAgICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IF9jaGlsZEVsZW1lbnRUeXBlU3RvcmVzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVGVzdFR5cGVTdG9yZSBzdG9yZSA9IChUZXN0VHlwZVN0b3JlKWkubmV4dCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKHN0b3JlLl9uYW1lLmVxdWFscyhuYW1lKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGxhc3Rmb3VuZGF0ID0gaW5zZXJ0aW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIGluZGV4LS07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaW5zZXJ0aW5kZXgrKzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBmb3VuZCBvbmU7IGluc2VydCByaWdodCBiZWZvcmUKLSAgICAgICAgICAgICAgICBpbnNlcnRpbmRleCA9IGxhc3Rmb3VuZGF0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoaW5kZXggPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIGRpZG4ndCBmaW5kIHNldmVyYWw7IHRoYXQncyBpbGxlZ2FsLgotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBmb3VuZCBhbGwgYnV0IGxhc3Qgb25lOiB3ZSBtdXN0IGJlIGFwcGVuZGluZy4KLSAgICAgICAgICAgICAgICAvLyBidXQgd2hlcmUgdG8gYXBwZW5kPwotCi0gICAgICAgICAgICAgICAgUU5hbWVTZXQgZGVsaW1pdGVycyA9IF9wYXJlbnQuX3VzZXIuZ2V0X2VsZW1lbnRfZW5kaW5nX2RlbGltaXRlcnMobmFtZSk7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGluc2VydGluZGV4ID0gbGFzdGZvdW5kYXQgKyAxOyBpbnNlcnRpbmRleCA8IF9jaGlsZEVsZW1lbnRUeXBlU3RvcmVzLnNpemUoKTsgaW5zZXJ0aW5kZXgrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFRlc3RUeXBlU3RvcmUgc3RvcmUgPSAoVGVzdFR5cGVTdG9yZSlfY2hpbGRFbGVtZW50VHlwZVN0b3Jlcy5nZXQoaW5zZXJ0aW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZGVsaW1pdGVycy5jb250YWlucyhzdG9yZS5fbmFtZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gaW5zZXJ0aW5kZXggaXMgd2hlcmV2ZXIgdGhlIGZpcnN0IGRlbGltaXRlciBpcyBmb3VuZAotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIGlmIG5vdCBmb3VuZCwgaW5zZXJ0aW5kZXggaXMgb25lIHBhc3QgdGhlIGVuZC4KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIFRlc3RUeXBlU3RvcmUgbmV3Q2hpbGQgPSBtYWtlTmV3Q2hpbGQobmFtZSwgZmFsc2UpOwotICAgICAgICBfY2hpbGRFbGVtZW50VHlwZVN0b3Jlcy5hZGQoaW5zZXJ0aW5kZXgsIG5ld0NoaWxkKTsKLSAgICAgICAgcmV0dXJuIG5ld0NoaWxkLl91c2VyOwotICAgIH0KLQotICAgIFRlc3RUeXBlU3RvcmUgbWFrZU5ld0NoaWxkKFhNTE5hbWUgbmFtZSwgYm9vbGVhbiBpc0F0dHJpYnV0ZSkKLSAgICB7Ci0gICAgICAgIFRlc3RUeXBlU3RvcmUgcmVzdWx0ID0gbmV3IFRlc3RUeXBlU3RvcmUoKTsKLSAgICAgICAgcmVzdWx0Ll9wYXJlbnQgPSB0aGlzOwotICAgICAgICByZXN1bHQuX25hbWUgPSBuYW1lOwotICAgICAgICByZXN1bHQuX2lzQXR0cmlidXRlID0gaXNBdHRyaWJ1dGU7Ci0gICAgICAgIGlmIChpc0F0dHJpYnV0ZSkKLSAgICAgICAgICAgIHJlc3VsdC5fdXNlciA9IF91c2VyLmNyZWF0ZV9hdHRyaWJ1dGVfdXNlcihuYW1lKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0Ll91c2VyID0gX3VzZXIuY3JlYXRlX2VsZW1lbnRfdXNlcihuYW1lLCBudWxsKTsgLy8gbm8geHNpOnR5cGVzIGZvciBub3cKLSAgICAgICAgaWYgKHJlc3VsdC5fdXNlciA9PSBudWxsKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigpOwotICAgICAgICByZXN1bHQuX3VzZXIuYXR0YWNoX3N0b3JlKHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgdm9pZCBkaXNjb25uZWN0KCkKLSAgICB7Ci0gICAgICAgIGlmIChfY2hpbGRFbGVtZW50VHlwZVN0b3JlcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBfY2hpbGRFbGVtZW50VHlwZVN0b3Jlcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTsgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFRlc3RUeXBlU3RvcmUgc3RvcmUgPSAoVGVzdFR5cGVTdG9yZSlpLm5leHQoKTsKLSAgICAgICAgICAgICAgICBzdG9yZS5kaXNjb25uZWN0KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgX2NoaWxkRWxlbWVudFR5cGVTdG9yZXMgPSBudWxsOwotICAgICAgICBpZiAoX2NoaWxkQXR0cmlidXRlVHlwZVN0b3JlcyAhPSBudWxsKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBfY2hpbGRBdHRyaWJ1dGVUeXBlU3RvcmVzLnZhbHVlcygpLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVGVzdFR5cGVTdG9yZSBzdG9yZSA9IChUZXN0VHlwZVN0b3JlKWkubmV4dCgpOwotICAgICAgICAgICAgICAgIHN0b3JlLmRpc2Nvbm5lY3QoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBfY2hpbGRBdHRyaWJ1dGVUeXBlU3RvcmVzID0gbnVsbDsKLSAgICAgICAgX3VzZXIuZGlzY29ubmVjdF9zdG9yZSgpOwotICAgICAgICBfdXNlciA9IG51bGw7Ci0gICAgICAgIF9wYXJlbnQgPSBudWxsOwotICAgICAgICBfbmFtZSA9IG51bGw7Ci0gICAgICAgIF90ZXh0TGVhZkNvbnRlbnQgPSBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZmluZEluc2VydEluZGV4QmFzZWRPbk9yZGVyKFhNTE5hbWVbXSBvcmRlciwgWE1MTmFtZSBuYW1lVG9BZGQpCi0gICAgewotICAgICAgICBpbnQgb3JkZXJpbmRleCA9IDA7Ci0gICAgICAgIGludCBpbnNlcnRpbmRleCA9IDA7Ci0KLSAgICAgICAgZm9yIChJdGVyYXRvciBpID0gX2NoaWxkRWxlbWVudFR5cGVTdG9yZXMuaXRlcmF0b3IoKTsgaS5oYXNOZXh0KCk7ICkKLSAgICAgICAgewotICAgICAgICAgICAgVGVzdFR5cGVTdG9yZSBzdG9yZSA9IChUZXN0VHlwZVN0b3JlKWkubmV4dCgpOwotICAgICAgICAgICAgd2hpbGUgKG9yZGVyaW5kZXggPCBvcmRlci5sZW5ndGggJiYgIW9yZGVyW29yZGVyaW5kZXhdLmVxdWFscyhzdG9yZS5fbmFtZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG9yZGVyW29yZGVyaW5kZXhdLmVxdWFscyhuYW1lVG9BZGQpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydGluZGV4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvcmRlcmluZGV4Kys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpbnNlcnRpbmRleCsrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBpbnNlcnRpbmRleDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVHlwZVN0b3JlVXNlciBhZGRfZWxlbWVudF91c2VyKFhNTE5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpbnNlcnRfZWxlbWVudF91c2VyKG5hbWUsIGNvdW50X2VsZW1lbnRzKG5hbWUpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZW1vdmVfZWxlbWVudChYTUxOYW1lIG5hbWUsIGludCBpbmRleCkKLSAgICB7Ci0gICAgICAgIFR5cGVTdG9yZVVzZXIgdGFyZ2V0ID0gbnVsbDsKLSAgICAgICAgaW50IHJlbW92ZWluZGV4ID0gMDsKLSAgICAgICAgYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCi0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IF9jaGlsZEVsZW1lbnRUeXBlU3RvcmVzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRlc3RUeXBlU3RvcmUgc3RvcmUgPSAoVGVzdFR5cGVTdG9yZSlpLm5leHQoKTsKLQotICAgICAgICAgICAgaWYgKHN0b3JlLl9uYW1lLmVxdWFscyhuYW1lKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIF9jaGlsZEVsZW1lbnRUeXBlU3RvcmVzLnJlbW92ZShyZW1vdmVpbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaW5kZXgtLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJlbW92ZWluZGV4Kys7Ci0gICAgICAgIH0KLQotICAgICAgICB0aHJvdyBuZXcgQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFR5cGVTdG9yZVVzZXIgZmluZF9hdHRyaWJ1dGVfdXNlcihYTUxOYW1lIG5hbWUpCi0gICAgewotICAgICAgICBpZiAoX2NoaWxkQXR0cmlidXRlVHlwZVN0b3JlcyA9PSBudWxsKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgVGVzdFR5cGVTdG9yZSBzdG9yZSA9IChUZXN0VHlwZVN0b3JlKV9jaGlsZEF0dHJpYnV0ZVR5cGVTdG9yZXMuZ2V0KG5hbWUpOwotICAgICAgICBpZiAoc3RvcmUgPT0gbnVsbCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIHJldHVybiBzdG9yZS5fdXNlcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVHlwZVN0b3JlVXNlciBhZGRfYXR0cmlidXRlX3VzZXIoWE1MTmFtZSBuYW1lKQotICAgIHsKLSAgICAgICAgaWYgKF9jaGlsZEF0dHJpYnV0ZVR5cGVTdG9yZXMgIT0gbnVsbCAmJiBfY2hpbGRBdHRyaWJ1dGVUeXBlU3RvcmVzLmNvbnRhaW5zS2V5KG5hbWUpKQotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOwotCi0gICAgICAgIGlmIChfY2hpbGRBdHRyaWJ1dGVUeXBlU3RvcmVzID09IG51bGwpCi0gICAgICAgICAgICBfY2hpbGRBdHRyaWJ1dGVUeXBlU3RvcmVzID0gbmV3IEhhc2hNYXAoKTsKLQotICAgICAgICBUZXN0VHlwZVN0b3JlIG5ld0NoaWxkID0gbWFrZU5ld0NoaWxkKG5hbWUsIHRydWUpOwotICAgICAgICBfY2hpbGRBdHRyaWJ1dGVUeXBlU3RvcmVzLnB1dChuYW1lLCBuZXdDaGlsZCk7Ci0gICAgICAgIHJldHVybiBuZXdDaGlsZC5fdXNlcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZW1vdmVfYXR0cmlidXRlKFhNTE5hbWUgbmFtZSkKLSAgICB7Ci0gICAgICAgIGlmIChfY2hpbGRBdHRyaWJ1dGVUeXBlU3RvcmVzID09IG51bGwgfHwgIV9jaGlsZEF0dHJpYnV0ZVR5cGVTdG9yZXMuY29udGFpbnNLZXkobmFtZSkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7Ci0gICAgICAgIF9jaGlsZEF0dHJpYnV0ZVR5cGVTdG9yZXMucmVtb3ZlKG5hbWUpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHZpc2l0X2VsZW1lbnRzKFR5cGVTdG9yZVZpc2l0b3IgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIGZvciAoSXRlcmF0b3IgaSA9IF9jaGlsZEVsZW1lbnRUeXBlU3RvcmVzLml0ZXJhdG9yKCk7IGkuaGFzTmV4dCgpOyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFRlc3RUeXBlU3RvcmUgc3RvcmUgPSAoVGVzdFR5cGVTdG9yZSlpLm5leHQoKTsKLSAgICAgICAgICAgIHZpc2l0b3IudmlzaXQoc3RvcmUuX25hbWUpOwotICAgICAgICB9Ci0gICAgICAgIHZpc2l0b3IudmlzaXQobnVsbCk7Ci0gICAgfQotCi0KLSAgICBwcml2YXRlIGJvb2xlYW4gaGFzRWxlbWVudHMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIF9jaGlsZEVsZW1lbnRUeXBlU3RvcmVzICE9IG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhlIGFsZ29yaXRobSB1c2VkIGJ5IGFwcGx5X3dzY2Fub246IHNvbWV0aW1lcyB1c2VkIGluIGltcGxzLgotICAgICAqLwotICAgIHByb3RlY3RlZCBzdGF0aWMgU3RyaW5nIGFwcGx5X3dzcihTdHJpbmcgdiwgaW50IHdzcikKLSAgICB7Ci0gICAgICAgIGlmICh3c3IgPT0gU2NoZW1hVHlwZS5XU19QUkVTRVJWRSB8fCB3c3IgPT0gU2NoZW1hVHlwZS5XU19VTlNQRUNJRklFRCkKLSAgICAgICAgICAgIHJldHVybiB2OwotCi0gICAgICAgIGlmICh2LmluZGV4T2YoJ1xuJykgPj0gMCkKLSAgICAgICAgICAgIHYgPSB2LnJlcGxhY2UoJ1xuJywgJyAnKTsKLSAgICAgICAgaWYgKHYuaW5kZXhPZignXHQnKSA+PSAwKQotICAgICAgICAgICAgdiA9IHYucmVwbGFjZSgnXHQnLCAnICcpOwotICAgICAgICBpZiAodi5pbmRleE9mKCdccicpID49IDApCi0gICAgICAgICAgICB2ID0gdi5yZXBsYWNlKCdccicsICcgJyk7Ci0KLSAgICAgICAgaWYgKHdzciA9PSBTY2hlbWFUeXBlLldTX1JFUExBQ0UpCi0gICAgICAgICAgICByZXR1cm4gdjsKLQotICAgICAgICBpbnQgaiA9IDA7Ci0gICAgICAgIGludCBsZW4gPSB2Lmxlbmd0aCgpOwotICAgICAgICBpZiAobGVuID09IDApCi0gICAgICAgICAgICByZXR1cm4gdjsKLQotICAgICAgICAvKiBhIHRyaWNrOiBleGFtaW5lIGV2ZXJ5IG90aGVyIGNoYXJhY3RlciBsb29raW5nIGZvciBwYWlycyBvZiBzcGFjZXMgKi8KLSAgICAgICAgZXhhbWluZTogaWYgKHYuY2hhckF0KDApICE9ICcgJykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChqID0gMjsgaiA8IGxlbjsgaiArPSAyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICh2LmNoYXJBdChqKSA9PSAnICcpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAodi5jaGFyQXQoaiAtIDEpID09ICcgJykKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGV4YW1pbmU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChqID09IGxlbiAtIDEpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhayBleGFtaW5lOwotICAgICAgICAgICAgICAgICAgICBqKys7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2LmNoYXJBdChqKSA9PSAnICcpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhayBleGFtaW5lOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChqID09IGxlbiAmJiB2LmNoYXJBdChqIC0gMSkgPT0gJyAnKQotICAgICAgICAgICAgICAgIGJyZWFrIGV4YW1pbmU7Ci0gICAgICAgICAgICByZXR1cm4gdjsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIGogaXMgcG9pbnRpbmcgYXQgdGhlIGZpcnN0IHdzIHRvIGJlIHJlbW92ZWQsIG9yIHBhc3QgZW5kICovCi0gICAgICAgIGNoYXJbXSBjaCA9IHYudG9DaGFyQXJyYXkoKTsKLSAgICAgICAgaW50IGkgPSBqOwotCi0gICAgICAgIHNoaWZ0ZXI6IGZvciAoOzspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoOzspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogaiB3YXMgd3Mgb3IgcGFzdCBlbmQgKi8KLSAgICAgICAgICAgICAgICBqKys7Ci0gICAgICAgICAgICAgICAgaWYgKGogPj0gbGVuKQotICAgICAgICAgICAgICAgICAgICBicmVhayBzaGlmdGVyOwotICAgICAgICAgICAgICAgIGlmIChqICE9ICcgJykKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKDs7KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8qIGogd2FzIG5vbndzICovCi0gICAgICAgICAgICAgICAgY2hbaSsrXSA9IGNoW2orK107Ci0gICAgICAgICAgICAgICAgaWYgKGogPj0gbGVuKQotICAgICAgICAgICAgICAgICAgICBicmVhayBzaGlmdGVyOwotICAgICAgICAgICAgICAgIGlmIChjaFtqXSA9PSAnICcpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjaFtpKytdID0gY2hbaisrXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGogPj0gbGVuKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgc2hpZnRlcjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoW2pdID09ICcgJykKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBuZXcgU3RyaW5nKGNoLCAwLCAoaSA9PSAwIHx8IGNoW2kgLSAxXSAhPSAnICcpID8gaSA6IGkgLSAxKTsKLSAgICB9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9zcmMvdW5tYXJzaGFsL2NvbS9iZWEvdGVzdC9UZXN0U3RydWN0dXJlLmphdmEgYi92Mi90ZXN0L3NyYy91bm1hcnNoYWwvY29tL2JlYS90ZXN0L1Rlc3RTdHJ1Y3R1cmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTMxZTU1Mi4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L3NyYy91bm1hcnNoYWwvY29tL2JlYS90ZXN0L1Rlc3RTdHJ1Y3R1cmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0qIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSoKLSoKLSogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgCi0qIHJlc2VydmVkLgotKgotKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0qIGFyZSBtZXQ6Ci0qCi0qIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0qCi0qIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0qICAgIGRpc3RyaWJ1dGlvbi4KLSoKLSogMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCi0qICAgIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6ICAKLSogICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCi0qICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0qICAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCi0qCi0qIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0IAotKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSogICAgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIAotKiAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBhcGFjaGVAYXBhY2hlLm9yZy4KLSoKLSogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSAKLSogICAgWE1MQmVhbnMiLCBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIAotKiAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKgotKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0qIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0qIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0qIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0qIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0qIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotKiBTVUNIIERBTUFHRS4KLSogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSoKLSogVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKLSogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgd2FzCi0qIG9yaWdpbmFsbHkgYmFzZWQgb24gc29mdHdhcmUgY29weXJpZ2h0IChjKSAyMDAwLTIwMDMgQkVBIFN5c3RlbXMgCi0qIEluYy4sIDxodHRwOi8vd3d3LmJlYS5jb20vPi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIEFwYWNoZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSovCi0KLXBhY2thZ2UgY29tLmJlYS50ZXN0OwotCi1wdWJsaWMgY2xhc3MgVGVzdFN0cnVjdHVyZQotewotICAgIHB1YmxpYyBpbnQgdmFySW50OwotICAgIHB1YmxpYyBmbG9hdCB2YXJGbG9hdDsKLSAgICBwdWJsaWMgU3RyaW5nIHZhclN0cmluZzsKLX0KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL3VubWFyc2hhbC9jb20vYmVhL3Rlc3QvVW5tYXJzaGFsLmphdmEgYi92Mi90ZXN0L3NyYy91bm1hcnNoYWwvY29tL2JlYS90ZXN0L1VubWFyc2hhbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzA5NjlhLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3Qvc3JjL3VubWFyc2hhbC9jb20vYmVhL3Rlc3QvVW5tYXJzaGFsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoKLSogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotKgotKgotKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyAKLSogcmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSoKLSogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSoKLSogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0qICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSogICAgZGlzdHJpYnV0aW9uLgotKgotKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwKLSogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDogIAotKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0qICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKLSogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSoKLSogNC4gVGhlIG5hbWVzICJBcGFjaGUiIGFuZCAiQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24iIG11c3QgCi0qICAgIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotKiAgICBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gCi0qICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotKgotKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiQXBhY2hlIAotKiAgICBYTUxCZWFucyIsIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3IgCi0qICAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0qIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0qIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0qIFNVQ0ggREFNQUdFLgotKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKgotKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCB3YXMKLSogb3JpZ2luYWxseSBiYXNlZCBvbiBzb2Z0d2FyZSBjb3B5cmlnaHQgKGMpIDIwMDAtMjAwMyBCRUEgU3lzdGVtcyAKLSogSW5jLiwgPGh0dHA6Ly93d3cuYmVhLmNvbS8+LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotKi8KLQotcGFja2FnZSBjb20uYmVhLnRlc3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLnVubWFyc2hhbC5NZXNzYWdlUGxhbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLnVubWFyc2hhbC5Vbm1hcnNoYWxQbGFuOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMudW5tYXJzaGFsLlNpbXBsZVR5cGVQbGFuOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMudW5tYXJzaGFsLlN0cnVjdHVyZVBsYW47Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy51bm1hcnNoYWwuVW5tYXJzaGFsQ29udGV4dDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxCZWFuczsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtOwotCi1wdWJsaWMgY2xhc3MgVW5tYXJzaGFsCi17Ci0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgTWVzc2FnZVBsYW4gbWVzc2FnZVBsYW4gPSBuZXcgTWVzc2FnZVBsYW4oMik7Ci0KLSAgICAgICAgU2ltcGxlVHlwZVBsYW4gcGFyYW0xUGxhbiA9IG5ldyBTaW1wbGVUeXBlUGxhbihTaW1wbGVUeXBlUGxhbi5KQVZBX0ZMT0FULCB0cnVlLCBTY2hlbWFUeXBlLkJUQ19ET1VCTEUsIG51bGwsIDApOwotCi0gICAgICAgIFN0cnVjdHVyZVBsYW4gcGFyYW0yUGxhbiA9IG5ldyBTdHJ1Y3R1cmVQbGFuKCk7Ci0KLSAgICAgICAgcGFyYW0yUGxhbi5zZXRUYXJnZXRDbGFzcyhjb20uYmVhLnRlc3QuVGVzdFN0cnVjdHVyZS5jbGFzcyk7Ci0gICAgICAgIHBhcmFtMlBsYW4uc2V0SW5mb0ZvckVsZW1lbnQobmV3IFFOYW1lKCJ2YXJJbnQiKSwgbmV3IFN0cnVjdHVyZVBsYW4uRmllbGRJbmZvKCJ2YXJJbnQiLCBmYWxzZSwgImNvbS5iZWEudGVzdC5UZXN0U3RydWN0dXJlIiwgbnVsbCwgU3RydWN0dXJlUGxhbi5GaWVsZEluZm8uU0lOR0xFVE9OLCBuZXcgU2ltcGxlVHlwZVBsYW4oU2ltcGxlVHlwZVBsYW4uSkFWQV9JTlQsIHRydWUsIFNjaGVtYVR5cGUuQlRDX0lOVEVHRVIsIG51bGwsIDApKSk7Ci0gICAgICAgIHBhcmFtMlBsYW4uc2V0SW5mb0ZvckVsZW1lbnQobmV3IFFOYW1lKCJ2YXJGbG9hdCIpLCBuZXcgU3RydWN0dXJlUGxhbi5GaWVsZEluZm8oInZhckZsb2F0IiwgZmFsc2UsICJjb20uYmVhLnRlc3QuVGVzdFN0cnVjdHVyZSIsIG51bGwsIFN0cnVjdHVyZVBsYW4uRmllbGRJbmZvLlNJTkdMRVRPTiwgbmV3IFNpbXBsZVR5cGVQbGFuKFNpbXBsZVR5cGVQbGFuLkpBVkFfRkxPQVQsIHRydWUsIFNjaGVtYVR5cGUuQlRDX0ZMT0FULCBudWxsLCAwKSkpOwotICAgICAgICBwYXJhbTJQbGFuLnNldEluZm9Gb3JFbGVtZW50KG5ldyBRTmFtZSgidmFyU3RyaW5nIiksIG5ldyBTdHJ1Y3R1cmVQbGFuLkZpZWxkSW5mbygidmFyU3RyaW5nIiwgZmFsc2UsICJjb20uYmVhLnRlc3QuVGVzdFN0cnVjdHVyZSIsIG51bGwsIFN0cnVjdHVyZVBsYW4uRmllbGRJbmZvLlNJTkdMRVRPTiwgbmV3IFNpbXBsZVR5cGVQbGFuKFNpbXBsZVR5cGVQbGFuLkpBVkFfU1RSSU5HLCBmYWxzZSwgU2NoZW1hVHlwZS5CVENfU1RSSU5HLCBudWxsLCAwKSkpOwotCi0gICAgICAgIG1lc3NhZ2VQbGFuLnNldEluZm9Gb3JFbGVtZW50KG5ldyBRTmFtZSgiTGFzdFRyYWRlUHJpY2UiKSwgbmV3IE1lc3NhZ2VQbGFuLlBhcmFtSW5mbygwLCBNZXNzYWdlUGxhbi5QYXJhbUluZm8uU0lOR0xFVE9OLCBwYXJhbTFQbGFuKSk7Ci0gICAgICAgIG1lc3NhZ2VQbGFuLnNldEluZm9Gb3JFbGVtZW50KG5ldyBRTmFtZSgiaW5wdXRTdHJ1Y3QiKSwgbmV3IE1lc3NhZ2VQbGFuLlBhcmFtSW5mbygxLCBNZXNzYWdlUGxhbi5QYXJhbUluZm8uU0lOR0xFVE9OLCBwYXJhbTJQbGFuKSk7Ci0KLSAgICAgICAgWG1sT2JqZWN0IHhvYmogPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZShuZXcgRmlsZShhcmdzWzBdKSk7Ci0gICAgICAgIFhNTElucHV0U3RyZWFtIHhpbnB1dCA9IHhvYmoubmV3WE1MSW5wdXRTdHJlYW0oKTsKLSAgICAgICAgd2hpbGUgKHhpbnB1dC5oYXNOZXh0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICh4aW5wdXQucGVlaygpLmlzU3RhcnRFbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB4aW5wdXQuc2tpcCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgVW5tYXJzaGFsQ29udGV4dCBjb250ZXh0ID0gbmV3IFVubWFyc2hhbENvbnRleHQoKTsKLSAgICAgICAgT2JqZWN0W10gcmVzdWx0ID0gKE9iamVjdFtdKW1lc3NhZ2VQbGFuLnVubWFyc2hhbCh4aW5wdXQsIGNvbnRleHQpOwotICAgICAgICBjb250ZXh0LmNvbXBsZXRlKCk7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzdWx0ICIgKyBpICsgIiA9ICIgKyByZXN1bHRbaV0pOwotICAgICAgICAgICAgaWYgKHJlc3VsdFtpXSBpbnN0YW5jZW9mIFRlc3RTdHJ1Y3R1cmUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVGVzdFN0cnVjdHVyZSBzID0gKFRlc3RTdHJ1Y3R1cmUpcmVzdWx0W2ldOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICB2YXJJbnQgPSAiICsgcy52YXJJbnQpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICB2YXJGbG9hdCA9ICIgKyBzLnZhckZsb2F0KTsKLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgdmFyU3RyaW5nID0gIiArIHMudmFyU3RyaW5nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL3htbHBhZC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwveG1scGFkL1htbFBhZC5qYXZhIGIvdjIvdGVzdC9zcmMveG1scGFkL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC94bWxwYWQvWG1sUGFkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YzJhMWIuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9zcmMveG1scGFkL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC94bWxwYWQvWG1sUGFkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKgotKiBUaGUgQXBhY2hlIFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4xCi0qCi0qCi0qIENvcHlyaWdodCAoYykgMjAwMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIAotKiByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKiAgICBkaXN0cmlidXRpb24uCi0qCi0qIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAotKiAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAgCi0qICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotKiAgICAgICAgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiIKLSogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotKgotKiA0LiBUaGUgbmFtZXMgIkFwYWNoZSIgYW5kICJBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiIgbXVzdCAKLSogICAgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0qICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiAKLSogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0qCi0qIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUgCi0qICAgIFhNTEJlYW5zIiwgbm9yIG1heSAiQXBhY2hlIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciAKLSogICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSoKLSogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAotKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCi0qIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0qIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0qIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSogU1VDSCBEQU1BR0UuCi0qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0qCi0qIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0qIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIHdhcwotKiBvcmlnaW5hbGx5IGJhc2VkIG9uIHNvZnR3YXJlIGNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zIAotKiBJbmMuLCA8aHR0cDovL3d3dy5iZWEuY29tLz4uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5hcGFjaGUub3JnLz4uCi0qLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC54bWxwYWQ7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwuc3RvcmUuUm9vdDsKLQotcHVibGljIGNsYXNzIFhtbFBhZAotewotICAgIHN0YXRpYyBwdWJsaWMgdm9pZCBtYWluICggU3RyaW5nW10gYXJncyApCi0gICAgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oICJIaSB0aGVyZSEiICk7Ci0KLSAgICAgICAgbmV3IFhtbFBhZCgpLnJ1bigpOwotICAgIH0KLQotICAgIHZvaWQgcnVuICggKQotICAgIHsKLS8vICAgICAgICBTdHJpbmcgcyA9IG5ldyBTdHJpbmcoIFN5c3RlbS5pbi5yZWFkKCk7Ci0gICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL3hwYXRoL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC94cGF0aC9qYXhlbi9YQmVhbnNEZW1vLmphdmEgYi92Mi90ZXN0L3NyYy94cGF0aC9vcmcvYXBhY2hlL3htbGJlYW5zL2ltcGwveHBhdGgvamF4ZW4vWEJlYW5zRGVtby5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWUwOTEzLi4wMDAwMDAwCi0tLSBhL3YyL3Rlc3Qvc3JjL3hwYXRoL29yZy9hcGFjaGUveG1sYmVhbnMvaW1wbC94cGF0aC9qYXhlbi9YQmVhbnNEZW1vLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODYgKzAsMCBAQAotcGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwueHBhdGguamF4ZW47Ci0KLWltcG9ydCBvcmcuamF4ZW4uWFBhdGg7Ci1pbXBvcnQgb3JnLmpheGVuLlhQYXRoU3ludGF4RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5qYXhlbi5KYXhlbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJlYW5zOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuaW1wbC54cGF0aC5qYXhlbi5YQmVhbnNYUGF0aDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLS8qKgotICogQXV0aG9yOiBDZXphciBBbmRyZWkgKGNlemFyLmFuZHJlaUBiZWEuY29tKQotICogRGF0ZTogT2N0IDEwLCAyMDAzCi0gKi8KLXB1YmxpYyBjbGFzcyBYQmVhbnNEZW1vCi17Ci0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKLSAgICB7Ci0gICAgICAgIHRyeQotICAgICAgICB7Ci0KLSAgICAgICAgICAgIFhtbE9iamVjdCBkb2M7Ci0gICAgICAgICAgICBTdHJpbmcgeHBhdGhTdHI7Ci0KLSAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCE9MikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkb2MgPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZSgiPGE+PGI+bGFsYTwvYj48Yj5zZWNvbmQgJ2InPC9iPnNvbWUgdGV4dDxjLz48L2E+Iik7Ci0KLSAgICAgICAgICAgICAgICB4cGF0aFN0ciA9ICIvYS9iIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkb2MgPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZShuZXcgRmlsZShhcmdzWzBdKSk7Ci0gICAgICAgICAgICAgICAgeHBhdGhTdHIgPSBhcmdzWzFdOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgWFBhdGggeHBhdGg9IG5ldyBYQmVhbnNYUGF0aCh4cGF0aFN0cik7Ci0KLSAgICAgICAgICAgIHRlc3QxKHhwYXRoLCBkb2MpOwotICAgICAgICAgICAgdGVzdDIoeHBhdGgsIGRvYyk7Ci0gICAgICAgICAgICB0ZXN0Myh4cGF0aFN0ciwgZG9jKTsKLSAgICAgICAgICAgIHRlc3Q0KGRvYyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2F0Y2ggKFhQYXRoU3ludGF4RXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbiggZS5nZXRNdWx0aWxpbmVNZXNzYWdlKCkgKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoSmF4ZW5FeGNlcHRpb24gZSkKLSAgICAgICAgewotICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgfQotICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHRlc3QxKFhQYXRoIHhwYXRoLCBYbWxPYmplY3QgZG9jKQotICAgICAgICB0aHJvd3MgSmF4ZW5FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuIC0tLS0tIHRlc3QxOiAgIFhCZWFuc1hQYXRoLnNlbGVjdE5vZGVzKHhwYXRoU3RyKSAgLS0tLS0iKTsKLQotICAgICAgICAgICAgTGlzdCByZXN1bHRzID0geHBhdGguc2VsZWN0Tm9kZXMoIGRvYy5uZXdDdXJzb3IoKSApOwotCi0gICAgICAgICAgICBJdGVyYXRvciByZXN1bHRJdGVyID0gcmVzdWx0cy5pdGVyYXRvcigpOwotCi0vLyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRG9jdW1lbnQgOjogIiArIGRvYyApOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICBYUGF0aCA6OiAiICsgeHBhdGggKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJlc3VsdHMiICk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLQotICAgICAgICAgICAgd2hpbGUgKCByZXN1bHRJdGVyLmhhc05leHQoKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgT2JqZWN0IG9iamVjdCA9IHJlc3VsdEl0ZXIubmV4dCgpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbiggb2JqZWN0ICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihyZXN1bHRzLnNpemUoKSApOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgdGVzdDIoWFBhdGggeHBhdGgsIFhtbE9iamVjdCBkb2MpCi0gICAgICAgICAgICB0aHJvd3MgSmF4ZW5FeGNlcHRpb24KLSAgICB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuIC0tLS0tIHRlc3QyOiAgIFhCZWFuc1hQYXRoLnNlbGVjdE5vZGVzKHhwYXRoU3RyKSAgLS0tLS0iKTsKLQotICAgICAgICAgICAgWG1sQ3Vyc29yIGRvY1hDID0gZG9jLm5ld0N1cnNvcigpOwotCi0gICAgICAgICAgICBsb25nIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0KLSAgICAgICAgICAgIGludCBjb3VudCA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDEwOyBqKyspIHsKLSAgICAgICAgICAgICAgICBsb25nIHN0YXJ0MiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGRvY1hDLnRvU3RhcnREb2MoKTsKLSAgICAgICAgICAgICAgICAgICAgWG1sQ3Vyc29yIHNwZWFrZXIgPSAoWG1sQ3Vyc29yKSB4cGF0aC5zZWxlY3RTaW5nbGVOb2RlKGRvY1hDKTsKLSAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gKHNwZWFrZXIgPT0gbnVsbCA/IDAgOiAxKTsKLSAgICAgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oKChDdXJzb3Ipc3BlYWtlcikuY3JzICk7Ci0gICAgICAgICAgICAgICAgICAgIC8vKChDdXJzb3Ipc3BlYWtlcikuY3JzID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKChqKjEwKSArICIgICAgICAgICAgICAgICAgXHQiICsgKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpLXN0YXJ0MikpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gIiArIGNvdW50ICsgIiBzZWxlY3Rpb25zIGluICIgKyAoZW5kIC0gc3RhcnQpICsgIiBtcyIpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgdGVzdDMoU3RyaW5nIHhwYXRoU3RyLCBYbWxPYmplY3QgZG9jKQotICAgICAgICAgICAgdGhyb3dzIFhtbEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiXG4gLS0tLS0gdGVzdDM6ICAgWG1sQ3Vyc29yLnNlbGVjdFBhdGgoY3BhdGgpICAtLS0tLSIpOwotCi0gICAgICAgICAgICBTdHJpbmcgY3BhdGggPSBYbWxCZWFucy5jb21waWxlUGF0aCggeHBhdGhTdHIgKTsKLSAgICAgICAgICAgIFhtbEN1cnNvciBzcGVha2VyID0gZG9jLm5ld0N1cnNvcigpOwotCi0gICAgICAgICAgICBsb25nIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0KLSAgICAgICAgICAgIGludCBjb3VudCA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDEwOyBqKyspIHsKLSAgICAgICAgICAgICAgICBsb25nIHN0YXJ0MiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWFrZXIudG9TdGFydERvYygpOwotICAgICAgICAgICAgICAgICAgICBzcGVha2VyLnNlbGVjdFBhdGgoY3BhdGgpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIHNwZWFrZXIudG9OZXh0U2VsZWN0aW9uKCkgKSA7Ci0KLSAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gKHNwZWFrZXIgPT0gbnVsbCA/IDAgOiAxKTsKLSAgICAgICAgICAgICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oKChDdXJzb3Ipc3BlYWtlcikuY3JzICk7Ci0gICAgICAgICAgICAgICAgICAgIC8vKChDdXJzb3Ipc3BlYWtlcikuY3JzID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKChqKjEwKSArICIgICAgICAgICAgICAgICAgXHQiICsgKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpLXN0YXJ0MikpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBsb25nIGVuZCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gIiArIGNvdW50ICsgIiBzZWxlY3Rpb25zIGluICIgKyAoZW5kIC0gc3RhcnQpICsgIiBtcyIpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIHZvaWQgdGVzdDQoWG1sT2JqZWN0IGRvYykKLSAgICB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuIC0tLS0tIHRlc3Q0OiAgIFhtbEN1cnNvci5zZWxlY3RQYXRoKGNwYXRoKSAgLS0tLS0iKTsKLQotICAgICAgICAgICAgWG1sQ3Vyc29yIHhjID0gZG9jLm5ld0N1cnNvcigpOwotCi0gICAgICAgICAgICBsb25nIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0KLSAgICAgICAgICAgIGludCBjb3VudCA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDEwOyBqKyspIHsKLSAgICAgICAgICAgICAgICBsb25nIHN0YXJ0MiA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHhjLnRvU3RhcnREb2MoKTsKLQotICAgICAgICAgICAgICAgICAgICByZWMobmV3IFN0cmluZ1tdIHsiUExBWSIsIkFDVCIsIlNDRU5FIiwiU1BFRUNIIiwiU1BFQUtFUiJ9LCAwLCB4Yyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gKHhjID09IG51bGwgPyAwIDogMSk7Ci0gICAgICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCgoQ3Vyc29yKXNwZWFrZXIpLmNycyApOwotICAgICAgICAgICAgICAgICAgICAvLygoQ3Vyc29yKXNwZWFrZXIpLmNycyA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigoaioxMCkgKyAiICAgICAgICAgICAgICAgIFx0IiArIChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKS1zdGFydDIpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbG9uZyBlbmQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+ICIgKyBjb3VudCArICIgc2VsZWN0aW9ucyBpbiAiICsgKGVuZCAtIHN0YXJ0KSArICIgbXMiKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHJlYyhTdHJpbmdbXSB4cCwgaW50IGksIFhtbEN1cnNvciB4YyApCi0gICAgewotICAgICAgICBpZiAoaT49eHAubGVuZ3RoKQotICAgICAgICB7Ci0gICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbih4Yyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoeGMudG9DaGlsZCh4cFtpXSkpIGRvCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlYyh4cCwgaSsxLCB4Yyk7Ci0gICAgICAgIH0KLSAgICAgICAgd2hpbGUoeGMudG9OZXh0U2libGluZyh4cFtpXSkpOwotICAgICAgICB4Yy50b1BhcmVudCgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL3hzdHlwZXMvZGVmYXVsdC54c2QgYi92Mi90ZXN0L3NyYy94c3R5cGVzL2RlZmF1bHQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGU4YWU1Li4wMDAwMDAwCi0tLSBhL3YyL3Rlc3Qvc3JjL3hzdHlwZXMvZGVmYXVsdC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi08eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+Ci0KLSAgPHhzOmVsZW1lbnQgbmFtZT0idmFsaWRFbGVtRGVmYXVsdCIgICB0eXBlPSJ4czppbnQiIGRlZmF1bHQ9IjEiLz4KLTwhLS0gQkFVOiB3ZSBjYW4ndCBjb21waWxlIGFueSBtb3JlIGJlY2F1c2UgaXQncyBpbnZhbGlkCi0gIDx4czplbGVtZW50IG5hbWU9ImludmFsaWRFbGVtRGVmYXVsdCIgdHlwZT0ieHM6aW50IiBkZWZhdWx0PSJhIi8+Ci0tLT4KLSAgPHhzOmVsZW1lbnQgbmFtZT0idmFsaWRFbGVtRml4ZWQiICAgICB0eXBlPSJ4czppbnQiIGZpeGVkPSIyIi8+Ci08IS0tIEJBVTogd2UgY2FuJ3QgY29tcGlsZSBhbnkgbW9yZSBiZWNhdXNlIGl0J3MgaW52YWxpZAotICA8eHM6ZWxlbWVudCBuYW1lPSJpbnZhbGlkRWxlbUZpeGVkIiAgIHR5cGU9InhzOmludCIgZml4ZWQ9ImIiLz4KLS0tPgotCi0gIDx4czplbGVtZW50IG5hbWU9InZhbGlkQXR0ckRlZmF1bHQiPgotICAgIDx4czpjb21wbGV4VHlwZT4KLSAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYXR0ciIgdHlwZT0ieHM6aW50IiBkZWZhdWx0PSIzIi8+Ci0gICAgPC94czpjb21wbGV4VHlwZT4KLSAgPC94czplbGVtZW50PgotCi08IS0tIEJBVTogd2UgY2FuJ3QgY29tcGlsZSBhbnkgbW9yZSBiZWNhdXNlIGl0J3MgaW52YWxpZAotICA8eHM6ZWxlbWVudCBuYW1lPSJpbnZhbGlkQXR0ckRlZmF1bHQiPgotICAgIDx4czpjb21wbGV4VHlwZT4KLSAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYXR0ciIgdHlwZT0ieHM6aW50IiBkZWZhdWx0PSJjIi8+Ci0gICAgPC94czpjb21wbGV4VHlwZT4KLSAgPC94czplbGVtZW50PgotLS0+Ci0KLSAgPHhzOmVsZW1lbnQgbmFtZT0idmFsaWRBdHRyRml4ZWQiPgotICAgIDx4czpjb21wbGV4VHlwZT4KLSAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYXJpY3R0ciIgdHlwZT0ieHM6aW50IiBmaXhlZD0iNCIvPgotICAgIDwveHM6Y29tcGxleFR5cGU+Ci0gIDwveHM6ZWxlbWVudD4KLQotPCEtLSBCQVU6IHdlIGNhbid0IGNvbXBpbGUgYW55IG1vcmUgYmVjYXVzZSBpdCdzIGludmFsaWQKLSAgPHhzOmVsZW1lbnQgbmFtZT0iaW52YWxpZEF0dHJGaXhlZCI+Ci0gICAgPHhzOmNvbXBsZXhUeXBlPgotICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhdHRyIiB0eXBlPSJ4czppbnQiIGZpeGVkPSJkIi8+Ci0gICAgPC94czpjb21wbGV4VHlwZT4KLSAgPC94czplbGVtZW50PgotLS0+ICAgIAotICA8IS0tIHR5cGVzIHRvIGhlbHAgdGVzdCBuaWwgLS0+Ci0KLSAgPHhzOmVsZW1lbnQgbmFtZT0iY2FuQmVOaWwiIG5pbGxhYmxlPSJ0cnVlIj4KLSAgICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPC94czpjb21wbGV4VHlwZT4KLSAgPC94czplbGVtZW50PgotCi08L3hzOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL3hzdHlwZXMvcGVyc29uLnhzZCBiL3YyL3Rlc3Qvc3JjL3hzdHlwZXMvcGVyc29uLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk5YzYzMi4uMDAwMDAwMAotLS0gYS92Mi90ZXN0L3NyYy94c3R5cGVzL3BlcnNvbi54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotPHhzOnNjaGVtYQotICAgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgeG1sbnM6bXQ9Imh0dHA6Ly9vcGVudXJpLm9yZy94c3R5cGVzL3Rlc3QiCi0gICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9vcGVudXJpLm9yZy94c3R5cGVzL3Rlc3QiCi0gICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIKLSAgIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIgPgotCi0gIDx4czpub3RhdGlvbiBuYW1lPSJqcGVnIiBwdWJsaWM9IkpQRUciIC8+Ci0gIDx4czpub3RhdGlvbiBuYW1lPSJnaWYiIHB1YmxpYz0iR0lGIiAvPgotCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJwZXJzb24iPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgIDx4czplbGVtZW50IG5hbWU9ImZpcnN0bmFtZSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0gICAgICA8eHM6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ibnVtYmVyIj4KLSAgICAgICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmludGVnZXIiPgotICAgICAgICAgICAgICAgPHhzOm1pbkluY2x1c2l2ZSB2YWx1ZT0iMSIvPgotICAgICAgICAgICAgICAgPHhzOm1heEluY2x1c2l2ZSB2YWx1ZT0iMTAwMCIvPgotICAgICAgICAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgICAgICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICAgICAgPC94czplbGVtZW50PgotICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJiaXJ0aGRheSIgdHlwZT0ieHM6ZGF0ZSIvPgotICAgICAgICA8IS0tIHRlc3QgdGhhdCBpbnQtdmFsdWUgZG9lcyBub3QgY29sbGlkZSB3aXRoIGdldEludFZhbHVlKCkgb24gU2ltcGxlVmFsdWUgLS0+Ci0gICAgICAgIDx4czplbGVtZW50IG5hbWU9ImludC12YWx1ZSIgdHlwZT0ieHM6aW50Ii8+Ci0gICAgICA8L3hzOmNob2ljZT4KLSAgICAgIDx4czplbGVtZW50IG5hbWU9ImhleCIgdHlwZT0ieHM6aGV4QmluYXJ5Ii8+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJiYXNlNjQiIHR5cGU9InhzOmJhc2U2NEJpbmFyeSIvPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iYW55dXJpIiB0eXBlPSJ4czphbnlVUkkiLz4KLSAgICAgIDx4czplbGVtZW50IG5hbWU9InFuYW1lIiB0eXBlPSJ4czpRTmFtZSIvPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ibm90YXRpb24iPgotICAgICAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Tk9UQVRJT04iPgotICAgICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJqcGVnIiAvPgotICAgICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJnaWYiIC8+Ci0gICAgICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICAgPC94czplbGVtZW50PgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJnZW5kZXIiPgotICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLSAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9Im1hbGUiLz4KLSAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImZlbWFsZSIvPgotICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgIDwveHM6YXR0cmlidXRlPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaGV4QXR0Ij4KLSAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6aGV4QmluYXJ5Ij4KLSAgICAgICAgICA8eHM6cGF0dGVybiB2YWx1ZT0iKFs0NV1bMC05QS1GXSkqIi8+Ci0gICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImJhc2U2NEF0dCI+Ci0gICAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmJhc2U2NEJpbmFyeSI+Ci0gICAgICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIi8+Ci0gICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJWR2hwY3lCemRISnBibWNnYVhNZ1ltRnpaVFkwUW1sdVlYSjVJR1Z1WTI5a1pXUWgiLz4KLSAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgIDwveHM6YXR0cmlidXRlPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYW55dXJpQXR0Ij4KLSAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55VVJJIj4KLSAgICAgICAgICA8eHM6d2hpdGVTcGFjZSB2YWx1ZT0iY29sbGFwc2UiLz4KLSAgICAgICAgICA8eHM6bGVuZ3RoIHZhbHVlPSIxMDAiLz4KLSAgICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9InFuYW1lQXR0Ij4KLSAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6UU5hbWUiPgotICAgICAgICAgIDx4czp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIvPgotICAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgPC94czphdHRyaWJ1dGU+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJub3RhdGlvbkF0dCI+Ci0gICAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5PVEFUSU9OIj4KLSAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImpwZWciLz4KLSAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImdpZiIvPgotICAgICAgICAgIDx4czpsZW5ndGggdmFsdWU9IjIwIi8+Ci0gICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJjdXN0b21lciIgdHlwZT0ibXQ6cGVyc29uIi8+Ci0KLSAgPHhzOmVsZW1lbnQgbmFtZT0iZW1wbG95ZWUiPgotICAgIDx4czpjb21wbGV4VHlwZT4KLSAgICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJtdDpwZXJzb24iPgotICAgICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9ImVpZCIgdHlwZT0ieHM6aW50Ii8+Ci0gICAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICAgIDwveHM6Y29tcGxleFR5cGU+Ci0gIDwveHM6ZWxlbWVudD4KLQotPC94czpzY2hlbWE+Ci0KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL3hzdHlwZXMvc2V0dGVycy54c2QgYi92Mi90ZXN0L3NyYy94c3R5cGVzL3NldHRlcnMueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTU1Y2Q3Li4wMDAwMDAwCi0tLSBhL3YyL3Rlc3Qvc3JjL3hzdHlwZXMvc2V0dGVycy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgICAgICAgICB4bWxuczp0bnM9InNldHRlcnMiIHRhcmdldE5hbWVzcGFjZT0ic2V0dGVycyIKLSAgICAgICAgICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0gICAgICAgICAgIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCI+Ci0KLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdjIvdGVzdC9zcmMveHN0eXBlcy9zaW1wbGVjLnhzZCBiL3YyL3Rlc3Qvc3JjL3hzdHlwZXMvc2ltcGxlYy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MDc2YTkuLjAwMDAwMDAKLS0tIGEvdjIvdGVzdC9zcmMveHN0eXBlcy9zaW1wbGVjLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTx4czpzY2hlbWEKLSAgIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgIHhtbG5zOm10PSJodHRwOi8vb3BlbnVyaS5vcmcvbXl0ZXN0IgotICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vb3BlbnVyaS5vcmcvbXl0ZXN0IgotICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0gICBhdHRyaWJ1dGVGb3JtRGVmYXVsdD0idW5xdWFsaWZpZWQiCi0+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InNpbXBsaWNpdHkiPgotICAgIDx4czpzaW1wbGVDb250ZW50PgotICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9Im10OnRob3VzYW5kIj4KLSAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5vdGUiIHR5cGU9InhzOnN0cmluZyIvPgotICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOnNpbXBsZUNvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0idGhvdXNhbmQiPgotICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmludGVnZXIiPgotICAgICA8eHM6bWluSW5jbHVzaXZlIHZhbHVlPSIxIi8+Ci0gICAgIDx4czptYXhJbmNsdXNpdmUgdmFsdWU9IjEwMDAiLz4KLSAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJzaW1wbGUiIHR5cGU9Im10OnNpbXBsaWNpdHkiLz4KLQotPC94czpzY2hlbWE+Ci0KZGlmZiAtLWdpdCBhL3YyL3Rlc3Qvc3JjL3hzdHlwZXMveHN0eXBlcy54bWwgYi92Mi90ZXN0L3NyYy94c3R5cGVzL3hzdHlwZXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDMwYjg4Li4wMDAwMDAwCi0tLSBhL3YyL3Rlc3Qvc3JjL3hzdHlwZXMveHN0eXBlcy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdJU08tODg1OS0xJz8+Ci08Y3VzdG9tZXIgeG1sbnM9Imh0dHA6Ly9vcGVudXJpLm9yZy94c3R5cGVzL3Rlc3QiCi0gICBnZW5kZXI9Im1hbGUiCi0gICBoZXhBdHQ9IjQ3NDc0OTUxNTQ1NzU5NDc0NyIKLSAgIGJhc2U2NEF0dD0iICAgICAgICAKLQlWR2hwY3lCemRISnBibWNnYVhNZ1ltRnpaVFkwUW1sdVlYSjVJR1Z1WTI5a1pXUWgKLQkiCi0gICBhbnl1cmlBdHQ9Imh0dHA6Ly9kbW96Lm9yZy9Xb3JsZC9GcmFu52Fpcy8iCi0gICBxbmFtZUF0dD0icHJlZjpsb2NhbG5hbWUiIHhtbG5zOnByZWY9InNvbWVfdXJpIgotICAgbm90YXRpb25BdHQ9IkpQRUciCi0gID4KLSAgPGZpcnN0bmFtZT5Ib3dkeTwvZmlyc3RuYW1lPgotICA8bnVtYmVyPjQzNjwvbnVtYmVyPgotICA8bnVtYmVyPjEyMzwvbnVtYmVyPgotICA8YmlydGhkYXk+MTk5OC0wOC0yNlo8L2JpcnRoZGF5PgotICA8bnVtYmVyPjQ0PC9udW1iZXI+Ci0gIDxudW1iZXI+OTMzPC9udW1iZXI+Ci0gIDxiaXJ0aGRheT4yMDAwLTA4LTA2LTA4OjAwPC9iaXJ0aGRheT4KLSAgPGhleD40NTQ3NDk1MTU0NTc1OTVBNEE8L2hleD4KLSAgPGJhc2U2ND5WR2hwY3lCemRISnBibWNnYVhNZ1ltRnpaVFkwUW1sdVlYSjVJR1Z1WTI5a1pXUWg8L2Jhc2U2ND4KLSAgPGFueXVyaT5odHRwOi8vM3NwYWNlLm9yZy9zcGFjZSUyMHNwYWNlLzwvYW55dXJpPgotICA8cW5hbWU+b3BlbnVyaV9vcmdfbG9jYWxuYW1lPC9xbmFtZT4KLSAgPG5vdGF0aW9uPkdJRjwvbm90YXRpb24+Ci08L2N1c3RvbWVyPgpkaWZmIC0tZ2l0IGEvdjIveGJlYW5lbnYuY21kIGIvdjIveGJlYW5lbnYuY21kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmQxNTFmLi4wMDAwMDAwCi0tLSBhL3YyL3hiZWFuZW52LmNtZAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLVNFVCBYTUxCRUFOU19IT01FPSV+ZHAwLgpkaWZmIC0tZ2l0IGEvdjIveGtpdC9SRUFETUUudHh0IGIvdjIveGtpdC9SRUFETUUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTQyZmUzLi4wMDAwMDAwCi0tLSBhL3YyL3hraXQvUkVBRE1FLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi1YTUxCZWFucyBEZXZlbG9wbWVudCBLaXQKLQotCi1XZWxjb21lIHRvIFhNTEJlYW5zIQotCi0KLUtpdCBjb250ZW50czoKLQotKDEpIE9uZSBjb3B5IG9mIHhiZWFuLmphciwgd2hpY2ggY29udGFpbnMgWE1MQmVhbnMuCi0gICAgU2hvdWxkIHdvcmsgb24gYW55IEpESyAxLjQueC4KLSAgICAuL2xpYi94YmVhbi5qYXIKLQotKDIpIExpY2Vuc2UgaW5mb3JtYXRpb24gZm9yIFhNTCBCZWFucyBhbmQgaW5jbHVkZWQgbGlicmFyaWVzCi0gICAgLi9saWNlbnNlLnR4dAotCi0oMykgT25lIGZvbGRlciBmdWxsIG9mIGNvbW1hbmQtbGluZSBzY3JpcHRzLCBwb2ludGluZyB0byB0aGUKLSAgICB1c2VmdWwgbWFpbigpIGZ1bmN0aW9ucyBpbiB0aGUgSkFSLgotICAgIC4vYmluCi0KLSg0KSBPbmUgYml0IG9mIGFudCB0YXNrIGRvY3VtZW50YXRpb24uCi0gICAgLi9hbnR0YXNrLmh0bWwKLQotKDUpIEEgY29weSBvZiB0aGUgcGxhaW4gamF2YWRvYyB0cmVlIGZvciBjb20uYmVhLnhtbC4qCi0gICAgLi9kb2NzL3JlZmVyZW5jZQotCi0oNikgQSBwcmVsaW1pbmFyeSBjb2xsZWN0aW9uIG9mIG5pY2VseSBmb3JtYXR0ZWQgdXNlci1sZXZlbAotICAgIGRvY3VtZW50YXRpb24gSFRNTCAoaW5jbHVkZXMgcmVmb3JtYXR0ZWQgYW5kIG5pY2VseQotICAgIG9yZ2FuaXplZCBqYXZhZG9jIGFzIHdlbGwpCi0gICAgLi9kb2NzL2d1aWRlCi0KLSg3KSBBIGZldyBzYW1wbGUgc2NoZW1hcwotICAgIC4vc2NoZW1hcwotCi0KLVdoZXJlIHRvIHN0YXJ0PwotCi0oMSkgU2V0dXAuCi0KLSAgICAxLiBtYWtlIHN1cmUgeW91IGhhdmUgYSBKREsgMS40LnggaW5zdGFsbGVkOyB0aGF0IGphdmFbLmV4ZV0KLSAgICAgICBpcyBvbiB5b3VyIHBhdGggYW5kIHRoYXQgSkFWQV9IT01FL2JpbiBjb250YWlucyBqYXZhWy5leGVdLAotICAgICAgIGphdmFjWy5leGVdLCBhbmQgamFyWy5leGVdLgotCi0gICAgMi4gc2V0IHlvdXIgWE1MQkVBTkRJUiBlbnYgdmFyaWFibGUgdG8gcG9pbnQgdG8gdGhlIGRpcmVjdG9yeQotICAgICAgIGNvbnRhaW5pbmcgeGJlYW4uamFyIChpLmUuLCAuL2xpYikuCi0KLSAgICAzLiBwdXQgdGhlIHNjcmlwdHMgaW4gLi9iaW4gb24geW91ciBwYXRoLgotCi0gICAgNC4gcnVuICJzY29tcCIgd2l0aCBubyBhcmd1bWVudHMuICBZb3Ugc2hvdWxkIGdldCBhICJ1c2FnZSIKLSAgICAgICBtZXNzYWdlLgotCi0oMikgVHJ5IHNvbWUgc2NoZW1hIGNvbXBpbGF0aW9uCi0KLSAgICAxLiBJbiB0aGUgLi9zY2hlbWFzIGRpcmVjdG9yeSB5b3UnbGwgZmluZCBzb21lIGNvbGxlY3Rpb25zIG9mCi0gICAgICAgc2NoZW1hcyB5b3UgY2FuIHRyeSBvdXQuCi0KLSAgICAgICAgIC0gZWFzeXBvOiBhIGNvbnRyaXZlZCBzaW1wbGUgc3RhcnRlciAicHVyY2hhc2Ugb3JkZXIiCi0gICAgICAgICAtIGN5Y2xvbmU6IGFuIGFjdHVhbCBjdXN0b21lciBzY2hlbWEgKGN5Y2xvbmVjb21tZXJjZS5jb20pCi0gICAgICAgICAtIHM0czogdGhlIFNjaGVtYSBmb3IgU2NoZW1hCi0gICAgICAgICAtIGoyZWU6IGoyZWUgZGVzY3JpcHRvciBzY2hlbWFzCi0KLSAgICAgICBUbyBjb21waWxlIHRoZW0sIHlvdSBjYW4ganVzdCBzZW5kIHRoZSB3aG9sZSBkaXJlY3RvcnkgdG8KLSAgICAgICBzY29tcCwgZm9yIGV4YW1wbGUsICJjZCBzYW1wbGVzIjsgdGhlbiAic2NvbXAgZWFzeXBvIi4KLSAgICAgICBZb3Ugd2lsbCBnZXQgYW4gInhtbHR5cGVzLmphciIgb3V0IHRoYXQgY29udGFpbnMgYWxsIHRoZQotICAgICAgIGNvbXBpbGVkIFhNTEJlYW5zLiAgVG8gcGljayB5b3VyIG93biBKQVIgZmlsZW5hbWUganVzdCBzYXkKLQotICAgICAgIHNjb21wIC1vdXQgbXllYXN5cG8uamFyIGVhc3lwbwotCi0KLSAgICAyLiBFc3BlY2lhbGx5IGFzIHlvdSBnZXQgc3RhcnRlZCwgeW91IHdpbGwgd2FudCB0byBzZWUgdGhlCi0gICAgICAgLmphdmEgc291cmNlIGNvZGUgZm9yIHRoZSBnZW5lcmF0ZWQgY29kZS4gIFRvIGdldCB0aGF0LAotICAgICAgIHVzZSBhIGNvbW1hbmQtbGluZSBsaWtlCi0KLSAgICAgICBzY29tcCAtc3JjIG15c3JjZGlyIC1vdXQgbXllYXN5cG8uamFyIGVhc3lwbwotCi0gICAgICAgVGhlICJteXNyY2RpciIgd2lsbCBjb250YWluIGFsbCB0aGUgLmphdmEgc291cmNlIGNvZGUKLSAgICAgICBmb3IgdGhlIGdlbmVyYXRlZCBYTUxCZWFucy4KLQotKDMpIFRyeSB1c2luZyB5b3VyIGNvbXBpbGVkIFhNTEJlYW5zCi0KLSAgICBOb3csIGFybWVkIHdpdGggdGhlIFhNTEJlYW5zIHNvdXJjZSBjb2RlIGFuZCB0aGUgYmFzaWMKLSAgICBkb2NzLCB5b3UncmUgcmVhZHkgdG8gcHJvZ3JhbS4gIFRoaW5ncyB5b3UgbmVlZCB0byBrbm93OgotCi0gICAgKiBUaGUgb3JnLmFwYWNoZS54bWxiZWFucyBwYWNrYWdlIGhhcyBhbGwgdGhlIHB1YmxpYyBjbGFzc2VzCi0gICAgICBmb3IgWE1MQmVhbnMuICBQcm9ncmFtcyBzaG91bGQgbm90IG5lZWQgdG8gY2FsbCBhbnl0aGluZwotICAgICAgZWxzZSBpbiB4YmVhbi5qYXIgZGlyZWN0bHkuCi0KLSAgICAqIFhtbE9iamVjdCBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgYWxsIFhNTEJlYW5zLiAgSXQKLSAgICAgIGNvcnJlc3BvbmRzIHRvIHhzOmFueVR5cGUuCi0KLSAgICAqIEV2ZXJ5IHNjaGVtYSB0eXBlIGNvcnJlc3BvbmRzIHRvIGFuIFhNTEJlYW4gaW50ZXJmYWNlLAotICAgICAgZS5nLiwgWG1sQW55U2ltcGxlVHlwZSBjb3JyZXNwb25kcyB0byB4czphbnlTaW1wbGVUeXBlLCBhbmQKLSAgICAgIFhtbEludCBjb3JyZXNwb25kcyB0byB4czppbnQsIGV0Yy4uIEFuZCBvZiBjb3Vyc2UgdGhpcwotICAgICAgZXh0ZW5kcyB0byB0aGUgWE1MQmVhbiBjbGFzc2VzIGNvbXBpbGVkIGZyb20gdXNlci1kZWZpbmVkCi0gICAgICBzY2hlbWFzLgotCi0gICAgKiBFdmVyeSBYTUxCZWFuIGludGVyZmFjZSBoYXMgYW4gaW5uZXIgRmFjdG9yeSBjbGFzcyBmb3IKLSAgICAgIGNyZWF0aW5nIG9yIHBhcnNpbmcgaW5zdGFuY2VzLCBlLmcuLCB0byBsb2FkIGEgZmlsZSBvZgotICAgICAgZ2VuZXJpYyB0eXBlLCB1c2UgWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UobXlmaWxlKTsgdG8KLSAgICAgIHBhcnNlIGEgc3RyaW5nIHlvdSBleHBlY3QgdG8gYmUgYSBwdXJjYWhzZS1vcmRlciwgdXNlCi0gICAgICBQdXJjaGFzZU9yZGVyRG9jdW1lbnQuRmFjdG9yeS5wYXJzZSgiPGVwOnB1cmNoYXNlLW8uLi4iKTsKLQotICAgICogWG1sQ3Vyc29yIGlzIHRoZSBBUEkgZm9yIGZ1bGwgWE1MIGluZm9zZXQgdHJlZXdhbGtpbmcuCi0gICAgICBJdCBpcyBvYnRhaW5lZCB2aWEgeG1sb2JqZWN0Lm5ld0N1cnNvcigpLiBVc2luZyBpdCBpcwotICAgICAgbGVzcyBjb252ZW5pZW50LCBidXQgZmFzdGVyIHRoYW4gdXNpbmcgWE1MIE9iamVjdHMsCi0gICAgICBiZWNhdXNlIGl0IGRvZXMgbm90IGNyZWF0ZSBvYmplY3RzIGFzIGl0IHRyYXZlcnNlcwotICAgICAgdGhlIFhNTCB0cmVlLgotCi0gICAgKiBTY2hlbWFUeXBlIGlzIHRoZSBiYXNpYyAic2NoZW1hIHJlZmxlY3Rpb24iIEFQSSAoanVzdCBsaWtlCi0gICAgICBDbGFzcywgYnV0IGZvciBTY2hlbWEpLiAgR2V0IHRoZSBhY3R1YWwgc2NoZW1hIHR5cGUgb2YgYW55Ci0gICAgICBpbnN0YW5jZSBieSBzYXlpbmcgInhvYmouc2NoZW1hVHlwZSgpOyIgZ2V0IHRoZSBzdGF0aWMKLSAgICAgIGNvbnN0YW50IHNjaGVtYSB0eXBlIGNvcnJlc3BvbmRpbmcgdG8gYW55IFhNTEJlYW4gY2xhc3MKLSAgICAgIGJ5IHNheWluZyAiTXlQdXJjaGFzZU9yZGVyLnR5cGUiIG9yICJYbWxJbnQudHlwZSIuCi0gICAgICAoQW5hbG9nb3VzIHRvICJvYmouZ2V0Q2xhc3MoKSIgYW5kICJPYmplY3QuY2xhc3MiLikKLQotICAgICogQSBudW1iZXIgb2YgdXRpbGl0eSBtZXRob2RzIGFyZSBhdmFsaWFibGUgb24KLSAgICAgIGNvbS5iZWEueG1sLlhtbEJlYW5zLCBpbmNsdWRpbmcgYSBmdW5jdGlvbiB0aGF0IGNhbiBiZQotICAgICAgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhIEphdmEgY2xhc3MgaXMgYW4gWG1sQmVhbiBhbmQKLSAgICAgIGZ1bmN0aW9ucyB0byBtYW5hZ2UgcnVudGltZS1sb2FkaW5nIG9mIHNjaGVtYSB0eXBlCi0gICAgICBzeXN0ZW1zLgotCi0gICAgV2l0aCB0aGF0LCB5b3UncmUgcmVhZHkgdG8gbmF2aWdhdGUgdGhlIGphdmFkb2MgYW5kIHBsYXkKLSAgICB3aXRoIHRoZSBjb2RlLiAgQWxzbywgdHJ5IHJlYWRpbmcgc29tZSBvZiBvdXIgCi0gICAgZG9jcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiAuL2RvY3MKLQotKDMpIFRyeSBzb21lIG9mIHRoZSBvdGhlciB1dGlsaXRpZXM7IHlvdSBjYW4gYWxzbyBzZWUgYSBmZXcKLSAgICBleGFtcGxlcyBvZiBYTUxCZWFuIHRlY2huaXF1ZXMgaW4gdGhlaXIgc291cmNlIGNvZGUuCi0KLSAgICAxLiAieHByZXR0eSBpbnN0YW5jZS54bWwiIHByZXR0eS1wcmludHMgYW4gWE1MIGluc3RhbmNlCi0gICAgICAgZG9jdW1lbnQuCi0KLSAgICAgICBUaGUgY29kZSBpcyBpbiB4bWwuYXBhY2hlLm9yZy50b29sLlByZXR0eVByaW50ZXIgYW5kIGlzCi0gICAgICAgYSByZWFzb25hYmxlIGV4YW1wbGUgb2YgaG93IHRvIGxvYWQgYW5kIHNhdmUgb3V0IGFuCi0gICAgICAgYXJiaXRyYXJ5IFhNTCBkb2N1bWVudC4gIFhtbE9wdGlvbnMgYXJlIHVzZWQgdG8gcHJvZHVjZQotICAgICAgIHRoZSBwcmV0dHktcHJpbnRpbmcuCi0KLSAgICAyLiAidmFsaWRhdGUgaW5zdGFuY2UueG1sIHNjaGVtYS54c2QiIHdpbGwgdmFsaWRhdGUgdGhlCi0gICAgICAgaW5zdGFuY2UgYWdhaW5zdCB0aGUgc2NoZW1hLiAgWE1MQmVhbnMgaXMgaW50ZW5kZWQgdG8KLSAgICAgICBiZSBhIHZlcnkgYWNjdXJhdGUgWE1MIHNjaGVtYSB2YWxpZGF0b3IuCi0KLSAgICAgICBUaGUgY29kZSBpcyBpbiB4bWwuYXBhY2hlLm9yZy50b29sLkluc3RhbmNlVmFsaWRhdG9yLgotICAgICAgIEl0IGlzIGFuIGV4Y2VsbGVudCBleGFtcGxlIG9mIGhvdyB0byBsb2FkIGEgc2NoZW1hCi0gICAgICAgdHlwZSBzeXN0ZW0gZHluYW1pY2FsbHkgYXQgcnVudGltZSwgbG9hZCBhbmQgdmFsaWRhdGUKLSAgICAgICBhbiBpbnN0YW5jZSB3aXRoaW4gdGhhdCB0eXBlIHN5c3RlbSwgYW5kIGhvdyB0byBvYnRhaW4KLSAgICAgICBsaXN0cyBvZiBhbmQgbG9jYXRpb25zIGZvciB2YWxpZGF0aW9uIGVycm9ycy4KLQotICAgIDMuICJ4c2R0cmVlIGVhc3lwbyIgd2lsbCBzaG93IHRoZSBpbmhlcml0YW5jZSBoaWVyYXJjaHkKLSAgICAgICBvZiB0aGUgc2NoZW1hIHR5cGVzIGluIHRoYXQgZGlyZWN0b3J5LgotCi0gICAgICAgVGhlIGNvZGUgaXMgaW4geG1sLmFwYWNoZS5vcmcudG9vbC5UeXBlSGllcmFyY2h5UHJpbnRlcgotICAgICAgIGFuZCBpcyBhIGdvb2QgaW50cm9kdWN0aW9uIHRvIGhvdyB0byB0cmF2ZXJzZSB0aGUKLSAgICAgICBtZXRhZGF0YSBpbiBhIHNjaGVtYSB0eXBlIHN5c3RlbS4KLQotICAgIDQuICJkdW1weHNiIHhiZWFuLmphciIgb3IgImR1bXB4c2IgbXlmaWxlLnhzYiIgd2lsbCBkdW1wCi0gICAgICAgdGhlIGNvbnRlbnRzIG9mICJ4c2IiIChiaW5hcnkgc2NoZW1hIG1ldGFkYXRhKSBmaWxlcwotICAgICAgIGluIGEgaHVtYW4tcmVhZGFibGUgZm9ybS4gIFRoZXNlIC54c2IgZmlsZXMgY29udGFpbgotICAgICAgIHRoZSBjb21waWxlZCBtZXRhZGF0YSByZXN1bHRpbmcgZnJvbSB0aGUgLnhzZCBmaWxlcwotICAgICAgIG9mIGEgdHlwZSBzeXN0ZW0uICBUaGV5IGFyZSBhbmFsb2dvdXMgdG8gLmNsYXNzIGZpbGVzCi0gICAgICAgZm9yIC5qYXZhLgotCmRpZmYgLS1naXQgYS92Mi94a2l0L2FudHRhc2suaHRtbCBiL3YyL3hraXQvYW50dGFzay5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDYyMzZiLi4wMDAwMDAwCi0tLSBhL3YyL3hraXQvYW50dGFzay5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjE3ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLSAgICAgICAgICAgICAgICAgICAgIAotICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbi11cyI+Ci0gIDx0aXRsZT5YTUxCZWFuIFRhc2s8L3RpdGxlPgotPC9oZWFkPgotICA8Ym9keT4KLSAgICAgICAgICAgIAotPGgyPjxhIG5hbWU9InhtbGJlYW4iPlhNTEJlYW48L2E+PC9oMj4KLSAgICAgICAgICAgCi08aDM+RGVzY3JpcHRpb248L2gzPgotICAgICAgICAgICAgICAKLTxwPkNvbXBpbGUgYSBzZXQgb2YgWFNEcyBhbmQvb3IgV1NETHMgaW50byB4YmVhbnMuIFRoaXMgaXMgdXNlZnVsIGZvciBidWlsZGluZwotIGFuIFhNTEJlYW4gamFyIGZyb20gLlhTRCBhbmQgLldTREwgZmlsZXMuICZuYnNwO1RoZSB0YXNrIGNhbiBhbHNvIGdlbmVyYXRlCi0gdGhlIHNvdXJjZSBjb2RlIHRoYXQgbWFrZXMgdXAgdGhlIHhiZWFuIHR5cGUgc3lzdGVtIHNwZWNpZmllZCBieSB0aGUgc2NoZW1hCi0gZmlsZXMgaWYgZGVzaXJlZC48L3A+Ci0gICAgICAgICAgICAgIAotPHA+PGI+Tm90ZTo8L2I+IFRoaXMgdGFzayBkZXBlbmRzIG9uIGFuIGV4dGVybmFsIGxpYnJhcnkgbm90IGluY2x1ZGVkIGluCi10aGUgIEFudCBkaXN0cmlidXRpb24gY2FsbGVkIHhiZWFuLmphci4gJm5ic3A7SXQgY2FuIGJlIGZvdW5kIGluIHRoZSBYTUxCZWFucwotIGRldmVsb3BlciBraXQgYXQgPGEKLSBocmVmPSJodHRwOi8vZGV2MmRldi5iZWEuY29tL3RlY2hub2xvZ2llcy94bWxiZWFucy8iPmh0dHA6Ly9kZXYyZGV2LmJlYS5jb20vdGVjaG5vbG9naWVzL3htbGJlYW5zLzwvYT4uIAotVGhlIGJ1aWxkIHNjcmlwdCB3aWxsIG5lZWQgdG8gaW5jbHVkZSBhIHRhc2tkZWYgZm9yIHhtbGJlYW4sIHdoaWNoIGNvdWxkIGxvb2sKLWxpa2UgdGhpczo8YnI+Ci0gPC9wPgotIAotPHByZT4mbmJzcDsmbmJzcDsmbmJzcDsgJmx0O3Rhc2tkZWYgbmFtZT0ieG1sYmVhbiIgY2xhc3NuYW1lPSJvcmcuYXBhY2hlLnhtbGJlYW5zLmltcGwudG9vbC5YTUxCZWFuIiBjbGFzc3BhdGg9InBhdGgvdG8veGJlYW4uamFyIi8mZ3Q7PC9wcmU+Ci0gCi08cD4gICA8L3A+Ci0gICAgICAgICAgIAotPHA+SXQgaXMgcG9zc2libGUgdG8gcmVmaW5lIHRoZSBzZXQgb2YgZmlsZXMgdGhhdCBhcmUgYmVpbmcgcHJvY2Vzc2VkLiBUaGlzIAotICBjYW4gYmUgZG9uZSB3aXRoIHRoZSA8aT5pbmNsdWRlczwvaT4sIDxpPmluY2x1ZGVzZmlsZTwvaT4sIDxpPmV4Y2x1ZGVzPC9pPiwgCi0gIDxpPmV4Y2x1ZGVzZmlsZTwvaT4gYW5kIDxpPmRlZmF1bHRleGNsdWRlczwvaT4gYXR0cmlidXRlcy4gV2l0aCB0aGUgPGk+aW5jbHVkZXM8L2k+IAotICBvciA8aT5pbmNsdWRlc2ZpbGU8L2k+IGF0dHJpYnV0ZSB5b3Ugc3BlY2lmeSB0aGUgZmlsZXMgeW91IHdhbnQgdG8gaGF2ZSAKLWluY2x1ZGVkICBieSB1c2luZyBwYXR0ZXJucy4gVGhlIDxpPmV4Y2x1ZGU8L2k+IG9yIDxpPmV4Y2x1ZGVzZmlsZTwvaT4gYXR0cmlidXRlIAotaXMgIHVzZWQgdG8gc3BlY2lmeSB0aGUgZmlsZXMgeW91IHdhbnQgdG8gaGF2ZSBleGNsdWRlZC4gVGhpcyBpcyBhbHNvIGRvbmUgCi13aXRoICBwYXR0ZXJucy4gQW5kIGZpbmFsbHkgd2l0aCB0aGUgPGk+ZGVmYXVsdGV4Y2x1ZGVzPC9pPiBhdHRyaWJ1dGUsIHlvdSAKLWNhbiBzcGVjaWZ5IHdoZXRoZXIgeW91IHdhbnQgdG8gdXNlIGRlZmF1bHQgZXhjbHVzaW9ucyBvciBub3QuIFNlZSB0aGUgc2VjdGlvbiAKLSBvbiA8YQotIGhyZWY9Imh0dHA6Ly9hbnQuYXBhY2hlLm9yZy9tYW51YWwvZGlydGFza3MuaHRtbCNkaXJlY3RvcnliYXNlZHRhc2tzIj5kaXJlY3RvcnkKLSBiYXNlZCB0YXNrczwvYT4sIG9uIGhvdyB0aGUgaW5jbHVzaW9uL2V4Y2x1c2lvbiBvZiBmaWxlcyB3b3JrcywgYW5kIGhvdwotdG8gIHdyaXRlIHBhdHRlcm5zLjwvcD4KLSAgICAgICAgICAgCi08cD5UaGlzIHRhc2sgZm9ybXMgYW4gaW1wbGljaXQgPGEKLSBocmVmPSJodHRwOi8vYW50LmFwYWNoZS5vcmcvbWFudWFsL0NvcmVUeXBlcy9maWxlc2V0Lmh0bWwiPkZpbGVTZXQ8L2E+IAotYW5kIHN1cHBvcnRzIGFsbCAgIGF0dHJpYnV0ZXMgb2YgPGNvZGU+Jmx0O2ZpbGVzZXQmZ3Q7PC9jb2RlPiAoPGNvZGU+ZGlyPC9jb2RlPiAKLSAgYmVjb21lcyA8Y29kZT5iYXNlZGlyPC9jb2RlPikgICBhcyB3ZWxsIGFzIHRoZSBuZXN0ZWQgPGNvZGU+Jmx0O2luY2x1ZGUmZ3Q7PC9jb2RlPiwgCi0gIDxjb2RlPiZsdDtleGNsdWRlJmd0OzwvY29kZT4gICBhbmQgPGNvZGU+Jmx0O3BhdHRlcm5zZXQmZ3Q7PC9jb2RlPiBlbGVtZW50cy48L3A+Ci0gICAgICAgICAgICAgIAotPGgzPlBhcmFtZXRlcnM8L2gzPgotICAgICAgICAgICAKLTx0YWJsZSBib3JkZXI9IjEiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgICAgIDx0Ym9keT4KLSAgICAgICAgIDx0cj4KLSAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPjxiPkF0dHJpYnV0ZTwvYj48L3RkPgotICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCI+PGI+RGVzY3JpcHRpb248L2I+PC90ZD4KLSAgICAgICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiPjxiPlJlcXVpcmVkPC9iPjwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPnNjaGVtYTwvdGQ+Ci0gICAgICAgICAgPHRkIHZhbGlnbj0idG9wIj5BIGZpbGUgdGhhdCBwb2ludHMgdG8gZWl0aGVyIGFuIGluZGl2aWR1YWwgc2NoZW1hCi0gZmlsZSBvciBhIGRpcmVjdG9yeSBvZiBmaWxlcy4gJm5ic3A7Tm90IGEgcGF0aCByZWZlcmVuY2UuICZuYnNwO0lmIG11bHRpcGxlCi0gc2NoZW1hIGZpbGVzIG5lZWQgdG8gYmUgYnVpbHQgdG9nZXRoZXIsIHVzZSBhIG5leHRlZCBmaWxlc2V0IGluc3RlYWQgb2YKLXNldHRpbmcgIHNjaGVtYS48L3RkPgotICAgICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCI+WWVzLCB1bmxlc3MgYSBmaWxlc2V0IGVsZW1lbnQgaXMKLSBuZXN0ZWQuPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCI+ZGVzdGZpbGU8L3RkPgotICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCI+RGVmaW5lIHRoZSBuYW1lIG9mIHRoZSBqYXIgZmlsZSBjcmVhdGVkLiZuYnNwOyAKLUZvciBpbnN0YW5jZSwgIm15WE1MQmVhbi5qYXIiIHdpbGwgb3V0cHV0IHRoZSByZXN1bHRzIG9mIHRoaXMgdGFzayBpbnRvIGEgCi1qYXIgd2l0aCB0aGUgc2FtZSBuYW1lLjwvdGQ+Ci0gICAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIj5ObywgZGVmYXVsdCBpcyAieG1sdHlwZXMuamFyIi48L3RkPgotICAgICAgICA8L3RyPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIHZhbGlnbj0idG9wIj5kb3dubG9hZDwvdGQ+Ci0gICAgICAgICAgPHRkIHZhbGlnbj0idG9wIj5TZXQgdG8gdHJ1ZSB0byBwZXJtaXQgdGhlIGNvbXBpbGVyIHRvIGRvd25sb2FkIAotVVJMcyBmb3IgaW1wb3J0cyBhbmQgaW5jbHVkZXMuJm5ic3A7IERlZmF1bHRzIHRvIGZhbHNlLCBtZWFuaW5nIGFsbCBpbXBvcnRzIAotYW5kIGluY2x1ZGVzIG11c3QgYmUgY29waWVkIGxvY2FsbHkuPGJyPgotICAgICAgICA8L3RkPgotICAgICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCI+Tm8sIGRlZmF1bHQgaXMgZmFsc2UuPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCI+ZmFpbG9uZXJyb3I8L3RkPgotICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCI+ICAgICBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZSBhbnQgdGFyZ2V0Ci13aWxsICBjb250aW51ZSBpZiB0aGUgWE1MQmVhbiBjcmVhdGlvbiBlbmNvdW50ZXJzIGEgYnVpbGQgZXJyb3IuPGJyPgotICAgICAgICA8L3RkPgotICAgICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCI+Tm8sIGRlZmF1bHQgaXMgdHJ1ZS48L3RkPgotICAgICAgICA8L3RyPgotICAgICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249InRvcCI+dmVyYm9zZTxicj4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIHZhbGlnbj0idG9wIj5Db250cm9scyB0aGUgYW1vdW50IG9mIGJ1aWxkIG1lc3NhZ2Ugb3V0cHV0Ljxicj4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0iY2VudGVyIj5ObywgZGVmYXVsdCBpcyB0cnVlLjxicj4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249InRvcCI+dHlwZXN5c3RlbW5hbWU8YnI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCB2YWxpZ249InRvcCI+VGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgdGhhdCB0aGUgVHlwZVN5c3RlbUhvbGRlcgotY2xhc3Mgc2hvdWxkIGJlIGdlbmVyYXRlZCBpbi4mbmJzcDsgTm9ybWFsbHkgdGhpcyBzaG91bGQgYmUgbGVmdCB1bnNwZWNpZmllZC4KLU5vbmUgb2YgdGhlIHhtbCBiZWFucyBhcmUgZ2VuZXJhdGVkIGluIHRoaXMgcGFja2FnZS4gVXNlIC54c2Rjb25maWcgZmlsZXMKLXRvIG1vZGlmeSB4bWwgYmVhbiBwYWNrYWdlIG9yIGNsYXNzIG5hbWVzLjxicj4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0iY2VudGVyIj5Obzxicj4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgIDx0ZCB2YWxpZ249InRvcCI+Y2xhc3NnZW5kaXI8YnI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCB2YWxpZ249InRvcCI+U2V0IGEgbG9jYXRpb24gdG8gZ2VuZXJhdGUgLmNsYXNzIGZpbGVzIGludG8uPGJyPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJjZW50ZXIiPk5vPGJyPgotICAgICAgICA8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4KLSAgICAgICAgPHRkIHZhbGlnbj0idG9wIj5zcmNvbmx5PGJyPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPkEgdmFsdWUgb2YgdHJ1ZSBtZWFucyB0aGF0IG9ubHkgc291cmNlIHdpbGwgYmUgZ2VuZXJhdGVkLjxicj4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0iY2VudGVyIj5ObywgZGVmYXVsdCBpcyBmYWxzZS48YnI+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPgotICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPnNyY2dlbmRpcjxicj4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIHZhbGlnbj0idG9wIj5TZXQgYSBsb2NhdGlvbiB0byBnZW5lcmF0ZSAuamF2YSBmaWxlcyBpbnRvLjxicj4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgPHRkIHZhbGlnbj0idG9wIiBhbGlnbj0iY2VudGVyIj5Obzxicj4KLSAgICAgICAgPC90ZD4KLSAgICAgIDwvdHI+Ci0gICAgICA8dHI+Ci0gICAgICAgICAgPHRkIHZhbGlnbj0idG9wIj5jbGFzc3BhdGg8L3RkPgotICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCI+VGhlIGNsYXNzcGF0aCB0byB1c2UgaWYgc2NoZW1hcyBpbiB0aGUgZmlsZXNldAotaW1wb3J0IGRlZmluaXRpb25zIHRoYXQgYXJlIHN1cHBsaWVkIGJ5IG90aGVyIGNvbXBpbGVkIHhtbCBiZWFucyBKQVIgZmlsZXMsCi1vciBpZiAuamF2YSBmaWxlcyBhcmUgaW4gdGhlIHNjaGVtYSBmaWxlc2V0LjwvdGQ+Ci0gICAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIj5ObzwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPmNsYXNzcGF0aHJlZjwvdGQ+Ci0gICAgICAgICAgPHRkIHZhbGlnbj0idG9wIj5BZGRzIGEgY2xhc3NwYXRoLCBnaXZlbiBhcyA8YQotIGhyZWY9Imh0dHA6Ly9hbnQuYXBhY2hlLm9yZy9tYW51YWwvdXNpbmcuaHRtbCNyZWZlcmVuY2VzIj5yZWZlcmVuY2U8L2E+Ci10byBhIHBhdGggZGVmaW5lZCBlbHNld2hlcmUuPC90ZD4KLSAgICAgICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiPk5vPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCI+aW5jbHVkZXM8L3RkPgotICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCI+Q29tbWEtIG9yIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHBhdHRlcm5zIG9mCi1maWxlcyAgIHRoYXQgbXVzdCBiZSBpbmNsdWRlZC4gICAgICAgQWxsIGZpbGVzIGFyZSBpbmNsdWRlZCB3aGVuIG9taXR0ZWQuPC90ZD4KLSAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJjZW50ZXIiPk5vPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCI+aW5jbHVkZXNmaWxlPC90ZD4KLSAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPlRoZSBuYW1lIG9mIGEgZmlsZS4gRWFjaCBsaW5lIG9mIHRoaXMgZmlsZSBpcwotdGFrZW4gICB0byBiZSAgICAgICBhbiBpbmNsdWRlIHBhdHRlcm48L3RkPgotICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgYWxpZ249ImNlbnRlciI+Tm88L3RkPgotICAgICAgICA8L3RyPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIHZhbGlnbj0idG9wIj5leGNsdWRlczwvdGQ+Ci0gICAgICAgICAgPHRkIHZhbGlnbj0idG9wIj5Db21tYS0gb3Igc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgcGF0dGVybnMgb2YKLWZpbGVzICAgdGhhdCBtdXN0IGJlIGV4Y2x1ZGVkLiAgICAgICBObyBmaWxlcyAoZXhjZXB0IGRlZmF1bHQgZXhjbHVkZXMpIGFyZQotZXhjbHVkZWQgICB3aGVuIG9taXR0ZWQuPC90ZD4KLSAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGFsaWduPSJjZW50ZXIiPk5vPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgICAgPHRyPgotICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCI+ZXhjbHVkZXNmaWxlPC90ZD4KLSAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiPlRoZSBuYW1lIG9mIGEgZmlsZS4gRWFjaCBsaW5lIG9mIHRoaXMgZmlsZSBpcwotdGFrZW4gICB0byBiZSAgICAgICBhbiBleGNsdWRlIHBhdHRlcm48L3RkPgotICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgYWxpZ249ImNlbnRlciI+Tm88L3RkPgotICAgICAgICA8L3RyPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgPHRkIHZhbGlnbj0idG9wIj5kZWZhdWx0ZXhjbHVkZXM8L3RkPgotICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCI+SW5kaWNhdGVzIHdoZXRoZXIgZGVmYXVsdCBleGNsdWRlcyBzaG91bGQgYmUgdXNlZAotICBvciBub3QgICAgICAgKCJ5ZXMiLyJubyIpLiBEZWZhdWx0IGV4Y2x1ZGVzIGFyZSB1c2VkIHdoZW4gb21pdHRlZC48L3RkPgotICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgYWxpZ249ImNlbnRlciI+Tm88L3RkPgotICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAKLSAgPC90Ym9keT4gICAgIAotPC90YWJsZT4KLSAgICAgICAgICAgICAgICAgCi08aDM+RXhhbXBsZTwvaDM+Ci0gICAgICAgICAgIAotPGJsb2NrcXVvdGU+ICAgICAgICAgICAgICAgQmUgc3VyZSB0byBkZWZpbmUgdGhlIHRhc2sgaW4geW91ciBzY3JpcHQsIGxpa2UgCi10aGlzOjxicj4KLSAgIAotICA8cHJlPiZsdDt0YXNrZGVmIG5hbWU9InhtbGJlYW4iIGNsYXNzbmFtZT0ib3JnLmFwYWNoZS54bWxiZWFucy5pbXBsLnRvb2wuWE1MQmVhbiIgY2xhc3NwYXRoPSJwYXRoL3RvL3hiZWFuLmphciIvJmd0OzwvcHJlPgotICAgCi0gIDxwcmU+PGJyPiZsdDt4bWxiZWFuIHNjaGVtYT0ic2NoZW1hcyIgZGVzdGZpbGU9IlNjaGVtYXMuamFyIi8mZ3Q7PGJyPjwvcHJlPgotICBCdWlsZHMgYWxsIHRoZSBzY2hlbWFzIGluIHRoZSBzY2hlbWFzIGRpcmVjdG9yeSBhbmQgY3JlYXRlcyBhIGphciBjYWxsZWQKLSAnU2NoZW1hcy5qYXInLjxicj4KLSAgICAgICAgICAgICAgICAgICAgCi0gIDxwcmU+Jmx0O3htbGJlYW4gc2NoZW1hPSJzY2hlbWFzL291clNjaGVtYS54c2QiIGRvd25sb2FkPSJ0cnVlIi8mZ3Q7PGJyPjwvcHJlPgotICBDb21waWxlcyB0aGUgc2NoZW1hICdvdXJTaGVtYS54c2QnIGludG8gdGhlIGRlZmF1bHQgamFyICd4bWx0eXBlcy5qYXInLiAKLSZuYnNwO0lmICZuYnNwO2FueSBpbXBvcnRzIGFuZCBpbmNsdWRlcyBhcmUgZGVmaW5lZCBieSByZW1vdGUgVVJMcywgdGhleSBhcmUKLWRvd25sb2FkZWQgZHVyaW5nIHRoZSBidWlsZC48YnI+Ci0gICAgICAgICAgICAgICAgICAgICAgIAotICA8aDQ+VXNpbmcgYSBmaWxlc2V0PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgCi0gIDxwcmU+Jmx0O3htbGJlYW4gY2xhc3NnZW5kaXI9IiR7YnVpbGQuZGlyfSIgY2xhc3NwYXRoPSIke2NsYXNzLnBhdGh9Ijxicj4gICAgICBmYWlsb25lcnJvcj0idHJ1ZSImZ3Q7PGJyPiAgJmx0O2ZpbGVzZXQgYmFzZWRpcj0ic3JjIiBleGNsdWRlcz0iKiovKi54c2QiLyZndDs8YnI+ICAmbHQ7ZmlsZXNldCBiYXNlZGlyPSJzY2hlbWFzIiBpbmNsdWRlcz0iKiovKi4qIi8mZ3Q7PGJyPiZsdDsveG1sYmVhbiZndDs8YnI+PC9wcmU+Ci0gIEdhdGhlcnMgYWxsIHRoZSBmaWxlcyBpbiB0aGUgJ3NyYycgZGlyZWN0b3J5IGV4Y2VwdCAueHNkIGZpbGVzLCBhbG9uZyB3aXRoCi0gZXZlcnkgZmlsZSBpbiB0aGUgJ3NjaGVtYXMnIGRpcmVjdG9yeSBhbmQgY29tcGlsZXMgdGhlbS4gVGhlIGZpbGVzZXQgY2FuCi1pbmNsdWRlIHNjaGVtYSBmaWxlcyB0aGF0IHJlZmVyIHRvIHByZXZpb3VzbHkgY29tcGlsZWQgc2NoZW1hIGNvbXBvbmVudHMuJm5ic3A7Ci1UaGUgZmlsZXNldCBjYW4gYWxzbyBjb250YWluIC5qYXZhIGZpbGVzLiZuYnNwOyBUaGUgY2xhc3NwYXRoIHBhcmFtZXRlciBkZWZpbmVzCi10aGUgY2xhc3NwYXRoIG5lY2Vzc2FyeSB0byByZXNvbHZlIGNvbXBpbGVkIHNjaGVtYSBhbmQgamF2YSByZWZlcmVuY2VzLjxicj4KLSAgPGJyPgotVGhlIGJ1aWx0IGNsYXNzZXMgd2lsbCBnbyBpbnRvICR7YnVpbGQuZGlyfS48YnI+Ci0gICAgICAgICAgICAgICAgICAgICAgIAotICA8cHJlPjwvcHJlPgotICAgICAgICAgICA8L2Jsb2NrcXVvdGU+Ci0gICAgICAgICAgIAotPGhyPiAgICAgIAotICAgICAgIDxicj4KLSAgICAgICAgPGJyPgotIDxicj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3YyL3hraXQvYmluL2R1bXB4c2IgYi92Mi94a2l0L2Jpbi9kdW1weHNiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTE4MTA0Li4wMDAwMDAwCi0tLSBhL3YyL3hraXQvYmluL2R1bXB4c2IKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0jIS9iaW4vc2gKLQotI1hTQiBmaWxlIGR1bXBlcgotI1ByaW50cyB0aGUgY29udGVudHMgb2YgYW4geHNiIGZpbGUgaW4gaHVtYW4tcmVhZGFibGUgZm9ybQotCi1jcD0KLWNwPSRjcDokWE1MQkVBTkRJUi94YmVhbi5qYXIKLQotamF2YSAtY2xhc3NwYXRoICRjcCB4bWxiZWFucy5hcGFjaGUub3JnLnRvb2wuWHNiRHVtcGVyICQqCi0KZGlmZiAtLWdpdCBhL3YyL3hraXQvYmluL2R1bXB4c2IuY21kIGIvdjIveGtpdC9iaW4vZHVtcHhzYi5jbWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxNjY4ODYuLjAwMDAwMDAKLS0tIGEvdjIveGtpdC9iaW4vZHVtcHhzYi5jbWQKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1AcmVtIFhTQiBmaWxlIGR1bXBlcgotQHJlbQotQHJlbSBQcmludHMgdGhlIGNvbnRlbnRzIG9mIGFuIHhzYiBmaWxlIGluIGh1bWFuLXJlYWRhYmxlIGZvcm0KLQotQGVjaG8gb2ZmCi0KLXNldCBjcD0KLXNldCBjcD0lY3AlOyVYTUxCRUFORElSJVx4YmVhbi5qYXIKLQotamF2YSAtY2xhc3NwYXRoICVjcCUgeG1sYmVhbnMuYXBhY2hlLm9yZy50b29sLlhzYkR1bXBlciAlKgotCi06ZG9uZQpkaWZmIC0tZ2l0IGEvdjIveGtpdC9iaW4vc2NvbXAgYi92Mi94a2l0L2Jpbi9zY29tcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQxZjFjMi4uMDAwMDAwMAotLS0gYS92Mi94a2l0L2Jpbi9zY29tcAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLSMhL2Jpbi9zaAotCi0jU2NoZW1hIGNvbXBpbGVyCi0jQnVpbGRzIFhCZWFuIHR5cGVzIGZyb20geHNkIGZpbGVzLgotCi0KLWNwPQotY3A9JGNwOiRYTUxCRUFORElSL3hiZWFuLmphcgotCi1qYXZhIC1jbGFzc3BhdGggJGNwIHhtbGJlYW5zLmFwYWNoZS5vcmcudG9vbC5TY2hlbWFDb21waWxlciAkKgotCi0KZGlmZiAtLWdpdCBhL3YyL3hraXQvYmluL3Njb21wLmNtZCBiL3YyL3hraXQvYmluL3Njb21wLmNtZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE5ZWZjNC4uMDAwMDAwMAotLS0gYS92Mi94a2l0L2Jpbi9zY29tcC5jbWQKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1AcmVtIFNjaGVtYSBjb21waWxlcgotQHJlbQotQHJlbSBCdWlsZHMgWEJlYW4gdHlwZXMgZnJvbSB4c2QgZmlsZXMuCi0KLUBlY2hvIG9mZgotCi1zZXQgY3A9Ci1zZXQgY3A9JWNwJTslWE1MQkVBTkRJUiVceGJlYW4uamFyCi0KLWphdmEgLWNsYXNzcGF0aCAlY3AlIHhtbGJlYW5zLmFwYWNoZS5vcmcudG9vbC5TY2hlbWFDb21waWxlciAlKgotCi06ZG9uZQpkaWZmIC0tZ2l0IGEvdjIveGtpdC9iaW4vc2NvcHkgYi92Mi94a2l0L2Jpbi9zY29weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ4YzAyMC4uMDAwMDAwMAotLS0gYS92Mi94a2l0L2Jpbi9zY29weQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotIyEvYmluL3NoCi0KLWNwPQotY3A9JGNwOiRYTUxCRUFORElSL3hiZWFuLmphcgotCi1qYXZhIC1jbGFzc3BhdGggJGNwIHhtbC5hcGFjaGUub3JnLnRvb2wuU2NoZW1hQ29tcGlsZXIgJCoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92Mi94a2l0L2Jpbi9zY29weS5jbWQgYi92Mi94a2l0L2Jpbi9zY29weS5jbWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4YzcxM2QuLjAwMDAwMDAKLS0tIGEvdjIveGtpdC9iaW4vc2NvcHkuY21kCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotQHJlbSBTY2hlbWEgY29tcGlsZXIKLUByZW0KLUByZW0gQnVpbGRzIFhCZWFuIHR5cGVzIGZyb20geHNkIGZpbGVzLgotCi1AZWNobyBvZmYKLQotc2V0IGNwPQotc2V0IGNwPSVjcCU7JVhNTEJFQU5ESVIlXHhiZWFuLmphcgotCi1qYXZhIC1jbGFzc3BhdGggJWNwJSB4bWxiZWFucy5hcGFjaGUub3JnLnRvb2wuU2NoZW1hQ29weSAlKgotCi06ZG9uZQpkaWZmIC0tZ2l0IGEvdjIveGtpdC9iaW4vc2Rvd25sb2FkIGIvdjIveGtpdC9iaW4vc2Rvd25sb2FkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzlhZjc1Li4wMDAwMDAwCi0tLSBhL3YyL3hraXQvYmluL3Nkb3dubG9hZAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotIyEvYmluL3NoCi0KLWNwPQotY3A9JGNwOiRYTUxCRUFORElSL3hiZWFuLmphcgotCi1qYXZhIC1jbGFzc3BhdGggJGNwIHhtbC5hcGFjaGUub3JnLnRvb2wuU2NoZW1hUmVzb3VyY2VNYW5hZ2VyICQqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdjIveGtpdC9iaW4vc2Rvd25sb2FkLmNtZCBiL3YyL3hraXQvYmluL3Nkb3dubG9hZC5jbWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MGFhZGIuLjAwMDAwMDAKLS0tIGEvdjIveGtpdC9iaW4vc2Rvd25sb2FkLmNtZAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotQGVjaG8gb2ZmCi0KLXNldCBjcD0KLXNldCBjcD0lY3AlOyVYTUxCRUFORElSJVx4YmVhbi5qYXIKLQotamF2YSAtY2xhc3NwYXRoICVjcCUgeG1sLmFwYWNoZS5vcmcudG9vbC5TY2hlbWFSZXNvdXJjZU1hbmFnZXIgJSoKLQotOmRvbmUKZGlmZiAtLWdpdCBhL3YyL3hraXQvYmluL3NmYWN0b3IgYi92Mi94a2l0L2Jpbi9zZmFjdG9yCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjA0ZDgwLi4wMDAwMDAwCi0tLSBhL3YyL3hraXQvYmluL3NmYWN0b3IKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMhL2Jpbi9zaAotCi1jcD0KLWNwPSRjcDokWE1MQkVBTkRJUi94YmVhbi5qYXIKLQotamF2YSAtY2xhc3NwYXRoICRjcCB4bWwuYXBhY2hlLm9yZy50b29sLkZhY3RvckltcG9ydHMgJCoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92Mi94a2l0L2Jpbi9zZmFjdG9yLmNtZCBiL3YyL3hraXQvYmluL3NmYWN0b3IuY21kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmQyMjBjLi4wMDAwMDAwCi0tLSBhL3YyL3hraXQvYmluL3NmYWN0b3IuY21kCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotQHJlbSBGYWN0b3JzIG92ZXJsYXBwaW5nIHNjaGVtYXMgaW50byBzY2hlbWFzIHRoYXQgdXNlIGltcG9ydHMKLQotQGVjaG8gb2ZmCi0KLXNldCBjcD0KLXNldCBjcD0lY3AlOyVYTUxCRUFORElSJVx4YmVhbi5qYXIKLQotamF2YSAtY2xhc3NwYXRoICVjcCUgeG1sLmFwYWNoZS5vcmcudG9vbC5GYWN0b3JJbXBvcnRzICUqCi0KLTpkb25lCmRpZmYgLS1naXQgYS92Mi94a2l0L2Jpbi92YWxpZGF0ZSBiL3YyL3hraXQvYmluL3ZhbGlkYXRlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGEwMWY3Li4wMDAwMDAwCi0tLSBhL3YyL3hraXQvYmluL3ZhbGlkYXRlCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotIyEvYmluL3NoCi0jCi0jIEluc3RhbmNlIFZhbGlkYXRvcgotIwotIyBWYWxpZGF0ZXMgYW4gaW5zdGFuY2UgYWdhaW5zdCBhIHNjaGVtYS4KLQotY3A9Ci1jcD0kY3A6JFhNTEJFQU5ESVIveGJlYW4uamFyCi0KLWphdmEgLWNsYXNzcGF0aCAkY3AgeG1sLmFwYWNoZS5vcmcudG9vbC5JbnN0YW5jZVZhbGlkYXRvciAkKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3YyL3hraXQvYmluL3ZhbGlkYXRlLmNtZCBiL3YyL3hraXQvYmluL3ZhbGlkYXRlLmNtZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVkMTNlOS4uMDAwMDAwMAotLS0gYS92Mi94a2l0L2Jpbi92YWxpZGF0ZS5jbWQKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1AcmVtIEluc3RhbmNlIFZhbGlkYXRvcgotQHJlbQotQHJlbSBWYWxpZGF0ZXMgYW4gaW5zdGFuY2UgYWdhaW5zdCBhIHNjaGVtYS4KLQotQGVjaG8gb2ZmCi0KLXNldCBjcD0KLXNldCBjcD0lY3AlOyVYTUxCRUFORElSJVx4YmVhbi5qYXIKLQotamF2YSAtY2xhc3NwYXRoICVjcCUgeG1sLmFwYWNoZS5vcmcudG9vbC5JbnN0YW5jZVZhbGlkYXRvciAlKgotCi06ZG9uZQpkaWZmIC0tZ2l0IGEvdjIveGtpdC9iaW4veHByZXR0eSBiL3YyL3hraXQvYmluL3hwcmV0dHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyZDNjMzYuLjAwMDAwMDAKLS0tIGEvdjIveGtpdC9iaW4veHByZXR0eQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotIyEvYmluL3NoCi0KLWNwPQotY3A9JGNwOiRYTUxCRUFORElSL3hiZWFuLmphcgotCi1qYXZhIC1jbGFzc3BhdGggJGNwIHhtbC5hcGFjaGUub3JnLnRvb2wuUHJldHR5UHJpbnRlciAkKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3YyL3hraXQvYmluL3hwcmV0dHkuY21kIGIvdjIveGtpdC9iaW4veHByZXR0eS5jbWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNzkwZDguLjAwMDAwMDAKLS0tIGEvdjIveGtpdC9iaW4veHByZXR0eS5jbWQKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLUBlY2hvIG9mZgotCi1zZXQgY3A9Ci1zZXQgY3A9JWNwJTslWE1MQkVBTkRJUiVceGJlYW4uamFyCi0KLWphdmEgLWNsYXNzcGF0aCAlY3AlIHhtbC5hcGFjaGUub3JnLnRvb2wuUHJldHR5UHJpbnRlciAlKgpkaWZmIC0tZ2l0IGEvdjIveGtpdC9iaW4veHNkdHJlZSBiL3YyL3hraXQvYmluL3hzZHRyZWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ZjEzNjIuLjAwMDAwMDAKLS0tIGEvdjIveGtpdC9iaW4veHNkdHJlZQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotIyEvYmluL3NoCi0KLWNwPQotY3A9JGNwOiRYTUxCRUFORElSL3hiZWFuLmphcgotCi1qYXZhIC1jbGFzc3BhdGggJGNwIHhtbC5hcGFjaGUub3JnLnRvb2wuVHlwZUhpZXJhcmNoeVByaW50ZXIgJCoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92Mi94a2l0L2Jpbi94c2R0cmVlLmNtZCBiL3YyL3hraXQvYmluL3hzZHRyZWUuY21kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDM2ZDViLi4wMDAwMDAwCi0tLSBhL3YyL3hraXQvYmluL3hzZHRyZWUuY21kCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1AZWNobyBvZmYKLQotc2V0IGNwPQotc2V0IGNwPSVjcCU7JVhNTEJFQU5ESVIlXHhiZWFuLmphcgotCi1qYXZhIC1jbGFzc3BhdGggJWNwJSB4bWwuYXBhY2hlLm9yZy50b29sLlR5cGVIaWVyYXJjaHlQcmludGVyICUqCmRpZmYgLS1naXQgYS92Mi94a2l0L2Jpbi94c3RjIGIvdjIveGtpdC9iaW4veHN0YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNlYzMxYi4uMDAwMDAwMAotLS0gYS92Mi94a2l0L2Jpbi94c3RjCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jIS9iaW4vc2gKLQotY3A9Ci1jcD0kY3A6JFhNTEJFQU5ESVIveGJlYW4uamFyCi0KLWphdmEgLWNsYXNzcGF0aCAkY3AgeG1sLmFwYWNoZS5vcmcudG9vbC5YU1RDVGVzdGVyICQqClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdjIveGtpdC9iaW4veHN0Yy5jbWQgYi92Mi94a2l0L2Jpbi94c3RjLmNtZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc0MmUxYS4uMDAwMDAwMAotLS0gYS92Mi94a2l0L2Jpbi94c3RjLmNtZAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotQGVjaG8gb2ZmCi0KLXNldCBjcD0KLXNldCBjcD0lY3AlOyVYTUxCRUFORElSJVx4YmVhbi5qYXIKLQotamF2YSAtY2xhc3NwYXRoICVjcCUgeG1sLmFwYWNoZS5vcmcudG9vbC5YU1RDVGVzdGVyICUqCmRpZmYgLS1naXQgYS92Mi94a2l0L3NjaGVtYXMvY3ljbG9uZS9DeWNsb25lT3JnYW5pemF0aW9uUHJvZmlsZS54c2QgYi92Mi94a2l0L3NjaGVtYXMvY3ljbG9uZS9DeWNsb25lT3JnYW5pemF0aW9uUHJvZmlsZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxMzE0YzAuLjAwMDAwMDAKLS0tIGEvdjIveGtpdC9zY2hlbWFzL2N5Y2xvbmUvQ3ljbG9uZU9yZ2FuaXphdGlvblByb2ZpbGUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNzM0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuY3ljbG9uZWNvbW1lcmNlLmNvbS9TY2hlbWFzLzIwMDEvMDgvY29wIiB4bWxucz0iaHR0cDovL3d3dy5jeWNsb25lY29tbWVyY2UuY29tL1NjaGVtYXMvMjAwMS8wOC9jb3AiIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCIgYXR0cmlidXRlRm9ybURlZmF1bHQ9InVucXVhbGlmaWVkIj4KLQk8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiIHNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxkc2lnLWNvcmUveG1sZHNpZy1jb3JlLXNjaGVtYS54c2QiLz4KLQk8eHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6ZG9jdW1lbnRhdGlvbj5UaGlzIHNjaGVtYSByZXByZXNlbnRzIG9yZ2FuaXphdGlvbiBkZXRhaWxzIHJlcXVpcmVkIGZvciB0cmFkaW5nLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JPC94c2Q6YW5ub3RhdGlvbj4KLQk8IS0tR2VuZXJhbCBkZWZpbml0aW9ucyB1c2VkIHdpdGhpbiB0aGUgcmVzdCBvZiB0aGUgc2NoZW1hLi0tPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJDb21tZW50Ij4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkEgZnJlZWZvcm0gdGV4dCBmaWVsZCB0aGF0IGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgZGVzY3JpcHRpdmUgaW5mb3JtYXRpb24gYWJvdXQgYW4gZWxlbWVudC48L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzaW1wbGVDb250ZW50PgotCQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJsYW5nIiB0eXBlPSJ4c2Q6bGFuZ3VhZ2UiIGRlZmF1bHQ9ImVuIi8+Ci0JCQkJPC94c2Q6ZXh0ZW5zaW9uPgotCQkJPC94c2Q6c2ltcGxlQ29udGVudD4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSWRlbnRpZmllciI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5BbiBpZCBmb3IgYW4gZWxlbWVudC4gIENhbid0IHVzZSB4c2Q6SUQgYmVjYXVzZSBpdCB3b24ndCBhbGxvdyB0aGVtIHRvIGJlZ2luIHdpdGggYSBudW1iZXIuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIi8+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iSWRlbnRpZmllclJlZiI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5BIHJlZmVyZW5jZSB0byBhbiBJZGVudGlmaWVyLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iSWRlbnRpZmllciIvPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Ik9yZ2FuaXphdGlvbklkIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPlRoZSBzZXJ2ZXIncyB1bmlxdWUgaW50ZXJuYWwgaWRlbnRpZmllciBmb3IgYW4gb3JnYW5pemF0aW9uLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iSWRlbnRpZmllciI+Ci0JCQk8eHNkOm1pbkxlbmd0aCB2YWx1ZT0iMSIvPgotCQk8L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJDb21tdW5pdHlJZCI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5UaGUgc2VydmVyJ3MgdW5pcXVlIGludGVybmFsIGlkZW50aWZpZXIgZm9yIGEgY29tbXVuaXR5LjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iSWRlbnRpZmllciI+Ci0JCQk8eHNkOm1pbkxlbmd0aCB2YWx1ZT0iMSIvPgotCQk8L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJDb21tdW5pdHkiIG5pbGxhYmxlPSJ0cnVlIj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkNvbW11bml0eU5hbWUiIHR5cGU9InhzZDpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJCcm9rZXJJZCIgdHlwZT0iT3JnYW5pemF0aW9uSWQiIG1pbk9jY3Vycz0iMCIvPgotCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJjb21tdW5pdHlJZCIgdHlwZT0iQ29tbXVuaXR5SWQiIHVzZT0icmVxdWlyZWQiLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8IS0tVGhlIGZvbGxvd2luZyBkZWZpbmVzIHN0dWZmIGZvciB0aGUgQWRtaW5pc3RyYXRpdmUgSW5mb3JtYXRpb24tLT4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iT3JnYW5pemF0aW9uTmFtZSI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5UaGUgbmFtZSBvZiB0aGUgb3JnYW5pemF0aW9uLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iUGVyc29uTmFtZSI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5UaGUgbmFtZSBvZiBhIHBlcnNvbjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQkJPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyIvPgotCQkJPC94c2Q6c2ltcGxlQ29udGVudD4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlBob25lIiBtaXhlZD0idHJ1ZSI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5BIHBob25lIG51bWJlci48L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8L3hzZDpleHRlbnNpb24+Ci0JCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkVtYWlsIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkFuIGVtYWlsIGFkZHJlc3MuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIi8+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iQ29udGFjdCI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5JbmZvcm1hdGlvbiBhYm91dCBhIHBlcnNvbi48L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJDb21tZW50IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0iUGVyc29uTmFtZSIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJUaXRsZSIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkRlcGFydG1lbnQiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJFbWFpbCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5FbWFpbCBhZGRyZXNzLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQkJCQkJPHhzZDpleHRlbnNpb24gYmFzZT0iRW1haWwiPgotCQkJCQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQkJCQkJPC94c2Q6ZXh0ZW5zaW9uPgotCQkJCQkJPC94c2Q6c2ltcGxlQ29udGVudD4KLQkJCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iUGhvbmUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJPHhzZDpzaW1wbGVDb250ZW50PgotCQkJCQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9IlBob25lIi8+Ci0JCQkJCQk8L3hzZDpzaW1wbGVDb250ZW50PgotCQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCQk8L3hzZDplbGVtZW50PgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IlBvc3RhbEFkZHJlc3MiIG1pbk9jY3Vycz0iMCIvPgotCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJjb250YWN0SWQiIHR5cGU9IklkZW50aWZpZXIiIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InR5cGUiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iQ29udGFjdHMiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+Q29sbGVjdGlvbiBvZiBDb250YWN0IGFuZCBDb250YWN0UmVmcy48L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJDb250YWN0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iUG9zdGFsQWRkcmVzcyI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5Qb3N0YWwgbWFpbGluZyBhZGRyZXNzLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IkNvbW1lbnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iU3RyZWV0IiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPlRoZSBzdHJlZXQgYWRkcmVzcy4gIFRoaXMgbWF5IHJlc29sdmUgdG8gd2hhdCBtYXkgYmUgaW50ZXJwcmV0ZWQgYXMgbXVsdGlwbGUgbGluZXMuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQk8L3hzZDplbGVtZW50PgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJDaXR5IiB0eXBlPSJ4c2Q6c3RyaW5nIiBtaW5PY2N1cnM9IjAiPgotCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+Q2l0eS48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IlN0YXRlcHJvdiIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIj4KLQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPlN0YXRlIG9yIHByb3ZpbmNlIGRlcGVuZGluZyBvbiB0aGUgY291bnRyeS48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IlBvc3RhbENvZGUiIHR5cGU9InhzZDpzdHJpbmciPgotCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+UG9zdGFsIG9yIHppcCBjb2RlLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iQ291bnRyeSIgdHlwZT0ieHNkOnN0cmluZyIgZGVmYXVsdD0iVVMiPgotCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+Q291bnRyeSBjb2RlLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJPC94c2Q6ZWxlbWVudD4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJSb3V0aW5nSWRUeXBlIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPlRoZSB0eXBlIG9mIHJvdXRpbmcgaWRlbnRpZmllciwgbGlrZSBEVU5TLCBFREksIGV0Yy48L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRURJIi8+Ci0JCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFRElGQUNUIi8+Ci0JCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJEVU5TIi8+Ci0JCTwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0JPHhzZDplbGVtZW50IG5hbWU9IlJvdXRpbmdJZCI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5BbiBpZGVudGlmaWVyIHN1Y2ggYXMgRFVOUyBvciBFREkgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSBhIGNvbXBhbnkgZm9yIHRyYWRpbmcuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6c2ltcGxlQ29udGVudD4KLQkJCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0idHlwZSIgdHlwZT0iUm91dGluZ0lkVHlwZSIgdXNlPSJyZXF1aXJlZCIvPgotCQkJCTwveHNkOmV4dGVuc2lvbj4KLQkJCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDplbGVtZW50IG5hbWU9IkNlcnRpZmljYXRlIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkluZm9ybWF0aW9uIGFib3V0IGEgY2VydGlmaWNhdGUuIFRoZSBpbml0aWFsIHZlcnNpb24gb2YgZWFjaCBJbnRlcmNoYW5nZSBwcm9kdWN0IG9ubHkgc3VwcG9ydCB0aGUgZHM6S2V5SW5mby9kczpYNTA5RGF0YSBzZWN0aW9uIGluY2x1ZGluZyBkczpYNTA5SXNzdWVyU2VyaWFsIGFuZCBYNTA5Q2VydGlmaWNhdGUuICBBbnkgb3RoZXIgZWxlbWVudHMgdXNlZCB3aWxsIGJlIGlnbm9yZWQsIGFuZCBpZiBvbmUgb2YgdGhlIHR3byBzdXBwb3J0ZWQgZWxlbWVudHMgaXMgbm90IGluY2x1ZGVkIHRoZSBjZXJ0aWZpY2F0ZSB3aWxsIGJlIGNvbnNpZGVyZWQgaW52YWxpZC48L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJkczpLZXlJbmZvIi8+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImNlcnRJZCIgdHlwZT0iSWRlbnRpZmllciIgdXNlPSJyZXF1aXJlZCIvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJDZXJ0aWZpY2F0ZXRSZWYiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+QSByZWZlcmVuY2UgdG8gYSBDZXJ0aWZpY2F0ZS48L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iY2VydElkIiB0eXBlPSJJZGVudGlmaWVyUmVmIiB1c2U9InJlcXVpcmVkIi8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDplbGVtZW50IG5hbWU9IkNlcnRpZmljYXRlcyI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5Db2xsZWN0aW9uIG9mIENlcnRpZmljYXRlcy48L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJDZXJ0aWZpY2F0ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJwcmVmZXJyZWRFbmNyeXB0aW9uQ2VydElkIiB0eXBlPSJJZGVudGlmaWVyUmVmIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDplbGVtZW50IG5hbWU9IkFkbWluaXN0cmF0aXZlSW5mbyI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5JbmZvcm1hdGlvbiBkZXNjcmliaW5nIGFuIG9yZ2FuaXphdGlvbiB1c2VmdWwgdG8gaHVtYW5zLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9Ik9yZ2FuaXphdGlvbk5hbWUiLz4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJQb3N0YWxBZGRyZXNzIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJDb250YWN0cyIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8IS0tVGhlIGZvbGxvd2luZyBkZWZpbmVzIHN0dWZmIGZvciBUcmFuc3BvcnRzLS0+Ci0JPHhzZDplbGVtZW50IG5hbWU9IlVzZXJuYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPlVzZXJuYW1lIHVzZWQgdG8gYWNjZXNzIGEgcmVzb3VyY2UuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJQYXNzd29yZCI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5QYXNzd29yZCB1c2VkIHRvIGFjY2VzcyBhIHNlY3VyZSByZXNvdWNlLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQkJPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImVuY3J5cHRlZCIgdHlwZT0ieHNkOmJvb2xlYW4iIHVzZT0icmVxdWlyZWQiLz4KLQkJCQk8L3hzZDpleHRlbnNpb24+Ci0JCQk8L3hzZDpzaW1wbGVDb250ZW50PgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJJUEFkZHJlc3MiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+SW50ZXJuZXQgUHJvdG9jYWwgYWRkcmVzcywgZXg6ICAxMi4zNC41Ni43ODwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQk8eHNkOnBhdHRlcm4gdmFsdWU9IigoWzAtMV0/WzAtOV0/WzAtOV18MlswLTRdWzAtOV18MjVbMC05XSl7M30oLlswLTFdP1swLTldP1swLTldfDJbMC00XVswLTldfDI1WzAtNV0pKSI+Ci0JCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+VGhpcyBtZXNzIGp1c3QgcmVzdHJpY3RzIHRoZSB2YWx1ZSB0byBzdGFuZGFyZCBJUCBhZGRyZXNzZXMgd2hlcmUgZWFjaCBvZiBmb3VyIG9jdGV0cyBjYW4gaGF2ZSB2YWx1ZXMgMC0yNTUuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJPC94c2Q6cGF0dGVybj4KLQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iRE5TQWRkcmVzcyI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5Eb21haW4gTmFtZSBTZXJ2ZXIgYWRkcmVzcywgZXg6IHd3dy5jeWNsb25lY29tbWVyY2UuY29tPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIi8+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iU29ja2V0U2VjdXJpdHlUeXBlIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkFVVEhFTlRJQ0FURUQgb3IgQU5PTllNT1VTPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFVVEhFTlRJQ0FURUQiLz4KLQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFOT05ZTU9VUyIvPgotCQk8L3hzZDpyZXN0cmljdGlvbj4KLQk8L3hzZDpzaW1wbGVUeXBlPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJIb3N0Ij4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkEgaG9zdCBhZGRyZXNzLCBlaXRoZXIgaW4gRE5TIG9yIElQLCBmb3IgYSBzZXJ2ZXIuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpzaW1wbGVUeXBlPgotCQkJPHhzZDp1bmlvbiBtZW1iZXJUeXBlcz0iRE5TQWRkcmVzcyBJUEFkZHJlc3MiLz4KLQkJPC94c2Q6c2ltcGxlVHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJQb3J0Ij4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPlNvY2tldCBwb3J0IG51bWJlci48L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOnNpbXBsZVR5cGU+Ci0JCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDppbnRlZ2VyIj4KLQkJCQk8eHNkOm1pbkluY2x1c2l2ZSB2YWx1ZT0iMSIvPgotCQkJCTx4c2Q6bWF4SW5jbHVzaXZlIHZhbHVlPSI2NTAwMCIvPgotCQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JCTwveHNkOnNpbXBsZVR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iRGlyZWN0b3J5Ij4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkEgZGlyZWN0b3J5IG9uIGEgZmlsZSBzeXN0ZW0gb3Igc2VydmVyIHN1Y2ggYXMgRlRQLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyIvPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkpNU0NvbnN1bWVyVHlwZSI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5Gb3IgSk1TLCBlaXRoZXIgYSBRdWV1ZSBvciBUb3BpYy48L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUVVFVUUiLz4KLQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRPUElDIi8+Ci0JCTwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9IkZpcmV3YWxsQXV0aGVudGljYXRpb25UeXBlIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkVpdGhlciBTL0tleSBvciBDbGVhclRleHQ8L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU0tFWSIvPgotCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ0xFQVJURVhUIi8+Ci0JCTwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0JPHhzZDplbGVtZW50IG5hbWU9IkZpcmV3YWxsIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkluZm9ybWF0aW9uIGFib3V0IGEgdHJhbnNwb3J0IHNlcnZlcidzIGZpcmV3YWxsLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9Ikhvc3QiLz4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJQb3J0Ii8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkF1dGhlbnRpY2F0aW9uIiBtaW5PY2N1cnM9IjAiPgotCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+T3B0aW9uYWwgUy9LZXkgb3IgQ2xlYXIgdGV4dCBhdXRoZW50aWNhdGlvbi48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJVc2VybmFtZSIvPgotCQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9IlBhc3N3b3JkIi8+Ci0JCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InR5cGUiIHR5cGU9IkZpcmV3YWxsQXV0aGVudGljYXRpb25UeXBlIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iU29ja2V0U2VjdXJpdHkiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+VHlwZSBvZiBTU0wgc2VjdXJpdHkuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IkNlcnRpZmljYXRldFJlZiIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InR5cGUiIHR5cGU9IlNvY2tldFNlY3VyaXR5VHlwZSIgdXNlPSJyZXF1aXJlZCIvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iVHJhbnNwb3J0Ij4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkJhc2UgZGVmaW5pdGlvbiBmb3IgYSB0cmFkaW5nIHRyYW5zcG9ydCBzZXJ2ZXIuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9IkNvbW1lbnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJTY2hlZHVsZXMiIG1pbk9jY3Vycz0iMCI+Ci0JCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+Q29sbGVjdGlvbiBvZiBzY2hlZHVsZXMuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0ic2NoZWR1bGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPlBlcmlvZCBvZiB0aW1lIGluY2x1ZGluZyBhIHN0YXJ0IGFuZCBzdG9wIHRpbWUgcmVwcmVzZW50aW5nIHRoZSBwZXJpb2Qgb2YgdGltZSB0aGUgdHJhbnNwb3J0IGlzIGF2YWlsYWJsZS48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ic3RhcnRUaW1lIiB0eXBlPSJ4c2Q6dGltZSIgdXNlPSJyZXF1aXJlZCIvPgotCQkJCQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJzdG9wVGltZSIgdHlwZT0ieHNkOnRpbWUiIHVzZT0icmVxdWlyZWQiLz4KLQkJCQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJPC94c2Q6ZWxlbWVudD4KLQkJPC94c2Q6c2VxdWVuY2U+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9InRyYW5zcG9ydElkIiB0eXBlPSJJZGVudGlmaWVyIiB1c2U9Im9wdGlvbmFsIi8+Ci0JPC94c2Q6Y29tcGxleFR5cGU+Ci0JPHhzZDplbGVtZW50IG5hbWU9IlRyYW5zcG9ydFJlZiI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5BIHJlZmVyZW5jZSB0byBhIFRyYW5zcG9ydCBkZWZpbmVkIGVsc2V3aGVyZS48L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0idHJhbnNwb3J0SWQiIHR5cGU9IklkZW50aWZpZXJSZWYiIHVzZT0icmVxdWlyZWQiLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0cyI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5Db2xsZWN0aW9uIG9mIFRyYW5zcG9ydHMgZGVmaW50aW9ucy48L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJGaWxlVHJhbnNwb3J0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0iRlRQVHJhbnNwb3J0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0iSFRUUFRyYW5zcG9ydCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IkhUVFBUcmFuc3BvcnRfQ0kiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJTTVRQVHJhbnNwb3J0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0iU01UUFRyYW5zcG9ydF9DSSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IkpNU1RyYW5zcG9ydCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9Ik1RU2VyaWVzVHJhbnNwb3J0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InByZWZlcnJlZFRyYW5zcG9ydFJlZiIgdHlwZT0iSWRlbnRpZmllclJlZiIgdXNlPSJvcHRpb25hbCIvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJGaWxlVHJhbnNwb3J0Ij4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkZpbGUgc3lzdGVtIHRyYW5zcG9ydCBkZWZpbml0aW9uLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmNvbXBsZXhDb250ZW50PgotCQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9IlRyYW5zcG9ydCI+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iRGlyZWN0b3J5Ij4KLQkJCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5UaGUgZGlyZWN0b3J5IG9uIHRoZSBmaWxlIHN5c3RlbS48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJCQkJPHhzZDpzaW1wbGVDb250ZW50PgotCQkJCQkJCQkJPHhzZDpleHRlbnNpb24gYmFzZT0iRGlyZWN0b3J5Ij4KLQkJCQkJCQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJpc0xvY2FsIiB0eXBlPSJ4c2Q6Ym9vbGVhbiIvPgotCQkJCQkJCQkJPC94c2Q6ZXh0ZW5zaW9uPgotCQkJCQkJCQk8L3hzZDpzaW1wbGVDb250ZW50PgotCQkJCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6ZXh0ZW5zaW9uPgotCQkJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDplbGVtZW50IG5hbWU9IkZUUFRyYW5zcG9ydCI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5GaWxlIFRyYW5zZmVyIFByb3RvY29sIHRyYW5zcG9ydCBkZWZpbml0aW9uLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmNvbXBsZXhDb250ZW50PgotCQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9IlRyYW5zcG9ydCI+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJIb3N0Ii8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJQb3J0Ii8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJVc2VybmFtZSIvPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0iUGFzc3dvcmQiLz4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJUZW1wRGlyIiB0eXBlPSJEaXJlY3RvcnkiPgotCQkJCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPkRpcmVjdG9yeSBvbiB0aGUgRlRQIHNlcnZlciB3aGVyZSBpbmNvbWluZyBkb2N1bWVudHMgYXJlIHRlbXBvcmFyaWx5IHN0b3JlZCBhcyB0aGV5IGFyZSB0cmFuc2ZlcnJlZC48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCQk8L3hzZDplbGVtZW50PgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IlBpY2t1cERpciIgdHlwZT0iRGlyZWN0b3J5Ij4KLQkJCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5EaXJlY3Rvcnkgd2hlcmUgdGhlIGRvY3VtZW50cyBhcmUgbW92ZWQgYWZ0ZXIgaGF2aW5nIGJlZW4gdHJhbnNmZXJyZWQgdG8gdGhlIFRlbXBEaXIuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJUcmFuc2ZlclR5cGUiIGRlZmF1bHQ9IkJJTkFSWSI+Ci0JCQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+QklOQVJZIG9yIEFTQ0lJPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQkJCTx4c2Q6c2ltcGxlVHlwZT4KLQkJCQkJCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQkJCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFTQ0lJIi8+Ci0JCQkJCQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCSU5BUlkiLz4KLQkJCQkJCQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JCQkJCQkJPC94c2Q6c2ltcGxlVHlwZT4KLQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iTW9kZSIgZGVmYXVsdD0iUGFzc2l2ZSI+Ci0JCQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+UG9ydCBvciBQYXNzaXZlLiAgUGFzc2l2ZSBtZWFucyB0aGUgRlRQIHNlcnZlciBzZWxlY3RzIHRoZSBkYXRhIHBvcnQgZm9yIHRoZSBGVFAgZGF0YSB0cmFuc2Zlci4gUG9ydCBtZWFucyB0aGUgRlRQIGNsaWVudCBzZWxlY3RzIHRoZSBkYXRhIHBvcnQgZm9yIHRoZSBGVFAgZGF0YSB0cmFuc2Zlci48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCQkJPHhzZDpzaW1wbGVUeXBlPgotCQkJCQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCQkJCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUG9ydCIvPgotCQkJCQkJCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUGFzc2l2ZSIvPgotCQkJCQkJCQk8L3hzZDpyZXN0cmljdGlvbj4KLQkJCQkJCQk8L3hzZDpzaW1wbGVUeXBlPgotCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9IkZpcmV3YWxsIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9IlNvY2tldFNlY3VyaXR5IiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6ZXh0ZW5zaW9uPgotCQkJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDplbGVtZW50IG5hbWU9IkhUVFBUcmFuc3BvcnQiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+SHlwZXJUZXh0IFRyYW5zZmVyIFByb3RvY29sIGRlZmluaXRpb24uPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQkJPHhzZDpleHRlbnNpb24gYmFzZT0iVHJhbnNwb3J0Ij4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJVUkwiIHR5cGU9InhzZDphbnlVUkkiLz4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9IlVzZXJuYW1lIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9IlBhc3N3b3JkIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJNZXRob2QiIGRlZmF1bHQ9IlBPU1QiPgotCQkJCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPkVpdGhlciBQVVQgb3IgUE9TVCB0aGF0IHRoZSBjbGllbnQgc2hvdWxkIHVzZSB0byBwdXNoIGRvY3VlbW50cyB0byB0aGUgc2VydmVyLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQk8eHNkOnNpbXBsZVR5cGU+Ci0JCQkJCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQkJCQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQVVQiLz4KLQkJCQkJCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBPU1QiLz4KLQkJCQkJCQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JCQkJCQkJPC94c2Q6c2ltcGxlVHlwZT4KLQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iRG91YmxlTWltZVdyYXBwZWQiIHR5cGU9InhzZDpib29sZWFuIiBkZWZhdWx0PSJmYWxzZSI+Ci0JCQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+U29tZSBzZXJ2ZXJzIHdpbGwgc3RyaXAgb2ZmIE1JTUUgd3JhcHBpbmcgb2YgYSBkb2N1bWVudCByZXF1aXJpbmcgdGhhdCB0aGUgZG9jdW1lbnQgYmUgTUlNRSB3cmFwcGVkIHR3aWNlLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJGaXJld2FsbCIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJTb2NrZXRTZWN1cml0eSIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCTwveHNkOmV4dGVuc2lvbj4KLQkJCTwveHNkOmNvbXBsZXhDb250ZW50PgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJIVFRQVHJhbnNwb3J0X0NJIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkN5Y2xvbmUgSW50ZXJjaGFuZ2UgRW50ZXJwcmlzZSdzIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgSFRUUC48L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpjb21wbGV4Q29udGVudD4KLQkJCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJUcmFuc3BvcnQiPgotCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IlVSTCIgdHlwZT0ieHNkOmFueVVSSSIvPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0iRmlyZXdhbGwiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0iU29ja2V0U2VjdXJpdHkiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpleHRlbnNpb24+Ci0JCQk8L3hzZDpjb21wbGV4Q29udGVudD4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iU01UUFRyYW5zcG9ydCI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5TaW1wbGUgTWFpbCBUcmFuc3BvcnQgUHJvdG9jb2wgdHJhbnNwb3J0IGRlZmluaXRpb24uPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQkJPHhzZDpleHRlbnNpb24gYmFzZT0iVHJhbnNwb3J0Ij4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9Ikhvc3QiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0iUG9ydCIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJVc2VybmFtZSIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJQYXNzd29yZCIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iUmVjaXBpZW50IiB0eXBlPSJFbWFpbCI+Ci0JCQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+RW1haWwgYWRkcmVzcyBvZiB0aGUgcmVjaXBpZW50LjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iSXNDb21wbGlhbnQiIHR5cGU9InhzZDpib29sZWFuIiBkZWZhdWx0PSJ0cnVlIj4KLQkJCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5TZXQgdG8gZmFsc2UgZm9yIFNNVFAgaW1wbGVtZW50YXRpb25zIHRoYXQgZG8gbm90IGxlYXZlIHRoZSBNSU1FIHdyYXBwaW5nIGluIHRhY3QuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9IkZpcmV3YWxsIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9IlNvY2tldFNlY3VyaXR5IiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6ZXh0ZW5zaW9uPgotCQkJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDplbGVtZW50IG5hbWU9IlNNVFBUcmFuc3BvcnRfQ0kiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+Q3ljbG9uZSBJbnRlcmNoYW5nZSBFbnRlcnByaXNlJ3Mgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBTTVRQLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmNvbXBsZXhDb250ZW50PgotCQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9IlRyYW5zcG9ydCI+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJIb3N0IiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9IlBvcnQiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IlJlY2lwaWVudCIgdHlwZT0iRW1haWwiPgotCQkJCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPkVtYWlsIGFkZHJlc3Mgb2YgdGhlIHJlY2lwaWVudC48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCQk8L3hzZDplbGVtZW50PgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0iRmlyZXdhbGwiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQkJPHhzZDplbGVtZW50IHJlZj0iU29ja2V0U2VjdXJpdHkiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpleHRlbnNpb24+Ci0JCQk8L3hzZDpjb21wbGV4Q29udGVudD4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iSk1TVHJhbnNwb3J0Ij4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkphdmEgTWVzc2FnZSBTZXJ2aWNlIChKTVMpIHRyYW5zcG9ydCBkZWZpbml0aW9uLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmNvbXBsZXhDb250ZW50PgotCQkJCTx4c2Q6ZXh0ZW5zaW9uIGJhc2U9IlRyYW5zcG9ydCI+Ci0JCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJVc2VybmFtZSIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJQYXNzd29yZCIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iQ29ubmVjdGlvbkZhY3RvcnkiIHR5cGU9InhzZDpzdHJpbmciPgotCQkJCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPlRoZSBuYW1lIG9mIHRoZSBjb25uZWN0aW9uIGZhY3RvcnkuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJDb25zdW1lciI+Ci0JCQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+VGhlIG5hbWUgb2YgdGhlIFF1ZXVlIG9yIFRvcGljLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQkJCQkJCQk8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQkJCQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB0eXBlPSJKTVNDb25zdW1lclR5cGUiIGRlZmF1bHQ9IlFVRVVFIi8+Ci0JCQkJCQkJCQk8L3hzZDpleHRlbnNpb24+Ci0JCQkJCQkJCTwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQkJCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQk8L3hzZDplbGVtZW50PgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IkpOREkiPgotCQkJCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPkphdmEgTmFtaW5nIGFuZCBEaXJlY3RvcnkgSW50ZXJmYWNlIGRlZmludGlvbiB0byBsb2NhdGUgdGhlIEpNUyBwcm92aWRlci48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJMb2NhdGlvbiIgdHlwZT0ieHNkOmFueVVSSSI+Ci0JCQkJCQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+VGhlIFVSSSBsb2NhdGlvbiBvZiB0aGUgSk1TIHNlcnZlci48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCQk8L3hzZDplbGVtZW50PgotCQkJCQkJCQkJPHhzZDplbGVtZW50IHJlZj0iVXNlcm5hbWUiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQkJCQkJPHhzZDplbGVtZW50IHJlZj0iUGFzc3dvcmQiIG1pbk9jY3Vycz0iMCIvPgotCQkJCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IkNvbnRleHRGYWN0b3J5IiB0eXBlPSJ4c2Q6c3RyaW5nIj4KLQkJCQkJCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5UaGUgbmFtZSBvZiB0aGUgSk5ESSBjb250ZXh0IGZhY3RvcnkuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQk8L3hzZDplbGVtZW50PgotCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQk8L3hzZDpleHRlbnNpb24+Ci0JCQk8L3hzZDpjb21wbGV4Q29udGVudD4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iTVFTZXJpZXNUcmFuc3BvcnQiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+SUJNJ3MgTVEgU2VyaWVzPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCQkJPHhzZDpleHRlbnNpb24gYmFzZT0iVHJhbnNwb3J0Ij4KLQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9Ikhvc3QiLz4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9IlBvcnQiLz4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9IlVzZXJuYW1lIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9IlBhc3N3b3JkIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJRdWV1ZU1hbmFnZXIiIHR5cGU9InhzZDpzdHJpbmciLz4KLQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJRdWV1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IkNoYW5uZWwiIHR5cGU9InhzZDpzdHJpbmciLz4KLQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJPC94c2Q6ZXh0ZW5zaW9uPgotCQkJPC94c2Q6Y29tcGxleENvbnRlbnQ+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPCEtLVRoZSBmb2xsb3dpbmcgZGVmaW5lcyBidXNpbmVzcyBwcm90b2NvbCBpbmZvcm1hdGlvbiAtLT4KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IkJ1c2luZXNzUHJvdG9jb2wiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+QmFzZSBkZWZpbml0aW9uIGZvciBhIGJ1c2luZXNzIHByb3RvY29sLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6c2VxdWVuY2U+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJUcmFuc3BvcnRSZWYiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCTwveHNkOnNlcXVlbmNlPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJidXNpbmVzc1Byb3RvY29sSWQiIHR5cGU9IklkZW50aWZpZXIiIHVzZT0icmVxdWlyZWQiLz4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iQnVzaW5lc3NQcm90b2NvbFJlZiI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5BIHJlZmVyZW5jZSB0byBhIGJ1c2luZXNzIHByb3RvY29sIGRlZmluaXRpb24uPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImJ1c2luZXNzUHJvdG9jb2xJZCIgdHlwZT0iSWRlbnRpZmllclJlZiIgdXNlPSJyZXF1aXJlZCIvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJCdXNpbmVzc1Byb3RvY29scyI+Ci0JCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5Db2xsZWN0aW9uIG9mIEJ1c2luZXNzIHByb3RvY29sIGRlZmluaXRpb25zLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmFsbD4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iQVMxUHJvdG9jb2wiIHR5cGU9IkJ1c2luZXNzUHJvdG9jb2wiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJBUzJQcm90b2NvbCIgdHlwZT0iQnVzaW5lc3NQcm90b2NvbCIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IlJvc2V0dGFOZXRQcm90b2NvbCIgdHlwZT0iQnVzaW5lc3NQcm90b2NvbCIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9ImViWE1MUHJvdG9jb2wiIHR5cGU9IkJ1c2luZXNzUHJvdG9jb2wiIG1pbk9jY3Vycz0iMCIvPgotCQkJPC94c2Q6YWxsPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTwhLS1UaGUgZm9sbG93aW5nIGRlZmluZXMgdGhlIHRvcC1sZXZlbCBPcmdhbml6YXRpb25EYXRhLS0+Ci0JPHhzZDplbGVtZW50IG5hbWU9Ik9yZ2FuaXphdGlvblByb2ZpbGUiPgotCQk8eHNkOmFubm90YXRpb24+Ci0JCQk8eHNkOmRvY3VtZW50YXRpb24+QWxsIGluZm9ybWF0aW9uIG5lZWRlZCB0byB0cmFkZSB3aXRoIGFuIG9yZ2FuaXphdGlvbi48L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJDb21tZW50IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0iQWRtaW5pc3RyYXRpdmVJbmZvIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iUm91dGluZ0lkcyIgbWluT2NjdXJzPSIwIj4KLQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPkNvbGxlY3Rpb24gb2YgUm91dGluZ0lkczwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJCTx4c2Q6ZWxlbWVudCByZWY9IlJvdXRpbmdJZCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkJyb2tlcklkIiB0eXBlPSJPcmdhbml6YXRpb25JZCIgbWluT2NjdXJzPSIwIj4KLQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPldpdGhpbiB0aGlzIGNvbW11bml0eSwgdGhpcyBvcmdhbml6YXRpb24gdHJhZGVzIHRocm91Z2ggYSBicm9rZXIgKGh1YikuIFRoaXMgcmVmZXJlbmNlcyBhbm90aGVyIHByb2ZpbGUgd2l0aCB0aGlzIGlkLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iQ29tbXVuaXRpZXMiIG1pbk9jY3Vycz0iMCI+Ci0JCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5Db2xsZWN0aW9uIG9mIGNvbW11bml0aWVzIHRoZSB0cmFkaW5nIHByb2ZpbGUgaXMgYWN0aXZlbHkgYSBtZW1iZXIgb2YuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQkJPHhzZDplbGVtZW50IHJlZj0iQ29tbXVuaXR5IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJUcmFuc3BvcnRzIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJDZXJ0aWZpY2F0ZXMiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IkJ1c2luZXNzUHJvdG9jb2xzIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9Ik9yZ2FuaXphdGlvbklkIiB1c2U9Im9wdGlvbmFsIj4KLQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5UaGUgT3JnYW5pemF0aW9uSWQgZXhpc3RzIGZvciB2YWxpZCBwcm9maWxlcyBleGlzdGluZyB3aXRoaW4gdGhlIHNlcnZlci4gIElmIGEgY2xpZW50IGlzIHNlbmRpbmcgYSBwcm9maWxlIGZvciBhbiBvcmdhbml6YXRpb24gdGhhdCBpcyBub3QgYWxyZWFkeSBpbiB0aGUgc2VydmVyJ3MgcmVwb3NpdG9yeSwgdGhpcyBpZCB3aWxsIG5vdCBiZSBwcmVzZW50IGFzIHRoZSBzZXJ2ZXIgd2lsbCBiZSBhc3NpZ25pbmcgb25lIGZvciBpdC48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQk8L3hzZDphdHRyaWJ1dGU+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci08L3hzZDpzY2hlbWE+CmRpZmYgLS1naXQgYS92Mi94a2l0L3NjaGVtYXMvY3ljbG9uZS9JbnRlcmNoYW5nZVBhcnRuZXJDb25maWcueHNkIGIvdjIveGtpdC9zY2hlbWFzL2N5Y2xvbmUvSW50ZXJjaGFuZ2VQYXJ0bmVyQ29uZmlnLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjE0OWIxZC4uMDAwMDAwMAotLS0gYS92Mi94a2l0L3NjaGVtYXMvY3ljbG9uZS9JbnRlcmNoYW5nZVBhcnRuZXJDb25maWcueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjYxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIGVkaXRlZCB3aXRoIFhNTCBTcHkgdjQuMyBVIChodHRwOi8vd3d3LnhtbHNweS5jb20pIGJ5IEJvYiBLcmllciAoQ3ljbG9uZSBDT21tZXJjZSwgSW5jLikgLS0+Ci08IS0tVzNDIFNjaGVtYSBnZW5lcmF0ZWQgYnkgWE1MIFNweSB2My41IE5UIChodHRwOi8vd3d3LnhtbHNweS5jb20pLS0+Ci08eHNkOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuY3ljbG9uZWNvbW1lcmNlLmNvbS9TY2hlbWFzLzIwMDEvMDkvaXBwIiB4bWxucz0iaHR0cDovL3d3dy5jeWNsb25lY29tbWVyY2UuY29tL1NjaGVtYXMvMjAwMS8wOS9pcHAiIHhtbG5zOmNvcD0iaHR0cDovL3d3dy5jeWNsb25lY29tbWVyY2UuY29tL1NjaGVtYXMvMjAwMS8wOC9jb3AiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiBhdHRyaWJ1dGVGb3JtRGVmYXVsdD0idW5xdWFsaWZpZWQiPgotCTx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5jeWNsb25lY29tbWVyY2UuY29tL1NjaGVtYXMvMjAwMS8wOC9jb3AiIHNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmN5Y2xvbmVjb21tZXJjZS5jb20vU2NoZW1hcy8yMDAxLzA4L0N5Y2xvbmVPcmdhbml6YXRpb25Qcm9maWxlLnhzZCIvPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJJbnRlcmNoYW5nZVBhcnRuZXJQcm9maWxlIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkN5Y2xvbmUgSW50ZXJjaGFuZ2UgcGFydG5lciBwcm9maWxlLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9ImNvcDpPcmdhbml6YXRpb25Qcm9maWxlIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iU2Vjb25kYXJ5SWRzIiBtaW5PY2N1cnM9IjAiPgotCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iU2Vjb25kYXJ5SWQiIHR5cGU9InhzZDpzdHJpbmciIG5pbGxhYmxlPSJmYWxzZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0iUHJlZmVyZW5jZXMiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJGaXJld2FsbCIgbWluT2NjdXJzPSIwIj4KLQkJCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Ik1pblNLZXlJdGVyYXRpb25Db3VudCI+Ci0JCQkJCQkJCTx4c2Q6c2ltcGxlVHlwZT4KLQkJCQkJCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOmludCI+Ci0JCQkJCQkJCQkJPHhzZDptaW5JbmNsdXNpdmUgdmFsdWU9IjAiLz4KLQkJCQkJCQkJCQk8eHNkOm1heEluY2x1c2l2ZSB2YWx1ZT0iNjU1MzUiLz4KLQkJCQkJCQkJCTwveHNkOnJlc3RyaWN0aW9uPgotCQkJCQkJCQk8L3hzZDpzaW1wbGVUeXBlPgotCQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iU2VjdXJpdHkiIG1pbk9jY3Vycz0iMCI+Ci0JCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5TZWN1cml0eSBwYXJhbWV0ZXJzLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJEb2N1bWVudFNpZ25pbmciIHR5cGU9InhzZDpib29sZWFuIiBtaW5PY2N1cnM9IjAiPgotCQkJCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+Qm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIGlmIGRvY3VtZW50cyByZWNlaXZlZCBieSB0aGlzIHBhcnRuZXIgc2hvdWxkIGJlIHNpZ25lZC48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IkRvY3VtZW50QWNrbm93bGVkZ2VtZW50IiBtaW5PY2N1cnM9IjAiPgotCQkJCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+RG9jdW1lbnQgYWNrbm93bGVkZ2VtZW50IGNvbmZpZ3VyYXRpb24uPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RTaWduZWQiIHR5cGU9InhzZDpib29sZWFuIj4KLQkJCQkJCQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPkJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyBkb2N1bWVudCBhY2tub3dsZWRnbWVudHMgc2hvdWxkIGJlIHNpZ25lZC48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IlJlcXVlc3RTeW5jaHJvbm91cyIgdHlwZT0ieHNkOmJvb2xlYW4iPgotCQkJCQkJCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+Qm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIGlmIGFja25vd2xlZGdlbWVudHMgc2hvdWxkIGJlIGltbWVkaWF0ZWx5IHJlY2VpdmVkLiAgUmVxdWlyZXMgYnVuZGxlZCBIVFRQKFMpLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCQkJCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJCQkJCTwveHNkOnNlcXVlbmNlPgotCQkJCQkJCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiIHR5cGU9InhzZDpib29sZWFuIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQkJCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9Ik1lc3NhZ2VEaWdlc3QiIG1pbk9jY3Vycz0iMCI+Ci0JCQkJCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5EZWZpbmVzIHRoZSBkb2N1bWVudCBtZXNzYWdlIGRpZ2VzdCBhbGdvcml0aGltIHRvIHVzZS48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQkJCQk8eHNkOnNpbXBsZVR5cGU+Ci0JCQkJCQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLQkJCQkJCQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJNRDUiLz4KLQkJCQkJCQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTSEExIi8+Ci0JCQkJCQkJCQk8L3hzZDpyZXN0cmljdGlvbj4KLQkJCQkJCQkJPC94c2Q6c2ltcGxlVHlwZT4KLQkJCQkJCQk8L3hzZDplbGVtZW50PgotCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJEb2N1bWVudEVuY3J5cHRpb24iIG1pbk9jY3Vycz0iMCI+Ci0JCQkJCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5EZWZpbmVzIHRoZSB0eXBlIG9mIGRvY3VtZW50IGVuY3J5cHRpb24gYWxnb3JpdGhpbSB0byB1c2UuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJCQkJCTx4c2Q6Y2hvaWNlPgotCQkJCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJSQzJFbmNyeXB0aW9uIj4KLQkJCQkJCQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPlJDMiBFbmNyeXB0aW9uIGFsZ29yaXRoaW0uICBLZXkgbGVuZ3RoIGlzIHJlcXVpcmVkLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCQkJCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJrZXlMZW5ndGgiIHVzZT0icmVxdWlyZWQiPgotCQkJCQkJCQkJCQkJCTx4c2Q6c2ltcGxlVHlwZT4KLQkJCQkJCQkJCQkJCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiI+Ci0JCQkJCQkJCQkJCQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI0MCIvPgotCQkJCQkJCQkJCQkJCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iNjQiLz4KLQkJCQkJCQkJCQkJCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjEyOCIvPgotCQkJCQkJCQkJCQkJCQk8L3hzZDpyZXN0cmljdGlvbj4KLQkJCQkJCQkJCQkJCQk8L3hzZDpzaW1wbGVUeXBlPgotCQkJCQkJCQkJCQkJPC94c2Q6YXR0cmlidXRlPgotCQkJCQkJCQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQk8L3hzZDplbGVtZW50PgotCQkJCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJBUkNGb3VyRW5jcnlwdGlvbiI+Ci0JCQkJCQkJCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5BUkNGb3VyIEVuY3J5cHRpb24gYWxnb3JpdGhpbS4gIEtleSBsZW5ndGggaXMgcmVxdWlyZWQuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJCQkJCQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImtleUxlbmd0aCIgdXNlPSJyZXF1aXJlZCI+Ci0JCQkJCQkJCQkJCQkJPHhzZDpzaW1wbGVUeXBlPgotCQkJCQkJCQkJCQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLQkJCQkJCQkJCQkJCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjQwIi8+Ci0JCQkJCQkJCQkJCQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSI2NCIvPgotCQkJCQkJCQkJCQkJCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMTI4Ii8+Ci0JCQkJCQkJCQkJCQkJCTwveHNkOnJlc3RyaWN0aW9uPgotCQkJCQkJCQkJCQkJCTwveHNkOnNpbXBsZVR5cGU+Ci0JCQkJCQkJCQkJCQk8L3hzZDphdHRyaWJ1dGU+Ci0JCQkJCQkJCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IkRFU0VuY3J5cHRpb24iPgotCQkJCQkJCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+REVTIEVuY3J5cHRpb24gYWxnb3JpdGhpbS48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQkJCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ia2V5TGVuZ3RoIiB0eXBlPSJ4c2Q6aW50IiB1c2U9Im9wdGlvbmFsIiBmaXhlZD0iNTYiLz4KLQkJCQkJCQkJCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQkJCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iVHJpcGxlREVTRW5jcnlwdGlvbiI+Ci0JCQkJCQkJCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5UcmlwbGUgREVTIEVuY3J5cHRpb24gYWxnb3JpdGhpbS48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQkJCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ia2V5TGVuZ3RoIiB0eXBlPSJ4c2Q6aW50IiB1c2U9Im9wdGlvbmFsIiBmaXhlZD0iMTY4Ii8+Ci0JCQkJCQkJCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQkJCQk8L3hzZDpjaG9pY2U+Ci0JCQkJCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iQmluYXJ5RGlyZWN0b3JpZXMiIG1pbk9jY3Vycz0iMCI+Ci0JCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5EZWZpbmVzIGEgY29sbGVjdGlvbiBvZiBiaW5hcnkgY29tcGFuaWVzLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQkJCQk8eHNkOnNlcXVlbmNlPgotCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJCaW5hcnlDb21wYW55IiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5EZWZpbmVzIGEgY29sbGVjdGlvbiBvZiBiaW5hcnkgZGlyZWN0b3JpZXMgZm9yIGEgY29tcGFueS48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQkJCQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iQmluYXJ5RGlyZWN0b3J5IiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCQkJCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5EZWZpbmVzIHRoZSBpbmJvdW5kIGFuZCBvdXRib3VuZCBiaW5hcnkgZGlyZWN0b3JpZXMgZm9yIGEgcGFydG5lci48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQkJCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJCQkJCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0icGFydG5lcklkIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQkJCQkJCQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJpbmJvdW5kUGF0aCIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotCQkJCQkJCQkJCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ib3V0Ym91bmRQYXRoIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQkJCQkJCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQkJCQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImNvbXBhbnlJZCIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotCQkJCQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCQkJCQk8L3hzZDplbGVtZW50PgotCQkJCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQkJCTwveHNkOmNvbXBsZXhUeXBlPgotCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Imdyb3VwIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDplbGVtZW50IG5hbWU9IlByZWZlcmVuY2VzIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPlBhcnRuZXIgcHJvZmlsZSB0cmFuc3BvcnQgYW5kIGRvY3VtZW50IHNldHRpbmdzLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJTY2hlZHVsZSIgbWluT2NjdXJzPSIwIj4KLQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPlNwZWNpZmllcyB0aGUgc2NoZWR1bGUgdG8gdXNlIHdoZW4gc2VuZGluZyBkb2N1bWVudHMgdG8gdGhpcyBwYXJ0bmVyLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCQkJCTwveHNkOmFubm90YXRpb24+Ci0JCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iSW5ib3VuZEZpbGVQcmVzZXJ2YXRpb24iIG1pbk9jY3Vycz0iMCI+Ci0JCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5TcGVjaWZpZXMgaWYgaW5ib3VuZCBmaWxlcyBzaG91bGQgYmUgcGVyc2lzdGVkIHdpdGggdGhlaXIgb3JpZ2luYWwgZmlsZSBuYW1lLiAgT3B0aW9uIGF0dHJpYnV0ZSBhbGxvd3MgZm9yIG92ZXJ3cml0aW5nIG9yIHNlcXVlbmNpbmcgZmlsZXMgd2l0aCBkdXBsaWNhdGUgZmlsZSBuYW1lcy48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJPHhzZDplbGVtZW50IG5hbWU9IkRvY3VtZW50T3B0aW9ucyIgbWluT2NjdXJzPSIwIj4KLQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPkdsb2JhbCBkb2N1bWVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCQkJCTx4c2Q6c2VxdWVuY2U+Ci0JCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IlJlamVjdER1cGxpY2F0ZUVESSIgdHlwZT0ieHNkOmJvb2xlYW4iPgotCQkJCQkJCQk8eHNkOmFubm90YXRpb24+Ci0JCQkJCQkJCQk8eHNkOmRvY3VtZW50YXRpb24+Qm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIGlmIEVESSBkb2N1bWVudCByZWNpZXZlZCB3aXRoIGR1cGxpY2F0ZSBjb250cm9sIElEcyBzaG91bGQgYmUgcmVqZWN0ZWQuPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQk8L3hzZDplbGVtZW50PgotCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJDb21wcmVzc2lvbiIgZGVmYXVsdD0iTk9ORSIgbmlsbGFibGU9ImZhbHNlIj4KLQkJCQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPkluZGljYXRlcyB0aGUgdHlwZSBvZiBjb21wcmVzc2lvbiBhbGdvcml0aGltIHRvIHVzZSAoTk9ORSwgR1pJUCBvciBaTElCKS4gPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLQkJCQkJCQkJPC94c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJPHhzZDpzaW1wbGVUeXBlPgotCQkJCQkJCQkJPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLQkJCQkJCQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJHWklQIi8+Ci0JCQkJCQkJCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iWkxJQiIvPgotCQkJCQkJCQkJCTx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5PTkUiLz4KLQkJCQkJCQkJCTwveHNkOnJlc3RyaWN0aW9uPgotCQkJCQkJCQk8L3hzZDpzaW1wbGVUeXBlPgotCQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQkJPHhzZDplbGVtZW50IG5hbWU9IlJlc2VuZEF0dGVtcHRzIj4KLQkJCQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPkludGVnZXIgdmFsdWUgaW5kaWNhdGluZyB0aGUgbnVtYmVyIG9mIHRpbWVzIGEgZG9jdW1lbnQgc2hvdWxkIGJlIHJlc2VudCBpZiBhbiBhY2tub3dsZWRtZW50IGhhcyBub3QgYmVlbiByZWNpZXZlZC48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQkJCQk8eHNkOnNpbXBsZVR5cGU+Ci0JCQkJCQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDppbnQiPgotCQkJCQkJCQkJCTx4c2Q6bWluSW5jbHVzaXZlIHZhbHVlPSIwIi8+Ci0JCQkJCQkJCQkJPHhzZDptYXhJbmNsdXNpdmUgdmFsdWU9IjYwIi8+Ci0JCQkJCQkJCQk8L3hzZDpyZXN0cmljdGlvbj4KLQkJCQkJCQkJPC94c2Q6c2ltcGxlVHlwZT4KLQkJCQkJCQk8L3hzZDplbGVtZW50PgotCQkJCQkJCTx4c2Q6ZWxlbWVudCBuYW1lPSJSZXNlbmRJbnRlcnZhbCI+Ci0JCQkJCQkJCTx4c2Q6YW5ub3RhdGlvbj4KLQkJCQkJCQkJCTx4c2Q6ZG9jdW1lbnRhdGlvbj5JbnRlZ2VyIHZhbHVlIGluZGljYXRpbmcgdGhlIGR1cmF0aW9uIChpbiBob3VycykgYmV0d2VlbiByZXNlbmQgYXR0ZXB0cy48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQkJCQk8eHNkOnNpbXBsZVR5cGU+Ci0JCQkJCQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDppbnQiPgotCQkJCQkJCQkJCTx4c2Q6bWluSW5jbHVzaXZlIHZhbHVlPSIxIi8+Ci0JCQkJCQkJCQkJPHhzZDptYXhJbmNsdXNpdmUgdmFsdWU9Ijk5OTkiLz4KLQkJCQkJCQkJCTwveHNkOnJlc3RyaWN0aW9uPgotCQkJCQkJCQk8L3hzZDpzaW1wbGVUeXBlPgotCQkJCQkJCTwveHNkOmVsZW1lbnQ+Ci0JCQkJCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JCQkJPC94c2Q6ZWxlbWVudD4KLQkJCQk8eHNkOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0UmV0cmllcyIgbWluT2NjdXJzPSIwIj4KLQkJCQkJPHhzZDphbm5vdGF0aW9uPgotCQkJCQkJPHhzZDpkb2N1bWVudGF0aW9uPlNwZWNpZmllcyB0aGUgVHJhbnNwb3J0IHJldHJpZXMgb3B0aW9uIGFuZCBpbnRlcnZhbC48L3hzZDpkb2N1bWVudGF0aW9uPgotCQkJCQk8L3hzZDphbm5vdGF0aW9uPgotCQkJCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iZHVyYXRpb24iIHR5cGU9InhzZDppbnRlZ2VyIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQkJCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJmYWxsb2ZmIiB0eXBlPSJ4c2Q6aW50ZWdlciIgdXNlPSJyZXF1aXJlZCIvPgotCQkJCQk8L3hzZDpjb21wbGV4VHlwZT4KLQkJCQk8L3hzZDplbGVtZW50PgotCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJCdXNpbmVzc1Byb3RvY29sIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkJhc2UgZGVmaW5pdGlvbiBmb3IgYSBidXNpbmVzcyBwcm90b2NvbC48L3hzZDpkb2N1bWVudGF0aW9uPgotCQk8L3hzZDphbm5vdGF0aW9uPgotCQk8eHNkOnNlcXVlbmNlPgotCQkJPHhzZDplbGVtZW50IHJlZj0iVHJhbnNwb3J0UmVmIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQk8L3hzZDpzZXF1ZW5jZT4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iYnVzaW5lc3NQcm90b2NvbElkIiB0eXBlPSJ4c2Q6SURSRUYiIHVzZT0icmVxdWlyZWQiLz4KLQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8eHNkOmVsZW1lbnQgbmFtZT0iVHJhbnNwb3J0UmVmIj4KLQkJPHhzZDphbm5vdGF0aW9uPgotCQkJPHhzZDpkb2N1bWVudGF0aW9uPkEgcmVmZXJlbmNlIHRvIGEgVHJhbnNwb3J0IGRlZmluZWQgZWxzZXdoZXJlLjwveHNkOmRvY3VtZW50YXRpb24+Ci0JCTwveHNkOmFubm90YXRpb24+Ci0JPC94c2Q6ZWxlbWVudD4KLTwveHNkOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3YyL3hraXQvc2NoZW1hcy9jeWNsb25lL1RQTS54c2QgYi92Mi94a2l0L3NjaGVtYXMvY3ljbG9uZS9UUE0ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTFiZTY5Li4wMDAwMDAwCi0tLSBhL3YyL3hraXQvc2NoZW1hcy9jeWNsb25lL1RQTS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzNTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+Ci08IS0tCUNvcHlyaWdodCAoYykgMjAwMC0yMDAzIEJFQSBTeXN0ZW1zLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci08IS0tCUFsbCByaWdodHMgcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci08IS0tCVRISVMgSVMgVU5QVUJMSVNIRUQgUFJPUFJJRVRBUlkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci08IS0tCVNPVVJDRSBDT0RFIE9GIEJFQSBTeXN0ZW1zLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci08IS0tCVRoZSBjb3B5cmlnaHQgbm90aWNlIGFib3ZlIGRvZXMgbm90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci08IS0tCWV2aWRlbmNlIGFueSBhY3R1YWwgb3IgaW50ZW5kZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci08IS0tCXB1YmxpY2F0aW9uIG9mIHN1Y2ggc291cmNlIGNvZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgotPCEtLSAkSWQ6IFRQTS54c2QsdiAxLjEgMjAwMy8wOS8yNiAyMToyMzo0MiBlcmljdmFzIEV4cCAkIC0tPgotPHhzOnNjaGVtYQotICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuYmVhLmNvbS8yMDAzLzAzL3dsaS90cG0iCi0gIHhtbG5zPSJodHRwOi8vd3d3LmJlYS5jb20vMjAwMy8wMy93bGkvdHBtIgotICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIgotICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0JPHhzOmltcG9ydAotICAgIG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyIKLSAgICBzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sZHNpZy1jb3JlL3htbGRzaWctY29yZS1zY2hlbWEueHNkIi8+Ci0JPHhzOmVsZW1lbnQgbmFtZT0idHJhZGluZy1wYXJ0bmVyLW1hbmFnZW1lbnQiPgotCQk8eHM6YW5ub3RhdGlvbj4KLQkJCTx4czpkb2N1bWVudGF0aW9uPlRoaXMgaXMgdGhlIHJvb3QgZWxlbWVudCBpbiB0aGUgVFBNIHJlcG9zaXRvcnkuPC94czpkb2N1bWVudGF0aW9uPgotCQk8L3hzOmFubm90YXRpb24+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCByZWY9InRyYWRpbmctcGFydG5lciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0ic2VydmljZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibWVzc2FnZS10cmFja2luZy1kZWZhdWx0IiB1c2U9Im9wdGlvbmFsIj4KLQkJCQk8eHM6c2ltcGxlVHlwZT4KLQkJCQkJPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJOT05FIi8+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik1FVEFEQVRBIi8+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFMTCIvPgotCQkJCQk8L3hzOnJlc3RyaWN0aW9uPgotCQkJCTwveHM6c2ltcGxlVHlwZT4KLQkJCTwveHM6YXR0cmlidXRlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZWN1cmUtYXVkaXQtbG9nZ2luZyIgdHlwZT0ieHM6Ym9vbGVhbiIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0ZXN0LW1vZGUiIHR5cGU9InhzOmJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiLz4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0idHJhZGluZy1wYXJ0bmVyIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IHJlZj0iYWRkcmVzcyIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJleHRlbmRlZC1wcm9wZXJ0eS1zZXQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJCQk8eHM6ZWxlbWVudCByZWY9ImNsaWVudC1jZXJ0aWZpY2F0ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCQk8eHM6ZWxlbWVudCByZWY9InNlcnZlci1jZXJ0aWZpY2F0ZSIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJCTx4czplbGVtZW50IHJlZj0iZW5jcnlwdGlvbi1jZXJ0aWZpY2F0ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCQk8eHM6ZWxlbWVudCByZWY9InNpZ25hdHVyZS1jZXJ0aWZpY2F0ZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJCTwveHM6Y2hvaWNlPgotICAgICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgIDx4czplbGVtZW50IHJlZj0iZWJ4bWwtYmluZGluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgIDx4czplbGVtZW50IHJlZj0icm9zZXR0YW5ldC1iaW5kaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ3ZWItc2VydmljZS1iaW5kaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDwveHM6Y2hvaWNlPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImRlc2NyaXB0aW9uIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibm90ZXMiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB1c2U9Im9wdGlvbmFsIj4KLQkJCQk8eHM6c2ltcGxlVHlwZT4KLQkJCQkJPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJMT0NBTCIvPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJSRU1PVEUiLz4KLQkJCQkJPC94czpyZXN0cmljdGlvbj4KLQkJCQk8L3hzOnNpbXBsZVR5cGU+Ci0JCQk8L3hzOmF0dHJpYnV0ZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iaXMtZGVmYXVsdCIgdHlwZT0ieHM6Ym9vbGVhbiIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJidXNpbmVzcy1pZC10eXBlIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iYnVzaW5lc3MtaWQiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJlbWFpbCIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InBob25lIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iZmF4IiB0eXBlPSJ4czpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0idXNlcm5hbWUiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiB0eXBlPSJ4czpzdHJpbmciLz4KLQk8eHM6ZWxlbWVudCBuYW1lPSJleHRlbmRlZC1wcm9wZXJ0eS1zZXQiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJ4bWwtZWxlbWVudCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImRlc2NyaXB0aW9uIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibm90ZXMiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJ4bWwtZWxlbWVudCI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCByZWY9InhtbC1hdHRyaWJ1dGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9InhtbC1lbGVtZW50IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0ieG1sLWF0dHJpYnV0ZSI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InZhbHVlIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iY2xpZW50LWNlcnRpZmljYXRlIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IHJlZj0iZHM6S2V5SW5mbyIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0icGFzc3dvcmQiIHR5cGU9InhzOmhleEJpbmFyeSIgdXNlPSJvcHRpb25hbCIvPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJzZXJ2ZXItY2VydGlmaWNhdGUiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJkczpLZXlJbmZvIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJwYXNzd29yZCIgdHlwZT0ieHM6aGV4QmluYXJ5IiB1c2U9Im9wdGlvbmFsIi8+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9ImVuY3J5cHRpb24tY2VydGlmaWNhdGUiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJkczpLZXlJbmZvIiBtaW5PY2N1cnM9IjAiLz4KLQkJCTwveHM6c2VxdWVuY2U+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJwYXNzd29yZCIgdHlwZT0ieHM6aGV4QmluYXJ5IiB1c2U9Im9wdGlvbmFsIi8+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9InNpZ25hdHVyZS1jZXJ0aWZpY2F0ZSI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCByZWY9ImRzOktleUluZm8iIG1pbk9jY3Vycz0iMCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InBhc3N3b3JkIiB0eXBlPSJ4czpoZXhCaW5hcnkiIHVzZT0ib3B0aW9uYWwiLz4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iZWJ4bWwtYmluZGluZyI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCByZWY9InNpZ25hdHVyZS10cmFuc2Zvcm1zIiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9InRyYW5zcG9ydCIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iYnVzaW5lc3MtcHJvdG9jb2wtbmFtZSIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImJ1c2luZXNzLXByb3RvY29sLXZlcnNpb24iIHR5cGU9InhzOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJpcy1kZWZhdWx0IiB0eXBlPSJ4czpib29sZWFuIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImlzLXNpZ25hdHVyZS1yZXF1aXJlZCIgdHlwZT0ieHM6Ym9vbGVhbiIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJpcy1yZWNlaXB0LXNpZ25hdHVyZS1yZXF1aXJlZCIgdHlwZT0ieHM6Ym9vbGVhbiIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJzaWduYXR1cmUtY2VydGlmaWNhdGUtbmFtZSIgdHlwZT0icmVmZXJlbmNlIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImRlbGl2ZXJ5LXNlbWFudGljcyIgdXNlPSJvcHRpb25hbCI+Ci0JCQkJPHhzOnNpbXBsZVR5cGU+Ci0JCQkJCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJCZXN0RWZmb3J0Ii8+Ci0gICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkJFU1RFRkZPUlQiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJPbmNlQW5kT25seU9uY2UiLz4KLSAgICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iT05DRUFORE9OTFlPTkNFIi8+Ci0JCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQXRMZWFzdE9uY2UiLz4KLSAgICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQVRMRUFTVE9OQ0UiLz4KLQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJBdE1vc3RPbmNlIi8+Ci0gICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFUTU9TVE9OQ0UiLz4KLQkJCQkJPC94czpyZXN0cmljdGlvbj4KLQkJCQk8L3hzOnNpbXBsZVR5cGU+Ci0JCQk8L3hzOmF0dHJpYnV0ZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0icmV0cmllcyIgdHlwZT0ieHM6bm9uTmVnYXRpdmVJbnRlZ2VyIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InJldHJ5LWludGVydmFsIiB0eXBlPSJ4czpub25OZWdhdGl2ZUludGVnZXIiIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0icGVyc2lzdC1kdXJhdGlvbiIgdHlwZT0ieHM6bm9uTmVnYXRpdmVJbnRlZ2VyIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9InNpZ25hdHVyZS10cmFuc2Zvcm1zIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOnNlcXVlbmNlPgotCQkJCTx4czplbGVtZW50IHJlZj0ieHBhdGgiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJ4cGF0aCIvPgotCTx4czplbGVtZW50IG5hbWU9InJvc2V0dGFuZXQtYmluZGluZyI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCByZWY9ImZhaWx1cmUtcmVwb3J0LWFkbWluaXN0cmF0b3IiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4czplbGVtZW50IHJlZj0iZmFpbHVyZS1ub3RpZmllciIgbWluT2NjdXJzPSIwIi8+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJ0cmFuc3BvcnQiIG1pbk9jY3Vycz0iMCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImJ1c2luZXNzLXByb3RvY29sLW5hbWUiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJidXNpbmVzcy1wcm90b2NvbC12ZXJzaW9uIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iaXMtZGVmYXVsdCIgdHlwZT0ieHM6Ym9vbGVhbiIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJlbmNyeXB0aW9uLWNlcnRpZmljYXRlLW5hbWUiIHR5cGU9InJlZmVyZW5jZSIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJjaXBoZXItYWxnb3JpdGhtIiB1c2U9Im9wdGlvbmFsIj4KLQkJCQk8eHM6c2ltcGxlVHlwZT4KLQkJCQkJPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJOT05FIi8+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlJDNSIvPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJERVMiLz4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iVFJJUExFX0RFUyIvPgotCQkJCQk8L3hzOnJlc3RyaWN0aW9uPgotCQkJCTwveHM6c2ltcGxlVHlwZT4KLQkJCTwveHM6YXR0cmlidXRlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJlbmNyeXB0aW9uLWxldmVsIiB1c2U9Im9wdGlvbmFsIj4KLQkJCQk8eHM6c2ltcGxlVHlwZT4KLQkJCQkJPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJOT05FIi8+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlBBWUxPQUQiLz4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRU5USVJFX1BBWUxPQUQiLz4KLQkJCQkJPC94czpyZXN0cmljdGlvbj4KLQkJCQk8L3hzOnNpbXBsZVR5cGU+Ci0JCQk8L3hzOmF0dHJpYnV0ZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0iaXMtc2lnbmF0dXJlLXJlcXVpcmVkIiB0eXBlPSJ4czpib29sZWFuIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImlzLXJlY2VpcHQtc2lnbmF0dXJlLXJlcXVpcmVkIiB0eXBlPSJ4czpib29sZWFuIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InNpZ25hdHVyZS1jZXJ0aWZpY2F0ZS1uYW1lIiB0eXBlPSJyZWZlcmVuY2UiIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0icmV0cmllcyIgdHlwZT0ieHM6bm9uTmVnYXRpdmVJbnRlZ2VyIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InJldHJ5LWludGVydmFsIiB0eXBlPSJ4czpub25OZWdhdGl2ZUludGVnZXIiIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0icHJvY2Vzcy10aW1lb3V0IiB0eXBlPSJ4czpub25OZWdhdGl2ZUludGVnZXIiIHVzZT0ib3B0aW9uYWwiLz4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iZmFpbHVyZS1yZXBvcnQtYWRtaW5pc3RyYXRvciI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0idHJhZGluZy1wYXJ0bmVyLW5hbWUiIHR5cGU9InJlZmVyZW5jZSIgdXNlPSJyZXF1aXJlZCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJiaW5kaW5nLW5hbWUiIHR5cGU9InJlZmVyZW5jZSIgdXNlPSJvcHRpb25hbCIvPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJmYWlsdXJlLW5vdGlmaWVyIj4KLQkJPHhzOmNvbXBsZXhUeXBlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0cmFkaW5nLXBhcnRuZXItbmFtZSIgdHlwZT0icmVmZXJlbmNlIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImJpbmRpbmctbmFtZSIgdHlwZT0icmVmZXJlbmNlIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9IndlYi1zZXJ2aWNlLWJpbmRpbmciPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJ0cmFuc3BvcnQiIG1pbk9jY3Vycz0iMCIvPgotCQkJPC94czpzZXF1ZW5jZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9InRyYW5zcG9ydCI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czpzZXF1ZW5jZT4KLQkJCQk8eHM6ZWxlbWVudCByZWY9ImF1dGhlbnRpY2F0aW9uIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJwcm90b2NvbCIgdXNlPSJyZXF1aXJlZCI+Ci0JCQkJPHhzOnNpbXBsZVR5cGU+Ci0JCQkJCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iaHR0cCIvPgotICAgICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJIVFRQIi8+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9Imh0dHBzIi8+Ci0gICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkhUVFBTIi8+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImptcyIvPgotICAgICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJKTVMiLz4KLQkJCQkJPC94czpyZXN0cmljdGlvbj4KLQkJCQk8L3hzOnNpbXBsZVR5cGU+Ci0JCQk8L3hzOmF0dHJpYnV0ZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0icHJvdG9jb2wtdmVyc2lvbiIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImVuZHBvaW50IiB0eXBlPSJ4czphbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4KLQkJPC94czpjb21wbGV4VHlwZT4KLQk8L3hzOmVsZW1lbnQ+Ci0JPHhzOmVsZW1lbnQgbmFtZT0iYXV0aGVudGljYXRpb24iPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImNsaWVudC1wYXJ0bmVyLW5hbWUiIHR5cGU9InJlZmVyZW5jZSIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJjbGllbnQtYXV0aGVudGljYXRpb24iIHVzZT0ib3B0aW9uYWwiPgotCQkJCTx4czpzaW1wbGVUeXBlPgotCQkJCQk8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Tk1UT0tFTiI+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik5PTkUiLz4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iQkFTSUMiLz4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iU1NMX0NFUlQiLz4KLQkJCQkJPC94czpyZXN0cmljdGlvbj4KLQkJCQk8L3hzOnNpbXBsZVR5cGU+Ci0JCQk8L3hzOmF0dHJpYnV0ZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0idXNlcm5hbWUiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJwYXNzd29yZCIgdHlwZT0ieHM6aGV4QmluYXJ5IiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImNsaWVudC1jZXJ0aWZpY2F0ZS1uYW1lIiB0eXBlPSJyZWZlcmVuY2UiIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ic2VydmVyLWF1dGhlbnRpY2F0aW9uIiB1c2U9Im9wdGlvbmFsIj4KLQkJCQk8eHM6c2ltcGxlVHlwZT4KLQkJCQkJPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJOT05FIi8+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IlNTTF9DRVJUX01VVFVBTCIvPgotCQkJCQk8L3hzOnJlc3RyaWN0aW9uPgotCQkJCTwveHM6c2ltcGxlVHlwZT4KLQkJCTwveHM6YXR0cmlidXRlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZXJ2ZXItY2VydGlmaWNhdGUtbmFtZSIgdHlwZT0icmVmZXJlbmNlIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9InNlcnZpY2UiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6c2VxdWVuY2U+Ci0JCQkJPHhzOmVsZW1lbnQgcmVmPSJzZXJ2aWNlLXByb2ZpbGUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQkJCQk8eHM6ZWxlbWVudCByZWY9InJvc2V0dGFuZXQtc2VydmljZS1kZWZhdWx0cyIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8L3hzOnNlcXVlbmNlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0idmVyc2lvbiIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImRlc2NyaXB0aW9uIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibm90ZXMiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJzZXJ2aWNlLXR5cGUiIHVzZT0ib3B0aW9uYWwiPgotCQkJCTx4czpzaW1wbGVUeXBlPgotCQkJCQk8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Tk1UT0tFTiI+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IldFQlNFUlZJQ0UiLz4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iUFJPQ0VTUyIvPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJTRVJWSUNFQ09OVFJPTCIvPgotCQkJCQk8L3hzOnJlc3RyaWN0aW9uPgotCQkJCTwveHM6c2ltcGxlVHlwZT4KLQkJCTwveHM6YXR0cmlidXRlPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJidXNpbmVzcy1wcm90b2NvbCIgdXNlPSJvcHRpb25hbCI+Ci0JCQkJPHhzOnNpbXBsZVR5cGU+Ci0JCQkJCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iV0VCU0VSVklDRSIvPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJFQlhNTCIvPgotCQkJCQkJPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJST1NFVFRBTkVUIi8+Ci0JCQkJCTwveHM6cmVzdHJpY3Rpb24+Ci0JCQkJPC94czpzaW1wbGVUeXBlPgotCQkJPC94czphdHRyaWJ1dGU+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czplbGVtZW50IG5hbWU9InNlcnZpY2UtcHJvZmlsZSI+Ci0JCTx4czpjb21wbGV4VHlwZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibG9jYWwtdHJhZGluZy1wYXJ0bmVyIiB0eXBlPSJyZWZlcmVuY2UiIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibG9jYWwtYmluZGluZyIgdHlwZT0icmVmZXJlbmNlIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImV4dGVybmFsLXRyYWRpbmctcGFydG5lciIgdHlwZT0icmVmZXJlbmNlIiB1c2U9InJlcXVpcmVkIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9ImV4dGVybmFsLWJpbmRpbmciIHR5cGU9InJlZmVyZW5jZSIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJzdGF0dXMiIHVzZT0ib3B0aW9uYWwiPgotCQkJCTx4czpzaW1wbGVUeXBlPgotCQkJCQk8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Tk1UT0tFTiI+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkVOQUJMRUQiLz4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iRElTQUJMRUQiLz4KLQkJCQkJPC94czpyZXN0cmljdGlvbj4KLQkJCQk8L3hzOnNpbXBsZVR5cGU+Ci0JCQk8L3hzOmF0dHJpYnV0ZT4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0ibWVzc2FnZS10cmFja2luZyIgdXNlPSJvcHRpb25hbCI+Ci0JCQkJPHhzOnNpbXBsZVR5cGU+Ci0JCQkJCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLQkJCQkJCTx4czplbnVtZXJhdGlvbiB2YWx1ZT0iTk9ORSIvPgotICAgICAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJERUZBVUxUIi8+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9Ik1FVEFEQVRBIi8+Ci0JCQkJCQk8eHM6ZW51bWVyYXRpb24gdmFsdWU9IkFMTCIvPgotCQkJCQk8L3hzOnJlc3RyaWN0aW9uPgotCQkJCTwveHM6c2ltcGxlVHlwZT4KLQkJCTwveHM6YXR0cmlidXRlPgotCQk8L3hzOmNvbXBsZXhUeXBlPgotCTwveHM6ZWxlbWVudD4KLQk8eHM6ZWxlbWVudCBuYW1lPSJyb3NldHRhbmV0LXNlcnZpY2UtZGVmYXVsdHMiPgotCQk8eHM6Y29tcGxleFR5cGU+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InNlcnZpY2UtY29udGVudC1zY2hlbWEiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotCQkJPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1c2UtZHRkLXZhbGlkYXRpb24iIHR5cGU9InhzOmJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4czphdHRyaWJ1dGUgbmFtZT0idmFsaWRhdGUtc2VydmljZS1jb250ZW50IiB0eXBlPSJ4czpib29sZWFuIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCQk8eHM6YXR0cmlidXRlIG5hbWU9InZhbGlkYXRlLXNlcnZpY2UtaGVhZGVyIiB0eXBlPSJ4czpib29sZWFuIiB1c2U9Im9wdGlvbmFsIi8+Ci0JCTwveHM6Y29tcGxleFR5cGU+Ci0JPC94czplbGVtZW50PgotCTx4czpzaW1wbGVUeXBlIG5hbWU9InJlZmVyZW5jZSI+Ci0JCTx4czphbm5vdGF0aW9uPgotCQkJPHhzOmRvY3VtZW50YXRpb24+UmVmZXJlbmNlIHRvIGFub3RoZXIgZWxlbWVudCBpbiB0aGUgVFBNIHJlcG9zaXRvcnkuPC94czpkb2N1bWVudGF0aW9uPgotCQk8L3hzOmFubm90YXRpb24+Ci0JCTx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciLz4KLQk8L3hzOnNpbXBsZVR5cGU+Ci08L3hzOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3YyL3hraXQvc2NoZW1hcy9jeWNsb25lL2RzaWcveG1sZHNpZy1jb3JlLXNjaGVtYS54c2QgYi92Mi94a2l0L3NjaGVtYXMvY3ljbG9uZS9kc2lnL3htbGRzaWctY29yZS1zY2hlbWEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTZjMjExLi4wMDAwMDAwCi0tLSBhL3YyL3hraXQvc2NoZW1hcy9jeWNsb25lL2RzaWcveG1sZHNpZy1jb3JlLXNjaGVtYS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhRE9DVFlQRSBzY2hlbWEKLSAgUFVCTElDICItLy9XM0MvL0RURCBYTUxTY2hlbWEgMjAwMTAyLy9FTiIgImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLmR0ZCIKLSBbCi0gICA8IUFUVExJU1Qgc2NoZW1hIAotICAgICB4bWxuczpkcyBDREFUQSAjRklYRUQgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiPgotICAgPCFFTlRJVFkgZHNpZyAnaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnIyc+Ci0gICA8IUVOVElUWSAlIHAgJyc+Ci0gICA8IUVOVElUWSAlIHMgJyc+Ci0gIF0+Ci0KLTwhLS0gU2NoZW1hIGZvciBYTUwgU2lnbmF0dXJlcwotICAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMKLSAgICAkUmV2aXNpb246IDEuMSAkIG9uICREYXRlOiAyMDAzLzA5LzI2IDIxOjIzOjQyICQgYnkgJEF1dGhvcjogZXJpY3ZhcyAkCi0KLSAgICBDb3B5cmlnaHQgMjAwMSBUaGUgSW50ZXJuZXQgU29jaWV0eSBhbmQgVzNDIChNYXNzYWNodXNldHRzIEluc3RpdHV0ZQotICAgIG9mIFRlY2hub2xvZ3ksIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgZW4KLSAgICBBdXRvbWF0aXF1ZSwgS2VpbyBVbml2ZXJzaXR5KS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAgICBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLwotCi0gICAgVGhpcyBkb2N1bWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgVzNDIFNvZnR3YXJlIExpY2Vuc2UgWzFdIGFzIGRlc2NyaWJlZAotICAgIGluIHRoZSBGQVEgWzJdLgotCi0gICAgWzFdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvY29weXJpZ2h0LXNvZnR3YXJlLTE5OTgwNzIwCi0gICAgWzJdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvSVBSLUZBUS0yMDAwMDYyMC5odG1sI0RURAotLS0+Ci0KLQotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgICAgIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIgotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiCi0gICAgICAgIHZlcnNpb249IjAuMSIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPiAKLQotPCEtLSBCYXNpYyBUeXBlcyBEZWZpbmVkIGZvciBTaWduYXR1cmVzIC0tPgotCi08c2ltcGxlVHlwZSBuYW1lPSJDcnlwdG9CaW5hcnkiPgotICA8cmVzdHJpY3Rpb24gYmFzZT0iYmFzZTY0QmluYXJ5Ij4KLSAgPC9yZXN0cmljdGlvbj4KLTwvc2ltcGxlVHlwZT4KLQotPCEtLSBTdGFydCBTaWduYXR1cmUgLS0+Ci0KLTxlbGVtZW50IG5hbWU9IlNpZ25hdHVyZSIgdHlwZT0iZHM6U2lnbmF0dXJlVHlwZSIvPgotPGNvbXBsZXhUeXBlIG5hbWU9IlNpZ25hdHVyZVR5cGUiPgotICA8c2VxdWVuY2U+IAotICAgIDxlbGVtZW50IHJlZj0iZHM6U2lnbmVkSW5mbyIvPiAKLSAgICA8ZWxlbWVudCByZWY9ImRzOlNpZ25hdHVyZVZhbHVlIi8+IAotICAgIDxlbGVtZW50IHJlZj0iZHM6S2V5SW5mbyIgbWluT2NjdXJzPSIwIi8+IAotICAgIDxlbGVtZW50IHJlZj0iZHM6T2JqZWN0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+IAotICA8L3NlcXVlbmNlPiAgCi0gIDxhdHRyaWJ1dGUgbmFtZT0iSWQiIHR5cGU9IklEIiB1c2U9Im9wdGlvbmFsIi8+Ci08L2NvbXBsZXhUeXBlPgotCi0gIDxlbGVtZW50IG5hbWU9IlNpZ25hdHVyZVZhbHVlIiB0eXBlPSJkczpTaWduYXR1cmVWYWx1ZVR5cGUiLz4gCi0gIDxjb21wbGV4VHlwZSBuYW1lPSJTaWduYXR1cmVWYWx1ZVR5cGUiPgotICAgIDxzaW1wbGVDb250ZW50PgotICAgICAgPGV4dGVuc2lvbiBiYXNlPSJiYXNlNjRCaW5hcnkiPgotICAgICAgICA8YXR0cmlidXRlIG5hbWU9IklkIiB0eXBlPSJJRCIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgPC9leHRlbnNpb24+Ci0gICAgPC9zaW1wbGVDb250ZW50PgotICA8L2NvbXBsZXhUeXBlPgotCi08IS0tIFN0YXJ0IFNpZ25lZEluZm8gLS0+Ci0KLTxlbGVtZW50IG5hbWU9IlNpZ25lZEluZm8iIHR5cGU9ImRzOlNpZ25lZEluZm9UeXBlIi8+Ci08Y29tcGxleFR5cGUgbmFtZT0iU2lnbmVkSW5mb1R5cGUiPgotICA8c2VxdWVuY2U+IAotICAgIDxlbGVtZW50IHJlZj0iZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCIvPiAKLSAgICA8ZWxlbWVudCByZWY9ImRzOlNpZ25hdHVyZU1ldGhvZCIvPiAKLSAgICA8ZWxlbWVudCByZWY9ImRzOlJlZmVyZW5jZSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4gCi0gIDwvc2VxdWVuY2U+ICAKLSAgPGF0dHJpYnV0ZSBuYW1lPSJJZCIgdHlwZT0iSUQiIHVzZT0ib3B0aW9uYWwiLz4gCi08L2NvbXBsZXhUeXBlPgotCi0gIDxlbGVtZW50IG5hbWU9IkNhbm9uaWNhbGl6YXRpb25NZXRob2QiIHR5cGU9ImRzOkNhbm9uaWNhbGl6YXRpb25NZXRob2RUeXBlIi8+IAotICA8Y29tcGxleFR5cGUgbmFtZT0iQ2Fub25pY2FsaXphdGlvbk1ldGhvZFR5cGUiIG1peGVkPSJ0cnVlIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgICA8YW55IG5hbWVzcGFjZT0iIyNhbnkiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgIDwhLS0gKDAsdW5ib3VuZGVkKSBlbGVtZW50cyBmcm9tICgxLDEpIG5hbWVzcGFjZSAtLT4KLSAgICA8L3NlcXVlbmNlPgotICAgIDxhdHRyaWJ1dGUgbmFtZT0iQWxnb3JpdGhtIiB0eXBlPSJhbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4gCi0gIDwvY29tcGxleFR5cGU+Ci0KLSAgPGVsZW1lbnQgbmFtZT0iU2lnbmF0dXJlTWV0aG9kIiB0eXBlPSJkczpTaWduYXR1cmVNZXRob2RUeXBlIi8+Ci0gIDxjb21wbGV4VHlwZSBuYW1lPSJTaWduYXR1cmVNZXRob2RUeXBlIiBtaXhlZD0idHJ1ZSI+Ci0gICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iSE1BQ091dHB1dExlbmd0aCIgbWluT2NjdXJzPSIwIiB0eXBlPSJkczpITUFDT3V0cHV0TGVuZ3RoVHlwZSIvPgotICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgIDwhLS0gKDAsdW5ib3VuZGVkKSBlbGVtZW50cyBmcm9tICgxLDEpIGV4dGVybmFsIG5hbWVzcGFjZSAtLT4KLSAgICA8L3NlcXVlbmNlPgotICAgIDxhdHRyaWJ1dGUgbmFtZT0iQWxnb3JpdGhtIiB0eXBlPSJhbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4gCi0gIDwvY29tcGxleFR5cGU+Ci0KLTwhLS0gU3RhcnQgUmVmZXJlbmNlIC0tPgotCi08ZWxlbWVudCBuYW1lPSJSZWZlcmVuY2UiIHR5cGU9ImRzOlJlZmVyZW5jZVR5cGUiLz4KLTxjb21wbGV4VHlwZSBuYW1lPSJSZWZlcmVuY2VUeXBlIj4KLSAgPHNlcXVlbmNlPiAKLSAgICA8ZWxlbWVudCByZWY9ImRzOlRyYW5zZm9ybXMiIG1pbk9jY3Vycz0iMCIvPiAKLSAgICA8ZWxlbWVudCByZWY9ImRzOkRpZ2VzdE1ldGhvZCIvPiAKLSAgICA8ZWxlbWVudCByZWY9ImRzOkRpZ2VzdFZhbHVlIi8+IAotICA8L3NlcXVlbmNlPgotICA8YXR0cmlidXRlIG5hbWU9IklkIiB0eXBlPSJJRCIgdXNlPSJvcHRpb25hbCIvPiAKLSAgPGF0dHJpYnV0ZSBuYW1lPSJVUkkiIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIvPiAKLSAgPGF0dHJpYnV0ZSBuYW1lPSJUeXBlIiB0eXBlPSJhbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4gCi08L2NvbXBsZXhUeXBlPgotCi0gIDxlbGVtZW50IG5hbWU9IlRyYW5zZm9ybXMiIHR5cGU9ImRzOlRyYW5zZm9ybXNUeXBlIi8+Ci0gIDxjb21wbGV4VHlwZSBuYW1lPSJUcmFuc2Zvcm1zVHlwZSI+Ci0gICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgcmVmPSJkczpUcmFuc2Zvcm0iIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+ICAKLSAgICA8L3NlcXVlbmNlPgotICA8L2NvbXBsZXhUeXBlPgotCi0gIDxlbGVtZW50IG5hbWU9IlRyYW5zZm9ybSIgdHlwZT0iZHM6VHJhbnNmb3JtVHlwZSIvPgotICA8Y29tcGxleFR5cGUgbmFtZT0iVHJhbnNmb3JtVHlwZSIgbWl4ZWQ9InRydWUiPgotICAgIDxjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+IAotICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8IS0tICgxLDEpIGVsZW1lbnRzIGZyb20gKDAsdW5ib3VuZGVkKSBuYW1lc3BhY2VzIC0tPgotICAgICAgPGVsZW1lbnQgbmFtZT0iWFBhdGgiIHR5cGU9InN0cmluZyIvPiAKLSAgICA8L2Nob2ljZT4KLSAgICA8YXR0cmlidXRlIG5hbWU9IkFsZ29yaXRobSIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+IAotICA8L2NvbXBsZXhUeXBlPgotCi08IS0tIEVuZCBSZWZlcmVuY2UgLS0+Ci0KLTxlbGVtZW50IG5hbWU9IkRpZ2VzdE1ldGhvZCIgdHlwZT0iZHM6RGlnZXN0TWV0aG9kVHlwZSIvPgotPGNvbXBsZXhUeXBlIG5hbWU9IkRpZ2VzdE1ldGhvZFR5cGUiIG1peGVkPSJ0cnVlIj4gCi0gIDxzZXF1ZW5jZT4KLSAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgPC9zZXF1ZW5jZT4gICAgCi0gIDxhdHRyaWJ1dGUgbmFtZT0iQWxnb3JpdGhtIiB0eXBlPSJhbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4gCi08L2NvbXBsZXhUeXBlPgotCi08ZWxlbWVudCBuYW1lPSJEaWdlc3RWYWx1ZSIgdHlwZT0iZHM6RGlnZXN0VmFsdWVUeXBlIi8+Ci08c2ltcGxlVHlwZSBuYW1lPSJEaWdlc3RWYWx1ZVR5cGUiPgotICA8cmVzdHJpY3Rpb24gYmFzZT0iYmFzZTY0QmluYXJ5Ii8+Ci08L3NpbXBsZVR5cGU+Ci0KLTwhLS0gRW5kIFNpZ25lZEluZm8gLS0+Ci0KLTwhLS0gU3RhcnQgS2V5SW5mbyAtLT4KLQotPGVsZW1lbnQgbmFtZT0iS2V5SW5mbyIgdHlwZT0iZHM6S2V5SW5mb1R5cGUiLz4gCi08Y29tcGxleFR5cGUgbmFtZT0iS2V5SW5mb1R5cGUiIG1peGVkPSJ0cnVlIj4KLSAgPGNob2ljZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+ICAgICAKLSAgICA8ZWxlbWVudCByZWY9ImRzOktleU5hbWUiLz4gCi0gICAgPGVsZW1lbnQgcmVmPSJkczpLZXlWYWx1ZSIvPiAKLSAgICA8ZWxlbWVudCByZWY9ImRzOlJldHJpZXZhbE1ldGhvZCIvPiAKLSAgICA8ZWxlbWVudCByZWY9ImRzOlg1MDlEYXRhIi8+IAotICAgIDxlbGVtZW50IHJlZj0iZHM6UEdQRGF0YSIvPiAKLSAgICA8ZWxlbWVudCByZWY9ImRzOlNQS0lEYXRhIi8+Ci0gICAgPGVsZW1lbnQgcmVmPSJkczpNZ210RGF0YSIvPgotICAgIDxhbnkgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG5hbWVzcGFjZT0iIyNvdGhlciIvPgotICAgIDwhLS0gKDEsMSkgZWxlbWVudHMgZnJvbSAoMCx1bmJvdW5kZWQpIG5hbWVzcGFjZXMgLS0+Ci0gIDwvY2hvaWNlPgotICA8YXR0cmlidXRlIG5hbWU9IklkIiB0eXBlPSJJRCIgdXNlPSJvcHRpb25hbCIvPiAKLTwvY29tcGxleFR5cGU+Ci0KLSAgPGVsZW1lbnQgbmFtZT0iS2V5TmFtZSIgdHlwZT0ic3RyaW5nIi8+Ci0gIDxlbGVtZW50IG5hbWU9Ik1nbXREYXRhIiB0eXBlPSJzdHJpbmciLz4KLQotICA8ZWxlbWVudCBuYW1lPSJLZXlWYWx1ZSIgdHlwZT0iZHM6S2V5VmFsdWVUeXBlIi8+IAotICA8Y29tcGxleFR5cGUgbmFtZT0iS2V5VmFsdWVUeXBlIiBtaXhlZD0idHJ1ZSI+Ci0gICA8Y2hvaWNlPgotICAgICA8ZWxlbWVudCByZWY9ImRzOkRTQUtleVZhbHVlIi8+Ci0gICAgIDxlbGVtZW50IHJlZj0iZHM6UlNBS2V5VmFsdWUiLz4KLSAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICA8L2Nob2ljZT4KLSAgPC9jb21wbGV4VHlwZT4KLQotICA8ZWxlbWVudCBuYW1lPSJSZXRyaWV2YWxNZXRob2QiIHR5cGU9ImRzOlJldHJpZXZhbE1ldGhvZFR5cGUiLz4gCi0gIDxjb21wbGV4VHlwZSBuYW1lPSJSZXRyaWV2YWxNZXRob2RUeXBlIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCByZWY9ImRzOlRyYW5zZm9ybXMiIG1pbk9jY3Vycz0iMCIvPiAKLSAgICA8L3NlcXVlbmNlPiAgCi0gICAgPGF0dHJpYnV0ZSBuYW1lPSJVUkkiIHR5cGU9ImFueVVSSSIvPgotICAgIDxhdHRyaWJ1dGUgbmFtZT0iVHlwZSIgdHlwZT0iYW55VVJJIiB1c2U9Im9wdGlvbmFsIi8+Ci0gIDwvY29tcGxleFR5cGU+Ci0KLTwhLS0gU3RhcnQgWDUwOURhdGEgLS0+Ci0KLTxlbGVtZW50IG5hbWU9Ilg1MDlEYXRhIiB0eXBlPSJkczpYNTA5RGF0YVR5cGUiLz4gCi08Y29tcGxleFR5cGUgbmFtZT0iWDUwOURhdGFUeXBlIj4KLSAgPHNlcXVlbmNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICA8Y2hvaWNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0iWDUwOUlzc3VlclNlcmlhbCIgdHlwZT0iZHM6WDUwOUlzc3VlclNlcmlhbFR5cGUiLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9Ilg1MDlTS0kiIHR5cGU9ImJhc2U2NEJpbmFyeSIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0iWDUwOVN1YmplY3ROYW1lIiB0eXBlPSJzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9Ilg1MDlDZXJ0aWZpY2F0ZSIgdHlwZT0iYmFzZTY0QmluYXJ5Ii8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJYNTA5Q1JMIiB0eXBlPSJiYXNlNjRCaW5hcnkiLz4KLSAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgIDwvY2hvaWNlPgotICA8L3NlcXVlbmNlPgotPC9jb21wbGV4VHlwZT4KLQotPGNvbXBsZXhUeXBlIG5hbWU9Ilg1MDlJc3N1ZXJTZXJpYWxUeXBlIj4gCi0gIDxzZXF1ZW5jZT4gCi0gICAgPGVsZW1lbnQgbmFtZT0iWDUwOUlzc3Vlck5hbWUiIHR5cGU9InN0cmluZyIvPiAKLSAgICA8ZWxlbWVudCBuYW1lPSJYNTA5U2VyaWFsTnVtYmVyIiB0eXBlPSJpbnRlZ2VyIi8+IAotICA8L3NlcXVlbmNlPgotPC9jb21wbGV4VHlwZT4KLQotPCEtLSBFbmQgWDUwOURhdGEgLS0+Ci0KLTwhLS0gQmVnaW4gUEdQRGF0YSAtLT4KLQotPGVsZW1lbnQgbmFtZT0iUEdQRGF0YSIgdHlwZT0iZHM6UEdQRGF0YVR5cGUiLz4gCi08Y29tcGxleFR5cGUgbmFtZT0iUEdQRGF0YVR5cGUiPiAKLSAgPGNob2ljZT4KLSAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJQR1BLZXlJRCIgdHlwZT0iYmFzZTY0QmluYXJ5Ii8+IAotICAgICAgPGVsZW1lbnQgbmFtZT0iUEdQS2V5UGFja2V0IiB0eXBlPSJiYXNlNjRCaW5hcnkiIG1pbk9jY3Vycz0iMCIvPiAKLSAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIgotICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgICA8c2VxdWVuY2U+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJQR1BLZXlQYWNrZXQiIHR5cGU9ImJhc2U2NEJpbmFyeSIvPiAKLSAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIgotICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgPC9jaG9pY2U+Ci08L2NvbXBsZXhUeXBlPgotCi08IS0tIEVuZCBQR1BEYXRhIC0tPgotCi08IS0tIEJlZ2luIFNQS0lEYXRhIC0tPgotCi08ZWxlbWVudCBuYW1lPSJTUEtJRGF0YSIgdHlwZT0iZHM6U1BLSURhdGFUeXBlIi8+IAotPGNvbXBsZXhUeXBlIG5hbWU9IlNQS0lEYXRhVHlwZSI+Ci0gIDxzZXF1ZW5jZSBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgPGVsZW1lbnQgbmFtZT0iU1BLSVNleHAiIHR5cGU9ImJhc2U2NEJpbmFyeSIvPgotICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIi8+Ci0gIDwvc2VxdWVuY2U+Ci08L2NvbXBsZXhUeXBlPiAKLQotPCEtLSBFbmQgU1BLSURhdGEgLS0+Ci0KLTwhLS0gRW5kIEtleUluZm8gLS0+Ci0KLTwhLS0gU3RhcnQgT2JqZWN0IChNYW5pZmVzdCwgU2lnbmF0dXJlUHJvcGVydHkpIC0tPgotCi08ZWxlbWVudCBuYW1lPSJPYmplY3QiIHR5cGU9ImRzOk9iamVjdFR5cGUiLz4gCi08Y29tcGxleFR5cGUgbmFtZT0iT2JqZWN0VHlwZSIgbWl4ZWQ9InRydWUiPgotICA8c2VxdWVuY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgPGFueSBuYW1lc3BhY2U9IiMjYW55IiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICA8L3NlcXVlbmNlPgotICA8YXR0cmlidXRlIG5hbWU9IklkIiB0eXBlPSJJRCIgdXNlPSJvcHRpb25hbCIvPiAKLSAgPGF0dHJpYnV0ZSBuYW1lPSJNaW1lVHlwZSIgdHlwZT0ic3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+IDwhLS0gYWRkIGEgZ3JlcCBmYWNldCAtLT4KLSAgPGF0dHJpYnV0ZSBuYW1lPSJFbmNvZGluZyIgdHlwZT0iYW55VVJJIiB1c2U9Im9wdGlvbmFsIi8+IAotPC9jb21wbGV4VHlwZT4KLQotPGVsZW1lbnQgbmFtZT0iTWFuaWZlc3QiIHR5cGU9ImRzOk1hbmlmZXN0VHlwZSIvPiAKLTxjb21wbGV4VHlwZSBuYW1lPSJNYW5pZmVzdFR5cGUiPgotICA8c2VxdWVuY2U+Ci0gICAgPGVsZW1lbnQgcmVmPSJkczpSZWZlcmVuY2UiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+IAotICA8L3NlcXVlbmNlPgotICA8YXR0cmlidXRlIG5hbWU9IklkIiB0eXBlPSJJRCIgdXNlPSJvcHRpb25hbCIvPiAKLTwvY29tcGxleFR5cGU+Ci0KLTxlbGVtZW50IG5hbWU9IlNpZ25hdHVyZVByb3BlcnRpZXMiIHR5cGU9ImRzOlNpZ25hdHVyZVByb3BlcnRpZXNUeXBlIi8+IAotPGNvbXBsZXhUeXBlIG5hbWU9IlNpZ25hdHVyZVByb3BlcnRpZXNUeXBlIj4KLSAgPHNlcXVlbmNlPgotICAgIDxlbGVtZW50IHJlZj0iZHM6U2lnbmF0dXJlUHJvcGVydHkiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+IAotICA8L3NlcXVlbmNlPgotICA8YXR0cmlidXRlIG5hbWU9IklkIiB0eXBlPSJJRCIgdXNlPSJvcHRpb25hbCIvPiAKLTwvY29tcGxleFR5cGU+Ci0KLSAgIDxlbGVtZW50IG5hbWU9IlNpZ25hdHVyZVByb3BlcnR5IiB0eXBlPSJkczpTaWduYXR1cmVQcm9wZXJ0eVR5cGUiLz4gCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iU2lnbmF0dXJlUHJvcGVydHlUeXBlIiBtaXhlZD0idHJ1ZSI+Ci0gICAgIDxjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgICAgIDwhLS0gKDEsMSkgZWxlbWVudHMgZnJvbSAoMSx1bmJvdW5kZWQpIG5hbWVzcGFjZXMgLS0+Ci0gICAgIDwvY2hvaWNlPgotICAgICA8YXR0cmlidXRlIG5hbWU9IlRhcmdldCIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+IAotICAgICA8YXR0cmlidXRlIG5hbWU9IklkIiB0eXBlPSJJRCIgdXNlPSJvcHRpb25hbCIvPiAKLSAgIDwvY29tcGxleFR5cGU+Ci0KLTwhLS0gRW5kIE9iamVjdCAoTWFuaWZlc3QsIFNpZ25hdHVyZVByb3BlcnR5KSAtLT4KLQotPCEtLSBTdGFydCBBbGdvcml0aG0gUGFyYW1ldGVycyAtLT4KLQotPHNpbXBsZVR5cGUgbmFtZT0iSE1BQ091dHB1dExlbmd0aFR5cGUiPgotICA8cmVzdHJpY3Rpb24gYmFzZT0iaW50ZWdlciIvPgotPC9zaW1wbGVUeXBlPgotCi08IS0tIFN0YXJ0IEtleVZhbHVlIEVsZW1lbnQtdHlwZXMgLS0+Ci0KLTxlbGVtZW50IG5hbWU9IkRTQUtleVZhbHVlIiB0eXBlPSJkczpEU0FLZXlWYWx1ZVR5cGUiLz4KLTxjb21wbGV4VHlwZSBuYW1lPSJEU0FLZXlWYWx1ZVR5cGUiPgotICA8c2VxdWVuY2U+Ci0gICAgPHNlcXVlbmNlIG1pbk9jY3Vycz0iMCI+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJQIiB0eXBlPSJkczpDcnlwdG9CaW5hcnkiLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9IlEiIHR5cGU9ImRzOkNyeXB0b0JpbmFyeSIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICAgPGVsZW1lbnQgbmFtZT0iRyIgdHlwZT0iZHM6Q3J5cHRvQmluYXJ5IiBtaW5PY2N1cnM9IjAiLz4KLSAgICA8ZWxlbWVudCBuYW1lPSJZIiB0eXBlPSJkczpDcnlwdG9CaW5hcnkiLz4KLSAgICA8ZWxlbWVudCBuYW1lPSJKIiB0eXBlPSJkczpDcnlwdG9CaW5hcnkiIG1pbk9jY3Vycz0iMCIvPgotICAgIDxzZXF1ZW5jZSBtaW5PY2N1cnM9IjAiPgotICAgICAgPGVsZW1lbnQgbmFtZT0iU2VlZCIgdHlwZT0iZHM6Q3J5cHRvQmluYXJ5Ii8+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJQZ2VuQ291bnRlciIgdHlwZT0iZHM6Q3J5cHRvQmluYXJ5Ii8+Ci0gICAgPC9zZXF1ZW5jZT4KLSAgPC9zZXF1ZW5jZT4KLTwvY29tcGxleFR5cGU+Ci0KLTxlbGVtZW50IG5hbWU9IlJTQUtleVZhbHVlIiB0eXBlPSJkczpSU0FLZXlWYWx1ZVR5cGUiLz4KLTxjb21wbGV4VHlwZSBuYW1lPSJSU0FLZXlWYWx1ZVR5cGUiPgotICA8c2VxdWVuY2U+Ci0gICAgPGVsZW1lbnQgbmFtZT0iTW9kdWx1cyIgdHlwZT0iZHM6Q3J5cHRvQmluYXJ5Ii8+IAotICAgIDxlbGVtZW50IG5hbWU9IkV4cG9uZW50IiB0eXBlPSJkczpDcnlwdG9CaW5hcnkiLz4gCi0gIDwvc2VxdWVuY2U+Ci08L2NvbXBsZXhUeXBlPiAKLQotPCEtLSBFbmQgS2V5VmFsdWUgRWxlbWVudC10eXBlcyAtLT4KLQotPCEtLSBFbmQgU2lnbmF0dXJlIC0tPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3YyL3hraXQvc2NoZW1hcy9lYXN5cG8vZWFzeXBvLnhzZCBiL3YyL3hraXQvc2NoZW1hcy9lYXN5cG8vZWFzeXBvLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEyZDFkNi4uMDAwMDAwMAotLS0gYS92Mi94a2l0L3NjaGVtYXMvZWFzeXBvL2Vhc3lwby54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi08eHM6c2NoZW1hCi0gICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICB4bWxuczpwbz0iaHR0cDovL29wZW51cmkub3JnL2Vhc3lwbyIKLSAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL29wZW51cmkub3JnL2Vhc3lwbyIKLSAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJwdXJjaGFzZS1vcmRlciI+Ci0gICAgPHhzOmNvbXBsZXhUeXBlPgotICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJjdXN0b21lciIgdHlwZT0icG86Y3VzdG9tZXIiLz4KLSAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iZGF0ZSIgdHlwZT0ieHM6ZGF0ZVRpbWUiLz4KLSAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ibGluZS1pdGVtIiB0eXBlPSJwbzpsaW5lLWl0ZW0iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ic2hpcHBlciIgdHlwZT0icG86c2hpcHBlciIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KLSAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPC94czpjb21wbGV4VHlwZT4KLSAgPC94czplbGVtZW50PgotCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJjdXN0b21lciI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJhZGRyZXNzIiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICA8L3hzOnNlcXVlbmNlPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYWdlIiB0eXBlPSJ4czppbnQiLz4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ibGluZS1pdGVtIj4KLSAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIgdHlwZT0ieHM6c3RyaW5nIi8+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJwZXItdW5pdC1vdW5jZXMiIHR5cGU9InhzOmRlY2ltYWwiLz4KLSAgICAgIDx4czplbGVtZW50IG5hbWU9InByaWNlIiB0eXBlPSJ4czpkZWNpbWFsIi8+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJxdWFudGl0eSIgdHlwZT0ieHM6aW50ZWdlciIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9InNoaXBwZXIiPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgIDx4czplbGVtZW50IG5hbWU9Im5hbWUiIHR5cGU9InhzOnN0cmluZyIvPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icGVyLW91bmNlLXJhdGUiIHR5cGU9InhzOmRlY2ltYWwiLz4KLSAgICA8L3hzOnNlcXVlbmNlPgotICA8L3hzOmNvbXBsZXhUeXBlPgotCi08L3hzOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3YyL3hraXQvc2NoZW1hcy9lYXN5cG8vZWFzeXBvLnhzZGNvbmZpZyBiL3YyL3hraXQvc2NoZW1hcy9lYXN5cG8vZWFzeXBvLnhzZGNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFkYjY4NS4uMDAwMDAwMAotLS0gYS92Mi94a2l0L3NjaGVtYXMvZWFzeXBvL2Vhc3lwby54c2Rjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08eGI6Y29uZmlnIHhtbG5zOnhiPSJodHRwOi8vd3d3LmJlYS5jb20vMjAwMi8wOS94YmVhbi9jb25maWciCi0gICAgICAgICAgIHhtbG5zOmVwPSJodHRwOi8vb3BlbnVyaS5vcmcvZWFzeXBvIj4KLQotICA8eGI6bmFtZXNwYWNlIHVyaT0iaHR0cDovL29wZW51cmkub3JnL2Vhc3lwbyI+Ci0gICAgPHhiOnBhY2thZ2U+Y29tLmVhc3lwbzwveGI6cGFja2FnZT4KLSAgPC94YjpuYW1lc3BhY2U+Ci0KLSAgPHhiOm5hbWVzcGFjZSB1cmk9IiMjYW55Ij4KLSAgICA8eGI6cHJlZml4PlhtbDwveGI6cHJlZml4PgotICAgIDx4YjpzdWZmaXg+QmVhbjwveGI6c3VmZml4PgotICA8L3hiOm5hbWVzcGFjZT4KLQotPC94Yjpjb25maWc+CmRpZmYgLS1naXQgYS92Mi94a2l0L3NjaGVtYXMvajJlZS9YTUwueHNkIGIvdjIveGtpdC9zY2hlbWFzL2oyZWUvWE1MLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY4YWRkOS4uMDAwMDAwMAotLS0gYS92Mi94a2l0L3NjaGVtYXMvajJlZS9YTUwueHNkCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJz8+Ci08IURPQ1RZUEUgeHM6c2NoZW1hIFBVQkxJQyAiLS8vVzNDLy9EVEQgWE1MU0NIRU1BIDIwMDEwMi8vRU4iICJYTUxTY2hlbWEuZHRkIiA+Ci08eHM6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbDpsYW5nPSJlbiI+Ci0KLSA8eHM6YW5ub3RhdGlvbj4KLSAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBTZWUgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLmh0bWwgYW5kCi0gICBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIG5hbWVzcGFjZS4KLSAgPC94czpkb2N1bWVudGF0aW9uPgotIDwveHM6YW5ub3RhdGlvbj4KLQotIDx4czphbm5vdGF0aW9uPgotICA8eHM6ZG9jdW1lbnRhdGlvbj5UaGlzIHNjaGVtYSBkZWZpbmVzIGF0dHJpYnV0ZXMgYW5kIGFuIGF0dHJpYnV0ZSBncm91cAotICAgICAgICBzdWl0YWJsZSBmb3IgdXNlIGJ5Ci0gICAgICAgIHNjaGVtYXMgd2lzaGluZyB0byBhbGxvdyB4bWw6YmFzZSwgeG1sOmxhbmcgb3IgeG1sOnNwYWNlIGF0dHJpYnV0ZXMKLSAgICAgICAgb24gZWxlbWVudHMgdGhleSBkZWZpbmUuCi0KLSAgICAgICAgVG8gZW5hYmxlIHRoaXMsIHN1Y2ggYSBzY2hlbWEgbXVzdCBpbXBvcnQgdGhpcyBzY2hlbWEKLSAgICAgICAgZm9yIHRoZSBYTUwgbmFtZXNwYWNlLCBlLmcuIGFzIGZvbGxvd3M6Ci0gICAgICAgICZsdDtzY2hlbWEgLiAuIC4+Ci0gICAgICAgICAuIC4gLgotICAgICAgICAgJmx0O2ltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIKLSAgICAgICAgICAgICAgICAgICAgc2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDMveG1sLnhzZCIvPgotCi0gICAgICAgIFN1YnNlcXVlbnRseSwgcXVhbGlmaWVkIHJlZmVyZW5jZSB0byBhbnkgb2YgdGhlIGF0dHJpYnV0ZXMKLSAgICAgICAgb3IgdGhlIGdyb3VwIGRlZmluZWQgYmVsb3cgd2lsbCBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdCwgZS5nLgotCi0gICAgICAgICZsdDt0eXBlIC4gLiAuPgotICAgICAgICAgLiAuIC4KLSAgICAgICAgICZsdDthdHRyaWJ1dGVHcm91cCByZWY9InhtbDpzcGVjaWFsQXR0cnMiLz4KLSAKLSAgICAgICAgIHdpbGwgZGVmaW5lIGEgdHlwZSB3aGljaCB3aWxsIHNjaGVtYS12YWxpZGF0ZSBhbiBpbnN0YW5jZQotICAgICAgICAgZWxlbWVudCB3aXRoIGFueSBvZiB0aG9zZSBhdHRyaWJ1dGVzPC94czpkb2N1bWVudGF0aW9uPgotIDwveHM6YW5ub3RhdGlvbj4KLQotIDx4czphbm5vdGF0aW9uPgotICA8eHM6ZG9jdW1lbnRhdGlvbj5JbiBrZWVwaW5nIHdpdGggdGhlIFhNTCBTY2hlbWEgV0cncyBzdGFuZGFyZCB2ZXJzaW9uaW5nCi0gICBwb2xpY3ksIHRoaXMgc2NoZW1hIGRvY3VtZW50IHdpbGwgcGVyc2lzdCBhdAotICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS8wMy94bWwueHNkLgotICAgQXQgdGhlIGRhdGUgb2YgaXNzdWUgaXQgY2FuIGFsc28gYmUgZm91bmQgYXQKLSAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZC4KLSAgIFRoZSBzY2hlbWEgZG9jdW1lbnQgYXQgdGhhdCBVUkkgbWF5IGhvd2V2ZXIgY2hhbmdlIGluIHRoZSBmdXR1cmUsCi0gICBpbiBvcmRlciB0byByZW1haW4gY29tcGF0aWJsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBYTUwgU2NoZW1hCi0gICBpdHNlbGYuICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIFhNTCBTY2hlbWEgbmFtZXNwYWNlIGNoYW5nZXMsIHRoZSB2ZXJzaW9uCi0gICBvZiB0aGlzIGRvY3VtZW50IGF0Ci0gICBodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2Qgd2lsbCBjaGFuZ2UKLSAgIGFjY29yZGluZ2x5OyB0aGUgdmVyc2lvbiBhdAotICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS8wMy94bWwueHNkIHdpbGwgbm90IGNoYW5nZS4KLSAgPC94czpkb2N1bWVudGF0aW9uPgotIDwveHM6YW5ub3RhdGlvbj4KLQotIDx4czphdHRyaWJ1dGUgbmFtZT0ibGFuZyIgdHlwZT0ieHM6bGFuZ3VhZ2UiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPkluIGR1ZSBjb3Vyc2UsIHdlIHNob3VsZCBpbnN0YWxsIHRoZSByZWxldmFudCBJU08gMi0gYW5kIDMtbGV0dGVyCi0gICAgICAgICBjb2RlcyBhcyB0aGUgZW51bWVyYXRlZCBwb3NzaWJsZSB2YWx1ZXMgLiAuIC48L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSA8L3hzOmF0dHJpYnV0ZT4KLQotIDx4czphdHRyaWJ1dGUgbmFtZT0ic3BhY2UiIGRlZmF1bHQ9InByZXNlcnZlIj4KLSAgPHhzOnNpbXBsZVR5cGU+Ci0gICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6TkNOYW1lIj4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImRlZmF1bHQiLz4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InByZXNlcnZlIi8+Ci0gICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0gPC94czphdHRyaWJ1dGU+Ci0KLSA8eHM6YXR0cmlidXRlIG5hbWU9ImJhc2UiIHR5cGU9InhzOmFueVVSSSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+U2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL3htbGJhc2UvIGZvcgotICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBhdHRyaWJ1dGUuPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czphdHRyaWJ1dGU+Ci0KLSA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3BlY2lhbEF0dHJzIj4KLSAgPHhzOmF0dHJpYnV0ZSByZWY9InhtbDpiYXNlIi8+Ci0gIDx4czphdHRyaWJ1dGUgcmVmPSJ4bWw6bGFuZyIvPgotICA8eHM6YXR0cmlidXRlIHJlZj0ieG1sOnNwYWNlIi8+Ci0gPC94czphdHRyaWJ1dGVHcm91cD4KLQotPC94czpzY2hlbWE+CmRpZmYgLS1naXQgYS92Mi94a2l0L3NjaGVtYXMvajJlZS9hcHBsaWNhdGlvbi1jbGllbnRfMV80LnhzZCBiL3YyL3hraXQvc2NoZW1hcy9qMmVlL2FwcGxpY2F0aW9uLWNsaWVudF8xXzQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTA0Zjg0Li4wMDAwMDAwCi0tLSBhL3YyL3hraXQvc2NoZW1hcy9qMmVlL2FwcGxpY2F0aW9uLWNsaWVudF8xXzQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjc2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKLSAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKLSAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0gICAgIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKLSAgICAgdmVyc2lvbj0iMS40Ij4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLUAoIylhcHBsaWNhdGlvbi1jbGllbnRfMV80LnhzZHMJMS43IDA3LzA4LzAyCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1Db3B5cmlnaHQgMjAwMiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCA5MDEgU2FuIEFudG9uaW8KLVJvYWQsIFBhbG8gQWx0bywgQ2FsaWZvcm5pYSA5NDMwMywgVS5TLkEuIEFsbCByaWdodHMKLXJlc2VydmVkLgotCi1TdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGhhcyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzCi1yZWxhdGluZyB0byB0ZWNobm9sb2d5IGRlc2NyaWJlZCBpbiB0aGlzIGRvY3VtZW50LiBJbgotcGFydGljdWxhciwgYW5kIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlc2UgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgbWF5IGluY2x1ZGUgb25lIG9yIG1vcmUgb2YgdGhlIFUuUy4gcGF0ZW50cwotbGlzdGVkIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9wYXRlbnRzIGFuZCBvbmUgb3IgbW9yZQotYWRkaXRpb25hbCBwYXRlbnRzIG9yIHBlbmRpbmcgcGF0ZW50IGFwcGxpY2F0aW9ucyBpbiB0aGUKLVUuUy4gYW5kIG90aGVyIGNvdW50cmllcy4KLQotVGhpcyBkb2N1bWVudCBhbmQgdGhlIHRlY2hub2xvZ3kgd2hpY2ggaXQgZGVzY3JpYmVzIGFyZQotZGlzdHJpYnV0ZWQgdW5kZXIgbGljZW5zZXMgcmVzdHJpY3RpbmcgdGhlaXIgdXNlLCBjb3B5aW5nLAotZGlzdHJpYnV0aW9uLCBhbmQgZGVjb21waWxhdGlvbi4gTm8gcGFydCBvZiB0aGlzIGRvY3VtZW50Ci1tYXkgYmUgcmVwcm9kdWNlZCBpbiBhbnkgZm9ybSBieSBhbnkgbWVhbnMgd2l0aG91dCBwcmlvcgotd3JpdHRlbiBhdXRob3JpemF0aW9uIG9mIFN1biBhbmQgaXRzIGxpY2Vuc29ycywgaWYgYW55LgotCi1UaGlyZC1wYXJ0eSBzb2Z0d2FyZSwgaW5jbHVkaW5nIGZvbnQgdGVjaG5vbG9neSwgaXMKLWNvcHlyaWdodGVkIGFuZCBsaWNlbnNlZCBmcm9tIFN1biBzdXBwbGllcnMuCi0KLVN1biwgU3VuIE1pY3Jvc3lzdGVtcywgdGhlIFN1biBsb2dvLCBTb2xhcmlzLCBKYXZhLCBKMkVFLAotSmF2YVNlcnZlciBQYWdlcywgRW50ZXJwcmlzZSBKYXZhQmVhbnMgYW5kIHRoZSBKYXZhIENvZmZlZQotQ3VwIGxvZ28gYXJlIHRyYWRlbWFya3Mgb3IgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9mIFN1bgotTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVLlMuIGFuZCBvdGhlciBjb3VudHJpZXMuCi0KLUZlZGVyYWwgQWNxdWlzaXRpb25zOiBDb21tZXJjaWFsIFNvZnR3YXJlIC0gR292ZXJubWVudCBVc2VycwotU3ViamVjdCB0byBTdGFuZGFyZCBMaWNlbnNlIFRlcm1zIGFuZCBDb25kaXRpb25zLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGlzIGlzIHRoZSBYTUwgU2NoZW1hIGZvciB0aGUgYXBwbGljYXRpb24gY2xpZW50IDEuNAotZGVwbG95bWVudCBkZXNjcmlwdG9yLiAgQWxsIGFwcGxpY2F0aW9uIGNsaWVudCBkZXBsb3ltZW50Ci1kZXNjcmlwdG9ycyBtdXN0IGluZGljYXRlIHRoZSBhcHBsaWNhdGlvbiBjbGllbnQKLXNjaGVtYSBieSB1c2luZyB0aGUgSjJFRSBuYW1lc3BhY2U6Ci0KLWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKLQotYW5kIGJ5IGluZGljYXRpbmcgdGhlIHZlcnNpb24gb2YgdGhlIHNjaGVtYSBieQotdXNpbmcgdGhlIHZlcnNpb24gZWxlbWVudCBhcyBzaG93biBiZWxvdzoKLQotICAgIDxhcHBsaWNhdGlvbi1jbGllbnQgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiCi0gICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQotICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvYXBwbGljYXRpb24tY2xpZW50XzFfNC54c2QiCi0gICAgIHZlcnNpb249IjEuNCI+Ci0KLSAgICAuLi4KLSAgICA8L2FwcGxpY2F0aW9uLWNsaWVudD4KLQotVGhlIGluc3RhbmNlIGRvY3VtZW50cyBtYXkgaW5kaWNhdGUgdGhlIHB1Ymxpc2hlZCB2ZXJzaW9uIG9mCi10aGUgc2NoZW1hIHVzaW5nIHRoZSB4c2k6c2NoZW1hTG9jYXRpb24gYXR0cmlidXRlIGZvciBKMkVFCi1uYW1lc3BhY2Ugd2l0aCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uOgotCi1odHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL2FwcGxpY2F0aW9uLWNsaWVudF8xXzQueHNkCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBmb2xsb3dpbmcgY29udmVudGlvbnMgYXBwbHkgdG8gYWxsIEoyRUUKLWRlcGxveW1lbnQgZGVzY3JpcHRvciBlbGVtZW50cyB1bmxlc3MgaW5kaWNhdGVkIG90aGVyd2lzZS4KLQotLSBJbiBlbGVtZW50cyB0aGF0IHNwZWNpZnkgYSBwYXRobmFtZSB0byBhIGZpbGUgd2l0aGluIHRoZQotICBzYW1lIEpBUiBmaWxlLCByZWxhdGl2ZSBmaWxlbmFtZXMgKGkuZS4sIHRob3NlIG5vdAotICBzdGFydGluZyB3aXRoICIvIikgYXJlIGNvbnNpZGVyZWQgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YKLSAgdGhlIEpBUiBmaWxlJ3MgbmFtZXNwYWNlLiAgQWJzb2x1dGUgZmlsZW5hbWVzIChpLmUuLCB0aG9zZQotICBzdGFydGluZyB3aXRoICIvIikgYWxzbyBzcGVjaWZ5IG5hbWVzIGluIHRoZSByb290IG9mIHRoZQotICBKQVIgZmlsZSdzIG5hbWVzcGFjZS4gIEluIGdlbmVyYWwsIHJlbGF0aXZlIG5hbWVzIGFyZQotICBwcmVmZXJyZWQuICBUaGUgZXhjZXB0aW9uIGlzIC53YXIgZmlsZXMgd2hlcmUgYWJzb2x1dGUKLSAgbmFtZXMgYXJlIHByZWZlcnJlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgU2VydmxldCBBUEkuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi08aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iajJlZV8xXzQueHNkIi8+Ci0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi0KLTx4c2Q6ZWxlbWVudCBuYW1lPSJhcHBsaWNhdGlvbi1jbGllbnQiIHR5cGU9ImoyZWU6YXBwbGljYXRpb24tY2xpZW50VHlwZSI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIFRoZSBhcHBsaWNhdGlvbi1jbGllbnQgZWxlbWVudCBpcyB0aGUgcm9vdCBlbGVtZW50IG9mIGFuCi0gICAgYXBwbGljYXRpb24gY2xpZW50IGRlcGxveW1lbnQgZGVzY3JpcHRvci4gIFRoZSBhcHBsaWNhdGlvbgotICAgIGNsaWVudCBkZXBsb3ltZW50IGRlc2NyaXB0b3IgZGVzY3JpYmVzIHRoZSBFSkIgY29tcG9uZW50cwotICAgIGFuZCBleHRlcm5hbCByZXNvdXJjZXMgcmVmZXJlbmNlZCBieSB0aGUgYXBwbGljYXRpb24KLSAgICBjbGllbnQuCi0KLSAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIDwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnVuaXF1ZSBuYW1lPSJlbnYtZW50cnktbmFtZS11bmlxdWVuZXNzIj4KLSAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgVGhlIGVudi1lbnRyeS1uYW1lIGVsZW1lbnQgY29udGFpbnMgdGhlIG5hbWUgb2YgYW4KLSAgICBhcHBsaWNhdGlvbiBjbGllbnQncyBlbnZpcm9ubWVudCBlbnRyeS4gIFRoZSBuYW1lIGlzIGEgSk5ESQotICAgIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGphdmE6Y29tcC9lbnYgY29udGV4dC4gIFRoZSBuYW1lIG11c3QKLSAgICBiZSB1bmlxdWUgd2l0aGluIGFuIGFwcGxpY2F0aW9uIGNsaWVudC4KLQotICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpzZWxlY3RvciB4cGF0aD0iajJlZTplbnYtZW50cnkiLz4KLSAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTplbnYtZW50cnktbmFtZSIvPgotICAgIDwveHNkOnVuaXF1ZT4KLQotICAgIDx4c2Q6dW5pcXVlIG5hbWU9ImVqYi1yZWYtbmFtZS11bmlxdWVuZXNzIj4KLSAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgVGhlIGVqYi1yZWYtbmFtZSBlbGVtZW50IGNvbnRhaW5zIHRoZSBuYW1lIG9mIGFuIEVKQgotICAgIHJlZmVyZW5jZS4gVGhlIEVKQiByZWZlcmVuY2UgaXMgYW4gZW50cnkgaW4gdGhlIGFwcGxpY2F0aW9uCi0gICAgY2xpZW50J3MgZW52aXJvbm1lbnQgYW5kIGlzIHJlbGF0aXZlIHRvIHRoZQotICAgIGphdmE6Y29tcC9lbnYgY29udGV4dC4gVGhlIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZQotICAgIGFwcGxpY2F0aW9uIGNsaWVudC4KLQotICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgbmFtZSBpcyBwcmVmaXhlZCB3aXRoICJlamIvIi4KLQotICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpzZWxlY3RvciB4cGF0aD0iajJlZTplamItcmVmIi8+Ci0gICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6ZWpiLXJlZi1uYW1lIi8+Ci0gICAgPC94c2Q6dW5pcXVlPgotCi0gICAgPHhzZDp1bmlxdWUgbmFtZT0icmVzLXJlZi1uYW1lLXVuaXF1ZW5lc3MiPgotICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICBUaGUgcmVzLXJlZi1uYW1lIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEKLSAgICByZXNvdXJjZSBtYW5hZ2VyIGNvbm5lY3Rpb24gZmFjdG9yeSByZWZlcmVuY2UuVGhlIG5hbWUKLSAgICBpcyBhIEpOREkgbmFtZSByZWxhdGl2ZSB0byB0aGUgamF2YTpjb21wL2VudiBjb250ZXh0LgotICAgIFRoZSBuYW1lIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhbiBhcHBsaWNhdGlvbiBjbGllbnQuCi0KLSAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6cmVzb3VyY2UtcmVmIi8+Ci0gICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6cmVzLXJlZi1uYW1lIi8+Ci0gICAgPC94c2Q6dW5pcXVlPgotCi0gICAgPHhzZDp1bmlxdWUgbmFtZT0icmVzb3VyY2UtZW52LXJlZi11bmlxdWVuZXNzIj4KLSAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgVGhlIHJlc291cmNlLWVudi1yZWYtbmFtZSBlbGVtZW50IHNwZWNpZmllcyB0aGUgbmFtZSBvZgotICAgIGEgcmVzb3VyY2UgZW52aXJvbm1lbnQgcmVmZXJlbmNlOyBpdHMgdmFsdWUgaXMgdGhlCi0gICAgZW52aXJvbm1lbnQgZW50cnkgbmFtZSB1c2VkIGluIHRoZSBhcHBsaWNhdGlvbiBjbGllbnQKLSAgICBjb2RlLiBUaGUgbmFtZSBpcyBhIEpOREkgbmFtZSByZWxhdGl2ZSB0byB0aGUKLSAgICBqYXZhOmNvbXAvZW52IGNvbnRleHQgYW5kIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhbgotICAgIGFwcGxpY2F0aW9uIGNsaWVudC4KLQotICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpzZWxlY3RvciB4cGF0aD0iajJlZTpyZXNvdXJjZS1lbnYtcmVmIi8+Ci0gICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6cmVzb3VyY2UtZW52LXJlZi1uYW1lIi8+Ci0gICAgPC94c2Q6dW5pcXVlPgotCi0gICAgPHhzZDp1bmlxdWUgbmFtZT0ibWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtdW5pcXVlbmVzcyI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIFRoZSBtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lIGVsZW1lbnQgc3BlY2lmaWVzIHRoZQotICAgIG5hbWUgb2YgYSBtZXNzYWdlIGRlc3RpbmF0aW9uIHJlZmVyZW5jZTsgaXRzIHZhbHVlIGlzCi0gICAgdGhlIG1lc3NhZ2UgZGVzdGluYXRpb24gcmVmZXJlbmNlIG5hbWUgdXNlZCBpbiB0aGUKLSAgICBhcHBsaWNhdGlvbiBjbGllbnQgY29kZS4gVGhlIG5hbWUgaXMgYSBKTkRJIG5hbWUKLSAgICByZWxhdGl2ZSB0byB0aGUgamF2YTpjb21wL2VudiBjb250ZXh0IGFuZCBtdXN0IGJlIHVuaXF1ZQotICAgIHdpdGhpbiBhbiBhcHBsaWNhdGlvbiBjbGllbnQuCi0KLSAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYiLz4KLSAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTptZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lIi8+Ci0gICAgPC94c2Q6dW5pcXVlPgotCi08L3hzZDplbGVtZW50PgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iYXBwbGljYXRpb24tY2xpZW50VHlwZSI+Ci0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXNjcmlwdGlvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkaXNwbGF5LW5hbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRpc3BsYXktbmFtZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaWNvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6aWNvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJlbnYtZW50cnkiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVudi1lbnRyeVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJlamItcmVmIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplamItcmVmVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJlc291cmNlLXJlZiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cmVzb3VyY2UtcmVmVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJlc291cmNlLWVudi1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnJlc291cmNlLWVudi1yZWZUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOm1lc3NhZ2UtZGVzdGluYXRpb24tcmVmVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJjYWxsYmFjay1oYW5kbGVyIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpmdWxseS1xdWFsaWZpZWQtY2xhc3NUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGNhbGxiYWNrLWhhbmRsZXIgZWxlbWVudCBuYW1lcyBhIGNsYXNzIHByb3ZpZGVkIGJ5Ci0gICAgICAgIHRoZSBhcHBsaWNhdGlvbi4gIFRoZSBjbGFzcyBtdXN0IGhhdmUgYSBubyBhcmdzCi0gICAgICAgIGNvbnN0cnVjdG9yIGFuZCBtdXN0IGltcGxlbWVudCB0aGUKLSAgICAgICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5DYWxsYmFja0hhbmRsZXIKLSAgICAgICAgaW50ZXJmYWNlLiAgVGhlIGNsYXNzIHdpbGwgYmUgaW5zdGFudGlhdGVkIGJ5IHRoZQotICAgICAgICBhcHBsaWNhdGlvbiBjbGllbnQgY29udGFpbmVyIGFuZCB1c2VkIGJ5IHRoZSBjb250YWluZXIKLSAgICAgICAgdG8gY29sbGVjdCBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbiBmcm9tIHRoZSB1c2VyLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJtZXNzYWdlLWRlc3RpbmF0aW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTptZXNzYWdlLWRlc3RpbmF0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXBsb3ltZW50LWV4dGVuc2lvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVwbG95bWVudC1leHRlbnNpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLQotICAgIDwveHNkOnNlcXVlbmNlPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0idmVyc2lvbiIKLSAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRld2V5LXZlcnNpb25UeXBlIgotICAgICAgICAgICAgICAgICAgIGZpeGVkPSIxLjQiCi0gICAgICAgICAgICAgICAgICAgdXNlPSJyZXF1aXJlZCI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIFRoZSByZXF1aXJlZCB2YWx1ZSBmb3IgdGhlIHZlcnNpb24gaXMgMS40LgotCi0gICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICA8L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPC94c2Q6YXR0cmlidXRlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPC94c2Q6c2NoZW1hPgotCmRpZmYgLS1naXQgYS92Mi94a2l0L3NjaGVtYXMvajJlZS9hcHBsaWNhdGlvbl8xXzQueHNkIGIvdjIveGtpdC9zY2hlbWFzL2oyZWUvYXBwbGljYXRpb25fMV80LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUzMTEzYi4uMDAwMDAwMAotLS0gYS92Mi94a2l0L3NjaGVtYXMvajJlZS9hcHBsaWNhdGlvbl8xXzQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzI5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKLSAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKLSAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0gICAgIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKLSAgICAgdmVyc2lvbj0iMS40Ij4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLUAoIylhcHBsaWNhdGlvbl8xXzQueHNkcwkxLjYgMDgvMDkvMDIKLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLUNvcHlyaWdodCAyMDAyIFN1biBNaWNyb3N5c3RlbXMsIEluYy4sIDkwMSBTYW4gQW50b25pbwotUm9hZCwgUGFsbyBBbHRvLCBDYWxpZm9ybmlhIDk0MzAzLCBVLlMuQS4gQWxsIHJpZ2h0cwotcmVzZXJ2ZWQuCi0KLVN1biBNaWNyb3N5c3RlbXMsIEluYy4gaGFzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMKLXJlbGF0aW5nIHRvIHRlY2hub2xvZ3kgZGVzY3JpYmVkIGluIHRoaXMgZG9jdW1lbnQuIEluCi1wYXJ0aWN1bGFyLCBhbmQgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGVzZSBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBtYXkgaW5jbHVkZSBvbmUgb3IgbW9yZSBvZiB0aGUgVS5TLiBwYXRlbnRzCi1saXN0ZWQgYXQgaHR0cDovL3d3dy5zdW4uY29tL3BhdGVudHMgYW5kIG9uZSBvciBtb3JlCi1hZGRpdGlvbmFsIHBhdGVudHMgb3IgcGVuZGluZyBwYXRlbnQgYXBwbGljYXRpb25zIGluIHRoZQotVS5TLiBhbmQgb3RoZXIgY291bnRyaWVzLgotCi1UaGlzIGRvY3VtZW50IGFuZCB0aGUgdGVjaG5vbG9neSB3aGljaCBpdCBkZXNjcmliZXMgYXJlCi1kaXN0cmlidXRlZCB1bmRlciBsaWNlbnNlcyByZXN0cmljdGluZyB0aGVpciB1c2UsIGNvcHlpbmcsCi1kaXN0cmlidXRpb24sIGFuZCBkZWNvbXBpbGF0aW9uLiBObyBwYXJ0IG9mIHRoaXMgZG9jdW1lbnQKLW1heSBiZSByZXByb2R1Y2VkIGluIGFueSBmb3JtIGJ5IGFueSBtZWFucyB3aXRob3V0IHByaW9yCi13cml0dGVuIGF1dGhvcml6YXRpb24gb2YgU3VuIGFuZCBpdHMgbGljZW5zb3JzLCBpZiBhbnkuCi0KLVRoaXJkLXBhcnR5IHNvZnR3YXJlLCBpbmNsdWRpbmcgZm9udCB0ZWNobm9sb2d5LCBpcwotY29weXJpZ2h0ZWQgYW5kIGxpY2Vuc2VkIGZyb20gU3VuIHN1cHBsaWVycy4KLQotU3VuLCBTdW4gTWljcm9zeXN0ZW1zLCB0aGUgU3VuIGxvZ28sIFNvbGFyaXMsIEphdmEsIEoyRUUsCi1KYXZhU2VydmVyIFBhZ2VzLCBFbnRlcnByaXNlIEphdmFCZWFucyBhbmQgdGhlIEphdmEgQ29mZmVlCi1DdXAgbG9nbyBhcmUgdHJhZGVtYXJrcyBvciByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YgU3VuCi1NaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFUuUy4gYW5kIG90aGVyIGNvdW50cmllcy4KLQotRmVkZXJhbCBBY3F1aXNpdGlvbnM6IENvbW1lcmNpYWwgU29mdHdhcmUgLSBHb3Zlcm5tZW50IFVzZXJzCi1TdWJqZWN0IHRvIFN0YW5kYXJkIExpY2Vuc2UgVGVybXMgYW5kIENvbmRpdGlvbnMuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoaXMgaXMgdGhlIFhNTCBTY2hlbWEgZm9yIHRoZSBhcHBsaWNhdGlvbiAxLjQgZGVwbG95bWVudAotZGVzY3JpcHRvci4gIEFsbCBhcHBsaWNhdGlvbiBkZXBsb3ltZW50IGRlc2NyaXB0b3JzIG11c3QKLWluZGljYXRlIHRoYXQgdGhlIHNjaGVtYSBieSB1c2luZyB0aGUgSjJFRSBuYW1lc3BhY2UKLQotaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQotCi1hbmQgYnkgaW5kaWNhdGluZyB0aGUgdmVyc2lvbiBvZiB0aGUgc2NoZW1hIGJ5Ci11c2luZyB0aGUgdmVyc2lvbiBlbGVtZW50IGFzIHNob3duIGJlbG93OgotCi0gICAgPGFwcGxpY2F0aW9uIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIgotICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKLSAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS9hcHBsaWNhdGlvbl8xXzQueHNkIgotICAgICB2ZXJzaW9uPSIxLjQiPgotCi0gICAgLi4uCi0gICAgPC9hcHBsaWNhdGlvbj4KLQotVGhlIGluc3RhbmNlIGRvY3VtZW50cyBtYXkgaW5kaWNhdGUgdGhlIHB1Ymxpc2hlZCB2ZXJzaW9uIG9mCi10aGUgc2NoZW1hIHVzaW5nIHRoZSB4c2k6c2NoZW1hTG9jYXRpb24gYXR0cmlidXRlIGZvciBKMkVFCi1uYW1lc3BhY2Ugd2l0aCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uOgotCi1odHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL2FwcGxpY2F0aW9uXzFfNC54c2QKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGZvbGxvd2luZyBjb252ZW50aW9ucyBhcHBseSB0byBhbGwgSjJFRQotZGVwbG95bWVudCBkZXNjcmlwdG9yIGVsZW1lbnRzIHVubGVzcyBpbmRpY2F0ZWQgb3RoZXJ3aXNlLgotCi0tIEluIGVsZW1lbnRzIHRoYXQgc3BlY2lmeSBhIHBhdGhuYW1lIHRvIGEgZmlsZSB3aXRoaW4gdGhlCi0gIHNhbWUgSkFSIGZpbGUsIHJlbGF0aXZlIGZpbGVuYW1lcyAoaS5lLiwgdGhvc2Ugbm90Ci0gIHN0YXJ0aW5nIHdpdGggIi8iKSBhcmUgY29uc2lkZXJlZCByZWxhdGl2ZSB0byB0aGUgcm9vdCBvZgotICB0aGUgSkFSIGZpbGUncyBuYW1lc3BhY2UuICBBYnNvbHV0ZSBmaWxlbmFtZXMgKGkuZS4sIHRob3NlCi0gIHN0YXJ0aW5nIHdpdGggIi8iKSBhbHNvIHNwZWNpZnkgbmFtZXMgaW4gdGhlIHJvb3Qgb2YgdGhlCi0gIEpBUiBmaWxlJ3MgbmFtZXNwYWNlLiAgSW4gZ2VuZXJhbCwgcmVsYXRpdmUgbmFtZXMgYXJlCi0gIHByZWZlcnJlZC4gIFRoZSBleGNlcHRpb24gaXMgLndhciBmaWxlcyB3aGVyZSBhYnNvbHV0ZQotICBuYW1lcyBhcmUgcHJlZmVycmVkIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBTZXJ2bGV0IEFQSS4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLTx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iajJlZV8xXzQueHNkIi8+Ci0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi0KLTx4c2Q6ZWxlbWVudCBuYW1lPSJhcHBsaWNhdGlvbiIgdHlwZT0iajJlZTphcHBsaWNhdGlvblR5cGUiPgotICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICBUaGUgYXBwbGljYXRpb24gZWxlbWVudCBpcyB0aGUgcm9vdCBlbGVtZW50IG9mIGEgSjJFRQotICAgIGFwcGxpY2F0aW9uIGRlcGxveW1lbnQgZGVzY3JpcHRvci4KLQotICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6dW5pcXVlIG5hbWU9ImNvbnRleHQtcm9vdC11bmlxdWVuZXNzIj4KLSAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgVGhlIGNvbnRleHQtcm9vdCBlbGVtZW50IGNvbnRlbnQgbXVzdCBiZSB1bmlxdWUKLSAgICBpbiB0aGUgZWFyLgotCi0gICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOm1vZHVsZS9qMmVlOndlYiIvPgotICAgICAgICA8eHNkOmZpZWxkICAgIHhwYXRoPSJqMmVlOmNvbnRleHQtcm9vdCIvPgotICAgIDwveHNkOnVuaXF1ZT4KLQotICAgIDx4c2Q6dW5pcXVlIG5hbWU9InNlY3VyaXR5LXJvbGUtdW5pcXVlbmVzcyI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIFRoZSBzZWN1cml0eS1yb2xlLW5hbWUgZWxlbWVudCBjb250ZW50Ci0gICAgbXVzdCBiZSB1bmlxdWUgaW4gdGhlIGVhci4KLQotICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpzZWxlY3RvciB4cGF0aD0iajJlZTpzZWN1cml0eS1yb2xlIi8+Ci0gICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6cm9sZS1uYW1lIi8+Ci0gICAgPC94c2Q6dW5pcXVlPgotCi08L3hzZDplbGVtZW50PgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iYXBwbGljYXRpb25UeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGFwcGxpY2F0aW9uVHlwZSBkZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlCi1hcHBsaWNhdGlvbi4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRpc3BsYXktbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGlzcGxheS1uYW1lVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJpY29uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTppY29uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im1vZHVsZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bW9kdWxlVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGFwcGxpY2F0aW9uIGRlcGxveW1lbnQgZGVzY3JpcHRvciBtdXN0IGhhdmUgb25lCi0gICAgICAgIG1vZHVsZSBlbGVtZW50IGZvciBlYWNoIEoyRUUgbW9kdWxlIGluIHRoZQotICAgICAgICBhcHBsaWNhdGlvbiBwYWNrYWdlLiBBIG1vZHVsZSBlbGVtZW50IGlzIGRlZmluZWQKLSAgICAgICAgYnkgbW9kdWxlVHlwZSBkZWZpbml0aW9uLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzZWN1cml0eS1yb2xlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpzZWN1cml0eS1yb2xlVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXBsb3ltZW50LWV4dGVuc2lvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVwbG95bWVudC1leHRlbnNpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIgotICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGV3ZXktdmVyc2lvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgZml4ZWQ9IjEuNCIKLSAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIj4KLSAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgVGhlIHJlcXVpcmVkIHZhbHVlIGZvciB0aGUgdmVyc2lvbiBpcyAxLjQuCi0KLSAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgPC94c2Q6YXR0cmlidXRlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9Im1vZHVsZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgbW9kdWxlVHlwZSBkZWZpbmVzIGEgc2luZ2xlIEoyRUUgbW9kdWxlIGFuZCBjb250YWlucyBhCi1jb25uZWN0b3IsIGVqYiwgamF2YSwgb3Igd2ViIGVsZW1lbnQsIHdoaWNoIGluZGljYXRlcyB0aGUKLW1vZHVsZSB0eXBlIGFuZCBjb250YWlucyBhIHBhdGggdG8gdGhlIG1vZHVsZSBmaWxlLCBhbmQgYW4KLW9wdGlvbmFsIGFsdC1kZCBlbGVtZW50LCB3aGljaCBzcGVjaWZpZXMgYW4gb3B0aW9uYWwgVVJJIHRvCi10aGUgcG9zdC1hc3NlbWJseSB2ZXJzaW9uIG9mIHRoZSBkZXBsb3ltZW50IGRlc2NyaXB0b3IuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDpjaG9pY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iY29ubmVjdG9yIgotICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cGF0aFR5cGUiPgotICAgICAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgICAgICBUaGUgY29ubmVjdG9yIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBVUkkgb2YgYQotICAgICAgICAgICAgcmVzb3VyY2UgYWRhcHRlciBhcmNoaXZlIGZpbGUsIHJlbGF0aXZlIHRvIHRoZQotICAgICAgICAgICAgdG9wIGxldmVsIG9mIHRoZSBhcHBsaWNhdGlvbiBwYWNrYWdlLgotCi0gICAgICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZWpiIgotICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cGF0aFR5cGUiPgotICAgICAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgICAgICBUaGUgZWpiIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBVUkkgb2YgYW4gZWpiLWphciwKLSAgICAgICAgICAgIHJlbGF0aXZlIHRvIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIGFwcGxpY2F0aW9uCi0gICAgICAgICAgICBwYWNrYWdlLgotCi0gICAgICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iamF2YSIKLSAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnBhdGhUeXBlIj4KLSAgICAgICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICAgICAgVGhlIGphdmEgZWxlbWVudCBzcGVjaWZpZXMgdGhlIFVSSSBvZiBhIGphdmEKLSAgICAgICAgICAgIGFwcGxpY2F0aW9uIGNsaWVudCBtb2R1bGUsIHJlbGF0aXZlIHRvIHRoZSB0b3AKLSAgICAgICAgICAgIGxldmVsIG9mIHRoZSBhcHBsaWNhdGlvbiBwYWNrYWdlLgotCi0gICAgICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0id2ViIgotICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6d2ViVHlwZSIvPgotICAgICAgICA8L3hzZDpjaG9pY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJhbHQtZGQiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnBhdGhUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGFsdC1kZCBlbGVtZW50IHNwZWNpZmllcyBhbiBvcHRpb25hbCBVUkkgdG8gdGhlCi0gICAgICAgIHBvc3QtYXNzZW1ibHkgdmVyc2lvbiBvZiB0aGUgZGVwbG95bWVudCBkZXNjcmlwdG9yCi0gICAgICAgIGZpbGUgZm9yIGEgcGFydGljdWxhciBKMkVFIG1vZHVsZS4gIFRoZSBVUkkgbXVzdAotICAgICAgICBzcGVjaWZ5IHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBkZXBsb3ltZW50Ci0gICAgICAgIGRlc2NyaXB0b3IgZmlsZSByZWxhdGl2ZSB0byB0aGUgYXBwbGljYXRpb24ncyByb290Ci0gICAgICAgIGRpcmVjdG9yeS4gSWYgYWx0LWRkIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBkZXBsb3llcgotICAgICAgICBtdXN0IHJlYWQgdGhlIGRlcGxveW1lbnQgZGVzY3JpcHRvciBmcm9tIHRoZSBkZWZhdWx0Ci0gICAgICAgIGxvY2F0aW9uIGFuZCBmaWxlIG5hbWUgcmVxdWlyZWQgYnkgdGhlIHJlc3BlY3RpdmUKLSAgICAgICAgY29tcG9uZW50IHNwZWNpZmljYXRpb24uCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlcGxveW1lbnQtZXh0ZW5zaW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXBsb3ltZW50LWV4dGVuc2lvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCi0gICAgPC94c2Q6c2VxdWVuY2U+Ci08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9IndlYlR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgd2ViVHlwZSBkZWZpbmVzIHRoZSB3ZWItdXJpIGFuZCBjb250ZXh0LXJvb3Qgb2YKLWEgd2ViIGFwcGxpY2F0aW9uIG1vZHVsZS4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IndlYi11cmkiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnBhdGhUeXBlIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIHdlYi11cmkgZWxlbWVudCBzcGVjaWZpZXMgdGhlIFVSSSBvZiBhIHdlYgotICAgICAgICBhcHBsaWNhdGlvbiBmaWxlLCByZWxhdGl2ZSB0byB0aGUgdG9wIGxldmVsIG9mIHRoZQotICAgICAgICBhcHBsaWNhdGlvbiBwYWNrYWdlLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJjb250ZXh0LXJvb3QiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnN0cmluZyI+Ci0KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGNvbnRleHQtcm9vdCBlbGVtZW50IHNwZWNpZmllcyB0aGUgY29udGV4dCByb290Ci0gICAgICAgIG9mIGEgd2ViIGFwcGxpY2F0aW9uLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXBsb3ltZW50LWV4dGVuc2lvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVwbG95bWVudC1leHRlbnNpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08L3hzZDpzY2hlbWE+Ci0KZGlmZiAtLWdpdCBhL3YyL3hraXQvc2NoZW1hcy9qMmVlL2Nvbm5lY3Rvcl8xXzUueHNkIGIvdjIveGtpdC9zY2hlbWFzL2oyZWUvY29ubmVjdG9yXzFfNS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiZTU1YmQuLjAwMDAwMDAKLS0tIGEvdjIveGtpdC9zY2hlbWFzL2oyZWUvY29ubmVjdG9yXzFfNS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKLSAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKLSAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0gICAgIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKLSAgICAgdmVyc2lvbj0iMS41Ij4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLUAoIyljb25uZWN0b3JfMV81LnhzZHMJMS4xNiAwNy8wNi8wMgotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotQ29weXJpZ2h0IDIwMDIgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiwgOTAxIFNhbiBBbnRvbmlvCi1Sb2FkLCBQYWxvIEFsdG8sIENhbGlmb3JuaWEgOTQzMDMsIFUuUy5BLiBBbGwgcmlnaHRzCi1yZXNlcnZlZC4KLQotU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBoYXMgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cwotcmVsYXRpbmcgdG8gdGVjaG5vbG9neSBkZXNjcmliZWQgaW4gdGhpcyBkb2N1bWVudC4gSW4KLXBhcnRpY3VsYXIsIGFuZCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZXNlIGludGVsbGVjdHVhbAotcHJvcGVydHkgcmlnaHRzIG1heSBpbmNsdWRlIG9uZSBvciBtb3JlIG9mIHRoZSBVLlMuIHBhdGVudHMKLWxpc3RlZCBhdCBodHRwOi8vd3d3LnN1bi5jb20vcGF0ZW50cyBhbmQgb25lIG9yIG1vcmUKLWFkZGl0aW9uYWwgcGF0ZW50cyBvciBwZW5kaW5nIHBhdGVudCBhcHBsaWNhdGlvbnMgaW4gdGhlCi1VLlMuIGFuZCBvdGhlciBjb3VudHJpZXMuCi0KLVRoaXMgZG9jdW1lbnQgYW5kIHRoZSB0ZWNobm9sb2d5IHdoaWNoIGl0IGRlc2NyaWJlcyBhcmUKLWRpc3RyaWJ1dGVkIHVuZGVyIGxpY2Vuc2VzIHJlc3RyaWN0aW5nIHRoZWlyIHVzZSwgY29weWluZywKLWRpc3RyaWJ1dGlvbiwgYW5kIGRlY29tcGlsYXRpb24uIE5vIHBhcnQgb2YgdGhpcyBkb2N1bWVudAotbWF5IGJlIHJlcHJvZHVjZWQgaW4gYW55IGZvcm0gYnkgYW55IG1lYW5zIHdpdGhvdXQgcHJpb3IKLXdyaXR0ZW4gYXV0aG9yaXphdGlvbiBvZiBTdW4gYW5kIGl0cyBsaWNlbnNvcnMsIGlmIGFueS4KLQotVGhpcmQtcGFydHkgc29mdHdhcmUsIGluY2x1ZGluZyBmb250IHRlY2hub2xvZ3ksIGlzCi1jb3B5cmlnaHRlZCBhbmQgbGljZW5zZWQgZnJvbSBTdW4gc3VwcGxpZXJzLgotCi1TdW4sIFN1biBNaWNyb3N5c3RlbXMsIHRoZSBTdW4gbG9nbywgU29sYXJpcywgSmF2YSwgSjJFRSwKLUphdmFTZXJ2ZXIgUGFnZXMsIEVudGVycHJpc2UgSmF2YUJlYW5zIGFuZCB0aGUgSmF2YSBDb2ZmZWUKLUN1cCBsb2dvIGFyZSB0cmFkZW1hcmtzIG9yIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcyBvZiBTdW4KLU1pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVS5TLiBhbmQgb3RoZXIgY291bnRyaWVzLgotCi1GZWRlcmFsIEFjcXVpc2l0aW9uczogQ29tbWVyY2lhbCBTb2Z0d2FyZSAtIEdvdmVybm1lbnQgVXNlcnMKLVN1YmplY3QgdG8gU3RhbmRhcmQgTGljZW5zZSBUZXJtcyBhbmQgQ29uZGl0aW9ucy4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhpcyBpcyB0aGUgWE1MIFNjaGVtYSBmb3IgdGhlIENvbm5lY3RvciAxLjUgZGVwbG95bWVudAotZGVzY3JpcHRvci4gIEFsbCBDb25uZWN0b3IgZGVwbG95bWVudCBkZXNjcmlwdG9ycyBtdXN0Ci1pbmRpY2F0ZSB0aGUgY29ubmVjdG9yIHJlc291cmNlIGFkYXB0ZXIgc2NoZW1hIGJ5IHVzaW5nIHRoZQotSjJFRSBuYW1lc3BhY2U6Ci0KLWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKLQotYW5kIGJ5IGluZGljYXRpbmcgdGhlIHZlcnNpb24gb2YgdGhlIHNjaGVtYSBieQotdXNpbmcgdGhlIHZlcnNpb24gZWxlbWVudCBhcyBzaG93biBiZWxvdzoKLQotICAgIDxjb25uZWN0b3IgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiCi0gICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZQotICAgICAgICAgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS9jb25uZWN0b3JfMV81LnhzZCIKLSAgICAgdmVyc2lvbj0iMS41Ij4KLSAgICAuLi4KLSAgICA8L2Nvbm5lY3Rvcj4KLQotVGhlIGluc3RhbmNlIGRvY3VtZW50cyBtYXkgaW5kaWNhdGUgdGhlIHB1Ymxpc2hlZCB2ZXJzaW9uIG9mCi10aGUgc2NoZW1hIHVzaW5nIHRoZSB4c2k6c2NoZW1hTG9jYXRpb24gYXR0cmlidXRlIGZvciBKMkVFCi1uYW1lc3BhY2Ugd2l0aCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uOgotCi1odHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL2Nvbm5lY3Rvcl8xXzUueHNkCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBmb2xsb3dpbmcgY29udmVudGlvbnMgYXBwbHkgdG8gYWxsIEoyRUUKLWRlcGxveW1lbnQgZGVzY3JpcHRvciBlbGVtZW50cyB1bmxlc3MgaW5kaWNhdGVkIG90aGVyd2lzZS4KLQotLSBJbiBlbGVtZW50cyB0aGF0IHNwZWNpZnkgYSBwYXRobmFtZSB0byBhIGZpbGUgd2l0aGluIHRoZQotICBzYW1lIEpBUiBmaWxlLCByZWxhdGl2ZSBmaWxlbmFtZXMgKGkuZS4sIHRob3NlIG5vdAotICBzdGFydGluZyB3aXRoICIvIikgYXJlIGNvbnNpZGVyZWQgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YKLSAgdGhlIEpBUiBmaWxlJ3MgbmFtZXNwYWNlLiAgQWJzb2x1dGUgZmlsZW5hbWVzIChpLmUuLCB0aG9zZQotICBzdGFydGluZyB3aXRoICIvIikgYWxzbyBzcGVjaWZ5IG5hbWVzIGluIHRoZSByb290IG9mIHRoZQotICBKQVIgZmlsZSdzIG5hbWVzcGFjZS4gIEluIGdlbmVyYWwsIHJlbGF0aXZlIG5hbWVzIGFyZQotICBwcmVmZXJyZWQuICBUaGUgZXhjZXB0aW9uIGlzIC53YXIgZmlsZXMgd2hlcmUgYWJzb2x1dGUKLSAgbmFtZXMgYXJlIHByZWZlcnJlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgU2VydmxldCBBUEkuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi08aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iajJlZV8xXzQueHNkIi8+Ci0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi0KLTx4c2Q6ZWxlbWVudCBuYW1lPSJjb25uZWN0b3IiIHR5cGU9ImoyZWU6Y29ubmVjdG9yVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBjb25uZWN0b3IgZWxlbWVudCBpcyB0aGUgcm9vdCBlbGVtZW50IG9mIHRoZSBkZXBsb3ltZW50Ci1kZXNjcmlwdG9yIGZvciB0aGUgcmVzb3VyY2UgYWRhcHRlci4gVGhpcyBlbGVtZW50IGluY2x1ZGVzCi1nZW5lcmFsIGluZm9ybWF0aW9uIC0gdmVuZG9yIG5hbWUsIHJlc291cmNlIGFkYXB0ZXIgdmVyc2lvbiwKLWljb24gLSBhYm91dCB0aGUgcmVzb3VyY2UgYWRhcHRlciBtb2R1bGUuIEl0IGFsc28gaW5jbHVkZXMKLWluZm9ybWF0aW9uIHNwZWNpZmljIHRvIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcmVzb3VyY2UKLWFkYXB0ZXIgbGlicmFyeSBhcyBzcGVjaWZpZWQgdGhyb3VnaCB0aGUgZWxlbWVudAotcmVzb3VyY2VhZGFwdGVyLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotPC94c2Q6ZWxlbWVudD4KLQotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iYWN0aXZhdGlvbnNwZWNUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGFjdGl2YXRpb25zcGVjVHlwZSBzcGVjaWZpZXMgYW4gYWN0aXZhdGlvbgotc3BlY2lmaWNhdGlvbi4gIFRoZSBpbmZvcm1hdGlvbiBpbmNsdWRlcyBmdWxseSBxdWFsaWZpZWQKLUphdmEgY2xhc3MgbmFtZSBvZiBhbiBhY3RpdmF0aW9uIHNwZWNpZmljYXRpb24gYW5kIGEgc2V0IG9mCi1yZXF1aXJlZCBjb25maWd1cmF0aW9uIHByb3BlcnR5IG5hbWVzLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJhY3RpdmF0aW9uc3BlYy1jbGFzcyIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZnVsbHktcXVhbGlmaWVkLWNsYXNzVHlwZSI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBlbGVtZW50IGFjdGl2YXRpb25zcGVjLWNsYXNzIHNwZWNpZmllcyB0aGUgZnVsbHkKLSAgICAgICAgcXVhbGlmaWVkIEphdmEgY2xhc3MgbmFtZSBvZiB0aGUgYWN0aXZhdGlvbgotICAgICAgICBzcGVjaWZpY2F0aW9uIGNsYXNzLiBUaGlzIGNsYXNzIG11c3QgaW1wbGVtZW50IHRoZQotICAgICAgICBqYXZheC5yZXNvdXJjZS5zcGkuQWN0aXZhdGlvblNwZWMgaW50ZXJmYWNlLiBUaGUKLSAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBjbGFzcyBpcyByZXF1aXJlZCB0byBiZSBhCi0gICAgICAgIEphdmFCZWFuLgotCi0gICAgICAgIEV4YW1wbGU6Ci0gICAgICAgICAgICA8YWN0aXZhdGlvbnNwZWMtY2xhc3M+Y29tLndvbWJhdC5BY3RpdmF0aW9uU3BlY0ltcGwKLSAgICAgICAgICAgIDwvYWN0aXZhdGlvbnNwZWMtY2xhc3M+Ci0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJlcXVpcmVkLWNvbmZpZy1wcm9wZXJ0eSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cmVxdWlyZWQtY29uZmlnLXByb3BlcnR5VHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iYWRtaW5vYmplY3RUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGFkbWlub2JqZWN0VHlwZSBzcGVjaWZpZXMgaW5mb3JtYXRpb24gYWJvdXQgYW4KLWFkbWluaXN0ZXJlZCBvYmplY3QuICBBZG1pbmlzdGVyZWQgb2JqZWN0cyBhcmUgc3BlY2lmaWMgdG8gYQotbWVzc2FnaW5nIHN0eWxlIG9yIG1lc3NhZ2UgcHJvdmlkZXIuICBUaGlzIGNvbnRhaW5zCi1pbmZvcm1hdGlvbiBvbiB0aGUgSmF2YSB0eXBlIG9mIHRoZSBpbnRlcmZhY2UgaW1wbGVtZW50ZWQgYnkKLWFuIGFkbWluaXN0ZXJlZCBvYmplY3QsIGl0cyBKYXZhIGNsYXNzIG5hbWUgYW5kIGl0cwotY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJhZG1pbm9iamVjdC1pbnRlcmZhY2UiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmZ1bGx5LXF1YWxpZmllZC1jbGFzc1R5cGUiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgZWxlbWVudCBhZG1pbm9iamVjdC1pbnRlcmZhY2Ugc3BlY2lmaWVzIHRoZQotICAgICAgICBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgSmF2YSB0eXBlIG9mIHRoZQotICAgICAgICBpbnRlcmZhY2UgaW1wbGVtZW50ZWQgYnkgYW4gYWRtaW5pc3RlcmVkIG9iamVjdC4KLQotICAgICAgICAgRXhhbXBsZToKLSAgICAgICAgIDxhZG1pbm9iamVjdC1pbnRlcmZhY2U+amF2YXguam1zLkRlc3RpbmF0aW9uCi0gICAgICAgICA8L2FkbWlub2JqZWN0LWludGVyZmFjZT4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotCi0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJhZG1pbm9iamVjdC1jbGFzcyIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZnVsbHktcXVhbGlmaWVkLWNsYXNzVHlwZSI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBlbGVtZW50IGFkbWlub2JqZWN0LWNsYXNzIHNwZWNpZmllcyB0aGUgZnVsbHkKLSAgICAgICAgcXVhbGlmaWVkIEphdmEgY2xhc3MgbmFtZSBvZiBhbiBhZG1pbmlzdGVyZWQgb2JqZWN0LgotCi0gICAgICAgIEV4YW1wbGU6Ci0gICAgICAgICAgICA8YWRtaW5vYmplY3QtY2xhc3M+Y29tLndvbWJhdC5EZXN0aW5hdGlvbkltcGwKLSAgICAgICAgICAgIDwvYWRtaW5vYmplY3QtY2xhc3M+Ci0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLQotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iY29uZmlnLXByb3BlcnR5IgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpjb25maWctcHJvcGVydHlUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJhdXRoZW50aWNhdGlvbi1tZWNoYW5pc21UeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGF1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbVR5cGUgc3BlY2lmaWVzIGFuIGF1dGhlbnRpY2F0aW9uCi1tZWNoYW5pc20gc3VwcG9ydGVkIGJ5IHRoZSByZXNvdXJjZSBhZGFwdGVyLiBOb3RlIHRoYXQgdGhpcwotc3VwcG9ydCBpcyBmb3IgdGhlIHJlc291cmNlIGFkYXB0ZXIgYW5kIG5vdCBmb3IgdGhlCi11bmRlcmx5aW5nIEVJUyBpbnN0YW5jZS4gVGhlIG9wdGlvbmFsIGRlc2NyaXB0aW9uIHNwZWNpZmllcwotYW55IHJlc291cmNlIGFkYXB0ZXIgc3BlY2lmaWMgcmVxdWlyZW1lbnQgZm9yIHRoZSBzdXBwb3J0IG9mCi1zZWN1cml0eSBjb250cmFjdCBhbmQgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtLgotCi1Ob3RlIHRoYXQgQmFzaWNQYXNzd29yZCBtZWNoYW5pc20gdHlwZSBzaG91bGQgc3VwcG9ydCB0aGUKLWphdmF4LnJlc291cmNlLnNwaS5zZWN1cml0eS5QYXNzd29yZENyZWRlbnRpYWwgaW50ZXJmYWNlLgotVGhlIEtlcmJ2NSBtZWNoYW5pc20gdHlwZSBzaG91bGQgc3VwcG9ydCB0aGUKLW9yZy5pZXRmLmpnc3MuR1NTQ3JlZGVudGlhbCBpbnRlcmZhY2Ugb3IgdGhlIGRlcHJlY2F0ZWQKLWphdmF4LnJlc291cmNlLnNwaS5zZWN1cml0eS5HZW5lcmljQ3JlZGVudGlhbCBpbnRlcmZhY2UuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXNjcmlwdGlvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iYXV0aGVudGljYXRpb24tbWVjaGFuaXNtLXR5cGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGVsZW1lbnQgYXV0aGVudGljYXRpb24tbWVjaGFuaXNtLXR5cGUgc3BlY2lmaWVzCi0gICAgICAgIHR5cGUgb2YgYW4gYXV0aGVudGljYXRpb24gbWVjaGFuaXNtLgotCi0gICAgICAgIFRoZSBleGFtcGxlIHZhbHVlcyBhcmU6Ci0KLSAgICAgICAgPGF1dGhlbnRpY2F0aW9uLW1lY2hhbmlzbS10eXBlPkJhc2ljUGFzc3dvcmQKLSAgICAgICAgPC9hdXRoZW50aWNhdGlvbi1tZWNoYW5pc20tdHlwZT4KLQotICAgICAgICA8YXV0aGVudGljYXRpb24tbWVjaGFuaXNtLXR5cGU+S2VyYnY1Ci0gICAgICAgIDwvYXV0aGVudGljYXRpb24tbWVjaGFuaXNtLXR5cGU+Ci0KLSAgICAgICAgQW55IGFkZGl0aW9uYWwgc2VjdXJpdHkgbWVjaGFuaXNtcyBhcmUgb3V0c2lkZSB0aGUKLSAgICAgICAgc2NvcGUgb2YgdGhlIENvbm5lY3RvciBhcmNoaXRlY3R1cmUgc3BlY2lmaWNhdGlvbi4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotCi0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJjcmVkZW50aWFsLWludGVyZmFjZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6Y3JlZGVudGlhbC1pbnRlcmZhY2VUeXBlIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJjb25maWctcHJvcGVydHktbmFtZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgY29uZmlnLXByb3BlcnR5LW5hbWVUeXBlIGNvbnRhaW5zIHRoZSBuYW1lIG9mIGEKLWNvbmZpZ3VyYXRpb24gcHJvcGVydHkuCi0KLVRoZSBjb25uZWN0b3IgYXJjaGl0ZWN0dXJlIGRlZmluZXMgYSBzZXQgb2Ygd2VsbC1kZWZpbmVkCi1wcm9wZXJ0aWVzIGFsbCBvZiB0eXBlIGphdmEubGFuZy5TdHJpbmcuIFRoZXNlIGFyZSBhcwotZm9sbG93cy4KLQotICAgICBTZXJ2ZXJOYW1lCi0gICAgIFBvcnROdW1iZXIKLSAgICAgVXNlck5hbWUKLSAgICAgUGFzc3dvcmQKLSAgICAgQ29ubmVjdGlvblVSTAotCi1BIHJlc291cmNlIGFkYXB0ZXIgcHJvdmlkZXIgY2FuIGV4dGVuZCB0aGlzIHByb3BlcnR5IHNldCB0bwotaW5jbHVkZSBwcm9wZXJ0aWVzIHNwZWNpZmljIHRvIHRoZSByZXNvdXJjZSBhZGFwdGVyIGFuZCBpdHMKLXVuZGVybHlpbmcgRUlTLgotCi1Qb3NzaWJsZSB2YWx1ZXMgaW5jbHVkZQotICAgICAgICBTZXJ2ZXJOYW1lCi0gICAgICAgIFBvcnROdW1iZXIKLSAgICAgICAgVXNlck5hbWUKLSAgICAgICAgUGFzc3dvcmQKLSAgICAgICAgQ29ubmVjdGlvblVSTAotCi1FeGFtcGxlOiA8Y29uZmlnLXByb3BlcnR5LW5hbWU+U2VydmVyTmFtZTwvY29uZmlnLXByb3BlcnR5LW5hbWU+Ci0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJjb25maWctcHJvcGVydHktdHlwZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgY29uZmlnLXByb3BlcnR5LXR5cGVUeXBlIGNvbnRhaW5zIHRoZSBmdWxseQotcXVhbGlmaWVkIEphdmEgdHlwZSBvZiBhIGNvbmZpZ3VyYXRpb24gcHJvcGVydHkuCi0KLVRoZSBmb2xsb3dpbmcgYXJlIHRoZSBsZWdhbCB2YWx1ZXM6Ci0gICBqYXZhLmxhbmcuQm9vbGVhbiwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLkludGVnZXIsCi0gICBqYXZhLmxhbmcuRG91YmxlLCBqYXZhLmxhbmcuQnl0ZSwgamF2YS5sYW5nLlNob3J0LAotICAgamF2YS5sYW5nLkxvbmcsIGphdmEubGFuZy5GbG9hdCwgamF2YS5sYW5nLkNoYXJhY3RlcgotCi1Vc2VkIGluOiBjb25maWctcHJvcGVydHkKLQotRXhhbXBsZToKLTxjb25maWctcHJvcGVydHktdHlwZT5qYXZhLmxhbmcuU3RyaW5nPC9jb25maWctcHJvcGVydHktdHlwZT4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImphdmEubGFuZy5Cb29sZWFuIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImphdmEubGFuZy5TdHJpbmciLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iamF2YS5sYW5nLkludGVnZXIiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iamF2YS5sYW5nLkRvdWJsZSIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJqYXZhLmxhbmcuQnl0ZSIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJqYXZhLmxhbmcuU2hvcnQiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iamF2YS5sYW5nLkxvbmciLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iamF2YS5sYW5nLkZsb2F0Ii8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImphdmEubGFuZy5DaGFyYWN0ZXIiLz4KLSAgICA8L3hzZDpyZXN0cmljdGlvbj4KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJjb25maWctcHJvcGVydHlUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGNvbmZpZy1wcm9wZXJ0eVR5cGUgY29udGFpbnMgYSBkZWNsYXJhdGlvbiBvZiBhIHNpbmdsZQotY29uZmlndXJhdGlvbiBwcm9wZXJ0eSB0aGF0IG1heSBiZSB1c2VkIGZvciBwcm92aWRpbmcKLWNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uCi0KLVRoZSBkZWNsYXJhdGlvbiBjb25zaXN0cyBvZiBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbiwgbmFtZSwKLXR5cGUgYW5kIGFuIG9wdGlvbmFsIHZhbHVlIG9mIHRoZSBjb25maWd1cmF0aW9uIHByb3BlcnR5LiBJZgotdGhlIHJlc291cmNlIGFkYXB0ZXIgcHJvdmlkZXIgZG9lcyBub3Qgc3BlY2lmeSBhIHZhbHVlIHRoYW4KLXRoZSBkZXBsb3llciBpcyByZXNwb25zaWJsZSBmb3IgcHJvdmlkaW5nIGEgdmFsaWQgdmFsdWUgZm9yCi1hIGNvbmZpZ3VyYXRpb24gcHJvcGVydHkuCi0KLUFueSBib3VuZHMgb3Igd2VsbC1kZWZpbmVkIHZhbHVlcyBvZiBwcm9wZXJ0aWVzIHNob3VsZCBiZQotZGVzY3JpYmVkIGluIHRoZSBkZXNjcmlwdGlvbiBlbGVtZW50LgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJjb25maWctcHJvcGVydHktbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6Y29uZmlnLXByb3BlcnR5LW5hbWVUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJjb25maWctcHJvcGVydHktdHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6Y29uZmlnLXByb3BlcnR5LXR5cGVUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJjb25maWctcHJvcGVydHktdmFsdWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4c2Q6c3RyaW5nIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGVsZW1lbnQgY29uZmlnLXByb3BlcnR5LXZhbHVlIGNvbnRhaW5zIHRoZSB2YWx1ZQotICAgICAgICBvZiBhIGNvbmZpZ3VyYXRpb24gZW50cnkuIE5vdGUsIGl0IGlzIHBvc3NpYmxlIGZvciBhCi0gICAgICAgIHJlc291cmNlIGFkYXB0ZXIgZGVwbG95ZXIgdG8gb3ZlcnJpZGUgdGhpcwotICAgICAgICBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGR1cmluZyBkZXBsb3ltZW50LgotCi0gICAgICAgIEV4YW1wbGU6Ci0gICAgICAgIDxjb25maWctcHJvcGVydHktdmFsdWU+V29tYmF0U2VydmVyPC9jb25maWctcHJvcGVydHktdmFsdWU+Ci0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJjb25uZWN0aW9uLWRlZmluaXRpb25UeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGNvbm5lY3Rpb24tZGVmaW5pdGlvblR5cGUgZGVmaW5lcyBhIHNldCBvZiBjb25uZWN0aW9uCi1pbnRlcmZhY2VzIGFuZCBjbGFzc2VzIHBlcnRhaW5pbmcgdG8gYSBwYXJ0aWN1bGFyIGNvbm5lY3Rpb24KLXR5cGUuIFRoaXMgYWxzbyBpbmNsdWRlcyBjb25maWd1cmFibGUgcHJvcGVydGllcyBmb3IKLU1hbmFnZWRDb25uZWN0aW9uRmFjdG9yeSBpbnN0YW5jZXMgdGhhdCBtYXkgYmUgcHJvZHVjZWQgb3V0Ci1vZiB0aGlzIHNldC4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibWFuYWdlZGNvbm5lY3Rpb25mYWN0b3J5LWNsYXNzIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpmdWxseS1xdWFsaWZpZWQtY2xhc3NUeXBlIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGVsZW1lbnQgbWFuYWdlZGNvbm5lY3Rpb25mYWN0b3J5LWNsYXNzIHNwZWNpZmllcwotICAgICAgICB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIEphdmEgY2xhc3MgdGhhdAotICAgICAgICBpbXBsZW1lbnRzIHRoZQotICAgICAgICBqYXZheC5yZXNvdXJjZS5zcGkuTWFuYWdlZENvbm5lY3Rpb25GYWN0b3J5IGludGVyZmFjZS4KLSAgICAgICAgVGhpcyBKYXZhIGNsYXNzIGlzIHByb3ZpZGVkIGFzIHBhcnQgb2YgcmVzb3VyY2UKLSAgICAgICAgYWRhcHRlcidzIGltcGxlbWVudGF0aW9uIG9mIGNvbm5lY3RvciBhcmNoaXRlY3R1cmUKLSAgICAgICAgc3BlY2lmaWVkIGNvbnRyYWN0cy4gVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMKLSAgICAgICAgY2xhc3MgaXMgcmVxdWlyZWQgdG8gYmUgYSBKYXZhQmVhbi4KLQotICAgICAgICBFeGFtcGxlOgotICAgICAgICA8bWFuYWdlZGNvbm5lY3Rpb25mYWN0b3J5LWNsYXNzPgotICAgICAgICAgICAgY29tLndvbWJhdC5NYW5hZ2VkQ29ubmVjdGlvbkZhY3RvcnlJbXBsCi0gICAgICAgIDwvbWFuYWdlZGNvbm5lY3Rpb25mYWN0b3J5LWNsYXNzPgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJjb25maWctcHJvcGVydHkiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmNvbmZpZy1wcm9wZXJ0eVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iY29ubmVjdGlvbmZhY3RvcnktaW50ZXJmYWNlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpmdWxseS1xdWFsaWZpZWQtY2xhc3NUeXBlIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGVsZW1lbnQgY29ubmVjdGlvbmZhY3RvcnktaW50ZXJmYWNlIHNwZWNpZmllcwotICAgICAgICB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIENvbm5lY3Rpb25GYWN0b3J5Ci0gICAgICAgIGludGVyZmFjZSBzdXBwb3J0ZWQgYnkgdGhlIHJlc291cmNlIGFkYXB0ZXIuCi0KLSAgICAgICAgRXhhbXBsZToKLSAgICAgICAgPGNvbm5lY3Rpb25mYWN0b3J5LWludGVyZmFjZT5jb20ud29tYmF0LkNvbm5lY3Rpb25GYWN0b3J5Ci0gICAgICAgIDwvY29ubmVjdGlvbmZhY3RvcnktaW50ZXJmYWNlPgotCi0gICAgICAgIE9SCi0KLSAgICAgICAgPGNvbm5lY3Rpb25mYWN0b3J5LWludGVyZmFjZT5qYXZheC5yZXNvdXJjZS5jY2kuQ29ubmVjdGlvbkZhY3RvcnkKLSAgICAgICAgPC9jb25uZWN0aW9uZmFjdG9yeS1pbnRlcmZhY2U+Ci0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLQotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iY29ubmVjdGlvbmZhY3RvcnktaW1wbC1jbGFzcyIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZnVsbHktcXVhbGlmaWVkLWNsYXNzVHlwZSI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBlbGVtZW50IGNvbm5lY3Rpb25mYWN0b3J5LWltcGwtY2xhc3Mgc3BlY2lmaWVzCi0gICAgICAgIHRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgQ29ubmVjdGlvbkZhY3RvcnkKLSAgICAgICAgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHJlc291cmNlIGFkYXB0ZXIKLSAgICAgICAgc3BlY2lmaWMgQ29ubmVjdGlvbkZhY3RvcnkgaW50ZXJmYWNlLgotCi0gICAgICAgIEV4YW1wbGU6Ci0KLSAgICAgICAgPGNvbm5lY3Rpb25mYWN0b3J5LWltcGwtY2xhc3M+Y29tLndvbWJhdC5Db25uZWN0aW9uRmFjdG9yeUltcGwKLSAgICAgICAgPC9jb25uZWN0aW9uZmFjdG9yeS1pbXBsLWNsYXNzPgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJjb25uZWN0aW9uLWludGVyZmFjZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZnVsbHktcXVhbGlmaWVkLWNsYXNzVHlwZSI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBjb25uZWN0aW9uLWludGVyZmFjZSBlbGVtZW50IHNwZWNpZmllcyB0aGUgZnVsbHkKLSAgICAgICAgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIENvbm5lY3Rpb24gaW50ZXJmYWNlIHN1cHBvcnRlZAotICAgICAgICBieSB0aGUgcmVzb3VyY2UgYWRhcHRlci4KLQotICAgICAgICBFeGFtcGxlOgotCi0gICAgICAgICAgICA8Y29ubmVjdGlvbi1pbnRlcmZhY2U+amF2YXgucmVzb3VyY2UuY2NpLkNvbm5lY3Rpb24KLSAgICAgICAgICAgIDwvY29ubmVjdGlvbi1pbnRlcmZhY2U+Ci0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImNvbm5lY3Rpb24taW1wbC1jbGFzcyIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZnVsbHktcXVhbGlmaWVkLWNsYXNzVHlwZSI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBjb25uZWN0aW9uLWltcGwtY2xhc3NUeXBlIHNwZWNpZmllcyB0aGUgZnVsbHkKLSAgICAgICAgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIENvbm5lY3Rpb24gY2xhc3MgdGhhdAotICAgICAgICBpbXBsZW1lbnRzIHJlc291cmNlIGFkYXB0ZXIgc3BlY2lmaWMgQ29ubmVjdGlvbgotICAgICAgICBpbnRlcmZhY2UuICBJdCBpcyB1c2VkIGJ5IHRoZSBjb25uZWN0aW9uLWltcGwtY2xhc3MKLSAgICAgICAgZWxlbWVudHMuCi0KLSAgICAgICAgRXhhbXBsZToKLQotICAgICAgICAgICAgPGNvbm5lY3Rpb24taW1wbC1jbGFzcz5jb20ud29tYmF0LkNvbm5lY3Rpb25JbXBsCi0gICAgICAgICAgICA8L2Nvbm5lY3Rpb24taW1wbC1jbGFzcz4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImNvbm5lY3RvclR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgY29ubmVjdG9yVHlwZSBkZWZpbmVzIGEgcmVzb3VyY2UgYWRhcHRlci4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkaXNwbGF5LW5hbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRpc3BsYXktbmFtZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaWNvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6aWNvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0idmVuZG9yLW5hbWUiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgZWxlbWVudCB2ZW5kb3ItbmFtZSBzcGVjaWZpZXMgdGhlIG5hbWUgb2YKLSAgICAgICAgcmVzb3VyY2UgYWRhcHRlciBwcm92aWRlciB2ZW5kb3IuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVpcy10eXBlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBlbGVtZW50IGVpcy10eXBlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZQotICAgICAgICB0eXBlIG9mIHRoZSBFSVMuIEZvciBleGFtcGxlLCB0aGUgdHlwZSBvZiBhbiBFSVMgY2FuCi0gICAgICAgIGJlIHByb2R1Y3QgbmFtZSBvZiBFSVMgaW5kZXBlbmRlbnQgb2YgYW55IHZlcnNpb24KLSAgICAgICAgaW5mby4KLQotICAgICAgICBUaGlzIGhlbHBzIGluIGlkZW50aWZ5aW5nIEVJUyBpbnN0YW5jZXMgdGhhdCBjYW4gYmUKLSAgICAgICAgdXNlZCB3aXRoIHRoaXMgcmVzb3VyY2UgYWRhcHRlci4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icmVzb3VyY2VhZGFwdGVyLXZlcnNpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGVsZW1lbnQgdmVyc2lvbiBzcGVjaWZpZXMgYSBzdHJpbmctYmFzZWQgdmVyc2lvbgotICAgICAgICBvZiB0aGUgcmVzb3VyY2UgYWRhcHRlciBmcm9tIHRoZSByZXNvdXJjZSBhZGFwdGVyCi0gICAgICAgIHByb3ZpZGVyLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImxpY2Vuc2UiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmxpY2Vuc2VUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyZXNvdXJjZWFkYXB0ZXIiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnJlc291cmNlYWRhcHRlclR5cGUiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlcGxveW1lbnQtZXh0ZW5zaW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXBsb3ltZW50LWV4dGVuc2lvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFJlc291cmNlIGFkYXB0ZXIgc3BlY2lmaWMgZXh0ZW5zaW9ucyBjYW4gYmUKLSAgICAgICAgc3BlY2lmaWVkIGJ5IHVzaW5nIHRoZSBkZXBsb3ltZW50LWV4dGVuc2lvbgotICAgICAgICBlbGVtZW50cy4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotCi0gICAgPC94c2Q6c2VxdWVuY2U+Ci0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0idmVyc2lvbiIKLSAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRld2V5LXZlcnNpb25UeXBlIgotICAgICAgICAgICAgICAgICAgIGZpeGVkPSIxLjUiCi0gICAgICAgICAgICAgICAgICAgdXNlPSJyZXF1aXJlZCI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIFRoZSB2ZXJzaW9uIHNwZWNpZmllcyB0aGUgdmVyc2lvbiBvZiB0aGUKLSAgICBjb25uZWN0b3IgYXJjaGl0ZWN0dXJlIHNwZWNpZmljYXRpb24gdGhhdCBpcwotICAgIHN1cHBvcnRlZCBieSB0aGlzIHJlc291cmNlIGFkYXB0ZXIuIFRoaXMgaW5mb3JtYXRpb24KLSAgICBlbmFibGVzIGRlcGxveWVyIHRvIGNvbmZpZ3VyZSB0aGUgcmVzb3VyY2UgYWRhcHRlciB0bwotICAgIHN1cHBvcnQgZGVwbG95bWVudCBhbmQgcnVudGltZSByZXF1aXJlbWVudHMgb2YgdGhlCi0gICAgY29ycmVzcG9uZGluZyBjb25uZWN0b3IgYXJjaGl0ZWN0dXJlIHNwZWNpZmljYXRpb24uCi0KLSAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgPC94c2Q6YXR0cmlidXRlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0iY3JlZGVudGlhbC1pbnRlcmZhY2VUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGNyZWRlbnRpYWwtaW50ZXJmYWNlVHlwZSBzcGVjaWZpZXMgdGhlCi1pbnRlcmZhY2UgdGhhdCB0aGUgcmVzb3VyY2UgYWRhcHRlciBpbXBsZW1lbnRhdGlvbgotc3VwcG9ydHMgZm9yIHRoZSByZXByZXNlbnRhdGlvbiBvZiB0aGUKLWNyZWRlbnRpYWxzLiBUaGlzIGVsZW1lbnQocykgdGhhdCB1c2UgdGhpcyB0eXBlLAotaS5lLiBjcmVkZW50aWFsLWludGVyZmFjZSwgIHNob3VsZCBiZSB1c2VkIGJ5Ci1hcHBsaWNhdGlvbiBzZXJ2ZXIgdG8gZmluZCBvdXQgdGhlIENyZWRlbnRpYWwKLWludGVyZmFjZSBpdCBzaG91bGQgdXNlIGFzIHBhcnQgb2YgdGhlIHNlY3VyaXR5Ci1jb250cmFjdC4KLQotVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmU6Ci0KLWphdmF4LnJlc291cmNlLnNwaS5zZWN1cml0eS5QYXNzd29yZENyZWRlbnRpYWwKLW9yZy5pZXRmLmpnc3MuR1NTQ3JlZGVudGlhbAotamF2YXgucmVzb3VyY2Uuc3BpLnNlY3VyaXR5LkdlbmVyaWNDcmVkZW50aWFsCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpmdWxseS1xdWFsaWZpZWQtY2xhc3NUeXBlIj4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbgotICAgICAgICAgICAgdmFsdWU9ImphdmF4LnJlc291cmNlLnNwaS5zZWN1cml0eS5QYXNzd29yZENyZWRlbnRpYWwiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbgotICAgICAgICAgICAgdmFsdWU9Im9yZy5pZXRmLmpnc3MuR1NTQ3JlZGVudGlhbCIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uCi0gICAgICAgICAgICB2YWx1ZT0iamF2YXgucmVzb3VyY2Uuc3BpLnNlY3VyaXR5LkdlbmVyaWNDcmVkZW50aWFsIi8+Ci0gICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJpbmJvdW5kLXJlc291cmNlYWRhcHRlclR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgaW5ib3VuZC1yZXNvdXJjZWFkYXB0ZXJUeXBlIHNwZWNpZmllcyBpbmZvcm1hdGlvbgotYWJvdXQgYW4gaW5ib3VuZCByZXNvdXJjZSBhZGFwdGVyLiBUaGlzIGNvbnRhaW5zIGluZm9ybWF0aW9uCi1zcGVjaWZpYyB0byB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHJlc291cmNlIGFkYXB0ZXIKLWxpYnJhcnkgYXMgc3BlY2lmaWVkIHRocm91Z2ggdGhlIG1lc3NhZ2VhZGFwdGVyIGVsZW1lbnQuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im1lc3NhZ2VhZGFwdGVyIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTptZXNzYWdlYWRhcHRlclR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiPgotICAgICAgICA8eHNkOnVuaXF1ZSBuYW1lPSJtZXNzYWdlbGlzdGVuZXItdHlwZS11bmlxdWVuZXNzIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIG1lc3NhZ2VsaXN0ZW5lci10eXBlIGVsZW1lbnQgY29udGVudCBtdXN0IGJlCi0gICAgICAgIHVuaXF1ZSBpbiB0aGUgbWVzc2FnZWFkYXB0ZXIuIFNldmVyYWwgbWVzc2FnZWxpc3RlbmVycwotICAgICAgICBjYW4gbm90IHVzZSB0aGUgc2FtZSBtZXNzYWdlbGlzdGVuZXItdHlwZS4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOm1lc3NhZ2VsaXN0ZW5lciIvPgotICAgICAgICA8eHNkOmZpZWxkICAgIHhwYXRoPSJqMmVlOm1lc3NhZ2VsaXN0ZW5lci10eXBlIi8+Ci0gICAgICAgIDwveHNkOnVuaXF1ZT4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJsaWNlbnNlVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBsaWNlbnNlVHlwZSBzcGVjaWZpZXMgbGljZW5zaW5nIHJlcXVpcmVtZW50cyBmb3IgdGhlCi1yZXNvdXJjZSBhZGFwdGVyIG1vZHVsZS4gVGhpcyB0eXBlIHNwZWNpZmllcyB3aGV0aGVyIGEKLWxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gZGVwbG95IGFuZCB1c2UgdGhpcyByZXNvdXJjZSBhZGFwdGVyLAotYW5kIGFuIG9wdGlvbmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBsaWNlbnNpbmcgdGVybXMKLShleGFtcGxlczogZHVyYXRpb24gb2YgbGljZW5zZSwgbnVtYmVyIG9mIGNvbm5lY3Rpb24KLXJlc3RyaWN0aW9ucykuIEl0IGlzIHVzZWQgYnkgdGhlIGxpY2Vuc2UgZWxlbWVudC4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIgotICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImxpY2Vuc2UtcmVxdWlyZWQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTp0cnVlLWZhbHNlVHlwZSI+Ci0gICAgICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgICAgIFRoZSBlbGVtZW50IGxpY2Vuc2UtcmVxdWlyZWQgc3BlY2lmaWVzIHdoZXRoZXIgYQotICAgICAgICAgICAgbGljZW5zZSBpcyByZXF1aXJlZCB0byBkZXBsb3kgYW5kIHVzZSB0aGUKLSAgICAgICAgICAgIHJlc291cmNlIGFkYXB0ZXIuIFRoaXMgZWxlbWVudCBtdXN0IGJlIG9uZSBvZgotICAgICAgICAgICAgdGhlIGZvbGxvd2luZywgInRydWUiIG9yICJmYWxzZSIuCi0KLSAgICAgICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ibWVzc2FnZWFkYXB0ZXJUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIG1lc3NhZ2VhZGFwdGVyVHlwZSBzcGVjaWZpZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCi1tZXNzYWdpbmcgY2FwYWJpbGl0aWVzIG9mIHRoZSByZXNvdXJjZSBhZGFwdGVyLiBUaGlzCi1jb250YWlucyBpbmZvcm1hdGlvbiBzcGVjaWZpYyB0byB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlCi1yZXNvdXJjZSBhZGFwdGVyIGxpYnJhcnkgYXMgc3BlY2lmaWVkIHRocm91Z2ggdGhlCi1tZXNzYWdlbGlzdGVuZXIgZWxlbWVudC4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibWVzc2FnZWxpc3RlbmVyIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTptZXNzYWdlbGlzdGVuZXJUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJtZXNzYWdlbGlzdGVuZXJUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIG1lc3NhZ2VsaXN0ZW5lclR5cGUgc3BlY2lmaWVzIGluZm9ybWF0aW9uIGFib3V0IGEKLXNwZWNpZmljIG1lc3NhZ2UgbGlzdGVuZXIgc3VwcG9ydGVkIGJ5IHRoZSBtZXNzYWdpbmcKLXJlc291cmNlIGFkYXB0ZXIuIEl0IGNvbnRhaW5zIGluZm9ybWF0aW9uIG9uIHRoZSBKYXZhIHR5cGUKLW9mIHRoZSBtZXNzYWdlIGxpc3RlbmVyIGludGVyZmFjZSBhbmQgYW4gYWN0aXZhdGlvbgotc3BlY2lmaWNhdGlvbi4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibWVzc2FnZWxpc3RlbmVyLXR5cGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmZ1bGx5LXF1YWxpZmllZC1jbGFzc1R5cGUiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgZWxlbWVudCBtZXNzYWdlbGlzdGVuZXItdHlwZSBzcGVjaWZpZXMgdGhlIGZ1bGx5Ci0gICAgICAgIHF1YWxpZmllZCBuYW1lIG9mIHRoZSBKYXZhIHR5cGUgb2YgYSBtZXNzYWdlCi0gICAgICAgIGxpc3RlbmVyIGludGVyZmFjZS4KLQotICAgICAgICBFeGFtcGxlOgotCi0gICAgICAgICAgPG1lc3NhZ2VsaXN0ZW5lci10eXBlPmphdmF4Lmptcy5NZXNzYWdlTGlzdGVuZXIKLSAgICAgICAgICA8L21lc3NhZ2VsaXN0ZW5lci10eXBlPgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImFjdGl2YXRpb25zcGVjIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTphY3RpdmF0aW9uc3BlY1R5cGUiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJvdXRib3VuZC1yZXNvdXJjZWFkYXB0ZXJUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIG91dGJvdW5kLXJlc291cmNlYWRhcHRlclR5cGUgc3BlY2lmaWVzIGluZm9ybWF0aW9uIGFib3V0Ci1hbiBvdXRib3VuZCByZXNvdXJjZSBhZGFwdGVyLiBUaGUgaW5mb3JtYXRpb24gaW5jbHVkZXMgZnVsbHkKLXF1YWxpZmllZCBuYW1lcyBvZiBjbGFzc2VzL2ludGVyZmFjZXMgcmVxdWlyZWQgYXMgcGFydCBvZgotdGhlIGNvbm5lY3RvciBhcmNoaXRlY3R1cmUgc3BlY2lmaWVkIGNvbnRyYWN0cyBmb3IKLWNvbm5lY3Rpb24gbWFuYWdlbWVudCwgbGV2ZWwgb2YgdHJhbnNhY3Rpb24gc3VwcG9ydAotcHJvdmlkZWQsIG9uZSBvciBtb3JlIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbXMgc3VwcG9ydGVkCi1hbmQgYWRkaXRpb25hbCByZXF1aXJlZCBzZWN1cml0eSBwZXJtaXNzaW9ucy4KLQotSWYgdGhlcmUgaXMgbm8gYXV0aGVudGljYXRpb24tbWVjaGFuaXNtIHNwZWNpZmllZCBhcyBwYXJ0IG9mCi1yZXNvdXJjZSBhZGFwdGVyIGVsZW1lbnQgdGhlbiB0aGUgcmVzb3VyY2UgYWRhcHRlciBkb2VzIG5vdAotc3VwcG9ydCBhbnkgc3RhbmRhcmQgc2VjdXJpdHkgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcyBhcwotcGFydCBvZiBzZWN1cml0eSBjb250cmFjdC4gVGhlIGFwcGxpY2F0aW9uIHNlcnZlciBpZ25vcmVzCi10aGUgc2VjdXJpdHkgcGFydCBvZiB0aGUgc3lzdGVtIGNvbnRyYWN0cyBpbiB0aGlzIGNhc2UuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImNvbm5lY3Rpb24tZGVmaW5pdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6Y29ubmVjdGlvbi1kZWZpbml0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJ0cmFuc2FjdGlvbi1zdXBwb3J0IgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTp0cmFuc2FjdGlvbi1zdXBwb3J0VHlwZSIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iYXV0aGVudGljYXRpb24tbWVjaGFuaXNtIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTphdXRoZW50aWNhdGlvbi1tZWNoYW5pc21UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJlYXV0aGVudGljYXRpb24tc3VwcG9ydCIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6dHJ1ZS1mYWxzZVR5cGUiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgZWxlbWVudCByZWF1dGhlbnRpY2F0aW9uLXN1cHBvcnQgc3BlY2lmaWVzCi0gICAgICAgIHdoZXRoZXIgdGhlIHJlc291cmNlIGFkYXB0ZXIgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMKLSAgICAgICAgcmUtYXV0aGVudGljYXRpb24gb2YgZXhpc3RpbmcgTWFuYWdlZC0gQ29ubmVjdGlvbgotICAgICAgICBpbnN0YW5jZS4gTm90ZSB0aGF0IHRoaXMgaW5mb3JtYXRpb24gaXMgZm9yIHRoZQotICAgICAgICByZXNvdXJjZSBhZGFwdGVyIGltcGxlbWVudGF0aW9uIGFuZCBub3QgZm9yIHRoZQotICAgICAgICB1bmRlcmx5aW5nIEVJUyBpbnN0YW5jZS4gVGhpcyBlbGVtZW50IG11c3QgaGF2ZQotICAgICAgICBlaXRoZXIgYSAidHJ1ZSIgb3IgImZhbHNlIiB2YWx1ZS4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotCi0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzZWN1cml0eS1wZXJtaXNzaW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpzZWN1cml0eS1wZXJtaXNzaW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJyZXF1aXJlZC1jb25maWctcHJvcGVydHlUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIHJlcXVpcmVkLWNvbmZpZy1wcm9wZXJ0eVR5cGUgY29udGFpbnMgYSBkZWNsYXJhdGlvbgotb2YgYSBzaW5nbGUgY29uZmlndXJhdGlvbiBwcm9wZXJ0eSB1c2VkIGZvciBzcGVjaWZ5aW5nIGEKLXJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gcHJvcGVydHkgbmFtZS4gSXQgaXMgdXNlZAotYnkgcmVxdWlyZWQtY29uZmlnLXByb3BlcnR5IGVsZW1lbnRzLgotCi1FeGFtcGxlOgotCi08cmVxdWlyZWQtY29uZmlnLXByb3BlcnR5PkRlc3RpbmF0aW9uPC9yZXF1aXJlZC1jb25maWctcHJvcGVydHk+Ci0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXNjcmlwdGlvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iY29uZmlnLXByb3BlcnR5LW5hbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmNvbmZpZy1wcm9wZXJ0eS1uYW1lVHlwZSIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9InJlc291cmNlYWRhcHRlclR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgcmVzb3VyY2VhZGFwdGVyVHlwZSBzcGVjaWZpZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCi1yZXNvdXJjZSBhZGFwdGVyLiBUaGUgaW5mb3JtYXRpb24gaW5jbHVkZXMgZnVsbHkgcXVhbGlmaWVkCi1yZXNvdXJjZSBhZGFwdGVyIEphdmEgY2xhc3MgbmFtZSwgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzLAotaW5mb3JtYXRpb24gc3BlY2lmaWMgdG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSByZXNvdXJjZQotYWRhcHRlciBsaWJyYXJ5IGFzIHNwZWNpZmllZCB0aHJvdWdoIHRoZQotb3V0Ym91bmQtcmVzb3VyY2VhZGFwdGVyIGFuZCBpbmJvdW5kLXJlc291cmNlYWRhcHRlcgotZWxlbWVudHMsIGFuZCBhbiBvcHRpb25hbCBzZXQgb2YgYWRtaW5pc3RlcmVkIG9iamVjdHMuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJlc291cmNlYWRhcHRlci1jbGFzcyIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZnVsbHktcXVhbGlmaWVkLWNsYXNzVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBlbGVtZW50IHJlc291cmNlYWRhcHRlci1jbGFzcyBzcGVjaWZpZXMgdGhlCi0gICAgICAgIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIGEgSmF2YSBjbGFzcyB0aGF0IGltcGxlbWVudHMKLSAgICAgICAgdGhlIGphdmF4LnJlc291cmNlLnNwaS5SZXNvdXJjZUFkYXB0ZXIKLSAgICAgICAgaW50ZXJmYWNlLiBUaGlzIEphdmEgY2xhc3MgaXMgcHJvdmlkZWQgYXMgcGFydCBvZgotICAgICAgICByZXNvdXJjZSBhZGFwdGVyJ3MgaW1wbGVtZW50YXRpb24gb2YgY29ubmVjdG9yCi0gICAgICAgIGFyY2hpdGVjdHVyZSBzcGVjaWZpZWQgY29udHJhY3RzLiBUaGUgaW1wbGVtZW50YXRpb24KLSAgICAgICAgb2YgdGhpcyBjbGFzcyBpcyByZXF1aXJlZCB0byBiZSBhIEphdmFCZWFuLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImNvbmZpZy1wcm9wZXJ0eSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6Y29uZmlnLXByb3BlcnR5VHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJvdXRib3VuZC1yZXNvdXJjZWFkYXB0ZXIiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOm91dGJvdW5kLXJlc291cmNlYWRhcHRlclR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImluYm91bmQtcmVzb3VyY2VhZGFwdGVyIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTppbmJvdW5kLXJlc291cmNlYWRhcHRlclR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImFkbWlub2JqZWN0IgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTphZG1pbm9iamVjdFR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9InNlY3VyaXR5LXBlcm1pc3Npb25UeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIHNlY3VyaXR5LXBlcm1pc3Npb25UeXBlIHNwZWNpZmllcyBhIHNlY3VyaXR5Ci1wZXJtaXNzaW9uIHRoYXQgaXMgcmVxdWlyZWQgYnkgdGhlIHJlc291cmNlIGFkYXB0ZXIgY29kZS4KLQotVGhlIHNlY3VyaXR5IHBlcm1pc3Npb24gbGlzdGVkIGluIHRoZSBkZXBsb3ltZW50IGRlc2NyaXB0b3IKLWFyZSBvbmVzIHRoYXQgYXJlIGRpZmZlcmVudCBmcm9tIHRob3NlIHJlcXVpcmVkIGJ5IHRoZQotZGVmYXVsdCBwZXJtaXNzaW9uIHNldCBhcyBzcGVjaWZpZWQgaW4gdGhlIGNvbm5lY3Rvcgotc3BlY2lmaWNhdGlvbi4gVGhlIG9wdGlvbmFsIGRlc2NyaXB0aW9uIGNhbiBtZW50aW9uIHNwZWNpZmljCi1yZWFzb24gdGhhdCByZXNvdXJjZSBhZGFwdGVyIHJlcXVpcmVzIGEgZ2l2ZW4gc2VjdXJpdHkKLXBlcm1pc3Npb24uCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXNjcmlwdGlvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ic2VjdXJpdHktcGVybWlzc2lvbi1zcGVjIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBlbGVtZW50IHBlcm1pc3Npb24tc3BlYyBzcGVjaWZpZXMgYSBzZWN1cml0eQotICAgICAgICBwZXJtaXNzaW9uIGJhc2VkIG9uIHRoZSBTZWN1cml0eSBwb2xpY3kgZmlsZQotICAgICAgICBzeW50YXguIFJlZmVyIHRvIHRoZSBmb2xsb3dpbmcgVVJMIGZvciBTdW4ncwotICAgICAgICBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2VjdXJpdHkgcGVybWlzc2lvbgotICAgICAgICBzcGVjaWZpY2F0aW9uOgotCi0gICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20vcHJvZHVjdHMvamRrLzEuNC9kb2NzL2d1aWRlL3NlY3VyaXR5L1BvbGljeUZpbGVzLmh0bWwjRmlsZVN5bnRheAotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0idHJhbnNhY3Rpb24tc3VwcG9ydFR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgdHJhbnNhY3Rpb24tc3VwcG9ydFR5cGUgc3BlY2lmaWVzIHRoZSBsZXZlbCBvZgotdHJhbnNhY3Rpb24gc3VwcG9ydCBwcm92aWRlZCBieSB0aGUgcmVzb3VyY2UgYWRhcHRlci4gSXQgaXMKLXVzZWQgYnkgdHJhbnNhY3Rpb24tc3VwcG9ydCBlbGVtZW50cy4KLQotVGhlIHZhbHVlIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0KLSAgICBOb1RyYW5zYWN0aW9uCi0gICAgTG9jYWxUcmFuc2FjdGlvbgotICAgIFhBVHJhbnNhY3Rpb24KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImoyZWU6c3RyaW5nIj4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm9UcmFuc2FjdGlvbiIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJMb2NhbFRyYW5zYWN0aW9uIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlhBVHJhbnNhY3Rpb24iLz4KLSAgICA8L3hzZDpyZXN0cmljdGlvbj4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPC94c2Q6c2NoZW1hPgotCmRpZmYgLS1naXQgYS92Mi94a2l0L3NjaGVtYXMvajJlZS9lamItamFyXzJfMS54c2QgYi92Mi94a2l0L3NjaGVtYXMvajJlZS9lamItamFyXzJfMS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxNmMxMmUuLjAwMDAwMDAKLS0tIGEvdjIveGtpdC9zY2hlbWFzL2oyZWUvZWpiLWphcl8yXzEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjM4MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiCi0gICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiCi0gICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotICAgICBhdHRyaWJ1dGVGb3JtRGVmYXVsdD0idW5xdWFsaWZpZWQiCi0gICAgIHZlcnNpb249IjIuMSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci1AKCMpZWpiLWphcl8yXzEueHNkcwkxLjEwIDA3LzI0LzAyCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1Db3B5cmlnaHQgMjAwMiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCA5MDEgU2FuIEFudG9uaW8KLVJvYWQsIFBhbG8gQWx0bywgQ2FsaWZvcm5pYSA5NDMwMywgVS5TLkEuIEFsbCByaWdodHMKLXJlc2VydmVkLgotCi1TdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGhhcyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzCi1yZWxhdGluZyB0byB0ZWNobm9sb2d5IGRlc2NyaWJlZCBpbiB0aGlzIGRvY3VtZW50LiBJbgotcGFydGljdWxhciwgYW5kIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlc2UgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgbWF5IGluY2x1ZGUgb25lIG9yIG1vcmUgb2YgdGhlIFUuUy4gcGF0ZW50cwotbGlzdGVkIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9wYXRlbnRzIGFuZCBvbmUgb3IgbW9yZQotYWRkaXRpb25hbCBwYXRlbnRzIG9yIHBlbmRpbmcgcGF0ZW50IGFwcGxpY2F0aW9ucyBpbiB0aGUKLVUuUy4gYW5kIG90aGVyIGNvdW50cmllcy4KLQotVGhpcyBkb2N1bWVudCBhbmQgdGhlIHRlY2hub2xvZ3kgd2hpY2ggaXQgZGVzY3JpYmVzIGFyZQotZGlzdHJpYnV0ZWQgdW5kZXIgbGljZW5zZXMgcmVzdHJpY3RpbmcgdGhlaXIgdXNlLCBjb3B5aW5nLAotZGlzdHJpYnV0aW9uLCBhbmQgZGVjb21waWxhdGlvbi4gTm8gcGFydCBvZiB0aGlzIGRvY3VtZW50Ci1tYXkgYmUgcmVwcm9kdWNlZCBpbiBhbnkgZm9ybSBieSBhbnkgbWVhbnMgd2l0aG91dCBwcmlvcgotd3JpdHRlbiBhdXRob3JpemF0aW9uIG9mIFN1biBhbmQgaXRzIGxpY2Vuc29ycywgaWYgYW55LgotCi1UaGlyZC1wYXJ0eSBzb2Z0d2FyZSwgaW5jbHVkaW5nIGZvbnQgdGVjaG5vbG9neSwgaXMKLWNvcHlyaWdodGVkIGFuZCBsaWNlbnNlZCBmcm9tIFN1biBzdXBwbGllcnMuCi0KLVN1biwgU3VuIE1pY3Jvc3lzdGVtcywgdGhlIFN1biBsb2dvLCBTb2xhcmlzLCBKYXZhLCBKMkVFLAotSmF2YVNlcnZlciBQYWdlcywgRW50ZXJwcmlzZSBKYXZhQmVhbnMgYW5kIHRoZSBKYXZhIENvZmZlZQotQ3VwIGxvZ28gYXJlIHRyYWRlbWFya3Mgb3IgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9mIFN1bgotTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVLlMuIGFuZCBvdGhlciBjb3VudHJpZXMuCi0KLUZlZGVyYWwgQWNxdWlzaXRpb25zOiBDb21tZXJjaWFsIFNvZnR3YXJlIC0gR292ZXJubWVudCBVc2VycwotU3ViamVjdCB0byBTdGFuZGFyZCBMaWNlbnNlIFRlcm1zIGFuZCBDb25kaXRpb25zLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGlzIGlzIHRoZSBYTUwgU2NoZW1hIGZvciB0aGUgRUpCIDIuMSBkZXBsb3ltZW50Ci1kZXNjcmlwdG9yLiAgQWxsIEVKQiBkZXBsb3ltZW50IGRlc2NyaXB0b3JzIG11c3QgaW5kaWNhdGUKLXRoZSBlamItamFyIHNjaGVtYSBieSB1c2luZyB0aGUgSjJFRSBuYW1lc3BhY2U6Ci0KLWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKLQotYW5kIGJ5IGluZGljYXRpbmcgdGhlIHZlcnNpb24gb2YgdGhlIHNjaGVtYSBieQotdXNpbmcgdGhlIHZlcnNpb24gZWxlbWVudCBhcyBzaG93biBiZWxvdzoKLQotICAgIDxlamItamFyIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIgotICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUKLSAgICAgICAgIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvZWpiLWphcl8yXzEueHNkIgotICAgICB2ZXJzaW9uPSIyLjEiPgotICAgIC4uLgotICAgIDwvZWpiLWphcj4KLQotVGhlIGluc3RhbmNlIGRvY3VtZW50cyBtYXkgaW5kaWNhdGUgdGhlIHB1Ymxpc2hlZCB2ZXJzaW9uIG9mCi10aGUgc2NoZW1hIHVzaW5nIHRoZSB4c2k6c2NoZW1hTG9jYXRpb24gYXR0cmlidXRlIGZvciB0aGUKLUoyRUUgbmFtZXNwYWNlIHdpdGggdGhlIGZvbGxvd2luZyBsb2NhdGlvbjoKLQotaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS9lamItamFyXzJfMS54c2QKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGZvbGxvd2luZyBjb252ZW50aW9ucyBhcHBseSB0byBhbGwgSjJFRQotZGVwbG95bWVudCBkZXNjcmlwdG9yIGVsZW1lbnRzIHVubGVzcyBpbmRpY2F0ZWQgb3RoZXJ3aXNlLgotCi0tIEluIGVsZW1lbnRzIHRoYXQgc3BlY2lmeSBhIHBhdGhuYW1lIHRvIGEgZmlsZSB3aXRoaW4gdGhlCi0gIHNhbWUgSkFSIGZpbGUsIHJlbGF0aXZlIGZpbGVuYW1lcyAoaS5lLiwgdGhvc2Ugbm90Ci0gIHN0YXJ0aW5nIHdpdGggIi8iKSBhcmUgY29uc2lkZXJlZCByZWxhdGl2ZSB0byB0aGUgcm9vdCBvZgotICB0aGUgSkFSIGZpbGUncyBuYW1lc3BhY2UuICBBYnNvbHV0ZSBmaWxlbmFtZXMgKGkuZS4sIHRob3NlCi0gIHN0YXJ0aW5nIHdpdGggIi8iKSBhbHNvIHNwZWNpZnkgbmFtZXMgaW4gdGhlIHJvb3Qgb2YgdGhlCi0gIEpBUiBmaWxlJ3MgbmFtZXNwYWNlLiAgSW4gZ2VuZXJhbCwgcmVsYXRpdmUgbmFtZXMgYXJlCi0gIHByZWZlcnJlZC4gIFRoZSBleGNlcHRpb24gaXMgLndhciBmaWxlcyB3aGVyZSBhYnNvbHV0ZQotICBuYW1lcyBhcmUgcHJlZmVycmVkIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBTZXJ2bGV0IEFQSS4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJqMmVlXzFfNC54c2QiLz4KLQotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLQotPHhzZDplbGVtZW50IG5hbWU9ImVqYi1qYXIiIHR5cGU9ImoyZWU6ZWpiLWphclR5cGUiPgotICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICBUaGlzIGlzIHRoZSByb290IG9mIHRoZSBlamItamFyIGRlcGxveW1lbnQgZGVzY3JpcHRvci4KLQotICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6a2V5IG5hbWU9ImVqYi1uYW1lLWtleSI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIFRoZSBlamItbmFtZSBlbGVtZW50IGNvbnRhaW5zIHRoZSBuYW1lIG9mIGFuIGVudGVycHJpc2UKLSAgICBiZWFuLiBUaGUgbmFtZSBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIGVqYi1qYXIgZmlsZS4KLQotICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpzZWxlY3RvciB4cGF0aD0iajJlZTplbnRlcnByaXNlLWJlYW5zLyoiLz4KLSAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTplamItbmFtZSIvPgotICAgIDwveHNkOmtleT4KLQotICAgIDx4c2Q6a2V5cmVmIG5hbWU9ImVqYi1uYW1lLXJlZmVyZW5jZXMiCi0gICAgICAgICAgICByZWZlcj0iajJlZTplamItbmFtZS1rZXkiPgotICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICBUaGUga2V5cmVmIGluZGljYXRlcyB0aGUgcmVmZXJlbmNlcyBmcm9tCi0gICAgcmVsYXRpb25zaGlwLXJvbGUtc291cmNlIG11c3QgYmUgdG8gYSBzcGVjaWZpYyBlamItbmFtZQotICAgIGRlZmluZWQgd2l0aGluIHRoZSBzY29wZSBvZiBlbnRlcnByaXNlLWJlYW5zIGVsZW1lbnQuCi0KLSAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6c2VsZWN0b3IKLSAgICAgICAgICAgIHhwYXRoPSIuLy9qMmVlOmVqYi1yZWxhdGlvbnNoaXAtcm9sZS9qMmVlOnJlbGF0aW9uc2hpcC1yb2xlLXNvdXJjZSIvPgotICAgICAgICA8eHNkOmZpZWxkCi0gICAgICAgICAgICB4cGF0aD0iajJlZTplamItbmFtZSIvPgotICAgIDwveHNkOmtleXJlZj4KLQotICAgIDx4c2Q6a2V5IG5hbWU9InJvbGUtbmFtZS1rZXkiPgotICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICBBIHJvbGUtbmFtZS1rZXkgaXMgc3BlY2lmaWVkIHRvIGFsbG93IHRoZSByZWZlcmVuY2VzCi0gICAgZnJvbSB0aGUgc2VjdXJpdHktcm9sZS1yZWZzLgotCi0gICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOmVudGVycHJpc2UtYmVhbnMvKi9qMmVlOnNlY3VyaXR5LXJvbGUiLz4KLSAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTpyb2xlLW5hbWUiLz4KLSAgICA8L3hzZDprZXk+Ci0KLSAgICA8eHNkOmtleXJlZiBuYW1lPSJyb2xlLW5hbWUtcmVmZXJlbmNlcyIKLSAgICAgICAgICAgIHJlZmVyPSJqMmVlOnJvbGUtbmFtZS1rZXkiPgotICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICBUaGUga2V5cmVmIGluZGljYXRlcyB0aGUgcmVmZXJlbmNlcyBmcm9tCi0gICAgc2VjdXJpdHktcm9sZS1yZWYgdG8gYSBzcGVjaWZpZWQgcm9sZS1uYW1lLgotCi0gICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOmVudGVycHJpc2UtYmVhbnMvKi9qMmVlOnNlY3VyaXR5LXJvbGUtcmVmIi8+Ci0gICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6cm9sZS1saW5rIi8+Ci0gICAgPC94c2Q6a2V5cmVmPgotCi08L3hzZDplbGVtZW50PgotCi0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImFjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5VHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBhY3RpdmF0aW9uLWNvbmZpZy1wcm9wZXJ0eVR5cGUgY29udGFpbnMgYSBuYW1lL3ZhbHVlCi1jb25maWd1cmF0aW9uIHByb3BlcnR5IHBhaXIgZm9yIGEgbWVzc2FnZS1kcml2ZW4gYmVhbi4KLQotVGhlIHByb3BlcnRpZXMgdGhhdCBhcmUgcmVjb2duaXplZCBmb3IgYSBwYXJ0aWN1bGFyCi1tZXNzYWdlLWRyaXZlbiBiZWFuIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBtZXNzYWdpbmcgdHlwZS4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9InhzZDpzdHJpbmciPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktbmFtZSBlbGVtZW50IGNvbnRhaW5zCi0gICAgICAgIHRoZSBuYW1lIGZvciBhbiBhY3RpdmF0aW9uIGNvbmZpZ3VyYXRpb24gcHJvcGVydHkgb2YKLSAgICAgICAgYSBtZXNzYWdlLWRyaXZlbiBiZWFuLgotCi0gICAgICAgIEZvciBKTVMgbWVzc2FnZS1kcml2ZW4gYmVhbnMsIHRoZSBmb2xsb3dpbmcgcHJvcGVydHkKLSAgICAgICAgbmFtZXMgYXJlIHJlY29nbml6ZWQ6IGFja25vd2xlZGdlTW9kZSwKLSAgICAgICAgbWVzc2FnZVNlbGVjdG9yLCBkZXN0aW5hdGlvblR5cGUsIHN1YnNjcmlwdGlvbkR1cmFiaWxpdHkKLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iYWN0aXZhdGlvbi1jb25maWctcHJvcGVydHktdmFsdWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGFjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5LXZhbHVlIGVsZW1lbnQKLSAgICAgICAgY29udGFpbnMgdGhlIHZhbHVlIGZvciBhbiBhY3RpdmF0aW9uIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgcHJvcGVydHkgb2YgYSBtZXNzYWdlLWRyaXZlbiBiZWFuLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iYWN0aXZhdGlvbi1jb25maWdUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGFjdGl2YXRpb24tY29uZmlnVHlwZSBkZWZpbmVzIGluZm9ybWF0aW9uIGFib3V0IHRoZQotZXhwZWN0ZWQgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIG9mIHRoZSBtZXNzYWdlLWRyaXZlbiBiZWFuCi1pbiBpdHMgb3BlcmF0aW9uYWwgZW52aXJvbm1lbnQuIFRoaXMgbWF5IGluY2x1ZGUgaW5mb3JtYXRpb24KLWFib3V0IG1lc3NhZ2UgYWNrbm93bGVkZ2VtZW50LCBtZXNzYWdlIHNlbGVjdG9yLCBleHBlY3RlZAotZGVzdGluYXRpb24gdHlwZSwgZXRjLgotCi1UaGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBleHByZXNzZWQgaW4gdGVybXMgb2YKLW5hbWUvdmFsdWUgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzLgotCi1UaGUgcHJvcGVydGllcyB0aGF0IGFyZSByZWNvZ25pemVkIGZvciBhIHBhcnRpY3VsYXIKLW1lc3NhZ2UtZHJpdmVuIGJlYW4gYXJlIGRldGVybWluZWQgYnkgdGhlIG1lc3NhZ2luZyB0eXBlLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImFjdGl2YXRpb24tY29uZmlnLXByb3BlcnR5IgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTphY3RpdmF0aW9uLWNvbmZpZy1wcm9wZXJ0eVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVwbG95bWVudC1leHRlbnNpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlcGxveW1lbnQtZXh0ZW5zaW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJhc3NlbWJseS1kZXNjcmlwdG9yVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBhc3NlbWJseS1kZXNjcmlwdG9yVHlwZSBkZWZpbmVzCi1hcHBsaWNhdGlvbi1hc3NlbWJseSBpbmZvcm1hdGlvbi4KLQotVGhlIGFwcGxpY2F0aW9uLWFzc2VtYmx5IGluZm9ybWF0aW9uIGNvbnNpc3RzIG9mIHRoZQotZm9sbG93aW5nIHBhcnRzOiB0aGUgZGVmaW5pdGlvbiBvZiBzZWN1cml0eSByb2xlcywgdGhlCi1kZWZpbml0aW9uIG9mIG1ldGhvZCBwZXJtaXNzaW9ucywgdGhlIGRlZmluaXRpb24gb2YKLXRyYW5zYWN0aW9uIGF0dHJpYnV0ZXMgZm9yIGVudGVycHJpc2UgYmVhbnMgd2l0aAotY29udGFpbmVyLW1hbmFnZWQgdHJhbnNhY3Rpb24gZGVtYXJjYXRpb24gYW5kIGEgbGlzdCBvZgotbWV0aG9kcyB0byBiZSBleGNsdWRlZCBmcm9tIGJlaW5nIGludm9rZWQuCi0KLUFsbCB0aGUgcGFydHMgYXJlIG9wdGlvbmFsIGluIHRoZSBzZW5zZSB0aGF0IHRoZXkgYXJlCi1vbWl0dGVkIGlmIHRoZSBsaXN0cyByZXByZXNlbnRlZCBieSB0aGVtIGFyZSBlbXB0eS4KLQotUHJvdmlkaW5nIGFuIGFzc2VtYmx5LWRlc2NyaXB0b3IgaW4gdGhlIGRlcGxveW1lbnQKLWRlc2NyaXB0b3IgaXMgb3B0aW9uYWwgZm9yIHRoZSBlamItamFyIGZpbGUgcHJvZHVjZXIuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlY3VyaXR5LXJvbGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnNlY3VyaXR5LXJvbGVUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im1ldGhvZC1wZXJtaXNzaW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTptZXRob2QtcGVybWlzc2lvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iY29udGFpbmVyLXRyYW5zYWN0aW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpjb250YWluZXItdHJhbnNhY3Rpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im1lc3NhZ2UtZGVzdGluYXRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOm1lc3NhZ2UtZGVzdGluYXRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImV4Y2x1ZGUtbGlzdCIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZXhjbHVkZS1saXN0VHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVwbG95bWVudC1leHRlbnNpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlcGxveW1lbnQtZXh0ZW5zaW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJjbXAtZmllbGRUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGNtcC1maWVsZFR5cGUgZGVzY3JpYmVzIGEgY29udGFpbmVyLW1hbmFnZWQgZmllbGQuIFRoZQotY21wLWZpZWxkVHlwZSBjb250YWlucyBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbiBvZiB0aGUgZmllbGQsCi1hbmQgdGhlIG5hbWUgb2YgdGhlIGZpZWxkLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJmaWVsZC1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpqYXZhLWlkZW50aWZpZXJUeXBlIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGZpZWxkLW5hbWUgZWxlbWVudCBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgYQotICAgICAgICBjb250YWluZXIgbWFuYWdlZCBmaWVsZC4KLQotICAgICAgICBUaGUgbmFtZSBvZiB0aGUgY21wLWZpZWxkIG9mIGFuIGVudGl0eSBiZWFuIHdpdGgKLSAgICAgICAgY21wLXZlcnNpb24gMi54IG11c3QgYmVnaW4gd2l0aCBhIGxvd2VyY2FzZQotICAgICAgICBsZXR0ZXIuIFRoaXMgZmllbGQgaXMgYWNjZXNzZWQgYnkgbWV0aG9kcyB3aG9zZQotICAgICAgICBuYW1lcyBjb25zaXN0cyBvZiB0aGUgbmFtZSBvZiB0aGUgZmllbGQgc3BlY2lmaWVkIGJ5Ci0gICAgICAgIGZpZWxkLW5hbWUgaW4gd2hpY2ggdGhlIGZpcnN0IGxldHRlciBpcyB1cHBlcmNhc2VkLAotICAgICAgICBwcmVmaXhlZCBieSAiZ2V0IiBvciAic2V0Ii4KLQotICAgICAgICBUaGUgbmFtZSBvZiB0aGUgY21wLWZpZWxkIG9mIGFuIGVudGl0eSBiZWFuIHdpdGgKLSAgICAgICAgY21wLXZlcnNpb24gMS54IG11c3QgZGVub3RlIGEgcHVibGljIGZpZWxkIG9mIHRoZQotICAgICAgICBlbnRlcnByaXNlIGJlYW4gY2xhc3Mgb3Igb25lIG9mIGl0cyBzdXBlcmNsYXNzZXMuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlcGxveW1lbnQtZXh0ZW5zaW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXBsb3ltZW50LWV4dGVuc2lvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0iY21wLXZlcnNpb25UeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGNtcC12ZXJzaW9uVHlwZSBzcGVjaWZpZXMgdGhlIHZlcnNpb24gb2YgYW4gZW50aXR5IGJlYW4KLXdpdGggY29udGFpbmVyLW1hbmFnZWQgcGVyc2lzdGVuY2UuIEl0IGlzIHVzZWQgYnkKLWNtcC12ZXJzaW9uIGVsZW1lbnRzLgotCi1UaGUgdmFsdWUgbXVzdCBiZSBvbmUgb2YgdGhlIHR3byBmb2xsb3dpbmc6Ci0KLSAgICAxLngKLSAgICAyLngKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImoyZWU6c3RyaW5nIj4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iMS54Ii8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjIueCIvPgotICAgIDwveHNkOnJlc3RyaWN0aW9uPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJjbXItZmllbGQtdHlwZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgY21yLWZpZWxkLXR5cGUgZWxlbWVudCBzcGVjaWZpZXMgdGhlIGNsYXNzIG9mIGEKLWNvbGxlY3Rpb24tdmFsdWVkIGxvZ2ljYWwgcmVsYXRpb25zaGlwIGZpZWxkIGluIHRoZSBlbnRpdHkKLWJlYW4gY2xhc3MuIFRoZSB2YWx1ZSBvZiBhbiBlbGVtZW50IHVzaW5nIGNtci1maWVsZC10eXBlVHlwZQotbXVzdCBiZSBlaXRoZXI6IGphdmEudXRpbC5Db2xsZWN0aW9uIG9yIGphdmEudXRpbC5TZXQuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImphdmEudXRpbC5Db2xsZWN0aW9uIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImphdmEudXRpbC5TZXQiLz4KLSAgICA8L3hzZDpyZXN0cmljdGlvbj4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImNtci1maWVsZFR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgY21yLWZpZWxkVHlwZSBkZXNjcmliZXMgdGhlIGJlYW4gcHJvdmlkZXIncyB2aWV3IG9mCi1hIHJlbGF0aW9uc2hpcC4gSXQgY29uc2lzdHMgb2YgYW4gb3B0aW9uYWwgZGVzY3JpcHRpb24sIGFuZAotdGhlIG5hbWUgYW5kIHRoZSBjbGFzcyB0eXBlIG9mIGEgZmllbGQgaW4gdGhlIHNvdXJjZSBvZiBhCi1yb2xlIG9mIGEgcmVsYXRpb25zaGlwLiBUaGUgY21yLWZpZWxkLW5hbWUgZWxlbWVudAotY29ycmVzcG9uZHMgdG8gdGhlIG5hbWUgdXNlZCBmb3IgdGhlIGdldCBhbmQgc2V0IGFjY2Vzc29yCi1tZXRob2RzIGZvciB0aGUgcmVsYXRpb25zaGlwLiBUaGUgY21yLWZpZWxkLXR5cGUgZWxlbWVudCBpcwotdXNlZCBvbmx5IGZvciBjb2xsZWN0aW9uLXZhbHVlZCBjbXItZmllbGRzLiBJdCBzcGVjaWZpZXMgdGhlCi10eXBlIG9mIHRoZSBjb2xsZWN0aW9uIHRoYXQgaXMgdXNlZC4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJjbXItZmllbGQtbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c3RyaW5nIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGNtci1maWVsZC1uYW1lIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEKLSAgICAgICAgbG9naWNhbCByZWxhdGlvbnNoaXAgZmllbGQgaW4gdGhlIGVudGl0eSBiZWFuCi0gICAgICAgIGNsYXNzLiBUaGUgbmFtZSBvZiB0aGUgY21yLWZpZWxkIG11c3QgYmVnaW4gd2l0aCBhCi0gICAgICAgIGxvd2VyY2FzZSBsZXR0ZXIuIFRoaXMgZmllbGQgaXMgYWNjZXNzZWQgYnkgbWV0aG9kcwotICAgICAgICB3aG9zZSBuYW1lcyBjb25zaXN0IG9mIHRoZSBuYW1lIG9mIHRoZSBmaWVsZAotICAgICAgICBzcGVjaWZpZWQgYnkgY21yLWZpZWxkLW5hbWUgaW4gd2hpY2ggdGhlIGZpcnN0Ci0gICAgICAgIGxldHRlciBpcyB1cHBlcmNhc2VkLCBwcmVmaXhlZCBieSAiZ2V0IiBvciAic2V0Ii4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iY21yLWZpZWxkLXR5cGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmNtci1maWVsZC10eXBlVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVwbG95bWVudC1leHRlbnNpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlcGxveW1lbnQtZXh0ZW5zaW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJjb250YWluZXItdHJhbnNhY3Rpb25UeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGNvbnRhaW5lci10cmFuc2FjdGlvblR5cGUgc3BlY2lmaWVzIGhvdyB0aGUgY29udGFpbmVyCi1tdXN0IG1hbmFnZSB0cmFuc2FjdGlvbiBzY29wZXMgZm9yIHRoZSBlbnRlcnByaXNlIGJlYW4ncwotbWV0aG9kIGludm9jYXRpb25zLiBJdCBkZWZpbmVzIGFuIG9wdGlvbmFsIGRlc2NyaXB0aW9uLCBhCi1saXN0IG9mIG1ldGhvZCBlbGVtZW50cywgYW5kIGEgdHJhbnNhY3Rpb24gYXR0cmlidXRlLiBUaGUKLXRyYW5zYWN0aW9uIGF0dHJpYnV0ZSBpcyB0byBiZSBhcHBsaWVkIHRvIGFsbCB0aGUgc3BlY2lmaWVkCi1tZXRob2RzLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im1ldGhvZCIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bWV0aG9kVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJ0cmFucy1hdHRyaWJ1dGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnRyYW5zLWF0dHJpYnV0ZVR5cGUiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9ImVqYi1jbGFzc1R5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgZWpiLWNsYXNzVHlwZSBjb250YWlucyB0aGUgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlCi1lbnRlcnByaXNlIGJlYW4ncyBjbGFzcy4gSXQgaXMgdXNlZCBieSBlamItY2xhc3MgZWxlbWVudHMuCi0KLUV4YW1wbGU6Ci0KLSAgICA8ZWpiLWNsYXNzPmNvbS53b21iYXQuZW1wbC5FbXBsb3llZVNlcnZpY2VCZWFuPC9lamItY2xhc3M+Ci0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOmZ1bGx5LXF1YWxpZmllZC1jbGFzc1R5cGUiLz4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImVqYi1qYXJUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGVqYi1qYXJUeXBlIGRlZmluZXMgdGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgRUpCCi1kZXBsb3ltZW50IGRlc2NyaXB0b3IuIEl0IGNvbnRhaW5zCi0KLSAgICAtIGFuIG9wdGlvbmFsIGRlc2NyaXB0aW9uIG9mIHRoZSBlamItamFyIGZpbGUKLSAgICAtIGFuIG9wdGlvbmFsIGRpc3BsYXkgbmFtZQotICAgIC0gYW4gb3B0aW9uYWwgaWNvbiB0aGF0IGNvbnRhaW5zIGEgc21hbGwgYW5kIGEgbGFyZ2UKLSAgICAgIGljb24gZmlsZSBuYW1lCi0gICAgLSBtYW5kYXRvcnkgc3RydWN0dXJhbCBpbmZvcm1hdGlvbiBhYm91dCBhbGwgaW5jbHVkZWQKLSAgICAgIGVudGVycHJpc2UgYmVhbnMKLSAgICAtIGEgZGVzY3JpcHRvciBmb3IgY29udGFpbmVyIG1hbmFnZWQgcmVsYXRpb25zaGlwcywKLSAgICAgIGlmIGFueQotICAgIC0gYW4gb3B0aW9uYWwgYXBwbGljYXRpb24tYXNzZW1ibHkgZGVzY3JpcHRvcgotICAgIC0gYW4gb3B0aW9uYWwgbmFtZSBvZiBhbiBlamItY2xpZW50LWphciBmaWxlIGZvciB0aGUKLSAgICAgIGVqYi1qYXIuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXNjcmlwdGlvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGlzcGxheS1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkaXNwbGF5LW5hbWVUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Imljb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmljb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVudGVycHJpc2UtYmVhbnMiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVudGVycHJpc2UtYmVhbnNUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyZWxhdGlvbnNoaXBzIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpyZWxhdGlvbnNoaXBzVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgIDx4c2Q6dW5pcXVlIG5hbWU9InJlbGF0aW9uc2hpcC1uYW1lLXVuaXF1ZW5lc3MiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgZWpiLXJlbGF0aW9uLW5hbWUgY29udGFpbnMgdGhlIG5hbWUgb2YgYQotICAgICAgICByZWxhdGlvbi4gVGhlIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluCi0gICAgICAgIHJlbGF0aW9uc2hpcHMuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6ZWpiLXJlbGF0aW9uIi8+Ci0gICAgICAgICAgICA8eHNkOmZpZWxkICAgIHhwYXRoPSJqMmVlOmVqYi1yZWxhdGlvbi1uYW1lIi8+Ci0gICAgICAgIDwveHNkOnVuaXF1ZT4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImFzc2VtYmx5LWRlc2NyaXB0b3IiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmFzc2VtYmx5LWRlc2NyaXB0b3JUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgUHJvdmlkaW5nIGFuIGFzc2VtYmx5LWRlc2NyaXB0b3IgaW4gdGhlIGRlcGxveW1lbnQKLSAgICAgICAgZGVzY3JpcHRvciBpcyBvcHRpb25hbCBmb3IgdGhlIGVqYi1qYXIgZmlsZQotICAgICAgICBwcm9kdWNlci4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZWpiLWNsaWVudC1qYXIiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnBhdGhUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIG9wdGlvbmFsIGVqYi1jbGllbnQtamFyIGVsZW1lbnQgc3BlY2lmaWVzIGEgSkFSCi0gICAgICAgIGZpbGUgdGhhdCBjb250YWlucyB0aGUgY2xhc3MgZmlsZXMgbmVjZXNzYXJ5IGZvciBhCi0gICAgICAgIGNsaWVudCBwcm9ncmFtIHRvIGFjY2VzcyB0aGUKLSAgICAgICAgZW50ZXJwcmlzZSBiZWFucyBpbiB0aGUgZWpiLWphciBmaWxlLgotCi0gICAgICAgIEV4YW1wbGU6Ci0KLSAgICAgICAgICAgIDxlamItY2xpZW50LWphcj5lbXBsb3llZV9zZXJ2aWNlX2NsaWVudC5qYXIKLSAgICAgICAgICAgIDwvZWpiLWNsaWVudC1qYXI+Ci0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlcGxveW1lbnQtZXh0ZW5zaW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXBsb3ltZW50LWV4dGVuc2lvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLSAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIgotICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGV3ZXktdmVyc2lvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgZml4ZWQ9IjIuMSIKLSAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIj4KLSAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgVGhlIHZlcnNpb24gc3BlY2lmaWVzIHRoZSB2ZXJzaW9uIG9mIHRoZQotICAgIEVKQiBzcGVjaWZpY2F0aW9uIHRoYXQgdGhlIGluc3RhbmNlIGRvY3VtZW50IG11c3QKLSAgICBjb21wbHkgd2l0aC4gVGhpcyBpbmZvcm1hdGlvbiBlbmFibGVzIGRlcGxveW1lbnQgdG9vbHMKLSAgICB0byB2YWxpZGF0ZSBhIHBhcnRpY3VsYXIgRUpCIERlcGxveW1lbnQKLSAgICBEZXNjcmlwdG9yIHdpdGggcmVzcGVjdCB0byBhIHNwZWNpZmljIHZlcnNpb24gb2YgdGhlIEVKQgotICAgIHNjaGVtYS4KLQotICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICA8L3hzZDphdHRyaWJ1dGU+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJlamItbmFtZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgZWpiLW5hbWVUeXBlIHNwZWNpZmllcyBhbiBlbnRlcnByaXNlIGJlYW4ncyBuYW1lLiBJdCBpcwotdXNlZCBieSBlamItbmFtZSBlbGVtZW50cy4gVGhpcyBuYW1lIGlzIGFzc2lnbmVkIGJ5IHRoZQotZWpiLWphciBmaWxlIHByb2R1Y2VyIHRvIG5hbWUgdGhlIGVudGVycHJpc2UgYmVhbiBpbiB0aGUKLWVqYi1qYXIgZmlsZSdzIGRlcGxveW1lbnQgZGVzY3JpcHRvci4gVGhlIG5hbWUgbXVzdCBiZQotdW5pcXVlIGFtb25nIHRoZSBuYW1lcyBvZiB0aGUgZW50ZXJwcmlzZSBiZWFucyBpbiB0aGUgc2FtZQotZWpiLWphciBmaWxlLgotCi1UaGVyZSBpcyBubyBhcmNoaXRlY3RlZCByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgdXNlZAotZWpiLW5hbWUgaW4gdGhlIGRlcGxveW1lbnQgZGVzY3JpcHRvciBhbmQgdGhlIEpOREkgbmFtZSB0aGF0Ci10aGUgRGVwbG95ZXIgd2lsbCBhc3NpZ24gdG8gdGhlIGVudGVycHJpc2UgYmVhbidzIGhvbWUuCi0KLVRoZSBuYW1lIGZvciBhbiBlbnRpdHkgYmVhbiBtdXN0IGNvbmZvcm0gdG8gdGhlIGxleGljYWwKLXJ1bGVzIGZvciBhbiBOTVRPS0VOLgotCi1FeGFtcGxlOgotCi08ZWpiLW5hbWU+RW1wbG95ZWVTZXJ2aWNlPC9lamItbmFtZT4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpOTVRPS0VOIj4KLSAgICAgICAgPHhzZDp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIvPgotICAgIDwveHNkOnJlc3RyaWN0aW9uPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iZWpiLXJlbGF0aW9uVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBlamItcmVsYXRpb25UeXBlIGRlc2NyaWJlcyBhIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHR3bwotZW50aXR5IGJlYW5zIHdpdGggY29udGFpbmVyLW1hbmFnZWQgcGVyc2lzdGVuY2UuICBJdCBpcyB1c2VkCi1ieSBlamItcmVsYXRpb24gZWxlbWVudHMuIEl0IGNvbnRhaW5zIGEgZGVzY3JpcHRpb247IGFuCi1vcHRpb25hbCBlamItcmVsYXRpb24tbmFtZSBlbGVtZW50OyBhbmQgZXhhY3RseSB0d28KLXJlbGF0aW9uc2hpcCByb2xlIGRlY2xhcmF0aW9ucywgZGVmaW5lZCBieSB0aGUKLWVqYi1yZWxhdGlvbnNoaXAtcm9sZSBlbGVtZW50cy4gVGhlIG5hbWUgb2YgdGhlCi1yZWxhdGlvbnNoaXAsIGlmIHNwZWNpZmllZCwgaXMgdW5pcXVlIHdpdGhpbiB0aGUgZWpiLWphcgotZmlsZS4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJlamItcmVsYXRpb24tbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c3RyaW5nIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGVqYi1yZWxhdGlvbi1uYW1lIGVsZW1lbnQgcHJvdmlkZXMgYSB1bmlxdWUgbmFtZQotICAgICAgICB3aXRoaW4gdGhlIGVqYi1qYXIgZmlsZSBmb3IgYSByZWxhdGlvbnNoaXAuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVqYi1yZWxhdGlvbnNoaXAtcm9sZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZWpiLXJlbGF0aW9uc2hpcC1yb2xlVHlwZSIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZWpiLXJlbGF0aW9uc2hpcC1yb2xlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplamItcmVsYXRpb25zaGlwLXJvbGVUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXBsb3ltZW50LWV4dGVuc2lvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVwbG95bWVudC1leHRlbnNpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImVqYi1yZWxhdGlvbnNoaXAtcm9sZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgZWpiLXJlbGF0aW9uc2hpcC1yb2xlVHlwZSBkZXNjcmliZXMgYSByb2xlIHdpdGhpbiBhCi1yZWxhdGlvbnNoaXAuIFRoZXJlIGFyZSB0d28gcm9sZXMgaW4gZWFjaCByZWxhdGlvbnNoaXAuCi0KLVRoZSBlamItcmVsYXRpb25zaGlwLXJvbGVUeXBlIGNvbnRhaW5zIGFuIG9wdGlvbmFsCi1kZXNjcmlwdGlvbjsgYW4gb3B0aW9uYWwgbmFtZSBmb3IgdGhlIHJlbGF0aW9uc2hpcCByb2xlOyBhCi1zcGVjaWZpY2F0aW9uIG9mIHRoZSBtdWx0aXBsaWNpdHkgb2YgdGhlIHJvbGU7IGFuIG9wdGlvbmFsCi1zcGVjaWZpY2F0aW9uIG9mIGNhc2NhZGUtZGVsZXRlIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSByb2xlOwotdGhlIHJvbGUgc291cmNlOyBhbmQgYSBkZWNsYXJhdGlvbiBvZiB0aGUgY21yLWZpZWxkLCBpZiBhbnksCi1ieSBtZWFucyBvZiB3aGljaCB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgcmVsYXRpb25zaGlwIGlzCi1hY2Nlc3NlZCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiB0aGUgcm9sZSBzb3VyY2UuCi0KLVRoZSBtdWx0aXBsaWNpdHkgYW5kIHJvbGUtc291cmNlIGVsZW1lbnQgYXJlIG1hbmRhdG9yeS4KLQotVGhlIHJlbGF0aW9uc2hpcC1yb2xlLXNvdXJjZSBlbGVtZW50IGRlc2lnbmF0ZXMgYW4gZW50aXR5Ci1iZWFuIGJ5IG1lYW5zIG9mIGFuIGVqYi1uYW1lIGVsZW1lbnQuIEZvciBiaWRpcmVjdGlvbmFsCi1yZWxhdGlvbnNoaXBzLCBib3RoIHJvbGVzIG9mIGEgcmVsYXRpb25zaGlwIG11c3QgZGVjbGFyZSBhCi1yZWxhdGlvbnNoaXAtcm9sZS1zb3VyY2UgZWxlbWVudCB0aGF0IHNwZWNpZmllcyBhIGNtci1maWVsZAotaW4gdGVybXMgb2Ygd2hpY2ggdGhlIHJlbGF0aW9uc2hpcCBpcyBhY2Nlc3NlZC4gVGhlIGxhY2sgb2YKLWEgY21yLWZpZWxkIGVsZW1lbnQgaW4gYW4gZWpiLXJlbGF0aW9uc2hpcC1yb2xlIHNwZWNpZmllcwotdGhhdCB0aGUgcmVsYXRpb25zaGlwIGlzIHVuaWRpcmVjdGlvbmFsIGluIG5hdmlnYWJpbGl0eSBhbmQKLXRoZSBlbnRpdHkgYmVhbiB0aGF0IHBhcnRpY2lwYXRlcyBpbiB0aGUgcmVsYXRpb25zaGlwIGlzCi0ibm90IGF3YXJlIiBvZiB0aGUgcmVsYXRpb25zaGlwLgotCi1FeGFtcGxlOgotCi08ZWpiLXJlbGF0aW9uPgotICAgIDxlamItcmVsYXRpb24tbmFtZT5Qcm9kdWN0LUxpbmVJdGVtPC9lamItcmVsYXRpb24tbmFtZT4KLSAgICA8ZWpiLXJlbGF0aW9uc2hpcC1yb2xlPgotICAgICAgICA8ZWpiLXJlbGF0aW9uc2hpcC1yb2xlLW5hbWU+cHJvZHVjdC1oYXMtbGluZWl0ZW1zCi0gICAgICAgIDwvZWpiLXJlbGF0aW9uc2hpcC1yb2xlLW5hbWU+Ci0gICAgICAgIDxtdWx0aXBsaWNpdHk+T25lPC9tdWx0aXBsaWNpdHk+Ci0gICAgICAgIDxyZWxhdGlvbnNoaXAtcm9sZS1zb3VyY2U+Ci0gICAgICAgIDxlamItbmFtZT5Qcm9kdWN0RUpCPC9lamItbmFtZT4KLSAgICAgICAgPC9yZWxhdGlvbnNoaXAtcm9sZS1zb3VyY2U+Ci0gICAgIDwvZWpiLXJlbGF0aW9uc2hpcC1yb2xlPgotPC9lamItcmVsYXRpb24+Ci0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXNjcmlwdGlvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZWpiLXJlbGF0aW9uc2hpcC1yb2xlLW5hbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnN0cmluZyIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBlamItcmVsYXRpb25zaGlwLXJvbGUtbmFtZSBlbGVtZW50IGRlZmluZXMgYQotICAgICAgICBuYW1lIGZvciBhIHJvbGUgdGhhdCBpcyB1bmlxdWUgd2l0aGluIGFuCi0gICAgICAgIGVqYi1yZWxhdGlvbi4gRGlmZmVyZW50IHJlbGF0aW9uc2hpcHMgY2FuIHVzZSB0aGUKLSAgICAgICAgc2FtZSBuYW1lIGZvciBhIHJvbGUuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im11bHRpcGxpY2l0eSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bXVsdGlwbGljaXR5VHlwZSIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iY2FzY2FkZS1kZWxldGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVtcHR5VHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBjYXNjYWRlLWRlbGV0ZSBlbGVtZW50IHNwZWNpZmllcyB0aGF0LCB3aXRoaW4gYQotICAgICAgICBwYXJ0aWN1bGFyIHJlbGF0aW9uc2hpcCwgdGhlIGxpZmV0aW1lIG9mIG9uZSBvciBtb3JlCi0gICAgICAgIGVudGl0eSBiZWFucyBpcyBkZXBlbmRlbnQgdXBvbiB0aGUgbGlmZXRpbWUgb2YKLSAgICAgICAgYW5vdGhlciBlbnRpdHkgYmVhbi4gVGhlIGNhc2NhZGUtZGVsZXRlIGVsZW1lbnQgY2FuCi0gICAgICAgIG9ubHkgYmUgc3BlY2lmaWVkIGZvciBhbiBlamItcmVsYXRpb25zaGlwLXJvbGUKLSAgICAgICAgZWxlbWVudCBjb250YWluZWQgaW4gYW4gZWpiLXJlbGF0aW9uIGVsZW1lbnQgaW4KLSAgICAgICAgd2hpY2ggdGhlIG90aGVyIGVqYi1yZWxhdGlvbnNoaXAtcm9sZQotICAgICAgICBlbGVtZW50IHNwZWNpZmllcyBhIG11bHRpcGxpY2l0eSBvZiBPbmUuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJlbGF0aW9uc2hpcC1yb2xlLXNvdXJjZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cmVsYXRpb25zaGlwLXJvbGUtc291cmNlVHlwZSIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iY21yLWZpZWxkIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpjbXItZmllbGRUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXBsb3ltZW50LWV4dGVuc2lvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVwbG95bWVudC1leHRlbnNpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImVudGVycHJpc2UtYmVhbnNUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGVudGVycHJpc2UtYmVhbnNUeXBlIGRlY2xhcmVzIG9uZSBvciBtb3JlIGVudGVycHJpc2UKLWJlYW5zLiBFYWNoIGJlYW4gY2FuIGJlIGEgc2Vzc2lvbiwgZW50aXR5IG9yIG1lc3NhZ2UtZHJpdmVuCi1iZWFuLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6Y2hvaWNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlc3Npb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnNlc3Npb24tYmVhblR5cGUiPgotICAgICAgICA8eHNkOnVuaXF1ZSBuYW1lPSJzZXNzaW9uLWVqYi1sb2NhbC1yZWYtbmFtZS11bmlxdWVuZXNzIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGVqYi1yZWYtbmFtZSBlbGVtZW50IGNvbnRhaW5zIHRoZSBuYW1lIG9mCi0gICAgICAgIGFuIEVKQiByZWZlcmVuY2UuIFRoZSBFSkIgcmVmZXJlbmNlIGlzIGFuIGVudHJ5IGluCi0gICAgICAgIHRoZSBjb21wb25lbnQncyBlbnZpcm9ubWVudCBhbmQgaXMgcmVsYXRpdmUgdG8gdGhlCi0gICAgICAgIGphdmE6Y29tcC9lbnYgY29udGV4dC4gIFRoZSBuYW1lIG11c3QgYmUgdW5pcXVlIHdpdGhpbgotICAgICAgICB0aGUgY29tcG9uZW50LgotCi0gICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgbmFtZSBiZSBwcmVmaXhlZCB3aXRoICJlamIvIi4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICAgICAgPHhzZDpzZWxlY3RvciB4cGF0aD0iajJlZTplamItbG9jYWwtcmVmIi8+Ci0gICAgICAgICAgICA8eHNkOmZpZWxkICAgIHhwYXRoPSJqMmVlOmVqYi1yZWYtbmFtZSIvPgotICAgICAgICA8L3hzZDp1bmlxdWU+Ci0KLSAgICAgICAgPHhzZDp1bmlxdWUgbmFtZT0ic2Vzc2lvbi1lamItcmVmLW5hbWUtdW5pcXVlbmVzcyI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBlamItcmVmLW5hbWUgZWxlbWVudCBjb250YWlucyB0aGUgbmFtZSBvZiBhbiBFSkIKLSAgICAgICAgcmVmZXJlbmNlLiBUaGUgRUpCIHJlZmVyZW5jZSBpcyBhbiBlbnRyeSBpbiB0aGUKLSAgICAgICAgY29tcG9uZW50J3MgZW52aXJvbm1lbnQgYW5kIGlzIHJlbGF0aXZlIHRvIHRoZQotICAgICAgICBqYXZhOmNvbXAvZW52IGNvbnRleHQuIFRoZSBuYW1lIG11c3QgYmUgdW5pcXVlCi0gICAgICAgIHdpdGhpbiB0aGUgY29tcG9uZW50LgotCi0gICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgbmFtZSBpcyBwcmVmaXhlZCB3aXRoICJlamIvIi4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICAgICAgPHhzZDpzZWxlY3RvciB4cGF0aD0iajJlZTplamItcmVmIi8+Ci0gICAgICAgICAgICA8eHNkOmZpZWxkICAgIHhwYXRoPSJqMmVlOmVqYi1yZWYtbmFtZSIvPgotICAgICAgICA8L3hzZDp1bmlxdWU+Ci0KLSAgICAgICAgPHhzZDp1bmlxdWUgbmFtZT0ic2Vzc2lvbi1yZXNvdXJjZS1lbnYtcmVmLXVuaXF1ZW5lc3MiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgcmVzb3VyY2UtZW52LXJlZi1uYW1lIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBuYW1lCi0gICAgICAgIG9mIGEgcmVzb3VyY2UgZW52aXJvbm1lbnQgcmVmZXJlbmNlOyBpdHMgdmFsdWUgaXMKLSAgICAgICAgdGhlIGVudmlyb25tZW50IGVudHJ5IG5hbWUgdXNlZCBpbiB0aGUgY29tcG9uZW50Ci0gICAgICAgIGNvZGUuIFRoZSBuYW1lIGlzIGEgSk5ESSBuYW1lIHJlbGF0aXZlIHRvIHRoZQotICAgICAgICBqYXZhOmNvbXAvZW52IGNvbnRleHQgYW5kIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhbgotICAgICAgICBjb21wb25lbnQuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6cmVzb3VyY2UtZW52LXJlZiIvPgotICAgICAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTpyZXNvdXJjZS1lbnYtcmVmLW5hbWUiLz4KLSAgICAgICAgPC94c2Q6dW5pcXVlPgotCi0gICAgICAgIDx4c2Q6dW5pcXVlIG5hbWU9InNlc3Npb24tbWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtdW5pcXVlbmVzcyI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBuYW1lCi0gICAgICAgIG9mIGEgbWVzc2FnZSBkZXN0aW5hdGlvbiByZWZlcmVuY2U7IGl0cyB2YWx1ZSBpcwotICAgICAgICB0aGUgbWVzc2FnZSBkZXN0aW5hdGlvbiByZWZlcmVuY2UgbmFtZSB1c2VkIGluIHRoZSBjb21wb25lbnQKLSAgICAgICAgY29kZS4gVGhlIG5hbWUgaXMgYSBKTkRJIG5hbWUgcmVsYXRpdmUgdG8gdGhlCi0gICAgICAgIGphdmE6Y29tcC9lbnYgY29udGV4dCBhbmQgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGFuCi0gICAgICAgIGNvbXBvbmVudC4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICAgICAgPHhzZDpzZWxlY3RvciB4cGF0aD0iajJlZTptZXNzYWdlLWRlc3RpbmF0aW9uLXJlZiIvPgotICAgICAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTptZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lIi8+Ci0gICAgICAgIDwveHNkOnVuaXF1ZT4KLQotICAgICAgICA8eHNkOnVuaXF1ZSBuYW1lPSJzZXNzaW9uLXJlcy1yZWYtbmFtZS11bmlxdWVuZXNzIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIHJlcy1yZWYtbmFtZSBlbGVtZW50IHNwZWNpZmllcyB0aGUgbmFtZSBvZiBhCi0gICAgICAgIHJlc291cmNlIG1hbmFnZXIgY29ubmVjdGlvbiBmYWN0b3J5IHJlZmVyZW5jZS4gIFRoZSBuYW1lCi0gICAgICAgIGlzIGEgSk5ESSBuYW1lIHJlbGF0aXZlIHRvIHRoZSBqYXZhOmNvbXAvZW52IGNvbnRleHQuCi0gICAgICAgIFRoZSBuYW1lIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhbiBjb21wb25lbnQuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6cmVzb3VyY2UtcmVmIi8+Ci0gICAgICAgICAgICA8eHNkOmZpZWxkICAgIHhwYXRoPSJqMmVlOnJlcy1yZWYtbmFtZSIvPgotICAgICAgICA8L3hzZDp1bmlxdWU+Ci0KLSAgICAgICAgPHhzZDp1bmlxdWUgbmFtZT0ic2Vzc2lvbi1lbnYtZW50cnktbmFtZS11bmlxdWVuZXNzIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGVudi1lbnRyeS1uYW1lIGVsZW1lbnQgY29udGFpbnMgdGhlIG5hbWUgb2YgYQotICAgICAgICBjb21wb25lbnQncyBlbnZpcm9ubWVudCBlbnRyeS4gIFRoZSBuYW1lIGlzIGEgSk5ESQotICAgICAgICBuYW1lIHJlbGF0aXZlIHRvIHRoZSBqYXZhOmNvbXAvZW52IGNvbnRleHQuICBUaGUKLSAgICAgICAgbmFtZSBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYW4gY29tcG9uZW50LgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOmVudi1lbnRyeSIvPgotICAgICAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTplbnYtZW50cnktbmFtZSIvPgotICAgICAgICA8L3hzZDp1bmlxdWU+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVudGl0eSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZW50aXR5LWJlYW5UeXBlIj4KLSAgICAgICAgPHhzZDp1bmlxdWUgbmFtZT0iZW50aXR5LWVqYi1sb2NhbC1yZWYtbmFtZS11bmlxdWVuZXNzIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGVqYi1yZWYtbmFtZSBlbGVtZW50IGNvbnRhaW5zIHRoZSBuYW1lIG9mCi0gICAgICAgIGFuIEVKQiByZWZlcmVuY2UuIFRoZSBFSkIgcmVmZXJlbmNlIGlzIGFuIGVudHJ5IGluCi0gICAgICAgIHRoZSBjb21wb25lbnQncyBlbnZpcm9ubWVudCBhbmQgaXMgcmVsYXRpdmUgdG8gdGhlCi0gICAgICAgIGphdmE6Y29tcC9lbnYgY29udGV4dC4gIFRoZSBuYW1lIG11c3QgYmUgdW5pcXVlIHdpdGhpbgotICAgICAgICB0aGUgY29tcG9uZW50LgotCi0gICAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgbmFtZSBiZSBwcmVmaXhlZCB3aXRoICJlamIvIi4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICAgICAgPHhzZDpzZWxlY3RvciB4cGF0aD0iajJlZTplamItbG9jYWwtcmVmIi8+Ci0gICAgICAgICAgICA8eHNkOmZpZWxkICAgIHhwYXRoPSJqMmVlOmVqYi1yZWYtbmFtZSIvPgotICAgICAgICA8L3hzZDp1bmlxdWU+Ci0KLSAgICAgICAgPHhzZDp1bmlxdWUgbmFtZT0iZW50aXR5LWVqYi1yZWYtbmFtZS11bmlxdWVuZXNzIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGVqYi1yZWYtbmFtZSBlbGVtZW50IGNvbnRhaW5zIHRoZSBuYW1lIG9mIGFuIEVKQgotICAgICAgICByZWZlcmVuY2UuIFRoZSBFSkIgcmVmZXJlbmNlIGlzIGFuIGVudHJ5IGluIHRoZQotICAgICAgICBjb21wb25lbnQncyBlbnZpcm9ubWVudCBhbmQgaXMgcmVsYXRpdmUgdG8gdGhlCi0gICAgICAgIGphdmE6Y29tcC9lbnYgY29udGV4dC4gVGhlIG5hbWUgbXVzdCBiZSB1bmlxdWUKLSAgICAgICAgd2l0aGluIHRoZSBjb21wb25lbnQuCi0KLSAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBuYW1lIGlzIHByZWZpeGVkIHdpdGggImVqYi8iLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOmVqYi1yZWYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6ZWpiLXJlZi1uYW1lIi8+Ci0gICAgICAgIDwveHNkOnVuaXF1ZT4KLQotICAgICAgICA8eHNkOnVuaXF1ZSBuYW1lPSJlbnRpdHktcmVzb3VyY2UtZW52LXJlZi11bmlxdWVuZXNzIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIHJlc291cmNlLWVudi1yZWYtbmFtZSBlbGVtZW50IHNwZWNpZmllcyB0aGUgbmFtZQotICAgICAgICBvZiBhIHJlc291cmNlIGVudmlyb25tZW50IHJlZmVyZW5jZTsgaXRzIHZhbHVlIGlzCi0gICAgICAgIHRoZSBlbnZpcm9ubWVudCBlbnRyeSBuYW1lIHVzZWQgaW4gdGhlIGNvbXBvbmVudAotICAgICAgICBjb2RlLiBUaGUgbmFtZSBpcyBhIEpOREkgbmFtZSByZWxhdGl2ZSB0byB0aGUKLSAgICAgICAgamF2YTpjb21wL2VudiBjb250ZXh0IGFuZCBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYW4KLSAgICAgICAgY29tcG9uZW50LgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOnJlc291cmNlLWVudi1yZWYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6cmVzb3VyY2UtZW52LXJlZi1uYW1lIi8+Ci0gICAgICAgIDwveHNkOnVuaXF1ZT4KLQotICAgICAgICA8eHNkOnVuaXF1ZSBuYW1lPSJlbnRpdHktbWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtdW5pcXVlbmVzcyI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBuYW1lCi0gICAgICAgIG9mIGEgbWVzc2FnZSBkZXN0aW5hdGlvbiByZWZlcmVuY2U7IGl0cyB2YWx1ZSBpcwotICAgICAgICB0aGUgbWVzc2FnZSBkZXN0aW5hdGlvbiByZWZlcmVuY2UgbmFtZSB1c2VkIGluIHRoZSBjb21wb25lbnQKLSAgICAgICAgY29kZS4gVGhlIG5hbWUgaXMgYSBKTkRJIG5hbWUgcmVsYXRpdmUgdG8gdGhlCi0gICAgICAgIGphdmE6Y29tcC9lbnYgY29udGV4dCBhbmQgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGFuCi0gICAgICAgIGNvbXBvbmVudC4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICAgICAgPHhzZDpzZWxlY3RvciB4cGF0aD0iajJlZTptZXNzYWdlLWRlc3RpbmF0aW9uLXJlZiIvPgotICAgICAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTptZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lIi8+Ci0gICAgICAgIDwveHNkOnVuaXF1ZT4KLQotICAgICAgICA8eHNkOnVuaXF1ZSBuYW1lPSJlbnRpdHktcmVzLXJlZi1uYW1lLXVuaXF1ZW5lc3MiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgcmVzLXJlZi1uYW1lIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEKLSAgICAgICAgcmVzb3VyY2UgbWFuYWdlciBjb25uZWN0aW9uIGZhY3RvcnkgcmVmZXJlbmNlLiAgVGhlIG5hbWUKLSAgICAgICAgaXMgYSBKTkRJIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGphdmE6Y29tcC9lbnYgY29udGV4dC4KLSAgICAgICAgVGhlIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGFuIGNvbXBvbmVudC4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICAgICAgPHhzZDpzZWxlY3RvciB4cGF0aD0iajJlZTpyZXNvdXJjZS1yZWYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6cmVzLXJlZi1uYW1lIi8+Ci0gICAgICAgIDwveHNkOnVuaXF1ZT4KLQotICAgICAgICA8eHNkOnVuaXF1ZSBuYW1lPSJlbnRpdHktZW52LWVudHJ5LW5hbWUtdW5pcXVlbmVzcyI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBlbnYtZW50cnktbmFtZSBlbGVtZW50IGNvbnRhaW5zIHRoZSBuYW1lIG9mIGEKLSAgICAgICAgY29tcG9uZW50J3MgZW52aXJvbm1lbnQgZW50cnkuICBUaGUgbmFtZSBpcyBhIEpOREkKLSAgICAgICAgbmFtZSByZWxhdGl2ZSB0byB0aGUgamF2YTpjb21wL2VudiBjb250ZXh0LiAgVGhlCi0gICAgICAgIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGFuIGNvbXBvbmVudC4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICAgICAgPHhzZDpzZWxlY3RvciB4cGF0aD0iajJlZTplbnYtZW50cnkiLz4KLSAgICAgICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6ZW52LWVudHJ5LW5hbWUiLz4KLSAgICAgICAgPC94c2Q6dW5pcXVlPgotICAgICAgICA8L3hzZDplbGVtZW50PgotCi0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJtZXNzYWdlLWRyaXZlbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bWVzc2FnZS1kcml2ZW4tYmVhblR5cGUiPgotICAgICAgICA8eHNkOnVuaXF1ZSBuYW1lPSJtZXNzYWdlZC1lamItbG9jYWwtcmVmLW5hbWUtdW5pcXVlbmVzcyI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBlamItcmVmLW5hbWUgZWxlbWVudCBjb250YWlucyB0aGUgbmFtZSBvZgotICAgICAgICBhbiBFSkIgcmVmZXJlbmNlLiBUaGUgRUpCIHJlZmVyZW5jZSBpcyBhbiBlbnRyeSBpbgotICAgICAgICB0aGUgY29tcG9uZW50J3MgZW52aXJvbm1lbnQgYW5kIGlzIHJlbGF0aXZlIHRvIHRoZQotICAgICAgICBqYXZhOmNvbXAvZW52IGNvbnRleHQuICBUaGUgbmFtZSBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4KLSAgICAgICAgdGhlIGNvbXBvbmVudC4KLQotICAgICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IG5hbWUgYmUgcHJlZml4ZWQgd2l0aCAiZWpiLyIuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6ZWpiLWxvY2FsLXJlZiIvPgotICAgICAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTplamItcmVmLW5hbWUiLz4KLSAgICAgICAgPC94c2Q6dW5pcXVlPgotCi0gICAgICAgIDx4c2Q6dW5pcXVlIG5hbWU9Im1lc3NhZ2VkLWVqYi1yZWYtbmFtZS11bmlxdWVuZXNzIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGVqYi1yZWYtbmFtZSBlbGVtZW50IGNvbnRhaW5zIHRoZSBuYW1lIG9mIGFuIEVKQgotICAgICAgICByZWZlcmVuY2UuIFRoZSBFSkIgcmVmZXJlbmNlIGlzIGFuIGVudHJ5IGluIHRoZQotICAgICAgICBjb21wb25lbnQncyBlbnZpcm9ubWVudCBhbmQgaXMgcmVsYXRpdmUgdG8gdGhlCi0gICAgICAgIGphdmE6Y29tcC9lbnYgY29udGV4dC4gVGhlIG5hbWUgbXVzdCBiZSB1bmlxdWUKLSAgICAgICAgd2l0aGluIHRoZSBjb21wb25lbnQuCi0KLSAgICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBuYW1lIGlzIHByZWZpeGVkIHdpdGggImVqYi8iLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOmVqYi1yZWYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6ZWpiLXJlZi1uYW1lIi8+Ci0gICAgICAgIDwveHNkOnVuaXF1ZT4KLQotICAgICAgICA8eHNkOnVuaXF1ZSBuYW1lPSJtZXNzYWdlZC1yZXNvdXJjZS1lbnYtcmVmLXVuaXF1ZW5lc3MiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgcmVzb3VyY2UtZW52LXJlZi1uYW1lIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBuYW1lCi0gICAgICAgIG9mIGEgcmVzb3VyY2UgZW52aXJvbm1lbnQgcmVmZXJlbmNlOyBpdHMgdmFsdWUgaXMKLSAgICAgICAgdGhlIGVudmlyb25tZW50IGVudHJ5IG5hbWUgdXNlZCBpbiB0aGUgY29tcG9uZW50Ci0gICAgICAgIGNvZGUuIFRoZSBuYW1lIGlzIGEgSk5ESSBuYW1lIHJlbGF0aXZlIHRvIHRoZQotICAgICAgICBqYXZhOmNvbXAvZW52IGNvbnRleHQgYW5kIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhbgotICAgICAgICBjb21wb25lbnQuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6cmVzb3VyY2UtZW52LXJlZiIvPgotICAgICAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTpyZXNvdXJjZS1lbnYtcmVmLW5hbWUiLz4KLSAgICAgICAgPC94c2Q6dW5pcXVlPgotCi0gICAgICAgIDx4c2Q6dW5pcXVlIG5hbWU9Im1lc3NhZ2VkLW1lc3NhZ2UtZGVzdGluYXRpb24tcmVmLXVuaXF1ZW5lc3MiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgbWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZSBlbGVtZW50IHNwZWNpZmllcyB0aGUgbmFtZQotICAgICAgICBvZiBhIG1lc3NhZ2UgZGVzdGluYXRpb24gcmVmZXJlbmNlOyBpdHMgdmFsdWUgaXMKLSAgICAgICAgdGhlIG1lc3NhZ2UgZGVzdGluYXRpb24gcmVmZXJlbmNlIG5hbWUgdXNlZCBpbiB0aGUgY29tcG9uZW50Ci0gICAgICAgIGNvZGUuIFRoZSBuYW1lIGlzIGEgSk5ESSBuYW1lIHJlbGF0aXZlIHRvIHRoZQotICAgICAgICBqYXZhOmNvbXAvZW52IGNvbnRleHQgYW5kIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhbgotICAgICAgICBjb21wb25lbnQuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZSIvPgotICAgICAgICA8L3hzZDp1bmlxdWU+Ci0KLSAgICAgICAgPHhzZDp1bmlxdWUgbmFtZT0ibWVzc2FnZWQtcmVzLXJlZi1uYW1lLXVuaXF1ZW5lc3MiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgcmVzLXJlZi1uYW1lIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIGEKLSAgICAgICAgcmVzb3VyY2UgbWFuYWdlciBjb25uZWN0aW9uIGZhY3RvcnkgcmVmZXJlbmNlLiAgVGhlIG5hbWUKLSAgICAgICAgaXMgYSBKTkRJIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGphdmE6Y29tcC9lbnYgY29udGV4dC4KLSAgICAgICAgVGhlIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGFuIGNvbXBvbmVudC4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICAgICAgPHhzZDpzZWxlY3RvciB4cGF0aD0iajJlZTpyZXNvdXJjZS1yZWYiLz4KLSAgICAgICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6cmVzLXJlZi1uYW1lIi8+Ci0gICAgICAgIDwveHNkOnVuaXF1ZT4KLQotICAgICAgICA8eHNkOnVuaXF1ZSBuYW1lPSJtZXNzYWdlZC1lbnYtZW50cnktbmFtZS11bmlxdWVuZXNzIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGVudi1lbnRyeS1uYW1lIGVsZW1lbnQgY29udGFpbnMgdGhlIG5hbWUgb2YgYQotICAgICAgICBjb21wb25lbnQncyBlbnZpcm9ubWVudCBlbnRyeS4gIFRoZSBuYW1lIGlzIGEgSk5ESQotICAgICAgICBuYW1lIHJlbGF0aXZlIHRvIHRoZSBqYXZhOmNvbXAvZW52IGNvbnRleHQuICBUaGUKLSAgICAgICAgbmFtZSBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYW4gY29tcG9uZW50LgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOmVudi1lbnRyeSIvPgotICAgICAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTplbnYtZW50cnktbmFtZSIvPgotICAgICAgICA8L3hzZDp1bmlxdWU+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8L3hzZDpjaG9pY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iZW50aXR5LWJlYW5UeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGVudGl0eS1iZWFuVHlwZSBkZWNsYXJlcyBhbiBlbnRpdHkgYmVhbi4gVGhlIGRlY2xhcmF0aW9uCi1jb25zaXN0cyBvZjoKLQotICAgIC0gYW4gb3B0aW9uYWwgZGVzY3JpcHRpb24KLSAgICAtIGFuIG9wdGlvbmFsIGRpc3BsYXkgbmFtZQotICAgIC0gYW4gb3B0aW9uYWwgaWNvbiBlbGVtZW50IHRoYXQgY29udGFpbnMgYSBzbWFsbCBhbmQgYSBsYXJnZQotICAgICAgaWNvbiBmaWxlIG5hbWUKLSAgICAtIGEgdW5pcXVlIG5hbWUgYXNzaWduZWQgdG8gdGhlIGVudGVycHJpc2UgYmVhbgotICAgICAgaW4gdGhlIGRlcGxveW1lbnQgZGVzY3JpcHRvcgotICAgIC0gdGhlIG5hbWVzIG9mIHRoZSBlbnRpdHkgYmVhbidzIHJlbW90ZSBob21lCi0gICAgICBhbmQgcmVtb3RlIGludGVyZmFjZXMsIGlmIGFueQotICAgIC0gdGhlIG5hbWVzIG9mIHRoZSBlbnRpdHkgYmVhbidzIGxvY2FsIGhvbWUgYW5kIGxvY2FsCi0gICAgICBpbnRlcmZhY2VzLCBpZiBhbnkKLSAgICAtIHRoZSBlbnRpdHkgYmVhbidzIGltcGxlbWVudGF0aW9uIGNsYXNzCi0gICAgLSB0aGUgZW50aXR5IGJlYW4ncyBwZXJzaXN0ZW5jZSBtYW5hZ2VtZW50IHR5cGUKLSAgICAtIHRoZSBlbnRpdHkgYmVhbidzIHByaW1hcnkga2V5IGNsYXNzIG5hbWUKLSAgICAtIGFuIGluZGljYXRpb24gb2YgdGhlIGVudGl0eSBiZWFuJ3MgcmVlbnRyYW5jeQotICAgIC0gYW4gb3B0aW9uYWwgc3BlY2lmaWNhdGlvbiBvZiB0aGUKLSAgICAgIGVudGl0eSBiZWFuJ3MgY21wLXZlcnNpb24KLSAgICAtIGFuIG9wdGlvbmFsIHNwZWNpZmljYXRpb24gb2YgdGhlIGVudGl0eSBiZWFuJ3MKLSAgICAgIGFic3RyYWN0IHNjaGVtYSBuYW1lCi0gICAgLSBhbiBvcHRpb25hbCBsaXN0IG9mIGNvbnRhaW5lci1tYW5hZ2VkIGZpZWxkcwotICAgIC0gYW4gb3B0aW9uYWwgc3BlY2lmaWNhdGlvbiBvZiB0aGUgcHJpbWFyeSBrZXkKLSAgICAgIGZpZWxkCi0gICAgLSBhbiBvcHRpb25hbCBkZWNsYXJhdGlvbiBvZiB0aGUgYmVhbidzIGVudmlyb25tZW50Ci0gICAgICBlbnRyaWVzCi0gICAgLSBhbiBvcHRpb25hbCBkZWNsYXJhdGlvbiBvZiB0aGUgYmVhbidzIEVKQgotICAgICAgcmVmZXJlbmNlcwotICAgIC0gYW4gb3B0aW9uYWwgZGVjbGFyYXRpb24gb2YgdGhlIGJlYW4ncyBsb2NhbAotICAgICAgRUpCIHJlZmVyZW5jZXMKLSAgICAtIGFuIG9wdGlvbmFsIGRlY2xhcmF0aW9uIG9mIHRoZSBiZWFuJ3Mgd2ViCi0gICAgICBzZXJ2aWNlIHJlZmVyZW5jZXMKLSAgICAtIGFuIG9wdGlvbmFsIGRlY2xhcmF0aW9uIG9mIHRoZSBzZWN1cml0eSByb2xlCi0gICAgICByZWZlcmVuY2VzCi0gICAgLSBhbiBvcHRpb25hbCBkZWNsYXJhdGlvbiBvZiB0aGUgc2VjdXJpdHkgaWRlbnRpdHkKLSAgICAgIHRvIGJlIHVzZWQgZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIGJlYW4ncyBtZXRob2RzCi0gICAgLSBhbiBvcHRpb25hbCBkZWNsYXJhdGlvbiBvZiB0aGUgYmVhbidzCi0gICAgICByZXNvdXJjZSBtYW5hZ2VyIGNvbm5lY3Rpb24gZmFjdG9yeSByZWZlcmVuY2VzCi0gICAgLSBhbiBvcHRpb25hbCBkZWNsYXJhdGlvbiBvZiB0aGUgYmVhbidzCi0gICAgICByZXNvdXJjZSBlbnZpcm9ubWVudCByZWZlcmVuY2VzCi0gICAgLSBhbiBvcHRpb25hbCBkZWNsYXJhdGlvbiBvZiB0aGUgYmVhbidzIG1lc3NhZ2UKLSAgICAgIGRlc3RpbmF0aW9uIHJlZmVyZW5jZXMKLSAgICAtIGFuIG9wdGlvbmFsIHNldCBvZiBxdWVyeSBkZWNsYXJhdGlvbnMKLSAgICAgIGZvciBmaW5kZXIgYW5kIHNlbGVjdCBtZXRob2RzIGZvciBhbiBlbnRpdHkKLSAgICAgIGJlYW4gd2l0aCBjbXAtdmVyc2lvbiAyLnguCi0gICAgLSBhbiBvcHRpb25hbCBzZXQgb2YgZGVwbG95bWVudC1leHRlbnNpb24KLSAgICAgIGRlY2xhcmF0aW9ucy4KLQotVGhlIG9wdGlvbmFsIGFic3RyYWN0LXNjaGVtYS1uYW1lIGVsZW1lbnQgbXVzdCBiZSBzcGVjaWZpZWQKLWZvciBhbiBlbnRpdHkgYmVhbiB3aXRoIGNvbnRhaW5lci1tYW5hZ2VkIHBlcnNpc3RlbmNlIGFuZAotY21wLXZlcnNpb24gMi54LgotCi1UaGUgb3B0aW9uYWwgcHJpbWtleS1maWVsZCBtYXkgYmUgcHJlc2VudCBpbiB0aGUgZGVzY3JpcHRvcgotaWYgdGhlIGVudGl0eSdzIHBlcnNpc3RlbmNlLXR5cGUgaXMgQ29udGFpbmVyLgotCi1UaGUgb3B0aW9uYWwgY21wLXZlcnNpb24gZWxlbWVudCBtYXkgYmUgcHJlc2VudCBpbiB0aGUKLWRlc2NyaXB0b3IgaWYgdGhlIGVudGl0eSdzIHBlcnNpc3RlbmNlLXR5cGUgaXMgQ29udGFpbmVyLiBJZgotdGhlIHBlcnNpc3RlbmNlLXR5cGUgaXMgQ29udGFpbmVyIGFuZCB0aGUgY21wLXZlcnNpb24KLWVsZW1lbnQgaXMgbm90IHNwZWNpZmllZCwgaXRzIHZhbHVlIGRlZmF1bHRzIHRvIDIueC4KLQotVGhlIG9wdGlvbmFsIGhvbWUgYW5kIHJlbW90ZSBlbGVtZW50cyBtdXN0IGJlIHNwZWNpZmllZCBpZgotdGhlIGVudGl0eSBiZWFuIGNtcC12ZXJzaW9uIGlzIDEueC4KLQotVGhlIG9wdGlvbmFsIGhvbWUgYW5kIHJlbW90ZSBlbGVtZW50cyBtdXN0IGJlIHNwZWNpZmllZCBpZgotdGhlIGVudGl0eSBiZWFuIGhhcyBhIHJlbW90ZSBob21lIGFuZCByZW1vdGUgaW50ZXJmYWNlLgotCi1UaGUgb3B0aW9uYWwgbG9jYWwtaG9tZSBhbmQgbG9jYWwgZWxlbWVudHMgbXVzdCBiZSBzcGVjaWZpZWQKLWlmIHRoZSBlbnRpdHkgYmVhbiBoYXMgYSBsb2NhbCBob21lIGFuZCBsb2NhbCBpbnRlcmZhY2UuCi0KLUVpdGhlciBib3RoIHRoZSBsb2NhbC1ob21lIGFuZCB0aGUgbG9jYWwgZWxlbWVudHMgb3IgYm90aAotdGhlIGhvbWUgYW5kIHRoZSByZW1vdGUgZWxlbWVudHMgbXVzdCBiZSBzcGVjaWZpZWQuCi0KLVRoZSBvcHRpb25hbCBxdWVyeSBlbGVtZW50cyBtdXN0IGJlIHByZXNlbnQgaWYgdGhlCi1wZXJzaXN0ZW5jZS10eXBlIGlzIENvbnRhaW5lciBhbmQgdGhlIGNtcC12ZXJzaW9uIGlzIDIueCBhbmQKLXF1ZXJ5IG1ldGhvZHMgb3RoZXIgdGhhbiBmaW5kQnlQcmltYXJ5S2V5IGhhdmUgYmVlbiBkZWZpbmVkCi1mb3IgdGhlIGVudGl0eSBiZWFuLgotCi1UaGUgb3RoZXIgZWxlbWVudHMgdGhhdCBhcmUgb3B0aW9uYWwgYXJlICJvcHRpb25hbCIgaW4gdGhlCi1zZW5zZSB0aGF0IHRoZXkgYXJlIG9taXR0ZWQgaWYgdGhlIGxpc3RzIHJlcHJlc2VudGVkIGJ5IHRoZW0KLWFyZSBlbXB0eS4KLQotQXQgbGVhc3Qgb25lIGNtcC1maWVsZCBlbGVtZW50IG11c3QgYmUgcHJlc2VudCBpbiB0aGUKLWRlc2NyaXB0b3IgaWYgdGhlIGVudGl0eSdzIHBlcnNpc3RlbmNlLXR5cGUgaXMgQ29udGFpbmVyIGFuZAotdGhlIGNtcC12ZXJzaW9uIGlzIDEueCwgYW5kIG5vbmUgbXVzdCBub3QgYmUgcHJlc2VudCBpZiB0aGUKLWVudGl0eSdzIHBlcnNpc3RlbmNlLXR5cGUgaXMgQmVhbi4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkaXNwbGF5LW5hbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRpc3BsYXktbmFtZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaWNvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6aWNvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZWpiLW5hbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVqYi1uYW1lVHlwZSIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaG9tZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6aG9tZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJlbW90ZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cmVtb3RlVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWwtaG9tZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bG9jYWwtaG9tZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpsb2NhbFR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVqYi1jbGFzcyIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZWpiLWNsYXNzVHlwZSIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icGVyc2lzdGVuY2UtdHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cGVyc2lzdGVuY2UtdHlwZVR5cGUiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InByaW0ta2V5LWNsYXNzIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpmdWxseS1xdWFsaWZpZWQtY2xhc3NUeXBlIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIHByaW0ta2V5LWNsYXNzIGVsZW1lbnQgY29udGFpbnMgdGhlCi0gICAgICAgIGZ1bGx5LXF1YWxpZmllZCBuYW1lIG9mIGFuCi0gICAgICAgIGVudGl0eSBiZWFuJ3MgcHJpbWFyeSBrZXkgY2xhc3MuCi0KLSAgICAgICAgSWYgdGhlIGRlZmluaXRpb24gb2YgdGhlIHByaW1hcnkga2V5IGNsYXNzIGlzCi0gICAgICAgIGRlZmVycmVkIHRvIGRlcGxveW1lbnQgdGltZSwgdGhlIHByaW0ta2V5LWNsYXNzCi0gICAgICAgIGVsZW1lbnQgc2hvdWxkIHNwZWNpZnkgamF2YS5sYW5nLk9iamVjdC4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icmVlbnRyYW50IgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTp0cnVlLWZhbHNlVHlwZSI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSByZWVudHJhbnQgZWxlbWVudCBzcGVjaWZpZXMgd2hldGhlciBhbiBlbnRpdHkKLSAgICAgICAgYmVhbiBpcyByZWVudHJhbnQgb3Igbm90LgotCi0gICAgICAgIFRoZSByZWVudHJhbnQgZWxlbWVudCBtdXN0IGJlIG9uZSBvZiB0aGUgdHdvCi0gICAgICAgIGZvbGxvd2luZzogdHJ1ZSBvciBmYWxzZQotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJjbXAtdmVyc2lvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6Y21wLXZlcnNpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJhYnN0cmFjdC1zY2hlbWEtbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6amF2YS1pZGVudGlmaWVyVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBhYnN0cmFjdC1zY2hlbWEtbmFtZSBlbGVtZW50IHNwZWNpZmllcyB0aGUgbmFtZQotICAgICAgICBvZiB0aGUgYWJzdHJhY3Qgc2NoZW1hIHR5cGUgb2YgYW4gZW50aXR5IGJlYW4gd2l0aAotICAgICAgICBjbXAtdmVyc2lvbiAyLnguIEl0IGlzIHVzZWQgaW4gRUpCIFFMIHF1ZXJpZXMuCi0KLSAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBhYnN0cmFjdC1zY2hlbWEtbmFtZSBmb3IgYW4gZW50aXR5Ci0gICAgICAgIGJlYW4gd2hvc2UgbG9jYWwgaW50ZXJmYWNlIGlzCi0gICAgICAgIGNvbS5hY21lLmNvbW1lcmNlLk9yZGVyIG1pZ2h0IGJlIE9yZGVyLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJjbXAtZmllbGQiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmNtcC1maWVsZFR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icHJpbWtleS1maWVsZCIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c3RyaW5nIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIHByaW1rZXktZmllbGQgZWxlbWVudCBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlCi0gICAgICAgIG5hbWUgb2YgdGhlIHByaW1hcnkga2V5IGZpZWxkIGZvciBhbiBlbnRpdHkgd2l0aAotICAgICAgICBjb250YWluZXItbWFuYWdlZCBwZXJzaXN0ZW5jZS4KLQotICAgICAgICBUaGUgcHJpbWtleS1maWVsZCBtdXN0IGJlIG9uZSBvZiB0aGUgZmllbGRzIGRlY2xhcmVkCi0gICAgICAgIGluIHRoZSBjbXAtZmllbGQgZWxlbWVudCwgYW5kIHRoZSB0eXBlIG9mIHRoZSBmaWVsZAotICAgICAgICBtdXN0IGJlIHRoZSBzYW1lIGFzIHRoZSBwcmltYXJ5IGtleSB0eXBlLgotCi0gICAgICAgIFRoZSBwcmlta2V5LWZpZWxkIGVsZW1lbnQgaXMgbm90IHVzZWQgaWYgdGhlIHByaW1hcnkKLSAgICAgICAga2V5IG1hcHMgdG8gbXVsdGlwbGUgY29udGFpbmVyLW1hbmFnZWQgZmllbGRzCi0gICAgICAgIChpLmUuIHRoZSBrZXkgaXMgYSBjb21wb3VuZCBrZXkpLiBJbiB0aGlzIGNhc2UsIHRoZQotICAgICAgICBmaWVsZHMgb2YgdGhlIHByaW1hcnkga2V5IGNsYXNzIG11c3QgYmUgcHVibGljLCBhbmQKLSAgICAgICAgdGhlaXIgbmFtZXMgbXVzdCBjb3JyZXNwb25kIHRvIHRoZSBmaWVsZCBuYW1lcyBvZgotICAgICAgICB0aGUgZW50aXR5IGJlYW4gY2xhc3MgdGhhdCBjb21wcmlzZSB0aGUga2V5LgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJlbnYtZW50cnkiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVudi1lbnRyeVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJlamItcmVmIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplamItcmVmVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVqYi1sb2NhbC1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVqYi1sb2NhbC1yZWZUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ic2VydmljZS1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnNlcnZpY2UtcmVmVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlY3VyaXR5LXJvbGUtcmVmIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpzZWN1cml0eS1yb2xlLXJlZlR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzZWN1cml0eS1pZGVudGl0eSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c2VjdXJpdHktaWRlbnRpdHlUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyZXNvdXJjZS1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnJlc291cmNlLXJlZlR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyZXNvdXJjZS1lbnYtcmVmIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpyZXNvdXJjZS1lbnYtcmVmVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im1lc3NhZ2UtZGVzdGluYXRpb24tcmVmIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTptZXNzYWdlLWRlc3RpbmF0aW9uLXJlZlR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icXVlcnkiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnF1ZXJ5VHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlcGxveW1lbnQtZXh0ZW5zaW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXBsb3ltZW50LWV4dGVuc2lvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iZXhjbHVkZS1saXN0VHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBleGNsdWRlLWxpc3RUeXBlIHNwZWNpZmllcyBvbmUgb3IgbW9yZSBtZXRob2RzIHdoaWNoCi10aGUgQXNzZW1ibGVyIG1hcmtzIHRvIGJlIHVuY2FsbGFibGUuCi0KLUlmIHRoZSBtZXRob2QgcGVybWlzc2lvbiByZWxhdGlvbiBjb250YWlucyBtZXRob2RzIHRoYXQgYXJlCi1pbiB0aGUgZXhjbHVkZSBsaXN0LCB0aGUgRGVwbG95ZXIgc2hvdWxkIGNvbnNpZGVyIHRob3NlCi1tZXRob2RzIHRvIGJlIHVuY2FsbGFibGUuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXNjcmlwdGlvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibWV0aG9kIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTptZXRob2RUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9ImphdmEtdHlwZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGlzIGlzIGEgZ2VuZXJpYyB0eXBlIHRoYXQgZGVzaWduYXRlcyBhIEphdmEgcHJpbWl0aXZlCi10eXBlIG9yIGEgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgYSBKYXZhIGludGVyZmFjZS90eXBlLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpzdHJpbmciPgotICAgICAgICA8eHNkOnBhdHRlcm4gdmFsdWU9IlteXHB7Wn1dKiIvPgotICAgIDwveHNkOnJlc3RyaWN0aW9uPgotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9Im1lc3NhZ2UtZHJpdmVuLWJlYW5UeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIG1lc3NhZ2UtZHJpdmVuIGVsZW1lbnQgZGVjbGFyZXMgYSBtZXNzYWdlLWRyaXZlbgotYmVhbi4gVGhlIGRlY2xhcmF0aW9uIGNvbnNpc3RzIG9mOgotCi0gICAgLSBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbgotICAgIC0gYW4gb3B0aW9uYWwgZGlzcGxheSBuYW1lCi0gICAgLSBhbiBvcHRpb25hbCBpY29uIGVsZW1lbnQgdGhhdCBjb250YWlucyBhIHNtYWxsIGFuZCBhIGxhcmdlCi0gICAgICBpY29uIGZpbGUgbmFtZS4KLSAgICAtIGEgbmFtZSBhc3NpZ25lZCB0byB0aGUgZW50ZXJwcmlzZSBiZWFuIGluCi0gICAgICB0aGUgZGVwbG95bWVudCBkZXNjcmlwdG9yCi0gICAgLSB0aGUgbWVzc2FnZS1kcml2ZW4gYmVhbidzIGltcGxlbWVudGF0aW9uIGNsYXNzCi0gICAgLSBhbiBvcHRpb25hbCBkZWNsYXJhdGlvbiBvZiB0aGUgYmVhbidzIG1lc3NhZ2luZwotICAgICAgdHlwZQotICAgIC0gdGhlIG1lc3NhZ2UtZHJpdmVuIGJlYW4ncyB0cmFuc2FjdGlvbiBtYW5hZ2VtZW50IHR5cGUKLSAgICAtIGFuIG9wdGlvbmFsIGRlY2xhcmF0aW9uIG9mIHRoZSBiZWFuJ3MKLSAgICAgIG1lc3NhZ2UtZGVzdGluYXRpb24tdHlwZQotICAgIC0gYW4gb3B0aW9uYWwgZGVjbGFyYXRpb24gb2YgdGhlIGJlYW4ncwotICAgICAgbWVzc2FnZS1kZXN0aW5hdGlvbi1saW5rCi0gICAgLSBhbiBvcHRpb25hbCBkZWNsYXJhdGlvbiBvZiB0aGUgbWVzc2FnZS1kcml2ZW4gYmVhbidzCi0gICAgICBhY3RpdmF0aW9uIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcwotICAgIC0gYW4gb3B0aW9uYWwgZGVjbGFyYXRpb24gb2YgdGhlIGJlYW4ncyBlbnZpcm9ubWVudAotICAgICAgZW50cmllcwotICAgIC0gYW4gb3B0aW9uYWwgZGVjbGFyYXRpb24gb2YgdGhlIGJlYW4ncyBFSkIgcmVmZXJlbmNlcwotICAgIC0gYW4gb3B0aW9uYWwgZGVjbGFyYXRpb24gb2YgdGhlIGJlYW4ncyBsb2NhbCBFSkIKLSAgICAgIHJlZmVyZW5jZXMKLSAgICAtIGFuIG9wdGlvbmFsIGRlY2xhcmF0aW9uIG9mIHRoZSBiZWFuJ3Mgd2ViIHNlcnZpY2UKLSAgICAgIHJlZmVyZW5jZXMKLSAgICAtIGFuIG9wdGlvbmFsIGRlY2xhcmF0aW9uIG9mIHRoZSBzZWN1cml0eQotICAgICAgaWRlbnRpdHkgdG8gYmUgdXNlZCBmb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgYmVhbidzCi0gICAgICBtZXRob2RzCi0gICAgLSBhbiBvcHRpb25hbCBkZWNsYXJhdGlvbiBvZiB0aGUgYmVhbidzCi0gICAgICByZXNvdXJjZSBtYW5hZ2VyIGNvbm5lY3Rpb24gZmFjdG9yeQotICAgICAgcmVmZXJlbmNlcwotICAgIC0gYW4gb3B0aW9uYWwgZGVjbGFyYXRpb24gb2YgdGhlIGJlYW4ncyByZXNvdXJjZQotICAgICAgZW52aXJvbm1lbnQgcmVmZXJlbmNlcy4KLSAgICAtIGFuIG9wdGlvbmFsIGRlY2xhcmF0aW9uIG9mIHRoZSBiZWFuJ3MgbWVzc2FnZQotICAgICAgZGVzdGluYXRpb24gcmVmZXJlbmNlcwotICAgIC0gYW4gb3B0aW9uYWwgZGVjbGFyYXRpb24gb2YgZGVwbG95bWVudCBleHRlbnNpb25zCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXNjcmlwdGlvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRpc3BsYXktbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGlzcGxheS1uYW1lVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaWNvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6aWNvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVqYi1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplamItbmFtZVR5cGUiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVqYi1jbGFzcyIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZWpiLWNsYXNzVHlwZSIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibWVzc2FnaW5nLXR5cGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmZ1bGx5LXF1YWxpZmllZC1jbGFzc1R5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgbWVzc2FnaW5nLXR5cGUgZWxlbWVudCBzcGVjaWZpZXMgdGhlIG1lc3NhZ2UKLSAgICAgICAgbGlzdGVuZXIgaW50ZXJmYWNlIG9mIHRoZSBtZXNzYWdlLWRyaXZlbiBiZWFuLiBJZgotICAgICAgICB0aGUgbWVzc2FnaW5nLXR5cGUgZWxlbWVudCBpcyBub3Qgc3BlY2lmaWVkLCBpdCBpcwotICAgICAgICBhc3N1bWVkIHRvIGJlIGphdmF4Lmptcy5NZXNzYWdlTGlzdGVuZXIuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InRyYW5zYWN0aW9uLXR5cGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnRyYW5zYWN0aW9uLXR5cGVUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJtZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOm1lc3NhZ2UtZGVzdGluYXRpb24tdHlwZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im1lc3NhZ2UtZGVzdGluYXRpb24tbGluayIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bWVzc2FnZS1kZXN0aW5hdGlvbi1saW5rVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iYWN0aXZhdGlvbi1jb25maWciCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmFjdGl2YXRpb24tY29uZmlnVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZW52LWVudHJ5IgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplbnYtZW50cnlUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZWpiLXJlZiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZWpiLXJlZlR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJlamItbG9jYWwtcmVmIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplamItbG9jYWwtcmVmVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlcnZpY2UtcmVmIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpzZXJ2aWNlLXJlZlR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzZWN1cml0eS1pZGVudGl0eSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c2VjdXJpdHktaWRlbnRpdHlUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyZXNvdXJjZS1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnJlc291cmNlLXJlZlR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyZXNvdXJjZS1lbnYtcmVmIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpyZXNvdXJjZS1lbnYtcmVmVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWZUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlcGxveW1lbnQtZXh0ZW5zaW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXBsb3ltZW50LWV4dGVuc2lvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJtZXRob2QtaW50ZlR5cGUiPgotCi08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBtZXRob2QtaW50ZiBlbGVtZW50IGFsbG93cyBhIG1ldGhvZCBlbGVtZW50IHRvCi1kaWZmZXJlbnRpYXRlIGJldHdlZW4gdGhlIG1ldGhvZHMgd2l0aCB0aGUgc2FtZSBuYW1lIGFuZAotc2lnbmF0dXJlIHRoYXQgYXJlIG11bHRpcGx5IGRlZmluZWQgYWNyb3NzIHRoZSBob21lIGFuZAotY29tcG9uZW50IGludGVyZmFjZXMgKGUuZywgaW4gYm90aCBhbiBlbnRlcnByaXNlIGJlYW4ncwotcmVtb3RlIGFuZCBsb2NhbCBpbnRlcmZhY2VzIG9yIGluIGJvdGggYW4gZW50ZXJwcmlzZSBiZWFuJ3MKLWhvbWUgYW5kIHJlbW90ZSBpbnRlcmZhY2VzLCBldGMuKTsgdGhlIGNvbXBvbmVudCBhbmQgd2ViCi1zZXJ2aWNlIGVuZHBvaW50IGludGVyZmFjZXMsIGFuZCBzbyBvbi4KLQotVGhlIG1ldGhvZC1pbnRmIGVsZW1lbnQgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKLQotICAgIEhvbWUKLSAgICBSZW1vdGUKLSAgICBMb2NhbEhvbWUKLSAgICBMb2NhbAotICAgIFNlcnZpY2VFbmRwb2ludAotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImoyZWU6c3RyaW5nIj4KLSAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJIb21lIi8+Ci0gICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVtb3RlIi8+Ci0gICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYWxIb21lIi8+Ci0gICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYWwiLz4KLSAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTZXJ2aWNlRW5kcG9pbnQiLz4KLSAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9Im1ldGhvZC1uYW1lVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBtZXRob2QtbmFtZVR5cGUgY29udGFpbnMgYSBuYW1lIG9mIGFuIGVudGVycHJpc2UKLWJlYW4gbWV0aG9kIG9yIHRoZSBhc3RlcmlzayAoKikgY2hhcmFjdGVyLiBUaGUgYXN0ZXJpc2sgaXMKLXVzZWQgd2hlbiB0aGUgZWxlbWVudCBkZW5vdGVzIGFsbCB0aGUgbWV0aG9kcyBvZiBhbgotZW50ZXJwcmlzZSBiZWFuJ3MgY2xpZW50IHZpZXcgaW50ZXJmYWNlcy4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImoyZWU6c3RyaW5nIi8+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJtZXRob2QtcGFyYW1zVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBtZXRob2QtcGFyYW1zVHlwZSBkZWZpbmVzIGEgbGlzdCBvZiB0aGUKLWZ1bGx5LXF1YWxpZmllZCBKYXZhIHR5cGUgbmFtZXMgb2YgdGhlIG1ldGhvZCBwYXJhbWV0ZXJzLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJtZXRob2QtcGFyYW0iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmphdmEtdHlwZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBtZXRob2QtcGFyYW0gZWxlbWVudCBjb250YWlucyBhIHByaW1pdGl2ZQotICAgICAgICBvciBhIGZ1bGx5LXF1YWxpZmllZCBKYXZhIHR5cGUgbmFtZSBvZiBhIG1ldGhvZAotICAgICAgICBwYXJhbWV0ZXIuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJtZXRob2QtcGVybWlzc2lvblR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgbWV0aG9kLXBlcm1pc3Npb25UeXBlIHNwZWNpZmllcyB0aGF0IG9uZSBvciBtb3JlCi1zZWN1cml0eSByb2xlcyBhcmUgYWxsb3dlZCB0byBpbnZva2Ugb25lIG9yIG1vcmUgZW50ZXJwcmlzZQotYmVhbiBtZXRob2RzLiBUaGUgbWV0aG9kLXBlcm1pc3Npb25UeXBlIGNvbnNpc3RzIG9mIGFuCi1vcHRpb25hbCBkZXNjcmlwdGlvbiwgYSBsaXN0IG9mIHNlY3VyaXR5IHJvbGUgbmFtZXMgb3IgYW4KLWluZGljYXRvciB0byBzdGF0ZSB0aGF0IHRoZSBtZXRob2QgaXMgdW5jaGVja2VkIGZvcgotYXV0aG9yaXphdGlvbiwgYW5kIGEgbGlzdCBvZiBtZXRob2QgZWxlbWVudHMuCi0KLVRoZSBzZWN1cml0eSByb2xlcyB1c2VkIGluIHRoZSBtZXRob2QtcGVybWlzc2lvblR5cGUKLW11c3QgYmUgZGVmaW5lZCBpbiB0aGUgc2VjdXJpdHktcm9sZSBlbGVtZW50cyBvZiB0aGUKLWRlcGxveW1lbnQgZGVzY3JpcHRvciwgYW5kIHRoZSBtZXRob2RzIG11c3QgYmUgbWV0aG9kcwotZGVmaW5lZCBpbiB0aGUgZW50ZXJwcmlzZSBiZWFuJ3MgaG9tZSwgY29tcG9uZW50IGFuZC9vciB3ZWIKLXNlcnZpY2UgZW5kcG9pbnQgaW50ZXJmYWNlcy4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6Y2hvaWNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJvbGUtbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnJvbGUtbmFtZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJ1bmNoZWNrZWQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplbXB0eVR5cGUiPgotICAgICAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgICAgICBUaGUgdW5jaGVja2VkIGVsZW1lbnQgc3BlY2lmaWVzIHRoYXQgYSBtZXRob2QgaXMKLSAgICAgICAgICAgIG5vdCBjaGVja2VkIGZvciBhdXRob3JpemF0aW9uIGJ5IHRoZSBjb250YWluZXIKLSAgICAgICAgICAgIHByaW9yIHRvIGludm9jYXRpb24gb2YgdGhlIG1ldGhvZC4KLQotICAgICAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8L3hzZDpjaG9pY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJtZXRob2QiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOm1ldGhvZFR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9Im1ldGhvZFR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgbWV0aG9kVHlwZSBpcyB1c2VkIHRvIGRlbm90ZSBhIG1ldGhvZCBvZiBhbiBlbnRlcnByaXNlCi1iZWFuJ3MgaG9tZSwgY29tcG9uZW50LCBhbmQvb3Igd2ViIHNlcnZpY2UgZW5kcG9pbnQKLWludGVyZmFjZSwgb3IsIGluIHRoZSBjYXNlIG9mIGEgbWVzc2FnZS1kcml2ZW4gYmVhbiwgdGhlCi1iZWFuJ3MgbWVzc2FnZSBsaXN0ZW5lciBtZXRob2QsIG9yIGEgc2V0IG9mIHN1Y2gKLW1ldGhvZHMuIFRoZSBlamItbmFtZSBlbGVtZW50IG11c3QgYmUgdGhlIG5hbWUgb2Ygb25lIG9mIHRoZQotZW50ZXJwcmlzZSBiZWFucyBkZWNsYXJlZCBpbiB0aGUgZGVwbG95bWVudCBkZXNjcmlwdG9yOyB0aGUKLW9wdGlvbmFsIG1ldGhvZC1pbnRmIGVsZW1lbnQgYWxsb3dzIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gYQotbWV0aG9kIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlIHRoYXQgaXMgbXVsdGlwbHkgZGVmaW5lZAotYWNyb3NzIHRoZSBob21lLCBjb21wb25lbnQsIGFuZC9vciB3ZWIgc2VydmljZSBlbmRwb2ludAotaW50ZXJmYWNlczsgdGhlIG1ldGhvZC1uYW1lIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBtZXRob2QKLW5hbWU7IGFuZCB0aGUgb3B0aW9uYWwgbWV0aG9kLXBhcmFtcyBlbGVtZW50cyBpZGVudGlmeSBhCi1zaW5nbGUgbWV0aG9kIGFtb25nIG11bHRpcGxlIG1ldGhvZHMgd2l0aCBhbiBvdmVybG9hZGVkCi1tZXRob2QgbmFtZS4KLQotVGhlcmUgYXJlIHRocmVlIHBvc3NpYmxlIHN0eWxlcyBvZiB1c2luZyBtZXRob2RUeXBlIGVsZW1lbnQKLXdpdGhpbiBhIG1ldGhvZCBlbGVtZW50OgotCi0xLgotPG1ldGhvZD4KLSAgICA8ZWpiLW5hbWU+RUpCTkFNRTwvZWpiLW5hbWU+Ci0gICAgPG1ldGhvZC1uYW1lPio8L21ldGhvZC1uYW1lPgotPC9tZXRob2Q+Ci0KLSAgIFRoaXMgc3R5bGUgaXMgdXNlZCB0byByZWZlciB0byBhbGwgdGhlIG1ldGhvZHMgb2YgdGhlCi0gICBzcGVjaWZpZWQgZW50ZXJwcmlzZSBiZWFuJ3MgaG9tZSwgY29tcG9uZW50LCBhbmQvb3Igd2ViCi0gICBzZXJ2aWNlIGVuZHBvaW50IGludGVyZmFjZXMuCi0KLTIuCi08bWV0aG9kPgotICAgIDxlamItbmFtZT5FSkJOQU1FPC9lamItbmFtZT4KLSAgICA8bWV0aG9kLW5hbWU+TUVUSE9EPC9tZXRob2QtbmFtZT4KLTwvbWV0aG9kPj4KLQotICAgVGhpcyBzdHlsZSBpcyB1c2VkIHRvIHJlZmVyIHRvIHRoZSBzcGVjaWZpZWQgbWV0aG9kIG9mCi0gICB0aGUgc3BlY2lmaWVkIGVudGVycHJpc2UgYmVhbi4gSWYgdGhlcmUgYXJlIG11bHRpcGxlCi0gICBtZXRob2RzIHdpdGggdGhlIHNhbWUgb3ZlcmxvYWRlZCBuYW1lLCB0aGUgZWxlbWVudCBvZgotICAgdGhpcyBzdHlsZSByZWZlcnMgdG8gYWxsIHRoZSBtZXRob2RzIHdpdGggdGhlIG92ZXJsb2FkZWQKLSAgIG5hbWUuCi0KLTMuCi08bWV0aG9kPgotICAgIDxlamItbmFtZT5FSkJOQU1FPC9lamItbmFtZT4KLSAgICA8bWV0aG9kLW5hbWU+TUVUSE9EPC9tZXRob2QtbmFtZT4KLSAgICA8bWV0aG9kLXBhcmFtcz4KLSAgICAgICAgPG1ldGhvZC1wYXJhbT5QQVJBTS0xPC9tZXRob2QtcGFyYW0+Ci0gICAgICAgIDxtZXRob2QtcGFyYW0+UEFSQU0tMjwvbWV0aG9kLXBhcmFtPgotICAgICAgICAuLi4KLSAgICAgICAgPG1ldGhvZC1wYXJhbT5QQVJBTS1uPC9tZXRob2QtcGFyYW0+Ci0gICAgPC9tZXRob2QtcGFyYW1zPgotPC9tZXRob2Q+Ci0KLSAgIFRoaXMgc3R5bGUgaXMgdXNlZCB0byByZWZlciB0byBhIHNpbmdsZSBtZXRob2Qgd2l0aGluIGEKLSAgIHNldCBvZiBtZXRob2RzIHdpdGggYW4gb3ZlcmxvYWRlZCBuYW1lLiBQQVJBTS0xIHRocm91Z2gKLSAgIFBBUkFNLW4gYXJlIHRoZSBmdWxseS1xdWFsaWZpZWQgSmF2YSB0eXBlcyBvZiB0aGUKLSAgIG1ldGhvZCdzIGlucHV0IHBhcmFtZXRlcnMgKGlmIHRoZSBtZXRob2QgaGFzIG5vIGlucHV0Ci0gICBhcmd1bWVudHMsIHRoZSBtZXRob2QtcGFyYW1zIGVsZW1lbnQgY29udGFpbnMgbm8KLSAgIG1ldGhvZC1wYXJhbSBlbGVtZW50cykuIEFycmF5cyBhcmUgc3BlY2lmaWVkIGJ5IHRoZQotICAgYXJyYXkgZWxlbWVudCdzIHR5cGUsIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIHBhaXIgb2YKLSAgIHNxdWFyZSBicmFja2V0cyAoZS5nLiBpbnRbXVtdKS4gSWYgdGhlcmUgYXJlIG11bHRpcGxlCi0gICBtZXRob2RzIHdpdGggdGhlIHNhbWUgb3ZlcmxvYWRlZCBuYW1lLCB0aGlzIHN0eWxlIHJlZmVycwotICAgdG8gYWxsIG9mIHRoZSBvdmVybG9hZGVkIG1ldGhvZHMuCi0KLUV4YW1wbGVzOgotCi1TdHlsZSAxOiBUaGUgZm9sbG93aW5nIG1ldGhvZCBlbGVtZW50IHJlZmVycyB0byBhbGwgdGhlCi1tZXRob2RzIG9mIHRoZSBFbXBsb3llZVNlcnZpY2UgYmVhbidzIGhvbWUsIGNvbXBvbmVudCwKLWFuZC9vciB3ZWIgc2VydmljZSBlbmRwb2ludCBpbnRlcmZhY2VzOgotCi08bWV0aG9kPgotICAgIDxlamItbmFtZT5FbXBsb3llZVNlcnZpY2U8L2VqYi1uYW1lPgotICAgIDxtZXRob2QtbmFtZT4qPC9tZXRob2QtbmFtZT4KLTwvbWV0aG9kPgotCi1TdHlsZSAyOiBUaGUgZm9sbG93aW5nIG1ldGhvZCBlbGVtZW50IHJlZmVycyB0byBhbGwgdGhlCi1jcmVhdGUgbWV0aG9kcyBvZiB0aGUgRW1wbG95ZWVTZXJ2aWNlIGJlYW4ncyBob21lCi1pbnRlcmZhY2UocykuCi0KLTxtZXRob2Q+Ci0gICAgPGVqYi1uYW1lPkVtcGxveWVlU2VydmljZTwvZWpiLW5hbWU+Ci0gICAgPG1ldGhvZC1uYW1lPmNyZWF0ZTwvbWV0aG9kLW5hbWU+Ci08L21ldGhvZD4KLQotU3R5bGUgMzogVGhlIGZvbGxvd2luZyBtZXRob2QgZWxlbWVudCByZWZlcnMgdG8gdGhlCi1jcmVhdGUoU3RyaW5nIGZpcnN0TmFtZSwgU3RyaW5nIExhc3ROYW1lKSBtZXRob2Qgb2YgdGhlCi1FbXBsb3llZVNlcnZpY2UgYmVhbidzIGhvbWUgaW50ZXJmYWNlKHMpLgotCi08bWV0aG9kPgotICAgIDxlamItbmFtZT5FbXBsb3llZVNlcnZpY2U8L2VqYi1uYW1lPgotICAgIDxtZXRob2QtbmFtZT5jcmVhdGU8L21ldGhvZC1uYW1lPgotICAgIDxtZXRob2QtcGFyYW1zPgotICAgICAgICA8bWV0aG9kLXBhcmFtPmphdmEubGFuZy5TdHJpbmc8L21ldGhvZC1wYXJhbT4KLSAgICAgICAgPG1ldGhvZC1wYXJhbT5qYXZhLmxhbmcuU3RyaW5nPC9tZXRob2QtcGFyYW0+Ci0gICAgPC9tZXRob2QtcGFyYW1zPgotPC9tZXRob2Q+Ci0KLVRoZSBmb2xsb3dpbmcgZXhhbXBsZSBpbGx1c3RyYXRlcyBhIFN0eWxlIDMgZWxlbWVudCB3aXRoCi1tb3JlIGNvbXBsZXggcGFyYW1ldGVyIHR5cGVzLiBUaGUgbWV0aG9kCi1mb29iYXIoY2hhciBzLCBpbnQgaSwgaW50W10gaWFyLCBteXBhY2thZ2UuTXlDbGFzcyBteWNsLAotbXlwYWNrYWdlLk15Q2xhc3NbXVtdIG15Y2xhYXIpIHdvdWxkIGJlIHNwZWNpZmllZCBhczoKLQotPG1ldGhvZD4KLSAgICA8ZWpiLW5hbWU+RW1wbG95ZWVTZXJ2aWNlPC9lamItbmFtZT4KLSAgICA8bWV0aG9kLW5hbWU+Zm9vYmFyPC9tZXRob2QtbmFtZT4KLSAgICA8bWV0aG9kLXBhcmFtcz4KLSAgICAgICAgPG1ldGhvZC1wYXJhbT5jaGFyPC9tZXRob2QtcGFyYW0+Ci0gICAgICAgIDxtZXRob2QtcGFyYW0+aW50PC9tZXRob2QtcGFyYW0+Ci0gICAgICAgIDxtZXRob2QtcGFyYW0+aW50W108L21ldGhvZC1wYXJhbT4KLSAgICAgICAgPG1ldGhvZC1wYXJhbT5teXBhY2thZ2UuTXlDbGFzczwvbWV0aG9kLXBhcmFtPgotICAgICAgICA8bWV0aG9kLXBhcmFtPm15cGFja2FnZS5NeUNsYXNzW11bXTwvbWV0aG9kLXBhcmFtPgotICAgIDwvbWV0aG9kLXBhcmFtcz4KLTwvbWV0aG9kPgotCi1UaGUgb3B0aW9uYWwgbWV0aG9kLWludGYgZWxlbWVudCBjYW4gYmUgdXNlZCB3aGVuIGl0IGJlY29tZXMKLW5lY2Vzc2FyeSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gYSBtZXRob2QgdGhhdCBpcyBtdWx0aXBseQotZGVmaW5lZCBhY3Jvc3MgdGhlIGVudGVycHJpc2UgYmVhbidzIGhvbWUsIGNvbXBvbmVudCwgYW5kL29yCi13ZWIgc2VydmljZSBlbmRwb2ludCBpbnRlcmZhY2VzIHdpdGggdGhlIHNhbWUgbmFtZSBhbmQKLXNpZ25hdHVyZS4KLQotRm9yIGV4YW1wbGUsIHRoZSBtZXRob2QgZWxlbWVudAotCi08bWV0aG9kPgotICAgIDxlamItbmFtZT5FbXBsb3llZVNlcnZpY2U8L2VqYi1uYW1lPgotICAgIDxtZXRob2QtaW50Zj5SZW1vdGU8L21ldGhvZC1pbnRmPgotICAgIDxtZXRob2QtbmFtZT5jcmVhdGU8L21ldGhvZC1uYW1lPgotICAgIDxtZXRob2QtcGFyYW1zPgotICAgICAgICA8bWV0aG9kLXBhcmFtPmphdmEubGFuZy5TdHJpbmc8L21ldGhvZC1wYXJhbT4KLSAgICAgICAgPG1ldGhvZC1wYXJhbT5qYXZhLmxhbmcuU3RyaW5nPC9tZXRob2QtcGFyYW0+Ci0gICAgPC9tZXRob2QtcGFyYW1zPgotPC9tZXRob2Q+Ci0KLWNhbiBiZSB1c2VkIHRvIGRpZmZlcmVudGlhdGUgdGhlIGNyZWF0ZShTdHJpbmcsIFN0cmluZykKLW1ldGhvZCBkZWZpbmVkIGluIHRoZSByZW1vdGUgaW50ZXJmYWNlIGZyb20gdGhlCi1jcmVhdGUoU3RyaW5nLCBTdHJpbmcpIG1ldGhvZCBkZWZpbmVkIGluIHRoZSByZW1vdGUgaG9tZQotaW50ZXJmYWNlLCB3aGljaCB3b3VsZCBiZSBkZWZpbmVkIGFzCi0KLTxtZXRob2Q+Ci0gICAgPGVqYi1uYW1lPkVtcGxveWVlU2VydmljZTwvZWpiLW5hbWU+Ci0gICAgPG1ldGhvZC1pbnRmPkhvbWU8L21ldGhvZC1pbnRmPgotICAgIDxtZXRob2QtbmFtZT5jcmVhdGU8L21ldGhvZC1uYW1lPgotICAgIDxtZXRob2QtcGFyYW1zPgotICAgICAgICA8bWV0aG9kLXBhcmFtPmphdmEubGFuZy5TdHJpbmc8L21ldGhvZC1wYXJhbT4KLSAgICAgICAgPG1ldGhvZC1wYXJhbT5qYXZhLmxhbmcuU3RyaW5nPC9tZXRob2QtcGFyYW0+Ci0gICAgPC9tZXRob2QtcGFyYW1zPgotPC9tZXRob2Q+Ci0KLWFuZCB0aGUgY3JlYXRlIG1ldGhvZCB0aGF0IGlzIGRlZmluZWQgaW4gdGhlIGxvY2FsIGhvbWUKLWludGVyZmFjZSB3aGljaCB3b3VsZCBiZSBkZWZpbmVkIGFzCi0KLTxtZXRob2Q+Ci0gICAgPGVqYi1uYW1lPkVtcGxveWVlU2VydmljZTwvZWpiLW5hbWU+Ci0gICAgPG1ldGhvZC1pbnRmPkxvY2FsSG9tZTwvbWV0aG9kLWludGY+Ci0gICAgPG1ldGhvZC1uYW1lPmNyZWF0ZTwvbWV0aG9kLW5hbWU+Ci0gICAgPG1ldGhvZC1wYXJhbXM+Ci0gICAgICAgIDxtZXRob2QtcGFyYW0+amF2YS5sYW5nLlN0cmluZzwvbWV0aG9kLXBhcmFtPgotICAgICAgICA8bWV0aG9kLXBhcmFtPmphdmEubGFuZy5TdHJpbmc8L21ldGhvZC1wYXJhbT4KLSAgICA8L21ldGhvZC1wYXJhbXM+Ci08L21ldGhvZD4KLQotVGhlIG1ldGhvZC1pbnRmIGVsZW1lbnQgY2FuIGJlIHVzZWQgd2l0aCBhbGwgdGggcmVlIFN0eWxlcwotb2YgdGhlIG1ldGhvZCBlbGVtZW50IHVzYWdlLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZwotbWV0aG9kIGVsZW1lbnQgZXhhbXBsZSBjb3VsZCBiZSB1c2VkIHRvIHJlZmVyIHRvIGFsbCB0aGUKLW1ldGhvZHMgb2YgdGhlIEVtcGxveWVlU2VydmljZSBiZWFuJ3MgcmVtb3RlIGhvbWUgaW50ZXJmYWNlLgotCi08bWV0aG9kPgotICAgIDxlamItbmFtZT5FbXBsb3llZVNlcnZpY2U8L2VqYi1uYW1lPgotICAgIDxtZXRob2QtaW50Zj5Ib21lPC9tZXRob2QtaW50Zj4KLSAgICA8bWV0aG9kLW5hbWU+KjwvbWV0aG9kLW5hbWU+Ci08L21ldGhvZD4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVqYi1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplamItbmFtZVR5cGUiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im1ldGhvZC1pbnRmIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTptZXRob2QtaW50ZlR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibWV0aG9kLW5hbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOm1ldGhvZC1uYW1lVHlwZSIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibWV0aG9kLXBhcmFtcyIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bWV0aG9kLXBhcmFtc1R5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJtdWx0aXBsaWNpdHlUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIG11bHRpcGxpY2l0eVR5cGUgZGVzY3JpYmVzIHRoZSBtdWx0aXBsaWNpdHkgb2YgdGhlCi1yb2xlIHRoYXQgcGFydGljaXBhdGVzIGluIGEgcmVsYXRpb24uCi0KLVRoZSB2YWx1ZSBtdXN0IGJlIG9uZSBvZiB0aGUgdHdvIGZvbGxvd2luZzoKLQotICAgIE9uZQotICAgIE1hbnkKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImoyZWU6c3RyaW5nIj4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iT25lIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbnkiLz4KLSAgICA8L3hzZDpyZXN0cmljdGlvbj4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0icGVyc2lzdGVuY2UtdHlwZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgcGVyc2lzdGVuY2UtdHlwZVR5cGUgc3BlY2lmaWVzIGFuIGVudGl0eSBiZWFuJ3MgcGVyc2lzdGVuY2UKLW1hbmFnZW1lbnQgdHlwZS4KLQotVGhlIHBlcnNpc3RlbmNlLXR5cGUgZWxlbWVudCBtdXN0IGJlIG9uZSBvZiB0aGUgdHdvIGZvbGxvd2luZzoKLQotICAgIEJlYW4KLSAgICBDb250YWluZXIKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImoyZWU6c3RyaW5nIj4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQmVhbiIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDb250YWluZXIiLz4KLSAgICA8L3hzZDpyZXN0cmljdGlvbj4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9InF1ZXJ5LW1ldGhvZFR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgcXVlcnktbWV0aG9kIHNwZWNpZmllcyB0aGUgbWV0aG9kIGZvciBhIGZpbmRlciBvciBzZWxlY3QKLXF1ZXJ5LgotCi1UaGUgbWV0aG9kLW5hbWUgZWxlbWVudCBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgYSBmaW5kZXIgb3Igc2VsZWN0Ci1tZXRob2QgaW4gdGhlIGVudGl0eSBiZWFuJ3MgaW1wbGVtZW50YXRpb24gY2xhc3MuCi0KLUVhY2ggbWV0aG9kLXBhcmFtIG11c3QgYmUgZGVmaW5lZCBmb3IgYSBxdWVyeS1tZXRob2QgdXNpbmcgdGhlCi1tZXRob2QtcGFyYW1zIGVsZW1lbnQuCi0KLUl0IGlzIHVzZWQgYnkgdGhlIHF1ZXJ5LW1ldGhvZCBlbGVtZW50LgotCi1FeGFtcGxlOgotCi08cXVlcnk+Ci0gICAgPGRlc2NyaXB0aW9uPk1ldGhvZCBmaW5kcyBsYXJnZSBvcmRlcnM8L2Rlc2NyaXB0aW9uPgotICAgIDxxdWVyeS1tZXRob2Q+Ci0gICAgICAgIDxtZXRob2QtbmFtZT5maW5kTGFyZ2VPcmRlcnM8L21ldGhvZC1uYW1lPgotICAgICAgICA8bWV0aG9kLXBhcmFtcz48L21ldGhvZC1wYXJhbXM+Ci0gICAgPC9xdWVyeS1tZXRob2Q+Ci0gICAgPGVqYi1xbD5TRUxFQ1QgT0JKRUNUKG8pIEZST00gT3JkZXIgbyBXSEVSRSBvLmFtb3VudCAmZ3Q7IDEwMDA8L2VqYi1xbD4KLTwvcXVlcnk+Ci0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im1ldGhvZC1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTptZXRob2QtbmFtZVR5cGUiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im1ldGhvZC1wYXJhbXMiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOm1ldGhvZC1wYXJhbXNUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXBsb3ltZW50LWV4dGVuc2lvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVwbG95bWVudC1leHRlbnNpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9InF1ZXJ5VHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBxdWVyeVR5cGUgZGVmaW5lcyBhIGZpbmRlciBvciBzZWxlY3QKLXF1ZXJ5LiBJdCBjb250YWlucwotICAgIC0gYW4gb3B0aW9uYWwgZGVzY3JpcHRpb24gb2YgdGhlIHF1ZXJ5Ci0gICAgLSB0aGUgc3BlY2lmaWNhdGlvbiBvZiB0aGUgZmluZGVyIG9yIHNlbGVjdAotICAgICAgbWV0aG9kIGl0IGlzIHVzZWQgYnkKLSAgICAgICAgLSBhbiBvcHRpb25hbCBzcGVjaWZpY2F0aW9uIG9mIHRoZSByZXN1bHQgdHlwZQotICAgICAgICAgIG1hcHBpbmcsIGlmIHRoZSBxdWVyeSBpcyBmb3IgYSBzZWxlY3QgbWV0aG9kCi0gICAgICAgICAgYW5kIGVudGl0eSBvYmplY3RzIGFyZSByZXR1cm5lZC4KLSAgICAgICAgLSB0aGUgRUpCIFFMIHF1ZXJ5IHN0cmluZyB0aGF0IGRlZmluZXMgdGhlIHF1ZXJ5LgotICAgIC0gYW4gb3B0aW9uYWwgZGVjbGFyYXRpb24gb2YgZGVwbG95bWVudCBleHRlbnNpb25zCi0KLVF1ZXJpZXMgdGhhdCBhcmUgZXhwcmVzc2libGUgaW4gRUpCIFFMIG11c3QgdXNlIHRoZSBlamItcWwKLWVsZW1lbnQgdG8gc3BlY2lmeSB0aGUgcXVlcnkuIElmIGEgcXVlcnkgaXMgbm90IGV4cHJlc3NpYmxlCi1pbiBFSkIgUUwsIHRoZSBkZXNjcmlwdGlvbiBlbGVtZW50IHNob3VsZCBiZSB1c2VkIHRvCi1kZXNjcmliZSB0aGUgc2VtYW50aWNzIG9mIHRoZSBxdWVyeSBhbmQgdGhlIGVqYi1xbCBlbGVtZW50Ci1zaG91bGQgYmUgZW1wdHkuCi0KLVRoZSByZXN1bHQtdHlwZS1tYXBwaW5nIGlzIGFuIG9wdGlvbmFsIGVsZW1lbnQuIEl0IGNhbiBvbmx5Ci1iZSBwcmVzZW50IGlmIHRoZSBxdWVyeS1tZXRob2Qgc3BlY2lmaWVzIGEgc2VsZWN0IG1ldGhvZAotdGhhdCByZXR1cm5zIGVudGl0eSBvYmplY3RzLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZQotcmVzdWx0LXR5cGUtbWFwcGluZyBlbGVtZW50IGlzICJMb2NhbCIuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXNjcmlwdGlvblR5cGUiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icXVlcnktbWV0aG9kIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpxdWVyeS1tZXRob2RUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyZXN1bHQtdHlwZS1tYXBwaW5nIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpyZXN1bHQtdHlwZS1tYXBwaW5nVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZWpiLXFsIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVwbG95bWVudC1leHRlbnNpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlcGxveW1lbnQtZXh0ZW5zaW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJyZWxhdGlvbnNoaXAtcm9sZS1zb3VyY2VUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIHJlbGF0aW9uc2hpcC1yb2xlLXNvdXJjZVR5cGUgZGVzaWduYXRlcyB0aGUgc291cmNlIG9mIGEKLXJvbGUgdGhhdCBwYXJ0aWNpcGF0ZXMgaW4gYSByZWxhdGlvbnNoaXAuIEEKLXJlbGF0aW9uc2hpcC1yb2xlLXNvdXJjZVR5cGUgaXMgdXNlZCBieQotcmVsYXRpb25zaGlwLXJvbGUtc291cmNlIGVsZW1lbnRzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IGFuCi1lbnRpdHkgYmVhbi4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJlamItbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZWpiLW5hbWVUeXBlIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0icmVsYXRpb25zaGlwc1R5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgcmVsYXRpb25zaGlwc1R5cGUgZGVzY3JpYmVzIHRoZSByZWxhdGlvbnNoaXBzIGluCi13aGljaCBlbnRpdHkgYmVhbnMgd2l0aCBjb250YWluZXItbWFuYWdlZCBwZXJzaXN0ZW5jZQotcGFydGljaXBhdGUuIFRoZSByZWxhdGlvbnNoaXBzVHlwZSBjb250YWlucyBhbiBvcHRpb25hbAotZGVzY3JpcHRpb247IGFuZCBhIGxpc3Qgb2YgZWpiLXJlbGF0aW9uIGVsZW1lbnRzLCB3aGljaAotc3BlY2lmeSB0aGUgY29udGFpbmVyIG1hbmFnZWQgcmVsYXRpb25zaGlwcy4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJlamItcmVsYXRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVqYi1yZWxhdGlvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0KLSAgICAgICAgPHhzZDp1bmlxdWUgbmFtZT0icm9sZS1uYW1lLXVuaXF1ZW5lc3MiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgZWpiLXJlbGF0aW9uc2hpcC1yb2xlLW5hbWUgY29udGFpbnMgdGhlIG5hbWUgb2YgYQotICAgICAgICByZWxhdGlvbnNoaXAgcm9sZS4gVGhlIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluCi0gICAgICAgIGEgcmVsYXRpb25zaGlwLCBidXQgY2FuIGJlIHJldXNlZCBpbiBkaWZmZXJlbnQKLSAgICAgICAgcmVsYXRpb25zaGlwcy4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICAgICAgPHhzZDpzZWxlY3RvcgotICAgICAgICAgICAgICAgIHhwYXRoPSIuLy9qMmVlOmVqYi1yZWxhdGlvbnNoaXAtcm9sZS1uYW1lIi8+Ci0gICAgICAgICAgICA8eHNkOmZpZWxkCi0gICAgICAgICAgICAgICAgeHBhdGg9Ii4iLz4KLSAgICAgICAgPC94c2Q6dW5pcXVlPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVwbG95bWVudC1leHRlbnNpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlcGxveW1lbnQtZXh0ZW5zaW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9InJlc3VsdC10eXBlLW1hcHBpbmdUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIHJlc3VsdC10eXBlLW1hcHBpbmdUeXBlIGlzIHVzZWQgaW4gdGhlIHF1ZXJ5IGVsZW1lbnQgdG8KLXNwZWNpZnkgd2hldGhlciBhbiBhYnN0cmFjdCBzY2hlbWEgdHlwZSByZXR1cm5lZCBieSBhIHF1ZXJ5Ci1mb3IgYSBzZWxlY3QgbWV0aG9kIGlzIHRvIGJlIG1hcHBlZCB0byBhbiBFSkJMb2NhbE9iamVjdCBvcgotRUpCT2JqZWN0IHR5cGUuCi0KLVRoZSB2YWx1ZSBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotCi0gICAgTG9jYWwKLSAgICBSZW1vdGUKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImoyZWU6c3RyaW5nIj4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTG9jYWwiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iUmVtb3RlIi8+Ci0gICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJzZWN1cml0eS1pZGVudGl0eVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgc2VjdXJpdHktaWRlbnRpdHlUeXBlIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBjYWxsZXIncwotc2VjdXJpdHkgaWRlbnRpdHkgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGUKLW1ldGhvZHMgb2YgdGhlIGVudGVycHJpc2UgYmVhbiBvciB3aGV0aGVyIGEgc3BlY2lmaWMgcnVuLWFzCi1pZGVudGl0eSBpcyB0byBiZSB1c2VkLiBJdCBjb250YWlucyBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbgotYW5kIGEgc3BlY2lmaWNhdGlvbiBvZiB0aGUgc2VjdXJpdHkgaWRlbnRpdHkgdG8gYmUgdXNlZC4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6Y2hvaWNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InVzZS1jYWxsZXItaWRlbnRpdHkiCi0gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplbXB0eVR5cGUiPgotICAgICAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgICAgICBUaGUgdXNlLWNhbGxlci1pZGVudGl0eSBlbGVtZW50IHNwZWNpZmllcyB0aGF0Ci0gICAgICAgICAgICB0aGUgY2FsbGVyJ3Mgc2VjdXJpdHkgaWRlbnRpdHkgYmUgdXNlZCBhcyB0aGUKLSAgICAgICAgICAgIHNlY3VyaXR5IGlkZW50aXR5IGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZQotICAgICAgICAgICAgZW50ZXJwcmlzZSBiZWFuJ3MgbWV0aG9kcy4KLQotICAgICAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJ1bi1hcyIKLSAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnJ1bi1hc1R5cGUiLz4KLSAgICAgICAgPC94c2Q6Y2hvaWNlPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9InNlcnZpY2UtcmVmVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRISVMgSVMgQSBQTEFDRUhPTERFUiBUWVBFIHdoaWNoIHdpbGwKLWJlIFJFUExBQ0VELiBJdCB3aWxsIGJlIGRlZmluZWQgYmFzZWQgb24KLWRlZmluaXRpb24gdG8gYmUgc3VwcGxpZWQgYnkgSlNSMTA5LgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2ltcGxlQ29udGVudD4KLSAgICAgICAgPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0gICAgICAgIDwveHNkOmV4dGVuc2lvbj4KLSAgICA8L3hzZDpzaW1wbGVDb250ZW50PgotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJzZXNzaW9uLWJlYW5UeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIHNlc3Npb24tYmVhblR5cGUgZGVjbGFyZXMgYW4gc2Vzc2lvbiBiZWFuLiBUaGUKLWRlY2xhcmF0aW9uIGNvbnNpc3RzIG9mOgotCi0gICAgLSBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbgotICAgIC0gYW4gb3B0aW9uYWwgZGlzcGxheSBuYW1lCi0gICAgLSBhbiBvcHRpb25hbCBpY29uIGVsZW1lbnQgdGhhdCBjb250YWlucyBhIHNtYWxsIGFuZCBhIGxhcmdlCi0gICAgICBpY29uIGZpbGUgbmFtZQotICAgIC0gYSBuYW1lIGFzc2lnbmVkIHRvIHRoZSBlbnRlcnByaXNlIGJlYW4KLSAgICAgIGluIHRoZSBkZXBsb3ltZW50IGRlc2NyaXB0aW9uCi0gICAgLSB0aGUgbmFtZXMgb2YgdGhlIHNlc3Npb24gYmVhbidzIHJlbW90ZSBob21lIGFuZAotICAgICAgcmVtb3RlIGludGVyZmFjZXMsIGlmIGFueQotICAgIC0gdGhlIG5hbWVzIG9mIHRoZSBzZXNzaW9uIGJlYW4ncyBsb2NhbCBob21lIGFuZAotICAgICAgbG9jYWwgaW50ZXJmYWNlcywgaWYgYW55Ci0gICAgLSB0aGUgbmFtZSBvZiB0aGUgc2Vzc2lvbiBiZWFuJ3Mgd2ViIHNlcnZpY2UgZW5kcG9pbnQKLSAgICAgIGludGVyZmFjZSwgaWYgYW55Ci0gICAgLSB0aGUgc2Vzc2lvbiBiZWFuJ3MgaW1wbGVtZW50YXRpb24gY2xhc3MKLSAgICAtIHRoZSBzZXNzaW9uIGJlYW4ncyBzdGF0ZSBtYW5hZ2VtZW50IHR5cGUKLSAgICAtIHRoZSBzZXNzaW9uIGJlYW4ncyB0cmFuc2FjdGlvbiBtYW5hZ2VtZW50IHR5cGUKLSAgICAtIGFuIG9wdGlvbmFsIGRlY2xhcmF0aW9uIG9mIHRoZSBiZWFuJ3MKLSAgICAgIGVudmlyb25tZW50IGVudHJpZXMKLSAgICAtIGFuIG9wdGlvbmFsIGRlY2xhcmF0aW9uIG9mIHRoZSBiZWFuJ3MgRUpCIHJlZmVyZW5jZXMKLSAgICAtIGFuIG9wdGlvbmFsIGRlY2xhcmF0aW9uIG9mIHRoZSBiZWFuJ3MgbG9jYWwKLSAgICAgIEVKQiByZWZlcmVuY2VzCi0gICAgLSBhbiBvcHRpb25hbCBkZWNsYXJhdGlvbiBvZiB0aGUgYmVhbidzIHdlYgotICAgICAgc2VydmljZSByZWZlcmVuY2VzCi0gICAgLSBhbiBvcHRpb25hbCBkZWNsYXJhdGlvbiBvZiB0aGUgc2VjdXJpdHkgcm9sZQotICAgICAgcmVmZXJlbmNlcwotICAgIC0gYW4gb3B0aW9uYWwgZGVjbGFyYXRpb24gb2YgdGhlIHNlY3VyaXR5IGlkZW50aXR5Ci0gICAgICB0byBiZSB1c2VkIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBiZWFuJ3MgbWV0aG9kcwotICAgIC0gYW4gb3B0aW9uYWwgZGVjbGFyYXRpb24gb2YgdGhlIGJlYW4ncyByZXNvdXJjZQotICAgICAgbWFuYWdlciBjb25uZWN0aW9uIGZhY3RvcnkgcmVmZXJlbmNlcwotICAgIC0gYW4gb3B0aW9uYWwgZGVjbGFyYXRpb24gb2YgdGhlIGJlYW4ncyByZXNvdXJjZQotICAgICAgZW52aXJvbm1lbnQgcmVmZXJlbmNlcy4KLSAgICAtIGFuIG9wdGlvbmFsIGRlY2xhcmF0aW9uIG9mIHRoZSBiZWFuJ3MgbWVzc2FnZQotICAgICAgZGVzdGluYXRpb24gcmVmZXJlbmNlcwotICAgIC0gYW4gb3B0aW9uYWwgZGVjbGFyYXRpb24gZGVwbG95bWVudCBleHRlbnNpb25zCi0KLVRoZSBlbGVtZW50cyB0aGF0IGFyZSBvcHRpb25hbCBhcmUgIm9wdGlvbmFsIiBpbiB0aGUgc2Vuc2UKLXRoYXQgdGhleSBhcmUgb21pdHRlZCB3aGVuIGlmIGxpc3RzIHJlcHJlc2VudGVkIGJ5IHRoZW0gYXJlCi1lbXB0eS4KLQotRWl0aGVyIGJvdGggdGhlIGxvY2FsLWhvbWUgYW5kIHRoZSBsb2NhbCBlbGVtZW50cyBvciBib3RoCi10aGUgaG9tZSBhbmQgdGhlIHJlbW90ZSBlbGVtZW50cyBtdXN0IGJlIHNwZWNpZmllZCBmb3IgdGhlCi1zZXNzaW9uIGJlYW4uCi0KLVRoZSBzZXJ2aWNlLWVuZHBvaW50IGVsZW1lbnQgbWF5IG9ubHkgYmUgc3BlY2lmaWVkIGlmIHRoZQotYmVhbiBpcyBhIHN0YXRlbGVzcyBzZXNzaW9uIGJlYW4uCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXNjcmlwdGlvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGlzcGxheS1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkaXNwbGF5LW5hbWVUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Imljb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmljb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVqYi1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplamItbmFtZVR5cGUiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImhvbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmhvbWVUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyZW1vdGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnJlbW90ZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsLWhvbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmxvY2FsLWhvbWVUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbCIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bG9jYWxUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzZXJ2aWNlLWVuZHBvaW50IgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpmdWxseS1xdWFsaWZpZWQtY2xhc3NUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIHNlcnZpY2UtZW5kcG9pbnQgZWxlbWVudCBjb250YWlucyB0aGUKLSAgICAgICAgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGVudGVycHJpc2UgYmVhbidzIHdlYgotICAgICAgICBzZXJ2aWNlIGVuZHBvaW50IGludGVyZmFjZS4gVGhlIHNlcnZpY2UtZW5kcG9pbnQKLSAgICAgICAgZWxlbWVudCBtYXkgb25seSBiZSBzcGVjaWZpZWQgZm9yIGEgc3RhdGVsZXNzCi0gICAgICAgIHNlc3Npb24gYmVhbi4gVGhlIHNwZWNpZmllZCBpbnRlcmZhY2UgbXVzdCBiZSBhCi0gICAgICAgIHZhbGlkIEpBWC1SUEMgc2VydmljZSBlbmRwb2ludCBpbnRlcmZhY2UuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVqYi1jbGFzcyIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZWpiLWNsYXNzVHlwZSIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ic2Vzc2lvbi10eXBlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpzZXNzaW9uLXR5cGVUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJ0cmFuc2FjdGlvbi10eXBlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTp0cmFuc2FjdGlvbi10eXBlVHlwZSIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZW52LWVudHJ5IgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplbnYtZW50cnlUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVqYi1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVqYi1yZWZUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVqYi1sb2NhbC1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVqYi1sb2NhbC1yZWZUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlcnZpY2UtcmVmIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpzZXJ2aWNlLXJlZlR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ic2VjdXJpdHktcm9sZS1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnNlY3VyaXR5LXJvbGUtcmVmVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzZWN1cml0eS1pZGVudGl0eSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c2VjdXJpdHktaWRlbnRpdHlUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyZXNvdXJjZS1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnJlc291cmNlLXJlZlR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icmVzb3VyY2UtZW52LXJlZiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cmVzb3VyY2UtZW52LXJlZlR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOm1lc3NhZ2UtZGVzdGluYXRpb24tcmVmVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXBsb3ltZW50LWV4dGVuc2lvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVwbG95bWVudC1leHRlbnNpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9InNlc3Npb24tdHlwZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgc2Vzc2lvbi10eXBlVHlwZSBkZXNjcmliZXMgd2hldGhlciB0aGUgc2Vzc2lvbiBiZWFuIGlzIGEKLXN0YXRlZnVsIHNlc3Npb24gb3Igc3RhdGVsZXNzIHNlc3Npb24uIEl0IGlzIHVzZWQgYnkKLXNlc3Npb24tdHlwZSBlbGVtZW50cy4KLQotVGhlIHZhbHVlIG11c3QgYmUgb25lIG9mIHRoZSB0d28gZm9sbG93aW5nOgotCi0gICAgU3RhdGVmdWwKLSAgICBTdGF0ZWxlc3MKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImoyZWU6c3RyaW5nIj4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVmdWwiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU3RhdGVsZXNzIi8+Ci0gICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9InRyYW5zLWF0dHJpYnV0ZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgdHJhbnMtYXR0cmlidXRlVHlwZSBzcGVjaWZpZXMgaG93IHRoZSBjb250YWluZXIgbXVzdAotbWFuYWdlIHRoZSB0cmFuc2FjdGlvbiBib3VuZGFyaWVzIHdoZW4gZGVsZWdhdGluZyBhIG1ldGhvZAotaW52b2NhdGlvbiB0byBhbiBlbnRlcnByaXNlIGJlYW4ncyBidXNpbmVzcyBtZXRob2QuCi0KLVRoZSB2YWx1ZSBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotCi0gICAgTm90U3VwcG9ydGVkCi0gICAgU3VwcG9ydHMKLSAgICBSZXF1aXJlZAotICAgIFJlcXVpcmVzTmV3Ci0gICAgTWFuZGF0b3J5Ci0gICAgTmV2ZXIKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImoyZWU6c3RyaW5nIj4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iTm90U3VwcG9ydGVkIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlN1cHBvcnRzIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVpcmVkIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlJlcXVpcmVzTmV3Ii8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hbmRhdG9yeSIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJOZXZlciIvPgotICAgIDwveHNkOnJlc3RyaWN0aW9uPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJ0cmFuc2FjdGlvbi10eXBlVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSB0cmFuc2FjdGlvbi10eXBlVHlwZSBzcGVjaWZpZXMgYW4gZW50ZXJwcmlzZSBiZWFuJ3MKLXRyYW5zYWN0aW9uIG1hbmFnZW1lbnQgdHlwZS4KLQotVGhlIHRyYW5zYWN0aW9uLXR5cGUgbXVzdCBiZSBvbmUgb2YgdGhlIHR3byBmb2xsb3dpbmc6Ci0KLSAgICBCZWFuCi0gICAgQ29udGFpbmVyCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkJlYW4iLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ29udGFpbmVyIi8+Ci0gICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwveHNkOnNjaGVtYT4KLQpkaWZmIC0tZ2l0IGEvdjIveGtpdC9zY2hlbWFzL2oyZWUvZXhwb3J0ZWRfYnVpbGQueG1sIGIvdjIveGtpdC9zY2hlbWFzL2oyZWUvZXhwb3J0ZWRfYnVpbGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjdhMzhjLi4wMDAwMDAwCi0tLSBhL3YyL3hraXQvc2NoZW1hcy9qMmVlL2V4cG9ydGVkX2J1aWxkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPHByb2plY3QgbmFtZT0iU2NoZW1hIHByb2plY3QgYnVpbGQiIGRlZmF1bHQ9ImJ1aWxkIj4KLSAgICAKLSAgPHByb3BlcnR5IGVudmlyb25tZW50PSJlbnYiIC8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJ0eXBlc3lzdGVtbmFtZSIgdmFsdWU9IlNjaGVtYSIgLz4KLSAgPHByb3BlcnR5IG5hbWU9ImNsYXNzLnBhdGgiIHZhbHVlPSJDOi9wZXJmb3JjZS92Mi9iZWEvamRrMTQxXzAyL2pyZS9saWIvcnQuamFyO0M6L3BlcmZvcmNlL3YyL2JlYS9qZGsxNDFfMDIvbGliL3Rvb2xzLmphcjtDOi9wZXJmb3JjZS92Mi9iZWEvd2VibG9naWM4MWIvc2VydmVyL2xpYi9rbmV4LmphcjtDOi9wZXJmb3JjZS92Mi9iZWEvd2VibG9naWM4MWIvY29tbW9uL2xpYi9sb2c0ai5qYXI7QzovcGVyZm9yY2UvdjIvYmVhL3dlYmxvZ2ljODFiL3NlcnZlci9saWIvZGVidWdnaW5nLmphcjtDOi9wZXJmb3JjZS92Mi9iZWEvd2VibG9naWM4MWIvc2VydmVyL2xpYi9qYXZlbGluLmphcjtDOi9wZXJmb3JjZS92Mi9iZWEvd2VibG9naWM4MWIvc2VydmVyL2xpYi93bHctbGFuZy5qYXI7QzovcGVyZm9yY2UvdjIvYmVhL3dlYmxvZ2ljODFiL3NlcnZlci9saWIvd2VibG9naWMuamFyO0M6L3BlcmZvcmNlL3YyL2JlYS93ZWJsb2dpYzgxYi9jb21tb24vZXZhbC9wb2ludGJhc2UvbGliL3Bic2VydmVyNDQuamFyO0M6L3BlcmZvcmNlL3YyL2JlYS93ZWJsb2dpYzgxYi9jb21tb24vZXZhbC9wb2ludGJhc2UvbGliL3BiY2xpZW50NDQuamFyO0M6L3BlcmZvcmNlL3YyL2JlYS93ZWJsb2dpYzgxYi9zZXJ2ZXIvbGliL3dlYnNlcnZpY2VzLmphcjtDOi9wZXJmb3JjZS92Mi9iZWEvd2VibG9naWM4MWIvc2VydmVyL2xpYi93ZWJzZXJ2aWNlY2xpZW50LmphcjtDOi9wZXJmb3JjZS92Mi9iZWEvd2VibG9naWM4MWIvc2VydmVyL2xpYi93ZWJzZXJ2aWNlY2xpZW50K3NzbC5qYXI7QzovcGVyZm9yY2UvdjIvYmVhL3dlYmxvZ2ljODFiL3NlcnZlci9saWIvd2xpLmphcjtDOi9wZXJmb3JjZS92Mi9iZWEvd2VibG9naWM4MWIvc2VydmVyL2xpYi94YmVhbi5qYXI7QzovcGVyZm9yY2UvdjIvYmVhL3dlYmxvZ2ljODFiL3NlcnZlci9saWIvd2x4YmVhbi5qYXI7QzovcGVyZm9yY2UvdjIvYmVhL3dlYmxvZ2ljODFiL3NlcnZlci9saWIveHFybC5qYXI7QzovcGVyZm9yY2UvdjIvYmVhL3dlYmxvZ2ljODFiL3NlcnZlci9saWIvd2x4dHJ0LmphcjtDOi9wZXJmb3JjZS92Mi9iZWEvd2VibG9naWM4MWIvc2VydmVyL2xpYi9uZXR1aS9uZXR1aS1jb21waWxlci5qYXI7QzovcGVyZm9yY2UvdjIvYmVhL3dlYmxvZ2ljODFiL2ludGVncmF0aW9uL2xpYi93bGFpLXNlcnZlci5qYXI7QzovRG9jdW1lbnRzIGFuZCBTZXR0aW5ncy9tYmlzaG9wL015IERvY3VtZW50cy90ZXN0L0FQUC1JTkYvbGliL0NvbnRyb2wuamFyO0M6L0RvY3VtZW50cyBhbmQgU2V0dGluZ3MvbWJpc2hvcC9NeSBEb2N1bWVudHMvdGVzdC9BUFAtSU5GL2xpYi9KYXZhU3R1ZmYuamFyO0M6L0RvY3VtZW50cyBhbmQgU2V0dGluZ3MvbWJpc2hvcC9NeSBEb2N1bWVudHMvdGVzdC9BUFAtSU5GL2xpYi9NYWMuamFyO0M6L0RvY3VtZW50cyBhbmQgU2V0dGluZ3MvbWJpc2hvcC9NeSBEb2N1bWVudHMvdGVzdC9BUFAtSU5GL2xpYi9TY2hlbWEuamFyO0M6L0RvY3VtZW50cyBhbmQgU2V0dGluZ3MvbWJpc2hvcC9NeSBEb2N1bWVudHMvdGVzdC9BUFAtSU5GL2xpYi9TaW1wQ29udHJvbFR3by5qYXIiIC8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJzcmMucGF0aCIgdmFsdWU9IkM6L0RvY3VtZW50cyBhbmQgU2V0dGluZ3MvbWJpc2hvcC9NeSBEb2N1bWVudHMvdGVzdC9TY2hlbWEvIiAvPgotICA8cHJvcGVydHkgbmFtZT0iamFyLnBhdGgiIHZhbHVlPSJDOi9Eb2N1bWVudHMgYW5kIFNldHRpbmdzL21iaXNob3AvTG9jYWwgU2V0dGluZ3MvVGVtcC93bHdfY29tcGlsZTIzMjE3IiAvPgotICA8cHJvcGVydHkgbmFtZT0iamFybmFtZSIgdmFsdWU9IlNjaGVtYS5qYXIiIC8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LnBhdGgiIHZhbHVlPSJDOi9Eb2N1bWVudHMgYW5kIFNldHRpbmdzL21iaXNob3AvTXkgRG9jdW1lbnRzL3Rlc3QvQVBQLUlORi9saWIvIiAvPgotICA8cHJvcGVydHkgbmFtZT0id2xob21lLnBhdGgiIHZhbHVlPSJDOi9wZXJmb3JjZS92Mi9iZWEvd2VibG9naWM4MWIvIiAvPgotICAKLSAgPHBhdGggaWQ9InRhc2suY2xhc3NwYXRoIj4KLSAgICA8ZmlsZXNldCBkaXI9IiR7d2xob21lLnBhdGh9Ij4KLSAgICAgIDxpbmNsdWRlIG5hbWU9InNlcnZlci9saWIveGJlYW4uamFyIiAvPgotICAgICAgPGluY2x1ZGUgbmFtZT0ic2VydmVyL2xpYi93ZWJsb2dpYy5qYXIiLz4KLSAgICA8L2ZpbGVzZXQ+Ci0gIDwvcGF0aD4KLSAgCi0gIDx0YXNrZGVmIG5hbWU9InhtbGJlYW4iIGNsYXNzbmFtZT0ieG1sLmFwYWNoZS5vcmcudG9vbC5YTUxCZWFuIiBjbGFzc3BhdGhyZWY9InRhc2suY2xhc3NwYXRoIi8+Ci0gIAotICA8dGFyZ2V0IG5hbWU9ImJ1aWxkIiBkZXNjcmlwdGlvbj0iQnVpbGQgdGhlIFNjaGVtYXMgcHJvamVjdCBhbmQgY29weSBpdCB0byBMaWJyYXJpZXMiPgotICAJCi0gICAgPG1rZGlyIGRpcj0iJHtqYXIucGF0aH0iIC8+Ci0gICAgPHhtbGJlYW4KLSAgICAgIGRlc3RmaWxlPSIke2phci5wYXRofS8ke2phcm5hbWV9IgotICAgICAgc2NoZW1hPSIke3NyYy5wYXRofSIKLSAgICAgIHR5cGVzeXN0ZW1uYW1lPSIke3R5cGVzeXN0ZW1uYW1lfSIKLSAgICAgIGNsYXNzcGF0aD0iJHtjbGFzcy5wYXRofSIKLSAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIiAvPgotICAgICAgPCEtLSBXaXRoIGZhaWxvbmVycm9yPXRydWUsIGFuIHRoZSB0YXJnZXQgc2hvdWxkIGFib3J0IGJlZm9yZQotICAgICAgICAgICBoZXJlIGlmIHRoZXJlJ3MgYW4gZXJyb3IuCi0gICAgICAgICAgIFRoZXJlZm9yZSBpZiB0aGVyZSdzIG5vIGphciwgdGhlbiBpdCBtdXN0IG1lYW4gdGhhdCB0aGVyZQotICAgICAgICAgICB3ZXJlIG5vIHNvdXJjZSBmaWxlcyB0byBjb21waWxlLCBzbyBkZWxldGUgdGhlIGphciBpbiBsaWJyYXJpZXMuIC0tPgotICAgIDxhdmFpbGFibGUgcHJvcGVydHk9ImlzLWphciIgZmlsZT0iJHtqYXIucGF0aH0vJHtqYXJuYW1lfSIvPgotICAgIDxhbnRjYWxsIHRhcmdldD0ibW92ZS1qYXIiLz4KLSAgICA8YW50Y2FsbCB0YXJnZXQ9ImNoZWNrLWNsZWFudXAtamFyIi8+Ci0gIDwvdGFyZ2V0PgotICAKLSAgPHRhcmdldCBuYW1lPSJtb3ZlLWphciIgaWY9ImlzLWphciI+Ci0gICAgPG1vdmUgdG9kaXI9IiR7bGlicmFyeS5wYXRofSIgZmlsZT0iJHtqYXIucGF0aH0vJHtqYXJuYW1lfSIgZmFpbG9uZXJyb3I9ImZhbHNlIiAvPgotICA8L3RhcmdldD4KLQotICA8dGFyZ2V0IG5hbWU9ImNoZWNrLWNsZWFudXAtamFyIiB1bmxlc3M9ImlzLWphciI+Ci0gICAgICA8YW50Y2FsbCB0YXJnZXQ9ImNsZWFuIi8+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgotICAgICAgPGRlbGV0ZSBmaWxlPSIke2xpYnJhcnkucGF0aH0vJHtqYXJuYW1lfSIgZmFpbG9uZXJyb3I9ImZhbHNlIi8+Ci0gIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS92Mi94a2l0L3NjaGVtYXMvajJlZS9qMmVlXzFfNC54c2QgYi92Mi94a2l0L3NjaGVtYXMvajJlZS9qMmVlXzFfNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3MTQyNzIuLjAwMDAwMDAKLS0tIGEvdjIveGtpdC9zY2hlbWFzL2oyZWUvajJlZV8xXzQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTQwNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLUdlbmVyYXRlZCBieSBVbWl0IFlhbGNpbmFscCBNYXJjaCAyMDAyLS0+Ci08eHNkOnNjaGVtYQotICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiCi0gICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiCi0gICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotICAgICBhdHRyaWJ1dGVGb3JtRGVmYXVsdD0idW5xdWFsaWZpZWQiCi0gICAgIHZlcnNpb249IjEuNCI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci1AKCMpajJlZV8xXzQueHNkcwkxLjIwIDAyLzA3LzEyCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1Db3B5cmlnaHQgMjAwMiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCA5MDEgU2FuIEFudG9uaW8KLVJvYWQsIFBhbG8gQWx0bywgQ2FsaWZvcm5pYSA5NDMwMywgVS5TLkEuIEFsbCByaWdodHMKLXJlc2VydmVkLgotCi1TdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGhhcyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzCi1yZWxhdGluZyB0byB0ZWNobm9sb2d5IGRlc2NyaWJlZCBpbiB0aGlzIGRvY3VtZW50LiBJbgotcGFydGljdWxhciwgYW5kIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlc2UgaW50ZWxsZWN0dWFsCi1wcm9wZXJ0eSByaWdodHMgbWF5IGluY2x1ZGUgb25lIG9yIG1vcmUgb2YgdGhlIFUuUy4gcGF0ZW50cwotbGlzdGVkIGF0IGh0dHA6Ly93d3cuc3VuLmNvbS9wYXRlbnRzIGFuZCBvbmUgb3IgbW9yZQotYWRkaXRpb25hbCBwYXRlbnRzIG9yIHBlbmRpbmcgcGF0ZW50IGFwcGxpY2F0aW9ucyBpbiB0aGUKLVUuUy4gYW5kIG90aGVyIGNvdW50cmllcy4KLQotVGhpcyBkb2N1bWVudCBhbmQgdGhlIHRlY2hub2xvZ3kgd2hpY2ggaXQgZGVzY3JpYmVzIGFyZQotZGlzdHJpYnV0ZWQgdW5kZXIgbGljZW5zZXMgcmVzdHJpY3RpbmcgdGhlaXIgdXNlLCBjb3B5aW5nLAotZGlzdHJpYnV0aW9uLCBhbmQgZGVjb21waWxhdGlvbi4gTm8gcGFydCBvZiB0aGlzIGRvY3VtZW50Ci1tYXkgYmUgcmVwcm9kdWNlZCBpbiBhbnkgZm9ybSBieSBhbnkgbWVhbnMgd2l0aG91dCBwcmlvcgotd3JpdHRlbiBhdXRob3JpemF0aW9uIG9mIFN1biBhbmQgaXRzIGxpY2Vuc29ycywgaWYgYW55LgotCi1UaGlyZC1wYXJ0eSBzb2Z0d2FyZSwgaW5jbHVkaW5nIGZvbnQgdGVjaG5vbG9neSwgaXMKLWNvcHlyaWdodGVkIGFuZCBsaWNlbnNlZCBmcm9tIFN1biBzdXBwbGllcnMuCi0KLVN1biwgU3VuIE1pY3Jvc3lzdGVtcywgdGhlIFN1biBsb2dvLCBTb2xhcmlzLCBKYXZhLCBKMkVFLAotSmF2YVNlcnZlciBQYWdlcywgRW50ZXJwcmlzZSBKYXZhQmVhbnMgYW5kIHRoZSBKYXZhIENvZmZlZQotQ3VwIGxvZ28gYXJlIHRyYWRlbWFya3Mgb3IgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9mIFN1bgotTWljcm9zeXN0ZW1zLCBJbmMuIGluIHRoZSBVLlMuIGFuZCBvdGhlciBjb3VudHJpZXMuCi0KLUZlZGVyYWwgQWNxdWlzaXRpb25zOiBDb21tZXJjaWFsIFNvZnR3YXJlIC0gR292ZXJubWVudCBVc2VycwotU3ViamVjdCB0byBTdGFuZGFyZCBMaWNlbnNlIFRlcm1zIGFuZCBDb25kaXRpb25zLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIHRoYXQgYXBwZWFyIGluIHRoZSBjb21tb24KLXNoYXJlYWJsZSBzY2hlbWEocykgb2YgSjJFRSBkZXBsb3ltZW50IGRlc2NyaXB0b3JzIHNob3VsZCBiZQotaW50ZXJwcmV0ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBjb250ZXh0IHRoZXkgYXJlIGluY2x1ZGVkOgotCi1EZXBsb3ltZW50IENvbXBvbmVudCBtYXkgaW5kaWNhdGUgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0gICAgajJlZSBhcHBsaWNhdGlvbjsKLSAgICBhcHBsaWNhdGlvbiBjbGllbnQ7Ci0gICAgd2ViIGFwcGxpY2F0aW9uOwotICAgIGVudGVycHJpc2UgYmVhbjsKLSAgICByZXNvdXJjZSBhZGFwdGVyOwotCi1EZXBsb3ltZW50IEZpbGUgbWF5IGluZGljYXRlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotICAgIGVhciBmaWxlOwotICAgIHdhciBmaWxlOwotICAgIGphciBmaWxlOwotICAgIHJhciBmaWxlOwotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiCi0gICAgICAgICAgICBzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIi8+Ci0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImRlcGxveW1lbnQtZXh0ZW5zaW9uVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBkZXBsb3ltZW50LWV4dGVuc2lvblR5cGUgaXMgdXNlZCB0byBpbmRpY2F0ZQotZXh0ZW5zaW9ucyB0byB0aGUgc3BlY2lmaWMgRGVwbG95bWVudCBDb21wb25lbnQuCi0KLUl0IGlzIHVzZWQgYnkgZGVwbG95bWVudC1leHRlbnNpb24gZWxlbWVudHMgdG8gZGVzaWduYXRlIGFuCi1leHRlbnNpb24gYmxvY2sgdGhhdCBpcyB0YXJnZXRlZCB0byBhIHNwZWNpZmljIGV4dGVuc2lvbgotZGVzaWduYXRlZCBieSBhIHNldCBvZiBleHRlbnNpb24gZWxlbWVudHMgdGhhdCBhcmUgZGVjbGFyZWQKLWJ5IGEgbmFtZXNwYWNlLiBUaGUgbmFtZXNwYWNlIGlkZW50aWZpZXMgdGhlIGV4dGVuc2lvbiB0bwotdGhlIGRlcGxveW1lbnQgdG9vbCB0aGF0IHByb2Nlc3NlcyB0aGUgZXh0ZW5zaW9uLgotCi1UaGUgbXVzdFVuZGVyc3RhbmQgYXR0cmlidXRlIGlzIHByb3ZpZGVkIGJ5IHRoZSBBcHBsaWNhdGlvbgotQXNzZW1ibGVyIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGV4dGVuc2lvbiBkZXNjcmliZWQgaXMgYW4KLWVzc2VudGlhbCBleHRlbnNpb24gdGhhdCBtdXN0IGV4aXN0IGluIHRoZSBjb250YWluZXIuIElmCi1tdXN0VW5kZXJzdGFuZCBpcyAidHJ1ZSIsIHRoZSBkZXBsb3ltZW50IHRvb2wgbXVzdCBpbmRpY2F0ZQotYW4gZXJyb3Igd2hlbiBwcm9jZXNzaW5nIGEgZGVwbG95bWVudC1leHRlbnNpb24gZWxlbWVudCB3aXRoCi1hIG5hbWVzcGFjZSBpdCBkb2VzIG5vdCB1bmRlcnN0YW5kLiAgRXh0ZW5zaW9ucyB0aGF0IGFyZSBub3QKLWVzc2VudGlhbCBhcmUgZGVjbGFyZWQgYnkgZGVmYXVsdCBhcyBvcHRpb25hbCBleHRlbnNpb25zCi10aGF0IG5lZWQgbm90IGJlIHByb3ZpZGVkIGJ5IGEgY29udGFpbmVyLiAgQXBwbGljYXRpb25zIHRoYXQKLXVzZSBzdWNoIGV4dGVuc2lvbnMgYXJlIHBvcnRhYmxlIHRvIG90aGVyIGNvbnRhaW5lcnMgYmVjYXVzZQotZGVwbG95bWVudCB0b29scyB3aWxsIGlnbm9yZSBleHRlbnNpb25zIHRoYXQgdGhleSBkb24ndAotc3VwcG9ydC4KLQotVGhlIHR5cGUgb2YgdGhlIGV4dGVuc2lvbi1lbGVtZW50IGlzIGFic3RyYWN0LiBUaGVyZWZvcmUsIGEKLWNvbmNyZXRlIHR5cGUgbXVzdCBiZSBzcGVjaWZpZWQgYnkgdGhlIGRlcGxveW1lbnQgZGVzY3JpcHRvcgotdXNpbmcgeHNpOnR5cGUgYXR0cmlidXRlIGZvciBlYWNoIGV4dGVuc2lvbi1lbGVtZW50LgotCi1UaGUgdmFsdWUgb2YgdGhlIG11c3RVbmRlcnN0YW5kIGF0dHJpYnV0ZSBpcyAiZmFsc2UiCi1ieSBkZWZhdWx0LgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9ImV4dGVuc2lvbi1lbGVtZW50IgotICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmV4dGVuc2libGVUeXBlIgotICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0ibmFtZXNwYWNlIgotICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiCi0gICAgICAgICAgICAgICAgICAgdHlwZT0ieHNkOmFueVVSSSIvPgotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9Im11c3RVbmRlcnN0YW5kIgotICAgICAgICAgICAgICAgICAgIHR5cGU9InhzZDpib29sZWFuIi8+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iZGVzY3JpcHRpb25UeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGRlc2NyaXB0aW9uIHR5cGUgaXMgdXNlZCBieSBhIGRlc2NyaXB0aW9uIGVsZW1lbnQgdG8KLXByb3ZpZGUgdGV4dCBkZXNjcmliaW5nIHRoZSBwYXJlbnQgZWxlbWVudC4gIFRoZSBlbGVtZW50cwotdGhhdCB1c2UgdGhpcyB0eXBlIHNob3VsZCBpbmNsdWRlIGFueSBpbmZvcm1hdGlvbiB0aGF0IHRoZQotRGVwbG95bWVudCBDb21wb25lbnQncyBEZXBsb3ltZW50IEZpbGUgZmlsZSBwcm9kdWNlciB3YW50cwotdG8gcHJvdmlkZSB0byB0aGUgY29uc3VtZXIgb2YgdGhlIERlcGxveW1lbnQgQ29tcG9uZW50J3MKLURlcGxveW1lbnQgRmlsZSAoaS5lLiwgdG8gdGhlIERlcGxveWVyKS4gVHlwaWNhbGx5LCB0aGUKLXRvb2xzIHVzZWQgYnkgc3VjaCBhIERlcGxveW1lbnQgRmlsZSBjb25zdW1lciB3aWxsIGRpc3BsYXkKLXRoZSBkZXNjcmlwdGlvbiB3aGVuIHByb2Nlc3NpbmcgdGhlIHBhcmVudCBlbGVtZW50IHRoYXQKLWNvbnRhaW5zIHRoZSBkZXNjcmlwdGlvbi4KLQotVGhlIGxhbmcgYXR0cmlidXRlIGRlZmluZXMgdGhlIGxhbmd1YWdlIHRoYXQgdGhlCi1kZXNjcmlwdGlvbiBpcyBwcm92aWRlZCBpbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgImVuIiAoRW5nbGlzaCkuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJ4c2Q6c3RyaW5nIj4KLSAgICAgICAgPHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6bGFuZyIvPgotICAgICAgICA8L3hzZDpleHRlbnNpb24+Ci0gICAgPC94c2Q6c2ltcGxlQ29udGVudD4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9ImRld2V5LXZlcnNpb25UeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhpcyB0eXBlIGRlZmluZXMgYSBkZXdleSBkZWNpbWFsIHdoaWNoIGlzIHVzZWQKLXRvIGRlc2NyaWJlIHZlcnNpb25zIG9mIGRvY3VtZW50cy4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpkZWNpbWFsIj4KLSAgICAgICAgPHhzZDp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIvPgotICAgIDwveHNkOnJlc3RyaWN0aW9uPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iZGlzcGxheS1uYW1lVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBkaXNwbGF5LW5hbWUgdHlwZSBjb250YWlucyBhIHNob3J0IG5hbWUgdGhhdCBpcyBpbnRlbmRlZAotdG8gYmUgZGlzcGxheWVkIGJ5IHRvb2xzLiBJdCBpcyB1c2VkIGJ5IGRpc3BsYXktbmFtZQotZWxlbWVudHMuICBUaGUgZGlzcGxheSBuYW1lIG5lZWQgbm90IGJlIHVuaXF1ZS4KLQotRXhhbXBsZToKLQotLi4uCi0gICA8ZGlzcGxheS1uYW1lIHhtbDpsYW5nPSJlbiI+RW1wbG95ZWUgU2VsZiBTZXJ2aWNlPC9kaXNwbGF5LW5hbWU+Ci0KLVRoZSB2YWx1ZSBvZiB0aGUgeG1sOmxhbmcgYXR0cmlidXRlIGlzICJlbiIgKEVuZ2xpc2gpIGJ5IGRlZmF1bHQuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzaW1wbGVDb250ZW50PgotICAgICAgICA8eHNkOmV4dGVuc2lvbiBiYXNlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOmxhbmciLz4KLSAgICAgICAgPC94c2Q6ZXh0ZW5zaW9uPgotICAgIDwveHNkOnNpbXBsZUNvbnRlbnQ+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJlamItbGlua1R5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgZWpiLWxpbmtUeXBlIGlzIHVzZWQgYnkgZWpiLWxpbmsKLWVsZW1lbnRzIGluIHRoZSBlamItcmVmIG9yIGVqYi1sb2NhbC1yZWYgZWxlbWVudHMgdG8gc3BlY2lmeQotdGhhdCBhbiBFSkIgcmVmZXJlbmNlIGlzIGxpbmtlZCB0byBlbnRlcnByaXNlIGJlYW4uCi0KLVRoZSB2YWx1ZSBvZiB0aGUgZWpiLWxpbmsgZWxlbWVudCBtdXN0IGJlIHRoZSBlamItbmFtZSBvZiBhbgotZW50ZXJwcmlzZSBiZWFuIGluIHRoZSBzYW1lIGVqYi1qYXIgZmlsZSBvciBpbiBhbm90aGVyIGVqYi1qYXIKLWZpbGUgaW4gdGhlIHNhbWUgSjJFRSBhcHBsaWNhdGlvbiB1bml0LgotCi1BbHRlcm5hdGl2ZWx5LCB0aGUgbmFtZSBpbiB0aGUgZWpiLWxpbmsgZWxlbWVudCBtYXkgYmUgY29tcG9zZWQgb2YgYQotcGF0aCBuYW1lIHNwZWNpZnlpbmcgdGhlIGVqYi1qYXIgY29udGFpbmluZyB0aGUgcmVmZXJlbmNlZCBlbnRlcnByaXNlCi1iZWFuIHdpdGggdGhlIGVqYi1uYW1lIG9mIHRoZSB0YXJnZXQgYmVhbiBhcHBlbmRlZCBhbmQgc2VwYXJhdGVkIGZyb20KLXRoZSBwYXRoIG5hbWUgYnkgIiMiLiAgVGhlIHBhdGggbmFtZSBpcyByZWxhdGl2ZSB0byB0aGUgRGVwbG95bWVudCBGaWxlCi1jb250YWluaW5nIERlcGxveW1lbnQgQ29tcG9uZW50IHRoYXQgaXMgcmVmZXJlbmNpbmcgdGhlIGVudGVycHJpc2UgYmVhbi4KLVRoaXMgYWxsb3dzIG11bHRpcGxlIGVudGVycHJpc2UgYmVhbnMgd2l0aCB0aGUgc2FtZSBlamItbmFtZSB0byBiZQotdW5pcXVlbHkgaWRlbnRpZmllZC4KLQotRXhhbXBsZXM6Ci0KLSAgICA8ZWpiLWxpbms+RW1wbG95ZWVSZWNvcmQ8L2VqYi1saW5rPgotCi0gICAgPGVqYi1saW5rPi4uL3Byb2R1Y3RzL3Byb2R1Y3QuamFyI1Byb2R1Y3RFSkI8L2VqYi1saW5rPgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpzdHJpbmciLz4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImVqYi1sb2NhbC1yZWZUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGVqYi1sb2NhbC1yZWZUeXBlIGlzIHVzZWQgYnkgZWpiLWxvY2FsLXJlZiBlbGVtZW50cyBmb3IKLXRoZSBkZWNsYXJhdGlvbiBvZiBhIHJlZmVyZW5jZSB0byBhbiBlbnRlcnByaXNlIGJlYW4ncyBsb2NhbAotaG9tZS4gVGhlIGRlY2xhcmF0aW9uIGNvbnNpc3RzIG9mOgotCi0gICAgLSBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbgotICAgIC0gdGhlIEVKQiByZWZlcmVuY2UgbmFtZSB1c2VkIGluIHRoZSBjb2RlIG9mIHRoZSBEZXBsb3ltZW50Ci0gICAgICBDb21wb25lbnQgdGhhdCdzIHJlZmVyZW5jaW5nIHRoZSBlbnRlcnByaXNlIGJlYW4KLSAgICAtIHRoZSBleHBlY3RlZCB0eXBlIG9mIHRoZSByZWZlcmVuY2VkIGVudGVycHJpc2UgYmVhbgotICAgIC0gdGhlIGV4cGVjdGVkIGxvY2FsIGhvbWUgYW5kIGxvY2FsIGludGVyZmFjZXMgb2YgdGhlCi0gICAgICByZWZlcmVuY2VkIGVudGVycHJpc2UgYmVhbgotICAgIC0gb3B0aW9uYWwgZWpiLWxpbmsgaW5mb3JtYXRpb24sIHVzZWQgdG8gc3BlY2lmeSB0aGUKLSAgICAgIHJlZmVyZW5jZWQgZW50ZXJwcmlzZSBiZWFuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXNjcmlwdGlvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZWpiLXJlZi1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplamItcmVmLW5hbWVUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJlamItcmVmLXR5cGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVqYi1yZWYtdHlwZVR5cGUiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsLWhvbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmxvY2FsLWhvbWVUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhbCIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bG9jYWxUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJlamItbGluayIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZWpiLWxpbmtUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJlamItcmVmLW5hbWVUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGVqYi1yZWYtbmFtZSBlbGVtZW50IGNvbnRhaW5zIHRoZSBuYW1lIG9mIGFuIEVKQgotcmVmZXJlbmNlLiBUaGUgRUpCIHJlZmVyZW5jZSBpcyBhbiBlbnRyeSBpbiB0aGUKLURlcGxveW1lbnQgQ29tcG9uZW50J3MgZW52aXJvbm1lbnQgYW5kIGlzIHJlbGF0aXZlIHRvIHRoZQotamF2YTpjb21wL2VudiBjb250ZXh0LiAgVGhlIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZQotRGVwbG95bWVudCBDb21wb25lbnQuCi0KLUl0IGlzIHJlY29tbWVuZGVkIHRoYXQgbmFtZSBpcyBwcmVmaXhlZCB3aXRoICJlamIvIi4KLQotRXhhbXBsZToKLQotPGVqYi1yZWYtbmFtZT5lamIvUGF5cm9sbDwvZWpiLXJlZi1uYW1lPgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpqbmRpLW5hbWVUeXBlIi8+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9ImVqYi1yZWYtdHlwZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgZWpiLXJlZi10eXBlVHlwZSBjb250YWlucyB0aGUgZXhwZWN0ZWQgdHlwZSBvZiB0aGUKLXJlZmVyZW5jZWQgZW50ZXJwcmlzZSBiZWFuLgotCi1UaGUgZWpiLXJlZi10eXBlIGRlc2lnbmF0ZXMgYSB2YWx1ZQotdGhhdCBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotCi0gICAgRW50aXR5Ci0gICAgU2Vzc2lvbgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpzdHJpbmciPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJFbnRpdHkiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iU2Vzc2lvbiIvPgotICAgIDwveHNkOnJlc3RyaWN0aW9uPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iZWpiLXJlZlR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgZWpiLXJlZlR5cGUgaXMgdXNlZCBieSBlamItcmVmIGVsZW1lbnRzIGZvciB0aGUKLWRlY2xhcmF0aW9uIG9mIGEgcmVmZXJlbmNlIHRvIGFuIGVudGVycHJpc2UgYmVhbidzIGhvbWUuIFRoZQotZGVjbGFyYXRpb24gY29uc2lzdHMgb2Y6Ci0KLSAgICAtIGFuIG9wdGlvbmFsIGRlc2NyaXB0aW9uCi0gICAgLSB0aGUgRUpCIHJlZmVyZW5jZSBuYW1lIHVzZWQgaW4gdGhlIGNvZGUgb2YKLSAgICAgIHRoZSBEZXBsb3ltZW50IENvbXBvbmVudCB0aGF0J3MgcmVmZXJlbmNpbmcgdGhlIGVudGVycHJpc2UKLSAgICAgIGJlYW4KLSAgICAtIHRoZSBleHBlY3RlZCB0eXBlIG9mIHRoZSByZWZlcmVuY2VkIGVudGVycHJpc2UgYmVhbgotICAgIC0gdGhlIGV4cGVjdGVkIGhvbWUgYW5kIHJlbW90ZSBpbnRlcmZhY2VzIG9mIHRoZSByZWZlcmVuY2VkCi0gICAgICBlbnRlcnByaXNlIGJlYW4KLSAgICAtIG9wdGlvbmFsIGVqYi1saW5rIGluZm9ybWF0aW9uLCB1c2VkIHRvIHNwZWNpZnkgdGhlCi0gICAgICByZWZlcmVuY2VkIGVudGVycHJpc2UgYmVhbgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVqYi1yZWYtbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZWpiLXJlZi1uYW1lVHlwZSIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZWpiLXJlZi10eXBlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplamItcmVmLXR5cGVUeXBlIi8+Ci0KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImhvbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmhvbWVUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyZW1vdGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnJlbW90ZVR5cGUiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVqYi1saW5rIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplamItbGlua1R5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJlbXB0eVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGlzIHR5cGUgaXMgdXNlZCB0byBkZXNpZ25hdGUgYW4gZW1wdHkKLWVsZW1lbnQgd2hlbiB1c2VkLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJlbnYtZW50cnktdHlwZS12YWx1ZXNUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhpcyB0eXBlIGNvbnRhaW5zIHRoZSBmdWxseS1xdWFsaWZpZWQgSmF2YSB0eXBlIG9mIHRoZQotZW52aXJvbm1lbnQgZW50cnkgdmFsdWUgdGhhdCBpcyBleHBlY3RlZCBieSB0aGUKLWFwcGxpY2F0aW9uJ3MgY29kZS4KLQotVGhlIGZvbGxvd2luZyBhcmUgdGhlIGxlZ2FsIHZhbHVlcyBvZiBlbnYtZW50cnktdHlwZS12YWx1ZXNUeXBlOgotCi0gICAgamF2YS5sYW5nLkJvb2xlYW4KLSAgICBqYXZhLmxhbmcuQnl0ZQotICAgIGphdmEubGFuZy5DaGFyYWN0ZXIKLSAgICBqYXZhLmxhbmcuU3RyaW5nCi0gICAgamF2YS5sYW5nLlNob3J0Ci0gICAgamF2YS5sYW5nLkludGVnZXIKLSAgICBqYXZhLmxhbmcuTG9uZwotICAgIGphdmEubGFuZy5GbG9hdAotICAgIGphdmEubGFuZy5Eb3VibGUKLQotRXhhbXBsZToKLQotPGVudi1lbnRyeS10eXBlPmphdmEubGFuZy5Cb29sZWFuPC9lbnYtZW50cnktdHlwZT4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImoyZWU6c3RyaW5nIj4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iamF2YS5sYW5nLkJvb2xlYW4iLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iamF2YS5sYW5nLkJ5dGUiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iamF2YS5sYW5nLkNoYXJhY3RlciIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJqYXZhLmxhbmcuU3RyaW5nIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9ImphdmEubGFuZy5TaG9ydCIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJqYXZhLmxhbmcuSW50ZWdlciIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJqYXZhLmxhbmcuTG9uZyIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJqYXZhLmxhbmcuRmxvYXQiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iamF2YS5sYW5nLkRvdWJsZSIvPgotICAgIDwveHNkOnJlc3RyaWN0aW9uPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iZW52LWVudHJ5VHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBlbnYtZW50cnlUeXBlIGlzIHVzZWQgdG8gZGVjbGFyZSBhbiBhcHBsaWNhdGlvbidzCi1lbnZpcm9ubWVudCBlbnRyeS4gVGhlIGRlY2xhcmF0aW9uIGNvbnNpc3RzIG9mIGFuIG9wdGlvbmFsCi1kZXNjcmlwdGlvbiwgdGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IGVudHJ5LCBhbmQgYW4KLW9wdGlvbmFsIHZhbHVlLiAgSWYgYSB2YWx1ZSBpcyBub3Qgc3BlY2lmaWVkLCBvbmUgbXVzdCBiZQotc3VwcGxpZWQgZHVyaW5nIGRlcGxveW1lbnQuCi0KLUl0IGlzIHVzZWQgYnkgZW52LWVudHJ5IGVsZW1lbnRzLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVudi1lbnRyeS1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpqbmRpLW5hbWVUeXBlIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGVudi1lbnRyeS1uYW1lIGVsZW1lbnQgY29udGFpbnMgdGhlIG5hbWUgb2YgYQotICAgICAgICBEZXBsb3ltZW50IENvbXBvbmVudCdzIGVudmlyb25tZW50IGVudHJ5LiAgVGhlIG5hbWUKLSAgICAgICAgaXMgYSBKTkRJIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGphdmE6Y29tcC9lbnYKLSAgICAgICAgY29udGV4dC4gIFRoZSBuYW1lIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhCi0gICAgICAgIERlcGxveW1lbnQgQ29tcG9uZW50LiBUaGUgdW5pcXVlbmVzcwotICAgICAgICBjb25zdHJhaW50cyBtdXN0IGJlIGRlZmluZWQgd2l0aGluIHRoZSBkZWNsYXJlZAotICAgICAgICBjb250ZXh0LgotCi0gICAgICAgIEV4YW1wbGU6Ci0KLSAgICAgICAgPGVudi1lbnRyeS1uYW1lPm1pbkFtb3VudDwvZW52LWVudHJ5LW5hbWU+Ci0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLQotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZW52LWVudHJ5LXR5cGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVudi1lbnRyeS10eXBlLXZhbHVlc1R5cGUiLz4KLQotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZW52LWVudHJ5LXZhbHVlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0ieHNkOnN0cmluZyIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBlbnYtZW50cnktdmFsdWUgZGVzaWduYXRlcyB0aGUgdmFsdWUgb2YgYQotICAgICAgICBEZXBsb3ltZW50IENvbXBvbmVudCdzIGVudmlyb25tZW50IGVudHJ5LiBUaGUgdmFsdWUKLSAgICAgICAgbXVzdCBiZSBhIFN0cmluZyB0aGF0IGlzIHZhbGlkIGZvciB0aGUKLSAgICAgICAgY29uc3RydWN0b3Igb2YgdGhlIHNwZWNpZmllZCB0eXBlIHRoYXQgdGFrZXMgYQotICAgICAgICBzaW5nbGUgU3RyaW5nIHBhcmFtZXRlciwgb3IgZm9yIGphdmEubGFuZy5DaGFyYWN0ZXIsCi0gICAgICAgIGEgc2luZ2xlIGNoYXJhY3Rlci4KLQotICAgICAgICBFeGFtcGxlOgotCi0gICAgICAgIDxlbnYtZW50cnktdmFsdWU+MTAwLjAwPC9lbnYtZW50cnktdmFsdWU+Ci0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLQotICAgIDwveHNkOnNlcXVlbmNlPgotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJleHRlbnNpYmxlVHlwZSIgYWJzdHJhY3Q9InRydWUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgZXh0ZW5zaWJsZVR5cGUgaXMgYW4gYWJzdHJhY3QgYmFzZSB0eXBlIHdoaWNoIGlzIHVzZWQgdG8KLWRlZmluZSB0aGUgdHlwZSBvZiBleHRlbnNpb24tZWxlbWVudHMuIEluc3RhbmNlIGRvY3VtZW50cwotbXVzdCBzdWJzdGl0dXRlIGEga25vd24gdHlwZSB0byBkZWZpbmUgdGhlIGV4dGVuc2lvbiBieQotdXNpbmcgeHNpOnR5cGUgYXR0cmlidXRlIHRvIGRlZmluZSB0aGUgYWN0dWFsIHR5cGUgb2YKLWV4dGVuc2lvbi1lbGVtZW50cy4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0iZnVsbHktcXVhbGlmaWVkLWNsYXNzVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBlbGVtZW50cyB0aGF0IHVzZSB0aGlzIHR5cGUgZGVzaWduYXRlIHRoZSBuYW1lIG9mIGEKLUphdmEgY2xhc3Mgb3IgaW50ZXJmYWNlLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpzdHJpbmciLz4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0iZ2VuZXJpYy1ib29sZWFuVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoaXMgdHlwZSBkZWZpbmVzIGZvdXIgZGlmZmVyZW50IHZhbHVlcyB3aGljaCBjYW4gZGVzaWduYXRlCi1ib29sZWFuIHZhbHVlcy4gVGhpcyBpbmNsdWRlcyB2YWx1ZXMgeWVzIGFuZCBubyB3aGljaCBhcmUKLW5vdCBkZXNpZ25hdGVkIGJ5IHhzZDpib29sZWFuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9InRydWUiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ieWVzIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Im5vIi8+Ci0gICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9ImhvbWVUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGhvbWVUeXBlIGRlZmluZXMgdGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lIG9mCi1hbiBlbnRlcnByaXNlIGJlYW4ncyBob21lIGludGVyZmFjZS4KLQotRXhhbXBsZToKLQotICAgIDxob21lPmNvbS5hYXJkdmFyay5wYXlyb2xsLlBheXJvbGxIb21lPC9ob21lPgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpmdWxseS1xdWFsaWZpZWQtY2xhc3NUeXBlIi8+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJpY29uVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBpY29uIHR5cGUgY29udGFpbnMgc21hbGwtaWNvbiBhbmQgbGFyZ2UtaWNvbiBlbGVtZW50cwotdGhhdCBzcGVjaWZ5IHRoZSBmaWxlIG5hbWVzIGZvciBzbWFsbCBhbmQgbGFyZ2UgR0lGIG9yCi1KUEVHIGljb24gaW1hZ2VzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBwYXJlbnQgZWxlbWVudCBpbiBhCi1HVUkgdG9vbC4KLQotVGhlIHhtbDpsYW5nIGF0dHJpYnV0ZSBkZWZpbmVzIHRoZSBsYW5ndWFnZSB0aGF0IHRoZQotaWNvbiBmaWxlIG5hbWVzIGFyZSBwcm92aWRlZCBpbi4gSXRzIHZhbHVlIGlzICJlbiIgKEVuZ2xpc2gpCi1ieSBkZWZhdWx0LgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzbWFsbC1pY29uIiB0eXBlPSJqMmVlOnBhdGhUeXBlIgotICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICBUaGUgc21hbGwtaWNvbiBlbGVtZW50IGNvbnRhaW5zIHRoZSBuYW1lIG9mIGEgZmlsZQotICAgICAgICBjb250YWluaW5nIGEgc21hbGwgKDE2IHggMTYpIGljb24gaW1hZ2UuIFRoZSBmaWxlCi0gICAgICAgIG5hbWUgaXMgYSByZWxhdGl2ZSBwYXRoIHdpdGhpbiB0aGUgRGVwbG95bWVudAotICAgICAgICBDb21wb25lbnQncyBEZXBsb3ltZW50IEZpbGUuCi0KLSAgICAgICAgVGhlIGltYWdlIG1heSBiZSBlaXRoZXIgaW4gdGhlIEpQRUcgb3IgR0lGIGZvcm1hdC4KLSAgICAgICAgVGhlIGljb24gY2FuIGJlIHVzZWQgYnkgdG9vbHMuCi0KLSAgICAgICAgRXhhbXBsZToKLQotICAgICAgICA8c21hbGwtaWNvbj5lbXBsb3llZS1zZXJ2aWNlLWljb24xNngxNi5qcGc8L3NtYWxsLWljb24+Ci0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJsYXJnZS1pY29uIiB0eXBlPSJqMmVlOnBhdGhUeXBlIgotICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBsYXJnZS1pY29uIGVsZW1lbnQgY29udGFpbnMgdGhlIG5hbWUgb2YgYSBmaWxlCi0gICAgICAgIGNvbnRhaW5pbmcgYSBsYXJnZQotICAgICAgICAoMzIgeCAzMikgaWNvbiBpbWFnZS4gVGhlIGZpbGUgbmFtZSBpcyBhIHJlbGF0aXZlCi0gICAgICAgIHBhdGggd2l0aGluIHRoZSBEZXBsb3ltZW50IENvbXBvbmVudCdzIERlcGxveW1lbnQKLSAgICAgICAgRmlsZS4KLQotICAgICAgICBUaGUgaW1hZ2UgbWF5IGJlIGVpdGhlciBpbiB0aGUgSlBFRyBvciBHSUYgZm9ybWF0LgotICAgICAgICBUaGUgaWNvbiBjYW4gYmUgdXNlZCBieSB0b29scy4KLQotICAgICAgICBFeGFtcGxlOgotCi0gICAgICAgIDxsYXJnZS1pY29uPmVtcGxveWVlLXNlcnZpY2UtaWNvbjMyeDMyLmpwZzwvbGFyZ2UtaWNvbj4KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLQotICAgIDwveHNkOnNlcXVlbmNlPgotCi0gICAgPHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6bGFuZyIvPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0iamF2YS1pZGVudGlmaWVyVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBqYXZhLWlkZW50aWZpZXJUeXBlIGRlZmluZXMgYSBKYXZhIGlkZW50aWZpZXIuCi1UaGUgdXNlcnMgb2YgdGhpcyB0eXBlIHNob3VsZCBmdXJ0aGVyIHZlcmlmeSB0aGF0Ci10aGUgY29udGVudCBkb2VzIG5vdCBjb250YWluIEphdmEgcmVzZXJ2ZWQga2V5d29yZHMuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6cGF0dGVybiB2YWx1ZT0iKCR8X3xccHtMfSkoXHB7TH18XHB7TmR9fF98JCkqIi8+Ci0gICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9ImpuZGktbmFtZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgam5kaS1uYW1lVHlwZSB0eXBlIGRlc2lnbmF0ZXMgYSBKTkRJIG5hbWUgaW4gdGhlCi1EZXBsb3ltZW50IENvbXBvbmVudCdzIGVudmlyb25tZW50IGFuZCBpcyByZWxhdGl2ZSB0byB0aGUKLWphdmE6Y29tcC9lbnYgY29udGV4dC4gIEEgSk5ESSBuYW1lIG11c3QgYmUgdW5pcXVlIHdpdGhpbiB0aGUKLURlcGxveW1lbnQgQ29tcG9uZW50LgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpzdHJpbmciLz4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0ibG9jYWwtaG9tZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgbG9jYWwtaG9tZVR5cGUgZGVmaW5lcyB0aGUgZnVsbHktcXVhbGlmaWVkCi1uYW1lIG9mIGFuIGVudGVycHJpc2UgYmVhbidzIGxvY2FsIGhvbWUgaW50ZXJmYWNlLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpmdWxseS1xdWFsaWZpZWQtY2xhc3NUeXBlIi8+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9ImxvY2FsVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBsb2NhbFR5cGUgZGVmaW5lcyB0aGUgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgYW4KLWVudGVycHJpc2UgYmVhbidzIGxvY2FsIGludGVyZmFjZS4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImoyZWU6ZnVsbHktcXVhbGlmaWVkLWNsYXNzVHlwZSIvPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJtZXNzYWdlLWRlc3RpbmF0aW9uLWxpbmtUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIG1lc3NhZ2UtZGVzdGluYXRpb24tbGlua1R5cGUgaXMgdXNlZCB0byBsaW5rIGEgbWVzc2FnZQotZGVzdGluYXRpb24gcmVmZXJlbmNlIG9yIG1lc3NhZ2UtZHJpdmVuIGJlYW4gdG8gYSBtZXNzYWdlCi1kZXN0aW5hdGlvbi4KLQotVGhlIEFzc2VtYmxlciBzZXRzIHRoZSB2YWx1ZSB0byByZWZsZWN0IHRoZSBmbG93IG9mIG1lc3NhZ2VzCi1iZXR3ZWVuIHByb2R1Y2VycyBhbmQgY29uc3VtZXJzIGluIHRoZSBhcHBsaWNhdGlvbi4KLQotVGhlIHZhbHVlIG11c3QgYmUgdGhlIG1lc3NhZ2UtZGVzdGluYXRpb24tbmFtZSBvZiBhIG1lc3NhZ2UKLWRlc3RpbmF0aW9uIGluIHRoZSBzYW1lIERlcGxveW1lbnQgRmlsZSBvciBpbiBhbm90aGVyCi1EZXBsb3ltZW50IEZpbGUgaW4gdGhlIHNhbWUgSjJFRSBhcHBsaWNhdGlvbiB1bml0LgotCi1BbHRlcm5hdGl2ZWx5LCB0aGUgdmFsdWUgbWF5IGJlIGNvbXBvc2VkIG9mIGEgcGF0aCBuYW1lCi1zcGVjaWZ5aW5nIGEgRGVwbG95bWVudCBGaWxlIGNvbnRhaW5pbmcgdGhlIHJlZmVyZW5jZWQKLW1lc3NhZ2UgZGVzdGluYXRpb24gd2l0aCB0aGUgbWVzc2FnZS1kZXN0aW5hdGlvbi1uYW1lIG9mIHRoZQotZGVzdGluYXRpb24gYXBwZW5kZWQgYW5kIHNlcGFyYXRlZCBmcm9tIHRoZSBwYXRoIG5hbWUgYnkKLSIjIi4gVGhlIHBhdGggbmFtZSBpcyByZWxhdGl2ZSB0byB0aGUgRGVwbG95bWVudCBGaWxlCi1jb250YWluaW5nIERlcGxveW1lbnQgQ29tcG9uZW50IHRoYXQgaXMgcmVmZXJlbmNpbmcgdGhlCi1tZXNzYWdlIGRlc3RpbmF0aW9uLiAgVGhpcyBhbGxvd3MgbXVsdGlwbGUgbWVzc2FnZQotZGVzdGluYXRpb25zIHdpdGggdGhlIHNhbWUgbmFtZSB0byBiZSB1bmlxdWVseSBpZGVudGlmaWVkLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpmdWxseS1xdWFsaWZpZWQtY2xhc3NUeXBlIi8+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZlR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgbWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYgZWxlbWVudCBjb250YWlucyBhIGRlY2xhcmF0aW9uCi1vZiBEZXBsb3ltZW50IENvbXBvbmVudCdzIHJlZmVyZW5jZSB0byBhIG1lc3NhZ2UgZGVzdGluYXRpb24KLWFzc29jaWF0ZWQgd2l0aCBhIHJlc291cmNlIGluIERlcGxveW1lbnQgQ29tcG9uZW50J3MKLWVudmlyb25tZW50LiBJdCBjb25zaXN0cyBvZjoKLQotICAgICAgICAtIGFuIG9wdGlvbmFsIGRlc2NyaXB0aW9uCi0gICAgICAgIC0gdGhlIG1lc3NhZ2UgZGVzdGluYXRpb24gcmVmZXJlbmNlIG5hbWUKLSAgICAgICAgLSB0aGUgbWVzc2FnZSBkZXN0aW5hdGlvbiB0eXBlCi0gICAgICAgIC0gYSBzcGVjaWZpY2F0aW9uIGFzIHRvIHdoZXRoZXIgdGhlCi0gICAgICAgICAgZGVzdGluYXRpb24gaXMgdXNlZCBmb3IKLSAgICAgICAgICBjb25zdW1pbmcgb3IgcHJvZHVjaW5nIG1lc3NhZ2VzLCBvciBib3RoCi0gICAgICAgIC0gYSBsaW5rIHRvIHRoZSBtZXNzYWdlIGRlc3RpbmF0aW9uCi0KLUV4YW1wbGVzOgotCi08bWVzc2FnZS1kZXN0aW5hdGlvbi1yZWY+Ci0gICAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lPmptcy9TdG9ja1F1ZXVlCi0gICAgICAgIDwvbWVzc2FnZS1kZXN0aW5hdGlvbi1yZWYtbmFtZT4KLSAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tdHlwZT5qYXZheC5qbXMuUXVldWUKLSAgICAgICAgPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+Ci0gICAgICAgIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXVzYWdlPkNvbnN1bWVzCi0gICAgICAgIDwvbWVzc2FnZS1kZXN0aW5hdGlvbi11c2FnZT4KLSAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tbGluaz5Db3Jwb3JhdGVTdG9ja3MKLSAgICAgICAgPC9tZXNzYWdlLWRlc3RpbmF0aW9uLWxpbms+Ci08L21lc3NhZ2UtZGVzdGluYXRpb24tcmVmPgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpqbmRpLW5hbWVUeXBlIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWUgZWxlbWVudCBzcGVjaWZpZXMKLSAgICAgICAgdGhlIG5hbWUgb2YgYSBtZXNzYWdlIGRlc3RpbmF0aW9uIHJlZmVyZW5jZTsgaXRzCi0gICAgICAgIHZhbHVlIGlzIHRoZSBlbnZpcm9ubWVudCBlbnRyeSBuYW1lIHVzZWQgaW4KLSAgICAgICAgRGVwbG95bWVudCBDb21wb25lbnQgY29kZS4gIFRoZSBuYW1lIGlzIGEgSk5ESSBuYW1lCi0gICAgICAgIHJlbGF0aXZlIHRvIHRoZSBqYXZhOmNvbXAvZW52IGNvbnRleHQgYW5kIG11c3QgYmUKLSAgICAgICAgdW5pcXVlIHdpdGhpbiBhbiBlamItamFyIChmb3IgZW50ZXJwcmlzZSBiZWFucykgb3IgYQotICAgICAgICBEZXBsb3ltZW50IEZpbGUgKGZvciBvdGhlcnMpLgotICAgICAgICAlJSUKLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibWVzc2FnZS1kZXN0aW5hdGlvbi10eXBlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTptZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGVUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJtZXNzYWdlLWRlc3RpbmF0aW9uLXVzYWdlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTptZXNzYWdlLWRlc3RpbmF0aW9uLXVzYWdlVHlwZSIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibWVzc2FnZS1kZXN0aW5hdGlvbi1saW5rIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTptZXNzYWdlLWRlc3RpbmF0aW9uLWxpbmtUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJtZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGVUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIG1lc3NhZ2UtZGVzdGluYXRpb24tdHlwZVR5cGUgc3BlY2lmaWVzIHRoZSB0eXBlIG9mCi10aGUgZGVzdGluYXRpb24uIFRoZSB0eXBlIGlzIHNwZWNpZmllZCBieSB0aGUgSmF2YSBpbnRlcmZhY2UKLWV4cGVjdGVkIHRvIGJlIGltcGxlbWVudGVkIGJ5IHRoZSBkZXN0aW5hdGlvbi4KLQotRXhhbXBsZToKLQotIDxtZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+amF2YXguam1zLlF1ZXVlCi0gPC9tZXNzYWdlLWRlc3RpbmF0aW9uLXR5cGU+Ci0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOmZ1bGx5LXF1YWxpZmllZC1jbGFzc1R5cGUiLz4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0ibWVzc2FnZS1kZXN0aW5hdGlvbi11c2FnZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgbWVzc2FnZS1kZXN0aW5hdGlvbi11c2FnZVR5cGUgc3BlY2lmaWVzIHRoZSB1c2Ugb2YgdGhlCi1tZXNzYWdlIGRlc3RpbmF0aW9uIGluZGljYXRlZCBieSB0aGUgcmVmZXJlbmNlLiAgVGhlIHZhbHVlCi1pbmRpY2F0ZXMgd2hldGhlciBtZXNzYWdlcyBhcmUgY29uc3VtZWQgZnJvbSB0aGUgbWVzc2FnZQotZGVzdGluYXRpb24sIHByb2R1Y2VkIGZvciB0aGUgZGVzdGluYXRpb24sIG9yIGJvdGguICBUaGUKLUFzc2VtYmxlciBtYWtlcyB1c2Ugb2YgdGhpcyBpbmZvcm1hdGlvbiBpbiBsaW5raW5nIHByb2R1Y2Vycwotb2YgYSBkZXN0aW5hdGlvbiB3aXRoIGl0cyBjb25zdW1lcnMuCi0KLVRoZSB2YWx1ZSBvZiB0aGUgbWVzc2FnZS1kZXN0aW5hdGlvbi11c2FnZSBlbGVtZW50IG11c3QgYmUKLW9uZSBvZiB0aGUgZm9sbG93aW5nOgotICAgIENvbnN1bWVzCi0gICAgUHJvZHVjZXMKLSAgICBDb25zdW1lc1Byb2R1Y2VzCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnN1bWVzIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlByb2R1Y2VzIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnN1bWVzUHJvZHVjZXMiLz4KLSAgICA8L3hzZDpyZXN0cmljdGlvbj4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9Im1lc3NhZ2UtZGVzdGluYXRpb25UeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIG1lc3NhZ2UtZGVzdGluYXRpb25UeXBlIHNwZWNpZmllcyBhIG1lc3NhZ2UKLWRlc3RpbmF0aW9uLiBUaGUgbG9naWNhbCBkZXN0aW5hdGlvbiBkZXNjcmliZWQgYnkgdGhpcwotZWxlbWVudCBpcyBtYXBwZWQgdG8gYSBwaHlzaWNhbCBkZXN0aW5hdGlvbiBieSB0aGUgRGVwbG95ZXIuCi0KLVRoZSBtZXNzYWdlIGRlc3RpbmF0aW9uIGVsZW1lbnQgY29udGFpbnM6Ci0KLSAgICAgICAgLSBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbgotICAgICAgICAtIGFuIG9wdGlvbmFsIGRpc3BsYXktbmFtZQotICAgICAgICAtIGFuIG9wdGlvbmFsIGljb24KLSAgICAgICAgLSBhIG1lc3NhZ2UgZGVzdGluYXRpb24gbmFtZSB3aGljaCBtdXN0IGJlIHVuaXF1ZQotICAgICAgICAgIGFtb25nIG1lc3NhZ2UgZGVzdGluYXRpb24gbmFtZXMgd2l0aGluIHRoZSBzYW1lCi0gICAgICAgICAgRGVwbG95bWVudCBGaWxlLgotCi1FeGFtcGxlOgotCi08bWVzc2FnZS1kZXN0aW5hdGlvbj4KLSAgICAgICAgPG1lc3NhZ2UtZGVzdGluYXRpb24tbmFtZT5Db3Jwb3JhdGVTdG9ja3MKLSAgICAgICAgPC9tZXNzYWdlLWRlc3RpbmF0aW9uLW5hbWU+Ci08L21lc3NhZ2UtZGVzdGluYXRpb24+Ci0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRpc3BsYXktbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGlzcGxheS1uYW1lVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJpY29uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTppY29uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJtZXNzYWdlLWRlc3RpbmF0aW9uLW5hbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBtZXNzYWdlLWRlc3RpbmF0aW9uLW5hbWUgZWxlbWVudCBzcGVjaWZpZXMgYQotICAgICAgICBuYW1lIGZvciBhIG1lc3NhZ2UgZGVzdGluYXRpb24uICBUaGlzIG5hbWUgbXVzdCBiZQotICAgICAgICB1bmlxdWUgYW1vbmcgdGhlIG5hbWVzIG9mIG1lc3NhZ2UgZGVzdGluYXRpb25zCi0gICAgICAgIHdpdGhpbiB0aGUgRGVwbG95bWVudCBGaWxlLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0icGFyYW0tdmFsdWVUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhpcyB0eXBlIGlzIGEgZ2VuZXJhbCB0eXBlIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGVjbGFyZQotcGFyYW1ldGVyL3ZhbHVlIGxpc3RzLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InBhcmFtLW5hbWUiCi0gICAgICAgICAgICAgdHlwZT0iajJlZTpzdHJpbmciPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgcGFyYW0tbmFtZSBlbGVtZW50IGNvbnRhaW5zIHRoZSBuYW1lIG9mIGEKLSAgICAgICAgcGFyYW1ldGVyLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InBhcmFtLXZhbHVlIgotICAgICAgICAgICAgIHR5cGU9InhzZDpzdHJpbmciPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgcGFyYW0tdmFsdWUgZWxlbWVudCBjb250YWlucyB0aGUgdmFsdWUgb2YgYQotICAgICAgICBwYXJhbWV0ZXIuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9InBhdGhUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGVsZW1lbnRzIHRoYXQgdXNlIHRoaXMgdHlwZSBkZXNpZ25hdGUgZWl0aGVyIGEgcmVsYXRpdmUKLXBhdGggb3IgYW4gYWJzb2x1dGUgcGF0aCBzdGFydGluZyB3aXRoIGEgIi8iLgotCi1JbiBlbGVtZW50cyB0aGF0IHNwZWNpZnkgYSBwYXRobmFtZSB0byBhIGZpbGUgd2l0aGluIHRoZQotc2FtZSBEZXBsb3ltZW50IEZpbGUsIHJlbGF0aXZlIGZpbGVuYW1lcyAoaS5lLiwgdGhvc2Ugbm90Ci1zdGFydGluZyB3aXRoICIvIikgYXJlIGNvbnNpZGVyZWQgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YKLXRoZSBEZXBsb3ltZW50IEZpbGUncyBuYW1lc3BhY2UuICBBYnNvbHV0ZSBmaWxlbmFtZXMgKGkuZS4sCi10aG9zZSBzdGFydGluZyB3aXRoICIvIikgYWxzbyBzcGVjaWZ5IG5hbWVzIGluIHRoZSByb290IG9mCi10aGUgRGVwbG95bWVudCBGaWxlJ3MgbmFtZXNwYWNlLiAgSW4gZ2VuZXJhbCwgcmVsYXRpdmUgbmFtZXMKLWFyZSBwcmVmZXJyZWQuICBUaGUgZXhjZXB0aW9uIGlzIC53YXIgZmlsZXMgd2hlcmUgYWJzb2x1dGUKLW5hbWVzIGFyZSBwcmVmZXJyZWQgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIFNlcnZsZXQgQVBJLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpzdHJpbmciLz4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0icmVtb3RlVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSByZW1vdGUgZWxlbWVudCBjb250YWlucyB0aGUgZnVsbHktcXVhbGlmaWVkIG5hbWUKLW9mIHRoZSBlbnRlcnByaXNlIGJlYW4ncyByZW1vdGUgaW50ZXJmYWNlLgotCi1FeGFtcGxlOgotCi0gICAgPHJlbW90ZT5jb20ud29tYmF0LmVtcGwuRW1wbG95ZWVTZXJ2aWNlPC9yZW1vdGU+Ci0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOmZ1bGx5LXF1YWxpZmllZC1jbGFzc1R5cGUiLz4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0icmVzLWF1dGhUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIHJlcy1hdXRoVHlwZSBzcGVjaWZpZXMgd2hldGhlciB0aGUgRGVwbG95bWVudCBDb21wb25lbnQKLWNvZGUgc2lnbnMgb24gcHJvZ3JhbW1hdGljYWxseSB0byB0aGUgcmVzb3VyY2UgbWFuYWdlciwgb3IKLXdoZXRoZXIgdGhlIENvbnRhaW5lciB3aWxsIHNpZ24gb24gdG8gdGhlIHJlc291cmNlIG1hbmFnZXIKLW9uIGJlaGFsZiBvZiB0aGUgRGVwbG95bWVudCBDb21wb25lbnQuIEluIHRoZSBsYXR0ZXIgY2FzZSwKLXRoZSBDb250YWluZXIgdXNlcyBpbmZvcm1hdGlvbiB0aGF0IGlzIHN1cHBsaWVkIGJ5IHRoZQotRGVwbG95ZXIuCi0KLVRoZSB2YWx1ZSBtdXN0IGJlIG9uZSBvZiB0aGUgdHdvIGZvbGxvd2luZzoKLQotICAgIEFwcGxpY2F0aW9uCi0gICAgQ29udGFpbmVyCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkFwcGxpY2F0aW9uIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkNvbnRhaW5lciIvPgotICAgIDwveHNkOnJlc3RyaWN0aW9uPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJyZXMtc2hhcmluZy1zY29wZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgcmVzLXNoYXJpbmctc2NvcGUgdHlwZSBzcGVjaWZpZXMgd2hldGhlciBjb25uZWN0aW9ucwotb2J0YWluZWQgdGhyb3VnaCB0aGUgZ2l2ZW4gcmVzb3VyY2UgbWFuYWdlciBjb25uZWN0aW9uCi1mYWN0b3J5IHJlZmVyZW5jZSBjYW4gYmUgc2hhcmVkLiBUaGUgdmFsdWUsIGlmIHNwZWNpZmllZCwKLW11c3QgYmUgb25lIG9mIHRoZSB0d28gZm9sbG93aW5nOgotCi0gICAgU2hhcmVhYmxlCi0gICAgVW5zaGFyZWFibGUKLQotVGhlIGRlZmF1bHQgdmFsdWUgaXMgU2hhcmVhYmxlLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpzdHJpbmciPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJTaGFyZWFibGUiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iVW5zaGFyZWFibGUiLz4KLSAgICA8L3hzZDpyZXN0cmljdGlvbj4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9InJlc291cmNlLWVudi1yZWZUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIHJlc291cmNlLWVudi1yZWZUeXBlIGlzIHVzZWQgdG8gZGVmaW5lCi1yZXNvdXJjZS1lbnYtdHlwZSBlbGVtZW50cy4gIEl0IGNvbnRhaW5zIGEgZGVjbGFyYXRpb24gb2YgYQotRGVwbG95bWVudCBDb21wb25lbnQncyByZWZlcmVuY2UgdG8gYW4gYWRtaW5pc3RlcmVkIG9iamVjdAotYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UgaW4gdGhlIERlcGxveW1lbnQgQ29tcG9uZW50J3MKLWVudmlyb25tZW50LiAgSXQgY29uc2lzdHMgb2YgYW4gb3B0aW9uYWwgZGVzY3JpcHRpb24sIHRoZQotcmVzb3VyY2UgZW52aXJvbm1lbnQgcmVmZXJlbmNlIG5hbWUsIGFuZCBhbiBpbmRpY2F0aW9uIG9mCi10aGUgcmVzb3VyY2UgZW52aXJvbm1lbnQgcmVmZXJlbmNlIHR5cGUgZXhwZWN0ZWQgYnkgdGhlCi1EZXBsb3ltZW50IENvbXBvbmVudCBjb2RlLgotCi1FeGFtcGxlOgotCi08cmVzb3VyY2UtZW52LXJlZj4KLSAgICA8cmVzb3VyY2UtZW52LXJlZi1uYW1lPmptcy9TdG9ja1F1ZXVlCi0gICAgPC9yZXNvdXJjZS1lbnYtcmVmLW5hbWU+Ci0gICAgPHJlc291cmNlLWVudi1yZWYtdHlwZT5qYXZheC5qbXMuUXVldWUKLSAgICA8L3Jlc291cmNlLWVudi1yZWYtdHlwZT4KLTwvcmVzb3VyY2UtZW52LXJlZj4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyZXNvdXJjZS1lbnYtcmVmLW5hbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmpuZGktbmFtZVR5cGUiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgcmVzb3VyY2UtZW52LXJlZi1uYW1lIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBuYW1lCi0gICAgICAgIG9mIGEgcmVzb3VyY2UgZW52aXJvbm1lbnQgcmVmZXJlbmNlOyBpdHMgdmFsdWUgaXMKLSAgICAgICAgdGhlIGVudmlyb25tZW50IGVudHJ5IG5hbWUgdXNlZCBpbgotICAgICAgICB0aGUgRGVwbG95bWVudCBDb21wb25lbnQgY29kZS4gIFRoZSBuYW1lIGlzIGEgSk5ESQotICAgICAgICBuYW1lIHJlbGF0aXZlIHRvIHRoZSBqYXZhOmNvbXAvZW52IGNvbnRleHQgYW5kIG11c3QKLSAgICAgICAgYmUgdW5pcXVlIHdpdGhpbiBhIERlcGxveW1lbnQgQ29tcG9uZW50LgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJlc291cmNlLWVudi1yZWYtdHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZnVsbHktcXVhbGlmaWVkLWNsYXNzVHlwZSI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSByZXNvdXJjZS1lbnYtcmVmLXR5cGUgZWxlbWVudCBzcGVjaWZpZXMgdGhlIHR5cGUKLSAgICAgICAgb2YgYSByZXNvdXJjZSBlbnZpcm9ubWVudCByZWZlcmVuY2UuICBJdCBpcyB0aGUKLSAgICAgICAgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgYSBKYXZhIGxhbmd1YWdlIGNsYXNzIG9yCi0gICAgICAgIGludGVyZmFjZS4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotCi0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0icmVzb3VyY2UtcmVmVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSByZXNvdXJjZS1yZWZUeXBlIGNvbnRhaW5zIGEgZGVjbGFyYXRpb24gb2YgYQotRGVwbG95bWVudCBDb21wb25lbnQncyByZWZlcmVuY2UgdG8gYW4gZXh0ZXJuYWwgcmVzb3VyY2UuIEl0Ci1jb25zaXN0cyBvZiBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbiwgdGhlIHJlc291cmNlIG1hbmFnZXIKLWNvbm5lY3Rpb24gZmFjdG9yeSByZWZlcmVuY2UgbmFtZSwgdGhlIGluZGljYXRpb24gb2YgdGhlCi1yZXNvdXJjZSBtYW5hZ2VyIGNvbm5lY3Rpb24gZmFjdG9yeSB0eXBlIGV4cGVjdGVkIGJ5IHRoZQotRGVwbG95bWVudCBDb21wb25lbnQgY29kZSwgdGhlIHR5cGUgb2YgYXV0aGVudGljYXRpb24KLShBcHBsaWNhdGlvbiBvciBDb250YWluZXIpLCBhbmQgYW4gb3B0aW9uYWwgc3BlY2lmaWNhdGlvbiBvZgotdGhlIHNoYXJlYWJpbGl0eSBvZiBjb25uZWN0aW9ucyBvYnRhaW5lZCBmcm9tIHRoZSByZXNvdXJjZQotKFNoYXJlYWJsZSBvciBVbnNoYXJlYWJsZSkuCi0KLUV4YW1wbGU6Ci0KLTxyZXNvdXJjZS1yZWY+Ci0gICAgPHJlcy1yZWYtbmFtZT5qZGJjL0VtcGxveWVlQXBwREI8L3Jlcy1yZWYtbmFtZT4KLSAgICA8cmVzLXR5cGU+amF2YXguc3FsLkRhdGFTb3VyY2U8L3Jlcy10eXBlPgotICAgIDxyZXMtYXV0aD5Db250YWluZXI8L3Jlcy1hdXRoPgotICAgIDxyZXMtc2hhcmluZy1zY29wZT5TaGFyZWFibGU8L3Jlcy1zaGFyaW5nLXNjb3BlPgotPC9yZXNvdXJjZS1yZWY+Ci0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXNjcmlwdGlvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icmVzLXJlZi1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpqbmRpLW5hbWVUeXBlIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIHJlcy1yZWYtbmFtZSBlbGVtZW50IHNwZWNpZmllcyB0aGUgbmFtZSBvZiBhCi0gICAgICAgIHJlc291cmNlIG1hbmFnZXIgY29ubmVjdGlvbiBmYWN0b3J5IHJlZmVyZW5jZS4KLSAgICAgICAgVGhlIG5hbWUgaXMgYSBKTkRJIG5hbWUgcmVsYXRpdmUgdG8gdGhlCi0gICAgICAgIGphdmE6Y29tcC9lbnYgY29udGV4dC4KLSAgICAgICAgVGhlIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGEgRGVwbG95bWVudCBGaWxlLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJlcy10eXBlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpmdWxseS1xdWFsaWZpZWQtY2xhc3NUeXBlIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIHJlcy10eXBlIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIHRoZSBkYXRhCi0gICAgICAgIHNvdXJjZS4gVGhlIHR5cGUgaXMgc3BlY2lmaWVkIGJ5IHRoZSBmdWxseSBxdWFsaWZpZWQKLSAgICAgICAgSmF2YSBsYW5ndWFnZSBjbGFzcyBvciBpbnRlcmZhY2UKLSAgICAgICAgZXhwZWN0ZWQgdG8gYmUgaW1wbGVtZW50ZWQgYnkgdGhlIGRhdGEgc291cmNlLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJlcy1hdXRoIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpyZXMtYXV0aFR5cGUiLz4KLQotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icmVzLXNoYXJpbmctc2NvcGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnJlcy1zaGFyaW5nLXNjb3BlVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0icm9sZS1uYW1lVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSByb2xlLW5hbWVUeXBlIGRlc2lnbmF0ZXMgdGhlIG5hbWUgb2YgYSBzZWN1cml0eSByb2xlLgotCi1UaGUgbmFtZSBtdXN0IGNvbmZvcm0gdG8gdGhlIGxleGljYWwgcnVsZXMgZm9yIGFuIE5NVE9LRU4uCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Tk1UT0tFTiIvPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0icnVuLWFzVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBydW4tYXNUeXBlIHNwZWNpZmllcyB0aGUgcnVuLWFzIGlkZW50aXR5IHRvIGJlCi11c2VkIGZvciB0aGUgZXhlY3V0aW9uIG9mIGEgY29tcG9uZW50LiBJdCBjb250YWlucyBhbgotb3B0aW9uYWwgZGVzY3JpcHRpb24sIGFuZCB0aGUgbmFtZSBvZiBhIHNlY3VyaXR5IHJvbGUuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXNjcmlwdGlvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icm9sZS1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpyb2xlLW5hbWVUeXBlIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ic2VjdXJpdHktcm9sZS1yZWZUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIHNlY3VyaXR5LXJvbGUtcmVmVHlwZSBjb250YWlucyB0aGUgZGVjbGFyYXRpb24gb2YgYQotc2VjdXJpdHkgcm9sZSByZWZlcmVuY2UgaW4gYSBjb21wb25lbnQncyBvciBhCi1EZXBsb3ltZW50IENvbXBvbmVudCdzIGNvZGUuIFRoZSBkZWNsYXJhdGlvbiBjb25zaXN0cyBvZiBhbgotb3B0aW9uYWwgZGVzY3JpcHRpb24sIHRoZSBzZWN1cml0eSByb2xlIG5hbWUgdXNlZCBpbiB0aGUKLWNvZGUsIGFuZCBhbiBvcHRpb25hbCBsaW5rIHRvIGEgc2VjdXJpdHkgcm9sZS4gSWYgdGhlCi1zZWN1cml0eSByb2xlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBEZXBsb3llciBtdXN0IGNob29zZSBhbgotYXBwcm9wcmlhdGUgc2VjdXJpdHkgcm9sZS4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyb2xlLW5hbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnJvbGUtbmFtZVR5cGUiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgdmFsdWUgb2YgdGhlIHJvbGUtbmFtZSBlbGVtZW50IG11c3QgYmUgdGhlIFN0cmluZyB1c2VkCi0gICAgICAgIGFzIHRoZSBwYXJhbWV0ZXIgdG8gdGhlCi0gICAgICAgIEVKQkNvbnRleHQuaXNDYWxsZXJJblJvbGUoU3RyaW5nIHJvbGVOYW1lKSBtZXRob2Qgb3IgdGhlCi0gICAgICAgIEh0dHBTZXJ2bGV0UmVxdWVzdC5pc1VzZXJJblJvbGUoU3RyaW5nIHJvbGUpIG1ldGhvZC4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotCi0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyb2xlLWxpbmsiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnJvbGUtbmFtZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgcm9sZS1saW5rIGVsZW1lbnQgaXMgYSByZWZlcmVuY2UgdG8gYSBkZWZpbmVkCi0gICAgICAgIHNlY3VyaXR5IHJvbGUuIFRoZSByb2xlLWxpbmsgZWxlbWVudCBtdXN0IGNvbnRhaW4KLSAgICAgICAgdGhlIG5hbWUgb2Ygb25lIG9mIHRoZSBzZWN1cml0eSByb2xlcyBkZWZpbmVkIGluIHRoZQotICAgICAgICBzZWN1cml0eS1yb2xlIGVsZW1lbnRzLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ic2VjdXJpdHktcm9sZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgc2VjdXJpdHktcm9sZVR5cGUgY29udGFpbnMgdGhlIGRlZmluaXRpb24gb2YgYSBzZWN1cml0eQotcm9sZS4gVGhlIGRlZmluaXRpb24gY29uc2lzdHMgb2YgYW4gb3B0aW9uYWwgZGVzY3JpcHRpb24gb2YgdGhlCi1zZWN1cml0eSByb2xlLCBhbmQgdGhlIHNlY3VyaXR5IHJvbGUgbmFtZS4KLQotRXhhbXBsZToKLQotICAgIDxzZWN1cml0eS1yb2xlPgotICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgVGhpcyByb2xlIGluY2x1ZGVzIGFsbCBlbXBsb3llZXMgd2hvIGFyZSBhdXRob3JpemVkCi0gICAgICAgIHRvIGFjY2VzcyB0aGUgZW1wbG95ZWUgc2VydmljZSBhcHBsaWNhdGlvbi4KLSAgICA8L2Rlc2NyaXB0aW9uPgotICAgIDxyb2xlLW5hbWU+ZW1wbG95ZWU8L3JvbGUtbmFtZT4KLSAgICA8L3NlY3VyaXR5LXJvbGU+Ci08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJvbGUtbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cm9sZS1uYW1lVHlwZSIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0ic3RyaW5nIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhpcyBpcyBhIHNwZWNpYWwgc3RyaW5nIGRhdGF0eXBlIHRoYXQgaXMgZGVmaW5lZCBieSBKMkVFIGFzCi1hIGJhc2UgdHlwZSBmb3IgZGVmaW5pbmcgY29sbGFwc2VkIHN0cmluZ3MuIFdoZW4gc2NoZW1hcwotcmVxdWlyZSB0cmFpbGluZy9sZWFkaW5nIHNwYWNlIGVsaW1pbmF0aW9uIGFzIHdlbGwgYXMKLWNvbGxhcHNpbmcgdGhlIGV4aXN0aW5nIHdoaXRlc3BhY2UsIHRoaXMgYmFzZSB0eXBlIG1heSBiZQotdXNlZC4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotICAgICAgICA8eHNkOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIi8+Ci0gICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9InRydWUtZmFsc2VUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhpcyBzaW1wbGUgdHlwZSBkZXNpZ25hdGVzIGEgYm9vbGVhbiB3aXRoIG9ubHkgdHdvCi1wZXJtaXNzaWJsZSB2YWx1ZXMKLQotLSB0cnVlCi0tIGZhbHNlCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6Ym9vbGVhbiI+Ci0gICAgICAgIDx4c2Q6cGF0dGVybiB2YWx1ZT0iKHRydWV8ZmFsc2UpIi8+Ci0gICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJ1cmwtcGF0dGVyblR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgdXJsLXBhdHRlcm5UeXBlIGNvbnRhaW5zIHRoZSB1cmwgcGF0dGVybiBvZiB0aGUgbWFwcGluZy4gSXQgbXVzdAotZm9sbG93IHRoZSBydWxlcyBzcGVjaWZpZWQgaW4gU2VjdGlvbiAxMS4yIG9mIHRoZSBTZXJ2bGV0IEFQSQotU3BlY2lmaWNhdGlvbi4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImoyZWU6c3RyaW5nIi8+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9Indhci1wYXRoVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBlbGVtZW50cyB0aGF0IHVzZSB0aGlzIHR5cGUgZGVzaWduYXRlIGEgcGF0aCBzdGFydGluZwotd2l0aCBhICIvIiBhbmQgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YgYSBXQVIKLWZpbGUuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6cGF0dGVybiB2YWx1ZT0iLy4qIi8+Ci0gICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwveHNkOnNjaGVtYT4KLQpkaWZmIC0tZ2l0IGEvdjIveGtpdC9zY2hlbWFzL2oyZWUvanNwXzJfMC54c2QgYi92Mi94a2l0L3NjaGVtYXMvajJlZS9qc3BfMl8wLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFkNTY2OC4uMDAwMDAwMAotLS0gYS92Mi94a2l0L3NjaGVtYXMvajJlZS9qc3BfMl8wLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMwNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiCi0gICAgIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiCi0gICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIgotICAgICBhdHRyaWJ1dGVGb3JtRGVmYXVsdD0idW5xdWFsaWZpZWQiCi0gICAgIHZlcnNpb249IjIuMCI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci1AKCMpanNwXzJfMC54c2RzCTEuMTAgMDgvMjAvMDIKLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLUNvcHlyaWdodCAyMDAyIFN1biBNaWNyb3N5c3RlbXMsIEluYy4sIDkwMSBTYW4gQW50b25pbwotUm9hZCwgUGFsbyBBbHRvLCBDYWxpZm9ybmlhIDk0MzAzLCBVLlMuQS4gQWxsIHJpZ2h0cwotcmVzZXJ2ZWQuCi0KLVN1biBNaWNyb3N5c3RlbXMsIEluYy4gaGFzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMKLXJlbGF0aW5nIHRvIHRlY2hub2xvZ3kgZGVzY3JpYmVkIGluIHRoaXMgZG9jdW1lbnQuIEluCi1wYXJ0aWN1bGFyLCBhbmQgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGVzZSBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBtYXkgaW5jbHVkZSBvbmUgb3IgbW9yZSBvZiB0aGUgVS5TLiBwYXRlbnRzCi1saXN0ZWQgYXQgaHR0cDovL3d3dy5zdW4uY29tL3BhdGVudHMgYW5kIG9uZSBvciBtb3JlCi1hZGRpdGlvbmFsIHBhdGVudHMgb3IgcGVuZGluZyBwYXRlbnQgYXBwbGljYXRpb25zIGluIHRoZQotVS5TLiBhbmQgb3RoZXIgY291bnRyaWVzLgotCi1UaGlzIGRvY3VtZW50IGFuZCB0aGUgdGVjaG5vbG9neSB3aGljaCBpdCBkZXNjcmliZXMgYXJlCi1kaXN0cmlidXRlZCB1bmRlciBsaWNlbnNlcyByZXN0cmljdGluZyB0aGVpciB1c2UsIGNvcHlpbmcsCi1kaXN0cmlidXRpb24sIGFuZCBkZWNvbXBpbGF0aW9uLiBObyBwYXJ0IG9mIHRoaXMgZG9jdW1lbnQKLW1heSBiZSByZXByb2R1Y2VkIGluIGFueSBmb3JtIGJ5IGFueSBtZWFucyB3aXRob3V0IHByaW9yCi13cml0dGVuIGF1dGhvcml6YXRpb24gb2YgU3VuIGFuZCBpdHMgbGljZW5zb3JzLCBpZiBhbnkuCi0KLVRoaXJkLXBhcnR5IHNvZnR3YXJlLCBpbmNsdWRpbmcgZm9udCB0ZWNobm9sb2d5LCBpcwotY29weXJpZ2h0ZWQgYW5kIGxpY2Vuc2VkIGZyb20gU3VuIHN1cHBsaWVycy4KLQotU3VuLCBTdW4gTWljcm9zeXN0ZW1zLCB0aGUgU3VuIGxvZ28sIFNvbGFyaXMsIEphdmEsIEoyRUUsCi1KYXZhU2VydmVyIFBhZ2VzLCBFbnRlcnByaXNlIEphdmFCZWFucyBhbmQgdGhlIEphdmEgQ29mZmVlCi1DdXAgbG9nbyBhcmUgdHJhZGVtYXJrcyBvciByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YgU3VuCi1NaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFUuUy4gYW5kIG90aGVyIGNvdW50cmllcy4KLQotRmVkZXJhbCBBY3F1aXNpdGlvbnM6IENvbW1lcmNpYWwgU29mdHdhcmUgLSBHb3Zlcm5tZW50IFVzZXJzCi1TdWJqZWN0IHRvIFN0YW5kYXJkIExpY2Vuc2UgVGVybXMgYW5kIENvbmRpdGlvbnMuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoaXMgaXMgdGhlIFhNTCBTY2hlbWEgZm9yIHRoZSBKU1AgMi4wIGRlcGxveW1lbnQgZGVzY3JpcHRvcgotdHlwZXMuICBUaGUgSlNQIDIuMCBzY2hlbWEgY29udGFpbnMgYWxsIHRoZSBzcGVjaWFsCi1zdHJ1Y3R1cmVzIGFuZCBkYXRhdHlwZXMgdGhhdCBhcmUgbmVjZXNzYXJ5IHRvIHVzZSBKU1AgZmlsZXMKLWZyb20gYSB3ZWIgYXBwbGljYXRpb24uCi0KLVRoZSBjb250ZW50cyBvZiB0aGlzIHNjaGVtYSBpcyB1c2VkIGJ5IHRoZSB3ZWItYXBwXzJfNC54c2QKLWZpbGUgdG8gZGVmaW5lIEpTUCBzcGVjaWZpYyBjb250ZW50LgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgZm9sbG93aW5nIGNvbnZlbnRpb25zIGFwcGx5IHRvIGFsbCBKMkVFCi1kZXBsb3ltZW50IGRlc2NyaXB0b3IgZWxlbWVudHMgdW5sZXNzIGluZGljYXRlZCBvdGhlcndpc2UuCi0KLS0gSW4gZWxlbWVudHMgdGhhdCBzcGVjaWZ5IGEgcGF0aG5hbWUgdG8gYSBmaWxlIHdpdGhpbiB0aGUKLSAgc2FtZSBKQVIgZmlsZSwgcmVsYXRpdmUgZmlsZW5hbWVzIChpLmUuLCB0aG9zZSBub3QKLSAgc3RhcnRpbmcgd2l0aCAiLyIpIGFyZSBjb25zaWRlcmVkIHJlbGF0aXZlIHRvIHRoZSByb290IG9mCi0gIHRoZSBKQVIgZmlsZSdzIG5hbWVzcGFjZS4gIEFic29sdXRlIGZpbGVuYW1lcyAoaS5lLiwgdGhvc2UKLSAgc3RhcnRpbmcgd2l0aCAiLyIpIGFsc28gc3BlY2lmeSBuYW1lcyBpbiB0aGUgcm9vdCBvZiB0aGUKLSAgSkFSIGZpbGUncyBuYW1lc3BhY2UuICBJbiBnZW5lcmFsLCByZWxhdGl2ZSBuYW1lcyBhcmUKLSAgcHJlZmVycmVkLiAgVGhlIGV4Y2VwdGlvbiBpcyAud2FyIGZpbGVzIHdoZXJlIGFic29sdXRlCi0gIG5hbWVzIGFyZSBwcmVmZXJyZWQgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIFNlcnZsZXQgQVBJLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJqMmVlXzFfNC54c2QiLz4KLQotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ianNwLWNvbmZpZ1R5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUganNwLWNvbmZpZ1R5cGUgaXMgdXNlZCB0byBwcm92aWRlIGdsb2JhbCBjb25maWd1cmF0aW9uCi1pbmZvcm1hdGlvbiBmb3IgdGhlIEpTUCBmaWxlcyBpbiBhIHdlYiBhcHBsaWNhdGlvbi4gSXQgaGFzCi10d28gc3ViZWxlbWVudHMsIHRhZ2xpYiBhbmQganNwLXByb3BlcnR5LWdyb3VwLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJ0YWdsaWIiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnRhZ2xpYlR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ianNwLXByb3BlcnR5LWdyb3VwIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpqc3AtcHJvcGVydHktZ3JvdXBUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9ImpzcC1maWxlVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBqc3AtZmlsZSBlbGVtZW50IGNvbnRhaW5zIHRoZSBmdWxsIHBhdGggdG8gYSBKU1AgZmlsZQotd2l0aGluIHRoZSB3ZWIgYXBwbGljYXRpb24gYmVnaW5uaW5nIHdpdGggYSBgLycuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnBhdGhUeXBlIi8+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJqc3AtcHJvcGVydHktZ3JvdXBUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGpzcC1wcm9wZXJ0eS1ncm91cFR5cGUgaXMgdXNlZCB0byBncm91cCBhIG51bWJlciBvZgotZmlsZXMgc28gdGhleSBjYW4gYmUgZ2l2ZW4gZ2xvYmFsIHByb3BlcnR5IGluZm9ybWF0aW9uLgotQWxsIGZpbGVzIHNvIGRlc2NyaWJlZCBhcmUgZGVlbWVkIHRvIGJlIEpTUCBmaWxlcy4gIFRoZQotZm9sbG93aW5nIGFkZGl0aW9uYWwgcHJvcGVydGllcyBjYW4gYmUgZGVzY3JpYmVkOgotCi0gICAgLSBDb250cm9sIGVuYWJsaW5nIG9mIEVMIGV2YWx1YXRpb24uCi0gICAgLSBDb250cm9sIGVuYWJsaW5nIG9mIFNjcmlwdGluZyBlbGVtZW50cy4KLSAgICAtIEluZGljYXRlIHBhZ2VFbmNvZGluZyBpbmZvcm1hdGlvbi4KLSAgICAtIEluZGljYXRpbmcgdGhhdCBhIHJlc291cmNlIGlzIGEgSlNQIGRvY3VtZW50Ci0gICAgLSBQcmVsdWRlIGFuZCBDb2RhIGF1dG9tYXRpYyBpbmNsdWRlcy4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLQkJICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLQkJICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkaXNwbGF5LW5hbWUiCi0JCSAgICAgdHlwZT0iajJlZTpkaXNwbGF5LW5hbWVUeXBlIgotCQkgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InVybC1wYXR0ZXJuIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTp1cmwtcGF0dGVyblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZWwtZW5hYmxlZCIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6dHJ1ZS1mYWxzZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBDYW4gYmUgdXNlZCB0byBlYXNpbHkgc2V0IHRoZSBpc0VMRW5hYmxlZAotICAgICAgICBwcm9wZXJ0eSBvZiBhIGdyb3VwIG9mIEpTUCBwYWdlcy4gIEJ5IGRlZmF1bHQsIHRoZQotICAgICAgICBFTCBldmFsdWF0aW9uIGlzIGVuYWJsZWQgZm9yIFdlYiBBcHBsaWNhdGlvbnMgdXNpbmcKLSAgICAgICAgYSBTZXJ2bGV0IDIuNCBvciBncmVhdGVyIHdlYi54bWwuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InBhZ2UtZW5jb2RpbmciCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnN0cmluZyIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSB2YWxpZCB2YWx1ZXMgb2YgcGFnZS1lbmNvZGluZyBhcmUgdGhvc2Ugb2YgdGhlCi0gICAgICAgIHBhZ2VFbmNvZGluZyBwYWdlIGRpcmVjdGl2ZS4gSXQgaXMgYQotICAgICAgICB0cmFuc2xhdGlvbi10aW1lIGVycm9yIHRvIGRlZmluZSB0aGUgcGFnZUVuY29kaW5nCi0gICAgICAgIG9mIGEgSlNQIHBhZ2UgdGhyb3VnaCBvbmUgdmFsdWUgaW4gdGhlIEpTUAotICAgICAgICBjb25maWd1cmF0aW9uIGVsZW1lbnQgYW5kIHRoZW4gZ2l2ZSBpdCBhIGRpZmZlcmVudAotICAgICAgICB2YWx1ZSBpbiBhIHBhZ2VFbmNvZGluZyBkaXJlY3RpdmUsIGJ1dCBpdCBpcyBsZWdhbAotICAgICAgICB0byBnaXZlIGl0IHRoZSBzYW1lIHZhbHVlLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzY3JpcHRpbmctZW5hYmxlZCIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6dHJ1ZS1mYWxzZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBDYW4gYmUgdXNlZCB0byBlYXNpbHkgc2V0IHRoZSBpc1NjcmlwdGluZ0VuYWJsZWQKLSAgICAgICAgcHJvcGVydHkgb2YgYSBncm91cCBvZiBKU1AgcGFnZXMuICBCeSBkZWZhdWx0LAotICAgICAgICBzY3JpcHRpbmcgaXMgZW5hYmxlZC4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJpcy14bWwiCi0JCSAgICAgdHlwZT0iajJlZTp0cnVlLWZhbHNlVHlwZSIKLQkJICAgICBtaW5PY2N1cnM9IjAiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBJZiB0cnVlLCBkZW5vdGVzIHRoYXQgdGhlIGdyb3VwIG9mIHJlc291cmNlcwotCXRoYXQgbWF0Y2ggdGhlIFVSTCBwYXR0ZXJuIGFyZSBKU1AgZG9jdW1lbnRzLAotCWFuZCB0aHVzIG11c3QgYmUgaW50ZXJwcmV0ZWQgYXMgWE1MIGRvY3VtZW50cy4KLQlJZiBmYWxzZSwgdGhlIHJlc291cmNlcyBhcmUgYXNzdW1lZCB0byBub3QKLQliZSBKU1AgZG9jdW1lbnRzLCB1bmxlc3MgdGhlcmUgaXMgYW5vdGhlcgotCXByb3BlcnR5IGdyb3VwIHRoYXQgaW5kaWNhdGVzIG90aGVyd2lzZS4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaW5jbHVkZS1wcmVsdWRlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpwYXRoVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGluY2x1ZGUtcHJlbHVkZSBlbGVtZW50IGlzIGEgY29udGV4dC1yZWxhdGl2ZQotICAgICAgICBwYXRoIHRoYXQgbXVzdCBjb3JyZXNwb25kIHRvIGFuIGVsZW1lbnQgaW4gdGhlCi0gICAgICAgIFdlYiBBcHBsaWNhdGlvbi4gIFdoZW4gdGhlIGVsZW1lbnQgaXMgcHJlc2VudCwKLSAgICAgICAgdGhlIGdpdmVuIHBhdGggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIChhcwotICAgICAgICBpbiBhbiBpbmNsdWRlIGRpcmVjdGl2ZSkgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoCi0gICAgICAgIEpTUCBwYWdlIGluIHRoaXMganNwLXByb3BlcnR5LWdyb3VwLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJpbmNsdWRlLWNvZGEiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnBhdGhUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgaW5jbHVkZS1jb2RhIGVsZW1lbnQgaXMgYSBjb250ZXh0LXJlbGF0aXZlCi0gICAgICAgIHBhdGggdGhhdCBtdXN0IGNvcnJlc3BvbmQgdG8gYW4gZWxlbWVudCBpbiB0aGUKLSAgICAgICAgV2ViIEFwcGxpY2F0aW9uLiAgV2hlbiB0aGUgZWxlbWVudCBpcyBwcmVzZW50LAotICAgICAgICB0aGUgZ2l2ZW4gcGF0aCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQgKGFzCi0gICAgICAgIGluIGFuIGluY2x1ZGUgZGlyZWN0aXZlKSBhdCB0aGUgZW5kIG9mIGVhY2gKLSAgICAgICAgSlNQIHBhZ2UgaW4gdGhpcyBqc3AtcHJvcGVydHktZ3JvdXAuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJ0YWdsaWJUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotQSB0YWdsaWIgY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiBhIHRhZwotbGlicmFyeSB0aGF0IGlzIHVzZWQgYnkgYSBKU1AgcGFnZSB3aXRoaW4gdGhlIFdlYgotQXBwbGljYXRpb24uCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InRhZ2xpYi11cmkiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIEEgdGFnbGliLXVyaSBlbGVtZW50IGRlc2NyaWJlcyBhIFVSSSBpZGVudGlmeWluZyBhCi0gICAgICAgIHRhZyBsaWJyYXJ5IHVzZWQgaW4gdGhlIHdlYiBhcHBsaWNhdGlvbi4gIFRoZSBib2R5Ci0gICAgICAgIG9mIHRoZSB0YWdsaWItdXJpIGVsZW1lbnQgbWF5IGJlIGVpdGhlciBhbgotICAgICAgICBhYnNvbHV0ZSBVUkkgc3BlY2lmaWNhdGlvbiwgb3IgYSByZWxhdGl2ZSBVUkkuCi0gICAgICAgIFRoZXJlIHNob3VsZCBiZSBubyBlbnRyaWVzIGluIHdlYi54bWwgd2l0aCB0aGUKLSAgICAgICAgc2FtZSB0YWdsaWItdXJpIHZhbHVlLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InRhZ2xpYi1sb2NhdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cGF0aFR5cGUiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICB0aGUgdGFnbGliLWxvY2F0aW9uIGVsZW1lbnQgY29udGFpbnMgdGhlIGxvY2F0aW9uCi0gICAgICAgIChhcyBhIHJlc291cmNlIHJlbGF0aXZlIHRvIHRoZSByb290IG9mIHRoZSB3ZWIKLSAgICAgICAgYXBwbGljYXRpb24pIHdoZXJlIHRvIGZpbmQgdGhlIFRhZyBMaWJyYXJ5Ci0gICAgICAgIERlc2NyaXB0aW9uIGZpbGUgZm9yIHRoZSB0YWcgbGlicmFyeS4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotCi0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08L3hzZDpzY2hlbWE+Ci0KZGlmZiAtLWdpdCBhL3YyL3hraXQvc2NoZW1hcy9qMmVlL3dlYi1hcHBfMl80LnhzZCBiL3YyL3hraXQvc2NoZW1hcy9qMmVlL3dlYi1hcHBfMl80LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM4YzE1OC4uMDAwMDAwMAotLS0gYS92Mi94a2l0L3NjaGVtYXMvajJlZS93ZWItYXBwXzJfNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMjc4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKLSAgICAgeG1sbnM6ajJlZT0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKLSAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCi0gICAgIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIKLSAgICAgdmVyc2lvbj0iMi40Ij4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLUAoIyl3ZWItYXBwXzJfNC54c2RzCTEuMzQgMDIvMDgvMDEKLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLUNvcHlyaWdodCAyMDAyIFN1biBNaWNyb3N5c3RlbXMsIEluYy4sIDkwMSBTYW4gQW50b25pbwotUm9hZCwgUGFsbyBBbHRvLCBDYWxpZm9ybmlhIDk0MzAzLCBVLlMuQS4gQWxsIHJpZ2h0cwotcmVzZXJ2ZWQuCi0KLVN1biBNaWNyb3N5c3RlbXMsIEluYy4gaGFzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMKLXJlbGF0aW5nIHRvIHRlY2hub2xvZ3kgZGVzY3JpYmVkIGluIHRoaXMgZG9jdW1lbnQuIEluCi1wYXJ0aWN1bGFyLCBhbmQgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGVzZSBpbnRlbGxlY3R1YWwKLXByb3BlcnR5IHJpZ2h0cyBtYXkgaW5jbHVkZSBvbmUgb3IgbW9yZSBvZiB0aGUgVS5TLiBwYXRlbnRzCi1saXN0ZWQgYXQgaHR0cDovL3d3dy5zdW4uY29tL3BhdGVudHMgYW5kIG9uZSBvciBtb3JlCi1hZGRpdGlvbmFsIHBhdGVudHMgb3IgcGVuZGluZyBwYXRlbnQgYXBwbGljYXRpb25zIGluIHRoZQotVS5TLiBhbmQgb3RoZXIgY291bnRyaWVzLgotCi1UaGlzIGRvY3VtZW50IGFuZCB0aGUgdGVjaG5vbG9neSB3aGljaCBpdCBkZXNjcmliZXMgYXJlCi1kaXN0cmlidXRlZCB1bmRlciBsaWNlbnNlcyByZXN0cmljdGluZyB0aGVpciB1c2UsIGNvcHlpbmcsCi1kaXN0cmlidXRpb24sIGFuZCBkZWNvbXBpbGF0aW9uLiBObyBwYXJ0IG9mIHRoaXMgZG9jdW1lbnQKLW1heSBiZSByZXByb2R1Y2VkIGluIGFueSBmb3JtIGJ5IGFueSBtZWFucyB3aXRob3V0IHByaW9yCi13cml0dGVuIGF1dGhvcml6YXRpb24gb2YgU3VuIGFuZCBpdHMgbGljZW5zb3JzLCBpZiBhbnkuCi0KLVRoaXJkLXBhcnR5IHNvZnR3YXJlLCBpbmNsdWRpbmcgZm9udCB0ZWNobm9sb2d5LCBpcwotY29weXJpZ2h0ZWQgYW5kIGxpY2Vuc2VkIGZyb20gU3VuIHN1cHBsaWVycy4KLQotU3VuLCBTdW4gTWljcm9zeXN0ZW1zLCB0aGUgU3VuIGxvZ28sIFNvbGFyaXMsIEphdmEsIEoyRUUsCi1KYXZhU2VydmVyIFBhZ2VzLCBFbnRlcnByaXNlIEphdmFCZWFucyBhbmQgdGhlIEphdmEgQ29mZmVlCi1DdXAgbG9nbyBhcmUgdHJhZGVtYXJrcyBvciByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YgU3VuCi1NaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFUuUy4gYW5kIG90aGVyIGNvdW50cmllcy4KLQotRmVkZXJhbCBBY3F1aXNpdGlvbnM6IENvbW1lcmNpYWwgU29mdHdhcmUgLSBHb3Zlcm5tZW50IFVzZXJzCi1TdWJqZWN0IHRvIFN0YW5kYXJkIExpY2Vuc2UgVGVybXMgYW5kIENvbmRpdGlvbnMuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoaXMgaXMgdGhlIFhNTCBTY2hlbWEgZm9yIHRoZSBTZXJ2bGV0IDIuNCBkZXBsb3ltZW50Ci1kZXNjcmlwdG9yLiAgQWxsIFNlcnZsZXQgZGVwbG95bWVudCBkZXNjcmlwdG9ycyBtdXN0Ci1pbmRpY2F0ZSB0aGUgd2ViIGFwcGxpY2F0aW9uIHNjaGVtYSBieSB1c2luZyB0aGUgSjJFRQotbmFtZXNwYWNlOgotCi1odHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlCi0KLWFuZCBieSBpbmRpY2F0aW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBzY2hlbWEgYnkKLXVzaW5nIHRoZSB2ZXJzaW9uIGVsZW1lbnQgYXMgc2hvd24gYmVsb3c6Ci0KLSAgICA8d2ViLWFwcCB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKLSAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSIuLi4iCi0gICAgIHZlcnNpb249IjIuNCI+Ci0gICAgLi4uCi0gICAgPC93ZWItYXBwPgotCi1UaGUgaW5zdGFuY2UgZG9jdW1lbnRzIG1heSBpbmRpY2F0ZSB0aGUgcHVibGlzaGVkIHZlcnNpb24gb2YKLXRoZSBzY2hlbWEgdXNpbmcgdGhlIHhzaTpzY2hlbWFMb2NhdGlvbiBhdHRyaWJ1dGUgZm9yIEoyRUUKLW5hbWVzcGFjZSB3aXRoIHRoZSBmb2xsb3dpbmcgbG9jYXRpb246Ci0KLWh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBmb2xsb3dpbmcgY29udmVudGlvbnMgYXBwbHkgdG8gYWxsIEoyRUUKLWRlcGxveW1lbnQgZGVzY3JpcHRvciBlbGVtZW50cyB1bmxlc3MgaW5kaWNhdGVkIG90aGVyd2lzZS4KLQotLSBJbiBlbGVtZW50cyB0aGF0IHNwZWNpZnkgYSBwYXRobmFtZSB0byBhIGZpbGUgd2l0aGluIHRoZQotICBzYW1lIEpBUiBmaWxlLCByZWxhdGl2ZSBmaWxlbmFtZXMgKGkuZS4sIHRob3NlIG5vdAotICBzdGFydGluZyB3aXRoICIvIikgYXJlIGNvbnNpZGVyZWQgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YKLSAgdGhlIEpBUiBmaWxlJ3MgbmFtZXNwYWNlLiAgQWJzb2x1dGUgZmlsZW5hbWVzIChpLmUuLCB0aG9zZQotICBzdGFydGluZyB3aXRoICIvIikgYWxzbyBzcGVjaWZ5IG5hbWVzIGluIHRoZSByb290IG9mIHRoZQotICBKQVIgZmlsZSdzIG5hbWVzcGFjZS4gIEluIGdlbmVyYWwsIHJlbGF0aXZlIG5hbWVzIGFyZQotICBwcmVmZXJyZWQuICBUaGUgZXhjZXB0aW9uIGlzIC53YXIgZmlsZXMgd2hlcmUgYWJzb2x1dGUKLSAgbmFtZXMgYXJlIHByZWZlcnJlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgU2VydmxldCBBUEkuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi08eHNkOmluY2x1ZGUgc2NoZW1hTG9jYXRpb249ImoyZWVfMV80LnhzZCIvPgotPHhzZDppbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJqc3BfMl8wLnhzZCIvPgotCi0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotCi08eHNkOmVsZW1lbnQgbmFtZT0id2ViLWFwcCIgdHlwZT0iajJlZTp3ZWItYXBwVHlwZSI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIFRoZSB3ZWItYXBwIGVsZW1lbnQgaXMgdGhlIHJvb3Qgb2YgdGhlIGRlcGxveW1lbnQKLSAgICBkZXNjcmlwdG9yIGZvciBhIHdlYiBhcHBsaWNhdGlvbi4KLQotICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6dW5pcXVlIG5hbWU9InNlcnZsZXQtbmFtZS11bmlxdWVuZXNzIj4KLSAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgVGhlIHNlcnZsZXQgZWxlbWVudCBjb250YWlucyB0aGUgbmFtZSBvZiBhIHNlcnZsZXQuCi0gICAgVGhlIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSB3ZWIgYXBwbGljYXRpb24uCi0KLSAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6c2VydmxldCIvPgotICAgICAgICA8eHNkOmZpZWxkICAgIHhwYXRoPSJqMmVlOnNlcnZsZXQtbmFtZSIvPgotICAgIDwveHNkOnVuaXF1ZT4KLQotICAgIDx4c2Q6dW5pcXVlIG5hbWU9ImZpbHRlci1uYW1lLXVuaXF1ZW5lc3MiPgotICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICBUaGUgZmlsdGVyIGVsZW1lbnQgY29udGFpbnMgdGhlIG5hbWUgb2YgYSBmaWx0ZXIuCi0gICAgVGhlIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoZSB3ZWIgYXBwbGljYXRpb24uCi0KLSAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6ZmlsdGVyIi8+Ci0gICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6ZmlsdGVyLW5hbWUiLz4KLSAgICA8L3hzZDp1bmlxdWU+Ci0KLSAgICA8eHNkOnVuaXF1ZSBuYW1lPSJlamItbG9jYWwtcmVmLW5hbWUtdW5pcXVlbmVzcyI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIFRoZSBlamItbG9jYWwtcmVmLW5hbWUgZWxlbWVudCBjb250YWlucyB0aGUgbmFtZSBvZiBhbiBFSkIKLSAgICByZWZlcmVuY2UuIFRoZSBFSkIgcmVmZXJlbmNlIGlzIGFuIGVudHJ5IGluIHRoZSB3ZWIKLSAgICBhcHBsaWNhdGlvbidzIGVudmlyb25tZW50IGFuZCBpcyByZWxhdGl2ZSB0byB0aGUKLSAgICBqYXZhOmNvbXAvZW52IGNvbnRleHQuICBUaGUgbmFtZSBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4KLSAgICB0aGUgd2ViIGFwcGxpY2F0aW9uLgotCi0gICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBuYW1lIGlzIHByZWZpeGVkIHdpdGggImVqYi8iLgotCi0gICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOmVqYi1sb2NhbC1yZWYiLz4KLSAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTplamItcmVmLW5hbWUiLz4KLSAgICA8L3hzZDp1bmlxdWU+Ci0KLSAgICA8eHNkOnVuaXF1ZSBuYW1lPSJlamItcmVmLW5hbWUtdW5pcXVlbmVzcyI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIFRoZSBlamItcmVmLW5hbWUgZWxlbWVudCBjb250YWlucyB0aGUgbmFtZSBvZiBhbiBFSkIKLSAgICByZWZlcmVuY2UuIFRoZSBFSkIgcmVmZXJlbmNlIGlzIGFuIGVudHJ5IGluIHRoZSB3ZWIKLSAgICBhcHBsaWNhdGlvbidzIGVudmlyb25tZW50IGFuZCBpcyByZWxhdGl2ZSB0byB0aGUKLSAgICBqYXZhOmNvbXAvZW52IGNvbnRleHQuICBUaGUgbmFtZSBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4KLSAgICB0aGUgd2ViIGFwcGxpY2F0aW9uLgotCi0gICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBuYW1lIGlzIHByZWZpeGVkIHdpdGggImVqYi8iLgotCi0gICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOmVqYi1yZWYiLz4KLSAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTplamItcmVmLW5hbWUiLz4KLSAgICA8L3hzZDp1bmlxdWU+Ci0KLSAgICA8eHNkOnVuaXF1ZSBuYW1lPSJyZXNvdXJjZS1lbnYtcmVmLXVuaXF1ZW5lc3MiPgotICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICBUaGUgcmVzb3VyY2UtZW52LXJlZi1uYW1lIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mCi0gICAgYSByZXNvdXJjZSBlbnZpcm9ubWVudCByZWZlcmVuY2U7IGl0cyB2YWx1ZSBpcyB0aGUKLSAgICBlbnZpcm9ubWVudCBlbnRyeSBuYW1lIHVzZWQgaW4gdGhlIHdlYiBhcHBsaWNhdGlvbiBjb2RlLgotICAgIFRoZSBuYW1lIGlzIGEgSk5ESSBuYW1lIHJlbGF0aXZlIHRvIHRoZSBqYXZhOmNvbXAvZW52Ci0gICAgY29udGV4dCBhbmQgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGEgd2ViIGFwcGxpY2F0aW9uLgotCi0gICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPSJqMmVlOnJlc291cmNlLWVudi1yZWYiLz4KLSAgICAgICAgPHhzZDpmaWVsZCAgICB4cGF0aD0iajJlZTpyZXNvdXJjZS1lbnYtcmVmLW5hbWUiLz4KLSAgICA8L3hzZDp1bmlxdWU+Ci0KLSAgICA8eHNkOnVuaXF1ZSBuYW1lPSJtZXNzYWdlLWRlc3RpbmF0aW9uLXJlZi11bmlxdWVuZXNzIj4KLSAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgVGhlIG1lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWUgZWxlbWVudCBzcGVjaWZpZXMgdGhlIG5hbWUgb2YKLSAgICBhIG1lc3NhZ2UgZGVzdGluYXRpb24gcmVmZXJlbmNlOyBpdHMgdmFsdWUgaXMgdGhlCi0gICAgZW52aXJvbm1lbnQgZW50cnkgbmFtZSB1c2VkIGluIHRoZSB3ZWIgYXBwbGljYXRpb24gY29kZS4KLSAgICBUaGUgbmFtZSBpcyBhIEpOREkgbmFtZSByZWxhdGl2ZSB0byB0aGUgamF2YTpjb21wL2VudgotICAgIGNvbnRleHQgYW5kIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIHdlYiBhcHBsaWNhdGlvbi4KLQotICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpzZWxlY3RvciB4cGF0aD0iajJlZTptZXNzYWdlLWRlc3RpbmF0aW9uLXJlZiIvPgotICAgICAgICA8eHNkOmZpZWxkICAgIHhwYXRoPSJqMmVlOm1lc3NhZ2UtZGVzdGluYXRpb24tcmVmLW5hbWUiLz4KLSAgICA8L3hzZDp1bmlxdWU+Ci0KLSAgICA8eHNkOnVuaXF1ZSBuYW1lPSJyZXMtcmVmLW5hbWUtdW5pcXVlbmVzcyI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIFRoZSByZXMtcmVmLW5hbWUgZWxlbWVudCBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgYQotICAgIHJlc291cmNlIG1hbmFnZXIgY29ubmVjdGlvbiBmYWN0b3J5IHJlZmVyZW5jZS4gIFRoZSBuYW1lCi0gICAgaXMgYSBKTkRJIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGphdmE6Y29tcC9lbnYgY29udGV4dC4KLSAgICBUaGUgbmFtZSBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSB3ZWIgYXBwbGljYXRpb24uCi0KLSAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6cmVzb3VyY2UtcmVmIi8+Ci0gICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6cmVzLXJlZi1uYW1lIi8+Ci0gICAgPC94c2Q6dW5pcXVlPgotCi0gICAgPHhzZDp1bmlxdWUgbmFtZT0iZW52LWVudHJ5LW5hbWUtdW5pcXVlbmVzcyI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIFRoZSBlbnYtZW50cnktbmFtZSBlbGVtZW50IGNvbnRhaW5zIHRoZSBuYW1lIG9mIGEgd2ViCi0gICAgYXBwbGljYXRpb24ncyBlbnZpcm9ubWVudCBlbnRyeS4gIFRoZSBuYW1lIGlzIGEgSk5ESQotICAgIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGphdmE6Y29tcC9lbnYgY29udGV4dC4gIFRoZSBuYW1lCi0gICAgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGEgd2ViIGFwcGxpY2F0aW9uLgotCi0gICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICA8L3hzZDphbm5vdGF0aW9uPgotCi0gICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6ZW52LWVudHJ5Ii8+Ci0gICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6ZW52LWVudHJ5LW5hbWUiLz4KLSAgICAgICAgPC94c2Q6dW5pcXVlPgotCi0gICAgPHhzZDprZXkgbmFtZT0icm9sZS1uYW1lLWtleSI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIEEgcm9sZS1uYW1lLWtleSBpcyBzcGVjaWZpZWQgdG8gYWxsb3cgdGhlIHJlZmVyZW5jZXMKLSAgICBmcm9tIHRoZSBzZWN1cml0eS1yb2xlLXJlZnMuCi0KLSAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6c2VjdXJpdHktcm9sZSIvPgotICAgICAgICA8eHNkOmZpZWxkICAgIHhwYXRoPSJqMmVlOnJvbGUtbmFtZSIvPgotICAgIDwveHNkOmtleT4KLQotICAgIDx4c2Q6a2V5cmVmIG5hbWU9InJvbGUtbmFtZS1yZWZlcmVuY2VzIgotICAgICAgICAgICAgcmVmZXI9ImoyZWU6cm9sZS1uYW1lLWtleSI+Ci0gICAgPHhzZDphbm5vdGF0aW9uPgotICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgIFRoZSBrZXlyZWYgaW5kaWNhdGVzIHRoZSByZWZlcmVuY2VzIGZyb20KLSAgICBzZWN1cml0eS1yb2xlLXJlZiB0byBhIHNwZWNpZmllZCByb2xlLW5hbWUuCi0KLSAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9ImoyZWU6c2VydmxldC9qMmVlOnNlY3VyaXR5LXJvbGUtcmVmIi8+Ci0gICAgICAgIDx4c2Q6ZmllbGQgICAgeHBhdGg9ImoyZWU6cm9sZS1saW5rIi8+Ci0gICAgPC94c2Q6a2V5cmVmPgotCi08L3hzZDplbGVtZW50PgotCi0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJhdXRoLWNvbnN0cmFpbnRUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGF1dGgtY29uc3RyYWludFR5cGUgaW5kaWNhdGVzIHRoZSB1c2VyIHJvbGVzIHRoYXQKLXNob3VsZCBiZSBwZXJtaXR0ZWQgYWNjZXNzIHRvIHRoaXMgcmVzb3VyY2UKLWNvbGxlY3Rpb24uIFRoZSByb2xlLW5hbWUgdXNlZCBoZXJlIG11c3QgZWl0aGVyIGNvcnJlc3BvbmQKLXRvIHRoZSByb2xlLW5hbWUgb2Ygb25lIG9mIHRoZSBzZWN1cml0eS1yb2xlIGVsZW1lbnRzCi1kZWZpbmVkIGZvciB0aGlzIHdlYiBhcHBsaWNhdGlvbiwgb3IgYmUgdGhlIHNwZWNpYWxseQotcmVzZXJ2ZWQgcm9sZS1uYW1lICIqIiB0aGF0IGlzIGEgY29tcGFjdCBzeW50YXggZm9yCi1pbmRpY2F0aW5nIGFsbCByb2xlcyBpbiB0aGUgd2ViIGFwcGxpY2F0aW9uLiBJZiBib3RoICIqIgotYW5kIHJvbGVuYW1lcyBhcHBlYXIsIHRoZSBjb250YWluZXIgaW50ZXJwcmV0cyB0aGlzIGFzIGFsbAotcm9sZXMuICBJZiBubyByb2xlcyBhcmUgZGVmaW5lZCwgbm8gdXNlciBpcyBhbGxvd2VkIGFjY2VzcwotdG8gdGhlIHBvcnRpb24gb2YgdGhlIHdlYiBhcHBsaWNhdGlvbiBkZXNjcmliZWQgYnkgdGhlCi1jb250YWluaW5nIHNlY3VyaXR5LWNvbnN0cmFpbnQuICBUaGUgY29udGFpbmVyIG1hdGNoZXMKLXJvbGUgbmFtZXMgY2FzZSBzZW5zaXRpdmVseSB3aGVuIGRldGVybWluaW5nIGFjY2Vzcy4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJyb2xlLW5hbWUiCi0gICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cm9sZS1uYW1lVHlwZSIKLSAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0iYXV0aC1tZXRob2RUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGF1dGgtbWV0aG9kVHlwZSBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgYXV0aGVudGljYXRpb24KLW1lY2hhbmlzbSBmb3IgdGhlIHdlYiBhcHBsaWNhdGlvbi4gQXMgYSBwcmVyZXF1aXNpdGUgdG8KLWdhaW5pbmcgYWNjZXNzIHRvIGFueSB3ZWIgcmVzb3VyY2VzIHdoaWNoIGFyZSBwcm90ZWN0ZWQgYnkKLWFuIGF1dGhvcml6YXRpb24gY29uc3RyYWludCwgYSB1c2VyIG11c3QgaGF2ZSBhdXRoZW50aWNhdGVkCi11c2luZyB0aGUgY29uZmlndXJlZCBtZWNoYW5pc20uIExlZ2FsIHZhbHVlcyBhcmUgIkJBU0lDIiwKLSJESUdFU1QiLCAiRk9STSIsIG9yICJDTElFTlQtQ0VSVCIuCi0KLVVzZWQgaW46IGxvZ2luLWNvbmZpZwotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0iajJlZTpzdHJpbmciPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJCQVNJQyIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJESUdFU1QiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRk9STSIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJDTElFTlQtQ0VSVCIvPgotICAgIDwveHNkOnJlc3RyaWN0aW9uPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJkaXNwYXRjaGVyVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBkaXNwYXRjaGVyIGhhcyB0aHJlZSBsZWdhbCB2YWx1ZXMsIEZPUldBUkQgYW5kIFJFUVVFU1QKLWFuZCBJTkNMVURFLiBBIHZhbHVlIG9mIEZPUldBUkQgbWVhbnMgdGhlIEZpbHRlcgotd2lsbCBiZSBhcHBsaWVkIHVuZGVyIFJlcXVlc3REaXNwYXRjaGVyLmZvcndhcmQoKSBjYWxscy4KLUEgdmFsdWUgb2YgUkVRVUVTVCBtZWFucyB0aGUgRmlsdGVyIHdpbGwgYmUgYXBwbGllZAotdW5kZXIgb3JkaW5hcnkgY2xpZW50IGNhbGxzIHRvIHRoZSBwYXRoIG9yIHNlcnZsZXQuIEEgdmFsdWUgb2YKLUlOQ0xVREUgbWVhbnMgdGhlIEZpbHRlciB3aWxsIGJlIGFwcGxpZWQgdW5kZXIKLVJlcXVlc3REaXNwYXRjaGVyLmluY2x1ZGUoKSBjYWxscy4KLVRoZSBhYnNlbmNlIG9mIGFueSBkaXNwYXRjaGVyIGVsZW1lbnRzIGluIGEKLWZpbHRlci1tYXBwaW5nIGluZGljYXRlcyBhIGRlZmF1bHQgb2YgYXBwbHlpbmcKLWZpbHRlcnMgb25seSB1bmRlciBvcmRpbmFyeSBjbGllbnQgY2FsbHMgdG8gdGhlIHBhdGggb3Igc2VydmxldC4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImoyZWU6c3RyaW5nIj4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iRk9SV0FSRCIvPgotICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IklOQ0xVREUiLz4KLSAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJSRVFVRVNUIi8+Ci0KLSAgICA8L3hzZDpyZXN0cmljdGlvbj4KLQotPC94c2Q6c2ltcGxlVHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0iZXJyb3ItY29kZVR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgZXJyb3ItY29kZSBjb250YWlucyBhbiBIVFRQIGVycm9yIGNvZGUsIGV4OiA0MDQKLQotVXNlZCBpbjogZXJyb3ItcGFnZQotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0icG9zaXRpdmVJbnRlZ2VyIi8+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJlcnJvci1wYWdlVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBlcnJvci1wYWdlVHlwZSBjb250YWlucyBhIG1hcHBpbmcgYmV0d2VlbiBhbiBlcnJvciBjb2RlCi1vciBleGNlcHRpb24gdHlwZSB0byB0aGUgcGF0aCBvZiBhIHJlc291cmNlIGluIHRoZSB3ZWIKLWFwcGxpY2F0aW9uLgotCi1Vc2VkIGluOiB3ZWItYXBwCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPGNob2ljZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVycm9yLWNvZGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVycm9yLWNvZGVUeXBlIi8+Ci0KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImV4Y2VwdGlvbi10eXBlIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpmdWxseS1xdWFsaWZpZWQtY2xhc3NUeXBlIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGV4Y2VwdGlvbi10eXBlIGNvbnRhaW5zIGEgZnVsbHkgcXVhbGlmaWVkIGNsYXNzCi0gICAgICAgIG5hbWUgb2YgYSBKYXZhIGV4Y2VwdGlvbiB0eXBlLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDwvY2hvaWNlPgotCi0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJsb2NhdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cGF0aFR5cGUiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgbG9jYXRpb24gZWxlbWVudCBjb250YWlucyB0aGUgbG9jYXRpb24gb2YgdGhlCi0gICAgICAgIHJlc291cmNlIGluIHRoZSB3ZWIgYXBwbGljYXRpb24gcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YKLSAgICAgICAgdGhlIHdlYiBhcHBsaWNhdGlvbi4gVGhlIHZhbHVlIG9mIHRoZSBsb2NhdGlvbiBtdXN0IGhhdmUKLSAgICAgICAgYSBsZWFkaW5nIGAvJy4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImZpbHRlci1tYXBwaW5nVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLURlY2xhcmF0aW9uIG9mIHRoZSBmaWx0ZXIgbWFwcGluZ3MgaW4gdGhpcyB3ZWIKLWFwcGxpY2F0aW9uIGlzIGRvbmUgYnkgdXNpbmcgZmlsdGVyLW1hcHBpbmdUeXBlLgotVGhlIGNvbnRhaW5lciB1c2VzIHRoZSBmaWx0ZXItbWFwcGluZwotZGVjbGFyYXRpb25zIHRvIGRlY2lkZSB3aGljaCBmaWx0ZXJzIHRvIGFwcGx5IHRvIGEgcmVxdWVzdCwKLWFuZCBpbiB3aGF0IG9yZGVyLiBUaGUgY29udGFpbmVyIG1hdGNoZXMgdGhlIHJlcXVlc3QgVVJJIHRvCi1hIFNlcnZsZXQgaW4gdGhlIG5vcm1hbCB3YXkuIFRvIGRldGVybWluZSB3aGljaCBmaWx0ZXJzIHRvCi1hcHBseSBpdCBtYXRjaGVzIGZpbHRlci1tYXBwaW5nIGRlY2xhcmF0aW9ucyBlaXRoZXIgb24KLXNlcnZsZXQtbmFtZSwgb3Igb24gdXJsLXBhdHRlcm4gZm9yIGVhY2ggZmlsdGVyLW1hcHBpbmcKLWVsZW1lbnQsIGRlcGVuZGluZyBvbiB3aGljaCBzdHlsZSBpcyB1c2VkLiBUaGUgb3JkZXIgaW4KLXdoaWNoIGZpbHRlcnMgYXJlIGludm9rZWQgaXMgdGhlIG9yZGVyIGluIHdoaWNoCi1maWx0ZXItbWFwcGluZyBkZWNsYXJhdGlvbnMgdGhhdCBtYXRjaCBhIHJlcXVlc3QgVVJJIGZvciBhCi1zZXJ2bGV0IGFwcGVhciBpbiB0aGUgbGlzdCBvZiBmaWx0ZXItbWFwcGluZyBlbGVtZW50cy5UaGUKLWZpbHRlci1uYW1lIHZhbHVlIG11c3QgYmUgdGhlIHZhbHVlIG9mIHRoZSBmaWx0ZXItbmFtZQotc3ViLWVsZW1lbnRzIG9mIG9uZSBvZiB0aGUgZmlsdGVyIGRlY2xhcmF0aW9ucyBpbiB0aGUKLWRlcGxveW1lbnQgZGVzY3JpcHRvci4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZmlsdGVyLW5hbWUiCi0gICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZmlsdGVyLW5hbWVUeXBlIi8+Ci0gICAgICAgIDxjaG9pY2U+Ci0gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0idXJsLXBhdHRlcm4iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnVybC1wYXR0ZXJuVHlwZSIvPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlcnZsZXQtbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c2VydmxldC1uYW1lVHlwZSIvPgotICAgICAgICA8L2Nob2ljZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRpc3BhdGNoZXIiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRpc3BhdGNoZXJUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0iZmlsdGVyLW5hbWVUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGxvZ2ljYWwgbmFtZSBvZiB0aGUgZmlsdGVyIGlzIGRlY2xhcmUKLWJ5IHVzaW5nIGZpbHRlci1uYW1lVHlwZS4gVGhpcyBuYW1lIGlzIHVzZWQgdG8gbWFwIHRoZQotZmlsdGVyLiAgRWFjaCBmaWx0ZXIgbmFtZSBpcyB1bmlxdWUgd2l0aGluIHRoZSB3ZWIKLWFwcGxpY2F0aW9uLgotCi1Vc2VkIGluOiBmaWx0ZXIsIGZpbHRlci1tYXBwaW5nCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnN0cmluZyIvPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iZmlsdGVyVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBmaWx0ZXJUeXBlIGlzIHVzZWQgdG8gZGVjbGFyZSBhIGZpbHRlciBpbiB0aGUgd2ViCi1hcHBsaWNhdGlvbi4gVGhlIGZpbHRlciBpcyBtYXBwZWQgdG8gZWl0aGVyIGEgc2VydmxldCBvciBhCi1VUkwgcGF0dGVybiBpbiB0aGUgZmlsdGVyLW1hcHBpbmcgZWxlbWVudCwgdXNpbmcgdGhlCi1maWx0ZXItbmFtZSB2YWx1ZSB0byByZWZlcmVuY2UuIEZpbHRlcnMgY2FuIGFjY2VzcyB0aGUKLWluaXRpYWxpemF0aW9uIHBhcmFtZXRlcnMgZGVjbGFyZWQgaW4gdGhlIGRlcGxveW1lbnQKLWRlc2NyaXB0b3IgYXQgcnVudGltZSB2aWEgdGhlIEZpbHRlckNvbmZpZyBpbnRlcmZhY2UuCi0KLVVzZWQgaW46IHdlYi1hcHAKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRpc3BsYXktbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGlzcGxheS1uYW1lVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Imljb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmljb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImZpbHRlci1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpmaWx0ZXItbmFtZVR5cGUiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImZpbHRlci1jbGFzcyIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZnVsbHktcXVhbGlmaWVkLWNsYXNzVHlwZSI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBmdWxseSBxdWFsaWZpZWQgY2xhc3NuYW1lIG9mIHRoZSBmaWx0ZXIuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLQotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaW5pdC1wYXJhbSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cGFyYW0tdmFsdWVUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBpbml0LXBhcmFtIGVsZW1lbnQgY29udGFpbnMgYSBuYW1lL3ZhbHVlIHBhaXIgYXMKLSAgICAgICAgYW4gaW5pdGlhbGl6YXRpb24gcGFyYW0gb2YgYSBzZXJ2bGV0IGZpbHRlcgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iZm9ybS1sb2dpbi1jb25maWdUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGZvcm0tbG9naW4tY29uZmlnVHlwZSBzcGVjaWZpZXMgdGhlIGxvZ2luIGFuZCBlcnJvcgotcGFnZXMgdGhhdCBzaG91bGQgYmUgdXNlZCBpbiBmb3JtIGJhc2VkIGxvZ2luLiBJZiBmb3JtIGJhc2VkCi1hdXRoZW50aWNhdGlvbiBpcyBub3QgdXNlZCwgdGhlc2UgZWxlbWVudHMgYXJlIGlnbm9yZWQuCi0KLVVzZWQgaW46IGxvZ2luLWNvbmZpZwotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImZvcm0tbG9naW4tcGFnZSIKLSAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTp3YXItcGF0aFR5cGUiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgZm9ybS1sb2dpbi1wYWdlIGVsZW1lbnQgZGVmaW5lcyB0aGUgbG9jYXRpb24gaW4gdGhlIHdlYiBhcHAKLSAgICAgICAgd2hlcmUgdGhlIHBhZ2UgdGhhdCBjYW4gYmUgdXNlZCBmb3IgbG9naW4gY2FuIGJlIGZvdW5kLgotICAgICAgICBUaGUgcGF0aCBiZWdpbnMgd2l0aCBhIGxlYWRpbmcgLyBhbmQgaXMKLSAgICAgICAgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YgdGhlIFdBUi4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotCi0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJmb3JtLWVycm9yLXBhZ2UiCi0gICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6d2FyLXBhdGhUeXBlIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIGZvcm0tZXJyb3ItcGFnZSBlbGVtZW50IGRlZmluZXMgdGhlIGxvY2F0aW9uIGluCi0gICAgICAgIHRoZSB3ZWIgYXBwIHdoZXJlIHRoZSBlcnJvciBwYWdlIHRoYXQgaXMgZGlzcGxheWVkCi0gICAgICAgIHdoZW4gbG9naW4gaXMgbm90IHN1Y2Nlc3NmdWwgY2FuIGJlIGZvdW5kLgotICAgICAgICBUaGUgcGF0aCBiZWdpbnMgd2l0aCBhIGxlYWRpbmcgLyBhbmQgaXMgaW50ZXJwcmV0ZWQKLSAgICAgICAgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YgdGhlIFdBUi4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotCi0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJodHRwLW1ldGhvZFR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotCi08eHNkOmRvY3VtZW50YXRpb24+Ci1UaGUgaHR0cC1tZXRob2QgY29udGFpbnMgYW4gSFRUUCBtZXRob2QgcmVjb2duaXplZCBieSB0aGUgd2ViLWFwcCwgaS5lLgotKEdFVCB8IFBPU1QgfC4uLikuCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkdFVCIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJQT1NUIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlBVVCIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJERUxFVEUiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSEVBRCIvPgotICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJPUFRJT05TIi8+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlRSQUNFIi8+Ci0gICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJsaXN0ZW5lclR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgbGlzdGVuZXJUeXBlIGluZGljYXRlcyB0aGUgZGVwbG95bWVudCBwcm9wZXJ0aWVzIGZvciBhIHdlYgotYXBwbGljYXRpb24gbGlzdGVuZXIgYmVhbi4KLQotVXNlZCBpbjogd2ViLWFwcDpsaXN0ZW5lclR5cGUKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkaXNwbGF5LW5hbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRpc3BsYXktbmFtZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaWNvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6aWNvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibGlzdGVuZXItY2xhc3MiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmZ1bGx5LXF1YWxpZmllZC1jbGFzc1R5cGUiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgbGlzdGVuZXItY2xhc3MgZWxlbWVudCBkZWNsYXJlcyBhIGNsYXNzIGluIHRoZQotICAgICAgICBhcHBsaWNhdGlvbiBtdXN0IGJlIHJlZ2lzdGVyZWQgYXMgYSB3ZWIKLSAgICAgICAgYXBwbGljYXRpb24gbGlzdGVuZXIgYmVhbi4gVGhlIHZhbHVlIGlzIHRoZSBmdWxseQotICAgICAgICBxdWFsaWZpZWQgY2xhc3NuYW1lIG9mIHRoZSBsaXN0ZW5lciBjbGFzcy4KLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImxvY2FsZS1lbmNvZGluZy1tYXBwaW5nLWxpc3RUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIGxvY2FsZS1lbmNvZGluZy1tYXBwaW5nLWxpc3QgY29udGFpbnMgb25lIG9yIG1vcmUKLWxvY2FsZS1lbmNvZGluZy1tYXBwaW5nKHMpLgotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotPHhzZDpzZXF1ZW5jZT4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0ibG9jYWxlLWVuY29kaW5nLW1hcHBpbmciCi0gICAgICAgIHR5cGU9ImoyZWU6bG9jYWxlLWVuY29kaW5nLW1hcHBpbmdUeXBlIgotICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotPC94c2Q6c2VxdWVuY2U+Ci08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9ImxvY2FsZS1lbmNvZGluZy1tYXBwaW5nVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBsb2NhbGUtZW5jb2RpbmctbWFwcGluZyBjb250YWlucyBsb2NhbGUgbmFtZSBhbmQKLWVuY29kaW5nIG5hbWUuIFRoZSBsb2NhbGUgbmFtZSBtdXN0IGJlIGVpdGhlciAiTGFuZ3VhZ2UtY29kZSIsCi1zdWNoIGFzICJqYSIsIGRlZmluZWQgYnkgSVNPLTYzOSBvciAiTGFuZ3VhZ2UtY29kZV9Db3VudHJ5LWNvZGUiLAotc3VjaCBhcyAiamFfSlAiLiAgIkNvdW50cnkgY29kZSIgaXMgZGVmaW5lZCBieSBJU08tMzE2Ni4KLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLTx4c2Q6c2VxdWVuY2U+Ci0gICAgPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsZSIKLSAgICAgICAgdHlwZT0iajJlZTpzdHJpbmciLz4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZW5jb2RpbmciCi0gICAgICAgIHR5cGU9ImoyZWU6c3RyaW5nIi8+Ci08L3hzZDpzZXF1ZW5jZT4KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ibG9naW4tY29uZmlnVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBsb2dpbi1jb25maWdUeXBlIGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBhdXRoZW50aWNhdGlvbgotbWV0aG9kIHRoYXQgc2hvdWxkIGJlIHVzZWQsIHRoZSByZWFsbSBuYW1lIHRoYXQgc2hvdWxkIGJlCi11c2VkIGZvciB0aGlzIGFwcGxpY2F0aW9uLCBhbmQgdGhlIGF0dHJpYnV0ZXMgdGhhdCBhcmUKLW5lZWRlZCBieSB0aGUgZm9ybSBsb2dpbiBtZWNoYW5pc20uCi0KLVVzZWQgaW46IHdlYi1hcHAKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iYXV0aC1tZXRob2QiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmF1dGgtbWV0aG9kVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icmVhbG0tbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c3RyaW5nIiBtaW5PY2N1cnM9IjAiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgcmVhbG0gbmFtZSBlbGVtZW50IHNwZWNpZmllcyB0aGUgcmVhbG0gbmFtZSB0bwotICAgICAgICB1c2UgaW4gSFRUUCBCYXNpYyBhdXRob3JpemF0aW9uLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJmb3JtLWxvZ2luLWNvbmZpZyIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6Zm9ybS1sb2dpbi1jb25maWdUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ibWltZS1tYXBwaW5nVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBtaW1lLW1hcHBpbmdUeXBlIGRlZmluZXMgYSBtYXBwaW5nIGJldHdlZW4gYW4gZXh0ZW5zaW9uCi1hbmQgYSBtaW1lIHR5cGUuCi0KLVVzZWQgaW46IHdlYi1hcHAKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgZXh0ZW5zaW9uIGVsZW1lbnQgY29udGFpbnMgYSBzdHJpbmcgZGVzY3JpYmluZyBhbgotICAgICAgICBleHRlbnNpb24uIGV4YW1wbGU6ICJ0eHQiCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpzdHJpbmciLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im1pbWUtdHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bWltZS10eXBlVHlwZSIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOnNpbXBsZVR5cGUgbmFtZT0ibWltZS10eXBlVHlwZSI+Ci08eHNkOmFubm90YXRpb24+Ci08eHNkOmRvY3VtZW50YXRpb24+Ci0KLVRoZSBtaW1lLXR5cGVUeXBlIGlzIHVzZWQgdG8gaW5kaWNhdGUgYSBkZWZpbmVkIG1pbWUgdHlwZS4KLQotRXhhbXBsZToKLSJ0ZXh0L3BsYWluIgotCi1Vc2VkIGluOiBtaW1lLW1hcHBpbmcKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9ImoyZWU6c3RyaW5nIj4KLSAgICAgICAgPHhzZDpwYXR0ZXJuIHZhbHVlPSJbXHB7TH1cLVxwe05kfV0rL1tccHtMfVwtXHB7TmR9XC5dKyIvPgotICAgIDwveHNkOnJlc3RyaWN0aW9uPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ic2VjdXJpdHktY29uc3RyYWludFR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgc2VjdXJpdHktY29uc3RyYWludFR5cGUgaXMgdXNlZCB0byBhc3NvY2lhdGUKLXNlY3VyaXR5IGNvbnN0cmFpbnRzIHdpdGggb25lIG9yIG1vcmUgd2ViIHJlc291cmNlCi1jb2xsZWN0aW9ucwotCi1Vc2VkIGluOiB3ZWItYXBwCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRpc3BsYXktbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGlzcGxheS1uYW1lVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJ3ZWItcmVzb3VyY2UtY29sbGVjdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6d2ViLXJlc291cmNlLWNvbGxlY3Rpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImF1dGgtY29uc3RyYWludCIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6YXV0aC1jb25zdHJhaW50VHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0idXNlci1kYXRhLWNvbnN0cmFpbnQiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnVzZXItZGF0YS1jb25zdHJhaW50VHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi08eHNkOmNvbXBsZXhUeXBlIG5hbWU9InNlcnZsZXQtbWFwcGluZ1R5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgc2VydmxldC1tYXBwaW5nVHlwZSBkZWZpbmVzIGEgbWFwcGluZyBiZXR3ZWVuIGEKLXNlcnZsZXQgYW5kIGEgdXJsIHBhdHRlcm4uCi0KLVVzZWQgaW46IHdlYi1hcHAKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ic2VydmxldC1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpzZXJ2bGV0LW5hbWVUeXBlIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJ1cmwtcGF0dGVybiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6dXJsLXBhdHRlcm5UeXBlIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJzZXJ2bGV0LW5hbWVUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIHNlcnZsZXQtbmFtZSBlbGVtZW50IGNvbnRhaW5zIHRoZSBjYW5vbmljYWwgbmFtZSBvZiB0aGUKLXNlcnZsZXQuIEVhY2ggc2VydmxldCBuYW1lIGlzIHVuaXF1ZSB3aXRoaW4gdGhlIHdlYgotYXBwbGljYXRpb24uCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnN0cmluZyIvPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0ic2VydmxldFR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgc2VydmxldFR5cGUgaXMgdXNlZCB0byBkZWNsYXJlIGEgc2VydmxldC4KLUl0IGNvbnRhaW5zIHRoZSBkZWNsYXJhdGl2ZSBkYXRhIG9mIGEKLXNlcnZsZXQuIElmIGEganNwLWZpbGUgaXMgc3BlY2lmaWVkIGFuZCB0aGUgbG9hZC1vbi1zdGFydHVwCi1lbGVtZW50IGlzIHByZXNlbnQsIHRoZW4gdGhlIEpTUCBzaG91bGQgYmUgcHJlY29tcGlsZWQgYW5kCi1sb2FkZWQuCi0KLVVzZWQgaW46IHdlYi1hcHAKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmRlc2NyaXB0aW9uVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRpc3BsYXktbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGlzcGxheS1uYW1lVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Imljb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmljb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlcnZsZXQtbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c2VydmxldC1uYW1lVHlwZSIvPgotICAgICAgICA8Y2hvaWNlPgotICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlcnZsZXQtY2xhc3MiCi0gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpmdWxseS1xdWFsaWZpZWQtY2xhc3NUeXBlIj4KLSAgICAgICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICAgICAgVGhlIHNlcnZsZXQtY2xhc3MgZWxlbWVudCBjb250YWlucyB0aGUgZnVsbHkKLSAgICAgICAgICAgIHF1YWxpZmllZCBjbGFzcyBuYW1lIG9mIHRoZSBzZXJ2bGV0LgotCi0gICAgICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0KLSAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJqc3AtZmlsZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmpzcC1maWxlVHlwZSIvPgotCi0gICAgICAgIDwvY2hvaWNlPgotCi0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJpbml0LXBhcmFtIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpwYXJhbS12YWx1ZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJsb2FkLW9uLXN0YXJ0dXAiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4c2Q6aW50ZWdlciIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBsb2FkLW9uLXN0YXJ0dXAgZWxlbWVudCBpbmRpY2F0ZXMgdGhhdCB0aGlzCi0gICAgICAgIHNlcnZsZXQgc2hvdWxkIGJlIGxvYWRlZCAoaW5zdGFudGlhdGVkIGFuZCBoYXZlCi0gICAgICAgIGl0cyBpbml0KCkgY2FsbGVkKSBvbiB0aGUgc3RhcnR1cCBvZiB0aGUgd2ViCi0gICAgICAgIGFwcGxpY2F0aW9uLiBUaGUgb3B0aW9uYWwgY29udGVudHMgb2YgdGhlc2UKLSAgICAgICAgZWxlbWVudCBtdXN0IGJlIGFuIGludGVnZXIgaW5kaWNhdGluZyB0aGUgb3JkZXIgaW4KLSAgICAgICAgd2hpY2ggdGhlIHNlcnZsZXQgc2hvdWxkIGJlIGxvYWRlZC4gSWYgdGhlIHZhbHVlCi0gICAgICAgIGlzIGEgbmVnYXRpdmUgaW50ZWdlciwgb3IgdGhlIGVsZW1lbnQgaXMgbm90Ci0gICAgICAgIHByZXNlbnQsIHRoZSBjb250YWluZXIgaXMgZnJlZSB0byBsb2FkIHRoZSBzZXJ2bGV0Ci0gICAgICAgIHdoZW5ldmVyIGl0IGNob29zZXMuIElmIHRoZSB2YWx1ZSBpcyBhIHBvc2l0aXZlCi0gICAgICAgIGludGVnZXIgb3IgMCwgdGhlIGNvbnRhaW5lciBtdXN0IGxvYWQgYW5kCi0gICAgICAgIGluaXRpYWxpemUgdGhlIHNlcnZsZXQgYXMgdGhlIGFwcGxpY2F0aW9uIGlzCi0gICAgICAgIGRlcGxveWVkLiBUaGUgY29udGFpbmVyIG11c3QgZ3VhcmFudGVlIHRoYXQKLSAgICAgICAgc2VydmxldHMgbWFya2VkIHdpdGggbG93ZXIgaW50ZWdlcnMgYXJlIGxvYWRlZAotICAgICAgICBiZWZvcmUgc2VydmxldHMgbWFya2VkIHdpdGggaGlnaGVyIGludGVnZXJzLiBUaGUKLSAgICAgICAgY29udGFpbmVyIG1heSBjaG9vc2UgdGhlIG9yZGVyIG9mIGxvYWRpbmcgb2YKLSAgICAgICAgc2VydmxldHMgd2l0aCB0aGUgc2FtZSBsb2FkLW9uLXN0YXJ0LXVwIHZhbHVlLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJydW4tYXMiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnJ1bi1hc1R5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlY3VyaXR5LXJvbGUtcmVmIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpzZWN1cml0eS1yb2xlLXJlZlR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXBsb3ltZW50LWV4dGVuc2lvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVwbG95bWVudC1leHRlbnNpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJzZXNzaW9uLWNvbmZpZ1R5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgc2Vzc2lvbi1jb25maWdUeXBlIGRlZmluZXMgdGhlIHNlc3Npb24gcGFyYW1ldGVycwotZm9yIHRoaXMgd2ViIGFwcGxpY2F0aW9uLgotCi1Vc2VkIGluOiB3ZWItYXBwCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlc3Npb24tdGltZW91dCIKLSAgICAgICAgICAgICAgICAgdHlwZT0ieHNkOm5vbk5lZ2F0aXZlSW50ZWdlciIKLSAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIj4KLSAgICAgICAgPHhzZDphbm5vdGF0aW9uPgotICAgICAgICA8eHNkOmRvY3VtZW50YXRpb24+Ci0KLSAgICAgICAgVGhlIHNlc3Npb24tdGltZW91dCBlbGVtZW50IGRlZmluZXMgdGhlIGRlZmF1bHQKLSAgICAgICAgc2Vzc2lvbiB0aW1lb3V0IGludGVydmFsIGZvciBhbGwgc2Vzc2lvbnMgY3JlYXRlZAotICAgICAgICBpbiB0aGlzIHdlYiBhcHBsaWNhdGlvbi4gVGhlIHNwZWNpZmllZCB0aW1lb3V0Ci0gICAgICAgIG11c3QgYmUgZXhwcmVzc2VkIGluIGEgd2hvbGUgbnVtYmVyIG9mIG1pbnV0ZXMuCi0gICAgICAgIElmIHRoZSB0aW1lb3V0IGlzIDAgb3IgbGVzcywgdGhlIGNvbnRhaW5lciBlbnN1cmVzCi0gICAgICAgIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBvZiBzZXNzaW9ucyBpcyBuZXZlciB0byB0aW1lCi0gICAgICAgIG91dC4gSWYgdGhpcyBlbGVtZW50IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBjb250YWluZXIKLSAgICAgICAgbXVzdCBzZXQgaXRzIGRlZmF1bHQgdGltZW91dCBwZXJpb2QuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpzaW1wbGVUeXBlIG5hbWU9InRyYW5zcG9ydC1ndWFyYW50ZWVUeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhlIHRyYW5zcG9ydC1ndWFyYW50ZWVUeXBlIHNwZWNpZmllcyB0aGF0IHRoZSBjb21tdW5pY2F0aW9uCi1iZXR3ZWVuIGNsaWVudCBhbmQgc2VydmVyIHNob3VsZCBiZSBOT05FLCBJTlRFR1JBTCwgb3IKLUNPTkZJREVOVElBTC4gTk9ORSBtZWFucyB0aGF0IHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdAotcmVxdWlyZSBhbnkgdHJhbnNwb3J0IGd1YXJhbnRlZXMuIEEgdmFsdWUgb2YgSU5URUdSQUwgbWVhbnMKLXRoYXQgdGhlIGFwcGxpY2F0aW9uIHJlcXVpcmVzIHRoYXQgdGhlIGRhdGEgc2VudCBiZXR3ZWVuIHRoZQotY2xpZW50IGFuZCBzZXJ2ZXIgYmUgc2VudCBpbiBzdWNoIGEgd2F5IHRoYXQgaXQgY2FuJ3QgYmUKLWNoYW5nZWQgaW4gdHJhbnNpdC4gQ09ORklERU5USUFMIG1lYW5zIHRoYXQgdGhlIGFwcGxpY2F0aW9uCi1yZXF1aXJlcyB0aGF0IHRoZSBkYXRhIGJlIHRyYW5zbWl0dGVkIGluIGEgZmFzaGlvbiB0aGF0Ci1wcmV2ZW50cyBvdGhlciBlbnRpdGllcyBmcm9tIG9ic2VydmluZyB0aGUgY29udGVudHMgb2YgdGhlCi10cmFuc21pc3Npb24uIEluIG1vc3QgY2FzZXMsIHRoZSBwcmVzZW5jZSBvZiB0aGUgSU5URUdSQUwgb3IKLUNPTkZJREVOVElBTCBmbGFnIHdpbGwgaW5kaWNhdGUgdGhhdCB0aGUgdXNlIG9mIFNTTCBpcwotcmVxdWlyZWQuCi0KLVVzZWQgaW46IHVzZXItZGF0YS1jb25zdHJhaW50Ci0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik5PTkUiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iSU5URUdSQUwiLz4KLSAgICAgICAgPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0iQ09ORklERU5USUFMIi8+Ci0gICAgPC94c2Q6cmVzdHJpY3Rpb24+Ci0KLTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJ1c2VyLWRhdGEtY29uc3RyYWludFR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgdXNlci1kYXRhLWNvbnN0cmFpbnRUeXBlIGlzIHVzZWQgdG8gaW5kaWNhdGUgaG93Ci1kYXRhIGNvbW11bmljYXRlZCBiZXR3ZWVuIHRoZSBjbGllbnQgYW5kIGNvbnRhaW5lciBzaG91bGQgYmUKLXByb3RlY3RlZC4KLQotVXNlZCBpbjogc2VjdXJpdHktY29uc3RyYWludAotCi08L3hzZDpkb2N1bWVudGF0aW9uPgotPC94c2Q6YW5ub3RhdGlvbj4KLQotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InRyYW5zcG9ydC1ndWFyYW50ZWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnRyYW5zcG9ydC1ndWFyYW50ZWVUeXBlIi8+Ci0gICAgPC94c2Q6c2VxdWVuY2U+Ci0KLTwveHNkOmNvbXBsZXhUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJ3ZWItYXBwLXZlcnNpb25UeXBlIj4KLTx4c2Q6YW5ub3RhdGlvbj4KLTx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotVGhpcyB0eXBlIGNvbnRhaW5zIHRoZSByZWNvZ25pemVkIHZlcnNpb25zIG9mCi13ZWItYXBwbGljYXRpb24gc3VwcG9ydGVkLiBJdCBpcyB1c2VkIHRvIGRlc2lnbmF0ZSB0aGUKLXZlcnNpb24gb2YgdGhlIHdlYiBhcHBsaWNhdGlvbi4KLQotRXhhbXBsZToKLQotPHdlYi1hcHA+Ci0gICAgPHZlcnNpb24+Mi40PC92ZXJzaW9uPgotLi4uCi08L3dlYi1hcHA+Ci0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IjIuNCIvPgotICAgIDwveHNkOnJlc3RyaWN0aW9uPgotCi08L3hzZDpzaW1wbGVUeXBlPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0KLTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0id2ViLWFwcFR5cGUiPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkZXNjcmlwdGlvblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZGlzcGxheS1uYW1lIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpkaXNwbGF5LW5hbWVUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Imljb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmljb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImRpc3RyaWJ1dGFibGUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVtcHR5VHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iY29udGV4dC1wYXJhbSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6cGFyYW0tdmFsdWVUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSBjb250ZXh0LXBhcmFtIGVsZW1lbnQgY29udGFpbnMgdGhlIGRlY2xhcmF0aW9uCi0gICAgICAgIG9mIGEgd2ViIGFwcGxpY2F0aW9uJ3Mgc2VydmxldCBjb250ZXh0Ci0gICAgICAgIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlcnMuCi0KLSAgICAgICAgPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94c2Q6ZWxlbWVudD4KLQotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZmlsdGVyIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpmaWx0ZXJUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZmlsdGVyLW1hcHBpbmciCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmZpbHRlci1tYXBwaW5nVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJsaXN0ZW5lciIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bGlzdGVuZXJUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlcnZsZXQiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnNlcnZsZXRUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlcnZsZXQtbWFwcGluZyIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c2VydmxldC1tYXBwaW5nVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJzZXNzaW9uLWNvbmZpZyIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c2Vzc2lvbi1jb25maWdUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJtaW1lLW1hcHBpbmciCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOm1pbWUtbWFwcGluZ1R5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0id2VsY29tZS1maWxlLWxpc3QiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOndlbGNvbWUtZmlsZS1saXN0VHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZXJyb3ItcGFnZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZXJyb3ItcGFnZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ianNwLWNvbmZpZyIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6anNwLWNvbmZpZ1R5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InJlc291cmNlLWVudi1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnJlc291cmNlLWVudi1yZWZUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im1lc3NhZ2UtZGVzdGluYXRpb24tcmVmIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTptZXNzYWdlLWRlc3RpbmF0aW9uLXJlZlR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0icmVzb3VyY2UtcmVmIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTpyZXNvdXJjZS1yZWZUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InNlY3VyaXR5LWNvbnN0cmFpbnQiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnNlY3VyaXR5LWNvbnN0cmFpbnRUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImxvZ2luLWNvbmZpZyIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6bG9naW4tY29uZmlnVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0ic2VjdXJpdHktcm9sZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c2VjdXJpdHktcm9sZVR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iZW52LWVudHJ5IgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTplbnYtZW50cnlUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVqYi1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVqYi1yZWZUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImVqYi1sb2NhbC1yZWYiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmVqYi1sb2NhbC1yZWZUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9Im1lc3NhZ2UtZGVzdGluYXRpb24iCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOm1lc3NhZ2UtZGVzdGluYXRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImxvY2FsZS1lbmNvZGluZy1tYXBwaW5nLWxpc3QiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmxvY2FsZS1lbmNvZGluZy1tYXBwaW5nLWxpc3RUeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSIxIi8+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXBsb3ltZW50LWV4dGVuc2lvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVwbG95bWVudC1leHRlbnNpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9InZlcnNpb24iCi0gICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTp3ZWItYXBwLXZlcnNpb25UeXBlIgotICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJ3ZWItcmVzb3VyY2UtY29sbGVjdGlvblR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgd2ViLXJlc291cmNlLWNvbGxlY3Rpb25UeXBlIGlzIHVzZWQgdG8gaWRlbnRpZnkgYSBzdWJzZXQKLW9mIHRoZSByZXNvdXJjZXMgYW5kIEhUVFAgbWV0aG9kcyBvbiB0aG9zZSByZXNvdXJjZXMgd2l0aGluCi1hIHdlYiBhcHBsaWNhdGlvbiB0byB3aGljaCBhIHNlY3VyaXR5IGNvbnN0cmFpbnQgYXBwbGllcy4gSWYKLW5vIEhUVFAgbWV0aG9kcyBhcmUgc3BlY2lmaWVkLCB0aGVuIHRoZSBzZWN1cml0eSBjb25zdHJhaW50Ci1hcHBsaWVzIHRvIGFsbCBIVFRQIG1ldGhvZHMuCi0KLVVzZWQgaW46IHNlY3VyaXR5LWNvbnN0cmFpbnQKLQotPC94c2Q6ZG9jdW1lbnRhdGlvbj4KLTwveHNkOmFubm90YXRpb24+Ci0KLSAgICA8eHNkOnNlcXVlbmNlPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0id2ViLXJlc291cmNlLW5hbWUiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOnN0cmluZyI+Ci0gICAgICAgIDx4c2Q6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzZDpkb2N1bWVudGF0aW9uPgotCi0gICAgICAgIFRoZSB3ZWItcmVzb3VyY2UtbmFtZSBjb250YWlucyB0aGUgbmFtZSBvZiB0aGlzIHdlYgotICAgICAgICByZXNvdXJjZSBjb2xsZWN0aW9uLgotCi0gICAgICAgIDwveHNkOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHNkOmFubm90YXRpb24+Ci0gICAgICAgIDwveHNkOmVsZW1lbnQ+Ci0gICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJkZXNjcmlwdGlvbiIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6ZGVzY3JpcHRpb25UeXBlIgotICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9InVybC1wYXR0ZXJuIgotICAgICAgICAgICAgICAgICAgICAgdHlwZT0iajJlZTp1cmwtcGF0dGVyblR5cGUiCi0gICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iaHR0cC1tZXRob2QiCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJqMmVlOmh0dHAtbWV0aG9kVHlwZSIKLSAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzZDpzZXF1ZW5jZT4KLQotPC94c2Q6Y29tcGxleFR5cGU+Ci0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLQotPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJ3ZWxjb21lLWZpbGUtbGlzdFR5cGUiPgotPHhzZDphbm5vdGF0aW9uPgotPHhzZDpkb2N1bWVudGF0aW9uPgotCi1UaGUgd2VsY29tZS1maWxlLWxpc3QgY29udGFpbnMgYW4gb3JkZXJlZCBsaXN0IG9mIHdlbGNvbWUKLWZpbGVzIGVsZW1lbnRzLgotCi1Vc2VkIGluOiB3ZWItYXBwCi0KLTwveHNkOmRvY3VtZW50YXRpb24+Ci08L3hzZDphbm5vdGF0aW9uPgotCi0gICAgPHhzZDpzZXF1ZW5jZT4KLSAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IndlbGNvbWUtZmlsZSIKLSAgICAgICAgICAgICAgICAgICAgIHR5cGU9ImoyZWU6c3RyaW5nIgotICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICA8eHNkOmFubm90YXRpb24+Ci0gICAgICAgIDx4c2Q6ZG9jdW1lbnRhdGlvbj4KLQotICAgICAgICBUaGUgd2VsY29tZS1maWxlIGVsZW1lbnQgY29udGFpbnMgZmlsZSBuYW1lIHRvIHVzZQotICAgICAgICBhcyBhIGRlZmF1bHQgd2VsY29tZSBmaWxlLCBzdWNoIGFzIGluZGV4Lmh0bWwKLQotICAgICAgICA8L3hzZDpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzZDphbm5vdGF0aW9uPgotICAgICAgICA8L3hzZDplbGVtZW50PgotICAgIDwveHNkOnNlcXVlbmNlPgotCi08L3hzZDpjb21wbGV4VHlwZT4KLQotPC94c2Q6c2NoZW1hPgotCmRpZmYgLS1naXQgYS92Mi94a2l0L3NjaGVtYXMvczRzL1hNTC54c2QgYi92Mi94a2l0L3NjaGVtYXMvczRzL1hNTC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmOGFkZDkuLjAwMDAwMDAKLS0tIGEvdjIveGtpdC9zY2hlbWFzL3M0cy9YTUwueHNkCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0nMS4wJz8+Ci08IURPQ1RZUEUgeHM6c2NoZW1hIFBVQkxJQyAiLS8vVzNDLy9EVEQgWE1MU0NIRU1BIDIwMDEwMi8vRU4iICJYTUxTY2hlbWEuZHRkIiA+Ci08eHM6c2NoZW1hIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbDpsYW5nPSJlbiI+Ci0KLSA8eHM6YW5ub3RhdGlvbj4KLSAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBTZWUgaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLmh0bWwgYW5kCi0gICBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIG5hbWVzcGFjZS4KLSAgPC94czpkb2N1bWVudGF0aW9uPgotIDwveHM6YW5ub3RhdGlvbj4KLQotIDx4czphbm5vdGF0aW9uPgotICA8eHM6ZG9jdW1lbnRhdGlvbj5UaGlzIHNjaGVtYSBkZWZpbmVzIGF0dHJpYnV0ZXMgYW5kIGFuIGF0dHJpYnV0ZSBncm91cAotICAgICAgICBzdWl0YWJsZSBmb3IgdXNlIGJ5Ci0gICAgICAgIHNjaGVtYXMgd2lzaGluZyB0byBhbGxvdyB4bWw6YmFzZSwgeG1sOmxhbmcgb3IgeG1sOnNwYWNlIGF0dHJpYnV0ZXMKLSAgICAgICAgb24gZWxlbWVudHMgdGhleSBkZWZpbmUuCi0KLSAgICAgICAgVG8gZW5hYmxlIHRoaXMsIHN1Y2ggYSBzY2hlbWEgbXVzdCBpbXBvcnQgdGhpcyBzY2hlbWEKLSAgICAgICAgZm9yIHRoZSBYTUwgbmFtZXNwYWNlLCBlLmcuIGFzIGZvbGxvd3M6Ci0gICAgICAgICZsdDtzY2hlbWEgLiAuIC4+Ci0gICAgICAgICAuIC4gLgotICAgICAgICAgJmx0O2ltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIKLSAgICAgICAgICAgICAgICAgICAgc2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDMveG1sLnhzZCIvPgotCi0gICAgICAgIFN1YnNlcXVlbnRseSwgcXVhbGlmaWVkIHJlZmVyZW5jZSB0byBhbnkgb2YgdGhlIGF0dHJpYnV0ZXMKLSAgICAgICAgb3IgdGhlIGdyb3VwIGRlZmluZWQgYmVsb3cgd2lsbCBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdCwgZS5nLgotCi0gICAgICAgICZsdDt0eXBlIC4gLiAuPgotICAgICAgICAgLiAuIC4KLSAgICAgICAgICZsdDthdHRyaWJ1dGVHcm91cCByZWY9InhtbDpzcGVjaWFsQXR0cnMiLz4KLSAKLSAgICAgICAgIHdpbGwgZGVmaW5lIGEgdHlwZSB3aGljaCB3aWxsIHNjaGVtYS12YWxpZGF0ZSBhbiBpbnN0YW5jZQotICAgICAgICAgZWxlbWVudCB3aXRoIGFueSBvZiB0aG9zZSBhdHRyaWJ1dGVzPC94czpkb2N1bWVudGF0aW9uPgotIDwveHM6YW5ub3RhdGlvbj4KLQotIDx4czphbm5vdGF0aW9uPgotICA8eHM6ZG9jdW1lbnRhdGlvbj5JbiBrZWVwaW5nIHdpdGggdGhlIFhNTCBTY2hlbWEgV0cncyBzdGFuZGFyZCB2ZXJzaW9uaW5nCi0gICBwb2xpY3ksIHRoaXMgc2NoZW1hIGRvY3VtZW50IHdpbGwgcGVyc2lzdCBhdAotICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS8wMy94bWwueHNkLgotICAgQXQgdGhlIGRhdGUgb2YgaXNzdWUgaXQgY2FuIGFsc28gYmUgZm91bmQgYXQKLSAgIGh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZC4KLSAgIFRoZSBzY2hlbWEgZG9jdW1lbnQgYXQgdGhhdCBVUkkgbWF5IGhvd2V2ZXIgY2hhbmdlIGluIHRoZSBmdXR1cmUsCi0gICBpbiBvcmRlciB0byByZW1haW4gY29tcGF0aWJsZSB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBYTUwgU2NoZW1hCi0gICBpdHNlbGYuICBJbiBvdGhlciB3b3JkcywgaWYgdGhlIFhNTCBTY2hlbWEgbmFtZXNwYWNlIGNoYW5nZXMsIHRoZSB2ZXJzaW9uCi0gICBvZiB0aGlzIGRvY3VtZW50IGF0Ci0gICBodHRwOi8vd3d3LnczLm9yZy8yMDAxL3htbC54c2Qgd2lsbCBjaGFuZ2UKLSAgIGFjY29yZGluZ2x5OyB0aGUgdmVyc2lvbiBhdAotICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS8wMy94bWwueHNkIHdpbGwgbm90IGNoYW5nZS4KLSAgPC94czpkb2N1bWVudGF0aW9uPgotIDwveHM6YW5ub3RhdGlvbj4KLQotIDx4czphdHRyaWJ1dGUgbmFtZT0ibGFuZyIgdHlwZT0ieHM6bGFuZ3VhZ2UiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPkluIGR1ZSBjb3Vyc2UsIHdlIHNob3VsZCBpbnN0YWxsIHRoZSByZWxldmFudCBJU08gMi0gYW5kIDMtbGV0dGVyCi0gICAgICAgICBjb2RlcyBhcyB0aGUgZW51bWVyYXRlZCBwb3NzaWJsZSB2YWx1ZXMgLiAuIC48L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSA8L3hzOmF0dHJpYnV0ZT4KLQotIDx4czphdHRyaWJ1dGUgbmFtZT0ic3BhY2UiIGRlZmF1bHQ9InByZXNlcnZlIj4KLSAgPHhzOnNpbXBsZVR5cGU+Ci0gICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6TkNOYW1lIj4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImRlZmF1bHQiLz4KLSAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InByZXNlcnZlIi8+Ci0gICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0gPC94czphdHRyaWJ1dGU+Ci0KLSA8eHM6YXR0cmlidXRlIG5hbWU9ImJhc2UiIHR5cGU9InhzOmFueVVSSSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+U2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL3htbGJhc2UvIGZvcgotICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBhdHRyaWJ1dGUuPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czphdHRyaWJ1dGU+Ci0KLSA8eHM6YXR0cmlidXRlR3JvdXAgbmFtZT0ic3BlY2lhbEF0dHJzIj4KLSAgPHhzOmF0dHJpYnV0ZSByZWY9InhtbDpiYXNlIi8+Ci0gIDx4czphdHRyaWJ1dGUgcmVmPSJ4bWw6bGFuZyIvPgotICA8eHM6YXR0cmlidXRlIHJlZj0ieG1sOnNwYWNlIi8+Ci0gPC94czphdHRyaWJ1dGVHcm91cD4KLQotPC94czpzY2hlbWE+CmRpZmYgLS1naXQgYS92Mi94a2l0L3NjaGVtYXMvczRzL1hNTFNjaGVtYS54c2QgYi92Mi94a2l0L3NjaGVtYXMvczRzL1hNTFNjaGVtYS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmNzcyNTEuLjAwMDAwMDAKLS0tIGEvdjIveGtpdC9zY2hlbWFzL3M0cy9YTUxTY2hlbWEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjUwMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgotPCEtLSBYTUwgU2NoZW1hIHNjaGVtYSBmb3IgWE1MIFNjaGVtYXM6IFBhcnQgMTogU3RydWN0dXJlcyAtLT4KLTwhLS0gTm90ZSB0aGlzIHNjaGVtYSBpcyBOT1QgdGhlIG5vcm1hdGl2ZSBzdHJ1Y3R1cmVzIHNjaGVtYS4gLS0+Ci0KLTwhLS0gVGhlIHByb3NlIGNvcHkgaW4gdGhlIHN0cnVjdHVyZXMgUkVDIGlzIHRoZSBub3JtYXRpdmUgLS0+Ci0KLTwhLS0gdmVyc2lvbiAod2hpY2ggc2hvdWxkbid0IGRpZmZlciBmcm9tIHRoaXMgb25lIGV4Y2VwdCBmb3IgLS0+Ci0KLTwhLS0gdGhpcyBjb21tZW50IGFuZCBlbnRpdHkgZXhwYW5zaW9ucywgYnV0IGp1c3QgaW4gY2FzZSAtLT4KLQotPCFET0NUWVBFIHhzOnNjaGVtYSBQVUJMSUMgIi0vL1czQy8vRFREIFhNTFNDSEVNQSAyMDAxMDIvL0VOIiAiWE1MU2NoZW1hLmR0ZCIgWwotCi08IS0tIHByb3ZpZGUgSUQgdHlwZSBpbmZvcm1hdGlvbiBldmVuIGZvciBwYXJzZXJzIHdoaWNoIG9ubHkgcmVhZCB0aGUKLSAgICAgaW50ZXJuYWwgc3Vic2V0IC0tPgotPCFBVFRMSVNUIHhzOnNjaGVtYSAgICAgICAgICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOmNvbXBsZXhUeXBlICAgICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOmNvbXBsZXhDb250ZW50ICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOnNpbXBsZUNvbnRlbnQgICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOmV4dGVuc2lvbiAgICAgICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOmVsZW1lbnQgICAgICAgICBpZCAgSUQgICNJTVBMSUVEPgotPCFBVFRMSVNUIHhzOmdyb3VwICAgICAgICAgICBpZCAgSUQgICNJTVBMSUVEPiAKLTwhQVRUTElTVCB4czphbGwgICAgICAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czpjaG9pY2UgICAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czpzZXF1ZW5jZSAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czphbnkgICAgICAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czphbnlBdHRyaWJ1dGUgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czphdHRyaWJ1dGUgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czphdHRyaWJ1dGVHcm91cCAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czp1bmlxdWUgICAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czprZXkgICAgICAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czprZXlyZWYgICAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czpzZWxlY3RvciAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czpmaWVsZCAgICAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czppbmNsdWRlICAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czppbXBvcnQgICAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czpyZWRlZmluZSAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhQVRUTElTVCB4czpub3RhdGlvbiAgICAgICAgaWQgIElEICAjSU1QTElFRD4KLTwhLS0KLSAgICAga2VlcCB0aGlzIHNjaGVtYSBYTUwxLjAgRFREIHZhbGlkCi0gIC0tPgotICAgICAgICA8IUVOVElUWSAlIHNjaGVtYUF0dHJzICd4bWxuczpoZnAgQ0RBVEEgI0lNUExJRUQnPgotCi0gICAgICAgIDwhRUxFTUVOVCBoZnA6aGFzRmFjZXQgRU1QVFk+Ci0gICAgICAgIDwhQVRUTElTVCBoZnA6aGFzRmFjZXQKLSAgICAgICAgICAgICAgICBuYW1lIE5NVE9LRU4gI1JFUVVJUkVEPgotCi0gICAgICAgIDwhRUxFTUVOVCBoZnA6aGFzUHJvcGVydHkgRU1QVFk+Ci0gICAgICAgIDwhQVRUTElTVCBoZnA6aGFzUHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lIE5NVE9LRU4gI1JFUVVJUkVECi0gICAgICAgICAgICAgICAgdmFsdWUgQ0RBVEEgI1JFUVVJUkVEPgotPCEtLQotICAgICAgICBNYWtlIHN1cmUgdGhhdCBwcm9jZXNzb3JzIHRoYXQgZG8gbm90IHJlYWQgdGhlIGV4dGVybmFsCi0gICAgICAgIHN1YnNldCB3aWxsIGtub3cgYWJvdXQgdGhlIHZhcmlvdXMgSURzIHdlIGRlY2xhcmUKLSAgLS0+Ci0gICAgICAgIDwhQVRUTElTVCB4czpzaW1wbGVUeXBlIGlkIElEICNJTVBMSUVEPgotICAgICAgICA8IUFUVExJU1QgeHM6bWF4RXhjbHVzaXZlIGlkIElEICNJTVBMSUVEPgotICAgICAgICA8IUFUVExJU1QgeHM6bWluRXhjbHVzaXZlIGlkIElEICNJTVBMSUVEPgotICAgICAgICA8IUFUVExJU1QgeHM6bWF4SW5jbHVzaXZlIGlkIElEICNJTVBMSUVEPgotICAgICAgICA8IUFUVExJU1QgeHM6bWluSW5jbHVzaXZlIGlkIElEICNJTVBMSUVEPgotICAgICAgICA8IUFUVExJU1QgeHM6dG90YWxEaWdpdHMgaWQgSUQgI0lNUExJRUQ+Ci0gICAgICAgIDwhQVRUTElTVCB4czpmcmFjdGlvbkRpZ2l0cyBpZCBJRCAjSU1QTElFRD4KLSAgICAgICAgPCFBVFRMSVNUIHhzOmxlbmd0aCBpZCBJRCAjSU1QTElFRD4KLSAgICAgICAgPCFBVFRMSVNUIHhzOm1pbkxlbmd0aCBpZCBJRCAjSU1QTElFRD4KLSAgICAgICAgPCFBVFRMSVNUIHhzOm1heExlbmd0aCBpZCBJRCAjSU1QTElFRD4KLSAgICAgICAgPCFBVFRMSVNUIHhzOmVudW1lcmF0aW9uIGlkIElEICNJTVBMSUVEPgotICAgICAgICA8IUFUVExJU1QgeHM6cGF0dGVybiBpZCBJRCAjSU1QTElFRD4KLSAgICAgICAgPCFBVFRMSVNUIHhzOmFwcGluZm8gaWQgSUQgI0lNUExJRUQ+Ci0gICAgICAgIDwhQVRUTElTVCB4czpkb2N1bWVudGF0aW9uIGlkIElEICNJTVBMSUVEPgotICAgICAgICA8IUFUVExJU1QgeHM6bGlzdCBpZCBJRCAjSU1QTElFRD4KLSAgICAgICAgPCFBVFRMSVNUIHhzOnVuaW9uIGlkIElEICNJTVBMSUVEPgotICAgICAgICBdPgotPHhzOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiBibG9ja0RlZmF1bHQ9IiNhbGwiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB2ZXJzaW9uPSIxLjAiIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sOmxhbmc9IkVOIiB4bWxuczpoZnA9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWhhc0ZhY2V0QW5kUHJvcGVydHkiPgotIDx4czphbm5vdGF0aW9uPgotICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICBQYXJ0IDEgdmVyc2lvbjogSWQ6IFhNTFNjaGVtYS54c2QsdiAxLjUzIDIwMDMvMDIvMjQgMTc6NDA6MDcgaHQgRXhwIAotICAgIFBhcnQgMiB2ZXJzaW9uOiBJZDogZGF0YXR5cGVzLnhzZCx2IDEuNTggMjAwMy8wMi8yNiAxNDowMToyOSBodCBFeHAgCi0gIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSA8L3hzOmFubm90YXRpb24+Ci0KLQotIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvR3JvdXAvMjAwMi8wOS94bWxzY2hlbWEtMS9zdHJ1Y3R1cmVzLXdpdGgtZXJyYXRhLmh0bWwiPgotICAgVGhlIHNjaGVtYSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgZG9jdW1lbnQgaXMgbm9ybWF0aXZlLAotICAgd2l0aCByZXNwZWN0IHRvIHRoZSBzeW50YWN0aWMgY29uc3RyYWludHMgaXQgZXhwcmVzc2VzIGluIHRoZQotICAgWE1MIFNjaGVtYSBsYW5ndWFnZS4gIFRoZSBkb2N1bWVudGF0aW9uICh3aXRoaW4gJmx0O2RvY3VtZW50YXRpb24+IGVsZW1lbnRzKQotICAgYmVsb3csIGlzIG5vdCBub3JtYXRpdmUsIGJ1dCByYXRoZXIgaGlnaGxpZ2h0cyBpbXBvcnRhbnQgYXNwZWN0cyBvZgotICAgdGhlIFczQyBSZWNvbW1lbmRhdGlvbiBvZiB3aGljaCB0aGlzIGlzIGEgcGFydDwveHM6ZG9jdW1lbnRhdGlvbj4KLSA8L3hzOmFubm90YXRpb24+Ci0KLSA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgVGhlIHNpbXBsZVR5cGUgZWxlbWVudCBhbmQgYWxsIG9mIGl0cyBtZW1iZXJzIGFyZSBkZWZpbmVkCi0gICAgICB0b3dhcmRzIHRoZSBlbmQgb2YgdGhpcyBzY2hlbWEgZG9jdW1lbnQ8L3hzOmRvY3VtZW50YXRpb24+Ci0gPC94czphbm5vdGF0aW9uPgotCi0gPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIgc2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCI+Ci0gICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgR2V0IGFjY2VzcyB0byB0aGUgeG1sOiBhdHRyaWJ1dGUgZ3JvdXBzIGZvciB4bWw6bGFuZwotICAgICAgIGFzIGRlY2xhcmVkIG9uICdzY2hlbWEnIGFuZCAnZG9jdW1lbnRhdGlvbicgYmVsb3cKLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgPC94czphbm5vdGF0aW9uPgotIDwveHM6aW1wb3J0PgotCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9Im9wZW5BdHRycyI+Ci0gICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgVGhpcyB0eXBlIGlzIGV4dGVuZGVkIGJ5IGFsbW9zdCBhbGwgc2NoZW1hIHR5cGVzCi0gICAgICAgdG8gYWxsb3cgYXR0cmlidXRlcyBmcm9tIG90aGVyIG5hbWVzcGFjZXMgdG8gYmUKLSAgICAgICBhZGRlZCB0byB1c2VyIHNjaGVtYXMuCi0gICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgIDwveHM6YW5ub3RhdGlvbj4KLSAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVR5cGUiPgotICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgPC94czpjb21wbGV4Q29udGVudD4KLSA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImFubm90YXRlZCI+Ci0gICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgVGhpcyB0eXBlIGlzIGV4dGVuZGVkIGJ5IGFsbCB0eXBlcyB3aGljaCBhbGxvdyBhbm5vdGF0aW9uCi0gICAgICAgb3RoZXIgdGhhbiAmbHQ7c2NoZW1hJmd0OyBpdHNlbGYKLSAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgPC94czphbm5vdGF0aW9uPgotICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOm9wZW5BdHRycyI+Ci0gICAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICA8L3hzOnNlcXVlbmNlPgotICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InhzOklEIi8+Ci0gICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgPC94czpjb21wbGV4Q29udGVudD4KLSA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmdyb3VwIG5hbWU9InNjaGVtYVRvcCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBUaGlzIGdyb3VwIGlzIGZvciB0aGUKLSAgIGVsZW1lbnRzIHdoaWNoIG9jY3VyIGZyZWVseSBhdCB0aGUgdG9wIGxldmVsIG9mIHNjaGVtYXMuCi0gICBBbGwgb2YgdGhlaXIgdHlwZXMgYXJlIGJhc2VkIG9uIHRoZSAiYW5ub3RhdGVkIiB0eXBlIGJ5IGV4dGVuc2lvbi48L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNob2ljZT4KLSAgIDx4czpncm91cCByZWY9InhzOnJlZGVmaW5hYmxlIi8+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOmVsZW1lbnQiLz4KLSAgIDx4czplbGVtZW50IHJlZj0ieHM6YXR0cmlidXRlIi8+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOm5vdGF0aW9uIi8+Ci0gIDwveHM6Y2hvaWNlPgotIDwveHM6Z3JvdXA+Ci0gCi0gPHhzOmdyb3VwIG5hbWU9InJlZGVmaW5hYmxlIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgIFRoaXMgZ3JvdXAgaXMgZm9yIHRoZQotICAgZWxlbWVudHMgd2hpY2ggY2FuIHNlbGYtcmVkZWZpbmUgKHNlZSAmbHQ7cmVkZWZpbmU+IGJlbG93KS48L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNob2ljZT4KLSAgIDx4czplbGVtZW50IHJlZj0ieHM6c2ltcGxlVHlwZSIvPgotICAgPHhzOmVsZW1lbnQgcmVmPSJ4czpjb21wbGV4VHlwZSIvPgotICAgPHhzOmVsZW1lbnQgcmVmPSJ4czpncm91cCIvPgotICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphdHRyaWJ1dGVHcm91cCIvPgotICA8L3hzOmNob2ljZT4KLSA8L3hzOmdyb3VwPgotCi0gPHhzOnNpbXBsZVR5cGUgbmFtZT0iZm9ybUNob2ljZSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBBIHV0aWxpdHkgdHlwZSwgbm90IGZvciBwdWJsaWMgdXNlPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLSAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icXVhbGlmaWVkIi8+Ci0gICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InVucXVhbGlmaWVkIi8+Ci0gIDwveHM6cmVzdHJpY3Rpb24+Ci0gPC94czpzaW1wbGVUeXBlPgotCi0gPHhzOnNpbXBsZVR5cGUgbmFtZT0icmVkdWNlZERlcml2YXRpb25Db250cm9sIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgIEEgdXRpbGl0eSB0eXBlLCBub3QgZm9yIHB1YmxpYyB1c2U8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmRlcml2YXRpb25Db250cm9sIj4KLSAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZXh0ZW5zaW9uIi8+Ci0gICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlc3RyaWN0aW9uIi8+Ci0gIDwveHM6cmVzdHJpY3Rpb24+Ci0gPC94czpzaW1wbGVUeXBlPgotCi0gPHhzOnNpbXBsZVR5cGUgbmFtZT0iZGVyaXZhdGlvblNldCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBBIHV0aWxpdHkgdHlwZSwgbm90IGZvciBwdWJsaWMgdXNlPC94czpkb2N1bWVudGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAjYWxsIG9yIChwb3NzaWJseSBlbXB0eSkgc3Vic2V0IG9mIHtleHRlbnNpb24sIHJlc3RyaWN0aW9ufTwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6dW5pb24+Ci0gICA8eHM6c2ltcGxlVHlwZT4gICAgCi0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIjYWxsIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgIDwveHM6c2ltcGxlVHlwZT4KLSAgIDx4czpzaW1wbGVUeXBlPgotICAgIDx4czpsaXN0IGl0ZW1UeXBlPSJ4czpyZWR1Y2VkRGVyaXZhdGlvbkNvbnRyb2wiLz4KLSAgIDwveHM6c2ltcGxlVHlwZT4KLSAgPC94czp1bmlvbj4KLSA8L3hzOnNpbXBsZVR5cGU+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJzY2hlbWEiIGlkPSJzY2hlbWEiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LXNjaGVtYSIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOm9wZW5BdHRycyI+Ci0gICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czppbmNsdWRlIi8+Ci0gICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czppbXBvcnQiLz4KLSAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzOnJlZGVmaW5lIi8+Ci0gICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIi8+Ci0gICAgICA8L3hzOmNob2ljZT4KLSAgICAgIDx4czpzZXF1ZW5jZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICA8eHM6Z3JvdXAgcmVmPSJ4czpzY2hlbWFUb3AiLz4KLSAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idGFyZ2V0TmFtZXNwYWNlIiB0eXBlPSJ4czphbnlVUkkiLz4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIiB0eXBlPSJ4czpub3JtYWxpemVkU3RyaW5nIi8+Ci0gICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZmluYWxEZWZhdWx0IiB0eXBlPSJ4czpkZXJpdmF0aW9uU2V0IiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSIiLz4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJibG9ja0RlZmF1bHQiIHR5cGU9InhzOmJsb2NrU2V0IiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSIiLz4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJhdHRyaWJ1dGVGb3JtRGVmYXVsdCIgdHlwZT0ieHM6Zm9ybUNob2ljZSIgdXNlPSJvcHRpb25hbCIgZGVmYXVsdD0idW5xdWFsaWZpZWQiLz4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJlbGVtZW50Rm9ybURlZmF1bHQiIHR5cGU9InhzOmZvcm1DaG9pY2UiIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9InVucXVhbGlmaWVkIi8+Ci0gICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InhzOklEIi8+Ci0gICAgIDx4czphdHRyaWJ1dGUgcmVmPSJ4bWw6bGFuZyIvPgotICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6a2V5IG5hbWU9ImVsZW1lbnQiPgotICAgPHhzOnNlbGVjdG9yIHhwYXRoPSJ4czplbGVtZW50Ii8+Ci0gICA8eHM6ZmllbGQgeHBhdGg9IkBuYW1lIi8+Ci0gIDwveHM6a2V5PgotCi0gIDx4czprZXkgbmFtZT0iYXR0cmlidXRlIj4KLSAgIDx4czpzZWxlY3RvciB4cGF0aD0ieHM6YXR0cmlidXRlIi8+Ci0gICA8eHM6ZmllbGQgeHBhdGg9IkBuYW1lIi8+Ci0gIDwveHM6a2V5PgotCi0gIDx4czprZXkgbmFtZT0idHlwZSI+Ci0gICA8eHM6c2VsZWN0b3IgeHBhdGg9InhzOmNvbXBsZXhUeXBlfHhzOnNpbXBsZVR5cGUiLz4KLSAgIDx4czpmaWVsZCB4cGF0aD0iQG5hbWUiLz4KLSAgPC94czprZXk+Ci0gCi0gIDx4czprZXkgbmFtZT0iZ3JvdXAiPgotICAgPHhzOnNlbGVjdG9yIHhwYXRoPSJ4czpncm91cCIvPgotICAgPHhzOmZpZWxkIHhwYXRoPSJAbmFtZSIvPgotICA8L3hzOmtleT4KLSAKLSAgPHhzOmtleSBuYW1lPSJhdHRyaWJ1dGVHcm91cCI+Ci0gICA8eHM6c2VsZWN0b3IgeHBhdGg9InhzOmF0dHJpYnV0ZUdyb3VwIi8+Ci0gICA8eHM6ZmllbGQgeHBhdGg9IkBuYW1lIi8+Ci0gIDwveHM6a2V5PgotIAotICA8eHM6a2V5IG5hbWU9Im5vdGF0aW9uIj4KLSAgIDx4czpzZWxlY3RvciB4cGF0aD0ieHM6bm90YXRpb24iLz4KLSAgIDx4czpmaWVsZCB4cGF0aD0iQG5hbWUiLz4KLSAgPC94czprZXk+Ci0KLSAgPHhzOmtleSBuYW1lPSJpZGVudGl0eUNvbnN0cmFpbnQiPgotICAgPHhzOnNlbGVjdG9yIHhwYXRoPSIuLy94czprZXl8Li8veHM6dW5pcXVlfC4vL3hzOmtleXJlZiIvPgotICAgPHhzOmZpZWxkIHhwYXRoPSJAbmFtZSIvPgotICA8L3hzOmtleT4KLQotIDwveHM6ZWxlbWVudD4KLQotIDx4czpzaW1wbGVUeXBlIG5hbWU9ImFsbE5OSSI+Ci0gIDx4czphbm5vdGF0aW9uPjx4czpkb2N1bWVudGF0aW9uPgotICAgZm9yIG1heE9jY3VyczwveHM6ZG9jdW1lbnRhdGlvbj48L3hzOmFubm90YXRpb24+Ci0gIDx4czp1bmlvbiBtZW1iZXJUeXBlcz0ieHM6bm9uTmVnYXRpdmVJbnRlZ2VyIj4KLSAgIDx4czpzaW1wbGVUeXBlPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLSAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgPC94czpzaW1wbGVUeXBlPgotICA8L3hzOnVuaW9uPgotIDwveHM6c2ltcGxlVHlwZT4KLQotIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJvY2N1cnMiPgotICA8eHM6YW5ub3RhdGlvbj48eHM6ZG9jdW1lbnRhdGlvbj4KLSAgIGZvciBhbGwgcGFydGljbGVzPC94czpkb2N1bWVudGF0aW9uPjwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtaW5PY2N1cnMiIHR5cGU9InhzOm5vbk5lZ2F0aXZlSW50ZWdlciIgdXNlPSJvcHRpb25hbCIgZGVmYXVsdD0iMSIvPgotICA8eHM6YXR0cmlidXRlIG5hbWU9Im1heE9jY3VycyIgdHlwZT0ieHM6YWxsTk5JIiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSIxIi8+Ci0gPC94czphdHRyaWJ1dGVHcm91cD4KLQotIDx4czphdHRyaWJ1dGVHcm91cCBuYW1lPSJkZWZSZWYiPgotICA8eHM6YW5ub3RhdGlvbj48eHM6ZG9jdW1lbnRhdGlvbj4KLSAgIGZvciBlbGVtZW50LCBncm91cCBhbmQgYXR0cmlidXRlR3JvdXAsCi0gICB3aGljaCBib3RoIGRlZmluZSBhbmQgcmVmZXJlbmNlPC94czpkb2N1bWVudGF0aW9uPjwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpOQ05hbWUiLz4KLSAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZWYiIHR5cGU9InhzOlFOYW1lIi8+Ci0gPC94czphdHRyaWJ1dGVHcm91cD4KLQotIDx4czpncm91cCBuYW1lPSJ0eXBlRGVmUGFydGljbGUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICdjb21wbGV4VHlwZScgdXNlcyB0aGlzPC94czpkb2N1bWVudGF0aW9uPjwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNob2ljZT4KLSAgIDx4czplbGVtZW50IG5hbWU9Imdyb3VwIiB0eXBlPSJ4czpncm91cFJlZiIvPgotICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbGwiLz4KLSAgIDx4czplbGVtZW50IHJlZj0ieHM6Y2hvaWNlIi8+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOnNlcXVlbmNlIi8+Ci0gIDwveHM6Y2hvaWNlPgotIDwveHM6Z3JvdXA+Ci0gCi0gCi0KLSA8eHM6Z3JvdXAgbmFtZT0ibmVzdGVkUGFydGljbGUiPgotICA8eHM6Y2hvaWNlPgotICAgPHhzOmVsZW1lbnQgbmFtZT0iZWxlbWVudCIgdHlwZT0ieHM6bG9jYWxFbGVtZW50Ii8+Ci0gICA8eHM6ZWxlbWVudCBuYW1lPSJncm91cCIgdHlwZT0ieHM6Z3JvdXBSZWYiLz4KLSAgIDx4czplbGVtZW50IHJlZj0ieHM6Y2hvaWNlIi8+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOnNlcXVlbmNlIi8+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOmFueSIvPgotICA8L3hzOmNob2ljZT4KLSA8L3hzOmdyb3VwPgotIAotIDx4czpncm91cCBuYW1lPSJwYXJ0aWNsZSI+Ci0gIDx4czpjaG9pY2U+Ci0gICA8eHM6ZWxlbWVudCBuYW1lPSJlbGVtZW50IiB0eXBlPSJ4czpsb2NhbEVsZW1lbnQiLz4KLSAgIDx4czplbGVtZW50IG5hbWU9Imdyb3VwIiB0eXBlPSJ4czpncm91cFJlZiIvPgotICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbGwiLz4KLSAgIDx4czplbGVtZW50IHJlZj0ieHM6Y2hvaWNlIi8+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOnNlcXVlbmNlIi8+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOmFueSIvPgotICA8L3hzOmNob2ljZT4KLSA8L3hzOmdyb3VwPgotIAotIDx4czpjb21wbGV4VHlwZSBuYW1lPSJhdHRyaWJ1dGUiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmFubm90YXRlZCI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCBuYW1lPSJzaW1wbGVUeXBlIiBtaW5PY2N1cnM9IjAiIHR5cGU9InhzOmxvY2FsU2ltcGxlVHlwZSIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ieHM6ZGVmUmVmIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB0eXBlPSJ4czpRTmFtZSIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXNlIiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJvcHRpb25hbCI+Ci0gICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgotICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icHJvaGliaXRlZCIvPgotICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ib3B0aW9uYWwiLz4KLSAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlcXVpcmVkIi8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgPC94czphdHRyaWJ1dGU+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkZWZhdWx0IiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZpeGVkIiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZvcm0iIHR5cGU9InhzOmZvcm1DaG9pY2UiLz4KLSAgIDwveHM6ZXh0ZW5zaW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0gCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRvcExldmVsQXR0cmlidXRlIj4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmF0dHJpYnV0ZSI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICA8eHM6ZWxlbWVudCBuYW1lPSJzaW1wbGVUeXBlIiBtaW5PY2N1cnM9IjAiIHR5cGU9InhzOmxvY2FsU2ltcGxlVHlwZSIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZWYiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZm9ybSIgdXNlPSJwcm9oaWJpdGVkIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1c2UiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6TkNOYW1lIi8+Ci0gICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0KLSA8eHM6Z3JvdXAgbmFtZT0iYXR0ckRlY2xzIj4KLSAgPHhzOnNlcXVlbmNlPgotICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICA8eHM6ZWxlbWVudCBuYW1lPSJhdHRyaWJ1dGUiIHR5cGU9InhzOmF0dHJpYnV0ZSIvPgotICAgIDx4czplbGVtZW50IG5hbWU9ImF0dHJpYnV0ZUdyb3VwIiB0eXBlPSJ4czphdHRyaWJ1dGVHcm91cFJlZiIvPgotICAgPC94czpjaG9pY2U+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOmFueUF0dHJpYnV0ZSIgbWluT2NjdXJzPSIwIi8+Ci0gIDwveHM6c2VxdWVuY2U+Ci0gPC94czpncm91cD4KLQotIDx4czplbGVtZW50IG5hbWU9ImFueUF0dHJpYnV0ZSIgdHlwZT0ieHM6d2lsZGNhcmQiIGlkPSJhbnlBdHRyaWJ1dGUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2VsZW1lbnQtYW55QXR0cmlidXRlIi8+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6Z3JvdXAgbmFtZT0iY29tcGxleFR5cGVNb2RlbCI+Ci0gIDx4czpjaG9pY2U+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9InhzOnNpbXBsZUNvbnRlbnQiLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0ieHM6Y29tcGxleENvbnRlbnQiLz4KLSAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBUaGlzIGJyYW5jaCBpcyBzaG9ydCBmb3IKLSAgICZsdDtjb21wbGV4Q29udGVudD4KLSAgICZsdDtyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4KLSAgIC4uLgotICAgJmx0Oy9yZXN0cmljdGlvbj4KLSAgICZsdDsvY29tcGxleENvbnRlbnQ+PC94czpkb2N1bWVudGF0aW9uPgotICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICA8eHM6Z3JvdXAgcmVmPSJ4czp0eXBlRGVmUGFydGljbGUiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgIDx4czpncm91cCByZWY9InhzOmF0dHJEZWNscyIvPgotICAgICAgPC94czpzZXF1ZW5jZT4KLSAgPC94czpjaG9pY2U+Ci0gPC94czpncm91cD4KLQotIDx4czpjb21wbGV4VHlwZSBuYW1lPSJjb21wbGV4VHlwZSIgYWJzdHJhY3Q9InRydWUiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmFubm90YXRlZCI+Ci0gICAgPHhzOmdyb3VwIHJlZj0ieHM6Y29tcGxleFR5cGVNb2RlbCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6TkNOYW1lIj4KLSAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIFdpbGwgYmUgcmVzdHJpY3RlZCB0byByZXF1aXJlZCBvciBmb3JiaWRkZW48L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1peGVkIiB0eXBlPSJ4czpib29sZWFuIiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJmYWxzZSI+Ci0gICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBOb3QgYWxsb3dlZCBpZiBzaW1wbGVDb250ZW50IGNoaWxkIGlzIGNob3Nlbi4KLSAgICAgIE1heSBiZSBvdmVycmlkZW4gYnkgc2V0dGluZyBvbiBjb21wbGV4Q29udGVudCBjaGlsZC48L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDwveHM6YXR0cmlidXRlPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYWJzdHJhY3QiIHR5cGU9InhzOmJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9ImZhbHNlIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmaW5hbCIgdHlwZT0ieHM6ZGVyaXZhdGlvblNldCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYmxvY2siIHR5cGU9InhzOmRlcml2YXRpb25TZXQiLz4KLSAgIDwveHM6ZXh0ZW5zaW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0gCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9InRvcExldmVsQ29tcGxleFR5cGUiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Y29tcGxleFR5cGUiPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgPHhzOmdyb3VwIHJlZj0ieHM6Y29tcGxleFR5cGVNb2RlbCIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpOQ05hbWUiIHVzZT0icmVxdWlyZWQiLz4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLSAKLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0ibG9jYWxDb21wbGV4VHlwZSI+Ci0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpjb21wbGV4VHlwZSI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICA8eHM6Z3JvdXAgcmVmPSJ4czpjb21wbGV4VHlwZU1vZGVsIi8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYWJzdHJhY3QiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iZmluYWwiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYmxvY2siIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLSA8L3hzOmNvbXBsZXhUeXBlPgotIAotIDx4czpjb21wbGV4VHlwZSBuYW1lPSJyZXN0cmljdGlvblR5cGUiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmFubm90YXRlZCI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+Ci0gICAgICA8eHM6Z3JvdXAgcmVmPSJ4czp0eXBlRGVmUGFydGljbGUiLz4KLSAgICAgIDx4czpncm91cCByZWY9InhzOnNpbXBsZVJlc3RyaWN0aW9uTW9kZWwiLz4KLSAgICAgPC94czpjaG9pY2U+Ci0gICAgIDx4czpncm91cCByZWY9InhzOmF0dHJEZWNscyIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJiYXNlIiB0eXBlPSJ4czpRTmFtZSIgdXNlPSJyZXF1aXJlZCIvPgotICAgPC94czpleHRlbnNpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+ICAgICAgIAotIDwveHM6Y29tcGxleFR5cGU+Ci0KLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0iY29tcGxleFJlc3RyaWN0aW9uVHlwZSI+Ci0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpyZXN0cmljdGlvblR5cGUiPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgotICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgPHhzOmRvY3VtZW50YXRpb24+VGhpcyBjaG9pY2UgaXMgYWRkZWQgc2ltcGx5IHRvCi0gICAgICAgICAgICAgICAgICAgbWFrZSB0aGlzIGEgdmFsaWQgcmVzdHJpY3Rpb24gcGVyIHRoZSBSRUM8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICA8eHM6Z3JvdXAgcmVmPSJ4czp0eXBlRGVmUGFydGljbGUiLz4KLSAgICAgPC94czpjaG9pY2U+Ci0gICAgIDx4czpncm91cCByZWY9InhzOmF0dHJEZWNscyIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PiAgICAgICAKLSA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImV4dGVuc2lvblR5cGUiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmFubm90YXRlZCI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6Z3JvdXAgcmVmPSJ4czp0eXBlRGVmUGFydGljbGUiIG1pbk9jY3Vycz0iMCIvPgotICAgICA8eHM6Z3JvdXAgcmVmPSJ4czphdHRyRGVjbHMiLz4KLSAgICA8L3hzOnNlcXVlbmNlPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYmFzZSIgdHlwZT0ieHM6UU5hbWUiIHVzZT0icmVxdWlyZWQiLz4KLSAgIDwveHM6ZXh0ZW5zaW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PiAgICAgICAKLSA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmVsZW1lbnQgbmFtZT0iY29tcGxleENvbnRlbnQiIGlkPSJjb21wbGV4Q29udGVudCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1jb21wbGV4Q29udGVudCIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmFubm90YXRlZCI+Ci0gICAgIDx4czpjaG9pY2U+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJyZXN0cmljdGlvbiIgdHlwZT0ieHM6Y29tcGxleFJlc3RyaWN0aW9uVHlwZSIvPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIiB0eXBlPSJ4czpleHRlbnNpb25UeXBlIi8+Ci0gICAgIDwveHM6Y2hvaWNlPiAgICAgCi0gICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWl4ZWQiIHR5cGU9InhzOmJvb2xlYW4iPgotICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgT3ZlcnJpZGVzIGFueSBzZXR0aW5nIG9uIGNvbXBsZXhUeXBlIHBhcmVudC48L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPC94czphdHRyaWJ1dGU+Ci0gICAgPC94czpleHRlbnNpb24+Ci0gICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotIDwveHM6ZWxlbWVudD4KLQotIDx4czpjb21wbGV4VHlwZSBuYW1lPSJzaW1wbGVSZXN0cmljdGlvblR5cGUiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6cmVzdHJpY3Rpb25UeXBlIj4KLSAgICA8eHM6c2VxdWVuY2U+Ci0gICAgIDx4czplbGVtZW50IHJlZj0ieHM6YW5ub3RhdGlvbiIgbWluT2NjdXJzPSIwIi8+Ci0gICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIj4KLSAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgIDx4czpkb2N1bWVudGF0aW9uPlRoaXMgY2hvaWNlIGlzIGFkZGVkIHNpbXBseSB0bwotICAgICAgICAgICAgICAgICAgIG1ha2UgdGhpcyBhIHZhbGlkIHJlc3RyaWN0aW9uIHBlciB0aGUgUkVDPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgPHhzOmdyb3VwIHJlZj0ieHM6c2ltcGxlUmVzdHJpY3Rpb25Nb2RlbCIvPgotICAgICA8L3hzOmNob2ljZT4KLSAgICAgPHhzOmdyb3VwIHJlZj0ieHM6YXR0ckRlY2xzIi8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLQotIDx4czpjb21wbGV4VHlwZSBuYW1lPSJzaW1wbGVFeHRlbnNpb25UeXBlIj4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmV4dGVuc2lvblR5cGUiPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIE5vIHR5cGVEZWZQYXJ0aWNsZSBncm91cCByZWZlcmVuY2U8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgPHhzOmdyb3VwIHJlZj0ieHM6YXR0ckRlY2xzIi8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLQotIDx4czplbGVtZW50IG5hbWU9InNpbXBsZUNvbnRlbnQiIGlkPSJzaW1wbGVDb250ZW50Ij4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LXNpbXBsZUNvbnRlbnQiLz4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czphbm5vdGF0ZWQiPgotICAgICA8eHM6Y2hvaWNlPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icmVzdHJpY3Rpb24iIHR5cGU9InhzOnNpbXBsZVJlc3RyaWN0aW9uVHlwZSIvPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iZXh0ZW5zaW9uIiB0eXBlPSJ4czpzaW1wbGVFeHRlbnNpb25UeXBlIi8+Ci0gICAgIDwveHM6Y2hvaWNlPgotICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLSA8L3hzOmVsZW1lbnQ+Ci0gCi0gPHhzOmVsZW1lbnQgbmFtZT0iY29tcGxleFR5cGUiIHR5cGU9InhzOnRvcExldmVsQ29tcGxleFR5cGUiIGlkPSJjb21wbGV4VHlwZSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1jb21wbGV4VHlwZSIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czplbGVtZW50PgotCi0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iYmxvY2tTZXQiPgotICAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgQSB1dGlsaXR5IHR5cGUsIG5vdCBmb3IgcHVibGljIHVzZTwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAjYWxsIG9yIChwb3NzaWJseSBlbXB0eSkgc3Vic2V0IG9mIHtzdWJzdGl0dXRpb24sIGV4dGVuc2lvbiwKLSAgICByZXN0cmljdGlvbn08L3hzOmRvY3VtZW50YXRpb24+Ci0gICA8L3hzOmFubm90YXRpb24+Ci0gICA8eHM6dW5pb24+Ci0gICAgPHhzOnNpbXBsZVR5cGU+ICAgIAotICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIjYWxsIi8+Ci0gICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpzaW1wbGVUeXBlPgotICAgIDx4czpzaW1wbGVUeXBlPgotICAgICA8eHM6bGlzdD4KLSAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpkZXJpdmF0aW9uQ29udHJvbCI+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iZXh0ZW5zaW9uIi8+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVzdHJpY3Rpb24iLz4KLSAgICAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJzdWJzdGl0dXRpb24iLz4KLSAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICA8L3hzOmxpc3Q+Ci0gICAgPC94czpzaW1wbGVUeXBlPgotICAgPC94czp1bmlvbj4gIAotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZWxlbWVudCIgYWJzdHJhY3Q9InRydWUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgVGhlIGVsZW1lbnQgZWxlbWVudCBjYW4gYmUgdXNlZCBlaXRoZXIKLSAgIGF0IHRoZSB0b3AgbGV2ZWwgdG8gZGVmaW5lIGFuIGVsZW1lbnQtdHlwZSBiaW5kaW5nIGdsb2JhbGx5LAotICAgb3Igd2l0aGluIGEgY29udGVudCBtb2RlbCB0byBlaXRoZXIgcmVmZXJlbmNlIGEgZ2xvYmFsbHktZGVmaW5lZAotICAgZWxlbWVudCBvciB0eXBlIG9yIGRlY2xhcmUgYW4gZWxlbWVudC10eXBlIGJpbmRpbmcgbG9jYWxseS4KLSAgIFRoZSByZWYgZm9ybSBpcyBub3QgYWxsb3dlZCBhdCB0aGUgdG9wIGxldmVsLjwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotCi0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6YW5ub3RhdGVkIj4KLSAgICA8eHM6c2VxdWVuY2U+Ci0gICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIj4KLSAgICAgIDx4czplbGVtZW50IG5hbWU9InNpbXBsZVR5cGUiIHR5cGU9InhzOmxvY2FsU2ltcGxlVHlwZSIvPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iY29tcGxleFR5cGUiIHR5cGU9InhzOmxvY2FsQ29tcGxleFR5cGUiLz4KLSAgICAgPC94czpjaG9pY2U+Ci0gICAgIDx4czpncm91cCByZWY9InhzOmlkZW50aXR5Q29uc3RyYWludCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ieHM6ZGVmUmVmIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB0eXBlPSJ4czpRTmFtZSIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3Vic3RpdHV0aW9uR3JvdXAiIHR5cGU9InhzOlFOYW1lIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ieHM6b2NjdXJzIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJkZWZhdWx0IiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZpeGVkIiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5pbGxhYmxlIiB0eXBlPSJ4czpib29sZWFuIiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJmYWxzZSIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYWJzdHJhY3QiIHR5cGU9InhzOmJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9ImZhbHNlIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmaW5hbCIgdHlwZT0ieHM6ZGVyaXZhdGlvblNldCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYmxvY2siIHR5cGU9InhzOmJsb2NrU2V0Ii8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmb3JtIiB0eXBlPSJ4czpmb3JtQ2hvaWNlIi8+Ci0gICA8L3hzOmV4dGVuc2lvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLSA8L3hzOmNvbXBsZXhUeXBlPgotIAotIDx4czpjb21wbGV4VHlwZSBuYW1lPSJ0b3BMZXZlbEVsZW1lbnQiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6ZWxlbWVudCI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0iMCI+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJzaW1wbGVUeXBlIiB0eXBlPSJ4czpsb2NhbFNpbXBsZVR5cGUiLz4KLSAgICAgIDx4czplbGVtZW50IG5hbWU9ImNvbXBsZXhUeXBlIiB0eXBlPSJ4czpsb2NhbENvbXBsZXhUeXBlIi8+Ci0gICAgIDwveHM6Y2hvaWNlPgotICAgICA8eHM6Z3JvdXAgcmVmPSJ4czppZGVudGl0eUNvbnN0cmFpbnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzOnNlcXVlbmNlPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVmIiB1c2U9InByb2hpYml0ZWQiLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZvcm0iIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWluT2NjdXJzIiB1c2U9InByb2hpYml0ZWQiLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1heE9jY3VycyIgdXNlPSJwcm9oaWJpdGVkIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB1c2U9InJlcXVpcmVkIiB0eXBlPSJ4czpOQ05hbWUiLz4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLSAKLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0ibG9jYWxFbGVtZW50Ij4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmVsZW1lbnQiPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiPgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ic2ltcGxlVHlwZSIgdHlwZT0ieHM6bG9jYWxTaW1wbGVUeXBlIi8+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJjb21wbGV4VHlwZSIgdHlwZT0ieHM6bG9jYWxDb21wbGV4VHlwZSIvPgotICAgICA8L3hzOmNob2ljZT4KLSAgICAgPHhzOmdyb3VwIHJlZj0ieHM6aWRlbnRpdHlDb25zdHJhaW50IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN1YnN0aXR1dGlvbkdyb3VwIiB1c2U9InByb2hpYml0ZWQiLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZpbmFsIiB1c2U9InByb2hpYml0ZWQiLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImFic3RyYWN0IiB1c2U9InByb2hpYml0ZWQiLz4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLQotIDx4czplbGVtZW50IG5hbWU9ImVsZW1lbnQiIHR5cGU9InhzOnRvcExldmVsRWxlbWVudCIgaWQ9ImVsZW1lbnQiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2VsZW1lbnQtZWxlbWVudCIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9Imdyb3VwIiBhYnN0cmFjdD0idHJ1ZSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBncm91cCB0eXBlIGZvciBleHBsaWNpdCBncm91cHMsIG5hbWVkIHRvcC1sZXZlbCBncm91cHMgYW5kCi0gICBncm91cCByZWZlcmVuY2VzPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6YW5ub3RhdGVkIj4KLSAgICA8eHM6Z3JvdXAgcmVmPSJ4czpwYXJ0aWNsZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InhzOmRlZlJlZiIvPgotICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InhzOm9jY3VycyIvPgotICAgPC94czpleHRlbnNpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLSAKLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0icmVhbEdyb3VwIj4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmdyb3VwIj4KLSAgICA8eHM6c2VxdWVuY2U+Ci0gICAgIDx4czplbGVtZW50IHJlZj0ieHM6YW5ub3RhdGlvbiIgbWluT2NjdXJzPSIwIi8+Ci0gICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbGwiLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0ieHM6Y2hvaWNlIi8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9InhzOnNlcXVlbmNlIi8+Ci0gICAgIDwveHM6Y2hvaWNlPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0KLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0ibmFtZWRHcm91cCI+Ci0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpyZWFsR3JvdXAiPgotICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0iMSI+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJhbGwiPgotICAgICAgIDx4czpjb21wbGV4VHlwZT4KLSAgICAgICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFsbCI+Ci0gICAgICAgICAgPHhzOmdyb3VwIHJlZj0ieHM6YWxsTW9kZWwiLz4KLSAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1pbk9jY3VycyIgdXNlPSJwcm9oaWJpdGVkIi8+Ci0gICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtYXhPY2N1cnMiIHVzZT0icHJvaGliaXRlZCIvPgotICAgICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICAgICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgICAgICA8L3hzOmNvbXBsZXhUeXBlPgotICAgICAgPC94czplbGVtZW50PgotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iY2hvaWNlIiB0eXBlPSJ4czpzaW1wbGVFeHBsaWNpdEdyb3VwIi8+Ci0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJzZXF1ZW5jZSIgdHlwZT0ieHM6c2ltcGxlRXhwbGljaXRHcm91cCIvPgotICAgICA8L3hzOmNob2ljZT4KLSAgICA8L3hzOnNlcXVlbmNlPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6TkNOYW1lIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZWYiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWluT2NjdXJzIiB1c2U9InByb2hpYml0ZWQiLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1heE9jY3VycyIgdXNlPSJwcm9oaWJpdGVkIi8+Ci0gICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0KLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZ3JvdXBSZWYiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6cmVhbEdyb3VwIj4KLSAgICA8eHM6c2VxdWVuY2U+Ci0gICAgIDx4czplbGVtZW50IHJlZj0ieHM6YW5ub3RhdGlvbiIgbWluT2NjdXJzPSIwIi8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlZiIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6UU5hbWUiLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLSA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImV4cGxpY2l0R3JvdXAiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgZ3JvdXAgdHlwZSBmb3IgdGhlIHRocmVlIGtpbmRzIG9mIGdyb3VwPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpncm91cCI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICA8eHM6Z3JvdXAgcmVmPSJ4czpuZXN0ZWRQYXJ0aWNsZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czpOQ05hbWUiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icmVmIiB0eXBlPSJ4czpRTmFtZSIgdXNlPSJwcm9oaWJpdGVkIi8+Ci0gICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0gCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9InNpbXBsZUV4cGxpY2l0R3JvdXAiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6ZXhwbGljaXRHcm91cCI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICA8eHM6Z3JvdXAgcmVmPSJ4czpuZXN0ZWRQYXJ0aWNsZSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtaW5PY2N1cnMiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWF4T2NjdXJzIiB1c2U9InByb2hpYml0ZWQiLz4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLSAKLSA8eHM6Z3JvdXAgbmFtZT0iYWxsTW9kZWwiPgotICA8eHM6c2VxdWVuY2U+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzOmRvY3VtZW50YXRpb24+VGhpcyBjaG9pY2Ugd2l0aCBtaW4vbWF4IGlzIGhlcmUgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgYXZvaWQgYSBwYmxtIHdpdGggdGhlIEVsdDpBbGwvQ2hvaWNlL1NlcQotICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJ0aWNsZSBkZXJpdmF0aW9uIGNvbnN0cmFpbnQ8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgIDx4czplbGVtZW50IG5hbWU9ImVsZW1lbnQiIHR5cGU9InhzOmVsZW1lbnRJbkFsbCIvPgotICAgICAgPC94czpjaG9pY2U+Ci0gICAgIDwveHM6c2VxdWVuY2U+Ci0gPC94czpncm91cD4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZWxlbWVudEluQWxsIj4KLSAgIDx4czphbm5vdGF0aW9uPgotICAgIDx4czpkb2N1bWVudGF0aW9uPnJlc3RyaWN0ZWQgbWF4L21pbjwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgIDwveHM6YW5ub3RhdGlvbj4KLSAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6bG9jYWxFbGVtZW50Ij4KLSAgICAgPHhzOnNlcXVlbmNlPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIj4KLSAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJzaW1wbGVUeXBlIiB0eXBlPSJ4czpsb2NhbFNpbXBsZVR5cGUiLz4KLSAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJjb21wbGV4VHlwZSIgdHlwZT0ieHM6bG9jYWxDb21wbGV4VHlwZSIvPgotICAgICAgPC94czpjaG9pY2U+Ci0gICAgICA8eHM6Z3JvdXAgcmVmPSJ4czppZGVudGl0eUNvbnN0cmFpbnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtaW5PY2N1cnMiIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9IjEiPgotICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOm5vbk5lZ2F0aXZlSW50ZWdlciI+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iMCIvPgotICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IjEiLz4KLSAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtYXhPY2N1cnMiIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9IjEiPgotICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFsbE5OSSI+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iMCIvPgotICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IjEiLz4KLSAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+ICAgIAotCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJhbGwiPgotICAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBPbmx5IGVsZW1lbnRzIGFsbG93ZWQgaW5zaWRlPC94czpkb2N1bWVudGF0aW9uPgotICAgPC94czphbm5vdGF0aW9uPgotICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpleHBsaWNpdEdyb3VwIj4KLSAgICAgPHhzOmdyb3VwIHJlZj0ieHM6YWxsTW9kZWwiLz4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtaW5PY2N1cnMiIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9IjEiPgotICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOm5vbk5lZ2F0aXZlSW50ZWdlciI+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iMCIvPgotICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IjEiLz4KLSAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJtYXhPY2N1cnMiIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9IjEiPgotICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFsbE5OSSI+Ci0gICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iMSIvPgotICAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgIDwveHM6YXR0cmlidXRlPgotICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotIDx4czplbGVtZW50IG5hbWU9ImFsbCIgaWQ9ImFsbCIgdHlwZT0ieHM6YWxsIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LWFsbCIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmVsZW1lbnQgbmFtZT0iY2hvaWNlIiB0eXBlPSJ4czpleHBsaWNpdEdyb3VwIiBpZD0iY2hvaWNlIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LWNob2ljZSIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmVsZW1lbnQgbmFtZT0ic2VxdWVuY2UiIHR5cGU9InhzOmV4cGxpY2l0R3JvdXAiIGlkPSJzZXF1ZW5jZSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1zZXF1ZW5jZSIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmVsZW1lbnQgbmFtZT0iZ3JvdXAiIHR5cGU9InhzOm5hbWVkR3JvdXAiIGlkPSJncm91cCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1ncm91cCIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9IndpbGRjYXJkIj4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czphbm5vdGF0ZWQiPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZXNwYWNlIiB0eXBlPSJ4czpuYW1lc3BhY2VMaXN0IiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSIjI2FueSIvPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icHJvY2Vzc0NvbnRlbnRzIiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJzdHJpY3QiPgotICAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOTVRPS0VOIj4KLSAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InNraXAiLz4KLSAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImxheCIvPgotICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ic3RyaWN0Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgPC94czphdHRyaWJ1dGU+Ci0gICA8L3hzOmV4dGVuc2lvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLSA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmVsZW1lbnQgbmFtZT0iYW55IiBpZD0iYW55Ij4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LWFueSIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOndpbGRjYXJkIj4KLSAgICAgPHhzOmF0dHJpYnV0ZUdyb3VwIHJlZj0ieHM6b2NjdXJzIi8+Ci0gICAgPC94czpleHRlbnNpb24+Ci0gICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotIDwveHM6ZWxlbWVudD4KLQotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgc2ltcGxlIHR5cGUgZm9yIHRoZSB2YWx1ZSBvZiB0aGUgJ25hbWVzcGFjZScgYXR0ciBvZgotICAgJ2FueScgYW5kICdhbnlBdHRyaWJ1dGUnPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBWYWx1ZSBpcwotICAgICAgICAgICAgICAjI2FueSAgICAgIC0gLSBhbnkgbm9uLWNvbmZsaWN0aW5nIFdGWE1ML2F0dHJpYnV0ZSBhdCBhbGwKLQotICAgICAgICAgICAgICAjI290aGVyICAgIC0gLSBhbnkgbm9uLWNvbmZsaWN0aW5nIFdGWE1ML2F0dHJpYnV0ZSBmcm9tCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2Ugb3RoZXIgdGhhbiB0YXJnZXROUwotCi0gICAgICAgICAgICAgICMjbG9jYWwgICAgLSAtIGFueSB1bnF1YWxpZmllZCBub24tY29uZmxpY3RpbmcgV0ZYTUwvYXR0cmlidXRlIAotCi0gICAgICAgICAgICAgIG9uZSBvciAgICAgLSAtIGFueSBub24tY29uZmxpY3RpbmcgV0ZYTUwvYXR0cmlidXRlIGZyb20KLSAgICAgICAgICAgICAgbW9yZSBVUkkgICAgICAgIHRoZSBsaXN0ZWQgbmFtZXNwYWNlcwotICAgICAgICAgICAgICByZWZlcmVuY2VzCi0gICAgICAgICAgICAgIChzcGFjZSBzZXBhcmF0ZWQpCi0KLSAgICAjI3RhcmdldE5hbWVzcGFjZSBvciAjI2xvY2FsIG1heSBhcHBlYXIgaW4gdGhlIGFib3ZlIGxpc3QsIHRvCi0gICAgICAgIHJlZmVyIHRvIHRoZSB0YXJnZXROYW1lc3BhY2Ugb2YgdGhlIGVuY2xvc2luZwotICAgICAgICBzY2hlbWEgb3IgYW4gYWJzZW50IHRhcmdldE5hbWVzcGFjZSByZXNwZWN0aXZlbHk8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLQotIDx4czpzaW1wbGVUeXBlIG5hbWU9Im5hbWVzcGFjZUxpc3QiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgQSB1dGlsaXR5IHR5cGUsIG5vdCBmb3IgcHVibGljIHVzZTwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6dW5pb24+Ci0gICA8eHM6c2ltcGxlVHlwZT4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IiMjYW55Ii8+Ci0gICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0iIyNvdGhlciIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICA8L3hzOnNpbXBsZVR5cGU+Ci0gICA8eHM6c2ltcGxlVHlwZT4KLSAgICA8eHM6bGlzdD4KLSAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICA8eHM6dW5pb24gbWVtYmVyVHlwZXM9InhzOmFueVVSSSI+Ci0gICAgICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IiMjdGFyZ2V0TmFtZXNwYWNlIi8+Ci0gICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9IiMjbG9jYWwiLz4KLSAgICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgICA8L3hzOnVuaW9uPgotICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgPC94czpsaXN0PgotICAgPC94czpzaW1wbGVUeXBlPgotICA8L3hzOnVuaW9uPgotIDwveHM6c2ltcGxlVHlwZT4KLQotIDx4czplbGVtZW50IG5hbWU9ImF0dHJpYnV0ZSIgdHlwZT0ieHM6dG9wTGV2ZWxBdHRyaWJ1dGUiIGlkPSJhdHRyaWJ1dGUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2VsZW1lbnQtYXR0cmlidXRlIi8+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0iYXR0cmlidXRlR3JvdXAiIGFic3RyYWN0PSJ0cnVlIj4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czphbm5vdGF0ZWQiPgotICAgIDx4czpncm91cCByZWY9InhzOmF0dHJEZWNscyIvPgotICAgIDx4czphdHRyaWJ1dGVHcm91cCByZWY9InhzOmRlZlJlZiIvPgotICAgPC94czpleHRlbnNpb24+Ci0gIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gPC94czpjb21wbGV4VHlwZT4KLSAKLSA8eHM6Y29tcGxleFR5cGUgbmFtZT0ibmFtZWRBdHRyaWJ1dGVHcm91cCI+Ci0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphdHRyaWJ1dGVHcm91cCI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICA8eHM6Z3JvdXAgcmVmPSJ4czphdHRyRGVjbHMiLz4KLSAgICA8L3hzOnNlcXVlbmNlPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6TkNOYW1lIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZWYiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLSA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImF0dHJpYnV0ZUdyb3VwUmVmIj4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmF0dHJpYnV0ZUdyb3VwIj4KLSAgICA8eHM6c2VxdWVuY2U+Ci0gICAgIDx4czplbGVtZW50IHJlZj0ieHM6YW5ub3RhdGlvbiIgbWluT2NjdXJzPSIwIi8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJlZiIgdXNlPSJyZXF1aXJlZCIgdHlwZT0ieHM6UU5hbWUiLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHVzZT0icHJvaGliaXRlZCIvPgotICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLSA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmVsZW1lbnQgbmFtZT0iYXR0cmlidXRlR3JvdXAiIHR5cGU9InhzOm5hbWVkQXR0cmlidXRlR3JvdXAiIGlkPSJhdHRyaWJ1dGVHcm91cCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1hdHRyaWJ1dGVHcm91cCIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmVsZW1lbnQgbmFtZT0iaW5jbHVkZSIgaWQ9ImluY2x1ZGUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2VsZW1lbnQtaW5jbHVkZSIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmFubm90YXRlZCI+Ci0gICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2NoZW1hTG9jYXRpb24iIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgotICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJyZWRlZmluZSIgaWQ9InJlZGVmaW5lIj4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LXJlZGVmaW5lIi8+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6b3BlbkF0dHJzIj4KLSAgICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgIDx4czplbGVtZW50IHJlZj0ieHM6YW5ub3RhdGlvbiIvPgotICAgICAgPHhzOmdyb3VwIHJlZj0ieHM6cmVkZWZpbmFibGUiLz4KLSAgICAgPC94czpjaG9pY2U+Ci0gICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic2NoZW1hTG9jYXRpb24iIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpJRCIvPgotICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJpbXBvcnQiIGlkPSJpbXBvcnQiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2VsZW1lbnQtaW1wb3J0Ii8+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOmNvbXBsZXhUeXBlPgotICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6YW5ub3RhdGVkIj4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lc3BhY2UiIHR5cGU9InhzOmFueVVSSSIvPgotICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNjaGVtYUxvY2F0aW9uIiB0eXBlPSJ4czphbnlVUkkiLz4KLSAgICA8L3hzOmV4dGVuc2lvbj4KLSAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmVsZW1lbnQgbmFtZT0ic2VsZWN0b3IiIGlkPSJzZWxlY3RvciI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1zZWxlY3RvciIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czphbm5vdGF0ZWQiPgotICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InhwYXRoIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbj5BIHN1YnNldCBvZiBYUGF0aCBleHByZXNzaW9ucyBmb3IgdXNlCi1pbiBzZWxlY3RvcnM8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDx4czpkb2N1bWVudGF0aW9uPkEgdXRpbGl0eSB0eXBlLCBub3QgZm9yIHB1YmxpYwotdXNlPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uPlRoZSBmb2xsb3dpbmcgcGF0dGVybiBpcyBpbnRlbmRlZCB0byBhbGxvdyBYUGF0aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMgcGVyIHRoZSBmb2xsb3dpbmcgRUJORjoKLSAgICAgICAgICBTZWxlY3RvciAgICA6Oj0gICAgUGF0aCAoICd8JyBQYXRoICkqICAKLSAgICAgICAgICBQYXRoICAgIDo6PSAgICAoJy4vLycpPyBTdGVwICggJy8nIFN0ZXAgKSogIAotICAgICAgICAgIFN0ZXAgICAgOjo9ICAgICcuJyB8IE5hbWVUZXN0ICAKLSAgICAgICAgICBOYW1lVGVzdCAgICA6Oj0gICAgUU5hbWUgfCAnKicgfCBOQ05hbWUgJzonICcqJyAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZDo6IGlzIGFsc28gYWxsb3dlZAotICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwhLS0gVFNIIGNvbW1lbnRlZCBvdXQgc2luY2UgdGhpcyBpbmNvcnJlY3RseSBkb2VzIG5vdCBhbGxvdyB3aGl0ZSBzcGFjZSAtLT4KLSAgICAgICAgPCEtLSA8eHM6cGF0dGVybiB2YWx1ZT0iKFwuLy8pPygoKGNoaWxkOjopPygoXGlcYyo6KT8oXGlcYyp8XCopKSl8XC4pKC8oKChjaGlsZDo6KT8oKFxpXGMqOik/KFxpXGMqfFwqKSkpfFwuKSkqKFx8KFwuLy8pPygoKGNoaWxkOjopPygoXGlcYyo6KT8oXGlcYyp8XCopKSl8XC4pKC8oKChjaGlsZDo6KT8oKFxpXGMqOik/KFxpXGMqfFwqKSkpfFwuKSkqKSoiPiAKLSAgICAgICAgPC94czpwYXR0ZXJuPiAtLT4KLSAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgIDwveHM6ZXh0ZW5zaW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmVsZW1lbnQgbmFtZT0iZmllbGQiIGlkPSJmaWVsZCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1maWVsZCIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czphbm5vdGF0ZWQiPgotICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InhwYXRoIiB1c2U9InJlcXVpcmVkIj4KLSAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbj5BIHN1YnNldCBvZiBYUGF0aCBleHByZXNzaW9ucyBmb3IgdXNlCi1pbiBmaWVsZHM8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDx4czpkb2N1bWVudGF0aW9uPkEgdXRpbGl0eSB0eXBlLCBub3QgZm9yIHB1YmxpYwotdXNlPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uPlRoZSBmb2xsb3dpbmcgcGF0dGVybiBpcyBpbnRlbmRlZCB0byBhbGxvdyBYUGF0aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnMgcGVyIHRoZSBzYW1lIEVCTkYgYXMgZm9yIHNlbGVjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgZm9sbG93aW5nIGNoYW5nZToKLSAgICAgICAgICBQYXRoICAgIDo6PSAgICAoJy4vLycpPyAoIFN0ZXAgJy8nICkqICggU3RlcCB8ICdAJyBOYW1lVGVzdCApIAotICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwhLS0gVFNIIGNvbW1lbnRlZCBvdXQgc2luY2UgdGhpcyBpbmNvcnJlY3RseSBkb2VzIG5vdCBhbGxvdyB3aGl0ZSBzcGFjZSAtLT4KLSAgICAgICAgPCEtLSA8eHM6cGF0dGVybiB2YWx1ZT0iKFwuLy8pPygoKChjaGlsZDo6KT8oKFxpXGMqOik/KFxpXGMqfFwqKSkpfFwuKS8pKigoKChjaGlsZDo6KT8oKFxpXGMqOik/KFxpXGMqfFwqKSkpfFwuKXwoKGF0dHJpYnV0ZTo6fEApKChcaVxjKjopPyhcaVxjKnxcKikpKSkoXHwoXC4vLyk/KCgoKGNoaWxkOjopPygoXGlcYyo6KT8oXGlcYyp8XCopKSl8XC4pLykqKCgoKGNoaWxkOjopPygoXGlcYyo6KT8oXGlcYyp8XCopKSl8XC4pfCgoYXR0cmlidXRlOjp8QCkoKFxpXGMqOik/KFxpXGMqfFwqKSkpKSkqIj4gCi0gICAgICAgIDwveHM6cGF0dGVybj4tLT4KLSAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgIDwveHM6ZXh0ZW5zaW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImtleWJhc2UiPgotICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmFubm90YXRlZCI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCByZWY9InhzOnNlbGVjdG9yIi8+Ci0gICAgIDx4czplbGVtZW50IHJlZj0ieHM6ZmllbGQiIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICA8L3hzOnNlcXVlbmNlPgotICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6TkNOYW1lIiB1c2U9InJlcXVpcmVkIi8+Ci0gICA8L3hzOmV4dGVuc2lvbj4KLSAgPC94czpjb21wbGV4Q29udGVudD4KLSA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmdyb3VwIG5hbWU9ImlkZW50aXR5Q29uc3RyYWludCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+VGhlIHRocmVlIGtpbmRzIG9mIGlkZW50aXR5IGNvbnN0cmFpbnRzLCBhbGwgd2l0aAotICAgICAgICAgICAgICAgICAgICAgdHlwZSBvZiBvciBkZXJpdmVkIGZyb20gJ2tleWJhc2UnLgotICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjaG9pY2U+Ci0gICA8eHM6ZWxlbWVudCByZWY9InhzOnVuaXF1ZSIvPgotICAgPHhzOmVsZW1lbnQgcmVmPSJ4czprZXkiLz4KLSAgIDx4czplbGVtZW50IHJlZj0ieHM6a2V5cmVmIi8+Ci0gIDwveHM6Y2hvaWNlPgotIDwveHM6Z3JvdXA+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJ1bmlxdWUiIHR5cGU9InhzOmtleWJhc2UiIGlkPSJ1bmlxdWUiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2VsZW1lbnQtdW5pcXVlIi8+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSA8L3hzOmVsZW1lbnQ+Ci0gPHhzOmVsZW1lbnQgbmFtZT0ia2V5IiB0eXBlPSJ4czprZXliYXNlIiBpZD0ia2V5Ij4KLSAgPHhzOmFubm90YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LWtleSIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gPC94czplbGVtZW50PgotIDx4czplbGVtZW50IG5hbWU9ImtleXJlZiIgaWQ9ImtleXJlZiI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1rZXlyZWYiLz4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czprZXliYXNlIj4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJyZWZlciIgdHlwZT0ieHM6UU5hbWUiIHVzZT0icmVxdWlyZWQiLz4KLSAgICA8L3hzOmV4dGVuc2lvbj4KLSAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmVsZW1lbnQgbmFtZT0ibm90YXRpb24iIGlkPSJub3RhdGlvbiI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24gc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZWxlbWVudC1ub3RhdGlvbiIvPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICA8eHM6ZXh0ZW5zaW9uIGJhc2U9InhzOmFubm90YXRlZCI+Ci0gICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6TkNOYW1lIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icHVibGljIiB0eXBlPSJ4czpwdWJsaWMiLz4KLSAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzeXN0ZW0iIHR5cGU9InhzOmFueVVSSSIvPgotICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6c2ltcGxlVHlwZSBuYW1lPSJwdWJsaWMiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgQSB1dGlsaXR5IHR5cGUsIG5vdCBmb3IgcHVibGljIHVzZTwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgQSBwdWJsaWMgaWRlbnRpZmllciwgcGVyIElTTyA4ODc5PC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiIvPgotIDwveHM6c2ltcGxlVHlwZT4KLQotIDx4czplbGVtZW50IG5hbWU9ImFwcGluZm8iIGlkPSJhcHBpbmZvIj4KLSAgIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LWFwcGluZm8iLz4KLSAgIDwveHM6YW5ub3RhdGlvbj4KLSAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0gICAgPHhzOnNlcXVlbmNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICA8eHM6YW55IHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNvdXJjZSIgdHlwZT0ieHM6YW55VVJJIi8+Ci0gICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICA8L3hzOmNvbXBsZXhUeXBlPgotIDwveHM6ZWxlbWVudD4KLQotIDx4czplbGVtZW50IG5hbWU9ImRvY3VtZW50YXRpb24iIGlkPSJkb2N1bWVudGF0aW9uIj4KLSAgIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LWRvY3VtZW50YXRpb24iLz4KLSAgIDwveHM6YW5ub3RhdGlvbj4KLSAgIDx4czpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0gICAgPHhzOnNlcXVlbmNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICA8eHM6YW55IHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgPC94czpzZXF1ZW5jZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9InNvdXJjZSIgdHlwZT0ieHM6YW55VVJJIi8+Ci0gICAgPHhzOmF0dHJpYnV0ZSByZWY9InhtbDpsYW5nIi8+Ci0gICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICA8L3hzOmNvbXBsZXhUeXBlPgotIDwveHM6ZWxlbWVudD4KLQotIDx4czplbGVtZW50IG5hbWU9ImFubm90YXRpb24iIGlkPSJhbm5vdGF0aW9uIj4KLSAgIDx4czphbm5vdGF0aW9uPgotICAgICA8eHM6ZG9jdW1lbnRhdGlvbiBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNlbGVtZW50LWFubm90YXRpb24iLz4KLSAgIDwveHM6YW5ub3RhdGlvbj4KLSAgIDx4czpjb21wbGV4VHlwZT4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6b3BlbkF0dHJzIj4KLSAgICAgIDx4czpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphcHBpbmZvIi8+Ci0gICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czpkb2N1bWVudGF0aW9uIi8+Ci0gICAgICA8L3hzOmNob2ljZT4KLSAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InhzOklEIi8+Ci0gICAgIDwveHM6ZXh0ZW5zaW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gICA8L3hzOmNvbXBsZXhUeXBlPgotIDwveHM6ZWxlbWVudD4KLQotIDx4czphbm5vdGF0aW9uPgotICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgIG5vdGF0aW9ucyBmb3IgdXNlIHdpdGhpbiBYTUwgU2NoZW1hIHNjaGVtYXM8L3hzOmRvY3VtZW50YXRpb24+Ci0gPC94czphbm5vdGF0aW9uPgotCi0gPHhzOm5vdGF0aW9uIG5hbWU9IlhNTFNjaGVtYVN0cnVjdHVyZXMiIHB1YmxpYz0ic3RydWN0dXJlcyIgc3lzdGVtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA4L1hNTFNjaGVtYS54c2QiLz4KLSA8eHM6bm90YXRpb24gbmFtZT0iWE1MIiBwdWJsaWM9IlJFQy14bWwtMTk5ODAyMTAiIHN5c3RlbT0iaHR0cDovL3d3dy53My5vcmcvVFIvMTk5OC9SRUMteG1sLTE5OTgwMjEwIi8+Ci0gIAotIDx4czpjb21wbGV4VHlwZSBuYW1lPSJhbnlUeXBlIiBtaXhlZD0idHJ1ZSI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICBOb3QgdGhlIHJlYWwgdXJUeXBlLCBidXQgYXMgY2xvc2UgYW4gYXBwcm94aW1hdGlvbiBhcyB3ZSBjYW4KLSAgIGdldCBpbiB0aGUgWE1MIHJlcHJlc2VudGF0aW9uPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0gIDx4czpzZXF1ZW5jZT4KLSAgIDx4czphbnkgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgPC94czpzZXF1ZW5jZT4KLSAgPHhzOmFueUF0dHJpYnV0ZSBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICBGaXJzdCB0aGUgYnVpbHQtaW4gcHJpbWl0aXZlIGRhdGF0eXBlcy4gIFRoZXNlIGRlZmluaXRpb25zIGFyZSBmb3IKLSAgICAgIGluZm9ybWF0aW9uIG9ubHksIHRoZSByZWFsIGJ1aWx0LWluIGRlZmluaXRpb25zIGFyZSBtYWdpYy4KLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0KLSAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIEZvciBlYWNoIGJ1aWx0LWluIGRhdGF0eXBlIGluIHRoaXMgc2NoZW1hIChib3RoIHByaW1pdGl2ZSBhbmQKLSAgICAgIGRlcml2ZWQpIGNhbiBiZSB1bmlxdWVseSBhZGRyZXNzZWQgdmlhIGEgVVJJIGNvbnN0cnVjdGVkCi0gICAgICBhcyBmb2xsb3dzOgotICAgICAgICAxKSB0aGUgYmFzZSBVUkkgaXMgdGhlIFVSSSBvZiB0aGUgWE1MIFNjaGVtYSBuYW1lc3BhY2UKLSAgICAgICAgMikgdGhlIGZyYWdtZW50IGlkZW50aWZpZXIgaXMgdGhlIG5hbWUgb2YgdGhlIGRhdGF0eXBlCi0KLSAgICAgIEZvciBleGFtcGxlLCB0byBhZGRyZXNzIHRoZSBpbnQgZGF0YXR5cGUsIHRoZSBVUkkgaXM6Ci0KLSAgICAgICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjaW50Ci0KLSAgICAgIEFkZGl0aW9uYWxseSwgZWFjaCBmYWNldCBkZWZpbml0aW9uIGVsZW1lbnQgY2FuIGJlIHVuaXF1ZWx5Ci0gICAgICBhZGRyZXNzZWQgdmlhIGEgVVJJIGNvbnN0cnVjdGVkIGFzIGZvbGxvd3M6Ci0gICAgICAgIDEpIHRoZSBiYXNlIFVSSSBpcyB0aGUgVVJJIG9mIHRoZSBYTUwgU2NoZW1hIG5hbWVzcGFjZQotICAgICAgICAyKSB0aGUgZnJhZ21lbnQgaWRlbnRpZmllciBpcyB0aGUgbmFtZSBvZiB0aGUgZmFjZXQKLQotICAgICAgRm9yIGV4YW1wbGUsIHRvIGFkZHJlc3MgdGhlIG1heEluY2x1c2l2ZSBmYWNldCwgdGhlIFVSSSBpczoKLQotICAgICAgICBodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSNtYXhJbmNsdXNpdmUKLQotICAgICAgQWRkaXRpb25hbGx5LCBlYWNoIGZhY2V0IHVzYWdlIGluIGEgYnVpbHQtaW4gZGF0YXR5cGUgZGVmaW5pdGlvbgotICAgICAgY2FuIGJlIHVuaXF1ZWx5IGFkZHJlc3NlZCB2aWEgYSBVUkkgY29uc3RydWN0ZWQgYXMgZm9sbG93czoKLSAgICAgICAgMSkgdGhlIGJhc2UgVVJJIGlzIHRoZSBVUkkgb2YgdGhlIFhNTCBTY2hlbWEgbmFtZXNwYWNlCi0gICAgICAgIDIpIHRoZSBmcmFnbWVudCBpZGVudGlmaWVyIGlzIHRoZSBuYW1lIG9mIHRoZSBkYXRhdHlwZSwgZm9sbG93ZWQKLSAgICAgICAgICAgYnkgYSBwZXJpb2QgKCIuIikgZm9sbG93ZWQgYnkgdGhlIG5hbWUgb2YgdGhlIGZhY2V0Ci0KLSAgICAgIEZvciBleGFtcGxlLCB0byBhZGRyZXNzIHRoZSB1c2FnZSBvZiB0aGUgbWF4SW5jbHVzaXZlIGZhY2V0IGluCi0gICAgICB0aGUgZGVmaW5pdGlvbiBvZiBpbnQsIHRoZSBVUkkgaXM6Ci0KLSAgICAgICAgaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjaW50Lm1heEluY2x1c2l2ZQotCi0gICAgPC94czpkb2N1bWVudGF0aW9uPgotICA8L3hzOmFubm90YXRpb24+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0ic3RyaW5nIiBpZD0ic3RyaW5nIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czphcHBpbmZvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Imxlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkxlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heExlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9InBhdHRlcm4iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJvcmRlcmVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIgdmFsdWU9ImNvdW50YWJseSBpbmZpbml0ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im51bWVyaWMiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgPC94czphcHBpbmZvPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNzdHJpbmciLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVNpbXBsZVR5cGUiPgotICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9InByZXNlcnZlIiBpZD0ic3RyaW5nLnByZXNlcnZlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9ImJvb2xlYW4iIGlkPSJib29sZWFuIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czphcHBpbmZvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9InBhdHRlcm4iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJ3aGl0ZVNwYWNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ib3JkZXJlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iYm91bmRlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iY2FyZGluYWxpdHkiIHZhbHVlPSJmaW5pdGUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJudW1lcmljIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgIDwveHM6YXBwaW5mbz4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2Jvb2xlYW4iLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVNpbXBsZVR5cGUiPgotICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIiBmaXhlZD0idHJ1ZSIKLSAgICAgICAgaWQ9ImJvb2xlYW4ud2hpdGVTcGFjZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJmbG9hdCIgaWQ9ImZsb2F0Ij4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czphcHBpbmZvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9InBhdHRlcm4iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhJbmNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhFeGNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5JbmNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5FeGNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJvcmRlcmVkIiB2YWx1ZT0idG90YWwiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0idHJ1ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImNhcmRpbmFsaXR5IiB2YWx1ZT0iZmluaXRlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ibnVtZXJpYyIgdmFsdWU9InRydWUiLz4KLSAgICAgIDwveHM6YXBwaW5mbz4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2Zsb2F0Ii8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlTaW1wbGVUeXBlIj4KLSAgICAgIDx4czp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIgZml4ZWQ9InRydWUiCi0gICAgICAgIGlkPSJmbG9hdC53aGl0ZVNwYWNlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9ImRvdWJsZSIgaWQ9ImRvdWJsZSI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJwYXR0ZXJuIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0iZW51bWVyYXRpb24iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJ3aGl0ZVNwYWNlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4SW5jbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4RXhjbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluSW5jbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluRXhjbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ib3JkZXJlZCIgdmFsdWU9InRvdGFsIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iYm91bmRlZCIgdmFsdWU9InRydWUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIgdmFsdWU9ImZpbml0ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im51bWVyaWMiIHZhbHVlPSJ0cnVlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkb3VibGUiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVNpbXBsZVR5cGUiPgotICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIiAgZml4ZWQ9InRydWUiCi0gICAgICAgIGlkPSJkb3VibGUud2hpdGVTcGFjZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJkZWNpbWFsIiBpZD0iZGVjaW1hbCI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJ0b3RhbERpZ2l0cyIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9ImZyYWN0aW9uRGlnaXRzIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0icGF0dGVybiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heEluY2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heEV4Y2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkluY2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkV4Y2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im9yZGVyZWQiIHZhbHVlPSJ0b3RhbCIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImJvdW5kZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImNhcmRpbmFsaXR5IgotICAgICAgICAgICAgICAgIHZhbHVlPSJjb3VudGFibHkgaW5maW5pdGUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJudW1lcmljIiB2YWx1ZT0idHJ1ZSIvPgotICAgICAgPC94czphcHBpbmZvPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZGVjaW1hbCIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55U2ltcGxlVHlwZSI+Ci0gICAgICA8eHM6d2hpdGVTcGFjZSB2YWx1ZT0iY29sbGFwc2UiICBmaXhlZD0idHJ1ZSIKLSAgICAgICAgaWQ9ImRlY2ltYWwud2hpdGVTcGFjZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgIDx4czpzaW1wbGVUeXBlIG5hbWU9ImR1cmF0aW9uIiBpZD0iZHVyYXRpb24iPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmFwcGluZm8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0icGF0dGVybiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9ImVudW1lcmF0aW9uIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0id2hpdGVTcGFjZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heEluY2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heEV4Y2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkluY2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkV4Y2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im9yZGVyZWQiIHZhbHVlPSJwYXJ0aWFsIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iYm91bmRlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iY2FyZGluYWxpdHkiCi0gICAgICAgICAgICAgICAgdmFsdWU9ImNvdW50YWJseSBpbmZpbml0ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im51bWVyaWMiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgPC94czphcHBpbmZvPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZHVyYXRpb24iLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVNpbXBsZVR5cGUiPgotICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIiAgZml4ZWQ9InRydWUiCi0gICAgICAgIGlkPSJkdXJhdGlvbi53aGl0ZVNwYWNlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgIDwveHM6c2ltcGxlVHlwZT4KLQotIDx4czpzaW1wbGVUeXBlIG5hbWU9ImRhdGVUaW1lIiBpZD0iZGF0ZVRpbWUiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgIDx4czphcHBpbmZvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9InBhdHRlcm4iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhJbmNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhFeGNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5JbmNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5FeGNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJvcmRlcmVkIiB2YWx1ZT0icGFydGlhbCIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImJvdW5kZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImNhcmRpbmFsaXR5IgotICAgICAgICAgICAgICAgIHZhbHVlPSJjb3VudGFibHkgaW5maW5pdGUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJudW1lcmljIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgIDwveHM6YXBwaW5mbz4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2RhdGVUaW1lIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlTaW1wbGVUeXBlIj4KLSAgICAgIDx4czp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIgIGZpeGVkPSJ0cnVlIgotICAgICAgICBpZD0iZGF0ZVRpbWUud2hpdGVTcGFjZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJ0aW1lIiBpZD0idGltZSI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmFwcGluZm8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0icGF0dGVybiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9ImVudW1lcmF0aW9uIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0id2hpdGVTcGFjZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heEluY2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heEV4Y2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkluY2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkV4Y2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im9yZGVyZWQiIHZhbHVlPSJwYXJ0aWFsIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iYm91bmRlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iY2FyZGluYWxpdHkiCi0gICAgICAgICAgICAgICAgdmFsdWU9ImNvdW50YWJseSBpbmZpbml0ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im51bWVyaWMiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgPC94czphcHBpbmZvPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jdGltZSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55U2ltcGxlVHlwZSI+Ci0gICAgICA8eHM6d2hpdGVTcGFjZSB2YWx1ZT0iY29sbGFwc2UiICBmaXhlZD0idHJ1ZSIKLSAgICAgICAgaWQ9InRpbWUud2hpdGVTcGFjZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJkYXRlIiBpZD0iZGF0ZSI+Ci0gICA8eHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJwYXR0ZXJuIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0iZW51bWVyYXRpb24iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJ3aGl0ZVNwYWNlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4SW5jbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4RXhjbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluSW5jbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluRXhjbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ib3JkZXJlZCIgdmFsdWU9InBhcnRpYWwiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iY291bnRhYmx5IGluZmluaXRlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ibnVtZXJpYyIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkYXRlIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlTaW1wbGVUeXBlIj4KLSAgICAgIDx4czp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIgIGZpeGVkPSJ0cnVlIgotICAgICAgICBpZD0iZGF0ZS53aGl0ZVNwYWNlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9ImdZZWFyTW9udGgiIGlkPSJnWWVhck1vbnRoIj4KLSAgIDx4czphbm5vdGF0aW9uPgotICAgIDx4czphcHBpbmZvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9InBhdHRlcm4iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhJbmNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhFeGNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5JbmNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5FeGNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJvcmRlcmVkIiB2YWx1ZT0icGFydGlhbCIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImJvdW5kZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImNhcmRpbmFsaXR5IgotICAgICAgICAgICAgICAgIHZhbHVlPSJjb3VudGFibHkgaW5maW5pdGUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJudW1lcmljIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgIDwveHM6YXBwaW5mbz4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2dZZWFyTW9udGgiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVNpbXBsZVR5cGUiPgotICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIiAgZml4ZWQ9InRydWUiCi0gICAgICAgIGlkPSJnWWVhck1vbnRoLndoaXRlU3BhY2UiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iZ1llYXIiIGlkPSJnWWVhciI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmFwcGluZm8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0icGF0dGVybiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9ImVudW1lcmF0aW9uIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0id2hpdGVTcGFjZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heEluY2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heEV4Y2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkluY2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkV4Y2x1c2l2ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im9yZGVyZWQiIHZhbHVlPSJwYXJ0aWFsIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iYm91bmRlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iY2FyZGluYWxpdHkiCi0gICAgICAgICAgICAgICAgdmFsdWU9ImNvdW50YWJseSBpbmZpbml0ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im51bWVyaWMiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgPC94czphcHBpbmZvPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZ1llYXIiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVNpbXBsZVR5cGUiPgotICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIiAgZml4ZWQ9InRydWUiCi0gICAgICAgIGlkPSJnWWVhci53aGl0ZVNwYWNlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gPHhzOnNpbXBsZVR5cGUgbmFtZT0iZ01vbnRoRGF5IiBpZD0iZ01vbnRoRGF5Ij4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czphcHBpbmZvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9InBhdHRlcm4iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhJbmNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhFeGNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5JbmNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5FeGNsdXNpdmUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJvcmRlcmVkIiB2YWx1ZT0icGFydGlhbCIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImJvdW5kZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImNhcmRpbmFsaXR5IgotICAgICAgICAgICAgICAgIHZhbHVlPSJjb3VudGFibHkgaW5maW5pdGUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJudW1lcmljIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgIDwveHM6YXBwaW5mbz4KLSAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNnTW9udGhEYXkiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVNpbXBsZVR5cGUiPgotICAgICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIiBmaXhlZD0idHJ1ZSIKLSAgICAgICAgICAgICAgICBpZD0iZ01vbnRoRGF5LndoaXRlU3BhY2UiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iZ0RheSIgaWQ9ImdEYXkiPgotICAgIDx4czphbm5vdGF0aW9uPgotICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJwYXR0ZXJuIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0iZW51bWVyYXRpb24iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJ3aGl0ZVNwYWNlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4SW5jbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4RXhjbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluSW5jbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluRXhjbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ib3JkZXJlZCIgdmFsdWU9InBhcnRpYWwiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iY291bnRhYmx5IGluZmluaXRlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ibnVtZXJpYyIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNnRGF5Ii8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlTaW1wbGVUeXBlIj4KLSAgICAgICAgIDx4czp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIgIGZpeGVkPSJ0cnVlIgotICAgICAgICAgICAgICAgIGlkPSJnRGF5LndoaXRlU3BhY2UiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSA8eHM6c2ltcGxlVHlwZSBuYW1lPSJnTW9udGgiIGlkPSJnTW9udGgiPgotICAgIDx4czphbm5vdGF0aW9uPgotICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJwYXR0ZXJuIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0iZW51bWVyYXRpb24iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJ3aGl0ZVNwYWNlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4SW5jbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4RXhjbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluSW5jbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluRXhjbHVzaXZlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ib3JkZXJlZCIgdmFsdWU9InBhcnRpYWwiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iY291bnRhYmx5IGluZmluaXRlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ibnVtZXJpYyIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNnTW9udGgiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVNpbXBsZVR5cGUiPgotICAgICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIiAgZml4ZWQ9InRydWUiCi0gICAgICAgICAgICAgICAgaWQ9ImdNb250aC53aGl0ZVNwYWNlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJoZXhCaW5hcnkiIGlkPSJoZXhCaW5hcnkiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmFwcGluZm8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluTGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4TGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0icGF0dGVybiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9ImVudW1lcmF0aW9uIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0id2hpdGVTcGFjZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im9yZGVyZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImJvdW5kZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImNhcmRpbmFsaXR5IgotICAgICAgICAgICAgICAgIHZhbHVlPSJjb3VudGFibHkgaW5maW5pdGUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJudW1lcmljIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgIDwveHM6YXBwaW5mbz4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2JpbmFyeSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55U2ltcGxlVHlwZSI+Ci0gICAgICA8eHM6d2hpdGVTcGFjZSB2YWx1ZT0iY29sbGFwc2UiIGZpeGVkPSJ0cnVlIgotICAgICAgICBpZD0iaGV4QmluYXJ5LndoaXRlU3BhY2UiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgPC94czpzaW1wbGVUeXBlPgotCi0gPHhzOnNpbXBsZVR5cGUgbmFtZT0iYmFzZTY0QmluYXJ5IiBpZD0iYmFzZTY0QmluYXJ5Ij4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czphcHBpbmZvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Imxlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkxlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heExlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9InBhdHRlcm4iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJvcmRlcmVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iY291bnRhYmx5IGluZmluaXRlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ibnVtZXJpYyIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICAgICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2Jhc2U2NEJpbmFyeSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55U2ltcGxlVHlwZSI+Ci0gICAgICA8eHM6d2hpdGVTcGFjZSB2YWx1ZT0iY29sbGFwc2UiIGZpeGVkPSJ0cnVlIgotICAgICAgICBpZD0iYmFzZTY0QmluYXJ5LndoaXRlU3BhY2UiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgPC94czpzaW1wbGVUeXBlPgotCi0gICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJhbnlVUkkiIGlkPSJhbnlVUkkiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmFwcGluZm8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluTGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4TGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0icGF0dGVybiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9ImVudW1lcmF0aW9uIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0id2hpdGVTcGFjZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im9yZGVyZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImJvdW5kZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImNhcmRpbmFsaXR5IgotICAgICAgICAgICAgICAgIHZhbHVlPSJjb3VudGFibHkgaW5maW5pdGUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJudW1lcmljIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgIDwveHM6YXBwaW5mbz4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2FueVVSSSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55U2ltcGxlVHlwZSI+Ci0gICAgICA8eHM6d2hpdGVTcGFjZSB2YWx1ZT0iY29sbGFwc2UiICBmaXhlZD0idHJ1ZSIKLSAgICAgICAgaWQ9ImFueVVSSS53aGl0ZVNwYWNlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJRTmFtZSIgaWQ9IlFOYW1lIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPHhzOmFwcGluZm8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluTGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4TGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0icGF0dGVybiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9ImVudW1lcmF0aW9uIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0id2hpdGVTcGFjZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im9yZGVyZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImJvdW5kZWQiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImNhcmRpbmFsaXR5IgotICAgICAgICAgICAgICAgIHZhbHVlPSJjb3VudGFibHkgaW5maW5pdGUiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJudW1lcmljIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgIDwveHM6YXBwaW5mbz4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI1FOYW1lIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlTaW1wbGVUeXBlIj4KLSAgICAgIDx4czp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIgIGZpeGVkPSJ0cnVlIgotICAgICAgICBpZD0iUU5hbWUud2hpdGVTcGFjZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iTk9UQVRJT04iIGlkPSJOT1RBVElPTiI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgIDx4czphcHBpbmZvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Imxlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1pbkxlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9Im1heExlbmd0aCIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9InBhdHRlcm4iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJvcmRlcmVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iY291bnRhYmx5IGluZmluaXRlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ibnVtZXJpYyIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNOT1RBVElPTiIvPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIE5PVEFUSU9OIGNhbm5vdCBiZSB1c2VkIGRpcmVjdGx5IGluIGEgc2NoZW1hOyByYXRoZXIgYSB0eXBlCi0gICAgICAgIG11c3QgYmUgZGVyaXZlZCBmcm9tIGl0IGJ5IHNwZWNpZnlpbmcgYXQgbGVhc3Qgb25lIGVudW1lcmF0aW9uCi0gICAgICAgIGZhY2V0IHdob3NlIHZhbHVlIGlzIHRoZSBuYW1lIG9mIGEgTk9UQVRJT04gZGVjbGFyZWQgaW4gdGhlCi0gICAgICAgIHNjaGVtYS4KLSAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVNpbXBsZVR5cGUiPgotICAgICAgPHhzOndoaXRlU3BhY2UgdmFsdWU9ImNvbGxhcHNlIiAgZml4ZWQ9InRydWUiCi0gICAgICAgIGlkPSJOT1RBVElPTi53aGl0ZVNwYWNlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czphbm5vdGF0aW9uPgotICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgTm93IHRoZSBkZXJpdmVkIHByaW1pdGl2ZSB0eXBlcwotICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9Im5vcm1hbGl6ZWRTdHJpbmciIGlkPSJub3JtYWxpemVkU3RyaW5nIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI25vcm1hbGl6ZWRTdHJpbmciLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnN0cmluZyI+Ci0gICAgICA8eHM6d2hpdGVTcGFjZSB2YWx1ZT0icmVwbGFjZSIKLSAgICAgICAgaWQ9Im5vcm1hbGl6ZWRTdHJpbmcud2hpdGVTcGFjZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJ0b2tlbiIgaWQ9InRva2VuIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Rva2VuIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpub3JtYWxpemVkU3RyaW5nIj4KLSAgICAgIDx4czp3aGl0ZVNwYWNlIHZhbHVlPSJjb2xsYXBzZSIgaWQ9InRva2VuLndoaXRlU3BhY2UiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0ibGFuZ3VhZ2UiIGlkPSJsYW5ndWFnZSI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNsYW5ndWFnZSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dG9rZW4iPgotICAgICAgPHhzOnBhdHRlcm4KLSAgICAgICAgdmFsdWU9IlthLXpBLVpdezEsOH0oLVthLXpBLVowLTldezEsOH0pKiIKLSAgICAgICAgICAgICAgICBpZD0ibGFuZ3VhZ2UucGF0dGVybiI+Ci0gICAgICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgICAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sI05ULUxhbmd1YWdlSUQiPgotICAgICAgICAgICAgcGF0dGVybiBzcGVjaWZpZXMgdGhlIGNvbnRlbnQgb2Ygc2VjdGlvbiAyLjEyIG9mIFhNTCAxLjBlMgotICAgICAgICAgICAgYW5kIFJGQyAzMDY2IChSZXZpc2VkIHZlcnNpb24gb2YgUkZDIDE3NjYpLgotICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgPC94czpwYXR0ZXJuPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJJRFJFRlMiIGlkPSJJRFJFRlMiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmFwcGluZm8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWluTGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0ibWF4TGVuZ3RoIi8+Ci0gICAgICAgIDxoZnA6aGFzRmFjZXQgbmFtZT0iZW51bWVyYXRpb24iLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJ3aGl0ZVNwYWNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ib3JkZXJlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iYm91bmRlZCIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0iY2FyZGluYWxpdHkiCi0gICAgICAgICAgICAgICAgdmFsdWU9ImNvdW50YWJseSBpbmZpbml0ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9Im51bWVyaWMiIHZhbHVlPSJmYWxzZSIvPgotICAgICAgPC94czphcHBpbmZvPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jSURSRUZTIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbj4KLSAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgICA8eHM6bGlzdCBpdGVtVHlwZT0ieHM6SURSRUYiLz4KLSAgICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICAgICAgPHhzOm1pbkxlbmd0aCB2YWx1ZT0iMSIgaWQ9IklEUkVGUy5taW5MZW5ndGgiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iRU5USVRJRVMiIGlkPSJFTlRJVElFUyI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJsZW5ndGgiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5MZW5ndGgiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhMZW5ndGgiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJvcmRlcmVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iY291bnRhYmx5IGluZmluaXRlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ibnVtZXJpYyIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNFTlRJVElFUyIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24+Ci0gICAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgICAgPHhzOmxpc3QgaXRlbVR5cGU9InhzOkVOVElUWSIvPgotICAgICAgPC94czpzaW1wbGVUeXBlPgotICAgICAgICA8eHM6bWluTGVuZ3RoIHZhbHVlPSIxIiBpZD0iRU5USVRJRVMubWluTGVuZ3RoIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9Ik5NVE9LRU4iIGlkPSJOTVRPS0VOIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI05NVE9LRU4iLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICAgIDx4czpwYXR0ZXJuIHZhbHVlPSJcYysiIGlkPSJOTVRPS0VOLnBhdHRlcm4iPgotICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICAgICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbCNOVC1ObXRva2VuIj4KLSAgICAgICAgICAgIHBhdHRlcm4gbWF0Y2hlcyBwcm9kdWN0aW9uIDcgZnJvbSB0aGUgWE1MIHNwZWMKLSAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgIDwveHM6cGF0dGVybj4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iTk1UT0tFTlMiIGlkPSJOTVRPS0VOUyI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJsZW5ndGgiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtaW5MZW5ndGgiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJtYXhMZW5ndGgiLz4KLSAgICAgICAgPGhmcDpoYXNGYWNldCBuYW1lPSJlbnVtZXJhdGlvbiIvPgotICAgICAgICA8aGZwOmhhc0ZhY2V0IG5hbWU9IndoaXRlU3BhY2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJvcmRlcmVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0iZmFsc2UiLz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJjYXJkaW5hbGl0eSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iY291bnRhYmx5IGluZmluaXRlIi8+Ci0gICAgICAgIDxoZnA6aGFzUHJvcGVydHkgbmFtZT0ibnVtZXJpYyIgdmFsdWU9ImZhbHNlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNOTVRPS0VOUyIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24+Ci0gICAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgICAgPHhzOmxpc3QgaXRlbVR5cGU9InhzOk5NVE9LRU4iLz4KLSAgICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICAgICAgPHhzOm1pbkxlbmd0aCB2YWx1ZT0iMSIgaWQ9Ik5NVE9LRU5TLm1pbkxlbmd0aCIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJOYW1lIiBpZD0iTmFtZSI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNOYW1lIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp0b2tlbiI+Ci0gICAgICA8eHM6cGF0dGVybiB2YWx1ZT0iXGlcYyoiIGlkPSJOYW1lLnBhdHRlcm4iPgotICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sI05ULU5hbWUiPgotICAgICAgICAgICAgcGF0dGVybiBtYXRjaGVzIHByb2R1Y3Rpb24gNSBmcm9tIHRoZSBYTUwgc3BlYwotICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgPC94czphbm5vdGF0aW9uPgotICAgICAgPC94czpwYXR0ZXJuPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJOQ05hbWUiIGlkPSJOQ05hbWUiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jTkNOYW1lIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOYW1lIj4KLSAgICAgIDx4czpwYXR0ZXJuIHZhbHVlPSJbXGktWzpdXVtcYy1bOl1dKiIgaWQ9Ik5DTmFtZS5wYXR0ZXJuIj4KLSAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwtbmFtZXMvI05ULU5DTmFtZSI+Ci0gICAgICAgICAgICBwYXR0ZXJuIG1hdGNoZXMgcHJvZHVjdGlvbiA0IGZyb20gdGhlIE5hbWVzcGFjZXMgaW4gWE1MIHNwZWMKLSAgICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgIDwveHM6cGF0dGVybj4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgIDx4czpzaW1wbGVUeXBlIG5hbWU9IklEIiBpZD0iSUQiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jSUQiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5DTmFtZSIvPgotICAgPC94czpzaW1wbGVUeXBlPgotCi0gICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJJRFJFRiIgaWQ9IklEUkVGIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI0lEUkVGIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpOQ05hbWUiLz4KLSAgIDwveHM6c2ltcGxlVHlwZT4KLQotICAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iRU5USVRZIiBpZD0iRU5USVRZIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI0VOVElUWSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6TkNOYW1lIi8+Ci0gICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iaW50ZWdlciIgaWQ9ImludGVnZXIiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jaW50ZWdlciIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6ZGVjaW1hbCI+Ci0gICAgICA8eHM6ZnJhY3Rpb25EaWdpdHMgdmFsdWU9IjAiIGZpeGVkPSJ0cnVlIiBpZD0iaW50ZWdlci5mcmFjdGlvbkRpZ2l0cyIvPgotICAgICAgPHhzOnBhdHRlcm4gdmFsdWU9J1stK10/WzAtOV0rJy8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9Im5vblBvc2l0aXZlSW50ZWdlciIgaWQ9Im5vblBvc2l0aXZlSW50ZWdlciI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNub25Qb3NpdGl2ZUludGVnZXIiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmludGVnZXIiPgotICAgICAgPHhzOm1heEluY2x1c2l2ZSB2YWx1ZT0iMCIgaWQ9Im5vblBvc2l0aXZlSW50ZWdlci5tYXhJbmNsdXNpdmUiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0ibmVnYXRpdmVJbnRlZ2VyIiBpZD0ibmVnYXRpdmVJbnRlZ2VyIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI25lZ2F0aXZlSW50ZWdlciIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6bm9uUG9zaXRpdmVJbnRlZ2VyIj4KLSAgICAgIDx4czptYXhJbmNsdXNpdmUgdmFsdWU9Ii0xIiBpZD0ibmVnYXRpdmVJbnRlZ2VyLm1heEluY2x1c2l2ZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJsb25nIiBpZD0ibG9uZyI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0idHJ1ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImNhcmRpbmFsaXR5IiB2YWx1ZT0iZmluaXRlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNsb25nIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czppbnRlZ2VyIj4KLSAgICAgIDx4czptaW5JbmNsdXNpdmUgdmFsdWU9Ii05MjIzMzcyMDM2ODU0Nzc1ODA4IiBpZD0ibG9uZy5taW5JbmNsdXNpdmUiLz4KLSAgICAgIDx4czptYXhJbmNsdXNpdmUgdmFsdWU9IjkyMjMzNzIwMzY4NTQ3NzU4MDciIGlkPSJsb25nLm1heEluY2x1c2l2ZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJpbnQiIGlkPSJpbnQiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jaW50Ii8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpsb25nIj4KLSAgICAgIDx4czptaW5JbmNsdXNpdmUgdmFsdWU9Ii0yMTQ3NDgzNjQ4IiBpZD0iaW50Lm1pbkluY2x1c2l2ZSIvPgotICAgICAgPHhzOm1heEluY2x1c2l2ZSB2YWx1ZT0iMjE0NzQ4MzY0NyIgaWQ9ImludC5tYXhJbmNsdXNpdmUiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0ic2hvcnQiIGlkPSJzaG9ydCI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNzaG9ydCIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6aW50Ij4KLSAgICAgIDx4czptaW5JbmNsdXNpdmUgdmFsdWU9Ii0zMjc2OCIgaWQ9InNob3J0Lm1pbkluY2x1c2l2ZSIvPgotICAgICAgPHhzOm1heEluY2x1c2l2ZSB2YWx1ZT0iMzI3NjciIGlkPSJzaG9ydC5tYXhJbmNsdXNpdmUiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0iYnl0ZSIgaWQ9ImJ5dGUiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jYnl0ZSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c2hvcnQiPgotICAgICAgPHhzOm1pbkluY2x1c2l2ZSB2YWx1ZT0iLTEyOCIgaWQ9ImJ5dGUubWluSW5jbHVzaXZlIi8+Ci0gICAgICA8eHM6bWF4SW5jbHVzaXZlIHZhbHVlPSIxMjciIGlkPSJieXRlLm1heEluY2x1c2l2ZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJub25OZWdhdGl2ZUludGVnZXIiIGlkPSJub25OZWdhdGl2ZUludGVnZXIiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jbm9uTmVnYXRpdmVJbnRlZ2VyIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czppbnRlZ2VyIj4KLSAgICAgIDx4czptaW5JbmNsdXNpdmUgdmFsdWU9IjAiIGlkPSJub25OZWdhdGl2ZUludGVnZXIubWluSW5jbHVzaXZlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9InVuc2lnbmVkTG9uZyIgaWQ9InVuc2lnbmVkTG9uZyI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6YXBwaW5mbz4KLSAgICAgICAgPGhmcDpoYXNQcm9wZXJ0eSBuYW1lPSJib3VuZGVkIiB2YWx1ZT0idHJ1ZSIvPgotICAgICAgICA8aGZwOmhhc1Byb3BlcnR5IG5hbWU9ImNhcmRpbmFsaXR5IiB2YWx1ZT0iZmluaXRlIi8+Ci0gICAgICA8L3hzOmFwcGluZm8+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyN1bnNpZ25lZExvbmciLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOm5vbk5lZ2F0aXZlSW50ZWdlciI+Ci0gICAgICA8eHM6bWF4SW5jbHVzaXZlIHZhbHVlPSIxODQ0Njc0NDA3MzcwOTU1MTYxNSIKLSAgICAgICAgaWQ9InVuc2lnbmVkTG9uZy5tYXhJbmNsdXNpdmUiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0idW5zaWduZWRJbnQiIGlkPSJ1bnNpZ25lZEludCI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyN1bnNpZ25lZEludCIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dW5zaWduZWRMb25nIj4KLSAgICAgIDx4czptYXhJbmNsdXNpdmUgdmFsdWU9IjQyOTQ5NjcyOTUiCi0gICAgICAgIGlkPSJ1bnNpZ25lZEludC5tYXhJbmNsdXNpdmUiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0idW5zaWduZWRTaG9ydCIgaWQ9InVuc2lnbmVkU2hvcnQiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jdW5zaWduZWRTaG9ydCIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6dW5zaWduZWRJbnQiPgotICAgICAgPHhzOm1heEluY2x1c2l2ZSB2YWx1ZT0iNjU1MzUiCi0gICAgICAgIGlkPSJ1bnNpZ25lZFNob3J0Lm1heEluY2x1c2l2ZSIvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSJ1bnNpZ25lZEJ5dGUiIGlkPSJ1bnNpZ25lZEJ5dGUiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jdW5zaWduZWRCeXRlIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czp1bnNpZ25lZFNob3J0Ij4KLSAgICAgIDx4czptYXhJbmNsdXNpdmUgdmFsdWU9IjI1NSIgaWQ9InVuc2lnbmVkQnl0ZS5tYXhJbmNsdXNpdmUiLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOnNpbXBsZVR5cGU+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0icG9zaXRpdmVJbnRlZ2VyIiBpZD0icG9zaXRpdmVJbnRlZ2VyIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Bvc2l0aXZlSW50ZWdlciIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6bm9uTmVnYXRpdmVJbnRlZ2VyIj4KLSAgICAgIDx4czptaW5JbmNsdXNpdmUgdmFsdWU9IjEiIGlkPSJwb3NpdGl2ZUludGVnZXIubWluSW5jbHVzaXZlIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gPHhzOnNpbXBsZVR5cGUgbmFtZT0iZGVyaXZhdGlvbkNvbnRyb2wiPgotICA8eHM6YW5ub3RhdGlvbj4KLSAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgQSB1dGlsaXR5IHR5cGUsIG5vdCBmb3IgcHVibGljIHVzZTwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgPC94czphbm5vdGF0aW9uPgotICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Tk1UT0tFTiI+Ci0gICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InN1YnN0aXR1dGlvbiIvPgotICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJleHRlbnNpb24iLz4KLSAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVzdHJpY3Rpb24iLz4KLSAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGlzdCIvPgotICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSJ1bmlvbiIvPgotICA8L3hzOnJlc3RyaWN0aW9uPgotIDwveHM6c2ltcGxlVHlwZT4KLQotIDx4czpncm91cCBuYW1lPSJzaW1wbGVEZXJpdmF0aW9uIj4KLSAgPHhzOmNob2ljZT4KLSAgICA8eHM6ZWxlbWVudCByZWY9InhzOnJlc3RyaWN0aW9uIi8+Ci0gICAgPHhzOmVsZW1lbnQgcmVmPSJ4czpsaXN0Ii8+Ci0gICAgPHhzOmVsZW1lbnQgcmVmPSJ4czp1bmlvbiIvPgotICA8L3hzOmNob2ljZT4KLSA8L3hzOmdyb3VwPgotCi0gPHhzOnNpbXBsZVR5cGUgbmFtZT0ic2ltcGxlRGVyaXZhdGlvblNldCI+Ci0gIDx4czphbm5vdGF0aW9uPgotICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAjYWxsIG9yIChwb3NzaWJseSBlbXB0eSkgc3Vic2V0IG9mIHtyZXN0cmljdGlvbiwgdW5pb24sIGxpc3R9Ci0gICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgIEEgdXRpbGl0eSB0eXBlLCBub3QgZm9yIHB1YmxpYyB1c2U8L3hzOmRvY3VtZW50YXRpb24+Ci0gIDwveHM6YW5ub3RhdGlvbj4KLSAgPHhzOnVuaW9uPgotICAgPHhzOnNpbXBsZVR5cGU+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnRva2VuIj4KLSAgICAgPHhzOmVudW1lcmF0aW9uIHZhbHVlPSIjYWxsIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgIDwveHM6c2ltcGxlVHlwZT4KLSAgIDx4czpzaW1wbGVUeXBlPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpkZXJpdmF0aW9uQ29udHJvbCI+Ci0gICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0ibGlzdCIvPgotICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InVuaW9uIi8+Ci0gICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icmVzdHJpY3Rpb24iLz4KLSAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgPC94czpzaW1wbGVUeXBlPgotICA8L3hzOnVuaW9uPgotIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ic2ltcGxlVHlwZSIgYWJzdHJhY3Q9InRydWUiPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6YW5ub3RhdGVkIj4KLSAgICAgICAgPHhzOmdyb3VwIHJlZj0ieHM6c2ltcGxlRGVyaXZhdGlvbiIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZpbmFsIiB0eXBlPSJ4czpzaW1wbGVEZXJpdmF0aW9uU2V0Ii8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHM6TkNOYW1lIj4KLSAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICBDYW4gYmUgcmVzdHJpY3RlZCB0byByZXF1aXJlZCBvciBmb3JiaWRkZW4KLSAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0idG9wTGV2ZWxTaW1wbGVUeXBlIj4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6c2ltcGxlVHlwZSI+Ci0gICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgIDx4czpncm91cCByZWY9InhzOnNpbXBsZURlcml2YXRpb24iLz4KLSAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB1c2U9InJlcXVpcmVkIgotICAgICAgICAgICAgIHR5cGU9InhzOk5DTmFtZSI+Ci0gICAgICAgICAgPHhzOmFubm90YXRpb24+Ci0gICAgICAgICAgICA8eHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgICAgUmVxdWlyZWQgYXQgdGhlIHRvcCBsZXZlbAotICAgICAgICAgICAgPC94czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImxvY2FsU2ltcGxlVHlwZSI+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOnNpbXBsZVR5cGUiPgotICAgICAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICAgICAgPHhzOmVsZW1lbnQgcmVmPSJ4czphbm5vdGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgICA8eHM6Z3JvdXAgcmVmPSJ4czpzaW1wbGVEZXJpdmF0aW9uIi8+Ci0gICAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdXNlPSJwcm9oaWJpdGVkIj4KLSAgICAgICAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgICAgICAgIDx4czpkb2N1bWVudGF0aW9uPgotICAgICAgICAgICAgICBGb3JiaWRkZW4gd2hlbiBuZXN0ZWQKLSAgICAgICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICAgIDwveHM6YXR0cmlidXRlPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZpbmFsIiB1c2U9InByb2hpYml0ZWQiLz4KLSAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJzaW1wbGVUeXBlIiB0eXBlPSJ4czp0b3BMZXZlbFNpbXBsZVR5cGUiIGlkPSJzaW1wbGVUeXBlIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2VsZW1lbnQtc2ltcGxlVHlwZSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgPC94czplbGVtZW50PgotCi0gIDx4czpncm91cCBuYW1lPSJmYWNldHMiPgotICAgPHhzOmFubm90YXRpb24+Ci0gICAgPHhzOmRvY3VtZW50YXRpb24+Ci0gICAgICAgV2Ugc2hvdWxkIHVzZSBhIHN1YnN0aXR1dGlvbiBncm91cCBmb3IgZmFjZXRzLCBidXQKLSAgICAgICB0aGF0J3MgcnVsZWQgb3V0IGJlY2F1c2UgaXQgd291bGQgYWxsb3cgdXNlcnMgdG8KLSAgICAgICBhZGQgdGhlaXIgb3duLCB3aGljaCB3ZSdyZSBub3QgcmVhZHkgZm9yIHlldC4KLSAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICA8L3hzOmFubm90YXRpb24+Ci0gICA8eHM6Y2hvaWNlPgotICAgIDx4czplbGVtZW50IHJlZj0ieHM6bWluRXhjbHVzaXZlIi8+Ci0gICAgPHhzOmVsZW1lbnQgcmVmPSJ4czptaW5JbmNsdXNpdmUiLz4KLSAgICA8eHM6ZWxlbWVudCByZWY9InhzOm1heEV4Y2x1c2l2ZSIvPgotICAgIDx4czplbGVtZW50IHJlZj0ieHM6bWF4SW5jbHVzaXZlIi8+Ci0gICAgPHhzOmVsZW1lbnQgcmVmPSJ4czp0b3RhbERpZ2l0cyIvPgotICAgIDx4czplbGVtZW50IHJlZj0ieHM6ZnJhY3Rpb25EaWdpdHMiLz4KLSAgICA8eHM6ZWxlbWVudCByZWY9InhzOmxlbmd0aCIvPgotICAgIDx4czplbGVtZW50IHJlZj0ieHM6bWluTGVuZ3RoIi8+Ci0gICAgPHhzOmVsZW1lbnQgcmVmPSJ4czptYXhMZW5ndGgiLz4KLSAgICA8eHM6ZWxlbWVudCByZWY9InhzOmVudW1lcmF0aW9uIi8+Ci0gICAgPHhzOmVsZW1lbnQgcmVmPSJ4czp3aGl0ZVNwYWNlIi8+Ci0gICAgPHhzOmVsZW1lbnQgcmVmPSJ4czpwYXR0ZXJuIi8+Ci0gICA8L3hzOmNob2ljZT4KLSAgPC94czpncm91cD4KLQotICA8eHM6Z3JvdXAgbmFtZT0ic2ltcGxlUmVzdHJpY3Rpb25Nb2RlbCI+Ci0gICA8eHM6c2VxdWVuY2U+Ci0gICAgPHhzOmVsZW1lbnQgbmFtZT0ic2ltcGxlVHlwZSIgdHlwZT0ieHM6bG9jYWxTaW1wbGVUeXBlIiBtaW5PY2N1cnM9IjAiLz4KLSAgICA8eHM6Z3JvdXAgcmVmPSJ4czpmYWNldHMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgIDwveHM6c2VxdWVuY2U+Ci0gIDwveHM6Z3JvdXA+Ci0KLSAgPHhzOmVsZW1lbnQgbmFtZT0icmVzdHJpY3Rpb24iIGlkPSJyZXN0cmljdGlvbiI+Ci0gICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICAgICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2VsZW1lbnQtcmVzdHJpY3Rpb24iPgotICAgICAgICAgIGJhc2UgYXR0cmlidXRlIGFuZCBzaW1wbGVUeXBlIGNoaWxkIGFyZSBtdXR1YWxseQotICAgICAgICAgIGV4Y2x1c2l2ZSwgYnV0IG9uZSBvciBvdGhlciBpcyByZXF1aXJlZAotICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6YW5ub3RhdGVkIj4KLSAgICAgICAgIDx4czpncm91cCByZWY9InhzOnNpbXBsZVJlc3RyaWN0aW9uTW9kZWwiLz4KLSAgICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iYmFzZSIgdHlwZT0ieHM6UU5hbWUiIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICAgIDwveHM6Y29tcGxleFR5cGU+Ci0gIDwveHM6ZWxlbWVudD4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJsaXN0IiBpZD0ibGlzdCI+Ci0gICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICAgICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2VsZW1lbnQtbGlzdCI+Ci0gICAgICAgICAgaXRlbVR5cGUgYXR0cmlidXRlIGFuZCBzaW1wbGVUeXBlIGNoaWxkIGFyZSBtdXR1YWxseQotICAgICAgICAgIGV4Y2x1c2l2ZSwgYnV0IG9uZSBvciBvdGhlciBpcyByZXF1aXJlZAotICAgICAgICA8L3hzOmRvY3VtZW50YXRpb24+Ci0gICAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6YW5ub3RhdGVkIj4KLSAgICAgICAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJzaW1wbGVUeXBlIiB0eXBlPSJ4czpsb2NhbFNpbXBsZVR5cGUiCi0gICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Iml0ZW1UeXBlIiB0eXBlPSJ4czpRTmFtZSIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94czpjb21wbGV4VHlwZT4KLSAgPC94czplbGVtZW50PgotCi0gIDx4czplbGVtZW50IG5hbWU9InVuaW9uIiBpZD0idW5pb24iPgotICAgPHhzOmNvbXBsZXhUeXBlPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNlbGVtZW50LXVuaW9uIj4KLSAgICAgICAgICBtZW1iZXJUeXBlcyBhdHRyaWJ1dGUgbXVzdCBiZSBub24tZW1wdHkgb3IgdGhlcmUgbXVzdCBiZQotICAgICAgICAgIGF0IGxlYXN0IG9uZSBzaW1wbGVUeXBlIGNoaWxkCi0gICAgICAgIDwveHM6ZG9jdW1lbnRhdGlvbj4KLSAgICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgICAgPHhzOmV4dGVuc2lvbiBiYXNlPSJ4czphbm5vdGF0ZWQiPgotICAgICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9InNpbXBsZVR5cGUiIHR5cGU9InhzOmxvY2FsU2ltcGxlVHlwZSIKLSAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9Im1lbWJlclR5cGVzIiB1c2U9Im9wdGlvbmFsIj4KLSAgICAgICAgICAgIDx4czpzaW1wbGVUeXBlPgotICAgICAgICAgICAgICA8eHM6bGlzdCBpdGVtVHlwZT0ieHM6UU5hbWUiLz4KLSAgICAgICAgICAgIDwveHM6c2ltcGxlVHlwZT4KLSAgICAgICAgICA8L3hzOmF0dHJpYnV0ZT4KLSAgICAgICAgPC94czpleHRlbnNpb24+Ci0gICAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICAgIDwveHM6Y29tcGxleFR5cGU+Ci0gIDwveHM6ZWxlbWVudD4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZmFjZXQiPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpleHRlbnNpb24gYmFzZT0ieHM6YW5ub3RhdGVkIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImZpeGVkIiB0eXBlPSJ4czpib29sZWFuIiB1c2U9Im9wdGlvbmFsIgotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9ImZhbHNlIi8+Ci0gICAgICA8L3hzOmV4dGVuc2lvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotCi0gPHhzOmNvbXBsZXhUeXBlIG5hbWU9Im5vRml4ZWRGYWNldCI+Ci0gIDx4czpjb21wbGV4Q29udGVudD4KLSAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpmYWNldCI+Ci0gICAgPHhzOnNlcXVlbmNlPgotICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJmaXhlZCIgdXNlPSJwcm9oaWJpdGVkIi8+Ci0gICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICA8L3hzOnJlc3RyaWN0aW9uPgotICA8L3hzOmNvbXBsZXhDb250ZW50PgotIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmVsZW1lbnQgbmFtZT0ibWluRXhjbHVzaXZlIiBpZD0ibWluRXhjbHVzaXZlIiB0eXBlPSJ4czpmYWNldCI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNlbGVtZW50LW1pbkV4Y2x1c2l2ZSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgPC94czplbGVtZW50PgotICA8eHM6ZWxlbWVudCBuYW1lPSJtaW5JbmNsdXNpdmUiIGlkPSJtaW5JbmNsdXNpdmUiIHR5cGU9InhzOmZhY2V0Ij4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2VsZW1lbnQtbWluSW5jbHVzaXZlIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICA8L3hzOmVsZW1lbnQ+Ci0KLSAgPHhzOmVsZW1lbnQgbmFtZT0ibWF4RXhjbHVzaXZlIiBpZD0ibWF4RXhjbHVzaXZlIiB0eXBlPSJ4czpmYWNldCI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNlbGVtZW50LW1heEV4Y2x1c2l2ZSIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgPC94czplbGVtZW50PgotICA8eHM6ZWxlbWVudCBuYW1lPSJtYXhJbmNsdXNpdmUiIGlkPSJtYXhJbmNsdXNpdmUiIHR5cGU9InhzOmZhY2V0Ij4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2VsZW1lbnQtbWF4SW5jbHVzaXZlIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICA8L3hzOmVsZW1lbnQ+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9Im51bUZhY2V0Ij4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6ZmFjZXQiPgotICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHM6YW5ub3RhdGlvbiIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbHVlIiB0eXBlPSJ4czpub25OZWdhdGl2ZUludGVnZXIiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJ0b3RhbERpZ2l0cyIgaWQ9InRvdGFsRGlnaXRzIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2VsZW1lbnQtdG90YWxEaWdpdHMiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gICAgPHhzOmNvbXBsZXhUeXBlPgotICAgICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6bnVtRmFjZXQiPgotICAgICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHM6YW5ub3RhdGlvbiIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbHVlIiB0eXBlPSJ4czpwb3NpdGl2ZUludGVnZXIiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzOmNvbXBsZXhUeXBlPgotICA8L3hzOmVsZW1lbnQ+Ci0gIDx4czplbGVtZW50IG5hbWU9ImZyYWN0aW9uRGlnaXRzIiBpZD0iZnJhY3Rpb25EaWdpdHMiIHR5cGU9InhzOm51bUZhY2V0Ij4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2VsZW1lbnQtZnJhY3Rpb25EaWdpdHMiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gIDwveHM6ZWxlbWVudD4KLQotICA8eHM6ZWxlbWVudCBuYW1lPSJsZW5ndGgiIGlkPSJsZW5ndGgiIHR5cGU9InhzOm51bUZhY2V0Ij4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2VsZW1lbnQtbGVuZ3RoIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICA8L3hzOmVsZW1lbnQ+Ci0gIDx4czplbGVtZW50IG5hbWU9Im1pbkxlbmd0aCIgaWQ9Im1pbkxlbmd0aCIgdHlwZT0ieHM6bnVtRmFjZXQiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZWxlbWVudC1taW5MZW5ndGgiLz4KLSAgICA8L3hzOmFubm90YXRpb24+Ci0gIDwveHM6ZWxlbWVudD4KLSAgPHhzOmVsZW1lbnQgbmFtZT0ibWF4TGVuZ3RoIiBpZD0ibWF4TGVuZ3RoIiB0eXBlPSJ4czpudW1GYWNldCI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNlbGVtZW50LW1heExlbmd0aCIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgPC94czplbGVtZW50PgotCi0gIDx4czplbGVtZW50IG5hbWU9ImVudW1lcmF0aW9uIiBpZD0iZW51bWVyYXRpb24iIHR5cGU9InhzOm5vRml4ZWRGYWNldCI+Ci0gICAgPHhzOmFubm90YXRpb24+Ci0gICAgICA8eHM6ZG9jdW1lbnRhdGlvbgotICAgICAgICBzb3VyY2U9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNlbGVtZW50LWVudW1lcmF0aW9uIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICA8L3hzOmVsZW1lbnQ+Ci0KLSAgPHhzOmVsZW1lbnQgbmFtZT0id2hpdGVTcGFjZSIgaWQ9IndoaXRlU3BhY2UiPgotICAgIDx4czphbm5vdGF0aW9uPgotICAgICAgPHhzOmRvY3VtZW50YXRpb24KLSAgICAgICAgc291cmNlPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZWxlbWVudC13aGl0ZVNwYWNlIi8+Ci0gICAgPC94czphbm5vdGF0aW9uPgotICAgIDx4czpjb21wbGV4VHlwZT4KLSAgICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmZhY2V0Ij4KLSAgICAgICAgICA8eHM6c2VxdWVuY2U+Ci0gICAgICAgICAgICA8eHM6ZWxlbWVudCByZWY9InhzOmFubm90YXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgIDwveHM6c2VxdWVuY2U+Ci0gICAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSIgdXNlPSJyZXF1aXJlZCI+Ci0gICAgICAgICAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgICAgICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOk5NVE9LRU4iPgotICAgICAgICAgICAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0icHJlc2VydmUiLz4KLSAgICAgICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InJlcGxhY2UiLz4KLSAgICAgICAgICAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImNvbGxhcHNlIi8+Ci0gICAgICAgICAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgICAgICAgICA8L3hzOnNpbXBsZVR5cGU+Ci0gICAgICAgICAgPC94czphdHRyaWJ1dGU+Ci0gICAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgPC94czpjb21wbGV4VHlwZT4KLSAgPC94czplbGVtZW50PgotCi0gIDx4czplbGVtZW50IG5hbWU9InBhdHRlcm4iIGlkPSJwYXR0ZXJuIj4KLSAgICA8eHM6YW5ub3RhdGlvbj4KLSAgICAgIDx4czpkb2N1bWVudGF0aW9uCi0gICAgICAgIHNvdXJjZT0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2VsZW1lbnQtcGF0dGVybiIvPgotICAgIDwveHM6YW5ub3RhdGlvbj4KLSAgICA8eHM6Y29tcGxleFR5cGU+Ci0gICAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpub0ZpeGVkRmFjZXQiPgotICAgICAgICAgIDx4czpzZXF1ZW5jZT4KLSAgICAgICAgICAgIDx4czplbGVtZW50IHJlZj0ieHM6YW5ub3RhdGlvbiIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICAgPC94czpzZXF1ZW5jZT4KLSAgICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InZhbHVlIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgICA8L3hzOmNvbXBsZXhUeXBlPgotICA8L3hzOmVsZW1lbnQ+Ci0KLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9mb3JyZXN0LXRhcmdldHMuZW50IGIvd2Vic2l0ZS9mb3JyZXN0LXRhcmdldHMuZW50CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTRjMGI3Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvZm9ycmVzdC10YXJnZXRzLmVudAorKysgL2Rldi9udWxsCkBAIC0xLDE3NCArMCwwIEBACi08IS0tCi1UaGlzIGJ1aWxkLnhtbCBzbmlwcGV0IGNvbnRhaW5zIEZvcnJlc3QgdGFyZ2V0cyBmb3IgQW50IDEuNSsuICBJdCBjaGVja3MgdGhhdAotdGhlIHVzZXIgaGFzIHNldCAke2ZvcnJlc3QuaG9tZX0sIGVpdGhlciBpbiBvbmUgb2Y6Ci0gIGJ1aWxkLnByb3BlcnRpZXMKLSAgcHJvamVjdC5wcm9wZXJ0aWVzCi0gIGFudC5wcm9wZXJ0aWVzCi0gIC5hbnQucHJvcGVydGllcwotb3Igd2l0aCB0aGUgRk9SUkVTVF9IT01FIGVudmlyb25tZW50IHZhcmlhYmxlLCBhbmQgcHJpbnRzIGFuIGluZm9ybWF0aXZlIGVycm9yCi1tZXNzYWdlIGlmIG5vdCBmb3VuZC4KLQotVXNhZ2U6Ci0xKSBDb3B5IHRoaXMgZmlsZSB0byBzb21ld2hlcmUgaW4geW91ciBwcm9qZWN0LgotMikgQWRkIHRoZSBmb2xsb3dpbmcgdG8gdGhlIHRvcCBvZiB5b3VyIHByb2plY3QncyBBbnQgYnVpbGQueG1sIHNjcmlwdAotKGFkanVzdGluZyB0aGUgcGF0aCk6Ci0KLSAgPCFET0NUWVBFIHByb2plY3QgWwotICAgIDwhRU5USVRZIGZvcnJlc3QtdGFyZ2V0cyBTWVNURU0gImZpbGU6Li9mb3JyZXN0LXRhcmdldHMuZW50Ij4KLSAgXT4KLQotMykgQmVmb3JlIHRoZSBjbG9zaW5nICc8L3Byb2plY3Q+JyBpbiB5b3VyIGJ1aWxkLnhtbCwgYWRkIHRoaXM6Ci0KLSAgJmZvcnJlc3QtdGFyZ2V0czsKLSAgCi1UaGlzIGlzIGxpa2UgZXhwYW5kaW5nIGEgbWFjcm86IGl0IHB1bGxzIGluIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUuCi0KLUEgbWluaW1hbCBidWlsZC54bWwgd291bGQgdGh1cyBiZToKLQotPCFET0NUWVBFIHByb2plY3QgWwotPCFFTlRJVFkgZm9ycmVzdC10YXJnZXRzIFNZU1RFTSAiZmlsZTouL2ZvcnJlc3QtdGFyZ2V0cy5lbnQiPgotXT4KLQotPHByb2plY3QgZGVmYXVsdD0ic2l0ZSI+Ci0gICAgJmZvcnJlc3QtdGFyZ2V0czsKLTwvcHJvamVjdD4KLS0tPgotCi0gIDx0YXJnZXQgbmFtZT0ic2l0ZSIgZGVwZW5kcz0iZm9ycmVzdC5pbml0IiBkZXNjcmlwdGlvbj0iR2VuZXJhdGVzIHN0YXRpYyBIVE1MIGRvY3VtZW50YXRpb24iPgotICAgIDxhbnQgYW50ZmlsZT0iJHtmb3JyZXN0LmhvbWV9L2ZvcnJlc3QuYW50cHJveHkueG1sIiB0YXJnZXQ9InNpdGUiLz4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJ3ZWJhcHAiIGRlcGVuZHM9ImZvcnJlc3QuaW5pdCIgZGVzY3JpcHRpb249IkdlbmVyYXRlcyBhbiB1bnBhY2thZ2VkIHdlYmFwcCBvZiB0aGUgd2Vic2l0ZSI+Ci0gICAgPGFudCBhbnRmaWxlPSIke2ZvcnJlc3QuaG9tZX0vZm9ycmVzdC5hbnRwcm94eS54bWwiIHRhcmdldD0id2ViYXBwIi8+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0id2FyIiBkZXBlbmRzPSJmb3JyZXN0LmluaXQiIGRlc2NyaXB0aW9uPSJHZW5lcmF0ZXMgYSAud2FyIGZpbGUgY29udGFpbmluZyB0aGUgd2Vic2l0ZSI+Ci0gICAgPGFudCBhbnRmaWxlPSIke2ZvcnJlc3QuaG9tZX0vZm9ycmVzdC5hbnRwcm94eS54bWwiIHRhcmdldD0id2FyIi8+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0idmFsaWRhdGUiIGRlcGVuZHM9ImZvcnJlc3QuaW5pdCIgZGVzY3JpcHRpb249IlZhbGlkYXRlcyBYTUwgZG9jdW1lbnRhdGlvbiBmaWxlcyI+Ci0gICAgPGFudCBhbnRmaWxlPSIke2ZvcnJlc3QuaG9tZX0vZm9ycmVzdC5hbnRwcm94eS54bWwiIHRhcmdldD0idmFsaWRhdGUiLz4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJmb3JyZXN0LmluaXQiIGRlcGVuZHM9ImZvcnJlc3Quc2V0aG9tZSwgZm9ycmVzdC5ob21lLmRlZmluZWQiLz4KLQotICA8dGFyZ2V0IG5hbWU9ImZvcnJlc3Quc2V0aG9tZSIgZGVwZW5kcz0iZm9ycmVzdC5sb2FkZW52LAotICBmb3JyZXN0LmNoZWNrZW52LCBmb3JyZXN0LmNoZWNraG9tZSwgZm9ycmVzdC5jaGVjay1idWlsZC5wcm9wZXJ0aWVzLAotICBmb3JyZXN0LmNoZWNrLXByb2plY3QucHJvcGVydGllcywgZm9ycmVzdC5jaGVjay1hbnQucHJvcGVydGllcywKLSAgZm9ycmVzdC5jaGVjay0uYW50LnByb3BlcnRpZXMiLz4KLQotICA8dGFyZ2V0IG5hbWU9ImZvcnJlc3QubG9hZGVudiIgdW5sZXNzPSJmb3JyZXN0LmhvbWUucHJlc2VudCI+Ci0gICAgPHByb3BlcnR5IGVudmlyb25tZW50PSJlbnYiLz4KLSAgICA8ZWNobyBsZXZlbD0idmVyYm9zZSI+Rm9ycmVzdDogR290ICR7ZW52LkZPUlJFU1RfSE9NRX08L2VjaG8+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0iZm9ycmVzdC5jaGVja2VudiIgaWY9ImVudi5GT1JSRVNUX0hPTUUiPgotICAgIDxlY2hvIGxldmVsPSJ2ZXJib3NlIj5Gb3VuZCAkRk9SUkVTVF9IT01FLi48L2VjaG8+Ci0gICAgPHByb3BlcnR5IG5hbWU9ImZvcnJlc3QuaG9tZSIgbG9jYXRpb249IiR7ZW52LkZPUlJFU1RfSE9NRX0iLz4KLSAgICA8ZWNobyBsZXZlbD0idmVyYm9zZSI+Zm9ycmVzdC5ob21lIHNldCB0byAke2ZvcnJlc3QuaG9tZX08L2VjaG8+Ci0gICAgPGF2YWlsYWJsZSBmaWxlPSIke2ZvcnJlc3QuaG9tZX0iIHR5cGU9ImRpciIgcHJvcGVydHk9ImZvcnJlc3QuaG9tZS5wcmVzZW50Ii8+Ci0gIDwvdGFyZ2V0PgotCi0KLSAgPHRhcmdldCBuYW1lPSJmb3JyZXN0LmNoZWNraG9tZSI+Ci0gICAgPGF2YWlsYWJsZSBmaWxlPSIke2ZvcnJlc3QuaG9tZX0iIHR5cGU9ImRpciIgcHJvcGVydHk9ImZvcnJlc3QuaG9tZS5wcmVzZW50Ii8+Ci0gICAgPGF2YWlsYWJsZSBmaWxlPSJidWlsZC5wcm9wZXJ0aWVzIiB0eXBlPSJmaWxlIiBwcm9wZXJ0eT0iYnVpbGQucHJvcGVydGllcy5wcmVzZW50Ii8+Ci0gICAgPGF2YWlsYWJsZSBmaWxlPSJwcm9qZWN0LnByb3BlcnRpZXMiIHR5cGU9ImZpbGUiIHByb3BlcnR5PSJwcm9qZWN0LnByb3BlcnRpZXMucHJlc2VudCIvPgotICAgIDxhdmFpbGFibGUgZmlsZT0iYW50LnByb3BlcnRpZXMiIHR5cGU9ImZpbGUiIHByb3BlcnR5PSJhbnQucHJvcGVydGllcy5wcmVzZW50Ii8+Ci0gICAgPGF2YWlsYWJsZSBmaWxlPSIuYW50LnByb3BlcnRpZXMiIHR5cGU9ImZpbGUiIHByb3BlcnR5PSIuYW50LnByb3BlcnRpZXMucHJlc2VudCIvPgotICA8L3RhcmdldD4KLQotICA8IS0tIE5vIHdlIGNhbid0IGV4dHJhY3QgdGhlIGNvbW1vbmFsaXRpZXMgYmVsb3cgaW50byBhbiBhbnRjYWxsJ2VkIHRhcmdldCwKLSAgYmVjYXVzZSBpdCB3b3VsZG4ndCBiZSBhYmxlIHRvIHNldCBmb3JyZXN0LmhvbWUgLS0+Ci0gIDx0YXJnZXQgbmFtZT0iZm9ycmVzdC5jaGVjay1idWlsZC5wcm9wZXJ0aWVzIiB1bmxlc3M9ImZvcnJlc3QuaG9tZS5wcmVzZW50IgotICBpZj0iYnVpbGQucHJvcGVydGllcy5wcmVzZW50Ij4KLSAgICA8ZWNobyBsZXZlbD0idmVyYm9zZSI+Rm9ycmVzdDogQ2hlY2tpbmcgYnVpbGQucHJvcGVydGllcy4uPC9lY2hvPgotICAgIDxsb2FkcHJvcGVydGllcyBzcmNmaWxlPSJidWlsZC5wcm9wZXJ0aWVzIj4KLSAgICAgIDxmaWx0ZXJjaGFpbj4KLSAgICAgICAgPGxpbmVjb250YWlucz4KLSAgICAgICAgICA8Y29udGFpbnMgdmFsdWU9ImZvcnJlc3QuaG9tZSIvPgotICAgICAgICA8L2xpbmVjb250YWlucz4KLSAgICAgIDwvZmlsdGVyY2hhaW4+Ci0gICAgPC9sb2FkcHJvcGVydGllcz4KLSAgICA8YXZhaWxhYmxlIGZpbGU9IiR7Zm9ycmVzdC5ob21lfSIgdHlwZT0iZGlyIiBwcm9wZXJ0eT0iZm9ycmVzdC5ob21lLnByZXNlbnQiLz4KLQotICA8L3RhcmdldD4KLQotICA8dGFyZ2V0IG5hbWU9ImZvcnJlc3QuY2hlY2stcHJvamVjdC5wcm9wZXJ0aWVzIiB1bmxlc3M9ImZvcnJlc3QuaG9tZS5wcmVzZW50IgotICBpZj0icHJvamVjdC5wcm9wZXJ0aWVzLnByZXNlbnQiPgotICAgIDxlY2hvIGxldmVsPSJ2ZXJib3NlIj5Gb3JyZXN0OiBDaGVja2luZyBwcm9qZWN0LnByb3BlcnRpZXMuLjwvZWNobz4KLSAgICA8bG9hZHByb3BlcnRpZXMgc3JjZmlsZT0icHJvamVjdC5wcm9wZXJ0aWVzIj4KLSAgICAgIDxmaWx0ZXJjaGFpbj4KLSAgICAgICAgPGxpbmVjb250YWlucz4KLSAgICAgICAgICA8Y29udGFpbnMgdmFsdWU9ImZvcnJlc3QuaG9tZSIvPgotICAgICAgICA8L2xpbmVjb250YWlucz4KLSAgICAgIDwvZmlsdGVyY2hhaW4+Ci0gICAgPC9sb2FkcHJvcGVydGllcz4KLSAgICA8YXZhaWxhYmxlIGZpbGU9IiR7Zm9ycmVzdC5ob21lfSIgdHlwZT0iZGlyIiBwcm9wZXJ0eT0iZm9ycmVzdC5ob21lLnByZXNlbnQiLz4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJmb3JyZXN0LmNoZWNrLWFudC5wcm9wZXJ0aWVzIiB1bmxlc3M9ImZvcnJlc3QuaG9tZS5wcmVzZW50IgotICBpZj0iYW50LnByb3BlcnRpZXMucHJlc2VudCI+Ci0gICAgPGVjaG8gbGV2ZWw9InZlcmJvc2UiPkZvcnJlc3Q6IENoZWNraW5nIGFudC5wcm9wZXJ0aWVzLi48L2VjaG8+Ci0gICAgPGxvYWRwcm9wZXJ0aWVzIHNyY2ZpbGU9ImFudC5wcm9wZXJ0aWVzIj4KLSAgICAgIDxmaWx0ZXJjaGFpbj4KLSAgICAgICAgPGxpbmVjb250YWlucz4KLSAgICAgICAgICA8Y29udGFpbnMgdmFsdWU9ImZvcnJlc3QuaG9tZSIvPgotICAgICAgICA8L2xpbmVjb250YWlucz4KLSAgICAgIDwvZmlsdGVyY2hhaW4+Ci0gICAgPC9sb2FkcHJvcGVydGllcz4KLSAgICA8YXZhaWxhYmxlIGZpbGU9IiR7Zm9ycmVzdC5ob21lfSIgdHlwZT0iZGlyIiBwcm9wZXJ0eT0iZm9ycmVzdC5ob21lLnByZXNlbnQiLz4KLSAgPC90YXJnZXQ+Ci0KLSAgPHRhcmdldCBuYW1lPSJmb3JyZXN0LmNoZWNrLS5hbnQucHJvcGVydGllcyIgdW5sZXNzPSJmb3JyZXN0LmhvbWUucHJlc2VudCIKLSAgaWY9Ii5hbnQucHJvcGVydGllcy5wcmVzZW50Ij4KLSAgICA8ZWNobyBsZXZlbD0idmVyYm9zZSI+Rm9ycmVzdDogQ2hlY2tpbmcgLmFudC5wcm9wZXJ0aWVzLi48L2VjaG8+Ci0gICAgPGxvYWRwcm9wZXJ0aWVzIHNyY2ZpbGU9Ii5hbnQucHJvcGVydGllcyI+Ci0gICAgICA8ZmlsdGVyY2hhaW4+Ci0gICAgICAgIDxsaW5lY29udGFpbnM+Ci0gICAgICAgICAgPGNvbnRhaW5zIHZhbHVlPSJmb3JyZXN0LmhvbWUiLz4KLSAgICAgICAgPC9saW5lY29udGFpbnM+Ci0gICAgICA8L2ZpbHRlcmNoYWluPgotICAgIDwvbG9hZHByb3BlcnRpZXM+Ci0gICAgPGF2YWlsYWJsZSBmaWxlPSIke2ZvcnJlc3QuaG9tZX0iIHR5cGU9ImRpciIgcHJvcGVydHk9ImZvcnJlc3QuaG9tZS5wcmVzZW50Ii8+Ci0gIDwvdGFyZ2V0PgotCi0gIDx0YXJnZXQgbmFtZT0iZm9ycmVzdC5ob21lLmRlZmluZWQiIGRlcGVuZHM9ImZvcnJlc3Quc2V0aG9tZSIgdW5sZXNzPSJmb3JyZXN0LmhvbWUucHJlc2VudCI+Ci0gICAgPHByb3BlcnR5IG5hbWU9InBhdGgiIHZhbHVlPSIke3VzZXIuaG9tZX0veG1sLWZvcnJlc3QvYnVpbGQvZGlzdC9zaGJhdCIvPgotICAgIDxwYXRoY29udmVydCB0YXJnZXRvcz0id2luZG93cyIgcHJvcGVydHk9IndpbnBhdGgiPgotICAgICAgPHBhdGg+Ci0gICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHtwYXRofSIvPgotICAgICAgPC9wYXRoPgotICAgIDwvcGF0aGNvbnZlcnQ+Ci0gICAgPHBhdGhjb252ZXJ0IHRhcmdldG9zPSJ1bml4IiBwcm9wZXJ0eT0idW5peHBhdGgiPgotICAgICAgPHBhdGg+Ci0gICAgICAgIDxwYXRoZWxlbWVudAotICAgICAgICAgIGxvY2F0aW9uPSIke3BhdGh9Ii8+Ci0gICAgICA8L3BhdGg+Ci0gICAgPC9wYXRoY29udmVydD4KLQotICAgIDxlY2hvPgotICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgVG8gcnVuIHRoaXMgdGFyZ2V0LCB5b3UgbmVlZCBGb3JyZXN0IGluc3RhbGxlZC4KLSAgICAgIFBsZWFzZSBkbyB0aGUgZm9sbG93aW5nOgotCi0gICAgICBleHBvcnQgQ1ZTUk9PVD06cHNlcnZlcjphbm9uY3ZzQGN2cy5hcGFjaGUub3JnOi9ob21lL2N2c3B1YmxpYwotICAgICAgY3ZzIGNoZWNrb3V0IHhtbC1mb3JyZXN0Ci0gICAgICBjZCB4bWwtZm9ycmVzdAotICAgICAgYnVpbGQgICAgICAoV2luZG93cykKLSAgICAgIC4vYnVpbGQuc2ggKFVuaXgpCi0KLSAgICAgIFRoZW4gZWl0aGVyOgotCi0gICAgICAtIFNldCBGT1JSRVNUX0hPTUUgYXMgdGhlIEZvcnJlc3QgYnVpbGQgaW5zdHJ1Y3Rpb25zIGRlc2NyaWJlCi0gICAgICAtIENyZWF0ZSBhIGJ1aWxkLnByb3BlcnRpZXMsIHdpdGggdGhlIGZvcnJlc3QuaG9tZSBwcm9wZXJ0eSBwb2ludGluZyB0bwotICAgICAgICB0aGUgZm9ycmVzdCBzaGJhdCBkaXJlY3RvcnksIGVnOgotCi0gICAgICAgIGZvcnJlc3QuaG9tZT0ke3dpbnBhdGh9ICAoV2luZG93cykKLSAgICAgICAgZm9ycmVzdC5ob21lPSR7dW5peHBhdGh9ICAoVW5peCkKLQotICAgICAgICAoYWRqdXN0aW5nIHRoZSBwYXRoIGFjY29yZGluZyB0byB3aGVyZSB5b3VyIHhtbC1mb3JyZXN0IGlzKQotICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgIDwvZWNobz4KLSAgICA8ZmFpbCBtZXNzYWdlPSJOZWVkIHRvIGRlZmluZSAkJHtmb3JyZXN0LmhvbWV9Ii8+Ci0gIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9mb3JyZXN0LnByb3BlcnRpZXMgYi93ZWJzaXRlL2ZvcnJlc3QucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc4N2U4MS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL2ZvcnJlc3QucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIwotIyBQcm9wZXJ0aWVzIHVzZWQgYnkgZm9ycmVzdC5idWlsZC54bWwgZm9yIGJ1aWxkaW5nIHRoZSB3ZWJzaXRlCi0jIyMjIyMjIyMjIyMjIwotCi0jIFByaW50cyBvdXQgYSBzdW1tYXJ5IG9mIEZvcnJlc3Qgc2V0dGluZ3MgZm9yIHRoaXMgcHJvamVjdAotI2ZvcnJlc3QuZWNobz10cnVlIAotCi0jIFByb2plY3QgbmFtZSAodXNlZCB0byBuYW1lIC53YXIgZmlsZSkKLSNwcm9qZWN0Lm5hbWU9eG1sYmVhbnMKLQotIyBTcGVjaWZpZXMgbmFtZSBvZiBGb3JyZXN0IHNraW4gdG8gdXNlCi0jcHJvamVjdC5za2luPWZvcnJlc3Qtc2l0ZQotI3Byb2plY3Quc2tpbj1mb3JyZXN0LWNzcwotI3Byb2plY3Quc2tpbj1hdmFsb24tdGlncmlzCi0jcHJvamVjdC5za2luPWtyeXNhbGlzLXNpdGUKLQotCi0jIyMjIyMjIyMjIyMjIwotIyBiZWhhdmlvdXJhbCBwcm9wZXJ0aWVzCi0jcHJvamVjdC5tZW51LXNjaGVtZT10YWJfYXR0cmlidXRlcwotI3Byb2plY3QubWVudS1zY2hlbWU9ZGlyZWN0b3JpZXMKLQotIyMjIyMjIyMjIyMjIyMKLSMgbGF5b3V0IHByb3BlcnRpZXMKLQotIyBQcm9wZXJ0aWVzIHRoYXQgbXVzdCBiZSBzZXQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbG9jYXRpb25zCi0jCi0jIFBhcmVudCBwcm9wZXJ0aWVzIG11c3QgYmUgc2V0LiBUaGlzIHVzdWFsbHkgbWVhbnMgdW5jb21tZW50aW5nCi0jIHByb2plY3QuY29udGVudC1kaXIgaWYgYW55IG90aGVyIHByb3BlcnR5IHVzaW5nIGl0IGlzIHVuY29tbWVudGVkCi0KLSNwcm9qZWN0LnN0YXR1cz1zdGF0dXMueG1sCi0jcHJvamVjdC5jb250ZW50LWRpcj1zcmMvZG9jdW1lbnRhdGlvbgotI3Byb2plY3QuY29uZi1kaXI9JHtwcm9qZWN0LmNvbnRlbnQtZGlyfS9jb25mCi0jcHJvamVjdC5zaXRlbWFwLWRpcj0ke3Byb2plY3QuY29udGVudC1kaXJ9Ci0jcHJvamVjdC54ZG9jcy1kaXI9JHtwcm9qZWN0LmNvbnRlbnQtZGlyfS9jb250ZW50L3hkb2NzCi0jcHJvamVjdC5yZXNvdXJjZXMtZGlyPSR7cHJvamVjdC5jb250ZW50LWRpcn0vcmVzb3VyY2VzCi0jcHJvamVjdC5zdHlsZXNoZWV0cy1kaXI9JHtwcm9qZWN0LnJlc291cmNlcy1kaXJ9L3N0eWxlc2hlZXRzCi0jcHJvamVjdC5pbWFnZXMtZGlyPSR7cHJvamVjdC5yZXNvdXJjZXMtZGlyfS9pbWFnZXMKLSNwcm9qZWN0LnNjaGVtYS1kaXI9JHtwcm9qZWN0LnJlc291cmNlcy1kaXJ9L3NjaGVtYQotI3Byb2plY3Quc2tpbnMtZGlyPSR7cHJvamVjdC5jb250ZW50LWRpcn0vc2tpbnMKLSNwcm9qZWN0LnNraW5jb25mPSR7cHJvamVjdC5jb250ZW50LWRpcn0vc2tpbmNvbmYueG1sCi0jcHJvamVjdC5saWItZGlyPSR7cHJvamVjdC5jb250ZW50LWRpcn0vbGliCi0jcHJvamVjdC5jbGFzc2VzLWRpcj0ke3Byb2plY3QuY29udGVudC1kaXJ9L2NsYXNzZXMKLQotCi0jIyMjIyMjIyMjIyMjIwotIyBDb2Nvb24gY2F0YWxvZyBlbnRpdHkgcmVzb2x2ZXIgcHJvcGVydGllcwotCi0jIEEgbG9jYWwgT0FTSVMgY2F0YWxvZyBmaWxlIHRvIHN1cHBsZW1lbnQgdGhlIGRlZmF1bHQgRm9ycmVzdCBjYXRhbG9nCi0jcHJvamVjdC5jYXRhbG9nPSR7cHJvamVjdC5zY2hlbWEtZGlyfS9jYXRhbG9nLnhjYXQKLQotIyBUaGUgdmVyYm9zaXR5IGxldmVsIGZvciB0aGUgZW50aXR5IHJlc29sdmVyICgxLi4xMCkKLSNmb3JyZXN0LmNhdGFsb2cudmVyYm9zaXR5PTEKLQotCi0jIyMjIyMjIyMjIyMjIwotIyB2YWxpZGF0aW9uIHByb3BlcnRpZXMKLQotIyBUaGVzZSBwcm9wcyBkZXRlcm1pbmUgaWYgdmFsaWRhdGlvbiBpcyBwZXJmb3JtZWQgYXQgYWxsCi0jIFZhbHVlcyBhcmUgaW5oZXJpdGVkIHVubGVzcyBvdmVycmlkZGVuLgotIyBFZywgaWYgZm9ycmVzdC52YWxpZGF0ZT1mYWxzZSwgdGhlbiBhbGwgb3RoZXJzIGFyZSBmYWxzZSB1bmxlc3Mgc2V0IHRvIHRydWUuCi0jZm9ycmVzdC52YWxpZGF0ZT10cnVlCi0jZm9ycmVzdC52YWxpZGF0ZS54ZG9jcz0ke2ZvcnJlc3QudmFsaWRhdGV9Ci0jZm9ycmVzdC52YWxpZGF0ZS5za2luY29uZj0ke2ZvcnJlc3QudmFsaWRhdGV9Ci0jZm9ycmVzdC52YWxpZGF0ZS5zaXRlbWFwPSR7Zm9ycmVzdC52YWxpZGF0ZX0KLSNmb3JyZXN0LnZhbGlkYXRlLnN0eWxlc2hlZXRzPSR7Zm9ycmVzdC52YWxpZGF0ZX0KLSNmb3JyZXN0LnZhbGlkYXRlLnNraW5zPSR7Zm9ycmVzdC52YWxpZGF0ZX0KLSNmb3JyZXN0LnZhbGlkYXRlLnNraW5zLnN0eWxlc2hlZXRzPSR7Zm9ycmVzdC52YWxpZGF0ZS5za2luc30KLQotCi0jIEtleToKLSMgKi5mYWlsb25lcnJvcj0odHJ1ZXxmYWxzZSkgICAgc3RvcCB3aGVuIGFuIFhNTCBmaWxlIGlzIGludmFsaWQKLSMgKi5pbmNsdWRlcz0ocGF0dGVybikgICAgICAgICBDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwYXRoIHBhdHRlcm5zIHRvIHZhbGlkYXRlCi0jICouZXhjbHVkZXM9KHBhdHRlcm4pICAgICAgICAgQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcGF0aCBwYXR0ZXJucyB0byBub3QgdmFsaWRhdGUKLQotI2ZvcnJlc3QudmFsaWRhdGUuZmFpbG9uZXJyb3I9dHJ1ZQotI2ZvcnJlc3QudmFsaWRhdGUuaW5jbHVkZXM9KiovKgotI2ZvcnJlc3QudmFsaWRhdGUuZXhjbHVkZXM9Ci0jCi0jZm9ycmVzdC52YWxpZGF0ZS54ZG9jcy5mYWlsb25lcnJvcj0ke2ZvcnJlc3QudmFsaWRhdGUuZmFpbG9uZXJyb3J9Ci0jCi0jZm9ycmVzdC52YWxpZGF0ZS54ZG9jcy5pbmNsdWRlcz0qKi8qLngqCi0jZm9ycmVzdC52YWxpZGF0ZS54ZG9jcy5leGNsdWRlcz1zaXRlLnhtbAotIwotI2ZvcnJlc3QudmFsaWRhdGUuc2tpbmNvbmYuaW5jbHVkZXM9JHtza2luY29uZi1maWxlfQotI2ZvcnJlc3QudmFsaWRhdGUuc2tpbmNvbmYuZXhjbHVkZXM9Ci0jZm9ycmVzdC52YWxpZGF0ZS5za2luY29uZi5mYWlsb25lcnJvcj0ke2ZvcnJlc3QudmFsaWRhdGUuZmFpbG9uZXJyb3J9Ci0jCi0jZm9ycmVzdC52YWxpZGF0ZS5zaXRlbWFwLmluY2x1ZGVzPSR7c2l0ZW1hcC1maWxlfQotI2ZvcnJlc3QudmFsaWRhdGUuc2l0ZW1hcC5leGNsdWRlcz0KLSNmb3JyZXN0LnZhbGlkYXRlLnNpdGVtYXAuZmFpbG9uZXJyb3I9JHtmb3JyZXN0LnZhbGlkYXRlLmZhaWxvbmVycm9yfQotIwotI2ZvcnJlc3QudmFsaWRhdGUuc3R5bGVzaGVldHMuaW5jbHVkZXM9KiovKi54c2wKLSNmb3JyZXN0LnZhbGlkYXRlLnN0eWxlc2hlZXRzLmV4Y2x1ZGVzPQotI2ZvcnJlc3QudmFsaWRhdGUuc3R5bGVzaGVldHMuZmFpbG9uZXJyb3I9JHtmb3JyZXN0LnZhbGlkYXRlLmZhaWxvbmVycm9yfQotIwotI2ZvcnJlc3QudmFsaWRhdGUuc2tpbnMuaW5jbHVkZXM9KiovKgotI2ZvcnJlc3QudmFsaWRhdGUuc2tpbnMuZXhjbHVkZXM9KiovKi54c2wKLSNmb3JyZXN0LnZhbGlkYXRlLnNraW5zLmZhaWxvbmVycm9yPSR7Zm9ycmVzdC52YWxpZGF0ZS5mYWlsb25lcnJvcn0KLSMKLSNmb3JyZXN0LnZhbGlkYXRlLnNraW5zLnN0eWxlc2hlZXRzLmluY2x1ZGVzPSoqLyoueHNsCi0jZm9ycmVzdC52YWxpZGF0ZS5za2lucy5zdHlsZXNoZWV0cy5leGNsdWRlcz0KLSNmb3JyZXN0LnZhbGlkYXRlLnNraW5zLnN0eWxlc2hlZXRzLmZhaWxvbmVycm9yPSR7Zm9ycmVzdC52YWxpZGF0ZS5za2lucy5mYWlsb25lcnJvcn0KLQotIyMjIyMjIyMjIyMjIyMKLSMgR2VuZXJhbCBGb3JyZXN0IHByb3BlcnRpZXMKLQotIyBUaGUgVVJMIHRvIHN0YXJ0IGNyYXdsaW5nIGZyb20KLSNwcm9qZWN0LnN0YXJ0LXVyaT1pbmRleC5odG1sCi0jIFNldCBsb2dnaW5nIGxldmVsIGZvciBtZXNzYWdlcyBwcmludGVkIHRvIHRoZSBjb25zb2xlCi0jIChERUJVRywgSU5GTywgV0FSTiwgRVJST1IsIEZBVEFMX0VSUk9SKQotI3Byb2plY3QuZGVidWdsZXZlbD1FUlJPUgotIyBNYXggbWVtb3J5IHRvIGFsbG9jYXRlIHRvIEphdmEKLSNmb3JyZXN0Lm1heG1lbW9yeT02NG0KLSMgQW55IG90aGVyIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBKVk0uIEZvciBleGFtcGxlLCB0byBydW4gb24gYW4gWC1sZXNzCi0jIHNlcnZlciwgc2V0IHRvIC1EamF2YS5hd3QuaGVhZGxlc3M9dHJ1ZQotI2ZvcnJlc3QuanZtYXJncz0KLSNwcm9qZWN0LmJ1Z3RyYWNraW5nLXVybD1odHRwOi8vbmFnb3lhLmFwYWNoZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPQpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9SRUFETUUudHh0IGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9SRUFETUUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTQ1YjU4Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vUkVBRE1FLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLVRoaXMgaXMgdGhlIGJhc2UgZG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkuIEl0IHVzdWFsbHkgY29udGFpbnMgdHdvIGZpbGVzOgotCi1za2luY29uZi54bWwgICAgICMgVGhpcyBmaWxlIGN1c3RvbWl6ZXMgRm9ycmVzdCBmb3IgeW91ciBwcm9qZWN0LiBJbiBpdCwgeW91Ci0gICAgICAgICAgICAgICAgICMgdGVsbCBmb3JyZXN0IHRoZSBwcm9qZWN0IG5hbWUsIGxvZ28sIGNvcHlyaWdodCBpbmZvLCBldGMKLQotc2l0ZW1hcC54bWFwICAgICAjIE9wdGlvbmFsLiBUaGlzIHNpdGVtYXAgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IG9uZSBidW5kbGVkCi0gICAgICAgICAgICAgICAgICMgd2l0aCBGb3JyZXN0LiBUeXBpY2FsbHksIG9uZSB3b3VsZCBjb3B5IGEgc2l0ZW1hcCBmcm9tCi0gICAgICAgICAgICAgICAgICMgeG1sLWZvcnJlc3Qvc3JjL3Jlc291cmNlcy9jb25mL3NpdGVtYXAueG1hcCwgYW5kIGN1c3RvbWl6ZQotICAgICAgICAgICAgICAgICAjIGl0LgotCmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9ndWlkZS9jb25HZXR0aW5nU3RhcnRlZHdpdGhYTUxCZWFucy5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvZ3VpZGUvY29uR2V0dGluZ1N0YXJ0ZWR3aXRoWE1MQmVhbnMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhjOThmZC4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9ndWlkZS9jb25HZXR0aW5nU3RhcnRlZHdpdGhYTUxCZWFucy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTE5ICswLDAgQEAKLTwhZG9jdHlwZSBIVE1MIHB1YmxpYyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgRnJhbWVzZXQvL0VOIj4KLQotPGh0bWw+Ci08aGVhZD4KLTwhLS0gSW5zdGFuY2VCZWdpbkVkaXRhYmxlIG5hbWU9ImRvY3RpdGxlIiAtLT4KLTx0aXRsZT5HZXR0aW5nIFN0YXJ0ZWQgd2l0aCBYTUxCZWFuczwvdGl0bGU+Ci08IS0tIEluc3RhbmNlRW5kRWRpdGFibGUgLS0+IAotPCEtLShNZXRhKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLQotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PSRDSEFSU0VUOyI+Ci0KLQotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0ibWV0YXRhZ3MiIC0tPgotCi08bWV0YSBuYW1lPSJhdXRob3IiIGNvbnRlbnQ9InlvdXIgbmFtZSI+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQSBkZXNjcmlwdGlvbiBvZiB0aGUgdG9waWMgY29udGVudHMuIj4KLTxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJrZXl3b3JkcyB0byBoZWxwIGluIHNlYXJjaGVzIj4KLTxtZXRhIG5hbWU9ImRhdGUgbGFzdCBtb2RpZmllZCIgY29udGVudD0iMTAvMjUvMDIiPgotPCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPgotCi08IS0tKExpbmtzKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iaGVhZCIgLS0+IAotPGxpbmsgaHJlZj0iLi4veG1sYmVhbnMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4KLTwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4KLTxsaW5rIGhyZWY9Ii4uL3htbGJlYW5zLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+Ci08YSBocmVmPSIuLi8uLi8uLi9jb3JlL2luZGV4Lmh0bWwiIGlkPSJpbmRleCI+PC9hPgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgc3JjPSIuLi8uLi8uLi9jb3JlL3RvcGljSW5mby5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiBzcmM9Ii4uLy4uLy4uL2NvcmUvQ29va2llQ2xhc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgc3JjPSIuLi8uLi8uLi9jb3JlL2Rpc3BsYXlDb250ZW50LmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLQotPCEtLShCb2R5KT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLTxib2R5PgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+Ci0KLTwvc2NyaXB0PgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iYm9keSIgLS0+IAotPGgxPiBHZXR0aW5nIFN0YXJ0ZWQgd2l0aCBYTUxCZWFuczwvaDE+Ci08ZGl2IGlkPSJ0b3BpY3RleHQiPiAKLSAgPHA+WE1MQmVhbnMgcHJvdmlkZXMgaW50dWl0aXZlIHdheXMgdG8gaGFuZGxlIFhNTCB0aGF0IG1ha2UgaXQgZWFzaWVyIGZvciB5b3UgCi0gICAgdG8gYWNjZXNzIGFuZCBtYW5pcHVsYXRlIFhNTCBkYXRhIGFuZCBkb2N1bWVudHMgaW4gSmF2YS4gPC9wPgotICA8cD5DaGFyYWN0ZXJpc3RpY3Mgb2YgWE1MQmVhbnMgYXBwcm9hY2ggdG8gWE1MOjwvcD4KLTwvZGl2PgotPHVsPgotICA8bGk+IAotICAgIDxkaXY+SXQgcHJvdmlkZXMgYSBmYW1pbGlhciBKYXZhIG9iamVjdC1iYXNlZCB2aWV3IG9mIFhNTCBkYXRhIHdpdGhvdXQgbG9zaW5nIAotICAgICAgYWNjZXNzIHRvIHRoZSBvcmlnaW5hbCwgbmF0aXZlIFhNTCBzdHJ1Y3R1cmUuPC9kaXY+Ci0gIDwvbGk+Ci0gIDxsaT4gCi0gICAgPGRpdj5UaGUgWE1MJ3MgaW50ZWdyaXR5IGFzIGEgZG9jdW1lbnQgaXMgbm90IGxvc3Qgd2l0aCBYTUxCZWFucy4gWE1MLW9yaWVudGVkIAotICAgICAgQVBJcyBjb21tb25seSB0YWtlIHRoZSBYTUwgYXBhcnQgaW4gb3JkZXIgdG8gYmluZCB0byBpdHMgcGFydHMuIFdpdGggWE1MQmVhbnMsIAotICAgICAgdGhlIGVudGlyZSBYTUwgaW5zdGFuY2UgZG9jdW1lbnQgaXMgaGFuZGxlZCBhcyBhIHdob2xlLiBUaGUgWE1MIGRhdGEgaXMgCi0gICAgICBzdG9yZWQgaW4gbWVtb3J5IGFzIFhNTC4gVGhpcyBtZWFucyB0aGF0IHRoZSBkb2N1bWVudCBvcmRlciBpcyBwcmVzZXJ2ZWQgCi0gICAgICBhcyB3ZWxsIGFzIHRoZSBvcmlnaW5hbCBlbGVtZW50IGNvbnRlbnQgd2l0aCB3aGl0ZXNwYWNlLjwvZGl2PgotICA8L2xpPgotICA8bGk+IAotICAgIDxkaXY+V2l0aCB0eXBlcyBnZW5lcmF0ZWQgZnJvbSBzY2hlbWEsIGFjY2VzcyB0byBYTUwgaW5zdGFuY2VzIGlzIHRocm91Z2ggCi0gICAgICBKYXZhQmVhbi1saWtlIGFjY2Vzc29ycywgd2l0aCBnZXQgYW5kIHNldCBtZXRob2RzLjwvZGl2PgotICA8L2xpPgotICA8bGk+IAotICAgIDxkaXY+SXQgaXMgZGVzaWduZWQgd2l0aCBYTUwgc2NoZW1hIGluIG1pbmQgZnJvbSB0aGUgYmVnaW5uaW5nICYjODIxMjsgWE1MQmVhbnMgCi0gICAgICBzdXBwb3J0cyBhbGwgWE1MIHNjaGVtYSBkZWZpbml0aW9ucy48L2Rpdj4KLSAgPC9saT4KLSAgPGxpPkFjY2VzcyB0byBYTUwgaXMgZmFzdC48L2xpPgotPC91bD4KLTxkaXY+IAotICA8cD5UaGUgc3RhcnRpbmcgcG9pbnQgZm9yIFhNTEJlYW5zIGlzIFhNTCBzY2hlbWEuIEEgc2NoZW1hIChjb250YWluZWQgaW4gYW4gCi0gICAgWFNEIGZpbGUpIGlzIGFuIFhNTCBkb2N1bWVudCB0aGF0IGRlZmluZXMgYSBzZXQgb2YgcnVsZXMgdG8gd2hpY2ggb3RoZXIgWE1MIAotICAgIGRvY3VtZW50cyBtdXN0IGNvbmZvcm0uIFRoZSBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb24gcHJvdmlkZXMgYSByaWNoIGRhdGEgCi0gICAgbW9kZWwgdGhhdCBhbGxvd3MgeW91IHRvIGV4cHJlc3Mgc29waGlzdGljYXRlZCBzdHJ1Y3R1cmUgYW5kIGNvbnN0cmFpbnRzIG9uIAotICAgIHlvdXIgZGF0YS4gRm9yIGV4YW1wbGUsIGFuIFhNTCBzY2hlbWEgY2FuIGVuZm9yY2UgY29udHJvbCBvdmVyIGhvdyBkYXRhIGlzIAotICAgIG9yZGVyZWQgaW4gYSBkb2N1bWVudCwgb3IgY29uc3RyYWludHMgb24gcGFydGljdWxhciB2YWx1ZXMgKGZvciBleGFtcGxlLCBhIAotICAgIGJpcnRoIGRhdGUgdGhhdCBtdXN0IGJlIGxhdGVyIHRoYW4gMTkwMCkuIFVuZm9ydHVuYXRlbHksIHRoZSBhYmlsaXR5IHRvIGVuZm9yY2UgCi0gICAgcnVsZXMgbGlrZSB0aGlzIGlzIHR5cGljYWxseSBub3QgYXZhaWxhYmxlIGluIEphdmEgd2l0aG91dCB3cml0aW5nIGN1c3RvbSAKLSAgICBjb2RlLiBYTUxCZWFucyBob25vcnMgc2NoZW1hIGNvbnN0cmFpbnRzLjwvcD4KLSAgPHAgY2xhc3M9Im5vdGVwYXJhIj48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFdoZXJlIGFuIFhNTCBzY2hlbWEgZGVmaW5lcyBydWxlcyAKLSAgICBmb3IgYW4gWE1MIGRvY3VtZW50LCBhbiBYTUwgPGVtPmluc3RhbmNlPC9lbT4gaXMgYW4gWE1MIGRvY3VtZW50IHRoYXQgY29uZm9ybXMgCi0gICAgdG8gdGhlIHNjaGVtYS48L3A+Ci0gIDxwPllvdSBjb21waWxlIGEgc2NoZW1hIChYU0QpIGZpbGUgdG8gZ2VuZXJhdGUgYSBzZXQgb2YgSmF2YSBpbnRlcmZhY2VzIHRoYXQgCi0gICAgbWlycm9yIHRoZSBzY2hlbWEuIFdpdGggdGhlc2UgdHlwZXMsIHlvdSBwcm9jZXNzIFhNTCBpbnN0YW5jZSBkb2N1bWVudHMgdGhhdCAKLSAgICBjb25mb3JtIHRvIHRoZSBzY2hlbWEuIFlvdSBiaW5kIGFuIFhNTCBpbnN0YW5jZSBkb2N1bWVudCB0byB0aGVzZSB0eXBlczsgY2hhbmdlcyAKLSAgICBtYWRlIHRocm91Z2ggdGhlIEphdmEgaW50ZXJmYWNlIGNoYW5nZSB0aGUgdW5kZXJseWluZyBYTUwgcmVwcmVzZW50YXRpb24uPC9wPgotICA8cD5QcmV2aW91cyBvcHRpb25zIGZvciBoYW5kbGluZyBYTUwgaW5jbHVkZSB1c2luZyBYTUwgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcyAKLSAgICAoc3VjaCBhcyBET00gb3IgU0FYKSBvciBhbiBYTUwgbWFyc2hhbGxpbmcvYmluZGluZyB0b29sIChzdWNoIGFzIEpBWEIpLiBCZWNhdXNlIAotICAgIGl0IGxhY2tzIHN0cm9uZyBzY2hlbWEtb3JpZW50ZWQgdHlwaW5nLCBuYXZpZ2F0aW9uIGluIGEgRE9NLW9yaWVudGVkIG1vZGVsIAotICAgIGlzIG1vcmUgdGVkaW91cyBhbmQgcmVxdWlyZXMgYW4gdW5kZXJzdGFuZGluZyBvZiB0aGUgY29tcGxldGUgb2JqZWN0IG1vZGVsLiAKLSAgICBKQVhCIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBYTUwgc2NoZW1hIHNwZWNpZmljYXRpb24sIGJ1dCBoYW5kbGVzIG9ubHkgYSAKLSAgICBzdWJzZXQgb2YgaXQ7IFhNTEJlYW5zIHN1cHBvcnRzIGFsbCBvZiBpdC4gQWxzbywgYnkgc3RvcmluZyB0aGUgZGF0YSBpbiBtZW1vcnkgCi0gICAgYXMgWE1MLCBYTUxCZWFucyBpcyBhYmxlIHRvIHJlZHVjZSB0aGUgb3ZlcmhlYWQgb2YgbWFyc2hhbGxpbmcgYW5kIGRlbWFyc2hhbGxpbmcuPC9wPgotICA8aDE+QWNjZXNzaW5nIFhNTCBVc2luZyBJdHMgU2NoZW1hPC9oMT4KLSAgPHA+VG8gZ2V0IGEgZ2xpbXBzZSBvZiB0aGUga2luZHMgb2YgdGhpbmdzIHlvdSBjYW4gZG8gd2l0aCBYTUxCZWFucywgdGFrZSBhIAotICAgIGxvb2sgYXQgYW4gZXhhbXBsZSB1c2luZyBYTUwgZm9yIGEgcHVyY2hhc2Ugb3JkZXIuIFRoZSBwdXJjaGFzZSBvcmRlciBYTUwgCi0gICAgY29udGFpbnMgZGF0YSBleGNoYW5nZWQgYnkgdHdvIHBhcnRpZXMsIHN1Y2ggYXMgdHdvIGNvbXBhbmllcy4gQm90aCBwYXJ0aWVzIAotICAgIG5lZWQgdG8gYmUgYWJsZSB0byByZWx5IG9uIGEgY29uc2lzdGVudCBtZXNzYWdlIHNoYXBlLCBhbmQgYSBzY2hlbWEgc3BlY2lmaWVzIAotICAgIHRoZSBjb21tb24gZ3JvdW5kLiA8L3A+Ci0gIDxwPkhlcmUncyB3aGF0IGEgcHVyY2hhc2Ugb3JkZXIgWE1MIGluc3RhbmNlIG1pZ2h0IGxvb2sgbGlrZS48L3A+Ci0gIDxwcmU+Ci0mbHQ7cG86cHVyY2hhc2Utb3JkZXIgeG1sbnM6cG89Imh0dHA6Ly9vcGVudXJpLm9yZy9lYXN5cG8iJmd0OwotICAgICZsdDtwbzpjdXN0b21lciZndDsKLSAgICAgICAgJmx0O3BvOm5hbWUmZ3Q7R2xhZHlzIEtyYXZpdHombHQ7L3BvOm5hbWUmZ3Q7Ci0gICAgICAgICZsdDtwbzphZGRyZXNzJmd0O0FueXRvd24sIFBBJmx0Oy9wbzphZGRyZXNzJmd0OwotICAgICZsdDsvcG86Y3VzdG9tZXImZ3Q7Ci0gICAgJmx0O3BvOmRhdGUmZ3Q7MjAwMy0wMS0wN1QxNDoxNjowMC0wNTowMCZsdDsvcG86ZGF0ZSZndDsKLSAgICAmbHQ7cG86bGluZS1pdGVtJmd0OwotICAgICAgICAmbHQ7cG86ZGVzY3JpcHRpb24mZ3Q7QnVybmhhbSdzIENlbGVzdGlhbCBIYW5kYm9vaywgVm9sIDEmbHQ7L3BvOmRlc2NyaXB0aW9uJmd0OwotICAgICAgICAmbHQ7cG86cGVyLXVuaXQtb3VuY2VzJmd0OzUmbHQ7L3BvOnBlci11bml0LW91bmNlcyZndDsKLSAgICAgICAgJmx0O3BvOnByaWNlJmd0OzIxLjc5Jmx0Oy9wbzpwcmljZSZndDsKLSAgICAgICAgJmx0O3BvOnF1YW50aXR5Jmd0OzImbHQ7L3BvOnF1YW50aXR5Jmd0OwotICAgICZsdDsvcG86bGluZS1pdGVtJmd0OwotICAgICZsdDtwbzpsaW5lLWl0ZW0mZ3Q7Ci0gICAgICAgICZsdDtwbzpkZXNjcmlwdGlvbiZndDtCdXJuaGFtJ3MgQ2VsZXN0aWFsIEhhbmRib29rLCBWb2wgMiZsdDsvcG86ZGVzY3JpcHRpb24mZ3Q7Ci0gICAgICAgICZsdDtwbzpwZXItdW5pdC1vdW5jZXMmZ3Q7NSZsdDsvcG86cGVyLXVuaXQtb3VuY2VzJmd0OwotICAgICAgICAmbHQ7cG86cHJpY2UmZ3Q7MTkuODkmbHQ7L3BvOnByaWNlJmd0OwotICAgICAgICAmbHQ7cG86cXVhbnRpdHkmZ3Q7MiZsdDsvcG86cXVhbnRpdHkmZ3Q7Ci0gICAgJmx0Oy9wbzpsaW5lLWl0ZW0mZ3Q7Ci0mbHQ7cG86c2hpcHBlciZndDsKLSAgICAgICAgJmx0O3BvOm5hbWUmZ3Q7WmlwU2hpcCZsdDsvcG86bmFtZSZndDsKLSAgICAgICAgJmx0O3BvOnBlci1vdW5jZS1yYXRlJmd0OzAuNzQmbHQ7L3BvOnBlci1vdW5jZS1yYXRlJmd0OwotICAgICZsdDsvcG86c2hpcHBlciZndDsKLSZsdDsvcG86cHVyY2hhc2Utb3JkZXImZ3Q7PC9wcmU+Ci0gIDxwPlRoaXMgWE1MIGluY2x1ZGVzIGEgcm9vdCBlbGVtZW50LCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+cHVyY2hhc2Utb3JkZXI8L3NwYW4+LCAKLSAgICB0aGF0IGhhcyB0aHJlZSBraW5kcyBvZiBjaGlsZCBlbGVtZW50czogPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmN1c3RvbWVyPC9zcGFuPiwgCi0gICAgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmRhdGU8L3NwYW4+LCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+bGluZS1pdGVtPC9zcGFuPiwgCi0gICAgYW5kIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5zaGlwcGVyPC9zcGFuPi4gQW4gaW50dWl0aXZlLCBvYmplY3QtYmFzZWQgdmlldyAKLSAgICBvZiB0aGlzIFhNTCB3b3VsZCBwcm92aWRlIGFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5wdXJjaGFzZS1vcmRlcjwvc3Bhbj4gCi0gICAgZWxlbWVudCwgYW5kIGl0IHdvdWxkIGhhdmUgbWV0aG9kcyBmb3IgZ2V0dGluZyB0aGUgZGF0ZSBhbmQgZm9yIGdldHRpbmcgc3Vib3JkaW5hdGUgCi0gICAgb2JqZWN0cyBmb3IgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmN1c3RvbWVyPC9zcGFuPiwgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmxpbmUtaXRlbTwvc3Bhbj4sIAotICAgIGFuZCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+c2hpcHBlcjwvc3Bhbj4gZWxlbWVudHMuIEVhY2ggb2YgdGhlIGxhc3QgdGhyZWUgCi0gICAgd291bGQgaGF2ZSBpdHMgb3duIG1ldGhvZHMgZm9yIGdldHRpbmcgdGhlIGRhdGEgaW5zaWRlIHRoZW0gYXMgd2VsbC48L3A+Ci0gIDxoMj5Mb29raW5nIGF0IHRoZSBTY2hlbWE8L2gyPgotICA8cD5UaGUgZm9sbG93aW5nIFhNTCBpcyB0aGUgdGhlIHNjaGVtYSBmb3IgdGhlIHByZWNlZGluZyBwdXJjaGFzZSBvcmRlciBYTUwuIAotICAgIEl0IGRlZmluZXMgdGhlIFhNTCdzICZxdW90O3NoYXBlJnF1b3Q7ICYjODIxMjsgd2hhdCBpdHMgZWxlbWVudHMgYXJlLCB3aGF0IAotICAgIG9yZGVyIHRoZXkgYXBwZWFyIGluLCB3aGljaCBhcmUgY2hpbGRyZW4gb2Ygd2hpY2gsIGFuZCBzbyBvbi48L3A+Ci08L2Rpdj4KLTxkaXY+IAotICA8cHJlPgotJmx0O3hzOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9vcGVudXJpLm9yZy9lYXN5cG8iCi0gICAgeG1sbnM6cG89Imh0dHA6Ly9vcGVudXJpLm9yZy9lYXN5cG8iCi0gICAgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiZndDsKLQkKLSAgICAmbHQ7eHM6ZWxlbWVudCBuYW1lPSJwdXJjaGFzZS1vcmRlciImZ3Q7Ci0gICAgICAgICZsdDt4czpjb21wbGV4VHlwZSZndDsKLSAgICAgICAgICAgICZsdDt4czpzZXF1ZW5jZSZndDsKLSAgICAgICAgICAgICAgICAmbHQ7eHM6ZWxlbWVudCBuYW1lPSJjdXN0b21lciIgdHlwZT0icG86Y3VzdG9tZXIiLyZndDsKLSAgICAgICAgICAgICAgICAmbHQ7eHM6ZWxlbWVudCBuYW1lPSJkYXRlIiB0eXBlPSJ4czpkYXRlVGltZSIvJmd0OwotICAgICAgICAgICAgICAgICZsdDt4czplbGVtZW50IG5hbWU9ImxpbmUtaXRlbSIgdHlwZT0icG86bGluZS1pdGVtIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8mZ3Q7Ci0gICAgICAgICAgICAgICAgJmx0O3hzOmVsZW1lbnQgbmFtZT0ic2hpcHBlciIgdHlwZT0icG86c2hpcHBlciIgbWluT2NjdXJzPSIwIi8mZ3Q7Ci0gICAgICAgICAgICAmbHQ7L3hzOnNlcXVlbmNlJmd0OwotICAgICAgICAmbHQ7L3hzOmNvbXBsZXhUeXBlJmd0OwotICAgICZsdDsveHM6ZWxlbWVudCZndDsKLSAgICAmbHQ7eHM6Y29tcGxleFR5cGUgbmFtZT0iY3VzdG9tZXIiJmd0OwotICAgICAgICAmbHQ7eHM6c2VxdWVuY2UmZ3Q7Ci0gICAgICAgICAgICAmbHQ7eHM6ZWxlbWVudCBuYW1lPSJuYW1lIiB0eXBlPSJ4czpzdHJpbmciLyZndDsKLSAgICAgICAgICAgICZsdDt4czplbGVtZW50IG5hbWU9ImFkZHJlc3MiIHR5cGU9InhzOnN0cmluZyIvJmd0OwotICAgICAgICAmbHQ7L3hzOnNlcXVlbmNlJmd0OwotICAgICZsdDsveHM6Y29tcGxleFR5cGUmZ3Q7Ci0gICAgJmx0O3hzOmNvbXBsZXhUeXBlIG5hbWU9ImxpbmUtaXRlbSImZ3Q7Ci0gICAgICAgICZsdDt4czpzZXF1ZW5jZSZndDsKLSAgICAgICAgICAgICZsdDt4czplbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIiB0eXBlPSJ4czpzdHJpbmciLyZndDsKLSAgICAgICAgICAgICZsdDt4czplbGVtZW50IG5hbWU9InBlci11bml0LW91bmNlcyIgdHlwZT0ieHM6ZGVjaW1hbCIvJmd0OwotICAgICAgICAgICAgJmx0O3hzOmVsZW1lbnQgbmFtZT0icHJpY2UiIHR5cGU9InhzOmRvdWJsZSIvJmd0OwotICAgICAgICAgICAgJmx0O3hzOmVsZW1lbnQgbmFtZT0icXVhbnRpdHkiIHR5cGU9InhzOmludCIvJmd0OwotICAgICAgICAmbHQ7L3hzOnNlcXVlbmNlJmd0OwotICAgICZsdDsveHM6Y29tcGxleFR5cGUmZ3Q7Ci0gICAgJmx0O3hzOmNvbXBsZXhUeXBlIG5hbWU9InNoaXBwZXIiJmd0OwotICAgICAgICAmbHQ7eHM6c2VxdWVuY2UmZ3Q7Ci0gICAgICAgICAgICAmbHQ7eHM6ZWxlbWVudCBuYW1lPSJuYW1lIiB0eXBlPSJ4czpzdHJpbmciLyZndDsKLSAgICAgICAgICAgICZsdDt4czplbGVtZW50IG5hbWU9InBlci1vdW5jZS1yYXRlIiB0eXBlPSJ4czpkZWNpbWFsIi8mZ3Q7Ci0gICAgICAgICZsdDsveHM6c2VxdWVuY2UmZ3Q7Ci0gICAgJmx0Oy94czpjb21wbGV4VHlwZSZndDsKLSZsdDsveHM6c2NoZW1hJmd0OzwvcHJlPgotICA8ZGl2PiAKLSAgICA8cD5UaGlzIHNjaGVtYSBkZXNjcmliZXMgdGhlIHB1cmNoYXNlIG9yZGVyIFhNTCBpbnN0YW5jZSBieSBkZWZpbmluZyB0aGUgZm9sbG93aW5nOjwvcD4KLSAgPC9kaXY+Ci0gIDx1bD4KLSAgICA8bGk+IAotICAgICAgPGRpdj5EZWZpbml0aW9ucyBmb3IgdGhyZWUgY29tcGxleCB0eXBlcyAmIzgyMTI7IGN1c3RvbWVyLCBsaW5lLWl0ZW0sIGFuZCAKLSAgICAgICAgc2hpcHBlci4gVGhlc2UgYXJlIHRoZSB0eXBlcyB1c2VkIGZvciB0aGUgY2hpbGRyZW4gb2YgdGhlIHB1cmNoYXNlLW9yZGVyIAotICAgICAgICBlbGVtZW50LiBJbiBzY2hlbWEsIGEgY29tcGxleCB0eXBlIGlzIG9uZSB0aGF0IGRlZmluZXMgYW4gZWxlbWVudCB0aGF0IAotICAgICAgICBtYXkgaGF2ZSBjaGlsZCBlbGVtZW50cyBhbmQgYXR0cmlidXRlcy4gVGhlIHNlcXVlbmNlIGVsZW1lbnQgbmVzdGVkIGluIAotICAgICAgICB0aGUgY29tcGxleCB0eXBlIGxpc3RzIGl0cyBjaGlsZCBlbGVtZW50cy48L2Rpdj4KLSAgICAgIDxwPlRoZXNlIGFyZSBhbHNvIDxlbT5nbG9iYWw8L2VtPiB0eXBlcy4gVGhleSBhcmUgZ2xvYmFsIGJlY2F1c2UgdGhleSBhcmUgCi0gICAgICAgIGF0IHRoZSB0b3AgbGV2ZWwgb2YgdGhlIHNjaGVtYSAoaW4gb3RoZXIgd29yZHMsIGp1c3QgYmVuZWF0aCB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnNjaGVtYTwvc3Bhbj4gCi0gICAgICAgIHJvb3QgZWxlbWVudCkuIFRoaXMgbWVhbnMgdGhhdCB0aGV5IG1heSBiZSByZWZlcmVuY2VkIGZyb20gYW55d2hlcmUgZWxzZSAKLSAgICAgICAgaW4gdGhlIHNjaGVtYS48L3A+Ci0gICAgPC9saT4KLSAgPC91bD4KLTwvZGl2PgotPGRpdj4KLSAgPHVsPgotICAgIDxsaT5Vc2Ugb2Ygc2ltcGxlIHR5cGVzIHdpdGhpbiB0aGUgY29tcGxleCB0eXBlcy4gVGhlIG5hbWUsIGFkZHJlc3MsIGFuZCBkZXNjcmlwdGlvbiAKLSAgICAgIGVsZW1lbnRzIChhbW9uZyBvdGhlcnMpIGFyZSB0eXBlZCBhcyBzaW1wbGUgdHlwZXMuIEFzIGl0IGhhcHBlbnMsIHRoZXNlIAotICAgICAgYXJlIGFsc28gPGVtPmJ1aWx0LWluPC9lbT4gdHlwZXMuIEEgYnVpbHQtaW4gdHlwZSAoaGVyZSwgb25lIHdpdGggdGhlICZxdW90O3hzJnF1b3Q7IAotICAgICAgcHJlZml4KSBpcyBwYXJ0IG9mIHRoZSBzY2hlbWEgc3BlY2lmaWNhdGlvbi4gKFRoZSBzcGVjaWZpY2F0aW9uIGRlZmluZXMgCi0gICAgICA0NiBidWlsdC1pbiB0eXBlcy4pPC9saT4KLSAgICA8bGk+QSBnbG9iYWwgZWxlbWVudCBjYWxsZWQgcHVyY2hhc2Utb3JkZXIuIFRoaXMgZWxlbWVudCBkZWZpbml0aW9uIGluY2x1ZGVzIAotICAgICAgYSBuZXN0ZWQgY29tcGxleCB0eXBlIGRlZmluaXRpb24gdGhhdCBzcGVjaWZpZXMgdGhlIGNoaWxkIGVsZW1lbnRzIGZvciBhIAotICAgICAgcHVyY2hhc2Utb3JkZXIgZWxlbWVudC4gTm90aWNlIHRoYXQgdGhlIGNvbXBsZXggdHlwZSBpbmNsdWRlcyByZWZlcmVuY2VzIAotICAgICAgdG8gdGhlIG90aGVyIGNvbXBsZXggdHlwZXMgZGVmaW5lZCBpbiB0aGlzIHNjaGVtYS48L2xpPgotICA8L3VsPgotICA8ZGl2PjwvZGl2PgotICA8cD5JbiBvdGhlciB3b3JkcywgdGhlIHNjaGVtYSBkZWZpbmVzIHR5cGVzIGZvciB0aGUgY2hpbGQgZWxlbWVudHMgYW5kIGRlc2NyaWJlcyAKLSAgICB0aGVpciBwb3NpdGlvbiBhcyBzdWJvcmRpbmF0ZSB0byB0aGUgcm9vdCBlbGVtZW50LCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+cHVyY2hhc2Utb3JkZXI8L3NwYW4+LjwvcD4KLSAgPHA+V2hlbiB5b3UgdXNlIHRoZSBYTUxCZWFuIGNvbXBpbGVyIHdpdGggYW4gWFNEIGZpbGUgc3VjaCBhcyB0aGlzIG9uZSwgeW91IAotICAgIGdlbmVyYXRlIGEgSkFSIGZpbGUgY29udGFpbmluZyB0aGUgaW50ZXJmYWNlcyBnZW5lcmF0ZWQgZnJvbSB0aGUgc2NoZW1hLjwvcD4KLSAgPGgyPldyaXRpbmcgSmF2YSBDb2RlIFRoYXQgVXNlcyB0aGUgSW50ZXJmYWNlczwvaDI+Ci0gIDxwPldpdGggdGhlIFhNTEJlYW5zIGludGVyZmFjZXMgaW4geW91ciBhcHBsaWNhdGlvbiwgeW91IGNhbiB3cml0ZSBjb2RlIHRoYXQgCi0gICAgdXNlcyB0aGUgbmV3IHR5cGVzIHRvIGhhbmRsZSBYTUwgYmFzZWQgb24gdGhlIHNjaGVtYS4gSGVyZSdzIGFuIGV4YW1wbGUgdGhhdCAKLSAgICBleHRyYWN0cyBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIG9mIHRoZSBvcmRlcmVkIGl0ZW1zIGluIHRoZSBwdXJjaGFzZSBvcmRlciAKLSAgICBYTUwsIGNvdW50cyB0aGUgaXRlbXMsIGFuZCBjYWxjdWxhdGVzIGEgdG90YWwgb2YgdGhlaXIgcHJpY2VzLiBJbiBwYXJ0aWN1bGFyLCAKLSAgICBsb29rIGF0IHRoZSB1c2Ugb2YgdHlwZXMgZ2VuZXJhdGVkIGZyb20gdGhlIHNjaGVtYSBhbmQgaW1wb3J0ZWQgYXMgcGFydCBvZiAKLSAgICB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPm9yZy5vcGVudXJpLmVhc3lwbzwvc3Bhbj4gcGFja2FnZS4gPC9wPgotICA8cD5UaGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnByaW50SXRlbXM8L3NwYW4+IG1ldGhvZCByZWNlaXZlcyBhIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5GaWxlPC9zcGFuPiAKLSAgICBvYmplY3QgY29udGFpbmluZyB0aGUgcHVyY2hhc2Ugb3JkZXIgWE1MIGZpbGUuPC9wPgotICA8cHJlPgotcGFja2FnZSBkb2NzLnhtbGJlYW5zOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IG9yZy5hcGFjaGUueG1sYmVhbnMuKjsKLWltcG9ydCBvcmcub3BlbnVyaS5lYXN5cG8uUHVyY2hhc2VPcmRlckRvY3VtZW50OwotaW1wb3J0IG9yZy5vcGVudXJpLmVhc3lwby5QdXJjaGFzZU9yZGVyOwotaW1wb3J0IG9yZy5vcGVudXJpLmVhc3lwby5MaW5lSXRlbTsKLQotcHVibGljIGNsYXNzIFBPSGFuZGxlciAKLXsKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRJdGVtcyhGaWxlIHBvKSB0aHJvd3MgRXhjZXB0aW9uIAotICAgIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogQWxsIFhNTEJlYW5zIHNjaGVtYSB0eXBlcyBwcm92aWRlIGEgbmVzdGVkIEZhY3RvcnkgY2xhc3MgeW91IGNhbgotICAgICAgICAgKiB1c2UgdG8gYmluZCBYTUwgdG8gdGhlIHR5cGUsIG9yIHRvIGNyZWF0ZSBuZXcgaW5zdGFuY2VzIG9mIHRoZSB0eXBlLgotICAgICAgICAgKiBOb3RlIHRoYXQgYSAiRG9jdW1lbnQiIHR5cGUgc3VjaCBhcyB0aGlzIG9uZSBpcyBhbiBYTUxCZWFucyAKLSAgICAgICAgICogY29uc3RydWN0IGZvciByZXByZXNlbnRpbmcgYSBnbG9iYWwgZWxlbWVudC4gSXQgcHJvdmlkZXMgYSB3YXkKLSAgICAgICAgICogZm9yIHlvdSB0byBnZXQgYW5kIHNldCB0aGUgY29udGVudHMgb2YgdGhlIGVudGlyZSBlbGVtZW50LgotICAgICAgICAgKgotICAgICAgICAgKiBBbHNvLCBub3RlIHRoYXQgdGhlIHBhcnNlIG1ldGhvZCB3aWxsIG9ubHkgc3VjY2VlZCBpZiB0aGUgCi0gICAgICAgICAqIFhNTCB5b3UncmUgcGFyc2luZyBhcHBlYXJzIHRvIGNvbmZvcm0gdG8gdGhlIHNjaGVtYS4KLSAgICAgICAgICovCi0gICAgICAgIFB1cmNoYXNlT3JkZXJEb2N1bWVudCBwb0RvYyA9Ci0gICAgICAgICAgICBQdXJjaGFzZU9yZGVyRG9jdW1lbnQuRmFjdG9yeS5wYXJzZShwbyk7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogVGhlIFB1cmNoYXNlT3JkZXIgdHlwZSByZXByZXNlbnRzIHRoZSBwdXJjaGFzZS1vcmRlciBlbGVtZW50J3MKLSAgICAgICAgICogY29tcGxleCB0eXBlLgotICAgICAgICAgKi8KLSAgICAgICAgUHVyY2hhc2VPcmRlciBwbyA9IHBvRG9jLmdldFB1cmNoYXNlT3JkZXIoKTsKLQotICAgICAgICAvKgotICAgICAgICAgKiBXaGVuIGFuIGVsZW1lbnQgbWF5IG9jY3VyIG1vcmUgdGhhbiBvbmNlIGFzIGEgY2hpbGQgZWxlbWVudCwKLSAgICAgICAgICogdGhlIHNjaGVtYSBjb21waWxlciB3aWxsIGdlbmVyYXRlIG1ldGhvZHMgdGhhdCByZWZlciB0byBhbiAKLSAgICAgICAgICogYXJyYXkgb2YgdGhhdCBlbGVtZW50LiBUaGUgbGluZS1pdGVtIGVsZW1lbnQgaXMgZGVmaW5lZCB3aXRoCi0gICAgICAgICAqIGEgbWF4T2NjdXJzIGF0dHJpYnV0ZSB2YWx1ZSBvZiAidW5ib3VuZGVkIiwgbWVhbmluZyB0aGF0IAotICAgICAgICAgKiBpdCBtYXkgb2NjdXIgYXMgbWFueSB0aW1lcyBpbiBhbiBpbnN0YW5jZSBkb2N1bWVudCBhcyBuZWVkZWQuCi0gICAgICAgICAqIFNvIHRoZXJlIGFyZSBtZXRob2RzIHN1Y2ggYXMgZ2V0TGluZUl0ZW1BcnJheSBhbmQgc2V0TGluZUl0ZW1BcnJheS4gCi0gICAgICAgICAqLwotICAgICAgICBMaW5lSXRlbVtdIGxpbmVpdGVtcyA9IHBvLmdldExpbmVJdGVtQXJyYXkoKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQdXJjaGFzZSBvcmRlciBoYXMgIiArIGxpbmVpdGVtcy5sZW5ndGggKyAiIGxpbmUgaXRlbXMuIik7Ci0KLSAgICAgICAgZG91YmxlIHRvdGFsQW1vdW50ID0gMC4wOwotICAgICAgICBpbnQgbnVtYmVyT2ZJdGVtcyA9IDA7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogTG9vcCB0aHJvdWdoIHRoZSBsaW5lLWl0ZW0gZWxlbWVudHMsIHVzaW5nIGdlbmVyYXRlZCBhY2Nlc3NvcnMgdG8gCi0gICAgICAgICAqIGdldCB2YWx1ZXMgZm9yIGNoaWxkIGVsZW1lbnRzIHN1Y2ggYSBkZXNjcmlwdGlvbiwgcXVhbnRpdHksIGFuZAotICAgICAgICAgKiBwcmljZS4KLSAgICAgICAgICovCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbGluZWl0ZW1zLmxlbmd0aDsgaisrKSAKLSAgICAgICAgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgTGluZSBpdGVtOiAiICsgaik7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oCi0gICAgICAgICAgICAgICAgIiAgIERlc2NyaXB0aW9uOiAiICsgbGluZWl0ZW1zW2pdLmdldERlc2NyaXB0aW9uKCkpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICBRdWFudGl0eTogIiArIGxpbmVpdGVtc1tqXS5nZXRRdWFudGl0eSgpKTsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAgUHJpY2U6ICIgKyBsaW5laXRlbXNbal0uZ2V0UHJpY2UoKSk7Ci0gICAgICAgICAgICBudW1iZXJPZkl0ZW1zICs9IGxpbmVpdGVtc1tqXS5nZXRRdWFudGl0eSgpOwotICAgICAgICAgICAgdG90YWxBbW91bnQgKz0gbGluZWl0ZW1zW2pdLmdldFByaWNlKCkgKiBsaW5laXRlbXNbal0uZ2V0UXVhbnRpdHkoKTsKLSAgICAgICAgfQotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIGl0ZW1zOiAiICsgbnVtYmVyT2ZJdGVtcyk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVG90YWwgYW1vdW50OiAiICsgdG90YWxBbW91bnQpOwotICAgIH0KLX0KLTwvcHJlPgotICA8cD5Ob3RpY2UgdGhhdCB0eXBlcyBnZW5lcmF0ZWQgZnJvbSB0aGUgc2NoZW1hIHJlZmxlY3Qgd2hhdCdzIGluIHRoZSBYTUw6PC9wPgotPC9kaXY+Ci08dWw+Ci0gIDxsaT4gCi0gICAgPGRpdj5BIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5QdXJjaGFzZU9yZGVyRG9jdW1lbnQ8L3NwYW4+IHJlcHJlc2VudHMgdGhlIAotICAgICAgZ2xvYmFsIHJvb3QgZWxlbWVudC48L2Rpdj4KLSAgPC9saT4KLSAgPGxpPiAKLSAgICA8ZGl2PkEgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmdldFB1cmNoYXNlT3JkZXI8L3NwYW4+IG1ldGhvZCByZXR1cm5zIGEgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlB1cmNoYXNlT3JkZXJEb2N1bWVudC5QdXJjaGFzZU9yZGVyPC9zcGFuPiAKLSAgICAgIHR5cGUgdGhhdCBjb250YWlucyBjaGlsZCBlbGVtZW50cywgaW5jbHVkaW5nIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5saW5lLWl0ZW08L3NwYW4+LiAKLSAgICAgIEEgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmdldExpbmVJdGVtQXJyYXk8L3NwYW4+IG1ldGhvZCByZXR1cm5zIGEgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPkxpbmVJdGVtPC9zcGFuPiAKLSAgICAgIGFycmF5IGNvbnRhaW5pbmcgdGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5saW5lLWl0ZW08L3NwYW4+IGVsZW1lbnRzLjwvZGl2PgotICA8L2xpPgotICA8bGk+T3RoZXIgbWV0aG9kcywgc3VjaCBhcyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+Z2V0UXVhbnRpdHk8L3NwYW4+LCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+Z2V0UHJpY2U8L3NwYW4+LCAKLSAgICBhbmQgc28gb24sIGZvbGxvdyBuYXR1cmFsbHkgZnJvbSB3aGF0IHRoZSBzY2hlbWEgZGVzY3JpYmVzLCByZXR1cm5pbmcgY29ycmVzcG9uZGluZyAKLSAgICBjaGlsZHJlbiBvZiB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmxpbmUtaXRlbTwvc3Bhbj4gZWxlbWVudC48L2xpPgotICA8bGk+VGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgY29udGFpbmluZyB0aGVzZSB0eXBlcyBpcyBkZXJpdmVkIGZyb20gdGhlIHNjaGVtYSdzIAotICAgIHRhcmdldCBuYW1lc3BhY2UuPC9saT4KLTwvdWw+Ci08ZGl2PiAKLSAgPHA+Q2FwaXRhbGl6YXRpb24gYW5kIHB1bmN0dWF0aW9uIGZvciBnZW5lcmF0ZWQgdHlwZSBuYW1lcyBmb2xsb3cgSmF2YSBjb252ZW50aW9uLiAKLSAgICBBbHNvLCB3aGlsZSB0aGlzIGV4YW1wbGUgcGFyc2VzIHRoZSBYTUwgZnJvbSBhIGZpbGUsIG90aGVyIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5wYXJzZTwvc3Bhbj4gCi0gICAgbWV0aG9kcyBzdXBwb3J0IGEgSmF2YSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+SW5wdXRTdHJlYW08L3NwYW4+IG9iamVjdCwgCi0gICAgYSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+UmVhZGVyPC9zcGFuPiBvYmplY3QsIGFuZCBzbyBvbi48L3A+Ci0gIDxwPlRoZSBwcmVjZWRpbmcgSmF2YSBjb2RlIHByaW50cyB0aGUgZm9sbG93aW5nIHRvIHRoZSBjb25zb2xlOjwvcD4KLTwvZGl2PgotPGRpdj4gCi0gIDxwcmU+Ci1QdXJjaGFzZSBvcmRlciBoYXMgMyBsaW5lIGl0ZW1zLgotIExpbmUgaXRlbSAwCi0gICBEZXNjcmlwdGlvbjogQnVybmhhbSdzIENlbGVzdGlhbCBIYW5kYm9vaywgVm9sIDEKLSAgIFF1YW50aXR5OiAyCi0gICBQcmljZTogMjEuNzkKLSBMaW5lIGl0ZW0gMQotICAgRGVzY3JpcHRpb246IEJ1cm5oYW0ncyBDZWxlc3RpYWwgSGFuZGJvb2ssIFZvbCAyCi0gICBRdWFudGl0eTogMgotICAgUHJpY2U6IDE5Ljg5Ci1Ub3RhbCBpdGVtczogNAotVG90YWwgYW1vdW50OiA0MS42ODwvcHJlPgotICA8aDI+Q3JlYXRpbmcgTmV3IFhNTCBJbnN0YW5jZXMgZnJvbSBTY2hlbWE8L2gyPgotICA8cD5BcyB5b3UndmUgc2VlbiBYTUxCZWFucyBwcm92aWRlcyBhICZxdW90O2ZhY3RvcnkmcXVvdDsgY2xhc3MgeW91IGNhbiB1c2UgCi0gICAgdG8gY3JlYXRlIG5ldyBpbnN0YW5jZXMuIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjcmVhdGVzIGEgbmV3IDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5wdXJjaGFzZS1vcmRlcjwvc3Bhbj4gCi0gICAgZWxlbWVudCBhbmQgYWRkcyBhIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5jdXN0b21lcjwvc3Bhbj4gY2hpbGQgZWxlbWVudC4gCi0gICAgSXQgdGhlbiBpbnNlcnRzIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5uYW1lPC9zcGFuPiBhbmQgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmFkZHJlc3M8L3NwYW4+IAotICAgIGNoaWxkIGVsZW1lbnRzLCBjcmVhdGluZyB0aGUgZWxlbWVudHMgYW5kIHNldHRpbmcgdGhlaXIgdmFsdWVzIHdpdGggYSBzaW5nbGUgCi0gICAgY2FsbCB0byB0aGVpciA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+c2V0PC9zcGFuPiBtZXRob2RzLjwvcD4KLSAgPHByZT4KLXB1YmxpYyBQdXJjaGFzZU9yZGVyRG9jdW1lbnQgY3JlYXRlUE8oKQotewotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UHVyY2hhc2VPcmRlckRvY3VtZW50IG5ld1BPRG9jID0gUHVyY2hhc2VPcmRlckRvY3VtZW50LkZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1B1cmNoYXNlT3JkZXIgbmV3UE8gPSBuZXdQT0RvYy5hZGROZXdQdXJjaGFzZU9yZGVyKCk7Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDdXN0b21lciBuZXdDdXN0b21lciA9IG5ld1BPLmFkZE5ld0N1c3RvbWVyKCk7Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtuZXdDdXN0b21lci5zZXROYW1lKCZxdW90O0RvcmlzIEtyYXZpdHomcXVvdDspOwotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7bmV3Q3VzdG9tZXIuc2V0QWRkcmVzcygmcXVvdDtCZWxsZmxvd2VyLCBDQSZxdW90Oyk7Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtyZXR1cm4gbmV3UE9Eb2M7Ci19Ci08L3ByZT4KLSAgPHA+VGhlIGZvbGxvd2luZyBpcyB0aGUgWE1MIHRoYXQgcmVzdWx0cy4gTm90ZSB0aGF0IFhNTEJlYW5zIGFzc2lnbnMgdGhlIGNvcnJlY3QgCi0gICAgbmFtZXNwYWNlIGJhc2VkIG9uIHRoZSBzY2hlbWEsIHVzaW5nIGFuICZxdW90O25zMSZxdW90OyAob3IsICZxdW90O25hbWVzcGFjZSAKLSAgICAxJnF1b3Q7KSBwcmVmaXguIEZvciBwcmFjdGljYWwgcHVycG9zZXMsIHRoZSBwcmVmaXggaXRzZWxmIGRvZXNuJ3QgcmVhbGx5IAotICAgIG1hdHRlciAmIzgyMTI7IGl0J3MgdGhlIG5hbWVzcGFjZSBVUkkgKGh0dHA6Ly9vcGVudXJpLm9yZy9lYXN5cG8pIHRoYXQgZGVmaW5lcyAKLSAgICB0aGUgbmFtZXNwYWNlLiBUaGUgcHJlZml4IGlzIG1lcmVseSBhIG1hcmtlciB0aGF0IHJlcHJlc2VudHMgaXQuPC9wPgotICA8cHJlPiZsdDtuczE6cHVyY2hhc2Utb3JkZXIgeG1sbnM6bnMxPSZxdW90O2h0dHA6Ly9vcGVudXJpLm9yZy9lYXN5cG8mcXVvdDsmZ3Q7Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7bnMxOmN1c3RvbWVyJmd0OwotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jmx0O25zMTpuYW1lJmd0O0RvcmlzIEtyYXZpdHombHQ7L25zMTpuYW1lJmd0OwotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jmx0O25zMTphZGRyZXNzJmd0O0JlbGxmbG93ZXIsIENBJmx0Oy9uczE6YWRkcmVzcyZndDsKLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZsdDsvbnMxOmN1c3RvbWVyJmd0OwotJmx0Oy9uczE6cHVyY2hhc2Utb3JkZXImZ3Q7Ci08L3ByZT4KLSAgPHA+Tm90ZSB0aGF0IGFsbCB0eXBlcyAoaW5jbHVkaW5nIHRob3NlIGdlbmVyYXRlZCBmcm9tIHNjaGVtYSkgaW5oZXJpdCBmcm9tIAotICAgIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5YbWxPYmplY3Q8L3NwYW4+LCBhbmQgc28gcHJvdmlkZSBhIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5GYWN0b3J5PC9zcGFuPiAKLSAgICBjbGFzcy4gRm9yIGFuIG92ZXJ2aWV3IG9mIHRoZSB0eXBlIHN5c3RlbSBpbiB3aGljaCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sT2JqZWN0PC9zcGFuPiAKLSAgICBmaXRzLCBzZWUgPGEgaHJlZj0iY29uWE1MQmVhbnNTdXBwb3J0QnVpbHRJblNjaGVtYVR5cGVzLmh0bWwiPlhNTEJlYW5zIFN1cHBvcnQgCi0gICAgZm9yIEJ1aWx0LUluIFNjaGVtYSBUeXBlczwvYT4uIEZvciByZWZlcmVuY2UgaW5mb3JtYXRpb24sIHNlZSA8YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0IAotICAgIEludGVyZmFjZTwvYT4uPC9wPgotICA8aDE+WE1MQmVhbnMgSGllcmFyY2h5PC9oMT4KLSAgPHA+VGhlIGdlbmVyYXRlZCB0eXBlcyB5b3Ugc2F3IHVzZWQgaW4gdGhlIHByZWNlZGluZyBleGFtcGxlIGFyZSBhY3R1YWxseSBwYXJ0IAotICAgIG9mIGEgaGllcmFyY2h5IG9mIFhNTEJlYW5zIHR5cGVzLiBUaGlzIGhpZXJhcmNoeSBpcyBvbmUgb2YgdGhlIHdheXMgaW4gd2hpY2ggCi0gICAgWE1MQmVhbnMgcHJlc2VudHMgYW4gaW50dWl0aXZlIHZpZXcgb2Ygc2NoZW1hLiBBdCB0aGUgdG9wIG9mIHRoZSBoaWVyYXJjaHkgCi0gICAgaXMgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlhtbE9iamVjdDwvc3Bhbj4sIHRoZSBiYXNlIGludGVyZmFjZSBmb3IgWE1MQmVhbnMgCi0gICAgdHlwZXMuIEJlbmVhdGggdGhpcyBsZXZlbCwgdGhlcmUgYXJlIHR3byBtYWluIHR5cGUgY2F0ZWdvcmllczogZ2VuZXJhdGVkIHR5cGVzIAotICAgIHRoYXQgcmVwcmVzZW50IHVzZXItZGVyaXZlZCBzY2hlbWEgdHlwZXMsIGFuZCBpbmNsdWRlZCB0eXBlcyB0aGF0IHJlcHJlc2VudCAKLSAgICBidWlsdC1pbiBzY2hlbWEgdHlwZXMuPC9wPgotICBUaGlzIHRvcGljIGhhcyBhbHJlYWR5IGludHJvZHVjZWQgZ2VuZXJhdGVkIHR5cGVzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIAotICA8YSBocmVmPSJjb25KYXZhVHlwZXNHZW5lcmF0ZWRGcm9tVXNlckRlcml2ZWQuaHRtbCI+SmF2YSBUeXBlcyBHZW5lcmF0ZWQgZnJvbSAKLSAgVXNlci1EZXJpdmVkIFNjaGVtYSBUeXBlcy48L2E+IAotICA8aDI+QnVpbHQtSW4gVHlwZSBTdXBwb3J0PC9oMj4KLSAgPHA+SW4gYWRkaXRpb24gdG8gdHlwZXMgZ2VuZXJhdGVkIGZyb20gYSBnaXZlbiBzY2hlbWEsIFhNTEJlYW5zIHByb3ZpZGVzIDQ2IAotICAgIEphdmEgdHlwZXMgdGhhdCBtaXJyb3IgdGhlIDQ2IGJ1aWx0LWluIHR5cGVzIGRlZmluZWQgYnkgdGhlIFhNTCBzY2hlbWEgc3BlY2lmaWNhdGlvbi4gCi0gICAgV2hlcmUgc2NoZW1hIGRlZmluZXMgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnhzOnN0cmluZzwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj54czpkZWNpbWFsPC9zcGFuPiwgCi0gICAgYW5kIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj54czppbnQ8L3NwYW4+LCBmb3IgZXhhbXBsZSwgWE1MQmVhbnMgcHJvdmlkZXMgCi0gICAgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj5YbWxTdHJpbmc8L2E+PC9zcGFuPiwgCi0gICAgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvYT48L3NwYW4+LCAKLSAgICBhbmQgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj5YbWxJbnQ8L2E+PC9zcGFuPi4gCi0gICAgRWFjaCBvZiB0aGVzZSBhbHNvIGluaGVyaXRzIGZyb20gPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlhtbE9iamVjdDwvc3Bhbj4sIAotICAgIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBidWlsdC1pbiBzY2hlbWEgdHlwZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+eHM6YW55VHlwZTwvc3Bhbj4uPC9wPgotICA8cD5YTUxCZWFucyBwcm92aWRlcyBhIHdheSBmb3IgeW91IHRvIGhhbmRsZSBYTUwgZGF0YSBhcyB0aGVzZSBidWlsdC1pbiB0eXBlcy4gCi0gICAgV2hlcmUgeW91ciBzY2hlbWEgaW5jbHVkZXMgYW4gZWxlbWVudCB3aG9zZSB0eXBlIGlzLCBmb3IgZXhhbXBsZSwgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnhzOmludDwvc3Bhbj4sIAotICAgIFhNTEJlYW5zIHdpbGwgcHJvdmlkZSBhIGdlbmVyYXRlZCBtZXRob2QgZGVzaWduZWQgdG8gcmV0dXJuIGFuIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5YbWxJbnQ8L3NwYW4+LiAKLSAgICBJbiBhZGRpdGlvbiwgYXMgeW91IHNhdyBpbiB0aGUgcHJlY2VkaW5nIGV4YW1wbGUsIGZvciBtb3N0IHR5cGVzIHRoZXJlIHdpbGwgCi0gICAgYWxzbyBiZSBhIG1ldGhvZCB0aGF0IHJldHVybnMgYSBuYXR1cmFsIEphdmEgdHlwZSBzdWNoIGFzIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5pbnQ8L3NwYW4+LiAKLSAgICBUaGUgZm9sbG93aW5nIHR3byBsaW5lcyBvZiBjb2RlIHJldHVybiB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnF1YW50aXR5PC9zcGFuPiAKLSAgICBlbGVtZW50J3MgdmFsdWUsIGJ1dCByZXR1cm4gaXQgYXMgZGlmZmVyZW50IHR5cGVzLjwvcD4KLSAgPHByZT4KLS8vIE1ldGhvZHMgdGhhdCByZXR1cm4gc2ltcGxlIHR5cGVzIGJlZ2luIHdpdGggYW4gIngiLgotWG1sSW50IHhtbFF1YW50aXR5ID0gbGluZWl0ZW1zW2pdLnhnZXRRdWFudGl0eSgpOwotLy8gTWV0aG9kcyB0aGF0IHJldHVybiBhIG5hdHVyYWwgSmF2YSB0eXBlIGFyZSB1bmFkb3JuZWQuCi1pbnQgamF2YVF1YW50aXR5ID0gbGluZWl0ZW1zW2pdLmdldFF1YW50aXR5KCk7Ci08L3ByZT4KLSAgPHA+SW4gYSBzZW5zZSBib3RoIGdldCBtZXRob2RzIG5hdmlnYXRlIHRvIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+cXVhbnRpdHk8L3NwYW4+IAotICAgIGVsZW1lbnQ7IHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+Z2V0UXVhbnRpdHk8L3NwYW4+IG1ldGhvZCBnb2VzIGEgc3RlcCAKLSAgICBmdXJ0aGVyIGFuZCBjb252ZXJ0cyB0aGUgZWxlbWVudHMgdmFsdWUgdG8gdGhlIG1vc3QgYXBwcm9wcmlhdGUgbmF0dXJhbCBKYXZhIAotICAgIHR5cGUgYmVmb3JlIHJldHVybmluZyBpdC4gKFhNTEJlYW5zIGFsc28gcHJvdmlkZXMgYSBtZWFucyBmb3IgdmFsaWRhdGluZyB0aGUgCi0gICAgWE1MIGFzIHlvdSB3b3JrIHdpdGggaXQuKTwvcD4KLSAgPHA+SWYgeW91IGtub3cgYSBiaXQgYWJvdXQgWE1MIHNjaGVtYSwgWE1MQmVhbnMgdHlwZXMgc2hvdWxkIHNlZW0gZmFpcmx5IGludHVpdGl2ZS4gCi0gICAgSWYgeW91IGRvbid0LCB5b3UnbGwgbGVhcm4gYSBsb3QgYnkgZXhwZXJpbWVudGluZyB3aXRoIFhNTEJlYW5zIHVzaW5nIHlvdXIgCi0gICAgb3duIHNjaGVtYXMgYW5kIFhNTCBpbnN0YW5jZXMgYmFzZWQgb24gdGhlbS4gPC9wPgotICA8cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgbWV0aG9kcyBvZiB0eXBlcyBnZW5lcmF0ZWQgZnJvbSBzY2hlbWEsIHNlZSA8YSBocmVmPSJjb25NZXRob2RzRm9yR2VuZXJhdGVkSmF2YVR5cGVzLmh0bWwiPk1ldGhvZHMgCi0gICAgZm9yIFR5cGVzIEdlbmVyYXRlZCBGcm9tIFNjaGVtYTwvYT4uIEZvciBtb3JlIGFib3V0IHRoZSBob3cgWE1MQmVhbnMgcmVwcmVzZW50cyAKLSAgICBidWlsdC1pbiBzY2hlbWEgdHlwZXMsIHNlZSA8YSBocmVmPSJjb25YTUxCZWFuc1N1cHBvcnRCdWlsdEluU2NoZW1hVHlwZXMuaHRtbCI+WE1MQmVhbnMgCi0gICAgU3VwcG9ydCBmb3IgQnVpbHQtSW4gU2NoZW1hIFR5cGVzPC9hPi48L3A+Ci0gIDxoMT5Vc2luZyBYUXVlcnkgRXhwcmVzc2lvbnM8L2gxPgotICA8cD5XaXRoIFhNTEJlYW5zIHlvdSBjYW4gdXNlIFhRdWVyeSB0byBxdWVyeSBYTUwgZm9yIHNwZWNpZmljIHBpZWNlcyBvZiBkYXRhLiAKLSAgICBYUXVlcnkgaXMgc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzICZxdW90O1NRTCBmb3IgWE1MJnF1b3Q7IGJlY2F1c2UgaXQgcHJvdmlkZXMgCi0gICAgYSBtZWNoYW5pc20gdG8gYWNjZXNzIGRhdGEgZGlyZWN0bHkgZnJvbSBYTUwgZG9jdW1lbnRzLCBtdWNoIGFzIFNRTCBwcm92aWRlcyAKLSAgICBhIG1lY2hhbmlzbSBmb3IgYWNjZXNzaW5nIGRhdGEgaW4gdHJhZGl0aW9uYWwgZGF0YWJhc2VzLjwvcD4KLSAgPHA+WFF1ZXJ5IGJvcnJvd3Mgc29tZSBvZiBpdHMgc3ludGF4IGZyb20gWFBhdGgsIGEgc3ludGF4IGZvciBzcGVjaWZ5aW5nIG5lc3RlZCAKLSAgICBkYXRhIGluIFhNTC4gVGhlIGZvbGxvd2luZyBleGFtcGxlIHJldHVybnMgYWxsIG9mIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+bGluZS1pdGVtPC9zcGFuPiAKLSAgICBlbGVtZW50cyB3aG9zZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+cHJpY2U8L3NwYW4+IGNoaWxkIGVsZW1lbnRzIGhhdmUgdmFsdWVzIAotICAgIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyMC4wMDo8L3A+Ci0gIDxwcmU+Ci1QdXJjaGFzZU9yZGVyRG9jdW1lbnQgZG9jID0gUHVyY2hhc2VPcmRlckRvY3VtZW50LkZhY3RvcnkucGFyc2UocG8pOwotCi0vKgotICogVGhlIFhRdWVyeSBleHByZXNzaW9uIGlzIHRoZSBmb2xsb3dpbmcgdHdvIHN0cmluZ3MgY29tYmluZWQuIFRoZXkncmUKLSAqIGRlY2xhcmVkIHNlcGFyYXRlbHkgaGVyZSBmb3IgY29udmVuaWVuY2UuIFRoZSBmaXJzdCBzdHJpbmcgZGVjbGFyZXMKLSAqIHRoZSBuYW1lc3BhY2UgcHJlZml4IHRoYXQncyB1c2VkIGluIHRoZSBxdWVyeSBleHByZXNzaW9uOyB0aGUgc2Vjb25kCi0gKiBkZWNsYXJlcyB0aGUgZXhwcmVzc2lvbiBpdHNlbGYuCi0gKi8KLVN0cmluZyBuc1RleHQgPSAiZGVjbGFyZSBuYW1lc3BhY2UgcG8gPSAnaHR0cDovL29wZW51cmkub3JnL2Vhc3lwbyciOwotU3RyaW5nIHBhdGhUZXh0ID0gIiR0aGlzL3BvOnB1cmNoYXNlLW9yZGVyL3BvOmxpbmUtaXRlbVtwbzpwcmljZSA8PSAyMC4wMF0iOwotU3RyaW5nIHF1ZXJ5VGV4dCA9IG5zVGV4dCArIHBhdGhUZXh0OwotCi1YbWxDdXJzb3IgaXRlbUN1cnNvciA9IGRvYy5uZXdDdXJzb3IoKS5leGVjUXVlcnkocXVlcnlUZXh0KTsKLVN5c3RlbS5vdXQucHJpbnRsbihpdGVtQ3Vyc29yLnhtbFRleHQoKSk7Ci08L3ByZT4KLSAgPHA+VGhpcyBjb2RlIGNyZWF0ZXMgYSBuZXcgY3Vyc29yIGF0IHRoZSBzdGFydCBvZiB0aGUgZG9jdW1lbnQuIEZyb20gdGhlcmUsIAotICAgIGl0IHVzZXMgdGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5YbWxDdXJzb3I8L3NwYW4+IGludGVyZmFjZSdzIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5leGVjUXVlcnk8L3NwYW4+IAotICAgIG1ldGhvZCB0byBleGVjdXRlIHRoZSBxdWVyeSBleHByZXNzaW9uLiBJbiB0aGlzIGV4YW1wbGUsIHRoZSBtZXRob2QncyBwYXJhbWV0ZXIgCi0gICAgaXMgYW4gWFF1ZXJ5IGV4cHJlc3Npb24gdGhhdCBzaW1wbHkgc2F5cywgJnF1b3Q7RnJvbSBteSBjdXJyZW50IGxvY2F0aW9uLCAKLSAgICBuYXZpZ2F0ZSB0aHJvdWdoIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+cHVyY2hhc2Utb3JkZXI8L3NwYW4+IGVsZW1lbnQgCi0gICAgYW5kIHJldHJpZXZlIHRob3NlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5saW5lLWl0ZW08L3NwYW4+IGVsZW1lbnRzIHdob3NlIAotICAgIHZhbHVlIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAyMC4wMC4mcXVvdDsgVGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj4kdGhpczwvc3Bhbj4gCi0gICAgdmFyaWFibGUgbWVhbnMgJnF1b3Q7dGhlIGN1cnJlbnQgcG9zaXRpb24uJnF1b3Q7PC9wPgotICA8cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBYUXVlcnksIHNlZSA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94cXVlcnkvIiB0YXJnZXQ9Il9ibGFuayI+WFF1ZXJ5IAotICAgIDEuMDogQW4gWE1MIFF1ZXJ5IExhbmd1YWdlPC9hPiBhdCB0aGUgVzNDIHdlYiBzaXRlLjwvcD4KLSAgPGgyPlVzaW5nIFhNTCBDdXJzb3JzPC9oMj4KLSAgPHA+SW4gdGhlIHByZWNlZGluZyBleGFtcGxlIHlvdSBtYXkgaGF2ZSBub3RpY2VkIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvYT48L3NwYW4+IAotICAgIGludGVyZmFjZS4gSW4gYWRkaXRpb24gdG8gcHJvdmlkaW5nIGEgd2F5IHRvIGV4ZWN1dGUgWFF1ZXJ5IGV4cHJlc3Npb24sIGFuIAotICAgIFhNTCBjdXJzb3JzIG9mZmVycyBhIGZpbmUtZ3JhaW5lZCBtb2RlbCBmb3IgbWFuaXB1bGF0aW5nIGRhdGEuIFRoZSBYTUwgY3Vyc29yIAotICAgIEFQSSwgYW5hbG9nb3VzIHRvIHRoZSBET00ncyBvYmplY3QgQVBJLCBpcyBzaW1wbHkgYSB3YXkgdG8gcG9pbnQgYXQgYSBwYXJ0aWN1bGFyIAotICAgIHBpZWNlIG9mIGRhdGEuIFNvLCBqdXN0IGxpa2UgYSBjdXJzb3IgaGVscHMgbmF2aWdhdGUgdGhyb3VnaCBhIHdvcmQgcHJvY2Vzc2luZyAKLSAgICBkb2N1bWVudCwgdGhlIFhNTCBjdXJzb3IgZGVmaW5lcyBhIGxvY2F0aW9uIGluIFhNTCB3aGVyZSB5b3UgY2FuIHBlcmZvcm0gYWN0aW9ucyAKLSAgICBvbiB0aGUgc2VsZWN0ZWQgWE1MLjwvcD4KLSAgPHA+Q3Vyc29ycyBhcmUgaWRlYWwgZm9yIG1vdmluZyB0aHJvdWdoIGFuIFhNTCBkb2N1bWVudCB3aGVuIHRoZXJlJ3Mgbm8gc2NoZW1hIAotICAgIGF2YWlsYWJsZS4gT25jZSB5b3UndmUgZ290IHRoZSBjdXJzb3IgYXQgdGhlIGxvY2F0aW9uIHlvdSdyZSBpbnRlcmVzdGVkIGluLCAKLSAgICB5b3UgY2FuIHBlcmZvcm0gYSB2YXJpZXR5IG9mIG9wZXJhdGlvbnMgd2l0aCBpdC4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gc2V0IAotICAgIGFuZCBnZXQgdmFsdWVzLCBpbnNlcnQgYW5kIHJlbW92ZSBmcmFnbWVudHMgb2YgWE1MLCBjb3B5IGZyYWdtZW50cyBvZiBYTUwgCi0gICAgdG8gb3RoZXIgcGFydHMgb2YgdGhlIGRvY3VtZW50LCBhbmQgbWFrZSBvdGhlciBmaW5lLWdyYWluZWQgY2hhbmdlcyB0byB0aGUgCi0gICAgWE1MIGRvY3VtZW50LjwvcD4KLSAgPHA+VGhlIGZvbGxvd2luZyBleGFtcGxlIHVzZXMgYW4gWE1MIGN1cnNvciB0byBuYXZpZ2F0ZSB0byB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmN1c3RvbWVyPC9zcGFuPiAKLSAgICBlbGVtZW50J3MgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPm5hbWU8L3NwYW4+IGNoaWxkIGVsZW1lbnQuPC9wPgotICA8cHJlPgotUHVyY2hhc2VPcmRlckRvY3VtZW50IGRvYyA9IAotICAgIFB1cmNoYXNlT3JkZXJEb2N1bWVudC5GYWN0b3J5LnBhcnNlKHBvKTsKLQotWG1sQ3Vyc29yIGN1cnNvciA9IGRvYy5uZXdDdXJzb3IoKTsKLWN1cnNvci50b0ZpcnN0Q29udGVudFRva2VuKCk7Ci1jdXJzb3IudG9GaXJzdENoaWxkRWxlbWVudCgpOwotY3Vyc29yLnRvRmlyc3RDaGlsZEVsZW1lbnQoKTsKLVN5c3RlbS5vdXQucHJpbnRsbihjdXJzb3IuZ2V0VGV4dCgpKTsKLQotY3Vyc29yLmRpc3Bvc2UoKTsKLTwvcHJlPgotICA8cD5XaGF0J3MgaGFwcGVuaW5nIGhlcmU/IEFzIHdpdGggdGhlIGVhcmxpZXIgZXhhbXBsZSwgdGhlIGNvZGUgbG9hZHMgdGhlIFhNTCAKLSAgICBmcm9tIGEgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPkZpbGU8L3NwYW4+IG9iamVjdC4gQWZ0ZXIgbG9hZGluZyB0aGUgZG9jdW1lbnQsIAotICAgIHRoZSBjb2RlIGNyZWF0ZXMgYSBjdXJzb3IgYXQgaXRzIGJlZ2lubmluZy4gTW92aW5nIHRoZSBjdXJzb3IgYSBmZXcgdGltZXMgCi0gICAgdGFrZXMgaXQgdG8gdGhlIG5lc3RlZCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+bmFtZSA8L3NwYW4+IGVsZW1lbnQuIE9uY2UgCi0gICAgdGhlcmUsIHRoZSBnZXRUZXh0IG1ldGhvZCByZXRyaWV2ZXMgdGhlIGVsZW1lbnQncyB2YWx1ZS48L3A+Ci0gIDxwPlRoaXMgaXMganVzdCBhbiBpbnRyb2R1Y3Rpb24gdG8gWE1MIGN1cnNvcnMuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHVzaW5nIAotICAgIGN1cnNvcnMsIHNlZSA8YSBocmVmPSJjb25OYXZpZ2F0aW5nWE1Md2l0aEN1cnNvcnMuaHRtbCI+TmF2aWdhdGluZyBYTUwgd2l0aCAKLSAgICBDdXJzb3JzPC9hPi48L3A+Ci0gIDxoMj5XaGVyZSB0byBHbyBOZXh0PC9oMj4KLTwvZGl2PgotPHVsPgotICA8bGk+IAotICAgIDxkaXY+WE1MQmVhbnMgcHJvdmlkZXMgaW50dWl0aXZlIHdheXMgdG8gaGFuZGxlIFhNTCwgcGFydGljdWxhcmx5IGlmIHlvdSdyZSAKLSAgICAgIHN0YXJ0aW5nIHdpdGggc2NoZW1hLiBJZiB5b3UncmUgYWNjZXNzaW5nIFhNTCB0aGF0J3MgYmFzZWQgb24gYSBzY2hlbWEsIAotICAgICAgeW91J2xsIHByb2JhYmx5IGZpbmQgaXQgbW9zdCBlZmZpY2llbnQgdG8gYWNjZXNzIHRoZSBYTUwgdGhyb3VnaCBnZW5lcmF0ZWQgCi0gICAgICB0eXBlcyBzcGVjaWZpYyB0byB0aGUgc2NoZW1hLiBUbyBkbyB0aGlzLCB5b3UgYmVnaW4gYnkgY29tcGlsaW5nIHRoZSBzY2hlbWEgCi0gICAgICB0byBnZW5lcmF0ZSBpbnRlcmZhY2VzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyBYTUxCZWFucyB0eXBlcyBnZW5lcmF0ZWQgCi0gICAgICBieSBjb21waWxpbmcgc2NoZW1hLCBzZWUgPGEgaHJlZj0iY29uSmF2YVR5cGVzR2VuZXJhdGVkRnJvbVVzZXJEZXJpdmVkLmh0bWwiPkphdmEgCi0gICAgICBUeXBlcyBHZW5lcmF0ZWQgRnJvbSBVc2VyLURlcml2ZWQgU2NoZW1hIFR5cGVzPC9hPiBhbmQgPGEgaHJlZj0iY29uTWV0aG9kc0ZvckdlbmVyYXRlZEphdmFUeXBlcy5odG1sIj5NZXRob2RzIAotICAgICAgZm9yIFR5cGVzIEdlbmVyYXRlZCBGcm9tIFNjaGVtYTwvYT4uPC9kaXY+Ci0gIDwvbGk+Ci0gIDxsaT4gCi0gICAgPGRpdj5Zb3UgbWlnaHQgYmUgaW50ZXJlc3RlZCBpbiByZWFkaW5nIG1vcmUgYWJvdXQgdGhlIHR5cGUgc3lzdGVtIG9uIHdoaWNoIAotICAgICAgWE1MQmVhbnMgaXMgYmFzZWQsIHBhcnRpY3VsYXJseSBpZiB5b3UncmUgdXNpbmcgdHlwZXMgZ2VuZXJhdGVkIGZyb20gc2NoZW1hLiAKLSAgICAgIFhNTEJlYW5zIHByb3ZpZGVzIGEgaGllcmFyY2hpY2FsIHN5c3RlbSBvZiB0eXBlcyB0aGF0IG1pcnJvciB3aGF0IHlvdSBmaW5kIAotICAgICAgaW4gdGhlIFhNTCBzY2hlbWEgc3BlY2lmaWNhdGlvbiBpdHNlbGYuIElmIHlvdSdyZSB3b3JraW5nIHdpdGggc2NoZW1hLCB5b3UgCi0gICAgICBtaWdodCBmaW5kIGl0IGhlbHBzIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHR5cGVzIHdvcmsuIEZvciBtb3JlIGluZm9ybWF0aW9uLCAKLSAgICAgIHNlZSA8YSBocmVmPSJjb25YTUxCZWFuc1N1cHBvcnRCdWlsdEluU2NoZW1hVHlwZXMuaHRtbCI+WE1MQmVhbnMgU3VwcG9ydCAKLSAgICAgIGZvciBCdWlsdC1JbiBTY2hlbWEgVHlwZXM8L2E+IGFuZCA8YSBocmVmPSJjb25JbnRyb1RvVGhlU2NoZW1hVHlwZVN5c3RlbS5odG1sIj5JbnRyb2R1Y3Rpb24gCi0gICAgICB0byBTY2hlbWEgVHlwZSBTaWduYXR1cmVzPC9hPi48L2Rpdj4KLSAgPC9saT4KLSAgPGxpPiAKLSAgICA8ZGl2PlhNTEJlYW5zIHByb3ZpZGVzIGFjY2VzcyB0byBYTUwgdGhyb3VnaCBYUXVlcnksIHdoaWNoIGJvcnJvd3MgcGF0aCBzeW50YXggCi0gICAgICBmcm9tIFhQYXRoLiBXaXRoIFhRdWVyeSwgeW91IGNhbiBzcGVjaWZ5IHNwZWNpZmljIGZyYWdtZW50cyBvZiBYTUwgZGF0YSAKLSAgICAgIHdpdGggb3Igd2l0aG91dCBzY2hlbWEuIFRvIGxlYXJuIG1vcmUgYWJvdXQgdXNpbmcgWFF1ZXJ5IGFuZCBYUGF0aCBpbiBYTUxCZWFucywgCi0gICAgICBzZWUgPGEgaHJlZj0iY29uU2VsZWN0aW5nWE1Md2l0aFhRdWVyeVBhdGhYUGF0aC5odG1sIj5TZWxlY3RpbmcgWE1MIHdpdGggCi0gICAgICBYUXVlcnkgYW5kIFhQYXRoPC9hPi48L2Rpdj4KLSAgPC9saT4KLSAgPGxpPllvdSBjYW4gdXNlIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sQ3Vyc29yPC9zcGFuPiBpbnRlcmZhY2UgZm9yIAotICAgIGZpbmUtZ3JhaW5lZCBuYXZpZ2F0aW9uIGFuZCBtYW5pcHVsYXRpb24gb2YgWE1MLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIAotICAgIDxhIGhyZWY9ImNvbk5hdmlnYXRpbmdYTUx3aXRoQ3Vyc29ycy5odG1sIj5OYXZpZ2F0aW5nIFhNTCB3aXRoIEN1cnNvcnM8L2E+LjwvbGk+Ci08L3VsPgotPGRpdj4KLSAgPHAgY2xhc3M9Im5vdGVwYXJhIj48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFRoZSB4YmVhbi5qYXIgZmlsZSB0aGF0IGNvbnRhaW5zIAotICAgIHRoZSBYTUxCZWFucyBsaWJyYXJ5IGlzIGZ1bGx5IGZ1bmN0aW9uYWwgYXMgYSBzdGFuZGFsb25lIGxpYnJhcnkuPC9wPgotICA8aDE+UmVsYXRlZCBUb3BpY3M8L2gxPgotICA8cD48YSBocmVmPSIuLi8uLi9zYW1wbGVzL25hdlhNTEJlYW5zU2FtcGxlcy5odG1sIj5YTUxCZWFucyBTYW1wbGVzPC9hPjwvcD4KLTwvZGl2PgotPCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPiAKLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgotCi08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL2d1aWRlL2NvbkludHJvVG9UaGVTY2hlbWFUeXBlU3lzdGVtLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9ndWlkZS9jb25JbnRyb1RvVGhlU2NoZW1hVHlwZVN5c3RlbS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGU4NWM3Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL2d1aWRlL2NvbkludHJvVG9UaGVTY2hlbWFUeXBlU3lzdGVtLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMTYgKzAsMCBAQAotPCFkb2N0eXBlIEhUTUwgcHVibGljICItLy9XM0MvL0RURCBIVE1MIDQuMCBGcmFtZXNldC8vRU4iPgotCi08aHRtbD4KLTxoZWFkPgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iZG9jdGl0bGUiIC0tPgotPHRpdGxlPkludHJvZHVjdGlvbiB0byBTY2hlbWEgVHlwZSBTaWduYXR1cmVzPC90aXRsZT4KLTwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4gCi08IS0tKE1ldGEpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPgotCi08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9JENIQVJTRVQ7Ij4KLQotCi08IS0tIEluc3RhbmNlQmVnaW5FZGl0YWJsZSBuYW1lPSJtZXRhdGFncyIgLS0+Ci0KLTxtZXRhIGNvbnRlbnQ9InlvdXIgbmFtZSIgbmFtZT0iYXV0aG9yIj4KLTxtZXRhIGNvbnRlbnQ9IkEgZGVzY3JpcHRpb24gb2YgdGhlIHRvcGljIGNvbnRlbnRzLiIgbmFtZT0iZGVzY3JpcHRpb24iPgotPG1ldGEgY29udGVudD0ia2V5d29yZHMgdG8gaGVscCBpbiBzZWFyY2hlcyIgbmFtZT0ia2V5d29yZHMiPgotPG1ldGEgY29udGVudD0iMTAvMjUvMDIiIG5hbWU9ImRhdGUgbGFzdCBtb2RpZmllZCI+Ci08IS0tIEluc3RhbmNlRW5kRWRpdGFibGUgLS0+Ci0KLTwhLS0oTGlua3MpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+Ci08IS0tIEluc3RhbmNlQmVnaW5FZGl0YWJsZSBuYW1lPSJoZWFkIiAtLT4gCi08bGluayBocmVmPSIuLi94bWxiZWFucy5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgotPCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPgotPGxpbmsgaHJlZj0iLi4veG1sYmVhbnMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4KLTxhIGhyZWY9Ii4uLy4uLy4uL2NvcmUvaW5kZXguaHRtbCIgaWQ9ImluZGV4Ij48L2E+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiBzcmM9Ii4uLy4uLy4uL2NvcmUvdG9waWNJbmZvLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHNyYz0iLi4vLi4vLi4vY29yZS9Db29raWVDbGFzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiBzcmM9Ii4uLy4uLy4uL2NvcmUvZGlzcGxheUNvbnRlbnQuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotCi08IS0tKEJvZHkpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPgotPGJvZHk+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KLQotPC9zY3JpcHQ+Ci08IS0tIEluc3RhbmNlQmVnaW5FZGl0YWJsZSBuYW1lPSJib2R5IiAtLT4gCi08aDE+IEludHJvZHVjdGlvbiB0byBTY2hlbWEgVHlwZSBTaWduYXR1cmVzPC9oMT4KLTxkaXYgaWQ9InRvcGljdGV4dCI+IAotICA8cD5XaGVuIHlvdSBjb21waWxlIHNjaGVtYSwgdGhlIEFQSSBnZW5lcmF0ZWQgZnJvbSB5b3VyIHNjaGVtYSBpcyBpbnRlZ3JhdGVkIAotICAgIHdpdGggdGhlIFhNTEJlYW5zIHR5cGUgc3lzdGVtIHRoYXQgcmVwcmVzZW50cyB0aGUgdW5kZXJseWluZyBYTUwgc2NoZW1hLiBBbGwgCi0gICAgdG9nZXRoZXIsIHRoZXNlIHR5cGVzIG1ha2UgdXAgdGhlIDxlbT5zY2hlbWEgdHlwZSBzeXN0ZW08L2VtPiB0byB3aGljaCB5b3VyIAotICAgIGNvZGUgaGFzIGFjY2Vzcy4gV2hlbiBoYW5kbGluZyBYTUwgYmFzZWQgb24gdGhlIHNjaGVtYSwgeW91IHR5cGljYWxseSBjYWxsIAotICAgIG1ldGhvZHMgb2YgdGhlIEFQSSBnZW5lcmF0ZWQgd2hlbiB5b3UgY29tcGlsZWQgdGhlIHNjaGVtYS4gSG93ZXZlciwgZm9yIHRoZSAKLSAgICBjYXNlcyB3aGVuIHlvdSB3YW50IHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2NoZW1hIGl0c2VsZiwgeW91IHVzZSB0aGUgCi0gICAgc2NoZW1hIHR5cGUgc3lzdGVtIEFQSS48L3A+Ci0gIDxwPkluIHRoZSBYTUxCZWFucyBBUEksIHlvdSBoYXZlIGFjY2VzcyB0byB0aGUgc3lzdGVtIGl0c2VsZiB0aHJvdWdoIDxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVTeXN0ZW0uaHRtbCI+PHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlNjaGVtYVR5cGVTeXN0ZW08L3NwYW4+PC9hPiAKLSAgICBhbmQgcmVsYXRlZCBjbGFzc2VzLiBUaGVzZSBtYWtlIHVwIGEga2luZCBvZiAmcXVvdDttZXRhLUFQSSwmcXVvdDsgb3IgYSB2aWV3IAotICAgIG9uIHRoZSBzY2hlbWEuIFlvdSBjYW4gdXNlIHRoZSBzY2hlbWEgdHlwZSBzeXN0ZW0gQVBJIHRvIGRpc2NvdmVyIHRoZSB0eXBlIAotICAgIHN5c3RlbSBhdCBydW4gdGltZS4gU2VlIHRoZSByZWZlcmVuY2UgdG9waWMgb24gdGhhdCBpbnRlcmZhY2UgZm9yIGFuIG92ZXJ2aWV3IAotICAgIG9mIHRoZSBzY2hlbWEgdHlwZSBzeXN0ZW0uPC9wPgotICA8aDI+U2NoZW1hIFR5cGUgJnF1b3Q7U2lnbmF0dXJlcyZxdW90OzwvaDI+Ci0gIDxwPkEgc2NoZW1hIGlzIG1hZGUgdXAgb2Ygc2NoZW1hIGNvbXBvbmVudHMuIFNjaGVtYSBjb21wb25lbnRzIGFyZSB0aGUgcGllY2VzIAotICAgIG9mIGEgc2NoZW1hLCBzdWNoIGFzIGEgdHlwZSBkZWZpbml0aW9uLCBhbiBlbGVtZW50IGRlY2xhcmF0aW9uLCBhdHRyaWJ1dGUgCi0gICAgZGVjbGFyYXRpb24sIGFuZCBzbyBvbi4gVG8gbWlycm9yIHRoZXNlIGluIHRoZSBzY2hlbWEgdHlwZSBzeXN0ZW0sIGEgPGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPjxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5TY2hlbWFDb21wb25lbnQ8L3NwYW4+PC9hPiAKLSAgICBpbnN0YW5jZSByZXByZXNlbnRzIGEgY29tcG9uZW50IGluIHRoZSB1bmRlcmx5aW5nIHNjaGVtYTsgc2VwYXJhdGUgY29tcG9uZW50cyAKLSAgICBoYXZlIGNvcnJlc3BvbmRpbmcgdHlwZXMuIEZvciBleGFtcGxlIHlvdSB3b3VsZCBoYXZlIGEgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvYT48L3NwYW4+IAotICAgIG9iamVjdCBmb3IgYSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+Q3VzdG9tZXJUeXBlPC9zcGFuPiB5b3VyIHNjaGVtYSBkZWZpbmVkLCAKLSAgICBvciBhIDxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEVsZW1lbnQuaHRtbCI+PHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlNjaGVtYUdsb2JhbEVsZW1lbnQ8L3NwYW4+PC9hPiAKLSAgICBvYmplY3QgZm9yIGEgZ2xvYmFsIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5QdXJjaGFzZU9yZGVyPC9zcGFuPiBlbGVtZW50LiAKLSAgICBZb3Ugd291bGQgYWxzbyBoYXZlIGEgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlNjaGVtYVR5cGU8L3NwYW4+IGZvciBidWlsdC1pbiAKLSAgICBzY2hlbWEgdHlwZXMsIHN1Y2ggYXMgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnhzOnN0cmluZzwvc3Bhbj4gb3IgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnhzOmRhdGV0aW1lPC9zcGFuPi4gCi0gICAgWE1MQmVhbiBwcm92aWRlcyBhICZxdW90O3NpZ25hdHVyZSZxdW90OyB0byBkZXNjcmliZSBlYWNoIHR5cGUuIFlvdSBjYW4gcmV0cmlldmUgCi0gICAgdGhpcyBzaWduYXR1cmUgYnkgY2FsbGluZyB0aGUgU2NoZW1hVHlwZSBjbGFzcydzIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj50b1N0cmluZzwvc3Bhbj4gCi0gICAgbWV0aG9kLjwvcD4KLSAgPHA+VGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj50b1N0cmluZzwvc3Bhbj4gbWV0aG9kIHJldHVybnMgWE1MQmVhbnMnIHZlcnNpb24gCi0gICAgb2YgYSB1bmlxdWUgc2lnbmF0dXJlIGZvciBhIHNjaGVtYSB0eXBlLiBUaGlzIHN0cmluZyBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZyAKLSAgICBiZWNhdXNlIGl0IGRlc2NyaWJlcyBhIGdpdmVuIHR5cGUgZXZlbiB3aGVuIHRoZSB0eXBlIGRvZXNuJ3QgaGF2ZSBhIG5hbWUuIAotICA8L3A+Ci0gIDxwIGNsYXNzPSJub3RlcGFyYSI+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBJdCdzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IHRoaXMgCi0gICAgc2lnbmF0dXJlIGlzIGFuIFhNTEJlYW5zIGNvbnZlbnRpb24sIHJhdGhlciB0aGFuIGEgc3RhbmRhcmQgZnJvbSB0aGUgc2NoZW1hIAotICAgIHdvcmtpbmcgZ3JvdXAuIFRoZSB3b3JraW5nIGdyb3VwIGhhcyBub3QgeWV0IHN0YW5kYXJkaXplZCBhIHNpZ25hdHVyZSBmb3IgCi0gICAgWE1MIHNjaGVtYSB0eXBlcy4gQXMgYSByZXN1bHQgdGhlIHNpZ25hdHVyZSB5b3UnbGwgc2VlIGZyb20gWE1MQmVhbnMgaXMgc3ViamVjdCAKLSAgICB0byBjaGFuZ2UgJiM4MjEyOyB3aGF0ZXZlciB0aGUgc2NoZW1hIHdvcmtpbmcgZ3JvdXAgY29tZXMgdXAgd2l0aCBpbiB0aGUgZW5kIAotICAgIChpZiBhbnl0aGluZykgaXMgcHJvYmFibHkgd2hhdCB3aWxsIGJlIHVzZWQgYnkgdGhpcyBBUEkuIEluIG90aGVyIHdvcmRzLCBkb24ndCAKLSAgICB3cml0ZSBhIHByb2dyYW0gdG8gZGVjb2RlIHRoZSBzaWduYXR1cmUuPC9wPgotICA8cD5Zb3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGRlc2NyaXB0aW9uIHRvIHVuZGVyc3RhbmQgaG93IGEgc2lnbmF0dXJlIGlzIGNvbnN0cnVjdGVkLjwvcD4KLTwvZGl2PgotPHVsPgotICA8bGk+IAotICAgIDxkaXY+PHN0cm9uZz5HbG9iYWwgdHlwZXMuPC9zdHJvbmc+IElmIHRoZSB0eXBlIGhhcyBhIG5hbWUsIGl0J3MgYSBnbG9iYWwgCi0gICAgICB0eXBlLiBUaGUgZm9sbG93aW5nIGZvcm0gaXMgdXNlZDo8L2Rpdj4KLSAgICA8ZGl2PiAKLSAgICAgIDxkaXY+IAotICAgICAgICA8cHJlPlQ9Jmx0O2xvY2FsbmFtZSZndDtAJmx0O3RhcmdldE5hbWVzcGFjZSZndDs8L3ByZT4KLSAgICAgIDwvZGl2PgotICAgIDwvZGl2PgotICAgIDxwPlRoZSAmcXVvdDtUJnF1b3Q7IGlzIGZvciAmcXVvdDt0eXBlLCZxdW90OyBvZiBjb3Vyc2UuICZxdW90O2xvY2FsbmFtZSZxdW90OyAKLSAgICAgIGlzIGEgY29udmVudGlvbiB1c2VkIGJ5IHFuYW1lcyAocXVhbGlmaWVkIG5hbWVzKSwgd2hpY2ggaW5jbHVkZSBhIGxvY2FsIAotICAgICAgbmFtZSBhbmQgdGhlIG5hbWVzcGFjZSBVUkkgKGlmIGFueSkuIFNvIGFuIGV4YW1wbGUgbWlnaHQgYmU6PC9wPgotICAgIDxwcmU+VD1jdXN0b21lckBvcGVudXJpLm9yZzwvcHJlPgotICA8L2xpPgotICA8bGk+PHN0cm9uZz5Eb2N1bWVudCB0eXBlcyBhbmQgZ2xvYmFsIGF0dHJpYnV0ZSB0eXBlcy48L3N0cm9uZz4gVGhlc2UgY29ycmVzcG9uZCAKLSAgICB0byBhIHNwZWNpYWwgYW5vbnltb3VzIHR5cGUgY29udGFpbmluZyBvbmUgZ2xvYmFsIGVsZW1lbnQgb3IgYXR0cmlidXRlLiBUaGVzZSAKLSAgICBzcGVjaWFsIHR5cGVzIGFyZSBnZW5lcmF0ZWQgYnkgWE1MQmVhbnMgdG8gcmVwcmVzZW50IGdsb2JhbCB0eXBlcyBkZWNsYXJlZCAKLSAgICB3aXRoIHRoZSAmbHQ7ZWxlbWVudCZndDsgb3IgJmx0O2F0dHJpYnV0ZSZndDsgdGFnIGluIHNjaGVtYS4gQmVjYXVzZSBzdWNoIAotICAgIHR5cGVzIGFyZSB0eXBlcywgYnV0IGFyZSBkZWNsYXJlZCBhcyBlbGVtZW50cyBvciBhdHRyaWJ1dGVzLCB0aGV5IHJlcXVpcmUgCi0gICAgc3BlY2lhbCB0cmVhdG1lbnQuIFRoZSBmb2xsb3dpbmcgc2lnbmF0dXJlIGZvcm0gaXMgdXNlZDogCi0gICAgPGRpdj4gCi0gICAgICA8cHJlPgotRD0mbHQ7ZG9jdW1lbnQtZWxlbWVudC1uYW1lJmd0O0AmbHQ7dGFyZ2V0TmFtZXNwYWNlJmd0OwotUj0mbHQ7YXR0cmlidXRlLXR5cGUtbmFtZSZndDtAJmx0O3RhcmdldE5hbWVzcGFjZSZndDsKLTwvcHJlPgotICAgICAgPGRpdj48L2Rpdj4KLSAgICA8L2Rpdj4KLSAgICA8ZGl2PiAKLSAgICAgIDxkaXY+Tm90ZSB0aGF0IHRoZXNlIGFyZSBhbHNvIHRoZSBzaWduYXR1cmVzIG9mIGEgdHlwZSByZXR1cm5lZCBieSBhIEZvb0RvY3VtZW50LnR5cGUgCi0gICAgICAgIG9yIEZvb0F0dHJpYnV0ZS50eXBlIG1ldGhvZCBjYWxsLjwvZGl2PgotICAgIDwvZGl2PgotICA8L2xpPgotICA8bGk+PHN0cm9uZz5Bbm9ueW1vdXMgdHlwZXMuPC9zdHJvbmc+IElmIHRoZSB0eXBlIGlzIGFub255bW91cywgaXQgaXMgZGVmaW5lZCAKLSAgICBhcyBhbiBlbGVtZW50IG9yIGF0dHJpYnV0ZSwgb3Igd2l0aGluIGEgZnVydGhlciBhbm9ueW1vdXMgdHlwZS4gSW4gdGhpcyBjYXNlLCAKLSAgICB0aGUgc2lnbmF0dXJlIGlzIGJ1aWx0IGJ5IGVzdGFibGlzaGluZyB0aGUgbG9jYWwgY29udGV4dCAoaW4gb3JkZXIgd29yZHMsIAotICAgIHdoYXQgaXMgdGhlIGFub255bW91cyB0eXBlIG5lc3RlZCBpbj8pLiBGcm9tIHRoZSBsb2NhbCBjb250ZXh0LCB0aGUgbGFyZ2VyIAotICAgIGNvbnRleHQgaXMgYnVpbHQgcmVjdXJzaXZlbHkuIEluIG90aGVyIHdvcmRzLCB0aGUgc2lnbmF0dXJlIGlzIGJ1aWx0IGJ5IGdpdmluZyAKLSAgICBub3Qgb25seSB0aGUgYW5vbnltb3VzIHR5cGUgaXRzZWxmLCBidXQgYWxzbyBieSBkZXNjcmliaW5nIGl0cyBjb250ZXh0LiAKLSAgICA8cD4gVGhlIGZvbGxvd2luZyBydWxlcyBhcmUgdXNlZCBmb3IgYnVpbGRpbmcgYSBzaWduYXR1cmUgZm9yIGFuIGFub255bW91cyAKLSAgICAgIHR5cGUuIDwvcD4KLSAgICA8dWw+Ci0gICAgICA8bGk+IEl0IG1pZ2h0IGJlIGFuIGFub255bW91cyB0eXBlIGRlZmluZWQgaW5zaWRlIGEgbG9jYWwgZWxlbWVudCBvciBhdHRyaWJ1dGUsIAotICAgICAgICB3aGljaCBpbiB0dXJuIGlzIGRlZmluZWQgd2l0aGluIHNvbWV0aGluZyBlbHNlOiAKLSAgICAgICAgPHA+SWYgdGhlIGVsZW1lbnQgaXMgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiIHN0eWxlPSJsYW5naW5saW5lIj5mb3JtPSZxdW90O3F1YWxpZmllZCZxdW90Ozwvc3Bhbj4gCi0gICAgICAgICAgKHRoZSB1c3VhbCBkZWZhdWx0KTo8L3A+Ci0gICAgICA8L2xpPgotICAgIDwvdWw+Ci0gIDwvbGk+Ci0gIDxibG9ja3F1b3RlPiAKLSAgICA8ZGl2PiAKLSAgICAgIDxwcmU+RT0mbHQ7ZWx0bmFtZSZndDt8Jmx0O3NpZ25hdHVyZSBvZiB0aGUgdHlwZSB3aXRoaW4gd2hpY2ggdGhlIGVsdCBpcyBkZWZpbmVkJmd0OzwvcHJlPgotICAgIDwvZGl2PgotICAgIDxkaXY+SWYgdGhlIGVsZW1lbnQgaXMgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiIHN0eWxlPSJsYW5naW5saW5lIj5mb3JtPSZxdW90O3VucXVhbGlmaWVkJnF1b3Q7PC9zcGFuPjo8L2Rpdj4KLSAgICA8ZGl2PiAKLSAgICAgIDxwcmU+VT0mbHQ7ZWx0bmFtZSZndDt8Jmx0O3NpZ25hdHVyZSBvZiB0aGUgdHlwZSB3aXRoaW4gd2hpY2ggdGhlIGVsdCBpcyBkZWZpbmVkJmd0OzwvcHJlPgotICAgIDwvZGl2PgotICAgIDxkaXY+SWYgdGhlIGF0dHJpYnV0ZSBpcyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSIgc3R5bGU9ImxhbmdsaW5lIj5mb3JtPSZxdW90O3VucXVhbGlmaWVkJnF1b3Q7PC9zcGFuPiAKLSAgICAgICh0aGUgdXN1YWwgZGVmYXVsdCk6PC9kaXY+Ci0gICAgPGRpdj4gCi0gICAgICA8cHJlPkE9Jmx0O2F0dHJuYW1lJmd0O3wmbHQ7c2lnbmF0dXJlIG9mIHRoZSB0eXBlIHdpdGhpbiB0aGUgYXR0ciBpcyBkZWZpbmVkJmd0OzwvcHJlPgotICAgIDwvZGl2PgotICAgIDxkaXY+aWYgdGhlIGF0dHJpYnV0ZSBpcyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSIgc3R5bGU9ImxhbmdpbmxpbmUiPmZvcm09JnF1b3Q7cXVhbGlmaWVkJnF1b3Q7PC9zcGFuPjo8L2Rpdj4KLSAgICA8ZGl2PiAKLSAgICAgIDxwcmU+UT0mbHQ7YXR0cm5hbWUmZ3Q7fCZsdDtzaWduYXR1cmUgb2YgdGhlIHR5cGUgd2l0aGluIHRoZSBhdHRyIGlzIGRlZmluZWQmZ3Q7PC9wcmU+Ci0gICAgPC9kaXY+Ci0gIDwvYmxvY2txdW90ZT4KLSAgPHVsPgotICAgIDxsaT5JdCBtaWdodCBiZSBhbiBhbm9ueW1vdXMgdHlwZSBkZWZpbmVkIGEgc2ltcGxlIHJlc3RyaWN0aW9uLCB1bmlvbiwgb3IgCi0gICAgICBsaXN0IGRlZmluaXRpb246PC9saT4KLSAgPC91bD4KLSAgPGJsb2NrcXVvdGU+IAotICAgIDxkaXY+IAotICAgICAgPHByZT5NPSN8Jmx0O3NpZ25hdHVyZSBvZiB0aGUgY29udGFpbmluZyB1bmlvbiB0eXBlJmd0OzwvcHJlPgotICAgICAgPHA+KFRoZSAjIGlzIGEgbnVtYmVyIGluZGljYXRpbmcgd2hpY2ggdW5pb24gbWVtYmVyIGl0IGlzLCBieSBzb3VyY2Ugb3JkZXIgCi0gICAgICAgICYjODIxMjsgc3VjaCBhcyAwLDEsMiwgZXRjLik8L3A+Ci0gICAgICA8cHJlPkI9fCZsdDtzaWduYXR1cmUgb2YgdGhlIGNvbnRhaW5pbmcgYmFzZSB0eXBlIGZvciBhIHJlc3RyaWN0aW9uJmd0OzwvcHJlPgotICAgICAgPHByZT5JPXwmbHQ7c2lnbmF0dXJlIG9mIHRoZSBjb250YWluaW5nIGxpc3QgdHlwZSZndDs8L3ByZT4KLSAgICA8L2Rpdj4KLSAgPC9ibG9ja3F1b3RlPgotICA8dWw+Ci0gICAgPGxpPiAKLSAgICAgIDxkaXY+IEluIHRoZSBmdXR1cmUgaWYgYW5vbnltb3VzIHR5cGVzIGFyZSBhbGxvd2VkIGluIHNvbWUgb3RoZXIgY29udGV4dCwgCi0gICAgICAgIHRoZXJlIG1heSBiZSBtb3JlIGNvZGVzLjwvZGl2PgotICAgIDwvbGk+Ci0gIDwvdWw+Ci08L3VsPgotPGgyPkFuIEV4YW1wbGU8L2gyPgotPHA+U28sIGZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBhIHR5cGUgdGhhdCBkZXNjcmliZXMgdGhlIGxpc3QgaXRlbXMgd2l0aGluIGFuIAotICBhdHRyaWJ1dGUgb2YgYW4gaW5zdGFuY2UgdGhhdCBsb29rcyBsaWtlIHRoaXM6PC9wPgotPGJsb2NrcXVvdGU+IAotICA8ZGl2PiAKLSAgICA8cHJlPiAmbHQ7cm9vdCBteWxpc3Q9JnF1b3Q7NDMyIDk5OSAxNDMgMTIzJnF1b3Q7LyZndDs8L3ByZT4KLSAgPC9kaXY+Ci08L2Jsb2NrcXVvdGU+Ci08ZGl2PiBUaGUgc2NoZW1hLCBpZiBkb25lIHdpdGggbG90cyBvZiBuZXN0ZWQgdHlwZXMsIGNvdWxkIGxvb2sgc29tZXRoaW5nIGxpa2UgCi0gIHRoaXM6PC9kaXY+Ci08YmxvY2txdW90ZT4KLSAgPGRpdj4KLSAgICA8cHJlPgotJmx0O3NjaGVtYSB0YXJnZXROYW1lc3BhY2U9JnF1b3Q7bXlOYW1lc3BhY2UmcXVvdDsgZWxlbWVudEZvcm1EZWZhdWx0PSZxdW90O3F1YWxpZmllZCZxdW90OyZndDsKLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZsdDtlbGVtZW50IG5hbWU9JnF1b3Q7cm9vdCZxdW90OyZndDsKLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZsdDtjb21wbGV4VHlwZSZndDsKLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZsdDthdHRyaWJ1dGUgbmFtZT0mcXVvdDtteWxpc3QmcXVvdDsmZ3Q7Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7c2ltcGxlVHlwZSZndDsKLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZsdDtsaXN0Jmd0OwotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jmx0O3NpbXBsZVR5cGUmZ3Q7ICZsdDshLS1UaGlzIGlzIHRoZSB0eXBlIHRoYXQgdGhlIHNpZ25hdHVyZSBpcyBmb3IgLS0mZ3Q7Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7cmVzdHJpY3Rpb24gYmFzZT0mcXVvdDt4czpub25OZWdhdGl2ZUludGVnZXImcXVvdDsmZ3Q7Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7dG90YWxEaWdpdHMgdmFsdWU9JnF1b3Q7MyZxdW90Oy8mZ3Q7Li4KLTwvcHJlPgotICA8L2Rpdj4KLTwvYmxvY2txdW90ZT4KLTxkaXY+IFRoZSBzaWduYXR1cmUgZm9yIHRoZSBzaW1wbGVUeXBlIGluZGljYXRlZCBpbiB0aGUgZXhhbXBsZSB3b3VsZCBiZTo8L2Rpdj4KLTxibG9ja3F1b3RlPgotICA8cHJlPkk9fEE9bXlsaXN0fEU9cm9vdHxEPXJvb3RAbXlOYW1lc3BhY2U8L3ByZT4KLTwvYmxvY2txdW90ZT4KLTxkaXY+IAotICA8cD5Zb3UgY291bGQgcmVhZCB0aGlzIGFzOiA8L3A+Ci08L2Rpdj4KLTxibG9ja3F1b3RlPgotICA8ZGl2PiZxdW90O1RoZSB0eXBlIG9mIHRoZSBsaXN0IGl0ZW0gfCB3aXRoaW4gdGhlIHR5cGUgb2YgdGhlIG15bGlzdCBhdHRyaWJ1dGUncyAKLSAgICB0eXBlIHwgd2l0aGluIHRoZSB0eXBlIG9mIHRoZSByb290IGVsZW1lbnQgfCB3aXRoaW4gdGhlIGRvY3VtZW50IHR5cGUgZm9yIAotICAgICZsdDtyb290Jmd0OyBkb2N1bWVudHMgfCBpbiB0aGUgbXlOYW1lc3BhY2UgbmFtZXNwYWNlJnF1b3Q7LjwvZGl2PgotPC9ibG9ja3F1b3RlPgotPGRpdj4gCi0gIDxwPk5vdGUgdGhhdCB0aGUgc2lnbmF0dXJlIHN0cnVjdHVyZSBtaXJyb3JzIHRoZSBKYXZhIGNsYXNzIHN0cnVjdHVyZSBnZW5lcmF0ZWQgCi0gICAgYnkgWE1MQmVhbnMgd2hlbiBjb21waWxpbmcgdGhlIHNjaGVtYS4gSW4gb3RoZXIgd29yZHMsIGlmIHlvdSB3ZXJlIHRvIGNvbXBpbGUgCi0gICAgYSBzY2hlbWEgdGhhdCBpbmNsdWRlZCB0aGUgcHJlY2VkaW5nIHNuaXBwZXQsIHlvdSB3b3VsZCBiZSBhYmxlIHRvIGFjY2VzcyAKLSAgICBhbiBpbnN0YW5jZSBvZiB0aGUgc2NoZW1hIHdpdGggSmF2YSBjb2RlIGxpa2UgdGhlIGZvbGxvd2luZzo8L3A+Ci0gIDxwcmU+U2NoZW1hVHlwZSBzVHlwZSA9IFJvb3REb2N1bWVudC5Sb290Lk15TGlzdC5JdGVtLnR5cGU7PC9wcmU+Ci08L2Rpdj4KLTxwIGNsYXNzPSJyZWxhdGVkdG9waWNzIj5SZWxhdGVkIFRvcGljczwvcD4KLTxwPjxhIGhyZWY9ImNvbkdldHRpbmdTdGFydGVkd2l0aFhNTEJlYW5zLmh0bWwiPkdldHRpbmcgU3RhcnRlZCB3aXRoIFhNTEJlYW5zPC9hPjwvcD4KLTwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4gCi08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KLQotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9ndWlkZS9jb25KYXZhVHlwZXNHZW5lcmF0ZWRGcm9tVXNlckRlcml2ZWQuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL2d1aWRlL2NvbkphdmFUeXBlc0dlbmVyYXRlZEZyb21Vc2VyRGVyaXZlZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjExMjQ2Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL2d1aWRlL2NvbkphdmFUeXBlc0dlbmVyYXRlZEZyb21Vc2VyRGVyaXZlZC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDU4ICswLDAgQEAKLTwhZG9jdHlwZSBIVE1MIHB1YmxpYyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgRnJhbWVzZXQvL0VOIj4KLQotPGh0bWw+Ci08aGVhZD4KLTwhLS0gSW5zdGFuY2VCZWdpbkVkaXRhYmxlIG5hbWU9ImRvY3RpdGxlIiAtLT4gCi08dGl0bGU+SmF2YSBUeXBlcyBHZW5lcmF0ZWQgZnJvbSBTY2hlbWE8L3RpdGxlPgotPCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPiAKLQotPCEtLShNZXRhKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD0kQ0hBUlNFVDsiPgotCi0KLTwhLS0gSW5zdGFuY2VCZWdpbkVkaXRhYmxlIG5hbWU9Im1ldGF0YWdzIiAtLT4gCi0KLTxtZXRhIG5hbWU9ImNvbXBvbmVudCIgY29udGVudD0iIj4KLTwhLS0gSW4gdGhlIGRlc2NyaXB0aW9uIG1ldGF0YWcsIHBsZWFzZSBwcm92aWRlIGEgQlJJRUYgZGVzY3JpcHRpb24gb2YgdGhlIHRvcGljIGNvbnRlbnRzLiAtLT4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSIiPgotPCEtLSBJbiB0aGUgY29tcG9uZW50IG1ldGF0YWcsIHBsZWFzZSBsaXN0IGtleXdvcmRzIHRoYXQgd2lsbCBoZWxwIGEgdXNlciBzZWFyY2ggZm9yIHRoaXMgdG9waWMuIC0tPgotPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9IiI+Ci08IS0tIEluc3RhbmNlRW5kRWRpdGFibGUgLS0+Ci0KLTwhLS0oTGlua3MpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+Ci08IS0tIEluc3RhbmNlQmVnaW5FZGl0YWJsZSBuYW1lPSJoZWFkIiAtLT4KLQotPGxpbmsgaHJlZj0iLi4veG1sYmVhbnMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4KLSAKLTwhLS0oTWV0YSk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+Ci0KLQotCi08bWV0YSBuYW1lPSJhdXRob3IiIGNvbnRlbnQ9InlvdXIgbmFtZSI+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQSBkZXNjcmlwdGlvbiBvZiB0aGUgdG9waWMgY29udGVudHMuIj4KLTxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJrZXl3b3JkcyB0byBoZWxwIGluIHNlYXJjaGVzIj4KLTxtZXRhIG5hbWU9ImRhdGUgbGFzdCBtb2RpZmllZCIgY29udGVudD0iMTAvMjUvMDIiPgotPCEtLShMaW5rcyk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLTwhLS0oQm9keSk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+PCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPgotPGxpbmsgaHJlZj0iLi4veG1sYmVhbnMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4KLTxhIGhyZWY9Ii4uLy4uLy4uL2NvcmUvaW5kZXguaHRtbCIgaWQ9ImluZGV4Ij48L2E+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiBzcmM9Ii4uLy4uLy4uL2NvcmUvdG9waWNJbmZvLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHNyYz0iLi4vLi4vLi4vY29yZS9Db29raWVDbGFzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiBzcmM9Ii4uLy4uLy4uL2NvcmUvZGlzcGxheUNvbnRlbnQuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotCi08IS0tKEJvZHkpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPgotPGJvZHk+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KLQotPC9zY3JpcHQ+Ci08IS0tIEluc3RhbmNlQmVnaW5FZGl0YWJsZSBuYW1lPSJib2R5IiAtLT4KLTxoMT4gSmF2YSBUeXBlcyBHZW5lcmF0ZWQgZnJvbSBVc2VyLURlcml2ZWQgU2NoZW1hIFR5cGVzPC9oMT4KLTxkaXYgaWQ9InRvcGljdGV4dCI+IAotICA8cD5XaGVuIHlvdSBjb21waWxlIFhNTCBzY2hlbWEsIHRoZSByZXN1bHRpbmcgQVBJIGlzIG1hZGUgdXAgb2YgdHdvIGNhdGVnb3JpZXMgCi0gICAgb2YgdHlwZXM6IGJ1aWx0LWluIHR5cGVzIHRoYXQgbWlycm9yIHRob3NlIGluIHRoZSBzY2hlbWEgc3BlY2lmaWNhdGlvbiBhbmQgCi0gICAgb3RoZXJzIHRoYXQgYXJlIGdlbmVyYXRlZCBmcm9tIHVzZXItZGVyaXZlZCBzY2hlbWEgdHlwZXMuIFRoaXMgdG9waWMgcHJvdmlkZXMgCi0gICAgYW4gb3ZlcnZpZXcgb2YgdGhlIEphdmEgdHlwZXMgZ2VuZXJhdGVkIGZvciB1c2VyLWRlcml2ZWQgdHlwZXMsIGRlc2NyaWJpbmcgCi0gICAgdGhlIG1ldGhvZHMgdGhlIEphdmEgdHlwZXMgcHJvdmlkZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYnVpbHQtaW4gdHlwZXMsIAotICAgIHNlZSA8YSBocmVmPSJjb25YTUxCZWFuc1N1cHBvcnRCdWlsdEluU2NoZW1hVHlwZXMuaHRtbCI+WE1MQmVhbnMgU3VwcG9ydCBmb3IgCi0gICAgQnVpbHQtSW4gU2NoZW1hIFR5cGVzPC9hPi4gRm9yIHNwZWNpZmljIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtZXRob2RzIGV4cG9zZWQgCi0gICAgYnkgZ2VuZXJhdGVkIHR5cGVzLCBzZWUgPGEgaHJlZj0iY29uTWV0aG9kc0ZvckdlbmVyYXRlZEphdmFUeXBlcy5odG1sIj5NZXRob2RzIAotICAgIGZvciBHZW5lcmF0ZWQgSmF2YSBUeXBlczwvYT4uPC9wPgotICA8cD5JbiBnZW5lcmFsLCBhbiBBUEkgZ2VuZXJhdGVkIGZyb20gc2NoZW1hIGlzIGFuIGludHVpdGl2ZSBtZWFucyB0byBhY2Nlc3MgCi0gICAgWE1MIGluc3RhbmNlcyBiYXNlZCBvbiB0aGUgc2NoZW1hLiBZb3UnbGwgcHJvYmFibHkgZmluZCB0aGF0IGZvciBtb3N0IHVzZXMgCi0gICAgaXQncyB1bm5lY2Vzc2FyeSB0byBrbm93IHRoZSBydWxlcyBmb3IgZ2VuZXJhdGluZyBpdCBpbiBvcmRlciB0byB1c2UgaXQuIEhvd2V2ZXIsIAotICAgIGZvciB0aG9zZSBjYXNlcyB3aGVuIGl0J3MgdW5jbGVhciB3aGF0J3MgZ29pbmcgb24gYmVoaW5kIHRoZSBzY2VuZXMgKG9yIGlmIAotICAgIHlvdSdyZSBqdXN0IGN1cmlvdXMpLCB0aGlzIHRvcGljIGRlc2NyaWJlcyB0aGUgcnVsZXMuPC9wPgotICA8cCBjbGFzcz0ibm90ZXBhcmEiPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhlIFhNTEJlYW5zIEFQSSBhbHNvIHByb3ZpZGVzIGEgCi0gICAgd2F5IGZvciB5b3UgdG8gZ2V0IGluZm9ybWF0aW9uIDxlbT5hYm91dCA8L2VtPnRoZSB0eXBlIHN5c3RlbSBpdHNlbGYgJiM4MjEyOyAKLSAgICBpbiBvdGhlciB3b3JkcywgYWJvdXQgdGhlIEFQSSBhbmQgdGhlIHVuZGVybHlpbmcgc2NoZW1hLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgCi0gICAgc2VlIDxhIGhyZWY9ImNvbkludHJvVG9UaGVTY2hlbWFUeXBlU3lzdGVtLmh0bWwiPkludHJvZHVjdGlvbiB0byBTY2hlbWEgVHlwZSAKLSAgICBTaWduYXR1cmVzPC9hPi48L3A+Ci0gIDxwPkVhY2ggb2YgdGhlIHR5cGVzIGdlbmVyYXRlZCB3aGVuIHlvdSBjb21waWxlIGEgc2NoZW1hIGlzIGRlc2lnbmVkIHNwZWNpZmljYWxseSAKLSAgICBmb3IgYWNjZXNzIHRvIFhNTCBpbnN0YW5jZXMgY29uZm9ybWluZyB0byB0aGF0IHBhcnQgb2YgdGhlIHNjaGVtYS4gU3RhcnQgYnkgCi0gICAgdGFraW5nIGEgbG9vayBhdCBhIHNpbXBsZSBYTUwgYW5kIHNjaGVtYSBleGFtcGxlLiBUaGUgZm9sbG93aW5nIHNjaGVtYSBkZXNjcmliZXMgCi0gICAgYW4gWE1MIGRvY3VtZW50IHRvIGNvbnRhaW4gYSBzdG9jayBwcmljZSBxdW90ZS48L3A+Ci0gIDxwcmU+Jmx0O3hzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiJmd0OwotICAgICZsdDt4czplbGVtZW50IG5hbWU9InByaWNlLXF1b3RlIiZndDsKLSAgICAgICAgJmx0O3hzOmNvbXBsZXhUeXBlJmd0OwotICAgICAgICAgICAgJmx0O3hzOnNlcXVlbmNlJmd0OwotICAgICAgICAgICAgICAgICZsdDt4czplbGVtZW50IG5hbWU9InN0b2NrLXN5bWJvbCIgdHlwZT0ieHM6c3RyaW5nIi8mZ3Q7Ci0gICAgICAgICAgICAgICAgJmx0O3hzOmVsZW1lbnQgbmFtZT0ic3RvY2stcHJpY2UiIHR5cGU9InhzOmZsb2F0Ii8mZ3Q7Ci0gICAgICAgICAgICAmbHQ7L3hzOnNlcXVlbmNlJmd0OwotICAgICAgICAmbHQ7L3hzOmNvbXBsZXhUeXBlJmd0OwotICAgICZsdDsveHM6ZWxlbWVudCZndDsKLSZsdDsveHM6c2NoZW1hJmd0OwotPC9wcmU+Ci0gIDxwPlRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBYTUwgdGhhdCBjb25mb3JtcyB0byB0aGlzIHNjaGVtYS48L3A+Ci0gIDxwcmU+Jmx0O3ByaWNlLXF1b3RlJmd0OwotICAgICZsdDtzdG9jay1zeW1ib2wmZ3Q7QkVBUyZsdDsvc3RvY2stc3ltYm9sJmd0OwotICAgICZsdDtzdG9jay1wcmljZSZndDs1OS4yMSZsdDsvc3RvY2stcHJpY2UmZ3Q7Ci0mbHQ7L3ByaWNlLXF1b3RlJmd0OzwvcHJlPgotICA8cD5XaGVuIHlvdSBjb21waWxlIHRoaXMgc2NoZW1hLCB5b3UgZ2V0IHR3byBnZW5lcmF0ZWQgWE1MQmVhbnMgaW50ZXJmYWNlczogCi0gICAgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPiBQcmljZVF1b3RlRG9jdW1lbnQ8L3NwYW4+IGFuZCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+UHJpY2VRdW90ZURvY3VtZW50LlByaWNlUXVvdGU8L3NwYW4+LjwvcD4KLSAgPHA+RnJvbSB0aGUgc2NoZW1hIHBvaW50IG9mIHZpZXcsIHRoZSBnZW5lcmF0ZWQgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlByaWNlUXVvdGU8L3NwYW4+IAotICAgIGludGVyZmFjZSByZXByZXNlbnRzIHRoZSA8ZW0+Y29tcGxleCB0eXBlPC9lbT4geW91IHNlZSBpbnNpZGUgdGhlIHNjaGVtYSdzIAotICAgIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5wcmljZS1xdW90ZTwvc3Bhbj4gZWxlbWVudCBkZWNsYXJhdGlvbi4gTG9va2luZyBhdCAKLSAgICB0aGUgWE1MIGluc3RhbmNlLCB5b3UgY2FuIHNlZSB0aGF0IHRoaXMgY29tcGxleCB0eXBlIHRyYW5zbGF0ZXMgaW50byBhIHNlcXVlbmNlIAotICAgIG9mIHR3byBlbGVtZW50cywgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnN0b2NrLXN5bWJvbDwvc3Bhbj4gYW5kIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5zdG9jay1wcmljZTwvc3Bhbj4uIAotICAgIFNvIGl0J3Mgbm90IHN1cnByaXNpbmcgdGhhdCB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlByaWNlUXVvdGU8L3NwYW4+IAotICAgIGludGVyZmFjZSBleHBvc2VzIG1ldGhvZHMgc3VjaCBhcyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+Z2V0U3RvY2tQcmljZTwvc3Bhbj4gCi0gICAgYW5kIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5zZXRTdG9ja1ByaWNlPC9zcGFuPiB0byBzZXQgdGhlIHZhbHVlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5zdG9jay1wcmljZTwvc3Bhbj4gCi0gICAgZWxlbWVudC48L3A+Ci0gIDxwPlRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+UHJpY2VRdW90ZURvY3VtZW50PC9zcGFuPiBpbnRlcmZhY2UsIG9uIHRoZSAKLSAgICBvdGhlciBoYW5kLCByZXByZXNlbnRzIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+cHJpY2UtcXVvdGU8L3NwYW4+IDxlbT5kb2N1bWVudDwvZW0+IAotICAgIHRoYXQgY29udGFpbnMgdGhlIHJvb3QgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnByaWNlLXF1b3RlPC9zcGFuPiBlbGVtZW50LiAKLSAgICBYTUxCZWFucyBjcmVhdGVzIGEgc3BlY2lhbCAmcXVvdDtkb2N1bWVudCZxdW90OyB0eXBlIGZvciBnbG9iYWwgZWxlbWVudCB0eXBlcy4gCi0gICAgQSBkb2N1bWVudCB0eXBlIHByb3ZpZGVzIGEgd2F5IGZvciB5b3UgdG8gZ2V0IGFuZCBzZXQgdGhlIHZhbHVlIG9mIHRoZSB1bmRlcmx5aW5nIAotICAgIHR5cGUsIGhlcmUgcmVwcmVzZW50ZWQgYnkgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlByaWNlUXVvdGU8L3NwYW4+LiBUaGUgCi0gICAgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnByaWNlLXF1b3RlPC9zcGFuPiBlbGVtZW50IGlzIGNvbnNpZGVyZWQgYSA8ZW0+Z2xvYmFsPC9lbT4gCi0gICAgZWxlbWVudCBiZWNhdXNlIGl0IGNhbiBiZSByZWZlcmVuY2VkIGZyb20gYW55d2hlcmUgZWxzZSBpbiB0aGUgc2NoZW1hLiBGb3IgCi0gICAgZ2xvYmFsIGVsZW1lbnRzLCB0aGUgWE1MQmVhbnMgc2NoZW1hIGNvbXBpbGVyIGdlbmVyYXRlcyBhbiBpbnRlcmZhY2Ugd2hvc2UgCi0gICAgbmFtZSBlbmRzIHdpdGggJnF1b3Q7RG9jdW1lbnQuJnF1b3Q7IFRoaXMgaXMgYmVjYXVzZSBhbiBYTUwgc2NoZW1hIGhhcyBubyAKLSAgICB3YXkgb2YgZGVmaW5pbmcgYSAmcXVvdDtyb290JnF1b3Q7IGVsZW1lbnQ7IGFueSBnbG9iYWwgZWxlbWVudCBjYW4gYmUgdGhlIAotICAgIHJvb3QuPC9wPgotICA8cD5UaGUgZm9sbG93aW5nIGJpdCBvZiBKYXZhIGNvZGUgaWxsdXN0cmF0ZXMgaG93IHlvdSBtaWdodCB1c2UgdGhlc2UgaW50ZXJmYWNlcyAKLSAgICB0byBnZXQgdGhlIHN0b2NrIHByaWNlIGNvbnRhaW5lZCBpbiB0aGUgWE1MLjwvcD4KLSAgPHByZT4KLXB1YmxpYyBzdGF0aWMgZmxvYXQgZ2V0U3RvY2tQcmljZShqYXZhLmlvLkZpbGUgb3JkZXJYTUwpIHRocm93cyBFeGNlcHRpb24gCi17Ci0gICAgUHJpY2VRdW90ZURvY3VtZW50IGRvY1hNTCA9IFByaWNlUXVvdGVEb2N1bWVudC5GYWN0b3J5LnBhcnNlKG9yZGVyWE1MKTsKLSAgICBQcmljZVF1b3RlIHF1b3RlWE1MID0gZG9jWE1MLmdldFByaWNlUXVvdGUoKTsKLSAgICBmbG9hdCBzdG9ja1ByaWNlID0gcXVvdGVYTUwuZ2V0U3RvY2tQcmljZSgpOwotICAgIHJldHVybiBzdG9ja1ByaWNlOwotfQotPC9wcmU+Ci0gIDxwPlRoaXMgY29kZSBsb2FkcyB0aGUgWE1MIGZyb20gYSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+RmlsZTwvc3Bhbj4gb2JqZWN0LCAKLSAgICBjb252ZXJ0aW5nIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+cGFyc2U8L3NwYW4+IG1ldGhvZCdzIHJldHVybiB2YWx1ZSAKLSAgICB0byBhIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5QcmljZVF1b3RlRG9jdW1lbnQ8L3NwYW4+IGluc3RhbmNlLiBJdCB0aGVuIAotICAgIHVzZXMgdGhpcyBpbnN0YW5jZSB0byBnZXQgYW4gaW5zdGFuY2Ugb2YgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlByaWNlUXVvdGU8L3NwYW4+LiAKLSAgICBXaXRoIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5QcmljZVF1b3RlPC9zcGFuPiwgdGhlIGNvZGUgZXh0cmFjdHMgdGhlIHN0b2NrIAotICAgIHByaWNlLiA8L3A+Ci08L2Rpdj4KLTxkaXY+IAotICA8ZGl2IGlkPSJ0b3BpY3RleHQiPiAKLSAgICA8cD5UaGUgWE1MIHNjaGVtYSBzcGVjaWZpY2F0aW9uIHByb3ZpZGVzIGEgcmljaCBzZXQgb2YgcnVsZXMgdGhyb3VnaCB3aGljaCAKLSAgICAgIHlvdSBjYW4gZGVyaXZlIG5ldyB0eXBlcy4gV2hlbiB5b3UgZ2VuZXJhdGUgaW50ZXJmYWNlcyBmcm9tIHlvdXIgc2NoZW1hLCAKLSAgICAgIFhNTEJlYW5zIHVzZXMgdGhlIHNjaGVtYSdzIHJ1bGVzIHRvIGRldGVybWluZSBob3cgdG8gZ2VuZXJhdGUgaW50ZXJmYWNlcy4gCi0gICAgICBUaGUgZm9sbG93aW5nIGRlc2NyaWJlcyBzb21lIG9mIHRoZSBndWlkZWxpbmVzIGJ5IHdoaWNoIHRoaXMgaXMgZG9uZS48L3A+Ci0gICAgPGgyPk5hbWVzIGZvciBJbnRlcmZhY2VzPC9oMj4KLSAgICA8cD5JbnRlcmZhY2VzIGFyZSBnZW5lcmF0ZWQgZm9yIHNjaGVtYSB0eXBlcyAoYm90aCBzaW1wbGUgYW5kIGNvbXBsZXgpLiBBbm9ueW1vdXMgCi0gICAgICBzY2hlbWEgdHlwZXMgcmVzdWx0IGluIGlubmVyIGludGVyZmFjZXMgaW5zaWRlIHRoZSB0eXBlIGludGVyZmFjZSBpbiB3aGljaCAKLSAgICAgIHRoZXkgYXJlIGRlZmluZWQuIFRoZWlyIG5hbWUgY29tZXMgZnJvbSB0aGUgZWxlbWVudCBvciBhdHRyaWJ1dGUgaW4gd2hpY2ggCi0gICAgICB0aGV5IGlzIGRlZmluZWQuPC9wPgotICAgIDxwPk5hbWVzIGZvciBzY2hlbWEgdHlwZXMgYmVjb21lIEphdmEtZnJpZW5kbHkgbmFtZXMgd2hlbiB0aGUgc2NoZW1hIGlzIGNvbXBpbGVkLiAKLSAgICAgIEluIG90aGVyIHdvcmRzLCBuYW1lcyBzdWNoIGFzICJwcmljZS1xdW90ZSIgYmVjb21lICJQcmljZVF1b3RlLiIgSW4gYWRkaXRpb24sIAotICAgICAgYSBzY2hlbWEncyBYTUwgbmFtZXNwYWNlIFVSSXMgYmVjb21lIHBhY2thZ2UgbmFtZXMgZm9yIFhNTEJlYW4gdHlwZXMgZ2VuZXJhdGVkIAotICAgICAgZnJvbSB0aGUgc2NoZW1hLiBUaGUgd2F5IHRoaXMgbmFtZSB0cmFuc2xhdGlvbiBpcyBkb25lIGlzIGRlc2NyaWJlZCBieSBzZWN0aW9uIAotICAgICAgQyBvZiB0aGUgSmF2YSBBUEkgZm9yIFhNTCBCaW5kaW5nIChKQVhCKSBzcGVjaWZpY2F0aW9uIGF0IDxhIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL2Rvd25sb2Fkcy9qYXhiLmh0bWwiIHRhcmdldD0iX2JsYW5rIj4gCi0gICAgICBodHRwOi8vamF2YS5zdW4uY29tL3htbC9qYXhiLmh0bWwuPC9hPiA8L3A+Ci0gICAgPHA+SGVyZSBhcmUgYSBmZXcgZXhhbXBsZXM6PC9wPgotICAgIDx0YWJsZT4KLSAgICAgIDx0cj4gCi0gICAgICAgIDx0ZD48c3Ryb25nPlNjaGVtYSBUYXJnZXQgTmFtZXNwYWNlPC9zdHJvbmc+PC90ZD4KLSAgICAgICAgPHRkIHdpZHRoPSIxNTUiPjxzdHJvbmc+WE1MIExvY2FsbmFtZTwvc3Ryb25nPjwvdGQ+Ci0gICAgICAgIDx0ZD48c3Ryb25nPkZ1bGx5LVF1YWxpZmllZCBYTUxCZWFuIFR5cGUgTmFtZTwvc3Ryb25nPjwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPiAKLSAgICAgICAgPHRkPmh0dHA6Ly93d3cubXljb21wYW55LmNvbS8yMDAyL2J1eWVyPC90ZD4KLSAgICAgICAgPHRkIHdpZHRoPSIxNTUiPnB1cmNoYXNlLW9yZGVyLTQ8L3RkPgotICAgICAgICA8dGQ+Y29tLm15Y29tcGFueS54MjAwMi5idXllci5QdXJjaGFzZU9yZGVyNDwvdGQ+Ci0gICAgICA8L3RyPgotICAgICAgPHRyPiAKLSAgICAgICAgPHRkPmh0dHA6Ly9teWNvLmNvbS9zYW1wbGUuaHRtbDwvdGQ+Ci0gICAgICAgIDx0ZCB3aWR0aD0iMTU1Ij5TYW1wbGVEb2N1bWVudDwvdGQ+Ci0gICAgICAgIDx0ZD5jb20ubXljby5zYW1wbGUuU2FtcGxlRG9jdW1lbnQ8L3RkPgotICAgICAgPC90cj4KLSAgICAgIDx0cj4gCi0gICAgICAgIDx0ZD5odHRwOi8vb3BlbnVyaS5vcmcvdGVzdF9jYXNlXzE8L3RkPgotICAgICAgICA8dGQgd2lkdGg9IjE1NSI+dGVzdF90eXBlPC90ZD4KLSAgICAgICAgPHRkPm9yZy5vcGVudXJpLnRlc3RDYXNlMS5UZXN0VHlwZTwvdGQ+Ci0gICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gICAgPHA+V2hlbiB0aGVyZSBhcmUgbmFtZSBjb2xsaXNpb25zLCB0aGUgZ2VuZXJhdGVkIHR5cGVzIHdpbGwgaGF2ZSBuYW1lcyB3aXRoIAotICAgICAgbnVtZXJhbHMgYXBwZW5kZWQmbmJzcDuXIGZvciBleGFtcGxlLCAiVGVzdFR5cGUyIi48L3A+Ci0gICAgPGgyPkdsb2JhbCBFbGVtZW50cyBhbmQgQXR0cmlidXRlczwvaDI+Ci0gICAgPHA+SW4gc2NoZW1hLCBnbG9iYWwgZWxlbWVudCBhbmQgYXR0cmlidXRlIGRlZmluaXRpb25zIGFyZSB0aG9zZSB0aGF0IGFyZSAKLSAgICAgIGRlY2xhcmVkIGF0IHRoZSB0b3AgbGV2ZWwgb2YgdGhlIHNjaGVtYSAodGhhdCBpcywgaW1tZWRpYXRlbHkgd2l0aGluIHRoZSAKLSAgICAgIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5zY2hlbWE8L3NwYW4+IHJvb3QgZWxlbWVudCkuIEJlY2F1c2UgdGhleSBhcmUgZ2xvYmFsLCAKLSAgICAgIHRoZXkgbWF5IGJlIHJlZmVyZW5jZWQgZnJvbSBpbnNpZGUgdGhlIHNjaGVtYSBieSBuYW1lLiBUaGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmNyZWRpdFJlcG9ydDwvc3Bhbj4gCi0gICAgICAobm90IHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+Y3JlZGl0UmVwb3J0VHlwZTwvc3Bhbj4gY29tcGxleCB0eXBlKSAKLSAgICAgIGVsZW1lbnQgZGVmaW5lZCBpbiB0aGUgZm9sbG93aW5nIHNjaGVtYSBpcyBhbiBleGFtcGxlLjwvcD4KLSAgICA8cHJlPgotJmx0O3hzOnNjaGVtYSB0YXJnZXROYW1lc3BhY2U9JnF1b3Q7aHR0cDovL29wZW51cmkub3JnL3NhbXBsZXMvY3JlZGl0UmVwb3J0JnF1b3Q7IAotICAgIHhtbG5zOmNyPSZxdW90O2h0dHA6Ly9vcGVudXJpLm9yZy9zYW1wbGVzL2NyZWRpdFJlcG9ydCZxdW90OyAKLSAgICB4bWxuczp4cz0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSZxdW90OwotICAgIGVsZW1lbnRGb3JtRGVmYXVsdD0mcXVvdDtxdWFsaWZpZWQmcXVvdDsKLSAgICBhdHRyaWJ1dGVGb3JtRGVmYXVsdD0mcXVvdDt1bnF1YWxpZmllZCZxdW90OyZndDsKLSAgICAmbHQ7eHM6Y29tcGxleFR5cGUgbmFtZT0mcXVvdDtjcmVkaXRSZXBvcnRUeXBlJnF1b3Q7Jmd0OwotICAgICAgICAmbHQ7eHM6c2VxdWVuY2UmZ3Q7Ci0gICAgICAgICAgICAmbHQ7eHM6ZWxlbWVudCBuYW1lPSZxdW90O2JhbmtSZXBvcnQmcXVvdDsgdHlwZT0mcXVvdDt4czpzdHJpbmcmcXVvdDsvJmd0OwotICAgICAgICAgICAgJmx0O3hzOmVsZW1lbnQgbmFtZT0mcXVvdDt0YXhSZXBvcnQmcXVvdDsgdHlwZT0mcXVvdDt4czpzdHJpbmcmcXVvdDsvJmd0OwotICAgICAgICAmbHQ7L3hzOnNlcXVlbmNlJmd0OwotICAgICZsdDsveHM6Y29tcGxleFR5cGUmZ3Q7Ci0gICAgJmx0O3hzOmVsZW1lbnQgbmFtZT0mcXVvdDtjcmVkaXRSZXBvcnQmcXVvdDsgdHlwZT0mcXVvdDtjcjpjcmVkaXRSZXBvcnRUeXBlJnF1b3Q7LyZndDsKLSZsdDsveHM6c2NoZW1hJmd0OzwvcHJlPgotICAgIDxwPlhNTEJlYW5zIGdlbmVyYXRlcyBhIHNlcGFyYXRlIGludGVyZmFjZSBmb3IgZWFjaCBvZiB0aGVzZS4gQWxzbywgZ2xvYmFsIAotICAgICAgZWxlbWVudCBhbmQgYXR0cmlidXRlIHR5cGVzIGFyZSBzb21ld2hhdCB1bmlxdWUgaW4gdGhhdCB0aGUgc2NoZW1hIGNvbXBpbGVyIAotICAgICAgd2lsbCBjcmVhdGUgc3BlY2lhbCB0eXBlcyB0byBob2xkIHRoZSBnbG9iYWxseSBkZWZpbmVkIGVsZW1lbnQgb3IgYXR0cmlidXRlLiAKLSAgICAgIFRoZSBuYW1lcyBvZiB0aGVzZSB0eXBlcyB3aWxsIGJlIGFwcGVuZGVkIHdpdGggJnF1b3Q7RG9jdW1lbnQmcXVvdDsgKGZvciAKLSAgICAgIGVsZW1lbnRzKSBvciAmcXVvdDtBdHRyaWJ1dGUmcXVvdDsgKGZvciBhdHRyaWJ1dGVzKS4gWW91IGNhbiByZXRyaWV2ZSB0aGUgCi0gICAgICBlbGVtZW50IG9yIGF0dHJpYnV0ZSBpdHNlbGYgKG9yIGNyZWF0ZSBhIG5ldyBvbmUpIGJ5IGNhbGxpbmcgdGhlIGFjY2Vzc29yIAotICAgICAgbWV0aG9kcyB0aGF0IHRoZSBzcGVjaWFsIHR5cGVzIHByb3ZpZGUuIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSB3b3VsZCBjcmVhdGUgCi0gICAgICBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY3JlZGl0UmVwb3J0IGVsZW1lbnQuPC9wPgotICAgIDxwcmU+Ci0vLyBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIHNwZWNpYWwgZG9jdW1lbnQgdHlwZS4KLUNyZWRpdFJlcG9ydERvY3VtZW50IHJlcG9ydERvYyA9IENyZWRpdFJlcG9ydERvY3VtZW50LkZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLS8qCi0gKiBVc2UgdGhlIGRvY3VtZW50IHR5cGUgdG8gYWRkIGEgbmV3IGNyZWRpdFJlcG9ydCBlbGVtZW50IHRvIHRoZSBYTUwgaW5zdGFuY2UuCi0gKiBOb3RlIHRoYXQgdGhlIHR5cGUgcmV0dXJuZWQgYnkgdGhlIGFkZE5ld0NyZWRpdFJlcG9ydCBtZXRob2QgaXMgdGhlIAotICogY3JlZGl0UmVwb3J0VHlwZSBjb21wbGV4IHR5cGUgZGVmaW5lZCBmb3IgaXQgaW4gc2NoZW1hLgotICovCi1DcmVkaXRSZXBvcnRUeXBlIHJlcG9ydCA9IHJlcG9ydERvYy5hZGROZXdDcmVkaXRSZXBvcnQoKTsKLTwvcHJlPgotICAgIDxoMj5HbG9iYWwgVXNlci1EZXJpdmVkIFR5cGVzPC9oMj4KLSAgICA8cD5BIDxlbT51c2VyLWRlcml2ZWQ8L2VtPiB0eXBlIGlzIG9uZSBkZWZpbmVkIHdpdGggYSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+Y29tcGxleFR5cGU8L3NwYW4+IAotICAgICAgb3IgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnNpbXBsZVR5cGU8L3NwYW4+IGVsZW1lbnQgaW4gc2NoZW1hLiBVc2VyLWRlcml2ZWQgCi0gICAgICB0eXBlcyBhdCB0aGUgdG9wIGxldmVsIG9mIGEgc2NoZW1hIGFyZSBnbG9iYWwuIFhNTEJlYW5zIGdlbmVyYXRlcyBhbiBpbnRlcmZhY2UgCi0gICAgICBmb3IgZWFjaCBvZiB0aGVzZSwgYXMgaXQgZG9lcyB3aXRoIGdsb2JhbCBlbGVtZW50cyBhbmQgYXR0cmlidXRlcy4gVGhlc2UgCi0gICAgICBpbnRlcmZhY2VzIGluY2x1ZGUgbWV0aG9kcyB0aHJvdWdoIHdoaWNoIHlvdSBjYW4gZ2V0IGFuZCBzZXQgdGhlIHR5cGUncyAKLSAgICAgIHZhbHVlcywgaW5jbHVkaW5nIGFueSBuZXN0ZWQgZGVyaXZlZCB0eXBlcyBpdCBtYXkgY29udGFpbi4gVGhlIGZvbGxvd2luZyAKLSAgICAgIHNjaGVtYSBzbmlwcGV0IGRlZmluZXMgYSB1c2VyLWRlcml2ZWQgY29tcGxleCB0eXBlIGNhbGxlZCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+aXRlbVR5cGU8L3NwYW4+LCAKLSAgICAgIGFsb25nIHdpdGggYSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+cHJpY2VUeXBlPC9zcGFuPiB0aGF0IHVzZXMgaXQgYXMgdGhlIAotICAgICAgdHlwZSBmb3IgYW4gPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPml0ZW08L3NwYW4+IGNoaWxkIGVsZW1lbnQuPC9wPgotICAgIDxwcmU+Ci0mbHQ7eHM6Y29tcGxleFR5cGUgbmFtZT0mcXVvdDtpdGVtVHlwZSZxdW90OyZndDsKLSAgICAmbHQ7eHM6c2VxdWVuY2UmZ3Q7Ci0gICAgICAgICZsdDt4czplbGVtZW50IG5hbWU9JnF1b3Q7bmFtZSZxdW90OyB0eXBlPSZxdW90O3hzOnN0cmluZyZxdW90Oy8mZ3Q7Ci0gICAgICAgICZsdDt4czplbGVtZW50IG5hbWU9JnF1b3Q7YW1vdW50JnF1b3Q7IHR5cGU9JnF1b3Q7eHM6aW50JnF1b3Q7LyZndDsKLSAgICAgICAgJmx0O3hzOmVsZW1lbnQgbmFtZT0mcXVvdDtwcmljZSZxdW90OyB0eXBlPSZxdW90O3hzOmRvdWJsZSZxdW90Oy8mZ3Q7Ci0gICAgJmx0Oy94czpzZXF1ZW5jZSZndDsKLSZsdDsveHM6Y29tcGxleFR5cGUmZ3Q7Ci0mbHQ7eHM6Y29tcGxleFR5cGUgbmFtZT0mcXVvdDtwcmljZVR5cGUmcXVvdDsmZ3Q7Ci0gICAgJmx0O3hzOnNlcXVlbmNlJmd0OwotICAgICAgICAmbHQ7eHM6ZWxlbWVudCBuYW1lPSZxdW90O2l0ZW0mcXVvdDsgdHlwZT0mcXVvdDtwczppdGVtVHlwZSZxdW90OyBtaW5PY2N1cnM9JnF1b3Q7MCZxdW90OyBtYXhPY2N1cnM9JnF1b3Q7dW5ib3VuZGVkJnF1b3Q7LyZndDsKLSAgICAmbHQ7L3hzOnNlcXVlbmNlJmd0OwotJmx0Oy94czpjb21wbGV4VHlwZSZndDsKLSZsdDt4czplbGVtZW50IG5hbWU9JnF1b3Q7cHJpY2UmcXVvdDsgdHlwZT0mcXVvdDtwczpwcmljZVR5cGUmcXVvdDsvJmd0OwotPC9wcmU+Ci0gICAgPHA+QnkgZGVmYXVsdCwgdGhlIGdlbmVyYXRlZCBKYXZhIHR5cGUgZm9yIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5pdGVtVHlwZTwvc3Bhbj4gCi0gICAgICB3b3VsZCBiZSBhbiBpbnRlcmZhY2UgY2FsbGVkIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5JdGVtVHlwZTwvc3Bhbj4uIFdpdGggCi0gICAgICB0aGlzIHR5cGUsIHlvdSB3b3VsZCBiZSBhYmxlIHRvIGdldCBhbmQgc2V0IHRoZSB2YWx1ZXMgb2YgaXRzIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5uYW1lPC9zcGFuPiwgCi0gICAgICA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+YW1vdW50PC9zcGFuPiwgYW5kIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5wcmljZTwvc3Bhbj4gCi0gICAgICBjaGlsZCBlbGVtZW50cy4gSG93ZXZlciwgYSB1c2VyLWRlcml2ZWQgdHlwZSAoYXMgb3Bwb3NlZCB0byBhbiBlbGVtZW50IG9yIAotICAgICAgYXR0cmlidXRlKSBpcyBhbHdheXMgaW50ZW5kZWQgZm9yIHVzZSBhcyB0aGUgdHlwZSB0byB3aGljaCBhbiBlbGVtZW50IG9yIAotICAgICAgYXR0cmlidXRlIGlzIGJvdW5kLiBJbiBvdGhlciB3b3JkcywgaXQncyBjb250YWluZWQgYnkgYW4gZWxlbWVudCBvciBhdHRyaWJ1dGUuIAotICAgICAgV2hpbGUgeW91IGNhbiBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgYSB1c2VyLWRlcml2ZWQgdHlwZSwgdGhlIG5ldyBpbnN0YW5jZSdzIAotICAgICAgdW5kZXJseWluZyBYTUwgaXMgYSBmcmFnbWVudC4gQXMgdGhlIGdlbmVyYXRlZCBBUEkgd291bGQgbWFrZSBjbGVhciwgdGhlIAotICAgICAgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPml0ZW1UeXBlPC9zcGFuPiBiZWNvbWVzIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdldCAKLSAgICAgIG1ldGhvZCwgb3IgdGhlIHBhcmFtZXRlciBvZiBhIHNldCBtZXRob2QuPC9wPgotICAgIDxwcmU+Ci0vLyBDcmVhdGUgYSBuZXcgcHJpY2UgZG9jdW1lbnQuCi1QcmljZURvY3VtZW50IHByaWNlRG9jID0gUHJpY2VEb2N1bWVudC5GYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci1QcmljZVR5cGUgcHJpY2UgPSBwcmljZURvYy5nZXRQcmljZSgpOwotCi0vKiAKLSAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBJdGVtVHlwZSBhbmQgc2V0IHRoZSB2YWx1ZXMgb2YgaXRzCi0gKiBjaGlsZCBlbGVtZW50cy4KLSAqLwotSXRlbVR5cGUgaXRlbSA9IEl0ZW1UeXBlLkZhY3RvcnkubmV3SW5zdGFuY2UoKTsKLWl0ZW0uc2V0TmFtZSgmcXVvdDtiaWN5Y2xlJnF1b3Q7KTsKLWl0ZW0uc2V0QW1vdW50KDEyKTsKLWl0ZW0uc2V0UHJpY2UoNTYwLjAwKTsKLQotLyogCi0gKiBVc2UgdGhlIG5ldyBJdGVtVHlwZSBpbnN0YW5jZSB0byBzZXQgdGhlIHZhbHVlIG9mIHRoZSAKLSAqIHByaWNlIGVsZW1lbnQncyBmaXJzdCBpdGVtIGNoaWxkIGVsZW1lbnQuIE5vdGljZSB0aGF0IHRoZSBzZXQgbWV0aG9kCi0gKiBoZXJlIGlzIGFuICJBcnJheSIgbWV0aG9kLiBUaGlzIGlzIGJlY2F1c2UgdGhlIGl0ZW0gZWxlbWVudAotICogaXMgZGVmaW5lZCB3aXRoIGEgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIGF0dHJpYnV0ZS4gSXQgY2FuIG9jY3VyCi0gKiBtYW55IHRpbWVzIGFzIGEgY2hpbGQgb2YgcHJpY2UuCi0gKi8KLXByaWNlLnNldEl0ZW1BcnJheSgwLCBpdGVtKTsKLTwvcHJlPgotICAgIDxoMj5OZXN0ZWQgRWxlbWVudHMgYW5kIERlcml2ZWQgVHlwZXM8L2gyPgotICAgIDxwPldoZW4geW91ciBzY2hlbWEgaW5jbHVkZXMgbmFtZWQgdHlwZXMgdGhhdCBhcmUgZGVjbGFyZWQgbG9jYWxseZd3aXRoaW4gCi0gICAgICB0aGUgZGVjbGFyYXRpb24gb2YgYW5vdGhlciBlbGVtZW50IG9yIHR5cGWXdGhlIHNjaGVtYSB0eXBlJ3MgZ2VuZXJhdGVkIEphdmEgCi0gICAgICBpbnRlcmZhY2Ugd2lsbCBiZSBhbiBpbm5lciBpbnRlcmZhY2Ugd2l0aGluIHRoZSB0eXBlIGl0J3MgbmVzdGVkIGluLjwvcD4KLSAgICA8cD5Gb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBzY2hlbWEgc25pcHBldCBkZWZpbmVzIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5uYW1lPC9zcGFuPiAKLSAgICAgIGFuZCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+Z2VuZGVyPC9zcGFuPiBlbGVtZW50cyBuZXN0ZWQgd2l0aGluIGEgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnBlcnNvbjwvc3Bhbj4gCi0gICAgICBjb21wbGV4IHR5cGUuIEluIHBhcnRpY3VsYXIsIG5vdGUgdGhhdCB0aGUgZ2VuZGVyIGVsZW1lbnQgaXMgZGVmaW5lZCBhcyAKLSAgICAgIGRlcml2aW5nIGZyb20gdGhlIHhzOk5NVE9LRU4gYnVpbHQtaW4gdHlwZS48L3A+Ci0gICAgPHByZT4KLSZsdDt4czpjb21wbGV4VHlwZSBuYW1lPSJwZXJzb24iJmd0OwotICAgICZsdDt4czpzZXF1ZW5jZSZndDsKLSAgICAgICAgJmx0O3hzOmVsZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIi8mZ3Q7Ci0gICAgICAgICZsdDt4czplbGVtZW50IG5hbWU9ImdlbmRlciImZ3Q7Ci0gICAgICAgICAgICAmbHQ7eHM6c2ltcGxlVHlwZSZndDsKLSAgICAgICAgICAgICAgICAmbHQ7eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6Tk1UT0tFTiImZ3Q7Ci0gICAgICAgICAgICAgICAgICAgICZsdDt4czplbnVtZXJhdGlvbiB2YWx1ZT0ibWFsZSIvJmd0OwotICAgICAgICAgICAgICAgICAgICAmbHQ7eHM6ZW51bWVyYXRpb24gdmFsdWU9ImZlbWFsZSIvJmd0OwotICAgICAgICAgICAgICAgICZsdDsveHM6cmVzdHJpY3Rpb24mZ3Q7Ci0gICAgICAgICAgICAmbHQ7L3hzOnNpbXBsZVR5cGUmZ3Q7Ci0gICAgICAgICZsdDsveHM6ZWxlbWVudCZndDsKLSAgICAmbHQ7L3hzOnNlcXVlbmNlJmd0OwotJmx0Oy94czpjb21wbGV4VHlwZSZndDsKLTwvcHJlPgotICAgIDxwPlRoZSBnZW5lcmF0ZWQgaW50ZXJmYWNlcyBmb3IgcGVyc29uIGFuZCBnZW5kZXIgd291bGQgYmUgb3JnYW5pemVkIGluIHNvdXJjZSAKLSAgICAgIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcuIE9mIGNvdXJzZSwgeW91IHdvdWxkbid0IHNlZSB0aGUgc291cmNlLCBidXQgCi0gICAgICB5b3UgY2FuIHNlZSBoZXJlIHRoYXQgdGhlIEdlbmRlciBpbnRlcmZhY2UgaXMgbmVzdGVkIHdpdGggUGVyc29uLiBBbHNvLCAKLSAgICAgIG5vdGljZSB0aGF0IGl0IGV4dGVuZHMgWG1sTk1UT0tFTiwgbWlycm9yaW5nIHRoZSBzY2hlbWEuPC9wPgotICAgIDxwcmU+cHVibGljIGludGVyZmFjZSBQZXJzb24gZXh0ZW5kcyBYbWxPYmplY3QKLXsKLSAgICBwdWJsaWMgaW50ZXJmYWNlIEdlbmRlciBleHRlbmRzIFhtbE5NVE9LRU4KLSAgICB7Ci0gICAgICAgIC8vIE1ldGhvZHMgb21pdHRlZCBmb3IgdGhpcyBleGFtcGxlCi0gICAgfQotICAgIC8vIE1ldGhvZHMgb21pdHRlZCBmb3IgdGhpcyBleGFtcGxlCi19Ci08L3ByZT4KLSAgICA8cD5Zb3UgY291bGQgY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+R2VuZGVyPC9zcGFuPiAKLSAgICAgIHR5cGUgaW4gdGhpcyB3YXkgKHRoZXJlIGFyZSBhbHNvIHZhcmlvdXMgYWx0ZXJuYXRpdmVzIHRvIHRoaXMpOjwvcD4KLSAgICA8cHJlPgotLy8gQ3JlYXRlIGEgbmV3IFBlcnNvbiBpbnN0YW5jZS4KLVBlcnNvbiBwZXJzb24gPSBQZXJzb24uRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotLyoKLSAqIFNldCB0aGUgZ2VuZGVyIGVsZW1lbnQncyB2YWx1ZSB1c2luZyB0aGUgCi0gKiBlbnVtZXJhdGlvbiBnZW5lcmF0ZWQgZnJvbSB0aGUgc2NoZW1hLgotICovCi1wZXJzb24uc2V0R2VuZGVyKEdlbmRlci5GRU1BTEUpOzwvcHJlPgotICAgIDxoMj5Vc2VyLURlcml2ZWQgU2ltcGxlIFR5cGVzPC9oMj4KLSAgICA8cD5JbiBhZGRpdGlvbiB0byB0aGUgNDYgYnVpbHQtaW4gc2ltcGxlIHR5cGVzIGluIFhNTCBzY2hlbWEsIGEgc2NoZW1hIGNhbiAKLSAgICAgIGluY2x1ZGUgaXRzIG93biBjdXN0b20gc2ltcGxlIHR5cGVzIHVzaW5nIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj54czpzaW1wbGVUeXBlPC9zcGFuPiAKLSAgICAgIGRlY2xhcmF0aW9ucy4gVGhlc2UgdXNlci1kZXJpdmVkIHNpbXBsZSB0eXBlcyBhcmUgYWx3YXlzIGJhc2VkIG9uIHRoZSBidWlsdC1pbiAKLSAgICAgIFhNTCBzY2hlbWEgdHlwZXMuIFRoZSBidWlsdC1pbiB0eXBlcyBjYW4gYmUgbW9kaWZpZWQgYnkgPGVtPnJlc3RyaWN0aW5nPC9lbT4gCi0gICAgICB0aGVtLCB0YWtpbmcgPGVtPnVuaW9uczwvZW0+IG9mIHRoZW0sIG9yIG1ha2luZyBzcGFjZS1zZXBhcmF0ZWQgPGVtPmxpc3RzPC9lbT4gCi0gICAgICBvZiB0aGVtLiBFYWNoIFhNTCBzaW1wbGUgdHlwZSBpcyB0cmFuc2xhdGVkIGludG8gYSBKYXZhIHR5cGUgdGhhdCBwcm92aWRlcyAKLSAgICAgIGFjY2VzcyB0byB0aGUgdW5kZXJseWluZyBkYXRhLjwvcD4KLSAgICA8aDM+VW5pb25zPC9oMz4KLSAgICA8cD5JbiBzY2hlbWEsIHlvdSBjYW4gdXNlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj54czp1bmlvbjwvc3Bhbj4gdG8gc3BlY2lmeSAKLSAgICAgIGEgc2ltcGxlIHR5cGUgdGhhdCBpcyBhbGxvd2VkIHRvIGNvbnRhaW4gdmFsdWVzIG9mIGEgbnVtYmVyIG9mIG90aGVyIHNpbXBsZSAKLSAgICAgIHR5cGVzLiBYTUxCZWFucyBnZW5lcmF0ZXMgYSB0eXBlIGZvciBhIHVuaW9uLCBqdXN0IGFzIGl0IGdlbmVyYXRlcyBhIHR5cGUgCi0gICAgICBmb3IgYW55IG90aGVyIHNjaGVtYSB0eXBlLiBBdCBydW4gdGltZSwgeW91IGNhbiBkaXNjb3ZlciB0aGUgdW5kZXJseWluZyAKLSAgICAgIHR5cGUgb2YgYW4gaW5zdGFuY2Ugb2YgYSB1bmlvbiB0eXBlIGJ5IGNhbGxpbmcgdGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5YbWxPYmplY3Q8L3NwYW4+IAotICAgICAgaW50ZXJmYWNlJ3MgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmluc3RhbmNlVHlwZTwvc3Bhbj4gbWV0aG9kLiBPbmNlIHlvdSAKLSAgICAgIGhhdmUgZGV0ZXJtaW5lZCB0aGUgdHlwZSwgeW91IGNhbiBjYXN0IGFuIGluc3RhbmNlIG9mIGEgdW5pb24gdHlwZSB0byB0aGUgCi0gICAgICBhY3R1YWwgdW5kZXJseWluZyBpbnN0YW5jZSB0eXBlLjwvcD4KLSAgICA8cHJlPgotJmx0O3hzOnNpbXBsZVR5cGUgbmFtZT0mcXVvdDtpbnRPclN0cmluZyZxdW90OyZndDsKLSAgICAmbHQ7eHM6dW5pb24gbWVtYmVyVHlwZXM9JnF1b3Q7eHM6aW50IHhzOnN0cmluZyZxdW90OyZndDsKLSZsdDsveHM6c2ltcGxlVHlwZSZndDsKLTwvcHJlPgotICAgIDxwPkdpdmVuIHRoZSBwcmVjZWRpbmcgc2NoZW1hIHNuaXBwZXQsIHlvdSBjb3VsZCBzZXQgdGhlIGludE9yU3RyaW5nIHZhbHVlIAotICAgICAgdG8sIHNheSwgNiBvciAmcXVvdDtzaXgmcXVvdDsuIFRoZSB1bmlvbiBvZiA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+eHM6aW50PC9zcGFuPiAKLSAgICAgIGFuZCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+eHM6c3RyaW5nPC9zcGFuPiBtYWtlcyBib3RoIGFsbG93YWJsZS48L3A+Ci0gICAgPHByZT4KLS8vIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgdHlwZS4KLUludE9yU3RyaW5nIGludE9yU3RyaW5nID0gSW50T3JTdHJpbmcuRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotaW50T3JTdHJpbmcuc2V0KCZxdW90OzUmcXVvdDspOwotLy8gVGhpcyBjb2RlIHByaW50cyAiWG1sSW50IiB0byB0aGUgY29uc29sZS4KLVN5c3RlbS5vdXQucHJpbnRsbihpbnRPclN0cmluZy5pbnN0YW5jZVR5cGUoKS5nZXRTaG9ydEphdmFOYW1lKCkpOwotPC9wcmU+Ci0gICAgPGgzPlJlc3RyaWN0aW9uczwvaDM+Ci0gICAgPHA+WE1MIHNjaGVtYSByZXN0cmljdGlvbnMgb24gc2ltcGxlIFhNTEJlYW5zIHR5cGVzIGFyZSBlbmZvcmNlZC4gU28sIGZvciAKLSAgICAgIGV4YW1wbGUsIGl0IGlzIGlsbGVnYWwgdG8gc2V0IGEgbnVtYmVyIG91dHNpZGUgaXRzIHJlc3RyaWN0ZWQgcmFuZ2UuIDwvcD4KLSAgICA8aDQ+TnVtZXJpYyBUeXBlIFJlc3RyaWN0aW9uczwvaDQ+Ci0gICAgPHA+SW4gc2NoZW1hLCB5b3UgY2FuIHJlc3RyaWN0IG51bWVyaWMgdHlwZXMgdG8gYWxsb3csIGZvciBleGFtcGxlLCBvbmx5IGEgCi0gICAgICBwYXJ0aWN1bGFyIHJhbmdlIG9mIHZhbHVlcy4gRm9yIHN1Y2ggYSByZXN0cmljdGlvbiwgWE1MQmVhbnMgdGFpbG9ycyB0aGUgCi0gICAgICByZXN1bHRpbmcgbmF0dXJhbCBKYXZhIGFsdGVybmF0aXZlLiBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGF2ZSB0aGUgZm9sbG93aW5nIAotICAgICAgZWxlbWVudCBkZWZpbmVkIGluIHNjaGVtYTo8L3A+Ci0gICAgPHByZT4KLSZsdDt4czplbGVtZW50IG5hbWU9Im51bWJlciImZ3Q7Ci0gICAgJmx0O3hzOnNpbXBsZVR5cGUmZ3Q7Ci0gICAgICAgICZsdDt4czpyZXN0cmljdGlvbiBiYXNlPSJ4czppbnRlZ2VyIiZndDsKLSAgICAgICAgICAgICZsdDt4czptaW5JbmNsdXNpdmUgdmFsdWU9IjEiLyZndDsKLSAgICAgICAgICAgICZsdDt4czptYXhJbmNsdXNpdmUgdmFsdWU9IjEwMDAwMDAiLyZndDsKLSAgICAgICAgJmx0Oy94czpyZXN0cmljdGlvbiZndDsKLSAgICAmbHQ7L3hzOnNpbXBsZVR5cGUmZ3Q7Ci0mbHQ7L3hzOmVsZW1lbnQmZ3Q7Ci08L3ByZT4KLSAgICA8cD5UaGUgdHlwZSBpcyByZXN0cmljdGVkIGZyb20gPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnhzOmludGVnZXI8L3NwYW4+LCAKLSAgICAgIGJ1dCBiZWNhdXNlIHRoZSBudW1iZXIncyByYW5nZSBpcyBsaW1pdGVkIHRvIGJldHdlZW4gMSBhbmQgMTAwMDAwMCwgaXQgd2lsbCAKLSAgICAgIGZpdCBpbnRvIGEgSmF2YSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+aW50PC9zcGFuPi4gQSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+bG9uZzwvc3Bhbj4gCi0gICAgICBvciA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+amF2YS5tYXRoLkJpZ0ludGVnZXI8L3NwYW4+IHdvdWxkIGJlIHRvbyBiaWcgCi0gICAgICBmb3IgdGhlIG5lZWQuIEluIG90aGVyIHdvcmRzLCB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmdldE51bWJlcjwvc3Bhbj4gCi0gICAgICBtZXRob2QgZ2VuZXJhdGVkIGZvciB0aGlzIHR5cGUgd2lsbCByZXR1cm4gYW4gPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmludDwvc3Bhbj4sIAotICAgICAgcmF0aGVyIHRoYW4gYSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+QmlnSW50ZWdlcjwvc3Bhbj4gb3IgYSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+bG9uZzwvc3Bhbj4uPC9wPgotICAgIDxwPkJ5IHRoZSBzYW1lIHRva2VuLCBhbiBsb25nIGNhbiBiZSBjb21waWxlZCB0byBhbiBpbnQgaWYgdGhlIHRvdGFsRGlnaXRzIAotICAgICAgYXR0cmlidXRlIGlzICZsdDs9OSwgb3IgdGhlIG1pbiBhbmQgbWF4IGF0dHJpYnV0ZSB2YWx1ZXMgYXJlIHdpdGhpbiAzMi1iaXQgCi0gICAgICAycyBjb21wbGVtZW50IHJhbmdlLjwvcD4KLSAgICA8cD5UaGUgc2luZ2xlIHByaW1pdGl2ZSBYTUwgdHlwZSB4czpkZWNpbWFsIGNhbiBiZSByZXN0cmljdGVkIGluIHNldmVyYWwgd2F5cyAKLSAgICAgIHRoYXQgaW5mbHVlbmNlIHRoZSByZXN1bHRpbmcgbmF0dXJhbCBKYXZhIHR5cGUuIEZvciBleGFtcGxlLCBpdCBjYW4gYmU6PC9wPgotICA8L2Rpdj4KLTwvZGl2PgotPHVsPgotICA8bGk+Ci0gICAgPGRpdj4KLSAgICAgIDxkaXY+Q29tcGlsZWQgdG8gYSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+QmlnSW50ZWdlcjwvc3Bhbj4gaWYgaXRzIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5mcmFjdGlvbkRpZ2l0PC9zcGFuPiAKLSAgICAgICAgYXR0cmlidXRlIGlzIHNldCB0byAwLiA8L2Rpdj4KLSAgICA8L2Rpdj4KLSAgPC9saT4KLSAgPGxpPgotICAgIDxkaXY+Ci0gICAgICA8ZGl2PkNvbXBpbGVkIHRvIGEgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmxvbmc8L3NwYW4+IGlmIGl0cyB0b3RhbERpZ2l0cyAKLSAgICAgICAgYXR0cmlidXRlIGlzICZsdDs9MTgsIG9yIHRoZSBtaW4gYW5kIG1heCBhcmUgd2l0aGluIDY0LWJpdCAycyBjb21wbGVtZW50IAotICAgICAgICByYW5nZS48L2Rpdj4KLSAgICA8L2Rpdj4KLSAgPC9saT4KLTwvdWw+Ci08ZGl2PgotICA8ZGl2PgotICAgIDxoMz5FbnVtZXJhdGlvbnM8L2gzPgotICAgIDxwPkluIHNjaGVtYSwgeW91IGNhbiBkZXJpdmUgYSBuZXcgdHlwZSBieSByZXN0cmljdGluZyBhIGJ1aWx0LWluIHR5cGUgc28gCi0gICAgICB0aGF0IG9ubHkgYSBmaW5pdGUgc2V0IG9mIHZhbHVlcyBhcmUgYWxsb3dhYmxlLiBXaGVyZSBzY2hlbWEgZG9lcyB0aGlzIGJ5IAotICAgICAgcmVzdHJpY3RpbmcgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnhzOnN0cmluZzwvc3Bhbj4sIFhNTEJlYW5zIGdlbmVyYXRlcyAKLSAgICAgIGEgc3BlY2lhbCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+RW51bTwvc3Bhbj4gdHlwZS4gV2l0aCBhbiA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+RW51bTwvc3Bhbj4sIAotICAgICAgeW91IGNhbiBzZWxlY3QgdGhlIGVudW1lcmF0ZWQgdmFsdWUgZWl0aGVyIGJ5IGl0cyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+U3RyaW5nPC9zcGFuPiAKLSAgICAgIHZhbHVlIG9yIGJ5IGEgbnVtZXJpYyBpbmRleC4gVGhlIGluZGV4J3MgdmFsdWUgaXMgZGV0ZXJtaW5lZCBiYXNlZCBvbiB0aGUgCi0gICAgICA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+U3RyaW5nPC9zcGFuPiB2YWx1ZSdzIG9yZGVyIGluIHRoZSBzY2hlbWEuIEhhdmluZyAKLSAgICAgIGFuIGluZGV4IGNhbiBiZSB1c2VmdWwgaW4gSmF2YSBzd2l0Y2ggc3RhdGVtZW50cy48L3A+Ci0gICAgPHA+Rm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhZCBhIGRvY3VtZW50IGNvbnRhaW5pbmcgcHJpY2UgZWxlbWVudHMgd2hvc2UgCi0gICAgICB0eXBlIHdhcyB0aGUgcHJpY2VUeXBlIGRlZmluZWQgaW4gdGhlIGZvbGxvd2luZyBzY2hlbWEgc25pcHBldDo8L3A+Ci0gICAgPHByZT4mbHQ7eHM6Y29tcGxleFR5cGUgbmFtZT0mcXVvdDtwcmljZVR5cGUmcXVvdDsmZ3Q7Ci0gICAgJmx0O3hzOnNlcXVlbmNlJmd0OwotICAgICAgICAmbHQ7eHM6ZWxlbWVudCBuYW1lPSZxdW90O2l0ZW0mcXVvdDsgdHlwZT0mcXVvdDtwczppdGVtVHlwZSZxdW90OyBtaW5PY2N1cnM9JnF1b3Q7MCZxdW90OyAKLSAgICAgICAgICAgICAgbWF4T2NjdXJzPSZxdW90O3VuYm91bmRlZCZxdW90Oy8mZ3Q7Ci0gICAgJmx0Oy94czpzZXF1ZW5jZSZndDsKLSAgICAmbHQ7eHM6YXR0cmlidXRlIG5hbWU9JnF1b3Q7dGhyZXNob2xkJnF1b3Q7Jmd0OwotICAgICAgICAmbHQ7eHM6c2ltcGxlVHlwZSZndDsKLSAgICAgICAgICAgICZsdDt4czpyZXN0cmljdGlvbiBiYXNlPSZxdW90O3hzOnN0cmluZyZxdW90OyZndDsKLSAgICAgICAgICAgICAgICAmbHQ7eHM6ZW51bWVyYXRpb24gdmFsdWU9JnF1b3Q7QmVsb3cxMERvbGxhcnMmcXVvdDsvJmd0OwotICAgICAgICAgICAgICAgICZsdDt4czplbnVtZXJhdGlvbiB2YWx1ZT0mcXVvdDtCZXR3ZWVuMTBBbmQyMERvbGxhcnMmcXVvdDsvJmd0OwotICAgICAgICAgICAgICAgICZsdDt4czplbnVtZXJhdGlvbiB2YWx1ZT0mcXVvdDtBYm92ZTIwRG9sbGFycyZxdW90Oy8mZ3Q7Ci0gICAgICAgICAgICAmbHQ7L3hzOnJlc3RyaWN0aW9uJmd0OwotICAgICAgICAmbHQ7L3hzOnNpbXBsZVR5cGUmZ3Q7Ci0gICAgJmx0Oy94czphdHRyaWJ1dGUmZ3Q7Ci0mbHQ7L3hzOmNvbXBsZXhUeXBlJmd0OzwvcHJlPgotICAgIDxwPlVzaW5nIHR5cGVzIGdlbmVyYXRlZCBmcm9tIHRoZSBzY2hlbWEsIHlvdSB3b3VsZCBiZSBhYmxlIHRvIHdyaXRlIHRoZSBmb2xsb3dpbmcgCi0gICAgICBKYXZhIGNvZGUgdG8gJnF1b3Q7c3dpdGNoJnF1b3Q7IG9uIHRoZSB0aHJlc2hvbGQgYXR0cmlidXRlJ3MgZW51bWVyYXRpb246PC9wPgotICAgIDxwcmU+Ci0vKgotICogVXNlIHRoZSBpbnRWYWx1ZSBtZXRob2QgcHJvdmlkZWQgYnkgdGhlIEVudW0gdHlwZSB0byBkZXRlcm1pbmUgdGhlIHRocmVzaG9sZAotICogYXR0cmlidXRlJ3MgY3VycmVudCBlbnVtZXJhdGlvbiB2YWx1ZS4KLSAqLwotc3dpdGNoKHByaWNlRWxlbWVudHNbaV0uZ2V0VGhyZXNob2xkKCkuaW50VmFsdWUoKSkKLXsKLSAgICAvLyBVc2UgdGhlIFRocmVzaG9sZCB0eXBlJ3MgZW51bWVyYXRpb24gdmFsdWVzIHRvIHRlc3QgZm9yIGFuIGF0dHJpYnV0ZSB2YWx1ZS4gCi0gICAgY2FzZSBQcmljZVR5cGUuVGhyZXNob2xkLklOVF9CRUxPV18xMF9ET0xMQVJTOgotICAgICAgICB6ZXJvQnVmZmVyLmFwcGVuZChpdGVtLmdldFRpdGxlKCkgKyAmcXVvdDtcbiZxdW90Oyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUHJpY2VUeXBlLlRocmVzaG9sZC5JTlRfQkVUV0VFTl8xMF9BTkRfMjBfRE9MTEFSUzoKLSAgICAgICAgdGVuQnVmZmVyLmFwcGVuZChpdGVtLmdldFRpdGxlKCkgKyAmcXVvdDtcbiZxdW90Oyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUHJpY2VUeXBlLlRocmVzaG9sZC5JTlRfQUJPVkVfMjBfRE9MTEFSUzoKLSAgICAgICAgdHdlbnR5QnVmZmVyLmFwcGVuZChpdGVtLmdldFRpdGxlKCkgKyAmcXVvdDtcbiZxdW90Oyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigmcXVvdDtZbyEgU29tZXRoaW5nIHVuZXhwZWN0ZWQgaGFwcGVuZWQhJnF1b3Q7KTsKLSAgICAgICAgYnJlYWs7Ci19PC9wcmU+Ci0gIDwvZGl2PgotICA8cCBjbGFzcz0icmVsYXRlZHRvcGljcyI+UmVsYXRlZCBUb3BpY3M8L3A+Ci0gIDxwPjxhIGhyZWY9ImNvblhNTEJlYW5zU3VwcG9ydEJ1aWx0SW5TY2hlbWFUeXBlcy5odG1sIj5YTUxCZWFucyBTdXBwb3J0IGZvciAKLSAgICBCdWlsdC1JbiBTY2hlbWEgVHlwZXM8L2E+PC9wPgotPC9kaXY+Ci0gPCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+Ci0KLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvZ3VpZGUvY29uTWV0aG9kc0ZvckdlbmVyYXRlZEphdmFUeXBlcy5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvZ3VpZGUvY29uTWV0aG9kc0ZvckdlbmVyYXRlZEphdmFUeXBlcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTE5MGUyLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL2d1aWRlL2Nvbk1ldGhvZHNGb3JHZW5lcmF0ZWRKYXZhVHlwZXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI2MiArMCwwIEBACi08IWRvY3R5cGUgSFRNTCBwdWJsaWMgIi0vL1czQy8vRFREIEhUTUwgNC4wIEZyYW1lc2V0Ly9FTiI+Ci0KLTxodG1sPgotPGhlYWQ+Ci08IS0tIEluc3RhbmNlQmVnaW5FZGl0YWJsZSBuYW1lPSJkb2N0aXRsZSIgLS0+Ci08dGl0bGU+TWV0aG9kcyBmb3IgVHlwZXMgR2VuZXJhdGVkIEZyb20gU2NoZW1hPC90aXRsZT4KLTwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4gCi08IS0tKE1ldGEpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPgotCi08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9JENIQVJTRVQ7Ij4KLQotCi08IS0tIEluc3RhbmNlQmVnaW5FZGl0YWJsZSBuYW1lPSJtZXRhdGFncyIgLS0+Ci0KLTxtZXRhIG5hbWU9ImNvbXBvbmVudCIgY29udGVudD0iIj4KLTwhLS0gSW4gdGhlIGRlc2NyaXB0aW9uIG1ldGF0YWcsIHBsZWFzZSBwcm92aWRlIGEgQlJJRUYgZGVzY3JpcHRpb24gb2YgdGhlIHRvcGljIGNvbnRlbnRzLiAtLT4KLTxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSIiPgotPCEtLSBJbiB0aGUgY29tcG9uZW50IG1ldGF0YWcsIHBsZWFzZSBsaXN0IGtleXdvcmRzIHRoYXQgd2lsbCBoZWxwIGEgdXNlciBzZWFyY2ggZm9yIHRoaXMgdG9waWMuIC0tPgotPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9IiI+Ci08IS0tIEluc3RhbmNlRW5kRWRpdGFibGUgLS0+Ci0KLTwhLS0oTGlua3MpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+Ci08IS0tIEluc3RhbmNlQmVnaW5FZGl0YWJsZSBuYW1lPSJoZWFkIiAtLT4KLTwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4KLTxsaW5rIGhyZWY9Ii4uL3htbGJlYW5zLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+Ci08YSBocmVmPSIuLi8uLi8uLi9jb3JlL2luZGV4Lmh0bWwiIGlkPSJpbmRleCI+PC9hPgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgc3JjPSIuLi8uLi8uLi9jb3JlL3RvcGljSW5mby5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiBzcmM9Ii4uLy4uLy4uL2NvcmUvQ29va2llQ2xhc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgc3JjPSIuLi8uLi8uLi9jb3JlL2Rpc3BsYXlDb250ZW50LmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLQotPCEtLShCb2R5KT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLTxib2R5PgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+Ci0KLTwvc2NyaXB0PgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iYm9keSIgLS0+IAotPGRpdiBpZD10b3BpY3RpdGxlPiAKLSAgPHAgY2xhc3M9VGl0bGU+TWV0aG9kcyBmb3IgVHlwZXMgR2VuZXJhdGVkIEZyb20gU2NoZW1hPC9wPgotPC9kaXY+Ci08ZGl2IGlkPXRvcGljdGV4dD4KLSAgPHA+QXMgeW91IG1heSBoYXZlIHNlZW4gaW4gPGEgaHJlZj0iY29uR2V0dGluZ1N0YXJ0ZWR3aXRoWE1MQmVhbnMuaHRtbCI+R2V0dGluZyAKLSAgICBTdGFydGVkIHdpdGggWE1MQmVhbnM8L2E+LCB5b3UgdXNlIHRoZSB0eXBlcyBnZW5lcmF0ZWQgZnJvbSBzY2hlbWEgdG8gYWNjZXNzIAotICAgIFhNTCBpbnN0YW5jZXMgYmFzZWQgb24gdGhlIHNjaGVtYS4gSWYgeW91J3JlIGZhbWlsaWFyIHdpdGggdGhlIEphdmFCZWFucyB0ZWNobm9sb2d5LCAKLSAgICB0aGUgY29udmVudGlvbnMgdXNlZCBpbiB0aGUgZ2VuZXJhdGVkIEFQSSB3aWxsIGJlIHJlY29nbml6YWJsZS4gPC9wPgotICA8cD5JbiBnZW5lcmFsLCBlbGVtZW50cyBhbmQgYXR0cmlidXRlcyBhcmUgdHJlYXRlZCBhcyAmcXVvdDtwcm9wZXJ0aWVzJnF1b3Q7IAotICAgIGluIHRoZSBKYXZhQmVhbnMgc2Vuc2UuIEluIG90aGVyIHdvcmRzLCBhcyB5b3Ugd291bGQgd2l0aCBKYXZhQmVhbnMgcHJvcGVydGllcywgCi0gICAgeW91IG1hbmlwdWxhdGUgcGFydHMgb2YgdGhlIFhNTCB0aHJvdWdoIGFjY2Vzc29yIG1ldGhvZHMgc3VjaCBhcyBnZXRDdXN0b21lcigpIAotICAgICh3aGVyZSB5b3UgaGF2ZSBhICZxdW90O2N1c3RvbWVyJnF1b3Q7IGVsZW1lbnQpLCBzZXRJZChTdHJpbmcpICh3aGVyZSB5b3UgCi0gICAgaGF2ZSBhbiAmcXVvdDtpZCZxdW90OyBhdHRyaWJ1dGUpLCBhbmQgc28gb24uIEhvd2V2ZXIsIGJlY2F1c2Ugc2NoZW1hIHN0cnVjdHVyZXMgCi0gICAgY2FuIGJlIHNvbWV3aGF0IGNvbXBsZXgsIFhNTEJlYW5zIHByb3ZpZGVzIHNldmVyYWwgb3RoZXIgbWV0aG9kIHN0eWxlcyBmb3IgCi0gICAgaGFuZGxpbmcgdGhvc2Ugc3RydWN0dXJlcyBpbiBYTUwgaW5zdGFuY2VzLjwvcD4KLSAgPGRpdj4KLSAgICA8aDI+UHJvdG90eXBlcyBmb3IgTWV0aG9kcyBpbiBHZW5lcmF0ZWQgSW50ZXJmYWNlczwvaDI+Ci0gICAgPHA+U2V2ZXJhbCBtZXRob2RzIGFyZSBnZW5lcmF0ZWQgZm9yIGVhY2ggZWxlbWVudCBvciBhdHRyaWJ1dGUgd2l0aGluIHRoZSAKLSAgICAgIGNvbXBsZXggdHlwZS4gVGhpcyB0b3BpYyBsaXN0cyBlYWNoIG1ldGhvZCB0aGF0IGNvdWxkIGJlIGdlbmVyYXRlZCBmb3IgYSAKLSAgICAgIGdpdmVuIGVsZW1lbnQgb3IgYXR0cmlidXRlLiA8L3A+Ci0gICAgPHA+Tm90ZSB0aGF0IHdoZXRoZXIgb3Igbm90IGEgZ2l2ZW4gbWV0aG9kIGlzIGdlbmVyYXRlZCBpcyBiYXNlZCBvbiBob3cgdGhlIAotICAgICAgZWxlbWVudCBvciBhdHRyaWJ1dGUgaXMgZGVmaW5lZCBpbiBzY2hlbWEuIEZvciBleGFtcGxlLCBhIGN1c3RvbWVyIGVsZW1lbnQgCi0gICAgICBkZWZpbml0aW9uIHdpdGggYSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+bWF4T2NjdXJzPC9zcGFuPiBhdHRyaWJ1dGUgdmFsdWUgCi0gICAgICBvZiAxIHdpbGwgcmVzdWx0IGluIGEgZ2V0Q3VzdG9tZXIgbWV0aG9kLCBidXQgbm90IGEgZ2V0Q3VzdG9tZXJBcnJheSBtZXRob2QgCi0gICAgICAmIzgyMTI7IGFmdGVyIGFsbCwgb25seSBvbmUgY3VzdG9tZXIgZWxlbWVudCBpcyBwb3NzaWJsZSBpbiBhbiBpbnN0YW5jZSAKLSAgICAgIGRvY3VtZW50LjwvcD4KLSAgICA8cD5Ob3RlLCB0b28sIHRoYXQgdGhlcmUgbWF5IGJlIHR3byBzZXRzIG9mIHBhcmFsbGVsIG1ldGhvZHM6IG9uZSB3aG9zZSBwcm90b3R5cGUgCi0gICAgICBzdGFydHMgd2l0aCBhbiAmcXVvdDt4JnF1b3Q7LiBBbiAmcXVvdDt4JnF1b3Q7IG1ldGhvZCBzdWNoIGFzIHhnZXROYW1lIG9yIAotICAgICAgeHNldE5hbWUgd291bGQgYmUgZ2VuZXJhdGVkIGZvciBlbGVtZW50cyBvciBhdHRyaWJ1dGUgd2hvc2UgdHlwZSBpcyBhIHNpbXBsZSAKLSAgICAgIHR5cGUuIEEgc2ltcGxlIHR5cGUgbWF5IGJlIG9uZSBvZiB0aGUgNDQgYnVpbHQtaW4gc2ltcGxlIHR5cGVzIG9yIG1heSBiZSAKLSAgICAgIGEgcmVzdHJpY3Rpb24gaW4gc2NoZW1hIG9mIG9uZSBvZiB0aG9zZSBidWlsdC1pbiB0eXBlcy4gT2YgY291cnNlLCBhbiBhdHRyaWJ1dGUgCi0gICAgICB3aWxsIGFsd2F5cyBiZSBvZiBhIHNpbXBsZSB0eXBlLiBGb3IgYnVpbHQtaW4gc2ltcGxlIHR5cGVzLCBhbiAmcXVvdDt4JnF1b3Q7IAotICAgICAgbWV0aG9kIHdpbGwgZ2V0IG9yIHNldCBvbmUgb2YgdGhlIHR5cGVzIHByb3ZpZGVkIHdpdGggWE1MQmVhbnMsIHN1Y2ggYXMgCi0gICAgICA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPlhtbFN0cmluZzwvYT48L3NwYW4+LCAKLSAgICAgIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L2E+PC9zcGFuPiwgCi0gICAgICA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj5YbWxHRGF5PC9hPjwvc3Bhbj4sIAotICAgICAgYW5kIHNvIG9uLiBGb3IgZGVyaXZlZCB0eXBlcywgdGhlICZxdW90O3gmcXVvdDsgbWV0aG9kIHdpbGwgZ2V0IG9yIHNldCBhIAotICAgICAgZ2VuZXJhdGVkIHR5cGUuPC9wPgotICAgIDxoMz5TaW5nbGUgT2NjdXJyZW5jZSBNZXRob2RzPC9oMz4KLSAgICA8cD5NZXRob2RzIGdlbmVyYXRlZCBmb3IgZWxlbWVudHMgb3IgYXR0cmlidXRlcyB0aGF0IGFsbG93IGEgc2luZ2xlIG9jY3VycmVuY2UuIAotICAgICAgQW4gZWxlbWVudCBpcyBzaW5ndWxhciBpZiBpdCB3YXMgZGVjbGFyZWQgd2l0aCBtYXhPY2N1cnM9JnF1b3Q7MSZxdW90Oy4gCi0gICAgICBBbiBhdHRyaWJ1dGUgaXMgc2luZ3VsYXIgaWYgaXQgd2FzIG5vdCBkZWNsYXJlZCB3aXRoIHVzZT0mcXVvdDtwcm9oaWJpdGVkJnF1b3Q7LjwvcD4KLSAgICA8cHJlPgotVHlwZSBnZXRGb28oKQotdm9pZCBzZXRGb28oVHlwZSBuZXdWYWx1ZSkKLTwvcHJlPgotICA8L2Rpdj4KLSAgPGJsb2NrcXVvdGU+IAotICAgIDxkaXY+UmV0dXJucyBvciBzZXRzIHRoZSB2YWx1ZSBvZiBGb28uIEdlbmVyYXRlZCB3aGVuIEZvbyBpcyBhbiBhdHRyaWJ1dGUsIAotICAgICAgb3IgaXMgYW4gZWxlbWVudCB0aGF0IGNhbiBvY2N1ciBvbmx5IG9uY2UgYXMgYSBjaGlsZC48L2Rpdj4KLSAgPC9ibG9ja3F1b3RlPgotICA8ZGl2PiAKLSAgICA8aHIgc2l6ZT0iMSI+Ci0gICAgPHByZT5YbWxUeXBlIHhnZXRGb28oKQotdm9pZCB4c2V0Rm9vKFhtbFR5cGUgbmV3VmFsdWUpPC9wcmU+Ci0gIDwvZGl2PgotICA8YmxvY2txdW90ZT4gCi0gICAgPGRpdj5SZXR1cm5zIG9yIHNldHMgdGhlIHZhbHVlIG9mIEZvbyBhcyBhbiBYTUxCZWFuIHNpbXBsZSB0eXBlLiBUaGVzZSBtZXRob2RzIAotICAgICAgYXJlIGdlbmVyYXRlZCBpZiBGb28ncyB0eXBlIGlzIGRlZmluZWQgaW4gc2NoZW1hIGFzIGEgc2ltcGxlVHlwZS48L2Rpdj4KLSAgPC9ibG9ja3F1b3RlPgotICA8ZGl2PiAKLSAgICA8aHIgc2l6ZT0iMSI+Ci0gICAgPHByZT5ib29sZWFuIGlzTmlsRm9vKCkKLXZvaWQgc2V0TmlsRm9vKCk8L3ByZT4KLSAgPC9kaXY+Ci0gIDxibG9ja3F1b3RlPiAKLSAgICA8ZGl2PkRldGVybWluZXMgb3Igc3BlY2lmaWVzIHdoZXRoZXIgdGhlIEZvbyBlbGVtZW50IGlzIG5pbCAoaW4gb3RoZXIgd29yZHMsIAotICAgICAgJnF1b3Q7bnVsbCZxdW90OyBpbiBzY2hlbWEgdGVybXMpLCBtZWFuaW5nIGl0IGNhbiBiZSBlbXB0eS4gQSBuaWwgZWxlbWVudCAKLSAgICAgIGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXM6PC9kaXY+Ci0gICAgPGRpdj4gCi0gICAgICA8cHJlPiZsdDtmb28vJmd0OzwvcHJlPgotICAgIDwvZGl2PgotICAgIDxkaXY+VGhlc2UgbWV0aG9kcyBhcmUgb25seSBnZW5lcmF0ZWQgd2hlbiBhbiBlbGVtZW50IHR5cGUgaXMgZGVjbGFyZWQgYXMgCi0gICAgICBuaWxsYWJsZSBpbiBzY2hlbWEgJiM4MjEyOyBpdCBoYXMgYSBuaWxsYWJsZT0mcXVvdDt0cnVlJnF1b3Q7IGF0dHJpYnV0ZS48L2Rpdj4KLSAgPC9ibG9ja3F1b3RlPgotICA8ZGl2PiAKLSAgICA8aHIgc2l6ZT0iMSI+Ci0gICAgPHByZT5YbWxUeXBlIGFkZE5ld0ZvbygpPC9wcmU+Ci0gIDwvZGl2PgotICA8YmxvY2txdW90ZT4gCi0gICAgPGRpdj5BZGRzIGEgbmV3IEZvbyBhcyBhbiBYTUxCZWFuIHNpbXBsZSB0byB0aGUgZG9jdW1lbnQsIG9yIHJldHVybnMgRm9vJ3MgCi0gICAgICB2YWx1ZSBpZiBvbmUgZXhpc3RzIGFscmVhZHkuPC9kaXY+Ci0gIDwvYmxvY2txdW90ZT4KLSAgPGRpdj4gCi0gICAgPGhyIHNpemU9IjEiPgotICAgIDxwcmU+Ym9vbGVhbiBpc1NldEZvbygpCi12b2lkIHVuU2V0Rm9vKCk8L3ByZT4KLSAgPC9kaXY+Ci0gIDxibG9ja3F1b3RlPiAKLSAgICA8ZGl2PkRldGVybWluZXMgd2hldGhlciB0aGUgRm9vIGVsZW1lbnQgb3IgYXR0cmlidXRlIGV4aXN0cyBpbiB0aGUgZG9jdW1lbnQ7IAotICAgICAgcmVtb3ZlcyBGb28uIFRoZXNlIG1ldGhvZHMgYXJlIGdlbmVyYXRlZCBmb3IgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMgdGhhdCAKLSAgICAgIGFyZSBvcHRpb25hbC4gSW4gc2NoZW1hLCBhbmQgb3B0aW9uYWwgZWxlbWVudCBoYXMgYW4gPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPm1pbk9jY3Vyczwvc3Bhbj4gCi0gICAgICBhdHRyaWJ1dGUgc2V0IHRvICZxdW90OzAmcXVvdDs7IGFuIG9wdGlvbmFsIGF0dHJpYnV0ZSBoYXMgYSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+dXNlPC9zcGFuPiAKLSAgICAgIGF0dHJpYnV0ZSBzZXQgdG8gJnF1b3Q7b3B0aW9uYWwmcXVvdDsuPC9kaXY+Ci0gIDwvYmxvY2txdW90ZT4KLSAgPGRpdj4gCi0gICAgPGhyIHNpemU9IjEiPgotICAgIDxoMz5NdWx0aXBsZSBPY2N1cnJlbmNlIE1ldGhvZHM8L2gzPgotICAgIDxwPk1ldGhvZHMgZ2VuZXJhdGVkIGZvciBlbGVtZW50cyB0aGF0IGFsbG93IG11bHRpcGxlIG9jY3VycmVuY2VzLiA8L3A+Ci0gICAgPHA+QW4gZWxlbWVudCBtYXkgb2NjdXIgbXVsdGlwbGUgdGltZXMgaWYgaXQgaGFzIGEgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPm1heE9jY3Vyczwvc3Bhbj4gCi0gICAgICBhdHRyaWJ1dGUgc2V0IHRvICZxdW90O3VuYm91bmRlZCZxdW90OyBvciBncmVhdGVyIHRoYW4gMS4gQXR0cmlidXRlcyBjYW4ndCAKLSAgICAgIG9jY3VyIG11bHRpcGxlIHRpbWVzLjwvcD4KLSAgICA8cHJlPlR5cGVbXSBnZXRGb29BcnJheSgpCi12b2lkIHNldEZvb0FycmF5KFR5cGVbXSBuZXdWYWx1ZSkgPC9wcmU+Ci0gIDwvZGl2PgotICA8YmxvY2txdW90ZT4gCi0gICAgPGRpdj5SZXR1cm5zIG9yIHNldHMgYWxsIG9mIHRoZSBGb28gZWxlbWVudHMuIDwvZGl2PgotICAgIDxkaXY+IAotICAgICAgPHByZT4KLS8vIEdldCBhbiBhcnJheSBvZiB0aGUgYWxsIG9mIHRoZSBwdXJjaGFzZS1vcmRlciBlbGVtZW50cyBpdGVtIGNoaWxkcmVuLgotSXRlbVtdIGl0ZW1zID0gbXlQTy5nZXRJdGVtQXJyYXkoKTsKLTwvcHJlPgotICAgIDwvZGl2PgotICA8L2Jsb2NrcXVvdGU+Ci0gIDxkaXY+IAotICAgIDxociBzaXplPSIxIj4KLSAgICA8cHJlPlR5cGUgZ2V0Rm9vQXJyYXkoaW50IGluZGV4KQotdm9pZCBzZXRGb29BcnJheShUeXBlIG5ld1ZhbHVlLCBpbnQgaW5kZXgpPC9wcmU+Ci0gIDwvZGl2PgotICA8YmxvY2txdW90ZT4gCi0gICAgPGRpdj5SZXR1cm5zIG9yIHNldHMgdGhlIEZvbyBjaGlsZCBlbGVtZW50IGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguPC9kaXY+Ci0gICAgPGRpdj4gCi0gICAgICA8cHJlPi8vIFNldHMgdGhlIHZhbHVlIG9mIHRoZSB0aGlyZCBpdGVtIGNoaWxkIGVsZW1lbnQuCi1teVBPLnNldEl0ZW0obmV3SXRlbSwgMik7PC9wcmU+Ci0gICAgPC9kaXY+Ci0gIDwvYmxvY2txdW90ZT4KLSAgPGRpdj4gCi0gICAgPGhyIHNpemU9IjEiPgotICAgIDxwcmU+aW50IHNpemVPZkZvb0FycmF5KCk8L3ByZT4KLSAgPC9kaXY+Ci0gIDxibG9ja3F1b3RlPiAKLSAgICA8ZGl2PlJldHVybnMgdGhlIG51bWJlciBvZiBGb28gY2hpbGQgZWxlbWVudHMuPC9kaXY+Ci0gICAgPGRpdj4gCi0gICAgICA8cHJlPi8vIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtIGNoaWxkIGVsZW1lbnRzLgotaW50IGl0ZW1Db3VudCA9IG15UE8uc2l6ZU9mSXRlbUFycmF5KCk7PC9wcmU+Ci0gICAgPC9kaXY+Ci0gIDwvYmxvY2txdW90ZT4KLSAgPGRpdj4gCi0gICAgPGhyIHNpemU9IjEiPgotICAgIDxwcmU+dm9pZCByZW1vdmVGb28oaW50IGluZGV4KTwvcHJlPgotICA8L2Rpdj4KLSAgPGJsb2NrcXVvdGU+IAotICAgIDxkaXY+UmVtb3ZlcyB0aGUgRm9vIGNoaWxkIGVsZW1lbnQgYXQgdGhlIHNwZWNpZmllZCBpbmRleC48L2Rpdj4KLSAgPC9ibG9ja3F1b3RlPgotICA8ZGl2PiAKLSAgICA8aHIgc2l6ZT0iMSI+Ci0gICAgPHByZT5YbWxUeXBlW10geGdldEZvb0FycmF5KCkKLXZvaWQgeHNldEZvb0FycmF5KFhtbFR5cGVbXSBhcnJheU9mTmV3VmFsdWVzKTwvcHJlPgotICA8L2Rpdj4KLSAgPGJsb2NrcXVvdGU+IAotICAgIDxkaXY+UmV0dXJucyBvciBzZXRzIGFsbCBvZiB0aGUgRm9vIGVsZW1lbnRzIGFzIFhNTEJlYW5zIHNpbXBsZSB0eXBlcy4gR2VuZXJhdGVkIAotICAgICAgb25seSB3aGVuIHRoZSBGb28gZWxlbWVudCBpcyBkZWZpbmVkIGFzIGEgc2ltcGxlIHR5cGUuPC9kaXY+Ci0gICAgPGRpdj4gCi0gICAgICA8cHJlPi8qCi0gKiBSZXR1cm5zIHZhbHVlcyBvZiBhbGwgdGhlIHBob25lIGNoaWxkIGVsZW1lbnRzIG9mIGFuIGVtcGxveWVlIGVsZW1lbnQsCi0gKiB3aGVyZSB0aGUgcGhvbmUgZWxlbWVudCBoYXMgYmVlbiBkZWZpbmVkIGFzIHhzOnN0cmluZy4KLSAqLwotWG1sU3RyaW5nW10gZW1wUGhvbmVzID0gY3VycmVudEVtcGxveWVlLnhHZXRQaG9uZUFycmF5KCk7Ci08L3ByZT4KLSAgICA8L2Rpdj4KLSAgPC9ibG9ja3F1b3RlPgotICA8ZGl2PiAKLSAgICA8aHIgc2l6ZT0iMSI+Ci0gICAgPHByZT5YbWxUeXBlIHhnZXRGb29BcnJheShpbnQgaW5kZXgpCi12b2lkIHhzZXRGb29BcnJheShpbnQgaW5kZXgsIFhtbFR5cGUgbmV3VmFsdWUpPC9wcmU+Ci0gIDwvZGl2PgotICA8YmxvY2txdW90ZT4gCi0gICAgPGRpdj5SZXR1cm5zIG9yIHNldHMgdGhlIEZvbyBlbGVtZW50IGF0IHRoZSBzcGVjaWZpZWQgaW5kZXgsIHVzaW5nIGFuIFhNTEJlYW5zIAotICAgICAgc2ltcGxlIHR5cGUgdmFsdWUuIEdlbmVyYXRlZCBmb3IgYW4gZWxlbWVudCBkZWZpbmVkIGFzIGEgc2ltcGxlIHR5cGUgaW4gCi0gICAgICBzY2hlbWEuPC9kaXY+Ci0gIDwvYmxvY2txdW90ZT4KLSAgPGRpdj4gCi0gICAgPGhyIHNpemU9IjEiPgotICAgIDxwcmU+dm9pZCBpbnNlcnRGb28oaW50IGluZGV4LCBGb29UeXBlIG5ld1ZhbHVlKTwvcHJlPgotICA8L2Rpdj4KLSAgPGJsb2NrcXVvdGU+IAotICAgIDxkaXY+SW5zZXJ0cyB0aGUgc3BlY2lmaWVkIEZvbyBjaGlsZCBlbGVtZW50IGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguPC9kaXY+Ci0gIDwvYmxvY2txdW90ZT4KLSAgPGRpdj4gCi0gICAgPGhyIHNpemU9IjEiPgotICAgIDxwcmU+dm9pZCBhZGRGb28oRm9vVHlwZSBuZXdWYWx1ZSk8L3ByZT4KLSAgPC9kaXY+Ci0gIDxibG9ja3F1b3RlPiAKLSAgICA8ZGl2PkFkZHMgdGhlIHNwZWNpZmllZCBGb28gdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCBvZiBGb28gY2hpbGQgZWxlbWVudHMuPC9kaXY+Ci0gIDwvYmxvY2txdW90ZT4KLSAgPGRpdj4gCi0gICAgPGhyIHNpemU9IjEiPgotICAgIDxwcmU+WG1sVHlwZSBpbnNlcnROZXdGb28oaW50IGluZGV4KTwvcHJlPgotICA8L2Rpdj4KLSAgPGJsb2NrcXVvdGU+IAotICAgIDxkaXY+SW5zZXJ0cyBhIG5ldyBGb28gYXQgdGhlIHNwZWNpZmllZCBpbmRleCwgcmV0dXJuaW5nIGFuIFhNTEJlYW5zIHNpbXBsZSAKLSAgICAgIHR5cGUgcmVwcmVzZW50aW5nIHRoZSBuZXcgZWxlbWVudDsgcmV0dXJucyB0aGUgZXhpc3RpbmcgRm9vIGlmIHRoZXJlJ3MgYWxyZWFkeSAKLSAgICAgIG9uZSBhdCBpbmRleC48L2Rpdj4KLSAgPC9ibG9ja3F1b3RlPgotICA8ZGl2PiAKLSAgICA8aHIgc2l6ZT0iMSI+Ci0gICAgPHByZT5YbWxUeXBlIGFkZE5ld0ZvbygpPC9wcmU+Ci0gIDwvZGl2PgotICA8YmxvY2txdW90ZT4gCi0gICAgPGRpdj5BZGRzIGEgbmV3IEZvbyBlbGVtZW50IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3Qgb2YgRm9vIGNoaWxkIGVsZW1lbnRzLCAKLSAgICAgIHJldHVybmluZyBhbiBYTUxCZWFucyBzaW1wbGUgdHlwZSByZXByZXNlbnRpbmcgdGhlIG5ld2x5IGFkZGVkIGVsZW1lbnQuPC9kaXY+Ci0gIDwvYmxvY2txdW90ZT4KLSAgPGRpdj4gCi0gICAgPGhyIHNpemU9IjEiPgotICAgIDxwcmU+Ym9vbGVhbiBpc05pbEZvb0FycmF5KGludCBpbmRleCkKLXZvaWQgc2V0TmlsRm9vQXJyYXkoaW50IGluZGV4KTwvcHJlPgotICA8L2Rpdj4KLSAgPGJsb2NrcXVvdGU+IAotICAgIDxkaXY+RGV0ZXJtaW5lcyBvciBzcGVjaWZpZXMgd2hldGhlciB0aGUgRm9vIGVsZW1lbnQgYXQgdGhlIHNwZWNpZmllZCBpbmRleCAKLSAgICAgIGlzIG5pbC48L2Rpdj4KLSAgPC9ibG9ja3F1b3RlPgotICA8ZGl2PiAKLSAgICA8aHIgc2l6ZT0iMSI+Ci0gIDwvZGl2PgotICA8ZGl2IGlkPSJ0b3BpY3RleHQiPjwvZGl2PgotICA8cCBjbGFzcz1yZWxhdGVkdG9waWNzPlJlbGF0ZWQgVG9waWNzPC9wPgotICA8cD48YSBocmVmPSJjb25KYXZhVHlwZXNHZW5lcmF0ZWRGcm9tVXNlckRlcml2ZWQuaHRtbCI+SmF2YSBUeXBlcyBHZW5lcmF0ZWQgCi0gICAgZnJvbSBVc2VyLURlcml2ZWQgU2NoZW1hIFR5cGVzPC9hPjwvcD4KLTwvZGl2PgotPCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+Ci0KLTwvc2NyaXB0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvZ3VpZGUvY29uTmF2aWdhdGluZ1hNTHdpdGhDdXJzb3JzLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9ndWlkZS9jb25OYXZpZ2F0aW5nWE1Md2l0aEN1cnNvcnMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVlNDE0YS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9ndWlkZS9jb25OYXZpZ2F0aW5nWE1Md2l0aEN1cnNvcnMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwOSArMCwwIEBACi08IWRvY3R5cGUgSFRNTCBwdWJsaWMgIi0vL1czQy8vRFREIEhUTUwgNC4wIEZyYW1lc2V0Ly9FTiI+Ci0KLTxodG1sPgotPGhlYWQ+Ci08IS0tIEluc3RhbmNlQmVnaW5FZGl0YWJsZSBuYW1lPSJkb2N0aXRsZSIgLS0+Ci08dGl0bGU+TmF2aWdhdGluZyBYTUwgd2l0aCBDdXJzb3JzPC90aXRsZT4KLTwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4gCi08IS0tKE1ldGEpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPgotCi08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9JENIQVJTRVQ7Ij4KLQotCi08IS0tIEluc3RhbmNlQmVnaW5FZGl0YWJsZSBuYW1lPSJtZXRhdGFncyIgLS0+Ci0KLTxtZXRhIGNvbnRlbnQ9InlvdXIgbmFtZSIgbmFtZT0iYXV0aG9yIj4KLTxtZXRhIGNvbnRlbnQ9IkEgZGVzY3JpcHRpb24gb2YgdGhlIHRvcGljIGNvbnRlbnRzLiIgbmFtZT0iZGVzY3JpcHRpb24iPgotPG1ldGEgY29udGVudD0ia2V5d29yZHMgdG8gaGVscCBpbiBzZWFyY2hlcyIgbmFtZT0ia2V5d29yZHMiPgotPG1ldGEgY29udGVudD0iMTAvMjUvMDIiIG5hbWU9ImRhdGUgbGFzdCBtb2RpZmllZCI+Ci08IS0tIEluc3RhbmNlRW5kRWRpdGFibGUgLS0+Ci0KLTwhLS0oTGlua3MpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+Ci08IS0tIEluc3RhbmNlQmVnaW5FZGl0YWJsZSBuYW1lPSJoZWFkIiAtLT4gCi08bGluayBocmVmPSIuLi94bWxiZWFucy5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgotPCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPgotPGxpbmsgaHJlZj0iLi4veG1sYmVhbnMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4KLTxhIGhyZWY9Ii4uLy4uLy4uL2NvcmUvaW5kZXguaHRtbCIgaWQ9ImluZGV4Ij48L2E+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiBzcmM9Ii4uLy4uLy4uL2NvcmUvdG9waWNJbmZvLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHNyYz0iLi4vLi4vLi4vY29yZS9Db29raWVDbGFzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiBzcmM9Ii4uLy4uLy4uL2NvcmUvZGlzcGxheUNvbnRlbnQuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotCi08IS0tKEJvZHkpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPgotPGJvZHk+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KLQotPC9zY3JpcHQ+Ci08IS0tIEluc3RhbmNlQmVnaW5FZGl0YWJsZSBuYW1lPSJib2R5IiAtLT4gCi08aDE+IE5hdmlnYXRpbmcgWE1MIHdpdGggQ3Vyc29ycyA8L2gxPgotPGRpdiBpZD0idG9waWN0ZXh0Ij4gCi0gIDxwPlhNTCBjdXJzb3JzIGFyZSBhIHdheSB0byBuYXZpZ2F0ZSB0aHJvdWdoIGFuIFhNTCBpbnN0YW5jZSBkb2N1bWVudC4gT25jZSAKLSAgICB5b3UgbG9hZCBhbiBYTUwgZG9jdW1lbnQsIHlvdSBjYW4gY3JlYXRlIGEgY3Vyc29yIHRvIHJlcHJlc2VudCBhIHNwZWNpZmljIAotICAgIHBsYWNlIGluIHRoZSBYTUwuIEJlY2F1c2UgeW91IGNhbiB1c2UgYSBjdXJzb3Igd2l0aCBvciB3aXRob3V0IGEgc2NoZW1hIGNvcnJlc3BvbmRpbmcgCi0gICAgdG8gdGhlIFhNTCwgY3Vyc29ycyBhcmUgYW4gaWRlYWwgd2F5IHRvIGhhbmRsZSBYTUwgd2l0aG91dCBhIHNjaGVtYS48L3A+Ci0gIDxwPldpdGggYW4gWE1MIGN1cnNvciwgeW91IGNhbjo8L3A+Ci08L2Rpdj4KLTxVTD4KLSAgPGxpPiAKLSAgICA8ZGl2PjxhIGhyZWY9ImNvblVuZGVyc3RhbmRpbmdYTUxUb2tlbnMuaHRtbCI+VXNlIHRoZSB0b2tlbiBtb2RlbDwvYT4gdG8gbW92ZSAKLSAgICAgIHRocm91Z2ggWE1MIGluIHNtYWxsIGluY3JlbWVudHMsIG9yIGluIGEgbWFubmVyIHNpbWlsYXIgdG8gdXNpbmcgYSBET00tYmFzZWQgCi0gICAgICBtb2RlbC48L2Rpdj4KLSAgPExJPiAKLSAgICA8RElWPkdldCBhbmQgc2V0IHZhbHVlcyB3aXRoaW4gdGhlIFhNTC48L0RJVj4KLSAgPExJPiAKLSAgICA8RElWPjxhIGhyZWY9IiNhZGRpbmdfZWxlbWVudHNfYXR0cmlidXRlcyI+Q2hhbmdlIHRoZSBzdHJ1Y3R1cmU8L2E+IG9mIGFuIAotICAgICAgWE1MIGRvY3VtZW50IGJ5IGluc2VydGluZywgcmVtb3ZpbmcsIGFuZCBtb3ZpbmcgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMuPC9ESVY+Ci0gIDxMST4gCi0gICAgPERJVj48YSBocmVmPSJjb25TZWxlY3RpbmdYTUx3aXRoWFF1ZXJ5UGF0aFhQYXRoLmh0bWwiPkV4ZWN1dGUgWFF1ZXJ5IGV4cHJlc3Npb25zPC9hPiAKLSAgICAgIGFnYWluc3QgdGhlIFhNTCByZXByZXNlbnRlZCBieSB0aGUgY3Vyc29yLjwvRElWPgotICA8TEk+IAotICAgIDxESVY+PGEgaHJlZj0iY29uVXNpbmdCb29rbWFya3NUb0Fubm90YXRlWE1MLmh0bWwiPkluc2VydCBib29rbWFya3M8L2E+IHRvIAotICAgICAgbWFyayBsb2NhdGlvbnMgaW4gWE1MLjwvRElWPgotPC9VTD4KLTxQPldoZW4geW91J3JlIGZpbmlzaGVkIHVzaW5nIGEgY3Vyc29yLCB5b3VyIGNvZGUgc2hvdWxkIGNhbGwgaXRzIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5kaXNwb3NlPC9zcGFuPiAKLSAgbWV0aG9kLjwvUD4KLTxoMj5DcmVhdGluZyBhbmQgTW92aW5nIGEgQ3Vyc29yPC9oMj4KLTxQPldpdGggYW4gWE1MIGluc3RhbmNlIGRvY3VtZW50IGJvdW5kIHRvIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9hPjwvc3Bhbj4gCi0gIChvciBhIHR5cGUgaW5oZXJpdGluZyBmcm9tIGl0KSwgeW91IGNyZWF0ZSBhIG5ldyBjdXJzb3IgYnkgY2FsbGluZyB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPm5ld0N1cnNvcjwvc3Bhbj4gCi0gIG1ldGhvZC4gVGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9hPjwvc3Bhbj4gCi0gIGludGVyZmFjZSByZXByZXNlbnRzIGEgY3Vyc29yLiBGcm9tIGEgY3Vyc29yIHN0YW5kcG9pbnQsIGFuIFhNTCBkb2N1bWVudCBpcyAKLSAgYSBjb2xsZWN0aW9uIG9mIDxFTT50b2tlbnM8L0VNPiB0aGF0IHJlcHJlc2VudCB0aGUga2luZHMgb2YgdGhpbmdzIHRoYXQgY2FuIAotICBhcHBlYXIgaW4gWE1MLiBUaGVzZSBpbmNsdWRlJm5ic3A7YXR0cmlidXRlcywgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgZWxlbWVudHMsIAotICBjb21tZW50cywgYW5kIHNvIG9uLiZuYnNwO0VhY2ggcGllY2Ugb2YgaW5mb3JtYXRpb24gaW4gWE1MIGlzIHJlcHJlc2VudGVkIGJ5IAotICBhIDxlbT50b2tlbiB0eXBlPC9lbT4uPC9QPgotPFAgY2xhc3M9Im5vdGVwYXJhIj48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IEZvciBhIG1vcmUgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgCi0gIFhNTCB0b2tlbnMsIHNlZSA8YSBocmVmPSJjb25VbmRlcnN0YW5kaW5nWE1MVG9rZW5zLmh0bWwiPlVuZGVyc3RhbmRpbmcgWE1MIFRva2VuczwvYT4uPC9QPgotPFA+Rm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZSBsb2FkcyB0aGUmbmJzcDtYTUwgaW5zdGFuY2UgZGVzY3JpYmVkIGFib3ZlIAotICBmcm9tIGEgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPkZpbGU8L3NwYW4+IG9iamVjdCwgdGhlbiBjcmVhdGVzIGEgbmV3IGN1cnNvci4gCi0gIFRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+dG9GaXJzdENoaWxkPC9zcGFuPiB0YWtlcyB0aGUgY3Vyc29yIHRvIHRoZSBzdGFydCAKLSAgdGFnIG9mIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+YmF0Y2hXaWRnZXRPcmRlcjwvc3Bhbj4gZG9jdW1lbnQgZWxlbWVudC4gCi0gIFRoZSBjb2RlIHRoZW4gcHJpbnRzIHRoZSB0eXBlIGZvciB0aGUgdG9rZW4gYXQgdGhlIGN1cnNvcidzIGxvY2F0aW9uLCBhbG9uZyAKLSAgd2l0aCB0aGUgWE1MIHRoZSBjdXJzb3IgcmVwcmVzZW50c5dpbiBvdGhlciB3b3JkcywgPHNwYW4gY2xhc3M9ImZpbGVwYXRoIj5Ub2tlbiAKLSAgdHlwZTogU1RBUlQgLzwvc3Bhbj4gYW5kIHRoZSA8c3BhbiBjbGFzcz0iZmlsZXBhdGgiPmJhdGNoV2lkZ2V0T3JkZXJFbGVtZW50PC9zcGFuPiAKLSAgYW5kIGl0cyBjb250ZW50cy48L1A+Ci08cHJlPnB1YmxpYyBzdGF0aWMgdm9pZCBpbnNlcnRDdXJzb3IoRmlsZSBvcmRlckZpbGUpIHRocm93cyBFeGNlcHRpb24gCi17Ci0gICAgQmF0Y2hXaWRnZXRPcmRlckRvY3VtZW50IHhtbERvYyA9IEJhdGNoV2lkZ2V0T3JkZXJEb2N1bWVudC5GYWN0b3J5LnBhcnNlKG9yZGVyRmlsZSk7Ci0gICAgWG1sQ3Vyc29yIG9yZGVyQ3Vyc29yID0geG1sRG9jLm5ld0N1cnNvcigpOwotICAgIG9yZGVyQ3Vyc29yLnRvRmlyc3RDaGlsZCgpOwotICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVG9rZW4gdHlwZTogIiArIG9yZGVyQ3Vyc29yLmN1cnJlbnRUb2tlblR5cGUoKSArCi0gICAgICAgICIgLyAiICsgb3JkZXJDdXJzb3IueG1sVGV4dCgpKTsKLX0KLTwvcHJlPgotPHAgY2xhc3M9Im5vdGVwYXJhIj48U1RST05HPk5vdGU8L1NUUk9ORz46IFRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sQ3Vyc29yPC9zcGFuPiAKLSAgaW50ZXJmYWNlIHByb3ZpZGVzIG1hbnkgbWV0aG9kcyB5b3UgY2FuIHVzZSB0byBwdXQgYSBjdXJzb3Igd2hlcmUgeW91IHdhbnQgaXQuIAotICBGb3IgYSBsaXN0IG9mIHRob3NlIG1ldGhvZHMsIHNlZSA8YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yIAotICBJbnRlcmZhY2U8L2E+LjwvcD4KLTxoMj48YSBuYW1lPSJhZGRpbmdfZWxlbWVudHNfYXR0cmlidXRlcyIgaWQ9ImFkZGluZ19lbGVtZW50c19hdHRyaWJ1dGVzIj48L2E+QWRkaW5nIAotICBFbGVtZW50cyBhbmQgQXR0cmlidXRlczwvaDI+Ci08cD5UaGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlhtbEN1cnNvcjwvc3Bhbj4gaW50ZXJmYWNlIHByb3ZpZGVzIHNldmVyYWwgbWV0aG9kcyAKLSAgeW91IGNhbiB1c2UgdG8gYWRkIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzIHRvIFhNTC4gPC9wPgotPHA+T25lIHdheSB0byBhZGQgbmV3IFhNTCBpcyB3aXRoIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+YmVnaW5FbGVtZW50PC9zcGFuPiAKLSAgbWV0aG9kLiBUaGlzIG1ldGhvZCBpcyBkZXNpZ25lZCB0byBpbnNlcnQgYSBuZXcgZWxlbWVudCBhdCB0aGUgY3Vyc29yJ3MgbG9jYXRpb24sIAotICBhbmQgZG8gaXQgc28gdGhlIGN1cnNvciBlbmRzIHVwIGJldHdlZW4gdGhlIG5ldyBlbGVtZW50J3MgU1RBUlQgYW5kIEVORCB0b2tlbnMuIAotICBGcm9tIHRoaXMgcG9zaXRpb24sIHlvdSBjYW4gaW5zZXJ0IGF0dHJpYnV0ZXMgKHRoZXkncmUgYXV0b21hdGljYWxseSBwbGFjZWQgCi0gIGluIHRoZSBzdGFydCB0YWcsIHdoZXJlIHRoZXkgYmVsb25nKSBhbmQgaW5zZXJ0IGEgdmFsdWUuIEhlcmUncyBhbiBleGFtcGxlOjwvcD4KLTxwcmU+Ci0vLyBDcmVhdGUgYSBuZXcgY2h1bmsgb2YgWE1MLgotWG1sT2JqZWN0IG5ld1htbCA9IFhtbE9iamVjdC5GYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0vKiAKLSAqIEluc2VydCBhIG5ldyBjdXJzb3IgYW5kIG1vdmUgaXQgdG8gdGhlIGZpcnN0IFNUQVJUIHRva2VuICh3aGVyZSB0aGUKLSAqIFhNTCBhY3R1YWxseSBiZWdpbnMuCi0gKi8KLVhtbEN1cnNvciBjdXJzb3IgPSBuZXdYbWwubmV3Q3Vyc29yKCk7Ci1jdXJzb3IudG9OZXh0VG9rZW4oKTsKLS8vIEJlZ2luIGEgbmV3IGl0ZW0gZWxlbWVudCB3aG9zZSBuYW1lc3BhY2UgVVJJIGlzICJodHRwOi8vb3BlbnVyaS5vcmciLgotY3Vyc29yLmJlZ2luRWxlbWVudCgmcXVvdDtpdGVtJnF1b3Q7LCAmcXVvdDtodHRwOi8vb3BlbnVyaS5vcmcvJnF1b3Q7KTsKLS8vIEluc2VydCBhbiBJRCBhdHRyaWJ1dGUgb24gdGhlIGl0ZW0gZWxlbWVudCwgYWxvbmcgd2l0aCBhbiBhdHRyaWJ1dGUgdmFsdWUuCi1jdXJzb3IuaW5zZXJ0QXR0cmlidXRlV2l0aFZhbHVlKCZxdW90O2lkJnF1b3Q7LCAmcXVvdDs0MDU2NDA0JnF1b3Q7KTsKLS8vIEluc2VydCAiYmljeWNsZSIgYXMgYW4gZWxlbWVudCB2YWx1ZS4KLWN1cnNvci5pbnNlcnRDaGFycygmcXVvdDtiaWN5Y2xlJnF1b3Q7KTsKLWN1cnNvci5kaXNwb3NlKCk7Ci08L3ByZT4KLTxwPlRoaXMgZXhhbXBsZSByZXN1bHRzIGluIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmc6PC9wPgotPHByZT4mbHQ7bnMxOml0ZW0gaWQ9JnF1b3Q7NDA1NjQwNCZxdW90OyB4bWxuczpuczE9JnF1b3Q7aHR0cDovL29wZW51cmkub3JnLyZxdW90OyZndDtiaWN5Y2xlJmx0Oy9uczE6aXRlbSZndDsKLTwvcHJlPgotPGgyPiBVc2luZyBTdG9yZWQgQ3Vyc29yIExvY2F0aW9ucyB3aXRoIHB1c2goKSBhbmQgcG9wKCk8L2gyPgotPGRpdiBpZD0idG9waWN0ZXh0Ij4gCi0gIDxwPldoZW4geW91IHdhbnQgdG8gbW92ZSBhIGN1cnNvciBhcm91bmQsIGJ1dCB3YW50IHRvIGtlZXAgdHJhY2sgb2YgYSBmb3JtZXIgCi0gICAgbG9jYXRpb24sIHlvdSBjYW4gdXNlIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sQ3Vyc29yPC9zcGFuPiBpbnRlcmZhY2UncyAKLSAgICA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+cHVzaDwvc3Bhbj4gYW5kIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5wb3A8L3NwYW4+IAotICAgIG1ldGhvZHMuIFRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+cHVzaDwvc3Bhbj4gbWV0aG9kIHB1c2hlcyB0aGUgY3Vyc29yJ3MgCi0gICAgY3VycmVudCBsb2NhdGlvbiBvbnRvIGEgc3RhY2sgb2YgbG9jYXRpb25zIG1haW50YWluZWQgZm9yIHRoYXQgcGFydGljdWxhciAKLSAgICBjdXJzb3I7IHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+cG9wPC9zcGFuPiBtZXRob2QgcmVtb3ZlcyB0aGUgbG9jYXRpb24gCi0gICAgZnJvbSB0aGUgdG9wIG9mIHRoZSBzdGFjayBhbmQgbW92ZXMgdGhlIGN1cnNvciB0byB0aGF0IGxvY2F0aW9uLjwvcD4KLSAgPHA+Rm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgJmx0O2VtcGxveWVlJmd0OyBlbGVtZW50LCB1c2VkIGluIHRoZSAKLSAgICBleGFtcGxlIGJlbG93LjwvcD4KLSAgPHByZT4KLSZsdDtlbXBsb3llZSZndDsKLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZsdDtuYW1lJmd0O0dsYWR5cyBLcmF2aXR6Jmx0Oy9uYW1lJmd0OwotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jmx0O2FkZHJlc3MgbG9jYXRpb249JnF1b3Q7aG9tZSZxdW90OyZndDsKLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZsdDtzdHJlZXQmZ3Q7MTMxMyBNb2NraW5nYmlyZCBMYW5lJmx0Oy9zdHJlZXQmZ3Q7Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7Y2l0eSZndDtTZWF0dGxlJmx0Oy9jaXR5Jmd0OwotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jmx0O3N0YXRlJmd0O1dBJmx0Oy9zdGF0ZSZndDsKLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZsdDt6aXAmZ3Q7OTgxMTUmbHQ7L3ppcCZndDsKLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZsdDsvYWRkcmVzcyZndDsKLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZsdDthZGRyZXNzIGxvY2F0aW9uPSZxdW90O3dvcmsmcXVvdDsmZ3Q7Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7c3RyZWV0Jmd0OzIwMTEgMTUybmQgQXZlbnVlIE5FJmx0Oy9zdHJlZXQmZ3Q7Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7Y2l0eSZndDtSZWRtb25kJmx0Oy9jaXR5Jmd0OwotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jmx0O3N0YXRlJmd0O1dBJmx0Oy9zdGF0ZSZndDsKLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZsdDt6aXAmZ3Q7OTgwNTImbHQ7L3ppcCZndDsKLSZuYnNwOyZuYnNwOyAmbmJzcDsmbHQ7L2FkZHJlc3MmZ3Q7Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7cGhvbmUgbG9jYXRpb249JnF1b3Q7d29yayZxdW90OyZndDsoNDI1KSA1NTUtNjg5NyZsdDsvcGhvbmUmZ3Q7Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7cGhvbmUgbG9jYXRpb249JnF1b3Q7aG9tZSZxdW90OyZndDsoMjA2KSA1NTUtNjU5NCZsdDsvcGhvbmUmZ3Q7Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbHQ7cGhvbmUgbG9jYXRpb249JnF1b3Q7bW9iaWxlJnF1b3Q7Jmd0OygyMDYpIDU1NS03ODk0Jmx0Oy9waG9uZSZndDsKLSZsdDsvZW1wbG95ZWUmZ3Q7Ci08L3ByZT4KLSAgPHA+VGhlIGZvbGxvd2luZyBKYXZhIGNvZGUgaWxsdXN0cmF0ZXMgaG93IHlvdSBjYW4gdXNlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5wdXNoPC9zcGFuPiAKLSAgICBhbmQgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnBvcDwvc3Bhbj4gdG8gcHV0IHRoZSBjdXJzb3IgYmFjayB0byBhIHNhdmVkIAotICAgIGxvY2F0aW9uIGFmdGVyIGEgYml0IG9mIHRyYXZlbGluZy48L3A+Ci0gIDxwcmU+Ci0vKioKLSAqIFBhc3MgdG8gdGhlIHRyeVNlbGVjdFBhdGggbWV0aG9kIGFuIFhtbE9iamVjdCBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zCi0gKiB0aGUgWE1MIGFib3ZlLgotICovCi1wdWJsaWMgdm9pZCB0cnlTZWxlY3RQYXRoKFhtbE9iamVjdCB4bWwpCi17Ci0gICAgLyogCi0gICAgICogSW5zZXJ0cyB0aGUgY3Vyc29yIGF0IHRoZSBTVEFSVERPQyB0b2tlbiAodGhlIHZlcnkgYmVnaW5uaW5nLCAKLSAgICAgKiBiZWZvcmUgYW55IGVsZW1lbnRzKS4KLSAgICAgKi8KLSAgICBYbWxDdXJzb3IgY3Vyc29yID0geG1sLm5ld0N1cnNvcigpOwotICAgIC8vIE1vdmVzIHRoZSBjdXJzb3IgdG8ganVzdCBiZWZvcmUgJmx0O2VtcGxveWVlJmd0OwotICAgIGN1cnNvci50b0ZpcnN0Q2hpbGQoKTsKLSAgICAvLyBQdXNoZXMgdGhlIGN1cnNvcidzIGN1cnJlbnQgbG9jYXRpb24gb250byB0aGUgc3RhY2suCi0gICAgY3Vyc29yLnB1c2goKTsKLSAgICAvLyBNb3ZlcyB0aGUgY3Vyc29yIHRvIGp1c3QgYmVmb3JlIHRoZSAmcXVvdDt3b3JrJnF1b3Q7ICZsdDtwaG9uZSZndDsgZWxlbWVudC4gICAgICAKLSAgICBjdXJzb3IudG9DaGlsZCgyKTsKLSAgICAvLyBNb3ZlcyB0aGUgY3Vyc29yIHRvIGp1c3QgYmVmb3JlIHRoZSAmcXVvdDtob21lJnF1b3Q7ICZsdDtwaG9uZSZndDsgZWxlbWVudC4KLSAgICBjdXJzb3IudG9OZXh0U2libGluZygpOwotICAgIC8vIE1vdmVzIHRoZSBjdXJzb3IgYmFjayB0byBqdXN0IGJlZm9yZSAmbHQ7ZW1wbG95ZWUmZ3Q7Ci0gICAgY3Vyc29yLnBvcCgpOwotfQotPC9wcmU+Ci0gIDxwPk9mIGNvdXJzZSwgeW91IGNhbiBjYWxsIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5wdXNoPC9zcGFuPiBhbmQgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnBvcDwvc3Bhbj4gCi0gICAgbXVsdGlwbGUgdGltZXMuIEVhY2ggbmV3IGNhbGwgdG8gdGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5wdXNoPC9zcGFuPiAKLSAgICBtZXRob2QgcHVzaGVzIHRoZSBjdXJyZW50IGxvY2F0aW9uIG9udG8gdGhlIHN0YWNrLiBBcyB5b3UgY2FsbCB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnBvcDwvc3Bhbj4gCi0gICAgbWV0aG9kLCB5b3UncmUgYWx3YXlzIGdldHRpbmcgd2hhdCdzIG9uIHRvcCBvZiB0aGUgc3RhY2suIFNvIGlmIHlvdSBjYWxsZWQgCi0gICAgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnB1c2g8L3NwYW4+IHRocmVlIHRpbWVzIGJlZm9yZSBjYWxsaW5nIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5wb3A8L3NwYW4+IAotICAgICYjODIxMjsgMSwgMiwgMyAmIzgyMTI7IGNhbGxpbmcgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnBvcDwvc3Bhbj4gdGhyZWUgCi0gICAgdGltZXMgd291bGQgZ2V0IHRob3NlIGxvY2F0aW9ucyBpbiByZXZlcnNlIG9yZGVyICYjODIxMjsgMywgMiwgMS48L3A+Ci0gIDxwPlRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+cHVzaDwvc3Bhbj4gYW5kIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5wb3A8L3NwYW4+IAotICAgIG1ldGhvZHMgY2FuIGJlIGhhbmR5IGFzIGFuIGFsdGVybmF0aXZlIHRvIGNyZWF0aW5nIG5ldyBjdXJzb3JzIHRoYXQgYXJlIGRlc2lnbmVkIAotICAgIHNpbXBseSB0byBtYXJrIGEgcGFydGljdWxhciBsb2NhdGlvbiB3aGlsZSB5b3UgbW92ZSBhbm90aGVyIGN1cnNvciBhcm91bmQuIAotICAgIFRoZSByZXNvdXJjZXMgcmVxdWlyZWQgdG8gbWFpbnRhaW4gYSBsb2NhdGlvbiBzdGFjayB0aHJvdWdoIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5wdXNoPC9zcGFuPiAKLSAgICBhbmQgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnBvcDwvc3Bhbj4gYXJlIGZhciBsZXNzIHRoYW4gdGhvc2UgbmVlZGVkIGJ5IAotICAgIGN1cnNvcnMuIDwvcD4KLSAgPEgxPkRpc3Bvc2luZyBvZiBhIEN1cnNvcjwvSDE+Ci0gIDxwPldoZW4geW91J3JlIHRocm91Z2ggd2l0aCBhIGN1cnNvciwgeW91ciBjb2RlIHNob3VsZCBjYWxsIGl0cyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+ZGlzcG9zZTwvc3Bhbj4gCi0gICAgbWV0aG9kIHRvIGluZGljYXRlIHRoYXQgaXQncyBubyBsb25nZXIgbmVlZGVkLjwvcD4KLSAgPHAgY2xhc3M9InJlbGF0ZWR0b3BpY3MiPlJlbGF0ZWQgVG9waWNzPC9wPgotICA8cD48YSBocmVmPSJjb25VbmRlcnN0YW5kaW5nWE1MVG9rZW5zLmh0bWwiPlVuZGVyc3RhbmRpbmcgWE1MIFRva2VuczwvYT48L3A+Ci0gIDxwPjxhIGhyZWY9ImNvbkdldHRpbmdTdGFydGVkd2l0aFhNTEJlYW5zLmh0bWwiPkdldHRpbmcgU3RhcnRlZCB3aXRoIFhNTEJlYW5zPC9hPjwvcD4KLTwvZGl2PgotPCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPiAKLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgotCi08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL2d1aWRlL2NvblNlbGVjdGluZ1hNTHdpdGhYUGF0aC5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvZ3VpZGUvY29uU2VsZWN0aW5nWE1Md2l0aFhQYXRoLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhNzZmMTMuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvZ3VpZGUvY29uU2VsZWN0aW5nWE1Md2l0aFhQYXRoLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMTYgKzAsMCBAQAotPCFkb2N0eXBlIEhUTUwgcHVibGljICItLy9XM0MvL0RURCBIVE1MIDQuMCBGcmFtZXNldC8vRU4iPgotCi08aHRtbD4KLTxoZWFkPgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iZG9jdGl0bGUiIC0tPgotPHRpdGxlPlNlbGVjdGluZyBYTUwgd2l0aCBYUXVlcnkgYW5kIFhQYXRoPC90aXRsZT4KLTwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4gCi08IS0tKE1ldGEpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPgotCi08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9JENIQVJTRVQ7Ij4KLQotCi08IS0tIEluc3RhbmNlQmVnaW5FZGl0YWJsZSBuYW1lPSJtZXRhdGFncyIgLS0+Ci0KLTxtZXRhIGNvbnRlbnQ9InlvdXIgbmFtZSIgbmFtZT0iYXV0aG9yIj4KLTxtZXRhIGNvbnRlbnQ9IkEgZGVzY3JpcHRpb24gb2YgdGhlIHRvcGljIGNvbnRlbnRzLiIgbmFtZT0iZGVzY3JpcHRpb24iPgotPG1ldGEgY29udGVudD0ia2V5d29yZHMgdG8gaGVscCBpbiBzZWFyY2hlcyIgbmFtZT0ia2V5d29yZHMiPgotPG1ldGEgY29udGVudD0iMTAvMjUvMDIiIG5hbWU9ImRhdGUgbGFzdCBtb2RpZmllZCI+Ci08IS0tIEluc3RhbmNlRW5kRWRpdGFibGUgLS0+Ci0KLTwhLS0oTGlua3MpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+Ci08IS0tIEluc3RhbmNlQmVnaW5FZGl0YWJsZSBuYW1lPSJoZWFkIiAtLT4gCi08bGluayBocmVmPSIuLi94bWxiZWFucy5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgotPCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPgotPGxpbmsgaHJlZj0iLi4veG1sYmVhbnMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4KLTxhIGhyZWY9Ii4uLy4uLy4uL2NvcmUvaW5kZXguaHRtbCIgaWQ9ImluZGV4Ij48L2E+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiBzcmM9Ii4uLy4uLy4uL2NvcmUvdG9waWNJbmZvLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHNyYz0iLi4vLi4vLi4vY29yZS9Db29raWVDbGFzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiBzcmM9Ii4uLy4uLy4uL2NvcmUvZGlzcGxheUNvbnRlbnQuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotCi08IS0tKEJvZHkpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPgotPGJvZHk+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KLQotPC9zY3JpcHQ+Ci08IS0tIEluc3RhbmNlQmVnaW5FZGl0YWJsZSBuYW1lPSJib2R5IiAtLT4gCi08aDE+IFNlbGVjdGluZyBYTUwgd2l0aCBYUGF0aDwvaDE+Ci08ZGl2IGlkPSJ0b3BpY3RleHQiPiAKLSAgPHA+WW91IGNhbiB1c2UgWFBhdGggdG8gcmV0cmlldmUgc3BlY2lmaWMgcGllY2VzIG9mIFhNTCBYUGF0aCBwcm92aWRlIGEgc3ludGF4IGZvciBzcGVjaWZ5aW5nIAotICAgIHdoaWNoIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzIHlvdSdyZSBpbnRlcmVzdGVkIGluLiAKLSAgPGgyPlVzaW5nIHRoZSBzZWxlY3RQYXRoIE1ldGhvZDwvaDI+Ci08L2Rpdj4KLTxkaXY+Ci0gIDxwPldoZW4geW91IHVzZSBYUGF0aCB3aXRoIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+c2VsZWN0UGF0aDwvc3Bhbj4gCi0gICAgbWV0aG9kLCB0aGUgdmFsdWUgcmV0dXJuZWQgaXMgYW4gYXJyYXkgb2YgdmFsdWVzIGZyb20gdGhlIDxlbT5jdXJyZW50IGRvY3VtZW50PC9lbT4uPC9wPgotICA8aDM+Q2FsbGluZyBmcm9tIFhtbE9iamVjdDwvaDM+Ci0gIDxwPldoZW4gY2FsbGVkIGZyb20gPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlhtbE9iamVjdDwvc3Bhbj4gKG9yIGEgdHlwZSB0aGF0IAotICAgIGluaGVyaXRzIGZyb20gaXQpLCB0aGlzIG1ldGhvZCByZXR1cm5zIGFuIGFycmF5IG9mIG9iamVjdHMuIElmIHRoZSBleHByZXNzaW9uIAotICAgIGlzIGV4ZWN1dGVkIGFnYWluc3QgdHlwZXMgZ2VuZXJhdGVkIGZyb20gc2NoZW1hLCB0aGVuIHRoZSB0eXBlIGZvciB0aGUgcmV0dXJuZWQgCi0gICAgYXJyYXkgaXMgb25lIG9mIHRoZSBKYXZhIHR5cGVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNjaGVtYS4gPC9wPgotICA8cD5Gb3IgZXhhbXBsZSwgaW1hZ2luZSB5b3UgaGF2ZSB0aGUgZm9sbG93aW5nIFhNTCBjb250YWluaW5nIGVtcGxveWVlIGluZm9ybWF0aW9uLiAKLSAgICBZb3UndmUgY29tcGlsZWQgdGhlIHNjaGVtYSBkZXNjcmliaW5nIHRoaXMgWE1MIGFuZCB0aGUgdHlwZXMgZ2VuZXJhdGVkIGZyb20gCi0gICAgc2NoZW1hIGFyZSBhdmFpbGFibGUgdG8geW91ciBjb2RlLjwvcD4KLTxwcmU+Ci0mbHQ7eHE6ZW1wbG95ZWVzIHhtbG5zOnhxPSZxdW90O2h0dHA6Ly9vcGVudXJpLm9yZy9zZWxlY3RQYXRoJnF1b3Q7Jmd0OwotICAgICZsdDt4cTplbXBsb3llZSZndDsKLSAgICAgICAgJmx0O3hxOm5hbWUmZ3Q7RnJlZCBKb25lcyZsdDsveHE6bmFtZSZndDsKLSAgICAgICAgJmx0O3hxOmFkZHJlc3MgbG9jYXRpb249JnF1b3Q7aG9tZSZxdW90OyZndDsKLSAgICAgICAgICAgICZsdDt4cTpzdHJlZXQmZ3Q7OTAwIEF1cm9yYSBBdmUuJmx0Oy94cTpzdHJlZXQmZ3Q7Ci0gICAgICAgICAgICAmbHQ7eHE6Y2l0eSZndDtTZWF0dGxlJmx0Oy94cTpjaXR5Jmd0OwotICAgICAgICAgICAgJmx0O3hxOnN0YXRlJmd0O1dBJmx0Oy94cTpzdGF0ZSZndDsKLSAgICAgICAgICAgICZsdDt4cTp6aXAmZ3Q7OTgxMTUmbHQ7L3hxOnppcCZndDsKLSAgICAgICAgJmx0Oy94cTphZGRyZXNzJmd0OwotICAgICAgICAmbHQ7eHE6YWRkcmVzcyBsb2NhdGlvbj0mcXVvdDt3b3JrJnF1b3Q7Jmd0OwotICAgICAgICAgICAgJmx0O3hxOnN0cmVldCZndDsyMDExIDE1Mm5kIEF2ZW51ZSBORSZsdDsveHE6c3RyZWV0Jmd0OwotICAgICAgICAgICAgJmx0O3hxOmNpdHkmZ3Q7UmVkbW9uZCZsdDsveHE6Y2l0eSZndDsKLSAgICAgICAgICAgICZsdDt4cTpzdGF0ZSZndDtXQSZsdDsveHE6c3RhdGUmZ3Q7Ci0gICAgICAgICAgICAmbHQ7eHE6emlwJmd0Ozk4MDUyJmx0Oy94cTp6aXAmZ3Q7Ci0gICAgICAgICZsdDsveHE6YWRkcmVzcyZndDsKLSAgICAgICAgJmx0O3hxOnBob25lIGxvY2F0aW9uPSZxdW90O3dvcmsmcXVvdDsmZ3Q7KDQyNSk1NTUtNTY2NSZsdDsveHE6cGhvbmUmZ3Q7Ci0gICAgICAgICZsdDt4cTpwaG9uZSBsb2NhdGlvbj0mcXVvdDtob21lJnF1b3Q7Jmd0OygyMDYpNTU1LTU1NTUmbHQ7L3hxOnBob25lJmd0OwotICAgICAgICAmbHQ7eHE6cGhvbmUgbG9jYXRpb249JnF1b3Q7bW9iaWxlJnF1b3Q7Jmd0OygyMDYpNTU1LTQzMjEmbHQ7L3hxOnBob25lJmd0OwotICAgICZsdDsveHE6ZW1wbG95ZWUmZ3Q7Ci0mbHQ7L3hxOmVtcGxveWVlcyZndDsKLTwvcHJlPgotICBJZiB5b3Ugd2FudGVkIHRvIGZpbmQgdGhlIHBob25lIG51bWJlcnMgd2hvc2UgYXJlYSBjb2RlIHdhcyAyMDYsIHlvdSBjb3VsZCBjYXB0dXJlIAotICB0aGUgWFBhdGggZXhwcmVzc2lvbiBpbiB0aGlzIHdheTogCi0gIDxwcmU+Ci1TdHJpbmcgcXVlcnlFeHByZXNzaW9uID0KLSAgICAmcXVvdDtkZWNsYXJlIG5hbWVzcGFjZSB4cT0naHR0cDovL29wZW51cmkub3JnL3NlbGVjdFBhdGgnJnF1b3Q7ICsKLSAgICAmcXVvdDskdGhpcy94cTplbXBsb3llZXMveHE6ZW1wbG95ZWUveHE6cGhvbmVbY29udGFpbnMoLiwgJygyMDYpJyldJnF1b3Q7Ci08L3ByZT4KLSAgPHA+Tm90aWNlIGluIHRoZSBxdWVyeSBleHByZXNzaW9uIHRoYXQgdGhlIHZhcmlhYmxlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj4kdGhpczwvc3Bhbj4gCi0gICAgcmVwcmVzZW50cyB0aGUgY3VycmVudCBjb250ZXh0IG5vZGUgKHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sT2JqZWN0PC9zcGFuPiAKLSAgICB0aGF0IHlvdSBhcmUgcXVlcnlpbmcgZnJvbSkuIEluIHRoaXMgZXhhbXBsZSB5b3UgYXJlIHF1ZXJ5aW5nIGZyb20gdGhlIGRvY3VtZW50IAotICAgIGxldmVsIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5YbWxPYmplY3Q8L3NwYW4+LjwvcD4KLSAgPHA+WW91IGNvdWxkIHRoZW4gcHJpbnQgdGhlIHJlc3VsdHMgd2l0aCBjb2RlIHN1Y2ggYXMgdGhlIGZvbGxvd2luZzo8L3A+Ci0gIDxwcmU+Ci0vKiAKLSAqIFJldHJpZXZlIHRoZSBtYXRjaGluZyBwaG9uZSBlbGVtZW50cyBhbmQgYXNzaWduIHRoZSByZXN1bHRzIHRvIHRoZSBjb3JyZXNwb25kaW5nCi0gKiBnZW5lcmF0ZWQgdHlwZS4KLSAqLwotUGhvbmVUeXBlW10gcGhvbmVzID0gKFBob25lVHlwZVtdKWVtcERvYy5zZWxlY3RQYXRoKHF1ZXJ5RXhwcmVzc2lvbik7Ci0vKgotICogTG9vcCB0aHJvdWdoIHRoZSByZXN1bHRzLCBwcmludGluZyB0aGUgdmFsdWUgb2YgdGhlIHBob25lIGVsZW1lbnQuCi0gKi8KLWZvciAoaW50IGkgPSAwOyBpIDwgcGhvbmVzLmxlbmd0aDsgaSsrKQotewotICAgIFN5c3RlbS5vdXQucHJpbnRsbihwaG9uZXNbaV0uc3RyaW5nVmFsdWUoKSk7Ci19ICA8L3ByZT4KLQotICA8aDM+Q2FsbGluZyBmcm9tIFhtbEN1cnNvcjwvaDM+Ci0gIDxwPldoZW4gY2FsbGVkIGZyb20gYW4gPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlhtbEN1cnNvcjwvc3Bhbj4gaW5zdGFuY2UsIHRoZSAKLSAgICA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+c2VsZWN0UGF0aDwvc3Bhbj4gbWV0aG9kIHJldHJpZXZlcyBhIGxpc3Qgb2Ygc2VsZWN0aW9ucywgCi0gICAgb3IgbG9jYXRpb25zIGluIHRoZSBYTUwuIFRoZSBzZWxlY3Rpb25zIGFyZSByZW1lbWJlcmVkIGJ5IHRoZSBjdXJzb3IgaW5zdGFuY2UuIAotICAgIFlvdSBjYW4gdXNlIG1ldGhvZHMgc3VjaCBhcyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+dG9OZXh0U2VsZWN0aW9uPC9zcGFuPiAKLSAgICB0byBuYXZpZ2F0ZSBhbW9uZyB0aGVtLjwvcD4KLSAgPGRpdj4KLSAgICA8cD5UaGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnNlbGVjdFBhdGg8L3NwYW4+IG1ldGhvZCB0YWtlcyBhbiBYUGF0aCBleHByZXNzaW9uLiAKLSAgICAgIElmIHRoZSBleHByZXNzaW9uIHJldHVybnMgYW55IHJlc3VsdHMsIGVhY2ggb2YgdGhvc2UgcmVzdWx0cyBpcyBhZGRlZCBhcyAKLSAgICAgIGEgc2VsZWN0aW9uIHRvIHRoZSBjdXJzb3IncyBsaXN0IG9mIHNlbGVjdGlvbnMuIFlvdSBjYW4gbW92ZSB0aHJvdWdoIHRoZXNlIAotICAgICAgc2VsZWN0aW9ucyBpbiB0aGUgd2F5IHlvdSBtaWdodCB1c2UgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmphdmEudXRpbC5JdGVyYXRvcjwvc3Bhbj4gCi0gICAgICBtZXRob2RzIHRvIG1vdmUgdGhyb3VnaCBhIGNvbGxlY3Rpb24uPC9wPgotICAgIDxwPiBGb3IgZXhhbXBsZSwgZm9yIGEgcGF0aCBzdWNoIGFzIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj4kdGhpcy9lbXBsb3llZXMvZW1wbG95ZWU8L3NwYW4+LCAKLSAgICAgIHRoZSByZXN1bHRzIHdvdWxkIGluY2x1ZGUgYSBzZWxlY3Rpb24gZm9yIGVhY2ggZW1wbG95ZWUgZWxlbWVudCBmb3VuZCBieSAKLSAgICAgIHRoZSBleHByZXNzaW9uLiBOb3RlIHRoYXQgdGhlIHZhcmlhYmxlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj4kdGhpczwvc3Bhbj4gCi0gICAgICBpcyBhbHdheXMgYm91bmQgdG8gdGhlIGN1cnJlbnQgY29udGV4dCBub2RlLCB3aGljaCBpbiB0aGlzIGV4YW1wbGUgaXMgdGhlIAotICAgICAgZG9jdW1lbnQuIEFmdGVyIGNhbGxpbmcgdGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5zZWxlY3RQYXRoPC9zcGFuPiBtZXRob2QsIAotICAgICAgeW91IHdvdWxkIHVzZSB2YXJpb3VzICZxdW90O3NlbGVjdGlvbiZxdW90Oy1yZWxhdGVkIG1ldGhvZHMgdG8gd29yayB3aXRoIAotICAgICAgdGhlIHJlc3VsdHMuIFRoZXNlIG1ldGhvZHMgaW5jbHVkZTo8L3A+Ci0gIDwvZGl2PgotICA8dWw+Ci0gICAgPGxpPiAKLSAgICAgIDxkaXY+PHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmdldFNlbGVjdGlvbkNvdW50KCkgPC9zcGFuPnRvIHJldHJpZXZlIHRoZSAKLSAgICAgICAgbnVtYmVyIG9mIHNlbGVjdGlvbnMgcmVzdWx0aW5nIGZyb20gdGhlIHF1ZXJ5LjwvZGl2PgotICAgIDwvbGk+Ci0gICAgPGxpPiAKLSAgICAgIDxkaXY+IDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj50b05leHRTZWxlY3Rpb24oKTwvc3Bhbj4gdG8gbW92ZSB0aGUgY3Vyc29yIAotICAgICAgICB0byB0aGUgbmV4dCBzZWxlY3Rpb24gaW4gdGhlIGxpc3QgKHN1Y2ggYXMgdG8gdGhlIG9uZSBwb2ludGluZyBhdCB0aGUgCi0gICAgICAgIG5leHQgZW1wbG95ZWUgZWxlbWVudCBmb3VuZCkuPC9kaXY+Ci0gICAgPC9saT4KLSAgICA8bGk+IAotICAgICAgPGRpdj4gPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnRvU2VsZWN0aW9uKGludCk8L3NwYW4+IHRvIG1vdmUgdGhlIGN1cnNvciAKLSAgICAgICAgdG8gdGhlIHNlbGVjdGlvbiBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IChzdWNoIGFzIHRvIHRoZSB0aGlyZCBlbXBsb3llZSAKLSAgICAgICAgZWxlbWVudCBpbiB0aGUgc2VsZWN0aW9uKS48L2Rpdj4KLSAgICA8L2xpPgotICAgIDxsaT4gCi0gICAgICA8ZGl2PiA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+aGFzTmV4dFNlbGVjdGlvbigpPC9zcGFuPiB0byBmaW5kIG91dCBpZiAKLSAgICAgICAgdGhlcmUgYXJlIG1vcmUgc2VsZWN0aW9ucyBhZnRlciB0aGUgY3Vyc29yJ3MgY3VycmVudCBwb3NpdGlvbi48L2Rpdj4KLSAgICA8L2xpPgotICAgIDxsaT4gCi0gICAgICA8ZGl2PjxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj4gY2xlYXJTZWxlY3Rpb25zKCk8L3NwYW4+IGNsZWFycyB0aGUgc2VsZWN0aW9ucyAKLSAgICAgICAgZnJvbSB0aGUgY3VycmVudCBjdXJzb3IuIFRoaXMgZG9lc24ndCBtb2RpZnkgdGhlIGRvY3VtZW50IChpbiBvdGhlciB3b3JkcywgCi0gICAgICAgIGl0IGRvZXNuJ3QgZGVsZXRlIHRoZSBzZWxlY3RlZCBYTUwpOyBpdCBtZXJlbHkgY2xlYXJzIHRoZSBzZWxlY3Rpb24gbGlzdCAKLSAgICAgICAgc28gdGhhdCB0aGUgY3Vyc29yIGlzIG5vIGxvbmdlciBrZWVwaW5nIHRyYWNrIG9mIHRob3NlIHBvc2l0aW9ucy48L2Rpdj4KLSAgICA8L2xpPgotICA8L3VsPgotICA8ZGl2PgotICAgIDxwPlRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgeW91IG1pZ2h0IHVzZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+c2VsZWN0UGF0aDwvc3Bhbj4sIAotICAgICAgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnB1c2g8L3NwYW4+IGFuZCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+cG9wPC9zcGFuPiAKLSAgICAgIG1ldGhvZHMsIHRvIG1hbmV1dmVyIHRocm91Z2ggWE1MLCByZXRyaWV2aW5nIHNwZWNpZmljIHZhbHVlcy4gPC9wPgotICAgIDxwcmU+Ci1wdWJsaWMgdm9pZCBwcmludFppcHNBbmRXb3JrUGhvbmVzKFhtbE9iamVjdCB4bWwpCi17Ci0gICAgLy8gRGVjbGFyZSB0aGUgbmFtZXNwYWNlIHRoYXQgd2lsbCBiZSB1c2VkLgotICAgIFN0cmluZyB4cU5hbWVzcGFjZSA9IAotICAgICAgICAmcXVvdDtkZWNsYXJlIG5hbWVzcGFjZSB4cT0naHR0cDovL29wZW51cmkub3JnL3NlbGVjdFBhdGgnJnF1b3Q7OwotCi0gICAgLy8gSW5zZXJ0IGEgY3Vyc29yIGFuZCBtb3ZlIGl0IHRvIHRoZSBmaXJzdCBlbGVtZW50LgotICAgIFhtbEN1cnNvciBjdXJzb3IgPSB4bWwubmV3Q3Vyc29yKCk7Ci0gICAgY3Vyc29yLnRvRmlyc3RDaGlsZCgpOwotICAgIC8qIAotICAgICAqIFNhdmUgdGhlIGN1cnNvcidzIGN1cnJlbnQgbG9jYXRpb24gYnkgcHVzaGluZyBpdCAKLSAgICAgKiBvbnRvIGEgc3RhY2sgb2Ygc2F2ZWQgbG9jYXRpb25zLgotICAgICAqLwotICAgIGN1cnNvci5wdXNoKCk7Ci0gICAgLy8gUXVlcnkgZm9yIHppcCBlbGVtZW50cy4KLSAgICBjdXJzb3Iuc2VsZWN0UGF0aCh4cU5hbWVzcGFjZSArICZxdW90OyR0aGlzLy94cTp6aXAmcXVvdDspOwotICAgIC8qIAotICAgICAqIExvb3AgdGhyb3VnaCB0aGUgbGlzdCBvZiBzZWxlY3Rpb25zLCBnZXR0aW5nIHRoZSB2YWx1ZSBvZiAKLSAgICAgKiBlYWNoIGVsZW1lbnQuCi0gICAgICovCi0gICAgd2hpbGUgKGN1cnNvci50b05leHRTZWxlY3Rpb24oKSkKLSAgICB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihjdXJzb3IuZ2V0VGV4dFZhbHVlKCkpOwotICAgIH0KLSAgICAvLyBQb3AgdGhlIHNhdmVkIGxvY2F0aW9uIG9mZiB0aGUgc3RhY2suCi0gICAgY3Vyc29yLnBvcCgpOwotICAgIC8vIFF1ZXJ5IGFnYWluIGZyb20gdGhlIHRvcCwgdGhpcyB0aW1lIGZvciB3b3JrIHBob25lIG51bWJlcnMuCi0gICAgY3Vyc29yLnNlbGVjdFBhdGgoeHFOYW1lc3BhY2UgKyAmcXVvdDskdGhpcy8veHE6cGhvbmVbQGxvY2F0aW9uPSd3b3JrJ10mcXVvdDspOwotICAgIC8qIAotICAgICAqIE1vdmUgdGhlIGN1cnNvciB0byB0aGUgZmlyc3Qgc2VsZWN0aW9uLCB0aGVtIHByaW50IHRoYXQgZWxlbWVudCdzCi0gICAgICogdmFsdWUuCi0gICAgICovCi0gICAgY3Vyc29yLnRvTmV4dFNlbGVjdGlvbigpOwotICAgIFN5c3RlbS5vdXQucHJpbnRsbihjdXJzb3IuZ2V0VGV4dFZhbHVlKCkpOwotICAgIC8vIERpc3Bvc2Ugb2YgdGhlIGN1cnNvci4KLSAgICBjdXJzb3IuZGlzcG9zZSgpOwotfQotPC9wcmU+Ci0gICAgPHA+VXNpbmcgc2VsZWN0aW9ucyBpcyBzb21ld2hhdCBsaWtlIHRyYWNraW5nIHRoZSBsb2NhdGlvbnMgb2YgbXVsdGlwbGUgY3Vyc29ycyAKLSAgICAgIHdpdGggYSBzaW5nbGUgY3Vyc29yLiBUaGlzIGJlY29tZXMgZXNwZWNpYWxseSBjbGVhciB3aGVuIHlvdSByZW1vdmUgdGhlIAotICAgICAgWE1MIGFzc29jaWF0ZWQgd2l0aCBhIHNlbGVjdGlvbi4gV2hlbiB5b3UgZG8gc28gdGhlIHNlbGVjdGlvbiBpdHNlbGYgcmVtYWlucyAKLSAgICAgIGF0IHRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgcmVtb3ZlZCBYTUwgd2FzLCBidXQgbm93IHRoZSBzZWxlY3Rpb24ncyBsb2NhdGlvbiAKLSAgICAgIGlzIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgWE1MIHRoYXQgd2FzIGFmdGVyIHRoZSBYTUwgeW91IHJlbW92ZWQuIEluIG90aGVyIAotICAgICAgd29yZHMsIHJlbW92aW5nIFhNTCBjcmVhdGVkIGEga2luZCBvZiB2YWN1dW0gdGhhdCB3YXMgZmlsbGVkIGJ5IHRoZSBYTUwgCi0gICAgICBhZnRlciBpdCwgd2hpY2ggc2hpZnRlZCB1cCBpbnRvIHRoZSBzcGFjZSAmIzgyMTI7IHVwIGludG8gcG9zaXRpb24gaW1tZWRpYXRlbHkgCi0gICAgICBhZnRlciB0aGUgc2VsZWN0aW9uIGxvY2F0aW9uLiBUaGlzIGlzIGV4YWN0bHkgdGhlIHNhbWUgYXMgaWYgdGhlIHNlbGVjdGlvbiAKLSAgICAgIGhhZCBiZWVuIGFub3RoZXIgY3Vyc29yLjwvcD4KLSAgICA8cD5GaW5hbGx5LCB3aGVuIHVzaW5nIHNlbGVjdGlvbnMga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGxpc3Qgb2Ygc2VsZWN0aW9ucyAKLSAgICAgIGlzIGluIGEgc2Vuc2UgJnF1b3Q7bGl2ZSZxdW90Oy4gVGhlIGN1cnNvciB5b3UncmUgd29ya2luZyB3aXRoIGlzIGtlZXBpbmcgCi0gICAgICB0cmFjayBvZiB0aGUgc2VsZWN0aW9ucyBpbiB0aGUgbGlzdC4gSW4gb3RoZXIgd29yZHMsIGJlIHN1cmUgdG8gY2FsbCB0aGUgCi0gICAgICA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+Y2xlYXJTZWxlY3Rpb25zPC9zcGFuPiBtZXRob2Qgd2hlbiB5b3UncmUgZmluaXNoZWQgCi0gICAgICB3aXRoIHRoZSBzZWxlY3Rpb25zLCBqdXN0IGFzIHlvdSBzaG91bGQgY2FsbCB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlhtbEN1cnNvci5kaXNwb3NlKCk8L3NwYW4+IAotICAgICAgbWV0aG9kIHdoZW4geW91J3JlIGZpbmlzaGVkIHVzaW5nIHRoZSBjdXJzb3IuPC9wPgotICA8L2Rpdj4KLSAgPGgyPlJlbGF0ZWQgVG9waWNzPC9oMj4KLTwvZGl2PgotPHA+PGEgaHJlZj0iY29uR2V0dGluZ1N0YXJ0ZWR3aXRoWE1MQmVhbnMuaHRtbCI+R2V0dGluZyBTdGFydGVkIHdpdGggWE1MQmVhbnM8L2E+PC9wPgotPCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPiAKLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgotCi08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL2d1aWRlL2NvblVuZGVyc3RhbmRpbmdYTUxUb2tlbnMuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL2d1aWRlL2NvblVuZGVyc3RhbmRpbmdYTUxUb2tlbnMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQzMDJmNC4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9ndWlkZS9jb25VbmRlcnN0YW5kaW5nWE1MVG9rZW5zLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzYgKzAsMCBAQAotPCFkb2N0eXBlIEhUTUwgcHVibGljICItLy9XM0MvL0RURCBIVE1MIDQuMCBGcmFtZXNldC8vRU4iPgotCi08aHRtbD4KLTxoZWFkPgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iZG9jdGl0bGUiIC0tPgotPHRpdGxlPlVuZGVyc3RhbmRpbmcgWE1MIFRva2VuczwvdGl0bGU+Ci08IS0tIEluc3RhbmNlRW5kRWRpdGFibGUgLS0+IAotPCEtLShNZXRhKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLQotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PSRDSEFSU0VUOyI+Ci0KLQotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0ibWV0YXRhZ3MiIC0tPgotCi08bWV0YSBuYW1lPSJjb21wb25lbnQiIGNvbnRlbnQ9IiI+Ci08IS0tIEluIHRoZSBkZXNjcmlwdGlvbiBtZXRhdGFnLCBwbGVhc2UgcHJvdmlkZSBhIEJSSUVGIGRlc2NyaXB0aW9uIG9mIHRoZSB0b3BpYyBjb250ZW50cy4gLS0+Ci08bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iIj4KLTwhLS0gSW4gdGhlIGNvbXBvbmVudCBtZXRhdGFnLCBwbGVhc2UgbGlzdCBrZXl3b3JkcyB0aGF0IHdpbGwgaGVscCBhIHVzZXIgc2VhcmNoIGZvciB0aGlzIHRvcGljLiAtLT4KLTxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSIiPgotPCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPgotCi08IS0tKExpbmtzKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iaGVhZCIgLS0+Ci08IS0tIEluc3RhbmNlRW5kRWRpdGFibGUgLS0+Ci08bGluayBocmVmPSIuLi94bWxiZWFucy5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgotPGEgaHJlZj0iLi4vLi4vLi4vY29yZS9pbmRleC5odG1sIiBpZD0iaW5kZXgiPjwvYT4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHNyYz0iLi4vLi4vLi4vY29yZS90b3BpY0luZm8uanMiPjwvc2NyaXB0PgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgc3JjPSIuLi8uLi8uLi9jb3JlL0Nvb2tpZUNsYXNzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHNyYz0iLi4vLi4vLi4vY29yZS9kaXNwbGF5Q29udGVudC5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+Ci0KLTwhLS0oQm9keSk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+Ci08Ym9keT4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgotCi08L3NjcmlwdD4KLTwhLS0gSW5zdGFuY2VCZWdpbkVkaXRhYmxlIG5hbWU9ImJvZHkiIC0tPiAKLTxkaXYgaWQ9dG9waWN0aXRsZT4gCi0gIDxwIGNsYXNzPVRpdGxlPlVuZGVyc3RhbmRpbmcgWE1MIFRva2VuczwvcD4KLTwvZGl2PgotPGRpdiBpZD10b3BpY3RleHQ+IAotICA8cD5BbiBYTUwgY3Vyc29yIChhbiBpbnN0YW5jZSBvZiB0aGUgPGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPjxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5YbWxDdXJzb3I8L3NwYW4+PC9hPiAKLSAgICBpbnRlcmZhY2UpIG1vdmVzIGZyb20gdG9rZW4gdG8gdG9rZW4gYXMgeW91ciBjb2RlIG1vdmVzIHRoZSBjdXJzb3IuIFdoZW4geW91IAotICAgIG1vdmUgYSBjdXJzb3IgdXNpbmcgYSBtZXRob2Qgc3VjaCBhcyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+dG9QYXJlbnQ8L3NwYW4+LCAKLSAgICA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+dG9GaXJzdEF0dHJpYnV0ZTwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj50b1ByZXZTaWJsaW5nPC9zcGFuPiwgCi0gICAgYW5kIHNvIG9uLCB0aGUgY3Vyc29yIG1vdmVzIHRvIHRoZSB0b2tlbiBmaXR0aW5nIHRoZSBkZXNjcmlwdGlvbi4gSWYgdGhlcmUgCi0gICAgaXMgbm8gYXBwcm9wcmlhdGUgdG9rZW4gdG8gbW92ZSB0bywgdGhlIGN1cnNvciByZW1haW5zIHdoZXJlIGl0IGlzLCBhbmQgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmZhbHNlPC9zcGFuPiAKLSAgICBpcyByZXR1cm5lZCB0byBpbmRpY2F0ZSB0aGF0IGl0IGRpZG4ndCBtb3ZlLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGN1cnNvciBpcyAKLSAgICBhdCB0aGUgRU5ERE9DIHRva2VuICh0aGUgbGFzdCB0YWcgaW4gdGhlIGRvY3VtZW50KSwgYSBjYWxsIHRvIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+dG9OZXh0U2libGluZzwvc3Bhbj4gCi0gICAgbWV0aG9kIHdpbGwgbm90IG1vdmUgdGhlIGN1cnNvciBhbmQgd2lsbCByZXR1cm4gPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmZhbHNlPC9zcGFuPiAKLSAgICB0byBpbmRpY2F0ZSB0aGF0IHRoZSBtb3ZlIHdhcyB1bnN1Y2Nlc3NmdWwuPC9wPgotICA8cD5Ob3RlIHRoYXQgd2hpbGUgeW91IGNhbiBjYWxsIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sQ3Vyc29yLmN1cnJlbnRUb2tlblR5cGU8L3NwYW4+IAotICAgIG1ldGhvZCB0byBmaW5kIG91dCB3aGljaCB0b2tlbiB0eXBlIHRoZSBjdXJzb3IgaXMgYXQsIHlvdSBtaWdodCBmaW5kIGl0IG1vcmUgCi0gICAgY29udmVuaWVudCB0byB1c2UgYSBtZXRob2Qgc3VjaCBhcyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+aXNFbmRkb2M8L3NwYW4+LiAKLSAgICBUaGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlhtbEN1cnNvcjwvc3Bhbj4gaW50ZXJmYWNlIHByb3ZpZGVzIHNldmVyYWwgbWV0aG9kcyAKLSAgICB0aGF0IG1ha2UgaXQgZWFzeSB0byBkaXNjb3ZlciB3aGV0aGVyIHRoZSBjdXJzb3IgeW91J3JlIG1vdmluZyBpcyBhdCB0aGUgdG9rZW4gCi0gICAgeW91J3JlIGxvb2tpbmcgZm9yLiBUaGVzZSBtZXRob2RzLCBzdWNoIGFzIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5pc1N0YXJ0PC9zcGFuPiwgCi0gICAgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPmlzQXR0cjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5pc1RleHQ8L3NwYW4+LCAKLSAgICBhbmQgc28gb24sIHJldHVybiBhIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5ib29sZWFuPC9zcGFuPiB2YWx1ZSB0aGF0IGluZGljYXRlcyAKLSAgICB3aGV0aGVyIHRoZSBjdXJzb3IgaXMgYXQgdGhlIHRva2VuIHR5cGUgaW4gcXVlc3Rpb24uPC9wPgotICA8UD5Ub2tlbnMgYXJlIHJlcHJlc2VudGVkIGJ5IGNvbnN0YW50cyBpbiB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+VG9rZW5UeXBlPC9hPjwvc3Bhbj4gCi0gICAgY2xhc3MsIGFuIGlubmVyIGNsYXNzIG9mIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sQ3Vyc29yPC9zcGFuPiBpbnRlcmZhY2UuIAotICAgIEVhY2ggaGFzIGEgY29uc3RhbnQgeW91IGNhbiB1c2UgaW4gc3dpdGNoIHN0YXRlbWVudHMgdG8gcGVyZm9ybSBieS10b2tlbiBhY3Rpb25zLiAKLSAgICBUaGUgZm9sbG93aW5nIHRhYmxlIGxpc3RzIHRoZSB0b2tlbiB0eXBlczo8L1A+Ci0gIDxUQUJMRSBpZD0iVGFibGUxIj4KLSAgICA8VFI+IAotICAgICAgPFREPjxTVFJPTkc+VG9rZW4gVHlwZTwvU1RST05HPjwvVEQ+Ci0gICAgICA8VEQ+PFNUUk9ORz5Td2l0Y2ggQ29uc3RhbnQ8L1NUUk9ORz48L1REPgotICAgICAgPFREPjxTVFJPTkc+RGVzY3JpcHRpb248L1NUUk9ORz48L1REPgotICAgIDwvVFI+Ci0gICAgPFRSPiAKLSAgICAgIDxURD5TVEFSVERPQzwvVEQ+Ci0gICAgICA8VEQ+SU5UX1NUQVJURE9DPC9URD4KLSAgICAgIDxURD5SZXByZXNlbnRzIHRoZSBzdGFydCBvZiB0aGUgWE1MLiBBbHdheXMgdGhlIGZpcnN0IHRva2VuLiBUaGUgZG9jdW1lbnQgCi0gICAgICAgIGVsZW1lbnQgaXRzZWxmIGlzIHJlcHJlc2VudGVkIGJ5IGEgU1RBUlQgdG9rZW4sIG5vdCB0aGUgU1RBUlRET0MgdG9rZW4uPC9URD4KLSAgICA8L1RSPgotICAgIDxUUj4gCi0gICAgICA8VEQ+RU5ERE9DIDwvVEQ+Ci0gICAgICA8VEQ+SU5UX0VORERPQzwvVEQ+Ci0gICAgICA8VEQ+UmVwcmVzZW50cyB0aGUgZW5kIG9mIHRoZSBYTUwuIEFsd2F5cyB0aGUgbGFzdCB0b2tlbi48L1REPgotICAgIDwvVFI+Ci0gICAgPFRSPiAKLSAgICAgIDxURD5TVEFSVCA8L1REPgotICAgICAgPFREPklOVF9TVEFSVDwvVEQ+Ci0gICAgICA8VEQ+UmVwcmVzZW50cyB0aGUgc3RhcnQgb2YgYW4gZWxlbWVudC48L1REPgotICAgIDwvVFI+Ci0gICAgPFRSPiAKLSAgICAgIDxURD5FTkQgPC9URD4KLSAgICAgIDxURD5JTlRfRU5EPC9URD4KLSAgICAgIDxURD5SZXByZXNlbnRzIHRoZSBlbmQgb2YgYW4gZWxlbWVudC4gVGhlIEVORCB0b2tlbiBoYXMgbm8gdmFsdWUsIGJ1dCBtYXJrcyAKLSAgICAgICAgdGhlIGVsZW1lbnQncyBlbmQuPC9URD4KLSAgICA8L1RSPgotICAgIDxUUj4gCi0gICAgICA8VEQ+VEVYVDwvVEQ+Ci0gICAgICA8VEQ+SU5UX1RFWFQ8L1REPgotICAgICAgPFREPlJlcHJlc2VudHMgdGV4dC48L1REPgotICAgIDwvVFI+Ci0gICAgPFRSPiAKLSAgICAgIDxURD5BVFRSIDwvVEQ+Ci0gICAgICA8VEQ+SU5UX0FUVFI8L1REPgotICAgICAgPFREPlJlcHJlc2VudHMgYW4gYXR0cmlidXRlLiBBVFRSIHRva2VucyBhcmUgYWxsb3dlZCB0byBhcHBlYXIgYWZ0ZXIgYSBTVEFSVERPQyAKLSAgICAgICAgb3IgU1RBUlQgdG9rZW4uPC9URD4KLSAgICA8L1RSPgotICAgIDxUUj4gCi0gICAgICA8VEQ+TkFNRVNQQUNFPC9URD4KLSAgICAgIDxURD5JTlRfTkFNRVNQQUNFPC9URD4KLSAgICAgIDxURD5SZXByZXNlbnRzIGEgbmFtZXNwYWNlICh4bWxucykgYXR0cmlidXRlLiBBbHNvIG9ubHkgYWxsb3dlZCBhZnRlciBTVEFSVCAKLSAgICAgICAgb3IgU1RBUlRET0MgdG9rZW5zLjwvVEQ+Ci0gICAgPC9UUj4KLSAgICA8VFI+IAotICAgICAgPFREPkNPTU1FTlQgPC9URD4KLSAgICAgIDxURD5JTlRfQ09NTUVOVDwvVEQ+Ci0gICAgICA8VEQ+UmVwcmVzZW50cyBhIGNvbW1lbnQuPC9URD4KLSAgICA8L1RSPgotICAgIDxUUj4gCi0gICAgICA8VEQ+UFJPQ0lOU1QgPC9URD4KLSAgICAgIDxURD5JTlRfUFJPQ0lOU1Q8L1REPgotICAgICAgPFREPlJlcHJlc2VudHMgYSBwcm9jZXNzaW5nIGluc3RydWN0aW9uLjwvVEQ+Ci0gICAgPC9UUj4KLSAgPC9UQUJMRT4KLSAgPFA+QXMgeW91IHVzZSBhIGN1cnNvciB0byBuYXZpZ2F0ZSB0aHJvdWdoIFhNTCwgeW91IGNhbiB1c2Ugb25lIG9mIHRoZSBjb252ZW5pZW5jZSAKLSAgICBtZXRob2RzIGRlc2NyaWJlZCBhYm92ZSB0byBkaXNjb3ZlciB3aGV0aGVyIHlvdSdyZSBhdCB0aGUgdG9rZW4geW91J3JlIGxvb2tpbmcgCi0gICAgZm9yLCBvciB1c2UgdGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5YbWxDdXJzb3IuY3VycmVudFRva2VuVHlwZTwvc3Bhbj4mbmJzcDttZXRob2QgCi0gICAgdG8gZGlzY292ZXIgdGhlIGN1cnJlbnQgdG9rZW4ncyB0eXBlLiBUaGUgZm9sbG93aW5nIGZpZ3VyZSBpbGx1c3RyYXRlcyBleGFtcGxlIAotICAgIGxvY2F0aW9ucyBmb3IgdG9rZW4gdHlwZXM6PC9QPgotICA8UD48SU1HIHNyYz0iLi4vaW1hZ2VzL2NvbkN1cnNvclRva2VuTG9jYXRpb25zLmdpZiIgd2lkdGg9IjcyNyIgaGVpZ2h0PSI1MzIiPgotICA8aDI+U3dpdGNoaW5nIHRvIFRlc3QgZm9yIFRva2VuIFR5cGVzPC9oMj4KLSAgPHA+SGVyZSdzIGEgYml0IG9mIGNvZGUgaWxsdXN0cmF0aW5nIGhvdyB5b3UgbWlnaHQgdXNlIGEgSmF2YSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+c3dpdGNoPC9zcGFuPiAKLSAgICBzdGF0ZW1lbnQgdG8gdGVzdCBmb3IgdGhlIFNUQVJUIHRva2VuIHR5cGUuPC9wPgotICA8cHJlPgotLy8gVGFrZSBhbiBpbmNvbWluZyBYbWxPYmplY3QgYW5kIGluc2VydCBhIGN1cnNvci4KLVhtbEN1cnNvciBkb2N1bWVudEN1cnNvciA9IHhtbERvYy5uZXdDdXJzb3IoKTsKLSAKLS8qIAotICogTG9vcCB0aHJvdWdoIHRoZSBkb2N1bWVudCwgcGFzc2luZyB0aGUgY3Vyc29yIHdoZW4gaXQgc3RvcHMgYXQgZWFjaCB0b2tlbiAKLSAqIHRvIGEgZnVuY3Rpb24gZGVzaWduZWQgdG8gZGlzY292ZXIgdGhlIHRva2VuIHR5cGUuIENvbnRpbnVlIHRoZSBsb29wCi0gKiBhcyBsb25nIGF0IHRoZSBjdXJzb3IgaXMgYXQgYSB0b2tlbiAodW50aWwgaXQgcmVhY2hlcyB0aGUgZW5kKS4KLSAqLwotd2hpbGUgKCFkb2N1bWVudEN1cnNvci50b05leHRUb2tlbigpLmlzTm9uZSgpKSAKLXsKLSAgICAvKgotICAgICAqIFVzZSB0aGUgaW50VmFsdWUgbWV0aG9kIHRvIHJldHVybiB0aGUgaW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIAotCSAqIGN1cnJlbnQgdG9rZW4gdHlwZS4gSWYgaXQgaXMgdGhlIHZhbHVlIGZvciBJTlRfU1RBUlQsCi0JICogdGhlbiB5b3UgaGF2ZSBhIG1hdGNoLgotCSAqLwotICAgIHN3aXRjaCAoY3Vyc29yLmN1cnJlbnRUb2tlblR5cGUoKS5pbnRWYWx1ZSgpKQotICAgIHsgICAgICAgIAotICAgICAgICBjYXNlIFRva2VuVHlwZS5JTlRfU1RBUlQ6Ci0gICAgICAgIC8vIFByaW50IG91dCB0aGUgdG9rZW4gdHlwZSBhbmQgYSBtZXNzYWdlLgotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oY3Vyc29yLmN1cnJlbnRUb2tlblR5cGUoKSArIAotICAgICAgICAgICAgIjsgY3Vyc29yIGlzIGF0IHRoZSBzdGFydCBvZiBhbiBlbGVtZW50LiIpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0vLyBCZSBzdXJlIHRvIGRpc3Bvc2Ugb2YgYSBjdXJzb3Igd2hlbiB5b3UncmUgZmluaXNoZWQuCi1kb2N1bWVudEN1cnNvci5kaXNwb3NlKCk7Ci08L3ByZT4KLSAgPHA+VGhlIHNjb3BlIG9mIGFuIFhNTCBjdXJzb3IgaXMgdGhlIFhNTCBkb2N1bWVudCBpbiB3aGljaCBpdCBpcyBjcmVhdGVkLiBGb3IgCi0gICAgZXhhbXBsZSwgeW91IGNhbiBjcmVhdGUgYSBjdXJzb3IgYXQgdGhlIG9yZGVySXRlbSBlbGVtZW50IGluIHRoZSBleGFtcGxlIGVhcmxpZXIgCi0gICAgaW4gdGhpcyB0b3BpYy4gSWYgeW91IHRoZW4gdXNlIHRoYXQgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPlhtbEN1cnNvcjwvc3Bhbj4gCi0gICAgaW5zdGFuY2UncyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+dG9OZXh0VG9rZW48L3NwYW4+IG1ldGhvZCB0byBtb3ZlIHRoZSAKLSAgICBjdXJzb3IgdW50aWwgaXQgd29uJ3QgbW92ZSBhbnkgZnVydGhlciwgeW91J2xsIGhhdmUgcmVhY2hlZCB0aGUgRU5ERE9DIHRva2VuLiAKLSAgICBJbiB0aGlzIGV4YW1wbGUsIHRoYXQncyBhdCB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPiZsdDsvYmF0Y2hXaWRnZXRPcmRlciZndDs8L3NwYW4+IAotICAgIHRhZy4gSW4gb3RoZXIgd29yZHMsIHRoZSBjdXJzb3IncyBzY29wZSBpcyBub3QgbGltaXRlZCB0byB0aGUgZWxlbWVudCBhdCB3aGljaCAKLSAgICBpdCB3YXMgY3JlYXRlZC48L3A+Ci0gIDxwIGNsYXNzPXJlbGF0ZWR0b3BpY3M+UmVsYXRlZCBUb3BpY3M8L3A+Ci0gIDxwPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+WG1sQ3Vyc29yLlRva2VuVHlwZSAKLSAgICBDbGFzczwvYT48L3A+Ci0gIDxwPjxhIGhyZWY9ImNvbk5hdmlnYXRpbmdYTUx3aXRoQ3Vyc29ycy5odG1sIj5OYXZpZ2F0aW5nIFhNTCB3aXRoIEN1cnNvcnM8L2E+PC9wPgotPC9kaXY+Ci08IS0tIEluc3RhbmNlRW5kRWRpdGFibGUgLS0+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KLQotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9ndWlkZS9jb25Vc2luZ0Jvb2ttYXJrc1RvQW5ub3RhdGVYTUwuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL2d1aWRlL2NvblVzaW5nQm9va21hcmtzVG9Bbm5vdGF0ZVhNTC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTJlZTk3Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL2d1aWRlL2NvblVzaW5nQm9va21hcmtzVG9Bbm5vdGF0ZVhNTC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotPCFkb2N0eXBlIEhUTUwgcHVibGljICItLy9XM0MvL0RURCBIVE1MIDQuMCBGcmFtZXNldC8vRU4iPgotCi08aHRtbD4KLTxoZWFkPgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iZG9jdGl0bGUiIC0tPgotPHRpdGxlPlVzaW5nIEJvb2ttYXJrcyB0byBBbm5vdGF0ZSBYTUw8L3RpdGxlPgotPCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPiAKLTwhLS0oTWV0YSk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+Ci0KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD0kQ0hBUlNFVDsiPgotCi0KLTwhLS0gSW5zdGFuY2VCZWdpbkVkaXRhYmxlIG5hbWU9Im1ldGF0YWdzIiAtLT4KLQotPG1ldGEgbmFtZT0iY29tcG9uZW50IiBjb250ZW50PSIiPgotPCEtLSBJbiB0aGUgZGVzY3JpcHRpb24gbWV0YXRhZywgcGxlYXNlIHByb3ZpZGUgYSBCUklFRiBkZXNjcmlwdGlvbiBvZiB0aGUgdG9waWMgY29udGVudHMuIC0tPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IiI+Ci08IS0tIEluIHRoZSBjb21wb25lbnQgbWV0YXRhZywgcGxlYXNlIGxpc3Qga2V5d29yZHMgdGhhdCB3aWxsIGhlbHAgYSB1c2VyIHNlYXJjaCBmb3IgdGhpcyB0b3BpYy4gLS0+Ci08bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iIj4KLTwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4KLQotPCEtLShMaW5rcyk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLTwhLS0gSW5zdGFuY2VCZWdpbkVkaXRhYmxlIG5hbWU9ImhlYWQiIC0tPgotPCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPgotPGxpbmsgaHJlZj0iLi4veG1sYmVhbnMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4KLTxhIGhyZWY9Ii4uLy4uLy4uL2NvcmUvaW5kZXguaHRtbCIgaWQ9ImluZGV4Ij48L2E+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiBzcmM9Ii4uLy4uLy4uL2NvcmUvdG9waWNJbmZvLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiIHNyYz0iLi4vLi4vLi4vY29yZS9Db29raWVDbGFzcy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiBzcmM9Ii4uLy4uLy4uL2NvcmUvZGlzcGxheUNvbnRlbnQuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotCi08IS0tKEJvZHkpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPgotPGJvZHk+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KLQotPC9zY3JpcHQ+Ci08IS0tIEluc3RhbmNlQmVnaW5FZGl0YWJsZSBuYW1lPSJib2R5IiAtLT4gCi08ZGl2IGlkPXRvcGljdGl0bGU+IAotICA8cCBjbGFzcz1UaXRsZT5Vc2luZyBCb29rbWFya3MgdG8gQW5ub3RhdGUgWE1MPC9wPgotPC9kaXY+Ci08ZGl2IGlkPXRvcGljdGV4dD4gCi0gIDxwPllvdSBjYW4gdXNlIGEgY3Vyc29yIHRvIGluc2VydCBib29rbWFya3MgdGhhdCBhbm5vdGF0ZSBYTUwgd2l0aCBtYXJrZXJzIGNvbnRhaW5pbmcgCi0gICAgaW5mb3JtYXRpb24geW91IGRlc2lnbi4gVGhlc2UgYm9va21hcmtzIGFyZW4ndCB3cml0dGVuIGludG8gdGhlIFhNTCBpdHNlbGYsIAotICAgIGJ1dCBpbiBhIHNlbnNlICJoYW5nIiBmcm9tIHRoZSBsb2NhdGlvbiB3aGVyZSBpdCB3YXMgaW5zZXJ0ZWQuIEluIHRoaXMgd2F5IAotICAgIHlvdSBjYW4gYXNzb2NpYXRlIGFyYml0cmFyeSBwaWVjZXMgb2YgaW5mb3JtYXRpb24gd2l0aCBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgCi0gICAgWE1MLjwvcD4KLSAgPFA+WW91IGRlc2lnbiB5b3VyIG93biBib29rbWFyayBjbGFzc2VzIGJ5IGV4dGVuZGluZyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbEJvb2ttYXJrLmh0bWwiPlhtbEJvb2ttYXJrPC9hPjwvc3Bhbj4sIAotICAgIGEgbmVzdGVkIGNsYXNzIG9mIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9hPjwvc3Bhbj4uIAotICAgIFlvdSBjYW4gZGVzaWduIHlvdXIgYm9va21hcmsgY2xhc3MgdG8gY29udGFpbiBpbmZvcm1hdGlvbiBzcGVjaWZpYyB0byB5b3VyIAotICAgIG5lZWRzLiA8L1A+Ci0gIDxQPkluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPk9yZGVyQm9va21hcms8L3NwYW4+IGlzIAotICAgIGFuIGlubmVyIGNsYXNzIHRoYXQgZXh0ZW5kcyA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sQ3Vyc29yLlhtbEJvb2ttYXJrPC9zcGFuPi4gCi0gICAgSXQgbWVyZWx5IHN0b3JlcyBhIHBpZWNlIG9mIHRleHQuPC9QPgotICA8UFJFPgotLyogCi0gKiBUaGUgT3JkZXJCb29rbWFyayBjbGFzcyBpbmNsdWRlcyBhIGNvbnN0cnVjdG9yIHRocm91Z2ggd2hpY2ggeW91IHdpbGwgCi0gKiBpbnNlcnQgeW91ciBib29rbWFyaydzIGNvbnRlbnQuIEl0IGFsc28gaW5jbHVkZXMgZ2V0IGFuZCBzZXQgbWV0aG9kcwotICogeW91IGNhbiB1c2UgdG8gcmV0cmlldmUgYW5kIGNoYW5nZSB0aGUgY29udGVudC4KLSAqLwotc3RhdGljIGNsYXNzIE9yZGVyQm9va21hcmsgZXh0ZW5kcyBYbWxDdXJzb3IuWG1sQm9va21hcmsgewotICAgIHB1YmxpYyBPcmRlckJvb2ttYXJrIChTdHJpbmcgdGV4dCkgeyBURVhUID0gdGV4dDsgfQotICAgIHB1YmxpYyBTdHJpbmcgVEVYVDsKLSAgICBwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7IHJldHVybiBURVhUOyB9Ci0gICAgcHVibGljIHZvaWQgc2V0VGV4dChTdHJpbmcgbmV3VGV4dCkgeyBURVhUID0gbmV3VGV4dDsgfQotfQotPC9QUkU+Ci0gIDxwPllvdSBjYW4gdXNlIGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIHRvIHN0b3JlIGJvb2ttYXJrcyBhdCBwbGFjZXMgaW4geW91ciAKLSAgICBYTUwuIFRoZSBmb2xsb3dpbmcgZXhjZXJwdCBvZiBjb2RlIGNyZWF0ZXMgYSBjdXJzb3IgYW5kIGFuIGluc3RhbmNlIG9mIHRoZSAKLSAgICA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+T3JkZXJCb29rbWFyazwvc3Bhbj4gY2xhc3MuIFRoZW4gaXQgdXNlcyB0aGUgY3Vyc29yIAotICAgIHRvIGluc2VydCB0aGUgYm9va21hcmsgYXQgdGhlIGN1cnNvcidzIGN1cnJlbnQgbG9jYXRpb24uPC9wPgotICA8cHJlPgotICAgIFhtbEN1cnNvciBvcmRlckN1cnNvciA9IHhtbERvYy5uZXdDdXJzb3IoKTsKLSAgICBPcmRlckJvb2ttYXJrIHRoaXNCb29rbWFyayA9IG5ldyBPcmRlckJvb2ttYXJrKCJmb28iKTsKLSAgICBvcmRlckN1cnNvci5zZXRCb29rbWFyayh0aGlzQW5ub3RhdGlvbik7Ci08L3ByZT4KLSAgPHAgY2xhc3M9cmVsYXRlZHRvcGljcz5SZWxhdGVkIFRvcGljczwvcD4KLSAgPHA+PGEgaHJlZj0iY29uTmF2aWdhdGluZ1hNTHdpdGhDdXJzb3JzLmh0bWwiPk5hdmlnYXRpbmcgWE1MIHdpdGggQ3Vyc29yczwvYT48L3A+Ci08L2Rpdj4KLTwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgotCi08L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL2d1aWRlL2NvblhNTEJlYW5zU3VwcG9ydEJ1aWx0SW5TY2hlbWFUeXBlcy5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvZ3VpZGUvY29uWE1MQmVhbnNTdXBwb3J0QnVpbHRJblNjaGVtYVR5cGVzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNzc1OWUuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvZ3VpZGUvY29uWE1MQmVhbnNTdXBwb3J0QnVpbHRJblNjaGVtYVR5cGVzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMzAgKzAsMCBAQAotPCFkb2N0eXBlIEhUTUwgcHVibGljICItLy9XM0MvL0RURCBIVE1MIDQuMCBGcmFtZXNldC8vRU4iPgotCi08aHRtbD4KLTxoZWFkPgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iZG9jdGl0bGUiIC0tPgotPHRpdGxlPkphdmEgVHlwZXMgZm9yIFhNTCBTY2hlbWE8L3RpdGxlPgotPCEtLSBJbnN0YW5jZUVuZEVkaXRhYmxlIC0tPiAKLTwhLS0oTWV0YSk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+Ci0KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD0kQ0hBUlNFVDsiPgotCi0KLTwhLS0gSW5zdGFuY2VCZWdpbkVkaXRhYmxlIG5hbWU9Im1ldGF0YWdzIiAtLT4KLQotPG1ldGEgbmFtZT0iYXV0aG9yIiBjb250ZW50PSJ5b3VyIG5hbWUiPgotPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkEgZGVzY3JpcHRpb24gb2YgdGhlIHRvcGljIGNvbnRlbnRzLiI+Ci08bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0ia2V5d29yZHMgdG8gaGVscCBpbiBzZWFyY2hlcyI+Ci08bWV0YSBuYW1lPSJkYXRlIGxhc3QgbW9kaWZpZWQiIGNvbnRlbnQ9IjEwLzI1LzAyIj4KLTwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4KLQotPCEtLShMaW5rcyk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLTwhLS0gSW5zdGFuY2VCZWdpbkVkaXRhYmxlIG5hbWU9ImhlYWQiIC0tPgotPGxpbmsgaHJlZj0iLi4veG1sYmVhbnMuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4KLTwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4KLTxsaW5rIGhyZWY9Ii4uL3htbGJlYW5zLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+Ci08YSBocmVmPSIuLi8uLi8uLi9jb3JlL2luZGV4Lmh0bWwiIGlkPSJpbmRleCI+PC9hPgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgc3JjPSIuLi8uLi8uLi9jb3JlL3RvcGljSW5mby5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0IiBzcmM9Ii4uLy4uLy4uL2NvcmUvQ29va2llQ2xhc3MuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgc3JjPSIuLi8uLi8uLi9jb3JlL2Rpc3BsYXlDb250ZW50LmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLQotPCEtLShCb2R5KT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4KLTxib2R5PgotPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+Ci0KLTwvc2NyaXB0PgotPCEtLSBJbnN0YW5jZUJlZ2luRWRpdGFibGUgbmFtZT0iYm9keSIgLS0+IAotPGgxPiBYTUxCZWFucyBTdXBwb3J0IGZvciBCdWlsdC1JbiBTY2hlbWEgVHlwZXM8L2gxPgotPHA+SnVzdCBhcyB3aXRoIHR5cGVzIGluIFhNTCBzY2hlbWEsIHRoZSBYTUxCZWFucyB0eXBlcyBiYXNlZCBvbiBzY2hlbWEgYXJlIGFycmFuZ2VkIAotICBpbiBhIGhpZXJhcmNoeS4gSW4gZ2VuZXJhbCwgdGhlIGhpZXJhcmNoeSBvZiBYTUxCZWFuIHR5cGVzIG1pcnJvcnMgdGhlIGhpZXJhcmNoeSAKLSAgb2YgdGhlIHNjaGVtYSB0eXBlcyB0aGVtc2VsdmVzLiBYTUwgc2NoZW1hIHR5cGVzIGFsbCBpbmhlcml0IGZyb20gPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnhzOmFueVR5cGU8L3NwYW4+IAotICAod2hpY2ggaXMgYXQgdGhlIHJvb3Qgb2YgdGhlIGhpZXJhcmNoeSk7IFhNTEJlYW5zIHR5cGVzIGluaGVyaXQgZnJvbSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sT2JqZWN0PC9zcGFuPi48L3A+Ci08cD5JbiBYTUwgc2NoZW1hLCA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+eHM6YW55VHlwZTwvc3Bhbj4gaXMgdGhlIHJvb3QgdHlwZSAKLSAgZm9yIHR3byB0eXBlIGNhdGVnb3JpZXM6IGJ1aWx0LWluIGFuZCB1c2VyLWRlcml2ZWQuIEJ1aWx0LWluIHNjaGVtYSB0eXBlcyBhcmUgCi0gIGNvbW1vbiB0eXBlcyBkZWZpbmVkIGJ5IHRoZSBYTUwgc2NoZW1hIHNwZWNpZmljYXRpb24uIFVzZXItZGVyaXZlZCB0eXBlcyBhcmUgCi0gIHRob3NlIHlvdSBkZWZpbmUgaW4geW91ciBzY2hlbWEuIFRoaXMgdG9waWMgbGlzdHMgdGhlIGJ1aWx0LWluIHR5cGVzIHByb3ZpZGVkIAotICB3aXRoIFhNTEJlYW5zLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgdXNlci1kZXJpdmVkIHR5cGVzIGFuZCB0aGUgSmF2YSB0eXBlcyBnZW5lcmF0ZWQgCi0gIGZyb20gdGhlbSwgc2VlIDxhIGhyZWY9ImNvbkphdmFUeXBlc0dlbmVyYXRlZEZyb21Vc2VyRGVyaXZlZC5odG1sIj5KYXZhIFR5cGVzIEdlbmVyYXRlZCAKLSAgZnJvbSBVc2VyLURlcml2ZWQgU2NoZW1hIFR5cGVzPC9hPi48L3A+Ci08cD5UaGUgZm9sbG93aW5nIGZpZ3VyZSBpbGx1c3RyYXRlcyB0aGUgaGllcmFyY2h5IG9mIHR5cGVzLCBzaG93aW5nIGJvdGggYnVpbHQtaW4gCi0gIHNjaGVtYSB0eXBlcyBhbmQgdGhlaXIgWE1MQmVhbnMgcGFyYWxsZWxzLiBOb3RpY2UsIHRvbywgdGhhdCBuZWFybHkgYWxsIG9mIHRoZSAKLSAgYnVpbHQtaW4gdHlwZXMgYXJlIGFsc28gYXZhaWxhYmxlIGFzIG5hdHVyYWwgSmF2YSB0eXBlcy48L3A+Ci08cD48aW1nIHNyYz0iLi4vaW1hZ2VzL2NvblhNTFR5cGVIaWVyYXJjaHkuZ2lmIiB3aWR0aD0iODY1IiBoZWlnaHQ9Ijg4NyI+IDwvcD4KLTxoMT5KYXZhIFR5cGVzIFJlcHJlc2VudGluZyBCdWlsdC1JbiBTY2hlbWEgVHlwZXM8L2gxPgotPHA+QXMgeW91IGNhbiBzZWUgZnJvbSB0aGUgZmlndXJlIGFib3ZlLCBhbGwgNDYgYnVpbHQtaW4gc2NoZW1hIHR5cGVzIGFyZSByZXByZXNlbnRlZCAKLSAgYnkgYW4gWE1MQmVhbiB0eXBlIHByb3ZpZGVkIHdpdGggWE1MQmVhbnMuIFdoZW4gdXNpbmcgYnVpbHQtaW4gWE1MQmVhbiB0eXBlcywgCi0gIGtlZXAgaW4gbWluZCB0aGF0OjwvcD4KLTx1bD4KLSAgPGxpPiBTaW5jZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sT2JqZWN0PC9zcGFuPiBjb3JyZXNwb25kcyB0byB0aGUgPHNwYW4gY2xhc3M9ImxhbmdpbmxpbmUiPnhzOmFueVR5cGU8L3NwYW4+LCAKLSAgICBhbGwgSmF2YSBYTUxCZWFuIHR5cGVzIGluaGVyaXQgZnJvbSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sT2JqZWN0PC9zcGFuPi4gCi0gICAgVGhlcmVmb3JlIGFsbCBYTUxCZWFuIHR5cGVzIHNoYXJlIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sT2JqZWN0PC9zcGFuPiAKLSAgICBpbnRlcmZhY2WScyBhYmlsaXR5IHRvIGNyZWF0ZSBhbiA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sQ3Vyc29yPC9zcGFuPiAKLSAgICBhdCB0aGUgcG9zaXRpb24gb2YgdGhlIG9iamVjdC4gVGhleSBjYW4gYWxzbyByZW5kZXIgdGhlIFhNTCBhcyBzdHJpbmdzIG9yIAotICAgIHN0cmVhbXMuIAotICA8bGk+IAotICAgIDxkaXY+V2hlcmUgdGhlcmUgaXMgYSBjb3JyZXNwb25kaW5nIG5hdHVyYWwgSmF2YSB0eXBlLCB0aGUgWE1MQmVhbnMgdHlwZSBwcm92aWRlcyAKLSAgICAgIGEgd2F5IHRvIGdldCB0aGUgdW5kZXJseWluZyBYTUwncyB2YWx1ZSBhcyB0aGUgbmF0dXJhbCB0eXBlLiBTZWUgdGhlIHRhYmxlIAotICAgICAgaW4gdGhpcyB0b3BpYyBmb3IgaW5mb3JtYXRpb24gb24gaG93IG5hdHVyYWwgSmF2YSB0eXBlcyBtYXAgdG8gWE1MQmVhbnMgCi0gICAgICB0eXBlcy4gPC9kaXY+Ci0gIAotICA8bGk+IFZhbHVlcyBhc3NpZ25lZCB0byBidWlsdC1pbiBYTUxCZWFucyB0eXBlcyBhcmUgdmFsaWRhdGVkIGluIGtlZXBpbmcgd2l0aCAKLSAgICB0aGUgcnVsZXMgb2YgdGhlIHNjaGVtYSB0eXBlIHRoZXkgcmVwcmVzZW50LiBTbywgZm9yIGV4YW1wbGUsIGFuIGF0dGVtcHQgdG8gCi0gICAgYXNzaWduIGEgbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSB0byBhbiA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+WG1sUG9zaXRpdmVJbnRlZ2VyPC9zcGFuPiAKLSAgICB3aWxsIHRocm93IGFuIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5YbWxWYWx1ZU91dE9mUmFuZ2U8L3NwYW4+IGV4Y2VwdGlvbi48L2xpPgotPC91bD4KLTxkaXY+IAotICA8cD5UaGUgZm9sbG93aW5nIHRhYmxlIGxpc3RzIHRoZSBidWlsdC1pbiBzY2hlbWEgdHlwZXMsIGFsb25nIHdpdGggdGhlaXIgWE1MQmVhbnMgCi0gICAgYW5kIG5hdHVyYWwgSmF2YSBwYXJhbGxlbHMuIFVubGVzcyBvdGhlcndpc2Ugbm90ZWQsIG5hdHVyYWwgSmF2YSB0eXBlcyBhcmUgCi0gICAgaW4gdGhlIDxzcGFuIGNsYXNzPSJsYW5naW5saW5lIj5qYXZhLmxhbmc8L3NwYW4+IHBhY2thZ2U7IFhNTEJlYW4gdHlwZXMgYXJlIAotICAgIGluIHRoZSA8c3BhbiBjbGFzcz0ibGFuZ2lubGluZSI+b3JnLmFwYWNoZS54bWxiZWFuczwvc3Bhbj4gcGFja2FnZS48L3A+Ci08L2Rpdj4KLTxkaXYgaWQ9InRvcGljdGV4dCI+IAotICA8dGFibGU+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZCB3aWR0aD0iMzAlIj48c3Ryb25nPkJ1aWx0LUluIFNjaGVtYSBUeXBlPC9zdHJvbmc+PC90ZD4KLSAgICAgIDx0ZCB3aWR0aD0iMzElIj48c3Ryb25nPlhNTEJlYW4gVHlwZTwvc3Ryb25nPjwvdGQ+Ci0gICAgICA8dGQgd2lkdGg9IjM5JSI+PHN0cm9uZz5OYXR1cmFsIEphdmEgVHlwZTwvc3Ryb25nPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPnhzOmFueVR5cGU8L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L2E+PC90ZD4KLSAgICAgIDx0ZD4gPGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0PC9hPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkdC1hbnlTaW1wbGVUeXBlIiB0YXJnZXQ9Il9ibGFuayI+eHM6YW55U2ltcGxlVHlwZTwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvYT48L3RkPgotICAgICAgPHRkPiA8YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjEvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIiB0YXJnZXQ9Il9ibGFuayI+U3RyaW5nPC9hPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNhbnlVUkkiIHRhcmdldD0iX2JsYW5rIj54czphbnlVUkk8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+WG1sQW55VVJJPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4xL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlN0cmluZzwvYT48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jYmFzZTY0QmluYXJ5IiB0YXJnZXQ9Il9ibGFuayI+eHM6YmFzZTY0QmluYXJ5PC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPlhtbEJhc2U2NEJpbmFyeTwvYT48L3RkPgotICAgICAgPHRkPmJ5dGVbXTwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNib29sZWFuIiB0YXJnZXQ9Il9ibGFuayI+eHM6Ym9vbGVhbjwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+WG1sQm9vbGVhbjwvYT48L3RkPgotICAgICAgPHRkPmJvb2xlYW48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jYnl0ZSIgdGFyZ2V0PSJfYmxhbmsiPnhzOmJ5dGU8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPlhtbEJ5dGU8L2E+PC90ZD4KLSAgICAgIDx0ZD5ieXRlPC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQgaGVpZ2h0PSIxNyI+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2RhdGUiIHRhcmdldD0iX2JsYW5rIj54czpkYXRlPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj5YbWxEYXRlPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIiB0YXJnZXQ9Il9ibGFuayI+amF2YS51dGlsLkNhbGVuZGFyPC9hPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkYXRlVGltZSIgdGFyZ2V0PSJfYmxhbmsiPnhzOmRhdGVUaW1lPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+WG1sRGF0ZVRpbWU8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5qYXZhLnV0aWwuQ2FsZW5kYXI8L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2RlY2ltYWwiIHRhcmdldD0iX2JsYW5rIj54czpkZWNpbWFsPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5qYXZhLm1hdGguQmlnRGVjaW1hbDwvYT48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZG91YmxlIiB0YXJnZXQ9Il9ibGFuayI+eHM6ZG91YmxlPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPlhtbERvdWJsZTwvYT48L3RkPgotICAgICAgPHRkPmRvdWJsZTwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkdXJhdGlvbiIgdGFyZ2V0PSJfYmxhbmsiPnhzOmR1cmF0aW9uPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+WG1sRHVyYXRpb248L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCI+b3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb248L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI0VOVElUSUVTIiB0YXJnZXQ9Il9ibGFuayI+eHM6RU5USVRJRVM8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj5YbWxFTlRJVElFUzwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMS9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5TdHJpbmc8L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI0VOVElUWSIgdGFyZ2V0PSJfYmxhbmsiPnhzOkVOVElUWTwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj5YbWxFTlRJVFk8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjEvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIiB0YXJnZXQ9Il9ibGFuayI+U3RyaW5nPC9hPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNmbG9hdCIgdGFyZ2V0PSJfYmxhbmsiPnhzOmZsb2F0PC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+WG1sRmxvYXQ8L2E+PC90ZD4KLSAgICAgIDx0ZD5mbG9hdDwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNnRGF5IiB0YXJnZXQ9Il9ibGFuayI+eHM6Z0RheTwvYT48L3RkPgotICAgICAgPHRkPjxwPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+WG1sR0RheTwvYT48L3A+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5qYXZhLnV0aWwuQ2FsZW5kYXI8L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2dNb250aCIgdGFyZ2V0PSJfYmxhbmsiPnhzOmdNb250aDwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj5YbWxHTW9udGg8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5qYXZhLnV0aWwuQ2FsZW5kYXI8L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2dNb250aERheSIgdGFyZ2V0PSJfYmxhbmsiPnhzOmdNb250aERheTwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj5YbWxHTW9udGhEYXk8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5qYXZhLnV0aWwuQ2FsZW5kYXI8L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2dZZWFyIiB0YXJnZXQ9Il9ibGFuayI+eHM6Z1llYXI8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj5YbWxHWWVhcjwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmphdmEudXRpbC5DYWxlbmRhcjwvYT48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZ1llYXJNb250aCIgdGFyZ2V0PSJfYmxhbmsiPnhzOmdZZWFyTW9udGg8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPlhtbEdZZWFyTW9udGg8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5qYXZhLnV0aWwuQ2FsZW5kYXI8L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2hleEJpbmFyeSIgdGFyZ2V0PSJfYmxhbmsiPnhzOmhleEJpbmFyeTwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj5YbWxIZXhCaW5hcnk8L2E+PC90ZD4KLSAgICAgIDx0ZD5ieXRlW108L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jSUQiIHRhcmdldD0iX2JsYW5rIj54czpJRDwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPlhtbElEPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4xL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlN0cmluZzwvYT48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jSURSRUYiIHRhcmdldD0iX2JsYW5rIj54czpJRFJFRjwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPlhtbElEUkVGPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4xL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlN0cmluZzwvYT48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jSURSRUZTIiB0YXJnZXQ9Il9ibGFuayI+eHM6SURSRUZTPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPlhtbElEUkVGUzwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMS9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5TdHJpbmc8L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2ludCIgdGFyZ2V0PSJfYmxhbmsiPnhzOmludDwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj5YbWxJbnQ8L2E+PC90ZD4KLSAgICAgIDx0ZD5pbnQ8L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jaW50ZWdlciIgdGFyZ2V0PSJfYmxhbmsiPnhzOmludGVnZXI8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmphdmEubWF0aC5CaWdJbnRlZ2VyPC9hPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNsYW5ndWFnZSIgdGFyZ2V0PSJfYmxhbmsiPnhzOmxhbmd1YWdlPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+WG1sTGFuZ3VhZ2U8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjEvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIiB0YXJnZXQ9Il9ibGFuayI+U3RyaW5nPC9hPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNsb25nIiB0YXJnZXQ9Il9ibGFuayI+eHM6bG9uZzwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+WG1sTG9uZzwvYT48L3RkPgotICAgICAgPHRkPmxvbmc8L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jTmFtZSIgdGFyZ2V0PSJfYmxhbmsiPnhzOk5hbWU8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPlhtbE5hbWU8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjEvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIiB0YXJnZXQ9Il9ibGFuayI+U3RyaW5nPC9hPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNOQ05hbWUiIHRhcmdldD0iX2JsYW5rIj54czpOQ05hbWU8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+WG1sTkNOQU1FPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4xL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlN0cmluZzwvYT48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jbmVnYXRpdmVJbnRlZ2VyIiB0YXJnZXQ9Il9ibGFuayI+eHM6bmVnYXRpdmVJbnRlZ2VyPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5lZ2F0aXZlSW50ZWdlcjwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIiB0YXJnZXQ9Il9ibGFuayI+amF2YS5tYXRoLkJpZ0ludGVnZXI8L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI05NVE9LRU4iIHRhcmdldD0iX2JsYW5rIj54czpOTVRPS0VOPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj5YbWxOTVRPS0VOPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4xL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlN0cmluZzwvYT48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jTk1UT0tFTlMiIHRhcmdldD0iX2JsYW5rIj54czpOTVRPS0VOUzwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPlhtbE5NVE9LRU5TPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4xL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlN0cmluZzwvYT48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jbm9uTmVnYXRpdmVJbnRlZ2VyIiB0YXJnZXQ9Il9ibGFuayI+eHM6bm9uTmVnYXRpdmVJbnRlZ2VyPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIiB0YXJnZXQ9Il9ibGFuayI+amF2YS5tYXRoLkJpZ0ludGVnZXI8L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI25vblBvc2l0aXZlSW50ZWdlciIgdGFyZ2V0PSJfYmxhbmsiPnhzOm5vblBvc2l0aXZlSW50ZWdlcjwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmphdmEubWF0aC5CaWdJbnRlZ2VyPC9hPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNub3JtYWxpemVkU3RyaW5nIiB0YXJnZXQ9Il9ibGFuayI+eHM6bm9ybWFsaXplZFN0cmluZzwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZzwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMS9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiIHRhcmdldD0iX2JsYW5rIj5TdHJpbmc8L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI05PVEFUSU9OIiB0YXJnZXQ9Il9ibGFuayI+eHM6Tk9UQVRJT048L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj5YbWxOT1RBVElPTjwvYT48L3RkPgotICAgICAgPHRkPiBOb3Qgc3VwcG9ydGVkPC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Bvc2l0aXZlSW50ZWdlciIgdGFyZ2V0PSJfYmxhbmsiPnhzOnBvc2l0aXZlSW50ZWdlcjwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXI8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmphdmEubWF0aC5CaWdJbnRlZ2VyPC9hPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNRTmFtZSIgdGFyZ2V0PSJfYmxhbmsiPnhzOlFOYW1lPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+WG1sUU5hbWU8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU8L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Nob3J0IiB0YXJnZXQ9Il9ibGFuayI+eHM6c2hvcnQ8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj5YbWxTaG9ydDwvYT48L3RkPgotICAgICAgPHRkPnNob3J0PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3N0cmluZyIgdGFyZ2V0PSJfYmxhbmsiPnhzOnN0cmluZzwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj5YbWxTdHJpbmc8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjEvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIiB0YXJnZXQ9Il9ibGFuayI+U3RyaW5nPC9hPjwvdGQ+Ci0gICAgPC90cj4KLSAgICA8dHI+IAotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyN0aW1lIiB0YXJnZXQ9Il9ibGFuayI+eHM6dGltZTwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+WG1sVGltZTwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmphdmEudXRpbC5DYWxlbmRhcjwvYT48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jdG9rZW4iIHRhcmdldD0iX2JsYW5rIj54czp0b2tlbjwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Ii4uL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPlhtbFRva2VuPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4xL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlN0cmluZzwvYT48L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jdW5zaWduZWRCeXRlIiB0YXJnZXQ9Il9ibGFuayI+eHM6dW5zaWduZWRCeXRlPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPlhtbFVuc2lnbmVkQnl0ZTwvYT48L3RkPgotICAgICAgPHRkPnNob3J0PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Vuc2lnbmVkSW50IiB0YXJnZXQ9Il9ibGFuayI+eHM6dW5zaWduZWRJbnQ8L2E+PC90ZD4KLSAgICAgIDx0ZD48YSBocmVmPSIuLi9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj5YbWxVbnNpZ25lZEludDwvYT48L3RkPgotICAgICAgPHRkPmxvbmc8L3RkPgotICAgIDwvdHI+Ci0gICAgPHRyPiAKLSAgICAgIDx0ZD48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jdW5zaWduZWRMb25nIiB0YXJnZXQ9Il9ibGFuayI+eHM6dW5zaWduZWRMb25nPC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPlhtbFVuc2lnbmVkTG9uZzwvYT48L3RkPgotICAgICAgPHRkPjxhIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIiB0YXJnZXQ9Il9ibGFuayI+amF2YS5tYXRoLkJpZ0ludGVnZXI8L2E+PC90ZD4KLSAgICA8L3RyPgotICAgIDx0cj4gCi0gICAgICA8dGQ+PGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Vuc2lnbmVkU2hvcnQiIHRhcmdldD0iX2JsYW5rIj54czp1bnNpZ25lZFNob3J0PC9hPjwvdGQ+Ci0gICAgICA8dGQ+PGEgaHJlZj0iLi4vcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj5YbWxVbnNpZ25lZFNob3J0PC9hPjwvdGQ+Ci0gICAgICA8dGQ+aW50PC90ZD4KLSAgICA8L3RyPgotICA8L3RhYmxlPgotPC9kaXY+Ci08ZGl2PiAKLSAgPHAgY2xhc3M9InJlbGF0ZWR0b3BpY3MiPlJlbGF0ZWQgVG9waWNzPC9wPgotICA8cD48YSBocmVmPSJjb25HZXR0aW5nU3RhcnRlZHdpdGhYTUxCZWFucy5odG1sIj5HZXR0aW5nIFN0YXJ0ZWQgd2l0aCBYTUxCZWFuczwvYT48L3A+Ci08L2Rpdj4KLTwhLS0gSW5zdGFuY2VFbmRFZGl0YWJsZSAtLT4gCi08c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KLQotPC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9pbWFnZXMvY29uQ3Vyc29yVG9rZW5Mb2NhdGlvbnMuZ2lmIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvaW1hZ2VzL2NvbkN1cnNvclRva2VuTG9jYXRpb25zLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU2NmQzOC4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9pbWFnZXMvY29uQ3Vyc29yVG9rZW5Mb2NhdGlvbnMuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvaW1hZ2VzL2NvblhNTFR5cGVIaWVyYXJjaHkuZ2lmIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvaW1hZ2VzL2NvblhNTFR5cGVIaWVyYXJjaHkuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzBjMzI2Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL2ltYWdlcy9jb25YTUxUeXBlSGllcmFyY2h5LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9hbGxjbGFzc2VzLWZyYW1lLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2UvYWxsY2xhc3Nlcy1mcmFtZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjdiMjQxLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9hbGxjbGFzc2VzLWZyYW1lLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMzUgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NiBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLUFsbCBDbGFzc2VzIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSJzdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJBbGwgQ2xhc3NlcyAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotPEZPTlQgc2l6ZT0iKzEiIENMQVNTPSJGcmFtZUhlYWRpbmdGb250Ij4KLTxCPkFsbCBDbGFzc2VzPC9CPjwvRk9OVD4KLTxCUj4KLQotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiPgotPFRSPgotPFREIE5PV1JBUD48Rk9OVCBDTEFTUz0iRnJhbWVJdGVtRm9udCI+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+R0RhdGU8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPkdEYXRlQnVpbGRlcjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+R0RhdGVTcGVjaWZpY2F0aW9uPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+R0R1cmF0aW9uPC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+R0R1cmF0aW9uQnVpbGRlcjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9Mb2NhdGlvbi5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPkxvY2F0aW9uPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVDYWNoZS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlFOYW1lQ2FjaGU8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+UU5hbWVTZXQ8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlFOYW1lU2V0QnVpbGRlcjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlR3JvdXAuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5TY2hlbWFBdHRyaWJ1dGVHcm91cDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZi5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlNjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5TY2hlbWFBdHRyaWJ1dGVNb2RlbDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlNjaGVtYUNvbXBvbmVudDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5TY2hlbWFDb21wb25lbnQuUmVmPC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlNjaGVtYUZpZWxkPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsQXR0cmlidXRlLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+U2NoZW1hR2xvYmFsQXR0cmlidXRlPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZi5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlNjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWY8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEVsZW1lbnQuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5TY2hlbWFHbG9iYWxFbGVtZW50PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5SZWYuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5TY2hlbWFHbG9iYWxFbGVtZW50LlJlZjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+U2NoZW1hSWRlbnRpdHlDb25zdHJhaW50PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZi5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWY8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsQXR0cmlidXRlLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+U2NoZW1hTG9jYWxBdHRyaWJ1dGU8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEVsZW1lbnQuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5TY2hlbWFMb2NhbEVsZW1lbnQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFNb2RlbEdyb3VwLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+U2NoZW1hTW9kZWxHcm91cDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYU1vZGVsR3JvdXAuUmVmLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+U2NoZW1hTW9kZWxHcm91cC5SZWY8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+U2NoZW1hUGFydGljbGU8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlNjaGVtYVByb3BlcnR5PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hU3RyaW5nRW51bUVudHJ5Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+U2NoZW1hU3RyaW5nRW51bUVudHJ5PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlNjaGVtYVR5cGU8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLlJlZi5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlNjaGVtYVR5cGUuUmVmPC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+U2NoZW1hVHlwZUxvYWRlcjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uPC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+U2NoZW1hVHlwZVN5c3RlbTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+U2ltcGxlVmFsdWU8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+U3RyaW5nRW51bUFic3RyYWN0QmFzZTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5UYWJsZS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlN0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGU8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxBbnlTaW1wbGVUeXBlPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxBbnlVUkk8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbEFueVVSSS5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxCYXNlNjRCaW5hcnk8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbEJhc2U2NEJpbmFyeS5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbEJlYW5zPC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sQm9vbGVhbjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbEJvb2xlYW4uRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbEJ5dGU8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxCeXRlLkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbENhbGVuZGFyLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sQ2FsZW5kYXI8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbEN1cnNvcjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5DaGFuZ2VTdGFtcC5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbEN1cnNvci5DaGFuZ2VTdGFtcDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuWG1sQm9va21hcmsuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxDdXJzb3IuWG1sQm9va21hcms8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxNYXJrLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sQ3Vyc29yLlhtbE1hcms8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sRGF0ZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbERhdGUuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxEYXRlVGltZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxEYXRlVGltZS5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sRGVjaW1hbDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbERlY2ltYWwuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sRG9jdW1lbnRQcm9wZXJ0aWVzPC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxEb3VibGU8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbERvdWJsZS5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbER1cmF0aW9uPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbER1cmF0aW9uLkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sRU5USVRJRVM8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sRU5USVRJRVMuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sRU5USVRZPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxFTlRJVFkuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxFcnJvcjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sRXhjZXB0aW9uPC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGYWN0b3J5SG9vay5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbEZhY3RvcnlIb29rPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmFjdG9yeUhvb2suVGhyZWFkQ29udGV4dC5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQ8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sRmxvYXQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sRmxvYXQuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbEdEYXk8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5LkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxHRGF5LkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbEdNb250aDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sR01vbnRoLkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbEdNb250aERheTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sR01vbnRoRGF5LkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sR1llYXI8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sR1llYXIuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbEdZZWFyTW9udGg8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxHWWVhck1vbnRoLkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbEhleEJpbmFyeTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sSGV4QmluYXJ5LkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sSUQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sSUQuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxJRFJFRjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxJRFJFRi5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxJRFJFRlM8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbElEUkVGUy5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxJbnQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbEludC5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sSW50ZWdlcjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbEludGVnZXIuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxMYW5ndWFnZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxMYW5ndWFnZS5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMaW5lTnVtYmVyLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sTGluZU51bWJlcjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbExvbmc8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxMb25nLkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxOYW1lPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sTmFtZS5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxOQ05hbWU8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbE5DTmFtZS5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxOZWdhdGl2ZUludGVnZXI8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sTk1UT0tFTjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbE5NVE9LRU4uRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxOTVRPS0VOUzwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxOTVRPS0VOUy5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sTm9ybWFsaXplZFN0cmluZzwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxOT1RBVElPTjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxOT1RBVElPTi5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxPYmplY3Q8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbE9iamVjdC5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sT3B0aW9uczwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sUG9zaXRpdmVJbnRlZ2VyPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxRTmFtZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxRTmFtZS5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxSdW50aW1lRXhjZXB0aW9uLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sUnVudGltZUV4Y2VwdGlvbjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2F4SGFuZGxlci5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbFNheEhhbmRsZXI8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbFNob3J0PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbFNob3J0LkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxTaW1wbGVMaXN0PC9BPgotPEJSPgotPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YTUxTdHJlYW1Db25zdGFudHM8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+Ci08QlI+Ci08QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhNTFN0cmVhbVJlYWRlcjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1hNTFN0cmVhbVZhbGlkYXRpb25FeGNlcHRpb24uaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YTUxTdHJlYW1WYWxpZGF0aW9uRXhjZXB0aW9uPC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxTdHJpbmc8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbFN0cmluZy5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sVGltZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbFRpbWUuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxUb2tlbjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxUb2tlbi5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbFRva2VuU291cmNlPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sVW5zaWduZWRCeXRlPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxVbnNpZ25lZEludDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50LkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxVbnNpZ25lZEludC5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxVbnNpZ25lZExvbmc8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbFVuc2lnbmVkTG9uZy5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sVW5zaWduZWRTaG9ydDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbFVuc2lnbmVkU2hvcnQuRmFjdG9yeTwvQT4KLTxCUj4KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ1ZWZlMS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2UvYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMzUgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NiBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLUFsbCBDbGFzc2VzIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSJzdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJBbGwgQ2xhc3NlcyAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotPEZPTlQgc2l6ZT0iKzEiIENMQVNTPSJGcmFtZUhlYWRpbmdGb250Ij4KLTxCPkFsbCBDbGFzc2VzPC9CPjwvRk9OVD4KLTxCUj4KLQotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiPgotPFRSPgotPFREIE5PV1JBUD48Rk9OVCBDTEFTUz0iRnJhbWVJdGVtRm9udCI+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCIgVEFSR0VUPSIiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCIgVEFSR0VUPSIiPkdEYXRlPC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCIgVEFSR0VUPSIiPkdEYXRlQnVpbGRlcjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiIFRBUkdFVD0iIj48ST5HRGF0ZVNwZWNpZmljYXRpb248L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCIgVEFSR0VUPSIiPkdEdXJhdGlvbjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sIiBUQVJHRVQ9IiI+R0R1cmF0aW9uQnVpbGRlcjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIiBUQVJHRVQ9IiI+PEk+R0R1cmF0aW9uU3BlY2lmaWNhdGlvbjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL0xvY2F0aW9uLmh0bWwiIFRBUkdFVD0iIj48ST5Mb2NhdGlvbjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lQ2FjaGUuaHRtbCIgVEFSR0VUPSIiPlFOYW1lQ2FjaGU8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwiIFRBUkdFVD0iIj5RTmFtZVNldDwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwiIFRBUkdFVD0iIj5RTmFtZVNldEJ1aWxkZXI8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIiBUQVJHRVQ9IiI+PEk+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlR3JvdXAuaHRtbCIgVEFSR0VUPSIiPjxJPlNjaGVtYUF0dHJpYnV0ZUdyb3VwPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmLmh0bWwiIFRBUkdFVD0iIj5TY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWY8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZU1vZGVsLmh0bWwiIFRBUkdFVD0iIj48ST5TY2hlbWFBdHRyaWJ1dGVNb2RlbDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sIiBUQVJHRVQ9IiI+PEk+U2NoZW1hQ29tcG9uZW50PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIiBUQVJHRVQ9IiI+U2NoZW1hQ29tcG9uZW50LlJlZjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCIgVEFSR0VUPSIiPjxJPlNjaGVtYUZpZWxkPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsQXR0cmlidXRlLmh0bWwiIFRBUkdFVD0iIj48ST5TY2hlbWFHbG9iYWxBdHRyaWJ1dGU8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmLmh0bWwiIFRBUkdFVD0iIj5TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmPC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50Lmh0bWwiIFRBUkdFVD0iIj48ST5TY2hlbWFHbG9iYWxFbGVtZW50PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5SZWYuaHRtbCIgVEFSR0VUPSIiPlNjaGVtYUdsb2JhbEVsZW1lbnQuUmVmPC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuaHRtbCIgVEFSR0VUPSIiPjxJPlNjaGVtYUlkZW50aXR5Q29uc3RyYWludDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWYuaHRtbCIgVEFSR0VUPSIiPlNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWY8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsQXR0cmlidXRlLmh0bWwiIFRBUkdFVD0iIj48ST5TY2hlbWFMb2NhbEF0dHJpYnV0ZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsRWxlbWVudC5odG1sIiBUQVJHRVQ9IiI+PEk+U2NoZW1hTG9jYWxFbGVtZW50PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTW9kZWxHcm91cC5odG1sIiBUQVJHRVQ9IiI+PEk+U2NoZW1hTW9kZWxHcm91cDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYU1vZGVsR3JvdXAuUmVmLmh0bWwiIFRBUkdFVD0iIj5TY2hlbWFNb2RlbEdyb3VwLlJlZjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCIgVEFSR0VUPSIiPjxJPlNjaGVtYVBhcnRpY2xlPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCIgVEFSR0VUPSIiPjxJPlNjaGVtYVByb3BlcnR5PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hU3RyaW5nRW51bUVudHJ5Lmh0bWwiIFRBUkdFVD0iIj48ST5TY2hlbWFTdHJpbmdFbnVtRW50cnk8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiIFRBUkdFVD0iIj48ST5TY2hlbWFUeXBlPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5SZWYuaHRtbCIgVEFSR0VUPSIiPlNjaGVtYVR5cGUuUmVmPC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiIFRBUkdFVD0iIj48ST5TY2hlbWFUeXBlTG9hZGVyPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sIiBUQVJHRVQ9IiI+U2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sIiBUQVJHRVQ9IiI+PEk+U2NoZW1hVHlwZVN5c3RlbTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiIFRBUkdFVD0iIj48ST5TaW1wbGVWYWx1ZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuaHRtbCIgVEFSR0VUPSIiPlN0cmluZ0VudW1BYnN0cmFjdEJhc2U8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGUuaHRtbCIgVEFSR0VUPSIiPlN0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGU8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCIgVEFSR0VUPSIiPjxJPlhtbEFueVNpbXBsZVR5cGU8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSIiPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiIFRBUkdFVD0iIj48ST5YbWxBbnlVUkk8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sIiBUQVJHRVQ9IiI+WG1sQW55VVJJLkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIiBUQVJHRVQ9IiI+PEk+WG1sQmFzZTY0QmluYXJ5PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCIgVEFSR0VUPSIiPlhtbEJhc2U2NEJpbmFyeS5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sIiBUQVJHRVQ9IiI+WG1sQmVhbnM8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCIgVEFSR0VUPSIiPjxJPlhtbEJvb2xlYW48L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSIiPlhtbEJvb2xlYW4uRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIiBUQVJHRVQ9IiI+PEk+WG1sQnl0ZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuRmFjdG9yeS5odG1sIiBUQVJHRVQ9IiI+WG1sQnl0ZS5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sIiBUQVJHRVQ9IiI+WG1sQ2FsZW5kYXI8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIiBUQVJHRVQ9IiI+PEk+WG1sQ3Vyc29yPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLkNoYW5nZVN0YW1wLmh0bWwiIFRBUkdFVD0iIj48ST5YbWxDdXJzb3IuQ2hhbmdlU3RhbXA8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwiIFRBUkdFVD0iIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuWG1sQm9va21hcmsuaHRtbCIgVEFSR0VUPSIiPlhtbEN1cnNvci5YbWxCb29rbWFyazwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbE1hcmsuaHRtbCIgVEFSR0VUPSIiPjxJPlhtbEN1cnNvci5YbWxNYXJrPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIiBUQVJHRVQ9IiI+PEk+WG1sRGF0ZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sIiBUQVJHRVQ9IiI+WG1sRGF0ZS5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIiBUQVJHRVQ9IiI+PEk+WG1sRGF0ZVRpbWU8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iIj5YbWxEYXRlVGltZS5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiIFRBUkdFVD0iIj48ST5YbWxEZWNpbWFsPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iIj5YbWxEZWNpbWFsLkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5odG1sIiBUQVJHRVQ9IiI+WG1sRG9jdW1lbnRQcm9wZXJ0aWVzPC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCIgVEFSR0VUPSIiPjxJPlhtbERvdWJsZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iIj5YbWxEb3VibGUuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCIgVEFSR0VUPSIiPjxJPlhtbER1cmF0aW9uPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uRmFjdG9yeS5odG1sIiBUQVJHRVQ9IiI+WG1sRHVyYXRpb24uRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCIgVEFSR0VUPSIiPjxJPlhtbEVOVElUSUVTPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuRmFjdG9yeS5odG1sIiBUQVJHRVQ9IiI+WG1sRU5USVRJRVMuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiIFRBUkdFVD0iIj48ST5YbWxFTlRJVFk8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuRmFjdG9yeS5odG1sIiBUQVJHRVQ9IiI+WG1sRU5USVRZLkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiIFRBUkdFVD0iIj5YbWxFcnJvcjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiIFRBUkdFVD0iIj5YbWxFeGNlcHRpb248L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLmh0bWwiIFRBUkdFVD0iIj48ST5YbWxGYWN0b3J5SG9vazwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQuaHRtbCIgVEFSR0VUPSIiPlhtbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQ8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiIFRBUkdFVD0iIj48ST5YbWxGbG9hdDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LkZhY3RvcnkuaHRtbCIgVEFSR0VUPSIiPlhtbEZsb2F0LkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCIgVEFSR0VUPSIiPjxJPlhtbEdEYXk8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5LkZhY3RvcnkuaHRtbCIgVEFSR0VUPSIiPlhtbEdEYXkuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiIFRBUkdFVD0iIj48ST5YbWxHTW9udGg8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sIiBUQVJHRVQ9IiI+WG1sR01vbnRoLkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIiBUQVJHRVQ9IiI+PEk+WG1sR01vbnRoRGF5PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCIgVEFSR0VUPSIiPlhtbEdNb250aERheS5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIiBUQVJHRVQ9IiI+PEk+WG1sR1llYXI8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iIj5YbWxHWWVhci5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiIFRBUkdFVD0iIj48ST5YbWxHWWVhck1vbnRoPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iIj5YbWxHWWVhck1vbnRoLkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIiBUQVJHRVQ9IiI+PEk+WG1sSGV4QmluYXJ5PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5LkZhY3RvcnkuaHRtbCIgVEFSR0VUPSIiPlhtbEhleEJpbmFyeS5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIiBUQVJHRVQ9IiI+PEk+WG1sSUQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iIj5YbWxJRC5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIiBUQVJHRVQ9IiI+PEk+WG1sSURSRUY8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iIj5YbWxJRFJFRi5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCIgVEFSR0VUPSIiPjxJPlhtbElEUkVGUzwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iIj5YbWxJRFJFRlMuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiIFRBUkdFVD0iIj48ST5YbWxJbnQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuRmFjdG9yeS5odG1sIiBUQVJHRVQ9IiI+WG1sSW50LkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCIgVEFSR0VUPSIiPjxJPlhtbEludGVnZXI8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSIiPlhtbEludGVnZXIuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCIgVEFSR0VUPSIiPjxJPlhtbExhbmd1YWdlPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sIiBUQVJHRVQ9IiI+WG1sTGFuZ3VhZ2UuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGluZU51bWJlci5odG1sIiBUQVJHRVQ9IiI+WG1sTGluZU51bWJlcjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIiBUQVJHRVQ9IiI+PEk+WG1sTG9uZzwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuRmFjdG9yeS5odG1sIiBUQVJHRVQ9IiI+WG1sTG9uZy5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiIFRBUkdFVD0iIj48ST5YbWxOYW1lPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iIj5YbWxOYW1lLkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIiBUQVJHRVQ9IiI+PEk+WG1sTkNOYW1lPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSIiPlhtbE5DTmFtZS5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCIgVEFSR0VUPSIiPjxJPlhtbE5lZ2F0aXZlSW50ZWdlcjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iIj5YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIiBUQVJHRVQ9IiI+PEk+WG1sTk1UT0tFTjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uRmFjdG9yeS5odG1sIiBUQVJHRVQ9IiI+WG1sTk1UT0tFTi5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIiBUQVJHRVQ9IiI+PEk+WG1sTk1UT0tFTlM8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iIj5YbWxOTVRPS0VOUy5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCIgVEFSR0VUPSIiPjxJPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iIj5YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiIFRBUkdFVD0iIj48ST5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIiBUQVJHRVQ9IiI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCIgVEFSR0VUPSIiPjxJPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSIiPlhtbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCIgVEFSR0VUPSIiPjxJPlhtbE5PVEFUSU9OPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sIiBUQVJHRVQ9IiI+WG1sTk9UQVRJT04uRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiIFRBUkdFVD0iIj48ST5YbWxPYmplY3Q8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIiBUQVJHRVQ9IiI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCIgVEFSR0VUPSIiPlhtbE9wdGlvbnM8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIiBUQVJHRVQ9IiI+PEk+WG1sUG9zaXRpdmVJbnRlZ2VyPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSIiPlhtbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIiBUQVJHRVQ9IiI+PEk+WG1sUU5hbWU8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iIj5YbWxRTmFtZS5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxSdW50aW1lRXhjZXB0aW9uLmh0bWwiIFRBUkdFVD0iIj5YbWxSdW50aW1lRXhjZXB0aW9uPC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTYXhIYW5kbGVyLmh0bWwiIFRBUkdFVD0iIj48ST5YbWxTYXhIYW5kbGVyPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCIgVEFSR0VUPSIiPjxJPlhtbFNob3J0PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuRmFjdG9yeS5odG1sIiBUQVJHRVQ9IiI+WG1sU2hvcnQuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sIiBUQVJHRVQ9IiI+WG1sU2ltcGxlTGlzdDwvQT4KLTxCUj4KLTxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwiIFRBUkdFVD0iIj48ST5YTUxTdHJlYW1Db25zdGFudHM8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCIgVEFSR0VUPSIiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT4KLTxCUj4KLTxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwiIFRBUkdFVD0iIj48ST5YTUxTdHJlYW1SZWFkZXI8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YTUxTdHJlYW1WYWxpZGF0aW9uRXhjZXB0aW9uLmh0bWwiIFRBUkdFVD0iIj5YTUxTdHJlYW1WYWxpZGF0aW9uRXhjZXB0aW9uPC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCIgVEFSR0VUPSIiPjxJPlhtbFN0cmluZzwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iIj5YbWxTdHJpbmcuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIiBUQVJHRVQ9IiI+PEk+WG1sVGltZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuRmFjdG9yeS5odG1sIiBUQVJHRVQ9IiI+WG1sVGltZS5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIiBUQVJHRVQ9IiI+PEk+WG1sVG9rZW48L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iIj5YbWxUb2tlbi5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIiBUQVJHRVQ9IiI+PEk+WG1sVG9rZW5Tb3VyY2U8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCIgVEFSR0VUPSIiPjxJPlhtbFVuc2lnbmVkQnl0ZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iIj5YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCIgVEFSR0VUPSIiPjxJPlhtbFVuc2lnbmVkSW50PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sIiBUQVJHRVQ9IiI+WG1sVW5zaWduZWRJbnQuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiIFRBUkdFVD0iIj48ST5YbWxVbnNpZ25lZExvbmc8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sIiBUQVJHRVQ9IiI+WG1sVW5zaWduZWRMb25nLkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCIgVEFSR0VUPSIiPjxJPlhtbFVuc2lnbmVkU2hvcnQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCIgVEFSR0VUPSIiPlhtbFVuc2lnbmVkU2hvcnQuRmFjdG9yeTwvQT4KLTxCUj4KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9jb25zdGFudC12YWx1ZXMuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9jb25zdGFudC12YWx1ZXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RiZTc0My4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2UvY29uc3RhbnQtdmFsdWVzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzE3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTQgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1Db25zdGFudCBGaWVsZCBWYWx1ZXMgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9InN0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IkNvbnN0YW50IEZpZWxkIFZhbHVlcyAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0ib3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0ib3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJpbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJoZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9ImluZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iY29uc3RhbnQtdmFsdWVzLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPENFTlRFUj4KLTxIMT4KLUNvbnN0YW50IEZpZWxkIFZhbHVlczwvSDE+Ci08L0NFTlRFUj4KLTxIUiBTSVpFPSI0IiBOT1NIQURFPgotPEI+Q29udGVudHM8L0I+PFVMPgotPExJPjxBIEhSRUY9IiNqYXZheC54bWwiPmphdmF4LnhtbC4qPC9BPgotPExJPjxBIEhSRUY9IiNvcmcuYXBhY2hlIj5vcmcuYXBhY2hlLio8L0E+Ci08L1VMPgotCi08QSBOQU1FPSJqYXZheC54bWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBBTElHTj0ibGVmdCI+PEZPTlQgU0laRT0iKzIiPgotPEI+amF2YXgueG1sLio8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTM+PEI+amF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sIj5YTUxTdHJlYW1Db25zdGFudHM8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbUNvbnN0YW50cy5BVFRSSUJVVEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sI0FUVFJJQlVURSI+QVRUUklCVVRFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9ImphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtQ29uc3RhbnRzLkNEQVRBIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCNDREFUQSI+Q0RBVEE8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xMjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0iamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Db25zdGFudHMuQ0hBUkFDVEVSUyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwjQ0hBUkFDVEVSUyI+Q0hBUkFDVEVSUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjQ8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9ImphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtQ29uc3RhbnRzLkNPTU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sI0NPTU1FTlQiPkNPTU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT41PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbUNvbnN0YW50cy5EVEQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sI0RURCI+RFREPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9ImphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtQ29uc3RhbnRzLkVORF9ET0NVTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwjRU5EX0RPQ1VNRU5UIj5FTkRfRE9DVU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT44PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbUNvbnN0YW50cy5FTkRfRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwjRU5EX0VMRU1FTlQiPkVORF9FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0iamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Db25zdGFudHMuRU5EX0VOVElUWSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwjRU5EX0VOVElUWSI+RU5EX0VOVElUWTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE1PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbUNvbnN0YW50cy5FTlRJVFlfREVDTEFSQVRJT04iPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sI0VOVElUWV9ERUNMQVJBVElPTiI+RU5USVRZX0RFQ0xBUkFUSU9OPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTc8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9ImphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtQ29uc3RhbnRzLkVOVElUWV9SRUZFUkVOQ0UiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sI0VOVElUWV9SRUZFUkVOQ0UiPkVOVElUWV9SRUZFUkVOQ0U8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT45PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbUNvbnN0YW50cy5OQU1FU1BBQ0UiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sI05BTUVTUEFDRSI+TkFNRVNQQUNFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTM8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9ImphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtQ29uc3RhbnRzLk5PVEFUSU9OX0RFQ0xBUkFUSU9OIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCNOT1RBVElPTl9ERUNMQVJBVElPTiI+Tk9UQVRJT05fREVDTEFSQVRJT048L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xNjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0iamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Db25zdGFudHMuUFJPQ0VTU0lOR19JTlNUUlVDVElPTiI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwjUFJPQ0VTU0lOR19JTlNUUlVDVElPTiI+UFJPQ0VTU0lOR19JTlNUUlVDVElPTjwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjM8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9ImphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtQ29uc3RhbnRzLlNQQUNFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCNTUEFDRSI+U1BBQ0U8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT42PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbUNvbnN0YW50cy5TVEFSVF9ET0NVTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwjU1RBUlRfRE9DVU1FTlQiPlNUQVJUX0RPQ1VNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0iamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Db25zdGFudHMuU1RBUlRfRUxFTUVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwjU1RBUlRfRUxFTUVOVCI+U1RBUlRfRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9ImphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtQ29uc3RhbnRzLlNUQVJUX0VOVElUWSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwjU1RBUlRfRU5USVRZIj5TVEFSVF9FTlRJVFk8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xNDwvQ09ERT48L1REPgotPC9UUj4KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxQPgotCi08UD4KLTxBIE5BTUU9Im9yZy5hcGFjaGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBBTElHTj0ibGVmdCI+PEZPTlQgU0laRT0iKzIiPgotPEI+b3JnLmFwYWNoZS4qPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0zPjxCPm9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24uSEFTX0RBWSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjSEFTX0RBWSI+SEFTX0RBWTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjg8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uLkhBU19NT05USCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjSEFTX01PTlRIIj5IQVNfTU9OVEg8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT40PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlU3BlY2lmaWNhdGlvbi5IQVNfVElNRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjSEFTX1RJTUUiPkhBU19USU1FPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTY8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uLkhBU19USU1FWk9ORSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjSEFTX1RJTUVaT05FIj5IQVNfVElNRVpPTkU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlU3BlY2lmaWNhdGlvbi5IQVNfWUVBUiI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjSEFTX1lFQVIiPkhBU19ZRUFSPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjwvQ09ERT48L1REPgotPC9UUj4KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxQPgotCi08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mz48Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCI+U2NoZW1hQXR0cmlidXRlTW9kZWw8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUF0dHJpYnV0ZU1vZGVsLkxBWCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCNMQVgiPkxBWDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQXR0cmlidXRlTW9kZWwuTk9ORSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCNOT05FIj5OT05FPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFBdHRyaWJ1dGVNb2RlbC5TS0lQIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVNb2RlbC5odG1sI1NLSVAiPlNLSVA8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4zPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUF0dHJpYnV0ZU1vZGVsLlNUUklDVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCNTVFJJQ1QiPlNUUklDVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE8L0NPREU+PC9URD4KLTwvVFI+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08UD4KLQotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTM+PEI+b3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sIj5TY2hlbWFDb21wb25lbnQ8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudC5BVFRSSUJVVEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI0FUVFJJQlVURSI+QVRUUklCVVRFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQuQVRUUklCVVRFX0dST1VQIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNBVFRSSUJVVEVfR1JPVVAiPkFUVFJJQlVURV9HUk9VUDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjQ8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQ29tcG9uZW50LkVMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI0VMRU1FTlQiPkVMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudC5JREVOVElUWV9DT05TVFJBSU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNJREVOVElUWV9DT05TVFJBSU5UIj5JREVOVElUWV9DT05TVFJBSU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQuTU9ERUxfR1JPVVAiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI01PREVMX0dST1VQIj5NT0RFTF9HUk9VUDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjY8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQ29tcG9uZW50Lk5PVEFUSU9OIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNOT1RBVElPTiI+Tk9UQVRJT048L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT43PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudC5UWVBFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNUWVBFIj5UWVBFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxQPgotCi08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mz48Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Lmh0bWwiPlNjaGVtYUlkZW50aXR5Q29uc3RyYWludDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LkNDX0tFWSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Lmh0bWwjQ0NfS0VZIj5DQ19LRVk8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5DQ19LRVlSRUYiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5odG1sI0NDX0tFWVJFRiI+Q0NfS0VZUkVGPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuQ0NfVU5JUVVFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuaHRtbCNDQ19VTklRVUUiPkNDX1VOSVFVRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjM8L0NPREU+PC9URD4KLTwvVFI+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08UD4KLQotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTM+PEI+b3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsQXR0cmlidXRlLmh0bWwiPlNjaGVtYUxvY2FsQXR0cmlidXRlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFMb2NhbEF0dHJpYnV0ZS5PUFRJT05BTCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxBdHRyaWJ1dGUuaHRtbCNPUFRJT05BTCI+T1BUSU9OQUw8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4yPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUxvY2FsQXR0cmlidXRlLlBST0hJQklURUQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsQXR0cmlidXRlLmh0bWwjUFJPSElCSVRFRCI+UFJPSElCSVRFRDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hTG9jYWxBdHRyaWJ1dGUuUkVRVUlSRUQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsQXR0cmlidXRlLmh0bWwjUkVRVUlSRUQiPlJFUVVJUkVEPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzwvQ09ERT48L1REPgotPC9UUj4KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxQPgotCi08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mz48Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCI+U2NoZW1hUGFydGljbGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVBhcnRpY2xlLkFMTCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNBTEwiPkFMTDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hUGFydGljbGUuQ0hPSUNFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI0NIT0lDRSI+Q0hPSUNFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQYXJ0aWNsZS5FTEVNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI0VMRU1FTlQiPkVMRU1FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT40PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVBhcnRpY2xlLkxBWCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNMQVgiPkxBWDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hUGFydGljbGUuU0VRVUVOQ0UiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjU0VRVUVOQ0UiPlNFUVVFTkNFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQYXJ0aWNsZS5TS0lQIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI1NLSVAiPlNLSVA8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4zPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVBhcnRpY2xlLlNUUklDVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNTVFJJQ1QiPlNUUklDVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hUGFydGljbGUuV0lMRENBUkQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjV0lMRENBUkQiPldJTERDQVJEPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NTwvQ09ERT48L1REPgotPC9UUj4KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxQPgotCi08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mz48Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCI+U2NoZW1hUHJvcGVydHk8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVByb3BlcnR5LkNPTlNJU1RFTlRMWSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNDT05TSVNURU5UTFkiPkNPTlNJU1RFTlRMWTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hUHJvcGVydHkuSkFWQV9CSUdfREVDSU1BTCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNKQVZBX0JJR19ERUNJTUFMIj5KQVZBX0JJR19ERUNJTUFMPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+ODwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQcm9wZXJ0eS5KQVZBX0JJR19JTlRFR0VSIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfQklHX0lOVEVHRVIiPkpBVkFfQklHX0lOVEVHRVI8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT45PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVByb3BlcnR5LkpBVkFfQk9PTEVBTiI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNKQVZBX0JPT0xFQU4iPkpBVkFfQk9PTEVBTjwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hUHJvcGVydHkuSkFWQV9CWVRFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfQllURSI+SkFWQV9CWVRFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQcm9wZXJ0eS5KQVZBX0JZVEVfQVJSQVkiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjSkFWQV9CWVRFX0FSUkFZIj5KQVZBX0JZVEVfQVJSQVk8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xMTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQcm9wZXJ0eS5KQVZBX0NBTEVOREFSIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfQ0FMRU5EQVIiPkpBVkFfQ0FMRU5EQVI8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xNzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQcm9wZXJ0eS5KQVZBX0RBVEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjSkFWQV9EQVRFIj5KQVZBX0RBVEU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xNDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQcm9wZXJ0eS5KQVZBX0RPVUJMRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNKQVZBX0RPVUJMRSI+SkFWQV9ET1VCTEU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4zPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVByb3BlcnR5LkpBVkFfRU5VTSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNKQVZBX0VOVU0iPkpBVkFfRU5VTTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE4PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVByb3BlcnR5LkpBVkFfRklSU1RfUFJJTUlUSVZFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfRklSU1RfUFJJTUlUSVZFIj5KQVZBX0ZJUlNUX1BSSU1JVElWRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hUHJvcGVydHkuSkFWQV9GTE9BVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNKQVZBX0ZMT0FUIj5KQVZBX0ZMT0FUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQcm9wZXJ0eS5KQVZBX0dEQVRFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfR0RBVEUiPkpBVkFfR0RBVEU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xMjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQcm9wZXJ0eS5KQVZBX0dEVVJBVElPTiI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNKQVZBX0dEVVJBVElPTiI+SkFWQV9HRFVSQVRJT048L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xMzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQcm9wZXJ0eS5KQVZBX0lOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNKQVZBX0lOVCI+SkFWQV9JTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT42PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVByb3BlcnR5LkpBVkFfTEFTVF9QUklNSVRJVkUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjSkFWQV9MQVNUX1BSSU1JVElWRSI+SkFWQV9MQVNUX1BSSU1JVElWRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjc8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hUHJvcGVydHkuSkFWQV9MSVNUIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfTElTVCI+SkFWQV9MSVNUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTY8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hUHJvcGVydHkuSkFWQV9MT05HIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfTE9ORyI+SkFWQV9MT05HPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQcm9wZXJ0eS5KQVZBX09CSkVDVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNKQVZBX09CSkVDVCI+SkFWQV9PQkpFQ1Q8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xOTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQcm9wZXJ0eS5KQVZBX1FOQU1FIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfUU5BTUUiPkpBVkFfUU5BTUU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xNTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQcm9wZXJ0eS5KQVZBX1NIT1JUIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfU0hPUlQiPkpBVkFfU0hPUlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT41PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVByb3BlcnR5LkpBVkFfU1RSSU5HIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfU1RSSU5HIj5KQVZBX1NUUklORzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjEwPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVByb3BlcnR5Lk5FVkVSIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI05FVkVSIj5ORVZFUjwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hUHJvcGVydHkuVkFSSUFCTEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjVkFSSUFCTEUiPlZBUklBQkxFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQcm9wZXJ0eS5YTUxfT0JKRUNUIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI1hNTF9PQkpFQ1QiPlhNTF9PQkpFQ1Q8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPFA+Ci0KLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0zPjxCPm9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQVRPTUlDIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQVRPTUlDIj5BVE9NSUM8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0FOWV9TSU1QTEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfQU5ZX1NJTVBMRSI+QlRDX0FOWV9TSU1QTEU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4yPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0FOWV9UWVBFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0FOWV9UWVBFIj5CVENfQU5ZX1RZUEU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0FOWV9VUkkiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfQU5ZX1VSSSI+QlRDX0FOWV9VUkk8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT42PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0JBU0VfNjRfQklOQVJZIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0JBU0VfNjRfQklOQVJZIj5CVENfQkFTRV82NF9CSU5BUlk8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT40PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0JPT0xFQU4iPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfQk9PTEVBTiI+QlRDX0JPT0xFQU48L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4zPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0JZVEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfQllURSI+QlRDX0JZVEU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4yNjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19EQVRFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0RBVEUiPkJUQ19EQVRFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTY8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfREFURV9USU1FIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0RBVEVfVElNRSI+QlRDX0RBVEVfVElNRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE0PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0RFQ0lNQUwiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfREVDSU1BTCI+QlRDX0RFQ0lNQUw8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xMTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19ET1VCTEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfRE9VQkxFIj5CVENfRE9VQkxFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfRFVSQVRJT04iPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfRFVSQVRJT04iPkJUQ19EVVJBVElPTjwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjEzPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0VOVElUSUVTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0VOVElUSUVTIj5CVENfRU5USVRJRVM8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT40NDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19FTlRJVFkiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfRU5USVRZIj5CVENfRU5USVRZPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDM8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfRklSU1RfUFJJTUlUSVZFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0ZJUlNUX1BSSU1JVElWRSI+QlRDX0ZJUlNUX1BSSU1JVElWRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfRkxPQVQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfRkxPQVQiPkJUQ19GTE9BVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjk8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfR19EQVkiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfR19EQVkiPkJUQ19HX0RBWTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjIwPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0dfTU9OVEgiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfR19NT05USCI+QlRDX0dfTU9OVEg8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4yMTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19HX01PTlRIX0RBWSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19HX01PTlRIX0RBWSI+QlRDX0dfTU9OVEhfREFZPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTk8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfR19ZRUFSIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0dfWUVBUiI+QlRDX0dfWUVBUjwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE4PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0dfWUVBUl9NT05USCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19HX1lFQVJfTU9OVEgiPkJUQ19HX1lFQVJfTU9OVEg8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xNzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19IRVhfQklOQVJZIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0hFWF9CSU5BUlkiPkJUQ19IRVhfQklOQVJZPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19JRCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19JRCI+QlRDX0lEPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfSURSRUYiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfSURSRUYiPkJUQ19JRFJFRjwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjQxPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0lEUkVGUyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19JRFJFRlMiPkJUQ19JRFJFRlM8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT40MjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19JTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfSU5UIj5CVENfSU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjQ8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfSU5URUdFUiI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19JTlRFR0VSIj5CVENfSU5URUdFUjwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjIyPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0xBTkdVQUdFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0xBTkdVQUdFIj5CVENfTEFOR1VBR0U8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4zOTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19MQVNUX0JVSUxUSU4iPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfTEFTVF9CVUlMVElOIj5CVENfTEFTVF9CVUlMVElOPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDY8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfTEFTVF9QUklNSVRJVkUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfTEFTVF9QUklNSVRJVkUiPkJUQ19MQVNUX1BSSU1JVElWRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjIxPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0xPTkciPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfTE9ORyI+QlRDX0xPTkc8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4yMzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19OQU1FIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX05BTUUiPkJUQ19OQU1FPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+Mzc8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfTkNOQU1FIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX05DTkFNRSI+QlRDX05DTkFNRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjM4PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX05FR0FUSVZFX0lOVEVHRVIiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfTkVHQVRJVkVfSU5URUdFUiI+QlRDX05FR0FUSVZFX0lOVEVHRVI8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4yODwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19OTVRPS0VOIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX05NVE9LRU4iPkJUQ19OTVRPS0VOPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDU8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfTk1UT0tFTlMiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfTk1UT0tFTlMiPkJUQ19OTVRPS0VOUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjQ2PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX05PTl9ORUdBVElWRV9JTlRFR0VSIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX05PTl9ORUdBVElWRV9JTlRFR0VSIj5CVENfTk9OX05FR0FUSVZFX0lOVEVHRVI8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4yOTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19OT05fUE9TSVRJVkVfSU5URUdFUiI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19OT05fUE9TSVRJVkVfSU5URUdFUiI+QlRDX05PTl9QT1NJVElWRV9JTlRFR0VSPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+Mjc8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfTk9STUFMSVpFRF9TVFJJTkciPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfTk9STUFMSVpFRF9TVFJJTkciPkJUQ19OT1JNQUxJWkVEX1NUUklORzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjM1PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX05PVF9CVUlMVElOIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX05PVF9CVUlMVElOIj5CVENfTk9UX0JVSUxUSU48L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX05PVEFUSU9OIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX05PVEFUSU9OIj5CVENfTk9UQVRJT048L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT44PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX1BPU0lUSVZFX0lOVEVHRVIiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfUE9TSVRJVkVfSU5URUdFUiI+QlRDX1BPU0lUSVZFX0lOVEVHRVI8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4zMDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19RTkFNRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19RTkFNRSI+QlRDX1FOQU1FPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19TSE9SVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19TSE9SVCI+QlRDX1NIT1JUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjU8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfU1RSSU5HIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX1NUUklORyI+QlRDX1NUUklORzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjEyPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX1RJTUUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfVElNRSI+QlRDX1RJTUU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xNTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19UT0tFTiI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19UT0tFTiI+QlRDX1RPS0VOPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzY8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfVU5TSUdORURfQllURSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19VTlNJR05FRF9CWVRFIj5CVENfVU5TSUdORURfQllURTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjM0PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX1VOU0lHTkVEX0lOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19VTlNJR05FRF9JTlQiPkJUQ19VTlNJR05FRF9JTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4zMjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19VTlNJR05FRF9MT05HIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX1VOU0lHTkVEX0xPTkciPkJUQ19VTlNJR05FRF9MT05HPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfVU5TSUdORURfU0hPUlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfVU5TSUdORURfU0hPUlQiPkJUQ19VTlNJR05FRF9TSE9SVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjMzPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuRFRfRVhURU5TSU9OIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjRFRfRVhURU5TSU9OIj5EVF9FWFRFTlNJT048L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4yPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuRFRfTk9UX0RFUklWRUQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNEVF9OT1RfREVSSVZFRCI+RFRfTk9UX0RFUklWRUQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuRFRfUkVTVFJJQ1RJT04iPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNEVF9SRVNUUklDVElPTiI+RFRfUkVTVFJJQ1RJT048L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuRUxFTUVOVF9DT05URU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjRUxFTUVOVF9DT05URU5UIj5FTEVNRU5UX0NPTlRFTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4zPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuRU1QVFlfQ09OVEVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0VNUFRZX0NPTlRFTlQiPkVNUFRZX0NPTlRFTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuRkFDRVRfRU5VTUVSQVRJT04iPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNGQUNFVF9FTlVNRVJBVElPTiI+RkFDRVRfRU5VTUVSQVRJT048L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xMTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkZBQ0VUX0ZSQUNUSU9OX0RJR0lUUyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0ZBQ0VUX0ZSQUNUSU9OX0RJR0lUUyI+RkFDRVRfRlJBQ1RJT05fRElHSVRTPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+ODwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkZBQ0VUX0xFTkdUSCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0ZBQ0VUX0xFTkdUSCI+RkFDRVRfTEVOR1RIPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkZBQ0VUX01BWF9FWENMVVNJVkUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNGQUNFVF9NQVhfRVhDTFVTSVZFIj5GQUNFVF9NQVhfRVhDTFVTSVZFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkZBQ0VUX01BWF9JTkNMVVNJVkUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNGQUNFVF9NQVhfSU5DTFVTSVZFIj5GQUNFVF9NQVhfSU5DTFVTSVZFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkZBQ0VUX01BWF9MRU5HVEgiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNGQUNFVF9NQVhfTEVOR1RIIj5GQUNFVF9NQVhfTEVOR1RIPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkZBQ0VUX01JTl9FWENMVVNJVkUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNGQUNFVF9NSU5fRVhDTFVTSVZFIj5GQUNFVF9NSU5fRVhDTFVTSVZFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkZBQ0VUX01JTl9JTkNMVVNJVkUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNGQUNFVF9NSU5fSU5DTFVTSVZFIj5GQUNFVF9NSU5fSU5DTFVTSVZFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkZBQ0VUX01JTl9MRU5HVEgiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNGQUNFVF9NSU5fTEVOR1RIIj5GQUNFVF9NSU5fTEVOR1RIPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkZBQ0VUX1BBVFRFUk4iPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNGQUNFVF9QQVRURVJOIj5GQUNFVF9QQVRURVJOPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5GQUNFVF9UT1RBTF9ESUdJVFMiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNGQUNFVF9UT1RBTF9ESUdJVFMiPkZBQ0VUX1RPVEFMX0RJR0lUUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjc8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5GQUNFVF9XSElURV9TUEFDRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0ZBQ0VUX1dISVRFX1NQQUNFIj5GQUNFVF9XSElURV9TUEFDRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjk8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5MQVNUX0JBU0lDX0ZBQ0VUIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjTEFTVF9CQVNJQ19GQUNFVCI+TEFTVF9CQVNJQ19GQUNFVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjg8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5MQVNUX0ZBQ0VUIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjTEFTVF9GQUNFVCI+TEFTVF9GQUNFVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjExPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuTEFTVF9QUk9QRVJUWSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0xBU1RfUFJPUEVSVFkiPkxBU1RfUFJPUEVSVFk8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xNTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkxJU1QiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNMSVNUIj5MSVNUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLk1JWEVEX0NPTlRFTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNNSVhFRF9DT05URU5UIj5NSVhFRF9DT05URU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLk5PVF9DT01QTEVYX1RZUEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNOT1RfQ09NUExFWF9UWVBFIj5OT1RfQ09NUExFWF9UWVBFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLk5PVF9ERUNJTUFMIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjTk9UX0RFQ0lNQUwiPk5PVF9ERUNJTUFMPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLk5PVF9TSU1QTEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNOT1RfU0lNUExFIj5OT1RfU0lNUExFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLlBBUlRJQUxfT1JERVIiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNQQVJUSUFMX09SREVSIj5QQVJUSUFMX09SREVSPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLlBST1BFUlRZX0JPVU5ERUQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNQUk9QRVJUWV9CT1VOREVEIj5QUk9QRVJUWV9CT1VOREVEPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTM8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5QUk9QRVJUWV9DQVJESU5BTElUWSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1BST1BFUlRZX0NBUkRJTkFMSVRZIj5QUk9QRVJUWV9DQVJESU5BTElUWTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE0PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuUFJPUEVSVFlfTlVNRVJJQyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1BST1BFUlRZX05VTUVSSUMiPlBST1BFUlRZX05VTUVSSUM8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xNTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLlBST1BFUlRZX09SREVSRUQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNQUk9QRVJUWV9PUkRFUkVEIj5QUk9QRVJUWV9PUkRFUkVEPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5TSU1QTEVfQ09OVEVOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1NJTVBMRV9DT05URU5UIj5TSU1QTEVfQ09OVEVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5TSVpFX0JJR19ERUNJTUFMIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjU0laRV9CSUdfREVDSU1BTCI+U0laRV9CSUdfREVDSU1BTDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjEwMDAwMDE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5TSVpFX0JJR19JTlRFR0VSIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjU0laRV9CSUdfSU5URUdFUiI+U0laRV9CSUdfSU5URUdFUjwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjEwMDAwMDA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5TSVpFX0JZVEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNTSVpFX0JZVEUiPlNJWkVfQllURTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjg8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5TSVpFX0lOVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1NJWkVfSU5UIj5TSVpFX0lOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjMyPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuU0laRV9MT05HIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjU0laRV9MT05HIj5TSVpFX0xPTkc8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT42NDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLlNJWkVfU0hPUlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNTSVpFX1NIT1JUIj5TSVpFX1NIT1JUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTY8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5UT1RBTF9PUkRFUiI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1RPVEFMX09SREVSIj5UT1RBTF9PUkRFUjwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5VTklPTiI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1VOSU9OIj5VTklPTjwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5VTk9SREVSRUQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNVTk9SREVSRUQiPlVOT1JERVJFRDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5XU19DT0xMQVBTRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1dTX0NPTExBUFNFIj5XU19DT0xMQVBTRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjM8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5XU19QUkVTRVJWRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1dTX1BSRVNFUlZFIj5XU19QUkVTRVJWRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5XU19SRVBMQUNFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjV1NfUkVQTEFDRSI+V1NfUkVQTEFDRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5XU19VTlNQRUNJRklFRCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1dTX1VOU1BFQ0lGSUVEIj5XU19VTlNQRUNJRklFRDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08UD4KLQotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTM+PEI+b3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCI+U2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbjwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5CQURfSEFORExFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwjQkFEX0hBTkRMRSI+QkFEX0hBTkRMRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjEzPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uQkFEX1BBUlRJQ0xFX1RZUEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCNCQURfUEFSVElDTEVfVFlQRSI+QkFEX1BBUlRJQ0xFX1RZUEU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xMTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLklOVF9UT09fTEFSR0UiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCNJTlRfVE9PX0xBUkdFIj5JTlRfVE9PX0xBUkdFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5JT19FWENFUFRJT04iPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCNJT19FWENFUFRJT04iPklPX0VYQ0VQVElPTjwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjk8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5NQUxGT1JNRURfQ09OVEVOVF9NT0RFTCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sI01BTEZPUk1FRF9DT05URU5UX01PREVMIj5NQUxGT1JNRURfQ09OVEVOVF9NT0RFTDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjc8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5ORVNURURfRVhDRVBUSU9OIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwjTkVTVEVEX0VYQ0VQVElPTiI+TkVTVEVEX0VYQ0VQVElPTjwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjE0PC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uTk9fUkVTT1VSQ0UiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCNOT19SRVNPVVJDRSI+Tk9fUkVTT1VSQ0U8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4wPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uTk9UX1dSSVRFQUJMRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sI05PVF9XUklURUFCTEUiPk5PVF9XUklURUFCTEU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xMjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLlVOUkVDT0dOSVpFRF9JTkRFWF9FTlRSWSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sI1VOUkVDT0dOSVpFRF9JTkRFWF9FTlRSWSI+VU5SRUNPR05JWkVEX0lOREVYX0VOVFJZPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLldST05HX0ZJTEVfVFlQRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sI1dST05HX0ZJTEVfVFlQRSI+V1JPTkdfRklMRV9UWVBFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLldST05HX01BR0lDX0NPT0tJRSI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sI1dST05HX01BR0lDX0NPT0tJRSI+V1JPTkdfTUFHSUNfQ09PS0lFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLldST05HX01BSk9SX1ZFUlNJT04iPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCNXUk9OR19NQUpPUl9WRVJTSU9OIj5XUk9OR19NQUpPUl9WRVJTSU9OPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLldST05HX01JTk9SX1ZFUlNJT04iPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCNXUk9OR19NSU5PUl9WRVJTSU9OIj5XUk9OR19NSU5PUl9WRVJTSU9OPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLldST05HX1BST1BFUlRZX1RZUEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCNXUk9OR19QUk9QRVJUWV9UWVBFIj5XUk9OR19QUk9QRVJUWV9UWVBFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLldST05HX1NJTVBMRV9WQVJJRVRZIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwjV1JPTkdfU0lNUExFX1ZBUklFVFkiPldST05HX1NJTVBMRV9WQVJJRVRZPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+ODwvQ09ERT48L1REPgotPC9UUj4KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxQPgotCi08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mz48Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IuVG9rZW5UeXBlLklOVF9BVFRSIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjSU5UX0FUVFIiPklOVF9BVFRSPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IuVG9rZW5UeXBlLklOVF9DT01NRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjSU5UX0NPTU1FTlQiPklOVF9DT01NRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+ODwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IuVG9rZW5UeXBlLklOVF9FTkQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCNJTlRfRU5EIj5JTlRfRU5EPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IuVG9rZW5UeXBlLklOVF9FTkRET0MiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCNJTlRfRU5ERE9DIj5JTlRfRU5ERE9DPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IuVG9rZW5UeXBlLklOVF9OQU1FU1BBQ0UiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCNJTlRfTkFNRVNQQUNFIj5JTlRfTkFNRVNQQUNFPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IuVG9rZW5UeXBlLklOVF9OT05FIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjSU5UX05PTkUiPklOVF9OT05FPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MDwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IuVG9rZW5UeXBlLklOVF9QUk9DSU5TVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI0lOVF9QUk9DSU5TVCI+SU5UX1BST0NJTlNUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+OTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IuVG9rZW5UeXBlLklOVF9TVEFSVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI0lOVF9TVEFSVCI+SU5UX1NUQVJUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MzwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IuVG9rZW5UeXBlLklOVF9TVEFSVERPQyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI0lOVF9TVEFSVERPQyI+SU5UX1NUQVJURE9DPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MTwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IuVG9rZW5UeXBlLklOVF9URVhUIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjSU5UX1RFWFQiPklOVF9URVhUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+NTwvQ09ERT48L1REPgotPC9UUj4KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxQPgotCi08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mz48Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+WG1sRXJyb3I8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEVycm9yLlNFVkVSSVRZX0VSUk9SIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI1NFVkVSSVRZX0VSUk9SIj5TRVZFUklUWV9FUlJPUjwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXJyb3IuU0VWRVJJVFlfSU5GTyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCNTRVZFUklUWV9JTkZPIj5TRVZFUklUWV9JTkZPPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+MjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxFcnJvci5TRVZFUklUWV9XQVJOSU5HIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI1NFVkVSSVRZX1dBUk5JTkciPlNFVkVSSVRZX1dBUk5JTkc8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPFA+Ci0KLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0zPjxCPm9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QuRVFVQUwiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0VRVUFMIj5FUVVBTDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPjA8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0LkdSRUFURVJfVEhBTiI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjR1JFQVRFUl9USEFOIj5HUkVBVEVSX1RIQU48L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4xPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdC5MRVNTX1RIQU4iPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0xFU1NfVEhBTiI+TEVTU19USEFOPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+LTE8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Lk5PVF9FUVVBTCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTk9UX0VRVUFMIj5OT1RfRVFVQUw8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4yPC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPFA+Ci0KLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0zPjxCPm9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMuQ0hBUkFDVEVSX0VOQ09ESU5HIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI0NIQVJBQ1RFUl9FTkNPRElORyI+Q0hBUkFDVEVSX0VOQ09ESU5HPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+IkNIQVJBQ1RFUl9FTkNPRElORyI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5DT01QSUxFX0RPV05MT0FEX1VSTFMiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjQ09NUElMRV9ET1dOTE9BRF9VUkxTIj5DT01QSUxFX0RPV05MT0FEX1VSTFM8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4iQ09NUElMRV9ET1dOTE9BRF9VUkxTIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zLkNPTVBJTEVfTURFRl9OQU1FU1BBQ0VTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI0NPTVBJTEVfTURFRl9OQU1FU1BBQ0VTIj5DT01QSUxFX01ERUZfTkFNRVNQQUNFUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJDT01QSUxFX01ERUZfTkFNRVNQQUNFUyI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5DT01QSUxFX05PX1BWUl9SVUxFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI0NPTVBJTEVfTk9fUFZSX1JVTEUiPkNPTVBJTEVfTk9fUFZSX1JVTEU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4iQ09NUElMRV9OT19QVlJfUlVMRSI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5DT01QSUxFX05PX1VQQV9SVUxFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI0NPTVBJTEVfTk9fVVBBX1JVTEUiPkNPTVBJTEVfTk9fVVBBX1JVTEU8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4iQ09NUElMRV9OT19VUEFfUlVMRSI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5DT01QSUxFX05PX1ZBTElEQVRJT04iPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjQ09NUElMRV9OT19WQUxJREFUSU9OIj5DT01QSUxFX05PX1ZBTElEQVRJT048L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4iQ09NUElMRV9OT19WQUxJREFUSU9OIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zLkNPTVBJTEVfU1VCU1RJVFVURV9OQU1FUyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNDT01QSUxFX1NVQlNUSVRVVEVfTkFNRVMiPkNPTVBJTEVfU1VCU1RJVFVURV9OQU1FUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJDT01QSUxFX1NVQlNUSVRVVEVfTkFNRVMiPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMuRE9DVU1FTlRfU09VUkNFX05BTUUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjRE9DVU1FTlRfU09VUkNFX05BTUUiPkRPQ1VNRU5UX1NPVVJDRV9OQU1FPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+IkRPQ1VNRU5UX1NPVVJDRV9OQU1FIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zLkRPQ1VNRU5UX1RZUEUiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjRE9DVU1FTlRfVFlQRSI+RE9DVU1FTlRfVFlQRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJET0NVTUVOVF9UWVBFIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zLkVOVElUWV9SRVNPTFZFUiI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNFTlRJVFlfUkVTT0xWRVIiPkVOVElUWV9SRVNPTFZFUjwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJFTlRJVFlfUkVTT0xWRVIiPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMuRVJST1JfTElTVEVORVIiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjRVJST1JfTElTVEVORVIiPkVSUk9SX0xJU1RFTkVSPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+IkVSUk9SX0xJU1RFTkVSIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zLkxPQURfQURESVRJT05BTF9OQU1FU1BBQ0VTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI0xPQURfQURESVRJT05BTF9OQU1FU1BBQ0VTIj5MT0FEX0FERElUSU9OQUxfTkFNRVNQQUNFUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJMT0FEX0FERElUSU9OQUxfTkFNRVNQQUNFUyI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5MT0FEX0xJTkVfTlVNQkVSUyI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNMT0FEX0xJTkVfTlVNQkVSUyI+TE9BRF9MSU5FX05VTUJFUlM8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4iTE9BRF9MSU5FX05VTUJFUlMiPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMuTE9BRF9NRVNTQUdFX0RJR0VTVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNMT0FEX01FU1NBR0VfRElHRVNUIj5MT0FEX01FU1NBR0VfRElHRVNUPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+IkxPQURfTUVTU0FHRV9ESUdFU1QiPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMuTE9BRF9SRVBMQUNFX0RPQ1VNRU5UX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjTE9BRF9SRVBMQUNFX0RPQ1VNRU5UX0VMRU1FTlQiPkxPQURfUkVQTEFDRV9ET0NVTUVOVF9FTEVNRU5UPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+IkxPQURfUkVQTEFDRV9ET0NVTUVOVF9FTEVNRU5UIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zLkxPQURfU1RSSVBfQ09NTUVOVFMiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjTE9BRF9TVFJJUF9DT01NRU5UUyI+TE9BRF9TVFJJUF9DT01NRU5UUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJMT0FEX1NUUklQX0NPTU1FTlRTIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zLkxPQURfU1RSSVBfUFJPQ0lOU1RTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI0xPQURfU1RSSVBfUFJPQ0lOU1RTIj5MT0FEX1NUUklQX1BST0NJTlNUUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJMT0FEX1NUUklQX1BST0NJTlNUUyI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5MT0FEX1NUUklQX1dISVRFU1BBQ0UiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjTE9BRF9TVFJJUF9XSElURVNQQUNFIj5MT0FEX1NUUklQX1dISVRFU1BBQ0U8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4iTE9BRF9TVFJJUF9XSElURVNQQUNFIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zLkxPQURfU1VCU1RJVFVURV9OQU1FU1BBQ0VTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI0xPQURfU1VCU1RJVFVURV9OQU1FU1BBQ0VTIj5MT0FEX1NVQlNUSVRVVEVfTkFNRVNQQUNFUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJMT0FEX1NVQlNUSVRVVEVfTkFNRVNQQUNFUyI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5MT0FEX1RSSU1fVEVYVF9CVUZGRVIiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjTE9BRF9UUklNX1RFWFRfQlVGRkVSIj5MT0FEX1RSSU1fVEVYVF9CVUZGRVI8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4iTE9BRF9UUklNX1RFWFRfQlVGRkVSIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zLlNBVkVfQUdHUkVTU0lWRV9OQU1FU1BBQ0VTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI1NBVkVfQUdHUkVTU0lWRV9OQU1FU1BBQ0VTIj5TQVZFX0FHR1JFU1NJVkVfTkFNRVNQQUNFUzwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJTQVZFX0FHR1JFU1NJVkVfTkFNRVNQQUNFUyI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5TQVZFX0ZJTFRFUl9QUk9DSU5TVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNTQVZFX0ZJTFRFUl9QUk9DSU5TVCI+U0FWRV9GSUxURVJfUFJPQ0lOU1Q8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4iU0FWRV9GSUxURVJfUFJPQ0lOU1QiPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMuU0FWRV9JTVBMSUNJVF9OQU1FU1BBQ0VTIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI1NBVkVfSU1QTElDSVRfTkFNRVNQQUNFUyI+U0FWRV9JTVBMSUNJVF9OQU1FU1BBQ0VTPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+IlNBVkVfSU1QTElDSVRfTkFNRVNQQUNFUyI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5TQVZFX0lOTkVSIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI1NBVkVfSU5ORVIiPlNBVkVfSU5ORVI8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4iU0FWRV9JTk5FUiI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5TQVZFX05BTUVTUEFDRVNfRklSU1QiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjU0FWRV9OQU1FU1BBQ0VTX0ZJUlNUIj5TQVZFX05BTUVTUEFDRVNfRklSU1Q8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4iU0FWRV9OQU1FU1BBQ0VTX0ZJUlNUIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zLlNBVkVfT1VURVIiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjU0FWRV9PVVRFUiI+U0FWRV9PVVRFUjwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJTQVZFX09VVEVSIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zLlNBVkVfUFJFVFRZX1BSSU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI1NBVkVfUFJFVFRZX1BSSU5UIj5TQVZFX1BSRVRUWV9QUklOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJTQVZFX1BSRVRUWV9QUklOVCI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5TQVZFX1BSRVRUWV9QUklOVF9JTkRFTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjU0FWRV9QUkVUVFlfUFJJTlRfSU5ERU5UIj5TQVZFX1BSRVRUWV9QUklOVF9JTkRFTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4iU0FWRV9QUkVUVFlfUFJJTlRfSU5ERU5UIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zLlNBVkVfUFJFVFRZX1BSSU5UX09GRlNFVCI+PCEtLSAtLT48L0E+PFREIEFMSUdOPSJyaWdodCI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHVibGljJm5ic3A7c3RhdGljJm5ic3A7ZmluYWwmbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREIEFMSUdOPSJsZWZ0Ij48Q09ERT48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNTQVZFX1BSRVRUWV9QUklOVF9PRkZTRVQiPlNBVkVfUFJFVFRZX1BSSU5UX09GRlNFVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJTQVZFX1BSRVRUWV9QUklOVF9PRkZTRVQiPC9DT0RFPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMuU0FWRV9TVUdHRVNURURfUFJFRklYRVMiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjU0FWRV9TVUdHRVNURURfUFJFRklYRVMiPlNBVkVfU1VHR0VTVEVEX1BSRUZJWEVTPC9BPjwvQ09ERT48L1REPgotPFREIEFMSUdOPSJyaWdodCI+PENPREU+IlNBVkVfU1VHR0VTVEVEX1BSRUZJWEVTIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zLlNBVkVfU1lOVEhFVElDX0RPQ1VNRU5UX0VMRU1FTlQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjU0FWRV9TWU5USEVUSUNfRE9DVU1FTlRfRUxFTUVOVCI+U0FWRV9TWU5USEVUSUNfRE9DVU1FTlRfRUxFTUVOVDwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJTQVZFX1NZTlRIRVRJQ19ET0NVTUVOVF9FTEVNRU5UIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zLlNBVkVfVVNFX0RFRkFVTFRfTkFNRVNQQUNFIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI1NBVkVfVVNFX0RFRkFVTFRfTkFNRVNQQUNFIj5TQVZFX1VTRV9ERUZBVUxUX05BTUVTUEFDRTwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJTQVZFX1VTRV9ERUZBVUxUX05BTUVTUEFDRSI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5TQVZFX1VTRV9PUEVOX0ZSQUdNRU5UIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI1NBVkVfVVNFX09QRU5fRlJBR01FTlQiPlNBVkVfVVNFX09QRU5fRlJBR01FTlQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4iU0FWRV9VU0VfT1BFTl9GUkFHTUVOVCI8L0NPREU+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5WQUxJREFURV9PTl9TRVQiPjwhLS0gLS0+PC9BPjxURCBBTElHTj0icmlnaHQiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnB1YmxpYyZuYnNwO3N0YXRpYyZuYnNwO2ZpbmFsJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURCBBTElHTj0ibGVmdCI+PENPREU+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjVkFMSURBVEVfT05fU0VUIj5WQUxJREFURV9PTl9TRVQ8L0E+PC9DT0RFPjwvVEQ+Ci08VEQgQUxJR049InJpZ2h0Ij48Q09ERT4iVkFMSURBVEVfT05fU0VUIjwvQ09ERT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zLlhRVUVSWV9DVVJSRU5UX05PREVfVkFSIj48IS0tIC0tPjwvQT48VEQgQUxJR049InJpZ2h0Ij48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wdWJsaWMmbmJzcDtzdGF0aWMmbmJzcDtmaW5hbCZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQgQUxJR049ImxlZnQiPjxDT0RFPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI1hRVUVSWV9DVVJSRU5UX05PREVfVkFSIj5YUVVFUllfQ1VSUkVOVF9OT0RFX1ZBUjwvQT48L0NPREU+PC9URD4KLTxURCBBTElHTj0icmlnaHQiPjxDT0RFPiJYUVVFUllfQ1VSUkVOVF9OT0RFX1ZBUiI8L0NPREU+PC9URD4KLTwvVFI+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08UD4KLQotPFA+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJvdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJvdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJkZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImluZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImhlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJjb25zdGFudC12YWx1ZXMuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSJhbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSJhbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9kZXByZWNhdGVkLWxpc3QuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9kZXByZWNhdGVkLWxpc3QuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA4ZTQ0OS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2UvZGVwcmVjYXRlZC1saXN0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3NTAgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NiBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLURlcHJlY2F0ZWQgTGlzdCAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0ic3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iRGVwcmVjYXRlZCBMaXN0IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJvdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJvdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJpbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJoZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9ImluZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iZGVwcmVjYXRlZC1saXN0Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPENFTlRFUj4KLTxIMj4KLTxCPkRlcHJlY2F0ZWQgQVBJPC9CPjwvSDI+Ci08L0NFTlRFUj4KLQotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RGVwcmVjYXRlZCBNZXRob2RzPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI2JpZ0RlY2ltYWxWYWx1ZSgpIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERlY2ltYWwuYmlnRGVjaW1hbFZhbHVlKCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI2dldEJpZ0RlY2ltYWxWYWx1ZSgpIj48Q09ERT5YbWxEZWNpbWFsLmdldEJpZ0RlY2ltYWxWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjYmlnRGVjaW1hbFZhbHVlKCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWUuYmlnRGVjaW1hbFZhbHVlKCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRCaWdEZWNpbWFsVmFsdWUoKSI+PENPREU+U2ltcGxlVmFsdWUuZ2V0QmlnRGVjaW1hbFZhbHVlKCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI2JpZ0ludGVnZXJWYWx1ZSgpIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEludGVnZXIuYmlnSW50ZWdlclZhbHVlKCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI2dldEJpZ0ludGVnZXJWYWx1ZSgpIj48Q09ERT5YbWxJbnRlZ2VyLmdldEJpZ0ludGVnZXJWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjYmlnSW50ZWdlclZhbHVlKCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWUuYmlnSW50ZWdlclZhbHVlKCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRCaWdJbnRlZ2VyVmFsdWUoKSI+PENPREU+U2ltcGxlVmFsdWUuZ2V0QmlnSW50ZWdlclZhbHVlKCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sI2Jvb2xlYW5WYWx1ZSgpIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJvb2xlYW4uYm9vbGVhblZhbHVlKCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCNnZXRCb29sZWFuVmFsdWUoKSI+PENPREU+WG1sQm9vbGVhbi5nZXRCb29sZWFuVmFsdWUoKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2Jvb2xlYW5WYWx1ZSgpIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlNpbXBsZVZhbHVlLmJvb2xlYW5WYWx1ZSgpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0Qm9vbGVhblZhbHVlKCkiPjxDT0RFPlNpbXBsZVZhbHVlLmdldEJvb2xlYW5WYWx1ZSgpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sI2J5dGVBcnJheVZhbHVlKCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sSGV4QmluYXJ5LmJ5dGVBcnJheVZhbHVlKCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sI2dldEJ5dGVBcnJheVZhbHVlKCkiPjxDT0RFPlhtbEhleEJpbmFyeS5nZXRCeXRlQXJyYXlWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sI2J5dGVBcnJheVZhbHVlKCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQmFzZTY0QmluYXJ5LmJ5dGVBcnJheVZhbHVlKCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sI2dldEJ5dGVBcnJheVZhbHVlKCkiPjxDT0RFPlhtbEJhc2U2NEJpbmFyeS5nZXRCeXRlQXJyYXlWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjYnl0ZUFycmF5VmFsdWUoKSI+b3JnLmFwYWNoZS54bWxiZWFucy5TaW1wbGVWYWx1ZS5ieXRlQXJyYXlWYWx1ZSgpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0Qnl0ZUFycmF5VmFsdWUoKSI+PENPREU+U2ltcGxlVmFsdWUuZ2V0Qnl0ZUFycmF5VmFsdWUoKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwjYnl0ZVZhbHVlKCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQnl0ZS5ieXRlVmFsdWUoKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIGJ5IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sI2dldEJ5dGVWYWx1ZSgpIj48Q09ERT5YbWxCeXRlLmdldEJ5dGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjYnl0ZVZhbHVlKCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWUuYnl0ZVZhbHVlKCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRCeXRlVmFsdWUoKSI+PENPREU+U2ltcGxlVmFsdWUuZ2V0Qnl0ZVZhbHVlKCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sI2NhbGVuZGFyVmFsdWUoKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxUaW1lLmNhbGVuZGFyVmFsdWUoKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwjZ2V0Q2FsZW5kYXJWYWx1ZSgpIj48Q09ERT5YbWxUaW1lLmdldENhbGVuZGFyVmFsdWUoKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwjY2FsZW5kYXJWYWx1ZSgpIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEdZZWFyTW9udGguY2FsZW5kYXJWYWx1ZSgpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCNnZXRDYWxlbmRhclZhbHVlKCkiPjxDT0RFPlhtbEdZZWFyTW9udGguZ2V0Q2FsZW5kYXJWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwjY2FsZW5kYXJWYWx1ZSgpIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEdZZWFyLmNhbGVuZGFyVmFsdWUoKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sI2dldENhbGVuZGFyVmFsdWUoKSI+PENPREU+WG1sR1llYXIuZ2V0Q2FsZW5kYXJWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sI2NhbGVuZGFyVmFsdWUoKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxHTW9udGhEYXkuY2FsZW5kYXJWYWx1ZSgpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sI2dldENhbGVuZGFyVmFsdWUoKSI+PENPREU+WG1sR01vbnRoRGF5LmdldENhbGVuZGFyVmFsdWUoKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCNjYWxlbmRhclZhbHVlKCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sR01vbnRoLmNhbGVuZGFyVmFsdWUoKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCNnZXRDYWxlbmRhclZhbHVlKCkiPjxDT0RFPlhtbEdNb250aC5nZXRDYWxlbmRhclZhbHVlKCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sI2NhbGVuZGFyVmFsdWUoKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxHRGF5LmNhbGVuZGFyVmFsdWUoKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwjZ2V0Q2FsZW5kYXJWYWx1ZSgpIj48Q09ERT5YbWxHRGF5LmdldENhbGVuZGFyVmFsdWUoKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sI2NhbGVuZGFyVmFsdWUoKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxEYXRlVGltZS5jYWxlbmRhclZhbHVlKCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCNnZXRDYWxlbmRhclZhbHVlKCkiPjxDT0RFPlhtbERhdGVUaW1lLmdldENhbGVuZGFyVmFsdWUoKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwjY2FsZW5kYXJWYWx1ZSgpIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERhdGUuY2FsZW5kYXJWYWx1ZSgpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCNnZXRDYWxlbmRhclZhbHVlKCkiPjxDT0RFPlhtbERhdGUuZ2V0Q2FsZW5kYXJWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjY2FsZW5kYXJWYWx1ZSgpIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlNpbXBsZVZhbHVlLmNhbGVuZGFyVmFsdWUoKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldENhbGVuZGFyVmFsdWUoKSI+PENPREU+U2ltcGxlVmFsdWUuZ2V0Q2FsZW5kYXJWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwjZGF0ZVZhbHVlKCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRGF0ZVRpbWUuZGF0ZVZhbHVlKCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCNnZXREYXRlVmFsdWUoKSI+PENPREU+WG1sRGF0ZVRpbWUuZ2V0RGF0ZVZhbHVlKCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sI2RhdGVWYWx1ZSgpIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERhdGUuZGF0ZVZhbHVlKCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sI2dldERhdGVWYWx1ZSgpIj48Q09ERT5YbWxEYXRlLmdldERhdGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZGF0ZVZhbHVlKCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWUuZGF0ZVZhbHVlKCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXREYXRlVmFsdWUoKSI+PENPREU+U2ltcGxlVmFsdWUuZ2V0RGF0ZVZhbHVlKCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwjZG91YmxlVmFsdWUoKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxEb3VibGUuZG91YmxlVmFsdWUoKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCNnZXREb3VibGVWYWx1ZSgpIj48Q09ERT5YbWxEb3VibGUuZ2V0RG91YmxlVmFsdWUoKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2RvdWJsZVZhbHVlKCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWUuZG91YmxlVmFsdWUoKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldERvdWJsZVZhbHVlKCkiPjxDT0RFPlNpbXBsZVZhbHVlLmdldERvdWJsZVZhbHVlKCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNlbnVtVmFsdWUoKSI+b3JnLmFwYWNoZS54bWxiZWFucy5TaW1wbGVWYWx1ZS5lbnVtVmFsdWUoKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldEVudW1WYWx1ZSgpIj48Q09ERT5TaW1wbGVWYWx1ZS5nZXRFbnVtVmFsdWUoKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sI2Zsb2F0VmFsdWUoKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxGbG9hdC5mbG9hdFZhbHVlKCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwjZ2V0RmxvYXRWYWx1ZSgpIj48Q09ERT5YbWxGbG9hdC5nZXRGbG9hdFZhbHVlKCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNmbG9hdFZhbHVlKCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWUuZmxvYXRWYWx1ZSgpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0RmxvYXRWYWx1ZSgpIj48Q09ERT5TaW1wbGVWYWx1ZS5nZXRGbG9hdFZhbHVlKCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sI2dEYXRlVmFsdWUoKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxUaW1lLmdEYXRlVmFsdWUoKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwjZ2V0R0RhdGVWYWx1ZSgpIj48Q09ERT5YbWxUaW1lLmdldEdEYXRlVmFsdWUoKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwjZ0RhdGVWYWx1ZSgpIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEdZZWFyTW9udGguZ0RhdGVWYWx1ZSgpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCNnZXRHRGF0ZVZhbHVlKCkiPjxDT0RFPlhtbEdZZWFyTW9udGguZ2V0R0RhdGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwjZ0RhdGVWYWx1ZSgpIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEdZZWFyLmdEYXRlVmFsdWUoKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sI2dldEdEYXRlVmFsdWUoKSI+PENPREU+WG1sR1llYXIuZ2V0R0RhdGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sI2dEYXRlVmFsdWUoKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxHTW9udGhEYXkuZ0RhdGVWYWx1ZSgpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sI2dldEdEYXRlVmFsdWUoKSI+PENPREU+WG1sR01vbnRoRGF5LmdldEdEYXRlVmFsdWUoKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCNnRGF0ZVZhbHVlKCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sR01vbnRoLmdEYXRlVmFsdWUoKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCNnZXRHRGF0ZVZhbHVlKCkiPjxDT0RFPlhtbEdNb250aC5nZXRHRGF0ZVZhbHVlKCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sI2dEYXRlVmFsdWUoKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxHRGF5LmdEYXRlVmFsdWUoKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwjZ2V0R0RhdGVWYWx1ZSgpIj48Q09ERT5YbWxHRGF5LmdldEdEYXRlVmFsdWUoKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sI2dEYXRlVmFsdWUoKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxEYXRlVGltZS5nRGF0ZVZhbHVlKCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCNnZXRHRGF0ZVZhbHVlKCkiPjxDT0RFPlhtbERhdGVUaW1lLmdldEdEYXRlVmFsdWUoKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwjZ0RhdGVWYWx1ZSgpIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERhdGUuZ0RhdGVWYWx1ZSgpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCNnZXRHRGF0ZVZhbHVlKCkiPjxDT0RFPlhtbERhdGUuZ2V0R0RhdGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ0RhdGVWYWx1ZSgpIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlNpbXBsZVZhbHVlLmdEYXRlVmFsdWUoKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldEdEYXRlVmFsdWUoKSI+PENPREU+U2ltcGxlVmFsdWUuZ2V0R0RhdGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwjZ0R1cmF0aW9uVmFsdWUoKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxEdXJhdGlvbi5nRHVyYXRpb25WYWx1ZSgpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwjZ2V0R0R1cmF0aW9uVmFsdWUoKSI+PENPREU+WG1sRHVyYXRpb24uZ2V0R0R1cmF0aW9uVmFsdWUoKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dEdXJhdGlvblZhbHVlKCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWUuZ0R1cmF0aW9uVmFsdWUoKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldEdEdXJhdGlvblZhbHVlKCkiPjxDT0RFPlNpbXBsZVZhbHVlLmdldEdEdXJhdGlvblZhbHVlKCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sI2ludFZhbHVlKCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sVW5zaWduZWRTaG9ydC5pbnRWYWx1ZSgpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCNnZXRJbnRWYWx1ZSgpIj48Q09ERT5YbWxVbnNpZ25lZFNob3J0LmdldEludFZhbHVlKCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwjaW50VmFsdWUoKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxJbnQuaW50VmFsdWUoKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCNnZXRJbnRWYWx1ZSgpIj48Q09ERT5YbWxJbnQuZ2V0SW50VmFsdWUoKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sI2ludFZhbHVlKCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sR1llYXIuaW50VmFsdWUoKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sI2dldEludFZhbHVlKCkiPjxDT0RFPlhtbEdZZWFyLmdldEludFZhbHVlKCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwjaW50VmFsdWUoKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxHTW9udGguaW50VmFsdWUoKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCNnZXRJbnRWYWx1ZSgpIj48Q09ERT5YbWxHTW9udGguZ2V0SW50VmFsdWUoKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwjaW50VmFsdWUoKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxHRGF5LmludFZhbHVlKCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sI2dldEludFZhbHVlKCkiPjxDT0RFPlhtbEdEYXkuZ2V0SW50VmFsdWUoKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2ludFZhbHVlKCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWUuaW50VmFsdWUoKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldEludFZhbHVlKCkiPjxDT0RFPlNpbXBsZVZhbHVlLmdldEludFZhbHVlKCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCNsaXN0VmFsdWUoKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxOTVRPS0VOUy5saXN0VmFsdWUoKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIGJ5IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCNnZXRMaXN0VmFsdWUoKSI+PENPREU+WG1sTk1UT0tFTlMuZ2V0TGlzdFZhbHVlKCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwjbGlzdFZhbHVlKCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sSURSRUZTLmxpc3RWYWx1ZSgpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgYnkgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCNnZXRMaXN0VmFsdWUoKSI+PENPREU+WG1sSURSRUZTLmdldExpc3RWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwjbGlzdFZhbHVlKCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRU5USVRJRVMubGlzdFZhbHVlKCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwjZ2V0TGlzdFZhbHVlKCkiPjxDT0RFPlhtbEVOVElUSUVTLmdldExpc3RWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjbGlzdFZhbHVlKCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWUubGlzdFZhbHVlKCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRMaXN0VmFsdWUoKSI+PENPREU+U2ltcGxlVmFsdWUuZ2V0TGlzdFZhbHVlKCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCNsb25nVmFsdWUoKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxVbnNpZ25lZEludC5sb25nVmFsdWUoKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sI2dldExvbmdWYWx1ZSgpIj48Q09ERT5YbWxVbnNpZ25lZEludC5nZXRMb25nVmFsdWUoKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwjbG9uZ1ZhbHVlKCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sTG9uZy5sb25nVmFsdWUoKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwjZ2V0TG9uZ1ZhbHVlKCkiPjxDT0RFPlhtbExvbmcuZ2V0TG9uZ1ZhbHVlKCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNsb25nVmFsdWUoKSI+b3JnLmFwYWNoZS54bWxiZWFucy5TaW1wbGVWYWx1ZS5sb25nVmFsdWUoKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldExvbmdWYWx1ZSgpIj48Q09ERT5TaW1wbGVWYWx1ZS5nZXRMb25nVmFsdWUoKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI29iamVjdFNldChqYXZhLmxhbmcuT2JqZWN0KSI+b3JnLmFwYWNoZS54bWxiZWFucy5TaW1wbGVWYWx1ZS5vYmplY3RTZXQoT2JqZWN0KTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldE9iamVjdFZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48Q09ERT5TaW1wbGVWYWx1ZS5zZXRPYmplY3RWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI29iamVjdFZhbHVlKCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWUub2JqZWN0VmFsdWUoKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldE9iamVjdFZhbHVlKCkiPjxDT0RFPlNpbXBsZVZhbHVlLmdldE9iamVjdFZhbHVlKCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCNxTmFtZVZhbHVlKCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sUU5hbWUucU5hbWVWYWx1ZSgpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwjZ2V0UU5hbWVWYWx1ZSgpIj48Q09ERT5YbWxRTmFtZS5nZXRRTmFtZVZhbHVlKCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNxTmFtZVZhbHVlKCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWUucU5hbWVWYWx1ZSgpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0UU5hbWVWYWx1ZSgpIj48Q09ERT5TaW1wbGVWYWx1ZS5nZXRRTmFtZVZhbHVlKCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI3NldChqYXZhLm1hdGguQmlnRGVjaW1hbCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRGVjaW1hbC5zZXQoQmlnRGVjaW1hbCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI3NldEJpZ0RlY2ltYWxWYWx1ZShqYXZhLm1hdGguQmlnRGVjaW1hbCkiPjxDT0RFPlhtbERlY2ltYWwuc2V0QmlnRGVjaW1hbFZhbHVlKGphdmEubWF0aC5CaWdEZWNpbWFsKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldChqYXZhLm1hdGguQmlnRGVjaW1hbCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWUuc2V0KEJpZ0RlY2ltYWwpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0QmlnRGVjaW1hbFZhbHVlKGphdmEubWF0aC5CaWdEZWNpbWFsKSI+PENPREU+U2ltcGxlVmFsdWUuc2V0QmlnRGVjaW1hbFZhbHVlKGphdmEubWF0aC5CaWdEZWNpbWFsKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwjc2V0KGphdmEubWF0aC5CaWdJbnRlZ2VyKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxJbnRlZ2VyLnNldChCaWdJbnRlZ2VyKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwjc2V0QmlnSW50ZWdlclZhbHVlKGphdmEubWF0aC5CaWdJbnRlZ2VyKSI+PENPREU+WG1sSW50ZWdlci5zZXRCaWdJbnRlZ2VyVmFsdWUoamF2YS5tYXRoLkJpZ0ludGVnZXIpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0KGphdmEubWF0aC5CaWdJbnRlZ2VyKSI+b3JnLmFwYWNoZS54bWxiZWFucy5TaW1wbGVWYWx1ZS5zZXQoQmlnSW50ZWdlcik8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRCaWdJbnRlZ2VyVmFsdWUoamF2YS5tYXRoLkJpZ0ludGVnZXIpIj48Q09ERT5TaW1wbGVWYWx1ZS5zZXRCaWdJbnRlZ2VyVmFsdWUoamF2YS5tYXRoLkJpZ0ludGVnZXIpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCNzZXQoYm9vbGVhbikiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQm9vbGVhbi5zZXQoYm9vbGVhbik8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCNzZXRCb29sZWFuVmFsdWUoYm9vbGVhbikiPjxDT0RFPlhtbEJvb2xlYW4uc2V0Qm9vbGVhblZhbHVlKGJvb2xlYW4pPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0KGJvb2xlYW4pIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlNpbXBsZVZhbHVlLnNldChib29sZWFuKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEJvb2xlYW5WYWx1ZShib29sZWFuKSI+PENPREU+U2ltcGxlVmFsdWUuc2V0Qm9vbGVhblZhbHVlKGJvb2xlYW4pPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCNzZXQoYnl0ZSkiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQnl0ZS5zZXQoYnl0ZSk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCNzZXRCeXRlVmFsdWUoYnl0ZSkiPjxDT0RFPlhtbEJ5dGUuc2V0Qnl0ZVZhbHVlKGJ5dGUpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0KGJ5dGUpIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlNpbXBsZVZhbHVlLnNldChieXRlKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEJ5dGVWYWx1ZShieXRlKSI+PENPREU+U2ltcGxlVmFsdWUuc2V0Qnl0ZVZhbHVlKGJ5dGUpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sI3NldChieXRlW10pIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEhleEJpbmFyeS5zZXQoYnl0ZVtdKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIGJ5IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwjc2V0Qnl0ZUFycmF5VmFsdWUoYnl0ZVtdKSI+PENPREU+WG1sSGV4QmluYXJ5LnNldEJ5dGVBcnJheVZhbHVlKGJ5dGVbXSk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwjc2V0KGJ5dGVbXSkiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQmFzZTY0QmluYXJ5LnNldChieXRlW10pPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgYnkgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCNzZXRCeXRlQXJyYXlWYWx1ZShieXRlW10pIj48Q09ERT5YbWxCYXNlNjRCaW5hcnkuc2V0Qnl0ZUFycmF5VmFsdWUoYnl0ZVtdKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldChieXRlW10pIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlNpbXBsZVZhbHVlLnNldChieXRlW10pPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0Qnl0ZUFycmF5VmFsdWUoYnl0ZVtdKSI+PENPREU+U2ltcGxlVmFsdWUuc2V0Qnl0ZUFycmF5VmFsdWUoYnl0ZVtdKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwjc2V0KGphdmEudXRpbC5DYWxlbmRhcikiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sVGltZS5zZXQoQ2FsZW5kYXIpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCNzZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcikiPjxDT0RFPlhtbFRpbWUuc2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCNzZXQoamF2YS51dGlsLkNhbGVuZGFyKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxHWWVhck1vbnRoLnNldChDYWxlbmRhcik8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sI3NldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+PENPREU+WG1sR1llYXJNb250aC5zZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcik8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCNzZXQoamF2YS51dGlsLkNhbGVuZGFyKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxHWWVhci5zZXQoQ2FsZW5kYXIpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwjc2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpIj48Q09ERT5YbWxHWWVhci5zZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcik8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwjc2V0KGphdmEudXRpbC5DYWxlbmRhcikiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sR01vbnRoRGF5LnNldChDYWxlbmRhcik8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwjc2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpIj48Q09ERT5YbWxHTW9udGhEYXkuc2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI3NldChqYXZhLnV0aWwuQ2FsZW5kYXIpIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEdNb250aC5zZXQoQ2FsZW5kYXIpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI3NldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+PENPREU+WG1sR01vbnRoLnNldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwjc2V0KGphdmEudXRpbC5DYWxlbmRhcikiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sR0RheS5zZXQoQ2FsZW5kYXIpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCNzZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcikiPjxDT0RFPlhtbEdEYXkuc2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwjc2V0KGphdmEudXRpbC5DYWxlbmRhcikiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRGF0ZVRpbWUuc2V0KENhbGVuZGFyKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sI3NldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+PENPREU+WG1sRGF0ZVRpbWUuc2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCNzZXQoamF2YS51dGlsLkNhbGVuZGFyKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxEYXRlLnNldChDYWxlbmRhcik8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sI3NldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+PENPREU+WG1sRGF0ZS5zZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcik8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoamF2YS51dGlsLkNhbGVuZGFyKSI+b3JnLmFwYWNoZS54bWxiZWFucy5TaW1wbGVWYWx1ZS5zZXQoQ2FsZW5kYXIpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpIj48Q09ERT5TaW1wbGVWYWx1ZS5zZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcik8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCNzZXQoamF2YS51dGlsLkRhdGUpIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERhdGVUaW1lLnNldChEYXRlKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sI3NldERhdGVWYWx1ZShqYXZhLnV0aWwuRGF0ZSkiPjxDT0RFPlhtbERhdGVUaW1lLnNldERhdGVWYWx1ZShqYXZhLnV0aWwuRGF0ZSk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sI3NldChqYXZhLnV0aWwuRGF0ZSkiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRGF0ZS5zZXQoRGF0ZSk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sI3NldERhdGVWYWx1ZShqYXZhLnV0aWwuRGF0ZSkiPjxDT0RFPlhtbERhdGUuc2V0RGF0ZVZhbHVlKGphdmEudXRpbC5EYXRlKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldChqYXZhLnV0aWwuRGF0ZSkiPm9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWUuc2V0KERhdGUpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0RGF0ZVZhbHVlKGphdmEudXRpbC5EYXRlKSI+PENPREU+U2ltcGxlVmFsdWUuc2V0RGF0ZVZhbHVlKGphdmEudXRpbC5EYXRlKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCNzZXQoZG91YmxlKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxEb3VibGUuc2V0KGRvdWJsZSk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwjc2V0RG91YmxlVmFsdWUoZG91YmxlKSI+PENPREU+WG1sRG91YmxlLnNldERvdWJsZVZhbHVlKGRvdWJsZSk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoZG91YmxlKSI+b3JnLmFwYWNoZS54bWxiZWFucy5TaW1wbGVWYWx1ZS5zZXQoZG91YmxlKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldERvdWJsZVZhbHVlKGRvdWJsZSkiPjxDT0RFPlNpbXBsZVZhbHVlLnNldERvdWJsZVZhbHVlKGRvdWJsZSk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCNzZXQoZmxvYXQpIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEZsb2F0LnNldChmbG9hdCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwjc2V0RmxvYXRWYWx1ZShmbG9hdCkiPjxDT0RFPlhtbEZsb2F0LnNldEZsb2F0VmFsdWUoZmxvYXQpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0KGZsb2F0KSI+b3JnLmFwYWNoZS54bWxiZWFucy5TaW1wbGVWYWx1ZS5zZXQoZmxvYXQpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0RmxvYXRWYWx1ZShmbG9hdCkiPjxDT0RFPlNpbXBsZVZhbHVlLnNldEZsb2F0VmFsdWUoZmxvYXQpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFRpbWUuc2V0KEdEYXRlU3BlY2lmaWNhdGlvbik8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sI3NldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSkiPjxDT0RFPlhtbFRpbWUuc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwjc2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxHWWVhck1vbnRoLnNldChHRGF0ZVNwZWNpZmljYXRpb24pPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCNzZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpIj48Q09ERT5YbWxHWWVhck1vbnRoLnNldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEdZZWFyLnNldChHRGF0ZVNwZWNpZmljYXRpb24pPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwjc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKSI+PENPREU+WG1sR1llYXIuc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEdNb250aERheS5zZXQoR0RhdGVTcGVjaWZpY2F0aW9uKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCNzZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpIj48Q09ERT5YbWxHTW9udGhEYXkuc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEdNb250aC5zZXQoR0RhdGVTcGVjaWZpY2F0aW9uKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCNzZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpIj48Q09ERT5YbWxHTW9udGguc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwjc2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxHRGF5LnNldChHRGF0ZVNwZWNpZmljYXRpb24pPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCNzZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpIj48Q09ERT5YbWxHRGF5LnNldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERhdGVUaW1lLnNldChHRGF0ZVNwZWNpZmljYXRpb24pPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwjc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKSI+PENPREU+WG1sRGF0ZVRpbWUuc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwjc2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxEYXRlLnNldChHRGF0ZVNwZWNpZmljYXRpb24pPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCNzZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpIj48Q09ERT5YbWxEYXRlLnNldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlNpbXBsZVZhbHVlLnNldChHRGF0ZVNwZWNpZmljYXRpb24pPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKSI+PENPREU+U2ltcGxlVmFsdWUuc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvblNwZWNpZmljYXRpb24pIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbER1cmF0aW9uLnNldChHRHVyYXRpb25TcGVjaWZpY2F0aW9uKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sI3NldEdEdXJhdGlvblZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uKSI+PENPREU+WG1sRHVyYXRpb24uc2V0R0R1cmF0aW9uVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb24pPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uU3BlY2lmaWNhdGlvbikiPm9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWUuc2V0KEdEdXJhdGlvblNwZWNpZmljYXRpb24pPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0R0R1cmF0aW9uVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb24pIj48Q09ERT5TaW1wbGVWYWx1ZS5zZXRHRHVyYXRpb25WYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvbik8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sI3NldChpbnQpIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFVuc2lnbmVkU2hvcnQuc2V0KGludCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sI3NldEludFZhbHVlKGludCkiPjxDT0RFPlhtbFVuc2lnbmVkU2hvcnQuc2V0SW50VmFsdWUoaW50KTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCNzZXQoaW50KSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxJbnQuc2V0KGludCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwjc2V0SW50VmFsdWUoaW50KSI+PENPREU+WG1sSW50LnNldEludFZhbHVlKGludCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCNzZXQoaW50KSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxHWWVhci5zZXQoaW50KTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sI3NldEludFZhbHVlKGludCkiPjxDT0RFPlhtbEdZZWFyLnNldEludFZhbHVlKGludCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwjc2V0KGludCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sR01vbnRoLnNldChpbnQpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI3NldEludFZhbHVlKGludCkiPjxDT0RFPlhtbEdNb250aC5zZXRJbnRWYWx1ZShpbnQpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCNzZXQoaW50KSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxHRGF5LnNldChpbnQpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCNzZXRJbnRWYWx1ZShpbnQpIj48Q09ERT5YbWxHRGF5LnNldEludFZhbHVlKGludCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoaW50KSI+b3JnLmFwYWNoZS54bWxiZWFucy5TaW1wbGVWYWx1ZS5zZXQoaW50KTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEludFZhbHVlKGludCkiPjxDT0RFPlNpbXBsZVZhbHVlLnNldEludFZhbHVlKGludCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCNzZXQoamF2YS51dGlsLkxpc3QpIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE5NVE9LRU5TLnNldChMaXN0KTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIGJ5IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCNnZXRMaXN0VmFsdWUoKSI+PENPREU+WG1sTk1UT0tFTlMuZ2V0TGlzdFZhbHVlKCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwjc2V0KGphdmEudXRpbC5MaXN0KSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxJRFJFRlMuc2V0KExpc3QpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgYnkgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCNnZXRMaXN0VmFsdWUoKSI+PENPREU+WG1sSURSRUZTLmdldExpc3RWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwjc2V0KGphdmEudXRpbC5MaXN0KSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxFTlRJVElFUy5zZXQoTGlzdCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwjZ2V0TGlzdFZhbHVlKCkiPjxDT0RFPlhtbEVOVElUSUVTLmdldExpc3RWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0KGphdmEudXRpbC5MaXN0KSI+b3JnLmFwYWNoZS54bWxiZWFucy5TaW1wbGVWYWx1ZS5zZXQoTGlzdCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRMaXN0VmFsdWUoamF2YS51dGlsLkxpc3QpIj48Q09ERT5TaW1wbGVWYWx1ZS5zZXRMaXN0VmFsdWUoamF2YS51dGlsLkxpc3QpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwjc2V0KGxvbmcpIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFVuc2lnbmVkSW50LnNldChsb25nKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sI3NldExvbmdWYWx1ZShsb25nKSI+PENPREU+WG1sVW5zaWduZWRJbnQuc2V0TG9uZ1ZhbHVlKGxvbmcpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCNzZXQobG9uZykiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sTG9uZy5zZXQobG9uZyk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sI3NldExvbmdWYWx1ZShsb25nKSI+PENPREU+WG1sTG9uZy5zZXRMb25nVmFsdWUobG9uZyk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQobG9uZykiPm9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWUuc2V0KGxvbmcpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0TG9uZ1ZhbHVlKGxvbmcpIj48Q09ERT5TaW1wbGVWYWx1ZS5zZXRMb25nVmFsdWUobG9uZyk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCNzZXQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sUU5hbWUuc2V0KFFOYW1lKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sI3NldFFOYW1lVmFsdWUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxDT0RFPlhtbFFOYW1lLnNldFFOYW1lVmFsdWUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPm9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWUuc2V0KFFOYW1lKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldFFOYW1lVmFsdWUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxDT0RFPlNpbXBsZVZhbHVlLnNldFFOYW1lVmFsdWUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwjc2V0KHNob3J0KSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxVbnNpZ25lZEJ5dGUuc2V0KHNob3J0KTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCNzZXRTaG9ydFZhbHVlKHNob3J0KSI+PENPREU+WG1sVW5zaWduZWRCeXRlLnNldFNob3J0VmFsdWUoc2hvcnQpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwjc2V0KHNob3J0KSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxTaG9ydC5zZXQoc2hvcnQpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwjc2V0U2hvcnRWYWx1ZShzaG9ydCkiPjxDT0RFPlhtbFNob3J0LnNldFNob3J0VmFsdWUoc2hvcnQpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0KHNob3J0KSI+b3JnLmFwYWNoZS54bWxiZWFucy5TaW1wbGVWYWx1ZS5zZXQoc2hvcnQpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0U2hvcnRWYWx1ZShzaG9ydCkiPjxDT0RFPlNpbXBsZVZhbHVlLnNldFNob3J0VmFsdWUoc2hvcnQpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXQoamF2YS5sYW5nLlN0cmluZykiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZS5zZXQoU3RyaW5nKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIGJ5IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlLnNldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0KGphdmEubGFuZy5TdHJpbmcpIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlNpbXBsZVZhbHVlLnNldChTdHJpbmcpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0U3RyaW5nVmFsdWUoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPlNpbXBsZVZhbHVlLnNldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuU3RyaW5nRW51bUFic3RyYWN0QmFzZSkiPm9yZy5hcGFjaGUueG1sYmVhbnMuU2ltcGxlVmFsdWUuc2V0KFN0cmluZ0VudW1BYnN0cmFjdEJhc2UpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0RW51bVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuU3RyaW5nRW51bUFic3RyYWN0QmFzZSkiPjxDT0RFPlNpbXBsZVZhbHVlLnNldEVudW1WYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlN0cmluZ0VudW1BYnN0cmFjdEJhc2UpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sI3Nob3J0VmFsdWUoKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxVbnNpZ25lZEJ5dGUuc2hvcnRWYWx1ZSgpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sI2dldFNob3J0VmFsdWUoKSI+PENPREU+WG1sVW5zaWduZWRCeXRlLmdldFNob3J0VmFsdWUoKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sI3Nob3J0VmFsdWUoKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxTaG9ydC5zaG9ydFZhbHVlKCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCNnZXRTaG9ydFZhbHVlKCkiPjxDT0RFPlhtbFNob3J0LmdldFNob3J0VmFsdWUoKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3Nob3J0VmFsdWUoKSI+b3JnLmFwYWNoZS54bWxiZWFucy5TaW1wbGVWYWx1ZS5zaG9ydFZhbHVlKCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRTaG9ydFZhbHVlKCkiPjxDT0RFPlNpbXBsZVZhbHVlLmdldFNob3J0VmFsdWUoKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc3RyaW5nVmFsdWUoKSI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlLnN0cmluZ1ZhbHVlKCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNnZXRTdHJpbmdWYWx1ZSgpIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlLmdldFN0cmluZ1ZhbHVlKCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzdHJpbmdWYWx1ZSgpIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlNpbXBsZVZhbHVlLnN0cmluZ1ZhbHVlKCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRTdHJpbmdWYWx1ZSgpIj48Q09ERT5TaW1wbGVWYWx1ZS5nZXRTdHJpbmdWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwjeGxpc3RWYWx1ZSgpIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE5NVE9LRU5TLnhsaXN0VmFsdWUoKTwvQT4KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxJPnJlcGxhY2VkIGJ5IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCNnZXRMaXN0VmFsdWUoKSI+PENPREU+WG1sTk1UT0tFTlMuZ2V0TGlzdFZhbHVlKCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwjeGxpc3RWYWx1ZSgpIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbElEUkVGUy54bGlzdFZhbHVlKCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sI2dldExpc3RWYWx1ZSgpIj48Q09ERT5YbWxJRFJFRlMuZ2V0TGlzdFZhbHVlKCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCN4bGlzdFZhbHVlKCkiPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRU5USVRJRVMueGxpc3RWYWx1ZSgpPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEk+cmVwbGFjZWQgYnkgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sI2dldExpc3RWYWx1ZSgpIj48Q09ERT5YbWxFTlRJVElFUy5nZXRMaXN0VmFsdWUoKTwvQ09ERT48L0E+PC9JPiZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3hsaXN0VmFsdWUoKSI+b3JnLmFwYWNoZS54bWxiZWFucy5TaW1wbGVWYWx1ZS54bGlzdFZhbHVlKCk8L0E+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRMaXN0VmFsdWUoKSI+PENPREU+U2ltcGxlVmFsdWUuZ2V0TGlzdFZhbHVlKCk8L0NPREU+PC9BPjwvST4mbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0ib3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0ib3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSJpbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImRlcHJlY2F0ZWQtbGlzdC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL2hlbHAtZG9jLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2UvaGVscC1kb2MuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZiZmRjNC4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2UvaGVscC1kb2MuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3NiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ3OjAxIFBEVCAyMDAzIC0tPgotPFRJVExFPgotQVBJIEhlbHAgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9InN0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IkFQSSBIZWxwIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJvdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJvdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJkZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImluZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+SGVscDwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSJpbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImhlbHAtZG9jLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPENFTlRFUj4KLTxIMT4KLUhvdyBUaGlzIEFQSSBEb2N1bWVudCBJcyBPcmdhbml6ZWQ8L0gxPgotPC9DRU5URVI+Ci1UaGlzIEFQSSAoQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcgSW50ZXJmYWNlKSBkb2N1bWVudCBoYXMgcGFnZXMgY29ycmVzcG9uZGluZyB0byB0aGUgaXRlbXMgaW4gdGhlIG5hdmlnYXRpb24gYmFyLCBkZXNjcmliZWQgYXMgZm9sbG93cy48SDM+Ci1PdmVydmlldzwvSDM+Ci08QkxPQ0tRVU9URT4KLQotPFA+Ci1UaGUgPEEgSFJFRj0ib3ZlcnZpZXctc3VtbWFyeS5odG1sIj5PdmVydmlldzwvQT4gcGFnZSBpcyB0aGUgZnJvbnQgcGFnZSBvZiB0aGlzIEFQSSBkb2N1bWVudCBhbmQgcHJvdmlkZXMgYSBsaXN0IG9mIGFsbCBwYWNrYWdlcyB3aXRoIGEgc3VtbWFyeSBmb3IgZWFjaC4gIFRoaXMgcGFnZSBjYW4gYWxzbyBjb250YWluIGFuIG92ZXJhbGwgZGVzY3JpcHRpb24gb2YgdGhlIHNldCBvZiBwYWNrYWdlcy48L0JMT0NLUVVPVEU+Ci08SDM+Ci1QYWNrYWdlPC9IMz4KLTxCTE9DS1FVT1RFPgotCi08UD4KLUVhY2ggcGFja2FnZSBoYXMgYSBwYWdlIHRoYXQgY29udGFpbnMgYSBsaXN0IG9mIGl0cyBjbGFzc2VzIGFuZCBpbnRlcmZhY2VzLCB3aXRoIGEgc3VtbWFyeSBmb3IgZWFjaC4gVGhpcyBwYWdlIGNhbiBjb250YWluIGZvdXIgY2F0ZWdvcmllczo8VUw+Ci08TEk+SW50ZXJmYWNlcyAoaXRhbGljKTxMST5DbGFzc2VzPExJPkV4Y2VwdGlvbnM8TEk+RXJyb3JzPC9VTD4KLTwvQkxPQ0tRVU9URT4KLTxIMz4KLUNsYXNzL0ludGVyZmFjZTwvSDM+Ci08QkxPQ0tRVU9URT4KLQotPFA+Ci1FYWNoIGNsYXNzLCBpbnRlcmZhY2UsIG5lc3RlZCBjbGFzcyBhbmQgbmVzdGVkIGludGVyZmFjZSBoYXMgaXRzIG93biBzZXBhcmF0ZSBwYWdlLiBFYWNoIG9mIHRoZXNlIHBhZ2VzIGhhcyB0aHJlZSBzZWN0aW9ucyBjb25zaXN0aW5nIG9mIGEgY2xhc3MvaW50ZXJmYWNlIGRlc2NyaXB0aW9uLCBzdW1tYXJ5IHRhYmxlcywgYW5kIGRldGFpbGVkIG1lbWJlciBkZXNjcmlwdGlvbnM6PFVMPgotPExJPkNsYXNzIGluaGVyaXRhbmNlIGRpYWdyYW08TEk+RGlyZWN0IFN1YmNsYXNzZXM8TEk+QWxsIEtub3duIFN1YmludGVyZmFjZXM8TEk+QWxsIEtub3duIEltcGxlbWVudGluZyBDbGFzc2VzPExJPkNsYXNzL2ludGVyZmFjZSBkZWNsYXJhdGlvbjxMST5DbGFzcy9pbnRlcmZhY2UgZGVzY3JpcHRpb24KLTxQPgotPExJPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PExJPkZpZWxkIFN1bW1hcnk8TEk+Q29uc3RydWN0b3IgU3VtbWFyeTxMST5NZXRob2QgU3VtbWFyeQotPFA+Ci08TEk+RmllbGQgRGV0YWlsPExJPkNvbnN0cnVjdG9yIERldGFpbDxMST5NZXRob2QgRGV0YWlsPC9VTD4KLUVhY2ggc3VtbWFyeSBlbnRyeSBjb250YWlucyB0aGUgZmlyc3Qgc2VudGVuY2UgZnJvbSB0aGUgZGV0YWlsZWQgZGVzY3JpcHRpb24gZm9yIHRoYXQgaXRlbS4gVGhlIHN1bW1hcnkgZW50cmllcyBhcmUgYWxwaGFiZXRpY2FsLCB3aGlsZSB0aGUgZGV0YWlsZWQgZGVzY3JpcHRpb25zIGFyZSBpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXIgaW4gdGhlIHNvdXJjZSBjb2RlLiBUaGlzIHByZXNlcnZlcyB0aGUgbG9naWNhbCBncm91cGluZ3MgZXN0YWJsaXNoZWQgYnkgdGhlIHByb2dyYW1tZXIuPC9CTE9DS1FVT1RFPgotPEgzPgotVHJlZSAoQ2xhc3MgSGllcmFyY2h5KTwvSDM+Ci08QkxPQ0tRVU9URT4KLVRoZXJlIGlzIGEgPEEgSFJFRj0ib3ZlcnZpZXctdHJlZS5odG1sIj5DbGFzcyBIaWVyYXJjaHk8L0E+IHBhZ2UgZm9yIGFsbCBwYWNrYWdlcywgcGx1cyBhIGhpZXJhcmNoeSBmb3IgZWFjaCBwYWNrYWdlLiBFYWNoIGhpZXJhcmNoeSBwYWdlIGNvbnRhaW5zIGEgbGlzdCBvZiBjbGFzc2VzIGFuZCBhIGxpc3Qgb2YgaW50ZXJmYWNlcy4gVGhlIGNsYXNzZXMgYXJlIG9yZ2FuaXplZCBieSBpbmhlcml0YW5jZSBzdHJ1Y3R1cmUgc3RhcnRpbmcgd2l0aCA8Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPi4gVGhlIGludGVyZmFjZXMgZG8gbm90IGluaGVyaXQgZnJvbSA8Y29kZT5qYXZhLmxhbmcuT2JqZWN0PC9jb2RlPi48VUw+Ci08TEk+V2hlbiB2aWV3aW5nIHRoZSBPdmVydmlldyBwYWdlLCBjbGlja2luZyBvbiAiVHJlZSIgZGlzcGxheXMgdGhlIGhpZXJhcmNoeSBmb3IgYWxsIHBhY2thZ2VzLjxMST5XaGVuIHZpZXdpbmcgYSBwYXJ0aWN1bGFyIHBhY2thZ2UsIGNsYXNzIG9yIGludGVyZmFjZSBwYWdlLCBjbGlja2luZyAiVHJlZSIgZGlzcGxheXMgdGhlIGhpZXJhcmNoeSBmb3Igb25seSB0aGF0IHBhY2thZ2UuPC9VTD4KLTwvQkxPQ0tRVU9URT4KLTxIMz4KLURlcHJlY2F0ZWQgQVBJPC9IMz4KLTxCTE9DS1FVT1RFPgotVGhlIDxBIEhSRUY9ImRlcHJlY2F0ZWQtbGlzdC5odG1sIj5EZXByZWNhdGVkIEFQSTwvQT4gcGFnZSBsaXN0cyBhbGwgb2YgdGhlIEFQSSB0aGF0IGhhdmUgYmVlbiBkZXByZWNhdGVkLiBBIGRlcHJlY2F0ZWQgQVBJIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdXNlLCBnZW5lcmFsbHkgZHVlIHRvIGltcHJvdmVtZW50cywgYW5kIGEgcmVwbGFjZW1lbnQgQVBJIGlzIHVzdWFsbHkgZ2l2ZW4uIERlcHJlY2F0ZWQgQVBJcyBtYXkgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgaW1wbGVtZW50YXRpb25zLjwvQkxPQ0tRVU9URT4KLTxIMz4KLUluZGV4PC9IMz4KLTxCTE9DS1FVT1RFPgotVGhlIDxBIEhSRUY9ImluZGV4LWFsbC5odG1sIj5JbmRleDwvQT4gY29udGFpbnMgYW4gYWxwaGFiZXRpYyBsaXN0IG9mIGFsbCBjbGFzc2VzLCBpbnRlcmZhY2VzLCBjb25zdHJ1Y3RvcnMsIG1ldGhvZHMsIGFuZCBmaWVsZHMuPC9CTE9DS1FVT1RFPgotPEgzPgotUHJldi9OZXh0PC9IMz4KLVRoZXNlIGxpbmtzIHRha2UgeW91IHRvIHRoZSBuZXh0IG9yIHByZXZpb3VzIGNsYXNzLCBpbnRlcmZhY2UsIHBhY2thZ2UsIG9yIHJlbGF0ZWQgcGFnZS48SDM+Ci1GcmFtZXMvTm8gRnJhbWVzPC9IMz4KLVRoZXNlIGxpbmtzIHNob3cgYW5kIGhpZGUgdGhlIEhUTUwgZnJhbWVzLiAgQWxsIHBhZ2VzIGFyZSBhdmFpbGFibGUgd2l0aCBvciB3aXRob3V0IGZyYW1lcy4KLTxQPgotPEgzPgotU2VyaWFsaXplZCBGb3JtPC9IMz4KLUVhY2ggc2VyaWFsaXphYmxlIG9yIGV4dGVybmFsaXphYmxlIGNsYXNzIGhhcyBhIGRlc2NyaXB0aW9uIG9mIGl0cyBzZXJpYWxpemF0aW9uIGZpZWxkcyBhbmQgbWV0aG9kcy4gVGhpcyBpbmZvcm1hdGlvbiBpcyBvZiBpbnRlcmVzdCB0byByZS1pbXBsZW1lbnRvcnMsIG5vdCB0byBkZXZlbG9wZXJzIHVzaW5nIHRoZSBBUEkuIFdoaWxlIHRoZXJlIGlzIG5vIGxpbmsgaW4gdGhlIG5hdmlnYXRpb24gYmFyLCB5b3UgY2FuIGdldCB0byB0aGlzIGluZm9ybWF0aW9uIGJ5IGdvaW5nIHRvIGFueSBzZXJpYWxpemVkIGNsYXNzIGFuZCBjbGlja2luZyAiU2VyaWFsaXplZCBGb3JtIiBpbiB0aGUgIlNlZSBhbHNvIiBzZWN0aW9uIG9mIHRoZSBjbGFzcyBkZXNjcmlwdGlvbi4KLTxQPgotPEZPTlQgU0laRT0iLTEiPgotPEVNPgotVGhpcyBoZWxwIGZpbGUgYXBwbGllcyB0byBBUEkgZG9jdW1lbnRhdGlvbiBnZW5lcmF0ZWQgdXNpbmcgdGhlIHN0YW5kYXJkIGRvY2xldC48L0VNPgotPC9GT05UPgotPEJSPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0ib3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0ib3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJpbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkhlbHA8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJoZWxwLWRvYy5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL2luZGV4LWFsbC5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL2luZGV4LWFsbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MThmMzFlLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9pbmRleC1hbGwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDgwNDMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NSBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLUluZGV4IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSJzdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJJbmRleCAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0ib3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0ib3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkluZGV4PC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSJpbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9ImluZGV4LWFsbC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxBIEhSRUY9IiNfQV8iPkE8L0E+IDxBIEhSRUY9IiNfQl8iPkI8L0E+IDxBIEhSRUY9IiNfQ18iPkM8L0E+IDxBIEhSRUY9IiNfRF8iPkQ8L0E+IDxBIEhSRUY9IiNfRV8iPkU8L0E+IDxBIEhSRUY9IiNfRl8iPkY8L0E+IDxBIEhSRUY9IiNfR18iPkc8L0E+IDxBIEhSRUY9IiNfSF8iPkg8L0E+IDxBIEhSRUY9IiNfSV8iPkk8L0E+IDxBIEhSRUY9IiNfSl8iPko8L0E+IDxBIEhSRUY9IiNfTF8iPkw8L0E+IDxBIEhSRUY9IiNfTV8iPk08L0E+IDxBIEhSRUY9IiNfTl8iPk48L0E+IDxBIEhSRUY9IiNfT18iPk88L0E+IDxBIEhSRUY9IiNfUF8iPlA8L0E+IDxBIEhSRUY9IiNfUV8iPlE8L0E+IDxBIEhSRUY9IiNfUl8iPlI8L0E+IDxBIEhSRUY9IiNfU18iPlM8L0E+IDxBIEhSRUY9IiNfVF8iPlQ8L0E+IDxBIEhSRUY9IiNfVV8iPlU8L0E+IDxBIEhSRUY9IiNfVl8iPlY8L0E+IDxBIEhSRUY9IiNfV18iPlc8L0E+IDxBIEhSRUY9IiNfWF8iPlg8L0E+IDxBIEhSRUY9IiNfX18iPl88L0E+IDxIUj4KLTxBIE5BTUU9Il9BXyI+PCEtLSAtLT48L0E+PEgyPgotPEI+QTwvQj48L0gyPgotPERMPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNhY2NlcHRlZE5hbWVzKCkiPjxCPmFjY2VwdGVkTmFtZXMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sIj5TY2hlbWFQcm9wZXJ0eTwvQT4KLTxERD5Gb3IgZWxlbWVudCBwcm9wZXJ0aWVzIHRoZSBzZXQgb2YgbmFtZXMgdGhhdCBhcmUgYWNjZXB0ZWQgZm9yIHRoaXMgcHJvcGVydHkKLSBpZiB0aGlzIGVsZW1lbnQgaXMgdGhlIGhlYWQgb2YgYSBzdWJzdGl0dXRpb24gZ3JvdXAuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI2FjY2VwdGVkU3RhcnROYW1lcygpIj48Qj5hY2NlcHRlZFN0YXJ0TmFtZXMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sIj5TY2hlbWFQYXJ0aWNsZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBRTmFtZVNldCBvZiBlbGVtZW50IG5hbWVzIHRoYXQgY2FuIGJlCi0gYWNjZXB0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIHBhcnRpY2xlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwjYWRkKG9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uU3BlY2lmaWNhdGlvbikiPjxCPmFkZChHRHVyYXRpb25TcGVjaWZpY2F0aW9uKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+Ci08REQ+UmV0dXJucyBhIG5ldyBHRHVyYXRpb24gd2hpY2ggaXMgdGhlIHN1bSBvZiB0aGlzIG9uZSBhbmQgdGhlCi0gc3VwcGxpZWQgZHVyYXRpb24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI2FkZChvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvblNwZWNpZmljYXRpb24pIj48Qj5hZGQoR0R1cmF0aW9uU3BlY2lmaWNhdGlvbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4KLTxERD5BZGRzIGEgZHVyYXRpb24gdG8gdGhpcyBHRGF0ZSwgYW5kIHJldHVybnMgYSBuZXcgR0RhdGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwjYWRkKGludCwgamF2YS5sYW5nLk9iamVjdCkiPjxCPmFkZChpbnQsIE9iamVjdCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwiPlhtbFNpbXBsZUxpc3Q8L0E+Ci08REQ+VW5zdXBwb3J0ZWQgYmVjYXVzZSB0aGlzIGxpc3QgaXMgaW1tdXRhYmxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sI2FkZChqYXZhLmxhbmcuT2JqZWN0KSI+PEI+YWRkKE9iamVjdCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwiPlhtbFNpbXBsZUxpc3Q8L0E+Ci08REQ+VW5zdXBwb3J0ZWQgYmVjYXVzZSB0aGlzIGxpc3QgaXMgaW1tdXRhYmxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwjYWRkKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48Qj5hZGQoUU5hbWUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwiPlFOYW1lU2V0QnVpbGRlcjwvQT4KLTxERD5BZGRzIGEgc2luZ2xlIFFOYW1lIHRvIHRoaXMgUU5hbWVTZXRCdWlsZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sI2FkZEFsbChqYXZhLnV0aWwuQ29sbGVjdGlvbikiPjxCPmFkZEFsbChDb2xsZWN0aW9uKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCI+WG1sU2ltcGxlTGlzdDwvQT4KLTxERD5VbnN1cHBvcnRlZCBiZWNhdXNlIHRoaXMgbGlzdCBpcyBpbW11dGFibGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwjYWRkQWxsKGludCwgamF2YS51dGlsLkNvbGxlY3Rpb24pIj48Qj5hZGRBbGwoaW50LCBDb2xsZWN0aW9uKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCI+WG1sU2ltcGxlTGlzdDwvQT4KLTxERD5VbnN1cHBvcnRlZCBiZWNhdXNlIHRoaXMgbGlzdCBpcyBpbW11dGFibGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCNhZGRBbGwob3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldFNwZWNpZmljYXRpb24pIj48Qj5hZGRBbGwoUU5hbWVTZXRTcGVjaWZpY2F0aW9uKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sIj5RTmFtZVNldEJ1aWxkZXI8L0E+Ci08REQ+QWRkcyB0aGUgY29udGVudHMgb2YgYW5vdGhlciBRTmFtZVNldCB0byB0aGlzIFFOYW1lU2V0QnVpbGRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2FkZER1cmF0aW9uKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgamF2YS5tYXRoLkJpZ0RlY2ltYWwpIj48Qj5hZGREdXJhdGlvbihpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIEJpZ0RlY2ltYWwpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwiPkdEYXRlQnVpbGRlcjwvQT4KLTxERD5BZGRzIGEgZ2l2ZW4gZHVyYXRpb24gdG8gdGhlIGRhdGUvdGltZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCNhZGRHRHVyYXRpb24ob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb25TcGVjaWZpY2F0aW9uKSI+PEI+YWRkR0R1cmF0aW9uKEdEdXJhdGlvblNwZWNpZmljYXRpb24pPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sIj5HRHVyYXRpb25CdWlsZGVyPC9BPgotPEREPkFkZHMgdG8gdGhpcyBkdXJhdGlvbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2FkZEdEdXJhdGlvbihvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvblNwZWNpZmljYXRpb24pIj48Qj5hZGRHRHVyYXRpb24oR0R1cmF0aW9uU3BlY2lmaWNhdGlvbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+R0RhdGVCdWlsZGVyPC9BPgotPEREPkFkZHMgYSBnaXZlbiBkdXJhdGlvbiB0byB0aGUgZGF0ZS90aW1lLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwjYWRkTmFtZXNwYWNlKGphdmEubGFuZy5TdHJpbmcpIj48Qj5hZGROYW1lc3BhY2UoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sIj5RTmFtZVNldEJ1aWxkZXI8L0E+Ci08REQ+QWRkcyBhbiBlbnRpcmUgbmFtZXNwYWNlIFVSSSBvZiBRTmFtZXMgdG8gdGhpcyBRTmFtZVNldEJ1aWxkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNhZGRUb1NlbGVjdGlvbigpIj48Qj5hZGRUb1NlbGVjdGlvbigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+QXBwZW5kcyB0aGUgY3VycmVudCBsb2NhdGlvbiBvZiB0aGUgY3Vyc29yIHRvIHRoZSBzZWxlY3Rpb24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI0FMTCI+PEI+QUxMPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwiPlNjaGVtYVBhcnRpY2xlPC9BPgotPEREPkFuIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZGVjbGFyZS1jb250ZW50TW9kZWwiPnhzOmFsbDwvYT4gZ3JvdXAuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sI0FMTCI+PEI+QUxMPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+Ci08REQ+VGhlIFFOYW1lU2V0IGNvbnRhaW5pbmcgYWxsIFFOYW1lcy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNBVE9NSUMiPjxCPkFUT01JQzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+QXRvbWljIHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjQVRUUiI+PEI+QVRUUjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+WG1sQ3Vyc29yLlRva2VuVHlwZTwvQT4KLTxERD5UaGUgc2luZ2xldG9uIGF0dHJpYnV0ZSB0b2tlbiB0eXBlCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCNBVFRSSUJVVEUiPjxCPkFUVFJJQlVURTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCI+WE1MU3RyZWFtQ29uc3RhbnRzPC9BPgotPEREPkluZGljYXRlcyBhbiBldmVudCBpcyBhbiBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI0FUVFJJQlVURSI+PEI+QVRUUklCVVRFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sIj5TY2hlbWFDb21wb25lbnQ8L0E+Ci08REQ+QW4gYXR0cmlidXRlIGRlZmluaXRpb24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNBVFRSSUJVVEVfR1JPVVAiPjxCPkFUVFJJQlVURV9HUk9VUDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPgotPEREPkFuIGF0dHJpYnV0ZSBncm91cCBkZWZpbml0aW9uLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sI2F0dHJpYnV0ZUdyb3VwcygpIj48Qj5hdHRyaWJ1dGVHcm91cHMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwiPlNjaGVtYVR5cGVTeXN0ZW08L0E+Ci08REQ+UmV0dXJucyB0aGUgYXR0cmlidXRlIGdyb3VwcyBkZWZpbmVkIGluIHRoaXMgbG9hZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sI2F0dHJpYnV0ZVR5cGVzKCkiPjxCPmF0dHJpYnV0ZVR5cGVzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sIj5TY2hlbWFUeXBlU3lzdGVtPC9BPgotPEREPlJldHVybnMgdGhlIGF0dHJpYnV0ZSB0eXBlcyBkZWZpbmVkIGluIHRoaXMgbG9hZGVyLgotPC9ETD4KLTxIUj4KLTxBIE5BTUU9Il9CXyI+PCEtLSAtLT48L0E+PEgyPgotPEI+QjwvQj48L0gyPgotPERMPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sI0JBRF9IQU5ETEUiPjxCPkJBRF9IQU5ETEU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb248L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwjQkFEX1BBUlRJQ0xFX1RZUEUiPjxCPkJBRF9QQVJUSUNMRV9UWVBFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sIj5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjYmVnaW5FbGVtZW50KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48Qj5iZWdpbkVsZW1lbnQoUU5hbWUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+SW5zZXJ0cyBhIG5ldyBlbGVtZW50IGFyb3VuZCB0aGlzIGN1cnNvciwgZ2l2aW5nIHRoZSBlbGVtZW50IHRoZSBzcGVjaWZpZWQgCi0gcXVhbGlmaWVkIG5hbWUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNiZWdpbkVsZW1lbnQoamF2YS5sYW5nLlN0cmluZykiPjxCPmJlZ2luRWxlbWVudChTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+SW5zZXJ0cyBhIG5ldyBlbGVtZW50IGFyb3VuZCB0aGlzIGN1cnNvciwgZ2l2aW5nIHRoZSBlbGVtZW50IHRoZSBzcGVjaWZpZWQgCi0gbG9jYWwgbmFtZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2JlZ2luRWxlbWVudChqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+PEI+YmVnaW5FbGVtZW50KFN0cmluZywgU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPkluc2VydHMgYSBuZXcgZWxlbWVudCBhcm91bmQgdGhpcyBjdXJzb3IsIGdpdmluZyB0aGUgZWxlbWVudCB0aGUgc3BlY2lmaWVkIAotIGxvY2FsIG5hbWUgYW5kIGFzc29jaWF0aW5nIGl0IHdpdGggdGhlIHNwZWNpZmllZCBuYW1lc3BhY2UuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjYmlnRGVjaW1hbFZhbHVlKCkiPjxCPmJpZ0RlY2ltYWxWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI2dldEJpZ0RlY2ltYWxWYWx1ZSgpIj48Q09ERT5YbWxEZWNpbWFsLmdldEJpZ0RlY2ltYWxWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2JpZ0RlY2ltYWxWYWx1ZSgpIj48Qj5iaWdEZWNpbWFsVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRCaWdEZWNpbWFsVmFsdWUoKSI+PENPREU+U2ltcGxlVmFsdWUuZ2V0QmlnRGVjaW1hbFZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2JpZ0RlY2ltYWxWYWx1ZSgpIj48Qj5iaWdEZWNpbWFsVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwjYmlnSW50ZWdlclZhbHVlKCkiPjxCPmJpZ0ludGVnZXJWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI2dldEJpZ0ludGVnZXJWYWx1ZSgpIj48Q09ERT5YbWxJbnRlZ2VyLmdldEJpZ0ludGVnZXJWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2JpZ0ludGVnZXJWYWx1ZSgpIj48Qj5iaWdJbnRlZ2VyVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRCaWdJbnRlZ2VyVmFsdWUoKSI+PENPREU+U2ltcGxlVmFsdWUuZ2V0QmlnSW50ZWdlclZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2JpZ0ludGVnZXJWYWx1ZSgpIj48Qj5iaWdJbnRlZ2VyVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjYmxvY2tFeHRlbnNpb24oKSI+PEI+YmxvY2tFeHRlbnNpb24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+VHJ1ZSBpZiBleHRlbnNpb25zIG9mIHRoaXMgdHlwZSBjYW5ub3QgYmUgc3Vic3RpdHV0ZWQgZm9yIHRoaXMgdHlwZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxFbGVtZW50Lmh0bWwjYmxvY2tFeHRlbnNpb24oKSI+PEI+YmxvY2tFeHRlbnNpb24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEVsZW1lbnQuaHRtbCI+U2NoZW1hTG9jYWxFbGVtZW50PC9BPgotPEREPlRydWUgaWYgZXh0ZW5zaW9uIGlzIGJsb2NrZWQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjYmxvY2tSZXN0cmljdGlvbigpIj48Qj5ibG9ja1Jlc3RyaWN0aW9uKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPlRydWUgaWYgcmVzdHJpY3Rpb25zIG9mIHRoaXMgdHlwZSBjYW5ub3QgYmUgc3Vic3RpdHV0ZWQgZm9yIHRoaXMgdHlwZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxFbGVtZW50Lmh0bWwjYmxvY2tSZXN0cmljdGlvbigpIj48Qj5ibG9ja1Jlc3RyaWN0aW9uKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxFbGVtZW50Lmh0bWwiPlNjaGVtYUxvY2FsRWxlbWVudDwvQT4KLTxERD5UcnVlIGlmIHJlc3RyaWN0aW9uIGlzIGJsb2NrZWQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEVsZW1lbnQuaHRtbCNibG9ja1N1YnN0aXR1dGlvbigpIj48Qj5ibG9ja1N1YnN0aXR1dGlvbigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsRWxlbWVudC5odG1sIj5TY2hlbWFMb2NhbEVsZW1lbnQ8L0E+Ci08REQ+VHJ1ZSBpZiBlbGVtZW50IHN1YnN0aXR1dGlvbiBpcyBibG9ja2VkLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sI2Jvb2xlYW5WYWx1ZSgpIj48Qj5ib29sZWFuVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPlhtbEJvb2xlYW48L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgYnkgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwjZ2V0Qm9vbGVhblZhbHVlKCkiPjxDT0RFPlhtbEJvb2xlYW4uZ2V0Qm9vbGVhblZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjYm9vbGVhblZhbHVlKCkiPjxCPmJvb2xlYW5WYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldEJvb2xlYW5WYWx1ZSgpIj48Q09ERT5TaW1wbGVWYWx1ZS5nZXRCb29sZWFuVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjYm9vbGVhblZhbHVlKCkiPjxCPmJvb2xlYW5WYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfQU5ZX1NJTVBMRSI+PEI+QlRDX0FOWV9TSU1QTEU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOmFueVNpbXBsZVR5cGUsIGFrYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCN0eXBlIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlLnR5cGU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19BTllfVFlQRSI+PEI+QlRDX0FOWV9UWVBFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD54czphbnlUeXBlLCBha2EgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN0eXBlIj48Q09ERT5YbWxPYmplY3QudHlwZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0FOWV9VUkkiPjxCPkJUQ19BTllfVVJJPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD54czphbnlVUkksIGFrYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sI3R5cGUiPjxDT0RFPlhtbEFueVVSSS50eXBlPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfQkFTRV82NF9CSU5BUlkiPjxCPkJUQ19CQVNFXzY0X0JJTkFSWTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+eHM6YmFzZTY0QmluYXJ5LCBha2EgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCN0eXBlIj48Q09ERT5YbWxCYXNlNjRCaW5hcnkudHlwZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0JPT0xFQU4iPjxCPkJUQ19CT09MRUFOPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD54czpib29sZWFuLCBha2EgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwjdHlwZSI+PENPREU+WG1sQm9vbGVhbi50eXBlPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfQllURSI+PEI+QlRDX0JZVEU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOmJ5dGUsIGFrYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCN0eXBlIj48Q09ERT5YbWxCeXRlLnR5cGU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19EQVRFIj48Qj5CVENfREFURTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+eHM6ZGF0ZSwgYWthIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sI3R5cGUiPjxDT0RFPlhtbERhdGUudHlwZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0RBVEVfVElNRSI+PEI+QlRDX0RBVEVfVElNRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+eHM6ZGF0ZVRpbWUsIGFrYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwjdHlwZSI+PENPREU+WG1sRGF0ZVRpbWUudHlwZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0RFQ0lNQUwiPjxCPkJUQ19ERUNJTUFMPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD54czpkZWNpbWFsLCBha2EgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjdHlwZSI+PENPREU+WG1sRGVjaW1hbC50eXBlPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfRE9VQkxFIj48Qj5CVENfRE9VQkxFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD54czpkb3VibGUsIGFrYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sI3R5cGUiPjxDT0RFPlhtbERvdWJsZS50eXBlPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfRFVSQVRJT04iPjxCPkJUQ19EVVJBVElPTjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+eHM6ZHVyYXRpb24sIGFrYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwjdHlwZSI+PENPREU+WG1sRHVyYXRpb24udHlwZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0VOVElUSUVTIj48Qj5CVENfRU5USVRJRVM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOkVOVElUSUVTLCBha2EgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sI3R5cGUiPjxDT0RFPlhtbEVOVElUSUVTLnR5cGU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19FTlRJVFkiPjxCPkJUQ19FTlRJVFk8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOkVOVElUWSwgYWthIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwjdHlwZSI+PENPREU+WG1sRU5USVRZLnR5cGU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19GSVJTVF9QUklNSVRJVkUiPjxCPkJUQ19GSVJTVF9QUklNSVRJVkU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPlRoZSBwcmltaXRpdmUgdHlwZXMgaGF2ZSBjb2RlcyBiZXR3ZWVuIEJUQ19GSVJTVF9QUklNSVRJVkUgYW5kIEJUQ19MQVNUX1BSSU1JVElWRSBpbmNsdXNpdmUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfRkxPQVQiPjxCPkJUQ19GTE9BVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+eHM6ZmxvYXQsIGFrYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwjdHlwZSI+PENPREU+WG1sRmxvYXQudHlwZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0dfREFZIj48Qj5CVENfR19EQVk8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOmdEYXksIGFrYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCN0eXBlIj48Q09ERT5YbWxHRGF5LnR5cGU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19HX01PTlRIIj48Qj5CVENfR19NT05USDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+eHM6Z01vbnRoLCBha2EgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCN0eXBlIj48Q09ERT5YbWxHTW9udGgudHlwZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0dfTU9OVEhfREFZIj48Qj5CVENfR19NT05USF9EQVk8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOmdNb250aERheSwgYWthIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwjdHlwZSI+PENPREU+WG1sR01vbnRoRGF5LnR5cGU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19HX1lFQVIiPjxCPkJUQ19HX1lFQVI8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOmdZZWFyLCBha2EgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sI3R5cGUiPjxDT0RFPlhtbEdZZWFyLnR5cGU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19HX1lFQVJfTU9OVEgiPjxCPkJUQ19HX1lFQVJfTU9OVEg8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOmdZZWFyTW9udGgsIGFrYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCN0eXBlIj48Q09ERT5YbWxHWWVhck1vbnRoLnR5cGU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19IRVhfQklOQVJZIj48Qj5CVENfSEVYX0JJTkFSWTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+eHM6aGV4QmluYXJ5LCBha2EgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCN0eXBlIj48Q09ERT5YbWxCYXNlNjRCaW5hcnkudHlwZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0lEIj48Qj5CVENfSUQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOklELCBha2EgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sI3R5cGUiPjxDT0RFPlhtbElELnR5cGU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19JRFJFRiI+PEI+QlRDX0lEUkVGPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD54czpJRFJFRiwgYWthIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCN0eXBlIj48Q09ERT5YbWxJRFJFRi50eXBlPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfSURSRUZTIj48Qj5CVENfSURSRUZTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD54czpJRFJFRlMsIGFrYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sI3R5cGUiPjxDT0RFPlhtbElEUkVGUy50eXBlPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfSU5UIj48Qj5CVENfSU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD54czppbnQsIGFrYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sI3R5cGUiPjxDT0RFPlhtbEludC50eXBlPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfSU5URUdFUiI+PEI+QlRDX0lOVEVHRVI8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOmludGVnZXIsIGFrYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCN0eXBlIj48Q09ERT5YbWxJbnRlZ2VyLnR5cGU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19MQU5HVUFHRSI+PEI+QlRDX0xBTkdVQUdFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD54czpsYW5ndWFnZSwgYWthIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCN0eXBlIj48Q09ERT5YbWxMYW5ndWFnZS50eXBlPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfTEFTVF9CVUlMVElOIj48Qj5CVENfTEFTVF9CVUlMVElOPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfTEFTVF9QUklNSVRJVkUiPjxCPkJUQ19MQVNUX1BSSU1JVElWRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+VGhlIHByaW1pdGl2ZSB0eXBlcyBoYXZlIGNvZGVzIGJldHdlZW4gQlRDX0ZJUlNUX1BSSU1JVElWRSBhbmQgQlRDX0xBU1RfUFJJTUlUSVZFIGluY2x1c2l2ZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19MT05HIj48Qj5CVENfTE9ORzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+eHM6bG9uZywgYWthIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sI3R5cGUiPjxDT0RFPlhtbExvbmcudHlwZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX05BTUUiPjxCPkJUQ19OQU1FPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD54czpOYW1lLCBha2EgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwjdHlwZSI+PENPREU+WG1sTmFtZS50eXBlPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfTkNOQU1FIj48Qj5CVENfTkNOQU1FPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD54czpOQ05hbWUsIGFrYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sI3R5cGUiPjxDT0RFPlhtbE5DTmFtZS50eXBlPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfTkVHQVRJVkVfSU5URUdFUiI+PEI+QlRDX05FR0FUSVZFX0lOVEVHRVI8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOk5lZ2F0aXZlSW50ZWdlciwgYWthIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwjdHlwZSI+PENPREU+WG1sTmVnYXRpdmVJbnRlZ2VyLnR5cGU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19OTVRPS0VOIj48Qj5CVENfTk1UT0tFTjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+eHM6Tk1UT0tFTiwgYWthIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sI3R5cGUiPjxDT0RFPlhtbE5NVE9LRU4udHlwZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX05NVE9LRU5TIj48Qj5CVENfTk1UT0tFTlM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOk5NVE9LRU5TLCBha2EgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sI3R5cGUiPjxDT0RFPlhtbE5NVE9LRU5TLnR5cGU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19OT05fTkVHQVRJVkVfSU5URUdFUiI+PEI+QlRDX05PTl9ORUdBVElWRV9JTlRFR0VSPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD54czpub25OZWdhdGl2ZUludGVnZXIsIGFrYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sI3R5cGUiPjxDT0RFPlhtbE5vbk5lZ2F0aXZlSW50ZWdlci50eXBlPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfTk9OX1BPU0lUSVZFX0lOVEVHRVIiPjxCPkJUQ19OT05fUE9TSVRJVkVfSU5URUdFUjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+eHM6bm9uUG9zaXRpdmVJbnRlZ2VyLCBha2EgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCN0eXBlIj48Q09ERT5YbWxOb25Qb3NpdGl2ZUludGVnZXIudHlwZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX05PUk1BTElaRURfU1RSSU5HIj48Qj5CVENfTk9STUFMSVpFRF9TVFJJTkc8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOm5vcm1hbGl6ZWRTdHJpbmcsIGFrYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCN0eXBlIj48Q09ERT5YbWxOb3JtYWxpemVkU3RyaW5nLnR5cGU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19OT1RfQlVJTFRJTiI+PEI+QlRDX05PVF9CVUlMVElOPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5Ob3QgYSBidWlsdGluIHR5cGUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfTk9UQVRJT04iPjxCPkJUQ19OT1RBVElPTjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+eHM6Tk9UQVRJT04sIGFrYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwjdHlwZSI+PENPREU+WG1sTk9UQVRJT04udHlwZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX1BPU0lUSVZFX0lOVEVHRVIiPjxCPkJUQ19QT1NJVElWRV9JTlRFR0VSPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD54czpwb3NpdGl2ZUludGVnZXIsIGFrYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sI3R5cGUiPjxDT0RFPlhtbFBvc2l0aXZlSW50ZWdlci50eXBlPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfUU5BTUUiPjxCPkJUQ19RTkFNRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+eHM6UU5hbWUsIGFrYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwjdHlwZSI+PENPREU+WG1sUU5hbWUudHlwZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX1NIT1JUIj48Qj5CVENfU0hPUlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOnNob3J0LCBha2EgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sI3R5cGUiPjxDT0RFPlhtbFNob3J0LnR5cGU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19TVFJJTkciPjxCPkJUQ19TVFJJTkc8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOnN0cmluZywgYWthIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwjdHlwZSI+PENPREU+WG1sU3RyaW5nLnR5cGU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19USU1FIj48Qj5CVENfVElNRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+eHM6dGltZSwgYWthIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sI3R5cGUiPjxDT0RFPlhtbFRpbWUudHlwZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX1RPS0VOIj48Qj5CVENfVE9LRU48L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOnRva2VuLCBha2EgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sI3R5cGUiPjxDT0RFPlhtbFRva2VuLnR5cGU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19VTlNJR05FRF9CWVRFIj48Qj5CVENfVU5TSUdORURfQllURTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+eHM6dW5zaWduZWRCeXRlLCBha2EgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCN0eXBlIj48Q09ERT5YbWxVbnNpZ25lZEJ5dGUudHlwZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX1VOU0lHTkVEX0lOVCI+PEI+QlRDX1VOU0lHTkVEX0lOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+eHM6dW5zaWduZWRJbnQsIGFrYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwjdHlwZSI+PENPREU+WG1sVW5zaWduZWRJbnQudHlwZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX1VOU0lHTkVEX0xPTkciPjxCPkJUQ19VTlNJR05FRF9MT05HPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD54czp1bnNpZ25lZExvbmcsIGFrYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sI3R5cGUiPjxDT0RFPlhtbFVuc2lnbmVkTG9uZy50eXBlPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfVU5TSUdORURfU0hPUlQiPjxCPkJUQ19VTlNJR05FRF9TSE9SVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+eHM6dW5zaWduZWRTaG9ydCwgYWthIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sI3R5cGUiPjxDT0RFPlhtbFVuc2lnbmVkU2hvcnQudHlwZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCNieXRlQXJyYXlWYWx1ZSgpIj48Qj5ieXRlQXJyYXlWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj5YbWxIZXhCaW5hcnk8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgYnkgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCNnZXRCeXRlQXJyYXlWYWx1ZSgpIj48Q09ERT5YbWxIZXhCaW5hcnkuZ2V0Qnl0ZUFycmF5VmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwjYnl0ZUFycmF5VmFsdWUoKSI+PEI+Ynl0ZUFycmF5VmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5PC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIGJ5IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwjZ2V0Qnl0ZUFycmF5VmFsdWUoKSI+PENPREU+WG1sQmFzZTY0QmluYXJ5LmdldEJ5dGVBcnJheVZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjYnl0ZUFycmF5VmFsdWUoKSI+PEI+Ynl0ZUFycmF5VmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRCeXRlQXJyYXlWYWx1ZSgpIj48Q09ERT5TaW1wbGVWYWx1ZS5nZXRCeXRlQXJyYXlWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNieXRlQXJyYXlWYWx1ZSgpIj48Qj5ieXRlQXJyYXlWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCNieXRlVmFsdWUoKSI+PEI+Ynl0ZVZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj5YbWxCeXRlPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIGJ5IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sI2dldEJ5dGVWYWx1ZSgpIj48Q09ERT5YbWxCeXRlLmdldEJ5dGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2J5dGVWYWx1ZSgpIj48Qj5ieXRlVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRCeXRlVmFsdWUoKSI+PENPREU+U2ltcGxlVmFsdWUuZ2V0Qnl0ZVZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2J5dGVWYWx1ZSgpIj48Qj5ieXRlVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08L0RMPgotPEhSPgotPEEgTkFNRT0iX0NfIj48IS0tIC0tPjwvQT48SDI+Ci08Qj5DPC9CPjwvSDI+Ci08REw+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwjY2FsZW5kYXJWYWx1ZSgpIj48Qj5jYWxlbmRhclZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj5YbWxUaW1lPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwjZ2V0Q2FsZW5kYXJWYWx1ZSgpIj48Q09ERT5YbWxUaW1lLmdldENhbGVuZGFyVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sI2NhbGVuZGFyVmFsdWUoKSI+PEI+Y2FsZW5kYXJWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+WG1sR1llYXJNb250aDwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sI2dldENhbGVuZGFyVmFsdWUoKSI+PENPREU+WG1sR1llYXJNb250aC5nZXRDYWxlbmRhclZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwjY2FsZW5kYXJWYWx1ZSgpIj48Qj5jYWxlbmRhclZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+WG1sR1llYXI8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwjZ2V0Q2FsZW5kYXJWYWx1ZSgpIj48Q09ERT5YbWxHWWVhci5nZXRDYWxlbmRhclZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sI2NhbGVuZGFyVmFsdWUoKSI+PEI+Y2FsZW5kYXJWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj5YbWxHTW9udGhEYXk8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sI2dldENhbGVuZGFyVmFsdWUoKSI+PENPREU+WG1sR01vbnRoRGF5LmdldENhbGVuZGFyVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwjY2FsZW5kYXJWYWx1ZSgpIj48Qj5jYWxlbmRhclZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPlhtbEdNb250aDwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwjZ2V0Q2FsZW5kYXJWYWx1ZSgpIj48Q09ERT5YbWxHTW9udGguZ2V0Q2FsZW5kYXJWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwjY2FsZW5kYXJWYWx1ZSgpIj48Qj5jYWxlbmRhclZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj5YbWxHRGF5PC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwjZ2V0Q2FsZW5kYXJWYWx1ZSgpIj48Q09ERT5YbWxHRGF5LmdldENhbGVuZGFyVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCNjYWxlbmRhclZhbHVlKCkiPjxCPmNhbGVuZGFyVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj5YbWxEYXRlVGltZTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCNnZXRDYWxlbmRhclZhbHVlKCkiPjxDT0RFPlhtbERhdGVUaW1lLmdldENhbGVuZGFyVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sI2NhbGVuZGFyVmFsdWUoKSI+PEI+Y2FsZW5kYXJWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+WG1sRGF0ZTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sI2dldENhbGVuZGFyVmFsdWUoKSI+PENPREU+WG1sRGF0ZS5nZXRDYWxlbmRhclZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjY2FsZW5kYXJWYWx1ZSgpIj48Qj5jYWxlbmRhclZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0Q2FsZW5kYXJWYWx1ZSgpIj48Q09ERT5TaW1wbGVWYWx1ZS5nZXRDYWxlbmRhclZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2NhbGVuZGFyVmFsdWUoKSI+PEI+Y2FsZW5kYXJWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2Nhbm9uaWNhbFN0cmluZygpIj48Qj5jYW5vbmljYWxTdHJpbmcoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPgotPEREPlRoZSBjYW5vbmljYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjY2Fub25pY2FsU3RyaW5nKCkiPjxCPmNhbm9uaWNhbFN0cmluZygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwiPkdEYXRlQnVpbGRlcjwvQT4KLTxERD5UaGUgY2Fub25pY2FsIHN0cmluZyByZXByZXNlbnRhdGlvbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwjY2Fub25pY2FsU3RyaW5nKCkiPjxCPmNhbm9uaWNhbFN0cmluZygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+Ci08REQ+VGhlIGNhbm9uaWNhbCBzdHJpbmcgcmVwcmVzZW50YXRpb24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI2NhblN0YXJ0V2l0aEVsZW1lbnQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxCPmNhblN0YXJ0V2l0aEVsZW1lbnQoUU5hbWUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwiPlNjaGVtYVBhcnRpY2xlPC9BPgotPEREPlRydWUgaWYgdGhpcyBwYXJ0aWNsZSBjYW4gc3RhcnQgd2l0aCB0aGUgZ2l2ZW4gZWxlbWVudAotICh0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdHJ1Y3R1cmUgb2YgYWxsIGNoaWxkIHBhcnRpY2xlcwotIG9mIGNvdXJzZSkuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuaHRtbCNDQ19LRVkiPjxCPkNDX0tFWTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuaHRtbCI+U2NoZW1hSWRlbnRpdHlDb25zdHJhaW50PC9BPgotPEREPkEgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNkZWNsYXJlLWtleSI+eHM6a2V5PC9hPiBjb25zdHJhaW50LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Lmh0bWwjQ0NfS0VZUkVGIj48Qj5DQ19LRVlSRUY8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Lmh0bWwiPlNjaGVtYUlkZW50aXR5Q29uc3RyYWludDwvQT4KLTxERD5BIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZGVjbGFyZS1rZXkiPnhzOmtleVJlZjwvYT4gY29uc3RyYWludC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5odG1sI0NDX1VOSVFVRSI+PEI+Q0NfVU5JUVVFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5odG1sIj5TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQ8L0E+Ci08REQ+QSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2RlY2xhcmUta2V5Ij54czp1bmlxdWU8L2E+IGNvbnN0cmFpbnQuCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCNDREFUQSI+PEI+Q0RBVEE8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwiPlhNTFN0cmVhbUNvbnN0YW50czwvQT4KLTxERD5JbmRpY2F0ZXMgYW4gZXZlbnQgaXMgYSBDREFUQQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY2hhbmdlVHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj48Qj5jaGFuZ2VUeXBlKFNjaGVtYVR5cGUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+Ci08REQ+Q2hhbmdlcyB0aGUgc2NoZW1hIHR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGF0YSBhbmQKLSByZXR1cm5zIGEgbmV3IFhtbE9iamVjdCBpbnN0YW5jZSB3aG9zZSBzY2hlbWFUeXBlIGlzIHRoZQotIG5ldyB0eXBlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjY2hhbmdlVHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj48Qj5jaGFuZ2VUeXBlKFNjaGVtYVR5cGUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNDSEFSQUNURVJfRU5DT0RJTkciPjxCPkNIQVJBQ1RFUl9FTkNPRElORzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sI0NIQVJBQ1RFUlMiPjxCPkNIQVJBQ1RFUlM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwiPlhNTFN0cmVhbUNvbnN0YW50czwvQT4KLTxERD5JbmRpY2F0ZXMgYW4gZXZlbnQgaXMgY2hhcmFjdGVycwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNDSE9JQ0UiPjxCPkNIT0lDRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sIj5TY2hlbWFQYXJ0aWNsZTwvQT4KLTxERD5BIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZGVjbGFyZS1jb250ZW50TW9kZWwiPnhzOmNob2ljZTwvYT4gZ3JvdXAuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwjY2xlYXIoKSI+PEI+Y2xlYXIoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCI+WG1sU2ltcGxlTGlzdDwvQT4KLTxERD5VbnN1cHBvcnRlZCBiZWNhdXNlIHRoaXMgbGlzdCBpcyBpbW11dGFibGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCNjbGVhcigpIj48Qj5jbGVhcigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwiPlFOYW1lU2V0QnVpbGRlcjwvQT4KLTxERD5DbGVhcnMgdGhpcyBRTmFtZVNldEJ1aWxkZXIKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2NsZWFyQm9va21hcmsoamF2YS5sYW5nLk9iamVjdCkiPjxCPmNsZWFyQm9va21hcmsoT2JqZWN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPkNsZWFycyB0aGUgYm9va21hcmsgd2hvc2Uga2V5IGlzIHNwZWNpZmllZCwgaWYgdGhlIGJvb2ttYXJrCi0gZXhpc3RzIGF0IHRoaXMgY3Vyc29yJ3MgbG9jYXRpb24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNjbGVhckRheSgpIj48Qj5jbGVhckRheSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwiPkdEYXRlQnVpbGRlcjwvQT4KLTxERD5DbGVhcnMgdGhlIGRheS1vZi1tb250aC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2NsZWFyTW9udGgoKSI+PEI+Y2xlYXJNb250aCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwiPkdEYXRlQnVpbGRlcjwvQT4KLTxERD5DbGVhcnMgdGhlIG1vbnRoLW9mLXllYXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNjbGVhclNlbGVjdGlvbnMoKSI+PEI+Y2xlYXJTZWxlY3Rpb25zKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5DbGVhcnMgdGhpcyBjdXJzb3IncyBzZWxlY3Rpb24sIGJ1dCBkb2VzIG5vdCBtb2RpZnkgdGhlIGRvY3VtZW50LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjY2xlYXJUaW1lKCkiPjxCPmNsZWFyVGltZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwiPkdEYXRlQnVpbGRlcjwvQT4KLTxERD5DbGVhcnMgdGhlIHRpbWUtb2YtZGF5LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjY2xlYXJUaW1lWm9uZSgpIj48Qj5jbGVhclRpbWVab25lKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+R0RhdGVCdWlsZGVyPC9BPgotPEREPkNsZWFycyB0aGUgdGltZXpvbmUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNjbGVhclllYXIoKSI+PEI+Y2xlYXJZZWFyKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+R0RhdGVCdWlsZGVyPC9BPgotPEREPkNsZWFycyB0aGUgeWVhci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCNjbG9uZSgpIj48Qj5jbG9uZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sIj5HRHVyYXRpb25CdWlsZGVyPC9BPgotPEREPkJ1aWxkcyBhbm90aGVyIEdEdXJhdGlvbkJ1aWxkZXIgd2l0aCB0aGUgc2FtZSB2YWx1ZQotIGFzIHRoaXMgb25lLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwjY2xvbmUoKSI+PEI+Y2xvbmUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+Ci08REQ+QnVpbGRzIGFub3RoZXIgR0RhdGUgd2l0aCB0aGUgc2FtZSB2YWx1ZQotIGFzIHRoaXMgb25lLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjY2xvbmUoKSI+PEI+Y2xvbmUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sIj5HRGF0ZUJ1aWxkZXI8L0E+Ci08REQ+QnVpbGRzIGFub3RoZXIgR0RhdGVCdWlsZGVyIHdpdGggdGhlIHNhbWUgdmFsdWUKLSBhcyB0aGlzIG9uZS4KLTxEVD48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2Nsb3NlKCkiPjxCPmNsb3NlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwiPlhNTFN0cmVhbVJlYWRlcjwvQT4KLTxERD5GcmVlcyBhbnkgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFJlYWRlci4KLTxEVD48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sI0NPTU1FTlQiPjxCPkNPTU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwiPlhNTFN0cmVhbUNvbnN0YW50czwvQT4KLTxERD5JbmRpY2F0ZXMgYW4gZXZlbnQgaXMgYSBjb21tZW50Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjQ09NTUVOVCI+PEI+Q09NTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+WG1sQ3Vyc29yLlRva2VuVHlwZTwvQT4KLTxERD5UaGUgc2luZ2xldG9uIGNvbW1lbnQgdG9rZW4gdHlwZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjY29tcGFyZVBvc2l0aW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yKSI+PEI+Y29tcGFyZVBvc2l0aW9uKFhtbEN1cnNvcik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5SZXR1cm5zIGFuIGludGVnZXIgaW5kaWNhdGluZyB3aGV0aGVyIHRoaXMgY3Vyc29yIGlzIGJlZm9yZSwgCi0gYWZ0ZXIsIG9yIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGFzIHRoZSBzcGVjaWZpZWQgY3Vyc29yLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVRvKGphdmEubGFuZy5PYmplY3QpIj48Qj5jb21wYXJlVG8oT2JqZWN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPgotPEREPkltcGVsZW1lbnRzIHRoZSBDb21wYXJhYmxlIGludGVyZmFjZSBieSBjb21wYXJpbmcgdHdvIHNpbXBsZQotIHhtbCB2YWx1ZXMgYmFzZWQgb24gdGhlaXIgc3RhbmRhcmQgWE1MIHNjaGVtYSBvcmRlcmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KSI+PEI+Y29tcGFyZVRvKE9iamVjdCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjY29tcGFyZVRvR0RhdGUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj48Qj5jb21wYXJlVG9HRGF0ZShHRGF0ZVNwZWNpZmljYXRpb24pPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+Ci08REQ+Q29tcGFyaXNvbiB0byBhbm90aGVyIEdEYXRlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjY29tcGFyZVRvR0RhdGUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj48Qj5jb21wYXJlVG9HRGF0ZShHRGF0ZVNwZWNpZmljYXRpb24pPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwiPkdEYXRlQnVpbGRlcjwvQT4KLTxERD5Db21wYXJpc29uIHRvIGFub3RoZXIgR0RhdGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI2NvbXBhcmVUb0dEYXRlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+PEI+Y29tcGFyZVRvR0RhdGUoR0RhdGVTcGVjaWZpY2F0aW9uKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPgotPEREPkNvbXBhcmlzb24gdG8gYW5vdGhlciBHRGF0ZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCNjb21wYXJlVG9HRHVyYXRpb24ob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb25TcGVjaWZpY2F0aW9uKSI+PEI+Y29tcGFyZVRvR0R1cmF0aW9uKEdEdXJhdGlvblNwZWNpZmljYXRpb24pPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCI+R0R1cmF0aW9uU3BlY2lmaWNhdGlvbjwvQT4KLTxERD5Db21wYXJpc29uIHRvIGFub3RoZXIgR0R1cmF0aW9uLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sI2NvbXBhcmVUb0dEdXJhdGlvbihvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvblNwZWNpZmljYXRpb24pIj48Qj5jb21wYXJlVG9HRHVyYXRpb24oR0R1cmF0aW9uU3BlY2lmaWNhdGlvbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwiPkdEdXJhdGlvbkJ1aWxkZXI8L0E+Ci08REQ+Q29tcGFyaXNvbiB0byBhbm90aGVyIEdEdXJhdGlvbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sI2NvbXBhcmVUb0dEdXJhdGlvbihvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvblNwZWNpZmljYXRpb24pIj48Qj5jb21wYXJlVG9HRHVyYXRpb24oR0R1cmF0aW9uU3BlY2lmaWNhdGlvbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCI+R0R1cmF0aW9uPC9BPgotPEREPkNvbXBhcmlzb24gdG8gYW5vdGhlciBHRHVyYXRpb24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj48Qj5jb21wYXJlVmFsdWUoWG1sT2JqZWN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPgotPEREPlRoaXMgY29tcGFyaXNvbiBtZXRob2QgaXMgc2ltaWxhciB0byBjb21wYXJlVG8sIGJ1dCByYXRoZXIKLSB0aGFuIHRocm93aW5nIGEgQ2xhc3NDYXN0RXhjZXB0aW9uIHdoZW4gdHdvIHZhbHVlcyBhcmUgaW5jb21wYXJhYmxlLAotIGl0IHJldHVybnMgdGhlIG51bWJlciAyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+PEI+Y29tcGFyZVZhbHVlKFhtbE9iamVjdCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI0NPTVBJTEVfRE9XTkxPQURfVVJMUyI+PEI+Q09NUElMRV9ET1dOTE9BRF9VUkxTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI0NPTVBJTEVfTURFRl9OQU1FU1BBQ0VTIj48Qj5DT01QSUxFX01ERUZfTkFNRVNQQUNFUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNDT01QSUxFX05PX1BWUl9SVUxFIj48Qj5DT01QSUxFX05PX1BWUl9SVUxFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI0NPTVBJTEVfTk9fVVBBX1JVTEUiPjxCPkNPTVBJTEVfTk9fVVBBX1JVTEU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjQ09NUElMRV9OT19WQUxJREFUSU9OIj48Qj5DT01QSUxFX05PX1ZBTElEQVRJT048L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjQ09NUElMRV9TVUJTVElUVVRFX05BTUVTIj48Qj5DT01QSUxFX1NVQlNUSVRVVEVfTkFNRVM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sI2NvbXBpbGVQYXRoKGphdmEubGFuZy5TdHJpbmcpIj48Qj5jb21waWxlUGF0aChTdHJpbmcpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwiPlhtbEJlYW5zPC9BPgotPEREPkNvbXBpbGVzIGFuIFhQYXRoLCByZXR1cm5pbmcgYSBTdHJpbmcgZXF1YWwgdG8gdGhhdCB3aGljaCB3YXMgcGFzc2VkLAotIGJ1dCB3aG9zZSBpZGVudGl0eSBpcyB0aGF0IG9mIG9uZSB3aGljaCBoYXMgYmVlbiBwcmVjb21waWxlZCBhbmQgY2FjaGVkLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuaHRtbCNjb21waWxlUGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5jb21waWxlUGF0aChTdHJpbmcsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwiPlhtbEJlYW5zPC9BPgotPEREPkNvbXBpbGVzIGFuIFhQYXRoLCByZXR1cm5pbmcgYSBTdHJpbmcgZXF1YWwgdG8gdGhhdCB3aGljaCB3YXMgcGFzc2VkLAotIGJ1dCB3aG9zZSBpZGVudGl0eSBpcyB0aGF0IG9mIG9uZSB3aGljaCBoYXMgYmVlbiBwcmVjb21waWxlZCBhbmQgY2FjaGVkOyAKLSB0YWtlcyBhbiBvcHRpb24gZm9yIHNwZWNpZnlpbmcgdGV4dCB0aGF0IGluZGljYXRlcyB0aGUgbmFtZSBvZiBjb250ZXh0IG5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwjY29tcGlsZVBhdGgoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+Y29tcGlsZVBhdGgoU3RyaW5nLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXI8L0E+Ci08REQ+Q29tcGlsZXMgYW4gWFBhdGgKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwjY29tcGlsZVF1ZXJ5KGphdmEubGFuZy5TdHJpbmcpIj48Qj5jb21waWxlUXVlcnkoU3RyaW5nKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sIj5YbWxCZWFuczwvQT4KLTxERD5Db21waWxlcyBhbiBYUXVlcnksIHJldHVybmluZyBhIFN0cmluZyBlcXVhbCB0byB0aGF0IHdoaWNoIHdhcyBwYXNzZWQsCi0gYnV0IHdob3NlIGlkZW50aXR5IGlzIHRoYXQgb2Ygb25lIHdoaWNoIGhhcyBiZWVuIHByZWNvbXBpbGVkIGFuZCBjYWNoZWQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sI2NvbXBpbGVRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5jb21waWxlUXVlcnkoU3RyaW5nLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sIj5YbWxCZWFuczwvQT4KLTxERD5Db21waWxlcyBhbiBYUXVlcnksIHJldHVybmluZyBhIFN0cmluZyBlcXVhbCB0byB0aGF0IHdoaWNoIHdhcyBwYXNzZWQsCi0gYnV0IHdob3NlIGlkZW50aXR5IGlzIHRoYXQgb2Ygb25lIHdoaWNoIGhhcyBiZWVuIHByZWNvbXBpbGVkIGFuZCBjYWNoZWQ7Ci0gdGFrZXMgYW4gb3B0aW9uIGZvciBzcGVjaWZ5aW5nIHRleHQgdGhhdCBpbmRpY2F0ZXMgdGhlIGNvbnRleHQgbm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNjb21waWxlUXVlcnkoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+Y29tcGlsZVF1ZXJ5KFN0cmluZywgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sIj5TY2hlbWFUeXBlTG9hZGVyPC9BPgotPEREPkNvbXBpbGVzIGFuIFhRdWVyeQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuaHRtbCNjb21waWxlWHNkKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0W10sIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+Y29tcGlsZVhzZChYbWxPYmplY3RbXSwgU2NoZW1hVHlwZUxvYWRlciwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuaHRtbCI+WG1sQmVhbnM8L0E+Ci08REQ+UmV0dXJucyB0aGUgU2NoZW1hVHlwZVN5c3RlbSB0aGF0IHJlc3VsdHMgZnJvbSBjb21waWxpbmcgdGhlIFhNTAotIHNjaGVtYSBkZWZpbml0aW9ucyBwYXNzZWQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sI2NvbXB1dGVUaW1lKCkiPjxCPmNvbXB1dGVUaW1lKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sIj5YbWxDYWxlbmRhcjwvQT4KLTxERD5PdmVycmlkZXMgR3JlZ29yaWFuQ2FsZW5kYXIuY29tcHV0ZVRpbWUgdG8gYXBwbHkgYSBkaWZmZXJlbnQKLSBkZWZhdWx0IHllYXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0NPTlNJU1RFTlRMWSI+PEI+Q09OU0lTVEVOVExZPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwiPlNjaGVtYVByb3BlcnR5PC9BPgotPEREPkFwcGxpZXMgdG8gYWxsIGVsZW1lbnRzIGZvciB0aGlzIHByb3BlcnR5LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sI2NvbnRhaW5zKGphdmEubGFuZy5PYmplY3QpIj48Qj5jb250YWlucyhPYmplY3QpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sIj5YbWxTaW1wbGVMaXN0PC9BPgotPEREPlRydWUgaWYgdGhlIGxpc3QgaXMgY29udGFpbnMgYW4gb2JqZWN0IGVxdWFsIHRvIG8uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCNjb250YWlucyhqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PEI+Y29udGFpbnMoUU5hbWUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+Ci08REQ+VHJ1ZSBpZiB0aGUgc2V0IGNvbnRhaW5zIHRoZSBnaXZlbiBRTmFtZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sI2NvbnRhaW5zKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48Qj5jb250YWlucyhRTmFtZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCI+UU5hbWVTZXRCdWlsZGVyPC9BPgotPEREPlRydWUgaWYgdGhpcyBNb2RlbFRyYW5zaXRpb25TZXQgY29udGFpbnMgdGhlIGdpdmVuIHFuYW1lLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCNjb250YWlucyhqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PEI+Y29udGFpbnMoUU5hbWUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+Ci08REQ+VHJ1ZSBpZiB0aGlzIE1vZGVsVHJhbnNpdGlvblNldCBjb250YWlucyB0aGUgZ2l2ZW4gcW5hbWUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwjY29udGFpbnNBbGwoamF2YS51dGlsLkNvbGxlY3Rpb24pIj48Qj5jb250YWluc0FsbChDb2xsZWN0aW9uKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCI+WG1sU2ltcGxlTGlzdDwvQT4KLTxERD5UcnVlIGlmIHRoZSBsaXN0IGlzIGNvbnRhaW5zIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgZ2l2ZW4gY29sbGVjdGlvbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sI2NvbnRhaW5zQWxsKG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+PEI+Y29udGFpbnNBbGwoUU5hbWVTZXRTcGVjaWZpY2F0aW9uKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPgotPEREPlRydWUgaWYgdGhlIHBhcmFtZXRlciBpcyBhIHN1YnNldCBvZiB0aGlzIHNldC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sI2NvbnRhaW5zQWxsKG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+PEI+Y29udGFpbnNBbGwoUU5hbWVTZXRTcGVjaWZpY2F0aW9uKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sIj5RTmFtZVNldEJ1aWxkZXI8L0E+Ci08REQ+VHJ1ZSBpZiB0aGUgcGFyYW1ldGVyIGlzIGEgc3Vic2V0IG9mIHRoaXMgc2V0LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCNjb250YWluc0FsbChvcmcuYXBhY2hlLnhtbGJlYW5zLlFOYW1lU2V0U3BlY2lmaWNhdGlvbikiPjxCPmNvbnRhaW5zQWxsKFFOYW1lU2V0U3BlY2lmaWNhdGlvbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj5RTmFtZVNldDwvQT4KLTxERD5UcnVlIGlmIHRoZSBnaXZlbiBzZXQgaXMgYSBzdWJzZXQgb2YgdGhpcyBvbmUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb3B5KCkiPjxCPmNvcHkoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPgotPEREPlJldHVybnMgYSBkZWVwIGNvcHkgb2YgdGhpcyBYbWxPYmplY3QuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNjb3B5KCkiPjxCPmNvcHkoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNjb3B5Q2hhcnMoaW50LCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcikiPjxCPmNvcHlDaGFycyhpbnQsIFhtbEN1cnNvcik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5Db3BpZXMgY2hhcmFjdGVycyB0byB0aGUgcG9zaXRpb24gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHNwZWNpZmllZCBjdXJzb3IuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNjb3B5WG1sKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yKSI+PEI+Y29weVhtbChYbWxDdXJzb3IpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+Q29waWVzIHRoZSBYTUwgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhpcyBjdXJzb3IgdG8gdGhlIGxvY2F0aW9uCi0gc3BlY2lmaWVkIGJ5IHRoZSA8ZW0+dG9IZXJlPC9lbT4gY3Vyc29yLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjY29weVhtbENvbnRlbnRzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yKSI+PEI+Y29weVhtbENvbnRlbnRzKFhtbEN1cnNvcik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5Db3BpZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb250YWluZXIgKFNUQVJURE9DIE9SIFNUQVJUKSBpbW1lZGlhdGVseSB0bwotIHRoZSByaWdodCBvZiB0aGUgY3Vyc29yIHRvIHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgYnkgdGhlIDxlbT50b0hlcmU8L2VtPiBjdXJzb3IuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI2NvdW50T2ZQYXJ0aWNsZUNoaWxkKCkiPjxCPmNvdW50T2ZQYXJ0aWNsZUNoaWxkKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCI+U2NoZW1hUGFydGljbGU8L0E+Ci08REQ+VGhlIG51bWJlciBvZiBjaGlsZHJlbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxCb29rbWFyay5odG1sI2NyZWF0ZUN1cnNvcigpIj48Qj5jcmVhdGVDdXJzb3IoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxCb29rbWFyay5odG1sIj5YbWxDdXJzb3IuWG1sQm9va21hcms8L0E+Ci08REQ+Q2FsbCB0aGUgY3JlYXRlQ3Vyc29yIG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgY3Vyc29yIHdoaWNoIGlzCi0gcG9zaXRpb25lZCBhdCB0aGUgc2FtZSBzcGxhY2UgYXMgdGhlIGJvb2ttYXJrLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbE1hcmsuaHRtbCNjcmVhdGVDdXJzb3IoKSI+PEI+Y3JlYXRlQ3Vyc29yKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbE1hcmsuaHRtbCI+WG1sQ3Vyc29yLlhtbE1hcms8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNjdXJyZW50VG9rZW5UeXBlKCkiPjxCPmN1cnJlbnRUb2tlblR5cGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPlJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGN1cnJlbnQgdG9rZW4uCi08L0RMPgotPEhSPgotPEEgTkFNRT0iX0RfIj48IS0tIC0tPjwvQT48SDI+Ci08Qj5EPC9CPjwvSDI+Ci08REw+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sI2RhdGVWYWx1ZSgpIj48Qj5kYXRlVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj5YbWxEYXRlVGltZTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCNnZXREYXRlVmFsdWUoKSI+PENPREU+WG1sRGF0ZVRpbWUuZ2V0RGF0ZVZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCNkYXRlVmFsdWUoKSI+PEI+ZGF0ZVZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj5YbWxEYXRlPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwjZ2V0RGF0ZVZhbHVlKCkiPjxDT0RFPlhtbERhdGUuZ2V0RGF0ZVZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZGF0ZVZhbHVlKCkiPjxCPmRhdGVWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldERhdGVWYWx1ZSgpIj48Q09ERT5TaW1wbGVWYWx1ZS5nZXREYXRlVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjZGF0ZVZhbHVlKCkiPjxCPmRhdGVWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2Rpc3Bvc2UoKSI+PEI+ZGlzcG9zZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+RGVhbGxvY2F0ZXMgcmVzb3VyY2VzIG5lZWRlZCB0byBtYW5hZ2UgdGhlIGN1cnNvciwgcmVuZGVyaW5nIHRoaXMgY3Vyc29yCi0gaW5vcGVyYWJsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5odG1sI0RPQ1RZUEVfTkFNRSI+PEI+RE9DVFlQRV9OQU1FPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwiPlhtbERvY3VtZW50UHJvcGVydGllczwvQT4KLTxERD5Eb2MgdHlwZSBuYW1lCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCNET0NUWVBFX1BVQkxJQ19JRCI+PEI+RE9DVFlQRV9QVUJMSUNfSUQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCI+WG1sRG9jdW1lbnRQcm9wZXJ0aWVzPC9BPgotPEREPkRvYyB0eXBlIHB1YmxpYyBpZAotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwjRE9DVFlQRV9TWVNURU1fSUQiPjxCPkRPQ1RZUEVfU1lTVEVNX0lEPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwiPlhtbERvY3VtZW50UHJvcGVydGllczwvQT4KLTxERD5Eb2MgdHlwZSBzeXN0ZW0gaWQKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNET0NVTUVOVF9TT1VSQ0VfTkFNRSI+PEI+RE9DVU1FTlRfU09VUkNFX05BTUU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjRE9DVU1FTlRfVFlQRSI+PEI+RE9DVU1FTlRfVFlQRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjZG9jdW1lbnRQcm9wZXJ0aWVzKCkiPjxCPmRvY3VtZW50UHJvcGVydGllcygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPgotPEREPlJldHVybnMgdGhlIFhtbERvY3VtZW50UHJvcGVydGllcyBvYmplY3QgZm9yIHRoZSBkb2N1bWVudCB0aGlzIHRva2VuCi0gc291cmNlIGlzIGFzc29jaWF0ZWQgd2l0aC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2RvY3VtZW50UHJvcGVydGllcygpIj48Qj5kb2N1bWVudFByb3BlcnRpZXMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwjZG9jdW1lbnRUeXBlcygpIj48Qj5kb2N1bWVudFR5cGVzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sIj5TY2hlbWFUeXBlU3lzdGVtPC9BPgotPEREPlJldHVybnMgdGhlIGRvY3VtZW50IHR5cGVzIGRlZmluZWQgaW4gdGhpcyBsb2FkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCNkb3VibGVWYWx1ZSgpIj48Qj5kb3VibGVWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj5YbWxEb3VibGU8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sI2dldERvdWJsZVZhbHVlKCkiPjxDT0RFPlhtbERvdWJsZS5nZXREb3VibGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2RvdWJsZVZhbHVlKCkiPjxCPmRvdWJsZVZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0RG91YmxlVmFsdWUoKSI+PENPREU+U2ltcGxlVmFsdWUuZ2V0RG91YmxlVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjZG91YmxlVmFsdWUoKSI+PEI+ZG91YmxlVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjRFRfRVhURU5TSU9OIj48Qj5EVF9FWFRFTlNJT048L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPkRlcml2ZWQgYnkgZXh0ZW5zaW9uLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0RUX05PVF9ERVJJVkVEIj48Qj5EVF9OT1RfREVSSVZFRDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+Tm90IGRlcml2ZWQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjRFRfUkVTVFJJQ1RJT04iPjxCPkRUX1JFU1RSSUNUSU9OPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5EZXJpdmVkIGJ5IHJlc3RyaWN0aW9uLgotPERUPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwjRFREIj48Qj5EVEQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwiPlhNTFN0cmVhbUNvbnN0YW50czwvQT4KLTxERD5JbmRpY2F0ZXMgYW4gZXZlbnQgaXMgYSBEVEQKLTwvREw+Ci08SFI+Ci08QSBOQU1FPSJfRV8iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPkU8L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjRUxFTUVOVCI+PEI+RUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sIj5TY2hlbWFQYXJ0aWNsZTwvQT4KLTxERD5BbiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2RlY2xhcmUtZWxlbWVudCI+eHM6ZWxlbWVudDwvYT4gcGFydGljbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNFTEVNRU5UIj48Qj5FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sIj5TY2hlbWFDb21wb25lbnQ8L0E+Ci08REQ+QW4gZWxlbWVudCBkZWZpbml0aW9uLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0VMRU1FTlRfQ09OVEVOVCI+PEI+RUxFTUVOVF9DT05URU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5FbGVtZW50LW9ubHkgY29udGVudC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwjRU1QVFkiPjxCPkVNUFRZPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+Ci08REQ+VGhlIGVtcHR5IFFOYW1lU2V0LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0VNUFRZX0NPTlRFTlQiPjxCPkVNUFRZX0NPTlRFTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPkVtcHR5IGNvbnRlbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCNFTkNPRElORyI+PEI+RU5DT0RJTkc8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCI+WG1sRG9jdW1lbnRQcm9wZXJ0aWVzPC9BPgotPEREPkRvY3VtZW50IGVuY29kaW5nCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjRU5EIj48Qj5FTkQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwiPlhtbEN1cnNvci5Ub2tlblR5cGU8L0E+Ci08REQ+VGhlIHNpbmdsZXRvbiBlbmQtZWxlbWVudCB0b2tlbiB0eXBlCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCNFTkRfRE9DVU1FTlQiPjxCPkVORF9ET0NVTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCI+WE1MU3RyZWFtQ29uc3RhbnRzPC9BPgotPEREPkluZGljYXRlcyBhbiBldmVudCBpcyBhbiBlbmQgZG9jdW1lbnQKLTxEVD48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sI0VORF9FTEVNRU5UIj48Qj5FTkRfRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCI+WE1MU3RyZWFtQ29uc3RhbnRzPC9BPgotPEREPkluZGljYXRlcyBhbiBldmVudCBpcyBhbiBlbmQgZWxlbWVudAotPERUPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwjRU5EX0VOVElUWSI+PEI+RU5EX0VOVElUWTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCI+WE1MU3RyZWFtQ29uc3RhbnRzPC9BPgotPEREPkluZGljYXRlcyBhbiBldmVudCBpcyB0aGUgZW5kIG9mIGEgcmVzb2x2ZWQgZW50aXR5Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjRU5ERE9DIj48Qj5FTkRET0M8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwiPlhtbEN1cnNvci5Ub2tlblR5cGU8L0E+Ci08REQ+VGhlIHNpbmdsZXRvbiBzdGFydC1kb2N1bWVudCB0b2tlbiB0eXBlCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCNFTlRJVFlfREVDTEFSQVRJT04iPjxCPkVOVElUWV9ERUNMQVJBVElPTjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCI+WE1MU3RyZWFtQ29uc3RhbnRzPC9BPgotPEREPkluZGljYXRlcyBhIEVudGl0eSBEZWNsYXJhdGlvbgotPERUPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwjRU5USVRZX1JFRkVSRU5DRSI+PEI+RU5USVRZX1JFRkVSRU5DRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCI+WE1MU3RyZWFtQ29uc3RhbnRzPC9BPgotPEREPkluZGljYXRlcyBhbiBldmVudCBpcyBhbiBlbnRpdHkgcmVmZXJlbmNlCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjRU5USVRZX1JFU09MVkVSIj48Qj5FTlRJVFlfUkVTT0xWRVI8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZW51bUVudHJ5Rm9yU3RyaW5nKGphdmEubGFuZy5TdHJpbmcpIj48Qj5lbnVtRW50cnlGb3JTdHJpbmcoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+UmV0dXJucyB0aGUgc3RyaW5nIGVudW0gZW50cnkgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gZW51bWVyYXRlZAotIHN0cmluZywgb3IgbnVsbCBpZiB0aGVyZSBpcyBubyBtYXRjaCBvciB0aGlzIHR5cGUgaXMgbm90Ci0gYSBzdHJpbmcgZW51bWVyYXRpb24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZW51bUZvckludChpbnQpIj48Qj5lbnVtRm9ySW50KGludCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPlJldHVybnMgdGhlIHN0cmluZyBlbnVtIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGVudW1lcmF0ZWQKLSBzdHJpbmcsIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gbWF0Y2ggb3IgdGhpcyB0eXBlIGlzIG5vdAotIGEgc3RyaW5nIGVudW1lcmF0aW9uLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2VudW1Gb3JTdHJpbmcoamF2YS5sYW5nLlN0cmluZykiPjxCPmVudW1Gb3JTdHJpbmcoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+UmV0dXJucyB0aGUgc3RyaW5nIGVudW0gdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gZW51bWVyYXRlZAotIHN0cmluZywgb3IgbnVsbCBpZiB0aGVyZSBpcyBubyBtYXRjaCBvciB0aGlzIHR5cGUgaXMgbm90Ci0gYSBzdHJpbmcgZW51bWVyYXRpb24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2VudW1WYWx1ZSgpIj48Qj5lbnVtVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRFbnVtVmFsdWUoKSI+PENPREU+U2ltcGxlVmFsdWUuZ2V0RW51bVZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2VudW1WYWx1ZSgpIj48Qj5lbnVtVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNFUVVBTCI+PEI+RVFVQUw8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4KLTxERD5FUVVBTCBpcyAwLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+PEI+ZXF1YWxzKE9iamVjdCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwiPlhtbFNpbXBsZUxpc3Q8L0E+Ci08REQ+VHdvIFhtbFNpbXBsZUxpc3RzIGFyZSBlcXVhbCBpZiBhbGwgdGhlaXIgaXRlbXMgYXJlIGVxdWFsLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj48Qj5lcXVhbHMoT2JqZWN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+Ci08REQ+VHdvIEdEdXJhdGlvbnMgYXJlIGVxdWFsIGlmIGFsbCB0aGVpciBmaWVsZHMgYXJlIGVxdWFsLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPjxCPmVxdWFscyhPYmplY3QpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+Ci08REQ+R0RhdGUgaXMgYW4gaW1tdXRhYmxlIGNsYXNzLCBhbmQgZXF1YWxpdHkgaXMgY29tcHV0ZWQgYmFzZWQKLSBvbiBpdHMgY2Fub25pY2FsIHZhbHVlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI0VSUk9SX0xJU1RFTkVSIj48Qj5FUlJPUl9MSVNURU5FUjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sI2V4Y2x1ZGVkUU5hbWVzSW5JbmNsdWRlZFVSSXMoKSI+PEI+ZXhjbHVkZWRRTmFtZXNJbkluY2x1ZGVkVVJJcygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+Ci08REQ+VGhlIGZpbml0ZSBzZXQgb2YgUU5hbWVzIHRoYXQgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIHNldCB3aXRoaW4gbmFtZXNwYWNlcwotIHRoYXQgYXJlIG90aGVyd2lzZSBpbmNsdWRlZC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sI2V4Y2x1ZGVkUU5hbWVzSW5JbmNsdWRlZFVSSXMoKSI+PEI+ZXhjbHVkZWRRTmFtZXNJbkluY2x1ZGVkVVJJcygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwiPlFOYW1lU2V0QnVpbGRlcjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwjZXhjbHVkZWRRTmFtZXNJbkluY2x1ZGVkVVJJcygpIj48Qj5leGNsdWRlZFFOYW1lc0luSW5jbHVkZWRVUklzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj5RTmFtZVNldDwvQT4KLTxERD5UaGUgc2V0IG9mIFFOYW1lcyBleGNsdWRlZCBmcm9tIHRoZSBzZXQgZXZlbiB0aG91Z2ggdGhleSBhcmUgd2l0aGluCi0gYSBuYW1lc3BhY2UgdGhhdCBpcyBvdGhlcndpc2UgZnVsbHkgaW5jbHVkZWQgaW4gdGhlIHNldC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sI2V4Y2x1ZGVkVVJJcygpIj48Qj5leGNsdWRlZFVSSXMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPgotPEREPlRoZSBmaW5pdGUgc2V0IG9mIG5hbWVzcGFjZSBVUklzIHRoYXQgYXJlIGFsbW9zdCBjb21wbGV0ZWx5IGV4Y2x1ZGVkIGZyb20KLSB0aGUgc2V0ICh0aGF0IGlzLCBlYWNoIG5hbWVzcGFjZSBVUkkgdGhhdCBpbmNsdWRlZCBpbiB0aGUgc2V0IHdpdGggd2l0aAotIGEgZmluaXRlIG51bWJlciBvZiBRTmFtZSBleGNlcHRpb25zKS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sI2V4Y2x1ZGVkVVJJcygpIj48Qj5leGNsdWRlZFVSSXMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sIj5RTmFtZVNldEJ1aWxkZXI8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sI2V4Y2x1ZGVkVVJJcygpIj48Qj5leGNsdWRlZFVSSXMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwiPlFOYW1lU2V0PC9BPgotPEREPk5hbWVzcGFjZXMgdGhhdCBhcmUgZnVsbHkgZXhjbHVkZWQgZnJvbSB0aGUgc2V0IGV4Y2VwdCBmb3IgYSBmaW5pdGUKLSBudW1iZXIgb2YgaW5kaXZpZHVhbCBRTmFtZSBleGNlcHRpb25zLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcpIj48Qj5leGVjUXVlcnkoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPgotPEREPkV4ZWN1dGVzIGEgcXVlcnkuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZykiPjxCPmV4ZWNRdWVyeShTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+RXhlY3V0ZXMgdGhlIHNwZWNpZmllZCBYUXVlcnkgZXhwcmVzc2lvbiBhZ2FpbnN0IHRoZSBYTUwgdGhpcwotIGN1cnNvciBpcyBpbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+ZXhlY1F1ZXJ5KFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPmV4ZWNRdWVyeShTdHJpbmcsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+Ci08REQ+RXhlY3V0ZXMgYSBxdWVyeSB3aXRoIG9wdGlvbnMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+ZXhlY1F1ZXJ5KFN0cmluZywgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5FeGVjdXRlcyB0aGUgc3BlY2lmaWVkIFhRdWVyeSBleHByZXNzaW9uIGFnYWluc3QgdGhlIFhNTCB0aGlzCi0gY3Vyc29yIGlzIGluLCBhbmQgdXNpbmcgdGhlIHNwZWNpZmllZCBvcHRpb25zLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPmV4ZWNRdWVyeShTdHJpbmcsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjZXh0ZW5kc0phdmFBcnJheSgpIj48Qj5leHRlbmRzSmF2YUFycmF5KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCI+U2NoZW1hUHJvcGVydHk8L0E+Ci08REQ+VHJ1ZSBpZiB0aGVyZSBpcyBhIEphdmEgZ2V0dGVyIHRoYXQgcmV0dXJucyBhbiBhcnJheS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjZXh0ZW5kc0phdmFPcHRpb24oKSI+PEI+ZXh0ZW5kc0phdmFPcHRpb24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sIj5TY2hlbWFQcm9wZXJ0eTwvQT4KLTxERD5UcnVlIGlmIHRoZXJlIGlzIGFuIEphdmEgaXNTZXQgbWV0aG9kIHRoYXQgdGVzdHMgZm9yIHByZXNlbmNlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNleHRlbmRzSmF2YVNpbmdsZXRvbigpIj48Qj5leHRlbmRzSmF2YVNpbmdsZXRvbigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwiPlNjaGVtYVByb3BlcnR5PC9BPgotPEREPlRydWUgaWYgdGhlcmUgaXMgYSBKYXZhIGdldHRlciB0aGF0IHJldHVybnMgYSBzaW5nbGV0b24uCi08L0RMPgotPEhSPgotPEEgTkFNRT0iX0ZfIj48IS0tIC0tPjwvQT48SDI+Ci08Qj5GPC9CPjwvSDI+Ci08REw+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjRkFDRVRfRU5VTUVSQVRJT04iPjxCPkZBQ0VUX0VOVU1FUkFUSU9OPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD54czplbnVtZXJhdGlvbiBmYWNldCAtIHVzZSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRFbnVtZXJhdGlvblZhbHVlcygpIj48Q09ERT5TY2hlbWFUeXBlLmdldEVudW1lcmF0aW9uVmFsdWVzKCk8L0NPREU+PC9BPiBpbnN0ZWFkCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjRkFDRVRfRlJBQ1RJT05fRElHSVRTIj48Qj5GQUNFVF9GUkFDVElPTl9ESUdJVFM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOmZyYWN0aW9uRGlnaXRzIGZhY2V0Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjRkFDRVRfTEVOR1RIIj48Qj5GQUNFVF9MRU5HVEg8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOmxlbmd0aCBmYWNldAotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0ZBQ0VUX01BWF9FWENMVVNJVkUiPjxCPkZBQ0VUX01BWF9FWENMVVNJVkU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOm1heEV4Y2x1c2l2ZSBmYWNldAotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0ZBQ0VUX01BWF9JTkNMVVNJVkUiPjxCPkZBQ0VUX01BWF9JTkNMVVNJVkU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOm1heEluY2x1c2l2ZSBmYWNldAotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0ZBQ0VUX01BWF9MRU5HVEgiPjxCPkZBQ0VUX01BWF9MRU5HVEg8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOm1heExlbmd0aCBmYWNldAotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0ZBQ0VUX01JTl9FWENMVVNJVkUiPjxCPkZBQ0VUX01JTl9FWENMVVNJVkU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOm1pbkV4Y2x1c2l2ZSBmYWNldAotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0ZBQ0VUX01JTl9JTkNMVVNJVkUiPjxCPkZBQ0VUX01JTl9JTkNMVVNJVkU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOm1pbkluY2x1c2l2ZSBmYWNldAotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0ZBQ0VUX01JTl9MRU5HVEgiPjxCPkZBQ0VUX01JTl9MRU5HVEg8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOm1pbkxlbmd0aCBmYWNldAotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0ZBQ0VUX1BBVFRFUk4iPjxCPkZBQ0VUX1BBVFRFUk48L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOnBhdHRlcm4gZmFjZXQgLSB1c2UgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjbWF0Y2hQYXR0ZXJuRmFjZXQoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPlNjaGVtYVR5cGUubWF0Y2hQYXR0ZXJuRmFjZXQoamF2YS5sYW5nLlN0cmluZyk8L0NPREU+PC9BPiBpbnN0ZWFkCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjRkFDRVRfVE9UQUxfRElHSVRTIj48Qj5GQUNFVF9UT1RBTF9ESUdJVFM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPnhzOnRvdGFsRGlnaXRzIGZhY2V0Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjRkFDRVRfV0hJVEVfU1BBQ0UiPjxCPkZBQ0VUX1dISVRFX1NQQUNFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD54czp3aGl0ZVNwYWNlIGZhY2V0IC0gdXNlIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldFdoaXRlU3BhY2VSdWxlKCkiPjxDT0RFPlNjaGVtYVR5cGUuZ2V0V2hpdGVTcGFjZVJ1bGUoKTwvQ09ERT48L0E+IGluc3RlYWQKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj48Qj5GaWx0ZXJYbWxPYmplY3Q8L0I+PC9BPiAtIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPi48REQ+QSBGaWx0ZXJYbWxPYmplY3QgZGVsZWdhdGVzIHRvIHNvbWUgb3RoZXIgWG1sT2JqZWN0LCB3aGljaCBpdCBjYW4gdXNlIGFzCi0gaXRzIGJhc2ljIHNvdXJjZSBvZiBkYXRhLCBwb3NzaWJseSB0cmFuc2Zvcm1pbmcgdGhlIGRhdGEgYWxvbmcgdGhlIHdheSBvcgotIHByb3ZpZGluZyBhZGRpdGlvbmFsIGZ1bmN0aW9uYWxpdHkuPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjRmlsdGVyWG1sT2JqZWN0KCkiPjxCPkZpbHRlclhtbE9iamVjdCgpPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNmaW5hbEV4dGVuc2lvbigpIj48Qj5maW5hbEV4dGVuc2lvbigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5UcnVlIGlmIG90aGVyIHR5cGVzIGNhbm5vdCBleHRlbmQgdGhpcyB0eXBlIChvbmx5IGZvciBjb21wbGV4IHR5cGVzKQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5odG1sI2ZpbmFsRXh0ZW5zaW9uKCkiPjxCPmZpbmFsRXh0ZW5zaW9uKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5odG1sIj5TY2hlbWFHbG9iYWxFbGVtZW50PC9BPgotPEREPlRydWUgaWYgdXNpbmcgdGhpcyBlbGVtZW50IGFzIHRoZSBoZWFkIG9mIGEgc3Vic3RpdHV0aW9uCi0gZ3JvdXAgZm9yIGEgc3Vic3RpdHV0aW9uIHZpYSB0eXBlIGV4dGVuc2lvbiBpcyBwcm9oaWJpdGVkLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2ZpbmFsTGlzdCgpIj48Qj5maW5hbExpc3QoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+VHJ1ZSBpZiBsaXN0IGRlcml2YXRpb24gb2YgdGhpcyB0eXBlIGlzIHByb2hpYml0ZWQgKG9ubHkgZm9yIHNpbXBsZSB0eXBlcykKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNmaW5hbFJlc3RyaWN0aW9uKCkiPjxCPmZpbmFsUmVzdHJpY3Rpb24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+VHJ1ZSBpZiBvdGhlciB0eXBlcyBjYW5ub3QgcmVzdHJpY3QgdGhpcyB0eXBlCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50Lmh0bWwjZmluYWxSZXN0cmljdGlvbigpIj48Qj5maW5hbFJlc3RyaWN0aW9uKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5odG1sIj5TY2hlbWFHbG9iYWxFbGVtZW50PC9BPgotPEREPlRydWUgaWYgdXNpbmcgdGhpcyBlbGVtZW50IGFzIHRoZSBoZWFkIG9mIGEgc3Vic3RpdHV0aW9uCi0gZ3JvdXAgZm9yIGEgc3Vic3RpdHV0aW9uIHZpYSB0eXBlIHJlc3RyaWN0aW9uIGlzIHByb2hpYml0ZWQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZmluYWxVbmlvbigpIj48Qj5maW5hbFVuaW9uKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPlRydWUgaWYgdW5pb24gZGVyaXZhdGlvbiBvZiB0aGlzIHR5cGUgaXMgcHJvaGliaXRlZCAob25seSBmb3Igc2ltcGxlIHR5cGVzKQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI2ZpbmRBdHRyaWJ1dGUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxCPmZpbmRBdHRyaWJ1dGUoUU5hbWUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+U2NoZW1hVHlwZUxvYWRlcjwvQT4KLTxERD5SZXR1cm5zIHRoZSBnbG9iYWwgYXR0cmlidXRlIGRlZmludGlvbiB3aXRoIHRoZSBnaXZlbiBuYW1lLCBvciBudWxsIGlmIG5vbmUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwjZmluZEF0dHJpYnV0ZUdyb3VwKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48Qj5maW5kQXR0cmlidXRlR3JvdXAoUU5hbWUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+U2NoZW1hVHlwZUxvYWRlcjwvQT4KLTxERD5SZXR1cm5zIHRoZSBhdHRyaWJ1dGUgZ3JvdXAgZGVmaW50aW9uIHdpdGggdGhlIGdpdmVuIG5hbWUsIG9yIG51bGwgaWYgbm9uZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNmaW5kQXR0cmlidXRlR3JvdXBSZWYoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxCPmZpbmRBdHRyaWJ1dGVHcm91cFJlZihRTmFtZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sIj5TY2hlbWFUeXBlTG9hZGVyPC9BPgotPEREPlVzZWQgZm9yIG9uLWRlbWFuZCBsb2FkaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI2ZpbmRBdHRyaWJ1dGVSZWYoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxCPmZpbmRBdHRyaWJ1dGVSZWYoUU5hbWUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+U2NoZW1hVHlwZUxvYWRlcjwvQT4KLTxERD5Vc2VkIGZvciBvbi1kZW1hbmQgbG9hZGluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNmaW5kQXR0cmlidXRlVHlwZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PEI+ZmluZEF0dHJpYnV0ZVR5cGUoUU5hbWUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+U2NoZW1hVHlwZUxvYWRlcjwvQT4KLTxERD5SZXR1cm5zIHRoZSBhdHRyaWJ1dGUgdHlwZSBjb250YWluaW5nIHRoZSBnaXZlbiBhdHRyaWJ1dGUgbmFtZSwgb3IgbnVsbCBpZiBub25lLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI2ZpbmRBdHRyaWJ1dGVUeXBlUmVmKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48Qj5maW5kQXR0cmlidXRlVHlwZVJlZihRTmFtZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sIj5TY2hlbWFUeXBlTG9hZGVyPC9BPgotPEREPlVzZWQgZm9yIG9uLWRlbWFuZCBsb2FkaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI2ZpbmREb2N1bWVudFR5cGUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxCPmZpbmREb2N1bWVudFR5cGUoUU5hbWUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+U2NoZW1hVHlwZUxvYWRlcjwvQT4KLTxERD5SZXR1cm5zIHRoZSBkb2N1bWVudCB0eXBlIHJvb3RlZCBhdCB0aGUgZ2l2ZW4gZWxlbWVudCBuYW1lLCBvciBudWxsIGlmIG5vbmUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwjZmluZERvY3VtZW50VHlwZVJlZihqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PEI+ZmluZERvY3VtZW50VHlwZVJlZihRTmFtZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sIj5TY2hlbWFUeXBlTG9hZGVyPC9BPgotPEREPlVzZWQgZm9yIG9uLWRlbWFuZCBsb2FkaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI2ZpbmRFbGVtZW50KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48Qj5maW5kRWxlbWVudChRTmFtZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sIj5TY2hlbWFUeXBlTG9hZGVyPC9BPgotPEREPlJldHVybnMgdGhlIGdsb2JhbCBlbGVtZW50IGRlZmludGlvbiB3aXRoIHRoZSBnaXZlbiBuYW1lLCBvciBudWxsIGlmIG5vbmUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwjZmluZEVsZW1lbnRSZWYoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxCPmZpbmRFbGVtZW50UmVmKFFOYW1lKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXI8L0E+Ci08REQ+VXNlZCBmb3Igb24tZGVtYW5kIGxvYWRpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwjZmluZElkZW50aXR5Q29uc3RyYWludFJlZihqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PEI+ZmluZElkZW50aXR5Q29uc3RyYWludFJlZihRTmFtZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sIj5TY2hlbWFUeXBlTG9hZGVyPC9BPgotPEREPlVzZWQgZm9yIG9uLWRlbWFuZCBsb2FkaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI2ZpbmRNb2RlbEdyb3VwKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48Qj5maW5kTW9kZWxHcm91cChRTmFtZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sIj5TY2hlbWFUeXBlTG9hZGVyPC9BPgotPEREPlJldHVybnMgdGhlIG1vZGVsIGdyb3VwIGRlZmludGlvbiB3aXRoIHRoZSBnaXZlbiBuYW1lLCBvciBudWxsIGlmIG5vbmUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwjZmluZE1vZGVsR3JvdXBSZWYoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxCPmZpbmRNb2RlbEdyb3VwUmVmKFFOYW1lKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXI8L0E+Ci08REQ+VXNlZCBmb3Igb24tZGVtYW5kIGxvYWRpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwjZmluZFR5cGUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxCPmZpbmRUeXBlKFFOYW1lKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXI8L0E+Ci08REQ+UmV0dXJucyB0aGUgdHlwZSB3aXRoIHRoZSBnaXZlbiBuYW1lLCBvciBudWxsIGlmIG5vbmUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwjZmluZFR5cGVSZWYoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxCPmZpbmRUeXBlUmVmKFFOYW1lKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXI8L0E+Ci08REQ+VXNlZCBmb3Igb24tZGVtYW5kIGxvYWRpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sI2Zsb2F0VmFsdWUoKSI+PEI+ZmxvYXRWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPlhtbEZsb2F0PC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIGJ5IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCNnZXRGbG9hdFZhbHVlKCkiPjxDT0RFPlhtbEZsb2F0LmdldEZsb2F0VmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNmbG9hdFZhbHVlKCkiPjxCPmZsb2F0VmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRGbG9hdFZhbHVlKCkiPjxDT0RFPlNpbXBsZVZhbHVlLmdldEZsb2F0VmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjZmxvYXRWYWx1ZSgpIj48Qj5mbG9hdFZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCNmb3JBcnJheShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lW10pIj48Qj5mb3JBcnJheShRTmFtZVtdKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj5RTmFtZVNldDwvQT4KLTxERD5SZXR1cm5zIGEgUU5hbWVTZXQgYmFzZWQgb24gdGhlIGdpdmVuIGFycmF5IG9mIGluY2x1ZGVkIFFOYW1lcwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCNmb3JDdXJzb3IoamF2YS5sYW5nLlN0cmluZywgaW50LCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcikiPjxCPmZvckN1cnNvcihTdHJpbmcsIGludCwgWG1sQ3Vyc29yKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT4KLTxERD5SZXR1cm5zIGFuIFhtbEVycm9yIGZvciB0aGUgZ2l2ZW4gbWVzc2FnZSwgd2l0aCB0aGUgZ2l2ZW4gc2V2ZXJpdHksIGxvY2F0ZWQgYXQgdGhlIFhtbEN1cnNvci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjZm9yQ3Vyc29yKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yKSI+PEI+Zm9yQ3Vyc29yKFN0cmluZywgWG1sQ3Vyc29yKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT4KLTxERD5SZXR1cm5zIGFuIFhtbEVycm9yIGZvciB0aGUgZ2l2ZW4gbWVzc2FnZSwgbG9jYXRlZCBhdCB0aGUgWG1sQ3Vyc29yLCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCNTRVZFUklUWV9FUlJPUiI+PENPREU+WG1sRXJyb3IuU0VWRVJJVFlfRVJST1I8L0NPREU+PC9BPi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGUuaHRtbCNmb3JJbnQoaW50KSI+PEI+Zm9ySW50KGludCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLlRhYmxlLmh0bWwiPlN0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGU8L0E+Ci08REQ+UmV0dXJucyB0aGUgc2luZ2xldG9uIGZvciBhbiBpbnQgY29kZSwgb3IgbnVsbCBpZiBub25lLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCNmb3JMb2NhdGlvbihqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGphdmEubGFuZy5TdHJpbmcsIGludCwgaW50LCBpbnQpIj48Qj5mb3JMb2NhdGlvbihTdHJpbmcsIGludCwgU3RyaW5nLCBpbnQsIGludCwgaW50KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT4KLTxERD5SZXR1cm5zIGFuIFhtbEVycm9yIGZvciB0aGUgZ2l2ZW4gbWVzc2FnZSwgd2l0aCB0aGUgZ2l2ZW4gc2V2ZXJpdHksIGxvY2F0ZWQgYXQgYSBzcGVjaWZpYyBwb2ludCBpbiB0aGUgZ2l2ZW4gZmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjZm9yTG9jYXRpb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgaW50LCBpbnQsIGludCkiPjxCPmZvckxvY2F0aW9uKFN0cmluZywgU3RyaW5nLCBpbnQsIGludCwgaW50KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT4KLTxERD5SZXR1cm5zIGFuIFhtbEVycm9yIGZvciB0aGUgZ2l2ZW4gbWVzc2FnZSwgbG9jYXRlZCBhdCBhIHNwZWNpZmljIHBvaW50IGluIHRoZSBnaXZlbiBmaWxlIGFuZCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjU0VWRVJJVFlfRVJST1IiPjxDT0RFPlhtbEVycm9yLlNFVkVSSVRZX0VSUk9SPC9DT0RFPjwvQT4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI2ZvckxvY2F0aW9uQW5kQ3Vyc29yKGphdmEubGFuZy5TdHJpbmcsIGludCwgamF2YS5sYW5nLlN0cmluZywgaW50LCBpbnQsIGludCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IpIj48Qj5mb3JMb2NhdGlvbkFuZEN1cnNvcihTdHJpbmcsIGludCwgU3RyaW5nLCBpbnQsIGludCwgaW50LCBYbWxDdXJzb3IpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPlhtbEVycm9yPC9BPgotPEREPlJldHVybnMgYW4gWG1sRXJyb3IgZm9yIHRoZSBnaXZlbiBtZXNzYWdlLCB3aXRoIHRoZSBnaXZlbiBzZXZlcml0eSwgbG9jYXRlZCBhdCB0aGUgZ2l2ZW4gcGh5c2NpYWwgbG9jYXRpb24gYW5kIFhtbEN1cnNvci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjZm9ybWF0dGVkRmlsZU5hbWUoamF2YS5sYW5nLlN0cmluZywgamF2YS5uZXQuVVJJKSI+PEI+Zm9ybWF0dGVkRmlsZU5hbWUoU3RyaW5nLCBVUkkpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPlhtbEVycm9yPC9BPgotPEREPlRyaWVzIHRvIHByb2R1Y2UgYSBuaWNlbHkgZm9ybWF0dGVkIGZpbGVuYW1lIGZyb20gdGhlIGdpdmVuIHN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjZm9yTWVzc2FnZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+Zm9yTWVzc2FnZShTdHJpbmcpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPlhtbEVycm9yPC9BPgotPEREPlJldHVybnMgYW4gWG1sRXJyb3IgZm9yIHRoZSBnaXZlbiBtZXNzYWdlLCB3aXRoIG5vIGxvY2F0aW9uIGFuZCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjU0VWRVJJVFlfRVJST1IiPjxDT0RFPlhtbEVycm9yLlNFVkVSSVRZX0VSUk9SPC9DT0RFPjwvQT4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI2Zvck1lc3NhZ2UoamF2YS5sYW5nLlN0cmluZywgaW50KSI+PEI+Zm9yTWVzc2FnZShTdHJpbmcsIGludCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+WG1sRXJyb3I8L0E+Ci08REQ+UmV0dXJucyBhbiBYbWxFcnJvciBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UsIHdpdGggbm8gbG9jYXRpb24gYW5kIHRoZSBnaXZlbiBzZXZlcml0eS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjZm9yT2JqZWN0KGphdmEubGFuZy5TdHJpbmcsIGludCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj48Qj5mb3JPYmplY3QoU3RyaW5nLCBpbnQsIFhtbE9iamVjdCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+WG1sRXJyb3I8L0E+Ci08REQ+UmV0dXJucyBhbiBYbWxFcnJvciBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UsIHdpdGggdGhlIGdpdmVuIHNldmVyaXR5LCBsb2NhdGVkIGF0IHRoZSBYbWxPYmplY3QuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI2Zvck9iamVjdChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPjxCPmZvck9iamVjdChTdHJpbmcsIFhtbE9iamVjdCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+WG1sRXJyb3I8L0E+Ci08REQ+UmV0dXJucyBhbiBYbWxFcnJvciBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UsIGxvY2F0ZWQgYXQgdGhlIFhtbE9iamVjdCwgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjU0VWRVJJVFlfRVJST1IiPjxDT0RFPlhtbEVycm9yLlNFVkVSSVRZX0VSUk9SPC9DT0RFPjwvQT4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sI2ZvclNldHMoamF2YS51dGlsLlNldCwgamF2YS51dGlsLlNldCwgamF2YS51dGlsLlNldCwgamF2YS51dGlsLlNldCkiPjxCPmZvclNldHMoU2V0LCBTZXQsIFNldCwgU2V0KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj5RTmFtZVNldDwvQT4KLTxERD5SZXR1cm5zIGEgUU5hbWVTZXQgYmFzZWQgb24gdGhlIGdpdmVuIHNldHMgb2YgZXhjbHVkZWQgVVJJcywKLSBpbmNsdWRlZCBVUklzLCBleGNsdWRlZCBRTmFtZXMgaW4gaW5jbHVkZWQgbmFtZXNwYWNlcywgYW5kIGluY2x1ZGVkCi0gUU5hbWVzIGluIGV4Y2x1ZGVkIG5hbWVzcGFjZXMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI2ZvclNvdXJjZShqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGphdmEubGFuZy5TdHJpbmcpIj48Qj5mb3JTb3VyY2UoU3RyaW5nLCBpbnQsIFN0cmluZyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+WG1sRXJyb3I8L0E+Ci08REQ+UmV0dXJucyBhbiBYbWxFcnJvciBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UsIHdpdGggdGhlIGdpdmVuIHNldmVyaXR5LCBsb2NhdGVkIGluIHRoZSBnaXZlbiBmaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCNmb3JTb3VyY2UoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjxCPmZvclNvdXJjZShTdHJpbmcsIFN0cmluZyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+WG1sRXJyb3I8L0E+Ci08REQ+UmV0dXJucyBhbiBYbWxFcnJvciBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UsIGxvY2F0ZWQgaW4gdGhlIGdpdmVuIGZpbGUgYW5kIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCNTRVZFUklUWV9FUlJPUiI+PENPREU+WG1sRXJyb3IuU0VWRVJJVFlfRVJST1I8L0NPREU+PC9BPi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwjZm9yU3BlY2lmaWNhdGlvbihvcmcuYXBhY2hlLnhtbGJlYW5zLlFOYW1lU2V0U3BlY2lmaWNhdGlvbikiPjxCPmZvclNwZWNpZmljYXRpb24oUU5hbWVTZXRTcGVjaWZpY2F0aW9uKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj5RTmFtZVNldDwvQT4KLTxERD5SZXR1cm5zIGEgUU5hbWVTZXQgd2l0aCB0aGUgc2FtZSBjb250ZW50cyBhcyB0aGUgZ2l2ZW4KLSBRTmFtZVNldFNwZWNpZmljYXRpb24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLlRhYmxlLmh0bWwjZm9yU3RyaW5nKGphdmEubGFuZy5TdHJpbmcpIj48Qj5mb3JTdHJpbmcoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGUuaHRtbCI+U3RyaW5nRW51bUFic3RyYWN0QmFzZS5UYWJsZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBzaW5nbGV0b24gZm9yIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+PENPREU+U3RyaW5nPC9DT0RFPjwvQT4sIG9yIG51bGwgaWYgbm9uZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwjZm9yV2lsZGNhcmROYW1lc3BhY2VTdHJpbmcoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjxCPmZvcldpbGRjYXJkTmFtZXNwYWNlU3RyaW5nKFN0cmluZywgU3RyaW5nKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj5RTmFtZVNldDwvQT4KLTxERD5SZXR1cm5zIGEgUU5hbWVTZXQgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gd2lsZGNhcmQgbmFtZXNwYWNlIHN0cmluZy4KLTwvREw+Ci08SFI+Ci08QSBOQU1FPSJfR18iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPkc8L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxCPkdEYXRlPC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+LjxERD5SZXByZXNlbnRzIGFuIFhNTCBTY2hlbWEtY29tcGF0aWJsZSBHcmVnb3JpYW4gZGF0ZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI0dEYXRlKGphdmEudXRpbC5DYWxlbmRhcikiPjxCPkdEYXRlKENhbGVuZGFyKTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPgotPEREPkNvbnN0cnVjdHMgYSBHRGF0ZSBiYXNlZCBvbiBhIGphdmEudXRpbC5DYWxlbmRhci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwjR0RhdGUoamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSkiPjxCPkdEYXRlKENoYXJTZXF1ZW5jZSk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4KLTxERD5Db25zdHJ1Y3RzIGEgR0RhdGUgYmFzZWQgb24gYSBsZXhpY2FsIHJlcHJlc2VudGF0aW9uLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCNHRGF0ZShqYXZhLnV0aWwuRGF0ZSkiPjxCPkdEYXRlKERhdGUpPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+Ci08REQ+Q29uc3RydWN0cyBhIEdEYXRlIGJhc2VkIG9uIGEgamF2YS51dGlsLkRhdGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI0dEYXRlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+PEI+R0RhdGUoR0RhdGVTcGVjaWZpY2F0aW9uKTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPgotPEREPkNvbnN0cnVjdHMgYSBHRGF0ZSBiYXNlZCBvbiBhbm90aGVyIEdEYXRlU3BlY2lmaWNhdGlvbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwjR0RhdGUoaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgamF2YS5tYXRoLkJpZ0RlY2ltYWwpIj48Qj5HRGF0ZShpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBCaWdEZWNpbWFsKTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPgotPEREPkNvbnN0cnVjdHMgYSBHRGF0ZSB3aXRoIHRoZSBzcGVjaWZpZWQgeWVhciwgbW9udGgsIGRheSwKLSBob3VycywgbWludXRlcywgc2Vjb25kcywgYW5kIG9wdGlvbmFsIGZyYWN0aW9uYWwgc2Vjb25kcywgaW4KLSBhbiB1bnNwZWNpZmllZCB0aW1lem9uZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwjR0RhdGUoaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgamF2YS5tYXRoLkJpZ0RlY2ltYWwsIGludCwgaW50LCBpbnQpIj48Qj5HRGF0ZShpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBCaWdEZWNpbWFsLCBpbnQsIGludCwgaW50KTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPgotPEREPkNvbnN0cnVjdHMgYW4gYWJzb2x1dGUgR0RhdGUgd2l0aCB0aGUgc3BlY2lmaWVkIHllYXIsCi0gbW9udGgsIGRheSwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFuZCBvcHRpb25hbCBmcmFjdGlvbmFsCi0gc2Vjb25kcywgYW5kIGluIHRoZSB0aW1lem9uZSBzcGVjaWZpZWQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+PEI+R0RhdGVCdWlsZGVyPC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwiPkdEYXRlQnVpbGRlcjwvQT4uPEREPlVzZWQgdG8gYnVpbGQgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZXM8L0NPREU+PC9BPi48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNHRGF0ZUJ1aWxkZXIoKSI+PEI+R0RhdGVCdWlsZGVyKCk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+R0RhdGVCdWlsZGVyPC9BPgotPEREPkNvbnN0cnVjdHMgYSBHRGF0ZUJ1aWxkZXIgc3BlY2lmeWluZyBubyBkYXRlIG9yIHRpbWUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI0dEYXRlQnVpbGRlcihqYXZhLnV0aWwuQ2FsZW5kYXIpIj48Qj5HRGF0ZUJ1aWxkZXIoQ2FsZW5kYXIpPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwiPkdEYXRlQnVpbGRlcjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI0dEYXRlQnVpbGRlcihqYXZhLmxhbmcuQ2hhclNlcXVlbmNlKSI+PEI+R0RhdGVCdWlsZGVyKENoYXJTZXF1ZW5jZSk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+R0RhdGVCdWlsZGVyPC9BPgotPEREPkNvbnN0cnVjdHMgYSBHRGF0ZUJ1aWxkZXIgZnJvbSBhIGxleGljYWwKLSByZXByZXNlbnRhdGlvbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI0dEYXRlQnVpbGRlcihqYXZhLnV0aWwuRGF0ZSkiPjxCPkdEYXRlQnVpbGRlcihEYXRlKTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sIj5HRGF0ZUJ1aWxkZXI8L0E+Ci08REQ+Q29uc3RydWN0cyBhIEdEYXRlQnVpbGRlciBiYXNlZCBvbiBhIGphdmEudXRpbC5EYXRlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjR0RhdGVCdWlsZGVyKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+PEI+R0RhdGVCdWlsZGVyKEdEYXRlU3BlY2lmaWNhdGlvbik8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+R0RhdGVCdWlsZGVyPC9BPgotPEREPkNvbnN0cnV0cyBhIEdEYXRlQnVpbGRlciBieSBjb3B5aW5nIGFub3RoZXIgR0RhdGVTcGVjaWZpY2FpdG9uLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjR0RhdGVCdWlsZGVyKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGphdmEubWF0aC5CaWdEZWNpbWFsKSI+PEI+R0RhdGVCdWlsZGVyKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIEJpZ0RlY2ltYWwpPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwiPkdEYXRlQnVpbGRlcjwvQT4KLTxERD5Db25zdHJ1Y3RzIGEgR0RhdGVCdWlsZGVyIHdpdGggdGhlIHNwZWNpZmllZCB5ZWFyLCBtb250aCwgZGF5LAotIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBhbmQgb3B0aW9uYWwgZnJhY3Rpb25hbCBzZWNvbmRzLCBpbgotIGFuIHVuc3BlY2lmaWVkIHRpbWV6b25lLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjR0RhdGVCdWlsZGVyKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGphdmEubWF0aC5CaWdEZWNpbWFsLCBpbnQsIGludCwgaW50KSI+PEI+R0RhdGVCdWlsZGVyKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIEJpZ0RlY2ltYWwsIGludCwgaW50LCBpbnQpPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwiPkdEYXRlQnVpbGRlcjwvQT4KLTxERD5Db25zdHJ1Y3RzIGFuIGFic29sdXRlIEdEYXRlQnVpbGRlciB3aXRoIHRoZSBzcGVjaWZpZWQgeWVhciwKLSBtb250aCwgZGF5LCBob3VycywgbWludXRlcywgc2Vjb25kcywgYW5kIG9wdGlvbmFsIGZyYWN0aW9uYWwKLSBzZWNvbmRzLCBhbmQgaW4gdGhlIHRpbWV6b25lIHNwZWNpZmllZC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj48Qj5HRGF0ZVNwZWNpZmljYXRpb248L0I+PC9BPiAtIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4uPEREPlJlcHJlc2VudHMgYW4gWE1MIFNjaGVtYS1jb21wYXRpYmxlIEdyZWdvcmlhbiBkYXRlLjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCNnRGF0ZVZhbHVlKCkiPjxCPmdEYXRlVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPlhtbFRpbWU8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCNnZXRHRGF0ZVZhbHVlKCkiPjxDT0RFPlhtbFRpbWUuZ2V0R0RhdGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwjZ0RhdGVWYWx1ZSgpIj48Qj5nRGF0ZVZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj5YbWxHWWVhck1vbnRoPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwjZ2V0R0RhdGVWYWx1ZSgpIj48Q09ERT5YbWxHWWVhck1vbnRoLmdldEdEYXRlVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCNnRGF0ZVZhbHVlKCkiPjxCPmdEYXRlVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj5YbWxHWWVhcjwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCNnZXRHRGF0ZVZhbHVlKCkiPjxDT0RFPlhtbEdZZWFyLmdldEdEYXRlVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwjZ0RhdGVWYWx1ZSgpIj48Qj5nRGF0ZVZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPlhtbEdNb250aERheTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwjZ2V0R0RhdGVWYWx1ZSgpIj48Q09ERT5YbWxHTW9udGhEYXkuZ2V0R0RhdGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCNnRGF0ZVZhbHVlKCkiPjxCPmdEYXRlVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+WG1sR01vbnRoPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCNnZXRHRGF0ZVZhbHVlKCkiPjxDT0RFPlhtbEdNb250aC5nZXRHRGF0ZVZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCNnRGF0ZVZhbHVlKCkiPjxCPmdEYXRlVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPlhtbEdEYXk8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCNnZXRHRGF0ZVZhbHVlKCkiPjxDT0RFPlhtbEdEYXkuZ2V0R0RhdGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sI2dEYXRlVmFsdWUoKSI+PEI+Z0RhdGVWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPlhtbERhdGVUaW1lPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sI2dldEdEYXRlVmFsdWUoKSI+PENPREU+WG1sRGF0ZVRpbWUuZ2V0R0RhdGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwjZ0RhdGVWYWx1ZSgpIj48Qj5nRGF0ZVZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj5YbWxEYXRlPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwjZ2V0R0RhdGVWYWx1ZSgpIj48Q09ERT5YbWxEYXRlLmdldEdEYXRlVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnRGF0ZVZhbHVlKCkiPjxCPmdEYXRlVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRHRGF0ZVZhbHVlKCkiPjxDT0RFPlNpbXBsZVZhbHVlLmdldEdEYXRlVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjZ0RhdGVWYWx1ZSgpIj48Qj5nRGF0ZVZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwiPjxCPkdEdXJhdGlvbjwvQj48L0E+IC0gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+LjxERD5SZXByZXNlbnRzIGFuIFhNTCBTY2hlbWEtY29tcGF0aWJsZSBkdXJhdGlvbi48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCNHRHVyYXRpb24oKSI+PEI+R0R1cmF0aW9uKCk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCI+R0R1cmF0aW9uPC9BPgotPEREPkNvbnN0cnVjdHMgYW4gZW1wdHkgR0R1cmF0aW9uIHJlcHJlc2VudGluZyB6ZXJvIHNlY29uZHMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCNHRHVyYXRpb24oamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSkiPjxCPkdEdXJhdGlvbihDaGFyU2VxdWVuY2UpPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwiPkdEdXJhdGlvbjwvQT4KLTxERD5Db25zdHJ1Y3RzIGEgR0R1cmF0aW9uIGZyb20gYSBsZXhpY2FsCi0gcmVwcmVzZW50YXRpb24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCNHRHVyYXRpb24ob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb25TcGVjaWZpY2F0aW9uKSI+PEI+R0R1cmF0aW9uKEdEdXJhdGlvblNwZWNpZmljYXRpb24pPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwiPkdEdXJhdGlvbjwvQT4KLTxERD5Db25zdHJ1Y3RzIGEgR0R1cmF0aW9uIGZyb20gYW5vdGhlciBHRHVyYXRpb25TcGVjaWZpY2F0aW9uLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwjR0R1cmF0aW9uKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgamF2YS5tYXRoLkJpZ0RlY2ltYWwpIj48Qj5HRHVyYXRpb24oaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBCaWdEZWNpbWFsKTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+Ci08REQ+Q29uc3RydWN0cyBhIEdEdXJhdGlvbiB3aXRoIHRoZSBzcGVjaWZpZWQgc2lnbiwKLSB5ZWFyLCBtb250aCwgZGF5LCBob3VycywgbWludXRlcywgc2Vjb25kcywgYW5kIG9wdGlvbmFsCi0gZnJhY3Rpb25hbCBzZWNvbmRzLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sIj48Qj5HRHVyYXRpb25CdWlsZGVyPC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sIj5HRHVyYXRpb25CdWlsZGVyPC9BPi48REQ+VXNlZCB0byBidWlsZCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj48Q09ERT5HRHVyYXRpb25zPC9DT0RFPjwvQT4uPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sI0dEdXJhdGlvbkJ1aWxkZXIoKSI+PEI+R0R1cmF0aW9uQnVpbGRlcigpPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sIj5HRHVyYXRpb25CdWlsZGVyPC9BPgotPEREPkNvbnN0cnVjdHMgYW4gZW1wdHkgR0R1cmF0aW9uQnVpbGRlciByZXByZXNlbnRpbmcgemVybyBzZWNvbmRzLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sI0dEdXJhdGlvbkJ1aWxkZXIob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb25TcGVjaWZpY2F0aW9uKSI+PEI+R0R1cmF0aW9uQnVpbGRlcihHRHVyYXRpb25TcGVjaWZpY2F0aW9uKTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCI+R0R1cmF0aW9uQnVpbGRlcjwvQT4KLTxERD5Db25zdHJ1Y3RzIGEgR0R1cmF0aW9uQnVpbGRlciBmcm9tIGFub3RoZXIgR0R1cmF0aW9uQnVpbGRlclNwZWNpZmljYXRpb24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwjR0R1cmF0aW9uQnVpbGRlcihpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGphdmEubWF0aC5CaWdEZWNpbWFsKSI+PEI+R0R1cmF0aW9uQnVpbGRlcihpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIEJpZ0RlY2ltYWwpPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sIj5HRHVyYXRpb25CdWlsZGVyPC9BPgotPEREPkNvbnN0cnVjdHMgYSBHRHVyYXRpb25CdWlsZGVyIHdpdGggdGhlIHNwZWNpZmllZCBzaWduLAotIHllYXIsIG1vbnRoLCBkYXksIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBhbmQgb3B0aW9uYWwKLSBmcmFjdGlvbmFsIHNlY29uZHMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwjR0R1cmF0aW9uQnVpbGRlcihqYXZhLmxhbmcuU3RyaW5nKSI+PEI+R0R1cmF0aW9uQnVpbGRlcihTdHJpbmcpPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sIj5HRHVyYXRpb25CdWlsZGVyPC9BPgotPEREPkNvbnN0cnVjdHMgYSBHRHVyYXRpb24gZnJvbSBhIGxleGljYWwKLSByZXByZXNlbnRhdGlvbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCI+PEI+R0R1cmF0aW9uU3BlY2lmaWNhdGlvbjwvQj48L0E+IC0gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+LjxERD5SZXByZXNlbnRzIGFuIFhNTCBTY2hlbWEtY29tcGF0aWJsZSBkdXJhdGlvbi48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sI2dEdXJhdGlvblZhbHVlKCkiPjxCPmdEdXJhdGlvblZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+WG1sRHVyYXRpb248L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwjZ2V0R0R1cmF0aW9uVmFsdWUoKSI+PENPREU+WG1sRHVyYXRpb24uZ2V0R0R1cmF0aW9uVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnRHVyYXRpb25WYWx1ZSgpIj48Qj5nRHVyYXRpb25WYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldEdEdXJhdGlvblZhbHVlKCkiPjxDT0RFPlNpbXBsZVZhbHVlLmdldEdEdXJhdGlvblZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2dEdXJhdGlvblZhbHVlKCkiPjxCPmdEdXJhdGlvblZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5SZWYuaHRtbCNnZXQoKSI+PEI+Z2V0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLlJlZi5odG1sIj5TY2hlbWFUeXBlLlJlZjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYU1vZGVsR3JvdXAuUmVmLmh0bWwjZ2V0KCkiPjxCPmdldCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTW9kZWxHcm91cC5SZWYuaHRtbCI+U2NoZW1hTW9kZWxHcm91cC5SZWY8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmLmh0bWwjZ2V0KCkiPjxCPmdldCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZi5odG1sIj5TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5SZWYuaHRtbCNnZXQoKSI+PEI+Z2V0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50LlJlZi5odG1sIj5TY2hlbWFHbG9iYWxFbGVtZW50LlJlZjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWYuaHRtbCNnZXQoKSI+PEI+Z2V0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmLmh0bWwiPlNjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWY8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWYuaHRtbCNnZXQoKSI+PEI+Z2V0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWYuaHRtbCI+U2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sI2dldChpbnQpIj48Qj5nZXQoaW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCI+WG1sU2ltcGxlTGlzdDwvQT4KLTxERD5SZXR1cm5zIHRoZSBvYmplY3QgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbiBpbiB0aGlzIGxpc3QuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sI2dldChpbnQpIj48Qj5nZXQoaW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbENhbGVuZGFyLmh0bWwiPlhtbENhbGVuZGFyPC9BPgotPEREPkdldHMgdGhlIHZhbHVlIGZvciBhIGdpdmVuIHRpbWUgZmllbGQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjZ2V0KGphdmEubGFuZy5PYmplY3QpIj48Qj5nZXQoT2JqZWN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4KLTxERD5Vc2VkIHRvIGdldCBhIGdlbmVyaWMgb3B0aW9uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCNnZXQoamF2YS5sYW5nLk9iamVjdCkiPjxCPmdldChPYmplY3QpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwiPlhtbERvY3VtZW50UHJvcGVydGllczwvQT4KLTxERD5SZXR1cm5zIGEgdmFsdWUgcHJldmlvdXNseSBhdHRhY2hlZCB0byBhIGRvY3VtZW50IHVzaW5nIHNldC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2dldEFsbEJvb2ttYXJrUmVmcyhqYXZhLnV0aWwuQ29sbGVjdGlvbikiPjxCPmdldEFsbEJvb2ttYXJrUmVmcyhDb2xsZWN0aW9uKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPlJldHJpZXZlcyBhbGwgdGhlIGJvb2ttYXJrcyBhdCB0aGlzIGxvY2F0aW9uLCBhZGRpbmcgdGhlbSB0bwotIHRoZSBzcGVjaWZpZWQgY29sbGVjdGlvbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2dldEFsbE5hbWVzcGFjZXMoamF2YS51dGlsLk1hcCkiPjxCPmdldEFsbE5hbWVzcGFjZXMoTWFwKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPkFkZHMgdG8gdGhlIHNwZWNpZmllZCBtYXAsIGFsbCB0aGUgbmFtZXNwYWNlcyBpbiBzY29wZSBhdCB0aGUgY29udGFpbmVyCi0gd2hlcmUgdGhpcyBjdXJzb3IgaXMgcG9zaXRpb25lZC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRBbm9ueW1vdXNUeXBlcygpIj48Qj5nZXRBbm9ueW1vdXNUeXBlcygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5UaGUgYXJyYXkgb2YgaW5uZXIgKGFub255bW91cykgdHlwZXMgZGVmaW5lZAotIHdpdGhpbiB0aGlzIHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0QW5vbnltb3VzVW5pb25NZW1iZXJPcmRpbmFsKCkiPjxCPmdldEFub255bW91c1VuaW9uTWVtYmVyT3JkaW5hbCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5Gb3IgYW5vbnltb3VzIHR5cGVzIGRlZmluZWQgaW5zaWRlIGEgdW5pb24gb25seTogZ2V0cwotIHRoZSBpbnRlZ2VyIGluZGljYXRpbmcgdGhlIGRlY2xhcmF0aW9uIG9yZGVyIG9mIHRoaXMKLSB0eXBlIHdpdGhpbiB0aGUgb3V0ZXIgdW5pb24gdHlwZSwgb3IgemVybyBpZiB0aGlzIGlzCi0gbm90IGFwcGxpY2FibGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVNb2RlbC5odG1sI2dldEF0dHJpYnV0ZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PEI+Z2V0QXR0cmlidXRlKFFOYW1lKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVNb2RlbC5odG1sIj5TY2hlbWFBdHRyaWJ1dGVNb2RlbDwvQT4KLTxERD5SZXR1cm5zIHRoZSBhdHRyaWJ1dGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLTxEVD48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2dldEF0dHJpYnV0ZUNvdW50KCkiPjxCPmdldEF0dHJpYnV0ZUNvdW50KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwiPlhNTFN0cmVhbVJlYWRlcjwvQT4KLTxERD5SZXR1cm5zIHRoZSBjb3VudCBvZiBhdHRyaWJ1dGVzIG9uIHRoaXMgU1RBUlRfRUxFTUVOVCwKLSB0aGlzIG1ldGhvZCBpcyBvbmx5IHZhbGlkIG9uIGEgU1RBUlRfRUxFTUVOVC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRBdHRyaWJ1dGVNb2RlbCgpIj48Qj5nZXRBdHRyaWJ1dGVNb2RlbCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBhdHRyaWJ1dGUgbW9kZWwgZm9yIHRoaXMgY29tcGxleCB0eXBlICh3aXRoIHNpbXBsZSBvciBjb21wbGV4IGNvbnRlbnQpLgotPERUPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0QXR0cmlidXRlTmFtZShpbnQpIj48Qj5nZXRBdHRyaWJ1dGVOYW1lKGludCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwiPlhNTFN0cmVhbVJlYWRlcjwvQT4KLTxERD5SZXR1cm5zIHRoZSBsb2NhbE5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBhdCB0aGUgcHJvdmlkZWQKLSBpbmRleAotPERUPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0QXR0cmlidXRlTmFtZXNwYWNlKGludCkiPjxCPmdldEF0dHJpYnV0ZU5hbWVzcGFjZShpbnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sIj5YTUxTdHJlYW1SZWFkZXI8L0E+Ci08REQ+UmV0dXJucyB0aGUgbmFtZXNwYWNlIG9mIHRoZSBhdHRyaWJ1dGUgYXQgdGhlIHByb3ZpZGVkCi0gaW5kZXgKLTxEVD48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2dldEF0dHJpYnV0ZVByZWZpeChpbnQpIj48Qj5nZXRBdHRyaWJ1dGVQcmVmaXgoaW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCI+WE1MU3RyZWFtUmVhZGVyPC9BPgotPEREPlJldHVybnMgdGhlIHByZWZpeCBvZiB0aGlzIGF0dHJpYnV0ZSBhdCB0aGUKLSBwcm92aWRlZCBpbmRleAotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldEF0dHJpYnV0ZVByb3BlcnRpZXMoKSI+PEI+Z2V0QXR0cmlidXRlUHJvcGVydGllcygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5SZXR1cm5zIGFsbCB0aGUgU2NoZW1hUHJvcGVydGllcyBjb3JyZXNwb25kaW5nIHRvIGF0dHJpYnV0ZXMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0QXR0cmlidXRlUHJvcGVydHkoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxCPmdldEF0dHJpYnV0ZVByb3BlcnR5KFFOYW1lKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+UmV0dXJucyBhIFNjaGVtYVByb3BlcnR5IGNvcnJlc3BvbmRpbmcgdG8gYW4gYXR0cmlidXRlIHdpdGhpbiB0aGlzCi0gY29tcGxleCB0eXBlIGJ5IGxvb2tpbmcgdXAgdGhlIGF0dHJpYnV0ZSBuYW1lLgotPERUPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0QXR0cmlidXRlUU5hbWUoaW50KSI+PEI+Z2V0QXR0cmlidXRlUU5hbWUoaW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCI+WE1MU3RyZWFtUmVhZGVyPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCNnZXRBdHRyaWJ1dGVzKCkiPjxCPmdldEF0dHJpYnV0ZXMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVNb2RlbC5odG1sIj5TY2hlbWFBdHRyaWJ1dGVNb2RlbDwvQT4KLTxERD5SZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBhdHRyaWJ1dGVzIGluIHRoZSBtb2RlbC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2dldEF0dHJpYnV0ZVRleHQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxCPmdldEF0dHJpYnV0ZVRleHQoUU5hbWUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+V2hlbiBhdCBhIFNUQVJUIG9yIFNUQVJURE9DLCByZXR1cm5zIHRoZSBhdHRyaWJ1dGUgdGV4dCBmb3IgdGhlIGdpdmVuCi0gYXR0cmlidXRlLgotPERUPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0QXR0cmlidXRlVGV4dENoYXJhY3RlcnMoaW50LCBpbnQsIGNoYXJbXSwgaW50LCBpbnQpIj48Qj5nZXRBdHRyaWJ1dGVUZXh0Q2hhcmFjdGVycyhpbnQsIGludCwgY2hhcltdLCBpbnQsIGludCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwiPlhNTFN0cmVhbVJlYWRlcjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2dldEF0dHJpYnV0ZVR5cGUoaW50KSI+PEI+Z2V0QXR0cmlidXRlVHlwZShpbnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sIj5YTUxTdHJlYW1SZWFkZXI8L0E+Ci08REQ+UmV0dXJucyB0aGUgWE1MIHR5cGUgb2YgdGhlIGF0dHJpYnV0ZSBhdCB0aGUgcHJvdmlkZWQKLSBpbmRleAotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldEF0dHJpYnV0ZVR5cGUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSwgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyKSI+PEI+Z2V0QXR0cmlidXRlVHlwZShRTmFtZSwgU2NoZW1hVHlwZUxvYWRlcik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPlJldHVybnMgdGhlIHR5cGUgb2YgYW4gYXR0cmlidXRlIGJhc2VkIG9uIHRoZSBhdHRyaWJ1dGUgbmFtZSBhbmQKLSB0aGUgdHlwZSBzeXN0ZW0gd2l0aGluIHdoaWNoICh3aWxkY2FyZCkgbmFtZXMgYXJlIHJlc29sdmVkLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldEF0dHJpYnV0ZVR5cGVBdHRyaWJ1dGVOYW1lKCkiPjxCPmdldEF0dHJpYnV0ZVR5cGVBdHRyaWJ1dGVOYW1lKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPlJldHVybnMgdGhlIGF0dHJpYnV0ZSBxbmFtZSBpZiB0aGlzIGlzIGEgYXR0cmlidXRlIHR5cGUsCi0gb3IgbnVsbCBvdGhlcndpc2UuCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNnZXRBdHRyaWJ1dGVWYWx1ZShpbnQpIj48Qj5nZXRBdHRyaWJ1dGVWYWx1ZShpbnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sIj5YTUxTdHJlYW1SZWFkZXI8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBhdCB0aGUKLSBpbmRleAotPERUPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0QXR0cmlidXRlVmFsdWUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjxCPmdldEF0dHJpYnV0ZVZhbHVlKFN0cmluZywgU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCI+WE1MU3RyZWFtUmVhZGVyPC9BPgotPEREPlJldHVybnMgdGhlIG5vcm1hbGl6ZWQgYXR0cmlidXRlIHZhbHVlIG9mIHRoZQotIGF0dHJpYnV0ZSB3aXRoIHRoZSBuYW1lc3BhY2UgYW5kIGxvY2FsTmFtZQotIElmIHRoZSBuYW1lc3BhY2VVUkkgaXMgbnVsbCB0aGUgbmFtZXNwYWNlCi0gaXMgbm90IGNoZWNrZWQgZm9yIGVxdWFsaXR5Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0QmFzZUVudW1UeXBlKCkiPjxCPmdldEJhc2VFbnVtVHlwZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5JZiB0aGlzIGlzIGEgc3RyaW5nIGVudW1lcmF0aW9uLCByZXR1cm5zIHRoZSBtb3N0IGJhc2ljIGJhc2Ugc2NoZW1hCi0gdHlwZSB0aGF0IHRoaXMgZW51ZW1yYXRpb24gaXMgYmFzZWQgb24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0QmFzZVR5cGUoKSI+PEI+Z2V0QmFzZVR5cGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+UmV0dXJucyBiYXNlIHJlc3RyaWN0aW9uIG9yIGV4dGVuc2lvbiB0eXBlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI2dldEJpZ0RlY2ltYWxWYWx1ZSgpIj48Qj5nZXRCaWdEZWNpbWFsVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiPjxDT0RFPkJpZ0RlY2ltYWw8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRCaWdEZWNpbWFsVmFsdWUoKSI+PEI+Z2V0QmlnRGVjaW1hbFZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+PENPREU+QmlnRGVjaW1hbDwvQ09ERT48L0E+LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjZ2V0QmlnRGVjaW1hbFZhbHVlKCkiPjxCPmdldEJpZ0RlY2ltYWxWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCNnZXRCaWdJbnRlZ2VyVmFsdWUoKSI+PEI+Z2V0QmlnSW50ZWdlclZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIj48Q09ERT5CaWdJbnRlZ2VyPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0QmlnSW50ZWdlclZhbHVlKCkiPjxCPmdldEJpZ0ludGVnZXJWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPjxDT0RFPkJpZ0ludGVnZXI8L0NPREU+PC9BPi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2dldEJpZ0ludGVnZXJWYWx1ZSgpIj48Qj5nZXRCaWdJbnRlZ2VyVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNnZXRCb29rbWFyayhqYXZhLmxhbmcuT2JqZWN0KSI+PEI+Z2V0Qm9va21hcmsoT2JqZWN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPlJldHJpZXZlcyB0aGUgYm9va21hcmsgd2l0aCB0aGUgc3BlY2lmaWVkIGtleSAKLSBhdCB0aGlzIGN1cnNvcidzIGxvY2F0aW9uLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sI2dldEJvb2xlYW5WYWx1ZSgpIj48Qj5nZXRCb29sZWFuVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPlhtbEJvb2xlYW48L0E+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgYm9vbGVhbgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRCb29sZWFuVmFsdWUoKSI+PEI+Z2V0Qm9vbGVhblZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSBib29sZWFuLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjZ2V0Qm9vbGVhblZhbHVlKCkiPjxCPmdldEJvb2xlYW5WYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRCdWlsdGluVHlwZUNvZGUoKSI+PEI+Z2V0QnVpbHRpblR5cGVDb2RlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPlJldHVybnMgYW4gaW50ZWdlciBmb3IgYnVpbHRpbiB0eXBlcyB0aGF0IGNhbiBiZSB1c2VkCi0gZm9yIHF1aWNrIGNvbXBhcmlzb24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNnZXRCdWlsdGluVHlwZUNvZGUoKSI+PEI+Z2V0QnVpbHRpblR5cGVDb2RlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4KLTxERD5SZXR1cm5zIHRoZSBidWlsdGluIHR5cGUgY29kZSBmb3IgdGhlIHNoYXBlIG9mIHRoZSBpbmZvcm1hdGlvbgotIGNvbnRhaW5lZCBpbiB0aGlzIGluc3RhbmNlLCBvciAwIGlmIHRoZQotIGluc3RhbmNlIGRvZXNuJ3QgY29udGFpbiBpbmZvcm1hdGlvbiBjb3JyZXNwb25kaW5nIHRvIGEKLSBTY2hlbWEgdHlwZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2dldEJ1aWx0aW5UeXBlQ29kZSgpIj48Qj5nZXRCdWlsdGluVHlwZUNvZGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sIj5HRGF0ZUJ1aWxkZXI8L0E+Ci08REQ+UmV0dXJucyB0aGUgYnVpbHRpbiB0eXBlIGNvZGUgZm9yIHRoZSBzaGFwZSBvZiB0aGUgaW5mb3JtYXRpb24KLSBjb250YWluZWQgaW4gdGhpcyBpbnN0YW5jZSwgb3IgMCBpZiB0aGUKLSBpbnN0YW5jZSBkb2Vzbid0IGNvbnRhaW4gaW5mb3JtYXRpb24gY29ycmVzcG9uZGluZyB0byBhCi0gU2NoZW1hIHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI2dldEJ1aWx0aW5UeXBlQ29kZSgpIj48Qj5nZXRCdWlsdGluVHlwZUNvZGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPgotPEREPlJldHVybnMgdGhlIGJ1aWx0aW4gdHlwZSBjb2RlIGZvciB0aGUgc2hhcGUgb2YgdGhlIGluZm9ybWF0aW9uCi0gY29udGFpbmVkIGluIHRoaXMgaW5zdGFuY2UsIG9yIDAgaWYgdGhlCi0gaW5zdGFuY2UgZG9lc24ndCBjb250YWluIGluZm9ybWF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gYQotIFNjaGVtYSB0eXBlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuaHRtbCNnZXRCdWlsdGluVHlwZVN5c3RlbSgpIj48Qj5nZXRCdWlsdGluVHlwZVN5c3RlbSgpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwiPlhtbEJlYW5zPC9BPgotPEREPlJldHVybnMgdGhlIGJ1aWx0aW4gdHlwZSBzeXN0ZW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCNnZXRCeXRlQXJyYXlWYWx1ZSgpIj48Qj5nZXRCeXRlQXJyYXlWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj5YbWxIZXhCaW5hcnk8L0E+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgYnl0ZSBhcnJheS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sI2dldEJ5dGVBcnJheVZhbHVlKCkiPjxCPmdldEJ5dGVBcnJheVZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPlhtbEJhc2U2NEJpbmFyeTwvQT4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSBieXRlIGFycmF5LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRCeXRlQXJyYXlWYWx1ZSgpIj48Qj5nZXRCeXRlQXJyYXlWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgYnl0ZSBhcnJheS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2dldEJ5dGVBcnJheVZhbHVlKCkiPjxCPmdldEJ5dGVBcnJheVZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sI2dldEJ5dGVWYWx1ZSgpIj48Qj5nZXRCeXRlVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPlhtbEJ5dGU8L0E+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgYnl0ZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRCeXRlVmFsdWUoKSI+PEI+Z2V0Qnl0ZVZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSBieXRlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjZ2V0Qnl0ZVZhbHVlKCkiPjxCPmdldEJ5dGVWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2dldENhbGVuZGFyKCkiPjxCPmdldENhbGVuZGFyKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4KLTxERD5SZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IHRpbWUgYXMgYW4gPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sIj48Q09ERT5YbWxDYWxlbmRhcjwvQ09ERT48L0E+LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjZ2V0Q2FsZW5kYXIoKSI+PEI+Z2V0Q2FsZW5kYXIoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sIj5HRGF0ZUJ1aWxkZXI8L0E+Ci08REQ+UmV0cmlldmVzIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCB0aW1lIGFzIGFuIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ2FsZW5kYXIuaHRtbCI+PENPREU+WG1sQ2FsZW5kYXI8L0NPREU+PC9BPi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwjZ2V0Q2FsZW5kYXIoKSI+PEI+Z2V0Q2FsZW5kYXIoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPgotPEREPlJldHJpZXZlcyB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgdGltZSBhcyBhbiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbENhbGVuZGFyLmh0bWwiPjxDT0RFPlhtbENhbGVuZGFyPC9DT0RFPjwvQT4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwjZ2V0Q2FsZW5kYXJWYWx1ZSgpIj48Qj5nZXRDYWxlbmRhclZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj5YbWxUaW1lPC9BPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sI2dldENhbGVuZGFyVmFsdWUoKSI+PEI+Z2V0Q2FsZW5kYXJWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+WG1sR1llYXJNb250aDwvQT4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwjZ2V0Q2FsZW5kYXJWYWx1ZSgpIj48Qj5nZXRDYWxlbmRhclZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+WG1sR1llYXI8L0E+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCNnZXRDYWxlbmRhclZhbHVlKCkiPjxCPmdldENhbGVuZGFyVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+WG1sR01vbnRoRGF5PC9BPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwjZ2V0Q2FsZW5kYXJWYWx1ZSgpIj48Qj5nZXRDYWxlbmRhclZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPlhtbEdNb250aDwvQT4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCNnZXRDYWxlbmRhclZhbHVlKCkiPjxCPmdldENhbGVuZGFyVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPlhtbEdEYXk8L0E+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sI2dldENhbGVuZGFyVmFsdWUoKSI+PEI+Z2V0Q2FsZW5kYXJWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPlhtbERhdGVUaW1lPC9BPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sI2dldENhbGVuZGFyVmFsdWUoKSI+PEI+Z2V0Q2FsZW5kYXJWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+WG1sRGF0ZTwvQT4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0Q2FsZW5kYXJWYWx1ZSgpIj48Qj5nZXRDYWxlbmRhclZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNnZXRDYWxlbmRhclZhbHVlKCkiPjxCPmdldENhbGVuZGFyVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNnZXRDaGFyYWN0ZXJFbmNvZGluZ1NjaGVtZSgpIj48Qj5nZXRDaGFyYWN0ZXJFbmNvZGluZ1NjaGVtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sIj5YTUxTdHJlYW1SZWFkZXI8L0E+Ci08REQ+UmV0dXJucyB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIGRlY2xhcmVkIG9uIHRoZSB4bWwgZGVjbGFyYXRpb24KLSBSZXR1cm5zIG51bGwgaWYgbm9uZSB3YXMgZGVjbGFyZWQKLTxEVD48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL0xvY2F0aW9uLmh0bWwjZ2V0Q2hhcmFjdGVyT2Zmc2V0KCkiPjxCPmdldENoYXJhY3Rlck9mZnNldCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL0xvY2F0aW9uLmh0bWwiPkxvY2F0aW9uPC9BPgotPEREPlJldHVybiB0aGUgYnl0ZSBvciBjaGFyYWN0ZXIgb2Zmc2V0IGludG8gdGhlIGlucHV0IHNvdXJjZSB0aGlzIGxvY2F0aW9uCi0gaXMgcG9pbnRpbmcgdG8uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNnZXRDaGFycygpIj48Qj5nZXRDaGFycygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+UmV0dXJucyBjaGFyYWN0ZXJzIHRvIHRoZSByaWdodCBvZiB0aGUgY3Vyc29yIHVwIHRvIHRoZSBuZXh0IHRva2VuLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjZ2V0Q2hhcnMoY2hhcltdLCBpbnQsIGludCkiPjxCPmdldENoYXJzKGNoYXJbXSwgaW50LCBpbnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+Q29waWVzIGNoYXJhY3RlcnMgdXAgdG8gdGhlIHNwZWNpZmllZCBtYXhpbXVtIG51bWJlciwgY291bnRpbmcgcmlnaHQgZnJvbSAKLSB0aGlzIGN1cnNvcidzIGxvY2F0aW9uIHRvIHRoZSBjaGFyYWN0ZXIgYXQgPGVtPm1heENoYXJhY3RlckNvdW50PC9lbT4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwjZ2V0Q2xhc3NMb2FkZXIoKSI+PEI+Z2V0Q2xhc3NMb2FkZXIoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwiPlNjaGVtYVR5cGVTeXN0ZW08L0E+Ci08REQ+UmV0dXJucyB0aGUgY2xhc3Nsb2FkZXIgdXNlZCBieSB0aGlzIGxvYWRlciBmb3IgcmVzb2x2aW5nIHR5cGVzLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sI2dldENvZGUoKSI+PEI+Z2V0Q29kZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sIj5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uPC9BPgotPEREPlJldHVybnMgdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUsIGdpdmVuIGJ5IG9uZSBvZiB0aGUgbnVtZXJpYyBjb25zdGFudHMgaW4gdGhpcyBjbGFzcwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGluZU51bWJlci5odG1sI2dldENvbHVtbigpIj48Qj5nZXRDb2x1bW4oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExpbmVOdW1iZXIuaHRtbCI+WG1sTGluZU51bWJlcjwvQT4KLTxERD5SZXR1cm5zIHRoZSAxLWJhc2VkIGNvbHVtbiBudW1iZXIsIG9yIC0xIGlmIG5vdCBrbm93bi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjZ2V0Q29sdW1uKCkiPjxCPmdldENvbHVtbigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+WG1sRXJyb3I8L0E+Ci08REQ+UmV0dXJucyB0aGUgY29sdW1uIG51bWJlciBvZiB0aGUgZXJyb3IsIGlmIGF2YWlsYWJsZSwgLTEgaWYgbm90LgotPERUPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vTG9jYXRpb24uaHRtbCNnZXRDb2x1bW5OdW1iZXIoKSI+PEI+Z2V0Q29sdW1uTnVtYmVyKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vTG9jYXRpb24uaHRtbCI+TG9jYXRpb248L0E+Ci08REQ+UmV0dXJuIHRoZSBjb2x1bW4gbnVtYmVyIHdoZXJlIHRoZSBjdXJyZW50IGV2ZW50IGVuZHMsCi0gcmV0dXJucyAtMSBpZiBub25lIGlzIGF2YWlsYWJsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRDb21tb25CYXNlVHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj48Qj5nZXRDb21tb25CYXNlVHlwZShTY2hlbWFUeXBlKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+UmV0dXJucyBjb21tb24gYmFzZSB0eXBlIHdpdGggdGhlIGdpdmVuIHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuUmVmLmh0bWwjZ2V0Q29tcG9uZW50KCkiPjxCPmdldENvbXBvbmVudCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIj5TY2hlbWFDb21wb25lbnQuUmVmPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjZ2V0Q29tcG9uZW50UmVmKCkiPjxCPmdldENvbXBvbmVudFJlZigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sIj5TY2hlbWFDb21wb25lbnQ8L0E+Ci08REQ+VXNlZCBmb3Igb24tZGVtYW5kIGxvYWRpbmcgb2Ygc2NoZW1hIGNvbXBvbmVudHMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLlJlZi5odG1sI2dldENvbXBvbmVudFR5cGUoKSI+PEI+Z2V0Q29tcG9uZW50VHlwZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5SZWYuaHRtbCI+U2NoZW1hVHlwZS5SZWY8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFNb2RlbEdyb3VwLmh0bWwjZ2V0Q29tcG9uZW50VHlwZSgpIj48Qj5nZXRDb21wb25lbnRUeXBlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTW9kZWxHcm91cC5odG1sIj5TY2hlbWFNb2RlbEdyb3VwPC9BPgotPEREPlJldHVybnMgU2NoZW1hQ29tcG9uZW50LkdST1VQLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTW9kZWxHcm91cC5SZWYuaHRtbCNnZXRDb21wb25lbnRUeXBlKCkiPjxCPmdldENvbXBvbmVudFR5cGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYU1vZGVsR3JvdXAuUmVmLmh0bWwiPlNjaGVtYU1vZGVsR3JvdXAuUmVmPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZi5odG1sI2dldENvbXBvbmVudFR5cGUoKSI+PEI+Z2V0Q29tcG9uZW50VHlwZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZi5odG1sIj5TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5SZWYuaHRtbCNnZXRDb21wb25lbnRUeXBlKCkiPjxCPmdldENvbXBvbmVudFR5cGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEVsZW1lbnQuUmVmLmh0bWwiPlNjaGVtYUdsb2JhbEVsZW1lbnQuUmVmPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZi5odG1sI2dldENvbXBvbmVudFR5cGUoKSI+PEI+Z2V0Q29tcG9uZW50VHlwZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZi5odG1sIj5TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjZ2V0Q29tcG9uZW50VHlwZSgpIj48Qj5nZXRDb21wb25lbnRUeXBlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPlNjaGVtYUNvbXBvbmVudDwvQT4KLTxERD5SZXR1cm5zIHRoZSB0eXBlIGNvZGUgZm9yIHRoZSBzY2hlbWEgb2JqZWN0LCBlaXRoZXIgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNUWVBFIj48Q09ERT5TY2hlbWFDb21wb25lbnQuVFlQRTwvQ09ERT48L0E+LAotIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjRUxFTUVOVCI+PENPREU+U2NoZW1hQ29tcG9uZW50LkVMRU1FTlQ8L0NPREU+PC9BPiwgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNBVFRSSUJVVEUiPjxDT0RFPlNjaGVtYUNvbXBvbmVudC5BVFRSSUJVVEU8L0NPREU+PC9BPiwgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNBVFRSSUJVVEVfR1JPVVAiPjxDT0RFPlNjaGVtYUNvbXBvbmVudC5BVFRSSUJVVEVfR1JPVVA8L0NPREU+PC9BPiwKLSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI01PREVMX0dST1VQIj48Q09ERT5TY2hlbWFDb21wb25lbnQuTU9ERUxfR1JPVVA8L0NPREU+PC9BPiwgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNJREVOVElUWV9DT05TVFJBSU5UIj48Q09ERT5TY2hlbWFDb21wb25lbnQuSURFTlRJVFlfQ09OU1RSQUlOVDwvQ09ERT48L0E+LCBvciA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI05PVEFUSU9OIj48Q09ERT5TY2hlbWFDb21wb25lbnQuTk9UQVRJT048L0NPREU+PC9BPi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCNnZXRDb21wb25lbnRUeXBlKCkiPjxCPmdldENvbXBvbmVudFR5cGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCI+U2NoZW1hQ29tcG9uZW50LlJlZjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZUdyb3VwLmh0bWwjZ2V0Q29tcG9uZW50VHlwZSgpIj48Qj5nZXRDb21wb25lbnRUeXBlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlR3JvdXAuaHRtbCI+U2NoZW1hQXR0cmlidXRlR3JvdXA8L0E+Ci08REQ+UmV0dXJucyBTY2hlbWFDb21wb25lbnQuQVRUUklCVVRFX0dST1VQLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmLmh0bWwjZ2V0Q29tcG9uZW50VHlwZSgpIj48Qj5nZXRDb21wb25lbnRUeXBlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWYuaHRtbCI+U2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Lmh0bWwjZ2V0Q29uc3RyYWludENhdGVnb3J5KCkiPjxCPmdldENvbnN0cmFpbnRDYXRlZ29yeSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5odG1sIj5TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQ8L0E+Ci08REQ+UmV0dXJuIHRoZSBjb25zdHJhaW50IGNhdGVnb3J5LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldENvbnRhaW5lckZpZWxkKCkiPjxCPmdldENvbnRhaW5lckZpZWxkKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPlRoZSBwYXJlbnQgc2NoZW1hIGVsZW1lbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2dldENvbnRhaW5lclR5cGUoKSI+PEI+Z2V0Q29udGFpbmVyVHlwZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwiPlNjaGVtYVByb3BlcnR5PC9BPgotPEREPlRoZSB0eXBlIHdpdGhpbiB3aGljaCB0aGlzIHByb3BlcnR5IGFwcGVhcnMKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNheEhhbmRsZXIuaHRtbCNnZXRDb250ZW50SGFuZGxlcigpIj48Qj5nZXRDb250ZW50SGFuZGxlcigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNheEhhbmRsZXIuaHRtbCI+WG1sU2F4SGFuZGxlcjwvQT4KLTxERD5UaGUgQ29udGVudEhhbmRsZXIgZXhwZWN0aW5nIFNBWCBjb250ZW50IGV2ZW50cy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRDb250ZW50TW9kZWwoKSI+PEI+Z2V0Q29udGVudE1vZGVsKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPlJldHVybnMgdGhlIGNvbXBsZXggY29udGVudCBtb2RlbCBmb3IgdGhpcyBjb21wbGV4IHR5cGUgKHdpdGggY29tcGxleCBjb250ZW50KS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRDb250ZW50VHlwZSgpIj48Qj5nZXRDb250ZW50VHlwZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5SZXR1cm5zIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0VNUFRZX0NPTlRFTlQiPjxDT0RFPlNjaGVtYVR5cGUuRU1QVFlfQ09OVEVOVDwvQ09ERT48L0E+LCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNTSU1QTEVfQ09OVEVOVCI+PENPREU+U2NoZW1hVHlwZS5TSU1QTEVfQ09OVEVOVDwvQ09ERT48L0E+LCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNFTEVNRU5UX0NPTlRFTlQiPjxDT0RFPlNjaGVtYVR5cGUuRUxFTUVOVF9DT05URU5UPC9DT0RFPjwvQT4sIG9yCi0gPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjTUlYRURfQ09OVEVOVCI+PENPREU+U2NoZW1hVHlwZS5NSVhFRF9DT05URU5UPC9DT0RFPjwvQT4gZm9yIGNvbXBsZXggdHlwZXMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sI2dldENvbnRleHRUeXBlTG9hZGVyKCkiPjxCPmdldENvbnRleHRUeXBlTG9hZGVyKCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuaHRtbCI+WG1sQmVhbnM8L0E+Ci08REQ+R2V0cyB0aGUgU2NoZW1hVHlwZUxvYWRlciBiYXNlZCBvbiB0aGUgY3VycmVudCB0aHJlYWQncyBjb250ZXh0Ci0gQ2xhc3NMb2FkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI2dldEN1cnNvckxvY2F0aW9uKCkiPjxCPmdldEN1cnNvckxvY2F0aW9uKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT4KLTxERD5SZXR1cm5zIGEgbG9jYXRpb24gb2YgdGhlIGVycm9yIGFzIGFuIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPjxDT0RFPlhtbEN1cnNvcjwvQ09ERT48L0E+LCBudWxsIGlmCi0gbm90IGF2YWlsYWJsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2dldERhdGUoKSI+PEI+Z2V0RGF0ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+Ci08REQ+UmV0cmlldmVzIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCB0aW1lIGFzIGEgamF2YS51dGlsLkRhdGUKLSBpbnN0YW5jZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2dldERhdGUoKSI+PEI+Z2V0RGF0ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwiPkdEYXRlQnVpbGRlcjwvQT4KLTxERD5SZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IHRpbWUgYXMgYSBqYXZhLnV0aWwuRGF0ZQotIGluc3RhbmNlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCNnZXREYXRlKCkiPjxCPmdldERhdGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPgotPEREPlJldHJpZXZlcyB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgdGltZSBhcyBhIGphdmEudXRpbC5EYXRlCi0gaW5zdGFuY2UuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sI2dldERhdGVWYWx1ZSgpIj48Qj5nZXREYXRlVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj5YbWxEYXRlVGltZTwvQT4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+PENPREU+RGF0ZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwjZ2V0RGF0ZVZhbHVlKCkiPjxCPmdldERhdGVWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+WG1sRGF0ZTwvQT4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+PENPREU+RGF0ZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldERhdGVWYWx1ZSgpIj48Qj5nZXREYXRlVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvRGF0ZS5odG1sIj48Q09ERT5EYXRlPC9DT0RFPjwvQT4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNnZXREYXRlVmFsdWUoKSI+PEI+Z2V0RGF0ZVZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sI2dldERheSgpIj48Qj5nZXREYXkoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+Ci08REQ+R2V0cyB0aGUgZGF5LW9mLW1vbnRoIGNvbXBvbmVudC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCNnZXREYXkoKSI+PEI+Z2V0RGF5KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwiPkdEdXJhdGlvbkJ1aWxkZXI8L0E+Ci08REQ+R2V0cyB0aGUgZGF5LW9mLW1vbnRoIGNvbXBvbmVudC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sI2dldERheSgpIj48Qj5nZXREYXkoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+Ci08REQ+R2V0cyB0aGUgZGF5LW9mLW1vbnRoIGNvbXBvbmVudC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2dldERheSgpIj48Qj5nZXREYXkoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPgotPEREPkdldHMgdGhlIGRheS1vZi1tb250aC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2dldERheSgpIj48Qj5nZXREYXkoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sIj5HRGF0ZUJ1aWxkZXI8L0E+Ci08REQ+R2V0cyB0aGUgZGF5LW9mLW1vbnRoLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCNnZXREYXkoKSI+PEI+Z2V0RGF5KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4KLTxERD5HZXRzIHRoZSBkYXktb2YtbW9udGguCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0RGVjaW1hbFNpemUoKSI+PEI+Z2V0RGVjaW1hbFNpemUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+Rm9yIGF0b21pYyBudW1lcmljIHJlc3RyaWN0aW9ucyBvZiBkZWNpbWFsIG9ubHk6IHRoZQotIG51bWVyaWMgc2l6ZSBjYXRlZ29yeS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjZ2V0RGVmYXVsdFRleHQoKSI+PEI+Z2V0RGVmYXVsdFRleHQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sIj5TY2hlbWFQcm9wZXJ0eTwvQT4KLTxERD5SZXR1cm5zIHRoZSBkZWZhdWx0IG9yIGZpeGVkIHZhbHVlLAotIGlmIGl0IGlzIGNvbnNpc3RlbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI2dldERlZmF1bHRUZXh0KCkiPjxCPmdldERlZmF1bHRUZXh0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCI+U2NoZW1hUGFydGljbGU8L0E+Ci08REQ+Rm9yIGVsZW1lbnRzIG9ubHk6IHJldHVybnMgdGhlIGRlZmF1bHQgKG9yIGZpeGVkKSB0ZXh0IHZhbHVlCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sI2dldERlZmF1bHRUZXh0KCkiPjxCPmdldERlZmF1bHRUZXh0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCI+U2NoZW1hRmllbGQ8L0E+Ci08REQ+VGhlIGRlZmF1bHQgdmFsdWUgYXMgcGxhaW4gdGV4dC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjZ2V0RGVmYXVsdFZhbHVlKCkiPjxCPmdldERlZmF1bHRWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwiPlNjaGVtYVByb3BlcnR5PC9BPgotPEREPlJldHVybnMgdGhlIGRlZmF1bHQgb3IgZml4ZWQgdmFsdWUgYXMgYSBzdHJvbmdseS10eXBlZCB2YWx1ZSwKLSBpZiBpdCBpcyBjb25zaXN0ZW50LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNnZXREZWZhdWx0VmFsdWUoKSI+PEI+Z2V0RGVmYXVsdFZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCI+U2NoZW1hUGFydGljbGU8L0E+Ci08REQ+Rm9yIGVsZW1lbnRzIG9ubHk6IHJldHVybnMgdGhlIGRlZmF1bHQgKG9yIGZpeGVkKSBzdHJvbmdseS10eXBlZCB2YWx1ZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCNnZXREZWZhdWx0VmFsdWUoKSI+PEI+Z2V0RGVmYXVsdFZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCI+U2NoZW1hRmllbGQ8L0E+Ci08REQ+VGhlIGRlZmF1bHQgdmFsdWUgYXMgYSBzdHJvbmdseS10eXBlZCB2YWx1ZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbENhbGVuZGFyLmh0bWwjZ2V0RGVmYXVsdFllYXIoKSI+PEI+Z2V0RGVmYXVsdFllYXIoKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sIj5YbWxDYWxlbmRhcjwvQT4KLTxERD5SZXR1cm5zIHRoZSBkZWZhdWx0IHllYXIgdGhhdCBpcyB1c2VkIHdoZW4gbm8geWVhciBpcyBzcGVjaWZpZWQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0RGVyaXZhdGlvblR5cGUoKSI+PEI+Z2V0RGVyaXZhdGlvblR5cGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+UmV0dXJucyBhbiBpbnRlZ2VyIGZvciB0aGUgZGVyaXZhdGlvbiB0eXBlLCBlaXRoZXIgCi0gPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjRFRfRVhURU5TSU9OIj48Q09ERT5TY2hlbWFUeXBlLkRUX0VYVEVOU0lPTjwvQ09ERT48L0E+LCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNEVF9SRVNUUklDVElPTiI+PENPREU+U2NoZW1hVHlwZS5EVF9SRVNUUklDVElPTjwvQ09ERT48L0E+LCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNEVF9OT1RfREVSSVZFRCI+PENPREU+U2NoZW1hVHlwZS5EVF9OT1RfREVSSVZFRDwvQ09ERT48L0E+LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldERlcml2ZWRQcm9wZXJ0aWVzKCkiPjxCPmdldERlcml2ZWRQcm9wZXJ0aWVzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPlJldHVybnMgdGhlIFNjaGVtYVByb3BlcnRpZXMgZGVmaW5lZCBieSB0aGlzIGNvbXBsZXggdHlwZSwKLSBleGNsdXNpdmUgb2YgdGhlIGJhc2UgdHlwZSAoaWYgYW55KS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2dldERvY0NoYW5nZVN0YW1wKCkiPjxCPmdldERvY0NoYW5nZVN0YW1wKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5SZXR1cm5zIHRoZSBjdXJyZW50IGNoYW5nZSBzdGFtcCBmb3IgdGhlIGRvY3VtZW50IHRoZSBjdXJyZW50IGN1cnNvciBpcyBpbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5odG1sI2dldERvY3R5cGVOYW1lKCkiPjxCPmdldERvY3R5cGVOYW1lKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCI+WG1sRG9jdW1lbnRQcm9wZXJ0aWVzPC9BPgotPEREPlJldHVybnMgdGhlIERPQ1RZUEUgbmFtZSB1c2VkIGluIHRoZSAmbHQmIzMzO0RPQ1RZUEUmZ3Q7IGRlY2xhcmF0aW9uLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwjZ2V0RG9jdHlwZVB1YmxpY0lkKCkiPjxCPmdldERvY3R5cGVQdWJsaWNJZCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwiPlhtbERvY3VtZW50UHJvcGVydGllczwvQT4KLTxERD5SZXR1cm5zIHRoZSBET0NUWVBFIHB1YmxpYyBJRCB1c2VkIGluIHRoZSAmbHQmIzMzO0RPQ1RZUEUmZ3Q7IGRlY2xhcmF0aW9uLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwjZ2V0RG9jdHlwZVN5c3RlbUlkKCkiPjxCPmdldERvY3R5cGVTeXN0ZW1JZCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwiPlhtbERvY3VtZW50UHJvcGVydGllczwvQT4KLTxERD5SZXR1cm5zIHRoZSBET0NUWVBFIHN5c3RlbSBJRCB1c2VkIGluIHRoZSAmbHQmIzMzO0RPQ1RZUEUmZ3Q7IGRlY2xhcmF0aW9uLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldERvY3VtZW50RWxlbWVudE5hbWUoKSI+PEI+Z2V0RG9jdW1lbnRFbGVtZW50TmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBkb2N1bWVudCBlbGVtZW50IG5hbWUgaWYgdGhpcyBpcyBhIGRvY3VtZW50IHR5cGUsCi0gb3IgbnVsbCBvdGhlcndpc2UuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCNnZXREb3VibGVWYWx1ZSgpIj48Qj5nZXREb3VibGVWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj5YbWxEb3VibGU8L0E+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgZG91YmxlCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldERvdWJsZVZhbHVlKCkiPjxCPmdldERvdWJsZVZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSBkb3VibGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNnZXREb3VibGVWYWx1ZSgpIj48Qj5nZXREb3VibGVWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRFbGVtZW50UHJvcGVydGllcygpIj48Qj5nZXRFbGVtZW50UHJvcGVydGllcygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5SZXR1cm5zIGFsbCB0aGUgU2NoZW1hUHJvcGVydGllcyBjb3JyZXNwb25kaW5nIHRvIGVsZW1lbnRzLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldEVsZW1lbnRQcm9wZXJ0eShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PEI+Z2V0RWxlbWVudFByb3BlcnR5KFFOYW1lKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+UmV0dXJucyBhIFNjaGVtYVByb3BlcnR5IGNvcnJlc3BvbmRpbmcgdG8gYW4gZWxlbWVudCB3aXRoaW4gdGhpcwotIGNvbXBsZXggdHlwZSBieSBsb29raW5nIHVwIHRoZSBlbGVtZW50IG5hbWUuCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNnZXRFbGVtZW50VGV4dCgpIj48Qj5nZXRFbGVtZW50VGV4dCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sIj5YTUxTdHJlYW1SZWFkZXI8L0E+Ci08REQ+UmVhZHMgdGhlIGNvbnRlbnQgb2YgYSB0ZXh0LW9ubHkgZWxlbWVudC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRFbGVtZW50VHlwZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lLCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXIpIj48Qj5nZXRFbGVtZW50VHlwZShRTmFtZSwgUU5hbWUsIFNjaGVtYVR5cGVMb2FkZXIpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5SZXR1cm5zIHRoZSB0eXBlIG9mIGEgY2hpbGQgZWxlbWVudCBiYXNlZCBvbiB0aGUgZWxlbWVudCBuYW1lIGFuZAotIGFuIHhzaTp0eXBlIGF0dHJpYnV0ZSAoYW5kIHRoZSB0eXBlIHN5c3RlbSB3aXRoaW4gd2hpY2ggbmFtZXMgYXJlCi0gcmVzb2x2ZWQpLgotPERUPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0RW5jb2RpbmcoKSI+PEI+Z2V0RW5jb2RpbmcoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCI+WE1MU3RyZWFtUmVhZGVyPC9BPgotPEREPlJldHVybiBpbnB1dCBlbmNvZGluZyBpZiBrbm93biBvciBudWxsIGlmIHVua25vd24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCNnZXRFbmNvZGluZygpIj48Qj5nZXRFbmNvZGluZygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwiPlhtbERvY3VtZW50UHJvcGVydGllczwvQT4KLTxERD5SZXR1cm5zIHRoZSBlbmNvZGluZyB1c2VkIGZvciB0aGUgWE1MIGRvY3VtZW50LCBhcyBhbiBJU08gZW5jb2RpbmcgbmFtZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRFbnVtZXJhdGlvblZhbHVlcygpIj48Qj5nZXRFbnVtZXJhdGlvblZhbHVlcygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBhcnJheSBvZiB2YWxpZCBvYmplY3RzIGZyb20gdGhlCi0gZW51bWVyYXRpb24gZmFjZXQsIG51bGwgaWYgbm8gZW51bWVyYXRpb24gZGVmaW5lZC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRFbnVtSmF2YUNsYXNzKCkiPjxCPmdldEVudW1KYXZhQ2xhc3MoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+VGhlIEphdmEgY2xhc3MgY29ycmVzcG9uZGluZyB0byB0aGUgZW51bWVyYXRpb24gdHlwZSBmb3IgdGhpcyBzY2hlbWEgdHlwZSwKLSBpZiBhcHBsaWNhYmxlIChvciBudWxsIGlmIG5vdCBhbiBlbnVtZXJhdGlvbikuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFTdHJpbmdFbnVtRW50cnkuaHRtbCNnZXRFbnVtTmFtZSgpIj48Qj5nZXRFbnVtTmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVN0cmluZ0VudW1FbnRyeS5odG1sIj5TY2hlbWFTdHJpbmdFbnVtRW50cnk8L0E+Ci08REQ+QSBjYXBpdGFsaXplZCBuYW1lIHRvIHVzZSBmb3IgdGhlIGVudW1lcmF0aW9uIGNvbnN0YW50IG5hbWUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0RW51bVZhbHVlKCkiPjxCPmdldEVudW1WYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLmh0bWwiPjxDT0RFPlN0cmluZ0VudW1BYnN0cmFjdEJhc2U8L0NPREU+PC9BPi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2dldEVudW1WYWx1ZSgpIj48Qj5nZXRFbnVtVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxSdW50aW1lRXhjZXB0aW9uLmh0bWwjZ2V0RXJyb3IoKSI+PEI+Z2V0RXJyb3IoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFJ1bnRpbWVFeGNlcHRpb24uaHRtbCI+WG1sUnVudGltZUV4Y2VwdGlvbjwvQT4KLTxERD5SZXR1cm5zIHRoZSBmaXJzdCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPjxDT0RFPlhtbEVycm9yPC9DT0RFPjwvQT4gdGhhdCBjYXVzZWQgdGhpcyBleGNlcHRpb24sIGlmIGFueS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sI2dldEVycm9yKCkiPjxCPmdldEVycm9yKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPgotPEREPlJldHVybnMgdGhlIGZpcnN0IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+PENPREU+WG1sRXJyb3JzPC9DT0RFPjwvQT4gdGhhdCBjYXVzZWQgdGhlIGV4Y2VwdGlvbiwgaWYgYW55LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUnVudGltZUV4Y2VwdGlvbi5odG1sI2dldEVycm9ycygpIj48Qj5nZXRFcnJvcnMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFJ1bnRpbWVFeGNlcHRpb24uaHRtbCI+WG1sUnVudGltZUV4Y2VwdGlvbjwvQT4KLTxERD5SZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+PENPREU+WG1sRXJyb3JzPC9DT0RFPjwvQT4gdGhhdCBjYXVzZWQgdGhpcyBleGNlcHRpb24sIGlmIGFueS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sI2dldEVycm9ycygpIj48Qj5nZXRFcnJvcnMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+Ci08REQ+UmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPjxDT0RFPlhtbEVycm9yczwvQ09ERT48L0E+IHRoYXQgY2F1c2VkIHRoZSBleGNlcHRpb24sIGlmIGFueS4KLTxEVD48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2dldEV2ZW50VHlwZSgpIj48Qj5nZXRFdmVudFR5cGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCI+WE1MU3RyZWFtUmVhZGVyPC9BPgotPEREPlJldHVybnMgYW4gaW50ZWdlciBjb2RlIHRoYXQgaW5kaWNhdGVzIHRoZSB0eXBlCi0gb2YgdGhlIGV2ZW50IHRoZSBjdXJzb3IgaXMgcG9pbnRpbmcgdG8uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0RmFjZXQoaW50KSI+PEI+Z2V0RmFjZXQoaW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGdpdmVuIGZhY2V0LCBvciBudWxsIGlmCi0gbm9uZSBpcyBzZXQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuaHRtbCNnZXRGaWVsZFBhdGgoaW50KSI+PEI+Z2V0RmllbGRQYXRoKGludCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Lmh0bWwiPlNjaGVtYUlkZW50aXR5Q29uc3RyYWludDwvQT4KLTxERD5SZXR1cm4gYSBjb21waWxlZCB4cGF0aCBvYmplY3QgZm9yIHRoZSBmaWVsZC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5odG1sI2dldEZpZWxkcygpIj48Qj5nZXRGaWVsZHMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuaHRtbCI+U2NoZW1hSWRlbnRpdHlDb25zdHJhaW50PC9BPgotPEREPlJldHVybiAoYSBjb3B5IG9mKSB0aGUgeHBhdGhzIGZvciBhbGwgdGhlIGZpZWxkcy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2dldEZsYWdzKCkiPjxCPmdldEZsYWdzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4KLTxERD5SZXR1cm5zIGEgY29tYmluYXRpb24gb2YgZmxhZ3MgaW5kaWNhdGluZyB0aGUgaW5mb3JtYXRpb24KLSBjb250YWluZWQgYnkgdGhpcyBHRGF0ZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2dldEZsYWdzKCkiPjxCPmdldEZsYWdzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+R0RhdGVCdWlsZGVyPC9BPgotPEREPlJldHVybnMgYSBjb21iaW5hdGlvbiBvZiBmbGFncyBpbmRpY2F0aW5nIHRoZSBpbmZvcm1hdGlvbgotIGNvbnRhaW5lZCBieSB0aGlzIEdEYXRlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCNnZXRGbGFncygpIj48Qj5nZXRGbGFncygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+Ci08REQ+UmV0dXJucyBhIGNvbWJpbmF0aW9uIG9mIGZsYWdzIGluZGljYXRpbmcgdGhlIGluZm9ybWF0aW9uCi0gY29udGFpbmVkIGJ5IHRoaXMgR0RhdGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sI2dldEZsb2F0VmFsdWUoKSI+PEI+Z2V0RmxvYXRWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPlhtbEZsb2F0PC9BPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIGZsb2F0Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldEZsb2F0VmFsdWUoKSI+PEI+Z2V0RmxvYXRWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgZmxvYXQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNnZXRGbG9hdFZhbHVlKCkiPjxCPmdldEZsb2F0VmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwjZ2V0RnJhY3Rpb24oKSI+PEI+Z2V0RnJhY3Rpb24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+Ci08REQ+R2V0cyB0aGUgZnJhY3Rpb24tb2Ytc2Vjb25kLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sI2dldEZyYWN0aW9uKCkiPjxCPmdldEZyYWN0aW9uKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwiPkdEdXJhdGlvbkJ1aWxkZXI8L0E+Ci08REQ+R2V0cyB0aGUgZnJhY3Rpb24tb2Ytc2Vjb25kLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwjZ2V0RnJhY3Rpb24oKSI+PEI+Z2V0RnJhY3Rpb24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+Ci08REQ+R2V0cyB0aGUgZnJhY3Rpb24tb2Ytc2Vjb25kLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjZ2V0RnJhY3Rpb24oKSI+PEI+Z2V0RnJhY3Rpb24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPgotPEREPkdldHMgdGhlIGZyYWN0aW9uLW9mLXNlY29uZC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2dldEZyYWN0aW9uKCkiPjxCPmdldEZyYWN0aW9uKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+R0RhdGVCdWlsZGVyPC9BPgotPEREPkdldHMgdGhlIGZyYWN0aW9uLW9mLXNlY29uZC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwjZ2V0RnJhY3Rpb24oKSI+PEI+Z2V0RnJhY3Rpb24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPgotPEREPkdldHMgdGhlIGZyYWN0aW9uLW9mLXNlY29uZC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRGdWxsSmF2YUltcGxOYW1lKCkiPjxCPmdldEZ1bGxKYXZhSW1wbE5hbWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+VGhlIGZ1bGx5LXF1YWxpZmllZCBKYXZhIHR5cGUgbmFtZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3MuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0RnVsbEphdmFOYW1lKCkiPjxCPmdldEZ1bGxKYXZhTmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5UaGUgZnVsbHktcXVhbGlmaWVkIEphdmEgdHlwZSBuYW1lIG9mIHRoZSBjbGFzcy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCNnZXRHRGF0ZVZhbHVlKCkiPjxCPmdldEdEYXRlVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPlhtbFRpbWU8L0E+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwjZ2V0R0RhdGVWYWx1ZSgpIj48Qj5nZXRHRGF0ZVZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj5YbWxHWWVhck1vbnRoPC9BPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+PENPREU+R0RhdGU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCNnZXRHRGF0ZVZhbHVlKCkiPjxCPmdldEdEYXRlVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj5YbWxHWWVhcjwvQT4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sI2dldEdEYXRlVmFsdWUoKSI+PEI+Z2V0R0RhdGVWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj5YbWxHTW9udGhEYXk8L0E+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCNnZXRHRGF0ZVZhbHVlKCkiPjxCPmdldEdEYXRlVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+WG1sR01vbnRoPC9BPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+PENPREU+R0RhdGU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sI2dldEdEYXRlVmFsdWUoKSI+PEI+Z2V0R0RhdGVWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+WG1sR0RheTwvQT4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwjZ2V0R0RhdGVWYWx1ZSgpIj48Qj5nZXRHRGF0ZVZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+WG1sRGF0ZVRpbWU8L0E+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwjZ2V0R0RhdGVWYWx1ZSgpIj48Qj5nZXRHRGF0ZVZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj5YbWxEYXRlPC9BPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+PENPREU+R0RhdGU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRHRGF0ZVZhbHVlKCkiPjxCPmdldEdEYXRlVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+PENPREU+R0RhdGU8L0NPREU+PC9BPi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2dldEdEYXRlVmFsdWUoKSI+PEI+Z2V0R0RhdGVWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwjZ2V0R0R1cmF0aW9uVmFsdWUoKSI+PEI+Z2V0R0R1cmF0aW9uVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj5YbWxEdXJhdGlvbjwvQT4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj48Q09ERT5HRHVyYXRpb248L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRHRHVyYXRpb25WYWx1ZSgpIj48Qj5nZXRHRHVyYXRpb25WYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCI+PENPREU+R0R1cmF0aW9uPC9DT0RFPjwvQT4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNnZXRHRHVyYXRpb25WYWx1ZSgpIj48Qj5nZXRHRHVyYXRpb25WYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQuaHRtbCNnZXRIb29rKCkiPjxCPmdldEhvb2soKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGYWN0b3J5SG9vay5UaHJlYWRDb250ZXh0Lmh0bWwiPlhtbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQ8L0E+Ci08REQ+UmV0dXJucyB0aGUgY3VycmVudCB0aHJlYWQncyBob29rLCBvciBudWxsIGlmIG5vbmUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwjZ2V0SG91cigpIj48Qj5nZXRIb3VyKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPgotPEREPkdldHMgdGhlIGhvdXItb2YtZGF5IGNvbXBvbmVudC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCNnZXRIb3VyKCkiPjxCPmdldEhvdXIoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCI+R0R1cmF0aW9uQnVpbGRlcjwvQT4KLTxERD5HZXRzIHRoZSBob3VyLW9mLWRheSBjb21wb25lbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCNnZXRIb3VyKCkiPjxCPmdldEhvdXIoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+Ci08REQ+R2V0cyB0aGUgaG91ci1vZi1kYXkgY29tcG9uZW50LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjZ2V0SG91cigpIj48Qj5nZXRIb3VyKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4KLTxERD5HZXRzIHRoZSBob3VyLW9mLWRheS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2dldEhvdXIoKSI+PEI+Z2V0SG91cigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwiPkdEYXRlQnVpbGRlcjwvQT4KLTxERD5HZXRzIHRoZSBob3VyLW9mLWRheS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwjZ2V0SG91cigpIj48Qj5nZXRIb3VyKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4KLTxERD5HZXRzIHRoZSBob3VyLW9mLWRheS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsRWxlbWVudC5odG1sI2dldElkZW50aXR5Q29uc3RyYWludHMoKSI+PEI+Z2V0SWRlbnRpdHlDb25zdHJhaW50cygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsRWxlbWVudC5odG1sIj5TY2hlbWFMb2NhbEVsZW1lbnQ8L0E+Ci08REQ+UmV0dXJucyBhbGwgdGhlIEtleSwgS2V5UmVmLCBhbmQgVW5pcXVlIGNvbnN0cmFpbnRzCi0gb24gdGhpcyBlbGVtZW50LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNnZXRJbnRNYXhPY2N1cnMoKSI+PEI+Z2V0SW50TWF4T2NjdXJzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCI+U2NoZW1hUGFydGljbGU8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWF4T2NjdXJzIHZhbHVlLCBwZWdnZWQgdG8gYSAzMi1iaXQgaW50IGZvcgotIGNvbnZlbmllbmNlIG9mIGEgdmFsaWRhdGluZyBzdGF0ZSBtYWNoaW5lIHRoYXQgZG9lc24ndCBjb3VudAotIGhpZ2hlciB0aGFuIE1BWF9JTlQgYW55d2F5LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNnZXRJbnRNaW5PY2N1cnMoKSI+PEI+Z2V0SW50TWluT2NjdXJzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCI+U2NoZW1hUGFydGljbGU8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWluT2NjdXJzIHZhbHVlLCBwZWdnZWQgdG8gYSAzMi1iaXQgaW50IGZvcgotIGNvbnZlbmllbmNlIG9mIGEgdmFsaWRhdGluZyBzdGF0ZSBtYWNoaW5lIHRoYXQgZG9lc24ndCBjb3VudAotIGhpZ2hlciB0aGFuIE1BWF9JTlQgYW55d2F5LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sI2dldEludFZhbHVlKCkiPjxCPmdldEludFZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj5YbWxVbnNpZ25lZFNob3J0PC9BPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhbiBpbnQKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sI2dldEludFZhbHVlKCkiPjxCPmdldEludFZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPlhtbEludDwvQT4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYW4gaW50Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sI2dldEludFZhbHVlKCkiPjxCPmdldEludFZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+WG1sR1llYXI8L0E+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGFuIGludCBmcm9tIDEtMzEKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI2dldEludFZhbHVlKCkiPjxCPmdldEludFZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPlhtbEdNb250aDwvQT4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYW4gaW50IGZyb20gMS0xMgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sI2dldEludFZhbHVlKCkiPjxCPmdldEludFZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj5YbWxHRGF5PC9BPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhbiBpbnQgZnJvbSAxLTMxCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldEludFZhbHVlKCkiPjxCPmdldEludFZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYW4gaW50LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hU3RyaW5nRW51bUVudHJ5Lmh0bWwjZ2V0SW50VmFsdWUoKSI+PEI+Z2V0SW50VmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFTdHJpbmdFbnVtRW50cnkuaHRtbCI+U2NoZW1hU3RyaW5nRW51bUVudHJ5PC9BPgotPEREPkFuIGludGVnZXIgdG8gcmVwcmVzZW50IHRoaXMgY2hvaWNlIGluIHRoZSBlbnVtZXJhdGlvbgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjZ2V0SW50VmFsdWUoKSI+PEI+Z2V0SW50VmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0SmF2YUNsYXNzKCkiPjxCPmdldEphdmFDbGFzcygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5UaGUgSmF2YSBjbGFzcyBjb3JyZXNwb25kaW5nIHRvIHRoaXMgc2NoZW1hIHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2dldEphdmFQcm9wZXJ0eU5hbWUoKSI+PEI+Z2V0SmF2YVByb3BlcnR5TmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwiPlNjaGVtYVByb3BlcnR5PC9BPgotPEREPlRoZSBKYXZhIG5hbWUgZm9yIHRoaXMgcHJvcGVydHkuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2dldEphdmFTZXR0ZXJEZWxpbWl0ZXIoKSI+PEI+Z2V0SmF2YVNldHRlckRlbGltaXRlcigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwiPlNjaGVtYVByb3BlcnR5PC9BPgotPEREPlJldHVybnMgdGhlIHNldCBvZiBlbGVtZW50IG5hbWVzIHdoaWNoIHNob3VsZCBhcHBlYXIgc3RyaWN0bHkgYWZ0ZXIgYWxsCi0gb2NjdXJlbmNlcyBvZiB0aGUgZWxlbWVudHMgZGVzY3JpYmVkIGJ5IHRoaXMgcHJvcGVydHkuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2dldEphdmFUeXBlQ29kZSgpIj48Qj5nZXRKYXZhVHlwZUNvZGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sIj5TY2hlbWFQcm9wZXJ0eTwvQT4KLTxERD5SZXR1cm5zIHRoZSBuYXR1cmFsIEphdmEgdHlwZSBmb3IgdGhpcyBwcm9wZXJ0eS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2dldEp1bGlhbkRhdGUoKSI+PEI+Z2V0SnVsaWFuRGF0ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+Ci08REQ+UmV0dXJucyB0aGUgSnVsaWFuIGRhdGUgY29ycmVzcG9uZGluZyB0byB0aGlzIEdyZWdvcmlhbiBkYXRlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjZ2V0SnVsaWFuRGF0ZSgpIj48Qj5nZXRKdWxpYW5EYXRlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+R0RhdGVCdWlsZGVyPC9BPgotPEREPlJldHVybnMgdGhlIEp1bGlhbiBkYXRlIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBHcmVnb3JpYW4gZGF0ZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwjZ2V0SnVsaWFuRGF0ZSgpIj48Qj5nZXRKdWxpYW5EYXRlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBKdWxpYW4gZGF0ZSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgR3JlZ29yaWFuIGRhdGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuWG1sQm9va21hcmsuaHRtbCNnZXRLZXkoKSI+PEI+Z2V0S2V5KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuWG1sQm9va21hcmsuaHRtbCI+WG1sQ3Vyc29yLlhtbEJvb2ttYXJrPC9BPgotPEREPlRoZSBkZWZhdWx0IGtleSBmb3IgYm9va21hcmtzIGlzIHRoZSBjbGFzcyB3aGljaCBpbXBsZW1lbnRzCi0gdGhlbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNheEhhbmRsZXIuaHRtbCNnZXRMZXhpY2FsSGFuZGxlcigpIj48Qj5nZXRMZXhpY2FsSGFuZGxlcigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNheEhhbmRsZXIuaHRtbCI+WG1sU2F4SGFuZGxlcjwvQT4KLTxERD5UaGUgTGV4aWNhbEhhbmRsZXIgZXhwZWN0aW5nIFNBWCBsZXhpY2FsIGV2ZW50cy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExpbmVOdW1iZXIuaHRtbCNnZXRMaW5lKCkiPjxCPmdldExpbmUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExpbmVOdW1iZXIuaHRtbCI+WG1sTGluZU51bWJlcjwvQT4KLTxERD5SZXR1cm5zIHRoZSAxLWJhc2VkIGxpbmUgbnVtYmVyLCBvciAtMSBpZiBub3Qga25vd24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI2dldExpbmUoKSI+PEI+Z2V0TGluZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+WG1sRXJyb3I8L0E+Ci08REQ+UmV0dXJucyB0aGUgbGluZSBudW1iZXIgb2YgdGhlIGVycm9yLCBpZiBhdmFpbGFibGUsIC0xIGlmIG5vdC4KLTxEVD48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL0xvY2F0aW9uLmh0bWwjZ2V0TGluZU51bWJlcigpIj48Qj5nZXRMaW5lTnVtYmVyKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vTG9jYXRpb24uaHRtbCI+TG9jYXRpb248L0E+Ci08REQ+UmV0dXJuIHRoZSBsaW5lIG51bWJlciB3aGVyZSB0aGUgY3VycmVudCBldmVudCBlbmRzLAotIHJldHVybnMgLTEgaWYgbm9uZSBpcyBhdmFpbGFibGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0TGlzdEl0ZW1UeXBlKCkiPjxCPmdldExpc3RJdGVtVHlwZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5Gb3IgbGlzdCB0eXBlcyBvbmx5OiBnZXQgdGhlIGl0ZW0gdHlwZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwjZ2V0TGlzdFZhbHVlKCkiPjxCPmdldExpc3RWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPlhtbE5NVE9LRU5TPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPjxDT0RFPkxpc3Q8L0NPREU+PC9BPiBvZiA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj48Q09ERT5TdHJpbmc8L0NPREU+PC9BPiB2YWx1ZXMKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sI2dldExpc3RWYWx1ZSgpIj48Qj5nZXRMaXN0VmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+WG1sSURSRUZTPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPjxDT0RFPkxpc3Q8L0NPREU+PC9BPiBvZiA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj48Q09ERT5TdHJpbmc8L0NPREU+PC9BPiB2YWx1ZXMKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwjZ2V0TGlzdFZhbHVlKCkiPjxCPmdldExpc3RWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPlhtbEVOVElUSUVTPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPjxDT0RFPkxpc3Q8L0NPREU+PC9BPiBvZiA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj48Q09ERT5TdHJpbmc8L0NPREU+PC9BPiB2YWx1ZXMKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0TGlzdFZhbHVlKCkiPjxCPmdldExpc3RWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPjxDT0RFPkxpc3Q8L0NPREU+PC9BPiBvZiBmcmllbmRseSBKYXZhIG9iamVjdHMgKFN0cmluZywgSW50ZWdlciwgQnl0ZSwgU2hvcnQsIExvbmcsIEJpZ0ludGVnZXIsIERlY2ltYWwsIEZsb2F0LCBEb3VibGUsIGJ5dGVbXSwgQ2FsZW5kYXIsIEdEdXJhdGlvbikuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNnZXRMaXN0VmFsdWUoKSI+PEI+Z2V0TGlzdFZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0TG9jYWxOYW1lKCkiPjxCPmdldExvY2FsTmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sIj5YTUxTdHJlYW1SZWFkZXI8L0E+Ci08REQ+UmV0dXJucyB0aGUgKGxvY2FsKSBuYW1lIG9mIHRoZSBjdXJyZW50IGV2ZW50LgotPERUPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0TG9jYXRpb24oKSI+PEI+Z2V0TG9jYXRpb24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCI+WE1MU3RyZWFtUmVhZGVyPC9BPgotPEREPlJldHVybiB0aGUgY3VycmVudCBsb2NhdGlvbiBvZiB0aGUgcHJvY2Vzc29yLgotPERUPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwjZ2V0TG9jYXRpb24oKSI+PEI+Z2V0TG9jYXRpb24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3MgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+Ci08REQ+R2V0cyB0aGUgbG9jYXRpb24gb2YgdGhlIGV4Y2VwdGlvbgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCNnZXRMb2NhdGlvbihqYXZhLmxhbmcuT2JqZWN0KSI+PEI+Z2V0TG9jYXRpb24oT2JqZWN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPlhtbEVycm9yPC9BPgotPEREPlJldHVybnMgYSBsb2NhdGlvbiBvYmplY3Qgb2YgdGhlIGdpdmVuIHR5cGUuCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9Mb2NhdGlvbi5odG1sI2dldExvY2F0aW9uVVJJKCkiPjxCPmdldExvY2F0aW9uVVJJKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vTG9jYXRpb24uaHRtbCI+TG9jYXRpb248L0E+Ci08REQ+VGhlIFVSSSB0aGlzIExvY2F0aW9uIGlzIHBvaW50aW5nIHRvLCBvciBudWxsIGlmIG5vIFVSSSBpcyBhdmFpbGFibGUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwjZ2V0TG9uZ1ZhbHVlKCkiPjxCPmdldExvbmdWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPlhtbFVuc2lnbmVkSW50PC9BPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIGxvbmcKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCNnZXRMb25nVmFsdWUoKSI+PEI+Z2V0TG9uZ1ZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj5YbWxMb25nPC9BPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIGxvbmcKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0TG9uZ1ZhbHVlKCkiPjxCPmdldExvbmdWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgbG9uZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2dldExvbmdWYWx1ZSgpIj48Qj5nZXRMb25nVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2dldE1heE9jY3VycygpIj48Qj5nZXRNYXhPY2N1cnMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sIj5TY2hlbWFQcm9wZXJ0eTwvQT4KLTxERD5SZXR1cm5zIGEgc3VtbWFyaXplZCBtaW5pbXVtIG9jY3VycmFuY2UgbnVtYmVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNnZXRNYXhPY2N1cnMoKSI+PEI+Z2V0TWF4T2NjdXJzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCI+U2NoZW1hUGFydGljbGU8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWF4T2NjdXJzIHZhbHVlIGZvciB0aGlzIHBhcnRpY2xlLCBvciBudWxsIGlmIGl0Ci0gaXMgdW5ib3VuZGVkLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCNnZXRNYXhPY2N1cnMoKSI+PEI+Z2V0TWF4T2NjdXJzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCI+U2NoZW1hRmllbGQ8L0E+Ci08REQ+UmV0dXJucyB0aGUgbWF4T2NjdXJzIHZhbHVlIGZvciB0aGlzIHBhcnRpY2xlLCBvciBudWxsIGlmIGl0Ci0gaXMgdW5ib3VuZGVkLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCNnZXRNZXNzYWdlKCkiPjxCPmdldE1lc3NhZ2UoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPlhtbEVycm9yPC9BPgotPEREPlJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2Ugd2l0aG91dCBsb2NhdGlvbiBpbmZvcm1hdGlvbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5odG1sI2dldE1lc3NhZ2VEaWdlc3QoKSI+PEI+Z2V0TWVzc2FnZURpZ2VzdCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwiPlhtbERvY3VtZW50UHJvcGVydGllczwvQT4KLTxERD5SZXR1cm5zIHRoZSBtZXNzYWdlIGRpZ2VzdCB1c2VkIHRvIHN1bW1hcml6ZSB0aGUgZG9jdW1lbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNnZXRNaWxsaXNlY29uZCgpIj48Qj5nZXRNaWxsaXNlY29uZCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+Ci08REQ+R2V0cyB0aGUgcm91bmRlZCBtaWxsaXNlY29uZCB2YWx1ZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2dldE1pbGxpc2Vjb25kKCkiPjxCPmdldE1pbGxpc2Vjb25kKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+R0RhdGVCdWlsZGVyPC9BPgotPEREPkdldHMgdGhlIHJvdW5kZWQgbWlsbGlzZWNvbmQgdmFsdWUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI2dldE1pbGxpc2Vjb25kKCkiPjxCPmdldE1pbGxpc2Vjb25kKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4KLTxERD5HZXRzIHRoZSByb3VuZGVkIG1pbGxpc2Vjb25kIHZhbHVlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNnZXRNaW5PY2N1cnMoKSI+PEI+Z2V0TWluT2NjdXJzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCI+U2NoZW1hUHJvcGVydHk8L0E+Ci08REQ+UmV0dXJucyBhIHN1bW1hcml6ZWQgbWluaW11bSBvY2N1cnJhbmNlIG51bWJlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjZ2V0TWluT2NjdXJzKCkiPjxCPmdldE1pbk9jY3VycygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwiPlNjaGVtYVBhcnRpY2xlPC9BPgotPEREPlJldHVybnMgdGhlIG1pbk9jY3VycyB2YWx1ZSBmb3IgdGhpcyBwYXJ0aWNsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwjZ2V0TWluT2NjdXJzKCkiPjxCPmdldE1pbk9jY3VycygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwiPlNjaGVtYUZpZWxkPC9BPgotPEREPlJldHVybnMgdGhlIG1pbk9jY3VycyB2YWx1ZSBmb3IgdGhpcyBwYXJ0aWNsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCNnZXRNaW51dGUoKSI+PEI+Z2V0TWludXRlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPgotPEREPkdldHMgdGhlIG1pbnV0ZS1vZi1ob3VyIGNvbXBvbmVudC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCNnZXRNaW51dGUoKSI+PEI+Z2V0TWludXRlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwiPkdEdXJhdGlvbkJ1aWxkZXI8L0E+Ci08REQ+R2V0cyB0aGUgbWludXRlLW9mLWhvdXIgY29tcG9uZW50LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwjZ2V0TWludXRlKCkiPjxCPmdldE1pbnV0ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwiPkdEdXJhdGlvbjwvQT4KLTxERD5HZXRzIHRoZSBtaW51dGUtb2YtaG91ciBjb21wb25lbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNnZXRNaW51dGUoKSI+PEI+Z2V0TWludXRlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4KLTxERD5HZXRzIHRoZSBtaW51dGUtb2YtaG91ci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2dldE1pbnV0ZSgpIj48Qj5nZXRNaW51dGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sIj5HRGF0ZUJ1aWxkZXI8L0E+Ci08REQ+R2V0cyB0aGUgbWludXRlLW9mLWhvdXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI2dldE1pbnV0ZSgpIj48Qj5nZXRNaW51dGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPgotPEREPkdldHMgdGhlIG1pbnV0ZS1vZi1ob3VyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sI2dldE1vbnRoKCkiPjxCPmdldE1vbnRoKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPgotPEREPkdldHMgdGhlIG1vbnRoLW9mLXllYXIgY29tcG9uZW50LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sI2dldE1vbnRoKCkiPjxCPmdldE1vbnRoKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwiPkdEdXJhdGlvbkJ1aWxkZXI8L0E+Ci08REQ+R2V0cyB0aGUgbW9udGgtb2YteWVhciBjb21wb25lbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCNnZXRNb250aCgpIj48Qj5nZXRNb250aCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwiPkdEdXJhdGlvbjwvQT4KLTxERD5HZXRzIHRoZSBtb250aC1vZi15ZWFyIGNvbXBvbmVudC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2dldE1vbnRoKCkiPjxCPmdldE1vbnRoKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4KLTxERD5HZXRzIHRoZSBtb250aC1vZi15ZWFyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjZ2V0TW9udGgoKSI+PEI+Z2V0TW9udGgoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sIj5HRGF0ZUJ1aWxkZXI8L0E+Ci08REQ+R2V0cyB0aGUgbW9udGgtb2YteWVhci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwjZ2V0TW9udGgoKSI+PEI+Z2V0TW9udGgoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPgotPEREPkdldHMgdGhlIG1vbnRoLW9mLXllYXIuCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNnZXROYW1lKCkiPjxCPmdldE5hbWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCI+WE1MU3RyZWFtUmVhZGVyPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjZ2V0TmFtZSgpIj48Qj5nZXROYW1lKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5SZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHRva2VuLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sI2dldE5hbWUoKSI+PEI+Z2V0TmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVTeXN0ZW0uaHRtbCI+U2NoZW1hVHlwZVN5c3RlbTwvQT4KLTxERD5SZXR1cm5zIHRoZSBuYW1lIG9mIHRoaXMgbG9hZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldE5hbWUoKSI+PEI+Z2V0TmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5UaGUgbmFtZSB1c2VkIHRvIGRlc2NyaWJlIHRoZSB0eXBlIGluIHRoZSBzY2hlbWEuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2dldE5hbWUoKSI+PEI+Z2V0TmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwiPlNjaGVtYVByb3BlcnR5PC9BPgotPEREPlRoZSBuYW1lIG9mIHRoaXMgZWxlbWVudCBvciBhdHRyaWJ1dGUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjZ2V0TmFtZSgpIj48Qj5nZXROYW1lKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCI+U2NoZW1hUGFydGljbGU8L0E+Ci08REQ+Rm9yIGVsZW1lbnRzIG9ubHk6IHRoZSBRTmFtZSBmb3IgdGhlIGVsZW1lbnQgdXNlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTW9kZWxHcm91cC5odG1sI2dldE5hbWUoKSI+PEI+Z2V0TmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYU1vZGVsR3JvdXAuaHRtbCI+U2NoZW1hTW9kZWxHcm91cDwvQT4KLTxERD5UaGUgbmFtZSBvZiB0aGUgbW9kZWwgZ3JvdXAuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sI2dldE5hbWUoKSI+PEI+Z2V0TmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwiPlNjaGVtYUZpZWxkPC9BPgotPEREPlJldHVybnMgdGhlIGZvcm0tdW5xdWFsaWZpZWQtb3ItcXVhbGlmaWVkIG5hbWUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNnZXROYW1lKCkiPjxCPmdldE5hbWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPgotPEREPlRoZSBuYW1lIG9mIHRoZSBzY2hlbWEgY29tcG9uZW50Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVHcm91cC5odG1sI2dldE5hbWUoKSI+PEI+Z2V0TmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZUdyb3VwLmh0bWwiPlNjaGVtYUF0dHJpYnV0ZUdyb3VwPC9BPgotPEREPlRoZSBuYW1lIG9mIHRoZSBtb2RlbCBncm91cC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lQ2FjaGUuaHRtbCNnZXROYW1lKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj48Qj5nZXROYW1lKFN0cmluZywgU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lQ2FjaGUuaHRtbCI+UU5hbWVDYWNoZTwvQT4KLTxERD5GZXRjaGVzIGEgUU5hbWUgd2l0aCB0aGUgZ2l2ZW4gbmFtZXNwYWNlIGFuZCBsb2NhbG5hbWUuCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNnZXROYW1lc3BhY2VDb3VudCgpIj48Qj5nZXROYW1lc3BhY2VDb3VudCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sIj5YTUxTdHJlYW1SZWFkZXI8L0E+Ci08REQ+UmV0dXJucyB0aGUgY291bnQgb2YgbmFtZXNwYWNlcyBkZWNsYXJlZCBvbiB0aGlzIFNUQVJUX0VMRU1FTlQgb3IgRU5EX0VMRU1FTlQsCi0gdGhpcyBtZXRob2QgaXMgb25seSB2YWxpZCBvbiBhIFNUQVJUX0VMRU1FTlQgb3IgRU5EX0VMRU1FTlQuCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNnZXROYW1lc3BhY2VQcmVmaXgoaW50KSI+PEI+Z2V0TmFtZXNwYWNlUHJlZml4KGludCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwiPlhNTFN0cmVhbVJlYWRlcjwvQT4KLTxERD5SZXR1cm5zIHRoZSBwcmVmaXggZm9yIHRoZSBuYW1lc3BhY2UgZGVjbGFyZWQgYXQgdGhlCi0gaW5kZXguCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNnZXROYW1lc3BhY2VVUkkoKSI+PEI+Z2V0TmFtZXNwYWNlVVJJKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwiPlhNTFN0cmVhbVJlYWRlcjwvQT4KLTxERD5JZiB0aGUgY3VycmVudCBldmVudCBpcyBhIFNUQVJUX0VMRU1FTlQgb3IgRU5EX0VMRU1FTlQgIHRoaXMgbWV0aG9kCi0gcmV0dXJucyB0aGUgVVJJIG9mIHRoZSBwcmVmaXggb3IgdGhlIGRlZmF1bHQgbmFtZXNwYWNlLgotPERUPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0TmFtZXNwYWNlVVJJKGludCkiPjxCPmdldE5hbWVzcGFjZVVSSShpbnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sIj5YTUxTdHJlYW1SZWFkZXI8L0E+Ci08REQ+UmV0dXJucyB0aGUgdXJpIGZvciB0aGUgbmFtZXNwYWNlIGRlY2xhcmVkIGF0IHRoZQotIGluZGV4LgotPERUPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0TmFtZXNwYWNlVVJJKGphdmEubGFuZy5TdHJpbmcpIj48Qj5nZXROYW1lc3BhY2VVUkkoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCI+WE1MU3RyZWFtUmVhZGVyPC9BPgotPEREPlJldHVybiB0aGUgdXJpIGZvciB0aGUgZ2l2ZW4gcHJlZml4LgotPERUPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwjZ2V0TmVzdGVkRXhjZXB0aW9uKCkiPjxCPmdldE5lc3RlZEV4Y2VwdGlvbigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT4KLTxERD5HZXRzIHRoZSBuZXN0ZWQgZXhjZXB0aW9uLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Lmh0bWwjZ2V0TlNNYXAoKSI+PEI+Z2V0TlNNYXAoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuaHRtbCI+U2NoZW1hSWRlbnRpdHlDb25zdHJhaW50PC9BPgotPEREPlJldHVybiBhIHJlYWQtb25seSBjb3B5IG9mIHRoZSBuYW1lc3BhY2UgbWFwLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2F4SGFuZGxlci5odG1sI2dldE9iamVjdCgpIj48Qj5nZXRPYmplY3QoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTYXhIYW5kbGVyLmh0bWwiPlhtbFNheEhhbmRsZXI8L0E+Ci08REQ+UmV0dXJucyB0aGUgbG9hZGVkIFhtbE9iamVjdCBhZnRlciBhbGwgdGhlIFNBWCBldmVudHMgaGF2ZSBiZWVuIGZpbmlzaGVkCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNnZXRPYmplY3QoKSI+PEI+Z2V0T2JqZWN0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5SZXR1cm5zIHRoZSBzdHJvbmdseS10eXBlZCBYbWxPYmplY3QgYXQgdGhlIGN1cnJlbnQgU1RBUlQsCi0gU1RBUlRET0MsIG9yIEFUVFIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI2dldE9iamVjdExvY2F0aW9uKCkiPjxCPmdldE9iamVjdExvY2F0aW9uKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT4KLTxERD5SZXR1cm5zIGEgbG9jYXRpb24gb2YgdGhlIGVycm9yIGFzIGFuIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPjxDT0RFPlhtbE9iamVjdDwvQ09ERT48L0E+LCBudWxsIGlmCi0gbm90IGF2YWlsYWJsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0T2JqZWN0VmFsdWUoKSI+PEI+Z2V0T2JqZWN0VmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4KLTxERD5SZXR1cm5zIGEgdW5pb24gdmFsdWUgYXMgYSBpdHMgbmF0dXJhbCBmcmllbmRseSBKYXZhIG9iamVjdCAoU3RyaW5nLCBJbnRlZ2VyLCBCeXRlLCBTaG9ydCwgTG9uZywgQmlnSW50ZWdlciwgRGVjaW1hbCwgRmxvYXQsIERvdWJsZSwgYnl0ZVtdLCBDYWxlbmRhciwgR0R1cmF0aW9uKS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2dldE9iamVjdFZhbHVlKCkiPjxCPmdldE9iamVjdFZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGluZU51bWJlci5odG1sI2dldE9mZnNldCgpIj48Qj5nZXRPZmZzZXQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExpbmVOdW1iZXIuaHRtbCI+WG1sTGluZU51bWJlcjwvQT4KLTxERD5SZXR1cm5zIHRoZSAwLWJhc2VkIGZpbGUgb2Zmc2V0IG51bWJlciwgb3IgLTEgaWYgbm90IGtub3duLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCNnZXRPZmZzZXQoKSI+PEI+Z2V0T2Zmc2V0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT4KLTxERD5SZXR1cm5zIHRoZSBmaWxlIGNoYXJhY3RlciBvZmZzZXQgb2YgdGhlIGVycm9yLCBpZiBhdmFpbGFibGUsIC0xIGlmIG5vdC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRPdXRlclR5cGUoKSI+PEI+Z2V0T3V0ZXJUeXBlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPlRoZSBvdXRlciBzY2hlbWEgdHlwZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjZ2V0UGFydGljbGVDaGlsZChpbnQpIj48Qj5nZXRQYXJ0aWNsZUNoaWxkKGludCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCI+U2NoZW1hUGFydGljbGU8L0E+Ci08REQ+QW5vdGhlciB3YXkgdG8gYWNjZXNzIHRoZSBwYXJ0aWNsZSBjaGlsZHJlbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjZ2V0UGFydGljbGVDaGlsZHJlbigpIj48Qj5nZXRQYXJ0aWNsZUNoaWxkcmVuKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCI+U2NoZW1hUGFydGljbGU8L0E+Ci08REQ+QXBwbGllcyB0byBzZXF1ZW5jZSwgY2hvaWNlLCBhbmQgYWxsIHBhcnRpY2xlcyBvbmx5OiByZXR1cm5zIGFuIGFycmF5Ci0gb2YgYWxsIHRoZSBwYXJ0aWNsZSBjaGlsZHJlbiBpbiBvcmRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjZ2V0UGFydGljbGVUeXBlKCkiPjxCPmdldFBhcnRpY2xlVHlwZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwiPlNjaGVtYVBhcnRpY2xlPC9BPgotPEREPlJldHVybnMgdGhlIHBhcnRpY2xlIHR5cGUgKDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNBTEwiPjxDT0RFPlNjaGVtYVBhcnRpY2xlLkFMTDwvQ09ERT48L0E+LCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjQ0hPSUNFIj48Q09ERT5TY2hlbWFQYXJ0aWNsZS5DSE9JQ0U8L0NPREU+PC9BPiwKLSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjU0VRVUVOQ0UiPjxDT0RFPlNjaGVtYVBhcnRpY2xlLlNFUVVFTkNFPC9DT0RFPjwvQT4sIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNFTEVNRU5UIj48Q09ERT5TY2hlbWFQYXJ0aWNsZS5FTEVNRU5UPC9DT0RFPjwvQT4sIG9yIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNXSUxEQ0FSRCI+PENPREU+U2NoZW1hUGFydGljbGUuV0lMRENBUkQ8L0NPREU+PC9BPikuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0UGF0dGVybnMoKSI+PEI+Z2V0UGF0dGVybnMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+VHJ1ZQotPERUPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0UElEYXRhKCkiPjxCPmdldFBJRGF0YSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sIj5YTUxTdHJlYW1SZWFkZXI8L0E+Ci08REQ+R2V0IHRoZSBkYXRhIHNlY3Rpb24gb2YgYSBwcm9jZXNzaW5nIGluc3RydWN0aW9uCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNnZXRQSVRhcmdldCgpIj48Qj5nZXRQSVRhcmdldCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sIj5YTUxTdHJlYW1SZWFkZXI8L0E+Ci08REQ+R2V0IHRoZSB0YXJnZXQgb2YgYSBwcm9jZXNzaW5nIGluc3RydWN0aW9uCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNnZXRQcmVmaXgoKSI+PEI+Z2V0UHJlZml4KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwiPlhNTFN0cmVhbVJlYWRlcjwvQT4KLTxERD5SZXR1cm5zIHRoZSBwcmVmaXggb2YgdGhlIGN1cnJlbnQgZXZlbnQgb3IgbnVsbCBpZiB0aGUgZXZlbnQgZG9lcyBub3QgaGF2ZSBhIHByZWZpeAotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldFByaW1pdGl2ZVR5cGUoKSI+PEI+Z2V0UHJpbWl0aXZlVHlwZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5Gb3IgYXRvbWljIHR5cGVzIG9ubHk6IGdldCB0aGUgcHJpbWl0aXZlIHR5cGUgdW5kZXJseWluZyB0aGlzIG9uZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRQcm9wZXJ0aWVzKCkiPjxCPmdldFByb3BlcnRpZXMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+UmV0dXJucyBhbGwgdGhlIFNjaGVtYVByb3BlcnRpZXMgd2l0aGluIHRoaXMgY29tcGxleCB0eXBlLAotIGVsZW1lbnRzIGZvbGxvd2VkIGJ5IGF0dHJpYnV0ZXMuCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNnZXRQcm9wZXJ0eShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+Z2V0UHJvcGVydHkoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCI+WE1MU3RyZWFtUmVhZGVyPC9BPgotPEREPkdldCB0aGUgdmFsdWUgb2YgYSBmZWF0dXJlL3Byb3BlcnR5IGZyb20gdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwjZ2V0UU5hbWUoamF2YS5sYW5nLlN0cmluZykiPjxCPmdldFFOYW1lKFN0cmluZyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuaHRtbCI+WG1sQmVhbnM8L0E+Ci08REQ+T2J0YWlucyBhIG5hbWUgZnJvbSB0aGUgdGhyZWFkIGxvY2FsIFFOYW1lQ2FjaGUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwjZ2V0UU5hbWUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjxCPmdldFFOYW1lKFN0cmluZywgU3RyaW5nKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sIj5YbWxCZWFuczwvQT4KLTxERD5PYnRhaW5zIGEgbmFtZSBmcm9tIHRoZSB0aHJlYWQgbG9jYWwgUU5hbWVDYWNoZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuaHRtbCNnZXRRTmFtZUNhY2hlKCkiPjxCPmdldFFOYW1lQ2FjaGUoKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sIj5YbWxCZWFuczwvQT4KLTxERD5SZXR1cm5zIGEgdGhyZWFkIGxvY2FsIFFOYW1lQ2FjaGUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwjZ2V0UU5hbWVWYWx1ZSgpIj48Qj5nZXRRTmFtZVZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+WG1sUU5hbWU8L0E+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPjxDT0RFPlFOYW1lPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0UU5hbWVWYWx1ZSgpIj48Qj5nZXRRTmFtZVZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+PENPREU+UU5hbWU8L0NPREU+PC9BPi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2dldFFOYW1lVmFsdWUoKSI+PEI+Z2V0UU5hbWVWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRSZWYoKSI+PEI+Z2V0UmVmKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPlJldHJ1bnMgYSBTY2hlbWFUeXBlLlJlZiBwb2ludGluZyB0byB0aGlzIHNjaGVtYSB0eXBlIGl0c2VsZi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEVsZW1lbnQuaHRtbCNnZXRSZWYoKSI+PEI+Z2V0UmVmKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5odG1sIj5TY2hlbWFHbG9iYWxFbGVtZW50PC9BPgotPEREPlJldHJ1bnMgYSBTY2hlbWFHbG9iYWxFbGVtZW50LlJlZiBwb2ludGluZyB0byB0aGlzIGVsZW1lbnQgaXRzZWxmLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsQXR0cmlidXRlLmh0bWwjZ2V0UmVmKCkiPjxCPmdldFJlZigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEF0dHJpYnV0ZS5odG1sIj5TY2hlbWFHbG9iYWxBdHRyaWJ1dGU8L0E+Ci08REQ+UmV0cnVucyBhIFNjaGVtYUdsb2JhbEVsZW1lbnQuUmVmIHBvaW50aW5nIHRvIHRoaXMgZWxlbWVudCBpdHNlbGYuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuaHRtbCNnZXRSZWZlcmVuY2VkS2V5KCkiPjxCPmdldFJlZmVyZW5jZWRLZXkoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuaHRtbCI+U2NoZW1hSWRlbnRpdHlDb25zdHJhaW50PC9BPgotPEREPlJldHVybnMgdGhlIGtleSB0aGF0IGEga2V5IHJlZiByZWZlcnMgdG8uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwjZ2V0U2Vjb25kKCkiPjxCPmdldFNlY29uZCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCI+R0R1cmF0aW9uU3BlY2lmaWNhdGlvbjwvQT4KLTxERD5HZXRzIHRoZSBzZWNvbmQtb2YtbWludXRlIGNvbXBvbmVudC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCNnZXRTZWNvbmQoKSI+PEI+Z2V0U2Vjb25kKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwiPkdEdXJhdGlvbkJ1aWxkZXI8L0E+Ci08REQ+R2V0cyB0aGUgc2Vjb25kLW9mLW1pbnV0ZSBjb21wb25lbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCNnZXRTZWNvbmQoKSI+PEI+Z2V0U2Vjb25kKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCI+R0R1cmF0aW9uPC9BPgotPEREPkdldHMgdGhlIHNlY29uZC1vZi1taW51dGUgY29tcG9uZW50LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjZ2V0U2Vjb25kKCkiPjxCPmdldFNlY29uZCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+Ci08REQ+R2V0cyB0aGUgc2Vjb25kLW9mLW1pbnV0ZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2dldFNlY29uZCgpIj48Qj5nZXRTZWNvbmQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sIj5HRGF0ZUJ1aWxkZXI8L0E+Ci08REQ+R2V0cyB0aGUgc2Vjb25kLW9mLW1pbnV0ZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwjZ2V0U2Vjb25kKCkiPjxCPmdldFNlY29uZCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+Ci08REQ+R2V0cyB0aGUgc2Vjb25kLW9mLW1pbnV0ZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2dldFNlbGVjdGlvbkNvdW50KCkiPjxCPmdldFNlbGVjdGlvbkNvdW50KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5SZXR1cm5zIHRoZSBjb3VudCBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuaHRtbCNnZXRTZWxlY3RvcigpIj48Qj5nZXRTZWxlY3RvcigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5odG1sIj5TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQ8L0E+Ci08REQ+UmV0dXJuIHRoZSBzZWxlY3RvciB4cGF0aCBhcyBhIHN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5odG1sI2dldFNlbGVjdG9yUGF0aCgpIj48Qj5nZXRTZWxlY3RvclBhdGgoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuaHRtbCI+U2NoZW1hSWRlbnRpdHlDb25zdHJhaW50PC9BPgotPEREPlJldHVybiBhIGNvbXBpbGVkIHhwYXRoIG9iamVjdCBmb3IgdGhlIHNlbGVjdG9yLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCNnZXRTZXZlcml0eSgpIj48Qj5nZXRTZXZlcml0eSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+WG1sRXJyb3I8L0E+Ci08REQ+UmV0dXJucyB0aGUgc2V2ZXJpdHkuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0U2hvcnRKYXZhSW1wbE5hbWUoKSI+PEI+Z2V0U2hvcnRKYXZhSW1wbE5hbWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+VGhlIHNob3J0IHVucXVhbGZpaWVkIEphdmEgbmFtZSBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGNsYXNzLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldFNob3J0SmF2YU5hbWUoKSI+PEI+Z2V0U2hvcnRKYXZhTmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5UaGUgc2hvcnQgdW5xdWFsZmlpZWQgSmF2YSBuYW1lIGZvciB0aGUgY2xhc3MuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCNnZXRTaG9ydFZhbHVlKCkiPjxCPmdldFNob3J0VmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+WG1sVW5zaWduZWRCeXRlPC9BPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIHNob3J0Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sI2dldFNob3J0VmFsdWUoKSI+PEI+Z2V0U2hvcnRWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPlhtbFNob3J0PC9BPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIHNob3J0Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldFNob3J0VmFsdWUoKSI+PEI+Z2V0U2hvcnRWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgc2hvcnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNnZXRTaG9ydFZhbHVlKCkiPjxCPmdldFNob3J0VmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwjZ2V0U2lnbigpIj48Qj5nZXRTaWduKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPgotPEREPlJldHVybnMgdGhlIHNpZ24gb2YgdGhlIGR1cmF0aW9uOiArMSBpcyBmb3J3YXJkcwotIGFuZCAtMSBpcyBiYWNrd2FyZHMgaW4gdGltZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCNnZXRTaWduKCkiPjxCPmdldFNpZ24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCI+R0R1cmF0aW9uQnVpbGRlcjwvQT4KLTxERD5SZXR1cm5zIHRoZSBzaWduIG9mIHRoZSBkdXJhdGlvbjogKzEgaXMgZm9yd2FyZHMKLSBhbmQgLTEgaXMgYmFja3dhcmRzIGluIHRpbWUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCNnZXRTaWduKCkiPjxCPmdldFNpZ24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+Ci08REQ+UmV0dXJucyB0aGUgc2lnbiBvZiB0aGUgZHVyYXRpb246ICsxIGlzIGZvcndhcmRzCi0gYW5kIC0xIGlzIGJhY2t3YXJkcyBpbiB0aW1lLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldFNpbXBsZVZhcmlldHkoKSI+PEI+Z2V0U2ltcGxlVmFyaWV0eSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5SZXR1cm5zIHdoZXRoZXIgdGhlIHNpbXBsZSB0eXBlIGlzIEFUT01JQywgVU5JT04sIG9yIExJU1QuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwjZ2V0U291cmNlQXNTdHJlYW0oamF2YS5sYW5nLlN0cmluZykiPjxCPmdldFNvdXJjZUFzU3RyZWFtKFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sIj5TY2hlbWFUeXBlTG9hZGVyPC9BPgotPEREPkxvYWRzIG9yaWdpbmFsIFhTRCBzb3VyY2UgYXMgYSBzdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI2dldFNvdXJjZU5hbWUoKSI+PEI+Z2V0U291cmNlTmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+WG1sRXJyb3I8L0E+Ci08REQ+UmV0dXJucyB0aGUgVVJMIChvciBvdGhlciBuYW1lKSBvZiB0aGUgZmlsZSB3aXRoIHRoZSBlcnJvciwgaWYgYXZhaWxhYmxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwjZ2V0U291cmNlTmFtZSgpIj48Qj5nZXRTb3VyY2VOYW1lKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCI+WG1sRG9jdW1lbnRQcm9wZXJ0aWVzPC9BPgotPEREPlJldHVybnMgdGhlIG5hbWUgb2YgdGhlIFhNTCBkb2N1bWVudCBmaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldFNvdXJjZU5hbWUoKSI+PEI+Z2V0U291cmNlTmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBmaWxlbmFtZSBmb3IgdGhlIFhTRCBmaWxlIGZyb20gd2hpY2ggdGhpcyB0eXBlCi0gd2FzIGxvYWRlZC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEVsZW1lbnQuaHRtbCNnZXRTb3VyY2VOYW1lKCkiPjxCPmdldFNvdXJjZU5hbWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50Lmh0bWwiPlNjaGVtYUdsb2JhbEVsZW1lbnQ8L0E+Ci08REQ+VGhlIG5hbWUgb2YgdGhlIHNvdXJjZSAueHNkIGZpbGUgd2l0aGluIHdoaWNoIHRoaXMgYXR0cmlidXRlIHdhcyBkZWZpbmVkCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuaHRtbCNnZXRTb3VyY2VOYW1lKCkiPjxCPmdldFNvdXJjZU5hbWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuaHRtbCI+U2NoZW1hR2xvYmFsQXR0cmlidXRlPC9BPgotPEREPlRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgLnhzZCBmaWxlIHdpdGhpbiB3aGljaCB0aGlzIGF0dHJpYnV0ZSB3YXMgZGVmaW5lZAotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hU3RyaW5nRW51bUVudHJ5Lmh0bWwjZ2V0U3RyaW5nKCkiPjxCPmdldFN0cmluZygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVN0cmluZ0VudW1FbnRyeS5odG1sIj5TY2hlbWFTdHJpbmdFbnVtRW50cnk8L0E+Ci08REQ+VGhlIGVudW1lcmF0ZWQgc3RyaW5nIHZhbHVlCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0U3RyaW5nRW51bUVudHJpZXMoKSI+PEI+Z2V0U3RyaW5nRW51bUVudHJpZXMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+UmV0dXJucyB0aGUgYXJyYXkgb2YgU2NoZW1hU3RyaW5nRW51bUVudHJpZXMgZm9yIHRoaXMgdHlwZTogdGhpcwotIGFycmF5IGluY2x1ZGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBqYXZhIGNvbnN0YW50IG5hbWVzIHVzZWQgZm9yCi0gZWFjaCBzdHJpbmcgZW51bSBlbnRyeS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNnZXRTdHJpbmdWYWx1ZSgpIj48Qj5nZXRTdHJpbmdWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPjxDT0RFPlN0cmluZzwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldFN0cmluZ1ZhbHVlKCkiPjxCPmdldFN0cmluZ1ZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj48Q09ERT5TdHJpbmc8L0NPREU+PC9BPi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2dldFN0cmluZ1ZhbHVlKCkiPjxCPmdldFN0cmluZ1ZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0VGV4dCgpIj48Qj5nZXRUZXh0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwiPlhNTFN0cmVhbVJlYWRlcjwvQT4KLTxERD5SZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBwYXJzZSBldmVudCBhcyBhIHN0cmluZywKLSB0aGlzIHJldHVybnMgdGhlIHN0cmluZyB2YWx1ZSBvZiBhIENIQVJBQ1RFUlMgZXZlbnQsCi0gcmV0dXJucyB0aGUgdmFsdWUgb2YgYSBDT01NRU5ULCB0aGUgcmVwbGFjZW1lbnQgdmFsdWUKLSBmb3IgYW4gRU5USVRZX1JFRkVSRU5DRSwKLSBvciB0aGUgU3RyaW5nIHZhbHVlIG9mIHRoZSBEVEQKLTxEVD48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2dldFRleHRDaGFyYWN0ZXJzKCkiPjxCPmdldFRleHRDaGFyYWN0ZXJzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwiPlhNTFN0cmVhbVJlYWRlcjwvQT4KLTxERD5SZXR1cm5zIGFuIGFycmF5IHdoaWNoIGNvbnRhaW5zIHRoZSBjaGFyYWN0ZXJzIGZyb20gdGhpcyBldmVudC4KLTxEVD48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2dldFRleHRDaGFyYWN0ZXJzKGNoYXJbXSwgaW50LCBpbnQpIj48Qj5nZXRUZXh0Q2hhcmFjdGVycyhjaGFyW10sIGludCwgaW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCI+WE1MU3RyZWFtUmVhZGVyPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0VGV4dExlbmd0aCgpIj48Qj5nZXRUZXh0TGVuZ3RoKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwiPlhNTFN0cmVhbVJlYWRlcjwvQT4KLTxERD5SZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgd2l0aGluIGZvciB0aGlzCi0gVGV4dCBldmVudCB3aXRoaW4gdGhlIFRleHRDaGFyYWN0ZXJBcnJheS4KLTxEVD48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2dldFRleHRSZWFkZXIoKSI+PEI+Z2V0VGV4dFJlYWRlcigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sIj5YTUxTdHJlYW1SZWFkZXI8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNnZXRUZXh0U3RhcnQoKSI+PEI+Z2V0VGV4dFN0YXJ0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwiPlhNTFN0cmVhbVJlYWRlcjwvQT4KLTxERD5SZXR1cm5zIHRoZSBvZmZzZXQgaW50byB0aGUgVGV4dENoYXJhY3RlciBhcnJheSB3aGVyZSB0aGUgZmlyc3QKLSBjaGFyYWN0ZXIgKG9mIHRoaXMgdGV4dCBldmVudCkgaXMgc3RvcmVkLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjZ2V0VGV4dFZhbHVlKCkiPjxCPmdldFRleHRWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+R2V0cyB0aGUgdGV4dCB2YWx1ZSBvZiB0aGUgY3VycmVudCBkb2N1bWVudCwgZWxlbWVudCwgYXR0cmlidXRlLAotIGNvbW1lbnQsIHByb2NpbnN0IG9yIHRleHQgdG9rZW4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNnZXRUZXh0VmFsdWUoY2hhcltdLCBpbnQsIGludCkiPjxCPmdldFRleHRWYWx1ZShjaGFyW10sIGludCwgaW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPkNvcGllcyB0aGUgdGV4dCB2YWx1ZSBvZiB0aGUgY3VycmVudCBkb2N1bWVudCwgZWxlbWVudCwgYXR0cmlidXRlLAotIGNvbW1lbnQsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gb3IgdGV4dCB0b2tlbiwgY291bnRpbmcgcmlnaHQgZnJvbSAKLSB0aGlzIGN1cnNvcidzIGxvY2F0aW9uIHVwIHRvIDxlbT5tYXhDaGFyYWN0ZXJDb3VudDwvZW0+LAotIGFuZCBjb3BpZXMgdGhlIHJldHVybmVkIHRleHQgaW50byA8ZW0+cmV0dXJuZWRDaGFyczwvZW0+LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjZ2V0VGltZVpvbmVIb3VyKCkiPjxCPmdldFRpbWVab25lSG91cigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+Ci08REQ+R2V0cyB0aGUgdGltZSB6b25lIGhvdXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNnZXRUaW1lWm9uZUhvdXIoKSI+PEI+Z2V0VGltZVpvbmVIb3VyKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+R0RhdGVCdWlsZGVyPC9BPgotPEREPkdldHMgdGhlIHRpbWUgem9uZSBob3VyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCNnZXRUaW1lWm9uZUhvdXIoKSI+PEI+Z2V0VGltZVpvbmVIb3VyKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4KLTxERD5HZXRzIHRoZSB0aW1lIHpvbmUgaG91ci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2dldFRpbWVab25lTWludXRlKCkiPjxCPmdldFRpbWVab25lTWludXRlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4KLTxERD5HZXRzIHRoZSB0aW1lIHpvbmUgbWludXRlcy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2dldFRpbWVab25lTWludXRlKCkiPjxCPmdldFRpbWVab25lTWludXRlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+R0RhdGVCdWlsZGVyPC9BPgotPEREPkdldHMgdGhlIHRpbWUgem9uZSBtaW51dGVzLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCNnZXRUaW1lWm9uZU1pbnV0ZSgpIj48Qj5nZXRUaW1lWm9uZU1pbnV0ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+Ci08REQ+R2V0cyB0aGUgdGltZSB6b25lIG1pbnV0ZXMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNnZXRUaW1lWm9uZVNpZ24oKSI+PEI+Z2V0VGltZVpvbmVTaWduKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4KLTxERD5HZXRzIHRoZSB0aW1lIHpvbmUgc2lnbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2dldFRpbWVab25lU2lnbigpIj48Qj5nZXRUaW1lWm9uZVNpZ24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sIj5HRGF0ZUJ1aWxkZXI8L0E+Ci08REQ+R2V0cyB0aGUgdGltZSB6b25lIHNpZ24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI2dldFRpbWVab25lU2lnbigpIj48Qj5nZXRUaW1lWm9uZVNpZ24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPgotPEREPkdldHMgdGhlIHRpbWUgem9uZSBzaWduLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNnZXRUeXBlKCkiPjxCPmdldFR5cGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sIj5TY2hlbWFQcm9wZXJ0eTwvQT4KLTxERD5UaGUgc2NoZW1hIHR5cGUgZm9yIHRoZSBwcm9wZXJ0eS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjZ2V0VHlwZSgpIj48Qj5nZXRUeXBlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCI+U2NoZW1hUGFydGljbGU8L0E+Ci08REQ+Rm9yIGVsZW1lbnRzIG9ubHk6IHJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sI2dldFR5cGUoKSI+PEI+Z2V0VHlwZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwiPlNjaGVtYUZpZWxkPC9BPgotPEREPlJldHVybnMgdGhlIHR5cGUgb2YgdGhpcyB1c2UuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0VHlwZVN5c3RlbSgpIj48Qj5nZXRUeXBlU3lzdGVtKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPlJldHVybnMgdGhlIFNjaGVtYVR5cGVMb2FkZXIgaW4gd2hpY2ggdGhpcyB0eXBlIHdhcyBkZWZpbmVkLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjZ2V0VHlwZVN5c3RlbSgpIj48Qj5nZXRUeXBlU3lzdGVtKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPlNjaGVtYUNvbXBvbmVudDwvQT4KLTxERD5SZXR1cm5zIHRoZSB0eXBlc3lzdGVtIHdpdGhpbiB3aGljaCB0aGlzIGNvbXBvbmVudCBkZWZpbml0aW9uIHJlc2lkZXMKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCNnZXRUeXBlU3lzdGVtKCkiPjxCPmdldFR5cGVTeXN0ZW0oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCI+U2NoZW1hQ29tcG9uZW50LlJlZjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRVbmlvbkNvbW1vbkJhc2VUeXBlKCkiPjxCPmdldFVuaW9uQ29tbW9uQmFzZVR5cGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+Rm9yIHVuaW9uIHR5cGVzIG9ubHk6IGdldCB0aGUgbW9zdCBzcGVjaWZpYyBjb21tb24gYmFzZQotIHR5cGUgb2YgdGhlIGNvbnN0aXR1ZW50IG1lbWJlciB0eXBlcy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRVbmlvbkNvbnN0aXR1ZW50VHlwZXMoKSI+PEI+Z2V0VW5pb25Db25zdGl0dWVudFR5cGVzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPkZvciB1bmlvbiB0eXBlcyBvbmx5OiBnZXQgdGhlIGNvbnN0aXR1ZW50IG1lbWJlciB0eXBlcy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRVbmlvbk1lbWJlclR5cGVzKCkiPjxCPmdldFVuaW9uTWVtYmVyVHlwZXMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+Rm9yIHVuaW9uIHR5cGVzIG9ubHk6IGdldCB0aGUgc2hhbGxvdyBtZW1iZXIgdHlwZXMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0VW5pb25TdWJUeXBlcygpIj48Qj5nZXRVbmlvblN1YlR5cGVzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPkZvciB1bmlvbiB0eXBlcyBvbmx5OiBnZXRzIHRoZSBmdWxsIHRyZWUgb2YgbWVtYmVyIHR5cGVzLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxBdHRyaWJ1dGUuaHRtbCNnZXRVc2UoKSI+PEI+Z2V0VXNlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxBdHRyaWJ1dGUuaHRtbCI+U2NoZW1hTG9jYWxBdHRyaWJ1dGU8L0E+Ci08REQ+UmV0dXJucyA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsQXR0cmlidXRlLmh0bWwjUFJPSElCSVRFRCI+PENPREU+U2NoZW1hTG9jYWxBdHRyaWJ1dGUuUFJPSElCSVRFRDwvQ09ERT48L0E+LCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsQXR0cmlidXRlLmh0bWwjT1BUSU9OQUwiPjxDT0RFPlNjaGVtYUxvY2FsQXR0cmlidXRlLk9QVElPTkFMPC9DT0RFPjwvQT4sIG9yIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxBdHRyaWJ1dGUuaHRtbCNSRVFVSVJFRCI+PENPREU+U2NoZW1hTG9jYWxBdHRyaWJ1dGUuUkVRVUlSRUQ8L0NPREU+PC9BPi4KLTxEVD48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2dldFZlcnNpb24oKSI+PEI+Z2V0VmVyc2lvbigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sIj5YTUxTdHJlYW1SZWFkZXI8L0E+Ci08REQ+R2V0IHRoZSB4bWwgdmVyc2lvbiBkZWNsYXJlZCBvbiB0aGUgeG1sIGRlY2xhcmF0aW9uCi0gUmV0dXJucyBudWxsIGlmIG5vbmUgd2FzIGRlY2xhcmVkCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCNnZXRWZXJzaW9uKCkiPjxCPmdldFZlcnNpb24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5odG1sIj5YbWxEb2N1bWVudFByb3BlcnRpZXM8L0E+Ci08REQ+UmV0dXJucyB0aGUgWE1MIHZlcnNpb24gc3RyaW5nIHVzZWQgaW4gdGhlICZsdCYjNjM7eG1sJiM2MzsmZ3Q7IGRlY2xhcmF0aW9uLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldFdoaXRlU3BhY2VSdWxlKCkiPjxCPmdldFdoaXRlU3BhY2VSdWxlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPkZvciBub251bmlvbiBzaW1wbGUgdHlwZXM6IGdldCB0aGUgd2hpdGVzcGFjZSBydWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNnZXRXaWxkY2FyZFByb2Nlc3MoKSI+PEI+Z2V0V2lsZGNhcmRQcm9jZXNzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCI+U2NoZW1hUGFydGljbGU8L0E+Ci08REQ+Rm9yIHdpbGRjYXJkcywgcmV0dXJucyB0aGUgcHJvY2Vzc2luZyBjb2RlICg8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjU1RSSUNUIj48Q09ERT5TY2hlbWFQYXJ0aWNsZS5TVFJJQ1Q8L0NPREU+PC9BPiwgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI0xBWCI+PENPREU+U2NoZW1hUGFydGljbGUuTEFYPC9DT0RFPjwvQT4sIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNTS0lQIj48Q09ERT5TY2hlbWFQYXJ0aWNsZS5TS0lQPC9DT0RFPjwvQT4pLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCNnZXRXaWxkY2FyZFByb2Nlc3MoKSI+PEI+Z2V0V2lsZGNhcmRQcm9jZXNzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCI+U2NoZW1hQXR0cmlidXRlTW9kZWw8L0E+Ci08REQ+UmV0dXJucyB0aGUgcHJvY2Vzc2luZyBjb2RlICg8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZU1vZGVsLmh0bWwjU1RSSUNUIj48Q09ERT5TY2hlbWFBdHRyaWJ1dGVNb2RlbC5TVFJJQ1Q8L0NPREU+PC9BPiwgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVNb2RlbC5odG1sI0xBWCI+PENPREU+U2NoZW1hQXR0cmlidXRlTW9kZWwuTEFYPC9DT0RFPjwvQT4sIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCNTS0lQIj48Q09ERT5TY2hlbWFBdHRyaWJ1dGVNb2RlbC5TS0lQPC9DT0RFPjwvQT4pLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNnZXRXaWxkY2FyZFNldCgpIj48Qj5nZXRXaWxkY2FyZFNldCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwiPlNjaGVtYVBhcnRpY2xlPC9BPgotPEREPkZvciB3aWxkY2FyZHMsIHJldHVybnMgYSBRTmFtZVNldCByZXByZXNlbnRpbmcgdGhlIHdpbGRjYXJkLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCNnZXRXaWxkY2FyZFNldCgpIj48Qj5nZXRXaWxkY2FyZFNldCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZU1vZGVsLmh0bWwiPlNjaGVtYUF0dHJpYnV0ZU1vZGVsPC9BPgotPEREPlFOYW1lU2V0IHJlcHJlc2VudGluZyB0aGUgYXR0cmlidXRlIHdpbGRjYXJkIHNwZWNpZmljYXRpb24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YTUxTdHJlYW1WYWxpZGF0aW9uRXhjZXB0aW9uLmh0bWwjZ2V0WG1sRXJyb3IoKSI+PEI+Z2V0WG1sRXJyb3IoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1hNTFN0cmVhbVZhbGlkYXRpb25FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtVmFsaWRhdGlvbkV4Y2VwdGlvbjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCNnZXRZZWFyKCkiPjxCPmdldFllYXIoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+Ci08REQ+R2V0cyB0aGUgeWVhciBjb21wb25lbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwjZ2V0WWVhcigpIj48Qj5nZXRZZWFyKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwiPkdEdXJhdGlvbkJ1aWxkZXI8L0E+Ci08REQ+R2V0cyB0aGUgeWVhciBjb21wb25lbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCNnZXRZZWFyKCkiPjxCPmdldFllYXIoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+Ci08REQ+R2V0cyB0aGUgeWVhciBjb21wb25lbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNnZXRZZWFyKCkiPjxCPmdldFllYXIoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPgotPEREPkdldHMgdGhlIHllYXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNnZXRZZWFyKCkiPjxCPmdldFllYXIoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sIj5HRGF0ZUJ1aWxkZXI8L0E+Ci08REQ+R2V0cyB0aGUgeWVhci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwjZ2V0WWVhcigpIj48Qj5nZXRZZWFyKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4KLTxERD5HZXRzIHRoZSB5ZWFyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sI2dsb2JhbEF0dHJpYnV0ZXMoKSI+PEI+Z2xvYmFsQXR0cmlidXRlcygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVTeXN0ZW0uaHRtbCI+U2NoZW1hVHlwZVN5c3RlbTwvQT4KLTxERD5SZXR1cm5zIHRoZSBnbG9iYWwgYXR0cmlidXRlcyBkZWZpbmVkIGluIHRoaXMgbG9hZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sI2dsb2JhbEVsZW1lbnRzKCkiPjxCPmdsb2JhbEVsZW1lbnRzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sIj5TY2hlbWFUeXBlU3lzdGVtPC9BPgotPEREPlJldHVybnMgdGhlIGdsb2JhbCBlbGVtZW50cyBkZWZpbmVkIGluIHRoaXMgbG9hZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sI2dsb2JhbFR5cGVzKCkiPjxCPmdsb2JhbFR5cGVzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sIj5TY2hlbWFUeXBlU3lzdGVtPC9BPgotPEREPlJldHVybnMgdGhlIGdsb2JhbCB0eXBlcyBkZWZpbmVkIGluIHRoaXMgbG9hZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjR1JFQVRFUl9USEFOIj48Qj5HUkVBVEVSX1RIQU48L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4KLTxERD5HUkVBVEVSX1RIQU4gaXMgMS4KLTwvREw+Ci08SFI+Ci08QSBOQU1FPSJfSF8iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPkg8L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI0hBU19EQVkiPjxCPkhBU19EQVk8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4KLTxERD5EYXkgb2YgbW9udGggaXMgc3BlY2lmaWVkLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjSEFTX01PTlRIIj48Qj5IQVNfTU9OVEg8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4KLTxERD5Nb250aCBvZiB5ZWFyIGlzIHNwZWNpZmllZC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI0hBU19USU1FIj48Qj5IQVNfVElNRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPgotPEREPlRpbWUgb2YgZGF5IGlzIHNwZWNpZmllZC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI0hBU19USU1FWk9ORSI+PEI+SEFTX1RJTUVaT05FPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+Ci08REQ+VGltZXpvbmUgaXMgc3BlY2lmaWVkLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjSEFTX1lFQVIiPjxCPkhBU19ZRUFSPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+Ci08REQ+WWVhciBpcyBzcGVjaWZpZWQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjaGFzQWxsQ29udGVudCgpIj48Qj5oYXNBbGxDb250ZW50KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPlRydWUgaWYgdGhlIGNvbXBsZXggY29udGVudCBtb2RlbCBmb3IgdGhpcyBjb21wbGV4IHR5cGUgaXMgYW4gImFsbCIgZ3JvdXAuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjaGFzQXR0cmlidXRlV2lsZGNhcmRzKCkiPjxCPmhhc0F0dHJpYnV0ZVdpbGRjYXJkcygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5UcnVlIGlmIHRoaXMgdHlwZSBwZXJtaXRzIHdpbGRjYXJkIGF0dHJpYnV0ZXMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuQ2hhbmdlU3RhbXAuaHRtbCNoYXNDaGFuZ2VkKCkiPjxCPmhhc0NoYW5nZWQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuQ2hhbmdlU3RhbXAuaHRtbCI+WG1sQ3Vyc29yLkNoYW5nZVN0YW1wPC9BPgotPEREPlJldHVybnMgd2hldGhlciBvciBub3QgdGhlIGRvY3VtZW50IGFzc29pYXRlZCB3aXRoIHRoaXMgQ2hhbmdlU3RhbXAKLSBoYXMgYmVlbiBhbHRlcmVkIHNpbmNlIHRoZSBDaGFuZ2VTdGFtcCBoYWQgYmVlbiBjcmVhdGVkLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjaGFzRGF0ZSgpIj48Qj5oYXNEYXRlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4KLTxERD5UcnVlIGlmIHRoaXMgZGF0ZS90aW1lIHNwZWNpZmljYXRpb24gc3BlY2lmaWVzIGEgZnVsbCBkYXRlICh5ZWFyLCBtb250aCwgZGF5KQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjaGFzRGF0ZSgpIj48Qj5oYXNEYXRlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+R0RhdGVCdWlsZGVyPC9BPgotPEREPlRydWUgaWYgdGhpcyBkYXRlL3RpbWUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSBmdWxsIGRhdGUgKHllYXIsIG1vbnRoLCBkYXkpCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI2hhc0RhdGUoKSI+PEI+aGFzRGF0ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+Ci08REQ+VHJ1ZSBpZiB0aGlzIGRhdGUvdGltZSBzcGVjaWZpY2F0aW9uIHNwZWNpZmllcyBhIGZ1bGwgZGF0ZSAoeWVhciwgbW9udGgsIGRheSkKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2hhc0RheSgpIj48Qj5oYXNEYXkoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPgotPEREPlRydWUgaWYgdGhpcyBkYXRlL3RpbWUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSBkYXktb2YtbW9udGguCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNoYXNEYXkoKSI+PEI+aGFzRGF5KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+R0RhdGVCdWlsZGVyPC9BPgotPEREPlRydWUgaWYgdGhpcyBkYXRlL3RpbWUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSBkYXktb2YtbW9udGguCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI2hhc0RheSgpIj48Qj5oYXNEYXkoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPgotPEREPlRydWUgaWYgdGhpcyBkYXRlL3RpbWUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSBkYXktb2YtbW9udGguCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2hhc0RlZmF1bHQoKSI+PEI+aGFzRGVmYXVsdCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwiPlNjaGVtYVByb3BlcnR5PC9BPgotPEREPlJldHVybnMgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI05FVkVSIj48Q09ERT5TY2hlbWFQcm9wZXJ0eS5ORVZFUjwvQ09ERT48L0E+LCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjVkFSSUFCTEUiPjxDT0RFPlNjaGVtYVByb3BlcnR5LlZBUklBQkxFPC9DT0RFPjwvQT4sIG9yIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNDT05TSVNURU5UTFkiPjxDT0RFPlNjaGVtYVByb3BlcnR5LkNPTlNJU1RFTlRMWTwvQ09ERT48L0E+IGRlZmF1bHRlZCwgZGVwZW5kaW5nIG9uIHRoZQotIGRlZmF1bHRzIHByZXNlbnQgaW4gdGhlIGVsZW1lbnRzIGluIHRoaXMgcHJvcGVydHkuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjaGFzRWxlbWVudFdpbGRjYXJkcygpIj48Qj5oYXNFbGVtZW50V2lsZGNhcmRzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPlRydWUgaWYgdGhpcyB0eXBlIHBlcm1pdHMgZWxlbWVudCB3aWxkY2FyZHMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2hhc0ZpeGVkKCkiPjxCPmhhc0ZpeGVkKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCI+U2NoZW1hUHJvcGVydHk8L0E+Ci08REQ+UmV0dXJucyA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjTkVWRVIiPjxDT0RFPlNjaGVtYVByb3BlcnR5Lk5FVkVSPC9DT0RFPjwvQT4sIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNWQVJJQUJMRSI+PENPREU+U2NoZW1hUHJvcGVydHkuVkFSSUFCTEU8L0NPREU+PC9BPiwgb3IgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0NPTlNJU1RFTlRMWSI+PENPREU+U2NoZW1hUHJvcGVydHkuQ09OU0lTVEVOVExZPC9DT0RFPjwvQT4gZml4ZWQsIGRlcGVuZGluZyBvbiB0aGUKLSBmaXhlZCBjb25zdHJhaW50cyBwcmVzZW50IGluIHRoZSBlbGVtZW50cyBpbiB0aGlzIHByb3BlcnR5LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sI2hhc2hDb2RlKCkiPjxCPmhhc2hDb2RlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwiPlhtbFNpbXBsZUxpc3Q8L0E+Ci08REQ+Q29tYmluZXMgdGhlIGhhc2ggY29kZXMgb2YgYWxsIHRoZSBsaXN0IGl0ZW1zLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sI2hhc2hDb2RlKCkiPjxCPmhhc2hDb2RlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLmh0bWwiPlN0cmluZ0VudW1BYnN0cmFjdEJhc2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgaGFzaCBjb2RlIG9mIHRoZSB1bmRlcmx5aW5nIHN0cmluZwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwjaGFzaENvZGUoKSI+PEI+aGFzaENvZGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI2hhc2hDb2RlKCkiPjxCPmhhc2hDb2RlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4KLTxERD5SZXR1cm5zIGEgaGFzaCBjb2RlIGZvciB0aGlzIEdEYXRlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjaGFzTW9udGgoKSI+PEI+aGFzTW9udGgoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPgotPEREPlRydWUgaWYgdGhpcyBkYXRlL3RpbWUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSBtb250aC1vZi15ZWFyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjaGFzTW9udGgoKSI+PEI+aGFzTW9udGgoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sIj5HRGF0ZUJ1aWxkZXI8L0E+Ci08REQ+VHJ1ZSBpZiB0aGlzIGRhdGUvdGltZSBzcGVjaWZpY2F0aW9uIHNwZWNpZmllcyBhIG1vbnRoLW9mLXllYXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI2hhc01vbnRoKCkiPjxCPmhhc01vbnRoKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4KLTxERD5UcnVlIGlmIHRoaXMgZGF0ZS90aW1lIHNwZWNpZmljYXRpb24gc3BlY2lmaWVzIGEgbW9udGgtb2YteWVhci4KLTxEVD48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2hhc05hbWUoKSI+PEI+aGFzTmFtZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sIj5YTUxTdHJlYW1SZWFkZXI8L0E+Ci08REQ+cmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IGV2ZW50IGhhcyBhIG5hbWUsIFNUQVJUX0VMRU1FTlQsIEVORF9FTEVNRU5ULAotIEVOVElUWV9SRUZFUkVOQ0UsIGFuZCBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OIGhhdmUgYSBuYW1lCi0gcmV0dXJucyBmYWxzZSBvdGhlcndpc2UKLTxEVD48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2hhc05leHQoKSI+PEI+aGFzTmV4dCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sIj5YTUxTdHJlYW1SZWFkZXI8L0E+Ci08REQ+UmV0dXJucyB0cnVlIGlmIHRoZXJlIGFyZSBtb3JlIHBhcnNpbmcgZXZlbnRzIGFuZCBmYWxzZQotIGlmIHRoZXJlIGFyZSBubyBtb3JlIGV2ZW50cy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2hhc05leHRTZWxlY3Rpb24oKSI+PEI+aGFzTmV4dFNlbGVjdGlvbigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+UmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGVyZSBpcyBhIG5leHQgc2VsZWN0aW9uLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaGFzTmV4dFRva2VuKCkiPjxCPmhhc05leHRUb2tlbigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+VHJ1ZSBpZiB0aGVyZSBpcyBhIG5leHQgdG9rZW4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2hhc05pbGxhYmxlKCkiPjxCPmhhc05pbGxhYmxlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCI+U2NoZW1hUHJvcGVydHk8L0E+Ci08REQ+UmV0dXJucyA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjTkVWRVIiPjxDT0RFPlNjaGVtYVByb3BlcnR5Lk5FVkVSPC9DT0RFPjwvQT4sIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNWQVJJQUJMRSI+PENPREU+U2NoZW1hUHJvcGVydHkuVkFSSUFCTEU8L0NPREU+PC9BPiwgb3IgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0NPTlNJU1RFTlRMWSI+PENPREU+U2NoZW1hUHJvcGVydHkuQ09OU0lTVEVOVExZPC9DT0RFPjwvQT4gbmlsbGFibGUsIGRlcGVuZGluZyBvbiB0aGUKLSBuaWxsYWJpbGl0eSBvZiB0aGUgZWxlbWVudHMgaW4gdGhpcyBwcm9wZXJ0eS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNoYXNPcHRpb24oamF2YS5sYW5nLk9iamVjdCkiPjxCPmhhc09wdGlvbihPYmplY3QpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPgotPEREPlVzZWQgdG8gdGVzdCBhIGdlbmVyaWMgb3B0aW9uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjaGFzUGF0dGVybkZhY2V0KCkiPjxCPmhhc1BhdHRlcm5GYWNldCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5UcnVlIGlmIHRoZXJlIGFyZSByZWdleCBwYXR0ZXJuIGZhY2VudHMKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2hhc1ByZXZUb2tlbigpIj48Qj5oYXNQcmV2VG9rZW4oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPlRydWUgaWYgdGhlcmUgaXMgYSBwcmV2aW91cyB0b2tlbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNoYXNTdHJpbmdFbnVtVmFsdWVzKCkiPjxCPmhhc1N0cmluZ0VudW1WYWx1ZXMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+VHJ1ZSBpZiB0aGlzIGlzIGEgc3RyaW5nIGVudW0gd2hlcmUgYW4gaW50ZWdlcgotIGlzIGFzc2lnbmVkIHRvIGVhY2ggZW51bWVyYXRlZCB2YWx1ZS4KLTxEVD48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2hhc1RleHQoKSI+PEI+aGFzVGV4dCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sIj5YTUxTdHJlYW1SZWFkZXI8L0E+Ci08REQ+UmV0dXJuIHRydWUgaWYgdGhlIGN1cnJlbnQgZXZlbnQgaGFzIHRleHQsIGZhbHNlIG90aGVyd2lzZQotIFRoZSBmb2xsb3dpbmcgZXZlbnRzIGhhdmUgdGV4dDoKLSBDSEFSQUNURVJTLERURCAsRU5USVRZX1JFRkVSRU5DRSwgQ09NTUVOVAotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjaGFzVGltZSgpIj48Qj5oYXNUaW1lKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4KLTxERD5UcnVlIGlmIHRoaXMgZGF0ZS90aW1lIHNwZWNpZmljYXRpb24gc3BlY2lmaWVzIGEgdGltZS1vZi1kYXkuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNoYXNUaW1lKCkiPjxCPmhhc1RpbWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sIj5HRGF0ZUJ1aWxkZXI8L0E+Ci08REQ+VHJ1ZSBpZiB0aGlzIGRhdGUvdGltZSBzcGVjaWZpY2F0aW9uIHNwZWNpZmllcyBhIHRpbWUtb2YtZGF5LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCNoYXNUaW1lKCkiPjxCPmhhc1RpbWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPgotPEREPlRydWUgaWYgdGhpcyBkYXRlL3RpbWUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSB0aW1lLW9mLWRheS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2hhc1RpbWVab25lKCkiPjxCPmhhc1RpbWVab25lKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4KLTxERD5UcnVlIGlmIHRoaXMgZGF0ZS90aW1lIHNwZWNpZmljYXRpb24gc3BlY2lmaWVzIGEgdGltZXpvbmUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNoYXNUaW1lWm9uZSgpIj48Qj5oYXNUaW1lWm9uZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwiPkdEYXRlQnVpbGRlcjwvQT4KLTxERD5UcnVlIGlmIHRoaXMgZGF0ZS90aW1lIHNwZWNpZmljYXRpb24gc3BlY2lmaWVzIGEgdGltZXpvbmUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI2hhc1RpbWVab25lKCkiPjxCPmhhc1RpbWVab25lKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4KLTxERD5UcnVlIGlmIHRoaXMgZGF0ZS90aW1lIHNwZWNpZmljYXRpb24gc3BlY2lmaWVzIGEgdGltZXpvbmUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNoYXNZZWFyKCkiPjxCPmhhc1llYXIoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPgotPEREPlRydWUgaWYgdGhpcyBkYXRlL3RpbWUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSB5ZWFyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjaGFzWWVhcigpIj48Qj5oYXNZZWFyKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+R0RhdGVCdWlsZGVyPC9BPgotPEREPlRydWUgaWYgdGhpcyBkYXRlL3RpbWUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSB5ZWFyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCNoYXNZZWFyKCkiPjxCPmhhc1llYXIoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPgotPEREPlRydWUgaWYgdGhpcyBkYXRlL3RpbWUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSB5ZWFyLgotPC9ETD4KLTxIUj4KLTxBIE5BTUU9Il9JXyI+PCEtLSAtLT48L0E+PEgyPgotPEI+STwvQj48L0gyPgotPERMPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjSURFTlRJVFlfQ09OU1RSQUlOVCI+PEI+SURFTlRJVFlfQ09OU1RSQUlOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPgotPEREPkFuIGlkZW50aXR5IGNvbnN0cmFpbnQgZGVmaW5pdGlvbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sI2luY2x1ZGVkUU5hbWVzSW5FeGNsdWRlZFVSSXMoKSI+PEI+aW5jbHVkZWRRTmFtZXNJbkV4Y2x1ZGVkVVJJcygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+Ci08REQ+VGhlIGZpbml0ZSBzZXQgb2YgUU5hbWVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBzZXQgd2l0aGluIG5hbWVzcGFjZXMKLSB0aGF0IGFyZSBvdGhlcndpc2UgZXhjbHVkZWQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCNpbmNsdWRlZFFOYW1lc0luRXhjbHVkZWRVUklzKCkiPjxCPmluY2x1ZGVkUU5hbWVzSW5FeGNsdWRlZFVSSXMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sIj5RTmFtZVNldEJ1aWxkZXI8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sI2luY2x1ZGVkUU5hbWVzSW5FeGNsdWRlZFVSSXMoKSI+PEI+aW5jbHVkZWRRTmFtZXNJbkV4Y2x1ZGVkVVJJcygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+Ci08REQ+VGhlIHNldCBvZiBRTmFtZXMgaW5jbHVkZWQgaW4gdGhlIHNldCBldmVuIHRob3VnaCB0aGV5IGFyZSB3aXRoaW4KLSBhIG5hbWVzcGFjZSB0aGF0IGlzIG90aGVyd2lzZSBmdWxseSBpbmNsdWRlZCBpbiB0aGUgc2V0LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwjaW5jbHVkZWRVUklzKCkiPjxCPmluY2x1ZGVkVVJJcygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+Ci08REQ+VGhlIGZpbml0ZSBzZXQgb2YgbmFtZXNwYWNlIFVSSXMgdGhhdCBhcmUgYWxtb3N0IGNvbXBsZXRlbHkgaW5jbHVkZWQgaW4KLSB0aGUgc2V0ICh0aGF0IGlzLCBlYWNoIG5hbWVzcGFjZSBVUkkgdGhhdCBpbmNsdWRlZCBpbiB0aGUgc2V0IHdpdGggd2l0aAotIGEgZmluaXRlIG51bWJlciBvZiBRTmFtZSBleGNlcHRpb25zKS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sI2luY2x1ZGVkVVJJcygpIj48Qj5pbmNsdWRlZFVSSXMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sIj5RTmFtZVNldEJ1aWxkZXI8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sI2luY2x1ZGVkVVJJcygpIj48Qj5pbmNsdWRlZFVSSXMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwiPlFOYW1lU2V0PC9BPgotPEREPk5hbWVzcGFjZXMgdGhhdCBhcmUgZnVsbHkgaW5jbHVkZWQgaW4gc2V0IGV4Y2VwdCBmb3IgYSBmaW5pdGUKLSBudW1iZXIgb2YgaW5kaXZpZHVhbCBRTmFtZSBleGNlcHRpb25zLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sI2luZGV4T2YoamF2YS5sYW5nLk9iamVjdCkiPjxCPmluZGV4T2YoT2JqZWN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCI+WG1sU2ltcGxlTGlzdDwvQT4KLTxERD5SZXR1cm5zIGluZGV4IG9mIHRoZSBmaXJzdCBvY2N1cmFuY2Ugb2YgYW4gb2JqZWN0IGVxdWFsIHRvIG8uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNpbnNlcnRBdHRyaWJ1dGUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxCPmluc2VydEF0dHJpYnV0ZShRTmFtZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5JbnNlcnRzIGEgbmV3IGF0dHJpYnV0ZSBpbW1lZGlhdGVseSBiZWZvcmUgdGhpcyBjdXJzb3IncyBsb2NhdGlvbiwgZ2l2aW5nIGl0Ci0gdGhlIHNwZWNpZmllZCBuYW1lLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaW5zZXJ0QXR0cmlidXRlKGphdmEubGFuZy5TdHJpbmcpIj48Qj5pbnNlcnRBdHRyaWJ1dGUoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPkluc2VydHMgYSBuZXcgYXR0cmlidXRlIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGlzIGN1cnNvcidzIGxvY2F0aW9uLCBnaXZpbmcgaXQKLSB0aGUgc3BlY2lmaWVkIGxvY2FsIG5hbWUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNpbnNlcnRBdHRyaWJ1dGUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjxCPmluc2VydEF0dHJpYnV0ZShTdHJpbmcsIFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5JbnNlcnRzIGEgbmV3IGF0dHJpYnV0ZSBpbW1lZGlhdGVseSBiZWZvcmUgdGhpcyBjdXJzb3IncyBsb2NhdGlvbiwgZ2l2aW5nIGl0Ci0gdGhlIHNwZWNpZmllZCBsb2NhbCBuYW1lIGFuZCBhc3NvY2lhdGluZyBpdCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaW5zZXJ0QXR0cmlidXRlV2l0aFZhbHVlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUsIGphdmEubGFuZy5TdHJpbmcpIj48Qj5pbnNlcnRBdHRyaWJ1dGVXaXRoVmFsdWUoUU5hbWUsIFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5JbnNlcnRzIGFuIGF0dHJpYnV0ZSBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGN1cnNvcidzIGxvY2F0aW9uLCBnaXZpbmcgaXQKLSB0aGUgc3BlY2lmaWVkIG5hbWUgYW5kIHZhbHVlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaW5zZXJ0QXR0cmlidXRlV2l0aFZhbHVlKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj48Qj5pbnNlcnRBdHRyaWJ1dGVXaXRoVmFsdWUoU3RyaW5nLCBTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+SW5zZXJ0cyBhIG5ldyBhdHRyaWJ1dGUgaW1tZWRpYXRlbHkgYmVmb3JlIHRoaXMgY3Vyc29yJ3MgbG9jYXRpb24sIGdpdmluZyBpdAotIHRoZSBzcGVjaWZpZWQgdmFsdWUgYW5kIG5hbWUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNpbnNlcnRBdHRyaWJ1dGVXaXRoVmFsdWUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjxCPmluc2VydEF0dHJpYnV0ZVdpdGhWYWx1ZShTdHJpbmcsIFN0cmluZywgU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPkluc2VydHMgYW4gYXR0cmlidXRlIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgY3Vyc29yJ3MgbG9jYXRpb24sIGdpdmluZyBpdAotIHRoZSBzcGVjaWZpZWQgbmFtZSBhbmQgdmFsdWUsIGFuZCBhc3NvY2lhdGluZyBpdCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaW5zZXJ0Q2hhcnMoamF2YS5sYW5nLlN0cmluZykiPjxCPmluc2VydENoYXJzKFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5JbnNlcnRzIHRoZSBzcGVjaWZpZWQgdGV4dCBpbW1lZGlhdGVseSBiZWZvcmUgdGhpcyBjdXJzb3IncyBsb2NhdGlvbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2luc2VydENvbW1lbnQoamF2YS5sYW5nLlN0cmluZykiPjxCPmluc2VydENvbW1lbnQoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPkluc2VydHMgYW4gWE1MIGNvbW1lbnQgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBjdXJzb3IncyBsb2NhdGlvbiwgCi0gZ2l2aW5nIGl0IHRoZSBzcGVjaWZpZWQgY29udGVudC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2luc2VydEVsZW1lbnQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxCPmluc2VydEVsZW1lbnQoUU5hbWUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+SW5zZXJ0cyBhbiBlbGVtZW50IGltbWVkaWF0ZWx5IGJlZm9yZSB0aGlzIGN1cnNvcidzIGxvY2F0aW9uLCBnaXZpbmcgCi0gdGhlIGVsZW1lbnQgdGhlIHNwZWNpZmllZCBxdWFsaWZpZWQgbmFtZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2luc2VydEVsZW1lbnQoamF2YS5sYW5nLlN0cmluZykiPjxCPmluc2VydEVsZW1lbnQoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPkluc2VydHMgYW4gZWxlbWVudCBpbW1lZGlhdGVseSBiZWZvcmUgdGhpcyBjdXJzb3IncyBsb2NhdGlvbiwgZ2l2aW5nIAotIHRoZSBlbGVtZW50IHRoZSBzcGVjaWZpZWQgbG9jYWwgbmFtZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2luc2VydEVsZW1lbnQoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjxCPmluc2VydEVsZW1lbnQoU3RyaW5nLCBTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+SW5zZXJ0cyBhIG5ldyBlbGVtZW50IGltbWVkaWF0ZWx5IGJlZm9yZSB0aGlzIGN1cnNvcidzIGxvY2F0aW9uLCBnaXZpbmcgdGhlCi0gZWxlbWVudCB0aGUgc3BlY2lmaWVkIGxvY2FsIG5hbWUgYW5kIGFzc29jaWF0aW5nIGl0IHdpdGggc3BlY2lmaWVkIG5hbWVzcGFjZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaW5zZXJ0RWxlbWVudFdpdGhUZXh0KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUsIGphdmEubGFuZy5TdHJpbmcpIj48Qj5pbnNlcnRFbGVtZW50V2l0aFRleHQoUU5hbWUsIFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5JbnNlcnRzIGEgbmV3IGVsZW1lbnQgaW1tZWRpYXRlbHkgYmVmb3JlIHRoaXMgY3Vyc29yJ3MgbG9jYXRpb24sIGdpdmluZyB0aGUKLSBlbGVtZW50IHRoZSBzcGVjaWZpZWQgcXVhbGlmaWVkIG5hbWUgYW5kIGNvbnRlbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNpbnNlcnRFbGVtZW50V2l0aFRleHQoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjxCPmluc2VydEVsZW1lbnRXaXRoVGV4dChTdHJpbmcsIFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5JbnNlcnRzIGEgbmV3IGVsZW1lbnQgaW1tZWRpYXRlbHkgYmVmb3JlIHRoaXMgY3Vyc29yJ3MgbG9jYXRpb24sIGdpdmluZyB0aGUKLSBlbGVtZW50IHRoZSBzcGVjaWZpZWQgbG9jYWwgbmFtZSBhbmQgY29udGVudC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2luc2VydEVsZW1lbnRXaXRoVGV4dChqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+PEI+aW5zZXJ0RWxlbWVudFdpdGhUZXh0KFN0cmluZywgU3RyaW5nLCBTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+SW5zZXJ0cyBhIG5ldyBlbGVtZW50IGltbWVkaWF0ZWx5IGJlZm9yZSB0aGlzIGN1cnNvcidzIGxvY2F0aW9uLCBnaXZpbmcgdGhlCi0gZWxlbWVudCB0aGUgc3BlY2lmaWVkIGxvY2FsIG5hbWUsIGFzc29jaWF0aW5nIGl0IHdpdGggdGhlIHNwZWNpZmllZCBuYW1lc3BhY2UsIAotIGFuZCBnaXZpbmcgaXQgdGhlIHNwZWNpZmllZCBjb250ZW50LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaW5zZXJ0TmFtZXNwYWNlKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj48Qj5pbnNlcnROYW1lc3BhY2UoU3RyaW5nLCBTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+SW5zZXJ0cyBhIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGN1cnNvcidzIGxvY2F0aW9uLCAKLSBnaXZpbmcgaXQgdGhlIHNwZWNpZmllZCBwcmVmaXggYW5kIFVSSS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2luc2VydFByb2NJbnN0KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj48Qj5pbnNlcnRQcm9jSW5zdChTdHJpbmcsIFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5JbnNlcnRzIGFuIFhNTCBwcm9jZXNzaW5nIGluc3RydWN0aW9uIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgY3Vyc29yJ3MgbG9jYXRpb24sIAotIGdpdmluZyBpdCB0aGUgc3BlY2lmaWVkIHRhcmdldCBhbmQgdGV4dC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjaW5zdGFuY2VUeXBlKCkiPjxCPmluc3RhbmNlVHlwZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPlRoZSBzYW1lIGFzIGdldFNjaGVtYVR5cGUgdW5sZXNzIHRoaXMgaXMgYSB1bmlvbiBpbnN0YW5jZQotIG9yIG5pbCB2YWx1ZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2luc3RhbmNlVHlwZSgpIj48Qj5pbnN0YW5jZVR5cGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjSU5UX0FUVFIiPjxCPklOVF9BVFRSPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPgotPEREPlRoZSBhdHRyaWJ1dGUgdG9rZW4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjSU5UX0NPTU1FTlQiPjxCPklOVF9DT01NRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPgotPEREPlRoZSBjb21tZW50IHRva2VuLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI0lOVF9FTkQiPjxCPklOVF9FTkQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwiPlhtbEN1cnNvci5Ub2tlblR5cGU8L0E+Ci08REQ+VGhlIGVuZC1lbGVtZW50IHRva2VuLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI0lOVF9FTkRET0MiPjxCPklOVF9FTkRET0M8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwiPlhtbEN1cnNvci5Ub2tlblR5cGU8L0E+Ci08REQ+VGhlIGVuZC1kb2N1bWVudCB0b2tlbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCNJTlRfTkFNRVNQQUNFIj48Qj5JTlRfTkFNRVNQQUNFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPgotPEREPlRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb24gdG9rZW4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjSU5UX05PTkUiPjxCPklOVF9OT05FPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPgotPEREPk5vIHRva2VuLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI0lOVF9QUk9DSU5TVCI+PEI+SU5UX1BST0NJTlNUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPgotPEREPlRoZSBwcm9jZXNzaW5nIGluc3RydWN0aW9uIHRva2VuLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI0lOVF9TVEFSVCI+PEI+SU5UX1NUQVJUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPgotPEREPlRoZSBzdGFydC1lbGVtZW50IHRva2VuLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI0lOVF9TVEFSVERPQyI+PEI+SU5UX1NUQVJURE9DPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPgotPEREPlRoZSBzdGFydC1kb2N1bWVudCB0b2tlbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCNJTlRfVEVYVCI+PEI+SU5UX1RFWFQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwiPlhtbEN1cnNvci5Ub2tlblR5cGU8L0E+Ci08REQ+VGhlIHRleHQgdG9rZW4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwjSU5UX1RPT19MQVJHRSI+PEI+SU5UX1RPT19MQVJHRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCI+U2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sI2ludGVyc2VjdChvcmcuYXBhY2hlLnhtbGJlYW5zLlFOYW1lU2V0U3BlY2lmaWNhdGlvbikiPjxCPmludGVyc2VjdChRTmFtZVNldFNwZWNpZmljYXRpb24pPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+Ci08REQ+UmV0dXJucyB0aGUgaW50ZXJzZWN0aW9uIHdpdGggYW5vdGhlciBRTmFtZVNldC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sI2ludGVyc2VjdChvcmcuYXBhY2hlLnhtbGJlYW5zLlFOYW1lU2V0U3BlY2lmaWNhdGlvbikiPjxCPmludGVyc2VjdChRTmFtZVNldFNwZWNpZmljYXRpb24pPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwiPlFOYW1lU2V0QnVpbGRlcjwvQT4KLTxERD5SZXR1cm5zIGEgbmV3IFFOYW1lU2V0IHRoYXQgaXMgdGhlIGludGVyc2VjdGlvbiBvZiB0aGlzIG9uZSBhbmQgYW5vdGhlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwjaW50ZXJzZWN0KG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+PEI+aW50ZXJzZWN0KFFOYW1lU2V0U3BlY2lmaWNhdGlvbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj5RTmFtZVNldDwvQT4KLTxERD5SZXR1cm5zIGEgbmV3IFFOYW1lU2V0IHRoYXQgaXMgdGhlIGludGVyc2VjdGlvbiBvZiB0aGlzIG9uZSBhbmQgYW5vdGhlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCNpbnRWYWx1ZSgpIj48Qj5pbnRWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+WG1sVW5zaWduZWRTaG9ydDwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sI2dldEludFZhbHVlKCkiPjxDT0RFPlhtbFVuc2lnbmVkU2hvcnQuZ2V0SW50VmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwjaW50VmFsdWUoKSI+PEI+aW50VmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+WG1sSW50PC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCNnZXRJbnRWYWx1ZSgpIj48Q09ERT5YbWxJbnQuZ2V0SW50VmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCNpbnRWYWx1ZSgpIj48Qj5pbnRWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPlhtbEdZZWFyPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sI2dldEludFZhbHVlKCkiPjxDT0RFPlhtbEdZZWFyLmdldEludFZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI2ludFZhbHVlKCkiPjxCPmludFZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPlhtbEdNb250aDwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwjZ2V0SW50VmFsdWUoKSI+PENPREU+WG1sR01vbnRoLmdldEludFZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCNpbnRWYWx1ZSgpIj48Qj5pbnRWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+WG1sR0RheTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sI2dldEludFZhbHVlKCkiPjxDT0RFPlhtbEdEYXkuZ2V0SW50VmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI2ludFZhbHVlKCkiPjxCPmludFZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwiPlhtbEN1cnNvci5Ub2tlblR5cGU8L0E+Ci08REQ+UmV0dXJucyBvbmUgb2YgdGhlIElOVF8gdmFsdWVzIGRlZmluZWQgaW4gdGhpcyBjbGFzcy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuaHRtbCNpbnRWYWx1ZSgpIj48Qj5pbnRWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sIj5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlPC9BPgotPEREPlJldHVybnMgYW4gaW50IGNvZGUgdGhhdCBjYW4gYmUgdXNlZCBmb3Igc3dpdGNoIHN0YXRlbWVudHMKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjaW50VmFsdWUoKSI+PEI+aW50VmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRJbnRWYWx1ZSgpIj48Q09ERT5TaW1wbGVWYWx1ZS5nZXRJbnRWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNpbnRWYWx1ZSgpIj48Qj5pbnRWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sI2ludmVyc2UoKSI+PEI+aW52ZXJzZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+Ci08REQ+UmV0dXJuIHRoZSBpbnZlcnNlIG9mIHRoaXMgUU5hbWVTZXQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCNpbnZlcnNlKCkiPjxCPmludmVyc2UoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sIj5RTmFtZVNldEJ1aWxkZXI8L0E+Ci08REQ+UmV0dXJucyBhIG5ldyBRTmFtZVNldCB0aGF0IGlzIHRoZSBpbnZlcnNlIG9mIHRoaXMgb25lLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCNpbnZlcnNlKCkiPjxCPmludmVyc2UoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwiPlFOYW1lU2V0PC9BPgotPEREPlJldHVybnMgYSBuZXcgUU5hbWVTZXQgdGhhdCBpcyB0aGUgaW52ZXJzZSBvZiB0aGlzIG9uZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sI2ludmVydCgpIj48Qj5pbnZlcnQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sIj5RTmFtZVNldEJ1aWxkZXI8L0E+Ci08REQ+SW52ZXJ0cyB0aGlzIFFOYW1lU2V0QnVpbGRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCNJT19FWENFUFRJT04iPjxCPklPX0VYQ0VQVElPTjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCI+U2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNpc0Fic3RyYWN0KCkiPjxCPmlzQWJzdHJhY3QoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+VHJ1ZSBpZiB0aGlzIHR5cGUgY2Fubm90IGJlIHVzZWQgZGlyZWN0bHkgaW4gaW5zdGFuY2VzCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEVsZW1lbnQuaHRtbCNpc0Fic3RyYWN0KCkiPjxCPmlzQWJzdHJhY3QoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEVsZW1lbnQuaHRtbCI+U2NoZW1hTG9jYWxFbGVtZW50PC9BPgotPEREPlRydWUgaWYgdGhpcyBlbGVtZW50IGlzIHByb2hpYml0ZWQgaW4gY29udGVudC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sI2lzQWxsKCkiPjxCPmlzQWxsKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT4KLTxERD5UcnVlIGlmIHRoZSBzZXQgaXMgdGhlIHNldCBvZiBhbGwgUU5hbWVzLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwjaXNBbGwoKSI+PEI+aXNBbGwoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sIj5RTmFtZVNldEJ1aWxkZXI8L0E+Ci08REQ+VHJ1ZSBpZiB0aGlzIE1vZGVsVHJhbnNpdGlvblNldCBjb250YWlucyBhbGwgUU5hbWVzLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCNpc0FsbCgpIj48Qj5pc0FsbCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+Ci08REQ+VHJ1ZSBpZiB0aGlzIE1vZGVsVHJhbnNpdGlvblNldCBjb250YWlucyBhbGwgUU5hbWVzLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2lzQW5vbnltb3VzVHlwZSgpIj48Qj5pc0Fub255bW91c1R5cGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+VHJ1ZSBpZiB0aGUgWHNkIHR5cGUgaXMgYW5vbnltb3VzIChpLmUuLCBub3QgdG9wLWxldmVsKS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2lzQW55QXR0cigpIj48Qj5pc0FueUF0dHIoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPlRydWUgaWYgdGhpcyB0b2tlbiBpcyBhbnkgYXR0cmlidXRlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI2lzQW55QXR0cigpIj48Qj5pc0FueUF0dHIoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+WG1sQ3Vyc29yLlRva2VuVHlwZTwvQT4KLTxERD5UcnVlIGlmIGlzIGF0dHJpYnV0ZSBvciBuYW1lc3BhY2UgZGVjbGFyYXRpb24gdG9rZW4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNpc0Fzc2lnbmFibGVGcm9tKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPjxCPmlzQXNzaWduYWJsZUZyb20oU2NoZW1hVHlwZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPlRydWUgaWYgdGhlIHNwZWNpZmllZCB0eXBlIGRlcml2ZXMgZnJvbSB0aGlzIHR5cGUgKG9yIGlmCi0gaXQgaXMgdGhlIHNhbWUgdHlwZSkuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNpc0F0U2FtZVBvc2l0aW9uQXMob3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IpIj48Qj5pc0F0U2FtZVBvc2l0aW9uQXMoWG1sQ3Vyc29yKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPkRldGVybWluZXMgaWYgdGhpcyBjdXJzb3IgaXMgYXQgdGhlIHNhbWUgcG9zaXRpb24gYXMKLSB0aGUgc3BlY2lmaWVkIGN1cnNvci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2lzQXR0cigpIj48Qj5pc0F0dHIoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPlRydWUgaWYgdGhpcyB0b2tlbiBpcyBhbiBBVFRSIHRva2VuIHR5cGUsIG1lYW5pbmcgCi0ganVzdCBiZWZvcmUgYW4gYXR0cmlidXRlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI2lzQXR0cigpIj48Qj5pc0F0dHIoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+WG1sQ3Vyc29yLlRva2VuVHlwZTwvQT4KLTxERD5UcnVlIGlmIGlzIGF0dHJpYnV0ZSB0b2tlbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjaXNBdHRyaWJ1dGUoKSI+PEI+aXNBdHRyaWJ1dGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sIj5TY2hlbWFQcm9wZXJ0eTwvQT4KLTxERD5UcnVlIGZvciBhdHRyaWJ1dGVzLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCNpc0F0dHJpYnV0ZSgpIj48Qj5pc0F0dHJpYnV0ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwiPlNjaGVtYUZpZWxkPC9BPgotPEREPlRydWUgaWYgdGhpcyB1c2UgaXMgYW4gYXR0cmlidXRlCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNpc0F0dHJpYnV0ZVNwZWNpZmllZChpbnQpIj48Qj5pc0F0dHJpYnV0ZVNwZWNpZmllZChpbnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sIj5YTUxTdHJlYW1SZWFkZXI8L0E+Ci08REQ+UmV0dXJucyBhIGJvb2xlYW4gd2hpY2ggaW5kaWNhdGVzIGlmIHRoaXMKLSBhdHRyaWJ1dGUgd2FzIGNyZWF0ZWQgYnkgZGVmYXVsdAotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2lzQXR0cmlidXRlVHlwZSgpIj48Qj5pc0F0dHJpYnV0ZVR5cGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+VHJ1ZSBpZiB0aGlzIGlzIGEgYXR0cmlidXRlIHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjaXNCb3VuZGVkKCkiPjxCPmlzQm91bmRlZCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5UcnVlIGlmIGJvdW5kZWQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjaXNCdWlsdGluVHlwZSgpIj48Qj5pc0J1aWx0aW5UeXBlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPlRydWUgZm9yIGFueSBvZiB0aGUgNDArIGJ1aWx0LWluIHR5cGVzLgotPERUPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjaXNDaGFyYWN0ZXJzKCkiPjxCPmlzQ2hhcmFjdGVycygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sIj5YTUxTdHJlYW1SZWFkZXI8L0E+Ci08REQ+UmV0dXJucyB0cnVlIGlmIHRoZSBjdXJzb3IgcG9pbnRzIHRvIGEgY2hhcmFjdGVyIGRhdGEgZXZlbnQKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2lzQ29tbWVudCgpIj48Qj5pc0NvbW1lbnQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPlRydWUgaWYgdGhpcyB0b2tlbiBpcyBhIENPTU1FTlQgdG9rZW4gdHlwZSwgbWVhbmluZyAKLSBqdXN0IGJlZm9yZSBhIGNvbW1lbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjaXNDb21tZW50KCkiPjxCPmlzQ29tbWVudCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPgotPEREPlRydWUgaWYgaXMgY29tbWVudCB0b2tlbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNpc0NvbXBpbGVkKCkiPjxCPmlzQ29tcGlsZWQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+VHJ1ZSBpZiB0aGlzIHNjaGVtYSB0eXBlIHdhcyBjb21waWxlZCB0byBoYXZlIGEgY29ycmVzcG9uZGluZwotIEphdmEgY2xhc3MuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNpc0NvbnRhaW5lcigpIj48Qj5pc0NvbnRhaW5lcigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+VHJ1ZSBpZiB0aGlzIHRva2VuIGlzIGEgY29udGFpbmVyIHRva2VuLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI2lzQ29udGFpbmVyKCkiPjxCPmlzQ29udGFpbmVyKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwiPlhtbEN1cnNvci5Ub2tlblR5cGU8L0E+Ci08REQ+VHJ1ZSBpZiBpcyBzdGFydC1kb2N1bWVudCBvciBzdGFydC1lbGVtZW50IHRva2VuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI2lzRGVmYXVsdCgpIj48Qj5pc0RlZmF1bHQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sIj5TY2hlbWFQYXJ0aWNsZTwvQT4KLTxERD5Gb3IgZWxlbWVudHMgb25seTogVHJ1ZSBpZiBoYXMgZGVmYXVsdC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwjaXNEZWZhdWx0KCkiPjxCPmlzRGVmYXVsdCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwiPlNjaGVtYUZpZWxkPC9BPgotPEREPlRydWUgaWYgYSBkZWZhdWx0IGlzIHN1cHBsaWVkLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwjaXNEaXNqb2ludChvcmcuYXBhY2hlLnhtbGJlYW5zLlFOYW1lU2V0U3BlY2lmaWNhdGlvbikiPjxCPmlzRGlzam9pbnQoUU5hbWVTZXRTcGVjaWZpY2F0aW9uKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPgotPEREPlRydWUgaWYgaXMgZGlzam9pbnQgZnJvbSB0aGUgc3BlY2lmaWVkIHNldC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sI2lzRGlzam9pbnQob3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldFNwZWNpZmljYXRpb24pIj48Qj5pc0Rpc2pvaW50KFFOYW1lU2V0U3BlY2lmaWNhdGlvbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCI+UU5hbWVTZXRCdWlsZGVyPC9BPgotPEREPlRydWUgaWYgdGhlIGdpdmVuIHNldCBpcyBkaXNqb2ludCBmcm9tIHRoaXMgb25lLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCNpc0Rpc2pvaW50KG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+PEI+aXNEaXNqb2ludChRTmFtZVNldFNwZWNpZmljYXRpb24pPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+Ci08REQ+VHJ1ZSBpZiB0aGUgZ2l2ZW4gc2V0IGlzIGRpc2pvaW50IGZyb20gdGhpcyBvbmUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjaXNEb2N1bWVudFR5cGUoKSI+PEI+aXNEb2N1bWVudFR5cGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+VHJ1ZSBpZiB0aGlzIGlzIGEgZG9jdW1lbnQgdHlwZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCNpc0VtcHR5KCkiPjxCPmlzRW1wdHkoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCI+WG1sU2ltcGxlTGlzdDwvQT4KLTxERD5UcnVlIGlmIHRoZSBsaXN0IGlzIGVtcHR5LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwjaXNFbXB0eSgpIj48Qj5pc0VtcHR5KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT4KLTxERD5UcnVlIGlmIHRoZSBzZXQgaXMgZW1wdHkuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCNpc0VtcHR5KCkiPjxCPmlzRW1wdHkoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sIj5RTmFtZVNldEJ1aWxkZXI8L0E+Ci08REQ+VHJ1ZSBpZiB0aGlzIE1vZGVsVHJhbnNpdGlvblNldCBjb250YWlucyBubyBRTmFtZXMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sI2lzRW1wdHkoKSI+PEI+aXNFbXB0eSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+Ci08REQ+VHJ1ZSBpZiB0aGlzIE1vZGVsVHJhbnNpdGlvblNldCBjb250YWlucyBubyBRTmFtZXMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNpc0VuZCgpIj48Qj5pc0VuZCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+VHJ1ZSBpZiB0aGlzIHRva2VuIGlzIGFuIEVORCB0b2tlbiB0eXBlLCBtZWFuaW5nIAotIGp1c3QgYmVmb3JlIGFuIGVsZW1lbnQncyBlbmQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjaXNFbmQoKSI+PEI+aXNFbmQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+WG1sQ3Vyc29yLlRva2VuVHlwZTwvQT4KLTxERD5UcnVlIGlmIGlzIGVuZC1lbGVtZW50IHRva2VuLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaXNFbmRkb2MoKSI+PEI+aXNFbmRkb2MoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPlRydWUgaWYgdGhpcyB0b2tlbiBpcyBhbiBFTkRET0MgdG9rZW4gdHlwZSwgbWVhbmluZyAKLSBhdCB0aGUgdmVyeSBlbmQgb2YgdGhlIGRvY3VtZW50LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI2lzRW5kZG9jKCkiPjxCPmlzRW5kZG9jKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwiPlhtbEN1cnNvci5Ub2tlblR5cGU8L0E+Ci08REQ+VHJ1ZSBpZiBpcyBlbmQtZG9jdW1lbnQgdG9rZW4uCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNpc0VuZEVsZW1lbnQoKSI+PEI+aXNFbmRFbGVtZW50KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwiPlhNTFN0cmVhbVJlYWRlcjwvQT4KLTxERD5SZXR1cm5zIHRydWUgaWYgdGhlIGN1cnNvciBwb2ludHMgdG8gYW4gZW5kIHRhZyAob3RoZXJ3aXNlIGZhbHNlKQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2lzRmFjZXRGaXhlZChpbnQpIj48Qj5pc0ZhY2V0Rml4ZWQoaW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+VHJ1ZSBpZiB0aGUgZ2l2ZW4gZmFjZXQgaXMgZml4ZWQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNpc0ZpbmlzaCgpIj48Qj5pc0ZpbmlzaCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+VHJ1ZSBpZiB0aGlzIHRva2VuIGlzIGEgZmluaXNoIHRva2VuLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI2lzRmluaXNoKCkiPjxCPmlzRmluaXNoKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwiPlhtbEN1cnNvci5Ub2tlblR5cGU8L0E+Ci08REQ+VHJ1ZSBpZiBpcyBlbmQtZG9jdW1lbnQgb3IgZW5kLWVsZW1lbnQgdG9rZW4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNpc0Zpbml0ZSgpIj48Qj5pc0Zpbml0ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5UcnVlIGlmIGZpbml0ZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjaXNGaXhlZCgpIj48Qj5pc0ZpeGVkKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCI+U2NoZW1hUGFydGljbGU8L0E+Ci08REQ+Rm9yIGVsZW1lbnRzIG9ubHk6IHRydWUgaWYgaXMgZml4ZWQgdmFsdWUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sI2lzRml4ZWQoKSI+PEI+aXNGaXhlZCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwiPlNjaGVtYUZpZWxkPC9BPgotPEREPlRydWUgaWYgdGhlIHZhbHVlIGlzIGZpeGVkLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNJbW11dGFibGUoKSI+PEI+aXNJbW11dGFibGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPgotPEREPlRydWUgaWYgdGhlIHZhbHVlIGlzIGFuIGltbXV0YWJsZSB2YWx1ZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCNpc0ltbXV0YWJsZSgpIj48Qj5pc0ltbXV0YWJsZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCI+R0R1cmF0aW9uU3BlY2lmaWNhdGlvbjwvQT4KLTxERD5UcnVlIGlmIHRoaXMgaW5zdGFuY2UgaXMgaW1tdXRhYmxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sI2lzSW1tdXRhYmxlKCkiPjxCPmlzSW1tdXRhYmxlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwiPkdEdXJhdGlvbkJ1aWxkZXI8L0E+Ci08REQ+QWxsIEdEdXJhdGlvbiBpbnN0YW5jZXMgcmV0dXJuIHRydWUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCNpc0ltbXV0YWJsZSgpIj48Qj5pc0ltbXV0YWJsZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwiPkdEdXJhdGlvbjwvQT4KLTxERD5BbGwgR0R1cmF0aW9uIGluc3RhbmNlcyByZXR1cm4gdHJ1ZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2lzSW1tdXRhYmxlKCkiPjxCPmlzSW1tdXRhYmxlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4KLTxERD5UcnVlIGlmIHRoaXMgR0RhdGUgc3BlY2lmaWNhdGlvbiBpcyBpbW11dGFibGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNpc0ltbXV0YWJsZSgpIj48Qj5pc0ltbXV0YWJsZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwiPkdEYXRlQnVpbGRlcjwvQT4KLTxERD5UcnVlIGlmIHRoZSBpbnN0YW5jZSBpcyBpbW11dGFibGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI2lzSW1tdXRhYmxlKCkiPjxCPmlzSW1tdXRhYmxlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4KLTxERD5SZXR1cm5zIHRydWU6IGFsbCBHRGF0ZSBpbnN0YW5jZXMgYXJlIGltbXV0YWJsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2lzSW1tdXRhYmxlKCkiPjxCPmlzSW1tdXRhYmxlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaXNJblNhbWVEb2N1bWVudChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcikiPjxCPmlzSW5TYW1lRG9jdW1lbnQoWG1sQ3Vyc29yKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPkRldGVybWluZXMgaWYgdGhlIHNwZWNpZmllZCBjdXJzb3IgaXMgaW4gdGhlIHNhbWUgZG9jdW1lbnQgYXMKLSB0aGlzIGN1cnNvci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2lzTGVmdE9mKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yKSI+PEI+aXNMZWZ0T2YoWG1sQ3Vyc29yKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPkRldGVybWluZXMgaWYgdGhpcyBjdXJzb3IgaXMgdG8gdGhlIGxlZnQgb2YgKG9yIGJlZm9yZSkKLSB0aGUgc3BlY2lmaWVkIGN1cnNvci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2lzTmFtZXNwYWNlKCkiPjxCPmlzTmFtZXNwYWNlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5UcnVlIGlmIHRoaXMgdG9rZW4gaXMgYSBOQU1FU1BBQ0UgdG9rZW4gdHlwZSwgbWVhbmluZyAKLSBqdXN0IGJlZm9yZSBhIG5hbWVzcGFjZSBkZWNsYXJhdGlvbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCNpc05hbWVzcGFjZSgpIj48Qj5pc05hbWVzcGFjZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPgotPEREPlRydWUgaWYgaXMgbmFtZXNwYWNlIGRlY2xhcmF0aW9uIHRva2VuLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI2lzTmFtZXNwYWNlRGVmaW5lZChqYXZhLmxhbmcuU3RyaW5nKSI+PEI+aXNOYW1lc3BhY2VEZWZpbmVkKFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sIj5TY2hlbWFUeXBlTG9hZGVyPC9BPgotPEREPlRydWUgaWYgdGhlIHR5cGVsb2FkZXIgY29udGFpbnMgYW55IGRlZmluaXRpb25zIGluIHRoZSBnaXZlbiBuYW1lc3BhY2UuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc05pbCgpIj48Qj5pc05pbCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+Ci08REQ+VHJ1ZSBpZiB0aGUgdmFsdWUgaXMgbmlsLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjaXNOaWwoKSI+PEI+aXNOaWwoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI2lzTmlsbGFibGUoKSI+PEI+aXNOaWxsYWJsZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwiPlNjaGVtYVBhcnRpY2xlPC9BPgotPEREPkZvciBlbGVtZW50cyBvbmx5OiB0cnVlIGlmIG5pbGxhYmxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCNpc05pbGxhYmxlKCkiPjxCPmlzTmlsbGFibGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sIj5TY2hlbWFGaWVsZDwvQT4KLTxERD5UcnVlIGlmIG5pbGxhYmxlOyBhbHdheXMgZmFsc2UgZm9yIGF0dHJpYnV0ZXMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjaXNOb25lKCkiPjxCPmlzTm9uZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPgotPEREPlRydWUgaWYgbm8gdG9rZW4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjaXNOb1R5cGUoKSI+PEI+aXNOb1R5cGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+VHJ1ZSBmb3IgdGhlIHR5cGUgb2JqZWN0IHRoYXQgcmVwcmVzZW50cyBhIHRoZSBhYnNlbmNlIG9mIGEgZGV0ZXJtaW5lZCB0eXBlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2lzTnVtZXJpYygpIj48Qj5pc051bWVyaWMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+VHJ1ZSBpZiBudW1lcmljLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2lzT3JkZXJTZW5zaXRpdmUoKSI+PEI+aXNPcmRlclNlbnNpdGl2ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5UcnVlIGlmIHBhcnRpY2xlcyBoYXZlIHNhbWUgZGVmYXVsdHMsIG5pbGxhYmlsaXR5LCBldGMsIHRoYXQgYXJlCi0gaW52YXJpYW50IHdoZW4gb3JkZXIgY2hhbmdlcy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNpc1ByaW1pdGl2ZVR5cGUoKSI+PEI+aXNQcmltaXRpdmVUeXBlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPlRydWUgZm9yIGFueSBvZiB0aGUgMjAgcHJpbWl0aXZlIHR5cGVzIChwbHVzIGFueVNpbXBsZVR5cGUpCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNpc1Byb2NpbnN0KCkiPjxCPmlzUHJvY2luc3QoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPlRydWUgaWYgdGhpcyB0b2tlbiBpcyBhIFBST0NJTlNUIHRva2VuIHR5cGUsIG1lYW5pbmcgCi0ganVzdCBiZWZvcmUgYSBwcm9jZXNzaW5nIGluc3RydWN0aW9uLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI2lzUHJvY2luc3QoKSI+PEI+aXNQcm9jaW5zdCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPgotPEREPlRydWUgaWYgaXMgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiB0b2tlbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjaXNSZWFkT25seSgpIj48Qj5pc1JlYWRPbmx5KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCI+U2NoZW1hUHJvcGVydHk8L0E+Ci08REQ+VHJ1ZSBmb3IgcmVhZC1vbmx5IHByb3BlcnRpZXMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNpc1JpZ2h0T2Yob3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IpIj48Qj5pc1JpZ2h0T2YoWG1sQ3Vyc29yKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPkRldGVybWluZXMgaWYgdGhpcyBjdXJzb3IgaXMgdG8gdGhlIHJpZ2h0IG9mIChvciBhZnRlcikKLSB0aGUgc3BlY2lmaWVkIGN1cnNvci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNpc1NpbXBsZVR5cGUoKSI+PEI+aXNTaW1wbGVUeXBlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPlRydWUgZm9yIHRoZSBhbnlTaW1wbGVUeXBlIGFuZCBhbnkgcmVzdHJpY3Rpb25zL3VuaW9ucy9saXN0cy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjaXNTaW5nbGV0b24oKSI+PEI+aXNTaW5nbGV0b24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sIj5TY2hlbWFQYXJ0aWNsZTwvQT4KLTxERD5PbmUgaWYgbWluT2NjdXJzID09IG1heE9jY3VycyA9PSAxLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNpc1NraXBwYWJsZSgpIj48Qj5pc1NraXBwYWJsZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwiPlNjaGVtYVBhcnRpY2xlPC9BPgotPEREPlRydWUgaWYgdGhpcyBwYXJ0aWNsZSBjYW4gYmUgc2tpcHBlZCAodGFraW5nIGludG8gYWNjb3VudAotIGJvdGggdGhlIG1pbk9jdXJzIGFzIHdlbGwgYXMgdGhlIHN0cnVjdHVyZSBvZiBhbGwgdGhlCi0gY2hpbGQgcGFydGljbGVzKQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2lzU2tpcHBlZEFub255bW91c1R5cGUoKSI+PEI+aXNTa2lwcGVkQW5vbnltb3VzVHlwZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5UcnVlIGlmIHRoaXMgYW5vbnltb3VzIHR5cGUgaGFzIG5vIGNvcnJlc3BvbmRpbmcgSmF2YSB0eXBlLgotPERUPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjaXNTdGFuZGFsb25lKCkiPjxCPmlzU3RhbmRhbG9uZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sIj5YTUxTdHJlYW1SZWFkZXI8L0E+Ci08REQ+R2V0IHRoZSBzdGFuZGFsb25lIGRlY2xhcmF0aW9uIGZyb20gdGhlIHhtbCBkZWNsYXJhdGlvbgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaXNTdGFydCgpIj48Qj5pc1N0YXJ0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5UcnVlIGlmIHRoaXMgdG9rZW4gaXMgYSBTVEFSVCB0b2tlbiB0eXBlLCBtZWFuaW5nIAotIGp1c3QgYmVmb3JlIGFuIGVsZW1lbnQncyBzdGFydC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCNpc1N0YXJ0KCkiPjxCPmlzU3RhcnQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+WG1sQ3Vyc29yLlRva2VuVHlwZTwvQT4KLTxERD5UcnVlIGlmIGlzIHN0YXJ0LWVsZW1lbnQgdG9rZW4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNpc1N0YXJ0ZG9jKCkiPjxCPmlzU3RhcnRkb2MoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPlRydWUgaWYgdGhlIGN1cnJlbnQgdG9rZW4gaXMgYSBTVEFSVERPQyB0b2tlbiB0eXBlLCBtZWFuaW5nIAotIGF0IHRoZSB2ZXJ5IHJvb3Qgb2YgdGhlIGRvY3VtZW50LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI2lzU3RhcnRkb2MoKSI+PEI+aXNTdGFydGRvYygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPgotPEREPlRydWUgaWYgaXMgc3RhcnQtZG9jdW1lbnQgdG9rZW4uCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNpc1N0YXJ0RWxlbWVudCgpIj48Qj5pc1N0YXJ0RWxlbWVudCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sIj5YTUxTdHJlYW1SZWFkZXI8L0E+Ci08REQ+UmV0dXJucyB0cnVlIGlmIHRoZSBjdXJzb3IgcG9pbnRzIHRvIGEgc3RhcnQgdGFnIChvdGhlcndpc2UgZmFsc2UpCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNpc1RleHQoKSI+PEI+aXNUZXh0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5UcnVlIGlmIHRoZSB0aGlzIHRva2VuIGlzIGEgVEVYVCB0b2tlbiB0eXBlLCBtZWFuaW5nIAotIGp1c3QgYmVmb3JlIG9yIGluc2lkZSB0ZXh0LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI2lzVGV4dCgpIj48Qj5pc1RleHQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+WG1sQ3Vyc29yLlRva2VuVHlwZTwvQT4KLTxERD5UcnVlIGlmIGlzIHRleHQgdG9rZW4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjaXNVUlR5cGUoKSI+PEI+aXNVUlR5cGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+VHJ1ZSBmb3IgYW55VHlwZSBhbmQgYW55U2ltcGxlVHlwZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCNpc1ZhbGlkKCkiPjxCPmlzVmFsaWQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+Ci08REQ+UmV0dXJucyB0cnVlIGlmIGFsbCBvZiB0aGUgaW5kaXZpZHVhbCBjb21wb25lbnRzCi0gb2YgdGhlIGR1cmF0aW9uIGFyZSBub25uZWdhdGl2ZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCNpc1ZhbGlkKCkiPjxCPmlzVmFsaWQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCI+R0R1cmF0aW9uQnVpbGRlcjwvQT4KLTxERD5SZXR1cm5zIHRydWUgaWYgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIGNvbXBvbmVudHMKLSBvZiB0aGUgZHVyYXRpb24gYXJlIG5vbm5lZ2F0aXZlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwjaXNWYWxpZCgpIj48Qj5pc1ZhbGlkKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCI+R0R1cmF0aW9uPC9BPgotPEREPlJldHVybnMgdHJ1ZSBpZiBhbGwgb2YgdGhlIGluZGl2aWR1YWwgY29tcG9uZW50cwotIG9mIHRoZSBkdXJhdGlvbiBhcmUgbm9ubmVnYXRpdmUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNpc1ZhbGlkKCkiPjxCPmlzVmFsaWQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPgotPEREPlRydWUgaWYgdGhpcyBHRGF0ZSBjb3JyZXNwb25kcyB0byBhIHZhbGlkIGdyZWdvcmlhbiBkYXRlIHZhbHVlCi0gaW4gWE1MIHNjaGVtYS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2lzVmFsaWQoKSI+PEI+aXNWYWxpZCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwiPkdEYXRlQnVpbGRlcjwvQT4KLTxERD5UcnVlIGlmIGFsbCBkYXRlIGZpZWxkcyBsaWUgd2l0aGluIHRoZWlyIGxlZ2FsIHJhbmdlcy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwjaXNWYWxpZCgpIj48Qj5pc1ZhbGlkKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4KLTxERD5UcnVlIGlmIHRoaXMgR0RhdGUgY29ycmVzcG9uZHMgdG8gYSB2YWxpZCBncmVnb3JpYW4gZGF0ZSB2YWx1ZQotIGluIFhNTCBzY2hlbWEuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjaXNWYWxpZFN1YnN0aXR1dGlvbihqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PEI+aXNWYWxpZFN1YnN0aXR1dGlvbihRTmFtZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPkZvciBkb2N1bWVudCB0eXBlcywgdHJ1ZSBpZiB0aGUgZ2l2ZW4gbmFtZSBjYW4gYmUgc3Vic3RpdHV0ZWQgZm9yIHRoZQotIGRvY3VtZW50IGVsZW1lbnQgbmFtZS4KLTxEVD48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2lzV2hpdGVTcGFjZSgpIj48Qj5pc1doaXRlU3BhY2UoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCI+WE1MU3RyZWFtUmVhZGVyPC9BPgotPEREPlJldHVybnMgdHJ1ZSBpZiB0aGUgY3Vyc29yIHBvaW50cyB0byBhIGNoYXJhY3RlciBkYXRhIGV2ZW50Ci0gdGhhdCBjb25zaXN0cyBvZiBhbGwgd2hpdGVzcGFjZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sI2l0ZXJhdG9yKCkiPjxCPml0ZXJhdG9yKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwiPlhtbFNpbXBsZUxpc3Q8L0E+Ci08REQ+UmV0dXJucyBhbiBpdGVyYXRvciBvdmVyIHRoZSBlbGVtZW50cyBpbiB0aGlzIGxpc3QgaW4gcHJvcGVyIHNlcXVlbmNlLgotPC9ETD4KLTxIUj4KLTxBIE5BTUU9Il9KXyI+PCEtLSAtLT48L0E+PEgyPgotPEI+SjwvQj48L0gyPgotPERMPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNKQVZBX0JJR19ERUNJTUFMIj48Qj5KQVZBX0JJR19ERUNJTUFMPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwiPlNjaGVtYVByb3BlcnR5PC9BPgotPEREPkEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiPjxDT0RFPkJpZ0RlY2ltYWw8L0NPREU+PC9BPi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjSkFWQV9CSUdfSU5URUdFUiI+PEI+SkFWQV9CSUdfSU5URUdFUjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sIj5TY2hlbWFQcm9wZXJ0eTwvQT4KLTxERD5BIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIj48Q09ERT5CaWdJbnRlZ2VyPC9DT0RFPjwvQT4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfQk9PTEVBTiI+PEI+SkFWQV9CT09MRUFOPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwiPlNjaGVtYVByb3BlcnR5PC9BPgotPEREPkEgSmF2YSBib29sZWFuLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNKQVZBX0JZVEUiPjxCPkpBVkFfQllURTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sIj5TY2hlbWFQcm9wZXJ0eTwvQT4KLTxERD5BIEphdmEgYnl0ZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjSkFWQV9CWVRFX0FSUkFZIj48Qj5KQVZBX0JZVEVfQVJSQVk8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCI+U2NoZW1hUHJvcGVydHk8L0E+Ci08REQ+QSBieXRlW10uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfQ0FMRU5EQVIiPjxCPkpBVkFfQ0FMRU5EQVI8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCI+U2NoZW1hUHJvcGVydHk8L0E+Ci08REQ+QSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfREFURSI+PEI+SkFWQV9EQVRFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwiPlNjaGVtYVByb3BlcnR5PC9BPgotPEREPkEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPjxDT0RFPkRhdGU8L0NPREU+PC9BPi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjSkFWQV9ET1VCTEUiPjxCPkpBVkFfRE9VQkxFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwiPlNjaGVtYVByb3BlcnR5PC9BPgotPEREPkEgSmF2YSBkb3VibGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfRU5VTSI+PEI+SkFWQV9FTlVNPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwiPlNjaGVtYVByb3BlcnR5PC9BPgotPEREPkEgZ2VuZXJhdGVkIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sIj48Q09ERT5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlPC9DT0RFPjwvQT4gc3ViY2xhc3MuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfRklSU1RfUFJJTUlUSVZFIj48Qj5KQVZBX0ZJUlNUX1BSSU1JVElWRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sIj5TY2hlbWFQcm9wZXJ0eTwvQT4KLTxERD5KYXZhIHByaW1pdGl2ZSB0eXBlIGNvZGVzIChmb3Igbm9uLW51bGxhYmxlIEphdmEgdHlwZXMpIGFyZSBiZXR3ZWVuIEpBVkFfRklSU1RfUFJJTUlUSVZFIGFuZCBKQVZBX0xBU1RfUFJJTUlUSVZFLCBpbmNsdXNpdmUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfRkxPQVQiPjxCPkpBVkFfRkxPQVQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCI+U2NoZW1hUHJvcGVydHk8L0E+Ci08REQ+QSBKYXZhIGZsb2F0LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNKQVZBX0dEQVRFIj48Qj5KQVZBX0dEQVRFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwiPlNjaGVtYVByb3BlcnR5PC9BPgotPEREPkEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZTwvQ09ERT48L0E+LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNKQVZBX0dEVVJBVElPTiI+PEI+SkFWQV9HRFVSQVRJT048L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCI+U2NoZW1hUHJvcGVydHk8L0E+Ci08REQ+QSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj48Q09ERT5HRHVyYXRpb248L0NPREU+PC9BPi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjSkFWQV9JTlQiPjxCPkpBVkFfSU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwiPlNjaGVtYVByb3BlcnR5PC9BPgotPEREPkEgSmF2YSBpbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfTEFTVF9QUklNSVRJVkUiPjxCPkpBVkFfTEFTVF9QUklNSVRJVkU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCI+U2NoZW1hUHJvcGVydHk8L0E+Ci08REQ+SmF2YSBwcmltaXRpdmUgdHlwZSBjb2RlcyAoZm9yIG5vbi1udWxsYWJsZSBKYXZhIHR5cGVzKSBhcmUgYmV0d2VlbiBKQVZBX0ZJUlNUX1BSSU1JVElWRSBhbmQgSkFWQV9MQVNUX1BSSU1JVElWRSwgaW5jbHVzaXZlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNKQVZBX0xJU1QiPjxCPkpBVkFfTElTVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sIj5TY2hlbWFQcm9wZXJ0eTwvQT4KLTxERD5BIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj48Q09ERT5MaXN0PC9DT0RFPjwvQT4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfTE9ORyI+PEI+SkFWQV9MT05HPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwiPlNjaGVtYVByb3BlcnR5PC9BPgotPEREPkEgSmF2YSBsb25nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNKQVZBX09CSkVDVCI+PEI+SkFWQV9PQkpFQ1Q8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCI+U2NoZW1hUHJvcGVydHk8L0E+Ci08REQ+QSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj48Q09ERT5PYmplY3Q8L0NPREU+PC9BPiwgdXNlZCBmb3Igc29tZSBzaW1wbGUgdHlwZSB1bmlvbnMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfUU5BTUUiPjxCPkpBVkFfUU5BTUU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCI+U2NoZW1hUHJvcGVydHk8L0E+Ci08REQ+QSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+PENPREU+UU5hbWU8L0NPREU+PC9BPi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjSkFWQV9TSE9SVCI+PEI+SkFWQV9TSE9SVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sIj5TY2hlbWFQcm9wZXJ0eTwvQT4KLTxERD5BIEphdmEgc2hvcnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfU1RSSU5HIj48Qj5KQVZBX1NUUklORzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sIj5TY2hlbWFQcm9wZXJ0eTwvQT4KLTxERD5BIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPjxDT0RFPlN0cmluZzwvQ09ERT48L0E+LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNqYXZhQmFzZWRPblR5cGUoKSI+PEI+amF2YUJhc2VkT25UeXBlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCI+U2NoZW1hUHJvcGVydHk8L0E+Ci08REQ+VGhlIHNjaGVtYSB0eXBlIHJldHVybmVkIGZyb20gdGhlIEphdmEgZ2V0dGVyIGZvciB0aGlzIHByb3BlcnR5LgotPERUPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxCPmphdmF4LnhtbC5zdHJlYW08L0I+PC9BPiAtIHBhY2thZ2UgamF2YXgueG1sLnN0cmVhbTxERD4mbmJzcDs8L0RMPgotPEhSPgotPEEgTkFNRT0iX0xfIj48IS0tIC0tPjwvQT48SDI+Ci08Qj5MPC9CPjwvSDI+Ci08REw+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjTEFTVF9CQVNJQ19GQUNFVCI+PEI+TEFTVF9CQVNJQ19GQUNFVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjTEFTVF9GQUNFVCI+PEI+TEFTVF9GQUNFVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+VGhlIGxhc3Qgb3JkaW5hcnkgZmFjZXQgY29kZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0xBU1RfUFJPUEVSVFkiPjxCPkxBU1RfUFJPUEVSVFk8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPlRoZSBsYXN0IHByb3BlcnR5IGNvZGUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCNsYXN0SW5kZXhPZihqYXZhLmxhbmcuT2JqZWN0KSI+PEI+bGFzdEluZGV4T2YoT2JqZWN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCI+WG1sU2ltcGxlTGlzdDwvQT4KLTxERD5SZXR1cm5zIGluZGV4IG9mIHRoZSBsYXN0IG9jY3VyYW5jZSBvZiBhbiBvYmplY3QgZXF1YWwgdG8gby4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGUuaHRtbCNsYXN0SW50KCkiPjxCPmxhc3RJbnQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGUuaHRtbCI+U3RyaW5nRW51bUFic3RyYWN0QmFzZS5UYWJsZTwvQT4KLTxERD5SZXR1cm5zIHRoZSBsYXN0IHZhbGlkIGludCBjb2RlICh0aGUgZmlyc3QgaXMgMTsgemVybyBpcyBub3QgdXNlZCkuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI0xBWCI+PEI+TEFYPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwiPlNjaGVtYVBhcnRpY2xlPC9BPgotPEREPjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jV2lsZGNhcmRfZGV0YWlscyI+TGF4IHdpbGRjYXJkPC9hPiBwcm9jZXNzaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCNMQVgiPjxCPkxBWDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVNb2RlbC5odG1sIj5TY2hlbWFBdHRyaWJ1dGVNb2RlbDwvQT4KLTxERD5MYXggd2lsZGNhcmQgcHJvY2Vzc2luZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0xFU1NfVEhBTiI+PEI+TEVTU19USEFOPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+Ci08REQ+TEVTU19USEFOIGlzIC0xLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0xJU1QiPjxCPkxJU1Q8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPlNpbXBsZSBsaXN0IHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwjbGlzdEl0ZXJhdG9yKCkiPjxCPmxpc3RJdGVyYXRvcigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sIj5YbWxTaW1wbGVMaXN0PC9BPgotPEREPlJldHVybnMgYSBsaXN0IGl0ZXJhdG9yIG9mIHRoZSBlbGVtZW50cyBpbiB0aGlzIGxpc3QgaW4gcHJvcGVyIHNlcXVlbmNlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sI2xpc3RJdGVyYXRvcihpbnQpIj48Qj5saXN0SXRlcmF0b3IoaW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCI+WG1sU2ltcGxlTGlzdDwvQT4KLTxERD5SZXR1cm5zIGEgbGlzdCBpdGVyYXRvciBvZiB0aGUgZWxlbWVudHMgaW4gdGhpcyBsaXN0IGluIHByb3BlciBzZXF1ZW5jZSwgc3RhcnRpbmcgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbiBpbiB0aGlzIGxpc3QuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sI2xpc3RWYWx1ZSgpIj48Qj5saXN0VmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj5YbWxOTVRPS0VOUzwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwjZ2V0TGlzdFZhbHVlKCkiPjxDT0RFPlhtbE5NVE9LRU5TLmdldExpc3RWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCNsaXN0VmFsdWUoKSI+PEI+bGlzdFZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPlhtbElEUkVGUzwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sI2dldExpc3RWYWx1ZSgpIj48Q09ERT5YbWxJRFJFRlMuZ2V0TGlzdFZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwjbGlzdFZhbHVlKCkiPjxCPmxpc3RWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPlhtbEVOVElUSUVTPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIGJ5IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCNnZXRMaXN0VmFsdWUoKSI+PENPREU+WG1sRU5USVRJRVMuZ2V0TGlzdFZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjbGlzdFZhbHVlKCkiPjxCPmxpc3RWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldExpc3RWYWx1ZSgpIj48Q09ERT5TaW1wbGVWYWx1ZS5nZXRMaXN0VmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjbGlzdFZhbHVlKCkiPjxCPmxpc3RWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNMT0FEX0FERElUSU9OQUxfTkFNRVNQQUNFUyI+PEI+TE9BRF9BRERJVElPTkFMX05BTUVTUEFDRVM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjTE9BRF9MSU5FX05VTUJFUlMiPjxCPkxPQURfTElORV9OVU1CRVJTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI0xPQURfTUVTU0FHRV9ESUdFU1QiPjxCPkxPQURfTUVTU0FHRV9ESUdFU1Q8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjTE9BRF9SRVBMQUNFX0RPQ1VNRU5UX0VMRU1FTlQiPjxCPkxPQURfUkVQTEFDRV9ET0NVTUVOVF9FTEVNRU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI0xPQURfU1RSSVBfQ09NTUVOVFMiPjxCPkxPQURfU1RSSVBfQ09NTUVOVFM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjTE9BRF9TVFJJUF9QUk9DSU5TVFMiPjxCPkxPQURfU1RSSVBfUFJPQ0lOU1RTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI0xPQURfU1RSSVBfV0hJVEVTUEFDRSI+PEI+TE9BRF9TVFJJUF9XSElURVNQQUNFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI0xPQURfU1VCU1RJVFVURV9OQU1FU1BBQ0VTIj48Qj5MT0FEX1NVQlNUSVRVVEVfTkFNRVNQQUNFUzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNMT0FEX1RSSU1fVEVYVF9CVUZGRVIiPjxCPkxPQURfVFJJTV9URVhUX0JVRkZFUjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwjbG9hZFhzZChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdFtdKSI+PEI+bG9hZFhzZChYbWxPYmplY3RbXSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuaHRtbCI+WG1sQmVhbnM8L0E+Ci08REQ+UmV0dXJucyB0aGUgU2NoZW1hVHlwZVN5c3RlbSB0aGF0IHJlc3VsdHMgZnJvbSBjb21waWxpbmcgdGhlIFhNTAotIHNjaGVtYSBkZWZpbml0aW9ucyBwYXNzZWQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sI2xvYWRYc2Qob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3RbXSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bG9hZFhzZChYbWxPYmplY3RbXSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuaHRtbCI+WG1sQmVhbnM8L0E+Ci08REQ+UmV0dXJucyB0aGUgU2NoZW1hVHlwZVN5c3RlbSB0aGF0IHJlc3VsdHMgZnJvbSBjb21waWxpbmcgdGhlIFhNTAotIHNjaGVtYSBkZWZpbml0aW9ucyBwYXNzZWQgaW4gPGVtPnNjaGVtYXM8L2VtPi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwjTE9DQUwiPjxCPkxPQ0FMPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+Ci08REQ+VGhlIFFOYW1lU2V0IGNvbnRhaW5pbmcgYWxsIFFOYW1lcyBpbiB0aGUgbG9jYWwgKG5vLSluYW1lc3BhY2UuCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCNsb2NhdGlvbiI+PEI+bG9jYXRpb248L0I+PC9BPiAtIAotVmFyaWFibGUgaW4gY2xhc3MgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9Mb2NhdGlvbi5odG1sIj48Qj5Mb2NhdGlvbjwvQj48L0E+IC0gaW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9Mb2NhdGlvbi5odG1sIj5Mb2NhdGlvbjwvQT4uPEREPlByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIHRoZSBsb2NhdGlvbiBvZiBhbiBldmVudC48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sI2xvbmdWYWx1ZSgpIj48Qj5sb25nVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj5YbWxVbnNpZ25lZEludDwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCNnZXRMb25nVmFsdWUoKSI+PENPREU+WG1sVW5zaWduZWRJbnQuZ2V0TG9uZ1ZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCNsb25nVmFsdWUoKSI+PEI+bG9uZ1ZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj5YbWxMb25nPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwjZ2V0TG9uZ1ZhbHVlKCkiPjxDT0RFPlhtbExvbmcuZ2V0TG9uZ1ZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjbG9uZ1ZhbHVlKCkiPjxCPmxvbmdWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldExvbmdWYWx1ZSgpIj48Q09ERT5TaW1wbGVWYWx1ZS5nZXRMb25nVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjbG9uZ1ZhbHVlKCkiPjxCPmxvbmdWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTwvREw+Ci08SFI+Ci08QSBOQU1FPSJfTV8iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPk08L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCNNQUxGT1JNRURfQ09OVEVOVF9NT0RFTCI+PEI+TUFMRk9STUVEX0NPTlRFTlRfTU9ERUw8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb248L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjbWFza051bGwob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bWFza051bGwoWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPgotPEREPklmIHBhc3NlZCBudWxsLCByZXR1cm5zIGFuIGVtcHR5IG9wdGlvbnMgb2JqZWN0LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI21hdGNoUGF0dGVybkZhY2V0KGphdmEubGFuZy5TdHJpbmcpIj48Qj5tYXRjaFBhdHRlcm5GYWNldChTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5UcnVlIGlmIHRoZSBnaXZlbiBzdHJpbmcgbWF0Y2hlcyB0aGUgcGF0dGVybiBmYWNldHMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCNNRVNTQUdFX0RJR0VTVCI+PEI+TUVTU0FHRV9ESUdFU1Q8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCI+WG1sRG9jdW1lbnRQcm9wZXJ0aWVzPC9BPgotPEREPlNIQSBtZXNzYWdlIGRpZ2VzdAotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI01JWEVEX0NPTlRFTlQiPjxCPk1JWEVEX0NPTlRFTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPk1peGVkIGNvbnRlbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNNT0RFTF9HUk9VUCI+PEI+TU9ERUxfR1JPVVA8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPlNjaGVtYUNvbXBvbmVudDwvQT4KLTxERD5BIG1vZGVsIGdyb3VwIGRlZmluaXRpb24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwjbW9kZWxHcm91cHMoKSI+PEI+bW9kZWxHcm91cHMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwiPlNjaGVtYVR5cGVTeXN0ZW08L0E+Ci08REQ+UmV0dXJucyB0aGUgbW9kZWwgZ3JvdXBzIGRlZmluZWQgaW4gdGhpcyBsb2FkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI21vbml0b3IoKSI+PEI+bW9uaXRvcigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPgotPEREPlJldHVybnMgdGhlIHN5bmNocm9uaXphdGlvbiBvYmplY3QgZm9yIHRoZSBkb2N1bWVudC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI21vbml0b3IoKSI+PEI+bW9uaXRvcigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI21vdmVDaGFycyhpbnQsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yKSI+PEI+bW92ZUNoYXJzKGludCwgWG1sQ3Vyc29yKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPk1vdmVzIGNoYXJhY3RlcnMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhpcyBjdXJzb3IgdG8gdGhlIHBvc2l0aW9uIGltbWVkaWF0ZWx5IAotIGFmdGVyIHRoZSBzcGVjaWZpZWQgY3Vyc29yLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjbW92ZVhtbChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcikiPjxCPm1vdmVYbWwoWG1sQ3Vyc29yKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPk1vdmVzIHRoZSBYTUwgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhpcyBjdXJzb3IgdG8gdGhlIGxvY2F0aW9uCi0gc3BlY2lmaWVkIGJ5IHRoZSA8ZW0+dG9IZXJlPC9lbT4gY3Vyc29yLCBzaGlmdGluZyBYTUwgYXQgdGhhdCBsb2NhdGlvbiAKLSB0byB0aGUgcmlnaHQgdG8gbWFrZSByb29tLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjbW92ZVhtbENvbnRlbnRzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yKSI+PEI+bW92ZVhtbENvbnRlbnRzKFhtbEN1cnNvcik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5Nb3ZlcyB0aGUgY29udGVudHMgb2YgdGhlIGNvbnRhaW5lciAoU1RBUlRET0MgT1IgU1RBUlQpIGltbWVkaWF0ZWx5IGFmdGVyCi0gdGhpcyBjdXJzb3IgdG8gdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBieSB0aGUgPGVtPnRvSGVyZTwvZW0+IGN1cnNvci4KLTwvREw+Ci08SFI+Ci08QSBOQU1FPSJfTl8iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPk48L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sI05BTUVTUEFDRSI+PEI+TkFNRVNQQUNFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sIj5YTUxTdHJlYW1Db25zdGFudHM8L0E+Ci08REQ+SW5kaWNhdGVzIGFuIGV2ZW50IGlzIGEgbmFtZXBzYWNlCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjTkFNRVNQQUNFIj48Qj5OQU1FU1BBQ0U8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwiPlhtbEN1cnNvci5Ub2tlblR5cGU8L0E+Ci08REQ+VGhlIHNpbmdsZXRvbiBuYW1lc3BhY2UgZGVjbGFyYXRpb24gdG9rZW4gdHlwZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjbmFtZXNwYWNlRm9yUHJlZml4KGphdmEubGFuZy5TdHJpbmcpIj48Qj5uYW1lc3BhY2VGb3JQcmVmaXgoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPlJldHVybnMgdGhlIG5hbWVzcGFjZSBVUkkgaW5kaWNhdGVkIGJ5IHRoZSBnaXZlbiBwcmVmaXguCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCNuZXN0ZWQiPjxCPm5lc3RlZDwvQj48L0E+IC0gCi1WYXJpYWJsZSBpbiBjbGFzcyBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCNORVNURURfRVhDRVBUSU9OIj48Qj5ORVNURURfRVhDRVBUSU9OPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sIj5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNORVZFUiI+PEI+TkVWRVI8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCI+U2NoZW1hUHJvcGVydHk8L0E+Ci08REQ+QXBwbGllcyB0byBubyBlbGVtZW50cyBmb3IgdGhpcyBwcm9wZXJ0eS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3Q3Vyc29yKCkiPjxCPm5ld0N1cnNvcigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPgotPEREPlJldHVybnMgYSBuZXcgWE1MIGN1cnNvci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI25ld0N1cnNvcigpIj48Qj5uZXdDdXJzb3IoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUoKSI+PEI+bmV3RG9tTm9kZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPgotPEREPlJldHVybnMgYSBXM0MgRE9NIE5vZGUgY29udGFpbmluZyB0aGUgWE1MCi0gcmVwcmVzZW50ZWQgYnkgdGhpcyBzb3VyY2UuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNuZXdEb21Ob2RlKCkiPjxCPm5ld0RvbU5vZGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3RG9tTm9kZShYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT4KLTxERD5KdXN0IGxpa2UgbmV3RG9tTm9kZSgpIGJ1dCB3aXRoIG9wdGlvbnMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNuZXdEb21Ob2RlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld0RvbU5vZGUoWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbSgpIj48Qj5uZXdJbnB1dFN0cmVhbSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPgotPEREPlJldHVybnMgYSBuZXcgc3RyZWFtIGNvbnRhaW5pbmcgc3RhbmRhcmQgWE1MIHRleHQsIGVuY29kZWQKLSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGVuY29kaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjbmV3SW5wdXRTdHJlYW0oKSI+PEI+bmV3SW5wdXRTdHJlYW0oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0lucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld0lucHV0U3RyZWFtKFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPgotPEREPkp1c3QgbGlrZSBuZXdJbnB1dFN0cmVhbShTdHJpbmcgZW5jb2RpbmcpIGJ1dCB3aXRoIG9wdGlvbnMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNuZXdJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdJbnB1dFN0cmVhbShYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj48Qj5uZXdJbnN0YW5jZSgpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZFNob3J0LkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRTaG9ydDwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPjxCPm5ld0luc3RhbmNlKCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRMb25nLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj48Q09ERT5YbWxVbnNpZ25lZExvbmc8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPjxCPm5ld0luc3RhbmNlKCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZEludC5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEludDwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPjxCPm5ld0luc3RhbmNlKCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRCeXRlLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEJ5dGU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPjxCPm5ld0luc3RhbmNlKCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sIj5YbWxUb2tlbi5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Q09ERT5YbWxUb2tlbjwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj48Qj5uZXdJbnN0YW5jZSgpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuRmFjdG9yeS5odG1sIj5YbWxUaW1lLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+PENPREU+WG1sVGltZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPjxCPm5ld0luc3RhbmNlKCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sU3RyaW5nLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj48Q09ERT5YbWxTdHJpbmc8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPjxCPm5ld0luc3RhbmNlKCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuRmFjdG9yeS5odG1sIj5YbWxTaG9ydC5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj48Q09ERT5YbWxTaG9ydDwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2UoKSI+PEI+bmV3SW5zdGFuY2UoKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwiPlhtbFFOYW1lLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPjxDT0RFPlhtbFFOYW1lPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2UoKSI+PEI+bmV3SW5zdGFuY2UoKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbFBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPjxCPm5ld0luc3RhbmNlKCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhIG5ldywgY29tcGxldGVseSBlbXB0eSBpbnN0YW5jZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj48Qj5uZXdJbnN0YW5jZSgpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLkZhY3RvcnkuaHRtbCI+WG1sTk9UQVRJT04uRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+PENPREU+WG1sTk9UQVRJT048L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2UoKSI+PEI+bmV3SW5zdGFuY2UoKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPjxDT0RFPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj48Qj5uZXdJbnN0YW5jZSgpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2UoKSI+PEI+bmV3SW5zdGFuY2UoKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2UoKSI+PEI+bmV3SW5zdGFuY2UoKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwiPlhtbE5NVE9LRU5TLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU5TPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPjxCPm5ld0luc3RhbmNlKCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwiPlhtbE5NVE9LRU4uRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Q09ERT5YbWxOTVRPS0VOPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2UoKSI+PEI+bmV3SW5zdGFuY2UoKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPjxCPm5ld0luc3RhbmNlKCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCI+WG1sTkNOYW1lLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj48Q09ERT5YbWxOQ05hbWU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2UoKSI+PEI+bmV3SW5zdGFuY2UoKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbCI+WG1sTmFtZS5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPjxDT0RFPlhtbE5hbWU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2UoKSI+PEI+bmV3SW5zdGFuY2UoKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCI+WG1sTG9uZy5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPjxDT0RFPlhtbExvbmc8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPjxCPm5ld0luc3RhbmNlKCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sIj5YbWxMYW5ndWFnZS5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj48Q09ERT5YbWxMYW5ndWFnZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj48Qj5uZXdJbnN0YW5jZSgpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+PENPREU+WG1sSW50ZWdlcjwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPjxCPm5ld0luc3RhbmNlKCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50LkZhY3RvcnkuaHRtbCI+WG1sSW50LkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj48Q09ERT5YbWxJbnQ8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj48Qj5uZXdJbnN0YW5jZSgpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwiPlhtbElEUkVGUy5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+PENPREU+WG1sSURSRUZTPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj48Qj5uZXdJbnN0YW5jZSgpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLkZhY3RvcnkuaHRtbCI+WG1sSURSRUYuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+PENPREU+WG1sSURSRUY8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPjxCPm5ld0luc3RhbmNlKCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuRmFjdG9yeS5odG1sIj5YbWxJRC5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj48Q09ERT5YbWxJRDwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPjxCPm5ld0luc3RhbmNlKCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5LkZhY3RvcnkuaHRtbCI+WG1sSGV4QmluYXJ5LkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj48Q09ERT5YbWxIZXhCaW5hcnk8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2UoKSI+PEI+bmV3SW5zdGFuY2UoKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCI+WG1sR1llYXJNb250aC5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPjxDT0RFPlhtbEdZZWFyTW9udGg8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPjxCPm5ld0luc3RhbmNlKCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuRmFjdG9yeS5odG1sIj5YbWxHWWVhci5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj48Q09ERT5YbWxHWWVhcjwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPjxCPm5ld0luc3RhbmNlKCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCI+WG1sR01vbnRoRGF5LkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj48Q09ERT5YbWxHTW9udGhEYXk8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj48Qj5uZXdJbnN0YW5jZSgpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5GYWN0b3J5Lmh0bWwiPlhtbEdNb250aC5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+PENPREU+WG1sR01vbnRoPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPjxCPm5ld0luc3RhbmNlKCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5GYWN0b3J5Lmh0bWwiPlhtbEdEYXkuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj48Q09ERT5YbWxHRGF5PC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj48Qj5uZXdJbnN0YW5jZSgpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LkZhY3RvcnkuaHRtbCI+WG1sRmxvYXQuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+PENPREU+WG1sRmxvYXQ8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj48Qj5uZXdJbnN0YW5jZSgpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5GYWN0b3J5Lmh0bWwiPlhtbEVOVElUWS5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+PENPREU+WG1sRU5USVRZPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj48Qj5uZXdJbnN0YW5jZSgpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLkZhY3RvcnkuaHRtbCI+WG1sRU5USVRJRVMuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+PENPREU+WG1sRU5USVRJRVM8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPjxCPm5ld0luc3RhbmNlKCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uRmFjdG9yeS5odG1sIj5YbWxEdXJhdGlvbi5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj48Q09ERT5YbWxEdXJhdGlvbjwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPjxCPm5ld0luc3RhbmNlKCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLkZhY3RvcnkuaHRtbCI+WG1sRG91YmxlLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj48Q09ERT5YbWxEb3VibGU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2UoKSI+PEI+bmV3SW5zdGFuY2UoKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCI+WG1sRGVjaW1hbC5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPjxDT0RFPlhtbERlY2ltYWw8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPjxCPm5ld0luc3RhbmNlKCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sIj5YbWxEYXRlVGltZS5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj48Q09ERT5YbWxEYXRlVGltZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj48Qj5uZXdJbnN0YW5jZSgpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sIj5YbWxEYXRlLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+PENPREU+WG1sRGF0ZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj48Qj5uZXdJbnN0YW5jZSgpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuRmFjdG9yeS5odG1sIj5YbWxCeXRlLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+PENPREU+WG1sQnl0ZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj48Qj5uZXdJbnN0YW5jZSgpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sIj5YbWxCb29sZWFuLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+PENPREU+WG1sQm9vbGVhbjwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPjxCPm5ld0luc3RhbmNlKCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5LkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj48Q09ERT5YbWxCYXNlNjRCaW5hcnk8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj48Qj5uZXdJbnN0YW5jZSgpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5GYWN0b3J5Lmh0bWwiPlhtbEFueVVSSS5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+PENPREU+WG1sQW55VVJJPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPjxCPm5ld0luc3RhbmNlKCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld0luc3RhbmNlKFNjaGVtYVR5cGVMb2FkZXIsIFNjaGVtYVR5cGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLmh0bWwiPlhtbEZhY3RvcnlIb29rPC9BPgotPEREPkhvb2tzIEZhY3RvcnkubmV3SW5zdGFuY2UgY2FsbHMKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld0luc3RhbmNlKFNjaGVtYVR5cGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+U2NoZW1hVHlwZUxvYWRlcjwvQT4KLTxERD5DcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBnaXZlbiB0eXBlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3SW5zdGFuY2UoWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZFNob3J0PC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3SW5zdGFuY2UoWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRMb25nLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj48Q09ERT5YbWxVbnNpZ25lZExvbmc8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld0luc3RhbmNlKFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50LkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRJbnQuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRJbnQ8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdJbnN0YW5jZShYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkQnl0ZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3SW5zdGFuY2UoWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sIj5YbWxUb2tlbi5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Q09ERT5YbWxUb2tlbjwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdJbnN0YW5jZShYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLkZhY3RvcnkuaHRtbCI+WG1sVGltZS5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPjxDT0RFPlhtbFRpbWU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdJbnN0YW5jZShYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sIj5YbWxTdHJpbmcuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPjxDT0RFPlhtbFN0cmluZzwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3SW5zdGFuY2UoWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuRmFjdG9yeS5odG1sIj5YbWxTaG9ydC5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj48Q09ERT5YbWxTaG9ydDwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3SW5zdGFuY2UoWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuRmFjdG9yeS5odG1sIj5YbWxRTmFtZS5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj48Q09ERT5YbWxRTmFtZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld0luc3RhbmNlKFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3SW5zdGFuY2UoWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhIG5ldywgY29tcGxldGVseSBlbXB0eSBpbnN0YW5jZSwgc3BlY2lmeWluZyBvcHRpb25zCi0gZm9yIHRoZSByb290IGVsZW1lbnQncyBkb2N1bWVudCB0eXBlIGFuZC9vciB3aGV0aGVyIHRvIHZhbGlkYXRlCi0gdmFsdWUgZmFjZXRzIGFzIHRoZXkgYXJlIHNldC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdJbnN0YW5jZShYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwiPlhtbE5PVEFUSU9OLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPjxDT0RFPlhtbE5PVEFUSU9OPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld0luc3RhbmNlKFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+PENPREU+WG1sTm9ybWFsaXplZFN0cmluZzwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld0luc3RhbmNlKFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3SW5zdGFuY2UoWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld0luc3RhbmNlKFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLkZhY3RvcnkuaHRtbCI+WG1sTk1UT0tFTlMuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+PENPREU+WG1sTk1UT0tFTlM8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3SW5zdGFuY2UoWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwiPlhtbE5NVE9LRU4uRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Q09ERT5YbWxOTVRPS0VOPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3SW5zdGFuY2UoWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdJbnN0YW5jZShYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuRmFjdG9yeS5odG1sIj5YbWxOQ05hbWUuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPjxDT0RFPlhtbE5DTmFtZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdJbnN0YW5jZShYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbCI+WG1sTmFtZS5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPjxDT0RFPlhtbE5hbWU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3SW5zdGFuY2UoWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwiPlhtbExvbmcuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj48Q09ERT5YbWxMb25nPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdJbnN0YW5jZShYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5GYWN0b3J5Lmh0bWwiPlhtbExhbmd1YWdlLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPjxDT0RFPlhtbExhbmd1YWdlPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld0luc3RhbmNlKFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+PENPREU+WG1sSW50ZWdlcjwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld0luc3RhbmNlKFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwiPlhtbEludC5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+PENPREU+WG1sSW50PC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3SW5zdGFuY2UoWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLkZhY3RvcnkuaHRtbCI+WG1sSURSRUZTLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj48Q09ERT5YbWxJRFJFRlM8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld0luc3RhbmNlKFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLkZhY3RvcnkuaHRtbCI+WG1sSURSRUYuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+PENPREU+WG1sSURSRUY8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld0luc3RhbmNlKFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElELkZhY3RvcnkuaHRtbCI+WG1sSUQuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+PENPREU+WG1sSUQ8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5LkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdJbnN0YW5jZShYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuRmFjdG9yeS5odG1sIj5YbWxIZXhCaW5hcnkuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEhleEJpbmFyeTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdJbnN0YW5jZShYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCI+WG1sR1llYXJNb250aC5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPjxDT0RFPlhtbEdZZWFyTW9udGg8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld0luc3RhbmNlKFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbCI+WG1sR1llYXIuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+PENPREU+WG1sR1llYXI8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdJbnN0YW5jZShYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuRmFjdG9yeS5odG1sIj5YbWxHTW9udGhEYXkuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPjxDT0RFPlhtbEdNb250aERheTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld0luc3RhbmNlKFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5GYWN0b3J5Lmh0bWwiPlhtbEdNb250aC5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+PENPREU+WG1sR01vbnRoPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld0luc3RhbmNlKFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sIj5YbWxHRGF5LkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+PENPREU+WG1sR0RheTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3SW5zdGFuY2UoWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuRmFjdG9yeS5odG1sIj5YbWxGbG9hdC5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj48Q09ERT5YbWxGbG9hdDwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld0luc3RhbmNlKFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5GYWN0b3J5Lmh0bWwiPlhtbEVOVElUWS5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+PENPREU+WG1sRU5USVRZPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdJbnN0YW5jZShYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwiPlhtbEVOVElUSUVTLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPjxDT0RFPlhtbEVOVElUSUVTPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdJbnN0YW5jZShYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5GYWN0b3J5Lmh0bWwiPlhtbER1cmF0aW9uLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPjxDT0RFPlhtbER1cmF0aW9uPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3SW5zdGFuY2UoWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLkZhY3RvcnkuaHRtbCI+WG1sRG91YmxlLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj48Q09ERT5YbWxEb3VibGU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3SW5zdGFuY2UoWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwiPlhtbERlY2ltYWwuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj48Q09ERT5YbWxEZWNpbWFsPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdJbnN0YW5jZShYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwiPlhtbERhdGVUaW1lLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPjxDT0RFPlhtbERhdGVUaW1lPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld0luc3RhbmNlKFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sIj5YbWxEYXRlLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+PENPREU+WG1sRGF0ZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdJbnN0YW5jZShYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCI+WG1sQnl0ZS5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPjxDT0RFPlhtbEJ5dGU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3SW5zdGFuY2UoWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5GYWN0b3J5Lmh0bWwiPlhtbEJvb2xlYW4uRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj48Q09ERT5YbWxCb29sZWFuPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3SW5zdGFuY2UoWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5LkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj48Q09ERT5YbWxCYXNlNjRCaW5hcnk8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdJbnN0YW5jZShYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sIj5YbWxBbnlVUkkuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPjxDT0RFPlhtbEFueVVSSTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdJbnN0YW5jZShYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+WG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPjxDT0RFPlhtbEFueVNpbXBsZVR5cGU8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIoKSI+PEI+bmV3UmVhZGVyKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+Ci08REQ+UmV0dXJucyBhIG5ldyBjaGFyYWN0ZXIgcmVhZGVyIGNvbnRhaW5pbmcgWE1MIHRleHQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNuZXdSZWFkZXIoKSI+PEI+bmV3UmVhZGVyKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3UmVhZGVyKFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPgotPEREPkp1c3QgbGlrZSBuZXdSZWFkZXIoKSBidXQgd2l0aCBvcHRpb25zLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjbmV3UmVhZGVyKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld1JlYWRlcihYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5GYWN0b3J5Lmh0bWwiPlhtbFVuc2lnbmVkTG9uZy5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5GYWN0b3J5Lmh0bWwiPlhtbFVuc2lnbmVkSW50LkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sIj5YbWxUb2tlbi5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuRmFjdG9yeS5odG1sIj5YbWxUaW1lLkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sIj5YbWxTdHJpbmcuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuRmFjdG9yeS5odG1sIj5YbWxTaG9ydC5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwiPlhtbFFOYW1lLkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPlhtbE9iamVjdC5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSBuZXcgdmFsaWRhdGluZyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPjxDT0RFPlhNTElucHV0U3RyZWFtPC9DT0RFPjwvQT4gdGhhdCB0aHJvd3MgZXhjZXB0aW9ucyB3aGVuIHRoZSBpbnB1dCBpcyBub3QgdmFsaWQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLkZhY3RvcnkuaHRtbCI+WG1sTk9UQVRJT04uRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuRmFjdG9yeS5odG1sIj5YbWxOTVRPS0VOUy5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uRmFjdG9yeS5odG1sIj5YbWxOTVRPS0VOLkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5GYWN0b3J5Lmh0bWwiPlhtbE5DTmFtZS5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuRmFjdG9yeS5odG1sIj5YbWxOYW1lLkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwiPlhtbExvbmcuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sIj5YbWxMYW5ndWFnZS5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuRmFjdG9yeS5odG1sIj5YbWxJbnQuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwiPlhtbElEUkVGUy5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5GYWN0b3J5Lmh0bWwiPlhtbElEUkVGLkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElELkZhY3RvcnkuaHRtbCI+WG1sSUQuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwiPlhtbEhleEJpbmFyeS5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguRmFjdG9yeS5odG1sIj5YbWxHWWVhck1vbnRoLkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbCI+WG1sR1llYXIuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwiPlhtbEdNb250aERheS5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLkZhY3RvcnkuaHRtbCI+WG1sR01vbnRoLkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5LkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5GYWN0b3J5Lmh0bWwiPlhtbEdEYXkuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuRmFjdG9yeS5odG1sIj5YbWxGbG9hdC5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLkZhY3RvcnkuaHRtbCI+WG1sRU5USVRZLkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLkZhY3RvcnkuaHRtbCI+WG1sRU5USVRJRVMuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uRmFjdG9yeS5odG1sIj5YbWxEdXJhdGlvbi5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLkZhY3RvcnkuaHRtbCI+WG1sRG91YmxlLkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwiPlhtbERlY2ltYWwuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sIj5YbWxEYXRlVGltZS5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sIj5YbWxEYXRlLkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5GYWN0b3J5Lmh0bWwiPlhtbEJ5dGUuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLkZhY3RvcnkuaHRtbCI+WG1sQm9vbGVhbi5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5LkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sIj5YbWxBbnlVUkkuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+WG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSwgU2NoZW1hVHlwZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sIj5TY2hlbWFUeXBlTG9hZGVyPC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtIHRoYXQgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgdGhlIFhNTCBpcyBub3QgdmFsaWQKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZFNob3J0LkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5GYWN0b3J5Lmh0bWwiPlhtbFVuc2lnbmVkTG9uZy5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50LkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRJbnQuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRCeXRlLkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sIj5YbWxUb2tlbi5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5GYWN0b3J5Lmh0bWwiPlhtbFRpbWUuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sU3RyaW5nLkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuRmFjdG9yeS5odG1sIj5YbWxTaG9ydC5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLkZhY3RvcnkuaHRtbCI+WG1sUU5hbWUuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPlhtbE9iamVjdC5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSBuZXcgdmFsaWRhdGluZyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPjxDT0RFPlhNTElucHV0U3RyZWFtPC9DT0RFPjwvQT4gdGhhdCB0aHJvd3MgZXhjZXB0aW9ucyAKLSB3aGVuIHRoZSBpbnB1dCBpcyBub3QgdmFsaWQsIHNwZWNpZnlpbmcgb3B0aW9ucwotIGZvciB0aGUgcm9vdCBlbGVtZW50J3MgZG9jdW1lbnQgdHlwZSBhbmQvb3IgdGhlIGNvbGxlY3Rpb24gb2JqZWN0IHRvIHVzZQotIGFzIGFuIGVycm9yIGxpc3RlbmVyIHdoaWxlIHZhbGlkYXRpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sIj5YbWxOT1RBVElPTi5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLkZhY3RvcnkuaHRtbCI+WG1sTk1UT0tFTlMuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uRmFjdG9yeS5odG1sIj5YbWxOTVRPS0VOLkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuRmFjdG9yeS5odG1sIj5YbWxOQ05hbWUuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuRmFjdG9yeS5odG1sIj5YbWxOYW1lLkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCI+WG1sTG9uZy5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLkZhY3RvcnkuaHRtbCI+WG1sTGFuZ3VhZ2UuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwiPlhtbEludC5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuRmFjdG9yeS5odG1sIj5YbWxJRFJFRlMuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5GYWN0b3J5Lmh0bWwiPlhtbElEUkVGLkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuRmFjdG9yeS5odG1sIj5YbWxJRC5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5LkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuRmFjdG9yeS5odG1sIj5YbWxIZXhCaW5hcnkuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguRmFjdG9yeS5odG1sIj5YbWxHWWVhck1vbnRoLkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuRmFjdG9yeS5odG1sIj5YbWxHWWVhci5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuRmFjdG9yeS5odG1sIj5YbWxHTW9udGhEYXkuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLkZhY3RvcnkuaHRtbCI+WG1sR01vbnRoLkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5LkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5LkZhY3RvcnkuaHRtbCI+WG1sR0RheS5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LkZhY3RvcnkuaHRtbCI+WG1sRmxvYXQuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLkZhY3RvcnkuaHRtbCI+WG1sRU5USVRZLkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuRmFjdG9yeS5odG1sIj5YbWxFTlRJVElFUy5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLkZhY3RvcnkuaHRtbCI+WG1sRHVyYXRpb24uRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLkZhY3RvcnkuaHRtbCI+WG1sRG91YmxlLkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCI+WG1sRGVjaW1hbC5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLkZhY3RvcnkuaHRtbCI+WG1sRGF0ZVRpbWUuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sIj5YbWxEYXRlLkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCI+WG1sQnl0ZS5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5GYWN0b3J5Lmh0bWwiPlhtbEJvb2xlYW4uRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5LkZhY3Rvcnk8L0E+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0oWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5GYWN0b3J5Lmh0bWwiPlhtbEFueVVSSS5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQT4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuRmFjdG9yeS5odG1sI25ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48Qj5uZXdWYWx1ZShPYmplY3QpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZFNob3J0LkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkU2hvcnQ8L0NPREU+PC9BPiB2YWx1ZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+bmV3VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZExvbmcuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj48Q09ERT5YbWxVbnNpZ25lZExvbmc8L0NPREU+PC9BPiB2YWx1ZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sI25ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48Qj5uZXdWYWx1ZShPYmplY3QpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50LkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRJbnQuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkSW50PC9DT0RFPjwvQT4gdmFsdWUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPjxCPm5ld1ZhbHVlKE9iamVjdCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRCeXRlLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+PENPREU+WG1sVW5zaWduZWRCeXRlPC9DT0RFPjwvQT4gdmFsdWUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+bmV3VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5GYWN0b3J5Lmh0bWwiPlhtbFRva2VuLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Q09ERT5YbWxUb2tlbjwvQ09ERT48L0E+IHZhbHVlCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+bmV3VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLkZhY3RvcnkuaHRtbCI+WG1sVGltZS5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj48Q09ERT5YbWxUaW1lPC9DT0RFPjwvQT4gdmFsdWUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPjxCPm5ld1ZhbHVlKE9iamVjdCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sU3RyaW5nLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+PENPREU+WG1sU3RyaW5nPC9DT0RFPjwvQT4gdmFsdWUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+bmV3VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5GYWN0b3J5Lmh0bWwiPlhtbFNob3J0LkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj48Q09ERT5YbWxTaG9ydDwvQ09ERT48L0E+IHZhbHVlCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPjxCPm5ld1ZhbHVlKE9iamVjdCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuRmFjdG9yeS5odG1sIj5YbWxRTmFtZS5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+PENPREU+WG1sUU5hbWU8L0NPREU+PC9BPiB2YWx1ZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+bmV3VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxQb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiB2YWx1ZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+bmV3VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIj5YbWxPYmplY3QuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj48Q09ERT5YbWxPYmplY3Q8L0NPREU+PC9BPiB2YWx1ZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sI25ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48Qj5uZXdWYWx1ZShPYmplY3QpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLkZhY3RvcnkuaHRtbCI+WG1sTk9UQVRJT04uRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPjxDT0RFPlhtbE5PVEFUSU9OPC9DT0RFPjwvQT4gdmFsdWUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sI25ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48Qj5uZXdWYWx1ZShPYmplY3QpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPjxDT0RFPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0NPREU+PC9BPiB2YWx1ZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+bmV3VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiB2YWx1ZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+bmV3VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPiB2YWx1ZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuRmFjdG9yeS5odG1sI25ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48Qj5uZXdWYWx1ZShPYmplY3QpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLkZhY3RvcnkuaHRtbCI+WG1sTk1UT0tFTlMuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU5TPC9DT0RFPjwvQT4gdmFsdWUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uRmFjdG9yeS5odG1sI25ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48Qj5uZXdWYWx1ZShPYmplY3QpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uRmFjdG9yeS5odG1sIj5YbWxOTVRPS0VOLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU48L0NPREU+PC9BPiB2YWx1ZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+bmV3VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPiB2YWx1ZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+bmV3VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuRmFjdG9yeS5odG1sIj5YbWxOQ05hbWUuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj48Q09ERT5YbWxOQ05hbWU8L0NPREU+PC9BPiB2YWx1ZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPjxCPm5ld1ZhbHVlKE9iamVjdCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwiPlhtbE5hbWUuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+PENPREU+WG1sTmFtZTwvQ09ERT48L0E+IHZhbHVlCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+bmV3VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCI+WG1sTG9uZy5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj48Q09ERT5YbWxMb25nPC9DT0RFPjwvQT4gdmFsdWUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+bmV3VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5GYWN0b3J5Lmh0bWwiPlhtbExhbmd1YWdlLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj48Q09ERT5YbWxMYW5ndWFnZTwvQ09ERT48L0E+IHZhbHVlCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+bmV3VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj48Q09ERT5YbWxJbnRlZ2VyPC9DT0RFPjwvQT4gdmFsdWUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPjxCPm5ld1ZhbHVlKE9iamVjdCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50LkZhY3RvcnkuaHRtbCI+WG1sSW50LkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+PENPREU+WG1sSW50PC9DT0RFPjwvQT4gdmFsdWUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPjxCPm5ld1ZhbHVlKE9iamVjdCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLkZhY3RvcnkuaHRtbCI+WG1sSURSRUZTLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+PENPREU+WG1sSURSRUZTPC9DT0RFPjwvQT4gdmFsdWUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+bmV3VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5GYWN0b3J5Lmh0bWwiPlhtbElEUkVGLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj48Q09ERT5YbWxJRFJFRjwvQ09ERT48L0E+IHZhbHVlCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPjxCPm5ld1ZhbHVlKE9iamVjdCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuRmFjdG9yeS5odG1sIj5YbWxJRC5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+PENPREU+WG1sSUQ8L0NPREU+PC9BPiB2YWx1ZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5LkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+bmV3VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuRmFjdG9yeS5odG1sIj5YbWxIZXhCaW5hcnkuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj48Q09ERT5YbWxIZXhCaW5hcnk8L0NPREU+PC9BPiB2YWx1ZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPjxCPm5ld1ZhbHVlKE9iamVjdCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwiPlhtbEdZZWFyTW9udGguRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+PENPREU+WG1sR1llYXJNb250aDwvQ09ERT48L0E+IHZhbHVlCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPjxCPm5ld1ZhbHVlKE9iamVjdCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuRmFjdG9yeS5odG1sIj5YbWxHWWVhci5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+PENPREU+WG1sR1llYXI8L0NPREU+PC9BPiB2YWx1ZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+bmV3VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuRmFjdG9yeS5odG1sIj5YbWxHTW9udGhEYXkuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj48Q09ERT5YbWxHTW9udGhEYXk8L0NPREU+PC9BPiB2YWx1ZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+bmV3VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sIj5YbWxHTW9udGguRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj48Q09ERT5YbWxHTW9udGg8L0NPREU+PC9BPiB2YWx1ZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPjxCPm5ld1ZhbHVlKE9iamVjdCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5GYWN0b3J5Lmh0bWwiPlhtbEdEYXkuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+PENPREU+WG1sR0RheTwvQ09ERT48L0E+IHZhbHVlCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPjxCPm5ld1ZhbHVlKE9iamVjdCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuRmFjdG9yeS5odG1sIj5YbWxGbG9hdC5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+PENPREU+WG1sRmxvYXQ8L0NPREU+PC9BPiB2YWx1ZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+bmV3VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuRmFjdG9yeS5odG1sIj5YbWxFTlRJVFkuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj48Q09ERT5YbWxFTlRJVFk8L0NPREU+PC9BPiB2YWx1ZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuRmFjdG9yeS5odG1sI25ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48Qj5uZXdWYWx1ZShPYmplY3QpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLkZhY3RvcnkuaHRtbCI+WG1sRU5USVRJRVMuRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPjxDT0RFPlhtbEVOVElUSUVTPC9DT0RFPjwvQT4gdmFsdWUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+bmV3VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5GYWN0b3J5Lmh0bWwiPlhtbER1cmF0aW9uLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj48Q09ERT5YbWxEdXJhdGlvbjwvQ09ERT48L0E+IHZhbHVlCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuRmFjdG9yeS5odG1sI25ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48Qj5uZXdWYWx1ZShPYmplY3QpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwiPlhtbERvdWJsZS5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPjxDT0RFPlhtbERvdWJsZTwvQ09ERT48L0E+IHZhbHVlCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+bmV3VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCI+WG1sRGVjaW1hbC5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj48Q09ERT5YbWxEZWNpbWFsPC9DT0RFPjwvQT4gdmFsdWUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+bmV3VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwiPlhtbERhdGVUaW1lLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj48Q09ERT5YbWxEYXRlVGltZTwvQ09ERT48L0E+IHZhbHVlCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+bmV3VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLkZhY3RvcnkuaHRtbCI+WG1sRGF0ZS5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj48Q09ERT5YbWxEYXRlPC9DT0RFPjwvQT4gdmFsdWUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuRmFjdG9yeS5odG1sI25ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48Qj5uZXdWYWx1ZShPYmplY3QpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuRmFjdG9yeS5odG1sIj5YbWxCeXRlLkZhY3Rvcnk8L0E+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPjxDT0RFPlhtbEJ5dGU8L0NPREU+PC9BPiB2YWx1ZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPjxCPm5ld1ZhbHVlKE9iamVjdCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5GYWN0b3J5Lmh0bWwiPlhtbEJvb2xlYW4uRmFjdG9yeTwvQT4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+PENPREU+WG1sQm9vbGVhbjwvQ09ERT48L0E+IHZhbHVlCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuRmFjdG9yeS5odG1sI25ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48Qj5uZXdWYWx1ZShPYmplY3QpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwiPlhtbEJhc2U2NEJpbmFyeS5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEJhc2U2NEJpbmFyeTwvQ09ERT48L0E+IHZhbHVlCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sI25ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48Qj5uZXdWYWx1ZShPYmplY3QpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5GYWN0b3J5Lmh0bWwiPlhtbEFueVVSSS5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPjxDT0RFPlhtbEFueVVSSTwvQ09ERT48L0E+IHZhbHVlCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+bmV3VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+WG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9BPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlPC9DT0RFPjwvQT4gdmFsdWUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+bmV3VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgc2ltcGxlIHR5cGUgdmFsdWUgdGhhdCBkb2VzIG5vdCByZXNpZGUgaW4gYSB0cmVlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdYTUxJbnB1dFN0cmVhbSgpIj48Qj5uZXdYTUxJbnB1dFN0cmVhbSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPgotPEREPlJldHVybnMgYSBuZXcgWG1sSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNuZXdYTUxJbnB1dFN0cmVhbSgpIj48Qj5uZXdYTUxJbnB1dFN0cmVhbSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+bmV3WE1MSW5wdXRTdHJlYW0oWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+Ci08REQ+SnVzdCBsaWtlIG5ld1hNTElucHV0U3RyZWFtKCkgYnV0IHdpdGggYW55IG9mIGEgbnVtYmVyIG9mIG9wdGlvbnMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNuZXdYTUxJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdYTUxJbnB1dFN0cmVhbShYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sI25ld1htbFNheEhhbmRsZXIoKSI+PEI+bmV3WG1sU2F4SGFuZGxlcigpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPlhtbE9iamVjdC5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYW4gPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTYXhIYW5kbGVyLmh0bWwiPjxDT0RFPlhtbFNheEhhbmRsZXI8L0NPREU+PC9BPiB0aGF0IGNhbiBsb2FkIGFuIFhtbE9iamVjdCBmcm9tIFNBWCBldmVudHMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGYWN0b3J5SG9vay5odG1sI25ld1htbFNheEhhbmRsZXIob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld1htbFNheEhhbmRsZXIoU2NoZW1hVHlwZUxvYWRlciwgU2NoZW1hVHlwZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmFjdG9yeUhvb2suaHRtbCI+WG1sRmFjdG9yeUhvb2s8L0E+Ci08REQ+SG9va3MgRmFjdG9yeS5uZXdYbWxTYXhIYW5kbGVyIGNhbGxzCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwjbmV3WG1sU2F4SGFuZGxlcihvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPm5ld1htbFNheEhhbmRsZXIoU2NoZW1hVHlwZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sIj5TY2hlbWFUeXBlTG9hZGVyPC9BPgotPEREPlJldHVybnMgYW4gWG1sU2F4SGFuZGxlciB0aGF0IGNhbiBwYXJzZSBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gdHlwZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwjbmV3WG1sU2F4SGFuZGxlcihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5uZXdYbWxTYXhIYW5kbGVyKFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPlhtbE9iamVjdC5GYWN0b3J5PC9BPgotPEREPlJldHVybnMgYW4gPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTYXhIYW5kbGVyLmh0bWwiPjxDT0RFPlhtbFNheEhhbmRsZXI8L0NPREU+PC9BPiB0aGF0IGNhbiBsb2FkIGFuIFhtbE9iamVjdCBmcm9tIFNBWCBldmVudHMuCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNuZXh0KCkiPjxCPm5leHQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCI+WE1MU3RyZWFtUmVhZGVyPC9BPgotPEREPkdldCBuZXh0IHBhcnNpbmcgZXZlbnQgLSBhIHByb2Nlc3NvciBtYXkgbWF5IHJldHVybiBhbGwgY29udGlndW91cwotIGNoYXJhY3RlciBkYXRhIGluIGEgc2luZ2xlIGNodW5rLCBvciBpdCBtYXkgc3BsaXQgaXQgaW50byBzZXZlcmFsIGNodW5rcy4KLTxEVD48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI25leHRUYWcoKSI+PEI+bmV4dFRhZygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sIj5YTUxTdHJlYW1SZWFkZXI8L0E+Ci08REQ+U2tpcHMgYW55IGluc2lnbmlmaWNhbnQgZXZlbnRzIHVudGlsIGEgU1RBUlRfRUxFTUVOVCBvcgotIEVORF9FTEVNRU5UIGlzIHJlYWNoZWQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwjTk9fUkVTT1VSQ0UiPjxCPk5PX1JFU09VUkNFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sIj5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuaHRtbCNOT19UWVBFIj48Qj5OT19UWVBFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuaHRtbCI+WG1sQmVhbnM8L0E+Ci08REQ+VGhlIFNjaGVtYVR5cGUgb2JqZWN0IGdpdmVuIHRvIGFuIFhtbE9iamVjdCBpbnN0YW5jZSB3aGVuCi0gbm8gdHlwZSBjYW4gYmUgZGV0ZXJtaW5lZC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCNOT05FIj48Qj5OT05FPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPgotPEREPlRoZSBzaW5nbGV0b24gbm8tdG9rZW4gdHlwZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCNOT05FIj48Qj5OT05FPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZU1vZGVsLmh0bWwiPlNjaGVtYUF0dHJpYnV0ZU1vZGVsPC9BPgotPEREPlNlZSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZU1vZGVsLmh0bWwjZ2V0V2lsZGNhcmRQcm9jZXNzKCkiPjxDT0RFPlNjaGVtYUF0dHJpYnV0ZU1vZGVsLmdldFdpbGRjYXJkUHJvY2VzcygpPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwjTk9OTE9DQUwiPjxCPk5PTkxPQ0FMPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+Ci08REQ+VGhlIFFOYW1lU2V0IGNvbnRhaW5pbmcgYWxsIFFOYW1lcyBleGNlcHQgZm9yIHRob3NlIGluIHRoZSBsb2NhbCAobm8tKW5hbWVzcGFjZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCNub3JtYWxpemUoKSI+PEI+bm9ybWFsaXplKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwiPkdEdXJhdGlvbkJ1aWxkZXI8L0E+Ci08REQ+Tm9ybWFsaXplIGEgZHVyYXRpb24gdmFsdWUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNub3JtYWxpemUoKSI+PEI+bm9ybWFsaXplKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+R0RhdGVCdWlsZGVyPC9BPgotPEREPk5vcm1hbGl6ZXMgdGhlIGluc3RhbmNlLCBlbnN1cmluZyBkYXRlIGFuZCB0aW1lIGZpZWxkcyBhcmUgd2l0aGluCi0gdGhlaXIgbm9ybWFsIHJhbmdlcy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI25vcm1hbGl6ZVRvVGltZVpvbmUoaW50LCBpbnQsIGludCkiPjxCPm5vcm1hbGl6ZVRvVGltZVpvbmUoaW50LCBpbnQsIGludCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+R0RhdGVCdWlsZGVyPC9BPgotPEREPklmIHRoZSB0aW1lIGFuZCB0aW1lem9uZSBhcmUga25vd24sIHRoaXMgbWV0aG9kIGNoYW5nZXMgdGhlIHRpbWV6b25lIHRvIHRoZQotIHNwZWNpZmllZCBVVEMgb2Zmc2V0LCBhbHRlcmluZyBtaW51dGVzLCBob3VycywgZGF5LCBtb250aCwgYW5kIHllYXIgYXMKLSBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgdGhlIGFjdHVhbCBkZXNjcmliZWQgbW9tZW50IGluIHRpbWUgaXMgdGhlIHNhbWUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjTk9UX0NPTVBMRVhfVFlQRSI+PEI+Tk9UX0NPTVBMRVhfVFlQRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+Tm90IGEgY29tcGxleCB0eXBlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI05PVF9ERUNJTUFMIj48Qj5OT1RfREVDSU1BTDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+Tm90IGEgZGVjaW1hbCByZXN0cmljdGlvbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI05PVF9FUVVBTCI+PEI+Tk9UX0VRVUFMPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+Ci08REQ+Tk9UX0VRVUFMIGlzIDIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjTk9UX1NJTVBMRSI+PEI+Tk9UX1NJTVBMRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+Tm90IGEgc2ltcGxlIHR5cGUgb3Igc2ltcGxlIGNvbnRlbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwjTk9UX1dSSVRFQUJMRSI+PEI+Tk9UX1dSSVRFQUJMRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCI+U2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI05PVEFUSU9OIj48Qj5OT1RBVElPTjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPgotPEREPkEgbm90YXRpb24gZGVmaW5pdGlvbi4KLTxEVD48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sI05PVEFUSU9OX0RFQ0xBUkFUSU9OIj48Qj5OT1RBVElPTl9ERUNMQVJBVElPTjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCI+WE1MU3RyZWFtQ29uc3RhbnRzPC9BPgotPEREPkluZGljYXRlcyBhIE5vdGF0aW9uCi08L0RMPgotPEhSPgotPEEgTkFNRT0iX09fIj48IS0tIC0tPjwvQT48SDI+Ci08Qj5PPC9CPjwvSDI+Ci08REw+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI29iamVjdFNldChqYXZhLmxhbmcuT2JqZWN0KSI+PEI+b2JqZWN0U2V0KE9iamVjdCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0T2JqZWN0VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPjxDT0RFPlNpbXBsZVZhbHVlLnNldE9iamVjdFZhbHVlKGphdmEubGFuZy5PYmplY3QpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNvYmplY3RTZXQoamF2YS5sYW5nLk9iamVjdCkiPjxCPm9iamVjdFNldChPYmplY3QpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjb2JqZWN0VmFsdWUoKSI+PEI+b2JqZWN0VmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRPYmplY3RWYWx1ZSgpIj48Q09ERT5TaW1wbGVWYWx1ZS5nZXRPYmplY3RWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNvYmplY3RWYWx1ZSgpIj48Qj5vYmplY3RWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsQXR0cmlidXRlLmh0bWwjT1BUSU9OQUwiPjxCPk9QVElPTkFMPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsQXR0cmlidXRlLmh0bWwiPlNjaGVtYUxvY2FsQXR0cmlidXRlPC9BPgotPEREPkFuIG9wdGlvbmFsIGF0dHJpYnV0ZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNvcmRlcmVkKCkiPjxCPm9yZGVyZWQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+VHJ1ZSBpZiBvcmRlcmVkLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxCPm9yZy5hcGFjaGUueG1sYmVhbnM8L0I+PC9BPiAtIHBhY2thZ2Ugb3JnLmFwYWNoZS54bWxiZWFuczxERD5Qcm92aWRlcyBjbGFzc2VzIGZvciBYTUwgQmVhbnMgc2NoZW1hLCBpbmZvc2V0LCB4cGF0aCwgYW5kIHhxdWVyeSBoYW5kbGluZy48L0RMPgotPEhSPgotPEEgTkFNRT0iX1BfIj48IS0tIC0tPjwvQT48SDI+Ci08Qj5QPC9CPjwvSDI+Ci08REw+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUpIj48Qj5wYXJzZShGaWxlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPjxCPnBhcnNlKEZpbGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5GYWN0b3J5Lmh0bWwiPlhtbFVuc2lnbmVkTG9uZy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPjxCPnBhcnNlKEZpbGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50LkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRJbnQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPjxCPnBhcnNlKEZpbGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwiPlhtbFVuc2lnbmVkQnl0ZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPjxCPnBhcnNlKEZpbGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCI+WG1sVG9rZW4uRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPjxDT0RFPlhtbFRva2VuPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUpIj48Qj5wYXJzZShGaWxlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLkZhY3RvcnkuaHRtbCI+WG1sVGltZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj48Q09ERT5YbWxUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPjxCPnBhcnNlKEZpbGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5GYWN0b3J5Lmh0bWwiPlhtbFN0cmluZy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPjxDT0RFPlhtbFN0cmluZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPjxCPnBhcnNlKEZpbGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCI+WG1sU2hvcnQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPjxDT0RFPlhtbFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+PEI+cGFyc2UoRmlsZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuRmFjdG9yeS5odG1sIj5YbWxRTmFtZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+PENPREU+WG1sUU5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+PEI+cGFyc2UoRmlsZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPjxCPnBhcnNlKEZpbGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPlhtbE9iamVjdC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyB0aGUgZ2l2ZW4gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj48Q09ERT5GaWxlPC9DT0RFPjwvQT4gYXMgWE1MLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPjxCPnBhcnNlKEZpbGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLkZhY3RvcnkuaHRtbCI+WG1sTk9UQVRJT04uRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPjxDT0RFPlhtbE5PVEFUSU9OPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUpIj48Qj5wYXJzZShGaWxlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj48Q09ERT5YbWxOb3JtYWxpemVkU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPjxCPnBhcnNlKEZpbGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUpIj48Qj5wYXJzZShGaWxlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUpIj48Qj5wYXJzZShGaWxlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwiPlhtbE5NVE9LRU5TLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj48Q09ERT5YbWxOTVRPS0VOUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+PEI+cGFyc2UoRmlsZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwiPlhtbE5NVE9LRU4uRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+PENPREU+WG1sTk1UT0tFTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUpIj48Qj5wYXJzZShGaWxlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+PEI+cGFyc2UoRmlsZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCI+WG1sTkNOYW1lLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+PENPREU+WG1sTkNOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUpIj48Qj5wYXJzZShGaWxlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbCI+WG1sTmFtZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj48Q09ERT5YbWxOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUpIj48Qj5wYXJzZShGaWxlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCI+WG1sTG9uZy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj48Q09ERT5YbWxMb25nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+PEI+cGFyc2UoRmlsZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sIj5YbWxMYW5ndWFnZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+PENPREU+WG1sTGFuZ3VhZ2U8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPjxCPnBhcnNlKEZpbGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbEludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+PEI+cGFyc2UoRmlsZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50LkZhY3RvcnkuaHRtbCI+WG1sSW50LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+PENPREU+WG1sSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPjxCPnBhcnNlKEZpbGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwiPlhtbElEUkVGUy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPjxDT0RFPlhtbElEUkVGUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPjxCPnBhcnNlKEZpbGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLkZhY3RvcnkuaHRtbCI+WG1sSURSRUYuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPjxDT0RFPlhtbElEUkVGPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+PEI+cGFyc2UoRmlsZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuRmFjdG9yeS5odG1sIj5YbWxJRC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+PENPREU+WG1sSUQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+PEI+cGFyc2UoRmlsZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5LkZhY3RvcnkuaHRtbCI+WG1sSGV4QmluYXJ5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+PENPREU+WG1sSGV4QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUpIj48Qj5wYXJzZShGaWxlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCI+WG1sR1llYXJNb250aC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj48Q09ERT5YbWxHWWVhck1vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+PEI+cGFyc2UoRmlsZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuRmFjdG9yeS5odG1sIj5YbWxHWWVhci5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+PENPREU+WG1sR1llYXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+PEI+cGFyc2UoRmlsZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCI+WG1sR01vbnRoRGF5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+PENPREU+WG1sR01vbnRoRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPjxCPnBhcnNlKEZpbGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5GYWN0b3J5Lmh0bWwiPlhtbEdNb250aC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPjxDT0RFPlhtbEdNb250aDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+PEI+cGFyc2UoRmlsZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5GYWN0b3J5Lmh0bWwiPlhtbEdEYXkuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+PENPREU+WG1sR0RheTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPjxCPnBhcnNlKEZpbGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LkZhY3RvcnkuaHRtbCI+WG1sRmxvYXQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPjxDT0RFPlhtbEZsb2F0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPjxCPnBhcnNlKEZpbGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5GYWN0b3J5Lmh0bWwiPlhtbEVOVElUWS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPjxDT0RFPlhtbEVOVElUWTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPjxCPnBhcnNlKEZpbGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLkZhY3RvcnkuaHRtbCI+WG1sRU5USVRJRVMuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPjxDT0RFPlhtbEVOVElUSUVTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+PEI+cGFyc2UoRmlsZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uRmFjdG9yeS5odG1sIj5YbWxEdXJhdGlvbi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+PENPREU+WG1sRHVyYXRpb248L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+PEI+cGFyc2UoRmlsZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLkZhY3RvcnkuaHRtbCI+WG1sRG91YmxlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+PENPREU+WG1sRG91YmxlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUpIj48Qj5wYXJzZShGaWxlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCI+WG1sRGVjaW1hbC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj48Q09ERT5YbWxEZWNpbWFsPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+PEI+cGFyc2UoRmlsZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sIj5YbWxEYXRlVGltZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+PENPREU+WG1sRGF0ZVRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPjxCPnBhcnNlKEZpbGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sIj5YbWxEYXRlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPjxDT0RFPlhtbERhdGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPjxCPnBhcnNlKEZpbGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuRmFjdG9yeS5odG1sIj5YbWxCeXRlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPjxDT0RFPlhtbEJ5dGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPjxCPnBhcnNlKEZpbGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sIj5YbWxCb29sZWFuLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPjxDT0RFPlhtbEJvb2xlYW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+PEI+cGFyc2UoRmlsZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+PENPREU+WG1sQmFzZTY0QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPjxCPnBhcnNlKEZpbGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5GYWN0b3J5Lmh0bWwiPlhtbEFueVVSSS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPjxDT0RFPlhtbEFueVVSSTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+PEI+cGFyc2UoRmlsZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+PENPREU+WG1sQW55U2ltcGxlVHlwZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShGaWxlLCBTY2hlbWFUeXBlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXI8L0E+Ci08REQ+UGFyc2VzIGFuIGluc3RhbmNlIG9mIHRoZSBnaXZlbiB0eXBlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShGaWxlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoRmlsZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRMb25nLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+PENPREU+WG1sVW5zaWduZWRMb25nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShGaWxlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5GYWN0b3J5Lmh0bWwiPlhtbFVuc2lnbmVkSW50LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKEZpbGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwiPlhtbFVuc2lnbmVkQnl0ZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoRmlsZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sIj5YbWxUb2tlbi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+PENPREU+WG1sVG9rZW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoRmlsZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5GYWN0b3J5Lmh0bWwiPlhtbFRpbWUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+PENPREU+WG1sVGltZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKEZpbGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5GYWN0b3J5Lmh0bWwiPlhtbFN0cmluZy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPjxDT0RFPlhtbFN0cmluZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoRmlsZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuRmFjdG9yeS5odG1sIj5YbWxTaG9ydC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+PENPREU+WG1sU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKEZpbGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLkZhY3RvcnkuaHRtbCI+WG1sUU5hbWUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPjxDT0RFPlhtbFFOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoRmlsZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoRmlsZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIHRoZSBnaXZlbiA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPjxDT0RFPkZpbGU8L0NPREU+PC9BPiBhcyBYTUwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShGaWxlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwiPlhtbE5PVEFUSU9OLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj48Q09ERT5YbWxOT1RBVElPTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShGaWxlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj48Q09ERT5YbWxOb3JtYWxpemVkU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoRmlsZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoRmlsZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShGaWxlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwiPlhtbE5NVE9LRU5TLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj48Q09ERT5YbWxOTVRPS0VOUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShGaWxlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLkZhY3RvcnkuaHRtbCI+WG1sTk1UT0tFTi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Q09ERT5YbWxOTVRPS0VOPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoRmlsZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoRmlsZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCI+WG1sTkNOYW1lLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+PENPREU+WG1sTkNOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKEZpbGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuRmFjdG9yeS5odG1sIj5YbWxOYW1lLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPjxDT0RFPlhtbE5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoRmlsZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwiPlhtbExvbmcuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+PENPREU+WG1sTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoRmlsZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sIj5YbWxMYW5ndWFnZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+PENPREU+WG1sTGFuZ3VhZ2U8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoRmlsZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbEludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+PENPREU+WG1sSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKEZpbGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwiPlhtbEludC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPjxDT0RFPlhtbEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKEZpbGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwiPlhtbElEUkVGUy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPjxDT0RFPlhtbElEUkVGUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoRmlsZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sIj5YbWxJRFJFRi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+PENPREU+WG1sSURSRUY8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElELkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKEZpbGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElELkZhY3RvcnkuaHRtbCI+WG1sSUQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPjxDT0RFPlhtbElEPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoRmlsZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5LkZhY3RvcnkuaHRtbCI+WG1sSGV4QmluYXJ5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+PENPREU+WG1sSGV4QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKEZpbGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguRmFjdG9yeS5odG1sIj5YbWxHWWVhck1vbnRoLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPjxDT0RFPlhtbEdZZWFyTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKEZpbGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbCI+WG1sR1llYXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPjxDT0RFPlhtbEdZZWFyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoRmlsZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCI+WG1sR01vbnRoRGF5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+PENPREU+WG1sR01vbnRoRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoRmlsZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLkZhY3RvcnkuaHRtbCI+WG1sR01vbnRoLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+PENPREU+WG1sR01vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKEZpbGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sIj5YbWxHRGF5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPjxDT0RFPlhtbEdEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKEZpbGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LkZhY3RvcnkuaHRtbCI+WG1sRmxvYXQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPjxDT0RFPlhtbEZsb2F0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoRmlsZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLkZhY3RvcnkuaHRtbCI+WG1sRU5USVRZLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+PENPREU+WG1sRU5USVRZPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShGaWxlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwiPlhtbEVOVElUSUVTLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj48Q09ERT5YbWxFTlRJVElFUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoRmlsZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uRmFjdG9yeS5odG1sIj5YbWxEdXJhdGlvbi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+PENPREU+WG1sRHVyYXRpb248L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShGaWxlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuRmFjdG9yeS5odG1sIj5YbWxEb3VibGUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj48Q09ERT5YbWxEb3VibGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoRmlsZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwiPlhtbERlY2ltYWwuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+PENPREU+WG1sRGVjaW1hbDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoRmlsZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sIj5YbWxEYXRlVGltZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+PENPREU+WG1sRGF0ZVRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoRmlsZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5GYWN0b3J5Lmh0bWwiPlhtbERhdGUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+PENPREU+WG1sRGF0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShGaWxlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCI+WG1sQnl0ZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Q09ERT5YbWxCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKEZpbGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sIj5YbWxCb29sZWFuLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPjxDT0RFPlhtbEJvb2xlYW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShGaWxlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuRmFjdG9yeS5odG1sIj5YbWxCYXNlNjRCaW5hcnkuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj48Q09ERT5YbWxCYXNlNjRCaW5hcnk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShGaWxlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sIj5YbWxBbnlVUkkuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj48Q09ERT5YbWxBbnlVUkk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoRmlsZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+PENPREU+WG1sQW55U2ltcGxlVHlwZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjxCPnBhcnNlKElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjxCPnBhcnNlKElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZExvbmcuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj48Q09ERT5YbWxVbnNpZ25lZExvbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZEludC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRJbnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwiPlhtbFVuc2lnbmVkQnl0ZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjxCPnBhcnNlKElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5GYWN0b3J5Lmh0bWwiPlhtbFRva2VuLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Q09ERT5YbWxUb2tlbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuRmFjdG9yeS5odG1sIj5YbWxUaW1lLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPjxDT0RFPlhtbFRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5GYWN0b3J5Lmh0bWwiPlhtbFN0cmluZy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPjxDT0RFPlhtbFN0cmluZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjxCPnBhcnNlKElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5GYWN0b3J5Lmh0bWwiPlhtbFNob3J0LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj48Q09ERT5YbWxTaG9ydDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjxCPnBhcnNlKElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwiPlhtbFFOYW1lLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj48Q09ERT5YbWxRTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjxCPnBhcnNlKElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIj5YbWxPYmplY3QuRmFjdG9yeTwvQT4KLTxERD5EZWNvZGVzIGFuZCBwYXJzZXMgdGhlIGdpdmVuIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPjxDT0RFPklucHV0U3RyZWFtPC9DT0RFPjwvQT4gYXMgWE1MLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sIj5YbWxOT1RBVElPTi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+PENPREU+WG1sTk9UQVRJT048L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjxCPnBhcnNlKElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj48Q09ERT5YbWxOb3JtYWxpemVkU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjxCPnBhcnNlKElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjxCPnBhcnNlKElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwiPlhtbE5NVE9LRU5TLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj48Q09ERT5YbWxOTVRPS0VOUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uRmFjdG9yeS5odG1sIj5YbWxOTVRPS0VOLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCI+WG1sTkNOYW1lLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+PENPREU+WG1sTkNOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwiPlhtbE5hbWUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+PENPREU+WG1sTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuRmFjdG9yeS5odG1sIj5YbWxMb25nLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPjxDT0RFPlhtbExvbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sIj5YbWxMYW5ndWFnZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+PENPREU+WG1sTGFuZ3VhZ2U8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjxCPnBhcnNlKElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj48Q09ERT5YbWxJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjxCPnBhcnNlKElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuRmFjdG9yeS5odG1sIj5YbWxJbnQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj48Q09ERT5YbWxJbnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwiPlhtbElEUkVGUy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPjxDT0RFPlhtbElEUkVGUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjxCPnBhcnNlKElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5GYWN0b3J5Lmh0bWwiPlhtbElEUkVGLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj48Q09ERT5YbWxJRFJFRjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjxCPnBhcnNlKElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwiPlhtbElELkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj48Q09ERT5YbWxJRDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5LkZhY3RvcnkuaHRtbCI+WG1sSGV4QmluYXJ5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+PENPREU+WG1sSGV4QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwiPlhtbEdZZWFyTW9udGguRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+PENPREU+WG1sR1llYXJNb250aDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjxCPnBhcnNlKElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5GYWN0b3J5Lmh0bWwiPlhtbEdZZWFyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj48Q09ERT5YbWxHWWVhcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCI+WG1sR01vbnRoRGF5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+PENPREU+WG1sR01vbnRoRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjxCPnBhcnNlKElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sIj5YbWxHTW9udGguRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj48Q09ERT5YbWxHTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjxCPnBhcnNlKElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5LkZhY3RvcnkuaHRtbCI+WG1sR0RheS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj48Q09ERT5YbWxHRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LkZhY3RvcnkuaHRtbCI+WG1sRmxvYXQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPjxDT0RFPlhtbEZsb2F0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjxCPnBhcnNlKElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuRmFjdG9yeS5odG1sIj5YbWxFTlRJVFkuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj48Q09ERT5YbWxFTlRJVFk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuRmFjdG9yeS5odG1sIj5YbWxFTlRJVElFUy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+PENPREU+WG1sRU5USVRJRVM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uRmFjdG9yeS5odG1sIj5YbWxEdXJhdGlvbi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+PENPREU+WG1sRHVyYXRpb248L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwiPlhtbERvdWJsZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPjxDT0RFPlhtbERvdWJsZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuRmFjdG9yeS5odG1sIj5YbWxEZWNpbWFsLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPjxDT0RFPlhtbERlY2ltYWw8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sIj5YbWxEYXRlVGltZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+PENPREU+WG1sRGF0ZVRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjxCPnBhcnNlKElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLkZhY3RvcnkuaHRtbCI+WG1sRGF0ZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj48Q09ERT5YbWxEYXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5GYWN0b3J5Lmh0bWwiPlhtbEJ5dGUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+PENPREU+WG1sQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sIj5YbWxCb29sZWFuLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPjxDT0RFPlhtbEJvb2xlYW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwiPlhtbEJhc2U2NEJpbmFyeS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEJhc2U2NEJpbmFyeTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLkZhY3RvcnkuaHRtbCI+WG1sQW55VVJJLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+PENPREU+WG1sQW55VVJJPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+PENPREU+WG1sQW55U2ltcGxlVHlwZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShJbnB1dFN0cmVhbSwgU2NoZW1hVHlwZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sIj5TY2hlbWFUeXBlTG9hZGVyPC9BPgotPEREPlBhcnNlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gdHlwZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5GYWN0b3J5Lmh0bWwiPlhtbFVuc2lnbmVkTG9uZy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50LkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRJbnQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwiPlhtbFVuc2lnbmVkQnl0ZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCI+WG1sVG9rZW4uRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPjxDT0RFPlhtbFRva2VuPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLkZhY3RvcnkuaHRtbCI+WG1sVGltZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj48Q09ERT5YbWxUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5GYWN0b3J5Lmh0bWwiPlhtbFN0cmluZy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPjxDT0RFPlhtbFN0cmluZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCI+WG1sU2hvcnQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPjxDT0RFPlhtbFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuRmFjdG9yeS5odG1sIj5YbWxRTmFtZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+PENPREU+WG1sUU5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPlhtbE9iamVjdC5GYWN0b3J5PC9BPgotPEREPkRlY29kZXMgYW5kIHBhcnNlcyB0aGUgZ2l2ZW4gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+PENPREU+SW5wdXRTdHJlYW08L0NPREU+PC9BPiBhcyBYTUwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLkZhY3RvcnkuaHRtbCI+WG1sTk9UQVRJT04uRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPjxDT0RFPlhtbE5PVEFUSU9OPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj48Q09ERT5YbWxOb3JtYWxpemVkU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwiPlhtbE5NVE9LRU5TLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj48Q09ERT5YbWxOTVRPS0VOUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwiPlhtbE5NVE9LRU4uRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+PENPREU+WG1sTk1UT0tFTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCI+WG1sTkNOYW1lLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+PENPREU+WG1sTkNOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbCI+WG1sTmFtZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj48Q09ERT5YbWxOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCI+WG1sTG9uZy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj48Q09ERT5YbWxMb25nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sIj5YbWxMYW5ndWFnZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+PENPREU+WG1sTGFuZ3VhZ2U8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbEludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50LkZhY3RvcnkuaHRtbCI+WG1sSW50LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+PENPREU+WG1sSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwiPlhtbElEUkVGUy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPjxDT0RFPlhtbElEUkVGUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLkZhY3RvcnkuaHRtbCI+WG1sSURSRUYuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPjxDT0RFPlhtbElEUkVGPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElELkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuRmFjdG9yeS5odG1sIj5YbWxJRC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+PENPREU+WG1sSUQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5LkZhY3RvcnkuaHRtbCI+WG1sSGV4QmluYXJ5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+PENPREU+WG1sSGV4QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCI+WG1sR1llYXJNb250aC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj48Q09ERT5YbWxHWWVhck1vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuRmFjdG9yeS5odG1sIj5YbWxHWWVhci5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+PENPREU+WG1sR1llYXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCI+WG1sR01vbnRoRGF5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+PENPREU+WG1sR01vbnRoRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5GYWN0b3J5Lmh0bWwiPlhtbEdNb250aC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPjxDT0RFPlhtbEdNb250aDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5GYWN0b3J5Lmh0bWwiPlhtbEdEYXkuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+PENPREU+WG1sR0RheTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LkZhY3RvcnkuaHRtbCI+WG1sRmxvYXQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPjxDT0RFPlhtbEZsb2F0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5GYWN0b3J5Lmh0bWwiPlhtbEVOVElUWS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPjxDT0RFPlhtbEVOVElUWTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLkZhY3RvcnkuaHRtbCI+WG1sRU5USVRJRVMuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPjxDT0RFPlhtbEVOVElUSUVTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uRmFjdG9yeS5odG1sIj5YbWxEdXJhdGlvbi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+PENPREU+WG1sRHVyYXRpb248L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLkZhY3RvcnkuaHRtbCI+WG1sRG91YmxlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+PENPREU+WG1sRG91YmxlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCI+WG1sRGVjaW1hbC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj48Q09ERT5YbWxEZWNpbWFsPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sIj5YbWxEYXRlVGltZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+PENPREU+WG1sRGF0ZVRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sIj5YbWxEYXRlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPjxDT0RFPlhtbERhdGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuRmFjdG9yeS5odG1sIj5YbWxCeXRlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPjxDT0RFPlhtbEJ5dGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sIj5YbWxCb29sZWFuLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPjxDT0RFPlhtbEJvb2xlYW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+PENPREU+WG1sQmFzZTY0QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5GYWN0b3J5Lmh0bWwiPlhtbEFueVVSSS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPjxDT0RFPlhtbEFueVVSSTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+PENPREU+WG1sQW55U2ltcGxlVHlwZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PEI+cGFyc2UoTm9kZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRTaG9ydDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjxCPnBhcnNlKE5vZGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5GYWN0b3J5Lmh0bWwiPlhtbFVuc2lnbmVkTG9uZy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50LkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PEI+cGFyc2UoTm9kZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZEludC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRJbnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48Qj5wYXJzZShOb2RlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEJ5dGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjxCPnBhcnNlKE5vZGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCI+WG1sVG9rZW4uRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPjxDT0RFPlhtbFRva2VuPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjxCPnBhcnNlKE5vZGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuRmFjdG9yeS5odG1sIj5YbWxUaW1lLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPjxDT0RFPlhtbFRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48Qj5wYXJzZShOb2RlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sIj5YbWxTdHJpbmcuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj48Q09ERT5YbWxTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjxCPnBhcnNlKE5vZGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCI+WG1sU2hvcnQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPjxDT0RFPlhtbFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48Qj5wYXJzZShOb2RlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwiPlhtbFFOYW1lLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj48Q09ERT5YbWxRTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjxCPnBhcnNlKE5vZGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbFBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjxCPnBhcnNlKE5vZGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPlhtbE9iamVjdC5GYWN0b3J5PC9BPgotPEREPkNvbnZlcnRzIHRoZSBnaXZlbiBET00gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+PENPREU+Tm9kZTwvQ09ERT48L0E+IGludG8gYW4gWG1sT2JqZWN0LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48Qj5wYXJzZShOb2RlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwiPlhtbE5PVEFUSU9OLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj48Q09ERT5YbWxOT1RBVElPTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48Qj5wYXJzZShOb2RlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj48Q09ERT5YbWxOb3JtYWxpemVkU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PEI+cGFyc2UoTm9kZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PEI+cGFyc2UoTm9kZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48Qj5wYXJzZShOb2RlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwiPlhtbE5NVE9LRU5TLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj48Q09ERT5YbWxOTVRPS0VOUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48Qj5wYXJzZShOb2RlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLkZhY3RvcnkuaHRtbCI+WG1sTk1UT0tFTi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Q09ERT5YbWxOTVRPS0VOPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PEI+cGFyc2UoTm9kZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PEI+cGFyc2UoTm9kZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCI+WG1sTkNOYW1lLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+PENPREU+WG1sTkNOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjxCPnBhcnNlKE5vZGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuRmFjdG9yeS5odG1sIj5YbWxOYW1lLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPjxDT0RFPlhtbE5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PEI+cGFyc2UoTm9kZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwiPlhtbExvbmcuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+PENPREU+WG1sTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PEI+cGFyc2UoTm9kZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sIj5YbWxMYW5ndWFnZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+PENPREU+WG1sTGFuZ3VhZ2U8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PEI+cGFyc2UoTm9kZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbEludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+PENPREU+WG1sSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjxCPnBhcnNlKE5vZGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwiPlhtbEludC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPjxDT0RFPlhtbEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjxCPnBhcnNlKE5vZGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwiPlhtbElEUkVGUy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPjxDT0RFPlhtbElEUkVGUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PEI+cGFyc2UoTm9kZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sIj5YbWxJRFJFRi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+PENPREU+WG1sSURSRUY8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjxCPnBhcnNlKE5vZGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElELkZhY3RvcnkuaHRtbCI+WG1sSUQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPjxDT0RFPlhtbElEPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5LkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PEI+cGFyc2UoTm9kZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5LkZhY3RvcnkuaHRtbCI+WG1sSGV4QmluYXJ5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+PENPREU+WG1sSGV4QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjxCPnBhcnNlKE5vZGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguRmFjdG9yeS5odG1sIj5YbWxHWWVhck1vbnRoLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPjxDT0RFPlhtbEdZZWFyTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjxCPnBhcnNlKE5vZGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbCI+WG1sR1llYXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPjxDT0RFPlhtbEdZZWFyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PEI+cGFyc2UoTm9kZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCI+WG1sR01vbnRoRGF5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+PENPREU+WG1sR01vbnRoRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PEI+cGFyc2UoTm9kZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLkZhY3RvcnkuaHRtbCI+WG1sR01vbnRoLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+PENPREU+WG1sR01vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjxCPnBhcnNlKE5vZGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sIj5YbWxHRGF5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPjxDT0RFPlhtbEdEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjxCPnBhcnNlKE5vZGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LkZhY3RvcnkuaHRtbCI+WG1sRmxvYXQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPjxDT0RFPlhtbEZsb2F0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PEI+cGFyc2UoTm9kZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLkZhY3RvcnkuaHRtbCI+WG1sRU5USVRZLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+PENPREU+WG1sRU5USVRZPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48Qj5wYXJzZShOb2RlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwiPlhtbEVOVElUSUVTLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj48Q09ERT5YbWxFTlRJVElFUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PEI+cGFyc2UoTm9kZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uRmFjdG9yeS5odG1sIj5YbWxEdXJhdGlvbi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+PENPREU+WG1sRHVyYXRpb248L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48Qj5wYXJzZShOb2RlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuRmFjdG9yeS5odG1sIj5YbWxEb3VibGUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj48Q09ERT5YbWxEb3VibGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PEI+cGFyc2UoTm9kZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwiPlhtbERlY2ltYWwuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+PENPREU+WG1sRGVjaW1hbDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PEI+cGFyc2UoTm9kZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sIj5YbWxEYXRlVGltZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+PENPREU+WG1sRGF0ZVRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PEI+cGFyc2UoTm9kZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5GYWN0b3J5Lmh0bWwiPlhtbERhdGUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+PENPREU+WG1sRGF0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48Qj5wYXJzZShOb2RlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCI+WG1sQnl0ZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Q09ERT5YbWxCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjxCPnBhcnNlKE5vZGUpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sIj5YbWxCb29sZWFuLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPjxDT0RFPlhtbEJvb2xlYW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48Qj5wYXJzZShOb2RlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuRmFjdG9yeS5odG1sIj5YbWxCYXNlNjRCaW5hcnkuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj48Q09ERT5YbWxCYXNlNjRCaW5hcnk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48Qj5wYXJzZShOb2RlKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sIj5YbWxBbnlVUkkuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj48Q09ERT5YbWxBbnlVUkk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PEI+cGFyc2UoTm9kZSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+PENPREU+WG1sQW55U2ltcGxlVHlwZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKE5vZGUsIFNjaGVtYVR5cGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+U2NoZW1hVHlwZUxvYWRlcjwvQT4KLTxERD5QYXJzZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShOb2RlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShOb2RlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZExvbmcuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj48Q09ERT5YbWxVbnNpZ25lZExvbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoTm9kZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZEludC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRJbnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKE5vZGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwiPlhtbFVuc2lnbmVkQnl0ZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShOb2RlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5GYWN0b3J5Lmh0bWwiPlhtbFRva2VuLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Q09ERT5YbWxUb2tlbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKE5vZGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuRmFjdG9yeS5odG1sIj5YbWxUaW1lLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPjxDT0RFPlhtbFRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKE5vZGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5GYWN0b3J5Lmh0bWwiPlhtbFN0cmluZy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPjxDT0RFPlhtbFN0cmluZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShOb2RlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5GYWN0b3J5Lmh0bWwiPlhtbFNob3J0LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj48Q09ERT5YbWxTaG9ydDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShOb2RlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwiPlhtbFFOYW1lLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj48Q09ERT5YbWxRTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoTm9kZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShOb2RlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIj5YbWxPYmplY3QuRmFjdG9yeTwvQT4KLTxERD5Db252ZXJ0cyB0aGUgZ2l2ZW4gRE9NIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPjxDT0RFPk5vZGU8L0NPREU+PC9BPiBpbnRvIGFuIFhtbE9iamVjdC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShOb2RlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwiPlhtbE5PVEFUSU9OLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj48Q09ERT5YbWxOT1RBVElPTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKE5vZGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPjxDT0RFPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKE5vZGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoTm9kZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKE5vZGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLkZhY3RvcnkuaHRtbCI+WG1sTk1UT0tFTlMuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU5TPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoTm9kZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwiPlhtbE5NVE9LRU4uRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+PENPREU+WG1sTk1UT0tFTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoTm9kZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShOb2RlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuRmFjdG9yeS5odG1sIj5YbWxOQ05hbWUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj48Q09ERT5YbWxOQ05hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShOb2RlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbCI+WG1sTmFtZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj48Q09ERT5YbWxOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoTm9kZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwiPlhtbExvbmcuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+PENPREU+WG1sTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShOb2RlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5GYWN0b3J5Lmh0bWwiPlhtbExhbmd1YWdlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj48Q09ERT5YbWxMYW5ndWFnZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKE5vZGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbEludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKE5vZGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwiPlhtbEludC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPjxDT0RFPlhtbEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoTm9kZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLkZhY3RvcnkuaHRtbCI+WG1sSURSRUZTLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+PENPREU+WG1sSURSRUZTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKE5vZGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLkZhY3RvcnkuaHRtbCI+WG1sSURSRUYuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPjxDT0RFPlhtbElEUkVGPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKE5vZGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElELkZhY3RvcnkuaHRtbCI+WG1sSUQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPjxDT0RFPlhtbElEPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5LkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShOb2RlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuRmFjdG9yeS5odG1sIj5YbWxIZXhCaW5hcnkuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj48Q09ERT5YbWxIZXhCaW5hcnk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShOb2RlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCI+WG1sR1llYXJNb250aC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj48Q09ERT5YbWxHWWVhck1vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKE5vZGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbCI+WG1sR1llYXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPjxDT0RFPlhtbEdZZWFyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShOb2RlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuRmFjdG9yeS5odG1sIj5YbWxHTW9udGhEYXkuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj48Q09ERT5YbWxHTW9udGhEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKE5vZGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5GYWN0b3J5Lmh0bWwiPlhtbEdNb250aC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPjxDT0RFPlhtbEdNb250aDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKE5vZGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sIj5YbWxHRGF5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPjxDT0RFPlhtbEdEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoTm9kZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuRmFjdG9yeS5odG1sIj5YbWxGbG9hdC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+PENPREU+WG1sRmxvYXQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKE5vZGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5GYWN0b3J5Lmh0bWwiPlhtbEVOVElUWS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPjxDT0RFPlhtbEVOVElUWTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShOb2RlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwiPlhtbEVOVElUSUVTLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj48Q09ERT5YbWxFTlRJVElFUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShOb2RlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5GYWN0b3J5Lmh0bWwiPlhtbER1cmF0aW9uLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj48Q09ERT5YbWxEdXJhdGlvbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoTm9kZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLkZhY3RvcnkuaHRtbCI+WG1sRG91YmxlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+PENPREU+WG1sRG91YmxlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoTm9kZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwiPlhtbERlY2ltYWwuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+PENPREU+WG1sRGVjaW1hbDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShOb2RlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwiPlhtbERhdGVUaW1lLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj48Q09ERT5YbWxEYXRlVGltZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKE5vZGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sIj5YbWxEYXRlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPjxDT0RFPlhtbERhdGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShOb2RlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCI+WG1sQnl0ZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Q09ERT5YbWxCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoTm9kZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5GYWN0b3J5Lmh0bWwiPlhtbEJvb2xlYW4uRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+PENPREU+WG1sQm9vbGVhbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoTm9kZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+PENPREU+WG1sQmFzZTY0QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShOb2RlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sIj5YbWxBbnlVUkkuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj48Q09ERT5YbWxBbnlVUkk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShOb2RlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+WG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj48Qj5wYXJzZShSZWFkZXIpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZFNob3J0LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlcikiPjxCPnBhcnNlKFJlYWRlcik8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRMb25nLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+PENPREU+WG1sVW5zaWduZWRMb25nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlcikiPjxCPnBhcnNlKFJlYWRlcik8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZEludC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRJbnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlcikiPjxCPnBhcnNlKFJlYWRlcik8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRCeXRlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+PENPREU+WG1sVW5zaWduZWRCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlcikiPjxCPnBhcnNlKFJlYWRlcik8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sIj5YbWxUb2tlbi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+PENPREU+WG1sVG9rZW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj48Qj5wYXJzZShSZWFkZXIpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuRmFjdG9yeS5odG1sIj5YbWxUaW1lLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPjxDT0RFPlhtbFRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlcikiPjxCPnBhcnNlKFJlYWRlcik8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sU3RyaW5nLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+PENPREU+WG1sU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlcikiPjxCPnBhcnNlKFJlYWRlcik8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuRmFjdG9yeS5odG1sIj5YbWxTaG9ydC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+PENPREU+WG1sU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+PEI+cGFyc2UoUmVhZGVyKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwiPlhtbFFOYW1lLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj48Q09ERT5YbWxRTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+PEI+cGFyc2UoUmVhZGVyKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxQb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlcikiPjxCPnBhcnNlKFJlYWRlcik8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIHRoZSBnaXZlbiA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+PENPREU+UmVhZGVyPC9DT0RFPjwvQT4gYXMgWE1MLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+PEI+cGFyc2UoUmVhZGVyKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwiPlhtbE5PVEFUSU9OLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj48Q09ERT5YbWxOT1RBVElPTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlcikiPjxCPnBhcnNlKFJlYWRlcik8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+PENPREU+WG1sTm9ybWFsaXplZFN0cmluZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+PEI+cGFyc2UoUmVhZGVyKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlcikiPjxCPnBhcnNlKFJlYWRlcik8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlcikiPjxCPnBhcnNlKFJlYWRlcik8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuRmFjdG9yeS5odG1sIj5YbWxOTVRPS0VOUy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+PENPREU+WG1sTk1UT0tFTlM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj48Qj5wYXJzZShSZWFkZXIpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uRmFjdG9yeS5odG1sIj5YbWxOTVRPS0VOLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlcikiPjxCPnBhcnNlKFJlYWRlcik8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj48Qj5wYXJzZShSZWFkZXIpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5GYWN0b3J5Lmh0bWwiPlhtbE5DTmFtZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPjxDT0RFPlhtbE5DTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlcikiPjxCPnBhcnNlKFJlYWRlcik8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwiPlhtbE5hbWUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+PENPREU+WG1sTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlcikiPjxCPnBhcnNlKFJlYWRlcik8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwiPlhtbExvbmcuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+PENPREU+WG1sTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj48Qj5wYXJzZShSZWFkZXIpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLkZhY3RvcnkuaHRtbCI+WG1sTGFuZ3VhZ2UuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPjxDT0RFPlhtbExhbmd1YWdlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+PEI+cGFyc2UoUmVhZGVyKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj48Q09ERT5YbWxJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj48Qj5wYXJzZShSZWFkZXIpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwiPlhtbEludC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPjxDT0RFPlhtbEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+PEI+cGFyc2UoUmVhZGVyKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuRmFjdG9yeS5odG1sIj5YbWxJRFJFRlMuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj48Q09ERT5YbWxJRFJFRlM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+PEI+cGFyc2UoUmVhZGVyKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5GYWN0b3J5Lmh0bWwiPlhtbElEUkVGLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj48Q09ERT5YbWxJRFJFRjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj48Qj5wYXJzZShSZWFkZXIpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElELkZhY3RvcnkuaHRtbCI+WG1sSUQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPjxDT0RFPlhtbElEPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj48Qj5wYXJzZShSZWFkZXIpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwiPlhtbEhleEJpbmFyeS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEhleEJpbmFyeTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlcikiPjxCPnBhcnNlKFJlYWRlcik8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwiPlhtbEdZZWFyTW9udGguRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+PENPREU+WG1sR1llYXJNb250aDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj48Qj5wYXJzZShSZWFkZXIpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbCI+WG1sR1llYXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPjxDT0RFPlhtbEdZZWFyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj48Qj5wYXJzZShSZWFkZXIpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwiPlhtbEdNb250aERheS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPjxDT0RFPlhtbEdNb250aERheTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+PEI+cGFyc2UoUmVhZGVyKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sIj5YbWxHTW9udGguRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj48Q09ERT5YbWxHTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj48Qj5wYXJzZShSZWFkZXIpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sIj5YbWxHRGF5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPjxDT0RFPlhtbEdEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+PEI+cGFyc2UoUmVhZGVyKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5GYWN0b3J5Lmh0bWwiPlhtbEZsb2F0LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj48Q09ERT5YbWxGbG9hdDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+PEI+cGFyc2UoUmVhZGVyKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuRmFjdG9yeS5odG1sIj5YbWxFTlRJVFkuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj48Q09ERT5YbWxFTlRJVFk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+PEI+cGFyc2UoUmVhZGVyKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwiPlhtbEVOVElUSUVTLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj48Q09ERT5YbWxFTlRJVElFUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj48Qj5wYXJzZShSZWFkZXIpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLkZhY3RvcnkuaHRtbCI+WG1sRHVyYXRpb24uRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPjxDT0RFPlhtbER1cmF0aW9uPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj48Qj5wYXJzZShSZWFkZXIpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwiPlhtbERvdWJsZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPjxDT0RFPlhtbERvdWJsZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlcikiPjxCPnBhcnNlKFJlYWRlcik8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwiPlhtbERlY2ltYWwuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+PENPREU+WG1sRGVjaW1hbDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj48Qj5wYXJzZShSZWFkZXIpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLkZhY3RvcnkuaHRtbCI+WG1sRGF0ZVRpbWUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPjxDT0RFPlhtbERhdGVUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+PEI+cGFyc2UoUmVhZGVyKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLkZhY3RvcnkuaHRtbCI+WG1sRGF0ZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj48Q09ERT5YbWxEYXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+PEI+cGFyc2UoUmVhZGVyKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCI+WG1sQnl0ZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Q09ERT5YbWxCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+PEI+cGFyc2UoUmVhZGVyKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLkZhY3RvcnkuaHRtbCI+WG1sQm9vbGVhbi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj48Q09ERT5YbWxCb29sZWFuPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj48Qj5wYXJzZShSZWFkZXIpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwiPlhtbEJhc2U2NEJpbmFyeS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEJhc2U2NEJpbmFyeTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+PEI+cGFyc2UoUmVhZGVyKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sIj5YbWxBbnlVUkkuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj48Q09ERT5YbWxBbnlVUkk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj48Qj5wYXJzZShSZWFkZXIpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPjxDT0RFPlhtbEFueVNpbXBsZVR5cGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFJlYWRlciwgU2NoZW1hVHlwZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sIj5TY2hlbWFUeXBlTG9hZGVyPC9BPgotPEREPlBhcnNlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gdHlwZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShSZWFkZXIsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZFNob3J0LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoUmVhZGVyLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZExvbmcuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj48Q09ERT5YbWxVbnNpZ25lZExvbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShSZWFkZXIsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50LkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRJbnQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFJlYWRlciwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRCeXRlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+PENPREU+WG1sVW5zaWduZWRCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoUmVhZGVyLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5GYWN0b3J5Lmh0bWwiPlhtbFRva2VuLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Q09ERT5YbWxUb2tlbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoUmVhZGVyLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLkZhY3RvcnkuaHRtbCI+WG1sVGltZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj48Q09ERT5YbWxUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFJlYWRlciwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sU3RyaW5nLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+PENPREU+WG1sU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoUmVhZGVyLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5GYWN0b3J5Lmh0bWwiPlhtbFNob3J0LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj48Q09ERT5YbWxTaG9ydDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFJlYWRlciwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuRmFjdG9yeS5odG1sIj5YbWxRTmFtZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+PENPREU+WG1sUU5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoUmVhZGVyLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxQb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoUmVhZGVyLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIj5YbWxPYmplY3QuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgdGhlIGdpdmVuIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj48Q09ERT5SZWFkZXI8L0NPREU+PC9BPiBhcyBYTUwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFJlYWRlciwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sIj5YbWxOT1RBVElPTi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+PENPREU+WG1sTk9UQVRJT048L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFJlYWRlciwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+PENPREU+WG1sTm9ybWFsaXplZFN0cmluZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShSZWFkZXIsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShSZWFkZXIsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFJlYWRlciwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuRmFjdG9yeS5odG1sIj5YbWxOTVRPS0VOUy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+PENPREU+WG1sTk1UT0tFTlM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFJlYWRlciwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwiPlhtbE5NVE9LRU4uRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+PENPREU+WG1sTk1UT0tFTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShSZWFkZXIsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShSZWFkZXIsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5GYWN0b3J5Lmh0bWwiPlhtbE5DTmFtZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPjxDT0RFPlhtbE5DTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoUmVhZGVyLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbCI+WG1sTmFtZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj48Q09ERT5YbWxOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShSZWFkZXIsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuRmFjdG9yeS5odG1sIj5YbWxMb25nLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPjxDT0RFPlhtbExvbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShSZWFkZXIsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLkZhY3RvcnkuaHRtbCI+WG1sTGFuZ3VhZ2UuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPjxDT0RFPlhtbExhbmd1YWdlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShSZWFkZXIsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbEludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoUmVhZGVyLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuRmFjdG9yeS5odG1sIj5YbWxJbnQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj48Q09ERT5YbWxJbnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoUmVhZGVyLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuRmFjdG9yeS5odG1sIj5YbWxJRFJFRlMuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj48Q09ERT5YbWxJRFJFRlM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShSZWFkZXIsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLkZhY3RvcnkuaHRtbCI+WG1sSURSRUYuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPjxDT0RFPlhtbElEUkVGPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElELkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoUmVhZGVyLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwiPlhtbElELkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj48Q09ERT5YbWxJRDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShSZWFkZXIsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwiPlhtbEhleEJpbmFyeS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEhleEJpbmFyeTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoUmVhZGVyLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCI+WG1sR1llYXJNb250aC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj48Q09ERT5YbWxHWWVhck1vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoUmVhZGVyLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5GYWN0b3J5Lmh0bWwiPlhtbEdZZWFyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj48Q09ERT5YbWxHWWVhcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShSZWFkZXIsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwiPlhtbEdNb250aERheS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPjxDT0RFPlhtbEdNb250aERheTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShSZWFkZXIsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5GYWN0b3J5Lmh0bWwiPlhtbEdNb250aC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPjxDT0RFPlhtbEdNb250aDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoUmVhZGVyLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5LkZhY3RvcnkuaHRtbCI+WG1sR0RheS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj48Q09ERT5YbWxHRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoUmVhZGVyLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5GYWN0b3J5Lmh0bWwiPlhtbEZsb2F0LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj48Q09ERT5YbWxGbG9hdDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShSZWFkZXIsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5GYWN0b3J5Lmh0bWwiPlhtbEVOVElUWS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPjxDT0RFPlhtbEVOVElUWTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFJlYWRlciwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuRmFjdG9yeS5odG1sIj5YbWxFTlRJVElFUy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+PENPREU+WG1sRU5USVRJRVM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShSZWFkZXIsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLkZhY3RvcnkuaHRtbCI+WG1sRHVyYXRpb24uRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPjxDT0RFPlhtbER1cmF0aW9uPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFJlYWRlciwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLkZhY3RvcnkuaHRtbCI+WG1sRG91YmxlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+PENPREU+WG1sRG91YmxlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShSZWFkZXIsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuRmFjdG9yeS5odG1sIj5YbWxEZWNpbWFsLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPjxDT0RFPlhtbERlY2ltYWw8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShSZWFkZXIsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLkZhY3RvcnkuaHRtbCI+WG1sRGF0ZVRpbWUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPjxDT0RFPlhtbERhdGVUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShSZWFkZXIsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sIj5YbWxEYXRlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPjxDT0RFPlhtbERhdGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFJlYWRlciwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5GYWN0b3J5Lmh0bWwiPlhtbEJ5dGUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+PENPREU+WG1sQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoUmVhZGVyLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLkZhY3RvcnkuaHRtbCI+WG1sQm9vbGVhbi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj48Q09ERT5YbWxCb29sZWFuPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFJlYWRlciwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+PENPREU+WG1sQmFzZTY0QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFJlYWRlciwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLkZhY3RvcnkuaHRtbCI+WG1sQW55VVJJLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+PENPREU+WG1sQW55VVJJPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShSZWFkZXIsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPjxDT0RFPlhtbEFueVNpbXBsZVR5cGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmFjdG9yeUhvb2suaHRtbCNwYXJzZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXIsIGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoU2NoZW1hVHlwZUxvYWRlciwgSW5wdXRTdHJlYW0sIFNjaGVtYVR5cGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLmh0bWwiPlhtbEZhY3RvcnlIb29rPC9BPgotPEREPkhvb2tzIEZhY3RvcnkucGFyc2UgY2FsbHMKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLmh0bWwjcGFyc2Uob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyLCBvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFNjaGVtYVR5cGVMb2FkZXIsIE5vZGUsIFNjaGVtYVR5cGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLmh0bWwiPlhtbEZhY3RvcnlIb29rPC9BPgotPEREPkhvb2tzIEZhY3RvcnkucGFyc2UgY2FsbHMKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLmh0bWwjcGFyc2Uob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyLCBqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShTY2hlbWFUeXBlTG9hZGVyLCBSZWFkZXIsIFNjaGVtYVR5cGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLmh0bWwiPlhtbEZhY3RvcnlIb29rPC9BPgotPEREPkhvb2tzIEZhY3RvcnkucGFyc2UgY2FsbHMKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLmh0bWwjcGFyc2Uob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyLCBqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFNjaGVtYVR5cGVMb2FkZXIsIFN0cmluZywgU2NoZW1hVHlwZSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmFjdG9yeUhvb2suaHRtbCI+WG1sRmFjdG9yeUhvb2s8L0E+Ci08REQ+SG9va3MgRmFjdG9yeS5wYXJzZSBjYWxscwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmFjdG9yeUhvb2suaHRtbCNwYXJzZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXIsIHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoU2NoZW1hVHlwZUxvYWRlciwgWE1MSW5wdXRTdHJlYW0sIFNjaGVtYVR5cGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLmh0bWwiPlhtbEZhY3RvcnlIb29rPC9BPgotPEREPkhvb2tzIEZhY3RvcnkucGFyc2UgY2FsbHMKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48Qj5wYXJzZShTdHJpbmcpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZFNob3J0LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+cGFyc2UoU3RyaW5nKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZExvbmcuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj48Q09ERT5YbWxVbnNpZ25lZExvbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48Qj5wYXJzZShTdHJpbmcpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50LkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRJbnQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjxCPnBhcnNlKFN0cmluZyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRCeXRlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+PENPREU+WG1sVW5zaWduZWRCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+cGFyc2UoU3RyaW5nKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5GYWN0b3J5Lmh0bWwiPlhtbFRva2VuLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Q09ERT5YbWxUb2tlbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+cGFyc2UoU3RyaW5nKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLkZhY3RvcnkuaHRtbCI+WG1sVGltZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj48Q09ERT5YbWxUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjxCPnBhcnNlKFN0cmluZyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sU3RyaW5nLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+PENPREU+WG1sU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+cGFyc2UoU3RyaW5nKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5GYWN0b3J5Lmh0bWwiPlhtbFNob3J0LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj48Q09ERT5YbWxTaG9ydDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjxCPnBhcnNlKFN0cmluZyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuRmFjdG9yeS5odG1sIj5YbWxRTmFtZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+PENPREU+WG1sUU5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+cGFyc2UoU3RyaW5nKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxQb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+cGFyc2UoU3RyaW5nKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIj5YbWxPYmplY3QuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgdGhlIGdpdmVuIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPjxDT0RFPlN0cmluZzwvQ09ERT48L0E+IGFzIFhNTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+cGFyc2UoU3RyaW5nKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwiPlhtbE5PVEFUSU9OLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj48Q09ERT5YbWxOT1RBVElPTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+cGFyc2UoU3RyaW5nKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj48Q09ERT5YbWxOb3JtYWxpemVkU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjxCPnBhcnNlKFN0cmluZyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjxCPnBhcnNlKFN0cmluZyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+cGFyc2UoU3RyaW5nKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwiPlhtbE5NVE9LRU5TLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj48Q09ERT5YbWxOTVRPS0VOUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+cGFyc2UoU3RyaW5nKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLkZhY3RvcnkuaHRtbCI+WG1sTk1UT0tFTi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Q09ERT5YbWxOTVRPS0VOPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjxCPnBhcnNlKFN0cmluZyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjxCPnBhcnNlKFN0cmluZyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCI+WG1sTkNOYW1lLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+PENPREU+WG1sTkNOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48Qj5wYXJzZShTdHJpbmcpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuRmFjdG9yeS5odG1sIj5YbWxOYW1lLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPjxDT0RFPlhtbE5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjxCPnBhcnNlKFN0cmluZyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwiPlhtbExvbmcuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+PENPREU+WG1sTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjxCPnBhcnNlKFN0cmluZyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sIj5YbWxMYW5ndWFnZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+PENPREU+WG1sTGFuZ3VhZ2U8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjxCPnBhcnNlKFN0cmluZyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbEludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+PENPREU+WG1sSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48Qj5wYXJzZShTdHJpbmcpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwiPlhtbEludC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPjxDT0RFPlhtbEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48Qj5wYXJzZShTdHJpbmcpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwiPlhtbElEUkVGUy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPjxDT0RFPlhtbElEUkVGUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjxCPnBhcnNlKFN0cmluZyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sIj5YbWxJRFJFRi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+PENPREU+WG1sSURSRUY8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48Qj5wYXJzZShTdHJpbmcpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElELkZhY3RvcnkuaHRtbCI+WG1sSUQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPjxDT0RFPlhtbElEPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjxCPnBhcnNlKFN0cmluZyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5LkZhY3RvcnkuaHRtbCI+WG1sSGV4QmluYXJ5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+PENPREU+WG1sSGV4QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48Qj5wYXJzZShTdHJpbmcpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguRmFjdG9yeS5odG1sIj5YbWxHWWVhck1vbnRoLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPjxDT0RFPlhtbEdZZWFyTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48Qj5wYXJzZShTdHJpbmcpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbCI+WG1sR1llYXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPjxDT0RFPlhtbEdZZWFyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjxCPnBhcnNlKFN0cmluZyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCI+WG1sR01vbnRoRGF5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+PENPREU+WG1sR01vbnRoRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjxCPnBhcnNlKFN0cmluZyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLkZhY3RvcnkuaHRtbCI+WG1sR01vbnRoLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+PENPREU+WG1sR01vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48Qj5wYXJzZShTdHJpbmcpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sIj5YbWxHRGF5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPjxDT0RFPlhtbEdEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48Qj5wYXJzZShTdHJpbmcpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LkZhY3RvcnkuaHRtbCI+WG1sRmxvYXQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPjxDT0RFPlhtbEZsb2F0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjxCPnBhcnNlKFN0cmluZyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLkZhY3RvcnkuaHRtbCI+WG1sRU5USVRZLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+PENPREU+WG1sRU5USVRZPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+cGFyc2UoU3RyaW5nKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwiPlhtbEVOVElUSUVTLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj48Q09ERT5YbWxFTlRJVElFUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjxCPnBhcnNlKFN0cmluZyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uRmFjdG9yeS5odG1sIj5YbWxEdXJhdGlvbi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+PENPREU+WG1sRHVyYXRpb248L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+cGFyc2UoU3RyaW5nKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuRmFjdG9yeS5odG1sIj5YbWxEb3VibGUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj48Q09ERT5YbWxEb3VibGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjxCPnBhcnNlKFN0cmluZyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwiPlhtbERlY2ltYWwuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+PENPREU+WG1sRGVjaW1hbDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjxCPnBhcnNlKFN0cmluZyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sIj5YbWxEYXRlVGltZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+PENPREU+WG1sRGF0ZVRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjxCPnBhcnNlKFN0cmluZyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5GYWN0b3J5Lmh0bWwiPlhtbERhdGUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+PENPREU+WG1sRGF0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+cGFyc2UoU3RyaW5nKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCI+WG1sQnl0ZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Q09ERT5YbWxCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48Qj5wYXJzZShTdHJpbmcpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sIj5YbWxCb29sZWFuLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPjxDT0RFPlhtbEJvb2xlYW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+cGFyc2UoU3RyaW5nKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuRmFjdG9yeS5odG1sIj5YbWxCYXNlNjRCaW5hcnkuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj48Q09ERT5YbWxCYXNlNjRCaW5hcnk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+cGFyc2UoU3RyaW5nKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sIj5YbWxBbnlVUkkuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj48Q09ERT5YbWxBbnlVUkk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjxCPnBhcnNlKFN0cmluZyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+PENPREU+WG1sQW55U2ltcGxlVHlwZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShTdHJpbmcsIFNjaGVtYVR5cGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+U2NoZW1hVHlwZUxvYWRlcjwvQT4KLTxERD5QYXJzZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShTdHJpbmcsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZFNob3J0LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShTdHJpbmcsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5GYWN0b3J5Lmh0bWwiPlhtbFVuc2lnbmVkTG9uZy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoU3RyaW5nLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5GYWN0b3J5Lmh0bWwiPlhtbFVuc2lnbmVkSW50LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFN0cmluZywgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRCeXRlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+PENPREU+WG1sVW5zaWduZWRCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShTdHJpbmcsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCI+WG1sVG9rZW4uRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPjxDT0RFPlhtbFRva2VuPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFN0cmluZywgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5GYWN0b3J5Lmh0bWwiPlhtbFRpbWUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+PENPREU+WG1sVGltZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFN0cmluZywgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sU3RyaW5nLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+PENPREU+WG1sU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShTdHJpbmcsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCI+WG1sU2hvcnQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPjxDT0RFPlhtbFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShTdHJpbmcsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLkZhY3RvcnkuaHRtbCI+WG1sUU5hbWUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPjxDT0RFPlhtbFFOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoU3RyaW5nLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxQb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShTdHJpbmcsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPlhtbE9iamVjdC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyB0aGUgZ2l2ZW4gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+PENPREU+U3RyaW5nPC9DT0RFPjwvQT4gYXMgWE1MLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFN0cmluZywgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sIj5YbWxOT1RBVElPTi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+PENPREU+WG1sTk9UQVRJT048L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoU3RyaW5nLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj48Q09ERT5YbWxOb3JtYWxpemVkU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoU3RyaW5nLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShTdHJpbmcsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoU3RyaW5nLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwiPlhtbE5NVE9LRU5TLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj48Q09ERT5YbWxOTVRPS0VOUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShTdHJpbmcsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uRmFjdG9yeS5odG1sIj5YbWxOTVRPS0VOLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShTdHJpbmcsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFN0cmluZywgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCI+WG1sTkNOYW1lLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+PENPREU+WG1sTkNOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFN0cmluZywgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwiPlhtbE5hbWUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+PENPREU+WG1sTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShTdHJpbmcsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuRmFjdG9yeS5odG1sIj5YbWxMb25nLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPjxDT0RFPlhtbExvbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFN0cmluZywgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sIj5YbWxMYW5ndWFnZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+PENPREU+WG1sTGFuZ3VhZ2U8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoU3RyaW5nLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj48Q09ERT5YbWxJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoU3RyaW5nLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuRmFjdG9yeS5odG1sIj5YbWxJbnQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj48Q09ERT5YbWxJbnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShTdHJpbmcsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwiPlhtbElEUkVGUy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPjxDT0RFPlhtbElEUkVGUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoU3RyaW5nLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5GYWN0b3J5Lmh0bWwiPlhtbElEUkVGLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj48Q09ERT5YbWxJRFJFRjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoU3RyaW5nLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwiPlhtbElELkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj48Q09ERT5YbWxJRDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFN0cmluZywgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5LkZhY3RvcnkuaHRtbCI+WG1sSGV4QmluYXJ5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+PENPREU+WG1sSGV4QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFN0cmluZywgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwiPlhtbEdZZWFyTW9udGguRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+PENPREU+WG1sR1llYXJNb250aDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoU3RyaW5nLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5GYWN0b3J5Lmh0bWwiPlhtbEdZZWFyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj48Q09ERT5YbWxHWWVhcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFN0cmluZywgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCI+WG1sR01vbnRoRGF5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+PENPREU+WG1sR01vbnRoRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoU3RyaW5nLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sIj5YbWxHTW9udGguRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj48Q09ERT5YbWxHTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoU3RyaW5nLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5LkZhY3RvcnkuaHRtbCI+WG1sR0RheS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj48Q09ERT5YbWxHRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShTdHJpbmcsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LkZhY3RvcnkuaHRtbCI+WG1sRmxvYXQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPjxDT0RFPlhtbEZsb2F0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoU3RyaW5nLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuRmFjdG9yeS5odG1sIj5YbWxFTlRJVFkuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj48Q09ERT5YbWxFTlRJVFk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFN0cmluZywgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuRmFjdG9yeS5odG1sIj5YbWxFTlRJVElFUy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+PENPREU+WG1sRU5USVRJRVM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFN0cmluZywgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uRmFjdG9yeS5odG1sIj5YbWxEdXJhdGlvbi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+PENPREU+WG1sRHVyYXRpb248L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShTdHJpbmcsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwiPlhtbERvdWJsZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPjxDT0RFPlhtbERvdWJsZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShTdHJpbmcsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuRmFjdG9yeS5odG1sIj5YbWxEZWNpbWFsLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPjxDT0RFPlhtbERlY2ltYWw8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFN0cmluZywgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sIj5YbWxEYXRlVGltZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+PENPREU+WG1sRGF0ZVRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoU3RyaW5nLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLkZhY3RvcnkuaHRtbCI+WG1sRGF0ZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj48Q09ERT5YbWxEYXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFN0cmluZywgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5GYWN0b3J5Lmh0bWwiPlhtbEJ5dGUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+PENPREU+WG1sQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShTdHJpbmcsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sIj5YbWxCb29sZWFuLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPjxDT0RFPlhtbEJvb2xlYW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShTdHJpbmcsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwiPlhtbEJhc2U2NEJpbmFyeS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEJhc2U2NEJpbmFyeTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFN0cmluZywgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLkZhY3RvcnkuaHRtbCI+WG1sQW55VVJJLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+PENPREU+WG1sQW55VVJJPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFN0cmluZywgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+PENPREU+WG1sQW55U2ltcGxlVHlwZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj48Qj5wYXJzZShVUkwpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZFNob3J0LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj48Qj5wYXJzZShVUkwpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5GYWN0b3J5Lmh0bWwiPlhtbFVuc2lnbmVkTG9uZy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+PEI+cGFyc2UoVVJMKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5GYWN0b3J5Lmh0bWwiPlhtbFVuc2lnbmVkSW50LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPjxCPnBhcnNlKFVSTCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRCeXRlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+PENPREU+WG1sVW5zaWduZWRCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj48Qj5wYXJzZShVUkwpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCI+WG1sVG9rZW4uRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPjxDT0RFPlhtbFRva2VuPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPjxCPnBhcnNlKFVSTCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5GYWN0b3J5Lmh0bWwiPlhtbFRpbWUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+PENPREU+WG1sVGltZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPjxCPnBhcnNlKFVSTCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sU3RyaW5nLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+PENPREU+WG1sU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj48Qj5wYXJzZShVUkwpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCI+WG1sU2hvcnQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPjxDT0RFPlhtbFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj48Qj5wYXJzZShVUkwpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLkZhY3RvcnkuaHRtbCI+WG1sUU5hbWUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPjxDT0RFPlhtbFFOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+PEI+cGFyc2UoVVJMKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxQb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj48Qj5wYXJzZShVUkwpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPlhtbE9iamVjdC5GYWN0b3J5PC9BPgotPEREPkRvd25sb2FkcyB0aGUgZ2l2ZW4gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj48Q09ERT5VUkw8L0NPREU+PC9BPiBhcyBYTUwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+PEI+cGFyc2UoVVJMKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwiPlhtbE5PVEFUSU9OLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj48Q09ERT5YbWxOT1RBVElPTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj48Qj5wYXJzZShVUkwpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPjxDT0RFPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj48Qj5wYXJzZShVUkwpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPjxCPnBhcnNlKFVSTCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj48Qj5wYXJzZShVUkwpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLkZhY3RvcnkuaHRtbCI+WG1sTk1UT0tFTlMuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU5TPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPjxCPnBhcnNlKFVSTCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwiPlhtbE5NVE9LRU4uRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+PENPREU+WG1sTk1UT0tFTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPjxCPnBhcnNlKFVSTCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+PEI+cGFyc2UoVVJMKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuRmFjdG9yeS5odG1sIj5YbWxOQ05hbWUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj48Q09ERT5YbWxOQ05hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+PEI+cGFyc2UoVVJMKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbCI+WG1sTmFtZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj48Q09ERT5YbWxOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPjxCPnBhcnNlKFVSTCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwiPlhtbExvbmcuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+PENPREU+WG1sTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+PEI+cGFyc2UoVVJMKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5GYWN0b3J5Lmh0bWwiPlhtbExhbmd1YWdlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj48Q09ERT5YbWxMYW5ndWFnZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj48Qj5wYXJzZShVUkwpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbEludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj48Qj5wYXJzZShVUkwpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwiPlhtbEludC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPjxDT0RFPlhtbEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPjxCPnBhcnNlKFVSTCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLkZhY3RvcnkuaHRtbCI+WG1sSURSRUZTLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+PENPREU+WG1sSURSRUZTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj48Qj5wYXJzZShVUkwpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLkZhY3RvcnkuaHRtbCI+WG1sSURSRUYuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPjxDT0RFPlhtbElEUkVGPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElELkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj48Qj5wYXJzZShVUkwpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElELkZhY3RvcnkuaHRtbCI+WG1sSUQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPjxDT0RFPlhtbElEPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+PEI+cGFyc2UoVVJMKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuRmFjdG9yeS5odG1sIj5YbWxIZXhCaW5hcnkuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj48Q09ERT5YbWxIZXhCaW5hcnk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+PEI+cGFyc2UoVVJMKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCI+WG1sR1llYXJNb250aC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj48Q09ERT5YbWxHWWVhck1vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj48Qj5wYXJzZShVUkwpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbCI+WG1sR1llYXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPjxDT0RFPlhtbEdZZWFyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+PEI+cGFyc2UoVVJMKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuRmFjdG9yeS5odG1sIj5YbWxHTW9udGhEYXkuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj48Q09ERT5YbWxHTW9udGhEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj48Qj5wYXJzZShVUkwpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5GYWN0b3J5Lmh0bWwiPlhtbEdNb250aC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPjxDT0RFPlhtbEdNb250aDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj48Qj5wYXJzZShVUkwpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sIj5YbWxHRGF5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPjxDT0RFPlhtbEdEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPjxCPnBhcnNlKFVSTCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuRmFjdG9yeS5odG1sIj5YbWxGbG9hdC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+PENPREU+WG1sRmxvYXQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj48Qj5wYXJzZShVUkwpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5GYWN0b3J5Lmh0bWwiPlhtbEVOVElUWS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPjxDT0RFPlhtbEVOVElUWTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+PEI+cGFyc2UoVVJMKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwiPlhtbEVOVElUSUVTLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj48Q09ERT5YbWxFTlRJVElFUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+PEI+cGFyc2UoVVJMKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5GYWN0b3J5Lmh0bWwiPlhtbER1cmF0aW9uLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj48Q09ERT5YbWxEdXJhdGlvbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPjxCPnBhcnNlKFVSTCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLkZhY3RvcnkuaHRtbCI+WG1sRG91YmxlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+PENPREU+WG1sRG91YmxlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPjxCPnBhcnNlKFVSTCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwiPlhtbERlY2ltYWwuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+PENPREU+WG1sRGVjaW1hbDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+PEI+cGFyc2UoVVJMKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwiPlhtbERhdGVUaW1lLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj48Q09ERT5YbWxEYXRlVGltZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj48Qj5wYXJzZShVUkwpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sIj5YbWxEYXRlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPjxDT0RFPlhtbERhdGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+PEI+cGFyc2UoVVJMKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCI+WG1sQnl0ZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Q09ERT5YbWxCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPjxCPnBhcnNlKFVSTCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5GYWN0b3J5Lmh0bWwiPlhtbEJvb2xlYW4uRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+PENPREU+WG1sQm9vbGVhbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPjxCPnBhcnNlKFVSTCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+PENPREU+WG1sQmFzZTY0QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+PEI+cGFyc2UoVVJMKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sIj5YbWxBbnlVUkkuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj48Q09ERT5YbWxBbnlVUkk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+PEI+cGFyc2UoVVJMKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+WG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoVVJMLCBTY2hlbWFUeXBlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXI8L0E+Ci08REQ+UGFyc2VzIGFuIGluc3RhbmNlIG9mIHRoZSBnaXZlbiB0eXBlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShVUkwsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZFNob3J0LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFVSTCwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRMb25nLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+PENPREU+WG1sVW5zaWduZWRMb25nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFVSTCwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZEludC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRJbnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFVSTCwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRCeXRlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+PENPREU+WG1sVW5zaWduZWRCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFVSTCwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sIj5YbWxUb2tlbi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+PENPREU+WG1sVG9rZW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShVUkwsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuRmFjdG9yeS5odG1sIj5YbWxUaW1lLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPjxDT0RFPlhtbFRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFVSTCwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sU3RyaW5nLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+PENPREU+WG1sU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFVSTCwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuRmFjdG9yeS5odG1sIj5YbWxTaG9ydC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+PENPREU+WG1sU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoVVJMLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwiPlhtbFFOYW1lLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj48Q09ERT5YbWxRTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoVVJMLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxQb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFVSTCwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+Ci08REQ+RG93bmxvYWRzIHRoZSBnaXZlbiA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPjxDT0RFPlVSTDwvQ09ERT48L0E+IGFzIFhNTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFVSTCwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sIj5YbWxOT1RBVElPTi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+PENPREU+WG1sTk9UQVRJT048L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShVUkwsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPjxDT0RFPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFVSTCwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShVUkwsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShVUkwsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLkZhY3RvcnkuaHRtbCI+WG1sTk1UT0tFTlMuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU5TPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoVVJMLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLkZhY3RvcnkuaHRtbCI+WG1sTk1UT0tFTi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Q09ERT5YbWxOTVRPS0VOPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShVUkwsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoVVJMLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuRmFjdG9yeS5odG1sIj5YbWxOQ05hbWUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj48Q09ERT5YbWxOQ05hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShVUkwsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuRmFjdG9yeS5odG1sIj5YbWxOYW1lLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPjxDT0RFPlhtbE5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShVUkwsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuRmFjdG9yeS5odG1sIj5YbWxMb25nLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPjxDT0RFPlhtbExvbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoVVJMLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5GYWN0b3J5Lmh0bWwiPlhtbExhbmd1YWdlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj48Q09ERT5YbWxMYW5ndWFnZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFVSTCwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbEludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+PENPREU+WG1sSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoVVJMLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuRmFjdG9yeS5odG1sIj5YbWxJbnQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj48Q09ERT5YbWxJbnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFVSTCwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLkZhY3RvcnkuaHRtbCI+WG1sSURSRUZTLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+PENPREU+WG1sSURSRUZTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFVSTCwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sIj5YbWxJRFJFRi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+PENPREU+WG1sSURSRUY8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoVVJMLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwiPlhtbElELkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj48Q09ERT5YbWxJRDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoVVJMLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuRmFjdG9yeS5odG1sIj5YbWxIZXhCaW5hcnkuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj48Q09ERT5YbWxIZXhCaW5hcnk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShVUkwsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguRmFjdG9yeS5odG1sIj5YbWxHWWVhck1vbnRoLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPjxDT0RFPlhtbEdZZWFyTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoVVJMLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5GYWN0b3J5Lmh0bWwiPlhtbEdZZWFyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj48Q09ERT5YbWxHWWVhcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoVVJMLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuRmFjdG9yeS5odG1sIj5YbWxHTW9udGhEYXkuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj48Q09ERT5YbWxHTW9udGhEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFVSTCwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLkZhY3RvcnkuaHRtbCI+WG1sR01vbnRoLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+PENPREU+WG1sR01vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoVVJMLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5LkZhY3RvcnkuaHRtbCI+WG1sR0RheS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj48Q09ERT5YbWxHRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFVSTCwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuRmFjdG9yeS5odG1sIj5YbWxGbG9hdC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+PENPREU+WG1sRmxvYXQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFVSTCwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLkZhY3RvcnkuaHRtbCI+WG1sRU5USVRZLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+PENPREU+WG1sRU5USVRZPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFVSTCwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuRmFjdG9yeS5odG1sIj5YbWxFTlRJVElFUy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+PENPREU+WG1sRU5USVRJRVM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoVVJMLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5GYWN0b3J5Lmh0bWwiPlhtbER1cmF0aW9uLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj48Q09ERT5YbWxEdXJhdGlvbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoVVJMLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuRmFjdG9yeS5odG1sIj5YbWxEb3VibGUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj48Q09ERT5YbWxEb3VibGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShVUkwsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuRmFjdG9yeS5odG1sIj5YbWxEZWNpbWFsLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPjxDT0RFPlhtbERlY2ltYWw8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoVVJMLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwiPlhtbERhdGVUaW1lLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj48Q09ERT5YbWxEYXRlVGltZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFVSTCwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5GYWN0b3J5Lmh0bWwiPlhtbERhdGUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+PENPREU+WG1sRGF0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFVSTCwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5GYWN0b3J5Lmh0bWwiPlhtbEJ5dGUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+PENPREU+WG1sQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFVSTCwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5GYWN0b3J5Lmh0bWwiPlhtbEJvb2xlYW4uRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+PENPREU+WG1sQm9vbGVhbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoVVJMLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuRmFjdG9yeS5odG1sIj5YbWxCYXNlNjRCaW5hcnkuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj48Q09ERT5YbWxCYXNlNjRCaW5hcnk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFVSTCwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLkZhY3RvcnkuaHRtbCI+WG1sQW55VVJJLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+PENPREU+WG1sQW55VVJJPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoVVJMLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+WG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRTaG9ydDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRMb25nLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+PENPREU+WG1sVW5zaWduZWRMb25nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50LkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50LkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRJbnQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEJ5dGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sIj5YbWxUb2tlbi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+PENPREU+WG1sVG9rZW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLkZhY3RvcnkuaHRtbCI+WG1sVGltZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj48Q09ERT5YbWxUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sIj5YbWxTdHJpbmcuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj48Q09ERT5YbWxTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuRmFjdG9yeS5odG1sIj5YbWxTaG9ydC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+PENPREU+WG1sU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuRmFjdG9yeS5odG1sIj5YbWxRTmFtZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+PENPREU+WG1sUU5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbFBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+Ci08REQ+TG9hZHMgdGhlIGdpdmVuIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+PENPREU+WE1MSW5wdXRTdHJlYW08L0NPREU+PC9BPiBpbnRvIGFuIFhtbE9iamVjdC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLkZhY3RvcnkuaHRtbCI+WG1sTk9UQVRJT04uRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPjxDT0RFPlhtbE5PVEFUSU9OPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+PENPREU+WG1sTm9ybWFsaXplZFN0cmluZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuRmFjdG9yeS5odG1sIj5YbWxOTVRPS0VOUy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+PENPREU+WG1sTk1UT0tFTlM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLkZhY3RvcnkuaHRtbCI+WG1sTk1UT0tFTi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Q09ERT5YbWxOTVRPS0VOPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5GYWN0b3J5Lmh0bWwiPlhtbE5DTmFtZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPjxDT0RFPlhtbE5DTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuRmFjdG9yeS5odG1sIj5YbWxOYW1lLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPjxDT0RFPlhtbE5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCI+WG1sTG9uZy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj48Q09ERT5YbWxMb25nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLkZhY3RvcnkuaHRtbCI+WG1sTGFuZ3VhZ2UuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPjxDT0RFPlhtbExhbmd1YWdlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbEludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+PENPREU+WG1sSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50LkZhY3RvcnkuaHRtbCI+WG1sSW50LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+PENPREU+WG1sSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuRmFjdG9yeS5odG1sIj5YbWxJRFJFRlMuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj48Q09ERT5YbWxJRFJFRlM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sIj5YbWxJRFJFRi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+PENPREU+WG1sSURSRUY8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuRmFjdG9yeS5odG1sIj5YbWxJRC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+PENPREU+WG1sSUQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5LkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwiPlhtbEhleEJpbmFyeS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEhleEJpbmFyeTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguRmFjdG9yeS5odG1sIj5YbWxHWWVhck1vbnRoLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPjxDT0RFPlhtbEdZZWFyTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuRmFjdG9yeS5odG1sIj5YbWxHWWVhci5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+PENPREU+WG1sR1llYXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwiPlhtbEdNb250aERheS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPjxDT0RFPlhtbEdNb250aERheTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLkZhY3RvcnkuaHRtbCI+WG1sR01vbnRoLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+PENPREU+WG1sR01vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5GYWN0b3J5Lmh0bWwiPlhtbEdEYXkuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+PENPREU+WG1sR0RheTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5GYWN0b3J5Lmh0bWwiPlhtbEZsb2F0LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj48Q09ERT5YbWxGbG9hdDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLkZhY3RvcnkuaHRtbCI+WG1sRU5USVRZLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+PENPREU+WG1sRU5USVRZPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLkZhY3RvcnkuaHRtbCI+WG1sRU5USVRJRVMuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPjxDT0RFPlhtbEVOVElUSUVTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLkZhY3RvcnkuaHRtbCI+WG1sRHVyYXRpb24uRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPjxDT0RFPlhtbER1cmF0aW9uPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuRmFjdG9yeS5odG1sIj5YbWxEb3VibGUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj48Q09ERT5YbWxEb3VibGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCI+WG1sRGVjaW1hbC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj48Q09ERT5YbWxEZWNpbWFsPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLkZhY3RvcnkuaHRtbCI+WG1sRGF0ZVRpbWUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPjxDT0RFPlhtbERhdGVUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5GYWN0b3J5Lmh0bWwiPlhtbERhdGUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+PENPREU+WG1sRGF0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuRmFjdG9yeS5odG1sIj5YbWxCeXRlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPjxDT0RFPlhtbEJ5dGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLkZhY3RvcnkuaHRtbCI+WG1sQm9vbGVhbi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj48Q09ERT5YbWxCb29sZWFuPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuRmFjdG9yeS5odG1sIj5YbWxCYXNlNjRCaW5hcnkuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj48Q09ERT5YbWxCYXNlNjRCaW5hcnk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5GYWN0b3J5Lmh0bWwiPlhtbEFueVVSSS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPjxDT0RFPlhtbEFueVVSSTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0pPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPjxDT0RFPlhtbEFueVNpbXBsZVR5cGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0sIFNjaGVtYVR5cGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+U2NoZW1hVHlwZUxvYWRlcjwvQT4KLTxERD5QYXJzZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRTaG9ydDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZExvbmcuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj48Q09ERT5YbWxVbnNpZ25lZExvbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5GYWN0b3J5Lmh0bWwiPlhtbFVuc2lnbmVkSW50LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEJ5dGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5GYWN0b3J5Lmh0bWwiPlhtbFRva2VuLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Q09ERT5YbWxUb2tlbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5GYWN0b3J5Lmh0bWwiPlhtbFRpbWUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+PENPREU+WG1sVGltZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sIj5YbWxTdHJpbmcuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj48Q09ERT5YbWxTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5GYWN0b3J5Lmh0bWwiPlhtbFNob3J0LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj48Q09ERT5YbWxTaG9ydDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLkZhY3RvcnkuaHRtbCI+WG1sUU5hbWUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPjxDT0RFPlhtbFFOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbFBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIj5YbWxPYmplY3QuRmFjdG9yeTwvQT4KLTxERD5Mb2FkcyB0aGUgZ2l2ZW4gPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj48Q09ERT5YTUxJbnB1dFN0cmVhbTwvQ09ERT48L0E+IGludG8gYW4gWG1sT2JqZWN0LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwiPlhtbE5PVEFUSU9OLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj48Q09ERT5YbWxOT1RBVElPTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+PENPREU+WG1sTm9ybWFsaXplZFN0cmluZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuRmFjdG9yeS5odG1sIj5YbWxOTVRPS0VOUy5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+PENPREU+WG1sTk1UT0tFTlM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uRmFjdG9yeS5odG1sIj5YbWxOTVRPS0VOLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5GYWN0b3J5Lmh0bWwiPlhtbE5DTmFtZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPjxDT0RFPlhtbE5DTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwiPlhtbE5hbWUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+PENPREU+WG1sTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwiPlhtbExvbmcuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+PENPREU+WG1sTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLkZhY3RvcnkuaHRtbCI+WG1sTGFuZ3VhZ2UuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPjxDT0RFPlhtbExhbmd1YWdlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sSW50ZWdlci5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj48Q09ERT5YbWxJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwiPlhtbEludC5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPjxDT0RFPlhtbEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuRmFjdG9yeS5odG1sIj5YbWxJRFJFRlMuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj48Q09ERT5YbWxJRFJFRlM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5GYWN0b3J5Lmh0bWwiPlhtbElEUkVGLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj48Q09ERT5YbWxJRFJFRjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElELkZhY3RvcnkuaHRtbCI+WG1sSUQuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPjxDT0RFPlhtbElEPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwiPlhtbEhleEJpbmFyeS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEhleEJpbmFyeTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwiPlhtbEdZZWFyTW9udGguRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+PENPREU+WG1sR1llYXJNb250aDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbCI+WG1sR1llYXIuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPjxDT0RFPlhtbEdZZWFyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwiPlhtbEdNb250aERheS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPjxDT0RFPlhtbEdNb250aERheTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sIj5YbWxHTW9udGguRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj48Q09ERT5YbWxHTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sIj5YbWxHRGF5LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPjxDT0RFPlhtbEdEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5GYWN0b3J5Lmh0bWwiPlhtbEZsb2F0LkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj48Q09ERT5YbWxGbG9hdDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuRmFjdG9yeS5odG1sIj5YbWxFTlRJVFkuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj48Q09ERT5YbWxFTlRJVFk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwiPlhtbEVOVElUSUVTLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj48Q09ERT5YbWxFTlRJVElFUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLkZhY3RvcnkuaHRtbCI+WG1sRHVyYXRpb24uRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPjxDT0RFPlhtbER1cmF0aW9uPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwiPlhtbERvdWJsZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPjxDT0RFPlhtbERvdWJsZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5wYXJzZShYTUxJbnB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwiPlhtbERlY2ltYWwuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+PENPREU+WG1sRGVjaW1hbDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLkZhY3RvcnkuaHRtbCI+WG1sRGF0ZVRpbWUuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPjxDT0RFPlhtbERhdGVUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLkZhY3RvcnkuaHRtbCI+WG1sRGF0ZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj48Q09ERT5YbWxEYXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCI+WG1sQnl0ZS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Q09ERT5YbWxCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLkZhY3RvcnkuaHRtbCI+WG1sQm9vbGVhbi5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj48Q09ERT5YbWxCb29sZWFuPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwiPlhtbEJhc2U2NEJpbmFyeS5GYWN0b3J5PC9BPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEJhc2U2NEJpbmFyeTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnBhcnNlKFhNTElucHV0U3RyZWFtLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sIj5YbWxBbnlVUkkuRmFjdG9yeTwvQT4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj48Q09ERT5YbWxBbnlVUkk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+cGFyc2UoWE1MSW5wdXRTdHJlYW0sIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlLkZhY3Rvcnk8L0E+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPjxDT0RFPlhtbEFueVNpbXBsZVR5cGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1BBUlRJQUxfT1JERVIiPjxCPlBBUlRJQUxfT1JERVI8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPlBhcnRpYWxseSBvcmRlcmVkLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjcG9wKCkiPjxCPnBvcCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+UmVzdG9yZXMgdGhlIGN1cnNvciBsb2NhdGlvbiBtb3N0IHJlY2VudGx5IHNhdmVkIHdpdGggdGhlIHB1c2goKSBtZXRob2QuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNwcmVmaXhGb3JOYW1lc3BhY2UoamF2YS5sYW5nLlN0cmluZykiPjxCPnByZWZpeEZvck5hbWVzcGFjZShTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+UmV0dXJucyBhIHByZWZpeCB0aGF0IGNhbiBiZSB1c2VkIHRvIGluZGljYXRlIGEgbmFtZXNwYWNlIFVSSS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3ByZXZUb2tlblR5cGUoKSI+PEI+cHJldlRva2VuVHlwZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+UmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgcHJldmlvdXMgdG9rZW4uCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCNQUk9DRVNTSU5HX0lOU1RSVUNUSU9OIj48Qj5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sIj5YTUxTdHJlYW1Db25zdGFudHM8L0E+Ci08REQ+SW5kaWNhdGVzIGFuIGV2ZW50IGlzIGEgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI1BST0NJTlNUIj48Qj5QUk9DSU5TVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+WG1sQ3Vyc29yLlRva2VuVHlwZTwvQT4KLTxERD5UaGUgc2luZ2xldG9uIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gdG9rZW4gdHlwZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxBdHRyaWJ1dGUuaHRtbCNQUk9ISUJJVEVEIj48Qj5QUk9ISUJJVEVEPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsQXR0cmlidXRlLmh0bWwiPlNjaGVtYUxvY2FsQXR0cmlidXRlPC9BPgotPEREPkEgcHJvaGliaXRlZCBhdHRyaWJ1dGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjUFJPUEVSVFlfQk9VTkRFRCI+PEI+UFJPUEVSVFlfQk9VTkRFRDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjUFJPUEVSVFlfQ0FSRElOQUxJVFkiPjxCPlBST1BFUlRZX0NBUkRJTkFMSVRZPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNQUk9QRVJUWV9OVU1FUklDIj48Qj5QUk9QRVJUWV9OVU1FUklDPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNQUk9QRVJUWV9PUkRFUkVEIj48Qj5QUk9QRVJUWV9PUkRFUkVEPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3B1c2goKSI+PEI+cHVzaCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+U2F2ZXMgdGhlIGN1cnJlbnQgbG9jYXRpb24gb2YgdGhpcyBjdXJzb3Igb24gYW4gaW50ZXJuYWwgc3RhY2sgb2Ygc2F2ZWQKLSBwb3NpdGlvbnMgKGluZGVwZW5kZW50IG9mIHNlbGVjdGlvbikuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjcHV0KGphdmEubGFuZy5PYmplY3QpIj48Qj5wdXQoT2JqZWN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4KLTxERD5Vc2VkIHRvIHNldCBhIGdlbmVyaWMgb3B0aW9uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjcHV0KGphdmEubGFuZy5PYmplY3QsIGludCkiPjxCPnB1dChPYmplY3QsIGludCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+VXNlZCB0byBzZXQgYSBnZW5lcmljIG9wdGlvbgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3B1dChqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuT2JqZWN0KSI+PEI+cHV0KE9iamVjdCwgT2JqZWN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4KLTxERD5Vc2VkIHRvIHNldCBhIGdlbmVyaWMgb3B0aW9uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCNwdXQoamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLk9iamVjdCkiPjxCPnB1dChPYmplY3QsIE9iamVjdCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCI+WG1sRG9jdW1lbnRQcm9wZXJ0aWVzPC9BPgotPEREPkF0dGFjaGVzIGEgdmFsdWUgdG8gdGhlIHJvb3Qgb2YgdGhlIGRvY3VtZW50IGNvbnRhaW5pbmcKLSB0aGUgZ2l2ZW4gdG9rZW4gc291cmNlLgotPC9ETD4KLTxIUj4KLTxBIE5BTUU9Il9RXyI+PCEtLSAtLT48L0E+PEgyPgotPEI+UTwvQj48L0gyPgotPERMPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVDYWNoZS5odG1sIj48Qj5RTmFtZUNhY2hlPC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVDYWNoZS5odG1sIj5RTmFtZUNhY2hlPC9BPi48REQ+QSBjYWNoZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHBvb2wgUU5hbWUgaW5zdGFuY2VzLjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lQ2FjaGUuaHRtbCNRTmFtZUNhY2hlKGludCkiPjxCPlFOYW1lQ2FjaGUoaW50KTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lQ2FjaGUuaHRtbCI+UU5hbWVDYWNoZTwvQT4KLTxERD5DcmVhdGVzIGEgUU5hbWVDYWNoZSB3aXRoIHRoZSBnaXZlbiBpbml0aWFsQ2FwYWNpdHkuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZUNhY2hlLmh0bWwjUU5hbWVDYWNoZShpbnQsIGZsb2F0KSI+PEI+UU5hbWVDYWNoZShpbnQsIGZsb2F0KTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lQ2FjaGUuaHRtbCI+UU5hbWVDYWNoZTwvQT4KLTxERD5DcmVhdGVzIGEgUU5hbWVDYWNoZSB3aXRoIHRoZSBnaXZlbiBpbml0aWFsQ2FwYWNpdHkgYW5kIGxvYWRGYWN0b3IuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj48Qj5RTmFtZVNldDwvQj48L0E+IC0gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwiPlFOYW1lU2V0PC9BPi48REQ+VGhpcyBpbnRlcmZhY2UgcmVwcmVzZW50cyBhIGxhdHRpY2Ugb2YgZmluaXRlIGFuZCBpbmZpbml0ZSBzZXRzIG9mIFFOYW1lcy48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCI+PEI+UU5hbWVTZXRCdWlsZGVyPC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwiPlFOYW1lU2V0QnVpbGRlcjwvQT4uPEREPlVzZWQgdG8gYnVpbGQgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj48Q09ERT5RTmFtZVNldHM8L0NPREU+PC9BPi48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCNRTmFtZVNldEJ1aWxkZXIoKSI+PEI+UU5hbWVTZXRCdWlsZGVyKCk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCI+UU5hbWVTZXRCdWlsZGVyPC9BPgotPEREPkNvbnN0cnVjdHMgYW4gZW1wdHkgUU5hbWVTZXRCdWlsZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwjUU5hbWVTZXRCdWlsZGVyKG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+PEI+UU5hbWVTZXRCdWlsZGVyKFFOYW1lU2V0U3BlY2lmaWNhdGlvbik8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCI+UU5hbWVTZXRCdWlsZGVyPC9BPgotPEREPkNvbnN0cnVjdHMgYSBRTmFtZVNldEJ1aWxkZXIgd2hvc2UgaW5pdGlhbCBjb250ZW50cyBhcmUgZ2l2ZW4gYnkKLSBhbm90aGVyIFFOYW1lU2V0U3BlY2lmaWNhdGlvbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sI1FOYW1lU2V0QnVpbGRlcihqYXZhLnV0aWwuU2V0LCBqYXZhLnV0aWwuU2V0LCBqYXZhLnV0aWwuU2V0LCBqYXZhLnV0aWwuU2V0KSI+PEI+UU5hbWVTZXRCdWlsZGVyKFNldCwgU2V0LCBTZXQsIFNldCk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCI+UU5hbWVTZXRCdWlsZGVyPC9BPgotPEREPkNvbnN0cnVjdHMgYSBRTmFtZVNldEJ1aWxkZXIgd2hvc2UgaW5pdGFsIGNvbnRlbnRzIGFyZSBnaXZlbiBieQotIHRoZSBmb3VyIHNldHMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCNRTmFtZVNldEJ1aWxkZXIoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjxCPlFOYW1lU2V0QnVpbGRlcihTdHJpbmcsIFN0cmluZyk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCI+UU5hbWVTZXRCdWlsZGVyPC9BPgotPEREPkNvbnN0cnVjdHMgYSBRTmFtZVNldEJ1aWxkZXIgd2hvc2UgaW5pdGlhbCBjb250ZW50cyBhcmUgZ2l2ZW4KLSBhcyBhIGxpc3Qgb2YgbmFtZXNwYWNlIFVSSXMsIHVzaW5nIHRoZSBzYW1lIGZvcm1hdCB1c2VkIGJ5IHdpbGRjYXJkcwotIGluIFhTRCBmaWxlcy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj48Qj5RTmFtZVNldFNwZWNpZmljYXRpb248L0I+PC9BPiAtIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT4uPEREPlJlcHJlc2VudHMgYSBsYXR0aWNlIG9mIGZpbml0ZSBhbmQgaW5maW5pdGUgc2V0cyBvZiBRTmFtZXMuPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCNxTmFtZVZhbHVlKCkiPjxCPnFOYW1lVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj5YbWxRTmFtZTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCNnZXRRTmFtZVZhbHVlKCkiPjxDT0RFPlhtbFFOYW1lLmdldFFOYW1lVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNxTmFtZVZhbHVlKCkiPjxCPnFOYW1lVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRRTmFtZVZhbHVlKCkiPjxDT0RFPlNpbXBsZVZhbHVlLmdldFFOYW1lVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjcU5hbWVWYWx1ZSgpIj48Qj5xTmFtZVZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPC9ETD4KLTxIUj4KLTxBIE5BTUU9Il9SXyI+PCEtLSAtLT48L0E+PEgyPgotPEI+UjwvQj48L0gyPgotPERMPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sI3JlbW92ZShpbnQpIj48Qj5yZW1vdmUoaW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCI+WG1sU2ltcGxlTGlzdDwvQT4KLTxERD5VbnN1cHBvcnRlZCBiZWNhdXNlIHRoaXMgbGlzdCBpcyBpbW11dGFibGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwjcmVtb3ZlKGphdmEubGFuZy5PYmplY3QpIj48Qj5yZW1vdmUoT2JqZWN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCI+WG1sU2ltcGxlTGlzdDwvQT4KLTxERD5VbnN1cHBvcnRlZCBiZWNhdXNlIHRoaXMgbGlzdCBpcyBpbW11dGFibGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCNyZW1vdmUoamF2YS5sYW5nLk9iamVjdCkiPjxCPnJlbW92ZShPYmplY3QpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwiPlhtbERvY3VtZW50UHJvcGVydGllczwvQT4KLTxERD5SZW1vdmVzIGEgdmFsdWUgcHJldmlvdXNseSBhdHRhY2hlZCB0byBhIGRvY3VtZW50IHVzaW5nIHNldC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sI3JlbW92ZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PEI+cmVtb3ZlKFFOYW1lKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sIj5RTmFtZVNldEJ1aWxkZXI8L0E+Ci08REQ+UmVtb3ZlcyB0aGUgZ2l2ZW4gcW5hbWUgZnJvbSB0aGlzIFFOYW1lU2V0QnVpbGRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCNyZW1vdmVBbGwoamF2YS51dGlsLkNvbGxlY3Rpb24pIj48Qj5yZW1vdmVBbGwoQ29sbGVjdGlvbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwiPlhtbFNpbXBsZUxpc3Q8L0E+Ci08REQ+VW5zdXBwb3J0ZWQgYmVjYXVzZSB0aGlzIGxpc3QgaXMgaW1tdXRhYmxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwjcmVtb3ZlQWxsKG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+PEI+cmVtb3ZlQWxsKFFOYW1lU2V0U3BlY2lmaWNhdGlvbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCI+UU5hbWVTZXRCdWlsZGVyPC9BPgotPEREPlJlbW92ZXMgYWxsIGNvbnRlbnRzIG9mIGEgZ2l2ZW4gUU5hbWVTZXQgZnJvbSB0aGlzIFFOYW1lU2V0QnVpbGRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3JlbW92ZUF0dHJpYnV0ZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PEI+cmVtb3ZlQXR0cmlidXRlKFFOYW1lKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPldoZW4gYXQgYSBTVEFSVCBvciBTVEFSVERPQywgcmVtb3ZlcyB0aGUgYXR0cmlidXRlIHdpdGggdGhlIGdpdmVuIG5hbWUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNyZW1vdmVDaGFycyhpbnQpIj48Qj5yZW1vdmVDaGFycyhpbnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+UmVtb3ZlcyBjaGFyYWN0ZXJzIHVwIHRvIHRoZSBzcGVjaWZpZWQgbWF4aW11bSBudW1iZXIsIGNvdW50aW5nIHJpZ2h0IGZyb20gCi0gdGhpcyBjdXJzb3IncyBsb2NhdGlvbiB0byB0aGUgY2hhcmFjdGVyIGF0IDxlbT5tYXhDaGFyYWN0ZXJDb3VudDwvZW0+LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwjcmVtb3ZlTmFtZXNwYWNlKGphdmEubGFuZy5TdHJpbmcpIj48Qj5yZW1vdmVOYW1lc3BhY2UoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sIj5RTmFtZVNldEJ1aWxkZXI8L0E+Ci08REQ+UmVtb3ZlcyBhbiBlbnRpcmUgbmFtZXNwYWNlIFVSSSBmcm9tIHRoaXMgUU5hbWVTZXRCdWlsZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjcmVtb3ZlWG1sKCkiPjxCPnJlbW92ZVhtbCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+UmVtb3ZlcyB0aGUgWE1MIHRoYXQgaXMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhpcyBjdXJzb3IuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNyZW1vdmVYbWxDb250ZW50cygpIj48Qj5yZW1vdmVYbWxDb250ZW50cygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+UmVtb3ZlcyB0aGUgY29udGVudHMgb2YgdGhlIGNvbnRhaW5lciAoU1RBUlRET0MgT1IgU1RBUlQpIGltbWVkaWF0ZWx5IGFmdGVyCi0gdGhpcyBjdXJzb3IuCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNyZXF1aXJlKGludCwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjxCPnJlcXVpcmUoaW50LCBTdHJpbmcsIFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwiPlhNTFN0cmVhbVJlYWRlcjwvQT4KLTxERD5UZXN0IGlmIHRoZSBjdXJyZW50IGV2ZW50IGlzIG9mIHRoZSBnaXZlbiB0eXBlIGFuZCBpZiB0aGUgbmFtZXNwYWNlIGFuZCBuYW1lIGRvIG1hdGNoLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxBdHRyaWJ1dGUuaHRtbCNSRVFVSVJFRCI+PEI+UkVRVUlSRUQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxBdHRyaWJ1dGUuaHRtbCI+U2NoZW1hTG9jYWxBdHRyaWJ1dGU8L0E+Ci08REQ+QSByZXF1aXJlZCBhdHRyaWJ1dGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwjcmVzb2x2ZSgpIj48Qj5yZXNvbHZlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sIj5TY2hlbWFUeXBlU3lzdGVtPC9BPgotPEREPkluaXRpYWxpemVzIGEgdHlwZSBzeXN0ZW0gKHJlc29sdmVzIGFsbCBoYW5kbGVzIHdpdGhpbiB0aGUgdHlwZSBzeXN0ZW0pLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sI3Jlc29sdmVIYW5kbGUoamF2YS5sYW5nLlN0cmluZykiPjxCPnJlc29sdmVIYW5kbGUoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwiPlNjaGVtYVR5cGVTeXN0ZW08L0E+Ci08REQ+TG9jYXRlcyBhIHR5cGUsIGVsZW1lbnQsIG9yIGF0dHJpYnV0ZSB1c2luZyB0aGUgaGFuZGxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwjcmVzdHJpY3Qob3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldFNwZWNpZmljYXRpb24pIj48Qj5yZXN0cmljdChRTmFtZVNldFNwZWNpZmljYXRpb24pPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwiPlFOYW1lU2V0QnVpbGRlcjwvQT4KLTxERD5SZXN0cmljdHMgdGhlIGNvbnRlbnRzIG9mIHRoaXMgUU5hbWVTZXRCdWlsZGVyIHRvIGJlIGEgc3Vic2V0IG9mIHRoZQotIGdpdmVuIFFOYW1lU2V0LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sI3JldGFpbkFsbChqYXZhLnV0aWwuQ29sbGVjdGlvbikiPjxCPnJldGFpbkFsbChDb2xsZWN0aW9uKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCI+WG1sU2ltcGxlTGlzdDwvQT4KLTxERD5VbnN1cHBvcnRlZCBiZWNhdXNlIHRoaXMgbGlzdCBpcyBpbW11dGFibGUuCi08L0RMPgotPEhSPgotPEEgTkFNRT0iX1NfIj48IS0tIC0tPjwvQT48SDI+Ci08Qj5TPC9CPjwvSDI+Ci08REw+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2FmZUdldChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMsIGphdmEubGFuZy5PYmplY3QpIj48Qj5zYWZlR2V0KFhtbE9wdGlvbnMsIE9iamVjdCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPgotPEREPlVzZWQgdG8gdGVzdCBhIGdlbmVyaWMgb3B0aW9uIG9uIGFuIG9wdGlvbnMgb2JqZWN0IHRoYXQgbWF5IGJlIG51bGwKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNTQVZFX0FHR1JFU1NJVkVfTkFNRVNQQUNFUyI+PEI+U0FWRV9BR0dSRVNTSVZFX05BTUVTUEFDRVM8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjU0FWRV9GSUxURVJfUFJPQ0lOU1QiPjxCPlNBVkVfRklMVEVSX1BST0NJTlNUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI1NBVkVfSU1QTElDSVRfTkFNRVNQQUNFUyI+PEI+U0FWRV9JTVBMSUNJVF9OQU1FU1BBQ0VTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI1NBVkVfSU5ORVIiPjxCPlNBVkVfSU5ORVI8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjU0FWRV9OQU1FU1BBQ0VTX0ZJUlNUIj48Qj5TQVZFX05BTUVTUEFDRVNfRklSU1Q8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjU0FWRV9PVVRFUiI+PEI+U0FWRV9PVVRFUjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNTQVZFX1BSRVRUWV9QUklOVCI+PEI+U0FWRV9QUkVUVFlfUFJJTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjU0FWRV9QUkVUVFlfUFJJTlRfSU5ERU5UIj48Qj5TQVZFX1BSRVRUWV9QUklOVF9JTkRFTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjU0FWRV9QUkVUVFlfUFJJTlRfT0ZGU0VUIj48Qj5TQVZFX1BSRVRUWV9QUklOVF9PRkZTRVQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjU0FWRV9TVUdHRVNURURfUFJFRklYRVMiPjxCPlNBVkVfU1VHR0VTVEVEX1BSRUZJWEVTPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI1NBVkVfU1lOVEhFVElDX0RPQ1VNRU5UX0VMRU1FTlQiPjxCPlNBVkVfU1lOVEhFVElDX0RPQ1VNRU5UX0VMRU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjU0FWRV9VU0VfREVGQVVMVF9OQU1FU1BBQ0UiPjxCPlNBVkVfVVNFX0RFRkFVTFRfTkFNRVNQQUNFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI1NBVkVfVVNFX09QRU5fRlJBR01FTlQiPjxCPlNBVkVfVVNFX09QRU5fRlJBR01FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcikiPjxCPnNhdmUoQ29udGVudEhhbmRsZXIsIExleGljYWxIYW5kbGVyKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT4KLTxERD5Xcml0ZXMgdGhlIFhNTCByZXByZXNlbnRlZCBieSB0aGlzIHNvdXJjZSB0byB0aGUgZ2l2ZW4gU0FYIGNvbnRlbnQgYW5kCi0gbGV4aWNhbCBoYW5kbGVycy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcikiPjxCPnNhdmUoQ29udGVudEhhbmRsZXIsIExleGljYWxIYW5kbGVyKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+c2F2ZShDb250ZW50SGFuZGxlciwgTGV4aWNhbEhhbmRsZXIsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPgotPEREPldyaXRlcyB0aGUgWE1MIHJlcHJlc2VudGVkIGJ5IHRoaXMgc291cmNlIHRvIHRoZSBnaXZlbiBTQVggY29udGVudCBhbmQKLSBsZXhpY2FsIGhhbmRsZXJzLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5zYXZlKENvbnRlbnRIYW5kbGVyLCBMZXhpY2FsSGFuZGxlciwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSkiPjxCPnNhdmUoRmlsZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+Ci08REQ+V3JpdGVzIHRoZSBYTUwgcmVwcmVzZW50ZWQgYnkgdGhpcyBzb3VyY2UgdG8gdGhlIGdpdmVuIEZpbGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSkiPjxCPnNhdmUoRmlsZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+c2F2ZShGaWxlLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT4KLTxERD5Xcml0ZXMgdGhlIFhNTCByZXByZXNlbnRlZCBieSB0aGlzIHNvdXJjZSB0byB0aGUgZ2l2ZW4gRmlsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5zYXZlKEZpbGUsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSkiPjxCPnNhdmUoT3V0cHV0U3RyZWFtKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT4KLTxERD5Xcml0ZXMgdGhlIFhNTCByZXByZXNlbnRlZCBieSB0aGlzIHNvdXJjZSB0byB0aGUgZ2l2ZW4gb3V0cHV0IHN0cmVhbS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0pIj48Qj5zYXZlKE91dHB1dFN0cmVhbSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5zYXZlKE91dHB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+Ci08REQ+V3JpdGVzIHRoZSBYTUwgcmVwcmVzZW50ZWQgYnkgdGhpcyBzb3VyY2UgdG8gdGhlIGdpdmVuIG91dHB1dCBzdHJlYW0uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5zYXZlKE91dHB1dFN0cmVhbSwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uV3JpdGVyKSI+PEI+c2F2ZShXcml0ZXIpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPgotPEREPldyaXRlcyB0aGUgWE1MIHJlcHJlc2VudGVkIGJ5IHRoaXMgc291cmNlIHRvIHRoZSBnaXZlbiB3cml0ZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzYXZlKGphdmEuaW8uV3JpdGVyKSI+PEI+c2F2ZShXcml0ZXIpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+c2F2ZShXcml0ZXIsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPgotPEREPldyaXRlcyB0aGUgWE1MIHJlcHJlc2VudGVkIGJ5IHRoaXMgc291cmNlIHRvIHRoZSBnaXZlbiB3cml0ZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzYXZlKGphdmEuaW8uV3JpdGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj5zYXZlKFdyaXRlciwgWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sI3NhdmVUb0RpcmVjdG9yeShqYXZhLmlvLkZpbGUpIj48Qj5zYXZlVG9EaXJlY3RvcnkoRmlsZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sIj5TY2hlbWFUeXBlU3lzdGVtPC9BPgotPEREPlNhdmVzIHRoaXMgdHlwZSB0byBhIGRpcmVjdG9yeS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZUdyb3VwLmh0bWwiPjxCPlNjaGVtYUF0dHJpYnV0ZUdyb3VwPC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZUdyb3VwLmh0bWwiPlNjaGVtYUF0dHJpYnV0ZUdyb3VwPC9BPi48REQ+UmVwcmVzZW50cyBhbiBhdHRyaWJ1dGUgZ3JvdXAuPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmLmh0bWwiPjxCPlNjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZjwvQj48L0E+IC0gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZi5odG1sIj5TY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWY8L0E+LjxERD5Vc2VkIHRvIGFsbG93IG9uLWRlbWFuZCBsb2FkaW5nIG9mIGF0dHJpYnV0ZSBncm91cHMuPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmLmh0bWwjU2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQXR0cmlidXRlR3JvdXApIj48Qj5TY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWYoU2NoZW1hQXR0cmlidXRlR3JvdXApPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmLmh0bWwiPlNjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZi5odG1sI1NjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZihvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVTeXN0ZW0sIGphdmEubGFuZy5TdHJpbmcpIj48Qj5TY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWYoU2NoZW1hVHlwZVN5c3RlbSwgU3RyaW5nKTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZi5odG1sIj5TY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWY8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVNb2RlbC5odG1sIj48Qj5TY2hlbWFBdHRyaWJ1dGVNb2RlbDwvQj48L0E+IC0gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVNb2RlbC5odG1sIj5TY2hlbWFBdHRyaWJ1dGVNb2RlbDwvQT4uPEREPlJlcHJlc2VudHMgdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgYWxsb3dlZCBvbiBhIGNvbXBsZXggdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+PEI+U2NoZW1hQ29tcG9uZW50PC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sIj5TY2hlbWFDb21wb25lbnQ8L0E+LjxERD5SZXByZXNlbnRzIGEgZ2xvYmFsIFNjaGVtYSBDb21wb25lbnQuPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIj48Qj5TY2hlbWFDb21wb25lbnQuUmVmPC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIj5TY2hlbWFDb21wb25lbnQuUmVmPC9BPi48REQ+QSBsYXp5IHJlZmVyZW5jZSB0byBhIGNvbXBvbmVudC48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuUmVmLmh0bWwjU2NoZW1hQ29tcG9uZW50LlJlZihvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudCkiPjxCPlNjaGVtYUNvbXBvbmVudC5SZWYoU2NoZW1hQ29tcG9uZW50KTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCI+U2NoZW1hQ29tcG9uZW50LlJlZjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCNTY2hlbWFDb21wb25lbnQuUmVmKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVN5c3RlbSwgamF2YS5sYW5nLlN0cmluZykiPjxCPlNjaGVtYUNvbXBvbmVudC5SZWYoU2NoZW1hVHlwZVN5c3RlbSwgU3RyaW5nKTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCI+U2NoZW1hQ29tcG9uZW50LlJlZjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwiPjxCPlNjaGVtYUZpZWxkPC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwiPlNjaGVtYUZpZWxkPC9BPi48REQ+UmVwcmVzZW50cyBhbiBlbGVtZW50IG9yIGFuIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbi48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuaHRtbCI+PEI+U2NoZW1hR2xvYmFsQXR0cmlidXRlPC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEF0dHJpYnV0ZS5odG1sIj5TY2hlbWFHbG9iYWxBdHRyaWJ1dGU8L0E+LjxERD5SZXByZXNlbnRzIGEgZ2xvYmFsIGF0dHJpYnV0ZSBkZWZpbml0aW9uPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZi5odG1sIj48Qj5TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmPC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZi5odG1sIj5TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmPC9BPi48REQ+VXNlZCB0byBhbGxvdyBvbi1kZW1hbmQgbG9hZGluZyBvZiBlbGVtZW50cy48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmLmh0bWwjU2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZihvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUdsb2JhbEF0dHJpYnV0ZSkiPjxCPlNjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWYoU2NoZW1hR2xvYmFsQXR0cmlidXRlKTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWYuaHRtbCI+U2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWYuaHRtbCNTY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVN5c3RlbSwgamF2YS5sYW5nLlN0cmluZykiPjxCPlNjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWYoU2NoZW1hVHlwZVN5c3RlbSwgU3RyaW5nKTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWYuaHRtbCI+U2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEVsZW1lbnQuaHRtbCI+PEI+U2NoZW1hR2xvYmFsRWxlbWVudDwvQj48L0E+IC0gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50Lmh0bWwiPlNjaGVtYUdsb2JhbEVsZW1lbnQ8L0E+LjxERD5SZXByZXNlbnRzIGEgZ2xvYmFsIGVsZW1lbnQgZGVmaW5pdGlvbi48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50LlJlZi5odG1sIj48Qj5TY2hlbWFHbG9iYWxFbGVtZW50LlJlZjwvQj48L0E+IC0gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEVsZW1lbnQuUmVmLmh0bWwiPlNjaGVtYUdsb2JhbEVsZW1lbnQuUmVmPC9BPi48REQ+VXNlZCB0byBhbGxvdyBvbi1kZW1hbmQgbG9hZGluZyBvZiBlbGVtZW50cy48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50LlJlZi5odG1sI1NjaGVtYUdsb2JhbEVsZW1lbnQuUmVmKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hR2xvYmFsRWxlbWVudCkiPjxCPlNjaGVtYUdsb2JhbEVsZW1lbnQuUmVmKFNjaGVtYUdsb2JhbEVsZW1lbnQpPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5SZWYuaHRtbCI+U2NoZW1hR2xvYmFsRWxlbWVudC5SZWY8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50LlJlZi5odG1sI1NjaGVtYUdsb2JhbEVsZW1lbnQuUmVmKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVN5c3RlbSwgamF2YS5sYW5nLlN0cmluZykiPjxCPlNjaGVtYUdsb2JhbEVsZW1lbnQuUmVmKFNjaGVtYVR5cGVTeXN0ZW0sIFN0cmluZyk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50LlJlZi5odG1sIj5TY2hlbWFHbG9iYWxFbGVtZW50LlJlZjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5odG1sIj48Qj5TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQ8L0I+PC9BPiAtIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Lmh0bWwiPlNjaGVtYUlkZW50aXR5Q29uc3RyYWludDwvQT4uPEREPlJlcHJlc2VudHMgYW4gaWRlbnRpdHkgY29uc3RyYWludCBkZWZpbml0aW9uLjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWYuaHRtbCI+PEI+U2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZjwvQj48L0E+IC0gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWYuaHRtbCI+U2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZjwvQT4uPEREPlVzZWQgdG8gYWxsb3cgb24tZGVtYW5kIGxvYWRpbmcgb2YgaWRlbnRpdHkgY29uc3RyYWludHMuPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZi5odG1sI1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWYob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQpIj48Qj5TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmKFNjaGVtYUlkZW50aXR5Q29uc3RyYWludCk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmLmh0bWwiPlNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWY8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmLmh0bWwjU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZihvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVTeXN0ZW0sIGphdmEubGFuZy5TdHJpbmcpIj48Qj5TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmKFNjaGVtYVR5cGVTeXN0ZW0sIFN0cmluZyk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmLmh0bWwiPlNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWY8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEF0dHJpYnV0ZS5odG1sIj48Qj5TY2hlbWFMb2NhbEF0dHJpYnV0ZTwvQj48L0E+IC0gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEF0dHJpYnV0ZS5odG1sIj5TY2hlbWFMb2NhbEF0dHJpYnV0ZTwvQT4uPEREPlJlcHJlc2VudHMgYSBsb2NhbCBvciBnbG9iYWwgYXR0cmlidXRlIGRlZmluaXRpb24uPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxFbGVtZW50Lmh0bWwiPjxCPlNjaGVtYUxvY2FsRWxlbWVudDwvQj48L0E+IC0gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEVsZW1lbnQuaHRtbCI+U2NoZW1hTG9jYWxFbGVtZW50PC9BPi48REQ+UmVwcmVzZW50cyBhIGxvY2FsIG9yIGdsb2JhbCBlbGVtZW50IGRlZmluaXRpb24uPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTW9kZWxHcm91cC5odG1sIj48Qj5TY2hlbWFNb2RlbEdyb3VwPC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYU1vZGVsR3JvdXAuaHRtbCI+U2NoZW1hTW9kZWxHcm91cDwvQT4uPEREPlJlcHJlc2VudHMgYSBtb2RlbCBncm91cC48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFNb2RlbEdyb3VwLlJlZi5odG1sIj48Qj5TY2hlbWFNb2RlbEdyb3VwLlJlZjwvQj48L0E+IC0gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYU1vZGVsR3JvdXAuUmVmLmh0bWwiPlNjaGVtYU1vZGVsR3JvdXAuUmVmPC9BPi48REQ+VXNlZCB0byBhbGxvdyBvbi1kZW1hbmQgbG9hZGluZyBvZiBtb2RlbCBncm91cHMuPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTW9kZWxHcm91cC5SZWYuaHRtbCNTY2hlbWFNb2RlbEdyb3VwLlJlZihvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYU1vZGVsR3JvdXApIj48Qj5TY2hlbWFNb2RlbEdyb3VwLlJlZihTY2hlbWFNb2RlbEdyb3VwKTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYU1vZGVsR3JvdXAuUmVmLmh0bWwiPlNjaGVtYU1vZGVsR3JvdXAuUmVmPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTW9kZWxHcm91cC5SZWYuaHRtbCNTY2hlbWFNb2RlbEdyb3VwLlJlZihvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVTeXN0ZW0sIGphdmEubGFuZy5TdHJpbmcpIj48Qj5TY2hlbWFNb2RlbEdyb3VwLlJlZihTY2hlbWFUeXBlU3lzdGVtLCBTdHJpbmcpPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTW9kZWxHcm91cC5SZWYuaHRtbCI+U2NoZW1hTW9kZWxHcm91cC5SZWY8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sIj48Qj5TY2hlbWFQYXJ0aWNsZTwvQj48L0E+IC0gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sIj5TY2hlbWFQYXJ0aWNsZTwvQT4uPEREPlJlcHJlc2VudHMgYSBTY2hlbWEgcGFydGljbGUgZGVmaW5pdGlvbi48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sIj48Qj5TY2hlbWFQcm9wZXJ0eTwvQj48L0E+IC0gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sIj5TY2hlbWFQcm9wZXJ0eTwvQT4uPEREPlJlcHJlc2VudHMgYSBzdW1tYXJ5IG9mIHNpbWlsYXIgU2NoZW1hRmllbGRzIGluIGEgY29tcGxleCB0eXBlLjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVN0cmluZ0VudW1FbnRyeS5odG1sIj48Qj5TY2hlbWFTdHJpbmdFbnVtRW50cnk8L0I+PC9BPiAtIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hU3RyaW5nRW51bUVudHJ5Lmh0bWwiPlNjaGVtYVN0cmluZ0VudW1FbnRyeTwvQT4uPEREPkRlc2NyaWJlcyBhIGNvZGUtZ2VuZXJhdGVkIHN0cmluZyBlbnVtZXJhdGlvbjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PEI+U2NoZW1hVHlwZTwvQj48L0E+IC0gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+LjxERD5SZXByZXNlbnRzIGEgc2NoZW1hIHR5cGUuPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5SZWYuaHRtbCI+PEI+U2NoZW1hVHlwZS5SZWY8L0I+PC9BPiAtIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLlJlZi5odG1sIj5TY2hlbWFUeXBlLlJlZjwvQT4uPEREPlVzZWQgdG8gYWxsb3cgb24tZGVtYW5kIGxvYWRpbmcgb2YgdHlwZXMuPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5SZWYuaHRtbCNTY2hlbWFUeXBlLlJlZihvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj48Qj5TY2hlbWFUeXBlLlJlZihTY2hlbWFUeXBlKTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuUmVmLmh0bWwiPlNjaGVtYVR5cGUuUmVmPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5SZWYuaHRtbCNTY2hlbWFUeXBlLlJlZihvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVTeXN0ZW0sIGphdmEubGFuZy5TdHJpbmcpIj48Qj5TY2hlbWFUeXBlLlJlZihTY2hlbWFUeXBlU3lzdGVtLCBTdHJpbmcpPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5SZWYuaHRtbCI+U2NoZW1hVHlwZS5SZWY8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzY2hlbWFUeXBlKCkiPjxCPnNjaGVtYVR5cGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPgotPEREPlRoZSBzY2hlbWEgdHlwZSBmb3IgdGhpcyBpbnN0YW5jZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NjaGVtYVR5cGUoKSI+PEI+c2NoZW1hVHlwZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+PEI+U2NoZW1hVHlwZUxvYWRlcjwvQj48L0E+IC0gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXI8L0E+LjxERD5SZXByZXNlbnRzIGEgc2VhcmNoYWJsZSBzZXQgb2YgWE1MIFNjaGVtYSBjb21wb25lbnQgZGVmaW5pdGlvbnMuPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sIj48Qj5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uPC9CPjwvQT4gLSBleGNlcHRpb24gb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCI+U2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbjwvQT4uPEREPkFuIGV4Y2VwdGlvbiB0aGF0IGlzIHRocm93biBpZiB0aGVyZSBpcyBjb3JydXB0aW9uIG9yIGEgdmVyc2lvbiBtaXNtYXRjaAotIGluIGEgY29tcGlsZWQgc2NoZW1hIHR5cGUgc3lzdGVtLjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCNTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGludCkiPjxCPlNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24oU3RyaW5nLCBTdHJpbmcsIFN0cmluZywgaW50KTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCI+U2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbjwvQT4KLTxERD5Db25zdHJ1Y3RzIGFuIGV4Y2VwdGlvbiB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLCBmaWxlbmFtZSwgZXh0ZW5zaW9uLCBhbmQgY29kZQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sI1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgaW50LCBqYXZhLmxhbmcuRXhjZXB0aW9uKSI+PEI+U2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbihTdHJpbmcsIFN0cmluZywgU3RyaW5nLCBpbnQsIEV4Y2VwdGlvbik8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb248L0E+Ci08REQ+Q29uc3RydWN0cyBhbiBleGNlcHRpb24gd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZSwgZmlsZW5hbWUsIGV4dGVuc2lvbiwgY29kZSwgYW5kIGNhdXNlCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwiPjxCPlNjaGVtYVR5cGVTeXN0ZW08L0I+PC9BPiAtIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sIj5TY2hlbWFUeXBlU3lzdGVtPC9BPi48REQ+QSBmaW5pdGUgc2V0IG9mIFhNTCBTY2hlbWEgY29tcG9uZW50IGRlZmluaXRpb25zLjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZykiPjxCPnNlbGVjdFBhdGgoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPgotPEREPlNlbGVjdHMgYSBwYXRoLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2VsZWN0UGF0aChTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+RXhlY3V0ZXMgdGhlIHNwZWNpZmllZCBYUGF0aCBleHByZXNzaW9uIGFnYWluc3QgdGhlIFhNTCB0aGF0IHRoaXMgCi0gY3Vyc29yIGlzIGluLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2VsZWN0UGF0aChTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+c2VsZWN0UGF0aChTdHJpbmcsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+Ci08REQ+U2VsZWN0cyBhIHBhdGgsIGFwcGx5aW5nIG9wdGlvbnMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnNlbGVjdFBhdGgoU3RyaW5nLCBYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPkV4ZWN1dGVzIHRoZSBzcGVjaWZpZWQgWFBhdGggZXhwcmVzc2lvbiBhZ2FpbnN0IHRoZSBYTUwgdGhhdCB0aGlzIAotIGN1cnNvciBpcyBpbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+c2VsZWN0UGF0aChTdHJpbmcsIFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjU0VRVUVOQ0UiPjxCPlNFUVVFTkNFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwiPlNjaGVtYVBhcnRpY2xlPC9BPgotPEREPkEgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNkZWNsYXJlLWNvbnRlbnRNb2RlbCI+eHM6c2VxdWVuY2U8L2E+IGdyb3VwLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI3NldChqYXZhLm1hdGguQmlnRGVjaW1hbCkiPjxCPnNldChCaWdEZWNpbWFsKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCNzZXRCaWdEZWNpbWFsVmFsdWUoamF2YS5tYXRoLkJpZ0RlY2ltYWwpIj48Q09ERT5YbWxEZWNpbWFsLnNldEJpZ0RlY2ltYWxWYWx1ZShqYXZhLm1hdGguQmlnRGVjaW1hbCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0KGphdmEubWF0aC5CaWdEZWNpbWFsKSI+PEI+c2V0KEJpZ0RlY2ltYWwpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEJpZ0RlY2ltYWxWYWx1ZShqYXZhLm1hdGguQmlnRGVjaW1hbCkiPjxDT0RFPlNpbXBsZVZhbHVlLnNldEJpZ0RlY2ltYWxWYWx1ZShqYXZhLm1hdGguQmlnRGVjaW1hbCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NldChqYXZhLm1hdGguQmlnRGVjaW1hbCkiPjxCPnNldChCaWdEZWNpbWFsKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwjc2V0KGphdmEubWF0aC5CaWdJbnRlZ2VyKSI+PEI+c2V0KEJpZ0ludGVnZXIpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI3NldEJpZ0ludGVnZXJWYWx1ZShqYXZhLm1hdGguQmlnSW50ZWdlcikiPjxDT0RFPlhtbEludGVnZXIuc2V0QmlnSW50ZWdlclZhbHVlKGphdmEubWF0aC5CaWdJbnRlZ2VyKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoamF2YS5tYXRoLkJpZ0ludGVnZXIpIj48Qj5zZXQoQmlnSW50ZWdlcik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0QmlnSW50ZWdlclZhbHVlKGphdmEubWF0aC5CaWdJbnRlZ2VyKSI+PENPREU+U2ltcGxlVmFsdWUuc2V0QmlnSW50ZWdlclZhbHVlKGphdmEubWF0aC5CaWdJbnRlZ2VyKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0KGphdmEubWF0aC5CaWdJbnRlZ2VyKSI+PEI+c2V0KEJpZ0ludGVnZXIpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCNzZXQoYm9vbGVhbikiPjxCPnNldChib29sZWFuKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPlhtbEJvb2xlYW48L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgYnkgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwjc2V0Qm9vbGVhblZhbHVlKGJvb2xlYW4pIj48Q09ERT5YbWxCb29sZWFuLnNldEJvb2xlYW5WYWx1ZShib29sZWFuKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoYm9vbGVhbikiPjxCPnNldChib29sZWFuKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRCb29sZWFuVmFsdWUoYm9vbGVhbikiPjxDT0RFPlNpbXBsZVZhbHVlLnNldEJvb2xlYW5WYWx1ZShib29sZWFuKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0KGJvb2xlYW4pIj48Qj5zZXQoYm9vbGVhbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sI3NldChieXRlKSI+PEI+c2V0KGJ5dGUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+WG1sQnl0ZTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCNzZXRCeXRlVmFsdWUoYnl0ZSkiPjxDT0RFPlhtbEJ5dGUuc2V0Qnl0ZVZhbHVlKGJ5dGUpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldChieXRlKSI+PEI+c2V0KGJ5dGUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEJ5dGVWYWx1ZShieXRlKSI+PENPREU+U2ltcGxlVmFsdWUuc2V0Qnl0ZVZhbHVlKGJ5dGUpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXQoYnl0ZSkiPjxCPnNldChieXRlKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCNzZXQoYnl0ZVtdKSI+PEI+c2V0KGJ5dGVbXSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPlhtbEhleEJpbmFyeTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sI3NldEJ5dGVBcnJheVZhbHVlKGJ5dGVbXSkiPjxDT0RFPlhtbEhleEJpbmFyeS5zZXRCeXRlQXJyYXlWYWx1ZShieXRlW10pPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCNzZXQoYnl0ZVtdKSI+PEI+c2V0KGJ5dGVbXSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPlhtbEJhc2U2NEJpbmFyeTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sI3NldEJ5dGVBcnJheVZhbHVlKGJ5dGVbXSkiPjxDT0RFPlhtbEJhc2U2NEJpbmFyeS5zZXRCeXRlQXJyYXlWYWx1ZShieXRlW10pPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldChieXRlW10pIj48Qj5zZXQoYnl0ZVtdKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRCeXRlQXJyYXlWYWx1ZShieXRlW10pIj48Q09ERT5TaW1wbGVWYWx1ZS5zZXRCeXRlQXJyYXlWYWx1ZShieXRlW10pPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXQoYnl0ZVtdKSI+PEI+c2V0KGJ5dGVbXSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sI3NldChqYXZhLnV0aWwuQ2FsZW5kYXIpIj48Qj5zZXQoQ2FsZW5kYXIpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+WG1sVGltZTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sI3NldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+PENPREU+WG1sVGltZS5zZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcik8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCNzZXQoamF2YS51dGlsLkNhbGVuZGFyKSI+PEI+c2V0KENhbGVuZGFyKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPlhtbEdZZWFyTW9udGg8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCNzZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcikiPjxDT0RFPlhtbEdZZWFyTW9udGguc2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sI3NldChqYXZhLnV0aWwuQ2FsZW5kYXIpIj48Qj5zZXQoQ2FsZW5kYXIpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPlhtbEdZZWFyPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sI3NldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+PENPREU+WG1sR1llYXIuc2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCNzZXQoamF2YS51dGlsLkNhbGVuZGFyKSI+PEI+c2V0KENhbGVuZGFyKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+WG1sR01vbnRoRGF5PC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCNzZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcikiPjxDT0RFPlhtbEdNb250aERheS5zZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcik8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI3NldChqYXZhLnV0aWwuQ2FsZW5kYXIpIj48Qj5zZXQoQ2FsZW5kYXIpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj5YbWxHTW9udGg8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI3NldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+PENPREU+WG1sR01vbnRoLnNldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sI3NldChqYXZhLnV0aWwuQ2FsZW5kYXIpIj48Qj5zZXQoQ2FsZW5kYXIpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+WG1sR0RheTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sI3NldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+PENPREU+WG1sR0RheS5zZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcik8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwjc2V0KGphdmEudXRpbC5DYWxlbmRhcikiPjxCPnNldChDYWxlbmRhcik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+WG1sRGF0ZVRpbWU8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwjc2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpIj48Q09ERT5YbWxEYXRlVGltZS5zZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcik8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCNzZXQoamF2YS51dGlsLkNhbGVuZGFyKSI+PEI+c2V0KENhbGVuZGFyKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPlhtbERhdGU8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCNzZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcikiPjxDT0RFPlhtbERhdGUuc2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldChqYXZhLnV0aWwuQ2FsZW5kYXIpIj48Qj5zZXQoQ2FsZW5kYXIpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+PENPREU+U2ltcGxlVmFsdWUuc2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXQoamF2YS51dGlsLkNhbGVuZGFyKSI+PEI+c2V0KENhbGVuZGFyKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sI3NldChqYXZhLnV0aWwuRGF0ZSkiPjxCPnNldChEYXRlKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj5YbWxEYXRlVGltZTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCNzZXREYXRlVmFsdWUoamF2YS51dGlsLkRhdGUpIj48Q09ERT5YbWxEYXRlVGltZS5zZXREYXRlVmFsdWUoamF2YS51dGlsLkRhdGUpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwjc2V0KGphdmEudXRpbC5EYXRlKSI+PEI+c2V0KERhdGUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+WG1sRGF0ZTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sI3NldERhdGVWYWx1ZShqYXZhLnV0aWwuRGF0ZSkiPjxDT0RFPlhtbERhdGUuc2V0RGF0ZVZhbHVlKGphdmEudXRpbC5EYXRlKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoamF2YS51dGlsLkRhdGUpIj48Qj5zZXQoRGF0ZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0RGF0ZVZhbHVlKGphdmEudXRpbC5EYXRlKSI+PENPREU+U2ltcGxlVmFsdWUuc2V0RGF0ZVZhbHVlKGphdmEudXRpbC5EYXRlKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0KGphdmEudXRpbC5EYXRlKSI+PEI+c2V0KERhdGUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sI3NldChkb3VibGUpIj48Qj5zZXQoZG91YmxlKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+WG1sRG91YmxlPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCNzZXREb3VibGVWYWx1ZShkb3VibGUpIj48Q09ERT5YbWxEb3VibGUuc2V0RG91YmxlVmFsdWUoZG91YmxlKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoZG91YmxlKSI+PEI+c2V0KGRvdWJsZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0RG91YmxlVmFsdWUoZG91YmxlKSI+PENPREU+U2ltcGxlVmFsdWUuc2V0RG91YmxlVmFsdWUoZG91YmxlKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0KGRvdWJsZSkiPjxCPnNldChkb3VibGUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwjc2V0KGZsb2F0KSI+PEI+c2V0KGZsb2F0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj5YbWxGbG9hdDwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwjc2V0RmxvYXRWYWx1ZShmbG9hdCkiPjxDT0RFPlhtbEZsb2F0LnNldEZsb2F0VmFsdWUoZmxvYXQpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldChmbG9hdCkiPjxCPnNldChmbG9hdCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0RmxvYXRWYWx1ZShmbG9hdCkiPjxDT0RFPlNpbXBsZVZhbHVlLnNldEZsb2F0VmFsdWUoZmxvYXQpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXQoZmxvYXQpIj48Qj5zZXQoZmxvYXQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj48Qj5zZXQoR0RhdGVTcGVjaWZpY2F0aW9uKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPlhtbFRpbWU8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCNzZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpIj48Q09ERT5YbWxUaW1lLnNldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj48Qj5zZXQoR0RhdGVTcGVjaWZpY2F0aW9uKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPlhtbEdZZWFyTW9udGg8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCNzZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpIj48Q09ERT5YbWxHWWVhck1vbnRoLnNldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwjc2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+PEI+c2V0KEdEYXRlU3BlY2lmaWNhdGlvbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+WG1sR1llYXI8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwjc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKSI+PENPREU+WG1sR1llYXIuc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwjc2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+PEI+c2V0KEdEYXRlU3BlY2lmaWNhdGlvbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPlhtbEdNb250aERheTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwjc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKSI+PENPREU+WG1sR01vbnRoRGF5LnNldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlU3BlY2lmaWNhdGlvbikiPjxCPnNldChHRGF0ZVNwZWNpZmljYXRpb24pPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj5YbWxHTW9udGg8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI3NldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSkiPjxDT0RFPlhtbEdNb250aC5zZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwjc2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+PEI+c2V0KEdEYXRlU3BlY2lmaWNhdGlvbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj5YbWxHRGF5PC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwjc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKSI+PENPREU+WG1sR0RheS5zZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlU3BlY2lmaWNhdGlvbikiPjxCPnNldChHRGF0ZVNwZWNpZmljYXRpb24pPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPlhtbERhdGVUaW1lPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sI3NldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSkiPjxDT0RFPlhtbERhdGVUaW1lLnNldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj48Qj5zZXQoR0RhdGVTcGVjaWZpY2F0aW9uKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPlhtbERhdGU8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCNzZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpIj48Q09ERT5YbWxEYXRlLnNldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+PEI+c2V0KEdEYXRlU3BlY2lmaWNhdGlvbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKSI+PENPREU+U2ltcGxlVmFsdWUuc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+PEI+c2V0KEdEYXRlU3BlY2lmaWNhdGlvbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb25TcGVjaWZpY2F0aW9uKSI+PEI+c2V0KEdEdXJhdGlvblNwZWNpZmljYXRpb24pPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPlhtbER1cmF0aW9uPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sI3NldEdEdXJhdGlvblZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uKSI+PENPREU+WG1sRHVyYXRpb24uc2V0R0R1cmF0aW9uVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb24pPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvblNwZWNpZmljYXRpb24pIj48Qj5zZXQoR0R1cmF0aW9uU3BlY2lmaWNhdGlvbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0R0R1cmF0aW9uVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb24pIj48Q09ERT5TaW1wbGVWYWx1ZS5zZXRHRHVyYXRpb25WYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvbik8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvblNwZWNpZmljYXRpb24pIj48Qj5zZXQoR0R1cmF0aW9uU3BlY2lmaWNhdGlvbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sI3NldChpbnQpIj48Qj5zZXQoaW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQ8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCNzZXRJbnRWYWx1ZShpbnQpIj48Q09ERT5YbWxVbnNpZ25lZFNob3J0LnNldEludFZhbHVlKGludCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sI3NldChpbnQpIj48Qj5zZXQoaW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+WG1sSW50PC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCNzZXRJbnRWYWx1ZShpbnQpIj48Q09ERT5YbWxJbnQuc2V0SW50VmFsdWUoaW50KTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCNzZXQoaW50KSI+PEI+c2V0KGludCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+WG1sR1llYXI8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwjc2V0SW50VmFsdWUoaW50KSI+PENPREU+WG1sR1llYXIuc2V0SW50VmFsdWUoaW50KTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwjc2V0KGludCkiPjxCPnNldChpbnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj5YbWxHTW9udGg8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI3NldEludFZhbHVlKGludCkiPjxDT0RFPlhtbEdNb250aC5zZXRJbnRWYWx1ZShpbnQpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwjc2V0KGludCkiPjxCPnNldChpbnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+WG1sR0RheTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sI3NldEludFZhbHVlKGludCkiPjxDT0RFPlhtbEdEYXkuc2V0SW50VmFsdWUoaW50KTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoaW50KSI+PEI+c2V0KGludCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0SW50VmFsdWUoaW50KSI+PENPREU+U2ltcGxlVmFsdWUuc2V0SW50VmFsdWUoaW50KTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0KGludCkiPjxCPnNldChpbnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCNzZXQoaW50LCBqYXZhLmxhbmcuT2JqZWN0KSI+PEI+c2V0KGludCwgT2JqZWN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCI+WG1sU2ltcGxlTGlzdDwvQT4KLTxERD5VbnN1cHBvcnRlZCBiZWNhdXNlIHRoaXMgbGlzdCBpcyBpbW11dGFibGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sI3NldChqYXZhLnV0aWwuTGlzdCkiPjxCPnNldChMaXN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj5YbWxOTVRPS0VOUzwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwjZ2V0TGlzdFZhbHVlKCkiPjxDT0RFPlhtbE5NVE9LRU5TLmdldExpc3RWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCNzZXQoamF2YS51dGlsLkxpc3QpIj48Qj5zZXQoTGlzdCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPlhtbElEUkVGUzwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sI2dldExpc3RWYWx1ZSgpIj48Q09ERT5YbWxJRFJFRlMuZ2V0TGlzdFZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwjc2V0KGphdmEudXRpbC5MaXN0KSI+PEI+c2V0KExpc3QpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPlhtbEVOVElUSUVTPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIGJ5IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCNnZXRMaXN0VmFsdWUoKSI+PENPREU+WG1sRU5USVRJRVMuZ2V0TGlzdFZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0KGphdmEudXRpbC5MaXN0KSI+PEI+c2V0KExpc3QpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldExpc3RWYWx1ZShqYXZhLnV0aWwuTGlzdCkiPjxDT0RFPlNpbXBsZVZhbHVlLnNldExpc3RWYWx1ZShqYXZhLnV0aWwuTGlzdCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NldChqYXZhLnV0aWwuTGlzdCkiPjxCPnNldChMaXN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sI3NldChsb25nKSI+PEI+c2V0KGxvbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPlhtbFVuc2lnbmVkSW50PC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sI3NldExvbmdWYWx1ZShsb25nKSI+PENPREU+WG1sVW5zaWduZWRJbnQuc2V0TG9uZ1ZhbHVlKGxvbmcpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwjc2V0KGxvbmcpIj48Qj5zZXQobG9uZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj5YbWxMb25nPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwjc2V0TG9uZ1ZhbHVlKGxvbmcpIj48Q09ERT5YbWxMb25nLnNldExvbmdWYWx1ZShsb25nKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQobG9uZykiPjxCPnNldChsb25nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRMb25nVmFsdWUobG9uZykiPjxDT0RFPlNpbXBsZVZhbHVlLnNldExvbmdWYWx1ZShsb25nKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0KGxvbmcpIj48Qj5zZXQobG9uZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCNzZXQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxCPnNldChRTmFtZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+WG1sUU5hbWU8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwjc2V0UU5hbWVWYWx1ZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PENPREU+WG1sUU5hbWUuc2V0UU5hbWVWYWx1ZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxCPnNldChRTmFtZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0UU5hbWVWYWx1ZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PENPREU+U2ltcGxlVmFsdWUuc2V0UU5hbWVWYWx1ZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48Qj5zZXQoUU5hbWUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sI3NldChzaG9ydCkiPjxCPnNldChzaG9ydCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPlhtbFVuc2lnbmVkQnl0ZTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwjc2V0U2hvcnRWYWx1ZShzaG9ydCkiPjxDT0RFPlhtbFVuc2lnbmVkQnl0ZS5zZXRTaG9ydFZhbHVlKHNob3J0KTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCNzZXQoc2hvcnQpIj48Qj5zZXQoc2hvcnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPlhtbFNob3J0PC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sI3NldFNob3J0VmFsdWUoc2hvcnQpIj48Q09ERT5YbWxTaG9ydC5zZXRTaG9ydFZhbHVlKHNob3J0KTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoc2hvcnQpIj48Qj5zZXQoc2hvcnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldFNob3J0VmFsdWUoc2hvcnQpIj48Q09ERT5TaW1wbGVWYWx1ZS5zZXRTaG9ydFZhbHVlKHNob3J0KTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0KHNob3J0KSI+PEI+c2V0KHNob3J0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0KGphdmEubGFuZy5TdHJpbmcpIj48Qj5zZXQoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgYnkgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0U3RyaW5nVmFsdWUoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPlhtbEFueVNpbXBsZVR5cGUuc2V0U3RyaW5nVmFsdWUoamF2YS5sYW5nLlN0cmluZyk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0KGphdmEubGFuZy5TdHJpbmcpIj48Qj5zZXQoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+U2ltcGxlVmFsdWUuc2V0U3RyaW5nVmFsdWUoamF2YS5sYW5nLlN0cmluZyk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NldChqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2V0KFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlKSI+PEI+c2V0KFN0cmluZ0VudW1BYnN0cmFjdEJhc2UpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEVudW1WYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlN0cmluZ0VudW1BYnN0cmFjdEJhc2UpIj48Q09ERT5TaW1wbGVWYWx1ZS5zZXRFbnVtVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuU3RyaW5nRW51bUFic3RyYWN0QmFzZSkiPjxCPnNldChTdHJpbmdFbnVtQWJzdHJhY3RCYXNlKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj48Qj5zZXQoWG1sT2JqZWN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPgotPEREPlNldCB0aGUgdmFsdWUvdHlwZSBvZiB0aGlzIFhtbE9iamVjdCB0byBiZSBhIGNvcHkgb2YgdGhlIHNvdXJjZQotIFhtbE9iamVjdC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPjxCPnNldChYbWxPYmplY3QpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3NldEF0dHJpYnV0ZVRleHQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSwgamF2YS5sYW5nLlN0cmluZykiPjxCPnNldEF0dHJpYnV0ZVRleHQoUU5hbWUsIFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5XaGVuIGF0IGEgU1RBUlQgb3IgU1RBUlRET0MsIHNldHMgdGhlIGF0dHJpYnV0ZSB0ZXh0IGZvciB0aGUgZ2l2ZW4KLSBhdHRyaWJ1dGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjc2V0QmlnRGVjaW1hbFZhbHVlKGphdmEubWF0aC5CaWdEZWNpbWFsKSI+PEI+c2V0QmlnRGVjaW1hbFZhbHVlKEJpZ0RlY2ltYWwpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+PENPREU+QmlnRGVjaW1hbDwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEJpZ0RlY2ltYWxWYWx1ZShqYXZhLm1hdGguQmlnRGVjaW1hbCkiPjxCPnNldEJpZ0RlY2ltYWxWYWx1ZShCaWdEZWNpbWFsKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj48Q09ERT5CaWdEZWNpbWFsPC9DT0RFPjwvQT4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXRCaWdEZWNpbWFsVmFsdWUoamF2YS5tYXRoLkJpZ0RlY2ltYWwpIj48Qj5zZXRCaWdEZWNpbWFsVmFsdWUoQmlnRGVjaW1hbCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI3NldEJpZ0ludGVnZXJWYWx1ZShqYXZhLm1hdGguQmlnSW50ZWdlcikiPjxCPnNldEJpZ0ludGVnZXJWYWx1ZShCaWdJbnRlZ2VyKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPjxDT0RFPkJpZ0ludGVnZXI8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRCaWdJbnRlZ2VyVmFsdWUoamF2YS5tYXRoLkJpZ0ludGVnZXIpIj48Qj5zZXRCaWdJbnRlZ2VyVmFsdWUoQmlnSW50ZWdlcik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCI+PENPREU+QmlnSW50ZWdlcjwvQ09ERT48L0E+LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0QmlnSW50ZWdlclZhbHVlKGphdmEubWF0aC5CaWdJbnRlZ2VyKSI+PEI+c2V0QmlnSW50ZWdlclZhbHVlKEJpZ0ludGVnZXIpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3NldEJvb2ttYXJrKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yLlhtbEJvb2ttYXJrKSI+PEI+c2V0Qm9va21hcmsoWG1sQ3Vyc29yLlhtbEJvb2ttYXJrKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPlNldHMgYSBib29rbWFyayB0byB0aGUgZG9jdW1lbnQgYXQgdGhpcyBjdXJzb3IncyBsb2NhdGlvbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCNzZXRCb29sZWFuVmFsdWUoYm9vbGVhbikiPjxCPnNldEJvb2xlYW5WYWx1ZShib29sZWFuKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPlhtbEJvb2xlYW48L0E+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgYm9vbGVhbgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRCb29sZWFuVmFsdWUoYm9vbGVhbikiPjxCPnNldEJvb2xlYW5WYWx1ZShib29sZWFuKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIGJvb2xlYW4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXRCb29sZWFuVmFsdWUoYm9vbGVhbikiPjxCPnNldEJvb2xlYW5WYWx1ZShib29sZWFuKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNzZXRCdWlsdGluVHlwZUNvZGUoaW50KSI+PEI+c2V0QnVpbHRpblR5cGVDb2RlKGludCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+R0RhdGVCdWlsZGVyPC9BPgotPEREPkNsZWFycyB0aGUgZmllbGRzIGluIHRoaXMgR0RhdGVCdWlsZGVyIHRoYXQgYXJlIG5vdCBhcHBsaWNhYmxlCi0gZm9yIHRoZSBnaXZlbiBTY2hlbWFUeXBlIGRhdGUgY29kZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sI3NldEJ5dGVBcnJheVZhbHVlKGJ5dGVbXSkiPjxCPnNldEJ5dGVBcnJheVZhbHVlKGJ5dGVbXSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPlhtbEhleEJpbmFyeTwvQT4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSBieXRlIGFycmF5LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwjc2V0Qnl0ZUFycmF5VmFsdWUoYnl0ZVtdKSI+PEI+c2V0Qnl0ZUFycmF5VmFsdWUoYnl0ZVtdKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5PC9BPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIGJ5dGUgYXJyYXkuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEJ5dGVBcnJheVZhbHVlKGJ5dGVbXSkiPjxCPnNldEJ5dGVBcnJheVZhbHVlKGJ5dGVbXSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSBieXRlIGFycmF5LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0Qnl0ZUFycmF5VmFsdWUoYnl0ZVtdKSI+PEI+c2V0Qnl0ZUFycmF5VmFsdWUoYnl0ZVtdKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwjc2V0Qnl0ZVZhbHVlKGJ5dGUpIj48Qj5zZXRCeXRlVmFsdWUoYnl0ZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj5YbWxCeXRlPC9BPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIGJ5dGUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0Qnl0ZVZhbHVlKGJ5dGUpIj48Qj5zZXRCeXRlVmFsdWUoYnl0ZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSBieXRlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0Qnl0ZVZhbHVlKGJ5dGUpIj48Qj5zZXRCeXRlVmFsdWUoYnl0ZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sI3NldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+PEI+c2V0Q2FsZW5kYXJWYWx1ZShDYWxlbmRhcik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj5YbWxUaW1lPC9BPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sI3NldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+PEI+c2V0Q2FsZW5kYXJWYWx1ZShDYWxlbmRhcik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj5YbWxHWWVhck1vbnRoPC9BPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCNzZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcikiPjxCPnNldENhbGVuZGFyVmFsdWUoQ2FsZW5kYXIpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPlhtbEdZZWFyPC9BPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwjc2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpIj48Qj5zZXRDYWxlbmRhclZhbHVlKENhbGVuZGFyKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+WG1sR01vbnRoRGF5PC9BPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwjc2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpIj48Qj5zZXRDYWxlbmRhclZhbHVlKENhbGVuZGFyKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+WG1sR01vbnRoPC9BPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sI3NldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+PEI+c2V0Q2FsZW5kYXJWYWx1ZShDYWxlbmRhcik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj5YbWxHRGF5PC9BPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCNzZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcikiPjxCPnNldENhbGVuZGFyVmFsdWUoQ2FsZW5kYXIpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPlhtbERhdGVUaW1lPC9BPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sI3NldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+PEI+c2V0Q2FsZW5kYXJWYWx1ZShDYWxlbmRhcik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj5YbWxEYXRlPC9BPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcikiPjxCPnNldENhbGVuZGFyVmFsdWUoQ2FsZW5kYXIpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpIj48Qj5zZXRDYWxlbmRhclZhbHVlKENhbGVuZGFyKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0Q2hhcmFjdGVyRW5jb2RpbmcoamF2YS5sYW5nLlN0cmluZykiPjxCPnNldENoYXJhY3RlckVuY29kaW5nKFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+V2hlbiBwYXJzaW5nIG9yIHdyaXRpbmcgYSBkb2N1bWVudCwgdGhpcyBzZXRzIHRoZSBjaGFyYWN0ZXIKLSBlbmNvZGluZyB0byB1c2UuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0Q29tcGlsZURvd25sb2FkVXJscygpIj48Qj5zZXRDb21waWxlRG93bmxvYWRVcmxzKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+SWYgdGhpcyBvcHRpb24gaXMgc2V0LCB0aGVuIHRoZSBzY2hlbWEgY29tcGlsZXIgd2lsbCB0cnkgdG8gZG93bmxvYWQKLSBzY2hlbWFzIHRoYXQgYXBwZWFyIGluIGltcG9ydHMgYW5kIGluY2x1ZGVzIGZyb20gbmV0d29yayBiYXNlZCBVUkxzLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldENvbXBpbGVNZGVmTmFtZXNwYWNlcyhqYXZhLnV0aWwuU2V0KSI+PEI+c2V0Q29tcGlsZU1kZWZOYW1lc3BhY2VzKFNldCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+SWYgdGhpcyBvcHRpb24gaXMgc2V0LCB0aGVuIHRoZSBzY2hlbWEgY29tcGlsZXIgd2lsbCBwZXJtaXQgYW5kCi0gaWdub3JlIG11bHRpcGxlIGRlZmluaXRpb25zIG9mIHRoZSBzYW1lIGNvbXBvbmVudCAoZWxlbWVudCwgYXR0cmlidXRlLAotIHR5cGUsIGV0YykgbmFtZXMgaW4gdGhlIGdpdmVuIG5hbWVzcGFjZXMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0Q29tcGlsZU5vUHZyUnVsZSgpIj48Qj5zZXRDb21waWxlTm9QdnJSdWxlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+SWYgdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUgcGFydGljbGUgdmFsaWQgKHJlc3RyaWNpdG9uKSBydWxlIGlzIG5vdAotIGVuZm9yY2VkIHdoZW4gYnVpbGRpbmcgYSA8Y29kZT5TY2hlbWFUeXBlU3lzdGVtPC9jb2RlPi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRDb21waWxlTm9VcGFSdWxlKCkiPjxCPnNldENvbXBpbGVOb1VwYVJ1bGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4KLTxERD5JZiB0aGlzIG9wdGlvbiBpcyBzZXQsIHRoZSB1bmlxdWUgcGFydGljbGUgYXR0cmlidXRpb24gcnVsZSBpcyBub3QKLSBlbmZvcmNlZCB3aGVuIGJ1aWxkaW5nIGEgPGNvZGU+U2NoZW1hVHlwZVN5c3RlbTwvY29kZT4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0Q29tcGlsZU5vVmFsaWRhdGlvbigpIj48Qj5zZXRDb21waWxlTm9WYWxpZGF0aW9uKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+SWYgdGhpcyBvcHRpb24gaXMgc2V0LCB2YWxpZGF0aW9uIGlzIG5vdCBkb25lIG9uIHRoZSBTY2hlbWEgWG1sQmVhbnMKLSB3aGVuIGJ1aWxkaW5nIGEgPGNvZGU+U2NoZW1hVHlwZVN5c3RlbTwvY29kZT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRDb21waWxlU3Vic3RpdHV0ZU5hbWVzKGphdmEudXRpbC5NYXApIj48Qj5zZXRDb21waWxlU3Vic3RpdHV0ZU5hbWVzKE1hcCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+VGhpcyBvcHRpb24gYWxsb3dzIGZvciA8Y29kZT5RTmFtZTwvY29kZT4gc3Vic3RpdHV0aW9uIGR1cmluZyBzY2hlbWEgY29tcGlsYXRpb24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNzZXREYXRlKGphdmEudXRpbC5EYXRlKSI+PEI+c2V0RGF0ZShEYXRlKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sIj5HRGF0ZUJ1aWxkZXI8L0E+Ci08REQ+U2V0cyB0aGUgY3VycmVudCB0aW1lIGFuZCBkYXRlIGJhc2VkIG9uIGEgamF2YS51dGlsLkRhdGUgaW5zdGFuY2UuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sI3NldERhdGVWYWx1ZShqYXZhLnV0aWwuRGF0ZSkiPjxCPnNldERhdGVWYWx1ZShEYXRlKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj5YbWxEYXRlVGltZTwvQT4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+PENPREU+RGF0ZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwjc2V0RGF0ZVZhbHVlKGphdmEudXRpbC5EYXRlKSI+PEI+c2V0RGF0ZVZhbHVlKERhdGUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+WG1sRGF0ZTwvQT4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+PENPREU+RGF0ZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldERhdGVWYWx1ZShqYXZhLnV0aWwuRGF0ZSkiPjxCPnNldERhdGVWYWx1ZShEYXRlKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvRGF0ZS5odG1sIj48Q09ERT5EYXRlPC9DT0RFPjwvQT4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXREYXRlVmFsdWUoamF2YS51dGlsLkRhdGUpIj48Qj5zZXREYXRlVmFsdWUoRGF0ZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sI3NldERheShpbnQpIj48Qj5zZXREYXkoaW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCI+R0R1cmF0aW9uQnVpbGRlcjwvQT4KLTxERD5TZXRzIHRoZSBkYXkgY29tcG9uZW50LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjc2V0RGF5KGludCkiPjxCPnNldERheShpbnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwiPkdEYXRlQnVpbGRlcjwvQT4KLTxERD5TZXRzIHRoZSBkYXktb2YtbW9udGguCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sI3NldERlZmF1bHRZZWFyKGludCkiPjxCPnNldERlZmF1bHRZZWFyKGludCk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ2FsZW5kYXIuaHRtbCI+WG1sQ2FsZW5kYXI8L0E+Ci08REQ+U2V0cyB0aGUgZGVmYXVsdCB5ZWFyIHRvIGJlIHVzZWQgd2hlbiBubyB5ZWFyIGlzIHNwZWNpZmllZC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5odG1sI3NldERvY3R5cGVOYW1lKGphdmEubGFuZy5TdHJpbmcpIj48Qj5zZXREb2N0eXBlTmFtZShTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwiPlhtbERvY3VtZW50UHJvcGVydGllczwvQT4KLTxERD5TZXRzIHRoZSBET0NUWVBFIG5hbWUgdXNlIGluIHRoZSAmbHQmIzMzO0RPQ1RZUEUmZ3Q7IGRlY2xhcmF0aW9uLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwjc2V0RG9jdHlwZVB1YmxpY0lkKGphdmEubGFuZy5TdHJpbmcpIj48Qj5zZXREb2N0eXBlUHVibGljSWQoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5odG1sIj5YbWxEb2N1bWVudFByb3BlcnRpZXM8L0E+Ci08REQ+U2V0cyB0aGUgRE9DVFlQRSBwdWJsaWMgSUQgdG8gdXNlIGluIHRoZSAmbHQmIzMzO0RPQ1RZUEUmZ3Q7IGRlY2xhcmF0aW9uLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwjc2V0RG9jdHlwZVN5c3RlbUlkKGphdmEubGFuZy5TdHJpbmcpIj48Qj5zZXREb2N0eXBlU3lzdGVtSWQoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5odG1sIj5YbWxEb2N1bWVudFByb3BlcnRpZXM8L0E+Ci08REQ+U2V0cyB0aGUgRE9DVFlQRSBzeXN0ZW0gSUQgdG8gdXNlIGluIHRoZSAmbHQmIzMzO0RPQ1RZUEUmZ3Q7IGRlY2xhcmF0aW9uLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldERvY3VtZW50U291cmNlTmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2V0RG9jdW1lbnRTb3VyY2VOYW1lKFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+VGhpcyBvcHRpb24gc2V0cyB0aGUgZG9jdW1lbnQgc291cmNlIG5hbWUgaW50byB0aGUgeG1sIHN0b3JlCi0gd2hlbiBwYXJzaW5nIGEgZG9jdW1lbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0RG9jdW1lbnRUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPjxCPnNldERvY3VtZW50VHlwZShTY2hlbWFUeXBlKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4KLTxERD5XaGVuIHBhcnNpbmcgYSBkb2N1bWVudCwgdGhpcyBzZXRzIHRoZSB0eXBlIG9mIHRoZSByb290Ci0gZWxlbWVudC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sI3NldERvdWJsZVZhbHVlKGRvdWJsZSkiPjxCPnNldERvdWJsZVZhbHVlKGRvdWJsZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPlhtbERvdWJsZTwvQT4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSBkb3VibGUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0RG91YmxlVmFsdWUoZG91YmxlKSI+PEI+c2V0RG91YmxlVmFsdWUoZG91YmxlKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIGRvdWJsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NldERvdWJsZVZhbHVlKGRvdWJsZSkiPjxCPnNldERvdWJsZVZhbHVlKGRvdWJsZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwjc2V0RW5jb2RpbmcoamF2YS5sYW5nLlN0cmluZykiPjxCPnNldEVuY29kaW5nKFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCI+WG1sRG9jdW1lbnRQcm9wZXJ0aWVzPC9BPgotPEREPlNldHMgdGhlIGVuY29kaW5nIHRvIHVzZSBmb3IgdGhlIFhNTCBkb2N1bWVudC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRFbnRpdHlSZXNvbHZlcihvcmcueG1sLnNheC5FbnRpdHlSZXNvbHZlcikiPjxCPnNldEVudGl0eVJlc29sdmVyKEVudGl0eVJlc29sdmVyKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4KLTxERD5JZiB0aGlzIG9wdGlvbiBpcyBzZXQgd2hlbiBjb21waWxpbmcgYSBzY2hlbWEsIHRoZW4gdGhlIGdpdmVuCi0gRW50aXR5UmVzb2x2ZXIgd2lsbCBiZSBjb25zdWx0ZWQgaW4gb3JkZXIgdG8gcmVzb2x2ZSBhbnkKLSBVUklzIHdoaWxlIGRvd25sb2FkaW5nIGltcG9ydGVkIHNjaGVtYXMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEVudW1WYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlN0cmluZ0VudW1BYnN0cmFjdEJhc2UpIj48Qj5zZXRFbnVtVmFsdWUoU3RyaW5nRW51bUFic3RyYWN0QmFzZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuaHRtbCI+PENPREU+U3RyaW5nRW51bUFic3RyYWN0QmFzZTwvQ09ERT48L0E+LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0RW51bVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuU3RyaW5nRW51bUFic3RyYWN0QmFzZSkiPjxCPnNldEVudW1WYWx1ZShTdHJpbmdFbnVtQWJzdHJhY3RCYXNlKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0RXJyb3JMaXN0ZW5lcihqYXZhLnV0aWwuQ29sbGVjdGlvbikiPjxCPnNldEVycm9yTGlzdGVuZXIoQ29sbGVjdGlvbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+U2V0cyBhIGNvbGxlY3Rpb24gb2JqZWN0IGZvciBjb2xsZWN0aW5nIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+PENPREU+WG1sRXJyb3I8L0NPREU+PC9BPiBvYmplY3RzIAotIGR1cmluZyBwYXJzaW5nLCB2YWxpZGF0aW9uLCBhbmQgY29tcGlsYXRpb24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sI3NldEZsb2F0VmFsdWUoZmxvYXQpIj48Qj5zZXRGbG9hdFZhbHVlKGZsb2F0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj5YbWxGbG9hdDwvQT4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSBmbG9hdAotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRGbG9hdFZhbHVlKGZsb2F0KSI+PEI+c2V0RmxvYXRWYWx1ZShmbG9hdCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSBmbG9hdC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NldEZsb2F0VmFsdWUoZmxvYXQpIj48Qj5zZXRGbG9hdFZhbHVlKGZsb2F0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwjc2V0RnJhY3Rpb24oamF2YS5tYXRoLkJpZ0RlY2ltYWwpIj48Qj5zZXRGcmFjdGlvbihCaWdEZWNpbWFsKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCI+R0R1cmF0aW9uQnVpbGRlcjwvQT4KLTxERD5TZXRzIHRoZSBmcmFjdGlvbi1vZi1zZWNvbmQgY29tcG9uZW50LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjc2V0R0RhdGUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj48Qj5zZXRHRGF0ZShHRGF0ZVNwZWNpZmljYXRpb24pPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwiPkdEYXRlQnVpbGRlcjwvQT4KLTxERD5Db3BpZXMgYSBHRGF0ZVNwZWNpZmljYXRpb24sIGNvbXBsZXRlbHkgcmVwbGFjaW5nIHRoZSBjdXJyZW50Ci0gaW5mb3JtYXRpb24gaW4gdGhpcyBHRGF0ZUJ1aWxkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwjc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKSI+PEI+c2V0R0RhdGVWYWx1ZShHRGF0ZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj5YbWxUaW1lPC9BPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPjxDT0RFPkdEYXRlU3BlY2lmaWNhdGlvbjwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwjc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKSI+PEI+c2V0R0RhdGVWYWx1ZShHRGF0ZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj5YbWxHWWVhck1vbnRoPC9BPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPjxDT0RFPkdEYXRlU3BlY2lmaWNhdGlvbjwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sI3NldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSkiPjxCPnNldEdEYXRlVmFsdWUoR0RhdGUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPlhtbEdZZWFyPC9BPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPjxDT0RFPkdEYXRlU3BlY2lmaWNhdGlvbjwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCNzZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpIj48Qj5zZXRHRGF0ZVZhbHVlKEdEYXRlKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+WG1sR01vbnRoRGF5PC9BPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPjxDT0RFPkdEYXRlU3BlY2lmaWNhdGlvbjwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCNzZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpIj48Qj5zZXRHRGF0ZVZhbHVlKEdEYXRlKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+WG1sR01vbnRoPC9BPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPjxDT0RFPkdEYXRlU3BlY2lmaWNhdGlvbjwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwjc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKSI+PEI+c2V0R0RhdGVWYWx1ZShHRGF0ZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj5YbWxHRGF5PC9BPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPjxDT0RFPkdEYXRlU3BlY2lmaWNhdGlvbjwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sI3NldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSkiPjxCPnNldEdEYXRlVmFsdWUoR0RhdGUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPlhtbERhdGVUaW1lPC9BPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPjxDT0RFPkdEYXRlU3BlY2lmaWNhdGlvbjwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwjc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKSI+PEI+c2V0R0RhdGVWYWx1ZShHRGF0ZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj5YbWxEYXRlPC9BPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPjxDT0RFPkdEYXRlU3BlY2lmaWNhdGlvbjwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSkiPjxCPnNldEdEYXRlVmFsdWUoR0RhdGUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZTwvQ09ERT48L0E+LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKSI+PEI+c2V0R0RhdGVWYWx1ZShHRGF0ZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCNzZXRHRHVyYXRpb25WYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvbikiPjxCPnNldEdEdXJhdGlvblZhbHVlKEdEdXJhdGlvbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+WG1sRHVyYXRpb248L0E+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCI+PENPREU+R0R1cmF0aW9uPC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0R0R1cmF0aW9uVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb24pIj48Qj5zZXRHRHVyYXRpb25WYWx1ZShHRHVyYXRpb24pPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCI+PENPREU+R0R1cmF0aW9uPC9DT0RFPjwvQT4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXRHRHVyYXRpb25WYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvbikiPjxCPnNldEdEdXJhdGlvblZhbHVlKEdEdXJhdGlvbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmFjdG9yeUhvb2suVGhyZWFkQ29udGV4dC5odG1sI3NldEhvb2sob3JnLmFwYWNoZS54bWxiZWFucy5YbWxGYWN0b3J5SG9vaykiPjxCPnNldEhvb2soWG1sRmFjdG9yeUhvb2spPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQuaHRtbCI+WG1sRmFjdG9yeUhvb2suVGhyZWFkQ29udGV4dDwvQT4KLTxERD5TZXRzIHRoZSBob29rIGZvciB0aGUgY3VycmVudCB0aHJlYWQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwjc2V0SG91cihpbnQpIj48Qj5zZXRIb3VyKGludCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwiPkdEdXJhdGlvbkJ1aWxkZXI8L0E+Ci08REQ+U2V0cyB0aGUgaG91ciBjb21wb25lbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwjc2V0SW50VmFsdWUoaW50KSI+PEI+c2V0SW50VmFsdWUoaW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQ8L0E+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGFuIGludAotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwjc2V0SW50VmFsdWUoaW50KSI+PEI+c2V0SW50VmFsdWUoaW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+WG1sSW50PC9BPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhbiBpbnQKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwjc2V0SW50VmFsdWUoaW50KSI+PEI+c2V0SW50VmFsdWUoaW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj5YbWxHWWVhcjwvQT4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYW4gaW50IGZyb20gMS0zMQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwjc2V0SW50VmFsdWUoaW50KSI+PEI+c2V0SW50VmFsdWUoaW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+WG1sR01vbnRoPC9BPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhbiBpbnQgZnJvbSAxLTEyCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwjc2V0SW50VmFsdWUoaW50KSI+PEI+c2V0SW50VmFsdWUoaW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPlhtbEdEYXk8L0E+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGFuIGludCBmcm9tIDEtMzEKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0SW50VmFsdWUoaW50KSI+PEI+c2V0SW50VmFsdWUoaW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhbiBpbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXRJbnRWYWx1ZShpbnQpIj48Qj5zZXRJbnRWYWx1ZShpbnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI3NldEp1bGlhbkRhdGUoaW50KSI+PEI+c2V0SnVsaWFuRGF0ZShpbnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwiPkdEYXRlQnVpbGRlcjwvQT4KLTxERD5TZXRzIHRoZSBHcmVnb3JpYW4gZGF0ZSBiYXNlZCBvbiB0aGUgZ2l2ZW4gSnVsaWFuIGRhdGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sI3NldExpc3RWYWx1ZShqYXZhLnV0aWwuTGlzdCkiPjxCPnNldExpc3RWYWx1ZShMaXN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj5YbWxOTVRPS0VOUzwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj48Q09ERT5MaXN0PC9DT0RFPjwvQT4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sI3NldExpc3RWYWx1ZShqYXZhLnV0aWwuTGlzdCkiPjxCPnNldExpc3RWYWx1ZShMaXN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+WG1sSURSRUZTPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPjxDT0RFPkxpc3Q8L0NPREU+PC9BPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCNzZXRMaXN0VmFsdWUoamF2YS51dGlsLkxpc3QpIj48Qj5zZXRMaXN0VmFsdWUoTGlzdCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+WG1sRU5USVRJRVM8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldExpc3RWYWx1ZShqYXZhLnV0aWwuTGlzdCkiPjxCPnNldExpc3RWYWx1ZShMaXN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj48Q09ERT5MaXN0PC9DT0RFPjwvQT4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXRMaXN0VmFsdWUoamF2YS51dGlsLkxpc3QpIj48Qj5zZXRMaXN0VmFsdWUoTGlzdCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldExvYWRBZGRpdGlvbmFsTmFtZXNwYWNlcyhqYXZhLnV0aWwuTWFwKSI+PEI+c2V0TG9hZEFkZGl0aW9uYWxOYW1lc3BhY2VzKE1hcCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+U2V0IGFkZGl0aW9uYWwgbmFtZXNwYWNlIG1hcHBpbmdzIHRvIGJlIGFkZGVkIHdoZW4gcGFyc2luZwotIGEgZG9jdW1lbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0TG9hZExpbmVOdW1iZXJzKCkiPjxCPnNldExvYWRMaW5lTnVtYmVycygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPgotPEREPklmIHRoaXMgb3B0aW9uIGlzIHNldCwgbGluZSBudW1iZXIgYW5ub3RhdGlvbnMgYXJlIHBsYWNlZAotIGluIHRoZSBzdG9yZSB3aGVuIHBhcnNpbmcgYSBkb2N1bWVudC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRMb2FkTWVzc2FnZURpZ2VzdCgpIj48Qj5zZXRMb2FkTWVzc2FnZURpZ2VzdCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPgotPEREPklmIHRoaXMgb3B0aW9uIGlzIHNldCB3aGVuIGxvYWRpbmcgZnJvbSBhbiBJbnB1dFN0cmVhbSBvciBGaWxlLCB0aGVuCi0gdGhlIGxvYWRlciB3aWxsIGNvbXB1dGUgYSAxNjAtYml0IFNIQS0xIG1lc3NhZ2UgZGlnZXN0IG9mIHRoZSBYTUwKLSBmaWxlIHdoaWxlIGxvYWRpbmcgaXQgYW5kIG1ha2UgaXQgYXZhaWxhYmxlIHZpYQotIFhtbE9iamVjdC5kb2N1bWVudFByb3BlcnRpZXMoKS5nZXRNZXNzYWdlRGlnZXN0KCk7Ci0gPGJyPgotIFRoZSBzY2hlbWEgY29tcGlsZXIgdXNlcyBtZXNzYWdlIGRpZ2VzdHMgdG8gZGV0ZWN0IGFuZCBlbGltaW5hdGUKLSBkdXBsaWNhdGUgaW1wb3J0ZWQgeHNkIGZpbGVzLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldExvYWRSZXBsYWNlRG9jdW1lbnRFbGVtZW50KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48Qj5zZXRMb2FkUmVwbGFjZURvY3VtZW50RWxlbWVudChRTmFtZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+SWYgdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUgZG9jdW1lbnQgZWxlbWVudCBpcyByZXBsYWNlZCB3aXRoIHRoZQotIGdpdmVuIFFOYW1lIHdoZW4gcGFyc2luZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRMb2FkU3RyaXBDb21tZW50cygpIj48Qj5zZXRMb2FkU3RyaXBDb21tZW50cygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPgotPEREPklmIHRoaXMgb3B0aW9uIGlzIHNldCwgYWxsIGNvbW1lbnRzIGFyZSBzdHJpcHBlZCB3aGVuIHBhcnNpbmcKLSBhIGRvY3VtZW50LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldExvYWRTdHJpcFByb2NpbnN0cygpIj48Qj5zZXRMb2FkU3RyaXBQcm9jaW5zdHMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4KLTxERD5JZiB0aGlzIG9wdGlvbiBpcyBzZXQsIGFsbCBwcm9jZXNzaW5nIGluc3RydWN0aW9ucyAKLSBhcmUgc3RyaXBwZWQgd2hlbiBwYXJzaW5nIGEgZG9jdW1lbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0TG9hZFN0cmlwV2hpdGVzcGFjZSgpIj48Qj5zZXRMb2FkU3RyaXBXaGl0ZXNwYWNlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+SWYgdGhpcyBvcHRpb24gaXMgc2V0LCBhbGwgaW5zaWduaWZpY2FudCB3aGl0ZXNwYWNlIGlzIHN0cmlwcGVkCi0gd2hlbiBwYXJzaW5nIGEgZG9jdW1lbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0TG9hZFN1YnN0aXR1dGVOYW1lc3BhY2VzKGphdmEudXRpbC5NYXApIj48Qj5zZXRMb2FkU3Vic3RpdHV0ZU5hbWVzcGFjZXMoTWFwKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4KLTxERD5UaGlzIG9wdGlvbiBzZXRzIGEgbWFwIG9mIG5hbWVzcGFjZSB1cmkgc3Vic3RpdHV0aW9ucyB0aGF0IGhhcHBlbgotIHdoZW4gcGFyc2luZyBhIGRvY3VtZW50LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldExvYWRUcmltVGV4dEJ1ZmZlcigpIj48Qj5zZXRMb2FkVHJpbVRleHRCdWZmZXIoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4KLTxERD5JZiB0aGlzIG9wdGlvbiBpcyBzZXQsIHRoZSB1bmRlcmx5aW5nIHhtbCB0ZXh0IGJ1ZmZlciBpcyB0cmltbWVkCi0gaW1tZWRpYXRlbHkgYWZ0ZXIgcGFyc2luZyBhIGRvY3VtZW50IHJlc3VsdGluZyBpbiBhIHNtYWxsZXIgbWVtb3J5Ci0gZm9vdHByaW50LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCNzZXRMb25nVmFsdWUobG9uZykiPjxCPnNldExvbmdWYWx1ZShsb25nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj5YbWxVbnNpZ25lZEludDwvQT4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSBsb25nCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwjc2V0TG9uZ1ZhbHVlKGxvbmcpIj48Qj5zZXRMb25nVmFsdWUobG9uZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj5YbWxMb25nPC9BPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIGxvbmcKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0TG9uZ1ZhbHVlKGxvbmcpIj48Qj5zZXRMb25nVmFsdWUobG9uZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSBsb25nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0TG9uZ1ZhbHVlKGxvbmcpIj48Qj5zZXRMb25nVmFsdWUobG9uZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwjc2V0TWVzc2FnZURpZ2VzdChieXRlW10pIj48Qj5zZXRNZXNzYWdlRGlnZXN0KGJ5dGVbXSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCI+WG1sRG9jdW1lbnRQcm9wZXJ0aWVzPC9BPgotPEREPlNldHMgdGhlIG1lc3NhZ2UgZGlnZXN0IHVzZWQgdG8gc3VtbWFyaXplIHRoZSBkb2N1bWVudC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCNzZXRNaW51dGUoaW50KSI+PEI+c2V0TWludXRlKGludCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwiPkdEdXJhdGlvbkJ1aWxkZXI8L0E+Ci08REQ+U2V0cyB0aGUgbWludXRlIGNvbXBvbmVudC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCNzZXRNb250aChpbnQpIj48Qj5zZXRNb250aChpbnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sIj5HRHVyYXRpb25CdWlsZGVyPC9BPgotPEREPlNldHMgdGhlIG1vbnRoIGNvbXBvbmVudC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI3NldE1vbnRoKGludCkiPjxCPnNldE1vbnRoKGludCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+R0RhdGVCdWlsZGVyPC9BPgotPEREPlNldHMgdGhlIG1vbnRoLW9mLXllYXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNzZXROYW1lKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48Qj5zZXROYW1lKFFOYW1lKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPlNldHMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgdG9rZW4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXROaWwoKSI+PEI+c2V0TmlsKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSB0byBuaWwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXROaWwoKSI+PEI+c2V0TmlsKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRPYmplY3RWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+c2V0T2JqZWN0VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhbiBhcmJpdHJhcnkgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+PENPREU+T2JqZWN0PC9DT0RFPjwvQT4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXRPYmplY3RWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PEI+c2V0T2JqZWN0VmFsdWUoT2JqZWN0KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sI3NldFFOYW1lVmFsdWUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxCPnNldFFOYW1lVmFsdWUoUU5hbWUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPlhtbFFOYW1lPC9BPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj48Q09ERT5RTmFtZTwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldFFOYW1lVmFsdWUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxCPnNldFFOYW1lVmFsdWUoUU5hbWUpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPjxDT0RFPlFOYW1lPC9DT0RFPjwvQT4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXRRTmFtZVZhbHVlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48Qj5zZXRRTmFtZVZhbHVlKFFOYW1lKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0U2F2ZUFnZ3Jlc2l2ZU5hbWVzcGFjZXMoKSI+PEI+c2V0U2F2ZUFnZ3Jlc2l2ZU5hbWVzcGFjZXMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4KLTxERD5DYXVzZXMgdGhlIHNhdmVyIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIG5hbWVzcGFjZSBwcmVmaXggZGVjbGFyYXRpb25zLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldFNhdmVGaWx0ZXJQcm9jaW5zdChqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2V0U2F2ZUZpbHRlclByb2NpbnN0KFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+VGhpcyBvcHRpb24gY2F1c2VzIHRoZSBzYXZlciB0byBmaWx0ZXIgYSBQcm9jZXNzaW5nIEluc3RydWN0aW9uCi0gd2l0aCB0aGUgZ2l2ZW4gdGFyZ2V0Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0U2F2ZUltcGxpY2l0TmFtZXNwYWNlcyhqYXZhLnV0aWwuTWFwKSI+PEI+c2V0U2F2ZUltcGxpY2l0TmFtZXNwYWNlcyhNYXApPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPgotPEREPklmIG5hbWVzcGFjZXMgaGF2ZSBhbHJlYWR5IGJlZW4gZGVjbGFyZWQgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhlCi0gZnJhZ21lbnQgYmVpbmcgc2F2ZWQsIHRoaXMgYWxsb3dzIHRob3NlIG1hcHBpbmdzIHRvIGJlIHBhc3NlZAotIGRvd24gdG8gdGhlIHNhdmVyLCBzbyB0aGUgcHJlZml4ZXMgYXJlIG5vdCByZS1kZWNsYXJlZC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRTYXZlSW5uZXIoKSI+PEI+c2V0U2F2ZUlubmVyKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+VGhpcyBvcHRpb24gY29udHJvbHMgd2hldGhlciBzYXZpbmcgYmVnaW5zIG9uIHRoZSBlbGVtZW50IG9yIGl0cyBjb250ZW50cwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldFNhdmVOYW1lc3BhY2VzRmlyc3QoKSI+PEI+c2V0U2F2ZU5hbWVzcGFjZXNGaXJzdCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPgotPEREPlRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgdGhlIHNhdmVyIHRvIHNhdmUgbmFtZXNwYWNlIGF0dHJpYnV0ZXMgZmlyc3QuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0U2F2ZU91dGVyKCkiPjxCPnNldFNhdmVPdXRlcigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPgotPEREPlRoaXMgb3B0aW9uIGNvbnRyb2xzIHdoZXRoZXIgc2F2aW5nIGJlZ2lucyBvbiB0aGUgZWxlbWVudCBvciBpdHMgY29udGVudHMKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRTYXZlUHJldHR5UHJpbnQoKSI+PEI+c2V0U2F2ZVByZXR0eVByaW50KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+VGhpcyBvcHRpb24gd2lsbCBjYXVzZSB0aGUgc2F2ZXIgdG8gcmVmb3JtYXQgd2hpdGUgc3BhY2UgZm9yIGVhc2llciByZWFkaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldFNhdmVQcmV0dHlQcmludEluZGVudChpbnQpIj48Qj5zZXRTYXZlUHJldHR5UHJpbnRJbmRlbnQoaW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4KLTxERD5XaGVuIHVzZWQgd2l0aCA8Y29kZT5zZXRTYXZlUHJldHR5UHJpbnQ8L2NvZGU+IHRoaXMgc2V0cyB0aGUgaW5kZW50Ci0gYW1vdW50IHRvIHVzZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRTYXZlUHJldHR5UHJpbnRPZmZzZXQoaW50KSI+PEI+c2V0U2F2ZVByZXR0eVByaW50T2Zmc2V0KGludCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+V2hlbiB1c2VkIHdpdGggPGNvZGU+c2V0U2F2ZVByZXR0eVByaW50PC9jb2RlPiB0aGlzIHNldHMgdGhlIG9mZnNldAotIGFtb3VudCB0byB1c2UuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0U2F2ZVN1Z2dlc3RlZFByZWZpeGVzKGphdmEudXRpbC5NYXApIj48Qj5zZXRTYXZlU3VnZ2VzdGVkUHJlZml4ZXMoTWFwKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4KLTxERD5BIG1hcCBvZiBoaW50cyB0byBwYXNzIHRvIHRoZSBzYXZlciBmb3Igd2hpY2ggcHJlZml4ZXMgdG8gdXNlCi0gZm9yIHdoaWNoIG5hbWVzcGFjZSBVUkkuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0U2F2ZVN5bnRoZXRpY0RvY3VtZW50RWxlbWVudChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PEI+c2V0U2F2ZVN5bnRoZXRpY0RvY3VtZW50RWxlbWVudChRTmFtZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+VGhpcyBvcHRpb24gY2F1c2VzIHRoZSBzYXZlciB0byB3cmFwIHRoZSBjdXJyZW50IGZyYWdtZW50IGluCi0gYW4gZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBuYW1lLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldFNhdmVVc2VPcGVuRnJhZygpIj48Qj5zZXRTYXZlVXNlT3BlbkZyYWcoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4KLTxERD5XaGVuIHNhdmluZyBhIGZyYWdtZW50LCB0aGlzIG9wdGlvbiBjaGFuZ2VzIHRoZSBxbmFtZSBvZiB0aGUgc3ludGhlc2l6ZWQKLSByb290IGVsZW1lbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwjc2V0U2Vjb25kKGludCkiPjxCPnNldFNlY29uZChpbnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sIj5HRHVyYXRpb25CdWlsZGVyPC9BPgotPEREPlNldHMgdGhlIHNlY29uZCBjb21wb25lbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCNzZXRTaG9ydFZhbHVlKHNob3J0KSI+PEI+c2V0U2hvcnRWYWx1ZShzaG9ydCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPlhtbFVuc2lnbmVkQnl0ZTwvQT4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSBzaG9ydAotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCNzZXRTaG9ydFZhbHVlKHNob3J0KSI+PEI+c2V0U2hvcnRWYWx1ZShzaG9ydCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+WG1sU2hvcnQ8L0E+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgc2hvcnQKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0U2hvcnRWYWx1ZShzaG9ydCkiPjxCPnNldFNob3J0VmFsdWUoc2hvcnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgc2hvcnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXRTaG9ydFZhbHVlKHNob3J0KSI+PEI+c2V0U2hvcnRWYWx1ZShzaG9ydCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sI3NldFNpZ24oaW50KSI+PEI+c2V0U2lnbihpbnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sIj5HRHVyYXRpb25CdWlsZGVyPC9BPgotPEREPlNldHMgdGhlIHNpZ24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCNzZXRTb3VyY2VOYW1lKGphdmEubGFuZy5TdHJpbmcpIj48Qj5zZXRTb3VyY2VOYW1lKFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCI+WG1sRG9jdW1lbnRQcm9wZXJ0aWVzPC9BPgotPEREPlNldHMgdGhlIG5hbWUgb2YgdGhlIFhNTCBkb2N1bWVudCBmaWxlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj48Qj5zZXRTdHJpbmdWYWx1ZShTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPjxDT0RFPlN0cmluZzwvQ09ERT48L0E+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj48Qj5zZXRTdHJpbmdWYWx1ZShTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+PENPREU+U3RyaW5nPC9DT0RFPjwvQT4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2V0U3RyaW5nVmFsdWUoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNzZXRUZXh0VmFsdWUoY2hhcltdLCBpbnQsIGludCkiPjxCPnNldFRleHRWYWx1ZShjaGFyW10sIGludCwgaW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPlNldHMgdGhlIHRleHQgdmFsdWUgb2YgdGhlIFhNTCBhdCB0aGlzIGN1cnNvcidzIGxvY2F0aW9uIChpZiB0aGF0IFhNTCdzCi0gdG9rZW4gdHlwZSBpcyBTVEFSVCwgU1RBUlRET0MsIEFUVFIsIENPTU1FTlQgb3IgUFJPQ0lOU1QpIHRvIHRoZSAKLSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlciBhcnJheS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3NldFRleHRWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+PEI+c2V0VGV4dFZhbHVlKFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5TZXRzIHRoZSB0ZXh0IHZhbHVlIG9mIHRoZSBYTUwgYXQgdGhpcyBjdXJzb3IncyBsb2NhdGlvbiBpZiB0aGF0IFhNTCdzCi0gdG9rZW4gdHlwZSBpcyBTVEFSVCwgU1RBUlRET0MsIEFUVFIsIENPTU1FTlQgb3IgUFJPQ0lOU1QuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNzZXRUaW1lKGludCwgaW50LCBpbnQsIGphdmEubWF0aC5CaWdEZWNpbWFsKSI+PEI+c2V0VGltZShpbnQsIGludCwgaW50LCBCaWdEZWNpbWFsKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sIj5HRGF0ZUJ1aWxkZXI8L0E+Ci08REQ+U2V0cyB0aGUgdGltZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI3NldFRpbWVab25lKGludCwgaW50LCBpbnQpIj48Qj5zZXRUaW1lWm9uZShpbnQsIGludCwgaW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sIj5HRGF0ZUJ1aWxkZXI8L0E+Ci08REQ+U2V0cyB0aGUgdGltZSB6b25lIHdpdGhvdXQgY2hhbmdpbmcgdGhlIG90aGVyIHRpbWUKLSBmaWVsZHMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0VXNlRGVmYXVsdE5hbWVzcGFjZSgpIj48Qj5zZXRVc2VEZWZhdWx0TmFtZXNwYWNlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+SWYgdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUgc2F2ZXIgd2lsbCB0cnkgdG8gdXNlIHRoZSBkZWZhdWx0Ci0gbmFtZXNwYWNlIGZvciB0aGUgbW9zdCBjb21tb25seSB1c2VkIFVSSS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRWYWxpZGF0ZU9uU2V0KCkiPjxCPnNldFZhbGlkYXRlT25TZXQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4KLTxERD5JZiB0aGlzIG9wdGlvbiBpcyBzZXQgd2hlbiBhbiBpbnN0YW5jZSBpcyBjcmVhdGVkLCB0aGVuIHZhbHVlCi0gZmFjZXRzIHdpbGwgYmUgY2hlY2tlZCBvbiBlYWNoIGNhbGwgdG8gYSBzZXR0ZXIgb3IgZ2V0dGVyCi0gbWV0aG9kIG9uIGluc3RhbmNlcyBvZiBYbWxPYmplY3Qgd2l0aGluIHRoZSBpbnN0YW5jZSBkb2N1bWVudC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5odG1sI3NldFZlcnNpb24oamF2YS5sYW5nLlN0cmluZykiPjxCPnNldFZlcnNpb24oU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5odG1sIj5YbWxEb2N1bWVudFByb3BlcnRpZXM8L0E+Ci08REQ+U2V0cyB0aGUgWE1MIHZlcnNpb24gc3RyaW5nIHRvIHVzZSBpbiB0aGUgJmx0JiM2Mzt4bWwmIzYzOyZndDsgZGVjbGFyYXRpb24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0WHF1ZXJ5Q3VycmVudE5vZGVWYXIoamF2YS5sYW5nLlN0cmluZykiPjxCPnNldFhxdWVyeUN1cnJlbnROb2RlVmFyKFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+U2V0cyB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdGhhdCByZXByZXNlbnRzCi0gdGhlIGN1cnJlbnQgbm9kZSBpbiBhIHF1ZXJ5IGV4cHJlc3Npb24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwjc2V0WWVhcihpbnQpIj48Qj5zZXRZZWFyKGludCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwiPkdEdXJhdGlvbkJ1aWxkZXI8L0E+Ci08REQ+U2V0cyB0aGUgeWVhciBjb21wb25lbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNzZXRZZWFyKGludCkiPjxCPnNldFllYXIoaW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sIj5HRGF0ZUJ1aWxkZXI8L0E+Ci08REQ+U2V0cyB0aGUgeWVhci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjU0VWRVJJVFlfRVJST1IiPjxCPlNFVkVSSVRZX0VSUk9SPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+WG1sRXJyb3I8L0E+Ci08REQ+QW4gZXJyb3IuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI1NFVkVSSVRZX0lORk8iPjxCPlNFVkVSSVRZX0lORk88L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT4KLTxERD5BbiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI1NFVkVSSVRZX1dBUk5JTkciPjxCPlNFVkVSSVRZX1dBUk5JTkc8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT4KLTxERD5BIHdhcm5pbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCNzaG9ydFZhbHVlKCkiPjxCPnNob3J0VmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+WG1sVW5zaWduZWRCeXRlPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCNnZXRTaG9ydFZhbHVlKCkiPjxDT0RFPlhtbFVuc2lnbmVkQnl0ZS5nZXRTaG9ydFZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwjc2hvcnRWYWx1ZSgpIj48Qj5zaG9ydFZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+WG1sU2hvcnQ8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwjZ2V0U2hvcnRWYWx1ZSgpIj48Q09ERT5YbWxTaG9ydC5nZXRTaG9ydFZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2hvcnRWYWx1ZSgpIj48Qj5zaG9ydFZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0U2hvcnRWYWx1ZSgpIj48Q09ERT5TaW1wbGVWYWx1ZS5nZXRTaG9ydFZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3Nob3J0VmFsdWUoKSI+PEI+c2hvcnRWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNTSU1QTEVfQ09OVEVOVCI+PEI+U0lNUExFX0NPTlRFTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPgotPEREPlNpbXBsZSBjb250ZW50LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+PEI+U2ltcGxlVmFsdWU8L0I+PC9BPiAtIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+LjxERD5BbGwgWG1sT2JqZWN0IGltcGxlbWVudGF0aW9ucyBjYW4gYmUgY29lcmNlZCB0byBTaW1wbGVWYWx1ZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sI3NpbmdsZXRvbihqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PEI+c2luZ2xldG9uKFFOYW1lKTwvQj48L0E+IC0gCi1TdGF0aWMgbWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj5RTmFtZVNldDwvQT4KLTxERD5SZXR1cm5zIGEgUU5hbWVTZXQgY29udGFpbmluZyBvbmx5IHRoZSBnaXZlbiBRTmFtZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNTSVpFX0JJR19ERUNJTUFMIj48Qj5TSVpFX0JJR19ERUNJTUFMPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5GaXRzIGluIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiPjxDT0RFPkJpZ0RlY2ltYWw8L0NPREU+PC9BPi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNTSVpFX0JJR19JTlRFR0VSIj48Qj5TSVpFX0JJR19JTlRFR0VSPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5GaXRzIGluIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPjxDT0RFPkJpZ0ludGVnZXI8L0NPREU+PC9BPi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNTSVpFX0JZVEUiPjxCPlNJWkVfQllURTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+Rml0cyBpbiBhIGJ5dGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjU0laRV9JTlQiPjxCPlNJWkVfSU5UPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5GaXRzIGluIGFuIGludC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNTSVpFX0xPTkciPjxCPlNJWkVfTE9ORzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+Rml0cyBpbiBhIGxvbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjU0laRV9TSE9SVCI+PEI+U0laRV9TSE9SVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+Rml0cyBpbiBhIHNob3J0LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sI3NpemUoKSI+PEI+c2l6ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sIj5YbWxTaW1wbGVMaXN0PC9BPgotPEREPlJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGlzIGxpc3QuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI1NLSVAiPjxCPlNLSVA8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCI+U2NoZW1hUGFydGljbGU8L0E+Ci08REQ+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNXaWxkY2FyZF9kZXRhaWxzIj5Ta2lwIHdpbGRjYXJkPC9hPiBwcm9jZXNzaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCNTS0lQIj48Qj5TS0lQPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZU1vZGVsLmh0bWwiPlNjaGVtYUF0dHJpYnV0ZU1vZGVsPC9BPgotPEREPlNraXAgd2lsZGNhcmQgcHJvY2Vzc2luZy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5odG1sI1NPVVJDRV9OQU1FIj48Qj5TT1VSQ0VfTkFNRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5odG1sIj5YbWxEb2N1bWVudFByb3BlcnRpZXM8L0E+Ci08REQ+VXNlZCB0byBzdG9yZSB0aGUgb3JpZ2luYWwgbmFtZSAoYSBTdHJpbmcpIGZvcgotIHRoZSBzb3VyY2UgZnJvbSB3aGljaCB0aGUgWE1MIGRvY3VtZW50IHdhcyBsb2FkZWQuCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCNTUEFDRSI+PEI+U1BBQ0U8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwiPlhNTFN0cmVhbUNvbnN0YW50czwvQT4KLTxERD5JbmRpY2F0ZXMgYW4gZXZlbnQgaXMgYSBzcGFjZSwgZXZlbnRzIGFyZSBvbmx5Ci0gcmVwb3J0ZWQgYXMgU1BBQ0UgaWYgdGhleSBhcmUgaWdub3JhYmxlIHdoaXRlCi0gc3BhY2UuCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNzdGFuZGFsb25lU2V0KCkiPjxCPnN0YW5kYWxvbmVTZXQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCI+WE1MU3RyZWFtUmVhZGVyPC9BPgotPEREPkNoZWNrcyBpZiBzdGFuZGFsb25lIHdhcyBzZXQgaW4gdGhlIGRvY3VtZW50Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjU1RBUlQiPjxCPlNUQVJUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPgotPEREPlRoZSBzaW5nbGV0b24gc3RhcnQtZWxlbWVudCB0b2tlbiB0eXBlCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCNTVEFSVF9ET0NVTUVOVCI+PEI+U1RBUlRfRE9DVU1FTlQ8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwiPlhNTFN0cmVhbUNvbnN0YW50czwvQT4KLTxERD5JbmRpY2F0ZXMgYW4gZXZlbnQgaXMgYSBzdGFydCBkb2N1bWVudAotPERUPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwjU1RBUlRfRUxFTUVOVCI+PEI+U1RBUlRfRUxFTUVOVDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCI+WE1MU3RyZWFtQ29uc3RhbnRzPC9BPgotPEREPkluZGljYXRlcyBhbiBldmVudCBpcyBhIHN0YXJ0IGVsZW1lbnQKLTxEVD48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sI1NUQVJUX0VOVElUWSI+PEI+U1RBUlRfRU5USVRZPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sIj5YTUxTdHJlYW1Db25zdGFudHM8L0E+Ci08REQ+SW5kaWNhdGVzIGFuIGV2ZW50IGlzIHRoZSBzdGFydCBvZiBhIHJlc29sdmVkIGVudGl0eQotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI1NUQVJURE9DIj48Qj5TVEFSVERPQzwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+WG1sQ3Vyc29yLlRva2VuVHlwZTwvQT4KLTxERD5UaGUgc2luZ2xldG9uIHN0YXJ0LWRvY3VtZW50IHRva2VuIHR5cGUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjU1RSSUNUIj48Qj5TVFJJQ1Q8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCI+U2NoZW1hUGFydGljbGU8L0E+Ci08REQ+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNXaWxkY2FyZF9kZXRhaWxzIj5TdHJpY3Qgd2lsZGNhcmQ8L2E+IHByb2Nlc3NpbmcuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVNb2RlbC5odG1sI1NUUklDVCI+PEI+U1RSSUNUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZU1vZGVsLmh0bWwiPlNjaGVtYUF0dHJpYnV0ZU1vZGVsPC9BPgotPEREPlN0cmljdCB3aWxkY2FyZCBwcm9jZXNzaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sIj48Qj5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlPC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sIj5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlPC9BPi48REQ+VGhlIGJhc2UgY2xhc3MgZm9yIGNvZGUtZ2VuZXJhdGVkIHN0cmluZyBlbnVtZXJhdGlvbiB2YWx1ZSBjbGFzc2VzLjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGUuaHRtbCI+PEI+U3RyaW5nRW51bUFic3RyYWN0QmFzZS5UYWJsZTwvQj48L0E+IC0gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGUuaHRtbCI+U3RyaW5nRW51bUFic3RyYWN0QmFzZS5UYWJsZTwvQT4uPEREPlVzZWQgdG8gbWFuYWdlIHNpbmdsZXRvbiBpbnN0YW5jZXMgb2YgZW51bWVyYXRpb25zLjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGUuaHRtbCNTdHJpbmdFbnVtQWJzdHJhY3RCYXNlLlRhYmxlKG9yZy5hcGFjaGUueG1sYmVhbnMuU3RyaW5nRW51bUFic3RyYWN0QmFzZVtdKSI+PEI+U3RyaW5nRW51bUFic3RyYWN0QmFzZS5UYWJsZShTdHJpbmdFbnVtQWJzdHJhY3RCYXNlW10pPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5UYWJsZS5odG1sIj5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLlRhYmxlPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sI1N0cmluZ0VudW1BYnN0cmFjdEJhc2UoamF2YS5sYW5nLlN0cmluZywgaW50KSI+PEI+U3RyaW5nRW51bUFic3RyYWN0QmFzZShTdHJpbmcsIGludCk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLmh0bWwiPlN0cmluZ0VudW1BYnN0cmFjdEJhc2U8L0E+Ci08REQ+U2luZ2xldG9uIGluc3RhbmNlcyBzaG91bGQgb25seSBiZSBjcmVhdGVkIGJ5IHN1YmNsYXNzZXMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc3RyaW5nVmFsdWUoKSI+PEI+c3RyaW5nVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgYnkgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjZ2V0U3RyaW5nVmFsdWUoKSI+PENPREU+WG1sQW55U2ltcGxlVHlwZS5nZXRTdHJpbmdWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3N0cmluZ1ZhbHVlKCkiPjxCPnN0cmluZ1ZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0U3RyaW5nVmFsdWUoKSI+PENPREU+U2ltcGxlVmFsdWUuZ2V0U3RyaW5nVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc3RyaW5nVmFsdWUoKSI+PEI+c3RyaW5nVmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwjc3ViTGlzdChpbnQsIGludCkiPjxCPnN1Ykxpc3QoaW50LCBpbnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sIj5YbWxTaW1wbGVMaXN0PC9BPgotPEREPlJldHVybnMgYSB2aWV3IG9mIHRoZSBwb3J0aW9uIG9mIHRoaXMgbGlzdCBiZXR3ZWVuIHRoZSBzcGVjaWZpZWQgZnJvbUluZGV4LCBpbmNsdXNpdmUsIGFuZCB0b0luZGV4LCBleGNsdXNpdmUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50Lmh0bWwjc3Vic3RpdHV0aW9uR3JvdXAoKSI+PEI+c3Vic3RpdHV0aW9uR3JvdXAoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50Lmh0bWwiPlNjaGVtYUdsb2JhbEVsZW1lbnQ8L0E+Ci08REQ+VGhlIGVsZW1lbnQgdGhhdCBpcyB0aGUgaGVhZCBvZiB0aGlzIGVsZW1lbnQncyBzdWJzdGl0dXRpb24KLSBncm91cCwgb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYgdGhpcyBlbGVtZW50IGlzIG5vdCBhIG1lbWJlcgotIG9mIGEgc3Vic3RpdHV0aW9uIGdyb3VwLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5odG1sI3N1YnN0aXR1dGlvbkdyb3VwTWVtYmVycygpIj48Qj5zdWJzdGl0dXRpb25Hcm91cE1lbWJlcnMoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50Lmh0bWwiPlNjaGVtYUdsb2JhbEVsZW1lbnQ8L0E+Ci08REQ+U2V0IG9mIFFOYW1lcyBmb3IgZWxlbWVudHMgdGhhdCBhcmUgdGhlIG1lbWJlcnMgb2YgdGhlCi0gc3Vic3RpdHV0aW9uIGdyb3VwIGZvciB3aGljaCB0aGlzIGVsZW1lbnQgaXMgdGhlIGhlYWQsCi0gbm90IGluY2x1ZGluZyB0aGlzIGVsZW1lbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCNzdWJ0cmFjdChvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvblNwZWNpZmljYXRpb24pIj48Qj5zdWJ0cmFjdChHRHVyYXRpb25TcGVjaWZpY2F0aW9uKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+Ci08REQ+UmV0dXJucyBhIG5ldyBHRHVyYXRpb24gd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiBzdWJ0cmFjdGluZwotIHRoZSBzdXBwbGllZCBkdXJhdGlvbiBmcm9tIHRoaXMgb25lLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCNzdWJ0cmFjdChvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvblNwZWNpZmljYXRpb24pIj48Qj5zdWJ0cmFjdChHRHVyYXRpb25TcGVjaWZpY2F0aW9uKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPgotPEREPkFkZHMgYSBkdXJhdGlvbiB0byB0aGlzIEdEYXRlLCBhbmQgcmV0dXJucyBhIG5ldyBHRGF0ZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCNzdWJ0cmFjdEdEdXJhdGlvbihvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvblNwZWNpZmljYXRpb24pIj48Qj5zdWJ0cmFjdEdEdXJhdGlvbihHRHVyYXRpb25TcGVjaWZpY2F0aW9uKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCI+R0R1cmF0aW9uQnVpbGRlcjwvQT4KLTxERD5TdWJ0cmFjdHMgZnJvbSB0aGlzIGR1cmF0aW9uLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjc3VidHJhY3RHRHVyYXRpb24ob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb25TcGVjaWZpY2F0aW9uKSI+PEI+c3VidHJhY3RHRHVyYXRpb24oR0R1cmF0aW9uU3BlY2lmaWNhdGlvbik8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+R0RhdGVCdWlsZGVyPC9BPgotPEREPlN1YnRyYWN0cyBhIGdpdmVuIGR1cmF0aW9uIGZyb20gdGhlIGRhdGUvdGltZS4KLTwvREw+Ci08SFI+Ci08QSBOQU1FPSJfVF8iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPlQ8L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCNURVhUIj48Qj5URVhUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPgotPEREPlRoZSBzaW5nbGV0b24gdGV4dCB0b2tlbiB0eXBlCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwjdG9BcnJheSgpIj48Qj50b0FycmF5KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwiPlhtbFNpbXBsZUxpc3Q8L0E+Ci08REQ+Q29waWVzIHRoZSBjb2xsZWN0aW9uIHRvIGFuIGFycmF5LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sI3RvQXJyYXkoamF2YS5sYW5nLk9iamVjdFtdKSI+PEI+dG9BcnJheShPYmplY3RbXSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwiPlhtbFNpbXBsZUxpc3Q8L0E+Ci08REQ+Q29waWVzIHRoZSBjb2xsZWN0aW9uIHRvIGFuIGFycmF5IG9mIGEgc3BlY2lmaWVkIHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCN0b0Jvb2ttYXJrKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yLlhtbEJvb2ttYXJrKSI+PEI+dG9Cb29rbWFyayhYbWxDdXJzb3IuWG1sQm9va21hcmspPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+TW92ZXMgdGhpcyBjdXJzb3IgdG8gdGhlIHNhbWUgcG9zaXRpb24gYXMgdGhlIGJvb2ttYXJrLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbEJvb2ttYXJrLmh0bWwjdG9Cb29rbWFyayhvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcikiPjxCPnRvQm9va21hcmsoWG1sQ3Vyc29yKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxCb29rbWFyay5odG1sIj5YbWxDdXJzb3IuWG1sQm9va21hcms8L0E+Ci08REQ+TW92ZXMgdGhlIGdpdmVuIGN1cnNvciB0byB0aGlzIGJvb2ttYXJrLCBhbmQgcmV0dXJucyBpdC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3RvQ2hpbGQoaW50KSI+PEI+dG9DaGlsZChpbnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgY2hpbGQgZWxlbWVudCBzcGVjaWZpZWQgYnkgPGVtPmluZGV4PC9lbT4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCN0b0NoaWxkKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48Qj50b0NoaWxkKFFOYW1lKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPk1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGZpcnN0IGNoaWxkIGVsZW1lbnQgb2YgdGhlIHNwZWNpZmllZCBxdWFsaWZpZWQgbmFtZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3RvQ2hpbGQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSwgaW50KSI+PEI+dG9DaGlsZChRTmFtZSwgaW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPk1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIHNwZWNpZmllZCA8ZW0+aW5kZXg8L2VtPiBjaGlsZCBlbGVtZW50IG9mIHRoZSAKLSBzcGVjaWZpZWQgbmFtZSwgd2hlcmUgdGhhdCBlbGVtZW50IGlzIHRoZSAuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCN0b0NoaWxkKGphdmEubGFuZy5TdHJpbmcpIj48Qj50b0NoaWxkKFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5Nb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBmaXJzdCBjaGlsZCBlbGVtZW50IG9mIHRoZSBzcGVjaWZpZWQgbmFtZSBpbiAKLSBubyBuYW1lc3BhY2UuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCN0b0NoaWxkKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj48Qj50b0NoaWxkKFN0cmluZywgU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPk1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGZpcnN0IGNoaWxkIGVsZW1lbnQgb2YgdGhlIHNwZWNpZmllZCBuYW1lIGluIHRoZSAKLSBzcGVjaWZpZWQgbmFtZXNwYWNlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjdG9DdXJzb3Iob3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IpIj48Qj50b0N1cnNvcihYbWxDdXJzb3IpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+TW92ZXMgdGhpcyBjdXJzb3IgdG8gdGhlIHNhbWUgcG9zaXRpb24gYXMgdGhlIG1vdmVUbyBjdXJzb3IuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCN0b0VuZERvYygpIj48Qj50b0VuZERvYygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgRU5ERE9DIHRva2VuLCB3aGljaCBpcyB0aGUgZW5kCi0gb2YgdGhlIGRvY3VtZW50LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjdG9FbmRUb2tlbigpIj48Qj50b0VuZFRva2VuKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5Nb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBFTkQgb3IgRU5ERE9DIHRva2VuIGNvcnJlc3BvbmRpbmcgdG8gdGhlCi0gY3VycmVudCBTVEFSVCBvciBTVEFSVERPQywgYW5kIHJldHVybnMgRU5EIG9yIEVORERPQy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3RvRmlyc3RBdHRyaWJ1dGUoKSI+PEI+dG9GaXJzdEF0dHJpYnV0ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgZmlyc3QgYXR0cmlidXRlIG9mIHRoaXMgZWxlbWVudCwgb3IKLSByZXR1cm5zIGZhbHNlIGFuZCBkb2VzIG5vdCBtb3ZlIHRoZSBjdXJzb3IgaWYgdGhlcmUgYXJlIG5vCi0gYXR0cmlidXRlcy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3RvRmlyc3RDaGlsZCgpIj48Qj50b0ZpcnN0Q2hpbGQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPk1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGZpcnN0IGNoaWxkIGVsZW1lbnQsIG9yIHJldHVybnMgZmFsc2UgYW5kCi0gZG9lcyBub3QgbW92ZSB0aGUgY3Vyc29yIGlmIHRoZXJlIGFyZSBubyBlbGVtZW50IGNoaWxkcmVuLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjdG9GaXJzdENvbnRlbnRUb2tlbigpIj48Qj50b0ZpcnN0Q29udGVudFRva2VuKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5Nb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBmaXJzdCB0b2tlbiBpbiB0aGUgY29udGVudCBvZiB0aGUgY3VycmVudAotIFNUQVJUIG9yIFNUQVJURE9DLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjdG9HRGF0ZSgpIj48Qj50b0dEYXRlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+R0RhdGVCdWlsZGVyPC9BPgotPEREPkJ1aWxkcyBhIEdEYXRlIGZyb20gdGhpcyBHRGF0ZUJ1aWxkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwjdG9HRHVyYXRpb24oKSI+PEI+dG9HRHVyYXRpb24oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCI+R0R1cmF0aW9uQnVpbGRlcjwvQT4KLTxERD5CdWlsZHMgYSBHRHVyYXRpb24gZnJvbSB0aGlzIEdEdXJhdGlvbkJ1aWxkZXIuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCN0b0xhc3RBdHRyaWJ1dGUoKSI+PEI+dG9MYXN0QXR0cmlidXRlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5Nb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBsYXN0IGF0dHJpYnV0ZSBvZiB0aGlzIGVsZW1lbnQsIG9yCi0gcmV0dXJucyBmYWxzZSBhbmQgZG9lcyBub3QgbW92ZSB0aGUgY3Vyc29yIGlmIHRoZXJlIGFyZSBubwotIGF0dHJpYnV0ZXMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCN0b0xhc3RDaGlsZCgpIj48Qj50b0xhc3RDaGlsZCgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgbGFzdCBlbGVtZW50IGNoaWxkLCBvciByZXR1cm5zIGZhbHNlIGFuZAotIGRvZXMgbm90IG1vdmUgdGhlIGN1cnNvciBpZiB0aGVyZSBhcmUgbm8gZWxlbWVudCBjaGlsZHJlbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3RvTmV4dEF0dHJpYnV0ZSgpIj48Qj50b05leHRBdHRyaWJ1dGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPk1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIG5leHQgc2libGluZyBhdHRyaWJ1dGUsIG9yIHJldHVybnMKLSBmYWxzZSBhbmQgZG9lcyBub3QgbW92ZSB0aGUgY3Vyc29yIGlmIHRoZXJlIGlzIG5vIG5leHQKLSBzaWJsaW5nIGF0dHJpYnV0ZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3RvTmV4dEJvb2ttYXJrKGphdmEubGFuZy5PYmplY3QpIj48Qj50b05leHRCb29rbWFyayhPYmplY3QpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+TW92ZXMgdGhpcyBjdXJzb3IgdG8gdGhlIGxvY2F0aW9uIGFmdGVyIGl0cyBjdXJyZW50IHBvc2l0aW9uCi0gd2hlcmUgYSBib29rbWFyayB3aXRoIHRoZSBnaXZlbiBrZXkgZXhpc3RzLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjdG9OZXh0Q2hhcihpbnQpIj48Qj50b05leHRDaGFyKGludCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5Nb3ZlcyB0aGUgY3Vyc29yIGZvcndhcmQgYnkgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgY2hhcmFjdGVycywgYW5kCi0gc3RvcHMgYXQgdGhlIG5leHQgbm9uLVRFWFQgdG9rZW4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCN0b05leHRTZWxlY3Rpb24oKSI+PEI+dG9OZXh0U2VsZWN0aW9uKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5Nb3ZlcyB0aGlzIGN1cnNvciB0byB0aGUgbmV4dCBsb2NhdGlvbiBpbiB0aGUgc2VsZWN0aW9uLCAKLSBpZiBhbnkuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCN0b05leHRTaWJsaW5nKCkiPjxCPnRvTmV4dFNpYmxpbmcoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPk1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIG5leHQgc2libGluZyBlbGVtZW50LCBvciByZXR1cm5zCi0gZmFsc2UgYW5kIGRvZXMgbm90IG1vdmUgdGhlIGN1cnNvciBpZiB0aGVyZSBpcyBubyBuZXh0IHNpYmxpbmcKLSBlbGVtZW50LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjdG9OZXh0U2libGluZyhqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PEI+dG9OZXh0U2libGluZyhRTmFtZSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5Nb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBuZXh0IHNpYmxpbmcgZWxlbWVudCBvZiB0aGUgc3BlY2lmaWVkIAotIHF1YWxpZmllZCBuYW1lLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjdG9OZXh0U2libGluZyhqYXZhLmxhbmcuU3RyaW5nKSI+PEI+dG9OZXh0U2libGluZyhTdHJpbmcpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgbmV4dCBzaWJsaW5nIGVsZW1lbnQgb2YgdGhlIHNwZWNpZmllZCBuYW1lIGluIG5vCi0gbmFtZXNwYWNlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjdG9OZXh0U2libGluZyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+PEI+dG9OZXh0U2libGluZyhTdHJpbmcsIFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5Nb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBuZXh0IHNpYmxpbmcgZWxlbWVudCBvZiB0aGUgc3BlY2lmaWVkIG5hbWUgCi0gaW4gdGhlIHNwZWNpZmllZCBuYW1lc3BhY2UuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCN0b05leHRUb2tlbigpIj48Qj50b05leHRUb2tlbigpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgbmV4dCB0b2tlbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3RvUGFyZW50KCkiPjxCPnRvUGFyZW50KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5Nb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBwYXJlbnQgZWxlbWVudCBvciBTVEFSVERPQywgb3IgcmV0dXJucwotIGZhbHNlIGFuZCBkb2VzIG5vdCBtb3ZlIHRoZSBjdXJzb3IgaWYgdGhlcmUgaXMgbm8gcGFyZW50Ljxici8+PGJyLz4KLQotIFdvcmtzIGlmIHlvdSdyZSBpbiBhdHRyaWJ1dGVzIG9yIGNvbnRlbnQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCN0b1ByZXZBdHRyaWJ1dGUoKSI+PEI+dG9QcmV2QXR0cmlidXRlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5Nb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBwcmV2aW91cyBzaWJsaW5nIGF0dHJpYnV0ZSwgb3IgcmV0dXJucwotIGZhbHNlIGFuZCBkb2VzIG5vdCBtb3ZlIHRoZSBjdXJzb3IgaWYgdGhlcmUgaXMgbm8gcHJldmlvdXMKLSBzaWJsaW5nIGF0dHJpYnV0ZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3RvUHJldkJvb2ttYXJrKGphdmEubGFuZy5PYmplY3QpIj48Qj50b1ByZXZCb29rbWFyayhPYmplY3QpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+TW92ZXMgdGhpcyBjdXJzb3IgdG8gdGhlIGxvY2F0aW9uIGJlZm9yZSBpdHMgY3VycmVudCBwb3NpdGlvbgotIHdoZXJlIGEgYm9va21hcmsgd2l0aCB0aGUgZ2l2ZW4ga2V5IGV4aXN0cy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3RvUHJldkNoYXIoaW50KSI+PEI+dG9QcmV2Q2hhcihpbnQpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+TW92ZXMgdGhlIGN1cnNvciBiYWNrd2FyZHMgYnkgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGdpdmVuLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjdG9QcmV2U2libGluZygpIj48Qj50b1ByZXZTaWJsaW5nKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4KLTxERD5Nb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBwcmV2aW91cyBzaWJsaW5nIGVsZW1lbnQsIG9yIHJldHVybnMKLSBmYWxzZSBhbmQgZG9lcyBub3QgbW92ZSB0aGUgY3Vyc29yIGlmIHRoZXJlIGlzIG5vIHByZXZpb3VzIHNpYmxpbmcKLSBlbGVtZW50LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjdG9QcmV2VG9rZW4oKSI+PEI+dG9QcmV2VG9rZW4oKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPk1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIHByZXZpb3VzIHRva2VuLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwjdG9RTmFtZVNldCgpIj48Qj50b1FOYW1lU2V0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCI+UU5hbWVTZXRCdWlsZGVyPC9BPgotPEREPlJldHVybnMgYSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwiPjxDT0RFPlFOYW1lU2V0PC9DT0RFPjwvQT4gZXF1aXZhbGVudCB0byB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGlzCi0gUU5hbWVTZXRCdWlsZGVyLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjdG9TZWxlY3Rpb24oaW50KSI+PEI+dG9TZWxlY3Rpb24oaW50KTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPgotPEREPk1vdmVzIHRoaXMgY3Vyc29yIHRvIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24gaW4gdGhlIHNlbGVjdGlvbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3RvU3RhcnREb2MoKSI+PEI+dG9TdGFydERvYygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Ci08REQ+TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgU1RBUlRET0MgdG9rZW4sIHdoaWNoIGlzIHRoZSAKLSByb290IG9mIHRoZSBkb2N1bWVudC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCN0b1N0cmluZygpIj48Qj50b1N0cmluZygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sIj5YbWxTaW1wbGVMaXN0PC9BPgotPEREPlJldHVybnMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9ucyBvZiBhbGwKLSB0aGUgaXRlbXMgaW4gdGhlIGxpc3QuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN0b1N0cmluZygpIj48Qj50b1N0cmluZygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+Ci08REQ+UmV0dXJucyBhbiBYTUwgc3RyaW5nIGZvciB0aGlzIFhNTCBvYmplY3QuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI3RvU3RyaW5nKCkiPjxCPnRvU3RyaW5nKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT4KLTxERD5Qcm9kdWNlcyBhIHN0YW5kYXJkIHN0cmluZyBmb3IgdGhlIGVycm9yIG1lc3NhZ2UsIGNvbXBsZXRlIHdpdGgKLSBmaWxlbmFtZSBhbmQgbG9jYXRpb24gb2Zmc2V0cyBpZiBhdmFpbGFibGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjdG9TdHJpbmcoKSI+PEI+dG9TdHJpbmcoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+WG1sQ3Vyc29yLlRva2VuVHlwZTwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbENhbGVuZGFyLmh0bWwjdG9TdHJpbmcoKSI+PEI+dG9TdHJpbmcoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbENhbGVuZGFyLmh0bWwiPlhtbENhbGVuZGFyPC9BPgotPEREPlByaW50cyB0aGUgWG1sQ2FsZW5kYXIgdXNpbmcgYSBzdGFuZGFyZCBYTUwgU2NoZW1hCi0gZm9ybWF0LCBhcyBkZXNjcmliZWQgaW4gWG1sQ2FsZW5kYXIoU3RyaW5nIHMpLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sI3RvU3RyaW5nKCkiPjxCPnRvU3RyaW5nKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLmh0bWwiPlN0cmluZ0VudW1BYnN0cmFjdEJhc2U8L0E+Ci08REQ+UmV0dXJucyB0aGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sI3RvU3RyaW5nKCkiPjxCPnRvU3RyaW5nKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCI+UU5hbWVTZXRCdWlsZGVyPC9BPgotPEREPlJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gdXNlZnVsIGZvciBkZWJ1Z2dpbmcsIHN1YmplY3QgdG8gY2hhbmdlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCN0b1N0cmluZygpIj48Qj50b1N0cmluZygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+Ci08REQ+UmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiB1c2VmdWwgZm9yIGRlYnVnZ2luZywgc3ViamVjdCB0byBjaGFuZ2UuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwjdG9TdHJpbmcoKSI+PEI+dG9TdHJpbmcoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCI+R0R1cmF0aW9uQnVpbGRlcjwvQT4KLTxERD5UaGUgbmF0dXJhbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGR1cmF0aW9uLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwjdG9TdHJpbmcoKSI+PEI+dG9TdHJpbmcoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+Ci08REQ+VGhlIG5hdHVyYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkdXJhdGlvbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI3RvU3RyaW5nKCkiPjxCPnRvU3RyaW5nKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4KLTxERD5UaGUgbmF0dXJhbCBzdHJpbmcgcmVwcmVzZW50YXRpb24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCN0b1N0cmluZygpIj48Qj50b1N0cmluZygpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwiPkdEYXRlQnVpbGRlcjwvQT4KLTxERD5UaGUgbmF0dXJhbCBzdHJpbmcgcmVwcmVzZW50YXRpb24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI3RvU3RyaW5nKCkiPjxCPnRvU3RyaW5nKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4KLTxERD5UaGUgbmF0dXJhbCBzdHJpbmcgcmVwcmVzZW50YXRpb24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI3RvU3RyaW5nKGphdmEubmV0LlVSSSkiPjxCPnRvU3RyaW5nKFVSSSk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT4KLTxERD5Qcm9kdWNlcyBhIHN0YW5kYXJkIHN0cmluZyB3aXRoIHRoZSBlcnJvciBtZXNzYWdlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1RPVEFMX09SREVSIj48Qj5UT1RBTF9PUkRFUjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+VG90YWxseSBvcmRlcmVkLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sI3R5cGUiPjxCPnR5cGU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj5YbWxVbnNpZ25lZFNob3J0PC9BPgotPEREPlRoZSBjb25zdGFudCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sI3R5cGUiPjxCPnR5cGU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPlhtbFVuc2lnbmVkTG9uZzwvQT4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sI3R5cGUiPjxCPnR5cGU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwjdHlwZSI+PEI+dHlwZTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+WG1sVW5zaWduZWRCeXRlPC9BPgotPEREPlRoZSBjb25zdGFudCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwjdHlwZSI+PEI+dHlwZTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj5YbWxUb2tlbjwvQT4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwjdHlwZSI+PEI+dHlwZTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPlhtbFRpbWU8L0E+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwjdHlwZSI+PEI+dHlwZTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+WG1sU3RyaW5nPC9BPgotPEREPlRoZSBjb25zdGFudCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwjdHlwZSI+PEI+dHlwZTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj5YbWxTaG9ydDwvQT4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sI3R5cGUiPjxCPnR5cGU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+WG1sUU5hbWU8L0E+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwjdHlwZSI+PEI+dHlwZTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sUG9zaXRpdmVJbnRlZ2VyPC9BPgotPEREPlRoZSBjb25zdGFudCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3R5cGUiPjxCPnR5cGU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sI3R5cGUiPjxCPnR5cGU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+WG1sTk9UQVRJT048L0E+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sI3R5cGUiPjxCPnR5cGU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nPC9BPgotPEREPlRoZSBjb25zdGFudCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sI3R5cGUiPjxCPnR5cGU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQT4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCN0eXBlIj48Qj50eXBlPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0E+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCN0eXBlIj48Qj50eXBlPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPlhtbE5NVE9LRU5TPC9BPgotPEREPlRoZSBjb25zdGFudCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCN0eXBlIj48Qj50eXBlPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+WG1sTk1UT0tFTjwvQT4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCN0eXBlIj48Qj50eXBlPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOZWdhdGl2ZUludGVnZXI8L0E+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwjdHlwZSI+PEI+dHlwZTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+WG1sTkNOYW1lPC9BPgotPEREPlRoZSBjb25zdGFudCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCN0eXBlIj48Qj50eXBlPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+WG1sTmFtZTwvQT4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwjdHlwZSI+PEI+dHlwZTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPlhtbExvbmc8L0E+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCN0eXBlIj48Qj50eXBlPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPlhtbExhbmd1YWdlPC9BPgotPEREPlRoZSBjb25zdGFudCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCN0eXBlIj48Qj50eXBlPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCN0eXBlIj48Qj50eXBlPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj5YbWxJbnQ8L0E+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwjdHlwZSI+PEI+dHlwZTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+WG1sSURSRUZTPC9BPgotPEREPlRoZSBjb25zdGFudCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwjdHlwZSI+PEI+dHlwZTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj5YbWxJRFJFRjwvQT4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sI3R5cGUiPjxCPnR5cGU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+WG1sSUQ8L0E+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwjdHlwZSI+PEI+dHlwZTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+WG1sSGV4QmluYXJ5PC9BPgotPEREPlRoZSBjb25zdGFudCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCN0eXBlIj48Qj50eXBlPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+WG1sR1llYXJNb250aDwvQT4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sI3R5cGUiPjxCPnR5cGU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+WG1sR1llYXI8L0E+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwjdHlwZSI+PEI+dHlwZTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+WG1sR01vbnRoRGF5PC9BPgotPEREPlRoZSBjb25zdGFudCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI3R5cGUiPjxCPnR5cGU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPlhtbEdNb250aDwvQT4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwjdHlwZSI+PEI+dHlwZTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPlhtbEdEYXk8L0E+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCN0eXBlIj48Qj50eXBlPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPlhtbEZsb2F0PC9BPgotPEREPlRoZSBjb25zdGFudCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sI3R5cGUiPjxCPnR5cGU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPlhtbEVOVElUWTwvQT4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sI3R5cGUiPjxCPnR5cGU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+WG1sRU5USVRJRVM8L0E+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCN0eXBlIj48Qj50eXBlPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPlhtbER1cmF0aW9uPC9BPgotPEREPlRoZSBjb25zdGFudCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sI3R5cGUiPjxCPnR5cGU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPlhtbERvdWJsZTwvQT4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjdHlwZSI+PEI+dHlwZTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCN0eXBlIj48Qj50eXBlPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPlhtbERhdGVUaW1lPC9BPgotPEREPlRoZSBjb25zdGFudCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCN0eXBlIj48Qj50eXBlPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+WG1sRGF0ZTwvQT4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwjdHlwZSI+PEI+dHlwZTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPlhtbEJ5dGU8L0E+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sI3R5cGUiPjxCPnR5cGU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj5YbWxCb29sZWFuPC9BPgotPEREPlRoZSBjb25zdGFudCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sI3R5cGUiPjxCPnR5cGU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPlhtbEJhc2U2NEJpbmFyeTwvQT4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCN0eXBlIj48Qj50eXBlPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj5YbWxBbnlVUkk8L0E+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3R5cGUiPjxCPnR5cGU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPgotPEREPlRoZSBjb25zdGFudCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI1RZUEUiPjxCPlRZUEU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPlNjaGVtYUNvbXBvbmVudDwvQT4KLTxERD5BIHR5cGUgZGVmaW5pdGlvbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwjdHlwZUZvckNsYXNzKGphdmEubGFuZy5DbGFzcykiPjxCPnR5cGVGb3JDbGFzcyhDbGFzcyk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuaHRtbCI+WG1sQmVhbnM8L0E+Ci08REQ+UmV0dXJucyB0aGUgU2NoZW1hVHlwZSBmcm9tIGEgY29ycmVzcG9uZGluZyBYbWxPYmplY3Qgc3ViY2xhc3MsCi0gb3IgbnVsbCBpZiBub25lLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI3R5cGVGb3JDbGFzc25hbWUoamF2YS5sYW5nLlN0cmluZykiPjxCPnR5cGVGb3JDbGFzc25hbWUoU3RyaW5nKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXI8L0E+Ci08REQ+RmluZHMgYSB0eXBlIGZvciBhIGdpdmVuIGZ1bGx5LXF1YWxpZmllZCBYTUwgQmVhbiBjbGFzc25hbWUKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVTeXN0ZW0uaHRtbCN0eXBlRm9ySGFuZGxlKGphdmEubGFuZy5TdHJpbmcpIj48Qj50eXBlRm9ySGFuZGxlKFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sIj5TY2hlbWFUeXBlU3lzdGVtPC9BPgotPEREPkxvY2F0ZXMgYSB0eXBlLCBlbGVtZW50LCBvciBhdHRyaWJ1dGUgdXNpbmcgdGhlIGhhbmRsZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCN0eXBlRm9yU2lnbmF0dXJlKGphdmEubGFuZy5TdHJpbmcpIj48Qj50eXBlRm9yU2lnbmF0dXJlKFN0cmluZyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sIj5TY2hlbWFUeXBlTG9hZGVyPC9BPgotPEREPkZpbmRzIGEgdHlwZSBmb3IgYSBnaXZlbiBzaWduYXR1cmUgc3RyaW5nCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sI3R5cGVMb2FkZXJGb3JDbGFzc0xvYWRlcihqYXZhLmxhbmcuQ2xhc3NMb2FkZXIpIj48Qj50eXBlTG9hZGVyRm9yQ2xhc3NMb2FkZXIoQ2xhc3NMb2FkZXIpPC9CPjwvQT4gLSAKLVN0YXRpYyBtZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwiPlhtbEJlYW5zPC9BPgotPEREPlJldHVybnMgYSBTY2hlbWFUeXBlTG9hZGVyIHRoYXQgc2VhcmNoZXMgZm9yIGNvbXBpbGVkIHNjaGVtYSB0eXBlcwotIGluIHRoZSBnaXZlbiBDbGFzc0xvYWRlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwjdHlwZUxvYWRlclVuaW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlcltdKSI+PEI+dHlwZUxvYWRlclVuaW9uKFNjaGVtYVR5cGVMb2FkZXJbXSk8L0I+PC9BPiAtIAotU3RhdGljIG1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuaHRtbCI+WG1sQmVhbnM8L0E+Ci08REQ+UmV0dXJucyB0aGUgdW5pb24gb2YgYSBsaXN0IG9mIHR5cGVMb2FkZXJzLgotPC9ETD4KLTxIUj4KLTxBIE5BTUU9Il9VXyI+PCEtLSAtLT48L0E+PEgyPgotPEI+VTwvQj48L0gyPgotPERMPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjdW5kZXJseWluZ1htbE9iamVjdCgpIj48Qj51bmRlcmx5aW5nWG1sT2JqZWN0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPlRoaXMgYWJzdHJhY3QgbWV0aG9kIGlzIGNhbGxlZCB0byBvYnRhaW4gdGhlIHVuZGVybHlpbmcgWG1sT2JqZWN0LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1VOSU9OIj48Qj5VTklPTjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+VW5pb24gdHlwZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sI3VuaW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+PEI+dW5pb24oUU5hbWVTZXRTcGVjaWZpY2F0aW9uKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPgotPEREPlJldHVybnMgdGhlIHVuaW9uIHdpdGggYW5vdGhlciBRTmFtZVNldC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sI3VuaW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+PEI+dW5pb24oUU5hbWVTZXRTcGVjaWZpY2F0aW9uKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sIj5RTmFtZVNldEJ1aWxkZXI8L0E+Ci08REQ+UmV0dXJucyBhIG5ldyBRTmFtZVNldCB0aGF0IGlzIHRoZSB1bmlvbiBvZiB0aGlzIG9uZSBhbmQgYW5vdGhlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwjdW5pb24ob3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldFNwZWNpZmljYXRpb24pIj48Qj51bmlvbihRTmFtZVNldFNwZWNpZmljYXRpb24pPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+Ci08REQ+UmV0dXJucyBhIG5ldyBRTmFtZVNldCB0aGF0IGlzIHRoZSB1bmlvbiBvZiB0aGlzIG9uZSBhbmQgYW5vdGhlci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNVTk9SREVSRUQiPjxCPlVOT1JERVJFRDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+VW5vcmRlcmVkLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sI1VOUkVDT0dOSVpFRF9JTkRFWF9FTlRSWSI+PEI+VU5SRUNPR05JWkVEX0lOREVYX0VOVFJZPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sIj5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uPC9BPgotPEREPiZuYnNwOwotPC9ETD4KLTxIUj4KLTxBIE5BTUU9Il9WXyI+PCEtLSAtLT48L0E+PEgyPgotPEI+VjwvQj48L0gyPgotPERMPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI1ZBTElEQVRFX09OX1NFVCI+PEI+VkFMSURBVEVfT05fU0VUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUoKSI+PEI+dmFsaWRhdGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPgotPEREPlJldHVybnMgdHJ1ZSBpZiB0aGUgY29udGVudHMgb2YgdGhpcyBvYmplY3QgYXJlIHZhbGlkCi0gYWNjb3JpbmcgdG8gc2NoZW1hVHlwZSgpLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUoKSI+PEI+dmFsaWRhdGUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj52YWxpZGF0ZShYbWxPcHRpb25zKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPgotPEREPkp1c3QgbGlrZSB2YWxpZGF0ZSgpLCBidXQgd2l0aCBvcHRpb25zLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PEI+dmFsaWRhdGUoWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVFcXVhbHMob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj48Qj52YWx1ZUVxdWFscyhYbWxPYmplY3QpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+Ci08REQ+VHJ1ZSBpZiB0aGUgeG1sIHZhbHVlcyBhcmUgZXF1YWwuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCN2YWx1ZUVxdWFscyhvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPjxCPnZhbHVlRXF1YWxzKFhtbE9iamVjdCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVIYXNoQ29kZSgpIj48Qj52YWx1ZUhhc2hDb2RlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3ZhbHVlSGFzaENvZGUoKSI+PEI+dmFsdWVIYXNoQ29kZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjVkFSSUFCTEUiPjxCPlZBUklBQkxFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwiPlNjaGVtYVByb3BlcnR5PC9BPgotPEREPkFwcGxpZXMgdG8gc29tZSwgYnV0IG5vdCBvdGhlciBlbGVtZW50cyBmb3IgdGhpcyBwcm9wZXJ0eS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5odG1sI1ZFUlNJT04iPjxCPlZFUlNJT048L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCI+WG1sRG9jdW1lbnRQcm9wZXJ0aWVzPC9BPgotPEREPkRvY3VtZW50IHZlcnNpb24KLTwvREw+Ci08SFI+Ci08QSBOQU1FPSJfV18iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPlc8L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjV0lMRENBUkQiPjxCPldJTERDQVJEPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwiPlNjaGVtYVBhcnRpY2xlPC9BPgotPEREPkFuIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZGVjbGFyZS1vcGVubmVzcyI+eHM6YW55PC9hPiBwYXJ0aWNsZSwKLSBhbHNvIGtub3duIGFzIGFuIGVsZW1lbnQgd2lsZGNhcmQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwjV1JPTkdfRklMRV9UWVBFIj48Qj5XUk9OR19GSUxFX1RZUEU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb248L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwjV1JPTkdfTUFHSUNfQ09PS0lFIj48Qj5XUk9OR19NQUdJQ19DT09LSUU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb248L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwjV1JPTkdfTUFKT1JfVkVSU0lPTiI+PEI+V1JPTkdfTUFKT1JfVkVSU0lPTjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCI+U2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCNXUk9OR19NSU5PUl9WRVJTSU9OIj48Qj5XUk9OR19NSU5PUl9WRVJTSU9OPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sIj5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sI1dST05HX1BST1BFUlRZX1RZUEUiPjxCPldST05HX1BST1BFUlRZX1RZUEU8L0I+PC9BPiAtIAotU3RhdGljIHZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb248L0E+Ci08REQ+Jm5ic3A7Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwjV1JPTkdfU0lNUExFX1ZBUklFVFkiPjxCPldST05HX1NJTVBMRV9WQVJJRVRZPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sIj5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1dTX0NPTExBUFNFIj48Qj5XU19DT0xMQVBTRTwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+V2hpdGVzcGFjZSBjb2xsYXBzZWQgYW5kIHRyaW1tZWQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjV1NfUFJFU0VSVkUiPjxCPldTX1BSRVNFUlZFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5XaGl0ZXNwYWNlIHByZXNlcnZlZC4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNXU19SRVBMQUNFIj48Qj5XU19SRVBMQUNFPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4KLTxERD5XaGl0ZXNwYWNlIHJlcGxhY2VkIGJ5IG9yZGluYXJ5IHNwYWNlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1dTX1VOU1BFQ0lGSUVEIj48Qj5XU19VTlNQRUNJRklFRDwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Ci08REQ+V2hpdGVzcGFjZSBydWxlIHVuc3BlY2lmaWVkLgotPC9ETD4KLTxIUj4KLTxBIE5BTUU9Il9YXyI+PCEtLSAtLT48L0E+PEgyPgotPEI+WDwvQj48L0gyPgotPERMPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCN4Z2V0TGlzdFZhbHVlKCkiPjxCPnhnZXRMaXN0VmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj5YbWxOTVRPS0VOUzwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj48Q09ERT5MaXN0PC9DT0RFPjwvQT4gb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU48L0NPREU+PC9BPiB2YWx1ZXMKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sI3hnZXRMaXN0VmFsdWUoKSI+PEI+eGdldExpc3RWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj5YbWxJRFJFRlM8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+IG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+PENPREU+WG1sSURSRUY8L0NPREU+PC9BPiB2YWx1ZXMKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwjeGdldExpc3RWYWx1ZSgpIj48Qj54Z2V0TGlzdFZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+WG1sRU5USVRJRVM8L0E+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+IG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPjxDT0RFPlhtbEVOVElUWTwvQ09ERT48L0E+IHZhbHVlcwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCN4Z2V0TGlzdFZhbHVlKCkiPjxCPnhnZXRMaXN0VmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj48Q09ERT5MaXN0PC9DT0RFPjwvQT4gb2YgWG1sQW55U2ltcGxlVHlwZSBvYmplY3RzLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjeGdldExpc3RWYWx1ZSgpIj48Qj54Z2V0TGlzdFZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCN4bGlzdFZhbHVlKCkiPjxCPnhsaXN0VmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj5YbWxOTVRPS0VOUzwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwjZ2V0TGlzdFZhbHVlKCkiPjxDT0RFPlhtbE5NVE9LRU5TLmdldExpc3RWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCN4bGlzdFZhbHVlKCkiPjxCPnhsaXN0VmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+WG1sSURSRUZTPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIGJ5IDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwjZ2V0TGlzdFZhbHVlKCkiPjxDT0RFPlhtbElEUkVGUy5nZXRMaXN0VmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCN4bGlzdFZhbHVlKCkiPjxCPnhsaXN0VmFsdWUoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj5YbWxFTlRJVElFUzwvQT4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwjZ2V0TGlzdFZhbHVlKCkiPjxDT0RFPlhtbEVOVElUSUVTLmdldExpc3RWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3hsaXN0VmFsdWUoKSI+PEI+eGxpc3RWYWx1ZSgpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldExpc3RWYWx1ZSgpIj48Q09ERT5TaW1wbGVWYWx1ZS5nZXRMaXN0VmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjeGxpc3RWYWx1ZSgpIj48Qj54bGlzdFZhbHVlKCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNYTUxfT0JKRUNUIj48Qj5YTUxfT0JKRUNUPC9CPjwvQT4gLSAKLVN0YXRpYyB2YXJpYWJsZSBpbiBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwiPlNjaGVtYVByb3BlcnR5PC9BPgotPEREPkFuIFhNTCBCZWFuIHR5cGUgdGhhdCBpbmhlcml0cyBmcm9tIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPjxDT0RFPlhtbE9iamVjdDwvQ09ERT48L0E+LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj48Qj5YbWxBbnlTaW1wbGVUeXBlPC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT4uPEREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIvb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNTaW1wbGVfVHlwZV9EZWZpbml0aW9uIj54czphbnlTaW1wbGVUeXBlPC9hPiB0eXBlLjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sIj48Qj5YbWxBbnlTaW1wbGVUeXBlLkZhY3Rvcnk8L0I+PC9BPiAtIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+WG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9BPi48REQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlPC9DT0RFPjwvQT4uPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPjxCPlhtbEFueVVSSTwvQj48L0E+IC0gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+WG1sQW55VVJJPC9BPi48REQ+Q29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Ii9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2FueVVSSSI+eHM6YW55VVJJPC9hPiB0eXBlLjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5GYWN0b3J5Lmh0bWwiPjxCPlhtbEFueVVSSS5GYWN0b3J5PC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLkZhY3RvcnkuaHRtbCI+WG1sQW55VVJJLkZhY3Rvcnk8L0E+LjxERD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+PENPREU+WG1sQW55VVJJPC9DT0RFPjwvQT4uPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPjxCPlhtbEJhc2U2NEJpbmFyeTwvQj48L0E+IC0gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5PC9BPi48REQ+Q29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Ii9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2Jhc2U2NEJpbmFyeSI+eHM6YmFzZTY0QmluYXJ5PC9hPiB0eXBlLjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwiPjxCPlhtbEJhc2U2NEJpbmFyeS5GYWN0b3J5PC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5LkZhY3Rvcnk8L0E+LjxERD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+PENPREU+WG1sQmFzZTY0QmluYXJ5PC9DT0RFPjwvQT4uPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuaHRtbCI+PEI+WG1sQmVhbnM8L0I+PC9BPiAtIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sIj5YbWxCZWFuczwvQT4uPEREPlByb3ZpZGVzIGFuIGFzc29ydG1lbnQgb2YgdXRpbGl0aWVzCi0gZm9yIG1hbmFnaW5nIFhNTCBCZWFuIHR5cGVzLCB0eXBlIHN5c3RlbXMsIFFOYW1lcywgcGF0aHMsCi0gYW5kIHF1ZXJpZXMuPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj48Qj5YbWxCb29sZWFuPC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+WG1sQm9vbGVhbjwvQT4uPEREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIvb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNib29sZWFuIj54czpib29sZWFuPC9hPiB0eXBlLjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sIj48Qj5YbWxCb29sZWFuLkZhY3Rvcnk8L0I+PC9BPiAtIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLkZhY3RvcnkuaHRtbCI+WG1sQm9vbGVhbi5GYWN0b3J5PC9BPi48REQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj48Q09ERT5YbWxCb29sZWFuPC9DT0RFPjwvQT4uPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Qj5YbWxCeXRlPC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+WG1sQnl0ZTwvQT4uPEREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIvb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNieXRlIj54czpieXRlPC9hPiB0eXBlLjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuRmFjdG9yeS5odG1sIj48Qj5YbWxCeXRlLkZhY3Rvcnk8L0I+PC9BPiAtIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCI+WG1sQnl0ZS5GYWN0b3J5PC9BPi48REQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Q09ERT5YbWxCeXRlPC9DT0RFPjwvQT4uPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ2FsZW5kYXIuaHRtbCI+PEI+WG1sQ2FsZW5kYXI8L0I+PC9BPiAtIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sIj5YbWxDYWxlbmRhcjwvQT4uPEREPkFuIFhNTCBTY2hlbWEgY29tcGF0aWJsZSBzdWJjbGFzcyBvZiA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0dyZWdvcmlhbkNhbGVuZGFyLmh0bWwiPjxDT0RFPkdyZWdvcmlhbkNhbGVuZGFyPC9DT0RFPjwvQT4uPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ2FsZW5kYXIuaHRtbCNYbWxDYWxlbmRhcigpIj48Qj5YbWxDYWxlbmRhcigpPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ2FsZW5kYXIuaHRtbCI+WG1sQ2FsZW5kYXI8L0E+Ci08REQ+Q29uc3RydWN0cyBhbiBlbXB0eSBpbnN0YW5jZSB3aXRoIG5vIGZpZWxkcyBzZXQuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sI1htbENhbGVuZGFyKGphdmEudXRpbC5EYXRlKSI+PEI+WG1sQ2FsZW5kYXIoRGF0ZSk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sIj5YbWxDYWxlbmRhcjwvQT4KLTxERD5Db25zdHJ1Y3RzIGFuIFhtbENhbGVuZGFyIGZyb20gYSBEYXRlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ2FsZW5kYXIuaHRtbCNYbWxDYWxlbmRhcihvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlU3BlY2lmaWNhdGlvbikiPjxCPlhtbENhbGVuZGFyKEdEYXRlU3BlY2lmaWNhdGlvbik8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sIj5YbWxDYWxlbmRhcjwvQT4KLTxERD5Db25zdHJ1Y3RzIGFuIFhtbENhbGVuZGFyIGZyb20gYSBHRGF0ZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbENhbGVuZGFyLmh0bWwjWG1sQ2FsZW5kYXIoaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgamF2YS5tYXRoLkJpZ0RlY2ltYWwpIj48Qj5YbWxDYWxlbmRhcihpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBCaWdEZWNpbWFsKTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbENhbGVuZGFyLmh0bWwiPlhtbENhbGVuZGFyPC9BPgotPEREPkNvbnN0cnVjdHMgYW4gWG1sQ2FsZW5kYXIgd2l0aCB0aGUgc3BlY2lmaWVkIHllYXIsIG1vbnRoLCBkYXksCi0gaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFuZCBvcHRpb25hbCBmcmFjdGlvbmFsIHNlY29uZHMsIGluCi0gdGhlIGRlZmF1bHQgdGltZXpvbmUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sI1htbENhbGVuZGFyKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGphdmEubWF0aC5CaWdEZWNpbWFsLCBpbnQsIGludCwgaW50KSI+PEI+WG1sQ2FsZW5kYXIoaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgQmlnRGVjaW1hbCwgaW50LCBpbnQsIGludCk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sIj5YbWxDYWxlbmRhcjwvQT4KLTxERD5Db25zdHJ1Y3RzIGFuIFhtbENhbGVuZGFyIHdpdGggdGhlIHNwZWNpZmllZCB5ZWFyLCBtb250aCwgZGF5LAotIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBhbmQgb3B0aW9uYWwgZnJhY3Rpb25hbCBzZWNvbmRzLCBpbgotIHRoZSBzcGVjaWZpZWQgdGltZXpvbmUuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sI1htbENhbGVuZGFyKGphdmEubGFuZy5TdHJpbmcpIj48Qj5YbWxDYWxlbmRhcihTdHJpbmcpPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ2FsZW5kYXIuaHRtbCI+WG1sQ2FsZW5kYXI8L0E+Ci08REQ+Q29uc3RydWN0cyBhbiBYbWxDYWxlbmRhciBmb3IgYSBzdGFuZGFyZCBYTUwKLSBzY2hlbWEgZm9ybWF0dGVkIGRhdGUgc3RyaW5nLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPjxCPlhtbEN1cnNvcjwvQj48L0E+IC0gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPi48REQ+UmVwcmVzZW50cyBhIHBvc2l0aW9uIGJldHdlZW4gdHdvIGxvZ2ljYWwgdG9rZW5zIGluIGFuIFhNTCBkb2N1bWVudC48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuQ2hhbmdlU3RhbXAuaHRtbCI+PEI+WG1sQ3Vyc29yLkNoYW5nZVN0YW1wPC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5DaGFuZ2VTdGFtcC5odG1sIj5YbWxDdXJzb3IuQ2hhbmdlU3RhbXA8L0E+LjxERD5SZXByZXNlbnRzIHRoZSBzdGF0ZSBvZiBhIGRjb3VtZW50IGF0IGEgcGFydGljdWxhciBwb2ludAotIGluIHRpbWUuPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj48Qj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPi48REQ+QW4gZW51bWVyYXRpb24gdGhhdCBpZGVudGlmaWVzIHRoZSB0eXBlIG9mIGFuIFhNTCB0b2tlbi48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuWG1sQm9va21hcmsuaHRtbCI+PEI+WG1sQ3Vyc29yLlhtbEJvb2ttYXJrPC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbEJvb2ttYXJrLmh0bWwiPlhtbEN1cnNvci5YbWxCb29rbWFyazwvQT4uPEREPlN1YmNsYXNzZXMgb2YgWG1sQm9va21hcmsgY2FuIGJlIHVzZWQgdG8gYW5ub3RhdGUgYW4gWE1MIGRvY3VtZW50LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxCb29rbWFyay5odG1sI1htbEN1cnNvci5YbWxCb29rbWFyaygpIj48Qj5YbWxDdXJzb3IuWG1sQm9va21hcmsoKTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxCb29rbWFyay5odG1sIj5YbWxDdXJzb3IuWG1sQm9va21hcms8L0E+Ci08REQ+Q29uc3RydWN0cyBhIHN0cm9uZ2x5LXJlZmVyZW5jZWQgYm9va21hcmsuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuWG1sQm9va21hcmsuaHRtbCNYbWxDdXJzb3IuWG1sQm9va21hcmsoYm9vbGVhbikiPjxCPlhtbEN1cnNvci5YbWxCb29rbWFyayhib29sZWFuKTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxCb29rbWFyay5odG1sIj5YbWxDdXJzb3IuWG1sQm9va21hcms8L0E+Ci08REQ+Q29uc3RydWN0cyBhIGJvb2ttYXJrLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbE1hcmsuaHRtbCI+PEI+WG1sQ3Vyc29yLlhtbE1hcms8L0I+PC9BPiAtIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbE1hcmsuaHRtbCI+WG1sQ3Vyc29yLlhtbE1hcms8L0E+LjxERD5BbiBhYnN0cmFjdCA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj48Q09ERT5YbWxDdXJzb3I8L0NPREU+PC9BPiBmYWN0b3J5LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+PEI+WG1sRGF0ZTwvQj48L0E+IC0gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPlhtbERhdGU8L0E+LjxERD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iL29yZ1xhcGFjaGVceG1sYmVhbnMvX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZGF0ZSI+eHM6ZGF0ZTwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLkZhY3RvcnkuaHRtbCI+PEI+WG1sRGF0ZS5GYWN0b3J5PC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5GYWN0b3J5Lmh0bWwiPlhtbERhdGUuRmFjdG9yeTwvQT4uPEREPkEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+PENPREU+WG1sRGF0ZTwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPjxCPlhtbERhdGVUaW1lPC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPlhtbERhdGVUaW1lPC9BPi48REQ+Q29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Ii9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2RhdGVUaW1lIj54czpkYXRlVGltZTwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwiPjxCPlhtbERhdGVUaW1lLkZhY3Rvcnk8L0I+PC9BPiAtIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwiPlhtbERhdGVUaW1lLkZhY3Rvcnk8L0E+LjxERD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj48Q09ERT5YbWxEYXRlVGltZTwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+PEI+WG1sRGVjaW1hbDwvQj48L0E+IC0gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+LjxERD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iL29yZ1xhcGFjaGVceG1sYmVhbnMvX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZGVjaW1hbCI+eHM6ZGVjaW1hbDwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCI+PEI+WG1sRGVjaW1hbC5GYWN0b3J5PC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwiPlhtbERlY2ltYWwuRmFjdG9yeTwvQT4uPEREPkEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+PENPREU+WG1sRGVjaW1hbDwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5odG1sIj48Qj5YbWxEb2N1bWVudFByb3BlcnRpZXM8L0I+PC9BPiAtIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCI+WG1sRG9jdW1lbnRQcm9wZXJ0aWVzPC9BPi48REQ+VGhpcyBjbGFzcyBpcyB1c2VkIHRvIGF0dGFjaCBhcmJpdHJhcnkgaW5mb3JtYXRpb24gdG8gYW4gWE1MCi0gZG9jdW1lbnQuPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwjWG1sRG9jdW1lbnRQcm9wZXJ0aWVzKCkiPjxCPlhtbERvY3VtZW50UHJvcGVydGllcygpPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwiPlhtbERvY3VtZW50UHJvcGVydGllczwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj48Qj5YbWxEb3VibGU8L0I+PC9BPiAtIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPlhtbERvdWJsZTwvQT4uPEREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIvb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkb3VibGUiPnhzOmRvdWJsZTwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuRmFjdG9yeS5odG1sIj48Qj5YbWxEb3VibGUuRmFjdG9yeTwvQj48L0E+IC0gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwiPlhtbERvdWJsZS5GYWN0b3J5PC9BPi48REQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPjxDT0RFPlhtbERvdWJsZTwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPjxCPlhtbER1cmF0aW9uPC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPlhtbER1cmF0aW9uPC9BPi48REQ+Q29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Ii9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2R1cmF0aW9uIj54czpkdXJhdGlvbjwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5GYWN0b3J5Lmh0bWwiPjxCPlhtbER1cmF0aW9uLkZhY3Rvcnk8L0I+PC9BPiAtIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5GYWN0b3J5Lmh0bWwiPlhtbER1cmF0aW9uLkZhY3Rvcnk8L0E+LjxERD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj48Q09ERT5YbWxEdXJhdGlvbjwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPjxCPlhtbEVOVElUSUVTPC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPlhtbEVOVElUSUVTPC9BPi48REQ+Q29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Ii9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI0VOVElUSUVTIj54czpFTlRJVElFUzwvYT4gdHlwZSwKLSBhIGxpc3QgdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwiPjxCPlhtbEVOVElUSUVTLkZhY3Rvcnk8L0I+PC9BPiAtIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwiPlhtbEVOVElUSUVTLkZhY3Rvcnk8L0E+LjxERD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj48Q09ERT5YbWxFTlRJVElFUzwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj48Qj5YbWxFTlRJVFk8L0I+PC9BPiAtIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPlhtbEVOVElUWTwvQT4uPEREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIvb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNFTlRJVFkiPnhzOkVOVElUWTwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuRmFjdG9yeS5odG1sIj48Qj5YbWxFTlRJVFkuRmFjdG9yeTwvQj48L0E+IC0gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5GYWN0b3J5Lmh0bWwiPlhtbEVOVElUWS5GYWN0b3J5PC9BPi48REQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPjxDT0RFPlhtbEVOVElUWTwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPjxCPlhtbEVycm9yPC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+WG1sRXJyb3I8L0E+LjxERD5SZXByZXNlbnRzIGEgbWVzc2FnZSBhdCBhIHNwZWNpZmljIFhNTCBsb2NhdGlvbi48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI1htbEVycm9yKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXJyb3IpIj48Qj5YbWxFcnJvcihYbWxFcnJvcik8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT4KLTxERD5Db3B5IGNvbnN0cnVjdG9yLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPjxCPlhtbEV4Y2VwdGlvbjwvQj48L0E+IC0gZXhjZXB0aW9uIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPi48REQ+QSBjaGVja2VkIGV4Y2VwdGlvbiB0aGF0IGNhbiBiZSB0aHJvd24gd2hpbGUgcHJvY2Vzc2luZywKLSBwYXJzaW5nLCBvciBjb21waWxpbmcgWE1MLjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sI1htbEV4Y2VwdGlvbihqYXZhLmxhbmcuU3RyaW5nKSI+PEI+WG1sRXhjZXB0aW9uKFN0cmluZyk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPgotPEREPkNvbnN0cnVjdHMgYW4gWG1sRXhjZXB0aW9uIGZyb20gYSBtZXNzYWdlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwjWG1sRXhjZXB0aW9uKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5UaHJvd2FibGUpIj48Qj5YbWxFeGNlcHRpb24oU3RyaW5nLCBUaHJvd2FibGUpPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4KLTxERD5Db25zdHJ1Y3RzIGFuIFhtbEV4Y2VwdGlvbiBmcm9tIGEgbWVzc2FnZSBhbmQgYSBjYXVzZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sI1htbEV4Y2VwdGlvbihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuVGhyb3dhYmxlLCBqYXZhLnV0aWwuQ29sbGVjdGlvbikiPjxCPlhtbEV4Y2VwdGlvbihTdHJpbmcsIFRocm93YWJsZSwgQ29sbGVjdGlvbik8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPgotPEREPkNvbnN0cnVjdHMgYW4gWG1sRXhjZXB0aW9uIGZyb20gYSBtZXNzYWdlLCBhIGNhdXNlLCBhbmQgYSBjb2xsZWN0aW9uIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+PENPREU+WG1sRXJyb3JzPC9DT0RFPjwvQT4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCNYbWxFeGNlcHRpb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlRocm93YWJsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFcnJvcikiPjxCPlhtbEV4Y2VwdGlvbihTdHJpbmcsIFRocm93YWJsZSwgWG1sRXJyb3IpPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4KLTxERD5Db25zdHJ1Y3RzIGFuIFhtbEV4Y2VwdGlvbiBmcm9tIGEgbWVzc2FnZSwgYSBjYXVzZSwgYW5kIGFuIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+PENPREU+WG1sRXJyb3I8L0NPREU+PC9BPi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sI1htbEV4Y2VwdGlvbihqYXZhLmxhbmcuVGhyb3dhYmxlKSI+PEI+WG1sRXhjZXB0aW9uKFRocm93YWJsZSk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPgotPEREPkNvbnN0cnVjdHMgYW4gWG1sRXhjZXB0aW9uIGZyb20gYSBjYXVzZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sI1htbEV4Y2VwdGlvbihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEVycm9yKSI+PEI+WG1sRXhjZXB0aW9uKFhtbEVycm9yKTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+Ci08REQ+Q29uc3RydWN0cyBhbiBYbWxFeGNlcHRpb24gZnJvbSBhbiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPjxDT0RFPlhtbEVycm9yPC9DT0RFPjwvQT4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCNYbWxFeGNlcHRpb24ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxSdW50aW1lRXhjZXB0aW9uKSI+PEI+WG1sRXhjZXB0aW9uKFhtbFJ1bnRpbWVFeGNlcHRpb24pPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4KLTxERD5Db25zdHJ1Y3RzIGFuIFhtbEV4Y2VwdGlvbiBmcm9tIGFuIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUnVudGltZUV4Y2VwdGlvbi5odG1sIj48Q09ERT5YbWxSdW50aW1lRXhjZXB0aW9uPC9DT0RFPjwvQT4uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGYWN0b3J5SG9vay5odG1sIj48Qj5YbWxGYWN0b3J5SG9vazwvQj48L0E+IC0gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGYWN0b3J5SG9vay5odG1sIj5YbWxGYWN0b3J5SG9vazwvQT4uPEREPkEgaG9vayBmb3IgdGhlIFhNTCBCZWFuIEZhY3RvcnkgbWVjaGFuaXNtLjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQuaHRtbCI+PEI+WG1sRmFjdG9yeUhvb2suVGhyZWFkQ29udGV4dDwvQj48L0E+IC0gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQuaHRtbCI+WG1sRmFjdG9yeUhvb2suVGhyZWFkQ29udGV4dDwvQT4uPEREPlVzZWQgdG8gbWFuYWdlIHRoZSBYbWxGYWN0b3J5SG9vayBmb3IgdGhlIGN1cnJlbnQgdGhyZWFkLjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPjxCPlhtbEZsb2F0PC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPlhtbEZsb2F0PC9BPi48REQ+Q29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Ii9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2Zsb2F0Ij54czpmbG9hdDwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5GYWN0b3J5Lmh0bWwiPjxCPlhtbEZsb2F0LkZhY3Rvcnk8L0I+PC9BPiAtIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5GYWN0b3J5Lmh0bWwiPlhtbEZsb2F0LkZhY3Rvcnk8L0E+LjxERD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj48Q09ERT5YbWxGbG9hdDwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+PEI+WG1sR0RheTwvQj48L0E+IC0gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPlhtbEdEYXk8L0E+LjxERD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iL29yZ1xhcGFjaGVceG1sYmVhbnMvX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZ0RheSI+eHM6Z0RheTwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5LkZhY3RvcnkuaHRtbCI+PEI+WG1sR0RheS5GYWN0b3J5PC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5GYWN0b3J5Lmh0bWwiPlhtbEdEYXkuRmFjdG9yeTwvQT4uPEREPkEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+PENPREU+WG1sR0RheTwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj48Qj5YbWxHTW9udGg8L0I+PC9BPiAtIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPlhtbEdNb250aDwvQT4uPEREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIvb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNnTW9udGgiPnhzOmdNb250aDwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sIj48Qj5YbWxHTW9udGguRmFjdG9yeTwvQj48L0E+IC0gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5GYWN0b3J5Lmh0bWwiPlhtbEdNb250aC5GYWN0b3J5PC9BPi48REQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPjxDT0RFPlhtbEdNb250aDwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj48Qj5YbWxHTW9udGhEYXk8L0I+PC9BPiAtIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPlhtbEdNb250aERheTwvQT4uPEREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIvb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNnTW9udGhEYXkiPnhzOmdNb250aERheTwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuRmFjdG9yeS5odG1sIj48Qj5YbWxHTW9udGhEYXkuRmFjdG9yeTwvQj48L0E+IC0gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwiPlhtbEdNb250aERheS5GYWN0b3J5PC9BPi48REQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPjxDT0RFPlhtbEdNb250aERheTwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPjxCPlhtbEdZZWFyPC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPlhtbEdZZWFyPC9BPi48REQ+Q29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Ii9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2dZZWFyIj54czpnWWVhcjwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5GYWN0b3J5Lmh0bWwiPjxCPlhtbEdZZWFyLkZhY3Rvcnk8L0I+PC9BPiAtIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5GYWN0b3J5Lmh0bWwiPlhtbEdZZWFyLkZhY3Rvcnk8L0E+LjxERD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj48Q09ERT5YbWxHWWVhcjwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+PEI+WG1sR1llYXJNb250aDwvQj48L0E+IC0gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPlhtbEdZZWFyTW9udGg8L0E+LjxERD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iL29yZ1xhcGFjaGVceG1sYmVhbnMvX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZ1llYXJNb250aCI+eHM6Z1llYXJNb250aDwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCI+PEI+WG1sR1llYXJNb250aC5GYWN0b3J5PC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwiPlhtbEdZZWFyTW9udGguRmFjdG9yeTwvQT4uPEREPkEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+PENPREU+WG1sR1llYXJNb250aDwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj48Qj5YbWxIZXhCaW5hcnk8L0I+PC9BPiAtIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPlhtbEhleEJpbmFyeTwvQT4uPEREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIvb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNoZXhCaW5hcnkiPnhzOmhleEJpbmFyeTwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuRmFjdG9yeS5odG1sIj48Qj5YbWxIZXhCaW5hcnkuRmFjdG9yeTwvQj48L0E+IC0gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwiPlhtbEhleEJpbmFyeS5GYWN0b3J5PC9BPi48REQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEhleEJpbmFyeTwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPjxCPlhtbElEPC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPlhtbElEPC9BPi48REQ+Q29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Ii9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI0lEIj54czpJRDwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwiPjxCPlhtbElELkZhY3Rvcnk8L0I+PC9BPiAtIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwiPlhtbElELkZhY3Rvcnk8L0E+LjxERD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj48Q09ERT5YbWxJRDwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPjxCPlhtbElEUkVGPC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPlhtbElEUkVGPC9BPi48REQ+Q29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Ii9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI0lEUkVGIj54czpJRFJFRjwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5GYWN0b3J5Lmh0bWwiPjxCPlhtbElEUkVGLkZhY3Rvcnk8L0I+PC9BPiAtIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5GYWN0b3J5Lmh0bWwiPlhtbElEUkVGLkZhY3Rvcnk8L0E+LjxERD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj48Q09ERT5YbWxJRFJFRjwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj48Qj5YbWxJRFJFRlM8L0I+PC9BPiAtIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPlhtbElEUkVGUzwvQT4uPEREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIvb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNJRFJFRlMiPnhzOklEUkVGUzwvYT4gdHlwZSwKLSBhIGxpc3QgdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuRmFjdG9yeS5odG1sIj48Qj5YbWxJRFJFRlMuRmFjdG9yeTwvQj48L0E+IC0gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwiPlhtbElEUkVGUy5GYWN0b3J5PC9BPi48REQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPjxDT0RFPlhtbElEUkVGUzwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj48Qj5YbWxJbnQ8L0I+PC9BPiAtIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPlhtbEludDwvQT4uPEREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIvb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNpbnQiPnhzOmludDwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuRmFjdG9yeS5odG1sIj48Qj5YbWxJbnQuRmFjdG9yeTwvQj48L0E+IC0gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwiPlhtbEludC5GYWN0b3J5PC9BPi48REQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPjxDT0RFPlhtbEludDwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+PEI+WG1sSW50ZWdlcjwvQj48L0E+IC0gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+LjxERD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iL29yZ1xhcGFjaGVceG1sYmVhbnMvX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jaW50ZWdlciI+eHM6aW50ZWdlcjwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+PEI+WG1sSW50ZWdlci5GYWN0b3J5PC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbEludGVnZXIuRmFjdG9yeTwvQT4uPEREPkEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+PENPREU+WG1sSW50ZWdlcjwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPjxCPlhtbExhbmd1YWdlPC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPlhtbExhbmd1YWdlPC9BPi48REQ+Q29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Ii9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2xhbmd1YWdlIj54czpsYW5ndWFnZTwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5GYWN0b3J5Lmh0bWwiPjxCPlhtbExhbmd1YWdlLkZhY3Rvcnk8L0I+PC9BPiAtIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5GYWN0b3J5Lmh0bWwiPlhtbExhbmd1YWdlLkZhY3Rvcnk8L0E+LjxERD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj48Q09ERT5YbWxMYW5ndWFnZTwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExpbmVOdW1iZXIuaHRtbCI+PEI+WG1sTGluZU51bWJlcjwvQj48L0E+IC0gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExpbmVOdW1iZXIuaHRtbCI+WG1sTGluZU51bWJlcjwvQT4uPEREPkEgc3ViY2xhc3Mgb2YgWG1sQm9va21hcmsgdGhhdCBob2xkcyBsaW5lIG51bWJlciBpbmZvcm1hdGlvbi48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMaW5lTnVtYmVyLmh0bWwjWG1sTGluZU51bWJlcihpbnQpIj48Qj5YbWxMaW5lTnVtYmVyKGludCk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMaW5lTnVtYmVyLmh0bWwiPlhtbExpbmVOdW1iZXI8L0E+Ci08REQ+Q29uc3RydWN0cyBhIGxpbmUgbnVtYmVyIHdpdGggbm8gY29sdW1uIG9yIG9mZnNldCBpbmZvcm1hdGlvbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExpbmVOdW1iZXIuaHRtbCNYbWxMaW5lTnVtYmVyKGludCwgaW50KSI+PEI+WG1sTGluZU51bWJlcihpbnQsIGludCk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMaW5lTnVtYmVyLmh0bWwiPlhtbExpbmVOdW1iZXI8L0E+Ci08REQ+Q29uc3RydWN0cyBhIGxpbmUgbnVtYmVyIGFuZCBjb2x1bW4gd2l0aCBubyBmaWxlIG9mZnNldCBpbmZvcm1hdGlvbi4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExpbmVOdW1iZXIuaHRtbCNYbWxMaW5lTnVtYmVyKGludCwgaW50LCBpbnQpIj48Qj5YbWxMaW5lTnVtYmVyKGludCwgaW50LCBpbnQpPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGluZU51bWJlci5odG1sIj5YbWxMaW5lTnVtYmVyPC9BPgotPEREPkNvbnN0cnVjdHMgYSBsaW5lIG51bWJlciBhbmQgY29sdW1uIHdpdGggbm8gZmlsZSBvZmZzZXQgaW5mb3JtYXRpb24uCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPjxCPlhtbExvbmc8L0I+PC9BPiAtIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj5YbWxMb25nPC9BPi48REQ+Q29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Ii9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2xvbmciPnhzOmxvbmc8L2E+IHR5cGUuPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwiPjxCPlhtbExvbmcuRmFjdG9yeTwvQj48L0E+IC0gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuRmFjdG9yeS5odG1sIj5YbWxMb25nLkZhY3Rvcnk8L0E+LjxERD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPjxDT0RFPlhtbExvbmc8L0NPREU+PC9BPi48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPjxCPlhtbE5hbWU8L0I+PC9BPiAtIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj5YbWxOYW1lPC9BPi48REQ+Q29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Ii9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI05hbWUiPnhzOk5hbWU8L2E+IHR5cGUuPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwiPjxCPlhtbE5hbWUuRmFjdG9yeTwvQj48L0E+IC0gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuRmFjdG9yeS5odG1sIj5YbWxOYW1lLkZhY3Rvcnk8L0E+LjxERD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPjxDT0RFPlhtbE5hbWU8L0NPREU+PC9BPi48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+PEI+WG1sTkNOYW1lPC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj5YbWxOQ05hbWU8L0E+LjxERD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iL29yZ1xhcGFjaGVceG1sYmVhbnMvX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jTmFtZSI+eHM6TmFtZTwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuRmFjdG9yeS5odG1sIj48Qj5YbWxOQ05hbWUuRmFjdG9yeTwvQj48L0E+IC0gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5GYWN0b3J5Lmh0bWwiPlhtbE5DTmFtZS5GYWN0b3J5PC9BPi48REQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPjxDT0RFPlhtbE5DTmFtZTwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj48Qj5YbWxOZWdhdGl2ZUludGVnZXI8L0I+PC9BPiAtIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQT4uPEREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIvb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNuZWdhdGl2ZUludGVnZXIiPnhzOm5lZ2F0aXZlSW50ZWdlcjwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj48Qj5YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeTwvQj48L0E+IC0gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5PC9BPi48REQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+PEI+WG1sTk1UT0tFTjwvQj48L0E+IC0gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPlhtbE5NVE9LRU48L0E+LjxERD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iL29yZ1xhcGFjaGVceG1sYmVhbnMvX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jTk1UT0tFTiI+eHM6Tk1UT0tFTjwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLkZhY3RvcnkuaHRtbCI+PEI+WG1sTk1UT0tFTi5GYWN0b3J5PC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwiPlhtbE5NVE9LRU4uRmFjdG9yeTwvQT4uPEREPkEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+PENPREU+WG1sTk1UT0tFTjwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPjxCPlhtbE5NVE9LRU5TPC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPlhtbE5NVE9LRU5TPC9BPi48REQ+Q29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Ii9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI05NVE9LRU5TIj54czpOTVRPS0VOUzwvYT4gdHlwZSwKLSBhIGxpc3QgdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwiPjxCPlhtbE5NVE9LRU5TLkZhY3Rvcnk8L0I+PC9BPiAtIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwiPlhtbE5NVE9LRU5TLkZhY3Rvcnk8L0E+LjxERD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj48Q09ERT5YbWxOTVRPS0VOUzwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj48Qj5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0I+PC9BPiAtIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQT4uPEREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIvb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNub25OZWdhdGl2ZUludGVnZXIiPnhzOm5vbk5lZ2F0aXZlSW50ZWdlcjwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj48Qj5YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeTwvQj48L0E+IC0gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5PC9BPi48REQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj48Qj5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0I+PC9BPiAtIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQT4uPEREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIvb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNub25Qb3NpdGl2ZUludGVnZXIiPnhzOm5vblBvc2l0aXZlSW50ZWdlcjwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj48Qj5YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeTwvQj48L0E+IC0gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5PC9BPi48REQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+PEI+WG1sTm9ybWFsaXplZFN0cmluZzwvQj48L0E+IC0gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0E+LjxERD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iL29yZ1xhcGFjaGVceG1sYmVhbnMvX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jbm9ybWFsaXplZFN0cmluZyI+eHM6bm9ybWFsaXplZFN0cmluZzwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCI+PEI+WG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5PC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeTwvQT4uPEREPkEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+PENPREU+WG1sTm9ybWFsaXplZFN0cmluZzwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPjxCPlhtbE5PVEFUSU9OPC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPlhtbE5PVEFUSU9OPC9BPi48REQ+Q29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Ii9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI05PVEFUSU9OIj54czpOT1RBVElPTjwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwiPjxCPlhtbE5PVEFUSU9OLkZhY3Rvcnk8L0I+PC9BPiAtIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwiPlhtbE5PVEFUSU9OLkZhY3Rvcnk8L0E+LjxERD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj48Q09ERT5YbWxOT1RBVElPTjwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj48Qj5YbWxPYmplY3Q8L0I+PC9BPiAtIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4uPEREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIvb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNrZXktdXJUeXBlIj54czphbnlUeXBlPC9hPiwKLSB0aGUgYmFzZSB0eXBlIGZvciBhbGwgWE1MIEJlYW5zLjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPjxCPlhtbE9iamVjdC5GYWN0b3J5PC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+LjxERD5TdGF0aWMgZmFjdG9yeSBjbGFzcyBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlcy48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPjxCPlhtbE9wdGlvbnM8L0I+PC9BPiAtIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+LjxERD5Vc2VkIHRvIHN1cHBseSBvcHRpb25zIGZvciBsb2FkaW5nLCBzYXZpbmcsIGFuZCBjb21waWxpbmcsIGFuZCB2YWxpZGF0aW5nLjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNYbWxPcHRpb25zKCkiPjxCPlhtbE9wdGlvbnMoKTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4KLTxERD5Db25zdHJ1Y3QgYSBuZXcgYmxhbmsgWG1sT3B0aW9ucy4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNYbWxPcHRpb25zKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPlhtbE9wdGlvbnMoWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Ci08REQ+Q29uc3RydWN0IGEgbmV3IFhtbE9wdGlvbnMsIGNvcHlpbmcgdGhlIG9wdGlvbnMuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+PEI+WG1sUG9zaXRpdmVJbnRlZ2VyPC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXI8L0E+LjxERD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iL29yZ1xhcGFjaGVceG1sYmVhbnMvX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jcG9zaXRpdmVJbnRlZ2VyIj54czpwb3NpdGl2ZUludGVnZXI8L2E+IHR5cGUuPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+PEI+WG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0I+PC9BPiAtIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4uPEREPkEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxQb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPi48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj48Qj5YbWxRTmFtZTwvQj48L0E+IC0gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj5YbWxRTmFtZTwvQT4uPEREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIvb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNRTmFtZSI+eHM6UU5hbWU8L2E+IHR5cGUuPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuRmFjdG9yeS5odG1sIj48Qj5YbWxRTmFtZS5GYWN0b3J5PC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuRmFjdG9yeS5odG1sIj5YbWxRTmFtZS5GYWN0b3J5PC9BPi48REQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+PENPREU+WG1sUU5hbWU8L0NPREU+PC9BPi48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxSdW50aW1lRXhjZXB0aW9uLmh0bWwiPjxCPlhtbFJ1bnRpbWVFeGNlcHRpb248L0I+PC9BPiAtIGV4Y2VwdGlvbiBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUnVudGltZUV4Y2VwdGlvbi5odG1sIj5YbWxSdW50aW1lRXhjZXB0aW9uPC9BPi48REQ+QW4gdW5jaGVja2VkIFhNTCBleGNlcHRpb24uPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUnVudGltZUV4Y2VwdGlvbi5odG1sI1htbFJ1bnRpbWVFeGNlcHRpb24oamF2YS5sYW5nLlN0cmluZykiPjxCPlhtbFJ1bnRpbWVFeGNlcHRpb24oU3RyaW5nKTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFJ1bnRpbWVFeGNlcHRpb24uaHRtbCI+WG1sUnVudGltZUV4Y2VwdGlvbjwvQT4KLTxERD5Db25zdHJ1Y3RzIGFuIFhtbFJ1bnRpbWVFeGNlcHRpb24gZnJvbSBhIG1lc3NhZ2UuCi08RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxSdW50aW1lRXhjZXB0aW9uLmh0bWwjWG1sUnVudGltZUV4Y2VwdGlvbihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuVGhyb3dhYmxlKSI+PEI+WG1sUnVudGltZUV4Y2VwdGlvbihTdHJpbmcsIFRocm93YWJsZSk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxSdW50aW1lRXhjZXB0aW9uLmh0bWwiPlhtbFJ1bnRpbWVFeGNlcHRpb248L0E+Ci08REQ+Q29uc3RydWN0cyBhbiBYbWxSdW50aW1lRXhjZXB0aW9uIGZyb20gYSBtZXNzYWdlIGFuZCBhIGNhdXNlLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUnVudGltZUV4Y2VwdGlvbi5odG1sI1htbFJ1bnRpbWVFeGNlcHRpb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlRocm93YWJsZSwgamF2YS51dGlsLkNvbGxlY3Rpb24pIj48Qj5YbWxSdW50aW1lRXhjZXB0aW9uKFN0cmluZywgVGhyb3dhYmxlLCBDb2xsZWN0aW9uKTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFJ1bnRpbWVFeGNlcHRpb24uaHRtbCI+WG1sUnVudGltZUV4Y2VwdGlvbjwvQT4KLTxERD5Db25zdHJ1Y3RzIGFuIFhtbFJ1bnRpbWVFeGNlcHRpb24gZnJvbSBhIG1lc3NhZ2UsIGEgY2F1c2UsIGFuZCBhIGNvbGxlY3Rpb24gb2YgWG1sRXJyb3JzLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUnVudGltZUV4Y2VwdGlvbi5odG1sI1htbFJ1bnRpbWVFeGNlcHRpb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlRocm93YWJsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFcnJvcikiPjxCPlhtbFJ1bnRpbWVFeGNlcHRpb24oU3RyaW5nLCBUaHJvd2FibGUsIFhtbEVycm9yKTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFJ1bnRpbWVFeGNlcHRpb24uaHRtbCI+WG1sUnVudGltZUV4Y2VwdGlvbjwvQT4KLTxERD5Db25zdHJ1Y3RzIGFuIFhtbFJ1bnRpbWVFeGNlcHRpb24gZnJvbSBhIG1lc3NhZ2UsIGEgY2F1c2UsIGFuZCBhbiBYbWxFcnJvci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFJ1bnRpbWVFeGNlcHRpb24uaHRtbCNYbWxSdW50aW1lRXhjZXB0aW9uKGphdmEubGFuZy5UaHJvd2FibGUpIj48Qj5YbWxSdW50aW1lRXhjZXB0aW9uKFRocm93YWJsZSk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxSdW50aW1lRXhjZXB0aW9uLmh0bWwiPlhtbFJ1bnRpbWVFeGNlcHRpb248L0E+Ci08REQ+Q29uc3RydWN0cyBhbiBYbWxSdW50aW1lRXhjZXB0aW9uIGZyb20gYSBjYXVzZS4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFJ1bnRpbWVFeGNlcHRpb24uaHRtbCNYbWxSdW50aW1lRXhjZXB0aW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXJyb3IpIj48Qj5YbWxSdW50aW1lRXhjZXB0aW9uKFhtbEVycm9yKTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFJ1bnRpbWVFeGNlcHRpb24uaHRtbCI+WG1sUnVudGltZUV4Y2VwdGlvbjwvQT4KLTxERD5Db25zdHJ1Y3RzIGFuIFhtbFJ1bnRpbWVFeGNlcHRpb24gZnJvbSBhbiBYbWxFcnJvci4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFJ1bnRpbWVFeGNlcHRpb24uaHRtbCNYbWxSdW50aW1lRXhjZXB0aW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXhjZXB0aW9uKSI+PEI+WG1sUnVudGltZUV4Y2VwdGlvbihYbWxFeGNlcHRpb24pPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUnVudGltZUV4Y2VwdGlvbi5odG1sIj5YbWxSdW50aW1lRXhjZXB0aW9uPC9BPgotPEREPkNvbnN0cnVjdHMgYW4gWG1sUnVudGltZUV4Y2VwdGlvbiBmcm9tIGFuIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPjxDT0RFPlhtbEV4Y2VwdGlvbjwvQ09ERT48L0E+LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2F4SGFuZGxlci5odG1sIj48Qj5YbWxTYXhIYW5kbGVyPC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNheEhhbmRsZXIuaHRtbCI+WG1sU2F4SGFuZGxlcjwvQT4uPEREPkEgaG9sZGVyIGZvciBhIFNBWCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3htbC9zYXgvQ29udGVudEhhbmRsZXIuaHRtbCI+PENPREU+Q29udGVudEhhbmRsZXI8L0NPREU+PC9BPiBhbmQgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy94bWwvc2F4L2V4dC9MZXhpY2FsSGFuZGxlci5odG1sIj48Q09ERT5MZXhpY2FsSGFuZGxlcjwvQ09ERT48L0E+IHRoYXQgYXJlCi0gY2FwYWJsZSBvZiBsb2FkaW5nIGFuIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPjxDT0RFPlhtbE9iamVjdDwvQ09ERT48L0E+IGluc3RhbmNlLjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPjxCPlhtbFNob3J0PC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPlhtbFNob3J0PC9BPi48REQ+Q29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Ii9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Nob3J0Ij54czpzaG9ydDwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5GYWN0b3J5Lmh0bWwiPjxCPlhtbFNob3J0LkZhY3Rvcnk8L0I+PC9BPiAtIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5GYWN0b3J5Lmh0bWwiPlhtbFNob3J0LkZhY3Rvcnk8L0E+LjxERD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj48Q09ERT5YbWxTaG9ydDwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCI+PEI+WG1sU2ltcGxlTGlzdDwvQj48L0E+IC0gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCI+WG1sU2ltcGxlTGlzdDwvQT4uPEREPlRoZSBpbW11dGFibGUgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPjxDT0RFPkxpc3Q8L0NPREU+PC9BPiByZXR1cm5lZCBmb3IgWE1MIHNpbXBsZSBsaXN0IHZhbHVlcy48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwjWG1sU2ltcGxlTGlzdChqYXZhLnV0aWwuTGlzdCkiPjxCPlhtbFNpbXBsZUxpc3QoTGlzdCk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwiPlhtbFNpbXBsZUxpc3Q8L0E+Ci08REQ+Q29uc3RydWN0cyBhbiBpbW11dGFibGUgWG1sU2ltcGxlTGlzdCB0aGF0IHdyYXBzIChkb2VzIG5vdCBjb3B5KQotIHRoZSBnaXZlbiA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+LgotPERUPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwiPjxCPlhNTFN0cmVhbUNvbnN0YW50czwvQj48L0E+IC0gaW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCI+WE1MU3RyZWFtQ29uc3RhbnRzPC9BPi48REQ+VGhpcyBpbnRlcmZhY2UgZGVjbGFyZXMgdGhlIGNvbnN0YW50cyB1c2VkIGluIHRoaXMgQVBJLjxEVD48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj48Qj5YTUxTdHJlYW1FeGNlcHRpb248L0I+PC9BPiAtIGV4Y2VwdGlvbiBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT4uPEREPlRoZSBiYXNlIGV4Y2VwdGlvbiBmb3IgdW5leHBlY3RlZCBwcm9jZXNzaW5nIGVycm9ycy48RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCNYTUxTdHJlYW1FeGNlcHRpb24oKSI+PEI+WE1MU3RyZWFtRXhjZXB0aW9uKCk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPgotPEREPkRlZmF1bHQgY29uc3RydWN0b3IKLTxEVD48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sI1hNTFN0cmVhbUV4Y2VwdGlvbihqYXZhLmxhbmcuU3RyaW5nKSI+PEI+WE1MU3RyZWFtRXhjZXB0aW9uKFN0cmluZyk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPgotPEREPkNvbnN0cnVjdCBhbiBleGNlcHRpb24gd2l0aCB0aGUgYXNzb2NhdGVkIG1lc3NhZ2UuCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCNYTUxTdHJlYW1FeGNlcHRpb24oamF2YS5sYW5nLlN0cmluZywgamF2YXgueG1sLnN0cmVhbS5Mb2NhdGlvbikiPjxCPlhNTFN0cmVhbUV4Y2VwdGlvbihTdHJpbmcsIExvY2F0aW9uKTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3MgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+Ci08REQ+Q29uc3RydWN0IGFuIGV4Y2VwdGlvbiB3aXRoIHRoZSBhc3NvY2F0ZWQgbWVzc2FnZSwgZXhjZXB0aW9uIGFuZCBsb2NhdGlvbi4KLTxEVD48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sI1hNTFN0cmVhbUV4Y2VwdGlvbihqYXZhLmxhbmcuU3RyaW5nLCBqYXZheC54bWwuc3RyZWFtLkxvY2F0aW9uLCBqYXZhLmxhbmcuVGhyb3dhYmxlKSI+PEI+WE1MU3RyZWFtRXhjZXB0aW9uKFN0cmluZywgTG9jYXRpb24sIFRocm93YWJsZSk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPgotPEREPkNvbnN0cnVjdCBhbiBleGNlcHRpb24gd2l0aCB0aGUgYXNzb2NhdGVkIG1lc3NhZ2UsIGV4Y2VwdGlvbiBhbmQgbG9jYXRpb24uCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCNYTUxTdHJlYW1FeGNlcHRpb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlRocm93YWJsZSkiPjxCPlhNTFN0cmVhbUV4Y2VwdGlvbihTdHJpbmcsIFRocm93YWJsZSk8L0I+PC9BPiAtIAotQ29uc3RydWN0b3IgZm9yIGNsYXNzIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPgotPEREPkNvbnN0cnVjdCBhbiBleGNlcHRpb24gd2l0aCB0aGUgYXNzb2NhdGVkIG1lc3NhZ2UgYW5kIGV4Y2VwdGlvbgotPERUPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwjWE1MU3RyZWFtRXhjZXB0aW9uKGphdmEubGFuZy5UaHJvd2FibGUpIj48Qj5YTUxTdHJlYW1FeGNlcHRpb24oVGhyb3dhYmxlKTwvQj48L0E+IC0gCi1Db25zdHJ1Y3RvciBmb3IgY2xhc3MgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+Ci08REQ+Q29uc3RydWN0IGFuIGV4Y2VwdGlvbiB3aXRoIHRoZSBhc3NvY2F0ZWQgZXhjZXB0aW9uCi08RFQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCI+PEI+WE1MU3RyZWFtUmVhZGVyPC9CPjwvQT4gLSBpbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sIj5YTUxTdHJlYW1SZWFkZXI8L0E+LjxERD5UaGUgWE1MU3RyZWFtUmVhZGVyIGludGVyZmFjZSBhbGxvd3MgZm9yd2FyZCwgcmVhZC1vbmx5IGFjY2VzcyB0byBYTUwuPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWE1MU3RyZWFtVmFsaWRhdGlvbkV4Y2VwdGlvbi5odG1sIj48Qj5YTUxTdHJlYW1WYWxpZGF0aW9uRXhjZXB0aW9uPC9CPjwvQT4gLSBleGNlcHRpb24gb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1hNTFN0cmVhbVZhbGlkYXRpb25FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtVmFsaWRhdGlvbkV4Y2VwdGlvbjwvQT4uPEREPkFuIGV4Y2VwdGlvbiB0aHJvd24gZnJvbSBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWE1MU3RyZWFtVmFsaWRhdGlvbkV4Y2VwdGlvbi5odG1sI1hNTFN0cmVhbVZhbGlkYXRpb25FeGNlcHRpb24ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxFcnJvcikiPjxCPlhNTFN0cmVhbVZhbGlkYXRpb25FeGNlcHRpb24oWG1sRXJyb3IpPC9CPjwvQT4gLSAKLUNvbnN0cnVjdG9yIGZvciBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWE1MU3RyZWFtVmFsaWRhdGlvbkV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1WYWxpZGF0aW9uRXhjZXB0aW9uPC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPjxCPlhtbFN0cmluZzwvQj48L0E+IC0gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+WG1sU3RyaW5nPC9BPi48REQ+Q29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Ii9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3N0cmluZyI+eHM6c3RyaW5nPC9hPiB0eXBlLjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5GYWN0b3J5Lmh0bWwiPjxCPlhtbFN0cmluZy5GYWN0b3J5PC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sU3RyaW5nLkZhY3Rvcnk8L0E+LjxERD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+PENPREU+WG1sU3RyaW5nPC9DT0RFPjwvQT4uPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KCkiPjxCPnhtbFRleHQoKTwvQj48L0E+IC0gCi1NZXRob2QgaW4gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT4KLTxERD5SZXR1cm5zIHN0YW5kYXJkIFhNTCB0ZXh0LgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjeG1sVGV4dCgpIj48Qj54bWxUZXh0KCk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEREPiZuYnNwOwotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxCPnhtbFRleHQoWG1sT3B0aW9ucyk8L0I+PC9BPiAtIAotTWV0aG9kIGluIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+Ci08REQ+SnVzdCBsaWtlIHhtbFRleHQoKSBidXQgd2l0aCBvcHRpb25zLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Qj54bWxUZXh0KFhtbE9wdGlvbnMpPC9CPjwvQT4gLSAKLU1ldGhvZCBpbiBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPkZpbHRlclhtbE9iamVjdDwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+PEI+WG1sVGltZTwvQj48L0E+IC0gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPlhtbFRpbWU8L0E+LjxERD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iL29yZ1xhcGFjaGVceG1sYmVhbnMvX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jdGltZSI+eHM6dGltZTwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLkZhY3RvcnkuaHRtbCI+PEI+WG1sVGltZS5GYWN0b3J5PC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5GYWN0b3J5Lmh0bWwiPlhtbFRpbWUuRmFjdG9yeTwvQT4uPEREPkEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+PENPREU+WG1sVGltZTwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPjxCPlhtbFRva2VuPC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPlhtbFRva2VuPC9BPi48REQ+Q29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Ii9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Rva2VuIj54czp0b2tlbjwvYT4gdHlwZS48RFQ+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5GYWN0b3J5Lmh0bWwiPjxCPlhtbFRva2VuLkZhY3Rvcnk8L0I+PC9BPiAtIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5GYWN0b3J5Lmh0bWwiPlhtbFRva2VuLkZhY3Rvcnk8L0E+LjxERD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Q09ERT5YbWxUb2tlbjwvQ09ERT48L0E+LjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPjxCPlhtbFRva2VuU291cmNlPC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPi48REQ+UmVwcmVzZW50cyBhIGhvbGRlciBvZiBYTUwgdGhhdCBjYW4gcmV0dXJuIGFuIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPjxDT0RFPlhtbEN1cnNvcjwvQ09ERT48L0E+Ci0gb3IgY29weSBpdHNlbGYgdG8gdmFyaW91cyBtZWRpYSBzdWNoIGFzCi0gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vV3JpdGVyLmh0bWwiPjxDT0RFPldyaXRlcnM8L0NPREU+PC9BPiBvciA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPjxDT0RFPkZpbGVzPC9DT0RFPjwvQT4uPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxCPlhtbFVuc2lnbmVkQnl0ZTwvQj48L0E+IC0gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+WG1sVW5zaWduZWRCeXRlPC9BPi48REQ+Q29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Ii9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Vuc2lnbmVkQnl0ZSI+eHM6dW5zaWduZWRCeXRlPC9hPiB0eXBlLjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwiPjxCPlhtbFVuc2lnbmVkQnl0ZS5GYWN0b3J5PC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRCeXRlLkZhY3Rvcnk8L0E+LjxERD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+PENPREU+WG1sVW5zaWduZWRCeXRlPC9DT0RFPjwvQT4uPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+PEI+WG1sVW5zaWduZWRJbnQ8L0I+PC9BPiAtIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+LjxERD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iL29yZ1xhcGFjaGVceG1sYmVhbnMvX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jdW5zaWduZWRJbnQiPnhzOnVuc2lnbmVkSW50PC9hPiB0eXBlLjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50LkZhY3RvcnkuaHRtbCI+PEI+WG1sVW5zaWduZWRJbnQuRmFjdG9yeTwvQj48L0E+IC0gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50LkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRJbnQuRmFjdG9yeTwvQT4uPEREPkEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkSW50PC9DT0RFPjwvQT4uPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPjxCPlhtbFVuc2lnbmVkTG9uZzwvQj48L0E+IC0gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+WG1sVW5zaWduZWRMb25nPC9BPi48REQ+Q29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Ii9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Vuc2lnbmVkTG9uZyI+eHM6dW5zaWduZWRMb25nPC9hPiB0eXBlLjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5GYWN0b3J5Lmh0bWwiPjxCPlhtbFVuc2lnbmVkTG9uZy5GYWN0b3J5PC9CPjwvQT4gLSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRMb25nLkZhY3Rvcnk8L0E+LjxERD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+PENPREU+WG1sVW5zaWduZWRMb25nPC9DT0RFPjwvQT4uPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj48Qj5YbWxVbnNpZ25lZFNob3J0PC9CPjwvQT4gLSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+WG1sVW5zaWduZWRTaG9ydDwvQT4uPEREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIvb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyN1bnNpZ25lZFNob3J0Ij54czp1bnNpZ25lZFNob3J0PC9hPiB0eXBlLjxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuRmFjdG9yeS5odG1sIj48Qj5YbWxVbnNpZ25lZFNob3J0LkZhY3Rvcnk8L0I+PC9BPiAtIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5PC9BPi48REQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZFNob3J0PC9DT0RFPjwvQT4uPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI1hRVUVSWV9DVVJSRU5UX05PREVfVkFSIj48Qj5YUVVFUllfQ1VSUkVOVF9OT0RFX1ZBUjwvQj48L0E+IC0gCi1TdGF0aWMgdmFyaWFibGUgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4KLTxERD4mbmJzcDsKLTwvREw+Ci08SFI+Ci08QSBOQU1FPSJfX18iPjwhLS0gLS0+PC9BPjxIMj4KLTxCPl88L0I+PC9IMj4KLTxETD4KLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxCb29rbWFyay5odG1sI19jdXJyZW50TWFyayI+PEI+X2N1cnJlbnRNYXJrPC9CPjwvQT4gLSAKLVZhcmlhYmxlIGluIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuWG1sQm9va21hcmsuaHRtbCI+WG1sQ3Vyc29yLlhtbEJvb2ttYXJrPC9BPgotPEREPlRoZSBtYXJrIGlzIHNldCBieSB0aGUgaG9zdCBkb2N1bWVudDsgaXQgaXMgY2FwYWJsZSBvZgotIHJldHVybmluZyBhbiBYbWxDdXJzb3IgaW1wbGVtZW50YXRpb24gYXQgdGhlIGxvY2F0aW9uIG9mCi0gdGhlIGJvb2ttYXJrLgotPERUPjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sI19oYW5kbGUiPjxCPl9oYW5kbGU8L0I+PC9BPiAtIAotVmFyaWFibGUgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCI+U2NoZW1hQ29tcG9uZW50LlJlZjwvQT4KLTxERD4mbmJzcDsKLTxEVD48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxCb29rbWFyay5odG1sI19yZWYiPjxCPl9yZWY8L0I+PC9BPiAtIAotVmFyaWFibGUgaW4gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxCb29rbWFyay5odG1sIj5YbWxDdXJzb3IuWG1sQm9va21hcms8L0E+Ci08REQ+SWYgbm9uLW51bGwsIHRoZSByZWYgaXMgdXNlZCBieSB0aGUgaG9zdCBkb2N1bWVudAotIHRvIG1haW50YWluIGEgcmVmZXJlbmNlIHRvIHRoZSBib29rbWFyay4KLTwvREw+Ci08SFI+Ci08QSBIUkVGPSIjX0FfIj5BPC9BPiA8QSBIUkVGPSIjX0JfIj5CPC9BPiA8QSBIUkVGPSIjX0NfIj5DPC9BPiA8QSBIUkVGPSIjX0RfIj5EPC9BPiA8QSBIUkVGPSIjX0VfIj5FPC9BPiA8QSBIUkVGPSIjX0ZfIj5GPC9BPiA8QSBIUkVGPSIjX0dfIj5HPC9BPiA8QSBIUkVGPSIjX0hfIj5IPC9BPiA8QSBIUkVGPSIjX0lfIj5JPC9BPiA8QSBIUkVGPSIjX0pfIj5KPC9BPiA8QSBIUkVGPSIjX0xfIj5MPC9BPiA8QSBIUkVGPSIjX01fIj5NPC9BPiA8QSBIUkVGPSIjX05fIj5OPC9BPiA8QSBIUkVGPSIjX09fIj5PPC9BPiA8QSBIUkVGPSIjX1BfIj5QPC9BPiA8QSBIUkVGPSIjX1FfIj5RPC9BPiA8QSBIUkVGPSIjX1JfIj5SPC9BPiA8QSBIUkVGPSIjX1NfIj5TPC9BPiA8QSBIUkVGPSIjX1RfIj5UPC9BPiA8QSBIUkVGPSIjX1VfIj5VPC9BPiA8QSBIUkVGPSIjX1ZfIj5WPC9BPiA8QSBIUkVGPSIjX1dfIj5XPC9BPiA8QSBIUkVGPSIjX1hfIj5YPC9BPiA8QSBIUkVGPSIjX19fIj5fPC9BPiAKLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJvdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJvdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJkZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+SW5kZXg8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJoZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9ImluZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iaW5kZXgtYWxsLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2UvaW5kZXguaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9pbmRleC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTlmMDZhLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9pbmRleC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NiBQRFQgMjAwMy0tPgotPFRJVExFPgotWE1MQmVhbnMgRG9jdW1lbnRhdGlvbgotPC9USVRMRT4KLTwvSEVBRD4KLTxGUkFNRVNFVCBjb2xzPSIyMCUsODAlIj4KLTxGUkFNRVNFVCByb3dzPSIzMCUsNzAlIj4KLTxGUkFNRSBzcmM9Im92ZXJ2aWV3LWZyYW1lLmh0bWwiIG5hbWU9InBhY2thZ2VMaXN0RnJhbWUiPgotPEZSQU1FIHNyYz0iYWxsY2xhc3Nlcy1mcmFtZS5odG1sIiBuYW1lPSJwYWNrYWdlRnJhbWUiPgotPC9GUkFNRVNFVD4KLTxGUkFNRSBzcmM9Im92ZXJ2aWV3LXN1bW1hcnkuaHRtbCIgbmFtZT0iY2xhc3NGcmFtZSI+Ci08L0ZSQU1FU0VUPgotPE5PRlJBTUVTPgotPEgyPgotRnJhbWUgQWxlcnQ8L0gyPgotCi08UD4KLVRoaXMgZG9jdW1lbnQgaXMgZGVzaWduZWQgdG8gYmUgdmlld2VkIHVzaW5nIHRoZSBmcmFtZXMgZmVhdHVyZS4gSWYgeW91IHNlZSB0aGlzIG1lc3NhZ2UsIHlvdSBhcmUgdXNpbmcgYSBub24tZnJhbWUtY2FwYWJsZSB3ZWIgY2xpZW50LgotPEJSPgotTGluayB0bzxBIEhSRUY9Im92ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+Tm9uLWZyYW1lIHZlcnNpb24uPC9BPjwvTk9GUkFNRVM+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2UvamF2YXgveG1sL3N0cmVhbS9Mb2NhdGlvbi5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL2phdmF4L3htbC9zdHJlYW0vTG9jYXRpb24uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE2NzJhZC4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2UvamF2YXgveG1sL3N0cmVhbS9Mb2NhdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjg2ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTYgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1Mb2NhdGlvbiAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0iamF2YXgueG1sLnN0cmVhbS5Mb2NhdGlvbixMb2NhdGlvbiBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IkxvY2F0aW9uIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViBDTEFTUyZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkxvY2F0aW9uLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1qYXZheC54bWwuc3RyZWFtPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIExvY2F0aW9uPC9IMj4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPkxvY2F0aW9uPC9CPjwvREw+Ci0KLTxQPgotUHJvdmlkZXMgaW5mb3JtYXRpb24gb24gdGhlIGxvY2F0aW9uIG9mIGFuIGV2ZW50LgotCi0gQWxsIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCBieSBhIExvY2F0aW9uIGlzIG9wdGlvbmFsLiAgRm9yIGV4YW1wbGUKLSBhbiBhcHBsaWNhdGlvbiBtYXkgb25seSByZXBvcnQgbGluZSBudW1iZXJzLgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlZlcnNpb246PC9CPjwvRFQ+Ci0gIDxERD4wLjY8L0REPgotPERUPjxCPkF1dGhvcjo8L0I+PC9EVD4KLSAgPEREPkNvcHlyaWdodCAoYykgMjAwMyBieSBCRUEgU3lzdGVtcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC48L0REPgotPC9ETD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL0xvY2F0aW9uLmh0bWwjZ2V0Q2hhcmFjdGVyT2Zmc2V0KCkiPmdldENoYXJhY3Rlck9mZnNldDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybiB0aGUgYnl0ZSBvciBjaGFyYWN0ZXIgb2Zmc2V0IGludG8gdGhlIGlucHV0IHNvdXJjZSB0aGlzIGxvY2F0aW9uCi0gaXMgcG9pbnRpbmcgdG8uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL0xvY2F0aW9uLmh0bWwjZ2V0Q29sdW1uTnVtYmVyKCkiPmdldENvbHVtbk51bWJlcjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybiB0aGUgY29sdW1uIG51bWJlciB3aGVyZSB0aGUgY3VycmVudCBldmVudCBlbmRzLAotIHJldHVybnMgLTEgaWYgbm9uZSBpcyBhdmFpbGFibGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL0xvY2F0aW9uLmh0bWwjZ2V0TGluZU51bWJlcigpIj5nZXRMaW5lTnVtYmVyPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJuIHRoZSBsaW5lIG51bWJlciB3aGVyZSB0aGUgY3VycmVudCBldmVudCBlbmRzLAotIHJldHVybnMgLTEgaWYgbm9uZSBpcyBhdmFpbGFibGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9Mb2NhdGlvbi5odG1sI2dldExvY2F0aW9uVVJJKCkiPmdldExvY2F0aW9uVVJJPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIFVSSSB0aGlzIExvY2F0aW9uIGlzIHBvaW50aW5nIHRvLCBvciBudWxsIGlmIG5vIFVSSSBpcyBhdmFpbGFibGU8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldExpbmVOdW1iZXIoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TGluZU51bWJlcjwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5nZXRMaW5lTnVtYmVyPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJuIHRoZSBsaW5lIG51bWJlciB3aGVyZSB0aGUgY3VycmVudCBldmVudCBlbmRzLAotIHJldHVybnMgLTEgaWYgbm9uZSBpcyBhdmFpbGFibGUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldENvbHVtbk51bWJlcigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRDb2x1bW5OdW1iZXI8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+Z2V0Q29sdW1uTnVtYmVyPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJuIHRoZSBjb2x1bW4gbnVtYmVyIHdoZXJlIHRoZSBjdXJyZW50IGV2ZW50IGVuZHMsCi0gcmV0dXJucyAtMSBpZiBub25lIGlzIGF2YWlsYWJsZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0Q2hhcmFjdGVyT2Zmc2V0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldENoYXJhY3Rlck9mZnNldDwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5nZXRDaGFyYWN0ZXJPZmZzZXQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm4gdGhlIGJ5dGUgb3IgY2hhcmFjdGVyIG9mZnNldCBpbnRvIHRoZSBpbnB1dCBzb3VyY2UgdGhpcyBsb2NhdGlvbgotIGlzIHBvaW50aW5nIHRvLiBJZiB0aGUgaW5wdXQgc291cmNlIGlzIGEgZmlsZSBvciBhIGJ5dGUgc3RyZWFtIHRoZW4gCi0gdGhpcyBpcyB0aGUgYnl0ZSBvZmZzZXQgaW50byB0aGF0IHN0cmVhbSwgYnV0IGlmIHRoZSBpbnB1dCBzb3VyY2UgaXMgCi0gYSBjaGFyYWN0ZXIgbWVkaWEgdGhlbiB0aGUgb2Zmc2V0IGlzIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0LiAKLSBSZXR1cm5zIC0xIGlmIHRoZXJlIGlzIG5vIG9mZnNldCBhdmFpbGFibGUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldExvY2F0aW9uVVJJKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldExvY2F0aW9uVVJJPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5nZXRMb2NhdGlvblVSSTwvQj4oKTwvUFJFPgotPERMPgotPEREPlRoZSBVUkkgdGhpcyBMb2NhdGlvbiBpcyBwb2ludGluZyB0bywgb3IgbnVsbCBpZiBubyBVUkkgaXMgYXZhaWxhYmxlCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViBDTEFTUyZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkxvY2F0aW9uLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmYmJiZmIuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1NDggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NiBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhNTFN0cmVhbUNvbnN0YW50cyAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0iamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Db25zdGFudHMsWE1MU3RyZWFtQ29uc3RhbnRzIGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWE1MU3RyZWFtQ29uc3RhbnRzIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9Mb2NhdGlvbi5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYTUxTdHJlYW1Db25zdGFudHMuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1qYXZheC54bWwuc3RyZWFtPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFhNTFN0cmVhbUNvbnN0YW50czwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIEtub3duIFN1YmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCI+WE1MU3RyZWFtUmVhZGVyPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBpbnRlcmZhY2UgPEI+WE1MU3RyZWFtQ29uc3RhbnRzPC9CPjwvREw+Ci0KLTxQPgotVGhpcyBpbnRlcmZhY2UgZGVjbGFyZXMgdGhlIGNvbnN0YW50cyB1c2VkIGluIHRoaXMgQVBJLgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCNBVFRSSUJVVEUiPkFUVFJJQlVURTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtJbmRpY2F0ZXMgYW4gZXZlbnQgaXMgYW4gYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sI0NEQVRBIj5DREFUQTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtJbmRpY2F0ZXMgYW4gZXZlbnQgaXMgYSBDREFUQTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCNDSEFSQUNURVJTIj5DSEFSQUNURVJTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0luZGljYXRlcyBhbiBldmVudCBpcyBjaGFyYWN0ZXJzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sI0NPTU1FTlQiPkNPTU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW5kaWNhdGVzIGFuIGV2ZW50IGlzIGEgY29tbWVudDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCNEVEQiPkRURDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtJbmRpY2F0ZXMgYW4gZXZlbnQgaXMgYSBEVEQ8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwjRU5EX0RPQ1VNRU5UIj5FTkRfRE9DVU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW5kaWNhdGVzIGFuIGV2ZW50IGlzIGFuIGVuZCBkb2N1bWVudDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCNFTkRfRUxFTUVOVCI+RU5EX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW5kaWNhdGVzIGFuIGV2ZW50IGlzIGFuIGVuZCBlbGVtZW50PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sI0VORF9FTlRJVFkiPkVORF9FTlRJVFk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW5kaWNhdGVzIGFuIGV2ZW50IGlzIHRoZSBlbmQgb2YgYSByZXNvbHZlZCBlbnRpdHk8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwjRU5USVRZX0RFQ0xBUkFUSU9OIj5FTlRJVFlfREVDTEFSQVRJT048L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW5kaWNhdGVzIGEgRW50aXR5IERlY2xhcmF0aW9uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sI0VOVElUWV9SRUZFUkVOQ0UiPkVOVElUWV9SRUZFUkVOQ0U8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW5kaWNhdGVzIGFuIGV2ZW50IGlzIGFuIGVudGl0eSByZWZlcmVuY2U8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwjTkFNRVNQQUNFIj5OQU1FU1BBQ0U8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW5kaWNhdGVzIGFuIGV2ZW50IGlzIGEgbmFtZXBzYWNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sI05PVEFUSU9OX0RFQ0xBUkFUSU9OIj5OT1RBVElPTl9ERUNMQVJBVElPTjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtJbmRpY2F0ZXMgYSBOb3RhdGlvbjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCNQUk9DRVNTSU5HX0lOU1RSVUNUSU9OIj5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0luZGljYXRlcyBhbiBldmVudCBpcyBhIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb248L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwjU1BBQ0UiPlNQQUNFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0luZGljYXRlcyBhbiBldmVudCBpcyBhIHNwYWNlLCBldmVudHMgYXJlIG9ubHkKLSByZXBvcnRlZCBhcyBTUEFDRSBpZiB0aGV5IGFyZSBpZ25vcmFibGUgd2hpdGUKLSBzcGFjZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwjU1RBUlRfRE9DVU1FTlQiPlNUQVJUX0RPQ1VNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0luZGljYXRlcyBhbiBldmVudCBpcyBhIHN0YXJ0IGRvY3VtZW50PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sI1NUQVJUX0VMRU1FTlQiPlNUQVJUX0VMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW5kaWNhdGVzIGFuIGV2ZW50IGlzIGEgc3RhcnQgZWxlbWVudDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCNTVEFSVF9FTlRJVFkiPlNUQVJUX0VOVElUWTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtJbmRpY2F0ZXMgYW4gZXZlbnQgaXMgdGhlIHN0YXJ0IG9mIGEgcmVzb2x2ZWQgZW50aXR5PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi0KLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iU1RBUlRfRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotU1RBUlRfRUxFTUVOVDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+U1RBUlRfRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5JbmRpY2F0ZXMgYW4gZXZlbnQgaXMgYSBzdGFydCBlbGVtZW50Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPmphdmF4LnhtbC5zdHJlYW0uZXZlbnRzLlN0YXJ0RWxlbWVudDwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Db25zdGFudHMuU1RBUlRfRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJFTkRfRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotRU5EX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkVORF9FTEVNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPkluZGljYXRlcyBhbiBldmVudCBpcyBhbiBlbmQgZWxlbWVudAotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5qYXZheC54bWwuc3RyZWFtLmV2ZW50cy5FbmRFbGVtZW50PC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbUNvbnN0YW50cy5FTkRfRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJQUk9DRVNTSU5HX0lOU1RSVUNUSU9OIj48IS0tIC0tPjwvQT48SDM+Ci1QUk9DRVNTSU5HX0lOU1RSVUNUSU9OPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OPC9CPjwvUFJFPgotPERMPgotPEREPkluZGljYXRlcyBhbiBldmVudCBpcyBhIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+amF2YXgueG1sLnN0cmVhbS5ldmVudHMuUHJvY2Vzc2luZ0luc3RydWN0aW9uPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbUNvbnN0YW50cy5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkNIQVJBQ1RFUlMiPjwhLS0gLS0+PC9BPjxIMz4KLUNIQVJBQ1RFUlM8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkNIQVJBQ1RFUlM8L0I+PC9QUkU+Ci08REw+Ci08REQ+SW5kaWNhdGVzIGFuIGV2ZW50IGlzIGNoYXJhY3RlcnMKLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+amF2YXgueG1sLnN0cmVhbS5ldmVudHMuQ2hhcmFjdGVyczwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Db25zdGFudHMuQ0hBUkFDVEVSUyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJDT01NRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1DT01NRU5UPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5DT01NRU5UPC9CPjwvUFJFPgotPERMPgotPEREPkluZGljYXRlcyBhbiBldmVudCBpcyBhIGNvbW1lbnQKLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+amF2YXgueG1sLnN0cmVhbS5ldmVudHMuQ29tbWVudDwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Db25zdGFudHMuQ09NTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTUEFDRSI+PCEtLSAtLT48L0E+PEgzPgotU1BBQ0U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPlNQQUNFPC9CPjwvUFJFPgotPERMPgotPEREPkluZGljYXRlcyBhbiBldmVudCBpcyBhIHNwYWNlLCBldmVudHMgYXJlIG9ubHkKLSByZXBvcnRlZCBhcyBTUEFDRSBpZiB0aGV5IGFyZSBpZ25vcmFibGUgd2hpdGUKLSBzcGFjZS4gIE90aGVyd2lzZSB0aGV5IGFyZSByZXBvcnRlZCBhcyBDSEFSQUNURVJTLgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5qYXZheC54bWwuc3RyZWFtLmV2ZW50cy5DaGFyYWN0ZXJzPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbUNvbnN0YW50cy5TUEFDRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTVEFSVF9ET0NVTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotU1RBUlRfRE9DVU1FTlQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPlNUQVJUX0RPQ1VNRU5UPC9CPjwvUFJFPgotPERMPgotPEREPkluZGljYXRlcyBhbiBldmVudCBpcyBhIHN0YXJ0IGRvY3VtZW50Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPmphdmF4LnhtbC5zdHJlYW0uZXZlbnRzLlN0YXJ0RG9jdW1lbnQ8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI2phdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtQ29uc3RhbnRzLlNUQVJUX0RPQ1VNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkVORF9ET0NVTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotRU5EX0RPQ1VNRU5UPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5FTkRfRE9DVU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+SW5kaWNhdGVzIGFuIGV2ZW50IGlzIGFuIGVuZCBkb2N1bWVudAotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5qYXZheC54bWwuc3RyZWFtLmV2ZW50cy5FbmREb2N1bWVudDwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Db25zdGFudHMuRU5EX0RPQ1VNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkVOVElUWV9SRUZFUkVOQ0UiPjwhLS0gLS0+PC9BPjxIMz4KLUVOVElUWV9SRUZFUkVOQ0U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkVOVElUWV9SRUZFUkVOQ0U8L0I+PC9QUkU+Ci08REw+Ci08REQ+SW5kaWNhdGVzIGFuIGV2ZW50IGlzIGFuIGVudGl0eSByZWZlcmVuY2UKLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+amF2YXgueG1sLnN0cmVhbS5ldmVudHMuRW50aXR5UmVmZXJlbmNlPC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbUNvbnN0YW50cy5FTlRJVFlfUkVGRVJFTkNFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkFUVFJJQlVURSI+PCEtLSAtLT48L0E+PEgzPgotQVRUUklCVVRFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5BVFRSSUJVVEU8L0I+PC9QUkU+Ci08REw+Ci08REQ+SW5kaWNhdGVzIGFuIGV2ZW50IGlzIGFuIGF0dHJpYnV0ZQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5qYXZheC54bWwuc3RyZWFtLmV2ZW50cy5BdHRyaWJ1dGU8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI2phdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtQ29uc3RhbnRzLkFUVFJJQlVURSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJEVEQiPjwhLS0gLS0+PC9BPjxIMz4KLURURDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+RFREPC9CPjwvUFJFPgotPERMPgotPEREPkluZGljYXRlcyBhbiBldmVudCBpcyBhIERURAotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5qYXZheC54bWwuc3RyZWFtLmV2ZW50cy5EVEQ8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI2phdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtQ29uc3RhbnRzLkRURCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJDREFUQSI+PCEtLSAtLT48L0E+PEgzPgotQ0RBVEE8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkNEQVRBPC9CPjwvUFJFPgotPERMPgotPEREPkluZGljYXRlcyBhbiBldmVudCBpcyBhIENEQVRBCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPmphdmF4LnhtbC5zdHJlYW0uZXZlbnRzLkNoYXJhY3RlcnM8L0NPREU+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI2phdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtQ29uc3RhbnRzLkNEQVRBIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik5BTUVTUEFDRSI+PCEtLSAtLT48L0E+PEgzPgotTkFNRVNQQUNFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5OQU1FU1BBQ0U8L0I+PC9QUkU+Ci08REw+Ci08REQ+SW5kaWNhdGVzIGFuIGV2ZW50IGlzIGEgbmFtZXBzYWNlCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxDT0RFPmphdmF4LnhtbC5zdHJlYW0uZXZlbnRzLk5hbWVzcGFjZTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Db25zdGFudHMuTkFNRVNQQUNFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNUQVJUX0VOVElUWSI+PCEtLSAtLT48L0E+PEgzPgotU1RBUlRfRU5USVRZPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5TVEFSVF9FTlRJVFk8L0I+PC9QUkU+Ci08REw+Ci08REQ+SW5kaWNhdGVzIGFuIGV2ZW50IGlzIHRoZSBzdGFydCBvZiBhIHJlc29sdmVkIGVudGl0eQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5qYXZheC54bWwuc3RyZWFtLmV2ZW50cy5TdGFydEVudGl0eTwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Db25zdGFudHMuU1RBUlRfRU5USVRZIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkVORF9FTlRJVFkiPjwhLS0gLS0+PC9BPjxIMz4KLUVORF9FTlRJVFk8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkVORF9FTlRJVFk8L0I+PC9QUkU+Ci08REw+Ci08REQ+SW5kaWNhdGVzIGFuIGV2ZW50IGlzIHRoZSBlbmQgb2YgYSByZXNvbHZlZCBlbnRpdHkKLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+amF2YXgueG1sLnN0cmVhbS5ldmVudHMuRW5kRW50aXR5PC9DT0RFPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbUNvbnN0YW50cy5FTkRfRU5USVRZIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik5PVEFUSU9OX0RFQ0xBUkFUSU9OIj48IS0tIC0tPjwvQT48SDM+Ci1OT1RBVElPTl9ERUNMQVJBVElPTjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+Tk9UQVRJT05fREVDTEFSQVRJT048L0I+PC9QUkU+Ci08REw+Ci08REQ+SW5kaWNhdGVzIGEgTm90YXRpb24KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+amF2YXgueG1sLnN0cmVhbS5ldmVudHMuTm90YXRpb25EZWNsYXJhdGlvbjwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Db25zdGFudHMuTk9UQVRJT05fREVDTEFSQVRJT04iPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iRU5USVRZX0RFQ0xBUkFUSU9OIj48IS0tIC0tPjwvQT48SDM+Ci1FTlRJVFlfREVDTEFSQVRJT048L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkVOVElUWV9ERUNMQVJBVElPTjwvQj48L1BSRT4KLTxETD4KLTxERD5JbmRpY2F0ZXMgYSBFbnRpdHkgRGVjbGFyYXRpb24KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+amF2YXgueG1sLnN0cmVhbS5ldmVudHMuTm90YXRpb25EZWNsYXJhdGlvbjwvQ09ERT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Db25zdGFudHMuRU5USVRZX0RFQ0xBUkFUSU9OIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL0xvY2F0aW9uLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhNTFN0cmVhbUNvbnN0YW50cy5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2UvamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY3ZTYzOC4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2UvamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQzMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ2OjU2IFBEVCAyMDAzIC0tPgotPFRJVExFPgotWE1MU3RyZWFtRXhjZXB0aW9uIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbixYTUxTdHJlYW1FeGNlcHRpb24gY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhNTFN0cmVhbUV4Y2VwdGlvbiAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYgQ0xBU1MmbmJzcDsKLSZuYnNwO05FWFQgQ0xBU1M8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1qYXZheC54bWwuc3RyZWFtPC9GT05UPgotPEJSPgotQ2xhc3MgWE1MU3RyZWFtRXhjZXB0aW9uPC9IMj4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5qYXZhLmxhbmcuT2JqZWN0PC9BPgotICB8Ci0gICstLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwiPmphdmEubGFuZy5UaHJvd2FibGU8L0E+Ci0gICAgICAgIHwKLSAgICAgICAgKy0tPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9FeGNlcHRpb24uaHRtbCI+amF2YS5sYW5nLkV4Y2VwdGlvbjwvQT4KLSAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICArLS08Qj5qYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbjwvQj4KLTwvUFJFPgotPERMPgotPERUPjxCPkFsbCBJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIj5TZXJpYWxpemFibGU8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGNsYXNzIDxCPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0V4Y2VwdGlvbi5odG1sIj5FeGNlcHRpb248L0E+PC9ETD4KLQotPFA+Ci1UaGUgYmFzZSBleGNlcHRpb24gZm9yIHVuZXhwZWN0ZWQgcHJvY2Vzc2luZyBlcnJvcnMuICBUaGlzIEV4Y2VwdGlvbgotIGNsYXNzIGlzIHVzZWQgdG8gcmVwb3J0IHdlbGwtZm9ybWVkbmVzcyBlcnJvcnMgYXMgd2VsbCBhcyB1bmV4cGVjdGVkCi0gcHJvY2Vzc2luZyBjb25kaXRpb25zLgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlZlcnNpb246PC9CPjwvRFQ+Ci0gIDxERD4wLjY8L0REPgotPERUPjxCPkF1dGhvcjo8L0I+PC9EVD4KLSAgPEREPkNvcHlyaWdodCAoYykgMjAwMyBieSBCRUEgU3lzdGVtcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC48L0REPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vc2VyaWFsaXplZC1mb3JtLmh0bWwiIFRBUkdFVD0iamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb24iPlNlcmlhbGl6ZWQgRm9ybTwvQT48L0RMPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wcm90ZWN0ZWQgJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9Mb2NhdGlvbi5odG1sIj5Mb2NhdGlvbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCNsb2NhdGlvbiI+bG9jYXRpb248L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnByb3RlY3RlZCAmbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sIj5UaHJvd2FibGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwjbmVzdGVkIj5uZXN0ZWQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sI1hNTFN0cmVhbUV4Y2VwdGlvbigpIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtEZWZhdWx0IGNvbnN0cnVjdG9yPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sI1hNTFN0cmVhbUV4Y2VwdGlvbihqYXZhLmxhbmcuU3RyaW5nKSI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO21zZyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdCBhbiBleGNlcHRpb24gd2l0aCB0aGUgYXNzb2NhdGVkIG1lc3NhZ2UuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sI1hNTFN0cmVhbUV4Y2VwdGlvbihqYXZhLmxhbmcuU3RyaW5nLCBqYXZheC54bWwuc3RyZWFtLkxvY2F0aW9uKSI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO21zZywKLSAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL0xvY2F0aW9uLmh0bWwiPkxvY2F0aW9uPC9BPiZuYnNwO2xvY2F0aW9uKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29uc3RydWN0IGFuIGV4Y2VwdGlvbiB3aXRoIHRoZSBhc3NvY2F0ZWQgbWVzc2FnZSwgZXhjZXB0aW9uIGFuZCBsb2NhdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwjWE1MU3RyZWFtRXhjZXB0aW9uKGphdmEubGFuZy5TdHJpbmcsIGphdmF4LnhtbC5zdHJlYW0uTG9jYXRpb24sIGphdmEubGFuZy5UaHJvd2FibGUpIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bXNnLAotICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vTG9jYXRpb24uaHRtbCI+TG9jYXRpb248L0E+Jm5ic3A7bG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCI+VGhyb3dhYmxlPC9BPiZuYnNwO3RoKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29uc3RydWN0IGFuIGV4Y2VwdGlvbiB3aXRoIHRoZSBhc3NvY2F0ZWQgbWVzc2FnZSwgZXhjZXB0aW9uIGFuZCBsb2NhdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwjWE1MU3RyZWFtRXhjZXB0aW9uKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5UaHJvd2FibGUpIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bXNnLAotICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwiPlRocm93YWJsZTwvQT4mbmJzcDt0aCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdCBhbiBleGNlcHRpb24gd2l0aCB0aGUgYXNzb2NhdGVkIG1lc3NhZ2UgYW5kIGV4Y2VwdGlvbjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCNYTUxTdHJlYW1FeGNlcHRpb24oamF2YS5sYW5nLlRocm93YWJsZSkiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwiPlRocm93YWJsZTwvQT4mbmJzcDt0aCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdCBhbiBleGNlcHRpb24gd2l0aCB0aGUgYXNzb2NhdGVkIGV4Y2VwdGlvbjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vTG9jYXRpb24uaHRtbCI+TG9jYXRpb248L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwjZ2V0TG9jYXRpb24oKSI+Z2V0TG9jYXRpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSBsb2NhdGlvbiBvZiB0aGUgZXhjZXB0aW9uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwiPlRocm93YWJsZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCNnZXROZXN0ZWRFeGNlcHRpb24oKSI+Z2V0TmVzdGVkRXhjZXB0aW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7R2V0cyB0aGUgbmVzdGVkIGV4Y2VwdGlvbi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5UaHJvd2FibGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sIj5UaHJvd2FibGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCNmaWxsSW5TdGFja1RyYWNlKCkiPmZpbGxJblN0YWNrVHJhY2U8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sI2dldENhdXNlKCkiPmdldENhdXNlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCNnZXRMb2NhbGl6ZWRNZXNzYWdlKCkiPmdldExvY2FsaXplZE1lc3NhZ2U8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sI2dldE1lc3NhZ2UoKSI+Z2V0TWVzc2FnZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwjZ2V0U3RhY2tUcmFjZSgpIj5nZXRTdGFja1RyYWNlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCNpbml0Q2F1c2UoamF2YS5sYW5nLlRocm93YWJsZSkiPmluaXRDYXVzZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwjcHJpbnRTdGFja1RyYWNlKCkiPnByaW50U3RhY2tUcmFjZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwjcHJpbnRTdGFja1RyYWNlKGphdmEuaW8uUHJpbnRTdHJlYW0pIj5wcmludFN0YWNrVHJhY2U8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sI3ByaW50U3RhY2tUcmFjZShqYXZhLmlvLlByaW50V3JpdGVyKSI+cHJpbnRTdGFja1RyYWNlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCNzZXRTdGFja1RyYWNlKGphdmEubGFuZy5TdGFja1RyYWNlRWxlbWVudFtdKSI+c2V0U3RhY2tUcmFjZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJuZXN0ZWQiPjwhLS0gLS0+PC9BPjxIMz4KLW5lc3RlZDwvSDM+Ci08UFJFPgotcHJvdGVjdGVkIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwiPlRocm93YWJsZTwvQT4gPEI+bmVzdGVkPC9CPjwvUFJFPgotPERMPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImxvY2F0aW9uIj48IS0tIC0tPjwvQT48SDM+Ci1sb2NhdGlvbjwvSDM+Ci08UFJFPgotcHJvdGVjdGVkIDxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vTG9jYXRpb24uaHRtbCI+TG9jYXRpb248L0E+IDxCPmxvY2F0aW9uPC9CPjwvUFJFPgotPERMPgotPERMPgotPC9ETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0iY29uc3RydWN0b3JfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJYTUxTdHJlYW1FeGNlcHRpb24oKSI+PCEtLSAtLT48L0E+PEgzPgotWE1MU3RyZWFtRXhjZXB0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+WE1MU3RyZWFtRXhjZXB0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+RGVmYXVsdCBjb25zdHJ1Y3RvcgotPFA+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJYTUxTdHJlYW1FeGNlcHRpb24oamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLVhNTFN0cmVhbUV4Y2VwdGlvbjwvSDM+Ci08UFJFPgotcHVibGljIDxCPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO21zZyk8L1BSRT4KLTxETD4KLTxERD5Db25zdHJ1Y3QgYW4gZXhjZXB0aW9uIHdpdGggdGhlIGFzc29jYXRlZCBtZXNzYWdlLgotPFA+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm1zZzwvQ09ERT4gLSB0aGUgbWVzc2FnZSB0byByZXBvcnQ8L0RMPgotPEhSPgotCi08QSBOQU1FPSJYTUxTdHJlYW1FeGNlcHRpb24oamF2YS5sYW5nLlRocm93YWJsZSkiPjwhLS0gLS0+PC9BPjxIMz4KLVhNTFN0cmVhbUV4Y2VwdGlvbjwvSDM+Ci08UFJFPgotcHVibGljIDxCPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCI+VGhyb3dhYmxlPC9BPiZuYnNwO3RoKTwvUFJFPgotPERMPgotPEREPkNvbnN0cnVjdCBhbiBleGNlcHRpb24gd2l0aCB0aGUgYXNzb2NhdGVkIGV4Y2VwdGlvbgotPFA+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnRoPC9DT0RFPiAtIGEgbmVzdGVkIGV4Y2VwdGlvbjwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlhNTFN0cmVhbUV4Y2VwdGlvbihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuVGhyb3dhYmxlKSI+PCEtLSAtLT48L0E+PEgzPgotWE1MU3RyZWFtRXhjZXB0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+WE1MU3RyZWFtRXhjZXB0aW9uPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bXNnLAotICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sIj5UaHJvd2FibGU8L0E+Jm5ic3A7dGgpPC9QUkU+Ci08REw+Ci08REQ+Q29uc3RydWN0IGFuIGV4Y2VwdGlvbiB3aXRoIHRoZSBhc3NvY2F0ZWQgbWVzc2FnZSBhbmQgZXhjZXB0aW9uCi08UD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dGg8L0NPREU+IC0gYSBuZXN0ZWQgZXhjZXB0aW9uPEREPjxDT0RFPm1zZzwvQ09ERT4gLSB0aGUgbWVzc2FnZSB0byByZXBvcnQ8L0RMPgotPEhSPgotCi08QSBOQU1FPSJYTUxTdHJlYW1FeGNlcHRpb24oamF2YS5sYW5nLlN0cmluZywgamF2YXgueG1sLnN0cmVhbS5Mb2NhdGlvbiwgamF2YS5sYW5nLlRocm93YWJsZSkiPjwhLS0gLS0+PC9BPjxIMz4KLVhNTFN0cmVhbUV4Y2VwdGlvbjwvSDM+Ci08UFJFPgotcHVibGljIDxCPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO21zZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9Mb2NhdGlvbi5odG1sIj5Mb2NhdGlvbjwvQT4mbmJzcDtsb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCI+VGhyb3dhYmxlPC9BPiZuYnNwO3RoKTwvUFJFPgotPERMPgotPEREPkNvbnN0cnVjdCBhbiBleGNlcHRpb24gd2l0aCB0aGUgYXNzb2NhdGVkIG1lc3NhZ2UsIGV4Y2VwdGlvbiBhbmQgbG9jYXRpb24uCi08UD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dGg8L0NPREU+IC0gYSBuZXN0ZWQgZXhjZXB0aW9uPEREPjxDT0RFPm1zZzwvQ09ERT4gLSB0aGUgbWVzc2FnZSB0byByZXBvcnQ8REQ+PENPREU+bG9jYXRpb248L0NPREU+IC0gdGhlIGxvY2F0aW9uIG9mIHRoZSBlcnJvcjwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlhNTFN0cmVhbUV4Y2VwdGlvbihqYXZhLmxhbmcuU3RyaW5nLCBqYXZheC54bWwuc3RyZWFtLkxvY2F0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotWE1MU3RyZWFtRXhjZXB0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+WE1MU3RyZWFtRXhjZXB0aW9uPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bXNnLAotICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL0xvY2F0aW9uLmh0bWwiPkxvY2F0aW9uPC9BPiZuYnNwO2xvY2F0aW9uKTwvUFJFPgotPERMPgotPEREPkNvbnN0cnVjdCBhbiBleGNlcHRpb24gd2l0aCB0aGUgYXNzb2NhdGVkIG1lc3NhZ2UsIGV4Y2VwdGlvbiBhbmQgbG9jYXRpb24uCi08UD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bXNnPC9DT0RFPiAtIHRoZSBtZXNzYWdlIHRvIHJlcG9ydDxERD48Q09ERT5sb2NhdGlvbjwvQ09ERT4gLSB0aGUgbG9jYXRpb24gb2YgdGhlIGVycm9yPC9ETD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0TmVzdGVkRXhjZXB0aW9uKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE5lc3RlZEV4Y2VwdGlvbjwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwiPlRocm93YWJsZTwvQT4gPEI+Z2V0TmVzdGVkRXhjZXB0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgbmVzdGVkIGV4Y2VwdGlvbi4KLTxQPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5OZXN0ZWQgZXhjZXB0aW9uPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRMb2NhdGlvbigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRMb2NhdGlvbjwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vTG9jYXRpb24uaHRtbCI+TG9jYXRpb248L0E+IDxCPmdldExvY2F0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgbG9jYXRpb24gb2YgdGhlIGV4Y2VwdGlvbgotPFA+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBsb2NhdGlvbiBvZiB0aGUgZXhjZXB0aW9uLCBtYXkgYmUgbnVsbCBpZiBub25lIGlzIGF2YWlsYWJsZTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWIENMQVNTJm5ic3A7Ci0mbmJzcDtORVhUIENMQVNTPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2UvamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWVmZTcyLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTY0NiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ2OjU2IFBEVCAyMDAzIC0tPgotPFRJVExFPgotWE1MU3RyZWFtUmVhZGVyIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcixYTUxTdHJlYW1SZWFkZXIgaW50ZXJmYWNlIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYTUxTdHJlYW1SZWFkZXIgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwO05FWFQgQ0xBU1M8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWE1MU3RyZWFtUmVhZGVyLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1qYXZheC54bWwuc3RyZWFtPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFhNTFN0cmVhbVJlYWRlcjwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sIj5YTUxTdHJlYW1Db25zdGFudHM8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGludGVyZmFjZSA8Qj5YTUxTdHJlYW1SZWFkZXI8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCI+WE1MU3RyZWFtQ29uc3RhbnRzPC9BPjwvREw+Ci0KLTxQPgotVGhlIFhNTFN0cmVhbVJlYWRlciBpbnRlcmZhY2UgYWxsb3dzIGZvcndhcmQsIHJlYWQtb25seSBhY2Nlc3MgdG8gWE1MLgotICBJdCBpcyBkZXNpZ25lZCB0byBiZSB0aGUgbG93ZXN0IGxldmVsIGFuZCBtb3N0IGVmZmljaWVudCB3YXkgdG8KLSAgcmVhZCBYTUwgZGF0YS4KLQotIDxwPiBUaGUgWE1MU3RyZWFtUmVhZGVyIGlzIGRlc2lnbmVkIHRvIGl0ZXJhdGUgb3ZlciBYTUwgdXNpbmcKLSBuZXh0KCkgYW5kIGhhc05leHQoKS4gIFRoZSBkYXRhIGNhbiBiZSBhY2Nlc3NlZCB1c2luZyBtZXRob2RzIHN1Y2ggYXMgZ2V0RXZlbnRUeXBlKCksCi0gZ2V0TmFtZXNwYWNlVVJJKCksIGdldExvY2FsTmFtZSgpIGFuZCBnZXRUZXh0KCk7Ci0KLSA8cD4gPGEgaHJlZj0iI25leHQoKSI+bmV4dCgpPC9hPiBjYXVzZXMgdGhlIHJlYWRlciB0byByZWFkIHRoZSBuZXh0IHBhcnNlIGV2ZW50LgotIG5leHQoKSByZXR1cm5zIGFuIGludGVnZXIgd2hpY2ggaWRlbnRpZmllcyB0aGUgdHlwZSBvZiBldmVudCBqdXN0IHJlYWQKLSA8cD4gVGhlIGV2ZW50IHR5cGUgY2FuIGJlIGRldGVybWluZWQgdXNpbmcgPGEgaHJlZj0iI2dldEV2ZW50VHlwZSgpIj5nZXRFdmVudFR5cGUoKTwvYT4uCi0gPHA+IFBhcnNpbmcgZXZlbnRzIGFyZSBkZWZpbmVkIGFzIHRoZSBYTUwgRGVjbGFyYXRpb24sIGEgRFRELAotIHN0YXJ0IHRhZywgY2hhcmFjdGVyIGRhdGEsIHdoaXRlIHNwYWNlLCBlbmQgdGFnLCBjb21tZW50LAotIG9yIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24KLQotIDxwPkZvciBYTUwgMS4wIGNvbXBsaWFuY2UgYW4gWE1MIHByb2Nlc3NvciBtdXN0IHBhc3MgdGhlCi0gaWRlbnRpZmllcnMgb2YgZGVjbGFyZWQgdW5wYXJzZWQgZW50aXRpZXMgYW5kIHRoZWlyCi0gYXNzb2NpYXRlZCBpZGVudGlmaWVycyB0byB0aGUgYXBwbGljYXRpb24uICBUaGlzIGluZm9ybWF0aW9uIGlzCi0gcHJvdmlkZWQgdGhyb3VnaCB0aGUgcHJvcGVydHkgQVBJIG9uIHRoaXMgaW50ZXJmYWNlLgotIFRoZSBmb2xsb3dpbmcgdHdvIHByb3BlcnRpZXMgYWxsb3cgYWNjZXNzIHRvIHRoaXMgaW5mb3JtYXRpb246Ci0gamF2YXgueG1sLnN0cmVhbS5ub3RhdGlvbnMgYW5kIGphdmF4LnhtbC5zdHJlYW0uZW50aXRpZXMuCi0gV2hlbiB0aGUgY3VycmVudCBldmVudCBpcyBhIERURCB0aGUgZm9sbG93aW5nIGNhbGwgd2lsbCByZXR1cm4gYQotIGxpc3Qgb2YgTm90YXRpb25zCi0gIDxjb2RlPkxpc3QgbCA9IChMaXN0KSBnZXRQcm9wZXJ0eSgiamF2YXgueG1sLnN0cmVhbS5ub3RhdGlvbnMiKTs8L2NvZGU+Ci0gVGhlIGZvbGxvd2luZyBjYWxsIHdpbGwgcmV0dXJuIGEgbGlzdCBvZiBlbnRpdHkgZGVjbGFyYXRpb25zOgotIDxjb2RlPkxpc3QgbCA9IChMaXN0KSBnZXRQcm9wZXJ0eSgiamF2YXgueG1sLnN0cmVhbS5lbnRpdGllcyIpOzwvY29kZT4KLSBUaGVzZSBwcm9wZXJ0aWVzIGNhbiBvbmx5IGJlIGFjY2Vzc2VkIGR1cmluZyBhIERURCBldmVudCBhbmQKLSBhcmUgZGVmaW5lZCB0byByZXR1cm4gbnVsbCBpZiB0aGUgaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZS4KLQotIDxwPlRoZSBmb2xsb3dpbmcgdGFibGUgZGVzY3JpYmVzIHdoaWNoIG1ldGhvZHMgYXJlIHZhbGlkIGluIHdoYXQgc3RhdGUuCi0gSWYgYSBtZXRob2QgaXMgY2FsbGVkIGluIGFuIGludmFsaWQgc3RhdGUgdGhlIG1ldGhvZCB3aWxsIHRocm93IGEKLSBqYXZhLmxhbmcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uLgotCi0gPHRhYmxlIGJvcmRlcj0iMiIgcnVsZXM9ImFsbCIgY2VsbHBhZGRpbmc9IjQiPgotICAgPHRoZWFkPgotICAgICA8dHI+Ci0gICAgICAgPHRoIGFsaWduPSJjZW50ZXIiIGNvbHNwYW49IjIiPgotICAgICAgICAgVmFsaWQgbWV0aG9kcyBmb3IgZWFjaCBzdGF0ZQotICAgICAgIDwvdGg+Ci0gICAgIDwvdHI+Ci0gICA8L3RoZWFkPgotICAgPHRib2R5PgotICAgICA8dHI+Ci0gICAgICAgPHRoPkV2ZW50IFR5cGU8L3RoPgotICAgICAgIDx0aD5WYWxpZCBNZXRob2RzPC90aD4KLSAgICAgPC90cj4KLSAgICAgPHRyPgotICAgICAgIDx0ZD4gQWxsIFN0YXRlcyAgPC90ZD4KLSAgICAgICA8dGQ+IGdldFByb3BlcnR5KCksIGhhc05leHQoKSwgcmVxdWlyZSgpLCBjbG9zZSgpLAotICAgICAgICAgICAgZ2V0TmFtZXNwYWNlVVJJKCksIGlzU3RhcnRFbGVtZW50KCksCi0gICAgICAgICAgICBpc0VuZEVsZW1lbnQoKSwgaXNDaGFyYWN0ZXJzKCksIGlzV2hpdGVTcGFjZSgpLAotICAgICAgICAgICAgZ2V0TmFtZXNwYWNlQ29udGV4dCgpLCBnZXRFdmVudFR5cGUoKSxnZXRMb2NhdGlvbigpLAotICAgICAgICAgICAgaGFzVGV4dCgpCi0gICAgICAgPC90ZD4KLSAgICAgPC90cj4KLSAgICAgPHRyPgotICAgICAgIDx0ZD4gU1RBUlRfRUxFTUVOVCAgPC90ZD4KLSAgICAgICA8dGQ+IG5leHQoKSwgZ2V0TG9jYWxOYW1lKCksIGhhc05hbWUoKSwgZ2V0UHJlZml4KCksCi0gICAgICAgICAgICBnZXROYW1lc3BhY2VVUkkoKSwKLSAgICAgICAgICAgIGdldEF0dHJpYnV0ZVhYWCgpLCBpc0F0dHJpYnV0ZVNwZWNpZmllZCgpLAotICAgICAgICAgICAgZ2V0TmFtZXNwYWNlWFhYKCksCi0gICAgICAgICAgICBnZXRFbGVtZW50VGV4dCgpLCBuZXh0VGFnKCkKLSAgICAgICA8L3RkPgotICAgICA8L3RyPgotICAgICA8dHI+Ci0gICAgICAgPHRkPiBFTkRfRUxFTUVOVCAgPC90ZD4KLSAgICAgICA8dGQ+IG5leHQoKSwgZ2V0TG9jYWxOYW1lKCksIGhhc05hbWUoKSwgZ2V0UHJlZml4KCksCi0gICAgICAgICAgICBnZXROYW1lc3BhY2VVUkkoKSAsIGdldE5hbWVzcGFjZVhYWCgpLCBuZXh0VGFnKCkKLSAgICAgIDwvdGQ+Ci0gICAgIDwvdHI+Ci0gICAgIDx0cj4KLSAgICAgICA8dGQ+IENIQVJBQ1RFUlMgIDwvdGQ+Ci0gICAgICAgPHRkPiBuZXh0KCksIGdldFRleHRYWFgoKSwgbmV4dFRhZygpIDwvdGQ+Ci0gICAgIDwvdHI+Ci0gICAgIDx0cj4KLSAgICAgICA8dGQ+IENEQVRBICA8L3RkPgotICAgICAgIDx0ZD4gbmV4dCgpLCBnZXRUZXh0WFhYKCksIG5leHRUYWcoKSA8L3RkPgotICAgICA8L3RyPgotICAgICA8dHI+Ci0gICAgICAgPHRkPiBDT01NRU5UICA8L3RkPgotICAgICAgIDx0ZD4gbmV4dCgpLCBnZXRUZXh0WFhYKCksIG5leHRUYWcoKSA8L3RkPgotICAgICA8L3RyPgotICAgICA8dHI+Ci0gICAgICAgPHRkPiBTUEFDRSAgPC90ZD4KLSAgICAgICA8dGQ+IG5leHQoKSwgZ2V0VGV4dFhYWCgpLCBuZXh0VGFnKCkgPC90ZD4KLSAgICAgPC90cj4KLSAgICAgPHRyPgotICAgICAgIDx0ZD4gU1RBUlRfRE9DVU1FTlQgIDwvdGQ+Ci0gICAgICAgPHRkPiBuZXh0KCksIGdldEVuY29kaW5nKCksIG5leHQoKSwgZ2V0UHJlZml4KCksIGdldFZlcnNpb24oKSwgaXNTdGFuZGFsb25lKCksIHN0YW5kYWxvbmVTZXQoKSwKLSAgICAgICAgICAgIGdldENoYXJhY3RlckVuY29kaW5nU2NoZW1lKCksIG5leHRUYWcoKTwvdGQ+Ci0gICAgIDwvdHI+Ci0gICAgIDx0cj4KLSAgICAgICA8dGQ+IEVORF9ET0NVTUVOVCAgPC90ZD4KLSAgICAgICA8dGQ+IGNsb3NlKCk8L3RkPgotICAgICA8L3RyPgotICAgICA8dHI+Ci0gICAgICAgPHRkPiBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OICA8L3RkPgotICAgICAgIDx0ZD4gbmV4dCgpLCBnZXRQSVRhcmdldCgpLCBnZXRQSURhdGEoKSwgbmV4dFRhZygpIDwvdGQ+Ci0gICAgIDwvdHI+Ci0gICAgIDx0cj4KLSAgICAgICA8dGQ+IEVOVElUWV9SRUZFUkVOQ0UgIDwvdGQ+Ci0gICAgICAgPHRkPiBuZXh0KCksIGdldExvY2FsTmFtZSgpLCBnZXRUZXh0KCksIG5leHRUYWcoKSA8L3RkPgotICAgICA8L3RyPgotICAgICA8dHI+Ci0gICAgICAgPHRkPiBEVEQgIDwvdGQ+Ci0gICAgICAgPHRkPiBuZXh0KCksIGdldFRleHQoKSwgbmV4dFRhZygpIDwvdGQ+Ci0gICAgIDwvdHI+Ci0gICA8L3Rib2R5PgotICA8L3RhYmxlPgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlZlcnNpb246PC9CPjwvRFQ+Ci0gIDxERD4wLjY8L0REPgotPERUPjxCPkF1dGhvcjo8L0I+PC9EVD4KLSAgPEREPkNvcHlyaWdodCAoYykgMjAwMyBieSBCRUEgU3lzdGVtcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC48L0REPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PENPREU+amF2YXgueG1sLnN0cmVhbS5ldmVudHMuWE1MRXZlbnQ8L0NPREU+LCAKLTxDT0RFPlhNTElucHV0RmFjdG9yeTwvQ09ERT4sIAotPENPREU+WE1MU3RyZWFtV3JpdGVyPC9DT0RFPjwvREw+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtQ29uc3RhbnRzIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+RmllbGRzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwiPlhNTFN0cmVhbUNvbnN0YW50czwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sI0FUVFJJQlVURSI+QVRUUklCVVRFPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCNDREFUQSI+Q0RBVEE8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sI0NIQVJBQ1RFUlMiPkNIQVJBQ1RFUlM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sI0NPTU1FTlQiPkNPTU1FTlQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sI0RURCI+RFREPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCNFTkRfRE9DVU1FTlQiPkVORF9ET0NVTUVOVDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwjRU5EX0VMRU1FTlQiPkVORF9FTEVNRU5UPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCNFTkRfRU5USVRZIj5FTkRfRU5USVRZPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCNFTlRJVFlfREVDTEFSQVRJT04iPkVOVElUWV9ERUNMQVJBVElPTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwjRU5USVRZX1JFRkVSRU5DRSI+RU5USVRZX1JFRkVSRU5DRTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwjTkFNRVNQQUNFIj5OQU1FU1BBQ0U8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sI05PVEFUSU9OX0RFQ0xBUkFUSU9OIj5OT1RBVElPTl9ERUNMQVJBVElPTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwjUFJPQ0VTU0lOR19JTlNUUlVDVElPTiI+UFJPQ0VTU0lOR19JTlNUUlVDVElPTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwjU1BBQ0UiPlNQQUNFPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCNTVEFSVF9ET0NVTUVOVCI+U1RBUlRfRE9DVU1FTlQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sI1NUQVJUX0VMRU1FTlQiPlNUQVJUX0VMRU1FTlQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUNvbnN0YW50cy5odG1sI1NUQVJUX0VOVElUWSI+U1RBUlRfRU5USVRZPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2Nsb3NlKCkiPmNsb3NlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7RnJlZXMgYW55IHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2dldEF0dHJpYnV0ZUNvdW50KCkiPmdldEF0dHJpYnV0ZUNvdW50PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgY291bnQgb2YgYXR0cmlidXRlcyBvbiB0aGlzIFNUQVJUX0VMRU1FTlQsCi0gdGhpcyBtZXRob2QgaXMgb25seSB2YWxpZCBvbiBhIFNUQVJUX0VMRU1FTlQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNnZXRBdHRyaWJ1dGVOYW1lKGludCkiPmdldEF0dHJpYnV0ZU5hbWU8L0E+PC9CPihpbnQmbmJzcDtpbmRleCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGxvY2FsTmFtZSBvZiB0aGUgYXR0cmlidXRlIGF0IHRoZSBwcm92aWRlZAotIGluZGV4PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNnZXRBdHRyaWJ1dGVOYW1lc3BhY2UoaW50KSI+Z2V0QXR0cmlidXRlTmFtZXNwYWNlPC9BPjwvQj4oaW50Jm5ic3A7aW5kZXgpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIGF0dHJpYnV0ZSBhdCB0aGUgcHJvdmlkZWQKLSBpbmRleDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0QXR0cmlidXRlUHJlZml4KGludCkiPmdldEF0dHJpYnV0ZVByZWZpeDwvQT48L0I+KGludCZuYnNwO2luZGV4KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgcHJlZml4IG9mIHRoaXMgYXR0cmlidXRlIGF0IHRoZQotIHByb3ZpZGVkIGluZGV4PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNnZXRBdHRyaWJ1dGVRTmFtZShpbnQpIj5nZXRBdHRyaWJ1dGVRTmFtZTwvQT48L0I+KGludCZuYnNwO2luZGV4KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2dldEF0dHJpYnV0ZVRleHRDaGFyYWN0ZXJzKGludCwgaW50LCBjaGFyW10sIGludCwgaW50KSI+Z2V0QXR0cmlidXRlVGV4dENoYXJhY3RlcnM8L0E+PC9CPihpbnQmbmJzcDtpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO3NvdXJjZVN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcltdJm5ic3A7bXlDaGFyQXJyYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDt0YXJnZXRTdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2xlbmd0aCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0QXR0cmlidXRlVHlwZShpbnQpIj5nZXRBdHRyaWJ1dGVUeXBlPC9BPjwvQj4oaW50Jm5ic3A7aW5kZXgpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBYTUwgdHlwZSBvZiB0aGUgYXR0cmlidXRlIGF0IHRoZSBwcm92aWRlZAotIGluZGV4PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNnZXRBdHRyaWJ1dGVWYWx1ZShpbnQpIj5nZXRBdHRyaWJ1dGVWYWx1ZTwvQT48L0I+KGludCZuYnNwO2luZGV4KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBhdCB0aGUKLSBpbmRleDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0QXR0cmlidXRlVmFsdWUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPmdldEF0dHJpYnV0ZVZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO25hbWVzcGFjZVVSSSwKLSAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtsb2NhbE5hbWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBub3JtYWxpemVkIGF0dHJpYnV0ZSB2YWx1ZSBvZiB0aGUKLSBhdHRyaWJ1dGUgd2l0aCB0aGUgbmFtZXNwYWNlIGFuZCBsb2NhbE5hbWUKLSBJZiB0aGUgbmFtZXNwYWNlVVJJIGlzIG51bGwgdGhlIG5hbWVzcGFjZQotIGlzIG5vdCBjaGVja2VkIGZvciBlcXVhbGl0eTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0Q2hhcmFjdGVyRW5jb2RpbmdTY2hlbWUoKSI+Z2V0Q2hhcmFjdGVyRW5jb2RpbmdTY2hlbWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgZGVjbGFyZWQgb24gdGhlIHhtbCBkZWNsYXJhdGlvbgotIFJldHVybnMgbnVsbCBpZiBub25lIHdhcyBkZWNsYXJlZDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0RWxlbWVudFRleHQoKSI+Z2V0RWxlbWVudFRleHQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZWFkcyB0aGUgY29udGVudCBvZiBhIHRleHQtb25seSBlbGVtZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0RW5jb2RpbmcoKSI+Z2V0RW5jb2Rpbmc8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm4gaW5wdXQgZW5jb2RpbmcgaWYga25vd24gb3IgbnVsbCBpZiB1bmtub3duLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNnZXRFdmVudFR5cGUoKSI+Z2V0RXZlbnRUeXBlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhbiBpbnRlZ2VyIGNvZGUgdGhhdCBpbmRpY2F0ZXMgdGhlIHR5cGUKLSBvZiB0aGUgZXZlbnQgdGhlIGN1cnNvciBpcyBwb2ludGluZyB0by48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2dldExvY2FsTmFtZSgpIj5nZXRMb2NhbE5hbWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSAobG9jYWwpIG5hbWUgb2YgdGhlIGN1cnJlbnQgZXZlbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vTG9jYXRpb24uaHRtbCI+TG9jYXRpb248L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0TG9jYXRpb24oKSI+Z2V0TG9jYXRpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm4gdGhlIGN1cnJlbnQgbG9jYXRpb24gb2YgdGhlIHByb2Nlc3Nvci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2dldE5hbWUoKSI+Z2V0TmFtZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNnZXROYW1lc3BhY2VDb3VudCgpIj5nZXROYW1lc3BhY2VDb3VudDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGNvdW50IG9mIG5hbWVzcGFjZXMgZGVjbGFyZWQgb24gdGhpcyBTVEFSVF9FTEVNRU5UIG9yIEVORF9FTEVNRU5ULAotIHRoaXMgbWV0aG9kIGlzIG9ubHkgdmFsaWQgb24gYSBTVEFSVF9FTEVNRU5UIG9yIEVORF9FTEVNRU5ULjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0TmFtZXNwYWNlUHJlZml4KGludCkiPmdldE5hbWVzcGFjZVByZWZpeDwvQT48L0I+KGludCZuYnNwO2luZGV4KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgcHJlZml4IGZvciB0aGUgbmFtZXNwYWNlIGRlY2xhcmVkIGF0IHRoZQotIGluZGV4LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0TmFtZXNwYWNlVVJJKCkiPmdldE5hbWVzcGFjZVVSSTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0lmIHRoZSBjdXJyZW50IGV2ZW50IGlzIGEgU1RBUlRfRUxFTUVOVCBvciBFTkRfRUxFTUVOVCAgdGhpcyBtZXRob2QKLSByZXR1cm5zIHRoZSBVUkkgb2YgdGhlIHByZWZpeCBvciB0aGUgZGVmYXVsdCBuYW1lc3BhY2UuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNnZXROYW1lc3BhY2VVUkkoaW50KSI+Z2V0TmFtZXNwYWNlVVJJPC9BPjwvQj4oaW50Jm5ic3A7aW5kZXgpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB1cmkgZm9yIHRoZSBuYW1lc3BhY2UgZGVjbGFyZWQgYXQgdGhlCi0gaW5kZXguPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNnZXROYW1lc3BhY2VVUkkoamF2YS5sYW5nLlN0cmluZykiPmdldE5hbWVzcGFjZVVSSTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtwcmVmaXgpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm4gdGhlIHVyaSBmb3IgdGhlIGdpdmVuIHByZWZpeC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2dldFBJRGF0YSgpIj5nZXRQSURhdGE8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXQgdGhlIGRhdGEgc2VjdGlvbiBvZiBhIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb248L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2dldFBJVGFyZ2V0KCkiPmdldFBJVGFyZ2V0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7R2V0IHRoZSB0YXJnZXQgb2YgYSBwcm9jZXNzaW5nIGluc3RydWN0aW9uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNnZXRQcmVmaXgoKSI+Z2V0UHJlZml4PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgcHJlZml4IG9mIHRoZSBjdXJyZW50IGV2ZW50IG9yIG51bGwgaWYgdGhlIGV2ZW50IGRvZXMgbm90IGhhdmUgYSBwcmVmaXg8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2dldFByb3BlcnR5KGphdmEubGFuZy5TdHJpbmcpIj5nZXRQcm9wZXJ0eTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtuYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7R2V0IHRoZSB2YWx1ZSBvZiBhIGZlYXR1cmUvcHJvcGVydHkgZnJvbSB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0VGV4dCgpIj5nZXRUZXh0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcGFyc2UgZXZlbnQgYXMgYSBzdHJpbmcsCi0gdGhpcyByZXR1cm5zIHRoZSBzdHJpbmcgdmFsdWUgb2YgYSBDSEFSQUNURVJTIGV2ZW50LAotIHJldHVybnMgdGhlIHZhbHVlIG9mIGEgQ09NTUVOVCwgdGhlIHJlcGxhY2VtZW50IHZhbHVlCi0gZm9yIGFuIEVOVElUWV9SRUZFUkVOQ0UsCi0gb3IgdGhlIFN0cmluZyB2YWx1ZSBvZiB0aGUgRFREPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2NoYXJbXTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2dldFRleHRDaGFyYWN0ZXJzKCkiPmdldFRleHRDaGFyYWN0ZXJzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhbiBhcnJheSB3aGljaCBjb250YWlucyB0aGUgY2hhcmFjdGVycyBmcm9tIHRoaXMgZXZlbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2dldFRleHRDaGFyYWN0ZXJzKGNoYXJbXSwgaW50LCBpbnQpIj5nZXRUZXh0Q2hhcmFjdGVyczwvQT48L0I+KGNoYXJbXSZuYnNwO215Q2hhckFycmF5LAotICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7dGFyZ2V0U3RhcnQsCi0gICAgICAgICAgICAgICAgICBpbnQmbmJzcDtsZW5ndGgpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0VGV4dExlbmd0aCgpIj5nZXRUZXh0TGVuZ3RoPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHdpdGhpbiBmb3IgdGhpcwotIFRleHQgZXZlbnQgd2l0aGluIHRoZSBUZXh0Q2hhcmFjdGVyQXJyYXkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0VGV4dFJlYWRlcigpIj5nZXRUZXh0UmVhZGVyPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2dldFRleHRTdGFydCgpIj5nZXRUZXh0U3RhcnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBvZmZzZXQgaW50byB0aGUgVGV4dENoYXJhY3RlciBhcnJheSB3aGVyZSB0aGUgZmlyc3QKLSBjaGFyYWN0ZXIgKG9mIHRoaXMgdGV4dCBldmVudCkgaXMgc3RvcmVkLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjZ2V0VmVyc2lvbigpIj5nZXRWZXJzaW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7R2V0IHRoZSB4bWwgdmVyc2lvbiBkZWNsYXJlZCBvbiB0aGUgeG1sIGRlY2xhcmF0aW9uCi0gUmV0dXJucyBudWxsIGlmIG5vbmUgd2FzIGRlY2xhcmVkPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNoYXNOYW1lKCkiPmhhc05hbWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtyZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgZXZlbnQgaGFzIGEgbmFtZSwgU1RBUlRfRUxFTUVOVCwgRU5EX0VMRU1FTlQsCi0gRU5USVRZX1JFRkVSRU5DRSwgYW5kIFBST0NFU1NJTkdfSU5TVFJVQ1RJT04gaGF2ZSBhIG5hbWUKLSByZXR1cm5zIGZhbHNlIG90aGVyd2lzZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjaGFzTmV4dCgpIj5oYXNOZXh0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0cnVlIGlmIHRoZXJlIGFyZSBtb3JlIHBhcnNpbmcgZXZlbnRzIGFuZCBmYWxzZQotIGlmIHRoZXJlIGFyZSBubyBtb3JlIGV2ZW50cy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2hhc1RleHQoKSI+aGFzVGV4dDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybiB0cnVlIGlmIHRoZSBjdXJyZW50IGV2ZW50IGhhcyB0ZXh0LCBmYWxzZSBvdGhlcndpc2UKLSBUaGUgZm9sbG93aW5nIGV2ZW50cyBoYXZlIHRleHQ6Ci0gQ0hBUkFDVEVSUyxEVEQgLEVOVElUWV9SRUZFUkVOQ0UsIENPTU1FTlQ8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2lzQXR0cmlidXRlU3BlY2lmaWVkKGludCkiPmlzQXR0cmlidXRlU3BlY2lmaWVkPC9BPjwvQj4oaW50Jm5ic3A7aW5kZXgpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgYm9vbGVhbiB3aGljaCBpbmRpY2F0ZXMgaWYgdGhpcwotIGF0dHJpYnV0ZSB3YXMgY3JlYXRlZCBieSBkZWZhdWx0PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNpc0NoYXJhY3RlcnMoKSI+aXNDaGFyYWN0ZXJzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0cnVlIGlmIHRoZSBjdXJzb3IgcG9pbnRzIHRvIGEgY2hhcmFjdGVyIGRhdGEgZXZlbnQ8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2lzRW5kRWxlbWVudCgpIj5pc0VuZEVsZW1lbnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnNvciBwb2ludHMgdG8gYW4gZW5kIHRhZyAob3RoZXJ3aXNlIGZhbHNlKTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjaXNTdGFuZGFsb25lKCkiPmlzU3RhbmRhbG9uZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0dldCB0aGUgc3RhbmRhbG9uZSBkZWNsYXJhdGlvbiBmcm9tIHRoZSB4bWwgZGVjbGFyYXRpb248L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI2lzU3RhcnRFbGVtZW50KCkiPmlzU3RhcnRFbGVtZW50PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0cnVlIGlmIHRoZSBjdXJzb3IgcG9pbnRzIHRvIGEgc3RhcnQgdGFnIChvdGhlcndpc2UgZmFsc2UpPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNpc1doaXRlU3BhY2UoKSI+aXNXaGl0ZVNwYWNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0cnVlIGlmIHRoZSBjdXJzb3IgcG9pbnRzIHRvIGEgY2hhcmFjdGVyIGRhdGEgZXZlbnQKLSB0aGF0IGNvbnNpc3RzIG9mIGFsbCB3aGl0ZXNwYWNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI25leHQoKSI+bmV4dDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0dldCBuZXh0IHBhcnNpbmcgZXZlbnQgLSBhIHByb2Nlc3NvciBtYXkgbWF5IHJldHVybiBhbGwgY29udGlndW91cwotIGNoYXJhY3RlciBkYXRhIGluIGEgc2luZ2xlIGNodW5rLCBvciBpdCBtYXkgc3BsaXQgaXQgaW50byBzZXZlcmFsIGNodW5rcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtUmVhZGVyLmh0bWwjbmV4dFRhZygpIj5uZXh0VGFnPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2tpcHMgYW55IGluc2lnbmlmaWNhbnQgZXZlbnRzIHVudGlsIGEgU1RBUlRfRUxFTUVOVCBvcgotIEVORF9FTEVNRU5UIGlzIHJlYWNoZWQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCNyZXF1aXJlKGludCwgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPnJlcXVpcmU8L0E+PC9CPihpbnQmbmJzcDt0eXBlLAotICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bmFtZXNwYWNlVVJJLAotICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bG9jYWxOYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGVzdCBpZiB0aGUgY3VycmVudCBldmVudCBpcyBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgaWYgdGhlIG5hbWVzcGFjZSBhbmQgbmFtZSBkbyBtYXRjaC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sI3N0YW5kYWxvbmVTZXQoKSI+c3RhbmRhbG9uZVNldDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NoZWNrcyBpZiBzdGFuZGFsb25lIHdhcyBzZXQgaW4gdGhlIGRvY3VtZW50PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRQcm9wZXJ0eShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0UHJvcGVydHk8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+IDxCPmdldFByb3BlcnR5PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bmFtZSkKLSAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uaHRtbCI+SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPkdldCB0aGUgdmFsdWUgb2YgYSBmZWF0dXJlL3Byb3BlcnR5IGZyb20gdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bmFtZTwvQ09ERT4gLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHksIG1heSBub3QgYmUgbnVsbAotPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5Ci08RFQ+PEI+VGhyb3dzOjwvQj4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5odG1sIj5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb248L0E+PC9DT0RFPiAtIGlmIG5hbWUgaXMgbnVsbDwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV4dCgpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXh0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPm5leHQ8L0I+KCkKLSAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+R2V0IG5leHQgcGFyc2luZyBldmVudCAtIGEgcHJvY2Vzc29yIG1heSBtYXkgcmV0dXJuIGFsbCBjb250aWd1b3VzCi0gY2hhcmFjdGVyIGRhdGEgaW4gYSBzaW5nbGUgY2h1bmssIG9yIGl0IG1heSBzcGxpdCBpdCBpbnRvIHNldmVyYWwgY2h1bmtzLgotIElmIHRoZSBwcm9wZXJ0eSBqYXZheC54bWwuc3RyZWFtLmlzQ29hbGVzY2luZyBpcyBzZXQgdG8gdHJ1ZQotIGVsZW1lbnQgY29udGVudCBtdXN0IGJlIGNvYWxlc2NlZCBhbmQgb25seSBvbmUgQ0hBUkFDVEVSUyBldmVudAotIG11c3QgYmUgcmV0dXJuZWQgZm9yIGNvbnRpZ3VvdXMgZWxlbWVudCBjb250ZW50IG9yCi0gQ0RBVEEgU2VjdGlvbnMuICAKLQotIEJ5IGRlZmF1bHQgZW50aXR5IHJlZmVyZW5jZXMgbXVzdCBiZSAKLSBleHBhbmRlZCBhbmQgcmVwb3J0ZWQgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb24uCi0gQW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duIGlmIGFuIGVudGl0eSByZWZlcmVuY2UgY2Fubm90IGJlIGV4cGFuZGVkLgotIElmIGVsZW1lbnQgY29udGVudCBpcyBlbXB0eSAoaS5lLiBjb250ZW50IGlzICIiKSB0aGVuIG5vIENIQVJBQ1RFUlMgZXZlbnQgd2lsbCBiZSByZXBvcnRlZC4KLQotIDxwPkdpdmVuIHRoZSBmb2xsb3dpbmcgWE1MOjxicj4KLSAmbHQ7Zm9vPiZsdDshLS1kZXNjcmlwdGlvbi0tPmNvbnRlbnQgdGV4dCZsdDshW0NEQVRBWyZsdDtncmVldGluZz5IZWxsbyZsdDsvZ3JlZXRpbmc+XV0+b3RoZXIgY29udGVudCZsdDsvZm9vPjxicj4KLSBUaGUgYmVoYXZpb3Igb2YgY2FsbGluZyBuZXh0KCkgd2hlbiBiZWluZyBvbiBmb28gd2lsbCBiZTo8YnI+Ci0gMS0gdGhlIGNvbW1lbnQgKENPTU1FTlQpPGJyPgotIDItIHRoZW4gdGhlIGNoYXJhY3RlcnMgc2VjdGlvbiAoQ0hBUkFDVEVSUyk8YnI+Ci0gMy0gdGhlbiB0aGUgQ0RBVEEgc2VjdGlvbiAoYW5vdGhlciBDSEFSQUNURVJTKTxicj4KLSA0LSB0aGVuIHRoZSBuZXh0IGNoYXJhY3RlcnMgc2VjdGlvbiAoYW5vdGhlciBDSEFSQUNURVJTKTxicj4KLSA1LSB0aGVuIHRoZSBFTkRfRUxFTUVOVDxicj4KLQotIDxwPjxiPk5PVEU6PC9iPiBlbXB0eSBlbGVtZW50IChzdWNoIGFzICZsdDt0YWcvPikgd2lsbCBiZSByZXBvcnRlZAotICB3aXRoICB0d28gc2VwYXJhdGUgZXZlbnRzOiBTVEFSVF9FTEVNRU5ULCBFTkRfRUxFTUVOVCAtIFRoaXMgcHJlc2VydmVzCi0gICBwYXJzaW5nIGVxdWl2YWxlbmN5IG9mIGVtcHR5IGVsZW1lbnQgdG8gJmx0O3RhZz4mbHQ7L3RhZz4uCi0KLSBUaGlzIG1ldGhvZCB3aWxsIHRocm93IGFuIFhNTFN0cmVhbUV4Y2VwdGlvbiBpZiBpdCBpcyBjYWxsZWQgYWZ0ZXIgaGFzTmV4dCgpIHJldHVybnMgZmFsc2UuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIGludGVnZXIgY29kZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBjdXJyZW50IHBhcnNlIGV2ZW50Ci08RFQ+PEI+VGhyb3dzOjwvQj4KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPiAtIGlmIHRoaXMgaXMgY2FsbGVkIHdoZW4gaGFzTmV4dCgpIHJldHVybnMgZmFsc2U8RFQ+PEI+U2VlIEFsc286PC9CPjxERD48Q09ERT5qYXZheC54bWwuc3RyZWFtLmV2ZW50cy5YTUxFdmVudDwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InJlcXVpcmUoaW50LCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotcmVxdWlyZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+cmVxdWlyZTwvQj4oaW50Jm5ic3A7dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO25hbWVzcGFjZVVSSSwKLSAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO2xvY2FsTmFtZSkKLSAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlRlc3QgaWYgdGhlIGN1cnJlbnQgZXZlbnQgaXMgb2YgdGhlIGdpdmVuIHR5cGUgYW5kIGlmIHRoZSBuYW1lc3BhY2UgYW5kIG5hbWUgZG8gbWF0Y2guCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnR5cGU8L0NPREU+IC0gdGhlIGV2ZW50IHR5cGU8REQ+PENPREU+bmFtZXNwYWNlVVJJPC9DT0RFPiAtIHRoZSB1cmkgb2YgdGhlIGV2ZW50LCBtYXkgYmUgbnVsbDxERD48Q09ERT5sb2NhbE5hbWU8L0NPREU+IC0gdGhlIGxvY2FsTmFtZSBvZiB0aGUgZXZlbnQsIG1heSBub3QgYmUgbnVsbAotPERUPjxCPlRocm93czo8L0I+Ci08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBpZiB0aGUgcmVxdWlyZWQgdmFsdWVzIGFyZSBub3QgbWF0Y2hlZC48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEVsZW1lbnRUZXh0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEVsZW1lbnRUZXh0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5nZXRFbGVtZW50VGV4dDwvQj4oKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmVhZHMgdGhlIGNvbnRlbnQgb2YgYSB0ZXh0LW9ubHkgZWxlbWVudC4gUHJlY29uZGl0aW9uOgotIHRoZSBjdXJyZW50IGV2ZW50IGlzIFNUQVJUX0VMRU1FTlQuIFBvc3Rjb25kaXRpb246Ci0gVGhlIGN1cnJlbnQgZXZlbnQgaXMgdGhlIGNvcnJlc3BvbmRpbmcgRU5EX0VMRU1FTlQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5UaHJvd3M6PC9CPgotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+IC0gaWYgdGhlIGN1cnJlbnQgZXZlbnQgaXMgbm90IGEgU1RBUlRfRUxFTUVOVDwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV4dFRhZygpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXh0VGFnPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPm5leHRUYWc8L0I+KCkKLSAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+U2tpcHMgYW55IGluc2lnbmlmaWNhbnQgZXZlbnRzIHVudGlsIGEgU1RBUlRfRUxFTUVOVCBvcgotIEVORF9FTEVNRU5UIGlzIHJlYWNoZWQuIElmIG90aGVyIHRoYW4gc3BhY2UgY2hhcmFjdGVycyBhcmUKLSBlbmNvdW50ZXJlZCwgYW4gZXhjZXB0aW9uIGlzIHRocm93bi4gVGhpcyBtZXRob2Qgc2hvdWxkCi0gYmUgdXNlZCB3aGVuIHByb2Nlc3NpbmcgZWxlbWVudC1vbmx5IGNvbnRlbnQgYmVjYXVzZQotIHRoZSBwYXJzZXIgaXMgbm90IGFibGUgdG8gcmVjb2duaXplIGlnbm9yYWJsZSB3aGl0ZXNwYWNlIGlmCi0gdGhlbiBEVEQgaXMgbWlzc2luZyBvciBub3QgaW50ZXJwcmV0ZWQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5UaHJvd3M6PC9CPgotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+IC0gaWYgdGhlIGN1cnJlbnQgZXZlbnQgaXMgbm90IHdoaXRlIHNwYWNlPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJoYXNOZXh0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWhhc05leHQ8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmhhc05leHQ8L0I+KCkKLSAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgdHJ1ZSBpZiB0aGVyZSBhcmUgbW9yZSBwYXJzaW5nIGV2ZW50cyBhbmQgZmFsc2UKLSBpZiB0aGVyZSBhcmUgbm8gbW9yZSBldmVudHMuICBUaGlzIG1ldGhvZCB3aWxsIHJldHVybgotIGZhbHNlIGlmIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBYTUxTdHJlYW1SZWFkZXIgaXMKLSBFTkRfRE9DVU1FTlQKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50cnVlIGlmIHRoZXJlIGFyZSBtb3JlIGV2ZW50cywgZmFsc2Ugb3RoZXJ3aXNlCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNsb3NlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNsb3NlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5jbG9zZTwvQj4oKQotICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPkZyZWVzIGFueSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgUmVhZGVyLiAgVGhpcyBtZXRob2QgZG9lcyBub3QgY2xvc2UgdGhlCi0gdW5kZXJseWluZyBpbnB1dCBzb3VyY2UuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TmFtZXNwYWNlVVJJKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXROYW1lc3BhY2VVUkk8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPmdldE5hbWVzcGFjZVVSSTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3ByZWZpeCkKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm4gdGhlIHVyaSBmb3IgdGhlIGdpdmVuIHByZWZpeC4KLSBUaGUgdXJpIHJldHVybmVkIGRlcGVuZHMgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHBhcnNlcgotCi0gPHA+VGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgcHJlZml4IGlzIG5vdCBib3VuZC4KLQotIDxwPjxzdHJvbmc+Tk9URTo8L3N0cm9uZz5UaGUgJ3htbCcgcHJlZml4IGlzIGJvdW5kIGFzIGRlZmluZWQgaW4KLSA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sLW5hbWVzLyNucy11c2luZyI+TmFtZXNwYWNlcyBpbiBYTUw8L2E+Ci0gc3BlY2lmaWNhdGlvbiB0byAiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIi4KLQotIDxwPjxzdHJvbmc+Tk9URTo8L3N0cm9uZz4gVGhlICd4bWxucycgcHJlZml4IG11c3QgYmUgcmVzb2x2ZWQgdG8gZm9sbG93aW5nIG5hbWVzcGFjZQotIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIj5odHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLzwvYT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+cHJlZml4PC9DT0RFPiAtIFRoZSBwcmVmaXggdG8gbG9va3VwLCBtYXkgbm90IGJlIG51bGwKLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHVyaSBib3VuZCB0byB0aGUgZ2l2ZW4gcHJlZml4IG9yIG51bGwgaWYgaXQgaXMgbm90IGJvdW5kCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzU3RhcnRFbGVtZW50KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzU3RhcnRFbGVtZW50PC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5pc1N0YXJ0RWxlbWVudDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdHJ1ZSBpZiB0aGUgY3Vyc29yIHBvaW50cyB0byBhIHN0YXJ0IHRhZyAob3RoZXJ3aXNlIGZhbHNlKQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRydWUgaWYgdGhlIGN1cnNvciBwb2ludHMgdG8gYSBzdGFydCB0YWcsIGZhbHNlIG90aGVyd2lzZTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNFbmRFbGVtZW50KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzRW5kRWxlbWVudDwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNFbmRFbGVtZW50PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0cnVlIGlmIHRoZSBjdXJzb3IgcG9pbnRzIHRvIGFuIGVuZCB0YWcgKG90aGVyd2lzZSBmYWxzZSkKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50cnVlIGlmIHRoZSBjdXJzb3IgcG9pbnRzIHRvIGFuIGVuZCB0YWcsIGZhbHNlIG90aGVyd2lzZTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNDaGFyYWN0ZXJzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzQ2hhcmFjdGVyczwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNDaGFyYWN0ZXJzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0cnVlIGlmIHRoZSBjdXJzb3IgcG9pbnRzIHRvIGEgY2hhcmFjdGVyIGRhdGEgZXZlbnQKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50cnVlIGlmIHRoZSBjdXJzb3IgcG9pbnRzIHRvIGNoYXJhY3RlciBkYXRhLCBmYWxzZSBvdGhlcndpc2U8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzV2hpdGVTcGFjZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc1doaXRlU3BhY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzV2hpdGVTcGFjZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdHJ1ZSBpZiB0aGUgY3Vyc29yIHBvaW50cyB0byBhIGNoYXJhY3RlciBkYXRhIGV2ZW50Ci0gdGhhdCBjb25zaXN0cyBvZiBhbGwgd2hpdGVzcGFjZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRydWUgaWYgdGhlIGN1cnNvciBwb2ludHMgdG8gYWxsIHdoaXRlc3BhY2UsIGZhbHNlIG90aGVyd2lzZTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0QXR0cmlidXRlVmFsdWUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEF0dHJpYnV0ZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5nZXRBdHRyaWJ1dGVWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO25hbWVzcGFjZVVSSSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO2xvY2FsTmFtZSk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBub3JtYWxpemVkIGF0dHJpYnV0ZSB2YWx1ZSBvZiB0aGUKLSBhdHRyaWJ1dGUgd2l0aCB0aGUgbmFtZXNwYWNlIGFuZCBsb2NhbE5hbWUKLSBJZiB0aGUgbmFtZXNwYWNlVVJJIGlzIG51bGwgdGhlIG5hbWVzcGFjZQotIGlzIG5vdCBjaGVja2VkIGZvciBlcXVhbGl0eQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5uYW1lc3BhY2VVUkk8L0NPREU+IC0gdGhlIG5hbWVzcGFjZSBvZiB0aGUgYXR0cmlidXRlLCBjYW4gYmUgbnVsbDxERD48Q09ERT5sb2NhbE5hbWU8L0NPREU+IC0gdGhlIGxvY2FsIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSwgY2Fubm90IGJlIG51bGwKLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+cmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSAsIHJldHVybnMgbnVsbCBpZiBub3QgZm91bmQKLTxEVD48Qj5UaHJvd3M6PC9CPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvSWxsZWdhbFN0YXRlRXhjZXB0aW9uLmh0bWwiPklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjwvQT48L0NPREU+IC0gaWYgdGhpcyBpcyBub3QgYSBTVEFSVF9FTEVNRU5UPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRBdHRyaWJ1dGVDb3VudCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRBdHRyaWJ1dGVDb3VudDwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5nZXRBdHRyaWJ1dGVDb3VudDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGNvdW50IG9mIGF0dHJpYnV0ZXMgb24gdGhpcyBTVEFSVF9FTEVNRU5ULAotIHRoaXMgbWV0aG9kIGlzIG9ubHkgdmFsaWQgb24gYSBTVEFSVF9FTEVNRU5ULiAgVGhpcwotIGNvdW50IGV4Y2x1ZGVzIG5hbWVzcGFjZSBkZWZpbml0aW9ucy4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5yZXR1cm5zIHRoZSBudW1iZXIgb2YgYXR0cmlidXRlcwotPERUPjxCPlRocm93czo8L0I+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9JbGxlZ2FsU3RhdGVFeGNlcHRpb24uaHRtbCI+SWxsZWdhbFN0YXRlRXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBpZiB0aGlzIGlzIG5vdCBhIFNUQVJUX0VMRU1FTlQ8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEF0dHJpYnV0ZU5hbWVzcGFjZShpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRBdHRyaWJ1dGVOYW1lc3BhY2U8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPmdldEF0dHJpYnV0ZU5hbWVzcGFjZTwvQj4oaW50Jm5ic3A7aW5kZXgpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbmFtZXNwYWNlIG9mIHRoZSBhdHRyaWJ1dGUgYXQgdGhlIHByb3ZpZGVkCi0gaW5kZXgKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+aW5kZXg8L0NPREU+IC0gdGhlIHBvc2l0aW9uIG9mIHRoZSBhdHRyaWJ1dGUKLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIG5hbWVzcGFjZSBVUkkgKGNhbiBiZSBudWxsKQotPERUPjxCPlRocm93czo8L0I+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9JbGxlZ2FsU3RhdGVFeGNlcHRpb24uaHRtbCI+SWxsZWdhbFN0YXRlRXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBpZiB0aGlzIGlzIG5vdCBhIFNUQVJUX0VMRU1FTlQ8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEF0dHJpYnV0ZU5hbWUoaW50KSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0QXR0cmlidXRlTmFtZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+Z2V0QXR0cmlidXRlTmFtZTwvQj4oaW50Jm5ic3A7aW5kZXgpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbG9jYWxOYW1lIG9mIHRoZSBhdHRyaWJ1dGUgYXQgdGhlIHByb3ZpZGVkCi0gaW5kZXgKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+aW5kZXg8L0NPREU+IC0gdGhlIHBvc2l0aW9uIG9mIHRoZSBhdHRyaWJ1dGUKLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIGxvY2FsTmFtZSBvZiB0aGUgYXR0cmlidXRlCi08RFQ+PEI+VGhyb3dzOjwvQj4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbi5odG1sIj5JbGxlZ2FsU3RhdGVFeGNlcHRpb248L0E+PC9DT0RFPiAtIGlmIHRoaXMgaXMgbm90IGEgU1RBUlRfRUxFTUVOVDwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0QXR0cmlidXRlUU5hbWUoaW50KSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0QXR0cmlidXRlUU5hbWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+IDxCPmdldEF0dHJpYnV0ZVFOYW1lPC9CPihpbnQmbmJzcDtpbmRleCk8L1BSRT4KLTxETD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEF0dHJpYnV0ZVRleHRDaGFyYWN0ZXJzKGludCwgaW50LCBjaGFyW10sIGludCwgaW50KSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0QXR0cmlidXRlVGV4dENoYXJhY3RlcnM8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+Z2V0QXR0cmlidXRlVGV4dENoYXJhY3RlcnM8L0I+KGludCZuYnNwO2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtzb3VyY2VTdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcltdJm5ic3A7bXlDaGFyQXJyYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO3RhcmdldFN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtsZW5ndGgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0QXR0cmlidXRlUHJlZml4KGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEF0dHJpYnV0ZVByZWZpeDwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+Z2V0QXR0cmlidXRlUHJlZml4PC9CPihpbnQmbmJzcDtpbmRleCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBwcmVmaXggb2YgdGhpcyBhdHRyaWJ1dGUgYXQgdGhlCi0gcHJvdmlkZWQgaW5kZXgKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+aW5kZXg8L0NPREU+IC0gdGhlIHBvc2l0aW9uIG9mIHRoZSBhdHRyaWJ1dGUKLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHByZWZpeCBvZiB0aGUgYXR0cmlidXRlCi08RFQ+PEI+VGhyb3dzOjwvQj4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbi5odG1sIj5JbGxlZ2FsU3RhdGVFeGNlcHRpb248L0E+PC9DT0RFPiAtIGlmIHRoaXMgaXMgbm90IGEgU1RBUlRfRUxFTUVOVDwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0QXR0cmlidXRlVHlwZShpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRBdHRyaWJ1dGVUeXBlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5nZXRBdHRyaWJ1dGVUeXBlPC9CPihpbnQmbmJzcDtpbmRleCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBYTUwgdHlwZSBvZiB0aGUgYXR0cmlidXRlIGF0IHRoZSBwcm92aWRlZAotIGluZGV4Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmluZGV4PC9DT0RFPiAtIHRoZSBwb3NpdGlvbiBvZiB0aGUgYXR0cmlidXRlCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBYTUwgdHlwZSBvZiB0aGUgYXR0cmlidXRlCi08RFQ+PEI+VGhyb3dzOjwvQj4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbi5odG1sIj5JbGxlZ2FsU3RhdGVFeGNlcHRpb248L0E+PC9DT0RFPiAtIGlmIHRoaXMgaXMgbm90IGEgU1RBUlRfRUxFTUVOVDwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0QXR0cmlidXRlVmFsdWUoaW50KSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0QXR0cmlidXRlVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPmdldEF0dHJpYnV0ZVZhbHVlPC9CPihpbnQmbmJzcDtpbmRleCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIGF0IHRoZQotIGluZGV4Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmluZGV4PC9DT0RFPiAtIHRoZSBwb3NpdGlvbiBvZiB0aGUgYXR0cmlidXRlCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBhdHRyaWJ1dGUgdmFsdWUKLTxEVD48Qj5UaHJvd3M6PC9CPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvSWxsZWdhbFN0YXRlRXhjZXB0aW9uLmh0bWwiPklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjwvQT48L0NPREU+IC0gaWYgdGhpcyBpcyBub3QgYSBTVEFSVF9FTEVNRU5UPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc0F0dHJpYnV0ZVNwZWNpZmllZChpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1pc0F0dHJpYnV0ZVNwZWNpZmllZDwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNBdHRyaWJ1dGVTcGVjaWZpZWQ8L0I+KGludCZuYnNwO2luZGV4KTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBib29sZWFuIHdoaWNoIGluZGljYXRlcyBpZiB0aGlzCi0gYXR0cmlidXRlIHdhcyBjcmVhdGVkIGJ5IGRlZmF1bHQKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+aW5kZXg8L0NPREU+IC0gdGhlIHBvc2l0aW9uIG9mIHRoZSBhdHRyaWJ1dGUKLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dHJ1ZSBpZiB0aGlzIGlzIGEgZGVmYXVsdCBhdHRyaWJ1dGUKLTxEVD48Qj5UaHJvd3M6PC9CPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvSWxsZWdhbFN0YXRlRXhjZXB0aW9uLmh0bWwiPklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjwvQT48L0NPREU+IC0gaWYgdGhpcyBpcyBub3QgYSBTVEFSVF9FTEVNRU5UPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXROYW1lc3BhY2VDb3VudCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXROYW1lc3BhY2VDb3VudDwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5nZXROYW1lc3BhY2VDb3VudDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGNvdW50IG9mIG5hbWVzcGFjZXMgZGVjbGFyZWQgb24gdGhpcyBTVEFSVF9FTEVNRU5UIG9yIEVORF9FTEVNRU5ULAotIHRoaXMgbWV0aG9kIGlzIG9ubHkgdmFsaWQgb24gYSBTVEFSVF9FTEVNRU5UIG9yIEVORF9FTEVNRU5ULiBPbgotIGFuIEVORF9FTEVNRU5UIHRoZSBjb3VudCBpcyBvZiB0aGUgbmFtZXNwYWNlcyB0aGF0IGFyZSBhYm91dCB0byBnbwotIG91dCBvZiBzY29wZS4gIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIGluZm9ybWF0aW9uIHJlcG9ydGVkCi0gYnkgU0FYIGNhbGxiYWNrIGZvciBhbiBlbmQgZWxlbWVudCBldmVudC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5yZXR1cm5zIHRoZSBudW1iZXIgb2YgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucyBvbiB0aGlzIHNwZWNpZmljIGVsZW1lbnQKLTxEVD48Qj5UaHJvd3M6PC9CPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvSWxsZWdhbFN0YXRlRXhjZXB0aW9uLmh0bWwiPklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjwvQT48L0NPREU+IC0gaWYgdGhpcyBpcyBub3QgYSBTVEFSVF9FTEVNRU5UIG9yIEVORF9FTEVNRU5UPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXROYW1lc3BhY2VQcmVmaXgoaW50KSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TmFtZXNwYWNlUHJlZml4PC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5nZXROYW1lc3BhY2VQcmVmaXg8L0I+KGludCZuYnNwO2luZGV4KTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHByZWZpeCBmb3IgdGhlIG5hbWVzcGFjZSBkZWNsYXJlZCBhdCB0aGUKLSBpbmRleC4gIFJldHVybnMgbnVsbCBpZiB0aGlzIGlzIHRoZSBkZWZhdWx0IG5hbWVzcGFjZQotIGRlY2xhcmF0aW9uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmluZGV4PC9DT0RFPiAtIHRoZSBwb3NpdGlvbiBvZiB0aGUgbmFtZXNwYWNlIGRlY2xhcmF0aW9uCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnJldHVybnMgdGhlIG5hbWVzcGFjZSBwcmVmaXgKLTxEVD48Qj5UaHJvd3M6PC9CPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvSWxsZWdhbFN0YXRlRXhjZXB0aW9uLmh0bWwiPklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjwvQT48L0NPREU+IC0gaWYgdGhpcyBpcyBub3QgYSBTVEFSVF9FTEVNRU5UIG9yIEVORF9FTEVNRU5UPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXROYW1lc3BhY2VVUkkoaW50KSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TmFtZXNwYWNlVVJJPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5nZXROYW1lc3BhY2VVUkk8L0I+KGludCZuYnNwO2luZGV4KTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHVyaSBmb3IgdGhlIG5hbWVzcGFjZSBkZWNsYXJlZCBhdCB0aGUKLSBpbmRleC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+aW5kZXg8L0NPREU+IC0gdGhlIHBvc2l0aW9uIG9mIHRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb24KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+cmV0dXJucyB0aGUgbmFtZXNwYWNlIHVyaQotPERUPjxCPlRocm93czo8L0I+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9JbGxlZ2FsU3RhdGVFeGNlcHRpb24uaHRtbCI+SWxsZWdhbFN0YXRlRXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBpZiB0aGlzIGlzIG5vdCBhIFNUQVJUX0VMRU1FTlQgb3IgRU5EX0VMRU1FTlQ8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEV2ZW50VHlwZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRFdmVudFR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+Z2V0RXZlbnRUeXBlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhbiBpbnRlZ2VyIGNvZGUgdGhhdCBpbmRpY2F0ZXMgdGhlIHR5cGUKLSBvZiB0aGUgZXZlbnQgdGhlIGN1cnNvciBpcyBwb2ludGluZyB0by4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0VGV4dCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRUZXh0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5nZXRUZXh0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgcGFyc2UgZXZlbnQgYXMgYSBzdHJpbmcsCi0gdGhpcyByZXR1cm5zIHRoZSBzdHJpbmcgdmFsdWUgb2YgYSBDSEFSQUNURVJTIGV2ZW50LAotIHJldHVybnMgdGhlIHZhbHVlIG9mIGEgQ09NTUVOVCwgdGhlIHJlcGxhY2VtZW50IHZhbHVlCi0gZm9yIGFuIEVOVElUWV9SRUZFUkVOQ0UsCi0gb3IgdGhlIFN0cmluZyB2YWx1ZSBvZiB0aGUgRFRECi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIGN1cnJlbnQgdGV4dCBvciBudWxsCi08RFQ+PEI+VGhyb3dzOjwvQj4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbi5odG1sIj5JbGxlZ2FsU3RhdGVFeGNlcHRpb248L0E+PC9DT0RFPiAtIGlmIHRoaXMgc3RhdGV4IGlzIG5vdAotIGEgdmFsaWQgdGV4dCBzdGF0ZS48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFRleHRDaGFyYWN0ZXJzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFRleHRDaGFyYWN0ZXJzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgY2hhcltdIDxCPmdldFRleHRDaGFyYWN0ZXJzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhbiBhcnJheSB3aGljaCBjb250YWlucyB0aGUgY2hhcmFjdGVycyBmcm9tIHRoaXMgZXZlbnQuCi0gVGhpcyBhcnJheSBzaG91bGQgYmUgdHJlYXRlZCBhcyByZWFkLW9ubHkgYW5kIHRyYW5zaWVudC4gSS5lLiB0aGUgYXJyYXkgd2lsbAotIGNvbnRhaW4gdGhlIHRleHQgY2hhcmFjdGVycyB1bnRpbCB0aGUgWE1MU3RyZWFtUmVhZGVyIG1vdmVzIG9uIHRvIHRoZSBuZXh0IGV2ZW50LgotIEF0dGVtcHRzIHRvIGhvbGQgb250byB0aGUgY2hhcmFjdGVyIGFycmF5IGJleW9uZCB0aGF0IHRpbWUgb3IgbW9kaWZ5IHRoZQotIGNvbnRlbnRzIG9mIHRoZSBhcnJheSBhcmUgYnJlYWNoZXMgb2YgdGhlIGNvbnRyYWN0IGZvciB0aGlzIGludGVyZmFjZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgY3VycmVudCB0ZXh0IG9yIG51bGwKLTxEVD48Qj5UaHJvd3M6PC9CPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvSWxsZWdhbFN0YXRlRXhjZXB0aW9uLmh0bWwiPklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjwvQT48L0NPREU+IC0gaWYgdGhpcyBzdGF0ZSBpcyBub3QKLSBhIHZhbGlkIHRleHQgc3RhdGUuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRUZXh0U3RhcnQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0VGV4dFN0YXJ0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldFRleHRTdGFydDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG9mZnNldCBpbnRvIHRoZSBUZXh0Q2hhcmFjdGVyIGFycmF5IHdoZXJlIHRoZSBmaXJzdAotIGNoYXJhY3RlciAob2YgdGhpcyB0ZXh0IGV2ZW50KSBpcyBzdG9yZWQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5UaHJvd3M6PC9CPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvSWxsZWdhbFN0YXRlRXhjZXB0aW9uLmh0bWwiPklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjwvQT48L0NPREU+IC0gaWYgdGhpcyBzdGF0ZSBpcyBub3QKLSBhIHZhbGlkIHRleHQgc3RhdGUuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRUZXh0TGVuZ3RoKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFRleHRMZW5ndGg8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+Z2V0VGV4dExlbmd0aDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB3aXRoaW4gZm9yIHRoaXMKLSBUZXh0IGV2ZW50IHdpdGhpbiB0aGUgVGV4dENoYXJhY3RlckFycmF5LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+VGhyb3dzOjwvQj4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbi5odG1sIj5JbGxlZ2FsU3RhdGVFeGNlcHRpb248L0E+PC9DT0RFPiAtIGlmIHRoaXMgc3RhdGUgaXMgbm90Ci0gYSB2YWxpZCB0ZXh0IHN0YXRlLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0VGV4dENoYXJhY3RlcnMoY2hhcltdLCBpbnQsIGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFRleHRDaGFyYWN0ZXJzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldFRleHRDaGFyYWN0ZXJzPC9CPihjaGFyW10mbmJzcDtteUNoYXJBcnJheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7dGFyZ2V0U3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2xlbmd0aCkKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRUZXh0UmVhZGVyKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFRleHRSZWFkZXI8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiA8Qj5nZXRUZXh0UmVhZGVyPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRFbmNvZGluZygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRFbmNvZGluZzwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+Z2V0RW5jb2Rpbmc8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm4gaW5wdXQgZW5jb2RpbmcgaWYga25vd24gb3IgbnVsbCBpZiB1bmtub3duLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBlbmNvZGluZyBvZiB0aGlzIGluc3RhbmNlIG9yIG51bGw8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Imhhc1RleHQoKSI+PCEtLSAtLT48L0E+PEgzPgotaGFzVGV4dDwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aGFzVGV4dDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybiB0cnVlIGlmIHRoZSBjdXJyZW50IGV2ZW50IGhhcyB0ZXh0LCBmYWxzZSBvdGhlcndpc2UKLSBUaGUgZm9sbG93aW5nIGV2ZW50cyBoYXZlIHRleHQ6Ci0gQ0hBUkFDVEVSUyxEVEQgLEVOVElUWV9SRUZFUkVOQ0UsIENPTU1FTlQKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TG9jYXRpb24oKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TG9jYXRpb248L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL0xvY2F0aW9uLmh0bWwiPkxvY2F0aW9uPC9BPiA8Qj5nZXRMb2NhdGlvbjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybiB0aGUgY3VycmVudCBsb2NhdGlvbiBvZiB0aGUgcHJvY2Vzc29yLgotIElmIHRoZSBMb2NhdGlvbiBpcyB1bmtub3duIHRoZSBwcm9jZXNzb3Igc2hvdWxkIHJldHVybgotIGFuIGltcGxlbWVudGF0aW9uIG9mIExvY2F0aW9uIHRoYXQgcmV0dXJucyAtMSBmb3IgdGhlCi0gbG9jYXRpb24gYW5kIG51bGwgZm9yIHRoZSBwdWJsaWNJZCBhbmQgc3lzdGVtSWQKLSBUaGUgbG9jYXRpb24gaW5mb3JtYXRpb24gaXMgb25seSB2YWxpZCB1bnRpbCBuZXh0KCkgaXMKLSBjYWxsZWQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE5hbWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TmFtZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4gPEI+Z2V0TmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TG9jYWxOYW1lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldExvY2FsTmFtZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+Z2V0TG9jYWxOYW1lPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgKGxvY2FsKSBuYW1lIG9mIHRoZSBjdXJyZW50IGV2ZW50LgotIEZvciBTVEFSVF9FTEVNRU5UIG9yIEVORF9FTEVNRU5UIHJldHVybnMgdGhlIChsb2NhbCkgbmFtZSBvZiB0aGUgY3VycmVudCBlbGVtZW50LgotIEZvciBFTlRJVFlfUkVGRVJFTkNFIGl0IHJldHVybnMgZW50aXR5IG5hbWUuCi0gRm9yIFBST0NFU1NJTkdfSU5TVFJVQ1RJT04gaXQgcmV0dXJucyB0aGUgdGFyZ2V0LgotIFRoZSBjdXJyZW50IGV2ZW50IG11c3QgYmUgU1RBUlRfRUxFTUVOVCBvciBFTkRfRUxFTUVOVCwgCi0gUFJPQ0VTU0lOR19JTlNUUlVDVElPTiwgb3IgRU5USVRZX1JFRkVSRU5DRSwgb3RoZXJ3aXNlIG51bGwgaXMgcmV0dXJuZWQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIGxvY2FsTmFtZSBvciBudWxsIGlmIG5vbmUgaXMgYXZhaWxhYmxlPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJoYXNOYW1lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWhhc05hbWU8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmhhc05hbWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5yZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgZXZlbnQgaGFzIGEgbmFtZSwgU1RBUlRfRUxFTUVOVCwgRU5EX0VMRU1FTlQsCi0gRU5USVRZX1JFRkVSRU5DRSwgYW5kIFBST0NFU1NJTkdfSU5TVFJVQ1RJT04gaGF2ZSBhIG5hbWUKLSByZXR1cm5zIGZhbHNlIG90aGVyd2lzZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXROYW1lc3BhY2VVUkkoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TmFtZXNwYWNlVVJJPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5nZXROYW1lc3BhY2VVUkk8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5JZiB0aGUgY3VycmVudCBldmVudCBpcyBhIFNUQVJUX0VMRU1FTlQgb3IgRU5EX0VMRU1FTlQgIHRoaXMgbWV0aG9kCi0gcmV0dXJucyB0aGUgVVJJIG9mIHRoZSBwcmVmaXggb3IgdGhlIGRlZmF1bHQgbmFtZXNwYWNlLgotIFJldHVybnMgbnVsbCBpZiB0aGUgZXZlbnQgZG9lcyBub3QgaGF2ZSBhIHByZWZpeC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgVVJJIGJvdW5kIHRvIHRoaXMgZWxlbWVudHMgcHJlZml4LCB0aGUgZGVmYXVsdCBuYW1lc3BhY2UsIG9yIG51bGw8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFByZWZpeCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRQcmVmaXg8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPmdldFByZWZpeDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHByZWZpeCBvZiB0aGUgY3VycmVudCBldmVudCBvciBudWxsIGlmIHRoZSBldmVudCBkb2VzIG5vdCBoYXZlIGEgcHJlZml4Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHByZWZpeCBvciBudWxsPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRWZXJzaW9uKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFZlcnNpb248L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPmdldFZlcnNpb248L0I+KCk8L1BSRT4KLTxETD4KLTxERD5HZXQgdGhlIHhtbCB2ZXJzaW9uIGRlY2xhcmVkIG9uIHRoZSB4bWwgZGVjbGFyYXRpb24KLSBSZXR1cm5zIG51bGwgaWYgbm9uZSB3YXMgZGVjbGFyZWQKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgWE1MIHZlcnNpb24gb3IgbnVsbDwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNTdGFuZGFsb25lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzU3RhbmRhbG9uZTwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNTdGFuZGFsb25lPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0IHRoZSBzdGFuZGFsb25lIGRlY2xhcmF0aW9uIGZyb20gdGhlIHhtbCBkZWNsYXJhdGlvbgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRydWUgaWYgdGhpcyBpcyBzdGFuZGFsb25lLCBvciBmYWxzZSBvdGhlcndpc2U8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InN0YW5kYWxvbmVTZXQoKSI+PCEtLSAtLT48L0E+PEgzPgotc3RhbmRhbG9uZVNldDwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+c3RhbmRhbG9uZVNldDwvQj4oKTwvUFJFPgotPERMPgotPEREPkNoZWNrcyBpZiBzdGFuZGFsb25lIHdhcyBzZXQgaW4gdGhlIGRvY3VtZW50Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dHJ1ZSBpZiBzdGFuZGFsb25lIHdhcyBzZXQgaW4gdGhlIGRvY3VtZW50LCBvciBmYWxzZSBvdGhlcndpc2U8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldENoYXJhY3RlckVuY29kaW5nU2NoZW1lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldENoYXJhY3RlckVuY29kaW5nU2NoZW1lPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5nZXRDaGFyYWN0ZXJFbmNvZGluZ1NjaGVtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGNoYXJhY3RlciBlbmNvZGluZyBkZWNsYXJlZCBvbiB0aGUgeG1sIGRlY2xhcmF0aW9uCi0gUmV0dXJucyBudWxsIGlmIG5vbmUgd2FzIGRlY2xhcmVkCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIGVuY29kaW5nIGRlY2xhcmVkIGluIHRoZSBkb2N1bWVudCBvciBudWxsPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRQSVRhcmdldCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRQSVRhcmdldDwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+Z2V0UElUYXJnZXQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5HZXQgdGhlIHRhcmdldCBvZiBhIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdGFyZ2V0IG9yIG51bGw8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFBJRGF0YSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRQSURhdGE8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPmdldFBJRGF0YTwvQj4oKTwvUFJFPgotPERMPgotPEREPkdldCB0aGUgZGF0YSBzZWN0aW9uIG9mIGEgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBkYXRhIG9yIG51bGw8L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDtORVhUIENMQVNTPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhNTFN0cmVhbVJlYWRlci5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2UvamF2YXgveG1sL3N0cmVhbS9wYWNrYWdlLWZyYW1lLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2UvamF2YXgveG1sL3N0cmVhbS9wYWNrYWdlLWZyYW1lLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5MzhmYjIuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL2phdmF4L3htbC9zdHJlYW0vcGFja2FnZS1mcmFtZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NiBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLWphdmF4LnhtbC5zdHJlYW0gKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9ImphdmF4LnhtbC5zdHJlYW0gcGFja2FnZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iamF2YXgueG1sLnN0cmVhbSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotPEZPTlQgc2l6ZT0iKzEiIENMQVNTPSJGcmFtZVRpdGxlRm9udCI+Ci08QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL3BhY2thZ2Utc3VtbWFyeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPmphdmF4LnhtbC5zdHJlYW08L0E+PC9GT05UPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiPgotPFRSPgotPFREIE5PV1JBUD48Rk9OVCBzaXplPSIrMSIgQ0xBU1M9IkZyYW1lSGVhZGluZ0ZvbnQiPgotSW50ZXJmYWNlczwvRk9OVD4mbmJzcDsKLTxGT05UIENMQVNTPSJGcmFtZUl0ZW1Gb250Ij4KLTxCUj4KLTxBIEhSRUY9IkxvY2F0aW9uLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+TG9jYXRpb248L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WE1MU3RyZWFtQ29uc3RhbnRzPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlhNTFN0cmVhbVJlYWRlci5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhNTFN0cmVhbVJlYWRlcjwvST48L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotCi08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSI+Ci08VFI+Ci08VEQgTk9XUkFQPjxGT05UIHNpemU9IisxIiBDTEFTUz0iRnJhbWVIZWFkaW5nRm9udCI+Ci1FeGNlcHRpb25zPC9GT05UPiZuYnNwOwotPEZPTlQgQ0xBU1M9IkZyYW1lSXRlbUZvbnQiPgotPEJSPgotPEEgSFJFRj0iWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL2phdmF4L3htbC9zdHJlYW0vcGFja2FnZS1zdW1tYXJ5Lmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2UvamF2YXgveG1sL3N0cmVhbS9wYWNrYWdlLXN1bW1hcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFkMWE0Ni4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2UvamF2YXgveG1sL3N0cmVhbS9wYWNrYWdlLXN1bW1hcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ2OjU2IFBEVCAyMDAzIC0tPgotPFRJVExFPgotamF2YXgueG1sLnN0cmVhbSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0iamF2YXgueG1sLnN0cmVhbSBwYWNrYWdlIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJqYXZheC54bWwuc3RyZWFtIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5QYWNrYWdlPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViBQQUNLQUdFJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Qj5ORVhUIFBBQ0tBR0U8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08SDI+Ci1QYWNrYWdlIGphdmF4LnhtbC5zdHJlYW0KLTwvSDI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkludGVyZmFjZSBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IkxvY2F0aW9uLmh0bWwiPjxJPkxvY2F0aW9uPC9JPjwvQT48L0I+PC9URD4KLTxURD5Qcm92aWRlcyBpbmZvcm1hdGlvbiBvbiB0aGUgbG9jYXRpb24gb2YgYW4gZXZlbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYTUxTdHJlYW1Db25zdGFudHMuaHRtbCI+PEk+WE1MU3RyZWFtQ29uc3RhbnRzPC9JPjwvQT48L0I+PC9URD4KLTxURD5UaGlzIGludGVyZmFjZSBkZWNsYXJlcyB0aGUgY29uc3RhbnRzIHVzZWQgaW4gdGhpcyBBUEkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYTUxTdHJlYW1SZWFkZXIuaHRtbCI+PEk+WE1MU3RyZWFtUmVhZGVyPC9JPjwvQT48L0I+PC9URD4KLTxURD5UaGUgWE1MU3RyZWFtUmVhZGVyIGludGVyZmFjZSBhbGxvd3MgZm9yd2FyZCwgcmVhZC1vbmx5IGFjY2VzcyB0byBYTUwuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci0KLTxQPgotCi08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5FeGNlcHRpb24gU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQj48L1REPgotPFREPlRoZSBiYXNlIGV4Y2VwdGlvbiBmb3IgdW5leHBlY3RlZCBwcm9jZXNzaW5nIGVycm9ycy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLQotPFA+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5QYWNrYWdlPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViBQQUNLQUdFJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL3BhY2thZ2Utc3VtbWFyeS5odG1sIj48Qj5ORVhUIFBBQ0tBR0U8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9qYXZheC94bWwvc3RyZWFtL3BhY2thZ2UtdHJlZS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL2phdmF4L3htbC9zdHJlYW0vcGFja2FnZS10cmVlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllNmE5ZDIuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL2phdmF4L3htbC9zdHJlYW0vcGFja2FnZS10cmVlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NiBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLWphdmF4LnhtbC5zdHJlYW0gQ2xhc3MgSGllcmFyY2h5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJqYXZheC54bWwuc3RyZWFtIENsYXNzIEhpZXJhcmNoeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5UcmVlPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvcGFja2FnZS10cmVlLmh0bWwiPjxCPk5FWFQ8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08Q0VOVEVSPgotPEgyPgotSGllcmFyY2h5IEZvciBQYWNrYWdlIGphdmF4LnhtbC5zdHJlYW0KLTwvSDI+Ci08L0NFTlRFUj4KLTxETD4KLTxEVD48Qj5QYWNrYWdlIEhpZXJhcmNoaWVzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctdHJlZS5odG1sIj5BbGwgUGFja2FnZXM8L0E+PC9ETD4KLTxIUj4KLTxIMj4KLUNsYXNzIEhpZXJhcmNoeQotPC9IMj4KLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj48Qj5PYmplY3Q8L0I+PC9BPjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sIj48Qj5UaHJvd2FibGU8L0I+PC9BPiAoaW1wbGVtZW50cyBqYXZhLmlvLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIj5TZXJpYWxpemFibGU8L0E+KQotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+Y2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvRXhjZXB0aW9uLmh0bWwiPjxCPkV4Y2VwdGlvbjwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+Y2xhc3MgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj48Qj5YTUxTdHJlYW1FeGNlcHRpb248L0I+PC9BPjwvVUw+Ci08L1VMPgotPC9VTD4KLTwvVUw+Ci08SDI+Ci1JbnRlcmZhY2UgSGllcmFyY2h5Ci08L0gyPgotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9Mb2NhdGlvbi5odG1sIj48Qj5Mb2NhdGlvbjwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iLi4vLi4vLi4vamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1Db25zdGFudHMuaHRtbCI+PEI+WE1MU3RyZWFtQ29uc3RhbnRzPC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbVJlYWRlci5odG1sIj48Qj5YTUxTdHJlYW1SZWFkZXI8L0I+PC9BPjwvVUw+Ci08L1VMPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5UcmVlPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvcGFja2FnZS10cmVlLmh0bWwiPjxCPk5FWFQ8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0MmIzYmQuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNjI0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTggUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1GaWx0ZXJYbWxPYmplY3QgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuRmlsdGVyWG1sT2JqZWN0LEZpbHRlclhtbE9iamVjdCBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iRmlsdGVyWG1sT2JqZWN0IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViBDTEFTUyZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iRmlsdGVyWG1sT2JqZWN0Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgRmlsdGVyWG1sT2JqZWN0PC9IMj4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5qYXZhLmxhbmcuT2JqZWN0PC9BPgotICB8Ci0gICstLTxCPm9yZy5hcGFjaGUueG1sYmVhbnMuRmlsdGVyWG1sT2JqZWN0PC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+QWxsIEltcGxlbWVudGVkIEludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGFic3RyYWN0IGNsYXNzIDxCPkZpbHRlclhtbE9iamVjdDwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PERUPmltcGxlbWVudHMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0RMPgotCi08UD4KLUEgRmlsdGVyWG1sT2JqZWN0IGRlbGVnYXRlcyB0byBzb21lIG90aGVyIFhtbE9iamVjdCwgd2hpY2ggaXQgY2FuIHVzZSBhcwotIGl0cyBiYXNpYyBzb3VyY2Ugb2YgZGF0YSwgcG9zc2libHkgdHJhbnNmb3JtaW5nIHRoZSBkYXRhIGFsb25nIHRoZSB3YXkgb3IKLSBwcm92aWRpbmcgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5LiBUaGUgY2xhc3MgRmlsdGVyWG1sT2JqZWN0IGl0c2VsZgotIHNpbXBseSBvdmVycmlkZXMgYWxsIG1ldGhvZHMgb2YgWG1sT2JqZWN0IHdpdGggdmVyc2lvbnMgdGhhdCBwYXNzIGFsbAotIHJlcXVlc3RzIHRvIHRoZSB1bmRlcmx5aW5nIFhtbE9iamVjdC4gU3ViY2xhc3NlcyBvZiBGaWx0ZXJYbWxPYmplY3QgbWF5Ci0gZnVydGhlciBvdmVycmlkZSBzb21lIG9mIHRoZXNlIG1ldGhvZHMgYW5kIG1heSBhbHNvIHByb3ZpZGUgYWRkaXRpb25hbAotIG1ldGhvZHMgYW5kIGZpZWxkcy4KLSA8cD4KLSBOb3RlOiBpdCBpcyBpbXBvcnRhbnQgdGhhdCBGaWx0ZXJYbWxPQmplY3QgaGFzIG5vIHN0b3JhZ2UgKGkuZS4sIG5vCi0gbm9uLXRyYW5zaWVudCBmaWVsZHMpLCBiZWNhdXNlIHN1YmNsYXNzZXMgbWF5IGJlIHNlcmlhbGl6YWJsZSBhbmQKLSBhZGRpbmcgc3RvcmFnZSB3b3VsZCBicmVhayB0aGUgc2VyaWFsaXphdGlvbiBmb3JtYXQuCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibmVzdGVkX2NsYXNzX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TmVzdGVkIENsYXNzIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIj5YbWxPYmplY3QuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+RmllbGRzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0VRVUFMIj5FUVVBTDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjR1JFQVRFUl9USEFOIj5HUkVBVEVSX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0xFU1NfVEhBTiI+TEVTU19USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNOT1RfRVFVQUwiPk5PVF9FUVVBTDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdHlwZSI+dHlwZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI0ZpbHRlclhtbE9iamVjdCgpIj5GaWx0ZXJYbWxPYmplY3Q8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNiaWdEZWNpbWFsVmFsdWUoKSI+YmlnRGVjaW1hbFZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+PENPREU+QmlnRGVjaW1hbDwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCI+QmlnSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNiaWdJbnRlZ2VyVmFsdWUoKSI+YmlnSW50ZWdlclZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCI+PENPREU+QmlnSW50ZWdlcjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjYm9vbGVhblZhbHVlKCkiPmJvb2xlYW5WYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIGFzIGEgYm9vbGVhbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ynl0ZVtdPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjYnl0ZUFycmF5VmFsdWUoKSI+Ynl0ZUFycmF5VmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIGJ5dGUgYXJyYXkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2J5dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNieXRlVmFsdWUoKSI+Ynl0ZVZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgYXMgYSBieXRlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2NhbGVuZGFyVmFsdWUoKSI+Y2FsZW5kYXJWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjY2hhbmdlVHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj5jaGFuZ2VUeXBlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Jm5ic3A7bmV3VHlwZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NoYW5nZXMgdGhlIHNjaGVtYSB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRhdGEgYW5kCi0gcmV0dXJucyBhIG5ldyBYbWxPYmplY3QgaW5zdGFuY2Ugd2hvc2Ugc2NoZW1hVHlwZSBpcyB0aGUKLSBuZXcgdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVRvKGphdmEubGFuZy5PYmplY3QpIj5jb21wYXJlVG88L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW1wZWxlbWVudHMgdGhlIENvbXBhcmFibGUgaW50ZXJmYWNlIGJ5IGNvbXBhcmluZyB0d28gc2ltcGxlCi0geG1sIHZhbHVlcyBiYXNlZCBvbiB0aGVpciBzdGFuZGFyZCBYTUwgc2NoZW1hIG9yZGVyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNjb21wYXJlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5jb21wYXJlVmFsdWU8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhpcyBjb21wYXJpc29uIG1ldGhvZCBpcyBzaW1pbGFyIHRvIGNvbXBhcmVUbywgYnV0IHJhdGhlcgotIHRoYW4gdGhyb3dpbmcgYSBDbGFzc0Nhc3RFeGNlcHRpb24gd2hlbiB0d28gdmFsdWVzIGFyZSBpbmNvbXBhcmFibGUsCi0gaXQgcmV0dXJucyB0aGUgbnVtYmVyIDIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNjb3B5KCkiPmNvcHk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgZGVlcCBjb3B5IG9mIHRoaXMgWG1sT2JqZWN0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+RGF0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNkYXRlVmFsdWUoKSI+ZGF0ZVZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+PENPREU+RGF0ZTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5odG1sIj5YbWxEb2N1bWVudFByb3BlcnRpZXM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjZG9jdW1lbnRQcm9wZXJ0aWVzKCkiPmRvY3VtZW50UHJvcGVydGllczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIFhtbERvY3VtZW50UHJvcGVydGllcyBvYmplY3QgZm9yIHRoZSBkb2N1bWVudCB0aGlzIHRva2VuCi0gc291cmNlIGlzIGFzc29jaWF0ZWQgd2l0aC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7ZG91YmxlPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjZG91YmxlVmFsdWUoKSI+ZG91YmxlVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIGRvdWJsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLmh0bWwiPlN0cmluZ0VudW1BYnN0cmFjdEJhc2U8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjZW51bVZhbHVlKCkiPmVudW1WYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLmh0bWwiPjxDT0RFPlN0cmluZ0VudW1BYnN0cmFjdEJhc2U8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPltdPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcpIj5leGVjUXVlcnk8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cXVlcnkpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtFeGVjdXRlcyBhIHF1ZXJ5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+W108L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+ZXhlY1F1ZXJ5PC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3F1ZXJ5LAotICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtFeGVjdXRlcyBhIHF1ZXJ5IHdpdGggb3B0aW9ucy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7ZmxvYXQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNmbG9hdFZhbHVlKCkiPmZsb2F0VmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIGZsb2F0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2dEYXRlVmFsdWUoKSI+Z0RhdGVWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjZ0R1cmF0aW9uVmFsdWUoKSI+Z0R1cmF0aW9uVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwiPjxDT0RFPkdEdXJhdGlvbjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNnZXRCaWdEZWNpbWFsVmFsdWUoKSI+Z2V0QmlnRGVjaW1hbFZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+PENPREU+QmlnRGVjaW1hbDwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCI+QmlnSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNnZXRCaWdJbnRlZ2VyVmFsdWUoKSI+Z2V0QmlnSW50ZWdlclZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCI+PENPREU+QmlnSW50ZWdlcjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjZ2V0Qm9vbGVhblZhbHVlKCkiPmdldEJvb2xlYW5WYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIGFzIGEgYm9vbGVhbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ynl0ZVtdPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjZ2V0Qnl0ZUFycmF5VmFsdWUoKSI+Z2V0Qnl0ZUFycmF5VmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIGJ5dGUgYXJyYXkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2J5dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNnZXRCeXRlVmFsdWUoKSI+Z2V0Qnl0ZVZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgYXMgYSBieXRlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2dldENhbGVuZGFyVmFsdWUoKSI+Z2V0Q2FsZW5kYXJWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+RGF0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNnZXREYXRlVmFsdWUoKSI+Z2V0RGF0ZVZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+PENPREU+RGF0ZTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtkb3VibGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNnZXREb3VibGVWYWx1ZSgpIj5nZXREb3VibGVWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIGFzIGEgZG91YmxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuaHRtbCI+U3RyaW5nRW51bUFic3RyYWN0QmFzZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNnZXRFbnVtVmFsdWUoKSI+Z2V0RW51bVZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuaHRtbCI+PENPREU+U3RyaW5nRW51bUFic3RyYWN0QmFzZTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtmbG9hdDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2dldEZsb2F0VmFsdWUoKSI+Z2V0RmxvYXRWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIGFzIGEgZmxvYXQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjZ2V0R0RhdGVWYWx1ZSgpIj5nZXRHRGF0ZVZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwiPkdEdXJhdGlvbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNnZXRHRHVyYXRpb25WYWx1ZSgpIj5nZXRHRHVyYXRpb25WYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCI+PENPREU+R0R1cmF0aW9uPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2dldEludFZhbHVlKCkiPmdldEludFZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgYXMgYW4gaW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNnZXRMaXN0VmFsdWUoKSI+Z2V0TGlzdFZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+IG9mIGZyaWVuZGx5IEphdmEgb2JqZWN0cyAoU3RyaW5nLCBJbnRlZ2VyLCBCeXRlLCBTaG9ydCwgTG9uZywgQmlnSW50ZWdlciwgRGVjaW1hbCwgRmxvYXQsIERvdWJsZSwgYnl0ZVtdLCBDYWxlbmRhciwgR0R1cmF0aW9uKS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7bG9uZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2dldExvbmdWYWx1ZSgpIj5nZXRMb25nVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIGxvbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNnZXRPYmplY3RWYWx1ZSgpIj5nZXRPYmplY3RWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB1bmlvbiB2YWx1ZSBhcyBhIGl0cyBuYXR1cmFsIGZyaWVuZGx5IEphdmEgb2JqZWN0IChTdHJpbmcsIEludGVnZXIsIEJ5dGUsIFNob3J0LCBMb25nLCBCaWdJbnRlZ2VyLCBEZWNpbWFsLCBGbG9hdCwgRG91YmxlLCBieXRlW10sIENhbGVuZGFyLCBHRHVyYXRpb24pLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjZ2V0UU5hbWVWYWx1ZSgpIj5nZXRRTmFtZVZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+PENPREU+UU5hbWU8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7c2hvcnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNnZXRTaG9ydFZhbHVlKCkiPmdldFNob3J0VmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIHNob3J0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjZ2V0U3RyaW5nVmFsdWUoKSI+Z2V0U3RyaW5nVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPjxDT0RFPlN0cmluZzwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNpbnN0YW5jZVR5cGUoKSI+aW5zdGFuY2VUeXBlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIHNhbWUgYXMgZ2V0U2NoZW1hVHlwZSB1bmxlc3MgdGhpcyBpcyBhIHVuaW9uIGluc3RhbmNlCi0gb3IgbmlsIHZhbHVlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNpbnRWYWx1ZSgpIj5pbnRWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIGFzIGFuIGludC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2lzSW1tdXRhYmxlKCkiPmlzSW1tdXRhYmxlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYW4gaW1tdXRhYmxlIHZhbHVlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjaXNOaWwoKSI+aXNOaWw8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoZSB2YWx1ZSBpcyBuaWwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI2xpc3RWYWx1ZSgpIj5saXN0VmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj48Q09ERT5MaXN0PC9DT0RFPjwvQT4gb2YgZnJpZW5kbHkgSmF2YSBvYmplY3RzIChTdHJpbmcsIEludGVnZXIsIEJ5dGUsIFNob3J0LCBMb25nLCBCaWdJbnRlZ2VyLCBEZWNpbWFsLCBGbG9hdCwgRG91YmxlLCBieXRlW10sIENhbGVuZGFyLCBHRHVyYXRpb24pLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtsb25nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjbG9uZ1ZhbHVlKCkiPmxvbmdWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIGFzIGEgbG9uZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI21vbml0b3IoKSI+bW9uaXRvcjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHN5bmNocm9uaXphdGlvbiBvYmplY3QgZm9yIHRoZSBkb2N1bWVudC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI25ld0N1cnNvcigpIj5uZXdDdXJzb3I8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IFhNTCBjdXJzb3IuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjbmV3RG9tTm9kZSgpIj5uZXdEb21Ob2RlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIFczQyBET00gTm9kZSBjb250YWluaW5nIHRoZSBYTUwKLSByZXByZXNlbnRlZCBieSB0aGlzIHNvdXJjZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNuZXdEb21Ob2RlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0RvbU5vZGU8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SnVzdCBsaWtlIG5ld0RvbU5vZGUoKSBidXQgd2l0aCBvcHRpb25zLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNuZXdJbnB1dFN0cmVhbSgpIj5uZXdJbnB1dFN0cmVhbTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgc3RyZWFtIGNvbnRhaW5pbmcgc3RhbmRhcmQgWE1MIHRleHQsIGVuY29kZWQKLSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGVuY29kaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNuZXdJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtKdXN0IGxpa2UgbmV3SW5wdXRTdHJlYW0oU3RyaW5nIGVuY29kaW5nKSBidXQgd2l0aCBvcHRpb25zLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI25ld1JlYWRlcigpIj5uZXdSZWFkZXI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IGNoYXJhY3RlciByZWFkZXIgY29udGFpbmluZyBYTUwgdGV4dC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNuZXdSZWFkZXIob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3UmVhZGVyPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0p1c3QgbGlrZSBuZXdSZWFkZXIoKSBidXQgd2l0aCBvcHRpb25zLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI25ld1hNTElucHV0U3RyZWFtKCkiPm5ld1hNTElucHV0U3RyZWFtPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBYbWxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNuZXdYTUxJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtKdXN0IGxpa2UgbmV3WE1MSW5wdXRTdHJlYW0oKSBidXQgd2l0aCBhbnkgb2YgYSBudW1iZXIgb2Ygb3B0aW9ucy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI29iamVjdFNldChqYXZhLmxhbmcuT2JqZWN0KSI+b2JqZWN0U2V0PC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIGFzIGFuIGFyYml0cmFyeSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj48Q09ERT5PYmplY3Q8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI29iamVjdFZhbHVlKCkiPm9iamVjdFZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHVuaW9uIHZhbHVlIGFzIGEgaXRzIG5hdHVyYWwgZnJpZW5kbHkgSmF2YSBvYmplY3QgKFN0cmluZywgSW50ZWdlciwgQnl0ZSwgU2hvcnQsIExvbmcsIEJpZ0ludGVnZXIsIERlY2ltYWwsIEZsb2F0LCBEb3VibGUsIGJ5dGVbXSwgQ2FsZW5kYXIsIEdEdXJhdGlvbikuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNxTmFtZVZhbHVlKCkiPnFOYW1lVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj48Q09ERT5RTmFtZTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyKSI+c2F2ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcveG1sL3NheC9Db250ZW50SGFuZGxlci5odG1sIj5Db250ZW50SGFuZGxlcjwvQT4mbmJzcDtjaCwKLSAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy94bWwvc2F4L2V4dC9MZXhpY2FsSGFuZGxlci5odG1sIj5MZXhpY2FsSGFuZGxlcjwvQT4mbmJzcDtsaCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1dyaXRlcyB0aGUgWE1MIHJlcHJlc2VudGVkIGJ5IHRoaXMgc291cmNlIHRvIHRoZSBnaXZlbiBTQVggY29udGVudCBhbmQKLSBsZXhpY2FsIGhhbmRsZXJzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy94bWwvc2F4L0NvbnRlbnRIYW5kbGVyLmh0bWwiPkNvbnRlbnRIYW5kbGVyPC9BPiZuYnNwO2NoLAotICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3htbC9zYXgvZXh0L0xleGljYWxIYW5kbGVyLmh0bWwiPkxleGljYWxIYW5kbGVyPC9BPiZuYnNwO2xoLAotICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7V3JpdGVzIHRoZSBYTUwgcmVwcmVzZW50ZWQgYnkgdGhpcyBzb3VyY2UgdG8gdGhlIGdpdmVuIFNBWCBjb250ZW50IGFuZAotIGxleGljYWwgaGFuZGxlcnMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSkiPnNhdmU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZmlsZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1dyaXRlcyB0aGUgWE1MIHJlcHJlc2VudGVkIGJ5IHRoaXMgc291cmNlIHRvIHRoZSBnaXZlbiBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZmlsZSwKLSAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1dyaXRlcyB0aGUgWE1MIHJlcHJlc2VudGVkIGJ5IHRoaXMgc291cmNlIHRvIHRoZSBnaXZlbiBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSkiPnNhdmU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9PdXRwdXRTdHJlYW0uaHRtbCI+T3V0cHV0U3RyZWFtPC9BPiZuYnNwO29zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7V3JpdGVzIHRoZSBYTUwgcmVwcmVzZW50ZWQgYnkgdGhpcyBzb3VyY2UgdG8gdGhlIGdpdmVuIG91dHB1dCBzdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vT3V0cHV0U3RyZWFtLmh0bWwiPk91dHB1dFN0cmVhbTwvQT4mbmJzcDtvcywKLSAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1dyaXRlcyB0aGUgWE1MIHJlcHJlc2VudGVkIGJ5IHRoaXMgc291cmNlIHRvIHRoZSBnaXZlbiBvdXRwdXQgc3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlcikiPnNhdmU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9Xcml0ZXIuaHRtbCI+V3JpdGVyPC9BPiZuYnNwO3cpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtXcml0ZXMgdGhlIFhNTCByZXByZXNlbnRlZCBieSB0aGlzIHNvdXJjZSB0byB0aGUgZ2l2ZW4gd3JpdGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1dyaXRlci5odG1sIj5Xcml0ZXI8L0E+Jm5ic3A7dywKLSAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1dyaXRlcyB0aGUgWE1MIHJlcHJlc2VudGVkIGJ5IHRoaXMgc291cmNlIHRvIHRoZSBnaXZlbiB3cml0ZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NjaGVtYVR5cGUoKSI+c2NoZW1hVHlwZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBzY2hlbWEgdHlwZSBmb3IgdGhpcyBpbnN0YW5jZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPltdPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+c2VsZWN0UGF0aDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtwYXRoKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2VsZWN0cyBhIHBhdGguPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT5bXTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2VsZWN0UGF0aDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtwYXRoLAotICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2VsZWN0cyBhIHBhdGgsIGFwcGx5aW5nIG9wdGlvbnMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXQoamF2YS5tYXRoLkJpZ0RlY2ltYWwpIj5zZXQ8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj48Q09ERT5CaWdEZWNpbWFsPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NldChqYXZhLm1hdGguQmlnSW50ZWdlcikiPnNldDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIj5CaWdJbnRlZ2VyPC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPjxDT0RFPkJpZ0ludGVnZXI8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NldChib29sZWFuKSI+c2V0PC9BPjwvQj4oYm9vbGVhbiZuYnNwO3YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBhcyBhIGJvb2xlYW4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXQoYnl0ZSkiPnNldDwvQT48L0I+KGJ5dGUmbmJzcDt2KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgYXMgYSBieXRlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0KGJ5dGVbXSkiPnNldDwvQT48L0I+KGJ5dGVbXSZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIGFzIGEgYnl0ZSBhcnJheS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NldChqYXZhLnV0aWwuQ2FsZW5kYXIpIj5zZXQ8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0KGphdmEudXRpbC5EYXRlKSI+c2V0PC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPkRhdGU8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+PENPREU+RGF0ZTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0KGRvdWJsZSkiPnNldDwvQT48L0I+KGRvdWJsZSZuYnNwO3YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBhcyBhIGRvdWJsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NldChmbG9hdCkiPnNldDwvQT48L0I+KGZsb2F0Jm5ic3A7dik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIGFzIGEgZmxvYXQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj5zZXQ8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb25TcGVjaWZpY2F0aW9uKSI+c2V0PC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj48Q09ERT5HRHVyYXRpb248L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NldChpbnQpIj5zZXQ8L0E+PC9CPihpbnQmbmJzcDt2KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgYXMgYW4gaW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0KGphdmEudXRpbC5MaXN0KSI+c2V0PC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0KGxvbmcpIj5zZXQ8L0E+PC9CPihsb25nJm5ic3A7dik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIGFzIGEgbG9uZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NldChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+c2V0PC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPjxDT0RFPlFOYW1lPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXQoc2hvcnQpIj5zZXQ8L0E+PC9CPihzaG9ydCZuYnNwO3YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBhcyBhIHNob3J0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0KGphdmEubGFuZy5TdHJpbmcpIj5zZXQ8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj48Q09ERT5TdHJpbmc8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLlN0cmluZ0VudW1BYnN0cmFjdEJhc2UpIj5zZXQ8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuaHRtbCI+U3RyaW5nRW51bUFic3RyYWN0QmFzZTwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sIj48Q09ERT5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5zZXQ8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+Jm5ic3A7c3JjT2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0IHRoZSB2YWx1ZS90eXBlIG9mIHRoaXMgWG1sT2JqZWN0IHRvIGJlIGEgY29weSBvZiB0aGUgc291cmNlCi0gWG1sT2JqZWN0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0QmlnRGVjaW1hbFZhbHVlKGphdmEubWF0aC5CaWdEZWNpbWFsKSI+c2V0QmlnRGVjaW1hbFZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiPkJpZ0RlY2ltYWw8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+PENPREU+QmlnRGVjaW1hbDwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0QmlnSW50ZWdlclZhbHVlKGphdmEubWF0aC5CaWdJbnRlZ2VyKSI+c2V0QmlnSW50ZWdlclZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPkJpZ0ludGVnZXI8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCI+PENPREU+QmlnSW50ZWdlcjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0Qm9vbGVhblZhbHVlKGJvb2xlYW4pIj5zZXRCb29sZWFuVmFsdWU8L0E+PC9CPihib29sZWFuJm5ic3A7dik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIGFzIGEgYm9vbGVhbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NldEJ5dGVBcnJheVZhbHVlKGJ5dGVbXSkiPnNldEJ5dGVBcnJheVZhbHVlPC9BPjwvQj4oYnl0ZVtdJm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgYXMgYSBieXRlIGFycmF5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0Qnl0ZVZhbHVlKGJ5dGUpIj5zZXRCeXRlVmFsdWU8L0E+PC9CPihieXRlJm5ic3A7dik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIGFzIGEgYnl0ZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+c2V0Q2FsZW5kYXJWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXREYXRlVmFsdWUoamF2YS51dGlsLkRhdGUpIj5zZXREYXRlVmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+RGF0ZTwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvRGF0ZS5odG1sIj48Q09ERT5EYXRlPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXREb3VibGVWYWx1ZShkb3VibGUpIj5zZXREb3VibGVWYWx1ZTwvQT48L0I+KGRvdWJsZSZuYnNwO3YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBhcyBhIGRvdWJsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NldEVudW1WYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlN0cmluZ0VudW1BYnN0cmFjdEJhc2UpIj5zZXRFbnVtVmFsdWU8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuaHRtbCI+U3RyaW5nRW51bUFic3RyYWN0QmFzZTwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sIj48Q09ERT5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXRGbG9hdFZhbHVlKGZsb2F0KSI+c2V0RmxvYXRWYWx1ZTwvQT48L0I+KGZsb2F0Jm5ic3A7dik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIGFzIGEgZmxvYXQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpIj5zZXRHRGF0ZVZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+PENPREU+R0RhdGU8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NldEdEdXJhdGlvblZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uKSI+c2V0R0R1cmF0aW9uVmFsdWU8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj48Q09ERT5HRHVyYXRpb248L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NldEludFZhbHVlKGludCkiPnNldEludFZhbHVlPC9BPjwvQj4oaW50Jm5ic3A7dik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIGFzIGFuIGludC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NldExpc3RWYWx1ZShqYXZhLnV0aWwuTGlzdCkiPnNldExpc3RWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPjxDT0RFPkxpc3Q8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NldExvbmdWYWx1ZShsb25nKSI+c2V0TG9uZ1ZhbHVlPC9BPjwvQj4obG9uZyZuYnNwO3YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBhcyBhIGxvbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzZXROaWwoKSI+c2V0TmlsPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgdG8gbmlsLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjc2V0T2JqZWN0VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPnNldE9iamVjdFZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIGFzIGFuIGFyYml0cmFyeSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj48Q09ERT5PYmplY3Q8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NldFFOYW1lVmFsdWUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPnNldFFOYW1lVmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+PENPREU+UU5hbWU8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NldFNob3J0VmFsdWUoc2hvcnQpIj5zZXRTaG9ydFZhbHVlPC9BPjwvQj4oc2hvcnQmbmJzcDt2KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgYXMgYSBzaG9ydC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3NldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj5zZXRTdHJpbmdWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPjxDT0RFPlN0cmluZzwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtzaG9ydDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3Nob3J0VmFsdWUoKSI+c2hvcnRWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIGFzIGEgc2hvcnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCNzdHJpbmdWYWx1ZSgpIj5zdHJpbmdWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+PENPREU+U3RyaW5nPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPmFic3RyYWN0ICZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCN1bmRlcmx5aW5nWG1sT2JqZWN0KCkiPnVuZGVybHlpbmdYbWxPYmplY3Q8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGlzIGFic3RyYWN0IG1ldGhvZCBpcyBjYWxsZWQgdG8gb2J0YWluIHRoZSB1bmRlcmx5aW5nIFhtbE9iamVjdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3ZhbGlkYXRlKCkiPnZhbGlkYXRlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0cnVlIGlmIHRoZSBjb250ZW50cyBvZiB0aGlzIG9iamVjdCBhcmUgdmFsaWQKLSBhY2NvcmluZyB0byBzY2hlbWFUeXBlKCkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCN2YWxpZGF0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj52YWxpZGF0ZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtKdXN0IGxpa2UgdmFsaWRhdGUoKSwgYnV0IHdpdGggb3B0aW9ucy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3ZhbHVlRXF1YWxzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+dmFsdWVFcXVhbHM8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiB0aGUgeG1sIHZhbHVlcyBhcmUgZXF1YWwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3ZhbHVlSGFzaENvZGUoKSI+dmFsdWVIYXNoQ29kZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCN4Z2V0TGlzdFZhbHVlKCkiPnhnZXRMaXN0VmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj48Q09ERT5MaXN0PC9DT0RFPjwvQT4gb2YgWG1sQW55U2ltcGxlVHlwZSBvYmplY3RzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCN4bGlzdFZhbHVlKCkiPnhsaXN0VmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj48Q09ERT5MaXN0PC9DT0RFPjwvQT4gb2YgWG1sQW55U2ltcGxlVHlwZSBvYmplY3RzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwjeG1sVGV4dCgpIj54bWxUZXh0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBzdGFuZGFyZCBYTUwgdGV4dC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sI3htbFRleHQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+eG1sVGV4dDwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtKdXN0IGxpa2UgeG1sVGV4dCgpIGJ1dCB3aXRoIG9wdGlvbnMuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjY2xvbmUoKSI+Y2xvbmU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZ2V0Q2xhc3MoKSI+Z2V0Q2xhc3M8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9IkZpbHRlclhtbE9iamVjdCgpIj48IS0tIC0tPjwvQT48SDM+Ci1GaWx0ZXJYbWxPYmplY3Q8L0gzPgotPFBSRT4KLXB1YmxpYyA8Qj5GaWx0ZXJYbWxPYmplY3Q8L0I+KCk8L1BSRT4KLTxETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9InVuZGVybHlpbmdYbWxPYmplY3QoKSI+PCEtLSAtLT48L0E+PEgzPgotdW5kZXJseWluZ1htbE9iamVjdDwvSDM+Ci08UFJFPgotcHVibGljIGFic3RyYWN0IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4gPEI+dW5kZXJseWluZ1htbE9iamVjdDwvQj4oKTwvUFJFPgotPERMPgotPEREPlRoaXMgYWJzdHJhY3QgbWV0aG9kIGlzIGNhbGxlZCB0byBvYnRhaW4gdGhlIHVuZGVybHlpbmcgWG1sT2JqZWN0LgotIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHN1cHBseSBvciBjb21wdXRlIHRoZSB3cmFwcGVkIG9iamVjdC4KLSA8cD4KLSBFdmVyeSBvdGhlciBtZXRob2Qgb2YgdGhpcyBjbGFzcyBkZWxlZ2F0ZXMgdG8gdGhlIG9iamVjdCByZXR1cm5lZAotIGZyb20gdGhpcyBtZXRob2QuIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgb2JqZWN0IGltcGxlbWVudHMgYWxsIHRoZQotIG1ldGhvZHMgb2YgYm90aCBYbWxPYmplY3QgYW5kIFNpbXBsZVZhbHVlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzY2hlbWFUeXBlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNjaGVtYVR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+c2NoZW1hVHlwZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5UaGUgc2NoZW1hIHR5cGUgZm9yIHRoaXMgaW5zdGFuY2UuIFRoaXMgaXMgYSBwZXJtYW5lbnQsCi0gdW5jaGFuZ2luZyBwcm9wZXJ0eSBvZiB0aGUgaW5zdGFuY2UuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzY2hlbWFUeXBlKCkiPnNjaGVtYVR5cGU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InZhbGlkYXRlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXZhbGlkYXRlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj52YWxpZGF0ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5SZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRlbnRzIG9mIHRoaXMgb2JqZWN0IGFyZSB2YWxpZAotIGFjY29yaW5nIHRvIHNjaGVtYVR5cGUoKS4KLSA8cD4KLSBEb2VzIGEgZGVlcCB2YWxpZGF0aW9uIG9mIHRoZSBlbnRpcmUgc3VidHJlZSB1bmRlciB0aGUKLSBvYmplY3QsIGJ1dCBkb2VzIG5vdCB2YWxpZGF0ZSB0aGUgcGFyZW50cyBvciBzaWJsaW5ncwotIG9mIHRoZSBvYmplY3QgaWYgdGhlIG9iamVjdCBpcyBpbiB0aGUgaW50ZXJpb3Igb2YgYW4geG1sCi0gdHJlZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKCkiPnZhbGlkYXRlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ2YWxpZGF0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci12YWxpZGF0ZTwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+dmFsaWRhdGU8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPjxwPkp1c3QgbGlrZSB2YWxpZGF0ZSgpLCBidXQgd2l0aCBvcHRpb25zLjwvcD4KLSA8cD5JZiB5b3Ugd2lzaCB0byBjb2xsZWN0IGVycm9yIG1lc3NhZ2VzIGFuZCBsb2NhdGlvbnMgd2hpbGUgdmFsaWRhdGluZywKLSB1c2UgdGhlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldEVycm9yTGlzdGVuZXIoamF2YS51dGlsLkNvbGxlY3Rpb24pIj48Q09ERT5YbWxPcHRpb25zLnNldEVycm9yTGlzdGVuZXIoamF2YS51dGlsLkNvbGxlY3Rpb24pPC9DT0RFPjwvQT4gbWV0aG9kLiBXaXRoIHRoYXQgbWV0aG9kLAotIHlvdSBjYW4gc3BlY2lmeSBhbiBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgbWVzc2FnZXMgcmVsYXRlZCB0byB2YWxpZGF0aW9uLgotIFRoZSBmb2xsb3dpbmcgaXMgYSBzaW1wbGUgZXhhbXBsZS48L3A+Ci0gCi0gPHByZT4KLSAvLyBDcmVhdGUgYW4gWG1sT3B0aW9ucyBpbnN0YW5jZSBhbmQgc2V0IHRoZSBlcnJvciBsaXN0ZW5lci4KLSBYbWxPcHRpb25zIHZhbGlkYXRlT3B0aW9ucyA9IG5ldyBYbWxPcHRpb25zKCk7Ci0gQXJyYXlMaXN0IGVycm9yTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSB2YWxpZGF0ZU9wdGlvbnMuc2V0RXJyb3JMaXN0ZW5lcihlcnJvckxpc3QpOwotIAotIC8vIFZhbGlkYXRlIHRoZSBYTUwuCi0gYm9vbGVhbiBpc1ZhbGlkID0gbmV3RW1wLnZhbGlkYXRlKHZhbGlkYXRlT3B0aW9ucyk7Ci0gCi0gLy8gSWYgdGhlIFhNTCBpc24ndCB2YWxpZCwgbG9vcCB0aHJvdWdoIHRoZSBsaXN0ZW5lcidzIGNvbnRlbnRzLAotIC8vIHByaW50aW5nIGNvbnRhaW5lZCBtZXNzYWdlcy4KLSBpZiAoIWlzVmFsaWQpCi0gewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlcnJvckxpc3Quc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgICAgWG1sRXJyb3IgZXJyb3IgPSAoWG1sRXJyb3IpZXJyb3JMaXN0LmdldChpKTsKLSAgICAgICAgICAKLSAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuIik7Ci0gICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNZXNzYWdlOiAiICsgZXJyb3IuZ2V0TWVzc2FnZSgpICsgIlxuIik7Ci0gICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb2NhdGlvbiBvZiBpbnZhbGlkIFhNTDogIiArIAotICAgICAgICAgICAgICBlcnJvci5nZXRDdXJzb3JMb2NhdGlvbigpLnhtbFRleHQoKSArICJcbiIpOwotICAgICAgfQotIH0KLSA8L3ByZT4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnZhbGlkYXRlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5vcHRpb25zPC9DT0RFPiAtIEFuIG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ29sbGVjdGlvbi5odG1sIj48Q09ERT5Db2xsZWN0aW9uPC9DT0RFPjwvQT4gaW50ZXJmYWNlLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotc2VsZWN0UGF0aDwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT5bXSA8Qj5zZWxlY3RQYXRoPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cGF0aCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+U2VsZWN0cyBhIHBhdGguICBQYXRoIGNhbiBiZSBhIHN0cmluZyBvciBwcmVjb21waWxlZCBwYXRoIFN0cmluZy4KLSA8cD4KLSBUaGUgcGF0aCBtdXN0IGJlIGEgcmVsYXRpdmUgcGF0aCwgd2hlcmUgIi4iIHJlcHJlc2VudHMgdGhlCi0gZWxlbWVudCBvciBhdHRyaWJ1dGUgY29udGFpbmcgdGhpcyBYbWxPYmplY3QsIGFuZCBpdCBtdXN0IHNlbGVjdAotIG9ubHkgb3RoZXIgZWxlbWVudHMgb3IgYXR0cmlidXRlcy4gIElmIGEgbm9uLWVsZW1lbnQgb3Igbm9uLWF0dHJpYnV0ZQotIGlzIHNlbGVjdGVkLCBhbiB1bmNoZWNrZWQgZXhjZXB0aW9uIGlzIHRocm93bi4KLSA8cD4KLSBUaGUgYXJyYXkgdGhhdCBpcyByZXR1cm5lZCBjb250YWlucyBhbGwgdGhlIHNlbGVjdGVkCi0gWG1sT2JqZWN0cywgd2l0aGluIHRoZSBzYW1lIGRvY3VtZW50LCBsaXN0ZWQgaW4gZG9jdW1lbnQKLSBvcmRlci4gIFRoZSBhY3R1YWwgYXJyYXkgdHlwZSBvZiB0aGUgcmVzdWx0IGlzIGluZmVycmVkCi0gZnJvbSB0aGUgY2xvc2VzdCBjb21tb24gYmFzZSB0eXBlIG9mIHNlbGVjdGVkIHJlc3VsdHMuCi0gPHA+Ci0gSGVyZSBpcyBhbiBleGFtcGxlIG9mIHVzYWdlLiAgU3VwcG9zZSB3ZSBoYXZlIGEgZ2xvYmFsCi0gZWxlbWVudCBkZWZpbml0aW9uIGZvciAib3duZXIiIHdob3NlIHR5cGUgaXMgInBlcnNvbiI6Ci0gPHByZT4KLSAgICZsdDtzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vb3BlbnVyaS5vcmcvc2FtcGxlIj4KLSAgICAgICZsdDtlbGVtZW50IG5hbWU9Im93bmVyIiB0eXBlPSJwZXJzb24iLz4KLSAgICAgICZsdDtjb21wbGV4VHlwZSBuYW1lPSJwZXJzb24iPgotICAgICAgICAgWy4uLl0KLSAgICAgICZsdDsvY29tcGxleFR5cGU+Ci0gICAmbHQ7L3NjaGVtYT4KLSA8L3ByZT4KLSBhbmQgc3VwcG9zZSAib3duZXIiIHRhZ3MgY2FuIGJlIHNjYXR0ZXJlZCB0aHJvdWdob3V0IHRoZQotIGRvY3VtZW50LiAgVGhlbiB3ZSBjYW4gd3JpdGUgdGhlIGZvbGxvd2luZyBjb2RlIHRvIGZpbmQKLSB0aGVtIGFsbDoKLSA8cHJlPgotIGltcG9ydCBvcmcub3BlbnVyaS5zYW1wbGUuUGVyc29uOwotIGltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLio7Ci0gWy4uLl0KLSAgIFhtbE9iamVjdCB4b2JqID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UobXlGaWxlKTsKLSAgIFBlcnNvbltdIHJlc3VsdHM7Ci0gICByZXN1bHRzID0gKFBlcnNvbltdKXhvYmouc2VsZWN0UGF0aCgKLSAgICAgICJkZWNsYXJlIG5hbWVzcGFjZSBzPSdodHRwOi8vd3d3Lm9wZW51cmkub3JnL3NhbXBsZScgIiArCi0gICAgICAiLi8vczpvd25lciIpOwotIDwvcHJlPgotIE5vdGljZSB0aGUgd2F5IGluIHdoaWNoIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMgYXJlIGRvbmUgaW4gWFBhdGggMi4wLgotIFNpbmNlIFhQYXRoIGNhbiBvbmx5IG5hdmlnYXRlIHdpdGhpbiBhbiBYTUwgZG9jdW1lbnQgLSBpdCBjYW5ub3QKLSBjb25zdHJ1Y3QgbmV3IFhNTCAtIHRoZSByZXN1bHRpbmcgWG1sT2JqZWN0cyBhbGwgcmVzaWRlIGluCi0gdGhlIHNhbWUgWE1MIGRvY3VtZW50IGFzIHRoaXMgWG1sT2JqZWN0IGl0c2VsZi4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZykiPnNlbGVjdFBhdGg8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotc2VsZWN0UGF0aDwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT5bXSA8Qj5zZWxlY3RQYXRoPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlNlbGVjdHMgYSBwYXRoLCBhcHBseWluZyBvcHRpb25zLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zZWxlY3RQYXRoPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5YbWxPYmplY3Quc2VsZWN0UGF0aChTdHJpbmcpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImV4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotZXhlY1F1ZXJ5PC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPltdIDxCPmV4ZWNRdWVyeTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3F1ZXJ5KTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5FeGVjdXRlcyBhIHF1ZXJ5LiAgUXVlcnkgY2FuIGJlIGEgc3RyaW5nIG9yIHByZWNvbXBpbGVkIHF1ZXJ5IFN0cmluZy4KLSA8cD4KLSBBbiBYUXVlcnkgaXMgdmVyeSBzaW1pbGFyIHRvIGFuIFhQYXRoLCBleGNlcHQgdGhhdCBpdCBhbHNvIHBlcm1pdHMKLSBjb25zdHJ1Y3Rpb24gb2YgbmV3IFhNTC4gIEFzIGEgcmVzdWx0LCB0aGUgWG1sT2JqZWN0cyB0aGF0IGFyZQotIHJldHVybmVkIGZyb20gZXhlY1F1ZXJ5IGFyZSBpbiBuZXdseSBjcmVhdGVkIGRvY3VtZW50cywgc2VwYXJhdGUKLSBmcm9tIHRoZSBYbWxPYmplY3Qgb24gd2hpY2ggdGhlIHF1ZXJ5IGlzIGV4ZWN1dGVkLgotIDxwPgotIFN5bnRheCBhbmQgdXNhZ2UgaXMgb3RoZXJ3aXNlIHNpbWlsYXIgdG8gc2VsZWN0UGF0aC4KLSA8cD4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nKSI+ZXhlY1F1ZXJ5PC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5YbWxPYmplY3Quc2VsZWN0UGF0aChTdHJpbmcpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImV4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1leGVjUXVlcnk8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+W10gPEI+ZXhlY1F1ZXJ5PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cXVlcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPkV4ZWN1dGVzIGEgcXVlcnkgd2l0aCBvcHRpb25zLgotIAotIFVzZSB0aGUgPGVtPm9wdGlvbnM8L2VtPiBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUgZm9sbG93aW5nOjwvcD4KLSAKLSA8dGFibGU+Ci0gPHRyPjx0aD5UbyBzcGVjaWZ5IHRoaXM8L3RoPjx0aD5Vc2UgdGhpcyBtZXRob2Q8L3RoPjwvdHI+Ci0gPHRyPgotICA8dGQ+VGhlIGRvY3VtZW50IHR5cGUgZm9yIHRoZSByb290IGVsZW1lbnQuPC90ZD4KLSAgPHRkPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldERvY3VtZW50VHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj48Q09ERT5YbWxPcHRpb25zLnNldERvY3VtZW50VHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpPC9DT0RFPjwvQT48L3RkPgotIDwvdHI+Ci0gPHRyPgotICA8dGQ+VG8gcmVwbGFjZSB0aGUgZG9jdW1lbnQgZWxlbWVudCB3aXRoIHRoZSBzcGVjaWZpZWQgUU5hbWUgd2hlbiBjb25zdHJ1Y3RpbmcgdGhlCi0gIHJlc3VsdGluZyBkb2N1bWVudC48L3RkPgotICA8dGQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0TG9hZFJlcGxhY2VEb2N1bWVudEVsZW1lbnQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxDT0RFPlhtbE9wdGlvbnMuc2V0TG9hZFJlcGxhY2VEb2N1bWVudEVsZW1lbnQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSk8L0NPREU+PC9BPjwvdGQ+Ci0gPC90cj4KLSA8dHI+Ci0gIDx0ZD5UbyBzdHJpcCBhbGwgaW5zaWduaWZpY2FudCB3aGl0ZXNwYWNlIHdoZW4gY29uc3RydWN0aW5nIGEgZG9jdW1lbnQuPC90ZD4KLSAgPHRkPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldExvYWRTdHJpcFdoaXRlc3BhY2UoKSI+PENPREU+WG1sT3B0aW9ucy5zZXRMb2FkU3RyaXBXaGl0ZXNwYWNlKCk8L0NPREU+PC9BPjwvdGQ+Ci0gPC90cj4KLSA8dHI+Ci0gIDx0ZD5UbyBzdHJpcCBhbGwgY29tbWVudHMgd2hlbiBjb25zdHJ1Y3RpbmcgYSBkb2N1bWVudC48L3RkPgotICA8dGQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0TG9hZFN0cmlwQ29tbWVudHMoKSI+PENPREU+WG1sT3B0aW9ucy5zZXRMb2FkU3RyaXBDb21tZW50cygpPC9DT0RFPjwvQT48L3RkPgotIDwvdHI+Ci0gPHRyPgotICA8dGQ+VG8gc3RyaXAgYWxsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zIHdoZW4gY29uc3RydWN0aW5nIGEgZG9jdW1lbnQuPC90ZD4KLSAgPHRkPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldExvYWRTdHJpcFByb2NpbnN0cygpIj48Q09ERT5YbWxPcHRpb25zLnNldExvYWRTdHJpcFByb2NpbnN0cygpPC9DT0RFPjwvQT48L3RkPgotIDwvdHI+Ci0gPHRyPgotICA8dGQ+QSBtYXAgb2YgbmFtZXNwYWNlIFVSSSBzdWJzdGl0dXRpb25zIHRvIHVzZSB3aGVuIGNvbnN0cnVjdGluZyBhIGRvY3VtZW50LjwvdGQ+Ci0gIDx0ZD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRMb2FkU3Vic3RpdHV0ZU5hbWVzcGFjZXMoamF2YS51dGlsLk1hcCkiPjxDT0RFPlhtbE9wdGlvbnMuc2V0TG9hZFN1YnN0aXR1dGVOYW1lc3BhY2VzKGphdmEudXRpbC5NYXApPC9DT0RFPjwvQT48L3RkPgotIDwvdHI+Ci0gPHRyPgotICA8dGQ+QWRkaXRpb25hbCBuYW1lc3BhY2UgbWFwcGluZ3MgdG8gYmUgYWRkZWQgd2hlbiBjb25zdHJ1Y3RpbmcgYSBkb2N1bWVudC48L3RkPgotICA8dGQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0TG9hZEFkZGl0aW9uYWxOYW1lc3BhY2VzKGphdmEudXRpbC5NYXApIj48Q09ERT5YbWxPcHRpb25zLnNldExvYWRBZGRpdGlvbmFsTmFtZXNwYWNlcyhqYXZhLnV0aWwuTWFwKTwvQ09ERT48L0E+PC90ZD4KLSA8L3RyPgotIDx0cj4KLSAgPHRkPlRvIHRyaW0gdGhlIHVuZGVybHlpbmcgWE1MIHRleHQgYnVmZmVyIGltbWVkaWF0ZWx5IGFmdGVyIGNvbnN0cnVjdGluZyAKLSAgYSBkb2N1bWVudCwgcmVzdWx0aW5nIGluIGEgc21hbGxlciBtZW1vcnkgZm9vdHByaW50LjwvdGQ+Ci0gIDx0ZD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRMb2FkVHJpbVRleHRCdWZmZXIoKSI+PENPREU+WG1sT3B0aW9ucy5zZXRMb2FkVHJpbVRleHRCdWZmZXIoKTwvQ09ERT48L0E+PC90ZD4KLSA8L3RyPgotIDx0cj4KLSAgPHRkPldoZXRoZXIgdmFsdWUgZmFjZXRzIHNob3VsZCBiZSBjaGVja2VkIGFzIHRoZXkgYXJlIHNldC48L3RkPgotICA8dGQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0VmFsaWRhdGVPblNldCgpIj48Q09ERT5YbWxPcHRpb25zLnNldFZhbGlkYXRlT25TZXQoKTwvQ09ERT48L0E+PC90ZD4KLSA8L3RyPgotIDwvdGFibGU+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+ZXhlY1F1ZXJ5PC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5xdWVyeTwvQ09ERT4gLSBUaGUgWFF1ZXJ5IGV4cHJlc3Npb24uPEREPjxDT0RFPm9wdGlvbnM8L0NPREU+IC0gT3B0aW9ucyBhcyBkZXNjcmliZWQuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPlhtbE9iamVjdC5leGVjUXVlcnkoU3RyaW5nKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjaGFuZ2VUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPjwhLS0gLS0+PC9BPjxIMz4KLWNoYW5nZVR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+IDxCPmNoYW5nZVR5cGU8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPiZuYnNwO25ld1R5cGUpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPkNoYW5nZXMgdGhlIHNjaGVtYSB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRhdGEgYW5kCi0gcmV0dXJucyBhIG5ldyBYbWxPYmplY3QgaW5zdGFuY2Ugd2hvc2Ugc2NoZW1hVHlwZSBpcyB0aGUKLSBuZXcgdHlwZS4KLSA8cD4KLSBSZXR1cm5zIG51bGwgaWYgdGhlIHR5cGUgY2hhbmdlIGlzIG5vdCBhbGxvd2VkLiBDZXJ0YWluCi0gdHlwZSBjaGFuZ2VzIG1heSBiZSBwcm9oaWJpdGVkIG9uIHRoZSBpbnRlcmlvciBvZiBhbiB4bWwKLSB0cmVlIGR1ZSB0byBzY2hlbWEgdHlwZSBzeXN0ZW0gY29uc3RyYWludHMgKHRoYXQgaXMsIGR1ZQotIHRvIGEgcGFyZW50IGNvbnRhaW5lciB3aXRoaW4gd2hpY2ggdGhlIG5ld2x5IHNwZWNpZmllZAotIHR5cGUgaXMgbm90IHBlcm1pc3NpYmxlKSwgYnV0IHRoZXJlIGFyZSBubyBjb25zdHJhaW50cwotIGF0IHRoZSByb290dHlwZSBjaGFuZ2VzIGFyZSBuZXZlcgotIHByb2hpYml0ZWQgYXQgdGhlIHJvb3Qgb2YgYW4geG1sIHRyZWUuCi0gPHA+Ci0gSWYgdGhlIHR5cGUgY2hhbmdlIGlzIGFsbG93ZWQsIHRoZW4gdGhlIG5ldyBYbWxPYmplY3Qgc2hvdWxkCi0gYmUgdXNlZCByYXRoZXIgdGhhbiB0aGUgb2xkIG9uZS4gVGhlIG9sZCBYbWxPYmplY3QgaW5zdGFuY2UgYW5kCi0gYW55IG90aGVyIFhtbE9iamVjdCBpbnN0YW5jZXMgaW4gdGhlIHN1YnRyZWUgYXJlIHBlcm1hbmVudGx5Ci0gaW52YWxpZGF0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZC4gKFRoZXkgd2lsbCByZXR1cm4KLSBJbnZhbGlkU3RhdGVFeGNlcHRpb24gaWYgeW91IHRyeSB0byB1c2UgdGhlbS4pCi0KLSBJZiBhIHR5cGUgY2hhbmdlIGlzIGRvbmUgb24gdGhlIGludGVyaW9yIG9mIGFuIFhtbAotIHRyZWUsIHRoZW4geHNpOnR5cGUgYXR0cmlidXRlcyBhcmUgdXBkYXRlZCBhcyBuZWVkZWQuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjaGFuZ2VUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPmNoYW5nZVR5cGU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzTmlsKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzTmlsPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5pc05pbDwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5UcnVlIGlmIHRoZSB2YWx1ZSBpcyBuaWwuIE5vdGUgdGhhdCBpbiBvcmRlciB0byBiZSBuaWwsCi0gdGhlIHZhbHVlIG11c3QgYmUgaW4gYW4gZWxlbWVudCwgYW5kIHRoZSBlbGVtZW50IGNvbnRhaW5pbmcKLSB0aGUgdmFsdWUgbXVzdCBiZSBtYXJrZWQgYXMgbmlsbGFibGUgaW4gdGhlIHNjaGVtYS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzTmlsKCkiPmlzTmlsPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXROaWwoKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0TmlsPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXROaWw8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+U2V0cyB0aGUgdmFsdWUgdG8gbmlsLiBUaGUgZWxlbWVudCBjb250YWluaW5nIHRoZSB2YWx1ZSBtdXN0Ci0gYmUgbWFya2VkIGFzIG5pbGxhYmxlIGluIHRoZSBzY2hlbWEuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXROaWwoKSI+c2V0TmlsPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc0ltbXV0YWJsZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc0ltbXV0YWJsZTwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNJbW11dGFibGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+VHJ1ZSBpZiB0aGUgdmFsdWUgaXMgYW4gaW1tdXRhYmxlIHZhbHVlLiBJbW11dGFibGUgdmFsdWVzIGRvIG5vdAotIGhhdmUgYSBwb3NpdGlvbiBpbiBhIHRyZWU7IHJhdGhlciwgdGhleSBhcmUgc3RhbmQtYWxvbmUgc2ltcGxlIHR5cGUKLSB2YWx1ZXMuIElmIHRoZSBvYmplY3QgaXMgaW1tdXRhYmxlLCB0aGUgZXF1YWxzKCkgbWV0aG9kcyB0ZXN0cyBmb3IKLSB2YWx1ZSBlcXVhbGl0eSwgYW5kIHRoZSBvYmplY3QgY2FuIGJlIHVzZWQgYXMgdGhlIGtleSBmb3IgYSBoYXNoLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNJbW11dGFibGUoKSI+aXNJbW11dGFibGU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4gPEI+c2V0PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+Jm5ic3A7c3JjT2JqKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5TZXQgdGhlIHZhbHVlL3R5cGUgb2YgdGhpcyBYbWxPYmplY3QgdG8gYmUgYSBjb3B5IG9mIHRoZSBzb3VyY2UKLSBYbWxPYmplY3QuICBCZWNhdXNlIHRoZSB0eXBlIG9mIHRoZSBzb3VyY2UgbWF5IGJlIGRpZmZlcmVudCB0aGFuIHRoaXMKLSB0YXJnZXQsIHRoaXMgWG1sT2JqZWN0IG1heSBiZWNvbWUgZGVmdW5jdC4gIEluIHRoaXMgY2FzZSB0aGUgbmV3Ci0gWG1sT2JqZWN0IGlzIHJldHVybmVkLiAgSWYgbm8gdHlwZSBjaGFuZ2UgaGFwcGVucywgdGhlIHNhbWUgdGhpcyB3aWxsIGJlCi0gcmV0dXJuZWQuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5zZXQ8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNvcHkoKSI+PCEtLSAtLT48L0E+PEgzPgotY29weTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4gPEI+Y29weTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5SZXR1cm5zIGEgZGVlcCBjb3B5IG9mIHRoaXMgWG1sT2JqZWN0LiAgVGhlIHJldHVybmVkIG9iamVjdCBoYXMgdGhlCi0gc2FtZSB0eXBlIGFzIHRoZSBjdXJyZW50IG9iamVjdCwgYW5kIGhhcyBhbGwgdGhlIGNvbnRlbnQgb2YKLSB0aGUgWE1MIGRvY3VtZW50IHVuZGVybmVhdGggdGhlIGN1cnJlbnQgb2JqZWN0LiAgTm90ZSB0aGF0Ci0gYW55IHBhcnRzIG9mIHRoZSBYTUwgZG9jdW1lbnQgYWJvdmUgb3Igb3V0c2lkZSB0aGlzIFhtbE9iamVjdCBhcmUKLSBub3QgY29waWVkLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29weSgpIj5jb3B5PC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ2YWx1ZUVxdWFscyhvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLXZhbHVlRXF1YWxzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj52YWx1ZUVxdWFsczwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+VHJ1ZSBpZiB0aGUgeG1sIHZhbHVlcyBhcmUgZXF1YWwuIFR3byBkaWZmZXJlbnQgb2JqZWN0cwotICh3aGljaCBhcmUgZGlzdGluZ3Vpc2hlZCBieSBlcXVhbHMob2JqKSA9PSBmYWxzZSkgbWF5IG9mCi0gY291cnNlIGhhdmUgZXF1YWwgdmFsdWVzICh2YWx1ZUVxdWFscyhvYmopID09IHRydWUpLgotIDxwPgotIFVzdWFsbHkgdGhpcyBtZXRob2QgY2FuIGJlIHRyZWF0ZWQgYXMgYW4gb3JkaW5hcnkgZXF1dmFsZW5jZQotIHJlbGF0aW9uLCBidXQgYWN0dWFsbHkgaXQgaXMgbm90IGlzIG5vdCB0cmFuc2l0aXZlLgotIEhlcmUgaXMgYSBwcmVjaXNlIHNwZWNpZmljYXRpb246Ci0gPHA+Ci0gVGhlcmUgYXJlIHR3byBjYXRlZ29yaWVzIG9mIFhNTCBvYmplY3Q6IG9iamVjdHMgd2l0aCBhIGtub3duCi0gaW5zdGFuY2UgdHlwZSwgYW5kIG9iamVjdHMgd2hvc2Ugb25seSBrbm93biB0eXBlIGlzIG9uZSBvZiB0aGUKLSB1ci10eXBlcyAoZWl0aGVyIEFueVR5cGUgb3IgQW55U2ltcGxlVHlwZSkuIFRoZSBmaXJzdCBjYXRlZ29yeQotIGlzIGNvbXBhcmVkIGluIHRlcm1zIG9mIGxvZ2ljYWwgdmFsdWUgc3BhY2VzLCBhbmQgdGhlIHNlY29uZAotIGNhdGVnb3J5IGlzIGNvbXBhcmVkIGxleGljYWxseS4KLSA8cD4KLSBXaXRoaW4gZWFjaCBvZiB0aGVzZSB0d28gY2F0ZWdvcmllcywgdmFsdWVFcXVhbHMgaXMgYSB3ZWxsLWJlaGF2ZWQKLSBlcXVpdmFsZW5jZSByZWxhdGlvbi4gSG93ZXZlciwgd2hlbiBjb21wYXJpbmcgYW4gb2JqZWN0IG9mIGtub3duCi0gdHlwZSB3aXRoIGFuIG9iamVjdCB3aXRoIHVyLXR5cGUsIHRoZSBjb21wYXJpc29uIGlzIGRvbmUgYnkgYXR0ZW1wdGluZwotIHRvIGNvbnZlcnQgdGhlIGxleGljYWwgZm9ybSBvZiB0aGUgdXItdHlwZWQgb2JqZWN0IGludG8gdGhlIG90aGVyCi0gdHlwZSwgYW5kIHRoZW4gY29tcGFyaW5nIHRoZSByZXN1bHRzLiBVci10eXBlZCBvYmplY3RzIGFyZSB0aGVyZWZvcmUKLSB0cmVhdGVkIGFzIGxleGljYWwgd2lsZGNhcmRzIGFuZCBtYXkgYmUgZXF1YWwgdG8gb2JqZWN0cyBpbiBkaWZmZXJlbnQKLSB2YWx1ZSBzcGFjZXMsIGV2ZW4gdGhvdWdoIHRoZSBvYmplY3RzIGluIGRpZmZlcmVudCB2YWx1ZSBzcGFjZXMgYXJlCi0gbm90IGVxdWFsIHRvIGVhY2ggb3RoZXIuCi0gPHA+Ci0gRm9yIGV4YW1wbGUsIHRoZSBhbnlTaW1wbGVUeXBlIHZhbHVlICIxIiB3aWxsIGNvbXBhcmUgYXMgYW4KLSBlcXVhbFZhbHVlIHRvIHRoZSBzdHJpbmcgIjEiLCB0aGUgZmxvYXQgdmFsdWUgIjEuMCIsIHRoZSBkb3VibGUKLSB2YWx1ZSAiMS4wIiwgdGhlIGRlY2ltYWwgIjEiLCBhbmQgdGhlIEdZZWFyICIxIiwgZXZlbiB0aG91Z2gKLSBhbGwgdGhlc2Ugb2JqZWN0cyB3aWxsIGNvbXBhcmUgdW5lcXVhbCB0byBlYWNoIG90aGVyIHNpbmNlIHRoZXkKLSBsaWUgaW4gZGlmZmVyZW50IHZhbHVlIHNwYWNlcy4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlRXF1YWxzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+dmFsdWVFcXVhbHM8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InZhbHVlSGFzaENvZGUoKSI+PCEtLSAtLT48L0E+PEgzPgotdmFsdWVIYXNoQ29kZTwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj52YWx1ZUhhc2hDb2RlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVIYXNoQ29kZSgpIj52YWx1ZUhhc2hDb2RlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjb21wYXJlVG8oamF2YS5sYW5nLk9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNvbXBhcmVUbzwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5jb21wYXJlVG88L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPkltcGVsZW1lbnRzIHRoZSBDb21wYXJhYmxlIGludGVyZmFjZSBieSBjb21wYXJpbmcgdHdvIHNpbXBsZQotIHhtbCB2YWx1ZXMgYmFzZWQgb24gdGhlaXIgc3RhbmRhcmQgWE1MIHNjaGVtYSBvcmRlcmluZy4KLSBUaHJvd3MgYSBDbGFzc0Nhc3RFeGNlcHRpb24gaWYgbm8gc3RhbmRhcmQgb3JkZXJpbmcgYXBwbGllcywKLSBvciBpZiB0aGUgdHdvIHZhbHVlcyBhcmUgaW5jb21wYXJhYmxlIHdpdGhpbiBhIHBhcnRpYWwgb3JkZXIuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVG8oamF2YS5sYW5nLk9iamVjdCkiPmNvbXBhcmVUbzwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iY29tcGFyZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotY29tcGFyZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmNvbXBhcmVWYWx1ZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+VGhpcyBjb21wYXJpc29uIG1ldGhvZCBpcyBzaW1pbGFyIHRvIGNvbXBhcmVUbywgYnV0IHJhdGhlcgotIHRoYW4gdGhyb3dpbmcgYSBDbGFzc0Nhc3RFeGNlcHRpb24gd2hlbiB0d28gdmFsdWVzIGFyZSBpbmNvbXBhcmFibGUsCi0gaXQgcmV0dXJucyB0aGUgbnVtYmVyIDIuIFRoZSByZXN1bHQgY29kZXMgYXJlIC0xIGlmIHRoaXMgb2JqZWN0Ci0gaXMgbGVzcyB0aGFuIG9iaiwgMSBpZiB0aGlzIG9iamVjdCBpcyBncmVhdGVyIHRoYW4gb2JqLCB6ZXJvIGlmCi0gdGhlIG9iamVjdHMgYXJlIGVxdWFsLCBhbmQgMiBpZiB0aGUgb2JqZWN0cyBhcmUgaW5jb21wYXJhYmxlLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+Y29tcGFyZVZhbHVlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJtb25pdG9yKCkiPjwhLS0gLS0+PC9BPjxIMz4KLW1vbml0b3I8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+IDxCPm1vbml0b3I8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlJldHVybnMgdGhlIHN5bmNocm9uaXphdGlvbiBvYmplY3QgZm9yIHRoZSBkb2N1bWVudC4gIElmIGNvbmN1cnJlbnQKLSBtdWx0aXRocmVhZGVkIGFjY2VzcyB0byBhIGRvY3VtZW50IGlzIHJlcXVpcmVkLCB0aGUgYWNjZXNzIHNob3VsZCBzaG91bGQKLSBiZSBwcm90ZWN0ZWQgYnkgc3luY2hyb25pemluZyBvbiB0aGlzIG1vbml0b3IoKSBvYmplY3QuICBUaGVyZSBpcyBvbmUKLSBtb25pdG9yIHBlciBYTUwgZG9jdW1lbnQgdHJlZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbW9uaXRvcigpIj5tb25pdG9yPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZG9jdW1lbnRQcm9wZXJ0aWVzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWRvY3VtZW50UHJvcGVydGllczwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwiPlhtbERvY3VtZW50UHJvcGVydGllczwvQT4gPEI+ZG9jdW1lbnRQcm9wZXJ0aWVzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5SZXR1cm5zIHRoZSBYbWxEb2N1bWVudFByb3BlcnRpZXMgb2JqZWN0IGZvciB0aGUgZG9jdW1lbnQgdGhpcyB0b2tlbgotIHNvdXJjZSBpcyBhc3NvY2lhdGVkIHdpdGguCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI2RvY3VtZW50UHJvcGVydGllcygpIj5kb2N1bWVudFByb3BlcnRpZXM8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdDdXJzb3IoKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3Q3Vyc29yPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPiA8Qj5uZXdDdXJzb3I8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlJldHVybnMgYSBuZXcgWE1MIGN1cnNvci4KLQotIEEgY3Vyc29yIHByb3ZpZGVzIHJhbmRvbSBhY2Nlc3MgdG8gYWxsIHRoZSB0b2tlbnMgaW4gdGhlIFhNTAotIGRhdGEsIHBsdXMgdGhlIGFiaWxpdHkgdG8gZXh0cmFjdCBzdHJvbmdseS10eXBlZCBYbWxPYmplY3RzCi0gZm9yIHRoZSBkYXRhLiBJZiB0aGUgZGF0YSBpcyBub3QgcmVhZC1vbmx5LCB0aGUgWE1MIGN1cnNvcgotIGFsc28gYWxsb3dzIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGRhdGEuCi0KLSBVc2luZyBhIGN1cnNvciBmb3IgdGhlIGZpcnN0IHRpbWUgdHlwaWNhbGx5IGZvcmNlcyB0aGUgWE1MCi0gZG9jdW1lbnQgaW50byBtZW1vcnkuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0N1cnNvcigpIj5uZXdDdXJzb3I8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdYTUxJbnB1dFN0cmVhbSgpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1hNTElucHV0U3RyZWFtPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5SZXR1cm5zIGEgbmV3IFhtbElucHV0U3RyZWFtLgotCi0gVGhlIHN0cmVhbSBzdGFydHMgYXQgdGhlIGN1cnJlbnQgYmVnaW4tdGFnIG9yIGJlZ2luLWRvY3VtZW50Ci0gcG9zaXRpb24gYW5kIGVuZHMgYXQgdGhlIG1hdGNoaW5nIGVuZC10YWcgb3IgZW5kLWRvY3VtZW50LgotCi0gVGhpcyBpcyBhIGZhaWwtZmFzdCBzdHJlYW0sIHNvIGlmIHRoZSB1bmRlcmx5aW5nIGRhdGEgaXMgY2hhbmdlZAotIHdoaWxlIHRoZSBzdHJlYW0gaXMgYmVpbmcgcmVhZCwgdGhlIHN0cmVhbSB0aHJvd3MgYQotIENvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb24uCi0KLSBUaHJvd3MgYW4gSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoZSBYbWxUb2tlblNvdXJjZSBpcyBub3QKLSBwb3NpdGlvbmVkIGF0IGJlZ2luLXRhZyBvciBiZWdpbi1kb2N1bWVudCAoZS5nLiwgaWYgaXQgaXMgYXQKLSBhbiBhdHRyaWJ1dGUpLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdYTUxJbnB1dFN0cmVhbSgpIj5uZXdYTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InhtbFRleHQoKSI+PCEtLSAtLT48L0E+PEgzPgoteG1sVGV4dDwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+eG1sVGV4dDwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+UmV0dXJucyBzdGFuZGFyZCBYTUwgdGV4dC4KLQotIFRoZSB0ZXh0IHJldHVybmVkIHJlcHJlc2VudHMgdGhlIGRvY3VtZW50IGNvbnRlbnRzIHN0YXJ0aW5nIGF0Ci0gdGhlIGN1cnJlbnQgYmVnaW4tdGFnIG9yIGJlZ2luLWRvY3VtZW50IGFuZCBlbmRpbmcgYXQgdGhlIG1hdGNoaW5nCi0gZW5kLXRhZyBvciBlbmQtZG9jdW1lbnQuIFRoaXMgaXMgc2FtZSBjb250ZW50IGFzIG5ld1JlYWRlciwgYnV0Ci0gaXQgaXMgcmV0dXJuZWQgYXMgYSBzaW5nbGUgc3RyaW5nLgotCi0gVGhyb3dzIGFuIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGUgWG1sVG9rZW5Tb3VyY2UgaXMgbm90Ci0gcG9zaXRpb25lZCBhdCBiZWdpbi10YWcgb3IgYmVnaW4tZG9jdW1lbnQgKGUuZy4sIGlmIGl0IGlzIGF0Ci0gYW4gYXR0cmlidXRlKS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dCgpIj54bWxUZXh0PC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3SW5wdXRTdHJlYW0oKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4gPEI+bmV3SW5wdXRTdHJlYW08L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlJldHVybnMgYSBuZXcgc3RyZWFtIGNvbnRhaW5pbmcgc3RhbmRhcmQgWE1MIHRleHQsIGVuY29kZWQKLSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGVuY29kaW5nLgotCi0gVGhlIGJ5dGUgc3RyZWFtIGNvbnRhaW5zIGNvbnRlbnRzIHN0YXJ0aW5nIGF0IHRoZSBjdXJyZW50Ci0gYmVnaW4tdGFnIG9yIGJlZ2luLWRvY3VtZW50IGFuZCBlbmRpbmcgYXQgdGhlIG1hdGNoaW5nCi0gZW5kLXRhZyBvciBlbmQtZG9jdW1lbnQuICBUaGUgc3BlY2lmaWVkIGVuY29kaW5nIGlzIHVzZWQKLSBhbmQgYWxzbyBlbWl0dGVkIGluIGEgUEkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyZWFtLgotCi0gVGhpcyBpcyBhIGZhaWwtZmFzdCBzdHJlYW0sIHNvIGlmIHRoZSB1bmRlcmx5aW5nIGRhdGEgaXMgY2hhbmdlZAotIHdoaWxlIHRoZSBzdHJlYW0gaXMgYmVpbmcgcmVhZCwgdGhlIHN0cmVhbSB0aHJvd3MgYQotIENvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb24uCi0KLSBUaHJvd3MgYW4gSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoZSBYbWxUb2tlblNvdXJjZSBpcyBub3QKLSBwb3NpdGlvbmVkIGF0IGJlZ2luLXRhZyBvciBiZWdpbi1kb2N1bWVudCAoZS5nLiwgaWYgaXQgaXMgYXQKLSBhbiBhdHRyaWJ1dGUpLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbSgpIj5uZXdJbnB1dFN0cmVhbTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1JlYWRlcigpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdSZWFkZXI8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiA8Qj5uZXdSZWFkZXI8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlJldHVybnMgYSBuZXcgY2hhcmFjdGVyIHJlYWRlciBjb250YWluaW5nIFhNTCB0ZXh0LgotCi0gVGhlIGNvbnRlbnRzIG9mIHRoZSByZWFkZXIgcmVwcmVzZW50cyB0aGUgZG9jdW1lbnQgY29udGVudHMKLSBzdGFydGluZyBhdCB0aGUgY3VycmVudCBiZWdpbi10YWcgb3IgYmVnaW4tZG9jdW1lbnQgYW5kIGVuZGluZyBhdAotIHRoZSBtYXRjaGluZyBlbmQtdGFnIG9yIGVuZC1kb2N1bWVudC4gIE5vIGVuY29kaW5nIGFubm90YXRpb24KLSB3aWxsIGJlIG1hZGUgaW4gdGhlIHRleHQgaXRzZWxmLgotCi0gVGhpcyBpcyBhIGZhaWwtZmFzdCByZWFkZXIsIHNvIGlmIHRoZSB1bmRlcmx5aW5nIGRhdGEgaXMgY2hhbmdlZAotIHdoaWxlIHRoZSByZWFkZXIgaXMgYmVpbmcgcmVhZCwgdGhlIHJlYWRlciB0aHJvd3MgYQotIENvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb24uCi0KLSBUaHJvd3MgYW4gSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoZSBYbWxUb2tlblNvdXJjZSBpcyBub3QKLSBwb3NpdGlvbmVkIGF0IGJlZ2luLXRhZyBvciBiZWdpbi1kb2N1bWVudCAoZS5nLiwgaWYgaXQgaXMgYXQKLSBhbiBhdHRyaWJ1dGUpLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIoKSI+bmV3UmVhZGVyPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3RG9tTm9kZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdEb21Ob2RlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4gPEI+bmV3RG9tTm9kZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+UmV0dXJucyBhIFczQyBET00gTm9kZSBjb250YWluaW5nIHRoZSBYTUwKLSByZXByZXNlbnRlZCBieSB0aGlzIHNvdXJjZS4gIFRoaXMgaXMgYSBjb3B5IG9mIHRoZSBYTUwsIGl0IGlzCi0gbm90IGEgbGl2ZSB3aXRoIHRoZSB1bmRlcmx5aW5nIHN0b3JlIG9mIHRoaXMgdG9rZW4gc291cmNlLgotIElmIHRoaXMgaXMgdGhlIGRvY3VtZW50IG5vZGUsIHRoZW4gYSBEb2N1bWVudCBpcyByZXR1cm5lZCwgZWxzZQotIGEgRG9jdW1lbnRGcmFnbWVudCBpcyByZXR1cm5lZC4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZSgpIj5uZXdEb21Ob2RlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyKSI+PCEtLSAtLT48L0E+PEgzPgotc2F2ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2F2ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy94bWwvc2F4L0NvbnRlbnRIYW5kbGVyLmh0bWwiPkNvbnRlbnRIYW5kbGVyPC9BPiZuYnNwO2NoLAotICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3htbC9zYXgvZXh0L0xleGljYWxIYW5kbGVyLmh0bWwiPkxleGljYWxIYW5kbGVyPC9BPiZuYnNwO2xoKQotICAgICAgICAgIHRocm93cyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3htbC9zYXgvU0FYRXhjZXB0aW9uLmh0bWwiPlNBWEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPldyaXRlcyB0aGUgWE1MIHJlcHJlc2VudGVkIGJ5IHRoaXMgc291cmNlIHRvIHRoZSBnaXZlbiBTQVggY29udGVudCBhbmQKLSBsZXhpY2FsIGhhbmRsZXJzLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIpIj5zYXZlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcveG1sL3NheC9TQVhFeGNlcHRpb24uaHRtbCI+U0FYRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNhdmUoamF2YS5pby5GaWxlKSI+PCEtLSAtLT48L0E+PEgzPgotc2F2ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2F2ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2ZpbGUpCi0gICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+V3JpdGVzIHRoZSBYTUwgcmVwcmVzZW50ZWQgYnkgdGhpcyBzb3VyY2UgdG8gdGhlIGdpdmVuIEZpbGUuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlKSI+c2F2ZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotc2F2ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2F2ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vT3V0cHV0U3RyZWFtLmh0bWwiPk91dHB1dFN0cmVhbTwvQT4mbmJzcDtvcykKLSAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5Xcml0ZXMgdGhlIFhNTCByZXByZXNlbnRlZCBieSB0aGlzIHNvdXJjZSB0byB0aGUgZ2l2ZW4gb3V0cHV0IHN0cmVhbS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSkiPnNhdmU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2F2ZShqYXZhLmlvLldyaXRlcikiPjwhLS0gLS0+PC9BPjxIMz4KLXNhdmU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNhdmU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1dyaXRlci5odG1sIj5Xcml0ZXI8L0E+Jm5ic3A7dykKLSAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5Xcml0ZXMgdGhlIFhNTCByZXByZXNlbnRlZCBieSB0aGlzIHNvdXJjZSB0byB0aGUgZ2l2ZW4gd3JpdGVyLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uV3JpdGVyKSI+c2F2ZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdYTUxJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+PHA+SnVzdCBsaWtlIG5ld1hNTElucHV0U3RyZWFtKCkgYnV0IHdpdGggYW55IG9mIGEgbnVtYmVyIG9mIG9wdGlvbnMuIFVzZSB0aGUgCi0gPGVtPm9wdGlvbnM8L2VtPiBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUgZm9sbG93aW5nOjwvcD4KLSAKLSA8dGFibGU+Ci0gPHRyPjx0aD5UbyBzcGVjaWZ5IHRoaXM8L3RoPjx0aD5Vc2UgdGhpcyBtZXRob2Q8L3RoPjwvdHI+Ci0gPHRyPgotICA8dGQ+VGhlIGNoYXJhY3RlciBlbmNvZGluZyB0byB1c2Ugd2hlbiBjb252ZXJ0aW5nIHRoZSBjaGFyYWN0ZXIKLSAgZGF0YSBpbiB0aGUgWE1MIHRvIGJ5dGVzcy48L3RkPgotICA8dGQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0Q2hhcmFjdGVyRW5jb2RpbmcoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPlhtbE9wdGlvbnMuc2V0Q2hhcmFjdGVyRW5jb2RpbmcoamF2YS5sYW5nLlN0cmluZyk8L0NPREU+PC9BPjwvdGQ+Ci0gPC90cj4KLSA8dHI+Ci0gIDx0ZD5QcmVmaXgtdG8tbmFtZXNwYWNlIG1hcHBpbmdzIHRoYXQgc2hvdWxkIGJlIGFzc3VtZWQKLSAgd2hlbiBzYXZpbmcgdGhpcyBYTUwuIFRoaXMgaXMgdXNlZnVsIHdoZW4gdGhlIHJlc3VsdGluZwotICBYTUwgd2lsbCBiZSBwYXJ0IG9mIGEgbGFyZ2VyIFhNTCBkb2N1bWVudCwgZW5zdXJpbmcgdGhhdCB0aGlzIAotICBpbm5lciBkb2N1bWVudCB3aWxsIHRha2UgYWR2YW50YWdlIG9mIG5hbWVzcGFjZXMgZGVmaW5lZCBpbiAKLSAgdGhlIG91dGVyIGRvY3VtZW50LjwvdGQ+Ci0gIDx0ZD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRTYXZlSW1wbGljaXROYW1lc3BhY2VzKGphdmEudXRpbC5NYXApIj48Q09ERT5YbWxPcHRpb25zLnNldFNhdmVJbXBsaWNpdE5hbWVzcGFjZXMoamF2YS51dGlsLk1hcCk8L0NPREU+PC9BPjwvdGQ+Ci0gPC90cj4KLSA8dHI+Ci0gIDx0ZD5TdWdnZXN0ZWQgbmFtZXNwYWNlIHByZWZpeGVzIHRvIHVzZSB3aGVuIHNhdmluZy4gVXNlZCBvbmx5Ci0gIHdoZW4gYSBuYW1lc3BhY2UgYXR0cmlidXRlIG5lZWRzIHRvIGJlIHN5bnRoZXNpemVkLjwvdGQ+Ci0gIDx0ZD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRTYXZlU3VnZ2VzdGVkUHJlZml4ZXMoamF2YS51dGlsLk1hcCkiPjxDT0RFPlhtbE9wdGlvbnMuc2V0U2F2ZVN1Z2dlc3RlZFByZWZpeGVzKGphdmEudXRpbC5NYXApPC9DT0RFPjwvQT48L3RkPgotIDwvdHI+Ci0gPHRyPgotICA8dGQ+VGhhdCBuYW1lc3BhY2UgYXR0cmlidXRlcyBzaG91bGQgb2NjdXIgZmlyc3QgaW4gZWxlbWVudHMgd2hlbgotIHRoZSBYTUwgaXMgc2F2ZWQuIEJ5IGRlZmF1bHQsIHRoZXkgb2NjdXIgbGFzdC48L3RkPgotICA8dGQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0U2F2ZU5hbWVzcGFjZXNGaXJzdCgpIj48Q09ERT5YbWxPcHRpb25zLnNldFNhdmVOYW1lc3BhY2VzRmlyc3QoKTwvQ09ERT48L0E+PC90ZD4KLSA8L3RyPgotIDx0cj4KLSAgPHRkPlRoZSBYTUwgc2hvdWxkIGJlIHByZXR0eSBwcmludGVkIHdoZW4gc2F2ZWQuIE5vdGUgdGhhdCB0aGlzIAotICBzaG91bGQgb25seSBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcuPC90ZD4KLSAgPHRkPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldFNhdmVQcmV0dHlQcmludCgpIj48Q09ERT5YbWxPcHRpb25zLnNldFNhdmVQcmV0dHlQcmludCgpPC9DT0RFPjwvQT48L3RkPgotIDwvdHI+Ci0gPHRyPgotICA8dGQ+VGhlIG51bWJlciBvZiBzcGFjZXMgdG8gdXNlIHdoZW4gaW5kZW50aW5nIGZvciBwcmV0dHkgcHJpbnRpbmcuIAotICBUaGUgZGVmYXVsdCBpcyAyLjwvdGQ+Ci0gIDx0ZD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRTYXZlUHJldHR5UHJpbnRJbmRlbnQoaW50KSI+PENPREU+WG1sT3B0aW9ucy5zZXRTYXZlUHJldHR5UHJpbnRJbmRlbnQoaW50KTwvQ09ERT48L0E+PC90ZD4KLSA8L3RyPgotIDx0cj4KLSAgPHRkPlRoZSBhZGRpdGlvbmFsIG51bWJlciBvZiBzcGFjZXMgaW5kZW50ZWQgZnJvbSB0aGUgbGVmdAotICBmb3IgcHJldHR5IHByaW50ZWQgWE1MLjwvdGQ+Ci0gIDx0ZD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRTYXZlUHJldHR5UHJpbnRPZmZzZXQoaW50KSI+PENPREU+WG1sT3B0aW9ucy5zZXRTYXZlUHJldHR5UHJpbnRPZmZzZXQoaW50KTwvQ09ERT48L0E+PC90ZD4KLSA8L3RyPgotIDx0cj4KLSAgPHRkPlRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgbmFtZXNwYWNlIGF0dHJpYnV0ZXMgZ2VuZXJhdGVkIGZvciB0aGUgCi0gIHNhdmVkIFhNTC4gTm90ZSB0aGF0IHRoaXMgY2FuIHJlZHVjZSBwZXJmb3JtYW5jZSBzaWduaWZpY2FudGx5LjwvdGQ+Ci0gIDx0ZD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRTYXZlQWdncmVzaXZlTmFtZXNwYWNlcygpIj48Q09ERT5YbWxPcHRpb25zLnNldFNhdmVBZ2dyZXNpdmVOYW1lc3BhY2VzKCk8L0NPREU+PC9BPjwvdGQ+Ci0gPC90cj4KLSA8dHI+Ci0gIDx0ZD5UbyByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIHNhdmVkIGRvY3VtZW50Ci0gIGJ5IGFsbG93aW5nIHRoZSB1c2Ugb2YgdGhlIGRlZmF1bHQgbmFtZXNwYWNlLiBOb3RlIHRoYXQgdGhpcyBjYW4gCi0gIHBvdGVudGlhbGx5IGNoYW5nZSB0aGUgc2VtYW50aWMgbWVhbmluZyBvZiB0aGUgWE1MIGlmIHVucHJlZml4ZWQgUU5hbWVzIGFyZSAKLSAgcHJlc2VudCBhcyB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlIG9yIGVsZW1lbnQuPC90ZD4KLSAgPHRkPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldFVzZURlZmF1bHROYW1lc3BhY2UoKSI+PENPREU+WG1sT3B0aW9ucy5zZXRVc2VEZWZhdWx0TmFtZXNwYWNlKCk8L0NPREU+PC9BPjwvdGQ+Ci0gPC90cj4KLSA8dHI+Ci0gIDx0ZD5UbyBmaWx0ZXIgb3V0IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zIHdpdGggdGhlIHNwZWNpZmllZCB0YXJnZXQgbmFtZS48L3RkPgotICA8dGQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0U2F2ZUZpbHRlclByb2NpbnN0KGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5YbWxPcHRpb25zLnNldFNhdmVGaWx0ZXJQcm9jaW5zdChqYXZhLmxhbmcuU3RyaW5nKTwvQ09ERT48L0E+PC90ZD4KLSA8L3RyPgotIDx0cj4KLSAgPHRkPkNoYW5nZSB0aGUgUU5hbWUgb2YgdGhlIHN5bnRoZXNpemVkIHJvb3QgZWxlbWVudCB3aGVuIHNhdmluZy4gVGhpcyAKLSAgcmVwbGFjZXMgInhtbC1mcmFnbWVudCIgd2l0aCAiZnJhZ21lbnQiIGluIHRoZSBuYW1lc3BhY2UgCi0gIGh0dHA6Ly93d3cub3BlbnVyaS5vcmcvZnJhZ21lbnQ8L3RkPgotICA8dGQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0U2F2ZVVzZU9wZW5GcmFnKCkiPjxDT0RFPlhtbE9wdGlvbnMuc2V0U2F2ZVVzZU9wZW5GcmFnKCk8L0NPREU+PC9BPjwvdGQ+Ci0gPC90cj4KLSA8dHI+Ci0gIDx0ZD5TYXZpbmcgc2hvdWxkIGJlZ2luIG9uIHRoZSBlbGVtZW50J3MgY29udGVudHMuPC90ZD4KLSAgPHRkPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldFNhdmVJbm5lcigpIj48Q09ERT5YbWxPcHRpb25zLnNldFNhdmVJbm5lcigpPC9DT0RFPjwvQT48L3RkPgotIDwvdHI+Ci0gPHRyPgotICA8dGQ+U2F2aW5nIHNob3VsZCBiZWdpbiBvbiB0aGUgZWxlbWVudCwgcmF0aGVyIHRoYW4gaXRzIGNvbnRlbnRzLjwvdGQ+Ci0gIDx0ZD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRTYXZlT3V0ZXIoKSI+PENPREU+WG1sT3B0aW9ucy5zZXRTYXZlT3V0ZXIoKTwvQ09ERT48L0E+PC90ZD4KLSA8L3RyPgotIDx0cj4KLSAgPHRkPlRvIHJlbmFtZSB0aGUgZG9jdW1lbnQgZWxlbWVudCwgb3IgdG8gc3BlY2lmeSB0aGUgZG9jdW1lbnQgZWxlbWVudAotICBmb3IgdGhpcyBYTUwuPC90ZD4KLSAgPHRkPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldFNhdmVTeW50aGV0aWNEb2N1bWVudEVsZW1lbnQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxDT0RFPlhtbE9wdGlvbnMuc2V0U2F2ZVN5bnRoZXRpY0RvY3VtZW50RWxlbWVudChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKTwvQ09ERT48L0E+PC90ZD4KLSA8L3RyPgotIDwvdGFibGU+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1hNTElucHV0U3RyZWFtPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+b3B0aW9uczwvQ09ERT4gLSBBbnkgb2YgdGhlIGRlc2NyaWJlZCBvcHRpb25zLgotPERUPjxCPlJldHVybnM6PC9CPjxERD5BIG5ldyB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj48Q09ERT5YbWxPcHRpb25zPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InhtbFRleHQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgoteG1sVGV4dDwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+eG1sVGV4dDwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPkp1c3QgbGlrZSB4bWxUZXh0KCkgYnV0IHdpdGggb3B0aW9ucy4KLSBPcHRpb25zIG1hcCBtYXkgYmUgbnVsbC4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj54bWxUZXh0PC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj48Q09ERT5YbWxPcHRpb25zPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld0lucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0lucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+IDxCPm5ld0lucHV0U3RyZWFtPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+SnVzdCBsaWtlIG5ld0lucHV0U3RyZWFtKFN0cmluZyBlbmNvZGluZykgYnV0IHdpdGggb3B0aW9ucy4KLSBPcHRpb25zIG1hcCBtYXkgYmUgbnVsbC4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5wdXRTdHJlYW08L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPjxDT0RFPlhtbE9wdGlvbnM8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3UmVhZGVyKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1JlYWRlcjwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+IDxCPm5ld1JlYWRlcjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPkp1c3QgbGlrZSBuZXdSZWFkZXIoKSBidXQgd2l0aCBvcHRpb25zLgotIE9wdGlvbnMgbWFwIG1heSBiZSBudWxsLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3UmVhZGVyPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj48Q09ERT5YbWxPcHRpb25zPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld0RvbU5vZGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3RG9tTm9kZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+IDxCPm5ld0RvbU5vZGU8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5KdXN0IGxpa2UgbmV3RG9tTm9kZSgpIGJ1dCB3aXRoIG9wdGlvbnMuCi0gT3B0aW9ucyBtYXAgbWF5IGJlIG51bGwuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3RG9tTm9kZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+PENPREU+WG1sT3B0aW9uczwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXNhdmU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNhdmU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcveG1sL3NheC9Db250ZW50SGFuZGxlci5odG1sIj5Db250ZW50SGFuZGxlcjwvQT4mbmJzcDtjaCwKLSAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy94bWwvc2F4L2V4dC9MZXhpY2FsSGFuZGxlci5odG1sIj5MZXhpY2FsSGFuZGxlcjwvQT4mbmJzcDtsaCwKLSAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy94bWwvc2F4L1NBWEV4Y2VwdGlvbi5odG1sIj5TQVhFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5Xcml0ZXMgdGhlIFhNTCByZXByZXNlbnRlZCBieSB0aGlzIHNvdXJjZSB0byB0aGUgZ2l2ZW4gU0FYIGNvbnRlbnQgYW5kCi0gbGV4aWNhbCBoYW5kbGVycy4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcveG1sL3NheC9TQVhFeGNlcHRpb24uaHRtbCI+U0FYRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1zYXZlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zYXZlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZmlsZSwKLSAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5Xcml0ZXMgdGhlIFhNTCByZXByZXNlbnRlZCBieSB0aGlzIHNvdXJjZSB0byB0aGUgZ2l2ZW4gRmlsZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotc2F2ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2F2ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vT3V0cHV0U3RyZWFtLmh0bWwiPk91dHB1dFN0cmVhbTwvQT4mbmJzcDtvcywKLSAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5Xcml0ZXMgdGhlIFhNTCByZXByZXNlbnRlZCBieSB0aGlzIHNvdXJjZSB0byB0aGUgZ2l2ZW4gb3V0cHV0IHN0cmVhbS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzYXZlKGphdmEuaW8uV3JpdGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1zYXZlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zYXZlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9Xcml0ZXIuaHRtbCI+V3JpdGVyPC9BPiZuYnNwO3csCi0gICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+V3JpdGVzIHRoZSBYTUwgcmVwcmVzZW50ZWQgYnkgdGhpcyBzb3VyY2UgdG8gdGhlIGdpdmVuIHdyaXRlci4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpbnN0YW5jZVR5cGUoKSI+PCEtLSAtLT48L0E+PEgzPgotaW5zdGFuY2VUeXBlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPmluc3RhbmNlVHlwZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+VGhlIHNhbWUgYXMgZ2V0U2NoZW1hVHlwZSB1bmxlc3MgdGhpcyBpcyBhIHVuaW9uIGluc3RhbmNlCi0gb3IgbmlsIHZhbHVlLgotIDxwPgotIEZvciB1bmlvbnMsIHRoaXMgcmV0dXJucyB0aGUgbm9uLXVuaW9uIGNvbnNpdHVlbnQgdHlwZSBvZgotIHRoaXMgaW5zdGFuY2UuIFRoaXMgdHlwZSBtYXkgY2hhbmdlIGlmIHNldHRlcnMgYXJlIGNhbGxlZAotIHRoYXQgY2F1c2UgdGhlIGluc3RhbmNlIHRvIGNoYW5nZSB0byBhbm90aGVyIGNvbnN0aXR1ZW50Ci0gdHlwZSBvZiB0aGUgdW5pb24uCi0gPHA+Ci0gRm9yIG5pbCB2YWx1ZXMsIHRoaXMgcmV0dXJucyBudWxsLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNpbnN0YW5jZVR5cGUoKSI+aW5zdGFuY2VUeXBlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic3RyaW5nVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotc3RyaW5nVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPnN0cmluZ1ZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPjxDT0RFPlN0cmluZzwvQ09ERT48L0E+LiAqCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3N0cmluZ1ZhbHVlKCkiPnN0cmluZ1ZhbHVlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iYm9vbGVhblZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWJvb2xlYW5WYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+Ym9vbGVhblZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIGJvb2xlYW4uICoKLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjYm9vbGVhblZhbHVlKCkiPmJvb2xlYW5WYWx1ZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImJ5dGVWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1ieXRlVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBieXRlIDxCPmJ5dGVWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSBieXRlLiAqCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2J5dGVWYWx1ZSgpIj5ieXRlVmFsdWU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzaG9ydFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNob3J0VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBzaG9ydCA8Qj5zaG9ydFZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIHNob3J0LiAqCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3Nob3J0VmFsdWUoKSI+c2hvcnRWYWx1ZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImludFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWludFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmludFZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhbiBpbnQuICoKLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjaW50VmFsdWUoKSI+aW50VmFsdWU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJsb25nVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotbG9uZ1ZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgbG9uZyA8Qj5sb25nVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgbG9uZy4gKgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNsb25nVmFsdWUoKSI+bG9uZ1ZhbHVlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iYmlnSW50ZWdlclZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWJpZ0ludGVnZXJWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIj5CaWdJbnRlZ2VyPC9BPiA8Qj5iaWdJbnRlZ2VyVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPjxDT0RFPkJpZ0ludGVnZXI8L0NPREU+PC9BPi4gKgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNiaWdJbnRlZ2VyVmFsdWUoKSI+YmlnSW50ZWdlclZhbHVlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iYmlnRGVjaW1hbFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWJpZ0RlY2ltYWxWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj5CaWdEZWNpbWFsPC9BPiA8Qj5iaWdEZWNpbWFsVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiPjxDT0RFPkJpZ0RlY2ltYWw8L0NPREU+PC9BPi4gKgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNiaWdEZWNpbWFsVmFsdWUoKSI+YmlnRGVjaW1hbFZhbHVlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZmxvYXRWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1mbG9hdFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgZmxvYXQgPEI+ZmxvYXRWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSBmbG9hdC4gKgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNmbG9hdFZhbHVlKCkiPmZsb2F0VmFsdWU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJkb3VibGVWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1kb3VibGVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGRvdWJsZSA8Qj5kb3VibGVWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSBkb3VibGUuICoKLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZG91YmxlVmFsdWUoKSI+ZG91YmxlVmFsdWU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJieXRlQXJyYXlWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1ieXRlQXJyYXlWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGJ5dGVbXSA8Qj5ieXRlQXJyYXlWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSBieXRlIGFycmF5LiAqCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2J5dGVBcnJheVZhbHVlKCkiPmJ5dGVBcnJheVZhbHVlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZW51bVZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWVudW1WYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sIj5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlPC9BPiA8Qj5lbnVtVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLmh0bWwiPjxDT0RFPlN0cmluZ0VudW1BYnN0cmFjdEJhc2U8L0NPREU+PC9BPi4gKgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNlbnVtVmFsdWUoKSI+ZW51bVZhbHVlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iY2FsZW5kYXJWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1jYWxlbmRhclZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj5DYWxlbmRhcjwvQT4gPEI+Y2FsZW5kYXJWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4uICoKLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjY2FsZW5kYXJWYWx1ZSgpIj5jYWxlbmRhclZhbHVlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZGF0ZVZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWRhdGVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvRGF0ZS5odG1sIj5EYXRlPC9BPiA8Qj5kYXRlVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPjxDT0RFPkRhdGU8L0NPREU+PC9BPi4gKgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNkYXRlVmFsdWUoKSI+ZGF0ZVZhbHVlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ0RhdGVWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nRGF0ZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4gPEI+Z0RhdGVWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT4uICoKLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ0RhdGVWYWx1ZSgpIj5nRGF0ZVZhbHVlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ0R1cmF0aW9uVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ0R1cmF0aW9uVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+IDxCPmdEdXJhdGlvblZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwiPjxDT0RFPkdEdXJhdGlvbjwvQ09ERT48L0E+LiAqCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dEdXJhdGlvblZhbHVlKCkiPmdEdXJhdGlvblZhbHVlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icU5hbWVWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1xTmFtZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiA8Qj5xTmFtZVZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj48Q09ERT5RTmFtZTwvQ09ERT48L0E+LiAqCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3FOYW1lVmFsdWUoKSI+cU5hbWVWYWx1ZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Imxpc3RWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1saXN0VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT4gPEI+bGlzdFZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj48Q09ERT5MaXN0PC9DT0RFPjwvQT4gb2YgZnJpZW5kbHkgSmF2YSBvYmplY3RzIChTdHJpbmcsIEludGVnZXIsIEJ5dGUsIFNob3J0LCBMb25nLCBCaWdJbnRlZ2VyLCBEZWNpbWFsLCBGbG9hdCwgRG91YmxlLCBieXRlW10sIENhbGVuZGFyLCBHRHVyYXRpb24pLiAqCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2xpc3RWYWx1ZSgpIj5saXN0VmFsdWU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ4bGlzdFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXhsaXN0VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT4gPEI+eGxpc3RWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+IG9mIFhtbEFueVNpbXBsZVR5cGUgb2JqZWN0cy4gKgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCN4bGlzdFZhbHVlKCkiPnhsaXN0VmFsdWU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJvYmplY3RWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1vYmplY3RWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4gPEI+b2JqZWN0VmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlJldHVybnMgYSB1bmlvbiB2YWx1ZSBhcyBhIGl0cyBuYXR1cmFsIGZyaWVuZGx5IEphdmEgb2JqZWN0IChTdHJpbmcsIEludGVnZXIsIEJ5dGUsIFNob3J0LCBMb25nLCBCaWdJbnRlZ2VyLCBEZWNpbWFsLCBGbG9hdCwgRG91YmxlLCBieXRlW10sIENhbGVuZGFyLCBHRHVyYXRpb24pLiAqCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI29iamVjdFZhbHVlKCkiPm9iamVjdFZhbHVlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0KGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+PENPREU+U3RyaW5nPC9DT0RFPjwvQT4uICoKLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0KGphdmEubGFuZy5TdHJpbmcpIj5zZXQ8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQoYm9vbGVhbikiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPihib29sZWFuJm5ic3A7dik8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgYm9vbGVhbi4gKgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoYm9vbGVhbikiPnNldDwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldChieXRlKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXQ8L0I+KGJ5dGUmbmJzcDt2KTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSBieXRlLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoYnl0ZSkiPnNldDwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldChzaG9ydCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPihzaG9ydCZuYnNwO3YpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIHNob3J0LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoc2hvcnQpIj5zZXQ8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQoaW50KSI+PCEtLSAtLT48L0E+PEgzPgotc2V0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXQ8L0I+KGludCZuYnNwO3YpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhbiBpbnQuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldChpbnQpIj5zZXQ8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQobG9uZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPihsb25nJm5ic3A7dik8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgbG9uZy4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0KGxvbmcpIj5zZXQ8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQoamF2YS5tYXRoLkJpZ0ludGVnZXIpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPkJpZ0ludGVnZXI8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCI+PENPREU+QmlnSW50ZWdlcjwvQ09ERT48L0E+LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoamF2YS5tYXRoLkJpZ0ludGVnZXIpIj5zZXQ8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQoamF2YS5tYXRoLkJpZ0RlY2ltYWwpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiPkJpZ0RlY2ltYWw8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+PENPREU+QmlnRGVjaW1hbDwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldChqYXZhLm1hdGguQmlnRGVjaW1hbCkiPnNldDwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldChmbG9hdCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPihmbG9hdCZuYnNwO3YpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIGZsb2F0LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoZmxvYXQpIj5zZXQ8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQoZG91YmxlKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXQ8L0I+KGRvdWJsZSZuYnNwO3YpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIGRvdWJsZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0KGRvdWJsZSkiPnNldDwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldChieXRlW10pIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oYnl0ZVtdJm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSBieXRlIGFycmF5LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoYnl0ZVtdKSI+c2V0PC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuU3RyaW5nRW51bUFic3RyYWN0QmFzZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuaHRtbCI+U3RyaW5nRW51bUFic3RyYWN0QmFzZTwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sIj48Q09ERT5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLlN0cmluZ0VudW1BYnN0cmFjdEJhc2UpIj5zZXQ8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQoamF2YS51dGlsLkNhbGVuZGFyKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXQ8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldChqYXZhLnV0aWwuQ2FsZW5kYXIpIj5zZXQ8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQoamF2YS51dGlsLkRhdGUpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPkRhdGU8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+PENPREU+RGF0ZTwvQ09ERT48L0E+LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoamF2YS51dGlsLkRhdGUpIj5zZXQ8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZTwvQ09ERT48L0E+LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj5zZXQ8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb25TcGVjaWZpY2F0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXQ8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCI+PENPREU+R0R1cmF0aW9uPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvblNwZWNpZmljYXRpb24pIj5zZXQ8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+PENPREU+UU5hbWU8L0NPREU+PC9BPi4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5zZXQ8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQoamF2YS51dGlsLkxpc3QpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoamF2YS51dGlsLkxpc3QpIj5zZXQ8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTdHJpbmdWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTdHJpbmdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+Z2V0U3RyaW5nVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+PENPREU+U3RyaW5nPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldFN0cmluZ1ZhbHVlKCkiPmdldFN0cmluZ1ZhbHVlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0Qm9vbGVhblZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEJvb2xlYW5WYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+Z2V0Qm9vbGVhblZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIGJvb2xlYW4uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldEJvb2xlYW5WYWx1ZSgpIj5nZXRCb29sZWFuVmFsdWU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRCeXRlVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Qnl0ZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYnl0ZSA8Qj5nZXRCeXRlVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgYnl0ZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0Qnl0ZVZhbHVlKCkiPmdldEJ5dGVWYWx1ZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFNob3J0VmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U2hvcnRWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHNob3J0IDxCPmdldFNob3J0VmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgc2hvcnQuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldFNob3J0VmFsdWUoKSI+Z2V0U2hvcnRWYWx1ZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEludFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEludFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldEludFZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhbiBpbnQuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldEludFZhbHVlKCkiPmdldEludFZhbHVlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TG9uZ1ZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldExvbmdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGxvbmcgPEI+Z2V0TG9uZ1ZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIGxvbmcuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldExvbmdWYWx1ZSgpIj5nZXRMb25nVmFsdWU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRCaWdJbnRlZ2VyVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0QmlnSW50ZWdlclZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPkJpZ0ludGVnZXI8L0E+IDxCPmdldEJpZ0ludGVnZXJWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCI+PENPREU+QmlnSW50ZWdlcjwvQ09ERT48L0E+LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRCaWdJbnRlZ2VyVmFsdWUoKSI+Z2V0QmlnSW50ZWdlclZhbHVlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0QmlnRGVjaW1hbFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEJpZ0RlY2ltYWxWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj5CaWdEZWNpbWFsPC9BPiA8Qj5nZXRCaWdEZWNpbWFsVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiPjxDT0RFPkJpZ0RlY2ltYWw8L0NPREU+PC9BPi4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0QmlnRGVjaW1hbFZhbHVlKCkiPmdldEJpZ0RlY2ltYWxWYWx1ZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEZsb2F0VmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RmxvYXRWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGZsb2F0IDxCPmdldEZsb2F0VmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgZmxvYXQuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldEZsb2F0VmFsdWUoKSI+Z2V0RmxvYXRWYWx1ZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldERvdWJsZVZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldERvdWJsZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgZG91YmxlIDxCPmdldERvdWJsZVZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIGRvdWJsZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0RG91YmxlVmFsdWUoKSI+Z2V0RG91YmxlVmFsdWU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRCeXRlQXJyYXlWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRCeXRlQXJyYXlWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGJ5dGVbXSA8Qj5nZXRCeXRlQXJyYXlWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSBieXRlIGFycmF5LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRCeXRlQXJyYXlWYWx1ZSgpIj5nZXRCeXRlQXJyYXlWYWx1ZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEVudW1WYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRFbnVtVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuaHRtbCI+U3RyaW5nRW51bUFic3RyYWN0QmFzZTwvQT4gPEI+Z2V0RW51bVZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sIj48Q09ERT5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldEVudW1WYWx1ZSgpIj5nZXRFbnVtVmFsdWU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRDYWxlbmRhclZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldENhbGVuZGFyVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiA8Qj5nZXRDYWxlbmRhclZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPi4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0Q2FsZW5kYXJWYWx1ZSgpIj5nZXRDYWxlbmRhclZhbHVlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RGF0ZVZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldERhdGVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvRGF0ZS5odG1sIj5EYXRlPC9BPiA8Qj5nZXREYXRlVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPjxDT0RFPkRhdGU8L0NPREU+PC9BPi4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0RGF0ZVZhbHVlKCkiPmdldERhdGVWYWx1ZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEdEYXRlVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0R0RhdGVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+IDxCPmdldEdEYXRlVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZTwvQ09ERT48L0E+LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRHRGF0ZVZhbHVlKCkiPmdldEdEYXRlVmFsdWU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRHRHVyYXRpb25WYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRHRHVyYXRpb25WYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwiPkdEdXJhdGlvbjwvQT4gPEI+Z2V0R0R1cmF0aW9uVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCI+PENPREU+R0R1cmF0aW9uPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldEdEdXJhdGlvblZhbHVlKCkiPmdldEdEdXJhdGlvblZhbHVlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0UU5hbWVWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRRTmFtZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiA8Qj5nZXRRTmFtZVZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj48Q09ERT5RTmFtZTwvQ09ERT48L0E+LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRRTmFtZVZhbHVlKCkiPmdldFFOYW1lVmFsdWU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRMaXN0VmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TGlzdFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+IDxCPmdldExpc3RWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+IG9mIGZyaWVuZGx5IEphdmEgb2JqZWN0cyAoU3RyaW5nLCBJbnRlZ2VyLCBCeXRlLCBTaG9ydCwgTG9uZywgQmlnSW50ZWdlciwgRGVjaW1hbCwgRmxvYXQsIERvdWJsZSwgYnl0ZVtdLCBDYWxlbmRhciwgR0R1cmF0aW9uKS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0TGlzdFZhbHVlKCkiPmdldExpc3RWYWx1ZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InhnZXRMaXN0VmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgoteGdldExpc3RWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPiA8Qj54Z2V0TGlzdFZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj48Q09ERT5MaXN0PC9DT0RFPjwvQT4gb2YgWG1sQW55U2ltcGxlVHlwZSBvYmplY3RzLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCN4Z2V0TGlzdFZhbHVlKCkiPnhnZXRMaXN0VmFsdWU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRPYmplY3RWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRPYmplY3RWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4gPEI+Z2V0T2JqZWN0VmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlJldHVybnMgYSB1bmlvbiB2YWx1ZSBhcyBhIGl0cyBuYXR1cmFsIGZyaWVuZGx5IEphdmEgb2JqZWN0IChTdHJpbmcsIEludGVnZXIsIEJ5dGUsIFNob3J0LCBMb25nLCBCaWdJbnRlZ2VyLCBEZWNpbWFsLCBGbG9hdCwgRG91YmxlLCBieXRlW10sIENhbGVuZGFyLCBHRHVyYXRpb24pLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRPYmplY3RWYWx1ZSgpIj5nZXRPYmplY3RWYWx1ZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRTdHJpbmdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0U3RyaW5nVmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPjxDT0RFPlN0cmluZzwvQ09ERT48L0E+LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0U3RyaW5nVmFsdWU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRCb29sZWFuVmFsdWUoYm9vbGVhbikiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEJvb2xlYW5WYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0Qm9vbGVhblZhbHVlPC9CPihib29sZWFuJm5ic3A7dik8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgYm9vbGVhbi4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0Qm9vbGVhblZhbHVlKGJvb2xlYW4pIj5zZXRCb29sZWFuVmFsdWU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRCeXRlVmFsdWUoYnl0ZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEJ5dGVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0Qnl0ZVZhbHVlPC9CPihieXRlJm5ic3A7dik8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgYnl0ZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0Qnl0ZVZhbHVlKGJ5dGUpIj5zZXRCeXRlVmFsdWU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRTaG9ydFZhbHVlKHNob3J0KSI+PCEtLSAtLT48L0E+PEgzPgotc2V0U2hvcnRWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0U2hvcnRWYWx1ZTwvQj4oc2hvcnQmbmJzcDt2KTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSBzaG9ydC4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0U2hvcnRWYWx1ZShzaG9ydCkiPnNldFNob3J0VmFsdWU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRJbnRWYWx1ZShpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRJbnRWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0SW50VmFsdWU8L0I+KGludCZuYnNwO3YpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhbiBpbnQuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEludFZhbHVlKGludCkiPnNldEludFZhbHVlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0TG9uZ1ZhbHVlKGxvbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRMb25nVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldExvbmdWYWx1ZTwvQj4obG9uZyZuYnNwO3YpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIGxvbmcuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldExvbmdWYWx1ZShsb25nKSI+c2V0TG9uZ1ZhbHVlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0QmlnSW50ZWdlclZhbHVlKGphdmEubWF0aC5CaWdJbnRlZ2VyKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0QmlnSW50ZWdlclZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRCaWdJbnRlZ2VyVmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIj5CaWdJbnRlZ2VyPC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPjxDT0RFPkJpZ0ludGVnZXI8L0NPREU+PC9BPi4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0QmlnSW50ZWdlclZhbHVlKGphdmEubWF0aC5CaWdJbnRlZ2VyKSI+c2V0QmlnSW50ZWdlclZhbHVlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0QmlnRGVjaW1hbFZhbHVlKGphdmEubWF0aC5CaWdEZWNpbWFsKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0QmlnRGVjaW1hbFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRCaWdEZWNpbWFsVmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj5CaWdEZWNpbWFsPC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiPjxDT0RFPkJpZ0RlY2ltYWw8L0NPREU+PC9BPi4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0QmlnRGVjaW1hbFZhbHVlKGphdmEubWF0aC5CaWdEZWNpbWFsKSI+c2V0QmlnRGVjaW1hbFZhbHVlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0RmxvYXRWYWx1ZShmbG9hdCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEZsb2F0VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldEZsb2F0VmFsdWU8L0I+KGZsb2F0Jm5ic3A7dik8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgZmxvYXQuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEZsb2F0VmFsdWUoZmxvYXQpIj5zZXRGbG9hdFZhbHVlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0RG91YmxlVmFsdWUoZG91YmxlKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0RG91YmxlVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldERvdWJsZVZhbHVlPC9CPihkb3VibGUmbmJzcDt2KTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSBkb3VibGUuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldERvdWJsZVZhbHVlKGRvdWJsZSkiPnNldERvdWJsZVZhbHVlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0Qnl0ZUFycmF5VmFsdWUoYnl0ZVtdKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0Qnl0ZUFycmF5VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldEJ5dGVBcnJheVZhbHVlPC9CPihieXRlW10mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIGJ5dGUgYXJyYXkuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEJ5dGVBcnJheVZhbHVlKGJ5dGVbXSkiPnNldEJ5dGVBcnJheVZhbHVlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0RW51bVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuU3RyaW5nRW51bUFic3RyYWN0QmFzZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEVudW1WYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0RW51bVZhbHVlPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuaHRtbCI+U3RyaW5nRW51bUFic3RyYWN0QmFzZTwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sIj48Q09ERT5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEVudW1WYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlN0cmluZ0VudW1BYnN0cmFjdEJhc2UpIj5zZXRFbnVtVmFsdWU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcikiPjwhLS0gLS0+PC9BPjxIMz4KLXNldENhbGVuZGFyVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldENhbGVuZGFyVmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+c2V0Q2FsZW5kYXJWYWx1ZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldERhdGVWYWx1ZShqYXZhLnV0aWwuRGF0ZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldERhdGVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0RGF0ZVZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+RGF0ZTwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvRGF0ZS5odG1sIj48Q09ERT5EYXRlPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldERhdGVWYWx1ZShqYXZhLnV0aWwuRGF0ZSkiPnNldERhdGVWYWx1ZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEdEYXRlVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldEdEYXRlVmFsdWU8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSkiPnNldEdEYXRlVmFsdWU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRHRHVyYXRpb25WYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvbikiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEdEdXJhdGlvblZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRHRHVyYXRpb25WYWx1ZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCI+R0R1cmF0aW9uPC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD48Qj5EZXNjcmlwdGlvbiBjb3BpZWQgZnJvbSBpbnRlcmZhY2U6IDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCI+PENPREU+R0R1cmF0aW9uPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEdEdXJhdGlvblZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uKSI+c2V0R0R1cmF0aW9uVmFsdWU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRRTmFtZVZhbHVlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRRTmFtZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRRTmFtZVZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT48L0NPREU+PC9CPjwvREQ+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+PENPREU+UU5hbWU8L0NPREU+PC9BPi4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0UU5hbWVWYWx1ZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+c2V0UU5hbWVWYWx1ZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldExpc3RWYWx1ZShqYXZhLnV0aWwuTGlzdCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldExpc3RWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0TGlzdFZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj48Q09ERT5MaXN0PC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldExpc3RWYWx1ZShqYXZhLnV0aWwuTGlzdCkiPnNldExpc3RWYWx1ZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldE9iamVjdFZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRPYmplY3RWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0T2JqZWN0VmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhbiBhcmJpdHJhcnkgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+PENPREU+T2JqZWN0PC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldE9iamVjdFZhbHVlKGphdmEubGFuZy5PYmplY3QpIj5zZXRPYmplY3RWYWx1ZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im9iamVjdFNldChqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotb2JqZWN0U2V0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5vYmplY3RTZXQ8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhbiBhcmJpdHJhcnkgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+PENPREU+T2JqZWN0PC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI29iamVjdFNldChqYXZhLmxhbmcuT2JqZWN0KSI+b2JqZWN0U2V0PC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+U2ltcGxlVmFsdWU8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWIENMQVNTJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJGaWx0ZXJYbWxPYmplY3QuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMzM4NzIuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyMDkgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1OSBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLUdEYXRlIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlLEdEYXRlIGNsYXNzIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJHRGF0ZSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkdEYXRlLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgR0RhdGU8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZTwvQj4KLTwvUFJFPgotPERMPgotPERUPjxCPkFsbCBJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIj5TZXJpYWxpemFibGU8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGZpbmFsIGNsYXNzIDxCPkdEYXRlPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48RFQ+aW1wbGVtZW50cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9TZXJpYWxpemFibGUuaHRtbCI+U2VyaWFsaXphYmxlPC9BPjwvREw+Ci0KLTxQPgotUmVwcmVzZW50cyBhbiBYTUwgU2NoZW1hLWNvbXBhdGlibGUgR3JlZ29yaWFuIGRhdGUuCi0gPHA+Ci0gVGhlcmUgYXJlIG1hbnkgZGF0ZSB0eXBlcyBpbiBYTUwgU2NoZW1hLCBhbmQgdGhpcyB0eXBlCi0gcmVwcmVzZW50cyB0aGUgbmF0dXJhbCB1bmlvbiBvZiBhbGwgdGhvc2UgdHlwZXMuICBBIEdEYXRlCi0gY2FuIGhvbGQgYW55IHN1YnNldCBvZiBkYXRlIGZpZWxkcyAoWWVhciwgTW9udGgsIERheSwgVGltZSwKLSBUaW1lem9uZSwgb3Igc29tZSBjb21iaW5hdGlvbikuIFdoZXJldmVyIHRoZSBzcGVjaWZpY2F0aW9uCi0gcHJvdmlkZXMgZ3VpZGFuY2UsIHRoZSBndWlkZWxpbmVzIGluIHRoZQotIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8iPlhNTCBTY2hlbWEgMS4wIHNwZWNpZmljYXRpb248L2E+Ci0gKHBsdXMgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDUveG1sc2NoZW1hLWVycmF0YSI+cHVibGlzaGVkIGVycmF0YTwvYT4pIGFyZSBmb2xsb3dlZC4KLSA8cD4KLSBJbnN0YW5jZXMgbWF5IHNlcGFyYXRlbHkgaGF2ZSB2YWx1ZXMgb3Igbm8gdmFsdWVzIGZvcgotIHRoZSB5ZWFyLCBtb250aCwgZGF5LW9mLW1vbnRoLCBhbmQgdGltZS1vZi1kYXkuIE5vdCBhbGwKLSBvcGVyYXRpb25zIGFyZSBtZWFuaW5nZnVsIG9uIGFsbCBjb21iaW5hdGlvbnMuCi08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9zZXJpYWxpemVkLWZvcm0uaHRtbCIgVEFSR0VUPSJvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlIj5TZXJpYWxpemVkIEZvcm08L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjSEFTX0RBWSI+SEFTX0RBWTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjSEFTX01PTlRIIj5IQVNfTU9OVEg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI0hBU19USU1FIj5IQVNfVElNRTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjSEFTX1RJTUVaT05FIj5IQVNfVElNRVpPTkU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI0hBU19ZRUFSIj5IQVNfWUVBUjwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwjR0RhdGUoamF2YS51dGlsLkNhbGVuZGFyKSI+R0RhdGU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiZuYnNwO2NhbGVuZGFyKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29uc3RydWN0cyBhIEdEYXRlIGJhc2VkIG9uIGEgamF2YS51dGlsLkNhbGVuZGFyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI0dEYXRlKGphdmEubGFuZy5DaGFyU2VxdWVuY2UpIj5HRGF0ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvQ2hhclNlcXVlbmNlLmh0bWwiPkNoYXJTZXF1ZW5jZTwvQT4mbmJzcDtzdHJpbmcpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb25zdHJ1Y3RzIGEgR0RhdGUgYmFzZWQgb24gYSBsZXhpY2FsIHJlcHJlc2VudGF0aW9uLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI0dEYXRlKGphdmEudXRpbC5EYXRlKSI+R0RhdGU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+RGF0ZTwvQT4mbmJzcDtkYXRlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29uc3RydWN0cyBhIEdEYXRlIGJhc2VkIG9uIGEgamF2YS51dGlsLkRhdGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwjR0RhdGUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj5HRGF0ZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtnZGF0ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdHMgYSBHRGF0ZSBiYXNlZCBvbiBhbm90aGVyIEdEYXRlU3BlY2lmaWNhdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCNHRGF0ZShpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBqYXZhLm1hdGguQmlnRGVjaW1hbCkiPkdEYXRlPC9BPjwvQj4oaW50Jm5ic3A7eWVhciwKLSAgICAgIGludCZuYnNwO21vbnRoLAotICAgICAgaW50Jm5ic3A7ZGF5LAotICAgICAgaW50Jm5ic3A7aG91ciwKLSAgICAgIGludCZuYnNwO21pbnV0ZSwKLSAgICAgIGludCZuYnNwO3NlY29uZCwKLSAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj5CaWdEZWNpbWFsPC9BPiZuYnNwO2ZyYWN0aW9uKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29uc3RydWN0cyBhIEdEYXRlIHdpdGggdGhlIHNwZWNpZmllZCB5ZWFyLCBtb250aCwgZGF5LAotIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBhbmQgb3B0aW9uYWwgZnJhY3Rpb25hbCBzZWNvbmRzLCBpbgotIGFuIHVuc3BlY2lmaWVkIHRpbWV6b25lLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI0dEYXRlKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGphdmEubWF0aC5CaWdEZWNpbWFsLCBpbnQsIGludCwgaW50KSI+R0RhdGU8L0E+PC9CPihpbnQmbmJzcDt5ZWFyLAotICAgICAgaW50Jm5ic3A7bW9udGgsCi0gICAgICBpbnQmbmJzcDtkYXksCi0gICAgICBpbnQmbmJzcDtob3VyLAotICAgICAgaW50Jm5ic3A7bWludXRlLAotICAgICAgaW50Jm5ic3A7c2Vjb25kLAotICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiPkJpZ0RlY2ltYWw8L0E+Jm5ic3A7ZnJhY3Rpb24sCi0gICAgICBpbnQmbmJzcDt0elNpZ24sCi0gICAgICBpbnQmbmJzcDt0ekhvdXIsCi0gICAgICBpbnQmbmJzcDt0ek1pbnV0ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdHMgYW4gYWJzb2x1dGUgR0RhdGUgd2l0aCB0aGUgc3BlY2lmaWVkIHllYXIsCi0gbW9udGgsIGRheSwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFuZCBvcHRpb25hbCBmcmFjdGlvbmFsCi0gc2Vjb25kcywgYW5kIGluIHRoZSB0aW1lem9uZSBzcGVjaWZpZWQuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI2FkZChvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvblNwZWNpZmljYXRpb24pIj5hZGQ8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCI+R0R1cmF0aW9uU3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtkdXJhdGlvbik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0FkZHMgYSBkdXJhdGlvbiB0byB0aGlzIEdEYXRlLCBhbmQgcmV0dXJucyBhIG5ldyBHRGF0ZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwjY2Fub25pY2FsU3RyaW5nKCkiPmNhbm9uaWNhbFN0cmluZzwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBjYW5vbmljYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI2NvbXBhcmVUb0dEYXRlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+Y29tcGFyZVRvR0RhdGU8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+Jm5ic3A7ZGF0ZXNwZWMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb21wYXJpc29uIHRvIGFub3RoZXIgR0RhdGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0dEYXRlIGlzIGFuIGltbXV0YWJsZSBjbGFzcywgYW5kIGVxdWFsaXR5IGlzIGNvbXB1dGVkIGJhc2VkCi0gb24gaXRzIGNhbm9uaWNhbCB2YWx1ZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCNnZXRCdWlsdGluVHlwZUNvZGUoKSI+Z2V0QnVpbHRpblR5cGVDb2RlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgYnVpbHRpbiB0eXBlIGNvZGUgZm9yIHRoZSBzaGFwZSBvZiB0aGUgaW5mb3JtYXRpb24KLSBjb250YWluZWQgaW4gdGhpcyBpbnN0YW5jZSwgb3IgMCBpZiB0aGUKLSBpbnN0YW5jZSBkb2Vzbid0IGNvbnRhaW4gaW5mb3JtYXRpb24gY29ycmVzcG9uZGluZyB0byBhCi0gU2NoZW1hIHR5cGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ2FsZW5kYXIuaHRtbCI+WG1sQ2FsZW5kYXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCNnZXRDYWxlbmRhcigpIj5nZXRDYWxlbmRhcjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHJpZXZlcyB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgdGltZSBhcyBhbiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbENhbGVuZGFyLmh0bWwiPjxDT0RFPlhtbENhbGVuZGFyPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvRGF0ZS5odG1sIj5EYXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwjZ2V0RGF0ZSgpIj5nZXREYXRlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0cmlldmVzIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCB0aW1lIGFzIGEgamF2YS51dGlsLkRhdGUKLSBpbnN0YW5jZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCNnZXREYXkoKSI+Z2V0RGF5PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7R2V0cyB0aGUgZGF5LW9mLW1vbnRoLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI2dldEZsYWdzKCkiPmdldEZsYWdzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIGNvbWJpbmF0aW9uIG9mIGZsYWdzIGluZGljYXRpbmcgdGhlIGluZm9ybWF0aW9uCi0gY29udGFpbmVkIGJ5IHRoaXMgR0RhdGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj5CaWdEZWNpbWFsPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwjZ2V0RnJhY3Rpb24oKSI+Z2V0RnJhY3Rpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSBmcmFjdGlvbi1vZi1zZWNvbmQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwjZ2V0SG91cigpIj5nZXRIb3VyPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7R2V0cyB0aGUgaG91ci1vZi1kYXkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwjZ2V0SnVsaWFuRGF0ZSgpIj5nZXRKdWxpYW5EYXRlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgSnVsaWFuIGRhdGUgY29ycmVzcG9uZGluZyB0byB0aGlzIEdyZWdvcmlhbiBkYXRlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI2dldE1pbGxpc2Vjb25kKCkiPmdldE1pbGxpc2Vjb25kPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7R2V0cyB0aGUgcm91bmRlZCBtaWxsaXNlY29uZCB2YWx1ZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCNnZXRNaW51dGUoKSI+Z2V0TWludXRlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7R2V0cyB0aGUgbWludXRlLW9mLWhvdXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwjZ2V0TW9udGgoKSI+Z2V0TW9udGg8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSBtb250aC1vZi15ZWFyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI2dldFNlY29uZCgpIj5nZXRTZWNvbmQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSBzZWNvbmQtb2YtbWludXRlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI2dldFRpbWVab25lSG91cigpIj5nZXRUaW1lWm9uZUhvdXI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSB0aW1lIHpvbmUgaG91ci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCNnZXRUaW1lWm9uZU1pbnV0ZSgpIj5nZXRUaW1lWm9uZU1pbnV0ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0dldHMgdGhlIHRpbWUgem9uZSBtaW51dGVzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI2dldFRpbWVab25lU2lnbigpIj5nZXRUaW1lWm9uZVNpZ248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSB0aW1lIHpvbmUgc2lnbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCNnZXRZZWFyKCkiPmdldFllYXI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSB5ZWFyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCNoYXNEYXRlKCkiPmhhc0RhdGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoaXMgZGF0ZS90aW1lIHNwZWNpZmljYXRpb24gc3BlY2lmaWVzIGEgZnVsbCBkYXRlICh5ZWFyLCBtb250aCwgZGF5KTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCNoYXNEYXkoKSI+aGFzRGF5PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiB0aGlzIGRhdGUvdGltZSBzcGVjaWZpY2F0aW9uIHNwZWNpZmllcyBhIGRheS1vZi1tb250aC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBoYXNoIGNvZGUgZm9yIHRoaXMgR0RhdGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI2hhc01vbnRoKCkiPmhhc01vbnRoPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiB0aGlzIGRhdGUvdGltZSBzcGVjaWZpY2F0aW9uIHNwZWNpZmllcyBhIG1vbnRoLW9mLXllYXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI2hhc1RpbWUoKSI+aGFzVGltZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgdGhpcyBkYXRlL3RpbWUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSB0aW1lLW9mLWRheS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwjaGFzVGltZVpvbmUoKSI+aGFzVGltZVpvbmU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoaXMgZGF0ZS90aW1lIHNwZWNpZmljYXRpb24gc3BlY2lmaWVzIGEgdGltZXpvbmUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sI2hhc1llYXIoKSI+aGFzWWVhcjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgdGhpcyBkYXRlL3RpbWUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSB5ZWFyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCNpc0ltbXV0YWJsZSgpIj5pc0ltbXV0YWJsZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdHJ1ZTogYWxsIEdEYXRlIGluc3RhbmNlcyBhcmUgaW1tdXRhYmxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCNpc1ZhbGlkKCkiPmlzVmFsaWQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoaXMgR0RhdGUgY29ycmVzcG9uZHMgdG8gYSB2YWxpZCBncmVnb3JpYW4gZGF0ZSB2YWx1ZQotIGluIFhNTCBzY2hlbWEuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCNzdWJ0cmFjdChvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvblNwZWNpZmljYXRpb24pIj5zdWJ0cmFjdDwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPiZuYnNwO2R1cmF0aW9uKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QWRkcyBhIGR1cmF0aW9uIHRvIHRoaXMgR0RhdGUsIGFuZCByZXR1cm5zIGEgbmV3IEdEYXRlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBuYXR1cmFsIHN0cmluZyByZXByZXNlbnRhdGlvbi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNjbG9uZSgpIj5jbG9uZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KCkiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZykiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZywgaW50KSI+d2FpdDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0iY29uc3RydWN0b3JfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJHRGF0ZShqYXZhLmxhbmcuQ2hhclNlcXVlbmNlKSI+PCEtLSAtLT48L0E+PEgzPgotR0RhdGU8L0gzPgotPFBSRT4KLXB1YmxpYyA8Qj5HRGF0ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9DaGFyU2VxdWVuY2UuaHRtbCI+Q2hhclNlcXVlbmNlPC9BPiZuYnNwO3N0cmluZyk8L1BSRT4KLTxETD4KLTxERD5Db25zdHJ1Y3RzIGEgR0RhdGUgYmFzZWQgb24gYSBsZXhpY2FsIHJlcHJlc2VudGF0aW9uLgotPFA+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJHRGF0ZShpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBqYXZhLm1hdGguQmlnRGVjaW1hbCkiPjwhLS0gLS0+PC9BPjxIMz4KLUdEYXRlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+R0RhdGU8L0I+KGludCZuYnNwO3llYXIsCi0gICAgICAgICAgICAgaW50Jm5ic3A7bW9udGgsCi0gICAgICAgICAgICAgaW50Jm5ic3A7ZGF5LAotICAgICAgICAgICAgIGludCZuYnNwO2hvdXIsCi0gICAgICAgICAgICAgaW50Jm5ic3A7bWludXRlLAotICAgICAgICAgICAgIGludCZuYnNwO3NlY29uZCwKLSAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT4mbmJzcDtmcmFjdGlvbik8L1BSRT4KLTxETD4KLTxERD5Db25zdHJ1Y3RzIGEgR0RhdGUgd2l0aCB0aGUgc3BlY2lmaWVkIHllYXIsIG1vbnRoLCBkYXksCi0gaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFuZCBvcHRpb25hbCBmcmFjdGlvbmFsIHNlY29uZHMsIGluCi0gYW4gdW5zcGVjaWZpZWQgdGltZXpvbmUuCi0gPHA+Ci0gTm90ZSB0aGF0IGJ5IG5vdCBzcGVjaWZ5aW5nIHRoZSB0aW1lem9uZSB0aGUgR0RhdGUKLSBiZWNvbWVzIHBhcnRpYWxseSB1bm9yZGVyZWQgd2l0aCByZXNwZWN0IHRvIHRpbWVzIHRoYXQKLSBkbyBoYXZlIGEgc3BlY2lmaWVkIHRpbWV6b25lLgotPFA+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJHRGF0ZShpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBqYXZhLm1hdGguQmlnRGVjaW1hbCwgaW50LCBpbnQsIGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLUdEYXRlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+R0RhdGU8L0I+KGludCZuYnNwO3llYXIsCi0gICAgICAgICAgICAgaW50Jm5ic3A7bW9udGgsCi0gICAgICAgICAgICAgaW50Jm5ic3A7ZGF5LAotICAgICAgICAgICAgIGludCZuYnNwO2hvdXIsCi0gICAgICAgICAgICAgaW50Jm5ic3A7bWludXRlLAotICAgICAgICAgICAgIGludCZuYnNwO3NlY29uZCwKLSAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT4mbmJzcDtmcmFjdGlvbiwKLSAgICAgICAgICAgICBpbnQmbmJzcDt0elNpZ24sCi0gICAgICAgICAgICAgaW50Jm5ic3A7dHpIb3VyLAotICAgICAgICAgICAgIGludCZuYnNwO3R6TWludXRlKTwvUFJFPgotPERMPgotPEREPkNvbnN0cnVjdHMgYW4gYWJzb2x1dGUgR0RhdGUgd2l0aCB0aGUgc3BlY2lmaWVkIHllYXIsCi0gbW9udGgsIGRheSwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFuZCBvcHRpb25hbCBmcmFjdGlvbmFsCi0gc2Vjb25kcywgYW5kIGluIHRoZSB0aW1lem9uZSBzcGVjaWZpZWQuCi0gPHA+Ci0gSWYgeW91IHdpc2ggdG8gaGF2ZSBhIHRpbWUgb3IgZGF0ZSB0aGF0IGlzbid0IGluIGEgc3BlY2lmaWVkIHRpbWV6b25lLAotIHRoZW4gdXNlIHRoZSBjb25zdHJ1Y3RvciB0aGF0IGRvZXMgbm90IGluY2x1ZGUgdGhlIHRpbWV6b25lIGFyZ3VtZW50cy4KLTxQPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iR0RhdGUoamF2YS51dGlsLkRhdGUpIj48IS0tIC0tPjwvQT48SDM+Ci1HRGF0ZTwvSDM+Ci08UFJFPgotcHVibGljIDxCPkdEYXRlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+RGF0ZTwvQT4mbmJzcDtkYXRlKTwvUFJFPgotPERMPgotPEREPkNvbnN0cnVjdHMgYSBHRGF0ZSBiYXNlZCBvbiBhIGphdmEudXRpbC5EYXRlLgotIDxwPgotIFRoZSBjdXJyZW50IG9mZnNldCBvZiB0aGUgZGVmYXVsdCB0aW1lem9uZSBpcyB1c2VkIGFzIHRoZSB0aW1lem9uZS4KLSA8cD4KLSBGb3IgZXhhbXBsZSwgaWYgZWFzdGVybiBkYXlsaWdodCB0aW1lIGlzIGluIGVmZmVjdCBhdCB0aGUgZ2l2ZW4KLSBkYXRlLCB0aGUgdGltZXpvbmUgb24gdGhlIGVhc3QgY29hc3Qgb2YgdGhlIHVuaXRlZCBzdGF0ZXMKLSB0cmFuc2xhdGVzIHRvIEdNVC0wNTowMCAoRVNUKSArIDE6MDAgKERUIG9mZnNldCkgPT0gR01ULTA0OjAwLgotPFA+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJHRGF0ZShqYXZhLnV0aWwuQ2FsZW5kYXIpIj48IS0tIC0tPjwvQT48SDM+Ci1HRGF0ZTwvSDM+Ci08UFJFPgotcHVibGljIDxCPkdEYXRlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiZuYnNwO2NhbGVuZGFyKTwvUFJFPgotPERMPgotPEREPkNvbnN0cnVjdHMgYSBHRGF0ZSBiYXNlZCBvbiBhIGphdmEudXRpbC5DYWxlbmRhci4KLSA8cD4KLSBJZiB0aGUgY2FsZW5kYXIgZG9lcyBub3QgaGF2ZSBzb21lIGZpZWxkcyBzZXQsIHRoZSBzYW1lIGFic2VuY2UKLSBvZiBpbmZvcm1hdGlvbiBpcyByZWZsZWN0ZWQgaW4gdGhlIEdEYXRlLiAgTm90ZSB0aGF0Ci0gamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyIGZpbGxzIGluIGFsbCBmaWVsZHMgYXMgc29vbiBhcyBhbnkKLSBhcmUgZmV0Y2hlZCwgc28gY29uc3RydWN0aW5nIGEgR0RhdGUgd2l0aCB0aGUgc2FtZSBjYWxlbmRhciBvYmplY3QKLSB0d2ljZSBtYXkgcmVzdWx0IGluIGEgZGlmZmVyZW50IEdEYXRlIGJlY2F1c2Ugb2YgYSBjaGFuZ2VkIGNhbGVuZGFyLgotIE5vdGUgdGhhdCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbENhbGVuZGFyIGlzIHN0YWJsZSBpZiB5b3UgcmUtZ2V0IGEgc2V0IGZpZWxkLAotIHNvIGl0IGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgcHJvYmxlbS4KLTxQPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iR0RhdGUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj48IS0tIC0tPjwvQT48SDM+Ci1HRGF0ZTwvSDM+Ci08UFJFPgotcHVibGljIDxCPkdEYXRlPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+Jm5ic3A7Z2RhdGUpPC9QUkU+Ci08REw+Ci08REQ+Q29uc3RydWN0cyBhIEdEYXRlIGJhc2VkIG9uIGFub3RoZXIgR0RhdGVTcGVjaWZpY2F0aW9uLgotPFA+Ci08L0RMPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJpc0ltbXV0YWJsZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc0ltbXV0YWJsZTwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGJvb2xlYW4gPEI+aXNJbW11dGFibGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRydWU6IGFsbCBHRGF0ZSBpbnN0YW5jZXMgYXJlIGltbXV0YWJsZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2lzSW1tdXRhYmxlKCkiPmlzSW1tdXRhYmxlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRGbGFncygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRGbGFnczwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5nZXRGbGFnczwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBjb21iaW5hdGlvbiBvZiBmbGFncyBpbmRpY2F0aW5nIHRoZSBpbmZvcm1hdGlvbgotIGNvbnRhaW5lZCBieSB0aGlzIEdEYXRlLiAgVGhlIGZpdmUgZmxhZ3MgYXJlCi0gSEFTX1RJTUVaT05FLCBIQVNfWUVBUiwgSEFTX01PTlRILCBIQVNfREFZLCBhbmQgSEFTX1RJTUUuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNnZXRGbGFncygpIj5nZXRGbGFnczwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaGFzVGltZVpvbmUoKSI+PCEtLSAtLT48L0E+PEgzPgotaGFzVGltZVpvbmU8L0gzPgotPFBSRT4KLXB1YmxpYyBmaW5hbCBib29sZWFuIDxCPmhhc1RpbWVab25lPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiB0aGlzIGRhdGUvdGltZSBzcGVjaWZpY2F0aW9uIHNwZWNpZmllcyBhIHRpbWV6b25lLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjaGFzVGltZVpvbmUoKSI+aGFzVGltZVpvbmU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Imhhc1llYXIoKSI+PCEtLSAtLT48L0E+PEgzPgotaGFzWWVhcjwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGJvb2xlYW4gPEI+aGFzWWVhcjwvQj4oKTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgdGhpcyBkYXRlL3RpbWUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSB5ZWFyLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjaGFzWWVhcigpIj5oYXNZZWFyPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJoYXNNb250aCgpIj48IS0tIC0tPjwvQT48SDM+Ci1oYXNNb250aDwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGJvb2xlYW4gPEI+aGFzTW9udGg8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoaXMgZGF0ZS90aW1lIHNwZWNpZmljYXRpb24gc3BlY2lmaWVzIGEgbW9udGgtb2YteWVhci4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2hhc01vbnRoKCkiPmhhc01vbnRoPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJoYXNEYXkoKSI+PCEtLSAtLT48L0E+PEgzPgotaGFzRGF5PC9IMz4KLTxQUkU+Ci1wdWJsaWMgZmluYWwgYm9vbGVhbiA8Qj5oYXNEYXk8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoaXMgZGF0ZS90aW1lIHNwZWNpZmljYXRpb24gc3BlY2lmaWVzIGEgZGF5LW9mLW1vbnRoLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjaGFzRGF5KCkiPmhhc0RheTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaGFzVGltZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1oYXNUaW1lPC9IMz4KLTxQUkU+Ci1wdWJsaWMgZmluYWwgYm9vbGVhbiA8Qj5oYXNUaW1lPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiB0aGlzIGRhdGUvdGltZSBzcGVjaWZpY2F0aW9uIHNwZWNpZmllcyBhIHRpbWUtb2YtZGF5LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjaGFzVGltZSgpIj5oYXNUaW1lPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJoYXNEYXRlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWhhc0RhdGU8L0gzPgotPFBSRT4KLXB1YmxpYyBmaW5hbCBib29sZWFuIDxCPmhhc0RhdGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoaXMgZGF0ZS90aW1lIHNwZWNpZmljYXRpb24gc3BlY2lmaWVzIGEgZnVsbCBkYXRlICh5ZWFyLCBtb250aCwgZGF5KQotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjaGFzRGF0ZSgpIj5oYXNEYXRlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRZZWFyKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFllYXI8L0gzPgotPFBSRT4KLXB1YmxpYyBmaW5hbCBpbnQgPEI+Z2V0WWVhcjwvQj4oKTwvUFJFPgotPERMPgotPEREPkdldHMgdGhlIHllYXIuIFNob3VsZCBiZSBhIGZvdXItZGlnaXQgeWVhciBzcGVjaWZpY2F0aW9uLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjZ2V0WWVhcigpIj5nZXRZZWFyPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRNb250aCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRNb250aDwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGludCA8Qj5nZXRNb250aDwvQj4oKTwvUFJFPgotPERMPgotPEREPkdldHMgdGhlIG1vbnRoLW9mLXllYXIuIEphbnVhcnkgaXMgMS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2dldE1vbnRoKCkiPmdldE1vbnRoPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXREYXkoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RGF5PC9IMz4KLTxQUkU+Ci1wdWJsaWMgZmluYWwgaW50IDxCPmdldERheTwvQj4oKTwvUFJFPgotPERMPgotPEREPkdldHMgdGhlIGRheS1vZi1tb250aC4gVGhlIGZpcnN0IGRheSBvZiBlYWNoIG1vbnRoIGlzIDEuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNnZXREYXkoKSI+Z2V0RGF5PC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRIb3VyKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEhvdXI8L0gzPgotPFBSRT4KLXB1YmxpYyBmaW5hbCBpbnQgPEI+Z2V0SG91cjwvQj4oKTwvUFJFPgotPERMPgotPEREPkdldHMgdGhlIGhvdXItb2YtZGF5LiBNaWRuaWdodCBpcyAwLCBhbmQgMTFQTSBpcyAyMy4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2dldEhvdXIoKSI+Z2V0SG91cjwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TWludXRlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE1pbnV0ZTwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGludCA8Qj5nZXRNaW51dGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5HZXRzIHRoZSBtaW51dGUtb2YtaG91ci4gUmFuZ2UgZnJvbSAwIHRvIDU5LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjZ2V0TWludXRlKCkiPmdldE1pbnV0ZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U2Vjb25kKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNlY29uZDwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGludCA8Qj5nZXRTZWNvbmQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5HZXRzIHRoZSBzZWNvbmQtb2YtbWludXRlLiBSYW5nZSBmcm9tIDAgdG8gNTkuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNnZXRTZWNvbmQoKSI+Z2V0U2Vjb25kPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRGcmFjdGlvbigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRGcmFjdGlvbjwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj5CaWdEZWNpbWFsPC9BPiA8Qj5nZXRGcmFjdGlvbjwvQj4oKTwvUFJFPgotPERMPgotPEREPkdldHMgdGhlIGZyYWN0aW9uLW9mLXNlY29uZC4gUmFuZ2UgZnJvbSAwIChpbmNsdXNpdmUpIHRvIDEgKGV4Y2x1c2l2ZSkuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNnZXRGcmFjdGlvbigpIj5nZXRGcmFjdGlvbjwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0VGltZVpvbmVTaWduKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFRpbWVab25lU2lnbjwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGludCA8Qj5nZXRUaW1lWm9uZVNpZ248L0I+KCk8L1BSRT4KLTxETD4KLTxERD5HZXRzIHRoZSB0aW1lIHpvbmUgc2lnbi4gRm9yIHRpbWUgem9uZXMgZWFzdCBvZiBHTVQsCi0gdGhpcyBpcyBwb3NpdGl2ZTsgZm9yIHRpbWUgem9uZXMgd2VzdCwgdGhpcyBpcyBuZWdhdGl2ZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2dldFRpbWVab25lU2lnbigpIj5nZXRUaW1lWm9uZVNpZ248L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFRpbWVab25lSG91cigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRUaW1lWm9uZUhvdXI8L0gzPgotPFBSRT4KLXB1YmxpYyBmaW5hbCBpbnQgPEI+Z2V0VGltZVpvbmVIb3VyPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgdGltZSB6b25lIGhvdXIuCi0KLSBUaGlzIGlzIGFsd2F5cyBwb3NpdGl2ZTogZm9yIHRoZSBzaWduLCBsb29rIGF0Ci0gZ2V0VGltZVpvbmVTaWduKCkuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNnZXRUaW1lWm9uZUhvdXIoKSI+Z2V0VGltZVpvbmVIb3VyPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRUaW1lWm9uZU1pbnV0ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRUaW1lWm9uZU1pbnV0ZTwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGludCA8Qj5nZXRUaW1lWm9uZU1pbnV0ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkdldHMgdGhlIHRpbWUgem9uZSBtaW51dGVzLgotCi0gVGhpcyBpcyBhbHdheXMgcG9zaXRpdmU6IGZvciB0aGUgc2lnbiwgbG9vayBhdAotIGdldFRpbWVab25lU2lnbigpLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjZ2V0VGltZVpvbmVNaW51dGUoKSI+Z2V0VGltZVpvbmVNaW51dGU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE1pbGxpc2Vjb25kKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE1pbGxpc2Vjb25kPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldE1pbGxpc2Vjb25kPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgcm91bmRlZCBtaWxsaXNlY29uZCB2YWx1ZS4gUmFuZ2UgZnJvbSAwIHRvIDk5OQotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjZ2V0TWlsbGlzZWNvbmQoKSI+Z2V0TWlsbGlzZWNvbmQ8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNhbm9uaWNhbFN0cmluZygpIj48IS0tIC0tPjwvQT48SDM+Ci1jYW5vbmljYWxTdHJpbmc8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPmNhbm9uaWNhbFN0cmluZzwvQj4oKTwvUFJFPgotPERMPgotPEREPlRoZSBjYW5vbmljYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiBTcGVjaWZpYyBtb21lbnRzIG9yCi0gdGltZXMtb2YtZGF5IGluIGEgc3BlY2lmaWVkIHRpbWV6b25lIGFyZSBub3JtYWxpemVkIHRvCi0gVVRDIHRpbWUgdG8gcHJvZHVjZSBhIGNhbm9uaWNhbCBzdHJpbmcgZm9ybSBmb3IgdGhlbS4KLSBPdGhlciByZWN1cnJpbmcgdGltZSBzcGVjaWZpY2F0aW9ucyBrZWVwIHRoZWlyIHRpbWV6b25lCi0gaW5mb3JtYXRpb24uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNjYW5vbmljYWxTdHJpbmcoKSI+Y2Fub25pY2FsU3RyaW5nPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc1ZhbGlkKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzVmFsaWQ8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzVmFsaWQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoaXMgR0RhdGUgY29ycmVzcG9uZHMgdG8gYSB2YWxpZCBncmVnb3JpYW4gZGF0ZSB2YWx1ZQotIGluIFhNTCBzY2hlbWEuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNpc1ZhbGlkKCkiPmlzVmFsaWQ8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEp1bGlhbkRhdGUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SnVsaWFuRGF0ZTwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5nZXRKdWxpYW5EYXRlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgSnVsaWFuIGRhdGUgY29ycmVzcG9uZGluZyB0byB0aGlzIEdyZWdvcmlhbiBkYXRlLgotIFRoZSBKdWxpYW4gZGF0ZSAoSkQpIGlzIGEgY29udGludW91cyBjb3VudCBvZiBkYXlzIGZyb20KLSAxIEphbnVhcnkgNDcxMyBCQyAoPSAtNDcxMiBKYW51YXJ5IDEpLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjZ2V0SnVsaWFuRGF0ZSgpIj5nZXRKdWxpYW5EYXRlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRDYWxlbmRhcigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRDYWxlbmRhcjwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ2FsZW5kYXIuaHRtbCI+WG1sQ2FsZW5kYXI8L0E+IDxCPmdldENhbGVuZGFyPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0cmlldmVzIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCB0aW1lIGFzIGFuIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ2FsZW5kYXIuaHRtbCI+PENPREU+WG1sQ2FsZW5kYXI8L0NPREU+PC9BPi4KLSA8cD4KLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbENhbGVuZGFyLmh0bWwiPjxDT0RFPlhtbENhbGVuZGFyPC9DT0RFPjwvQT4gaXMgYSBzdWJjbGFzcyBvZiA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0dyZWdvcmlhbkNhbGVuZGFyLmh0bWwiPjxDT0RFPkdyZWdvcmlhbkNhbGVuZGFyPC9DT0RFPjwvQT4KLSB3aGljaCBpcyBzbGlnaHRseSBjdXN0b21pemVkIHRvIG1hdGNoIFhNTCBzY2hlbWEgZGF0ZSBydWxlcy4KLSA8cD4KLSBUaGUgcmV0dXJuZWQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sIj48Q09ERT5YbWxDYWxlbmRhcjwvQ09ERT48L0E+IGhhcyBvbmx5IHRob3NlIHRpbWUgYW5kIGRhdGUgZmllbGRzCi0gc2V0IHRoYXQgYXJlIHJlZmxlY3RlZCBpbiB0aGUgR0RhdGUgb2JqZWN0LiAgQmVjYXVzZSBvZiB0aGUgd2F5IHRoZQotIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPiBjb250cmFjdCB3b3JrcywgYW55IGluZm9ybWF0aW9uIGluIHRoZSBpc1NldCgpIHZhbmlzaGVzCi0gYXMgc29vbiBhcyB5b3UgdmlldyBhbnkgdW5zZXQgZmllbGQgdXNpbmcgZ2V0KCkgbWV0aG9kcy4KLSBUaGlzIG1lYW5zIHRoYXQgaWYgaXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hpY2ggZGF0ZSBmaWVsZHMKLSBhcmUgc2V0LCB5b3UgbXVzdCBjYWxsIGlzU2V0KCkgZmlyc3QgYmVmb3JlIGdldCgpLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjZ2V0Q2FsZW5kYXIoKSI+Z2V0Q2FsZW5kYXI8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldERhdGUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RGF0ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvRGF0ZS5odG1sIj5EYXRlPC9BPiA8Qj5nZXREYXRlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0cmlldmVzIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCB0aW1lIGFzIGEgamF2YS51dGlsLkRhdGUKLSBpbnN0YW5jZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2dldERhdGUoKSI+Z2V0RGF0ZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iY29tcGFyZVRvR0RhdGUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj48IS0tIC0tPjwvQT48SDM+Ci1jb21wYXJlVG9HRGF0ZTwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5jb21wYXJlVG9HRGF0ZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPiZuYnNwO2RhdGVzcGVjKTwvUFJFPgotPERMPgotPEREPkNvbXBhcmlzb24gdG8gYW5vdGhlciBHRGF0ZS4KLSA8dWw+Ci0gPGxpPlJldHVybnMgLTEgaWYgdGhpcyA8IGRhdGUuIChsZXNzLXRoYW4pCi0gPGxpPlJldHVybnMgMCBpZiB0aGlzID09IGRhdGUuIChlcXVhbCkKLSA8bGk+UmV0dXJucyAxIGlmIHRoaXMgPiBkYXRlLiAoZ3JlYXRlci10aGFuKQotIDxsaT5SZXR1cm5zIDIgaWYgdGhpcyA8PiBkYXRlLiAoaW5jb21wYXJhYmxlKQotIDwvdWw+Ci0gVHdvIGluc3RhbmNlcyBhcmUgaW5jb21wYXJhYmxlIGlmIHRoZXkgaGF2ZSBkaWZmZXJlbnQgYW1vdW50cwotIG9mIGluZm9ybWF0aW9uLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjY29tcGFyZVRvR0RhdGUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj5jb21wYXJlVG9HRGF0ZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+ZGF0ZXNwZWM8L0NPREU+IC0gdGhlIGRhdGUgdG8gY29tcGFyZSBhZ2FpbnN0LjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0QnVpbHRpblR5cGVDb2RlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEJ1aWx0aW5UeXBlQ29kZTwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5nZXRCdWlsdGluVHlwZUNvZGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBidWlsdGluIHR5cGUgY29kZSBmb3IgdGhlIHNoYXBlIG9mIHRoZSBpbmZvcm1hdGlvbgotIGNvbnRhaW5lZCBpbiB0aGlzIGluc3RhbmNlLCBvciAwIGlmIHRoZQotIGluc3RhbmNlIGRvZXNuJ3QgY29udGFpbiBpbmZvcm1hdGlvbiBjb3JyZXNwb25kaW5nIHRvIGEKLSBTY2hlbWEgdHlwZS4KLSA8cD4gCi0gVmFsdWUgd2lsbCBiZSBlcXVhbCB0bwotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19OT1RfQlVJTFRJTiI+PENPREU+U2NoZW1hVHlwZS5CVENfTk9UX0JVSUxUSU48L0NPREU+PC9BPiwKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfR19ZRUFSIj48Q09ERT5TY2hlbWFUeXBlLkJUQ19HX1lFQVI8L0NPREU+PC9BPiwKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfR19ZRUFSX01PTlRIIj48Q09ERT5TY2hlbWFUeXBlLkJUQ19HX1lFQVJfTU9OVEg8L0NPREU+PC9BPiwKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfR19NT05USCI+PENPREU+U2NoZW1hVHlwZS5CVENfR19NT05USDwvQ09ERT48L0E+LAotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19HX01PTlRIX0RBWSI+PENPREU+U2NoZW1hVHlwZS5CVENfR19NT05USF9EQVk8L0NPREU+PC9BPiwKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfR19EQVkiPjxDT0RFPlNjaGVtYVR5cGUuQlRDX0dfREFZPC9DT0RFPjwvQT4sCi0gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0RBVEUiPjxDT0RFPlNjaGVtYVR5cGUuQlRDX0RBVEU8L0NPREU+PC9BPiwKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfREFURV9USU1FIj48Q09ERT5TY2hlbWFUeXBlLkJUQ19EQVRFX1RJTUU8L0NPREU+PC9BPiwgb3IKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfVElNRSI+PENPREU+U2NoZW1hVHlwZS5CVENfVElNRTwvQ09ERT48L0E+LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjZ2V0QnVpbHRpblR5cGVDb2RlKCkiPmdldEJ1aWx0aW5UeXBlQ29kZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iYWRkKG9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uU3BlY2lmaWNhdGlvbikiPjwhLS0gLS0+PC9BPjxIMz4KLWFkZDwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+IDxCPmFkZDwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+Jm5ic3A7ZHVyYXRpb24pPC9QUkU+Ci08REw+Ci08REQ+QWRkcyBhIGR1cmF0aW9uIHRvIHRoaXMgR0RhdGUsIGFuZCByZXR1cm5zIGEgbmV3IEdEYXRlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzdWJ0cmFjdChvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvblNwZWNpZmljYXRpb24pIj48IS0tIC0tPjwvQT48SDM+Ci1zdWJ0cmFjdDwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+IDxCPnN1YnRyYWN0PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCI+R0R1cmF0aW9uU3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtkdXJhdGlvbik8L1BSRT4KLTxETD4KLTxERD5BZGRzIGEgZHVyYXRpb24gdG8gdGhpcyBHRGF0ZSwgYW5kIHJldHVybnMgYSBuZXcgR0RhdGUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImVxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotZXF1YWxzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5lcXVhbHM8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+R0RhdGUgaXMgYW4gaW1tdXRhYmxlIGNsYXNzLCBhbmQgZXF1YWxpdHkgaXMgY29tcHV0ZWQgYmFzZWQKLSBvbiBpdHMgY2Fub25pY2FsIHZhbHVlLgotPFA+Ci08REQ+PERMPgotPERUPjxCPk92ZXJyaWRlczo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj5lcXVhbHM8L0E+PC9DT0RFPiBpbiBjbGFzcyA8Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaGFzaENvZGUoKSI+PCEtLSAtLT48L0E+PEgzPgotaGFzaENvZGU8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+aGFzaENvZGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgaGFzaCBjb2RlIGZvciB0aGlzIEdEYXRlLgotPFA+Ci08REQ+PERMPgotPERUPjxCPk92ZXJyaWRlczo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjaGFzaENvZGUoKSI+aGFzaENvZGU8L0E+PC9DT0RFPiBpbiBjbGFzcyA8Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0idG9TdHJpbmcoKSI+PCEtLSAtLT48L0E+PEgzPgotdG9TdHJpbmc8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPnRvU3RyaW5nPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VGhlIG5hdHVyYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiBUaGlzIHJlcHJlc2VudHMgdGhlIGluZm9ybWF0aW9uCi0gdGhhdCBpcyBhdmFpbGFibGUsIGluY2x1ZGluZyB0aW1lem9uZS4gRm9yIHR5cGVzIHRoYXQgY29ycmVzcG9uZAotIHRvIGRlZmluZWQgc2NoZW1hIHR5cGVzIChzY2hlbWFCdWlsdGluVHlwZUNvZGUoKSA+IDApLAotIHRoaXMgcHJvdmlkZXMgdGhlIG5hdHVyYWwgbGV4aWNhbCByZXByZXNlbnRhdGlvbi4KLSA8cD4KLSBXaGVuIGJvdGggdGltZSBhbmQgdGltZXpvbmUgYXJlIHNwZWNpZmllZCwgdGhpcyBzdHJpbmcgaXMgbm90Ci0gdGhlIGNhbm9uaWNhbCByZXByZXNlbnRhdGlvbiB1bmxlc3MgdGhlIHRpbWV6b25lIGlzIFVUQyAoWikKLSAoc2luY2UgdGhlIHNhbWUgbW9tZW50IGluIHRpbWUgY2FuIGJlIGV4cHJlc3NlZCBpbiBkaWZmZXJlbnQKLSB0aW1lem9uZXMpLiBUbyBnZXQgYSBjYW5vbmljYWwgc3RyaW5nLCB1c2UgdGhlIGNhbm9uaWNhbFN0cmluZygpCi0gbWV0aG9kLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48RFQ+PEI+T3ZlcnJpZGVzOjwvQj48REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT48L0NPREU+IGluIGNsYXNzIDxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkdEYXRlLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwNzNlMDQuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEwICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTkgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1HRGF0ZUJ1aWxkZXIgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVCdWlsZGVyLEdEYXRlQnVpbGRlciBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iR0RhdGVCdWlsZGVyIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJHRGF0ZUJ1aWxkZXIuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBHRGF0ZUJ1aWxkZXI8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZUJ1aWxkZXI8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5BbGwgSW1wbGVtZW50ZWQgSW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9TZXJpYWxpemFibGUuaHRtbCI+U2VyaWFsaXphYmxlPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBmaW5hbCBjbGFzcyA8Qj5HRGF0ZUJ1aWxkZXI8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjxEVD5pbXBsZW1lbnRzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIj5TZXJpYWxpemFibGU8L0E+PC9ETD4KLQotPFA+Ci1Vc2VkIHRvIGJ1aWxkIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+PENPREU+R0RhdGVzPC9DT0RFPjwvQT4uCi0gPHA+Ci0gTGlrZSBHRGF0ZSwgYSBHRGF0ZUJ1aWxkZXIgcmVwcmVzZW50cyBhbiBHcmVnb3JpYW4gRGF0ZSwgVGltZSwKLSBhbmQgVGltZXpvbmUsIG9yIHN1YnNldCBvZiBpbmZvcm1hdGlvbiAoWWVhciwgTW9udGgsIERheSwKLSBUaW1lLCBUaW1lem9uZSwgb3Igc29tZSBjb21iaW5hdGlvbikuIFdoZXJldmVyIGl0IHByb3ZpZGVzCi0gZ3VpZGFuY2UsIHRoZSBYTUwgU2NoZW1hIDEuMCBzcGVjaWZpY2F0aW9uIChwbHVzIHB1Ymxpc2hlZAotIGVycmF0YSkgaXMgZm9sbG93ZWQuCi0gPHA+Ci0gSW5zdGFuY2VzIG1heSBzZXBhcmF0ZWx5IHNldCBvciBjbGVhciB0aGUgeWVhciwgbW9udGgsCi0gZGF5LW9mLW1vbnRoLCBhbmQgdGltZS1vZi1kYXkuIE5vdCBhbGwgb3BlcmF0aW9ucyBhcmUKLSBtZWFuaW5nZnVsIG9uIGFsbCBjb21iaW5hdGlvbnMuIEluIHBhcnRpY3VsYXIsIHRpbWV6b25lCi0gbm9ybWFsaXphdGlvbiBpcyBvbmx5IHBvc3NpYmxlIGlmIHRoZXJlIGlzIGEgdGltZSwgb3IKLSBhIHRpbWUgdG9nZXRoZXIgd2l0aCBhIGZ1bGwgZGF0ZS4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL3NlcmlhbGl6ZWQtZm9ybS5odG1sIiBUQVJHRVQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVCdWlsZGVyIj5TZXJpYWxpemVkIEZvcm08L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjSEFTX0RBWSI+SEFTX0RBWTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjSEFTX01PTlRIIj5IQVNfTU9OVEg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI0hBU19USU1FIj5IQVNfVElNRTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjSEFTX1RJTUVaT05FIj5IQVNfVElNRVpPTkU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI0hBU19ZRUFSIj5IQVNfWUVBUjwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI0dEYXRlQnVpbGRlcigpIj5HRGF0ZUJ1aWxkZXI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb25zdHJ1Y3RzIGEgR0RhdGVCdWlsZGVyIHNwZWNpZnlpbmcgbm8gZGF0ZSBvciB0aW1lPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI0dEYXRlQnVpbGRlcihqYXZhLnV0aWwuQ2FsZW5kYXIpIj5HRGF0ZUJ1aWxkZXI8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiZuYnNwO2NhbGVuZGFyKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI0dEYXRlQnVpbGRlcihqYXZhLmxhbmcuQ2hhclNlcXVlbmNlKSI+R0RhdGVCdWlsZGVyPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9DaGFyU2VxdWVuY2UuaHRtbCI+Q2hhclNlcXVlbmNlPC9BPiZuYnNwO3N0cmluZyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdHMgYSBHRGF0ZUJ1aWxkZXIgZnJvbSBhIGxleGljYWwKLSByZXByZXNlbnRhdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjR0RhdGVCdWlsZGVyKGphdmEudXRpbC5EYXRlKSI+R0RhdGVCdWlsZGVyPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPkRhdGU8L0E+Jm5ic3A7ZGF0ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdHMgYSBHRGF0ZUJ1aWxkZXIgYmFzZWQgb24gYSBqYXZhLnV0aWwuRGF0ZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjR0RhdGVCdWlsZGVyKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+R0RhdGVCdWlsZGVyPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPiZuYnNwO2dkYXRlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29uc3RydXRzIGEgR0RhdGVCdWlsZGVyIGJ5IGNvcHlpbmcgYW5vdGhlciBHRGF0ZVNwZWNpZmljYWl0b24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI0dEYXRlQnVpbGRlcihpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBqYXZhLm1hdGguQmlnRGVjaW1hbCkiPkdEYXRlQnVpbGRlcjwvQT48L0I+KGludCZuYnNwO3llYXIsCi0gICAgICAgICAgICAgaW50Jm5ic3A7bW9udGgsCi0gICAgICAgICAgICAgaW50Jm5ic3A7ZGF5LAotICAgICAgICAgICAgIGludCZuYnNwO2hvdXIsCi0gICAgICAgICAgICAgaW50Jm5ic3A7bWludXRlLAotICAgICAgICAgICAgIGludCZuYnNwO3NlY29uZCwKLSAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT4mbmJzcDtmcmFjdGlvbik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdHMgYSBHRGF0ZUJ1aWxkZXIgd2l0aCB0aGUgc3BlY2lmaWVkIHllYXIsIG1vbnRoLCBkYXksCi0gaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFuZCBvcHRpb25hbCBmcmFjdGlvbmFsIHNlY29uZHMsIGluCi0gYW4gdW5zcGVjaWZpZWQgdGltZXpvbmUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI0dEYXRlQnVpbGRlcihpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBqYXZhLm1hdGguQmlnRGVjaW1hbCwgaW50LCBpbnQsIGludCkiPkdEYXRlQnVpbGRlcjwvQT48L0I+KGludCZuYnNwO3llYXIsCi0gICAgICAgICAgICAgaW50Jm5ic3A7bW9udGgsCi0gICAgICAgICAgICAgaW50Jm5ic3A7ZGF5LAotICAgICAgICAgICAgIGludCZuYnNwO2hvdXIsCi0gICAgICAgICAgICAgaW50Jm5ic3A7bWludXRlLAotICAgICAgICAgICAgIGludCZuYnNwO3NlY29uZCwKLSAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT4mbmJzcDtmcmFjdGlvbiwKLSAgICAgICAgICAgICBpbnQmbmJzcDt0elNpZ24sCi0gICAgICAgICAgICAgaW50Jm5ic3A7dHpIb3VyLAotICAgICAgICAgICAgIGludCZuYnNwO3R6TWludXRlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29uc3RydWN0cyBhbiBhYnNvbHV0ZSBHRGF0ZUJ1aWxkZXIgd2l0aCB0aGUgc3BlY2lmaWVkIHllYXIsCi0gbW9udGgsIGRheSwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFuZCBvcHRpb25hbCBmcmFjdGlvbmFsCi0gc2Vjb25kcywgYW5kIGluIHRoZSB0aW1lem9uZSBzcGVjaWZpZWQuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2FkZER1cmF0aW9uKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgamF2YS5tYXRoLkJpZ0RlY2ltYWwpIj5hZGREdXJhdGlvbjwvQT48L0I+KGludCZuYnNwO3NpZ24sCi0gICAgICAgICAgICBpbnQmbmJzcDt5ZWFyLAotICAgICAgICAgICAgaW50Jm5ic3A7bW9udGgsCi0gICAgICAgICAgICBpbnQmbmJzcDtkYXksCi0gICAgICAgICAgICBpbnQmbmJzcDtob3VyLAotICAgICAgICAgICAgaW50Jm5ic3A7bWludXRlLAotICAgICAgICAgICAgaW50Jm5ic3A7c2Vjb25kLAotICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiPkJpZ0RlY2ltYWw8L0E+Jm5ic3A7ZnJhY3Rpb24pPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBZGRzIGEgZ2l2ZW4gZHVyYXRpb24gdG8gdGhlIGRhdGUvdGltZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2FkZEdEdXJhdGlvbihvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvblNwZWNpZmljYXRpb24pIj5hZGRHRHVyYXRpb248L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCI+R0R1cmF0aW9uU3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtkdXJhdGlvbik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0FkZHMgYSBnaXZlbiBkdXJhdGlvbiB0byB0aGUgZGF0ZS90aW1lLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjY2Fub25pY2FsU3RyaW5nKCkiPmNhbm9uaWNhbFN0cmluZzwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBjYW5vbmljYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjY2xlYXJEYXkoKSI+Y2xlYXJEYXk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDbGVhcnMgdGhlIGRheS1vZi1tb250aC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2NsZWFyTW9udGgoKSI+Y2xlYXJNb250aDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NsZWFycyB0aGUgbW9udGgtb2YteWVhci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2NsZWFyVGltZSgpIj5jbGVhclRpbWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDbGVhcnMgdGhlIHRpbWUtb2YtZGF5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjY2xlYXJUaW1lWm9uZSgpIj5jbGVhclRpbWVab25lPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q2xlYXJzIHRoZSB0aW1lem9uZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2NsZWFyWWVhcigpIj5jbGVhclllYXI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDbGVhcnMgdGhlIHllYXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNjbG9uZSgpIj5jbG9uZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0J1aWxkcyBhbm90aGVyIEdEYXRlQnVpbGRlciB3aXRoIHRoZSBzYW1lIHZhbHVlCi0gYXMgdGhpcyBvbmUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2NvbXBhcmVUb0dEYXRlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+Y29tcGFyZVRvR0RhdGU8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+Jm5ic3A7ZGF0ZXNwZWMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb21wYXJpc29uIHRvIGFub3RoZXIgR0RhdGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2dldEJ1aWx0aW5UeXBlQ29kZSgpIj5nZXRCdWlsdGluVHlwZUNvZGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBidWlsdGluIHR5cGUgY29kZSBmb3IgdGhlIHNoYXBlIG9mIHRoZSBpbmZvcm1hdGlvbgotIGNvbnRhaW5lZCBpbiB0aGlzIGluc3RhbmNlLCBvciAwIGlmIHRoZQotIGluc3RhbmNlIGRvZXNuJ3QgY29udGFpbiBpbmZvcm1hdGlvbiBjb3JyZXNwb25kaW5nIHRvIGEKLSBTY2hlbWEgdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sIj5YbWxDYWxlbmRhcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNnZXRDYWxlbmRhcigpIj5nZXRDYWxlbmRhcjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHJpZXZlcyB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgdGltZSBhcyBhbiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbENhbGVuZGFyLmh0bWwiPjxDT0RFPlhtbENhbGVuZGFyPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvRGF0ZS5odG1sIj5EYXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2dldERhdGUoKSI+Z2V0RGF0ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHJpZXZlcyB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgdGltZSBhcyBhIGphdmEudXRpbC5EYXRlCi0gaW5zdGFuY2UuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2dldERheSgpIj5nZXREYXk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSBkYXktb2YtbW9udGguPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2dldEZsYWdzKCkiPmdldEZsYWdzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIGNvbWJpbmF0aW9uIG9mIGZsYWdzIGluZGljYXRpbmcgdGhlIGluZm9ybWF0aW9uCi0gY29udGFpbmVkIGJ5IHRoaXMgR0RhdGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj5CaWdEZWNpbWFsPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2dldEZyYWN0aW9uKCkiPmdldEZyYWN0aW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7R2V0cyB0aGUgZnJhY3Rpb24tb2Ytc2Vjb25kLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNnZXRIb3VyKCkiPmdldEhvdXI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSBob3VyLW9mLWRheS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjZ2V0SnVsaWFuRGF0ZSgpIj5nZXRKdWxpYW5EYXRlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgSnVsaWFuIGRhdGUgY29ycmVzcG9uZGluZyB0byB0aGlzIEdyZWdvcmlhbiBkYXRlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNnZXRNaWxsaXNlY29uZCgpIj5nZXRNaWxsaXNlY29uZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0dldHMgdGhlIHJvdW5kZWQgbWlsbGlzZWNvbmQgdmFsdWUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2dldE1pbnV0ZSgpIj5nZXRNaW51dGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSBtaW51dGUtb2YtaG91ci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjZ2V0TW9udGgoKSI+Z2V0TW9udGg8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSBtb250aC1vZi15ZWFyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNnZXRTZWNvbmQoKSI+Z2V0U2Vjb25kPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7R2V0cyB0aGUgc2Vjb25kLW9mLW1pbnV0ZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjZ2V0VGltZVpvbmVIb3VyKCkiPmdldFRpbWVab25lSG91cjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0dldHMgdGhlIHRpbWUgem9uZSBob3VyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNnZXRUaW1lWm9uZU1pbnV0ZSgpIj5nZXRUaW1lWm9uZU1pbnV0ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0dldHMgdGhlIHRpbWUgem9uZSBtaW51dGVzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNnZXRUaW1lWm9uZVNpZ24oKSI+Z2V0VGltZVpvbmVTaWduPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7R2V0cyB0aGUgdGltZSB6b25lIHNpZ24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2dldFllYXIoKSI+Z2V0WWVhcjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0dldHMgdGhlIHllYXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNoYXNEYXRlKCkiPmhhc0RhdGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoaXMgZGF0ZS90aW1lIHNwZWNpZmljYXRpb24gc3BlY2lmaWVzIGEgZnVsbCBkYXRlICh5ZWFyLCBtb250aCwgZGF5KTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjaGFzRGF5KCkiPmhhc0RheTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgdGhpcyBkYXRlL3RpbWUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSBkYXktb2YtbW9udGguPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNoYXNNb250aCgpIj5oYXNNb250aDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgdGhpcyBkYXRlL3RpbWUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSBtb250aC1vZi15ZWFyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjaGFzVGltZSgpIj5oYXNUaW1lPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiB0aGlzIGRhdGUvdGltZSBzcGVjaWZpY2F0aW9uIHNwZWNpZmllcyBhIHRpbWUtb2YtZGF5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjaGFzVGltZVpvbmUoKSI+aGFzVGltZVpvbmU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoaXMgZGF0ZS90aW1lIHNwZWNpZmljYXRpb24gc3BlY2lmaWVzIGEgdGltZXpvbmUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNoYXNZZWFyKCkiPmhhc1llYXI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoaXMgZGF0ZS90aW1lIHNwZWNpZmljYXRpb24gc3BlY2lmaWVzIGEgeWVhci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI2lzSW1tdXRhYmxlKCkiPmlzSW1tdXRhYmxlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiB0aGUgaW5zdGFuY2UgaXMgaW1tdXRhYmxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjaXNWYWxpZCgpIj5pc1ZhbGlkPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiBhbGwgZGF0ZSBmaWVsZHMgbGllIHdpdGhpbiB0aGVpciBsZWdhbCByYW5nZXMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNub3JtYWxpemUoKSI+bm9ybWFsaXplPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Tm9ybWFsaXplcyB0aGUgaW5zdGFuY2UsIGVuc3VyaW5nIGRhdGUgYW5kIHRpbWUgZmllbGRzIGFyZSB3aXRoaW4KLSB0aGVpciBub3JtYWwgcmFuZ2VzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjbm9ybWFsaXplVG9UaW1lWm9uZShpbnQsIGludCwgaW50KSI+bm9ybWFsaXplVG9UaW1lWm9uZTwvQT48L0I+KGludCZuYnNwO3R6U2lnbiwKLSAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7dHpIb3VyLAotICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDt0ek1pbnV0ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0lmIHRoZSB0aW1lIGFuZCB0aW1lem9uZSBhcmUga25vd24sIHRoaXMgbWV0aG9kIGNoYW5nZXMgdGhlIHRpbWV6b25lIHRvIHRoZQotIHNwZWNpZmllZCBVVEMgb2Zmc2V0LCBhbHRlcmluZyBtaW51dGVzLCBob3VycywgZGF5LCBtb250aCwgYW5kIHllYXIgYXMKLSBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgdGhlIGFjdHVhbCBkZXNjcmliZWQgbW9tZW50IGluIHRpbWUgaXMgdGhlIHNhbWUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNzZXRCdWlsdGluVHlwZUNvZGUoaW50KSI+c2V0QnVpbHRpblR5cGVDb2RlPC9BPjwvQj4oaW50Jm5ic3A7dHlwZUNvZGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDbGVhcnMgdGhlIGZpZWxkcyBpbiB0aGlzIEdEYXRlQnVpbGRlciB0aGF0IGFyZSBub3QgYXBwbGljYWJsZQotIGZvciB0aGUgZ2l2ZW4gU2NoZW1hVHlwZSBkYXRlIGNvZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNzZXREYXRlKGphdmEudXRpbC5EYXRlKSI+c2V0RGF0ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvRGF0ZS5odG1sIj5EYXRlPC9BPiZuYnNwO2RhdGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSBjdXJyZW50IHRpbWUgYW5kIGRhdGUgYmFzZWQgb24gYSBqYXZhLnV0aWwuRGF0ZSBpbnN0YW5jZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI3NldERheShpbnQpIj5zZXREYXk8L0E+PC9CPihpbnQmbmJzcDtkYXkpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSBkYXktb2YtbW9udGguPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNzZXRHRGF0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlU3BlY2lmaWNhdGlvbikiPnNldEdEYXRlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPiZuYnNwO2dkYXRlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29waWVzIGEgR0RhdGVTcGVjaWZpY2F0aW9uLCBjb21wbGV0ZWx5IHJlcGxhY2luZyB0aGUgY3VycmVudAotIGluZm9ybWF0aW9uIGluIHRoaXMgR0RhdGVCdWlsZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjc2V0SnVsaWFuRGF0ZShpbnQpIj5zZXRKdWxpYW5EYXRlPC9BPjwvQj4oaW50Jm5ic3A7anVsaWFuZGF5KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgR3JlZ29yaWFuIGRhdGUgYmFzZWQgb24gdGhlIGdpdmVuIEp1bGlhbiBkYXRlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjc2V0TW9udGgoaW50KSI+c2V0TW9udGg8L0E+PC9CPihpbnQmbmJzcDttb250aCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIG1vbnRoLW9mLXllYXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNzZXRUaW1lKGludCwgaW50LCBpbnQsIGphdmEubWF0aC5CaWdEZWNpbWFsKSI+c2V0VGltZTwvQT48L0I+KGludCZuYnNwO2hvdXIsCi0gICAgICAgIGludCZuYnNwO21pbnV0ZSwKLSAgICAgICAgaW50Jm5ic3A7c2Vjb25kLAotICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT4mbmJzcDtmcmFjdGlvbik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHRpbWUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNzZXRUaW1lWm9uZShpbnQsIGludCwgaW50KSI+c2V0VGltZVpvbmU8L0E+PC9CPihpbnQmbmJzcDt0elNpZ24sCi0gICAgICAgICAgICBpbnQmbmJzcDt0ekhvdXIsCi0gICAgICAgICAgICBpbnQmbmJzcDt0ek1pbnV0ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHRpbWUgem9uZSB3aXRob3V0IGNoYW5naW5nIHRoZSBvdGhlciB0aW1lCi0gZmllbGRzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwjc2V0WWVhcihpbnQpIj5zZXRZZWFyPC9BPjwvQj4oaW50Jm5ic3A7eWVhcik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHllYXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCNzdWJ0cmFjdEdEdXJhdGlvbihvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvblNwZWNpZmljYXRpb24pIj5zdWJ0cmFjdEdEdXJhdGlvbjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPiZuYnNwO2R1cmF0aW9uKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U3VidHJhY3RzIGEgZ2l2ZW4gZHVyYXRpb24gZnJvbSB0aGUgZGF0ZS90aW1lLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sI3RvR0RhdGUoKSI+dG9HRGF0ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0J1aWxkcyBhIEdEYXRlIGZyb20gdGhpcyBHRGF0ZUJ1aWxkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBuYXR1cmFsIHN0cmluZyByZXByZXNlbnRhdGlvbi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iR0RhdGVCdWlsZGVyKCkiPjwhLS0gLS0+PC9BPjxIMz4KLUdEYXRlQnVpbGRlcjwvSDM+Ci08UFJFPgotcHVibGljIDxCPkdEYXRlQnVpbGRlcjwvQj4oKTwvUFJFPgotPERMPgotPEREPkNvbnN0cnVjdHMgYSBHRGF0ZUJ1aWxkZXIgc3BlY2lmeWluZyBubyBkYXRlIG9yIHRpbWUKLTxQPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iR0RhdGVCdWlsZGVyKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotR0RhdGVCdWlsZGVyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+R0RhdGVCdWlsZGVyPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+Jm5ic3A7Z2RhdGUpPC9QUkU+Ci08REw+Ci08REQ+Q29uc3RydXRzIGEgR0RhdGVCdWlsZGVyIGJ5IGNvcHlpbmcgYW5vdGhlciBHRGF0ZVNwZWNpZmljYWl0b24uCi08UD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkdEYXRlQnVpbGRlcihqYXZhLmxhbmcuQ2hhclNlcXVlbmNlKSI+PCEtLSAtLT48L0E+PEgzPgotR0RhdGVCdWlsZGVyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+R0RhdGVCdWlsZGVyPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0NoYXJTZXF1ZW5jZS5odG1sIj5DaGFyU2VxdWVuY2U8L0E+Jm5ic3A7c3RyaW5nKTwvUFJFPgotPERMPgotPEREPkNvbnN0cnVjdHMgYSBHRGF0ZUJ1aWxkZXIgZnJvbSBhIGxleGljYWwKLSByZXByZXNlbnRhdGlvbi4gVGhlIGxleGljYWwgc3BhY2UgY29udGFpbnMgdGhlCi0gdW5pb24gb2YgdGhlIGxleGljYWwgc3BhY2VzIG9mIGFsbCB0aGUgc2NoZW1hCi0gZGF0ZS90aW1lIHR5cGVzIChleGNlcHQgZm9yIGR1cmF0aW9uKS4KLTxQPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iR0RhdGVCdWlsZGVyKGphdmEudXRpbC5DYWxlbmRhcikiPjwhLS0gLS0+PC9BPjxIMz4KLUdEYXRlQnVpbGRlcjwvSDM+Ci08UFJFPgotcHVibGljIDxCPkdEYXRlQnVpbGRlcjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj5DYWxlbmRhcjwvQT4mbmJzcDtjYWxlbmRhcik8L1BSRT4KLTxETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkdEYXRlQnVpbGRlcihpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBqYXZhLm1hdGguQmlnRGVjaW1hbCkiPjwhLS0gLS0+PC9BPjxIMz4KLUdEYXRlQnVpbGRlcjwvSDM+Ci08UFJFPgotcHVibGljIDxCPkdEYXRlQnVpbGRlcjwvQj4oaW50Jm5ic3A7eWVhciwKLSAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7bW9udGgsCi0gICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2RheSwKLSAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7aG91ciwKLSAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7bWludXRlLAotICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtzZWNvbmQsCi0gICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj5CaWdEZWNpbWFsPC9BPiZuYnNwO2ZyYWN0aW9uKTwvUFJFPgotPERMPgotPEREPkNvbnN0cnVjdHMgYSBHRGF0ZUJ1aWxkZXIgd2l0aCB0aGUgc3BlY2lmaWVkIHllYXIsIG1vbnRoLCBkYXksCi0gaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFuZCBvcHRpb25hbCBmcmFjdGlvbmFsIHNlY29uZHMsIGluCi0gYW4gdW5zcGVjaWZpZWQgdGltZXpvbmUuCi0gPHA+Ci0gTm90ZSB0aGF0IGJ5IG5vdCBzcGVjaWZ5aW5nIHRoZSB0aW1lem9uZSB0aGUgR0RhdGVCdWlsZGVyCi0gYmVjb21lcyBwYXJ0aWFsbHkgdW5vcmRlcmVkIHdpdGggcmVzcGVjdCB0byB0aW1lc3RoYXQgZG8gaGF2ZSBhCi0gc3BlY2lmaWVkIHRpbWV6b25lLgotPFA+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnllYXI8L0NPREU+IC0gVGhlIHllYXI8REQ+PENPREU+bW9udGg8L0NPREU+IC0gVGhlIG1vbnRoLCBmcm9tIDEtMTI8REQ+PENPREU+ZGF5PC9DT0RFPiAtIFRoZSBkYXkgb2YgbW9udGgsIGZyb20gMS0zMTxERD48Q09ERT5ob3VyPC9DT0RFPiAtIFRoZSBob3VyIG9mIGRheSwgZnJvbSAwLTIzPEREPjxDT0RFPm1pbnV0ZTwvQ09ERT4gLSBUaGUgbWludXRlIG9mIGhvdXIsIGZyb20gMC01OTxERD48Q09ERT5zZWNvbmQ8L0NPREU+IC0gVGhlIHNlY29uZCBvZiBtaW51dGUsIGZyb20gMC01OTxERD48Q09ERT5mcmFjdGlvbjwvQ09ERT4gLSBUaGUgZnJhY3Rpb24gb2Ygc2Vjb25kLCAwLjAgdG8gMC45OTkuLi4gKG1heSBiZSBudWxsKTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkdEYXRlQnVpbGRlcihpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBqYXZhLm1hdGguQmlnRGVjaW1hbCwgaW50LCBpbnQsIGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLUdEYXRlQnVpbGRlcjwvSDM+Ci08UFJFPgotcHVibGljIDxCPkdEYXRlQnVpbGRlcjwvQj4oaW50Jm5ic3A7eWVhciwKLSAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7bW9udGgsCi0gICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2RheSwKLSAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7aG91ciwKLSAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7bWludXRlLAotICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtzZWNvbmQsCi0gICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj5CaWdEZWNpbWFsPC9BPiZuYnNwO2ZyYWN0aW9uLAotICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDt0elNpZ24sCi0gICAgICAgICAgICAgICAgICAgIGludCZuYnNwO3R6SG91ciwKLSAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7dHpNaW51dGUpPC9QUkU+Ci08REw+Ci08REQ+Q29uc3RydWN0cyBhbiBhYnNvbHV0ZSBHRGF0ZUJ1aWxkZXIgd2l0aCB0aGUgc3BlY2lmaWVkIHllYXIsCi0gbW9udGgsIGRheSwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFuZCBvcHRpb25hbCBmcmFjdGlvbmFsCi0gc2Vjb25kcywgYW5kIGluIHRoZSB0aW1lem9uZSBzcGVjaWZpZWQuCi0gPHA+Ci0gTm90ZSB0aGF0IHlvdSBjYW4gcmVleHByZXNzIHRoZSBHRGF0ZUJ1aWxkZXIgaW4gYW55IHRpbWV6b25lIHVzaW5nCi0gbm9ybWFsaXplVG9UaW1lWm9uZSgpLiBUaGUgbm9ybWFsaXplKCkgbWV0aG9kIG5vcm1hbGl6ZXMgdG8gVVRDLgotIDxwPgotIElmIHlvdSB3aXNoIHRvIGhhdmUgYSB0aW1lIG9yIGRhdGUgdGhhdCBpc24ndCBpbiBhIHNwZWNpZmllZCB0aW1lem9uZSwKLSB0aGVuIHVzZSB0aGUgY29uc3RydWN0b3IgdGhhdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB0aW1lem9uZSBhcmd1bWVudHMuCi08UD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+eWVhcjwvQ09ERT4gLSB0aGUgeWVhcjxERD48Q09ERT5tb250aDwvQ09ERT4gLSB0aGUgbW9udGgsIGZyb20gMS0xMjxERD48Q09ERT5kYXk8L0NPREU+IC0gdGhlIGRheSBvZiBtb250aCwgZnJvbSAxLTMxPEREPjxDT0RFPmhvdXI8L0NPREU+IC0gdGhlIGhvdXIgb2YgZGF5LCBmcm9tIDAtMjM8REQ+PENPREU+bWludXRlPC9DT0RFPiAtIHRoZSBtaW51dGUgb2YgaG91ciwgZnJvbSAwLTU5PEREPjxDT0RFPnNlY29uZDwvQ09ERT4gLSB0aGUgc2Vjb25kIG9mIG1pbnV0ZSwgZnJvbSAwLTU5PEREPjxDT0RFPmZyYWN0aW9uPC9DT0RFPiAtIHRoZSBmcmFjdGlvbiBvZiBzZWNvbmQsIDAuMCB0byAwLjk5OS4uLiAobWF5IGJlIG51bGwpPEREPjxDT0RFPnR6U2lnbjwvQ09ERT4gLSB0aGUgdGltZXpvbmUgb2Zmc2V0IHNpZ24sIGVpdGhlciArMSwgMCwgb3IgLTE8REQ+PENPREU+dHpIb3VyPC9DT0RFPiAtIHRoZSB0aW1lem9uZSBvZmZzZXQgaG91cjxERD48Q09ERT50ek1pbnV0ZTwvQ09ERT4gLSB0aGUgdGltZXpvbmUgb2Zmc2V0IG1pbnV0ZTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkdEYXRlQnVpbGRlcihqYXZhLnV0aWwuRGF0ZSkiPjwhLS0gLS0+PC9BPjxIMz4KLUdEYXRlQnVpbGRlcjwvSDM+Ci08UFJFPgotcHVibGljIDxCPkdEYXRlQnVpbGRlcjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPkRhdGU8L0E+Jm5ic3A7ZGF0ZSk8L1BSRT4KLTxETD4KLTxERD5Db25zdHJ1Y3RzIGEgR0RhdGVCdWlsZGVyIGJhc2VkIG9uIGEgamF2YS51dGlsLkRhdGUuCi0gPHA+Ci0gVGhlIGN1cnJlbnQgb2Zmc2V0IG9mIHRoZSBkZWZhdWx0IHRpbWV6b25lIGlzIHVzZWQgYXMgdGhlIHRpbWV6b25lLgotIDxwPgotIEZvciBleGFtcGxlLCBpZiBlYXN0ZXJuIGRheWxpZ2h0IHRpbWUgaXMgaW4gZWZmZWN0IGF0IHRoZSBnaXZlbgotIGRhdGUsIHRoZSB0aW1lem9uZSBvbiB0aGUgZWFzdCBjb2FzdCBvZiB0aGUgdW5pdGVkIHN0YXRlcwotIHRyYW5zbGF0ZXMgdG8gR01ULTA1OjAwIChFU1QpICsgMTowMCAoRFQgb2Zmc2V0KSA9PSBHTVQtMDQ6MDAuCi08UD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+ZGF0ZTwvQ09ERT4gLSB0aGUgZGF0ZSBvYmplY3QgdG8gY29weTwvREw+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImNsb25lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNsb25lPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiA8Qj5jbG9uZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkJ1aWxkcyBhbm90aGVyIEdEYXRlQnVpbGRlciB3aXRoIHRoZSBzYW1lIHZhbHVlCi0gYXMgdGhpcyBvbmUuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+T3ZlcnJpZGVzOjwvQj48REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNjbG9uZSgpIj5jbG9uZTwvQT48L0NPREU+IGluIGNsYXNzIDxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ0b0dEYXRlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXRvR0RhdGU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPiA8Qj50b0dEYXRlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+QnVpbGRzIGEgR0RhdGUgZnJvbSB0aGlzIEdEYXRlQnVpbGRlci4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNJbW11dGFibGUoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNJbW11dGFibGU8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzSW1tdXRhYmxlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiB0aGUgaW5zdGFuY2UgaXMgaW1tdXRhYmxlLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjaXNJbW11dGFibGUoKSI+aXNJbW11dGFibGU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEZsYWdzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEZsYWdzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldEZsYWdzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIGNvbWJpbmF0aW9uIG9mIGZsYWdzIGluZGljYXRpbmcgdGhlIGluZm9ybWF0aW9uCi0gY29udGFpbmVkIGJ5IHRoaXMgR0RhdGUuICBUaGUgZml2ZSBmbGFncyBhcmUKLSBIQVNfVElNRVpPTkUsIEhBU19ZRUFSLCBIQVNfTU9OVEgsIEhBU19EQVksIGFuZCBIQVNfVElNRS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2dldEZsYWdzKCkiPmdldEZsYWdzPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJoYXNUaW1lWm9uZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1oYXNUaW1lWm9uZTwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGJvb2xlYW4gPEI+aGFzVGltZVpvbmU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoaXMgZGF0ZS90aW1lIHNwZWNpZmljYXRpb24gc3BlY2lmaWVzIGEgdGltZXpvbmUuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNoYXNUaW1lWm9uZSgpIj5oYXNUaW1lWm9uZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaGFzWWVhcigpIj48IS0tIC0tPjwvQT48SDM+Ci1oYXNZZWFyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgZmluYWwgYm9vbGVhbiA8Qj5oYXNZZWFyPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiB0aGlzIGRhdGUvdGltZSBzcGVjaWZpY2F0aW9uIHNwZWNpZmllcyBhIHllYXIuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNoYXNZZWFyKCkiPmhhc1llYXI8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Imhhc01vbnRoKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWhhc01vbnRoPC9IMz4KLTxQUkU+Ci1wdWJsaWMgZmluYWwgYm9vbGVhbiA8Qj5oYXNNb250aDwvQj4oKTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgdGhpcyBkYXRlL3RpbWUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSBtb250aC1vZi15ZWFyLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjaGFzTW9udGgoKSI+aGFzTW9udGg8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Imhhc0RheSgpIj48IS0tIC0tPjwvQT48SDM+Ci1oYXNEYXk8L0gzPgotPFBSRT4KLXB1YmxpYyBmaW5hbCBib29sZWFuIDxCPmhhc0RheTwvQj4oKTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgdGhpcyBkYXRlL3RpbWUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSBkYXktb2YtbW9udGguCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNoYXNEYXkoKSI+aGFzRGF5PC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJoYXNUaW1lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWhhc1RpbWU8L0gzPgotPFBSRT4KLXB1YmxpYyBmaW5hbCBib29sZWFuIDxCPmhhc1RpbWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoaXMgZGF0ZS90aW1lIHNwZWNpZmljYXRpb24gc3BlY2lmaWVzIGEgdGltZS1vZi1kYXkuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNoYXNUaW1lKCkiPmhhc1RpbWU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Imhhc0RhdGUoKSI+PCEtLSAtLT48L0E+PEgzPgotaGFzRGF0ZTwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGJvb2xlYW4gPEI+aGFzRGF0ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgdGhpcyBkYXRlL3RpbWUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSBmdWxsIGRhdGUgKHllYXIsIG1vbnRoLCBkYXkpCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNoYXNEYXRlKCkiPmhhc0RhdGU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFllYXIoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0WWVhcjwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGludCA8Qj5nZXRZZWFyPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgeWVhci4gU2hvdWxkIGJlIGEgZm91ci1kaWdpdCB5ZWFyIHNwZWNpZmljYXRpb24uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNnZXRZZWFyKCkiPmdldFllYXI8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE1vbnRoKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE1vbnRoPC9IMz4KLTxQUkU+Ci1wdWJsaWMgZmluYWwgaW50IDxCPmdldE1vbnRoPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgbW9udGgtb2YteWVhci4gSmFudWFyeSBpcyAxLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjZ2V0TW9udGgoKSI+Z2V0TW9udGg8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldERheSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXREYXk8L0gzPgotPFBSRT4KLXB1YmxpYyBmaW5hbCBpbnQgPEI+Z2V0RGF5PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgZGF5LW9mLW1vbnRoLiBUaGUgZmlyc3QgZGF5IG9mIGVhY2ggbW9udGggaXMgMS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2dldERheSgpIj5nZXREYXk8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEhvdXIoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SG91cjwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGludCA8Qj5nZXRIb3VyPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgaG91ci1vZi1kYXkuIE1pZG5pZ2h0IGlzIDAsIGFuZCAxMVBNIGlzIDIzLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjZ2V0SG91cigpIj5nZXRIb3VyPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRNaW51dGUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TWludXRlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgZmluYWwgaW50IDxCPmdldE1pbnV0ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkdldHMgdGhlIG1pbnV0ZS1vZi1ob3VyLiBSYW5nZSBmcm9tIDAgdG8gNTkuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNnZXRNaW51dGUoKSI+Z2V0TWludXRlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTZWNvbmQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U2Vjb25kPC9IMz4KLTxQUkU+Ci1wdWJsaWMgZmluYWwgaW50IDxCPmdldFNlY29uZDwvQj4oKTwvUFJFPgotPERMPgotPEREPkdldHMgdGhlIHNlY29uZC1vZi1taW51dGUuIFJhbmdlIGZyb20gMCB0byA1OS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2dldFNlY29uZCgpIj5nZXRTZWNvbmQ8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEZyYWN0aW9uKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEZyYWN0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgZmluYWwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiPkJpZ0RlY2ltYWw8L0E+IDxCPmdldEZyYWN0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgZnJhY3Rpb24tb2Ytc2Vjb25kLiBSYW5nZSBmcm9tIDAgKGluY2x1c2l2ZSkgdG8gMSAoZXhjbHVzaXZlKS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2dldEZyYWN0aW9uKCkiPmdldEZyYWN0aW9uPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRNaWxsaXNlY29uZCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRNaWxsaXNlY29uZDwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGludCA8Qj5nZXRNaWxsaXNlY29uZDwvQj4oKTwvUFJFPgotPERMPgotPEREPkdldHMgdGhlIHJvdW5kZWQgbWlsbGlzZWNvbmQgdmFsdWUuIFJhbmdlIGZyb20gMCB0byA5OTkKLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2dldE1pbGxpc2Vjb25kKCkiPmdldE1pbGxpc2Vjb25kPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRUaW1lWm9uZVNpZ24oKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0VGltZVpvbmVTaWduPC9IMz4KLTxQUkU+Ci1wdWJsaWMgZmluYWwgaW50IDxCPmdldFRpbWVab25lU2lnbjwvQj4oKTwvUFJFPgotPERMPgotPEREPkdldHMgdGhlIHRpbWUgem9uZSBzaWduLiBGb3IgdGltZSB6b25lcyBlYXN0IG9mIEdNVCwKLSB0aGlzIGlzIHBvc2l0aXZlOyBmb3IgdGltZSB6b25lcyB3ZXN0LCB0aGlzIGlzIG5lZ2F0aXZlLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjZ2V0VGltZVpvbmVTaWduKCkiPmdldFRpbWVab25lU2lnbjwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0VGltZVpvbmVIb3VyKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFRpbWVab25lSG91cjwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGludCA8Qj5nZXRUaW1lWm9uZUhvdXI8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5HZXRzIHRoZSB0aW1lIHpvbmUgaG91ci4KLSBUaGlzIGlzIGFsd2F5cyBwb3NpdGl2ZTogZm9yIHRoZSBzaWduLCBsb29rIGF0Ci0gZ2V0VGltZVpvbmVTaWduKCkuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNnZXRUaW1lWm9uZUhvdXIoKSI+Z2V0VGltZVpvbmVIb3VyPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRUaW1lWm9uZU1pbnV0ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRUaW1lWm9uZU1pbnV0ZTwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGludCA8Qj5nZXRUaW1lWm9uZU1pbnV0ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkdldHMgdGhlIHRpbWUgem9uZSBtaW51dGVzLgotIFRoaXMgaXMgYWx3YXlzIHBvc2l0aXZlOiBmb3IgdGhlIHNpZ24sIGxvb2sgYXQKLSBnZXRUaW1lWm9uZVNpZ24oKS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2dldFRpbWVab25lTWludXRlKCkiPmdldFRpbWVab25lTWludXRlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRZZWFyKGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldFllYXI8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldFllYXI8L0I+KGludCZuYnNwO3llYXIpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgeWVhci4gU2hvdWxkIGJlIGEgZm91ci1kaWdpdCB5ZWFyIHNwZWNpZmljYXRpb24uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnllYXI8L0NPREU+IC0gdGhlIHllYXI8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldE1vbnRoKGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldE1vbnRoPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRNb250aDwvQj4oaW50Jm5ic3A7bW9udGgpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgbW9udGgtb2YteWVhci4gSmFudWFyeSBpcyAxLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5tb250aDwvQ09ERT4gLSB0aGUgbW9udGgsIGZyb20gMS0xMjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0RGF5KGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldERheTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0RGF5PC9CPihpbnQmbmJzcDtkYXkpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgZGF5LW9mLW1vbnRoLiBUaGUgZmlyc3QgZGF5IG9mIGVhY2ggbW9udGggaXMgMS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+ZGF5PC9DT0RFPiAtIHRoZSBkYXkgb2YgbW9udGgsIGZyb20gMS0zMTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0VGltZShpbnQsIGludCwgaW50LCBqYXZhLm1hdGguQmlnRGVjaW1hbCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldFRpbWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldFRpbWU8L0I+KGludCZuYnNwO2hvdXIsCi0gICAgICAgICAgICAgICAgICAgIGludCZuYnNwO21pbnV0ZSwKLSAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7c2Vjb25kLAotICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT4mbmJzcDtmcmFjdGlvbik8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB0aW1lLiBIb3VycyBpbiB0aGUgZGF5IHJhbmdlIGZyb20gMCB0byAyMzsKLSBtaW51dGVzIGFuZCBzZWNvbmRzIHJhbmdlIGZyb20gMCB0byA1OTsgYW5kIGZyYWN0aW9uYWwKLSBzZWNvbmRzIHJhbmdlIGZyb20gMCAoaW5jbHVzaXZlKSB0byAxIChleGNsdXNpdmUpLgotIFRoZSBmcmFjdGlvbiBjYW4gYmUgbnVsbCBhbmQgaXMgYXNzdW1lZCB0byBiZSB6ZXJvLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5ob3VyPC9DT0RFPiAtIHRoZSBob3VyIG9mIGRheSwgZnJvbSAwLTIzPEREPjxDT0RFPm1pbnV0ZTwvQ09ERT4gLSB0aGUgbWludXRlIG9mIGhvdXIsIGZyb20gMC01OTxERD48Q09ERT5zZWNvbmQ8L0NPREU+IC0gdGhlIHNlY29uZCBvZiBtaW51dGUsIGZyb20gMC01OTxERD48Q09ERT5mcmFjdGlvbjwvQ09ERT4gLSB0aGUgZnJhY3Rpb24gb2Ygc2Vjb25kLCAwLjAgdG8gMC45OTkuLi4gKG1heSBiZSBudWxsKTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0VGltZVpvbmUoaW50LCBpbnQsIGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldFRpbWVab25lPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRUaW1lWm9uZTwvQj4oaW50Jm5ic3A7dHpTaWduLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7dHpIb3VyLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7dHpNaW51dGUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdGltZSB6b25lIHdpdGhvdXQgY2hhbmdpbmcgdGhlIG90aGVyIHRpbWUKLSBmaWVsZHMuIElmIHlvdSB3aXRoIHRvIGFkanVzdCBvdGhlciB0aW1lIGZpZWxkcyB0byBleHByZXNzCi0gdGhlIHNhbWUgYWN0dWFsIG1vbWVudCBpbiB0aW1lIGluIGEgZGlmZmVyZW50IHRpbWUgem9uZSwKLSB1c2Ugbm9ybWFsaXplVG9UaW1lWm9uZS4KLSA8cD4KLSBUaW1lem9uZXMgbXVzdCBiZSBiZXR3ZWVuIC0xNDowMCBhbmQgKzE0OjAwLiBTaWduCi0gbXVzdCBiZSAtMSBvciAxIChvciAwIGZvciBVVEMgb25seSksIGFuZCB0aGUgb2Zmc2V0IGhvdXJzCi0gYW5kIG1pbnV0ZSBhcmd1bWVudHMgbXVzdCBiZSBub25uZWdhdGl2ZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dHpTaWduPC9DT0RFPiAtIHRoZSB0aW1lem9uZSBvZmZzZXQgc2lnbiwgZWl0aGVyICsxLCAwLCBvciAtMTxERD48Q09ERT50ekhvdXI8L0NPREU+IC0gdGhlIHRpbWV6b25lIG9mZnNldCBob3VyPEREPjxDT0RFPnR6TWludXRlPC9DT0RFPiAtIHRoZSB0aW1lem9uZSBvZmZzZXQgbWludXRlPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjbGVhclllYXIoKSI+PCEtLSAtLT48L0E+PEgzPgotY2xlYXJZZWFyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5jbGVhclllYXI8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5DbGVhcnMgdGhlIHllYXIuIEFmdGVyIGNsZWFyaW5nLCBoYXNZZWFyIHJldHVybnMgZmFsc2UgYW5kIHRoZQotIHZhbHVlIG9mIGdldFllYXIgaXMgdW5kZWZpbmVkLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjbGVhck1vbnRoKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNsZWFyTW9udGg8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPmNsZWFyTW9udGg8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5DbGVhcnMgdGhlIG1vbnRoLW9mLXllYXIuIEFmdGVyIGNsZWFyaW5nLiBoYXNNb250aCByZXR1cm5zIGZhbHNlIGFuZAotIHRoZSB2YWx1ZSBvZiBnZXRNb250aCBpcyB1bmRlZmluZWQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNsZWFyRGF5KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNsZWFyRGF5PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5jbGVhckRheTwvQj4oKTwvUFJFPgotPERMPgotPEREPkNsZWFycyB0aGUgZGF5LW9mLW1vbnRoLiBBZnRlciBjbGVhcmluZy4gaGFzRGF5IHJldHVybnMgZmFsc2UgYW5kCi0gdGhlIHZhbHVlIG9mIGdldERheSBpcyB1bmRlZmluZWQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNsZWFyVGltZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1jbGVhclRpbWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPmNsZWFyVGltZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkNsZWFycyB0aGUgdGltZS1vZi1kYXkuCi0gQWZ0ZXIgY2xlYXJpbmcuIGhhc1RpbWUgcmV0dXJucyBmYWxzZSBhbmQKLSB0aGUgdmFsdWUgb2YgZ2V0VGltZSBpcyB1bmRlZmluZWQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNsZWFyVGltZVpvbmUoKSI+PCEtLSAtLT48L0E+PEgzPgotY2xlYXJUaW1lWm9uZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+Y2xlYXJUaW1lWm9uZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkNsZWFycyB0aGUgdGltZXpvbmUuIEFmdGVyIGNsZWFyaW5nLiBoYXNUaW1lWm9uZSByZXR1cm5zIGZhbHNlIGFuZAotIHRoZSB2YWx1ZSBvZiBnZXRUaW1lWm9uZUhvdXIgYW5kIGdldFRpbWVab25lTWludXRlIGFyZSB1bmRlZmluZWQuCi0gRG9lcyBub3QgY2hhbmdlIHRoZSBvdGhlciB0aW1lIGZpZWxkcy4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNWYWxpZCgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc1ZhbGlkPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5pc1ZhbGlkPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiBhbGwgZGF0ZSBmaWVsZHMgbGllIHdpdGhpbiB0aGVpciBsZWdhbCByYW5nZXMuICBBIEdEYXRlQnVpbGRlcgotIGNhbiBiZSBpbnZhbGlkLCBmb3IgZXhhbXBsZSwgaWYgeW91IGNoYW5nZSB0aGUgbW9udGggdG8gRmVicnVhcnkKLSBhbmQgdGhlIGRheS1vZi1tb250aCBpcyAzMS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2lzVmFsaWQoKSI+aXNWYWxpZDwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibm9ybWFsaXplKCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5vcm1hbGl6ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+bm9ybWFsaXplPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+Tm9ybWFsaXplcyB0aGUgaW5zdGFuY2UsIGVuc3VyaW5nIGRhdGUgYW5kIHRpbWUgZmllbGRzIGFyZSB3aXRoaW4KLSB0aGVpciBub3JtYWwgcmFuZ2VzLgotIDxwPgotIElmIG5vIHRpbWV6b25lIG9yIG5vIHRpbWUgaXMgc3BlY2lmaWVkLCBvciBpZiBhIHBhcnRpYWwgZGF0ZSBpcyBzcGVjaWZpZWQsIHRoaXMKLSBtZXRob2QgZG9lcyBub3RoaW5nLCBhbmQgbGVhdmVzIHRoZSB0aW1lem9uZSBpbmZvcm1hdGlvbiBhcy1pcy4KLSA8cD4KLSBJZiBhIHRpbWUgb3IgdGltZSBhbmQgZGF0ZSBpcyBzcGVjaWZpZWQsIHRoaXMgbWV0aG9kIG5vcm1hbGl6ZXMgdGhlIHRpbWV6b25lCi0gdG8gVVRDLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJub3JtYWxpemVUb1RpbWVab25lKGludCwgaW50LCBpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1ub3JtYWxpemVUb1RpbWVab25lPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5ub3JtYWxpemVUb1RpbWVab25lPC9CPihpbnQmbmJzcDt0elNpZ24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO3R6SG91ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7dHpNaW51dGUpPC9QUkU+Ci08REw+Ci08REQ+SWYgdGhlIHRpbWUgYW5kIHRpbWV6b25lIGFyZSBrbm93biwgdGhpcyBtZXRob2QgY2hhbmdlcyB0aGUgdGltZXpvbmUgdG8gdGhlCi0gc3BlY2lmaWVkIFVUQyBvZmZzZXQsIGFsdGVyaW5nIG1pbnV0ZXMsIGhvdXJzLCBkYXksIG1vbnRoLCBhbmQgeWVhciBhcwotIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCB0aGUgYWN0dWFsIGRlc2NyaWJlZCBtb21lbnQgaW4gdGltZSBpcyB0aGUgc2FtZS4KLSA8cD4KLSBJdCBpcyBhbiBlcnJvciB0byBvcGVyYXRlIG9uIGluc3RhbmNlcyB3aXRob3V0IGEgdGltZSBvciB0aW1lem9uZSwgb3IKLSB3aXRoIGEgcGFydGlhbGx5IHNwZWNpZmllZCBkYXRlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT50elNpZ248L0NPREU+IC0gdGhlIHRpbWV6b25lIG9mZnNldCBzaWduLCBlaXRoZXIgKzEsIDAsIG9yIC0xPEREPjxDT0RFPnR6SG91cjwvQ09ERT4gLSB0aGUgdGltZXpvbmUgb2Zmc2V0IGhvdXI8REQ+PENPREU+dHpNaW51dGU8L0NPREU+IC0gdGhlIHRpbWV6b25lIG9mZnNldCBtaW51dGU8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImFkZEdEdXJhdGlvbihvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvblNwZWNpZmljYXRpb24pIj48IS0tIC0tPjwvQT48SDM+Ci1hZGRHRHVyYXRpb248L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPmFkZEdEdXJhdGlvbjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+Jm5ic3A7ZHVyYXRpb24pPC9QUkU+Ci08REw+Ci08REQ+QWRkcyBhIGdpdmVuIGR1cmF0aW9uIHRvIHRoZSBkYXRlL3RpbWUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmR1cmF0aW9uPC9DT0RFPiAtIHRoZSBkdXJhdGlvbiB0byBhZGQ8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InN1YnRyYWN0R0R1cmF0aW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uU3BlY2lmaWNhdGlvbikiPjwhLS0gLS0+PC9BPjxIMz4KLXN1YnRyYWN0R0R1cmF0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zdWJ0cmFjdEdEdXJhdGlvbjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+Jm5ic3A7ZHVyYXRpb24pPC9QUkU+Ci08REw+Ci08REQ+U3VidHJhY3RzIGEgZ2l2ZW4gZHVyYXRpb24gZnJvbSB0aGUgZGF0ZS90aW1lLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5kdXJhdGlvbjwvQ09ERT4gLSB0aGUgZHVyYXRpb24gdG8gc3VidHJhY3Q8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImFkZER1cmF0aW9uKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgamF2YS5tYXRoLkJpZ0RlY2ltYWwpIj48IS0tIC0tPjwvQT48SDM+Ci1hZGREdXJhdGlvbjwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+YWRkRHVyYXRpb248L0I+KGludCZuYnNwO3NpZ24sCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDt5ZWFyLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7bW9udGgsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtkYXksCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtob3VyLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7bWludXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7c2Vjb25kLAotICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiPkJpZ0RlY2ltYWw8L0E+Jm5ic3A7ZnJhY3Rpb24pPC9QUkU+Ci08REw+Ci08REQ+QWRkcyBhIGdpdmVuIGR1cmF0aW9uIHRvIHRoZSBkYXRlL3RpbWUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnNpZ248L0NPREU+IC0gKzEgdG8gYWRkLCAtMSB0byBzdWJ0cmFjdDxERD48Q09ERT55ZWFyPC9DT0RFPiAtIHRoZSBudW1iZXIgb2YgeWVhcnMgdG8gYWRkPEREPjxDT0RFPm1vbnRoPC9DT0RFPiAtIHRoZSBudW1iZXIgb2YgbW9udGhzIHRvIGFkZDxERD48Q09ERT5kYXk8L0NPREU+IC0gdGhlIG51bWJlciBvZiBkYXlzIHRvIGFkZDxERD48Q09ERT5ob3VyPC9DT0RFPiAtIHRoZSBudW1iZXIgb2YgaG91cnMgdG8gYWRkPEREPjxDT0RFPm1pbnV0ZTwvQ09ERT4gLSB0aGUgbnVtYmVyIG9mIG1pbnV0ZXMgdG8gYWRkPEREPjxDT0RFPnNlY29uZDwvQ09ERT4gLSB0aGUgbnVtYmVyIG9mIHNlY29uZHMgdG8gYWRkPEREPjxDT0RFPmZyYWN0aW9uPC9DT0RFPiAtIHRoZSBudW1iZXIgb2YgZnJhY3Rpb25hbCBzZWNvbmRzIHRvIGFkZCAobWF5IGJlIG51bGwpPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRKdWxpYW5EYXRlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEp1bGlhbkRhdGU8L0gzPgotPFBSRT4KLXB1YmxpYyBmaW5hbCBpbnQgPEI+Z2V0SnVsaWFuRGF0ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIEp1bGlhbiBkYXRlIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBHcmVnb3JpYW4gZGF0ZS4KLSBUaGUgSnVsaWFuIGRhdGUgKEpEKSBpcyBhIGNvbnRpbnVvdXMgY291bnQgb2YgZGF5cyBmcm9tCi0gMSBKYW51YXJ5IDQ3MTMgQkMgKD0gLTQ3MTIgSmFudWFyeSAxKS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2dldEp1bGlhbkRhdGUoKSI+Z2V0SnVsaWFuRGF0ZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0SnVsaWFuRGF0ZShpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRKdWxpYW5EYXRlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRKdWxpYW5EYXRlPC9CPihpbnQmbmJzcDtqdWxpYW5kYXkpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgR3JlZ29yaWFuIGRhdGUgYmFzZWQgb24gdGhlIGdpdmVuIEp1bGlhbiBkYXRlLgotIFRoZSBKdWxpYW4gZGF0ZSAoSkQpIGlzIGEgY29udGludW91cyBjb3VudCBvZiBkYXlzIGZyb20KLSAxIEphbnVhcnkgNDcxMyBCQyAoPSAtNDcxMiBKYW51YXJ5IDEpLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5qdWxpYW5kYXk8L0NPREU+IC0gdGhlIGp1bGlhbiBkYXkgbnVtYmVyPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXREYXRlKGphdmEudXRpbC5EYXRlKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0RGF0ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0RGF0ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPkRhdGU8L0E+Jm5ic3A7ZGF0ZSk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSBjdXJyZW50IHRpbWUgYW5kIGRhdGUgYmFzZWQgb24gYSBqYXZhLnV0aWwuRGF0ZSBpbnN0YW5jZS4KLSA8cD4KLSBUaGUgdGltZXpvbmUgb2Zmc2V0IHVzZWQgaXMgYmFzZWQgb24gdGhlIGRlZmF1bHQgVGltZVpvbmUuIChUaGUKLSBkZWZhdWx0IFRpbWVab25lIGlzIGNvbnN1bHRlZCB0byBpbmNvcnBvcmF0ZSBkYXlsaWdodCBzYXZpbmdzIG9mZnNldHMKLSBpZiBhcHBsaWNhYmxlIGZvciB0aGUgY3VycmVudCBkYXRlIGFzIHdlbGwgYXMgdGhlIGJhc2UgdGltZXpvbmUgb2Zmc2V0LikKLSA8cD4KLSBJZiB5b3Ugd2lzaCB0byBub3JtYWxpemUgdGhlIHRpbWV6b25lLCBlLmcuLCB0byBVVEMsIGZvbGxvdyB0aGlzIHdpdGgKLSBhIGNhbGwgdG8gbm9ybWFsaXplVG9UaW1lWm9uZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+ZGF0ZTwvQ09ERT4gLSB0aGUgRGF0ZSBvYmplY3QgdG8gY29weTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0R0RhdGUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRHRGF0ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0R0RhdGU8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtnZGF0ZSk8L1BSRT4KLTxETD4KLTxERD5Db3BpZXMgYSBHRGF0ZVNwZWNpZmljYXRpb24sIGNvbXBsZXRlbHkgcmVwbGFjaW5nIHRoZSBjdXJyZW50Ci0gaW5mb3JtYXRpb24gaW4gdGhpcyBHRGF0ZUJ1aWxkZXIuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmdkYXRlPC9DT0RFPiAtIHRoZSBHRGF0ZVNwZWNpZmljYXRpb24gdG8gY29weTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0Q2FsZW5kYXIoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Q2FsZW5kYXI8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbENhbGVuZGFyLmh0bWwiPlhtbENhbGVuZGFyPC9BPiA8Qj5nZXRDYWxlbmRhcjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHJpZXZlcyB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgdGltZSBhcyBhbiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbENhbGVuZGFyLmh0bWwiPjxDT0RFPlhtbENhbGVuZGFyPC9DT0RFPjwvQT4uCi0gPHA+Ci0gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sIj48Q09ERT5YbWxDYWxlbmRhcjwvQ09ERT48L0E+IGlzIGEgc3ViY2xhc3Mgb2YgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9HcmVnb3JpYW5DYWxlbmRhci5odG1sIj48Q09ERT5HcmVnb3JpYW5DYWxlbmRhcjwvQ09ERT48L0E+Ci0gd2hpY2ggaXMgc2xpZ2h0bHkgY3VzdG9taXplZCB0byBtYXRjaCBYTUwgc2NoZW1hIGRhdGUgcnVsZXMuCi0gPHA+Ci0gVGhlIHJldHVybmVkIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ2FsZW5kYXIuaHRtbCI+PENPREU+WG1sQ2FsZW5kYXI8L0NPREU+PC9BPiBoYXMgb25seSB0aG9zZSB0aW1lIGFuZCBkYXRlIGZpZWxkcwotIHNldCB0aGF0IGFyZSByZWZsZWN0ZWQgaW4gdGhlIEdEYXRlIG9iamVjdC4gIEJlY2F1c2Ugb2YgdGhlIHdheSB0aGUKLSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4gY29udHJhY3Qgd29ya3MsIGFueSBpbmZvcm1hdGlvbiBpbiB0aGUgaXNTZXQoKSB2YW5pc2hlcwotIGFzIHNvb24gYXMgeW91IHZpZXcgYW55IHVuc2V0IGZpZWxkIHVzaW5nIGdldCgpIG1ldGhvZHMuCi0gVGhpcyBtZWFucyB0aGF0IGlmIGl0IGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHdoaWNoIGRhdGUgZmllbGRzCi0gYXJlIHNldCwgeW91IG11c3QgY2FsbCBpc1NldCgpIGZpcnN0IGJlZm9yZSBnZXQoKS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2dldENhbGVuZGFyKCkiPmdldENhbGVuZGFyPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXREYXRlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldERhdGU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+RGF0ZTwvQT4gPEI+Z2V0RGF0ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHJpZXZlcyB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgdGltZSBhcyBhIGphdmEudXRpbC5EYXRlCi0gaW5zdGFuY2UuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNnZXREYXRlKCkiPmdldERhdGU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNvbXBhcmVUb0dEYXRlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotY29tcGFyZVRvR0RhdGU8L0gzPgotPFBSRT4KLXB1YmxpYyBmaW5hbCBpbnQgPEI+Y29tcGFyZVRvR0RhdGU8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtkYXRlc3BlYyk8L1BSRT4KLTxETD4KLTxERD5Db21wYXJpc29uIHRvIGFub3RoZXIgR0RhdGUuCi0gPHVsPgotIDxsaT5SZXR1cm5zIC0xIGlmIHRoaXMgPCBkYXRlLiAobGVzcy10aGFuKQotIDxsaT5SZXR1cm5zIDAgaWYgdGhpcyA9PSBkYXRlLiAoZXF1YWwpCi0gPGxpPlJldHVybnMgMSBpZiB0aGlzID4gZGF0ZS4gKGdyZWF0ZXItdGhhbikKLSA8bGk+UmV0dXJucyAyIGlmIHRoaXMgPD4gZGF0ZS4gKGluY29tcGFyYWJsZSkKLSA8L3VsPgotIFR3byBpbnN0YW5jZXMgYXJlIGluY29tcGFyYWJsZSBpZiB0aGV5IGhhdmUgZGlmZmVyZW50IGFtb3VudHMKLSBvZiBpbmZvcm1hdGlvbi4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2NvbXBhcmVUb0dEYXRlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+Y29tcGFyZVRvR0RhdGU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmRhdGVzcGVjPC9DT0RFPiAtIHRoZSBkYXRlIHRvIGNvbXBhcmUgYWdhaW5zdDwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0QnVpbHRpblR5cGVDb2RlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEJ1aWx0aW5UeXBlQ29kZTwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGludCA8Qj5nZXRCdWlsdGluVHlwZUNvZGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBidWlsdGluIHR5cGUgY29kZSBmb3IgdGhlIHNoYXBlIG9mIHRoZSBpbmZvcm1hdGlvbgotIGNvbnRhaW5lZCBpbiB0aGlzIGluc3RhbmNlLCBvciAwIGlmIHRoZQotIGluc3RhbmNlIGRvZXNuJ3QgY29udGFpbiBpbmZvcm1hdGlvbiBjb3JyZXNwb25kaW5nIHRvIGEKLSBTY2hlbWEgdHlwZS4KLSA8cD4gCi0gVmFsdWUgd2lsbCBiZSBlcXVhbCB0bwotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19OT1RfQlVJTFRJTiI+PENPREU+U2NoZW1hVHlwZS5CVENfTk9UX0JVSUxUSU48L0NPREU+PC9BPiwKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfR19ZRUFSIj48Q09ERT5TY2hlbWFUeXBlLkJUQ19HX1lFQVI8L0NPREU+PC9BPiwKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfR19ZRUFSX01PTlRIIj48Q09ERT5TY2hlbWFUeXBlLkJUQ19HX1lFQVJfTU9OVEg8L0NPREU+PC9BPiwKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfR19NT05USCI+PENPREU+U2NoZW1hVHlwZS5CVENfR19NT05USDwvQ09ERT48L0E+LAotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19HX01PTlRIX0RBWSI+PENPREU+U2NoZW1hVHlwZS5CVENfR19NT05USF9EQVk8L0NPREU+PC9BPiwKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfR19EQVkiPjxDT0RFPlNjaGVtYVR5cGUuQlRDX0dfREFZPC9DT0RFPjwvQT4sCi0gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0RBVEUiPjxDT0RFPlNjaGVtYVR5cGUuQlRDX0RBVEU8L0NPREU+PC9BPiwKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfREFURV9USU1FIj48Q09ERT5TY2hlbWFUeXBlLkJUQ19EQVRFX1RJTUU8L0NPREU+PC9BPiwgb3IKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfVElNRSI+PENPREU+U2NoZW1hVHlwZS5CVENfVElNRTwvQ09ERT48L0E+LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjZ2V0QnVpbHRpblR5cGVDb2RlKCkiPmdldEJ1aWx0aW5UeXBlQ29kZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0QnVpbHRpblR5cGVDb2RlKGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEJ1aWx0aW5UeXBlQ29kZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0QnVpbHRpblR5cGVDb2RlPC9CPihpbnQmbmJzcDt0eXBlQ29kZSk8L1BSRT4KLTxETD4KLTxERD5DbGVhcnMgdGhlIGZpZWxkcyBpbiB0aGlzIEdEYXRlQnVpbGRlciB0aGF0IGFyZSBub3QgYXBwbGljYWJsZQotIGZvciB0aGUgZ2l2ZW4gU2NoZW1hVHlwZSBkYXRlIGNvZGUuICBUaGUgY29kZSBzaG91bGQgYmUKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfR19ZRUFSIj48Q09ERT5TY2hlbWFUeXBlLkJUQ19HX1lFQVI8L0NPREU+PC9BPiwKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfR19ZRUFSX01PTlRIIj48Q09ERT5TY2hlbWFUeXBlLkJUQ19HX1lFQVJfTU9OVEg8L0NPREU+PC9BPiwKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfR19NT05USCI+PENPREU+U2NoZW1hVHlwZS5CVENfR19NT05USDwvQ09ERT48L0E+LAotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19HX01PTlRIX0RBWSI+PENPREU+U2NoZW1hVHlwZS5CVENfR19NT05USF9EQVk8L0NPREU+PC9BPiwKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfR19EQVkiPjxDT0RFPlNjaGVtYVR5cGUuQlRDX0dfREFZPC9DT0RFPjwvQT4sCi0gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0RBVEUiPjxDT0RFPlNjaGVtYVR5cGUuQlRDX0RBVEU8L0NPREU+PC9BPiwKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfREFURV9USU1FIj48Q09ERT5TY2hlbWFUeXBlLkJUQ19EQVRFX1RJTUU8L0NPREU+PC9BPiwgb3IKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfVElNRSI+PENPREU+U2NoZW1hVHlwZS5CVENfVElNRTwvQ09ERT48L0E+LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT50eXBlQ29kZTwvQ09ERT4gLSB0aGUgdHlwZSBjb2RlIHRvIGFwcGx5PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjYW5vbmljYWxTdHJpbmcoKSI+PCEtLSAtLT48L0E+PEgzPgotY2Fub25pY2FsU3RyaW5nPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5jYW5vbmljYWxTdHJpbmc8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UaGUgY2Fub25pY2FsIHN0cmluZyByZXByZXNlbnRhdGlvbi4gU3BlY2lmaWMgbW9tZW50cyBvcgotIHRpbWVzLW9mLWRheSBpbiBhIHNwZWNpZmllZCB0aW1lem9uZSBhcmUgbm9ybWFsaXplZCB0bwotIFVUQyB0aW1lIHRvIHByb2R1Y2UgYSBjYW5vbmljYWwgc3RyaW5nIGZvcm0gZm9yIHRoZW0uCi0gT3RoZXIgcmVjdXJyaW5nIHRpbWUgc3BlY2lmaWNhdGlvbnMga2VlcCB0aGVpciB0aW1lem9uZQotIGluZm9ybWF0aW9uLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjY2Fub25pY2FsU3RyaW5nKCkiPmNhbm9uaWNhbFN0cmluZzwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0idG9TdHJpbmcoKSI+PCEtLSAtLT48L0E+PEgzPgotdG9TdHJpbmc8L0gzPgotPFBSRT4KLXB1YmxpYyBmaW5hbCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPnRvU3RyaW5nPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VGhlIG5hdHVyYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiBUaGlzIHJlcHJlc2VudHMgdGhlIGluZm9ybWF0aW9uCi0gdGhhdCBpcyBhdmFpbGFibGUsIGluY2x1ZGluZyB0aW1lem9uZS4gRm9yIHR5cGVzIHRoYXQgY29ycmVzcG9uZAotIHRvIGRlZmluZWQgc2NoZW1hIHR5cGVzIChzY2hlbWFCdWlsdGluVHlwZUNvZGUoKSA+IDApLAotIHRoaXMgcHJvdmlkZXMgdGhlIG5hdHVyYWwgbGV4aWNhbCByZXByZXNlbnRhdGlvbi4KLSA8cD4KLSBXaGVuIGJvdGggdGltZSBhbmQgdGltZXpvbmUgYXJlIHNwZWNpZmllZCwgdGhpcyBzdHJpbmcgaXMgbm90Ci0gdGhlIGNhbm9uaWNhbCByZXByZXNlbnRhdGlvbiB1bmxlc3MgdGhlIHRpbWV6b25lIGlzIFVUQyAoWikKLSAoc2luY2UgdGhlIHNhbWUgbW9tZW50IGluIHRpbWUgY2FuIGJlIGV4cHJlc3NlZCBpbiBkaWZmZXJlbnQKLSB0aW1lem9uZXMpLiBUbyBnZXQgYSBjYW5vbmljYWwgc3RyaW5nLCB1c2UgdGhlIGNhbm9uaWNhbFN0cmluZygpCi0gbWV0aG9kLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48RFQ+PEI+T3ZlcnJpZGVzOjwvQj48REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT48L0NPREU+IGluIGNsYXNzIDxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iR0RhdGVCdWlsZGVyLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxMzZlNDMuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5NDEgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NiBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLUdEYXRlU3BlY2lmaWNhdGlvbiAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24sR0RhdGVTcGVjaWZpY2F0aW9uIGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iR0RhdGVTcGVjaWZpY2F0aW9uIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViBDTEFTUyZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJHRGF0ZVNwZWNpZmljYXRpb24uaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgR0RhdGVTcGVjaWZpY2F0aW9uPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgS25vd24gSW1wbGVtZW50aW5nIENsYXNzZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwiPkdEYXRlQnVpbGRlcjwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPkdEYXRlU3BlY2lmaWNhdGlvbjwvQj48L0RMPgotCi08UD4KLVJlcHJlc2VudHMgYW4gWE1MIFNjaGVtYS1jb21wYXRpYmxlIEdyZWdvcmlhbiBkYXRlLgotIDxwPgotIEJvdGggdGhlIGltbXV0YWJsZSBHRGF0ZSBhbmQgdGhlIG11dGFibGUgR0RhdGVCdWlsZGVyIGFyZQotIEdEYXRlU3BlY2lmaWNhdGlvbnMuICBVc2UgdGhpcyBpbnRlcmZhY2Ugd2hlcmUgeW91IHdhbnQgdG8KLSBhbGxvdyBjYWxsZXJzIHRvIHBhc3MgYW55IGltcGxlbWVudGF0aW9uIG9mIGEgR0RhdGUuCi08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sIj48Q09ERT5YbWxDYWxlbmRhcjwvQ09ERT48L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjSEFTX0RBWSI+SEFTX0RBWTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtEYXkgb2YgbW9udGggaXMgc3BlY2lmaWVkLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNIQVNfTU9OVEgiPkhBU19NT05USDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtNb250aCBvZiB5ZWFyIGlzIHNwZWNpZmllZC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjSEFTX1RJTUUiPkhBU19USU1FPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RpbWUgb2YgZGF5IGlzIHNwZWNpZmllZC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjSEFTX1RJTUVaT05FIj5IQVNfVElNRVpPTkU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGltZXpvbmUgaXMgc3BlY2lmaWVkLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNIQVNfWUVBUiI+SEFTX1lFQVI8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7WWVhciBpcyBzcGVjaWZpZWQuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNjYW5vbmljYWxTdHJpbmcoKSI+Y2Fub25pY2FsU3RyaW5nPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGNhbm9uaWNhbCBzdHJpbmcgcmVwcmVzZW50YXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2NvbXBhcmVUb0dEYXRlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+Y29tcGFyZVRvR0RhdGU8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+Jm5ic3A7Z2RhdGVzcGVjKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29tcGFyaXNvbiB0byBhbm90aGVyIEdEYXRlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNnZXRCdWlsdGluVHlwZUNvZGUoKSI+Z2V0QnVpbHRpblR5cGVDb2RlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgYnVpbHRpbiB0eXBlIGNvZGUgZm9yIHRoZSBzaGFwZSBvZiB0aGUgaW5mb3JtYXRpb24KLSBjb250YWluZWQgaW4gdGhpcyBpbnN0YW5jZSwgb3IgMCBpZiB0aGUKLSBpbnN0YW5jZSBkb2Vzbid0IGNvbnRhaW4gaW5mb3JtYXRpb24gY29ycmVzcG9uZGluZyB0byBhCi0gU2NoZW1hIHR5cGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ2FsZW5kYXIuaHRtbCI+WG1sQ2FsZW5kYXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjZ2V0Q2FsZW5kYXIoKSI+Z2V0Q2FsZW5kYXI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IHRpbWUgYXMgYW4gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sIj48Q09ERT5YbWxDYWxlbmRhcjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+RGF0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNnZXREYXRlKCkiPmdldERhdGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IHRpbWUgYXMgYSBqYXZhLnV0aWwuRGF0ZQotIGluc3RhbmNlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNnZXREYXkoKSI+Z2V0RGF5PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7R2V0cyB0aGUgZGF5LW9mLW1vbnRoLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNnZXRGbGFncygpIj5nZXRGbGFnczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBjb21iaW5hdGlvbiBvZiBmbGFncyBpbmRpY2F0aW5nIHRoZSBpbmZvcm1hdGlvbgotIGNvbnRhaW5lZCBieSB0aGlzIEdEYXRlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNnZXRGcmFjdGlvbigpIj5nZXRGcmFjdGlvbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0dldHMgdGhlIGZyYWN0aW9uLW9mLXNlY29uZC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjZ2V0SG91cigpIj5nZXRIb3VyPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7R2V0cyB0aGUgaG91ci1vZi1kYXkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2dldEp1bGlhbkRhdGUoKSI+Z2V0SnVsaWFuRGF0ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIEp1bGlhbiBkYXRlIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBHcmVnb3JpYW4gZGF0ZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjZ2V0TWlsbGlzZWNvbmQoKSI+Z2V0TWlsbGlzZWNvbmQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSByb3VuZGVkIG1pbGxpc2Vjb25kIHZhbHVlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNnZXRNaW51dGUoKSI+Z2V0TWludXRlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7R2V0cyB0aGUgbWludXRlLW9mLWhvdXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2dldE1vbnRoKCkiPmdldE1vbnRoPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7R2V0cyB0aGUgbW9udGgtb2YteWVhci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjZ2V0U2Vjb25kKCkiPmdldFNlY29uZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0dldHMgdGhlIHNlY29uZC1vZi1taW51dGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2dldFRpbWVab25lSG91cigpIj5nZXRUaW1lWm9uZUhvdXI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSB0aW1lIHpvbmUgaG91ci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjZ2V0VGltZVpvbmVNaW51dGUoKSI+Z2V0VGltZVpvbmVNaW51dGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSB0aW1lIHpvbmUgbWludXRlcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjZ2V0VGltZVpvbmVTaWduKCkiPmdldFRpbWVab25lU2lnbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0dldHMgdGhlIHRpbWUgem9uZSBzaWduLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNnZXRZZWFyKCkiPmdldFllYXI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSB5ZWFyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjaGFzRGF0ZSgpIj5oYXNEYXRlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiB0aGlzIGRhdGUvdGltZSBzcGVjaWZpY2F0aW9uIHNwZWNpZmllcyBhIGZ1bGwgZGF0ZSAoeWVhciwgbW9udGgsIGRheSk8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2hhc0RheSgpIj5oYXNEYXk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoaXMgZGF0ZS90aW1lIHNwZWNpZmljYXRpb24gc3BlY2lmaWVzIGEgZGF5LW9mLW1vbnRoLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjaGFzTW9udGgoKSI+aGFzTW9udGg8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoaXMgZGF0ZS90aW1lIHNwZWNpZmljYXRpb24gc3BlY2lmaWVzIGEgbW9udGgtb2YteWVhci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2hhc1RpbWUoKSI+aGFzVGltZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgdGhpcyBkYXRlL3RpbWUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSB0aW1lLW9mLWRheS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2hhc1RpbWVab25lKCkiPmhhc1RpbWVab25lPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiB0aGlzIGRhdGUvdGltZSBzcGVjaWZpY2F0aW9uIHNwZWNpZmllcyBhIHRpbWV6b25lLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjaGFzWWVhcigpIj5oYXNZZWFyPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiB0aGlzIGRhdGUvdGltZSBzcGVjaWZpY2F0aW9uIHNwZWNpZmllcyBhIHllYXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNpc0ltbXV0YWJsZSgpIj5pc0ltbXV0YWJsZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgdGhpcyBHRGF0ZSBzcGVjaWZpY2F0aW9uIGlzIGltbXV0YWJsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2lzVmFsaWQoKSI+aXNWYWxpZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgdGhpcyBHRGF0ZSBjb3JyZXNwb25kcyB0byBhIHZhbGlkIGdyZWdvcmlhbiBkYXRlIHZhbHVlCi0gaW4gWE1MIHNjaGVtYS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG5hdHVyYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJIQVNfVElNRVpPTkUiPjwhLS0gLS0+PC9BPjxIMz4KLUhBU19USU1FWk9ORTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+SEFTX1RJTUVaT05FPC9CPjwvUFJFPgotPERMPgotPEREPlRpbWV6b25lIGlzIHNwZWNpZmllZC4gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjZ2V0RmxhZ3MoKSI+PENPREU+Z2V0RmxhZ3MoKTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlU3BlY2lmaWNhdGlvbi5IQVNfVElNRVpPTkUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSEFTX1lFQVIiPjwhLS0gLS0+PC9BPjxIMz4KLUhBU19ZRUFSPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5IQVNfWUVBUjwvQj48L1BSRT4KLTxETD4KLTxERD5ZZWFyIGlzIHNwZWNpZmllZC4gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjZ2V0RmxhZ3MoKSI+PENPREU+Z2V0RmxhZ3MoKTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlU3BlY2lmaWNhdGlvbi5IQVNfWUVBUiI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJIQVNfTU9OVEgiPjwhLS0gLS0+PC9BPjxIMz4KLUhBU19NT05USDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+SEFTX01PTlRIPC9CPjwvUFJFPgotPERMPgotPEREPk1vbnRoIG9mIHllYXIgaXMgc3BlY2lmaWVkLiBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNnZXRGbGFncygpIj48Q09ERT5nZXRGbGFncygpPC9DT0RFPjwvQT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uLkhBU19NT05USCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJIQVNfREFZIj48IS0tIC0tPjwvQT48SDM+Ci1IQVNfREFZPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5IQVNfREFZPC9CPjwvUFJFPgotPERMPgotPEREPkRheSBvZiBtb250aCBpcyBzcGVjaWZpZWQuIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sI2dldEZsYWdzKCkiPjxDT0RFPmdldEZsYWdzKCk8L0NPREU+PC9BPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24uSEFTX0RBWSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJIQVNfVElNRSI+PCEtLSAtLT48L0E+PEgzPgotSEFTX1RJTUU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkhBU19USU1FPC9CPjwvUFJFPgotPERMPgotPEREPlRpbWUgb2YgZGF5IGlzIHNwZWNpZmllZC4gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjZ2V0RmxhZ3MoKSI+PENPREU+Z2V0RmxhZ3MoKTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlU3BlY2lmaWNhdGlvbi5IQVNfVElNRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0RmxhZ3MoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RmxhZ3M8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+Z2V0RmxhZ3M8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgY29tYmluYXRpb24gb2YgZmxhZ3MgaW5kaWNhdGluZyB0aGUgaW5mb3JtYXRpb24KLSBjb250YWluZWQgYnkgdGhpcyBHRGF0ZS4gIFRoZSBmaXZlIGZsYWdzIGFyZQotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjSEFTX1RJTUVaT05FIj48Q09ERT5IQVNfVElNRVpPTkU8L0NPREU+PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNIQVNfWUVBUiI+PENPREU+SEFTX1lFQVI8L0NPREU+PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNIQVNfTU9OVEgiPjxDT0RFPkhBU19NT05USDwvQ09ERT48L0E+LAotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwjSEFTX0RBWSI+PENPREU+SEFTX0RBWTwvQ09ERT48L0E+LCBhbmQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCNIQVNfVElNRSI+PENPREU+SEFTX1RJTUU8L0NPREU+PC9BPi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNJbW11dGFibGUoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNJbW11dGFibGU8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzSW1tdXRhYmxlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiB0aGlzIEdEYXRlIHNwZWNpZmljYXRpb24gaXMgaW1tdXRhYmxlLiBHRGF0ZSByZXR1cm5zIHRydWUsCi0gYW5kIEdEYXRlQnVpbGRlciByZXR1cm5zIGZhbHNlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc1ZhbGlkKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzVmFsaWQ8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzVmFsaWQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoaXMgR0RhdGUgY29ycmVzcG9uZHMgdG8gYSB2YWxpZCBncmVnb3JpYW4gZGF0ZSB2YWx1ZQotIGluIFhNTCBzY2hlbWEuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Imhhc1RpbWVab25lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWhhc1RpbWVab25lPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5oYXNUaW1lWm9uZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgdGhpcyBkYXRlL3RpbWUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSB0aW1lem9uZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaGFzWWVhcigpIj48IS0tIC0tPjwvQT48SDM+Ci1oYXNZZWFyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5oYXNZZWFyPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiB0aGlzIGRhdGUvdGltZSBzcGVjaWZpY2F0aW9uIHNwZWNpZmllcyBhIHllYXIuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Imhhc01vbnRoKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWhhc01vbnRoPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5oYXNNb250aDwvQj4oKTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgdGhpcyBkYXRlL3RpbWUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSBtb250aC1vZi15ZWFyLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJoYXNEYXkoKSI+PCEtLSAtLT48L0E+PEgzPgotaGFzRGF5PC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5oYXNEYXk8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoaXMgZGF0ZS90aW1lIHNwZWNpZmljYXRpb24gc3BlY2lmaWVzIGEgZGF5LW9mLW1vbnRoLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJoYXNUaW1lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWhhc1RpbWU8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmhhc1RpbWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoaXMgZGF0ZS90aW1lIHNwZWNpZmljYXRpb24gc3BlY2lmaWVzIGEgdGltZS1vZi1kYXkuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Imhhc0RhdGUoKSI+PCEtLSAtLT48L0E+PEgzPgotaGFzRGF0ZTwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aGFzRGF0ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgdGhpcyBkYXRlL3RpbWUgc3BlY2lmaWNhdGlvbiBzcGVjaWZpZXMgYSBmdWxsIGRhdGUgKHllYXIsIG1vbnRoLCBkYXkpCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFllYXIoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0WWVhcjwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5nZXRZZWFyPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgeWVhci4gU2hvdWxkIGJlIGEgZm91ci1kaWdpdCB5ZWFyIHNwZWNpZmljYXRpb24uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE1vbnRoKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE1vbnRoPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldE1vbnRoPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgbW9udGgtb2YteWVhci4gSmFudWFyeSBpcyAxLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXREYXkoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RGF5PC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldERheTwvQj4oKTwvUFJFPgotPERMPgotPEREPkdldHMgdGhlIGRheS1vZi1tb250aC4gVGhlIGZpcnN0IGRheSBvZiBlYWNoIG1vbnRoIGlzIDEuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEhvdXIoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SG91cjwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5nZXRIb3VyPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgaG91ci1vZi1kYXkuIE1pZG5pZ2h0IGlzIDAsIGFuZCAxMVBNIGlzIDIzLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRNaW51dGUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TWludXRlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldE1pbnV0ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkdldHMgdGhlIG1pbnV0ZS1vZi1ob3VyLiBSYW5nZSBmcm9tIDAgdG8gNTkuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFNlY29uZCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTZWNvbmQ8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+Z2V0U2Vjb25kPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgc2Vjb25kLW9mLW1pbnV0ZS4gUmFuZ2UgZnJvbSAwIHRvIDU5LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRUaW1lWm9uZVNpZ24oKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0VGltZVpvbmVTaWduPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldFRpbWVab25lU2lnbjwvQj4oKTwvUFJFPgotPERMPgotPEREPkdldHMgdGhlIHRpbWUgem9uZSBzaWduLiBGb3IgdGltZSB6b25lcyBlYXN0IG9mIEdNVCwKLSB0aGlzIGlzIHBvc2l0aXZlOyBmb3IgdGltZSB6b25lcyB3ZXN0LCB0aGlzIGlzIG5lZ2F0aXZlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRUaW1lWm9uZUhvdXIoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0VGltZVpvbmVIb3VyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldFRpbWVab25lSG91cjwvQj4oKTwvUFJFPgotPERMPgotPEREPkdldHMgdGhlIHRpbWUgem9uZSBob3VyLgotIFRoaXMgaXMgYWx3YXlzIHBvc2l0aXZlOiBmb3IgdGhlIHNpZ24sIGxvb2sgYXQKLSBnZXRUaW1lWm9uZVNpZ24oKS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0VGltZVpvbmVNaW51dGUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0VGltZVpvbmVNaW51dGU8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+Z2V0VGltZVpvbmVNaW51dGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5HZXRzIHRoZSB0aW1lIHpvbmUgbWludXRlcy4KLSBUaGlzIGlzIGFsd2F5cyBwb3NpdGl2ZTogZm9yIHRoZSBzaWduLCBsb29rIGF0Ci0gZ2V0VGltZVpvbmVTaWduKCkuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEZyYWN0aW9uKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEZyYWN0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiPkJpZ0RlY2ltYWw8L0E+IDxCPmdldEZyYWN0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgZnJhY3Rpb24tb2Ytc2Vjb25kLiBSYW5nZSBmcm9tIDAgKGluY2x1c2l2ZSkgdG8gMSAoZXhjbHVzaXZlKS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TWlsbGlzZWNvbmQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TWlsbGlzZWNvbmQ8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+Z2V0TWlsbGlzZWNvbmQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5HZXRzIHRoZSByb3VuZGVkIG1pbGxpc2Vjb25kIHZhbHVlLiBSYW5nZSBmcm9tIDAgdG8gOTk5Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEp1bGlhbkRhdGUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SnVsaWFuRGF0ZTwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5nZXRKdWxpYW5EYXRlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgSnVsaWFuIGRhdGUgY29ycmVzcG9uZGluZyB0byB0aGlzIEdyZWdvcmlhbiBkYXRlLgotIFRoZSBKdWxpYW4gZGF0ZSAoSkQpIGlzIGEgY29udGludW91cyBjb3VudCBvZiBkYXlzIGZyb20KLSAxIEphbnVhcnkgNDcxMyBCQyAoPSAtNDcxMiBKYW51YXJ5IDEpLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRDYWxlbmRhcigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRDYWxlbmRhcjwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ2FsZW5kYXIuaHRtbCI+WG1sQ2FsZW5kYXI8L0E+IDxCPmdldENhbGVuZGFyPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0cmlldmVzIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCB0aW1lIGFzIGFuIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ2FsZW5kYXIuaHRtbCI+PENPREU+WG1sQ2FsZW5kYXI8L0NPREU+PC9BPi4KLSA8cD4KLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbENhbGVuZGFyLmh0bWwiPjxDT0RFPlhtbENhbGVuZGFyPC9DT0RFPjwvQT4gaXMgYSBzdWJjbGFzcyBvZiA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0dyZWdvcmlhbkNhbGVuZGFyLmh0bWwiPjxDT0RFPkdyZWdvcmlhbkNhbGVuZGFyPC9DT0RFPjwvQT4KLSB3aGljaCBpcyBzbGlnaHRseSBjdXN0b21pemVkIHRvIG1hdGNoIFhNTCBzY2hlbWEgZGF0ZSBydWxlcy4KLSA8cD4KLSBUaGUgcmV0dXJuZWQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sIj48Q09ERT5YbWxDYWxlbmRhcjwvQ09ERT48L0E+IGhhcyBvbmx5IHRob3NlIHRpbWUgYW5kIGRhdGUgZmllbGRzCi0gc2V0IHRoYXQgYXJlIHJlZmxlY3RlZCBpbiB0aGUgR0RhdGUgb2JqZWN0LiAgQmVjYXVzZSBvZiB0aGUgd2F5IHRoZQotIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPiBjb250cmFjdCB3b3JrcywgYW55IGluZm9ybWF0aW9uIGluIHRoZSBpc1NldCgpIHZhbmlzaGVzCi0gYXMgc29vbiBhcyB5b3UgdmlldyBhbnkgdW5zZXQgZmllbGQgdXNpbmcgZ2V0KCkgbWV0aG9kcy4KLSBUaGlzIG1lYW5zIHRoYXQgaWYgaXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hpY2ggZGF0ZSBmaWVsZHMKLSBhcmUgc2V0LCB5b3UgbXVzdCBjYWxsIGlzU2V0KCkgZmlyc3QgYmVmb3JlIGdldCgpLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXREYXRlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldERhdGU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+RGF0ZTwvQT4gPEI+Z2V0RGF0ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHJpZXZlcyB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgdGltZSBhcyBhIGphdmEudXRpbC5EYXRlCi0gaW5zdGFuY2UuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNvbXBhcmVUb0dEYXRlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotY29tcGFyZVRvR0RhdGU8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+Y29tcGFyZVRvR0RhdGU8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtnZGF0ZXNwZWMpPC9QUkU+Ci08REw+Ci08REQ+Q29tcGFyaXNvbiB0byBhbm90aGVyIEdEYXRlLgotIDx1bD4KLSA8bGk+UmV0dXJucyAtMSBpZiB0aGlzIDwgZGF0ZS4gKGxlc3MtdGhhbikKLSA8bGk+UmV0dXJucyAwIGlmIHRoaXMgPT0gZGF0ZS4gKGVxdWFsKQotIDxsaT5SZXR1cm5zIDEgaWYgdGhpcyA+IGRhdGUuIChncmVhdGVyLXRoYW4pCi0gPGxpPlJldHVybnMgMiBpZiB0aGlzIDw+IGRhdGUuIChpbmNvbXBhcmFibGUpCi0gPC91bD4KLSBUd28gaW5zdGFuY2VzIGFyZSBpbmNvbXBhcmFibGUgaWYgdGhleSBoYXZlIGRpZmZlcmVudCBhbW91bnRzCi0gb2YgaW5mb3JtYXRpb24uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmdkYXRlc3BlYzwvQ09ERT4gLSB0aGUgZGF0ZSB0byBjb21wYXJlIGFnYWluc3QuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRCdWlsdGluVHlwZUNvZGUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0QnVpbHRpblR5cGVDb2RlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldEJ1aWx0aW5UeXBlQ29kZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGJ1aWx0aW4gdHlwZSBjb2RlIGZvciB0aGUgc2hhcGUgb2YgdGhlIGluZm9ybWF0aW9uCi0gY29udGFpbmVkIGluIHRoaXMgaW5zdGFuY2UsIG9yIDAgaWYgdGhlCi0gaW5zdGFuY2UgZG9lc24ndCBjb250YWluIGluZm9ybWF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gYQotIFNjaGVtYSB0eXBlLgotIDxwPiAKLSBWYWx1ZSB3aWxsIGJlIGVxdWFsIHRvCi0gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX05PVF9CVUlMVElOIj48Q09ERT5TY2hlbWFUeXBlLkJUQ19OT1RfQlVJTFRJTjwvQ09ERT48L0E+LAotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19HX1lFQVIiPjxDT0RFPlNjaGVtYVR5cGUuQlRDX0dfWUVBUjwvQ09ERT48L0E+LAotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19HX1lFQVJfTU9OVEgiPjxDT0RFPlNjaGVtYVR5cGUuQlRDX0dfWUVBUl9NT05USDwvQ09ERT48L0E+LAotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19HX01PTlRIIj48Q09ERT5TY2hlbWFUeXBlLkJUQ19HX01PTlRIPC9DT0RFPjwvQT4sCi0gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0dfTU9OVEhfREFZIj48Q09ERT5TY2hlbWFUeXBlLkJUQ19HX01PTlRIX0RBWTwvQ09ERT48L0E+LAotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19HX0RBWSI+PENPREU+U2NoZW1hVHlwZS5CVENfR19EQVk8L0NPREU+PC9BPiwKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfREFURSI+PENPREU+U2NoZW1hVHlwZS5CVENfREFURTwvQ09ERT48L0E+LAotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19EQVRFX1RJTUUiPjxDT0RFPlNjaGVtYVR5cGUuQlRDX0RBVEVfVElNRTwvQ09ERT48L0E+LCBvcgotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19USU1FIj48Q09ERT5TY2hlbWFUeXBlLkJUQ19USU1FPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNhbm9uaWNhbFN0cmluZygpIj48IS0tIC0tPjwvQT48SDM+Ci1jYW5vbmljYWxTdHJpbmc8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPmNhbm9uaWNhbFN0cmluZzwvQj4oKTwvUFJFPgotPERMPgotPEREPlRoZSBjYW5vbmljYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiBTcGVjaWZpYyBtb21lbnRzIG9yCi0gdGltZXMtb2YtZGF5IGluIGEgc3BlY2lmaWVkIHRpbWV6b25lIGFyZSBub3JtYWxpemVkIHRvCi0gVVRDIHRpbWUgdG8gcHJvZHVjZSBhIGNhbm9uaWNhbCBzdHJpbmcgZm9ybSBmb3IgdGhlbS4KLSBPdGhlciByZWN1cnJpbmcgdGltZSBzcGVjaWZpY2F0aW9ucyBrZWVwIHRoZWlyIHRpbWV6b25lCi0gaW5mb3JtYXRpb24uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InRvU3RyaW5nKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXRvU3RyaW5nPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj50b1N0cmluZzwvQj4oKTwvUFJFPgotPERMPgotPEREPlRoZSBuYXR1cmFsIHN0cmluZyByZXByZXNlbnRhdGlvbi4gVGhpcyByZXByZXNlbnRzIHRoZSBpbmZvcm1hdGlvbgotIHRoYXQgaXMgYXZhaWxhYmxlLCBpbmNsdWRpbmcgdGltZXpvbmUuIEZvciB0eXBlcyB0aGF0IGNvcnJlc3BvbmQKLSB0byBkZWZpbmVkIHNjaGVtYSB0eXBlcyAoc2NoZW1hQnVpbHRpblR5cGVDb2RlKCkgPiAwKSwKLSB0aGlzIHByb3ZpZGVzIHRoZSBuYXR1cmFsIGxleGljYWwgcmVwcmVzZW50YXRpb24uCi0KLSBXaGVuIGJvdGggdGltZSBhbmQgdGltZXpvbmUgYXJlIHNwZWNpZmllZCwgdGhpcyBzdHJpbmcgaXMgbm90Ci0gdGhlIGNhbm9uaWNhbCByZXByZXNlbnRhdGlvbiB1bmxlc3MgdGhlIHRpbWV6b25lIGlzIFVUQyAoWikKLSAoc2luY2UgdGhlIHNhbWUgbW9tZW50IGluIHRpbWUgY2FuIGJlIGV4cHJlc3NlZCBpbiBkaWZmZXJlbnQKLSB0aW1lem9uZXMpLiBUbyBnZXQgYSBjYW5vbmljYWwgc3RyaW5nLCB1c2UgdGhlIGNhbm9uaWNhbFN0cmluZygpCi0gbWV0aG9kLgotPFA+Ci08REQ+PERMPgotPERUPjxCPk92ZXJyaWRlczo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+PC9DT0RFPiBpbiBjbGFzcyA8Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWIENMQVNTJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkdEYXRlU3BlY2lmaWNhdGlvbi5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjM2ZjlmLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzQyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTkgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1HRHVyYXRpb24gKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uLEdEdXJhdGlvbiBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iR0R1cmF0aW9uIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IkdEdXJhdGlvbi5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUNsYXNzIEdEdXJhdGlvbjwvSDI+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+amF2YS5sYW5nLk9iamVjdDwvQT4KLSAgfAotICArLS08Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvbjwvQj4KLTwvUFJFPgotPERMPgotPERUPjxCPkFsbCBJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vU2VyaWFsaXphYmxlLmh0bWwiPlNlcmlhbGl6YWJsZTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgZmluYWwgY2xhc3MgPEI+R0R1cmF0aW9uPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48RFQ+aW1wbGVtZW50cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCI+R0R1cmF0aW9uU3BlY2lmaWNhdGlvbjwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIj5TZXJpYWxpemFibGU8L0E+PC9ETD4KLQotPFA+Ci1SZXByZXNlbnRzIGFuIFhNTCBTY2hlbWEtY29tcGF0aWJsZSBkdXJhdGlvbi4KLSA8cD4KLSBBIGR1cmF0aW9uIGlzIG1hZGUgdXAgb2YgYSBudW1iZXIgb2YgeWVhcnMsIG1vbnRocywgZGF5cywgaG91cnMsCi0gbWludXRlcywgc2Vjb25kcywgYW5kIGZyYWN0aW9ucyBvZiBzZWNvbmRzLiBTZWUgdGhlCi0gWE1MIFNjaGVtYSBzcGVjaWZpY2F0aW9uCi0gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkdXJhdGlvbiI+c2VjdGlvbiBvbiB4czpkdXJhdGlvbjwvYT4KLSBmb3IgZGV0YWlscyBvbiB0aGUgcnVsZXMgZm9yCi0gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkdXJhdGlvbi1vcmRlciI+Y29tcGFyaW5nIGR1cmF0aW9uczwvYT4gYW5kCi0gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNhZGRpbmctZHVyYXRpb25zLXRvLWRhdGVUaW1lcyI+YWRkaW5nIGR1cmF0aW9ucyB0byBkYXRlczwvYT4uCi08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9zZXJpYWxpemVkLWZvcm0uaHRtbCIgVEFSR0VUPSJvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvbiI+U2VyaWFsaXplZCBGb3JtPC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCNHRHVyYXRpb24oKSI+R0R1cmF0aW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29uc3RydWN0cyBhbiBlbXB0eSBHRHVyYXRpb24gcmVwcmVzZW50aW5nIHplcm8gc2Vjb25kcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwjR0R1cmF0aW9uKGphdmEubGFuZy5DaGFyU2VxdWVuY2UpIj5HRHVyYXRpb248L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0NoYXJTZXF1ZW5jZS5odG1sIj5DaGFyU2VxdWVuY2U8L0E+Jm5ic3A7c3RyKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29uc3RydWN0cyBhIEdEdXJhdGlvbiBmcm9tIGEgbGV4aWNhbAotIHJlcHJlc2VudGF0aW9uLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCNHRHVyYXRpb24ob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb25TcGVjaWZpY2F0aW9uKSI+R0R1cmF0aW9uPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+Jm5ic3A7Z0R1cmF0aW9uKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29uc3RydWN0cyBhIEdEdXJhdGlvbiBmcm9tIGFub3RoZXIgR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwjR0R1cmF0aW9uKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgamF2YS5tYXRoLkJpZ0RlY2ltYWwpIj5HRHVyYXRpb248L0E+PC9CPihpbnQmbmJzcDtzaWduLAotICAgICAgICAgIGludCZuYnNwO3llYXIsCi0gICAgICAgICAgaW50Jm5ic3A7bW9udGgsCi0gICAgICAgICAgaW50Jm5ic3A7ZGF5LAotICAgICAgICAgIGludCZuYnNwO2hvdXIsCi0gICAgICAgICAgaW50Jm5ic3A7bWludXRlLAotICAgICAgICAgIGludCZuYnNwO3NlY29uZCwKLSAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT4mbmJzcDtmcmFjdGlvbik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdHMgYSBHRHVyYXRpb24gd2l0aCB0aGUgc3BlY2lmaWVkIHNpZ24sCi0geWVhciwgbW9udGgsIGRheSwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFuZCBvcHRpb25hbAotIGZyYWN0aW9uYWwgc2Vjb25kcy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwjYWRkKG9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uU3BlY2lmaWNhdGlvbikiPmFkZDwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPiZuYnNwO2R1cmF0aW9uKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBHRHVyYXRpb24gd2hpY2ggaXMgdGhlIHN1bSBvZiB0aGlzIG9uZSBhbmQgdGhlCi0gc3VwcGxpZWQgZHVyYXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCNjbG9uZSgpIj5jbG9uZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0J1aWxkcyBhbm90aGVyIEdEYXRlIHdpdGggdGhlIHNhbWUgdmFsdWUKLSBhcyB0aGlzIG9uZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwjY29tcGFyZVRvR0R1cmF0aW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uU3BlY2lmaWNhdGlvbikiPmNvbXBhcmVUb0dEdXJhdGlvbjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPiZuYnNwO2R1cmF0aW9uKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29tcGFyaXNvbiB0byBhbm90aGVyIEdEdXJhdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1R3byBHRHVyYXRpb25zIGFyZSBlcXVhbCBpZiBhbGwgdGhlaXIgZmllbGRzIGFyZSBlcXVhbC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwjZ2V0RGF5KCkiPmdldERheTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0dldHMgdGhlIGRheS1vZi1tb250aCBjb21wb25lbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj5CaWdEZWNpbWFsPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sI2dldEZyYWN0aW9uKCkiPmdldEZyYWN0aW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7R2V0cyB0aGUgZnJhY3Rpb24tb2Ytc2Vjb25kLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCNnZXRIb3VyKCkiPmdldEhvdXI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSBob3VyLW9mLWRheSBjb21wb25lbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sI2dldE1pbnV0ZSgpIj5nZXRNaW51dGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSBtaW51dGUtb2YtaG91ciBjb21wb25lbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sI2dldE1vbnRoKCkiPmdldE1vbnRoPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7R2V0cyB0aGUgbW9udGgtb2YteWVhciBjb21wb25lbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sI2dldFNlY29uZCgpIj5nZXRTZWNvbmQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSBzZWNvbmQtb2YtbWludXRlIGNvbXBvbmVudC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwjZ2V0U2lnbigpIj5nZXRTaWduPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgc2lnbiBvZiB0aGUgZHVyYXRpb246ICsxIGlzIGZvcndhcmRzCi0gYW5kIC0xIGlzIGJhY2t3YXJkcyBpbiB0aW1lLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCNnZXRZZWFyKCkiPmdldFllYXI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSB5ZWFyIGNvbXBvbmVudC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwjaGFzaENvZGUoKSI+aGFzaENvZGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sI2lzSW1tdXRhYmxlKCkiPmlzSW1tdXRhYmxlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QWxsIEdEdXJhdGlvbiBpbnN0YW5jZXMgcmV0dXJuIHRydWUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCNpc1ZhbGlkKCkiPmlzVmFsaWQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRydWUgaWYgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIGNvbXBvbmVudHMKLSBvZiB0aGUgZHVyYXRpb24gYXJlIG5vbm5lZ2F0aXZlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwjc3VidHJhY3Qob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb25TcGVjaWZpY2F0aW9uKSI+c3VidHJhY3Q8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCI+R0R1cmF0aW9uU3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtkdXJhdGlvbik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgR0R1cmF0aW9uIHdoaWNoIGlzIHRoZSByZXN1bHQgb2Ygc3VidHJhY3RpbmcKLSB0aGUgc3VwcGxpZWQgZHVyYXRpb24gZnJvbSB0aGlzIG9uZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG5hdHVyYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkdXJhdGlvbi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZ2V0Q2xhc3MoKSI+Z2V0Q2xhc3M8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeSgpIj5ub3RpZnk8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeUFsbCgpIj5ub3RpZnlBbGw8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9IkdEdXJhdGlvbigpIj48IS0tIC0tPjwvQT48SDM+Ci1HRHVyYXRpb248L0gzPgotPFBSRT4KLXB1YmxpYyA8Qj5HRHVyYXRpb248L0I+KCk8L1BSRT4KLTxETD4KLTxERD5Db25zdHJ1Y3RzIGFuIGVtcHR5IEdEdXJhdGlvbiByZXByZXNlbnRpbmcgemVybyBzZWNvbmRzLgotPFA+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJHRHVyYXRpb24oamF2YS5sYW5nLkNoYXJTZXF1ZW5jZSkiPjwhLS0gLS0+PC9BPjxIMz4KLUdEdXJhdGlvbjwvSDM+Ci08UFJFPgotcHVibGljIDxCPkdEdXJhdGlvbjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9DaGFyU2VxdWVuY2UuaHRtbCI+Q2hhclNlcXVlbmNlPC9BPiZuYnNwO3N0cik8L1BSRT4KLTxETD4KLTxERD5Db25zdHJ1Y3RzIGEgR0R1cmF0aW9uIGZyb20gYSBsZXhpY2FsCi0gcmVwcmVzZW50YXRpb24uIFRoZSBsZXhpY2FsIHNwYWNlIGNvbnRhaW5zIHRoZQotIHVuaW9uIG9mIHRoZSBsZXhpY2FsIHNwYWNlcyBvZiBhbGwgdGhlIHNjaGVtYQotIGRhdGUvdGltZSB0eXBlcyAoZXhjZXB0IGZvciBkdXJhdGlvbikuCi08UD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkdEdXJhdGlvbihpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGphdmEubWF0aC5CaWdEZWNpbWFsKSI+PCEtLSAtLT48L0E+PEgzPgotR0R1cmF0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+R0R1cmF0aW9uPC9CPihpbnQmbmJzcDtzaWduLAotICAgICAgICAgICAgICAgICBpbnQmbmJzcDt5ZWFyLAotICAgICAgICAgICAgICAgICBpbnQmbmJzcDttb250aCwKLSAgICAgICAgICAgICAgICAgaW50Jm5ic3A7ZGF5LAotICAgICAgICAgICAgICAgICBpbnQmbmJzcDtob3VyLAotICAgICAgICAgICAgICAgICBpbnQmbmJzcDttaW51dGUsCi0gICAgICAgICAgICAgICAgIGludCZuYnNwO3NlY29uZCwKLSAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiPkJpZ0RlY2ltYWw8L0E+Jm5ic3A7ZnJhY3Rpb24pPC9QUkU+Ci08REw+Ci08REQ+Q29uc3RydWN0cyBhIEdEdXJhdGlvbiB3aXRoIHRoZSBzcGVjaWZpZWQgc2lnbiwKLSB5ZWFyLCBtb250aCwgZGF5LCBob3VycywgbWludXRlcywgc2Vjb25kcywgYW5kIG9wdGlvbmFsCi0gZnJhY3Rpb25hbCBzZWNvbmRzLgotPFA+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJHRHVyYXRpb24ob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb25TcGVjaWZpY2F0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotR0R1cmF0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+R0R1cmF0aW9uPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCI+R0R1cmF0aW9uU3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtnRHVyYXRpb24pPC9QUkU+Ci08REw+Ci08REQ+Q29uc3RydWN0cyBhIEdEdXJhdGlvbiBmcm9tIGFub3RoZXIgR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi4KLTxQPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iY2xvbmUoKSI+PCEtLSAtLT48L0E+PEgzPgotY2xvbmU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+IDxCPmNsb25lPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+QnVpbGRzIGFub3RoZXIgR0RhdGUgd2l0aCB0aGUgc2FtZSB2YWx1ZQotIGFzIHRoaXMgb25lLgotPFA+Ci08REQ+PERMPgotPERUPjxCPk92ZXJyaWRlczo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjY2xvbmUoKSI+Y2xvbmU8L0E+PC9DT0RFPiBpbiBjbGFzcyA8Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNJbW11dGFibGUoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNJbW11dGFibGU8L0gzPgotPFBSRT4KLXB1YmxpYyBmaW5hbCBib29sZWFuIDxCPmlzSW1tdXRhYmxlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+QWxsIEdEdXJhdGlvbiBpbnN0YW5jZXMgcmV0dXJuIHRydWUuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwjaXNJbW11dGFibGUoKSI+aXNJbW11dGFibGU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U2lnbigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTaWduPC9IMz4KLTxQUkU+Ci1wdWJsaWMgZmluYWwgaW50IDxCPmdldFNpZ248L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBzaWduIG9mIHRoZSBkdXJhdGlvbjogKzEgaXMgZm9yd2FyZHMKLSBhbmQgLTEgaXMgYmFja3dhcmRzIGluIHRpbWUuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwjZ2V0U2lnbigpIj5nZXRTaWduPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFllYXIoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0WWVhcjwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGludCA8Qj5nZXRZZWFyPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgeWVhciBjb21wb25lbnQuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwjZ2V0WWVhcigpIj5nZXRZZWFyPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE1vbnRoKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE1vbnRoPC9IMz4KLTxQUkU+Ci1wdWJsaWMgZmluYWwgaW50IDxCPmdldE1vbnRoPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgbW9udGgtb2YteWVhciBjb21wb25lbnQuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwjZ2V0TW9udGgoKSI+Z2V0TW9udGg8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RGF5KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldERheTwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGludCA8Qj5nZXREYXk8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5HZXRzIHRoZSBkYXktb2YtbW9udGggY29tcG9uZW50LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sI2dldERheSgpIj5nZXREYXk8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SG91cigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRIb3VyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgZmluYWwgaW50IDxCPmdldEhvdXI8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5HZXRzIHRoZSBob3VyLW9mLWRheSBjb21wb25lbnQuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwjZ2V0SG91cigpIj5nZXRIb3VyPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE1pbnV0ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRNaW51dGU8L0gzPgotPFBSRT4KLXB1YmxpYyBmaW5hbCBpbnQgPEI+Z2V0TWludXRlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgbWludXRlLW9mLWhvdXIgY29tcG9uZW50LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sI2dldE1pbnV0ZSgpIj5nZXRNaW51dGU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U2Vjb25kKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNlY29uZDwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGludCA8Qj5nZXRTZWNvbmQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5HZXRzIHRoZSBzZWNvbmQtb2YtbWludXRlIGNvbXBvbmVudC4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCNnZXRTZWNvbmQoKSI+Z2V0U2Vjb25kPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEZyYWN0aW9uKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEZyYWN0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiPkJpZ0RlY2ltYWw8L0E+IDxCPmdldEZyYWN0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgZnJhY3Rpb24tb2Ytc2Vjb25kLiBSYW5nZSBmcm9tIDAgKGluY2x1c2l2ZSkgdG8gMSAoZXhjbHVzaXZlKS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCNnZXRGcmFjdGlvbigpIj5nZXRGcmFjdGlvbjwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCI+R0R1cmF0aW9uU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc1ZhbGlkKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzVmFsaWQ8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzVmFsaWQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRydWUgaWYgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIGNvbXBvbmVudHMKLSBvZiB0aGUgZHVyYXRpb24gYXJlIG5vbm5lZ2F0aXZlLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sI2lzVmFsaWQoKSI+aXNWYWxpZDwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCI+R0R1cmF0aW9uU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjb21wYXJlVG9HRHVyYXRpb24ob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb25TcGVjaWZpY2F0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotY29tcGFyZVRvR0R1cmF0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgZmluYWwgaW50IDxCPmNvbXBhcmVUb0dEdXJhdGlvbjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+Jm5ic3A7ZHVyYXRpb24pPC9QUkU+Ci08REw+Ci08REQ+Q29tcGFyaXNvbiB0byBhbm90aGVyIEdEdXJhdGlvbi4KLSA8dWw+Ci0gPGxpPlJldHVybnMgLTEgaWYgdGhpcyA8IGRhdGUuIChsZXNzLXRoYW4pCi0gPGxpPlJldHVybnMgMCBpZiB0aGlzID09IGRhdGUuIChlcXVhbCkKLSA8bGk+UmV0dXJucyAxIGlmIHRoaXMgPiBkYXRlLiAoZ3JlYXRlci10aGFuKQotIDxsaT5SZXR1cm5zIDIgaWYgdGhpcyA8PiBkYXRlLiAoaW5jb21wYXJhYmxlKQotIDwvdWw+Ci0gVHdvIGluc3RhbmNlcyBhcmUgaW5jb21wYXJhYmxlIGlmIHRoZXkgaGF2ZSBkaWZmZXJlbnQgYW1vdW50cwotIG9mIGluZm9ybWF0aW9uLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sI2NvbXBhcmVUb0dEdXJhdGlvbihvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvblNwZWNpZmljYXRpb24pIj5jb21wYXJlVG9HRHVyYXRpb248L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0idG9TdHJpbmcoKSI+PCEtLSAtLT48L0E+PEgzPgotdG9TdHJpbmc8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPnRvU3RyaW5nPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VGhlIG5hdHVyYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkdXJhdGlvbi4KLSA8cD4KLSBBbnkgY29tcG9uZW50cyB0aGF0IGFyZSB6ZXJvIGFyZSBvbWl0dGVkLiBOb3RlIHRoYXQgaWYgdGhlIGR1cmF0aW9uCi0gaXMgaW52YWxpZCwgaS5lLiwgaXQgaGFzIG5lZ2F0aXZlIGNvbXBvbmVudHMsIHRob3NlIG5lZ2F0aXZlCi0gY29tcG9uZW50cyBhcmUgc2VyaWFsaXplZCBvdXQgaGVyZS4gVG8gY2hlY2sgZm9yIHZhbGlkaXR5LCB1c2UKLSB0aGUgaXNWYWxpZCgpIG1ldGhvZDsgYW5kIHRvIG5vcm1hbGl6ZSBtb3N0IGR1cmF0aW9ucyB0byBhIHZhbGlkCi0gZm9ybSB1c2UgdGhlIG5vcm1hbGl6ZSgpIG1ldGhvZC4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5PdmVycmlkZXM6PC9CPjxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPjwvQ09ERT4gaW4gY2xhc3MgPENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImFkZChvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvblNwZWNpZmljYXRpb24pIj48IS0tIC0tPjwvQT48SDM+Ci1hZGQ8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+IDxCPmFkZDwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+Jm5ic3A7ZHVyYXRpb24pPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIG5ldyBHRHVyYXRpb24gd2hpY2ggaXMgdGhlIHN1bSBvZiB0aGlzIG9uZSBhbmQgdGhlCi0gc3VwcGxpZWQgZHVyYXRpb24uICBEb2VzIGEgZmllbGR3aXNlIGFkZGl0aW9uLCB3aXRoIG5vIG5vcm1hbGl6YXRpb24uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InN1YnRyYWN0KG9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uU3BlY2lmaWNhdGlvbikiPjwhLS0gLS0+PC9BPjxIMz4KLXN1YnRyYWN0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCI+R0R1cmF0aW9uPC9BPiA8Qj5zdWJ0cmFjdDwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+Jm5ic3A7ZHVyYXRpb24pPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIG5ldyBHRHVyYXRpb24gd2hpY2ggaXMgdGhlIHJlc3VsdCBvZiBzdWJ0cmFjdGluZwotIHRoZSBzdXBwbGllZCBkdXJhdGlvbiBmcm9tIHRoaXMgb25lLiAgRG9lcyBhIGZpZWxkd2lzZQotIHN1YnRyYWN0aW9uLCB3aXRoIG5vIG5vcm1hbGl6YXRpb24uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImVxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotZXF1YWxzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5lcXVhbHM8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+VHdvIEdEdXJhdGlvbnMgYXJlIGVxdWFsIGlmIGFsbCB0aGVpciBmaWVsZHMgYXJlIGVxdWFsLgotIFRoZSBlcXVhbHMgZnVuY3Rpb24gZG9lcyBub3QgYXBwbHkgbm9ybWFsaXphdGluLgotPFA+Ci08REQ+PERMPgotPERUPjxCPk92ZXJyaWRlczo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj5lcXVhbHM8L0E+PC9DT0RFPiBpbiBjbGFzcyA8Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaGFzaENvZGUoKSI+PCEtLSAtLT48L0E+PEgzPgotaGFzaENvZGU8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+aGFzaENvZGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48REw+Ci08RFQ+PEI+T3ZlcnJpZGVzOjwvQj48REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT48L0NPREU+IGluIGNsYXNzIDxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVCdWlsZGVyLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJHRHVyYXRpb24uaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjMyZTM4Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDk0MSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ2OjU5IFBEVCAyMDAzIC0tPgotPFRJVExFPgotR0R1cmF0aW9uQnVpbGRlciAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb25CdWlsZGVyLEdEdXJhdGlvbkJ1aWxkZXIgY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IkdEdXJhdGlvbkJ1aWxkZXIgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVDYWNoZS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iR0R1cmF0aW9uQnVpbGRlci5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUNsYXNzIEdEdXJhdGlvbkJ1aWxkZXI8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb25CdWlsZGVyPC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+QWxsIEltcGxlbWVudGVkIEludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9TZXJpYWxpemFibGUuaHRtbCI+U2VyaWFsaXphYmxlPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBjbGFzcyA8Qj5HRHVyYXRpb25CdWlsZGVyPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48RFQ+aW1wbGVtZW50cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCI+R0R1cmF0aW9uU3BlY2lmaWNhdGlvbjwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIj5TZXJpYWxpemFibGU8L0E+PC9ETD4KLQotPFA+Ci1Vc2VkIHRvIGJ1aWxkIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwiPjxDT0RFPkdEdXJhdGlvbnM8L0NPREU+PC9BPi4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL3NlcmlhbGl6ZWQtZm9ybS5odG1sIiBUQVJHRVQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uQnVpbGRlciI+U2VyaWFsaXplZCBGb3JtPC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwjR0R1cmF0aW9uQnVpbGRlcigpIj5HRHVyYXRpb25CdWlsZGVyPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29uc3RydWN0cyBhbiBlbXB0eSBHRHVyYXRpb25CdWlsZGVyIHJlcHJlc2VudGluZyB6ZXJvIHNlY29uZHMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCNHRHVyYXRpb25CdWlsZGVyKG9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uU3BlY2lmaWNhdGlvbikiPkdEdXJhdGlvbkJ1aWxkZXI8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCI+R0R1cmF0aW9uU3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtnRHVyYXRpb24pPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb25zdHJ1Y3RzIGEgR0R1cmF0aW9uQnVpbGRlciBmcm9tIGFub3RoZXIgR0R1cmF0aW9uQnVpbGRlclNwZWNpZmljYXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCNHRHVyYXRpb25CdWlsZGVyKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgamF2YS5tYXRoLkJpZ0RlY2ltYWwpIj5HRHVyYXRpb25CdWlsZGVyPC9BPjwvQj4oaW50Jm5ic3A7c2lnbiwKLSAgICAgICAgICAgICAgICAgaW50Jm5ic3A7eWVhciwKLSAgICAgICAgICAgICAgICAgaW50Jm5ic3A7bW9udGgsCi0gICAgICAgICAgICAgICAgIGludCZuYnNwO2RheSwKLSAgICAgICAgICAgICAgICAgaW50Jm5ic3A7aG91ciwKLSAgICAgICAgICAgICAgICAgaW50Jm5ic3A7bWludXRlLAotICAgICAgICAgICAgICAgICBpbnQmbmJzcDtzZWNvbmQsCi0gICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj5CaWdEZWNpbWFsPC9BPiZuYnNwO2ZyYWN0aW9uKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29uc3RydWN0cyBhIEdEdXJhdGlvbkJ1aWxkZXIgd2l0aCB0aGUgc3BlY2lmaWVkIHNpZ24sCi0geWVhciwgbW9udGgsIGRheSwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFuZCBvcHRpb25hbAotIGZyYWN0aW9uYWwgc2Vjb25kcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sI0dEdXJhdGlvbkJ1aWxkZXIoamF2YS5sYW5nLlN0cmluZykiPkdEdXJhdGlvbkJ1aWxkZXI8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdHMgYSBHRHVyYXRpb24gZnJvbSBhIGxleGljYWwKLSByZXByZXNlbnRhdGlvbi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sI2FkZEdEdXJhdGlvbihvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvblNwZWNpZmljYXRpb24pIj5hZGRHRHVyYXRpb248L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCI+R0R1cmF0aW9uU3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtkdXJhdGlvbik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0FkZHMgdG8gdGhpcyBkdXJhdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCNjbG9uZSgpIj5jbG9uZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0J1aWxkcyBhbm90aGVyIEdEdXJhdGlvbkJ1aWxkZXIgd2l0aCB0aGUgc2FtZSB2YWx1ZQotIGFzIHRoaXMgb25lLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwjY29tcGFyZVRvR0R1cmF0aW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uU3BlY2lmaWNhdGlvbikiPmNvbXBhcmVUb0dEdXJhdGlvbjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPiZuYnNwO2R1cmF0aW9uKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29tcGFyaXNvbiB0byBhbm90aGVyIEdEdXJhdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sI2dldERheSgpIj5nZXREYXk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSBkYXktb2YtbW9udGggY29tcG9uZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwjZ2V0RnJhY3Rpb24oKSI+Z2V0RnJhY3Rpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSBmcmFjdGlvbi1vZi1zZWNvbmQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCNnZXRIb3VyKCkiPmdldEhvdXI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSBob3VyLW9mLWRheSBjb21wb25lbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCNnZXRNaW51dGUoKSI+Z2V0TWludXRlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7R2V0cyB0aGUgbWludXRlLW9mLWhvdXIgY29tcG9uZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwjZ2V0TW9udGgoKSI+Z2V0TW9udGg8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSBtb250aC1vZi15ZWFyIGNvbXBvbmVudC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sI2dldFNlY29uZCgpIj5nZXRTZWNvbmQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSBzZWNvbmQtb2YtbWludXRlIGNvbXBvbmVudC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sI2dldFNpZ24oKSI+Z2V0U2lnbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHNpZ24gb2YgdGhlIGR1cmF0aW9uOiArMSBpcyBmb3J3YXJkcwotIGFuZCAtMSBpcyBiYWNrd2FyZHMgaW4gdGltZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sI2dldFllYXIoKSI+Z2V0WWVhcjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0dldHMgdGhlIHllYXIgY29tcG9uZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uQnVpbGRlci5odG1sI2lzSW1tdXRhYmxlKCkiPmlzSW1tdXRhYmxlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QWxsIEdEdXJhdGlvbiBpbnN0YW5jZXMgcmV0dXJuIHRydWUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwjaXNWYWxpZCgpIj5pc1ZhbGlkPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0cnVlIGlmIGFsbCBvZiB0aGUgaW5kaXZpZHVhbCBjb21wb25lbnRzCi0gb2YgdGhlIGR1cmF0aW9uIGFyZSBub25uZWdhdGl2ZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCNub3JtYWxpemUoKSI+bm9ybWFsaXplPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Tm9ybWFsaXplIGEgZHVyYXRpb24gdmFsdWUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwjc2V0RGF5KGludCkiPnNldERheTwvQT48L0I+KGludCZuYnNwO2RheSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIGRheSBjb21wb25lbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwjc2V0RnJhY3Rpb24oamF2YS5tYXRoLkJpZ0RlY2ltYWwpIj5zZXRGcmFjdGlvbjwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj5CaWdEZWNpbWFsPC9BPiZuYnNwO2ZyYWN0aW9uKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgZnJhY3Rpb24tb2Ytc2Vjb25kIGNvbXBvbmVudC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCNzZXRIb3VyKGludCkiPnNldEhvdXI8L0E+PC9CPihpbnQmbmJzcDtob3VyKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgaG91ciBjb21wb25lbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwjc2V0TWludXRlKGludCkiPnNldE1pbnV0ZTwvQT48L0I+KGludCZuYnNwO21pbnV0ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIG1pbnV0ZSBjb21wb25lbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwjc2V0TW9udGgoaW50KSI+c2V0TW9udGg8L0E+PC9CPihpbnQmbmJzcDttb250aCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIG1vbnRoIGNvbXBvbmVudC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCNzZXRTZWNvbmQoaW50KSI+c2V0U2Vjb25kPC9BPjwvQj4oaW50Jm5ic3A7c2Vjb25kKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgc2Vjb25kIGNvbXBvbmVudC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCNzZXRTaWduKGludCkiPnNldFNpZ248L0E+PC9CPihpbnQmbmJzcDtzaWduKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgc2lnbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCNzZXRZZWFyKGludCkiPnNldFllYXI8L0E+PC9CPihpbnQmbmJzcDt5ZWFyKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgeWVhciBjb21wb25lbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwjc3VidHJhY3RHRHVyYXRpb24ob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb25TcGVjaWZpY2F0aW9uKSI+c3VidHJhY3RHRHVyYXRpb248L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCI+R0R1cmF0aW9uU3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtkdXJhdGlvbik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1N1YnRyYWN0cyBmcm9tIHRoaXMgZHVyYXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwiPkdEdXJhdGlvbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwjdG9HRHVyYXRpb24oKSI+dG9HRHVyYXRpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtCdWlsZHMgYSBHRHVyYXRpb24gZnJvbSB0aGlzIEdEdXJhdGlvbkJ1aWxkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbmF0dXJhbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGR1cmF0aW9uLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZ2V0Q2xhc3MoKSI+Z2V0Q2xhc3M8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KCkiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZykiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZywgaW50KSI+d2FpdDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0iY29uc3RydWN0b3JfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJHRHVyYXRpb25CdWlsZGVyKCkiPjwhLS0gLS0+PC9BPjxIMz4KLUdEdXJhdGlvbkJ1aWxkZXI8L0gzPgotPFBSRT4KLXB1YmxpYyA8Qj5HRHVyYXRpb25CdWlsZGVyPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+Q29uc3RydWN0cyBhbiBlbXB0eSBHRHVyYXRpb25CdWlsZGVyIHJlcHJlc2VudGluZyB6ZXJvIHNlY29uZHMuCi08UD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkdEdXJhdGlvbkJ1aWxkZXIoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLUdEdXJhdGlvbkJ1aWxkZXI8L0gzPgotPFBSRT4KLXB1YmxpYyA8Qj5HRHVyYXRpb25CdWlsZGVyPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cyk8L1BSRT4KLTxETD4KLTxERD5Db25zdHJ1Y3RzIGEgR0R1cmF0aW9uIGZyb20gYSBsZXhpY2FsCi0gcmVwcmVzZW50YXRpb24uCi08UD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkdEdXJhdGlvbkJ1aWxkZXIoaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBqYXZhLm1hdGguQmlnRGVjaW1hbCkiPjwhLS0gLS0+PC9BPjxIMz4KLUdEdXJhdGlvbkJ1aWxkZXI8L0gzPgotPFBSRT4KLXB1YmxpYyA8Qj5HRHVyYXRpb25CdWlsZGVyPC9CPihpbnQmbmJzcDtzaWduLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7eWVhciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO21vbnRoLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7ZGF5LAotICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7aG91ciwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO21pbnV0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO3NlY29uZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj5CaWdEZWNpbWFsPC9BPiZuYnNwO2ZyYWN0aW9uKTwvUFJFPgotPERMPgotPEREPkNvbnN0cnVjdHMgYSBHRHVyYXRpb25CdWlsZGVyIHdpdGggdGhlIHNwZWNpZmllZCBzaWduLAotIHllYXIsIG1vbnRoLCBkYXksIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBhbmQgb3B0aW9uYWwKLSBmcmFjdGlvbmFsIHNlY29uZHMuCi08UD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkdEdXJhdGlvbkJ1aWxkZXIob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb25TcGVjaWZpY2F0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotR0R1cmF0aW9uQnVpbGRlcjwvSDM+Ci08UFJFPgotcHVibGljIDxCPkdEdXJhdGlvbkJ1aWxkZXI8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPiZuYnNwO2dEdXJhdGlvbik8L1BSRT4KLTxETD4KLTxERD5Db25zdHJ1Y3RzIGEgR0R1cmF0aW9uQnVpbGRlciBmcm9tIGFub3RoZXIgR0R1cmF0aW9uQnVpbGRlclNwZWNpZmljYXRpb24uCi08UD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImNsb25lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNsb25lPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiA8Qj5jbG9uZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkJ1aWxkcyBhbm90aGVyIEdEdXJhdGlvbkJ1aWxkZXIgd2l0aCB0aGUgc2FtZSB2YWx1ZQotIGFzIHRoaXMgb25lLgotPFA+Ci08REQ+PERMPgotPERUPjxCPk92ZXJyaWRlczo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjY2xvbmUoKSI+Y2xvbmU8L0E+PC9DT0RFPiBpbiBjbGFzcyA8Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0idG9HRHVyYXRpb24oKSI+PCEtLSAtLT48L0E+PEgzPgotdG9HRHVyYXRpb248L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+IDxCPnRvR0R1cmF0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+QnVpbGRzIGEgR0R1cmF0aW9uIGZyb20gdGhpcyBHRHVyYXRpb25CdWlsZGVyLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJhZGRHRHVyYXRpb24ob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb25TcGVjaWZpY2F0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotYWRkR0R1cmF0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5hZGRHRHVyYXRpb248L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPiZuYnNwO2R1cmF0aW9uKTwvUFJFPgotPERMPgotPEREPkFkZHMgdG8gdGhpcyBkdXJhdGlvbi4gIERvZXMgYSBmaWVsZHdpc2UgYWRkLCB3aXRoIG5vCi0gbm9ybWFsaXphdGlvbi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic3VidHJhY3RHRHVyYXRpb24ob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb25TcGVjaWZpY2F0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotc3VidHJhY3RHRHVyYXRpb248L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnN1YnRyYWN0R0R1cmF0aW9uPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCI+R0R1cmF0aW9uU3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtkdXJhdGlvbik8L1BSRT4KLTxETD4KLTxERD5TdWJ0cmFjdHMgZnJvbSB0aGlzIGR1cmF0aW9uLiAgRG9lcyBhIGZpZWxkd2lzZSBzdWJ0cmFjdGlvbiwKLSB3aXRoIG5vIG5vcm1hbGl6YXRpb24uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFNpZ24oaW50KSI+PCEtLSAtLT48L0E+PEgzPgotc2V0U2lnbjwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIHZvaWQgPEI+c2V0U2lnbjwvQj4oaW50Jm5ic3A7c2lnbik8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSBzaWduLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRZZWFyKGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldFllYXI8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldFllYXI8L0I+KGludCZuYnNwO3llYXIpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgeWVhciBjb21wb25lbnQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldE1vbnRoKGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldE1vbnRoPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRNb250aDwvQj4oaW50Jm5ic3A7bW9udGgpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgbW9udGggY29tcG9uZW50LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXREYXkoaW50KSI+PCEtLSAtLT48L0E+PEgzPgotc2V0RGF5PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXREYXk8L0I+KGludCZuYnNwO2RheSk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSBkYXkgY29tcG9uZW50LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRIb3VyKGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEhvdXI8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldEhvdXI8L0I+KGludCZuYnNwO2hvdXIpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgaG91ciBjb21wb25lbnQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldE1pbnV0ZShpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRNaW51dGU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldE1pbnV0ZTwvQj4oaW50Jm5ic3A7bWludXRlKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIG1pbnV0ZSBjb21wb25lbnQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFNlY29uZChpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRTZWNvbmQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldFNlY29uZDwvQj4oaW50Jm5ic3A7c2Vjb25kKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHNlY29uZCBjb21wb25lbnQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEZyYWN0aW9uKGphdmEubWF0aC5CaWdEZWNpbWFsKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0RnJhY3Rpb248L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldEZyYWN0aW9uPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT4mbmJzcDtmcmFjdGlvbik8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSBmcmFjdGlvbi1vZi1zZWNvbmQgY29tcG9uZW50LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc0ltbXV0YWJsZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc0ltbXV0YWJsZTwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGJvb2xlYW4gPEI+aXNJbW11dGFibGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5BbGwgR0R1cmF0aW9uIGluc3RhbmNlcyByZXR1cm4gdHJ1ZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCNpc0ltbXV0YWJsZSgpIj5pc0ltbXV0YWJsZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCI+R0R1cmF0aW9uU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTaWduKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNpZ248L0gzPgotPFBSRT4KLXB1YmxpYyBmaW5hbCBpbnQgPEI+Z2V0U2lnbjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHNpZ24gb2YgdGhlIGR1cmF0aW9uOiArMSBpcyBmb3J3YXJkcwotIGFuZCAtMSBpcyBiYWNrd2FyZHMgaW4gdGltZS4KLSBUaGlzIHZhbHVlIGRvZXMgbm90IG5lY2Vzc2FyaWx5IHJlZmxlY3QgdGhlCi0gdHJ1ZSBkaXJlY3Rpb24gb2YgdGhlIGR1cmF0aW9uIGlmIHRoZSBkdXJhdGlvbgotIGlzIG5vdCBub3JtYWxpemVkIG9yIG5vdCBub3JtYWxpemFibGUuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwjZ2V0U2lnbigpIj5nZXRTaWduPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFllYXIoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0WWVhcjwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGludCA8Qj5nZXRZZWFyPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgeWVhciBjb21wb25lbnQuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwjZ2V0WWVhcigpIj5nZXRZZWFyPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE1vbnRoKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE1vbnRoPC9IMz4KLTxQUkU+Ci1wdWJsaWMgZmluYWwgaW50IDxCPmdldE1vbnRoPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgbW9udGgtb2YteWVhciBjb21wb25lbnQuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwjZ2V0TW9udGgoKSI+Z2V0TW9udGg8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RGF5KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldERheTwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGludCA8Qj5nZXREYXk8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5HZXRzIHRoZSBkYXktb2YtbW9udGggY29tcG9uZW50LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sI2dldERheSgpIj5nZXREYXk8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SG91cigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRIb3VyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgZmluYWwgaW50IDxCPmdldEhvdXI8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5HZXRzIHRoZSBob3VyLW9mLWRheSBjb21wb25lbnQuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwjZ2V0SG91cigpIj5nZXRIb3VyPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE1pbnV0ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRNaW51dGU8L0gzPgotPFBSRT4KLXB1YmxpYyBmaW5hbCBpbnQgPEI+Z2V0TWludXRlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgbWludXRlLW9mLWhvdXIgY29tcG9uZW50LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sI2dldE1pbnV0ZSgpIj5nZXRNaW51dGU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U2Vjb25kKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNlY29uZDwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGludCA8Qj5nZXRTZWNvbmQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5HZXRzIHRoZSBzZWNvbmQtb2YtbWludXRlIGNvbXBvbmVudC4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCNnZXRTZWNvbmQoKSI+Z2V0U2Vjb25kPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEZyYWN0aW9uKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEZyYWN0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiPkJpZ0RlY2ltYWw8L0E+IDxCPmdldEZyYWN0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgZnJhY3Rpb24tb2Ytc2Vjb25kLiBSYW5nZSBmcm9tIDAgKGluY2x1c2l2ZSkgdG8gMSAoZXhjbHVzaXZlKS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCNnZXRGcmFjdGlvbigpIj5nZXRGcmFjdGlvbjwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCI+R0R1cmF0aW9uU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc1ZhbGlkKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzVmFsaWQ8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzVmFsaWQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRydWUgaWYgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIGNvbXBvbmVudHMKLSBvZiB0aGUgZHVyYXRpb24gYXJlIG5vbm5lZ2F0aXZlLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sI2lzVmFsaWQoKSI+aXNWYWxpZDwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCI+R0R1cmF0aW9uU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJub3JtYWxpemUoKSI+PCEtLSAtLT48L0E+PEgzPgotbm9ybWFsaXplPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5ub3JtYWxpemU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5Ob3JtYWxpemUgYSBkdXJhdGlvbiB2YWx1ZS4gVGhpcyBlbnN1cmVzIHRoYXQgbW9udGhzLAotIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBhbmQgZnJhY3Rpb25zIGFyZSBwb3NpdGl2ZSBhbmQKLSB3aXRoaW4gdGhlIHJhbmdlcyAwLi4xMSwgMC4uMjMsIDAuLjU5LCBldGMuIE5lZ2F0aXZlCi0gZHVyYXRpb25zIGFyZSBpbmRpY2F0ZWQgYnkgYSBuZWdhdGl2ZSBzaWduIHJhdGhlcgotIHRoYW4gbmVnYXRpdmUgY29tcG9uZW50cy4KLSA8cD4KLSBNb3N0IGR1cmF0aW9uIHNwZWNpZmljYXRpb25zIGNhbiBiZSBub3JtYWxpemVkIHRvCi0gdmFsaWQgZHVyYXRpb25zIHdpdGggYWxsIHBvc2l0aXZlIGNvbXBvbmVudHMsIGJ1dAotIG5vdCBhbGwgb2YgdGhlbSBjYW4uCi0gPHA+Ci0gVGhlIG9ubHkgc2l0dWF0aW9ucyB3aGljaCBjYW5ub3QgYmUgbm9ybWFsaXplZCBhcmUKLSB3aGVyZSB0aGUgeWVhci9tb250aCBhbmQgdGhlIGRheS9ob3VyL21pbnV0ZS9zZWNvbmQKLSBvZmZzZXRzIGFyZSBvZiBvcHBvc2l0ZSBzaWduLiBEYXlzIGNhbm5vdCBiZSBjYXJyaWVkCi0gaW50byBtb250aHMgc2luY2UgdGhlIGxlbmd0aCBvZiBhIEdyZWdvcmlhbiBtb250aCBpcwotIHZhcmlhYmxlIGRlcGVuZGluZyBvbiB3aGVuIHRoZSBkdXJhdGlvbiBpcyBhcHBsaWVkLgotIEluIHRoZXNlIGNhc2VzLCB0aGlzIG1ldGhvZCBub3JtYWxpemVzIHRoZSBjb21wb25lbnRzCi0gc28gdGhhdCAiZGF5IiBpcyB0aGUgb25seSBuZWdhdGl2ZSBjb21wb25lbnQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNvbXBhcmVUb0dEdXJhdGlvbihvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvblNwZWNpZmljYXRpb24pIj48IS0tIC0tPjwvQT48SDM+Ci1jb21wYXJlVG9HRHVyYXRpb248L0gzPgotPFBSRT4KLXB1YmxpYyBmaW5hbCBpbnQgPEI+Y29tcGFyZVRvR0R1cmF0aW9uPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCI+R0R1cmF0aW9uU3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtkdXJhdGlvbik8L1BSRT4KLTxETD4KLTxERD5Db21wYXJpc29uIHRvIGFub3RoZXIgR0R1cmF0aW9uLgotIDx1bD4KLSA8bGk+UmV0dXJucyAtMSBpZiB0aGlzIDwgZGF0ZS4gKGxlc3MtdGhhbikKLSA8bGk+UmV0dXJucyAwIGlmIHRoaXMgPT0gZGF0ZS4gKGVxdWFsKQotIDxsaT5SZXR1cm5zIDEgaWYgdGhpcyA+IGRhdGUuIChncmVhdGVyLXRoYW4pCi0gPGxpPlJldHVybnMgMiBpZiB0aGlzIDw+IGRhdGUuIChpbmNvbXBhcmFibGUpCi0gPC91bD4KLSBUd28gaW5zdGFuY2VzIGFyZSBpbmNvbXBhcmFibGUgaWYgdGhleSBoYXZlIGRpZmZlcmVudCBhbW91bnRzCi0gb2YgaW5mb3JtYXRpb24uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwjY29tcGFyZVRvR0R1cmF0aW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uU3BlY2lmaWNhdGlvbikiPmNvbXBhcmVUb0dEdXJhdGlvbjwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCI+R0R1cmF0aW9uU3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ0b1N0cmluZygpIj48IS0tIC0tPjwvQT48SDM+Ci10b1N0cmluZzwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+dG9TdHJpbmc8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UaGUgbmF0dXJhbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGR1cmF0aW9uLgotIDxwPgotIEFueSBjb21wb25lbnRzIHRoYXQgYXJlIHplcm8gYXJlIG9taXR0ZWQuIE5vdGUgdGhhdCBpZiB0aGUgZHVyYXRpb24KLSBpcyBpbnZhbGlkLCBpLmUuLCBpdCBoYXMgbmVnYXRpdmUgY29tcG9uZW50cywgdGhvc2UgbmVnYXRpdmUKLSBjb21wb25lbnRzIGFyZSBzZXJpYWxpemVkIG91dCBoZXJlLiBUbyBjaGVjayBmb3IgdmFsaWRpdHksIHVzZQotIHRoZSBpc1ZhbGlkKCkgbWV0aG9kOyBhbmQgdG8gbm9ybWFsaXplIG1vc3QgZHVyYXRpb25zIHRvIGEgdmFsaWQKLSBmb3JtIHVzZSB0aGUgbm9ybWFsaXplKCkgbWV0aG9kLgotPFA+Ci08REQ+PERMPgotPERUPjxCPk92ZXJyaWRlczo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+PC9DT0RFPiBpbiBjbGFzcyA8Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVDYWNoZS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iR0R1cmF0aW9uQnVpbGRlci5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2NjRlZDcuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDM2ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTYgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1HRHVyYXRpb25TcGVjaWZpY2F0aW9uIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvblNwZWNpZmljYXRpb24sR0R1cmF0aW9uU3BlY2lmaWNhdGlvbiBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IkdEdXJhdGlvblNwZWNpZmljYXRpb24gKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJHRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIEdEdXJhdGlvblNwZWNpZmljYXRpb248L0gyPgotPERMPgotPERUPjxCPkFsbCBLbm93biBJbXBsZW1lbnRpbmcgQ2xhc3Nlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCI+R0R1cmF0aW9uQnVpbGRlcjwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0I+PC9ETD4KLQotPFA+Ci1SZXByZXNlbnRzIGFuIFhNTCBTY2hlbWEtY29tcGF0aWJsZSBkdXJhdGlvbi4KLSA8cD4KLSBCb3RoIHRoZSBpbW11dGFibGUgR0R1cmF0aW9uIGFuZCB0aGUgbXV0YWJsZSBHRHVyYXRpb25CdWlsZGVyIGFyZQotIEdEdXJhdGlvblNwZWNpZmljYXRpb25zLiAgVXNlIHRoaXMgaW50ZXJmYWNlIHdoZXJlIHlvdSB3YW50IHRvCi0gYWxsb3cgY2FsbGVycyB0byBwYXNzIGFueSBpbXBsZW1lbnRhdGlvbiBvZiBhIEdEdXJhdGlvbi4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwiPjxDT0RFPkdEdXJhdGlvbjwvQ09ERT48L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCNjb21wYXJlVG9HRHVyYXRpb24ob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb25TcGVjaWZpY2F0aW9uKSI+Y29tcGFyZVRvR0R1cmF0aW9uPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+Jm5ic3A7ZHVyYXRpb24pPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb21wYXJpc29uIHRvIGFub3RoZXIgR0R1cmF0aW9uLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwjZ2V0RGF5KCkiPmdldERheTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0dldHMgdGhlIGRheS1vZi1tb250aCBjb21wb25lbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj5CaWdEZWNpbWFsPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCNnZXRGcmFjdGlvbigpIj5nZXRGcmFjdGlvbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0dldHMgdGhlIGZyYWN0aW9uLW9mLXNlY29uZC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sI2dldEhvdXIoKSI+Z2V0SG91cjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0dldHMgdGhlIGhvdXItb2YtZGF5IGNvbXBvbmVudC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sI2dldE1pbnV0ZSgpIj5nZXRNaW51dGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSBtaW51dGUtb2YtaG91ciBjb21wb25lbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvblNwZWNpZmljYXRpb24uaHRtbCNnZXRNb250aCgpIj5nZXRNb250aDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0dldHMgdGhlIG1vbnRoLW9mLXllYXIgY29tcG9uZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwjZ2V0U2Vjb25kKCkiPmdldFNlY29uZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0dldHMgdGhlIHNlY29uZC1vZi1taW51dGUgY29tcG9uZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwjZ2V0U2lnbigpIj5nZXRTaWduPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgc2lnbiBvZiB0aGUgZHVyYXRpb246ICsxIGlzIGZvcndhcmRzCi0gYW5kIC0xIGlzIGJhY2t3YXJkcyBpbiB0aW1lLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwjZ2V0WWVhcigpIj5nZXRZZWFyPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7R2V0cyB0aGUgeWVhciBjb21wb25lbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwjaXNJbW11dGFibGUoKSI+aXNJbW11dGFibGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoaXMgaW5zdGFuY2UgaXMgaW1tdXRhYmxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sI2lzVmFsaWQoKSI+aXNWYWxpZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdHJ1ZSBpZiBhbGwgb2YgdGhlIGluZGl2aWR1YWwgY29tcG9uZW50cwotIG9mIHRoZSBkdXJhdGlvbiBhcmUgbm9ubmVnYXRpdmUuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJpc0ltbXV0YWJsZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc0ltbXV0YWJsZTwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNJbW11dGFibGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoaXMgaW5zdGFuY2UgaXMgaW1tdXRhYmxlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTaWduKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNpZ248L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+Z2V0U2lnbjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHNpZ24gb2YgdGhlIGR1cmF0aW9uOiArMSBpcyBmb3J3YXJkcwotIGFuZCAtMSBpcyBiYWNrd2FyZHMgaW4gdGltZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0WWVhcigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRZZWFyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldFllYXI8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5HZXRzIHRoZSB5ZWFyIGNvbXBvbmVudC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TW9udGgoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TW9udGg8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+Z2V0TW9udGg8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5HZXRzIHRoZSBtb250aC1vZi15ZWFyIGNvbXBvbmVudC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RGF5KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldERheTwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5nZXREYXk8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5HZXRzIHRoZSBkYXktb2YtbW9udGggY29tcG9uZW50LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRIb3VyKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEhvdXI8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+Z2V0SG91cjwvQj4oKTwvUFJFPgotPERMPgotPEREPkdldHMgdGhlIGhvdXItb2YtZGF5IGNvbXBvbmVudC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TWludXRlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE1pbnV0ZTwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5nZXRNaW51dGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5HZXRzIHRoZSBtaW51dGUtb2YtaG91ciBjb21wb25lbnQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFNlY29uZCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTZWNvbmQ8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+Z2V0U2Vjb25kPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgc2Vjb25kLW9mLW1pbnV0ZSBjb21wb25lbnQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEZyYWN0aW9uKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEZyYWN0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiPkJpZ0RlY2ltYWw8L0E+IDxCPmdldEZyYWN0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgZnJhY3Rpb24tb2Ytc2Vjb25kLiBSYW5nZSBmcm9tIDAgKGluY2x1c2l2ZSkgdG8gMSAoZXhjbHVzaXZlKS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNWYWxpZCgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc1ZhbGlkPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5pc1ZhbGlkPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0cnVlIGlmIGFsbCBvZiB0aGUgaW5kaXZpZHVhbCBjb21wb25lbnRzCi0gb2YgdGhlIGR1cmF0aW9uIGFyZSBub25uZWdhdGl2ZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iY29tcGFyZVRvR0R1cmF0aW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uU3BlY2lmaWNhdGlvbikiPjwhLS0gLS0+PC9BPjxIMz4KLWNvbXBhcmVUb0dEdXJhdGlvbjwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5jb21wYXJlVG9HRHVyYXRpb248L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPiZuYnNwO2R1cmF0aW9uKTwvUFJFPgotPERMPgotPEREPkNvbXBhcmlzb24gdG8gYW5vdGhlciBHRHVyYXRpb24uCi0gPHVsPgotIDxsaT5SZXR1cm5zIC0xIGlmIHRoaXMgPCBkYXRlLiAobGVzcy10aGFuKQotIDxsaT5SZXR1cm5zIDAgaWYgdGhpcyA9PSBkYXRlLiAoZXF1YWwpCi0gPGxpPlJldHVybnMgMSBpZiB0aGlzID4gZGF0ZS4gKGdyZWF0ZXItdGhhbikKLSA8bGk+UmV0dXJucyAyIGlmIHRoaXMgPD4gZGF0ZS4gKGluY29tcGFyYWJsZSkKLSA8L3VsPgotIFR3byBpbnN0YW5jZXMgYXJlIGluY29tcGFyYWJsZSBpZiB0aGV5IGhhdmUgZGlmZmVyZW50IGFtb3VudHMKLSBvZiBpbmZvcm1hdGlvbi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJHRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lQ2FjaGUuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lQ2FjaGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY4Y2M2ZS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZUNhY2hlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNzAgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1OSBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVFOYW1lQ2FjaGUgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVDYWNoZSxRTmFtZUNhY2hlIGNsYXNzIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJRTmFtZUNhY2hlIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iUU5hbWVDYWNoZS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUNsYXNzIFFOYW1lQ2FjaGU8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZUNhY2hlPC9CPgotPC9QUkU+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGZpbmFsIGNsYXNzIDxCPlFOYW1lQ2FjaGU8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvREw+Ci0KLTxQPgotQSBjYWNoZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHBvb2wgUU5hbWUgaW5zdGFuY2VzLiAgRWFjaCB0aHJlYWQgaGFzIG9uZS4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lQ2FjaGUuaHRtbCNRTmFtZUNhY2hlKGludCkiPlFOYW1lQ2FjaGU8L0E+PC9CPihpbnQmbmJzcDtpbml0aWFsQ2FwYWNpdHkpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGEgUU5hbWVDYWNoZSB3aXRoIHRoZSBnaXZlbiBpbml0aWFsQ2FwYWNpdHkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lQ2FjaGUuaHRtbCNRTmFtZUNhY2hlKGludCwgZmxvYXQpIj5RTmFtZUNhY2hlPC9BPjwvQj4oaW50Jm5ic3A7aW5pdGlhbENhcGFjaXR5LAotICAgICAgICAgICBmbG9hdCZuYnNwO2xvYWRGYWN0b3IpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGEgUU5hbWVDYWNoZSB3aXRoIHRoZSBnaXZlbiBpbml0aWFsQ2FwYWNpdHkgYW5kIGxvYWRGYWN0b3IuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lQ2FjaGUuaHRtbCNnZXROYW1lKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj5nZXROYW1lPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3VyaSwKLSAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO2xvY2FsTmFtZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0ZldGNoZXMgYSBRTmFtZSB3aXRoIHRoZSBnaXZlbiBuYW1lc3BhY2UgYW5kIGxvY2FsbmFtZS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNjbG9uZSgpIj5jbG9uZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj5lcXVhbHM8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2ZpbmFsaXplKCkiPmZpbmFsaXplPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNnZXRDbGFzcygpIj5nZXRDbGFzczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjaGFzaENvZGUoKSI+aGFzaENvZGU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeSgpIj5ub3RpZnk8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeUFsbCgpIj5ub3RpZnlBbGw8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KCkiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZykiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZywgaW50KSI+d2FpdDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0iY29uc3RydWN0b3JfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJRTmFtZUNhY2hlKGludCwgZmxvYXQpIj48IS0tIC0tPjwvQT48SDM+Ci1RTmFtZUNhY2hlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+UU5hbWVDYWNoZTwvQj4oaW50Jm5ic3A7aW5pdGlhbENhcGFjaXR5LAotICAgICAgICAgICAgICAgICAgZmxvYXQmbmJzcDtsb2FkRmFjdG9yKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYSBRTmFtZUNhY2hlIHdpdGggdGhlIGdpdmVuIGluaXRpYWxDYXBhY2l0eSBhbmQgbG9hZEZhY3Rvci4KLTxQPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5pbml0aWFsQ2FwYWNpdHk8L0NPREU+IC0gdGhlIG51bWJlciBvZiBlbnRyaWVzIHRvIGluaXRpYWxseSBtYWtlIHNwYWNlIGZvcjxERD48Q09ERT5sb2FkRmFjdG9yPC9DT0RFPiAtIGEgbnVtYmVyIHRvIGNvbnRyb2wgdGhlIGRlbnNpdHkgb2YgdGhlIGhhc2h0YWJsZTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlFOYW1lQ2FjaGUoaW50KSI+PCEtLSAtLT48L0E+PEgzPgotUU5hbWVDYWNoZTwvSDM+Ci08UFJFPgotcHVibGljIDxCPlFOYW1lQ2FjaGU8L0I+KGludCZuYnNwO2luaXRpYWxDYXBhY2l0eSk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGEgUU5hbWVDYWNoZSB3aXRoIHRoZSBnaXZlbiBpbml0aWFsQ2FwYWNpdHkuCi08UD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+aW5pdGlhbENhcGFjaXR5PC9DT0RFPiAtIHRoZSBudW1iZXIgb2YgZW50cmllcyB0byBpbml0aWFsbHkgbWFrZSBzcGFjZSBmb3I8L0RMPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXROYW1lKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXROYW1lPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiA8Qj5nZXROYW1lPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7dXJpLAotICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO2xvY2FsTmFtZSk8L1BSRT4KLTxETD4KLTxERD5GZXRjaGVzIGEgUU5hbWUgd2l0aCB0aGUgZ2l2ZW4gbmFtZXNwYWNlIGFuZCBsb2NhbG5hbWUuCi0gQ3JlYXRlcyBvbmUgaWYgb25lIGlzIG5vdCBmb3VuZCBpbiB0aGUgY2FjaGUuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnVyaTwvQ09ERT4gLSB0aGUgbmFtZXNwYWNlPEREPjxDT0RFPmxvY2FsTmFtZTwvQ09ERT4gLSB0aGUgbG9jYWxuYW1lCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBjYWNoZWQgUU5hbWU8L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iUU5hbWVDYWNoZS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNiNjU1MC4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODAyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTkgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1RTmFtZVNldCAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldCxRTmFtZVNldCBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iUU5hbWVTZXQgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lQ2FjaGUuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iUU5hbWVTZXQuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBRTmFtZVNldDwvSDI+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+amF2YS5sYW5nLk9iamVjdDwvQT4KLSAgfAotICArLS08Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLlFOYW1lU2V0PC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+QWxsIEltcGxlbWVudGVkIEludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vU2VyaWFsaXphYmxlLmh0bWwiPlNlcmlhbGl6YWJsZTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgZmluYWwgY2xhc3MgPEI+UU5hbWVTZXQ8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjxEVD5pbXBsZW1lbnRzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIj5TZXJpYWxpemFibGU8L0E+PC9ETD4KLQotPFA+Ci1UaGlzIGludGVyZmFjZSByZXByZXNlbnRzIGEgbGF0dGljZSBvZiBmaW5pdGUgYW5kIGluZmluaXRlIHNldHMgb2YgUU5hbWVzLgotIFRoZSBsYXR0aWNlIHRoZSBtaW5pbWFsIG9uZSB0aGF0IGlzIGNsb3NlZCB1bmRlciB1bmlvbiwgaW50ZXJzZWN0aW9uLCBhbmQKLSBpbnZlcnNlLCBhbmQgY29udGFpbnMgaW5kaXZpZHVhbCBRTmFtZXMgYXMgd2VsbCBhcyBlbnRpcmUgbmFtZXNwYWNlcy4KLSBIZXJlIGlzIGEgc3VtbWFyeSBvZiB0aGUgdHdvIGtpbmRzIG9mIFFOYW1lU2V0czoKLSA8dWw+Ci0gPGxpPkEgUU5hbWVTZXQgY2FuIGNvdmVyIGEgZmluaXRlIHNldCBvZiBuYW1lc3BhY2VzLCBhZGRpdGlvbmFsbHkgaW5jbHVkaW5nIGEgZmluaXRlCi0gICAgIHNldCBvZiBRTmFtZXMgb3V0c2lkZSB0aG9zZSBuYW1lc3BhY2VzLCBhbmQgd2l0aCB0aGUgZXhjZXB0aW9uIG9mCi0gICAgIGEgZmluaXRlIHNldCBvZiBRTmFtZXMgZXhjbHVkZWQgZnJvbSB0aG9zZSBuYW1lc3BhZXM6Ci0gICA8dWw+Ci0gICA8bGk+ZXhjbHVkZWRRTmFtZXNJbkluY2x1ZGVkVVJJcyA9PSB0aGUgc2V0IG9mIGV4Y2x1ZGVkIFFOYW1lcyBmcm9tIGNvdmVyZWRVUklzIG5hbWVzcGFjZXMKLSAgIDxsaT5leGNsdWRlZFVSSXMgPT0gbnVsbAotICAgPGxpPmluY2x1ZGVkVVJJcyA9PSB0aGUgc2V0IG9mIGNvdmVyZWQgbmFtZXNwYWNlIFVSSXMKLSAgIDxsaT5pbmNsdWRlZFFOYW1lc0luRXhjbHVkZWRVUklzID09IHNldCBvZiBhZGRpdGlvbmFsIFFOYW1lcyBvdXRzaWRlIGNvdmVyZWRVUklzIG5hbWVzcGFjZXMKLSAgIDwvdWw+Ci0gPC9saT4KLSA8bGk+QSBRTmFtZVNldCBjYW4gY292ZXIgYWxsIG5hbWVzcGFjZXMgZXhjZXB0IGZvciBhIGZpbml0ZSBudW1iZXIgb2YgZXhjbHVkZWQgb25lcywKLSAgICAgYWRkaXRpb25hbGx5IGluY2x1ZGluZyBhIGZpbml0ZSBzZXQgb2YgUU5hbWVzIHdpdGhpbiB0aGUgZXhjbHVkZWQgbmFtZXNwYWNlcywKLSAgICAgYW5kIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBhIGZpbml0ZSBzZXQgb2YgUU5hbWVzIG91dHNpZGUgdGhlIGV4Y2x1ZGVkIG5hbWVzcGFjZXM6Ci0gICA8dWw+Ci0gICA8bGk+ZXhjbHVkZWRRTmFtZXNJbkluY2x1ZGVkVVJJcyA9PSB0aGUgc2V0IG9mIGV4Y2x1ZGVkIFFOYW1lcyBvdXRzaWRlIHVuY292ZXJlZFVSSXMgbmFtZXNwYWNlcwotICAgPGxpPmV4Y2x1ZGVkVVJJcyA9PSB0aGUgc2V0IG9mIHVuY292ZXJlZCBuYW1lc3BhY2UgVVJJcwotICAgPGxpPmluY2x1ZGVkVVJJcyA9PSBudWxsCi0gICA8bGk+aW5jbHVkZWRRTmFtZXNJbkV4Y2x1ZGVkVVJJcyA9PSBzZXQgb2YgYWRkaXRpb25hbCBRTmFtZXMgZnJvbSB1bmNvdmVyZWRVUklzIG5hbWVzcGFjZXMKLSAgIDwvdWw+Ci0gPC9saT4KLSA8L3VsPgotIDxwPgotIE5vdGljZSB0aGF0IGEgZmluaXRlIHNldCBvZiBRTmFtZXMgaXMgYSBkZWdlbmVyYXRlIGNhc2Ugb2YgdGhlIGZpcnN0Ci0gY2F0ZWdvcnkgb3V0bGluZWQgYWJvdmU6Ci0gPHVsPgotIDxsaT5BIFFuYW1lU2V0IGNhbiBjb250YWluIGEgZmluaXRlIG51bWJlciBvZiBRTmFtZXM6Ci0gICA8dWw+Ci0gICA8bGk+ZXhjbHVkZWRRTmFtZXNJbkluY2x1ZGVkVVJJcyA9PSBudWxsCi0gICA8bGk+ZXhjbHVkZWRVUklzID09IG51bGwKLSAgIDxsaT5pbmNsdWRlZFVSSXMgPT0gZW1wdHkgc2V0Ci0gICA8bGk+aW5jbHVkZWRRTmFtZXNJbkV4Y2x1ZGVkVVJJcyA9PSBzZXQgb2YgaW5jbHVkZWQgUU5hbWVzCi0gICA8L3VsPgotIDwvbGk+Ci0gPC91bD4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL3NlcmlhbGl6ZWQtZm9ybS5odG1sIiBUQVJHRVQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXQiPlNlcmlhbGl6ZWQgRm9ybTwvQT48L0RMPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwiPlFOYW1lU2V0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwjQUxMIj5BTEw8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIFFOYW1lU2V0IGNvbnRhaW5pbmcgYWxsIFFOYW1lcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj5RTmFtZVNldDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sI0VNUFRZIj5FTVBUWTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZW1wdHkgUU5hbWVTZXQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCNMT0NBTCI+TE9DQUw8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIFFOYW1lU2V0IGNvbnRhaW5pbmcgYWxsIFFOYW1lcyBpbiB0aGUgbG9jYWwgKG5vLSluYW1lc3BhY2UuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCNOT05MT0NBTCI+Tk9OTE9DQUw8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIFFOYW1lU2V0IGNvbnRhaW5pbmcgYWxsIFFOYW1lcyBleGNlcHQgZm9yIHRob3NlIGluIHRoZSBsb2NhbCAobm8tKW5hbWVzcGFjZS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwjY29udGFpbnMoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPmNvbnRhaW5zPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO25hbWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoaXMgTW9kZWxUcmFuc2l0aW9uU2V0IGNvbnRhaW5zIHRoZSBnaXZlbiBxbmFtZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwjY29udGFpbnNBbGwob3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldFNwZWNpZmljYXRpb24pIj5jb250YWluc0FsbDwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtzZXQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoZSBnaXZlbiBzZXQgaXMgYSBzdWJzZXQgb2YgdGhpcyBvbmUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvU2V0Lmh0bWwiPlNldDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sI2V4Y2x1ZGVkUU5hbWVzSW5JbmNsdWRlZFVSSXMoKSI+ZXhjbHVkZWRRTmFtZXNJbkluY2x1ZGVkVVJJczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBzZXQgb2YgUU5hbWVzIGV4Y2x1ZGVkIGZyb20gdGhlIHNldCBldmVuIHRob3VnaCB0aGV5IGFyZSB3aXRoaW4KLSBhIG5hbWVzcGFjZSB0aGF0IGlzIG90aGVyd2lzZSBmdWxseSBpbmNsdWRlZCBpbiB0aGUgc2V0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL1NldC5odG1sIj5TZXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCNleGNsdWRlZFVSSXMoKSI+ZXhjbHVkZWRVUklzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7TmFtZXNwYWNlcyB0aGF0IGFyZSBmdWxseSBleGNsdWRlZCBmcm9tIHRoZSBzZXQgZXhjZXB0IGZvciBhIGZpbml0ZQotIG51bWJlciBvZiBpbmRpdmlkdWFsIFFOYW1lIGV4Y2VwdGlvbnMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCNmb3JBcnJheShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lW10pIj5mb3JBcnJheTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT5bXSZuYnNwO2luY2x1ZGVkUU5hbWVzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIFFOYW1lU2V0IGJhc2VkIG9uIHRoZSBnaXZlbiBhcnJheSBvZiBpbmNsdWRlZCBRTmFtZXM8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj5RTmFtZVNldDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sI2ZvclNldHMoamF2YS51dGlsLlNldCwgamF2YS51dGlsLlNldCwgamF2YS51dGlsLlNldCwgamF2YS51dGlsLlNldCkiPmZvclNldHM8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL1NldC5odG1sIj5TZXQ8L0E+Jm5ic3A7ZXhjbHVkZWRVUklzLAotICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL1NldC5odG1sIj5TZXQ8L0E+Jm5ic3A7aW5jbHVkZWRVUklzLAotICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL1NldC5odG1sIj5TZXQ8L0E+Jm5ic3A7ZXhjbHVkZWRRTmFtZXNJbkluY2x1ZGVkVVJJcywKLSAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9TZXQuaHRtbCI+U2V0PC9BPiZuYnNwO2luY2x1ZGVkUU5hbWVzSW5FeGNsdWRlZFVSSXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgUU5hbWVTZXQgYmFzZWQgb24gdGhlIGdpdmVuIHNldHMgb2YgZXhjbHVkZWQgVVJJcywKLSBpbmNsdWRlZCBVUklzLCBleGNsdWRlZCBRTmFtZXMgaW4gaW5jbHVkZWQgbmFtZXNwYWNlcywgYW5kIGluY2x1ZGVkCi0gUU5hbWVzIGluIGV4Y2x1ZGVkIG5hbWVzcGFjZXMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCNmb3JTcGVjaWZpY2F0aW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+Zm9yU3BlY2lmaWNhdGlvbjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtzcGVjKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIFFOYW1lU2V0IHdpdGggdGhlIHNhbWUgY29udGVudHMgYXMgdGhlIGdpdmVuCi0gUU5hbWVTZXRTcGVjaWZpY2F0aW9uLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwiPlFOYW1lU2V0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwjZm9yV2lsZGNhcmROYW1lc3BhY2VTdHJpbmcoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPmZvcldpbGRjYXJkTmFtZXNwYWNlU3RyaW5nPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3dpbGRjYXJkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3RhcmdldFVSSSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBRTmFtZVNldCBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiB3aWxkY2FyZCBuYW1lc3BhY2Ugc3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL1NldC5odG1sIj5TZXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCNpbmNsdWRlZFFOYW1lc0luRXhjbHVkZWRVUklzKCkiPmluY2x1ZGVkUU5hbWVzSW5FeGNsdWRlZFVSSXM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgc2V0IG9mIFFOYW1lcyBpbmNsdWRlZCBpbiB0aGUgc2V0IGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHdpdGhpbgotIGEgbmFtZXNwYWNlIHRoYXQgaXMgb3RoZXJ3aXNlIGZ1bGx5IGluY2x1ZGVkIGluIHRoZSBzZXQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvU2V0Lmh0bWwiPlNldDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sI2luY2x1ZGVkVVJJcygpIj5pbmNsdWRlZFVSSXM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtOYW1lc3BhY2VzIHRoYXQgYXJlIGZ1bGx5IGluY2x1ZGVkIGluIHNldCBleGNlcHQgZm9yIGEgZmluaXRlCi0gbnVtYmVyIG9mIGluZGl2aWR1YWwgUU5hbWUgZXhjZXB0aW9ucy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj5RTmFtZVNldDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sI2ludGVyc2VjdChvcmcuYXBhY2hlLnhtbGJlYW5zLlFOYW1lU2V0U3BlY2lmaWNhdGlvbikiPmludGVyc2VjdDwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtzZXQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IFFOYW1lU2V0IHRoYXQgaXMgdGhlIGludGVyc2VjdGlvbiBvZiB0aGlzIG9uZSBhbmQgYW5vdGhlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj5RTmFtZVNldDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sI2ludmVyc2UoKSI+aW52ZXJzZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgUU5hbWVTZXQgdGhhdCBpcyB0aGUgaW52ZXJzZSBvZiB0aGlzIG9uZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwjaXNBbGwoKSI+aXNBbGw8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoaXMgTW9kZWxUcmFuc2l0aW9uU2V0IGNvbnRhaW5zIGFsbCBRTmFtZXMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sI2lzRGlzam9pbnQob3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldFNwZWNpZmljYXRpb24pIj5pc0Rpc2pvaW50PC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPiZuYnNwO3NldCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgdGhlIGdpdmVuIHNldCBpcyBkaXNqb2ludCBmcm9tIHRoaXMgb25lLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCNpc0VtcHR5KCkiPmlzRW1wdHk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoaXMgTW9kZWxUcmFuc2l0aW9uU2V0IGNvbnRhaW5zIG5vIFFOYW1lcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj5RTmFtZVNldDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sI3NpbmdsZXRvbihqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+c2luZ2xldG9uPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO25hbWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgUU5hbWVTZXQgY29udGFpbmluZyBvbmx5IHRoZSBnaXZlbiBRTmFtZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHVzZWZ1bCBmb3IgZGVidWdnaW5nLCBzdWJqZWN0IHRvIGNoYW5nZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj5RTmFtZVNldDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sI3VuaW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+dW5pb248L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+Jm5ic3A7c2V0KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBRTmFtZVNldCB0aGF0IGlzIHRoZSB1bmlvbiBvZiB0aGlzIG9uZSBhbmQgYW5vdGhlci48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNjbG9uZSgpIj5jbG9uZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj5lcXVhbHM8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2ZpbmFsaXplKCkiPmZpbmFsaXplPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNnZXRDbGFzcygpIj5nZXRDbGFzczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjaGFzaENvZGUoKSI+aGFzaENvZGU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeSgpIj5ub3RpZnk8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeUFsbCgpIj5ub3RpZnlBbGw8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iRU1QVFkiPjwhLS0gLS0+PC9BPjxIMz4KLUVNUFRZPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+IDxCPkVNUFRZPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBlbXB0eSBRTmFtZVNldC4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkFMTCI+PCEtLSAtLT48L0E+PEgzPgotQUxMPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+IDxCPkFMTDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgUU5hbWVTZXQgY29udGFpbmluZyBhbGwgUU5hbWVzLgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTE9DQUwiPjwhLS0gLS0+PC9BPjxIMz4KLUxPQ0FMPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+IDxCPkxPQ0FMPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBRTmFtZVNldCBjb250YWluaW5nIGFsbCBRTmFtZXMgaW4gdGhlIGxvY2FsIChuby0pbmFtZXNwYWNlLgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTk9OTE9DQUwiPjwhLS0gLS0+PC9BPjxIMz4KLU5PTkxPQ0FMPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+IDxCPk5PTkxPQ0FMPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBRTmFtZVNldCBjb250YWluaW5nIGFsbCBRTmFtZXMgZXhjZXB0IGZvciB0aG9zZSBpbiB0aGUgbG9jYWwgKG5vLSluYW1lc3BhY2UuCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZm9yU2V0cyhqYXZhLnV0aWwuU2V0LCBqYXZhLnV0aWwuU2V0LCBqYXZhLnV0aWwuU2V0LCBqYXZhLnV0aWwuU2V0KSI+PCEtLSAtLT48L0E+PEgzPgotZm9yU2V0czwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwiPlFOYW1lU2V0PC9BPiA8Qj5mb3JTZXRzPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL1NldC5odG1sIj5TZXQ8L0E+Jm5ic3A7ZXhjbHVkZWRVUklzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvU2V0Lmh0bWwiPlNldDwvQT4mbmJzcDtpbmNsdWRlZFVSSXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9TZXQuaHRtbCI+U2V0PC9BPiZuYnNwO2V4Y2x1ZGVkUU5hbWVzSW5JbmNsdWRlZFVSSXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9TZXQuaHRtbCI+U2V0PC9BPiZuYnNwO2luY2x1ZGVkUU5hbWVzSW5FeGNsdWRlZFVSSXMpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIFFOYW1lU2V0IGJhc2VkIG9uIHRoZSBnaXZlbiBzZXRzIG9mIGV4Y2x1ZGVkIFVSSXMsCi0gaW5jbHVkZWQgVVJJcywgZXhjbHVkZWQgUU5hbWVzIGluIGluY2x1ZGVkIG5hbWVzcGFjZXMsIGFuZCBpbmNsdWRlZAotIFFOYW1lcyBpbiBleGNsdWRlZCBuYW1lc3BhY2VzLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5leGNsdWRlZFVSSXM8L0NPREU+IC0gdGhlIGZpbml0ZSBzZXQgb2YgbmFtZXNwYWNlIFVSSSBzdHJpbmdzIHRvIGV4Y2x1ZGUgZnJvbSB0aGUgc2V0LCBvciBudWxsIGlmIHRoaXMgc2V0IGlzIGluZmluaXRlPEREPjxDT0RFPmluY2x1ZGVkVVJJczwvQ09ERT4gLSB0aGUgZmluaXRlIHNldCBvZiBuYW1lc3BhY2UgVVJJIHN0cmluZ3MgdG8gaW5jbHVkZSBpbiB0aGUgc2V0LCBvciBudWxsIGlmIHRoaXMgc2V0IGlzIGluZmluaXRlPEREPjxDT0RFPmV4Y2x1ZGVkUU5hbWVzSW5JbmNsdWRlZFVSSXM8L0NPREU+IC0gdGhlIGZpbml0ZSBzZXQgb2YgZXhjZXB0aW9uYWwgUU5hbWVzIHRvIGV4Y2x1ZGUgZnJvbSB0aGUgaW5jbHVkZWQgbmFtZXNwYWNlcwotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgY29uc3RydWN0ZWQgUU5hbWVTZXQ8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImZvckFycmF5KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWVbXSkiPjwhLS0gLS0+PC9BPjxIMz4KLWZvckFycmF5PC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+IDxCPmZvckFycmF5PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+W10mbmJzcDtpbmNsdWRlZFFOYW1lcyk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgUU5hbWVTZXQgYmFzZWQgb24gdGhlIGdpdmVuIGFycmF5IG9mIGluY2x1ZGVkIFFOYW1lcwotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5pbmNsdWRlZFFOYW1lczwvQ09ERT4gLSB0aGUgYXJyYXkgb2YgaW5jbHVkZWQgUU5hbWVzPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJmb3JTcGVjaWZpY2F0aW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotZm9yU3BlY2lmaWNhdGlvbjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwiPlFOYW1lU2V0PC9BPiA8Qj5mb3JTcGVjaWZpY2F0aW9uPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+Jm5ic3A7c3BlYyk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgUU5hbWVTZXQgd2l0aCB0aGUgc2FtZSBjb250ZW50cyBhcyB0aGUgZ2l2ZW4KLSBRTmFtZVNldFNwZWNpZmljYXRpb24uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIGNvcGllZCBRTmFtZVNldDwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZm9yV2lsZGNhcmROYW1lc3BhY2VTdHJpbmcoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLWZvcldpbGRjYXJkTmFtZXNwYWNlU3RyaW5nPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+IDxCPmZvcldpbGRjYXJkTmFtZXNwYWNlU3RyaW5nPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7d2lsZGNhcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDt0YXJnZXRVUkkpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIFFOYW1lU2V0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIHdpbGRjYXJkIG5hbWVzcGFjZSBzdHJpbmcuCi0gVGhpcyBpcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIFVSSXMsIHBsdXMgc3BlY2lhbCB0b2tlbnMgYXMgc3BlY2lmaWVkCi0gaW4gdGhlIFhNTCBTY2hlbWEgc3BlY2lmaWNhdGlvbiAoIyNhbnksICMjb3RoZXIsICMjdGFyZ2V0TmFtZXNwYWNlLCAjI2xvY2FsKS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgY29uc3RydWN0ZWQgUU5hbWVTZXQ8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNpbmdsZXRvbihqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PCEtLSAtLT48L0E+PEgzPgotc2luZ2xldG9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+IDxCPnNpbmdsZXRvbjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO25hbWUpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIFFOYW1lU2V0IGNvbnRhaW5pbmcgb25seSB0aGUgZ2l2ZW4gUU5hbWUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIGNvbnN0cnVjdGVkIFFOYW1lU2V0PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjb250YWlucyhqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PCEtLSAtLT48L0E+PEgzPgotY29udGFpbnM8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmNvbnRhaW5zPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7bmFtZSk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoaXMgTW9kZWxUcmFuc2l0aW9uU2V0IGNvbnRhaW5zIHRoZSBnaXZlbiBxbmFtZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sI2NvbnRhaW5zKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5jb250YWluczwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNBbGwoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNBbGw8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzQWxsPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiB0aGlzIE1vZGVsVHJhbnNpdGlvblNldCBjb250YWlucyBhbGwgUU5hbWVzLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwjaXNBbGwoKSI+aXNBbGw8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzRW1wdHkoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNFbXB0eTwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNFbXB0eTwvQj4oKTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgdGhpcyBNb2RlbFRyYW5zaXRpb25TZXQgY29udGFpbnMgbm8gUU5hbWVzLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwjaXNFbXB0eSgpIj5pc0VtcHR5PC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpbnRlcnNlY3Qob3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldFNwZWNpZmljYXRpb24pIj48IS0tIC0tPjwvQT48SDM+Ci1pbnRlcnNlY3Q8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwiPlFOYW1lU2V0PC9BPiA8Qj5pbnRlcnNlY3Q8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtzZXQpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIG5ldyBRTmFtZVNldCB0aGF0IGlzIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhpcyBvbmUgYW5kIGFub3RoZXIuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCNpbnRlcnNlY3Qob3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldFNwZWNpZmljYXRpb24pIj5pbnRlcnNlY3Q8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnNldDwvQ09ERT4gLSB0aGUgc2V0IHRvIGluc2Vyc2VjdCB3aXRoCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBpbnRlcnNlY3Rpb248L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InVuaW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotdW5pb248L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwiPlFOYW1lU2V0PC9BPiA8Qj51bmlvbjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPiZuYnNwO3NldCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgbmV3IFFOYW1lU2V0IHRoYXQgaXMgdGhlIHVuaW9uIG9mIHRoaXMgb25lIGFuZCBhbm90aGVyLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwjdW5pb24ob3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldFNwZWNpZmljYXRpb24pIj51bmlvbjwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+c2V0PC9DT0RFPiAtIHRoZSBzZXQgdG8gdW5pb24gd2l0aAotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgdW5pb248L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImludmVyc2UoKSI+PCEtLSAtLT48L0E+PEgzPgotaW52ZXJzZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+IDxCPmludmVyc2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgbmV3IFFOYW1lU2V0IHRoYXQgaXMgdGhlIGludmVyc2Ugb2YgdGhpcyBvbmUuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCNpbnZlcnNlKCkiPmludmVyc2U8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNvbnRhaW5zQWxsKG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotY29udGFpbnNBbGw8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmNvbnRhaW5zQWxsPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+Jm5ic3A7c2V0KTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgdGhlIGdpdmVuIHNldCBpcyBhIHN1YnNldCBvZiB0aGlzIG9uZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sI2NvbnRhaW5zQWxsKG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+Y29udGFpbnNBbGw8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnNldDwvQ09ERT4gLSB0aGUgc2V0IHRvIHRlc3QKLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dHJ1ZSBpZiB0aGlzIGNvbnRhaW5zIGFsbCBRTmFtZXMgY29udGFpbmVkIGJ5IHRoZSBnaXZlbiBzZXQ8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzRGlzam9pbnQob3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldFNwZWNpZmljYXRpb24pIj48IS0tIC0tPjwvQT48SDM+Ci1pc0Rpc2pvaW50PC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5pc0Rpc2pvaW50PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+Jm5ic3A7c2V0KTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgdGhlIGdpdmVuIHNldCBpcyBkaXNqb2ludCBmcm9tIHRoaXMgb25lLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwjaXNEaXNqb2ludChvcmcuYXBhY2hlLnhtbGJlYW5zLlFOYW1lU2V0U3BlY2lmaWNhdGlvbikiPmlzRGlzam9pbnQ8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnNldDwvQ09ERT4gLSB0aGUgc2V0IHRvIHRlc3QKLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dHJ1ZSBpZiB0aGUgc2V0IGlzIGRpc2pvaW50IGZyb20gdGhpcyBzZXQ8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImV4Y2x1ZGVkVVJJcygpIj48IS0tIC0tPjwvQT48SDM+Ci1leGNsdWRlZFVSSXM8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL1NldC5odG1sIj5TZXQ8L0E+IDxCPmV4Y2x1ZGVkVVJJczwvQj4oKTwvUFJFPgotPERMPgotPEREPk5hbWVzcGFjZXMgdGhhdCBhcmUgZnVsbHkgZXhjbHVkZWQgZnJvbSB0aGUgc2V0IGV4Y2VwdCBmb3IgYSBmaW5pdGUKLSBudW1iZXIgb2YgaW5kaXZpZHVhbCBRTmFtZSBleGNlcHRpb25zLiAgUmV0dXJucyBudWxsIGlmIHRoaXMgc2V0IGlzIGluZmluaXRlLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwjZXhjbHVkZWRVUklzKCkiPmV4Y2x1ZGVkVVJJczwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgc2V0IG9mIGV4Y2x1ZGVkIG5hbWVzcGFjZSBVUkkgc3RyaW5nczwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaW5jbHVkZWRVUklzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWluY2x1ZGVkVVJJczwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvU2V0Lmh0bWwiPlNldDwvQT4gPEI+aW5jbHVkZWRVUklzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+TmFtZXNwYWNlcyB0aGF0IGFyZSBmdWxseSBpbmNsdWRlZCBpbiBzZXQgZXhjZXB0IGZvciBhIGZpbml0ZQotIG51bWJlciBvZiBpbmRpdmlkdWFsIFFOYW1lIGV4Y2VwdGlvbnMuIFJldHVybnMgbnVsbCBpZiB0aGlzIHNldCBpcyBpbmZpbml0ZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sI2luY2x1ZGVkVVJJcygpIj5pbmNsdWRlZFVSSXM8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dGhlIHNldCBvZiBpbmNsdWRlZCBuYW1lc3BhY2UgVVJJIHN0cmluZ3M8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImV4Y2x1ZGVkUU5hbWVzSW5JbmNsdWRlZFVSSXMoKSI+PCEtLSAtLT48L0E+PEgzPgotZXhjbHVkZWRRTmFtZXNJbkluY2x1ZGVkVVJJczwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvU2V0Lmh0bWwiPlNldDwvQT4gPEI+ZXhjbHVkZWRRTmFtZXNJbkluY2x1ZGVkVVJJczwvQj4oKTwvUFJFPgotPERMPgotPEREPlRoZSBzZXQgb2YgUU5hbWVzIGV4Y2x1ZGVkIGZyb20gdGhlIHNldCBldmVuIHRob3VnaCB0aGV5IGFyZSB3aXRoaW4KLSBhIG5hbWVzcGFjZSB0aGF0IGlzIG90aGVyd2lzZSBmdWxseSBpbmNsdWRlZCBpbiB0aGUgc2V0LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwjZXhjbHVkZWRRTmFtZXNJbkluY2x1ZGVkVVJJcygpIj5leGNsdWRlZFFOYW1lc0luSW5jbHVkZWRVUklzPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRoZSBzZXQgb2YgZXhjbHVkZWQgUU5hbWVzIGZyb20gd2l0aGluIGluY2x1ZGVkVVJJIG5hbWVzcGFjZXM8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImluY2x1ZGVkUU5hbWVzSW5FeGNsdWRlZFVSSXMoKSI+PCEtLSAtLT48L0E+PEgzPgotaW5jbHVkZWRRTmFtZXNJbkV4Y2x1ZGVkVVJJczwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvU2V0Lmh0bWwiPlNldDwvQT4gPEI+aW5jbHVkZWRRTmFtZXNJbkV4Y2x1ZGVkVVJJczwvQj4oKTwvUFJFPgotPERMPgotPEREPlRoZSBzZXQgb2YgUU5hbWVzIGluY2x1ZGVkIGluIHRoZSBzZXQgZXZlbiB0aG91Z2ggdGhleSBhcmUgd2l0aGluCi0gYSBuYW1lc3BhY2UgdGhhdCBpcyBvdGhlcndpc2UgZnVsbHkgaW5jbHVkZWQgaW4gdGhlIHNldC4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sI2luY2x1ZGVkUU5hbWVzSW5FeGNsdWRlZFVSSXMoKSI+aW5jbHVkZWRRTmFtZXNJbkV4Y2x1ZGVkVVJJczwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50aGUgc2V0IG9mIGluY2x1ZGVkIFFOYW1lcyBmcm9tIHdpdGhpbiBleGNsdWRlZFVSSSBuYW1lc3BhY2VzPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ0b1N0cmluZygpIj48IS0tIC0tPjwvQT48SDM+Ci10b1N0cmluZzwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+dG9TdHJpbmc8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHVzZWZ1bCBmb3IgZGVidWdnaW5nLCBzdWJqZWN0IHRvIGNoYW5nZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5PdmVycmlkZXM6PC9CPjxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPjwvQ09ERT4gaW4gY2xhc3MgPENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZUNhY2hlLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlFOYW1lU2V0Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNTZlYzAuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4OTYgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1OSBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVFOYW1lU2V0QnVpbGRlciAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldEJ1aWxkZXIsUU5hbWVTZXRCdWlsZGVyIGNsYXNzIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJRTmFtZVNldEJ1aWxkZXIgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWYuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlFOYW1lU2V0QnVpbGRlci5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUNsYXNzIFFOYW1lU2V0QnVpbGRlcjwvSDI+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+amF2YS5sYW5nLk9iamVjdDwvQT4KLSAgfAotICArLS08Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLlFOYW1lU2V0QnVpbGRlcjwvQj4KLTwvUFJFPgotPERMPgotPERUPjxCPkFsbCBJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIj5TZXJpYWxpemFibGU8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGNsYXNzIDxCPlFOYW1lU2V0QnVpbGRlcjwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PERUPmltcGxlbWVudHMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vU2VyaWFsaXphYmxlLmh0bWwiPlNlcmlhbGl6YWJsZTwvQT48L0RMPgotCi08UD4KLVVzZWQgdG8gYnVpbGQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj48Q09ERT5RTmFtZVNldHM8L0NPREU+PC9BPi4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL3NlcmlhbGl6ZWQtZm9ybS5odG1sIiBUQVJHRVQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRCdWlsZGVyIj5TZXJpYWxpemVkIEZvcm08L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sI1FOYW1lU2V0QnVpbGRlcigpIj5RTmFtZVNldEJ1aWxkZXI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb25zdHJ1Y3RzIGFuIGVtcHR5IFFOYW1lU2V0QnVpbGRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwjUU5hbWVTZXRCdWlsZGVyKG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+UU5hbWVTZXRCdWlsZGVyPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPiZuYnNwO3NldCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdHMgYSBRTmFtZVNldEJ1aWxkZXIgd2hvc2UgaW5pdGlhbCBjb250ZW50cyBhcmUgZ2l2ZW4gYnkKLSBhbm90aGVyIFFOYW1lU2V0U3BlY2lmaWNhdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwjUU5hbWVTZXRCdWlsZGVyKGphdmEudXRpbC5TZXQsIGphdmEudXRpbC5TZXQsIGphdmEudXRpbC5TZXQsIGphdmEudXRpbC5TZXQpIj5RTmFtZVNldEJ1aWxkZXI8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL1NldC5odG1sIj5TZXQ8L0E+Jm5ic3A7ZXhjbHVkZWRVUklzLAotICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvU2V0Lmh0bWwiPlNldDwvQT4mbmJzcDtpbmNsdWRlZFVSSXMsCi0gICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9TZXQuaHRtbCI+U2V0PC9BPiZuYnNwO2V4Y2x1ZGVkUU5hbWVzSW5JbmNsdWRlZFVSSXMsCi0gICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9TZXQuaHRtbCI+U2V0PC9BPiZuYnNwO2luY2x1ZGVkUU5hbWVzSW5FeGNsdWRlZFVSSXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb25zdHJ1Y3RzIGEgUU5hbWVTZXRCdWlsZGVyIHdob3NlIGluaXRhbCBjb250ZW50cyBhcmUgZ2l2ZW4gYnkKLSB0aGUgZm91ciBzZXRzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCNRTmFtZVNldEJ1aWxkZXIoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPlFOYW1lU2V0QnVpbGRlcjwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzdHIsCi0gICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3RhcmdldFVSSSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdHMgYSBRTmFtZVNldEJ1aWxkZXIgd2hvc2UgaW5pdGlhbCBjb250ZW50cyBhcmUgZ2l2ZW4KLSBhcyBhIGxpc3Qgb2YgbmFtZXNwYWNlIFVSSXMsIHVzaW5nIHRoZSBzYW1lIGZvcm1hdCB1c2VkIGJ5IHdpbGRjYXJkcwotIGluIFhTRCBmaWxlcy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwjYWRkKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5hZGQ8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7cW5hbWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBZGRzIGEgc2luZ2xlIFFOYW1lIHRvIHRoaXMgUU5hbWVTZXRCdWlsZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwjYWRkQWxsKG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+YWRkQWxsPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPiZuYnNwO3NldCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0FkZHMgdGhlIGNvbnRlbnRzIG9mIGFub3RoZXIgUU5hbWVTZXQgdG8gdGhpcyBRTmFtZVNldEJ1aWxkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCNhZGROYW1lc3BhY2UoamF2YS5sYW5nLlN0cmluZykiPmFkZE5hbWVzcGFjZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDt1cmkpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBZGRzIGFuIGVudGlyZSBuYW1lc3BhY2UgVVJJIG9mIFFOYW1lcyB0byB0aGlzIFFOYW1lU2V0QnVpbGRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sI2NsZWFyKCkiPmNsZWFyPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q2xlYXJzIHRoaXMgUU5hbWVTZXRCdWlsZGVyPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCNjb250YWlucyhqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+Y29udGFpbnM8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7bmFtZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgdGhpcyBNb2RlbFRyYW5zaXRpb25TZXQgY29udGFpbnMgdGhlIGdpdmVuIHFuYW1lLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwjY29udGFpbnNBbGwob3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldFNwZWNpZmljYXRpb24pIj5jb250YWluc0FsbDwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtzZXQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoZSBwYXJhbWV0ZXIgaXMgYSBzdWJzZXQgb2YgdGhpcyBzZXQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvU2V0Lmh0bWwiPlNldDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCNleGNsdWRlZFFOYW1lc0luSW5jbHVkZWRVUklzKCkiPmV4Y2x1ZGVkUU5hbWVzSW5JbmNsdWRlZFVSSXM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmluaXRlIHNldCBvZiBRTmFtZXMgdGhhdCBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgc2V0IHdpdGhpbiBuYW1lc3BhY2VzCi0gdGhhdCBhcmUgb3RoZXJ3aXNlIGluY2x1ZGVkLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL1NldC5odG1sIj5TZXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwjZXhjbHVkZWRVUklzKCkiPmV4Y2x1ZGVkVVJJczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmaW5pdGUgc2V0IG9mIG5hbWVzcGFjZSBVUklzIHRoYXQgYXJlIGFsbW9zdCBjb21wbGV0ZWx5IGV4Y2x1ZGVkIGZyb20KLSB0aGUgc2V0ICh0aGF0IGlzLCBlYWNoIG5hbWVzcGFjZSBVUkkgdGhhdCBpbmNsdWRlZCBpbiB0aGUgc2V0IHdpdGggd2l0aAotIGEgZmluaXRlIG51bWJlciBvZiBRTmFtZSBleGNlcHRpb25zKS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9TZXQuaHRtbCI+U2V0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sI2luY2x1ZGVkUU5hbWVzSW5FeGNsdWRlZFVSSXMoKSI+aW5jbHVkZWRRTmFtZXNJbkV4Y2x1ZGVkVVJJczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmaW5pdGUgc2V0IG9mIFFOYW1lcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGUgc2V0IHdpdGhpbiBuYW1lc3BhY2VzCi0gdGhhdCBhcmUgb3RoZXJ3aXNlIGV4Y2x1ZGVkLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL1NldC5odG1sIj5TZXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwjaW5jbHVkZWRVUklzKCkiPmluY2x1ZGVkVVJJczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmaW5pdGUgc2V0IG9mIG5hbWVzcGFjZSBVUklzIHRoYXQgYXJlIGFsbW9zdCBjb21wbGV0ZWx5IGluY2x1ZGVkIGluCi0gdGhlIHNldCAodGhhdCBpcywgZWFjaCBuYW1lc3BhY2UgVVJJIHRoYXQgaW5jbHVkZWQgaW4gdGhlIHNldCB3aXRoIHdpdGgKLSBhIGZpbml0ZSBudW1iZXIgb2YgUU5hbWUgZXhjZXB0aW9ucykuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwjaW50ZXJzZWN0KG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+aW50ZXJzZWN0PC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPiZuYnNwO3NldCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgUU5hbWVTZXQgdGhhdCBpcyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoaXMgb25lIGFuZCBhbm90aGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwiPlFOYW1lU2V0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sI2ludmVyc2UoKSI+aW52ZXJzZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgUU5hbWVTZXQgdGhhdCBpcyB0aGUgaW52ZXJzZSBvZiB0aGlzIG9uZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sI2ludmVydCgpIj5pbnZlcnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtJbnZlcnRzIHRoaXMgUU5hbWVTZXRCdWlsZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwjaXNBbGwoKSI+aXNBbGw8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoaXMgTW9kZWxUcmFuc2l0aW9uU2V0IGNvbnRhaW5zIGFsbCBRTmFtZXMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCNpc0Rpc2pvaW50KG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+aXNEaXNqb2ludDwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtzZXQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoZSBnaXZlbiBzZXQgaXMgZGlzam9pbnQgZnJvbSB0aGlzIG9uZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sI2lzRW1wdHkoKSI+aXNFbXB0eTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgdGhpcyBNb2RlbFRyYW5zaXRpb25TZXQgY29udGFpbnMgbm8gUU5hbWVzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwjcmVtb3ZlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5yZW1vdmU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7cW5hbWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZW1vdmVzIHRoZSBnaXZlbiBxbmFtZSBmcm9tIHRoaXMgUU5hbWVTZXRCdWlsZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwjcmVtb3ZlQWxsKG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+cmVtb3ZlQWxsPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPiZuYnNwO3NldCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JlbW92ZXMgYWxsIGNvbnRlbnRzIG9mIGEgZ2l2ZW4gUU5hbWVTZXQgZnJvbSB0aGlzIFFOYW1lU2V0QnVpbGRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sI3JlbW92ZU5hbWVzcGFjZShqYXZhLmxhbmcuU3RyaW5nKSI+cmVtb3ZlTmFtZXNwYWNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3VyaSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JlbW92ZXMgYW4gZW50aXJlIG5hbWVzcGFjZSBVUkkgZnJvbSB0aGlzIFFOYW1lU2V0QnVpbGRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sI3Jlc3RyaWN0KG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+cmVzdHJpY3Q8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+Jm5ic3A7c2V0KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmVzdHJpY3RzIHRoZSBjb250ZW50cyBvZiB0aGlzIFFOYW1lU2V0QnVpbGRlciB0byBiZSBhIHN1YnNldCBvZiB0aGUKLSBnaXZlbiBRTmFtZVNldC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj5RTmFtZVNldDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCN0b1FOYW1lU2V0KCkiPnRvUU5hbWVTZXQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj48Q09ERT5RTmFtZVNldDwvQ09ERT48L0E+IGVxdWl2YWxlbnQgdG8gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpcwotIFFOYW1lU2V0QnVpbGRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiB1c2VmdWwgZm9yIGRlYnVnZ2luZywgc3ViamVjdCB0byBjaGFuZ2UuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRCdWlsZGVyLmh0bWwjdW5pb24ob3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldFNwZWNpZmljYXRpb24pIj51bmlvbjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtzZXQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IFFOYW1lU2V0IHRoYXQgaXMgdGhlIHVuaW9uIG9mIHRoaXMgb25lIGFuZCBhbm90aGVyLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iUU5hbWVTZXRCdWlsZGVyKCkiPjwhLS0gLS0+PC9BPjxIMz4KLVFOYW1lU2V0QnVpbGRlcjwvSDM+Ci08UFJFPgotcHVibGljIDxCPlFOYW1lU2V0QnVpbGRlcjwvQj4oKTwvUFJFPgotPERMPgotPEREPkNvbnN0cnVjdHMgYW4gZW1wdHkgUU5hbWVTZXRCdWlsZGVyLgotPFA+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJRTmFtZVNldEJ1aWxkZXIob3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldFNwZWNpZmljYXRpb24pIj48IS0tIC0tPjwvQT48SDM+Ci1RTmFtZVNldEJ1aWxkZXI8L0gzPgotPFBSRT4KLXB1YmxpYyA8Qj5RTmFtZVNldEJ1aWxkZXI8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtzZXQpPC9QUkU+Ci08REw+Ci08REQ+Q29uc3RydWN0cyBhIFFOYW1lU2V0QnVpbGRlciB3aG9zZSBpbml0aWFsIGNvbnRlbnRzIGFyZSBnaXZlbiBieQotIGFub3RoZXIgUU5hbWVTZXRTcGVjaWZpY2F0aW9uLgotPFA+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnNldDwvQ09ERT4gLSB0aGUgUU5hbWVTZXRTcGVjaWZpY2FpdG9uIHRvIGNvcHk8L0RMPgotPEhSPgotCi08QSBOQU1FPSJRTmFtZVNldEJ1aWxkZXIoamF2YS51dGlsLlNldCwgamF2YS51dGlsLlNldCwgamF2YS51dGlsLlNldCwgamF2YS51dGlsLlNldCkiPjwhLS0gLS0+PC9BPjxIMz4KLVFOYW1lU2V0QnVpbGRlcjwvSDM+Ci08UFJFPgotcHVibGljIDxCPlFOYW1lU2V0QnVpbGRlcjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9TZXQuaHRtbCI+U2V0PC9BPiZuYnNwO2V4Y2x1ZGVkVVJJcywKLSAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9TZXQuaHRtbCI+U2V0PC9BPiZuYnNwO2luY2x1ZGVkVVJJcywKLSAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9TZXQuaHRtbCI+U2V0PC9BPiZuYnNwO2V4Y2x1ZGVkUU5hbWVzSW5JbmNsdWRlZFVSSXMsCi0gICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvU2V0Lmh0bWwiPlNldDwvQT4mbmJzcDtpbmNsdWRlZFFOYW1lc0luRXhjbHVkZWRVUklzKTwvUFJFPgotPERMPgotPEREPkNvbnN0cnVjdHMgYSBRTmFtZVNldEJ1aWxkZXIgd2hvc2UgaW5pdGFsIGNvbnRlbnRzIGFyZSBnaXZlbiBieQotIHRoZSBmb3VyIHNldHMuICBFeGFjdGx5IG9uZSBvZiBlaXRoZXIgZXhjbHVkZWRVUklzIG9yIGluY2x1ZGVkVVJJcyBtdXN0Ci0gYmUgbm9uLW51bGwuCi08UD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+ZXhjbHVkZWRVUklzPC9DT0RFPiAtIHRoZSBmaW5pdGUgc2V0IG9mIG5hbWVzcGFjZSBVUkkgc3RyaW5ncyB0byBleGNsdWRlIGZyb20gdGhlIHNldCwgb3IgbnVsbCBpZiB0aGlzIHNldCBpcyBpbmZpbml0ZTxERD48Q09ERT5pbmNsdWRlZFVSSXM8L0NPREU+IC0gdGhlIGZpbml0ZSBzZXQgb2YgbmFtZXNwYWNlIFVSSSBzdHJpbmdzIHRvIGluY2x1ZGUgaW4gdGhlIHNldCwgb3IgbnVsbCBpZiB0aGlzIHNldCBpcyBpbmZpbml0ZTxERD48Q09ERT5leGNsdWRlZFFOYW1lc0luSW5jbHVkZWRVUklzPC9DT0RFPiAtIHRoZSBmaW5pdGUgc2V0IG9mIGV4Y2VwdGlvbmFsIFFOYW1lcyB0byBleGNsdWRlIGZyb20gdGhlIGluY2x1ZGVkIG5hbWVzcGFjZXM8L0RMPgotPEhSPgotCi08QSBOQU1FPSJRTmFtZVNldEJ1aWxkZXIoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLVFOYW1lU2V0QnVpbGRlcjwvSDM+Ci08UFJFPgotcHVibGljIDxCPlFOYW1lU2V0QnVpbGRlcjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3RhcmdldFVSSSk8L1BSRT4KLTxETD4KLTxERD5Db25zdHJ1Y3RzIGEgUU5hbWVTZXRCdWlsZGVyIHdob3NlIGluaXRpYWwgY29udGVudHMgYXJlIGdpdmVuCi0gYXMgYSBsaXN0IG9mIG5hbWVzcGFjZSBVUklzLCB1c2luZyB0aGUgc2FtZSBmb3JtYXQgdXNlZCBieSB3aWxkY2FyZHMKLSBpbiBYU0QgZmlsZXMuCi08UD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+c3RyPC9DT0RFPiAtIGEgd2lsZGNhcmQgbmFtZXNwYWNlIHNwZWNpZmljYXRpb24gc3RyaW5nIHN1Y2ggYXMgIiMjYW55IiwKLSAgICAgICAgIiMjb3RoZXIiLCAiIyNsb2NhbCIsICIjI3RhcmdldE5hbWVzcGFjZSIsIG9yIGEgc3BhY2Utc2VwYXJhdGVkCi0gICAgICAgIGxpc3Qgb2YgVVJJcy48REQ+PENPREU+dGFyZ2V0VVJJPC9DT0RFPiAtIHRoZSBjdXJyZW50IHRhcmdldE5hbWVzcGFjZTwvREw+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImNvbnRhaW5zKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48IS0tIC0tPjwvQT48SDM+Ci1jb250YWluczwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+Y29udGFpbnM8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgdGhpcyBNb2RlbFRyYW5zaXRpb25TZXQgY29udGFpbnMgdGhlIGdpdmVuIHFuYW1lLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwjY29udGFpbnMoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPmNvbnRhaW5zPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc0FsbCgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc0FsbDwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNBbGw8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoaXMgTW9kZWxUcmFuc2l0aW9uU2V0IGNvbnRhaW5zIGFsbCBRTmFtZXMuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCNpc0FsbCgpIj5pc0FsbDwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNFbXB0eSgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc0VtcHR5PC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5pc0VtcHR5PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiB0aGlzIE1vZGVsVHJhbnNpdGlvblNldCBjb250YWlucyBubyBRTmFtZXMuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCNpc0VtcHR5KCkiPmlzRW1wdHk8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImludGVyc2VjdChvcmcuYXBhY2hlLnhtbGJlYW5zLlFOYW1lU2V0U3BlY2lmaWNhdGlvbikiPjwhLS0gLS0+PC9BPjxIMz4KLWludGVyc2VjdDwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+IDxCPmludGVyc2VjdDwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPiZuYnNwO3NldCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgbmV3IFFOYW1lU2V0IHRoYXQgaXMgdGhlIGludGVyc2VjdGlvbiBvZiB0aGlzIG9uZSBhbmQgYW5vdGhlci4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sI2ludGVyc2VjdChvcmcuYXBhY2hlLnhtbGJlYW5zLlFOYW1lU2V0U3BlY2lmaWNhdGlvbikiPmludGVyc2VjdDwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0idW5pb24ob3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldFNwZWNpZmljYXRpb24pIj48IS0tIC0tPjwvQT48SDM+Ci11bmlvbjwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+IDxCPnVuaW9uPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+Jm5ic3A7c2V0KTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBuZXcgUU5hbWVTZXQgdGhhdCBpcyB0aGUgdW5pb24gb2YgdGhpcyBvbmUgYW5kIGFub3RoZXIuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCN1bmlvbihvcmcuYXBhY2hlLnhtbGJlYW5zLlFOYW1lU2V0U3BlY2lmaWNhdGlvbikiPnVuaW9uPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpbnZlcnNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWludmVyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwiPlFOYW1lU2V0PC9BPiA8Qj5pbnZlcnNlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIG5ldyBRTmFtZVNldCB0aGF0IGlzIHRoZSBpbnZlcnNlIG9mIHRoaXMgb25lLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwjaW52ZXJzZSgpIj5pbnZlcnNlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjb250YWluc0FsbChvcmcuYXBhY2hlLnhtbGJlYW5zLlFOYW1lU2V0U3BlY2lmaWNhdGlvbikiPjwhLS0gLS0+PC9BPjxIMz4KLWNvbnRhaW5zQWxsPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5jb250YWluc0FsbDwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPiZuYnNwO3NldCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoZSBwYXJhbWV0ZXIgaXMgYSBzdWJzZXQgb2YgdGhpcyBzZXQuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCNjb250YWluc0FsbChvcmcuYXBhY2hlLnhtbGJlYW5zLlFOYW1lU2V0U3BlY2lmaWNhdGlvbikiPmNvbnRhaW5zQWxsPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc0Rpc2pvaW50KG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotaXNEaXNqb2ludDwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNEaXNqb2ludDwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPiZuYnNwO3NldCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoZSBnaXZlbiBzZXQgaXMgZGlzam9pbnQgZnJvbSB0aGlzIG9uZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sI2lzRGlzam9pbnQob3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldFNwZWNpZmljYXRpb24pIj5pc0Rpc2pvaW50PC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjbGVhcigpIj48IS0tIC0tPjwvQT48SDM+Ci1jbGVhcjwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+Y2xlYXI8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5DbGVhcnMgdGhpcyBRTmFtZVNldEJ1aWxkZXIKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaW52ZXJ0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWludmVydDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+aW52ZXJ0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+SW52ZXJ0cyB0aGlzIFFOYW1lU2V0QnVpbGRlci4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iYWRkKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48IS0tIC0tPjwvQT48SDM+Ci1hZGQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPmFkZDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO3FuYW1lKTwvUFJFPgotPERMPgotPEREPkFkZHMgYSBzaW5nbGUgUU5hbWUgdG8gdGhpcyBRTmFtZVNldEJ1aWxkZXIuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImFkZE5hbWVzcGFjZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotYWRkTmFtZXNwYWNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5hZGROYW1lc3BhY2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDt1cmkpPC9QUkU+Ci08REw+Ci08REQ+QWRkcyBhbiBlbnRpcmUgbmFtZXNwYWNlIFVSSSBvZiBRTmFtZXMgdG8gdGhpcyBRTmFtZVNldEJ1aWxkZXIuCi0gVGhlIGVtcHR5IHN0cmluZyBpcyB1c2VkIHRvIHNpZ25pZml5IHRoZSAobG9jYWwpIG5vLW5hbWVzcGFjZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iYWRkQWxsKG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotYWRkQWxsPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5hZGRBbGw8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtzZXQpPC9QUkU+Ci08REw+Ci08REQ+QWRkcyB0aGUgY29udGVudHMgb2YgYW5vdGhlciBRTmFtZVNldCB0byB0aGlzIFFOYW1lU2V0QnVpbGRlci4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icmVtb3ZlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48IS0tIC0tPjwvQT48SDM+Ci1yZW1vdmU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnJlbW92ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO3FuYW1lKTwvUFJFPgotPERMPgotPEREPlJlbW92ZXMgdGhlIGdpdmVuIHFuYW1lIGZyb20gdGhpcyBRTmFtZVNldEJ1aWxkZXIuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InJlbW92ZU5hbWVzcGFjZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotcmVtb3ZlTmFtZXNwYWNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5yZW1vdmVOYW1lc3BhY2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDt1cmkpPC9QUkU+Ci08REw+Ci08REQ+UmVtb3ZlcyBhbiBlbnRpcmUgbmFtZXNwYWNlIFVSSSBmcm9tIHRoaXMgUU5hbWVTZXRCdWlsZGVyLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJyZW1vdmVBbGwob3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldFNwZWNpZmljYXRpb24pIj48IS0tIC0tPjwvQT48SDM+Ci1yZW1vdmVBbGw8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnJlbW92ZUFsbDwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPiZuYnNwO3NldCk8L1BSRT4KLTxETD4KLTxERD5SZW1vdmVzIGFsbCBjb250ZW50cyBvZiBhIGdpdmVuIFFOYW1lU2V0IGZyb20gdGhpcyBRTmFtZVNldEJ1aWxkZXIuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InJlc3RyaWN0KG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotcmVzdHJpY3Q8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnJlc3RyaWN0PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+Jm5ic3A7c2V0KTwvUFJFPgotPERMPgotPEREPlJlc3RyaWN0cyB0aGUgY29udGVudHMgb2YgdGhpcyBRTmFtZVNldEJ1aWxkZXIgdG8gYmUgYSBzdWJzZXQgb2YgdGhlCi0gZ2l2ZW4gUU5hbWVTZXQuIEluIG90aGVyIHdvcmRzLCBjb21wdXRlcyBhbiBpbnRlcnNlY3Rpb24uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImV4Y2x1ZGVkVVJJcygpIj48IS0tIC0tPjwvQT48SDM+Ci1leGNsdWRlZFVSSXM8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL1NldC5odG1sIj5TZXQ8L0E+IDxCPmV4Y2x1ZGVkVVJJczwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5UaGUgZmluaXRlIHNldCBvZiBuYW1lc3BhY2UgVVJJcyB0aGF0IGFyZSBhbG1vc3QgY29tcGxldGVseSBleGNsdWRlZCBmcm9tCi0gdGhlIHNldCAodGhhdCBpcywgZWFjaCBuYW1lc3BhY2UgVVJJIHRoYXQgaW5jbHVkZWQgaW4gdGhlIHNldCB3aXRoIHdpdGgKLSBhIGZpbml0ZSBudW1iZXIgb2YgUU5hbWUgZXhjZXB0aW9ucykuIE51bGwgaWYgdGhlIHNldCBvZiBuYW1lc3BhY2VVUklzCi0gdGhhdCBhcmUgYWxtb3N0IGNvbXBsZXRlbHkgaW5jbHVkZWQgaXMgaW5maW5pdGUuCi0gPHA+Ci0gTnVsbCAobWVhbmluZyBhbG1vc3QgYWxsIFVSSXMgZXhjbHVkZWQpIGlmIGluY2x1ZGVkVVJJcygpIGlzIG5vbi1udWxsOwotIG5vbi1udWxsIG90aGVyd2lzZS4KLSA8cD4KLSBUaGUgc2FtZSBzZXQgYXMgaW52ZXJzZSgpLmluY2x1ZGVkVVJJcygpLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwjZXhjbHVkZWRVUklzKCkiPmV4Y2x1ZGVkVVJJczwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaW5jbHVkZWRVUklzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWluY2x1ZGVkVVJJczwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvU2V0Lmh0bWwiPlNldDwvQT4gPEI+aW5jbHVkZWRVUklzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlRoZSBmaW5pdGUgc2V0IG9mIG5hbWVzcGFjZSBVUklzIHRoYXQgYXJlIGFsbW9zdCBjb21wbGV0ZWx5IGluY2x1ZGVkIGluCi0gdGhlIHNldCAodGhhdCBpcywgZWFjaCBuYW1lc3BhY2UgVVJJIHRoYXQgaW5jbHVkZWQgaW4gdGhlIHNldCB3aXRoIHdpdGgKLSBhIGZpbml0ZSBudW1iZXIgb2YgUU5hbWUgZXhjZXB0aW9ucykuIE51bGwgaWYgdGhlIHNldCBvZiBuYW1lc3BhY2VVUklzCi0gdGhhdCBhcmUgYWxtb3N0IGNvbXBsZXRlbHkgaW5jbHVkZWQgaXMgaW5maW5pdGUuCi0gPHA+Ci0gTnVsbCAobWVhbmluZyBhbG1vc3QgYWxsIFVSSXMgaW5jbHVkZWQpIGlmIGV4Y2x1ZGVkVVJJcygpIGlzIG5vbi1udWxsOwotIG5vbi1udWxsIG90aGVyd2lzZS4KLSA8cD4KLSBUaGUgc2FtZSBhcyBpbnZlcnNlLmV4Y2x1ZGVkVVJJcygpLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwjaW5jbHVkZWRVUklzKCkiPmluY2x1ZGVkVVJJczwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZXhjbHVkZWRRTmFtZXNJbkluY2x1ZGVkVVJJcygpIj48IS0tIC0tPjwvQT48SDM+Ci1leGNsdWRlZFFOYW1lc0luSW5jbHVkZWRVUklzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9TZXQuaHRtbCI+U2V0PC9BPiA8Qj5leGNsdWRlZFFOYW1lc0luSW5jbHVkZWRVUklzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVzY3JpcHRpb24gY29waWVkIGZyb20gaW50ZXJmYWNlOiA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+PC9DT0RFPjwvQj48L0REPgotPEREPlRoZSBmaW5pdGUgc2V0IG9mIFFOYW1lcyB0aGF0IGFyZSBleGNsdWRlZCBmcm9tIHRoZSBzZXQgd2l0aGluIG5hbWVzcGFjZXMKLSB0aGF0IGFyZSBvdGhlcndpc2UgaW5jbHVkZWQuIFNob3VsZCBvbmx5IGNvbnRhaW4gUU5hbWVzIHdpdGhpbiBuYW1lc3BhY2UKLSB0aGF0IGFyZSB3aXRoaW4gdGhlIHNldCBpbmNsdWRlZFVSSXMoKSAob3IgYW55IFVSSSwgaWYgaW5jbHVkZWRVUklzKCkKLSBpcyBudWxsLCB3aGljaCBtZWFucyB0aGF0IGFsbCBVUklzIGFyZSBhbG1vc3QgY29tcGxldGVseSBpbmNsdWRlZCkuCi0gPHA+Ci0gTmV2ZXIgbnVsbC4KLSA8cD4KLSBUaGUgc2FtZSBzZXQgYXMgaW52ZXJzZSgpLmluY2x1ZGVkUU5hbWVzKCkuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCNleGNsdWRlZFFOYW1lc0luSW5jbHVkZWRVUklzKCkiPmV4Y2x1ZGVkUU5hbWVzSW5JbmNsdWRlZFVSSXM8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImluY2x1ZGVkUU5hbWVzSW5FeGNsdWRlZFVSSXMoKSI+PCEtLSAtLT48L0E+PEgzPgotaW5jbHVkZWRRTmFtZXNJbkV4Y2x1ZGVkVVJJczwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvU2V0Lmh0bWwiPlNldDwvQT4gPEI+aW5jbHVkZWRRTmFtZXNJbkV4Y2x1ZGVkVVJJczwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlc2NyaXB0aW9uIGNvcGllZCBmcm9tIGludGVyZmFjZTogPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPjwvQ09ERT48L0I+PC9ERD4KLTxERD5UaGUgZmluaXRlIHNldCBvZiBRTmFtZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIHNldCB3aXRoaW4gbmFtZXNwYWNlcwotIHRoYXQgYXJlIG90aGVyd2lzZSBleGNsdWRlZC4gU2hvdWxkIG9ubHkgY29udGFpbiBRTmFtZXMgd2l0aGluIG5hbWVzcGFjZQotIHRoYXQgYXJlIHdpdGhpbiB0aGUgc2V0IGV4Y2x1ZGVkVVJJcygpIChvciBhbnkgVVJJLCBpZiBleGNsdWRlZFVSSXMoKQotIGlzIG51bGwsIHdoaWNoIG1lYW5zIHRoYXQgYWxsIFVSSXMgYXJlIGFsbW9zdCBjb21wbGV0ZWx5IGV4Y2x1ZGVkKS4KLSA8cD4KLSBOZXZlciBudWxsLgotIDxwPgotIFRoZSBzYW1lIGFzIGludmVyc2UoKS5leGNsdWRlZFFOYW1lcygpLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwjaW5jbHVkZWRRTmFtZXNJbkV4Y2x1ZGVkVVJJcygpIj5pbmNsdWRlZFFOYW1lc0luRXhjbHVkZWRVUklzPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ0b1N0cmluZygpIj48IS0tIC0tPjwvQT48SDM+Ci10b1N0cmluZzwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+dG9TdHJpbmc8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIHVzZWZ1bCBmb3IgZGVidWdnaW5nLCBzdWJqZWN0IHRvIGNoYW5nZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5PdmVycmlkZXM6PC9CPjxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPjwvQ09ERT4gaW4gY2xhc3MgPENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InRvUU5hbWVTZXQoKSI+PCEtLSAtLT48L0E+PEgzPgotdG9RTmFtZVNldDwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+IDxCPnRvUU5hbWVTZXQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj48Q09ERT5RTmFtZVNldDwvQ09ERT48L0E+IGVxdWl2YWxlbnQgdG8gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpcwotIFFOYW1lU2V0QnVpbGRlci4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWYuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlFOYW1lU2V0QnVpbGRlci5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTI3YmEzLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDg4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTYgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1RTmFtZVNldFNwZWNpZmljYXRpb24gKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uLFFOYW1lU2V0U3BlY2lmaWNhdGlvbiBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlFOYW1lU2V0U3BlY2lmaWNhdGlvbiAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlR3JvdXAuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlFOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBRTmFtZVNldFNwZWNpZmljYXRpb248L0gyPgotPERMPgotPERUPjxCPkFsbCBLbm93biBJbXBsZW1lbnRpbmcgQ2xhc3Nlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwiPlFOYW1lU2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCI+UU5hbWVTZXRCdWlsZGVyPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBpbnRlcmZhY2UgPEI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9CPjwvREw+Ci0KLTxQPgotUmVwcmVzZW50cyBhIGxhdHRpY2Ugb2YgZmluaXRlIGFuZCBpbmZpbml0ZSBzZXRzIG9mIFFOYW1lcy4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+PENPREU+UU5hbWVTZXQ8L0NPREU+PC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwjY29udGFpbnMoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPmNvbnRhaW5zPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO25hbWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoZSBzZXQgY29udGFpbnMgdGhlIGdpdmVuIFFOYW1lLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwjY29udGFpbnNBbGwob3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldFNwZWNpZmljYXRpb24pIj5jb250YWluc0FsbDwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtzZXQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoZSBwYXJhbWV0ZXIgaXMgYSBzdWJzZXQgb2YgdGhpcyBzZXQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvU2V0Lmh0bWwiPlNldDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCNleGNsdWRlZFFOYW1lc0luSW5jbHVkZWRVUklzKCkiPmV4Y2x1ZGVkUU5hbWVzSW5JbmNsdWRlZFVSSXM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZmluaXRlIHNldCBvZiBRTmFtZXMgdGhhdCBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgc2V0IHdpdGhpbiBuYW1lc3BhY2VzCi0gdGhhdCBhcmUgb3RoZXJ3aXNlIGluY2x1ZGVkLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL1NldC5odG1sIj5TZXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwjZXhjbHVkZWRVUklzKCkiPmV4Y2x1ZGVkVVJJczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmaW5pdGUgc2V0IG9mIG5hbWVzcGFjZSBVUklzIHRoYXQgYXJlIGFsbW9zdCBjb21wbGV0ZWx5IGV4Y2x1ZGVkIGZyb20KLSB0aGUgc2V0ICh0aGF0IGlzLCBlYWNoIG5hbWVzcGFjZSBVUkkgdGhhdCBpbmNsdWRlZCBpbiB0aGUgc2V0IHdpdGggd2l0aAotIGEgZmluaXRlIG51bWJlciBvZiBRTmFtZSBleGNlcHRpb25zKS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9TZXQuaHRtbCI+U2V0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sI2luY2x1ZGVkUU5hbWVzSW5FeGNsdWRlZFVSSXMoKSI+aW5jbHVkZWRRTmFtZXNJbkV4Y2x1ZGVkVVJJczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmaW5pdGUgc2V0IG9mIFFOYW1lcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGUgc2V0IHdpdGhpbiBuYW1lc3BhY2VzCi0gdGhhdCBhcmUgb3RoZXJ3aXNlIGV4Y2x1ZGVkLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL1NldC5odG1sIj5TZXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwjaW5jbHVkZWRVUklzKCkiPmluY2x1ZGVkVVJJczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmaW5pdGUgc2V0IG9mIG5hbWVzcGFjZSBVUklzIHRoYXQgYXJlIGFsbW9zdCBjb21wbGV0ZWx5IGluY2x1ZGVkIGluCi0gdGhlIHNldCAodGhhdCBpcywgZWFjaCBuYW1lc3BhY2UgVVJJIHRoYXQgaW5jbHVkZWQgaW4gdGhlIHNldCB3aXRoIHdpdGgKLSBhIGZpbml0ZSBudW1iZXIgb2YgUU5hbWUgZXhjZXB0aW9ucykuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwjaW50ZXJzZWN0KG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+aW50ZXJzZWN0PC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPiZuYnNwO3NldCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGludGVyc2VjdGlvbiB3aXRoIGFub3RoZXIgUU5hbWVTZXQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwjaW52ZXJzZSgpIj5pbnZlcnNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJuIHRoZSBpbnZlcnNlIG9mIHRoaXMgUU5hbWVTZXQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCNpc0FsbCgpIj5pc0FsbDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgdGhlIHNldCBpcyB0aGUgc2V0IG9mIGFsbCBRTmFtZXMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCNpc0Rpc2pvaW50KG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+aXNEaXNqb2ludDwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtzZXQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIGlzIGRpc2pvaW50IGZyb20gdGhlIHNwZWNpZmllZCBzZXQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCNpc0VtcHR5KCkiPmlzRW1wdHk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoZSBzZXQgaXMgZW1wdHkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwjdW5pb24ob3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldFNwZWNpZmljYXRpb24pIj51bmlvbjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtzZXQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB1bmlvbiB3aXRoIGFub3RoZXIgUU5hbWVTZXQuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJjb250YWlucyhqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PCEtLSAtLT48L0E+PEgzPgotY29udGFpbnM8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmNvbnRhaW5zPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7bmFtZSk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoZSBzZXQgY29udGFpbnMgdGhlIGdpdmVuIFFOYW1lLgotCi0gUm91Z2hseSBlcXVpdmFsZW50IHRvOgotICAgIChpbmNsdWRlZFVSSXMoKSA9PSBudWxsID8KLSAgICAgICAgICAgZXhjbHVkZWRVUklzKCkuY29udGFpbnMobmFtZXNwYWNlKSA6Ci0gICAgICAgICAgIGluY2x1ZGVkVVJJcygpLmNvbnRhaW5zKG5hbWVzcGFjZSkKLSAgICApID8KLSAgICAgICAgIWV4Y2x1ZGVkUU5hbWVzSW5JbmNsdWRlZFVSSXMoKS5jb250YWlucyhuYW1lKSA6Ci0gICAgICAgICBpbmNsdWRlZFFOYW1lc0luRXhjbHVkZWRVUklzKCkuY29udGFpbnMobmFtZSkKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNBbGwoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNBbGw8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzQWxsPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiB0aGUgc2V0IGlzIHRoZSBzZXQgb2YgYWxsIFFOYW1lcy4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNFbXB0eSgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc0VtcHR5PC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5pc0VtcHR5PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiB0aGUgc2V0IGlzIGVtcHR5LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjb250YWluc0FsbChvcmcuYXBhY2hlLnhtbGJlYW5zLlFOYW1lU2V0U3BlY2lmaWNhdGlvbikiPjwhLS0gLS0+PC9BPjxIMz4KLWNvbnRhaW5zQWxsPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5jb250YWluc0FsbDwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPiZuYnNwO3NldCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoZSBwYXJhbWV0ZXIgaXMgYSBzdWJzZXQgb2YgdGhpcyBzZXQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzRGlzam9pbnQob3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldFNwZWNpZmljYXRpb24pIj48IS0tIC0tPjwvQT48SDM+Ci1pc0Rpc2pvaW50PC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5pc0Rpc2pvaW50PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+Jm5ic3A7c2V0KTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgaXMgZGlzam9pbnQgZnJvbSB0aGUgc3BlY2lmaWVkIHNldC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaW50ZXJzZWN0KG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotaW50ZXJzZWN0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj5RTmFtZVNldDwvQT4gPEI+aW50ZXJzZWN0PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+Jm5ic3A7c2V0KTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGludGVyc2VjdGlvbiB3aXRoIGFub3RoZXIgUU5hbWVTZXQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InVuaW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXRTcGVjaWZpY2F0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotdW5pb248L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwiPlFOYW1lU2V0PC9BPiA8Qj51bmlvbjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPiZuYnNwO3NldCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB1bmlvbiB3aXRoIGFub3RoZXIgUU5hbWVTZXQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImludmVyc2UoKSI+PCEtLSAtLT48L0E+PEgzPgotaW52ZXJzZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+IDxCPmludmVyc2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm4gdGhlIGludmVyc2Ugb2YgdGhpcyBRTmFtZVNldC4gVGhhdCBpcyB0aGUgUU5hbWVTZXQgd2hpY2gKLSBjb250YWlucyBhbGwgdGhlIFFOYW1lcyBub3QgY29udGFpbmVkIGluIHRoaXMgc2V0LiBJbiBvdGhlciB3b3JkcwotIGZvciB3aGljaCBzZXQuY29udGFpbnMobmFtZSkgIT0gc2V0LmludmVyc2UoKS5jb250YWlucyhuYW1lKSBmb3IKLSBhbGwgbmFtZXMuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImV4Y2x1ZGVkVVJJcygpIj48IS0tIC0tPjwvQT48SDM+Ci1leGNsdWRlZFVSSXM8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL1NldC5odG1sIj5TZXQ8L0E+IDxCPmV4Y2x1ZGVkVVJJczwvQj4oKTwvUFJFPgotPERMPgotPEREPlRoZSBmaW5pdGUgc2V0IG9mIG5hbWVzcGFjZSBVUklzIHRoYXQgYXJlIGFsbW9zdCBjb21wbGV0ZWx5IGV4Y2x1ZGVkIGZyb20KLSB0aGUgc2V0ICh0aGF0IGlzLCBlYWNoIG5hbWVzcGFjZSBVUkkgdGhhdCBpbmNsdWRlZCBpbiB0aGUgc2V0IHdpdGggd2l0aAotIGEgZmluaXRlIG51bWJlciBvZiBRTmFtZSBleGNlcHRpb25zKS4gTnVsbCBpZiB0aGUgc2V0IG9mIG5hbWVzcGFjZVVSSXMKLSB0aGF0IGFyZSBhbG1vc3QgY29tcGxldGVseSBpbmNsdWRlZCBpcyBpbmZpbml0ZS4KLSA8cD4KLSBOdWxsIChtZWFuaW5nIGFsbW9zdCBhbGwgVVJJcyBleGNsdWRlZCkgaWYgaW5jbHVkZWRVUklzKCkgaXMgbm9uLW51bGw7Ci0gbm9uLW51bGwgb3RoZXJ3aXNlLgotIDxwPgotIFRoZSBzYW1lIHNldCBhcyBpbnZlcnNlKCkuaW5jbHVkZWRVUklzKCkuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImluY2x1ZGVkVVJJcygpIj48IS0tIC0tPjwvQT48SDM+Ci1pbmNsdWRlZFVSSXM8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL1NldC5odG1sIj5TZXQ8L0E+IDxCPmluY2x1ZGVkVVJJczwvQj4oKTwvUFJFPgotPERMPgotPEREPlRoZSBmaW5pdGUgc2V0IG9mIG5hbWVzcGFjZSBVUklzIHRoYXQgYXJlIGFsbW9zdCBjb21wbGV0ZWx5IGluY2x1ZGVkIGluCi0gdGhlIHNldCAodGhhdCBpcywgZWFjaCBuYW1lc3BhY2UgVVJJIHRoYXQgaW5jbHVkZWQgaW4gdGhlIHNldCB3aXRoIHdpdGgKLSBhIGZpbml0ZSBudW1iZXIgb2YgUU5hbWUgZXhjZXB0aW9ucykuIE51bGwgaWYgdGhlIHNldCBvZiBuYW1lc3BhY2VVUklzCi0gdGhhdCBhcmUgYWxtb3N0IGNvbXBsZXRlbHkgaW5jbHVkZWQgaXMgaW5maW5pdGUuCi0gPHA+Ci0gTnVsbCAobWVhbmluZyBhbG1vc3QgYWxsIFVSSXMgaW5jbHVkZWQpIGlmIGV4Y2x1ZGVkVVJJcygpIGlzIG5vbi1udWxsOwotIG5vbi1udWxsIG90aGVyd2lzZS4KLSA8cD4KLSBUaGUgc2FtZSBhcyBpbnZlcnNlLmV4Y2x1ZGVkVVJJcygpLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJleGNsdWRlZFFOYW1lc0luSW5jbHVkZWRVUklzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWV4Y2x1ZGVkUU5hbWVzSW5JbmNsdWRlZFVSSXM8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL1NldC5odG1sIj5TZXQ8L0E+IDxCPmV4Y2x1ZGVkUU5hbWVzSW5JbmNsdWRlZFVSSXM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UaGUgZmluaXRlIHNldCBvZiBRTmFtZXMgdGhhdCBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgc2V0IHdpdGhpbiBuYW1lc3BhY2VzCi0gdGhhdCBhcmUgb3RoZXJ3aXNlIGluY2x1ZGVkLiBTaG91bGQgb25seSBjb250YWluIFFOYW1lcyB3aXRoaW4gbmFtZXNwYWNlCi0gdGhhdCBhcmUgd2l0aGluIHRoZSBzZXQgaW5jbHVkZWRVUklzKCkgKG9yIGFueSBVUkksIGlmIGluY2x1ZGVkVVJJcygpCi0gaXMgbnVsbCwgd2hpY2ggbWVhbnMgdGhhdCBhbGwgVVJJcyBhcmUgYWxtb3N0IGNvbXBsZXRlbHkgaW5jbHVkZWQpLgotIDxwPgotIE5ldmVyIG51bGwuCi0gPHA+Ci0gVGhlIHNhbWUgc2V0IGFzIGludmVyc2UoKS5pbmNsdWRlZFFOYW1lcygpLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpbmNsdWRlZFFOYW1lc0luRXhjbHVkZWRVUklzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWluY2x1ZGVkUU5hbWVzSW5FeGNsdWRlZFVSSXM8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL1NldC5odG1sIj5TZXQ8L0E+IDxCPmluY2x1ZGVkUU5hbWVzSW5FeGNsdWRlZFVSSXM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UaGUgZmluaXRlIHNldCBvZiBRTmFtZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIHNldCB3aXRoaW4gbmFtZXNwYWNlcwotIHRoYXQgYXJlIG90aGVyd2lzZSBleGNsdWRlZC4gU2hvdWxkIG9ubHkgY29udGFpbiBRTmFtZXMgd2l0aGluIG5hbWVzcGFjZQotIHRoYXQgYXJlIHdpdGhpbiB0aGUgc2V0IGV4Y2x1ZGVkVVJJcygpIChvciBhbnkgVVJJLCBpZiBleGNsdWRlZFVSSXMoKQotIGlzIG51bGwsIHdoaWNoIG1lYW5zIHRoYXQgYWxsIFVSSXMgYXJlIGFsbW9zdCBjb21wbGV0ZWx5IGV4Y2x1ZGVkKS4KLSA8cD4KLSBOZXZlciBudWxsLgotIDxwPgotIFRoZSBzYW1lIGFzIGludmVyc2UoKS5leGNsdWRlZFFOYW1lcygpLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlR3JvdXAuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlFOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWYuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWFhYzIzLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzEyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTkgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1TY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWYgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmLFNjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZiBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iU2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZi5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQuUmVmIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgU2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmPC9IMj4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5qYXZhLmxhbmcuT2JqZWN0PC9BPgotICB8Ci0gICstLTxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudC5SZWY8L0E+Ci0gICAgICAgIHwKLSAgICAgICAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWY8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5FbmNsb3NpbmcgY2xhc3M6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZUdyb3VwLmh0bWwiPlNjaGVtYUF0dHJpYnV0ZUdyb3VwPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgPEI+U2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIj5TY2hlbWFDb21wb25lbnQuUmVmPC9BPjwvREw+Ci0KLTxQPgotVXNlZCB0byBhbGxvdyBvbi1kZW1hbmQgbG9hZGluZyBvZiBhdHRyaWJ1dGUgZ3JvdXBzLgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9ImZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudC5SZWYiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCI+U2NoZW1hQ29tcG9uZW50LlJlZjwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCNfaGFuZGxlIj5faGFuZGxlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0iY29uc3RydWN0b3Jfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmLmh0bWwjU2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQXR0cmlidXRlR3JvdXApIj5TY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWY8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZUdyb3VwLmh0bWwiPlNjaGVtYUF0dHJpYnV0ZUdyb3VwPC9BPiZuYnNwO2F0dHJpYnV0ZUdyb3VwKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZi5odG1sI1NjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZihvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVTeXN0ZW0sIGphdmEubGFuZy5TdHJpbmcpIj5TY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWY8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVTeXN0ZW0uaHRtbCI+U2NoZW1hVHlwZVN5c3RlbTwvQT4mbmJzcDtzeXN0ZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO2hhbmRsZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlR3JvdXAuaHRtbCI+U2NoZW1hQXR0cmlidXRlR3JvdXA8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmLmh0bWwjZ2V0KCkiPmdldDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWYuaHRtbCNnZXRDb21wb25lbnRUeXBlKCkiPmdldENvbXBvbmVudFR5cGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQ29tcG9uZW50LlJlZiI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCI+U2NoZW1hQ29tcG9uZW50LlJlZjwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCNnZXRDb21wb25lbnQoKSI+Z2V0Q29tcG9uZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuUmVmLmh0bWwjZ2V0VHlwZVN5c3RlbSgpIj5nZXRUeXBlU3lzdGVtPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNjbG9uZSgpIj5jbG9uZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj5lcXVhbHM8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2ZpbmFsaXplKCkiPmZpbmFsaXplPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNnZXRDbGFzcygpIj5nZXRDbGFzczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjaGFzaENvZGUoKSI+aGFzaENvZGU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeSgpIj5ub3RpZnk8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeUFsbCgpIj5ub3RpZnlBbGw8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KCkiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZykiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZywgaW50KSI+d2FpdDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0iY29uc3RydWN0b3JfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJTY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWYob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFBdHRyaWJ1dGVHcm91cCkiPjwhLS0gLS0+PC9BPjxIMz4KLVNjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZjwvSDM+Ci08UFJFPgotcHVibGljIDxCPlNjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVHcm91cC5odG1sIj5TY2hlbWFBdHRyaWJ1dGVHcm91cDwvQT4mbmJzcDthdHRyaWJ1dGVHcm91cCk8L1BSRT4KLTxETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZihvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVTeXN0ZW0sIGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1TY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWY8L0gzPgotPFBSRT4KLXB1YmxpYyA8Qj5TY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWY8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sIj5TY2hlbWFUeXBlU3lzdGVtPC9BPiZuYnNwO3N5c3RlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO2hhbmRsZSk8L1BSRT4KLTxETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldENvbXBvbmVudFR5cGUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Q29tcG9uZW50VHlwZTwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGludCA8Qj5nZXRDb21wb25lbnRUeXBlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sI2dldENvbXBvbmVudFR5cGUoKSI+Z2V0Q29tcG9uZW50VHlwZTwvQT48L0NPREU+IGluIGNsYXNzIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIj5TY2hlbWFDb21wb25lbnQuUmVmPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZUdyb3VwLmh0bWwiPlNjaGVtYUF0dHJpYnV0ZUdyb3VwPC9BPiA8Qj5nZXQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZi5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQuUmVmIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZUdyb3VwLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVHcm91cC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjA5NzQ2Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZUdyb3VwLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOTQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NiBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVNjaGVtYUF0dHJpYnV0ZUdyb3VwIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUF0dHJpYnV0ZUdyb3VwLFNjaGVtYUF0dHJpYnV0ZUdyb3VwIGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iU2NoZW1hQXR0cmlidXRlR3JvdXAgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNjaGVtYUF0dHJpYnV0ZUdyb3VwLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFNjaGVtYUF0dHJpYnV0ZUdyb3VwPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPlNjaGVtYUNvbXBvbmVudDwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlNjaGVtYUF0dHJpYnV0ZUdyb3VwPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPlNjaGVtYUNvbXBvbmVudDwvQT48L0RMPgotCi08UD4KLVJlcHJlc2VudHMgYW4gYXR0cmlidXRlIGdyb3VwLgotIDxwPgotIEFuIGF0dHJpYnV0ZSBncm91cCBpcyBhIHN5bnRhY3RpYyBjb25zdHJ1Y3QsIG5vdCBhIHBhcnQKLSBvZiB0aGUgbG9naWNhbCBtb2RlbC4gRm9yIGV4YW1wbGUsIHR5cGVzIGRlY2xhcmVkIHdpdGhpbiBhbgotIGF0dHJpYnV0ZSBncm91cCBiZWNvbWUgbG9jYWwgdG8gdGhlIHR5cGUgdGhhdCB1c2VzIHRoZSBncm91cCAtCi0gdGhleSdyZSBub3QgbG9jYWwgdG8gdGhlIGF0dHJpYnV0ZSBncm91cCBpdHNlbGYuIFRoZXJlZm9yZQotIGluIHRoZSBsb2dpY2FsIG1vZGVsIG9mIGEgc2NoZW1hIHR5cGUgc3lzdGVtLCBhbiBhdHRyaWJ1dGUKLSBncm91cCBkb2Vzbid0IHJlcHJlc2VudCBhbnl0aGluZy4gSXRzIGNvbnRlbnRzIGFyZSBtZXJnZWQKLSBpbnRvIHRoZSBsb2dpY2FsIG1vZGVsIGF0IHBhcnNlIHRpbWUuCi08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNmaW5kQXR0cmlidXRlR3JvdXAoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxDT0RFPlNjaGVtYVR5cGVMb2FkZXIuZmluZEF0dHJpYnV0ZUdyb3VwKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWYuaHRtbCI+U2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1VzZWQgdG8gYWxsb3cgb24tZGVtYW5kIGxvYWRpbmcgb2YgYXR0cmlidXRlIGdyb3Vwcy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjQVRUUklCVVRFIj5BVFRSSUJVVEU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI0FUVFJJQlVURV9HUk9VUCI+QVRUUklCVVRFX0dST1VQPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNFTEVNRU5UIj5FTEVNRU5UPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNJREVOVElUWV9DT05TVFJBSU5UIj5JREVOVElUWV9DT05TVFJBSU5UPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNNT0RFTF9HUk9VUCI+TU9ERUxfR1JPVVA8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI05PVEFUSU9OIj5OT1RBVElPTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjVFlQRSI+VFlQRTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZUdyb3VwLmh0bWwjZ2V0Q29tcG9uZW50VHlwZSgpIj5nZXRDb21wb25lbnRUeXBlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBTY2hlbWFDb21wb25lbnQuQVRUUklCVVRFX0dST1VQLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlR3JvdXAuaHRtbCNnZXROYW1lKCkiPmdldE5hbWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbmFtZSBvZiB0aGUgbW9kZWwgZ3JvdXAuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjZ2V0Q29tcG9uZW50UmVmKCkiPmdldENvbXBvbmVudFJlZjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjZ2V0VHlwZVN5c3RlbSgpIj5nZXRUeXBlU3lzdGVtPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldENvbXBvbmVudFR5cGUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Q29tcG9uZW50VHlwZTwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5nZXRDb21wb25lbnRUeXBlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBTY2hlbWFDb21wb25lbnQuQVRUUklCVVRFX0dST1VQLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjZ2V0Q29tcG9uZW50VHlwZSgpIj5nZXRDb21wb25lbnRUeXBlPC9BPjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPlNjaGVtYUNvbXBvbmVudDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXROYW1lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE5hbWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+IDxCPmdldE5hbWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UaGUgbmFtZSBvZiB0aGUgbW9kZWwgZ3JvdXAuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNnZXROYW1lKCkiPmdldE5hbWU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZU1vZGVsLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTY2hlbWFBdHRyaWJ1dGVHcm91cC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVNb2RlbC5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQyNmI2Zi4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVNb2RlbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzY0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTYgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1TY2hlbWFBdHRyaWJ1dGVNb2RlbCAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFBdHRyaWJ1dGVNb2RlbCxTY2hlbWFBdHRyaWJ1dGVNb2RlbCBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlNjaGVtYUF0dHJpYnV0ZU1vZGVsIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVHcm91cC5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTY2hlbWFBdHRyaWJ1dGVNb2RlbC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBTY2hlbWFBdHRyaWJ1dGVNb2RlbDwvSDI+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGludGVyZmFjZSA8Qj5TY2hlbWFBdHRyaWJ1dGVNb2RlbDwvQj48L0RMPgotCi08UD4KLVJlcHJlc2VudHMgdGhlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUgYWxsb3dlZCBvbiBhIGNvbXBsZXggdHlwZS4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldEF0dHJpYnV0ZU1vZGVsKCkiPjxDT0RFPlNjaGVtYVR5cGUuZ2V0QXR0cmlidXRlTW9kZWwoKTwvQ09ERT48L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCNMQVgiPkxBWDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtMYXggd2lsZGNhcmQgcHJvY2Vzc2luZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCNOT05FIj5OT05FPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZU1vZGVsLmh0bWwjZ2V0V2lsZGNhcmRQcm9jZXNzKCkiPjxDT0RFPmdldFdpbGRjYXJkUHJvY2VzcygpPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCNTS0lQIj5TS0lQPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NraXAgd2lsZGNhcmQgcHJvY2Vzc2luZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCNTVFJJQ1QiPlNUUklDVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTdHJpY3Qgd2lsZGNhcmQgcHJvY2Vzc2luZy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEF0dHJpYnV0ZS5odG1sIj5TY2hlbWFMb2NhbEF0dHJpYnV0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVNb2RlbC5odG1sI2dldEF0dHJpYnV0ZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+Z2V0QXR0cmlidXRlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO25hbWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBhdHRyaWJ1dGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEF0dHJpYnV0ZS5odG1sIj5TY2hlbWFMb2NhbEF0dHJpYnV0ZTwvQT5bXTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZU1vZGVsLmh0bWwjZ2V0QXR0cmlidXRlcygpIj5nZXRBdHRyaWJ1dGVzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIGFsbCB0aGUgYXR0cmlidXRlcyBpbiB0aGUgbW9kZWwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZU1vZGVsLmh0bWwjZ2V0V2lsZGNhcmRQcm9jZXNzKCkiPmdldFdpbGRjYXJkUHJvY2VzczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHByb2Nlc3NpbmcgY29kZSAoPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVNb2RlbC5odG1sI1NUUklDVCI+PENPREU+U1RSSUNUPC9DT0RFPjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCNMQVgiPjxDT0RFPkxBWDwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZU1vZGVsLmh0bWwjU0tJUCI+PENPREU+U0tJUDwvQ09ERT48L0E+KS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj5RTmFtZVNldDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVNb2RlbC5odG1sI2dldFdpbGRjYXJkU2V0KCkiPmdldFdpbGRjYXJkU2V0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UU5hbWVTZXQgcmVwcmVzZW50aW5nIHRoZSBhdHRyaWJ1dGUgd2lsZGNhcmQgc3BlY2lmaWNhdGlvbi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iTk9ORSI+PCEtLSAtLT48L0E+PEgzPgotTk9ORTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+Tk9ORTwvQj48L1BSRT4KLTxETD4KLTxERD5TZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVNb2RlbC5odG1sI2dldFdpbGRjYXJkUHJvY2VzcygpIj48Q09ERT5nZXRXaWxkY2FyZFByb2Nlc3MoKTwvQ09ERT48L0E+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQXR0cmlidXRlTW9kZWwuTk9ORSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTVFJJQ1QiPjwhLS0gLS0+PC9BPjxIMz4KLVNUUklDVDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+U1RSSUNUPC9CPjwvUFJFPgotPERMPgotPEREPlN0cmljdCB3aWxkY2FyZCBwcm9jZXNzaW5nLiBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVNb2RlbC5odG1sI2dldFdpbGRjYXJkUHJvY2VzcygpIj48Q09ERT5nZXRXaWxkY2FyZFByb2Nlc3MoKTwvQ09ERT48L0E+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQXR0cmlidXRlTW9kZWwuU1RSSUNUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkxBWCI+PCEtLSAtLT48L0E+PEgzPgotTEFYPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5MQVg8L0I+PC9QUkU+Ci08REw+Ci08REQ+TGF4IHdpbGRjYXJkIHByb2Nlc3NpbmcuIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZU1vZGVsLmh0bWwjZ2V0V2lsZGNhcmRQcm9jZXNzKCkiPjxDT0RFPmdldFdpbGRjYXJkUHJvY2VzcygpPC9DT0RFPjwvQT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFBdHRyaWJ1dGVNb2RlbC5MQVgiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU0tJUCI+PCEtLSAtLT48L0E+PEgzPgotU0tJUDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+U0tJUDwvQj48L1BSRT4KLTxETD4KLTxERD5Ta2lwIHdpbGRjYXJkIHByb2Nlc3NpbmcuIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZU1vZGVsLmh0bWwjZ2V0V2lsZGNhcmRQcm9jZXNzKCkiPjxDT0RFPmdldFdpbGRjYXJkUHJvY2VzcygpPC9DT0RFPjwvQT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFBdHRyaWJ1dGVNb2RlbC5TS0lQIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRBdHRyaWJ1dGVzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEF0dHJpYnV0ZXM8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsQXR0cmlidXRlLmh0bWwiPlNjaGVtYUxvY2FsQXR0cmlidXRlPC9BPltdIDxCPmdldEF0dHJpYnV0ZXM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBhdHRyaWJ1dGVzIGluIHRoZSBtb2RlbC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0QXR0cmlidXRlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRBdHRyaWJ1dGU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsQXR0cmlidXRlLmh0bWwiPlNjaGVtYUxvY2FsQXR0cmlidXRlPC9BPiA8Qj5nZXRBdHRyaWJ1dGU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGF0dHJpYnV0ZSB3aXRoIHRoZSBnaXZlbiBuYW1lLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRXaWxkY2FyZFNldCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRXaWxkY2FyZFNldDwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+IDxCPmdldFdpbGRjYXJkU2V0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UU5hbWVTZXQgcmVwcmVzZW50aW5nIHRoZSBhdHRyaWJ1dGUgd2lsZGNhcmQgc3BlY2lmaWNhdGlvbi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0V2lsZGNhcmRQcm9jZXNzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFdpbGRjYXJkUHJvY2VzczwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5nZXRXaWxkY2FyZFByb2Nlc3M8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBwcm9jZXNzaW5nIGNvZGUgKDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCNTVFJJQ1QiPjxDT0RFPlNUUklDVDwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZU1vZGVsLmh0bWwjTEFYIj48Q09ERT5MQVg8L0NPREU+PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVNb2RlbC5odG1sI1NLSVAiPjxDT0RFPlNLSVA8L0NPREU+PC9BPikuCi0gUmV0dXJucyAwICg8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZU1vZGVsLmh0bWwjTk9ORSI+PENPREU+Tk9ORTwvQ09ERT48L0E+KSBpZiBubyB3aWxkY2FyZCBzcGVjaWZpZWQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVHcm91cC5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTY2hlbWFBdHRyaWJ1dGVNb2RlbC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuUmVmLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuUmVmLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxZjhlNWIuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQwICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTkgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1TY2hlbWFDb21wb25lbnQuUmVmIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudC5SZWYsU2NoZW1hQ29tcG9uZW50LlJlZiBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iU2NoZW1hQ29tcG9uZW50LlJlZiAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTY2hlbWFDb21wb25lbnQuUmVmLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgU2NoZW1hQ29tcG9uZW50LlJlZjwvSDI+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+amF2YS5sYW5nLk9iamVjdDwvQT4KLSAgfAotICArLS08Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudC5SZWY8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5EaXJlY3QgS25vd24gU3ViY2xhc3Nlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZi5odG1sIj5TY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWY8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWYuaHRtbCI+U2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5SZWYuaHRtbCI+U2NoZW1hR2xvYmFsRWxlbWVudC5SZWY8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWYuaHRtbCI+U2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTW9kZWxHcm91cC5SZWYuaHRtbCI+U2NoZW1hTW9kZWxHcm91cC5SZWY8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuUmVmLmh0bWwiPlNjaGVtYVR5cGUuUmVmPC9BPjwvREQ+Ci08L0RMPgotPERMPgotPERUPjxCPkVuY2xvc2luZyBjbGFzczo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPlNjaGVtYUNvbXBvbmVudDwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgYWJzdHJhY3Qgc3RhdGljIGNsYXNzIDxCPlNjaGVtYUNvbXBvbmVudC5SZWY8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvREw+Ci0KLTxQPgotQSBsYXp5IHJlZmVyZW5jZSB0byBhIGNvbXBvbmVudC4gVXNlZCBieSBTY2hlbWFUeXBlTG9hZGVycyB0bwotIGF2b2lkIGxvYWRpbmcgY29tcG9uZW50cyB1bnRpbCB0aGV5IGFyZSBhY3R1YWxseSBuZWVkZWQuCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuUmVmLmh0bWwjX2hhbmRsZSI+X2hhbmRsZTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0iY29uc3RydWN0b3Jfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHJvdGVjdGVkIDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCNTY2hlbWFDb21wb25lbnQuUmVmKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQ29tcG9uZW50KSI+U2NoZW1hQ29tcG9uZW50LlJlZjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPlNjaGVtYUNvbXBvbmVudDwvQT4mbmJzcDtzY2hlbWFDb21wb25lbnQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+cHJvdGVjdGVkIDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCNTY2hlbWFDb21wb25lbnQuUmVmKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVN5c3RlbSwgamF2YS5sYW5nLlN0cmluZykiPlNjaGVtYUNvbXBvbmVudC5SZWY8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVTeXN0ZW0uaHRtbCI+U2NoZW1hVHlwZVN5c3RlbTwvQT4mbmJzcDtzY2hlbWFUeXBlU3lzdGVtLAotICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7aGFuZGxlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCNnZXRDb21wb25lbnQoKSI+Z2V0Q29tcG9uZW50PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPmFic3RyYWN0ICZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCNnZXRDb21wb25lbnRUeXBlKCkiPmdldENvbXBvbmVudFR5cGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwiPlNjaGVtYVR5cGVTeXN0ZW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sI2dldFR5cGVTeXN0ZW0oKSI+Z2V0VHlwZVN5c3RlbTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iX2hhbmRsZSI+PCEtLSAtLT48L0E+PEgzPgotX2hhbmRsZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+X2hhbmRsZTwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iU2NoZW1hQ29tcG9uZW50LlJlZihvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudCkiPjwhLS0gLS0+PC9BPjxIMz4KLVNjaGVtYUNvbXBvbmVudC5SZWY8L0gzPgotPFBSRT4KLXByb3RlY3RlZCA8Qj5TY2hlbWFDb21wb25lbnQuUmVmPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sIj5TY2hlbWFDb21wb25lbnQ8L0E+Jm5ic3A7c2NoZW1hQ29tcG9uZW50KTwvUFJFPgotPERMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU2NoZW1hQ29tcG9uZW50LlJlZihvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVTeXN0ZW0sIGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1TY2hlbWFDb21wb25lbnQuUmVmPC9IMz4KLTxQUkU+Ci1wcm90ZWN0ZWQgPEI+U2NoZW1hQ29tcG9uZW50LlJlZjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwiPlNjaGVtYVR5cGVTeXN0ZW08L0E+Jm5ic3A7c2NoZW1hVHlwZVN5c3RlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtoYW5kbGUpPC9QUkU+Ci08REw+Ci08L0RMPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRDb21wb25lbnRUeXBlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldENvbXBvbmVudFR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyBhYnN0cmFjdCBpbnQgPEI+Z2V0Q29tcG9uZW50VHlwZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0VHlwZVN5c3RlbSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRUeXBlU3lzdGVtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwiPlNjaGVtYVR5cGVTeXN0ZW08L0E+IDxCPmdldFR5cGVTeXN0ZW08L0I+KCk8L1BSRT4KLTxETD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldENvbXBvbmVudCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRDb21wb25lbnQ8L0gzPgotPFBSRT4KLXB1YmxpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sIj5TY2hlbWFDb21wb25lbnQ8L0E+IDxCPmdldENvbXBvbmVudDwvQj4oKTwvUFJFPgotPERMPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZi5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZi5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODRkZGUwLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDU2ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTYgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1TY2hlbWFDb21wb25lbnQgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQ29tcG9uZW50LFNjaGVtYUNvbXBvbmVudCBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlNjaGVtYUNvbXBvbmVudCAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTY2hlbWFDb21wb25lbnQuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgU2NoZW1hQ29tcG9uZW50PC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgS25vd24gU3ViaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZUdyb3VwLmh0bWwiPlNjaGVtYUF0dHJpYnV0ZUdyb3VwPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuaHRtbCI+U2NoZW1hR2xvYmFsQXR0cmlidXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50Lmh0bWwiPlNjaGVtYUdsb2JhbEVsZW1lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5odG1sIj5TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYU1vZGVsR3JvdXAuaHRtbCI+U2NoZW1hTW9kZWxHcm91cDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBpbnRlcmZhY2UgPEI+U2NoZW1hQ29tcG9uZW50PC9CPjwvREw+Ci0KLTxQPgotUmVwcmVzZW50cyBhIGdsb2JhbCBTY2hlbWEgQ29tcG9uZW50LiAgVGhhdCBpcywgYSB0eXBlLCBlbGVtZW50LCBhdHRyaWJ1dGUsCi0gbW9kZWwgZ3JvdXAsIGF0dHJpYnV0ZSBncm91cCwgb3IgaWRlbnRpdHkgY29uc3RyYWludC4KLSA8cD4KLSBOb3RlIHRoYXQgbm90IGFsbCB0eXBlcywgZWxlbWVudHMsIGFuZCBhdHRyaWJ1dGVzIGFyZSBnbG9iYWw7IGxvY2FsCi0gdHlwZXMsIGVsZW1lbnQsIGFuZCBhdHRyaWJ1dGVzIGRvIG5vdCBhcHBlYXIgaW4gdGhlIGdsb2JhbCBsb29rdXAgdGFibGUuCi0gQWxzbyBub3RlIHRoYXQgb3RoZXIgaW5mb3JtYXRpb24gaXRlbXMgc3VjaCBhcyBwYXJ0aWNsZXMsIGZhY2V0cywgYW5kCi0gc28gb24gYXJlIG5vdCBnbG9iYWxseSBpbmRleGVkLCBzbyBhcmUgbm90IFNjaGVtYUNvbXBvbmVudHMuCi08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5odG1sIj48Q09ERT5TY2hlbWFHbG9iYWxFbGVtZW50PC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuaHRtbCI+PENPREU+U2NoZW1hR2xvYmFsQXR0cmlidXRlPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVHcm91cC5odG1sIj48Q09ERT5TY2hlbWFBdHRyaWJ1dGVHcm91cDwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTW9kZWxHcm91cC5odG1sIj48Q09ERT5TY2hlbWFNb2RlbEdyb3VwPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuaHRtbCI+PENPREU+U2NoZW1hSWRlbnRpdHlDb25zdHJhaW50PC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuUmVmLmh0bWwiPlNjaGVtYUNvbXBvbmVudC5SZWY8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSBsYXp5IHJlZmVyZW5jZSB0byBhIGNvbXBvbmVudC48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjQVRUUklCVVRFIj5BVFRSSUJVVEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QW4gYXR0cmlidXRlIGRlZmluaXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI0FUVFJJQlVURV9HUk9VUCI+QVRUUklCVVRFX0dST1VQPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0FuIGF0dHJpYnV0ZSBncm91cCBkZWZpbml0aW9uLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNFTEVNRU5UIj5FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0FuIGVsZW1lbnQgZGVmaW5pdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjSURFTlRJVFlfQ09OU1RSQUlOVCI+SURFTlRJVFlfQ09OU1RSQUlOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBbiBpZGVudGl0eSBjb25zdHJhaW50IGRlZmluaXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI01PREVMX0dST1VQIj5NT0RFTF9HUk9VUDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIG1vZGVsIGdyb3VwIGRlZmluaXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI05PVEFUSU9OIj5OT1RBVElPTjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIG5vdGF0aW9uIGRlZmluaXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI1RZUEUiPlRZUEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSB0eXBlIGRlZmluaXRpb24uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIj5TY2hlbWFDb21wb25lbnQuUmVmPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI2dldENvbXBvbmVudFJlZigpIj5nZXRDb21wb25lbnRSZWY8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtVc2VkIGZvciBvbi1kZW1hbmQgbG9hZGluZyBvZiBzY2hlbWEgY29tcG9uZW50cy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjZ2V0Q29tcG9uZW50VHlwZSgpIj5nZXRDb21wb25lbnRUeXBlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdHlwZSBjb2RlIGZvciB0aGUgc2NoZW1hIG9iamVjdCwgZWl0aGVyIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjVFlQRSI+PENPREU+VFlQRTwvQ09ERT48L0E+LAotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjRUxFTUVOVCI+PENPREU+RUxFTUVOVDwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI0FUVFJJQlVURSI+PENPREU+QVRUUklCVVRFPC9DT0RFPjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjQVRUUklCVVRFX0dST1VQIj48Q09ERT5BVFRSSUJVVEVfR1JPVVA8L0NPREU+PC9BPiwKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI01PREVMX0dST1VQIj48Q09ERT5NT0RFTF9HUk9VUDwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI0lERU5USVRZX0NPTlNUUkFJTlQiPjxDT0RFPklERU5USVRZX0NPTlNUUkFJTlQ8L0NPREU+PC9BPiwgb3IgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNOT1RBVElPTiI+PENPREU+Tk9UQVRJT048L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI2dldE5hbWUoKSI+Z2V0TmFtZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBuYW1lIG9mIHRoZSBzY2hlbWEgY29tcG9uZW50PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sIj5TY2hlbWFUeXBlU3lzdGVtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI2dldFR5cGVTeXN0ZW0oKSI+Z2V0VHlwZVN5c3RlbTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHR5cGVzeXN0ZW0gd2l0aGluIHdoaWNoIHRoaXMgY29tcG9uZW50IGRlZmluaXRpb24gcmVzaWRlczwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJUWVBFIj48IS0tIC0tPjwvQT48SDM+Ci1UWVBFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5UWVBFPC9CPjwvUFJFPgotPERMPgotPEREPkEgdHlwZSBkZWZpbml0aW9uLiAgU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjZ2V0Q29tcG9uZW50VHlwZSgpIj48Q09ERT5nZXRDb21wb25lbnRUeXBlKCk8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudC5UWVBFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkVMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUVMRU1FTlQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkVMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+QW4gZWxlbWVudCBkZWZpbml0aW9uLiAgU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjZ2V0Q29tcG9uZW50VHlwZSgpIj48Q09ERT5nZXRDb21wb25lbnRUeXBlKCk8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudC5FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkFUVFJJQlVURSI+PCEtLSAtLT48L0E+PEgzPgotQVRUUklCVVRFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5BVFRSSUJVVEU8L0I+PC9QUkU+Ci08REw+Ci08REQ+QW4gYXR0cmlidXRlIGRlZmluaXRpb24uICBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNnZXRDb21wb25lbnRUeXBlKCkiPjxDT0RFPmdldENvbXBvbmVudFR5cGUoKTwvQ09ERT48L0E+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQ29tcG9uZW50LkFUVFJJQlVURSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJBVFRSSUJVVEVfR1JPVVAiPjwhLS0gLS0+PC9BPjxIMz4KLUFUVFJJQlVURV9HUk9VUDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+QVRUUklCVVRFX0dST1VQPC9CPjwvUFJFPgotPERMPgotPEREPkFuIGF0dHJpYnV0ZSBncm91cCBkZWZpbml0aW9uLiAgU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjZ2V0Q29tcG9uZW50VHlwZSgpIj48Q09ERT5nZXRDb21wb25lbnRUeXBlKCk8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudC5BVFRSSUJVVEVfR1JPVVAiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSURFTlRJVFlfQ09OU1RSQUlOVCI+PCEtLSAtLT48L0E+PEgzPgotSURFTlRJVFlfQ09OU1RSQUlOVDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+SURFTlRJVFlfQ09OU1RSQUlOVDwvQj48L1BSRT4KLTxETD4KLTxERD5BbiBpZGVudGl0eSBjb25zdHJhaW50IGRlZmluaXRpb24uICBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNnZXRDb21wb25lbnRUeXBlKCkiPjxDT0RFPmdldENvbXBvbmVudFR5cGUoKTwvQ09ERT48L0E+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQ29tcG9uZW50LklERU5USVRZX0NPTlNUUkFJTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTU9ERUxfR1JPVVAiPjwhLS0gLS0+PC9BPjxIMz4KLU1PREVMX0dST1VQPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5NT0RFTF9HUk9VUDwvQj48L1BSRT4KLTxETD4KLTxERD5BIG1vZGVsIGdyb3VwIGRlZmluaXRpb24uICBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNnZXRDb21wb25lbnRUeXBlKCkiPjxDT0RFPmdldENvbXBvbmVudFR5cGUoKTwvQ09ERT48L0E+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQ29tcG9uZW50Lk1PREVMX0dST1VQIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik5PVEFUSU9OIj48IS0tIC0tPjwvQT48SDM+Ci1OT1RBVElPTjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+Tk9UQVRJT048L0I+PC9QUkU+Ci08REw+Ci08REQ+QSBub3RhdGlvbiBkZWZpbml0aW9uLiAgU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjZ2V0Q29tcG9uZW50VHlwZSgpIj48Q09ERT5nZXRDb21wb25lbnRUeXBlKCk8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudC5OT1RBVElPTiI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0Q29tcG9uZW50VHlwZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRDb21wb25lbnRUeXBlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldENvbXBvbmVudFR5cGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB0eXBlIGNvZGUgZm9yIHRoZSBzY2hlbWEgb2JqZWN0LCBlaXRoZXIgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNUWVBFIj48Q09ERT5UWVBFPC9DT0RFPjwvQT4sCi0gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNFTEVNRU5UIj48Q09ERT5FTEVNRU5UPC9DT0RFPjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjQVRUUklCVVRFIj48Q09ERT5BVFRSSUJVVEU8L0NPREU+PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNBVFRSSUJVVEVfR1JPVVAiPjxDT0RFPkFUVFJJQlVURV9HUk9VUDwvQ09ERT48L0E+LAotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjTU9ERUxfR1JPVVAiPjxDT0RFPk1PREVMX0dST1VQPC9DT0RFPjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjSURFTlRJVFlfQ09OU1RSQUlOVCI+PENPREU+SURFTlRJVFlfQ09OU1RSQUlOVDwvQ09ERT48L0E+LCBvciA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI05PVEFUSU9OIj48Q09ERT5OT1RBVElPTjwvQ09ERT48L0E+LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRUeXBlU3lzdGVtKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFR5cGVTeXN0ZW08L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVTeXN0ZW0uaHRtbCI+U2NoZW1hVHlwZVN5c3RlbTwvQT4gPEI+Z2V0VHlwZVN5c3RlbTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHR5cGVzeXN0ZW0gd2l0aGluIHdoaWNoIHRoaXMgY29tcG9uZW50IGRlZmluaXRpb24gcmVzaWRlcwotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXROYW1lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE5hbWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+IDxCPmdldE5hbWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UaGUgbmFtZSBvZiB0aGUgc2NoZW1hIGNvbXBvbmVudAotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRDb21wb25lbnRSZWYoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Q29tcG9uZW50UmVmPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuUmVmLmh0bWwiPlNjaGVtYUNvbXBvbmVudC5SZWY8L0E+IDxCPmdldENvbXBvbmVudFJlZjwvQj4oKTwvUFJFPgotPERMPgotPEREPlVzZWQgZm9yIG9uLWRlbWFuZCBsb2FkaW5nIG9mIHNjaGVtYSBjb21wb25lbnRzLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTY2hlbWFDb21wb25lbnQuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmN2FkYzguLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwNSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ2OjU2IFBEVCAyMDAzIC0tPgotPFRJVExFPgotU2NoZW1hRmllbGQgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hRmllbGQsU2NoZW1hRmllbGQgaW50ZXJmYWNlIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJTY2hlbWFGaWVsZCAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNjaGVtYUZpZWxkLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFNjaGVtYUZpZWxkPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgS25vd24gU3ViaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEF0dHJpYnV0ZS5odG1sIj5TY2hlbWFHbG9iYWxBdHRyaWJ1dGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEVsZW1lbnQuaHRtbCI+U2NoZW1hR2xvYmFsRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxBdHRyaWJ1dGUuaHRtbCI+U2NoZW1hTG9jYWxBdHRyaWJ1dGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsRWxlbWVudC5odG1sIj5TY2hlbWFMb2NhbEVsZW1lbnQ8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGludGVyZmFjZSA8Qj5TY2hlbWFGaWVsZDwvQj48L0RMPgotCi08UD4KLVJlcHJlc2VudHMgYW4gZWxlbWVudCBvciBhbiBhdHRyaWJ1dGUgZGVjbGFyYXRpb24uCi08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRDb250YWluZXJGaWVsZCgpIj48Q09ERT5TY2hlbWFUeXBlLmdldENvbnRhaW5lckZpZWxkKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsRWxlbWVudC5odG1sIj48Q09ERT5TY2hlbWFMb2NhbEVsZW1lbnQ8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsQXR0cmlidXRlLmh0bWwiPjxDT0RFPlNjaGVtYUxvY2FsQXR0cmlidXRlPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwjZ2V0RGVmYXVsdFRleHQoKSI+Z2V0RGVmYXVsdFRleHQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZGVmYXVsdCB2YWx1ZSBhcyBwbGFpbiB0ZXh0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sI2dldERlZmF1bHRWYWx1ZSgpIj5nZXREZWZhdWx0VmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZGVmYXVsdCB2YWx1ZSBhcyBhIHN0cm9uZ2x5LXR5cGVkIHZhbHVlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCI+QmlnSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sI2dldE1heE9jY3VycygpIj5nZXRNYXhPY2N1cnM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtYXhPY2N1cnMgdmFsdWUgZm9yIHRoaXMgcGFydGljbGUsIG9yIG51bGwgaWYgaXQKLSBpcyB1bmJvdW5kZWQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIj5CaWdJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwjZ2V0TWluT2NjdXJzKCkiPmdldE1pbk9jY3VyczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1pbk9jY3VycyB2YWx1ZSBmb3IgdGhpcyBwYXJ0aWNsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwjZ2V0TmFtZSgpIj5nZXROYW1lPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgZm9ybS11bnF1YWxpZmllZC1vci1xdWFsaWZpZWQgbmFtZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCNnZXRUeXBlKCkiPmdldFR5cGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB0eXBlIG9mIHRoaXMgdXNlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCNpc0F0dHJpYnV0ZSgpIj5pc0F0dHJpYnV0ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgdGhpcyB1c2UgaXMgYW4gYXR0cmlidXRlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sI2lzRGVmYXVsdCgpIj5pc0RlZmF1bHQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIGEgZGVmYXVsdCBpcyBzdXBwbGllZC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwjaXNGaXhlZCgpIj5pc0ZpeGVkPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiB0aGUgdmFsdWUgaXMgZml4ZWQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sI2lzTmlsbGFibGUoKSI+aXNOaWxsYWJsZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgbmlsbGFibGU7IGFsd2F5cyBmYWxzZSBmb3IgYXR0cmlidXRlcy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldE5hbWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TmFtZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4gPEI+Z2V0TmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGZvcm0tdW5xdWFsaWZpZWQtb3ItcXVhbGlmaWVkIG5hbWUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzQXR0cmlidXRlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzQXR0cmlidXRlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5pc0F0dHJpYnV0ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgdGhpcyB1c2UgaXMgYW4gYXR0cmlidXRlCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzTmlsbGFibGUoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNOaWxsYWJsZTwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNOaWxsYWJsZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgbmlsbGFibGU7IGFsd2F5cyBmYWxzZSBmb3IgYXR0cmlidXRlcy4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0VHlwZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRUeXBlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPmdldFR5cGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB0eXBlIG9mIHRoaXMgdXNlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRNaW5PY2N1cnMoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TWluT2NjdXJzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPkJpZ0ludGVnZXI8L0E+IDxCPmdldE1pbk9jY3VyczwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1pbk9jY3VycyB2YWx1ZSBmb3IgdGhpcyBwYXJ0aWNsZS4KLSBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkIGV4cGxpY2l0bHksIHRoaXMgZGVmYXVsdHMgdG8gQmlnSW50ZWdlci5PTkUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE1heE9jY3VycygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRNYXhPY2N1cnM8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCI+QmlnSW50ZWdlcjwvQT4gPEI+Z2V0TWF4T2NjdXJzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWF4T2NjdXJzIHZhbHVlIGZvciB0aGlzIHBhcnRpY2xlLCBvciBudWxsIGlmIGl0Ci0gaXMgdW5ib3VuZGVkLgotIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQgZXhwbGljaXRseSwgdGhpcyBkZWZhdWx0cyB0byBCaWdJbnRlZ2VyLk9ORS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RGVmYXVsdFRleHQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RGVmYXVsdFRleHQ8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPmdldERlZmF1bHRUZXh0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VGhlIGRlZmF1bHQgdmFsdWUgYXMgcGxhaW4gdGV4dC4gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCNpc0RlZmF1bHQoKSI+PENPREU+aXNEZWZhdWx0KCk8L0NPREU+PC9BPiBhbmQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sI2lzRml4ZWQoKSI+PENPREU+aXNGaXhlZCgpPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldERlZmF1bHRWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXREZWZhdWx0VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT4gPEI+Z2V0RGVmYXVsdFZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VGhlIGRlZmF1bHQgdmFsdWUgYXMgYSBzdHJvbmdseS10eXBlZCB2YWx1ZS4gIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwjaXNEZWZhdWx0KCkiPjxDT0RFPmlzRGVmYXVsdCgpPC9DT0RFPjwvQT4gYW5kIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCNpc0ZpeGVkKCkiPjxDT0RFPmlzRml4ZWQoKTwvQ09ERT48L0E+LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc0RlZmF1bHQoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNEZWZhdWx0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5pc0RlZmF1bHQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIGEgZGVmYXVsdCBpcyBzdXBwbGllZC4gSWYgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sI2lzRml4ZWQoKSI+PENPREU+aXNGaXhlZCgpPC9DT0RFPjwvQT4sIHRoZW4gaXNEZWZhdWx0IGlzIGFsd2F5cyB0cnVlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc0ZpeGVkKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzRml4ZWQ8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzRml4ZWQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoZSB2YWx1ZSBpcyBmaXhlZC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsQXR0cmlidXRlLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTY2hlbWFGaWVsZC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjZmI3NzEuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzEyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTkgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWYsU2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZiBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iU2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZiAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5SZWYuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWYuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQ29tcG9uZW50LlJlZiI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUNsYXNzIFNjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWY8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuUmVmLmh0bWwiPm9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQ29tcG9uZW50LlJlZjwvQT4KLSAgICAgICAgfAotICAgICAgICArLS08Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWY8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5FbmNsb3NpbmcgY2xhc3M6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEF0dHJpYnV0ZS5odG1sIj5TY2hlbWFHbG9iYWxBdHRyaWJ1dGU8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyA8Qj5TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIj5TY2hlbWFDb21wb25lbnQuUmVmPC9BPjwvREw+Ci0KLTxQPgotVXNlZCB0byBhbGxvdyBvbi1kZW1hbmQgbG9hZGluZyBvZiBlbGVtZW50cy4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQuUmVmIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+RmllbGRzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuUmVmLmh0bWwiPlNjaGVtYUNvbXBvbmVudC5SZWY8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuUmVmLmh0bWwjX2hhbmRsZSI+X2hhbmRsZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWYuaHRtbCNTY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hR2xvYmFsQXR0cmlidXRlKSI+U2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsQXR0cmlidXRlLmh0bWwiPlNjaGVtYUdsb2JhbEF0dHJpYnV0ZTwvQT4mbmJzcDtlbGVtZW50KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWYuaHRtbCNTY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVN5c3RlbSwgamF2YS5sYW5nLlN0cmluZykiPlNjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWY8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVTeXN0ZW0uaHRtbCI+U2NoZW1hVHlwZVN5c3RlbTwvQT4mbmJzcDtzeXN0ZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtoYW5kbGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEF0dHJpYnV0ZS5odG1sIj5TY2hlbWFHbG9iYWxBdHRyaWJ1dGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZi5odG1sI2dldCgpIj5nZXQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZi5odG1sI2dldENvbXBvbmVudFR5cGUoKSI+Z2V0Q29tcG9uZW50VHlwZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQuUmVmIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIj5TY2hlbWFDb21wb25lbnQuUmVmPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sI2dldENvbXBvbmVudCgpIj5nZXRDb21wb25lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCNnZXRUeXBlU3lzdGVtKCkiPmdldFR5cGVTeXN0ZW08L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9IlNjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWYob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFHbG9iYWxBdHRyaWJ1dGUpIj48IS0tIC0tPjwvQT48SDM+Ci1TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+U2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuaHRtbCI+U2NoZW1hR2xvYmFsQXR0cmlidXRlPC9BPiZuYnNwO2VsZW1lbnQpPC9QUkU+Ci08REw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVN5c3RlbSwgamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLVNjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWY8L0gzPgotPFBSRT4KLXB1YmxpYyA8Qj5TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVTeXN0ZW0uaHRtbCI+U2NoZW1hVHlwZVN5c3RlbTwvQT4mbmJzcDtzeXN0ZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7aGFuZGxlKTwvUFJFPgotPERMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0Q29tcG9uZW50VHlwZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRDb21wb25lbnRUeXBlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgZmluYWwgaW50IDxCPmdldENvbXBvbmVudFR5cGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuUmVmLmh0bWwjZ2V0Q29tcG9uZW50VHlwZSgpIj5nZXRDb21wb25lbnRUeXBlPC9BPjwvQ09ERT4gaW4gY2xhc3MgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuUmVmLmh0bWwiPlNjaGVtYUNvbXBvbmVudC5SZWY8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldDwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsQXR0cmlidXRlLmh0bWwiPlNjaGVtYUdsb2JhbEF0dHJpYnV0ZTwvQT4gPEI+Z2V0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5SZWYuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWYuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQ29tcG9uZW50LlJlZiI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEF0dHJpYnV0ZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDA0MWQ0Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEF0dHJpYnV0ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzEzICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTYgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1TY2hlbWFHbG9iYWxBdHRyaWJ1dGUgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hR2xvYmFsQXR0cmlidXRlLFNjaGVtYUdsb2JhbEF0dHJpYnV0ZSBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlNjaGVtYUdsb2JhbEF0dHJpYnV0ZSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEVsZW1lbnQuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNjaGVtYUdsb2JhbEF0dHJpYnV0ZS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBTY2hlbWFHbG9iYWxBdHRyaWJ1dGU8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sIj5TY2hlbWFGaWVsZDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxBdHRyaWJ1dGUuaHRtbCI+U2NoZW1hTG9jYWxBdHRyaWJ1dGU8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGludGVyZmFjZSA8Qj5TY2hlbWFHbG9iYWxBdHRyaWJ1dGU8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEF0dHJpYnV0ZS5odG1sIj5TY2hlbWFMb2NhbEF0dHJpYnV0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPlNjaGVtYUNvbXBvbmVudDwvQT48L0RMPgotCi08UD4KLVJlcHJlc2VudHMgYSBnbG9iYWwgYXR0cmlidXRlIGRlZmluaXRpb24KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI2ZpbmRBdHRyaWJ1dGUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxDT0RFPlNjaGVtYVR5cGVMb2FkZXIuZmluZEF0dHJpYnV0ZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKTwvQ09ERT48L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5OZXN0ZWQgQ2xhc3MgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2NsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZi5odG1sIj5TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1VzZWQgdG8gYWxsb3cgb24tZGVtYW5kIGxvYWRpbmcgb2YgZWxlbWVudHMuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPlNjaGVtYUNvbXBvbmVudDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hTG9jYWxBdHRyaWJ1dGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEF0dHJpYnV0ZS5odG1sIj5TY2hlbWFMb2NhbEF0dHJpYnV0ZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsQXR0cmlidXRlLmh0bWwjT1BUSU9OQUwiPk9QVElPTkFMPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEF0dHJpYnV0ZS5odG1sI1BST0hJQklURUQiPlBST0hJQklURUQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsQXR0cmlidXRlLmh0bWwjUkVRVUlSRUQiPlJFUVVJUkVEPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjQVRUUklCVVRFIj5BVFRSSUJVVEU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI0FUVFJJQlVURV9HUk9VUCI+QVRUUklCVVRFX0dST1VQPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNFTEVNRU5UIj5FTEVNRU5UPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNJREVOVElUWV9DT05TVFJBSU5UIj5JREVOVElUWV9DT05TVFJBSU5UPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNNT0RFTF9HUk9VUCI+TU9ERUxfR1JPVVA8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI05PVEFUSU9OIj5OT1RBVElPTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjVFlQRSI+VFlQRTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZi5odG1sIj5TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEF0dHJpYnV0ZS5odG1sI2dldFJlZigpIj5nZXRSZWY8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXRydW5zIGEgU2NoZW1hR2xvYmFsRWxlbWVudC5SZWYgcG9pbnRpbmcgdG8gdGhpcyBlbGVtZW50IGl0c2VsZi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEF0dHJpYnV0ZS5odG1sI2dldFNvdXJjZU5hbWUoKSI+Z2V0U291cmNlTmFtZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBuYW1lIG9mIHRoZSBzb3VyY2UgLnhzZCBmaWxlIHdpdGhpbiB3aGljaCB0aGlzIGF0dHJpYnV0ZSB3YXMgZGVmaW5lZDwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFMb2NhbEF0dHJpYnV0ZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEF0dHJpYnV0ZS5odG1sIj5TY2hlbWFMb2NhbEF0dHJpYnV0ZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsQXR0cmlidXRlLmh0bWwjZ2V0VXNlKCkiPmdldFVzZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUZpZWxkIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwiPlNjaGVtYUZpZWxkPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCNnZXREZWZhdWx0VGV4dCgpIj5nZXREZWZhdWx0VGV4dDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCNnZXREZWZhdWx0VmFsdWUoKSI+Z2V0RGVmYXVsdFZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sI2dldE1heE9jY3VycygpIj5nZXRNYXhPY2N1cnM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwjZ2V0TWluT2NjdXJzKCkiPmdldE1pbk9jY3VyczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCNnZXROYW1lKCkiPmdldE5hbWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwjZ2V0VHlwZSgpIj5nZXRUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sI2lzQXR0cmlidXRlKCkiPmlzQXR0cmlidXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sI2lzRGVmYXVsdCgpIj5pc0RlZmF1bHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwjaXNGaXhlZCgpIj5pc0ZpeGVkPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sI2lzTmlsbGFibGUoKSI+aXNOaWxsYWJsZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjZ2V0Q29tcG9uZW50UmVmKCkiPmdldENvbXBvbmVudFJlZjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjZ2V0Q29tcG9uZW50VHlwZSgpIj5nZXRDb21wb25lbnRUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNnZXROYW1lKCkiPmdldE5hbWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI2dldFR5cGVTeXN0ZW0oKSI+Z2V0VHlwZVN5c3RlbTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRTb3VyY2VOYW1lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNvdXJjZU5hbWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPmdldFNvdXJjZU5hbWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UaGUgbmFtZSBvZiB0aGUgc291cmNlIC54c2QgZmlsZSB3aXRoaW4gd2hpY2ggdGhpcyBhdHRyaWJ1dGUgd2FzIGRlZmluZWQKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0UmVmKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFJlZjwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZi5odG1sIj5TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmPC9BPiA8Qj5nZXRSZWY8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXRydW5zIGEgU2NoZW1hR2xvYmFsRWxlbWVudC5SZWYgcG9pbnRpbmcgdG8gdGhpcyBlbGVtZW50IGl0c2VsZi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTY2hlbWFHbG9iYWxBdHRyaWJ1dGUuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5SZWYuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEVsZW1lbnQuUmVmLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NTliYjUuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5SZWYuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMxMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ2OjU5IFBEVCAyMDAzIC0tPgotPFRJVExFPgotU2NoZW1hR2xvYmFsRWxlbWVudC5SZWYgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hR2xvYmFsRWxlbWVudC5SZWYsU2NoZW1hR2xvYmFsRWxlbWVudC5SZWYgY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlNjaGVtYUdsb2JhbEVsZW1lbnQuUmVmIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTY2hlbWFHbG9iYWxFbGVtZW50LlJlZi5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQuUmVmIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgU2NoZW1hR2xvYmFsRWxlbWVudC5SZWY8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuUmVmLmh0bWwiPm9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQ29tcG9uZW50LlJlZjwvQT4KLSAgICAgICAgfAotICAgICAgICArLS08Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUdsb2JhbEVsZW1lbnQuUmVmPC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+RW5jbG9zaW5nIGNsYXNzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50Lmh0bWwiPlNjaGVtYUdsb2JhbEVsZW1lbnQ8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyA8Qj5TY2hlbWFHbG9iYWxFbGVtZW50LlJlZjwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCI+U2NoZW1hQ29tcG9uZW50LlJlZjwvQT48L0RMPgotCi08UD4KLVVzZWQgdG8gYWxsb3cgb24tZGVtYW5kIGxvYWRpbmcgb2YgZWxlbWVudHMuCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQ29tcG9uZW50LlJlZiI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPkZpZWxkcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIj5TY2hlbWFDb21wb25lbnQuUmVmPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sI19oYW5kbGUiPl9oYW5kbGU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50LlJlZi5odG1sI1NjaGVtYUdsb2JhbEVsZW1lbnQuUmVmKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hR2xvYmFsRWxlbWVudCkiPlNjaGVtYUdsb2JhbEVsZW1lbnQuUmVmPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50Lmh0bWwiPlNjaGVtYUdsb2JhbEVsZW1lbnQ8L0E+Jm5ic3A7ZWxlbWVudCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50LlJlZi5odG1sI1NjaGVtYUdsb2JhbEVsZW1lbnQuUmVmKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVN5c3RlbSwgamF2YS5sYW5nLlN0cmluZykiPlNjaGVtYUdsb2JhbEVsZW1lbnQuUmVmPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwiPlNjaGVtYVR5cGVTeXN0ZW08L0E+Jm5ic3A7c3lzdGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO2hhbmRsZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5odG1sIj5TY2hlbWFHbG9iYWxFbGVtZW50PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEVsZW1lbnQuUmVmLmh0bWwjZ2V0KCkiPmdldDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50LlJlZi5odG1sI2dldENvbXBvbmVudFR5cGUoKSI+Z2V0Q29tcG9uZW50VHlwZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQuUmVmIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIj5TY2hlbWFDb21wb25lbnQuUmVmPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sI2dldENvbXBvbmVudCgpIj5nZXRDb21wb25lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCNnZXRUeXBlU3lzdGVtKCkiPmdldFR5cGVTeXN0ZW08L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9IlNjaGVtYUdsb2JhbEVsZW1lbnQuUmVmKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hR2xvYmFsRWxlbWVudCkiPjwhLS0gLS0+PC9BPjxIMz4KLVNjaGVtYUdsb2JhbEVsZW1lbnQuUmVmPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+U2NoZW1hR2xvYmFsRWxlbWVudC5SZWY8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5odG1sIj5TY2hlbWFHbG9iYWxFbGVtZW50PC9BPiZuYnNwO2VsZW1lbnQpPC9QUkU+Ci08REw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTY2hlbWFHbG9iYWxFbGVtZW50LlJlZihvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVTeXN0ZW0sIGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1TY2hlbWFHbG9iYWxFbGVtZW50LlJlZjwvSDM+Ci08UFJFPgotcHVibGljIDxCPlNjaGVtYUdsb2JhbEVsZW1lbnQuUmVmPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVTeXN0ZW0uaHRtbCI+U2NoZW1hVHlwZVN5c3RlbTwvQT4mbmJzcDtzeXN0ZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO2hhbmRsZSk8L1BSRT4KLTxETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldENvbXBvbmVudFR5cGUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Q29tcG9uZW50VHlwZTwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGludCA8Qj5nZXRDb21wb25lbnRUeXBlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sI2dldENvbXBvbmVudFR5cGUoKSI+Z2V0Q29tcG9uZW50VHlwZTwvQT48L0NPREU+IGluIGNsYXNzIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIj5TY2hlbWFDb21wb25lbnQuUmVmPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEVsZW1lbnQuaHRtbCI+U2NoZW1hR2xvYmFsRWxlbWVudDwvQT4gPEI+Z2V0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZi5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZi5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU2NoZW1hR2xvYmFsRWxlbWVudC5SZWYuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQ29tcG9uZW50LlJlZiI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50Lmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwOTY3NWMuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDE4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTYgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1TY2hlbWFHbG9iYWxFbGVtZW50IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUdsb2JhbEVsZW1lbnQsU2NoZW1hR2xvYmFsRWxlbWVudCBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlNjaGVtYUdsb2JhbEVsZW1lbnQgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEF0dHJpYnV0ZS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTY2hlbWFHbG9iYWxFbGVtZW50Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFNjaGVtYUdsb2JhbEVsZW1lbnQ8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sIj5TY2hlbWFGaWVsZDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxFbGVtZW50Lmh0bWwiPlNjaGVtYUxvY2FsRWxlbWVudDwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlNjaGVtYUdsb2JhbEVsZW1lbnQ8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEVsZW1lbnQuaHRtbCI+U2NoZW1hTG9jYWxFbGVtZW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPjwvREw+Ci0KLTxQPgotUmVwcmVzZW50cyBhIGdsb2JhbCBlbGVtZW50IGRlZmluaXRpb24uCi08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNmaW5kRWxlbWVudChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PENPREU+U2NoZW1hVHlwZUxvYWRlci5maW5kRWxlbWVudChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKTwvQ09ERT48L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5OZXN0ZWQgQ2xhc3MgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2NsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5SZWYuaHRtbCI+U2NoZW1hR2xvYmFsRWxlbWVudC5SZWY8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VXNlZCB0byBhbGxvdyBvbi1kZW1hbmQgbG9hZGluZyBvZiBlbGVtZW50cy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjQVRUUklCVVRFIj5BVFRSSUJVVEU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI0FUVFJJQlVURV9HUk9VUCI+QVRUUklCVVRFX0dST1VQPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNFTEVNRU5UIj5FTEVNRU5UPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNJREVOVElUWV9DT05TVFJBSU5UIj5JREVOVElUWV9DT05TVFJBSU5UPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNNT0RFTF9HUk9VUCI+TU9ERUxfR1JPVVA8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI05PVEFUSU9OIj5OT1RBVElPTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjVFlQRSI+VFlQRTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50Lmh0bWwjZmluYWxFeHRlbnNpb24oKSI+ZmluYWxFeHRlbnNpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHVzaW5nIHRoaXMgZWxlbWVudCBhcyB0aGUgaGVhZCBvZiBhIHN1YnN0aXR1dGlvbgotIGdyb3VwIGZvciBhIHN1YnN0aXR1dGlvbiB2aWEgdHlwZSBleHRlbnNpb24gaXMgcHJvaGliaXRlZC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEVsZW1lbnQuaHRtbCNmaW5hbFJlc3RyaWN0aW9uKCkiPmZpbmFsUmVzdHJpY3Rpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHVzaW5nIHRoaXMgZWxlbWVudCBhcyB0aGUgaGVhZCBvZiBhIHN1YnN0aXR1dGlvbgotIGdyb3VwIGZvciBhIHN1YnN0aXR1dGlvbiB2aWEgdHlwZSByZXN0cmljdGlvbiBpcyBwcm9oaWJpdGVkLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEVsZW1lbnQuUmVmLmh0bWwiPlNjaGVtYUdsb2JhbEVsZW1lbnQuUmVmPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEVsZW1lbnQuaHRtbCNnZXRSZWYoKSI+Z2V0UmVmPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0cnVucyBhIFNjaGVtYUdsb2JhbEVsZW1lbnQuUmVmIHBvaW50aW5nIHRvIHRoaXMgZWxlbWVudCBpdHNlbGYuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50Lmh0bWwjZ2V0U291cmNlTmFtZSgpIj5nZXRTb3VyY2VOYW1lPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG5hbWUgb2YgdGhlIHNvdXJjZSAueHNkIGZpbGUgd2l0aGluIHdoaWNoIHRoaXMgYXR0cmlidXRlIHdhcyBkZWZpbmVkPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5odG1sIj5TY2hlbWFHbG9iYWxFbGVtZW50PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEVsZW1lbnQuaHRtbCNzdWJzdGl0dXRpb25Hcm91cCgpIj5zdWJzdGl0dXRpb25Hcm91cDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBlbGVtZW50IHRoYXQgaXMgdGhlIGhlYWQgb2YgdGhpcyBlbGVtZW50J3Mgc3Vic3RpdHV0aW9uCi0gZ3JvdXAsIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIHRoaXMgZWxlbWVudCBpcyBub3QgYSBtZW1iZXIKLSBvZiBhIHN1YnN0aXR1dGlvbiBncm91cC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPltdPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5odG1sI3N1YnN0aXR1dGlvbkdyb3VwTWVtYmVycygpIj5zdWJzdGl0dXRpb25Hcm91cE1lbWJlcnM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXQgb2YgUU5hbWVzIGZvciBlbGVtZW50cyB0aGF0IGFyZSB0aGUgbWVtYmVycyBvZiB0aGUKLSBzdWJzdGl0dXRpb24gZ3JvdXAgZm9yIHdoaWNoIHRoaXMgZWxlbWVudCBpcyB0aGUgaGVhZCwKLSBub3QgaW5jbHVkaW5nIHRoaXMgZWxlbWVudC48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hTG9jYWxFbGVtZW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsRWxlbWVudC5odG1sIj5TY2hlbWFMb2NhbEVsZW1lbnQ8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEVsZW1lbnQuaHRtbCNibG9ja0V4dGVuc2lvbigpIj5ibG9ja0V4dGVuc2lvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxFbGVtZW50Lmh0bWwjYmxvY2tSZXN0cmljdGlvbigpIj5ibG9ja1Jlc3RyaWN0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEVsZW1lbnQuaHRtbCNibG9ja1N1YnN0aXR1dGlvbigpIj5ibG9ja1N1YnN0aXR1dGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxFbGVtZW50Lmh0bWwjZ2V0SWRlbnRpdHlDb25zdHJhaW50cygpIj5nZXRJZGVudGl0eUNvbnN0cmFpbnRzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEVsZW1lbnQuaHRtbCNpc0Fic3RyYWN0KCkiPmlzQWJzdHJhY3Q8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFGaWVsZCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sIj5TY2hlbWFGaWVsZDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwjZ2V0RGVmYXVsdFRleHQoKSI+Z2V0RGVmYXVsdFRleHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwjZ2V0RGVmYXVsdFZhbHVlKCkiPmdldERlZmF1bHRWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCNnZXRNYXhPY2N1cnMoKSI+Z2V0TWF4T2NjdXJzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sI2dldE1pbk9jY3VycygpIj5nZXRNaW5PY2N1cnM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwjZ2V0TmFtZSgpIj5nZXROYW1lPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sI2dldFR5cGUoKSI+Z2V0VHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCNpc0F0dHJpYnV0ZSgpIj5pc0F0dHJpYnV0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCNpc0RlZmF1bHQoKSI+aXNEZWZhdWx0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sI2lzRml4ZWQoKSI+aXNGaXhlZDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCNpc05pbGxhYmxlKCkiPmlzTmlsbGFibGU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPlNjaGVtYUNvbXBvbmVudDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI2dldENvbXBvbmVudFJlZigpIj5nZXRDb21wb25lbnRSZWY8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI2dldENvbXBvbmVudFR5cGUoKSI+Z2V0Q29tcG9uZW50VHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjZ2V0TmFtZSgpIj5nZXROYW1lPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNnZXRUeXBlU3lzdGVtKCkiPmdldFR5cGVTeXN0ZW08L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0U291cmNlTmFtZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTb3VyY2VOYW1lPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5nZXRTb3VyY2VOYW1lPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VGhlIG5hbWUgb2YgdGhlIHNvdXJjZSAueHNkIGZpbGUgd2l0aGluIHdoaWNoIHRoaXMgYXR0cmlidXRlIHdhcyBkZWZpbmVkCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InN1YnN0aXR1dGlvbkdyb3VwTWVtYmVycygpIj48IS0tIC0tPjwvQT48SDM+Ci1zdWJzdGl0dXRpb25Hcm91cE1lbWJlcnM8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+W10gPEI+c3Vic3RpdHV0aW9uR3JvdXBNZW1iZXJzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+U2V0IG9mIFFOYW1lcyBmb3IgZWxlbWVudHMgdGhhdCBhcmUgdGhlIG1lbWJlcnMgb2YgdGhlCi0gc3Vic3RpdHV0aW9uIGdyb3VwIGZvciB3aGljaCB0aGlzIGVsZW1lbnQgaXMgdGhlIGhlYWQsCi0gbm90IGluY2x1ZGluZyB0aGlzIGVsZW1lbnQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InN1YnN0aXR1dGlvbkdyb3VwKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXN1YnN0aXR1dGlvbkdyb3VwPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50Lmh0bWwiPlNjaGVtYUdsb2JhbEVsZW1lbnQ8L0E+IDxCPnN1YnN0aXR1dGlvbkdyb3VwPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VGhlIGVsZW1lbnQgdGhhdCBpcyB0aGUgaGVhZCBvZiB0aGlzIGVsZW1lbnQncyBzdWJzdGl0dXRpb24KLSBncm91cCwgb3IgPGNvZGU+bnVsbDwvY29kZT4gaWYgdGhpcyBlbGVtZW50IGlzIG5vdCBhIG1lbWJlcgotIG9mIGEgc3Vic3RpdHV0aW9uIGdyb3VwLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJmaW5hbEV4dGVuc2lvbigpIj48IS0tIC0tPjwvQT48SDM+Ci1maW5hbEV4dGVuc2lvbjwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+ZmluYWxFeHRlbnNpb248L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHVzaW5nIHRoaXMgZWxlbWVudCBhcyB0aGUgaGVhZCBvZiBhIHN1YnN0aXR1dGlvbgotIGdyb3VwIGZvciBhIHN1YnN0aXR1dGlvbiB2aWEgdHlwZSBleHRlbnNpb24gaXMgcHJvaGliaXRlZC4KLSBJZiBib3RoIGZpbmFsRXh0ZW5zaW9uIGFuZCBmaW5hbFJlc3RyaWN0aW9uIGFyZSB0cnVlLCB0aGlzCi0gZWxlbWVudCBjYW5ub3QgYmUgaGVhZCBvZiBhIHN1YnN0aXR1dGlvbiBncm91cC4KLSBTZW5zaWJsZSBvbmx5IGZvciBnbG9iYWwgZWxlbWVudHMuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImZpbmFsUmVzdHJpY3Rpb24oKSI+PCEtLSAtLT48L0E+PEgzPgotZmluYWxSZXN0cmljdGlvbjwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+ZmluYWxSZXN0cmljdGlvbjwvQj4oKTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgdXNpbmcgdGhpcyBlbGVtZW50IGFzIHRoZSBoZWFkIG9mIGEgc3Vic3RpdHV0aW9uCi0gZ3JvdXAgZm9yIGEgc3Vic3RpdHV0aW9uIHZpYSB0eXBlIHJlc3RyaWN0aW9uIGlzIHByb2hpYml0ZWQuCi0gSWYgYm90aCBmaW5hbEV4dGVuc2lvbiBhbmQgZmluYWxSZXN0cmljdGlvbiBhcmUgdHJ1ZSwgdGhpcwotIGVsZW1lbnQgY2Fubm90IGJlIGhlYWQgb2YgYSBzdWJzdGl0dXRpb24gZ3JvdXAuCi0gU2Vuc2libGUgb25seSBmb3IgZ2xvYmFsIGVsZW1lbnRzLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRSZWYoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0UmVmPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50LlJlZi5odG1sIj5TY2hlbWFHbG9iYWxFbGVtZW50LlJlZjwvQT4gPEI+Z2V0UmVmPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0cnVucyBhIFNjaGVtYUdsb2JhbEVsZW1lbnQuUmVmIHBvaW50aW5nIHRvIHRoaXMgZWxlbWVudCBpdHNlbGYuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU2NoZW1hR2xvYmFsRWxlbWVudC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzNzFhZmMuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzEyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTkgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWYsU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZiBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZiAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5SZWYuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYU1vZGVsR3JvdXAuUmVmLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudC5SZWYiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmPC9IMj4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5qYXZhLmxhbmcuT2JqZWN0PC9BPgotICB8Ci0gICstLTxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudC5SZWY8L0E+Ci0gICAgICAgIHwKLSAgICAgICAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmPC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+RW5jbG9zaW5nIGNsYXNzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuaHRtbCI+U2NoZW1hSWRlbnRpdHlDb25zdHJhaW50PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgPEI+U2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZjwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCI+U2NoZW1hQ29tcG9uZW50LlJlZjwvQT48L0RMPgotCi08UD4KLVVzZWQgdG8gYWxsb3cgb24tZGVtYW5kIGxvYWRpbmcgb2YgaWRlbnRpdHkgY29uc3RyYWludHMuCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQ29tcG9uZW50LlJlZiI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPkZpZWxkcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIj5TY2hlbWFDb21wb25lbnQuUmVmPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sI19oYW5kbGUiPl9oYW5kbGU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmLmh0bWwjU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZihvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUlkZW50aXR5Q29uc3RyYWludCkiPlNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWY8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5odG1sIj5TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQ8L0E+Jm5ic3A7aWRjKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWYuaHRtbCNTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVN5c3RlbSwgamF2YS5sYW5nLlN0cmluZykiPlNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWY8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVTeXN0ZW0uaHRtbCI+U2NoZW1hVHlwZVN5c3RlbTwvQT4mbmJzcDtzeXN0ZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtoYW5kbGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5odG1sIj5TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZi5odG1sI2dldCgpIj5nZXQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZi5odG1sI2dldENvbXBvbmVudFR5cGUoKSI+Z2V0Q29tcG9uZW50VHlwZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQuUmVmIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIj5TY2hlbWFDb21wb25lbnQuUmVmPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sI2dldENvbXBvbmVudCgpIj5nZXRDb21wb25lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCNnZXRUeXBlU3lzdGVtKCkiPmdldFR5cGVTeXN0ZW08L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9IlNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWYob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+U2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuaHRtbCI+U2NoZW1hSWRlbnRpdHlDb25zdHJhaW50PC9BPiZuYnNwO2lkYyk8L1BSRT4KLTxETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWYob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlU3lzdGVtLCBqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZjwvSDM+Ci08UFJFPgotcHVibGljIDxCPlNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWY8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sIj5TY2hlbWFUeXBlU3lzdGVtPC9BPiZuYnNwO3N5c3RlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtoYW5kbGUpPC9QUkU+Ci08REw+Ci08L0RMPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRDb21wb25lbnRUeXBlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldENvbXBvbmVudFR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyBmaW5hbCBpbnQgPEI+Z2V0Q29tcG9uZW50VHlwZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCNnZXRDb21wb25lbnRUeXBlKCkiPmdldENvbXBvbmVudFR5cGU8L0E+PC9DT0RFPiBpbiBjbGFzcyA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCI+U2NoZW1hQ29tcG9uZW50LlJlZjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuaHRtbCI+U2NoZW1hSWRlbnRpdHlDb25zdHJhaW50PC9BPiA8Qj5nZXQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50LlJlZi5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTW9kZWxHcm91cC5SZWYuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWYuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQ29tcG9uZW50LlJlZiI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjg1ZDNkLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDc0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTYgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LFNjaGVtYUlkZW50aXR5Q29uc3RyYWludCBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlNjaGVtYUlkZW50aXR5Q29uc3RyYWludCAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxBdHRyaWJ1dGUuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQ8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBpbnRlcmZhY2UgPEI+U2NoZW1hSWRlbnRpdHlDb25zdHJhaW50PC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPlNjaGVtYUNvbXBvbmVudDwvQT48L0RMPgotCi08UD4KLVJlcHJlc2VudHMgYW4gaWRlbnRpdHkgY29uc3RyYWludCBkZWZpbml0aW9uLgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmLmh0bWwiPlNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWY8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VXNlZCB0byBhbGxvdyBvbi1kZW1hbmQgbG9hZGluZyBvZiBpZGVudGl0eSBjb25zdHJhaW50cy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Lmh0bWwjQ0NfS0VZIj5DQ19LRVk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2RlY2xhcmUta2V5Ij54czprZXk8L2E+IGNvbnN0cmFpbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5odG1sI0NDX0tFWVJFRiI+Q0NfS0VZUkVGPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNkZWNsYXJlLWtleSI+eHM6a2V5UmVmPC9hPiBjb25zdHJhaW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuaHRtbCNDQ19VTklRVUUiPkNDX1VOSVFVRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZGVjbGFyZS1rZXkiPnhzOnVuaXF1ZTwvYT4gY29uc3RyYWludC48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjQVRUUklCVVRFIj5BVFRSSUJVVEU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI0FUVFJJQlVURV9HUk9VUCI+QVRUUklCVVRFX0dST1VQPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNFTEVNRU5UIj5FTEVNRU5UPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNJREVOVElUWV9DT05TVFJBSU5UIj5JREVOVElUWV9DT05TVFJBSU5UPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNNT0RFTF9HUk9VUCI+TU9ERUxfR1JPVVA8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI05PVEFUSU9OIj5OT1RBVElPTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjVFlQRSI+VFlQRTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5odG1sI2dldENvbnN0cmFpbnRDYXRlZ29yeSgpIj5nZXRDb25zdHJhaW50Q2F0ZWdvcnk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm4gdGhlIGNvbnN0cmFpbnQgY2F0ZWdvcnkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuaHRtbCNnZXRGaWVsZFBhdGgoaW50KSI+Z2V0RmllbGRQYXRoPC9BPjwvQj4oaW50Jm5ic3A7aW5kZXgpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm4gYSBjb21waWxlZCB4cGF0aCBvYmplY3QgZm9yIHRoZSBmaWVsZC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPltdPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Lmh0bWwjZ2V0RmllbGRzKCkiPmdldEZpZWxkczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybiAoYSBjb3B5IG9mKSB0aGUgeHBhdGhzIGZvciBhbGwgdGhlIGZpZWxkcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9NYXAuaHRtbCI+TWFwPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5odG1sI2dldE5TTWFwKCkiPmdldE5TTWFwPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJuIGEgcmVhZC1vbmx5IGNvcHkgb2YgdGhlIG5hbWVzcGFjZSBtYXAuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Lmh0bWwiPlNjaGVtYUlkZW50aXR5Q29uc3RyYWludDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuaHRtbCNnZXRSZWZlcmVuY2VkS2V5KCkiPmdldFJlZmVyZW5jZWRLZXk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBrZXkgdGhhdCBhIGtleSByZWYgcmVmZXJzIHRvLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Lmh0bWwjZ2V0U2VsZWN0b3IoKSI+Z2V0U2VsZWN0b3I8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm4gdGhlIHNlbGVjdG9yIHhwYXRoIGFzIGEgc3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Lmh0bWwjZ2V0U2VsZWN0b3JQYXRoKCkiPmdldFNlbGVjdG9yUGF0aDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybiBhIGNvbXBpbGVkIHhwYXRoIG9iamVjdCBmb3IgdGhlIHNlbGVjdG9yLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPlNjaGVtYUNvbXBvbmVudDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI2dldENvbXBvbmVudFJlZigpIj5nZXRDb21wb25lbnRSZWY8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI2dldENvbXBvbmVudFR5cGUoKSI+Z2V0Q29tcG9uZW50VHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjZ2V0TmFtZSgpIj5nZXROYW1lPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNnZXRUeXBlU3lzdGVtKCkiPmdldFR5cGVTeXN0ZW08L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJDQ19LRVkiPjwhLS0gLS0+PC9BPjxIMz4KLUNDX0tFWTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+Q0NfS0VZPC9CPjwvUFJFPgotPERMPgotPEREPkEgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNkZWNsYXJlLWtleSI+eHM6a2V5PC9hPiBjb25zdHJhaW50LiAgU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Lmh0bWwjZ2V0Q29uc3RyYWludENhdGVnb3J5KCkiPjxDT0RFPmdldENvbnN0cmFpbnRDYXRlZ29yeSgpPC9DT0RFPjwvQT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LkNDX0tFWSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJDQ19LRVlSRUYiPjwhLS0gLS0+PC9BPjxIMz4KLUNDX0tFWVJFRjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+Q0NfS0VZUkVGPC9CPjwvUFJFPgotPERMPgotPEREPkEgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNkZWNsYXJlLWtleSI+eHM6a2V5UmVmPC9hPiBjb25zdHJhaW50LiAgU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Lmh0bWwjZ2V0Q29uc3RyYWludENhdGVnb3J5KCkiPjxDT0RFPmdldENvbnN0cmFpbnRDYXRlZ29yeSgpPC9DT0RFPjwvQT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LkNDX0tFWVJFRiI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJDQ19VTklRVUUiPjwhLS0gLS0+PC9BPjxIMz4KLUNDX1VOSVFVRTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+Q0NfVU5JUVVFPC9CPjwvUFJFPgotPERMPgotPEREPkEgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNkZWNsYXJlLWtleSI+eHM6dW5pcXVlPC9hPiBjb25zdHJhaW50LiAgU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Lmh0bWwjZ2V0Q29uc3RyYWludENhdGVnb3J5KCkiPjxDT0RFPmdldENvbnN0cmFpbnRDYXRlZ29yeSgpPC9DT0RFPjwvQT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LkNDX1VOSVFVRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0U2VsZWN0b3IoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U2VsZWN0b3I8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPmdldFNlbGVjdG9yPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJuIHRoZSBzZWxlY3RvciB4cGF0aCBhcyBhIHN0cmluZy4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U2VsZWN0b3JQYXRoKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNlbGVjdG9yUGF0aDwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4gPEI+Z2V0U2VsZWN0b3JQYXRoPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJuIGEgY29tcGlsZWQgeHBhdGggb2JqZWN0IGZvciB0aGUgc2VsZWN0b3IuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEZpZWxkcygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRGaWVsZHM8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+W10gPEI+Z2V0RmllbGRzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJuIChhIGNvcHkgb2YpIHRoZSB4cGF0aHMgZm9yIGFsbCB0aGUgZmllbGRzLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRGaWVsZFBhdGgoaW50KSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RmllbGRQYXRoPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiA8Qj5nZXRGaWVsZFBhdGg8L0I+KGludCZuYnNwO2luZGV4KTwvUFJFPgotPERMPgotPEREPlJldHVybiBhIGNvbXBpbGVkIHhwYXRoIG9iamVjdCBmb3IgdGhlIGZpZWxkLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXROU01hcCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXROU01hcDwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTWFwLmh0bWwiPk1hcDwvQT4gPEI+Z2V0TlNNYXA8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm4gYSByZWFkLW9ubHkgY29weSBvZiB0aGUgbmFtZXNwYWNlIG1hcC4gVGhpcyBpcyB0aGUgCi0gc2V0IG9mIHByZWZpeCB0byBVUkkgbWFwcGluZ3MgdGhhdCB3ZXJlIGluIHNjb3BlIGluIHRoZQotIHNjaGVtYSBhdCB0aGUgcG9pbnQgYXQgd2hpY2ggdGhpcyBjb25zdHJhaW50IHdhcyBkZWNsYXJlZAotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRDb25zdHJhaW50Q2F0ZWdvcnkoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Q29uc3RyYWludENhdGVnb3J5PC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldENvbnN0cmFpbnRDYXRlZ29yeTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybiB0aGUgY29uc3RyYWludCBjYXRlZ29yeS4gRWl0aGVyIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Lmh0bWwjQ0NfS0VZIj48Q09ERT5DQ19LRVk8L0NPREU+PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuaHRtbCNDQ19LRVlSRUYiPjxDT0RFPkNDX0tFWVJFRjwvQ09ERT48L0E+LAotIG9yIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Lmh0bWwjQ0NfVU5JUVVFIj48Q09ERT5DQ19VTklRVUU8L0NPREU+PC9BPi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0UmVmZXJlbmNlZEtleSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRSZWZlcmVuY2VkS2V5PC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuaHRtbCI+U2NoZW1hSWRlbnRpdHlDb25zdHJhaW50PC9BPiA8Qj5nZXRSZWZlcmVuY2VkS2V5PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUga2V5IHRoYXQgYSBrZXkgcmVmIHJlZmVycyB0by4gT25seSB2YWxpZCBmb3IKLSBrZXlyZWZzLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxBdHRyaWJ1dGUuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEF0dHJpYnV0ZS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxBdHRyaWJ1dGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdiNDZmMS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEF0dHJpYnV0ZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzAwICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTYgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1TY2hlbWFMb2NhbEF0dHJpYnV0ZSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFMb2NhbEF0dHJpYnV0ZSxTY2hlbWFMb2NhbEF0dHJpYnV0ZSBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlNjaGVtYUxvY2FsQXR0cmlidXRlIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsRWxlbWVudC5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU2NoZW1hTG9jYWxBdHRyaWJ1dGUuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgU2NoZW1hTG9jYWxBdHRyaWJ1dGU8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sIj5TY2hlbWFGaWVsZDwvQT48L0REPgotPC9ETD4KLTxETD4KLTxEVD48Qj5BbGwgS25vd24gU3ViaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEF0dHJpYnV0ZS5odG1sIj5TY2hlbWFHbG9iYWxBdHRyaWJ1dGU8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGludGVyZmFjZSA8Qj5TY2hlbWFMb2NhbEF0dHJpYnV0ZTwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwiPlNjaGVtYUZpZWxkPC9BPjwvREw+Ci0KLTxQPgotUmVwcmVzZW50cyBhIGxvY2FsIG9yIGdsb2JhbCBhdHRyaWJ1dGUgZGVmaW5pdGlvbi4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxBdHRyaWJ1dGUuaHRtbCNPUFRJT05BTCI+T1BUSU9OQUw8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QW4gb3B0aW9uYWwgYXR0cmlidXRlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEF0dHJpYnV0ZS5odG1sI1BST0hJQklURUQiPlBST0hJQklURUQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSBwcm9oaWJpdGVkIGF0dHJpYnV0ZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxBdHRyaWJ1dGUuaHRtbCNSRVFVSVJFRCI+UkVRVUlSRUQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSByZXF1aXJlZCBhdHRyaWJ1dGUuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsQXR0cmlidXRlLmh0bWwjZ2V0VXNlKCkiPmdldFVzZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEF0dHJpYnV0ZS5odG1sI1BST0hJQklURUQiPjxDT0RFPlBST0hJQklURUQ8L0NPREU+PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEF0dHJpYnV0ZS5odG1sI09QVElPTkFMIj48Q09ERT5PUFRJT05BTDwvQ09ERT48L0E+LCBvciA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsQXR0cmlidXRlLmh0bWwjUkVRVUlSRUQiPjxDT0RFPlJFUVVJUkVEPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUZpZWxkIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwiPlNjaGVtYUZpZWxkPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCNnZXREZWZhdWx0VGV4dCgpIj5nZXREZWZhdWx0VGV4dDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCNnZXREZWZhdWx0VmFsdWUoKSI+Z2V0RGVmYXVsdFZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sI2dldE1heE9jY3VycygpIj5nZXRNYXhPY2N1cnM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwjZ2V0TWluT2NjdXJzKCkiPmdldE1pbk9jY3VyczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCNnZXROYW1lKCkiPmdldE5hbWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwjZ2V0VHlwZSgpIj5nZXRUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sI2lzQXR0cmlidXRlKCkiPmlzQXR0cmlidXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sI2lzRGVmYXVsdCgpIj5pc0RlZmF1bHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwjaXNGaXhlZCgpIj5pc0ZpeGVkPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sI2lzTmlsbGFibGUoKSI+aXNOaWxsYWJsZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9IlBST0hJQklURUQiPjwhLS0gLS0+PC9BPjxIMz4KLVBST0hJQklURUQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPlBST0hJQklURUQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+QSBwcm9oaWJpdGVkIGF0dHJpYnV0ZS4gIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsQXR0cmlidXRlLmh0bWwjZ2V0VXNlKCkiPjxDT0RFPmdldFVzZSgpPC9DT0RFPjwvQT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hTG9jYWxBdHRyaWJ1dGUuUFJPSElCSVRFRCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJPUFRJT05BTCI+PCEtLSAtLT48L0E+PEgzPgotT1BUSU9OQUw8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPk9QVElPTkFMPC9CPjwvUFJFPgotPERMPgotPEREPkFuIG9wdGlvbmFsIGF0dHJpYnV0ZS4gIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsQXR0cmlidXRlLmh0bWwjZ2V0VXNlKCkiPjxDT0RFPmdldFVzZSgpPC9DT0RFPjwvQT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hTG9jYWxBdHRyaWJ1dGUuT1BUSU9OQUwiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iUkVRVUlSRUQiPjwhLS0gLS0+PC9BPjxIMz4KLVJFUVVJUkVEPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5SRVFVSVJFRDwvQj48L1BSRT4KLTxETD4KLTxERD5BIHJlcXVpcmVkIGF0dHJpYnV0ZS4gIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsQXR0cmlidXRlLmh0bWwjZ2V0VXNlKCkiPjxDT0RFPmdldFVzZSgpPC9DT0RFPjwvQT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hTG9jYWxBdHRyaWJ1dGUuUkVRVUlSRUQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldFVzZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRVc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+Z2V0VXNlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsQXR0cmlidXRlLmh0bWwjUFJPSElCSVRFRCI+PENPREU+UFJPSElCSVRFRDwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsQXR0cmlidXRlLmh0bWwjT1BUSU9OQUwiPjxDT0RFPk9QVElPTkFMPC9DT0RFPjwvQT4sIG9yIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxBdHRyaWJ1dGUuaHRtbCNSRVFVSVJFRCI+PENPREU+UkVRVUlSRUQ8L0NPREU+PC9BPi4KLSAoQWN0dWFsbHksIG5ldmVyIHJldHVybnMgUFJPSElCSVRFRCBiZWNhdXNlIHRoZSBzY2hlbWEgc3BlY2lmaWNhaW9uCi0gc3RhdGVzIHRoYXQgYSBwcm9oaWJpdGVkIGF0dHJpYnV0ZSBpcyBlcXVpdmFsZW50IHRvIG5vIGF0dHJpYnV0ZQotIGF0IGFsbCwgc28gYSBwcm9oaWJpdGVkIGF0dHJpYnV0ZSB3aWxsIG5ldmVyIGJlIHByZXNlbnQgaW4gdGhlIGNvbXBpbGVkCi0gbW9kZWwuKQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEVsZW1lbnQuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNjaGVtYUxvY2FsQXR0cmlidXRlLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsRWxlbWVudC5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxFbGVtZW50Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMmEyNTYuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxFbGVtZW50Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NiBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVNjaGVtYUxvY2FsRWxlbWVudCAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFMb2NhbEVsZW1lbnQsU2NoZW1hTG9jYWxFbGVtZW50IGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iU2NoZW1hTG9jYWxFbGVtZW50IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEF0dHJpYnV0ZS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTW9kZWxHcm91cC5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU2NoZW1hTG9jYWxFbGVtZW50Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFNjaGVtYUxvY2FsRWxlbWVudDwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwiPlNjaGVtYUZpZWxkPC9BPjwvREQ+Ci08L0RMPgotPERMPgotPERUPjxCPkFsbCBLbm93biBTdWJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5odG1sIj5TY2hlbWFHbG9iYWxFbGVtZW50PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBpbnRlcmZhY2UgPEI+U2NoZW1hTG9jYWxFbGVtZW50PC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCI+U2NoZW1hRmllbGQ8L0E+PC9ETD4KLQotPFA+Ci1SZXByZXNlbnRzIGEgbG9jYWwgb3IgZ2xvYmFsIGVsZW1lbnQgZGVmaW5pdGlvbi4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEVsZW1lbnQuaHRtbCNibG9ja0V4dGVuc2lvbigpIj5ibG9ja0V4dGVuc2lvbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgZXh0ZW5zaW9uIGlzIGJsb2NrZWQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEVsZW1lbnQuaHRtbCNibG9ja1Jlc3RyaWN0aW9uKCkiPmJsb2NrUmVzdHJpY3Rpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHJlc3RyaWN0aW9uIGlzIGJsb2NrZWQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEVsZW1lbnQuaHRtbCNibG9ja1N1YnN0aXR1dGlvbigpIj5ibG9ja1N1YnN0aXR1dGlvbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgZWxlbWVudCBzdWJzdGl0dXRpb24gaXMgYmxvY2tlZC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuaHRtbCI+U2NoZW1hSWRlbnRpdHlDb25zdHJhaW50PC9BPltdPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxFbGVtZW50Lmh0bWwjZ2V0SWRlbnRpdHlDb25zdHJhaW50cygpIj5nZXRJZGVudGl0eUNvbnN0cmFpbnRzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhbGwgdGhlIEtleSwgS2V5UmVmLCBhbmQgVW5pcXVlIGNvbnN0cmFpbnRzCi0gb24gdGhpcyBlbGVtZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxFbGVtZW50Lmh0bWwjaXNBYnN0cmFjdCgpIj5pc0Fic3RyYWN0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiB0aGlzIGVsZW1lbnQgaXMgcHJvaGliaXRlZCBpbiBjb250ZW50LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFGaWVsZCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sIj5TY2hlbWFGaWVsZDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwjZ2V0RGVmYXVsdFRleHQoKSI+Z2V0RGVmYXVsdFRleHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwjZ2V0RGVmYXVsdFZhbHVlKCkiPmdldERlZmF1bHRWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCNnZXRNYXhPY2N1cnMoKSI+Z2V0TWF4T2NjdXJzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sI2dldE1pbk9jY3VycygpIj5nZXRNaW5PY2N1cnM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwjZ2V0TmFtZSgpIj5nZXROYW1lPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sI2dldFR5cGUoKSI+Z2V0VHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCNpc0F0dHJpYnV0ZSgpIj5pc0F0dHJpYnV0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCNpc0RlZmF1bHQoKSI+aXNEZWZhdWx0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sI2lzRml4ZWQoKSI+aXNGaXhlZDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hRmllbGQuaHRtbCNpc05pbGxhYmxlKCkiPmlzTmlsbGFibGU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iYmxvY2tFeHRlbnNpb24oKSI+PCEtLSAtLT48L0E+PEgzPgotYmxvY2tFeHRlbnNpb248L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmJsb2NrRXh0ZW5zaW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiBleHRlbnNpb24gaXMgYmxvY2tlZC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iYmxvY2tSZXN0cmljdGlvbigpIj48IS0tIC0tPjwvQT48SDM+Ci1ibG9ja1Jlc3RyaWN0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5ibG9ja1Jlc3RyaWN0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiByZXN0cmljdGlvbiBpcyBibG9ja2VkLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJibG9ja1N1YnN0aXR1dGlvbigpIj48IS0tIC0tPjwvQT48SDM+Ci1ibG9ja1N1YnN0aXR1dGlvbjwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+YmxvY2tTdWJzdGl0dXRpb248L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIGVsZW1lbnQgc3Vic3RpdHV0aW9uIGlzIGJsb2NrZWQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzQWJzdHJhY3QoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNBYnN0cmFjdDwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNBYnN0cmFjdDwvQj4oKTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgdGhpcyBlbGVtZW50IGlzIHByb2hpYml0ZWQgaW4gY29udGVudC4gT25seQotIHNlbnNpYmxlIGlmIHRoaXMgaXMgdGhlIGhlYWQgb2YgYSBzdWJzdGl0dXRpb24gZ3JvdXA7Ci0gdGhlbiBvbmx5IHN1YnN0aXR1dGlvbiBncm91cCBtZW1iZXJzIGNhbiBhcHBlYXIuPFA+Ci0gCi0gQWx0aG91Z2ggbG9jYWwgZWxlbWVudHMgY2Fubm90IGJlIGFic3RyYWN0LCBpZiBhbiBlbGVtZW50IAotIHVzZSBpcyBhIHJlZiB0byBhIGdsb2JhbCBlbGVtZW50LCB0aGVuIHRoZSBmbGFnIGZyb20gdGhlIAotIGdsb2JhbCBlbGVtZW50IGlzIGNvcGllZCBpbiB0byB0aGUgbG9jYWwgZWxlbWVudCB3aGVyZSB0aGUgCi0gdXNlIG9jY3Vycy4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SWRlbnRpdHlDb25zdHJhaW50cygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJZGVudGl0eUNvbnN0cmFpbnRzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuaHRtbCI+U2NoZW1hSWRlbnRpdHlDb25zdHJhaW50PC9BPltdIDxCPmdldElkZW50aXR5Q29uc3RyYWludHM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGFsbCB0aGUgS2V5LCBLZXlSZWYsIGFuZCBVbmlxdWUgY29uc3RyYWludHMKLSBvbiB0aGlzIGVsZW1lbnQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEF0dHJpYnV0ZS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTW9kZWxHcm91cC5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU2NoZW1hTG9jYWxFbGVtZW50Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYU1vZGVsR3JvdXAuUmVmLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFNb2RlbEdyb3VwLlJlZi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDhlMTg1Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYU1vZGVsR3JvdXAuUmVmLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMTIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1OSBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVNjaGVtYU1vZGVsR3JvdXAuUmVmIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYU1vZGVsR3JvdXAuUmVmLFNjaGVtYU1vZGVsR3JvdXAuUmVmIGNsYXNzIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJTY2hlbWFNb2RlbEdyb3VwLlJlZiAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZi5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5SZWYuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNjaGVtYU1vZGVsR3JvdXAuUmVmLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudC5SZWYiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBTY2hlbWFNb2RlbEdyb3VwLlJlZjwvSDI+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+amF2YS5sYW5nLk9iamVjdDwvQT4KLSAgfAotICArLS08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCI+b3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQuUmVmPC9BPgotICAgICAgICB8Ci0gICAgICAgICstLTxCPm9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hTW9kZWxHcm91cC5SZWY8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5FbmNsb3NpbmcgY2xhc3M6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYU1vZGVsR3JvdXAuaHRtbCI+U2NoZW1hTW9kZWxHcm91cDwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIDxCPlNjaGVtYU1vZGVsR3JvdXAuUmVmPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIj5TY2hlbWFDb21wb25lbnQuUmVmPC9BPjwvREw+Ci0KLTxQPgotVXNlZCB0byBhbGxvdyBvbi1kZW1hbmQgbG9hZGluZyBvZiBtb2RlbCBncm91cHMuCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQ29tcG9uZW50LlJlZiI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPkZpZWxkcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIj5TY2hlbWFDb21wb25lbnQuUmVmPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sI19oYW5kbGUiPl9oYW5kbGU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFNb2RlbEdyb3VwLlJlZi5odG1sI1NjaGVtYU1vZGVsR3JvdXAuUmVmKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hTW9kZWxHcm91cCkiPlNjaGVtYU1vZGVsR3JvdXAuUmVmPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFNb2RlbEdyb3VwLmh0bWwiPlNjaGVtYU1vZGVsR3JvdXA8L0E+Jm5ic3A7bW9kZWxHcm91cCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFNb2RlbEdyb3VwLlJlZi5odG1sI1NjaGVtYU1vZGVsR3JvdXAuUmVmKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVN5c3RlbSwgamF2YS5sYW5nLlN0cmluZykiPlNjaGVtYU1vZGVsR3JvdXAuUmVmPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwiPlNjaGVtYVR5cGVTeXN0ZW08L0E+Jm5ic3A7c3lzdGVtLAotICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO2hhbmRsZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTW9kZWxHcm91cC5odG1sIj5TY2hlbWFNb2RlbEdyb3VwPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYU1vZGVsR3JvdXAuUmVmLmh0bWwjZ2V0KCkiPmdldDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFNb2RlbEdyb3VwLlJlZi5odG1sI2dldENvbXBvbmVudFR5cGUoKSI+Z2V0Q29tcG9uZW50VHlwZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQuUmVmIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIj5TY2hlbWFDb21wb25lbnQuUmVmPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sI2dldENvbXBvbmVudCgpIj5nZXRDb21wb25lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCNnZXRUeXBlU3lzdGVtKCkiPmdldFR5cGVTeXN0ZW08L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9IlNjaGVtYU1vZGVsR3JvdXAuUmVmKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hTW9kZWxHcm91cCkiPjwhLS0gLS0+PC9BPjxIMz4KLVNjaGVtYU1vZGVsR3JvdXAuUmVmPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+U2NoZW1hTW9kZWxHcm91cC5SZWY8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTW9kZWxHcm91cC5odG1sIj5TY2hlbWFNb2RlbEdyb3VwPC9BPiZuYnNwO21vZGVsR3JvdXApPC9QUkU+Ci08REw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTY2hlbWFNb2RlbEdyb3VwLlJlZihvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVTeXN0ZW0sIGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1TY2hlbWFNb2RlbEdyb3VwLlJlZjwvSDM+Ci08UFJFPgotcHVibGljIDxCPlNjaGVtYU1vZGVsR3JvdXAuUmVmPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVTeXN0ZW0uaHRtbCI+U2NoZW1hVHlwZVN5c3RlbTwvQT4mbmJzcDtzeXN0ZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO2hhbmRsZSk8L1BSRT4KLTxETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldENvbXBvbmVudFR5cGUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Q29tcG9uZW50VHlwZTwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGludCA8Qj5nZXRDb21wb25lbnRUeXBlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sI2dldENvbXBvbmVudFR5cGUoKSI+Z2V0Q29tcG9uZW50VHlwZTwvQT48L0NPREU+IGluIGNsYXNzIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIj5TY2hlbWFDb21wb25lbnQuUmVmPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYU1vZGVsR3JvdXAuaHRtbCI+U2NoZW1hTW9kZWxHcm91cDwvQT4gPEI+Z2V0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZi5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5SZWYuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNjaGVtYU1vZGVsR3JvdXAuUmVmLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudC5SZWYiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTW9kZWxHcm91cC5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTW9kZWxHcm91cC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWJmZGRkLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYU1vZGVsR3JvdXAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI5MiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ2OjU2IFBEVCAyMDAzIC0tPgotPFRJVExFPgotU2NoZW1hTW9kZWxHcm91cCAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFNb2RlbEdyb3VwLFNjaGVtYU1vZGVsR3JvdXAgaW50ZXJmYWNlIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJTY2hlbWFNb2RlbEdyb3VwIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEVsZW1lbnQuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTY2hlbWFNb2RlbEdyb3VwLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFNjaGVtYU1vZGVsR3JvdXA8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBpbnRlcmZhY2UgPEI+U2NoZW1hTW9kZWxHcm91cDwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sIj5TY2hlbWFDb21wb25lbnQ8L0E+PC9ETD4KLQotPFA+Ci1SZXByZXNlbnRzIGEgbW9kZWwgZ3JvdXAuCi0gPHA+Ci0gQSBtb2RlbCBncm91cCBpcyBhIHN5bnRhY3RpYyBjb25zdHJ1Y3QsIG5vdCBhIHBhcnQgb2YKLSB0aGUgbG9naWNhbCBtb2RlbC4gRm9yIGV4YW1wbGUsIHR5cGVzIGRlY2xhcmVkIHdpdGhpbiBhCi0gbW9kZWwgZ3JvdXAgYmVjb21lIGxvY2FsIHRvIHRoZSB0eXBlIHRoYXQgdXNlcyB0aGUgZ3JvdXAgLQotIHRoZXkncmUgbm90IGxvY2FsIHRvIHRoZSBtb2RlbCBncm91cCBpdHNlbGYuIFRoZXJlZm9yZSBpbgotIHRoZSBsb2dpY2FsIG1vZGVsIG9mIGEgc2NoZW1hIHR5cGUgc3lzdGVtLCBhIG1vZGVsIGdyb3VwCi0gZG9lc24ndCByZXByZXNlbnQgYW55dGhpbmcuIEl0cyBjb250ZW50cyBhcmUgbWVyZ2VkIGludG8KLSB0aGUgbG9naWNhbCBtb2RlbCBhdCBwYXJzZSB0aW1lLgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFNb2RlbEdyb3VwLlJlZi5odG1sIj5TY2hlbWFNb2RlbEdyb3VwLlJlZjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtVc2VkIHRvIGFsbG93IG9uLWRlbWFuZCBsb2FkaW5nIG9mIG1vZGVsIGdyb3Vwcy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjQVRUUklCVVRFIj5BVFRSSUJVVEU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI0FUVFJJQlVURV9HUk9VUCI+QVRUUklCVVRFX0dST1VQPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNFTEVNRU5UIj5FTEVNRU5UPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNJREVOVElUWV9DT05TVFJBSU5UIj5JREVOVElUWV9DT05TVFJBSU5UPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNNT0RFTF9HUk9VUCI+TU9ERUxfR1JPVVA8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI05PVEFUSU9OIj5OT1RBVElPTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjVFlQRSI+VFlQRTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYU1vZGVsR3JvdXAuaHRtbCNnZXRDb21wb25lbnRUeXBlKCkiPmdldENvbXBvbmVudFR5cGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIFNjaGVtYUNvbXBvbmVudC5HUk9VUC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYU1vZGVsR3JvdXAuaHRtbCNnZXROYW1lKCkiPmdldE5hbWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbmFtZSBvZiB0aGUgbW9kZWwgZ3JvdXAuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjZ2V0Q29tcG9uZW50UmVmKCkiPmdldENvbXBvbmVudFJlZjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjZ2V0VHlwZVN5c3RlbSgpIj5nZXRUeXBlU3lzdGVtPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldENvbXBvbmVudFR5cGUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Q29tcG9uZW50VHlwZTwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5nZXRDb21wb25lbnRUeXBlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBTY2hlbWFDb21wb25lbnQuR1JPVVAuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNnZXRDb21wb25lbnRUeXBlKCkiPmdldENvbXBvbmVudFR5cGU8L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE5hbWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TmFtZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4gPEI+Z2V0TmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlRoZSBuYW1lIG9mIHRoZSBtb2RlbCBncm91cC4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI2dldE5hbWUoKSI+Z2V0TmFtZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sIj5TY2hlbWFDb21wb25lbnQ8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUxvY2FsRWxlbWVudC5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNjaGVtYU1vZGVsR3JvdXAuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZDYzZDIuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg0NyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ2OjU2IFBEVCAyMDAzIC0tPgotPFRJVExFPgotU2NoZW1hUGFydGljbGUgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hUGFydGljbGUsU2NoZW1hUGFydGljbGUgaW50ZXJmYWNlIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJTY2hlbWFQYXJ0aWNsZSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTW9kZWxHcm91cC5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNjaGVtYVBhcnRpY2xlLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFNjaGVtYVBhcnRpY2xlPC9IMj4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlNjaGVtYVBhcnRpY2xlPC9CPjwvREw+Ci0KLTxQPgotUmVwcmVzZW50cyBhIFNjaGVtYSBwYXJ0aWNsZSBkZWZpbml0aW9uLgotIDxwPgotIFRoZSBjb250ZW50IG1vZGVsIG9mIGEgY29tcGxleCB0eXBlIGlzIGEgdHJlZSBvZiBwYXJ0aWNsZXMuICBFYWNoCi0gcGFydGljbGUgaXMgZWl0aGVyIGFuIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNBTEwiPjxDT0RFPkFMTDwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjQ0hPSUNFIj48Q09ERT5DSE9JQ0U8L0NPREU+PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI1NFUVVFTkNFIj48Q09ERT5TRVFVRU5DRTwvQ09ERT48L0E+LAotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNFTEVNRU5UIj48Q09ERT5FTEVNRU5UPC9DT0RFPjwvQT4sIG9yIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNXSUxEQ0FSRCI+PENPREU+V0lMRENBUkQ8L0NPREU+PC9BPi4KLSBBbGwsIGNob2ljZSBhbmQgc2VxdWVuY2UgcGFydGljbGVzIGFyZSBncm91cHMgdGhhdCBjYW4gaGF2ZSBjaGlsZAotIHBhcnRpY2xlczsgZWxlbWVudHMgYW5kIHdpbGRjYXJkcyBhcmUgYWx3YXlzIGxlYXZlcyBvZiB0aGUgcGFydGljbGUgdHJlZS4KLSA8cD4KLSBUaGUgdHJlZSBvZiBwYXJ0aWNsZXMgYXZhaWxhYmxlIG9uIGEgc2NoZW1hIHR5cGUgaXMgbWluaW1pemVkLCB0aGF0Ci0gaXMsIGl0IGFscmVhZHkgaGFzIHJlbW92ZWQgInBvaW50bGVzcyIgcGFydGljbGVzIHN1Y2ggYXMgZW1wdHkKLSBzZXF1ZW5jZXMsIG5vbnJlcGVhdGluZyBzZXF1ZW5jZXMgd2l0aCBvbmx5IG9uZSBpdGVtLCBhbmQgc28gb24uCi0gKDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jY29zLXBhcnRpY2xlLXJlc3RyaWN0Ij5Qb2ludGxlc3MgcGFydGljbGVzPC9hPgotIGFyZSBkZWZpbmVkIHByZWNpc2VseSBpbiB0aGUgWE1MIFNjaGVtYSBzcGVjaWZpY2F0aW9uLikKLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldENvbnRlbnRNb2RlbCgpIj48Q09ERT5TY2hlbWFUeXBlLmdldENvbnRlbnRNb2RlbCgpPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI0FMTCI+QUxMPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0FuIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZGVjbGFyZS1jb250ZW50TW9kZWwiPnhzOmFsbDwvYT4gZ3JvdXAuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjQ0hPSUNFIj5DSE9JQ0U8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2RlY2xhcmUtY29udGVudE1vZGVsIj54czpjaG9pY2U8L2E+IGdyb3VwLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI0VMRU1FTlQiPkVMRU1FTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QW4gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNkZWNsYXJlLWVsZW1lbnQiPnhzOmVsZW1lbnQ8L2E+IHBhcnRpY2xlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI0xBWCI+TEFYPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jV2lsZGNhcmRfZGV0YWlscyI+TGF4IHdpbGRjYXJkPC9hPiBwcm9jZXNzaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI1NFUVVFTkNFIj5TRVFVRU5DRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZGVjbGFyZS1jb250ZW50TW9kZWwiPnhzOnNlcXVlbmNlPC9hPiBncm91cC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNTS0lQIj5TS0lQPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jV2lsZGNhcmRfZGV0YWlscyI+U2tpcCB3aWxkY2FyZDwvYT4gcHJvY2Vzc2luZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNTVFJJQ1QiPlNUUklDVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI1dpbGRjYXJkX2RldGFpbHMiPlN0cmljdCB3aWxkY2FyZDwvYT4gcHJvY2Vzc2luZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNXSUxEQ0FSRCI+V0lMRENBUkQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QW4gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNkZWNsYXJlLW9wZW5uZXNzIj54czphbnk8L2E+IHBhcnRpY2xlLAotIGFsc28ga25vd24gYXMgYW4gZWxlbWVudCB3aWxkY2FyZC48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj5RTmFtZVNldDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI2FjY2VwdGVkU3RhcnROYW1lcygpIj5hY2NlcHRlZFN0YXJ0TmFtZXM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBRTmFtZVNldCBvZiBlbGVtZW50IG5hbWVzIHRoYXQgY2FuIGJlCi0gYWNjZXB0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIHBhcnRpY2xlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNjYW5TdGFydFdpdGhFbGVtZW50KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5jYW5TdGFydFdpdGhFbGVtZW50PC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO25hbWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoaXMgcGFydGljbGUgY2FuIHN0YXJ0IHdpdGggdGhlIGdpdmVuIGVsZW1lbnQKLSAodGFraW5nIGludG8gYWNjb3VudCB0aGUgc3RydWN0dXJlIG9mIGFsbCBjaGlsZCBwYXJ0aWNsZXMKLSBvZiBjb3Vyc2UpLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI2NvdW50T2ZQYXJ0aWNsZUNoaWxkKCkiPmNvdW50T2ZQYXJ0aWNsZUNoaWxkPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIG51bWJlciBvZiBjaGlsZHJlbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjZ2V0RGVmYXVsdFRleHQoKSI+Z2V0RGVmYXVsdFRleHQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtGb3IgZWxlbWVudHMgb25seTogcmV0dXJucyB0aGUgZGVmYXVsdCAob3IgZml4ZWQpIHRleHQgdmFsdWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNnZXREZWZhdWx0VmFsdWUoKSI+Z2V0RGVmYXVsdFZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Rm9yIGVsZW1lbnRzIG9ubHk6IHJldHVybnMgdGhlIGRlZmF1bHQgKG9yIGZpeGVkKSBzdHJvbmdseS10eXBlZCB2YWx1ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI2dldEludE1heE9jY3VycygpIj5nZXRJbnRNYXhPY2N1cnM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtYXhPY2N1cnMgdmFsdWUsIHBlZ2dlZCB0byBhIDMyLWJpdCBpbnQgZm9yCi0gY29udmVuaWVuY2Ugb2YgYSB2YWxpZGF0aW5nIHN0YXRlIG1hY2hpbmUgdGhhdCBkb2Vzbid0IGNvdW50Ci0gaGlnaGVyIHRoYW4gTUFYX0lOVCBhbnl3YXkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjZ2V0SW50TWluT2NjdXJzKCkiPmdldEludE1pbk9jY3VyczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG1pbk9jY3VycyB2YWx1ZSwgcGVnZ2VkIHRvIGEgMzItYml0IGludCBmb3IKLSBjb252ZW5pZW5jZSBvZiBhIHZhbGlkYXRpbmcgc3RhdGUgbWFjaGluZSB0aGF0IGRvZXNuJ3QgY291bnQKLSBoaWdoZXIgdGhhbiBNQVhfSU5UIGFueXdheS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPkJpZ0ludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNnZXRNYXhPY2N1cnMoKSI+Z2V0TWF4T2NjdXJzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWF4T2NjdXJzIHZhbHVlIGZvciB0aGlzIHBhcnRpY2xlLCBvciBudWxsIGlmIGl0Ci0gaXMgdW5ib3VuZGVkLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCI+QmlnSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI2dldE1pbk9jY3VycygpIj5nZXRNaW5PY2N1cnM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBtaW5PY2N1cnMgdmFsdWUgZm9yIHRoaXMgcGFydGljbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI2dldE5hbWUoKSI+Z2V0TmFtZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0ZvciBlbGVtZW50cyBvbmx5OiB0aGUgUU5hbWUgZm9yIHRoZSBlbGVtZW50IHVzZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sIj5TY2hlbWFQYXJ0aWNsZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI2dldFBhcnRpY2xlQ2hpbGQoaW50KSI+Z2V0UGFydGljbGVDaGlsZDwvQT48L0I+KGludCZuYnNwO2kpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBbm90aGVyIHdheSB0byBhY2Nlc3MgdGhlIHBhcnRpY2xlIGNoaWxkcmVuLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwiPlNjaGVtYVBhcnRpY2xlPC9BPltdPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNnZXRQYXJ0aWNsZUNoaWxkcmVuKCkiPmdldFBhcnRpY2xlQ2hpbGRyZW48L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBcHBsaWVzIHRvIHNlcXVlbmNlLCBjaG9pY2UsIGFuZCBhbGwgcGFydGljbGVzIG9ubHk6IHJldHVybnMgYW4gYXJyYXkKLSBvZiBhbGwgdGhlIHBhcnRpY2xlIGNoaWxkcmVuIGluIG9yZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI2dldFBhcnRpY2xlVHlwZSgpIj5nZXRQYXJ0aWNsZVR5cGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBwYXJ0aWNsZSB0eXBlICg8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjQUxMIj48Q09ERT5BTEw8L0NPREU+PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI0NIT0lDRSI+PENPREU+Q0hPSUNFPC9DT0RFPjwvQT4sCi0gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI1NFUVVFTkNFIj48Q09ERT5TRVFVRU5DRTwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjRUxFTUVOVCI+PENPREU+RUxFTUVOVDwvQ09ERT48L0E+LCBvciA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjV0lMRENBUkQiPjxDT0RFPldJTERDQVJEPC9DT0RFPjwvQT4pLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI2dldFR5cGUoKSI+Z2V0VHlwZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0ZvciBlbGVtZW50cyBvbmx5OiByZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBlbGVtZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI2dldFdpbGRjYXJkUHJvY2VzcygpIj5nZXRXaWxkY2FyZFByb2Nlc3M8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtGb3Igd2lsZGNhcmRzLCByZXR1cm5zIHRoZSBwcm9jZXNzaW5nIGNvZGUgKDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNTVFJJQ1QiPjxDT0RFPlNUUklDVDwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjTEFYIj48Q09ERT5MQVg8L0NPREU+PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI1NLSVAiPjxDT0RFPlNLSVA8L0NPREU+PC9BPikuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNnZXRXaWxkY2FyZFNldCgpIj5nZXRXaWxkY2FyZFNldDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0ZvciB3aWxkY2FyZHMsIHJldHVybnMgYSBRTmFtZVNldCByZXByZXNlbnRpbmcgdGhlIHdpbGRjYXJkLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNpc0RlZmF1bHQoKSI+aXNEZWZhdWx0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Rm9yIGVsZW1lbnRzIG9ubHk6IFRydWUgaWYgaGFzIGRlZmF1bHQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI2lzRml4ZWQoKSI+aXNGaXhlZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0ZvciBlbGVtZW50cyBvbmx5OiB0cnVlIGlmIGlzIGZpeGVkIHZhbHVlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNpc05pbGxhYmxlKCkiPmlzTmlsbGFibGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtGb3IgZWxlbWVudHMgb25seTogdHJ1ZSBpZiBuaWxsYWJsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjaXNTaW5nbGV0b24oKSI+aXNTaW5nbGV0b248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtPbmUgaWYgbWluT2NjdXJzID09IG1heE9jY3VycyA9PSAxLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNpc1NraXBwYWJsZSgpIj5pc1NraXBwYWJsZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgdGhpcyBwYXJ0aWNsZSBjYW4gYmUgc2tpcHBlZCAodGFraW5nIGludG8gYWNjb3VudAotIGJvdGggdGhlIG1pbk9jdXJzIGFzIHdlbGwgYXMgdGhlIHN0cnVjdHVyZSBvZiBhbGwgdGhlCi0gY2hpbGQgcGFydGljbGVzKTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJBTEwiPjwhLS0gLS0+PC9BPjxIMz4KLUFMTDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+QUxMPC9CPjwvUFJFPgotPERMPgotPEREPkFuIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZGVjbGFyZS1jb250ZW50TW9kZWwiPnhzOmFsbDwvYT4gZ3JvdXAuCi0gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNnZXRQYXJ0aWNsZVR5cGUoKSI+PENPREU+Z2V0UGFydGljbGVUeXBlKCk8L0NPREU+PC9BPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQYXJ0aWNsZS5BTEwiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQ0hPSUNFIj48IS0tIC0tPjwvQT48SDM+Ci1DSE9JQ0U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkNIT0lDRTwvQj48L1BSRT4KLTxETD4KLTxERD5BIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZGVjbGFyZS1jb250ZW50TW9kZWwiPnhzOmNob2ljZTwvYT4gZ3JvdXAuCi0gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNnZXRQYXJ0aWNsZVR5cGUoKSI+PENPREU+Z2V0UGFydGljbGVUeXBlKCk8L0NPREU+PC9BPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQYXJ0aWNsZS5DSE9JQ0UiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU0VRVUVOQ0UiPjwhLS0gLS0+PC9BPjxIMz4KLVNFUVVFTkNFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5TRVFVRU5DRTwvQj48L1BSRT4KLTxETD4KLTxERD5BIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jZGVjbGFyZS1jb250ZW50TW9kZWwiPnhzOnNlcXVlbmNlPC9hPiBncm91cC4KLSBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI2dldFBhcnRpY2xlVHlwZSgpIj48Q09ERT5nZXRQYXJ0aWNsZVR5cGUoKTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVBhcnRpY2xlLlNFUVVFTkNFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkVMRU1FTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUVMRU1FTlQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkVMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+QW4gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNkZWNsYXJlLWVsZW1lbnQiPnhzOmVsZW1lbnQ8L2E+IHBhcnRpY2xlLgotIFRoaXMgY29kZSBtZWFucyB0aGUgcGFydGljbGUgY2FuIGJlIGNvZXJjZWQgdG8gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEVsZW1lbnQuaHRtbCI+PENPREU+U2NoZW1hTG9jYWxFbGVtZW50PC9DT0RFPjwvQT4uCi0gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNnZXRQYXJ0aWNsZVR5cGUoKSI+PENPREU+Z2V0UGFydGljbGVUeXBlKCk8L0NPREU+PC9BPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQYXJ0aWNsZS5FTEVNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IldJTERDQVJEIj48IS0tIC0tPjwvQT48SDM+Ci1XSUxEQ0FSRDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+V0lMRENBUkQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+QW4gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNkZWNsYXJlLW9wZW5uZXNzIj54czphbnk8L2E+IHBhcnRpY2xlLAotIGFsc28ga25vd24gYXMgYW4gZWxlbWVudCB3aWxkY2FyZC4KLSBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI2dldFBhcnRpY2xlVHlwZSgpIj48Q09ERT5nZXRQYXJ0aWNsZVR5cGUoKTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVBhcnRpY2xlLldJTERDQVJEIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNUUklDVCI+PCEtLSAtLT48L0E+PEgzPgotU1RSSUNUPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5TVFJJQ1Q8L0I+PC9QUkU+Ci08REw+Ci08REQ+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNXaWxkY2FyZF9kZXRhaWxzIj5TdHJpY3Qgd2lsZGNhcmQ8L2E+IHByb2Nlc3NpbmcuIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjZ2V0V2lsZGNhcmRQcm9jZXNzKCkiPjxDT0RFPmdldFdpbGRjYXJkUHJvY2VzcygpPC9DT0RFPjwvQT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQYXJ0aWNsZS5TVFJJQ1QiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTEFYIj48IS0tIC0tPjwvQT48SDM+Ci1MQVg8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkxBWDwvQj48L1BSRT4KLTxETD4KLTxERD48YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI1dpbGRjYXJkX2RldGFpbHMiPkxheCB3aWxkY2FyZDwvYT4gcHJvY2Vzc2luZy4gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNnZXRXaWxkY2FyZFByb2Nlc3MoKSI+PENPREU+Z2V0V2lsZGNhcmRQcm9jZXNzKCk8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVBhcnRpY2xlLkxBWCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTS0lQIj48IS0tIC0tPjwvQT48SDM+Ci1TS0lQPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5TS0lQPC9CPjwvUFJFPgotPERMPgotPEREPjxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jV2lsZGNhcmRfZGV0YWlscyI+U2tpcCB3aWxkY2FyZDwvYT4gcHJvY2Vzc2luZy4gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNnZXRXaWxkY2FyZFByb2Nlc3MoKSI+PENPREU+Z2V0V2lsZGNhcmRQcm9jZXNzKCk8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVBhcnRpY2xlLlNLSVAiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldFBhcnRpY2xlVHlwZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRQYXJ0aWNsZVR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+Z2V0UGFydGljbGVUeXBlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgcGFydGljbGUgdHlwZSAoPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI0FMTCI+PENPREU+QUxMPC9DT0RFPjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNDSE9JQ0UiPjxDT0RFPkNIT0lDRTwvQ09ERT48L0E+LAotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNTRVFVRU5DRSI+PENPREU+U0VRVUVOQ0U8L0NPREU+PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI0VMRU1FTlQiPjxDT0RFPkVMRU1FTlQ8L0NPREU+PC9BPiwgb3IgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI1dJTERDQVJEIj48Q09ERT5XSUxEQ0FSRDwvQ09ERT48L0E+KS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TWluT2NjdXJzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE1pbk9jY3VyczwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIj5CaWdJbnRlZ2VyPC9BPiA8Qj5nZXRNaW5PY2N1cnM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtaW5PY2N1cnMgdmFsdWUgZm9yIHRoaXMgcGFydGljbGUuCi0gSWYgaXQncyBub3Qgc3BlY2lmaWVkIGV4cGxpY2l0bHksIHRoaXMgcmV0dXJucyBCaWdJbnRlZ2VyLk9ORS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TWF4T2NjdXJzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE1heE9jY3VyczwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIj5CaWdJbnRlZ2VyPC9BPiA8Qj5nZXRNYXhPY2N1cnM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtYXhPY2N1cnMgdmFsdWUgZm9yIHRoaXMgcGFydGljbGUsIG9yIG51bGwgaWYgaXQKLSBpcyB1bmJvdW5kZWQuCi0gSWYgaXQncyBub3Qgc3BlY2lmaWVkIGV4cGxpY2l0bHksIHRoaXMgcmV0dXJucyBCaWdJbnRlZ2VyLk9ORS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SW50TWluT2NjdXJzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEludE1pbk9jY3VyczwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5nZXRJbnRNaW5PY2N1cnM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtaW5PY2N1cnMgdmFsdWUsIHBlZ2dlZCB0byBhIDMyLWJpdCBpbnQgZm9yCi0gY29udmVuaWVuY2Ugb2YgYSB2YWxpZGF0aW5nIHN0YXRlIG1hY2hpbmUgdGhhdCBkb2Vzbid0IGNvdW50Ci0gaGlnaGVyIHRoYW4gTUFYX0lOVCBhbnl3YXkuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEludE1heE9jY3VycygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJbnRNYXhPY2N1cnM8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+Z2V0SW50TWF4T2NjdXJzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbWF4T2NjdXJzIHZhbHVlLCBwZWdnZWQgdG8gYSAzMi1iaXQgaW50IGZvcgotIGNvbnZlbmllbmNlIG9mIGEgdmFsaWRhdGluZyBzdGF0ZSBtYWNoaW5lIHRoYXQgZG9lc24ndCBjb3VudAotIGhpZ2hlciB0aGFuIE1BWF9JTlQgYW55d2F5LiBVbmJvdW5kZWQgaXMgZ2l2ZW4gYXMgTUFYX0lOVC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNTaW5nbGV0b24oKSI+PCEtLSAtLT48L0E+PEgzPgotaXNTaW5nbGV0b248L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzU2luZ2xldG9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+T25lIGlmIG1pbk9jY3VycyA9PSBtYXhPY2N1cnMgPT0gMS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0UGFydGljbGVDaGlsZHJlbigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRQYXJ0aWNsZUNoaWxkcmVuPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sIj5TY2hlbWFQYXJ0aWNsZTwvQT5bXSA8Qj5nZXRQYXJ0aWNsZUNoaWxkcmVuPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+QXBwbGllcyB0byBzZXF1ZW5jZSwgY2hvaWNlLCBhbmQgYWxsIHBhcnRpY2xlcyBvbmx5OiByZXR1cm5zIGFuIGFycmF5Ci0gb2YgYWxsIHRoZSBwYXJ0aWNsZSBjaGlsZHJlbiBpbiBvcmRlci4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0UGFydGljbGVDaGlsZChpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRQYXJ0aWNsZUNoaWxkPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sIj5TY2hlbWFQYXJ0aWNsZTwvQT4gPEI+Z2V0UGFydGljbGVDaGlsZDwvQj4oaW50Jm5ic3A7aSk8L1BSRT4KLTxETD4KLTxERD5Bbm90aGVyIHdheSB0byBhY2Nlc3MgdGhlIHBhcnRpY2xlIGNoaWxkcmVuLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjb3VudE9mUGFydGljbGVDaGlsZCgpIj48IS0tIC0tPjwvQT48SDM+Ci1jb3VudE9mUGFydGljbGVDaGlsZDwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5jb3VudE9mUGFydGljbGVDaGlsZDwvQj4oKTwvUFJFPgotPERMPgotPEREPlRoZSBudW1iZXIgb2YgY2hpbGRyZW4uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNhblN0YXJ0V2l0aEVsZW1lbnQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjwhLS0gLS0+PC9BPjxIMz4KLWNhblN0YXJ0V2l0aEVsZW1lbnQ8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmNhblN0YXJ0V2l0aEVsZW1lbnQ8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgdGhpcyBwYXJ0aWNsZSBjYW4gc3RhcnQgd2l0aCB0aGUgZ2l2ZW4gZWxlbWVudAotICh0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdHJ1Y3R1cmUgb2YgYWxsIGNoaWxkIHBhcnRpY2xlcwotIG9mIGNvdXJzZSkuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImFjY2VwdGVkU3RhcnROYW1lcygpIj48IS0tIC0tPjwvQT48SDM+Ci1hY2NlcHRlZFN0YXJ0TmFtZXM8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwiPlFOYW1lU2V0PC9BPiA8Qj5hY2NlcHRlZFN0YXJ0TmFtZXM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBRTmFtZVNldCBvZiBlbGVtZW50IG5hbWVzIHRoYXQgY2FuIGJlCi0gYWNjZXB0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIHBhcnRpY2xlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc1NraXBwYWJsZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc1NraXBwYWJsZTwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNTa2lwcGFibGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoaXMgcGFydGljbGUgY2FuIGJlIHNraXBwZWQgKHRha2luZyBpbnRvIGFjY291bnQKLSBib3RoIHRoZSBtaW5PY3VycyBhcyB3ZWxsIGFzIHRoZSBzdHJ1Y3R1cmUgb2YgYWxsIHRoZQotIGNoaWxkIHBhcnRpY2xlcykKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0V2lsZGNhcmRTZXQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0V2lsZGNhcmRTZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwiPlFOYW1lU2V0PC9BPiA8Qj5nZXRXaWxkY2FyZFNldDwvQj4oKTwvUFJFPgotPERMPgotPEREPkZvciB3aWxkY2FyZHMsIHJldHVybnMgYSBRTmFtZVNldCByZXByZXNlbnRpbmcgdGhlIHdpbGRjYXJkLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRXaWxkY2FyZFByb2Nlc3MoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0V2lsZGNhcmRQcm9jZXNzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldFdpbGRjYXJkUHJvY2VzczwvQj4oKTwvUFJFPgotPERMPgotPEREPkZvciB3aWxkY2FyZHMsIHJldHVybnMgdGhlIHByb2Nlc3NpbmcgY29kZSAoPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sI1NUUklDVCI+PENPREU+U1RSSUNUPC9DT0RFPjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCNMQVgiPjxDT0RFPkxBWDwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwjU0tJUCI+PENPREU+U0tJUDwvQ09ERT48L0E+KS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TmFtZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXROYW1lPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiA8Qj5nZXROYW1lPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+Rm9yIGVsZW1lbnRzIG9ubHk6IHRoZSBRTmFtZSBmb3IgdGhlIGVsZW1lbnQgdXNlLgotIE1heSBiZSB1bnF1YWxpZmllZCB2ZXJzaW9uIG9mIHJlZmVyZW5jZWQgZWxlbWVudCdzIG5hbWUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFR5cGUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0VHlwZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPiA8Qj5nZXRUeXBlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+Rm9yIGVsZW1lbnRzIG9ubHk6IHJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGVsZW1lbnQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzTmlsbGFibGUoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNOaWxsYWJsZTwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNOaWxsYWJsZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkZvciBlbGVtZW50cyBvbmx5OiB0cnVlIGlmIG5pbGxhYmxlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXREZWZhdWx0VGV4dCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXREZWZhdWx0VGV4dDwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+Z2V0RGVmYXVsdFRleHQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5Gb3IgZWxlbWVudHMgb25seTogcmV0dXJucyB0aGUgZGVmYXVsdCAob3IgZml4ZWQpIHRleHQgdmFsdWUKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RGVmYXVsdFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldERlZmF1bHRWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiA8Qj5nZXREZWZhdWx0VmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5Gb3IgZWxlbWVudHMgb25seTogcmV0dXJucyB0aGUgZGVmYXVsdCAob3IgZml4ZWQpIHN0cm9uZ2x5LXR5cGVkIHZhbHVlCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzRGVmYXVsdCgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc0RlZmF1bHQ8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzRGVmYXVsdDwvQj4oKTwvUFJFPgotPERMPgotPEREPkZvciBlbGVtZW50cyBvbmx5OiBUcnVlIGlmIGhhcyBkZWZhdWx0LiBJZiBpc0ZpeGVkLCB0aGVuIGlzRGVmYXVsdCBpcyBhbHdheXMgdHJ1ZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNGaXhlZCgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc0ZpeGVkPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5pc0ZpeGVkPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+Rm9yIGVsZW1lbnRzIG9ubHk6IHRydWUgaWYgaXMgZml4ZWQgdmFsdWUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFNb2RlbEdyb3VwLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU2NoZW1hUGFydGljbGUuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViNWViNjcuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNjcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NiBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVNjaGVtYVByb3BlcnR5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVByb3BlcnR5LFNjaGVtYVByb3BlcnR5IGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iU2NoZW1hUHJvcGVydHkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFTdHJpbmdFbnVtRW50cnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNjaGVtYVByb3BlcnR5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFNjaGVtYVByb3BlcnR5PC9IMj4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlNjaGVtYVByb3BlcnR5PC9CPjwvREw+Ci0KLTxQPgotUmVwcmVzZW50cyBhIHN1bW1hcnkgb2Ygc2ltaWxhciBTY2hlbWFGaWVsZHMgaW4gYSBjb21wbGV4IHR5cGUuCi0gPHA+Ci0gSW4gYSBzY2hlbWEgdHlwZSwgZXZlcnkgZWxlbWVudCB3aXRoIHRoZSBzYW1lIG5hbWUgbXVzdCBoYXZlIHRoZQotIHNhbWUgdHlwZS4gIFRoZXJlZm9yZSwgYWxsIHRvZ2V0aGVyLCBlbGVtZW50cyB3aXRoIHRoZSBzYW1lIG5hbWUKLSBmb3JtIGEgY29oZXJlbnQgY29sbGVjdGlvbiBvZiBzaW1pbGFyIGVsZW1lbnRzLiAgU2ltaWxhcmx5LCBhdHRyaWJ1dGVzCi0gY2FuIG9ubHkgYmUgZGVmaW5lZCBvbmNlLCBzbyBlYWNoIGF0dHJpYnV0ZSBvYnZpb3VzbHkgaXMgYSBjb2hlcmVudAotIGdyb3VwIG9uIGl0cyBvd24uCi0gPHA+Ci0gQSBTY2hlbWFQcm9wZXJ0eSByZXByZXNlbnRzIGEgc3VtbWFyeSBvZiB0aGUgdGhlIGVsZW1lbnRzIHdpdGggYQotIGdpdmVuIG5hbWUgb3IgdGhlIGF0dHJpYnV0ZSB3aXRoIGEgZ2l2ZW4gbmFtZS4gIEl0IHJlcHJlc2VudHMgdGhlCi0gc3VtbWFyeSBjYXJkaW5hbGl0eSBvZiB0aGUgZmllbGRzLCB0aGUgc3VtbWFyeSBkZWZhdWx0IGFuZCBmaXhlZAotIHZhbHVlcywgYW5kIHNvIG9uLiAgV2hlbiBpbmZlcnJpbmcgaW5mb3JtYXRpb24gYWJvdXQgYW4gZWxlbWVudAotIG9yIGF0dHJpYnV0ZSwgaXQgaXMgdHlwaWNhbGx5IGVhc2llciB0byBjb25zdWx0IHRoZW4gU2NoZW1hUHJvcGVydHkKLSB0aGFuIHRvIGh1bnQgZm9yIHRoZSBleGFjdCBTY2hlbWFGaWVsZCBpbiB0aGUgcGFydGljbGUgdHJlZSBvcgotIGF0dHJpYnV0ZSBtb2RlbC4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldFByb3BlcnRpZXMoKSI+PENPREU+U2NoZW1hVHlwZS5nZXRQcm9wZXJ0aWVzKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRBdHRyaWJ1dGVQcm9wZXJ0aWVzKCkiPjxDT0RFPlNjaGVtYVR5cGUuZ2V0QXR0cmlidXRlUHJvcGVydGllcygpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0RWxlbWVudFByb3BlcnRpZXMoKSI+PENPREU+U2NoZW1hVHlwZS5nZXRFbGVtZW50UHJvcGVydGllcygpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0QXR0cmlidXRlUHJvcGVydHkoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxDT0RFPlNjaGVtYVR5cGUuZ2V0QXR0cmlidXRlUHJvcGVydHkoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRFbGVtZW50UHJvcGVydHkoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxDT0RFPlNjaGVtYVR5cGUuZ2V0RWxlbWVudFByb3BlcnR5KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0NPTlNJU1RFTlRMWSI+Q09OU0lTVEVOVExZPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0FwcGxpZXMgdG8gYWxsIGVsZW1lbnRzIGZvciB0aGlzIHByb3BlcnR5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfQklHX0RFQ0lNQUwiPkpBVkFfQklHX0RFQ0lNQUw8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+PENPREU+QmlnRGVjaW1hbDwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfQklHX0lOVEVHRVIiPkpBVkFfQklHX0lOVEVHRVI8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCI+PENPREU+QmlnSW50ZWdlcjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfQk9PTEVBTiI+SkFWQV9CT09MRUFOPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgSmF2YSBib29sZWFuLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfQllURSI+SkFWQV9CWVRFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgSmF2YSBieXRlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfQllURV9BUlJBWSI+SkFWQV9CWVRFX0FSUkFZPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgYnl0ZVtdLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfQ0FMRU5EQVIiPkpBVkFfQ0FMRU5EQVI8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjSkFWQV9EQVRFIj5KQVZBX0RBVEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+PENPREU+RGF0ZTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfRE9VQkxFIj5KQVZBX0RPVUJMRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIEphdmEgZG91YmxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfRU5VTSI+SkFWQV9FTlVNPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgZ2VuZXJhdGVkIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sIj48Q09ERT5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlPC9DT0RFPjwvQT4gc3ViY2xhc3MuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjSkFWQV9GSVJTVF9QUklNSVRJVkUiPkpBVkFfRklSU1RfUFJJTUlUSVZFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0phdmEgcHJpbWl0aXZlIHR5cGUgY29kZXMgKGZvciBub24tbnVsbGFibGUgSmF2YSB0eXBlcykgYXJlIGJldHdlZW4gSkFWQV9GSVJTVF9QUklNSVRJVkUgYW5kIEpBVkFfTEFTVF9QUklNSVRJVkUsIGluY2x1c2l2ZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNKQVZBX0ZMT0FUIj5KQVZBX0ZMT0FUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgSmF2YSBmbG9hdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNKQVZBX0dEQVRFIj5KQVZBX0dEQVRFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfR0RVUkFUSU9OIj5KQVZBX0dEVVJBVElPTjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwiPjxDT0RFPkdEdXJhdGlvbjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfSU5UIj5KQVZBX0lOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIEphdmEgaW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfTEFTVF9QUklNSVRJVkUiPkpBVkFfTEFTVF9QUklNSVRJVkU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SmF2YSBwcmltaXRpdmUgdHlwZSBjb2RlcyAoZm9yIG5vbi1udWxsYWJsZSBKYXZhIHR5cGVzKSBhcmUgYmV0d2VlbiBKQVZBX0ZJUlNUX1BSSU1JVElWRSBhbmQgSkFWQV9MQVNUX1BSSU1JVElWRSwgaW5jbHVzaXZlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfTElTVCI+SkFWQV9MSVNUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPjxDT0RFPkxpc3Q8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNKQVZBX0xPTkciPkpBVkFfTE9ORzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIEphdmEgbG9uZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNKQVZBX09CSkVDVCI+SkFWQV9PQkpFQ1Q8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj48Q09ERT5PYmplY3Q8L0NPREU+PC9BPiwgdXNlZCBmb3Igc29tZSBzaW1wbGUgdHlwZSB1bmlvbnMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjSkFWQV9RTkFNRSI+SkFWQV9RTkFNRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj48Q09ERT5RTmFtZTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfU0hPUlQiPkpBVkFfU0hPUlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSBKYXZhIHNob3J0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0pBVkFfU1RSSU5HIj5KQVZBX1NUUklORzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPjxDT0RFPlN0cmluZzwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI05FVkVSIj5ORVZFUjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBcHBsaWVzIHRvIG5vIGVsZW1lbnRzIGZvciB0aGlzIHByb3BlcnR5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI1ZBUklBQkxFIj5WQVJJQUJMRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBcHBsaWVzIHRvIHNvbWUsIGJ1dCBub3Qgb3RoZXIgZWxlbWVudHMgZm9yIHRoaXMgcHJvcGVydHkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjWE1MX09CSkVDVCI+WE1MX09CSkVDVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBbiBYTUwgQmVhbiB0eXBlIHRoYXQgaW5oZXJpdHMgZnJvbSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj48Q09ERT5YbWxPYmplY3Q8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPltdPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNhY2NlcHRlZE5hbWVzKCkiPmFjY2VwdGVkTmFtZXM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtGb3IgZWxlbWVudCBwcm9wZXJ0aWVzIHRoZSBzZXQgb2YgbmFtZXMgdGhhdCBhcmUgYWNjZXB0ZWQgZm9yIHRoaXMgcHJvcGVydHkKLSBpZiB0aGlzIGVsZW1lbnQgaXMgdGhlIGhlYWQgb2YgYSBzdWJzdGl0dXRpb24gZ3JvdXAuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2V4dGVuZHNKYXZhQXJyYXkoKSI+ZXh0ZW5kc0phdmFBcnJheTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgdGhlcmUgaXMgYSBKYXZhIGdldHRlciB0aGF0IHJldHVybnMgYW4gYXJyYXkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2V4dGVuZHNKYXZhT3B0aW9uKCkiPmV4dGVuZHNKYXZhT3B0aW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiB0aGVyZSBpcyBhbiBKYXZhIGlzU2V0IG1ldGhvZCB0aGF0IHRlc3RzIGZvciBwcmVzZW5jZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjZXh0ZW5kc0phdmFTaW5nbGV0b24oKSI+ZXh0ZW5kc0phdmFTaW5nbGV0b248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoZXJlIGlzIGEgSmF2YSBnZXR0ZXIgdGhhdCByZXR1cm5zIGEgc2luZ2xldG9uLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2dldENvbnRhaW5lclR5cGUoKSI+Z2V0Q29udGFpbmVyVHlwZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSB0eXBlIHdpdGhpbiB3aGljaCB0aGlzIHByb3BlcnR5IGFwcGVhcnM8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjZ2V0RGVmYXVsdFRleHQoKSI+Z2V0RGVmYXVsdFRleHQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBkZWZhdWx0IG9yIGZpeGVkIHZhbHVlLAotIGlmIGl0IGlzIGNvbnNpc3RlbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjZ2V0RGVmYXVsdFZhbHVlKCkiPmdldERlZmF1bHRWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGRlZmF1bHQgb3IgZml4ZWQgdmFsdWUgYXMgYSBzdHJvbmdseS10eXBlZCB2YWx1ZSwKLSBpZiBpdCBpcyBjb25zaXN0ZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNnZXRKYXZhUHJvcGVydHlOYW1lKCkiPmdldEphdmFQcm9wZXJ0eU5hbWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgSmF2YSBuYW1lIGZvciB0aGlzIHByb3BlcnR5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwiPlFOYW1lU2V0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjZ2V0SmF2YVNldHRlckRlbGltaXRlcigpIj5nZXRKYXZhU2V0dGVyRGVsaW1pdGVyPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgc2V0IG9mIGVsZW1lbnQgbmFtZXMgd2hpY2ggc2hvdWxkIGFwcGVhciBzdHJpY3RseSBhZnRlciBhbGwKLSBvY2N1cmVuY2VzIG9mIHRoZSBlbGVtZW50cyBkZXNjcmliZWQgYnkgdGhpcyBwcm9wZXJ0eS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNnZXRKYXZhVHlwZUNvZGUoKSI+Z2V0SmF2YVR5cGVDb2RlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbmF0dXJhbCBKYXZhIHR5cGUgZm9yIHRoaXMgcHJvcGVydHkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIj5CaWdJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjZ2V0TWF4T2NjdXJzKCkiPmdldE1heE9jY3VyczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBzdW1tYXJpemVkIG1pbmltdW0gb2NjdXJyYW5jZSBudW1iZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIj5CaWdJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjZ2V0TWluT2NjdXJzKCkiPmdldE1pbk9jY3VyczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBzdW1tYXJpemVkIG1pbmltdW0gb2NjdXJyYW5jZSBudW1iZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2dldE5hbWUoKSI+Z2V0TmFtZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBuYW1lIG9mIHRoaXMgZWxlbWVudCBvciBhdHRyaWJ1dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNnZXRUeXBlKCkiPmdldFR5cGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgc2NoZW1hIHR5cGUgZm9yIHRoZSBwcm9wZXJ0eS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNoYXNEZWZhdWx0KCkiPmhhc0RlZmF1bHQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNORVZFUiI+PENPREU+TkVWRVI8L0NPREU+PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI1ZBUklBQkxFIj48Q09ERT5WQVJJQUJMRTwvQ09ERT48L0E+LCBvciA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjQ09OU0lTVEVOVExZIj48Q09ERT5DT05TSVNURU5UTFk8L0NPREU+PC9BPiBkZWZhdWx0ZWQsIGRlcGVuZGluZyBvbiB0aGUKLSBkZWZhdWx0cyBwcmVzZW50IGluIHRoZSBlbGVtZW50cyBpbiB0aGlzIHByb3BlcnR5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2hhc0ZpeGVkKCkiPmhhc0ZpeGVkPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjTkVWRVIiPjxDT0RFPk5FVkVSPC9DT0RFPjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNWQVJJQUJMRSI+PENPREU+VkFSSUFCTEU8L0NPREU+PC9BPiwgb3IgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0NPTlNJU1RFTlRMWSI+PENPREU+Q09OU0lTVEVOVExZPC9DT0RFPjwvQT4gZml4ZWQsIGRlcGVuZGluZyBvbiB0aGUKLSBmaXhlZCBjb25zdHJhaW50cyBwcmVzZW50IGluIHRoZSBlbGVtZW50cyBpbiB0aGlzIHByb3BlcnR5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2hhc05pbGxhYmxlKCkiPmhhc05pbGxhYmxlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjTkVWRVIiPjxDT0RFPk5FVkVSPC9DT0RFPjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNWQVJJQUJMRSI+PENPREU+VkFSSUFCTEU8L0NPREU+PC9BPiwgb3IgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0NPTlNJU1RFTlRMWSI+PENPREU+Q09OU0lTVEVOVExZPC9DT0RFPjwvQT4gbmlsbGFibGUsIGRlcGVuZGluZyBvbiB0aGUKLSBuaWxsYWJpbGl0eSBvZiB0aGUgZWxlbWVudHMgaW4gdGhpcyBwcm9wZXJ0eS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjaXNBdHRyaWJ1dGUoKSI+aXNBdHRyaWJ1dGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGZvciBhdHRyaWJ1dGVzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNpc1JlYWRPbmx5KCkiPmlzUmVhZE9ubHk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGZvciByZWFkLW9ubHkgcHJvcGVydGllcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNqYXZhQmFzZWRPblR5cGUoKSI+amF2YUJhc2VkT25UeXBlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIHNjaGVtYSB0eXBlIHJldHVybmVkIGZyb20gdGhlIEphdmEgZ2V0dGVyIGZvciB0aGlzIHByb3BlcnR5LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJORVZFUiI+PCEtLSAtLT48L0E+PEgzPgotTkVWRVI8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPk5FVkVSPC9CPjwvUFJFPgotPERMPgotPEREPkFwcGxpZXMgdG8gbm8gZWxlbWVudHMgZm9yIHRoaXMgcHJvcGVydHkuICBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2hhc05pbGxhYmxlKCkiPjxDT0RFPmhhc05pbGxhYmxlKCk8L0NPREU+PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2hhc0RlZmF1bHQoKSI+PENPREU+aGFzRGVmYXVsdCgpPC9DT0RFPjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNoYXNGaXhlZCgpIj48Q09ERT5oYXNGaXhlZCgpPC9DT0RFPjwvQT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQcm9wZXJ0eS5ORVZFUiI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJWQVJJQUJMRSI+PCEtLSAtLT48L0E+PEgzPgotVkFSSUFCTEU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPlZBUklBQkxFPC9CPjwvUFJFPgotPERMPgotPEREPkFwcGxpZXMgdG8gc29tZSwgYnV0IG5vdCBvdGhlciBlbGVtZW50cyBmb3IgdGhpcyBwcm9wZXJ0eS4gIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjaGFzTmlsbGFibGUoKSI+PENPREU+aGFzTmlsbGFibGUoKTwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjaGFzRGVmYXVsdCgpIj48Q09ERT5oYXNEZWZhdWx0KCk8L0NPREU+PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2hhc0ZpeGVkKCkiPjxDT0RFPmhhc0ZpeGVkKCk8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVByb3BlcnR5LlZBUklBQkxFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkNPTlNJU1RFTlRMWSI+PCEtLSAtLT48L0E+PEgzPgotQ09OU0lTVEVOVExZPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5DT05TSVNURU5UTFk8L0I+PC9QUkU+Ci08REw+Ci08REQ+QXBwbGllcyB0byBhbGwgZWxlbWVudHMgZm9yIHRoaXMgcHJvcGVydHkuICBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2hhc05pbGxhYmxlKCkiPjxDT0RFPmhhc05pbGxhYmxlKCk8L0NPREU+PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2hhc0RlZmF1bHQoKSI+PENPREU+aGFzRGVmYXVsdCgpPC9DT0RFPjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNoYXNGaXhlZCgpIj48Q09ERT5oYXNGaXhlZCgpPC9DT0RFPjwvQT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQcm9wZXJ0eS5DT05TSVNURU5UTFkiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iWE1MX09CSkVDVCI+PCEtLSAtLT48L0E+PEgzPgotWE1MX09CSkVDVDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+WE1MX09CSkVDVDwvQj48L1BSRT4KLTxETD4KLTxERD5BbiBYTUwgQmVhbiB0eXBlIHRoYXQgaW5oZXJpdHMgZnJvbSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj48Q09ERT5YbWxPYmplY3Q8L0NPREU+PC9BPi4gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNnZXRKYXZhVHlwZUNvZGUoKSI+PENPREU+Z2V0SmF2YVR5cGVDb2RlKCk8L0NPREU+PC9BPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQcm9wZXJ0eS5YTUxfT0JKRUNUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkpBVkFfRklSU1RfUFJJTUlUSVZFIj48IS0tIC0tPjwvQT48SDM+Ci1KQVZBX0ZJUlNUX1BSSU1JVElWRTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+SkFWQV9GSVJTVF9QUklNSVRJVkU8L0I+PC9QUkU+Ci08REw+Ci08REQ+SmF2YSBwcmltaXRpdmUgdHlwZSBjb2RlcyAoZm9yIG5vbi1udWxsYWJsZSBKYXZhIHR5cGVzKSBhcmUgYmV0d2VlbiBKQVZBX0ZJUlNUX1BSSU1JVElWRSBhbmQgSkFWQV9MQVNUX1BSSU1JVElWRSwgaW5jbHVzaXZlLgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVByb3BlcnR5LkpBVkFfRklSU1RfUFJJTUlUSVZFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkpBVkFfQk9PTEVBTiI+PCEtLSAtLT48L0E+PEgzPgotSkFWQV9CT09MRUFOPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5KQVZBX0JPT0xFQU48L0I+PC9QUkU+Ci08REw+Ci08REQ+QSBKYXZhIGJvb2xlYW4uIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjZ2V0SmF2YVR5cGVDb2RlKCkiPjxDT0RFPmdldEphdmFUeXBlQ29kZSgpPC9DT0RFPjwvQT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hUHJvcGVydHkuSkFWQV9CT09MRUFOIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkpBVkFfRkxPQVQiPjwhLS0gLS0+PC9BPjxIMz4KLUpBVkFfRkxPQVQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkpBVkFfRkxPQVQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+QSBKYXZhIGZsb2F0LiBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2dldEphdmFUeXBlQ29kZSgpIj48Q09ERT5nZXRKYXZhVHlwZUNvZGUoKTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVByb3BlcnR5LkpBVkFfRkxPQVQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSkFWQV9ET1VCTEUiPjwhLS0gLS0+PC9BPjxIMz4KLUpBVkFfRE9VQkxFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5KQVZBX0RPVUJMRTwvQj48L1BSRT4KLTxETD4KLTxERD5BIEphdmEgZG91YmxlLiBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2dldEphdmFUeXBlQ29kZSgpIj48Q09ERT5nZXRKYXZhVHlwZUNvZGUoKTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVByb3BlcnR5LkpBVkFfRE9VQkxFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkpBVkFfQllURSI+PCEtLSAtLT48L0E+PEgzPgotSkFWQV9CWVRFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5KQVZBX0JZVEU8L0I+PC9QUkU+Ci08REw+Ci08REQ+QSBKYXZhIGJ5dGUuIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjZ2V0SmF2YVR5cGVDb2RlKCkiPjxDT0RFPmdldEphdmFUeXBlQ29kZSgpPC9DT0RFPjwvQT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hUHJvcGVydHkuSkFWQV9CWVRFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkpBVkFfU0hPUlQiPjwhLS0gLS0+PC9BPjxIMz4KLUpBVkFfU0hPUlQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkpBVkFfU0hPUlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+QSBKYXZhIHNob3J0LiBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2dldEphdmFUeXBlQ29kZSgpIj48Q09ERT5nZXRKYXZhVHlwZUNvZGUoKTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVByb3BlcnR5LkpBVkFfU0hPUlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSkFWQV9JTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUpBVkFfSU5UPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5KQVZBX0lOVDwvQj48L1BSRT4KLTxETD4KLTxERD5BIEphdmEgaW50LiBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2dldEphdmFUeXBlQ29kZSgpIj48Q09ERT5nZXRKYXZhVHlwZUNvZGUoKTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVByb3BlcnR5LkpBVkFfSU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkpBVkFfTE9ORyI+PCEtLSAtLT48L0E+PEgzPgotSkFWQV9MT05HPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5KQVZBX0xPTkc8L0I+PC9QUkU+Ci08REw+Ci08REQ+QSBKYXZhIGxvbmcuIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjZ2V0SmF2YVR5cGVDb2RlKCkiPjxDT0RFPmdldEphdmFUeXBlQ29kZSgpPC9DT0RFPjwvQT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hUHJvcGVydHkuSkFWQV9MT05HIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkpBVkFfTEFTVF9QUklNSVRJVkUiPjwhLS0gLS0+PC9BPjxIMz4KLUpBVkFfTEFTVF9QUklNSVRJVkU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkpBVkFfTEFTVF9QUklNSVRJVkU8L0I+PC9QUkU+Ci08REw+Ci08REQ+SmF2YSBwcmltaXRpdmUgdHlwZSBjb2RlcyAoZm9yIG5vbi1udWxsYWJsZSBKYXZhIHR5cGVzKSBhcmUgYmV0d2VlbiBKQVZBX0ZJUlNUX1BSSU1JVElWRSBhbmQgSkFWQV9MQVNUX1BSSU1JVElWRSwgaW5jbHVzaXZlLgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVByb3BlcnR5LkpBVkFfTEFTVF9QUklNSVRJVkUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSkFWQV9CSUdfREVDSU1BTCI+PCEtLSAtLT48L0E+PEgzPgotSkFWQV9CSUdfREVDSU1BTDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+SkFWQV9CSUdfREVDSU1BTDwvQj48L1BSRT4KLTxETD4KLTxERD5BIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj48Q09ERT5CaWdEZWNpbWFsPC9DT0RFPjwvQT4uIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjZ2V0SmF2YVR5cGVDb2RlKCkiPjxDT0RFPmdldEphdmFUeXBlQ29kZSgpPC9DT0RFPjwvQT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hUHJvcGVydHkuSkFWQV9CSUdfREVDSU1BTCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJKQVZBX0JJR19JTlRFR0VSIj48IS0tIC0tPjwvQT48SDM+Ci1KQVZBX0JJR19JTlRFR0VSPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5KQVZBX0JJR19JTlRFR0VSPC9CPjwvUFJFPgotPERMPgotPEREPkEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPjxDT0RFPkJpZ0ludGVnZXI8L0NPREU+PC9BPi4gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNnZXRKYXZhVHlwZUNvZGUoKSI+PENPREU+Z2V0SmF2YVR5cGVDb2RlKCk8L0NPREU+PC9BPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQcm9wZXJ0eS5KQVZBX0JJR19JTlRFR0VSIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkpBVkFfU1RSSU5HIj48IS0tIC0tPjwvQT48SDM+Ci1KQVZBX1NUUklORzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+SkFWQV9TVFJJTkc8L0I+PC9QUkU+Ci08REw+Ci08REQ+QSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj48Q09ERT5TdHJpbmc8L0NPREU+PC9BPi4gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNnZXRKYXZhVHlwZUNvZGUoKSI+PENPREU+Z2V0SmF2YVR5cGVDb2RlKCk8L0NPREU+PC9BPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQcm9wZXJ0eS5KQVZBX1NUUklORyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJKQVZBX0JZVEVfQVJSQVkiPjwhLS0gLS0+PC9BPjxIMz4KLUpBVkFfQllURV9BUlJBWTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+SkFWQV9CWVRFX0FSUkFZPC9CPjwvUFJFPgotPERMPgotPEREPkEgYnl0ZVtdLiBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2dldEphdmFUeXBlQ29kZSgpIj48Q09ERT5nZXRKYXZhVHlwZUNvZGUoKTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVByb3BlcnR5LkpBVkFfQllURV9BUlJBWSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJKQVZBX0dEQVRFIj48IS0tIC0tPjwvQT48SDM+Ci1KQVZBX0dEQVRFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5KQVZBX0dEQVRFPC9CPjwvUFJFPgotPERMPgotPEREPkEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZTwvQ09ERT48L0E+LiBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2dldEphdmFUeXBlQ29kZSgpIj48Q09ERT5nZXRKYXZhVHlwZUNvZGUoKTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVByb3BlcnR5LkpBVkFfR0RBVEUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSkFWQV9HRFVSQVRJT04iPjwhLS0gLS0+PC9BPjxIMz4KLUpBVkFfR0RVUkFUSU9OPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5KQVZBX0dEVVJBVElPTjwvQj48L1BSRT4KLTxETD4KLTxERD5BIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwiPjxDT0RFPkdEdXJhdGlvbjwvQ09ERT48L0E+LiBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2dldEphdmFUeXBlQ29kZSgpIj48Q09ERT5nZXRKYXZhVHlwZUNvZGUoKTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVByb3BlcnR5LkpBVkFfR0RVUkFUSU9OIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkpBVkFfREFURSI+PCEtLSAtLT48L0E+PEgzPgotSkFWQV9EQVRFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5KQVZBX0RBVEU8L0I+PC9QUkU+Ci08REw+Ci08REQ+QSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+PENPREU+RGF0ZTwvQ09ERT48L0E+LiBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2dldEphdmFUeXBlQ29kZSgpIj48Q09ERT5nZXRKYXZhVHlwZUNvZGUoKTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVByb3BlcnR5LkpBVkFfREFURSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJKQVZBX1FOQU1FIj48IS0tIC0tPjwvQT48SDM+Ci1KQVZBX1FOQU1FPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5KQVZBX1FOQU1FPC9CPjwvUFJFPgotPERMPgotPEREPkEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPjxDT0RFPlFOYW1lPC9DT0RFPjwvQT4uIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjZ2V0SmF2YVR5cGVDb2RlKCkiPjxDT0RFPmdldEphdmFUeXBlQ29kZSgpPC9DT0RFPjwvQT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hUHJvcGVydHkuSkFWQV9RTkFNRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJKQVZBX0xJU1QiPjwhLS0gLS0+PC9BPjxIMz4KLUpBVkFfTElTVDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+SkFWQV9MSVNUPC9CPjwvUFJFPgotPERMPgotPEREPkEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPjxDT0RFPkxpc3Q8L0NPREU+PC9BPi4gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNnZXRKYXZhVHlwZUNvZGUoKSI+PENPREU+Z2V0SmF2YVR5cGVDb2RlKCk8L0NPREU+PC9BPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQcm9wZXJ0eS5KQVZBX0xJU1QiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSkFWQV9DQUxFTkRBUiI+PCEtLSAtLT48L0E+PEgzPgotSkFWQV9DQUxFTkRBUjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+SkFWQV9DQUxFTkRBUjwvQj48L1BSRT4KLTxETD4KLTxERD5BIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPi4gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNnZXRKYXZhVHlwZUNvZGUoKSI+PENPREU+Z2V0SmF2YVR5cGVDb2RlKCk8L0NPREU+PC9BPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQcm9wZXJ0eS5KQVZBX0NBTEVOREFSIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkpBVkFfRU5VTSI+PCEtLSAtLT48L0E+PEgzPgotSkFWQV9FTlVNPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5KQVZBX0VOVU08L0I+PC9QUkU+Ci08REw+Ci08REQ+QSBnZW5lcmF0ZWQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLmh0bWwiPjxDT0RFPlN0cmluZ0VudW1BYnN0cmFjdEJhc2U8L0NPREU+PC9BPiBzdWJjbGFzcy4gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNnZXRKYXZhVHlwZUNvZGUoKSI+PENPREU+Z2V0SmF2YVR5cGVDb2RlKCk8L0NPREU+PC9BPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQcm9wZXJ0eS5KQVZBX0VOVU0iPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSkFWQV9PQkpFQ1QiPjwhLS0gLS0+PC9BPjxIMz4KLUpBVkFfT0JKRUNUPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5KQVZBX09CSkVDVDwvQj48L1BSRT4KLTxETD4KLTxERD5BIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPjxDT0RFPk9iamVjdDwvQ09ERT48L0E+LCB1c2VkIGZvciBzb21lIHNpbXBsZSB0eXBlIHVuaW9ucy4gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNnZXRKYXZhVHlwZUNvZGUoKSI+PENPREU+Z2V0SmF2YVR5cGVDb2RlKCk8L0NPREU+PC9BPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFQcm9wZXJ0eS5KQVZBX09CSkVDVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0Q29udGFpbmVyVHlwZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRDb250YWluZXJUeXBlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPmdldENvbnRhaW5lclR5cGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UaGUgdHlwZSB3aXRoaW4gd2hpY2ggdGhpcyBwcm9wZXJ0eSBhcHBlYXJzCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE5hbWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TmFtZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4gPEI+Z2V0TmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlRoZSBuYW1lIG9mIHRoaXMgZWxlbWVudCBvciBhdHRyaWJ1dGUKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iYWNjZXB0ZWROYW1lcygpIj48IS0tIC0tPjwvQT48SDM+Ci1hY2NlcHRlZE5hbWVzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPltdIDxCPmFjY2VwdGVkTmFtZXM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5Gb3IgZWxlbWVudCBwcm9wZXJ0aWVzIHRoZSBzZXQgb2YgbmFtZXMgdGhhdCBhcmUgYWNjZXB0ZWQgZm9yIHRoaXMgcHJvcGVydHkKLSBpZiB0aGlzIGVsZW1lbnQgaXMgdGhlIGhlYWQgb2YgYSBzdWJzdGl0dXRpb24gZ3JvdXAuIFRoaXMgd2lsbCBhbHdheXMKLSBoYXZlIGF0IGxlYXN0IG9uZSBlbGVtZW50LCBpZSwgdGhlIHByb3BlcnR5J3MgbmFtZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SmF2YVByb3BlcnR5TmFtZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRKYXZhUHJvcGVydHlOYW1lPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5nZXRKYXZhUHJvcGVydHlOYW1lPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VGhlIEphdmEgbmFtZSBmb3IgdGhpcyBwcm9wZXJ0eS4gIEZvciBleGFtcGxlLCBpZiB0aGUgbWV0aG9kIHRvCi0gYWNjZXNzIHRoaXMgcHJvcGVydHkgaXMgY2FsbGVkIGdldEZpcnN0TmFtZSwgdGhlbiB0aGlzIG1ldGhvZAotIHJldHVybnMgdGhlIHN0cmluZyAiRmlyc3ROYW1lIi4gIE1heSBiZSBudWxsIGlmIHRoZSBzY2hlbWEgdHlwZQotIGhhcyBub3QgYmVlbiBjb21waWxlZCB0byBKYXZhLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc1JlYWRPbmx5KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzUmVhZE9ubHk8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzUmVhZE9ubHk8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGZvciByZWFkLW9ubHkgcHJvcGVydGllcy4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNBdHRyaWJ1dGUoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNBdHRyaWJ1dGU8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzQXR0cmlidXRlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBmb3IgYXR0cmlidXRlcy4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0VHlwZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRUeXBlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPmdldFR5cGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UaGUgc2NoZW1hIHR5cGUgZm9yIHRoZSBwcm9wZXJ0eS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iamF2YUJhc2VkT25UeXBlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWphdmFCYXNlZE9uVHlwZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPiA8Qj5qYXZhQmFzZWRPblR5cGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UaGUgc2NoZW1hIHR5cGUgcmV0dXJuZWQgZnJvbSB0aGUgSmF2YSBnZXR0ZXIgZm9yIHRoaXMgcHJvcGVydHkuCi0gQXBwbGllcyBvbmx5IHRvIHR5cGVzIHRoYXQgaGF2ZSBiZWVuIGNvZGUgZ2VuZXJhdGVkIHRvIEphdmE7IG1heQotIGJlIGEgYmFzZSB0eXBlIG9mIGdldFR5cGUoKS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZXh0ZW5kc0phdmFTaW5nbGV0b24oKSI+PCEtLSAtLT48L0E+PEgzPgotZXh0ZW5kc0phdmFTaW5nbGV0b248L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmV4dGVuZHNKYXZhU2luZ2xldG9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiB0aGVyZSBpcyBhIEphdmEgZ2V0dGVyIHRoYXQgcmV0dXJucyBhIHNpbmdsZXRvbi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZXh0ZW5kc0phdmFPcHRpb24oKSI+PCEtLSAtLT48L0E+PEgzPgotZXh0ZW5kc0phdmFPcHRpb248L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmV4dGVuZHNKYXZhT3B0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiB0aGVyZSBpcyBhbiBKYXZhIGlzU2V0IG1ldGhvZCB0aGF0IHRlc3RzIGZvciBwcmVzZW5jZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZXh0ZW5kc0phdmFBcnJheSgpIj48IS0tIC0tPjwvQT48SDM+Ci1leHRlbmRzSmF2YUFycmF5PC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5leHRlbmRzSmF2YUFycmF5PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiB0aGVyZSBpcyBhIEphdmEgZ2V0dGVyIHRoYXQgcmV0dXJucyBhbiBhcnJheS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SmF2YVR5cGVDb2RlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEphdmFUeXBlQ29kZTwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5nZXRKYXZhVHlwZUNvZGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBuYXR1cmFsIEphdmEgdHlwZSBmb3IgdGhpcyBwcm9wZXJ0eS4gIFJldHVybnMgZWl0aGVyCi0gWE1MX09CSkVDVCAoZm9yIGNvbXBsZXggdHlwZXMpIG9yIG9uZSBvZiB0aGUgSkFWQV8qIGNvbnN0YW50cyBkZXNjcmliZWQKLSBpbiB0aGlzIGludGVyZmFjZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SmF2YVNldHRlckRlbGltaXRlcigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRKYXZhU2V0dGVyRGVsaW1pdGVyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj5RTmFtZVNldDwvQT4gPEI+Z2V0SmF2YVNldHRlckRlbGltaXRlcjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHNldCBvZiBlbGVtZW50IG5hbWVzIHdoaWNoIHNob3VsZCBhcHBlYXIgc3RyaWN0bHkgYWZ0ZXIgYWxsCi0gb2NjdXJlbmNlcyBvZiB0aGUgZWxlbWVudHMgZGVzY3JpYmVkIGJ5IHRoaXMgcHJvcGVydHkuIEZvciBlbGVtZW50IHByb3BlcnRpZXMgb25seS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TWluT2NjdXJzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE1pbk9jY3VyczwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIj5CaWdJbnRlZ2VyPC9BPiA8Qj5nZXRNaW5PY2N1cnM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgc3VtbWFyaXplZCBtaW5pbXVtIG9jY3VycmFuY2UgbnVtYmVyLgotIEZvciBleGFtcGxlLCBhIHNlcXVlbmNlIGNvbnRhaW5pbmcgYSBub25vcHRpb25hbCBzaW5nbGV0b24gZWxlbWVudCByZXBlYXRlZCB0d2ljZSB3aWxsCi0gcmVzdWx0IGluIGEgcHJvcGVydHkgZ2V0TWluT2NjdXJzKCkgb2YgMi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TWF4T2NjdXJzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE1heE9jY3VyczwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIj5CaWdJbnRlZ2VyPC9BPiA8Qj5nZXRNYXhPY2N1cnM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgc3VtbWFyaXplZCBtaW5pbXVtIG9jY3VycmFuY2UgbnVtYmVyLgotIEZvciBleGFtcGxlLCBhIHNlcXVlbmNlIGNvbnRhaW5pbmcgYSBub25vcHRpb25hbCBzaW5nbGV0b24gZWxlbWVudCByZXBlYXRlZCB0d2ljZSB3aWxsCi0gcmVzdWx0IGluIGEgcHJvcGVydHkgZ2V0TWF4T2NjdXJzKCkgb2YgMi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaGFzTmlsbGFibGUoKSI+PCEtLSAtLT48L0E+PEgzPgotaGFzTmlsbGFibGU8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+aGFzTmlsbGFibGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNORVZFUiI+PENPREU+TkVWRVI8L0NPREU+PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI1ZBUklBQkxFIj48Q09ERT5WQVJJQUJMRTwvQ09ERT48L0E+LCBvciA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjQ09OU0lTVEVOVExZIj48Q09ERT5DT05TSVNURU5UTFk8L0NPREU+PC9BPiBuaWxsYWJsZSwgZGVwZW5kaW5nIG9uIHRoZQotIG5pbGxhYmlsaXR5IG9mIHRoZSBlbGVtZW50cyBpbiB0aGlzIHByb3BlcnR5LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJoYXNEZWZhdWx0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWhhc0RlZmF1bHQ8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+aGFzRGVmYXVsdDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI05FVkVSIj48Q09ERT5ORVZFUjwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjVkFSSUFCTEUiPjxDT0RFPlZBUklBQkxFPC9DT0RFPjwvQT4sIG9yIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNDT05TSVNURU5UTFkiPjxDT0RFPkNPTlNJU1RFTlRMWTwvQ09ERT48L0E+IGRlZmF1bHRlZCwgZGVwZW5kaW5nIG9uIHRoZQotIGRlZmF1bHRzIHByZXNlbnQgaW4gdGhlIGVsZW1lbnRzIGluIHRoaXMgcHJvcGVydHkuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Imhhc0ZpeGVkKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWhhc0ZpeGVkPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmhhc0ZpeGVkPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjTkVWRVIiPjxDT0RFPk5FVkVSPC9DT0RFPjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNWQVJJQUJMRSI+PENPREU+VkFSSUFCTEU8L0NPREU+PC9BPiwgb3IgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI0NPTlNJU1RFTlRMWSI+PENPREU+Q09OU0lTVEVOVExZPC9DT0RFPjwvQT4gZml4ZWQsIGRlcGVuZGluZyBvbiB0aGUKLSBmaXhlZCBjb25zdHJhaW50cyBwcmVzZW50IGluIHRoZSBlbGVtZW50cyBpbiB0aGlzIHByb3BlcnR5LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXREZWZhdWx0VGV4dCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXREZWZhdWx0VGV4dDwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+Z2V0RGVmYXVsdFRleHQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBkZWZhdWx0IG9yIGZpeGVkIHZhbHVlLAotIGlmIGl0IGlzIGNvbnNpc3RlbnQuIElmIGl0IGlzIG5vdCBjb25zaXN0ZW50LAotIHRoZW4gcmV0dXJucyBudWxsLgotIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjaGFzRGVmYXVsdCgpIj48Q09ERT5oYXNEZWZhdWx0KCk8L0NPREU+PC9BPiBhbmQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sI2hhc0ZpeGVkKCkiPjxDT0RFPmhhc0ZpeGVkKCk8L0NPREU+PC9BPi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RGVmYXVsdFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldERlZmF1bHRWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiA8Qj5nZXREZWZhdWx0VmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBkZWZhdWx0IG9yIGZpeGVkIHZhbHVlIGFzIGEgc3Ryb25nbHktdHlwZWQgdmFsdWUsCi0gaWYgaXQgaXMgY29uc2lzdGVudC4gSWYgaXQgaXMgbm90IGNvbnNpc3RlbnQsCi0gdGhlbiByZXR1cm5zIG51bGwuCi0gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCNoYXNEZWZhdWx0KCkiPjxDT0RFPmhhc0RlZmF1bHQoKTwvQ09ERT48L0E+IGFuZCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwjaGFzRml4ZWQoKSI+PENPREU+aGFzRml4ZWQoKTwvQ09ERT48L0E+LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVN0cmluZ0VudW1FbnRyeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU2NoZW1hUHJvcGVydHkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hU3RyaW5nRW51bUVudHJ5Lmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFTdHJpbmdFbnVtRW50cnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTA4MDg3Ni4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFTdHJpbmdFbnVtRW50cnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI0OSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ2OjU2IFBEVCAyMDAzIC0tPgotPFRJVExFPgotU2NoZW1hU3RyaW5nRW51bUVudHJ5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVN0cmluZ0VudW1FbnRyeSxTY2hlbWFTdHJpbmdFbnVtRW50cnkgaW50ZXJmYWNlIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJTY2hlbWFTdHJpbmdFbnVtRW50cnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTY2hlbWFTdHJpbmdFbnVtRW50cnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgU2NoZW1hU3RyaW5nRW51bUVudHJ5PC9IMj4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlNjaGVtYVN0cmluZ0VudW1FbnRyeTwvQj48L0RMPgotCi08UD4KLURlc2NyaWJlcyBhIGNvZGUtZ2VuZXJhdGVkIHN0cmluZyBlbnVtZXJhdGlvbgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0U3RyaW5nRW51bUVudHJpZXMoKSI+PENPREU+U2NoZW1hVHlwZS5nZXRTdHJpbmdFbnVtRW50cmllcygpPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVN0cmluZ0VudW1FbnRyeS5odG1sI2dldEVudW1OYW1lKCkiPmdldEVudW1OYW1lPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSBjYXBpdGFsaXplZCBuYW1lIHRvIHVzZSBmb3IgdGhlIGVudW1lcmF0aW9uIGNvbnN0YW50IG5hbWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hU3RyaW5nRW51bUVudHJ5Lmh0bWwjZ2V0SW50VmFsdWUoKSI+Z2V0SW50VmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBbiBpbnRlZ2VyIHRvIHJlcHJlc2VudCB0aGlzIGNob2ljZSBpbiB0aGUgZW51bWVyYXRpb248L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVN0cmluZ0VudW1FbnRyeS5odG1sI2dldFN0cmluZygpIj5nZXRTdHJpbmc8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZW51bWVyYXRlZCBzdHJpbmcgdmFsdWU8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldFN0cmluZygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTdHJpbmc8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPmdldFN0cmluZzwvQj4oKTwvUFJFPgotPERMPgotPEREPlRoZSBlbnVtZXJhdGVkIHN0cmluZyB2YWx1ZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJbnRWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJbnRWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5nZXRJbnRWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkFuIGludGVnZXIgdG8gcmVwcmVzZW50IHRoaXMgY2hvaWNlIGluIHRoZSBlbnVtZXJhdGlvbgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRFbnVtTmFtZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRFbnVtTmFtZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+Z2V0RW51bU5hbWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5BIGNhcGl0YWxpemVkIG5hbWUgdG8gdXNlIGZvciB0aGUgZW51bWVyYXRpb24gY29uc3RhbnQgbmFtZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNjaGVtYVN0cmluZ0VudW1FbnRyeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLlJlZi5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5SZWYuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGVhMTdiMS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLlJlZi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzEyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTkgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1TY2hlbWFUeXBlLlJlZiAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLlJlZixTY2hlbWFUeXBlLlJlZiBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iU2NoZW1hVHlwZS5SZWYgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYU1vZGVsR3JvdXAuUmVmLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTY2hlbWFUeXBlLlJlZi5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQuUmVmIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgU2NoZW1hVHlwZS5SZWY8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuUmVmLmh0bWwiPm9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQ29tcG9uZW50LlJlZjwvQT4KLSAgICAgICAgfAotICAgICAgICArLS08Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuUmVmPC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+RW5jbG9zaW5nIGNsYXNzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyA8Qj5TY2hlbWFUeXBlLlJlZjwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCI+U2NoZW1hQ29tcG9uZW50LlJlZjwvQT48L0RMPgotCi08UD4KLVVzZWQgdG8gYWxsb3cgb24tZGVtYW5kIGxvYWRpbmcgb2YgdHlwZXMuCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hQ29tcG9uZW50LlJlZiI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPkZpZWxkcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIj5TY2hlbWFDb21wb25lbnQuUmVmPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sI19oYW5kbGUiPl9oYW5kbGU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLlJlZi5odG1sI1NjaGVtYVR5cGUuUmVmKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPlNjaGVtYVR5cGUuUmVmPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Jm5ic3A7dHlwZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLlJlZi5odG1sI1NjaGVtYVR5cGUuUmVmKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZVN5c3RlbSwgamF2YS5sYW5nLlN0cmluZykiPlNjaGVtYVR5cGUuUmVmPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwiPlNjaGVtYVR5cGVTeXN0ZW08L0E+Jm5ic3A7c3lzdGVtLAotICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO2hhbmRsZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuUmVmLmh0bWwjZ2V0KCkiPmdldDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLlJlZi5odG1sI2dldENvbXBvbmVudFR5cGUoKSI+Z2V0Q29tcG9uZW50VHlwZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQuUmVmIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIj5TY2hlbWFDb21wb25lbnQuUmVmPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sI2dldENvbXBvbmVudCgpIj5nZXRDb21wb25lbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCNnZXRUeXBlU3lzdGVtKCkiPmdldFR5cGVTeXN0ZW08L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9IlNjaGVtYVR5cGUuUmVmKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPjwhLS0gLS0+PC9BPjxIMz4KLVNjaGVtYVR5cGUuUmVmPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+U2NoZW1hVHlwZS5SZWY8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPiZuYnNwO3R5cGUpPC9QUkU+Ci08REw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTY2hlbWFUeXBlLlJlZihvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVTeXN0ZW0sIGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1TY2hlbWFUeXBlLlJlZjwvSDM+Ci08UFJFPgotcHVibGljIDxCPlNjaGVtYVR5cGUuUmVmPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVTeXN0ZW0uaHRtbCI+U2NoZW1hVHlwZVN5c3RlbTwvQT4mbmJzcDtzeXN0ZW0sCi0gICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO2hhbmRsZSk8L1BSRT4KLTxETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldENvbXBvbmVudFR5cGUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Q29tcG9uZW50VHlwZTwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGludCA8Qj5nZXRDb21wb25lbnRUeXBlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sI2dldENvbXBvbmVudFR5cGUoKSI+Z2V0Q29tcG9uZW50VHlwZTwvQT48L0NPREU+IGluIGNsYXNzIDxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIj5TY2hlbWFDb21wb25lbnQuUmVmPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+Z2V0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTW9kZWxHcm91cC5SZWYuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNjaGVtYVR5cGUuUmVmLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudC5SZWYiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWYyYjc5Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQzMTAgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NiBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVNjaGVtYVR5cGUgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSxTY2hlbWFUeXBlIGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iU2NoZW1hVHlwZSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hU3RyaW5nRW51bUVudHJ5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTY2hlbWFUeXBlLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFNjaGVtYVR5cGU8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBpbnRlcmZhY2UgPEI+U2NoZW1hVHlwZTwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sIj5TY2hlbWFDb21wb25lbnQ8L0E+PC9ETD4KLQotPFA+Ci1SZXByZXNlbnRzIGEgc2NoZW1hIHR5cGUuCi0gPHA+Ci0gU2NoZW1hVHlwZSBpcyB0aGUgbWV0YWRhdGEgInR5cGUiIGNsYXNzIGZvciA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj48Q09ERT5YbWxPYmplY3Q8L0NPREU+PC9BPiwgYW5kIGl0IHBsYXlzIHRoZQotIGFuYWxvZ291cyByb2xlIGZvciA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj48Q09ERT5YbWxPYmplY3Q8L0NPREU+PC9BPiB0aGF0IDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvQ2xhc3MuaHRtbCI+PENPREU+Q2xhc3M8L0NPREU+PC9BPiBwbGF5cyBmb3IKLSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj48Q09ERT5PYmplY3Q8L0NPREU+PC9BPi4KLSA8cD4KLSBFdmVyeSBYTUwgQmVhbiBjbGFzcyBjb3JyZXNwb25kcyB0byBhIHNpbmdsZXRvbiBTY2hlbWFUeXBlIG9iamVjdAotIG9idGFpbmFibGUgYnkgQ2xhc3NOYW1lLnR5cGUgKGUuZy4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwjdHlwZSI+PENPREU+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyLnR5cGU8L0NPREU+PC9BPiksIGFuZAotIGV2ZXJ5IFhNTCBCZWFuIGluc3RhbmNlIGhhcyBhbiBhY3R1YWwgU2NoZW1hVHlwZSwgb2J0YWluYWJsZSBieQotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2NoZW1hVHlwZSgpIj48Q09ERT5YbWxPYmplY3Quc2NoZW1hVHlwZSgpPC9DT0RFPjwvQT4uICBUaGUgQ2xhc3NOYW1lLnR5cGUgYW5kIHNjaGVtYVR5cGUoKSBtZWNoYW5pc21zIGFyZQotIGFuYWxvZ291cyB0byB0aGUgb3JkaW5hcnkgSmF2YSBDbGFzc05hbWUuY2xhc3MgYW5kIG9iai5nZXRDbGFzcygpIG1lY2hhbmlzbXMuCi0gPHA+Ci0gQWxsIHNjaGVtYSB0eXBlcyBhcmUgcmVwcmVzZW50ZWQgYnkgYSBTY2hlbWFUeXBlLCB0aGlzIGluY2x1ZGVzIGFsbCB0eXBlcwotIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5IGFyZSBidWlsdC1pbiBvciB1c2VyLWRlZmluZWQsIGNvbXBpbGVkIG9yCi0gdW5jb21waWxlZCwgc2ltcGxlIG9yIGNvbXBsZXguCi0gPHA+Ci0gSW4gYWRkaXRpb24sIGEgY29tcGlsZWQgWE1MIEJlYW4gdHlwZSBzeXN0ZW0gaW5jbHVkZXMgc3BlY2lhbCAiZG9jdW1lbnQiIHNjaGVtYSB0eXBlcwotIGVhY2ggcmVwcmVzZW50aW5nIGEgZG9jdW1lbnQgY29udGFpbmluZyBub3RoaW5nIGJ1dCBhIHNpbmdsZSBlbGVtZW50IGZvciBlYWNoCi0gZ2xvYmFsIGVsZW1lbnQsIGFuZCBzcGVjaWFsICJhdHRyaWJ1dGUiIHNjaGVtYSB0eXBlcyBlYWNoIHJlcHJlc2VudGluZwotIGEgZnJhZ21lbnQgY29udGFpbmluZyBub3RoaW5nIGJ1dCBhIHNpbmdsZSBnbG9iYWwgYXR0cmlidXRlIGZvciBnbG9iYWwKLSBhdHRyaWJ1dGUuCi0gPHA+Ci0gRG8gbm90IGNvbmZ1c2UgU2NoZW1hIFR5cGVzIHdpdGggb3RoZXIgdHlwZXMgb2YgU2NoZW1hIENvbXBvbmVudHMgc3VjaCBhcwotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5odG1sIj48Q09ERT5HbG9iYWwgRWxlbWVudHM8L0NPREU+PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuaHRtbCI+PENPREU+R2xvYmFsIEF0dHJpYnV0ZXM8L0NPREU+PC9BPiwKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYU1vZGVsR3JvdXAuaHRtbCI+PENPREU+TmFtZWQgTW9kZWwgR3JvdXBzPC9DT0RFPjwvQT4sIG9yIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlR3JvdXAuaHRtbCI+PENPREU+QXR0cmlidXRlIEdyb3VwczwvQ09ERT48L0E+LgotIFNjaGVtYVR5cGUgcmVwcmVzZW50cyBhIFR5cGUgY29tcG9uZW50LCBub3QgYW55IG9mIHRoZSBvdGhlciBraW5kcyBvZiBjb21wb25lbnRzLgotIFRoZXJlIGFyZSBkaWZmZXJlbnQga2luZHMgb2YgbWV0YWRhdGEgb2JqZWN0cyBmb3IgdGhlIGRpZmZlcmVudCBTY2hlbWEgY29tcG9uZW50cy4gCi0gPHA+Ci0gVGhlIHNwYWNlIG9mIFNjaGVtYVR5cGVzIGlzIGRpdmlkZWQgYXMgZm9sbG93czoKLSAKLSA8dWw+Ci0gPGxpPkZpcnN0LCB0aGVyZSBpcyB0aGUgdW5pdmVyc2FsIGJhc2UgdHlwZSBhbmQgdGhlIHVuaXZlcnNhbAotICAgICBzdWJ0eXBlLiAgVGhlc2UgYXJlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdHlwZSI+PENPREU+WG1sT2JqZWN0LnR5cGU8L0NPREU+PC9BPgotICAgICAoY29ycmVzcG9uZGluZyB0byB4czphbnlUeXBlKSBhbmQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sI05PX1RZUEUiPjxDT0RFPlhtbEJlYW5zLk5PX1RZUEU8L0NPREU+PC9BPiwKLSAgICAgcmVzcGVjdGl2ZWx5LiAgVGhlIGZpcnN0IHR5cGUgaXMgYSBiYXNlIHR5cGUgb2YgYWxsIG90aGVyCi0gICAgIHR5cGVzLiAgVGhlIG90aGVyIHR5cGUgaW5kaWNhdGVzIHRoZSBhYnNlbmNlIG9mIHR5cGUgaW5mb3JtYXRpb24KLSAgICAgYW5kLCBhdCBsZWFzdCBpbiBzZXQtdGhlb3JldGljIHRlcm1zLCBpcyBhIHN1YnR5cGUgb2YgYWxsIG90aGVyIHR5cGVzLgotIDxsaT5UaGVyZSBpcyBhbm90aGVyIHVuaXZlcnNhbCBiYXNlIHR5cGUgdGhhdCBpcyB0aGUgYmFzZSB0eXBlCi0gICAgIGZvciBhbGwgc2ltcGxlIHR5cGVzLiAgVGhpcyBpcyB0aGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjdHlwZSI+PENPREU+WG1sQW55U2ltcGxlVHlwZS50eXBlPC9DT0RFPjwvQT4sCi0gICAgIGNvcnJlc3BvbmRpbmcgdG8geHM6YW55U2ltcGxlVHlwZS4gICBPbmx5IFhtbE9iamVjdC50eXBlIGFuZAotICAgICBYbWxBbnlTaW1wbGVUeXBlLnR5cGUgcmV0dXJuIDxjb2RlPnRydWU8L2NvZGU+IGZvciA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNpc1VSVHlwZSgpIj48Q09ERT5pc1VSVHlwZSgpPC9DT0RFPjwvQT4sIGFuZAotICAgICBvbmx5IFhtbEJlYW5zLk5PX1RZUEUgcmV0dXJucyA8Y29kZT50cnVlPC9jb2RlPiBmb3IgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjaXNOb1R5cGUoKSI+PENPREU+aXNOb1R5cGUoKTwvQ09ERT48L0E+LgotIDxsaT5UaGUgdHdvICJzcGVjaWFsIiBraW5kcyBvZiB0eXBlcyB0aGF0IGFyZSBnZW5lcmF0ZWQgdGhhdAotICAgICBkbyBub3QgZm9ybWFsbHkgZXhpc3QgaW4gdGhlIGFjdHVhbCBTY2hlbWEgc3BlY2lmaWNhdGlvbiBhcmUKLSAgICAgZG9jdW1lbnQgdHlwZXMgYW5kIGdsb2JhbCBhdHRyaWJ1dGUgdHlwZXMgKGNvcnJlc3BvbmRpbmcgdG8KLSAgICAgZG9jdW1lbnRzIHRoYXQgY29udGFpbiBhIGdsb2JhbCBlbGVtZW50LCBvciBmcmFnbWVudHMgdGhhdAotICAgICBjb250YWluIGEgZ2xvYmFsIGF0dHJpYnV0ZSkuICBUaGV5IGNhbiBiZSBkZXRlY3RlZCB1c2luZwotICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNpc0RvY3VtZW50VHlwZSgpIj48Q09ERT5pc0RvY3VtZW50VHlwZSgpPC9DT0RFPjwvQT4gYW5kIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2lzQXR0cmlidXRlVHlwZSgpIj48Q09ERT5pc0F0dHJpYnV0ZVR5cGUoKTwvQ09ERT48L0E+LiBPdGhlcgotICAgICB0aGFuIHRoZWlyIGFub255bWl0eSAobGFjayBvZiBhIHR5cGUgbmFtZSkgYW5kIHRoZWlyIGFwcGVhcmFuY2UKLSAgICAgb25seSBhdCB0aGUgcm9vdCBvZiBhbiBpbnN0YW5jZSwgdGhleSBhcmUgb3RoZXJ3aXNlIGp1c3QgbGlrZQotICAgICBvcmRpbmFyeSBjb21wbGV4IHR5cGVzLgotIDxsaT5TaW1wbGUgdHlwZXMgY2FuIGJlIGRldGVjdGVkIHVzaW5nIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2lzU2ltcGxlVHlwZSgpIj48Q09ERT5pc1NpbXBsZVR5cGUoKTwvQ09ERT48L0E+LgotICAgICBDb21wbGV4IHR5cGVzIGFyZSBjb25zZGVyZWQgdG8gYmUgYWxsIHRoZSB0eXBlcyB0aGF0IGFyZQotICAgICBub3Qgc2ltcGxlLgotIDxsaT5TaW1wbGUgdHlwZXMgYXJlIGRpdmlkZWQgaW50byB0aHJlZSB2YXJpZXRpZXM6IGF0b21pYyB0eXBlcywKLSAgICAgbGlzdCB0eXBlcywgYW5kIHVuaW9uIHR5cGVzLiAgV2hpY2ggdmFyaWV0eSBvZiBzaW1wbGUgdHlwZQotICAgICB5b3UgaGF2ZSBjYW4gYmUgZGlzY292ZXJkIHVzaW5nIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldFNpbXBsZVZhcmlldHkoKSI+PENPREU+Z2V0U2ltcGxlVmFyaWV0eSgpPC9DT0RFPjwvQT4uCi0gICAgIEl0IHdpbGwgcmV0dXJuIGVpdGhlciA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNBVE9NSUMiPjxDT0RFPkFUT01JQzwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNMSVNUIj48Q09ERT5MSVNUPC9DT0RFPjwvQT4sIG9yCi0gICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1VOSU9OIj48Q09ERT5VTklPTjwvQ09ERT48L0E+LgotIDxsaT5BbiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNBVE9NSUMiPjxDT0RFPkFUT01JQzwvQ09ERT48L0E+IHNpbXBsZSB0eXBlIGlzIGFsd2F5cyBiYXNlZCBvbiBvbmUgb2YgdGhlCi0gICAgIDIwIGJ1aWx0LWluIHByaW1pdGl2ZSBzY2hlbWEgdHlwZXMuICBZb3UgY2FuIGRldGVybWluZQotICAgICB0aGUgdW5kZXJseWluZyBwcmltaXRpdmUgdHlwZSBmb3IgYW4gYXRvbWljIHNpbXBsZSB0eXBlCi0gICAgIGJ5IGNhbGxpbmcgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0UHJpbWl0aXZlVHlwZSgpIj48Q09ERT5nZXRQcmltaXRpdmVUeXBlKCk8L0NPREU+PC9BPi4gIEFuIGF0b21pYyB0eXBlCi0gICAgIG1heSBhZGQgZmFjZXQgcmVzdHJpY3Rpb25zIG9uIHRvcCBvZiB0aGUgcHJpbWl0aXZlIHR5cGUsCi0gICAgIGFuZCB0aGVzZSBmYWNldHMgY2FuIGJlIGV4cGxvcmVkIHVzaW5nIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldEZhY2V0KGludCkiPjxDT0RFPmdldEZhY2V0KGludCk8L0NPREU+PC9BPiwKLSAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0V2hpdGVTcGFjZVJ1bGUoKSI+PENPREU+Z2V0V2hpdGVTcGFjZVJ1bGUoKTwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNtYXRjaFBhdHRlcm5GYWNldChqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+bWF0Y2hQYXR0ZXJuRmFjZXQoamF2YS5sYW5nLlN0cmluZyk8L0NPREU+PC9BPiwKLSAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0RW51bWVyYXRpb25WYWx1ZXMoKSI+PENPREU+Z2V0RW51bWVyYXRpb25WYWx1ZXMoKTwvQ09ERT48L0E+LCBhbmQgcmVsYXRlZCBtZXRob2RzLgotIDxsaT5BIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0xJU1QiPjxDT0RFPkxJU1Q8L0NPREU+PC9BPiBzaW1wbGUgdHlwZSBpcyBhbHdheXMgYmFzZWQgb24gYW5vdGhlciBub24tbGlzdAotICAgICBzaW1wbGUgdHlwZS4gIFRoZSB1bmRlcmx5aW5nIGxpc3QgaXRlbSB0eXBlIGNhbiBiZSBvYnRhaW5lZAotICAgICBieSB1c2luZyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRMaXN0SXRlbVR5cGUoKSI+PENPREU+Z2V0TGlzdEl0ZW1UeXBlKCk8L0NPREU+PC9BPi4KLSA8bGk+QSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNVTklPTiI+PENPREU+VU5JT048L0NPREU+PC9BPiBzaW1wbGUgdHlwZSBpcyBhbHdheXMgY29tcG9zZWQgb3V0IG9mIGEgbnVtYmVyIG9mCi0gICAgIG90aGVyIHNpbXBsZSB0eXBlcy4gIFRoZSBkaXJlY3QgbWVtYmVycyBvZiB0aGUgdW5pb24gY2FuCi0gICAgIGJlIG9idGFpbmVkIGJ5IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldFVuaW9uTWVtYmVyVHlwZXMoKSI+PENPREU+Z2V0VW5pb25NZW1iZXJUeXBlcygpPC9DT0RFPjwvQT4uICBXaGVuIHVuaW9ucwotICAgICBjb25zaXN0IG9mIG90aGVyIHVuaW9ucywgaXQgaXMgdXNlZnVsIHRvIGtub3cgdXNlZnVsIHRvIGtub3cKLSAgICAgdGhlICJsZWF2ZXMgb2YgdGhlIHVuaW9uIHRyZWUiLCBzbyB0aGUKLSAgICAgc2V0IG9mIG5vbi11bmlvbiB0eXBlcyBtYWtpbmcgdXAgdGhlIHVuaW9uIGNhbiBiZSBvYnRhaW5lZAotICAgICBieSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRVbmlvbkNvbnN0aXR1ZW50VHlwZXMoKSI+PENPREU+Z2V0VW5pb25Db25zdGl0dWVudFR5cGVzKCk8L0NPREU+PC9BPi4gIFRoZSBjbG9zdXJlIG9mIHRoZQotICAgICBlbnRpcmUgInVuaW9uIHRyZWUiIGlzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldFVuaW9uU3ViVHlwZXMoKSI+PENPREU+Z2V0VW5pb25TdWJUeXBlcygpPC9DT0RFPjwvQT4gKHRoaXMgaW5jbHVkZXMKLSAgICAgdGhlIHR5cGUgaXRzZWxmKS4gIEZvcgotICAgICBzaW1wbGUgdW5pb25zIHRoYXQgZG8gbm90IGNvbnNpc3Qgb2Ygb3RoZXIgdW5pb25zLCBhbGwgdGhyZWUKLSAgICAgb2YgdGhlc2Ugc2V0cyBhcmUgdGhlIHNhbWUuCi0gPGxpPkNvbXBsZXggdHlwZXMgaGF2ZSBuZXN0ZWQgc3RydWN0dXJlLiAgVGhleSBhcmUgZGl2aWRlZCBpbnRvCi0gICAgIGZvdXIgY29udGVudCB0eXBlczogZW1wdHkgY29udGVudCwgc2ltcGxlIGNvbnRlbnQsIGVsZW1lbnQtb25seQotICAgICBjb250ZW50LCBhbmQgbWl4ZWQgY29udGVudC4gIEFsbCBraW5kcyBvZiBjb21wbGV4IHR5cGVzIG1heQotICAgICBoYXZlIGF0dHJpYnV0ZXMuICBUaGUgY29udGVudCB0eXBlIGZvciBhIGNvbXBsZXggdHlwZSBjYW4KLSAgICAgYmUgZGVybWluZWQgdXNpbmcgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0Q29udGVudFR5cGUoKSI+PENPREU+Z2V0Q29udGVudFR5cGUoKTwvQ09ERT48L0E+LiAgVGhpcyB3aWxsIHJldHVybgotICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNFTVBUWV9DT05URU5UIj48Q09ERT5FTVBUWV9DT05URU5UPC9DT0RFPjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1NJTVBMRV9DT05URU5UIj48Q09ERT5TSU1QTEVfQ09OVEVOVDwvQ09ERT48L0E+LAotICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNFTEVNRU5UX0NPTlRFTlQiPjxDT0RFPkVMRU1FTlRfQ09OVEVOVDwvQ09ERT48L0E+LCBvciA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNNSVhFRF9DT05URU5UIj48Q09ERT5NSVhFRF9DT05URU5UPC9DT0RFPjwvQT4uCi0gPGxpPklmIGEgY29tcGxleCB0eXBlIGhhcyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNFTVBUWV9DT05URU5UIj48Q09ERT5FTVBUWV9DT05URU5UPC9DT0RFPjwvQT4sIHRoZSBjb250ZW50IG1vZGVsIHdpbGwgYmUgbnVsbC4KLSA8bGk+SWYgYSBjb21wbGV4IHR5cGUgaGFzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1NJTVBMRV9DT05URU5UIj48Q09ERT5TSU1QTEVfQ09OVEVOVDwvQ09ERT48L0E+LCB0aGVuIGl0IHdpbGwgZXh0ZW5kIHRoZQotICAgICBzaW1wbGUgdHlwZSB0aGF0IGRlc2NyaWJlcyB0aGUgY29udGVudC4gIEluIGFkZGl0aW9uLCB0aGUgdHlwZQotICAgICBtYXkgaW1wb3NlIGFkZGl0aW9uYWwgc2ltcGxlIHR5cGUgZmFjZXQgcmVzdHJpY3Rpb25zOyB0aGVzZSBjYW4gCi0gICAgIGJlIGRldGVybWluZWQgaW4gdGhlIHNhbWUgd2F5IHRoZXkgYXJlIGZvciBhIHNpbXBsZSB0eXBlLgotIDxsaT5JZiBhIGNvbXBsZXggdHlwZSBoYXMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjRUxFTUVOVF9DT05URU5UIj48Q09ERT5FTEVNRU5UX0NPTlRFTlQ8L0NPREU+PC9BPiBvciA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNNSVhFRF9DT05URU5UIj48Q09ERT5NSVhFRF9DT05URU5UPC9DT0RFPjwvQT4sIHRoZW4KLSAgICAgdGhlIGRldGFpbGVkIGNvbnRlbnQgbW9kZWwgY2FuIGJlIGRldGVybWluZWQgYnkgZXhhbWluaW5nCi0gICAgIHRoZSBwYXJ0aWNsZSB0cmVlICh3aGljaCBtYXkgYmUgbnVsbCBmb3IgTUlYRURfQ09OVEVOVCkuCi0gICAgIFRoZSBwYXJ0aWNsZSB0cmVlIGNhbiBiZSBvYnRhaW5lZCB2aWEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0Q29udGVudE1vZGVsKCkiPjxDT0RFPmdldENvbnRlbnRNb2RlbCgpPC9DT0RFPjwvQT4uCi0gPGxpPldoZW4gd29ya2luZyB3aXRoIGEgY29tcGxleCB0eXBlLCBtb3N0IHVzZXJzIHdpbGwgZmluZCBpdAotICAgICBzdWZmaWNpZW50IHRvIGRpc2NvdmVyIHRoZSBzdW1tYXJpemVkIHNoYXBlIG9mIHRoZSBjb250ZW50IG1vZGVsCi0gICAgIGFuZCBhdHRyaWJ1dGUgbW9kZWwgdXNpbmcgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0RWxlbWVudFByb3BlcnRpZXMoKSI+PENPREU+Z2V0RWxlbWVudFByb3BlcnRpZXMoKTwvQ09ERT48L0E+LAotICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRBdHRyaWJ1dGVQcm9wZXJ0aWVzKCkiPjxDT0RFPmdldEF0dHJpYnV0ZVByb3BlcnRpZXMoKTwvQ09ERT48L0E+LCBhbmQgcmVsYXRlZCBtZXRob2RzIHJhdGhlciB0aGFuCi0gICAgIGV4YW1pbmluZyB0aGUgcGFydGljbGUgdHJlZSBhbmQgYXR0cmlidXRlIG1vZGVsIGRpcmVjdGx5LgotIDwvdWw+Ci08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+PENPREU+U2NoZW1hVHlwZUxvYWRlcjwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2NoZW1hVHlwZSgpIj48Q09ERT5YbWxPYmplY3Quc2NoZW1hVHlwZSgpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2luc3RhbmNlVHlwZSgpIj48Q09ERT5TaW1wbGVWYWx1ZS5pbnN0YW5jZVR5cGUoKTwvQ09ERT48L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5OZXN0ZWQgQ2xhc3MgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2NsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5SZWYuaHRtbCI+U2NoZW1hVHlwZS5SZWY8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VXNlZCB0byBhbGxvdyBvbi1kZW1hbmQgbG9hZGluZyBvZiB0eXBlcy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYUNvbXBvbmVudCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0FUT01JQyI+QVRPTUlDPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0F0b21pYyB0eXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0FOWV9TSU1QTEUiPkJUQ19BTllfU0lNUExFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3hzOmFueVNpbXBsZVR5cGUsIGFrYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCN0eXBlIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlLnR5cGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0FOWV9UWVBFIj5CVENfQU5ZX1RZUEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7eHM6YW55VHlwZSwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdHlwZSI+PENPREU+WG1sT2JqZWN0LnR5cGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0FOWV9VUkkiPkJUQ19BTllfVVJJPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3hzOmFueVVSSSwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwjdHlwZSI+PENPREU+WG1sQW55VVJJLnR5cGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0JBU0VfNjRfQklOQVJZIj5CVENfQkFTRV82NF9CSU5BUlk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7eHM6YmFzZTY0QmluYXJ5LCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCN0eXBlIj48Q09ERT5YbWxCYXNlNjRCaW5hcnkudHlwZTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfQk9PTEVBTiI+QlRDX0JPT0xFQU48L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7eHM6Ym9vbGVhbiwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sI3R5cGUiPjxDT0RFPlhtbEJvb2xlYW4udHlwZTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfQllURSI+QlRDX0JZVEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7eHM6Ynl0ZSwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sI3R5cGUiPjxDT0RFPlhtbEJ5dGUudHlwZTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfREFURSI+QlRDX0RBVEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7eHM6ZGF0ZSwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sI3R5cGUiPjxDT0RFPlhtbERhdGUudHlwZTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfREFURV9USU1FIj5CVENfREFURV9USU1FPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3hzOmRhdGVUaW1lLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sI3R5cGUiPjxDT0RFPlhtbERhdGVUaW1lLnR5cGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0RFQ0lNQUwiPkJUQ19ERUNJTUFMPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3hzOmRlY2ltYWwsIGFrYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCN0eXBlIj48Q09ERT5YbWxEZWNpbWFsLnR5cGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0RPVUJMRSI+QlRDX0RPVUJMRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt4czpkb3VibGUsIGFrYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sI3R5cGUiPjxDT0RFPlhtbERvdWJsZS50eXBlPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19EVVJBVElPTiI+QlRDX0RVUkFUSU9OPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3hzOmR1cmF0aW9uLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sI3R5cGUiPjxDT0RFPlhtbER1cmF0aW9uLnR5cGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0VOVElUSUVTIj5CVENfRU5USVRJRVM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7eHM6RU5USVRJRVMsIGFrYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwjdHlwZSI+PENPREU+WG1sRU5USVRJRVMudHlwZTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfRU5USVRZIj5CVENfRU5USVRZPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3hzOkVOVElUWSwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwjdHlwZSI+PENPREU+WG1sRU5USVRZLnR5cGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0ZJUlNUX1BSSU1JVElWRSI+QlRDX0ZJUlNUX1BSSU1JVElWRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgcHJpbWl0aXZlIHR5cGVzIGhhdmUgY29kZXMgYmV0d2VlbiBCVENfRklSU1RfUFJJTUlUSVZFIGFuZCBCVENfTEFTVF9QUklNSVRJVkUgaW5jbHVzaXZlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfRkxPQVQiPkJUQ19GTE9BVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt4czpmbG9hdCwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCN0eXBlIj48Q09ERT5YbWxGbG9hdC50eXBlPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19HX0RBWSI+QlRDX0dfREFZPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3hzOmdEYXksIGFrYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCN0eXBlIj48Q09ERT5YbWxHRGF5LnR5cGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0dfTU9OVEgiPkJUQ19HX01PTlRIPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3hzOmdNb250aCwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwjdHlwZSI+PENPREU+WG1sR01vbnRoLnR5cGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0dfTU9OVEhfREFZIj5CVENfR19NT05USF9EQVk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7eHM6Z01vbnRoRGF5LCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCN0eXBlIj48Q09ERT5YbWxHTW9udGhEYXkudHlwZTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfR19ZRUFSIj5CVENfR19ZRUFSPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3hzOmdZZWFyLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sI3R5cGUiPjxDT0RFPlhtbEdZZWFyLnR5cGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0dfWUVBUl9NT05USCI+QlRDX0dfWUVBUl9NT05USDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt4czpnWWVhck1vbnRoLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwjdHlwZSI+PENPREU+WG1sR1llYXJNb250aC50eXBlPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19IRVhfQklOQVJZIj5CVENfSEVYX0JJTkFSWTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt4czpoZXhCaW5hcnksIGFrYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sI3R5cGUiPjxDT0RFPlhtbEJhc2U2NEJpbmFyeS50eXBlPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19JRCI+QlRDX0lEPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3hzOklELCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sI3R5cGUiPjxDT0RFPlhtbElELnR5cGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0lEUkVGIj5CVENfSURSRUY8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7eHM6SURSRUYsIGFrYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwjdHlwZSI+PENPREU+WG1sSURSRUYudHlwZTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfSURSRUZTIj5CVENfSURSRUZTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3hzOklEUkVGUywgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwjdHlwZSI+PENPREU+WG1sSURSRUZTLnR5cGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0lOVCI+QlRDX0lOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt4czppbnQsIGFrYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sI3R5cGUiPjxDT0RFPlhtbEludC50eXBlPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19JTlRFR0VSIj5CVENfSU5URUdFUjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt4czppbnRlZ2VyLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwjdHlwZSI+PENPREU+WG1sSW50ZWdlci50eXBlPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19MQU5HVUFHRSI+QlRDX0xBTkdVQUdFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3hzOmxhbmd1YWdlLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sI3R5cGUiPjxDT0RFPlhtbExhbmd1YWdlLnR5cGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX0xBU1RfQlVJTFRJTiI+QlRDX0xBU1RfQlVJTFRJTjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19MQVNUX1BSSU1JVElWRSI+QlRDX0xBU1RfUFJJTUlUSVZFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBwcmltaXRpdmUgdHlwZXMgaGF2ZSBjb2RlcyBiZXR3ZWVuIEJUQ19GSVJTVF9QUklNSVRJVkUgYW5kIEJUQ19MQVNUX1BSSU1JVElWRSBpbmNsdXNpdmU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19MT05HIj5CVENfTE9ORzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt4czpsb25nLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwjdHlwZSI+PENPREU+WG1sTG9uZy50eXBlPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19OQU1FIj5CVENfTkFNRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt4czpOYW1lLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwjdHlwZSI+PENPREU+WG1sTmFtZS50eXBlPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19OQ05BTUUiPkJUQ19OQ05BTUU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7eHM6TkNOYW1lLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCN0eXBlIj48Q09ERT5YbWxOQ05hbWUudHlwZTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfTkVHQVRJVkVfSU5URUdFUiI+QlRDX05FR0FUSVZFX0lOVEVHRVI8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7eHM6TmVnYXRpdmVJbnRlZ2VyLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCN0eXBlIj48Q09ERT5YbWxOZWdhdGl2ZUludGVnZXIudHlwZTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfTk1UT0tFTiI+QlRDX05NVE9LRU48L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7eHM6Tk1UT0tFTiwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sI3R5cGUiPjxDT0RFPlhtbE5NVE9LRU4udHlwZTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfTk1UT0tFTlMiPkJUQ19OTVRPS0VOUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt4czpOTVRPS0VOUywgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCN0eXBlIj48Q09ERT5YbWxOTVRPS0VOUy50eXBlPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19OT05fTkVHQVRJVkVfSU5URUdFUiI+QlRDX05PTl9ORUdBVElWRV9JTlRFR0VSPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3hzOm5vbk5lZ2F0aXZlSW50ZWdlciwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwjdHlwZSI+PENPREU+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyLnR5cGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX05PTl9QT1NJVElWRV9JTlRFR0VSIj5CVENfTk9OX1BPU0lUSVZFX0lOVEVHRVI8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7eHM6bm9uUG9zaXRpdmVJbnRlZ2VyLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCN0eXBlIj48Q09ERT5YbWxOb25Qb3NpdGl2ZUludGVnZXIudHlwZTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfTk9STUFMSVpFRF9TVFJJTkciPkJUQ19OT1JNQUxJWkVEX1NUUklORzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt4czpub3JtYWxpemVkU3RyaW5nLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwjdHlwZSI+PENPREU+WG1sTm9ybWFsaXplZFN0cmluZy50eXBlPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19OT1RfQlVJTFRJTiI+QlRDX05PVF9CVUlMVElOPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO05vdCBhIGJ1aWx0aW4gdHlwZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX05PVEFUSU9OIj5CVENfTk9UQVRJT048L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7eHM6Tk9UQVRJT04sIGFrYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwjdHlwZSI+PENPREU+WG1sTk9UQVRJT04udHlwZTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfUE9TSVRJVkVfSU5URUdFUiI+QlRDX1BPU0lUSVZFX0lOVEVHRVI8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7eHM6cG9zaXRpdmVJbnRlZ2VyLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCN0eXBlIj48Q09ERT5YbWxQb3NpdGl2ZUludGVnZXIudHlwZTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNCVENfUU5BTUUiPkJUQ19RTkFNRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt4czpRTmFtZSwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCN0eXBlIj48Q09ERT5YbWxRTmFtZS50eXBlPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19TSE9SVCI+QlRDX1NIT1JUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3hzOnNob3J0LCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sI3R5cGUiPjxDT0RFPlhtbFNob3J0LnR5cGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX1NUUklORyI+QlRDX1NUUklORzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt4czpzdHJpbmcsIGFrYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sI3R5cGUiPjxDT0RFPlhtbFN0cmluZy50eXBlPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19USU1FIj5CVENfVElNRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt4czp0aW1lLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwjdHlwZSI+PENPREU+WG1sVGltZS50eXBlPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19UT0tFTiI+QlRDX1RPS0VOPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3hzOnRva2VuLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sI3R5cGUiPjxDT0RFPlhtbFRva2VuLnR5cGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX1VOU0lHTkVEX0JZVEUiPkJUQ19VTlNJR05FRF9CWVRFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3hzOnVuc2lnbmVkQnl0ZSwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwjdHlwZSI+PENPREU+WG1sVW5zaWduZWRCeXRlLnR5cGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjQlRDX1VOU0lHTkVEX0lOVCI+QlRDX1VOU0lHTkVEX0lOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt4czp1bnNpZ25lZEludCwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCN0eXBlIj48Q09ERT5YbWxVbnNpZ25lZEludC50eXBlPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19VTlNJR05FRF9MT05HIj5CVENfVU5TSUdORURfTE9ORzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt4czp1bnNpZ25lZExvbmcsIGFrYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sI3R5cGUiPjxDT0RFPlhtbFVuc2lnbmVkTG9uZy50eXBlPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0JUQ19VTlNJR05FRF9TSE9SVCI+QlRDX1VOU0lHTkVEX1NIT1JUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3hzOnVuc2lnbmVkU2hvcnQsIGFrYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCN0eXBlIj48Q09ERT5YbWxVbnNpZ25lZFNob3J0LnR5cGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjRFRfRVhURU5TSU9OIj5EVF9FWFRFTlNJT048L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7RGVyaXZlZCBieSBleHRlbnNpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNEVF9OT1RfREVSSVZFRCI+RFRfTk9UX0RFUklWRUQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Tm90IGRlcml2ZWQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNEVF9SRVNUUklDVElPTiI+RFRfUkVTVFJJQ1RJT048L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7RGVyaXZlZCBieSByZXN0cmljdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0VMRU1FTlRfQ09OVEVOVCI+RUxFTUVOVF9DT05URU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0VsZW1lbnQtb25seSBjb250ZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjRU1QVFlfQ09OVEVOVCI+RU1QVFlfQ09OVEVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtFbXB0eSBjb250ZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjRkFDRVRfRU5VTUVSQVRJT04iPkZBQ0VUX0VOVU1FUkFUSU9OPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3hzOmVudW1lcmF0aW9uIGZhY2V0IC0gdXNlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldEVudW1lcmF0aW9uVmFsdWVzKCkiPjxDT0RFPmdldEVudW1lcmF0aW9uVmFsdWVzKCk8L0NPREU+PC9BPiBpbnN0ZWFkPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNGQUNFVF9GUkFDVElPTl9ESUdJVFMiPkZBQ0VUX0ZSQUNUSU9OX0RJR0lUUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt4czpmcmFjdGlvbkRpZ2l0cyBmYWNldDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjRkFDRVRfTEVOR1RIIj5GQUNFVF9MRU5HVEg8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7eHM6bGVuZ3RoIGZhY2V0PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNGQUNFVF9NQVhfRVhDTFVTSVZFIj5GQUNFVF9NQVhfRVhDTFVTSVZFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3hzOm1heEV4Y2x1c2l2ZSBmYWNldDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjRkFDRVRfTUFYX0lOQ0xVU0lWRSI+RkFDRVRfTUFYX0lOQ0xVU0lWRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt4czptYXhJbmNsdXNpdmUgZmFjZXQ8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0ZBQ0VUX01BWF9MRU5HVEgiPkZBQ0VUX01BWF9MRU5HVEg8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7eHM6bWF4TGVuZ3RoIGZhY2V0PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNGQUNFVF9NSU5fRVhDTFVTSVZFIj5GQUNFVF9NSU5fRVhDTFVTSVZFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3hzOm1pbkV4Y2x1c2l2ZSBmYWNldDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjRkFDRVRfTUlOX0lOQ0xVU0lWRSI+RkFDRVRfTUlOX0lOQ0xVU0lWRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt4czptaW5JbmNsdXNpdmUgZmFjZXQ8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0ZBQ0VUX01JTl9MRU5HVEgiPkZBQ0VUX01JTl9MRU5HVEg8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7eHM6bWluTGVuZ3RoIGZhY2V0PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNGQUNFVF9QQVRURVJOIj5GQUNFVF9QQVRURVJOPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3hzOnBhdHRlcm4gZmFjZXQgLSB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjbWF0Y2hQYXR0ZXJuRmFjZXQoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPm1hdGNoUGF0dGVybkZhY2V0KGphdmEubGFuZy5TdHJpbmcpPC9DT0RFPjwvQT4gaW5zdGVhZDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjRkFDRVRfVE9UQUxfRElHSVRTIj5GQUNFVF9UT1RBTF9ESUdJVFM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7eHM6dG90YWxEaWdpdHMgZmFjZXQ8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0ZBQ0VUX1dISVRFX1NQQUNFIj5GQUNFVF9XSElURV9TUEFDRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt4czp3aGl0ZVNwYWNlIGZhY2V0IC0gdXNlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldFdoaXRlU3BhY2VSdWxlKCkiPjxDT0RFPmdldFdoaXRlU3BhY2VSdWxlKCk8L0NPREU+PC9BPiBpbnN0ZWFkPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNMQVNUX0JBU0lDX0ZBQ0VUIj5MQVNUX0JBU0lDX0ZBQ0VUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjTEFTVF9GQUNFVCI+TEFTVF9GQUNFVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgbGFzdCBvcmRpbmFyeSBmYWNldCBjb2RlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNMQVNUX1BST1BFUlRZIj5MQVNUX1BST1BFUlRZPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBsYXN0IHByb3BlcnR5IGNvZGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0xJU1QiPkxJU1Q8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2ltcGxlIGxpc3QgdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI01JWEVEX0NPTlRFTlQiPk1JWEVEX0NPTlRFTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7TWl4ZWQgY29udGVudC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI05PVF9DT01QTEVYX1RZUEUiPk5PVF9DT01QTEVYX1RZUEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Tm90IGEgY29tcGxleCB0eXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjTk9UX0RFQ0lNQUwiPk5PVF9ERUNJTUFMPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO05vdCBhIGRlY2ltYWwgcmVzdHJpY3Rpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNOT1RfU0lNUExFIj5OT1RfU0lNUExFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO05vdCBhIHNpbXBsZSB0eXBlIG9yIHNpbXBsZSBjb250ZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjUEFSVElBTF9PUkRFUiI+UEFSVElBTF9PUkRFUjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJ0aWFsbHkgb3JkZXJlZC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1BST1BFUlRZX0JPVU5ERUQiPlBST1BFUlRZX0JPVU5ERUQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNQUk9QRVJUWV9DQVJESU5BTElUWSI+UFJPUEVSVFlfQ0FSRElOQUxJVFk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNQUk9QRVJUWV9OVU1FUklDIj5QUk9QRVJUWV9OVU1FUklDPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjUFJPUEVSVFlfT1JERVJFRCI+UFJPUEVSVFlfT1JERVJFRDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1NJTVBMRV9DT05URU5UIj5TSU1QTEVfQ09OVEVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTaW1wbGUgY29udGVudC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1NJWkVfQklHX0RFQ0lNQUwiPlNJWkVfQklHX0RFQ0lNQUw8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Rml0cyBpbiBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj48Q09ERT5CaWdEZWNpbWFsPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNTSVpFX0JJR19JTlRFR0VSIj5TSVpFX0JJR19JTlRFR0VSPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0ZpdHMgaW4gYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCI+PENPREU+QmlnSW50ZWdlcjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjU0laRV9CWVRFIj5TSVpFX0JZVEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Rml0cyBpbiBhIGJ5dGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNTSVpFX0lOVCI+U0laRV9JTlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Rml0cyBpbiBhbiBpbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNTSVpFX0xPTkciPlNJWkVfTE9ORzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtGaXRzIGluIGEgbG9uZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1NJWkVfU0hPUlQiPlNJWkVfU0hPUlQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Rml0cyBpbiBhIHNob3J0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjVE9UQUxfT1JERVIiPlRPVEFMX09SREVSPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RvdGFsbHkgb3JkZXJlZC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1VOSU9OIj5VTklPTjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtVbmlvbiB0eXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjVU5PUkRFUkVEIj5VTk9SREVSRUQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VW5vcmRlcmVkLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjV1NfQ09MTEFQU0UiPldTX0NPTExBUFNFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1doaXRlc3BhY2UgY29sbGFwc2VkIGFuZCB0cmltbWVkLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjV1NfUFJFU0VSVkUiPldTX1BSRVNFUlZFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1doaXRlc3BhY2UgcHJlc2VydmVkLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjV1NfUkVQTEFDRSI+V1NfUkVQTEFDRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtXaGl0ZXNwYWNlIHJlcGxhY2VkIGJ5IG9yZGluYXJ5IHNwYWNlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjV1NfVU5TUEVDSUZJRUQiPldTX1VOU1BFQ0lGSUVEPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1doaXRlc3BhY2UgcnVsZSB1bnNwZWNpZmllZC48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjQVRUUklCVVRFIj5BVFRSSUJVVEU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI0FUVFJJQlVURV9HUk9VUCI+QVRUUklCVVRFX0dST1VQPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNFTEVNRU5UIj5FTEVNRU5UPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNJREVOVElUWV9DT05TVFJBSU5UIj5JREVOVElUWV9DT05TVFJBSU5UPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNNT0RFTF9HUk9VUCI+TU9ERUxfR1JPVVA8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI05PVEFUSU9OIj5OT1RBVElPTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjVFlQRSI+VFlQRTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjYmxvY2tFeHRlbnNpb24oKSI+YmxvY2tFeHRlbnNpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIGV4dGVuc2lvbnMgb2YgdGhpcyB0eXBlIGNhbm5vdCBiZSBzdWJzdGl0dXRlZCBmb3IgdGhpcyB0eXBlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjYmxvY2tSZXN0cmljdGlvbigpIj5ibG9ja1Jlc3RyaWN0aW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiByZXN0cmljdGlvbnMgb2YgdGhpcyB0eXBlIGNhbm5vdCBiZSBzdWJzdGl0dXRlZCBmb3IgdGhpcyB0eXBlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hU3RyaW5nRW51bUVudHJ5Lmh0bWwiPlNjaGVtYVN0cmluZ0VudW1FbnRyeTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZW51bUVudHJ5Rm9yU3RyaW5nKGphdmEubGFuZy5TdHJpbmcpIj5lbnVtRW50cnlGb3JTdHJpbmc8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHN0cmluZyBlbnVtIGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGVudW1lcmF0ZWQKLSBzdHJpbmcsIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gbWF0Y2ggb3IgdGhpcyB0eXBlIGlzIG5vdAotIGEgc3RyaW5nIGVudW1lcmF0aW9uLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuaHRtbCI+U3RyaW5nRW51bUFic3RyYWN0QmFzZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZW51bUZvckludChpbnQpIj5lbnVtRm9ySW50PC9BPjwvQj4oaW50Jm5ic3A7aSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHN0cmluZyBlbnVtIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGVudW1lcmF0ZWQKLSBzdHJpbmcsIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gbWF0Y2ggb3IgdGhpcyB0eXBlIGlzIG5vdAotIGEgc3RyaW5nIGVudW1lcmF0aW9uLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuaHRtbCI+U3RyaW5nRW51bUFic3RyYWN0QmFzZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZW51bUZvclN0cmluZyhqYXZhLmxhbmcuU3RyaW5nKSI+ZW51bUZvclN0cmluZzwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgc3RyaW5nIGVudW0gdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gZW51bWVyYXRlZAotIHN0cmluZywgb3IgbnVsbCBpZiB0aGVyZSBpcyBubyBtYXRjaCBvciB0aGlzIHR5cGUgaXMgbm90Ci0gYSBzdHJpbmcgZW51bWVyYXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZmluYWxFeHRlbnNpb24oKSI+ZmluYWxFeHRlbnNpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIG90aGVyIHR5cGVzIGNhbm5vdCBleHRlbmQgdGhpcyB0eXBlIChvbmx5IGZvciBjb21wbGV4IHR5cGVzKTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2ZpbmFsTGlzdCgpIj5maW5hbExpc3Q8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIGxpc3QgZGVyaXZhdGlvbiBvZiB0aGlzIHR5cGUgaXMgcHJvaGliaXRlZCAob25seSBmb3Igc2ltcGxlIHR5cGVzKTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2ZpbmFsUmVzdHJpY3Rpb24oKSI+ZmluYWxSZXN0cmljdGlvbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgb3RoZXIgdHlwZXMgY2Fubm90IHJlc3RyaWN0IHRoaXMgdHlwZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2ZpbmFsVW5pb24oKSI+ZmluYWxVbmlvbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgdW5pb24gZGVyaXZhdGlvbiBvZiB0aGlzIHR5cGUgaXMgcHJvaGliaXRlZCAob25seSBmb3Igc2ltcGxlIHR5cGVzKTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT5bXTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRBbm9ueW1vdXNUeXBlcygpIj5nZXRBbm9ueW1vdXNUeXBlczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBhcnJheSBvZiBpbm5lciAoYW5vbnltb3VzKSB0eXBlcyBkZWZpbmVkCi0gd2l0aGluIHRoaXMgdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldEFub255bW91c1VuaW9uTWVtYmVyT3JkaW5hbCgpIj5nZXRBbm9ueW1vdXNVbmlvbk1lbWJlck9yZGluYWw8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtGb3IgYW5vbnltb3VzIHR5cGVzIGRlZmluZWQgaW5zaWRlIGEgdW5pb24gb25seTogZ2V0cwotIHRoZSBpbnRlZ2VyIGluZGljYXRpbmcgdGhlIGRlY2xhcmF0aW9uIG9yZGVyIG9mIHRoaXMKLSB0eXBlIHdpdGhpbiB0aGUgb3V0ZXIgdW5pb24gdHlwZSwgb3IgemVybyBpZiB0aGlzIGlzCi0gbm90IGFwcGxpY2FibGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCI+U2NoZW1hQXR0cmlidXRlTW9kZWw8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldEF0dHJpYnV0ZU1vZGVsKCkiPmdldEF0dHJpYnV0ZU1vZGVsPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgYXR0cmlidXRlIG1vZGVsIGZvciB0aGlzIGNvbXBsZXggdHlwZSAod2l0aCBzaW1wbGUgb3IgY29tcGxleCBjb250ZW50KS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sIj5TY2hlbWFQcm9wZXJ0eTwvQT5bXTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRBdHRyaWJ1dGVQcm9wZXJ0aWVzKCkiPmdldEF0dHJpYnV0ZVByb3BlcnRpZXM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGFsbCB0aGUgU2NoZW1hUHJvcGVydGllcyBjb3JyZXNwb25kaW5nIHRvIGF0dHJpYnV0ZXMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCI+U2NoZW1hUHJvcGVydHk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldEF0dHJpYnV0ZVByb3BlcnR5KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5nZXRBdHRyaWJ1dGVQcm9wZXJ0eTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDthdHRyTmFtZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBTY2hlbWFQcm9wZXJ0eSBjb3JyZXNwb25kaW5nIHRvIGFuIGF0dHJpYnV0ZSB3aXRoaW4gdGhpcwotIGNvbXBsZXggdHlwZSBieSBsb29raW5nIHVwIHRoZSBhdHRyaWJ1dGUgbmFtZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldEF0dHJpYnV0ZVR5cGUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSwgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyKSI+Z2V0QXR0cmlidXRlVHlwZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtlbHROYW1lLAotICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+U2NoZW1hVHlwZUxvYWRlcjwvQT4mbmJzcDt3aWxkY2FyZFR5cGVMb2FkZXIpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB0eXBlIG9mIGFuIGF0dHJpYnV0ZSBiYXNlZCBvbiB0aGUgYXR0cmlidXRlIG5hbWUgYW5kCi0gdGhlIHR5cGUgc3lzdGVtIHdpdGhpbiB3aGljaCAod2lsZGNhcmQpIG5hbWVzIGFyZSByZXNvbHZlZC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRBdHRyaWJ1dGVUeXBlQXR0cmlidXRlTmFtZSgpIj5nZXRBdHRyaWJ1dGVUeXBlQXR0cmlidXRlTmFtZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGF0dHJpYnV0ZSBxbmFtZSBpZiB0aGlzIGlzIGEgYXR0cmlidXRlIHR5cGUsCi0gb3IgbnVsbCBvdGhlcndpc2UuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRCYXNlRW51bVR5cGUoKSI+Z2V0QmFzZUVudW1UeXBlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SWYgdGhpcyBpcyBhIHN0cmluZyBlbnVtZXJhdGlvbiwgcmV0dXJucyB0aGUgbW9zdCBiYXNpYyBiYXNlIHNjaGVtYQotIHR5cGUgdGhhdCB0aGlzIGVudWVtcmF0aW9uIGlzIGJhc2VkIG9uLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0QmFzZVR5cGUoKSI+Z2V0QmFzZVR5cGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGJhc2UgcmVzdHJpY3Rpb24gb3IgZXh0ZW5zaW9uIHR5cGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRCdWlsdGluVHlwZUNvZGUoKSI+Z2V0QnVpbHRpblR5cGVDb2RlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhbiBpbnRlZ2VyIGZvciBidWlsdGluIHR5cGVzIHRoYXQgY2FuIGJlIHVzZWQKLSBmb3IgcXVpY2sgY29tcGFyaXNvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldENvbW1vbkJhc2VUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPmdldENvbW1vbkJhc2VUeXBlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Jm5ic3A7dHlwZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgY29tbW9uIGJhc2UgdHlwZSB3aXRoIHRoZSBnaXZlbiB0eXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwiPlNjaGVtYUZpZWxkPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRDb250YWluZXJGaWVsZCgpIj5nZXRDb250YWluZXJGaWVsZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBwYXJlbnQgc2NoZW1hIGVsZW1lbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUGFydGljbGUuaHRtbCI+U2NoZW1hUGFydGljbGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldENvbnRlbnRNb2RlbCgpIj5nZXRDb250ZW50TW9kZWw8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBjb21wbGV4IGNvbnRlbnQgbW9kZWwgZm9yIHRoaXMgY29tcGxleCB0eXBlICh3aXRoIGNvbXBsZXggY29udGVudCkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRDb250ZW50VHlwZSgpIj5nZXRDb250ZW50VHlwZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjRU1QVFlfQ09OVEVOVCI+PENPREU+RU1QVFlfQ09OVEVOVDwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNTSU1QTEVfQ09OVEVOVCI+PENPREU+U0lNUExFX0NPTlRFTlQ8L0NPREU+PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjRUxFTUVOVF9DT05URU5UIj48Q09ERT5FTEVNRU5UX0NPTlRFTlQ8L0NPREU+PC9BPiwgb3IKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNNSVhFRF9DT05URU5UIj48Q09ERT5NSVhFRF9DT05URU5UPC9DT0RFPjwvQT4gZm9yIGNvbXBsZXggdHlwZXMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXREZWNpbWFsU2l6ZSgpIj5nZXREZWNpbWFsU2l6ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0ZvciBhdG9taWMgbnVtZXJpYyByZXN0cmljdGlvbnMgb2YgZGVjaW1hbCBvbmx5OiB0aGUKLSBudW1lcmljIHNpemUgY2F0ZWdvcnkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXREZXJpdmF0aW9uVHlwZSgpIj5nZXREZXJpdmF0aW9uVHlwZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYW4gaW50ZWdlciBmb3IgdGhlIGRlcml2YXRpb24gdHlwZSwgZWl0aGVyIAotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0RUX0VYVEVOU0lPTiI+PENPREU+RFRfRVhURU5TSU9OPC9DT0RFPjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0RUX1JFU1RSSUNUSU9OIj48Q09ERT5EVF9SRVNUUklDVElPTjwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNEVF9OT1RfREVSSVZFRCI+PENPREU+RFRfTk9UX0RFUklWRUQ8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sIj5TY2hlbWFQcm9wZXJ0eTwvQT5bXTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXREZXJpdmVkUHJvcGVydGllcygpIj5nZXREZXJpdmVkUHJvcGVydGllczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIFNjaGVtYVByb3BlcnRpZXMgZGVmaW5lZCBieSB0aGlzIGNvbXBsZXggdHlwZSwKLSBleGNsdXNpdmUgb2YgdGhlIGJhc2UgdHlwZSAoaWYgYW55KS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXREb2N1bWVudEVsZW1lbnROYW1lKCkiPmdldERvY3VtZW50RWxlbWVudE5hbWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBkb2N1bWVudCBlbGVtZW50IG5hbWUgaWYgdGhpcyBpcyBhIGRvY3VtZW50IHR5cGUsCi0gb3IgbnVsbCBvdGhlcndpc2UuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCI+U2NoZW1hUHJvcGVydHk8L0E+W108L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0RWxlbWVudFByb3BlcnRpZXMoKSI+Z2V0RWxlbWVudFByb3BlcnRpZXM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGFsbCB0aGUgU2NoZW1hUHJvcGVydGllcyBjb3JyZXNwb25kaW5nIHRvIGVsZW1lbnRzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwiPlNjaGVtYVByb3BlcnR5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRFbGVtZW50UHJvcGVydHkoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPmdldEVsZW1lbnRQcm9wZXJ0eTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtlbHROYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIFNjaGVtYVByb3BlcnR5IGNvcnJlc3BvbmRpbmcgdG8gYW4gZWxlbWVudCB3aXRoaW4gdGhpcwotIGNvbXBsZXggdHlwZSBieSBsb29raW5nIHVwIHRoZSBlbGVtZW50IG5hbWUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRFbGVtZW50VHlwZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lLCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXIpIj5nZXRFbGVtZW50VHlwZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtlbHROYW1lLAotICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO3hzaVR5cGUsCi0gICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+U2NoZW1hVHlwZUxvYWRlcjwvQT4mbmJzcDt3aWxkY2FyZFR5cGVMb2FkZXIpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB0eXBlIG9mIGEgY2hpbGQgZWxlbWVudCBiYXNlZCBvbiB0aGUgZWxlbWVudCBuYW1lIGFuZAotIGFuIHhzaTp0eXBlIGF0dHJpYnV0ZSAoYW5kIHRoZSB0eXBlIHN5c3RlbSB3aXRoaW4gd2hpY2ggbmFtZXMgYXJlCi0gcmVzb2x2ZWQpLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT5bXTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRFbnVtZXJhdGlvblZhbHVlcygpIj5nZXRFbnVtZXJhdGlvblZhbHVlczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGFycmF5IG9mIHZhbGlkIG9iamVjdHMgZnJvbSB0aGUKLSBlbnVtZXJhdGlvbiBmYWNldCwgbnVsbCBpZiBubyBlbnVtZXJhdGlvbiBkZWZpbmVkLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0NsYXNzLmh0bWwiPkNsYXNzPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRFbnVtSmF2YUNsYXNzKCkiPmdldEVudW1KYXZhQ2xhc3M8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgSmF2YSBjbGFzcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBlbnVtZXJhdGlvbiB0eXBlIGZvciB0aGlzIHNjaGVtYSB0eXBlLAotIGlmIGFwcGxpY2FibGUgKG9yIG51bGwgaWYgbm90IGFuIGVudW1lcmF0aW9uKS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldEZhY2V0KGludCkiPmdldEZhY2V0PC9BPjwvQj4oaW50Jm5ic3A7ZmFjZXRDb2RlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGdpdmVuIGZhY2V0LCBvciBudWxsIGlmCi0gbm9uZSBpcyBzZXQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0RnVsbEphdmFJbXBsTmFtZSgpIj5nZXRGdWxsSmF2YUltcGxOYW1lPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGZ1bGx5LXF1YWxpZmllZCBKYXZhIHR5cGUgbmFtZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3MuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0RnVsbEphdmFOYW1lKCkiPmdldEZ1bGxKYXZhTmFtZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBmdWxseS1xdWFsaWZpZWQgSmF2YSB0eXBlIG5hbWUgb2YgdGhlIGNsYXNzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0NsYXNzLmh0bWwiPkNsYXNzPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRKYXZhQ2xhc3MoKSI+Z2V0SmF2YUNsYXNzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIEphdmEgY2xhc3MgY29ycmVzcG9uZGluZyB0byB0aGlzIHNjaGVtYSB0eXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0TGlzdEl0ZW1UeXBlKCkiPmdldExpc3RJdGVtVHlwZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0ZvciBsaXN0IHR5cGVzIG9ubHk6IGdldCB0aGUgaXRlbSB0eXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldE5hbWUoKSI+Z2V0TmFtZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBuYW1lIHVzZWQgdG8gZGVzY3JpYmUgdGhlIHR5cGUgaW4gdGhlIHNjaGVtYS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldE91dGVyVHlwZSgpIj5nZXRPdXRlclR5cGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgb3V0ZXIgc2NoZW1hIHR5cGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT5bXTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRQYXR0ZXJucygpIj5nZXRQYXR0ZXJuczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldFByaW1pdGl2ZVR5cGUoKSI+Z2V0UHJpbWl0aXZlVHlwZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0ZvciBhdG9taWMgdHlwZXMgb25seTogZ2V0IHRoZSBwcmltaXRpdmUgdHlwZSB1bmRlcmx5aW5nIHRoaXMgb25lLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwiPlNjaGVtYVByb3BlcnR5PC9BPltdPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldFByb3BlcnRpZXMoKSI+Z2V0UHJvcGVydGllczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYWxsIHRoZSBTY2hlbWFQcm9wZXJ0aWVzIHdpdGhpbiB0aGlzIGNvbXBsZXggdHlwZSwKLSBlbGVtZW50cyBmb2xsb3dlZCBieSBhdHRyaWJ1dGVzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuUmVmLmh0bWwiPlNjaGVtYVR5cGUuUmVmPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRSZWYoKSI+Z2V0UmVmPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0cnVucyBhIFNjaGVtYVR5cGUuUmVmIHBvaW50aW5nIHRvIHRoaXMgc2NoZW1hIHR5cGUgaXRzZWxmLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldFNob3J0SmF2YUltcGxOYW1lKCkiPmdldFNob3J0SmF2YUltcGxOYW1lPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIHNob3J0IHVucXVhbGZpaWVkIEphdmEgbmFtZSBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGNsYXNzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldFNob3J0SmF2YU5hbWUoKSI+Z2V0U2hvcnRKYXZhTmFtZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBzaG9ydCB1bnF1YWxmaWllZCBKYXZhIG5hbWUgZm9yIHRoZSBjbGFzcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldFNpbXBsZVZhcmlldHkoKSI+Z2V0U2ltcGxlVmFyaWV0eTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgd2hldGhlciB0aGUgc2ltcGxlIHR5cGUgaXMgQVRPTUlDLCBVTklPTiwgb3IgTElTVC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRTb3VyY2VOYW1lKCkiPmdldFNvdXJjZU5hbWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBmaWxlbmFtZSBmb3IgdGhlIFhTRCBmaWxlIGZyb20gd2hpY2ggdGhpcyB0eXBlCi0gd2FzIGxvYWRlZC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFTdHJpbmdFbnVtRW50cnkuaHRtbCI+U2NoZW1hU3RyaW5nRW51bUVudHJ5PC9BPltdPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldFN0cmluZ0VudW1FbnRyaWVzKCkiPmdldFN0cmluZ0VudW1FbnRyaWVzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgYXJyYXkgb2YgU2NoZW1hU3RyaW5nRW51bUVudHJpZXMgZm9yIHRoaXMgdHlwZTogdGhpcwotIGFycmF5IGluY2x1ZGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBqYXZhIGNvbnN0YW50IG5hbWVzIHVzZWQgZm9yCi0gZWFjaCBzdHJpbmcgZW51bSBlbnRyeS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwiPlNjaGVtYVR5cGVTeXN0ZW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldFR5cGVTeXN0ZW0oKSI+Z2V0VHlwZVN5c3RlbTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIFNjaGVtYVR5cGVMb2FkZXIgaW4gd2hpY2ggdGhpcyB0eXBlIHdhcyBkZWZpbmVkLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0VW5pb25Db21tb25CYXNlVHlwZSgpIj5nZXRVbmlvbkNvbW1vbkJhc2VUeXBlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Rm9yIHVuaW9uIHR5cGVzIG9ubHk6IGdldCB0aGUgbW9zdCBzcGVjaWZpYyBjb21tb24gYmFzZQotIHR5cGUgb2YgdGhlIGNvbnN0aXR1ZW50IG1lbWJlciB0eXBlcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+W108L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0VW5pb25Db25zdGl0dWVudFR5cGVzKCkiPmdldFVuaW9uQ29uc3RpdHVlbnRUeXBlczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0ZvciB1bmlvbiB0eXBlcyBvbmx5OiBnZXQgdGhlIGNvbnN0aXR1ZW50IG1lbWJlciB0eXBlcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+W108L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0VW5pb25NZW1iZXJUeXBlcygpIj5nZXRVbmlvbk1lbWJlclR5cGVzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Rm9yIHVuaW9uIHR5cGVzIG9ubHk6IGdldCB0aGUgc2hhbGxvdyBtZW1iZXIgdHlwZXMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPltdPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldFVuaW9uU3ViVHlwZXMoKSI+Z2V0VW5pb25TdWJUeXBlczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0ZvciB1bmlvbiB0eXBlcyBvbmx5OiBnZXRzIHRoZSBmdWxsIHRyZWUgb2YgbWVtYmVyIHR5cGVzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0V2hpdGVTcGFjZVJ1bGUoKSI+Z2V0V2hpdGVTcGFjZVJ1bGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtGb3Igbm9udW5pb24gc2ltcGxlIHR5cGVzOiBnZXQgdGhlIHdoaXRlc3BhY2UgcnVsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNoYXNBbGxDb250ZW50KCkiPmhhc0FsbENvbnRlbnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoZSBjb21wbGV4IGNvbnRlbnQgbW9kZWwgZm9yIHRoaXMgY29tcGxleCB0eXBlIGlzIGFuICJhbGwiIGdyb3VwLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2hhc0F0dHJpYnV0ZVdpbGRjYXJkcygpIj5oYXNBdHRyaWJ1dGVXaWxkY2FyZHM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoaXMgdHlwZSBwZXJtaXRzIHdpbGRjYXJkIGF0dHJpYnV0ZXMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjaGFzRWxlbWVudFdpbGRjYXJkcygpIj5oYXNFbGVtZW50V2lsZGNhcmRzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiB0aGlzIHR5cGUgcGVybWl0cyBlbGVtZW50IHdpbGRjYXJkcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNoYXNQYXR0ZXJuRmFjZXQoKSI+aGFzUGF0dGVybkZhY2V0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiB0aGVyZSBhcmUgcmVnZXggcGF0dGVybiBmYWNlbnRzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjaGFzU3RyaW5nRW51bVZhbHVlcygpIj5oYXNTdHJpbmdFbnVtVmFsdWVzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiB0aGlzIGlzIGEgc3RyaW5nIGVudW0gd2hlcmUgYW4gaW50ZWdlcgotIGlzIGFzc2lnbmVkIHRvIGVhY2ggZW51bWVyYXRlZCB2YWx1ZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNpc0Fic3RyYWN0KCkiPmlzQWJzdHJhY3Q8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoaXMgdHlwZSBjYW5ub3QgYmUgdXNlZCBkaXJlY3RseSBpbiBpbnN0YW5jZXM8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNpc0Fub255bW91c1R5cGUoKSI+aXNBbm9ueW1vdXNUeXBlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiB0aGUgWHNkIHR5cGUgaXMgYW5vbnltb3VzIChpLmUuLCBub3QgdG9wLWxldmVsKS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNpc0Fzc2lnbmFibGVGcm9tKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPmlzQXNzaWduYWJsZUZyb208L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4mbmJzcDt0eXBlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHR5cGUgZGVyaXZlcyBmcm9tIHRoaXMgdHlwZSAob3IgaWYKLSBpdCBpcyB0aGUgc2FtZSB0eXBlKS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNpc0F0dHJpYnV0ZVR5cGUoKSI+aXNBdHRyaWJ1dGVUeXBlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiB0aGlzIGlzIGEgYXR0cmlidXRlIHR5cGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjaXNCb3VuZGVkKCkiPmlzQm91bmRlZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgYm91bmRlZC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNpc0J1aWx0aW5UeXBlKCkiPmlzQnVpbHRpblR5cGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGZvciBhbnkgb2YgdGhlIDQwKyBidWlsdC1pbiB0eXBlcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNpc0NvbXBpbGVkKCkiPmlzQ29tcGlsZWQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoaXMgc2NoZW1hIHR5cGUgd2FzIGNvbXBpbGVkIHRvIGhhdmUgYSBjb3JyZXNwb25kaW5nCi0gSmF2YSBjbGFzcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNpc0RvY3VtZW50VHlwZSgpIj5pc0RvY3VtZW50VHlwZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgdGhpcyBpcyBhIGRvY3VtZW50IHR5cGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjaXNGYWNldEZpeGVkKGludCkiPmlzRmFjZXRGaXhlZDwvQT48L0I+KGludCZuYnNwO2ZhY2V0Q29kZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgdGhlIGdpdmVuIGZhY2V0IGlzIGZpeGVkLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2lzRmluaXRlKCkiPmlzRmluaXRlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiBmaW5pdGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjaXNOb1R5cGUoKSI+aXNOb1R5cGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGZvciB0aGUgdHlwZSBvYmplY3QgdGhhdCByZXByZXNlbnRzIGEgdGhlIGFic2VuY2Ugb2YgYSBkZXRlcm1pbmVkIHR5cGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjaXNOdW1lcmljKCkiPmlzTnVtZXJpYzwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgbnVtZXJpYy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNpc09yZGVyU2Vuc2l0aXZlKCkiPmlzT3JkZXJTZW5zaXRpdmU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHBhcnRpY2xlcyBoYXZlIHNhbWUgZGVmYXVsdHMsIG5pbGxhYmlsaXR5LCBldGMsIHRoYXQgYXJlCi0gaW52YXJpYW50IHdoZW4gb3JkZXIgY2hhbmdlcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNpc1ByaW1pdGl2ZVR5cGUoKSI+aXNQcmltaXRpdmVUeXBlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBmb3IgYW55IG9mIHRoZSAyMCBwcmltaXRpdmUgdHlwZXMgKHBsdXMgYW55U2ltcGxlVHlwZSk8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNpc1NpbXBsZVR5cGUoKSI+aXNTaW1wbGVUeXBlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBmb3IgdGhlIGFueVNpbXBsZVR5cGUgYW5kIGFueSByZXN0cmljdGlvbnMvdW5pb25zL2xpc3RzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2lzU2tpcHBlZEFub255bW91c1R5cGUoKSI+aXNTa2lwcGVkQW5vbnltb3VzVHlwZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgdGhpcyBhbm9ueW1vdXMgdHlwZSBoYXMgbm8gY29ycmVzcG9uZGluZyBKYXZhIHR5cGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjaXNVUlR5cGUoKSI+aXNVUlR5cGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGZvciBhbnlUeXBlIGFuZCBhbnlTaW1wbGVUeXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2lzVmFsaWRTdWJzdGl0dXRpb24oamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPmlzVmFsaWRTdWJzdGl0dXRpb248L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7bmFtZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0ZvciBkb2N1bWVudCB0eXBlcywgdHJ1ZSBpZiB0aGUgZ2l2ZW4gbmFtZSBjYW4gYmUgc3Vic3RpdHV0ZWQgZm9yIHRoZQotIGRvY3VtZW50IGVsZW1lbnQgbmFtZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNtYXRjaFBhdHRlcm5GYWNldChqYXZhLmxhbmcuU3RyaW5nKSI+bWF0Y2hQYXR0ZXJuRmFjZXQ8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgdGhlIGdpdmVuIHN0cmluZyBtYXRjaGVzIHRoZSBwYXR0ZXJuIGZhY2V0cy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI25ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj5uZXdWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDt2KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBpbW11dGFibGUgc2ltcGxlIHR5cGUgdmFsdWUgdGhhdCBkb2VzIG5vdCByZXNpZGUgaW4gYSB0cmVlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjb3JkZXJlZCgpIj5vcmRlcmVkPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiBvcmRlcmVkLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFDb21wb25lbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPlNjaGVtYUNvbXBvbmVudDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI2dldENvbXBvbmVudFJlZigpIj5nZXRDb21wb25lbnRSZWY8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI2dldENvbXBvbmVudFR5cGUoKSI+Z2V0Q29tcG9uZW50VHlwZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9IkRUX05PVF9ERVJJVkVEIj48IS0tIC0tPjwvQT48SDM+Ci1EVF9OT1RfREVSSVZFRDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+RFRfTk9UX0RFUklWRUQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+Tm90IGRlcml2ZWQuICBUcnVlIGZvciBYbWxPYmplY3QudHlwZSBvbmx5LiBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0RGVyaXZhdGlvblR5cGUoKSI+PENPREU+Z2V0RGVyaXZhdGlvblR5cGUoKTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuRFRfTk9UX0RFUklWRUQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iRFRfUkVTVFJJQ1RJT04iPjwhLS0gLS0+PC9BPjxIMz4KLURUX1JFU1RSSUNUSU9OPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5EVF9SRVNUUklDVElPTjwvQj48L1BSRT4KLTxETD4KLTxERD5EZXJpdmVkIGJ5IHJlc3RyaWN0aW9uLiBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0RGVyaXZhdGlvblR5cGUoKSI+PENPREU+Z2V0RGVyaXZhdGlvblR5cGUoKTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuRFRfUkVTVFJJQ1RJT04iPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iRFRfRVhURU5TSU9OIj48IS0tIC0tPjwvQT48SDM+Ci1EVF9FWFRFTlNJT048L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkRUX0VYVEVOU0lPTjwvQj48L1BSRT4KLTxETD4KLTxERD5EZXJpdmVkIGJ5IGV4dGVuc2lvbi4gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldERlcml2YXRpb25UeXBlKCkiPjxDT0RFPmdldERlcml2YXRpb25UeXBlKCk8L0NPREU+PC9BPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkRUX0VYVEVOU0lPTiI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCVENfTk9UX0JVSUxUSU4iPjwhLS0gLS0+PC9BPjxIMz4KLUJUQ19OT1RfQlVJTFRJTjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+QlRDX05PVF9CVUlMVElOPC9CPjwvUFJFPgotPERMPgotPEREPk5vdCBhIGJ1aWx0aW4gdHlwZQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX05PVF9CVUlMVElOIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJUQ19BTllfVFlQRSI+PCEtLSAtLT48L0E+PEgzPgotQlRDX0FOWV9UWVBFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5CVENfQU5ZX1RZUEU8L0I+PC9QUkU+Ci08REw+Ci08REQ+eHM6YW55VHlwZSwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdHlwZSI+PENPREU+WG1sT2JqZWN0LnR5cGU8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0FOWV9UWVBFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJUQ19GSVJTVF9QUklNSVRJVkUiPjwhLS0gLS0+PC9BPjxIMz4KLUJUQ19GSVJTVF9QUklNSVRJVkU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkJUQ19GSVJTVF9QUklNSVRJVkU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIHByaW1pdGl2ZSB0eXBlcyBoYXZlIGNvZGVzIGJldHdlZW4gQlRDX0ZJUlNUX1BSSU1JVElWRSBhbmQgQlRDX0xBU1RfUFJJTUlUSVZFIGluY2x1c2l2ZQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0ZJUlNUX1BSSU1JVElWRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCVENfQU5ZX1NJTVBMRSI+PCEtLSAtLT48L0E+PEgzPgotQlRDX0FOWV9TSU1QTEU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkJUQ19BTllfU0lNUExFPC9CPjwvUFJFPgotPERMPgotPEREPnhzOmFueVNpbXBsZVR5cGUsIGFrYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCN0eXBlIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlLnR5cGU8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0FOWV9TSU1QTEUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQlRDX0JPT0xFQU4iPjwhLS0gLS0+PC9BPjxIMz4KLUJUQ19CT09MRUFOPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5CVENfQk9PTEVBTjwvQj48L1BSRT4KLTxETD4KLTxERD54czpib29sZWFuLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwjdHlwZSI+PENPREU+WG1sQm9vbGVhbi50eXBlPC9DT0RFPjwvQT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19CT09MRUFOIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJUQ19CQVNFXzY0X0JJTkFSWSI+PCEtLSAtLT48L0E+PEgzPgotQlRDX0JBU0VfNjRfQklOQVJZPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5CVENfQkFTRV82NF9CSU5BUlk8L0I+PC9QUkU+Ci08REw+Ci08REQ+eHM6YmFzZTY0QmluYXJ5LCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCN0eXBlIj48Q09ERT5YbWxCYXNlNjRCaW5hcnkudHlwZTwvQ09ERT48L0E+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfQkFTRV82NF9CSU5BUlkiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQlRDX0hFWF9CSU5BUlkiPjwhLS0gLS0+PC9BPjxIMz4KLUJUQ19IRVhfQklOQVJZPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5CVENfSEVYX0JJTkFSWTwvQj48L1BSRT4KLTxETD4KLTxERD54czpoZXhCaW5hcnksIGFrYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sI3R5cGUiPjxDT0RFPlhtbEJhc2U2NEJpbmFyeS50eXBlPC9DT0RFPjwvQT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19IRVhfQklOQVJZIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJUQ19BTllfVVJJIj48IS0tIC0tPjwvQT48SDM+Ci1CVENfQU5ZX1VSSTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+QlRDX0FOWV9VUkk8L0I+PC9QUkU+Ci08REw+Ci08REQ+eHM6YW55VVJJLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCN0eXBlIj48Q09ERT5YbWxBbnlVUkkudHlwZTwvQ09ERT48L0E+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfQU5ZX1VSSSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCVENfUU5BTUUiPjwhLS0gLS0+PC9BPjxIMz4KLUJUQ19RTkFNRTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+QlRDX1FOQU1FPC9CPjwvUFJFPgotPERMPgotPEREPnhzOlFOYW1lLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sI3R5cGUiPjxDT0RFPlhtbFFOYW1lLnR5cGU8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX1FOQU1FIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJUQ19OT1RBVElPTiI+PCEtLSAtLT48L0E+PEgzPgotQlRDX05PVEFUSU9OPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5CVENfTk9UQVRJT048L0I+PC9QUkU+Ci08REw+Ci08REQ+eHM6Tk9UQVRJT04sIGFrYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwjdHlwZSI+PENPREU+WG1sTk9UQVRJT04udHlwZTwvQ09ERT48L0E+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfTk9UQVRJT04iPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQlRDX0ZMT0FUIj48IS0tIC0tPjwvQT48SDM+Ci1CVENfRkxPQVQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkJUQ19GTE9BVDwvQj48L1BSRT4KLTxETD4KLTxERD54czpmbG9hdCwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCN0eXBlIj48Q09ERT5YbWxGbG9hdC50eXBlPC9DT0RFPjwvQT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19GTE9BVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCVENfRE9VQkxFIj48IS0tIC0tPjwvQT48SDM+Ci1CVENfRE9VQkxFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5CVENfRE9VQkxFPC9CPjwvUFJFPgotPERMPgotPEREPnhzOmRvdWJsZSwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwjdHlwZSI+PENPREU+WG1sRG91YmxlLnR5cGU8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0RPVUJMRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCVENfREVDSU1BTCI+PCEtLSAtLT48L0E+PEgzPgotQlRDX0RFQ0lNQUw8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkJUQ19ERUNJTUFMPC9CPjwvUFJFPgotPERMPgotPEREPnhzOmRlY2ltYWwsIGFrYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCN0eXBlIj48Q09ERT5YbWxEZWNpbWFsLnR5cGU8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0RFQ0lNQUwiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQlRDX1NUUklORyI+PCEtLSAtLT48L0E+PEgzPgotQlRDX1NUUklORzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+QlRDX1NUUklORzwvQj48L1BSRT4KLTxETD4KLTxERD54czpzdHJpbmcsIGFrYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sI3R5cGUiPjxDT0RFPlhtbFN0cmluZy50eXBlPC9DT0RFPjwvQT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19TVFJJTkciPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQlRDX0RVUkFUSU9OIj48IS0tIC0tPjwvQT48SDM+Ci1CVENfRFVSQVRJT048L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkJUQ19EVVJBVElPTjwvQj48L1BSRT4KLTxETD4KLTxERD54czpkdXJhdGlvbiwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCN0eXBlIj48Q09ERT5YbWxEdXJhdGlvbi50eXBlPC9DT0RFPjwvQT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19EVVJBVElPTiI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCVENfREFURV9USU1FIj48IS0tIC0tPjwvQT48SDM+Ci1CVENfREFURV9USU1FPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5CVENfREFURV9USU1FPC9CPjwvUFJFPgotPERMPgotPEREPnhzOmRhdGVUaW1lLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sI3R5cGUiPjxDT0RFPlhtbERhdGVUaW1lLnR5cGU8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0RBVEVfVElNRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCVENfVElNRSI+PCEtLSAtLT48L0E+PEgzPgotQlRDX1RJTUU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkJUQ19USU1FPC9CPjwvUFJFPgotPERMPgotPEREPnhzOnRpbWUsIGFrYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCN0eXBlIj48Q09ERT5YbWxUaW1lLnR5cGU8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX1RJTUUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQlRDX0RBVEUiPjwhLS0gLS0+PC9BPjxIMz4KLUJUQ19EQVRFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5CVENfREFURTwvQj48L1BSRT4KLTxETD4KLTxERD54czpkYXRlLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwjdHlwZSI+PENPREU+WG1sRGF0ZS50eXBlPC9DT0RFPjwvQT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19EQVRFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJUQ19HX1lFQVJfTU9OVEgiPjwhLS0gLS0+PC9BPjxIMz4KLUJUQ19HX1lFQVJfTU9OVEg8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkJUQ19HX1lFQVJfTU9OVEg8L0I+PC9QUkU+Ci08REw+Ci08REQ+eHM6Z1llYXJNb250aCwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sI3R5cGUiPjxDT0RFPlhtbEdZZWFyTW9udGgudHlwZTwvQ09ERT48L0E+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfR19ZRUFSX01PTlRIIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJUQ19HX1lFQVIiPjwhLS0gLS0+PC9BPjxIMz4KLUJUQ19HX1lFQVI8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkJUQ19HX1lFQVI8L0I+PC9QUkU+Ci08REw+Ci08REQ+eHM6Z1llYXIsIGFrYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwjdHlwZSI+PENPREU+WG1sR1llYXIudHlwZTwvQ09ERT48L0E+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfR19ZRUFSIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJUQ19HX01PTlRIX0RBWSI+PCEtLSAtLT48L0E+PEgzPgotQlRDX0dfTU9OVEhfREFZPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5CVENfR19NT05USF9EQVk8L0I+PC9QUkU+Ci08REw+Ci08REQ+eHM6Z01vbnRoRGF5LCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCN0eXBlIj48Q09ERT5YbWxHTW9udGhEYXkudHlwZTwvQ09ERT48L0E+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfR19NT05USF9EQVkiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQlRDX0dfREFZIj48IS0tIC0tPjwvQT48SDM+Ci1CVENfR19EQVk8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkJUQ19HX0RBWTwvQj48L1BSRT4KLTxETD4KLTxERD54czpnRGF5LCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwjdHlwZSI+PENPREU+WG1sR0RheS50eXBlPC9DT0RFPjwvQT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19HX0RBWSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCVENfR19NT05USCI+PCEtLSAtLT48L0E+PEgzPgotQlRDX0dfTU9OVEg8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkJUQ19HX01PTlRIPC9CPjwvUFJFPgotPERMPgotPEREPnhzOmdNb250aCwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwjdHlwZSI+PENPREU+WG1sR01vbnRoLnR5cGU8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0dfTU9OVEgiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQlRDX0xBU1RfUFJJTUlUSVZFIj48IS0tIC0tPjwvQT48SDM+Ci1CVENfTEFTVF9QUklNSVRJVkU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkJUQ19MQVNUX1BSSU1JVElWRTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgcHJpbWl0aXZlIHR5cGVzIGhhdmUgY29kZXMgYmV0d2VlbiBCVENfRklSU1RfUFJJTUlUSVZFIGFuZCBCVENfTEFTVF9QUklNSVRJVkUgaW5jbHVzaXZlCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfTEFTVF9QUklNSVRJVkUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQlRDX0lOVEVHRVIiPjwhLS0gLS0+PC9BPjxIMz4KLUJUQ19JTlRFR0VSPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5CVENfSU5URUdFUjwvQj48L1BSRT4KLTxETD4KLTxERD54czppbnRlZ2VyLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwjdHlwZSI+PENPREU+WG1sSW50ZWdlci50eXBlPC9DT0RFPjwvQT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19JTlRFR0VSIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJUQ19MT05HIj48IS0tIC0tPjwvQT48SDM+Ci1CVENfTE9ORzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+QlRDX0xPTkc8L0I+PC9QUkU+Ci08REw+Ci08REQ+eHM6bG9uZywgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sI3R5cGUiPjxDT0RFPlhtbExvbmcudHlwZTwvQ09ERT48L0E+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfTE9ORyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCVENfSU5UIj48IS0tIC0tPjwvQT48SDM+Ci1CVENfSU5UPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5CVENfSU5UPC9CPjwvUFJFPgotPERMPgotPEREPnhzOmludCwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwjdHlwZSI+PENPREU+WG1sSW50LnR5cGU8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0lOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCVENfU0hPUlQiPjwhLS0gLS0+PC9BPjxIMz4KLUJUQ19TSE9SVDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+QlRDX1NIT1JUPC9CPjwvUFJFPgotPERMPgotPEREPnhzOnNob3J0LCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sI3R5cGUiPjxDT0RFPlhtbFNob3J0LnR5cGU8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX1NIT1JUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJUQ19CWVRFIj48IS0tIC0tPjwvQT48SDM+Ci1CVENfQllURTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+QlRDX0JZVEU8L0I+PC9QUkU+Ci08REw+Ci08REQ+eHM6Ynl0ZSwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sI3R5cGUiPjxDT0RFPlhtbEJ5dGUudHlwZTwvQ09ERT48L0E+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfQllURSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCVENfTk9OX1BPU0lUSVZFX0lOVEVHRVIiPjwhLS0gLS0+PC9BPjxIMz4KLUJUQ19OT05fUE9TSVRJVkVfSU5URUdFUjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+QlRDX05PTl9QT1NJVElWRV9JTlRFR0VSPC9CPjwvUFJFPgotPERMPgotPEREPnhzOm5vblBvc2l0aXZlSW50ZWdlciwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwjdHlwZSI+PENPREU+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyLnR5cGU8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX05PTl9QT1NJVElWRV9JTlRFR0VSIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJUQ19ORUdBVElWRV9JTlRFR0VSIj48IS0tIC0tPjwvQT48SDM+Ci1CVENfTkVHQVRJVkVfSU5URUdFUjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+QlRDX05FR0FUSVZFX0lOVEVHRVI8L0I+PC9QUkU+Ci08REw+Ci08REQ+eHM6TmVnYXRpdmVJbnRlZ2VyLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCN0eXBlIj48Q09ERT5YbWxOZWdhdGl2ZUludGVnZXIudHlwZTwvQ09ERT48L0E+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfTkVHQVRJVkVfSU5URUdFUiI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCVENfTk9OX05FR0FUSVZFX0lOVEVHRVIiPjwhLS0gLS0+PC9BPjxIMz4KLUJUQ19OT05fTkVHQVRJVkVfSU5URUdFUjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+QlRDX05PTl9ORUdBVElWRV9JTlRFR0VSPC9CPjwvUFJFPgotPERMPgotPEREPnhzOm5vbk5lZ2F0aXZlSW50ZWdlciwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwjdHlwZSI+PENPREU+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyLnR5cGU8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX05PTl9ORUdBVElWRV9JTlRFR0VSIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJUQ19QT1NJVElWRV9JTlRFR0VSIj48IS0tIC0tPjwvQT48SDM+Ci1CVENfUE9TSVRJVkVfSU5URUdFUjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+QlRDX1BPU0lUSVZFX0lOVEVHRVI8L0I+PC9QUkU+Ci08REw+Ci08REQ+eHM6cG9zaXRpdmVJbnRlZ2VyLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCN0eXBlIj48Q09ERT5YbWxQb3NpdGl2ZUludGVnZXIudHlwZTwvQ09ERT48L0E+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfUE9TSVRJVkVfSU5URUdFUiI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCVENfVU5TSUdORURfTE9ORyI+PCEtLSAtLT48L0E+PEgzPgotQlRDX1VOU0lHTkVEX0xPTkc8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkJUQ19VTlNJR05FRF9MT05HPC9CPjwvUFJFPgotPERMPgotPEREPnhzOnVuc2lnbmVkTG9uZywgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwjdHlwZSI+PENPREU+WG1sVW5zaWduZWRMb25nLnR5cGU8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX1VOU0lHTkVEX0xPTkciPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQlRDX1VOU0lHTkVEX0lOVCI+PCEtLSAtLT48L0E+PEgzPgotQlRDX1VOU0lHTkVEX0lOVDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+QlRDX1VOU0lHTkVEX0lOVDwvQj48L1BSRT4KLTxETD4KLTxERD54czp1bnNpZ25lZEludCwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCN0eXBlIj48Q09ERT5YbWxVbnNpZ25lZEludC50eXBlPC9DT0RFPjwvQT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19VTlNJR05FRF9JTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQlRDX1VOU0lHTkVEX1NIT1JUIj48IS0tIC0tPjwvQT48SDM+Ci1CVENfVU5TSUdORURfU0hPUlQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkJUQ19VTlNJR05FRF9TSE9SVDwvQj48L1BSRT4KLTxETD4KLTxERD54czp1bnNpZ25lZFNob3J0LCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwjdHlwZSI+PENPREU+WG1sVW5zaWduZWRTaG9ydC50eXBlPC9DT0RFPjwvQT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19VTlNJR05FRF9TSE9SVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCVENfVU5TSUdORURfQllURSI+PCEtLSAtLT48L0E+PEgzPgotQlRDX1VOU0lHTkVEX0JZVEU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkJUQ19VTlNJR05FRF9CWVRFPC9CPjwvUFJFPgotPERMPgotPEREPnhzOnVuc2lnbmVkQnl0ZSwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwjdHlwZSI+PENPREU+WG1sVW5zaWduZWRCeXRlLnR5cGU8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX1VOU0lHTkVEX0JZVEUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQlRDX05PUk1BTElaRURfU1RSSU5HIj48IS0tIC0tPjwvQT48SDM+Ci1CVENfTk9STUFMSVpFRF9TVFJJTkc8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkJUQ19OT1JNQUxJWkVEX1NUUklORzwvQj48L1BSRT4KLTxETD4KLTxERD54czpub3JtYWxpemVkU3RyaW5nLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwjdHlwZSI+PENPREU+WG1sTm9ybWFsaXplZFN0cmluZy50eXBlPC9DT0RFPjwvQT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19OT1JNQUxJWkVEX1NUUklORyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCVENfVE9LRU4iPjwhLS0gLS0+PC9BPjxIMz4KLUJUQ19UT0tFTjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+QlRDX1RPS0VOPC9CPjwvUFJFPgotPERMPgotPEREPnhzOnRva2VuLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sI3R5cGUiPjxDT0RFPlhtbFRva2VuLnR5cGU8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX1RPS0VOIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJUQ19OQU1FIj48IS0tIC0tPjwvQT48SDM+Ci1CVENfTkFNRTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+QlRDX05BTUU8L0I+PC9QUkU+Ci08REw+Ci08REQ+eHM6TmFtZSwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sI3R5cGUiPjxDT0RFPlhtbE5hbWUudHlwZTwvQ09ERT48L0E+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfTkFNRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCVENfTkNOQU1FIj48IS0tIC0tPjwvQT48SDM+Ci1CVENfTkNOQU1FPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5CVENfTkNOQU1FPC9CPjwvUFJFPgotPERMPgotPEREPnhzOk5DTmFtZSwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwjdHlwZSI+PENPREU+WG1sTkNOYW1lLnR5cGU8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX05DTkFNRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCVENfTEFOR1VBR0UiPjwhLS0gLS0+PC9BPjxIMz4KLUJUQ19MQU5HVUFHRTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+QlRDX0xBTkdVQUdFPC9CPjwvUFJFPgotPERMPgotPEREPnhzOmxhbmd1YWdlLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sI3R5cGUiPjxDT0RFPlhtbExhbmd1YWdlLnR5cGU8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0xBTkdVQUdFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJUQ19JRCI+PCEtLSAtLT48L0E+PEgzPgotQlRDX0lEPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5CVENfSUQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+eHM6SUQsIGFrYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwjdHlwZSI+PENPREU+WG1sSUQudHlwZTwvQ09ERT48L0E+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfSUQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQlRDX0lEUkVGIj48IS0tIC0tPjwvQT48SDM+Ci1CVENfSURSRUY8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkJUQ19JRFJFRjwvQj48L1BSRT4KLTxETD4KLTxERD54czpJRFJFRiwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCN0eXBlIj48Q09ERT5YbWxJRFJFRi50eXBlPC9DT0RFPjwvQT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkJUQ19JRFJFRiI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCVENfSURSRUZTIj48IS0tIC0tPjwvQT48SDM+Ci1CVENfSURSRUZTPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5CVENfSURSRUZTPC9CPjwvUFJFPgotPERMPgotPEREPnhzOklEUkVGUywgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwjdHlwZSI+PENPREU+WG1sSURSRUZTLnR5cGU8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0lEUkVGUyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCVENfRU5USVRZIj48IS0tIC0tPjwvQT48SDM+Ci1CVENfRU5USVRZPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5CVENfRU5USVRZPC9CPjwvUFJFPgotPERMPgotPEREPnhzOkVOVElUWSwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwjdHlwZSI+PENPREU+WG1sRU5USVRZLnR5cGU8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0VOVElUWSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCVENfRU5USVRJRVMiPjwhLS0gLS0+PC9BPjxIMz4KLUJUQ19FTlRJVElFUzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+QlRDX0VOVElUSUVTPC9CPjwvUFJFPgotPERMPgotPEREPnhzOkVOVElUSUVTLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sI3R5cGUiPjxDT0RFPlhtbEVOVElUSUVTLnR5cGU8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0VOVElUSUVTIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJUQ19OTVRPS0VOIj48IS0tIC0tPjwvQT48SDM+Ci1CVENfTk1UT0tFTjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+QlRDX05NVE9LRU48L0I+PC9QUkU+Ci08REw+Ci08REQ+eHM6Tk1UT0tFTiwgYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sI3R5cGUiPjxDT0RFPlhtbE5NVE9LRU4udHlwZTwvQ09ERT48L0E+Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5CVENfTk1UT0tFTiI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJCVENfTk1UT0tFTlMiPjwhLS0gLS0+PC9BPjxIMz4KLUJUQ19OTVRPS0VOUzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+QlRDX05NVE9LRU5TPC9CPjwvUFJFPgotPERMPgotPEREPnhzOk5NVE9LRU5TLCBha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sI3R5cGUiPjxDT0RFPlhtbE5NVE9LRU5TLnR5cGU8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX05NVE9LRU5TIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkJUQ19MQVNUX0JVSUxUSU4iPjwhLS0gLS0+PC9BPjxIMz4KLUJUQ19MQVNUX0JVSUxUSU48L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkJUQ19MQVNUX0JVSUxUSU48L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuQlRDX0xBU1RfQlVJTFRJTiI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJOT1RfQ09NUExFWF9UWVBFIj48IS0tIC0tPjwvQT48SDM+Ci1OT1RfQ09NUExFWF9UWVBFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5OT1RfQ09NUExFWF9UWVBFPC9CPjwvUFJFPgotPERMPgotPEREPk5vdCBhIGNvbXBsZXggdHlwZS4gIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRDb250ZW50VHlwZSgpIj48Q09ERT5nZXRDb250ZW50VHlwZSgpPC9DT0RFPjwvQT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5OT1RfQ09NUExFWF9UWVBFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkVNUFRZX0NPTlRFTlQiPjwhLS0gLS0+PC9BPjxIMz4KLUVNUFRZX0NPTlRFTlQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkVNUFRZX0NPTlRFTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+RW1wdHkgY29udGVudC4gIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRDb250ZW50VHlwZSgpIj48Q09ERT5nZXRDb250ZW50VHlwZSgpPC9DT0RFPjwvQT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5FTVBUWV9DT05URU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNJTVBMRV9DT05URU5UIj48IS0tIC0tPjwvQT48SDM+Ci1TSU1QTEVfQ09OVEVOVDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+U0lNUExFX0NPTlRFTlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+U2ltcGxlIGNvbnRlbnQuICBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0Q29udGVudFR5cGUoKSI+PENPREU+Z2V0Q29udGVudFR5cGUoKTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuU0lNUExFX0NPTlRFTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iRUxFTUVOVF9DT05URU5UIj48IS0tIC0tPjwvQT48SDM+Ci1FTEVNRU5UX0NPTlRFTlQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkVMRU1FTlRfQ09OVEVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5FbGVtZW50LW9ubHkgY29udGVudC4gIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRDb250ZW50VHlwZSgpIj48Q09ERT5nZXRDb250ZW50VHlwZSgpPC9DT0RFPjwvQT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5FTEVNRU5UX0NPTlRFTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTUlYRURfQ09OVEVOVCI+PCEtLSAtLT48L0E+PEgzPgotTUlYRURfQ09OVEVOVDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+TUlYRURfQ09OVEVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5NaXhlZCBjb250ZW50LiAgU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldENvbnRlbnRUeXBlKCkiPjxDT0RFPmdldENvbnRlbnRUeXBlKCk8L0NPREU+PC9BPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLk1JWEVEX0NPTlRFTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iRkFDRVRfTEVOR1RIIj48IS0tIC0tPjwvQT48SDM+Ci1GQUNFVF9MRU5HVEg8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkZBQ0VUX0xFTkdUSDwvQj48L1BSRT4KLTxETD4KLTxERD54czpsZW5ndGggZmFjZXQKLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkZBQ0VUX0xFTkdUSCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJGQUNFVF9NSU5fTEVOR1RIIj48IS0tIC0tPjwvQT48SDM+Ci1GQUNFVF9NSU5fTEVOR1RIPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5GQUNFVF9NSU5fTEVOR1RIPC9CPjwvUFJFPgotPERMPgotPEREPnhzOm1pbkxlbmd0aCBmYWNldAotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuRkFDRVRfTUlOX0xFTkdUSCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJGQUNFVF9NQVhfTEVOR1RIIj48IS0tIC0tPjwvQT48SDM+Ci1GQUNFVF9NQVhfTEVOR1RIPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5GQUNFVF9NQVhfTEVOR1RIPC9CPjwvUFJFPgotPERMPgotPEREPnhzOm1heExlbmd0aCBmYWNldAotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuRkFDRVRfTUFYX0xFTkdUSCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJGQUNFVF9NSU5fRVhDTFVTSVZFIj48IS0tIC0tPjwvQT48SDM+Ci1GQUNFVF9NSU5fRVhDTFVTSVZFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5GQUNFVF9NSU5fRVhDTFVTSVZFPC9CPjwvUFJFPgotPERMPgotPEREPnhzOm1pbkV4Y2x1c2l2ZSBmYWNldAotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuRkFDRVRfTUlOX0VYQ0xVU0lWRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJGQUNFVF9NSU5fSU5DTFVTSVZFIj48IS0tIC0tPjwvQT48SDM+Ci1GQUNFVF9NSU5fSU5DTFVTSVZFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5GQUNFVF9NSU5fSU5DTFVTSVZFPC9CPjwvUFJFPgotPERMPgotPEREPnhzOm1pbkluY2x1c2l2ZSBmYWNldAotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuRkFDRVRfTUlOX0lOQ0xVU0lWRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJGQUNFVF9NQVhfSU5DTFVTSVZFIj48IS0tIC0tPjwvQT48SDM+Ci1GQUNFVF9NQVhfSU5DTFVTSVZFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5GQUNFVF9NQVhfSU5DTFVTSVZFPC9CPjwvUFJFPgotPERMPgotPEREPnhzOm1heEluY2x1c2l2ZSBmYWNldAotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuRkFDRVRfTUFYX0lOQ0xVU0lWRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJGQUNFVF9NQVhfRVhDTFVTSVZFIj48IS0tIC0tPjwvQT48SDM+Ci1GQUNFVF9NQVhfRVhDTFVTSVZFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5GQUNFVF9NQVhfRVhDTFVTSVZFPC9CPjwvUFJFPgotPERMPgotPEREPnhzOm1heEV4Y2x1c2l2ZSBmYWNldAotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuRkFDRVRfTUFYX0VYQ0xVU0lWRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJGQUNFVF9UT1RBTF9ESUdJVFMiPjwhLS0gLS0+PC9BPjxIMz4KLUZBQ0VUX1RPVEFMX0RJR0lUUzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+RkFDRVRfVE9UQUxfRElHSVRTPC9CPjwvUFJFPgotPERMPgotPEREPnhzOnRvdGFsRGlnaXRzIGZhY2V0Ci08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5GQUNFVF9UT1RBTF9ESUdJVFMiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iRkFDRVRfRlJBQ1RJT05fRElHSVRTIj48IS0tIC0tPjwvQT48SDM+Ci1GQUNFVF9GUkFDVElPTl9ESUdJVFM8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkZBQ0VUX0ZSQUNUSU9OX0RJR0lUUzwvQj48L1BSRT4KLTxETD4KLTxERD54czpmcmFjdGlvbkRpZ2l0cyBmYWNldAotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuRkFDRVRfRlJBQ1RJT05fRElHSVRTIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkxBU1RfQkFTSUNfRkFDRVQiPjwhLS0gLS0+PC9BPjxIMz4KLUxBU1RfQkFTSUNfRkFDRVQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkxBU1RfQkFTSUNfRkFDRVQ8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuTEFTVF9CQVNJQ19GQUNFVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJGQUNFVF9XSElURV9TUEFDRSI+PCEtLSAtLT48L0E+PEgzPgotRkFDRVRfV0hJVEVfU1BBQ0U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkZBQ0VUX1dISVRFX1NQQUNFPC9CPjwvUFJFPgotPERMPgotPEREPnhzOndoaXRlU3BhY2UgZmFjZXQgLSB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0V2hpdGVTcGFjZVJ1bGUoKSI+PENPREU+Z2V0V2hpdGVTcGFjZVJ1bGUoKTwvQ09ERT48L0E+IGluc3RlYWQKLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkZBQ0VUX1dISVRFX1NQQUNFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkZBQ0VUX1BBVFRFUk4iPjwhLS0gLS0+PC9BPjxIMz4KLUZBQ0VUX1BBVFRFUk48L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkZBQ0VUX1BBVFRFUk48L0I+PC9QUkU+Ci08REw+Ci08REQ+eHM6cGF0dGVybiBmYWNldCAtIHVzZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNtYXRjaFBhdHRlcm5GYWNldChqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+bWF0Y2hQYXR0ZXJuRmFjZXQoamF2YS5sYW5nLlN0cmluZyk8L0NPREU+PC9BPiBpbnN0ZWFkCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5GQUNFVF9QQVRURVJOIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkZBQ0VUX0VOVU1FUkFUSU9OIj48IS0tIC0tPjwvQT48SDM+Ci1GQUNFVF9FTlVNRVJBVElPTjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+RkFDRVRfRU5VTUVSQVRJT048L0I+PC9QUkU+Ci08REw+Ci08REQ+eHM6ZW51bWVyYXRpb24gZmFjZXQgLSB1c2UgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0RW51bWVyYXRpb25WYWx1ZXMoKSI+PENPREU+Z2V0RW51bWVyYXRpb25WYWx1ZXMoKTwvQ09ERT48L0E+IGluc3RlYWQKLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkZBQ0VUX0VOVU1FUkFUSU9OIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkxBU1RfRkFDRVQiPjwhLS0gLS0+PC9BPjxIMz4KLUxBU1RfRkFDRVQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkxBU1RfRkFDRVQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGxhc3Qgb3JkaW5hcnkgZmFjZXQgY29kZQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuTEFTVF9GQUNFVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJQUk9QRVJUWV9PUkRFUkVEIj48IS0tIC0tPjwvQT48SDM+Ci1QUk9QRVJUWV9PUkRFUkVEPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5QUk9QRVJUWV9PUkRFUkVEPC9CPjwvUFJFPgotPERMPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjb3JkZXJlZCgpIj48Q09ERT5vcmRlcmVkKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuUFJPUEVSVFlfT1JERVJFRCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJQUk9QRVJUWV9CT1VOREVEIj48IS0tIC0tPjwvQT48SDM+Ci1QUk9QRVJUWV9CT1VOREVEPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5QUk9QRVJUWV9CT1VOREVEPC9CPjwvUFJFPgotPERMPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjaXNCb3VuZGVkKCkiPjxDT0RFPmlzQm91bmRlZCgpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLlBST1BFUlRZX0JPVU5ERUQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iUFJPUEVSVFlfQ0FSRElOQUxJVFkiPjwhLS0gLS0+PC9BPjxIMz4KLVBST1BFUlRZX0NBUkRJTkFMSVRZPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5QUk9QRVJUWV9DQVJESU5BTElUWTwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2lzRmluaXRlKCkiPjxDT0RFPmlzRmluaXRlKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuUFJPUEVSVFlfQ0FSRElOQUxJVFkiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iUFJPUEVSVFlfTlVNRVJJQyI+PCEtLSAtLT48L0E+PEgzPgotUFJPUEVSVFlfTlVNRVJJQzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+UFJPUEVSVFlfTlVNRVJJQzwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2lzTnVtZXJpYygpIj48Q09ERT5pc051bWVyaWMoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5QUk9QRVJUWV9OVU1FUklDIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkxBU1RfUFJPUEVSVFkiPjwhLS0gLS0+PC9BPjxIMz4KLUxBU1RfUFJPUEVSVFk8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkxBU1RfUFJPUEVSVFk8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGxhc3QgcHJvcGVydHkgY29kZQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuTEFTVF9QUk9QRVJUWSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJVTk9SREVSRUQiPjwhLS0gLS0+PC9BPjxIMz4KLVVOT1JERVJFRDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+VU5PUkRFUkVEPC9CPjwvUFJFPgotPERMPgotPEREPlVub3JkZXJlZC4gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI29yZGVyZWQoKSI+PENPREU+b3JkZXJlZCgpPC9DT0RFPjwvQT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5VTk9SREVSRUQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iUEFSVElBTF9PUkRFUiI+PCEtLSAtLT48L0E+PEgzPgotUEFSVElBTF9PUkRFUjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+UEFSVElBTF9PUkRFUjwvQj48L1BSRT4KLTxETD4KLTxERD5QYXJ0aWFsbHkgb3JkZXJlZC4gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI29yZGVyZWQoKSI+PENPREU+b3JkZXJlZCgpPC9DT0RFPjwvQT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5QQVJUSUFMX09SREVSIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlRPVEFMX09SREVSIj48IS0tIC0tPjwvQT48SDM+Ci1UT1RBTF9PUkRFUjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+VE9UQUxfT1JERVI8L0I+PC9QUkU+Ci08REw+Ci08REQ+VG90YWxseSBvcmRlcmVkLiBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjb3JkZXJlZCgpIj48Q09ERT5vcmRlcmVkKCk8L0NPREU+PC9BPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLlRPVEFMX09SREVSIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik5PVF9TSU1QTEUiPjwhLS0gLS0+PC9BPjxIMz4KLU5PVF9TSU1QTEU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPk5PVF9TSU1QTEU8L0I+PC9QUkU+Ci08REw+Ci08REQ+Tm90IGEgc2ltcGxlIHR5cGUgb3Igc2ltcGxlIGNvbnRlbnQuIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRTaW1wbGVWYXJpZXR5KCkiPjxDT0RFPmdldFNpbXBsZVZhcmlldHkoKTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuTk9UX1NJTVBMRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJBVE9NSUMiPjwhLS0gLS0+PC9BPjxIMz4KLUFUT01JQzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+QVRPTUlDPC9CPjwvUFJFPgotPERMPgotPEREPkF0b21pYyB0eXBlLiAgU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldFNpbXBsZVZhcmlldHkoKSI+PENPREU+Z2V0U2ltcGxlVmFyaWV0eSgpPC9DT0RFPjwvQT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkFUT01JQyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJVTklPTiI+PCEtLSAtLT48L0E+PEgzPgotVU5JT048L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPlVOSU9OPC9CPjwvUFJFPgotPERMPgotPEREPlVuaW9uIHR5cGUuICBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0U2ltcGxlVmFyaWV0eSgpIj48Q09ERT5nZXRTaW1wbGVWYXJpZXR5KCk8L0NPREU+PC9BPgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuVU5JT04iPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTElTVCI+PCEtLSAtLT48L0E+PEgzPgotTElTVDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+TElTVDwvQj48L1BSRT4KLTxETD4KLTxERD5TaW1wbGUgbGlzdCB0eXBlLiAgU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldFNpbXBsZVZhcmlldHkoKSI+PENPREU+Z2V0U2ltcGxlVmFyaWV0eSgpPC9DT0RFPjwvQT4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLkxJU1QiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTk9UX0RFQ0lNQUwiPjwhLS0gLS0+PC9BPjxIMz4KLU5PVF9ERUNJTUFMPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5OT1RfREVDSU1BTDwvQj48L1BSRT4KLTxETD4KLTxERD5Ob3QgYSBkZWNpbWFsIHJlc3RyaWN0aW9uLiBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0RGVjaW1hbFNpemUoKSI+PENPREU+Z2V0RGVjaW1hbFNpemUoKTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuTk9UX0RFQ0lNQUwiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU0laRV9CWVRFIj48IS0tIC0tPjwvQT48SDM+Ci1TSVpFX0JZVEU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPlNJWkVfQllURTwvQj48L1BSRT4KLTxETD4KLTxERD5GaXRzIGluIGEgYnl0ZS4gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldERlY2ltYWxTaXplKCkiPjxDT0RFPmdldERlY2ltYWxTaXplKCk8L0NPREU+PC9BPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLlNJWkVfQllURSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTSVpFX1NIT1JUIj48IS0tIC0tPjwvQT48SDM+Ci1TSVpFX1NIT1JUPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5TSVpFX1NIT1JUPC9CPjwvUFJFPgotPERMPgotPEREPkZpdHMgaW4gYSBzaG9ydC4gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldERlY2ltYWxTaXplKCkiPjxDT0RFPmdldERlY2ltYWxTaXplKCk8L0NPREU+PC9BPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLlNJWkVfU0hPUlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU0laRV9JTlQiPjwhLS0gLS0+PC9BPjxIMz4KLVNJWkVfSU5UPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5TSVpFX0lOVDwvQj48L1BSRT4KLTxETD4KLTxERD5GaXRzIGluIGFuIGludC4gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldERlY2ltYWxTaXplKCkiPjxDT0RFPmdldERlY2ltYWxTaXplKCk8L0NPREU+PC9BPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLlNJWkVfSU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNJWkVfTE9ORyI+PCEtLSAtLT48L0E+PEgzPgotU0laRV9MT05HPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5TSVpFX0xPTkc8L0I+PC9QUkU+Ci08REw+Ci08REQ+Rml0cyBpbiBhIGxvbmcuIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXREZWNpbWFsU2l6ZSgpIj48Q09ERT5nZXREZWNpbWFsU2l6ZSgpPC9DT0RFPjwvQT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5TSVpFX0xPTkciPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU0laRV9CSUdfSU5URUdFUiI+PCEtLSAtLT48L0E+PEgzPgotU0laRV9CSUdfSU5URUdFUjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+U0laRV9CSUdfSU5URUdFUjwvQj48L1BSRT4KLTxETD4KLTxERD5GaXRzIGluIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPjxDT0RFPkJpZ0ludGVnZXI8L0NPREU+PC9BPi4gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldERlY2ltYWxTaXplKCkiPjxDT0RFPmdldERlY2ltYWxTaXplKCk8L0NPREU+PC9BPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLlNJWkVfQklHX0lOVEVHRVIiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU0laRV9CSUdfREVDSU1BTCI+PCEtLSAtLT48L0E+PEgzPgotU0laRV9CSUdfREVDSU1BTDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+U0laRV9CSUdfREVDSU1BTDwvQj48L1BSRT4KLTxETD4KLTxERD5GaXRzIGluIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiPjxDT0RFPkJpZ0RlY2ltYWw8L0NPREU+PC9BPi4gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldERlY2ltYWxTaXplKCkiPjxDT0RFPmdldERlY2ltYWxTaXplKCk8L0NPREU+PC9BPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLlNJWkVfQklHX0RFQ0lNQUwiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iV1NfVU5TUEVDSUZJRUQiPjwhLS0gLS0+PC9BPjxIMz4KLVdTX1VOU1BFQ0lGSUVEPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5XU19VTlNQRUNJRklFRDwvQj48L1BSRT4KLTxETD4KLTxERD5XaGl0ZXNwYWNlIHJ1bGUgdW5zcGVjaWZpZWQuICBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0V2hpdGVTcGFjZVJ1bGUoKSI+PENPREU+Z2V0V2hpdGVTcGFjZVJ1bGUoKTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuV1NfVU5TUEVDSUZJRUQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iV1NfUFJFU0VSVkUiPjwhLS0gLS0+PC9BPjxIMz4KLVdTX1BSRVNFUlZFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5XU19QUkVTRVJWRTwvQj48L1BSRT4KLTxETD4KLTxERD5XaGl0ZXNwYWNlIHByZXNlcnZlZC4gIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRXaGl0ZVNwYWNlUnVsZSgpIj48Q09ERT5nZXRXaGl0ZVNwYWNlUnVsZSgpPC9DT0RFPjwvQT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZS5XU19QUkVTRVJWRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJXU19SRVBMQUNFIj48IS0tIC0tPjwvQT48SDM+Ci1XU19SRVBMQUNFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5XU19SRVBMQUNFPC9CPjwvUFJFPgotPERMPgotPEREPldoaXRlc3BhY2UgcmVwbGFjZWQgYnkgb3JkaW5hcnkgc3BhY2UuICBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0V2hpdGVTcGFjZVJ1bGUoKSI+PENPREU+Z2V0V2hpdGVTcGFjZVJ1bGUoKTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUuV1NfUkVQTEFDRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJXU19DT0xMQVBTRSI+PCEtLSAtLT48L0E+PEgzPgotV1NfQ09MTEFQU0U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPldTX0NPTExBUFNFPC9CPjwvUFJFPgotPERMPgotPEREPldoaXRlc3BhY2UgY29sbGFwc2VkIGFuZCB0cmltbWVkLiAgU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI2dldFdoaXRlU3BhY2VSdWxlKCkiPjxDT0RFPmdldFdoaXRlU3BhY2VSdWxlKCk8L0NPREU+PC9BPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLldTX0NPTExBUFNFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXROYW1lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE5hbWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+IDxCPmdldE5hbWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UaGUgbmFtZSB1c2VkIHRvIGRlc2NyaWJlIHRoZSB0eXBlIGluIHRoZSBzY2hlbWEuCi0gTnVsbCBpZiB0aGUgdHlwZSBpcyBhbm9ueW1vdXMgKG5lc3RlZCksIG9yIGlmIGl0IGlzIGEgZG9jdW1lbnQgdHlwZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sI2dldE5hbWUoKSI+Z2V0TmFtZTwvQT48L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sIj5TY2hlbWFDb21wb25lbnQ8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0Q29udGFpbmVyRmllbGQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Q29udGFpbmVyRmllbGQ8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUZpZWxkLmh0bWwiPlNjaGVtYUZpZWxkPC9BPiA8Qj5nZXRDb250YWluZXJGaWVsZDwvQj4oKTwvUFJFPgotPERMPgotPEREPlRoZSBwYXJlbnQgc2NoZW1hIGVsZW1lbnQuCi0gTnVsbCBmb3IgdG9wLWxldmVsIChuYW1lZCkgdHlwZXMgYW5kIGRvY3VtZW50IHR5cGVzLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc0RvY3VtZW50VHlwZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc0RvY3VtZW50VHlwZTwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNEb2N1bWVudFR5cGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoaXMgaXMgYSBkb2N1bWVudCB0eXBlLgotIDxwPgotIERvY3VtZW50IHR5cGVzIGFyZSBnZW5lcmF0ZWQgZm9yIGV2ZXJ5IGdsb2JhbCBlbGVtZW50LiBBIGRvY3VtZW50Ci0gdHlwZSBpcyBhbiB1bm5hbWVkIGNvbXBsZXggdHlwZSB0aGF0IGNvbnRhaW5zIGV4YWN0bHkgb25lIGVsZW1lbnQ6Ci0gd2UgZGVmaW5lIHRoZXNlIHR5cGVzLCBiZWNhdXNlIHRoZXkgYXJlIHRoZSB0eXBlcyBvZiB0aGUgImRvY3VtZW50cyIKLSB3aGljaCBjb250YWluIHRoZSBkZWZpbmVkIGdsb2JhbCBlbGVtZW50cywgYW5kIHRoZXkgYWxsIHR1cm4gaW50bwotIEphdmEgdHlwZXMuIChOYW1lZCBFbGVtZW50bmFtZURvY3VtZW50LikKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNBdHRyaWJ1dGVUeXBlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzQXR0cmlidXRlVHlwZTwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNBdHRyaWJ1dGVUeXBlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiB0aGlzIGlzIGEgYXR0cmlidXRlIHR5cGUuCi0gPHA+Ci0gQXR0cmlidXRlIHR5cGVzIGFyZSBnZW5lcmF0ZWQgZm9yIGV2ZXJ5IGdsb2JhbCBhdHRyaWJ1dGUuIEFuIGF0dHJpYnV0ZQotIHR5cGUgaXMgYW4gdW5uYW1lZCBjb21wbGV4IHR5cGUgdGhhdCBjb250YWlucyBleGFjdGx5IG9uZSBhdHRyaWJ1dGU6Ci0gd2UgZGVmaW5lIHRoZXNlIHR5cGVzLCBiZWNhdXNlIHRoZXkgYXJlIHRoZSB0eXBlcyBvZiB0aGUgImF0dHJpYnV0ZSBkb2N1bWVudHMiCi0gd2hpY2ggY29udGFpbiB0aGUgZGVmaW5lZCBnbG9iYWwgYXR0cmlidXRlLCBhbmQgdGhleSBhbGwgdHVybiBpbnRvCi0gSmF2YSB0eXBlcy4gKE5hbWVkIEF0dHJpYnV0ZW5hbWVBdHRyaWJ1dGUuKQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXREb2N1bWVudEVsZW1lbnROYW1lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldERvY3VtZW50RWxlbWVudE5hbWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+IDxCPmdldERvY3VtZW50RWxlbWVudE5hbWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBkb2N1bWVudCBlbGVtZW50IG5hbWUgaWYgdGhpcyBpcyBhIGRvY3VtZW50IHR5cGUsCi0gb3IgbnVsbCBvdGhlcndpc2UuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEF0dHJpYnV0ZVR5cGVBdHRyaWJ1dGVOYW1lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEF0dHJpYnV0ZVR5cGVBdHRyaWJ1dGVOYW1lPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiA8Qj5nZXRBdHRyaWJ1dGVUeXBlQXR0cmlidXRlTmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGF0dHJpYnV0ZSBxbmFtZSBpZiB0aGlzIGlzIGEgYXR0cmlidXRlIHR5cGUsCi0gb3IgbnVsbCBvdGhlcndpc2UuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE91dGVyVHlwZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRPdXRlclR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+Z2V0T3V0ZXJUeXBlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VGhlIG91dGVyIHNjaGVtYSB0eXBlLgotIE51bGwgZm9yIHRvcC1sZXZlbCAobmFtZWQpIHR5cGVzLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc1NraXBwZWRBbm9ueW1vdXNUeXBlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzU2tpcHBlZEFub255bW91c1R5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzU2tpcHBlZEFub255bW91c1R5cGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoaXMgYW5vbnltb3VzIHR5cGUgaGFzIG5vIGNvcnJlc3BvbmRpbmcgSmF2YSB0eXBlLiBUcnVlIGZvcgotIGFub255bW91cyB0eXBlcyBuZXN0ZWQgd2l0aGluIHNpbXBsZSB0eXBlIHJlc3RyaWN0aW9ucy4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNDb21waWxlZCgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc0NvbXBpbGVkPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5pc0NvbXBpbGVkPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiB0aGlzIHNjaGVtYSB0eXBlIHdhcyBjb21waWxlZCB0byBoYXZlIGEgY29ycmVzcG9uZGluZwotIEphdmEgY2xhc3MuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEZ1bGxKYXZhTmFtZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRGdWxsSmF2YU5hbWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPmdldEZ1bGxKYXZhTmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlRoZSBmdWxseS1xdWFsaWZpZWQgSmF2YSB0eXBlIG5hbWUgb2YgdGhlIGNsYXNzLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTaG9ydEphdmFOYW1lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNob3J0SmF2YU5hbWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPmdldFNob3J0SmF2YU5hbWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UaGUgc2hvcnQgdW5xdWFsZmlpZWQgSmF2YSBuYW1lIGZvciB0aGUgY2xhc3MuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEZ1bGxKYXZhSW1wbE5hbWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RnVsbEphdmFJbXBsTmFtZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+Z2V0RnVsbEphdmFJbXBsTmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlRoZSBmdWxseS1xdWFsaWZpZWQgSmF2YSB0eXBlIG5hbWUgb2YgdGhlIGltcGxlbWVudGF0aW9uIGNsYXNzLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTaG9ydEphdmFJbXBsTmFtZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTaG9ydEphdmFJbXBsTmFtZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+Z2V0U2hvcnRKYXZhSW1wbE5hbWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UaGUgc2hvcnQgdW5xdWFsZmlpZWQgSmF2YSBuYW1lIGZvciB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3MuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEphdmFDbGFzcygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRKYXZhQ2xhc3M8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0NsYXNzLmh0bWwiPkNsYXNzPC9BPiA8Qj5nZXRKYXZhQ2xhc3M8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UaGUgSmF2YSBjbGFzcyBjb3JyZXNwb25kaW5nIHRvIHRoaXMgc2NoZW1hIHR5cGUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEVudW1KYXZhQ2xhc3MoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RW51bUphdmFDbGFzczwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvQ2xhc3MuaHRtbCI+Q2xhc3M8L0E+IDxCPmdldEVudW1KYXZhQ2xhc3M8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UaGUgSmF2YSBjbGFzcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBlbnVtZXJhdGlvbiB0eXBlIGZvciB0aGlzIHNjaGVtYSB0eXBlLAotIGlmIGFwcGxpY2FibGUgKG9yIG51bGwgaWYgbm90IGFuIGVudW1lcmF0aW9uKS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNBbm9ueW1vdXNUeXBlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzQW5vbnltb3VzVHlwZTwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNBbm9ueW1vdXNUeXBlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiB0aGUgWHNkIHR5cGUgaXMgYW5vbnltb3VzIChpLmUuLCBub3QgdG9wLWxldmVsKS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNCdWlsdGluVHlwZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc0J1aWx0aW5UeXBlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5pc0J1aWx0aW5UeXBlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBmb3IgYW55IG9mIHRoZSA0MCsgYnVpbHQtaW4gdHlwZXMuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzU2ltcGxlVHlwZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc1NpbXBsZVR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzU2ltcGxlVHlwZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlRydWUgZm9yIHRoZSBhbnlTaW1wbGVUeXBlIGFuZCBhbnkgcmVzdHJpY3Rpb25zL3VuaW9ucy9saXN0cy4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0QmFzZVR5cGUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0QmFzZVR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+Z2V0QmFzZVR5cGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGJhc2UgcmVzdHJpY3Rpb24gb3IgZXh0ZW5zaW9uIHR5cGUuIFVuaW9ucyBhbmQgbGlzdHMKLSByZXR1cm4gdGhlIGFueVNpbXBsZVR5cGUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldENvbW1vbkJhc2VUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldENvbW1vbkJhc2VUeXBlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPmdldENvbW1vbkJhc2VUeXBlPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4mbmJzcDt0eXBlKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgY29tbW9uIGJhc2UgdHlwZSB3aXRoIHRoZSBnaXZlbiB0eXBlLiBUaGUgcmV0dXJuZWQKLSB0eXBlIGlzIHRoZSBtb3N0IHNwZWNpZmljIGRlY2xhcmVkIGJhc2UgdHlwZSBvZiBib3RoIHR5cGVzLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc0Fzc2lnbmFibGVGcm9tKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzQXNzaWduYWJsZUZyb208L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzQXNzaWduYWJsZUZyb208L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPiZuYnNwO3R5cGUpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHR5cGUgZGVyaXZlcyBmcm9tIHRoaXMgdHlwZSAob3IgaWYKLSBpdCBpcyB0aGUgc2FtZSB0eXBlKS4KLQotIE5vdGUgdGhhdCBYbWxPYmplY3QudHlwZSAodGhlIGFueVR5cGUpIGlzIGFzc2lnbmFibGUKLSBmcm9tIGFsbCB0eXBlLCBhbmQgdGhlIFhtbEJlYW5zLm5vVHlwZSAodGhlIGFic2VuY2Ugb2YKLSBhIHR5cGUpIGlzIGFzc2lnbmFibGUgdG8gYWxsIHR5cGVzLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXREZXJpdmF0aW9uVHlwZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXREZXJpdmF0aW9uVHlwZTwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5nZXREZXJpdmF0aW9uVHlwZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYW4gaW50ZWdlciBmb3IgdGhlIGRlcml2YXRpb24gdHlwZSwgZWl0aGVyIAotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0RUX0VYVEVOU0lPTiI+PENPREU+RFRfRVhURU5TSU9OPC9DT0RFPjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0RUX1JFU1RSSUNUSU9OIj48Q09ERT5EVF9SRVNUUklDVElPTjwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNEVF9OT1RfREVSSVZFRCI+PENPREU+RFRfTk9UX0RFUklWRUQ8L0NPREU+PC9BPi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0QnVpbHRpblR5cGVDb2RlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEJ1aWx0aW5UeXBlQ29kZTwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5nZXRCdWlsdGluVHlwZUNvZGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGFuIGludGVnZXIgZm9yIGJ1aWx0aW4gdHlwZXMgdGhhdCBjYW4gYmUgdXNlZAotIGZvciBxdWljayBjb21wYXJpc29uLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc1VSVHlwZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc1VSVHlwZTwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNVUlR5cGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGZvciBhbnlUeXBlIGFuZCBhbnlTaW1wbGVUeXBlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc05vVHlwZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc05vVHlwZTwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNOb1R5cGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGZvciB0aGUgdHlwZSBvYmplY3QgdGhhdCByZXByZXNlbnRzIGEgdGhlIGFic2VuY2Ugb2YgYSBkZXRlcm1pbmVkIHR5cGUuCi0gWE1MIE9iamVjdHMgd2hvc2UgdHlwZSBpc05vVHlwZSgpIGFyZSBuZXZlciB2YWxpZC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0VHlwZVN5c3RlbSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRUeXBlU3lzdGVtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwiPlNjaGVtYVR5cGVTeXN0ZW08L0E+IDxCPmdldFR5cGVTeXN0ZW08L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBTY2hlbWFUeXBlTG9hZGVyIGluIHdoaWNoIHRoaXMgdHlwZSB3YXMgZGVmaW5lZC4KLSBDb21wbGV4IHR5cGVzIGFyZSBkZWZpbmVkIGFuZCB1c2VkIGluIGV4YWN0bHkgb25lIHNjaGVtYSB0eXBlCi0gc3lzdGVtLCBidXQgc2ltcGxlIHR5cGVzIGFyZSBkZWZpbmVkIGluIG9uZSB0eXBlIHN5c3RlbSBhbmQgY2FuCi0gYmUgdXNlZCBpbiBhbnkgbnVtYmVyIG9mIHR5cGUgc3lzdGVtcy4gVGhlIG1vc3QgY29tbW9uIGNhc2UgaXMKLSB0aGUgYnVpbHRpbiB0eXBlcywgd2hpY2ggYXJlIGRlZmluZWQgaW4gdGhlIGJ1aWx0aW4gdHlwZSBzeXN0ZW0KLSBhbmQgdXNlZCBlbHNld2hlcmUuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCNnZXRUeXBlU3lzdGVtKCkiPmdldFR5cGVTeXN0ZW08L0E+PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+U2NoZW1hQ29tcG9uZW50PC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFNvdXJjZU5hbWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U291cmNlTmFtZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+Z2V0U291cmNlTmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGZpbGVuYW1lIGZvciB0aGUgWFNEIGZpbGUgZnJvbSB3aGljaCB0aGlzIHR5cGUKLSB3YXMgbG9hZGVkLiBJbnRlbmRlZCBmb3IgdXNlIHdoZW4gZGVidWdnaW5nLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc0Fic3RyYWN0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzQWJzdHJhY3Q8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzQWJzdHJhY3Q8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoaXMgdHlwZSBjYW5ub3QgYmUgdXNlZCBkaXJlY3RseSBpbiBpbnN0YW5jZXMKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZmluYWxFeHRlbnNpb24oKSI+PCEtLSAtLT48L0E+PEgzPgotZmluYWxFeHRlbnNpb248L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmZpbmFsRXh0ZW5zaW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiBvdGhlciB0eXBlcyBjYW5ub3QgZXh0ZW5kIHRoaXMgdHlwZSAob25seSBmb3IgY29tcGxleCB0eXBlcykKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZmluYWxSZXN0cmljdGlvbigpIj48IS0tIC0tPjwvQT48SDM+Ci1maW5hbFJlc3RyaWN0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5maW5hbFJlc3RyaWN0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiBvdGhlciB0eXBlcyBjYW5ub3QgcmVzdHJpY3QgdGhpcyB0eXBlCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImZpbmFsTGlzdCgpIj48IS0tIC0tPjwvQT48SDM+Ci1maW5hbExpc3Q8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmZpbmFsTGlzdDwvQj4oKTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgbGlzdCBkZXJpdmF0aW9uIG9mIHRoaXMgdHlwZSBpcyBwcm9oaWJpdGVkIChvbmx5IGZvciBzaW1wbGUgdHlwZXMpCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImZpbmFsVW5pb24oKSI+PCEtLSAtLT48L0E+PEgzPgotZmluYWxVbmlvbjwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+ZmluYWxVbmlvbjwvQj4oKTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgdW5pb24gZGVyaXZhdGlvbiBvZiB0aGlzIHR5cGUgaXMgcHJvaGliaXRlZCAob25seSBmb3Igc2ltcGxlIHR5cGVzKQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJibG9ja0V4dGVuc2lvbigpIj48IS0tIC0tPjwvQT48SDM+Ci1ibG9ja0V4dGVuc2lvbjwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+YmxvY2tFeHRlbnNpb248L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIGV4dGVuc2lvbnMgb2YgdGhpcyB0eXBlIGNhbm5vdCBiZSBzdWJzdGl0dXRlZCBmb3IgdGhpcyB0eXBlCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImJsb2NrUmVzdHJpY3Rpb24oKSI+PCEtLSAtLT48L0E+PEgzPgotYmxvY2tSZXN0cmljdGlvbjwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+YmxvY2tSZXN0cmljdGlvbjwvQj4oKTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgcmVzdHJpY3Rpb25zIG9mIHRoaXMgdHlwZSBjYW5ub3QgYmUgc3Vic3RpdHV0ZWQgZm9yIHRoaXMgdHlwZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRDb250ZW50VHlwZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRDb250ZW50VHlwZTwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5nZXRDb250ZW50VHlwZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjRU1QVFlfQ09OVEVOVCI+PENPREU+RU1QVFlfQ09OVEVOVDwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNTSU1QTEVfQ09OVEVOVCI+PENPREU+U0lNUExFX0NPTlRFTlQ8L0NPREU+PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjRUxFTUVOVF9DT05URU5UIj48Q09ERT5FTEVNRU5UX0NPTlRFTlQ8L0NPREU+PC9BPiwgb3IKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNNSVhFRF9DT05URU5UIj48Q09ERT5NSVhFRF9DT05URU5UPC9DT0RFPjwvQT4gZm9yIGNvbXBsZXggdHlwZXMuIEZvciBub25jb21wbGV4IHR5cGVzLCByZXR1cm5zCi0gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjTk9UX0NPTVBMRVhfVFlQRSI+PENPREU+Tk9UX0NPTVBMRVhfVFlQRTwvQ09ERT48L0E+LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRBbm9ueW1vdXNUeXBlcygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRBbm9ueW1vdXNUeXBlczwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPltdIDxCPmdldEFub255bW91c1R5cGVzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VGhlIGFycmF5IG9mIGlubmVyIChhbm9ueW1vdXMpIHR5cGVzIGRlZmluZWQKLSB3aXRoaW4gdGhpcyB0eXBlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRFbGVtZW50UHJvcGVydHkoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEVsZW1lbnRQcm9wZXJ0eTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCI+U2NoZW1hUHJvcGVydHk8L0E+IDxCPmdldEVsZW1lbnRQcm9wZXJ0eTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO2VsdE5hbWUpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIFNjaGVtYVByb3BlcnR5IGNvcnJlc3BvbmRpbmcgdG8gYW4gZWxlbWVudCB3aXRoaW4gdGhpcwotIGNvbXBsZXggdHlwZSBieSBsb29raW5nIHVwIHRoZSBlbGVtZW50IG5hbWUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEVsZW1lbnRQcm9wZXJ0aWVzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEVsZW1lbnRQcm9wZXJ0aWVzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQcm9wZXJ0eS5odG1sIj5TY2hlbWFQcm9wZXJ0eTwvQT5bXSA8Qj5nZXRFbGVtZW50UHJvcGVydGllczwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYWxsIHRoZSBTY2hlbWFQcm9wZXJ0aWVzIGNvcnJlc3BvbmRpbmcgdG8gZWxlbWVudHMuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEF0dHJpYnV0ZVByb3BlcnR5KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRBdHRyaWJ1dGVQcm9wZXJ0eTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCI+U2NoZW1hUHJvcGVydHk8L0E+IDxCPmdldEF0dHJpYnV0ZVByb3BlcnR5PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7YXR0ck5hbWUpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIFNjaGVtYVByb3BlcnR5IGNvcnJlc3BvbmRpbmcgdG8gYW4gYXR0cmlidXRlIHdpdGhpbiB0aGlzCi0gY29tcGxleCB0eXBlIGJ5IGxvb2tpbmcgdXAgdGhlIGF0dHJpYnV0ZSBuYW1lLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRBdHRyaWJ1dGVQcm9wZXJ0aWVzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEF0dHJpYnV0ZVByb3BlcnRpZXM8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwiPlNjaGVtYVByb3BlcnR5PC9BPltdIDxCPmdldEF0dHJpYnV0ZVByb3BlcnRpZXM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGFsbCB0aGUgU2NoZW1hUHJvcGVydGllcyBjb3JyZXNwb25kaW5nIHRvIGF0dHJpYnV0ZXMuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFByb3BlcnRpZXMoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0UHJvcGVydGllczwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCI+U2NoZW1hUHJvcGVydHk8L0E+W10gPEI+Z2V0UHJvcGVydGllczwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYWxsIHRoZSBTY2hlbWFQcm9wZXJ0aWVzIHdpdGhpbiB0aGlzIGNvbXBsZXggdHlwZSwKLSBlbGVtZW50cyBmb2xsb3dlZCBieSBhdHRyaWJ1dGVzLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXREZXJpdmVkUHJvcGVydGllcygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXREZXJpdmVkUHJvcGVydGllczwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hUHJvcGVydHkuaHRtbCI+U2NoZW1hUHJvcGVydHk8L0E+W10gPEI+Z2V0RGVyaXZlZFByb3BlcnRpZXM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBTY2hlbWFQcm9wZXJ0aWVzIGRlZmluZWQgYnkgdGhpcyBjb21wbGV4IHR5cGUsCi0gZXhjbHVzaXZlIG9mIHRoZSBiYXNlIHR5cGUgKGlmIGFueSkuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEF0dHJpYnV0ZU1vZGVsKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEF0dHJpYnV0ZU1vZGVsPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVNb2RlbC5odG1sIj5TY2hlbWFBdHRyaWJ1dGVNb2RlbDwvQT4gPEI+Z2V0QXR0cmlidXRlTW9kZWw8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBhdHRyaWJ1dGUgbW9kZWwgZm9yIHRoaXMgY29tcGxleCB0eXBlICh3aXRoIHNpbXBsZSBvciBjb21wbGV4IGNvbnRlbnQpLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJoYXNBdHRyaWJ1dGVXaWxkY2FyZHMoKSI+PCEtLSAtLT48L0E+PEgzPgotaGFzQXR0cmlidXRlV2lsZGNhcmRzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5oYXNBdHRyaWJ1dGVXaWxkY2FyZHM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoaXMgdHlwZSBwZXJtaXRzIHdpbGRjYXJkIGF0dHJpYnV0ZXMuIFNlZSB0aGUgYXR0cmlidXRlIG1vZGVsIGZvcgotIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgd2hpY2ggd2lsZGNhcmRzIGFyZSBhbGxvd2VkLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRDb250ZW50TW9kZWwoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Q29udGVudE1vZGVsPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFQYXJ0aWNsZS5odG1sIj5TY2hlbWFQYXJ0aWNsZTwvQT4gPEI+Z2V0Q29udGVudE1vZGVsPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgY29tcGxleCBjb250ZW50IG1vZGVsIGZvciB0aGlzIGNvbXBsZXggdHlwZSAod2l0aCBjb21wbGV4IGNvbnRlbnQpLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJoYXNFbGVtZW50V2lsZGNhcmRzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWhhc0VsZW1lbnRXaWxkY2FyZHM8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmhhc0VsZW1lbnRXaWxkY2FyZHM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoaXMgdHlwZSBwZXJtaXRzIGVsZW1lbnQgd2lsZGNhcmRzLiBTZWUgdGhlIGNvbnRlbnQgbW9kZWwgZm9yCi0gbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCB3aWxkY2FyZHMgYXJlIGFsbG93ZWQsIGFuZCB3aGVyZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNWYWxpZFN1YnN0aXR1dGlvbihqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PCEtLSAtLT48L0E+PEgzPgotaXNWYWxpZFN1YnN0aXR1dGlvbjwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNWYWxpZFN1YnN0aXR1dGlvbjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO25hbWUpPC9QUkU+Ci08REw+Ci08REQ+Rm9yIGRvY3VtZW50IHR5cGVzLCB0cnVlIGlmIHRoZSBnaXZlbiBuYW1lIGNhbiBiZSBzdWJzdGl0dXRlZCBmb3IgdGhlCi0gZG9jdW1lbnQgZWxlbWVudCBuYW1lLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJoYXNBbGxDb250ZW50KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWhhc0FsbENvbnRlbnQ8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmhhc0FsbENvbnRlbnQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoZSBjb21wbGV4IGNvbnRlbnQgbW9kZWwgZm9yIHRoaXMgY29tcGxleCB0eXBlIGlzIGFuICJhbGwiIGdyb3VwLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc09yZGVyU2Vuc2l0aXZlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzT3JkZXJTZW5zaXRpdmU8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzT3JkZXJTZW5zaXRpdmU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHBhcnRpY2xlcyBoYXZlIHNhbWUgZGVmYXVsdHMsIG5pbGxhYmlsaXR5LCBldGMsIHRoYXQgYXJlCi0gaW52YXJpYW50IHdoZW4gb3JkZXIgY2hhbmdlcy4gQ29tcHV0ZWQgb25seSBmb3IgSmF2YWl6ZWQgdHlwZXMuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEVsZW1lbnRUeXBlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUsIGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUsIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlcikiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEVsZW1lbnRUeXBlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPmdldEVsZW1lbnRUeXBlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7ZWx0TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDt4c2lUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXI8L0E+Jm5ic3A7d2lsZGNhcmRUeXBlTG9hZGVyKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHR5cGUgb2YgYSBjaGlsZCBlbGVtZW50IGJhc2VkIG9uIHRoZSBlbGVtZW50IG5hbWUgYW5kCi0gYW4geHNpOnR5cGUgYXR0cmlidXRlIChhbmQgdGhlIHR5cGUgc3lzdGVtIHdpdGhpbiB3aGljaCBuYW1lcyBhcmUKLSByZXNvbHZlZCkuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEF0dHJpYnV0ZVR5cGUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSwgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0QXR0cmlidXRlVHlwZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPiA8Qj5nZXRBdHRyaWJ1dGVUeXBlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7ZWx0TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXI8L0E+Jm5ic3A7d2lsZGNhcmRUeXBlTG9hZGVyKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHR5cGUgb2YgYW4gYXR0cmlidXRlIGJhc2VkIG9uIHRoZSBhdHRyaWJ1dGUgbmFtZSBhbmQKLSB0aGUgdHlwZSBzeXN0ZW0gd2l0aGluIHdoaWNoICh3aWxkY2FyZCkgbmFtZXMgYXJlIHJlc29sdmVkLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRGYWNldChpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRGYWNldDwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiA8Qj5nZXRGYWNldDwvQj4oaW50Jm5ic3A7ZmFjZXRDb2RlKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBmYWNldCwgb3IgbnVsbCBpZgotIG5vbmUgaXMgc2V0LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc0ZhY2V0Rml4ZWQoaW50KSI+PCEtLSAtLT48L0E+PEgzPgotaXNGYWNldEZpeGVkPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5pc0ZhY2V0Rml4ZWQ8L0I+KGludCZuYnNwO2ZhY2V0Q29kZSk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoZSBnaXZlbiBmYWNldCBpcyBmaXhlZC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ib3JkZXJlZCgpIj48IS0tIC0tPjwvQT48SDM+Ci1vcmRlcmVkPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPm9yZGVyZWQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIG9yZGVyZWQuICBSZXR1cm5zIGVpdGhlciA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNVTk9SREVSRUQiPjxDT0RFPlVOT1JERVJFRDwvQ09ERT48L0E+LAotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1BBUlRJQUxfT1JERVIiPjxDT0RFPlBBUlRJQUxfT1JERVI8L0NPREU+PC9BPiwgb3IgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjVE9UQUxfT1JERVIiPjxDT0RFPlRPVEFMX09SREVSPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzQm91bmRlZCgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc0JvdW5kZWQ8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzQm91bmRlZDwvQj4oKTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgYm91bmRlZC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNGaW5pdGUoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNGaW5pdGU8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzRmluaXRlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiBmaW5pdGUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzTnVtZXJpYygpIj48IS0tIC0tPjwvQT48SDM+Ci1pc051bWVyaWM8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzTnVtZXJpYzwvQj4oKTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgbnVtZXJpYy4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaGFzUGF0dGVybkZhY2V0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWhhc1BhdHRlcm5GYWNldDwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aGFzUGF0dGVybkZhY2V0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiB0aGVyZSBhcmUgcmVnZXggcGF0dGVybiBmYWNlbnRzCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFBhdHRlcm5zKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFBhdHRlcm5zPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPltdIDxCPmdldFBhdHRlcm5zPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJtYXRjaFBhdHRlcm5GYWNldChqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotbWF0Y2hQYXR0ZXJuRmFjZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPm1hdGNoUGF0dGVybkZhY2V0PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cyk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoZSBnaXZlbiBzdHJpbmcgbWF0Y2hlcyB0aGUgcGF0dGVybiBmYWNldHMuCi0gQWx3YXlzIHRydWUgaWYgdGhlcmUgYXJlIG5vIHBhdHRlcm4gZmFjZXRzLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRFbnVtZXJhdGlvblZhbHVlcygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRFbnVtZXJhdGlvblZhbHVlczwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPltdIDxCPmdldEVudW1lcmF0aW9uVmFsdWVzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgYXJyYXkgb2YgdmFsaWQgb2JqZWN0cyBmcm9tIHRoZQotIGVudW1lcmF0aW9uIGZhY2V0LCBudWxsIGlmIG5vIGVudW1lcmF0aW9uIGRlZmluZWQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Imhhc1N0cmluZ0VudW1WYWx1ZXMoKSI+PCEtLSAtLT48L0E+PEgzPgotaGFzU3RyaW5nRW51bVZhbHVlczwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aGFzU3RyaW5nRW51bVZhbHVlczwvQj4oKTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgdGhpcyBpcyBhIHN0cmluZyBlbnVtIHdoZXJlIGFuIGludGVnZXIKLSBpcyBhc3NpZ25lZCB0byBlYWNoIGVudW1lcmF0ZWQgdmFsdWUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEJhc2VFbnVtVHlwZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRCYXNlRW51bVR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+Z2V0QmFzZUVudW1UeXBlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+SWYgdGhpcyBpcyBhIHN0cmluZyBlbnVtZXJhdGlvbiwgcmV0dXJucyB0aGUgbW9zdCBiYXNpYyBiYXNlIHNjaGVtYQotIHR5cGUgdGhhdCB0aGlzIGVudWVtcmF0aW9uIGlzIGJhc2VkIG9uLiBPdGhlcndpc2UgcmV0dXJucyBudWxsLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRTdHJpbmdFbnVtRW50cmllcygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTdHJpbmdFbnVtRW50cmllczwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hU3RyaW5nRW51bUVudHJ5Lmh0bWwiPlNjaGVtYVN0cmluZ0VudW1FbnRyeTwvQT5bXSA8Qj5nZXRTdHJpbmdFbnVtRW50cmllczwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGFycmF5IG9mIFNjaGVtYVN0cmluZ0VudW1FbnRyaWVzIGZvciB0aGlzIHR5cGU6IHRoaXMKLSBhcnJheSBpbmNsdWRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgamF2YSBjb25zdGFudCBuYW1lcyB1c2VkIGZvcgotIGVhY2ggc3RyaW5nIGVudW0gZW50cnkuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImVudW1FbnRyeUZvclN0cmluZyhqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotZW51bUVudHJ5Rm9yU3RyaW5nPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFTdHJpbmdFbnVtRW50cnkuaHRtbCI+U2NoZW1hU3RyaW5nRW51bUVudHJ5PC9BPiA8Qj5lbnVtRW50cnlGb3JTdHJpbmc8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHN0cmluZyBlbnVtIGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGVudW1lcmF0ZWQKLSBzdHJpbmcsIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gbWF0Y2ggb3IgdGhpcyB0eXBlIGlzIG5vdAotIGEgc3RyaW5nIGVudW1lcmF0aW9uLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJlbnVtRm9yU3RyaW5nKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1lbnVtRm9yU3RyaW5nPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLmh0bWwiPlN0cmluZ0VudW1BYnN0cmFjdEJhc2U8L0E+IDxCPmVudW1Gb3JTdHJpbmc8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHN0cmluZyBlbnVtIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGVudW1lcmF0ZWQKLSBzdHJpbmcsIG9yIG51bGwgaWYgdGhlcmUgaXMgbm8gbWF0Y2ggb3IgdGhpcyB0eXBlIGlzIG5vdAotIGEgc3RyaW5nIGVudW1lcmF0aW9uLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJlbnVtRm9ySW50KGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLWVudW1Gb3JJbnQ8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuaHRtbCI+U3RyaW5nRW51bUFic3RyYWN0QmFzZTwvQT4gPEI+ZW51bUZvckludDwvQj4oaW50Jm5ic3A7aSk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBzdHJpbmcgZW51bSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBlbnVtZXJhdGVkCi0gc3RyaW5nLCBvciBudWxsIGlmIHRoZXJlIGlzIG5vIG1hdGNoIG9yIHRoaXMgdHlwZSBpcyBub3QKLSBhIHN0cmluZyBlbnVtZXJhdGlvbi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNQcmltaXRpdmVUeXBlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzUHJpbWl0aXZlVHlwZTwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNQcmltaXRpdmVUeXBlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBmb3IgYW55IG9mIHRoZSAyMCBwcmltaXRpdmUgdHlwZXMgKHBsdXMgYW55U2ltcGxlVHlwZSkKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U2ltcGxlVmFyaWV0eSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTaW1wbGVWYXJpZXR5PC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldFNpbXBsZVZhcmlldHk8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHdoZXRoZXIgdGhlIHNpbXBsZSB0eXBlIGlzIEFUT01JQywgVU5JT04sIG9yIExJU1QuCi0gUmV0dXJucyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNOT1RfU0lNUExFIj48Q09ERT5OT1RfU0lNUExFPC9DT0RFPjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0FUT01JQyI+PENPREU+QVRPTUlDPC9DT0RFPjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1VOSU9OIj48Q09ERT5VTklPTjwvQ09ERT48L0E+LAotIG9yIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI0xJU1QiPjxDT0RFPkxJU1Q8L0NPREU+PC9BPi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0UHJpbWl0aXZlVHlwZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRQcmltaXRpdmVUeXBlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPmdldFByaW1pdGl2ZVR5cGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5Gb3IgYXRvbWljIHR5cGVzIG9ubHk6IGdldCB0aGUgcHJpbWl0aXZlIHR5cGUgdW5kZXJseWluZyB0aGlzIG9uZS4KLSA8cD4KLSBSZXR1cm5zIG51bGwgaWYgdGhpcyBpcyBub3QgYW4gYXRvbWljIHR5cGUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldERlY2ltYWxTaXplKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldERlY2ltYWxTaXplPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldERlY2ltYWxTaXplPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+Rm9yIGF0b21pYyBudW1lcmljIHJlc3RyaWN0aW9ucyBvZiBkZWNpbWFsIG9ubHk6IHRoZQotIG51bWVyaWMgc2l6ZSBjYXRlZ29yeS4gVGFrZXMgaW50byBhY2NvdW50IG1pbiBhbmQgbWF4Ci0gcmVzdHJpY3Rpb25zIGFzIHdlbGwgYXMgdG90YWxEaWdpdHMgYW5kIGZyYWN0aW9uRGlnaXRzCi0gZmFjZXRzLgotIDxwPgotIFJldHVybnMgZWl0aGVyIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI05PVF9ERUNJTUFMIj48Q09ERT5OT1RfREVDSU1BTDwvQ09ERT48L0E+LAotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1NJWkVfQllURSI+PENPREU+U0laRV9CWVRFPC9DT0RFPjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1NJWkVfU0hPUlQiPjxDT0RFPlNJWkVfU0hPUlQ8L0NPREU+PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjU0laRV9JTlQiPjxDT0RFPlNJWkVfSU5UPC9DT0RFPjwvQT4sCi0gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjU0laRV9MT05HIj48Q09ERT5TSVpFX0xPTkc8L0NPREU+PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjU0laRV9CSUdfSU5URUdFUiI+PENPREU+U0laRV9CSUdfSU5URUdFUjwvQ09ERT48L0E+LCBvcgotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1NJWkVfQklHX0RFQ0lNQUwiPjxDT0RFPlNJWkVfQklHX0RFQ0lNQUw8L0NPREU+PC9BPi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0VW5pb25NZW1iZXJUeXBlcygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRVbmlvbk1lbWJlclR5cGVzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+W10gPEI+Z2V0VW5pb25NZW1iZXJUeXBlczwvQj4oKTwvUFJFPgotPERMPgotPEREPkZvciB1bmlvbiB0eXBlcyBvbmx5OiBnZXQgdGhlIHNoYWxsb3cgbWVtYmVyIHR5cGVzLiBUaGlzCi0gcmV0dXJucyB0aGUgZGVjbGFyZWQgbWVtYmVyIHR5cGVzIG9mIHRoZSB1bmlvbiwgc28sIGZvcgotIGV4YW1wbGUgaWYgdGhlIHR5cGUgY29udGFpbnMgYW5vdGhlciB1bmlvbiwgdGhlIG5lc3RlZAotIG1lbWJlcnMgb2YgdGhhdCB1bmlvbiBhcmUgTk9UIHJldHVybmVkIGhlcmUuCi0gPHA+Ci0gUmV0dXJucyBudWxsIGlmIHRoaXMgdHlwZSBpcyBub3QgYSB1bmlvbi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0VW5pb25TdWJUeXBlcygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRVbmlvblN1YlR5cGVzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+W10gPEI+Z2V0VW5pb25TdWJUeXBlczwvQj4oKTwvUFJFPgotPERMPgotPEREPkZvciB1bmlvbiB0eXBlcyBvbmx5OiBnZXRzIHRoZSBmdWxsIHRyZWUgb2YgbWVtYmVyIHR5cGVzLgotIFRoaXMgY29tcHV0ZXMgdGhlIGNsb3N1cmUgb2YgdGhlIHNldCByZXR1cm5lZCBieQotIGdldFVuaW9uTWVtYmVyVHlwZXMoKSwgc28sIGZvciBleGFtcGxlLCBpdCByZXR1cm5zCi0gYWxsIHRoZSB0eXBlcyBuZXN0ZWQgd2l0aGluIHVuaW9ucyBvZiB1bmlvbnMgYXMgd2VsbAotIGFzIHRoZSB0b3AtbGV2ZWwgbWVtYmVyczsgdGhlIHNldCBhbHNvIGluY2x1ZGVzIHRoZQotIHR5cGUgaXRzZWxmLiBJZiB5b3UgYXJlIHNlZWtpbmcgb25seSB0aGUgYmFzaWMKLSBub24tdW5pb24gY29uc2l0dWVudHMsIHVzZSBnZXRVbmlvbkNvbnN0aXR1ZW50VHlwZXMuCi0gPHA+Ci0gUmV0dXJucyBudWxsIGlmIHRoaXMgdHlwZSBpcyBub3QgYSB1bmlvbi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0VW5pb25Db25zdGl0dWVudFR5cGVzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFVuaW9uQ29uc3RpdHVlbnRUeXBlczwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPltdIDxCPmdldFVuaW9uQ29uc3RpdHVlbnRUeXBlczwvQj4oKTwvUFJFPgotPERMPgotPEREPkZvciB1bmlvbiB0eXBlcyBvbmx5OiBnZXQgdGhlIGNvbnN0aXR1ZW50IG1lbWJlciB0eXBlcy4gVGhpcwotIHJldHVybnMgb25seSBub24tdW5pb24gdHlwZXMsIHNvLCBmb3IgZXhhbXBsZSwgZm9yIHVuaW9ucyBvZgotIHVuaW9ucywgdGhpcyByZXR1cm5zIHRoZSBmbGF0dGVuZWQgbGlzdCBvZiBpbmRpdmlkdWFsIG1lbWJlcgotIHR5cGVzIHdpdGhpbiB0aGUgaW5uZXJtb3N0IHVuaW9ucy4KLSA8cD4KLSBSZXR1cm5zIG51bGwgaWYgdGhpcyB0eXBlIGlzIG5vdCBhIHVuaW9uLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRVbmlvbkNvbW1vbkJhc2VUeXBlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFVuaW9uQ29tbW9uQmFzZVR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+Z2V0VW5pb25Db21tb25CYXNlVHlwZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkZvciB1bmlvbiB0eXBlcyBvbmx5OiBnZXQgdGhlIG1vc3Qgc3BlY2lmaWMgY29tbW9uIGJhc2UKLSB0eXBlIG9mIHRoZSBjb25zdGl0dWVudCBtZW1iZXIgdHlwZXMuIE1heSByZXR1cm4gYSBVUiB0eXBlLgotIDxwPgotIFJldHVybnMgbnVsbCBpZiB0aGlzIHR5cGUgaXMgbm90IGEgdW5pb24uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEFub255bW91c1VuaW9uTWVtYmVyT3JkaW5hbCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRBbm9ueW1vdXNVbmlvbk1lbWJlck9yZGluYWw8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+Z2V0QW5vbnltb3VzVW5pb25NZW1iZXJPcmRpbmFsPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+Rm9yIGFub255bW91cyB0eXBlcyBkZWZpbmVkIGluc2lkZSBhIHVuaW9uIG9ubHk6IGdldHMKLSB0aGUgaW50ZWdlciBpbmRpY2F0aW5nIHRoZSBkZWNsYXJhdGlvbiBvcmRlciBvZiB0aGlzCi0gdHlwZSB3aXRoaW4gdGhlIG91dGVyIHVuaW9uIHR5cGUsIG9yIHplcm8gaWYgdGhpcyBpcwotIG5vdCBhcHBsaWNhYmxlLiBUaGUgZmlyc3QgYW5vbnltb3VzIHVuaW9uIG1lbWJlciB3aXRoaW4KLSBhIHVuaW9uIHR5cGUgaXMgbnVtYmVyZWQgIjEiLiBVc2VkIHRvIGRpZmZlcmVudGlhdGUKLSBiZXR3ZWVuIGRpZmZlcmVudCBhbm9ueW1vdXMgdHlwZXMuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldExpc3RJdGVtVHlwZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRMaXN0SXRlbVR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+Z2V0TGlzdEl0ZW1UeXBlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+Rm9yIGxpc3QgdHlwZXMgb25seTogZ2V0IHRoZSBpdGVtIHR5cGUuIFRoaXMgaXMgdGhlIGF0b21pYwotIG9yIHVuaW9uIHR5cGUgdGhhdCBpcyB0aGUgdHlwZSBvZiBldmVyeSBlbnRyeSBpbiB0aGUgbGlzdC4KLSA8cD4KLSBSZXR1cm5zIG51bGwgaWYgdGhpcyB0eXBlIGlzIG5vdCBhIGxpc3QuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFdoaXRlU3BhY2VSdWxlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFdoaXRlU3BhY2VSdWxlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldFdoaXRlU3BhY2VSdWxlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+Rm9yIG5vbnVuaW9uIHNpbXBsZSB0eXBlczogZ2V0IHRoZSB3aGl0ZXNwYWNlIHJ1bGUuIFRoaXMgaXMKLSBlaXRoZXIgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjV1NfUFJFU0VSVkUiPjxDT0RFPldTX1BSRVNFUlZFPC9DT0RFPjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sI1dTX1JFUExBQ0UiPjxDT0RFPldTX1JFUExBQ0U8L0NPREU+PC9BPiwgb3IKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNXU19DT0xMQVBTRSI+PENPREU+V1NfQ09MTEFQU0U8L0NPREU+PC9BPi4gUmV0dXJucyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNXU19VTlNQRUNJRklFRCI+PENPREU+V1NfVU5TUEVDSUZJRUQ8L0NPREU+PC9BPgotIGZvciB1bmlvbnMgYW5kIGNvbXBsZXggdHlwZXMuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiA8Qj5uZXdWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO3YpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgc2ltcGxlIHR5cGUgdmFsdWUgdGhhdCBkb2VzIG5vdCByZXNpZGUgaW4gYSB0cmVlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRSZWYoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0UmVmPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLlJlZi5odG1sIj5TY2hlbWFUeXBlLlJlZjwvQT4gPEI+Z2V0UmVmPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0cnVucyBhIFNjaGVtYVR5cGUuUmVmIHBvaW50aW5nIHRvIHRoaXMgc2NoZW1hIHR5cGUgaXRzZWxmLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hU3RyaW5nRW51bUVudHJ5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTY2hlbWFUeXBlLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDEwNTY0Yi4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5NDYgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NiBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVNjaGVtYVR5cGVMb2FkZXIgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlcixTY2hlbWFUeXBlTG9hZGVyIGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iU2NoZW1hVHlwZUxvYWRlciAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU2NoZW1hVHlwZUxvYWRlci5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBTY2hlbWFUeXBlTG9hZGVyPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgS25vd24gU3ViaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVTeXN0ZW0uaHRtbCI+U2NoZW1hVHlwZVN5c3RlbTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlNjaGVtYVR5cGVMb2FkZXI8L0I+PC9ETD4KLQotPFA+Ci1SZXByZXNlbnRzIGEgc2VhcmNoYWJsZSBzZXQgb2YgWE1MIFNjaGVtYSBjb21wb25lbnQgZGVmaW5pdGlvbnMuCi0gPHA+Ci0gU2NoZW1hVHlwZUxvYWRlciBpcyBzb21ld2hhdCBhbmFsb2dvdXMgdG8gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9DbGFzc0xvYWRlci5odG1sIj48Q09ERT5DbGFzc0xvYWRlcjwvQ09ERT48L0E+LAotIGJlY2F1c2UgaXQgaXMgcmVzcG9uc2libGUgZm9yIGZpbmRpbmcgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFDb21wb25lbnQuaHRtbCI+PENPREU+U2NoZW1hQ29tcG9uZW50PC9DT0RFPjwvQT4gZGVmaW5pdGlvbnMKLSBieSBuYW1lLCB5ZXQgaXQgaXMgbm90IHJlc3BvbnNpYmxlIGZvciBiZWluZyBhYmxlIHRvIGVudW1lcmF0ZSBhbGwgdGhlCi0gY29tcG9uZW50IGRlZmluaXRvbnMgYXZhaWxhYmxlLiAoSWYgeW91IHdpc2ggdG8gZW51bWVyYXRlIGNvbXBvbmVudAotIGRlZmluaXRpb25zLCBzZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGVTeXN0ZW08L0NPREU+PC9BPi4pIFRoZXJlIGFyZSBzb21lIHdheXMgaW4gd2hpY2gKLSBTY2hlbWFUeXBlU3lzdGVtcyBhcmUgZGlzc2ltaWxhciBmcm9tIENsYXNzTG9hZGVycywgaG93ZXZlci4KLSBTaW5jZSBYTUwgU2NoZW1hIGhhcyBhIG51bWJlciBvZiBpbnN0YW5jZS1vcmllbnRlZCB0eXBpbmcgbWVjaGFuaXNtcwotIChzdWNoIGFzIHdpbGRjYXJkcykgdGhhdCBkbyBub3QgZXhpc3QgaW4gSmF2YSwgYSBTY2hlbWFUeXBlTG9hZGVyIGlzCi0gbm90IGFzc29jaWF0ZWQgd2l0aCBhIHR5cGU7IGluc3RlYWQsIGEgU2NoZW1hVHlwZUxvYWRlciBpcyBhc3NvY2lhdGVkCi0gd2l0aCBlYWNoIFhNTCBpbnN0YW5jZS4KLSA8cD4KLSBFdmVyeSBYTUwgaW5zdGFuY2UgaXMgbG9hZGVkIHdpdGhpbiB0aGUgY29udGV4dCBvZiBhIFNjaGVtYVR5cGVMb2FkZXI7Ci0gdGhlIFNjaGVtYVR5cGVMb2FkZXIgZm9yIGFuIGluc3RhbmNlIGlzIHVzZWQgdG8gcmVzb2x2ZSBhbGwgdHlwZSBkZWZpbml0aW9ucwotIHdpdGhpbiB0aGUgaW5zdGFuY2UgYW5kIGZvciBhcHBseWluZyB0eXBlLXNlbnNpdGl2ZSBtZXRob2RzIHN1Y2ggYXMKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKCkiPjxDT0RFPlhtbE9iamVjdC52YWxpZGF0ZSgpPC9DT0RFPjwvQT4uCi0gPHA+Ci0gTm9ybWFsbHkgdGhlIFNjaGVtYVR5cGVMb2FkZXIgYmVpbmcgdXNlZCBmb3IgYWxsIGluc3RhbmNlcyBpcyB0aGUKLSBjb250ZXh0IHR5cGUgbG9hZGVyICh0aGF0IGlzLCB0aGUgU2NoZW1hVHlwZUxvYWRlciByZXR1cm5lZCBmcm9tCi0gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sI2dldENvbnRleHRUeXBlTG9hZGVyKCkiPjxDT0RFPlhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCk8L0NPREU+PC9BPikuICBUaGUgY29udGV4dCB0eXBlIGxvYWRlcgotIGNvbnN1bHRzIHRoZSB0aHJlYWQncyBjb250ZXh0IENsYXNzTG9hZGVyIChzZWUgPENPREU+VGhyZWFkLmdldENvbnRleHRDbGFzc0xvYWRlcigpPC9DT0RFPikKLSB0byBmaW5kIHNjaGVtYSB0eXBlIGRlZmludGlvbnMgdGhhdCBhcmUgYXZhaWxhYmxlIG9uIHRoZSBjbGFzc3BhdGguCi0gVGhlIG5ldCByZXN1bHQgaXMgdGhhdCB5b3UgY2FuIHVzZSBzY2hlbWEgdHlwZXMgc2ltcGx5IGJ5IHB1dHRpbmcKLSB0aGVpciBjb21waWxlZCBzY2hlbWEgSkFScyBvbiB5b3VyIGNsYXNzcGF0aC4KLSBJZiB5b3Ugd2lzaCB0byBsb2FkIGluc3RhbmNlcyB1c2luZyBhIGRpZmZlcmVudCBTY2hlbWFUeXBlTG9hZGVyLCB0aGVuIHlvdSBtdXN0Ci0gY2FsbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxDT0RFPnBhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKTwvQ09ERT48L0E+IG1ldGhvZHMgb24gdGhlIFNjaGVtYVR5cGVMb2FkZXIgaW5zdGFuY2UgZXhwbGljaXRseQotIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBub3JtYWwgY29udmVuaWVudCBGYWN0b3J5IG1ldGhvZHMuCi0gPHA+Ci0gQSBTY2hlbWFUeXBlTG9hZGVyIGNhbiBiZSBvYnRhaW5lZCBieSBkeW5hbWljYWxseSBsb2FkaW5nIFhTRCBmaWxlcwotIHVzaW5nIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuaHRtbCNsb2FkWHNkKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0W10pIj48Q09ERT5YbWxCZWFucy5sb2FkWHNkKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0W10pPC9DT0RFPjwvQT4sIG9yIGJ5IGFzc2VtYmxpbmcgb3RoZXIgU2NoZW1hVHlwZUxvYWRlcnMKLSBvciBTY2hlbWFUeXBlU3lzdGVtcyBvbiBhIHBhdGggdXNpbmcgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sI3R5cGVMb2FkZXJVbmlvbihvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXJbXSkiPjxDT0RFPlhtbEJlYW5zLnR5cGVMb2FkZXJVbmlvbihvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXJbXSk8L0NPREU+PC9BPi4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuaHRtbCNsb2FkWHNkKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0W10pIj48Q09ERT5YbWxCZWFucy5sb2FkWHNkKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0W10pPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sI2dldENvbnRleHRUeXBlTG9hZGVyKCkiPjxDT0RFPlhtbEJlYW5zLmdldENvbnRleHRUeXBlTG9hZGVyKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwjdHlwZUxvYWRlclVuaW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlcltdKSI+PENPREU+WG1sQmVhbnMudHlwZUxvYWRlclVuaW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlcltdKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sIj48Q09ERT5TY2hlbWFUeXBlU3lzdGVtPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNjb21waWxlUGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5jb21waWxlUGF0aDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtwYXRoRXhwciwKLSAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb21waWxlcyBhbiBYUGF0aDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI2NvbXBpbGVRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5jb21waWxlUXVlcnk8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cXVlcnlFeHByLAotICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb21waWxlcyBhbiBYUXVlcnk8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuaHRtbCI+U2NoZW1hR2xvYmFsQXR0cmlidXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNmaW5kQXR0cmlidXRlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5maW5kQXR0cmlidXRlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO25hbWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBnbG9iYWwgYXR0cmlidXRlIGRlZmludGlvbiB3aXRoIHRoZSBnaXZlbiBuYW1lLCBvciBudWxsIGlmIG5vbmUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlR3JvdXAuaHRtbCI+U2NoZW1hQXR0cmlidXRlR3JvdXA8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI2ZpbmRBdHRyaWJ1dGVHcm91cChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+ZmluZEF0dHJpYnV0ZUdyb3VwPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO25hbWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBhdHRyaWJ1dGUgZ3JvdXAgZGVmaW50aW9uIHdpdGggdGhlIGdpdmVuIG5hbWUsIG9yIG51bGwgaWYgbm9uZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWYuaHRtbCI+U2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNmaW5kQXR0cmlidXRlR3JvdXBSZWYoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPmZpbmRBdHRyaWJ1dGVHcm91cFJlZjwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VXNlZCBmb3Igb24tZGVtYW5kIGxvYWRpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZi5odG1sIj5TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNmaW5kQXR0cmlidXRlUmVmKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5maW5kQXR0cmlidXRlUmVmPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO25hbWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtVc2VkIGZvciBvbi1kZW1hbmQgbG9hZGluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI2ZpbmRBdHRyaWJ1dGVUeXBlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5maW5kQXR0cmlidXRlVHlwZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgYXR0cmlidXRlIHR5cGUgY29udGFpbmluZyB0aGUgZ2l2ZW4gYXR0cmlidXRlIG5hbWUsIG9yIG51bGwgaWYgbm9uZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLlJlZi5odG1sIj5TY2hlbWFUeXBlLlJlZjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwjZmluZEF0dHJpYnV0ZVR5cGVSZWYoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPmZpbmRBdHRyaWJ1dGVUeXBlUmVmPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO25hbWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtVc2VkIGZvciBvbi1kZW1hbmQgbG9hZGluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI2ZpbmREb2N1bWVudFR5cGUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPmZpbmREb2N1bWVudFR5cGU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7bmFtZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGRvY3VtZW50IHR5cGUgcm9vdGVkIGF0IHRoZSBnaXZlbiBlbGVtZW50IG5hbWUsIG9yIG51bGwgaWYgbm9uZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLlJlZi5odG1sIj5TY2hlbWFUeXBlLlJlZjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwjZmluZERvY3VtZW50VHlwZVJlZihqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+ZmluZERvY3VtZW50VHlwZVJlZjwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VXNlZCBmb3Igb24tZGVtYW5kIGxvYWRpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5odG1sIj5TY2hlbWFHbG9iYWxFbGVtZW50PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNmaW5kRWxlbWVudChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+ZmluZEVsZW1lbnQ8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7bmFtZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGdsb2JhbCBlbGVtZW50IGRlZmludGlvbiB3aXRoIHRoZSBnaXZlbiBuYW1lLCBvciBudWxsIGlmIG5vbmUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5SZWYuaHRtbCI+U2NoZW1hR2xvYmFsRWxlbWVudC5SZWY8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI2ZpbmRFbGVtZW50UmVmKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5maW5kRWxlbWVudFJlZjwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VXNlZCBmb3Igb24tZGVtYW5kIGxvYWRpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZi5odG1sIj5TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNmaW5kSWRlbnRpdHlDb25zdHJhaW50UmVmKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5maW5kSWRlbnRpdHlDb25zdHJhaW50UmVmPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO25hbWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtVc2VkIGZvciBvbi1kZW1hbmQgbG9hZGluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFNb2RlbEdyb3VwLmh0bWwiPlNjaGVtYU1vZGVsR3JvdXA8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI2ZpbmRNb2RlbEdyb3VwKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5maW5kTW9kZWxHcm91cDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbW9kZWwgZ3JvdXAgZGVmaW50aW9uIHdpdGggdGhlIGdpdmVuIG5hbWUsIG9yIG51bGwgaWYgbm9uZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFNb2RlbEdyb3VwLlJlZi5odG1sIj5TY2hlbWFNb2RlbEdyb3VwLlJlZjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwjZmluZE1vZGVsR3JvdXBSZWYoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPmZpbmRNb2RlbEdyb3VwUmVmPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO25hbWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtVc2VkIGZvciBvbi1kZW1hbmQgbG9hZGluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI2ZpbmRUeXBlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5maW5kVHlwZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdHlwZSB3aXRoIHRoZSBnaXZlbiBuYW1lLCBvciBudWxsIGlmIG5vbmUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5SZWYuaHRtbCI+U2NoZW1hVHlwZS5SZWY8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI2ZpbmRUeXBlUmVmKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5maW5kVHlwZVJlZjwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VXNlZCBmb3Igb24tZGVtYW5kIGxvYWRpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNnZXRTb3VyY2VBc1N0cmVhbShqYXZhLmxhbmcuU3RyaW5nKSI+Z2V0U291cmNlQXNTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7c291cmNlTmFtZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0xvYWRzIG9yaWdpbmFsIFhTRCBzb3VyY2UgYXMgYSBzdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwjaXNOYW1lc3BhY2VEZWZpbmVkKGphdmEubGFuZy5TdHJpbmcpIj5pc05hbWVzcGFjZURlZmluZWQ8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bmFtZXNwYWNlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiB0aGUgdHlwZWxvYWRlciBjb250YWlucyBhbnkgZGVmaW5pdGlvbnMgaW4gdGhlIGdpdmVuIG5hbWVzcGFjZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0luc3RhbmNlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Jm5ic3A7dHlwZSwKLSAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBnaXZlbiB0eXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4mbmJzcDt0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbSB0aGF0IHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHRoZSBYTUwgaXMgbm90IHZhbGlkPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2F4SGFuZGxlci5odG1sIj5YbWxTYXhIYW5kbGVyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNuZXdYbWxTYXhIYW5kbGVyKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3WG1sU2F4SGFuZGxlcjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPiZuYnNwO3R5cGUsCi0gICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGFuIFhtbFNheEhhbmRsZXIgdGhhdCBjYW4gcGFyc2UgYW4gaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIHR5cGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2ZpbGUsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4mbmJzcDt0eXBlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7amlvaXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4mbmJzcDt0eXBlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Jm5ic3A7dHlwZSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIHR5cGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO2ppb3IsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4mbmJzcDt0eXBlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3htbFRleHQsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4mbmJzcDt0eXBlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDtmaWxlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Jm5ic3A7dHlwZSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIHR5cGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Jm5ic3A7dHlwZSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIHR5cGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCN0eXBlRm9yQ2xhc3NuYW1lKGphdmEubGFuZy5TdHJpbmcpIj50eXBlRm9yQ2xhc3NuYW1lPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO2NsYXNzbmFtZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0ZpbmRzIGEgdHlwZSBmb3IgYSBnaXZlbiBmdWxseS1xdWFsaWZpZWQgWE1MIEJlYW4gY2xhc3NuYW1lPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCN0eXBlRm9yU2lnbmF0dXJlKGphdmEubGFuZy5TdHJpbmcpIj50eXBlRm9yU2lnbmF0dXJlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3NpZ25hdHVyZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0ZpbmRzIGEgdHlwZSBmb3IgYSBnaXZlbiBzaWduYXR1cmUgc3RyaW5nPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJmaW5kVHlwZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PCEtLSAtLT48L0E+PEgzPgotZmluZFR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+ZmluZFR5cGU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHR5cGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgb3IgbnVsbCBpZiBub25lLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJmaW5kRG9jdW1lbnRUeXBlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48IS0tIC0tPjwvQT48SDM+Ci1maW5kRG9jdW1lbnRUeXBlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPmZpbmREb2N1bWVudFR5cGU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGRvY3VtZW50IHR5cGUgcm9vdGVkIGF0IHRoZSBnaXZlbiBlbGVtZW50IG5hbWUsIG9yIG51bGwgaWYgbm9uZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZmluZEF0dHJpYnV0ZVR5cGUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjwhLS0gLS0+PC9BPjxIMz4KLWZpbmRBdHRyaWJ1dGVUeXBlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPmZpbmRBdHRyaWJ1dGVUeXBlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7bmFtZSk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBhdHRyaWJ1dGUgdHlwZSBjb250YWluaW5nIHRoZSBnaXZlbiBhdHRyaWJ1dGUgbmFtZSwgb3IgbnVsbCBpZiBub25lLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJmaW5kRWxlbWVudChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PCEtLSAtLT48L0E+PEgzPgotZmluZEVsZW1lbnQ8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEVsZW1lbnQuaHRtbCI+U2NoZW1hR2xvYmFsRWxlbWVudDwvQT4gPEI+ZmluZEVsZW1lbnQ8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGdsb2JhbCBlbGVtZW50IGRlZmludGlvbiB3aXRoIHRoZSBnaXZlbiBuYW1lLCBvciBudWxsIGlmIG5vbmUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImZpbmRBdHRyaWJ1dGUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjwhLS0gLS0+PC9BPjxIMz4KLWZpbmRBdHRyaWJ1dGU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEF0dHJpYnV0ZS5odG1sIj5TY2hlbWFHbG9iYWxBdHRyaWJ1dGU8L0E+IDxCPmZpbmRBdHRyaWJ1dGU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGdsb2JhbCBhdHRyaWJ1dGUgZGVmaW50aW9uIHdpdGggdGhlIGdpdmVuIG5hbWUsIG9yIG51bGwgaWYgbm9uZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZmluZE1vZGVsR3JvdXAoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjwhLS0gLS0+PC9BPjxIMz4KLWZpbmRNb2RlbEdyb3VwPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFNb2RlbEdyb3VwLmh0bWwiPlNjaGVtYU1vZGVsR3JvdXA8L0E+IDxCPmZpbmRNb2RlbEdyb3VwPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7bmFtZSk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtb2RlbCBncm91cCBkZWZpbnRpb24gd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgb3IgbnVsbCBpZiBub25lLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJmaW5kQXR0cmlidXRlR3JvdXAoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjwhLS0gLS0+PC9BPjxIMz4KLWZpbmRBdHRyaWJ1dGVHcm91cDwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlR3JvdXAuaHRtbCI+U2NoZW1hQXR0cmlidXRlR3JvdXA8L0E+IDxCPmZpbmRBdHRyaWJ1dGVHcm91cDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO25hbWUpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgYXR0cmlidXRlIGdyb3VwIGRlZmludGlvbiB3aXRoIHRoZSBnaXZlbiBuYW1lLCBvciBudWxsIGlmIG5vbmUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzTmFtZXNwYWNlRGVmaW5lZChqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotaXNOYW1lc3BhY2VEZWZpbmVkPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5pc05hbWVzcGFjZURlZmluZWQ8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtuYW1lc3BhY2UpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiB0aGUgdHlwZWxvYWRlciBjb250YWlucyBhbnkgZGVmaW5pdGlvbnMgaW4gdGhlIGdpdmVuIG5hbWVzcGFjZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZmluZFR5cGVSZWYoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjwhLS0gLS0+PC9BPjxIMz4KLWZpbmRUeXBlUmVmPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLlJlZi5odG1sIj5TY2hlbWFUeXBlLlJlZjwvQT4gPEI+ZmluZFR5cGVSZWY8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvUFJFPgotPERMPgotPEREPlVzZWQgZm9yIG9uLWRlbWFuZCBsb2FkaW5nLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJmaW5kRG9jdW1lbnRUeXBlUmVmKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48IS0tIC0tPjwvQT48SDM+Ci1maW5kRG9jdW1lbnRUeXBlUmVmPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLlJlZi5odG1sIj5TY2hlbWFUeXBlLlJlZjwvQT4gPEI+ZmluZERvY3VtZW50VHlwZVJlZjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO25hbWUpPC9QUkU+Ci08REw+Ci08REQ+VXNlZCBmb3Igb24tZGVtYW5kIGxvYWRpbmcuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImZpbmRBdHRyaWJ1dGVUeXBlUmVmKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48IS0tIC0tPjwvQT48SDM+Ci1maW5kQXR0cmlidXRlVHlwZVJlZjwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5SZWYuaHRtbCI+U2NoZW1hVHlwZS5SZWY8L0E+IDxCPmZpbmRBdHRyaWJ1dGVUeXBlUmVmPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7bmFtZSk8L1BSRT4KLTxETD4KLTxERD5Vc2VkIGZvciBvbi1kZW1hbmQgbG9hZGluZy4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZmluZEVsZW1lbnRSZWYoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjwhLS0gLS0+PC9BPjxIMz4KLWZpbmRFbGVtZW50UmVmPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50LlJlZi5odG1sIj5TY2hlbWFHbG9iYWxFbGVtZW50LlJlZjwvQT4gPEI+ZmluZEVsZW1lbnRSZWY8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvUFJFPgotPERMPgotPEREPlVzZWQgZm9yIG9uLWRlbWFuZCBsb2FkaW5nLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJmaW5kQXR0cmlidXRlUmVmKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48IS0tIC0tPjwvQT48SDM+Ci1maW5kQXR0cmlidXRlUmVmPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmLmh0bWwiPlNjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWY8L0E+IDxCPmZpbmRBdHRyaWJ1dGVSZWY8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvUFJFPgotPERMPgotPEREPlVzZWQgZm9yIG9uLWRlbWFuZCBsb2FkaW5nLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJmaW5kTW9kZWxHcm91cFJlZihqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PCEtLSAtLT48L0E+PEgzPgotZmluZE1vZGVsR3JvdXBSZWY8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYU1vZGVsR3JvdXAuUmVmLmh0bWwiPlNjaGVtYU1vZGVsR3JvdXAuUmVmPC9BPiA8Qj5maW5kTW9kZWxHcm91cFJlZjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO25hbWUpPC9QUkU+Ci08REw+Ci08REQ+VXNlZCBmb3Igb24tZGVtYW5kIGxvYWRpbmcuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImZpbmRBdHRyaWJ1dGVHcm91cFJlZihqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PCEtLSAtLT48L0E+PEgzPgotZmluZEF0dHJpYnV0ZUdyb3VwUmVmPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWYuaHRtbCI+U2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmPC9BPiA8Qj5maW5kQXR0cmlidXRlR3JvdXBSZWY8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvUFJFPgotPERMPgotPEREPlVzZWQgZm9yIG9uLWRlbWFuZCBsb2FkaW5nLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJmaW5kSWRlbnRpdHlDb25zdHJhaW50UmVmKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48IS0tIC0tPjwvQT48SDM+Ci1maW5kSWRlbnRpdHlDb25zdHJhaW50UmVmPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmLmh0bWwiPlNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWY8L0E+IDxCPmZpbmRJZGVudGl0eUNvbnN0cmFpbnRSZWY8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvUFJFPgotPERMPgotPEREPlVzZWQgZm9yIG9uLWRlbWFuZCBsb2FkaW5nLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ0eXBlRm9yU2lnbmF0dXJlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci10eXBlRm9yU2lnbmF0dXJlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPnR5cGVGb3JTaWduYXR1cmU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzaWduYXR1cmUpPC9QUkU+Ci08REw+Ci08REQ+RmluZHMgYSB0eXBlIGZvciBhIGdpdmVuIHNpZ25hdHVyZSBzdHJpbmcKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0idHlwZUZvckNsYXNzbmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotdHlwZUZvckNsYXNzbmFtZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPiA8Qj50eXBlRm9yQ2xhc3NuYW1lPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7Y2xhc3NuYW1lKTwvUFJFPgotPERMPgotPEREPkZpbmRzIGEgdHlwZSBmb3IgYSBnaXZlbiBmdWxseS1xdWFsaWZpZWQgWE1MIEJlYW4gY2xhc3NuYW1lCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFNvdXJjZUFzU3RyZWFtKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTb3VyY2VBc1N0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiA8Qj5nZXRTb3VyY2VBc1N0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3NvdXJjZU5hbWUpPC9QUkU+Ci08REw+Ci08REQ+TG9hZHMgb3JpZ2luYWwgWFNEIHNvdXJjZSBhcyBhIHN0cmVhbS4gIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCNnZXRTb3VyY2VOYW1lKCkiPjxDT0RFPlNjaGVtYVR5cGUuZ2V0U291cmNlTmFtZSgpPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNvbXBpbGVQYXRoKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLWNvbXBpbGVQYXRoPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5jb21waWxlUGF0aDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3BhdGhFeHByLAotICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+Q29tcGlsZXMgYW4gWFBhdGgKLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjb21waWxlUXVlcnkoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotY29tcGlsZVF1ZXJ5PC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5jb21waWxlUXVlcnk8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtxdWVyeUV4cHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPkNvbXBpbGVzIGFuIFhRdWVyeQotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+IDxCPm5ld0luc3RhbmNlPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4mbmJzcDt0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIHR5cGUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7eG1sVGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Jm5ic3A7dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gdHlwZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Jm5ic3A7dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGFuIGluc3RhbmNlIG9mIHRoZSBnaXZlbiB0eXBlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDtmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4mbmJzcDt0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIHR5cGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtqaW9pcywKLSAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Jm5ic3A7dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGFuIGluc3RhbmNlIG9mIHRoZSBnaXZlbiB0eXBlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7amlvciwKLSAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Jm5ic3A7dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGFuIGluc3RhbmNlIG9mIHRoZSBnaXZlbiB0eXBlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4mbmJzcDt0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGFuIGluc3RhbmNlIG9mIHRoZSBnaXZlbiB0eXBlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Jm5ic3A7dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gdHlwZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1htbFNheEhhbmRsZXIob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdYbWxTYXhIYW5kbGVyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTYXhIYW5kbGVyLmh0bWwiPlhtbFNheEhhbmRsZXI8L0E+IDxCPm5ld1htbFNheEhhbmRsZXI8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPiZuYnNwO3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhbiBYbWxTYXhIYW5kbGVyIHRoYXQgY2FuIHBhcnNlIGFuIGluc3RhbmNlIG9mIHRoZSBnaXZlbiB0eXBlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4mbmJzcDt0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0gdGhhdCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiB0aGUgWE1MIGlzIG5vdCB2YWxpZAotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVTeXN0ZW0uaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlNjaGVtYVR5cGVMb2FkZXIuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjU0NWQyLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDU5MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ3OjAxIFBEVCAyMDAzIC0tPgotPFRJVExFPgotU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbiAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24gY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24gKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWIENMQVNTJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUNsYXNzIFNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb248L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCI+amF2YS5sYW5nLlRocm93YWJsZTwvQT4KLSAgICAgICAgfAotICAgICAgICArLS08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0V4Y2VwdGlvbi5odG1sIj5qYXZhLmxhbmcuRXhjZXB0aW9uPC9BPgotICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICstLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbi5odG1sIj5qYXZhLmxhbmcuUnVudGltZUV4Y2VwdGlvbjwvQT4KLSAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICAgICAgICArLS08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFJ1bnRpbWVFeGNlcHRpb24uaHRtbCI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxSdW50aW1lRXhjZXB0aW9uPC9BPgotICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICstLTxCPm9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbjwvQj4KLTwvUFJFPgotPERMPgotPERUPjxCPkFsbCBJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIj5TZXJpYWxpemFibGU8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGNsYXNzIDxCPlNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb248L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxSdW50aW1lRXhjZXB0aW9uLmh0bWwiPlhtbFJ1bnRpbWVFeGNlcHRpb248L0E+PC9ETD4KLQotPFA+Ci1BbiBleGNlcHRpb24gdGhhdCBpcyB0aHJvd24gaWYgdGhlcmUgaXMgY29ycnVwdGlvbiBvciBhIHZlcnNpb24gbWlzbWF0Y2gKLSBpbiBhIGNvbXBpbGVkIHNjaGVtYSB0eXBlIHN5c3RlbS4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL3NlcmlhbGl6ZWQtZm9ybS5odG1sIiBUQVJHRVQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbiI+U2VyaWFsaXplZCBGb3JtPC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCNCQURfSEFORExFIj5CQURfSEFORExFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwjQkFEX1BBUlRJQ0xFX1RZUEUiPkJBRF9QQVJUSUNMRV9UWVBFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwjSU5UX1RPT19MQVJHRSI+SU5UX1RPT19MQVJHRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sI0lPX0VYQ0VQVElPTiI+SU9fRVhDRVBUSU9OPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwjTUFMRk9STUVEX0NPTlRFTlRfTU9ERUwiPk1BTEZPUk1FRF9DT05URU5UX01PREVMPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwjTkVTVEVEX0VYQ0VQVElPTiI+TkVTVEVEX0VYQ0VQVElPTjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sI05PX1JFU09VUkNFIj5OT19SRVNPVVJDRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sI05PVF9XUklURUFCTEUiPk5PVF9XUklURUFCTEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCNVTlJFQ09HTklaRURfSU5ERVhfRU5UUlkiPlVOUkVDT0dOSVpFRF9JTkRFWF9FTlRSWTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sI1dST05HX0ZJTEVfVFlQRSI+V1JPTkdfRklMRV9UWVBFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwjV1JPTkdfTUFHSUNfQ09PS0lFIj5XUk9OR19NQUdJQ19DT09LSUU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCNXUk9OR19NQUpPUl9WRVJTSU9OIj5XUk9OR19NQUpPUl9WRVJTSU9OPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwjV1JPTkdfTUlOT1JfVkVSU0lPTiI+V1JPTkdfTUlOT1JfVkVSU0lPTjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sI1dST05HX1BST1BFUlRZX1RZUEUiPldST05HX1BST1BFUlRZX1RZUEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCNXUk9OR19TSU1QTEVfVkFSSUVUWSI+V1JPTkdfU0lNUExFX1ZBUklFVFk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCNTY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGludCkiPlNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb248L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtoYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2NvZGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb25zdHJ1Y3RzIGFuIGV4Y2VwdGlvbiB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLCBmaWxlbmFtZSwgZXh0ZW5zaW9uLCBhbmQgY29kZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwjU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGphdmEubGFuZy5FeGNlcHRpb24pIj5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7aGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0V4Y2VwdGlvbi5odG1sIj5FeGNlcHRpb248L0E+Jm5ic3A7Y2F1c2UpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb25zdHJ1Y3RzIGFuIGV4Y2VwdGlvbiB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLCBmaWxlbmFtZSwgZXh0ZW5zaW9uLCBjb2RlLCBhbmQgY2F1c2U8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwjZ2V0Q29kZSgpIj5nZXRDb2RlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZSwgZ2l2ZW4gYnkgb25lIG9mIHRoZSBudW1lcmljIGNvbnN0YW50cyBpbiB0aGlzIGNsYXNzPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFJ1bnRpbWVFeGNlcHRpb24iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxSdW50aW1lRXhjZXB0aW9uLmh0bWwiPlhtbFJ1bnRpbWVFeGNlcHRpb248L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxSdW50aW1lRXhjZXB0aW9uLmh0bWwjZ2V0RXJyb3IoKSI+Z2V0RXJyb3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFJ1bnRpbWVFeGNlcHRpb24uaHRtbCNnZXRFcnJvcnMoKSI+Z2V0RXJyb3JzPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5UaHJvd2FibGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sIj5UaHJvd2FibGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCNmaWxsSW5TdGFja1RyYWNlKCkiPmZpbGxJblN0YWNrVHJhY2U8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sI2dldENhdXNlKCkiPmdldENhdXNlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCNnZXRMb2NhbGl6ZWRNZXNzYWdlKCkiPmdldExvY2FsaXplZE1lc3NhZ2U8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sI2dldE1lc3NhZ2UoKSI+Z2V0TWVzc2FnZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwjZ2V0U3RhY2tUcmFjZSgpIj5nZXRTdGFja1RyYWNlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCNpbml0Q2F1c2UoamF2YS5sYW5nLlRocm93YWJsZSkiPmluaXRDYXVzZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwjcHJpbnRTdGFja1RyYWNlKCkiPnByaW50U3RhY2tUcmFjZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwjcHJpbnRTdGFja1RyYWNlKGphdmEuaW8uUHJpbnRTdHJlYW0pIj5wcmludFN0YWNrVHJhY2U8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sI3ByaW50U3RhY2tUcmFjZShqYXZhLmlvLlByaW50V3JpdGVyKSI+cHJpbnRTdGFja1RyYWNlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCNzZXRTdGFja1RyYWNlKGphdmEubGFuZy5TdGFja1RyYWNlRWxlbWVudFtdKSI+c2V0U3RhY2tUcmFjZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJOT19SRVNPVVJDRSI+PCEtLSAtLT48L0E+PEgzPgotTk9fUkVTT1VSQ0U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPk5PX1JFU09VUkNFPC9CPjwvUFJFPgotPERMPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLk5PX1JFU09VUkNFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IldST05HX01BR0lDX0NPT0tJRSI+PCEtLSAtLT48L0E+PEgzPgotV1JPTkdfTUFHSUNfQ09PS0lFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5XUk9OR19NQUdJQ19DT09LSUU8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uV1JPTkdfTUFHSUNfQ09PS0lFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IldST05HX01BSk9SX1ZFUlNJT04iPjwhLS0gLS0+PC9BPjxIMz4KLVdST05HX01BSk9SX1ZFUlNJT048L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPldST05HX01BSk9SX1ZFUlNJT048L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uV1JPTkdfTUFKT1JfVkVSU0lPTiI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJXUk9OR19NSU5PUl9WRVJTSU9OIj48IS0tIC0tPjwvQT48SDM+Ci1XUk9OR19NSU5PUl9WRVJTSU9OPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5XUk9OR19NSU5PUl9WRVJTSU9OPC9CPjwvUFJFPgotPERMPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLldST05HX01JTk9SX1ZFUlNJT04iPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iV1JPTkdfRklMRV9UWVBFIj48IS0tIC0tPjwvQT48SDM+Ci1XUk9OR19GSUxFX1RZUEU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPldST05HX0ZJTEVfVFlQRTwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5XUk9OR19GSUxFX1RZUEUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iVU5SRUNPR05JWkVEX0lOREVYX0VOVFJZIj48IS0tIC0tPjwvQT48SDM+Ci1VTlJFQ09HTklaRURfSU5ERVhfRU5UUlk8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPlVOUkVDT0dOSVpFRF9JTkRFWF9FTlRSWTwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5VTlJFQ09HTklaRURfSU5ERVhfRU5UUlkiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iV1JPTkdfUFJPUEVSVFlfVFlQRSI+PCEtLSAtLT48L0E+PEgzPgotV1JPTkdfUFJPUEVSVFlfVFlQRTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+V1JPTkdfUFJPUEVSVFlfVFlQRTwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5XUk9OR19QUk9QRVJUWV9UWVBFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik1BTEZPUk1FRF9DT05URU5UX01PREVMIj48IS0tIC0tPjwvQT48SDM+Ci1NQUxGT1JNRURfQ09OVEVOVF9NT0RFTDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+TUFMRk9STUVEX0NPTlRFTlRfTU9ERUw8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uTUFMRk9STUVEX0NPTlRFTlRfTU9ERUwiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iV1JPTkdfU0lNUExFX1ZBUklFVFkiPjwhLS0gLS0+PC9BPjxIMz4KLVdST05HX1NJTVBMRV9WQVJJRVRZPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5XUk9OR19TSU1QTEVfVkFSSUVUWTwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5XUk9OR19TSU1QTEVfVkFSSUVUWSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJT19FWENFUFRJT04iPjwhLS0gLS0+PC9BPjxIMz4KLUlPX0VYQ0VQVElPTjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+SU9fRVhDRVBUSU9OPC9CPjwvUFJFPgotPERMPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLklPX0VYQ0VQVElPTiI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTlRfVE9PX0xBUkdFIj48IS0tIC0tPjwvQT48SDM+Ci1JTlRfVE9PX0xBUkdFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5JTlRfVE9PX0xBUkdFPC9CPjwvUFJFPgotPERMPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLklOVF9UT09fTEFSR0UiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQkFEX1BBUlRJQ0xFX1RZUEUiPjwhLS0gLS0+PC9BPjxIMz4KLUJBRF9QQVJUSUNMRV9UWVBFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5CQURfUEFSVElDTEVfVFlQRTwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5CQURfUEFSVElDTEVfVFlQRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJOT1RfV1JJVEVBQkxFIj48IS0tIC0tPjwvQT48SDM+Ci1OT1RfV1JJVEVBQkxFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5OT1RfV1JJVEVBQkxFPC9CPjwvUFJFPgotPERMPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLk5PVF9XUklURUFCTEUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQkFEX0hBTkRMRSI+PCEtLSAtLT48L0E+PEgzPgotQkFEX0hBTkRMRTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+QkFEX0hBTkRMRTwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5CQURfSEFORExFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik5FU1RFRF9FWENFUFRJT04iPjwhLS0gLS0+PC9BPjxIMz4KLU5FU1RFRF9FWENFUFRJT048L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPk5FU1RFRF9FWENFUFRJT048L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uTkVTVEVEX0VYQ0VQVElPTiI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+U2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtoYW5kbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtjb2RlKTwvUFJFPgotPERMPgotPEREPkNvbnN0cnVjdHMgYW4gZXhjZXB0aW9uIHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UsIGZpbGVuYW1lLCBleHRlbnNpb24sIGFuZCBjb2RlCi08UD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgaW50LCBqYXZhLmxhbmcuRXhjZXB0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbjwvSDM+Ci08UFJFPgotcHVibGljIDxCPlNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb248L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDttZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7aGFuZGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7Y29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvRXhjZXB0aW9uLmh0bWwiPkV4Y2VwdGlvbjwvQT4mbmJzcDtjYXVzZSk8L1BSRT4KLTxETD4KLTxERD5Db25zdHJ1Y3RzIGFuIGV4Y2VwdGlvbiB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLCBmaWxlbmFtZSwgZXh0ZW5zaW9uLCBjb2RlLCBhbmQgY2F1c2UKLTxQPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0Q29kZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRDb2RlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldENvZGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLCBnaXZlbiBieSBvbmUgb2YgdGhlIG51bWVyaWMgY29uc3RhbnRzIGluIHRoaXMgY2xhc3MKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWIENMQVNTJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmNDQ1OWYuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjE4ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTYgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1TY2hlbWFUeXBlU3lzdGVtIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVTeXN0ZW0sU2NoZW1hVHlwZVN5c3RlbSBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlNjaGVtYVR5cGVTeXN0ZW0gKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTY2hlbWFUeXBlU3lzdGVtLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFNjaGVtYVR5cGVTeXN0ZW08L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXI8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGludGVyZmFjZSA8Qj5TY2hlbWFUeXBlU3lzdGVtPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sIj5TY2hlbWFUeXBlTG9hZGVyPC9BPjwvREw+Ci0KLTxQPgotQSBmaW5pdGUgc2V0IG9mIFhNTCBTY2hlbWEgY29tcG9uZW50IGRlZmluaXRpb25zLgotIDxwPgotIEV2ZXJ5IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPjxDT0RFPlNjaGVtYUNvbXBvbmVudDwvQ09ERT48L0E+IHN1Y2ggYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+LAotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5odG1sIj48Q09ERT5TY2hlbWFHbG9iYWxFbGVtZW50PC9DT0RFPjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsQXR0cmlidXRlLmh0bWwiPjxDT0RFPlNjaGVtYUdsb2JhbEF0dHJpYnV0ZTwvQ09ERT48L0E+LAotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTW9kZWxHcm91cC5odG1sIj48Q09ERT5TY2hlbWFNb2RlbEdyb3VwPC9DT0RFPjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlR3JvdXAuaHRtbCI+PENPREU+U2NoZW1hQXR0cmlidXRlR3JvdXA8L0NPREU+PC9BPiwgb3IKLSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5odG1sIj48Q09ERT5TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQ8L0NPREU+PC9BPiwgaXMgZGVmaW5lZCBpbiBleGFjdGx5IG9uZQotIFNjaGVtYVR5cGVTeXN0ZW0uICAoU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjZ2V0VHlwZVN5c3RlbSgpIj48Q09ERT5TY2hlbWFDb21wb25lbnQuZ2V0VHlwZVN5c3RlbSgpPC9DT0RFPjwvQT4uKQotIEEgc2luZ2xlIFNjaGVtYVR5cGVTeXN0ZW0gY2FuIGluY2x1ZGUgZGVmaW5pdGlvbnMKLSBmcm9tIGFueSBudW1iZXIgb2YgbmFtZXNwYWNlczsgb25lIFNjaGVtYVR5cGVTeXN0ZW0gY29uc2lzdHMgc2ltcGx5Ci0gb2YgYSBzZXQgb2YgY29tcG9uZW50IGRlZmluaXRpb25zIHRoYXQgd2VyZSBjb21waWxlZCB0b2dldGhlci4KLSA8cD4KLSBTaW5jZSBldmVyeSBjb21wb25lbnQgaXMgZGVmaW5lZCBpbiBhIHNpbmdsZSBTY2hlbWFUeXBlU3lzdGVtLCBubwotIFNjaGVtYVR5cGVTeXN0ZW0gb3RoZXIgdGhhbiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwjZ2V0QnVpbHRpblR5cGVTeXN0ZW0oKSI+PENPREU+WG1sQmVhbnMuZ2V0QnVpbHRpblR5cGVTeXN0ZW0oKTwvQ09ERT48L0E+Ci0gaW5jbHVkZXMgYW55IG9mIHRoZSB0aGUgYnVpbHQtaW4gdHlwZXMuICBUaGF0IG1lYW5zCi0geW91IGNhbm5vdCBvcmRpbmFyaWx5IGxvYWQgaW5zdGFuY2VzIHVzaW5nIGEgc2luZ2xlCi0gU2NoZW1hVHlwZVN5c3RlbSBieSBpdHNlbGYuIEluc3RlYWQsIHlvdSB3aWxsIHdhbnQgdG8gY29tYmluZSBhIHBhdGggb2YKLSBTY2hlbWFUeXBlU3lzdGVtcyB0b2dldGhlciB1c2luZyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwjdHlwZUxvYWRlclVuaW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlcltdKSI+PENPREU+WG1sQmVhbnMudHlwZUxvYWRlclVuaW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlcltdKTwvQ09ERT48L0E+Ci0gdG8gZm9ybSBhIFNjaGVtYVR5cGVMb2FkZXIgdGhhdCBjYW4gYmUgdXNlZCBmb3IgbG9hZGluZyBpbnN0YW5jZXMuCi0gPHA+Ci0gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZSBjb21waWxlcyB0aGUgc2NoZW1hIGluIG15WFNERmlsZQotIGluIHRoZSBwcmVzZW5jZSBvZiBvbmx5IHRoZSBtaW5pbWFsIGJ1aWx0aW4gdHlwZSBzeXN0ZW0uCi0gVGhlIHJlc3VsdGluZyBTY2hlbWFUeXBlU3lzdGVtIDxjb2RlPnN0czwvY29kZT4gY29udGFpbnMgb25seSB0aGUgZGVmaW5pdGlvbnMKLSBmcm9tIG15WFNEIGZpbGUuICBJbiBvcmRlciB0byBsb2FkIGFuZCB2YWxpZGF0ZSBhbiBpbnN0YW5jZSB3aXRoaW4KLSB0aGUgY29udGV4dCBvZiB0aG9zZSB0eXBlcywgd2UgbXVzdCBuZXh0IGNvbnN0cnVjdCBhCi0gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGVMb2FkZXI8L0NPREU+PC9BPiA8Y29kZT5zdGw8L2NvZGU+IHRoYXQgY29udGFpbnMgYm90aAotIHRoZSBidWlsdGluIHR5cGUgc3lzdGVtIGFuZCB0aGUgdHlwZXMgZGVmaW5lZCB3aXRoaW4gdGhlIG15WFNEIGZpbGUuCi0gPHByZT4KLSBTY2hlbWFUeXBlU3lzdGVtIHN0cyA9IFhtbEJlYW5zLmNvbXBpbGVYc2QobmV3IFhtbE9iamVjdFtdCi0gICAgeyBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZShteVhTREZpbGUpIH0sCi0gICAgWG1sQmVhbnMuZ2V0QnVpbHRpblR5cGVTeXN0ZW0oKSwKLSAgICBudWxsKTsKLSBTY2hlbWFUeXBlTG9hZGVyIHN0bCA9IFhtbEJlYW5zLnR5cGVMb2FkZXJVbmlvbihuZXcgU2NoZW1hVHlwZUxvYWRlcltdCi0gICAgeyBzdHMsIFhtbEJlYW5zLmdldEJ1aWx0aW5UeXBlU3lzdGVtKCkgfSk7Ci0gWG1sT2JqZWN0IG15ZG9jID0gc3RsLnBhcnNlKGluc3RhbmNlRmlsZSwgbnVsbCwgbnVsbCk7Ci0gU3lzdGVtLm91dC5wcmludGxuKCJEb2N1bWVudCB2YWxpZDogIiArIG15ZG9jLnZhbGlkYXRlKCkpOwotIDwvcHJlPgotIDxwPgotIEFzIHlvdSBjYW4gc2VlLCBmb3Igd29ya2luZyB3aXRoIGluc3RhbmNlcywgeW91IHR5cGljYWxseSB3YW50IHRvCi0gd29yayB3aXRoIGEgU2NoZW1hVHlwZUxvYWRlciBjb25zdHJ1Y3RlZCBmcm9tIGEgcGF0aCByYXRoZXIgdGhhbgotIGEgc29saXRhcnkgU2NoZW1hVHlwZVN5c3RlbS4gIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwjbG9hZFhzZChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdFtdKSI+PENPREU+WG1sQmVhbnMubG9hZFhzZChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdFtdKTwvQ09ERT48L0E+IGZvcgotIGEgY29udmVuaWVudCBhbHRlcm5hdGl2ZSB0byA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwjY29tcGlsZVhzZChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdFtdLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxDT0RFPlhtbEJlYW5zLmNvbXBpbGVYc2Qob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3RbXSwgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpPC9DT0RFPjwvQT4uCi0gPHA+Ci0gQSBTY2hlbWFUeXBlU3lzdGVtIGlzIHVzZWZ1bCB3aGVuIHlvdSBuZWVkIHRvIGVudW1lcmF0ZSB0aGUgZXhhY3Qgc2V0Ci0gb2YgY29tcG9uZW50IGRlZmluaXRpb25zIGRlcml2ZWQgZnJvbSBhIHNldCBvZiBYU0QgZmlsZXMsIGZvciBleGFtcGxlLAotIHdoZW4geW91IGFyZSBhbmFseXppbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBYU0QgZmlsZXMgdGhlbXNlbHZlcy4KLSBIZXJlIGlzIGhvdyB0byB1c2UgYSBTY2hlbWFUeXBlU3lzdGVtIHRvIGluc3BlY3QgYSBzZXQgb2Ygc2NoZW1hCi0gZGVmaW5pdGlvbnM6Ci0gPG9sPgotIDxsaT5GaXJzdCwgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuaHRtbCNjb21waWxlWHNkKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0W10sIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PENPREU+WG1sQmVhbnMuY29tcGlsZVhzZChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdFtdLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyk8L0NPREU+PC9BPiB0byBjb21waWxlIGFueSBudW1iZXIKLSAgICAgb2Ygc2NoZW1hIGZpbGVzLiAgSWYgdGhlIHNjaGVtYSBmaWxlcyBhcmUgdmFsaWQsIHJlc3VsdCB3aWxsCi0gICAgIGJlIGEgU2NoZW1hVHlwZVN5c3RlbSB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgY29tcG9uZW50IGRlZmluaXRpb25zCi0gICAgIGZyb20gdGhvc2UgZmlsZXMuICBJdCB3aWxsIGNvbnRhaW4gbm8gb3RoZXIgY29tcG9uZW50IGRlZmluaXRpb25zLgotIDxsaT5BbHRlcm5hdGl2ZWx5LCBjYWxsIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwjZ2V0VHlwZVN5c3RlbSgpIj48Q09ERT5TY2hlbWFDb21wb25lbnQuZ2V0VHlwZVN5c3RlbSgpPC9DT0RFPjwvQT4gb24KLSAgICAgYSBwcmVjb21waWxlZCBzY2hlbWEgY29tcG9uZW50IHRvIGRpc2NvdmVyIHRoZSBTY2hlbWFUeXBlU3lzdGVtCi0gICAgIHdpdGhpbiB3aGljaCB0aGF0IGNvbXBvbmVudCB3YXMgb3JpZ2luYWxseSBjb21waWxlZC4KLSA8bGk+T25jZSB5b3UgaGF2ZSBhIFNjaGVtYVR5cGVTeXN0ZW0sIGNhbGw6Ci0gICA8dWw+Ci0gICA8bGk+IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sI2dsb2JhbFR5cGVzKCkiPjxDT0RFPmdsb2JhbFR5cGVzKCk8L0NPREU+PC9BPiBmb3IgYWxsIHRoZSBnbG9iYWwgdHlwZSBkZWZpbml0aW9ucy4KLSAgIDxsaT4gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwjZ2xvYmFsRWxlbWVudHMoKSI+PENPREU+Z2xvYmFsRWxlbWVudHMoKTwvQ09ERT48L0E+IGZvciBhbGwgdGhlIGdsb2JhbCBlbGVtZW50IGRlZmluaXRpb25zLgotICAgPGxpPiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVTeXN0ZW0uaHRtbCNnbG9iYWxBdHRyaWJ1dGVzKCkiPjxDT0RFPmdsb2JhbEF0dHJpYnV0ZXMoKTwvQ09ERT48L0E+IGZvciBhbGwgdGhlIGdsb2JhbCBhdHRyaWJ1dGUgZGVmaW5pdGlvbnMuCi0gICA8bGk+IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sI21vZGVsR3JvdXBzKCkiPjxDT0RFPm1vZGVsR3JvdXBzKCk8L0NPREU+PC9BPiBmb3IgYWxsIHRoZSBuYW1lZCBtb2RlbCBncm91cCBkZWZpbml0aW9ucy4KLSAgIDxsaT4gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwjYXR0cmlidXRlR3JvdXBzKCkiPjxDT0RFPmF0dHJpYnV0ZUdyb3VwcygpPC9DT0RFPjwvQT4gZm9yIGFsbCB0aGUgYXR0cmlidXRlIGdyb3VwIGRlZmluaXRpb25zLgotICAgPC91bD4KLSA8bGk+SW4gYWRkaXRpb24sIHRoZXJlIGFyZSBzcGVjaWFsIHR5cGVzIGdlbmVyYXRlZCBmb3IgWE1MIEJlYW5zIHRoYXJlCi0gICAgIGFyZSBub3QgZm9ybWFsbHkgcGFydCBvZiB0aGUgU2NoZW1hIHNwZWNpZmljYXRpb246Ci0gICA8dWw+Ci0gICA8bGk+IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sI2RvY3VtZW50VHlwZXMoKSI+PENPREU+ZG9jdW1lbnRUeXBlcygpPC9DT0RFPjwvQT4gcmV0dXJucyBhbGwgdGhlIGRvY3VtZW50IHR5cGVzLgotICAgPGxpPiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVTeXN0ZW0uaHRtbCNhdHRyaWJ1dGVUeXBlcygpIj48Q09ERT5hdHRyaWJ1dGVUeXBlcygpPC9DT0RFPjwvQT4gcmV0dXJucyBhbGwgdGhlIGF0dHJpYnV0ZSB0eXBlcy4KLSAgIDwvdWw+Ci0gPC9vbD4KLSAKLSA8cD4KLSBBIGRvY3VtZW50IHR5cGUgaXMgYSB0eXBlIHRoYXQgY29udGFpbnMgYSBzaW5nbGUgZ2xvYmFsIGVsZW1lbnQ7IHRoZXJlCi0gaXMgb25lIGRvY3VtZW50IHR5cGUgZm9yIGVhY2ggZ2xvYmFsIGVsZW1lbnQgZGVmaW5pdGlvbiBpbiBhCi0gU2NoZW1hVHlwZVN5c3RlbS4gIEluIGFuIGluc3RhbmNlIGRvY3VtZW50LCBvbmx5IHRoZSByb290IFhtbE9iamVjdAotIGNhbiBoYXZlIGEgZG9jdW1lbnQgdHlwZSBhcyBpdHMgdHlwZS4KLSA8cD4KLSBTaW1pbGFybHksIGFuIGF0dHJpYnV0ZSB0eXBlIGlzIGEgdHlwZSB0aGF0IGNvbnRhaW5zIGEgc2luZ2xlIGdsb2JhbAotIGF0dHJpYnV0ZSwgYW5kIHRoZXJlIGlzIG9uZSBhdHRyaWJ1dGUgdHlwZSBmb3IgZWFjaCBnbG9iYWwgYXR0cmlidXRlCi0gZGVmaW5pdGlvbiBpbiBhIFNjaGVtYVR5cGVTeXN0ZW0uICBJdCBpcyBwb3NzaWJsZSB0byBoYXZlIGEgcm9vdAotIFhtbE9iamVjdCByZXByZXNlbnRpbmcgYSBmcmFnbWVudCB3aG9zZSB0eXBlIGlzIGFuIGF0dHJpYnV0ZSB0eXBlLAotIGJ1dCBhdHRyaWJ1dGUgdHlwZXMgYXJlIHByZXNlbnQgbWFpbmx5IGZvciBzeW1tZXRyeSBhbmQgdG8gc2ltcGxpZnkKLSBjb2RlIHN1Y2ggYXMgdGhlIHR5cGUtdHJlZS13YWxraW5nIGNvZGUgYmVsb3cuCi0gPHA+Ci0gVGhlIGdsb2JhbCBjb21wb25lbnQgbWV0aG9kcyBhYm92ZSBvbmx5IHByb3ZpZGUgYSB2aWV3IG9mIHRoZSB0b3AtbGV2ZWwKLSBjb21wb25lbnRzIG9mIGEgU2NoZW1hVHlwZVN5c3RlbSBhbmQgZG8gbm90IGluY2x1ZGUgYW55IG5lc3RlZAotIGRlZmluaXRpb25zLiAgVG8gdmlldyBhbGwgdGhlIG5lc3RlZCBkZWZpbml0aW9ucywgeW91IHdpbGwgd2FudCB0bwotIHRyYXZlcnNlIHRoZSBlbnRpcmUgdHJlZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IGRlZmludGlvbnMgd2l0aGluIGEKLSBTY2hlbWFUeXBlU3lzdGVtIGJ5IGV4YW1pbmluZyB0aGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwjZ2V0QW5vbnltb3VzVHlwZXMoKSI+PENPREU+U2NoZW1hVHlwZS5nZXRBbm9ueW1vdXNUeXBlcygpPC9DT0RFPjwvQT4KLSB3aXRoaW4gZWFjaCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IHJlY3Vyc2l2ZWx5LgotIDxwPlRoZSBmb2xsb3dpbmcgY29kZSBpcyBhIHN0YW5kYXJkIHRyZWV3YWxrIHRoYXQgdmlzaXRzIGV2ZXJ5Ci0gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBpbiB0aGUgU2NoZW1hVHlwZVN5c3RlbSBvbmNlLCBpbmNsdWRpbmcgbmVzdGVkCi0gZGVmaW5pdGlvbnMuCi0gPHByZT4KLSBMaXN0IGFsbFNlZW5UeXBlcyA9IG5ldyBBcnJheUxpc3QoKTsKLSBhbGxTZWVuVHlwZXMuYWRkQWxsKEFycmF5cy5hc0xpc3QodHlwZVN5c3RlbS5kb2N1bWVudFR5cGVzKCkpKTsKLSBhbGxTZWVuVHlwZXMuYWRkQWxsKEFycmF5cy5hc0xpc3QodHlwZVN5c3RlbS5hdHRyaWJ1dGVUeXBlcygpKSk7Ci0gYWxsU2VlblR5cGVzLmFkZEFsbChBcnJheXMuYXNMaXN0KHR5cGVTeXN0ZW0uZ2xvYmFsVHlwZXMoKSkpOwotIGZvciAoaW50IGkgPSAwOyBpIDwgYWxsU2VlblR5cGVzLnNpemUoKTsgaSsrKQotIHsKLSAgICAgU2NoZW1hVHlwZSBzVHlwZSA9IChTY2hlbWFUeXBlKWFsbFNlZW5UeXBlcy5nZXQoaSk7Ci0gICAgIFN5c3RlbS5vdXQucHJpbmxudCgiVmlzaXRpbmcgIiArIHNUeXBlLnRvU3RyaW5nKCkpOwotICAgICBhbGxTZWVuVHlwZXMuYWRkQWxsKEFycmF5cy5hc0xpc3Qoc1R5cGUuZ2V0QW5vbnltb3VzVHlwZXMoKSkpOwotIH0KLSA8L3ByZT4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGVMb2FkZXI8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwjY29tcGlsZVhzZChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdFtdLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxDT0RFPlhtbEJlYW5zLmNvbXBpbGVYc2Qob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3RbXSwgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sI3R5cGVMb2FkZXJVbmlvbihvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXJbXSkiPjxDT0RFPlhtbEJlYW5zLnR5cGVMb2FkZXJVbmlvbihvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXJbXSk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwjZ2V0QnVpbHRpblR5cGVTeXN0ZW0oKSI+PENPREU+WG1sQmVhbnMuZ2V0QnVpbHRpblR5cGVTeXN0ZW0oKTwvQ09ERT48L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlR3JvdXAuaHRtbCI+U2NoZW1hQXR0cmlidXRlR3JvdXA8L0E+W108L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwjYXR0cmlidXRlR3JvdXBzKCkiPmF0dHJpYnV0ZUdyb3VwczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGF0dHJpYnV0ZSBncm91cHMgZGVmaW5lZCBpbiB0aGlzIGxvYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+W108L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwjYXR0cmlidXRlVHlwZXMoKSI+YXR0cmlidXRlVHlwZXM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBhdHRyaWJ1dGUgdHlwZXMgZGVmaW5lZCBpbiB0aGlzIGxvYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+W108L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwjZG9jdW1lbnRUeXBlcygpIj5kb2N1bWVudFR5cGVzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgZG9jdW1lbnQgdHlwZXMgZGVmaW5lZCBpbiB0aGlzIGxvYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9DbGFzc0xvYWRlci5odG1sIj5DbGFzc0xvYWRlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwjZ2V0Q2xhc3NMb2FkZXIoKSI+Z2V0Q2xhc3NMb2FkZXI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBjbGFzc2xvYWRlciB1c2VkIGJ5IHRoaXMgbG9hZGVyIGZvciByZXNvbHZpbmcgdHlwZXMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwjZ2V0TmFtZSgpIj5nZXROYW1lPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbmFtZSBvZiB0aGlzIGxvYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuaHRtbCI+U2NoZW1hR2xvYmFsQXR0cmlidXRlPC9BPltdPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sI2dsb2JhbEF0dHJpYnV0ZXMoKSI+Z2xvYmFsQXR0cmlidXRlczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGdsb2JhbCBhdHRyaWJ1dGVzIGRlZmluZWQgaW4gdGhpcyBsb2FkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hR2xvYmFsRWxlbWVudC5odG1sIj5TY2hlbWFHbG9iYWxFbGVtZW50PC9BPltdPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sI2dsb2JhbEVsZW1lbnRzKCkiPmdsb2JhbEVsZW1lbnRzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgZ2xvYmFsIGVsZW1lbnRzIGRlZmluZWQgaW4gdGhpcyBsb2FkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPltdPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sI2dsb2JhbFR5cGVzKCkiPmdsb2JhbFR5cGVzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgZ2xvYmFsIHR5cGVzIGRlZmluZWQgaW4gdGhpcyBsb2FkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTW9kZWxHcm91cC5odG1sIj5TY2hlbWFNb2RlbEdyb3VwPC9BPltdPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sI21vZGVsR3JvdXBzKCkiPm1vZGVsR3JvdXBzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbW9kZWwgZ3JvdXBzIGRlZmluZWQgaW4gdGhpcyBsb2FkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwjcmVzb2x2ZSgpIj5yZXNvbHZlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW5pdGlhbGl6ZXMgYSB0eXBlIHN5c3RlbSAocmVzb2x2ZXMgYWxsIGhhbmRsZXMgd2l0aGluIHRoZSB0eXBlIHN5c3RlbSkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPlNjaGVtYUNvbXBvbmVudDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwjcmVzb2x2ZUhhbmRsZShqYXZhLmxhbmcuU3RyaW5nKSI+cmVzb2x2ZUhhbmRsZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtoYW5kbGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtMb2NhdGVzIGEgdHlwZSwgZWxlbWVudCwgb3IgYXR0cmlidXRlIHVzaW5nIHRoZSBoYW5kbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwjc2F2ZVRvRGlyZWN0b3J5KGphdmEuaW8uRmlsZSkiPnNhdmVUb0RpcmVjdG9yeTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtjbGFzc0Rpcik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NhdmVzIHRoaXMgdHlwZSB0byBhIGRpcmVjdG9yeS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sI3R5cGVGb3JIYW5kbGUoamF2YS5sYW5nLlN0cmluZykiPnR5cGVGb3JIYW5kbGU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7aGFuZGxlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7TG9jYXRlcyBhIHR5cGUsIGVsZW1lbnQsIG9yIGF0dHJpYnV0ZSB1c2luZyB0aGUgaGFuZGxlLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+U2NoZW1hVHlwZUxvYWRlcjwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNjb21waWxlUGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5jb21waWxlUGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI2NvbXBpbGVRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5jb21waWxlUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNmaW5kQXR0cmlidXRlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5maW5kQXR0cmlidXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwjZmluZEF0dHJpYnV0ZUdyb3VwKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5maW5kQXR0cmlidXRlR3JvdXA8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNmaW5kQXR0cmlidXRlR3JvdXBSZWYoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPmZpbmRBdHRyaWJ1dGVHcm91cFJlZjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI2ZpbmRBdHRyaWJ1dGVSZWYoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPmZpbmRBdHRyaWJ1dGVSZWY8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNmaW5kQXR0cmlidXRlVHlwZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+ZmluZEF0dHJpYnV0ZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNmaW5kQXR0cmlidXRlVHlwZVJlZihqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+ZmluZEF0dHJpYnV0ZVR5cGVSZWY8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNmaW5kRG9jdW1lbnRUeXBlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5maW5kRG9jdW1lbnRUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwjZmluZERvY3VtZW50VHlwZVJlZihqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+ZmluZERvY3VtZW50VHlwZVJlZjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI2ZpbmRFbGVtZW50KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5maW5kRWxlbWVudDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI2ZpbmRFbGVtZW50UmVmKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5maW5kRWxlbWVudFJlZjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI2ZpbmRJZGVudGl0eUNvbnN0cmFpbnRSZWYoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPmZpbmRJZGVudGl0eUNvbnN0cmFpbnRSZWY8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNmaW5kTW9kZWxHcm91cChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+ZmluZE1vZGVsR3JvdXA8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNmaW5kTW9kZWxHcm91cFJlZihqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+ZmluZE1vZGVsR3JvdXBSZWY8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNmaW5kVHlwZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+ZmluZFR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNmaW5kVHlwZVJlZihqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+ZmluZFR5cGVSZWY8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNnZXRTb3VyY2VBc1N0cmVhbShqYXZhLmxhbmcuU3RyaW5nKSI+Z2V0U291cmNlQXNTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNpc05hbWVzcGFjZURlZmluZWQoamF2YS5sYW5nLlN0cmluZykiPmlzTmFtZXNwYWNlRGVmaW5lZDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5zdGFuY2U8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNuZXdYbWxTYXhIYW5kbGVyKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3WG1sU2F4SGFuZGxlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI3R5cGVGb3JDbGFzc25hbWUoamF2YS5sYW5nLlN0cmluZykiPnR5cGVGb3JDbGFzc25hbWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCN0eXBlRm9yU2lnbmF0dXJlKGphdmEubGFuZy5TdHJpbmcpIj50eXBlRm9yU2lnbmF0dXJlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldE5hbWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TmFtZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+Z2V0TmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG5hbWUgb2YgdGhpcyBsb2FkZXIuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Imdsb2JhbFR5cGVzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdsb2JhbFR5cGVzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+W10gPEI+Z2xvYmFsVHlwZXM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBnbG9iYWwgdHlwZXMgZGVmaW5lZCBpbiB0aGlzIGxvYWRlci4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZG9jdW1lbnRUeXBlcygpIj48IS0tIC0tPjwvQT48SDM+Ci1kb2N1bWVudFR5cGVzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+W10gPEI+ZG9jdW1lbnRUeXBlczwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGRvY3VtZW50IHR5cGVzIGRlZmluZWQgaW4gdGhpcyBsb2FkZXIuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImF0dHJpYnV0ZVR5cGVzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWF0dHJpYnV0ZVR5cGVzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+W10gPEI+YXR0cmlidXRlVHlwZXM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBhdHRyaWJ1dGUgdHlwZXMgZGVmaW5lZCBpbiB0aGlzIGxvYWRlci4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2xvYmFsRWxlbWVudHMoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2xvYmFsRWxlbWVudHM8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEVsZW1lbnQuaHRtbCI+U2NoZW1hR2xvYmFsRWxlbWVudDwvQT5bXSA8Qj5nbG9iYWxFbGVtZW50czwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGdsb2JhbCBlbGVtZW50cyBkZWZpbmVkIGluIHRoaXMgbG9hZGVyLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnbG9iYWxBdHRyaWJ1dGVzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdsb2JhbEF0dHJpYnV0ZXM8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEF0dHJpYnV0ZS5odG1sIj5TY2hlbWFHbG9iYWxBdHRyaWJ1dGU8L0E+W10gPEI+Z2xvYmFsQXR0cmlidXRlczwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGdsb2JhbCBhdHRyaWJ1dGVzIGRlZmluZWQgaW4gdGhpcyBsb2FkZXIuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im1vZGVsR3JvdXBzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLW1vZGVsR3JvdXBzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFNb2RlbEdyb3VwLmh0bWwiPlNjaGVtYU1vZGVsR3JvdXA8L0E+W10gPEI+bW9kZWxHcm91cHM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBtb2RlbCBncm91cHMgZGVmaW5lZCBpbiB0aGlzIGxvYWRlci4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iYXR0cmlidXRlR3JvdXBzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWF0dHJpYnV0ZUdyb3VwczwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlR3JvdXAuaHRtbCI+U2NoZW1hQXR0cmlidXRlR3JvdXA8L0E+W10gPEI+YXR0cmlidXRlR3JvdXBzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgYXR0cmlidXRlIGdyb3VwcyBkZWZpbmVkIGluIHRoaXMgbG9hZGVyLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJyZXNvbHZlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXJlc29sdmU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnJlc29sdmU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5Jbml0aWFsaXplcyBhIHR5cGUgc3lzdGVtIChyZXNvbHZlcyBhbGwgaGFuZGxlcyB3aXRoaW4gdGhlIHR5cGUgc3lzdGVtKS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icmVzb2x2ZUhhbmRsZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotcmVzb2x2ZUhhbmRsZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPlNjaGVtYUNvbXBvbmVudDwvQT4gPEI+cmVzb2x2ZUhhbmRsZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO2hhbmRsZSk8L1BSRT4KLTxETD4KLTxERD5Mb2NhdGVzIGEgdHlwZSwgZWxlbWVudCwgb3IgYXR0cmlidXRlIHVzaW5nIHRoZSBoYW5kbGUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InR5cGVGb3JIYW5kbGUoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXR5cGVGb3JIYW5kbGU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+dHlwZUZvckhhbmRsZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO2hhbmRsZSk8L1BSRT4KLTxETD4KLTxERD5Mb2NhdGVzIGEgdHlwZSwgZWxlbWVudCwgb3IgYXR0cmlidXRlIHVzaW5nIHRoZSBoYW5kbGUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldENsYXNzTG9hZGVyKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldENsYXNzTG9hZGVyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9DbGFzc0xvYWRlci5odG1sIj5DbGFzc0xvYWRlcjwvQT4gPEI+Z2V0Q2xhc3NMb2FkZXI8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBjbGFzc2xvYWRlciB1c2VkIGJ5IHRoaXMgbG9hZGVyIGZvciByZXNvbHZpbmcgdHlwZXMuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNhdmVUb0RpcmVjdG9yeShqYXZhLmlvLkZpbGUpIj48IS0tIC0tPjwvQT48SDM+Ci1zYXZlVG9EaXJlY3Rvcnk8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNhdmVUb0RpcmVjdG9yeTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2NsYXNzRGlyKTwvUFJFPgotPERMPgotPEREPlNhdmVzIHRoaXMgdHlwZSB0byBhIGRpcmVjdG9yeS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTY2hlbWFUeXBlU3lzdGVtLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTNjNWI2Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMjMxICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTYgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1TaW1wbGVWYWx1ZSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5TaW1wbGVWYWx1ZSxTaW1wbGVWYWx1ZSBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlNpbXBsZVZhbHVlIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTaW1wbGVWYWx1ZS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBTaW1wbGVWYWx1ZTwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvREQ+Ci08L0RMPgotPERMPgotPERUPjxCPkFsbCBLbm93biBJbXBsZW1lbnRpbmcgQ2xhc3Nlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGludGVyZmFjZSA8Qj5TaW1wbGVWYWx1ZTwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9ETD4KLQotPFA+Ci1BbGwgWG1sT2JqZWN0IGltcGxlbWVudGF0aW9ucyBjYW4gYmUgY29lcmNlZCB0byBTaW1wbGVWYWx1ZS4KLSBGb3IgYW55IGdpdmVuIHNjaGVtYSB0eXBlLCBvbmx5IGEgc3Vic2V0IG9mIHRoZSBjb252ZXJzaW9uCi0gbWV0aG9kcyB3aWxsIHdvcmsuICBPdGhlcnMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24uCi0gPHA+Ci0gU2ltcGxlVmFsdWUgaXMgdXNlZnVsIGZvciBkZWNsYXJpbmcgdmFyaWFibGVzIHdoaWNoIGNhbiBob2xkCi0gbW9yZSB0aGFuIG9uZSBzaW1pbGFyIHNjaGVtYSB0eXBlIHRoYXQgbWF5IG5vdCBoYXBwZW4gdG8KLSBoYXZlIGEgY29tbW9uIFhNTCBiYXNlIHR5cGUsIGZvciBleGFtcGxlLCB0d28gbGlzdCB0eXBlcywKLSBvciB0d28gdW5yZWxhdGVkIGludGVnZXIgcmVzdHJpY3Rpb25zIHRoYXQgaGFwcGVuIHRvIGZpdAotIGludG8gYW4gaW50LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9ImZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPkZpZWxkcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNFUVVBTCI+RVFVQUw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0dSRUFURVJfVEhBTiI+R1JFQVRFUl9USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNMRVNTX1RIQU4iPkxFU1NfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTk9UX0VRVUFMIj5OT1RfRVFVQUw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3R5cGUiPnR5cGU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2JpZ0RlY2ltYWxWYWx1ZSgpIj5iaWdEZWNpbWFsVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRCaWdEZWNpbWFsVmFsdWUoKSI+PENPREU+Z2V0QmlnRGVjaW1hbFZhbHVlKCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPkJpZ0ludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNiaWdJbnRlZ2VyVmFsdWUoKSI+YmlnSW50ZWdlclZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0QmlnSW50ZWdlclZhbHVlKCkiPjxDT0RFPmdldEJpZ0ludGVnZXJWYWx1ZSgpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2Jvb2xlYW5WYWx1ZSgpIj5ib29sZWFuVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRCb29sZWFuVmFsdWUoKSI+PENPREU+Z2V0Qm9vbGVhblZhbHVlKCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ynl0ZVtdPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNieXRlQXJyYXlWYWx1ZSgpIj5ieXRlQXJyYXlWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldEJ5dGVBcnJheVZhbHVlKCkiPjxDT0RFPmdldEJ5dGVBcnJheVZhbHVlKCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ynl0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjYnl0ZVZhbHVlKCkiPmJ5dGVWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldEJ5dGVWYWx1ZSgpIj48Q09ERT5nZXRCeXRlVmFsdWUoKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjY2FsZW5kYXJWYWx1ZSgpIj5jYWxlbmRhclZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0Q2FsZW5kYXJWYWx1ZSgpIj48Q09ERT5nZXRDYWxlbmRhclZhbHVlKCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPkRhdGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNkYXRlVmFsdWUoKSI+ZGF0ZVZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0RGF0ZVZhbHVlKCkiPjxDT0RFPmdldERhdGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2RvdWJsZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZG91YmxlVmFsdWUoKSI+ZG91YmxlVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXREb3VibGVWYWx1ZSgpIj48Q09ERT5nZXREb3VibGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sIj5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZW51bVZhbHVlKCkiPmVudW1WYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldEVudW1WYWx1ZSgpIj48Q09ERT5nZXRFbnVtVmFsdWUoKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtmbG9hdDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZmxvYXRWYWx1ZSgpIj5mbG9hdFZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0RmxvYXRWYWx1ZSgpIj48Q09ERT5nZXRGbG9hdFZhbHVlKCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dEYXRlVmFsdWUoKSI+Z0RhdGVWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldEdEYXRlVmFsdWUoKSI+PENPREU+Z2V0R0RhdGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwiPkdEdXJhdGlvbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dEdXJhdGlvblZhbHVlKCkiPmdEdXJhdGlvblZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0R0R1cmF0aW9uVmFsdWUoKSI+PENPREU+Z2V0R0R1cmF0aW9uVmFsdWUoKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldEJpZ0RlY2ltYWxWYWx1ZSgpIj5nZXRCaWdEZWNpbWFsVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj48Q09ERT5CaWdEZWNpbWFsPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIj5CaWdJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0QmlnSW50ZWdlclZhbHVlKCkiPmdldEJpZ0ludGVnZXJWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPjxDT0RFPkJpZ0ludGVnZXI8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0Qm9vbGVhblZhbHVlKCkiPmdldEJvb2xlYW5WYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIGFzIGEgYm9vbGVhbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ynl0ZVtdPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRCeXRlQXJyYXlWYWx1ZSgpIj5nZXRCeXRlQXJyYXlWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIGFzIGEgYnl0ZSBhcnJheS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ynl0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0Qnl0ZVZhbHVlKCkiPmdldEJ5dGVWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIGFzIGEgYnl0ZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj5DYWxlbmRhcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldENhbGVuZGFyVmFsdWUoKSI+Z2V0Q2FsZW5kYXJWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+RGF0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldERhdGVWYWx1ZSgpIj5nZXREYXRlVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvRGF0ZS5odG1sIj48Q09ERT5EYXRlPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2RvdWJsZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0RG91YmxlVmFsdWUoKSI+Z2V0RG91YmxlVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIGRvdWJsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLmh0bWwiPlN0cmluZ0VudW1BYnN0cmFjdEJhc2U8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRFbnVtVmFsdWUoKSI+Z2V0RW51bVZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuaHRtbCI+PENPREU+U3RyaW5nRW51bUFic3RyYWN0QmFzZTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtmbG9hdDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0RmxvYXRWYWx1ZSgpIj5nZXRGbG9hdFZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgYXMgYSBmbG9hdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldEdEYXRlVmFsdWUoKSI+Z2V0R0RhdGVWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRHRHVyYXRpb25WYWx1ZSgpIj5nZXRHRHVyYXRpb25WYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCI+PENPREU+R0R1cmF0aW9uPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0SW50VmFsdWUoKSI+Z2V0SW50VmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhbiBpbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0TGlzdFZhbHVlKCkiPmdldExpc3RWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPjxDT0RFPkxpc3Q8L0NPREU+PC9BPiBvZiBmcmllbmRseSBKYXZhIG9iamVjdHMgKFN0cmluZywgSW50ZWdlciwgQnl0ZSwgU2hvcnQsIExvbmcsIEJpZ0ludGVnZXIsIERlY2ltYWwsIEZsb2F0LCBEb3VibGUsIGJ5dGVbXSwgQ2FsZW5kYXIsIEdEdXJhdGlvbikuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2xvbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldExvbmdWYWx1ZSgpIj5nZXRMb25nVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIGxvbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldE9iamVjdFZhbHVlKCkiPmdldE9iamVjdFZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHVuaW9uIHZhbHVlIGFzIGEgaXRzIG5hdHVyYWwgZnJpZW5kbHkgSmF2YSBvYmplY3QgKFN0cmluZywgSW50ZWdlciwgQnl0ZSwgU2hvcnQsIExvbmcsIEJpZ0ludGVnZXIsIERlY2ltYWwsIEZsb2F0LCBEb3VibGUsIGJ5dGVbXSwgQ2FsZW5kYXIsIEdEdXJhdGlvbikuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldFFOYW1lVmFsdWUoKSI+Z2V0UU5hbWVWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPjxDT0RFPlFOYW1lPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3Nob3J0PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRTaG9ydFZhbHVlKCkiPmdldFNob3J0VmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIHNob3J0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRTdHJpbmdWYWx1ZSgpIj5nZXRTdHJpbmdWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+PENPREU+U3RyaW5nPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjaW5zdGFuY2VUeXBlKCkiPmluc3RhbmNlVHlwZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBzYW1lIGFzIGdldFNjaGVtYVR5cGUgdW5sZXNzIHRoaXMgaXMgYSB1bmlvbiBpbnN0YW5jZQotIG9yIG5pbCB2YWx1ZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNpbnRWYWx1ZSgpIj5pbnRWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldEludFZhbHVlKCkiPjxDT0RFPmdldEludFZhbHVlKCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNsaXN0VmFsdWUoKSI+bGlzdFZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0TGlzdFZhbHVlKCkiPjxDT0RFPmdldExpc3RWYWx1ZSgpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2xvbmc8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2xvbmdWYWx1ZSgpIj5sb25nVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRMb25nVmFsdWUoKSI+PENPREU+Z2V0TG9uZ1ZhbHVlKCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjb2JqZWN0U2V0KGphdmEubGFuZy5PYmplY3QpIj5vYmplY3RTZXQ8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0T2JqZWN0VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPjxDT0RFPnNldE9iamVjdFZhbHVlKGphdmEubGFuZy5PYmplY3QpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI29iamVjdFZhbHVlKCkiPm9iamVjdFZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0T2JqZWN0VmFsdWUoKSI+PENPREU+Z2V0T2JqZWN0VmFsdWUoKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNxTmFtZVZhbHVlKCkiPnFOYW1lVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRRTmFtZVZhbHVlKCkiPjxDT0RFPmdldFFOYW1lVmFsdWUoKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoamF2YS5tYXRoLkJpZ0RlY2ltYWwpIj5zZXQ8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRCaWdEZWNpbWFsVmFsdWUoamF2YS5tYXRoLkJpZ0RlY2ltYWwpIj48Q09ERT5zZXRCaWdEZWNpbWFsVmFsdWUoamF2YS5tYXRoLkJpZ0RlY2ltYWwpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldChqYXZhLm1hdGguQmlnSW50ZWdlcikiPnNldDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIj5CaWdJbnRlZ2VyPC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEJpZ0ludGVnZXJWYWx1ZShqYXZhLm1hdGguQmlnSW50ZWdlcikiPjxDT0RFPnNldEJpZ0ludGVnZXJWYWx1ZShqYXZhLm1hdGguQmlnSW50ZWdlcik8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0KGJvb2xlYW4pIj5zZXQ8L0E+PC9CPihib29sZWFuJm5ic3A7dik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEJvb2xlYW5WYWx1ZShib29sZWFuKSI+PENPREU+c2V0Qm9vbGVhblZhbHVlKGJvb2xlYW4pPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldChieXRlKSI+c2V0PC9BPjwvQj4oYnl0ZSZuYnNwO3YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRCeXRlVmFsdWUoYnl0ZSkiPjxDT0RFPnNldEJ5dGVWYWx1ZShieXRlKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoYnl0ZVtdKSI+c2V0PC9BPjwvQj4oYnl0ZVtdJm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0Qnl0ZUFycmF5VmFsdWUoYnl0ZVtdKSI+PENPREU+c2V0Qnl0ZUFycmF5VmFsdWUoYnl0ZVtdKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoamF2YS51dGlsLkNhbGVuZGFyKSI+c2V0PC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj5DYWxlbmRhcjwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcikiPjxDT0RFPnNldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoamF2YS51dGlsLkRhdGUpIj5zZXQ8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+RGF0ZTwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXREYXRlVmFsdWUoamF2YS51dGlsLkRhdGUpIj48Q09ERT5zZXREYXRlVmFsdWUoamF2YS51dGlsLkRhdGUpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldChkb3VibGUpIj5zZXQ8L0E+PC9CPihkb3VibGUmbmJzcDt2KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0RG91YmxlVmFsdWUoZG91YmxlKSI+PENPREU+c2V0RG91YmxlVmFsdWUoZG91YmxlKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoZmxvYXQpIj5zZXQ8L0E+PC9CPihmbG9hdCZuYnNwO3YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRGbG9hdFZhbHVlKGZsb2F0KSI+PENPREU+c2V0RmxvYXRWYWx1ZShmbG9hdCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+c2V0PC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSkiPjxDT0RFPnNldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uU3BlY2lmaWNhdGlvbikiPnNldDwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEdEdXJhdGlvblZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uKSI+PENPREU+c2V0R0R1cmF0aW9uVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb24pPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldChpbnQpIj5zZXQ8L0E+PC9CPihpbnQmbmJzcDt2KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0SW50VmFsdWUoaW50KSI+PENPREU+c2V0SW50VmFsdWUoaW50KTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoamF2YS51dGlsLkxpc3QpIj5zZXQ8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRMaXN0VmFsdWUoamF2YS51dGlsLkxpc3QpIj48Q09ERT5zZXRMaXN0VmFsdWUoamF2YS51dGlsLkxpc3QpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldChsb25nKSI+c2V0PC9BPjwvQj4obG9uZyZuYnNwO3YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRMb25nVmFsdWUobG9uZykiPjxDT0RFPnNldExvbmdWYWx1ZShsb25nKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPnNldDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRRTmFtZVZhbHVlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48Q09ERT5zZXRRTmFtZVZhbHVlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldChzaG9ydCkiPnNldDwvQT48L0I+KHNob3J0Jm5ic3A7dik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldFNob3J0VmFsdWUoc2hvcnQpIj48Q09ERT5zZXRTaG9ydFZhbHVlKHNob3J0KTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXQoamF2YS5sYW5nLlN0cmluZykiPnNldDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+c2V0U3RyaW5nVmFsdWUoamF2YS5sYW5nLlN0cmluZyk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuU3RyaW5nRW51bUFic3RyYWN0QmFzZSkiPnNldDwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sIj5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlPC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEVudW1WYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlN0cmluZ0VudW1BYnN0cmFjdEJhc2UpIj48Q09ERT5zZXRFbnVtVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRCaWdEZWNpbWFsVmFsdWUoamF2YS5tYXRoLkJpZ0RlY2ltYWwpIj5zZXRCaWdEZWNpbWFsVmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj48Q09ERT5CaWdEZWNpbWFsPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEJpZ0ludGVnZXJWYWx1ZShqYXZhLm1hdGguQmlnSW50ZWdlcikiPnNldEJpZ0ludGVnZXJWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIj5CaWdJbnRlZ2VyPC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPjxDT0RFPkJpZ0ludGVnZXI8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0Qm9vbGVhblZhbHVlKGJvb2xlYW4pIj5zZXRCb29sZWFuVmFsdWU8L0E+PC9CPihib29sZWFuJm5ic3A7dik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIGFzIGEgYm9vbGVhbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0Qnl0ZUFycmF5VmFsdWUoYnl0ZVtdKSI+c2V0Qnl0ZUFycmF5VmFsdWU8L0E+PC9CPihieXRlW10mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBhcyBhIGJ5dGUgYXJyYXkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEJ5dGVWYWx1ZShieXRlKSI+c2V0Qnl0ZVZhbHVlPC9BPjwvQj4oYnl0ZSZuYnNwO3YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBhcyBhIGJ5dGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+c2V0Q2FsZW5kYXJWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldERhdGVWYWx1ZShqYXZhLnV0aWwuRGF0ZSkiPnNldERhdGVWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvRGF0ZS5odG1sIj5EYXRlPC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPjxDT0RFPkRhdGU8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0RG91YmxlVmFsdWUoZG91YmxlKSI+c2V0RG91YmxlVmFsdWU8L0E+PC9CPihkb3VibGUmbmJzcDt2KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgYXMgYSBkb3VibGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEVudW1WYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlN0cmluZ0VudW1BYnN0cmFjdEJhc2UpIj5zZXRFbnVtVmFsdWU8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuaHRtbCI+U3RyaW5nRW51bUFic3RyYWN0QmFzZTwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sIj48Q09ERT5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEZsb2F0VmFsdWUoZmxvYXQpIj5zZXRGbG9hdFZhbHVlPC9BPjwvQj4oZmxvYXQmbmJzcDt2KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgYXMgYSBmbG9hdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKSI+c2V0R0RhdGVWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEdEdXJhdGlvblZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uKSI+c2V0R0R1cmF0aW9uVmFsdWU8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj48Q09ERT5HRHVyYXRpb248L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0SW50VmFsdWUoaW50KSI+c2V0SW50VmFsdWU8L0E+PC9CPihpbnQmbmJzcDt2KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgYXMgYW4gaW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRMaXN0VmFsdWUoamF2YS51dGlsLkxpc3QpIj5zZXRMaXN0VmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj48Q09ERT5MaXN0PC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldExvbmdWYWx1ZShsb25nKSI+c2V0TG9uZ1ZhbHVlPC9BPjwvQj4obG9uZyZuYnNwO3YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBhcyBhIGxvbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldE9iamVjdFZhbHVlKGphdmEubGFuZy5PYmplY3QpIj5zZXRPYmplY3RWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBhcyBhbiBhcmJpdHJhcnkgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+PENPREU+T2JqZWN0PC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldFFOYW1lVmFsdWUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPnNldFFOYW1lVmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+PENPREU+UU5hbWU8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0U2hvcnRWYWx1ZShzaG9ydCkiPnNldFNob3J0VmFsdWU8L0E+PC9CPihzaG9ydCZuYnNwO3YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBhcyBhIHNob3J0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0U3RyaW5nVmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj48Q09ERT5TdHJpbmc8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7c2hvcnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3Nob3J0VmFsdWUoKSI+c2hvcnRWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldFNob3J0VmFsdWUoKSI+PENPREU+Z2V0U2hvcnRWYWx1ZSgpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3N0cmluZ1ZhbHVlKCkiPnN0cmluZ1ZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0U3RyaW5nVmFsdWUoKSI+PENPREU+Z2V0U3RyaW5nVmFsdWUoKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3hnZXRMaXN0VmFsdWUoKSI+eGdldExpc3RWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPjxDT0RFPkxpc3Q8L0NPREU+PC9BPiBvZiBYbWxBbnlTaW1wbGVUeXBlIG9iamVjdHMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjeGxpc3RWYWx1ZSgpIj54bGlzdFZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0TGlzdFZhbHVlKCkiPjxDT0RFPmdldExpc3RWYWx1ZSgpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY2hhbmdlVHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj5jaGFuZ2VUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVG8oamF2YS5sYW5nLk9iamVjdCkiPmNvbXBhcmVUbzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+Y29tcGFyZVZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb3B5KCkiPmNvcHk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc0ltbXV0YWJsZSgpIj5pc0ltbXV0YWJsZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNOaWwoKSI+aXNOaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NjaGVtYVR5cGUoKSI+c2NoZW1hVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldE5pbCgpIj5zZXROaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZSgpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlRXF1YWxzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+dmFsdWVFcXVhbHM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlSGFzaENvZGUoKSI+dmFsdWVIYXNoQ29kZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFRva2VuU291cmNlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNkb2N1bWVudFByb3BlcnRpZXMoKSI+ZG9jdW1lbnRQcm9wZXJ0aWVzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI21vbml0b3IoKSI+bW9uaXRvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdDdXJzb3IoKSI+bmV3Q3Vyc29yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUoKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0oKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKCkiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKCkiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dCgpIj54bWxUZXh0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+eG1sVGV4dDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJpbnN0YW5jZVR5cGUoKSI+PCEtLSAtLT48L0E+PEgzPgotaW5zdGFuY2VUeXBlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPmluc3RhbmNlVHlwZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlRoZSBzYW1lIGFzIGdldFNjaGVtYVR5cGUgdW5sZXNzIHRoaXMgaXMgYSB1bmlvbiBpbnN0YW5jZQotIG9yIG5pbCB2YWx1ZS4KLSA8cD4KLSBGb3IgdW5pb25zLCB0aGlzIHJldHVybnMgdGhlIG5vbi11bmlvbiBjb25zaXR1ZW50IHR5cGUgb2YKLSB0aGlzIGluc3RhbmNlLiBUaGlzIHR5cGUgbWF5IGNoYW5nZSBpZiBzZXR0ZXJzIGFyZSBjYWxsZWQKLSB0aGF0IGNhdXNlIHRoZSBpbnN0YW5jZSB0byBjaGFuZ2UgdG8gYW5vdGhlciBjb25zdGl0dWVudAotIHR5cGUgb2YgdGhlIHVuaW9uLgotIDxwPgotIEZvciBuaWwgdmFsdWVzLCB0aGlzIHJldHVybnMgbnVsbC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U3RyaW5nVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U3RyaW5nVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPmdldFN0cmluZ1ZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj48Q09ERT5TdHJpbmc8L0NPREU+PC9BPi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0Qm9vbGVhblZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEJvb2xlYW5WYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+Z2V0Qm9vbGVhblZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSBib29sZWFuLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRCeXRlVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Qnl0ZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYnl0ZSA8Qj5nZXRCeXRlVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIGJ5dGUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFNob3J0VmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U2hvcnRWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHNob3J0IDxCPmdldFNob3J0VmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIHNob3J0LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJbnRWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJbnRWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5nZXRJbnRWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGFuIGludC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TG9uZ1ZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldExvbmdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGxvbmcgPEI+Z2V0TG9uZ1ZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSBsb25nLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRCaWdJbnRlZ2VyVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0QmlnSW50ZWdlclZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPkJpZ0ludGVnZXI8L0E+IDxCPmdldEJpZ0ludGVnZXJWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPjxDT0RFPkJpZ0ludGVnZXI8L0NPREU+PC9BPi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0QmlnRGVjaW1hbFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEJpZ0RlY2ltYWxWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj5CaWdEZWNpbWFsPC9BPiA8Qj5nZXRCaWdEZWNpbWFsVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj48Q09ERT5CaWdEZWNpbWFsPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEZsb2F0VmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RmxvYXRWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGZsb2F0IDxCPmdldEZsb2F0VmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIGZsb2F0LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXREb3VibGVWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXREb3VibGVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGRvdWJsZSA8Qj5nZXREb3VibGVWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgZG91YmxlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRCeXRlQXJyYXlWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRCeXRlQXJyYXlWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGJ5dGVbXSA8Qj5nZXRCeXRlQXJyYXlWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgYnl0ZSBhcnJheS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RW51bVZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEVudW1WYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sIj5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlPC9BPiA8Qj5nZXRFbnVtVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sIj48Q09ERT5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldENhbGVuZGFyVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Q2FsZW5kYXJWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+IDxCPmdldENhbGVuZGFyVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0RGF0ZVZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldERhdGVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvRGF0ZS5odG1sIj5EYXRlPC9BPiA8Qj5nZXREYXRlVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvRGF0ZS5odG1sIj48Q09ERT5EYXRlPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEdEYXRlVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0R0RhdGVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+IDxCPmdldEdEYXRlVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+PENPREU+R0RhdGU8L0NPREU+PC9BPi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0R0R1cmF0aW9uVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0R0R1cmF0aW9uVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+IDxCPmdldEdEdXJhdGlvblZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj48Q09ERT5HRHVyYXRpb248L0NPREU+PC9BPi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0UU5hbWVWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRRTmFtZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiA8Qj5nZXRRTmFtZVZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+PENPREU+UU5hbWU8L0NPREU+PC9BPi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TGlzdFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldExpc3RWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPiA8Qj5nZXRMaXN0VmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj48Q09ERT5MaXN0PC9DT0RFPjwvQT4gb2YgZnJpZW5kbHkgSmF2YSBvYmplY3RzIChTdHJpbmcsIEludGVnZXIsIEJ5dGUsIFNob3J0LCBMb25nLCBCaWdJbnRlZ2VyLCBEZWNpbWFsLCBGbG9hdCwgRG91YmxlLCBieXRlW10sIENhbGVuZGFyLCBHRHVyYXRpb24pLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ4Z2V0TGlzdFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXhnZXRMaXN0VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT4gPEI+eGdldExpc3RWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPjxDT0RFPkxpc3Q8L0NPREU+PC9BPiBvZiBYbWxBbnlTaW1wbGVUeXBlIG9iamVjdHMuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE9iamVjdFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE9iamVjdFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiA8Qj5nZXRPYmplY3RWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB1bmlvbiB2YWx1ZSBhcyBhIGl0cyBuYXR1cmFsIGZyaWVuZGx5IEphdmEgb2JqZWN0IChTdHJpbmcsIEludGVnZXIsIEJ5dGUsIFNob3J0LCBMb25nLCBCaWdJbnRlZ2VyLCBEZWNpbWFsLCBGbG9hdCwgRG91YmxlLCBieXRlW10sIENhbGVuZGFyLCBHRHVyYXRpb24pLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0U3RyaW5nVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldFN0cmluZ1ZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+PENPREU+U3RyaW5nPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEJvb2xlYW5WYWx1ZShib29sZWFuKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0Qm9vbGVhblZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRCb29sZWFuVmFsdWU8L0I+KGJvb2xlYW4mbmJzcDt2KTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgYm9vbGVhbi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0Qnl0ZVZhbHVlKGJ5dGUpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRCeXRlVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldEJ5dGVWYWx1ZTwvQj4oYnl0ZSZuYnNwO3YpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSBieXRlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRTaG9ydFZhbHVlKHNob3J0KSI+PCEtLSAtLT48L0E+PEgzPgotc2V0U2hvcnRWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0U2hvcnRWYWx1ZTwvQj4oc2hvcnQmbmJzcDt2KTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgc2hvcnQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEludFZhbHVlKGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEludFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRJbnRWYWx1ZTwvQj4oaW50Jm5ic3A7dik8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhbiBpbnQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldExvbmdWYWx1ZShsb25nKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0TG9uZ1ZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRMb25nVmFsdWU8L0I+KGxvbmcmbmJzcDt2KTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgbG9uZy4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0QmlnSW50ZWdlclZhbHVlKGphdmEubWF0aC5CaWdJbnRlZ2VyKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0QmlnSW50ZWdlclZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRCaWdJbnRlZ2VyVmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIj5CaWdJbnRlZ2VyPC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIj48Q09ERT5CaWdJbnRlZ2VyPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEJpZ0RlY2ltYWxWYWx1ZShqYXZhLm1hdGguQmlnRGVjaW1hbCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEJpZ0RlY2ltYWxWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0QmlnRGVjaW1hbFZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+PENPREU+QmlnRGVjaW1hbDwvQ09ERT48L0E+LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRGbG9hdFZhbHVlKGZsb2F0KSI+PCEtLSAtLT48L0E+PEgzPgotc2V0RmxvYXRWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0RmxvYXRWYWx1ZTwvQj4oZmxvYXQmbmJzcDt2KTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgZmxvYXQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldERvdWJsZVZhbHVlKGRvdWJsZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldERvdWJsZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXREb3VibGVWYWx1ZTwvQj4oZG91YmxlJm5ic3A7dik8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIGRvdWJsZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0Qnl0ZUFycmF5VmFsdWUoYnl0ZVtdKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0Qnl0ZUFycmF5VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldEJ5dGVBcnJheVZhbHVlPC9CPihieXRlW10mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSBieXRlIGFycmF5LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRFbnVtVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0RW51bVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRFbnVtVmFsdWU8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sIj5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlPC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sIj48Q09ERT5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0Q2FsZW5kYXJWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0Q2FsZW5kYXJWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj5DYWxlbmRhcjwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldERhdGVWYWx1ZShqYXZhLnV0aWwuRGF0ZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldERhdGVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0RGF0ZVZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+RGF0ZTwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+PENPREU+RGF0ZTwvQ09ERT48L0E+LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRHRGF0ZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRHRGF0ZVZhbHVlPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+PENPREU+R0RhdGU8L0NPREU+PC9BPi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0R0R1cmF0aW9uVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb24pIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRHRHVyYXRpb25WYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0R0R1cmF0aW9uVmFsdWU8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwiPkdEdXJhdGlvbjwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj48Q09ERT5HRHVyYXRpb248L0NPREU+PC9BPi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0UU5hbWVWYWx1ZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0UU5hbWVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0UU5hbWVWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj48Q09ERT5RTmFtZTwvQ09ERT48L0E+LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRMaXN0VmFsdWUoamF2YS51dGlsLkxpc3QpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRMaXN0VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldExpc3RWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPjxDT0RFPkxpc3Q8L0NPREU+PC9BPi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0T2JqZWN0VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldE9iamVjdFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRPYmplY3RWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhbiBhcmJpdHJhcnkgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+PENPREU+T2JqZWN0PC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InN0cmluZ1ZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXN0cmluZ1ZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5zdHJpbmdWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldFN0cmluZ1ZhbHVlKCkiPjxDT0RFPmdldFN0cmluZ1ZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+PENPREU+U3RyaW5nPC9DT0RFPjwvQT4uICoKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iYm9vbGVhblZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWJvb2xlYW5WYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+Ym9vbGVhblZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0Qm9vbGVhblZhbHVlKCkiPjxDT0RFPmdldEJvb2xlYW5WYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIGJvb2xlYW4uICoKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iYnl0ZVZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWJ5dGVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGJ5dGUgPEI+Ynl0ZVZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0Qnl0ZVZhbHVlKCkiPjxDT0RFPmdldEJ5dGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIGJ5dGUuICoKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2hvcnRWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1zaG9ydFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc2hvcnQgPEI+c2hvcnRWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldFNob3J0VmFsdWUoKSI+PENPREU+Z2V0U2hvcnRWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIHNob3J0LiAqCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImludFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWludFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmludFZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0SW50VmFsdWUoKSI+PENPREU+Z2V0SW50VmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYW4gaW50LiAqCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImxvbmdWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1sb25nVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBsb25nIDxCPmxvbmdWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldExvbmdWYWx1ZSgpIj48Q09ERT5nZXRMb25nVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSBsb25nLiAqCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImJpZ0ludGVnZXJWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1iaWdJbnRlZ2VyVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCI+QmlnSW50ZWdlcjwvQT4gPEI+YmlnSW50ZWdlclZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0QmlnSW50ZWdlclZhbHVlKCkiPjxDT0RFPmdldEJpZ0ludGVnZXJWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIj48Q09ERT5CaWdJbnRlZ2VyPC9DT0RFPjwvQT4uICoKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iYmlnRGVjaW1hbFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWJpZ0RlY2ltYWxWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj5CaWdEZWNpbWFsPC9BPiA8Qj5iaWdEZWNpbWFsVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRCaWdEZWNpbWFsVmFsdWUoKSI+PENPREU+Z2V0QmlnRGVjaW1hbFZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiPjxDT0RFPkJpZ0RlY2ltYWw8L0NPREU+PC9BPi4gKgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJmbG9hdFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWZsb2F0VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBmbG9hdCA8Qj5mbG9hdFZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0RmxvYXRWYWx1ZSgpIj48Q09ERT5nZXRGbG9hdFZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgZmxvYXQuICoKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZG91YmxlVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZG91YmxlVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBkb3VibGUgPEI+ZG91YmxlVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXREb3VibGVWYWx1ZSgpIj48Q09ERT5nZXREb3VibGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIGRvdWJsZS4gKgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJieXRlQXJyYXlWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1ieXRlQXJyYXlWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGJ5dGVbXSA8Qj5ieXRlQXJyYXlWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldEJ5dGVBcnJheVZhbHVlKCkiPjxDT0RFPmdldEJ5dGVBcnJheVZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgYnl0ZSBhcnJheS4gKgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJlbnVtVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZW51bVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLmh0bWwiPlN0cmluZ0VudW1BYnN0cmFjdEJhc2U8L0E+IDxCPmVudW1WYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldEVudW1WYWx1ZSgpIj48Q09ERT5nZXRFbnVtVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuaHRtbCI+PENPREU+U3RyaW5nRW51bUFic3RyYWN0QmFzZTwvQ09ERT48L0E+LiAqCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNhbGVuZGFyVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotY2FsZW5kYXJWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+IDxCPmNhbGVuZGFyVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRDYWxlbmRhclZhbHVlKCkiPjxDT0RFPmdldENhbGVuZGFyVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4uICoKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZGF0ZVZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWRhdGVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvRGF0ZS5odG1sIj5EYXRlPC9BPiA8Qj5kYXRlVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXREYXRlVmFsdWUoKSI+PENPREU+Z2V0RGF0ZVZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPjxDT0RFPkRhdGU8L0NPREU+PC9BPi4gKgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnRGF0ZVZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdEYXRlVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPiA8Qj5nRGF0ZVZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0R0RhdGVWYWx1ZSgpIj48Q09ERT5nZXRHRGF0ZVZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZTwvQ09ERT48L0E+LiAqCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdEdXJhdGlvblZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdEdXJhdGlvblZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCI+R0R1cmF0aW9uPC9BPiA8Qj5nRHVyYXRpb25WYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI2dldEdEdXJhdGlvblZhbHVlKCkiPjxDT0RFPmdldEdEdXJhdGlvblZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCI+PENPREU+R0R1cmF0aW9uPC9DT0RFPjwvQT4uICoKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icU5hbWVWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1xTmFtZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiA8Qj5xTmFtZVZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0UU5hbWVWYWx1ZSgpIj48Q09ERT5nZXRRTmFtZVZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPjxDT0RFPlFOYW1lPC9DT0RFPjwvQT4uICoKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibGlzdFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWxpc3RWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPiA8Qj5saXN0VmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRMaXN0VmFsdWUoKSI+PENPREU+Z2V0TGlzdFZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPjxDT0RFPkxpc3Q8L0NPREU+PC9BPiBvZiBmcmllbmRseSBKYXZhIG9iamVjdHMgKFN0cmluZywgSW50ZWdlciwgQnl0ZSwgU2hvcnQsIExvbmcsIEJpZ0ludGVnZXIsIERlY2ltYWwsIEZsb2F0LCBEb3VibGUsIGJ5dGVbXSwgQ2FsZW5kYXIsIEdEdXJhdGlvbikuICoKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ieGxpc3RWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci14bGlzdFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+IDxCPnhsaXN0VmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNnZXRMaXN0VmFsdWUoKSI+PENPREU+Z2V0TGlzdFZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPjxDT0RFPkxpc3Q8L0NPREU+PC9BPiBvZiBYbWxBbnlTaW1wbGVUeXBlIG9iamVjdHMuICoKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ib2JqZWN0VmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotb2JqZWN0VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+IDxCPm9iamVjdFZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjZ2V0T2JqZWN0VmFsdWUoKSI+PENPREU+Z2V0T2JqZWN0VmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+UmV0dXJucyBhIHVuaW9uIHZhbHVlIGFzIGEgaXRzIG5hdHVyYWwgZnJpZW5kbHkgSmF2YSBvYmplY3QgKFN0cmluZywgSW50ZWdlciwgQnl0ZSwgU2hvcnQsIExvbmcsIEJpZ0ludGVnZXIsIERlY2ltYWwsIEZsb2F0LCBEb3VibGUsIGJ5dGVbXSwgQ2FsZW5kYXIsIEdEdXJhdGlvbikuICoKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0KGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+c2V0U3RyaW5nVmFsdWUoamF2YS5sYW5nLlN0cmluZyk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+PENPREU+U3RyaW5nPC9DT0RFPjwvQT4uICoKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0KGJvb2xlYW4pIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oYm9vbGVhbiZuYnNwO3YpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0Qm9vbGVhblZhbHVlKGJvb2xlYW4pIj48Q09ERT5zZXRCb29sZWFuVmFsdWUoYm9vbGVhbik8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgYm9vbGVhbi4gKgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQoYnl0ZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPihieXRlJm5ic3A7dik8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRCeXRlVmFsdWUoYnl0ZSkiPjxDT0RFPnNldEJ5dGVWYWx1ZShieXRlKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSBieXRlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQoc2hvcnQpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oc2hvcnQmbmJzcDt2KTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldFNob3J0VmFsdWUoc2hvcnQpIj48Q09ERT5zZXRTaG9ydFZhbHVlKHNob3J0KTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSBzaG9ydC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0KGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPihpbnQmbmJzcDt2KTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEludFZhbHVlKGludCkiPjxDT0RFPnNldEludFZhbHVlKGludCk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGFuIGludC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0KGxvbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4obG9uZyZuYnNwO3YpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0TG9uZ1ZhbHVlKGxvbmcpIj48Q09ERT5zZXRMb25nVmFsdWUobG9uZyk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgbG9uZy4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0KGphdmEubWF0aC5CaWdJbnRlZ2VyKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXQ8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIj5CaWdJbnRlZ2VyPC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCNzZXRCaWdJbnRlZ2VyVmFsdWUoamF2YS5tYXRoLkJpZ0ludGVnZXIpIj48Q09ERT5zZXRCaWdJbnRlZ2VyVmFsdWUoamF2YS5tYXRoLkJpZ0ludGVnZXIpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIj48Q09ERT5CaWdJbnRlZ2VyPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldChqYXZhLm1hdGguQmlnRGVjaW1hbCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0QmlnRGVjaW1hbFZhbHVlKGphdmEubWF0aC5CaWdEZWNpbWFsKSI+PENPREU+c2V0QmlnRGVjaW1hbFZhbHVlKGphdmEubWF0aC5CaWdEZWNpbWFsKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+PENPREU+QmlnRGVjaW1hbDwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldChmbG9hdCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPihmbG9hdCZuYnNwO3YpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0RmxvYXRWYWx1ZShmbG9hdCkiPjxDT0RFPnNldEZsb2F0VmFsdWUoZmxvYXQpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIGZsb2F0LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQoZG91YmxlKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXQ8L0I+KGRvdWJsZSZuYnNwO3YpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0RG91YmxlVmFsdWUoZG91YmxlKSI+PENPREU+c2V0RG91YmxlVmFsdWUoZG91YmxlKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSBkb3VibGUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldChieXRlW10pIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oYnl0ZVtdJm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEJ5dGVBcnJheVZhbHVlKGJ5dGVbXSkiPjxDT0RFPnNldEJ5dGVBcnJheVZhbHVlKGJ5dGVbXSk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgYnl0ZSBhcnJheS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuU3RyaW5nRW51bUFic3RyYWN0QmFzZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuaHRtbCI+U3RyaW5nRW51bUFic3RyYWN0QmFzZTwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0RW51bVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuU3RyaW5nRW51bUFic3RyYWN0QmFzZSkiPjxDT0RFPnNldEVudW1WYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlN0cmluZ0VudW1BYnN0cmFjdEJhc2UpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sIj48Q09ERT5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldChqYXZhLnV0aWwuQ2FsZW5kYXIpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj5DYWxlbmRhcjwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpIj48Q09ERT5zZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcik8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQoamF2YS51dGlsLkRhdGUpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPkRhdGU8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldERhdGVWYWx1ZShqYXZhLnV0aWwuRGF0ZSkiPjxDT0RFPnNldERhdGVWYWx1ZShqYXZhLnV0aWwuRGF0ZSk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPjxDT0RFPkRhdGU8L0NPREU+PC9BPi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXQ8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKSI+PENPREU+c2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldChvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvblNwZWNpZmljYXRpb24pIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldEdEdXJhdGlvblZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uKSI+PENPREU+c2V0R0R1cmF0aW9uVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb24pPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwiPjxDT0RFPkdEdXJhdGlvbjwvQ09ERT48L0E+LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldFFOYW1lVmFsdWUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxDT0RFPnNldFFOYW1lVmFsdWUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPjxDT0RFPlFOYW1lPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldChqYXZhLnV0aWwuTGlzdCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwjc2V0TGlzdFZhbHVlKGphdmEudXRpbC5MaXN0KSI+PENPREU+c2V0TGlzdFZhbHVlKGphdmEudXRpbC5MaXN0KTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJvYmplY3RTZXQoamF2YS5sYW5nLk9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLW9iamVjdFNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+b2JqZWN0U2V0PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sI3NldE9iamVjdFZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48Q09ERT5zZXRPYmplY3RWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYW4gYXJiaXRyYXJ5IDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPjxDT0RFPk9iamVjdDwvQ09ERT48L0E+LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZVN5c3RlbS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU2ltcGxlVmFsdWUuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5UYWJsZS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5UYWJsZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDQ0ODkyLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI5MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ2OjU5IFBEVCAyMDAzIC0tPgotPFRJVExFPgotU3RyaW5nRW51bUFic3RyYWN0QmFzZS5UYWJsZSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLlRhYmxlLFN0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGUgY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlN0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGUgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iU3RyaW5nRW51bUFic3RyYWN0QmFzZS5UYWJsZS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUNsYXNzIFN0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGU8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLlRhYmxlPC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+RW5jbG9zaW5nIGNsYXNzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLmh0bWwiPlN0cmluZ0VudW1BYnN0cmFjdEJhc2U8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyA8Qj5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLlRhYmxlPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0RMPgotCi08UD4KLVVzZWQgdG8gbWFuYWdlIHNpbmdsZXRvbiBpbnN0YW5jZXMgb2YgZW51bWVyYXRpb25zLgotIEVhY2ggc3ViY2xhc3Mgb2YgU3RyaW5nRW51bUFic3RyYWN0QmFzZSBoYXMgYW4gaW5zdGFuY2UKLSBvZiBhIHRhYmxlIHRvIGhvbGQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZXMuCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLlRhYmxlLmh0bWwjU3RyaW5nRW51bUFic3RyYWN0QmFzZS5UYWJsZShvcmcuYXBhY2hlLnhtbGJlYW5zLlN0cmluZ0VudW1BYnN0cmFjdEJhc2VbXSkiPlN0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGU8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuaHRtbCI+U3RyaW5nRW51bUFic3RyYWN0QmFzZTwvQT5bXSZuYnNwO2FycmF5KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLmh0bWwiPlN0cmluZ0VudW1BYnN0cmFjdEJhc2U8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5UYWJsZS5odG1sI2ZvckludChpbnQpIj5mb3JJbnQ8L0E+PC9CPihpbnQmbmJzcDtpKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgc2luZ2xldG9uIGZvciBhbiBpbnQgY29kZSwgb3IgbnVsbCBpZiBub25lLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuaHRtbCI+U3RyaW5nRW51bUFic3RyYWN0QmFzZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLlRhYmxlLmh0bWwjZm9yU3RyaW5nKGphdmEubGFuZy5TdHJpbmcpIj5mb3JTdHJpbmc8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHNpbmdsZXRvbiBmb3IgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj48Q09ERT5TdHJpbmc8L0NPREU+PC9BPiwgb3IgbnVsbCBpZiBub25lLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLlRhYmxlLmh0bWwjbGFzdEludCgpIj5sYXN0SW50PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbGFzdCB2YWxpZCBpbnQgY29kZSAodGhlIGZpcnN0IGlzIDE7IHplcm8gaXMgbm90IHVzZWQpLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9IlN0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGUob3JnLmFwYWNoZS54bWxiZWFucy5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlW10pIj48IS0tIC0tPjwvQT48SDM+Ci1TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLlRhYmxlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+U3RyaW5nRW51bUFic3RyYWN0QmFzZS5UYWJsZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLmh0bWwiPlN0cmluZ0VudW1BYnN0cmFjdEJhc2U8L0E+W10mbmJzcDthcnJheSk8L1BSRT4KLTxETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImZvclN0cmluZyhqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotZm9yU3RyaW5nPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLmh0bWwiPlN0cmluZ0VudW1BYnN0cmFjdEJhc2U8L0E+IDxCPmZvclN0cmluZzwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgc2luZ2xldG9uIGZvciBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPjxDT0RFPlN0cmluZzwvQ09ERT48L0E+LCBvciBudWxsIGlmIG5vbmUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImZvckludChpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1mb3JJbnQ8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuaHRtbCI+U3RyaW5nRW51bUFic3RyYWN0QmFzZTwvQT4gPEI+Zm9ySW50PC9CPihpbnQmbmJzcDtpKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHNpbmdsZXRvbiBmb3IgYW4gaW50IGNvZGUsIG9yIG51bGwgaWYgbm9uZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibGFzdEludCgpIj48IS0tIC0tPjwvQT48SDM+Ci1sYXN0SW50PC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmxhc3RJbnQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBsYXN0IHZhbGlkIGludCBjb2RlICh0aGUgZmlyc3QgaXMgMTsgemVybyBpcyBub3QgdXNlZCkuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlN0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGUuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjczOGYwLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMzMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ2OjU5IFBEVCAyMDAzIC0tPgotPFRJVExFPgotU3RyaW5nRW51bUFic3RyYWN0QmFzZSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLFN0cmluZ0VudW1BYnN0cmFjdEJhc2UgY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlN0cmluZ0VudW1BYnN0cmFjdEJhc2UgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuUmVmLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLlRhYmxlLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJTdHJpbmdFbnVtQWJzdHJhY3RCYXNlLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgU3RyaW5nRW51bUFic3RyYWN0QmFzZTwvSDI+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+amF2YS5sYW5nLk9iamVjdDwvQT4KLSAgfAotICArLS08Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLlN0cmluZ0VudW1BYnN0cmFjdEJhc2U8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5BbGwgSW1wbGVtZW50ZWQgSW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9TZXJpYWxpemFibGUuaHRtbCI+U2VyaWFsaXphYmxlPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBjbGFzcyA8Qj5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48RFQ+aW1wbGVtZW50cyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9TZXJpYWxpemFibGUuaHRtbCI+U2VyaWFsaXphYmxlPC9BPjwvREw+Ci0KLTxQPgotVGhlIGJhc2UgY2xhc3MgZm9yIGNvZGUtZ2VuZXJhdGVkIHN0cmluZyBlbnVtZXJhdGlvbiB2YWx1ZSBjbGFzc2VzLgotIDxwPgotIFN1YmNsYXNzZXMgYXJlIGludGVuZGVkIHRvIGJlIGZpbmFsIHR5cGVzIHdpdGggYSBmaW5pdGUgc2V0IG9mCi0gc2luZ2xldG9uIGluc3RhbmNlcy4gIEVhY2ggaW5zdGFuY2UgaGFzIGEgc3RyaW5nIHZhbHVlLCB3aGljaAotIGl0IHJldHVybnMgdmlhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sI3RvU3RyaW5nKCkiPjxDT0RFPnRvU3RyaW5nKCk8L0NPREU+PC9BPiwgYW5kIGFuIGludCB2YWx1ZSBmb3IgdGhlIHB1cnBvc2UKLSBvZiBzd2l0Y2hpbmcgaW4gY2FzZSBzdGF0ZW1lbnRzLCByZXR1cm5lZCB2aWEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLmh0bWwjaW50VmFsdWUoKSI+PENPREU+aW50VmFsdWUoKTwvQ09ERT48L0E+LgotIDxwPgotIEVhY2ggc3ViY2xhc3MgbWFuYWdlcyBhbiBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGUuaHRtbCI+PENPREU+U3RyaW5nRW51bUFic3RyYWN0QmFzZS5UYWJsZTwvQ09ERT48L0E+LAotIHdoaWNoIGhvbGRzIGFsbCB0aGUgc2luZ2xldG9uIGluc3RhbmNlcyBmb3IgdGhlIHN1YmNsYXNzLiBBIFRhYmxlCi0gY2FuIHJldHVybiBhIHNpbmdsZXRvbiBpbnN0YW5jZSBnaXZlbiBhIFN0cmluZyBvciBhbiBpbnRlZ2VyIGNvZGUuCi08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9zZXJpYWxpemVkLWZvcm0uaHRtbCIgVEFSR0VUPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlN0cmluZ0VudW1BYnN0cmFjdEJhc2UiPlNlcmlhbGl6ZWQgRm9ybTwvQT48L0RMPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLlRhYmxlLmh0bWwiPlN0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VXNlZCB0byBtYW5hZ2Ugc2luZ2xldG9uIGluc3RhbmNlcyBvZiBlbnVtZXJhdGlvbnMuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wcm90ZWN0ZWQgPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sI1N0cmluZ0VudW1BYnN0cmFjdEJhc2UoamF2YS5sYW5nLlN0cmluZywgaW50KSI+U3RyaW5nRW51bUFic3RyYWN0QmFzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtpKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2luZ2xldG9uIGluc3RhbmNlcyBzaG91bGQgb25seSBiZSBjcmVhdGVkIGJ5IHN1YmNsYXNzZXMuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgaGFzaCBjb2RlIG9mIHRoZSB1bmRlcmx5aW5nIHN0cmluZzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLmh0bWwjaW50VmFsdWUoKSI+aW50VmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGFuIGludCBjb2RlIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHN3aXRjaCBzdGF0ZW1lbnRzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KCkiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZykiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZywgaW50KSI+d2FpdDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0iY29uc3RydWN0b3JfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJTdHJpbmdFbnVtQWJzdHJhY3RCYXNlKGphdmEubGFuZy5TdHJpbmcsIGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLVN0cmluZ0VudW1BYnN0cmFjdEJhc2U8L0gzPgotPFBSRT4KLXByb3RlY3RlZCA8Qj5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2kpPC9QUkU+Ci08REw+Ci08REQ+U2luZ2xldG9uIGluc3RhbmNlcyBzaG91bGQgb25seSBiZSBjcmVhdGVkIGJ5IHN1YmNsYXNzZXMuCi08UD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9InRvU3RyaW5nKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXRvU3RyaW5nPC9IMz4KLTxQUkU+Ci1wdWJsaWMgZmluYWwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj50b1N0cmluZzwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlCi08UD4KLTxERD48REw+Ci08RFQ+PEI+T3ZlcnJpZGVzOjwvQj48REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT48L0NPREU+IGluIGNsYXNzIDxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpbnRWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1pbnRWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGZpbmFsIGludCA8Qj5pbnRWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYW4gaW50IGNvZGUgdGhhdCBjYW4gYmUgdXNlZCBmb3Igc3dpdGNoIHN0YXRlbWVudHMKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaGFzaENvZGUoKSI+PCEtLSAtLT48L0E+PEgzPgotaGFzaENvZGU8L0gzPgotPFBSRT4KLXB1YmxpYyBmaW5hbCBpbnQgPEI+aGFzaENvZGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBoYXNoIGNvZGUgb2YgdGhlIHVuZGVybHlpbmcgc3RyaW5nCi08UD4KLTxERD48REw+Ci08RFQ+PEI+T3ZlcnJpZGVzOjwvQj48REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT48L0NPREU+IGluIGNsYXNzIDxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5SZWYuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGUuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlN0cmluZ0VudW1BYnN0cmFjdEJhc2UuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWE1MU3RyZWFtVmFsaWRhdGlvbkV4Y2VwdGlvbi5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWE1MU3RyZWFtVmFsaWRhdGlvbkV4Y2VwdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjJmZmUzLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1hNTFN0cmVhbVZhbGlkYXRpb25FeGNlcHRpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI5MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ3OjAxIFBEVCAyMDAzIC0tPgotPFRJVExFPgotWE1MU3RyZWFtVmFsaWRhdGlvbkV4Y2VwdGlvbiAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YTUxTdHJlYW1WYWxpZGF0aW9uRXhjZXB0aW9uLFhNTFN0cmVhbVZhbGlkYXRpb25FeGNlcHRpb24gY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhNTFN0cmVhbVZhbGlkYXRpb25FeGNlcHRpb24gKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFJ1bnRpbWVFeGNlcHRpb24uaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDtORVhUIENMQVNTPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhNTFN0cmVhbVZhbGlkYXRpb25FeGNlcHRpb24uaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX3dlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWE1MU3RyZWFtVmFsaWRhdGlvbkV4Y2VwdGlvbjwvSDI+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+amF2YS5sYW5nLk9iamVjdDwvQT4KLSAgfAotICArLS08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sIj5qYXZhLmxhbmcuVGhyb3dhYmxlPC9BPgotICAgICAgICB8Ci0gICAgICAgICstLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvRXhjZXB0aW9uLmh0bWwiPmphdmEubGFuZy5FeGNlcHRpb248L0E+Ci0gICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgKy0tPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+amF2YS5pby5JT0V4Y2VwdGlvbjwvQT4KLSAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICAgICAgICArLS08QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj53ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICAgICAgICAgICAgICArLS08Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhNTFN0cmVhbVZhbGlkYXRpb25FeGNlcHRpb248L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5BbGwgSW1wbGVtZW50ZWQgSW50ZXJmYWNlczo8L0I+IDxERD53ZWJsb2dpYy51dGlscy5OZXN0ZWRUaHJvd2FibGUsIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIj5TZXJpYWxpemFibGU8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGNsYXNzIDxCPlhNTFN0cmVhbVZhbGlkYXRpb25FeGNlcHRpb248L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvREw+Ci0KLTxQPgotQW4gZXhjZXB0aW9uIHRocm93biBmcm9tIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjxDT0RFPlhtbE9iamVjdC5GYWN0b3J5Lm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxDT0RFPlNjaGVtYVR5cGVMb2FkZXIubmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uL3NlcmlhbGl6ZWQtZm9ybS5odG1sIiBUQVJHRVQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWE1MU3RyZWFtVmFsaWRhdGlvbkV4Y2VwdGlvbiI+U2VyaWFsaXplZCBGb3JtPC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX3dlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+RmllbGRzIGluaGVyaXRlZCBmcm9tIGNsYXNzIHdlYmxvZ2ljLnhtbC5zdHJlYW0uPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwjdGgiPnRoPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0iY29uc3RydWN0b3Jfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWE1MU3RyZWFtVmFsaWRhdGlvbkV4Y2VwdGlvbi5odG1sI1hNTFN0cmVhbVZhbGlkYXRpb25FeGNlcHRpb24ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxFcnJvcikiPlhNTFN0cmVhbVZhbGlkYXRpb25FeGNlcHRpb248L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPlhtbEVycm9yPC9BPiZuYnNwO3htbEVycm9yKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YTUxTdHJlYW1WYWxpZGF0aW9uRXhjZXB0aW9uLmh0bWwjZ2V0WG1sRXJyb3IoKSI+Z2V0WG1sRXJyb3I8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX3dlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyB3ZWJsb2dpYy54bWwuc3RyZWFtLjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sI2dldE1lc3NhZ2UoKSI+Z2V0TWVzc2FnZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwjZ2V0TmVzdGVkKCkiPmdldE5lc3RlZDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwjZ2V0TmVzdGVkRXhjZXB0aW9uKCkiPmdldE5lc3RlZEV4Y2VwdGlvbjwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwjcHJpbnRTdGFja1RyYWNlKCkiPnByaW50U3RhY2tUcmFjZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwjcHJpbnRTdGFja1RyYWNlKGphdmEuaW8uUHJpbnRTdHJlYW0pIj5wcmludFN0YWNrVHJhY2U8L0E+LCA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sI3ByaW50U3RhY2tUcmFjZShqYXZhLmlvLlByaW50V3JpdGVyKSI+cHJpbnRTdGFja1RyYWNlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCNzdXBlclByaW50U3RhY2tUcmFjZShqYXZhLmlvLlByaW50U3RyZWFtKSI+c3VwZXJQcmludFN0YWNrVHJhY2U8L0E+LCA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sI3N1cGVyUHJpbnRTdGFja1RyYWNlKGphdmEuaW8uUHJpbnRXcml0ZXIpIj5zdXBlclByaW50U3RhY2tUcmFjZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwjc3VwZXJUb1N0cmluZygpIj5zdXBlclRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuVGhyb3dhYmxlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCI+VGhyb3dhYmxlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwjZmlsbEluU3RhY2tUcmFjZSgpIj5maWxsSW5TdGFja1RyYWNlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCNnZXRDYXVzZSgpIj5nZXRDYXVzZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwjZ2V0TG9jYWxpemVkTWVzc2FnZSgpIj5nZXRMb2NhbGl6ZWRNZXNzYWdlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCNnZXRTdGFja1RyYWNlKCkiPmdldFN0YWNrVHJhY2U8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sI2luaXRDYXVzZShqYXZhLmxhbmcuVGhyb3dhYmxlKSI+aW5pdENhdXNlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCNzZXRTdGFja1RyYWNlKGphdmEubGFuZy5TdGFja1RyYWNlRWxlbWVudFtdKSI+c2V0U3RhY2tUcmFjZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjY2xvbmUoKSI+Y2xvbmU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZ2V0Q2xhc3MoKSI+Z2V0Q2xhc3M8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KCkiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZykiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZywgaW50KSI+d2FpdDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0iY29uc3RydWN0b3JfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJYTUxTdHJlYW1WYWxpZGF0aW9uRXhjZXB0aW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXJyb3IpIj48IS0tIC0tPjwvQT48SDM+Ci1YTUxTdHJlYW1WYWxpZGF0aW9uRXhjZXB0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+WE1MU3RyZWFtVmFsaWRhdGlvbkV4Y2VwdGlvbjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT4mbmJzcDt4bWxFcnJvcik8L1BSRT4KLTxETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldFhtbEVycm9yKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFhtbEVycm9yPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT4gPEI+Z2V0WG1sRXJyb3I8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxSdW50aW1lRXhjZXB0aW9uLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7TkVYVCBDTEFTUzwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYTUxTdHJlYW1WYWxpZGF0aW9uRXhjZXB0aW9uLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc193ZWJsb2dpYy54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTAzMzQ5Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjczICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTkgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5LFhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeSBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLlRhYmxlLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9IMj4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5qYXZhLmxhbmcuT2JqZWN0PC9BPgotICB8Ci0gICstLTxCPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+RW5jbG9zaW5nIGNsYXNzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyA8Qj5YbWxBbnlTaW1wbGVUeXBlLkZhY3Rvcnk8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvREw+Ci0KLTxQPgotQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlPC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj5uZXdJbnN0YW5jZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPjxDT0RFPlhtbEFueVNpbXBsZVR5cGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnN0YW5jZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPm5ld1ZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlPC9DT0RFPjwvQT4gdmFsdWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7Zik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+PENPREU+WG1sQW55U2ltcGxlVHlwZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+PENPREU+WG1sQW55U2ltcGxlVHlwZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+PENPREU+WG1sQW55U2ltcGxlVHlwZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+PENPREU+WG1sQW55U2ltcGxlVHlwZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPjxDT0RFPlhtbEFueVNpbXBsZVR5cGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+PENPREU+WG1sQW55U2ltcGxlVHlwZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+PENPREU+WG1sQW55U2ltcGxlVHlwZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPjxDT0RFPlhtbEFueVNpbXBsZVR5cGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPjxDT0RFPlhtbEFueVNpbXBsZVR5cGU8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+PENPREU+WG1sQW55U2ltcGxlVHlwZTwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT4gPEI+bmV3VmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPjxDT0RFPlhtbEFueVNpbXBsZVR5cGU8L0NPREU+PC9BPiB2YWx1ZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPjxDT0RFPlhtbEFueVNpbXBsZVR5cGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7YW55dGhpbmcmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0O2FueXRoaW5nJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPjxDT0RFPlhtbEFueVNpbXBsZVR5cGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPjxDT0RFPlhtbEFueVNpbXBsZVR5cGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPjxDT0RFPlhtbEFueVNpbXBsZVR5cGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPjxDT0RFPlhtbEFueVNpbXBsZVR5cGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlcikiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPjxDT0RFPlhtbEFueVNpbXBsZVR5cGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+PENPREU+WG1sQW55U2ltcGxlVHlwZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+PENPREU+WG1sQW55U2ltcGxlVHlwZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+PENPREU+WG1sQW55U2ltcGxlVHlwZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPjxDT0RFPlhtbEFueVNpbXBsZVR5cGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLlRhYmxlLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE2MTBlYi4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNzggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NyBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbEFueVNpbXBsZVR5cGUgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSxYbWxBbnlTaW1wbGVUeXBlIGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sQW55U2ltcGxlVHlwZSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sQW55U2ltcGxlVHlwZS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBYbWxBbnlTaW1wbGVUeXBlPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9ERD4KLTwvREw+Ci08REw+Ci08RFQ+PEI+QWxsIEtub3duIFN1YmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+WG1sQW55VVJJPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPlhtbEJvb2xlYW48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+WG1sQnl0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj5YbWxEYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj5YbWxEYXRlVGltZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+WG1sRG91YmxlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj5YbWxEdXJhdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+WG1sRU5USVRJRVM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj5YbWxFTlRJVFk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPlhtbEZsb2F0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPlhtbEdEYXk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj5YbWxHTW9udGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj5YbWxHTW9udGhEYXk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPlhtbEdZZWFyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPlhtbEdZZWFyTW9udGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj5YbWxIZXhCaW5hcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPlhtbElEPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj5YbWxJRFJFRjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPlhtbElEUkVGUzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPlhtbEludDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj5YbWxMYW5ndWFnZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj5YbWxMb25nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPlhtbE5hbWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj5YbWxOQ05hbWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOZWdhdGl2ZUludGVnZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+WG1sTk1UT0tFTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+WG1sTk1UT0tFTlM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+WG1sTk9UQVRJT048L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPlhtbFFOYW1lPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj5YbWxTaG9ydDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPlhtbFN0cmluZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj5YbWxUaW1lPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj5YbWxUb2tlbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPlhtbFVuc2lnbmVkQnl0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj5YbWxVbnNpZ25lZExvbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+WG1sVW5zaWduZWRTaG9ydDwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlhtbEFueVNpbXBsZVR5cGU8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvREw+Ci0KLTxQPgotQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI1NpbXBsZV9UeXBlX0RlZmluaXRpb24iPnhzOmFueVNpbXBsZVR5cGU8L2E+IHR5cGUuCi0gPHA+Ci0gQWxsIHNpbXBsZSB0eXBlcyBhcmUgY29udmVydGlibGUgdG8gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+PENPREU+U3RyaW5nPC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibmVzdGVkX2NsYXNzX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TmVzdGVkIENsYXNzIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtjbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlLkZhY3Rvcnk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPlhtbE9iamVjdC5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3R5cGUiPnR5cGU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9ImZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPkZpZWxkcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNFUVVBTCI+RVFVQUw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0dSRUFURVJfVEhBTiI+R1JFQVRFUl9USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNMRVNTX1RIQU4iPkxFU1NfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTk9UX0VRVUFMIj5OT1RfRVFVQUw8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI2dldFN0cmluZ1ZhbHVlKCkiPmdldFN0cmluZ1ZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj48Q09ERT5TdHJpbmc8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldChqYXZhLmxhbmcuU3RyaW5nKSI+c2V0PC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+c2V0U3RyaW5nVmFsdWUoamF2YS5sYW5nLlN0cmluZyk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0U3RyaW5nVmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+PENPREU+U3RyaW5nPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzdHJpbmdWYWx1ZSgpIj5zdHJpbmdWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIGJ5IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI2dldFN0cmluZ1ZhbHVlKCkiPjxDT0RFPmdldFN0cmluZ1ZhbHVlKCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjaGFuZ2VUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPmNoYW5nZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KSI+Y29tcGFyZVRvPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5jb21wYXJlVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvcHkoKSI+Y29weTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzSW1tdXRhYmxlKCkiPmlzSW1tdXRhYmxlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc05pbCgpIj5pc05pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2NoZW1hVHlwZSgpIj5zY2hlbWFUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0TmlsKCkiPnNldE5pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKCkiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVFcXVhbHMob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj52YWx1ZUVxdWFsczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVIYXNoQ29kZSgpIj52YWx1ZUhhc2hDb2RlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVG9rZW5Tb3VyY2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI2RvY3VtZW50UHJvcGVydGllcygpIj5kb2N1bWVudFByb3BlcnRpZXM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbW9uaXRvcigpIj5tb25pdG9yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0N1cnNvcigpIj5uZXdDdXJzb3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZSgpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbSgpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIoKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0oKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0pIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KCkiPnhtbFRleHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj54bWxUZXh0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0idHlwZSI+PCEtLSAtLT48L0E+PEgzPgotdHlwZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+dHlwZTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0ic3RyaW5nVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotc3RyaW5nVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPnN0cmluZ1ZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgYnkgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjZ2V0U3RyaW5nVmFsdWUoKSI+PENPREU+Z2V0U3RyaW5nVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj48Q09ERT5TdHJpbmc8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cyk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+c2V0U3RyaW5nVmFsdWUoamF2YS5sYW5nLlN0cmluZyk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+PENPREU+U3RyaW5nPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U3RyaW5nVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U3RyaW5nVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPmdldFN0cmluZ1ZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj48Q09ERT5TdHJpbmc8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0U3RyaW5nVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldFN0cmluZ1ZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cyk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPjxDT0RFPlN0cmluZzwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxBbnlTaW1wbGVUeXBlLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5GYWN0b3J5Lmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmVjZGQ1Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5GYWN0b3J5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NzMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1OSBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbEFueVVSSS5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVVSSS5GYWN0b3J5LFhtbEFueVVSSS5GYWN0b3J5IGNsYXNzIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxBbnlVUkkuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sQW55VVJJLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBYbWxBbnlVUkkuRmFjdG9yeTwvSDI+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+amF2YS5sYW5nLk9iamVjdDwvQT4KLSAgfAotICArLS08Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVVSSS5GYWN0b3J5PC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+RW5jbG9zaW5nIGNsYXNzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+WG1sQW55VVJJPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgPEI+WG1sQW55VVJJLkZhY3Rvcnk8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvREw+Ci0KLTxQPgotQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPjxDT0RFPlhtbEFueVVSSTwvQ09ERT48L0E+LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+WG1sQW55VVJJPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2UoKSI+bmV3SW5zdGFuY2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPjxDT0RFPlhtbEFueVVSSTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPlhtbEFueVVSSTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0luc3RhbmNlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+PENPREU+WG1sQW55VVJJPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPlhtbEFueVVSSTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sI25ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj5uZXdWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj48Q09ERT5YbWxBbnlVUkk8L0NPREU+PC9BPiB2YWx1ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj5YbWxBbnlVUkk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+PENPREU+WG1sQW55VVJJPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPlhtbEFueVVSSTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj48Q09ERT5YbWxBbnlVUkk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+WG1sQW55VVJJPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj48Q09ERT5YbWxBbnlVUkk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj5YbWxBbnlVUkk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPjxDT0RFPlhtbEFueVVSSTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPlhtbEFueVVSSTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPjxDT0RFPlhtbEFueVVSSTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+WG1sQW55VVJJPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+PENPREU+WG1sQW55VVJJPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj5YbWxBbnlVUkk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlcikiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+PENPREU+WG1sQW55VVJJPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+WG1sQW55VVJJPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPjxDT0RFPlhtbEFueVVSSTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPlhtbEFueVVSSTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+PENPREU+WG1sQW55VVJJPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+WG1sQW55VVJJPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj48Q09ERT5YbWxBbnlVUkk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj5YbWxBbnlVUkk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj48Q09ERT5YbWxBbnlVUkk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj5YbWxBbnlVUkk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj48Q09ERT5YbWxBbnlVUkk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj5YbWxBbnlVUkk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPjxDT0RFPlhtbEFueVVSSTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPlhtbEFueVVSSTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+PENPREU+WG1sQW55VVJJPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNjbG9uZSgpIj5jbG9uZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj5lcXVhbHM8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2ZpbmFsaXplKCkiPmZpbmFsaXplPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNnZXRDbGFzcygpIj5nZXRDbGFzczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjaGFzaENvZGUoKSI+aGFzaENvZGU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeSgpIj5ub3RpZnk8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeUFsbCgpIj5ub3RpZnlBbGw8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KCkiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZykiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZywgaW50KSI+d2FpdDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj5YbWxBbnlVUkk8L0E+IDxCPm5ld0luc3RhbmNlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj48Q09ERT5YbWxBbnlVUkk8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj5YbWxBbnlVUkk8L0E+IDxCPm5ld0luc3RhbmNlPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+PENPREU+WG1sQW55VVJJPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPlhtbEFueVVSSTwvQT4gPEI+bmV3VmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+PENPREU+WG1sQW55VVJJPC9DT0RFPjwvQT4gdmFsdWUKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPlhtbEFueVVSSTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPjxDT0RFPlhtbEFueVVSSTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDtodHRwOi8vd3d3LnczLm9yZy8mbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj5YbWxBbnlVUkk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+PENPREU+WG1sQW55VVJJPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0O2h0dHA6Ly93d3cudzMub3JnLyZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPlhtbEFueVVSSTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPjxDT0RFPlhtbEFueVVSSTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPlhtbEFueVVSSTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj48Q09ERT5YbWxBbnlVUkk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+WG1sQW55VVJJPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSkKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj48Q09ERT5YbWxBbnlVUkk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPlhtbEFueVVSSTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPjxDT0RFPlhtbEFueVVSSTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj5YbWxBbnlVUkk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj48Q09ERT5YbWxBbnlVUkk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj5YbWxBbnlVUkk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+PENPREU+WG1sQW55VVJJPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj5YbWxBbnlVUkk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+PENPREU+WG1sQW55VVJJPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPlhtbEFueVVSSTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+PENPREU+WG1sQW55VVJJPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPlhtbEFueVVSSTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj48Q09ERT5YbWxBbnlVUkk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+WG1sQW55VVJJPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj48Q09ERT5YbWxBbnlVUkk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPlhtbEFueVVSSTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj48Q09ERT5YbWxBbnlVUkk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+WG1sQW55VVJJPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj48Q09ERT5YbWxBbnlVUkk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxBbnlVUkkuRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzY0MWQ1Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjgwICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTcgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxBbnlVUkkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55VVJJLFhtbEFueVVSSSBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbEFueVVSSSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxBbnlVUkkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFhtbEFueVVSSTwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGludGVyZmFjZSA8Qj5YbWxBbnlVUkk8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9ETD4KLQotPFA+Ci1Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jYW55VVJJIj54czphbnlVUkk8L2E+IHR5cGUuCi0gPHA+Ci0gQ29udmVydGlibGUgdG8gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+PENPREU+U3RyaW5nPC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibmVzdGVkX2NsYXNzX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TmVzdGVkIENsYXNzIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtjbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5GYWN0b3J5Lmh0bWwiPlhtbEFueVVSSS5GYWN0b3J5PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj48Q09ERT5YbWxBbnlVUkk8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPlhtbE9iamVjdC5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwjdHlwZSI+dHlwZTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+RmllbGRzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0VRVUFMIj5FUVVBTDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjR1JFQVRFUl9USEFOIj5HUkVBVEVSX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0xFU1NfVEhBTiI+TEVTU19USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNOT1RfRVFVQUwiPk5PVF9FUVVBTDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjZ2V0U3RyaW5nVmFsdWUoKSI+Z2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXQoamF2YS5sYW5nLlN0cmluZykiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj5zZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3N0cmluZ1ZhbHVlKCkiPnN0cmluZ1ZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjaGFuZ2VUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPmNoYW5nZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KSI+Y29tcGFyZVRvPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5jb21wYXJlVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvcHkoKSI+Y29weTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzSW1tdXRhYmxlKCkiPmlzSW1tdXRhYmxlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc05pbCgpIj5pc05pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2NoZW1hVHlwZSgpIj5zY2hlbWFUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0TmlsKCkiPnNldE5pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKCkiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVFcXVhbHMob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj52YWx1ZUVxdWFsczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVIYXNoQ29kZSgpIj52YWx1ZUhhc2hDb2RlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVG9rZW5Tb3VyY2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI2RvY3VtZW50UHJvcGVydGllcygpIj5kb2N1bWVudFByb3BlcnRpZXM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbW9uaXRvcigpIj5tb25pdG9yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0N1cnNvcigpIj5uZXdDdXJzb3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZSgpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbSgpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIoKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0oKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0pIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KCkiPnhtbFRleHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj54bWxUZXh0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0idHlwZSI+PCEtLSAtLT48L0E+PEgzPgotdHlwZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+dHlwZTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbEFueVVSSS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZWEyM2IuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY3MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ2OjU5IFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnksWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkgY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbEJhc2U2NEJpbmFyeS5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuRmFjdG9yeS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sQmFzZTY0QmluYXJ5LkZhY3Rvcnk8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxCYXNlNjRCaW5hcnkuRmFjdG9yeTwvQj4KLTwvUFJFPgotPERMPgotPERUPjxCPkVuY2xvc2luZyBjbGFzczo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPlhtbEJhc2U2NEJpbmFyeTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIDxCPlhtbEJhc2U2NEJpbmFyeS5GYWN0b3J5PC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0RMPgotCi08UD4KLUEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj48Q09ERT5YbWxCYXNlNjRCaW5hcnk8L0NPREU+PC9BPi4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPlhtbEJhc2U2NEJpbmFyeTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPm5ld0luc3RhbmNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj48Q09ERT5YbWxCYXNlNjRCaW5hcnk8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj5YbWxCYXNlNjRCaW5hcnk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnN0YW5jZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEJhc2U2NEJpbmFyeTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj5YbWxCYXNlNjRCaW5hcnk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+bmV3VmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+PENPREU+WG1sQmFzZTY0QmluYXJ5PC9DT0RFPjwvQT4gdmFsdWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7Zik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEJhc2U2NEJpbmFyeTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj5YbWxCYXNlNjRCaW5hcnk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+PENPREU+WG1sQmFzZTY0QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPlhtbEJhc2U2NEJpbmFyeTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+PENPREU+WG1sQmFzZTY0QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj48Q09ERT5YbWxCYXNlNjRCaW5hcnk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj5YbWxCYXNlNjRCaW5hcnk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj48Q09ERT5YbWxCYXNlNjRCaW5hcnk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPlhtbEJhc2U2NEJpbmFyeTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEJhc2U2NEJpbmFyeTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEJhc2U2NEJpbmFyeTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPlhtbEJhc2U2NEJpbmFyeTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj48Q09ERT5YbWxCYXNlNjRCaW5hcnk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj5YbWxCYXNlNjRCaW5hcnk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEJhc2U2NEJpbmFyeTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPlhtbEJhc2U2NEJpbmFyeTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+PENPREU+WG1sQmFzZTY0QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+PENPREU+WG1sQmFzZTY0QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+PENPREU+WG1sQmFzZTY0QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj48Q09ERT5YbWxCYXNlNjRCaW5hcnk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj5YbWxCYXNlNjRCaW5hcnk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEJhc2U2NEJpbmFyeTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjY2xvbmUoKSI+Y2xvbmU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZ2V0Q2xhc3MoKSI+Z2V0Q2xhc3M8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5PC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+PENPREU+WG1sQmFzZTY0QmluYXJ5PC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5PC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEJhc2U2NEJpbmFyeTwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj5YbWxCYXNlNjRCaW5hcnk8L0E+IDxCPm5ld1ZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEJhc2U2NEJpbmFyeTwvQ09ERT48L0E+IHZhbHVlCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj5YbWxCYXNlNjRCaW5hcnk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj48Q09ERT5YbWxCYXNlNjRCaW5hcnk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7VkdocGN5QnpkSEpwJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEJhc2U2NEJpbmFyeTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDtWR2hwY3lCemRISnAmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj5YbWxCYXNlNjRCaW5hcnk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj48Q09ERT5YbWxCYXNlNjRCaW5hcnk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj5YbWxCYXNlNjRCaW5hcnk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+PENPREU+WG1sQmFzZTY0QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPlhtbEJhc2U2NEJpbmFyeTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+PENPREU+WG1sQmFzZTY0QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj5YbWxCYXNlNjRCaW5hcnk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj48Q09ERT5YbWxCYXNlNjRCaW5hcnk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+PENPREU+WG1sQmFzZTY0QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEJhc2U2NEJpbmFyeTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEJhc2U2NEJpbmFyeTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj5YbWxCYXNlNjRCaW5hcnk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEJhc2U2NEJpbmFyeTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj5YbWxCYXNlNjRCaW5hcnk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+PENPREU+WG1sQmFzZTY0QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPlhtbEJhc2U2NEJpbmFyeTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+PENPREU+WG1sQmFzZTY0QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj5YbWxCYXNlNjRCaW5hcnk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+PENPREU+WG1sQmFzZTY0QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPlhtbEJhc2U2NEJpbmFyeTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+PENPREU+WG1sQmFzZTY0QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxCYXNlNjRCaW5hcnkuRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTE3ZTMxLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzkzICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTcgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxCYXNlNjRCaW5hcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQmFzZTY0QmluYXJ5LFhtbEJhc2U2NEJpbmFyeSBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbEJhc2U2NEJpbmFyeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55VVJJLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxCYXNlNjRCaW5hcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgWG1sQmFzZTY0QmluYXJ5PC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlhtbEJhc2U2NEJpbmFyeTwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0RMPgotCi08UD4KLUNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNiYXNlNjRCaW5hcnkiPnhzOmJhc2U2NEJpbmFyeTwvYT4gdHlwZS4KLSA8cD4KLSBDb252ZXJ0aWJsZSB0byBhIGJ5dGUgYXJyYXkuCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibmVzdGVkX2NsYXNzX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TmVzdGVkIENsYXNzIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtjbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwiPlhtbEJhc2U2NEJpbmFyeS5GYWN0b3J5PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj48Q09ERT5YbWxCYXNlNjRCaW5hcnk8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPlhtbE9iamVjdC5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwjdHlwZSI+dHlwZTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+RmllbGRzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0VRVUFMIj5FUVVBTDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjR1JFQVRFUl9USEFOIj5HUkVBVEVSX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0xFU1NfVEhBTiI+TEVTU19USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNOT1RfRVFVQUwiPk5PVF9FUVVBTDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2J5dGVbXTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sI2J5dGVBcnJheVZhbHVlKCkiPmJ5dGVBcnJheVZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgYnkgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCNnZXRCeXRlQXJyYXlWYWx1ZSgpIj48Q09ERT5nZXRCeXRlQXJyYXlWYWx1ZSgpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2J5dGVbXTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sI2dldEJ5dGVBcnJheVZhbHVlKCkiPmdldEJ5dGVBcnJheVZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgYnl0ZSBhcnJheS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sI3NldChieXRlW10pIj5zZXQ8L0E+PC9CPihieXRlW10mbmJzcDtiYSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIGJ5IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwjc2V0Qnl0ZUFycmF5VmFsdWUoYnl0ZVtdKSI+PENPREU+c2V0Qnl0ZUFycmF5VmFsdWUoYnl0ZVtdKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwjc2V0Qnl0ZUFycmF5VmFsdWUoYnl0ZVtdKSI+c2V0Qnl0ZUFycmF5VmFsdWU8L0E+PC9CPihieXRlW10mbmJzcDtiYSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhpcyB2YWx1ZSBhcyBhIGJ5dGUgYXJyYXkuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI2dldFN0cmluZ1ZhbHVlKCkiPmdldFN0cmluZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0KGphdmEubGFuZy5TdHJpbmcpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzdHJpbmdWYWx1ZSgpIj5zdHJpbmdWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY2hhbmdlVHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj5jaGFuZ2VUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVG8oamF2YS5sYW5nLk9iamVjdCkiPmNvbXBhcmVUbzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+Y29tcGFyZVZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb3B5KCkiPmNvcHk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc0ltbXV0YWJsZSgpIj5pc0ltbXV0YWJsZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNOaWwoKSI+aXNOaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NjaGVtYVR5cGUoKSI+c2NoZW1hVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldE5pbCgpIj5zZXROaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZSgpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlRXF1YWxzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+dmFsdWVFcXVhbHM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlSGFzaENvZGUoKSI+dmFsdWVIYXNoQ29kZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFRva2VuU291cmNlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNkb2N1bWVudFByb3BlcnRpZXMoKSI+ZG9jdW1lbnRQcm9wZXJ0aWVzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI21vbml0b3IoKSI+bW9uaXRvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdDdXJzb3IoKSI+bmV3Q3Vyc29yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUoKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0oKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKCkiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKCkiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dCgpIj54bWxUZXh0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+eG1sVGV4dDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9InR5cGUiPjwhLS0gLS0+PC9BPjxIMz4KLXR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPnR5cGU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImJ5dGVBcnJheVZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWJ5dGVBcnJheVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYnl0ZVtdIDxCPmJ5dGVBcnJheVZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgYnkgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCNnZXRCeXRlQXJyYXlWYWx1ZSgpIj48Q09ERT5nZXRCeXRlQXJyYXlWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSBieXRlIGFycmF5LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQoYnl0ZVtdKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXQ8L0I+KGJ5dGVbXSZuYnNwO2JhKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIGJ5IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwjc2V0Qnl0ZUFycmF5VmFsdWUoYnl0ZVtdKSI+PENPREU+c2V0Qnl0ZUFycmF5VmFsdWUoYnl0ZVtdKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgYnl0ZSBhcnJheS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0Qnl0ZUFycmF5VmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Qnl0ZUFycmF5VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBieXRlW10gPEI+Z2V0Qnl0ZUFycmF5VmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSBieXRlIGFycmF5LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRCeXRlQXJyYXlWYWx1ZShieXRlW10pIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRCeXRlQXJyYXlWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0Qnl0ZUFycmF5VmFsdWU8L0I+KGJ5dGVbXSZuYnNwO2JhKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIGJ5dGUgYXJyYXkuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbEJhc2U2NEJpbmFyeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWU3NGZlYy4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjYxICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTkgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxCZWFucyAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxCZWFucyxYbWxCZWFucyBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sQmVhbnMgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbEJlYW5zLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sQmVhbnM8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxCZWFuczwvQj4KLTwvUFJFPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBmaW5hbCBjbGFzcyA8Qj5YbWxCZWFuczwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9ETD4KLQotPFA+Ci1Qcm92aWRlcyBhbiBhc3NvcnRtZW50IG9mIHV0aWxpdGllcwotIGZvciBtYW5hZ2luZyBYTUwgQmVhbiB0eXBlcywgdHlwZSBzeXN0ZW1zLCBRTmFtZXMsIHBhdGhzLAotIGFuZCBxdWVyaWVzLgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sI05PX1RZUEUiPk5PX1RZUEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIFNjaGVtYVR5cGUgb2JqZWN0IGdpdmVuIHRvIGFuIFhtbE9iamVjdCBpbnN0YW5jZSB3aGVuCi0gbm8gdHlwZSBjYW4gYmUgZGV0ZXJtaW5lZC48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwjY29tcGlsZVBhdGgoamF2YS5sYW5nLlN0cmluZykiPmNvbXBpbGVQYXRoPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3BhdGhFeHByKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29tcGlsZXMgYW4gWFBhdGgsIHJldHVybmluZyBhIFN0cmluZyBlcXVhbCB0byB0aGF0IHdoaWNoIHdhcyBwYXNzZWQsCi0gYnV0IHdob3NlIGlkZW50aXR5IGlzIHRoYXQgb2Ygb25lIHdoaWNoIGhhcyBiZWVuIHByZWNvbXBpbGVkIGFuZCBjYWNoZWQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sI2NvbXBpbGVQYXRoKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPmNvbXBpbGVQYXRoPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3BhdGhFeHByLAotICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbXBpbGVzIGFuIFhQYXRoLCByZXR1cm5pbmcgYSBTdHJpbmcgZXF1YWwgdG8gdGhhdCB3aGljaCB3YXMgcGFzc2VkLAotIGJ1dCB3aG9zZSBpZGVudGl0eSBpcyB0aGF0IG9mIG9uZSB3aGljaCBoYXMgYmVlbiBwcmVjb21waWxlZCBhbmQgY2FjaGVkOyAKLSB0YWtlcyBhbiBvcHRpb24gZm9yIHNwZWNpZnlpbmcgdGV4dCB0aGF0IGluZGljYXRlcyB0aGUgbmFtZSBvZiBjb250ZXh0IG5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sI2NvbXBpbGVRdWVyeShqYXZhLmxhbmcuU3RyaW5nKSI+Y29tcGlsZVF1ZXJ5PC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3F1ZXJ5RXhwcik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbXBpbGVzIGFuIFhRdWVyeSwgcmV0dXJuaW5nIGEgU3RyaW5nIGVxdWFsIHRvIHRoYXQgd2hpY2ggd2FzIHBhc3NlZCwKLSBidXQgd2hvc2UgaWRlbnRpdHkgaXMgdGhhdCBvZiBvbmUgd2hpY2ggaGFzIGJlZW4gcHJlY29tcGlsZWQgYW5kIGNhY2hlZC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwjY29tcGlsZVF1ZXJ5KGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPmNvbXBpbGVRdWVyeTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtxdWVyeUV4cHIsCi0gICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbXBpbGVzIGFuIFhRdWVyeSwgcmV0dXJuaW5nIGEgU3RyaW5nIGVxdWFsIHRvIHRoYXQgd2hpY2ggd2FzIHBhc3NlZCwKLSBidXQgd2hvc2UgaWRlbnRpdHkgaXMgdGhhdCBvZiBvbmUgd2hpY2ggaGFzIGJlZW4gcHJlY29tcGlsZWQgYW5kIGNhY2hlZDsKLSB0YWtlcyBhbiBvcHRpb24gZm9yIHNwZWNpZnlpbmcgdGV4dCB0aGF0IGluZGljYXRlcyB0aGUgY29udGV4dCBub2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVTeXN0ZW0uaHRtbCI+U2NoZW1hVHlwZVN5c3RlbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sI2NvbXBpbGVYc2Qob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3RbXSwgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5jb21waWxlWHNkPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPltdJm5ic3A7c2NoZW1hcywKLSAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXI8L0E+Jm5ic3A7dHlwZXBhdGgsCi0gICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBTY2hlbWFUeXBlU3lzdGVtIHRoYXQgcmVzdWx0cyBmcm9tIGNvbXBpbGluZyB0aGUgWE1MCi0gc2NoZW1hIGRlZmluaXRpb25zIHBhc3NlZC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwiPlNjaGVtYVR5cGVTeXN0ZW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuaHRtbCNnZXRCdWlsdGluVHlwZVN5c3RlbSgpIj5nZXRCdWlsdGluVHlwZVN5c3RlbTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGJ1aWx0aW4gdHlwZSBzeXN0ZW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sIj5TY2hlbWFUeXBlTG9hZGVyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwjZ2V0Q29udGV4dFR5cGVMb2FkZXIoKSI+Z2V0Q29udGV4dFR5cGVMb2FkZXI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSBTY2hlbWFUeXBlTG9hZGVyIGJhc2VkIG9uIHRoZSBjdXJyZW50IHRocmVhZCdzIGNvbnRleHQKLSBDbGFzc0xvYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwjZ2V0UU5hbWUoamF2YS5sYW5nLlN0cmluZykiPmdldFFOYW1lPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO2xvY2FsUGFydCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO09idGFpbnMgYSBuYW1lIGZyb20gdGhlIHRocmVhZCBsb2NhbCBRTmFtZUNhY2hlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sI2dldFFOYW1lKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj5nZXRRTmFtZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtuYW1lc3BhY2VVcmksCi0gICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bG9jYWxQYXJ0KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7T2J0YWlucyBhIG5hbWUgZnJvbSB0aGUgdGhyZWFkIGxvY2FsIFFOYW1lQ2FjaGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZUNhY2hlLmh0bWwiPlFOYW1lQ2FjaGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuaHRtbCNnZXRRTmFtZUNhY2hlKCkiPmdldFFOYW1lQ2FjaGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdGhyZWFkIGxvY2FsIFFOYW1lQ2FjaGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuaHRtbCNsb2FkWHNkKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0W10pIj5sb2FkWHNkPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPltdJm5ic3A7c2NoZW1hcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIFNjaGVtYVR5cGVTeXN0ZW0gdGhhdCByZXN1bHRzIGZyb20gY29tcGlsaW5nIHRoZSBYTUwKLSBzY2hlbWEgZGVmaW5pdGlvbnMgcGFzc2VkLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+U2NoZW1hVHlwZUxvYWRlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sI2xvYWRYc2Qob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3RbXSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bG9hZFhzZDwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT5bXSZuYnNwO3NjaGVtYXMsCi0gICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBTY2hlbWFUeXBlU3lzdGVtIHRoYXQgcmVzdWx0cyBmcm9tIGNvbXBpbGluZyB0aGUgWE1MCi0gc2NoZW1hIGRlZmluaXRpb25zIHBhc3NlZCBpbiA8ZW0+c2NoZW1hczwvZW0+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sI3R5cGVGb3JDbGFzcyhqYXZhLmxhbmcuQ2xhc3MpIj50eXBlRm9yQ2xhc3M8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0NsYXNzLmh0bWwiPkNsYXNzPC9BPiZuYnNwO2MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBTY2hlbWFUeXBlIGZyb20gYSBjb3JyZXNwb25kaW5nIFhtbE9iamVjdCBzdWJjbGFzcywKLSBvciBudWxsIGlmIG5vbmUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sIj5TY2hlbWFUeXBlTG9hZGVyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwjdHlwZUxvYWRlckZvckNsYXNzTG9hZGVyKGphdmEubGFuZy5DbGFzc0xvYWRlcikiPnR5cGVMb2FkZXJGb3JDbGFzc0xvYWRlcjwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvQ2xhc3NMb2FkZXIuaHRtbCI+Q2xhc3NMb2FkZXI8L0E+Jm5ic3A7bG9hZGVyKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIFNjaGVtYVR5cGVMb2FkZXIgdGhhdCBzZWFyY2hlcyBmb3IgY29tcGlsZWQgc2NoZW1hIHR5cGVzCi0gaW4gdGhlIGdpdmVuIENsYXNzTG9hZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+U2NoZW1hVHlwZUxvYWRlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sI3R5cGVMb2FkZXJVbmlvbihvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXJbXSkiPnR5cGVMb2FkZXJVbmlvbjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sIj5TY2hlbWFUeXBlTG9hZGVyPC9BPltdJm5ic3A7dHlwZUxvYWRlcnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB1bmlvbiBvZiBhIGxpc3Qgb2YgdHlwZUxvYWRlcnMuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjY2xvbmUoKSI+Y2xvbmU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZ2V0Q2xhc3MoKSI+Z2V0Q2xhc3M8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJOT19UWVBFIj48IS0tIC0tPjwvQT48SDM+Ci1OT19UWVBFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPiA8Qj5OT19UWVBFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBTY2hlbWFUeXBlIG9iamVjdCBnaXZlbiB0byBhbiBYbWxPYmplY3QgaW5zdGFuY2Ugd2hlbgotIG5vIHR5cGUgY2FuIGJlIGRldGVybWluZWQuCi0gPHA+Ci0gVGhlIE5PX1RZUEUgaXMgdGhlIHVuaXZlcnNhbCBkZXJpdmVkIHR5cGUuICBUaGF0IGlzLCBpdCBpcwotIGRlcml2ZWQgZnJvbSBhbGwgb3RoZXIgc2NoZW1hIHR5cGVzLCBhbmQgbm8gaW5zdGFuY2VzIG9mIHRoZQotIE5PX1RZUEUgYXJlIHZhbGlkLiAoSXQgaXMgbm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdGhlIGFueVR5cGUsCi0gd2hpY2ggaXMgdGhlIHVuaXZlcnNhbCBiYXNlIHR5cGUgZnJvbSB3aGljaCBhbGwgb3RoZXIgdHlwZXMKLSBjYW4gYmUgZGVyaXZlZCwgYW5kIG9mIHdoaWNoIGFsbCBpbnN0YW5jZXMgYXJlIHZhbGlkLikKLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRRTmFtZUNhY2hlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFFOYW1lQ2FjaGU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZUNhY2hlLmh0bWwiPlFOYW1lQ2FjaGU8L0E+IDxCPmdldFFOYW1lQ2FjaGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdGhyZWFkIGxvY2FsIFFOYW1lQ2FjaGUKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0UU5hbWUoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFFOYW1lPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4gPEI+Z2V0UU5hbWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtsb2NhbFBhcnQpPC9QUkU+Ci08REw+Ci08REQ+T2J0YWlucyBhIG5hbWUgZnJvbSB0aGUgdGhyZWFkIGxvY2FsIFFOYW1lQ2FjaGUKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0UU5hbWUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFFOYW1lPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4gPEI+Z2V0UU5hbWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtuYW1lc3BhY2VVcmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtsb2NhbFBhcnQpPC9QUkU+Ci08REw+Ci08REQ+T2J0YWlucyBhIG5hbWUgZnJvbSB0aGUgdGhyZWFkIGxvY2FsIFFOYW1lQ2FjaGUKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iY29tcGlsZVBhdGgoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLWNvbXBpbGVQYXRoPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+Y29tcGlsZVBhdGg8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtwYXRoRXhwcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5Db21waWxlcyBhbiBYUGF0aCwgcmV0dXJuaW5nIGEgU3RyaW5nIGVxdWFsIHRvIHRoYXQgd2hpY2ggd2FzIHBhc3NlZCwKLSBidXQgd2hvc2UgaWRlbnRpdHkgaXMgdGhhdCBvZiBvbmUgd2hpY2ggaGFzIGJlZW4gcHJlY29tcGlsZWQgYW5kIGNhY2hlZC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjb21waWxlUGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1jb21waWxlUGF0aDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPmNvbXBpbGVQYXRoPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cGF0aEV4cHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPkNvbXBpbGVzIGFuIFhQYXRoLCByZXR1cm5pbmcgYSBTdHJpbmcgZXF1YWwgdG8gdGhhdCB3aGljaCB3YXMgcGFzc2VkLAotIGJ1dCB3aG9zZSBpZGVudGl0eSBpcyB0aGF0IG9mIG9uZSB3aGljaCBoYXMgYmVlbiBwcmVjb21waWxlZCBhbmQgY2FjaGVkOyAKLSB0YWtlcyBhbiBvcHRpb24gZm9yIHNwZWNpZnlpbmcgdGV4dCB0aGF0IGluZGljYXRlcyB0aGUgbmFtZSBvZiBjb250ZXh0IG5vZGUuCi0gVGhlIGRlZmF1bHQgaXMgInRoaXMiLCBhcyBpbiAiJHRoaXMiLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5vcHRpb25zPC9DT0RFPiAtIE9wdGlvbnMgZm9yIHRoZSBwYXRoLiBGb3IgZXhhbXBsZSwgeW91IGNhbiBjYWxsIAotIHRoZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRYcXVlcnlDdXJyZW50Tm9kZVZhcihqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+WG1sT3B0aW9ucy5zZXRYcXVlcnlDdXJyZW50Tm9kZVZhcihTdHJpbmcpPC9DT0RFPjwvQT4KLSBtZXRob2QgdG8gc3BlY2lmeSBhIHBhcnRpY3VsYXIgbmFtZSBmb3IgdGhlIGV4cHJlc3Npb24gCi0gdmFyaWFibGUgdGhhdCBpbmRpY2F0ZXMgdGhlIGNvbnRleHQgbm9kZS4KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iY29tcGlsZVF1ZXJ5KGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1jb21waWxlUXVlcnk8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5jb21waWxlUXVlcnk8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtxdWVyeUV4cHIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPkNvbXBpbGVzIGFuIFhRdWVyeSwgcmV0dXJuaW5nIGEgU3RyaW5nIGVxdWFsIHRvIHRoYXQgd2hpY2ggd2FzIHBhc3NlZCwKLSBidXQgd2hvc2UgaWRlbnRpdHkgaXMgdGhhdCBvZiBvbmUgd2hpY2ggaGFzIGJlZW4gcHJlY29tcGlsZWQgYW5kIGNhY2hlZC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjb21waWxlUXVlcnkoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotY29tcGlsZVF1ZXJ5PC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+Y29tcGlsZVF1ZXJ5PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cXVlcnlFeHByLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPkNvbXBpbGVzIGFuIFhRdWVyeSwgcmV0dXJuaW5nIGEgU3RyaW5nIGVxdWFsIHRvIHRoYXQgd2hpY2ggd2FzIHBhc3NlZCwKLSBidXQgd2hvc2UgaWRlbnRpdHkgaXMgdGhhdCBvZiBvbmUgd2hpY2ggaGFzIGJlZW4gcHJlY29tcGlsZWQgYW5kIGNhY2hlZDsKLSB0YWtlcyBhbiBvcHRpb24gZm9yIHNwZWNpZnlpbmcgdGV4dCB0aGF0IGluZGljYXRlcyB0aGUgY29udGV4dCBub2RlLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5vcHRpb25zPC9DT0RFPiAtIE9wdGlvbnMgZm9yIHRoZSBxdWVyeS4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gY2FsbCAKLSB0aGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0WHF1ZXJ5Q3VycmVudE5vZGVWYXIoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPlhtbE9wdGlvbnMuc2V0WHF1ZXJ5Q3VycmVudE5vZGVWYXIoU3RyaW5nKTwvQ09ERT48L0E+Ci0gbWV0aG9kIHRvIHNwZWNpZnkgYSBwYXJ0aWN1bGFyIG5hbWUgZm9yIHRoZSBleHByZXNzaW9uIAotIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIHRoZSBjb250ZXh0IG5vZGUuCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldENvbnRleHRUeXBlTG9hZGVyKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldENvbnRleHRUeXBlTG9hZGVyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sIj5TY2hlbWFUeXBlTG9hZGVyPC9BPiA8Qj5nZXRDb250ZXh0VHlwZUxvYWRlcjwvQj4oKTwvUFJFPgotPERMPgotPEREPkdldHMgdGhlIFNjaGVtYVR5cGVMb2FkZXIgYmFzZWQgb24gdGhlIGN1cnJlbnQgdGhyZWFkJ3MgY29udGV4dAotIENsYXNzTG9hZGVyLiBUaGlzIGlzIHRoZSBTY2hlbWFUeXBlTG9hZGVyIHRoYXQgaXMgdXNlZCB0byBhc3NpZ24KLSBzY2hlbWEgdHlwZXMgdG8gWE1MIGRvY3VtZW50cyBieSBkZWZhdWx0LiBUaGUgU2NoZW1hVHlwZUxvYWRlciBpcwotIGFsc28gY29uc3VsdGVkIHRvIHJlc29sdmUgd2lsZGNhcmRzIGFuZCB4c2k6dHlwZSBhdHRyaWJ1dGVzLgotIDxwPgotIFRoZSAicGFyc2UiIG1ldGhvZHMgb2YgWG1sQmVhbnMgYWxsIGRlbGVnYXRlIHRvIHRoZQotICJwYXJzZUluc3RhbmNlIiBtZXRob2RzIG9mIHRoZSBjb250ZXh0IHR5cGUgbG9hZGVyLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRCdWlsdGluVHlwZVN5c3RlbSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRCdWlsdGluVHlwZVN5c3RlbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVTeXN0ZW0uaHRtbCI+U2NoZW1hVHlwZVN5c3RlbTwvQT4gPEI+Z2V0QnVpbHRpblR5cGVTeXN0ZW08L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBidWlsdGluIHR5cGUgc3lzdGVtLiBUaGlzIFNjaGVtYVR5cGVTeXN0ZW0gY29udGFpbnMKLSBvbmx5IHRoZSA0NiBidWlsdGluIHR5cGVzIGRlZmluZWQgYnkgdGhlIFhNTCBTY2hlbWEgc3BlY2lmaWNhdGlvbi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibG9hZFhzZChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdFtdKSI+PCEtLSAtLT48L0E+PEgzPgotbG9hZFhzZDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+U2NoZW1hVHlwZUxvYWRlcjwvQT4gPEI+bG9hZFhzZDwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPltdJm5ic3A7c2NoZW1hcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBTY2hlbWFUeXBlU3lzdGVtIHRoYXQgcmVzdWx0cyBmcm9tIGNvbXBpbGluZyB0aGUgWE1MCi0gc2NoZW1hIGRlZmluaXRpb25zIHBhc3NlZC4KLSA8cD4KLSBKdXN0IGxpa2UgY29tcGlsZVR5cGVTeXN0ZW0sIGJ1dCB1c2VzIHRoZSBjb250ZXh0IHR5cGUgbG9hZGVyIGZvcgotIGxpbmtpbmcsIGFuZCByZXR1cm5zIGEgdW5pb25lZCB0eXBlbG9hZGVyIHRoYXQgaXMgc3VpdGFibGUgZm9yCi0gY3JlYXRpbmcgaW5zdGFuY2VzLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImxvYWRYc2Qob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3RbXSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbG9hZFhzZDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+U2NoZW1hVHlwZUxvYWRlcjwvQT4gPEI+bG9hZFhzZDwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPltdJm5ic3A7c2NoZW1hcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+PHA+UmV0dXJucyB0aGUgU2NoZW1hVHlwZVN5c3RlbSB0aGF0IHJlc3VsdHMgZnJvbSBjb21waWxpbmcgdGhlIFhNTAotIHNjaGVtYSBkZWZpbml0aW9ucyBwYXNzZWQgaW4gPGVtPnNjaGVtYXM8L2VtPi48L3A+Ci0gCi0gPHA+VGhpcyBpcyBqdXN0IGxpa2UgY29tcGlsZVR5cGVTeXN0ZW0sIGJ1dCB1c2VzIHRoZSBjb250ZXh0IHR5cGUgbG9hZGVyIGZvcgotIGxpbmtpbmcsIGFuZCByZXR1cm5zIGEgdW5pb25lZCB0eXBlbG9hZGVyIHRoYXQgaXMgc3VpdGFibGUgZm9yCi0gY3JlYXRpbmcgaW5zdGFuY2VzLjwvcD4KLSAKLSA8cD5Vc2UgdGhlIDxlbT5vcHRpb25zPC9lbT4gcGFyYW1ldGVyIHRvIHNwZWNpZnkgb25lIG9yIGJvdGggb2YgdGhlIGZvbGxvd2luZzo8L3A+Ci0gCi0gPHVsPgotIDxsaT5BIGNvbGxlY3Rpb24gaW5zdGFuY2UgdGhhdCBzaG91bGQgYmUgdXNlZCBhcyBhbiBlcnJvciBsaXN0ZW5lciBkdXJpbmcKLSBjb21waWxhdGlvbiwgYXMgZGVzY3JpYmVkIGluIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldEVycm9yTGlzdGVuZXIoamF2YS51dGlsLkNvbGxlY3Rpb24pIj48Q09ERT5YbWxPcHRpb25zLnNldEVycm9yTGlzdGVuZXIoamF2YS51dGlsLkNvbGxlY3Rpb24pPC9DT0RFPjwvQT4uPC9saT4KLSA8bGk+V2hldGhlciB2YWxpZGF0aW9uIHNob3VsZCBub3QgYmUgZG9uZSB3aGVuIGJ1aWxkaW5nIHRoZSBTY2hlbWFUeXBlU3lzdGVtLAotIGFzIGRlc2NyaWJlZCBpbiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRDb21waWxlTm9WYWxpZGF0aW9uKCkiPjxDT0RFPlhtbE9wdGlvbnMuc2V0Q29tcGlsZU5vVmFsaWRhdGlvbigpPC9DT0RFPjwvQT4uPC9saT4KLSA8L3VsPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5zY2hlbWFzPC9DT0RFPiAtIFRoZSBzY2hlbWEgZGVmaW5pdGlvbnMgZnJvbSB3aGljaCB0byBidWlsZCB0aGUgc2NoZW1hIHR5cGUgc3lzdGVtLjxERD48Q09ERT5vcHRpb25zPC9DT0RFPiAtIE9wdGlvbnMgc3BlY2lmeWluZyBhbiBlcnJvciBsaXN0ZW5lciBhbmQvb3IgdmFsaWRhdGlvbiBiZWhhdmlvci4KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iY29tcGlsZVhzZChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdFtdLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLWNvbXBpbGVYc2Q8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlU3lzdGVtLmh0bWwiPlNjaGVtYVR5cGVTeXN0ZW08L0E+IDxCPmNvbXBpbGVYc2Q8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT5bXSZuYnNwO3NjaGVtYXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+U2NoZW1hVHlwZUxvYWRlcjwvQT4mbmJzcDt0eXBlcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+PHA+UmV0dXJucyB0aGUgU2NoZW1hVHlwZVN5c3RlbSB0aGF0IHJlc3VsdHMgZnJvbSBjb21waWxpbmcgdGhlIFhNTAotIHNjaGVtYSBkZWZpbml0aW9ucyBwYXNzZWQuPC9wPgotIAotIDxwPlRoZSBYbWxPYmplY3RzIHBhc3NlZCBpbiBzaG91bGQgYmUgdzNjICZsdDtzY2hlbWEmZ3Q7IGVsZW1lbnRzIHdob3NlIHR5cGUKLSBpcyBvcmcudzNjLngyMDAxLnhtbFNjaGVtYS5TY2hlbWEuIChUaGF0IGlzLCBzY2hlbWEgZWxlbWVudHMgaW4KLSB0aGUgWE1MIG5hbWVzcGFjZSBodHRwOi8vd3d3LnczYy5vcmcvMjAwMS9YTUxTY2hlbWEuKSAgQWxzbwotIG9yZy53M2MueDIwMDEueG1sU2NoZW1hLlNjaGVtYURvY3VtZW50IGlzIHBlcm1pdHRlZC48L3A+Ci0gCi0gPHA+VGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBpcyBhIFNjaGVtYVR5cGVMb2FkZXIgd2hpY2ggd2lsbCBiZQotIGNvbnN1bHRlZCBmb3IgYWxyZWFkeS1jb21waWxlZCBzY2hlbWEgdHlwZXMgd2hpY2ggbWF5IGJlIGxpbmtlZAotIHdoaWxlIHByb2Nlc3NpbmcgdGhlIGdpdmVuIHNjaGVtYXMuPC9wPgotIAotIDxwPlRoZSBTY2hlbWFUeXBlU3lzdGVtIHRoYXQgaXMgcmV0dXJuZWQgc2hvdWxkIGJlIGNvbWJpbmVkCi0gKHZpYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwjdHlwZUxvYWRlclVuaW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlcltdKSI+PENPREU+dHlwZUxvYWRlclVuaW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlcltdKTwvQ09ERT48L0E+KSB3aXRoIHRoZSB0eXBlcGF0aCB0eXBlbG9hZGVyIGluIG9yZGVyCi0gdG8gY3JlYXRlIGEgdHlwZWxvYWRlciB0aGF0IGNhbiBiZSB1c2VkIGZvciBjcmVhdGluZyBhbmQgdmFsaWRhdGluZwotIGluc3RhbmNlcy48L3A+Ci0gCi0gPHA+VXNlIHRoZSA8ZW0+b3B0aW9uczwvZW0+IHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoZSBmb2xsb3dpbmc6PC9wPgotIAotIDx1bD4KLSA8bGk+QSBjb2xsZWN0aW9uIGluc3RhbmNlIHRoYXQgc2hvdWxkIGJlIHVzZWQgYXMgYW4gZXJyb3IgbGlzdGVuZXIgZHVyaW5nCi0gY29tcGlsYXRpb24sIGFzIGRlc2NyaWJlZCBpbiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRFcnJvckxpc3RlbmVyKGphdmEudXRpbC5Db2xsZWN0aW9uKSI+PENPREU+WG1sT3B0aW9ucy5zZXRFcnJvckxpc3RlbmVyKGphdmEudXRpbC5Db2xsZWN0aW9uKTwvQ09ERT48L0E+LjwvbGk+Ci0gPGxpPldoZXRoZXIgdmFsaWRhdGlvbiBzaG91bGQgbm90IGJlIGRvbmUgd2hlbiBidWlsZGluZyB0aGUgU2NoZW1hVHlwZVN5c3RlbSwKLSBhcyBkZXNjcmliZWQgaW4gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0Q29tcGlsZU5vVmFsaWRhdGlvbigpIj48Q09ERT5YbWxPcHRpb25zLnNldENvbXBpbGVOb1ZhbGlkYXRpb24oKTwvQ09ERT48L0E+LjwvbGk+Ci0gPC91bD4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+c2NoZW1hczwvQ09ERT4gLSBUaGUgc2NoZW1hIGRlZmluaXRpb25zIGZyb20gd2hpY2ggdG8gYnVpbGQgdGhlIHNjaGVtYSB0eXBlIHN5c3RlbS48REQ+PENPREU+dHlwZXBhdGg8L0NPREU+IC0gVGhlIHBhdGggdG8gYWxyZWFkeS1jb21waWxlZCBzY2hlbWEgdHlwZXMgZm9yIGxpbmtpbmcgd2hpbGUgcHJvY2Vzc2luZy48REQ+PENPREU+b3B0aW9uczwvQ09ERT4gLSBPcHRpb25zIHNwZWNpZnlpbmcgYW4gZXJyb3IgbGlzdGVuZXIgYW5kL29yIHZhbGlkYXRpb24gYmVoYXZpb3IuCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InR5cGVMb2FkZXJVbmlvbihvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXJbXSkiPjwhLS0gLS0+PC9BPjxIMz4KLXR5cGVMb2FkZXJVbmlvbjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+U2NoZW1hVHlwZUxvYWRlcjwvQT4gPEI+dHlwZUxvYWRlclVuaW9uPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+U2NoZW1hVHlwZUxvYWRlcjwvQT5bXSZuYnNwO3R5cGVMb2FkZXJzKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHVuaW9uIG9mIGEgbGlzdCBvZiB0eXBlTG9hZGVycy4gVGhlIHJldHVybmVkCi0gU2NoZW1hVHlwZUxvYWRlciBzZWFyY2hlcyB0aGUgZ2l2ZW4gbGlzdCBvZiBTY2hlbWFUeXBlTG9hZGVycwotIGluIG9yZGVyIGZyb20gZmlyc3QgdG8gbGFzdC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0idHlwZUxvYWRlckZvckNsYXNzTG9hZGVyKGphdmEubGFuZy5DbGFzc0xvYWRlcikiPjwhLS0gLS0+PC9BPjxIMz4KLXR5cGVMb2FkZXJGb3JDbGFzc0xvYWRlcjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+U2NoZW1hVHlwZUxvYWRlcjwvQT4gPEI+dHlwZUxvYWRlckZvckNsYXNzTG9hZGVyPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0NsYXNzTG9hZGVyLmh0bWwiPkNsYXNzTG9hZGVyPC9BPiZuYnNwO2xvYWRlcik8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgU2NoZW1hVHlwZUxvYWRlciB0aGF0IHNlYXJjaGVzIGZvciBjb21waWxlZCBzY2hlbWEgdHlwZXMKLSBpbiB0aGUgZ2l2ZW4gQ2xhc3NMb2FkZXIuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InR5cGVGb3JDbGFzcyhqYXZhLmxhbmcuQ2xhc3MpIj48IS0tIC0tPjwvQT48SDM+Ci10eXBlRm9yQ2xhc3M8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPnR5cGVGb3JDbGFzczwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9DbGFzcy5odG1sIj5DbGFzczwvQT4mbmJzcDtjKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIFNjaGVtYVR5cGUgZnJvbSBhIGNvcnJlc3BvbmRpbmcgWG1sT2JqZWN0IHN1YmNsYXNzLAotIG9yIG51bGwgaWYgbm9uZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbEJlYW5zLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5GYWN0b3J5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxYmVjMDkuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5GYWN0b3J5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NzMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1OSBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbEJvb2xlYW4uRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxCb29sZWFuLkZhY3RvcnksWG1sQm9vbGVhbi5GYWN0b3J5IGNsYXNzIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxCb29sZWFuLkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbEJvb2xlYW4uRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUNsYXNzIFhtbEJvb2xlYW4uRmFjdG9yeTwvSDI+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+amF2YS5sYW5nLk9iamVjdDwvQT4KLSAgfAotICArLS08Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJvb2xlYW4uRmFjdG9yeTwvQj4KLTwvUFJFPgotPERMPgotPERUPjxCPkVuY2xvc2luZyBjbGFzczo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj5YbWxCb29sZWFuPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgPEI+WG1sQm9vbGVhbi5GYWN0b3J5PC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0RMPgotCi08UD4KLUEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+PENPREU+WG1sQm9vbGVhbjwvQ09ERT48L0E+LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPlhtbEJvb2xlYW48L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2UoKSI+bmV3SW5zdGFuY2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj48Q09ERT5YbWxCb29sZWFuPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPlhtbEJvb2xlYW48L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5zdGFuY2U8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+PENPREU+WG1sQm9vbGVhbjwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj5YbWxCb29sZWFuPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sI25ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj5uZXdWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+PENPREU+WG1sQm9vbGVhbjwvQ09ERT48L0E+IHZhbHVlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj5YbWxCb29sZWFuPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+PENPREU+WG1sQm9vbGVhbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+WG1sQm9vbGVhbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPjxDT0RFPlhtbEJvb2xlYW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPlhtbEJvb2xlYW48L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+PENPREU+WG1sQm9vbGVhbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj5YbWxCb29sZWFuPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPjxDT0RFPlhtbEJvb2xlYW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+WG1sQm9vbGVhbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+PENPREU+WG1sQm9vbGVhbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPlhtbEJvb2xlYW48L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPjxDT0RFPlhtbEJvb2xlYW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj5YbWxCb29sZWFuPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+PENPREU+WG1sQm9vbGVhbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj5YbWxCb29sZWFuPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+PENPREU+WG1sQm9vbGVhbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj5YbWxCb29sZWFuPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPjxDT0RFPlhtbEJvb2xlYW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+WG1sQm9vbGVhbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj48Q09ERT5YbWxCb29sZWFuPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPlhtbEJvb2xlYW48L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPjxDT0RFPlhtbEJvb2xlYW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+WG1sQm9vbGVhbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+PENPREU+WG1sQm9vbGVhbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj5YbWxCb29sZWFuPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPjxDT0RFPlhtbEJvb2xlYW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+WG1sQm9vbGVhbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj48Q09ERT5YbWxCb29sZWFuPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNjbG9uZSgpIj5jbG9uZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj5lcXVhbHM8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2ZpbmFsaXplKCkiPmZpbmFsaXplPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNnZXRDbGFzcygpIj5nZXRDbGFzczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjaGFzaENvZGUoKSI+aGFzaENvZGU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeSgpIj5ub3RpZnk8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeUFsbCgpIj5ub3RpZnlBbGw8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KCkiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZykiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZywgaW50KSI+d2FpdDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+WG1sQm9vbGVhbjwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj48Q09ERT5YbWxCb29sZWFuPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPlhtbEJvb2xlYW48L0E+IDxCPm5ld0luc3RhbmNlPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPjxDT0RFPlhtbEJvb2xlYW48L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPlhtbEJvb2xlYW48L0E+IDxCPm5ld1ZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj48Q09ERT5YbWxCb29sZWFuPC9DT0RFPjwvQT4gdmFsdWUKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj5YbWxCb29sZWFuPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj48Q09ERT5YbWxCb29sZWFuPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0O3RydWUmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+WG1sQm9vbGVhbjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj48Q09ERT5YbWxCb29sZWFuPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0O3RydWUmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+WG1sQm9vbGVhbjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPjxDT0RFPlhtbEJvb2xlYW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+WG1sQm9vbGVhbjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+PENPREU+WG1sQm9vbGVhbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+WG1sQm9vbGVhbjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+PENPREU+WG1sQm9vbGVhbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPlhtbEJvb2xlYW48L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+PENPREU+WG1sQm9vbGVhbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+WG1sQm9vbGVhbjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPjxDT0RFPlhtbEJvb2xlYW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+WG1sQm9vbGVhbjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+PENPREU+WG1sQm9vbGVhbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPlhtbEJvb2xlYW48L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+PENPREU+WG1sQm9vbGVhbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+WG1sQm9vbGVhbjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPjxDT0RFPlhtbEJvb2xlYW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPlhtbEJvb2xlYW48L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj48Q09ERT5YbWxCb29sZWFuPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj5YbWxCb29sZWFuPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj48Q09ERT5YbWxCb29sZWFuPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+WG1sQm9vbGVhbjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj48Q09ERT5YbWxCb29sZWFuPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj5YbWxCb29sZWFuPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+PENPREU+WG1sQm9vbGVhbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbEJvb2xlYW4uRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZmQyZWUuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzkzICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTcgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxCb29sZWFuIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEJvb2xlYW4sWG1sQm9vbGVhbiBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbEJvb2xlYW4gKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sQm9vbGVhbi5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBYbWxCb29sZWFuPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlhtbEJvb2xlYW48L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9ETD4KLQotPFA+Ci1Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jYm9vbGVhbiI+eHM6Ym9vbGVhbjwvYT4gdHlwZS4KLSA8cD4KLSBOYXR1cmFsbHksIGNvbnZlcnRpYmxlIHRvIEphdmEgYm9vbGVhbi4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5OZXN0ZWQgQ2xhc3MgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2NsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5GYWN0b3J5Lmh0bWwiPlhtbEJvb2xlYW4uRmFjdG9yeTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPjxDT0RFPlhtbEJvb2xlYW48L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPlhtbE9iamVjdC5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sI3R5cGUiPnR5cGU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9ImZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPkZpZWxkcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNFUVVBTCI+RVFVQUw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0dSRUFURVJfVEhBTiI+R1JFQVRFUl9USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNMRVNTX1RIQU4iPkxFU1NfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTk9UX0VRVUFMIj5OT1RfRVFVQUw8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sI2Jvb2xlYW5WYWx1ZSgpIj5ib29sZWFuVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCNnZXRCb29sZWFuVmFsdWUoKSI+PENPREU+Z2V0Qm9vbGVhblZhbHVlKCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCNnZXRCb29sZWFuVmFsdWUoKSI+Z2V0Qm9vbGVhblZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgYm9vbGVhbjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sI3NldChib29sZWFuKSI+c2V0PC9BPjwvQj4oYm9vbGVhbiZuYnNwO3YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCNzZXRCb29sZWFuVmFsdWUoYm9vbGVhbikiPjxDT0RFPnNldEJvb2xlYW5WYWx1ZShib29sZWFuKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sI3NldEJvb2xlYW5WYWx1ZShib29sZWFuKSI+c2V0Qm9vbGVhblZhbHVlPC9BPjwvQj4oYm9vbGVhbiZuYnNwO3YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoaXMgdmFsdWUgYXMgYSBib29sZWFuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI2dldFN0cmluZ1ZhbHVlKCkiPmdldFN0cmluZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0KGphdmEubGFuZy5TdHJpbmcpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzdHJpbmdWYWx1ZSgpIj5zdHJpbmdWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY2hhbmdlVHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj5jaGFuZ2VUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVG8oamF2YS5sYW5nLk9iamVjdCkiPmNvbXBhcmVUbzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+Y29tcGFyZVZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb3B5KCkiPmNvcHk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc0ltbXV0YWJsZSgpIj5pc0ltbXV0YWJsZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNOaWwoKSI+aXNOaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NjaGVtYVR5cGUoKSI+c2NoZW1hVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldE5pbCgpIj5zZXROaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZSgpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlRXF1YWxzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+dmFsdWVFcXVhbHM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlSGFzaENvZGUoKSI+dmFsdWVIYXNoQ29kZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFRva2VuU291cmNlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNkb2N1bWVudFByb3BlcnRpZXMoKSI+ZG9jdW1lbnRQcm9wZXJ0aWVzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI21vbml0b3IoKSI+bW9uaXRvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdDdXJzb3IoKSI+bmV3Q3Vyc29yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUoKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0oKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKCkiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKCkiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dCgpIj54bWxUZXh0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+eG1sVGV4dDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9InR5cGUiPjwhLS0gLS0+PC9BPjxIMz4KLXR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPnR5cGU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImJvb2xlYW5WYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1ib29sZWFuVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmJvb2xlYW5WYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIGJ5IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sI2dldEJvb2xlYW5WYWx1ZSgpIj48Q09ERT5nZXRCb29sZWFuVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgYm9vbGVhbgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQoYm9vbGVhbikiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPihib29sZWFuJm5ic3A7dik8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCNzZXRCb29sZWFuVmFsdWUoYm9vbGVhbikiPjxDT0RFPnNldEJvb2xlYW5WYWx1ZShib29sZWFuKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgYm9vbGVhbgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRCb29sZWFuVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Qm9vbGVhblZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5nZXRCb29sZWFuVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSBib29sZWFuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEJvb2xlYW5WYWx1ZShib29sZWFuKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0Qm9vbGVhblZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRCb29sZWFuVmFsdWU8L0I+KGJvb2xlYW4mbmJzcDt2KTwvUFJFPgotPERMPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIGJvb2xlYW4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sQm9vbGVhbi5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTJiMDI4Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuRmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjczICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTkgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxCeXRlLkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQnl0ZS5GYWN0b3J5LFhtbEJ5dGUuRmFjdG9yeSBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sQnl0ZS5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbENhbGVuZGFyLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxCeXRlLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBYbWxCeXRlLkZhY3Rvcnk8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxCeXRlLkZhY3Rvcnk8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5FbmNsb3NpbmcgY2xhc3M6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+WG1sQnl0ZTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIDxCPlhtbEJ5dGUuRmFjdG9yeTwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9ETD4KLQotPFA+Ci1BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPjxDT0RFPlhtbEJ5dGU8L0NPREU+PC9BPi4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj5YbWxCeXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPm5ld0luc3RhbmNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+PENPREU+WG1sQnl0ZTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj5YbWxCeXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0luc3RhbmNlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPjxDT0RFPlhtbEJ5dGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+WG1sQnl0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+bmV3VmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPjxDT0RFPlhtbEJ5dGU8L0NPREU+PC9BPiB2YWx1ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+WG1sQnl0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPjxDT0RFPlhtbEJ5dGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPlhtbEJ5dGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Q09ERT5YbWxCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj5YbWxCeXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPjxDT0RFPlhtbEJ5dGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+WG1sQnl0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Q09ERT5YbWxCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPlhtbEJ5dGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPjxDT0RFPlhtbEJ5dGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj5YbWxCeXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Q09ERT5YbWxCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+WG1sQnl0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlcikiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPjxDT0RFPlhtbEJ5dGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+WG1sQnl0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPjxDT0RFPlhtbEJ5dGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+WG1sQnl0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Q09ERT5YbWxCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPlhtbEJ5dGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+PENPREU+WG1sQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj5YbWxCeXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Q09ERT5YbWxCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPlhtbEJ5dGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPjxDT0RFPlhtbEJ5dGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+WG1sQnl0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Q09ERT5YbWxCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPlhtbEJ5dGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+PENPREU+WG1sQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjY2xvbmUoKSI+Y2xvbmU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZ2V0Q2xhc3MoKSI+Z2V0Q2xhc3M8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPlhtbEJ5dGU8L0E+IDxCPm5ld0luc3RhbmNlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+PENPREU+WG1sQnl0ZTwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj5YbWxCeXRlPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Q09ERT5YbWxCeXRlPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj5YbWxCeXRlPC9BPiA8Qj5uZXdWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+PENPREU+WG1sQnl0ZTwvQ09ERT48L0E+IHZhbHVlCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+WG1sQnl0ZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzKQotICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+PENPREU+WG1sQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsxMjMmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+WG1sQnl0ZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Q09ERT5YbWxCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzEyMyZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj5YbWxCeXRlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpCi0gICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+PENPREU+WG1sQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj5YbWxCeXRlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Q09ERT5YbWxCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj5YbWxCeXRlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSkKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Q09ERT5YbWxCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+WG1sQnl0ZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Q09ERT5YbWxCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj5YbWxCeXRlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpCi0gICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+PENPREU+WG1sQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj5YbWxCeXRlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Q09ERT5YbWxCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+WG1sQnl0ZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cikKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Q09ERT5YbWxCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj5YbWxCeXRlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+PENPREU+WG1sQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+WG1sQnl0ZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSkKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPjxDT0RFPlhtbEJ5dGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPlhtbEJ5dGU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPjxDT0RFPlhtbEJ5dGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj5YbWxCeXRlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPjxDT0RFPlhtbEJ5dGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPlhtbEJ5dGU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Q09ERT5YbWxCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sQnl0ZS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU3YTIwZC4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ODMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NyBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbEJ5dGUgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQnl0ZSxYbWxCeXRlIGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sQnl0ZSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxCeXRlLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFhtbEJ5dGU8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPlhtbEludDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPlhtbExvbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPlhtbFNob3J0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlhtbEJ5dGU8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj5YbWxTaG9ydDwvQT48L0RMPgotCi08UD4KLUNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNieXRlIj54czpieXRlPC9hPiB0eXBlLgotIDxwPgotIE5hdHVyYWxseSwgY29udmVydGlibGUgdG8gSmF2YSBieXRlLgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCI+WG1sQnl0ZS5GYWN0b3J5PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+PENPREU+WG1sQnl0ZTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sU2hvcnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+WG1sU2hvcnQ8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5GYWN0b3J5Lmh0bWwiPlhtbFNob3J0LkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sSW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj5YbWxJbnQ8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuRmFjdG9yeS5odG1sIj5YbWxJbnQuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxMb25nIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+WG1sTG9uZzwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuRmFjdG9yeS5odG1sIj5YbWxMb25nLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sSW50ZWdlciI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sSW50ZWdlci5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERlY2ltYWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwiPlhtbERlY2ltYWwuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIj5YbWxPYmplY3QuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCN0eXBlIj50eXBlPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjRVFVQUwiPkVRVUFMPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNHUkVBVEVSX1RIQU4iPkdSRUFURVJfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTEVTU19USEFOIj5MRVNTX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI05PVF9FUVVBTCI+Tk9UX0VRVUFMPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ynl0ZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCNieXRlVmFsdWUoKSI+Ynl0ZVZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgYnkgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwjZ2V0Qnl0ZVZhbHVlKCkiPjxDT0RFPmdldEJ5dGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2J5dGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwjZ2V0Qnl0ZVZhbHVlKCkiPmdldEJ5dGVWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhpcyB2YWx1ZSBhcyBhIGJ5dGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCNzZXQoYnl0ZSkiPnNldDwvQT48L0I+KGJ5dGUmbmJzcDtzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgYnkgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwjc2V0Qnl0ZVZhbHVlKGJ5dGUpIj48Q09ERT5zZXRCeXRlVmFsdWUoYnl0ZSk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCNzZXRCeXRlVmFsdWUoYnl0ZSkiPnNldEJ5dGVWYWx1ZTwvQT48L0I+KGJ5dGUmbmJzcDtzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGlzIHZhbHVlIGFzIGEgYnl0ZTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxTaG9ydCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj5YbWxTaG9ydDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwjZ2V0U2hvcnRWYWx1ZSgpIj5nZXRTaG9ydFZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sI3NldChzaG9ydCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCNzZXRTaG9ydFZhbHVlKHNob3J0KSI+c2V0U2hvcnRWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCNzaG9ydFZhbHVlKCkiPnNob3J0VmFsdWU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxJbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPlhtbEludDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sI2dldEludFZhbHVlKCkiPmdldEludFZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCNpbnRWYWx1ZSgpIj5pbnRWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwjc2V0KGludCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwjc2V0SW50VmFsdWUoaW50KSI+c2V0SW50VmFsdWU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxMb25nIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+WG1sTG9uZzwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCNnZXRMb25nVmFsdWUoKSI+Z2V0TG9uZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwjbG9uZ1ZhbHVlKCkiPmxvbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sI3NldChsb25nKSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwjc2V0TG9uZ1ZhbHVlKGxvbmcpIj5zZXRMb25nVmFsdWU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxJbnRlZ2VyIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCNiaWdJbnRlZ2VyVmFsdWUoKSI+YmlnSW50ZWdlclZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwjZ2V0QmlnSW50ZWdlclZhbHVlKCkiPmdldEJpZ0ludGVnZXJWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI3NldChqYXZhLm1hdGguQmlnSW50ZWdlcikiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI3NldEJpZ0ludGVnZXJWYWx1ZShqYXZhLm1hdGguQmlnSW50ZWdlcikiPnNldEJpZ0ludGVnZXJWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERlY2ltYWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI2JpZ0RlY2ltYWxWYWx1ZSgpIj5iaWdEZWNpbWFsVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCNnZXRCaWdEZWNpbWFsVmFsdWUoKSI+Z2V0QmlnRGVjaW1hbFZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjc2V0KGphdmEubWF0aC5CaWdEZWNpbWFsKSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjc2V0QmlnRGVjaW1hbFZhbHVlKGphdmEubWF0aC5CaWdEZWNpbWFsKSI+c2V0QmlnRGVjaW1hbFZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjZ2V0U3RyaW5nVmFsdWUoKSI+Z2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXQoamF2YS5sYW5nLlN0cmluZykiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj5zZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3N0cmluZ1ZhbHVlKCkiPnN0cmluZ1ZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjaGFuZ2VUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPmNoYW5nZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KSI+Y29tcGFyZVRvPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5jb21wYXJlVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvcHkoKSI+Y29weTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzSW1tdXRhYmxlKCkiPmlzSW1tdXRhYmxlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc05pbCgpIj5pc05pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2NoZW1hVHlwZSgpIj5zY2hlbWFUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0TmlsKCkiPnNldE5pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKCkiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVFcXVhbHMob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj52YWx1ZUVxdWFsczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVIYXNoQ29kZSgpIj52YWx1ZUhhc2hDb2RlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVG9rZW5Tb3VyY2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI2RvY3VtZW50UHJvcGVydGllcygpIj5kb2N1bWVudFByb3BlcnRpZXM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbW9uaXRvcigpIj5tb25pdG9yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0N1cnNvcigpIj5uZXdDdXJzb3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZSgpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbSgpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIoKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0oKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0pIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KCkiPnhtbFRleHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj54bWxUZXh0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0idHlwZSI+PCEtLSAtLT48L0E+PEgzPgotdHlwZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+dHlwZTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iYnl0ZVZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWJ5dGVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGJ5dGUgPEI+Ynl0ZVZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgYnkgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwjZ2V0Qnl0ZVZhbHVlKCkiPjxDT0RFPmdldEJ5dGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSBieXRlCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldChieXRlKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXQ8L0I+KGJ5dGUmbmJzcDtzKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIGJ5IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sI3NldEJ5dGVWYWx1ZShieXRlKSI+PENPREU+c2V0Qnl0ZVZhbHVlKGJ5dGUpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSBieXRlCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEJ5dGVWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRCeXRlVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBieXRlIDxCPmdldEJ5dGVWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIGJ5dGUKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0Qnl0ZVZhbHVlKGJ5dGUpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRCeXRlVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldEJ5dGVWYWx1ZTwvQj4oYnl0ZSZuYnNwO3MpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgYnl0ZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxCeXRlLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbENhbGVuZGFyLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWQ3YjZiLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbENhbGVuZGFyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MTcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0NzowMCBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbENhbGVuZGFyIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbENhbGVuZGFyLFhtbENhbGVuZGFyIGNsYXNzIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxDYWxlbmRhciAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxDYWxlbmRhci5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sQ2FsZW5kYXI8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj5qYXZhLnV0aWwuQ2FsZW5kYXI8L0E+Ci0gICAgICAgIHwKLSAgICAgICAgKy0tPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9HcmVnb3JpYW5DYWxlbmRhci5odG1sIj5qYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXI8L0E+Ci0gICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxDYWxlbmRhcjwvQj4KLTwvUFJFPgotPERMPgotPERUPjxCPkFsbCBJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvQ2xvbmVhYmxlLmh0bWwiPkNsb25lYWJsZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIj5TZXJpYWxpemFibGU8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGNsYXNzIDxCPlhtbENhbGVuZGFyPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvR3JlZ29yaWFuQ2FsZW5kYXIuaHRtbCI+R3JlZ29yaWFuQ2FsZW5kYXI8L0E+PC9ETD4KLQotPFA+Ci1BbiBYTUwgU2NoZW1hIGNvbXBhdGlibGUgc3ViY2xhc3Mgb2YgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9HcmVnb3JpYW5DYWxlbmRhci5odG1sIj48Q09ERT5HcmVnb3JpYW5DYWxlbmRhcjwvQ09ERT48L0E+LgotIFhtbENhbGVuZGFyIG1vZGlmaWVzIHNldmVyYWwga2V5IGRldGFpbHMgaW4gdGhlIGJlaGF2aW9yIG9mCi0gR3JlZ29yaWFuQ2FsZW5kYXIgdG8gbWFrZSBpdCBtb3JlIHVzZWZ1bCB3aGVuIGRlYWxpbmcgd2l0aCBYTUwgZGF0ZXMuCi0gPHA+Ci0gSXQgaXMgZWFzeSB0byBjb252ZXJ0IGJldHdlZW4gWG1sQ2FsZW5kYXIgYW5kIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+PENPREU+R0RhdGU8L0NPREU+PC9BPiwgb3IgdG8KLSBwYXJzZSBvciBlbWl0IGFuIFhtbENhbGVuZGFyIHVzaW5nIGEgc3RhbmRhcmQgWE1MIFNjaGVtYQotIGxleGljYWwgcmVwcmVzZW50YXRpb24uCi0gPG9sPgotIDxsaT4KLSBUbyBtYXRjaCBYTUwgU2NoZW1hIGRhdGVzLCB0aGlzIFhtbENhbGVuZGFyIGlzIGEgZnVsbHkgcHJvbGVwdGljCi0gR3JlZ29yaWFuIGNhbGVuZGFyIGJ5IGRlZmF1bHQsIHdoaWNoIG1lYW5zIHRoYXQgR3JlZ29yaWFuIGNhbGVuZGFyCi0gcnVsZXMgYXJlIGFwcGxpZWQgYmFja3dhcmRzIGluIHRpbWUgYXMgaWYgdGhleSBoYWQgYWx3YXlzIGJlZW4gaW4KLSBlZmZlY3QsIGFjdHVhbCBoaXN0b3JpY2FsIGNpcmN1bXN0YW5jZXMgY29uY2VybmluZyB0aGUgb2JzZXJ2YW5jZQotIG9mIHRoZSAxNTgyIGRlY3JlZSBvZiBQb3BlIEdyZWdvcnkgWElJSSBub3R3aXRoc3RhbmRpbmcuCi0gPC9saT4KLSA8bGk+Ci0gSW4gb3JkZXIgdG8gYmV0dGVyIHN1cHBvcnQgcGFydGlhbGx5LXNwZWNpZmllZCBkYXRlcyBmb3IgWE1MIFNjaGVtYSwKLSB0aGlzIGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIGEgc3RhYmxlIGdldChmaWVsZCkgbWV0aG9kCi0gdGhhdCBkb2VzIG5vdCBtb2RpZnkgdGhlIGluc3RhbmNlIGlmIHlvdSBhcmUgYWNlc3NpbmcgYSBmaWVsZCByaWdodAotIGFmdGVyIGl0IHdhcyBleHBsaWNpdGx5IHNldDogYSBzZXQgZm9sbG93ZWQgYnkgYSBnZXQgd2lsbCBhbHdheXMKLSByZXR1cm4gdGhlIHNhbWUgdGhpbmcgYW5kIHdpbGwgbm90IGZpbGwgaW4gYW55IG90aGVyIGZpZWxkcy4gSG93ZXZlciwKLSBpZiB5b3UgZ2V0IGEgZmllbGQgdGhhdCB3YXMgbm90IGV4cGxpY2l0bHkgc2V0LCB0aGVuIGFsbCB0aGUgZmllbGRzCi0gYXJlIHN0aWxsIGF1dG9tYXRpY2FsbHkgZmlsbGVkIGFuZCBub3JtYWxpemVkIGZvciB5b3UsIGp1c3QgbGlrZSBhCi0gcmVndWxhciBHcmVnb3JpYW5DYWxlbmRhci4gSWYgeW91IHdpc2ggdG8gZm9yY2UgdGhlIGNvbXBsZXRpb24gYW5kCi0gZGVmYXVsdGluZyBvZiBhbGwgdGhlIGZpZWxkcyAod2l0aG91dCBodW50aW5nIHRvIGdldCBvbmUgdGhhdCBoYXBwZW5zCi0gdG8gYmUgdW5zZXQpLCB5b3UgY2FuIGFsd2F5cyBkbyBzbyBieSBjYWxsaW5nIGdldFRpbWUoKS4KLSA8L2xpPgotIDxsaT4KLSBXaGVuIGEgeWVhciBpcyB1bnNwZWNpZmllZCBhbmQgbmVlZHMgdG8gYmUgZmlsbGVkIGluIGF1dG9tYXRpY2FsbHkKLSAoZm9yIGV4YW1wbGUgd2hlbiB1c2luZyBhIC5nZXQgb3IgLmdldFRpbWUgbWV0aG9kIGFzIGRpc2N1c3NlZCBhYm92ZSksCi0gdGhlIHllYXIgaXMgZGVmYXVsdGVkIHRvIHllYXIgMCAoYWxzbyBrbm93biBhcyAxIEJDKS4gIFRoaXMgaXMgZGlmZmVyZW50Ci0gZnJvbSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0dyZWdvcmlhbkNhbGVuZGFyLmh0bWwiPjxDT0RFPkdyZWdvcmlhbkNhbGVuZGFyPC9DT0RFPjwvQT4sIHdoaWNoIGNob29zZXMgMTk3MC4gVGhlIHJlYXNvbiAwIGlzIHByZWZlcmFibGUKLSBpcyB0aGF0IGl0IGlzIGEgbGVhcCB5ZWFyIGFuZCBzbyBpdCBwZXJtaXRzIHRoZSBkYXRlIC0tMi0yOSB0byBiZSBzcGVjaWZpZWQKLSBzdGFibHkuIEEgZGlmZmVyZW50IGRlZmF1bHQgeWVhciBjYW4gYmUgY2hvc2VuIHZpYSB0aGUgc3RhdGljIG1ldGhvZAotIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ2FsZW5kYXIuaHRtbCNzZXREZWZhdWx0WWVhcihpbnQpIj48Q09ERT5YbWxDYWxlbmRhci5zZXREZWZhdWx0WWVhcigpPC9DT0RFPjwvQT4sIG9yIGJ5IHNldHRpbmcgdGhlIAotIHN5c3RlbSBwcm9wZXJ0eSAidXNlci5kZWZhdWx0eWVhciIuIElmIHlvdSBkbyBjaGFuZ2UgdGhpcyB2YWx1ZSwgeW91IHNob3VsZCAKLSBwaWNrIGFub3RoZXIgbGVhcCB5ZWFyIHN1Y2ggYXMgMjAwMCBhbmQgYXZvaWQgbm9uLWxlYXAgeWVhcnMgc3VjaCBhcyAxOTAwLgotIDwvbGk+Ci0gPGxpPgotIFdoZW4gY29uc3RydWN0aW5nIGFuIFhtbENhbGVuZGFyIGZyb20gYW4gWE1MIFNjaGVtYQotIGZvcm1hdHRlZCBkYXRlIG9yIHRpbWUgc3RyaW5nIG9yIEdEYXRlIG9iamVjdCwgdGhlIHRpbWV6b25lCi0gZm9yIHRoZSBjYWxlbmRhciBpcyB0YWtlbiBmcm9tIHRoZSBzdHJpbmcgaWYgaXQgaXMgcHJlc2VudCwgb3IKLSB0YWtlbiB0byBiZSA8Q09ERT5UaW1lWm9uZS5nZXREZWZhdWx0KCk8L0NPREU+IGlmIG5vdC4KLSA8cD4KLSAgICAgRm9yIGV4YW1wbGUsIHRoZSBYTUwgdGltZXpvbmUgIloiIGlzIHRyYW5zbGF0ZWQgdG8gIkdNVCI7Ci0gICAgIHRoZSBYTUwgdGltZXpvbmUgIiswNTowMCIgaXMgdHJhbnNsYXRlZCB0byAiR01UKzA1OjAwIi4KLSA8L3A+Ci0gPC9saT4KLSA8bGk+Ci0gRmluYWxseSwgdGhpcyBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBhIFN0cmluZyBjb25zdHJ1Y3RvciBhbmQgYQotIHRvU3RyaW5nKCkgbWV0aG9kIHRoYXQgY29tcGx5IHdpdGggdGhlIFhNTCBTY2hlbWEgY29udmVudGlvbnMKLSBmb3IgZm9ybWF0dGluZyBhIGRhdGUuIElmIG9ubHkgYSBzdWJzZXQgb2YgZmllbGRzIGhhdmUgYmVlbgotIGV4cGxpY2l0bHkgc2V0LCB0b1N0cmluZygpIHByb2R1Y2VzIGEgc3RyaW5nIHdpdGggdGhlIHByb3BlciBzdWJzZXQKLSBvZiBpbmZvcm1hdGlvbi4KLSA8L2xpPgotIDwvb2w+Ci08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9zZXJpYWxpemVkLWZvcm0uaHRtbCIgVEFSR0VUPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbENhbGVuZGFyIj5TZXJpYWxpemVkIEZvcm08L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS51dGlsLkdyZWdvcmlhbkNhbGVuZGFyIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+RmllbGRzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEudXRpbC48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0dyZWdvcmlhbkNhbGVuZGFyLmh0bWwiPkdyZWdvcmlhbkNhbGVuZGFyPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvR3JlZ29yaWFuQ2FsZW5kYXIuaHRtbCNBRCI+QUQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0dyZWdvcmlhbkNhbGVuZGFyLmh0bWwjQkMiPkJDPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS51dGlsLkNhbGVuZGFyIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+RmllbGRzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEudXRpbC48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNBTSI+QU08L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjQU1fUE0iPkFNX1BNPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sI0FQUklMIj5BUFJJTDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNhcmVGaWVsZHNTZXQiPmFyZUZpZWxkc1NldDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNBVUdVU1QiPkFVR1VTVDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNEQVRFIj5EQVRFPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sI0RBWV9PRl9NT05USCI+REFZX09GX01PTlRIPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sI0RBWV9PRl9XRUVLIj5EQVlfT0ZfV0VFSzwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNEQVlfT0ZfV0VFS19JTl9NT05USCI+REFZX09GX1dFRUtfSU5fTU9OVEg8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjREFZX09GX1lFQVIiPkRBWV9PRl9ZRUFSPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sI0RFQ0VNQkVSIj5ERUNFTUJFUjwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNEU1RfT0ZGU0VUIj5EU1RfT0ZGU0VUPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sI0VSQSI+RVJBPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sI0ZFQlJVQVJZIj5GRUJSVUFSWTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNGSUVMRF9DT1VOVCI+RklFTERfQ09VTlQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjZmllbGRzIj5maWVsZHM8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjRlJJREFZIj5GUklEQVk8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjSE9VUiI+SE9VUjwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNIT1VSX09GX0RBWSI+SE9VUl9PRl9EQVk8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjaXNTZXQiPmlzU2V0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sI2lzVGltZVNldCI+aXNUaW1lU2V0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sI0pBTlVBUlkiPkpBTlVBUlk8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjSlVMWSI+SlVMWTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNKVU5FIj5KVU5FPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sI01BUkNIIj5NQVJDSDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNNQVkiPk1BWTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNNSUxMSVNFQ09ORCI+TUlMTElTRUNPTkQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjTUlOVVRFIj5NSU5VVEU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjTU9OREFZIj5NT05EQVk8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjTU9OVEgiPk1PTlRIPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sI05PVkVNQkVSIj5OT1ZFTUJFUjwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNPQ1RPQkVSIj5PQ1RPQkVSPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sI1BNIj5QTTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNTQVRVUkRBWSI+U0FUVVJEQVk8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjU0VDT05EIj5TRUNPTkQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjU0VQVEVNQkVSIj5TRVBURU1CRVI8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjU1VOREFZIj5TVU5EQVk8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjVEhVUlNEQVkiPlRIVVJTREFZPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sI3RpbWUiPnRpbWU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjVFVFU0RBWSI+VFVFU0RBWTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNVTkRFQ0lNQkVSIj5VTkRFQ0lNQkVSPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sI1dFRE5FU0RBWSI+V0VETkVTREFZPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sI1dFRUtfT0ZfTU9OVEgiPldFRUtfT0ZfTU9OVEg8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjV0VFS19PRl9ZRUFSIj5XRUVLX09GX1lFQVI8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjWUVBUiI+WUVBUjwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNaT05FX09GRlNFVCI+Wk9ORV9PRkZTRVQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sI1htbENhbGVuZGFyKCkiPlhtbENhbGVuZGFyPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29uc3RydWN0cyBhbiBlbXB0eSBpbnN0YW5jZSB3aXRoIG5vIGZpZWxkcyBzZXQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbENhbGVuZGFyLmh0bWwjWG1sQ2FsZW5kYXIoamF2YS51dGlsLkRhdGUpIj5YbWxDYWxlbmRhcjwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvRGF0ZS5odG1sIj5EYXRlPC9BPiZuYnNwO2RhdGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb25zdHJ1Y3RzIGFuIFhtbENhbGVuZGFyIGZyb20gYSBEYXRlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sI1htbENhbGVuZGFyKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+WG1sQ2FsZW5kYXI8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+Jm5ic3A7ZGF0ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdHMgYW4gWG1sQ2FsZW5kYXIgZnJvbSBhIEdEYXRlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sI1htbENhbGVuZGFyKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGphdmEubWF0aC5CaWdEZWNpbWFsKSI+WG1sQ2FsZW5kYXI8L0E+PC9CPihpbnQmbmJzcDt5ZWFyLAotICAgICAgICAgICAgaW50Jm5ic3A7bW9udGgsCi0gICAgICAgICAgICBpbnQmbmJzcDtkYXksCi0gICAgICAgICAgICBpbnQmbmJzcDtob3VyLAotICAgICAgICAgICAgaW50Jm5ic3A7bWludXRlLAotICAgICAgICAgICAgaW50Jm5ic3A7c2Vjb25kLAotICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiPkJpZ0RlY2ltYWw8L0E+Jm5ic3A7ZnJhY3Rpb24pPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb25zdHJ1Y3RzIGFuIFhtbENhbGVuZGFyIHdpdGggdGhlIHNwZWNpZmllZCB5ZWFyLCBtb250aCwgZGF5LAotIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBhbmQgb3B0aW9uYWwgZnJhY3Rpb25hbCBzZWNvbmRzLCBpbgotIHRoZSBkZWZhdWx0IHRpbWV6b25lLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sI1htbENhbGVuZGFyKGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGphdmEubWF0aC5CaWdEZWNpbWFsLCBpbnQsIGludCwgaW50KSI+WG1sQ2FsZW5kYXI8L0E+PC9CPihpbnQmbmJzcDt5ZWFyLAotICAgICAgICAgICAgaW50Jm5ic3A7bW9udGgsCi0gICAgICAgICAgICBpbnQmbmJzcDtkYXksCi0gICAgICAgICAgICBpbnQmbmJzcDtob3VyLAotICAgICAgICAgICAgaW50Jm5ic3A7bWludXRlLAotICAgICAgICAgICAgaW50Jm5ic3A7c2Vjb25kLAotICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiPkJpZ0RlY2ltYWw8L0E+Jm5ic3A7ZnJhY3Rpb24sCi0gICAgICAgICAgICBpbnQmbmJzcDt0elNpZ24sCi0gICAgICAgICAgICBpbnQmbmJzcDt0ekhvdXIsCi0gICAgICAgICAgICBpbnQmbmJzcDt0ek1pbnV0ZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdHMgYW4gWG1sQ2FsZW5kYXIgd2l0aCB0aGUgc3BlY2lmaWVkIHllYXIsIG1vbnRoLCBkYXksCi0gaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFuZCBvcHRpb25hbCBmcmFjdGlvbmFsIHNlY29uZHMsIGluCi0gdGhlIHNwZWNpZmllZCB0aW1lem9uZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ2FsZW5kYXIuaHRtbCNYbWxDYWxlbmRhcihqYXZhLmxhbmcuU3RyaW5nKSI+WG1sQ2FsZW5kYXI8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7eG1sU2NoZW1hRGF0ZVN0cmluZyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdHMgYW4gWG1sQ2FsZW5kYXIgZm9yIGEgc3RhbmRhcmQgWE1MCi0gc2NoZW1hIGZvcm1hdHRlZCBkYXRlIHN0cmluZy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5wcm90ZWN0ZWQgJm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbENhbGVuZGFyLmh0bWwjY29tcHV0ZVRpbWUoKSI+Y29tcHV0ZVRpbWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtPdmVycmlkZXMgR3JlZ29yaWFuQ2FsZW5kYXIuY29tcHV0ZVRpbWUgdG8gYXBwbHkgYSBkaWZmZXJlbnQKLSBkZWZhdWx0IHllYXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbENhbGVuZGFyLmh0bWwjZ2V0KGludCkiPmdldDwvQT48L0I+KGludCZuYnNwO2ZpZWxkKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7R2V0cyB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4gdGltZSBmaWVsZC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ2FsZW5kYXIuaHRtbCNnZXREZWZhdWx0WWVhcigpIj5nZXREZWZhdWx0WWVhcjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGRlZmF1bHQgeWVhciB0aGF0IGlzIHVzZWQgd2hlbiBubyB5ZWFyIGlzIHNwZWNpZmllZC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbENhbGVuZGFyLmh0bWwjc2V0RGVmYXVsdFllYXIoaW50KSI+c2V0RGVmYXVsdFllYXI8L0E+PC9CPihpbnQmbmJzcDt5ZWFyKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgZGVmYXVsdCB5ZWFyIHRvIGJlIHVzZWQgd2hlbiBubyB5ZWFyIGlzIHNwZWNpZmllZC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbENhbGVuZGFyLmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQcmludHMgdGhlIFhtbENhbGVuZGFyIHVzaW5nIGEgc3RhbmRhcmQgWE1MIFNjaGVtYQotIGZvcm1hdCwgYXMgZGVzY3JpYmVkIGluIFhtbENhbGVuZGFyKFN0cmluZyBzKS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEudXRpbC5HcmVnb3JpYW5DYWxlbmRhciI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS51dGlsLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvR3JlZ29yaWFuQ2FsZW5kYXIuaHRtbCI+R3JlZ29yaWFuQ2FsZW5kYXI8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9HcmVnb3JpYW5DYWxlbmRhci5odG1sI2FkZChpbnQsIGludCkiPmFkZDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvR3JlZ29yaWFuQ2FsZW5kYXIuaHRtbCNjb21wdXRlRmllbGRzKCkiPmNvbXB1dGVGaWVsZHM8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0dyZWdvcmlhbkNhbGVuZGFyLmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj5lcXVhbHM8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0dyZWdvcmlhbkNhbGVuZGFyLmh0bWwjZ2V0QWN0dWFsTWF4aW11bShpbnQpIj5nZXRBY3R1YWxNYXhpbXVtPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9HcmVnb3JpYW5DYWxlbmRhci5odG1sI2dldEFjdHVhbE1pbmltdW0oaW50KSI+Z2V0QWN0dWFsTWluaW11bTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvR3JlZ29yaWFuQ2FsZW5kYXIuaHRtbCNnZXRHcmVhdGVzdE1pbmltdW0oaW50KSI+Z2V0R3JlYXRlc3RNaW5pbXVtPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9HcmVnb3JpYW5DYWxlbmRhci5odG1sI2dldEdyZWdvcmlhbkNoYW5nZSgpIj5nZXRHcmVnb3JpYW5DaGFuZ2U8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0dyZWdvcmlhbkNhbGVuZGFyLmh0bWwjZ2V0TGVhc3RNYXhpbXVtKGludCkiPmdldExlYXN0TWF4aW11bTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvR3JlZ29yaWFuQ2FsZW5kYXIuaHRtbCNnZXRNYXhpbXVtKGludCkiPmdldE1heGltdW08L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0dyZWdvcmlhbkNhbGVuZGFyLmh0bWwjZ2V0TWluaW11bShpbnQpIj5nZXRNaW5pbXVtPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9HcmVnb3JpYW5DYWxlbmRhci5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9HcmVnb3JpYW5DYWxlbmRhci5odG1sI2lzTGVhcFllYXIoaW50KSI+aXNMZWFwWWVhcjwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvR3JlZ29yaWFuQ2FsZW5kYXIuaHRtbCNyb2xsKGludCwgYm9vbGVhbikiPnJvbGw8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0dyZWdvcmlhbkNhbGVuZGFyLmh0bWwjcm9sbChpbnQsIGludCkiPnJvbGw8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0dyZWdvcmlhbkNhbGVuZGFyLmh0bWwjc2V0R3JlZ29yaWFuQ2hhbmdlKGphdmEudXRpbC5EYXRlKSI+c2V0R3JlZ29yaWFuQ2hhbmdlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEudXRpbC5DYWxlbmRhciI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS51dGlsLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sI2FmdGVyKGphdmEubGFuZy5PYmplY3QpIj5hZnRlcjwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNiZWZvcmUoamF2YS5sYW5nLk9iamVjdCkiPmJlZm9yZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNjbGVhcigpIj5jbGVhcjwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNjbGVhcihpbnQpIj5jbGVhcjwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNjbG9uZSgpIj5jbG9uZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNjb21wbGV0ZSgpIj5jb21wbGV0ZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNnZXRBdmFpbGFibGVMb2NhbGVzKCkiPmdldEF2YWlsYWJsZUxvY2FsZXM8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjZ2V0Rmlyc3REYXlPZldlZWsoKSI+Z2V0Rmlyc3REYXlPZldlZWs8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjZ2V0SW5zdGFuY2UoKSI+Z2V0SW5zdGFuY2U8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjZ2V0SW5zdGFuY2UoamF2YS51dGlsLkxvY2FsZSkiPmdldEluc3RhbmNlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sI2dldEluc3RhbmNlKGphdmEudXRpbC5UaW1lWm9uZSkiPmdldEluc3RhbmNlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sI2dldEluc3RhbmNlKGphdmEudXRpbC5UaW1lWm9uZSwgamF2YS51dGlsLkxvY2FsZSkiPmdldEluc3RhbmNlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sI2dldE1pbmltYWxEYXlzSW5GaXJzdFdlZWsoKSI+Z2V0TWluaW1hbERheXNJbkZpcnN0V2VlazwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNnZXRUaW1lKCkiPmdldFRpbWU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjZ2V0VGltZUluTWlsbGlzKCkiPmdldFRpbWVJbk1pbGxpczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNnZXRUaW1lWm9uZSgpIj5nZXRUaW1lWm9uZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNpbnRlcm5hbEdldChpbnQpIj5pbnRlcm5hbEdldDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNpc0xlbmllbnQoKSI+aXNMZW5pZW50PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sI2lzU2V0KGludCkiPmlzU2V0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sI3NldChpbnQsIGludCkiPnNldDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNzZXQoaW50LCBpbnQsIGludCkiPnNldDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNzZXQoaW50LCBpbnQsIGludCwgaW50LCBpbnQpIj5zZXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjc2V0KGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQpIj5zZXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjc2V0Rmlyc3REYXlPZldlZWsoaW50KSI+c2V0Rmlyc3REYXlPZldlZWs8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjc2V0TGVuaWVudChib29sZWFuKSI+c2V0TGVuaWVudDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCNzZXRNaW5pbWFsRGF5c0luRmlyc3RXZWVrKGludCkiPnNldE1pbmltYWxEYXlzSW5GaXJzdFdlZWs8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjc2V0VGltZShqYXZhLnV0aWwuRGF0ZSkiPnNldFRpbWU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjc2V0VGltZUluTWlsbGlzKGxvbmcpIj5zZXRUaW1lSW5NaWxsaXM8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjc2V0VGltZVpvbmUoamF2YS51dGlsLlRpbWVab25lKSI+c2V0VGltZVpvbmU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2ZpbmFsaXplKCkiPmZpbmFsaXplPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNnZXRDbGFzcygpIj5nZXRDbGFzczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iWG1sQ2FsZW5kYXIoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLVhtbENhbGVuZGFyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+WG1sQ2FsZW5kYXI8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDt4bWxTY2hlbWFEYXRlU3RyaW5nKTwvUFJFPgotPERMPgotPEREPkNvbnN0cnVjdHMgYW4gWG1sQ2FsZW5kYXIgZm9yIGEgc3RhbmRhcmQgWE1MCi0gc2NoZW1hIGZvcm1hdHRlZCBkYXRlIHN0cmluZy4KLSAKLSBUaGUgcGFyc2VyIGFjY2VwdHMgYW55IG9mIHRoZSBmb2xsb3dpbmcgZm9ybWF0czoKLSAKLSBZWVlZLU1NLUREVGhoOm1tOnNzICAgICAgICAgIC0gZGF0ZVRpbWUKLSBZWVlZLU1NLUREICAgICAgICAgICAgICAgICAgIC0gZGF0ZQotICAgICAgICAgICAgaGg6bW06c3MgICAgICAgICAgLSB0aW1lCi0gWVlZWSAgICAgICAgICAgICAgICAgICAgICAgICAtIGdZZWFyCi0gICAgLS1NTSAgICAgICAgICAgICAgICAgICAgICAtIGdNb250aAotICAgICAgLS0tREQgICAgICAgICAgICAgICAgICAgLSBnRGF5Ci0gCi0gVGhlIHBhcnNlciBhY3R1YWxseSBhY2NlcHRzIGFsbCAxNiBjb21iaW5hdGlvbnMgb2Ygc3Vic2V0cyBvZgotIGZpZWxkcyAoWSwgTSwgRCwgVCkgdXNpbmcgdGhlIHNhbWUgc2NoZW1lLCBldmVuIGZvciBjb21iaW5hdGlvbnMKLSB0aGF0IGFyZSBub3QgZGVmaW5lZCBhcyB0eXBlcyBpbiB0aGUgc2NoZW1hIHNwZWMsIHN1Y2ggYXMKLSB5ZWFyLCBkYXksIGFuZCB0aW1lOgotIAotIFlZWVktLUREVGhoOm1tOnNzICAgICAgICAgICAgLSBbZXZlcnl0aGluZyBidXQgbW9udGggc3BlY2lmaWVkXQotIAotIEluIHRoZSBzdHJpbmcsIGVhY2ggZmllbGQgbXVzdCBiZSBwYWRkZWQgdG8gaXRzIGZ1bGwgd2lkdGgsIGZvcgotIGV4YW1wbGUsIEphbnVhcnkgbXVzdCBiZSAtLTAxLCBub3QganVzdCAtLTEuCi0gCi0gSW4gcGFydGljdWxhciwgYSB5ZWFyIG11c3QgYmUgcGFkZGVkIHRvIGF0IGxlYXN0IGZvdXIgZGlnaXRzLCBzbwotICI5OCIgaXMgbm90IGEgdmFsaWQgeWVhciwgYWx0aG91Z2ggIjE5OTgiIGFuZCAiMDA5OCIgYXJlIGJvdGggdmFsaWQKLSB5ZWFycywgdW5hbWJpZ3VvdXNseSAxOSBjZW50dXJpZXMgc2VwYXJhdGVkIGZyb20gZWFjaCBvdGhlci4gIEEgeWVhcgotIG1heSBhbHNvIGJlIHByZWNlZGVkIGJ5IGEgbWludXMgc3ltYm9sOiAwMDAwIGlzIDEgQkMgYW5kIC0wMDAxIGlzCi0gMiBCQy4KLQotIEZpbmFsbHkgYSB0aW1lem9uZSBpcyBhbHdheXMgYWxsb3dlZCAoeWV0IG9wdGlvbmFsKSBhdCB0aGUgZW5kLgotIFRpbWV6b25lcyBtdXN0IGJlIGVpdGhlciAiWiIgKFVUQywgd2hpY2ggd2UgdHJhbnNsYXRlIHRvIEdNVCksCi0gb3Igc2ltcGxlIG9mZnNldHMgZnJvbSBVVEMgaW4gdGhlIHJhbmdlICItMTQ6MDAiIHRvICIrMTQ6MDAiLAotIGZvciBleGFtcGxlOiAiMTQ6MzA6MDAtMDU6MDAiIHNwZWNpZmllcyAyOjMwIFBNIGluIHRoZQotIGFmdGVybm9vbiBhdCBVVEMtMDU6MDAsIHdoaWNoIGlzIHRoZSBzYW1lIGFzIEVTVC4KLSAKLSBJZiBhIHRpbWV6b25lIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IFRpbWVab25lIGlzIHVzZWQuCi08UD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlhtbENhbGVuZGFyKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotWG1sQ2FsZW5kYXI8L0gzPgotPFBSRT4KLXB1YmxpYyA8Qj5YbWxDYWxlbmRhcjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPiZuYnNwO2RhdGUpPC9QUkU+Ci08REw+Ci08REQ+Q29uc3RydWN0cyBhbiBYbWxDYWxlbmRhciBmcm9tIGEgR0RhdGUuCi0gCi0gSWYgdGhlIGluc3RhbmNlIGlzIG5vdCBjb21wbGV0ZWQsIHlvdSBjYW4gcm91bmQtdHJpcCB0byBhbgotIGVxdWl2YWxlbnQgR0RhdGUgYnkgd3JpdGluZyAibmV3IEdEYXRlKG5ldyBYbWxDYWxlbmRhcihnZGF0ZSkpIi4KLSBIb3dldmVyLCBpZiB5b3UgYWNjZXNzIGFueSBvZiB0aGUgdW5zZXQgZmllbGRzIG9mIHRoZSBjYWxlbmRhciwgYWxsCi0gdGhlIGZpZWxkcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZmlsbGVkIGluLCBzbyBwYXJ0aWFsIGRhdGVzCi0gd2l0aG91dCB0aW1lem9uZXMgb3Igb3RoZXIgZmllbGRzIHdpbGwgbm90IHJvdW5kLXRyaXAgYWZ0ZXIgYWNjZXNzLgotPFA+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJYbWxDYWxlbmRhcihqYXZhLnV0aWwuRGF0ZSkiPjwhLS0gLS0+PC9BPjxIMz4KLVhtbENhbGVuZGFyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+WG1sQ2FsZW5kYXI8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvRGF0ZS5odG1sIj5EYXRlPC9BPiZuYnNwO2RhdGUpPC9QUkU+Ci08REw+Ci08REQ+Q29uc3RydWN0cyBhbiBYbWxDYWxlbmRhciBmcm9tIGEgRGF0ZS4KLSAKLSBUaGUgZGVmYXVsdCBUaW1lWm9uZSBpcyB1c2VkIGZvciBjb21wdXRpbmcgdGhlIHZhcmlvdXMgZmllbGRzLgotPFA+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJYbWxDYWxlbmRhcihpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBqYXZhLm1hdGguQmlnRGVjaW1hbCkiPjwhLS0gLS0+PC9BPjxIMz4KLVhtbENhbGVuZGFyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+WG1sQ2FsZW5kYXI8L0I+KGludCZuYnNwO3llYXIsCi0gICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7bW9udGgsCi0gICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7ZGF5LAotICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2hvdXIsCi0gICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7bWludXRlLAotICAgICAgICAgICAgICAgICAgIGludCZuYnNwO3NlY29uZCwKLSAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT4mbmJzcDtmcmFjdGlvbik8L1BSRT4KLTxETD4KLTxERD5Db25zdHJ1Y3RzIGFuIFhtbENhbGVuZGFyIHdpdGggdGhlIHNwZWNpZmllZCB5ZWFyLCBtb250aCwgZGF5LAotIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCBhbmQgb3B0aW9uYWwgZnJhY3Rpb25hbCBzZWNvbmRzLCBpbgotIHRoZSBkZWZhdWx0IHRpbWV6b25lLgotPFA+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJYbWxDYWxlbmRhcihpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBqYXZhLm1hdGguQmlnRGVjaW1hbCwgaW50LCBpbnQsIGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLVhtbENhbGVuZGFyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+WG1sQ2FsZW5kYXI8L0I+KGludCZuYnNwO3llYXIsCi0gICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7bW9udGgsCi0gICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7ZGF5LAotICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2hvdXIsCi0gICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7bWludXRlLAotICAgICAgICAgICAgICAgICAgIGludCZuYnNwO3NlY29uZCwKLSAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT4mbmJzcDtmcmFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDt0elNpZ24sCi0gICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7dHpIb3VyLAotICAgICAgICAgICAgICAgICAgIGludCZuYnNwO3R6TWludXRlKTwvUFJFPgotPERMPgotPEREPkNvbnN0cnVjdHMgYW4gWG1sQ2FsZW5kYXIgd2l0aCB0aGUgc3BlY2lmaWVkIHllYXIsIG1vbnRoLCBkYXksCi0gaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGFuZCBvcHRpb25hbCBmcmFjdGlvbmFsIHNlY29uZHMsIGluCi0gdGhlIHNwZWNpZmllZCB0aW1lem9uZS4KLTxQPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iWG1sQ2FsZW5kYXIoKSI+PCEtLSAtLT48L0E+PEgzPgotWG1sQ2FsZW5kYXI8L0gzPgotPFBSRT4KLXB1YmxpYyA8Qj5YbWxDYWxlbmRhcjwvQj4oKTwvUFJFPgotPERMPgotPEREPkNvbnN0cnVjdHMgYW4gZW1wdHkgaW5zdGFuY2Ugd2l0aCBubyBmaWVsZHMgc2V0LgotPFA+Ci08L0RMPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXQoaW50KSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldDwvQj4oaW50Jm5ic3A7ZmllbGQpPC9QUkU+Ci08REw+Ci08REQ+R2V0cyB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4gdGltZSBmaWVsZC4KLSAKLSBVbmxpa2UgdGhlIEdyZWdvcmlhbkNhbGVuZGFyIGltcGxlbWVudGF0aW9uLCB0aGUgZ2V0KCkgZG9lcyBub3QKLSBmb3JjZSBhIGNvbXBsZXRlIG9mIGFsbCBmaWVsZHMuICBJZiB5b3Ugd2lzaCB0byBmb3JjZSBhIGNvbXBsZXRpb24KLSBvZiBhbGwgdGhlIGZpZWxkcywgY2FsbCBnZXRUaW1lKCkgZmlyc3QuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+T3ZlcnJpZGVzOjwvQj48REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sI2dldChpbnQpIj5nZXQ8L0E+PC9DT0RFPiBpbiBjbGFzcyA8Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldERlZmF1bHRZZWFyKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldERlZmF1bHRZZWFyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGludCA8Qj5nZXREZWZhdWx0WWVhcjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGRlZmF1bHQgeWVhciB0aGF0IGlzIHVzZWQgd2hlbiBubyB5ZWFyIGlzIHNwZWNpZmllZC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0RGVmYXVsdFllYXIoaW50KSI+PCEtLSAtLT48L0E+PEgzPgotc2V0RGVmYXVsdFllYXI8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgdm9pZCA8Qj5zZXREZWZhdWx0WWVhcjwvQj4oaW50Jm5ic3A7eWVhcik8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSBkZWZhdWx0IHllYXIgdG8gYmUgdXNlZCB3aGVuIG5vIHllYXIgaXMgc3BlY2lmaWVkLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjb21wdXRlVGltZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1jb21wdXRlVGltZTwvSDM+Ci08UFJFPgotcHJvdGVjdGVkIHZvaWQgPEI+Y29tcHV0ZVRpbWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5PdmVycmlkZXMgR3JlZ29yaWFuQ2FsZW5kYXIuY29tcHV0ZVRpbWUgdG8gYXBwbHkgYSBkaWZmZXJlbnQKLSBkZWZhdWx0IHllYXIuICAoSXQgbXVzdCBiZSBhIGxlYXAgeWVhci4pCi08UD4KLTxERD48REw+Ci08RFQ+PEI+T3ZlcnJpZGVzOjwvQj48REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9HcmVnb3JpYW5DYWxlbmRhci5odG1sI2NvbXB1dGVUaW1lKCkiPmNvbXB1dGVUaW1lPC9BPjwvQ09ERT4gaW4gY2xhc3MgPENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9HcmVnb3JpYW5DYWxlbmRhci5odG1sIj5HcmVnb3JpYW5DYWxlbmRhcjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ0b1N0cmluZygpIj48IS0tIC0tPjwvQT48SDM+Ci10b1N0cmluZzwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+dG9TdHJpbmc8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5QcmludHMgdGhlIFhtbENhbGVuZGFyIHVzaW5nIGEgc3RhbmRhcmQgWE1MIFNjaGVtYQotIGZvcm1hdCwgYXMgZGVzY3JpYmVkIGluIFhtbENhbGVuZGFyKFN0cmluZyBzKS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5PdmVycmlkZXM6PC9CPjxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+PC9DT0RFPiBpbiBjbGFzcyA8Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbENhbGVuZGFyLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXIiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLkNoYW5nZVN0YW1wLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuQ2hhbmdlU3RhbXAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI1Y2Y0MS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuQ2hhbmdlU3RhbXAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIxMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ2OjU3IFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sQ3Vyc29yLkNoYW5nZVN0YW1wIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvci5DaGFuZ2VTdGFtcCxYbWxDdXJzb3IuQ2hhbmdlU3RhbXAgaW50ZXJmYWNlIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxDdXJzb3IuQ2hhbmdlU3RhbXAgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbE1hcmsuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbEN1cnNvci5DaGFuZ2VTdGFtcC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBYbWxDdXJzb3IuQ2hhbmdlU3RhbXA8L0gyPgotPERMPgotPERUPjxCPkVuY2xvc2luZyBpbnRlcmZhY2U6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIHN0YXRpYyBpbnRlcmZhY2UgPEI+WG1sQ3Vyc29yLkNoYW5nZVN0YW1wPC9CPjwvREw+Ci0KLTxQPgotUmVwcmVzZW50cyB0aGUgc3RhdGUgb2YgYSBkY291bWVudCBhdCBhIHBhcnRpY3VsYXIgcG9pbnQKLSBpbiB0aW1lLiAgSXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYSBkb2N1bWVudCBoYXMgYmVlbiBjaGFuZ2VkCi0gc2luY2UgdGhhdCBwb2ludCBpbiB0aW1lLgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5DaGFuZ2VTdGFtcC5odG1sI2hhc0NoYW5nZWQoKSI+aGFzQ2hhbmdlZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgd2hldGhlciBvciBub3QgdGhlIGRvY3VtZW50IGFzc29pYXRlZCB3aXRoIHRoaXMgQ2hhbmdlU3RhbXAKLSBoYXMgYmVlbiBhbHRlcmVkIHNpbmNlIHRoZSBDaGFuZ2VTdGFtcCBoYWQgYmVlbiBjcmVhdGVkLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iaGFzQ2hhbmdlZCgpIj48IS0tIC0tPjwvQT48SDM+Ci1oYXNDaGFuZ2VkPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5oYXNDaGFuZ2VkPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgZG9jdW1lbnQgYXNzb2lhdGVkIHdpdGggdGhpcyBDaGFuZ2VTdGFtcAotIGhhcyBiZWVuIGFsdGVyZWQgc2luY2UgdGhlIENoYW5nZVN0YW1wIGhhZCBiZWVuIGNyZWF0ZWQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxNYXJrLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxDdXJzb3IuQ2hhbmdlU3RhbXAuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjc4MjA4Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDkzMCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ3OjAwIFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sQ3Vyc29yLlRva2VuVHlwZSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IuVG9rZW5UeXBlLFhtbEN1cnNvci5Ub2tlblR5cGUgY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbEN1cnNvci5Ub2tlblR5cGUgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbENhbGVuZGFyLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuWG1sQm9va21hcmsuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbEN1cnNvci5Ub2tlblR5cGUuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBYbWxDdXJzb3IuVG9rZW5UeXBlPC9IMj4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5qYXZhLmxhbmcuT2JqZWN0PC9BPgotICB8Ci0gICstLTxCPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yLlRva2VuVHlwZTwvQj4KLTwvUFJFPgotPERMPgotPERUPjxCPkVuY2xvc2luZyBjbGFzczo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIDxCPlhtbEN1cnNvci5Ub2tlblR5cGU8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvREw+Ci0KLTxQPgotQW4gZW51bWVyYXRpb24gdGhhdCBpZGVudGlmaWVzIHRoZSB0eXBlIG9mIGFuIFhNTCB0b2tlbi4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwiPlhtbEN1cnNvci5Ub2tlblR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI0FUVFIiPkFUVFI8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIHNpbmdsZXRvbiBhdHRyaWJ1dGUgdG9rZW4gdHlwZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+WG1sQ3Vyc29yLlRva2VuVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjQ09NTUVOVCI+Q09NTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgc2luZ2xldG9uIGNvbW1lbnQgdG9rZW4gdHlwZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+WG1sQ3Vyc29yLlRva2VuVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjRU5EIj5FTkQ8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIHNpbmdsZXRvbiBlbmQtZWxlbWVudCB0b2tlbiB0eXBlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCNFTkRET0MiPkVORERPQzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgc2luZ2xldG9uIHN0YXJ0LWRvY3VtZW50IHRva2VuIHR5cGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI0lOVF9BVFRSIj5JTlRfQVRUUjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgYXR0cmlidXRlIHRva2VuLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjSU5UX0NPTU1FTlQiPklOVF9DT01NRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBjb21tZW50IHRva2VuLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjSU5UX0VORCI+SU5UX0VORDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgZW5kLWVsZW1lbnQgdG9rZW4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCNJTlRfRU5ERE9DIj5JTlRfRU5ERE9DPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBlbmQtZG9jdW1lbnQgdG9rZW4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCNJTlRfTkFNRVNQQUNFIj5JTlRfTkFNRVNQQUNFPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb24gdG9rZW4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCNJTlRfTk9ORSI+SU5UX05PTkU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Tm8gdG9rZW4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCNJTlRfUFJPQ0lOU1QiPklOVF9QUk9DSU5TVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiB0b2tlbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI0lOVF9TVEFSVCI+SU5UX1NUQVJUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBzdGFydC1lbGVtZW50IHRva2VuLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjSU5UX1NUQVJURE9DIj5JTlRfU1RBUlRET0M8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIHN0YXJ0LWRvY3VtZW50IHRva2VuLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjSU5UX1RFWFQiPklOVF9URVhUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSB0ZXh0IHRva2VuLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+WG1sQ3Vyc29yLlRva2VuVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjTkFNRVNQQUNFIj5OQU1FU1BBQ0U8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIHNpbmdsZXRvbiBuYW1lc3BhY2UgZGVjbGFyYXRpb24gdG9rZW4gdHlwZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+WG1sQ3Vyc29yLlRva2VuVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjTk9ORSI+Tk9ORTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgc2luZ2xldG9uIG5vLXRva2VuIHR5cGU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwiPlhtbEN1cnNvci5Ub2tlblR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI1BST0NJTlNUIj5QUk9DSU5TVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgc2luZ2xldG9uIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gdG9rZW4gdHlwZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+WG1sQ3Vyc29yLlRva2VuVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjU1RBUlQiPlNUQVJUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBzaW5nbGV0b24gc3RhcnQtZWxlbWVudCB0b2tlbiB0eXBlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCNTVEFSVERPQyI+U1RBUlRET0M8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIHNpbmdsZXRvbiBzdGFydC1kb2N1bWVudCB0b2tlbiB0eXBlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCNURVhUIj5URVhUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBzaW5nbGV0b24gdGV4dCB0b2tlbiB0eXBlPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCNpbnRWYWx1ZSgpIj5pbnRWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgb25lIG9mIHRoZSBJTlRfIHZhbHVlcyBkZWZpbmVkIGluIHRoaXMgY2xhc3MuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjaXNBbnlBdHRyKCkiPmlzQW55QXR0cjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgaXMgYXR0cmlidXRlIG9yIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiB0b2tlbjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI2lzQXR0cigpIj5pc0F0dHI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIGlzIGF0dHJpYnV0ZSB0b2tlbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCNpc0NvbW1lbnQoKSI+aXNDb21tZW50PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiBpcyBjb21tZW50IHRva2VuLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI2lzQ29udGFpbmVyKCkiPmlzQ29udGFpbmVyPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiBpcyBzdGFydC1kb2N1bWVudCBvciBzdGFydC1lbGVtZW50IHRva2VuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjaXNFbmQoKSI+aXNFbmQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIGlzIGVuZC1lbGVtZW50IHRva2VuLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI2lzRW5kZG9jKCkiPmlzRW5kZG9jPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiBpcyBlbmQtZG9jdW1lbnQgdG9rZW4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjaXNGaW5pc2goKSI+aXNGaW5pc2g8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIGlzIGVuZC1kb2N1bWVudCBvciBlbmQtZWxlbWVudCB0b2tlbjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI2lzTmFtZXNwYWNlKCkiPmlzTmFtZXNwYWNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiBpcyBuYW1lc3BhY2UgZGVjbGFyYXRpb24gdG9rZW4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjaXNOb25lKCkiPmlzTm9uZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgbm8gdG9rZW4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjaXNQcm9jaW5zdCgpIj5pc1Byb2NpbnN0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiBpcyBwcm9jZXNzaW5nIGluc3RydWN0aW9uIHRva2VuLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI2lzU3RhcnQoKSI+aXNTdGFydDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgaXMgc3RhcnQtZWxlbWVudCB0b2tlbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCNpc1N0YXJ0ZG9jKCkiPmlzU3RhcnRkb2M8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIGlzIHN0YXJ0LWRvY3VtZW50IHRva2VuLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI2lzVGV4dCgpIj5pc1RleHQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIGlzIHRleHQgdG9rZW4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNjbG9uZSgpIj5jbG9uZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj5lcXVhbHM8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2ZpbmFsaXplKCkiPmZpbmFsaXplPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNnZXRDbGFzcygpIj5nZXRDbGFzczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjaGFzaENvZGUoKSI+aGFzaENvZGU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeSgpIj5ub3RpZnk8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeUFsbCgpIj5ub3RpZnlBbGw8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iSU5UX05PTkUiPjwhLS0gLS0+PC9BPjxIMz4KLUlOVF9OT05FPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5JTlRfTk9ORTwvQj48L1BSRT4KLTxETD4KLTxERD5ObyB0b2tlbi4gIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCNpbnRWYWx1ZSgpIj48Q09ERT5pbnRWYWx1ZSgpPC9DT0RFPjwvQT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yLlRva2VuVHlwZS5JTlRfTk9ORSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTlRfU1RBUlRET0MiPjwhLS0gLS0+PC9BPjxIMz4KLUlOVF9TVEFSVERPQzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+SU5UX1NUQVJURE9DPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBzdGFydC1kb2N1bWVudCB0b2tlbi4gIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCNpbnRWYWx1ZSgpIj48Q09ERT5pbnRWYWx1ZSgpPC9DT0RFPjwvQT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yLlRva2VuVHlwZS5JTlRfU1RBUlRET0MiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSU5UX0VORERPQyI+PCEtLSAtLT48L0E+PEgzPgotSU5UX0VORERPQzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+SU5UX0VORERPQzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZW5kLWRvY3VtZW50IHRva2VuLiAgU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI2ludFZhbHVlKCkiPjxDT0RFPmludFZhbHVlKCk8L0NPREU+PC9BPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IuVG9rZW5UeXBlLklOVF9FTkRET0MiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSU5UX1NUQVJUIj48IS0tIC0tPjwvQT48SDM+Ci1JTlRfU1RBUlQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPklOVF9TVEFSVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgc3RhcnQtZWxlbWVudCB0b2tlbi4gIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCNpbnRWYWx1ZSgpIj48Q09ERT5pbnRWYWx1ZSgpPC9DT0RFPjwvQT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yLlRva2VuVHlwZS5JTlRfU1RBUlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iSU5UX0VORCI+PCEtLSAtLT48L0E+PEgzPgotSU5UX0VORDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+SU5UX0VORDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgZW5kLWVsZW1lbnQgdG9rZW4uICBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjaW50VmFsdWUoKSI+PENPREU+aW50VmFsdWUoKTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvci5Ub2tlblR5cGUuSU5UX0VORCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTlRfVEVYVCI+PCEtLSAtLT48L0E+PEgzPgotSU5UX1RFWFQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPklOVF9URVhUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSB0ZXh0IHRva2VuLiAgU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI2ludFZhbHVlKCkiPjxDT0RFPmludFZhbHVlKCk8L0NPREU+PC9BPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IuVG9rZW5UeXBlLklOVF9URVhUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklOVF9BVFRSIj48IS0tIC0tPjwvQT48SDM+Ci1JTlRfQVRUUjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+SU5UX0FUVFI8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGF0dHJpYnV0ZSB0b2tlbi4gIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCNpbnRWYWx1ZSgpIj48Q09ERT5pbnRWYWx1ZSgpPC9DT0RFPjwvQT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yLlRva2VuVHlwZS5JTlRfQVRUUiI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTlRfTkFNRVNQQUNFIj48IS0tIC0tPjwvQT48SDM+Ci1JTlRfTkFNRVNQQUNFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5JTlRfTkFNRVNQQUNFPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBuYW1lc3BhY2UgZGVjbGFyYXRpb24gdG9rZW4uICBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjaW50VmFsdWUoKSI+PENPREU+aW50VmFsdWUoKTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvci5Ub2tlblR5cGUuSU5UX05BTUVTUEFDRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJJTlRfQ09NTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotSU5UX0NPTU1FTlQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPklOVF9DT01NRU5UPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBjb21tZW50IHRva2VuLiAgU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sI2ludFZhbHVlKCkiPjxDT0RFPmludFZhbHVlKCk8L0NPREU+PC9BPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IuVG9rZW5UeXBlLklOVF9DT01NRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IklOVF9QUk9DSU5TVCI+PCEtLSAtLT48L0E+PEgzPgotSU5UX1BST0NJTlNUPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5JTlRfUFJPQ0lOU1Q8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gdG9rZW4uICBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwjaW50VmFsdWUoKSI+PENPREU+aW50VmFsdWUoKTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvci5Ub2tlblR5cGUuSU5UX1BST0NJTlNUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik5PTkUiPjwhLS0gLS0+PC9BPjxIMz4KLU5PTkU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwiPlhtbEN1cnNvci5Ub2tlblR5cGU8L0E+IDxCPk5PTkU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIHNpbmdsZXRvbiBuby10b2tlbiB0eXBlCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTVEFSVERPQyI+PCEtLSAtLT48L0E+PEgzPgotU1RBUlRET0M8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwiPlhtbEN1cnNvci5Ub2tlblR5cGU8L0E+IDxCPlNUQVJURE9DPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBzaW5nbGV0b24gc3RhcnQtZG9jdW1lbnQgdG9rZW4gdHlwZQotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iRU5ERE9DIj48IS0tIC0tPjwvQT48SDM+Ci1FTkRET0M8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwiPlhtbEN1cnNvci5Ub2tlblR5cGU8L0E+IDxCPkVORERPQzwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgc2luZ2xldG9uIHN0YXJ0LWRvY3VtZW50IHRva2VuIHR5cGUKLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNUQVJUIj48IS0tIC0tPjwvQT48SDM+Ci1TVEFSVDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+WG1sQ3Vyc29yLlRva2VuVHlwZTwvQT4gPEI+U1RBUlQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIHNpbmdsZXRvbiBzdGFydC1lbGVtZW50IHRva2VuIHR5cGUKLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkVORCI+PCEtLSAtLT48L0E+PEgzPgotRU5EPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPiA8Qj5FTkQ8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIHNpbmdsZXRvbiBlbmQtZWxlbWVudCB0b2tlbiB0eXBlCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJURVhUIj48IS0tIC0tPjwvQT48SDM+Ci1URVhUPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPiA8Qj5URVhUPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBzaW5nbGV0b24gdGV4dCB0b2tlbiB0eXBlCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJBVFRSIj48IS0tIC0tPjwvQT48SDM+Ci1BVFRSPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPiA8Qj5BVFRSPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBzaW5nbGV0b24gYXR0cmlidXRlIHRva2VuIHR5cGUKLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Ik5BTUVTUEFDRSI+PCEtLSAtLT48L0E+PEgzPgotTkFNRVNQQUNFPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPiA8Qj5OQU1FU1BBQ0U8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIHNpbmdsZXRvbiBuYW1lc3BhY2UgZGVjbGFyYXRpb24gdG9rZW4gdHlwZQotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQ09NTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotQ09NTUVOVDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+WG1sQ3Vyc29yLlRva2VuVHlwZTwvQT4gPEI+Q09NTUVOVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgc2luZ2xldG9uIGNvbW1lbnQgdG9rZW4gdHlwZQotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iUFJPQ0lOU1QiPjwhLS0gLS0+PC9BPjxIMz4KLVBST0NJTlNUPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPiA8Qj5QUk9DSU5TVDwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgc2luZ2xldG9uIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gdG9rZW4gdHlwZQotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9InRvU3RyaW5nKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXRvU3RyaW5nPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj50b1N0cmluZzwvQj4oKTwvUFJFPgotPERMPgotPEREPjxETD4KLTxEVD48Qj5PdmVycmlkZXM6PC9CPjxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPjwvQ09ERT4gaW4gY2xhc3MgPENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImludFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWludFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmludFZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBvbmUgb2YgdGhlIElOVF8gdmFsdWVzIGRlZmluZWQgaW4gdGhpcyBjbGFzcy4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNOb25lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzTm9uZTwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNOb25lPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiBubyB0b2tlbi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNTdGFydGRvYygpIj48IS0tIC0tPjwvQT48SDM+Ci1pc1N0YXJ0ZG9jPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5pc1N0YXJ0ZG9jPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiBpcyBzdGFydC1kb2N1bWVudCB0b2tlbi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNFbmRkb2MoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNFbmRkb2M8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzRW5kZG9jPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiBpcyBlbmQtZG9jdW1lbnQgdG9rZW4uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzU3RhcnQoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNTdGFydDwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNTdGFydDwvQj4oKTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgaXMgc3RhcnQtZWxlbWVudCB0b2tlbi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNFbmQoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNFbmQ8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzRW5kPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiBpcyBlbmQtZWxlbWVudCB0b2tlbi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNUZXh0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzVGV4dDwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNUZXh0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiBpcyB0ZXh0IHRva2VuLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc0F0dHIoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNBdHRyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5pc0F0dHI8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIGlzIGF0dHJpYnV0ZSB0b2tlbi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNOYW1lc3BhY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNOYW1lc3BhY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzTmFtZXNwYWNlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiBpcyBuYW1lc3BhY2UgZGVjbGFyYXRpb24gdG9rZW4uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzQ29tbWVudCgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc0NvbW1lbnQ8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzQ29tbWVudDwvQj4oKTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgaXMgY29tbWVudCB0b2tlbi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNQcm9jaW5zdCgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc1Byb2NpbnN0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5pc1Byb2NpbnN0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiBpcyBwcm9jZXNzaW5nIGluc3RydWN0aW9uIHRva2VuLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc0NvbnRhaW5lcigpIj48IS0tIC0tPjwvQT48SDM+Ci1pc0NvbnRhaW5lcjwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNDb250YWluZXI8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIGlzIHN0YXJ0LWRvY3VtZW50IG9yIHN0YXJ0LWVsZW1lbnQgdG9rZW4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNGaW5pc2goKSI+PCEtLSAtLT48L0E+PEgzPgotaXNGaW5pc2g8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzRmluaXNoPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiBpcyBlbmQtZG9jdW1lbnQgb3IgZW5kLWVsZW1lbnQgdG9rZW4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNBbnlBdHRyKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzQW55QXR0cjwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNBbnlBdHRyPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiBpcyBhdHRyaWJ1dGUgb3IgbmFtZXNwYWNlIGRlY2xhcmF0aW9uIHRva2VuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbEJvb2ttYXJrLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxCb29rbWFyay5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbEJvb2ttYXJrLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNzU4MmUuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbEJvb2ttYXJrLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOTAgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0NzowMCBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbEN1cnNvci5YbWxCb29rbWFyayAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IuWG1sQm9va21hcmssWG1sQ3Vyc29yLlhtbEJvb2ttYXJrIGNsYXNzIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxDdXJzb3IuWG1sQm9va21hcmsgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sQ3Vyc29yLlhtbEJvb2ttYXJrLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sQ3Vyc29yLlhtbEJvb2ttYXJrPC9IMj4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5qYXZhLmxhbmcuT2JqZWN0PC9BPgotICB8Ci0gICstLTxCPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yLlhtbEJvb2ttYXJrPC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+RGlyZWN0IEtub3duIFN1YmNsYXNzZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMaW5lTnVtYmVyLmh0bWwiPlhtbExpbmVOdW1iZXI8L0E+PC9ERD4KLTwvREw+Ci08REw+Ci08RFQ+PEI+RW5jbG9zaW5nIGNsYXNzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBhYnN0cmFjdCBzdGF0aWMgY2xhc3MgPEI+WG1sQ3Vyc29yLlhtbEJvb2ttYXJrPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0RMPgotCi08UD4KLVN1YmNsYXNzZXMgb2YgWG1sQm9va21hcmsgY2FuIGJlIHVzZWQgdG8gYW5ub3RhdGUgYW4gWE1MIGRvY3VtZW50LgotIFRoaXMgY2xhc3MgaXMgYWJzdHJhY3QgdG8gcHJldmVudCBwYXJ0aWVzIGZyb20gaW5hZHZlcnRlbnRseSAKLSBpbnRlcmZlcmluZyB3aXRoIGVhY2ggb3RoZXJzJyBib29rbWFya3Mgd2l0aG91dCBleHBsaWNpdGx5Ci0gc2hhcmluZyBhIGJvb2ttYXJrIGNsYXNzLgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxNYXJrLmh0bWwiPlhtbEN1cnNvci5YbWxNYXJrPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxCb29rbWFyay5odG1sI19jdXJyZW50TWFyayI+X2N1cnJlbnRNYXJrPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBtYXJrIGlzIHNldCBieSB0aGUgaG9zdCBkb2N1bWVudDsgaXQgaXMgY2FwYWJsZSBvZgotIHJldHVybmluZyBhbiBYbWxDdXJzb3IgaW1wbGVtZW50YXRpb24gYXQgdGhlIGxvY2F0aW9uIG9mCi0gdGhlIGJvb2ttYXJrLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL3JlZi9SZWZlcmVuY2UuaHRtbCI+UmVmZXJlbmNlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxCb29rbWFyay5odG1sI19yZWYiPl9yZWY8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SWYgbm9uLW51bGwsIHRoZSByZWYgaXMgdXNlZCBieSB0aGUgaG9zdCBkb2N1bWVudAotIHRvIG1haW50YWluIGEgcmVmZXJlbmNlIHRvIHRoZSBib29rbWFyay48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0iY29uc3RydWN0b3Jfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbEJvb2ttYXJrLmh0bWwjWG1sQ3Vyc29yLlhtbEJvb2ttYXJrKCkiPlhtbEN1cnNvci5YbWxCb29rbWFyazwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdHMgYSBzdHJvbmdseS1yZWZlcmVuY2VkIGJvb2ttYXJrLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuWG1sQm9va21hcmsuaHRtbCNYbWxDdXJzb3IuWG1sQm9va21hcmsoYm9vbGVhbikiPlhtbEN1cnNvci5YbWxCb29rbWFyazwvQT48L0I+KGJvb2xlYW4mbmJzcDt3ZWFrKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29uc3RydWN0cyBhIGJvb2ttYXJrLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuWG1sQm9va21hcmsuaHRtbCNjcmVhdGVDdXJzb3IoKSI+Y3JlYXRlQ3Vyc29yPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q2FsbCB0aGUgY3JlYXRlQ3Vyc29yIG1ldGhvZCB0byBjcmVhdGUgYSBuZXcgY3Vyc29yIHdoaWNoIGlzCi0gcG9zaXRpb25lZCBhdCB0aGUgc2FtZSBzcGxhY2UgYXMgdGhlIGJvb2ttYXJrLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbEJvb2ttYXJrLmh0bWwjZ2V0S2V5KCkiPmdldEtleTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBkZWZhdWx0IGtleSBmb3IgYm9va21hcmtzIGlzIHRoZSBjbGFzcyB3aGljaCBpbXBsZW1lbnRzCi0gdGhlbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxCb29rbWFyay5odG1sI3RvQm9va21hcmsob3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IpIj50b0Jvb2ttYXJrPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPiZuYnNwO2MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtNb3ZlcyB0aGUgZ2l2ZW4gY3Vyc29yIHRvIHRoaXMgYm9va21hcmssIGFuZCByZXR1cm5zIGl0LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iX2N1cnJlbnRNYXJrIj48IS0tIC0tPjwvQT48SDM+Ci1fY3VycmVudE1hcms8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxNYXJrLmh0bWwiPlhtbEN1cnNvci5YbWxNYXJrPC9BPiA8Qj5fY3VycmVudE1hcms8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIG1hcmsgaXMgc2V0IGJ5IHRoZSBob3N0IGRvY3VtZW50OyBpdCBpcyBjYXBhYmxlIG9mCi0gcmV0dXJuaW5nIGFuIFhtbEN1cnNvciBpbXBsZW1lbnRhdGlvbiBhdCB0aGUgbG9jYXRpb24gb2YKLSB0aGUgYm9va21hcmsuCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJfcmVmIj48IS0tIC0tPjwvQT48SDM+Ci1fcmVmPC9IMz4KLTxQUkU+Ci1wdWJsaWMgZmluYWwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9yZWYvUmVmZXJlbmNlLmh0bWwiPlJlZmVyZW5jZTwvQT4gPEI+X3JlZjwvQj48L1BSRT4KLTxETD4KLTxERD5JZiBub24tbnVsbCwgdGhlIHJlZiBpcyB1c2VkIGJ5IHRoZSBob3N0IGRvY3VtZW50Ci0gdG8gbWFpbnRhaW4gYSByZWZlcmVuY2UgdG8gdGhlIGJvb2ttYXJrLiAgSWYgaXQgaXMgYSB3ZWFrCi0gcmVmZXJlbmNlLCB0aGUgaG9zdCBkb2N1bWVudCB3aWxsIG5vdCBwcmV2ZW50IHRoZSBCb29rbWFyawotIGZyb20gYmVpbmcgZ2FyYmFnZSBjb2xsZWN0ZWQuCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iWG1sQ3Vyc29yLlhtbEJvb2ttYXJrKCkiPjwhLS0gLS0+PC9BPjxIMz4KLVhtbEN1cnNvci5YbWxCb29rbWFyazwvSDM+Ci08UFJFPgotcHVibGljIDxCPlhtbEN1cnNvci5YbWxCb29rbWFyazwvQj4oKTwvUFJFPgotPERMPgotPEREPkNvbnN0cnVjdHMgYSBzdHJvbmdseS1yZWZlcmVuY2VkIGJvb2ttYXJrLgotPFA+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJYbWxDdXJzb3IuWG1sQm9va21hcmsoYm9vbGVhbikiPjwhLS0gLS0+PC9BPjxIMz4KLVhtbEN1cnNvci5YbWxCb29rbWFyazwvSDM+Ci08UFJFPgotcHVibGljIDxCPlhtbEN1cnNvci5YbWxCb29rbWFyazwvQj4oYm9vbGVhbiZuYnNwO3dlYWspPC9QUkU+Ci08REw+Ci08REQ+Q29uc3RydWN0cyBhIGJvb2ttYXJrLgotPFA+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPndlYWs8L0NPREU+IC0gdHJ1ZSBpZiB0aGUgZG9jdW1lbnQncyByZWZlcmVuY2UgdG8gdGhlIGJvb2ttYXJrIHNob3VsZCBiZSBhIFdlYWtSZWZlcmVuY2U8L0RMPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJjcmVhdGVDdXJzb3IoKSI+PCEtLSAtLT48L0E+PEgzPgotY3JlYXRlQ3Vyc29yPC9IMz4KLTxQUkU+Ci1wdWJsaWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPiA8Qj5jcmVhdGVDdXJzb3I8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5DYWxsIHRoZSBjcmVhdGVDdXJzb3IgbWV0aG9kIHRvIGNyZWF0ZSBhIG5ldyBjdXJzb3Igd2hpY2ggaXMKLSBwb3NpdGlvbmVkIGF0IHRoZSBzYW1lIHNwbGFjZSBhcyB0aGUgYm9va21hcmsuICBJdCBpcyBtdWNoIG1vcmUKLSBlZmZpY2llbnQgdG8gY2FsbCB0b0Jvb2ttYXJrIG9uIGFuIGV4aXN0aW5nIGN1cnNvciB0aGFuIGl0Ci0gaXMgdG8gY3JlYXRlIGEgbmV3IGN1cnNvci4gIEhvd2V2ZXIsIHRvQm9va21hcmsgbWF5IGZhaWwgaWYgdGhlCi0gYm9va21hcmsgaXMgaW4gYSBkaWZmZXJlbnQgZG9jdW1lbnQgdGhhbiB0aGUgY3Vyc29yLiAgSXQgaXMKLSB1bmRlciB0aGVzZSBjaXJjdW1zdGFuY2VzIHdoZXJlIGNyZWF0ZUN1cnNvciBuZWVkcyB0byBiZSBjYWxsZWQKLSBvbiB0aGUgYm9va21hcmsuICBTdWJzZXF1ZW50IG5hdmlnYXRpb25zIHRvIGJvb2ttYXJrCi0gcG9zaXRpb25zIHNob3VsZCBhdHRlbXB0IHRvIHJldXNlIHRoZSBsYXN0IGN1cnNvciB0bwotIGltcHJvdmUgcGVyZm9ybWFjZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0idG9Cb29rbWFyayhvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcikiPjwhLS0gLS0+PC9BPjxIMz4KLXRvQm9va21hcms8L0gzPgotPFBSRT4KLXB1YmxpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+IDxCPnRvQm9va21hcms8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4mbmJzcDtjKTwvUFJFPgotPERMPgotPEREPk1vdmVzIHRoZSBnaXZlbiBjdXJzb3IgdG8gdGhpcyBib29rbWFyaywgYW5kIHJldHVybnMgaXQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEtleSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRLZXk8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+IDxCPmdldEtleTwvQj4oKTwvUFJFPgotPERMPgotPEREPlRoZSBkZWZhdWx0IGtleSBmb3IgYm9va21hcmtzIGlzIHRoZSBjbGFzcyB3aGljaCBpbXBsZW1lbnRzCi0gdGhlbS4gIFRoaXMgd2F5LCBtdWx0aXBsZSBwYXJ0aWVzIHVzaW5nIGJvb2ttYXJrcyBpbiB0aGUKLSBzYW1lIGluc3RhbmNlIGRvY3VtZW50IHdpbGwgbm90IGludGVyZmVyZSB3aXRoIGVhY2hvdGhlci4KLSBPbmUgY2FuLCBob3dldmVyLCBvdmVycmlkZSBnZXRLZXkoKSB0byB1c2UgYSBrZXkgb3RoZXIgdGhhbgotIHRoZSBjbGFzcy4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sQ3Vyc29yLlhtbEJvb2ttYXJrLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxNYXJrLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuWG1sTWFyay5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTViMjY5Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxNYXJrLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMTAgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NyBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbEN1cnNvci5YbWxNYXJrIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvci5YbWxNYXJrLFhtbEN1cnNvci5YbWxNYXJrIGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sQ3Vyc29yLlhtbE1hcmsgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5DaGFuZ2VTdGFtcC5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sQ3Vyc29yLlhtbE1hcmsuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgWG1sQ3Vyc29yLlhtbE1hcms8L0gyPgotPERMPgotPERUPjxCPkVuY2xvc2luZyBpbnRlcmZhY2U6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIHN0YXRpYyBpbnRlcmZhY2UgPEI+WG1sQ3Vyc29yLlhtbE1hcms8L0I+PC9ETD4KLQotPFA+Ci1BbiBhYnN0cmFjdCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj48Q09ERT5YbWxDdXJzb3I8L0NPREU+PC9BPiBmYWN0b3J5LgotIEltcGxlbWVudGF0aW9ucyBvZiBYbWxDdXJzb3IgaW1wbGVtZW50IFhtbE1hcmsgdG8gYmUgYWJsZSB0bwotIHJlY29uc3RpdHV0ZSBhIGN1cnNvciBmcm9tIGEgYm9va21hcmsuIFdoZW4gY29udGVudCBtb3ZlcyBiZXR3ZWVuCi0gaW1wbGVtZW50YXRpb25zLCB0aGUgWG1sTWFyayBpcyBzZXQgdG8gdGhlIGltcGxtZW50YXRpb24ncyB3aGljaAotIHJlY2lldmVzIHRoZSBuZXcgY29udGVudC4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuWG1sTWFyay5odG1sI2NyZWF0ZUN1cnNvcigpIj5jcmVhdGVDdXJzb3I8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImNyZWF0ZUN1cnNvcigpIj48IS0tIC0tPjwvQT48SDM+Ci1jcmVhdGVDdXJzb3I8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+IDxCPmNyZWF0ZUN1cnNvcjwvQj4oKTwvUFJFPgotPERMPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5DaGFuZ2VTdGFtcC5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sQ3Vyc29yLlhtbE1hcmsuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQyMjQyMS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM3NjMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NyBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbEN1cnNvciAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IsWG1sQ3Vyc29yIGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sQ3Vyc29yIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuQ2hhbmdlU3RhbXAuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbEN1cnNvci5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBYbWxDdXJzb3I8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlhtbEN1cnNvcjwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvREw+Ci0KLTxQPgotUmVwcmVzZW50cyBhIHBvc2l0aW9uIGJldHdlZW4gdHdvIGxvZ2ljYWwgdG9rZW5zIGluIGFuIFhNTCBkb2N1bWVudC4gCi0gCi0gVGhlIHRva2VucyB0aGVtc2VsdmVzIGFyZSBub3QgZXhwb3NlZCBhcyBvYmplY3RzLCBidXQgdGhlaXIgdHlwZSBhbmQgcHJvcGVydGllcwotIGFyZSBkaXNjb3ZlcmFibGUgdGhyb3VnaCBtZXRob2RzIG9uIHRoZSBjdXJzb3IuICBJbiBwYXJ0aWN1bGFyLCB0aGUgZ2VuZXJhbAotIGNhdGVnb3J5IG9mIHRva2VuIGlzIHJlcHJlc2VudGVkIGJ5IGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwiPjxDT0RFPlRva2VuVHlwZTwvQ09ERT48L0E+Ljxici8+PGJyLz4KLSAKLSBZb3UgdXNlIGFuIFhtbEN1cnNvciBpbnN0YW5jZSB0byBuYXZpZ2F0ZSB0aHJvdWdoIGFuZCBtYW5pcHVsYXRlIGFuIFhNTCAKLSBpbnN0YW5jZSBkb2N1bWVudC4gCi0gT25jZSB5b3Ugb2J0YWluIGFuIFhNTCBkb2N1bWVudCwgeW91IGNhbiBjcmVhdGUgYSBjdXJzb3IgdG8gcmVwcmVzZW50IAotIGEgc3BlY2lmaWMgcGxhY2UgaW4gdGhlIFhNTC4gQmVjYXVzZSB5b3UgY2FuIHVzZSBhIGN1cnNvciB3aXRoIG9yIAotIHdpdGhvdXQgYSBzY2hlbWEgY29ycmVzcG9uZGluZyB0byB0aGUgWE1MLCBjdXJzb3JzIGFyZSBhbiBpZGVhbCAKLSB3YXkgdG8gaGFuZGxlIFhNTCB3aXRob3V0IGEgc2NoZW1hLiBZb3UgY2FuIGNyZWF0ZSBhIG5ldyBjdXJzb3IgYnkKLSBjYWxsaW5nIHRoZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3Q3Vyc29yKCkiPjxDT0RFPm5ld0N1cnNvcjwvQ09ERT48L0E+IG1ldGhvZCAKLSBleHBvc2VkIGJ5IGFuIG9iamVjdCByZXByZXNlbnRpbmcKLSB0aGUgWE1MLCB3aGV0aGVyIGl0IHdhcyBwYXJzZWQgaW50byBhIHN0cm9uZyB0eXBlIGNvbXBpbGVkIGZyb20gCi0gc2NoZW1hIG9yIGFuIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPjxDT0RFPlhtbE9iamVjdDwvQ09ERT48L0E+IChhcyBpbiB0aGUgbm8tc2NoZW1hIGNhc2UpLjxici8+PGJyLz4KLSAKLSBXaXRoIGFuIFhtbEN1cnNvciwgeW91IGNhbiBhbHNvOiA8YnIvPjxici8+Ci0gCi0gPHVsPgotIDxsaT5FeGVjdXRlIFhRdWVyeSBhbmQgWFBhdGggZXhwcmVzc2lvbnMgYWdhaW5zdCB0aGUgWE1MIHdpdGggdGhlCi0gZXhlY1F1ZXJ5IGFuZCBzZWxlY3RQYXRoIG1ldGhvZHMuPC9saT4KLSAKLSA8bGk+RWRpdCBhbmQgcmVzaGFwZSB0aGUgZG9jdW1lbnQgYnkgaW5zZXJ0aW5nLCBtb3ZpbmcsIGNvcHlpbmcsIGFuZCByZW1vdmluZwotIFhNTC48L2xpPgotIAotIDxsaT5JbnNlcnQgYm9va21hcmtzIHRoYXQgInN0aWNrIiB0byB0aGUgWE1MIGF0IHRoZSBjdXJzb3IncwotIHBvc2l0aW9uIGV2ZW4gaWYgdGhlIGN1cnNvciBvciBYTUwgbW92ZXMuPC9saT4KLQotIDxsaT5HZXQgYW5kIHNldCB2YWx1ZXMgZm9yIGNvbnRhaW5lcnMgKGVsZW1lbnRzIGFuZCB3aG9sZSBkb2N1bWVudHMpLAotIGF0dHJpYnV0ZXMsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLCBhbmQgY29tbWVudHMuPC9saT4KLSA8L3VsPgotIAotIEEgY3Vyc29yIG1vdmVzIHRocm91Z2ggWE1MIGJ5IG1vdmluZyBwYXN0IHRva2Vucy4gQQotIHRva2VuIHJlcHJlc2VudHMgYSBjYXRlZ29yeSBvZiBYTUwgbWFya3VwLCBzdWNoIGFzIHRoZSBzdGFydCBvZiBhbiBlbGVtZW50LCAKLSBpdHMgZW5kLCBhbiBhdHRyaWJ1dGUsIGNvbW1lbnQsIGFuZCBzbyBvbi4gWG1sQ3Vyc29yIG1ldGhvZHMgc3VjaCBhcwotIHRvTmV4dFRva2VuLCB0b05leHRTaWJsaW5nLCB0b1BhcmVudCwgYW5kIHNvIG9uIG1vdmUgdGhlIGN1cnNvciAKLSBhbW9uZyB0b2tlbnMuIEVhY2ggdG9rZW4ncyBjYXRlZ29yeSBpcyBvZiBhIHBhcnRpY3VsYXIgPGVtPnR5cGU8L2VtPiwgcmVwcmVzZW50ZWQgCi0gYnkgb25lIG9mIHRoZSBuaW5lIHR5cGVzIGRlZmluZWQgYnkgdGhlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj48Q09ERT5Ub2tlblR5cGU8L0NPREU+PC9BPiBjbGFzcy4gPGJyLz48YnIvPgotIAotIFdoZW4geW91IGdldCBhIG5ldyBjdXJzb3IgZm9yIGEgd2hvbGUgaW5zdGFuY2UgZG9jdW1lbnQsIHRoZSBjdXJzb3IgaXMKLSBpbnRpYWxseSBsb2NhdGVkIGJlZm9yZSB0aGUgU1RBUlRET0MgdG9rZW4uIFRoaXMgdG9rZW4sIHdoaWNoIGhhcyBubyBhbmFsb2d5Ci0gaW4gdGhlIFhNTCBzcGVjaWZpY2F0aW9uLCBpcyBwcmVzZW50IGluIHRoaXMgbG9naWNhbCBtb2RlbCBvZiBYTUwKLSBzbyB0aGF0IHlvdSBtYXkgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgZG9jdW1lbnQgYXMgYSB3aG9sZQotIGFuZCB0aGUgY29udGVudCBvZiB0aGUgZG9jdW1lbnQuIFRlcm1pbmF0aW5nIHRoZSBkb2N1bWVudCBpcyBhbiBFTkRET0MKLSB0b2tlbi4gVGhpcyB0b2tlbiBpcyBhbHNvIG5vdCBwYXJ0IG9mIHRoZSBYTUwgc3BlY2lmaWNhdGlvbi4gQSBjdXJzb3IgCi0gbG9jYXRlZCBpbW1lZGlhdGVseSBiZWZvcmUgdGhpcyB0b2tlbiBpcyBhdCB0aGUgdmVyeSBlbmQgb2YgdGhlIGRvY3VtZW50LiAKLSBJdCBpcyBub3QgcG9zc2libGUgdG8gcG9zaXRpb24gdGhlIGN1cnNvciBhZnRlciB0aGUgRU5ERE9DIHRva2VuLiAKLSBUaHVzLCB0aGUgU1RBUlRET0MgYW5kIEVORERPQyB0b2tlbnMgYXJlIGVmZmVjdGl2ZWx5ICJib29rZW5kcyIgZm9yIHRoZSBjb250ZW50IG9mIAotIHRoZSBkb2N1bWVudC48YnIvPjxici8+Ci0gCi0gRm9yIGV4YW1wbGUsIGZvciB0aGUgZm9sbG93aW5nIFhNTCwgaWYgeW91IHdlcmUgdGhlIG5hdmlnYXRlIGEgY3Vyc29yCi0gdGhyb3VnaCB0aGUgWE1MIGRvY3VtZW50IHVzaW5nIHRvTmV4dFRva2VuKCksIHRoZSBsaXN0IG9mIHRva2VuIHR5cGVzIHRoYXQgCi0gZm9sbG93cyByZXByZXNlbnRzIHRoZSB0b2tlbiBzZXF1ZW5jZSB5b3Ugd291bGQgZW5jb3VudGVyLiA8YnIvPjxici8+Ci0gCi0gPHByZT4KLSAmbHQ7c2FtcGxlIHg9J3knJmd0OwotICAgICAmbHQ7dmFsdWUmZ3Q7Zm9vJmx0Oy92YWx1ZSZndDsKLSAmbHQ7L3NhbXBsZSZndDsKLSA8L3ByZT4KLSAKLSBTVEFSVERPQyA8YnIvPgotIFNUQVJUIChzYW1wbGUpIDxici8+Ci0gQVRUUiAoeD0neScpIDxici8+Ci0gVEVYVCAoIlxuICAgICIpIDxici8+Ci0gU1RBUlQgKHZhbHVlKSA8YnIvPgotIFRFWFQgKCJmb28iKSA8YnIvPgotIEVORCAodmFsdWUpIDxici8+Ci0gVEVYVCAoIlxuIikgPGJyLz4KLSBFTkQgKHNhbXBsZSk8YnIvPgotIEVORERPQyA8YnIvPjxici8+Ci0KLSBXaGVuIHRoZXJlIGFyZSBubyBtb3JlIHRva2VucyBhdmFpbGFibGUsIGhhc05leHRUb2tlbigpIHJldHVybnMKLSBmYWxzZSBhbmQgdG9OZXh0VG9rZW4oKSByZXR1cm5zIHRoZSBzcGVjaWFsIHRva2VuIHR5cGUgTk9ORSBhbmQgZG9lcyBub3QgbW92ZQotIHRoZSBjdXJzb3IuCi0gPGJyLz48YnIvPgotIAotIFRoZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2N1cnJlbnRUb2tlblR5cGUoKSI+PENPREU+Y3VycmVudFRva2VuVHlwZSgpPC9DT0RFPjwvQT4gbWV0aG9kIAotIHdpbGwgcmV0dXJuIHRoZSB0eXBlIG9mIHRoZSB0b2tlbiB0aGF0IGlzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjdXJzb3IuIAotIFlvdSBjYW4gYWxzbyB1c2UgYSBudW1iZXIgb2YgY29udmVuaWVuY2UgbWV0aG9kcyB0aGF0IHRlc3QgZm9yIGEgcGFydGljdWxhciAKLSB0b2tlbiB0eXBlLiBUaGVzZSBpbmNsdWRlIHRoZSBtZXRob2RzIGlzU3RhcnQoKSwgCi0gaXNTdGFydGRvYygpLCBpc1RleHQoKSwgaXNBdHRyKCksIGFuZCBzbyBvbi4gRWFjaCByZXR1cm5zIGEgYm9vbGVhbiAKLSB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHRva2VuIHRoYXQgZm9sbG93cyB0aGUgY3Vyc29yIGlzIHRoZSB0eXBlIAotIGluIHF1ZXN0aW9uLiAKLSA8YnIvPjxici8+Ci0gCi0gQSBmZXcgb3RoZXIgbWV0aG9kcyBkZXRlcm1pbmUgd2hldGhlciB0aGUgdG9rZW4gaXMgb2YgYSBraW5kIHRoYXQgbWF5IGluY2x1ZGUgCi0gbXVsdGlwbGUgdG9rZW4gdHlwZXMuIFRoZSBpc0FueUF0dHIoKSBtZXRob2QsIGZvciBleGFtcGxlLCByZXR1cm5zIHRydWUgaWYKLSB0aGUgdG9rZW4gaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjdXJzb3IgaXMgYW55IGtpbmQgb2YgYXR0cmlidXRlLCAKLSBpbmNsdWRpbmcgdGhvc2Ugb2YgdGhlIEFUVFIgdG9rZW4gdHlwZSBhbmQgeG1sbnMgYXR0cmlidXRlcy4KLSA8YnIvPjxici8+Ci0gCi0gTGVnaXRpbWF0ZSBzZXF1ZW5jZXMgb2YgdG9rZW5zIGZvciBhbiBYTUwgZG9jdW1lbnQgYXJlIGRlc2NyaWJlZAotIGJ5IHRoZSBmb2xsb3dpbmcgQmFja3VzLU5hdXIgRm9ybSAoQk5GKTogPGJyLz4KLSAKLSA8cHJlPgotICZsdDtkb2MmZ3Q7IDo6PSBTVEFSVERPQyAmbHQ7YXR0cmlidXRlcyZndDsgJmx0O2NvbnRlbnQmZ3Q7IEVORERPQwotICZsdDtlbGVtZW50Jmd0OyA6Oj0gU1RBUlQgJmx0O2F0dHJpYnV0ZXMmZ3Q7ICZsdDtjb250ZW50Jmd0OyBFTkQKLSAmbHQ7YXR0cmlidXRlcyZndDsgOjo9ICggQVRUUiB8IE5BTUVTUEFDRSApICoKLSAmbHQ7Y29udGVudCZndDsgOjo9ICggQ09NTUVOVCB8IFBST0NJTlNUIHwgVEVYVCB8ICZsdDtlbGVtZW50Jmd0OyApICoKLSA8L3ByZT4KLSAKLSBOb3RlIHRoYXQgYSBsZWdpdGltYXRlIHNlcXVlbmNlIGlzIFNUQVJURE9DIEVORERPQywgdGhlIHJlc3VsdCBvZiAKLSBjcmVhdGluZyBhIGJyYW5kIG5ldyBpbnN0YW5jZSBvZiBhbiBlbXB0eSBkb2N1bWVudC4gQWxzbyBub3RlIHRoYXQgCi0gYXR0cmlidXRlcyBtYXkgb25seSBmb2xsb3cgY29udGFpbmVyIHRva2VucyAoU1RBUlRET0Mgb3IgU1RBUlQpCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibmVzdGVkX2NsYXNzX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TmVzdGVkIENsYXNzIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnRlcmZhY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuQ2hhbmdlU3RhbXAuaHRtbCI+WG1sQ3Vyc29yLkNoYW5nZVN0YW1wPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JlcHJlc2VudHMgdGhlIHN0YXRlIG9mIGEgZGNvdW1lbnQgYXQgYSBwYXJ0aWN1bGFyIHBvaW50Ci0gaW4gdGltZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwiPlhtbEN1cnNvci5Ub2tlblR5cGU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QW4gZW51bWVyYXRpb24gdGhhdCBpZGVudGlmaWVzIHRoZSB0eXBlIG9mIGFuIFhNTCB0b2tlbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuWG1sQm9va21hcmsuaHRtbCI+WG1sQ3Vyc29yLlhtbEJvb2ttYXJrPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1N1YmNsYXNzZXMgb2YgWG1sQm9va21hcmsgY2FuIGJlIHVzZWQgdG8gYW5ub3RhdGUgYW4gWE1MIGRvY3VtZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnRlcmZhY2U8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuWG1sTWFyay5odG1sIj5YbWxDdXJzb3IuWG1sTWFyazwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBbiBhYnN0cmFjdCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj48Q09ERT5YbWxDdXJzb3I8L0NPREU+PC9BPiBmYWN0b3J5LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2FkZFRvU2VsZWN0aW9uKCkiPmFkZFRvU2VsZWN0aW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QXBwZW5kcyB0aGUgY3VycmVudCBsb2NhdGlvbiBvZiB0aGUgY3Vyc29yIHRvIHRoZSBzZWxlY3Rpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNiZWdpbkVsZW1lbnQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPmJlZ2luRWxlbWVudDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW5zZXJ0cyBhIG5ldyBlbGVtZW50IGFyb3VuZCB0aGlzIGN1cnNvciwgZ2l2aW5nIHRoZSBlbGVtZW50IHRoZSBzcGVjaWZpZWQgCi0gcXVhbGlmaWVkIG5hbWUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNiZWdpbkVsZW1lbnQoamF2YS5sYW5nLlN0cmluZykiPmJlZ2luRWxlbWVudDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtsb2NhbE5hbWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtJbnNlcnRzIGEgbmV3IGVsZW1lbnQgYXJvdW5kIHRoaXMgY3Vyc29yLCBnaXZpbmcgdGhlIGVsZW1lbnQgdGhlIHNwZWNpZmllZCAKLSBsb2NhbCBuYW1lLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjYmVnaW5FbGVtZW50KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj5iZWdpbkVsZW1lbnQ8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bG9jYWxOYW1lLAotICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDt1cmkpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtJbnNlcnRzIGEgbmV3IGVsZW1lbnQgYXJvdW5kIHRoaXMgY3Vyc29yLCBnaXZpbmcgdGhlIGVsZW1lbnQgdGhlIHNwZWNpZmllZCAKLSBsb2NhbCBuYW1lIGFuZCBhc3NvY2lhdGluZyBpdCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjY2xlYXJCb29rbWFyayhqYXZhLmxhbmcuT2JqZWN0KSI+Y2xlYXJCb29rbWFyazwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtrZXkpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDbGVhcnMgdGhlIGJvb2ttYXJrIHdob3NlIGtleSBpcyBzcGVjaWZpZWQsIGlmIHRoZSBib29rbWFyawotIGV4aXN0cyBhdCB0aGlzIGN1cnNvcidzIGxvY2F0aW9uLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjY2xlYXJTZWxlY3Rpb25zKCkiPmNsZWFyU2VsZWN0aW9uczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NsZWFycyB0aGlzIGN1cnNvcidzIHNlbGVjdGlvbiwgYnV0IGRvZXMgbm90IG1vZGlmeSB0aGUgZG9jdW1lbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2NvbXBhcmVQb3NpdGlvbihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcikiPmNvbXBhcmVQb3NpdGlvbjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4mbmJzcDtjdXJzb3IpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGFuIGludGVnZXIgaW5kaWNhdGluZyB3aGV0aGVyIHRoaXMgY3Vyc29yIGlzIGJlZm9yZSwgCi0gYWZ0ZXIsIG9yIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGFzIHRoZSBzcGVjaWZpZWQgY3Vyc29yLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNjb3B5Q2hhcnMoaW50LCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcikiPmNvcHlDaGFyczwvQT48L0I+KGludCZuYnNwO21heENoYXJhY3RlckNvdW50LAotICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4mbmJzcDt0b0hlcmUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb3BpZXMgY2hhcmFjdGVycyB0byB0aGUgcG9zaXRpb24gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHNwZWNpZmllZCBjdXJzb3IuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNjb3B5WG1sKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yKSI+Y29weVhtbDwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4mbmJzcDt0b0hlcmUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb3BpZXMgdGhlIFhNTCBpbW1lZGlhdGVseSBhZnRlciB0aGlzIGN1cnNvciB0byB0aGUgbG9jYXRpb24KLSBzcGVjaWZpZWQgYnkgdGhlIDxlbT50b0hlcmU8L2VtPiBjdXJzb3IuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNjb3B5WG1sQ29udGVudHMob3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IpIj5jb3B5WG1sQ29udGVudHM8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Jm5ic3A7dG9IZXJlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29waWVzIHRoZSBjb250ZW50cyBvZiB0aGUgY29udGFpbmVyIChTVEFSVERPQyBPUiBTVEFSVCkgaW1tZWRpYXRlbHkgdG8KLSB0aGUgcmlnaHQgb2YgdGhlIGN1cnNvciB0byB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGJ5IHRoZSA8ZW0+dG9IZXJlPC9lbT4gY3Vyc29yLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+WG1sQ3Vyc29yLlRva2VuVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNjdXJyZW50VG9rZW5UeXBlKCkiPmN1cnJlbnRUb2tlblR5cGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IHRva2VuLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjZGlzcG9zZSgpIj5kaXNwb3NlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7RGVhbGxvY2F0ZXMgcmVzb3VyY2VzIG5lZWRlZCB0byBtYW5hZ2UgdGhlIGN1cnNvciwgcmVuZGVyaW5nIHRoaXMgY3Vyc29yCi0gaW5vcGVyYWJsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nKSI+ZXhlY1F1ZXJ5PC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3F1ZXJ5KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7RXhlY3V0ZXMgdGhlIHNwZWNpZmllZCBYUXVlcnkgZXhwcmVzc2lvbiBhZ2FpbnN0IHRoZSBYTUwgdGhpcwotIGN1cnNvciBpcyBpbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5leGVjUXVlcnk8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cXVlcnksCi0gICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0V4ZWN1dGVzIHRoZSBzcGVjaWZpZWQgWFF1ZXJ5IGV4cHJlc3Npb24gYWdhaW5zdCB0aGUgWE1MIHRoaXMKLSBjdXJzb3IgaXMgaW4sIGFuZCB1c2luZyB0aGUgc3BlY2lmaWVkIG9wdGlvbnMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNnZXRBbGxCb29rbWFya1JlZnMoamF2YS51dGlsLkNvbGxlY3Rpb24pIj5nZXRBbGxCb29rbWFya1JlZnM8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NvbGxlY3Rpb24uaHRtbCI+Q29sbGVjdGlvbjwvQT4mbmJzcDtsaXN0VG9GaWxsKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0cmlldmVzIGFsbCB0aGUgYm9va21hcmtzIGF0IHRoaXMgbG9jYXRpb24sIGFkZGluZyB0aGVtIHRvCi0gdGhlIHNwZWNpZmllZCBjb2xsZWN0aW9uLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjZ2V0QWxsTmFtZXNwYWNlcyhqYXZhLnV0aWwuTWFwKSI+Z2V0QWxsTmFtZXNwYWNlczwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTWFwLmh0bWwiPk1hcDwvQT4mbmJzcDthZGRUb1RoaXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBZGRzIHRvIHRoZSBzcGVjaWZpZWQgbWFwLCBhbGwgdGhlIG5hbWVzcGFjZXMgaW4gc2NvcGUgYXQgdGhlIGNvbnRhaW5lcgotIHdoZXJlIHRoaXMgY3Vyc29yIGlzIHBvc2l0aW9uZWQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNnZXRBdHRyaWJ1dGVUZXh0KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5nZXRBdHRyaWJ1dGVUZXh0PC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO2F0dHJOYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7V2hlbiBhdCBhIFNUQVJUIG9yIFNUQVJURE9DLCByZXR1cm5zIHRoZSBhdHRyaWJ1dGUgdGV4dCBmb3IgdGhlIGdpdmVuCi0gYXR0cmlidXRlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxCb29rbWFyay5odG1sIj5YbWxDdXJzb3IuWG1sQm9va21hcms8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjZ2V0Qm9va21hcmsoamF2YS5sYW5nLk9iamVjdCkiPmdldEJvb2ttYXJrPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO2tleSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHJpZXZlcyB0aGUgYm9va21hcmsgd2l0aCB0aGUgc3BlY2lmaWVkIGtleSAKLSBhdCB0aGlzIGN1cnNvcidzIGxvY2F0aW9uLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjZ2V0Q2hhcnMoKSI+Z2V0Q2hhcnM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGNoYXJhY3RlcnMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjdXJzb3IgdXAgdG8gdGhlIG5leHQgdG9rZW4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2dldENoYXJzKGNoYXJbXSwgaW50LCBpbnQpIj5nZXRDaGFyczwvQT48L0I+KGNoYXJbXSZuYnNwO3JldHVybmVkQ2hhcnMsCi0gICAgICAgICBpbnQmbmJzcDtvZmZzZXQsCi0gICAgICAgICBpbnQmbmJzcDttYXhDaGFyYWN0ZXJDb3VudCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvcGllcyBjaGFyYWN0ZXJzIHVwIHRvIHRoZSBzcGVjaWZpZWQgbWF4aW11bSBudW1iZXIsIGNvdW50aW5nIHJpZ2h0IGZyb20gCi0gdGhpcyBjdXJzb3IncyBsb2NhdGlvbiB0byB0aGUgY2hhcmFjdGVyIGF0IDxlbT5tYXhDaGFyYWN0ZXJDb3VudDwvZW0+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5DaGFuZ2VTdGFtcC5odG1sIj5YbWxDdXJzb3IuQ2hhbmdlU3RhbXA8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjZ2V0RG9jQ2hhbmdlU3RhbXAoKSI+Z2V0RG9jQ2hhbmdlU3RhbXA8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBjdXJyZW50IGNoYW5nZSBzdGFtcCBmb3IgdGhlIGRvY3VtZW50IHRoZSBjdXJyZW50IGN1cnNvciBpcyBpbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2dldE5hbWUoKSI+Z2V0TmFtZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgdG9rZW4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNnZXRPYmplY3QoKSI+Z2V0T2JqZWN0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgc3Ryb25nbHktdHlwZWQgWG1sT2JqZWN0IGF0IHRoZSBjdXJyZW50IFNUQVJULAotIFNUQVJURE9DLCBvciBBVFRSLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNnZXRTZWxlY3Rpb25Db3VudCgpIj5nZXRTZWxlY3Rpb25Db3VudDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGNvdW50IG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2dldFRleHRWYWx1ZSgpIj5nZXRUZXh0VmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtHZXRzIHRoZSB0ZXh0IHZhbHVlIG9mIHRoZSBjdXJyZW50IGRvY3VtZW50LCBlbGVtZW50LCBhdHRyaWJ1dGUsCi0gY29tbWVudCwgcHJvY2luc3Qgb3IgdGV4dCB0b2tlbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjZ2V0VGV4dFZhbHVlKGNoYXJbXSwgaW50LCBpbnQpIj5nZXRUZXh0VmFsdWU8L0E+PC9CPihjaGFyW10mbmJzcDtyZXR1cm5lZENoYXJzLAotICAgICAgICAgICAgIGludCZuYnNwO29mZnNldCwKLSAgICAgICAgICAgICBpbnQmbmJzcDttYXhDaGFyYWN0ZXJDb3VudCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvcGllcyB0aGUgdGV4dCB2YWx1ZSBvZiB0aGUgY3VycmVudCBkb2N1bWVudCwgZWxlbWVudCwgYXR0cmlidXRlLAotIGNvbW1lbnQsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gb3IgdGV4dCB0b2tlbiwgY291bnRpbmcgcmlnaHQgZnJvbSAKLSB0aGlzIGN1cnNvcidzIGxvY2F0aW9uIHVwIHRvIDxlbT5tYXhDaGFyYWN0ZXJDb3VudDwvZW0+LAotIGFuZCBjb3BpZXMgdGhlIHJldHVybmVkIHRleHQgaW50byA8ZW0+cmV0dXJuZWRDaGFyczwvZW0+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaGFzTmV4dFNlbGVjdGlvbigpIj5oYXNOZXh0U2VsZWN0aW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGVyZSBpcyBhIG5leHQgc2VsZWN0aW9uLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaGFzTmV4dFRva2VuKCkiPmhhc05leHRUb2tlbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgdGhlcmUgaXMgYSBuZXh0IHRva2VuLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaGFzUHJldlRva2VuKCkiPmhhc1ByZXZUb2tlbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgdGhlcmUgaXMgYSBwcmV2aW91cyB0b2tlbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2luc2VydEF0dHJpYnV0ZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+aW5zZXJ0QXR0cmlidXRlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO25hbWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtJbnNlcnRzIGEgbmV3IGF0dHJpYnV0ZSBpbW1lZGlhdGVseSBiZWZvcmUgdGhpcyBjdXJzb3IncyBsb2NhdGlvbiwgZ2l2aW5nIGl0Ci0gdGhlIHNwZWNpZmllZCBuYW1lLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaW5zZXJ0QXR0cmlidXRlKGphdmEubGFuZy5TdHJpbmcpIj5pbnNlcnRBdHRyaWJ1dGU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bG9jYWxOYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW5zZXJ0cyBhIG5ldyBhdHRyaWJ1dGUgaW1tZWRpYXRlbHkgYmVmb3JlIHRoaXMgY3Vyc29yJ3MgbG9jYXRpb24sIGdpdmluZyBpdAotIHRoZSBzcGVjaWZpZWQgbG9jYWwgbmFtZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2luc2VydEF0dHJpYnV0ZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+aW5zZXJ0QXR0cmlidXRlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO2xvY2FsTmFtZSwKLSAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7dXJpKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW5zZXJ0cyBhIG5ldyBhdHRyaWJ1dGUgaW1tZWRpYXRlbHkgYmVmb3JlIHRoaXMgY3Vyc29yJ3MgbG9jYXRpb24sIGdpdmluZyBpdAotIHRoZSBzcGVjaWZpZWQgbG9jYWwgbmFtZSBhbmQgYXNzb2NpYXRpbmcgaXQgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWVzcGFjZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2luc2VydEF0dHJpYnV0ZVdpdGhWYWx1ZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lLCBqYXZhLmxhbmcuU3RyaW5nKSI+aW5zZXJ0QXR0cmlidXRlV2l0aFZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW5zZXJ0cyBhbiBhdHRyaWJ1dGUgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBjdXJzb3IncyBsb2NhdGlvbiwgZ2l2aW5nIGl0Ci0gdGhlIHNwZWNpZmllZCBuYW1lIGFuZCB2YWx1ZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2luc2VydEF0dHJpYnV0ZVdpdGhWYWx1ZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+aW5zZXJ0QXR0cmlidXRlV2l0aFZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO05hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW5zZXJ0cyBhIG5ldyBhdHRyaWJ1dGUgaW1tZWRpYXRlbHkgYmVmb3JlIHRoaXMgY3Vyc29yJ3MgbG9jYXRpb24sIGdpdmluZyBpdAotIHRoZSBzcGVjaWZpZWQgdmFsdWUgYW5kIG5hbWUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNpbnNlcnRBdHRyaWJ1dGVXaXRoVmFsdWUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPmluc2VydEF0dHJpYnV0ZVdpdGhWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDt1cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW5zZXJ0cyBhbiBhdHRyaWJ1dGUgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBjdXJzb3IncyBsb2NhdGlvbiwgZ2l2aW5nIGl0Ci0gdGhlIHNwZWNpZmllZCBuYW1lIGFuZCB2YWx1ZSwgYW5kIGFzc29jaWF0aW5nIGl0IHdpdGggdGhlIHNwZWNpZmllZCBuYW1lc3BhY2UuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNpbnNlcnRDaGFycyhqYXZhLmxhbmcuU3RyaW5nKSI+aW5zZXJ0Q2hhcnM8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7dGV4dCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0luc2VydHMgdGhlIHNwZWNpZmllZCB0ZXh0IGltbWVkaWF0ZWx5IGJlZm9yZSB0aGlzIGN1cnNvcidzIGxvY2F0aW9uLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaW5zZXJ0Q29tbWVudChqYXZhLmxhbmcuU3RyaW5nKSI+aW5zZXJ0Q29tbWVudDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDt0ZXh0KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW5zZXJ0cyBhbiBYTUwgY29tbWVudCBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGN1cnNvcidzIGxvY2F0aW9uLCAKLSBnaXZpbmcgaXQgdGhlIHNwZWNpZmllZCBjb250ZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaW5zZXJ0RWxlbWVudChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+aW5zZXJ0RWxlbWVudDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW5zZXJ0cyBhbiBlbGVtZW50IGltbWVkaWF0ZWx5IGJlZm9yZSB0aGlzIGN1cnNvcidzIGxvY2F0aW9uLCBnaXZpbmcgCi0gdGhlIGVsZW1lbnQgdGhlIHNwZWNpZmllZCBxdWFsaWZpZWQgbmFtZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2luc2VydEVsZW1lbnQoamF2YS5sYW5nLlN0cmluZykiPmluc2VydEVsZW1lbnQ8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bG9jYWxOYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW5zZXJ0cyBhbiBlbGVtZW50IGltbWVkaWF0ZWx5IGJlZm9yZSB0aGlzIGN1cnNvcidzIGxvY2F0aW9uLCBnaXZpbmcgCi0gdGhlIGVsZW1lbnQgdGhlIHNwZWNpZmllZCBsb2NhbCBuYW1lLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaW5zZXJ0RWxlbWVudChqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+aW5zZXJ0RWxlbWVudDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtsb2NhbE5hbWUsCi0gICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDt1cmkpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtJbnNlcnRzIGEgbmV3IGVsZW1lbnQgaW1tZWRpYXRlbHkgYmVmb3JlIHRoaXMgY3Vyc29yJ3MgbG9jYXRpb24sIGdpdmluZyB0aGUKLSBlbGVtZW50IHRoZSBzcGVjaWZpZWQgbG9jYWwgbmFtZSBhbmQgYXNzb2NpYXRpbmcgaXQgd2l0aCBzcGVjaWZpZWQgbmFtZXNwYWNlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNpbnNlcnRFbGVtZW50V2l0aFRleHQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSwgamF2YS5sYW5nLlN0cmluZykiPmluc2VydEVsZW1lbnRXaXRoVGV4dDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lLAotICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDt0ZXh0KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW5zZXJ0cyBhIG5ldyBlbGVtZW50IGltbWVkaWF0ZWx5IGJlZm9yZSB0aGlzIGN1cnNvcidzIGxvY2F0aW9uLCBnaXZpbmcgdGhlCi0gZWxlbWVudCB0aGUgc3BlY2lmaWVkIHF1YWxpZmllZCBuYW1lIGFuZCBjb250ZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaW5zZXJ0RWxlbWVudFdpdGhUZXh0KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj5pbnNlcnRFbGVtZW50V2l0aFRleHQ8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bG9jYWxOYW1lLAotICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDt0ZXh0KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW5zZXJ0cyBhIG5ldyBlbGVtZW50IGltbWVkaWF0ZWx5IGJlZm9yZSB0aGlzIGN1cnNvcidzIGxvY2F0aW9uLCBnaXZpbmcgdGhlCi0gZWxlbWVudCB0aGUgc3BlY2lmaWVkIGxvY2FsIG5hbWUgYW5kIGNvbnRlbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNpbnNlcnRFbGVtZW50V2l0aFRleHQoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPmluc2VydEVsZW1lbnRXaXRoVGV4dDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtsb2NhbE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3VyaSwKLSAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7dGV4dCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0luc2VydHMgYSBuZXcgZWxlbWVudCBpbW1lZGlhdGVseSBiZWZvcmUgdGhpcyBjdXJzb3IncyBsb2NhdGlvbiwgZ2l2aW5nIHRoZQotIGVsZW1lbnQgdGhlIHNwZWNpZmllZCBsb2NhbCBuYW1lLCBhc3NvY2lhdGluZyBpdCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlLCAKLSBhbmQgZ2l2aW5nIGl0IHRoZSBzcGVjaWZpZWQgY29udGVudC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2luc2VydE5hbWVzcGFjZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+aW5zZXJ0TmFtZXNwYWNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3ByZWZpeCwKLSAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bmFtZXNwYWNlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW5zZXJ0cyBhIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGN1cnNvcidzIGxvY2F0aW9uLCAKLSBnaXZpbmcgaXQgdGhlIHNwZWNpZmllZCBwcmVmaXggYW5kIFVSSS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2luc2VydFByb2NJbnN0KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj5pbnNlcnRQcm9jSW5zdDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDt0YXJnZXQsCi0gICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7dGV4dCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0luc2VydHMgYW4gWE1MIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBjdXJzb3IncyBsb2NhdGlvbiwgCi0gZ2l2aW5nIGl0IHRoZSBzcGVjaWZpZWQgdGFyZ2V0IGFuZCB0ZXh0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaXNBbnlBdHRyKCkiPmlzQW55QXR0cjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgdGhpcyB0b2tlbiBpcyBhbnkgYXR0cmlidXRlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaXNBdFNhbWVQb3NpdGlvbkFzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yKSI+aXNBdFNhbWVQb3NpdGlvbkFzPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPiZuYnNwO2N1cnNvcik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0RldGVybWluZXMgaWYgdGhpcyBjdXJzb3IgaXMgYXQgdGhlIHNhbWUgcG9zaXRpb24gYXMKLSB0aGUgc3BlY2lmaWVkIGN1cnNvci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2lzQXR0cigpIj5pc0F0dHI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoaXMgdG9rZW4gaXMgYW4gQVRUUiB0b2tlbiB0eXBlLCBtZWFuaW5nIAotIGp1c3QgYmVmb3JlIGFuIGF0dHJpYnV0ZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2lzQ29tbWVudCgpIj5pc0NvbW1lbnQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoaXMgdG9rZW4gaXMgYSBDT01NRU5UIHRva2VuIHR5cGUsIG1lYW5pbmcgCi0ganVzdCBiZWZvcmUgYSBjb21tZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaXNDb250YWluZXIoKSI+aXNDb250YWluZXI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoaXMgdG9rZW4gaXMgYSBjb250YWluZXIgdG9rZW4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNpc0VuZCgpIj5pc0VuZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgdGhpcyB0b2tlbiBpcyBhbiBFTkQgdG9rZW4gdHlwZSwgbWVhbmluZyAKLSBqdXN0IGJlZm9yZSBhbiBlbGVtZW50J3MgZW5kLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaXNFbmRkb2MoKSI+aXNFbmRkb2M8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoaXMgdG9rZW4gaXMgYW4gRU5ERE9DIHRva2VuIHR5cGUsIG1lYW5pbmcgCi0gYXQgdGhlIHZlcnkgZW5kIG9mIHRoZSBkb2N1bWVudC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2lzRmluaXNoKCkiPmlzRmluaXNoPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiB0aGlzIHRva2VuIGlzIGEgZmluaXNoIHRva2VuLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaXNJblNhbWVEb2N1bWVudChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcikiPmlzSW5TYW1lRG9jdW1lbnQ8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Jm5ic3A7Y3Vyc29yKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7RGV0ZXJtaW5lcyBpZiB0aGUgc3BlY2lmaWVkIGN1cnNvciBpcyBpbiB0aGUgc2FtZSBkb2N1bWVudCBhcwotIHRoaXMgY3Vyc29yLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaXNMZWZ0T2Yob3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IpIj5pc0xlZnRPZjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4mbmJzcDtjdXJzb3IpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtEZXRlcm1pbmVzIGlmIHRoaXMgY3Vyc29yIGlzIHRvIHRoZSBsZWZ0IG9mIChvciBiZWZvcmUpCi0gdGhlIHNwZWNpZmllZCBjdXJzb3IuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNpc05hbWVzcGFjZSgpIj5pc05hbWVzcGFjZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgdGhpcyB0b2tlbiBpcyBhIE5BTUVTUEFDRSB0b2tlbiB0eXBlLCBtZWFuaW5nIAotIGp1c3QgYmVmb3JlIGEgbmFtZXNwYWNlIGRlY2xhcmF0aW9uLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaXNQcm9jaW5zdCgpIj5pc1Byb2NpbnN0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiB0aGlzIHRva2VuIGlzIGEgUFJPQ0lOU1QgdG9rZW4gdHlwZSwgbWVhbmluZyAKLSBqdXN0IGJlZm9yZSBhIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNpc1JpZ2h0T2Yob3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IpIj5pc1JpZ2h0T2Y8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Jm5ic3A7Y3Vyc29yKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7RGV0ZXJtaW5lcyBpZiB0aGlzIGN1cnNvciBpcyB0byB0aGUgcmlnaHQgb2YgKG9yIGFmdGVyKQotIHRoZSBzcGVjaWZpZWQgY3Vyc29yLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjaXNTdGFydCgpIj5pc1N0YXJ0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiB0aGlzIHRva2VuIGlzIGEgU1RBUlQgdG9rZW4gdHlwZSwgbWVhbmluZyAKLSBqdXN0IGJlZm9yZSBhbiBlbGVtZW50J3Mgc3RhcnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNpc1N0YXJ0ZG9jKCkiPmlzU3RhcnRkb2M8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoZSBjdXJyZW50IHRva2VuIGlzIGEgU1RBUlRET0MgdG9rZW4gdHlwZSwgbWVhbmluZyAKLSBhdCB0aGUgdmVyeSByb290IG9mIHRoZSBkb2N1bWVudC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI2lzVGV4dCgpIj5pc1RleHQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoZSB0aGlzIHRva2VuIGlzIGEgVEVYVCB0b2tlbiB0eXBlLCBtZWFuaW5nIAotIGp1c3QgYmVmb3JlIG9yIGluc2lkZSB0ZXh0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNtb3ZlQ2hhcnMoaW50LCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcikiPm1vdmVDaGFyczwvQT48L0I+KGludCZuYnNwO21heENoYXJhY3RlckNvdW50LAotICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4mbmJzcDt0b0hlcmUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtNb3ZlcyBjaGFyYWN0ZXJzIGltbWVkaWF0ZWx5IGFmdGVyIHRoaXMgY3Vyc29yIHRvIHRoZSBwb3NpdGlvbiBpbW1lZGlhdGVseSAKLSBhZnRlciB0aGUgc3BlY2lmaWVkIGN1cnNvci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI21vdmVYbWwob3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IpIj5tb3ZlWG1sPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPiZuYnNwO3RvSGVyZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO01vdmVzIHRoZSBYTUwgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhpcyBjdXJzb3IgdG8gdGhlIGxvY2F0aW9uCi0gc3BlY2lmaWVkIGJ5IHRoZSA8ZW0+dG9IZXJlPC9lbT4gY3Vyc29yLCBzaGlmdGluZyBYTUwgYXQgdGhhdCBsb2NhdGlvbiAKLSB0byB0aGUgcmlnaHQgdG8gbWFrZSByb29tLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjbW92ZVhtbENvbnRlbnRzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yKSI+bW92ZVhtbENvbnRlbnRzPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPiZuYnNwO3RvSGVyZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO01vdmVzIHRoZSBjb250ZW50cyBvZiB0aGUgY29udGFpbmVyIChTVEFSVERPQyBPUiBTVEFSVCkgaW1tZWRpYXRlbHkgYWZ0ZXIKLSB0aGlzIGN1cnNvciB0byB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGJ5IHRoZSA8ZW0+dG9IZXJlPC9lbT4gY3Vyc29yLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjbmFtZXNwYWNlRm9yUHJlZml4KGphdmEubGFuZy5TdHJpbmcpIj5uYW1lc3BhY2VGb3JQcmVmaXg8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cHJlZml4KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbmFtZXNwYWNlIFVSSSBpbmRpY2F0ZWQgYnkgdGhlIGdpdmVuIHByZWZpeC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3BvcCgpIj5wb3A8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXN0b3JlcyB0aGUgY3Vyc29yIGxvY2F0aW9uIG1vc3QgcmVjZW50bHkgc2F2ZWQgd2l0aCB0aGUgcHVzaCgpIG1ldGhvZC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3ByZWZpeEZvck5hbWVzcGFjZShqYXZhLmxhbmcuU3RyaW5nKSI+cHJlZml4Rm9yTmFtZXNwYWNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO25hbWVzcGFjZVVSSSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBwcmVmaXggdGhhdCBjYW4gYmUgdXNlZCB0byBpbmRpY2F0ZSBhIG5hbWVzcGFjZSBVUkkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3ByZXZUb2tlblR5cGUoKSI+cHJldlRva2VuVHlwZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHR5cGUgb2YgdGhlIHByZXZpb3VzIHRva2VuLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjcHVzaCgpIj5wdXNoPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2F2ZXMgdGhlIGN1cnJlbnQgbG9jYXRpb24gb2YgdGhpcyBjdXJzb3Igb24gYW4gaW50ZXJuYWwgc3RhY2sgb2Ygc2F2ZWQKLSBwb3NpdGlvbnMgKGluZGVwZW5kZW50IG9mIHNlbGVjdGlvbikuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNyZW1vdmVBdHRyaWJ1dGUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPnJlbW92ZUF0dHJpYnV0ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDthdHRyTmFtZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1doZW4gYXQgYSBTVEFSVCBvciBTVEFSVERPQywgcmVtb3ZlcyB0aGUgYXR0cmlidXRlIHdpdGggdGhlIGdpdmVuIG5hbWUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3JlbW92ZUNoYXJzKGludCkiPnJlbW92ZUNoYXJzPC9BPjwvQj4oaW50Jm5ic3A7bWF4Q2hhcmFjdGVyQ291bnQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZW1vdmVzIGNoYXJhY3RlcnMgdXAgdG8gdGhlIHNwZWNpZmllZCBtYXhpbXVtIG51bWJlciwgY291bnRpbmcgcmlnaHQgZnJvbSAKLSB0aGlzIGN1cnNvcidzIGxvY2F0aW9uIHRvIHRoZSBjaGFyYWN0ZXIgYXQgPGVtPm1heENoYXJhY3RlckNvdW50PC9lbT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNyZW1vdmVYbWwoKSI+cmVtb3ZlWG1sPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmVtb3ZlcyB0aGUgWE1MIHRoYXQgaXMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhpcyBjdXJzb3IuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNyZW1vdmVYbWxDb250ZW50cygpIj5yZW1vdmVYbWxDb250ZW50czwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JlbW92ZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb250YWluZXIgKFNUQVJURE9DIE9SIFNUQVJUKSBpbW1lZGlhdGVseSBhZnRlcgotIHRoaXMgY3Vyc29yLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+c2VsZWN0UGF0aDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtwYXRoKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7RXhlY3V0ZXMgdGhlIHNwZWNpZmllZCBYUGF0aCBleHByZXNzaW9uIGFnYWluc3QgdGhlIFhNTCB0aGF0IHRoaXMgCi0gY3Vyc29yIGlzIGluLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zZWxlY3RQYXRoPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3BhdGgsCi0gICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtFeGVjdXRlcyB0aGUgc3BlY2lmaWVkIFhQYXRoIGV4cHJlc3Npb24gYWdhaW5zdCB0aGUgWE1MIHRoYXQgdGhpcyAKLSBjdXJzb3IgaXMgaW4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNzZXRBdHRyaWJ1dGVUZXh0KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUsIGphdmEubGFuZy5TdHJpbmcpIj5zZXRBdHRyaWJ1dGVUZXh0PC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO2F0dHJOYW1lLAotICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtXaGVuIGF0IGEgU1RBUlQgb3IgU1RBUlRET0MsIHNldHMgdGhlIGF0dHJpYnV0ZSB0ZXh0IGZvciB0aGUgZ2l2ZW4KLSBhdHRyaWJ1dGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNzZXRCb29rbWFyayhvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvci5YbWxCb29rbWFyaykiPnNldEJvb2ttYXJrPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuWG1sQm9va21hcmsuaHRtbCI+WG1sQ3Vyc29yLlhtbEJvb2ttYXJrPC9BPiZuYnNwO2Jvb2ttYXJrKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyBhIGJvb2ttYXJrIHRvIHRoZSBkb2N1bWVudCBhdCB0aGlzIGN1cnNvcidzIGxvY2F0aW9uLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjc2V0TmFtZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+c2V0TmFtZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCB0b2tlbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3NldFRleHRWYWx1ZShjaGFyW10sIGludCwgaW50KSI+c2V0VGV4dFZhbHVlPC9BPjwvQj4oY2hhcltdJm5ic3A7c291cmNlQ2hhcnMsCi0gICAgICAgICAgICAgaW50Jm5ic3A7b2Zmc2V0LAotICAgICAgICAgICAgIGludCZuYnNwO2xlbmd0aCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHRleHQgdmFsdWUgb2YgdGhlIFhNTCBhdCB0aGlzIGN1cnNvcidzIGxvY2F0aW9uIChpZiB0aGF0IFhNTCdzCi0gdG9rZW4gdHlwZSBpcyBTVEFSVCwgU1RBUlRET0MsIEFUVFIsIENPTU1FTlQgb3IgUFJPQ0lOU1QpIHRvIHRoZSAKLSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlciBhcnJheS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3NldFRleHRWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0VGV4dFZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3RleHQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB0ZXh0IHZhbHVlIG9mIHRoZSBYTUwgYXQgdGhpcyBjdXJzb3IncyBsb2NhdGlvbiBpZiB0aGF0IFhNTCdzCi0gdG9rZW4gdHlwZSBpcyBTVEFSVCwgU1RBUlRET0MsIEFUVFIsIENPTU1FTlQgb3IgUFJPQ0lOU1QuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCN0b0Jvb2ttYXJrKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yLlhtbEJvb2ttYXJrKSI+dG9Cb29rbWFyazwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbEJvb2ttYXJrLmh0bWwiPlhtbEN1cnNvci5YbWxCb29rbWFyazwvQT4mbmJzcDtib29rbWFyayk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO01vdmVzIHRoaXMgY3Vyc29yIHRvIHRoZSBzYW1lIHBvc2l0aW9uIGFzIHRoZSBib29rbWFyay48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3RvQ2hpbGQoaW50KSI+dG9DaGlsZDwvQT48L0I+KGludCZuYnNwO2luZGV4KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgY2hpbGQgZWxlbWVudCBzcGVjaWZpZWQgYnkgPGVtPmluZGV4PC9lbT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCN0b0NoaWxkKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj50b0NoaWxkPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO25hbWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtNb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBmaXJzdCBjaGlsZCBlbGVtZW50IG9mIHRoZSBzcGVjaWZpZWQgcXVhbGlmaWVkIG5hbWUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCN0b0NoaWxkKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUsIGludCkiPnRvQ2hpbGQ8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7bmFtZSwKLSAgICAgICAgaW50Jm5ic3A7aW5kZXgpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtNb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBzcGVjaWZpZWQgPGVtPmluZGV4PC9lbT4gY2hpbGQgZWxlbWVudCBvZiB0aGUgCi0gc3BlY2lmaWVkIG5hbWUsIHdoZXJlIHRoYXQgZWxlbWVudCBpcyB0aGUgLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjdG9DaGlsZChqYXZhLmxhbmcuU3RyaW5nKSI+dG9DaGlsZDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtuYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgZmlyc3QgY2hpbGQgZWxlbWVudCBvZiB0aGUgc3BlY2lmaWVkIG5hbWUgaW4gCi0gbm8gbmFtZXNwYWNlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjdG9DaGlsZChqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+dG9DaGlsZDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtuYW1lc3BhY2UsCi0gICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtuYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgZmlyc3QgY2hpbGQgZWxlbWVudCBvZiB0aGUgc3BlY2lmaWVkIG5hbWUgaW4gdGhlIAotIHNwZWNpZmllZCBuYW1lc3BhY2UuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCN0b0N1cnNvcihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcikiPnRvQ3Vyc29yPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPiZuYnNwO21vdmVUbyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO01vdmVzIHRoaXMgY3Vyc29yIHRvIHRoZSBzYW1lIHBvc2l0aW9uIGFzIHRoZSBtb3ZlVG8gY3Vyc29yLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjdG9FbmREb2MoKSI+dG9FbmREb2M8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtNb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBFTkRET0MgdG9rZW4sIHdoaWNoIGlzIHRoZSBlbmQKLSBvZiB0aGUgZG9jdW1lbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3RvRW5kVG9rZW4oKSI+dG9FbmRUb2tlbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO01vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIEVORCBvciBFTkRET0MgdG9rZW4gY29ycmVzcG9uZGluZyB0byB0aGUKLSBjdXJyZW50IFNUQVJUIG9yIFNUQVJURE9DLCBhbmQgcmV0dXJucyBFTkQgb3IgRU5ERE9DLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjdG9GaXJzdEF0dHJpYnV0ZSgpIj50b0ZpcnN0QXR0cmlidXRlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgZmlyc3QgYXR0cmlidXRlIG9mIHRoaXMgZWxlbWVudCwgb3IKLSByZXR1cm5zIGZhbHNlIGFuZCBkb2VzIG5vdCBtb3ZlIHRoZSBjdXJzb3IgaWYgdGhlcmUgYXJlIG5vCi0gYXR0cmlidXRlcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3RvRmlyc3RDaGlsZCgpIj50b0ZpcnN0Q2hpbGQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtNb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBmaXJzdCBjaGlsZCBlbGVtZW50LCBvciByZXR1cm5zIGZhbHNlIGFuZAotIGRvZXMgbm90IG1vdmUgdGhlIGN1cnNvciBpZiB0aGVyZSBhcmUgbm8gZWxlbWVudCBjaGlsZHJlbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwiPlhtbEN1cnNvci5Ub2tlblR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjdG9GaXJzdENvbnRlbnRUb2tlbigpIj50b0ZpcnN0Q29udGVudFRva2VuPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgZmlyc3QgdG9rZW4gaW4gdGhlIGNvbnRlbnQgb2YgdGhlIGN1cnJlbnQKLSBTVEFSVCBvciBTVEFSVERPQy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3RvTGFzdEF0dHJpYnV0ZSgpIj50b0xhc3RBdHRyaWJ1dGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtNb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBsYXN0IGF0dHJpYnV0ZSBvZiB0aGlzIGVsZW1lbnQsIG9yCi0gcmV0dXJucyBmYWxzZSBhbmQgZG9lcyBub3QgbW92ZSB0aGUgY3Vyc29yIGlmIHRoZXJlIGFyZSBubwotIGF0dHJpYnV0ZXMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCN0b0xhc3RDaGlsZCgpIj50b0xhc3RDaGlsZDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO01vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGxhc3QgZWxlbWVudCBjaGlsZCwgb3IgcmV0dXJucyBmYWxzZSBhbmQKLSBkb2VzIG5vdCBtb3ZlIHRoZSBjdXJzb3IgaWYgdGhlcmUgYXJlIG5vIGVsZW1lbnQgY2hpbGRyZW4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCN0b05leHRBdHRyaWJ1dGUoKSI+dG9OZXh0QXR0cmlidXRlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgbmV4dCBzaWJsaW5nIGF0dHJpYnV0ZSwgb3IgcmV0dXJucwotIGZhbHNlIGFuZCBkb2VzIG5vdCBtb3ZlIHRoZSBjdXJzb3IgaWYgdGhlcmUgaXMgbm8gbmV4dAotIHNpYmxpbmcgYXR0cmlidXRlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxCb29rbWFyay5odG1sIj5YbWxDdXJzb3IuWG1sQm9va21hcms8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjdG9OZXh0Qm9va21hcmsoamF2YS5sYW5nLk9iamVjdCkiPnRvTmV4dEJvb2ttYXJrPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO2tleSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO01vdmVzIHRoaXMgY3Vyc29yIHRvIHRoZSBsb2NhdGlvbiBhZnRlciBpdHMgY3VycmVudCBwb3NpdGlvbgotIHdoZXJlIGEgYm9va21hcmsgd2l0aCB0aGUgZ2l2ZW4ga2V5IGV4aXN0cy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjdG9OZXh0Q2hhcihpbnQpIj50b05leHRDaGFyPC9BPjwvQj4oaW50Jm5ic3A7bWF4Q2hhcmFjdGVyQ291bnQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtNb3ZlcyB0aGUgY3Vyc29yIGZvcndhcmQgYnkgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgY2hhcmFjdGVycywgYW5kCi0gc3RvcHMgYXQgdGhlIG5leHQgbm9uLVRFWFQgdG9rZW4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCN0b05leHRTZWxlY3Rpb24oKSI+dG9OZXh0U2VsZWN0aW9uPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7TW92ZXMgdGhpcyBjdXJzb3IgdG8gdGhlIG5leHQgbG9jYXRpb24gaW4gdGhlIHNlbGVjdGlvbiwgCi0gaWYgYW55LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjdG9OZXh0U2libGluZygpIj50b05leHRTaWJsaW5nPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgbmV4dCBzaWJsaW5nIGVsZW1lbnQsIG9yIHJldHVybnMKLSBmYWxzZSBhbmQgZG9lcyBub3QgbW92ZSB0aGUgY3Vyc29yIGlmIHRoZXJlIGlzIG5vIG5leHQgc2libGluZwotIGVsZW1lbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCN0b05leHRTaWJsaW5nKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj50b05leHRTaWJsaW5nPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO25hbWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtNb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBuZXh0IHNpYmxpbmcgZWxlbWVudCBvZiB0aGUgc3BlY2lmaWVkIAotIHF1YWxpZmllZCBuYW1lLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjdG9OZXh0U2libGluZyhqYXZhLmxhbmcuU3RyaW5nKSI+dG9OZXh0U2libGluZzwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtuYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgbmV4dCBzaWJsaW5nIGVsZW1lbnQgb2YgdGhlIHNwZWNpZmllZCBuYW1lIGluIG5vCi0gbmFtZXNwYWNlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjdG9OZXh0U2libGluZyhqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+dG9OZXh0U2libGluZzwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtuYW1lc3BhY2UsCi0gICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtuYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgbmV4dCBzaWJsaW5nIGVsZW1lbnQgb2YgdGhlIHNwZWNpZmllZCBuYW1lIAotIGluIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+WG1sQ3Vyc29yLlRva2VuVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCN0b05leHRUb2tlbigpIj50b05leHRUb2tlbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO01vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIG5leHQgdG9rZW4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCN0b1BhcmVudCgpIj50b1BhcmVudDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO01vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIHBhcmVudCBlbGVtZW50IG9yIFNUQVJURE9DLCBvciByZXR1cm5zCi0gZmFsc2UgYW5kIGRvZXMgbm90IG1vdmUgdGhlIGN1cnNvciBpZiB0aGVyZSBpcyBubyBwYXJlbnQuPGJyLz48YnIvPgotCi0gV29ya3MgaWYgeW91J3JlIGluIGF0dHJpYnV0ZXMgb3IgY29udGVudC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3RvUHJldkF0dHJpYnV0ZSgpIj50b1ByZXZBdHRyaWJ1dGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtNb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBwcmV2aW91cyBzaWJsaW5nIGF0dHJpYnV0ZSwgb3IgcmV0dXJucwotIGZhbHNlIGFuZCBkb2VzIG5vdCBtb3ZlIHRoZSBjdXJzb3IgaWYgdGhlcmUgaXMgbm8gcHJldmlvdXMKLSBzaWJsaW5nIGF0dHJpYnV0ZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuWG1sQm9va21hcmsuaHRtbCI+WG1sQ3Vyc29yLlhtbEJvb2ttYXJrPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3RvUHJldkJvb2ttYXJrKGphdmEubGFuZy5PYmplY3QpIj50b1ByZXZCb29rbWFyazwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtrZXkpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtNb3ZlcyB0aGlzIGN1cnNvciB0byB0aGUgbG9jYXRpb24gYmVmb3JlIGl0cyBjdXJyZW50IHBvc2l0aW9uCi0gd2hlcmUgYSBib29rbWFyayB3aXRoIHRoZSBnaXZlbiBrZXkgZXhpc3RzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCN0b1ByZXZDaGFyKGludCkiPnRvUHJldkNoYXI8L0E+PC9CPihpbnQmbmJzcDttYXhDaGFyYWN0ZXJDb3VudCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO01vdmVzIHRoZSBjdXJzb3IgYmFja3dhcmRzIGJ5IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBnaXZlbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3RvUHJldlNpYmxpbmcoKSI+dG9QcmV2U2libGluZzwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO01vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIHByZXZpb3VzIHNpYmxpbmcgZWxlbWVudCwgb3IgcmV0dXJucwotIGZhbHNlIGFuZCBkb2VzIG5vdCBtb3ZlIHRoZSBjdXJzb3IgaWYgdGhlcmUgaXMgbm8gcHJldmlvdXMgc2libGluZwotIGVsZW1lbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sI3RvUHJldlRva2VuKCkiPnRvUHJldlRva2VuPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgcHJldmlvdXMgdG9rZW4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCN0b1NlbGVjdGlvbihpbnQpIj50b1NlbGVjdGlvbjwvQT48L0I+KGludCZuYnNwO2kpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtNb3ZlcyB0aGlzIGN1cnNvciB0byB0aGUgc3BlY2lmaWVkIGxvY2F0aW9uIGluIHRoZSBzZWxlY3Rpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCN0b1N0YXJ0RG9jKCkiPnRvU3RhcnREb2M8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtNb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBTVEFSVERPQyB0b2tlbiwgd2hpY2ggaXMgdGhlIAotIHJvb3Qgb2YgdGhlIGRvY3VtZW50LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxUb2tlblNvdXJjZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjZG9jdW1lbnRQcm9wZXJ0aWVzKCkiPmRvY3VtZW50UHJvcGVydGllczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNtb25pdG9yKCkiPm1vbml0b3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3Q3Vyc29yKCkiPm5ld0N1cnNvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKCkiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0lucHV0U3RyZWFtKCkiPm5ld0lucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0lucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0lucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcigpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdYTUxJbnB1dFN0cmVhbSgpIj5uZXdYTUxJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdYTUxJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdYTUxJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSkiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSkiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uV3JpdGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uV3JpdGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQoKSI+eG1sVGV4dDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnhtbFRleHQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZGlzcG9zZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1kaXNwb3NlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5kaXNwb3NlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+RGVhbGxvY2F0ZXMgcmVzb3VyY2VzIG5lZWRlZCB0byBtYW5hZ2UgdGhlIGN1cnNvciwgcmVuZGVyaW5nIHRoaXMgY3Vyc29yCi0gaW5vcGVyYWJsZS4gQmVjYXVzZSBjdXJzb3JzIGFyZSBtYW5hZ2VkIGJ5IGEgbWVjaGFuaXNtIHdoaWNoIHN0b3JlcyB0aGUgCi0gWE1MLCBzaW1wbHkgbGV0dGluZyBhIGN1cnNvciBnbyBvdXQgb2Ygc2NvcGUgYW5kIGhhdmluZyB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IKLSBhdHRlbXB0IHRvIHJlY2xhaW0gaXQgbWF5IG5vdCBwcm9kdWNlIGRlc2lyYWJsZSBwZXJmb3JtYW5jZS48YnIvPjxici8+Ci0KLSBTbywgZXhwbGljaXRseSBkaXNwb3NpbmcgYSBjdXJzb3IgYWxsb3dzIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uCi0gdG8gcmVsZWFzZSBpdHMgcmVzcG9uc2liaWxpdHkgb2YgbWFpbnRhaW5pbmcgaXRzIHBvc2l0aW9uLjxici8+PGJyLz4KLQotIEFmdGVyIGEgY3Vyc29yIGhhcyBiZWVuIGRpc3Bvc2VkLCBpdCBtYXkgbm90IGJlIHVzZWQgYWdhaW4uICBJdCBjYW4KLSB0aHJvdyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gb3IgTnVsbFBvaW50ZXJFeGNlcHRpb24gaWYgdXNlZCBhZnRlcgotIGRpc3Bvc2FsLjxici8+PGJyLz4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0idG9DdXJzb3Iob3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IpIj48IS0tIC0tPjwvQT48SDM+Ci10b0N1cnNvcjwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+dG9DdXJzb3I8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4mbmJzcDttb3ZlVG8pPC9QUkU+Ci08REw+Ci08REQ+TW92ZXMgdGhpcyBjdXJzb3IgdG8gdGhlIHNhbWUgcG9zaXRpb24gYXMgdGhlIG1vdmVUbyBjdXJzb3IuICBpZiB0aGUKLSBtb3ZlVG8gY3Vyc29yIGlzIGluIGEgZGlmZmVyZW50IGRvY3VtZW50IGZyb20gdGhpcyBjdXJzb3IsIHRoaXMgY3Vyc29yCi0gd2lsbCBub3QgYmUgbW92ZWQsIGFuZCBmYWxzZSByZXR1cm5lZC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bW92ZVRvPC9DT0RFPiAtIFRoZSBjdXJzb3IgYXQgdGhlIGxvY2F0aW9uIHRvIHdoaWNoIHRoaXMgY3Vyc29yCi0gc2hvdWxkIGJlIG1vdmVkLgotPERUPjxCPlJldHVybnM6PC9CPjxERD50cnVlIGlmIHRoZSBjdXJzb3IgbW92ZWQ7IG90aGVyd2lzZSwgZmFsc2UuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwdXNoKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXB1c2g8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnB1c2g8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5TYXZlcyB0aGUgY3VycmVudCBsb2NhdGlvbiBvZiB0aGlzIGN1cnNvciBvbiBhbiBpbnRlcm5hbCBzdGFjayBvZiBzYXZlZAotIHBvc2l0aW9ucyAoaW5kZXBlbmRlbnQgb2Ygc2VsZWN0aW9uKS4gVGhpcyBsb2NhdGlvbiBtYXkgYmUgcmVzdG9yZWQKLSBsYXRlciBieSBjYWxsaW5nIHRoZSBwb3AoKSBtZXRob2QuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBvcCgpIj48IS0tIC0tPjwvQT48SDM+Ci1wb3A8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPnBvcDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJlc3RvcmVzIHRoZSBjdXJzb3IgbG9jYXRpb24gbW9zdCByZWNlbnRseSBzYXZlZCB3aXRoIHRoZSBwdXNoKCkgbWV0aG9kLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRydWUgaWYgdGhlcmUgd2FzIGEgbG9jYXRpb24gdG8gcmVzdG9yZTsgb3RoZXJ3aXNlLCBmYWxzZS48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNlbGVjdFBhdGg8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNlbGVjdFBhdGg8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtwYXRoKTwvUFJFPgotPERMPgotPEREPkV4ZWN1dGVzIHRoZSBzcGVjaWZpZWQgWFBhdGggZXhwcmVzc2lvbiBhZ2FpbnN0IHRoZSBYTUwgdGhhdCB0aGlzIAotIGN1cnNvciBpcyBpbi4gIFRoZSBjdXJzb3JzIHBvc2l0aW9uIGRvZXMgbm90IGNoYW5nZS4gIFRvIG5hdmlnYXRlIHRvIHRoZQotIHNlbGVjdGlvbnMsIHVzZSBoYXNOZXh0U2VsZWN0aW9uIGFuZCB0b05leHRTZWxlY3Rpb24gKHNpbWlsYXIgdG8KLSBqYXZhLnV0aWwuSXRlcmF0b3IpLjxici8+PGJyLz4KLSAKLSBUaGUgcm9vdCByZWZlcnJlZCB0byBieSB0aGUgZXhwcmVzc2lvbiBzaG91bGQgYmUgZ2l2ZW4gYXMgCi0gYSBkb3QuIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBwYXRoIGV4cHJlc3Npb246Ci0gPHByZT4KLSBjdXJzb3Iuc2VsZWN0UGF0aCgiLi9wdXJjaGFzZS1vcmRlci9saW5lLWl0ZW1bcHJpY2UgPD0gMjAuMDBdIik7Ci0gPC9wcmU+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnBhdGg8L0NPREU+IC0gVGhlIHBhdGggZXhwcmVzc2lvbiB0byBleGVjdXRlLgotPERUPjxCPlRocm93czo8L0I+Ci08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxSdW50aW1lRXhjZXB0aW9uLmh0bWwiPlhtbFJ1bnRpbWVFeGNlcHRpb248L0E+PC9DT0RFPiAtIElmIHRoZSBxdWVyeSBleHByZXNzaW9uIGlzIGludmFsaWQuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXNlbGVjdFBhdGg8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNlbGVjdFBhdGg8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvUFJFPgotPERMPgotPEREPkV4ZWN1dGVzIHRoZSBzcGVjaWZpZWQgWFBhdGggZXhwcmVzc2lvbiBhZ2FpbnN0IHRoZSBYTUwgdGhhdCB0aGlzIAotIGN1cnNvciBpcyBpbi4gVGhlIGN1cnNvcidzIHBvc2l0aW9uIGRvZXMgbm90IGNoYW5nZS4gIFRvIG5hdmlnYXRlIHRvIHRoZQotIHNlbGVjdGlvbnMsIHVzZSBoYXNOZXh0U2VsZWN0aW9uIGFuZCB0b05leHRTZWxlY3Rpb24gKHNpbWlsYXIgdG8KLSBqYXZhLnV0aWwuSXRlcmF0b3IpLjxici8+PGJyLz4KLSAKLSBUaGUgcm9vdCByZWZlcnJlZCB0byBieSB0aGUgZXhwcmVzc2lvbiBzaG91bGQgYmUgZ2l2ZW4gYXMgCi0gYSBkb3QuIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBwYXRoIGV4cHJlc3Npb246Ci0gPHByZT4KLSBjdXJzb3Iuc2VsZWN0UGF0aCgiLi9wdXJjaGFzZS1vcmRlci9saW5lLWl0ZW1bcHJpY2UgPD0gMjAuMDBdIik7Ci0gPC9wcmU+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnBhdGg8L0NPREU+IC0gVGhlIHBhdGggZXhwcmVzc2lvbiB0byBleGVjdXRlLjxERD48Q09ERT5vcHRpb25zPC9DT0RFPiAtIE9wdGlvbnMgZm9yIHRoZSBxdWVyeS4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gY2FsbCAKLSB0aGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0WHF1ZXJ5Q3VycmVudE5vZGVWYXIoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPlhtbE9wdGlvbnMuc2V0WHF1ZXJ5Q3VycmVudE5vZGVWYXIoU3RyaW5nKTwvQ09ERT48L0E+Ci0gbWV0aG9kIHRvIHNwZWNpZnkgYSBwYXJ0aWN1bGFyIG5hbWUgZm9yIHRoZSBxdWVyeSBleHByZXNzaW9uIAotIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIHRoZSBjb250ZXh0IG5vZGUuCi08RFQ+PEI+VGhyb3dzOjwvQj4KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFJ1bnRpbWVFeGNlcHRpb24uaHRtbCI+WG1sUnVudGltZUV4Y2VwdGlvbjwvQT48L0NPREU+IC0gSWYgdGhlIHF1ZXJ5IGV4cHJlc3Npb24gaXMgaW52YWxpZC48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Imhhc05leHRTZWxlY3Rpb24oKSI+PCEtLSAtLT48L0E+PEgzPgotaGFzTmV4dFNlbGVjdGlvbjwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aGFzTmV4dFNlbGVjdGlvbjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgd2hldGhlciBvciBub3QgdGhlcmUgaXMgYSBuZXh0IHNlbGVjdGlvbi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50cnVlIGlmIHRoZXJlIGlzIGEgbmV4dCBzZWxlY3Rpb247IG90aGVyd2lzZSwgZmFsc2UuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ0b05leHRTZWxlY3Rpb24oKSI+PCEtLSAtLT48L0E+PEgzPgotdG9OZXh0U2VsZWN0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj50b05leHRTZWxlY3Rpb248L0I+KCk8L1BSRT4KLTxETD4KLTxERD5Nb3ZlcyB0aGlzIGN1cnNvciB0byB0aGUgbmV4dCBsb2NhdGlvbiBpbiB0aGUgc2VsZWN0aW9uLCAKLSBpZiBhbnkuIFNlZSB0aGUgc2VsZWN0UGF0aCgpIGFuZCBhZGRUb1NlbGVjdGlvbigpIG1ldGhvZHMuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dHJ1ZSBpZiB0aGUgY3Vyc29yIG1vdmVkOyBvdGhlcndpc2UsIGZhbHNlLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0idG9TZWxlY3Rpb24oaW50KSI+PCEtLSAtLT48L0E+PEgzPgotdG9TZWxlY3Rpb248L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPnRvU2VsZWN0aW9uPC9CPihpbnQmbmJzcDtpKTwvUFJFPgotPERMPgotPEREPk1vdmVzIHRoaXMgY3Vyc29yIHRvIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24gaW4gdGhlIHNlbGVjdGlvbi4gCi0gSWYgaSBpcyBsZXNzIHRoYW4gemVybyBvciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNlbGVjdGlvbgotIGNvdW50LCB0aGlzIG1ldGhvZCByZXR1cm5zIGZhbHNlLgotICAKLSBTZWUgYWxzbyB0aGUgc2VsZWN0UGF0aCgpIGFuZCBhZGRUb1NlbGVjdGlvbigpIG1ldGhvZHMuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmk8L0NPREU+IC0gVGhlIGluZGV4IG9mIHRoZSBkZXNpcmVkIGxvY2F0aW9uLgotPERUPjxCPlJldHVybnM6PC9CPjxERD50cnVlIGlmIHRoZSBjdXJzb3Igd2FzIG1vdmVkOyBvdGhlcndpc2UsIGZhbHNlLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U2VsZWN0aW9uQ291bnQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U2VsZWN0aW9uQ291bnQ8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+Z2V0U2VsZWN0aW9uQ291bnQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBjb3VudCBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24uIFNlZSBhbHNvIHRoZSBzZWxlY3RQYXRoKCkgCi0gYW5kIGFkZFRvU2VsZWN0aW9uKCkgbWV0aG9kcy4KLSAKLSBZb3UgbWF5IGV4cGVyaWVuY2UgYmV0dGVyIHBlcmZvcm1hbmNlIGlmIHlvdSB1c2UgdGhlIGl0ZXJhdGlvbgotIG1vZGVsIHVzaW5nIHRoZSB0b05leHRTZWxlY3Rpb24gbWV0aG9kLCByYXRoZXIgdGhhbiAKLSB0aGUgaW5kZXhpbmcgbW9kZWwgdXNpbmcgdGhlIGdldFNlbGVjdGlvbkNvdW50IGFuZCAKLSB0b1NlbGVjdGlvbiBtZXRob2RzLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPkEgbnVtYmVyIGluZGljYXRpbmcgdGhlIHNpemUgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iYWRkVG9TZWxlY3Rpb24oKSI+PCEtLSAtLT48L0E+PEgzPgotYWRkVG9TZWxlY3Rpb248L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPmFkZFRvU2VsZWN0aW9uPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+QXBwZW5kcyB0aGUgY3VycmVudCBsb2NhdGlvbiBvZiB0aGUgY3Vyc29yIHRvIHRoZSBzZWxlY3Rpb24uICAKLSBTZWUgYWxzbyB0aGUgc2VsZWN0UGF0aCgpIG1ldGhvZC4gWW91IGNhbiB1c2UgdGhpcyBhcyBhbiAKLSBhbHRlcm5hdGl2ZSB0byBjYWxsaW5nIHRoZSBzZWxlY3RQYXRoIG1ldGhvZCB3aGVuIHlvdSB3YW50Ci0gdG8gZGVmaW5lIHlvdXIgb3duIHNlbGVjdGlvbi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iY2xlYXJTZWxlY3Rpb25zKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNsZWFyU2VsZWN0aW9uczwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+Y2xlYXJTZWxlY3Rpb25zPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+Q2xlYXJzIHRoaXMgY3Vyc29yJ3Mgc2VsZWN0aW9uLCBidXQgZG9lcyBub3QgbW9kaWZ5IHRoZSBkb2N1bWVudC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0idG9Cb29rbWFyayhvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvci5YbWxCb29rbWFyaykiPjwhLS0gLS0+PC9BPjxIMz4KLXRvQm9va21hcms8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPnRvQm9va21hcms8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbEJvb2ttYXJrLmh0bWwiPlhtbEN1cnNvci5YbWxCb29rbWFyazwvQT4mbmJzcDtib29rbWFyayk8L1BSRT4KLTxETD4KLTxERD5Nb3ZlcyB0aGlzIGN1cnNvciB0byB0aGUgc2FtZSBwb3NpdGlvbiBhcyB0aGUgYm9va21hcmsuICBJZiB0aGUKLSBib29rbWFyayBpcyBpbiBhIGRpZmZlcmVudCBkb2N1bWVudCBmcm9tIHRoaXMgY3Vyc29yIG9yIGlmIHRoZSAKLSBib29rbWFyayBpcyBvcnBoYW5lZCwgdGhpcyBjdXJzb3IKLSB3aWxsIG5vdCBiZSBtb3ZlZCwgYW5kIGZhbHNlIHdpbGwgYmUgcmV0dXJuZWQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmJvb2ttYXJrPC9DT0RFPiAtIFRoZSBib29rbWFyayBhdCB0aGUgbG9jYXRpb24gdG8gd2hpY2ggdGhpcwotIGN1cnNvciBzaG91bGQgYmUgbW92ZWQuCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRydWUgaWYgdGhlIGN1cnNvciBtb3ZlZDsgb3RoZXJ3aXNlLCBmYWxzZS48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InRvTmV4dEJvb2ttYXJrKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci10b05leHRCb29rbWFyazwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbEJvb2ttYXJrLmh0bWwiPlhtbEN1cnNvci5YbWxCb29rbWFyazwvQT4gPEI+dG9OZXh0Qm9va21hcms8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtrZXkpPC9QUkU+Ci08REw+Ci08REQ+TW92ZXMgdGhpcyBjdXJzb3IgdG8gdGhlIGxvY2F0aW9uIGFmdGVyIGl0cyBjdXJyZW50IHBvc2l0aW9uCi0gd2hlcmUgYSBib29rbWFyayB3aXRoIHRoZSBnaXZlbiBrZXkgZXhpc3RzLiAgUmV0dXJucyBmYWxzZSBpZiBubwotIHN1Y2ggYm9va21hcmsgZXhpc3RzLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5rZXk8L0NPREU+IC0gVGhlIGtleSBoZWxkIGJ5IHRoZSBuZXh0IGJvb2ttYXJrIGF0IHRoZSBsb2NhdGlvbiB0byAKLSB3aGljaCB0aGlzIGN1cnNvciBzaG91bGQgYmUgbW92ZWQuCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPlRoZSBuZXh0IGNvcnJlc3BvbmRpbmcgYm9va21hcmssIGlmIGl0IGV4aXN0czsgbnVsbCBpZiB0aGVyZQotIGlzIG5vIG5leHQgYm9va21hcmsgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InRvUHJldkJvb2ttYXJrKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci10b1ByZXZCb29rbWFyazwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbEJvb2ttYXJrLmh0bWwiPlhtbEN1cnNvci5YbWxCb29rbWFyazwvQT4gPEI+dG9QcmV2Qm9va21hcms8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtrZXkpPC9QUkU+Ci08REw+Ci08REQ+TW92ZXMgdGhpcyBjdXJzb3IgdG8gdGhlIGxvY2F0aW9uIGJlZm9yZSBpdHMgY3VycmVudCBwb3NpdGlvbgotIHdoZXJlIGEgYm9va21hcmsgd2l0aCB0aGUgZ2l2ZW4ga2V5IGV4aXN0cy4gIFJldHVybnMgZmFsc2UgaWYgbm8KLSBzdWNoIGJvb2ttYXJrIGV4aXN0cy4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+a2V5PC9DT0RFPiAtIFRoZSBrZXkgaGVsZCBieSB0aGUgcHJldmlvdXMgYm9va21hcmsgYXQgdGhlIGxvY2F0aW9uIHRvIAotIHdoaWNoIHRoaXMgY3Vyc29yIHNob3VsZCBiZSBtb3ZlZC4KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+VGhlIHByZXZpb3VzIGNvcnJlc3BvbmRpbmcgYm9va21hcmssIGlmIGl0IGV4aXN0czsgbnVsbCBpZiAKLSB0aGVyZSBpcyBubyBwcmV2aW91cyBib29rbWFyayB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TmFtZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXROYW1lPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiA8Qj5nZXROYW1lPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCB0b2tlbi4gTmFtZXMgbWF5IGJlIGFzc29jaWF0ZWQgd2l0aAotIFNUQVJULCBBVFRSLCBOQU1FU1BBQ0Ugb3IgUFJPQ0lOU1QuIFJldHVybnMgbnVsbCBpZiB0aGVyZSBpcyBubwotIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IHRva2VuLiBGb3IgU1RBUlQgYW5kIEFUVFIsIHRoZSAKLSBuYW1lIHJldHVybmVkIGlkZW50aWZpZXMgdGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgb3IgYXR0cmlidXRlLiAKLSBGb3IgTkFNRVNQQUNFLCB0aGUgbG9jYWwgcGFydCBvZiB0aGUgbmFtZSBpcyB0aGUgcHJlZml4LCB3aGlsZSAKLSB0aGUgVVJJIGlzIHRoZSBuYW1lc3BhY2UgZGVmaW5lZC4gRm9yIFBST0NJTlNULCB0aGUgbG9jYWwgcGFydCAKLSBpcyB0aGUgdGFyZ2V0IGFuZCB0aGUgdXJpIGlzICIiLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPlRoZSBuYW1lIG9mIHRoZSBYTUwgYXQgdGhpcyBjdXJzb3IncyBsb2NhdGlvbjsgbnVsbCBpZiB0aGVyZQotIGlzIG5vIG5hbWUuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXROYW1lKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXROYW1lPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXROYW1lPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7bmFtZSk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IHRva2VuLiBUaGlzIHRva2VuIGNhbiBiZSBTVEFSVCwgTkFNRVNQQUNFLAotIEFUVFIgb3IgUFJPQ0lOU1QuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm5hbWU8L0NPREU+IC0gVGhlIG5ldyBuYW1lIGZvciB0aGUgY3VycmVudCB0b2tlbi48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5hbWVzcGFjZUZvclByZWZpeChqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotbmFtZXNwYWNlRm9yUHJlZml4PC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5uYW1lc3BhY2VGb3JQcmVmaXg8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtwcmVmaXgpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbmFtZXNwYWNlIFVSSSBpbmRpY2F0ZWQgYnkgdGhlIGdpdmVuIHByZWZpeC4gVGhlIGN1cnJlbnQKLSBjb250ZXh0IG11c3QgYmUgYXQgYSBTVEFSVCBvciBTVEFSVERPQy4gTmFtZXNwYWNlIHByZWZpeCBtYXBwaW5ncwotIGFyZSBxdWVyaWVkIGZvciB0aGUgbWFwcGluZ3MgZGVmaW5lZCBhdCB0aGUgY3VycmVudCBjb250YWluZXIgZmlyc3QsCi0gdGhlbiBwYXJlbnRzIGFyZSBxdWVyaWVkLiBUaGUgcHJlZml4IGNhbiBiZSAiIiBvciBudWxsIHRvIGluZGljYXRlCi0gYSBzZWFyY2ggZm9yIHRoZSBkZWZhdWx0IG5hbWVzcGFjZS48YnIvPjxici8+LgotIAotIE5vdGUgdGhhdCB0aGlzIHF1ZXJpZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGRvY3VtZW50LiBXaGVuIHRoZSAKLSBkb2N1bWVudCBpcyBwZXJzaXN0ZWQsIHRoZSBzYXZpbmcgbWVjaGFuaXNtIG1heSBzeW50aGVzaXplIG5hbWVzcGFjZXMgCi0gKG5zMSwgbnMyLCBhbmQgc28gb24pIGZvciB0aGUgcHVycG9zZXMgb2YgcGVyc2lzdGVuY2UuIFRoZXNlIG5hbWVwYWNlcyBhcmUgCi0gb25seSBwcmVzZW50IGluIHRoZSBzZXJpYWxpemVkIGZvcm0sIGFuZCBhcmUgbm90IHJlZmxlY3RlZCBiYWNrIGludG8gCi0gdGhlIGRvY3VtZW50IGJlaW5nIHNhdmVkLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5wcmVmaXg8L0NPREU+IC0gVGhlIG5hbWVzcGFjZSBwcmVmaXggZm9yIHRoZSByZXF1ZXN0ZWQgbmFtZXNwYWNlLgotPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgVVJJIGZvciBjb3JyZXNwb25kaW5nIHRvIHRoZSBzcGVjaWZpZWQgcHJlZml4IGlmIGl0Ci0gZXhpc3RzOyBvdGhlcndpc2UsIG51bGwuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwcmVmaXhGb3JOYW1lc3BhY2UoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXByZWZpeEZvck5hbWVzcGFjZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+cHJlZml4Rm9yTmFtZXNwYWNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bmFtZXNwYWNlVVJJKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBwcmVmaXggdGhhdCBjYW4gYmUgdXNlZCB0byBpbmRpY2F0ZSBhIG5hbWVzcGFjZSBVUkkuICBUaGUKLSBjdXJyZW50IGNvbnRleHQgbXVzdCBiZSBhdCBhIFNUQVJUIG9yIFNUQVJURE9DLiAgSWYgdGhlcmUgaXMgYW4KLSBleGlzdGluZyBwcmVmaXggdGhhdCBpbmRpY2F0ZXMgdGhlIFVSSSBpbiB0aGUgY3VycmVudCBjb250ZXh0LCB0aGF0Ci0gcHJlZml4IG1heSBiZSByZXR1cm5lZC4gT3RoZXJ3aXNlLCBhIG5ldyBwcmVmaXggZm9yIHRoZSBVUkkgd2lsbCBiZQotIGRlZmluZWQgYnkgYWRkaW5nIGFuIHhtbG5zIGF0dHJpYnV0ZSB0byB0aGUgY3VycmVudCBjb250YWluZXIgb3IgYQotIHBhcmVudCBjb250YWluZXIuCi0gCi0gTm90ZSB0aGF0IHRoaXMgcXVlcmllcyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZG9jdW1lbnQuIFdoZW4gdGhlIAotIGRvY3VtZW50IGlzIHBlcnNpc3RlZCwgdGhlIHNhdmluZyBtZWNoYW5pc20gbWF5IHN5bnRoZXNpemUgbmFtZXNwYWNlcyAKLSAobnMxLCBuczIsIGFuZCBzbyBvbikgZm9yIHRoZSBwdXJwb3NlcyBvZiBwZXJzaXN0ZW5jZS4gVGhlc2UgbmFtZXBhY2VzIGFyZSAKLSBvbmx5IHByZXNlbnQgaW4gdGhlIHNlcmlhbGl6ZWQgZm9ybSwgYW5kIGFyZSBub3QgcmVmbGVjdGVkIGJhY2sgaW50byAKLSB0aGUgZG9jdW1lbnQgYmVpbmcgc2F2ZWQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm5hbWVzcGFjZVVSSTwvQ09ERT4gLSBUaGUgbmFtZXNwYWNlIFVSSSBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXF1ZXN0ZWQKLSBwcmVmaXguCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPlRoZSBwcmVmaXggY29ycmVzcG9uZGluZyB0byB0aGUgc3BlY2lmaWVkIFVSSSBpZiBpdCBleGlzdHM7IAotIG90aGVyd2lzZSwgYSBuZXdseSBnZW5lcmF0ZWQgcHJlZml4LjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0QWxsTmFtZXNwYWNlcyhqYXZhLnV0aWwuTWFwKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0QWxsTmFtZXNwYWNlczwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+Z2V0QWxsTmFtZXNwYWNlczwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9NYXAuaHRtbCI+TWFwPC9BPiZuYnNwO2FkZFRvVGhpcyk8L1BSRT4KLTxETD4KLTxERD5BZGRzIHRvIHRoZSBzcGVjaWZpZWQgbWFwLCBhbGwgdGhlIG5hbWVzcGFjZXMgaW4gc2NvcGUgYXQgdGhlIGNvbnRhaW5lcgotIHdoZXJlIHRoaXMgY3Vyc29yIGlzIHBvc2l0aW9uZWQuIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCBmb3IgCi0gY29udGFpbmVyIHRva2VucyBvbmx5LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5hZGRUb1RoaXM8L0NPREU+IC0gVGhlIE1hcCB0byBhZGQgdGhlIG5hbWVzcGFjZXMgdG8uPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRPYmplY3QoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0T2JqZWN0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiA8Qj5nZXRPYmplY3Q8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBzdHJvbmdseS10eXBlZCBYbWxPYmplY3QgYXQgdGhlIGN1cnJlbnQgU1RBUlQsCi0gU1RBUlRET0MsIG9yIEFUVFIuIDxici8+PGJyLz4KLSAKLSBUaGUgc3Ryb25nbHktdHlwZWQgb2JqZWN0IGNhbiBiZSBjYXN0IHRvIHRoZSBzdHJvbmdseS10eXBlZAotIFhCZWFuIGludGVyZmFjZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBYTUwgU2NoZW1hIFR5cGUgZ2l2ZW4KLSBieSByZXN1bHQuZ2V0U2NoZW1hVHlwZSgpLjxici8+PGJyLz4KLQotIElmIGEgbW9yZSBzcGVjaWZpYyB0eXBlIGNhbm5vdCBiZSBkZXRlcm1pbmVkLCBhbiBYbWxPYmplY3QKLSB3aG9zZSBzY2hlbWEgdHlwZSBpcyBhbnlUeXBlIHdpbGwgYmUgcmV0dXJuZWQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+VGhlIHN0cm9uZ2x5LXR5cGVkIG9iamVjdCBhdCB0aGUgY3Vyc29yJ3MgY3VycmVudCBsb2NhdGlvbjsKLSBudWxsIGlmIHRoZSBjdXJyZW50IGxvY2F0aW9uIGlzIG5vdCBhIFNUQVJULCBTVEFSVERPQywgb3IgQVRUUi48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImN1cnJlbnRUb2tlblR5cGUoKSI+PCEtLSAtLT48L0E+PEgzPgotY3VycmVudFRva2VuVHlwZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPiA8Qj5jdXJyZW50VG9rZW5UeXBlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgY3VycmVudCB0b2tlbi4gQnkgZGVmaW5pdGlvbiwgdGhlIGN1cnJlbnQKLSB0b2tlbiBpcyB0aGUgdG9rZW4gaW1tZWRpYXRlbHkgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjdXJzb3IuIAotIElmIHlvdSdyZSBpbiB0aGUgbWlkZGxlIG9mIHRleHQsIGJlZm9yZSBhIGNoYXJhY3RlciwgeW91IGdldCBURVhULgotIFlvdSBjYW4ndCBkaXZlIGludG8gdGhlIHRleHQgb2YgYW4gQVRUUiwgQ09NTUVOVCBvciBQUk9DSU5TVC48YnIvPjxici8+Ci0gCi0gQXMgYW4gYWx0ZXJuYXRpdmUsIGl0IG1heSBiZSBtb3JlIGNvbnZlbmllbnQgZm9yIHlvdSB0byB1c2Ugb25lIG9mIHRoZSAKLSBtZXRob2RzIHRoYXQgdGVzdCBmb3IgYSBwYXJ0aWN1bGFyIHRva2VuIHR5cGUuIFRoZXNlIGluY2x1ZGUgdGhlIG1ldGhvZHMgCi0gaXNTdGFydCgpLCBpc1N0YXJ0ZG9jKCksIGlzVGV4dCgpLCBpc0F0dHIoKSwgYW5kIHNvIG9uLiBFYWNoIHJldHVybnMgYSBib29sZWFuIAotIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgdG9rZW4gdGhhdCBmb2xsb3dzIHRoZSBjdXJzb3IgaXMgdGhlIHR5cGUgCi0gaW4gcXVlc3Rpb24uIAotIDxici8+PGJyLz4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgVG9rZW5UeXBlIGluc3RhbmNlIGZvciB0aGUgdG9rZW4gYXQgdGhlIGN1cnNvcidzIGN1cnJlbnQKLSBsb2NhdGlvbi48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzU3RhcnRkb2MoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNTdGFydGRvYzwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNTdGFydGRvYzwvQj4oKTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgdGhlIGN1cnJlbnQgdG9rZW4gaXMgYSBTVEFSVERPQyB0b2tlbiB0eXBlLCBtZWFuaW5nIAotIGF0IHRoZSB2ZXJ5IHJvb3Qgb2YgdGhlIGRvY3VtZW50LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRydWUgaWYgdGhpcyB0b2tlbiBpcyBhIFNUQVJURE9DIHRva2VuIHR5cGU7IAotIG90aGVyd2lzZSwgZmFsc2UuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc0VuZGRvYygpIj48IS0tIC0tPjwvQT48SDM+Ci1pc0VuZGRvYzwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNFbmRkb2M8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoaXMgdG9rZW4gaXMgYW4gRU5ERE9DIHRva2VuIHR5cGUsIG1lYW5pbmcgCi0gYXQgdGhlIHZlcnkgZW5kIG9mIHRoZSBkb2N1bWVudC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50cnVlIGlmIHRoaXMgdG9rZW4gaXMgYW4gRU5ERE9DIHRva2VuIHR5cGU7IAotIG90aGVyd2lzZSwgZmFsc2UuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc1N0YXJ0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzU3RhcnQ8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzU3RhcnQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoaXMgdG9rZW4gaXMgYSBTVEFSVCB0b2tlbiB0eXBlLCBtZWFuaW5nIAotIGp1c3QgYmVmb3JlIGFuIGVsZW1lbnQncyBzdGFydC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50cnVlIGlmIHRoaXMgdG9rZW4gaXMgYSBTVEFSVCB0b2tlbiB0eXBlOyAKLSBvdGhlcndpc2UsIGZhbHNlLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNFbmQoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNFbmQ8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzRW5kPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiB0aGlzIHRva2VuIGlzIGFuIEVORCB0b2tlbiB0eXBlLCBtZWFuaW5nIAotIGp1c3QgYmVmb3JlIGFuIGVsZW1lbnQncyBlbmQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dHJ1ZSBpZiB0aGlzIHRva2VuIGlzIGFuIEVORCB0b2tlbiB0eXBlOyAKLSBvdGhlcndpc2UsIGZhbHNlLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNUZXh0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzVGV4dDwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNUZXh0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiB0aGUgdGhpcyB0b2tlbiBpcyBhIFRFWFQgdG9rZW4gdHlwZSwgbWVhbmluZyAKLSBqdXN0IGJlZm9yZSBvciBpbnNpZGUgdGV4dC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50cnVlIGlmIHRoaXMgdG9rZW4gaXMgYSBURVhUIHRva2VuIHR5cGU7IAotIG90aGVyd2lzZSwgZmFsc2UuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc0F0dHIoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNBdHRyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5pc0F0dHI8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoaXMgdG9rZW4gaXMgYW4gQVRUUiB0b2tlbiB0eXBlLCBtZWFuaW5nIAotIGp1c3QgYmVmb3JlIGFuIGF0dHJpYnV0ZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50cnVlIGlmIHRoaXMgdG9rZW4gaXMgYW4gQVRUUiB0b2tlbiB0eXBlOyAKLSBvdGhlcndpc2UsIGZhbHNlLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNOYW1lc3BhY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNOYW1lc3BhY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzTmFtZXNwYWNlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiB0aGlzIHRva2VuIGlzIGEgTkFNRVNQQUNFIHRva2VuIHR5cGUsIG1lYW5pbmcgCi0ganVzdCBiZWZvcmUgYSBuYW1lc3BhY2UgZGVjbGFyYXRpb24uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dHJ1ZSBpZiB0aGlzIHRva2VuIGlzIGEgTkFNRVNQQUNFIHRva2VuIHR5cGU7IAotIG90aGVyd2lzZSwgZmFsc2UuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc0NvbW1lbnQoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNDb21tZW50PC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5pc0NvbW1lbnQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoaXMgdG9rZW4gaXMgYSBDT01NRU5UIHRva2VuIHR5cGUsIG1lYW5pbmcgCi0ganVzdCBiZWZvcmUgYSBjb21tZW50LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRydWUgaWYgdGhpcyB0b2tlbiBpcyBhIENPTU1FTlQgdG9rZW4gdHlwZTsgCi0gb3RoZXJ3aXNlLCBmYWxzZS48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzUHJvY2luc3QoKSI+PCEtLSAtLT48L0E+PEgzPgotaXNQcm9jaW5zdDwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNQcm9jaW5zdDwvQj4oKTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgdGhpcyB0b2tlbiBpcyBhIFBST0NJTlNUIHRva2VuIHR5cGUsIG1lYW5pbmcgCi0ganVzdCBiZWZvcmUgYSBwcm9jZXNzaW5nIGluc3RydWN0aW9uLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRydWUgaWYgdGhpcyB0b2tlbiBpcyBhIFBST0NJTlNUIHRva2VuIHR5cGU7IAotIG90aGVyd2lzZSwgZmFsc2UuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc0NvbnRhaW5lcigpIj48IS0tIC0tPjwvQT48SDM+Ci1pc0NvbnRhaW5lcjwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNDb250YWluZXI8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoaXMgdG9rZW4gaXMgYSBjb250YWluZXIgdG9rZW4uIFRoZSBTVEFSVERPQyBhbmQgU1RBUlQgCi0gdG9rZW4gdHlwZXMgYXJlIGNvbnRhaW5lcnMuIENvbnRhaW5lcnMsIGluY2x1ZGluZyBkb2N1bWVudHMgYW5kIGVsZW1lbnRzLAotIGhhdmUgdGhlIHNhbWUgY29udGVudCBtb2RlbC4gSW4gb3RoZXIgd29yZHMsIGEgZG9jdW1lbnQgYW5kIGFuIGVsZW1lbnQgCi0gbWF5IGhhdmUgdGhlIHNhbWUgY29udGVudHMuIEZvciBleGFtcGxlLCBhIGRvY3VtZW50IG1heSBjb250YWluIGF0dHJpYnV0ZXMgCi0gb3IgdGV4dCwgd2l0aG91dCBhbnkgY2hpbGQgZWxlbWVudHMuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dHJ1ZSBpZiB0aGlzIHRva2VuIGlzIGEgY29udGFpbmVyIHRva2VuOyBvdGhlcndpc2UsIGZhbHNlLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNGaW5pc2goKSI+PCEtLSAtLT48L0E+PEgzPgotaXNGaW5pc2g8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzRmluaXNoPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiB0aGlzIHRva2VuIGlzIGEgZmluaXNoIHRva2VuLiBBIGZpbmlzaCB0b2tlbiBjYW4gYmUgYW4gRU5ERE9DCi0gb3IgRU5EIHRva2VuIHR5cGUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dHJ1ZSBpZiB0aGlzIHRva2VuIGlzIGEgZmluaXNoIHRva2VuOyBvdGhlcndpc2UsIGZhbHNlLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaXNBbnlBdHRyKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzQW55QXR0cjwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNBbnlBdHRyPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiB0aGlzIHRva2VuIGlzIGFueSBhdHRyaWJ1dGUuIFRoaXMgaW5jbHVkZXMgYW4gQVRUUiB0b2tlbiB0eXBlIGFuZAotIHRoZSBOQU1FU1BBQ0UgdG9rZW4gdHlwZSBhdHRyaWJ1dGUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dHJ1ZSBpZiB0aGUgY3VycmVudCBjdXJzb3IgaXMgYXQgYW55IGF0dHJpYnV0ZTsgb3RoZXJ3aXNlLCBmYWxzZS48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InByZXZUb2tlblR5cGUoKSI+PCEtLSAtLT48L0E+PEgzPgotcHJldlRva2VuVHlwZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPiA8Qj5wcmV2VG9rZW5UeXBlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgcHJldmlvdXMgdG9rZW4uIEJ5IGRlZmluaXRpb24sIHRoZSBwcmV2aW91cwotIHRva2VuIGlzIHRoZSB0b2tlbiBpbW1lZGlhdGVseSB0byB0aGUgbGVmdCBvZiB0aGUgY3Vyc29yLjxici8+PGJyLz4KLQotIElmIHlvdSdyZSBpbiB0aGUgbWlkZGxlIG9mIHRleHQsIGFmdGVyIGEgY2hhcmFjdGVyLCB5b3UgZ2V0IFRFWFQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+VGhlIFRva2VuVHlwZSBpbnN0YW5jZSBmb3IgdGhlIHRva2VuIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgCi0gdG9rZW4gYXQgdGhlIGN1cnNvcidzIGN1cnJlbnQgbG9jYXRpb24uPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJoYXNOZXh0VG9rZW4oKSI+PCEtLSAtLT48L0E+PEgzPgotaGFzTmV4dFRva2VuPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5oYXNOZXh0VG9rZW48L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoZXJlIGlzIGEgbmV4dCB0b2tlbi4gV2hlbiB0aGlzIGlzIGZhbHNlLCBhcyB3aGVuIHRoZSBjdXJzb3IgaXMKLSBhdCB0aGUgRU5ERE9DIHRva2VuLCB0aGUgdG9OZXh0VG9rZW4oKSBtZXRob2QgcmV0dXJucyBOT05FIGFuZCBkb2VzIG5vdCAKLSBtb3ZlIHRoZSBjdXJzb3IuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dHJ1ZSBpZiB0aGVyZSBpcyBhIG5leHQgdG9rZW47IG90aGVyd2lzZSwgZmFsc2UuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJoYXNQcmV2VG9rZW4oKSI+PCEtLSAtLT48L0E+PEgzPgotaGFzUHJldlRva2VuPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5oYXNQcmV2VG9rZW48L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoZXJlIGlzIGEgcHJldmlvdXMgdG9rZW4uIFdoZW4gdGhpcyBpcyBmYWxzZSwgdG9QcmV2VG9rZW4KLSByZXR1cm5zIE5PTkUgYW5kIGRvZXMgbm90IG1vdmUgdGhlIGN1cnNvci4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50cnVlIGlmIHRoZXJlIGlzIGEgcHJldmlvdXMgdG9rZW47IG90aGVyd2lzZSwgZmFsc2UuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ0b05leHRUb2tlbigpIj48IS0tIC0tPjwvQT48SDM+Ci10b05leHRUb2tlbjwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPiA8Qj50b05leHRUb2tlbjwvQj4oKTwvUFJFPgotPERMPgotPEREPk1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIG5leHQgdG9rZW4uIFdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgdG9rZW5zIAotIGF2YWlsYWJsZSwgaGFzTmV4dFRva2VuIHJldHVybnMgZmFsc2UgYW5kIHRvTmV4dFRva2VuKCkgcmV0dXJucyAKLSBOT05FIGFuZCBkb2VzIG5vdCBtb3ZlIHRoZSBjdXJzb3IuIFJldHVybnMgdGhlIHRva2VuIHR5cGUgCi0gb2YgdGhlIHRva2VuIHRvIHRoZSByaWdodCBvZiB0aGUgY3Vyc29yIHVwb24gYSBzdWNjZXNzZnVsIG1vdmUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+VGhlIHRva2VuIHR5cGUgZm9yIHRoZSBuZXh0IHRva2VuIGlmIHRoZSBjdXJzb3Igd2FzIG1vdmVkOwotIG90aGVyd2lzZSwgTk9ORS48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InRvUHJldlRva2VuKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXRvUHJldlRva2VuPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwiPlhtbEN1cnNvci5Ub2tlblR5cGU8L0E+IDxCPnRvUHJldlRva2VuPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgcHJldmlvdXMgdG9rZW4uIFdoZW4gdGhlcmUgaXMgbm8KLSBwcmV2aW91cyB0b2tlbiwgcmV0dXJucyBOT05FLCBvdGhlcndpc2UgcmV0dXJucyB0aGUgdG9rZW4KLSB0byB0aGUgbGVmdCBvZiB0aGUgbmV3IHBvc2l0aW9uIG9mIHRoZSBjdXJzb3IuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+VGhlIHRva2VuIHR5cGUgZm9yIHRoZSBwcmV2aW91cyB0b2tlbiBpZiB0aGUgY3Vyc29yIHdhcyBtb3ZlZDsKLSBvdGhlcndpc2UsIE5PTkUuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ0b0ZpcnN0Q29udGVudFRva2VuKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXRvRmlyc3RDb250ZW50VG9rZW48L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5Ub2tlblR5cGUuaHRtbCI+WG1sQ3Vyc29yLlRva2VuVHlwZTwvQT4gPEI+dG9GaXJzdENvbnRlbnRUb2tlbjwvQj4oKTwvUFJFPgotPERMPgotPEREPk1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGZpcnN0IHRva2VuIGluIHRoZSBjb250ZW50IG9mIHRoZSBjdXJyZW50Ci0gU1RBUlQgb3IgU1RBUlRET0MuIFRoYXQgaXMsIHRoZSBmaXJzdCB0b2tlbiBhZnRlciBhbGwgQVRUUiBhbmQgTkFNRVNQQUNFCi0gdG9rZW5zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFNUQVJULjxici8+PGJyLz4KLQotIElmIHRoZSBjdXJyZW50IHRva2VuIGlzIG5vdCBhIFNUQVJUIG9yIFNUQVJURE9DLCB0aGUgY3Vyc29yIGlzIG5vdAotIG1vdmVkIGFuZCBOT05FIGlzIHJldHVybmVkLiBJZiB0aGUgY3VycmVudCBTVEFSVCBvciBTVEFSVERPQwotIGhhcyBubyBjb250ZW50LCB0aGUgY3Vyc29yIGlzIG1vdmVkIHRvIHRoZSBFTkQgb3IgRU5ERE9DIHRva2VuLjxici8+PGJyLz4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgbmV3IGN1cnJlbnQgdG9rZW4gdHlwZS48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InRvRW5kVG9rZW4oKSI+PCEtLSAtLT48L0E+PEgzPgotdG9FbmRUb2tlbjwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPiA8Qj50b0VuZFRva2VuPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgRU5EIG9yIEVORERPQyB0b2tlbiBjb3JyZXNwb25kaW5nIHRvIHRoZQotIGN1cnJlbnQgU1RBUlQgb3IgU1RBUlRET0MsIGFuZCByZXR1cm5zIEVORCBvciBFTkRET0MuIDxici8+PGJyLz4KLQotIElmIHRoZSBjdXJyZW50IHRva2VuIGlzIG5vdCBhIFNUQVJUIG9yIFNUQVJURE9DLCB0aGUgY3Vyc29yIGlzIG5vdAotIG1vdmVkIGFuZCBOT05FIGlzIHJldHVybmVkLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPlRoZSBuZXcgY3VycmVudCB0b2tlbiB0eXBlLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0idG9OZXh0Q2hhcihpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci10b05leHRDaGFyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPnRvTmV4dENoYXI8L0I+KGludCZuYnNwO21heENoYXJhY3RlckNvdW50KTwvUFJFPgotPERMPgotPEREPk1vdmVzIHRoZSBjdXJzb3IgZm9yd2FyZCBieSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBjaGFyYWN0ZXJzLCBhbmQKLSBzdG9wcyBhdCB0aGUgbmV4dCBub24tVEVYVCB0b2tlbi4gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMKLSBhY3R1YWxseSBtb3ZlZCBhY3Jvc3MsIHdoaWNoIGlzIGd1YXJhbnRlZWQgdG8gYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICAKLSA8ZW0+bWF4Q2hhcmFjdGVyQ291bnQ8L2VtPi4gSWYgdGhlcmUgaXMgbm8gZnVydGhlciB0ZXh0LCBvciBpZiAKLSB0aGVyZSBpcyBubyB0ZXh0IGF0IGFsbCwgcmV0dXJucyB6ZXJvLjxici8+PGJyLz4KLQotIE5vdGUgdGhpcyBkb2VzIG5vdCBkaXZlIGludG8gYXR0cmlidXRlIHZhbHVlcywgY29tbWVudCBjb250ZW50cywKLSBwcm9jZXNzaW5nIGluc3RydWN0aW9uIGNvbnRlbnRzLCBldGMuLCBidXQgb25seSBjb250ZW50IHRleHQuPGJyLz48YnIvPgotCi0gWW91IGNhbiBwYXNzIG1heENoYXJhY3RlckNvdW50ICZsdDsgMCB0byBtb3ZlIG92ZXIgYWxsIHRoZSB0ZXh0IHRvIHRoZSAKLSByaWdodC4gVGhpcyBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHRvTmV4dFRva2VuLCBidXQgcmV0dXJucyB0aGUgYW1vdW50IAotIG9mIHRleHQgbW92ZWQgb3Zlci4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bWF4Q2hhcmFjdGVyQ291bnQ8L0NPREU+IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYnkgd2hpY2gKLSB0aGUgY3Vyc29yIHNob3VsZCBiZSBtb3ZlZC4KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+VGhlIGFjdHVhbCBudW1iZXIgb2YgY2hhcmFjdGVycyBieSB3aGljaCB0aGUgY3Vyc29yIHdhcyBtb3ZlZDsgCi0gMCBpZiB0aGUgY3Vyc29yIHdhcyBub3QgbW92ZWQuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ0b1ByZXZDaGFyKGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLXRvUHJldkNoYXI8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+dG9QcmV2Q2hhcjwvQj4oaW50Jm5ic3A7bWF4Q2hhcmFjdGVyQ291bnQpPC9QUkU+Ci08REw+Ci08REQ+TW92ZXMgdGhlIGN1cnNvciBiYWNrd2FyZHMgYnkgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGdpdmVuLiAgSGFzCi0gc2ltaWxhciBjaGFyYWN0ZXJpc3RpY3MgdG8gdGhlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwjdG9OZXh0Q2hhcihpbnQpIj48Q09ERT50b05leHRDaGFyPC9DT0RFPjwvQT4gbWV0aG9kLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5tYXhDaGFyYWN0ZXJDb3VudDwvQ09ERT4gLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBieSB3aGljaAotIHRoZSBjdXJzb3Igc2hvdWxkIGJlIG1vdmVkLgotPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgYWN0dWFsIG51bWJlciBvZiBjaGFyYWN0ZXJzIGJ5IHdoaWNoIHRoZSBjdXJzb3Igd2FzIG1vdmVkOyAKLSAwIGlmIHRoZSBjdXJzb3Igd2FzIG5vdCBtb3ZlZC48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InRvTmV4dFNpYmxpbmcoKSI+PCEtLSAtLT48L0E+PEgzPgotdG9OZXh0U2libGluZzwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+dG9OZXh0U2libGluZzwvQj4oKTwvUFJFPgotPERMPgotPEREPk1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIG5leHQgc2libGluZyBlbGVtZW50LCBvciByZXR1cm5zCi0gZmFsc2UgYW5kIGRvZXMgbm90IG1vdmUgdGhlIGN1cnNvciBpZiB0aGVyZSBpcyBubyBuZXh0IHNpYmxpbmcKLSBlbGVtZW50LiAoQnkgZGVmaW5pdGlvbiB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCBpcyB0aGUgc2FtZQotIGFzIHRoZSBwb3NpdGlvbiBvZiBpdHMgU1RBUlQgdG9rZW4uKQotCi0gSWYgdGhlIGN1cnJlbnQgdG9rZW4gaXMgbm90IHMgU1RBUlQsIHRoZSBjdXJzb3Igd2lsbCBiZSAKLSBtb3ZlZCB0byB0aGUgbmV4dCBTVEFSVCB3aXRob3V0IG1vdmluZyBvdXQgb2YgdGhlIHNjb3BlIG9mIHRoZSAKLSBjdXJyZW50IGVsZW1lbnQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dHJ1ZSBpZiB0aGUgY3Vyc29yIHdhcyBtb3ZlZDsgb3RoZXJ3aXNlLCBmYWxzZS48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InRvUHJldlNpYmxpbmcoKSI+PCEtLSAtLT48L0E+PEgzPgotdG9QcmV2U2libGluZzwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+dG9QcmV2U2libGluZzwvQj4oKTwvUFJFPgotPERMPgotPEREPk1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIHByZXZpb3VzIHNpYmxpbmcgZWxlbWVudCwgb3IgcmV0dXJucwotIGZhbHNlIGFuZCBkb2VzIG5vdCBtb3ZlIHRoZSBjdXJzb3IgaWYgdGhlcmUgaXMgbm8gcHJldmlvdXMgc2libGluZwotIGVsZW1lbnQuIChCeSBkZWZpbml0aW9uIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IGlzIHRoZSBzYW1lCi0gYXMgdGhlIHBvc2l0aW9uIG9mIGl0cyBTVEFSVCB0b2tlbi4pCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dHJ1ZSBpZiB0aGUgY3Vyc29yIHdhcyBtb3ZlZDsgb3RoZXJ3aXNlLCBmYWxzZS48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InRvUGFyZW50KCkiPjwhLS0gLS0+PC9BPjxIMz4KLXRvUGFyZW50PC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj50b1BhcmVudDwvQj4oKTwvUFJFPgotPERMPgotPEREPk1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIHBhcmVudCBlbGVtZW50IG9yIFNUQVJURE9DLCBvciByZXR1cm5zCi0gZmFsc2UgYW5kIGRvZXMgbm90IG1vdmUgdGhlIGN1cnNvciBpZiB0aGVyZSBpcyBubyBwYXJlbnQuPGJyLz48YnIvPgotCi0gV29ya3MgaWYgeW91J3JlIGluIGF0dHJpYnV0ZXMgb3IgY29udGVudC4gUmV0dXJucyBmYWxzZSBvbmx5IGlmIGF0Ci0gU1RBUlRET0MuIE5vdGUgdGhhdCB0aGUgcGFyZW50IG9mIGFuIEVORCB0b2tlbiBpcyB0aGUgY29ycmVzcG9uZGluZwotIFNUQVJUIHRva2VuLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRydWUgaWYgdGhlIGN1cnNvciB3YXMgbW92ZWQ7IGZhbHNlIGlmIHRoZSBjdXJzb3IgaXMgYXQgdGhlIFNUQVJURE9DCi0gdG9rZW4uPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ0b0ZpcnN0Q2hpbGQoKSI+PCEtLSAtLT48L0E+PEgzPgotdG9GaXJzdENoaWxkPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj50b0ZpcnN0Q2hpbGQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5Nb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBmaXJzdCBjaGlsZCBlbGVtZW50LCBvciByZXR1cm5zIGZhbHNlIGFuZAotIGRvZXMgbm90IG1vdmUgdGhlIGN1cnNvciBpZiB0aGVyZSBhcmUgbm8gZWxlbWVudCBjaGlsZHJlbi4gPGJyLz48YnIvPgotCi0gSWYgdGhlIGN1cnNvciBpcyBub3QgY3VycmVudGx5IGluIGFuIGVsZW1lbnQsIGl0IG1vdmVzIGludG8gdGhlIAotIGZpcnN0IGNoaWxkIGVsZW1lbnQgb2YgdGhlIG5leHQgZWxlbWVudC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50cnVlIGlmIHRoZSBjdXJzb3Igd2FzIG1vdmVkOyBvdGhlcndpc2UsIGZhbHNlLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0idG9MYXN0Q2hpbGQoKSI+PCEtLSAtLT48L0E+PEgzPgotdG9MYXN0Q2hpbGQ8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPnRvTGFzdENoaWxkPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgbGFzdCBlbGVtZW50IGNoaWxkLCBvciByZXR1cm5zIGZhbHNlIGFuZAotIGRvZXMgbm90IG1vdmUgdGhlIGN1cnNvciBpZiB0aGVyZSBhcmUgbm8gZWxlbWVudCBjaGlsZHJlbi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50cnVlIGlmIHRoZSBjdXJzb3Igd2FzIG1vdmVkOyBvdGhlcndpc2UsIGZhbHNlLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0idG9DaGlsZChqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotdG9DaGlsZDwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+dG9DaGlsZDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO25hbWUpPC9QUkU+Ci08REw+Ci08REQ+TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgZmlyc3QgY2hpbGQgZWxlbWVudCBvZiB0aGUgc3BlY2lmaWVkIG5hbWUgaW4gCi0gbm8gbmFtZXNwYWNlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5uYW1lPC9DT0RFPiAtIFRoZSBuYW1lIG9mIHRoZSBlbGVtZW50IHRvIG1vdmUgdGhlIGN1cnNvciB0by4KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dHJ1ZSBpZiB0aGUgY3Vyc29yIHdhcyBtb3ZlZDsgb3RoZXJ3aXNlLCBmYWxzZS48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InRvQ2hpbGQoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXRvQ2hpbGQ8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPnRvQ2hpbGQ8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtuYW1lc3BhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtuYW1lKTwvUFJFPgotPERMPgotPEREPk1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGZpcnN0IGNoaWxkIGVsZW1lbnQgb2YgdGhlIHNwZWNpZmllZCBuYW1lIGluIHRoZSAKLSBzcGVjaWZpZWQgbmFtZXNwYWNlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5uYW1lc3BhY2U8L0NPREU+IC0gVGhlIG5hbWVzcGFjZSBVUkkgZm9yIHRoZSBlbGVtZW50IHRvIG1vdmUgdGhlIGN1cnNvciAKLSB0by48REQ+PENPREU+bmFtZTwvQ09ERT4gLSBUaGUgbmFtZSBvZiB0aGUgZWxlbWVudCB0byBtb3ZlIHRvLgotPERUPjxCPlJldHVybnM6PC9CPjxERD50cnVlIGlmIHRoZSBjdXJzb3Igd2FzIG1vdmVkOyBvdGhlcndpc2UsIGZhbHNlLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0idG9DaGlsZChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PCEtLSAtLT48L0E+PEgzPgotdG9DaGlsZDwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+dG9DaGlsZDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO25hbWUpPC9QUkU+Ci08REw+Ci08REQ+TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgZmlyc3QgY2hpbGQgZWxlbWVudCBvZiB0aGUgc3BlY2lmaWVkIHF1YWxpZmllZCBuYW1lLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5uYW1lPC9DT0RFPiAtIFRoZSBuYW1lIG9mIHRoZSBlbGVtZW50IHRvIG1vdmUgdGhlIGN1cnNvciB0by48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InRvQ2hpbGQoaW50KSI+PCEtLSAtLT48L0E+PEgzPgotdG9DaGlsZDwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+dG9DaGlsZDwvQj4oaW50Jm5ic3A7aW5kZXgpPC9QUkU+Ci08REw+Ci08REQ+TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgY2hpbGQgZWxlbWVudCBzcGVjaWZpZWQgYnkgPGVtPmluZGV4PC9lbT4uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmluZGV4PC9DT0RFPiAtIFRoZSBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBpbiB0aGUgc2VxdWVuY2Ugb2YgY2hpbGQgCi0gZWxlbWVudHMuCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRydWUgaWYgdGhlIGN1cnNvciB3YXMgbW92ZWQ7IG90aGVyd2lzZSwgZmFsc2UuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ0b0NoaWxkKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUsIGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLXRvQ2hpbGQ8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPnRvQ2hpbGQ8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtpbmRleCk8L1BSRT4KLTxETD4KLTxERD5Nb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBzcGVjaWZpZWQgPGVtPmluZGV4PC9lbT4gY2hpbGQgZWxlbWVudCBvZiB0aGUgCi0gc3BlY2lmaWVkIG5hbWUsIHdoZXJlIHRoYXQgZWxlbWVudCBpcyB0aGUgLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5uYW1lPC9DT0RFPiAtIFRoZSBuYW1lIG9mIHRoZSBjaGlsZCBlbGVtZW50IHRvIG1vdmUgdGhlIGN1cnNvciB0by48REQ+PENPREU+aW5kZXg8L0NPREU+IC0gVGhlIHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50IGluIHRoZSBzZXF1ZW5jZSBvZiBjaGlsZAotIGVsZW1lbnRzLgotPERUPjxCPlJldHVybnM6PC9CPjxERD50cnVlIGlmIHRoZSBjdXJzb3Igd2FzIG1vdmVkOyBvdGhlcndpc2UsIGZhbHNlLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0idG9OZXh0U2libGluZyhqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotdG9OZXh0U2libGluZzwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+dG9OZXh0U2libGluZzwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO25hbWUpPC9QUkU+Ci08REw+Ci08REQ+TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgbmV4dCBzaWJsaW5nIGVsZW1lbnQgb2YgdGhlIHNwZWNpZmllZCBuYW1lIGluIG5vCi0gbmFtZXNwYWNlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5uYW1lPC9DT0RFPiAtIFRoZSBuYW1lIG9mIHRoZSBlbGVtZW50IHRvIG1vdmUgdGhlIGN1cnNvciB0by4KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dHJ1ZSBpZiB0aGUgY3Vyc29yIHdhcyBtb3ZlZDsgb3RoZXJ3aXNlLCBmYWxzZS48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InRvTmV4dFNpYmxpbmcoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXRvTmV4dFNpYmxpbmc8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPnRvTmV4dFNpYmxpbmc8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtuYW1lc3BhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtuYW1lKTwvUFJFPgotPERMPgotPEREPk1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIG5leHQgc2libGluZyBlbGVtZW50IG9mIHRoZSBzcGVjaWZpZWQgbmFtZSAKLSBpbiB0aGUgc3BlY2lmaWVkIG5hbWVzcGFjZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bmFtZXNwYWNlPC9DT0RFPiAtIFRoZSBuYW1lc3BhY2UgVVJJIGZvciB0aGUgZWxlbWVudCB0byBtb3ZlIHRoZSBjdXJzb3IKLSB0by48REQ+PENPREU+bmFtZTwvQ09ERT4gLSBUaGUgbmFtZSBvZiB0aGUgZWxlbWVudCB0byBtb3ZlIHRoZSBjdXJzb3IgdG8uCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRydWUgaWYgdGhlIGN1cnNvciB3YXMgbW92ZWQ7IG90aGVyd2lzZSwgZmFsc2UuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ0b05leHRTaWJsaW5nKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48IS0tIC0tPjwvQT48SDM+Ci10b05leHRTaWJsaW5nPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj50b05leHRTaWJsaW5nPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7bmFtZSk8L1BSRT4KLTxETD4KLTxERD5Nb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBuZXh0IHNpYmxpbmcgZWxlbWVudCBvZiB0aGUgc3BlY2lmaWVkIAotIHF1YWxpZmllZCBuYW1lLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5uYW1lPC9DT0RFPiAtIFRoZSBuYW1lIG9mIHRoZSBlbGVtZW50IHRvIG1vdmUgdGhlIGN1cnNvciB0by4KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dHJ1ZSBpZiB0aGUgY3Vyc29yIHdhcyBtb3ZlZDsgb3RoZXJ3aXNlLCBmYWxzZS48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InRvRmlyc3RBdHRyaWJ1dGUoKSI+PCEtLSAtLT48L0E+PEgzPgotdG9GaXJzdEF0dHJpYnV0ZTwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+dG9GaXJzdEF0dHJpYnV0ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPk1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGZpcnN0IGF0dHJpYnV0ZSBvZiB0aGlzIGVsZW1lbnQsIG9yCi0gcmV0dXJucyBmYWxzZSBhbmQgZG9lcyBub3QgbW92ZSB0aGUgY3Vyc29yIGlmIHRoZXJlIGFyZSBubwotIGF0dHJpYnV0ZXMuIFRoZSBvcmRlciBvZiBhdHRyaWJ1dGVzIGlzIGFyYml0cmFyeSwgYnV0IHN0YWJsZS48YnIvPjxici8+Ci0KLSB4bWxucyBhdHRyaWJ1dGVzIChuYW1lc3BhY2UgZGVjbGFyYXRpb25zKSBhcmUgbm90IGNvbnNpZGVyZWQgCi0gYXR0cmlidXRlcyBieSB0aGlzIGZ1bmN0aW9uLjxici8+PGJyLz4KLQotIFRoZSBjdXJzb3IgbXVzdCBiZSBvbiBhIFNUQVJUIG9yIFNUQVJURE9DIGZvciB0aGlzIG1ldGhvZCB0bwotIHN1Y2NlZWQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dHJ1ZSBpZiB0aGUgY3Vyc29yIHdhcyBtb3ZlZDsgb3RoZXJ3aXNlLCBmYWxzZS48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InRvTGFzdEF0dHJpYnV0ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci10b0xhc3RBdHRyaWJ1dGU8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPnRvTGFzdEF0dHJpYnV0ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPk1vdmVzIHRoZSBjdXJzb3IgdG8gdGhlIGxhc3QgYXR0cmlidXRlIG9mIHRoaXMgZWxlbWVudCwgb3IKLSByZXR1cm5zIGZhbHNlIGFuZCBkb2VzIG5vdCBtb3ZlIHRoZSBjdXJzb3IgaWYgdGhlcmUgYXJlIG5vCi0gYXR0cmlidXRlcy4gVGhlIG9yZGVyIG9mIGF0dHJpYnV0ZXMgaXMgYXJiaXRyYXJ5LCBidXQgc3RhYmxlLjxici8+PGJyLz4KLQotIHhtbG5zIGF0dHJpYnV0ZXMgKG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMpIGFyZSBub3QgY29uc2lkZXJlZCAKLSBhdHRyaWJ1dGVzIGJ5IHRoaXMgZnVuY3Rpb24uPGJyLz48YnIvPgotCi0gVGhlIGN1cnNvciBtdXN0IGJlIG9uIGEgU1RBUlQgb3IgU1RBUlRET0MgZm9yIHRoaXMgbWV0aG9kCi0gdG8gc3VjY2VlZC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50cnVlIGlmIHRoZSBjdXJzb3Igd2FzIG1vdmVkOyBvdGhlcndpc2UsIGZhbHNlLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0idG9OZXh0QXR0cmlidXRlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXRvTmV4dEF0dHJpYnV0ZTwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+dG9OZXh0QXR0cmlidXRlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgbmV4dCBzaWJsaW5nIGF0dHJpYnV0ZSwgb3IgcmV0dXJucwotIGZhbHNlIGFuZCBkb2VzIG5vdCBtb3ZlIHRoZSBjdXJzb3IgaWYgdGhlcmUgaXMgbm8gbmV4dAotIHNpYmxpbmcgYXR0cmlidXRlLiBUaGUgb3JkZXIgb2YgYXR0cmlidXRlcyBpcyBhcmJpdHJhcnksIGJ1dCBzdGFibGUuPGJyLz48YnIvPgotIAotIHhtbG5zIGF0dHJpYnV0ZXMgKG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMpIGFyZSBub3QgY29uc2lkZXJlZCAKLSBhdHRyaWJ1dGVzIGJ5IHRoaXMgZnVuY3Rpb24uPGJyLz48YnIvPgotCi0gVGhlIGN1cnNvciBtdXN0IGJlIG9uIGFuIGF0dHJpYnV0ZSBmb3IgdGhpcyBtZXRob2QgdG8gc3VjY2VlZC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD50cnVlIGlmIHRoZSBjdXJzb3Igd2FzIG1vdmVkOyBvdGhlcndpc2UsIGZhbHNlLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0idG9QcmV2QXR0cmlidXRlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXRvUHJldkF0dHJpYnV0ZTwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+dG9QcmV2QXR0cmlidXRlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+TW92ZXMgdGhlIGN1cnNvciB0byB0aGUgcHJldmlvdXMgc2libGluZyBhdHRyaWJ1dGUsIG9yIHJldHVybnMKLSBmYWxzZSBhbmQgZG9lcyBub3QgbW92ZSB0aGUgY3Vyc29yIGlmIHRoZXJlIGlzIG5vIHByZXZpb3VzCi0gc2libGluZyBhdHRyaWJ1dGUuIFRoZSBvcmRlciBvZiBhdHRyaWJ1dGVzIGlzIGFyYml0cmFyeSwgYnV0IHN0YWJsZS48YnIvPjxici8+Ci0gCi0geG1sbnMgYXR0cmlidXRlcyAobmFtZXNwYWNlIGRlY2xhcmF0aW9ucykgYXJlIG5vdCBjb25zaWRlcmVkIAotIGF0dHJpYnV0ZXMgYnkgdGhpcyBmdW5jdGlvbi48YnIvPjxici8+Ci0KLSBUaGUgY3Vyc29yIG11c3QgYmUgb24gYW4gYXR0cmlidXRlIGZvciB0aGlzIG1ldGhvZCB0byBzdWNjZWVkLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRydWUgaWYgdGhlIGN1cnNvciB3YXMgbW92ZWQ7IG90aGVyd2lzZSwgZmFsc2UuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRBdHRyaWJ1dGVUZXh0KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRBdHRyaWJ1dGVUZXh0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5nZXRBdHRyaWJ1dGVUZXh0PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7YXR0ck5hbWUpPC9QUkU+Ci08REw+Ci08REQ+V2hlbiBhdCBhIFNUQVJUIG9yIFNUQVJURE9DLCByZXR1cm5zIHRoZSBhdHRyaWJ1dGUgdGV4dCBmb3IgdGhlIGdpdmVuCi0gYXR0cmlidXRlLiBXaGVuIG5vdCBhdCBhIFNUQVJUIG9yIFNUQVJURE9DIG9yIHRoZSBhdHRyaWJ1dGUgZG9lcyBub3QKLSBleGlzdCwgcmV0dXJucyBudWxsLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5hdHRyTmFtZTwvQ09ERT4gLSBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHdob3NlIHZhbHVlIGlzIHJlcXVlc3RlZC4KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+VGhlIGF0dHJpYnV0ZSdzIHZhbHVlIGlmIGl0IGhhcyBvbmU7IG90aGVyd2lzZSwgbnVsbC48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEF0dHJpYnV0ZVRleHQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSwgamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEF0dHJpYnV0ZVRleHQ8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPnNldEF0dHJpYnV0ZVRleHQ8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDthdHRyTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPldoZW4gYXQgYSBTVEFSVCBvciBTVEFSVERPQywgc2V0cyB0aGUgYXR0cmlidXRlIHRleHQgZm9yIHRoZSBnaXZlbgotIGF0dHJpYnV0ZS4gV2hlbiBub3QgYXQgYSBTVEFSVCBvciBTVEFSVERPQyByZXR1cm5zIGZhbHNlLgotIElmIHRoZSBhdHRyaWJ1dGUgZG9lcyBub3QgZXhpc3QsIG9uZSBpcyBjcmVhdGVkLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5hdHRyTmFtZTwvQ09ERT4gLSBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHdob3NlIHZhbHVlIGlzIGJlaW5nIHNldC48REQ+PENPREU+dmFsdWU8L0NPREU+IC0gVGhlIG5ldyB2YWx1ZSBmb3IgdGhlIGF0dHJpYnV0ZS4KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dHJ1ZSBpZiB0aGUgbmV3IHZhbHVlIHdhcyBzZXQ7IG90aGVyd2lzZSwgZmFsc2UuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJyZW1vdmVBdHRyaWJ1dGUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXJlbW92ZUF0dHJpYnV0ZTwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+cmVtb3ZlQXR0cmlidXRlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7YXR0ck5hbWUpPC9QUkU+Ci08REw+Ci08REQ+V2hlbiBhdCBhIFNUQVJUIG9yIFNUQVJURE9DLCByZW1vdmVzIHRoZSBhdHRyaWJ1dGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+YXR0ck5hbWU8L0NPREU+IC0gVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0aGF0IHNob3VsZCBiZSByZW1vdmVkLgotPERUPjxCPlJldHVybnM6PC9CPjxERD50cnVlIGlmIHRoZSBhdHRyaWJ1dGUgd2FzIHJlbW92ZWQ7IG90aGVyd2lzZSwgZmFsc2UuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRUZXh0VmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0VGV4dFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5nZXRUZXh0VmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5HZXRzIHRoZSB0ZXh0IHZhbHVlIG9mIHRoZSBjdXJyZW50IGRvY3VtZW50LCBlbGVtZW50LCBhdHRyaWJ1dGUsCi0gY29tbWVudCwgcHJvY2luc3Qgb3IgdGV4dCB0b2tlbi4gPGJyLz48YnIvPgotCi0gV2hlbiBnZXR0aW5nIHRoZSB0ZXh0IHZhbHVlIG9mIGFuIGVsZW1lbnQsIG5vbi10ZXh0IGNvbnRlbnQgc3VjaAotIGFzIGNvbW1lbnRzIGFuZCBwcm9jZXNzaW5nIGluc3RydWN0aW9ucyBhcmUgaWdub3JlZCBhbmQgdGV4dCBpcyBjb25jYXRlbmF0ZWQuCi0gRm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBuZXN0ZWQgZWxlbWVudCBjaGlsZHJlbiwgdGhpcwotIHJldHVybnMgdGhlIGNvbmNhdGVuYXRlZCB0ZXh0IG9mIGFsbCBtaXhlZCBjb250ZW50IGFuZCB0aGUKLSB0ZXh0IG9mIGFsbCB0aGUgZWxlbWVudCBjaGlsZHJlbiwgcmVjdXJzaW5nIGluIGZpcnN0LXRvLWxhc3QKLSBkZXB0aGZpcnN0IG9yZGVyLjxici8+PGJyLz4KLQotIEZvciBhdHRyaWJ1dGVzLCB0aGlzIHJldHVybnMgdGhlIGF0dHJpYnV0ZSB2YWx1ZS48YnIvPjxici8+Ci0KLSBGb3IgY29tbWVudHMgYW5kIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLCB0aGlzIHJldHVybnMgdGhlIHRleHQgY29udGVudHMgCi0gb2YgdGhlIGNvbW1lbnQgb3IgUEksIG5vdCBpbmNsdWRpbmcgdGhlIGRlbGltaXRpbmcgc2VxdWVuY2VzICZsdDshLS0gLS0mZ3Q7LCAmbHQ7PyA/Jmd0Oy4KLTxici8+PGJyLz4KLSBJZiB0aGUgY3VycmVudCB0b2tlbiBpcyBub3QgYSBTVEFSVCwgU1RBUlRET0MsIFRFWFQsIEFUVFIsIENPTU1FTlQsIG9yCi0gUFJPQ0lOU1QsIHRoaXMgcmV0dXJucyBudWxsLiBUaGUgdmFsdWUgb2YgYW4gZW1wdHkgdGFnIGlzIHRoZQotIGVtcHR5IHN0cmluZy4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLQotPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgdGV4dCB2YWx1ZSBvZiB0aGUgY3VycmVudCB0b2tlbiwgaWYgdGhlIHRva2VuJ3MgdHlwZSBpcwotIFNUQVJULCBTVEFSVERPQywgVEVYVCwgQVRUUiwgQ09NTUVOVCwgb3IgUFJPQ0lOU1Q7IG51bGwgaWYgdGhlIHR5cGUgaXMKLSBFTkQsIEVORERPQywgTk9ORSwgb3IgTkFNRVNQQUNFLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0VGV4dFZhbHVlKGNoYXJbXSwgaW50LCBpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRUZXh0VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+Z2V0VGV4dFZhbHVlPC9CPihjaGFyW10mbmJzcDtyZXR1cm5lZENoYXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7bWF4Q2hhcmFjdGVyQ291bnQpPC9QUkU+Ci08REw+Ci08REQ+Q29waWVzIHRoZSB0ZXh0IHZhbHVlIG9mIHRoZSBjdXJyZW50IGRvY3VtZW50LCBlbGVtZW50LCBhdHRyaWJ1dGUsCi0gY29tbWVudCwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBvciB0ZXh0IHRva2VuLCBjb3VudGluZyByaWdodCBmcm9tIAotIHRoaXMgY3Vyc29yJ3MgbG9jYXRpb24gdXAgdG8gPGVtPm1heENoYXJhY3RlckNvdW50PC9lbT4sCi0gYW5kIGNvcGllcyB0aGUgcmV0dXJuZWQgdGV4dCBpbnRvIDxlbT5yZXR1cm5lZENoYXJzPC9lbT4uIDxici8+PGJyLz4KLSAKLSBXaGVuIGdldHRpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gZWxlbWVudCwgbm9uLXRleHQgY29udGVudCBzdWNoCi0gYXMgY29tbWVudHMgYW5kIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zIGFyZSBpZ25vcmVkIGFuZCB0ZXh0IGlzIGNvbmNhdGVuYXRlZC4KLSBGb3IgZWxlbWVudHMgdGhhdCBoYXZlIG5lc3RlZCBlbGVtZW50IGNoaWxkcmVuLCB0aGlzCi0gcmV0dXJucyB0aGUgY29uY2F0ZW5hdGVkIHRleHQgb2YgYWxsIG1peGVkIGNvbnRlbnQgYW5kIHRoZQotIHRleHQgb2YgYWxsIHRoZSBlbGVtZW50IGNoaWxkcmVuLCByZWN1cnNpbmcgaW4gZmlyc3QtdG8tbGFzdAotIGRlcHRoZmlyc3Qgb3JkZXIuPGJyLz48YnIvPgotCi0gRm9yIGF0dHJpYnV0ZXMsIHRoaXMgcmV0dXJucyB0aGUgYXR0cmlidXRlIHZhbHVlLjxici8+PGJyLz4KLQotIEZvciBjb21tZW50cyBhbmQgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMsIHRoaXMgcmV0dXJucyB0aGUgdGV4dCBjb250ZW50cyAKLSBvZiB0aGUgY29tbWVudCBvciBQSSwgbm90IGluY2x1ZGluZyB0aGUgZGVsaW1pdGluZyBzZXF1ZW5jZXMgJmx0OyEtLSAtLSZndDssICZsdDs/ID8mZ3Q7LgotIDxici8+PGJyLz4KLSAKLSBJZiB0aGUgY3VycmVudCB0b2tlbiBpcyBFTkQsIEVORERPQywgb3IgTkFNRVNQQUNFLCB0aGlzIHJldHVybnMgMC4gCi0gVGhlIHZhbHVlIG9mIGFuIGVtcHR5IHRhZyBpcyB0aGUgZW1wdHkgc3RyaW5nLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5yZXR1cm5lZENoYXJzPC9DT0RFPiAtIEEgY2hhcmFjdGVyIGFycmF5IHRvIGhvbGQgdGhlIHJldHVybmVkIGNoYXJhY3RlcnMuPEREPjxDT0RFPm9mZnNldDwvQ09ERT4gLSBUaGUgcG9zaXRpb24gd2l0aGluIHJldHVybmVkQ2hhcnMgdG8gd2hpY2ggdGhlIGZpcnN0IG9mIHRoZSAKLSByZXR1cm5lZCBjaGFyYWN0ZXJzIHNob3VsZCBiZSBjb3BpZWQuPEREPjxDT0RFPm1heENoYXJhY3RlckNvdW50PC9DT0RFPiAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFmdGVyIHRoaXMgY3Vyc29yJ3MgCi0gbG9jYXRpb24gdG8gY29weS4KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+VGhlIGFjdHVhbCBudW1iZXIgb2YgY2hhcmFjdGVycyBjb3BpZWQ7IDAgaWYgbm8gY2hhcmFjdGVycyAKLSB3ZXJlIGNvcGllZC48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFRleHRWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0VGV4dFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRUZXh0VmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDt0ZXh0KTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIHRleHQgdmFsdWUgb2YgdGhlIFhNTCBhdCB0aGlzIGN1cnNvcidzIGxvY2F0aW9uIGlmIHRoYXQgWE1MJ3MKLSB0b2tlbiB0eXBlIGlzIFNUQVJULCBTVEFSVERPQywgQVRUUiwgQ09NTUVOVCBvciBQUk9DSU5TVC4gPGJyLz48YnIvPgotCi0gRm9yIGVsZW1lbnRzIHRoYXQgaGF2ZSBuZXN0ZWQgY2hpbGRyZW4gdGhpcyBmaXJzdCByZW1vdmVzIGFsbAotIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50IGFuZCByZXBsYWNlcyBpdCB3aXRoIHRoZSBnaXZlbiB0ZXh0LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT50ZXh0PC9DT0RFPiAtIFRoZSB0ZXh0IHRvIHVzZSBhcyBhIG5ldyB2YWx1ZS4KLTxEVD48Qj5UaHJvd3M6PC9CPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvSWxsZWdhbFN0YXRlRXhjZXB0aW9uLmh0bWwiPklsbGVnYWxTdGF0ZUV4Y2VwdGlvbjwvQT48L0NPREU+IC0gSWYgdGhlIHRva2VuIHR5cGUgYXQgdGhpcwotIGN1cnNvcidzIGxvY2F0aW9uIGlzIG5vdCBTVEFSVCwgU1RBUlRET0MsIEFUVFIsIENPTU1FTlQgb3IKLSBQUk9DSU5TVC48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFRleHRWYWx1ZShjaGFyW10sIGludCwgaW50KSI+PCEtLSAtLT48L0E+PEgzPgotc2V0VGV4dFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRUZXh0VmFsdWU8L0I+KGNoYXJbXSZuYnNwO3NvdXJjZUNoYXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO29mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtsZW5ndGgpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdGV4dCB2YWx1ZSBvZiB0aGUgWE1MIGF0IHRoaXMgY3Vyc29yJ3MgbG9jYXRpb24gKGlmIHRoYXQgWE1MJ3MKLSB0b2tlbiB0eXBlIGlzIFNUQVJULCBTVEFSVERPQywgQVRUUiwgQ09NTUVOVCBvciBQUk9DSU5TVCkgdG8gdGhlIAotIGNvbnRlbnRzIG9mIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIGFycmF5LiA8YnIvPjxici8+Ci0KLSBGb3IgZWxlbWVudHMgdGhhdCBoYXZlIG5lc3RlZCBjaGlsZHJlbiB0aGlzIGZpcnN0IHJlbW92ZXMgYWxsCi0gdGhlIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQgYW5kIHJlcGxhY2VzIGl0IHdpdGggdGhlIGdpdmVuIHRleHQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnNvdXJjZUNoYXJzPC9DT0RFPiAtIEEgY2hhcmFjdGVyIGFycmF5IGNvbnRhaW5pbmcgdGhlIFhNTCdzIG5ldyB2YWx1ZS48REQ+PENPREU+b2Zmc2V0PC9DT0RFPiAtIFRoZSBwb3NpdGlvbiB3aXRoaW4gc291cmNlQ2hhcnMgZnJvbSB3aGljaCB0aGUgZmlyc3Qgb2YgCi0gdGhlIHNvdXJjZSBjaGFyYWN0ZXJzIHNob3VsZCBiZSBjb3BpZWQuPEREPjxDT0RFPmxlbmd0aDwvQ09ERT4gLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBzZXQgYXMgdGhlIFhNTCdzIG5ldwotIHZhbHVlLgotPERUPjxCPlRocm93czo8L0I+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uaHRtbCI+SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBJZiB0aGUgdG9rZW4gdHlwZSBhdCB0aGlzCi0gY3Vyc29yJ3MgbG9jYXRpb24gaXMgbm90IFNUQVJULCBTVEFSVERPQywgQVRUUiwgQ09NTUVOVCBvcgotIFBST0NJTlNULjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0Q2hhcnMoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Q2hhcnM8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPmdldENoYXJzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBjaGFyYWN0ZXJzIHRvIHRoZSByaWdodCBvZiB0aGUgY3Vyc29yIHVwIHRvIHRoZSBuZXh0IHRva2VuLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRDaGFycyhjaGFyW10sIGludCwgaW50KSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Q2hhcnM8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+Z2V0Q2hhcnM8L0I+KGNoYXJbXSZuYnNwO3JldHVybmVkQ2hhcnMsCi0gICAgICAgICAgICAgICAgICAgIGludCZuYnNwO29mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7bWF4Q2hhcmFjdGVyQ291bnQpPC9QUkU+Ci08REw+Ci08REQ+Q29waWVzIGNoYXJhY3RlcnMgdXAgdG8gdGhlIHNwZWNpZmllZCBtYXhpbXVtIG51bWJlciwgY291bnRpbmcgcmlnaHQgZnJvbSAKLSB0aGlzIGN1cnNvcidzIGxvY2F0aW9uIHRvIHRoZSBjaGFyYWN0ZXIgYXQgPGVtPm1heENoYXJhY3RlckNvdW50PC9lbT4uICBUaGUgCi0gcmV0dXJuZWQgY2hhcmFjdGVycyBhcmUgYWRkZWQgdG8gPGVtPnJldHVybmVkQ2hhcnM8L2VtPiwgd2l0aCB0aGUgZmlyc3QKLSBjaGFyYWN0ZXIgY29waWVkIHRvIHRoZSA8ZW0+b2Zmc2V0PC9lbT4gcG9zaXRpb24uIFRoZSA8ZW0+bWF4Q2hhcmFjdGVyQ291bnQ8L2VtPiAKLSBwYXJhbWV0ZXIgc2hvdWxkIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgbGVuZ3RoIG9mIDxlbT5yZXR1cm5lZENoYXJzPC9lbT4gCi0gbWludXMgPGVtPm9mZnNldDwvZW0+LiBDb3BpZXMgYSBudW1iZXIgb2YgY2hhcmFjdGVycywgd2hpY2ggaXMgCi0gZWl0aGVyIDxlbT5tYXhDaGFyYWN0ZXJDb3VudDwvZW0+IG9yIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB1cCB0byB0aGUgbmV4dCB0b2tlbiwgCi0gd2hpY2hldmVyIGlzIGxlc3MuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnJldHVybmVkQ2hhcnM8L0NPREU+IC0gQSBjaGFyYWN0ZXIgYXJyYXkgdG8gaG9sZCB0aGUgcmV0dXJuZWQgY2hhcmFjdGVycy48REQ+PENPREU+b2Zmc2V0PC9DT0RFPiAtIFRoZSBwb3NpdGlvbiB3aXRoaW4gcmV0dXJuZWRDaGFycyBhdCB3aGljaCB0aGUgZmlyc3Qgb2YgdGhlIAotIHJldHVybmVkIGNoYXJhY3RlcnMgc2hvdWxkIGJlIGFkZGVkLjxERD48Q09ERT5tYXhDaGFyYWN0ZXJDb3VudDwvQ09ERT4gLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBhZnRlciB0aGlzIGN1cnNvcidzIAotIGxvY2F0aW9uIHRvIHJldHVybi4KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+VGhlIGFjdHVhbCBudW1iZXIgb2YgY2hhcmFjdGVycyByZXR1cm5lZDsgMCBpZiBubyBjaGFyYWN0ZXJzIAotIHdlcmUgcmV0dXJuZWQgb3IgaWYgdGhlIGN1cnJlbnQgdG9rZW4gaXMgbm90IFRFWFQuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ0b1N0YXJ0RG9jKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXRvU3RhcnREb2M8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnRvU3RhcnREb2M8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5Nb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBTVEFSVERPQyB0b2tlbiwgd2hpY2ggaXMgdGhlIAotIHJvb3Qgb2YgdGhlIGRvY3VtZW50LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ0b0VuZERvYygpIj48IS0tIC0tPjwvQT48SDM+Ci10b0VuZERvYzwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+dG9FbmREb2M8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5Nb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBFTkRET0MgdG9rZW4sIHdoaWNoIGlzIHRoZSBlbmQKLSBvZiB0aGUgZG9jdW1lbnQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzSW5TYW1lRG9jdW1lbnQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IpIj48IS0tIC0tPjwvQT48SDM+Ci1pc0luU2FtZURvY3VtZW50PC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5pc0luU2FtZURvY3VtZW50PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Jm5ic3A7Y3Vyc29yKTwvUFJFPgotPERMPgotPEREPkRldGVybWluZXMgaWYgdGhlIHNwZWNpZmllZCBjdXJzb3IgaXMgaW4gdGhlIHNhbWUgZG9jdW1lbnQgYXMKLSB0aGlzIGN1cnNvci4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+Y3Vyc29yPC9DT0RFPiAtIFRoZSBjdXJzb3IgdGhhdCBtYXkgYmUgaW4gdGhlIHNhbWUgZG9jdW1lbnQKLSBhcyB0aGlzIGN1cnNvci4KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIGN1cnNvciBpcyBpbiB0aGUgc2FtZSBkb2N1bWVudDsKLSBvdGhlcndpc2UsIGZhbHNlLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iY29tcGFyZVBvc2l0aW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yKSI+PCEtLSAtLT48L0E+PEgzPgotY29tcGFyZVBvc2l0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmNvbXBhcmVQb3NpdGlvbjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPiZuYnNwO2N1cnNvcik8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGFuIGludGVnZXIgaW5kaWNhdGluZyB3aGV0aGVyIHRoaXMgY3Vyc29yIGlzIGJlZm9yZSwgCi0gYWZ0ZXIsIG9yIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGFzIHRoZSBzcGVjaWZpZWQgY3Vyc29yLiA8YnIvPjxici8+Ci0gCi0gPGNvZGU+YS5jb21wYXJlUG9zaXRpb24oYikgPCAwPC9jb2RlPiBtZWFucyBhIGlzIHRvIHRoZSBsZWZ0IG9mIGIuPGJyLz4KLSA8Y29kZT5hLmNvbXBhcmVQb3NpdGlvbihiKSA9PSAwPC9jb2RlPiBtZWFucyBhIGlzIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGFzIGIuPGJyLz4KLSA8Y29kZT5hLmNvbXBhcmVQb3NpdGlvbihiKSA+IDA8L2NvZGU+IG1lYW5zIGEgaXMgdG8gdGhlIHJpZ2h0IG9mIGIuPGJyLz48YnIvPgotCi0gVGhlIHNvcnQgb3JkZXIgb2YgY3Vyc29ycyBpbiB0aGUgZG9jdW1lbnQgaXMgdGhlIHRva2VuIG9yZGVyLgotIEZvciBleGFtcGxlLCBpZiBjdXJzb3IgImEiIGlzIGF0IGEgU1RBUlQgdG9rZW4gYW5kIHRoZSBjdXJzb3IgImIiCi0gaXMgYXQgYSB0b2tlbiB3aXRoaW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBzYW1lIGVsZW1lbnQsIHRoZW4KLSBhLmNvbXBhcmVQb3NpdGlvbihiKSB3aWxsIHJldHVybiAtMSwgbWVhbmluZyB0aGF0IHRoZSBwb3NpdGlvbgotIG9mIGEgaXMgYmVmb3JlIGIuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmN1cnNvcjwvQ09ERT4gLSBUaGUgY3Vyc29yIHdob3NlIHBvc2l0aW9uIHNob3VsZCBiZSBjb21wYXJlZAotIHdpdGggdGhpcyBjdXJzb3IuCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPjEgaWYgdGhpcyBjdXJzb3IgaXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBjdXJzb3I7IDAgaWYgCi0gdGhpcyBjdXJzb3IgaXMgYXQgdGhlIHNhbWUgcG9zaXRpb24gYXMgdGhlIHNwZWNpZmllZCBjdXJzb3I7IAotIC0xIGlmIHRoaXMgY3Vyc29yIGlzIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGN1cnNvci4KLTxEVD48Qj5UaHJvd3M6PC9CPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmh0bWwiPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvQT48L0NPREU+IC0gSWYgdGhlIHNwZWNpZmllZAotIGN1cnNvciBpcyBub3QgaW4gdGhlIHNhbWUgZG9jdW1lbnQgYXMgdGhpcyBjdXJzb3IuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc0xlZnRPZihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcikiPjwhLS0gLS0+PC9BPjxIMz4KLWlzTGVmdE9mPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5pc0xlZnRPZjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPiZuYnNwO2N1cnNvcik8L1BSRT4KLTxETD4KLTxERD5EZXRlcm1pbmVzIGlmIHRoaXMgY3Vyc29yIGlzIHRvIHRoZSBsZWZ0IG9mIChvciBiZWZvcmUpCi0gdGhlIHNwZWNpZmllZCBjdXJzb3IuIE5vdGUgdGhhdCB0aGlzIGlzIHRoZSBzYW1lIGFzIAotIDxjb2RlPmEuY29tcGFyZVBvc2l0aW9uKGIpICZsdDsgMCA8L2NvZGU+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmN1cnNvcjwvQ09ERT4gLSBUaGUgY3Vyc29yIHdob3NlIHBvc2l0aW9uIHNob3VsZCBiZSBjb21wYXJlZAotIHdpdGggdGhpcyBjdXJzb3IuCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRydWUgaWYgdGhpcyBjdXJzb3IgaXMgdG8gdGhlIGxlZnQgb2YgdGhlIHNwZWNpZmllZAotIGN1cnNvcjsgb3RoZXJ3aXNlLCBmYWxzZS48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzQXRTYW1lUG9zaXRpb25BcyhvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcikiPjwhLS0gLS0+PC9BPjxIMz4KLWlzQXRTYW1lUG9zaXRpb25BczwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNBdFNhbWVQb3NpdGlvbkFzPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Jm5ic3A7Y3Vyc29yKTwvUFJFPgotPERMPgotPEREPkRldGVybWluZXMgaWYgdGhpcyBjdXJzb3IgaXMgYXQgdGhlIHNhbWUgcG9zaXRpb24gYXMKLSB0aGUgc3BlY2lmaWVkIGN1cnNvci4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIHNhbWUgYXMgCi0gPGNvZGU+YS5jb21wYXJlUG9zaXRpb24oYikgPT0gMCA8L2NvZGU+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmN1cnNvcjwvQ09ERT4gLSBUaGUgY3Vyc29yIHdob3NlIHBvc2l0aW9uIHNob3VsZCBiZSBjb21wYXJlZAotIHdpdGggdGhpcyBjdXJzb3IuCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRydWUgaWYgdGhpcyBjdXJzb3IgaXMgYXQgdGhlIHNhbWUgcG9zaXRpb24gYXMgCi0gdGhlIHNwZWNpZmllZCBjdXJzb3I7IG90aGVyd2lzZSwgZmFsc2UuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc1JpZ2h0T2Yob3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IpIj48IS0tIC0tPjwvQT48SDM+Ci1pc1JpZ2h0T2Y8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzUmlnaHRPZjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPiZuYnNwO2N1cnNvcik8L1BSRT4KLTxETD4KLTxERD5EZXRlcm1pbmVzIGlmIHRoaXMgY3Vyc29yIGlzIHRvIHRoZSByaWdodCBvZiAob3IgYWZ0ZXIpCi0gdGhlIHNwZWNpZmllZCBjdXJzb3IuIE5vdGUgdGhhdCB0aGlzIGlzIHRoZSBzYW1lIGFzIAotIDxjb2RlPmEuY29tcGFyZVBvc2l0aW9uKGIpICZndDsgMCA8L2NvZGU+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmN1cnNvcjwvQ09ERT4gLSBUaGUgY3Vyc29yIHdob3NlIHBvc2l0aW9uIHNob3VsZCBiZSBjb21wYXJlZAotIHdpdGggdGhpcyBjdXJzb3IuCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRydWUgaWYgdGhpcyBjdXJzb3IgaXMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBzcGVjaWZpZWQKLSBjdXJzb3I7IG90aGVyd2lzZSwgZmFsc2UuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLWV4ZWNRdWVyeTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4gPEI+ZXhlY1F1ZXJ5PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cXVlcnkpPC9QUkU+Ci08REw+Ci08REQ+RXhlY3V0ZXMgdGhlIHNwZWNpZmllZCBYUXVlcnkgZXhwcmVzc2lvbiBhZ2FpbnN0IHRoZSBYTUwgdGhpcwotIGN1cnNvciBpcyBpbi4gPGJyLz48YnIvPgotIAotIFRoZSBxdWVyeSBtYXkgYmUgYSBTdHJpbmcgb3IgYSBjb21waWxlZCBxdWVyeS4gWW91IGNhbiBwcmVjb21waWxlCi0gYW4gWFF1ZXJ5IGV4cHJlc3Npb24gdXNpbmcgdGhlIFhtbEJlYW5zLmNvbXBpbGVRdWVyeSBtZXRob2QuIDxici8+PGJyPgotIAotIFRoZSByb290IHJlZmVycmVkIHRvIGJ5IHRoZSBleHByZXNzaW9uIHNob3VsZCBiZSBnaXZlbiBhcyAKLSBhIGRvdC4gVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHBhdGggZXhwcmVzc2lvbjoKLSA8cHJlPgotIFhtbEN1cnNvciByZXN1bHRzID0gY3Vyc29yLmV4ZWNRdWVyeSgicHVyY2hhc2Utb3JkZXIvbGluZS1pdGVtW3ByaWNlICZsdDs9IDIwLjAwXSIpOwotIDwvcHJlPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5xdWVyeTwvQ09ERT4gLSBUaGUgWFF1ZXJ5IGV4cHJlc3Npb24gdG8gZXhlY3V0ZS4KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+QSBjdXJzb3IgY29udGFpbmluZyB0aGUgcmVzdWx0cyBvZiB0aGUgcXVlcnkuCi08RFQ+PEI+VGhyb3dzOjwvQj4KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFJ1bnRpbWVFeGNlcHRpb24uaHRtbCI+WG1sUnVudGltZUV4Y2VwdGlvbjwvQT48L0NPREU+IC0gSWYgdGhlIHF1ZXJ5IGV4cHJlc3Npb24gaXMgaW52YWxpZC48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImV4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1leGVjUXVlcnk8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+IDxCPmV4ZWNRdWVyeTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3F1ZXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L1BSRT4KLTxETD4KLTxERD5FeGVjdXRlcyB0aGUgc3BlY2lmaWVkIFhRdWVyeSBleHByZXNzaW9uIGFnYWluc3QgdGhlIFhNTCB0aGlzCi0gY3Vyc29yIGlzIGluLCBhbmQgdXNpbmcgdGhlIHNwZWNpZmllZCBvcHRpb25zLiA8YnIvPjxici8+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnF1ZXJ5PC9DT0RFPiAtIFRoZSBYUXVlcnkgZXhwcmVzc2lvbiB0byBleGVjdXRlLjxERD48Q09ERT5vcHRpb25zPC9DT0RFPiAtIE9wdGlvbnMgZm9yIHRoZSBxdWVyeS4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gY2FsbCAKLSB0aGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0WHF1ZXJ5Q3VycmVudE5vZGVWYXIoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPlhtbE9wdGlvbnMuc2V0WHF1ZXJ5Q3VycmVudE5vZGVWYXIoU3RyaW5nKTwvQ09ERT48L0E+Ci0gbWV0aG9kIHRvIHNwZWNpZnkgYSBwYXJ0aWN1bGFyIG5hbWUgZm9yIHRoZSBxdWVyeSBleHByZXNzaW9uIAotIHZhcmlhYmxlIHRoYXQgaW5kaWNhdGVzIHRoZSBjb250ZXh0IG5vZGUuCi08RFQ+PEI+VGhyb3dzOjwvQj4KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFJ1bnRpbWVFeGNlcHRpb24uaHRtbCI+WG1sUnVudGltZUV4Y2VwdGlvbjwvQT48L0NPREU+IC0gSWYgdGhlIHF1ZXJ5IGV4cHJlc3Npb24gaXMgaW52YWxpZC48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldERvY0NoYW5nZVN0YW1wKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldERvY0NoYW5nZVN0YW1wPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuQ2hhbmdlU3RhbXAuaHRtbCI+WG1sQ3Vyc29yLkNoYW5nZVN0YW1wPC9BPiA8Qj5nZXREb2NDaGFuZ2VTdGFtcDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGN1cnJlbnQgY2hhbmdlIHN0YW1wIGZvciB0aGUgZG9jdW1lbnQgdGhlIGN1cnJlbnQgY3Vyc29yIGlzIGluLiAKLSBUaGlzIGNoYW5nZSBzdGFtcCBjYW4gYmUgcXVlcmllZCBhdCBhIGxhdGVyIHBvaW50IGluIHRpbWUgdG8gZmluZCBvdXQKLSBpZiB0aGUgZG9jdW1lbnQgaGFzIGNoYW5nZWQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+VGhlIGNoYW5nZSBzdGFtcCBmb3IgdGhlIGRvY3VtZW50IHRoZSBjdXJyZW50IGN1cnNvciBpcyBpbi48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEJvb2ttYXJrKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yLlhtbEJvb2ttYXJrKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0Qm9va21hcms8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldEJvb2ttYXJrPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxCb29rbWFyay5odG1sIj5YbWxDdXJzb3IuWG1sQm9va21hcms8L0E+Jm5ic3A7Ym9va21hcmspPC9QUkU+Ci08REw+Ci08REQ+U2V0cyBhIGJvb2ttYXJrIHRvIHRoZSBkb2N1bWVudCBhdCB0aGlzIGN1cnNvcidzIGxvY2F0aW9uLgotCi0gVGhlIGJvb2ttYXJrIGlzIGF0dGFjaGVkIHRvIHRoZSB0b2tlbiBpbiB0aGUgdHJlZSBpbW1lZGlhdGVseSAKLSBhZnRlciB0aGUgY3Vyc29yLiBJZiB0aGUgdHJlZSBpcyBtYW5pcHVsYXRlZCB0byBtb3ZlCi0gdGhhdCBvYmplY3QgdG8gYSBkaWZmZXJlbnQgcGxhY2UsIHRoZSBib29rbWFyayBtb3ZlcyB3aXRoIGl0LgotIElmIHRoZSB0cmVlIGlzIG1hbmlwdWxhdGVkIHRvIGRlbGV0ZSB0aGF0IHRva2VuIGZyb20gdGhlCi0gdHJlZSwgdGhlIGJvb2ttYXJrIGlzIG9ycGhhbmVkLiBDb3B5IG9wZXJhdGlvbnMgZG8gbm90IGNvcHkKLSBib29rbWFya3MuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmJvb2ttYXJrPC9DT0RFPiAtIFRoZSBib29rbWFyayB0byBzZXQuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRCb29rbWFyayhqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Qm9va21hcms8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxCb29rbWFyay5odG1sIj5YbWxDdXJzb3IuWG1sQm9va21hcms8L0E+IDxCPmdldEJvb2ttYXJrPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7a2V5KTwvUFJFPgotPERMPgotPEREPlJldHJpZXZlcyB0aGUgYm9va21hcmsgd2l0aCB0aGUgc3BlY2lmaWVkIGtleSAKLSBhdCB0aGlzIGN1cnNvcidzIGxvY2F0aW9uLiBJZiB0aGVyZSBpcyBubyBib29rbWFyayB3aG9zZSBrZXkgaXMgCi0gZ2l2ZW4gYnkgdGhlIHNwZWNpZmllZCBrZXkgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24sIG51bGwgaXMgcmV0dXJuZWQuIAotIElmIHRoZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxCb29rbWFyay5odG1sI2dldEtleSgpIj48Q09ERT5nZXRLZXk8L0NPREU+PC9BPiBtZXRob2QgaXMgbm90IG92ZXJyaWRkZW4gb24gCi0gdGhlIGJvb2ttYXJrLCB0aGVuIHRoZSBib29rbWFyaydzIGNsYXNzIGlzIHVzZWQgYXMgdGhlIGtleS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+a2V5PC9DT0RFPiAtIFRoZSBrZXkgZm9yIHRoZSBib29rbWFyayB0byByZXRyaWV2ZS4KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+VGhlIHJlcXVlc3RlZCBib29rbWFyazsgbnVsbCBpZiB0aGVyZSBpcyBubyBib29rbWFyawotIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNwZWNpZmllZCBrZXkuPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjbGVhckJvb2ttYXJrKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1jbGVhckJvb2ttYXJrPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5jbGVhckJvb2ttYXJrPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7a2V5KTwvUFJFPgotPERMPgotPEREPkNsZWFycyB0aGUgYm9va21hcmsgd2hvc2Uga2V5IGlzIHNwZWNpZmllZCwgaWYgdGhlIGJvb2ttYXJrCi0gZXhpc3RzIGF0IHRoaXMgY3Vyc29yJ3MgbG9jYXRpb24uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmtleTwvQ09ERT4gLSBUaGUgZm9yIHRoZSBib29rbWFyayB0byBjbGVhci48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEFsbEJvb2ttYXJrUmVmcyhqYXZhLnV0aWwuQ29sbGVjdGlvbikiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEFsbEJvb2ttYXJrUmVmczwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+Z2V0QWxsQm9va21hcmtSZWZzPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NvbGxlY3Rpb24uaHRtbCI+Q29sbGVjdGlvbjwvQT4mbmJzcDtsaXN0VG9GaWxsKTwvUFJFPgotPERMPgotPEREPlJldHJpZXZlcyBhbGwgdGhlIGJvb2ttYXJrcyBhdCB0aGlzIGxvY2F0aW9uLCBhZGRpbmcgdGhlbSB0bwotIHRoZSBzcGVjaWZpZWQgY29sbGVjdGlvbi4gQm9va21hcmtzIGhlbGQgYnkgd2VhayByZWZlcmVuY2VzIGFyZQotIGFkZGVkIHRvIHRoaXMgY29sbGVjdGlvbiBhcyBXZWFrIHJlZmVyZW5jZWQgb2JqZWN0cyBwb2ludGluZyB0byB0aGUKLSBib29rbWFyay4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bGlzdFRvRmlsbDwvQ09ERT4gLSBUaGUgY29sbGVjdGlvbiB0aGF0IHdpbGwgY29udGFpbiBib29rbWFya3MKLSByZXR1cm5lZCBieSB0aGlzIG1ldGhvZC48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InJlbW92ZVhtbCgpIj48IS0tIC0tPjwvQT48SDM+Ci1yZW1vdmVYbWw8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPnJlbW92ZVhtbDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJlbW92ZXMgdGhlIFhNTCB0aGF0IGlzIGltbWVkaWF0ZWx5IGFmdGVyIHRoaXMgY3Vyc29yLgotIAotIEZvciB0aGUgVEVYVCwgQVRUUiwgTkFNRVNQQUNFLCBDT01NRU5UIGFuZCBQUk9DSU5TVCB0b2tlbnMsIGEgc2luZ2xlIAotIHRva2VuIGlzIHJlbW92ZWQuIEZvciBhIFNUQVJUIHRva2VuLCB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IGFuZCBhbGwgCi0gb2YgaXRzIGNvbnRlbnRzIGFyZSByZW1vdmVkLiBGb3IgYWxsIG90aGVyIHRva2VucywgdGhpcyBpcyBhIG5vLW9wLiAKLSBZb3UgY2Fubm90IHJlbW92ZSBhIFNUQVJURE9DLgotIAotIFRoZSBjdXJzb3JzIGxvY2F0ZWQgaW4gdGhlIFhNTCB0aGF0IHdhcyByZW1vdmVkIGFsbCBjb2xsYXBzZSB0byB0aGUgCi0gc2FtZSBsb2NhdGlvbi4gQWxsIGJvb2ttYXJrcyBpbiB0aGlzIFhNTCB3aWxsIGJlIG9ycGhhbmVkLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRydWUgaWYgYW55dGhpbmcgd2FzIHJlbW92ZWQ7IGZhbHNlIG9ubHkgaWYgdGhlIGN1cnNvciBpcyAKLSBqdXN0IGJlZm9yZSBFTkQgb3IgRU5ERE9DIHRva2VuLgotPERUPjxCPlRocm93czo8L0I+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uaHRtbCI+SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBJZiB0aGUgY3Vyc29yIGlzIGF0IGEgCi0gU1RBUlRET0MgdG9rZW4uPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJtb3ZlWG1sKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yKSI+PCEtLSAtLT48L0E+PEgzPgotbW92ZVhtbDwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+bW92ZVhtbDwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPiZuYnNwO3RvSGVyZSk8L1BSRT4KLTxETD4KLTxERD5Nb3ZlcyB0aGUgWE1MIGltbWVkaWF0ZWx5IGFmdGVyIHRoaXMgY3Vyc29yIHRvIHRoZSBsb2NhdGlvbgotIHNwZWNpZmllZCBieSB0aGUgPGVtPnRvSGVyZTwvZW0+IGN1cnNvciwgc2hpZnRpbmcgWE1MIGF0IHRoYXQgbG9jYXRpb24gCi0gdG8gdGhlIHJpZ2h0IHRvIG1ha2Ugcm9vbS4gRm9yIHRoZSBURVhULCBBVFRSLCBOQU1FU1BBQ0UsIAotIENPTU1FTlQgYW5kIFBST0NJTlNUIHRva2VucywgYSBzaW5nbGUgdG9rZW4gaXMgbW92ZWQuIEZvciBhIHN0YXJ0IHRva2VuLCB0aGUKLSBlbGVtZW50IGFuZCBhbGwgb2YgaXRzIGNvbnRlbnRzIGFyZSBtb3ZlZC4gRm9yIGFsbCBvdGhlciB0b2tlbnMsIHRoaXMKLSBpcyBhIG5vLW9wLgotIAotIFRoZSBib29rbWFya3MgbG9jYXRlZCBpbiB0aGUgWE1MIHRoYXQgd2FzIG1vdmVkIGFsc28gbW92ZSB0byB0aGUKLSBuZXcgbG9jYXRpb247IHRoZSBjdXJzb3JzIGRvbid0IG1vdmUgd2l0aCB0aGUgY29udGVudC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dG9IZXJlPC9DT0RFPiAtIFRoZSBjdXJzb3IgYXQgdGhlIGxvY2F0aW9uIHRvIHdoaWNoIHRoZSBYTUwgc2hvdWxkCi0gYmUgbW92ZWQuCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRydWUgaWYgYW55dGhpbmcgd2FzIG1vdmVkOyBmYWxzZSBvbmx5IGlmIHRoZSBjdXJzb3IgaXMgCi0ganVzdCBiZWZvcmUgRU5EIG9yIEVORERPQyB0b2tlbi4KLTxEVD48Qj5UaHJvd3M6PC9CPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmh0bWwiPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvQT48L0NPREU+IC0gSWYgdGhlIG9wZXJhdGlvbiBpcyBub3QgYWxsb3dlZAotIGF0IHRoZSBjdXJzb3IncyBsb2NhdGlvbi48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNvcHlYbWwob3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IpIj48IS0tIC0tPjwvQT48SDM+Ci1jb3B5WG1sPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5jb3B5WG1sPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Jm5ic3A7dG9IZXJlKTwvUFJFPgotPERMPgotPEREPkNvcGllcyB0aGUgWE1MIGltbWVkaWF0ZWx5IGFmdGVyIHRoaXMgY3Vyc29yIHRvIHRoZSBsb2NhdGlvbgotIHNwZWNpZmllZCBieSB0aGUgPGVtPnRvSGVyZTwvZW0+IGN1cnNvci4gRm9yIHRoZSBURVhULCBBVFRSLCBOQU1FU1BBQ0UsIAotIENPTU1FTlQgYW5kIFBST0NJTlNUIHRva2VucywgYSBzaW5nbGUgdG9rZW4gaXMgY29waWVkLiAgRm9yIGEgc3RhcnQgdG9rZW4sIAotIHRoZSBlbGVtZW50IGFuZCBhbGwgb2YgaXRzIGNvbnRlbnRzIGFyZSBjb3BpZWQuIEZvciBhbGwgb3RoZXIgdG9rZW5zLCB0aGlzCi0gaXMgYSBuby1vcC4KLSAKLSBUaGUgY3Vyc29ycyBhbmQgYm9va21hcmtzIGxvY2F0ZWQgaW4gdGhlIFhNTCB0aGF0IHdhcyBjb3BpZWQgYXJlIGFsc28gY29waWVkIAotIHRvIHRoZSBuZXcgbG9jYXRpb24uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnRvSGVyZTwvQ09ERT4gLSBUaGUgY3Vyc29yIGF0IHRoZSBsb2NhdGlvbiB0byB3aGljaCB0aGUgWE1MIHNob3VsZAotIGJlIGNvcGllZC4KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dHJ1ZSBpZiBhbnl0aGluZyB3YXMgY29waWVkOyBmYWxzZSBpZiB0aGUgdG9rZW4gc3VwcG9ydHMgdGhlIG9wZXJhdGlvbiwKLSBidXQgbm90aGluZyB3YXMgY29waWVkLgotPERUPjxCPlRocm93czo8L0I+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uaHRtbCI+SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBJZiB0aGUgb3BlcmF0aW9uIGlzIG5vdCBhbGxvd2VkCi0gYXQgdGhlIGN1cnNvcidzIGxvY2F0aW9uLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icmVtb3ZlWG1sQ29udGVudHMoKSI+PCEtLSAtLT48L0E+PEgzPgotcmVtb3ZlWG1sQ29udGVudHM8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPnJlbW92ZVhtbENvbnRlbnRzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmVtb3ZlcyB0aGUgY29udGVudHMgb2YgdGhlIGNvbnRhaW5lciAoU1RBUlRET0MgT1IgU1RBUlQpIGltbWVkaWF0ZWx5IGFmdGVyCi0gdGhpcyBjdXJzb3IuIEZvciBhbGwgb3RoZXIgc2l0dWF0aW9ucywgcmV0dXJucyBmYWxzZS4gRG9lcwotIG5vdCByZW1vdmUgYXR0cmlidXRlcyBvciBuYW1zcGFjZXMuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci0KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dHJ1ZSBpZiBhbnl0aGluZyB3YXMgY29waWVkOyBvdGhlcndpc2UsIGZhbHNlLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibW92ZVhtbENvbnRlbnRzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yKSI+PCEtLSAtLT48L0E+PEgzPgotbW92ZVhtbENvbnRlbnRzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5tb3ZlWG1sQ29udGVudHM8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4mbmJzcDt0b0hlcmUpPC9QUkU+Ci08REw+Ci08REQ+TW92ZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb250YWluZXIgKFNUQVJURE9DIE9SIFNUQVJUKSBpbW1lZGlhdGVseSBhZnRlcgotIHRoaXMgY3Vyc29yIHRvIHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgYnkgdGhlIDxlbT50b0hlcmU8L2VtPiBjdXJzb3IuCi0gRm9yIGFsbCBvdGhlciBzaXR1YXRpb25zLCByZXR1cm5zIGZhbHNlLiBEb2VzIG5vdCBtb3ZlIGF0dHJpYnV0ZXMgb3IKLSBuYW1lc3BhY2VzLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT50b0hlcmU8L0NPREU+IC0gVGhlIGN1cnNvciBhdCB0aGUgbG9jYXRpb24gdG8gd2hpY2ggdGhlIFhNTCBzaG91bGQgYmUgbW92ZWQuCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPnRydWUgaWYgYW55dGhpbmcgd2FzIG1vdmVkOyBvdGhlcndpc2UsIGZhbHNlLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iY29weVhtbENvbnRlbnRzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yKSI+PCEtLSAtLT48L0E+PEgzPgotY29weVhtbENvbnRlbnRzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5jb3B5WG1sQ29udGVudHM8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4mbmJzcDt0b0hlcmUpPC9QUkU+Ci08REw+Ci08REQ+Q29waWVzIHRoZSBjb250ZW50cyBvZiB0aGUgY29udGFpbmVyIChTVEFSVERPQyBPUiBTVEFSVCkgaW1tZWRpYXRlbHkgdG8KLSB0aGUgcmlnaHQgb2YgdGhlIGN1cnNvciB0byB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGJ5IHRoZSA8ZW0+dG9IZXJlPC9lbT4gY3Vyc29yLgotIEZvciBhbGwgb3RoZXIgc2l0dWF0aW9ucywgcmV0dXJucyBmYWxzZS4gIERvZXMgbm90IGNvcHkgYXR0cmlidXRlcyBvcgotIG5hbWVzcGFjZXMuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnRvSGVyZTwvQ09ERT4gLSBUaGUgY3Vyc29yIGF0IHRoZSBsb2NhdGlvbiB0byB3aGljaCB0aGUgWE1MIHNob3VsZAotIGJlIGNvcGllZC4KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+dHJ1ZSBpZiBhbnl0aGluZyB3YXMgY29waWVkOyBvdGhlcndpc2UsIGZhbHNlLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icmVtb3ZlQ2hhcnMoaW50KSI+PCEtLSAtLT48L0E+PEgzPgotcmVtb3ZlQ2hhcnM8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+cmVtb3ZlQ2hhcnM8L0I+KGludCZuYnNwO21heENoYXJhY3RlckNvdW50KTwvUFJFPgotPERMPgotPEREPlJlbW92ZXMgY2hhcmFjdGVycyB1cCB0byB0aGUgc3BlY2lmaWVkIG1heGltdW0gbnVtYmVyLCBjb3VudGluZyByaWdodCBmcm9tIAotIHRoaXMgY3Vyc29yJ3MgbG9jYXRpb24gdG8gdGhlIGNoYXJhY3RlciBhdCA8ZW0+bWF4Q2hhcmFjdGVyQ291bnQ8L2VtPi4gVGhlIAotIHNwYWNlIHJlbWFpbmluZyBmcm9tIHJlbW92aW5nIHRoZSBjaGFyYWN0ZXJzIGNvbGxhcHNlcyB1cCB0byB0aGlzIGN1cnNvci4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bWF4Q2hhcmFjdGVyQ291bnQ8L0NPREU+IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWZ0ZXIgdGhpcyBjdXJzb3IncyAKLSBsb2NhdGlvbiB0byByZW1vdmUuCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPlRoZSBhY3R1YWwgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVtb3ZlZC4KLTxEVD48Qj5UaHJvd3M6PC9CPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmh0bWwiPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvQT48L0NPREU+IC0gSWYgdGhlIG9wZXJhdGlvbiBpcyBub3QgYWxsb3dlZAotIGF0IHRoZSBjdXJzb3IncyBsb2NhdGlvbi48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im1vdmVDaGFycyhpbnQsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yKSI+PCEtLSAtLT48L0E+PEgzPgotbW92ZUNoYXJzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPm1vdmVDaGFyczwvQj4oaW50Jm5ic3A7bWF4Q2hhcmFjdGVyQ291bnQsCi0gICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Jm5ic3A7dG9IZXJlKTwvUFJFPgotPERMPgotPEREPk1vdmVzIGNoYXJhY3RlcnMgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhpcyBjdXJzb3IgdG8gdGhlIHBvc2l0aW9uIGltbWVkaWF0ZWx5IAotIGFmdGVyIHRoZSBzcGVjaWZpZWQgY3Vyc29yLiBDaGFyYWN0ZXJzIGFyZSBjb3VudGVkIHRvIHRoZSByaWdodCB1cCB0byB0aGUKLSBzcGVjaWZpZWQgbWF4aW11bSBudW1iZXIuIFhNTCBhZnRlciB0aGUgZGVzdGluYXRpb24gY3Vyc29yIGlzIAotIHNoaWZ0ZWQgdG8gdGhlIHJpZ2h0IHRvIG1ha2Ugcm9vbS4gVGhlIHNwYWNlIHJlbWFpbmluZyBmcm9tIG1vdmluZyB0aGUgCi0gY2hhcmFjdGVycyBjb2xsYXBzZXMgdXAgdG8gdGhpcyBjdXJzb3IuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm1heENoYXJhY3RlckNvdW50PC9DT0RFPiAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFmdGVyIHRoaXMgY3Vyc29yJ3MgCi0gbG9jYXRpb24gdG8gbW92ZS48REQ+PENPREU+dG9IZXJlPC9DT0RFPiAtIFRoZSBjdXJzb3IgdG8gd2hpY2ggdGhlIGNoYXJhY3RlcnMgc2hvdWxkIGJlIG1vdmVkLgotPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgYWN0dWFsIG51bWJlciBvZiBjaGFyYWN0ZXJzIG1vdmVkLgotPERUPjxCPlRocm93czo8L0I+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uaHRtbCI+SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBJZiB0aGUgb3BlcmF0aW9uIGlzIG5vdCBhbGxvd2VkCi0gYXQgdGhlIGN1cnNvcidzIGxvY2F0aW9uLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iY29weUNoYXJzKGludCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IpIj48IS0tIC0tPjwvQT48SDM+Ci1jb3B5Q2hhcnM8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+Y29weUNoYXJzPC9CPihpbnQmbmJzcDttYXhDaGFyYWN0ZXJDb3VudCwKLSAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4mbmJzcDt0b0hlcmUpPC9QUkU+Ci08REw+Ci08REQ+Q29waWVzIGNoYXJhY3RlcnMgdG8gdGhlIHBvc2l0aW9uIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBzcGVjaWZpZWQgY3Vyc29yLgotIENoYXJhY3RlcnMgYXJlIGNvdW50ZWQgdG8gdGhlIHJpZ2h0IHVwIHRvIHRoZSBzcGVjaWZpZWQgbWF4aW11bSBudW1iZXIuIAotIFhNTCBhZnRlciB0aGUgZGVzdGluYXRpb24gY3Vyc29yIGlzIHNoaWZ0ZWQgdG8gdGhlIHJpZ2h0IHRvIG1ha2Ugcm9vbS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bWF4Q2hhcmFjdGVyQ291bnQ8L0NPREU+IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWZ0ZXIgdGhpcyBjdXJzb3IncyAKLSBsb2NhdGlvbiB0byBjb3B5LjxERD48Q09ERT50b0hlcmU8L0NPREU+IC0gVGhlIGN1cnNvciB0byB3aGljaCB0aGUgY2hhcmFjdGVycyBzaG91bGQgYmUgY29waWVkLgotPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgYWN0dWFsIG51bWJlciBvZiBjaGFyYWN0ZXJzIGNvcGllZC4KLTxEVD48Qj5UaHJvd3M6PC9CPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmh0bWwiPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvQT48L0NPREU+IC0gSWYgdGhlIG9wZXJhdGlvbiBpcyBub3QgYWxsb3dlZAotIGF0IHRoZSBjdXJzb3IncyBsb2NhdGlvbi48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Imluc2VydENoYXJzKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1pbnNlcnRDaGFyczwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+aW5zZXJ0Q2hhcnM8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDt0ZXh0KTwvUFJFPgotPERMPgotPEREPkluc2VydHMgdGhlIHNwZWNpZmllZCB0ZXh0IGltbWVkaWF0ZWx5IGJlZm9yZSB0aGlzIGN1cnNvcidzIGxvY2F0aW9uLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT50ZXh0PC9DT0RFPiAtIFRoZSB0ZXh0IHRvIGluc2VydC4KLTxEVD48Qj5UaHJvd3M6PC9CPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmh0bWwiPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvQT48L0NPREU+IC0gSWYgdGhlIGluc2VydGlvbiBpcyBub3QgYWxsb3dlZAotIGF0IHRoZSBjdXJzb3IncyBsb2NhdGlvbi48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Imluc2VydEVsZW1lbnQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjwhLS0gLS0+PC9BPjxIMz4KLWluc2VydEVsZW1lbnQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPmluc2VydEVsZW1lbnQ8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvUFJFPgotPERMPgotPEREPkluc2VydHMgYW4gZWxlbWVudCBpbW1lZGlhdGVseSBiZWZvcmUgdGhpcyBjdXJzb3IncyBsb2NhdGlvbiwgZ2l2aW5nIAotIHRoZSBlbGVtZW50IHRoZSBzcGVjaWZpZWQgcXVhbGlmaWVkIG5hbWUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm5hbWU8L0NPREU+IC0gVGhlIHF1YWxpZmllZCBuYW1lIGZvciB0aGUgZWxlbWVudC4KLTxEVD48Qj5UaHJvd3M6PC9CPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmh0bWwiPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvQT48L0NPREU+IC0gSWYgdGhlIGluc2VydGlvbiBpcyBub3QgYWxsb3dlZAotIGF0IHRoZSBjdXJzb3IncyBsb2NhdGlvbi48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Imluc2VydEVsZW1lbnQoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLWluc2VydEVsZW1lbnQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPmluc2VydEVsZW1lbnQ8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtsb2NhbE5hbWUpPC9QUkU+Ci08REw+Ci08REQ+SW5zZXJ0cyBhbiBlbGVtZW50IGltbWVkaWF0ZWx5IGJlZm9yZSB0aGlzIGN1cnNvcidzIGxvY2F0aW9uLCBnaXZpbmcgCi0gdGhlIGVsZW1lbnQgdGhlIHNwZWNpZmllZCBsb2NhbCBuYW1lLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5sb2NhbE5hbWU8L0NPREU+IC0gVGhlIGxvY2FsIG5hbWUgZm9yIHRoZSBuZXcgZWxlbWVudC4KLTxEVD48Qj5UaHJvd3M6PC9CPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmh0bWwiPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvQT48L0NPREU+IC0gSWYgdGhlIGluc2VydGlvbiBpcyBub3QgYWxsb3dlZAotIGF0IHRoZSBjdXJzb3IncyBsb2NhdGlvbi48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Imluc2VydEVsZW1lbnQoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLWluc2VydEVsZW1lbnQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPmluc2VydEVsZW1lbnQ8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtsb2NhbE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDt1cmkpPC9QUkU+Ci08REw+Ci08REQ+SW5zZXJ0cyBhIG5ldyBlbGVtZW50IGltbWVkaWF0ZWx5IGJlZm9yZSB0aGlzIGN1cnNvcidzIGxvY2F0aW9uLCBnaXZpbmcgdGhlCi0gZWxlbWVudCB0aGUgc3BlY2lmaWVkIGxvY2FsIG5hbWUgYW5kIGFzc29jaWF0aW5nIGl0IHdpdGggc3BlY2lmaWVkIG5hbWVzcGFjZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5sb2NhbE5hbWU8L0NPREU+IC0gVGhlIGxvY2FsIG5hbWUgZm9yIHRoZSBuZXcgZWxlbWVudC48REQ+PENPREU+dXJpPC9DT0RFPiAtIFRoZSBVUkkgZm9yIHRoZSBuZXcgZWxlbWVudCdzIG5hbWVzcGFjZS4KLTxEVD48Qj5UaHJvd3M6PC9CPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmh0bWwiPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvQT48L0NPREU+IC0gSWYgdGhlIGluc2VydGlvbiBpcyBub3QgYWxsb3dlZAotIGF0IHRoZSBjdXJzb3IncyBsb2NhdGlvbi48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImJlZ2luRWxlbWVudChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PCEtLSAtLT48L0E+PEgzPgotYmVnaW5FbGVtZW50PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5iZWdpbkVsZW1lbnQ8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvUFJFPgotPERMPgotPEREPkluc2VydHMgYSBuZXcgZWxlbWVudCBhcm91bmQgdGhpcyBjdXJzb3IsIGdpdmluZyB0aGUgZWxlbWVudCB0aGUgc3BlY2lmaWVkIAotIHF1YWxpZmllZCBuYW1lLiBBZnRlciB0aGUgZWxlbWVudCBpcyBpbnNlcnRlZCwgdGhpcyBjdXJzb3IgaXMgYmV0d2VlbiBpdHMgc3RhcnQgCi0gYW5kIGVuZC4gVGhpcyBjdXJzb3IgY2FuIHRoZW4gYmUgdXNlZCB0byBpbnNlcnQgYWRkaXRpb25hbCBYTUwgaW50byAKLSB0aGUgbmV3IGVsZW1lbnQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm5hbWU8L0NPREU+IC0gVGhlIHF1YWxpZmllZCBuYW1lIGZvciB0aGUgbmV3IGVsZW1lbnQuCi08RFQ+PEI+VGhyb3dzOjwvQj4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5odG1sIj5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb248L0E+PC9DT0RFPiAtIElmIHRoZSBpbnNlcnRpb24gaXMgbm90IGFsbG93ZWQKLSBhdCB0aGUgY3Vyc29yJ3MgbG9jYXRpb24uPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJiZWdpbkVsZW1lbnQoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLWJlZ2luRWxlbWVudDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+YmVnaW5FbGVtZW50PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bG9jYWxOYW1lKTwvUFJFPgotPERMPgotPEREPkluc2VydHMgYSBuZXcgZWxlbWVudCBhcm91bmQgdGhpcyBjdXJzb3IsIGdpdmluZyB0aGUgZWxlbWVudCB0aGUgc3BlY2lmaWVkIAotIGxvY2FsIG5hbWUuIEFmdGVyIHRoZSBlbGVtZW50IGlzIGluc2VydGVkLCB0aGlzIGN1cnNvciBpcyBiZXR3ZWVuIGl0cyBzdGFydCAKLSBhbmQgZW5kLiBUaGlzIGN1cnNvciBjYW4gdGhlbiBiZSB1c2VkIHRvIGluc2VydCBhZGRpdGlvbmFsIFhNTCBpbnRvIAotIHRoZSBuZXcgZWxlbWVudC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bG9jYWxOYW1lPC9DT0RFPiAtIFRoZSBsb2NhbCBuYW1lIGZvciB0aGUgbmV3IGVsZW1lbnQuCi08RFQ+PEI+VGhyb3dzOjwvQj4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5odG1sIj5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb248L0E+PC9DT0RFPiAtIElmIHRoZSBpbnNlcnRpb24gaXMgbm90IGFsbG93ZWQKLSBhdCB0aGUgY3Vyc29yJ3MgbG9jYXRpb24uPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJiZWdpbkVsZW1lbnQoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLWJlZ2luRWxlbWVudDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+YmVnaW5FbGVtZW50PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bG9jYWxOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDt1cmkpPC9QUkU+Ci08REw+Ci08REQ+SW5zZXJ0cyBhIG5ldyBlbGVtZW50IGFyb3VuZCB0aGlzIGN1cnNvciwgZ2l2aW5nIHRoZSBlbGVtZW50IHRoZSBzcGVjaWZpZWQgCi0gbG9jYWwgbmFtZSBhbmQgYXNzb2NpYXRpbmcgaXQgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWVzcGFjZS4gQWZ0ZXIgdGhlIGVsZW1lbnQgCi0gaXMgaW5zZXJ0ZWQsIHRoaXMgY3Vyc29yIGlzIGJldHdlZW4gaXRzIHN0YXJ0IGFuZCBlbmQuIFRoaXMgY3Vyc29yIAotIGNhbiB0aGVuIGJlIHVzZWQgdG8gaW5zZXJ0IGFkZGl0aW9uYWwgWE1MIGludG8gdGhlIG5ldyBlbGVtZW50LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5sb2NhbE5hbWU8L0NPREU+IC0gVGhlIGxvY2FsIG5hbWUgZm9yIHRoZSBuZXcgZWxlbWVudC48REQ+PENPREU+dXJpPC9DT0RFPiAtIFRoZSBVUkkgZm9yIHRoZSBuZXcgZWxlbWVudCdzIG5hbWVzcGFjZS4KLTxEVD48Qj5UaHJvd3M6PC9CPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmh0bWwiPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvQT48L0NPREU+IC0gSWYgdGhlIGluc2VydGlvbiBpcyBub3QgYWxsb3dlZAotIGF0IHRoZSBjdXJzb3IncyBsb2NhdGlvbi48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Imluc2VydEVsZW1lbnRXaXRoVGV4dChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lLCBqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotaW5zZXJ0RWxlbWVudFdpdGhUZXh0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5pbnNlcnRFbGVtZW50V2l0aFRleHQ8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDt0ZXh0KTwvUFJFPgotPERMPgotPEREPkluc2VydHMgYSBuZXcgZWxlbWVudCBpbW1lZGlhdGVseSBiZWZvcmUgdGhpcyBjdXJzb3IncyBsb2NhdGlvbiwgZ2l2aW5nIHRoZQotIGVsZW1lbnQgdGhlIHNwZWNpZmllZCBxdWFsaWZpZWQgbmFtZSBhbmQgY29udGVudC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bmFtZTwvQ09ERT4gLSBUaGUgcXVhbGlmaWVkIG5hbWUgZm9yIHRoZSBuZXcgZWxlbWVudC48REQ+PENPREU+dGV4dDwvQ09ERT4gLSBUaGUgY29udGVudCBmb3IgdGhlIG5ldyBlbGVtZW50LgotPERUPjxCPlRocm93czo8L0I+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uaHRtbCI+SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBJZiB0aGUgaW5zZXJ0aW9uIGlzIG5vdCBhbGxvd2VkCi0gYXQgdGhlIGN1cnNvcidzIGxvY2F0aW9uLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaW5zZXJ0RWxlbWVudFdpdGhUZXh0KGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1pbnNlcnRFbGVtZW50V2l0aFRleHQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPmluc2VydEVsZW1lbnRXaXRoVGV4dDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO2xvY2FsTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7dGV4dCk8L1BSRT4KLTxETD4KLTxERD5JbnNlcnRzIGEgbmV3IGVsZW1lbnQgaW1tZWRpYXRlbHkgYmVmb3JlIHRoaXMgY3Vyc29yJ3MgbG9jYXRpb24sIGdpdmluZyB0aGUKLSBlbGVtZW50IHRoZSBzcGVjaWZpZWQgbG9jYWwgbmFtZSBhbmQgY29udGVudC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bG9jYWxOYW1lPC9DT0RFPiAtIFRoZSBsb2NhbCBuYW1lIGZvciB0aGUgbmV3IGVsZW1lbnQuPEREPjxDT0RFPnRleHQ8L0NPREU+IC0gVGhlIGNvbnRlbnQgZm9yIHRoZSBuZXcgZWxlbWVudC4KLTxEVD48Qj5UaHJvd3M6PC9CPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmh0bWwiPklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbjwvQT48L0NPREU+IC0gSWYgdGhlIGluc2VydGlvbiBpcyBub3QgYWxsb3dlZAotIGF0IHRoZSBjdXJzb3IncyBsb2NhdGlvbi48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Imluc2VydEVsZW1lbnRXaXRoVGV4dChqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotaW5zZXJ0RWxlbWVudFdpdGhUZXh0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5pbnNlcnRFbGVtZW50V2l0aFRleHQ8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtsb2NhbE5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3VyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7dGV4dCk8L1BSRT4KLTxETD4KLTxERD5JbnNlcnRzIGEgbmV3IGVsZW1lbnQgaW1tZWRpYXRlbHkgYmVmb3JlIHRoaXMgY3Vyc29yJ3MgbG9jYXRpb24sIGdpdmluZyB0aGUKLSBlbGVtZW50IHRoZSBzcGVjaWZpZWQgbG9jYWwgbmFtZSwgYXNzb2NpYXRpbmcgaXQgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWVzcGFjZSwgCi0gYW5kIGdpdmluZyBpdCB0aGUgc3BlY2lmaWVkIGNvbnRlbnQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmxvY2FsTmFtZTwvQ09ERT4gLSBUaGUgbG9jYWwgbmFtZSBmb3IgdGhlIG5ldyBlbGVtZW50LjxERD48Q09ERT51cmk8L0NPREU+IC0gVGhlIFVSSSBmb3IgdGhlIG5ldyBlbGVtZW50J3MgbmFtZXNwYWNlLjxERD48Q09ERT50ZXh0PC9DT0RFPiAtIFRoZSBjb250ZW50IGZvciB0aGUgbmV3IGVsZW1lbnQuCi08RFQ+PEI+VGhyb3dzOjwvQj4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5odG1sIj5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb248L0E+PC9DT0RFPiAtIElmIHRoZSBpbnNlcnRpb24gaXMgbm90IGFsbG93ZWQKLSBhdCB0aGUgY3Vyc29yJ3MgbG9jYXRpb24uPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpbnNlcnRBdHRyaWJ1dGUoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLWluc2VydEF0dHJpYnV0ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+aW5zZXJ0QXR0cmlidXRlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bG9jYWxOYW1lKTwvUFJFPgotPERMPgotPEREPkluc2VydHMgYSBuZXcgYXR0cmlidXRlIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGlzIGN1cnNvcidzIGxvY2F0aW9uLCBnaXZpbmcgaXQKLSB0aGUgc3BlY2lmaWVkIGxvY2FsIG5hbWUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmxvY2FsTmFtZTwvQ09ERT4gLSBUaGUgbG9jYWwgbmFtZSBmb3IgdGhlIG5ldyBhdHRyaWJ1dGUuCi08RFQ+PEI+VGhyb3dzOjwvQj4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5odG1sIj5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb248L0E+PC9DT0RFPiAtIElmIHRoZSBpbnNlcnRpb24gaXMgbm90IGFsbG93ZWQKLSBhdCB0aGUgY3Vyc29yJ3MgbG9jYXRpb24uPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpbnNlcnRBdHRyaWJ1dGUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLWluc2VydEF0dHJpYnV0ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+aW5zZXJ0QXR0cmlidXRlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bG9jYWxOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDt1cmkpPC9QUkU+Ci08REw+Ci08REQ+SW5zZXJ0cyBhIG5ldyBhdHRyaWJ1dGUgaW1tZWRpYXRlbHkgYmVmb3JlIHRoaXMgY3Vyc29yJ3MgbG9jYXRpb24sIGdpdmluZyBpdAotIHRoZSBzcGVjaWZpZWQgbG9jYWwgbmFtZSBhbmQgYXNzb2NpYXRpbmcgaXQgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWVzcGFjZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bG9jYWxOYW1lPC9DT0RFPiAtIFRoZSBsb2NhbCBuYW1lIGZvciB0aGUgbmV3IGF0dHJpYnV0ZS48REQ+PENPREU+dXJpPC9DT0RFPiAtIFRoZSBVUkkgZm9yIHRoZSBuZXcgYXR0cmlidXRlJ3MgbmFtZXNwYWNlLgotPERUPjxCPlRocm93czo8L0I+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uaHRtbCI+SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBJZiB0aGUgaW5zZXJ0aW9uIGlzIG5vdCBhbGxvd2VkCi0gYXQgdGhlIGN1cnNvcidzIGxvY2F0aW9uLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaW5zZXJ0QXR0cmlidXRlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48IS0tIC0tPjwvQT48SDM+Ci1pbnNlcnRBdHRyaWJ1dGU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPmluc2VydEF0dHJpYnV0ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO25hbWUpPC9QUkU+Ci08REw+Ci08REQ+SW5zZXJ0cyBhIG5ldyBhdHRyaWJ1dGUgaW1tZWRpYXRlbHkgYmVmb3JlIHRoaXMgY3Vyc29yJ3MgbG9jYXRpb24sIGdpdmluZyBpdAotIHRoZSBzcGVjaWZpZWQgbmFtZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bmFtZTwvQ09ERT4gLSBUaGUgbG9jYWwgbmFtZSBmb3IgdGhlIG5ldyBhdHRyaWJ1dGUuCi08RFQ+PEI+VGhyb3dzOjwvQj4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5odG1sIj5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb248L0E+PC9DT0RFPiAtIElmIHRoZSBpbnNlcnRpb24gaXMgbm90IGFsbG93ZWQKLSBhdCB0aGUgY3Vyc29yJ3MgbG9jYXRpb24uPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpbnNlcnRBdHRyaWJ1dGVXaXRoVmFsdWUoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLWluc2VydEF0dHJpYnV0ZVdpdGhWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+aW5zZXJ0QXR0cmlidXRlV2l0aFZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7TmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+SW5zZXJ0cyBhIG5ldyBhdHRyaWJ1dGUgaW1tZWRpYXRlbHkgYmVmb3JlIHRoaXMgY3Vyc29yJ3MgbG9jYXRpb24sIGdpdmluZyBpdAotIHRoZSBzcGVjaWZpZWQgdmFsdWUgYW5kIG5hbWUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPk5hbWU8L0NPREU+IC0gVGhlIGxvY2FsIG5hbWUgZm9yIHRoZSBuZXcgYXR0cmlidXRlLjxERD48Q09ERT52YWx1ZTwvQ09ERT4gLSBUaGUgdmFsdWUgZm9yIHRoZSBuZXcgYXR0cmlidXRlLgotPERUPjxCPlRocm93czo8L0I+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uaHRtbCI+SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBJZiB0aGUgaW5zZXJ0aW9uIGlzIG5vdCBhbGxvd2VkCi0gYXQgdGhlIGN1cnNvcidzIGxvY2F0aW9uLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaW5zZXJ0QXR0cmlidXRlV2l0aFZhbHVlKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1pbnNlcnRBdHRyaWJ1dGVXaXRoVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPmluc2VydEF0dHJpYnV0ZVdpdGhWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3VyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+SW5zZXJ0cyBhbiBhdHRyaWJ1dGUgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBjdXJzb3IncyBsb2NhdGlvbiwgZ2l2aW5nIGl0Ci0gdGhlIHNwZWNpZmllZCBuYW1lIGFuZCB2YWx1ZSwgYW5kIGFzc29jaWF0aW5nIGl0IHdpdGggdGhlIHNwZWNpZmllZCBuYW1lc3BhY2UuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm5hbWU8L0NPREU+IC0gVGhlIG5hbWUgZm9yIHRoZSBuZXcgYXR0cmlidXRlLjxERD48Q09ERT51cmk8L0NPREU+IC0gVGhlIFVSSSBmb3IgdGhlIG5ldyBhdHRyaWJ1dGUncyBuYW1lc3BhY2UuPEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIFRoZSB2YWx1ZSBmb3IgdGhlIG5ldyBhdHRyaWJ1dGUuCi08RFQ+PEI+VGhyb3dzOjwvQj4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5odG1sIj5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb248L0E+PC9DT0RFPiAtIElmIHRoZSBpbnNlcnRpb24gaXMgbm90IGFsbG93ZWQKLSBhdCB0aGUgY3Vyc29yJ3MgbG9jYXRpb24uPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpbnNlcnRBdHRyaWJ1dGVXaXRoVmFsdWUoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSwgamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLWluc2VydEF0dHJpYnV0ZVdpdGhWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+aW5zZXJ0QXR0cmlidXRlV2l0aFZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7dmFsdWUpPC9QUkU+Ci08REw+Ci08REQ+SW5zZXJ0cyBhbiBhdHRyaWJ1dGUgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBjdXJzb3IncyBsb2NhdGlvbiwgZ2l2aW5nIGl0Ci0gdGhlIHNwZWNpZmllZCBuYW1lIGFuZCB2YWx1ZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bmFtZTwvQ09ERT4gLSBUaGUgbmFtZSBmb3IgdGhlIG5ldyBhdHRyaWJ1dGUuPEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIFRoZSB2YWx1ZSBmb3IgdGhlIG5ldyBhdHRyaWJ1dGUuCi08RFQ+PEI+VGhyb3dzOjwvQj4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5odG1sIj5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb248L0E+PC9DT0RFPiAtIElmIHRoZSBpbnNlcnRpb24gaXMgbm90IGFsbG93ZWQKLSBhdCB0aGUgY3Vyc29yJ3MgbG9jYXRpb24uPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpbnNlcnROYW1lc3BhY2UoamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLWluc2VydE5hbWVzcGFjZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+aW5zZXJ0TmFtZXNwYWNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cHJlZml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtuYW1lc3BhY2UpPC9QUkU+Ci08REw+Ci08REQ+SW5zZXJ0cyBhIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGN1cnNvcidzIGxvY2F0aW9uLCAKLSBnaXZpbmcgaXQgdGhlIHNwZWNpZmllZCBwcmVmaXggYW5kIFVSSS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+cHJlZml4PC9DT0RFPiAtIFRoZSBwcmVmaXggZm9yIHRoZSBuYW1lc3BhY2UuPEREPjxDT0RFPm5hbWVzcGFjZTwvQ09ERT4gLSBUaGUgVVJJIGZvciB0aGUgbmFtZXNwYWNlLgotPERUPjxCPlRocm93czo8L0I+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uaHRtbCI+SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBJZiB0aGUgaW5zZXJ0aW9uIGlzIG5vdCBhbGxvd2VkCi0gYXQgdGhlIGN1cnNvcidzIGxvY2F0aW9uLjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iaW5zZXJ0Q29tbWVudChqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotaW5zZXJ0Q29tbWVudDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+aW5zZXJ0Q29tbWVudDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3RleHQpPC9QUkU+Ci08REw+Ci08REQ+SW5zZXJ0cyBhbiBYTUwgY29tbWVudCBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGN1cnNvcidzIGxvY2F0aW9uLCAKLSBnaXZpbmcgaXQgdGhlIHNwZWNpZmllZCBjb250ZW50LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT50ZXh0PC9DT0RFPiAtIFRoZSBuZXcgY29tbWVudCdzIGNvbnRlbnQuCi08RFQ+PEI+VGhyb3dzOjwvQj4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0lsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5odG1sIj5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb248L0E+PC9DT0RFPiAtIElmIHRoZSBpbnNlcnRpb24gaXMgbm90IGFsbG93ZWQKLSBhdCB0aGUgY3Vyc29yJ3MgbG9jYXRpb24uPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpbnNlcnRQcm9jSW5zdChqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotaW5zZXJ0UHJvY0luc3Q8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPmluc2VydFByb2NJbnN0PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7dGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3RleHQpPC9QUkU+Ci08REw+Ci08REQ+SW5zZXJ0cyBhbiBYTUwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGN1cnNvcidzIGxvY2F0aW9uLCAKLSBnaXZpbmcgaXQgdGhlIHNwZWNpZmllZCB0YXJnZXQgYW5kIHRleHQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnRhcmdldDwvQ09ERT4gLSBUaGUgdGFyZ2V0IGZvciB0aGUgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbi48REQ+PENPREU+dGV4dDwvQ09ERT4gLSBUaGUgbmV3IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24ncyB0ZXh0LgotPERUPjxCPlRocm93czo8L0I+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uaHRtbCI+SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uPC9BPjwvQ09ERT4gLSBJZiB0aGUgaW5zZXJ0aW9uIGlzIG5vdCBhbGxvd2VkCi0gYXQgdGhlIGN1cnNvcidzIGxvY2F0aW9uLjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5DaGFuZ2VTdGFtcC5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sQ3Vyc29yLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5GYWN0b3J5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNzdkYjkuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5GYWN0b3J5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NzMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0NzowMCBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbERhdGUuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxEYXRlLkZhY3RvcnksWG1sRGF0ZS5GYWN0b3J5IGNsYXNzIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxEYXRlLkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxCb29rbWFyay5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sRGF0ZS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sRGF0ZS5GYWN0b3J5PC9IMj4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5qYXZhLmxhbmcuT2JqZWN0PC9BPgotICB8Ci0gICstLTxCPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRGF0ZS5GYWN0b3J5PC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+RW5jbG9zaW5nIGNsYXNzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPlhtbERhdGU8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyA8Qj5YbWxEYXRlLkZhY3Rvcnk8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvREw+Ci0KLTxQPgotQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj48Q09ERT5YbWxEYXRlPC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+WG1sRGF0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj5uZXdJbnN0YW5jZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPjxDT0RFPlhtbERhdGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+WG1sRGF0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnN0YW5jZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj48Q09ERT5YbWxEYXRlPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPlhtbERhdGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPm5ld1ZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj48Q09ERT5YbWxEYXRlPC9DT0RFPjwvQT4gdmFsdWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPlhtbERhdGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7Zik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj48Q09ERT5YbWxEYXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj5YbWxEYXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+PENPREU+WG1sRGF0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+WG1sRGF0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj48Q09ERT5YbWxEYXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPlhtbERhdGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+PENPREU+WG1sRGF0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj5YbWxEYXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj48Q09ERT5YbWxEYXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+WG1sRGF0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+PENPREU+WG1sRGF0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPlhtbERhdGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj48Q09ERT5YbWxEYXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPlhtbERhdGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj48Q09ERT5YbWxEYXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPlhtbERhdGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+PENPREU+WG1sRGF0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj5YbWxEYXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPjxDT0RFPlhtbERhdGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+WG1sRGF0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+PENPREU+WG1sRGF0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj5YbWxEYXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj48Q09ERT5YbWxEYXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPlhtbERhdGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+PENPREU+WG1sRGF0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj5YbWxEYXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPjxDT0RFPlhtbERhdGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj5YbWxEYXRlPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPjxDT0RFPlhtbERhdGU8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+WG1sRGF0ZTwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+PENPREU+WG1sRGF0ZTwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+WG1sRGF0ZTwvQT4gPEI+bmV3VmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPjxDT0RFPlhtbERhdGU8L0NPREU+PC9BPiB2YWx1ZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPlhtbERhdGU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPjxDT0RFPlhtbERhdGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7MjAwMy0wNi0xNCZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj5YbWxEYXRlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPjxDT0RFPlhtbERhdGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7MjAwMy0wNi0xNCZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj5YbWxEYXRlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpCi0gICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+PENPREU+WG1sRGF0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj5YbWxEYXRlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj48Q09ERT5YbWxEYXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj5YbWxEYXRlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSkKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj48Q09ERT5YbWxEYXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+WG1sRGF0ZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj48Q09ERT5YbWxEYXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj5YbWxEYXRlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpCi0gICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+PENPREU+WG1sRGF0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj5YbWxEYXRlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj48Q09ERT5YbWxEYXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+WG1sRGF0ZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cikKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj48Q09ERT5YbWxEYXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj5YbWxEYXRlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+PENPREU+WG1sRGF0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+WG1sRGF0ZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSkKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPjxDT0RFPlhtbERhdGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPlhtbERhdGU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPjxDT0RFPlhtbERhdGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj5YbWxEYXRlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPjxDT0RFPlhtbERhdGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPlhtbERhdGU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj48Q09ERT5YbWxEYXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbEJvb2ttYXJrLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxEYXRlLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWMyOTA1Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDU5NiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ2OjU3IFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sRGF0ZSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxEYXRlLFhtbERhdGUgaW50ZXJmYWNlIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxEYXRlIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuWG1sTWFyay5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbERhdGUuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgWG1sRGF0ZTwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGludGVyZmFjZSA8Qj5YbWxEYXRlPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvREw+Ci0KLTxQPgotQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2RhdGUiPnhzOmRhdGU8L2E+IHR5cGUuCi0gPHA+Ci0gQ29udmVydGlibGUgdG8gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+PENPREU+RGF0ZTwvQ09ERT48L0E+LCBhbmQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZTwvQ09ERT48L0E+LgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sIj48Q09ERT5YbWxDYWxlbmRhcjwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+PENPREU+R0RhdGU8L0NPREU+PC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibmVzdGVkX2NsYXNzX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TmVzdGVkIENsYXNzIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtjbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sIj5YbWxEYXRlLkZhY3Rvcnk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj48Q09ERT5YbWxEYXRlPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIj5YbWxPYmplY3QuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCN0eXBlIj50eXBlPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjRVFVQUwiPkVRVUFMPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNHUkVBVEVSX1RIQU4iPkdSRUFURVJfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTEVTU19USEFOIj5MRVNTX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI05PVF9FUVVBTCI+Tk9UX0VRVUFMPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj5DYWxlbmRhcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwjY2FsZW5kYXJWYWx1ZSgpIj5jYWxlbmRhclZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCNnZXRDYWxlbmRhclZhbHVlKCkiPjxDT0RFPmdldENhbGVuZGFyVmFsdWUoKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+RGF0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwjZGF0ZVZhbHVlKCkiPmRhdGVWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwjZ2V0RGF0ZVZhbHVlKCkiPjxDT0RFPmdldERhdGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sI2dEYXRlVmFsdWUoKSI+Z0RhdGVWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwjZ2V0R0RhdGVWYWx1ZSgpIj48Q09ERT5nZXRHRGF0ZVZhbHVlKCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj5DYWxlbmRhcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwjZ2V0Q2FsZW5kYXJWYWx1ZSgpIj5nZXRDYWxlbmRhclZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvRGF0ZS5odG1sIj5EYXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCNnZXREYXRlVmFsdWUoKSI+Z2V0RGF0ZVZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPjxDT0RFPkRhdGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCNnZXRHRGF0ZVZhbHVlKCkiPmdldEdEYXRlVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCNzZXQoamF2YS51dGlsLkNhbGVuZGFyKSI+c2V0PC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj5DYWxlbmRhcjwvQT4mbmJzcDtjKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCNzZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcikiPjxDT0RFPnNldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sI3NldChqYXZhLnV0aWwuRGF0ZSkiPnNldDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvRGF0ZS5odG1sIj5EYXRlPC9BPiZuYnNwO2QpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sI3NldERhdGVWYWx1ZShqYXZhLnV0aWwuRGF0ZSkiPjxDT0RFPnNldERhdGVWYWx1ZShqYXZhLnV0aWwuRGF0ZSk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj5zZXQ8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+Jm5ic3A7Z2QpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sI3NldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSkiPjxDT0RFPnNldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCNzZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcikiPnNldENhbGVuZGFyVmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiZuYnNwO2MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCNzZXREYXRlVmFsdWUoamF2YS51dGlsLkRhdGUpIj5zZXREYXRlVmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+RGF0ZTwvQT4mbmJzcDtkKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPjxDT0RFPkRhdGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sI3NldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSkiPnNldEdEYXRlVmFsdWU8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPiZuYnNwO2dkKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+PENPREU+R0RhdGVTcGVjaWZpY2F0aW9uPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjZ2V0U3RyaW5nVmFsdWUoKSI+Z2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXQoamF2YS5sYW5nLlN0cmluZykiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj5zZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3N0cmluZ1ZhbHVlKCkiPnN0cmluZ1ZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjaGFuZ2VUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPmNoYW5nZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KSI+Y29tcGFyZVRvPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5jb21wYXJlVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvcHkoKSI+Y29weTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzSW1tdXRhYmxlKCkiPmlzSW1tdXRhYmxlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc05pbCgpIj5pc05pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2NoZW1hVHlwZSgpIj5zY2hlbWFUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0TmlsKCkiPnNldE5pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKCkiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVFcXVhbHMob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj52YWx1ZUVxdWFsczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVIYXNoQ29kZSgpIj52YWx1ZUhhc2hDb2RlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVG9rZW5Tb3VyY2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI2RvY3VtZW50UHJvcGVydGllcygpIj5kb2N1bWVudFByb3BlcnRpZXM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbW9uaXRvcigpIj5tb25pdG9yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0N1cnNvcigpIj5uZXdDdXJzb3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZSgpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbSgpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIoKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0oKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0pIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KCkiPnhtbFRleHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj54bWxUZXh0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0idHlwZSI+PCEtLSAtLT48L0E+PEgzPgotdHlwZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+dHlwZTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iY2FsZW5kYXJWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1jYWxlbmRhclZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj5DYWxlbmRhcjwvQT4gPEI+Y2FsZW5kYXJWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwjZ2V0Q2FsZW5kYXJWYWx1ZSgpIj48Q09ERT5nZXRDYWxlbmRhclZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQoamF2YS51dGlsLkNhbGVuZGFyKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXQ8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+Jm5ic3A7Yyk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sI3NldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+PENPREU+c2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ0RhdGVWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nRGF0ZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4gPEI+Z0RhdGVWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwjZ2V0R0RhdGVWYWx1ZSgpIj48Q09ERT5nZXRHRGF0ZVZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+PENPREU+R0RhdGU8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPiZuYnNwO2dkKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwjc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKSI+PENPREU+c2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+PENPREU+R0RhdGVTcGVjaWZpY2F0aW9uPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZGF0ZVZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWRhdGVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvRGF0ZS5odG1sIj5EYXRlPC9BPiA8Qj5kYXRlVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sI2dldERhdGVWYWx1ZSgpIj48Q09ERT5nZXREYXRlVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPjxDT0RFPkRhdGU8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQoamF2YS51dGlsLkRhdGUpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPkRhdGU8L0E+Jm5ic3A7ZCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sI3NldERhdGVWYWx1ZShqYXZhLnV0aWwuRGF0ZSkiPjxDT0RFPnNldERhdGVWYWx1ZShqYXZhLnV0aWwuRGF0ZSk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvRGF0ZS5odG1sIj48Q09ERT5EYXRlPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0Q2FsZW5kYXJWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRDYWxlbmRhclZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj5DYWxlbmRhcjwvQT4gPEI+Z2V0Q2FsZW5kYXJWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcikiPjwhLS0gLS0+PC9BPjxIMz4KLXNldENhbGVuZGFyVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldENhbGVuZGFyVmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+Jm5ic3A7Yyk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0R0RhdGVWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRHRGF0ZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4gPEI+Z2V0R0RhdGVWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+PENPREU+R0RhdGU8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRHRGF0ZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRHRGF0ZVZhbHVlPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPiZuYnNwO2dkKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPjxDT0RFPkdEYXRlU3BlY2lmaWNhdGlvbjwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldERhdGVWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXREYXRlVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+RGF0ZTwvQT4gPEI+Z2V0RGF0ZVZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPjxDT0RFPkRhdGU8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXREYXRlVmFsdWUoamF2YS51dGlsLkRhdGUpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXREYXRlVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldERhdGVWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPkRhdGU8L0E+Jm5ic3A7ZCk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+PENPREU+RGF0ZTwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuWG1sTWFyay5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbERhdGUuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNDhhYWFkLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLkZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY3MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ3OjAwIFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sRGF0ZVRpbWUuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxEYXRlVGltZS5GYWN0b3J5LFhtbERhdGVUaW1lLkZhY3RvcnkgY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbERhdGVUaW1lLkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sRGF0ZVRpbWUuRmFjdG9yeTwvSDI+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+amF2YS5sYW5nLk9iamVjdDwvQT4KLSAgfAotICArLS08Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERhdGVUaW1lLkZhY3Rvcnk8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5FbmNsb3NpbmcgY2xhc3M6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPlhtbERhdGVUaW1lPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgPEI+WG1sRGF0ZVRpbWUuRmFjdG9yeTwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9ETD4KLQotPFA+Ci1BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj48Q09ERT5YbWxEYXRlVGltZTwvQ09ERT48L0E+LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj5YbWxEYXRlVGltZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2UoKSI+bmV3SW5zdGFuY2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+PENPREU+WG1sRGF0ZVRpbWU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPlhtbERhdGVUaW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnN0YW5jZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+PENPREU+WG1sRGF0ZVRpbWU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+WG1sRGF0ZVRpbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sI25ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj5uZXdWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPjxDT0RFPlhtbERhdGVUaW1lPC9DT0RFPjwvQT4gdmFsdWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj5YbWxEYXRlVGltZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7Zik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+PENPREU+WG1sRGF0ZVRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj5YbWxEYXRlVGltZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+PENPREU+WG1sRGF0ZVRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj5YbWxEYXRlVGltZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPjxDT0RFPlhtbERhdGVUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj5YbWxEYXRlVGltZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPjxDT0RFPlhtbERhdGVUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj5YbWxEYXRlVGltZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj48Q09ERT5YbWxEYXRlVGltZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj5YbWxEYXRlVGltZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj48Q09ERT5YbWxEYXRlVGltZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj5YbWxEYXRlVGltZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+PENPREU+WG1sRGF0ZVRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPlhtbERhdGVUaW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj48Q09ERT5YbWxEYXRlVGltZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+WG1sRGF0ZVRpbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj48Q09ERT5YbWxEYXRlVGltZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+WG1sRGF0ZVRpbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj48Q09ERT5YbWxEYXRlVGltZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+WG1sRGF0ZVRpbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+PENPREU+WG1sRGF0ZVRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPlhtbERhdGVUaW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPjxDT0RFPlhtbERhdGVUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj5YbWxEYXRlVGltZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPjxDT0RFPlhtbERhdGVUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj5YbWxEYXRlVGltZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPjxDT0RFPlhtbERhdGVUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNjbG9uZSgpIj5jbG9uZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj5lcXVhbHM8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2ZpbmFsaXplKCkiPmZpbmFsaXplPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNnZXRDbGFzcygpIj5nZXRDbGFzczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjaGFzaENvZGUoKSI+aGFzaENvZGU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeSgpIj5ub3RpZnk8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeUFsbCgpIj5ub3RpZnlBbGw8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KCkiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZykiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZywgaW50KSI+d2FpdDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPlhtbERhdGVUaW1lPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj48Q09ERT5YbWxEYXRlVGltZTwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+WG1sRGF0ZVRpbWU8L0E+IDxCPm5ld0luc3RhbmNlPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj48Q09ERT5YbWxEYXRlVGltZTwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPlhtbERhdGVUaW1lPC9BPiA8Qj5uZXdWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPjxDT0RFPlhtbERhdGVUaW1lPC9DT0RFPjwvQT4gdmFsdWUKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+WG1sRGF0ZVRpbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cykKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+PENPREU+WG1sRGF0ZVRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7MjAwMy0wNi0xNFQxMjowMDowMCZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+WG1sRGF0ZVRpbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+PENPREU+WG1sRGF0ZVRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7MjAwMy0wNi0xNFQxMjowMDowMCZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+WG1sRGF0ZVRpbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZikKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj48Q09ERT5YbWxEYXRlVGltZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+WG1sRGF0ZVRpbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj48Q09ERT5YbWxEYXRlVGltZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPlhtbERhdGVUaW1lPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSkKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj48Q09ERT5YbWxEYXRlVGltZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj5YbWxEYXRlVGltZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+PENPREU+WG1sRGF0ZVRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj5YbWxEYXRlVGltZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPjxDT0RFPlhtbERhdGVUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj5YbWxEYXRlVGltZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPjxDT0RFPlhtbERhdGVUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPlhtbERhdGVUaW1lPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPjxDT0RFPlhtbERhdGVUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+WG1sRGF0ZVRpbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+PENPREU+WG1sRGF0ZVRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj5YbWxEYXRlVGltZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+PENPREU+WG1sRGF0ZVRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj5YbWxEYXRlVGltZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+PENPREU+WG1sRGF0ZVRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+WG1sRGF0ZVRpbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+PENPREU+WG1sRGF0ZVRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj5YbWxEYXRlVGltZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj48Q09ERT5YbWxEYXRlVGltZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuRmFjdG9yeS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWJkNmRjLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1OTYgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NyBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbERhdGVUaW1lIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERhdGVUaW1lLFhtbERhdGVUaW1lIGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sRGF0ZVRpbWUgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbERhdGVUaW1lLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFhtbERhdGVUaW1lPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlhtbERhdGVUaW1lPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvREw+Ci0KLTxQPgotQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2RhdGVUaW1lIj54czpkYXRlVGltZTwvYT4gdHlwZS4KLSA8cD4KLSBDb252ZXJ0aWJsZSB0byA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvRGF0ZS5odG1sIj48Q09ERT5EYXRlPC9DT0RFPjwvQT4sIGFuZCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbENhbGVuZGFyLmh0bWwiPjxDT0RFPlhtbENhbGVuZGFyPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZTwvQ09ERT48L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5OZXN0ZWQgQ2xhc3MgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2NsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sIj5YbWxEYXRlVGltZS5GYWN0b3J5PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPjxDT0RFPlhtbERhdGVUaW1lPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIj5YbWxPYmplY3QuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwjdHlwZSI+dHlwZTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+RmllbGRzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0VRVUFMIj5FUVVBTDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjR1JFQVRFUl9USEFOIj5HUkVBVEVSX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0xFU1NfVEhBTiI+TEVTU19USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNOT1RfRVFVQUwiPk5PVF9FUVVBTDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCNjYWxlbmRhclZhbHVlKCkiPmNhbGVuZGFyVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCNnZXRDYWxlbmRhclZhbHVlKCkiPjxDT0RFPmdldENhbGVuZGFyVmFsdWUoKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+RGF0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sI2RhdGVWYWx1ZSgpIj5kYXRlVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCNnZXREYXRlVmFsdWUoKSI+PENPREU+Z2V0RGF0ZVZhbHVlKCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sI2dEYXRlVmFsdWUoKSI+Z0RhdGVWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sI2dldEdEYXRlVmFsdWUoKSI+PENPREU+Z2V0R0RhdGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCNnZXRDYWxlbmRhclZhbHVlKCkiPmdldENhbGVuZGFyVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPkRhdGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCNnZXREYXRlVmFsdWUoKSI+Z2V0RGF0ZVZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPjxDT0RFPkRhdGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwjZ2V0R0RhdGVWYWx1ZSgpIj5nZXRHRGF0ZVZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sI3NldChqYXZhLnV0aWwuQ2FsZW5kYXIpIj5zZXQ8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiZuYnNwO2MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCNzZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcikiPjxDT0RFPnNldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCNzZXQoamF2YS51dGlsLkRhdGUpIj5zZXQ8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+RGF0ZTwvQT4mbmJzcDtkKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwjc2V0RGF0ZVZhbHVlKGphdmEudXRpbC5EYXRlKSI+PENPREU+c2V0RGF0ZVZhbHVlKGphdmEudXRpbC5EYXRlKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj5zZXQ8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+Jm5ic3A7Z2QpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCNzZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpIj48Q09ERT5zZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sI3NldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+c2V0Q2FsZW5kYXJWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+Jm5ic3A7Yyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCNzZXREYXRlVmFsdWUoamF2YS51dGlsLkRhdGUpIj5zZXREYXRlVmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+RGF0ZTwvQT4mbmJzcDtkKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPjxDT0RFPkRhdGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCNzZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpIj5zZXRHRGF0ZVZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4mbmJzcDtnZCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPjxDT0RFPkdEYXRlU3BlY2lmaWNhdGlvbjwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI2dldFN0cmluZ1ZhbHVlKCkiPmdldFN0cmluZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0KGphdmEubGFuZy5TdHJpbmcpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzdHJpbmdWYWx1ZSgpIj5zdHJpbmdWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY2hhbmdlVHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj5jaGFuZ2VUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVG8oamF2YS5sYW5nLk9iamVjdCkiPmNvbXBhcmVUbzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+Y29tcGFyZVZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb3B5KCkiPmNvcHk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc0ltbXV0YWJsZSgpIj5pc0ltbXV0YWJsZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNOaWwoKSI+aXNOaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NjaGVtYVR5cGUoKSI+c2NoZW1hVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldE5pbCgpIj5zZXROaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZSgpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlRXF1YWxzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+dmFsdWVFcXVhbHM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlSGFzaENvZGUoKSI+dmFsdWVIYXNoQ29kZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFRva2VuU291cmNlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNkb2N1bWVudFByb3BlcnRpZXMoKSI+ZG9jdW1lbnRQcm9wZXJ0aWVzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI21vbml0b3IoKSI+bW9uaXRvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdDdXJzb3IoKSI+bmV3Q3Vyc29yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUoKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0oKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKCkiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKCkiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dCgpIj54bWxUZXh0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+eG1sVGV4dDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9InR5cGUiPjwhLS0gLS0+PC9BPjxIMz4KLXR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPnR5cGU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImNhbGVuZGFyVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotY2FsZW5kYXJWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+IDxCPmNhbGVuZGFyVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCNnZXRDYWxlbmRhclZhbHVlKCkiPjxDT0RFPmdldENhbGVuZGFyVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldChqYXZhLnV0aWwuQ2FsZW5kYXIpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj5DYWxlbmRhcjwvQT4mbmJzcDtjKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sI3NldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+PENPREU+c2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ0RhdGVWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nRGF0ZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4gPEI+Z0RhdGVWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sI2dldEdEYXRlVmFsdWUoKSI+PENPREU+Z2V0R0RhdGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXQ8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtnZCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCNzZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpIj48Q09ERT5zZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj48Q09ERT5HRGF0ZVNwZWNpZmljYXRpb248L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJkYXRlVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZGF0ZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPkRhdGU8L0E+IDxCPmRhdGVWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sI2dldERhdGVWYWx1ZSgpIj48Q09ERT5nZXREYXRlVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPjxDT0RFPkRhdGU8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQoamF2YS51dGlsLkRhdGUpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPkRhdGU8L0E+Jm5ic3A7ZCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCNzZXREYXRlVmFsdWUoamF2YS51dGlsLkRhdGUpIj48Q09ERT5zZXREYXRlVmFsdWUoamF2YS51dGlsLkRhdGUpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0RhdGUuaHRtbCI+PENPREU+RGF0ZTwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldENhbGVuZGFyVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Q2FsZW5kYXJWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+IDxCPmdldENhbGVuZGFyVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRDYWxlbmRhclZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRDYWxlbmRhclZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiZuYnNwO2MpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEdEYXRlVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0R0RhdGVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+IDxCPmdldEdEYXRlVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0R0RhdGVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0R0RhdGVWYWx1ZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4mbmJzcDtnZCk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj48Q09ERT5HRGF0ZVNwZWNpZmljYXRpb248L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXREYXRlVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RGF0ZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPkRhdGU8L0E+IDxCPmdldERhdGVWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvRGF0ZS5odG1sIj48Q09ERT5EYXRlPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0RGF0ZVZhbHVlKGphdmEudXRpbC5EYXRlKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0RGF0ZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXREYXRlVmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvRGF0ZS5odG1sIj5EYXRlPC9BPiZuYnNwO2QpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9EYXRlLmh0bWwiPjxDT0RFPkRhdGU8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sRGF0ZVRpbWUuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFlMzA2YS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY3MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ3OjAwIFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sRGVjaW1hbC5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERlY2ltYWwuRmFjdG9yeSxYbWxEZWNpbWFsLkZhY3RvcnkgY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbERlY2ltYWwuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBYbWxEZWNpbWFsLkZhY3Rvcnk8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxEZWNpbWFsLkZhY3Rvcnk8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5FbmNsb3NpbmcgY2xhc3M6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIDxCPlhtbERlY2ltYWwuRmFjdG9yeTwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9ETD4KLQotPFA+Ci1BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPjxDT0RFPlhtbERlY2ltYWw8L0NPREU+PC9BPi4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPm5ld0luc3RhbmNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+PENPREU+WG1sRGVjaW1hbDwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0luc3RhbmNlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPjxDT0RFPlhtbERlY2ltYWw8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+bmV3VmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPjxDT0RFPlhtbERlY2ltYWw8L0NPREU+PC9BPiB2YWx1ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPjxDT0RFPlhtbERlY2ltYWw8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj48Q09ERT5YbWxEZWNpbWFsPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPjxDT0RFPlhtbERlY2ltYWw8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj48Q09ERT5YbWxEZWNpbWFsPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPjxDT0RFPlhtbERlY2ltYWw8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj48Q09ERT5YbWxEZWNpbWFsPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlcikiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPjxDT0RFPlhtbERlY2ltYWw8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPjxDT0RFPlhtbERlY2ltYWw8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj48Q09ERT5YbWxEZWNpbWFsPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+PENPREU+WG1sRGVjaW1hbDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj48Q09ERT5YbWxEZWNpbWFsPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPjxDT0RFPlhtbERlY2ltYWw8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj48Q09ERT5YbWxEZWNpbWFsPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+PENPREU+WG1sRGVjaW1hbDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjY2xvbmUoKSI+Y2xvbmU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZ2V0Q2xhc3MoKSI+Z2V0Q2xhc3M8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+IDxCPm5ld0luc3RhbmNlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+PENPREU+WG1sRGVjaW1hbDwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj48Q09ERT5YbWxEZWNpbWFsPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPiA8Qj5uZXdWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+PENPREU+WG1sRGVjaW1hbDwvQ09ERT48L0E+IHZhbHVlCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+PENPREU+WG1sRGVjaW1hbDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsxMjM0LjU2Nzg5Jmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+PENPREU+WG1sRGVjaW1hbDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsxMjM0LjU2Nzg5Jmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZikKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj48Q09ERT5YbWxEZWNpbWFsPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPjxDT0RFPlhtbERlY2ltYWw8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPjxDT0RFPlhtbERlY2ltYWw8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPjxDT0RFPlhtbERlY2ltYWw8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj48Q09ERT5YbWxEZWNpbWFsPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPjxDT0RFPlhtbERlY2ltYWw8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlcikiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPjxDT0RFPlhtbERlY2ltYWw8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj48Q09ERT5YbWxEZWNpbWFsPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+PENPREU+WG1sRGVjaW1hbDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+PENPREU+WG1sRGVjaW1hbDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+PENPREU+WG1sRGVjaW1hbDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPjxDT0RFPlhtbERlY2ltYWw8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbERlY2ltYWwuRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhYjE5YmEuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzk2ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTcgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxEZWNpbWFsIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERlY2ltYWwsWG1sRGVjaW1hbCBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbERlY2ltYWwgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbERlY2ltYWwuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgWG1sRGVjaW1hbDwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9ERD4KLTwvREw+Ci08REw+Ci08RFQ+PEI+QWxsIEtub3duIFN1YmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPlhtbEJ5dGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj5YbWxJbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj5YbWxMb25nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+WG1sTmVnYXRpdmVJbnRlZ2VyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sUG9zaXRpdmVJbnRlZ2VyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj5YbWxTaG9ydDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPlhtbFVuc2lnbmVkQnl0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj5YbWxVbnNpZ25lZExvbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+WG1sVW5zaWduZWRTaG9ydDwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlhtbERlY2ltYWw8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9ETD4KLQotPFA+Ci1Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZGVjaW1hbCI+eHM6ZGVjaW1hbDwvYT4gdHlwZS4KLSA8cD4KLSBDb252ZXJ0aWJsZSB0byA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+PENPREU+QmlnRGVjaW1hbDwvQ09ERT48L0E+LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCI+WG1sRGVjaW1hbC5GYWN0b3J5PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+PENPREU+WG1sRGVjaW1hbDwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+WG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjdHlwZSI+dHlwZTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+RmllbGRzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0VRVUFMIj5FUVVBTDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjR1JFQVRFUl9USEFOIj5HUkVBVEVSX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0xFU1NfVEhBTiI+TEVTU19USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNOT1RfRVFVQUwiPk5PVF9FUVVBTDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj5CaWdEZWNpbWFsPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCNiaWdEZWNpbWFsVmFsdWUoKSI+YmlnRGVjaW1hbFZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCNnZXRCaWdEZWNpbWFsVmFsdWUoKSI+PENPREU+Z2V0QmlnRGVjaW1hbFZhbHVlKCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiPkJpZ0RlY2ltYWw8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI2dldEJpZ0RlY2ltYWxWYWx1ZSgpIj5nZXRCaWdEZWNpbWFsVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+PENPREU+QmlnRGVjaW1hbDwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjc2V0KGphdmEubWF0aC5CaWdEZWNpbWFsKSI+c2V0PC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiPkJpZ0RlY2ltYWw8L0E+Jm5ic3A7YmQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI3NldEJpZ0RlY2ltYWxWYWx1ZShqYXZhLm1hdGguQmlnRGVjaW1hbCkiPjxDT0RFPnNldEJpZ0RlY2ltYWxWYWx1ZShqYXZhLm1hdGguQmlnRGVjaW1hbCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCNzZXRCaWdEZWNpbWFsVmFsdWUoamF2YS5tYXRoLkJpZ0RlY2ltYWwpIj5zZXRCaWdEZWNpbWFsVmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT4mbmJzcDtiZCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj48Q09ERT5CaWdEZWNpbWFsPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjZ2V0U3RyaW5nVmFsdWUoKSI+Z2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXQoamF2YS5sYW5nLlN0cmluZykiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj5zZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3N0cmluZ1ZhbHVlKCkiPnN0cmluZ1ZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjaGFuZ2VUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPmNoYW5nZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KSI+Y29tcGFyZVRvPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5jb21wYXJlVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvcHkoKSI+Y29weTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzSW1tdXRhYmxlKCkiPmlzSW1tdXRhYmxlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc05pbCgpIj5pc05pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2NoZW1hVHlwZSgpIj5zY2hlbWFUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0TmlsKCkiPnNldE5pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKCkiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVFcXVhbHMob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj52YWx1ZUVxdWFsczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVIYXNoQ29kZSgpIj52YWx1ZUhhc2hDb2RlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVG9rZW5Tb3VyY2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI2RvY3VtZW50UHJvcGVydGllcygpIj5kb2N1bWVudFByb3BlcnRpZXM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbW9uaXRvcigpIj5tb25pdG9yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0N1cnNvcigpIj5uZXdDdXJzb3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZSgpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbSgpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIoKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0oKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0pIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KCkiPnhtbFRleHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj54bWxUZXh0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0idHlwZSI+PCEtLSAtLT48L0E+PEgzPgotdHlwZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+dHlwZTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0QmlnRGVjaW1hbFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEJpZ0RlY2ltYWxWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj5CaWdEZWNpbWFsPC9BPiA8Qj5nZXRCaWdEZWNpbWFsVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+PENPREU+QmlnRGVjaW1hbDwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEJpZ0RlY2ltYWxWYWx1ZShqYXZhLm1hdGguQmlnRGVjaW1hbCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEJpZ0RlY2ltYWxWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0QmlnRGVjaW1hbFZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT4mbmJzcDtiZCk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+PENPREU+QmlnRGVjaW1hbDwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImJpZ0RlY2ltYWxWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1iaWdEZWNpbWFsVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT4gPEI+YmlnRGVjaW1hbFZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCNnZXRCaWdEZWNpbWFsVmFsdWUoKSI+PENPREU+Z2V0QmlnRGVjaW1hbFZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj48Q09ERT5CaWdEZWNpbWFsPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0KGphdmEubWF0aC5CaWdEZWNpbWFsKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXQ8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj5CaWdEZWNpbWFsPC9BPiZuYnNwO2JkKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjc2V0QmlnRGVjaW1hbFZhbHVlKGphdmEubWF0aC5CaWdEZWNpbWFsKSI+PENPREU+c2V0QmlnRGVjaW1hbFZhbHVlKGphdmEubWF0aC5CaWdEZWNpbWFsKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiPjxDT0RFPkJpZ0RlY2ltYWw8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sRGVjaW1hbC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Yzk3MTE0Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzY2ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDc6MDAgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxEb2N1bWVudFByb3BlcnRpZXMgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLFhtbERvY3VtZW50UHJvcGVydGllcyBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sRG9jdW1lbnRQcm9wZXJ0aWVzIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBYbWxEb2N1bWVudFByb3BlcnRpZXM8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxEb2N1bWVudFByb3BlcnRpZXM8L0I+Ci08L1BSRT4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgYWJzdHJhY3QgY2xhc3MgPEI+WG1sRG9jdW1lbnRQcm9wZXJ0aWVzPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0RMPgotCi08UD4KLVRoaXMgY2xhc3MgaXMgdXNlZCB0byBhdHRhY2ggYXJiaXRyYXJ5IGluZm9ybWF0aW9uIHRvIGFuIFhNTAotIGRvY3VtZW50LiAgSXQgYWxzbyBkZWZpbmVzIHNldmVyYWwgd2VsbC1rbm93biB0eXBlcyBvZgotIGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlIGF0dGFjaGVkIG9yIGZvdW5kIG9uIGEgZG9jdW1lbnQuCi0gPHA+Ci0gRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IHdhbnRlZCB0byBhc3NvY2lhdGUgYSBmaWxlbmFtZQotIHdpdGggdGhlIGRvY3VtZW50IGNvbnRhaW5pbmcgYW4geG1sIG9iamVjdCAieG9iaiIuICBUaGlzCi0gY291bGQgYmUgZG9uZSB2aWEgdGhlIGZvbGxvd2luZyBjb2RlOgotIDxwPgotIHRva2VuU291cmNlLmRvY3VtZW50UHJvcGVydGllcygpLnNldChYbWxEb2N1bWVudFByb3BlcnRpZXMuTkFNRSwgIk15RmlsZW5hbWUueG1sIik7Ci0gPHA+Ci0gVG8gZmV0Y2ggdGhlIGZpbGVuYW1lIGxhdGVyLCBnaXZlbiBhbiB4b2JqMiBhbnl3aGVyZSBpbiB0aGUKLSBzYW1lIGRvY3VtZW50LCB5b3UgY2FuIHdyaXRlOgotIDxwPgotIGZpbGVuYW1lID0gKFN0cmluZyl0b2tlblNvdXJjZS5kb2N1bWVudFByb3BlcnRpZXMoKS5nZXQoWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLk5BTUUpOwotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwjRE9DVFlQRV9OQU1FIj5ET0NUWVBFX05BTUU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7RG9jIHR5cGUgbmFtZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwjRE9DVFlQRV9QVUJMSUNfSUQiPkRPQ1RZUEVfUFVCTElDX0lEPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0RvYyB0eXBlIHB1YmxpYyBpZDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwjRE9DVFlQRV9TWVNURU1fSUQiPkRPQ1RZUEVfU1lTVEVNX0lEPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0RvYyB0eXBlIHN5c3RlbSBpZDwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwjRU5DT0RJTkciPkVOQ09ESU5HPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0RvY3VtZW50IGVuY29kaW5nPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCNNRVNTQUdFX0RJR0VTVCI+TUVTU0FHRV9ESUdFU1Q8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U0hBIG1lc3NhZ2UgZGlnZXN0PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCNTT1VSQ0VfTkFNRSI+U09VUkNFX05BTUU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VXNlZCB0byBzdG9yZSB0aGUgb3JpZ2luYWwgbmFtZSAoYSBTdHJpbmcpIGZvcgotIHRoZSBzb3VyY2UgZnJvbSB3aGljaCB0aGUgWE1MIGRvY3VtZW50IHdhcyBsb2FkZWQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCNWRVJTSU9OIj5WRVJTSU9OPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0RvY3VtZW50IHZlcnNpb248L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0iY29uc3RydWN0b3Jfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwjWG1sRG9jdW1lbnRQcm9wZXJ0aWVzKCkiPlhtbERvY3VtZW50UHJvcGVydGllczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPmFic3RyYWN0ICZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCNnZXQoamF2YS5sYW5nLk9iamVjdCkiPmdldDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtrZXkpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsdWUgcHJldmlvdXNseSBhdHRhY2hlZCB0byBhIGRvY3VtZW50IHVzaW5nIHNldC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5odG1sI2dldERvY3R5cGVOYW1lKCkiPmdldERvY3R5cGVOYW1lPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgRE9DVFlQRSBuYW1lIHVzZWQgaW4gdGhlICZsdCYjMzM7RE9DVFlQRSZndDsgZGVjbGFyYXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCNnZXREb2N0eXBlUHVibGljSWQoKSI+Z2V0RG9jdHlwZVB1YmxpY0lkPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgRE9DVFlQRSBwdWJsaWMgSUQgdXNlZCBpbiB0aGUgJmx0JiMzMztET0NUWVBFJmd0OyBkZWNsYXJhdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5odG1sI2dldERvY3R5cGVTeXN0ZW1JZCgpIj5nZXREb2N0eXBlU3lzdGVtSWQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBET0NUWVBFIHN5c3RlbSBJRCB1c2VkIGluIHRoZSAmbHQmIzMzO0RPQ1RZUEUmZ3Q7IGRlY2xhcmF0aW9uLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwjZ2V0RW5jb2RpbmcoKSI+Z2V0RW5jb2Rpbmc8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBlbmNvZGluZyB1c2VkIGZvciB0aGUgWE1MIGRvY3VtZW50LCBhcyBhbiBJU08gZW5jb2RpbmcgbmFtZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ynl0ZVtdPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwjZ2V0TWVzc2FnZURpZ2VzdCgpIj5nZXRNZXNzYWdlRGlnZXN0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbWVzc2FnZSBkaWdlc3QgdXNlZCB0byBzdW1tYXJpemUgdGhlIGRvY3VtZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwjZ2V0U291cmNlTmFtZSgpIj5nZXRTb3VyY2VOYW1lPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgWE1MIGRvY3VtZW50IGZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCNnZXRWZXJzaW9uKCkiPmdldFZlcnNpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBYTUwgdmVyc2lvbiBzdHJpbmcgdXNlZCBpbiB0aGUgJmx0JiM2Mzt4bWwmIzYzOyZndDsgZGVjbGFyYXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPmFic3RyYWN0ICZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCNwdXQoamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLk9iamVjdCkiPnB1dDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtrZXksCi0gICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QXR0YWNoZXMgYSB2YWx1ZSB0byB0aGUgcm9vdCBvZiB0aGUgZG9jdW1lbnQgY29udGFpbmluZwotIHRoZSBnaXZlbiB0b2tlbiBzb3VyY2UuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPmFic3RyYWN0ICZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCNyZW1vdmUoamF2YS5sYW5nLk9iamVjdCkiPnJlbW92ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtrZXkpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZW1vdmVzIGEgdmFsdWUgcHJldmlvdXNseSBhdHRhY2hlZCB0byBhIGRvY3VtZW50IHVzaW5nIHNldC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5odG1sI3NldERvY3R5cGVOYW1lKGphdmEubGFuZy5TdHJpbmcpIj5zZXREb2N0eXBlTmFtZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtkb2N0eXBlbmFtZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIERPQ1RZUEUgbmFtZSB1c2UgaW4gdGhlICZsdCYjMzM7RE9DVFlQRSZndDsgZGVjbGFyYXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCNzZXREb2N0eXBlUHVibGljSWQoamF2YS5sYW5nLlN0cmluZykiPnNldERvY3R5cGVQdWJsaWNJZDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtwdWJsaWNpZCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIERPQ1RZUEUgcHVibGljIElEIHRvIHVzZSBpbiB0aGUgJmx0JiMzMztET0NUWVBFJmd0OyBkZWNsYXJhdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5odG1sI3NldERvY3R5cGVTeXN0ZW1JZChqYXZhLmxhbmcuU3RyaW5nKSI+c2V0RG9jdHlwZVN5c3RlbUlkPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3N5c3RlbWlkKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgRE9DVFlQRSBzeXN0ZW0gSUQgdG8gdXNlIGluIHRoZSAmbHQmIzMzO0RPQ1RZUEUmZ3Q7IGRlY2xhcmF0aW9uLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwjc2V0RW5jb2RpbmcoamF2YS5sYW5nLlN0cmluZykiPnNldEVuY29kaW5nPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO2VuY29kaW5nKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgZW5jb2RpbmcgdG8gdXNlIGZvciB0aGUgWE1MIGRvY3VtZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwjc2V0TWVzc2FnZURpZ2VzdChieXRlW10pIj5zZXRNZXNzYWdlRGlnZXN0PC9BPjwvQj4oYnl0ZVtdJm5ic3A7ZGlnZXN0KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgbWVzc2FnZSBkaWdlc3QgdXNlZCB0byBzdW1tYXJpemUgdGhlIGRvY3VtZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwjc2V0U291cmNlTmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0U291cmNlTmFtZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzb3VyY2VOYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgbmFtZSBvZiB0aGUgWE1MIGRvY3VtZW50IGZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCNzZXRWZXJzaW9uKGphdmEubGFuZy5TdHJpbmcpIj5zZXRWZXJzaW9uPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3ZlcnNpb24pPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSBYTUwgdmVyc2lvbiBzdHJpbmcgdG8gdXNlIGluIHRoZSAmbHQmIzYzO3htbCYjNjM7Jmd0OyBkZWNsYXJhdGlvbi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNjbG9uZSgpIj5jbG9uZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj5lcXVhbHM8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2ZpbmFsaXplKCkiPmZpbmFsaXplPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNnZXRDbGFzcygpIj5nZXRDbGFzczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjaGFzaENvZGUoKSI+aGFzaENvZGU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeSgpIj5ub3RpZnk8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeUFsbCgpIj5ub3RpZnlBbGw8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KCkiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZykiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZywgaW50KSI+d2FpdDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9IlNPVVJDRV9OQU1FIj48IS0tIC0tPjwvQT48SDM+Ci1TT1VSQ0VfTkFNRTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+IDxCPlNPVVJDRV9OQU1FPC9CPjwvUFJFPgotPERMPgotPEREPlVzZWQgdG8gc3RvcmUgdGhlIG9yaWdpbmFsIG5hbWUgKGEgU3RyaW5nKSBmb3IKLSB0aGUgc291cmNlIGZyb20gd2hpY2ggdGhlIFhNTCBkb2N1bWVudCB3YXMgbG9hZGVkLgotIFRoaXMgbmFtZSwgaWYgcHJlc2VudCwgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUKLSBkb2N1bWVudCB3aGVuIHJlcG9ydGluZyB2YWxpZGF0aW9uIG9yIGNvbWlsYXRpb24gZXJyb3JzLgotCi0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoRmlsZSkgYW5kIFNjaGVtYVR5cGVMb2FkZXIubG9hZEluc3RhbmNlKEZpbGUpCi0gYm90aCBhdXRvbWF0aWNhbGx5IHNldCB0aGlzIHZhbHVlIHRvIHRoZSBmaWxlbmFtZS4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkVOQ09ESU5HIj48IS0tIC0tPjwvQT48SDM+Ci1FTkNPRElORzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+IDxCPkVOQ09ESU5HPC9CPjwvUFJFPgotPERMPgotPEREPkRvY3VtZW50IGVuY29kaW5nCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJWRVJTSU9OIj48IS0tIC0tPjwvQT48SDM+Ci1WRVJTSU9OPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4gPEI+VkVSU0lPTjwvQj48L1BSRT4KLTxETD4KLTxERD5Eb2N1bWVudCB2ZXJzaW9uCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJET0NUWVBFX05BTUUiPjwhLS0gLS0+PC9BPjxIMz4KLURPQ1RZUEVfTkFNRTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+IDxCPkRPQ1RZUEVfTkFNRTwvQj48L1BSRT4KLTxETD4KLTxERD5Eb2MgdHlwZSBuYW1lCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJET0NUWVBFX1BVQkxJQ19JRCI+PCEtLSAtLT48L0E+PEgzPgotRE9DVFlQRV9QVUJMSUNfSUQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiA8Qj5ET0NUWVBFX1BVQkxJQ19JRDwvQj48L1BSRT4KLTxETD4KLTxERD5Eb2MgdHlwZSBwdWJsaWMgaWQKLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkRPQ1RZUEVfU1lTVEVNX0lEIj48IS0tIC0tPjwvQT48SDM+Ci1ET0NUWVBFX1NZU1RFTV9JRDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+IDxCPkRPQ1RZUEVfU1lTVEVNX0lEPC9CPjwvUFJFPgotPERMPgotPEREPkRvYyB0eXBlIHN5c3RlbSBpZAotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTUVTU0FHRV9ESUdFU1QiPjwhLS0gLS0+PC9BPjxIMz4KLU1FU1NBR0VfRElHRVNUPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4gPEI+TUVTU0FHRV9ESUdFU1Q8L0I+PC9QUkU+Ci08REw+Ci08REQ+U0hBIG1lc3NhZ2UgZGlnZXN0Ci08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iWG1sRG9jdW1lbnRQcm9wZXJ0aWVzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLVhtbERvY3VtZW50UHJvcGVydGllczwvSDM+Ci08UFJFPgotcHVibGljIDxCPlhtbERvY3VtZW50UHJvcGVydGllczwvQj4oKTwvUFJFPgotPERMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0ic2V0U291cmNlTmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0U291cmNlTmFtZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0U291cmNlTmFtZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3NvdXJjZU5hbWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgbmFtZSBvZiB0aGUgWE1MIGRvY3VtZW50IGZpbGUuICBUeXBpY2FsbHkgYSBVUkwsIGJ1dCBtYXkKLSBiZSBhbnkgU3RyaW5nLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5zb3VyY2VOYW1lPC9DT0RFPiAtIHRoZSBuYW1lIHRvIHNldDxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldERvY3VtZW50U291cmNlTmFtZShqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+WG1sT3B0aW9ucy5zZXREb2N1bWVudFNvdXJjZU5hbWUoamF2YS5sYW5nLlN0cmluZyk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0U291cmNlTmFtZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTb3VyY2VOYW1lPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5nZXRTb3VyY2VOYW1lPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgWE1MIGRvY3VtZW50IGZpbGUuICBUeXBpY2FsbHkgYSBVUkwsIGJ1dCBtYXkKLSBiZSBhbnkgU3RyaW5nLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0RG9jdW1lbnRTb3VyY2VOYW1lKGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5YbWxPcHRpb25zLnNldERvY3VtZW50U291cmNlTmFtZShqYXZhLmxhbmcuU3RyaW5nKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRFbmNvZGluZyhqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0RW5jb2Rpbmc8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldEVuY29kaW5nPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7ZW5jb2RpbmcpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgZW5jb2RpbmcgdG8gdXNlIGZvciB0aGUgWE1MIGRvY3VtZW50LiAgU2hvdWxkIGJlIGEgdmFsaWQKLSBYTUwgZW5jb2Rpbmcgc3RyaW5nLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5lbmNvZGluZzwvQ09ERT4gLSB0aGUgSVNPIGVuY29kaW5nIG5hbWU8RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRDaGFyYWN0ZXJFbmNvZGluZyhqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+WG1sT3B0aW9ucy5zZXRDaGFyYWN0ZXJFbmNvZGluZyhqYXZhLmxhbmcuU3RyaW5nKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRFbmNvZGluZygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRFbmNvZGluZzwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+Z2V0RW5jb2Rpbmc8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBlbmNvZGluZyB1c2VkIGZvciB0aGUgWE1MIGRvY3VtZW50LCBhcyBhbiBJU08gZW5jb2RpbmcgbmFtZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldENoYXJhY3RlckVuY29kaW5nKGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5YbWxPcHRpb25zLnNldENoYXJhY3RlckVuY29kaW5nKGphdmEubGFuZy5TdHJpbmcpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFZlcnNpb24oamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldFZlcnNpb248L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldFZlcnNpb248L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDt2ZXJzaW9uKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhlIFhNTCB2ZXJzaW9uIHN0cmluZyB0byB1c2UgaW4gdGhlICZsdCYjNjM7eG1sJiM2MzsmZ3Q7IGRlY2xhcmF0aW9uLgotIChUaGUgWE1MIHNwZWNpZmljYXRpb24gaXMgcXVpdGUgc3RhYmxlIGF0ICIxLjAiLikKLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+dmVyc2lvbjwvQ09ERT4gLSB0aGUgWE1MIHZlcnNpb24gc3RyaW5nPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRWZXJzaW9uKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFZlcnNpb248L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPmdldFZlcnNpb248L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBYTUwgdmVyc2lvbiBzdHJpbmcgdXNlZCBpbiB0aGUgJmx0JiM2Mzt4bWwmIzYzOyZndDsgZGVjbGFyYXRpb24uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldERvY3R5cGVOYW1lKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXREb2N0eXBlTmFtZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0RG9jdHlwZU5hbWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtkb2N0eXBlbmFtZSk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSBET0NUWVBFIG5hbWUgdXNlIGluIHRoZSAmbHQmIzMzO0RPQ1RZUEUmZ3Q7IGRlY2xhcmF0aW9uLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5kb2N0eXBlbmFtZTwvQ09ERT4gLSB0aGUgZG9jdHlwZW5hbWU8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldERvY3R5cGVOYW1lKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldERvY3R5cGVOYW1lPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5nZXREb2N0eXBlTmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIERPQ1RZUEUgbmFtZSB1c2VkIGluIHRoZSAmbHQmIzMzO0RPQ1RZUEUmZ3Q7IGRlY2xhcmF0aW9uLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXREb2N0eXBlUHVibGljSWQoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldERvY3R5cGVQdWJsaWNJZDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0RG9jdHlwZVB1YmxpY0lkPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cHVibGljaWQpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgRE9DVFlQRSBwdWJsaWMgSUQgdG8gdXNlIGluIHRoZSAmbHQmIzMzO0RPQ1RZUEUmZ3Q7IGRlY2xhcmF0aW9uLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5wdWJsaWNpZDwvQ09ERT4gLSB0aGUgcHVibGljIElEPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXREb2N0eXBlUHVibGljSWQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RG9jdHlwZVB1YmxpY0lkPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5nZXREb2N0eXBlUHVibGljSWQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBET0NUWVBFIHB1YmxpYyBJRCB1c2VkIGluIHRoZSAmbHQmIzMzO0RPQ1RZUEUmZ3Q7IGRlY2xhcmF0aW9uLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXREb2N0eXBlU3lzdGVtSWQoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldERvY3R5cGVTeXN0ZW1JZDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0RG9jdHlwZVN5c3RlbUlkPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7c3lzdGVtaWQpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgRE9DVFlQRSBzeXN0ZW0gSUQgdG8gdXNlIGluIHRoZSAmbHQmIzMzO0RPQ1RZUEUmZ3Q7IGRlY2xhcmF0aW9uLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5zeXN0ZW1pZDwvQ09ERT4gLSB0aGUgc3lzdGVtIElEPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXREb2N0eXBlU3lzdGVtSWQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RG9jdHlwZVN5c3RlbUlkPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5nZXREb2N0eXBlU3lzdGVtSWQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBET0NUWVBFIHN5c3RlbSBJRCB1c2VkIGluIHRoZSAmbHQmIzMzO0RPQ1RZUEUmZ3Q7IGRlY2xhcmF0aW9uLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRNZXNzYWdlRGlnZXN0KGJ5dGVbXSkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldE1lc3NhZ2VEaWdlc3Q8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldE1lc3NhZ2VEaWdlc3Q8L0I+KGJ5dGVbXSZuYnNwO2RpZ2VzdCk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSBtZXNzYWdlIGRpZ2VzdCB1c2VkIHRvIHN1bW1hcml6ZSB0aGUgZG9jdW1lbnQuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmRpZ2VzdDwvQ09ERT4gLSB0aGUgYnl0ZXMgb2YgdGhlIGRpZ2VzdDxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldExvYWRNZXNzYWdlRGlnZXN0KCkiPjxDT0RFPlhtbE9wdGlvbnMuc2V0TG9hZE1lc3NhZ2VEaWdlc3QoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRNZXNzYWdlRGlnZXN0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE1lc3NhZ2VEaWdlc3Q8L0gzPgotPFBSRT4KLXB1YmxpYyBieXRlW10gPEI+Z2V0TWVzc2FnZURpZ2VzdDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIG1lc3NhZ2UgZGlnZXN0IHVzZWQgdG8gc3VtbWFyaXplIHRoZSBkb2N1bWVudC4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldExvYWRNZXNzYWdlRGlnZXN0KCkiPjxDT0RFPlhtbE9wdGlvbnMuc2V0TG9hZE1lc3NhZ2VEaWdlc3QoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwdXQoamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLk9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLXB1dDwvSDM+Ci08UFJFPgotcHVibGljIGFic3RyYWN0IDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4gPEI+cHV0PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7a2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO3ZhbHVlKTwvUFJFPgotPERMPgotPEREPkF0dGFjaGVzIGEgdmFsdWUgdG8gdGhlIHJvb3Qgb2YgdGhlIGRvY3VtZW50IGNvbnRhaW5pbmcKLSB0aGUgZ2l2ZW4gdG9rZW4gc291cmNlLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5rZXk8L0NPREU+IC0gVGhlIGtleTogdGhlcmUgY2FuIGJlIG9uZSB2YWx1ZSBmb3IgZWFjaCBrZXkuPEREPjxDT0RFPnZhbHVlPC9DT0RFPiAtIFRoZSB2YWx1ZSB0byBhdHRhY2ggdG8gdGhlIGRvY3VtZW50LjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0KGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyBhYnN0cmFjdCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+IDxCPmdldDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO2tleSk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsdWUgcHJldmlvdXNseSBhdHRhY2hlZCB0byBhIGRvY3VtZW50IHVzaW5nIHNldC4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+a2V5PC9DT0RFPiAtIFRoZSBrZXk6IHRoaXMgaXMgdGhlIGtleSB0aGF0IHdhcyBwcmV2aW91c2x5Ci0gICAgICAgICAgICAgIHBhc3NlZCB0byBzZXQgdG8gc3RvcmUgdGhlIHZhbHVlLgotPERUPjxCPlJldHVybnM6PC9CPjxERD5UaGUgc2F2ZWQgdmFsdWUsIG9yIG51bGwgaWYgbm9uZSBpcyBmb3VuZC48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InJlbW92ZShqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotcmVtb3ZlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYWJzdHJhY3QgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiA8Qj5yZW1vdmU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtrZXkpPC9QUkU+Ci08REw+Ci08REQ+UmVtb3ZlcyBhIHZhbHVlIHByZXZpb3VzbHkgYXR0YWNoZWQgdG8gYSBkb2N1bWVudCB1c2luZyBzZXQuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmtleTwvQ09ERT4gLSBUaGUga2V5OiB0aGlzIGlzIHRoZSBrZXkgdGhhdCB3YXMgcHJldmlvdXNseQotICAgICAgICAgICAgICBwYXNzZWQgdG8gc2V0IHRvIHN0b3JlIHRoZSB2YWx1ZS48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLkZhY3RvcnkuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMjQzZDUuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLkZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY3MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ3OjAwIFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sRG91YmxlLkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRG91YmxlLkZhY3RvcnksWG1sRG91YmxlLkZhY3RvcnkgY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbERvdWJsZS5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbERvdWJsZS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sRG91YmxlLkZhY3Rvcnk8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxEb3VibGUuRmFjdG9yeTwvQj4KLTwvUFJFPgotPERMPgotPERUPjxCPkVuY2xvc2luZyBjbGFzczo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPlhtbERvdWJsZTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIDxCPlhtbERvdWJsZS5GYWN0b3J5PC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0RMPgotCi08UD4KLUEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj48Q09ERT5YbWxEb3VibGU8L0NPREU+PC9BPi4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPlhtbERvdWJsZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPm5ld0luc3RhbmNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj48Q09ERT5YbWxEb3VibGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj5YbWxEb3VibGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnN0YW5jZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPjxDT0RFPlhtbERvdWJsZTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj5YbWxEb3VibGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+bmV3VmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+PENPREU+WG1sRG91YmxlPC9DT0RFPjwvQT4gdmFsdWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+WG1sRG91YmxlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7Zik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPjxDT0RFPlhtbERvdWJsZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj5YbWxEb3VibGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+PENPREU+WG1sRG91YmxlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPlhtbERvdWJsZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+PENPREU+WG1sRG91YmxlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+WG1sRG91YmxlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj48Q09ERT5YbWxEb3VibGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj5YbWxEb3VibGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj48Q09ERT5YbWxEb3VibGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPlhtbERvdWJsZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPjxDT0RFPlhtbERvdWJsZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+WG1sRG91YmxlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPjxDT0RFPlhtbERvdWJsZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPlhtbERvdWJsZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj48Q09ERT5YbWxEb3VibGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj5YbWxEb3VibGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPjxDT0RFPlhtbERvdWJsZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPlhtbERvdWJsZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+PENPREU+WG1sRG91YmxlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+WG1sRG91YmxlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+PENPREU+WG1sRG91YmxlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+WG1sRG91YmxlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+PENPREU+WG1sRG91YmxlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+WG1sRG91YmxlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj48Q09ERT5YbWxEb3VibGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj5YbWxEb3VibGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPjxDT0RFPlhtbERvdWJsZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjY2xvbmUoKSI+Y2xvbmU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZ2V0Q2xhc3MoKSI+Z2V0Q2xhc3M8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+WG1sRG91YmxlPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+PENPREU+WG1sRG91YmxlPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+WG1sRG91YmxlPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPjxDT0RFPlhtbERvdWJsZTwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj5YbWxEb3VibGU8L0E+IDxCPm5ld1ZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPjxDT0RFPlhtbERvdWJsZTwvQ09ERT48L0E+IHZhbHVlCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj5YbWxEb3VibGU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj48Q09ERT5YbWxEb3VibGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7MTIzLjM0ZSs1NyZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPlhtbERvdWJsZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj48Q09ERT5YbWxEb3VibGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7MTIzLjM0ZSs1NyZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPlhtbERvdWJsZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPjxDT0RFPlhtbERvdWJsZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPlhtbERvdWJsZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj48Q09ERT5YbWxEb3VibGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+WG1sRG91YmxlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSkKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj48Q09ERT5YbWxEb3VibGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPlhtbERvdWJsZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPjxDT0RFPlhtbERvdWJsZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj5YbWxEb3VibGU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj48Q09ERT5YbWxEb3VibGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj5YbWxEb3VibGU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+PENPREU+WG1sRG91YmxlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj5YbWxEb3VibGU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+PENPREU+WG1sRG91YmxlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPlhtbERvdWJsZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+PENPREU+WG1sRG91YmxlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPlhtbERvdWJsZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj48Q09ERT5YbWxEb3VibGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+WG1sRG91YmxlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj48Q09ERT5YbWxEb3VibGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPlhtbERvdWJsZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj48Q09ERT5YbWxEb3VibGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+WG1sRG91YmxlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj48Q09ERT5YbWxEb3VibGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb2N1bWVudFByb3BlcnRpZXMuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbERvdWJsZS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNTJhNWQuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOTMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NyBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbERvdWJsZSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxEb3VibGUsWG1sRG91YmxlIGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sRG91YmxlIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sRG91YmxlLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFhtbERvdWJsZTwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGludGVyZmFjZSA8Qj5YbWxEb3VibGU8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9ETD4KLQotPFA+Ci1Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZG91YmxlIj54czpkb3VibGU8L2E+IHR5cGUuCi0gPHA+Ci0gTmF0dXJhbGx5LCBjb252ZXJ0aWJsZSB0byBhIEphdmEgZG91YmxlLgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuRmFjdG9yeS5odG1sIj5YbWxEb3VibGUuRmFjdG9yeTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+PENPREU+WG1sRG91YmxlPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIj5YbWxPYmplY3QuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sI3R5cGUiPnR5cGU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9ImZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPkZpZWxkcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNFUVVBTCI+RVFVQUw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0dSRUFURVJfVEhBTiI+R1JFQVRFUl9USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNMRVNTX1RIQU4iPkxFU1NfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTk9UX0VRVUFMIj5OT1RfRVFVQUw8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtkb3VibGU8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCNkb3VibGVWYWx1ZSgpIj5kb3VibGVWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCNnZXREb3VibGVWYWx1ZSgpIj48Q09ERT5nZXREb3VibGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2RvdWJsZTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sI2dldERvdWJsZVZhbHVlKCkiPmdldERvdWJsZVZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgZG91YmxlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCNzZXQoZG91YmxlKSI+c2V0PC9BPjwvQj4oZG91YmxlJm5ic3A7dik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCNzZXREb3VibGVWYWx1ZShkb3VibGUpIj48Q09ERT5zZXREb3VibGVWYWx1ZShkb3VibGUpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCNzZXREb3VibGVWYWx1ZShkb3VibGUpIj5zZXREb3VibGVWYWx1ZTwvQT48L0I+KGRvdWJsZSZuYnNwO3YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoaXMgdmFsdWUgYXMgYSBkb3VibGU8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjZ2V0U3RyaW5nVmFsdWUoKSI+Z2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXQoamF2YS5sYW5nLlN0cmluZykiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj5zZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3N0cmluZ1ZhbHVlKCkiPnN0cmluZ1ZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjaGFuZ2VUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPmNoYW5nZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KSI+Y29tcGFyZVRvPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5jb21wYXJlVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvcHkoKSI+Y29weTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzSW1tdXRhYmxlKCkiPmlzSW1tdXRhYmxlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc05pbCgpIj5pc05pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2NoZW1hVHlwZSgpIj5zY2hlbWFUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0TmlsKCkiPnNldE5pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKCkiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVFcXVhbHMob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj52YWx1ZUVxdWFsczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVIYXNoQ29kZSgpIj52YWx1ZUhhc2hDb2RlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVG9rZW5Tb3VyY2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI2RvY3VtZW50UHJvcGVydGllcygpIj5kb2N1bWVudFByb3BlcnRpZXM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbW9uaXRvcigpIj5tb25pdG9yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0N1cnNvcigpIj5uZXdDdXJzb3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZSgpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbSgpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIoKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0oKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0pIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KCkiPnhtbFRleHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj54bWxUZXh0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0idHlwZSI+PCEtLSAtLT48L0E+PEgzPgotdHlwZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+dHlwZTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0RG91YmxlVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RG91YmxlVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBkb3VibGUgPEI+Z2V0RG91YmxlVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSBkb3VibGUKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0RG91YmxlVmFsdWUoZG91YmxlKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0RG91YmxlVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldERvdWJsZVZhbHVlPC9CPihkb3VibGUmbmJzcDt2KTwvUFJFPgotPERMPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIGRvdWJsZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJkb3VibGVWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1kb3VibGVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGRvdWJsZSA8Qj5kb3VibGVWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCNnZXREb3VibGVWYWx1ZSgpIj48Q09ERT5nZXREb3VibGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSBkb3VibGUKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0KGRvdWJsZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPihkb3VibGUmbmJzcDt2KTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCNzZXREb3VibGVWYWx1ZShkb3VibGUpIj48Q09ERT5zZXREb3VibGVWYWx1ZShkb3VibGUpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSBkb3VibGUKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxEb3VibGUuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uRmFjdG9yeS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzVhOGM5Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLkZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY3MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ3OjAwIFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sRHVyYXRpb24uRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxEdXJhdGlvbi5GYWN0b3J5LFhtbER1cmF0aW9uLkZhY3RvcnkgY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbER1cmF0aW9uLkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxEdXJhdGlvbi5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sRHVyYXRpb24uRmFjdG9yeTwvSDI+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+amF2YS5sYW5nLk9iamVjdDwvQT4KLSAgfAotICArLS08Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbER1cmF0aW9uLkZhY3Rvcnk8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5FbmNsb3NpbmcgY2xhc3M6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPlhtbER1cmF0aW9uPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgPEI+WG1sRHVyYXRpb24uRmFjdG9yeTwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9ETD4KLQotPFA+Ci1BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj48Q09ERT5YbWxEdXJhdGlvbjwvQ09ERT48L0E+LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj5YbWxEdXJhdGlvbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2UoKSI+bmV3SW5zdGFuY2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+PENPREU+WG1sRHVyYXRpb248L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPlhtbER1cmF0aW9uPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnN0YW5jZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+PENPREU+WG1sRHVyYXRpb248L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+WG1sRHVyYXRpb248L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uRmFjdG9yeS5odG1sI25ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj5uZXdWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPjxDT0RFPlhtbER1cmF0aW9uPC9DT0RFPjwvQT4gdmFsdWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj5YbWxEdXJhdGlvbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7Zik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+PENPREU+WG1sRHVyYXRpb248L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj5YbWxEdXJhdGlvbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+PENPREU+WG1sRHVyYXRpb248L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj5YbWxEdXJhdGlvbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPjxDT0RFPlhtbER1cmF0aW9uPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj5YbWxEdXJhdGlvbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPjxDT0RFPlhtbER1cmF0aW9uPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj5YbWxEdXJhdGlvbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj48Q09ERT5YbWxEdXJhdGlvbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj5YbWxEdXJhdGlvbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj48Q09ERT5YbWxEdXJhdGlvbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj5YbWxEdXJhdGlvbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+PENPREU+WG1sRHVyYXRpb248L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPlhtbER1cmF0aW9uPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj48Q09ERT5YbWxEdXJhdGlvbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+WG1sRHVyYXRpb248L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj48Q09ERT5YbWxEdXJhdGlvbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+WG1sRHVyYXRpb248L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj48Q09ERT5YbWxEdXJhdGlvbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+WG1sRHVyYXRpb248L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+PENPREU+WG1sRHVyYXRpb248L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPlhtbER1cmF0aW9uPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPjxDT0RFPlhtbER1cmF0aW9uPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj5YbWxEdXJhdGlvbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPjxDT0RFPlhtbER1cmF0aW9uPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj5YbWxEdXJhdGlvbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPjxDT0RFPlhtbER1cmF0aW9uPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNjbG9uZSgpIj5jbG9uZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj5lcXVhbHM8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2ZpbmFsaXplKCkiPmZpbmFsaXplPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNnZXRDbGFzcygpIj5nZXRDbGFzczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjaGFzaENvZGUoKSI+aGFzaENvZGU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeSgpIj5ub3RpZnk8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeUFsbCgpIj5ub3RpZnlBbGw8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KCkiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZykiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZywgaW50KSI+d2FpdDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPlhtbER1cmF0aW9uPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj48Q09ERT5YbWxEdXJhdGlvbjwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+WG1sRHVyYXRpb248L0E+IDxCPm5ld0luc3RhbmNlPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj48Q09ERT5YbWxEdXJhdGlvbjwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPlhtbER1cmF0aW9uPC9BPiA8Qj5uZXdWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPjxDT0RFPlhtbER1cmF0aW9uPC9DT0RFPjwvQT4gdmFsdWUKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+WG1sRHVyYXRpb248L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cykKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+PENPREU+WG1sRHVyYXRpb248L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7UDFZMk1UMkgmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPlhtbER1cmF0aW9uPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPjxDT0RFPlhtbER1cmF0aW9uPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0O1AxWTJNVDJIJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj5YbWxEdXJhdGlvbjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPjxDT0RFPlhtbER1cmF0aW9uPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj5YbWxEdXJhdGlvbjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPjxDT0RFPlhtbER1cmF0aW9uPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+WG1sRHVyYXRpb248L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPjxDT0RFPlhtbER1cmF0aW9uPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPlhtbER1cmF0aW9uPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj48Q09ERT5YbWxEdXJhdGlvbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPlhtbER1cmF0aW9uPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+PENPREU+WG1sRHVyYXRpb248L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPlhtbER1cmF0aW9uPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+PENPREU+WG1sRHVyYXRpb248L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlcikiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+WG1sRHVyYXRpb248L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+PENPREU+WG1sRHVyYXRpb248L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj5YbWxEdXJhdGlvbjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj48Q09ERT5YbWxEdXJhdGlvbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPlhtbER1cmF0aW9uPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj48Q09ERT5YbWxEdXJhdGlvbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPlhtbER1cmF0aW9uPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj48Q09ERT5YbWxEdXJhdGlvbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj5YbWxEdXJhdGlvbjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj48Q09ERT5YbWxEdXJhdGlvbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPlhtbER1cmF0aW9uPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPjxDT0RFPlhtbER1cmF0aW9uPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbER1cmF0aW9uLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2MmFmYjQuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM5NSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ2OjU3IFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sRHVyYXRpb24gKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRHVyYXRpb24sWG1sRHVyYXRpb24gaW50ZXJmYWNlIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxEdXJhdGlvbiAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sRHVyYXRpb24uaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgWG1sRHVyYXRpb248L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBpbnRlcmZhY2UgPEI+WG1sRHVyYXRpb248L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9ETD4KLQotPFA+Ci1Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZHVyYXRpb24iPnhzOmR1cmF0aW9uPC9hPiB0eXBlLgotIDxwPgotIENvbnZlcnRpYmxlIHRvIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCI+PENPREU+R0R1cmF0aW9uPC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj48Q09ERT5HRHVyYXRpb248L0NPREU+PC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibmVzdGVkX2NsYXNzX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TmVzdGVkIENsYXNzIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtjbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLkZhY3RvcnkuaHRtbCI+WG1sRHVyYXRpb24uRmFjdG9yeTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj48Q09ERT5YbWxEdXJhdGlvbjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+WG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sI3R5cGUiPnR5cGU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9ImZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPkZpZWxkcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNFUVVBTCI+RVFVQUw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0dSRUFURVJfVEhBTiI+R1JFQVRFUl9USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNMRVNTX1RIQU4iPkxFU1NfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTk9UX0VRVUFMIj5OT1RfRVFVQUw8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCNnRHVyYXRpb25WYWx1ZSgpIj5nRHVyYXRpb25WYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sI2dldEdEdXJhdGlvblZhbHVlKCkiPjxDT0RFPmdldEdEdXJhdGlvblZhbHVlKCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCI+R0R1cmF0aW9uPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwjZ2V0R0R1cmF0aW9uVmFsdWUoKSI+Z2V0R0R1cmF0aW9uVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj48Q09ERT5HRHVyYXRpb248L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb25TcGVjaWZpY2F0aW9uKSI+c2V0PC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+Jm5ic3A7Z2QpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCNzZXRHRHVyYXRpb25WYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvbikiPjxDT0RFPnNldEdEdXJhdGlvblZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCNzZXRHRHVyYXRpb25WYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvbikiPnNldEdEdXJhdGlvblZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCI+R0R1cmF0aW9uPC9BPiZuYnNwO2dkKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCI+PENPREU+R0R1cmF0aW9uPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjZ2V0U3RyaW5nVmFsdWUoKSI+Z2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXQoamF2YS5sYW5nLlN0cmluZykiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj5zZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3N0cmluZ1ZhbHVlKCkiPnN0cmluZ1ZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjaGFuZ2VUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPmNoYW5nZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KSI+Y29tcGFyZVRvPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5jb21wYXJlVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvcHkoKSI+Y29weTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzSW1tdXRhYmxlKCkiPmlzSW1tdXRhYmxlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc05pbCgpIj5pc05pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2NoZW1hVHlwZSgpIj5zY2hlbWFUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0TmlsKCkiPnNldE5pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKCkiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVFcXVhbHMob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj52YWx1ZUVxdWFsczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVIYXNoQ29kZSgpIj52YWx1ZUhhc2hDb2RlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVG9rZW5Tb3VyY2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI2RvY3VtZW50UHJvcGVydGllcygpIj5kb2N1bWVudFByb3BlcnRpZXM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbW9uaXRvcigpIj5tb25pdG9yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0N1cnNvcigpIj5uZXdDdXJzb3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZSgpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbSgpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIoKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0oKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0pIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KCkiPnhtbFRleHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj54bWxUZXh0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0idHlwZSI+PCEtLSAtLT48L0E+PEgzPgotdHlwZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+dHlwZTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0R0R1cmF0aW9uVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0R0R1cmF0aW9uVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+IDxCPmdldEdEdXJhdGlvblZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb24uaHRtbCI+PENPREU+R0R1cmF0aW9uPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0R0R1cmF0aW9uVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb24pIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRHRHVyYXRpb25WYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0R0R1cmF0aW9uVmFsdWU8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwiPkdEdXJhdGlvbjwvQT4mbmJzcDtnZCk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj48Q09ERT5HRHVyYXRpb248L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnRHVyYXRpb25WYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nRHVyYXRpb25WYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwiPkdEdXJhdGlvbjwvQT4gPEI+Z0R1cmF0aW9uVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCNnZXRHRHVyYXRpb25WYWx1ZSgpIj48Q09ERT5nZXRHRHVyYXRpb25WYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj48Q09ERT5HRHVyYXRpb248L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb25TcGVjaWZpY2F0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXQ8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPiZuYnNwO2dkKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sI3NldEdEdXJhdGlvblZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uKSI+PENPREU+c2V0R0R1cmF0aW9uVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRHVyYXRpb24pPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj48Q09ERT5HRHVyYXRpb248L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sRHVyYXRpb24uaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuRmFjdG9yeS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzQwMDdjLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLkZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY3MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ3OjAwIFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sRU5USVRJRVMuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxFTlRJVElFUy5GYWN0b3J5LFhtbEVOVElUSUVTLkZhY3RvcnkgY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbEVOVElUSUVTLkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sRU5USVRJRVMuRmFjdG9yeTwvSDI+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+amF2YS5sYW5nLk9iamVjdDwvQT4KLSAgfAotICArLS08Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEVOVElUSUVTLkZhY3Rvcnk8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5FbmNsb3NpbmcgY2xhc3M6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPlhtbEVOVElUSUVTPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgPEI+WG1sRU5USVRJRVMuRmFjdG9yeTwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9ETD4KLQotPFA+Ci1BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj48Q09ERT5YbWxFTlRJVElFUzwvQ09ERT48L0E+LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj5YbWxFTlRJVElFUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2UoKSI+bmV3SW5zdGFuY2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+PENPREU+WG1sRU5USVRJRVM8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPlhtbEVOVElUSUVTPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnN0YW5jZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+PENPREU+WG1sRU5USVRJRVM8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+WG1sRU5USVRJRVM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuRmFjdG9yeS5odG1sI25ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj5uZXdWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPjxDT0RFPlhtbEVOVElUSUVTPC9DT0RFPjwvQT4gdmFsdWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj5YbWxFTlRJVElFUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7Zik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+PENPREU+WG1sRU5USVRJRVM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj5YbWxFTlRJVElFUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+PENPREU+WG1sRU5USVRJRVM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj5YbWxFTlRJVElFUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPjxDT0RFPlhtbEVOVElUSUVTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj5YbWxFTlRJVElFUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPjxDT0RFPlhtbEVOVElUSUVTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj5YbWxFTlRJVElFUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj48Q09ERT5YbWxFTlRJVElFUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj5YbWxFTlRJVElFUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj48Q09ERT5YbWxFTlRJVElFUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj5YbWxFTlRJVElFUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+PENPREU+WG1sRU5USVRJRVM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPlhtbEVOVElUSUVTPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj48Q09ERT5YbWxFTlRJVElFUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+WG1sRU5USVRJRVM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj48Q09ERT5YbWxFTlRJVElFUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+WG1sRU5USVRJRVM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj48Q09ERT5YbWxFTlRJVElFUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+WG1sRU5USVRJRVM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+PENPREU+WG1sRU5USVRJRVM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPlhtbEVOVElUSUVTPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPjxDT0RFPlhtbEVOVElUSUVTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj5YbWxFTlRJVElFUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPjxDT0RFPlhtbEVOVElUSUVTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj5YbWxFTlRJVElFUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPjxDT0RFPlhtbEVOVElUSUVTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNjbG9uZSgpIj5jbG9uZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj5lcXVhbHM8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2ZpbmFsaXplKCkiPmZpbmFsaXplPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNnZXRDbGFzcygpIj5nZXRDbGFzczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjaGFzaENvZGUoKSI+aGFzaENvZGU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeSgpIj5ub3RpZnk8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeUFsbCgpIj5ub3RpZnlBbGw8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KCkiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZykiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZywgaW50KSI+d2FpdDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPlhtbEVOVElUSUVTPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj48Q09ERT5YbWxFTlRJVElFUzwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+WG1sRU5USVRJRVM8L0E+IDxCPm5ld0luc3RhbmNlPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj48Q09ERT5YbWxFTlRJVElFUzwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPlhtbEVOVElUSUVTPC9BPiA8Qj5uZXdWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPjxDT0RFPlhtbEVOVElUSUVTPC9DT0RFPjwvQT4gdmFsdWUKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+WG1sRU5USVRJRVM8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cykKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+PENPREU+WG1sRU5USVRJRVM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+WG1sRU5USVRJRVM8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+PENPREU+WG1sRU5USVRJRVM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+WG1sRU5USVRJRVM8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZikKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj48Q09ERT5YbWxFTlRJVElFUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+WG1sRU5USVRJRVM8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj48Q09ERT5YbWxFTlRJVElFUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPlhtbEVOVElUSUVTPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSkKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj48Q09ERT5YbWxFTlRJVElFUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj5YbWxFTlRJVElFUzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+PENPREU+WG1sRU5USVRJRVM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj5YbWxFTlRJVElFUzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPjxDT0RFPlhtbEVOVElUSUVTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj5YbWxFTlRJVElFUzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPjxDT0RFPlhtbEVOVElUSUVTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPlhtbEVOVElUSUVTPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPjxDT0RFPlhtbEVOVElUSUVTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+WG1sRU5USVRJRVM8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+PENPREU+WG1sRU5USVRJRVM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj5YbWxFTlRJVElFUzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+PENPREU+WG1sRU5USVRJRVM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj5YbWxFTlRJVElFUzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+PENPREU+WG1sRU5USVRJRVM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+WG1sRU5USVRJRVM8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+PENPREU+WG1sRU5USVRJRVM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj5YbWxFTlRJVElFUzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj48Q09ERT5YbWxFTlRJVElFUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2E1NzFjLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NDQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NyBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbEVOVElUSUVTIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEVOVElUSUVTLFhtbEVOVElUSUVTIGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sRU5USVRJRVMgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbEVOVElUSUVTLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFhtbEVOVElUSUVTPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlhtbEVOVElUSUVTPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvREw+Ci0KLTxQPgotQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI0VOVElUSUVTIj54czpFTlRJVElFUzwvYT4gdHlwZSwKLSBhIGxpc3QgdHlwZS4KLSA8cD4KLSBBIGxpc3QgdHlwZS4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5OZXN0ZWQgQ2xhc3MgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2NsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuRmFjdG9yeS5odG1sIj5YbWxFTlRJVElFUy5GYWN0b3J5PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPjxDT0RFPlhtbEVOVElUSUVTPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIj5YbWxPYmplY3QuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwjdHlwZSI+dHlwZTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+RmllbGRzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0VRVUFMIj5FUVVBTDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjR1JFQVRFUl9USEFOIj5HUkVBVEVSX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0xFU1NfVEhBTiI+TEVTU19USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNOT1RfRVFVQUwiPk5PVF9FUVVBTDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwjZ2V0TGlzdFZhbHVlKCkiPmdldExpc3RWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPjxDT0RFPkxpc3Q8L0NPREU+PC9BPiBvZiA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj48Q09ERT5TdHJpbmc8L0NPREU+PC9BPiB2YWx1ZXM8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCNsaXN0VmFsdWUoKSI+bGlzdFZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgYnkgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sI2dldExpc3RWYWx1ZSgpIj48Q09ERT5nZXRMaXN0VmFsdWUoKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCNzZXQoamF2YS51dGlsLkxpc3QpIj5zZXQ8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT4mbmJzcDtsKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgYnkgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sI2dldExpc3RWYWx1ZSgpIj48Q09ERT5nZXRMaXN0VmFsdWUoKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCNzZXRMaXN0VmFsdWUoamF2YS51dGlsLkxpc3QpIj5zZXRMaXN0VmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT4mbmJzcDtsKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwjeGdldExpc3RWYWx1ZSgpIj54Z2V0TGlzdFZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+IG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPjxDT0RFPlhtbEVOVElUWTwvQ09ERT48L0E+IHZhbHVlczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sI3hsaXN0VmFsdWUoKSI+eGxpc3RWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIGJ5IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCNnZXRMaXN0VmFsdWUoKSI+PENPREU+Z2V0TGlzdFZhbHVlKCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjZ2V0U3RyaW5nVmFsdWUoKSI+Z2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXQoamF2YS5sYW5nLlN0cmluZykiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj5zZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3N0cmluZ1ZhbHVlKCkiPnN0cmluZ1ZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjaGFuZ2VUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPmNoYW5nZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KSI+Y29tcGFyZVRvPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5jb21wYXJlVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvcHkoKSI+Y29weTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzSW1tdXRhYmxlKCkiPmlzSW1tdXRhYmxlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc05pbCgpIj5pc05pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2NoZW1hVHlwZSgpIj5zY2hlbWFUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0TmlsKCkiPnNldE5pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKCkiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVFcXVhbHMob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj52YWx1ZUVxdWFsczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVIYXNoQ29kZSgpIj52YWx1ZUhhc2hDb2RlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVG9rZW5Tb3VyY2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI2RvY3VtZW50UHJvcGVydGllcygpIj5kb2N1bWVudFByb3BlcnRpZXM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbW9uaXRvcigpIj5tb25pdG9yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0N1cnNvcigpIj5uZXdDdXJzb3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZSgpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbSgpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIoKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0oKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0pIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KCkiPnhtbFRleHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj54bWxUZXh0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0idHlwZSI+PCEtLSAtLT48L0E+PEgzPgotdHlwZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+dHlwZTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0TGlzdFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldExpc3RWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPiA8Qj5nZXRMaXN0VmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj48Q09ERT5MaXN0PC9DT0RFPjwvQT4gb2YgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+PENPREU+U3RyaW5nPC9DT0RFPjwvQT4gdmFsdWVzCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InhnZXRMaXN0VmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgoteGdldExpc3RWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPiA8Qj54Z2V0TGlzdFZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+IG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPjxDT0RFPlhtbEVOVElUWTwvQ09ERT48L0E+IHZhbHVlcwotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRMaXN0VmFsdWUoamF2YS51dGlsLkxpc3QpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRMaXN0VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldExpc3RWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+Jm5ic3A7bCk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj48Q09ERT5MaXN0PC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibGlzdFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWxpc3RWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPiA8Qj5saXN0VmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwjZ2V0TGlzdFZhbHVlKCkiPjxDT0RFPmdldExpc3RWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj48Q09ERT5MaXN0PC9DT0RFPjwvQT4gb2YgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+PENPREU+U3RyaW5nPC9DT0RFPjwvQT4gdmFsdWVzCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InhsaXN0VmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgoteGxpc3RWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPiA8Qj54bGlzdFZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgYnkgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sI2dldExpc3RWYWx1ZSgpIj48Q09ERT5nZXRMaXN0VmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+IG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPjxDT0RFPlhtbEVOVElUWTwvQ09ERT48L0E+IHZhbHVlcwotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQoamF2YS51dGlsLkxpc3QpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+Jm5ic3A7bCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwjZ2V0TGlzdFZhbHVlKCkiPjxDT0RFPmdldExpc3RWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj48Q09ERT5MaXN0PC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbEVOVElUSUVTLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5GYWN0b3J5Lmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGJiNjBmLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5GYWN0b3J5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NzMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0NzowMCBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbEVOVElUWS5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEVOVElUWS5GYWN0b3J5LFhtbEVOVElUWS5GYWN0b3J5IGNsYXNzIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxFTlRJVFkuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuRmFjdG9yeS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbEVOVElUWS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sRU5USVRZLkZhY3Rvcnk8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxFTlRJVFkuRmFjdG9yeTwvQj4KLTwvUFJFPgotPERMPgotPERUPjxCPkVuY2xvc2luZyBjbGFzczo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPlhtbEVOVElUWTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIDxCPlhtbEVOVElUWS5GYWN0b3J5PC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0RMPgotCi08UD4KLUEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj48Q09ERT5YbWxFTlRJVFk8L0NPREU+PC9BPi4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPlhtbEVOVElUWTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPm5ld0luc3RhbmNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj48Q09ERT5YbWxFTlRJVFk8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj5YbWxFTlRJVFk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnN0YW5jZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPjxDT0RFPlhtbEVOVElUWTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj5YbWxFTlRJVFk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+bmV3VmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+PENPREU+WG1sRU5USVRZPC9DT0RFPjwvQT4gdmFsdWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+WG1sRU5USVRZPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7Zik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPjxDT0RFPlhtbEVOVElUWTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj5YbWxFTlRJVFk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+PENPREU+WG1sRU5USVRZPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPlhtbEVOVElUWTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+PENPREU+WG1sRU5USVRZPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+WG1sRU5USVRZPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj48Q09ERT5YbWxFTlRJVFk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj5YbWxFTlRJVFk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj48Q09ERT5YbWxFTlRJVFk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPlhtbEVOVElUWTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPjxDT0RFPlhtbEVOVElUWTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+WG1sRU5USVRZPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPjxDT0RFPlhtbEVOVElUWTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPlhtbEVOVElUWTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj48Q09ERT5YbWxFTlRJVFk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj5YbWxFTlRJVFk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPjxDT0RFPlhtbEVOVElUWTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPlhtbEVOVElUWTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+PENPREU+WG1sRU5USVRZPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+WG1sRU5USVRZPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+PENPREU+WG1sRU5USVRZPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+WG1sRU5USVRZPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+PENPREU+WG1sRU5USVRZPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+WG1sRU5USVRZPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj48Q09ERT5YbWxFTlRJVFk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj5YbWxFTlRJVFk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPjxDT0RFPlhtbEVOVElUWTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjY2xvbmUoKSI+Y2xvbmU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZ2V0Q2xhc3MoKSI+Z2V0Q2xhc3M8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+WG1sRU5USVRZPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+PENPREU+WG1sRU5USVRZPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+WG1sRU5USVRZPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPjxDT0RFPlhtbEVOVElUWTwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj5YbWxFTlRJVFk8L0E+IDxCPm5ld1ZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPjxDT0RFPlhtbEVOVElUWTwvQ09ERT48L0E+IHZhbHVlCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj5YbWxFTlRJVFk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj48Q09ERT5YbWxFTlRJVFk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPlhtbEVOVElUWTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj48Q09ERT5YbWxFTlRJVFk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPlhtbEVOVElUWTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPjxDT0RFPlhtbEVOVElUWTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPlhtbEVOVElUWTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj48Q09ERT5YbWxFTlRJVFk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+WG1sRU5USVRZPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSkKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj48Q09ERT5YbWxFTlRJVFk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPlhtbEVOVElUWTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPjxDT0RFPlhtbEVOVElUWTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj5YbWxFTlRJVFk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj48Q09ERT5YbWxFTlRJVFk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj5YbWxFTlRJVFk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+PENPREU+WG1sRU5USVRZPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj5YbWxFTlRJVFk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+PENPREU+WG1sRU5USVRZPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPlhtbEVOVElUWTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+PENPREU+WG1sRU5USVRZPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPlhtbEVOVElUWTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj48Q09ERT5YbWxFTlRJVFk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+WG1sRU5USVRZPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj48Q09ERT5YbWxFTlRJVFk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPlhtbEVOVElUWTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj48Q09ERT5YbWxFTlRJVFk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+WG1sRU5USVRZPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj48Q09ERT5YbWxFTlRJVFk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sRU5USVRZLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA5NTU3Mi4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyNSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ2OjU3IFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sRU5USVRZIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEVOVElUWSxYbWxFTlRJVFkgaW50ZXJmYWNlIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxFTlRJVFkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGYWN0b3J5SG9vay5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sRU5USVRZLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBYbWxFTlRJVFk8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+WG1sTmFtZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPlhtbE5DTmFtZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+WG1sU3RyaW5nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj5YbWxUb2tlbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGludGVyZmFjZSA8Qj5YbWxFTlRJVFk8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+WG1sTkNOYW1lPC9BPjwvREw+Ci0KLTxQPgotQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI0VOVElUWSI+eHM6RU5USVRZPC9hPiB0eXBlLgotIDxwPgotIENvbnZlcnRpYmxlIHRvIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPjxDT0RFPlN0cmluZzwvQ09ERT48L0E+LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuRmFjdG9yeS5odG1sIj5YbWxFTlRJVFkuRmFjdG9yeTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+PENPREU+WG1sRU5USVRZPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxOQ05hbWUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPlhtbE5DTmFtZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5GYWN0b3J5Lmh0bWwiPlhtbE5DTmFtZS5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE5hbWUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj5YbWxOYW1lPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwiPlhtbE5hbWUuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxUb2tlbiI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj5YbWxUb2tlbjwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCI+WG1sVG9rZW4uRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxOb3JtYWxpemVkU3RyaW5nIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZzwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sU3RyaW5nIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj5YbWxTdHJpbmc8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sIj5YbWxTdHJpbmcuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIj5YbWxPYmplY3QuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sI3R5cGUiPnR5cGU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9ImZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPkZpZWxkcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNFUVVBTCI+RVFVQUw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0dSRUFURVJfVEhBTiI+R1JFQVRFUl9USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNMRVNTX1RIQU4iPkxFU1NfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTk9UX0VRVUFMIj5OT1RfRVFVQUw8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI2dldFN0cmluZ1ZhbHVlKCkiPmdldFN0cmluZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0KGphdmEubGFuZy5TdHJpbmcpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzdHJpbmdWYWx1ZSgpIj5zdHJpbmdWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY2hhbmdlVHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj5jaGFuZ2VUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVG8oamF2YS5sYW5nLk9iamVjdCkiPmNvbXBhcmVUbzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+Y29tcGFyZVZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb3B5KCkiPmNvcHk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc0ltbXV0YWJsZSgpIj5pc0ltbXV0YWJsZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNOaWwoKSI+aXNOaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NjaGVtYVR5cGUoKSI+c2NoZW1hVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldE5pbCgpIj5zZXROaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZSgpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlRXF1YWxzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+dmFsdWVFcXVhbHM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlSGFzaENvZGUoKSI+dmFsdWVIYXNoQ29kZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFRva2VuU291cmNlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNkb2N1bWVudFByb3BlcnRpZXMoKSI+ZG9jdW1lbnRQcm9wZXJ0aWVzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI21vbml0b3IoKSI+bW9uaXRvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdDdXJzb3IoKSI+bmV3Q3Vyc29yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUoKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0oKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKCkiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKCkiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dCgpIj54bWxUZXh0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+eG1sVGV4dDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9InR5cGUiPjwhLS0gLS0+PC9BPjxIMz4KLXR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPnR5cGU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxFTlRJVFkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmIxYjMzLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5MjcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0NzowMCBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbEVycm9yIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEVycm9yLFhtbEVycm9yIGNsYXNzIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxFcnJvciAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbEVycm9yLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sRXJyb3I8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxFcnJvcjwvQj4KLTwvUFJFPgotPERMPgotPERUPjxCPkFsbCBJbXBsZW1lbnRlZCBJbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIj5TZXJpYWxpemFibGU8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGNsYXNzIDxCPlhtbEVycm9yPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48RFQ+aW1wbGVtZW50cyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9TZXJpYWxpemFibGUuaHRtbCI+U2VyaWFsaXphYmxlPC9BPjwvREw+Ci0KLTxQPgotUmVwcmVzZW50cyBhIG1lc3NhZ2UgYXQgYSBzcGVjaWZpYyBYTUwgbG9jYXRpb24uCi0gPHA+Ci0gVGhlIG1lc3NhZ2UgY2FuIGJlIGFuIGVycm9yLCB3YXJuaW5nLCBvciBzaW1wbGUgaW5mb3JtYXRpb24sIGFuZAotIGl0IG1heSBvcHRpb25hbGx5IGJlIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIGxvY2F0aW9uIGluCi0gYW4gWE1MIGRvY3VtZW50LiAgVGhlIGNsYXNzIGluY2x1ZGVzIG1ldGhvZHMgZm9yIGV4dHJhY3RpbmcKLSB0aGUgbG9jYXRpb24gYXMgYSBsaW5lIG51bWJlciwgWG1sQ3Vyc29yLCBvciBYbWxPYmplY3QsIGFzCi0gd2VsbCBhcyBmb3Igb2J0YWluaW5nIGFuZCBtZXNzYWdlIGFuZCBzZXZlcml0eSBvZiB0aGUKLSBlcnJvci4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldEVycm9yTGlzdGVuZXIoamF2YS51dGlsLkNvbGxlY3Rpb24pIj48Q09ERT5YbWxPcHRpb25zLnNldEVycm9yTGlzdGVuZXIoamF2YS51dGlsLkNvbGxlY3Rpb24pPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+PENPREU+WG1sRXhjZXB0aW9uPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vc2VyaWFsaXplZC1mb3JtLmh0bWwiIFRBUkdFVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxFcnJvciI+U2VyaWFsaXplZCBGb3JtPC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjU0VWRVJJVFlfRVJST1IiPlNFVkVSSVRZX0VSUk9SPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0FuIGVycm9yLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI1NFVkVSSVRZX0lORk8iPlNFVkVSSVRZX0lORk88L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QW4gaW5mb3JtYXRpb25hbCBtZXNzYWdlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI1NFVkVSSVRZX1dBUk5JTkciPlNFVkVSSVRZX1dBUk5JTkc8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSB3YXJuaW5nLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI1htbEVycm9yKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXJyb3IpIj5YbWxFcnJvcjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+WG1sRXJyb3I8L0E+Jm5ic3A7c3JjKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29weSBjb25zdHJ1Y3Rvci48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPlhtbEVycm9yPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjZm9yQ3Vyc29yKGphdmEubGFuZy5TdHJpbmcsIGludCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IpIj5mb3JDdXJzb3I8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bWVzc2FnZSwKLSAgICAgICAgICBpbnQmbmJzcDtzZXZlcml0eSwKLSAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Jm5ic3A7Y3Vyc29yKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhbiBYbWxFcnJvciBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UsIHdpdGggdGhlIGdpdmVuIHNldmVyaXR5LCBsb2NhdGVkIGF0IHRoZSBYbWxDdXJzb3IuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+WG1sRXJyb3I8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCNmb3JDdXJzb3IoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IpIj5mb3JDdXJzb3I8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bWVzc2FnZSwKLSAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj5YbWxDdXJzb3I8L0E+Jm5ic3A7Y3Vyc29yKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhbiBYbWxFcnJvciBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UsIGxvY2F0ZWQgYXQgdGhlIFhtbEN1cnNvciwgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjU0VWRVJJVFlfRVJST1IiPjxDT0RFPlNFVkVSSVRZX0VSUk9SPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+WG1sRXJyb3I8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCNmb3JMb2NhdGlvbihqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGphdmEubGFuZy5TdHJpbmcsIGludCwgaW50LCBpbnQpIj5mb3JMb2NhdGlvbjwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDttZXNzYWdlLAotICAgICAgICAgICAgaW50Jm5ic3A7c2V2ZXJpdHksCi0gICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7c291cmNlTmFtZSwKLSAgICAgICAgICAgIGludCZuYnNwO2xpbmUsCi0gICAgICAgICAgICBpbnQmbmJzcDtjb2x1bW4sCi0gICAgICAgICAgICBpbnQmbmJzcDtvZmZzZXQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGFuIFhtbEVycm9yIGZvciB0aGUgZ2l2ZW4gbWVzc2FnZSwgd2l0aCB0aGUgZ2l2ZW4gc2V2ZXJpdHksIGxvY2F0ZWQgYXQgYSBzcGVjaWZpYyBwb2ludCBpbiB0aGUgZ2l2ZW4gZmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI2ZvckxvY2F0aW9uKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcsIGludCwgaW50LCBpbnQpIj5mb3JMb2NhdGlvbjwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDttZXNzYWdlLAotICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3NvdXJjZU5hbWUsCi0gICAgICAgICAgICBpbnQmbmJzcDtsaW5lLAotICAgICAgICAgICAgaW50Jm5ic3A7Y29sdW1uLAotICAgICAgICAgICAgaW50Jm5ic3A7b2Zmc2V0KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhbiBYbWxFcnJvciBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UsIGxvY2F0ZWQgYXQgYSBzcGVjaWZpYyBwb2ludCBpbiB0aGUgZ2l2ZW4gZmlsZSBhbmQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI1NFVkVSSVRZX0VSUk9SIj48Q09ERT5TRVZFUklUWV9FUlJPUjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPlhtbEVycm9yPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjZm9yTG9jYXRpb25BbmRDdXJzb3IoamF2YS5sYW5nLlN0cmluZywgaW50LCBqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGludCwgaW50LCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcikiPmZvckxvY2F0aW9uQW5kQ3Vyc29yPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtzZXZlcml0eSwKLSAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzb3VyY2VOYW1lLAotICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7bGluZSwKLSAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2NvbHVtbiwKLSAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO29mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4mbmJzcDtjdXJzb3IpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGFuIFhtbEVycm9yIGZvciB0aGUgZ2l2ZW4gbWVzc2FnZSwgd2l0aCB0aGUgZ2l2ZW4gc2V2ZXJpdHksIGxvY2F0ZWQgYXQgdGhlIGdpdmVuIHBoeXNjaWFsIGxvY2F0aW9uIGFuZCBYbWxDdXJzb3IuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnByb3RlY3RlZCBzdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCNmb3JtYXR0ZWRGaWxlTmFtZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLm5ldC5VUkkpIj5mb3JtYXR0ZWRGaWxlTmFtZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtyYXdTdHJpbmcsCi0gICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJJLmh0bWwiPlVSSTwvQT4mbmJzcDtiYXNlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJpZXMgdG8gcHJvZHVjZSBhIG5pY2VseSBmb3JtYXR0ZWQgZmlsZW5hbWUgZnJvbSB0aGUgZ2l2ZW4gc3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPlhtbEVycm9yPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjZm9yTWVzc2FnZShqYXZhLmxhbmcuU3RyaW5nKSI+Zm9yTWVzc2FnZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDttZXNzYWdlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhbiBYbWxFcnJvciBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UsIHdpdGggbm8gbG9jYXRpb24gYW5kIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCNTRVZFUklUWV9FUlJPUiI+PENPREU+U0VWRVJJVFlfRVJST1I8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI2Zvck1lc3NhZ2UoamF2YS5sYW5nLlN0cmluZywgaW50KSI+Zm9yTWVzc2FnZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDttZXNzYWdlLAotICAgICAgICAgICBpbnQmbmJzcDtzZXZlcml0eSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYW4gWG1sRXJyb3IgZm9yIHRoZSBnaXZlbiBtZXNzYWdlLCB3aXRoIG5vIGxvY2F0aW9uIGFuZCB0aGUgZ2l2ZW4gc2V2ZXJpdHkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+WG1sRXJyb3I8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCNmb3JPYmplY3QoamF2YS5sYW5nLlN0cmluZywgaW50LCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPmZvck9iamVjdDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDttZXNzYWdlLAotICAgICAgICAgIGludCZuYnNwO3NldmVyaXR5LAotICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4mbmJzcDt4b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhbiBYbWxFcnJvciBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UsIHdpdGggdGhlIGdpdmVuIHNldmVyaXR5LCBsb2NhdGVkIGF0IHRoZSBYbWxPYmplY3QuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+WG1sRXJyb3I8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCNmb3JPYmplY3QoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5mb3JPYmplY3Q8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bWVzc2FnZSwKLSAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+Jm5ic3A7eG9iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYW4gWG1sRXJyb3IgZm9yIHRoZSBnaXZlbiBtZXNzYWdlLCBsb2NhdGVkIGF0IHRoZSBYbWxPYmplY3QsIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI1NFVkVSSVRZX0VSUk9SIj48Q09ERT5TRVZFUklUWV9FUlJPUjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPlhtbEVycm9yPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjZm9yU291cmNlKGphdmEubGFuZy5TdHJpbmcsIGludCwgamF2YS5sYW5nLlN0cmluZykiPmZvclNvdXJjZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDttZXNzYWdlLAotICAgICAgICAgIGludCZuYnNwO3NldmVyaXR5LAotICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzb3VyY2VOYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhbiBYbWxFcnJvciBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UsIHdpdGggdGhlIGdpdmVuIHNldmVyaXR5LCBsb2NhdGVkIGluIHRoZSBnaXZlbiBmaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPlhtbEVycm9yPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjZm9yU291cmNlKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj5mb3JTb3VyY2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bWVzc2FnZSwKLSAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7c291cmNlTmFtZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYW4gWG1sRXJyb3IgZm9yIHRoZSBnaXZlbiBtZXNzYWdlLCBsb2NhdGVkIGluIHRoZSBnaXZlbiBmaWxlIGFuZCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjU0VWRVJJVFlfRVJST1IiPjxDT0RFPlNFVkVSSVRZX0VSUk9SPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjZ2V0Q29sdW1uKCkiPmdldENvbHVtbjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGNvbHVtbiBudW1iZXIgb2YgdGhlIGVycm9yLCBpZiBhdmFpbGFibGUsIC0xIGlmIG5vdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjZ2V0Q3Vyc29yTG9jYXRpb24oKSI+Z2V0Q3Vyc29yTG9jYXRpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbG9jYXRpb24gb2YgdGhlIGVycm9yIGFzIGFuIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPjxDT0RFPlhtbEN1cnNvcjwvQ09ERT48L0E+LCBudWxsIGlmCi0gbm90IGF2YWlsYWJsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCNnZXRMaW5lKCkiPmdldExpbmU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgZXJyb3IsIGlmIGF2YWlsYWJsZSwgLTEgaWYgbm90LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCNnZXRMb2NhdGlvbihqYXZhLmxhbmcuT2JqZWN0KSI+Z2V0TG9jYXRpb248L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7dHlwZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBsb2NhdGlvbiBvYmplY3Qgb2YgdGhlIGdpdmVuIHR5cGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI2dldE1lc3NhZ2UoKSI+Z2V0TWVzc2FnZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGVycm9yIG1lc3NhZ2Ugd2l0aG91dCBsb2NhdGlvbiBpbmZvcm1hdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjZ2V0T2JqZWN0TG9jYXRpb24oKSI+Z2V0T2JqZWN0TG9jYXRpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbG9jYXRpb24gb2YgdGhlIGVycm9yIGFzIGFuIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPjxDT0RFPlhtbE9iamVjdDwvQ09ERT48L0E+LCBudWxsIGlmCi0gbm90IGF2YWlsYWJsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCNnZXRPZmZzZXQoKSI+Z2V0T2Zmc2V0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgZmlsZSBjaGFyYWN0ZXIgb2Zmc2V0IG9mIHRoZSBlcnJvciwgaWYgYXZhaWxhYmxlLCAtMSBpZiBub3QuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjZ2V0U2V2ZXJpdHkoKSI+Z2V0U2V2ZXJpdHk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBzZXZlcml0eS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjZ2V0U291cmNlTmFtZSgpIj5nZXRTb3VyY2VOYW1lPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgVVJMIChvciBvdGhlciBuYW1lKSBvZiB0aGUgZmlsZSB3aXRoIHRoZSBlcnJvciwgaWYgYXZhaWxhYmxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1Byb2R1Y2VzIGEgc3RhbmRhcmQgc3RyaW5nIGZvciB0aGUgZXJyb3IgbWVzc2FnZSwgY29tcGxldGUgd2l0aAotIGZpbGVuYW1lIGFuZCBsb2NhdGlvbiBvZmZzZXRzIGlmIGF2YWlsYWJsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjdG9TdHJpbmcoamF2YS5uZXQuVVJJKSI+dG9TdHJpbmc8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJJLmh0bWwiPlVSSTwvQT4mbmJzcDtiYXNlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UHJvZHVjZXMgYSBzdGFuZGFyZCBzdHJpbmcgd2l0aCB0aGUgZXJyb3IgbWVzc2FnZS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNjbG9uZSgpIj5jbG9uZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj5lcXVhbHM8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2ZpbmFsaXplKCkiPmZpbmFsaXplPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNnZXRDbGFzcygpIj5nZXRDbGFzczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjaGFzaENvZGUoKSI+aGFzaENvZGU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeSgpIj5ub3RpZnk8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeUFsbCgpIj5ub3RpZnlBbGw8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iU0VWRVJJVFlfRVJST1IiPjwhLS0gLS0+PC9BPjxIMz4KLVNFVkVSSVRZX0VSUk9SPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5TRVZFUklUWV9FUlJPUjwvQj48L1BSRT4KLTxETD4KLTxERD5BbiBlcnJvci4gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCNnZXRTZXZlcml0eSgpIj48Q09ERT5nZXRTZXZlcml0eSgpPC9DT0RFPjwvQT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXJyb3IuU0VWRVJJVFlfRVJST1IiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU0VWRVJJVFlfV0FSTklORyI+PCEtLSAtLT48L0E+PEgzPgotU0VWRVJJVFlfV0FSTklORzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+U0VWRVJJVFlfV0FSTklORzwvQj48L1BSRT4KLTxETD4KLTxERD5BIHdhcm5pbmcuIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjZ2V0U2V2ZXJpdHkoKSI+PENPREU+Z2V0U2V2ZXJpdHkoKTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEVycm9yLlNFVkVSSVRZX1dBUk5JTkciPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU0VWRVJJVFlfSU5GTyI+PCEtLSAtLT48L0E+PEgzPgotU0VWRVJJVFlfSU5GTzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgPEI+U0VWRVJJVFlfSU5GTzwvQj48L1BSRT4KLTxETD4KLTxERD5BbiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UuIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjZ2V0U2V2ZXJpdHkoKSI+PENPREU+Z2V0U2V2ZXJpdHkoKTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEVycm9yLlNFVkVSSVRZX0lORk8iPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9IlhtbEVycm9yKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXJyb3IpIj48IS0tIC0tPjwvQT48SDM+Ci1YbWxFcnJvcjwvSDM+Ci08UFJFPgotcHVibGljIDxCPlhtbEVycm9yPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPlhtbEVycm9yPC9BPiZuYnNwO3NyYyk8L1BSRT4KLTxETD4KLTxERD5Db3B5IGNvbnN0cnVjdG9yLgotPFA+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnNyYzwvQ09ERT4gLSBUaGUgb3JpZ2luYWwgWG1sRXJyb3IgdG8gY29weS48L0RMPgotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJmb3JNZXNzYWdlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1mb3JNZXNzYWdlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+WG1sRXJyb3I8L0E+IDxCPmZvck1lc3NhZ2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDttZXNzYWdlKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYW4gWG1sRXJyb3IgZm9yIHRoZSBnaXZlbiBtZXNzYWdlLCB3aXRoIG5vIGxvY2F0aW9uIGFuZCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjU0VWRVJJVFlfRVJST1IiPjxDT0RFPlNFVkVSSVRZX0VSUk9SPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm1lc3NhZ2U8L0NPREU+IC0gdGhlIGVycm9yIG1lc3NhZ2U8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImZvck1lc3NhZ2UoamF2YS5sYW5nLlN0cmluZywgaW50KSI+PCEtLSAtLT48L0E+PEgzPgotZm9yTWVzc2FnZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPlhtbEVycm9yPC9BPiA8Qj5mb3JNZXNzYWdlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtzZXZlcml0eSk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGFuIFhtbEVycm9yIGZvciB0aGUgZ2l2ZW4gbWVzc2FnZSwgd2l0aCBubyBsb2NhdGlvbiBhbmQgdGhlIGdpdmVuIHNldmVyaXR5LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5tZXNzYWdlPC9DT0RFPiAtIHRoZSBlcnJvciBtZXNzYWdlPEREPjxDT0RFPnNldmVyaXR5PC9DT0RFPiAtIHRoZSBzZXZlcml0eSAoPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI1NFVkVSSVRZX0VSUk9SIj48Q09ERT5TRVZFUklUWV9FUlJPUjwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjU0VWRVJJVFlfV0FSTklORyI+PENPREU+U0VWRVJJVFlfV0FSTklORzwvQ09ERT48L0E+LCBvciA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjU0VWRVJJVFlfSU5GTyI+PENPREU+U0VWRVJJVFlfSU5GTzwvQ09ERT48L0E+KTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZm9yU291cmNlKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1mb3JTb3VyY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT4gPEI+Zm9yU291cmNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzb3VyY2VOYW1lKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYW4gWG1sRXJyb3IgZm9yIHRoZSBnaXZlbiBtZXNzYWdlLCBsb2NhdGVkIGluIHRoZSBnaXZlbiBmaWxlIGFuZCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjU0VWRVJJVFlfRVJST1IiPjxDT0RFPlNFVkVSSVRZX0VSUk9SPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm1lc3NhZ2U8L0NPREU+IC0gdGhlIGVycm9yIG1lc3NhZ2U8REQ+PENPREU+c291cmNlTmFtZTwvQ09ERT4gLSB0aGUgVVJMIG9yIG90aGVyIG5hbWUgZm9yIHRoZSBmaWxlPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJmb3JTb3VyY2UoamF2YS5sYW5nLlN0cmluZywgaW50LCBqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotZm9yU291cmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+WG1sRXJyb3I8L0E+IDxCPmZvclNvdXJjZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtzZXZlcml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzb3VyY2VOYW1lKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYW4gWG1sRXJyb3IgZm9yIHRoZSBnaXZlbiBtZXNzYWdlLCB3aXRoIHRoZSBnaXZlbiBzZXZlcml0eSwgbG9jYXRlZCBpbiB0aGUgZ2l2ZW4gZmlsZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bWVzc2FnZTwvQ09ERT4gLSB0aGUgZXJyb3IgbWVzc2FnZTxERD48Q09ERT5zZXZlcml0eTwvQ09ERT4gLSB0aGUgc2V2ZXJpdHkgKDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCNTRVZFUklUWV9FUlJPUiI+PENPREU+U0VWRVJJVFlfRVJST1I8L0NPREU+PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI1NFVkVSSVRZX1dBUk5JTkciPjxDT0RFPlNFVkVSSVRZX1dBUk5JTkc8L0NPREU+PC9BPiwgb3IgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI1NFVkVSSVRZX0lORk8iPjxDT0RFPlNFVkVSSVRZX0lORk88L0NPREU+PC9BPik8REQ+PENPREU+c291cmNlTmFtZTwvQ09ERT4gLSB0aGUgVVJMIG9yIG90aGVyIG5hbWUgZm9yIHRoZSBmaWxlPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJmb3JMb2NhdGlvbihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGludCwgaW50KSI+PCEtLSAtLT48L0E+PEgzPgotZm9yTG9jYXRpb248L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT4gPEI+Zm9yTG9jYXRpb248L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDttZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7c291cmNlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7bGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7Y29sdW1uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtvZmZzZXQpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhbiBYbWxFcnJvciBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UsIGxvY2F0ZWQgYXQgYSBzcGVjaWZpYyBwb2ludCBpbiB0aGUgZ2l2ZW4gZmlsZSBhbmQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI1NFVkVSSVRZX0VSUk9SIj48Q09ERT5TRVZFUklUWV9FUlJPUjwvQ09ERT48L0E+LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5tZXNzYWdlPC9DT0RFPiAtIHRoZSBlcnJvciBtZXNzYWdlPEREPjxDT0RFPnNvdXJjZU5hbWU8L0NPREU+IC0gdGhlIFVSTCBvciBvdGhlciBuYW1lIGZvciB0aGUgZmlsZTxERD48Q09ERT5saW5lPC9DT0RFPiAtIHRoZSAxLWJhc2VkIGxpbmUgbnVtYmVyLCBvciAtMSBpZiBub3Qga25vd248REQ+PENPREU+Y29sdW1uPC9DT0RFPiAtIHRoZSAxLWJhc2VkIGNvbHVtbiBudW1iZXIsIG9yIC0xIGlmIG5vdCBrbm93bjxERD48Q09ERT5vZmZzZXQ8L0NPREU+IC0gdGhlIDAtYmFzZSBmaWxlIGNoYXJhY3RlciBvZmZzZXQsIG9yIC0xIGlmIG5vdCBrbm93bjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZm9yTG9jYXRpb24oamF2YS5sYW5nLlN0cmluZywgaW50LCBqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIGludCwgaW50KSI+PCEtLSAtLT48L0E+PEgzPgotZm9yTG9jYXRpb248L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT4gPEI+Zm9yTG9jYXRpb248L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDttZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtzZXZlcml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3NvdXJjZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2xpbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2NvbHVtbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7b2Zmc2V0KTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYW4gWG1sRXJyb3IgZm9yIHRoZSBnaXZlbiBtZXNzYWdlLCB3aXRoIHRoZSBnaXZlbiBzZXZlcml0eSwgbG9jYXRlZCBhdCBhIHNwZWNpZmljIHBvaW50IGluIHRoZSBnaXZlbiBmaWxlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5tZXNzYWdlPC9DT0RFPiAtIHRoZSBlcnJvciBtZXNzYWdlPEREPjxDT0RFPnNldmVyaXR5PC9DT0RFPiAtIHRoZSBzZXZlcml0eSAoPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI1NFVkVSSVRZX0VSUk9SIj48Q09ERT5TRVZFUklUWV9FUlJPUjwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjU0VWRVJJVFlfV0FSTklORyI+PENPREU+U0VWRVJJVFlfV0FSTklORzwvQ09ERT48L0E+LCBvciA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjU0VWRVJJVFlfSU5GTyI+PENPREU+U0VWRVJJVFlfSU5GTzwvQ09ERT48L0E+KTxERD48Q09ERT5zb3VyY2VOYW1lPC9DT0RFPiAtIHRoZSBVUkwgb3Igb3RoZXIgbmFtZSBmb3IgdGhlIGZpbGU8REQ+PENPREU+bGluZTwvQ09ERT4gLSB0aGUgMS1iYXNlZCBsaW5lIG51bWJlciwgb3IgLTEgaWYgbm90IGtub3duPEREPjxDT0RFPmNvbHVtbjwvQ09ERT4gLSB0aGUgMS1iYXNlZCBjb2x1bW4gbnVtYmVyLCBvciAtMSBpZiBub3Qga25vd248REQ+PENPREU+b2Zmc2V0PC9DT0RFPiAtIHRoZSAwLWJhc2UgZmlsZSBjaGFyYWN0ZXIgb2Zmc2V0LCBvciAtMSBpZiBub3Qga25vd248L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImZvckxvY2F0aW9uQW5kQ3Vyc29yKGphdmEubGFuZy5TdHJpbmcsIGludCwgamF2YS5sYW5nLlN0cmluZywgaW50LCBpbnQsIGludCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IpIj48IS0tIC0tPjwvQT48SDM+Ci1mb3JMb2NhdGlvbkFuZEN1cnNvcjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPlhtbEVycm9yPC9BPiA8Qj5mb3JMb2NhdGlvbkFuZEN1cnNvcjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO3NldmVyaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7c291cmNlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7bGluZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7Y29sdW1uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4mbmJzcDtjdXJzb3IpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhbiBYbWxFcnJvciBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UsIHdpdGggdGhlIGdpdmVuIHNldmVyaXR5LCBsb2NhdGVkIGF0IHRoZSBnaXZlbiBwaHlzY2lhbCBsb2NhdGlvbiBhbmQgWG1sQ3Vyc29yLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5tZXNzYWdlPC9DT0RFPiAtIHRoZSBlcnJvciBtZXNzYWdlPEREPjxDT0RFPnNldmVyaXR5PC9DT0RFPiAtIHRoZSBzZXZlcml0eSAoPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI1NFVkVSSVRZX0VSUk9SIj48Q09ERT5TRVZFUklUWV9FUlJPUjwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjU0VWRVJJVFlfV0FSTklORyI+PENPREU+U0VWRVJJVFlfV0FSTklORzwvQ09ERT48L0E+LCBvciA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjU0VWRVJJVFlfSU5GTyI+PENPREU+U0VWRVJJVFlfSU5GTzwvQ09ERT48L0E+KTxERD48Q09ERT5zb3VyY2VOYW1lPC9DT0RFPiAtIHRoZSBVUkwgb3Igb3RoZXIgbmFtZSBmb3IgdGhlIGZpbGU8REQ+PENPREU+bGluZTwvQ09ERT4gLSB0aGUgMS1iYXNlZCBsaW5lIG51bWJlciwgb3IgLTEgaWYgbm90IGtub3duPEREPjxDT0RFPmNvbHVtbjwvQ09ERT4gLSB0aGUgMS1iYXNlZCBjb2x1bW4gbnVtYmVyLCBvciAtMSBpZiBub3Qga25vd248REQ+PENPREU+b2Zmc2V0PC9DT0RFPiAtIHRoZSAwLWJhc2UgZmlsZSBjaGFyYWN0ZXIgb2Zmc2V0LCBvciAtMSBpZiBub3Qga25vd248REQ+PENPREU+Y3Vyc29yPC9DT0RFPiAtIHRoZSBYbWxDdXJzb3IgcmVwcmVzZW50aW5nIHRoZSBsb2NhdGlvbiBvZiB0aGUgZXJyb3I8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImZvck9iamVjdChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLWZvck9iamVjdDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPlhtbEVycm9yPC9BPiA8Qj5mb3JPYmplY3Q8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDttZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiZuYnNwO3hvYmopPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhbiBYbWxFcnJvciBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UsIGxvY2F0ZWQgYXQgdGhlIFhtbE9iamVjdCwgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjU0VWRVJJVFlfRVJST1IiPjxDT0RFPlNFVkVSSVRZX0VSUk9SPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm1lc3NhZ2U8L0NPREU+IC0gdGhlIGVycm9yIG1lc3NhZ2U8REQ+PENPREU+eG9iajwvQ09ERT4gLSB0aGUgWG1sT2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbG9jYXRpb24gb2YgdGhlIGVycm9yPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJmb3JPYmplY3QoamF2YS5sYW5nLlN0cmluZywgaW50LCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLWZvck9iamVjdDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPlhtbEVycm9yPC9BPiA8Qj5mb3JPYmplY3Q8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDttZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Jm5ic3A7c2V2ZXJpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+Jm5ic3A7eG9iaik8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGFuIFhtbEVycm9yIGZvciB0aGUgZ2l2ZW4gbWVzc2FnZSwgd2l0aCB0aGUgZ2l2ZW4gc2V2ZXJpdHksIGxvY2F0ZWQgYXQgdGhlIFhtbE9iamVjdC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bWVzc2FnZTwvQ09ERT4gLSB0aGUgZXJyb3IgbWVzc2FnZTxERD48Q09ERT5zZXZlcml0eTwvQ09ERT4gLSB0aGUgc2V2ZXJpdHkgKDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCNTRVZFUklUWV9FUlJPUiI+PENPREU+U0VWRVJJVFlfRVJST1I8L0NPREU+PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI1NFVkVSSVRZX1dBUk5JTkciPjxDT0RFPlNFVkVSSVRZX1dBUk5JTkc8L0NPREU+PC9BPiwgb3IgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI1NFVkVSSVRZX0lORk8iPjxDT0RFPlNFVkVSSVRZX0lORk88L0NPREU+PC9BPik8REQ+PENPREU+eG9iajwvQ09ERT4gLSB0aGUgWG1sT2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbG9jYXRpb24gb2YgdGhlIGVycm9yPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJmb3JDdXJzb3IoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IpIj48IS0tIC0tPjwvQT48SDM+Ci1mb3JDdXJzb3I8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT4gPEI+Zm9yQ3Vyc29yPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4mbmJzcDtjdXJzb3IpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhbiBYbWxFcnJvciBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UsIGxvY2F0ZWQgYXQgdGhlIFhtbEN1cnNvciwgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjU0VWRVJJVFlfRVJST1IiPjxDT0RFPlNFVkVSSVRZX0VSUk9SPC9DT0RFPjwvQT4uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm1lc3NhZ2U8L0NPREU+IC0gdGhlIGVycm9yIG1lc3NhZ2U8REQ+PENPREU+Y3Vyc29yPC9DT0RFPiAtIHRoZSBYbWxDdXJzb3IgcmVwcmVzZW50aW5nIHRoZSBsb2NhdGlvbiBvZiB0aGUgZXJyb3I8L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImZvckN1cnNvcihqYXZhLmxhbmcuU3RyaW5nLCBpbnQsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yKSI+PCEtLSAtLT48L0E+PEgzPgotZm9yQ3Vyc29yPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+WG1sRXJyb3I8L0E+IDxCPmZvckN1cnNvcjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO21lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtzZXZlcml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4mbmJzcDtjdXJzb3IpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhbiBYbWxFcnJvciBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UsIHdpdGggdGhlIGdpdmVuIHNldmVyaXR5LCBsb2NhdGVkIGF0IHRoZSBYbWxDdXJzb3IuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm1lc3NhZ2U8L0NPREU+IC0gdGhlIGVycm9yIG1lc3NhZ2U8REQ+PENPREU+c2V2ZXJpdHk8L0NPREU+IC0gdGhlIHNldmVyaXR5ICg8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjU0VWRVJJVFlfRVJST1IiPjxDT0RFPlNFVkVSSVRZX0VSUk9SPC9DT0RFPjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCNTRVZFUklUWV9XQVJOSU5HIj48Q09ERT5TRVZFUklUWV9XQVJOSU5HPC9DT0RFPjwvQT4sIG9yIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCNTRVZFUklUWV9JTkZPIj48Q09ERT5TRVZFUklUWV9JTkZPPC9DT0RFPjwvQT4pPEREPjxDT0RFPmN1cnNvcjwvQ09ERT4gLSB0aGUgWG1sQ3Vyc29yIHJlcHJlc2VudGluZyB0aGUgbG9jYXRpb24gb2YgdGhlIGVycm9yPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJmb3JtYXR0ZWRGaWxlTmFtZShqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLm5ldC5VUkkpIj48IS0tIC0tPjwvQT48SDM+Ci1mb3JtYXR0ZWRGaWxlTmFtZTwvSDM+Ci08UFJFPgotcHJvdGVjdGVkIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPmZvcm1hdHRlZEZpbGVOYW1lPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cmF3U3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSSS5odG1sIj5VUkk8L0E+Jm5ic3A7YmFzZSk8L1BSRT4KLTxETD4KLTxERD5UcmllcyB0byBwcm9kdWNlIGEgbmljZWx5IGZvcm1hdHRlZCBmaWxlbmFtZSBmcm9tIHRoZSBnaXZlbiBzdHJpbmcuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFNldmVyaXR5KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFNldmVyaXR5PC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldFNldmVyaXR5PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgc2V2ZXJpdHkuICBFaXRoZXIgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sI1NFVkVSSVRZX0VSUk9SIj48Q09ERT5TRVZFUklUWV9FUlJPUjwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjU0VWRVJJVFlfV0FSTklORyI+PENPREU+U0VWRVJJVFlfV0FSTklORzwvQ09ERT48L0E+LCBvciA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwjU0VWRVJJVFlfSU5GTyI+PENPREU+U0VWRVJJVFlfSU5GTzwvQ09ERT48L0E+LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRNZXNzYWdlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE1lc3NhZ2U8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPmdldE1lc3NhZ2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlIHdpdGhvdXQgbG9jYXRpb24gaW5mb3JtYXRpb24uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldFNvdXJjZU5hbWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0U291cmNlTmFtZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+Z2V0U291cmNlTmFtZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIFVSTCAob3Igb3RoZXIgbmFtZSkgb2YgdGhlIGZpbGUgd2l0aCB0aGUgZXJyb3IsIGlmIGF2YWlsYWJsZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TGluZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRMaW5lPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldExpbmU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgZXJyb3IsIGlmIGF2YWlsYWJsZSwgLTEgaWYgbm90LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRDb2x1bW4oKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Q29sdW1uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldENvbHVtbjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGNvbHVtbiBudW1iZXIgb2YgdGhlIGVycm9yLCBpZiBhdmFpbGFibGUsIC0xIGlmIG5vdC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0T2Zmc2V0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldE9mZnNldDwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5nZXRPZmZzZXQ8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBmaWxlIGNoYXJhY3RlciBvZmZzZXQgb2YgdGhlIGVycm9yLCBpZiBhdmFpbGFibGUsIC0xIGlmIG5vdC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0TG9jYXRpb24oamF2YS5sYW5nLk9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldExvY2F0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiA8Qj5nZXRMb2NhdGlvbjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO3R5cGUpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIGxvY2F0aW9uIG9iamVjdCBvZiB0aGUgZ2l2ZW4gdHlwZS4gIFhtbEN1cnNvci5jbGFzcyBhbmQKLSBYbWxPYmplY3QuY2xhc3MgY2FuIGJlIHBhc3NlZCwgZm9yIGV4YW1wbGUuICBOdWxsIGlmIG5vdCBhdmFpbGFibGUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEN1cnNvckxvY2F0aW9uKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEN1cnNvckxvY2F0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+WG1sQ3Vyc29yPC9BPiA8Qj5nZXRDdXJzb3JMb2NhdGlvbjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBsb2NhdGlvbiBvZiB0aGUgZXJyb3IgYXMgYW4gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+PENPREU+WG1sQ3Vyc29yPC9DT0RFPjwvQT4sIG51bGwgaWYKLSBub3QgYXZhaWxhYmxlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRPYmplY3RMb2NhdGlvbigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRPYmplY3RMb2NhdGlvbjwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4gPEI+Z2V0T2JqZWN0TG9jYXRpb248L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgbG9jYXRpb24gb2YgdGhlIGVycm9yIGFzIGFuIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPjxDT0RFPlhtbE9iamVjdDwvQ09ERT48L0E+LCBudWxsIGlmCi0gbm90IGF2YWlsYWJsZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0idG9TdHJpbmcoKSI+PCEtLSAtLT48L0E+PEgzPgotdG9TdHJpbmc8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPnRvU3RyaW5nPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UHJvZHVjZXMgYSBzdGFuZGFyZCBzdHJpbmcgZm9yIHRoZSBlcnJvciBtZXNzYWdlLCBjb21wbGV0ZSB3aXRoCi0gZmlsZW5hbWUgYW5kIGxvY2F0aW9uIG9mZnNldHMgaWYgYXZhaWxhYmxlLgotPFA+Ci08REQ+PERMPgotPERUPjxCPk92ZXJyaWRlczo8L0I+PEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+PC9DT0RFPiBpbiBjbGFzcyA8Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0idG9TdHJpbmcoamF2YS5uZXQuVVJJKSI+PCEtLSAtLT48L0E+PEgzPgotdG9TdHJpbmc8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPnRvU3RyaW5nPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJJLmh0bWwiPlVSSTwvQT4mbmJzcDtiYXNlKTwvUFJFPgotPERMPgotPEREPlByb2R1Y2VzIGEgc3RhbmRhcmQgc3RyaW5nIHdpdGggdGhlIGVycm9yIG1lc3NhZ2UuICBJZiBhIG5vbi1udWxsCi0gVVJJIGlzIHN1cHBsaWVkLCBzb3VyY2UgbmFtZXMgYXJlIHJlbGF0aXZpemVkIGFnYWluc3QgdGhlIGdpdmVuCi0gVVJJLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbEVycm9yLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExOTNhNTQuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOTggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0NzowMSBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbEV4Y2VwdGlvbiAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24sWG1sRXhjZXB0aW9uIGNsYXNzIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxFeGNlcHRpb24gKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFJ1bnRpbWVFeGNlcHRpb24uaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbEV4Y2VwdGlvbi5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUNsYXNzIFhtbEV4Y2VwdGlvbjwvSDI+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+amF2YS5sYW5nLk9iamVjdDwvQT4KLSAgfAotICArLS08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sIj5qYXZhLmxhbmcuVGhyb3dhYmxlPC9BPgotICAgICAgICB8Ci0gICAgICAgICstLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvRXhjZXB0aW9uLmh0bWwiPmphdmEubGFuZy5FeGNlcHRpb248L0E+Ci0gICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb248L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5BbGwgSW1wbGVtZW50ZWQgSW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9TZXJpYWxpemFibGUuaHRtbCI+U2VyaWFsaXphYmxlPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBjbGFzcyA8Qj5YbWxFeGNlcHRpb248L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9FeGNlcHRpb24uaHRtbCI+RXhjZXB0aW9uPC9BPjwvREw+Ci0KLTxQPgotQSBjaGVja2VkIGV4Y2VwdGlvbiB0aGF0IGNhbiBiZSB0aHJvd24gd2hpbGUgcHJvY2Vzc2luZywKLSBwYXJzaW5nLCBvciBjb21waWxpbmcgWE1MLiAgTWF5IGNvbnRhaW4gYW55IG51bWJlciBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPjxDT0RFPlhtbEVycm9yPC9DT0RFPjwvQT4KLSBvYmplY3RzLgotIDxwPgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj48Q09ERT5YbWxFcnJvcjwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUnVudGltZUV4Y2VwdGlvbi5odG1sIj48Q09ERT5YbWxSdW50aW1lRXhjZXB0aW9uPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vc2VyaWFsaXplZC1mb3JtLmh0bWwiIFRBUkdFVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24iPlNlcmlhbGl6ZWQgRm9ybTwvQT48L0RMPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0iY29uc3RydWN0b3Jfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwjWG1sRXhjZXB0aW9uKGphdmEubGFuZy5TdHJpbmcpIj5YbWxFeGNlcHRpb248L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdHMgYW4gWG1sRXhjZXB0aW9uIGZyb20gYSBtZXNzYWdlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCNYbWxFeGNlcHRpb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlRocm93YWJsZSkiPlhtbEV4Y2VwdGlvbjwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDttLAotICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwiPlRocm93YWJsZTwvQT4mbmJzcDt0KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29uc3RydWN0cyBhbiBYbWxFeGNlcHRpb24gZnJvbSBhIG1lc3NhZ2UgYW5kIGEgY2F1c2UuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sI1htbEV4Y2VwdGlvbihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuVGhyb3dhYmxlLCBqYXZhLnV0aWwuQ29sbGVjdGlvbikiPlhtbEV4Y2VwdGlvbjwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDttLAotICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwiPlRocm93YWJsZTwvQT4mbmJzcDt0LAotICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ29sbGVjdGlvbi5odG1sIj5Db2xsZWN0aW9uPC9BPiZuYnNwO2Vycm9ycyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdHMgYW4gWG1sRXhjZXB0aW9uIGZyb20gYSBtZXNzYWdlLCBhIGNhdXNlLCBhbmQgYSBjb2xsZWN0aW9uIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+PENPREU+WG1sRXJyb3JzPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sI1htbEV4Y2VwdGlvbihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuVGhyb3dhYmxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEVycm9yKSI+WG1sRXhjZXB0aW9uPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO20sCi0gICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCI+VGhyb3dhYmxlPC9BPiZuYnNwO3QsCi0gICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT4mbmJzcDtlcnJvcik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdHMgYW4gWG1sRXhjZXB0aW9uIGZyb20gYSBtZXNzYWdlLCBhIGNhdXNlLCBhbmQgYW4gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj48Q09ERT5YbWxFcnJvcjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCNYbWxFeGNlcHRpb24oamF2YS5sYW5nLlRocm93YWJsZSkiPlhtbEV4Y2VwdGlvbjwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwiPlRocm93YWJsZTwvQT4mbmJzcDt0KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29uc3RydWN0cyBhbiBYbWxFeGNlcHRpb24gZnJvbSBhIGNhdXNlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCNYbWxFeGNlcHRpb24ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxFcnJvcikiPlhtbEV4Y2VwdGlvbjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+WG1sRXJyb3I8L0E+Jm5ic3A7ZXJyb3IpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb25zdHJ1Y3RzIGFuIFhtbEV4Y2VwdGlvbiBmcm9tIGFuIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+PENPREU+WG1sRXJyb3I8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwjWG1sRXhjZXB0aW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sUnVudGltZUV4Y2VwdGlvbikiPlhtbEV4Y2VwdGlvbjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUnVudGltZUV4Y2VwdGlvbi5odG1sIj5YbWxSdW50aW1lRXhjZXB0aW9uPC9BPiZuYnNwO3htbFJ1bnRpbWVFeGNlcHRpb24pPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb25zdHJ1Y3RzIGFuIFhtbEV4Y2VwdGlvbiBmcm9tIGFuIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUnVudGltZUV4Y2VwdGlvbi5odG1sIj48Q09ERT5YbWxSdW50aW1lRXhjZXB0aW9uPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCNnZXRFcnJvcigpIj5nZXRFcnJvcjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGZpcnN0IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+PENPREU+WG1sRXJyb3JzPC9DT0RFPjwvQT4gdGhhdCBjYXVzZWQgdGhlIGV4Y2VwdGlvbiwgaWYgYW55LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NvbGxlY3Rpb24uaHRtbCI+Q29sbGVjdGlvbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCNnZXRFcnJvcnMoKSI+Z2V0RXJyb3JzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPjxDT0RFPlhtbEVycm9yczwvQ09ERT48L0E+IHRoYXQgY2F1c2VkIHRoZSBleGNlcHRpb24sIGlmIGFueS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5UaHJvd2FibGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sIj5UaHJvd2FibGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCNmaWxsSW5TdGFja1RyYWNlKCkiPmZpbGxJblN0YWNrVHJhY2U8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sI2dldENhdXNlKCkiPmdldENhdXNlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCNnZXRMb2NhbGl6ZWRNZXNzYWdlKCkiPmdldExvY2FsaXplZE1lc3NhZ2U8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sI2dldE1lc3NhZ2UoKSI+Z2V0TWVzc2FnZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwjZ2V0U3RhY2tUcmFjZSgpIj5nZXRTdGFja1RyYWNlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCNpbml0Q2F1c2UoamF2YS5sYW5nLlRocm93YWJsZSkiPmluaXRDYXVzZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwjcHJpbnRTdGFja1RyYWNlKCkiPnByaW50U3RhY2tUcmFjZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwjcHJpbnRTdGFja1RyYWNlKGphdmEuaW8uUHJpbnRTdHJlYW0pIj5wcmludFN0YWNrVHJhY2U8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sI3ByaW50U3RhY2tUcmFjZShqYXZhLmlvLlByaW50V3JpdGVyKSI+cHJpbnRTdGFja1RyYWNlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCNzZXRTdGFja1RyYWNlKGphdmEubGFuZy5TdGFja1RyYWNlRWxlbWVudFtdKSI+c2V0U3RhY2tUcmFjZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iWG1sRXhjZXB0aW9uKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1YbWxFeGNlcHRpb248L0gzPgotPFBSRT4KLXB1YmxpYyA8Qj5YbWxFeGNlcHRpb248L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDttKTwvUFJFPgotPERMPgotPEREPkNvbnN0cnVjdHMgYW4gWG1sRXhjZXB0aW9uIGZyb20gYSBtZXNzYWdlLgotPFA+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJYbWxFeGNlcHRpb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlRocm93YWJsZSkiPjwhLS0gLS0+PC9BPjxIMz4KLVhtbEV4Y2VwdGlvbjwvSDM+Ci08UFJFPgotcHVibGljIDxCPlhtbEV4Y2VwdGlvbjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO20sCi0gICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwiPlRocm93YWJsZTwvQT4mbmJzcDt0KTwvUFJFPgotPERMPgotPEREPkNvbnN0cnVjdHMgYW4gWG1sRXhjZXB0aW9uIGZyb20gYSBtZXNzYWdlIGFuZCBhIGNhdXNlLgotPFA+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJYbWxFeGNlcHRpb24oamF2YS5sYW5nLlRocm93YWJsZSkiPjwhLS0gLS0+PC9BPjxIMz4KLVhtbEV4Y2VwdGlvbjwvSDM+Ci08UFJFPgotcHVibGljIDxCPlhtbEV4Y2VwdGlvbjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCI+VGhyb3dhYmxlPC9BPiZuYnNwO3QpPC9QUkU+Ci08REw+Ci08REQ+Q29uc3RydWN0cyBhbiBYbWxFeGNlcHRpb24gZnJvbSBhIGNhdXNlLgotPFA+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJYbWxFeGNlcHRpb24ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxFcnJvcikiPjwhLS0gLS0+PC9BPjxIMz4KLVhtbEV4Y2VwdGlvbjwvSDM+Ci08UFJFPgotcHVibGljIDxCPlhtbEV4Y2VwdGlvbjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT4mbmJzcDtlcnJvcik8L1BSRT4KLTxETD4KLTxERD5Db25zdHJ1Y3RzIGFuIFhtbEV4Y2VwdGlvbiBmcm9tIGFuIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+PENPREU+WG1sRXJyb3I8L0NPREU+PC9BPi4KLTxQPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iWG1sRXhjZXB0aW9uKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5UaHJvd2FibGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXJyb3IpIj48IS0tIC0tPjwvQT48SDM+Ci1YbWxFeGNlcHRpb248L0gzPgotPFBSRT4KLXB1YmxpYyA8Qj5YbWxFeGNlcHRpb248L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDttLAotICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sIj5UaHJvd2FibGU8L0E+Jm5ic3A7dCwKLSAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT4mbmJzcDtlcnJvcik8L1BSRT4KLTxETD4KLTxERD5Db25zdHJ1Y3RzIGFuIFhtbEV4Y2VwdGlvbiBmcm9tIGEgbWVzc2FnZSwgYSBjYXVzZSwgYW5kIGFuIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+PENPREU+WG1sRXJyb3I8L0NPREU+PC9BPi4KLTxQPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iWG1sRXhjZXB0aW9uKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5UaHJvd2FibGUsIGphdmEudXRpbC5Db2xsZWN0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotWG1sRXhjZXB0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+WG1sRXhjZXB0aW9uPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bSwKLSAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCI+VGhyb3dhYmxlPC9BPiZuYnNwO3QsCi0gICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ29sbGVjdGlvbi5odG1sIj5Db2xsZWN0aW9uPC9BPiZuYnNwO2Vycm9ycyk8L1BSRT4KLTxETD4KLTxERD5Db25zdHJ1Y3RzIGFuIFhtbEV4Y2VwdGlvbiBmcm9tIGEgbWVzc2FnZSwgYSBjYXVzZSwgYW5kIGEgY29sbGVjdGlvbiBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPjxDT0RFPlhtbEVycm9yczwvQ09ERT48L0E+LgotPFA+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJYbWxFeGNlcHRpb24ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxSdW50aW1lRXhjZXB0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotWG1sRXhjZXB0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+WG1sRXhjZXB0aW9uPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFJ1bnRpbWVFeGNlcHRpb24uaHRtbCI+WG1sUnVudGltZUV4Y2VwdGlvbjwvQT4mbmJzcDt4bWxSdW50aW1lRXhjZXB0aW9uKTwvUFJFPgotPERMPgotPEREPkNvbnN0cnVjdHMgYW4gWG1sRXhjZXB0aW9uIGZyb20gYW4gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxSdW50aW1lRXhjZXB0aW9uLmh0bWwiPjxDT0RFPlhtbFJ1bnRpbWVFeGNlcHRpb248L0NPREU+PC9BPi4KLTxQPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0RXJyb3IoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RXJyb3I8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPlhtbEVycm9yPC9BPiA8Qj5nZXRFcnJvcjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGZpcnN0IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+PENPREU+WG1sRXJyb3JzPC9DT0RFPjwvQT4gdGhhdCBjYXVzZWQgdGhlIGV4Y2VwdGlvbiwgaWYgYW55LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRFcnJvcnMoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RXJyb3JzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9Db2xsZWN0aW9uLmh0bWwiPkNvbGxlY3Rpb248L0E+IDxCPmdldEVycm9yczwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj48Q09ERT5YbWxFcnJvcnM8L0NPREU+PC9BPiB0aGF0IGNhdXNlZCB0aGUgZXhjZXB0aW9uLCBpZiBhbnkuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxSdW50aW1lRXhjZXB0aW9uLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxFeGNlcHRpb24uaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX2RldGFpbCI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmFjdG9yeUhvb2suVGhyZWFkQ29udGV4dC5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmFjdG9yeUhvb2suVGhyZWFkQ29udGV4dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmRmOTU5Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDI0MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ3OjAwIFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sRmFjdG9yeUhvb2suVGhyZWFkQ29udGV4dCAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxGYWN0b3J5SG9vay5UaHJlYWRDb250ZXh0LFhtbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQgY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxGYWN0b3J5SG9vay5UaHJlYWRDb250ZXh0Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sRmFjdG9yeUhvb2suVGhyZWFkQ29udGV4dDwvSDI+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+amF2YS5sYW5nLk9iamVjdDwvQT4KLSAgfAotICArLS08Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQ8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5FbmNsb3NpbmcgY2xhc3M6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLmh0bWwiPlhtbEZhY3RvcnlIb29rPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgPEI+WG1sRmFjdG9yeUhvb2suVGhyZWFkQ29udGV4dDwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9ETD4KLQotPFA+Ci1Vc2VkIHRvIG1hbmFnZSB0aGUgWG1sRmFjdG9yeUhvb2sgZm9yIHRoZSBjdXJyZW50IHRocmVhZC4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmFjdG9yeUhvb2suaHRtbCI+WG1sRmFjdG9yeUhvb2s8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmFjdG9yeUhvb2suVGhyZWFkQ29udGV4dC5odG1sI2dldEhvb2soKSI+Z2V0SG9vazwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIGN1cnJlbnQgdGhyZWFkJ3MgaG9vaywgb3IgbnVsbCBpZiBub25lLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmFjdG9yeUhvb2suVGhyZWFkQ29udGV4dC5odG1sI3NldEhvb2sob3JnLmFwYWNoZS54bWxiZWFucy5YbWxGYWN0b3J5SG9vaykiPnNldEhvb2s8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLmh0bWwiPlhtbEZhY3RvcnlIb29rPC9BPiZuYnNwO2hvb2spPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSBob29rIGZvciB0aGUgY3VycmVudCB0aHJlYWQuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjY2xvbmUoKSI+Y2xvbmU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZ2V0Q2xhc3MoKSI+Z2V0Q2xhc3M8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0SG9vaygpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRIb29rPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmFjdG9yeUhvb2suaHRtbCI+WG1sRmFjdG9yeUhvb2s8L0E+IDxCPmdldEhvb2s8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBjdXJyZW50IHRocmVhZCdzIGhvb2ssIG9yIG51bGwgaWYgbm9uZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0SG9vayhvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEZhY3RvcnlIb29rKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0SG9vazwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyB2b2lkIDxCPnNldEhvb2s8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmFjdG9yeUhvb2suaHRtbCI+WG1sRmFjdG9yeUhvb2s8L0E+Jm5ic3A7aG9vayk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSBob29rIGZvciB0aGUgY3VycmVudCB0aHJlYWQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sRmFjdG9yeUhvb2suVGhyZWFkQ29udGV4dC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGYWN0b3J5SG9vay5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmFjdG9yeUhvb2suaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkyNDNmOC4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGYWN0b3J5SG9vay5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDMxICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTcgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxGYWN0b3J5SG9vayAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxGYWN0b3J5SG9vayxYbWxGYWN0b3J5SG9vayBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbEZhY3RvcnlIb29rIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxGYWN0b3J5SG9vay5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBYbWxGYWN0b3J5SG9vazwvSDI+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGludGVyZmFjZSA8Qj5YbWxGYWN0b3J5SG9vazwvQj48L0RMPgotCi08UD4KLUEgaG9vayBmb3IgdGhlIFhNTCBCZWFuIEZhY3RvcnkgbWVjaGFuaXNtLgotIFByb3ZpZGVkIGZvciBhZHZhbmNlZCB1c2VycyB3aG8gd2lzaCB0byBwcm92aWRlIHRoZWlyIG93bgotIGltcGxlbWVudGF0aW9uIG9mIHRoZSBGYWN0b3J5LnBhcnNlIG1ldGhvZHMuIFRoaXMgaXMgdXNlZCwgZm9yIGV4YW1wbGUsCi0gdG8gZGVmZXIgcmVhZGluZyBYTUwgc3RyZWFtcyB1bnRpbCBuZWVkZWQuCi0gPHA+Ci0gVG8gdXNlIHRoZSBob29rLCBjYWxsIFhtbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQuc2V0SG9vaygpLCBwYXNzaW5nCi0geW91ciBvd24gWG1sRmFjdG9yeUhvb2sgaW1wbGVtZW50YXRpb24uICBUaGVuIGV2ZXJ5IGNhbGwgdG8gYSBGYWN0b3J5Ci0gbWV0aG9kIHdpbGwgYmUgZGVsZ2F0ZWQgdG8geW91ciBob29rLgotCi0gPHByZT4KLSBNeUhvb2sgaG9vayA9IG5ldyBNeUhvb2soKTsKLSBYbWxGYWN0b3J5SG9vay5UaHJlYWRDb250ZXh0LnNldEhvb2soaG9vayk7Ci0gLy8gdGhpcyByZXN1bHRzIGluIGEgY2FsbCB0byBob29rLnBhcnNlKC4uLikKLSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZShuZXcgRmlsZSgidGVzdC54bWwiKSk7Ci0gPC9wcmU+Ci0gCi0gSWYgdGhlIGhvb2sgbmVlZHMgdG8gdHVybiBhcm91bmQgYW5kIGludm9rZSB0aGUgYnVpbHQtaW4gcGFyc2VycywgdGhlbgotIGl0IHNob3VsZCBkbyBzbyBieSBjYWxsaW5nIHRoZSBhcHByb3ByaWF0ZSBtZXRob2Qgb24gdGhlIHBhc3NlZAotIFNjaGVtYVR5cGVMb2FkZXIuICBTaW5jZSBTY2hlbWFUeXBlTG9hZGVyLnBhcnNlKCkgbWV0aG9kcyBkZWxlZ2F0ZQotIHRvIHRoZSByZWdpc3RlcmVkIGhvb2ssIGEgaG9vayB0aGF0IHdpc2hlcyB0byBhY3R1YWxseSBpbnZva2UgdGhlCi0gZGVmYXVsdCBwYXJzZXIgd2l0aG91dCBoYXZpbmcgaXRzZWxmIGNhbGxlZCBiYWNrIGFnYWluIHNob3VsZAotIHVucmVnaXN0ZXIgaXRzZWxmIGJlZm9yZSBjYWxsaW5nIGxvYWRlci5wYXJzZSgpLCBhbmQgdGhlbiByZS1yZWdpc3RlcgotIGl0c2VsZiBhZ2FpbiBhZnRlciB0aGUgY2FsbC4KLSA8cHJlPgotIHZvaWQgcGFyc2UoU2NoZW1hVHlwZUxvYWRlciBsb2FkZXIsIC4uLikKLSB7Ci0gICAgIFhtbEZhY3RvcnlIb29rIHJlbWVtYmVyID0gWG1sRmFjdG9yeUhvb2suVGhyZWFkQ29udGV4dC5nZXRIb29rKCk7Ci0gICAgIFhtbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQuc2V0SG9vayhudWxsKTsKLSAgICAgbG9hZGVyLnBhcnNlKC4uLik7IC8vIGlzbid0IGhvb2tlZC4KLSAgICAgWG1sRmFjdG9yeUhvb2suVGhyZWFkQ29udGV4dC5zZXRIb29rKHJlbWVtYmVyKTsKLSB9Ci0gPC9wcmU+Ci08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibmVzdGVkX2NsYXNzX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TmVzdGVkIENsYXNzIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtjbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQuaHRtbCI+WG1sRmFjdG9yeUhvb2suVGhyZWFkQ29udGV4dDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtVc2VkIHRvIG1hbmFnZSB0aGUgWG1sRmFjdG9yeUhvb2sgZm9yIHRoZSBjdXJyZW50IHRocmVhZC48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGYWN0b3J5SG9vay5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnN0YW5jZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sIj5TY2hlbWFUeXBlTG9hZGVyPC9BPiZuYnNwO2xvYWRlciwKLSAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPiZuYnNwO3R5cGUsCi0gICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SG9va3MgRmFjdG9yeS5uZXdJbnN0YW5jZSBjYWxsczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNheEhhbmRsZXIuaHRtbCI+WG1sU2F4SGFuZGxlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGYWN0b3J5SG9vay5odG1sI25ld1htbFNheEhhbmRsZXIob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1htbFNheEhhbmRsZXI8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+U2NoZW1hVHlwZUxvYWRlcjwvQT4mbmJzcDtsb2FkZXIsCi0gICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPiZuYnNwO3R5cGUsCi0gICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtIb29rcyBGYWN0b3J5Lm5ld1htbFNheEhhbmRsZXIgY2FsbHM8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLmh0bWwjcGFyc2Uob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyLCBqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXI8L0E+Jm5ic3A7bG9hZGVyLAotICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7amlvaXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4mbmJzcDt0eXBlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0hvb2tzIEZhY3RvcnkucGFyc2UgY2FsbHM8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLmh0bWwjcGFyc2Uob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyLCBvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXI8L0E+Jm5ic3A7bG9hZGVyLAotICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Jm5ic3A7dHlwZSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtIb29rcyBGYWN0b3J5LnBhcnNlIGNhbGxzPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGYWN0b3J5SG9vay5odG1sI3BhcnNlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlciwgamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCI+U2NoZW1hVHlwZUxvYWRlcjwvQT4mbmJzcDtsb2FkZXIsCi0gICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO2ppb3IsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4mbmJzcDt0eXBlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0hvb2tzIEZhY3RvcnkucGFyc2UgY2FsbHM8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLmh0bWwjcGFyc2Uob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyLCBqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXI8L0E+Jm5ic3A7bG9hZGVyLAotICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3htbFRleHQsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4mbmJzcDt0eXBlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0hvb2tzIEZhY3RvcnkucGFyc2UgY2FsbHM8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLmh0bWwjcGFyc2Uob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXI8L0E+Jm5ic3A7bG9hZGVyLAotICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4mbmJzcDt0eXBlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0hvb2tzIEZhY3RvcnkucGFyc2UgY2FsbHM8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sIj5TY2hlbWFUeXBlTG9hZGVyPC9BPiZuYnNwO2xvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Jm5ic3A7dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L1BSRT4KLTxETD4KLTxERD5Ib29rcyBGYWN0b3J5Lm5ld0luc3RhbmNlIGNhbGxzCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlciwgamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sIj5TY2hlbWFUeXBlTG9hZGVyPC9BPiZuYnNwO2xvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3htbFRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPiZuYnNwO3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5Ib29rcyBGYWN0b3J5LnBhcnNlIGNhbGxzCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyLCBqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXI8L0E+Jm5ic3A7bG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtqaW9pcywKLSAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Jm5ic3A7dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+SG9va3MgRmFjdG9yeS5wYXJzZSBjYWxscwotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXIsIGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXI8L0E+Jm5ic3A7bG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO2ppb3IsCi0gICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPiZuYnNwO3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPkhvb2tzIEZhY3RvcnkucGFyc2UgY2FsbHMKLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyLCBvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXI8L0E+Jm5ic3A7bG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPiZuYnNwO3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5Ib29rcyBGYWN0b3J5LnBhcnNlIGNhbGxzCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyLCB3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXI8L0E+Jm5ic3A7bG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Jm5ic3A7dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPkhvb2tzIEZhY3RvcnkucGFyc2UgY2FsbHMKLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1htbFNheEhhbmRsZXIob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1htbFNheEhhbmRsZXI8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNheEhhbmRsZXIuaHRtbCI+WG1sU2F4SGFuZGxlcjwvQT4gPEI+bmV3WG1sU2F4SGFuZGxlcjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlTG9hZGVyLmh0bWwiPlNjaGVtYVR5cGVMb2FkZXI8L0E+Jm5ic3A7bG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4mbmJzcDt0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvUFJFPgotPERMPgotPEREPkhvb2tzIEZhY3RvcnkubmV3WG1sU2F4SGFuZGxlciBjYWxscwotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sRmFjdG9yeUhvb2suaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuRmFjdG9yeS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzBmMjcxLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LkZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY3MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ3OjAwIFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sRmxvYXQuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxGbG9hdC5GYWN0b3J5LFhtbEZsb2F0LkZhY3RvcnkgY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbEZsb2F0LkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sRmxvYXQuRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUNsYXNzIFhtbEZsb2F0LkZhY3Rvcnk8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxGbG9hdC5GYWN0b3J5PC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+RW5jbG9zaW5nIGNsYXNzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj5YbWxGbG9hdDwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIDxCPlhtbEZsb2F0LkZhY3Rvcnk8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvREw+Ci0KLTxQPgotQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+PENPREU+WG1sRmxvYXQ8L0NPREU+PC9BPi4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+WG1sRmxvYXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPm5ld0luc3RhbmNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPjxDT0RFPlhtbEZsb2F0PC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj5YbWxGbG9hdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5zdGFuY2U8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPjxDT0RFPlhtbEZsb2F0PC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPlhtbEZsb2F0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+bmV3VmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj48Q09ERT5YbWxGbG9hdDwvQ09ERT48L0E+IHZhbHVlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+WG1sRmxvYXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPjxDT0RFPlhtbEZsb2F0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+WG1sRmxvYXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPjxDT0RFPlhtbEZsb2F0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+WG1sRmxvYXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj48Q09ERT5YbWxGbG9hdDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+WG1sRmxvYXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj48Q09ERT5YbWxGbG9hdDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+WG1sRmxvYXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+PENPREU+WG1sRmxvYXQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+WG1sRmxvYXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+PENPREU+WG1sRmxvYXQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+WG1sRmxvYXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPjxDT0RFPlhtbEZsb2F0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj5YbWxGbG9hdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+PENPREU+WG1sRmxvYXQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPlhtbEZsb2F0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+PENPREU+WG1sRmxvYXQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPlhtbEZsb2F0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+PENPREU+WG1sRmxvYXQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPlhtbEZsb2F0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPjxDT0RFPlhtbEZsb2F0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj5YbWxGbG9hdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj48Q09ERT5YbWxGbG9hdDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+WG1sRmxvYXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj48Q09ERT5YbWxGbG9hdDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+WG1sRmxvYXQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj48Q09ERT5YbWxGbG9hdDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjY2xvbmUoKSI+Y2xvbmU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZ2V0Q2xhc3MoKSI+Z2V0Q2xhc3M8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj5YbWxGbG9hdDwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+PENPREU+WG1sRmxvYXQ8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPlhtbEZsb2F0PC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+PENPREU+WG1sRmxvYXQ8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj5YbWxGbG9hdDwvQT4gPEI+bmV3VmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj48Q09ERT5YbWxGbG9hdDwvQ09ERT48L0E+IHZhbHVlCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPlhtbEZsb2F0PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPjxDT0RFPlhtbEZsb2F0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzEyLjM0ZSs1Jmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj5YbWxGbG9hdDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj48Q09ERT5YbWxGbG9hdDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsxMi4zNGUrNSZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+WG1sRmxvYXQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZikKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj48Q09ERT5YbWxGbG9hdDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+WG1sRmxvYXQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj48Q09ERT5YbWxGbG9hdDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPlhtbEZsb2F0PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSkKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj48Q09ERT5YbWxGbG9hdDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj5YbWxGbG9hdDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+PENPREU+WG1sRmxvYXQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj5YbWxGbG9hdDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPjxDT0RFPlhtbEZsb2F0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj5YbWxGbG9hdDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPjxDT0RFPlhtbEZsb2F0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPlhtbEZsb2F0PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPjxDT0RFPlhtbEZsb2F0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+WG1sRmxvYXQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+PENPREU+WG1sRmxvYXQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj5YbWxGbG9hdDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+PENPREU+WG1sRmxvYXQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj5YbWxGbG9hdDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+PENPREU+WG1sRmxvYXQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+WG1sRmxvYXQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+PENPREU+WG1sRmxvYXQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj5YbWxGbG9hdDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj48Q09ERT5YbWxGbG9hdDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sRmxvYXQuRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ1OGNlOC4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzkzICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTcgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxGbG9hdCAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxGbG9hdCxYbWxGbG9hdCBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbEZsb2F0IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGYWN0b3J5SG9vay5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sRmxvYXQuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgWG1sRmxvYXQ8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBpbnRlcmZhY2UgPEI+WG1sRmxvYXQ8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9ETD4KLQotPFA+Ci1Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZmxvYXQiPnhzOmZsb2F0PC9hPiB0eXBlLgotIDxwPgotIE5hdHVyYWxseSwgY29udmVydGlibGUgdG8gYSBKYXZhIGZsb2F0LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5GYWN0b3J5Lmh0bWwiPlhtbEZsb2F0LkZhY3Rvcnk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+PENPREU+WG1sRmxvYXQ8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPlhtbE9iamVjdC5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCN0eXBlIj50eXBlPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjRVFVQUwiPkVRVUFMPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNHUkVBVEVSX1RIQU4iPkdSRUFURVJfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTEVTU19USEFOIj5MRVNTX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI05PVF9FUVVBTCI+Tk9UX0VRVUFMPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7ZmxvYXQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sI2Zsb2F0VmFsdWUoKSI+ZmxvYXRWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIGJ5IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCNnZXRGbG9hdFZhbHVlKCkiPjxDT0RFPmdldEZsb2F0VmFsdWUoKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtmbG9hdDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwjZ2V0RmxvYXRWYWx1ZSgpIj5nZXRGbG9hdFZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgZmxvYXQ8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwjc2V0KGZsb2F0KSI+c2V0PC9BPjwvQj4oZmxvYXQmbmJzcDt2KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgYnkgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sI3NldEZsb2F0VmFsdWUoZmxvYXQpIj48Q09ERT5zZXRGbG9hdFZhbHVlKGZsb2F0KTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCNzZXRGbG9hdFZhbHVlKGZsb2F0KSI+c2V0RmxvYXRWYWx1ZTwvQT48L0I+KGZsb2F0Jm5ic3A7dik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhpcyB2YWx1ZSBhcyBhIGZsb2F0PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI2dldFN0cmluZ1ZhbHVlKCkiPmdldFN0cmluZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0KGphdmEubGFuZy5TdHJpbmcpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzdHJpbmdWYWx1ZSgpIj5zdHJpbmdWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY2hhbmdlVHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj5jaGFuZ2VUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVG8oamF2YS5sYW5nLk9iamVjdCkiPmNvbXBhcmVUbzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+Y29tcGFyZVZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb3B5KCkiPmNvcHk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc0ltbXV0YWJsZSgpIj5pc0ltbXV0YWJsZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNOaWwoKSI+aXNOaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NjaGVtYVR5cGUoKSI+c2NoZW1hVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldE5pbCgpIj5zZXROaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZSgpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlRXF1YWxzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+dmFsdWVFcXVhbHM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlSGFzaENvZGUoKSI+dmFsdWVIYXNoQ29kZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFRva2VuU291cmNlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNkb2N1bWVudFByb3BlcnRpZXMoKSI+ZG9jdW1lbnRQcm9wZXJ0aWVzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI21vbml0b3IoKSI+bW9uaXRvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdDdXJzb3IoKSI+bmV3Q3Vyc29yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUoKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0oKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKCkiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKCkiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dCgpIj54bWxUZXh0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+eG1sVGV4dDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9InR5cGUiPjwhLS0gLS0+PC9BPjxIMz4KLXR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPnR5cGU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldEZsb2F0VmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RmxvYXRWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGZsb2F0IDxCPmdldEZsb2F0VmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSBmbG9hdAotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRGbG9hdFZhbHVlKGZsb2F0KSI+PCEtLSAtLT48L0E+PEgzPgotc2V0RmxvYXRWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0RmxvYXRWYWx1ZTwvQj4oZmxvYXQmbmJzcDt2KTwvUFJFPgotPERMPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIGZsb2F0Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImZsb2F0VmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZmxvYXRWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGZsb2F0IDxCPmZsb2F0VmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwjZ2V0RmxvYXRWYWx1ZSgpIj48Q09ERT5nZXRGbG9hdFZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIGZsb2F0Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldChmbG9hdCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPihmbG9hdCZuYnNwO3YpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgYnkgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sI3NldEZsb2F0VmFsdWUoZmxvYXQpIj48Q09ERT5zZXRGbG9hdFZhbHVlKGZsb2F0KTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgZmxvYXQKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxGbG9hdC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5LkZhY3RvcnkuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjE0ZDJkLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjczICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDc6MDAgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxHRGF5LkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sR0RheS5GYWN0b3J5LFhtbEdEYXkuRmFjdG9yeSBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sR0RheS5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sR0RheS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sR0RheS5GYWN0b3J5PC9IMj4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5qYXZhLmxhbmcuT2JqZWN0PC9BPgotICB8Ci0gICstLTxCPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sR0RheS5GYWN0b3J5PC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+RW5jbG9zaW5nIGNsYXNzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPlhtbEdEYXk8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyA8Qj5YbWxHRGF5LkZhY3Rvcnk8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvREw+Ci0KLTxQPgotQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj48Q09ERT5YbWxHRGF5PC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+WG1sR0RheTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5LkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj5uZXdJbnN0YW5jZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPjxDT0RFPlhtbEdEYXk8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+WG1sR0RheTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5LkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnN0YW5jZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj48Q09ERT5YbWxHRGF5PC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5LkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPlhtbEdEYXk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPm5ld1ZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj48Q09ERT5YbWxHRGF5PC9DT0RFPjwvQT4gdmFsdWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPlhtbEdEYXk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7Zik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj48Q09ERT5YbWxHRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj5YbWxHRGF5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+PENPREU+WG1sR0RheTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+WG1sR0RheTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj48Q09ERT5YbWxHRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPlhtbEdEYXk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+PENPREU+WG1sR0RheTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj5YbWxHRGF5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj48Q09ERT5YbWxHRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+WG1sR0RheTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5LkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+PENPREU+WG1sR0RheTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPlhtbEdEYXk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj48Q09ERT5YbWxHRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPlhtbEdEYXk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj48Q09ERT5YbWxHRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPlhtbEdEYXk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+PENPREU+WG1sR0RheTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj5YbWxHRGF5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPjxDT0RFPlhtbEdEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+WG1sR0RheTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+PENPREU+WG1sR0RheTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj5YbWxHRGF5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj48Q09ERT5YbWxHRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPlhtbEdEYXk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+PENPREU+WG1sR0RheTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj5YbWxHRGF5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPjxDT0RFPlhtbEdEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj5YbWxHRGF5PC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPjxDT0RFPlhtbEdEYXk8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+WG1sR0RheTwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+PENPREU+WG1sR0RheTwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+WG1sR0RheTwvQT4gPEI+bmV3VmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPjxDT0RFPlhtbEdEYXk8L0NPREU+PC9BPiB2YWx1ZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPlhtbEdEYXk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPjxDT0RFPlhtbEdEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7LS0tMTQmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+WG1sR0RheTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj48Q09ERT5YbWxHRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0Oy0tLTE0Jmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPlhtbEdEYXk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZikKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj48Q09ERT5YbWxHRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPlhtbEdEYXk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPjxDT0RFPlhtbEdEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPlhtbEdEYXk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KQotICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPjxDT0RFPlhtbEdEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj5YbWxHRGF5PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPjxDT0RFPlhtbEdEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPlhtbEdEYXk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj48Q09ERT5YbWxHRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPlhtbEdEYXk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPjxDT0RFPlhtbEdEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlcikiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj5YbWxHRGF5PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKQotICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPjxDT0RFPlhtbEdEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPlhtbEdEYXk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj48Q09ERT5YbWxHRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj5YbWxHRGF5PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKQotICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+PENPREU+WG1sR0RheTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+WG1sR0RheTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+PENPREU+WG1sR0RheTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPlhtbEdEYXk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+PENPREU+WG1sR0RheTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+WG1sR0RheTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPjxDT0RFPlhtbEdEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sR0RheS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUyZjZiMy4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1OTcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NyBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbEdEYXkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sR0RheSxYbWxHRGF5IGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sR0RheSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sR0RheS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBYbWxHRGF5PC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlhtbEdEYXk8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9ETD4KLQotPFA+Ci1Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZ0RheSI+eHM6Z0RheTwvYT4gdHlwZS4KLSBBIGdEYXkgc3BlY2lmaWVzIG9ubHkgYSBkYXktb2YtbW9udGguCi0gPHA+Ci0gQ29udmVydGlibGUgdG8gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT4sIG9yIGFuIGludC4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ2FsZW5kYXIuaHRtbCI+PENPREU+WG1sQ2FsZW5kYXI8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5LkZhY3RvcnkuaHRtbCI+WG1sR0RheS5GYWN0b3J5PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+PENPREU+WG1sR0RheTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+WG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwjdHlwZSI+dHlwZTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+RmllbGRzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0VRVUFMIj5FUVVBTDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjR1JFQVRFUl9USEFOIj5HUkVBVEVSX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0xFU1NfVEhBTiI+TEVTU19USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNOT1RfRVFVQUwiPk5PVF9FUVVBTDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sI2NhbGVuZGFyVmFsdWUoKSI+Y2FsZW5kYXJWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwjZ2V0Q2FsZW5kYXJWYWx1ZSgpIj48Q09ERT5nZXRDYWxlbmRhclZhbHVlKCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwjZ0RhdGVWYWx1ZSgpIj5nRGF0ZVZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCNnZXRHRGF0ZVZhbHVlKCkiPjxDT0RFPmdldEdEYXRlVmFsdWUoKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCNnZXRDYWxlbmRhclZhbHVlKCkiPmdldENhbGVuZGFyVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwjZ2V0R0RhdGVWYWx1ZSgpIj5nZXRHRGF0ZVZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCNnZXRJbnRWYWx1ZSgpIj5nZXRJbnRWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhpcyB2YWx1ZSBhcyBhbiBpbnQgZnJvbSAxLTMxPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCNpbnRWYWx1ZSgpIj5pbnRWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwjZ2V0SW50VmFsdWUoKSI+PENPREU+Z2V0SW50VmFsdWUoKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sI3NldChqYXZhLnV0aWwuQ2FsZW5kYXIpIj5zZXQ8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiZuYnNwO2MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sI3NldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+PENPREU+c2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwjc2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+c2V0PC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPiZuYnNwO2dkKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCNzZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpIj48Q09ERT5zZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwjc2V0KGludCkiPnNldDwvQT48L0I+KGludCZuYnNwO3YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sI3NldEludFZhbHVlKGludCkiPjxDT0RFPnNldEludFZhbHVlKGludCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCNzZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcikiPnNldENhbGVuZGFyVmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiZuYnNwO2MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCNzZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpIj5zZXRHRGF0ZVZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4mbmJzcDtnZCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPjxDT0RFPkdEYXRlU3BlY2lmaWNhdGlvbjwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwjc2V0SW50VmFsdWUoaW50KSI+c2V0SW50VmFsdWU8L0E+PC9CPihpbnQmbmJzcDt2KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGlzIHZhbHVlIGFzIGFuIGludCBmcm9tIDEtMzE8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjZ2V0U3RyaW5nVmFsdWUoKSI+Z2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXQoamF2YS5sYW5nLlN0cmluZykiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj5zZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3N0cmluZ1ZhbHVlKCkiPnN0cmluZ1ZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjaGFuZ2VUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPmNoYW5nZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KSI+Y29tcGFyZVRvPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5jb21wYXJlVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvcHkoKSI+Y29weTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzSW1tdXRhYmxlKCkiPmlzSW1tdXRhYmxlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc05pbCgpIj5pc05pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2NoZW1hVHlwZSgpIj5zY2hlbWFUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0TmlsKCkiPnNldE5pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKCkiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVFcXVhbHMob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj52YWx1ZUVxdWFsczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVIYXNoQ29kZSgpIj52YWx1ZUhhc2hDb2RlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVG9rZW5Tb3VyY2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI2RvY3VtZW50UHJvcGVydGllcygpIj5kb2N1bWVudFByb3BlcnRpZXM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbW9uaXRvcigpIj5tb25pdG9yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0N1cnNvcigpIj5uZXdDdXJzb3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZSgpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbSgpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIoKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0oKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0pIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KCkiPnhtbFRleHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj54bWxUZXh0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0idHlwZSI+PCEtLSAtLT48L0E+PEgzPgotdHlwZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+dHlwZTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0Q2FsZW5kYXJWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRDYWxlbmRhclZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj5DYWxlbmRhcjwvQT4gPEI+Z2V0Q2FsZW5kYXJWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcikiPjwhLS0gLS0+PC9BPjxIMz4KLXNldENhbGVuZGFyVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldENhbGVuZGFyVmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+Jm5ic3A7Yyk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0R0RhdGVWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRHRGF0ZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4gPEI+Z2V0R0RhdGVWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+PENPREU+R0RhdGU8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRHRGF0ZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRHRGF0ZVZhbHVlPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPiZuYnNwO2dkKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPjxDT0RFPkdEYXRlU3BlY2lmaWNhdGlvbjwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEludFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEludFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldEludFZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGFuIGludCBmcm9tIDEtMzEKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0SW50VmFsdWUoaW50KSI+PCEtLSAtLT48L0E+PEgzPgotc2V0SW50VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldEludFZhbHVlPC9CPihpbnQmbmJzcDt2KTwvUFJFPgotPERMPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhbiBpbnQgZnJvbSAxLTMxCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNhbGVuZGFyVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotY2FsZW5kYXJWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+IDxCPmNhbGVuZGFyVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sI2dldENhbGVuZGFyVmFsdWUoKSI+PENPREU+Z2V0Q2FsZW5kYXJWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0KGphdmEudXRpbC5DYWxlbmRhcikiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiZuYnNwO2MpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCNzZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcikiPjxDT0RFPnNldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdEYXRlVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ0RhdGVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+IDxCPmdEYXRlVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sI2dldEdEYXRlVmFsdWUoKSI+PENPREU+Z2V0R0RhdGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXQ8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtnZCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sI3NldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSkiPjxDT0RFPnNldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPjxDT0RFPkdEYXRlU3BlY2lmaWNhdGlvbjwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImludFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWludFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmludFZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCNnZXRJbnRWYWx1ZSgpIj48Q09ERT5nZXRJbnRWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYW4gaW50IGZyb20gMS0zMQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQoaW50KSI+PCEtLSAtLT48L0E+PEgzPgotc2V0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXQ8L0I+KGludCZuYnNwO3YpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCNzZXRJbnRWYWx1ZShpbnQpIj48Q09ERT5zZXRJbnRWYWx1ZShpbnQpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYW4gaW50IGZyb20gMS0zMQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sR0RheS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLkZhY3RvcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAzNDhmMi4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjczICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDc6MDAgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxHTW9udGguRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxHTW9udGguRmFjdG9yeSxYbWxHTW9udGguRmFjdG9yeSBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sR01vbnRoLkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbEdNb250aC5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sR01vbnRoLkZhY3Rvcnk8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxHTW9udGguRmFjdG9yeTwvQj4KLTwvUFJFPgotPERMPgotPERUPjxCPkVuY2xvc2luZyBjbGFzczo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPlhtbEdNb250aDwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIDxCPlhtbEdNb250aC5GYWN0b3J5PC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0RMPgotCi08UD4KLUEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj48Q09ERT5YbWxHTW9udGg8L0NPREU+PC9BPi4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPlhtbEdNb250aDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPm5ld0luc3RhbmNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj48Q09ERT5YbWxHTW9udGg8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj5YbWxHTW9udGg8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnN0YW5jZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPjxDT0RFPlhtbEdNb250aDwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj5YbWxHTW9udGg8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+bmV3VmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+PENPREU+WG1sR01vbnRoPC9DT0RFPjwvQT4gdmFsdWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+WG1sR01vbnRoPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7Zik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPjxDT0RFPlhtbEdNb250aDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj5YbWxHTW9udGg8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+PENPREU+WG1sR01vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPlhtbEdNb250aDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+PENPREU+WG1sR01vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+WG1sR01vbnRoPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj48Q09ERT5YbWxHTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj5YbWxHTW9udGg8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj48Q09ERT5YbWxHTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPlhtbEdNb250aDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPjxDT0RFPlhtbEdNb250aDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+WG1sR01vbnRoPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPjxDT0RFPlhtbEdNb250aDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPlhtbEdNb250aDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj48Q09ERT5YbWxHTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj5YbWxHTW9udGg8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPjxDT0RFPlhtbEdNb250aDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPlhtbEdNb250aDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+PENPREU+WG1sR01vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+WG1sR01vbnRoPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+PENPREU+WG1sR01vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+WG1sR01vbnRoPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+PENPREU+WG1sR01vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+WG1sR01vbnRoPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj48Q09ERT5YbWxHTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj5YbWxHTW9udGg8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPjxDT0RFPlhtbEdNb250aDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjY2xvbmUoKSI+Y2xvbmU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZ2V0Q2xhc3MoKSI+Z2V0Q2xhc3M8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+WG1sR01vbnRoPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+PENPREU+WG1sR01vbnRoPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+WG1sR01vbnRoPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPjxDT0RFPlhtbEdNb250aDwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj5YbWxHTW9udGg8L0E+IDxCPm5ld1ZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPjxDT0RFPlhtbEdNb250aDwvQ09ERT48L0E+IHZhbHVlCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj5YbWxHTW9udGg8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj48Q09ERT5YbWxHTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7LS0wNiZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPlhtbEdNb250aDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj48Q09ERT5YbWxHTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7LS0wNiZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPlhtbEdNb250aDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPjxDT0RFPlhtbEdNb250aDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPlhtbEdNb250aDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj48Q09ERT5YbWxHTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+WG1sR01vbnRoPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSkKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj48Q09ERT5YbWxHTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPlhtbEdNb250aDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPjxDT0RFPlhtbEdNb250aDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj5YbWxHTW9udGg8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj48Q09ERT5YbWxHTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj5YbWxHTW9udGg8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+PENPREU+WG1sR01vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj5YbWxHTW9udGg8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+PENPREU+WG1sR01vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPlhtbEdNb250aDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+PENPREU+WG1sR01vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPlhtbEdNb250aDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj48Q09ERT5YbWxHTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+WG1sR01vbnRoPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj48Q09ERT5YbWxHTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPlhtbEdNb250aDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj48Q09ERT5YbWxHTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+WG1sR01vbnRoPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj48Q09ERT5YbWxHTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5LkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxHTW9udGguRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDJmNzU5Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTk3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTcgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxHTW9udGggKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sR01vbnRoLFhtbEdNb250aCBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbEdNb250aCAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxHTW9udGguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgWG1sR01vbnRoPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlhtbEdNb250aDwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0RMPgotCi08UD4KLUNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNnTW9udGgiPnhzOmdNb250aDwvYT4gdHlwZS4KLSBBIGdNb250aCBzcGVjaWZpZXMgb25seSBhIG1vbnRoLW9mLXllYXIuCi0gPHA+Ci0gQ29udmVydGlibGUgdG8gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT4sIG9yIGFuIGludC4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ2FsZW5kYXIuaHRtbCI+PENPREU+WG1sQ2FsZW5kYXI8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sIj5YbWxHTW9udGguRmFjdG9yeTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+PENPREU+WG1sR01vbnRoPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIj5YbWxPYmplY3QuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI3R5cGUiPnR5cGU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9ImZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPkZpZWxkcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNFUVVBTCI+RVFVQUw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0dSRUFURVJfVEhBTiI+R1JFQVRFUl9USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNMRVNTX1RIQU4iPkxFU1NfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTk9UX0VRVUFMIj5OT1RfRVFVQUw8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI2NhbGVuZGFyVmFsdWUoKSI+Y2FsZW5kYXJWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCNnZXRDYWxlbmRhclZhbHVlKCkiPjxDT0RFPmdldENhbGVuZGFyVmFsdWUoKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI2dEYXRlVmFsdWUoKSI+Z0RhdGVWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCNnZXRHRGF0ZVZhbHVlKCkiPjxDT0RFPmdldEdEYXRlVmFsdWUoKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI2dldENhbGVuZGFyVmFsdWUoKSI+Z2V0Q2FsZW5kYXJWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI2dldEdEYXRlVmFsdWUoKSI+Z2V0R0RhdGVWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+PENPREU+R0RhdGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCNnZXRJbnRWYWx1ZSgpIj5nZXRJbnRWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhpcyB2YWx1ZSBhcyBhbiBpbnQgZnJvbSAxLTEyPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI2ludFZhbHVlKCkiPmludFZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI2dldEludFZhbHVlKCkiPjxDT0RFPmdldEludFZhbHVlKCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI3NldChqYXZhLnV0aWwuQ2FsZW5kYXIpIj5zZXQ8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiZuYnNwO2MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwjc2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpIj48Q09ERT5zZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcik8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlU3BlY2lmaWNhdGlvbikiPnNldDwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtnZCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCNzZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpIj48Q09ERT5zZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCNzZXQoaW50KSI+c2V0PC9BPjwvQj4oaW50Jm5ic3A7dik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCNzZXRJbnRWYWx1ZShpbnQpIj48Q09ERT5zZXRJbnRWYWx1ZShpbnQpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCNzZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcikiPnNldENhbGVuZGFyVmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiZuYnNwO2MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI3NldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSkiPnNldEdEYXRlVmFsdWU8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPiZuYnNwO2dkKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+PENPREU+R0RhdGVTcGVjaWZpY2F0aW9uPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI3NldEludFZhbHVlKGludCkiPnNldEludFZhbHVlPC9BPjwvQj4oaW50Jm5ic3A7dik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhpcyB2YWx1ZSBhcyBhbiBpbnQgZnJvbSAxLTEyPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI2dldFN0cmluZ1ZhbHVlKCkiPmdldFN0cmluZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0KGphdmEubGFuZy5TdHJpbmcpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzdHJpbmdWYWx1ZSgpIj5zdHJpbmdWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY2hhbmdlVHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj5jaGFuZ2VUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVG8oamF2YS5sYW5nLk9iamVjdCkiPmNvbXBhcmVUbzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+Y29tcGFyZVZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb3B5KCkiPmNvcHk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc0ltbXV0YWJsZSgpIj5pc0ltbXV0YWJsZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNOaWwoKSI+aXNOaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NjaGVtYVR5cGUoKSI+c2NoZW1hVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldE5pbCgpIj5zZXROaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZSgpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlRXF1YWxzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+dmFsdWVFcXVhbHM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlSGFzaENvZGUoKSI+dmFsdWVIYXNoQ29kZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFRva2VuU291cmNlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNkb2N1bWVudFByb3BlcnRpZXMoKSI+ZG9jdW1lbnRQcm9wZXJ0aWVzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI21vbml0b3IoKSI+bW9uaXRvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdDdXJzb3IoKSI+bmV3Q3Vyc29yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUoKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0oKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKCkiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKCkiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dCgpIj54bWxUZXh0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+eG1sVGV4dDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9InR5cGUiPjwhLS0gLS0+PC9BPjxIMz4KLXR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPnR5cGU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldENhbGVuZGFyVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Q2FsZW5kYXJWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+IDxCPmdldENhbGVuZGFyVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRDYWxlbmRhclZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRDYWxlbmRhclZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiZuYnNwO2MpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEdEYXRlVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0R0RhdGVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+IDxCPmdldEdEYXRlVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0R0RhdGVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0R0RhdGVWYWx1ZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4mbmJzcDtnZCk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj48Q09ERT5HRGF0ZVNwZWNpZmljYXRpb248L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRJbnRWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRJbnRWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5nZXRJbnRWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhbiBpbnQgZnJvbSAxLTEyCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEludFZhbHVlKGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEludFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRJbnRWYWx1ZTwvQj4oaW50Jm5ic3A7dik8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYW4gaW50IGZyb20gMS0xMgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjYWxlbmRhclZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNhbGVuZGFyVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiA8Qj5jYWxlbmRhclZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI2dldENhbGVuZGFyVmFsdWUoKSI+PENPREU+Z2V0Q2FsZW5kYXJWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0KGphdmEudXRpbC5DYWxlbmRhcikiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiZuYnNwO2MpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI3NldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+PENPREU+c2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ0RhdGVWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nRGF0ZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4gPEI+Z0RhdGVWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCNnZXRHRGF0ZVZhbHVlKCkiPjxDT0RFPmdldEdEYXRlVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZTwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldChvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlU3BlY2lmaWNhdGlvbikiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+Jm5ic3A7Z2QpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI3NldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSkiPjxDT0RFPnNldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPjxDT0RFPkdEYXRlU3BlY2lmaWNhdGlvbjwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImludFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWludFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmludFZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sI2dldEludFZhbHVlKCkiPjxDT0RFPmdldEludFZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhbiBpbnQgZnJvbSAxLTEyCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldChpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oaW50Jm5ic3A7dik8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwjc2V0SW50VmFsdWUoaW50KSI+PENPREU+c2V0SW50VmFsdWUoaW50KTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGFuIGludCBmcm9tIDEtMTIKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sR01vbnRoLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmZlZGFlLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NzMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0NzowMCBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbEdNb250aERheS5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEdNb250aERheS5GYWN0b3J5LFhtbEdNb250aERheS5GYWN0b3J5IGNsYXNzIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxHTW9udGhEYXkuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbEdNb250aERheS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sR01vbnRoRGF5LkZhY3Rvcnk8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxHTW9udGhEYXkuRmFjdG9yeTwvQj4KLTwvUFJFPgotPERMPgotPERUPjxCPkVuY2xvc2luZyBjbGFzczo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPlhtbEdNb250aERheTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIDxCPlhtbEdNb250aERheS5GYWN0b3J5PC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0RMPgotCi08UD4KLUEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj48Q09ERT5YbWxHTW9udGhEYXk8L0NPREU+PC9BPi4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPlhtbEdNb250aERheTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPm5ld0luc3RhbmNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj48Q09ERT5YbWxHTW9udGhEYXk8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj5YbWxHTW9udGhEYXk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnN0YW5jZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPjxDT0RFPlhtbEdNb250aERheTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj5YbWxHTW9udGhEYXk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+bmV3VmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+PENPREU+WG1sR01vbnRoRGF5PC9DT0RFPjwvQT4gdmFsdWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+WG1sR01vbnRoRGF5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7Zik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPjxDT0RFPlhtbEdNb250aERheTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj5YbWxHTW9udGhEYXk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+PENPREU+WG1sR01vbnRoRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPlhtbEdNb250aERheTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+PENPREU+WG1sR01vbnRoRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+WG1sR01vbnRoRGF5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj48Q09ERT5YbWxHTW9udGhEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj5YbWxHTW9udGhEYXk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj48Q09ERT5YbWxHTW9udGhEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPlhtbEdNb250aERheTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPjxDT0RFPlhtbEdNb250aERheTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+WG1sR01vbnRoRGF5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPjxDT0RFPlhtbEdNb250aERheTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPlhtbEdNb250aERheTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj48Q09ERT5YbWxHTW9udGhEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj5YbWxHTW9udGhEYXk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPjxDT0RFPlhtbEdNb250aERheTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPlhtbEdNb250aERheTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+PENPREU+WG1sR01vbnRoRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+WG1sR01vbnRoRGF5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+PENPREU+WG1sR01vbnRoRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+WG1sR01vbnRoRGF5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+PENPREU+WG1sR01vbnRoRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+WG1sR01vbnRoRGF5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj48Q09ERT5YbWxHTW9udGhEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj5YbWxHTW9udGhEYXk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPjxDT0RFPlhtbEdNb250aERheTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjY2xvbmUoKSI+Y2xvbmU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZ2V0Q2xhc3MoKSI+Z2V0Q2xhc3M8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+WG1sR01vbnRoRGF5PC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+PENPREU+WG1sR01vbnRoRGF5PC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+WG1sR01vbnRoRGF5PC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPjxDT0RFPlhtbEdNb250aERheTwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj5YbWxHTW9udGhEYXk8L0E+IDxCPm5ld1ZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPjxDT0RFPlhtbEdNb250aERheTwvQ09ERT48L0E+IHZhbHVlCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj5YbWxHTW9udGhEYXk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj48Q09ERT5YbWxHTW9udGhEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7LS0wNi0xNCZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPlhtbEdNb250aERheTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj48Q09ERT5YbWxHTW9udGhEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7LS0wNi0xNCZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPlhtbEdNb250aERheTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKQotICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPjxDT0RFPlhtbEdNb250aERheTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPlhtbEdNb250aERheTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj48Q09ERT5YbWxHTW9udGhEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+WG1sR01vbnRoRGF5PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj48Q09ERT5YbWxHTW9udGhEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPlhtbEdNb250aERheTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPjxDT0RFPlhtbEdNb250aERheTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj5YbWxHTW9udGhEYXk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj48Q09ERT5YbWxHTW9udGhEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj5YbWxHTW9udGhEYXk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+PENPREU+WG1sR01vbnRoRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj5YbWxHTW9udGhEYXk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+PENPREU+WG1sR01vbnRoRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPlhtbEdNb250aERheTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+PENPREU+WG1sR01vbnRoRGF5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPlhtbEdNb250aERheTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj48Q09ERT5YbWxHTW9udGhEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+WG1sR01vbnRoRGF5PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj48Q09ERT5YbWxHTW9udGhEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPlhtbEdNb250aERheTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj48Q09ERT5YbWxHTW9udGhEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+WG1sR01vbnRoRGF5PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj48Q09ERT5YbWxHTW9udGhEYXk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY0NWUwMS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ5NyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ2OjU3IFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sR01vbnRoRGF5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEdNb250aERheSxYbWxHTW9udGhEYXkgaW50ZXJmYWNlIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxHTW9udGhEYXkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbEdNb250aERheS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBYbWxHTW9udGhEYXk8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBpbnRlcmZhY2UgPEI+WG1sR01vbnRoRGF5PC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvREw+Ci0KLTxQPgotQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2dNb250aERheSI+eHM6Z01vbnRoRGF5PC9hPiB0eXBlLgotIEEgZ01vbnRoRGF5IHNwZWNpZmllcyBhIGRheSBvZiBhIHNwZWNpZmljIG1vbnRoIHdpdGhvdXQgc3BlY2lmeWluZyB0aGUgeWVhci4KLSA8cD4KLSBDb252ZXJ0aWJsZSB0byA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4gb3IgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZTwvQ09ERT48L0E+LgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sIj48Q09ERT5YbWxDYWxlbmRhcjwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+PENPREU+R0RhdGU8L0NPREU+PC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibmVzdGVkX2NsYXNzX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TmVzdGVkIENsYXNzIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtjbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwiPlhtbEdNb250aERheS5GYWN0b3J5PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj48Q09ERT5YbWxHTW9udGhEYXk8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPlhtbE9iamVjdC5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwjdHlwZSI+dHlwZTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+RmllbGRzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0VRVUFMIj5FUVVBTDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjR1JFQVRFUl9USEFOIj5HUkVBVEVSX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0xFU1NfVEhBTiI+TEVTU19USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNOT1RfRVFVQUwiPk5PVF9FUVVBTDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwjY2FsZW5kYXJWYWx1ZSgpIj5jYWxlbmRhclZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sI2dldENhbGVuZGFyVmFsdWUoKSI+PENPREU+Z2V0Q2FsZW5kYXJWYWx1ZSgpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwjZ0RhdGVWYWx1ZSgpIj5nRGF0ZVZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sI2dldEdEYXRlVmFsdWUoKSI+PENPREU+Z2V0R0RhdGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwjZ2V0Q2FsZW5kYXJWYWx1ZSgpIj5nZXRDYWxlbmRhclZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwjZ2V0R0RhdGVWYWx1ZSgpIj5nZXRHRGF0ZVZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCNzZXQoamF2YS51dGlsLkNhbGVuZGFyKSI+c2V0PC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj5DYWxlbmRhcjwvQT4mbmJzcDtjKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sI3NldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+PENPREU+c2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj5zZXQ8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+Jm5ic3A7Z2QpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwjc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKSI+PENPREU+c2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwjc2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpIj5zZXRDYWxlbmRhclZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj5DYWxlbmRhcjwvQT4mbmJzcDtjKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCNzZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpIj5zZXRHRGF0ZVZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4mbmJzcDtnZCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPjxDT0RFPkdEYXRlU3BlY2lmaWNhdGlvbjwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI2dldFN0cmluZ1ZhbHVlKCkiPmdldFN0cmluZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0KGphdmEubGFuZy5TdHJpbmcpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzdHJpbmdWYWx1ZSgpIj5zdHJpbmdWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY2hhbmdlVHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj5jaGFuZ2VUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVG8oamF2YS5sYW5nLk9iamVjdCkiPmNvbXBhcmVUbzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+Y29tcGFyZVZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb3B5KCkiPmNvcHk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc0ltbXV0YWJsZSgpIj5pc0ltbXV0YWJsZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNOaWwoKSI+aXNOaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NjaGVtYVR5cGUoKSI+c2NoZW1hVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldE5pbCgpIj5zZXROaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZSgpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlRXF1YWxzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+dmFsdWVFcXVhbHM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlSGFzaENvZGUoKSI+dmFsdWVIYXNoQ29kZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFRva2VuU291cmNlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNkb2N1bWVudFByb3BlcnRpZXMoKSI+ZG9jdW1lbnRQcm9wZXJ0aWVzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI21vbml0b3IoKSI+bW9uaXRvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdDdXJzb3IoKSI+bmV3Q3Vyc29yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUoKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0oKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKCkiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKCkiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dCgpIj54bWxUZXh0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+eG1sVGV4dDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9InR5cGUiPjwhLS0gLS0+PC9BPjxIMz4KLXR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPnR5cGU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldENhbGVuZGFyVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Q2FsZW5kYXJWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+IDxCPmdldENhbGVuZGFyVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRDYWxlbmRhclZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRDYWxlbmRhclZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiZuYnNwO2MpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEdEYXRlVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0R0RhdGVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+IDxCPmdldEdEYXRlVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0R0RhdGVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0R0RhdGVWYWx1ZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4mbmJzcDtnZCk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj48Q09ERT5HRGF0ZVNwZWNpZmljYXRpb248L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjYWxlbmRhclZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNhbGVuZGFyVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiA8Qj5jYWxlbmRhclZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sI2dldENhbGVuZGFyVmFsdWUoKSI+PENPREU+Z2V0Q2FsZW5kYXJWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0KGphdmEudXRpbC5DYWxlbmRhcikiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiZuYnNwO2MpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sI3NldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+PENPREU+c2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ0RhdGVWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nRGF0ZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4gPEI+Z0RhdGVWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCNnZXRHRGF0ZVZhbHVlKCkiPjxDT0RFPmdldEdEYXRlVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZTwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldChvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlU3BlY2lmaWNhdGlvbikiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+Jm5ic3A7Z2QpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sI3NldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSkiPjxDT0RFPnNldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPjxDT0RFPkdEYXRlU3BlY2lmaWNhdGlvbjwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxHTW9udGhEYXkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuRmFjdG9yeS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGQxNWI4Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY3MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ3OjAwIFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sR1llYXIuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxHWWVhci5GYWN0b3J5LFhtbEdZZWFyLkZhY3RvcnkgY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbEdZZWFyLkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbEdZZWFyLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBYbWxHWWVhci5GYWN0b3J5PC9IMj4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5qYXZhLmxhbmcuT2JqZWN0PC9BPgotICB8Ci0gICstLTxCPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sR1llYXIuRmFjdG9yeTwvQj4KLTwvUFJFPgotPERMPgotPERUPjxCPkVuY2xvc2luZyBjbGFzczo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+WG1sR1llYXI8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyA8Qj5YbWxHWWVhci5GYWN0b3J5PC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0RMPgotCi08UD4KLUEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPjxDT0RFPlhtbEdZZWFyPC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPlhtbEdZZWFyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj5uZXdJbnN0YW5jZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj48Q09ERT5YbWxHWWVhcjwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+WG1sR1llYXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0luc3RhbmNlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj48Q09ERT5YbWxHWWVhcjwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj5YbWxHWWVhcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPm5ld1ZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+PENPREU+WG1sR1llYXI8L0NPREU+PC9BPiB2YWx1ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPlhtbEdZZWFyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj48Q09ERT5YbWxHWWVhcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPlhtbEdZZWFyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj48Q09ERT5YbWxHWWVhcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPlhtbEdZZWFyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+PENPREU+WG1sR1llYXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPlhtbEdZZWFyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+PENPREU+WG1sR1llYXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPlhtbEdZZWFyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPjxDT0RFPlhtbEdZZWFyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPlhtbEdZZWFyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPjxDT0RFPlhtbEdZZWFyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPlhtbEdZZWFyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlcikiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj48Q09ERT5YbWxHWWVhcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+WG1sR1llYXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPjxDT0RFPlhtbEdZZWFyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj5YbWxHWWVhcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPjxDT0RFPlhtbEdZZWFyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj5YbWxHWWVhcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPjxDT0RFPlhtbEdZZWFyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj5YbWxHWWVhcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj48Q09ERT5YbWxHWWVhcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+WG1sR1llYXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+PENPREU+WG1sR1llYXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPlhtbEdZZWFyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+PENPREU+WG1sR1llYXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPlhtbEdZZWFyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+PENPREU+WG1sR1llYXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+WG1sR1llYXI8L0E+IDxCPm5ld0luc3RhbmNlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPjxDT0RFPlhtbEdZZWFyPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj5YbWxHWWVhcjwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPjxDT0RFPlhtbEdZZWFyPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+WG1sR1llYXI8L0E+IDxCPm5ld1ZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+PENPREU+WG1sR1llYXI8L0NPREU+PC9BPiB2YWx1ZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj5YbWxHWWVhcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj48Q09ERT5YbWxHWWVhcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsyMDAzJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj5YbWxHWWVhcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj48Q09ERT5YbWxHWWVhcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsyMDAzJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj5YbWxHWWVhcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPjxDT0RFPlhtbEdZZWFyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj5YbWxHWWVhcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPjxDT0RFPlhtbEdZZWFyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+WG1sR1llYXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPjxDT0RFPlhtbEdZZWFyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPlhtbEdZZWFyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj48Q09ERT5YbWxHWWVhcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPlhtbEdZZWFyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+PENPREU+WG1sR1llYXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPlhtbEdZZWFyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+PENPREU+WG1sR1llYXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlcikiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+WG1sR1llYXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+PENPREU+WG1sR1llYXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj5YbWxHWWVhcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj48Q09ERT5YbWxHWWVhcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPlhtbEdZZWFyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj48Q09ERT5YbWxHWWVhcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPlhtbEdZZWFyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj48Q09ERT5YbWxHWWVhcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj5YbWxHWWVhcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj48Q09ERT5YbWxHWWVhcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPlhtbEdZZWFyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPjxDT0RFPlhtbEdZZWFyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sR1llYXIuRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZiZGJkZS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTk3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTcgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxHWWVhciAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxHWWVhcixYbWxHWWVhciBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbEdZZWFyIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbEdZZWFyLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFhtbEdZZWFyPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlhtbEdZZWFyPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvREw+Ci0KLTxQPgotQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2dZZWFyIj54czpnWWVhcjwvYT4gdHlwZS4KLSBBIGdZZWFyIHNwZWNpZmllcyBhIEdyZWdvcmlhbiB5ZWFyIChBRCkuCi0gPHA+Ci0gQ29udmVydGlibGUgdG8gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT4sIG9yIGFuIGludC4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ2FsZW5kYXIuaHRtbCI+PENPREU+WG1sQ2FsZW5kYXI8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5GYWN0b3J5Lmh0bWwiPlhtbEdZZWFyLkZhY3Rvcnk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+PENPREU+WG1sR1llYXI8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPlhtbE9iamVjdC5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCN0eXBlIj50eXBlPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjRVFVQUwiPkVRVUFMPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNHUkVBVEVSX1RIQU4iPkdSRUFURVJfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTEVTU19USEFOIj5MRVNTX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI05PVF9FUVVBTCI+Tk9UX0VRVUFMPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj5DYWxlbmRhcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sI2NhbGVuZGFyVmFsdWUoKSI+Y2FsZW5kYXJWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sI2dldENhbGVuZGFyVmFsdWUoKSI+PENPREU+Z2V0Q2FsZW5kYXJWYWx1ZSgpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCNnRGF0ZVZhbHVlKCkiPmdEYXRlVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCNnZXRHRGF0ZVZhbHVlKCkiPjxDT0RFPmdldEdEYXRlVmFsdWUoKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwjZ2V0Q2FsZW5kYXJWYWx1ZSgpIj5nZXRDYWxlbmRhclZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCNnZXRHRGF0ZVZhbHVlKCkiPmdldEdEYXRlVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCNnZXRJbnRWYWx1ZSgpIj5nZXRJbnRWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhpcyB2YWx1ZSBhcyBhbiBpbnQgZnJvbSAxLTMxPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwjaW50VmFsdWUoKSI+aW50VmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCNnZXRJbnRWYWx1ZSgpIj48Q09ERT5nZXRJbnRWYWx1ZSgpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sI3NldChqYXZhLnV0aWwuQ2FsZW5kYXIpIj5zZXQ8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiZuYnNwO2MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCNzZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcikiPjxDT0RFPnNldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj5zZXQ8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+Jm5ic3A7Z2QpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCNzZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpIj48Q09ERT5zZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sI3NldChpbnQpIj5zZXQ8L0E+PC9CPihpbnQmbmJzcDt2KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwjc2V0SW50VmFsdWUoaW50KSI+PENPREU+c2V0SW50VmFsdWUoaW50KTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCNzZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcikiPnNldENhbGVuZGFyVmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiZuYnNwO2MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwjc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKSI+c2V0R0RhdGVWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+Jm5ic3A7Z2QpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj48Q09ERT5HRGF0ZVNwZWNpZmljYXRpb248L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCNzZXRJbnRWYWx1ZShpbnQpIj5zZXRJbnRWYWx1ZTwvQT48L0I+KGludCZuYnNwO3YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoaXMgdmFsdWUgYXMgYW4gaW50IGZyb20gMS0zMTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNnZXRTdHJpbmdWYWx1ZSgpIj5nZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldChqYXZhLmxhbmcuU3RyaW5nKSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0U3RyaW5nVmFsdWUoamF2YS5sYW5nLlN0cmluZykiPnNldFN0cmluZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc3RyaW5nVmFsdWUoKSI+c3RyaW5nVmFsdWU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NoYW5nZVR5cGUob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlKSI+Y2hhbmdlVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVRvKGphdmEubGFuZy5PYmplY3QpIj5jb21wYXJlVG88L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPmNvbXBhcmVWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29weSgpIj5jb3B5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZykiPmV4ZWNRdWVyeTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPmV4ZWNRdWVyeTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNJbW11dGFibGUoKSI+aXNJbW11dGFibGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzTmlsKCkiPmlzTmlsPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzY2hlbWFUeXBlKCkiPnNjaGVtYVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXROaWwoKSI+c2V0TmlsPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUoKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWx1ZUVxdWFscyhvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnZhbHVlRXF1YWxzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWx1ZUhhc2hDb2RlKCkiPnZhbHVlSGFzaENvZGU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxUb2tlblNvdXJjZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjZG9jdW1lbnRQcm9wZXJ0aWVzKCkiPmRvY3VtZW50UHJvcGVydGllczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNtb25pdG9yKCkiPm1vbml0b3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3Q3Vyc29yKCkiPm5ld0N1cnNvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKCkiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0lucHV0U3RyZWFtKCkiPm5ld0lucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0lucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0lucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcigpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdYTUxJbnB1dFN0cmVhbSgpIj5uZXdYTUxJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdYTUxJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdYTUxJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSkiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSkiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uV3JpdGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uV3JpdGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQoKSI+eG1sVGV4dDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnhtbFRleHQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJ0eXBlIj48IS0tIC0tPjwvQT48SDM+Ci10eXBlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPiA8Qj50eXBlPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRDYWxlbmRhclZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldENhbGVuZGFyVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiA8Qj5nZXRDYWxlbmRhclZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0Q2FsZW5kYXJWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0Q2FsZW5kYXJWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj5DYWxlbmRhcjwvQT4mbmJzcDtjKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRHRGF0ZVZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEdEYXRlVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPiA8Qj5nZXRHRGF0ZVZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZTwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEdEYXRlVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldEdEYXRlVmFsdWU8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+Jm5ic3A7Z2QpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+PENPREU+R0RhdGVTcGVjaWZpY2F0aW9uPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0SW50VmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SW50VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+Z2V0SW50VmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYW4gaW50IGZyb20gMS0zMQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRJbnRWYWx1ZShpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRJbnRWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0SW50VmFsdWU8L0I+KGludCZuYnNwO3YpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGFuIGludCBmcm9tIDEtMzEKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iY2FsZW5kYXJWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1jYWxlbmRhclZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj5DYWxlbmRhcjwvQT4gPEI+Y2FsZW5kYXJWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sI2dldENhbGVuZGFyVmFsdWUoKSI+PENPREU+Z2V0Q2FsZW5kYXJWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0KGphdmEudXRpbC5DYWxlbmRhcikiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiZuYnNwO2MpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwjc2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpIj48Q09ERT5zZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcik8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnRGF0ZVZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdEYXRlVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPiA8Qj5nRGF0ZVZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwjZ2V0R0RhdGVWYWx1ZSgpIj48Q09ERT5nZXRHRGF0ZVZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+PENPREU+R0RhdGU8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPiZuYnNwO2dkKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sI3NldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSkiPjxDT0RFPnNldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPjxDT0RFPkdEYXRlU3BlY2lmaWNhdGlvbjwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImludFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWludFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmludFZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwjZ2V0SW50VmFsdWUoKSI+PENPREU+Z2V0SW50VmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGFuIGludCBmcm9tIDEtMzEKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0KGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPihpbnQmbmJzcDt2KTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sI3NldEludFZhbHVlKGludCkiPjxDT0RFPnNldEludFZhbHVlKGludCk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhbiBpbnQgZnJvbSAxLTMxCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbEdZZWFyLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguRmFjdG9yeS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMzRlNzUuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NzMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0NzowMCBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbEdZZWFyTW9udGguRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxHWWVhck1vbnRoLkZhY3RvcnksWG1sR1llYXJNb250aC5GYWN0b3J5IGNsYXNzIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxHWWVhck1vbnRoLkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBYbWxHWWVhck1vbnRoLkZhY3Rvcnk8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxHWWVhck1vbnRoLkZhY3Rvcnk8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5FbmNsb3NpbmcgY2xhc3M6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+WG1sR1llYXJNb250aDwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIDxCPlhtbEdZZWFyTW9udGguRmFjdG9yeTwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9ETD4KLQotPFA+Ci1BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPjxDT0RFPlhtbEdZZWFyTW9udGg8L0NPREU+PC9BPi4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj5YbWxHWWVhck1vbnRoPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPm5ld0luc3RhbmNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+PENPREU+WG1sR1llYXJNb250aDwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj5YbWxHWWVhck1vbnRoPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0luc3RhbmNlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPjxDT0RFPlhtbEdZZWFyTW9udGg8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+WG1sR1llYXJNb250aDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+bmV3VmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPjxDT0RFPlhtbEdZZWFyTW9udGg8L0NPREU+PC9BPiB2YWx1ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+WG1sR1llYXJNb250aDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPjxDT0RFPlhtbEdZZWFyTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPlhtbEdZZWFyTW9udGg8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj48Q09ERT5YbWxHWWVhck1vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj5YbWxHWWVhck1vbnRoPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPjxDT0RFPlhtbEdZZWFyTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+WG1sR1llYXJNb250aDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj48Q09ERT5YbWxHWWVhck1vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPlhtbEdZZWFyTW9udGg8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPjxDT0RFPlhtbEdZZWFyTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj5YbWxHWWVhck1vbnRoPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj48Q09ERT5YbWxHWWVhck1vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+WG1sR1llYXJNb250aDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlcikiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPjxDT0RFPlhtbEdZZWFyTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+WG1sR1llYXJNb250aDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPjxDT0RFPlhtbEdZZWFyTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+WG1sR1llYXJNb250aDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj48Q09ERT5YbWxHWWVhck1vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPlhtbEdZZWFyTW9udGg8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+PENPREU+WG1sR1llYXJNb250aDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj5YbWxHWWVhck1vbnRoPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj48Q09ERT5YbWxHWWVhck1vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPlhtbEdZZWFyTW9udGg8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPjxDT0RFPlhtbEdZZWFyTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+WG1sR1llYXJNb250aDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj48Q09ERT5YbWxHWWVhck1vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPlhtbEdZZWFyTW9udGg8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+PENPREU+WG1sR1llYXJNb250aDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjY2xvbmUoKSI+Y2xvbmU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZ2V0Q2xhc3MoKSI+Z2V0Q2xhc3M8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPlhtbEdZZWFyTW9udGg8L0E+IDxCPm5ld0luc3RhbmNlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+PENPREU+WG1sR1llYXJNb250aDwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj5YbWxHWWVhck1vbnRoPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj48Q09ERT5YbWxHWWVhck1vbnRoPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj5YbWxHWWVhck1vbnRoPC9BPiA8Qj5uZXdWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+PENPREU+WG1sR1llYXJNb250aDwvQ09ERT48L0E+IHZhbHVlCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+WG1sR1llYXJNb250aDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+PENPREU+WG1sR1llYXJNb250aDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsyMDAzLTA2Jmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPlhtbEdZZWFyTW9udGg8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+PENPREU+WG1sR1llYXJNb250aDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsyMDAzLTA2Jmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPlhtbEdZZWFyTW9udGg8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj48Q09ERT5YbWxHWWVhck1vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPlhtbEdZZWFyTW9udGg8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPjxDT0RFPlhtbEdZZWFyTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPlhtbEdZZWFyTW9udGg8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPjxDT0RFPlhtbEdZZWFyTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj5YbWxHWWVhck1vbnRoPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPjxDT0RFPlhtbEdZZWFyTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPlhtbEdZZWFyTW9udGg8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj48Q09ERT5YbWxHWWVhck1vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPlhtbEdZZWFyTW9udGg8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPjxDT0RFPlhtbEdZZWFyTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlcikiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj5YbWxHWWVhck1vbnRoPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPjxDT0RFPlhtbEdZZWFyTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPlhtbEdZZWFyTW9udGg8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj48Q09ERT5YbWxHWWVhck1vbnRoPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj5YbWxHWWVhck1vbnRoPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+PENPREU+WG1sR1llYXJNb250aDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+WG1sR1llYXJNb250aDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+PENPREU+WG1sR1llYXJNb250aDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPlhtbEdZZWFyTW9udGg8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+PENPREU+WG1sR1llYXJNb250aDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+WG1sR1llYXJNb250aDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPjxDT0RFPlhtbEdZZWFyTW9udGg8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWMxOWE4Ni4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0OTcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NyBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbEdZZWFyTW9udGggKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sR1llYXJNb250aCxYbWxHWWVhck1vbnRoIGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sR1llYXJNb250aCAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sR1llYXJNb250aC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBYbWxHWWVhck1vbnRoPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlhtbEdZZWFyTW9udGg8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9ETD4KLQotPFA+Ci1Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZ1llYXJNb250aCI+eHM6Z1llYXJNb250aDwvYT4gdHlwZS4KLSBBIGdZZWFyTW9udGggc3BlY2lmaWVzIGEgbW9udGggaW4gYSBzcGVjaWZpYyB5ZWFyLgotIDxwPgotIENvbnZlcnRpYmxlIHRvIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZTwvQ09ERT48L0E+LgotPFA+Ci0KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sIj48Q09ERT5YbWxDYWxlbmRhcjwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+PENPREU+R0RhdGU8L0NPREU+PC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibmVzdGVkX2NsYXNzX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TmVzdGVkIENsYXNzIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtjbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguRmFjdG9yeS5odG1sIj5YbWxHWWVhck1vbnRoLkZhY3Rvcnk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj48Q09ERT5YbWxHWWVhck1vbnRoPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIj5YbWxPYmplY3QuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCN0eXBlIj50eXBlPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjRVFVQUwiPkVRVUFMPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNHUkVBVEVSX1RIQU4iPkdSRUFURVJfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTEVTU19USEFOIj5MRVNTX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI05PVF9FUVVBTCI+Tk9UX0VRVUFMPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj5DYWxlbmRhcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwjY2FsZW5kYXJWYWx1ZSgpIj5jYWxlbmRhclZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCNnZXRDYWxlbmRhclZhbHVlKCkiPjxDT0RFPmdldENhbGVuZGFyVmFsdWUoKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCNnRGF0ZVZhbHVlKCkiPmdEYXRlVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sI2dldEdEYXRlVmFsdWUoKSI+PENPREU+Z2V0R0RhdGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sI2dldENhbGVuZGFyVmFsdWUoKSI+Z2V0Q2FsZW5kYXJWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCNnZXRHRGF0ZVZhbHVlKCkiPmdldEdEYXRlVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCNzZXQoamF2YS51dGlsLkNhbGVuZGFyKSI+c2V0PC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj5DYWxlbmRhcjwvQT4mbmJzcDtjKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCNzZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcikiPjxDT0RFPnNldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlU3BlY2lmaWNhdGlvbikiPnNldDwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtnZCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwjc2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKSI+PENPREU+c2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sI3NldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKSI+c2V0Q2FsZW5kYXJWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+Jm5ic3A7Yyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sI3NldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSkiPnNldEdEYXRlVmFsdWU8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPiZuYnNwO2dkKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+PENPREU+R0RhdGVTcGVjaWZpY2F0aW9uPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjZ2V0U3RyaW5nVmFsdWUoKSI+Z2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXQoamF2YS5sYW5nLlN0cmluZykiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj5zZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3N0cmluZ1ZhbHVlKCkiPnN0cmluZ1ZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjaGFuZ2VUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPmNoYW5nZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KSI+Y29tcGFyZVRvPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5jb21wYXJlVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvcHkoKSI+Y29weTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzSW1tdXRhYmxlKCkiPmlzSW1tdXRhYmxlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc05pbCgpIj5pc05pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2NoZW1hVHlwZSgpIj5zY2hlbWFUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0TmlsKCkiPnNldE5pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKCkiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVFcXVhbHMob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj52YWx1ZUVxdWFsczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVIYXNoQ29kZSgpIj52YWx1ZUhhc2hDb2RlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVG9rZW5Tb3VyY2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI2RvY3VtZW50UHJvcGVydGllcygpIj5kb2N1bWVudFByb3BlcnRpZXM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbW9uaXRvcigpIj5tb25pdG9yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0N1cnNvcigpIj5uZXdDdXJzb3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZSgpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbSgpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIoKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0oKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0pIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KCkiPnhtbFRleHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj54bWxUZXh0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0idHlwZSI+PCEtLSAtLT48L0E+PEgzPgotdHlwZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+dHlwZTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0Q2FsZW5kYXJWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRDYWxlbmRhclZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj5DYWxlbmRhcjwvQT4gPEI+Z2V0Q2FsZW5kYXJWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcikiPjwhLS0gLS0+PC9BPjxIMz4KLXNldENhbGVuZGFyVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldENhbGVuZGFyVmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+Jm5ic3A7Yyk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0R0RhdGVWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRHRGF0ZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4gPEI+Z2V0R0RhdGVWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+PENPREU+R0RhdGU8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRHRGF0ZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRHRGF0ZVZhbHVlPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPiZuYnNwO2dkKTwvUFJFPgotPERMPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPjxDT0RFPkdEYXRlU3BlY2lmaWNhdGlvbjwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNhbGVuZGFyVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotY2FsZW5kYXJWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+IDxCPmNhbGVuZGFyVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sI2dldENhbGVuZGFyVmFsdWUoKSI+PENPREU+Z2V0Q2FsZW5kYXJWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0KGphdmEudXRpbC5DYWxlbmRhcikiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiZuYnNwO2MpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCNzZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcikiPjxDT0RFPnNldENhbGVuZGFyVmFsdWUoamF2YS51dGlsLkNhbGVuZGFyKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdEYXRlVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ0RhdGVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+IDxCPmdEYXRlVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sI2dldEdEYXRlVmFsdWUoKSI+PENPREU+Z2V0R0RhdGVWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGVTcGVjaWZpY2F0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXQ8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4mbmJzcDtnZCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sI3NldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSkiPjxDT0RFPnNldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPjxDT0RFPkdEYXRlU3BlY2lmaWNhdGlvbjwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxHWWVhck1vbnRoLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjE0M2ZjLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NzMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0NzowMCBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbEhleEJpbmFyeS5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEhleEJpbmFyeS5GYWN0b3J5LFhtbEhleEJpbmFyeS5GYWN0b3J5IGNsYXNzIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxIZXhCaW5hcnkuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxIZXhCaW5hcnkuRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUNsYXNzIFhtbEhleEJpbmFyeS5GYWN0b3J5PC9IMj4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5qYXZhLmxhbmcuT2JqZWN0PC9BPgotICB8Ci0gICstLTxCPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sSGV4QmluYXJ5LkZhY3Rvcnk8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5FbmNsb3NpbmcgY2xhc3M6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj5YbWxIZXhCaW5hcnk8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyA8Qj5YbWxIZXhCaW5hcnkuRmFjdG9yeTwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9ETD4KLQotPFA+Ci1BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+PENPREU+WG1sSGV4QmluYXJ5PC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj5YbWxIZXhCaW5hcnk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5LkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj5uZXdJbnN0YW5jZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+PENPREU+WG1sSGV4QmluYXJ5PC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+WG1sSGV4QmluYXJ5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5zdGFuY2U8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj48Q09ERT5YbWxIZXhCaW5hcnk8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+WG1sSGV4QmluYXJ5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPm5ld1ZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEhleEJpbmFyeTwvQ09ERT48L0E+IHZhbHVlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPlhtbEhleEJpbmFyeTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj48Q09ERT5YbWxIZXhCaW5hcnk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+WG1sSGV4QmluYXJ5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEhleEJpbmFyeTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj5YbWxIZXhCaW5hcnk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEhleEJpbmFyeTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPlhtbEhleEJpbmFyeTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+PENPREU+WG1sSGV4QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+WG1sSGV4QmluYXJ5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+PENPREU+WG1sSGV4QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj5YbWxIZXhCaW5hcnk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5LkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj48Q09ERT5YbWxIZXhCaW5hcnk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPlhtbEhleEJpbmFyeTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj48Q09ERT5YbWxIZXhCaW5hcnk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj5YbWxIZXhCaW5hcnk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+PENPREU+WG1sSGV4QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+WG1sSGV4QmluYXJ5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj48Q09ERT5YbWxIZXhCaW5hcnk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj5YbWxIZXhCaW5hcnk8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEhleEJpbmFyeTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPlhtbEhleEJpbmFyeTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEhleEJpbmFyeTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPlhtbEhleEJpbmFyeTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEhleEJpbmFyeTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPlhtbEhleEJpbmFyeTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+PENPREU+WG1sSGV4QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+WG1sSGV4QmluYXJ5PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj48Q09ERT5YbWxIZXhCaW5hcnk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPlhtbEhleEJpbmFyeTwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEhleEJpbmFyeTwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPlhtbEhleEJpbmFyeTwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj48Q09ERT5YbWxIZXhCaW5hcnk8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+WG1sSGV4QmluYXJ5PC9BPiA8Qj5uZXdWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj48Q09ERT5YbWxIZXhCaW5hcnk8L0NPREU+PC9BPiB2YWx1ZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+WG1sSGV4QmluYXJ5PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+PENPREU+WG1sSGV4QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzY4NjU2YzZjNmYmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj5YbWxIZXhCaW5hcnk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+PENPREU+WG1sSGV4QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzY4NjU2YzZjNmYmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj5YbWxIZXhCaW5hcnk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj48Q09ERT5YbWxIZXhCaW5hcnk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj5YbWxIZXhCaW5hcnk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+PENPREU+WG1sSGV4QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPlhtbEhleEJpbmFyeTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+PENPREU+WG1sSGV4QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj5YbWxIZXhCaW5hcnk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj48Q09ERT5YbWxIZXhCaW5hcnk8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+WG1sSGV4QmluYXJ5PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+PENPREU+WG1sSGV4QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+WG1sSGV4QmluYXJ5PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEhleEJpbmFyeTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+WG1sSGV4QmluYXJ5PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKQotICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEhleEJpbmFyeTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj5YbWxIZXhCaW5hcnk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEhleEJpbmFyeTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj5YbWxIZXhCaW5hcnk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+PENPREU+WG1sSGV4QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPlhtbEhleEJpbmFyeTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+PENPREU+WG1sSGV4QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj5YbWxIZXhCaW5hcnk8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+PENPREU+WG1sSGV4QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPlhtbEhleEJpbmFyeTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+PENPREU+WG1sSGV4QmluYXJ5PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxIZXhCaW5hcnkuRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDNmYjdkLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzkzICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTcgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxIZXhCaW5hcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sSGV4QmluYXJ5LFhtbEhleEJpbmFyeSBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbEhleEJpbmFyeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbEhleEJpbmFyeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBYbWxIZXhCaW5hcnk8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBpbnRlcmZhY2UgPEI+WG1sSGV4QmluYXJ5PC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvREw+Ci0KLTxQPgotQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2hleEJpbmFyeSI+eHM6aGV4QmluYXJ5PC9hPiB0eXBlLgotIDxwPgotIENvbnZlcnRpYmxlIHRvIGEgYnl0ZSBhcnJheS4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5OZXN0ZWQgQ2xhc3MgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2NsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5LkZhY3RvcnkuaHRtbCI+WG1sSGV4QmluYXJ5LkZhY3Rvcnk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPjxDT0RFPlhtbEhleEJpbmFyeTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+WG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCN0eXBlIj50eXBlPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjRVFVQUwiPkVRVUFMPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNHUkVBVEVSX1RIQU4iPkdSRUFURVJfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTEVTU19USEFOIj5MRVNTX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI05PVF9FUVVBTCI+Tk9UX0VRVUFMPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ynl0ZVtdPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwjYnl0ZUFycmF5VmFsdWUoKSI+Ynl0ZUFycmF5VmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sI2dldEJ5dGVBcnJheVZhbHVlKCkiPjxDT0RFPmdldEJ5dGVBcnJheVZhbHVlKCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ynl0ZVtdPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwjZ2V0Qnl0ZUFycmF5VmFsdWUoKSI+Z2V0Qnl0ZUFycmF5VmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSBieXRlIGFycmF5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwjc2V0KGJ5dGVbXSkiPnNldDwvQT48L0I+KGJ5dGVbXSZuYnNwO2JhKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgYnkgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCNzZXRCeXRlQXJyYXlWYWx1ZShieXRlW10pIj48Q09ERT5zZXRCeXRlQXJyYXlWYWx1ZShieXRlW10pPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCNzZXRCeXRlQXJyYXlWYWx1ZShieXRlW10pIj5zZXRCeXRlQXJyYXlWYWx1ZTwvQT48L0I+KGJ5dGVbXSZuYnNwO2JhKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGlzIHZhbHVlIGFzIGEgYnl0ZSBhcnJheS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjZ2V0U3RyaW5nVmFsdWUoKSI+Z2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXQoamF2YS5sYW5nLlN0cmluZykiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj5zZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3N0cmluZ1ZhbHVlKCkiPnN0cmluZ1ZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjaGFuZ2VUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPmNoYW5nZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KSI+Y29tcGFyZVRvPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5jb21wYXJlVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvcHkoKSI+Y29weTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzSW1tdXRhYmxlKCkiPmlzSW1tdXRhYmxlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc05pbCgpIj5pc05pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2NoZW1hVHlwZSgpIj5zY2hlbWFUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0TmlsKCkiPnNldE5pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKCkiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVFcXVhbHMob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj52YWx1ZUVxdWFsczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVIYXNoQ29kZSgpIj52YWx1ZUhhc2hDb2RlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVG9rZW5Tb3VyY2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI2RvY3VtZW50UHJvcGVydGllcygpIj5kb2N1bWVudFByb3BlcnRpZXM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbW9uaXRvcigpIj5tb25pdG9yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0N1cnNvcigpIj5uZXdDdXJzb3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZSgpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbSgpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIoKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0oKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0pIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KCkiPnhtbFRleHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj54bWxUZXh0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0idHlwZSI+PCEtLSAtLT48L0E+PEgzPgotdHlwZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+dHlwZTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iYnl0ZUFycmF5VmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotYnl0ZUFycmF5VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBieXRlW10gPEI+Ynl0ZUFycmF5VmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sI2dldEJ5dGVBcnJheVZhbHVlKCkiPjxDT0RFPmdldEJ5dGVBcnJheVZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIGJ5dGUgYXJyYXkuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldChieXRlW10pIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oYnl0ZVtdJm5ic3A7YmEpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgYnkgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCNzZXRCeXRlQXJyYXlWYWx1ZShieXRlW10pIj48Q09ERT5zZXRCeXRlQXJyYXlWYWx1ZShieXRlW10pPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSBieXRlIGFycmF5LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRCeXRlQXJyYXlWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRCeXRlQXJyYXlWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGJ5dGVbXSA8Qj5nZXRCeXRlQXJyYXlWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIGJ5dGUgYXJyYXkuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEJ5dGVBcnJheVZhbHVlKGJ5dGVbXSkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEJ5dGVBcnJheVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRCeXRlQXJyYXlWYWx1ZTwvQj4oYnl0ZVtdJm5ic3A7YmEpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgYnl0ZSBhcnJheS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxIZXhCaW5hcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuRmFjdG9yeS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTNhYjk0Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELkZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY3MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ3OjAwIFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sSUQuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxJRC5GYWN0b3J5LFhtbElELkZhY3RvcnkgY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbElELkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxJRC5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sSUQuRmFjdG9yeTwvSDI+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+amF2YS5sYW5nLk9iamVjdDwvQT4KLSAgfAotICArLS08Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbElELkZhY3Rvcnk8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5FbmNsb3NpbmcgY2xhc3M6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPlhtbElEPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgPEI+WG1sSUQuRmFjdG9yeTwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9ETD4KLQotPFA+Ci1BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj48Q09ERT5YbWxJRDwvQ09ERT48L0E+LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj5YbWxJRDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2UoKSI+bmV3SW5zdGFuY2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+PENPREU+WG1sSUQ8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPlhtbElEPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnN0YW5jZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+PENPREU+WG1sSUQ8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+WG1sSUQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuRmFjdG9yeS5odG1sI25ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj5uZXdWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPjxDT0RFPlhtbElEPC9DT0RFPjwvQT4gdmFsdWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj5YbWxJRDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7Zik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+PENPREU+WG1sSUQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj5YbWxJRDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+PENPREU+WG1sSUQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj5YbWxJRDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPjxDT0RFPlhtbElEPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj5YbWxJRDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPjxDT0RFPlhtbElEPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj5YbWxJRDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj48Q09ERT5YbWxJRDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj5YbWxJRDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj48Q09ERT5YbWxJRDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj5YbWxJRDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+PENPREU+WG1sSUQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPlhtbElEPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj48Q09ERT5YbWxJRDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+WG1sSUQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj48Q09ERT5YbWxJRDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+WG1sSUQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj48Q09ERT5YbWxJRDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+WG1sSUQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+PENPREU+WG1sSUQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPlhtbElEPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPjxDT0RFPlhtbElEPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj5YbWxJRDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPjxDT0RFPlhtbElEPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj5YbWxJRDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPjxDT0RFPlhtbElEPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNjbG9uZSgpIj5jbG9uZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj5lcXVhbHM8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2ZpbmFsaXplKCkiPmZpbmFsaXplPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNnZXRDbGFzcygpIj5nZXRDbGFzczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjaGFzaENvZGUoKSI+aGFzaENvZGU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeSgpIj5ub3RpZnk8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeUFsbCgpIj5ub3RpZnlBbGw8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KCkiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZykiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZywgaW50KSI+d2FpdDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPlhtbElEPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj48Q09ERT5YbWxJRDwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+WG1sSUQ8L0E+IDxCPm5ld0luc3RhbmNlPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj48Q09ERT5YbWxJRDwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPlhtbElEPC9BPiA8Qj5uZXdWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPjxDT0RFPlhtbElEPC9DT0RFPjwvQT4gdmFsdWUKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+WG1sSUQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cykKLSAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+PENPREU+WG1sSUQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7bjEmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPlhtbElEPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPjxDT0RFPlhtbElEPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0O24xJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj5YbWxJRDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKQotICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPjxDT0RFPlhtbElEPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj5YbWxJRDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPjxDT0RFPlhtbElEPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+WG1sSUQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KQotICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPjxDT0RFPlhtbElEPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPlhtbElEPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj48Q09ERT5YbWxJRDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPlhtbElEPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpCi0gICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+PENPREU+WG1sSUQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPlhtbElEPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+PENPREU+WG1sSUQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlcikiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+WG1sSUQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpCi0gICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+PENPREU+WG1sSUQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj5YbWxJRDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj48Q09ERT5YbWxJRDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPlhtbElEPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKQotICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj48Q09ERT5YbWxJRDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPlhtbElEPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj48Q09ERT5YbWxJRDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj5YbWxJRDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj48Q09ERT5YbWxJRDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPlhtbElEPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPjxDT0RFPlhtbElEPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5LkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbElELkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxMDE2MTMuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ2OjU3IFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sSUQgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sSUQsWG1sSUQgaW50ZXJmYWNlIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxJRCAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sSUQuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFhtbElEPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPlhtbE5hbWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj5YbWxOQ05hbWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPlhtbFN0cmluZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+WG1sVG9rZW48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBpbnRlcmZhY2UgPEI+WG1sSUQ8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+WG1sTkNOYW1lPC9BPjwvREw+Ci0KLTxQPgotQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI0lEIj54czpJRDwvYT4gdHlwZS4KLSA8cD4KLSBXaGVuIHZhbGlkYXRlZCwgSURzIG11c3QgYmUgdW5pcXVlIHdpdGhpbiBhIGRvY3VtZW50LiAgQW4gZWxlbWVudAotIG1heSBub3QgaGF2ZSBtb3JlIHRoYW4gb25lIGF0dHJpYnV0ZSB3aG9zZSB0eXBlIGlzIElELgotIDxwPgotIENvbnZlcnRpYmxlIHRvIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+PENPREU+U3RyaW5nPC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibmVzdGVkX2NsYXNzX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TmVzdGVkIENsYXNzIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtjbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELkZhY3RvcnkuaHRtbCI+WG1sSUQuRmFjdG9yeTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj48Q09ERT5YbWxJRDwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sTkNOYW1lIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj5YbWxOQ05hbWU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuRmFjdG9yeS5odG1sIj5YbWxOQ05hbWUuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxOYW1lIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+WG1sTmFtZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuRmFjdG9yeS5odG1sIj5YbWxOYW1lLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVG9rZW4iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+WG1sVG9rZW48L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5GYWN0b3J5Lmh0bWwiPlhtbFRva2VuLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sTm9ybWFsaXplZFN0cmluZyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFN0cmluZyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+WG1sU3RyaW5nPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sU3RyaW5nLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+WG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sI3R5cGUiPnR5cGU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9ImZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPkZpZWxkcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNFUVVBTCI+RVFVQUw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0dSRUFURVJfVEhBTiI+R1JFQVRFUl9USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNMRVNTX1RIQU4iPkxFU1NfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTk9UX0VRVUFMIj5OT1RfRVFVQUw8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI2dldFN0cmluZ1ZhbHVlKCkiPmdldFN0cmluZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0KGphdmEubGFuZy5TdHJpbmcpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzdHJpbmdWYWx1ZSgpIj5zdHJpbmdWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY2hhbmdlVHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj5jaGFuZ2VUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVG8oamF2YS5sYW5nLk9iamVjdCkiPmNvbXBhcmVUbzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+Y29tcGFyZVZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb3B5KCkiPmNvcHk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc0ltbXV0YWJsZSgpIj5pc0ltbXV0YWJsZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNOaWwoKSI+aXNOaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NjaGVtYVR5cGUoKSI+c2NoZW1hVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldE5pbCgpIj5zZXROaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZSgpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlRXF1YWxzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+dmFsdWVFcXVhbHM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlSGFzaENvZGUoKSI+dmFsdWVIYXNoQ29kZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFRva2VuU291cmNlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNkb2N1bWVudFByb3BlcnRpZXMoKSI+ZG9jdW1lbnRQcm9wZXJ0aWVzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI21vbml0b3IoKSI+bW9uaXRvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdDdXJzb3IoKSI+bmV3Q3Vyc29yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUoKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0oKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKCkiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKCkiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dCgpIj54bWxUZXh0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+eG1sVGV4dDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9InR5cGUiPjwhLS0gLS0+PC9BPjxIMz4KLXR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPnR5cGU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sSUQuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLkZhY3RvcnkuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLkZhY3RvcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNhN2NjYS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5GYWN0b3J5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NzMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0NzowMCBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbElEUkVGLkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sSURSRUYuRmFjdG9yeSxYbWxJRFJFRi5GYWN0b3J5IGNsYXNzIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxJRFJFRi5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sSURSRUYuRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUNsYXNzIFhtbElEUkVGLkZhY3Rvcnk8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxJRFJFRi5GYWN0b3J5PC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+RW5jbG9zaW5nIGNsYXNzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj5YbWxJRFJFRjwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIDxCPlhtbElEUkVGLkZhY3Rvcnk8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvREw+Ci0KLTxQPgotQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+PENPREU+WG1sSURSRUY8L0NPREU+PC9BPi4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+WG1sSURSRUY8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPm5ld0luc3RhbmNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPjxDT0RFPlhtbElEUkVGPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj5YbWxJRFJFRjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5zdGFuY2U8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPjxDT0RFPlhtbElEUkVGPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPlhtbElEUkVGPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+bmV3VmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj48Q09ERT5YbWxJRFJFRjwvQ09ERT48L0E+IHZhbHVlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+WG1sSURSRUY8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPjxDT0RFPlhtbElEUkVGPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+WG1sSURSRUY8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPjxDT0RFPlhtbElEUkVGPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+WG1sSURSRUY8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj48Q09ERT5YbWxJRFJFRjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+WG1sSURSRUY8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj48Q09ERT5YbWxJRFJFRjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+WG1sSURSRUY8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+PENPREU+WG1sSURSRUY8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+WG1sSURSRUY8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+PENPREU+WG1sSURSRUY8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+WG1sSURSRUY8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPjxDT0RFPlhtbElEUkVGPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj5YbWxJRFJFRjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+PENPREU+WG1sSURSRUY8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPlhtbElEUkVGPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+PENPREU+WG1sSURSRUY8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPlhtbElEUkVGPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+PENPREU+WG1sSURSRUY8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPlhtbElEUkVGPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPjxDT0RFPlhtbElEUkVGPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj5YbWxJRFJFRjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj48Q09ERT5YbWxJRFJFRjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+WG1sSURSRUY8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj48Q09ERT5YbWxJRFJFRjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+WG1sSURSRUY8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj48Q09ERT5YbWxJRFJFRjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjY2xvbmUoKSI+Y2xvbmU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZ2V0Q2xhc3MoKSI+Z2V0Q2xhc3M8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj5YbWxJRFJFRjwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+PENPREU+WG1sSURSRUY8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPlhtbElEUkVGPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+PENPREU+WG1sSURSRUY8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj5YbWxJRFJFRjwvQT4gPEI+bmV3VmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj48Q09ERT5YbWxJRFJFRjwvQ09ERT48L0E+IHZhbHVlCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPlhtbElEUkVGPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPjxDT0RFPlhtbElEUkVGPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPlhtbElEUkVGPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPjxDT0RFPlhtbElEUkVGPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPlhtbElEUkVGPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+PENPREU+WG1sSURSRUY8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPlhtbElEUkVGPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+PENPREU+WG1sSURSRUY8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj5YbWxJRFJFRjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+PENPREU+WG1sSURSRUY8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+WG1sSURSRUY8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPjxDT0RFPlhtbElEUkVGPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+WG1sSURSRUY8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcykKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj48Q09ERT5YbWxJRFJFRjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+WG1sSURSRUY8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj48Q09ERT5YbWxJRFJFRjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj5YbWxJRFJFRjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cikKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj48Q09ERT5YbWxJRFJFRjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPlhtbElEUkVGPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPjxDT0RFPlhtbElEUkVGPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+WG1sSURSRUY8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPjxDT0RFPlhtbElEUkVGPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+WG1sSURSRUY8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPjxDT0RFPlhtbElEUkVGPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPlhtbElEUkVGPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPjxDT0RFPlhtbElEUkVGPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+WG1sSURSRUY8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+PENPREU+WG1sSURSRUY8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sSURSRUYuRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYwNmM5Yy4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI5ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTcgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxJRFJFRiAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxJRFJFRixYbWxJRFJFRiBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbElEUkVGIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxJRFJFRi5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgWG1sSURSRUY8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+WG1sTmFtZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPlhtbE5DTmFtZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+WG1sU3RyaW5nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj5YbWxUb2tlbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGludGVyZmFjZSA8Qj5YbWxJRFJFRjwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj5YbWxOQ05hbWU8L0E+PC9ETD4KLQotPFA+Ci1Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jSURSRUYiPnhzOklEUkVGPC9hPiB0eXBlLgotIDxwPgotIFdoZW4gdmFsaWRhdGVkLCBJRFJFRiB2YWx1ZXMgbXVzdCBtYXRjaCBhbiBJRCB2YWx1ZSB0aGF0IGlzIHByZXNlbnQgd2l0aGluCi0gdGhlIGRvY3VtZW50LiBUaGlzIHJ1bGUgaXMgb25seSB2ZXJpZmllZCB3aGVuIGEgd2hvbGUgZG9jdW1lbnQgaXMgdmFsaWRhdGVkCi0gYXQgb25jZS4KLSA8cD4KLSBDb252ZXJ0aWJsZSB0byBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPjxDT0RFPlN0cmluZzwvQ09ERT48L0E+LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5GYWN0b3J5Lmh0bWwiPlhtbElEUkVGLkZhY3Rvcnk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+PENPREU+WG1sSURSRUY8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE5DTmFtZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+WG1sTkNOYW1lPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCI+WG1sTkNOYW1lLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sTmFtZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPlhtbE5hbWU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbCI+WG1sTmFtZS5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFRva2VuIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPlhtbFRva2VuPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sIj5YbWxUb2tlbi5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE5vcm1hbGl6ZWRTdHJpbmciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxTdHJpbmciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPlhtbFN0cmluZzwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5GYWN0b3J5Lmh0bWwiPlhtbFN0cmluZy5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPlhtbE9iamVjdC5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCN0eXBlIj50eXBlPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjRVFVQUwiPkVRVUFMPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNHUkVBVEVSX1RIQU4iPkdSRUFURVJfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTEVTU19USEFOIj5MRVNTX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI05PVF9FUVVBTCI+Tk9UX0VRVUFMPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNnZXRTdHJpbmdWYWx1ZSgpIj5nZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldChqYXZhLmxhbmcuU3RyaW5nKSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0U3RyaW5nVmFsdWUoamF2YS5sYW5nLlN0cmluZykiPnNldFN0cmluZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc3RyaW5nVmFsdWUoKSI+c3RyaW5nVmFsdWU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NoYW5nZVR5cGUob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlKSI+Y2hhbmdlVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVRvKGphdmEubGFuZy5PYmplY3QpIj5jb21wYXJlVG88L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPmNvbXBhcmVWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29weSgpIj5jb3B5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZykiPmV4ZWNRdWVyeTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPmV4ZWNRdWVyeTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNJbW11dGFibGUoKSI+aXNJbW11dGFibGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzTmlsKCkiPmlzTmlsPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzY2hlbWFUeXBlKCkiPnNjaGVtYVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXROaWwoKSI+c2V0TmlsPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUoKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWx1ZUVxdWFscyhvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnZhbHVlRXF1YWxzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWx1ZUhhc2hDb2RlKCkiPnZhbHVlSGFzaENvZGU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxUb2tlblNvdXJjZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjZG9jdW1lbnRQcm9wZXJ0aWVzKCkiPmRvY3VtZW50UHJvcGVydGllczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNtb25pdG9yKCkiPm1vbml0b3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3Q3Vyc29yKCkiPm5ld0N1cnNvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKCkiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0lucHV0U3RyZWFtKCkiPm5ld0lucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0lucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0lucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcigpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdYTUxJbnB1dFN0cmVhbSgpIj5uZXdYTUxJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdYTUxJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdYTUxJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSkiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSkiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uV3JpdGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uV3JpdGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQoKSI+eG1sVGV4dDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnhtbFRleHQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJ0eXBlIj48IS0tIC0tPjwvQT48SDM+Ci10eXBlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPiA8Qj50eXBlPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbElEUkVGLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuRmFjdG9yeS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLkZhY3RvcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE2ZDQyYS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuRmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjczICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDc6MDAgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxJRFJFRlMuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxJRFJFRlMuRmFjdG9yeSxYbWxJRFJFRlMuRmFjdG9yeSBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sSURSRUZTLkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxJRFJFRlMuRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUNsYXNzIFhtbElEUkVGUy5GYWN0b3J5PC9IMj4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5qYXZhLmxhbmcuT2JqZWN0PC9BPgotICB8Ci0gICstLTxCPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sSURSRUZTLkZhY3Rvcnk8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5FbmNsb3NpbmcgY2xhc3M6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj5YbWxJRFJFRlM8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyA8Qj5YbWxJRFJFRlMuRmFjdG9yeTwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9ETD4KLQotPFA+Ci1BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+PENPREU+WG1sSURSRUZTPC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj5YbWxJRFJFRlM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj5uZXdJbnN0YW5jZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+PENPREU+WG1sSURSRUZTPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+WG1sSURSRUZTPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5zdGFuY2U8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj48Q09ERT5YbWxJRFJFRlM8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+WG1sSURSRUZTPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPm5ld1ZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPjxDT0RFPlhtbElEUkVGUzwvQ09ERT48L0E+IHZhbHVlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPlhtbElEUkVGUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj48Q09ERT5YbWxJRFJFRlM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+WG1sSURSRUZTPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPjxDT0RFPlhtbElEUkVGUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj5YbWxJRFJFRlM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPjxDT0RFPlhtbElEUkVGUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPlhtbElEUkVGUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+PENPREU+WG1sSURSRUZTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+WG1sSURSRUZTPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+PENPREU+WG1sSURSRUZTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj5YbWxJRFJFRlM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj48Q09ERT5YbWxJRFJFRlM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPlhtbElEUkVGUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj48Q09ERT5YbWxJRFJFRlM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj5YbWxJRFJFRlM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+PENPREU+WG1sSURSRUZTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+WG1sSURSRUZTPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj48Q09ERT5YbWxJRFJFRlM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj5YbWxJRFJFRlM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPjxDT0RFPlhtbElEUkVGUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPlhtbElEUkVGUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPjxDT0RFPlhtbElEUkVGUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPlhtbElEUkVGUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPjxDT0RFPlhtbElEUkVGUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPlhtbElEUkVGUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+PENPREU+WG1sSURSRUZTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+WG1sSURSRUZTPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj48Q09ERT5YbWxJRFJFRlM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPlhtbElEUkVGUzwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPjxDT0RFPlhtbElEUkVGUzwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPlhtbElEUkVGUzwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj48Q09ERT5YbWxJRFJFRlM8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+WG1sSURSRUZTPC9BPiA8Qj5uZXdWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj48Q09ERT5YbWxJRFJFRlM8L0NPREU+PC9BPiB2YWx1ZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+WG1sSURSRUZTPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+PENPREU+WG1sSURSRUZTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj5YbWxJRFJFRlM8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+PENPREU+WG1sSURSRUZTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj5YbWxJRFJFRlM8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZikKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj48Q09ERT5YbWxJRFJFRlM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj5YbWxJRFJFRlM8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+PENPREU+WG1sSURSRUZTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPlhtbElEUkVGUzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+PENPREU+WG1sSURSRUZTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj5YbWxJRFJFRlM8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj48Q09ERT5YbWxJRFJFRlM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+WG1sSURSRUZTPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+PENPREU+WG1sSURSRUZTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+WG1sSURSRUZTPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPjxDT0RFPlhtbElEUkVGUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+WG1sSURSRUZTPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPjxDT0RFPlhtbElEUkVGUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj5YbWxJRFJFRlM8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPjxDT0RFPlhtbElEUkVGUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj5YbWxJRFJFRlM8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+PENPREU+WG1sSURSRUZTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPlhtbElEUkVGUzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+PENPREU+WG1sSURSRUZTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj5YbWxJRFJFRlM8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+PENPREU+WG1sSURSRUZTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPlhtbElEUkVGUzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+PENPREU+WG1sSURSRUZTPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50LkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbElEUkVGUy5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4YTNlZTYuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NDggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NyBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbElEUkVGUyAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxJRFJFRlMsWG1sSURSRUZTIGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sSURSRUZTIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxJRFJFRlMuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgWG1sSURSRUZTPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlhtbElEUkVGUzwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0RMPgotCi08UD4KLUNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNJRFJFRlMiPnhzOklEUkVGUzwvYT4gdHlwZSwKLSBhIGxpc3QgdHlwZS4KLSA8cD4KLSBXaGVuIHZhbGlkYXRlZCwgSURSRUYgdmFsdWVzIG11c3QgbWF0Y2ggYW4gSUQgdmFsdWUgdGhhdCBpcyBwcmVzZW50IHdpdGhpbgotIHRoZSBkb2N1bWVudC4gVGhpcyBydWxlIGlzIG9ubHkgdmVyaWZpZWQgd2hlbiBhIHdob2xlIGRvY3VtZW50IGlzIHZhbGlkYXRlZAotIGF0IG9uY2UuCi0gPHA+Ci0gQ29udmVydGlibGUgdG8gYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuRmFjdG9yeS5odG1sIj5YbWxJRFJFRlMuRmFjdG9yeTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+PENPREU+WG1sSURSRUZTPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIj5YbWxPYmplY3QuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sI3R5cGUiPnR5cGU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9ImZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPkZpZWxkcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNFUVVBTCI+RVFVQUw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0dSRUFURVJfVEhBTiI+R1JFQVRFUl9USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNMRVNTX1RIQU4iPkxFU1NfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTk9UX0VRVUFMIj5OT1RfRVFVQUw8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCNnZXRMaXN0VmFsdWUoKSI+Z2V0TGlzdFZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+IG9mIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPjxDT0RFPlN0cmluZzwvQ09ERT48L0E+IHZhbHVlczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCNsaXN0VmFsdWUoKSI+bGlzdFZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgYnkgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCNnZXRMaXN0VmFsdWUoKSI+PENPREU+Z2V0TGlzdFZhbHVlKCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sI3NldChqYXZhLnV0aWwuTGlzdCkiPnNldDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPiZuYnNwO2wpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sI2dldExpc3RWYWx1ZSgpIj48Q09ERT5nZXRMaXN0VmFsdWUoKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwjc2V0TGlzdFZhbHVlKGphdmEudXRpbC5MaXN0KSI+c2V0TGlzdFZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+Jm5ic3A7bCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPjxDT0RFPkxpc3Q8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCN4Z2V0TGlzdFZhbHVlKCkiPnhnZXRMaXN0VmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj48Q09ERT5MaXN0PC9DT0RFPjwvQT4gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj48Q09ERT5YbWxJRFJFRjwvQ09ERT48L0E+IHZhbHVlczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCN4bGlzdFZhbHVlKCkiPnhsaXN0VmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sI2dldExpc3RWYWx1ZSgpIj48Q09ERT5nZXRMaXN0VmFsdWUoKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNnZXRTdHJpbmdWYWx1ZSgpIj5nZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldChqYXZhLmxhbmcuU3RyaW5nKSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0U3RyaW5nVmFsdWUoamF2YS5sYW5nLlN0cmluZykiPnNldFN0cmluZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc3RyaW5nVmFsdWUoKSI+c3RyaW5nVmFsdWU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NoYW5nZVR5cGUob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlKSI+Y2hhbmdlVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVRvKGphdmEubGFuZy5PYmplY3QpIj5jb21wYXJlVG88L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPmNvbXBhcmVWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29weSgpIj5jb3B5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZykiPmV4ZWNRdWVyeTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPmV4ZWNRdWVyeTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNJbW11dGFibGUoKSI+aXNJbW11dGFibGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzTmlsKCkiPmlzTmlsPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzY2hlbWFUeXBlKCkiPnNjaGVtYVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXROaWwoKSI+c2V0TmlsPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUoKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWx1ZUVxdWFscyhvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnZhbHVlRXF1YWxzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWx1ZUhhc2hDb2RlKCkiPnZhbHVlSGFzaENvZGU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxUb2tlblNvdXJjZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjZG9jdW1lbnRQcm9wZXJ0aWVzKCkiPmRvY3VtZW50UHJvcGVydGllczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNtb25pdG9yKCkiPm1vbml0b3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3Q3Vyc29yKCkiPm5ld0N1cnNvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKCkiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0lucHV0U3RyZWFtKCkiPm5ld0lucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0lucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0lucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcigpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdYTUxJbnB1dFN0cmVhbSgpIj5uZXdYTUxJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdYTUxJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdYTUxJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSkiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSkiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uV3JpdGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uV3JpdGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQoKSI+eG1sVGV4dDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnhtbFRleHQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJ0eXBlIj48IS0tIC0tPjwvQT48SDM+Ci10eXBlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPiA8Qj50eXBlPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRMaXN0VmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TGlzdFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+IDxCPmdldExpc3RWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPjxDT0RFPkxpc3Q8L0NPREU+PC9BPiBvZiA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj48Q09ERT5TdHJpbmc8L0NPREU+PC9BPiB2YWx1ZXMKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ieGdldExpc3RWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci14Z2V0TGlzdFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+IDxCPnhnZXRMaXN0VmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj48Q09ERT5MaXN0PC9DT0RFPjwvQT4gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj48Q09ERT5YbWxJRFJFRjwvQ09ERT48L0E+IHZhbHVlcwotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRMaXN0VmFsdWUoamF2YS51dGlsLkxpc3QpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRMaXN0VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldExpc3RWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+Jm5ic3A7bCk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj48Q09ERT5MaXN0PC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibGlzdFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWxpc3RWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPiA8Qj5saXN0VmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sI2dldExpc3RWYWx1ZSgpIj48Q09ERT5nZXRMaXN0VmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+IG9mIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPjxDT0RFPlN0cmluZzwvQ09ERT48L0E+IHZhbHVlcwotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ4bGlzdFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXhsaXN0VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT4gPEI+eGxpc3RWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIGJ5IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwjZ2V0TGlzdFZhbHVlKCkiPjxDT0RFPmdldExpc3RWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj48Q09ERT5MaXN0PC9DT0RFPjwvQT4gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj48Q09ERT5YbWxJRFJFRjwvQ09ERT48L0E+IHZhbHVlcwotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQoamF2YS51dGlsLkxpc3QpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+Jm5ic3A7bCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sI2dldExpc3RWYWx1ZSgpIj48Q09ERT5nZXRMaXN0VmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+U2V0cyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxJRFJFRlMuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50LkZhY3RvcnkuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0OTc5YWYuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50LkZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY3MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ3OjAwIFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sSW50LkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sSW50LkZhY3RvcnksWG1sSW50LkZhY3RvcnkgY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbEludC5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuRmFjdG9yeS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxJbnQuRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUNsYXNzIFhtbEludC5GYWN0b3J5PC9IMj4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5qYXZhLmxhbmcuT2JqZWN0PC9BPgotICB8Ci0gICstLTxCPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sSW50LkZhY3Rvcnk8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5FbmNsb3NpbmcgY2xhc3M6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj5YbWxJbnQ8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyA8Qj5YbWxJbnQuRmFjdG9yeTwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9ETD4KLQotPFA+Ci1BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+PENPREU+WG1sSW50PC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj5YbWxJbnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50LkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj5uZXdJbnN0YW5jZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+PENPREU+WG1sSW50PC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+WG1sSW50PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5zdGFuY2U8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj48Q09ERT5YbWxJbnQ8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+WG1sSW50PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPm5ld1ZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPjxDT0RFPlhtbEludDwvQ09ERT48L0E+IHZhbHVlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPlhtbEludDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj48Q09ERT5YbWxJbnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+WG1sSW50PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPjxDT0RFPlhtbEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj5YbWxJbnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPjxDT0RFPlhtbEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPlhtbEludDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+PENPREU+WG1sSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+WG1sSW50PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+PENPREU+WG1sSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj5YbWxJbnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50LkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj48Q09ERT5YbWxJbnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPlhtbEludDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj48Q09ERT5YbWxJbnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj5YbWxJbnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+PENPREU+WG1sSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+WG1sSW50PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj48Q09ERT5YbWxJbnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj5YbWxJbnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPjxDT0RFPlhtbEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPlhtbEludDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPjxDT0RFPlhtbEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPlhtbEludDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPjxDT0RFPlhtbEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPlhtbEludDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+PENPREU+WG1sSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+WG1sSW50PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj48Q09ERT5YbWxJbnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPlhtbEludDwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPjxDT0RFPlhtbEludDwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPlhtbEludDwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj48Q09ERT5YbWxJbnQ8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+WG1sSW50PC9BPiA8Qj5uZXdWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj48Q09ERT5YbWxJbnQ8L0NPREU+PC9BPiB2YWx1ZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+WG1sSW50PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpCi0gICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+PENPREU+WG1sSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzEyMzQ1NjcmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj5YbWxJbnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+PENPREU+WG1sSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzEyMzQ1NjcmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj5YbWxJbnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZikKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj48Q09ERT5YbWxJbnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj5YbWxJbnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+PENPREU+WG1sSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPlhtbEludDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpCi0gICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+PENPREU+WG1sSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj5YbWxJbnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj48Q09ERT5YbWxJbnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+WG1sSW50PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpCi0gICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+PENPREU+WG1sSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+WG1sSW50PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPjxDT0RFPlhtbEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+WG1sSW50PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKQotICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPjxDT0RFPlhtbEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj5YbWxJbnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPjxDT0RFPlhtbEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj5YbWxJbnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpCi0gICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+PENPREU+WG1sSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPlhtbEludDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+PENPREU+WG1sSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj5YbWxJbnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+PENPREU+WG1sSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPlhtbEludDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+PENPREU+WG1sSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sSW50LkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYyZjNlOS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ1MSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ2OjU3IFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sSW50IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEludCxYbWxJbnQgaW50ZXJmYWNlIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxJbnQgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sSW50Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFhtbEludDwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+WG1sTG9uZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9ERD4KLTwvREw+Ci08REw+Ci08RFQ+PEI+QWxsIEtub3duIFN1YmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPlhtbEJ5dGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPlhtbFNob3J0PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBpbnRlcmZhY2UgPEI+WG1sSW50PC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj5YbWxMb25nPC9BPjwvREw+Ci0KLTxQPgotQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2ludCI+eHM6aW50PC9hPiB0eXBlLgotIE9uZSBvZiB0aGUgZGVyaXZlZCB0eXBlcyBiYXNlZCBvbiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2RlY2ltYWwiPnhzOmRlY2ltYWw8L2E+LgotIDxwPgotIE5hdHVyYWxseSwgY29udmVydGlibGUgdG8gYSBKYXZhIGludC4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5OZXN0ZWQgQ2xhc3MgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2NsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50LkZhY3RvcnkuaHRtbCI+WG1sSW50LkZhY3Rvcnk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPjxDT0RFPlhtbEludDwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sTG9uZyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPlhtbExvbmc8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCI+WG1sTG9uZy5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEludGVnZXIiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbEludGVnZXIuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxEZWNpbWFsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuRmFjdG9yeS5odG1sIj5YbWxEZWNpbWFsLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+WG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCN0eXBlIj50eXBlPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjRVFVQUwiPkVRVUFMPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNHUkVBVEVSX1RIQU4iPkdSRUFURVJfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTEVTU19USEFOIj5MRVNTX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI05PVF9FUVVBTCI+Tk9UX0VRVUFMPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwjZ2V0SW50VmFsdWUoKSI+Z2V0SW50VmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYW4gaW50PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sI2ludFZhbHVlKCkiPmludFZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sI2dldEludFZhbHVlKCkiPjxDT0RFPmdldEludFZhbHVlKCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sI3NldChpbnQpIj5zZXQ8L0E+PC9CPihpbnQmbmJzcDt2KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sI3NldEludFZhbHVlKGludCkiPjxDT0RFPnNldEludFZhbHVlKGludCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sI3NldEludFZhbHVlKGludCkiPnNldEludFZhbHVlPC9BPjwvQj4oaW50Jm5ic3A7dik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhpcyB2YWx1ZSBhcyBhbiBpbnQ8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sTG9uZyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPlhtbExvbmc8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwjZ2V0TG9uZ1ZhbHVlKCkiPmdldExvbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sI2xvbmdWYWx1ZSgpIj5sb25nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCNzZXQobG9uZykiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sI3NldExvbmdWYWx1ZShsb25nKSI+c2V0TG9uZ1ZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sSW50ZWdlciI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwjYmlnSW50ZWdlclZhbHVlKCkiPmJpZ0ludGVnZXJWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI2dldEJpZ0ludGVnZXJWYWx1ZSgpIj5nZXRCaWdJbnRlZ2VyVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCNzZXQoamF2YS5tYXRoLkJpZ0ludGVnZXIpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCNzZXRCaWdJbnRlZ2VyVmFsdWUoamF2YS5tYXRoLkJpZ0ludGVnZXIpIj5zZXRCaWdJbnRlZ2VyVmFsdWU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxEZWNpbWFsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCNiaWdEZWNpbWFsVmFsdWUoKSI+YmlnRGVjaW1hbFZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjZ2V0QmlnRGVjaW1hbFZhbHVlKCkiPmdldEJpZ0RlY2ltYWxWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI3NldChqYXZhLm1hdGguQmlnRGVjaW1hbCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI3NldEJpZ0RlY2ltYWxWYWx1ZShqYXZhLm1hdGguQmlnRGVjaW1hbCkiPnNldEJpZ0RlY2ltYWxWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI2dldFN0cmluZ1ZhbHVlKCkiPmdldFN0cmluZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0KGphdmEubGFuZy5TdHJpbmcpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzdHJpbmdWYWx1ZSgpIj5zdHJpbmdWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY2hhbmdlVHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj5jaGFuZ2VUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVG8oamF2YS5sYW5nLk9iamVjdCkiPmNvbXBhcmVUbzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+Y29tcGFyZVZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb3B5KCkiPmNvcHk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc0ltbXV0YWJsZSgpIj5pc0ltbXV0YWJsZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNOaWwoKSI+aXNOaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NjaGVtYVR5cGUoKSI+c2NoZW1hVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldE5pbCgpIj5zZXROaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZSgpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlRXF1YWxzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+dmFsdWVFcXVhbHM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlSGFzaENvZGUoKSI+dmFsdWVIYXNoQ29kZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFRva2VuU291cmNlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNkb2N1bWVudFByb3BlcnRpZXMoKSI+ZG9jdW1lbnRQcm9wZXJ0aWVzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI21vbml0b3IoKSI+bW9uaXRvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdDdXJzb3IoKSI+bmV3Q3Vyc29yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUoKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0oKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKCkiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKCkiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dCgpIj54bWxUZXh0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+eG1sVGV4dDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9InR5cGUiPjwhLS0gLS0+PC9BPjxIMz4KLXR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPnR5cGU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldEludFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldEludFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldEludFZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGFuIGludAotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRJbnRWYWx1ZShpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRJbnRWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0SW50VmFsdWU8L0I+KGludCZuYnNwO3YpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGFuIGludAotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpbnRWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1pbnRWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5pbnRWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCNnZXRJbnRWYWx1ZSgpIj48Q09ERT5nZXRJbnRWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYW4gaW50Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldChpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oaW50Jm5ic3A7dik8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwjc2V0SW50VmFsdWUoaW50KSI+PENPREU+c2V0SW50VmFsdWUoaW50KTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGFuIGludAotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxJbnQuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLkZhY3RvcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNjYjdlNS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLkZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY3MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ3OjAwIFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sSW50ZWdlci5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEludGVnZXIuRmFjdG9yeSxYbWxJbnRlZ2VyLkZhY3RvcnkgY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbEludGVnZXIuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50LkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbEludGVnZXIuRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUNsYXNzIFhtbEludGVnZXIuRmFjdG9yeTwvSDI+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+amF2YS5sYW5nLk9iamVjdDwvQT4KLSAgfAotICArLS08Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEludGVnZXIuRmFjdG9yeTwvQj4KLTwvUFJFPgotPERMPgotPERUPjxCPkVuY2xvc2luZyBjbGFzczo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgPEI+WG1sSW50ZWdlci5GYWN0b3J5PC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0RMPgotCi08UD4KLUEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+PENPREU+WG1sSW50ZWdlcjwvQ09ERT48L0E+LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2UoKSI+bmV3SW5zdGFuY2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj48Q09ERT5YbWxJbnRlZ2VyPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5zdGFuY2U8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+PENPREU+WG1sSW50ZWdlcjwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sI25ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj5uZXdWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+PENPREU+WG1sSW50ZWdlcjwvQ09ERT48L0E+IHZhbHVlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+PENPREU+WG1sSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbEludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+PENPREU+WG1sSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbEludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+PENPREU+WG1sSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbEludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+PENPREU+WG1sSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+PENPREU+WG1sSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbEludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj48Q09ERT5YbWxJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbEludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+PENPREU+WG1sSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbEludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj48Q09ERT5YbWxJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNjbG9uZSgpIj5jbG9uZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj5lcXVhbHM8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2ZpbmFsaXplKCkiPmZpbmFsaXplPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNnZXRDbGFzcygpIj5nZXRDbGFzczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjaGFzaENvZGUoKSI+aGFzaENvZGU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeSgpIj5ub3RpZnk8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeUFsbCgpIj5ub3RpZnlBbGw8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KCkiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZykiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZywgaW50KSI+d2FpdDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj48Q09ERT5YbWxJbnRlZ2VyPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+IDxCPm5ld0luc3RhbmNlPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbEludGVnZXI8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+IDxCPm5ld1ZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj48Q09ERT5YbWxJbnRlZ2VyPC9DT0RFPjwvQT4gdmFsdWUKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj48Q09ERT5YbWxJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzEyMzQ1Njc4OTAmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj48Q09ERT5YbWxJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzEyMzQ1Njc4OTAmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbEludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+PENPREU+WG1sSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+PENPREU+WG1sSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+PENPREU+WG1sSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbEludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+PENPREU+WG1sSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+PENPREU+WG1sSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbEludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj48Q09ERT5YbWxJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj48Q09ERT5YbWxJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj48Q09ERT5YbWxJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+PENPREU+WG1sSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxJbnRlZ2VyLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDI1ZDZkLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQxOSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ2OjU3IFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sSW50ZWdlciAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxJbnRlZ2VyLFhtbEludGVnZXIgaW50ZXJmYWNlIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxJbnRlZ2VyIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxJbnRlZ2VyLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFhtbEludGVnZXI8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9ERD4KLTwvREw+Ci08REw+Ci08RFQ+PEI+QWxsIEtub3duIFN1YmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLmh0bWwiPlhtbEJ5dGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj5YbWxJbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+WG1sTG9uZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbFBvc2l0aXZlSW50ZWdlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+WG1sU2hvcnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj5YbWxVbnNpZ25lZEJ5dGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPlhtbFVuc2lnbmVkSW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+WG1sVW5zaWduZWRMb25nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQ8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGludGVyZmFjZSA8Qj5YbWxJbnRlZ2VyPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPjwvREw+Ci0KLTxQPgotQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2ludGVnZXIiPnhzOmludGVnZXI8L2E+IHR5cGUuCi0gT25lIG9mIHRoZSBkZXJpdmVkIHR5cGVzIGJhc2VkIG9uIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZGVjaW1hbCI+eHM6ZGVjaW1hbDwvYT4uCi0gPHA+Ci0gVGhpcyB0eXBlIHNob3VsZCBub3QgYmUgY29uZnVzZWQgd2l0aCA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2ludCI+eHM6aW50PC9hPgotIG9yIEphdmEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9JbnRlZ2VyLmh0bWwiPjxDT0RFPkludGVnZXI8L0NPREU+PC9BPi4gIFRoaXMgdHlwZSByZXByZXNlbnRzIGFuIGFyYml0cmFyeS1wcmVjaXNpb24gaW50ZWdlciB3aXRoCi0gYW55IG51bWJlciBvZiBkaWdpdHMsIHdoaWxlIGEgSmF2YSBpbnQgb3IgYW4geHM6aW50IGlzIGEgMzItYml0IGZpbml0ZS1wcmVjaXNpb24gaW50ZWdlci4KLSA8cD4KLSBDb252ZXJ0aWJsZSB0byBhIEphdmEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPjxDT0RFPkJpZ0ludGVnZXI8L0NPREU+PC9BPi4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5OZXN0ZWQgQ2xhc3MgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2NsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbEludGVnZXIuRmFjdG9yeTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbEludGVnZXI8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERlY2ltYWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwiPlhtbERlY2ltYWwuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIj5YbWxPYmplY3QuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCN0eXBlIj50eXBlPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjRVFVQUwiPkVRVUFMPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNHUkVBVEVSX1RIQU4iPkdSRUFURVJfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTEVTU19USEFOIj5MRVNTX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI05PVF9FUVVBTCI+Tk9UX0VRVUFMPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPkJpZ0ludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI2JpZ0ludGVnZXJWYWx1ZSgpIj5iaWdJbnRlZ2VyVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI2dldEJpZ0ludGVnZXJWYWx1ZSgpIj48Q09ERT5nZXRCaWdJbnRlZ2VyVmFsdWUoKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCI+QmlnSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwjZ2V0QmlnSW50ZWdlclZhbHVlKCkiPmdldEJpZ0ludGVnZXJWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIj48Q09ERT5CaWdJbnRlZ2VyPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCNzZXQoamF2YS5tYXRoLkJpZ0ludGVnZXIpIj5zZXQ8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCI+QmlnSW50ZWdlcjwvQT4mbmJzcDtiaSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwjc2V0QmlnSW50ZWdlclZhbHVlKGphdmEubWF0aC5CaWdJbnRlZ2VyKSI+PENPREU+c2V0QmlnSW50ZWdlclZhbHVlKGphdmEubWF0aC5CaWdJbnRlZ2VyKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI3NldEJpZ0ludGVnZXJWYWx1ZShqYXZhLm1hdGguQmlnSW50ZWdlcikiPnNldEJpZ0ludGVnZXJWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIj5CaWdJbnRlZ2VyPC9BPiZuYnNwO2JpKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPjxDT0RFPkJpZ0ludGVnZXI8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxEZWNpbWFsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCNiaWdEZWNpbWFsVmFsdWUoKSI+YmlnRGVjaW1hbFZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjZ2V0QmlnRGVjaW1hbFZhbHVlKCkiPmdldEJpZ0RlY2ltYWxWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI3NldChqYXZhLm1hdGguQmlnRGVjaW1hbCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI3NldEJpZ0RlY2ltYWxWYWx1ZShqYXZhLm1hdGguQmlnRGVjaW1hbCkiPnNldEJpZ0RlY2ltYWxWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI2dldFN0cmluZ1ZhbHVlKCkiPmdldFN0cmluZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0KGphdmEubGFuZy5TdHJpbmcpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzdHJpbmdWYWx1ZSgpIj5zdHJpbmdWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY2hhbmdlVHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj5jaGFuZ2VUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVG8oamF2YS5sYW5nLk9iamVjdCkiPmNvbXBhcmVUbzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+Y29tcGFyZVZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb3B5KCkiPmNvcHk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc0ltbXV0YWJsZSgpIj5pc0ltbXV0YWJsZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNOaWwoKSI+aXNOaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NjaGVtYVR5cGUoKSI+c2NoZW1hVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldE5pbCgpIj5zZXROaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZSgpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlRXF1YWxzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+dmFsdWVFcXVhbHM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlSGFzaENvZGUoKSI+dmFsdWVIYXNoQ29kZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFRva2VuU291cmNlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNkb2N1bWVudFByb3BlcnRpZXMoKSI+ZG9jdW1lbnRQcm9wZXJ0aWVzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI21vbml0b3IoKSI+bW9uaXRvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdDdXJzb3IoKSI+bmV3Q3Vyc29yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUoKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0oKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKCkiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKCkiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dCgpIj54bWxUZXh0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+eG1sVGV4dDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9InR5cGUiPjwhLS0gLS0+PC9BPjxIMz4KLXR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPnR5cGU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldEJpZ0ludGVnZXJWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRCaWdJbnRlZ2VyVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCI+QmlnSW50ZWdlcjwvQT4gPEI+Z2V0QmlnSW50ZWdlclZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPjxDT0RFPkJpZ0ludGVnZXI8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRCaWdJbnRlZ2VyVmFsdWUoamF2YS5tYXRoLkJpZ0ludGVnZXIpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRCaWdJbnRlZ2VyVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldEJpZ0ludGVnZXJWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPkJpZ0ludGVnZXI8L0E+Jm5ic3A7YmkpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPjxDT0RFPkJpZ0ludGVnZXI8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJiaWdJbnRlZ2VyVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotYmlnSW50ZWdlclZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPkJpZ0ludGVnZXI8L0E+IDxCPmJpZ0ludGVnZXJWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwjZ2V0QmlnSW50ZWdlclZhbHVlKCkiPjxDT0RFPmdldEJpZ0ludGVnZXJWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCI+PENPREU+QmlnSW50ZWdlcjwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldChqYXZhLm1hdGguQmlnSW50ZWdlcikiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCI+QmlnSW50ZWdlcjwvQT4mbmJzcDtiaSk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI3NldEJpZ0ludGVnZXJWYWx1ZShqYXZhLm1hdGguQmlnSW50ZWdlcikiPjxDT0RFPnNldEJpZ0ludGVnZXJWYWx1ZShqYXZhLm1hdGguQmlnSW50ZWdlcik8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIj48Q09ERT5CaWdJbnRlZ2VyPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbEludGVnZXIuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzA4MmE0Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLkZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY3MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ3OjAwIFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sTGFuZ3VhZ2UuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxMYW5ndWFnZS5GYWN0b3J5LFhtbExhbmd1YWdlLkZhY3RvcnkgY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbExhbmd1YWdlLkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGluZU51bWJlci5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUNsYXNzIFhtbExhbmd1YWdlLkZhY3Rvcnk8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxMYW5ndWFnZS5GYWN0b3J5PC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+RW5jbG9zaW5nIGNsYXNzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj5YbWxMYW5ndWFnZTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIDxCPlhtbExhbmd1YWdlLkZhY3Rvcnk8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvREw+Ci0KLTxQPgotQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+PENPREU+WG1sTGFuZ3VhZ2U8L0NPREU+PC9BPi4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+WG1sTGFuZ3VhZ2U8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPm5ld0luc3RhbmNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPjxDT0RFPlhtbExhbmd1YWdlPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj5YbWxMYW5ndWFnZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5zdGFuY2U8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPjxDT0RFPlhtbExhbmd1YWdlPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPlhtbExhbmd1YWdlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+bmV3VmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj48Q09ERT5YbWxMYW5ndWFnZTwvQ09ERT48L0E+IHZhbHVlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+WG1sTGFuZ3VhZ2U8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPjxDT0RFPlhtbExhbmd1YWdlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+WG1sTGFuZ3VhZ2U8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPjxDT0RFPlhtbExhbmd1YWdlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+WG1sTGFuZ3VhZ2U8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj48Q09ERT5YbWxMYW5ndWFnZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+WG1sTGFuZ3VhZ2U8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj48Q09ERT5YbWxMYW5ndWFnZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+WG1sTGFuZ3VhZ2U8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+PENPREU+WG1sTGFuZ3VhZ2U8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+WG1sTGFuZ3VhZ2U8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+PENPREU+WG1sTGFuZ3VhZ2U8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+WG1sTGFuZ3VhZ2U8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPjxDT0RFPlhtbExhbmd1YWdlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj5YbWxMYW5ndWFnZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+PENPREU+WG1sTGFuZ3VhZ2U8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPlhtbExhbmd1YWdlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+PENPREU+WG1sTGFuZ3VhZ2U8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPlhtbExhbmd1YWdlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+PENPREU+WG1sTGFuZ3VhZ2U8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPlhtbExhbmd1YWdlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPjxDT0RFPlhtbExhbmd1YWdlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj5YbWxMYW5ndWFnZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj48Q09ERT5YbWxMYW5ndWFnZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+WG1sTGFuZ3VhZ2U8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj48Q09ERT5YbWxMYW5ndWFnZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+WG1sTGFuZ3VhZ2U8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj48Q09ERT5YbWxMYW5ndWFnZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjY2xvbmUoKSI+Y2xvbmU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZ2V0Q2xhc3MoKSI+Z2V0Q2xhc3M8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj5YbWxMYW5ndWFnZTwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+PENPREU+WG1sTGFuZ3VhZ2U8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPlhtbExhbmd1YWdlPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+PENPREU+WG1sTGFuZ3VhZ2U8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj5YbWxMYW5ndWFnZTwvQT4gPEI+bmV3VmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj48Q09ERT5YbWxMYW5ndWFnZTwvQ09ERT48L0E+IHZhbHVlCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPlhtbExhbmd1YWdlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPjxDT0RFPlhtbExhbmd1YWdlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0O2VuLXVzJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj5YbWxMYW5ndWFnZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj48Q09ERT5YbWxMYW5ndWFnZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDtlbi11cyZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+WG1sTGFuZ3VhZ2U8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZikKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj48Q09ERT5YbWxMYW5ndWFnZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+WG1sTGFuZ3VhZ2U8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj48Q09ERT5YbWxMYW5ndWFnZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPlhtbExhbmd1YWdlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSkKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj48Q09ERT5YbWxMYW5ndWFnZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj5YbWxMYW5ndWFnZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+PENPREU+WG1sTGFuZ3VhZ2U8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj5YbWxMYW5ndWFnZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPjxDT0RFPlhtbExhbmd1YWdlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj5YbWxMYW5ndWFnZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPjxDT0RFPlhtbExhbmd1YWdlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPlhtbExhbmd1YWdlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPjxDT0RFPlhtbExhbmd1YWdlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+WG1sTGFuZ3VhZ2U8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+PENPREU+WG1sTGFuZ3VhZ2U8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj5YbWxMYW5ndWFnZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+PENPREU+WG1sTGFuZ3VhZ2U8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj5YbWxMYW5ndWFnZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+PENPREU+WG1sTGFuZ3VhZ2U8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+WG1sTGFuZ3VhZ2U8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+PENPREU+WG1sTGFuZ3VhZ2U8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj5YbWxMYW5ndWFnZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj48Q09ERT5YbWxMYW5ndWFnZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGluZU51bWJlci5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM3MDI5Yi4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzA5ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTcgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxMYW5ndWFnZSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxMYW5ndWFnZSxYbWxMYW5ndWFnZSBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbExhbmd1YWdlIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxMYW5ndWFnZS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgWG1sTGFuZ3VhZ2U8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPlhtbFN0cmluZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+WG1sVG9rZW48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBpbnRlcmZhY2UgPEI+WG1sTGFuZ3VhZ2U8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj5YbWxUb2tlbjwvQT48L0RMPgotCi08UD4KLUNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNsYW5ndWFnZSI+eHM6bGFuZ3VhZ2U8L2E+IHR5cGUuCi0gPHA+Ci0gVGhpcyB0eXBlIGlzIGludGVuZGVkIHRvIHJlcHJlc2VudCBhbiBzdGFuZGFyZCBJU08gbGFuZ3VhZ2UgY29kZSBzdHJpbmcuCi0gPHA+Ci0gQ29udmVydGlibGUgdG8gYSBKYXZhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPjxDT0RFPlN0cmluZzwvQ09ERT48L0E+LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5GYWN0b3J5Lmh0bWwiPlhtbExhbmd1YWdlLkZhY3Rvcnk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+PENPREU+WG1sTGFuZ3VhZ2U8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFRva2VuIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPlhtbFRva2VuPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sIj5YbWxUb2tlbi5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE5vcm1hbGl6ZWRTdHJpbmciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxTdHJpbmciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPlhtbFN0cmluZzwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5GYWN0b3J5Lmh0bWwiPlhtbFN0cmluZy5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPlhtbE9iamVjdC5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCN0eXBlIj50eXBlPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjRVFVQUwiPkVRVUFMPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNHUkVBVEVSX1RIQU4iPkdSRUFURVJfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTEVTU19USEFOIj5MRVNTX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI05PVF9FUVVBTCI+Tk9UX0VRVUFMPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNnZXRTdHJpbmdWYWx1ZSgpIj5nZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldChqYXZhLmxhbmcuU3RyaW5nKSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0U3RyaW5nVmFsdWUoamF2YS5sYW5nLlN0cmluZykiPnNldFN0cmluZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc3RyaW5nVmFsdWUoKSI+c3RyaW5nVmFsdWU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NoYW5nZVR5cGUob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlKSI+Y2hhbmdlVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVRvKGphdmEubGFuZy5PYmplY3QpIj5jb21wYXJlVG88L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPmNvbXBhcmVWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29weSgpIj5jb3B5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZykiPmV4ZWNRdWVyeTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPmV4ZWNRdWVyeTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNJbW11dGFibGUoKSI+aXNJbW11dGFibGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzTmlsKCkiPmlzTmlsPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzY2hlbWFUeXBlKCkiPnNjaGVtYVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXROaWwoKSI+c2V0TmlsPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUoKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWx1ZUVxdWFscyhvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnZhbHVlRXF1YWxzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWx1ZUhhc2hDb2RlKCkiPnZhbHVlSGFzaENvZGU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxUb2tlblNvdXJjZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjZG9jdW1lbnRQcm9wZXJ0aWVzKCkiPmRvY3VtZW50UHJvcGVydGllczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNtb25pdG9yKCkiPm1vbml0b3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3Q3Vyc29yKCkiPm5ld0N1cnNvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKCkiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0lucHV0U3RyZWFtKCkiPm5ld0lucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0lucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0lucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcigpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdYTUxJbnB1dFN0cmVhbSgpIj5uZXdYTUxJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdYTUxJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdYTUxJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSkiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSkiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uV3JpdGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uV3JpdGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQoKSI+eG1sVGV4dDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnhtbFRleHQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJ0eXBlIj48IS0tIC0tPjwvQT48SDM+Ci10eXBlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPiA8Qj50eXBlPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbExhbmd1YWdlLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMaW5lTnVtYmVyLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMaW5lTnVtYmVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyZmU3OGIuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGluZU51bWJlci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzYwICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDc6MDAgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxMaW5lTnVtYmVyIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbExpbmVOdW1iZXIsWG1sTGluZU51bWJlciBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sTGluZU51bWJlciAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuRmFjdG9yeS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxMaW5lTnVtYmVyLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvci5YbWxCb29rbWFyayI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUNsYXNzIFhtbExpbmVOdW1iZXI8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuWG1sQm9va21hcmsuaHRtbCI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IuWG1sQm9va21hcms8L0E+Ci0gICAgICAgIHwKLSAgICAgICAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxMaW5lTnVtYmVyPC9CPgotPC9QUkU+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGNsYXNzIDxCPlhtbExpbmVOdW1iZXI8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuWG1sQm9va21hcmsuaHRtbCI+WG1sQ3Vyc29yLlhtbEJvb2ttYXJrPC9BPjwvREw+Ci0KLTxQPgotQSBzdWJjbGFzcyBvZiBYbWxCb29rbWFyayB0aGF0IGhvbGRzIGxpbmUgbnVtYmVyIGluZm9ybWF0aW9uLgotIElmIGEgZG9jdW1lbnQgaXMgcGFyc2VkIHdpdGggbGluZSBudW1iZXJzCi0gZW5hYmxlZCwgdGhlc2UgYm9va21hcmtzIHdpbGwgYmUgcGxhY2VkIGF0IGFwcHJvcHJpYXRlIGxvY2F0aW9ucwotIHdpdGhpbiB0aGUgZG9jdW1lbnQuCi08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRMb2FkTGluZU51bWJlcnMoKSI+PENPREU+WG1sT3B0aW9ucy5zZXRMb2FkTGluZU51bWJlcnMoKTwvQ09ERT48L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IuWG1sQm9va21hcmsiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5YbWxCb29rbWFyay5odG1sIj5YbWxDdXJzb3IuWG1sQm9va21hcms8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuWG1sQm9va21hcmsuaHRtbCNfY3VycmVudE1hcmsiPl9jdXJyZW50TWFyazwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbEJvb2ttYXJrLmh0bWwjX3JlZiI+X3JlZjwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExpbmVOdW1iZXIuaHRtbCNYbWxMaW5lTnVtYmVyKGludCkiPlhtbExpbmVOdW1iZXI8L0E+PC9CPihpbnQmbmJzcDtsaW5lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29uc3RydWN0cyBhIGxpbmUgbnVtYmVyIHdpdGggbm8gY29sdW1uIG9yIG9mZnNldCBpbmZvcm1hdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGluZU51bWJlci5odG1sI1htbExpbmVOdW1iZXIoaW50LCBpbnQpIj5YbWxMaW5lTnVtYmVyPC9BPjwvQj4oaW50Jm5ic3A7bGluZSwKLSAgICAgICAgICAgICAgaW50Jm5ic3A7Y29sdW1uKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29uc3RydWN0cyBhIGxpbmUgbnVtYmVyIGFuZCBjb2x1bW4gd2l0aCBubyBmaWxlIG9mZnNldCBpbmZvcm1hdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGluZU51bWJlci5odG1sI1htbExpbmVOdW1iZXIoaW50LCBpbnQsIGludCkiPlhtbExpbmVOdW1iZXI8L0E+PC9CPihpbnQmbmJzcDtsaW5lLAotICAgICAgICAgICAgICBpbnQmbmJzcDtjb2x1bW4sCi0gICAgICAgICAgICAgIGludCZuYnNwO29mZnNldCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdHMgYSBsaW5lIG51bWJlciBhbmQgY29sdW1uIHdpdGggbm8gZmlsZSBvZmZzZXQgaW5mb3JtYXRpb24uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGluZU51bWJlci5odG1sI2dldENvbHVtbigpIj5nZXRDb2x1bW48L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSAxLWJhc2VkIGNvbHVtbiBudW1iZXIsIG9yIC0xIGlmIG5vdCBrbm93bi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGluZU51bWJlci5odG1sI2dldExpbmUoKSI+Z2V0TGluZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhlIDEtYmFzZWQgbGluZSBudW1iZXIsIG9yIC0xIGlmIG5vdCBrbm93bi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGluZU51bWJlci5odG1sI2dldE9mZnNldCgpIj5nZXRPZmZzZXQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSAwLWJhc2VkIGZpbGUgb2Zmc2V0IG51bWJlciwgb3IgLTEgaWYgbm90IGtub3duLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxDdXJzb3IuWG1sQm9va21hcmsiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuWG1sQm9va21hcmsuaHRtbCI+WG1sQ3Vyc29yLlhtbEJvb2ttYXJrPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbEJvb2ttYXJrLmh0bWwjY3JlYXRlQ3Vyc29yKCkiPmNyZWF0ZUN1cnNvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbEJvb2ttYXJrLmh0bWwjZ2V0S2V5KCkiPmdldEtleTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbEJvb2ttYXJrLmh0bWwjdG9Cb29rbWFyayhvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEN1cnNvcikiPnRvQm9va21hcms8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+Q29uc3RydWN0b3IgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9IlhtbExpbmVOdW1iZXIoaW50KSI+PCEtLSAtLT48L0E+PEgzPgotWG1sTGluZU51bWJlcjwvSDM+Ci08UFJFPgotcHVibGljIDxCPlhtbExpbmVOdW1iZXI8L0I+KGludCZuYnNwO2xpbmUpPC9QUkU+Ci08REw+Ci08REQ+Q29uc3RydWN0cyBhIGxpbmUgbnVtYmVyIHdpdGggbm8gY29sdW1uIG9yIG9mZnNldCBpbmZvcm1hdGlvbi4KLTxQPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5saW5lPC9DT0RFPiAtIHRoZSBsaW5lIG51bWJlciAtIHRoZSBmaXJzdCBsaW5lIGlzIDE8L0RMPgotPEhSPgotCi08QSBOQU1FPSJYbWxMaW5lTnVtYmVyKGludCwgaW50KSI+PCEtLSAtLT48L0E+PEgzPgotWG1sTGluZU51bWJlcjwvSDM+Ci08UFJFPgotcHVibGljIDxCPlhtbExpbmVOdW1iZXI8L0I+KGludCZuYnNwO2xpbmUsCi0gICAgICAgICAgICAgICAgICAgICBpbnQmbmJzcDtjb2x1bW4pPC9QUkU+Ci08REw+Ci08REQ+Q29uc3RydWN0cyBhIGxpbmUgbnVtYmVyIGFuZCBjb2x1bW4gd2l0aCBubyBmaWxlIG9mZnNldCBpbmZvcm1hdGlvbi4KLTxQPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5saW5lPC9DT0RFPiAtIHRoZSBsaW5lIG51bWJlciAtIHRoZSBmaXJzdCBsaW5lIGlzIDE8L0RMPgotPEhSPgotCi08QSBOQU1FPSJYbWxMaW5lTnVtYmVyKGludCwgaW50LCBpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1YbWxMaW5lTnVtYmVyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+WG1sTGluZU51bWJlcjwvQj4oaW50Jm5ic3A7bGluZSwKLSAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO2NvbHVtbiwKLSAgICAgICAgICAgICAgICAgICAgIGludCZuYnNwO29mZnNldCk8L1BSRT4KLTxETD4KLTxERD5Db25zdHJ1Y3RzIGEgbGluZSBudW1iZXIgYW5kIGNvbHVtbiB3aXRoIG5vIGZpbGUgb2Zmc2V0IGluZm9ybWF0aW9uLgotPFA+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmxpbmU8L0NPREU+IC0gdGhlIGxpbmUgbnVtYmVyIC0gdGhlIGZpcnN0IGxpbmUgaXMgMTwvREw+Ci0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldExpbmUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0TGluZTwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5nZXRMaW5lPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgMS1iYXNlZCBsaW5lIG51bWJlciwgb3IgLTEgaWYgbm90IGtub3duLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRDb2x1bW4oKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Q29sdW1uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldENvbHVtbjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIDEtYmFzZWQgY29sdW1uIG51bWJlciwgb3IgLTEgaWYgbm90IGtub3duLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRPZmZzZXQoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0T2Zmc2V0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmdldE9mZnNldDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIDAtYmFzZWQgZmlsZSBvZmZzZXQgbnVtYmVyLCBvciAtMSBpZiBub3Qga25vd24uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbExpbmVOdW1iZXIuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ3Vyc29yLlhtbEJvb2ttYXJrIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuRmFjdG9yeS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2N2E3YTEuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NzMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0NzowMCBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbExvbmcuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxMb25nLkZhY3RvcnksWG1sTG9uZy5GYWN0b3J5IGNsYXNzIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxMb25nLkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExpbmVOdW1iZXIuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sTG9uZy5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sTG9uZy5GYWN0b3J5PC9IMj4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5qYXZhLmxhbmcuT2JqZWN0PC9BPgotICB8Ci0gICstLTxCPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sTG9uZy5GYWN0b3J5PC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+RW5jbG9zaW5nIGNsYXNzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPlhtbExvbmc8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyA8Qj5YbWxMb25nLkZhY3Rvcnk8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvREw+Ci0KLTxQPgotQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj48Q09ERT5YbWxMb25nPC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+WG1sTG9uZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj5uZXdJbnN0YW5jZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPjxDT0RFPlhtbExvbmc8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+WG1sTG9uZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnN0YW5jZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj48Q09ERT5YbWxMb25nPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPlhtbExvbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPm5ld1ZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj48Q09ERT5YbWxMb25nPC9DT0RFPjwvQT4gdmFsdWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPlhtbExvbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7Zik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj48Q09ERT5YbWxMb25nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj5YbWxMb25nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+PENPREU+WG1sTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+WG1sTG9uZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj48Q09ERT5YbWxMb25nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPlhtbExvbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+PENPREU+WG1sTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj5YbWxMb25nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj48Q09ERT5YbWxMb25nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+WG1sTG9uZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+PENPREU+WG1sTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPlhtbExvbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj48Q09ERT5YbWxMb25nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPlhtbExvbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj48Q09ERT5YbWxMb25nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPlhtbExvbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+PENPREU+WG1sTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj5YbWxMb25nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPjxDT0RFPlhtbExvbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+WG1sTG9uZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+PENPREU+WG1sTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj5YbWxMb25nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj48Q09ERT5YbWxMb25nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPlhtbExvbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+PENPREU+WG1sTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj5YbWxMb25nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPjxDT0RFPlhtbExvbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj5YbWxMb25nPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPjxDT0RFPlhtbExvbmc8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+WG1sTG9uZzwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+PENPREU+WG1sTG9uZzwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+WG1sTG9uZzwvQT4gPEI+bmV3VmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPjxDT0RFPlhtbExvbmc8L0NPREU+PC9BPiB2YWx1ZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPlhtbExvbmc8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPjxDT0RFPlhtbExvbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7MTIzNDU2Nzg5Jmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPlhtbExvbmc8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+PENPREU+WG1sTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsxMjM0NTY3ODkmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+WG1sTG9uZzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKQotICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPjxDT0RFPlhtbExvbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+WG1sTG9uZzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+PENPREU+WG1sTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+WG1sTG9uZzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpCi0gICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+PENPREU+WG1sTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPlhtbExvbmc8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+PENPREU+WG1sTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+WG1sTG9uZzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKQotICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPjxDT0RFPlhtbExvbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+WG1sTG9uZzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+PENPREU+WG1sTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPlhtbExvbmc8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpCi0gICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+PENPREU+WG1sTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+WG1sTG9uZzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPjxDT0RFPlhtbExvbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPlhtbExvbmc8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpCi0gICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj48Q09ERT5YbWxMb25nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj5YbWxMb25nPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj48Q09ERT5YbWxMb25nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+WG1sTG9uZzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj48Q09ERT5YbWxMb25nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj5YbWxMb25nPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+PENPREU+WG1sTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExpbmVOdW1iZXIuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sTG9uZy5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRkNDE0Yy4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0MzMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1OCBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbExvbmcgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sTG9uZyxYbWxMb25nIGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sTG9uZyAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbExvbmcuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgWG1sTG9uZzwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvREQ+Ci08L0RMPgotPERMPgotPERUPjxCPkFsbCBLbm93biBTdWJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj5YbWxCeXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+WG1sSW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj5YbWxTaG9ydDwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlhtbExvbmc8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+PC9ETD4KLQotPFA+Ci1Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jbG9uZyI+eHM6bG9uZzwvYT4gdHlwZS4KLSBPbmUgb2YgdGhlIGRlcml2ZWQgdHlwZXMgYmFzZWQgb24gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkZWNpbWFsIj54czpkZWNpbWFsPC9hPi4KLSA8cD4KLSBOYXR1cmFsbHksIGNvbnZlcnRpYmxlIHRvIGEgSmF2YSBsb25nLgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCI+WG1sTG9uZy5GYWN0b3J5PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+PENPREU+WG1sTG9uZzwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sSW50ZWdlciI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sSW50ZWdlci5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERlY2ltYWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwiPlhtbERlY2ltYWwuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIj5YbWxPYmplY3QuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCN0eXBlIj50eXBlPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjRVFVQUwiPkVRVUFMPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNHUkVBVEVSX1RIQU4iPkdSRUFURVJfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTEVTU19USEFOIj5MRVNTX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI05PVF9FUVVBTCI+Tk9UX0VRVUFMPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7bG9uZzwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCNnZXRMb25nVmFsdWUoKSI+Z2V0TG9uZ1ZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgbG9uZzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtsb25nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sI2xvbmdWYWx1ZSgpIj5sb25nVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sI2dldExvbmdWYWx1ZSgpIj48Q09ERT5nZXRMb25nVmFsdWUoKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sI3NldChsb25nKSI+c2V0PC9BPjwvQj4obG9uZyZuYnNwO3YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sI3NldExvbmdWYWx1ZShsb25nKSI+PENPREU+c2V0TG9uZ1ZhbHVlKGxvbmcpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwjc2V0TG9uZ1ZhbHVlKGxvbmcpIj5zZXRMb25nVmFsdWU8L0E+PC9CPihsb25nJm5ic3A7dik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhpcyB2YWx1ZSBhcyBhIGxvbmc8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sSW50ZWdlciI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwjYmlnSW50ZWdlclZhbHVlKCkiPmJpZ0ludGVnZXJWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI2dldEJpZ0ludGVnZXJWYWx1ZSgpIj5nZXRCaWdJbnRlZ2VyVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCNzZXQoamF2YS5tYXRoLkJpZ0ludGVnZXIpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCNzZXRCaWdJbnRlZ2VyVmFsdWUoamF2YS5tYXRoLkJpZ0ludGVnZXIpIj5zZXRCaWdJbnRlZ2VyVmFsdWU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxEZWNpbWFsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCNiaWdEZWNpbWFsVmFsdWUoKSI+YmlnRGVjaW1hbFZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjZ2V0QmlnRGVjaW1hbFZhbHVlKCkiPmdldEJpZ0RlY2ltYWxWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI3NldChqYXZhLm1hdGguQmlnRGVjaW1hbCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI3NldEJpZ0RlY2ltYWxWYWx1ZShqYXZhLm1hdGguQmlnRGVjaW1hbCkiPnNldEJpZ0RlY2ltYWxWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI2dldFN0cmluZ1ZhbHVlKCkiPmdldFN0cmluZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0KGphdmEubGFuZy5TdHJpbmcpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzdHJpbmdWYWx1ZSgpIj5zdHJpbmdWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY2hhbmdlVHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj5jaGFuZ2VUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVG8oamF2YS5sYW5nLk9iamVjdCkiPmNvbXBhcmVUbzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+Y29tcGFyZVZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb3B5KCkiPmNvcHk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc0ltbXV0YWJsZSgpIj5pc0ltbXV0YWJsZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNOaWwoKSI+aXNOaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NjaGVtYVR5cGUoKSI+c2NoZW1hVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldE5pbCgpIj5zZXROaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZSgpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlRXF1YWxzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+dmFsdWVFcXVhbHM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlSGFzaENvZGUoKSI+dmFsdWVIYXNoQ29kZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFRva2VuU291cmNlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNkb2N1bWVudFByb3BlcnRpZXMoKSI+ZG9jdW1lbnRQcm9wZXJ0aWVzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI21vbml0b3IoKSI+bW9uaXRvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdDdXJzb3IoKSI+bmV3Q3Vyc29yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUoKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0oKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKCkiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKCkiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dCgpIj54bWxUZXh0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+eG1sVGV4dDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9InR5cGUiPjwhLS0gLS0+PC9BPjxIMz4KLXR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPnR5cGU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldExvbmdWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRMb25nVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBsb25nIDxCPmdldExvbmdWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIGxvbmcKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0TG9uZ1ZhbHVlKGxvbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRMb25nVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldExvbmdWYWx1ZTwvQj4obG9uZyZuYnNwO3YpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgbG9uZwotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJsb25nVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotbG9uZ1ZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgbG9uZyA8Qj5sb25nVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sI2dldExvbmdWYWx1ZSgpIj48Q09ERT5nZXRMb25nVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgbG9uZwotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQobG9uZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPihsb25nJm5ic3A7dik8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sI3NldExvbmdWYWx1ZShsb25nKSI+PENPREU+c2V0TG9uZ1ZhbHVlKGxvbmcpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSBsb25nCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sTG9uZy5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuRmFjdG9yeS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRmYjAyYS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuRmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjczICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDc6MDAgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxOQ05hbWUuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxOQ05hbWUuRmFjdG9yeSxYbWxOQ05hbWUuRmFjdG9yeSBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sTkNOYW1lLkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuRmFjdG9yeS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbE5DTmFtZS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sTkNOYW1lLkZhY3Rvcnk8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxOQ05hbWUuRmFjdG9yeTwvQj4KLTwvUFJFPgotPERMPgotPERUPjxCPkVuY2xvc2luZyBjbGFzczo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPlhtbE5DTmFtZTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIDxCPlhtbE5DTmFtZS5GYWN0b3J5PC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0RMPgotCi08UD4KLUEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj48Q09ERT5YbWxOQ05hbWU8L0NPREU+PC9BPi4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPlhtbE5DTmFtZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPm5ld0luc3RhbmNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj48Q09ERT5YbWxOQ05hbWU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj5YbWxOQ05hbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnN0YW5jZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPjxDT0RFPlhtbE5DTmFtZTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj5YbWxOQ05hbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+bmV3VmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+PENPREU+WG1sTkNOYW1lPC9DT0RFPjwvQT4gdmFsdWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+WG1sTkNOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7Zik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPjxDT0RFPlhtbE5DTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj5YbWxOQ05hbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+PENPREU+WG1sTkNOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPlhtbE5DTmFtZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+PENPREU+WG1sTkNOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+WG1sTkNOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj48Q09ERT5YbWxOQ05hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj5YbWxOQ05hbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj48Q09ERT5YbWxOQ05hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPlhtbE5DTmFtZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPjxDT0RFPlhtbE5DTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+WG1sTkNOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPjxDT0RFPlhtbE5DTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPlhtbE5DTmFtZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj48Q09ERT5YbWxOQ05hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj5YbWxOQ05hbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPjxDT0RFPlhtbE5DTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPlhtbE5DTmFtZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+PENPREU+WG1sTkNOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+WG1sTkNOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+PENPREU+WG1sTkNOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+WG1sTkNOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+PENPREU+WG1sTkNOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+WG1sTkNOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj48Q09ERT5YbWxOQ05hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj5YbWxOQ05hbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPjxDT0RFPlhtbE5DTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjY2xvbmUoKSI+Y2xvbmU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZ2V0Q2xhc3MoKSI+Z2V0Q2xhc3M8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+WG1sTkNOYW1lPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+PENPREU+WG1sTkNOYW1lPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+WG1sTkNOYW1lPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPjxDT0RFPlhtbE5DTmFtZTwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj5YbWxOQ05hbWU8L0E+IDxCPm5ld1ZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPjxDT0RFPlhtbE5DTmFtZTwvQ09ERT48L0E+IHZhbHVlCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj5YbWxOQ05hbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj48Q09ERT5YbWxOQ05hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7TXktTmFtZSZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPlhtbE5DTmFtZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj48Q09ERT5YbWxOQ05hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7TXktTmFtZSZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPlhtbE5DTmFtZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPjxDT0RFPlhtbE5DTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPlhtbE5DTmFtZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj48Q09ERT5YbWxOQ05hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+WG1sTkNOYW1lPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSkKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj48Q09ERT5YbWxOQ05hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPlhtbE5DTmFtZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPjxDT0RFPlhtbE5DTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj5YbWxOQ05hbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj48Q09ERT5YbWxOQ05hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj5YbWxOQ05hbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+PENPREU+WG1sTkNOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj5YbWxOQ05hbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+PENPREU+WG1sTkNOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPlhtbE5DTmFtZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+PENPREU+WG1sTkNOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPlhtbE5DTmFtZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj48Q09ERT5YbWxOQ05hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+WG1sTkNOYW1lPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj48Q09ERT5YbWxOQ05hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPlhtbE5DTmFtZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj48Q09ERT5YbWxOQ05hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+WG1sTkNOYW1lPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj48Q09ERT5YbWxOQ05hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxOQ05hbWUuRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjYxYjU1Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzI1ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTggUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxOQ05hbWUgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sTkNOYW1lLFhtbE5DTmFtZSBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbE5DTmFtZSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxOQ05hbWUuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFhtbE5DTmFtZTwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj5YbWxOYW1lPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj5YbWxTdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPlhtbFRva2VuPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0REPgotPC9ETD4KLTxETD4KLTxEVD48Qj5BbGwgS25vd24gU3ViaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj5YbWxFTlRJVFk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPlhtbElEPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj5YbWxJRFJFRjwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlhtbE5DTmFtZTwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+WG1sTmFtZTwvQT48L0RMPgotCi08UD4KLUNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNOYW1lIj54czpOYW1lPC9hPiB0eXBlLgotIE9uZSBvZiB0aGUgZGVyaXZlZCB0eXBlcyBiYXNlZCBvbiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3N0cmluZyI+eHM6c3RyaW5nPC9hPi4KLSA8cD4KLSBUaGlzIGtpbmQgb2Ygc3RyaW5nIGlzIHRoZSBzYW1lIGFzIHRoZSBub24tY29sb25pemVkIHN0cmluZ3MgdGhhdCBhcmUgdXNlZAotIGZvciBYTUwgbG9jYWxuYW1lcyBhbmQgcHJlZml4ZXMsICJteS1ocmVmLjIiLiAgSXQgaXMganVzdCBhIHBoeXNpY2FsCi0gc3RyaW5nLCBob3dldmVyLCBhbmQgaXQgc2hvdWxkIE5PVCBiZSBjb25mdXNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+PENPREU+WG1sUU5hbWU8L0NPREU+PC9BPiwKLSB3aGljaCBpcyBhIGxvZ2ljYWwgY29tYmluYXRpb24gb2YgbG9jYWxuYW1lIGFuZCBuYW1lc3BhY2UgVVJJLgotIDxwPgotIENvbnZlcnRpYmxlIHRvIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPjxDT0RFPlN0cmluZzwvQ09ERT48L0E+LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuRmFjdG9yeS5odG1sIj5YbWxOQ05hbWUuRmFjdG9yeTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+PENPREU+WG1sTkNOYW1lPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxOYW1lIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+WG1sTmFtZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuRmFjdG9yeS5odG1sIj5YbWxOYW1lLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVG9rZW4iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+WG1sVG9rZW48L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5GYWN0b3J5Lmh0bWwiPlhtbFRva2VuLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sTm9ybWFsaXplZFN0cmluZyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFN0cmluZyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+WG1sU3RyaW5nPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sU3RyaW5nLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+WG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCN0eXBlIj50eXBlPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjRVFVQUwiPkVRVUFMPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNHUkVBVEVSX1RIQU4iPkdSRUFURVJfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTEVTU19USEFOIj5MRVNTX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI05PVF9FUVVBTCI+Tk9UX0VRVUFMPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNnZXRTdHJpbmdWYWx1ZSgpIj5nZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldChqYXZhLmxhbmcuU3RyaW5nKSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0U3RyaW5nVmFsdWUoamF2YS5sYW5nLlN0cmluZykiPnNldFN0cmluZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc3RyaW5nVmFsdWUoKSI+c3RyaW5nVmFsdWU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NoYW5nZVR5cGUob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlKSI+Y2hhbmdlVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVRvKGphdmEubGFuZy5PYmplY3QpIj5jb21wYXJlVG88L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPmNvbXBhcmVWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29weSgpIj5jb3B5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZykiPmV4ZWNRdWVyeTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPmV4ZWNRdWVyeTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNJbW11dGFibGUoKSI+aXNJbW11dGFibGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzTmlsKCkiPmlzTmlsPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzY2hlbWFUeXBlKCkiPnNjaGVtYVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXROaWwoKSI+c2V0TmlsPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUoKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWx1ZUVxdWFscyhvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnZhbHVlRXF1YWxzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWx1ZUhhc2hDb2RlKCkiPnZhbHVlSGFzaENvZGU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxUb2tlblNvdXJjZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjZG9jdW1lbnRQcm9wZXJ0aWVzKCkiPmRvY3VtZW50UHJvcGVydGllczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNtb25pdG9yKCkiPm1vbml0b3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3Q3Vyc29yKCkiPm5ld0N1cnNvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKCkiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0lucHV0U3RyZWFtKCkiPm5ld0lucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0lucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0lucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcigpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdYTUxJbnB1dFN0cmVhbSgpIj5uZXdYTUxJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdYTUxJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdYTUxJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSkiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSkiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uV3JpdGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uV3JpdGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQoKSI+eG1sVGV4dDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnhtbFRleHQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJ0eXBlIj48IS0tIC0tPjwvQT48SDM+Ci10eXBlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPiA8Qj50eXBlPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sTkNOYW1lLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLkZhY3RvcnkuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTllZTBmLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uRmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjczICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDc6MDEgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxOTVRPS0VOLkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sTk1UT0tFTi5GYWN0b3J5LFhtbE5NVE9LRU4uRmFjdG9yeSBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sTk1UT0tFTi5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sTk1UT0tFTi5GYWN0b3J5PC9IMj4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5qYXZhLmxhbmcuT2JqZWN0PC9BPgotICB8Ci0gICstLTxCPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sTk1UT0tFTi5GYWN0b3J5PC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+RW5jbG9zaW5nIGNsYXNzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPlhtbE5NVE9LRU48L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyA8Qj5YbWxOTVRPS0VOLkZhY3Rvcnk8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvREw+Ci0KLTxQPgotQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Q09ERT5YbWxOTVRPS0VOPC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+WG1sTk1UT0tFTjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj5uZXdJbnN0YW5jZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU48L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+WG1sTk1UT0tFTjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnN0YW5jZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Q09ERT5YbWxOTVRPS0VOPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPlhtbE5NVE9LRU48L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPm5ld1ZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Q09ERT5YbWxOTVRPS0VOPC9DT0RFPjwvQT4gdmFsdWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPlhtbE5NVE9LRU48L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7Zik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Q09ERT5YbWxOTVRPS0VOPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj5YbWxOTVRPS0VOPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+PENPREU+WG1sTk1UT0tFTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+WG1sTk1UT0tFTjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Q09ERT5YbWxOTVRPS0VOPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPlhtbE5NVE9LRU48L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+PENPREU+WG1sTk1UT0tFTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj5YbWxOTVRPS0VOPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Q09ERT5YbWxOTVRPS0VOPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+WG1sTk1UT0tFTjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+PENPREU+WG1sTk1UT0tFTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPlhtbE5NVE9LRU48L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Q09ERT5YbWxOTVRPS0VOPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPlhtbE5NVE9LRU48L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Q09ERT5YbWxOTVRPS0VOPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPlhtbE5NVE9LRU48L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+PENPREU+WG1sTk1UT0tFTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj5YbWxOTVRPS0VOPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+WG1sTk1UT0tFTjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+PENPREU+WG1sTk1UT0tFTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj5YbWxOTVRPS0VOPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Q09ERT5YbWxOTVRPS0VOPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPlhtbE5NVE9LRU48L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+PENPREU+WG1sTk1UT0tFTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj5YbWxOTVRPS0VOPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj5YbWxOTVRPS0VOPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU48L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+WG1sTk1UT0tFTjwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+PENPREU+WG1sTk1UT0tFTjwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+WG1sTk1UT0tFTjwvQT4gPEI+bmV3VmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU48L0NPREU+PC9BPiB2YWx1ZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPlhtbE5NVE9LRU48L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7c2FtcGxlLTEuMiZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj5YbWxOTVRPS0VOPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7c2FtcGxlLTEuMiZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj5YbWxOTVRPS0VOPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+PENPREU+WG1sTk1UT0tFTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj5YbWxOTVRPS0VOPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Q09ERT5YbWxOTVRPS0VOPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj5YbWxOTVRPS0VOPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Q09ERT5YbWxOTVRPS0VOPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+WG1sTk1UT0tFTjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Q09ERT5YbWxOTVRPS0VOPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj5YbWxOTVRPS0VOPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+PENPREU+WG1sTk1UT0tFTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj5YbWxOTVRPS0VOPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Q09ERT5YbWxOTVRPS0VOPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+WG1sTk1UT0tFTjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cikKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Q09ERT5YbWxOTVRPS0VOPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj5YbWxOTVRPS0VOPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+PENPREU+WG1sTk1UT0tFTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+WG1sTk1UT0tFTjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPlhtbE5NVE9LRU48L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj5YbWxOTVRPS0VOPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPlhtbE5NVE9LRU48L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Q09ERT5YbWxOTVRPS0VOPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbE5NVE9LRU4uRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2Y2E1MDEuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzEyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTggUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxOTVRPS0VOIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE5NVE9LRU4sWG1sTk1UT0tFTiBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbE5NVE9LRU4gKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbE5NVE9LRU4uaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFhtbE5NVE9LRU48L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPlhtbFN0cmluZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+WG1sVG9rZW48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBpbnRlcmZhY2UgPEI+WG1sTk1UT0tFTjwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPlhtbFRva2VuPC9BPjwvREw+Ci0KLTxQPgotQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI05NVE9LRU4iPnhzOk5NVE9LRU48L2E+IHR5cGUuCi0gT25lIG9mIHRoZSBkZXJpdmVkIHR5cGVzIGJhc2VkIG9uIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jc3RyaW5nIj54czpzdHJpbmc8L2E+LgotIDxwPgotIEFuIE5NVE9LRU4gaXMgWE1MJ3MgY2xvc2VzdCBjb25jZXB0IHRvIGFuICJpZGVudGlmaWVyIjsgZm9yIGV4YW1wbGUsCi0gaXQgZG9lcyBub3QgcGVybWl0IHNwYWNlcyBhbmQgb25seSBsaW1pdGVkIHB1bmN0dWF0aW9uLiAgU28gTk1UT0tFTiBpcwotIGNvbW1vbmx5IHVzZWQgdG8gZGVzY3JpYmUgYSBzaW5nbGUgdG9rZW4gb3IgZW51bWVyYXRlZCBzdHJpbmcgdmFsdWUuCi0gPHA+Ci0gQ29udmVydGlibGUgdG8gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+PENPREU+U3RyaW5nPC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibmVzdGVkX2NsYXNzX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TmVzdGVkIENsYXNzIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtjbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uRmFjdG9yeS5odG1sIj5YbWxOTVRPS0VOLkZhY3Rvcnk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Q09ERT5YbWxOTVRPS0VOPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxUb2tlbiI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj5YbWxUb2tlbjwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCI+WG1sVG9rZW4uRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxOb3JtYWxpemVkU3RyaW5nIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZzwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sU3RyaW5nIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj5YbWxTdHJpbmc8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sIj5YbWxTdHJpbmcuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIj5YbWxPYmplY3QuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCN0eXBlIj50eXBlPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjRVFVQUwiPkVRVUFMPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNHUkVBVEVSX1RIQU4iPkdSRUFURVJfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTEVTU19USEFOIj5MRVNTX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI05PVF9FUVVBTCI+Tk9UX0VRVUFMPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNnZXRTdHJpbmdWYWx1ZSgpIj5nZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldChqYXZhLmxhbmcuU3RyaW5nKSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0U3RyaW5nVmFsdWUoamF2YS5sYW5nLlN0cmluZykiPnNldFN0cmluZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc3RyaW5nVmFsdWUoKSI+c3RyaW5nVmFsdWU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NoYW5nZVR5cGUob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlKSI+Y2hhbmdlVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVRvKGphdmEubGFuZy5PYmplY3QpIj5jb21wYXJlVG88L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPmNvbXBhcmVWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29weSgpIj5jb3B5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZykiPmV4ZWNRdWVyeTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPmV4ZWNRdWVyeTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNJbW11dGFibGUoKSI+aXNJbW11dGFibGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzTmlsKCkiPmlzTmlsPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzY2hlbWFUeXBlKCkiPnNjaGVtYVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXROaWwoKSI+c2V0TmlsPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUoKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWx1ZUVxdWFscyhvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnZhbHVlRXF1YWxzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWx1ZUhhc2hDb2RlKCkiPnZhbHVlSGFzaENvZGU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxUb2tlblNvdXJjZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjZG9jdW1lbnRQcm9wZXJ0aWVzKCkiPmRvY3VtZW50UHJvcGVydGllczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNtb25pdG9yKCkiPm1vbml0b3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3Q3Vyc29yKCkiPm5ld0N1cnNvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKCkiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0lucHV0U3RyZWFtKCkiPm5ld0lucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0lucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0lucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcigpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdYTUxJbnB1dFN0cmVhbSgpIj5uZXdYTUxJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdYTUxJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdYTUxJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSkiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSkiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uV3JpdGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uV3JpdGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQoKSI+eG1sVGV4dDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnhtbFRleHQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJ0eXBlIj48IS0tIC0tPjwvQT48SDM+Ci10eXBlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPiA8Qj50eXBlPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbE5NVE9LRU4uaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLkZhY3RvcnkuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLkZhY3RvcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUzOTdlMS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NzMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0NzowMSBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbE5NVE9LRU5TLkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sTk1UT0tFTlMuRmFjdG9yeSxYbWxOTVRPS0VOUy5GYWN0b3J5IGNsYXNzIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxOTVRPS0VOUy5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sTk1UT0tFTlMuRmFjdG9yeTwvSDI+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+amF2YS5sYW5nLk9iamVjdDwvQT4KLSAgfAotICArLS08Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE5NVE9LRU5TLkZhY3Rvcnk8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5FbmNsb3NpbmcgY2xhc3M6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPlhtbE5NVE9LRU5TPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgPEI+WG1sTk1UT0tFTlMuRmFjdG9yeTwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9ETD4KLQotPFA+Ci1BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj48Q09ERT5YbWxOTVRPS0VOUzwvQ09ERT48L0E+LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj5YbWxOTVRPS0VOUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2UoKSI+bmV3SW5zdGFuY2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+PENPREU+WG1sTk1UT0tFTlM8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPlhtbE5NVE9LRU5TPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnN0YW5jZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+PENPREU+WG1sTk1UT0tFTlM8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+WG1sTk1UT0tFTlM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuRmFjdG9yeS5odG1sI25ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj5uZXdWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU5TPC9DT0RFPjwvQT4gdmFsdWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj5YbWxOTVRPS0VOUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7Zik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+PENPREU+WG1sTk1UT0tFTlM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj5YbWxOTVRPS0VOUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+PENPREU+WG1sTk1UT0tFTlM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj5YbWxOTVRPS0VOUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU5TPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj5YbWxOTVRPS0VOUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU5TPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj5YbWxOTVRPS0VOUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj48Q09ERT5YbWxOTVRPS0VOUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj5YbWxOTVRPS0VOUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj48Q09ERT5YbWxOTVRPS0VOUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj5YbWxOTVRPS0VOUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+PENPREU+WG1sTk1UT0tFTlM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPlhtbE5NVE9LRU5TPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj48Q09ERT5YbWxOTVRPS0VOUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+WG1sTk1UT0tFTlM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj48Q09ERT5YbWxOTVRPS0VOUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+WG1sTk1UT0tFTlM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj48Q09ERT5YbWxOTVRPS0VOUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+WG1sTk1UT0tFTlM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+PENPREU+WG1sTk1UT0tFTlM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPlhtbE5NVE9LRU5TPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU5TPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj5YbWxOTVRPS0VOUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU5TPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj5YbWxOTVRPS0VOUzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU5TPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNjbG9uZSgpIj5jbG9uZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj5lcXVhbHM8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2ZpbmFsaXplKCkiPmZpbmFsaXplPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNnZXRDbGFzcygpIj5nZXRDbGFzczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjaGFzaENvZGUoKSI+aGFzaENvZGU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeSgpIj5ub3RpZnk8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeUFsbCgpIj5ub3RpZnlBbGw8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KCkiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZykiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZywgaW50KSI+d2FpdDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPlhtbE5NVE9LRU5TPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj48Q09ERT5YbWxOTVRPS0VOUzwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+WG1sTk1UT0tFTlM8L0E+IDxCPm5ld0luc3RhbmNlPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj48Q09ERT5YbWxOTVRPS0VOUzwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPlhtbE5NVE9LRU5TPC9BPiA8Qj5uZXdWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU5TPC9DT0RFPjwvQT4gdmFsdWUKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+WG1sTk1UT0tFTlM8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cykKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+PENPREU+WG1sTk1UT0tFTlM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7c2FtcGxlLTEuMSBzYW1wbGUtMS4yIHNhbXBsZS0xLjMmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPlhtbE5NVE9LRU5TPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU5TPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0O3NhbXBsZS0xLjEgc2FtcGxlLTEuMiBzYW1wbGUtMS4zJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj5YbWxOTVRPS0VOUzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU5TPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj5YbWxOTVRPS0VOUzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU5TPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+WG1sTk1UT0tFTlM8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU5TPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPlhtbE5NVE9LRU5TPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj48Q09ERT5YbWxOTVRPS0VOUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPlhtbE5NVE9LRU5TPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+PENPREU+WG1sTk1UT0tFTlM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPlhtbE5NVE9LRU5TPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+PENPREU+WG1sTk1UT0tFTlM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlcikiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+WG1sTk1UT0tFTlM8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+PENPREU+WG1sTk1UT0tFTlM8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj5YbWxOTVRPS0VOUzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj48Q09ERT5YbWxOTVRPS0VOUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPlhtbE5NVE9LRU5TPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj48Q09ERT5YbWxOTVRPS0VOUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPlhtbE5NVE9LRU5TPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj48Q09ERT5YbWxOTVRPS0VOUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj5YbWxOTVRPS0VOUzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj48Q09ERT5YbWxOTVRPS0VOUzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPlhtbE5NVE9LRU5TPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU5TPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sTk1UT0tFTlMuRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ4MDNkZC4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDQ0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTggUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxOTVRPS0VOUyAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxOTVRPS0VOUyxYbWxOTVRPS0VOUyBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbE5NVE9LRU5TIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbE5NVE9LRU5TLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFhtbE5NVE9LRU5TPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlhtbE5NVE9LRU5TPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvREw+Ci0KLTxQPgotQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI05NVE9LRU5TIj54czpOTVRPS0VOUzwvYT4gdHlwZSwKLSBhIGxpc3QgdHlwZS4KLSA8cD4KLSBDb252ZXJ0aWJsZSB0byA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5GYWN0b3J5Lmh0bWwiPlhtbE5NVE9LRU5TLkZhY3Rvcnk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+PENPREU+WG1sTk1UT0tFTlM8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPlhtbE9iamVjdC5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCN0eXBlIj50eXBlPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjRVFVQUwiPkVRVUFMPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNHUkVBVEVSX1RIQU4iPkdSRUFURVJfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTEVTU19USEFOIj5MRVNTX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI05PVF9FUVVBTCI+Tk9UX0VRVUFMPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCNnZXRMaXN0VmFsdWUoKSI+Z2V0TGlzdFZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+IG9mIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPjxDT0RFPlN0cmluZzwvQ09ERT48L0E+IHZhbHVlczwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sI2xpc3RWYWx1ZSgpIj5saXN0VmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwjZ2V0TGlzdFZhbHVlKCkiPjxDT0RFPmdldExpc3RWYWx1ZSgpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sI3NldChqYXZhLnV0aWwuTGlzdCkiPnNldDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPiZuYnNwO2wpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwjZ2V0TGlzdFZhbHVlKCkiPjxDT0RFPmdldExpc3RWYWx1ZSgpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sI3NldExpc3RWYWx1ZShqYXZhLnV0aWwuTGlzdCkiPnNldExpc3RWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPiZuYnNwO2wpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj48Q09ERT5MaXN0PC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCN4Z2V0TGlzdFZhbHVlKCkiPnhnZXRMaXN0VmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj48Q09ERT5MaXN0PC9DT0RFPjwvQT4gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU48L0NPREU+PC9BPiB2YWx1ZXM8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCN4bGlzdFZhbHVlKCkiPnhsaXN0VmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwjZ2V0TGlzdFZhbHVlKCkiPjxDT0RFPmdldExpc3RWYWx1ZSgpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI2dldFN0cmluZ1ZhbHVlKCkiPmdldFN0cmluZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0KGphdmEubGFuZy5TdHJpbmcpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzdHJpbmdWYWx1ZSgpIj5zdHJpbmdWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY2hhbmdlVHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj5jaGFuZ2VUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVG8oamF2YS5sYW5nLk9iamVjdCkiPmNvbXBhcmVUbzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+Y29tcGFyZVZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb3B5KCkiPmNvcHk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc0ltbXV0YWJsZSgpIj5pc0ltbXV0YWJsZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNOaWwoKSI+aXNOaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NjaGVtYVR5cGUoKSI+c2NoZW1hVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldE5pbCgpIj5zZXROaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZSgpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlRXF1YWxzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+dmFsdWVFcXVhbHM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlSGFzaENvZGUoKSI+dmFsdWVIYXNoQ29kZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFRva2VuU291cmNlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNkb2N1bWVudFByb3BlcnRpZXMoKSI+ZG9jdW1lbnRQcm9wZXJ0aWVzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI21vbml0b3IoKSI+bW9uaXRvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdDdXJzb3IoKSI+bmV3Q3Vyc29yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUoKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0oKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKCkiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKCkiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dCgpIj54bWxUZXh0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+eG1sVGV4dDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9InR5cGUiPjwhLS0gLS0+PC9BPjxIMz4KLXR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPnR5cGU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldExpc3RWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRMaXN0VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT4gPEI+Z2V0TGlzdFZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+IG9mIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPjxDT0RFPlN0cmluZzwvQ09ERT48L0E+IHZhbHVlcwotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ4Z2V0TGlzdFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXhnZXRMaXN0VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT4gPEI+eGdldExpc3RWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPjxDT0RFPkxpc3Q8L0NPREU+PC9BPiBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+PENPREU+WG1sTk1UT0tFTjwvQ09ERT48L0E+IHZhbHVlcwotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRMaXN0VmFsdWUoamF2YS51dGlsLkxpc3QpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRMaXN0VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldExpc3RWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+Jm5ic3A7bCk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj48Q09ERT5MaXN0PC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibGlzdFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWxpc3RWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPiA8Qj5saXN0VmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCBieSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwjZ2V0TGlzdFZhbHVlKCkiPjxDT0RFPmdldExpc3RWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5SZXR1cm5zIHRoZSB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj48Q09ERT5MaXN0PC9DT0RFPjwvQT4gb2YgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+PENPREU+U3RyaW5nPC9DT0RFPjwvQT4gdmFsdWVzCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InhsaXN0VmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgoteGxpc3RWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPiA8Qj54bGlzdFZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgYnkgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sI2dldExpc3RWYWx1ZSgpIj48Q09ERT5nZXRMaXN0VmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+UmV0dXJucyB0aGUgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+IG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Q09ERT5YbWxOTVRPS0VOPC9DT0RFPjwvQT4gdmFsdWVzCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldChqYXZhLnV0aWwuTGlzdCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT4mbmJzcDtsKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIGJ5IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCNnZXRMaXN0VmFsdWUoKSI+PENPREU+Z2V0TGlzdFZhbHVlKCk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlNldHMgdGhlIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPjxDT0RFPkxpc3Q8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxOTVRPS0VOUy5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5ZmE4M2YuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjczICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDc6MDEgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxOT1RBVElPTi5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE5PVEFUSU9OLkZhY3RvcnksWG1sTk9UQVRJT04uRmFjdG9yeSBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sTk9UQVRJT04uRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUNsYXNzIFhtbE5PVEFUSU9OLkZhY3Rvcnk8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxOT1RBVElPTi5GYWN0b3J5PC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+RW5jbG9zaW5nIGNsYXNzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj5YbWxOT1RBVElPTjwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIDxCPlhtbE5PVEFUSU9OLkZhY3Rvcnk8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvREw+Ci0KLTxQPgotQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+PENPREU+WG1sTk9UQVRJT048L0NPREU+PC9BPi4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+WG1sTk9UQVRJT048L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPm5ld0luc3RhbmNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPjxDT0RFPlhtbE5PVEFUSU9OPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj5YbWxOT1RBVElPTjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5zdGFuY2U8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPjxDT0RFPlhtbE5PVEFUSU9OPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPlhtbE5PVEFUSU9OPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+bmV3VmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj48Q09ERT5YbWxOT1RBVElPTjwvQ09ERT48L0E+IHZhbHVlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+WG1sTk9UQVRJT048L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPjxDT0RFPlhtbE5PVEFUSU9OPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+WG1sTk9UQVRJT048L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPjxDT0RFPlhtbE5PVEFUSU9OPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+WG1sTk9UQVRJT048L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj48Q09ERT5YbWxOT1RBVElPTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+WG1sTk9UQVRJT048L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj48Q09ERT5YbWxOT1RBVElPTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+WG1sTk9UQVRJT048L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+PENPREU+WG1sTk9UQVRJT048L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+WG1sTk9UQVRJT048L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+PENPREU+WG1sTk9UQVRJT048L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+WG1sTk9UQVRJT048L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPjxDT0RFPlhtbE5PVEFUSU9OPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj5YbWxOT1RBVElPTjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+PENPREU+WG1sTk9UQVRJT048L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPlhtbE5PVEFUSU9OPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+PENPREU+WG1sTk9UQVRJT048L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPlhtbE5PVEFUSU9OPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+PENPREU+WG1sTk9UQVRJT048L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPlhtbE5PVEFUSU9OPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPjxDT0RFPlhtbE5PVEFUSU9OPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj5YbWxOT1RBVElPTjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj48Q09ERT5YbWxOT1RBVElPTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+WG1sTk9UQVRJT048L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj48Q09ERT5YbWxOT1RBVElPTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+WG1sTk9UQVRJT048L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj48Q09ERT5YbWxOT1RBVElPTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjY2xvbmUoKSI+Y2xvbmU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZ2V0Q2xhc3MoKSI+Z2V0Q2xhc3M8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj5YbWxOT1RBVElPTjwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+PENPREU+WG1sTk9UQVRJT048L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPlhtbE5PVEFUSU9OPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+PENPREU+WG1sTk9UQVRJT048L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj5YbWxOT1RBVElPTjwvQT4gPEI+bmV3VmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj48Q09ERT5YbWxOT1RBVElPTjwvQ09ERT48L0E+IHZhbHVlCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPlhtbE5PVEFUSU9OPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPjxDT0RFPlhtbE5PVEFUSU9OPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPlhtbE5PVEFUSU9OPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPjxDT0RFPlhtbE5PVEFUSU9OPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPlhtbE5PVEFUSU9OPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+PENPREU+WG1sTk9UQVRJT048L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPlhtbE5PVEFUSU9OPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+PENPREU+WG1sTk9UQVRJT048L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj5YbWxOT1RBVElPTjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+PENPREU+WG1sTk9UQVRJT048L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+WG1sTk9UQVRJT048L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPjxDT0RFPlhtbE5PVEFUSU9OPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+WG1sTk9UQVRJT048L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj48Q09ERT5YbWxOT1RBVElPTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+WG1sTk9UQVRJT048L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj48Q09ERT5YbWxOT1RBVElPTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj5YbWxOT1RBVElPTjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cikKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj48Q09ERT5YbWxOT1RBVElPTjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPlhtbE5PVEFUSU9OPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPjxDT0RFPlhtbE5PVEFUSU9OPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+WG1sTk9UQVRJT048L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPjxDT0RFPlhtbE5PVEFUSU9OPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+WG1sTk9UQVRJT048L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPjxDT0RFPlhtbE5PVEFUSU9OPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPlhtbE5PVEFUSU9OPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPjxDT0RFPlhtbE5PVEFUSU9OPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+WG1sTk9UQVRJT048L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+PENPREU+WG1sTk9UQVRJT048L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjEwMzZjLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyODQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1OCBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbE5PVEFUSU9OIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE5PVEFUSU9OLFhtbE5PVEFUSU9OIGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sTk9UQVRJT04gKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sTk9UQVRJT04uaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFhtbE5PVEFUSU9OPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlhtbE5PVEFUSU9OPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvREw+Ci0KLTxQPgotQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI05PVEFUSU9OIj54czpOT1RBVElPTjwvYT4gdHlwZS4KLSA8cD4KLSBOT1RBVElPTnMgYXJlIGEgbWVjaGFuaXNtIGluIFhNTCBTY2hlbWEgdGhhdCBpcyBwcm92aWRlZAotIGZvciBwYXJ0aWFsIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBOT1RBVElPTnMgaW4gRFREcy4gIFhNTCBTY2hlbWEKLSB1c2VycyBzaG91bGQgYWxtb3N0IG5ldmVyIGhhdmUgYW55IHJlYXNvbiB0byB1c2UgdGhpcyBkYXRhIHR5cGUuCi0gPHA+Ci0gQ29udmVydGlibGUgdG8gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+PENPREU+U3RyaW5nPC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibmVzdGVkX2NsYXNzX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TmVzdGVkIENsYXNzIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtjbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLkZhY3RvcnkuaHRtbCI+WG1sTk9UQVRJT04uRmFjdG9yeTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj48Q09ERT5YbWxOT1RBVElPTjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+WG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sI3R5cGUiPnR5cGU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9ImZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPkZpZWxkcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNFUVVBTCI+RVFVQUw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0dSRUFURVJfVEhBTiI+R1JFQVRFUl9USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNMRVNTX1RIQU4iPkxFU1NfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTk9UX0VRVUFMIj5OT1RfRVFVQUw8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI2dldFN0cmluZ1ZhbHVlKCkiPmdldFN0cmluZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0KGphdmEubGFuZy5TdHJpbmcpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzdHJpbmdWYWx1ZSgpIj5zdHJpbmdWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY2hhbmdlVHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj5jaGFuZ2VUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVG8oamF2YS5sYW5nLk9iamVjdCkiPmNvbXBhcmVUbzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+Y29tcGFyZVZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb3B5KCkiPmNvcHk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc0ltbXV0YWJsZSgpIj5pc0ltbXV0YWJsZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNOaWwoKSI+aXNOaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NjaGVtYVR5cGUoKSI+c2NoZW1hVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldE5pbCgpIj5zZXROaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZSgpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlRXF1YWxzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+dmFsdWVFcXVhbHM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlSGFzaENvZGUoKSI+dmFsdWVIYXNoQ29kZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFRva2VuU291cmNlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNkb2N1bWVudFByb3BlcnRpZXMoKSI+ZG9jdW1lbnRQcm9wZXJ0aWVzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI21vbml0b3IoKSI+bW9uaXRvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdDdXJzb3IoKSI+bmV3Q3Vyc29yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUoKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0oKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKCkiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKCkiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dCgpIj54bWxUZXh0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+eG1sVGV4dDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9InR5cGUiPjwhLS0gLS0+PC9BPjxIMz4KLXR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPnR5cGU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxOT1RBVElPTi5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODAzN2Q2Ni4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY3MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ3OjAwIFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sTmFtZS5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE5hbWUuRmFjdG9yeSxYbWxOYW1lLkZhY3RvcnkgY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbE5hbWUuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sTmFtZS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sTmFtZS5GYWN0b3J5PC9IMj4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5qYXZhLmxhbmcuT2JqZWN0PC9BPgotICB8Ci0gICstLTxCPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sTmFtZS5GYWN0b3J5PC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+RW5jbG9zaW5nIGNsYXNzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPlhtbE5hbWU8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyA8Qj5YbWxOYW1lLkZhY3Rvcnk8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvREw+Ci0KLTxQPgotQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj48Q09ERT5YbWxOYW1lPC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+WG1sTmFtZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj5uZXdJbnN0YW5jZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPjxDT0RFPlhtbE5hbWU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+WG1sTmFtZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnN0YW5jZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj48Q09ERT5YbWxOYW1lPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPlhtbE5hbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPm5ld1ZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj48Q09ERT5YbWxOYW1lPC9DT0RFPjwvQT4gdmFsdWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPlhtbE5hbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7Zik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj48Q09ERT5YbWxOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj5YbWxOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+PENPREU+WG1sTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+WG1sTmFtZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj48Q09ERT5YbWxOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPlhtbE5hbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+PENPREU+WG1sTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj5YbWxOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj48Q09ERT5YbWxOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+WG1sTmFtZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+PENPREU+WG1sTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPlhtbE5hbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj48Q09ERT5YbWxOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPlhtbE5hbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj48Q09ERT5YbWxOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPlhtbE5hbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+PENPREU+WG1sTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj5YbWxOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPjxDT0RFPlhtbE5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+WG1sTmFtZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+PENPREU+WG1sTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj5YbWxOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj48Q09ERT5YbWxOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPlhtbE5hbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+PENPREU+WG1sTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj5YbWxOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPjxDT0RFPlhtbE5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj5YbWxOYW1lPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPjxDT0RFPlhtbE5hbWU8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+WG1sTmFtZTwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+PENPREU+WG1sTmFtZTwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+WG1sTmFtZTwvQT4gPEI+bmV3VmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPjxDT0RFPlhtbE5hbWU8L0NPREU+PC9BPiB2YWx1ZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPlhtbE5hbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPjxDT0RFPlhtbE5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7TXk6TmFtZSZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj5YbWxOYW1lPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPjxDT0RFPlhtbE5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7TXk6TmFtZSZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj5YbWxOYW1lPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpCi0gICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+PENPREU+WG1sTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj5YbWxOYW1lPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj48Q09ERT5YbWxOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj5YbWxOYW1lPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSkKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj48Q09ERT5YbWxOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+WG1sTmFtZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj48Q09ERT5YbWxOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj5YbWxOYW1lPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpCi0gICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+PENPREU+WG1sTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj5YbWxOYW1lPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj48Q09ERT5YbWxOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+WG1sTmFtZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cikKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj48Q09ERT5YbWxOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj5YbWxOYW1lPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+PENPREU+WG1sTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+WG1sTmFtZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSkKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPjxDT0RFPlhtbE5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPlhtbE5hbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPjxDT0RFPlhtbE5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj5YbWxOYW1lPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPjxDT0RFPlhtbE5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPlhtbE5hbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj48Q09ERT5YbWxOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sTmFtZS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI0MzgyMy4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMTYgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1OCBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbE5hbWUgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sTmFtZSxYbWxOYW1lIGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sTmFtZSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxOYW1lLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBYbWxOYW1lPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj5YbWxTdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPlhtbFRva2VuPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0REPgotPC9ETD4KLTxETD4KLTxEVD48Qj5BbGwgS25vd24gU3ViaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj5YbWxFTlRJVFk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPlhtbElEPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj5YbWxJRFJFRjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPlhtbE5DTmFtZTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlhtbE5hbWU8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj5YbWxUb2tlbjwvQT48L0RMPgotCi08UD4KLUNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNOYW1lIj54czpOYW1lPC9hPiB0eXBlLgotIE9uZSBvZiB0aGUgZGVyaXZlZCB0eXBlcyBiYXNlZCBvbiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3N0cmluZyI+eHM6c3RyaW5nPC9hPi4KLSA8cD4KLSBUaGlzIGtpbmQgb2Ygc3RyaW5nIGlzIHRoZSBzYW1lIGFzIHRoZSBsZXhpY2FsIHJlcHJlc2VudGF0aW9uIHVzZWQgZm9yIFhNTCAxLjAKLSBlbGVtZW50IGFuZCBhdHRyaWJ1dGUgbmFtZXMsIGUuZy4sICJwcmU6YS1iLmNkZWYiLiAgSXQgaXMganVzdCBhIHBoeXNpY2FsCi0gc3RyaW5nLCBob3dldmVyLCBhbmQgaXQgc2hvdWxkIE5PVCBiZSBjb25mdXNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+PENPREU+WG1sUU5hbWU8L0NPREU+PC9BPiwKLSB3aGljaCBpcyBhIGxvZ2ljYWwgY29tYmluYXRpb24gb2YgbG9jYWxuYW1lIGFuZCBuYW1lc3BhY2UgVVJJLgotIDxwPgotIENvbnZlcnRpYmxlIHRvIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPjxDT0RFPlN0cmluZzwvQ09ERT48L0E+LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLkZhY3RvcnkuaHRtbCI+WG1sTmFtZS5GYWN0b3J5PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+PENPREU+WG1sTmFtZTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVG9rZW4iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+WG1sVG9rZW48L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5GYWN0b3J5Lmh0bWwiPlhtbFRva2VuLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sTm9ybWFsaXplZFN0cmluZyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFN0cmluZyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+WG1sU3RyaW5nPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sU3RyaW5nLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+WG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwjdHlwZSI+dHlwZTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+RmllbGRzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0VRVUFMIj5FUVVBTDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjR1JFQVRFUl9USEFOIj5HUkVBVEVSX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0xFU1NfVEhBTiI+TEVTU19USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNOT1RfRVFVQUwiPk5PVF9FUVVBTDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjZ2V0U3RyaW5nVmFsdWUoKSI+Z2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXQoamF2YS5sYW5nLlN0cmluZykiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj5zZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3N0cmluZ1ZhbHVlKCkiPnN0cmluZ1ZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjaGFuZ2VUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPmNoYW5nZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KSI+Y29tcGFyZVRvPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5jb21wYXJlVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvcHkoKSI+Y29weTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzSW1tdXRhYmxlKCkiPmlzSW1tdXRhYmxlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc05pbCgpIj5pc05pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2NoZW1hVHlwZSgpIj5zY2hlbWFUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0TmlsKCkiPnNldE5pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKCkiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVFcXVhbHMob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj52YWx1ZUVxdWFsczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVIYXNoQ29kZSgpIj52YWx1ZUhhc2hDb2RlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVG9rZW5Tb3VyY2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI2RvY3VtZW50UHJvcGVydGllcygpIj5kb2N1bWVudFByb3BlcnRpZXM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbW9uaXRvcigpIj5tb25pdG9yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0N1cnNvcigpIj5uZXdDdXJzb3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZSgpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbSgpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIoKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0oKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0pIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KCkiPnhtbFRleHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj54bWxUZXh0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0idHlwZSI+PCEtLSAtLT48L0E+PEgzPgotdHlwZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+dHlwZTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbE5hbWUuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjJjOTYxLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NzMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0NzowMSBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5LFhtbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5IGNsYXNzIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBYbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeTwvSDI+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+amF2YS5sYW5nLk9iamVjdDwvQT4KLSAgfAotICArLS08Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5PC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+RW5jbG9zaW5nIGNsYXNzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+WG1sTmVnYXRpdmVJbnRlZ2VyPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgPEI+WG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvREw+Ci0KLTxQPgotQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+WG1sTmVnYXRpdmVJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2UoKSI+bmV3SW5zdGFuY2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0luc3RhbmNlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI25ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj5uZXdWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPiB2YWx1ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOZWdhdGl2ZUludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+WG1sTmVnYXRpdmVJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOZWdhdGl2ZUludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+WG1sTmVnYXRpdmVJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOZWdhdGl2ZUludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlcikiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+WG1sTmVnYXRpdmVJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+WG1sTmVnYXRpdmVJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOZWdhdGl2ZUludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOZWdhdGl2ZUludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOZWdhdGl2ZUludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNjbG9uZSgpIj5jbG9uZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj5lcXVhbHM8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2ZpbmFsaXplKCkiPmZpbmFsaXplPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNnZXRDbGFzcygpIj5nZXRDbGFzczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjaGFzaENvZGUoKSI+aGFzaENvZGU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeSgpIj5ub3RpZnk8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeUFsbCgpIj5ub3RpZnlBbGw8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KCkiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZykiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZywgaW50KSI+d2FpdDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOZWdhdGl2ZUludGVnZXI8L0E+IDxCPm5ld0luc3RhbmNlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOZWdhdGl2ZUludGVnZXI8L0E+IDxCPm5ld0luc3RhbmNlPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQT4gPEI+bmV3VmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gdmFsdWUKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDstMTIzNDU2Nzg5MCZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7LTEyMzQ1Njc4OTAmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOZWdhdGl2ZUludGVnZXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOZWdhdGl2ZUludGVnZXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOZWdhdGl2ZUludGVnZXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+WG1sTmVnYXRpdmVJbnRlZ2VyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+WG1sTmVnYXRpdmVJbnRlZ2VyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+WG1sTmVnYXRpdmVJbnRlZ2VyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOZWdhdGl2ZUludGVnZXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOZWdhdGl2ZUludGVnZXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOZWdhdGl2ZUludGVnZXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmEzZDYxYS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ2OjU4IFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sTmVnYXRpdmVJbnRlZ2VyIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE5lZ2F0aXZlSW50ZWdlcixYbWxOZWdhdGl2ZUludGVnZXIgaW50ZXJmYWNlIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxOZWdhdGl2ZUludGVnZXIgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBYbWxOZWdhdGl2ZUludGVnZXI8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0E+PC9ETD4KLQotPFA+Ci1Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jbmVnYXRpdmVJbnRlZ2VyIj54czpuZWdhdGl2ZUludGVnZXI8L2E+IHR5cGUuCi0gT25lIG9mIHRoZSBkZXJpdmVkIHR5cGVzIGJhc2VkIG9uIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZGVjaW1hbCI+eHM6ZGVjaW1hbDwvYT4uCi0gPHA+Ci0gVmVyaWZpZWQgdG8gYmUgbmVnYXRpdmUgd2hlbiB2YWxpZGF0aW5nLgotIDxwPgotIENvbnZlcnRpYmxlIHRvIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIj48Q09ERT5CaWdJbnRlZ2VyPC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibmVzdGVkX2NsYXNzX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TmVzdGVkIENsYXNzIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtjbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbE5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE5vblBvc2l0aXZlSW50ZWdlciI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sSW50ZWdlciI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sSW50ZWdlci5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERlY2ltYWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwiPlhtbERlY2ltYWwuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIj5YbWxPYmplY3QuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sI3R5cGUiPnR5cGU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9ImZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPkZpZWxkcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNFUVVBTCI+RVFVQUw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0dSRUFURVJfVEhBTiI+R1JFQVRFUl9USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNMRVNTX1RIQU4iPkxFU1NfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTk9UX0VRVUFMIj5OT1RfRVFVQUw8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEludGVnZXIiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI2JpZ0ludGVnZXJWYWx1ZSgpIj5iaWdJbnRlZ2VyVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCNnZXRCaWdJbnRlZ2VyVmFsdWUoKSI+Z2V0QmlnSW50ZWdlclZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwjc2V0KGphdmEubWF0aC5CaWdJbnRlZ2VyKSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwjc2V0QmlnSW50ZWdlclZhbHVlKGphdmEubWF0aC5CaWdJbnRlZ2VyKSI+c2V0QmlnSW50ZWdlclZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sRGVjaW1hbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjYmlnRGVjaW1hbFZhbHVlKCkiPmJpZ0RlY2ltYWxWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI2dldEJpZ0RlY2ltYWxWYWx1ZSgpIj5nZXRCaWdEZWNpbWFsVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCNzZXQoamF2YS5tYXRoLkJpZ0RlY2ltYWwpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCNzZXRCaWdEZWNpbWFsVmFsdWUoamF2YS5tYXRoLkJpZ0RlY2ltYWwpIj5zZXRCaWdEZWNpbWFsVmFsdWU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNnZXRTdHJpbmdWYWx1ZSgpIj5nZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldChqYXZhLmxhbmcuU3RyaW5nKSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0U3RyaW5nVmFsdWUoamF2YS5sYW5nLlN0cmluZykiPnNldFN0cmluZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc3RyaW5nVmFsdWUoKSI+c3RyaW5nVmFsdWU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NoYW5nZVR5cGUob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlKSI+Y2hhbmdlVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVRvKGphdmEubGFuZy5PYmplY3QpIj5jb21wYXJlVG88L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPmNvbXBhcmVWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29weSgpIj5jb3B5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZykiPmV4ZWNRdWVyeTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPmV4ZWNRdWVyeTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNJbW11dGFibGUoKSI+aXNJbW11dGFibGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzTmlsKCkiPmlzTmlsPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzY2hlbWFUeXBlKCkiPnNjaGVtYVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXROaWwoKSI+c2V0TmlsPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUoKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWx1ZUVxdWFscyhvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnZhbHVlRXF1YWxzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWx1ZUhhc2hDb2RlKCkiPnZhbHVlSGFzaENvZGU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxUb2tlblNvdXJjZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjZG9jdW1lbnRQcm9wZXJ0aWVzKCkiPmRvY3VtZW50UHJvcGVydGllczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNtb25pdG9yKCkiPm1vbml0b3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3Q3Vyc29yKCkiPm5ld0N1cnNvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKCkiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0lucHV0U3RyZWFtKCkiPm5ld0lucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0lucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0lucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcigpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdYTUxJbnB1dFN0cmVhbSgpIj5uZXdYTUxJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdYTUxJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdYTUxJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSkiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSkiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uV3JpdGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uV3JpdGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQoKSI+eG1sVGV4dDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnhtbFRleHQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJ0eXBlIj48IS0tIC0tPjwvQT48SDM+Ci10eXBlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPiA8Qj50eXBlPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTEyOTMzMC4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjczICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDc6MDEgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeSxYbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeSBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUNsYXNzIFhtbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5PC9IMj4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5qYXZhLmxhbmcuT2JqZWN0PC9BPgotICB8Ci0gICstLTxCPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5FbmNsb3NpbmcgY2xhc3M6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyA8Qj5YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeTwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9ETD4KLQotPFA+Ci1BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj5uZXdJbnN0YW5jZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5zdGFuY2U8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPm5ld1ZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+IHZhbHVlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9BPiA8Qj5uZXdWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPiB2YWx1ZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzEyMzQ1Njc4OTAmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzEyMzQ1Njc4OTAmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuRmFjdG9yeS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlZTc4NTEuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1OCBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbE5vbk5lZ2F0aXZlSW50ZWdlciAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxOb25OZWdhdGl2ZUludGVnZXIsWG1sTm9uTmVnYXRpdmVJbnRlZ2VyIGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sTm9uTmVnYXRpdmVJbnRlZ2VyIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvREQ+Ci08L0RMPgotPERMPgotPERUPjxCPkFsbCBLbm93biBTdWJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbFBvc2l0aXZlSW50ZWdlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPlhtbFVuc2lnbmVkQnl0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj5YbWxVbnNpZ25lZExvbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+WG1sVW5zaWduZWRTaG9ydDwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT48L0RMPgotCi08UD4KLUNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNub25OZWdhdGl2ZUludGVnZXIiPnhzOm5vbk5lZ2F0aXZlSW50ZWdlcjwvYT4gdHlwZS4KLSBPbmUgb2YgdGhlIGRlcml2ZWQgdHlwZXMgYmFzZWQgb24gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkZWNpbWFsIj54czpkZWNpbWFsPC9hPi4KLSA8cD4KLSBWZXJpZmllZCB0byBiZSB6ZXJvIG9yIHBvc2l0aXZlIHdoZW4gdmFsaWRhdGluZy4KLSA8cD4KLSBDb252ZXJ0aWJsZSB0byA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCI+PENPREU+QmlnSW50ZWdlcjwvQ09ERT48L0E+LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxJbnRlZ2VyIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxJbnRlZ2VyLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sRGVjaW1hbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCI+WG1sRGVjaW1hbC5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPlhtbE9iamVjdC5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwjdHlwZSI+dHlwZTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+RmllbGRzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0VRVUFMIj5FUVVBTDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjR1JFQVRFUl9USEFOIj5HUkVBVEVSX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0xFU1NfVEhBTiI+TEVTU19USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNOT1RfRVFVQUwiPk5PVF9FUVVBTDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sSW50ZWdlciI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwjYmlnSW50ZWdlclZhbHVlKCkiPmJpZ0ludGVnZXJWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI2dldEJpZ0ludGVnZXJWYWx1ZSgpIj5nZXRCaWdJbnRlZ2VyVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCNzZXQoamF2YS5tYXRoLkJpZ0ludGVnZXIpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCNzZXRCaWdJbnRlZ2VyVmFsdWUoamF2YS5tYXRoLkJpZ0ludGVnZXIpIj5zZXRCaWdJbnRlZ2VyVmFsdWU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxEZWNpbWFsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCNiaWdEZWNpbWFsVmFsdWUoKSI+YmlnRGVjaW1hbFZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjZ2V0QmlnRGVjaW1hbFZhbHVlKCkiPmdldEJpZ0RlY2ltYWxWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI3NldChqYXZhLm1hdGguQmlnRGVjaW1hbCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI3NldEJpZ0RlY2ltYWxWYWx1ZShqYXZhLm1hdGguQmlnRGVjaW1hbCkiPnNldEJpZ0RlY2ltYWxWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI2dldFN0cmluZ1ZhbHVlKCkiPmdldFN0cmluZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0KGphdmEubGFuZy5TdHJpbmcpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzdHJpbmdWYWx1ZSgpIj5zdHJpbmdWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY2hhbmdlVHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj5jaGFuZ2VUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVG8oamF2YS5sYW5nLk9iamVjdCkiPmNvbXBhcmVUbzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+Y29tcGFyZVZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb3B5KCkiPmNvcHk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc0ltbXV0YWJsZSgpIj5pc0ltbXV0YWJsZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNOaWwoKSI+aXNOaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NjaGVtYVR5cGUoKSI+c2NoZW1hVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldE5pbCgpIj5zZXROaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZSgpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlRXF1YWxzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+dmFsdWVFcXVhbHM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlSGFzaENvZGUoKSI+dmFsdWVIYXNoQ29kZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFRva2VuU291cmNlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNkb2N1bWVudFByb3BlcnRpZXMoKSI+ZG9jdW1lbnRQcm9wZXJ0aWVzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI21vbml0b3IoKSI+bW9uaXRvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdDdXJzb3IoKSI+bmV3Q3Vyc29yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUoKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0oKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKCkiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKCkiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dCgpIj54bWxUZXh0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+eG1sVGV4dDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9InR5cGUiPjwhLS0gLS0+PC9BPjxIMz4KLXR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPnR5cGU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU5M2M4OC4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjczICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDc6MDEgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeSxYbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeSBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeTwvQj4KLTwvUFJFPgotPERMPgotPERUPjxCPkVuY2xvc2luZyBjbGFzczo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIDxCPlhtbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5PC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0RMPgotCi08UD4KLUEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPi4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPm5ld0luc3RhbmNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnN0YW5jZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+bmV3VmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gdmFsdWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7Zik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjY2xvbmUoKSI+Y2xvbmU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZ2V0Q2xhc3MoKSI+Z2V0Q2xhc3M8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0E+IDxCPm5ld1ZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IHZhbHVlCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7LTEyMzQ1Njc4OTAmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0Oy0xMjM0NTY3ODkwJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlcikiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViZTRlMDcuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1OCBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbE5vblBvc2l0aXZlSW50ZWdlciAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxOb25Qb3NpdGl2ZUludGVnZXIsWG1sTm9uUG9zaXRpdmVJbnRlZ2VyIGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sTm9uUG9zaXRpdmVJbnRlZ2VyIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgWG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9ERD4KLTwvREw+Ci08REw+Ci08RFQ+PEI+QWxsIEtub3duIFN1YmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+WG1sTmVnYXRpdmVJbnRlZ2VyPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBpbnRlcmZhY2UgPEI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPjwvREw+Ci0KLTxQPgotQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI25vblBvc2l0aXZlSW50ZWdlciI+eHM6bm9uUG9zaXRpdmVJbnRlZ2VyPC9hPiB0eXBlLgotIE9uZSBvZiB0aGUgZGVyaXZlZCB0eXBlcyBiYXNlZCBvbiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2RlY2ltYWwiPnhzOmRlY2ltYWw8L2E+LgotIDxwPgotIFZlcmlmaWVkIHRvIGJlIHplcm8gb3IgbmVnYXRpdmUgd2hlbiB2YWxpZGF0aW5nLgotIDxwPgotIENvbnZlcnRpYmxlIHRvIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnSW50ZWdlci5odG1sIj48Q09ERT5CaWdJbnRlZ2VyPC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibmVzdGVkX2NsYXNzX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TmVzdGVkIENsYXNzIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtjbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEludGVnZXIiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbEludGVnZXIuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxEZWNpbWFsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuRmFjdG9yeS5odG1sIj5YbWxEZWNpbWFsLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+WG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCN0eXBlIj50eXBlPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjRVFVQUwiPkVRVUFMPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNHUkVBVEVSX1RIQU4iPkdSRUFURVJfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTEVTU19USEFOIj5MRVNTX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI05PVF9FUVVBTCI+Tk9UX0VRVUFMPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxJbnRlZ2VyIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCNiaWdJbnRlZ2VyVmFsdWUoKSI+YmlnSW50ZWdlclZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwjZ2V0QmlnSW50ZWdlclZhbHVlKCkiPmdldEJpZ0ludGVnZXJWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI3NldChqYXZhLm1hdGguQmlnSW50ZWdlcikiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI3NldEJpZ0ludGVnZXJWYWx1ZShqYXZhLm1hdGguQmlnSW50ZWdlcikiPnNldEJpZ0ludGVnZXJWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERlY2ltYWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI2JpZ0RlY2ltYWxWYWx1ZSgpIj5iaWdEZWNpbWFsVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCNnZXRCaWdEZWNpbWFsVmFsdWUoKSI+Z2V0QmlnRGVjaW1hbFZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjc2V0KGphdmEubWF0aC5CaWdEZWNpbWFsKSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjc2V0QmlnRGVjaW1hbFZhbHVlKGphdmEubWF0aC5CaWdEZWNpbWFsKSI+c2V0QmlnRGVjaW1hbFZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjZ2V0U3RyaW5nVmFsdWUoKSI+Z2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXQoamF2YS5sYW5nLlN0cmluZykiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj5zZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3N0cmluZ1ZhbHVlKCkiPnN0cmluZ1ZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjaGFuZ2VUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPmNoYW5nZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KSI+Y29tcGFyZVRvPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5jb21wYXJlVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvcHkoKSI+Y29weTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzSW1tdXRhYmxlKCkiPmlzSW1tdXRhYmxlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc05pbCgpIj5pc05pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2NoZW1hVHlwZSgpIj5zY2hlbWFUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0TmlsKCkiPnNldE5pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKCkiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVFcXVhbHMob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj52YWx1ZUVxdWFsczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVIYXNoQ29kZSgpIj52YWx1ZUhhc2hDb2RlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVG9rZW5Tb3VyY2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI2RvY3VtZW50UHJvcGVydGllcygpIj5kb2N1bWVudFByb3BlcnRpZXM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbW9uaXRvcigpIj5tb25pdG9yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0N1cnNvcigpIj5uZXdDdXJzb3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZSgpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbSgpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIoKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0oKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0pIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KCkiPnhtbFRleHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj54bWxUZXh0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0idHlwZSI+PCEtLSAtLT48L0E+PEgzPgotdHlwZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+dHlwZTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk3ZjgwNi4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY3MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ3OjAxIFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeSxYbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkgY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUNsYXNzIFhtbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeTwvSDI+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+amF2YS5sYW5nLk9iamVjdDwvQT4KLSAgfAotICArLS08Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeTwvQj4KLTwvUFJFPgotPERMPgotPERUPjxCPkVuY2xvc2luZyBjbGFzczo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgPEI+WG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5PC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0RMPgotCi08UD4KLUEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+PENPREU+WG1sTm9ybWFsaXplZFN0cmluZzwvQ09ERT48L0E+LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2UoKSI+bmV3SW5zdGFuY2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj48Q09ERT5YbWxOb3JtYWxpemVkU3RyaW5nPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5zdGFuY2U8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+PENPREU+WG1sTm9ybWFsaXplZFN0cmluZzwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sI25ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj5uZXdWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+PENPREU+WG1sTm9ybWFsaXplZFN0cmluZzwvQ09ERT48L0E+IHZhbHVlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+PENPREU+WG1sTm9ybWFsaXplZFN0cmluZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPjxDT0RFPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+PENPREU+WG1sTm9ybWFsaXplZFN0cmluZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPjxDT0RFPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+PENPREU+WG1sTm9ybWFsaXplZFN0cmluZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPjxDT0RFPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+PENPREU+WG1sTm9ybWFsaXplZFN0cmluZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+PENPREU+WG1sTm9ybWFsaXplZFN0cmluZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPjxDT0RFPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj48Q09ERT5YbWxOb3JtYWxpemVkU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPjxDT0RFPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+PENPREU+WG1sTm9ybWFsaXplZFN0cmluZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPjxDT0RFPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj48Q09ERT5YbWxOb3JtYWxpemVkU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNjbG9uZSgpIj5jbG9uZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj5lcXVhbHM8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2ZpbmFsaXplKCkiPmZpbmFsaXplPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNnZXRDbGFzcygpIj5nZXRDbGFzczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjaGFzaENvZGUoKSI+aGFzaENvZGU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeSgpIj5ub3RpZnk8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeUFsbCgpIj5ub3RpZnlBbGw8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KCkiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZykiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZywgaW50KSI+d2FpdDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZzwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj48Q09ERT5YbWxOb3JtYWxpemVkU3RyaW5nPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0E+IDxCPm5ld0luc3RhbmNlPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPjxDT0RFPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0E+IDxCPm5ld1ZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj48Q09ERT5YbWxOb3JtYWxpemVkU3RyaW5nPC9DT0RFPjwvQT4gdmFsdWUKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj48Q09ERT5YbWxOb3JtYWxpemVkU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OyBzdHJpbmcgdG8gbm9ybWFsaXplICZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPjxDT0RFPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7IHN0cmluZyB0byBub3JtYWxpemUgJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj48Q09ERT5YbWxOb3JtYWxpemVkU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPjxDT0RFPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPjxDT0RFPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPjxDT0RFPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj48Q09ERT5YbWxOb3JtYWxpemVkU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPjxDT0RFPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlcikiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPjxDT0RFPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj48Q09ERT5YbWxOb3JtYWxpemVkU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+PENPREU+WG1sTm9ybWFsaXplZFN0cmluZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+PENPREU+WG1sTm9ybWFsaXplZFN0cmluZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+PENPREU+WG1sTm9ybWFsaXplZFN0cmluZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPjxDT0RFPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNmZTE4YS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMDIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1OCBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbE5vcm1hbGl6ZWRTdHJpbmcgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sTm9ybWFsaXplZFN0cmluZyxYbWxOb3JtYWxpemVkU3RyaW5nIGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sTm9ybWFsaXplZFN0cmluZyAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwO01FVEhPRDwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgWG1sTm9ybWFsaXplZFN0cmluZzwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPlhtbFN0cmluZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9ERD4KLTwvREw+Ci08REw+Ci08RFQ+PEI+QWxsIEtub3duIFN1YmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVFkuaHRtbCI+WG1sRU5USVRZPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj5YbWxJRDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+WG1sSURSRUY8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPlhtbExhbmd1YWdlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPlhtbE5hbWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj5YbWxOQ05hbWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+WG1sTk1UT0tFTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+WG1sVG9rZW48L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGludGVyZmFjZSA8Qj5YbWxOb3JtYWxpemVkU3RyaW5nPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPlhtbFN0cmluZzwvQT48L0RMPgotCi08UD4KLUNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNub3JtYWxpemVkU3RyaW5nIj54czpub3JtYWxpemVkU3RyaW5nPC9hPiB0eXBlLgotIE9uZSBvZiB0aGUgZGVyaXZlZCB0eXBlcyBiYXNlZCBvbiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3N0cmluZyI+eHM6c3RyaW5nPC9hPi4KLSA8cD4KLSBBbiBub3JtYWxpemVkU3RyaW5nIHNpbXBseSBpcyBhIHN0cmluZyB3aGVyZSBhbGwgdGhlIGNhcnJpYWdlIHJldHVybiwKLSBsaW5lZmVlZCwgYW5kIHRhYiBjaGFyYWN0ZXJzIGhhdmUgYmVlbiBub3JtYWxpemVkIChzd2l0Y2hlZCB0bykgb3JkaW5hcnkKLSBzcGFjZSBjaGFyYWN0ZXJzLiAgVXNlIG5vcm1hbGl6ZWRTdHJpbmcgZm9yIGxvbmcgc3RyaW5ncyB0byBtYWtlIHRoZW0KLSBpbnNlbnNpdGl2ZSB0byBsaW5lIGJyZWFraW5nLiAgSWYgeW91IHdpc2ggdG8gb2Z0ZW4gYmUgaW5zZW5zaXRpdmUgdG8KLSBydW5zIG9mIHdoaXRlc3BhY2UgKGFzIGlzIG9mdGVuIHRoZSBjYXNlKSwgdXNlCi0gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyN0b2tlbiI+eHM6dG9rZW48L2E+Ci0gKGFrYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPjxDT0RFPlhtbFRva2VuPC9DT0RFPjwvQT4pIGluc3RlYWQuCi0gPHA+Ci0gQ29udmVydGlibGUgdG8gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+PENPREU+U3RyaW5nPC9DT0RFPjwvQT4uICBXaGVuIG9idGFpbmluZyB0aGUgc3RyaW5nVmFsdWUsIHRoZQotIHdoaXRlc3BhY2Utbm9ybWFsaXplZCB2YWx1ZSBpcyByZXR1cm5lZC4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5OZXN0ZWQgQ2xhc3MgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2NsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPjxDT0RFPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFN0cmluZyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+WG1sU3RyaW5nPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sU3RyaW5nLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+WG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwjdHlwZSI+dHlwZTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+RmllbGRzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0VRVUFMIj5FUVVBTDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjR1JFQVRFUl9USEFOIj5HUkVBVEVSX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0xFU1NfVEhBTiI+TEVTU19USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNOT1RfRVFVQUwiPk5PVF9FUVVBTDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjZ2V0U3RyaW5nVmFsdWUoKSI+Z2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXQoamF2YS5sYW5nLlN0cmluZykiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj5zZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3N0cmluZ1ZhbHVlKCkiPnN0cmluZ1ZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjaGFuZ2VUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPmNoYW5nZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KSI+Y29tcGFyZVRvPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5jb21wYXJlVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvcHkoKSI+Y29weTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzSW1tdXRhYmxlKCkiPmlzSW1tdXRhYmxlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc05pbCgpIj5pc05pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2NoZW1hVHlwZSgpIj5zY2hlbWFUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0TmlsKCkiPnNldE5pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKCkiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVFcXVhbHMob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj52YWx1ZUVxdWFsczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVIYXNoQ29kZSgpIj52YWx1ZUhhc2hDb2RlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVG9rZW5Tb3VyY2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI2RvY3VtZW50UHJvcGVydGllcygpIj5kb2N1bWVudFByb3BlcnRpZXM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbW9uaXRvcigpIj5tb25pdG9yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0N1cnNvcigpIj5uZXdDdXJzb3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZSgpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbSgpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIoKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0oKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0pIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KCkiPnhtbFRleHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj54bWxUZXh0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0idHlwZSI+PCEtLSAtLT48L0E+PEgzPgotdHlwZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+dHlwZTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVlZWE0OC4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODQ1ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDc6MDEgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxPYmplY3QuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QuRmFjdG9yeSxYbWxPYmplY3QuRmFjdG9yeSBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sT2JqZWN0LkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbE9iamVjdC5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sT2JqZWN0LkZhY3Rvcnk8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QuRmFjdG9yeTwvQj4KLTwvUFJFPgotPERMPgotPERUPjxCPkVuY2xvc2luZyBjbGFzczo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIDxCPlhtbE9iamVjdC5GYWN0b3J5PC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0RMPgotCi08UD4KLVN0YXRpYyBmYWN0b3J5IGNsYXNzIGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzLiAgTm90ZSB0aGF0IGlmCi0gYSB0eXBlIGNhbiBiZSBpbmZlcnJlZCBmcm9tIHRoZSBYTUwgYmVpbmcgbG9hZGVkIChmb3IgZXhhbXBsZSwKLSBieSByZWNvZ25pemluZyB0aGUgZG9jdW1lbnQgZWxlbWVudCBRTmFtZSksIHRoZW4gdGhlIGluc3RhbmNlCi0gcmV0dXJuZWQgYnkgYSBmYWN0b3J5IHdpbGwgaGF2ZSB0aGUgaW5mZXJyZWQgdHlwZS4gIE90aGVyd2lzZQotIHRoZSBGYWN0b3J5IHdpbGwgcmV0dXJuZWQgYW4gdW50eXBlZCBkb2N1bWVudC4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPm5ld0luc3RhbmNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhIG5ldywgY29tcGxldGVseSBlbXB0eSBpbnN0YW5jZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5zdGFuY2U8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhIG5ldywgY29tcGxldGVseSBlbXB0eSBpbnN0YW5jZSwgc3BlY2lmeWluZyBvcHRpb25zCi0gZm9yIHRoZSByb290IGVsZW1lbnQncyBkb2N1bWVudCB0eXBlIGFuZC9vciB3aGV0aGVyIHRvIHZhbGlkYXRlCi0gdmFsdWUgZmFjZXRzIGFzIHRoZXkgYXJlIHNldC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IHZhbGlkYXRpbmcgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj48Q09ERT5YTUxJbnB1dFN0cmVhbTwvQ09ERT48L0E+IHRoYXQgdGhyb3dzIGV4Y2VwdGlvbnMgd2hlbiB0aGUgaW5wdXQgaXMgbm90IHZhbGlkLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IHZhbGlkYXRpbmcgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj48Q09ERT5YTUxJbnB1dFN0cmVhbTwvQ09ERT48L0E+IHRoYXQgdGhyb3dzIGV4Y2VwdGlvbnMgCi0gd2hlbiB0aGUgaW5wdXQgaXMgbm90IHZhbGlkLCBzcGVjaWZ5aW5nIG9wdGlvbnMKLSBmb3IgdGhlIHJvb3QgZWxlbWVudCdzIGRvY3VtZW50IHR5cGUgYW5kL29yIHRoZSBjb2xsZWN0aW9uIG9iamVjdCB0byB1c2UKLSBhcyBhbiBlcnJvciBsaXN0ZW5lciB3aGlsZSB2YWxpZGF0aW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+bmV3VmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+PENPREU+WG1sT2JqZWN0PC9DT0RFPjwvQT4gdmFsdWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTYXhIYW5kbGVyLmh0bWwiPlhtbFNheEhhbmRsZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCNuZXdYbWxTYXhIYW5kbGVyKCkiPm5ld1htbFNheEhhbmRsZXI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGFuIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2F4SGFuZGxlci5odG1sIj48Q09ERT5YbWxTYXhIYW5kbGVyPC9DT0RFPjwvQT4gdGhhdCBjYW4gbG9hZCBhbiBYbWxPYmplY3QgZnJvbSBTQVggZXZlbnRzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNheEhhbmRsZXIuaHRtbCI+WG1sU2F4SGFuZGxlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sI25ld1htbFNheEhhbmRsZXIob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3WG1sU2F4SGFuZGxlcjwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGFuIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2F4SGFuZGxlci5odG1sIj48Q09ERT5YbWxTYXhIYW5kbGVyPC9DT0RFPjwvQT4gdGhhdCBjYW4gbG9hZCBhbiBYbWxPYmplY3QgZnJvbSBTQVggZXZlbnRzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIHRoZSBnaXZlbiA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPjxDT0RFPkZpbGU8L0NPREU+PC9BPiBhcyBYTUwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgdGhlIGdpdmVuIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+PENPREU+RmlsZTwvQ09ERT48L0E+IGFzIFhNTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtEZWNvZGVzIGFuZCBwYXJzZXMgdGhlIGdpdmVuIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPjxDT0RFPklucHV0U3RyZWFtPC9DT0RFPjwvQT4gYXMgWE1MLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0RlY29kZXMgYW5kIHBhcnNlcyB0aGUgZ2l2ZW4gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+PENPREU+SW5wdXRTdHJlYW08L0NPREU+PC9BPiBhcyBYTUwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnZlcnRzIHRoZSBnaXZlbiBET00gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+PENPREU+Tm9kZTwvQ09ERT48L0E+IGludG8gYW4gWG1sT2JqZWN0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb252ZXJ0cyB0aGUgZ2l2ZW4gRE9NIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPjxDT0RFPk5vZGU8L0NPREU+PC9BPiBpbnRvIGFuIFhtbE9iamVjdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyB0aGUgZ2l2ZW4gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPjxDT0RFPlJlYWRlcjwvQ09ERT48L0E+IGFzIFhNTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyB0aGUgZ2l2ZW4gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPjxDT0RFPlJlYWRlcjwvQ09ERT48L0E+IGFzIFhNTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgdGhlIGdpdmVuIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPjxDT0RFPlN0cmluZzwvQ09ERT48L0E+IGFzIFhNTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgdGhlIGdpdmVuIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPjxDT0RFPlN0cmluZzwvQ09ERT48L0E+IGFzIFhNTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7RG93bmxvYWRzIHRoZSBnaXZlbiA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPjxDT0RFPlVSTDwvQ09ERT48L0E+IGFzIFhNTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7RG93bmxvYWRzIHRoZSBnaXZlbiA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPjxDT0RFPlVSTDwvQ09ERT48L0E+IGFzIFhNTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtMb2FkcyB0aGUgZ2l2ZW4gPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj48Q09ERT5YTUxJbnB1dFN0cmVhbTwvQ09ERT48L0E+IGludG8gYW4gWG1sT2JqZWN0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0xvYWRzIHRoZSBnaXZlbiA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPjxDT0RFPlhNTElucHV0U3RyZWFtPC9DT0RFPjwvQT4gaW50byBhbiBYbWxPYmplY3QuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjY2xvbmUoKSI+Y2xvbmU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZ2V0Q2xhc3MoKSI+Z2V0Q2xhc3M8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYSBuZXcsIGNvbXBsZXRlbHkgZW1wdHkgaW5zdGFuY2UuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9QUkU+Ci08REw+Ci08REQ+PHA+Q3JlYXRlcyBhIG5ldywgY29tcGxldGVseSBlbXB0eSBpbnN0YW5jZSwgc3BlY2lmeWluZyBvcHRpb25zCi0gZm9yIHRoZSByb290IGVsZW1lbnQncyBkb2N1bWVudCB0eXBlIGFuZC9vciB3aGV0aGVyIHRvIHZhbGlkYXRlCi0gdmFsdWUgZmFjZXRzIGFzIHRoZXkgYXJlIHNldC48L3A+Ci0gCi0gVXNlIHRoZSA8ZW0+b3B0aW9uczwvZW0+IHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoZSBmb2xsb3dpbmc6PC9wPgotIAotIDx0YWJsZT4KLSA8dHI+PHRoPlRvIHNwZWNpZnkgdGhpczwvdGg+PHRoPlVzZSB0aGlzIG1ldGhvZDwvdGg+PC90cj4KLSA8dHI+Ci0gIDx0ZD5UaGUgZG9jdW1lbnQgdHlwZSBmb3IgdGhlIHJvb3QgZWxlbWVudC48L3RkPgotICA8dGQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0RG9jdW1lbnRUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPjxDT0RFPlhtbE9wdGlvbnMuc2V0RG9jdW1lbnRUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSk8L0NPREU+PC9BPjwvdGQ+Ci0gPC90cj4KLSA8dHI+Ci0gIDx0ZD5XaGV0aGVyIHZhbHVlIGZhY2V0cyBzaG91bGQgYmUgY2hlY2tlZCBhcyB0aGV5IGFyZSBzZXQuPC90ZD4KLSAgPHRkPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldFZhbGlkYXRlT25TZXQoKSI+PENPREU+WG1sT3B0aW9ucy5zZXRWYWxpZGF0ZU9uU2V0KCk8L0NPREU+PC9BPjwvdGQ+Ci0gPC90cj4KLSA8L3RhYmxlPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5vcHRpb25zPC9DT0RFPiAtIE9wdGlvbnMgc3BlY2lmeWluZyByb290IGRvY3VtZW50IHR5cGUgYW5kL29yIHZhbHVlIGZhY2V0IAotIGNoZWNraW5nLgotPERUPjxCPlJldHVybnM6PC9CPjxERD5BIG5ldywgZW1wdHkgaW5zdGFuY2Ugb2YgWG1sT2JqZWN0LjwvbGk+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiA8Qj5uZXdWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj48Q09ERT5YbWxPYmplY3Q8L0NPREU+PC9BPiB2YWx1ZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIHRoZSBnaXZlbiA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj48Q09ERT5TdHJpbmc8L0NPREU+PC9BPiBhcyBYTUwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyB0aGUgZ2l2ZW4gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+PENPREU+U3RyaW5nPC9DT0RFPjwvQT4gYXMgWE1MLgotIAotIFVzZSB0aGUgPGVtPm9wdGlvbnM8L2VtPiBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUgZm9sbG93aW5nOjwvcD4KLSAKLSA8dGFibGU+Ci0gPHRyPjx0aD5UbyBzcGVjaWZ5IHRoaXM8L3RoPjx0aD5Vc2UgdGhpcyBtZXRob2Q8L3RoPjwvdHI+Ci0gPHRyPgotICA8dGQ+VGhlIGRvY3VtZW50IHR5cGUgZm9yIHRoZSByb290IGVsZW1lbnQuPC90ZD4KLSAgPHRkPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldERvY3VtZW50VHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj48Q09ERT5YbWxPcHRpb25zLnNldERvY3VtZW50VHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpPC9DT0RFPjwvQT48L3RkPgotIDwvdHI+Ci0gPHRyPgotICA8dGQ+VG8gcGxhY2UgbGluZSBudW1iZXIgYW5ub3RhdGlvbnMgaW4gdGhlIHN0b3JlIHdoZW4gcGFyc2luZyBhIGRvY3VtZW50LjwvdGQ+Ci0gIDx0ZD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRMb2FkTGluZU51bWJlcnMoKSI+PENPREU+WG1sT3B0aW9ucy5zZXRMb2FkTGluZU51bWJlcnMoKTwvQ09ERT48L0E+PC90ZD4KLSA8L3RyPgotIDx0cj4KLSAgPHRkPlRvIHJlcGxhY2UgdGhlIGRvY3VtZW50IGVsZW1lbnQgd2l0aCB0aGUgc3BlY2lmaWVkIFFOYW1lIHdoZW4gcGFyc2luZy48L3RkPgotICA8dGQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0TG9hZFJlcGxhY2VEb2N1bWVudEVsZW1lbnQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjxDT0RFPlhtbE9wdGlvbnMuc2V0TG9hZFJlcGxhY2VEb2N1bWVudEVsZW1lbnQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSk8L0NPREU+PC9BPjwvdGQ+Ci0gPC90cj4KLSA8dHI+Ci0gIDx0ZD5UbyBzdHJpcCBhbGwgaW5zaWduaWZpY2FudCB3aGl0ZXNwYWNlIHdoZW4gcGFyc2luZyBhIGRvY3VtZW50LjwvdGQ+Ci0gIDx0ZD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRMb2FkU3RyaXBXaGl0ZXNwYWNlKCkiPjxDT0RFPlhtbE9wdGlvbnMuc2V0TG9hZFN0cmlwV2hpdGVzcGFjZSgpPC9DT0RFPjwvQT48L3RkPgotIDwvdHI+Ci0gPHRyPgotICA8dGQ+VG8gc3RyaXAgYWxsIGNvbW1lbnRzIHdoZW4gcGFyc2luZyBhIGRvY3VtZW50LjwvdGQ+Ci0gIDx0ZD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRMb2FkU3RyaXBDb21tZW50cygpIj48Q09ERT5YbWxPcHRpb25zLnNldExvYWRTdHJpcENvbW1lbnRzKCk8L0NPREU+PC9BPjwvdGQ+Ci0gPC90cj4KLSA8dHI+Ci0gIDx0ZD5UbyBzdHJpcCBhbGwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMgd2hlbiBwYXJzaW5nIGEgZG9jdW1lbnQuPC90ZD4KLSAgPHRkPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldExvYWRTdHJpcFByb2NpbnN0cygpIj48Q09ERT5YbWxPcHRpb25zLnNldExvYWRTdHJpcFByb2NpbnN0cygpPC9DT0RFPjwvQT48L3RkPgotIDwvdHI+Ci0gPHRyPgotICA8dGQ+QSBtYXAgb2YgbmFtZXNwYWNlIFVSSSBzdWJzdGl0dXRpb25zIHRvIHVzZSB3aGVuIHBhcnNpbmcgYSBkb2N1bWVudC48L3RkPgotICA8dGQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0TG9hZFN1YnN0aXR1dGVOYW1lc3BhY2VzKGphdmEudXRpbC5NYXApIj48Q09ERT5YbWxPcHRpb25zLnNldExvYWRTdWJzdGl0dXRlTmFtZXNwYWNlcyhqYXZhLnV0aWwuTWFwKTwvQ09ERT48L0E+PC90ZD4KLSA8L3RyPgotIDx0cj4KLSAgPHRkPkFkZGl0aW9uYWwgbmFtZXNwYWNlIG1hcHBpbmdzIHRvIGJlIGFkZGVkIHdoZW4gcGFyc2luZyBhIGRvY3VtZW50LjwvdGQ+Ci0gIDx0ZD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRMb2FkQWRkaXRpb25hbE5hbWVzcGFjZXMoamF2YS51dGlsLk1hcCkiPjxDT0RFPlhtbE9wdGlvbnMuc2V0TG9hZEFkZGl0aW9uYWxOYW1lc3BhY2VzKGphdmEudXRpbC5NYXApPC9DT0RFPjwvQT48L3RkPgotIDwvdHI+Ci0gPHRyPgotICA8dGQ+VG8gdHJpbSB0aGUgdW5kZXJseWluZyBYTUwgdGV4dCBidWZmZXIgaW1tZWRpYXRlbHkgYWZ0ZXIgcGFyc2luZyAKLSAgYSBkb2N1bWVudCwgcmVzdWx0aW5nIGluIGEgc21hbGxlciBtZW1vcnkgZm9vdHByaW50LjwvdGQ+Ci0gIDx0ZD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRMb2FkVHJpbVRleHRCdWZmZXIoKSI+PENPREU+WG1sT3B0aW9ucy5zZXRMb2FkVHJpbVRleHRCdWZmZXIoKTwvQ09ERT48L0E+PC90ZD4KLSA8L3RyPgotIDwvdGFibGU+Ci08UD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnM8L0NPREU+IC0gVGhlIHN0cmluZyB0byBwYXJzZS48REQ+PENPREU+b3B0aW9uczwvQ09ERT4gLSBPcHRpb25zIGFzIHNwZWNpZmllZC4KLTxEVD48Qj5SZXR1cm5zOjwvQj48REQ+QSBuZXcgaW5zdGFuY2UgY29udGFpbmluZyB0aGUgc3BlY2lmaWVkIFhNTC4KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIHRoZSBnaXZlbiA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPjxDT0RFPkZpbGU8L0NPREU+PC9BPiBhcyBYTUwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyB0aGUgZ2l2ZW4gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj48Q09ERT5GaWxlPC9DT0RFPjwvQT4gYXMgWE1MLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPkRvd25sb2FkcyB0aGUgZ2l2ZW4gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj48Q09ERT5VUkw8L0NPREU+PC9BPiBhcyBYTUwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+RG93bmxvYWRzIHRoZSBnaXZlbiA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPjxDT0RFPlVSTDwvQ09ERT48L0E+IGFzIFhNTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPkRlY29kZXMgYW5kIHBhcnNlcyB0aGUgZ2l2ZW4gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+PENPREU+SW5wdXRTdHJlYW08L0NPREU+PC9BPiBhcyBYTUwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5EZWNvZGVzIGFuZCBwYXJzZXMgdGhlIGdpdmVuIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPjxDT0RFPklucHV0U3RyZWFtPC9DT0RFPjwvQT4gYXMgWE1MLgotIAotIFVzZSB0aGUgPGVtPm9wdGlvbnM8L2VtPiBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUgZm9sbG93aW5nOjwvcD4KLSAKLSA8dGFibGU+Ci0gPHRyPjx0aD5UbyBzcGVjaWZ5IHRoaXM8L3RoPjx0aD5Vc2UgdGhpcyBtZXRob2Q8L3RoPjwvdHI+Ci0gPHRyPgotICA8dGQ+VGhlIGNoYXJhY3RlciBlbmNvZGluZyB0byB1c2Ugd2hlbiBwYXJzaW5nIG9yIHdyaXRpbmcgYSBkb2N1bWVudC48L3RkPgotICA8dGQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0Q2hhcmFjdGVyRW5jb2RpbmcoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPlhtbE9wdGlvbnMuc2V0Q2hhcmFjdGVyRW5jb2RpbmcoamF2YS5sYW5nLlN0cmluZyk8L0NPREU+PC9BPjwvdGQ+Ci0gPC90cj4KLSA8dHI+Ci0gIDx0ZD5UaGUgZG9jdW1lbnQgdHlwZSBmb3IgdGhlIHJvb3QgZWxlbWVudC48L3RkPgotICA8dGQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0RG9jdW1lbnRUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPjxDT0RFPlhtbE9wdGlvbnMuc2V0RG9jdW1lbnRUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSk8L0NPREU+PC9BPjwvdGQ+Ci0gPC90cj4KLSA8dHI+Ci0gIDx0ZD5QbGFjZSBsaW5lIG51bWJlciBhbm5vdGF0aW9ucyBpbiB0aGUgc3RvcmUgd2hlbiBwYXJzaW5nIGEgZG9jdW1lbnQuPC90ZD4KLSAgPHRkPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldExvYWRMaW5lTnVtYmVycygpIj48Q09ERT5YbWxPcHRpb25zLnNldExvYWRMaW5lTnVtYmVycygpPC9DT0RFPjwvQT48L3RkPgotIDwvdHI+Ci0gPHRyPgotICA8dGQ+UmVwbGFjZSB0aGUgZG9jdW1lbnQgZWxlbWVudCB3aXRoIHRoZSBzcGVjaWZpZWQgUU5hbWUgd2hlbiBwYXJzaW5nLjwvdGQ+Ci0gIDx0ZD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRMb2FkUmVwbGFjZURvY3VtZW50RWxlbWVudChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PENPREU+WG1sT3B0aW9ucy5zZXRMb2FkUmVwbGFjZURvY3VtZW50RWxlbWVudChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKTwvQ09ERT48L0E+PC90ZD4KLSA8L3RyPgotIDx0cj4KLSAgPHRkPlN0cmlwIGFsbCBpbnNpZ25pZmljYW50IHdoaXRlc3BhY2Ugd2hlbiBwYXJzaW5nIGEgZG9jdW1lbnQuPC90ZD4KLSAgPHRkPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldExvYWRTdHJpcFdoaXRlc3BhY2UoKSI+PENPREU+WG1sT3B0aW9ucy5zZXRMb2FkU3RyaXBXaGl0ZXNwYWNlKCk8L0NPREU+PC9BPjwvdGQ+Ci0gPC90cj4KLSA8dHI+Ci0gIDx0ZD5TdHJpcCBhbGwgY29tbWVudHMgd2hlbiBwYXJzaW5nIGEgZG9jdW1lbnQuPC90ZD4KLSAgPHRkPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldExvYWRTdHJpcENvbW1lbnRzKCkiPjxDT0RFPlhtbE9wdGlvbnMuc2V0TG9hZFN0cmlwQ29tbWVudHMoKTwvQ09ERT48L0E+PC90ZD4KLSA8L3RyPgotIDx0cj4KLSAgPHRkPlN0cmlwIGFsbCBwcm9jZXNzaW5nIGluc3RydWN0aW9ucyB3aGVuIHBhcnNpbmcgYSBkb2N1bWVudC48L3RkPgotICA8dGQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0TG9hZFN0cmlwUHJvY2luc3RzKCkiPjxDT0RFPlhtbE9wdGlvbnMuc2V0TG9hZFN0cmlwUHJvY2luc3RzKCk8L0NPREU+PC9BPjwvdGQ+Ci0gPC90cj4KLSA8dHI+Ci0gIDx0ZD5TZXQgYSBtYXAgb2YgbmFtZXNwYWNlIFVSSSBzdWJzdGl0dXRpb25zIHRvIHVzZSB3aGVuIHBhcnNpbmcgYSBkb2N1bWVudC48L3RkPgotICA8dGQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0TG9hZFN1YnN0aXR1dGVOYW1lc3BhY2VzKGphdmEudXRpbC5NYXApIj48Q09ERT5YbWxPcHRpb25zLnNldExvYWRTdWJzdGl0dXRlTmFtZXNwYWNlcyhqYXZhLnV0aWwuTWFwKTwvQ09ERT48L0E+PC90ZD4KLSA8L3RyPgotIDx0cj4KLSAgPHRkPlNldCBhZGRpdGlvbmFsIG5hbWVzcGFjZSBtYXBwaW5ncyB0byBiZSBhZGRlZCB3aGVuIHBhcnNpbmcgYSBkb2N1bWVudC48L3RkPgotICA8dGQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0TG9hZEFkZGl0aW9uYWxOYW1lc3BhY2VzKGphdmEudXRpbC5NYXApIj48Q09ERT5YbWxPcHRpb25zLnNldExvYWRBZGRpdGlvbmFsTmFtZXNwYWNlcyhqYXZhLnV0aWwuTWFwKTwvQ09ERT48L0E+PC90ZD4KLSA8L3RyPgotIDx0cj4KLSAgPHRkPlRyaW0gdGhlIHVuZGVybHlpbmcgWE1MIHRleHQgYnVmZmVyIGltbWVkaWF0ZWx5IGFmdGVyIHBhcnNpbmcgCi0gIGEgZG9jdW1lbnQsIHJlc3VsdGluZyBpbiBhIHNtYWxsZXIgbWVtb3J5IGZvb3RwcmludC48L3RkPgotICA8dGQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0TG9hZFRyaW1UZXh0QnVmZmVyKCkiPjxDT0RFPlhtbE9wdGlvbnMuc2V0TG9hZFRyaW1UZXh0QnVmZmVyKCk8L0NPREU+PC9BPjwvdGQ+Ci0gPC90cj4KLSA8L3RhYmxlPgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlcikiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cikKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgdGhlIGdpdmVuIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj48Q09ERT5SZWFkZXI8L0NPREU+PC9BPiBhcyBYTUwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyB0aGUgZ2l2ZW4gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPjxDT0RFPlJlYWRlcjwvQ09ERT48L0E+IGFzIFhNTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5Db252ZXJ0cyB0aGUgZ2l2ZW4gRE9NIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPjxDT0RFPk5vZGU8L0NPREU+PC9BPiBpbnRvIGFuIFhtbE9iamVjdC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPkNvbnZlcnRzIHRoZSBnaXZlbiBET00gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+PENPREU+Tm9kZTwvQ09ERT48L0E+IGludG8gYW4gWG1sT2JqZWN0LgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+TG9hZHMgdGhlIGdpdmVuIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+PENPREU+WE1MSW5wdXRTdHJlYW08L0NPREU+PC9BPiBpbnRvIGFuIFhtbE9iamVjdC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+TG9hZHMgdGhlIGdpdmVuIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+PENPREU+WE1MSW5wdXRTdHJlYW08L0NPREU+PC9BPiBpbnRvIGFuIFhtbE9iamVjdC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1htbFNheEhhbmRsZXIoKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3WG1sU2F4SGFuZGxlcjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNheEhhbmRsZXIuaHRtbCI+WG1sU2F4SGFuZGxlcjwvQT4gPEI+bmV3WG1sU2F4SGFuZGxlcjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYW4gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTYXhIYW5kbGVyLmh0bWwiPjxDT0RFPlhtbFNheEhhbmRsZXI8L0NPREU+PC9BPiB0aGF0IGNhbiBsb2FkIGFuIFhtbE9iamVjdCBmcm9tIFNBWCBldmVudHMuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1htbFNheEhhbmRsZXIob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3WG1sU2F4SGFuZGxlcjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNheEhhbmRsZXIuaHRtbCI+WG1sU2F4SGFuZGxlcjwvQT4gPEI+bmV3WG1sU2F4SGFuZGxlcjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGFuIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2F4SGFuZGxlci5odG1sIj48Q09ERT5YbWxTYXhIYW5kbGVyPC9DT0RFPjwvQT4gdGhhdCBjYW4gbG9hZCBhbiBYbWxPYmplY3QgZnJvbSBTQVggZXZlbnRzLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgbmV3IHZhbGlkYXRpbmcgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj48Q09ERT5YTUxJbnB1dFN0cmVhbTwvQ09ERT48L0E+IHRoYXQgdGhyb3dzIGV4Y2VwdGlvbnMgd2hlbiB0aGUgaW5wdXQgaXMgbm90IHZhbGlkLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIG5ldyB2YWxpZGF0aW5nIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+PENPREU+WE1MSW5wdXRTdHJlYW08L0NPREU+PC9BPiB0aGF0IHRocm93cyBleGNlcHRpb25zIAotIHdoZW4gdGhlIGlucHV0IGlzIG5vdCB2YWxpZCwgc3BlY2lmeWluZyBvcHRpb25zCi0gZm9yIHRoZSByb290IGVsZW1lbnQncyBkb2N1bWVudCB0eXBlIGFuZC9vciB0aGUgY29sbGVjdGlvbiBvYmplY3QgdG8gdXNlCi0gYXMgYW4gZXJyb3IgbGlzdGVuZXIgd2hpbGUgdmFsaWRhdGluZy48L3A+Ci0gCi0gPHA+VXNlIHRoZSA8ZW0+b3B0aW9uczwvZW0+IHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoZSBmb2xsb3dpbmc6PC9wPgotIAotIDx1bD4KLSA8bGk+QSBjb2xsZWN0aW9uIGluc3RhbmNlIHRoYXQgc2hvdWxkIGJlIHVzZWQgYXMgYW4gZXJyb3IgbGlzdGVuZXIgZHVyaW5nCi0gY29tcGlsYXRpb24sIGFzIGRlc2NyaWJlZCBpbiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRFcnJvckxpc3RlbmVyKGphdmEudXRpbC5Db2xsZWN0aW9uKSI+PENPREU+WG1sT3B0aW9ucy5zZXRFcnJvckxpc3RlbmVyKGphdmEudXRpbC5Db2xsZWN0aW9uKTwvQ09ERT48L0E+LjwvbGk+Ci0gPGxpPlRoZSBkb2N1bWVudCB0eXBlIGZvciB0aGUgcm9vdCBlbGVtZW50LCBhcyBkZXNjcmliZWQgaW4gCi0gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0RG9jdW1lbnRUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPjxDT0RFPlhtbE9wdGlvbnMuc2V0RG9jdW1lbnRUeXBlKFNjaGVtYVR5cGUpPC9DT0RFPjwvQT4uPC9saT4KLSA8L3VsPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT54aXM8L0NPREU+IC0gVGhlIGJhc2lzIGZvciB0aGUgbmV3IFhNTElucHV0U3RyZWFtLjxERD48Q09ERT5vcHRpb25zPC9DT0RFPiAtIE9wdGlvbnMgc3BlY2lmeWluZyByb290IGRvY3VtZW50IHR5cGUgYW5kL29yIGFuIGVycm9yIGxpc3RlbmVyLgotPERUPjxCPlJldHVybnM6PC9CPjxERD5BIG5ldyB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxPYmplY3QuRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzczZjY3Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTA3NCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ2OjU4IFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sT2JqZWN0IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCxYbWxPYmplY3QgaW50ZXJmYWNlIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxPYmplY3QgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbE9iamVjdC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBYbWxPYmplY3Q8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0REPgotPC9ETD4KLTxETD4KLTxEVD48Qj5BbGwgS25vd24gU3ViaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj5YbWxBbnlVUkk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj5YbWxCYXNlNjRCaW5hcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uaHRtbCI+WG1sQm9vbGVhbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj5YbWxCeXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPlhtbERhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPlhtbERhdGVUaW1lPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj5YbWxEb3VibGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLmh0bWwiPlhtbER1cmF0aW9uPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj5YbWxFTlRJVElFUzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPlhtbEVOVElUWTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+WG1sRmxvYXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuaHRtbCI+WG1sR0RheTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPlhtbEdNb250aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPlhtbEdNb250aERheTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+WG1sR1llYXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+WG1sR1llYXJNb250aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPlhtbEhleEJpbmFyeTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+WG1sSUQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPlhtbElEUkVGPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+WG1sSURSRUZTPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+WG1sSW50PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPlhtbExhbmd1YWdlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPlhtbExvbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+WG1sTmFtZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPlhtbE5DTmFtZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj5YbWxOTVRPS0VOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj5YbWxOTVRPS0VOUzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj5YbWxOb3JtYWxpemVkU3RyaW5nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj5YbWxOT1RBVElPTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbFBvc2l0aXZlSW50ZWdlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+WG1sUU5hbWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPlhtbFNob3J0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+WG1sU3RyaW5nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPlhtbFRpbWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPlhtbFRva2VuPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+WG1sVW5zaWduZWRCeXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj5YbWxVbnNpZ25lZEludDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPlhtbFVuc2lnbmVkTG9uZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj5YbWxVbnNpZ25lZFNob3J0PC9BPjwvREQ+Ci08L0RMPgotPERMPgotPERUPjxCPkFsbCBLbm93biBJbXBsZW1lbnRpbmcgQ2xhc3Nlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0ZpbHRlclhtbE9iamVjdC5odG1sIj5GaWx0ZXJYbWxPYmplY3Q8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGludGVyZmFjZSA8Qj5YbWxPYmplY3Q8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0RMPgotCi08UD4KLUNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNrZXktdXJUeXBlIj54czphbnlUeXBlPC9hPiwKLSB0aGUgYmFzZSB0eXBlIGZvciBhbGwgWE1MIEJlYW5zLgotIDxwPgotIFNpbmNlIGFsbCBYTUwgU2NoZW1hIHR5cGVzIGFyZSB0cmFuc2xhdGVkIGludG8gY29ycmVzcG9uZGluZyBYTUwgQmVhbgotIGNsYXNzZXMsIGFuZCBhbGwgU2NoZW1hIHR5cGUgZGVyaXZhdGlvbiBjb3JyZXNwb25kcyB0byBKYXZhIGNsYXNzCi0gaW5oZXJpdGFuY2UsIHRoZSBmYWN0IHRoYXQgYWxsIFNjaGVtYSB0eXBlcyBkZXJpdmUgZnJvbSB4czphbnlUeXBlIG1lYW5zCi0gdGhhdCBhbGwgWE1MIEJlYW4gY2xhc3NlcyBkZXJpdmUgZnJvbSBYbWxPYmplY3QuCi0gPHA+Ci0gT24gdGhpcyBiYXNlIGNsYXNzIHlvdSB3aWxsIGZpbmQgYSBudW1iZXIgb2YgY29tbW9uIGZhY2lsaXRpZXMgdGhhdAotIGFsbCBYTUwgQmVhbiBjbGFzc2VzIHByb3ZpZGU6Ci0gPHA+Ci0gPHVsPgotIDxsaT5FdmVyeSBYTUwgQmVhbiBjbGFzcyBoYXMgYW4gaW5uZXIgRmFjdG9yeSBjbGFzcyBmb3IgY3JlYXRpbmcgYW5kIHBhcnNpbmcKLSAgICAgaW5zdGFuY2VzLCBpbmNsdWRpbmcgWG1sT2JqZWN0LiBVc2UgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIj48Q09ERT5YbWxPYmplY3QuRmFjdG9yeTwvQ09ERT48L0E+IGl0c2VsZgotICAgICB0byBwcm9kdWNlIHVudHlwZWQgWE1MIHRyZWVzIG9yIFhNTCB0cmVlcyB0aGF0IGltcGxlbWVudCBzcGVjaWZpYwotICAgICBzdWJ0eXBlcyBvZiBYbWxPYmplY3QgZGVwZW5kaW5nIG9uIGEgcmVjb2duaXplZCByb290IGRvY3VtZW50IGVsZW1lbnQuCi0gICAgIElmIHlvdSBkZXBlbmQgb24gdGhlIGF1dG9tYXRpYyB0eXBlIGluZmVyZW5jZSwgeW91IHdpbGwgd2FudCB0byB1bmRlcnN0YW5kCi0gICAgIHRoZSB0eXBlIGluZmVyZW5jZSBpc3N1ZXMgZGVzY3JpYmVkIGJlbG93LgotIDxsaT5UbyB3cml0ZSBvdXQgYW4gYWNjdXJhdGUgWE1MIGZpbGUgZm9yIHRoZSBYTUwgdHJlZSB1bmRlciB0aGlzCi0gICAgIFhtbE9iamVjdCwgdXNlIG9uZSBvZiB0aGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcikiPjxDT0RFPlhtbFRva2VuU291cmNlLnNhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcik8L0NPREU+PC9BPiBtZXRob2RzLAotICAgICBvciA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0oKSI+PENPREU+WG1sVG9rZW5Tb3VyY2UubmV3SW5wdXRTdHJlYW0oKTwvQ09ERT48L0E+IG9yIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIoKSI+PENPREU+WG1sVG9rZW5Tb3VyY2UubmV3UmVhZGVyKCk8L0NPREU+PC9BPi4KLSAgICAgVXNlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+PENPREU+dG9TdHJpbmcoKTwvQ09ERT48L0E+IHRvIHByb2R1Y2UgYSBwcmV0dHktcHJpbnRlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUKLSAgICAgWE1MIHN1YnRyZWUgdW5kZXIgdGhpcyBYTUwgT2JqZWN0LiAgSWYgeW91IHNhdmUgaW50ZXJpb3IgcG9ydGlvbnMgb2YKLSAgICAgYW4gWE1MIGRvY3VtZW50LCB5b3Ugd2lsbCB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGlubmVyIGNvbnRlbnRzCi0gICAgIHZlcnN1cyBvdXRlciBjb250YWluZXIgaXNzdWVzIGRlc2NyaWJlZCBiZWxvdy4KLSA8bGk+SXQgaXMgYWxzbyBzaW1wbGUgdG8gY29weSBhbiBYbWxPYmplY3QgaW5zdGFuY2UgdG8gb3IgZnJvbSBhIHN0YW5kYXJkCi0gICAgIERPTSB0cmVlIG9yIFNBWCBzdHJlYW0uICBVc2UgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48Q09ERT5YbWxPYmplY3QuRmFjdG9yeS5wYXJzZShOb2RlKTwvQ09ERT48L0E+LAotICAgICBmb3IgZXhhbXBsZSwgdG8gbG9hZCBmcm9tIERPTTsgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCNuZXdYbWxTYXhIYW5kbGVyKCkiPjxDT0RFPlhtbE9iamVjdC5GYWN0b3J5Lm5ld1htbFNheEhhbmRsZXIoKTwvQ09ERT48L0E+Ci0gICAgIHRvIGxvYWQgZnJvbSBTQVg7IHVzZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZSgpIj48Q09ERT5YbWxUb2tlblNvdXJjZS5uZXdEb21Ob2RlKCk8L0NPREU+PC9BPiB0byBzYXZlIHRvIERPTTsgYW5kIHVzZSAKLSAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcikiPjxDT0RFPlhtbFRva2VuU291cmNlLnNhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcik8L0NPREU+PC9BPgotICAgICB0byBzYXZlIHRvIFNBWC4KLSA8bGk+VXNlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUoKSI+PENPREU+dmFsaWRhdGUoKTwvQ09ERT48L0E+IHRvIHZhbGlkYXRlIHRoZSBzdWJ0cmVlIG9mIFhNTCB1bmRlciB0aGlzCi0gICAgIFhNTCBPYmplY3QuICBJZiB5b3Ugd2lzaCB0byBnZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxvY2F0aW9uCi0gICAgIGFuZCByZWFzb24gZm9yIHZhbGlkYXRpb24gZXJyb3JzLCBzZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0RXJyb3JMaXN0ZW5lcihqYXZhLnV0aWwuQ29sbGVjdGlvbikiPjxDT0RFPlhtbE9wdGlvbnMuc2V0RXJyb3JMaXN0ZW5lcihqYXZhLnV0aWwuQ29sbGVjdGlvbik8L0NPREU+PC9BPiwKLSAgICAgYW5kIHVzZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxDT0RFPnZhbGlkYXRlKFhtbE9wdGlvbnMpPC9DT0RFPjwvQT4uCi0gPGxpPlVzZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3Q3Vyc29yKCkiPjxDT0RFPlhtbFRva2VuU291cmNlLm5ld0N1cnNvcigpPC9DT0RFPjwvQT4gdG8gYWNjZXNzIHRoZSBmdWxsIFhNTCBpbmZvc2V0LCBmb3IgZXhhbXBsZSwKLSAgICAgaWYgeW91IG5lZWQgdG8gZGV0ZXJtaW5lIGludGVybGVhdmVkIGVsZW1lbnQgb3JkZXIgb3IgbWFuaXB1bGF0ZQotICAgICBhbm5vdGF0aW9ucywgY29tbWVudHMsIG9yIG1peGVkIGNvbnRlbnQuICBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+PENPREU+WG1sQ3Vyc29yPC9DT0RFPjwvQT4uCi0gPGxpPlVzZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPnNlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZyk8L0NPREU+PC9BPiB0byBmaW5kIG90aGVyIFhtbE9iamVjdHMgaW4gdGhlIHN1YnRyZWUgdW5kZXJuZWF0aAotICAgICB0aGlzIFhtbE9iamVjdCB1c2luZyByZWxhdGl2ZSBYUGF0aHMuICAoSW4gc2VsZWN0UGF0aCwgIi4iIGluZGljYXRlcwotICAgICB0aGUgY3VycmVudCBlbGVtZW50IG9yIGF0dHJpYnV0ZS4pCi0gPC91bD4KLSA8cD4KLSBUeXBlIGluZmVyZW5jZS4gIFdoZW4gdXNpbmcgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIj48Q09ERT5YbWxPYmplY3QuRmFjdG9yeTwvQ09ERT48L0E+IHRvIHBhcnNlIFhNTCBkb2N1bWVudHMsCi0gdGhlIGFjdHVhbCBkb2N1bWVudCB0eXBlIGlzIG5vdCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3R5cGUiPjxDT0RFPnR5cGU8L0NPREU+PC9BPiBpdHNlbGYsIGJ1dCBhIHN1YnR5cGUKLSBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgdGhlIHBhcnNlZCBkb2N1bWVudC4gIElmIHRoZSBwYXJzZWQgZG9jdW1lbnQKLSBjb250YWlucyBhIHJlY29nbml6ZWQgcm9vdCBkb2N1bWVudCBlbGVtZW50LCB0aGVuIHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUKLSBsb2FkZWQgaW5zdGFuY2Ugd2lsbCBiZSB0aGUgbWF0Y2hpbmcgRG9jdW1lbnQgdHlwZS4gIEZvciBleGFtcGxlOgotIDxwcmU+Ci0gWG1sT2JqZWN0IHhvYmogPSBYbWxPYmplY3QuRmFjdG9yeS5wYXJzZShteURvY3VtZW50KTsKLSBpZiAoeG9iaiBpbnN0YW5jZW9mIE15T3JkZXJEb2N1bWVudCkgLy8gc3RhcnRzIHcvICZsdDtteS1vcmRlciZndDsKLSB7Ci0gICAgIE15T3JkZXJEb2N1bWVudCBteWRvYyA9IChNeU9yZGVyRG9jdW1lbnQpeG9iajsKLSAgICAgaWYgKCF4b2JqLnZhbGlkYXRlKCkpCi0gICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vdCBhIHZhbGlkIG15LW9yZGVyIGRvY3VtZW50Iik7Ci0gfQotIGVsc2UKLSB7Ci0gICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTm90IGEgbXktb3JkZXIgZG9jdW1lbnQiKTsKLSB9Ci0gPC9wcmU+Ci0gRXZlcnkgWE1MIEJlYW4gY2xhc3MgaGFzIGl0cyBvd24gaW5uZXIgRmFjdG9yeSBjbGFzcywKLSBzbyBpZiB5b3UgYWN0dWFsbHkga25vdyBleGFjdGx5IHdoaWNoIFhNTCBCZWFuIGRvY3VtZW50IHR5cGUKLSB5b3Ugd2FudCB0byBsb2FkIGFzIGluIHRoZSBleGFtcGxlIGFib3ZlLCB5b3Ugc2hvdWxkIHVzZSB0aGUKLSB0aGUgc3BlY2lmaWMgWE1MIEJlYW4gRmFjdG9yeSBjbGFzcyBpbnN0ZWFkLiBGb3IgZXhhbXBsZToKLSA8cHJlPgotIE15T3JkZXJEb2N1bWVudCBteWRvYyA9IE15T3JkZXJEb2N1bWVudC5GYWN0b3J5LnBhcnNlKG15RG9jdW1lbnQpOwotIDwvcHJlPgotIFRoZSBjb2RlIGFib3ZlIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHRoZSBwYXJzZWQgZG9jdW1lbnQKLSBkb2VzIG5vdCBiZWdpbiB3aXRoIHRoZSBwcm9wZXIgKG15LW9yZGVyKSBlbGVtZW50LgotIDxwPgotIElubmVyIHZlcnN1cyBvdXRlci4gIEFuIFhtbE9iamVjdCByZXByZXNlbnRzIHRoZQotIDxlbT5jb250ZW50czwvZW0+IG9mIGFuIGVsZW1lbnQgb3IgYXR0cmlidXRlLCA8ZW0+bm90PC9lbT4gdGhlIGVsZW1lbnQKLSBvciBhdHRyaWJ1dGUgaXRzZWxmLiAgU28gd2hlbiB5b3UgdmFsaWRhdGUgb3Igc2F2ZSBhbiBYbWxPYmplY3QsIHlvdQotIGFyZSB2YWxpZGF0aW5nIG9yIHNhdmluZyBpdHMgY29udGVudHMsIG5vdCBpdHMgY29udGFpbmVyLiAgRm9yIGV4YW1wbGUsCi0gaWYgdGhlIFhtbE9iamVjdCByZXByZXNlbnRzIHRoZSBjb250ZW50cyBvZiBhbiBlbGVtZW50IHdoaWNoIGhhcHBlbnMKLSB0byBpdHNlbGYgYmUgaW4gdGhlIHdyb25nIG9yZGVyIHJlbGF0aXZlIHRvIGl0cyBzaWJsaW5ncywgdmFsaWRhdGUgd2lsbAotIG5vdCBjb21wbGFpbiBhYm91dCB0aGUgbWlzcGxhY2VtZW50IG9mIHRoZSBlbGVtZW50IGl0c2VsZi4gIE9uIHRoZSBvdGhlciBoYW5kLCBpZgotIGVsZW1lbnRzIDxlbT53aXRoaW48L2VtPiB0aGUgWG1sT2JqZWN0IGFyZSBpbiB0aGUgd3Jvbmcgb3JkZXIsIHZhbGlkYXRlCi0gd2lsbCBjb21wbGFpbi4gIFNpbWlsYXJseSwgd2hlbiBzYXZpbmcgdGhlIGNvbnRlbnRzIG9mIGFuIGludGVyaW9yCi0gWG1sT2JqZWN0LCBpdCBpcyB0aGUgY29udGVudHMgb2YgYW4gZWxlbWVudCwgbm90IHRoZSBlbGVtZW50IGl0c2VsZiwKLSB3aGljaCBpcyBzYXZlZCBieSBkZWZhdWx0LgotIDxwPgotIFJlYWRpbmcgYW5kIHdyaXRpbmcgZnJhZ21lbnRzLiBXaGVuIHJlYWRpbmcgb3Igd3JpdGluZyB0aGUgY29udGVudHMgb2YgYQotIHdob2xlIFhNTCBkb2N1bWVudCwgdGhlIHN0YW5kYXJkIFhNTCByZXByZW50YXRpb24gZm9yIGEgZG9jdW1lbnQgaXMgdXNlZC4KLSBIb3dldmVyLCB0aGVyZSBpcyBubyBzdGFuZGFyZCBjb25jcmV0ZSBYTUwgcmVwcmVzZW50YXRpb24gZm9yICJqdXN0IHRoZQotIGNvbnRlbnRzIiBvZiBhbiBpbnRlcmlvciBlbGVtZW50IG9yIGF0dHJpYnV0ZS4gU28gd2hlbiBvbmUgaXMgbmVlZGVkLAotIHRoZSB0YWcgJmx0O3htbC1mcmFnbWVudCZndDsgaXMgdXNlZCB0byB3cmFwIHRoZSBjb250ZW50cy4gIFRoaXMgdGFnIGlzIHVzZWQKLSBjYW4gYWxzbyBiZSB1c2VkIHRvIGxvYWQganVzdCB0aGUgY29udGVudHMgZm9yIGFuIFhtbE9iamVjdCBkb2N1bWVudCBmcmFnbWVudAotIG9mIGFyYml0cmFyeSB0eXBlLiBJZiB5b3Ugd2lzaCB0byBzYXZlIG91dCB0aGUgWG1sT2JqZWN0J3MgY29udGFpbmVyIGVsZW1lbnQKLSBhbG9uZyB3aXRoIGl0cyBjb250ZW50cywgdXNlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldFNhdmVPdXRlcigpIj48Q09ERT5YbWxPcHRpb25zLnNldFNhdmVPdXRlcigpPC9DT0RFPjwvQT4uCi0gPHA+Ci0gSW1wbGVtZW50aW5nIFhtbE9iamVjdC4gIFRoZSBYTUxCZWFucyBsaWJyYXJ5IGRvZXMgbm90IHN1cHBvcnQgYXJiaXRyYXJ5Ci0gaW1wbGVtZW50YXRpb25zIG9mIFhtbE9iamVjdCAtIGluIGFsbW9zdCBhbGwgY2FzZXMsIHlvdSBzaG91bGQgb25seSB1c2UKLSB0aGUgaW1wbGVtZW50YXRpb25zIG9mIFhtbE9iamVjdCBwcm92aWRlZCBieSB0aGUgWE1MQmVhbnMgY29tcGlsZXIgaXRzZWxmLgotIElmIHlvdSBuZWVkIHRvIGltcGxlbWVudCBYbWxPYmplY3QgeW91cnNlbGYsIHlvdSBzaG91bGQgc3ViY2xhc3MKLSBGaWx0ZXJYbWxPYmplY3QgaW4gb3JkZXIgdG8gZGVsZWdhdGUgdG8gYW5vdGhlciB1bmRlcmx5aW5nIFhtbE9iamVjdAotIGltcGxlbWVudGF0aW9uLiBUaGlzIHRlY2huaXF1ZSB3aWxsIGFsbG93IHlvdSB0byB1c2UgeW91ciBjb2RlIHVuY2hhbmdlZAotIHdpdGggZnV0dXJlIHZlcnNpb25zIG9mIFhNTEJlYW5zIHRoYXQgYWRkIGFkZGl0aW9uYWwgbWV0aG9kcyBvbiBYbWxPYmplY3QuCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibmVzdGVkX2NsYXNzX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TmVzdGVkIENsYXNzIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtjbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPlhtbE9iamVjdC5GYWN0b3J5PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1N0YXRpYyBmYWN0b3J5IGNsYXNzIGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNFUVVBTCI+RVFVQUw8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7RVFVQUwgaXMgMC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjR1JFQVRFUl9USEFOIj5HUkVBVEVSX1RIQU48L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7R1JFQVRFUl9USEFOIGlzIDEuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0xFU1NfVEhBTiI+TEVTU19USEFOPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0xFU1NfVEhBTiBpcyAtMS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTk9UX0VRVUFMIj5OT1RfRVFVQUw8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Tk9UX0VRVUFMIGlzIDIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3R5cGUiPnR5cGU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY2hhbmdlVHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj5jaGFuZ2VUeXBlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Jm5ic3A7bmV3VHlwZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NoYW5nZXMgdGhlIHNjaGVtYSB0eXBlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRhdGEgYW5kCi0gcmV0dXJucyBhIG5ldyBYbWxPYmplY3QgaW5zdGFuY2Ugd2hvc2Ugc2NoZW1hVHlwZSBpcyB0aGUKLSBuZXcgdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVRvKGphdmEubGFuZy5PYmplY3QpIj5jb21wYXJlVG88L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SW1wZWxlbWVudHMgdGhlIENvbXBhcmFibGUgaW50ZXJmYWNlIGJ5IGNvbXBhcmluZyB0d28gc2ltcGxlCi0geG1sIHZhbHVlcyBiYXNlZCBvbiB0aGVpciBzdGFuZGFyZCBYTUwgc2NoZW1hIG9yZGVyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5jb21wYXJlVmFsdWU8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhpcyBjb21wYXJpc29uIG1ldGhvZCBpcyBzaW1pbGFyIHRvIGNvbXBhcmVUbywgYnV0IHJhdGhlcgotIHRoYW4gdGhyb3dpbmcgYSBDbGFzc0Nhc3RFeGNlcHRpb24gd2hlbiB0d28gdmFsdWVzIGFyZSBpbmNvbXBhcmFibGUsCi0gaXQgcmV0dXJucyB0aGUgbnVtYmVyIDIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb3B5KCkiPmNvcHk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgZGVlcCBjb3B5IG9mIHRoaXMgWG1sT2JqZWN0LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+W108L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZykiPmV4ZWNRdWVyeTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtxdWVyeSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0V4ZWN1dGVzIGEgcXVlcnkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT5bXTwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5leGVjUXVlcnk8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cXVlcnksCi0gICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0V4ZWN1dGVzIGEgcXVlcnkgd2l0aCBvcHRpb25zLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNJbW11dGFibGUoKSI+aXNJbW11dGFibGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoZSB2YWx1ZSBpcyBhbiBpbW11dGFibGUgdmFsdWUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc05pbCgpIj5pc05pbDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RydWUgaWYgdGhlIHZhbHVlIGlzIG5pbC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2NoZW1hVHlwZSgpIj5zY2hlbWFUeXBlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIHNjaGVtYSB0eXBlIGZvciB0aGlzIGluc3RhbmNlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+W108L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcpIj5zZWxlY3RQYXRoPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3BhdGgpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZWxlY3RzIGEgcGF0aC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPltdPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zZWxlY3RQYXRoPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3BhdGgsCi0gICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZWxlY3RzIGEgcGF0aCwgYXBwbHlpbmcgb3B0aW9ucy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnNldDwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4mbmJzcDtzcmNPYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXQgdGhlIHZhbHVlL3R5cGUgb2YgdGhpcyBYbWxPYmplY3QgdG8gYmUgYSBjb3B5IG9mIHRoZSBzb3VyY2UKLSBYbWxPYmplY3QuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXROaWwoKSI+c2V0TmlsPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgdmFsdWUgdG8gbmlsLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGFuIFhNTCBzdHJpbmcgZm9yIHRoaXMgWE1MIG9iamVjdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKCkiPnZhbGlkYXRlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0cnVlIGlmIHRoZSBjb250ZW50cyBvZiB0aGlzIG9iamVjdCBhcmUgdmFsaWQKLSBhY2NvcmluZyB0byBzY2hlbWFUeXBlKCkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj52YWxpZGF0ZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtKdXN0IGxpa2UgdmFsaWRhdGUoKSwgYnV0IHdpdGggb3B0aW9ucy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlRXF1YWxzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+dmFsdWVFcXVhbHM8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiB0aGUgeG1sIHZhbHVlcyBhcmUgZXF1YWwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlSGFzaENvZGUoKSI+dmFsdWVIYXNoQ29kZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxUb2tlblNvdXJjZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjZG9jdW1lbnRQcm9wZXJ0aWVzKCkiPmRvY3VtZW50UHJvcGVydGllczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNtb25pdG9yKCkiPm1vbml0b3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3Q3Vyc29yKCkiPm5ld0N1cnNvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKCkiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0lucHV0U3RyZWFtKCkiPm5ld0lucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0lucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0lucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcigpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdYTUxJbnB1dFN0cmVhbSgpIj5uZXdYTUxJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdYTUxJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdYTUxJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSkiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSkiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uV3JpdGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uV3JpdGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQoKSI+eG1sVGV4dDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnhtbFRleHQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJ0eXBlIj48IS0tIC0tPjwvQT48SDM+Ci10eXBlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPiA8Qj50eXBlPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkxFU1NfVEhBTiI+PCEtLSAtLT48L0E+PEgzPgotTEVTU19USEFOPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIGludCA8Qj5MRVNTX1RIQU48L0I+PC9QUkU+Ci08REw+Ci08REQ+TEVTU19USEFOIGlzIC0xLiBTZWUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj48Q09ERT5jb21wYXJlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpPC9DT0RFPjwvQT4uCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0LkxFU1NfVEhBTiI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJFUVVBTCI+PCEtLSAtLT48L0E+PEgzPgotRVFVQUw8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkVRVUFMPC9CPjwvUFJFPgotPERMPgotPEREPkVRVUFMIGlzIDAuIFNlZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPjxDT0RFPmNvbXBhcmVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCk8L0NPREU+PC9BPi4KLTxQPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QuRVFVQUwiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iR1JFQVRFUl9USEFOIj48IS0tIC0tPjwvQT48SDM+Ci1HUkVBVEVSX1RIQU48L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPkdSRUFURVJfVEhBTjwvQj48L1BSRT4KLTxETD4KLTxERD5HUkVBVEVSX1RIQU4gaXMgMS4gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+PENPREU+Y29tcGFyZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdC5HUkVBVEVSX1RIQU4iPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTk9UX0VRVUFMIj48IS0tIC0tPjwvQT48SDM+Ci1OT1RfRVFVQUw8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IDxCPk5PVF9FUVVBTDwvQj48L1BSRT4KLTxETD4KLTxERD5OT1RfRVFVQUwgaXMgMi4gU2VlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+PENPREU+Y29tcGFyZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KTwvQ09ERT48L0E+LgotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdC5OT1RfRVFVQUwiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9InNjaGVtYVR5cGUoKSI+PCEtLSAtLT48L0E+PEgzPgotc2NoZW1hVHlwZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPiA8Qj5zY2hlbWFUeXBlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VGhlIHNjaGVtYSB0eXBlIGZvciB0aGlzIGluc3RhbmNlLiBUaGlzIGlzIGEgcGVybWFuZW50LAotIHVuY2hhbmdpbmcgcHJvcGVydHkgb2YgdGhlIGluc3RhbmNlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ2YWxpZGF0ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci12YWxpZGF0ZTwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+dmFsaWRhdGU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRlbnRzIG9mIHRoaXMgb2JqZWN0IGFyZSB2YWxpZAotIGFjY29yaW5nIHRvIHNjaGVtYVR5cGUoKS4KLSA8cD4KLSBEb2VzIGEgZGVlcCB2YWxpZGF0aW9uIG9mIHRoZSBlbnRpcmUgc3VidHJlZSB1bmRlciB0aGUKLSBvYmplY3QsIGJ1dCBkb2VzIG5vdCB2YWxpZGF0ZSB0aGUgcGFyZW50cyBvciBzaWJsaW5ncwotIG9mIHRoZSBvYmplY3QgaWYgdGhlIG9iamVjdCBpcyBpbiB0aGUgaW50ZXJpb3Igb2YgYW4geG1sCi0gdHJlZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0idmFsaWRhdGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotdmFsaWRhdGU8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPnZhbGlkYXRlPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvUFJFPgotPERMPgotPEREPjxwPkp1c3QgbGlrZSB2YWxpZGF0ZSgpLCBidXQgd2l0aCBvcHRpb25zLjwvcD4KLSA8cD5JZiB5b3Ugd2lzaCB0byBjb2xsZWN0IGVycm9yIG1lc3NhZ2VzIGFuZCBsb2NhdGlvbnMgd2hpbGUgdmFsaWRhdGluZywKLSB1c2UgdGhlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldEVycm9yTGlzdGVuZXIoamF2YS51dGlsLkNvbGxlY3Rpb24pIj48Q09ERT5YbWxPcHRpb25zLnNldEVycm9yTGlzdGVuZXIoamF2YS51dGlsLkNvbGxlY3Rpb24pPC9DT0RFPjwvQT4gbWV0aG9kLiBXaXRoIHRoYXQgbWV0aG9kLAotIHlvdSBjYW4gc3BlY2lmeSBhbiBvYmplY3QgaW4gd2hpY2ggdG8gc3RvcmUgbWVzc2FnZXMgcmVsYXRlZCB0byB2YWxpZGF0aW9uLgotIFRoZSBmb2xsb3dpbmcgaXMgYSBzaW1wbGUgZXhhbXBsZS48L3A+Ci0gCi0gPHByZT4KLSAvLyBDcmVhdGUgYW4gWG1sT3B0aW9ucyBpbnN0YW5jZSBhbmQgc2V0IHRoZSBlcnJvciBsaXN0ZW5lci4KLSBYbWxPcHRpb25zIHZhbGlkYXRlT3B0aW9ucyA9IG5ldyBYbWxPcHRpb25zKCk7Ci0gQXJyYXlMaXN0IGVycm9yTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSB2YWxpZGF0ZU9wdGlvbnMuc2V0RXJyb3JMaXN0ZW5lcihlcnJvckxpc3QpOwotIAotIC8vIFZhbGlkYXRlIHRoZSBYTUwuCi0gYm9vbGVhbiBpc1ZhbGlkID0gbmV3RW1wLnZhbGlkYXRlKHZhbGlkYXRlT3B0aW9ucyk7Ci0gCi0gLy8gSWYgdGhlIFhNTCBpc24ndCB2YWxpZCwgbG9vcCB0aHJvdWdoIHRoZSBsaXN0ZW5lcidzIGNvbnRlbnRzLAotIC8vIHByaW50aW5nIGNvbnRhaW5lZCBtZXNzYWdlcy4KLSBpZiAoIWlzVmFsaWQpCi0gewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlcnJvckxpc3Quc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgICAgWG1sRXJyb3IgZXJyb3IgPSAoWG1sRXJyb3IpZXJyb3JMaXN0LmdldChpKTsKLSAgICAgICAgICAKLSAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuIik7Ci0gICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNZXNzYWdlOiAiICsgZXJyb3IuZ2V0TWVzc2FnZSgpICsgIlxuIik7Ci0gICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb2NhdGlvbiBvZiBpbnZhbGlkIFhNTDogIiArIAotICAgICAgICAgICAgICBlcnJvci5nZXRDdXJzb3JMb2NhdGlvbigpLnhtbFRleHQoKSArICJcbiIpOwotICAgICAgfQotIH0KLSA8L3ByZT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+b3B0aW9uczwvQ09ERT4gLSBBbiBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NvbGxlY3Rpb24uaHRtbCI+PENPREU+Q29sbGVjdGlvbjwvQ09ERT48L0E+IGludGVyZmFjZS48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNlbGVjdFBhdGg8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+W10gPEI+c2VsZWN0UGF0aDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3BhdGgpPC9QUkU+Ci08REw+Ci08REQ+U2VsZWN0cyBhIHBhdGguICBQYXRoIGNhbiBiZSBhIHN0cmluZyBvciBwcmVjb21waWxlZCBwYXRoIFN0cmluZy4KLSA8cD4KLSBUaGUgcGF0aCBtdXN0IGJlIGEgcmVsYXRpdmUgcGF0aCwgd2hlcmUgIi4iIHJlcHJlc2VudHMgdGhlCi0gZWxlbWVudCBvciBhdHRyaWJ1dGUgY29udGFpbmcgdGhpcyBYbWxPYmplY3QsIGFuZCBpdCBtdXN0IHNlbGVjdAotIG9ubHkgb3RoZXIgZWxlbWVudHMgb3IgYXR0cmlidXRlcy4gIElmIGEgbm9uLWVsZW1lbnQgb3Igbm9uLWF0dHJpYnV0ZQotIGlzIHNlbGVjdGVkLCBhbiB1bmNoZWNrZWQgZXhjZXB0aW9uIGlzIHRocm93bi4KLSA8cD4KLSBUaGUgYXJyYXkgdGhhdCBpcyByZXR1cm5lZCBjb250YWlucyBhbGwgdGhlIHNlbGVjdGVkCi0gWG1sT2JqZWN0cywgd2l0aGluIHRoZSBzYW1lIGRvY3VtZW50LCBsaXN0ZWQgaW4gZG9jdW1lbnQKLSBvcmRlci4gIFRoZSBhY3R1YWwgYXJyYXkgdHlwZSBvZiB0aGUgcmVzdWx0IGlzIGluZmVycmVkCi0gZnJvbSB0aGUgY2xvc2VzdCBjb21tb24gYmFzZSB0eXBlIG9mIHNlbGVjdGVkIHJlc3VsdHMuCi0gPHA+Ci0gSGVyZSBpcyBhbiBleGFtcGxlIG9mIHVzYWdlLiAgU3VwcG9zZSB3ZSBoYXZlIGEgZ2xvYmFsCi0gZWxlbWVudCBkZWZpbml0aW9uIGZvciAib3duZXIiIHdob3NlIHR5cGUgaXMgInBlcnNvbiI6Ci0gPHByZT4KLSAgICZsdDtzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vb3BlbnVyaS5vcmcvc2FtcGxlIj4KLSAgICAgICZsdDtlbGVtZW50IG5hbWU9Im93bmVyIiB0eXBlPSJwZXJzb24iLz4KLSAgICAgICZsdDtjb21wbGV4VHlwZSBuYW1lPSJwZXJzb24iPgotICAgICAgICAgWy4uLl0KLSAgICAgICZsdDsvY29tcGxleFR5cGU+Ci0gICAmbHQ7L3NjaGVtYT4KLSA8L3ByZT4KLSBhbmQgc3VwcG9zZSAib3duZXIiIHRhZ3MgY2FuIGJlIHNjYXR0ZXJlZCB0aHJvdWdob3V0IHRoZQotIGRvY3VtZW50LiAgVGhlbiB3ZSBjYW4gd3JpdGUgdGhlIGZvbGxvd2luZyBjb2RlIHRvIGZpbmQKLSB0aGVtIGFsbDoKLSA8cHJlPgotIGltcG9ydCBvcmcub3BlbnVyaS5zYW1wbGUuUGVyc29uOwotIGltcG9ydCBvcmcuYXBhY2hlLnhtbGJlYW5zLio7Ci0gWy4uLl0KLSAgIFhtbE9iamVjdCB4b2JqID0gWG1sT2JqZWN0LkZhY3RvcnkucGFyc2UobXlGaWxlKTsKLSAgIFBlcnNvbltdIHJlc3VsdHM7Ci0gICByZXN1bHRzID0gKFBlcnNvbltdKXhvYmouc2VsZWN0UGF0aCgKLSAgICAgICJkZWNsYXJlIG5hbWVzcGFjZSBzPSdodHRwOi8vd3d3Lm9wZW51cmkub3JnL3NhbXBsZScgIiArCi0gICAgICAiLi8vczpvd25lciIpOwotIDwvcHJlPgotIE5vdGljZSB0aGUgd2F5IGluIHdoaWNoIG5hbWVzcGFjZSBkZWNsYXJhdGlvbnMgYXJlIGRvbmUgaW4gWFBhdGggMi4wLgotIFNpbmNlIFhQYXRoIGNhbiBvbmx5IG5hdmlnYXRlIHdpdGhpbiBhbiBYTUwgZG9jdW1lbnQgLSBpdCBjYW5ub3QKLSBjb25zdHJ1Y3QgbmV3IFhNTCAtIHRoZSByZXN1bHRpbmcgWG1sT2JqZWN0cyBhbGwgcmVzaWRlIGluCi0gdGhlIHNhbWUgWE1MIGRvY3VtZW50IGFzIHRoaXMgWG1sT2JqZWN0IGl0c2VsZi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1zZWxlY3RQYXRoPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPltdIDxCPnNlbGVjdFBhdGg8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L1BSRT4KLTxETD4KLTxERD5TZWxlY3RzIGEgcGF0aCwgYXBwbHlpbmcgb3B0aW9ucy4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+c2VsZWN0UGF0aChTdHJpbmcpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImV4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotZXhlY1F1ZXJ5PC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPltdIDxCPmV4ZWNRdWVyeTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3F1ZXJ5KTwvUFJFPgotPERMPgotPEREPkV4ZWN1dGVzIGEgcXVlcnkuICBRdWVyeSBjYW4gYmUgYSBzdHJpbmcgb3IgcHJlY29tcGlsZWQgcXVlcnkgU3RyaW5nLgotIDxwPgotIEFuIFhRdWVyeSBpcyB2ZXJ5IHNpbWlsYXIgdG8gYW4gWFBhdGgsIGV4Y2VwdCB0aGF0IGl0IGFsc28gcGVybWl0cwotIGNvbnN0cnVjdGlvbiBvZiBuZXcgWE1MLiAgQXMgYSByZXN1bHQsIHRoZSBYbWxPYmplY3RzIHRoYXQgYXJlCi0gcmV0dXJuZWQgZnJvbSBleGVjUXVlcnkgYXJlIGluIG5ld2x5IGNyZWF0ZWQgZG9jdW1lbnRzLCBzZXBhcmF0ZQotIGZyb20gdGhlIFhtbE9iamVjdCBvbiB3aGljaCB0aGUgcXVlcnkgaXMgZXhlY3V0ZWQuCi0gPHA+Ci0gU3ludGF4IGFuZCB1c2FnZSBpcyBvdGhlcndpc2Ugc2ltaWxhciB0byBzZWxlY3RQYXRoLgotIDxwPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5zZWxlY3RQYXRoKFN0cmluZyk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLWV4ZWNRdWVyeTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT5bXSA8Qj5leGVjUXVlcnk8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtxdWVyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L1BSRT4KLTxETD4KLTxERD5FeGVjdXRlcyBhIHF1ZXJ5IHdpdGggb3B0aW9ucy4KLSAKLSBVc2UgdGhlIDxlbT5vcHRpb25zPC9lbT4gcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlIGZvbGxvd2luZzo8L3A+Ci0gCi0gPHRhYmxlPgotIDx0cj48dGg+VG8gc3BlY2lmeSB0aGlzPC90aD48dGg+VXNlIHRoaXMgbWV0aG9kPC90aD48L3RyPgotIDx0cj4KLSAgPHRkPlRoZSBkb2N1bWVudCB0eXBlIGZvciB0aGUgcm9vdCBlbGVtZW50LjwvdGQ+Ci0gIDx0ZD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXREb2N1bWVudFR5cGUob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlKSI+PENPREU+WG1sT3B0aW9ucy5zZXREb2N1bWVudFR5cGUob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlKTwvQ09ERT48L0E+PC90ZD4KLSA8L3RyPgotIDx0cj4KLSAgPHRkPlRvIHJlcGxhY2UgdGhlIGRvY3VtZW50IGVsZW1lbnQgd2l0aCB0aGUgc3BlY2lmaWVkIFFOYW1lIHdoZW4gY29uc3RydWN0aW5nIHRoZQotICByZXN1bHRpbmcgZG9jdW1lbnQuPC90ZD4KLSAgPHRkPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldExvYWRSZXBsYWNlRG9jdW1lbnRFbGVtZW50KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48Q09ERT5YbWxPcHRpb25zLnNldExvYWRSZXBsYWNlRG9jdW1lbnRFbGVtZW50KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpPC9DT0RFPjwvQT48L3RkPgotIDwvdHI+Ci0gPHRyPgotICA8dGQ+VG8gc3RyaXAgYWxsIGluc2lnbmlmaWNhbnQgd2hpdGVzcGFjZSB3aGVuIGNvbnN0cnVjdGluZyBhIGRvY3VtZW50LjwvdGQ+Ci0gIDx0ZD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRMb2FkU3RyaXBXaGl0ZXNwYWNlKCkiPjxDT0RFPlhtbE9wdGlvbnMuc2V0TG9hZFN0cmlwV2hpdGVzcGFjZSgpPC9DT0RFPjwvQT48L3RkPgotIDwvdHI+Ci0gPHRyPgotICA8dGQ+VG8gc3RyaXAgYWxsIGNvbW1lbnRzIHdoZW4gY29uc3RydWN0aW5nIGEgZG9jdW1lbnQuPC90ZD4KLSAgPHRkPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldExvYWRTdHJpcENvbW1lbnRzKCkiPjxDT0RFPlhtbE9wdGlvbnMuc2V0TG9hZFN0cmlwQ29tbWVudHMoKTwvQ09ERT48L0E+PC90ZD4KLSA8L3RyPgotIDx0cj4KLSAgPHRkPlRvIHN0cmlwIGFsbCBwcm9jZXNzaW5nIGluc3RydWN0aW9ucyB3aGVuIGNvbnN0cnVjdGluZyBhIGRvY3VtZW50LjwvdGQ+Ci0gIDx0ZD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRMb2FkU3RyaXBQcm9jaW5zdHMoKSI+PENPREU+WG1sT3B0aW9ucy5zZXRMb2FkU3RyaXBQcm9jaW5zdHMoKTwvQ09ERT48L0E+PC90ZD4KLSA8L3RyPgotIDx0cj4KLSAgPHRkPkEgbWFwIG9mIG5hbWVzcGFjZSBVUkkgc3Vic3RpdHV0aW9ucyB0byB1c2Ugd2hlbiBjb25zdHJ1Y3RpbmcgYSBkb2N1bWVudC48L3RkPgotICA8dGQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0TG9hZFN1YnN0aXR1dGVOYW1lc3BhY2VzKGphdmEudXRpbC5NYXApIj48Q09ERT5YbWxPcHRpb25zLnNldExvYWRTdWJzdGl0dXRlTmFtZXNwYWNlcyhqYXZhLnV0aWwuTWFwKTwvQ09ERT48L0E+PC90ZD4KLSA8L3RyPgotIDx0cj4KLSAgPHRkPkFkZGl0aW9uYWwgbmFtZXNwYWNlIG1hcHBpbmdzIHRvIGJlIGFkZGVkIHdoZW4gY29uc3RydWN0aW5nIGEgZG9jdW1lbnQuPC90ZD4KLSAgPHRkPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldExvYWRBZGRpdGlvbmFsTmFtZXNwYWNlcyhqYXZhLnV0aWwuTWFwKSI+PENPREU+WG1sT3B0aW9ucy5zZXRMb2FkQWRkaXRpb25hbE5hbWVzcGFjZXMoamF2YS51dGlsLk1hcCk8L0NPREU+PC9BPjwvdGQ+Ci0gPC90cj4KLSA8dHI+Ci0gIDx0ZD5UbyB0cmltIHRoZSB1bmRlcmx5aW5nIFhNTCB0ZXh0IGJ1ZmZlciBpbW1lZGlhdGVseSBhZnRlciBjb25zdHJ1Y3RpbmcgCi0gIGEgZG9jdW1lbnQsIHJlc3VsdGluZyBpbiBhIHNtYWxsZXIgbWVtb3J5IGZvb3RwcmludC48L3RkPgotICA8dGQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0TG9hZFRyaW1UZXh0QnVmZmVyKCkiPjxDT0RFPlhtbE9wdGlvbnMuc2V0TG9hZFRyaW1UZXh0QnVmZmVyKCk8L0NPREU+PC9BPjwvdGQ+Ci0gPC90cj4KLSA8dHI+Ci0gIDx0ZD5XaGV0aGVyIHZhbHVlIGZhY2V0cyBzaG91bGQgYmUgY2hlY2tlZCBhcyB0aGV5IGFyZSBzZXQuPC90ZD4KLSAgPHRkPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldFZhbGlkYXRlT25TZXQoKSI+PENPREU+WG1sT3B0aW9ucy5zZXRWYWxpZGF0ZU9uU2V0KCk8L0NPREU+PC9BPjwvdGQ+Ci0gPC90cj4KLSA8L3RhYmxlPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5xdWVyeTwvQ09ERT4gLSBUaGUgWFF1ZXJ5IGV4cHJlc3Npb24uPEREPjxDT0RFPm9wdGlvbnM8L0NPREU+IC0gT3B0aW9ucyBhcyBkZXNjcmliZWQuPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPmV4ZWNRdWVyeShTdHJpbmcpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNoYW5nZVR5cGUob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlKSI+PCEtLSAtLT48L0E+PEgzPgotY2hhbmdlVHlwZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4gPEI+Y2hhbmdlVHlwZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Jm5ic3A7bmV3VHlwZSk8L1BSRT4KLTxETD4KLTxERD5DaGFuZ2VzIHRoZSBzY2hlbWEgdHlwZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkYXRhIGFuZAotIHJldHVybnMgYSBuZXcgWG1sT2JqZWN0IGluc3RhbmNlIHdob3NlIHNjaGVtYVR5cGUgaXMgdGhlCi0gbmV3IHR5cGUuCi0gPHA+Ci0gUmV0dXJucyBudWxsIGlmIHRoZSB0eXBlIGNoYW5nZSBpcyBub3QgYWxsb3dlZC4gQ2VydGFpbgotIHR5cGUgY2hhbmdlcyBtYXkgYmUgcHJvaGliaXRlZCBvbiB0aGUgaW50ZXJpb3Igb2YgYW4geG1sCi0gdHJlZSBkdWUgdG8gc2NoZW1hIHR5cGUgc3lzdGVtIGNvbnN0cmFpbnRzICh0aGF0IGlzLCBkdWUKLSB0byBhIHBhcmVudCBjb250YWluZXIgd2l0aGluIHdoaWNoIHRoZSBuZXdseSBzcGVjaWZpZWQKLSB0eXBlIGlzIG5vdCBwZXJtaXNzaWJsZSksIGJ1dCB0aGVyZSBhcmUgbm8gY29uc3RyYWludHMKLSBhdCB0aGUgcm9vdHR5cGUgY2hhbmdlcyBhcmUgbmV2ZXIKLSBwcm9oaWJpdGVkIGF0IHRoZSByb290IG9mIGFuIHhtbCB0cmVlLgotIDxwPgotIElmIHRoZSB0eXBlIGNoYW5nZSBpcyBhbGxvd2VkLCB0aGVuIHRoZSBuZXcgWG1sT2JqZWN0IHNob3VsZAotIGJlIHVzZWQgcmF0aGVyIHRoYW4gdGhlIG9sZCBvbmUuIFRoZSBvbGQgWG1sT2JqZWN0IGluc3RhbmNlIGFuZAotIGFueSBvdGhlciBYbWxPYmplY3QgaW5zdGFuY2VzIGluIHRoZSBzdWJ0cmVlIGFyZSBwZXJtYW5lbnRseQotIGludmFsaWRhdGVkIGFuZCBzaG91bGQgbm90IGJlIHVzZWQuIChUaGV5IHdpbGwgcmV0dXJuCi0gSW52YWxpZFN0YXRlRXhjZXB0aW9uIGlmIHlvdSB0cnkgdG8gdXNlIHRoZW0uKQotCi0gSWYgYSB0eXBlIGNoYW5nZSBpcyBkb25lIG9uIHRoZSBpbnRlcmlvciBvZiBhbiBYbWwKLSB0cmVlLCB0aGVuIHhzaTp0eXBlIGF0dHJpYnV0ZXMgYXJlIHVwZGF0ZWQgYXMgbmVlZGVkLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc05pbCgpIj48IS0tIC0tPjwvQT48SDM+Ci1pc05pbDwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+aXNOaWw8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoZSB2YWx1ZSBpcyBuaWwuIE5vdGUgdGhhdCBpbiBvcmRlciB0byBiZSBuaWwsCi0gdGhlIHZhbHVlIG11c3QgYmUgaW4gYW4gZWxlbWVudCwgYW5kIHRoZSBlbGVtZW50IGNvbnRhaW5pbmcKLSB0aGUgdmFsdWUgbXVzdCBiZSBtYXJrZWQgYXMgbmlsbGFibGUgaW4gdGhlIHNjaGVtYS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0TmlsKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldE5pbDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0TmlsPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgdmFsdWUgdG8gbmlsLiBUaGUgZWxlbWVudCBjb250YWluaW5nIHRoZSB2YWx1ZSBtdXN0Ci0gYmUgbWFya2VkIGFzIG5pbGxhYmxlIGluIHRoZSBzY2hlbWEuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InRvU3RyaW5nKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXRvU3RyaW5nPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj50b1N0cmluZzwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYW4gWE1MIHN0cmluZyBmb3IgdGhpcyBYTUwgb2JqZWN0LgotIDxwPgotIFRoZSBzdHJpbmcgaXMgcHJldHR5LXByaW50ZWQuICBJZiB5b3Ugd2FudCBhIG5vbi1wcmV0dHktcHJpbnRlZAotIHN0cmluZywgb3IgaWYgeW91IHdhbnQgdG8gY29udHJvbCBvcHRpb25zIHByZWNpc2VseSwgdXNlIHRoZQotIHhtbFRleHQoKSBtZXRob2RzLgotIDxwPgotIE5vdGUgdGhhdCB3aGVuIHByb2R1Y2luZyBYTUwgYW55IG9iamVjdCBvdGhlciB0aGFuIHZlcnkgcm9vdCBvZiB0aGUKLSBkb2N1bWVudCwgdGhlbiB5b3UgYXJlIGd1YXJhbnRlZWQgdG8gYmUgbG9va2luZyBhdCBvbmx5IGEgZnJhZ21lbnQKLSBvZiBYTUwsIGkuZS4sIGp1c3QgdGhlIGNvbnRlbnRzIG9mIGFuIGVsZW1lbnQgb3IgYXR0cmlidXRlLCBhbmQKLSBhbmQgd2Ugd2lsbCBwcm9kdWNlIGEgc3RyaW5nIHRoYXQgc3RhcnRzIHdpdGggYW4gPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDs8L2NvZGU+IHRhZy4KLSBUaGUgWG1sT3B0aW9ucy5zZXRTYXZlT3V0ZXIoKSBvcHRpb24gb24geG1sVGV4dCBjYW4gYmUgdXNlZCB0byBwcm9kdWNlCi0gdGhlIGFjdHVhbCBlbGVtZW50IG5hbWUgYWJvdmUgdGhlIG9iamVjdCBpZiB5b3Ugd2lzaC4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5PdmVycmlkZXM6PC9CPjxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPjwvQ09ERT4gaW4gY2xhc3MgPENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImlzSW1tdXRhYmxlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzSW1tdXRhYmxlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5pc0ltbXV0YWJsZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlRydWUgaWYgdGhlIHZhbHVlIGlzIGFuIGltbXV0YWJsZSB2YWx1ZS4gSW1tdXRhYmxlIHZhbHVlcyBkbyBub3QKLSBoYXZlIGEgcG9zaXRpb24gaW4gYSB0cmVlOyByYXRoZXIsIHRoZXkgYXJlIHN0YW5kLWFsb25lIHNpbXBsZSB0eXBlCi0gdmFsdWVzLiBJZiB0aGUgb2JqZWN0IGlzIGltbXV0YWJsZSwgdGhlIGVxdWFscygpIG1ldGhvZHMgdGVzdHMgZm9yCi0gdmFsdWUgZXF1YWxpdHksIGFuZCB0aGUgb2JqZWN0IGNhbiBiZSB1c2VkIGFzIHRoZSBrZXkgZm9yIGEgaGFzaC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotc2V0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiA8Qj5zZXQ8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4mbmJzcDtzcmNPYmopPC9QUkU+Ci08REw+Ci08REQ+U2V0IHRoZSB2YWx1ZS90eXBlIG9mIHRoaXMgWG1sT2JqZWN0IHRvIGJlIGEgY29weSBvZiB0aGUgc291cmNlCi0gWG1sT2JqZWN0LiAgQmVjYXVzZSB0aGUgdHlwZSBvZiB0aGUgc291cmNlIG1heSBiZSBkaWZmZXJlbnQgdGhhbiB0aGlzCi0gdGFyZ2V0LCB0aGlzIFhtbE9iamVjdCBtYXkgYmVjb21lIGRlZnVuY3QuICBJbiB0aGlzIGNhc2UgdGhlIG5ldwotIFhtbE9iamVjdCBpcyByZXR1cm5lZC4gIElmIG5vIHR5cGUgY2hhbmdlIGhhcHBlbnMsIHRoZSBzYW1lIHRoaXMgd2lsbCBiZQotIHJldHVybmVkLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjb3B5KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNvcHk8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+IDxCPmNvcHk8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgZGVlcCBjb3B5IG9mIHRoaXMgWG1sT2JqZWN0LiAgVGhlIHJldHVybmVkIG9iamVjdCBoYXMgdGhlCi0gc2FtZSB0eXBlIGFzIHRoZSBjdXJyZW50IG9iamVjdCwgYW5kIGhhcyBhbGwgdGhlIGNvbnRlbnQgb2YKLSB0aGUgWE1MIGRvY3VtZW50IHVuZGVybmVhdGggdGhlIGN1cnJlbnQgb2JqZWN0LiAgTm90ZSB0aGF0Ci0gYW55IHBhcnRzIG9mIHRoZSBYTUwgZG9jdW1lbnQgYWJvdmUgb3Igb3V0c2lkZSB0aGlzIFhtbE9iamVjdCBhcmUKLSBub3QgY29waWVkLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ2YWx1ZUVxdWFscyhvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLXZhbHVlRXF1YWxzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj52YWx1ZUVxdWFsczwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoZSB4bWwgdmFsdWVzIGFyZSBlcXVhbC4gVHdvIGRpZmZlcmVudCBvYmplY3RzCi0gKHdoaWNoIGFyZSBkaXN0aW5ndWlzaGVkIGJ5IGVxdWFscyhvYmopID09IGZhbHNlKSBtYXkgb2YKLSBjb3Vyc2UgaGF2ZSBlcXVhbCB2YWx1ZXMgKHZhbHVlRXF1YWxzKG9iaikgPT0gdHJ1ZSkuCi0gPHA+Ci0gVXN1YWxseSB0aGlzIG1ldGhvZCBjYW4gYmUgdHJlYXRlZCBhcyBhbiBvcmRpbmFyeSBlcXV2YWxlbmNlCi0gcmVsYXRpb24sIGJ1dCBhY3R1YWxseSBpdCBpcyBub3QgaXMgbm90IHRyYW5zaXRpdmUuCi0gSGVyZSBpcyBhIHByZWNpc2Ugc3BlY2lmaWNhdGlvbjoKLSA8cD4KLSBUaGVyZSBhcmUgdHdvIGNhdGVnb3JpZXMgb2YgWE1MIG9iamVjdDogb2JqZWN0cyB3aXRoIGEga25vd24KLSBpbnN0YW5jZSB0eXBlLCBhbmQgb2JqZWN0cyB3aG9zZSBvbmx5IGtub3duIHR5cGUgaXMgb25lIG9mIHRoZQotIHVyLXR5cGVzIChlaXRoZXIgQW55VHlwZSBvciBBbnlTaW1wbGVUeXBlKS4gVGhlIGZpcnN0IGNhdGVnb3J5Ci0gaXMgY29tcGFyZWQgaW4gdGVybXMgb2YgbG9naWNhbCB2YWx1ZSBzcGFjZXMsIGFuZCB0aGUgc2Vjb25kCi0gY2F0ZWdvcnkgaXMgY29tcGFyZWQgbGV4aWNhbGx5LgotIDxwPgotIFdpdGhpbiBlYWNoIG9mIHRoZXNlIHR3byBjYXRlZ29yaWVzLCB2YWx1ZUVxdWFscyBpcyBhIHdlbGwtYmVoYXZlZAotIGVxdWl2YWxlbmNlIHJlbGF0aW9uLiBIb3dldmVyLCB3aGVuIGNvbXBhcmluZyBhbiBvYmplY3Qgb2Yga25vd24KLSB0eXBlIHdpdGggYW4gb2JqZWN0IHdpdGggdXItdHlwZSwgdGhlIGNvbXBhcmlzb24gaXMgZG9uZSBieSBhdHRlbXB0aW5nCi0gdG8gY29udmVydCB0aGUgbGV4aWNhbCBmb3JtIG9mIHRoZSB1ci10eXBlZCBvYmplY3QgaW50byB0aGUgb3RoZXIKLSB0eXBlLCBhbmQgdGhlbiBjb21wYXJpbmcgdGhlIHJlc3VsdHMuIFVyLXR5cGVkIG9iamVjdHMgYXJlIHRoZXJlZm9yZQotIHRyZWF0ZWQgYXMgbGV4aWNhbCB3aWxkY2FyZHMgYW5kIG1heSBiZSBlcXVhbCB0byBvYmplY3RzIGluIGRpZmZlcmVudAotIHZhbHVlIHNwYWNlcywgZXZlbiB0aG91Z2ggdGhlIG9iamVjdHMgaW4gZGlmZmVyZW50IHZhbHVlIHNwYWNlcyBhcmUKLSBub3QgZXF1YWwgdG8gZWFjaCBvdGhlci4KLSA8cD4KLSBGb3IgZXhhbXBsZSwgdGhlIGFueVNpbXBsZVR5cGUgdmFsdWUgIjEiIHdpbGwgY29tcGFyZSBhcyBhbgotIGVxdWFsVmFsdWUgdG8gdGhlIHN0cmluZyAiMSIsIHRoZSBmbG9hdCB2YWx1ZSAiMS4wIiwgdGhlIGRvdWJsZQotIHZhbHVlICIxLjAiLCB0aGUgZGVjaW1hbCAiMSIsIGFuZCB0aGUgR1llYXIgIjEiLCBldmVuIHRob3VnaAotIGFsbCB0aGVzZSBvYmplY3RzIHdpbGwgY29tcGFyZSB1bmVxdWFsIHRvIGVhY2ggb3RoZXIgc2luY2UgdGhleQotIGxpZSBpbiBkaWZmZXJlbnQgdmFsdWUgc3BhY2VzLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ2YWx1ZUhhc2hDb2RlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXZhbHVlSGFzaENvZGU8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+dmFsdWVIYXNoQ29kZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iY29tcGFyZVRvKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1jb21wYXJlVG88L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+Y29tcGFyZVRvPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPkltcGVsZW1lbnRzIHRoZSBDb21wYXJhYmxlIGludGVyZmFjZSBieSBjb21wYXJpbmcgdHdvIHNpbXBsZQotIHhtbCB2YWx1ZXMgYmFzZWQgb24gdGhlaXIgc3RhbmRhcmQgWE1MIHNjaGVtYSBvcmRlcmluZy4KLSBUaHJvd3MgYSBDbGFzc0Nhc3RFeGNlcHRpb24gaWYgbm8gc3RhbmRhcmQgb3JkZXJpbmcgYXBwbGllcywKLSBvciBpZiB0aGUgdHdvIHZhbHVlcyBhcmUgaW5jb21wYXJhYmxlIHdpdGhpbiBhIHBhcnRpYWwgb3JkZXIuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImNvbXBhcmVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNvbXBhcmVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGludCA8Qj5jb21wYXJlVmFsdWU8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+VGhpcyBjb21wYXJpc29uIG1ldGhvZCBpcyBzaW1pbGFyIHRvIGNvbXBhcmVUbywgYnV0IHJhdGhlcgotIHRoYW4gdGhyb3dpbmcgYSBDbGFzc0Nhc3RFeGNlcHRpb24gd2hlbiB0d28gdmFsdWVzIGFyZSBpbmNvbXBhcmFibGUsCi0gaXQgcmV0dXJucyB0aGUgbnVtYmVyIDIuIFRoZSByZXN1bHQgY29kZXMgYXJlIC0xIGlmIHRoaXMgb2JqZWN0Ci0gaXMgbGVzcyB0aGFuIG9iaiwgMSBpZiB0aGlzIG9iamVjdCBpcyBncmVhdGVyIHRoYW4gb2JqLCB6ZXJvIGlmCi0gdGhlIG9iamVjdHMgYXJlIGVxdWFsLCBhbmQgMiBpZiB0aGUgb2JqZWN0cyBhcmUgaW5jb21wYXJhYmxlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sT2JqZWN0Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODljZmJhYS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMDk0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDc6MDEgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxPcHRpb25zIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMsWG1sT3B0aW9ucyBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sT3B0aW9ucyAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxPcHRpb25zLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sT3B0aW9uczwvSDI+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+amF2YS5sYW5nLk9iamVjdDwvQT4KLSAgfAotICArLS08Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnM8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5BbGwgSW1wbGVtZW50ZWQgSW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9TZXJpYWxpemFibGUuaHRtbCI+U2VyaWFsaXphYmxlPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBjbGFzcyA8Qj5YbWxPcHRpb25zPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48RFQ+aW1wbGVtZW50cyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9TZXJpYWxpemFibGUuaHRtbCI+U2VyaWFsaXphYmxlPC9BPjwvREw+Ci0KLTxQPgotVXNlZCB0byBzdXBwbHkgb3B0aW9ucyBmb3IgbG9hZGluZywgc2F2aW5nLCBhbmQgY29tcGlsaW5nLCBhbmQgdmFsaWRhdGluZy4KLSA8cD4KLSBUaGVyZSBhcmUgdHdvIHN0eWxlcyBmb3IgdXNpbmcgWG1sT3B0aW9uczogbXVsdGlsaW5lIHNldHVwLCBhbmQgc2luZ2xlLWxpbmUgdXNlLgotIEhlcmUgYXJlIHR3byBleGFtcGxlcy4gIEZpcnN0LCBtdWx0aWxpbmUgc3R5bGU6Ci0gPHByZT4KLSBYbWxPcHRpb25zIG9wdHMgPSBuZXcgWG1sT3B0aW9ucygpOwotIG9wdHMuc2V0U2F2ZVByZXR0eVByaW50KCk7Ci0gb3B0cy5zZXRTYXZlUHJldHR5UHJpbnRJbmRlbnQoNCk7Ci0gU3lzdGVtLm91dC5wcmludGxuKHhvYmoueG1sVGV4dChvcHRzKSk7Ci0gPC9wcmU+Ci0gCi0gVGhlIGFsdGVybmF0aXZlIGlzIHNpbmdsZS1saW5lIHVzYWdlOgotIDxwcmU+Ci0gU3lzdGVtLm91dC5wcmludGxuKHhvYmoueG1sVGV4dCgKLSAgICAgbmV3IFhtbE9wdGlvbnMoKS5zZXRTYXZlUHJldHR5UHJpbnQoKS5zZXRTYXZlUHJldHR5UHJpbnRJbmRlbnQoNCkpKTsKLSA8L3ByZT4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL3NlcmlhbGl6ZWQtZm9ybS5odG1sIiBUQVJHRVQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyI+U2VyaWFsaXplZCBGb3JtPC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjQ0hBUkFDVEVSX0VOQ09ESU5HIj5DSEFSQUNURVJfRU5DT0RJTkc8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjQ09NUElMRV9ET1dOTE9BRF9VUkxTIj5DT01QSUxFX0RPV05MT0FEX1VSTFM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjQ09NUElMRV9NREVGX05BTUVTUEFDRVMiPkNPTVBJTEVfTURFRl9OQU1FU1BBQ0VTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI0NPTVBJTEVfTk9fUFZSX1JVTEUiPkNPTVBJTEVfTk9fUFZSX1JVTEU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjQ09NUElMRV9OT19VUEFfUlVMRSI+Q09NUElMRV9OT19VUEFfUlVMRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNDT01QSUxFX05PX1ZBTElEQVRJT04iPkNPTVBJTEVfTk9fVkFMSURBVElPTjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNDT01QSUxFX1NVQlNUSVRVVEVfTkFNRVMiPkNPTVBJTEVfU1VCU1RJVFVURV9OQU1FUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNET0NVTUVOVF9TT1VSQ0VfTkFNRSI+RE9DVU1FTlRfU09VUkNFX05BTUU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjRE9DVU1FTlRfVFlQRSI+RE9DVU1FTlRfVFlQRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNFTlRJVFlfUkVTT0xWRVIiPkVOVElUWV9SRVNPTFZFUjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNFUlJPUl9MSVNURU5FUiI+RVJST1JfTElTVEVORVI8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjTE9BRF9BRERJVElPTkFMX05BTUVTUEFDRVMiPkxPQURfQURESVRJT05BTF9OQU1FU1BBQ0VTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI0xPQURfTElORV9OVU1CRVJTIj5MT0FEX0xJTkVfTlVNQkVSUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNMT0FEX01FU1NBR0VfRElHRVNUIj5MT0FEX01FU1NBR0VfRElHRVNUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI0xPQURfUkVQTEFDRV9ET0NVTUVOVF9FTEVNRU5UIj5MT0FEX1JFUExBQ0VfRE9DVU1FTlRfRUxFTUVOVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNMT0FEX1NUUklQX0NPTU1FTlRTIj5MT0FEX1NUUklQX0NPTU1FTlRTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI0xPQURfU1RSSVBfUFJPQ0lOU1RTIj5MT0FEX1NUUklQX1BST0NJTlNUUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNMT0FEX1NUUklQX1dISVRFU1BBQ0UiPkxPQURfU1RSSVBfV0hJVEVTUEFDRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNMT0FEX1NVQlNUSVRVVEVfTkFNRVNQQUNFUyI+TE9BRF9TVUJTVElUVVRFX05BTUVTUEFDRVM8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjTE9BRF9UUklNX1RFWFRfQlVGRkVSIj5MT0FEX1RSSU1fVEVYVF9CVUZGRVI8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjU0FWRV9BR0dSRVNTSVZFX05BTUVTUEFDRVMiPlNBVkVfQUdHUkVTU0lWRV9OQU1FU1BBQ0VTPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI1NBVkVfRklMVEVSX1BST0NJTlNUIj5TQVZFX0ZJTFRFUl9QUk9DSU5TVDwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNTQVZFX0lNUExJQ0lUX05BTUVTUEFDRVMiPlNBVkVfSU1QTElDSVRfTkFNRVNQQUNFUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNTQVZFX0lOTkVSIj5TQVZFX0lOTkVSPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI1NBVkVfTkFNRVNQQUNFU19GSVJTVCI+U0FWRV9OQU1FU1BBQ0VTX0ZJUlNUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI1NBVkVfT1VURVIiPlNBVkVfT1VURVI8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjU0FWRV9QUkVUVFlfUFJJTlQiPlNBVkVfUFJFVFRZX1BSSU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI1NBVkVfUFJFVFRZX1BSSU5UX0lOREVOVCI+U0FWRV9QUkVUVFlfUFJJTlRfSU5ERU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI1NBVkVfUFJFVFRZX1BSSU5UX09GRlNFVCI+U0FWRV9QUkVUVFlfUFJJTlRfT0ZGU0VUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI1NBVkVfU1VHR0VTVEVEX1BSRUZJWEVTIj5TQVZFX1NVR0dFU1RFRF9QUkVGSVhFUzwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNTQVZFX1NZTlRIRVRJQ19ET0NVTUVOVF9FTEVNRU5UIj5TQVZFX1NZTlRIRVRJQ19ET0NVTUVOVF9FTEVNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI1NBVkVfVVNFX0RFRkFVTFRfTkFNRVNQQUNFIj5TQVZFX1VTRV9ERUZBVUxUX05BTUVTUEFDRTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNTQVZFX1VTRV9PUEVOX0ZSQUdNRU5UIj5TQVZFX1VTRV9PUEVOX0ZSQUdNRU5UPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI1ZBTElEQVRFX09OX1NFVCI+VkFMSURBVEVfT05fU0VUPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI1hRVUVSWV9DVVJSRU5UX05PREVfVkFSIj5YUVVFUllfQ1VSUkVOVF9OT0RFX1ZBUjwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0iY29uc3RydWN0b3Jfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI1htbE9wdGlvbnMoKSI+WG1sT3B0aW9uczwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdCBhIG5ldyBibGFuayBYbWxPcHRpb25zLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjWG1sT3B0aW9ucyhvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5YbWxPcHRpb25zPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3RoZXIpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb25zdHJ1Y3QgYSBuZXcgWG1sT3B0aW9ucywgY29weWluZyB0aGUgb3B0aW9ucy48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI2dldChqYXZhLmxhbmcuT2JqZWN0KSI+Z2V0PC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29wdGlvbik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1VzZWQgdG8gZ2V0IGEgZ2VuZXJpYyBvcHRpb248L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNoYXNPcHRpb24oamF2YS5sYW5nLk9iamVjdCkiPmhhc09wdGlvbjwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvcHRpb24pPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtVc2VkIHRvIHRlc3QgYSBnZW5lcmljIG9wdGlvbjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjbWFza051bGwob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bWFza051bGw8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SWYgcGFzc2VkIG51bGwsIHJldHVybnMgYW4gZW1wdHkgb3B0aW9ucyBvYmplY3QuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjcHV0KGphdmEubGFuZy5PYmplY3QpIj5wdXQ8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b3B0aW9uKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VXNlZCB0byBzZXQgYSBnZW5lcmljIG9wdGlvbjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3B1dChqYXZhLmxhbmcuT2JqZWN0LCBpbnQpIj5wdXQ8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b3B0aW9uLAotICAgIGludCZuYnNwO3ZhbHVlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VXNlZCB0byBzZXQgYSBnZW5lcmljIG9wdGlvbjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3B1dChqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuT2JqZWN0KSI+cHV0PC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29wdGlvbiwKLSAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7dmFsdWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtVc2VkIHRvIHNldCBhIGdlbmVyaWMgb3B0aW9uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2FmZUdldChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMsIGphdmEubGFuZy5PYmplY3QpIj5zYWZlR2V0PC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7bywKLSAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29wdGlvbik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1VzZWQgdG8gdGVzdCBhIGdlbmVyaWMgb3B0aW9uIG9uIGFuIG9wdGlvbnMgb2JqZWN0IHRoYXQgbWF5IGJlIG51bGw8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldENoYXJhY3RlckVuY29kaW5nKGphdmEubGFuZy5TdHJpbmcpIj5zZXRDaGFyYWN0ZXJFbmNvZGluZzwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtlbmNvZGluZyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1doZW4gcGFyc2luZyBvciB3cml0aW5nIGEgZG9jdW1lbnQsIHRoaXMgc2V0cyB0aGUgY2hhcmFjdGVyCi0gZW5jb2RpbmcgdG8gdXNlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0Q29tcGlsZURvd25sb2FkVXJscygpIj5zZXRDb21waWxlRG93bmxvYWRVcmxzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SWYgdGhpcyBvcHRpb24gaXMgc2V0LCB0aGVuIHRoZSBzY2hlbWEgY29tcGlsZXIgd2lsbCB0cnkgdG8gZG93bmxvYWQKLSBzY2hlbWFzIHRoYXQgYXBwZWFyIGluIGltcG9ydHMgYW5kIGluY2x1ZGVzIGZyb20gbmV0d29yayBiYXNlZCBVUkxzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0Q29tcGlsZU1kZWZOYW1lc3BhY2VzKGphdmEudXRpbC5TZXQpIj5zZXRDb21waWxlTWRlZk5hbWVzcGFjZXM8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL1NldC5odG1sIj5TZXQ8L0E+Jm5ic3A7bWRlZk5hbWVzcGFjZXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtJZiB0aGlzIG9wdGlvbiBpcyBzZXQsIHRoZW4gdGhlIHNjaGVtYSBjb21waWxlciB3aWxsIHBlcm1pdCBhbmQKLSBpZ25vcmUgbXVsdGlwbGUgZGVmaW5pdGlvbnMgb2YgdGhlIHNhbWUgY29tcG9uZW50IChlbGVtZW50LCBhdHRyaWJ1dGUsCi0gdHlwZSwgZXRjKSBuYW1lcyBpbiB0aGUgZ2l2ZW4gbmFtZXNwYWNlcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldENvbXBpbGVOb1B2clJ1bGUoKSI+c2V0Q29tcGlsZU5vUHZyUnVsZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0lmIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIHBhcnRpY2xlIHZhbGlkIChyZXN0cmljaXRvbikgcnVsZSBpcyBub3QKLSBlbmZvcmNlZCB3aGVuIGJ1aWxkaW5nIGEgPGNvZGU+U2NoZW1hVHlwZVN5c3RlbTwvY29kZT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRDb21waWxlTm9VcGFSdWxlKCkiPnNldENvbXBpbGVOb1VwYVJ1bGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtJZiB0aGlzIG9wdGlvbiBpcyBzZXQsIHRoZSB1bmlxdWUgcGFydGljbGUgYXR0cmlidXRpb24gcnVsZSBpcyBub3QKLSBlbmZvcmNlZCB3aGVuIGJ1aWxkaW5nIGEgPGNvZGU+U2NoZW1hVHlwZVN5c3RlbTwvY29kZT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRDb21waWxlTm9WYWxpZGF0aW9uKCkiPnNldENvbXBpbGVOb1ZhbGlkYXRpb248L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtJZiB0aGlzIG9wdGlvbiBpcyBzZXQsIHZhbGlkYXRpb24gaXMgbm90IGRvbmUgb24gdGhlIFNjaGVtYSBYbWxCZWFucwotIHdoZW4gYnVpbGRpbmcgYSA8Y29kZT5TY2hlbWFUeXBlU3lzdGVtPC9jb2RlPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0Q29tcGlsZVN1YnN0aXR1dGVOYW1lcyhqYXZhLnV0aWwuTWFwKSI+c2V0Q29tcGlsZVN1YnN0aXR1dGVOYW1lczwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTWFwLmh0bWwiPk1hcDwvQT4mbmJzcDtuYW1lTWFwKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhpcyBvcHRpb24gYWxsb3dzIGZvciA8Y29kZT5RTmFtZTwvY29kZT4gc3Vic3RpdHV0aW9uIGR1cmluZyBzY2hlbWEgY29tcGlsYXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXREb2N1bWVudFNvdXJjZU5hbWUoamF2YS5sYW5nLlN0cmluZykiPnNldERvY3VtZW50U291cmNlTmFtZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtkb2N1bWVudFNvdXJjZU5hbWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGlzIG9wdGlvbiBzZXRzIHRoZSBkb2N1bWVudCBzb3VyY2UgbmFtZSBpbnRvIHRoZSB4bWwgc3RvcmUKLSB3aGVuIHBhcnNpbmcgYSBkb2N1bWVudC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldERvY3VtZW50VHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj5zZXREb2N1bWVudFR5cGU8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4mbmJzcDt0eXBlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7V2hlbiBwYXJzaW5nIGEgZG9jdW1lbnQsIHRoaXMgc2V0cyB0aGUgdHlwZSBvZiB0aGUgcm9vdAotIGVsZW1lbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRFbnRpdHlSZXNvbHZlcihvcmcueG1sLnNheC5FbnRpdHlSZXNvbHZlcikiPnNldEVudGl0eVJlc29sdmVyPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy94bWwvc2F4L0VudGl0eVJlc29sdmVyLmh0bWwiPkVudGl0eVJlc29sdmVyPC9BPiZuYnNwO3Jlc29sdmVyKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SWYgdGhpcyBvcHRpb24gaXMgc2V0IHdoZW4gY29tcGlsaW5nIGEgc2NoZW1hLCB0aGVuIHRoZSBnaXZlbgotIEVudGl0eVJlc29sdmVyIHdpbGwgYmUgY29uc3VsdGVkIGluIG9yZGVyIHRvIHJlc29sdmUgYW55Ci0gVVJJcyB3aGlsZSBkb3dubG9hZGluZyBpbXBvcnRlZCBzY2hlbWFzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0RXJyb3JMaXN0ZW5lcihqYXZhLnV0aWwuQ29sbGVjdGlvbikiPnNldEVycm9yTGlzdGVuZXI8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NvbGxlY3Rpb24uaHRtbCI+Q29sbGVjdGlvbjwvQT4mbmJzcDtjKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyBhIGNvbGxlY3Rpb24gb2JqZWN0IGZvciBjb2xsZWN0aW5nIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+PENPREU+WG1sRXJyb3I8L0NPREU+PC9BPiBvYmplY3RzIAotIGR1cmluZyBwYXJzaW5nLCB2YWxpZGF0aW9uLCBhbmQgY29tcGlsYXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRMb2FkQWRkaXRpb25hbE5hbWVzcGFjZXMoamF2YS51dGlsLk1hcCkiPnNldExvYWRBZGRpdGlvbmFsTmFtZXNwYWNlczwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTWFwLmh0bWwiPk1hcDwvQT4mbmJzcDtuc2VzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0IGFkZGl0aW9uYWwgbmFtZXNwYWNlIG1hcHBpbmdzIHRvIGJlIGFkZGVkIHdoZW4gcGFyc2luZwotIGEgZG9jdW1lbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRMb2FkTGluZU51bWJlcnMoKSI+c2V0TG9hZExpbmVOdW1iZXJzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SWYgdGhpcyBvcHRpb24gaXMgc2V0LCBsaW5lIG51bWJlciBhbm5vdGF0aW9ucyBhcmUgcGxhY2VkCi0gaW4gdGhlIHN0b3JlIHdoZW4gcGFyc2luZyBhIGRvY3VtZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0TG9hZE1lc3NhZ2VEaWdlc3QoKSI+c2V0TG9hZE1lc3NhZ2VEaWdlc3Q8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtJZiB0aGlzIG9wdGlvbiBpcyBzZXQgd2hlbiBsb2FkaW5nIGZyb20gYW4gSW5wdXRTdHJlYW0gb3IgRmlsZSwgdGhlbgotIHRoZSBsb2FkZXIgd2lsbCBjb21wdXRlIGEgMTYwLWJpdCBTSEEtMSBtZXNzYWdlIGRpZ2VzdCBvZiB0aGUgWE1MCi0gZmlsZSB3aGlsZSBsb2FkaW5nIGl0IGFuZCBtYWtlIGl0IGF2YWlsYWJsZSB2aWEKLSBYbWxPYmplY3QuZG9jdW1lbnRQcm9wZXJ0aWVzKCkuZ2V0TWVzc2FnZURpZ2VzdCgpOwotIDxicj4KLSBUaGUgc2NoZW1hIGNvbXBpbGVyIHVzZXMgbWVzc2FnZSBkaWdlc3RzIHRvIGRldGVjdCBhbmQgZWxpbWluYXRlCi0gZHVwbGljYXRlIGltcG9ydGVkIHhzZCBmaWxlcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldExvYWRSZXBsYWNlRG9jdW1lbnRFbGVtZW50KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5zZXRMb2FkUmVwbGFjZURvY3VtZW50RWxlbWVudDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtyZXBsYWNlbWVudCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0lmIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIGRvY3VtZW50IGVsZW1lbnQgaXMgcmVwbGFjZWQgd2l0aCB0aGUKLSBnaXZlbiBRTmFtZSB3aGVuIHBhcnNpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRMb2FkU3RyaXBDb21tZW50cygpIj5zZXRMb2FkU3RyaXBDb21tZW50czwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0lmIHRoaXMgb3B0aW9uIGlzIHNldCwgYWxsIGNvbW1lbnRzIGFyZSBzdHJpcHBlZCB3aGVuIHBhcnNpbmcKLSBhIGRvY3VtZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0TG9hZFN0cmlwUHJvY2luc3RzKCkiPnNldExvYWRTdHJpcFByb2NpbnN0czwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0lmIHRoaXMgb3B0aW9uIGlzIHNldCwgYWxsIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zIAotIGFyZSBzdHJpcHBlZCB3aGVuIHBhcnNpbmcgYSBkb2N1bWVudC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldExvYWRTdHJpcFdoaXRlc3BhY2UoKSI+c2V0TG9hZFN0cmlwV2hpdGVzcGFjZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0lmIHRoaXMgb3B0aW9uIGlzIHNldCwgYWxsIGluc2lnbmlmaWNhbnQgd2hpdGVzcGFjZSBpcyBzdHJpcHBlZAotIHdoZW4gcGFyc2luZyBhIGRvY3VtZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0TG9hZFN1YnN0aXR1dGVOYW1lc3BhY2VzKGphdmEudXRpbC5NYXApIj5zZXRMb2FkU3Vic3RpdHV0ZU5hbWVzcGFjZXM8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL01hcC5odG1sIj5NYXA8L0E+Jm5ic3A7c3Vic3ROYW1lc3BhY2VzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhpcyBvcHRpb24gc2V0cyBhIG1hcCBvZiBuYW1lc3BhY2UgdXJpIHN1YnN0aXR1dGlvbnMgdGhhdCBoYXBwZW4KLSB3aGVuIHBhcnNpbmcgYSBkb2N1bWVudC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldExvYWRUcmltVGV4dEJ1ZmZlcigpIj5zZXRMb2FkVHJpbVRleHRCdWZmZXI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtJZiB0aGlzIG9wdGlvbiBpcyBzZXQsIHRoZSB1bmRlcmx5aW5nIHhtbCB0ZXh0IGJ1ZmZlciBpcyB0cmltbWVkCi0gaW1tZWRpYXRlbHkgYWZ0ZXIgcGFyc2luZyBhIGRvY3VtZW50IHJlc3VsdGluZyBpbiBhIHNtYWxsZXIgbWVtb3J5Ci0gZm9vdHByaW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0U2F2ZUFnZ3Jlc2l2ZU5hbWVzcGFjZXMoKSI+c2V0U2F2ZUFnZ3Jlc2l2ZU5hbWVzcGFjZXM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDYXVzZXMgdGhlIHNhdmVyIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIG5hbWVzcGFjZSBwcmVmaXggZGVjbGFyYXRpb25zLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0U2F2ZUZpbHRlclByb2NpbnN0KGphdmEubGFuZy5TdHJpbmcpIj5zZXRTYXZlRmlsdGVyUHJvY2luc3Q8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7ZmlsdGVyUHJvY2luc3QpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGlzIG9wdGlvbiBjYXVzZXMgdGhlIHNhdmVyIHRvIGZpbHRlciBhIFByb2Nlc3NpbmcgSW5zdHJ1Y3Rpb24KLSB3aXRoIHRoZSBnaXZlbiB0YXJnZXQ8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldFNhdmVJbXBsaWNpdE5hbWVzcGFjZXMoamF2YS51dGlsLk1hcCkiPnNldFNhdmVJbXBsaWNpdE5hbWVzcGFjZXM8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL01hcC5odG1sIj5NYXA8L0E+Jm5ic3A7aW1wbGljaXROYW1lc3BhY2VzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SWYgbmFtZXNwYWNlcyBoYXZlIGFscmVhZHkgYmVlbiBkZWNsYXJlZCBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGUKLSBmcmFnbWVudCBiZWluZyBzYXZlZCwgdGhpcyBhbGxvd3MgdGhvc2UgbWFwcGluZ3MgdG8gYmUgcGFzc2VkCi0gZG93biB0byB0aGUgc2F2ZXIsIHNvIHRoZSBwcmVmaXhlcyBhcmUgbm90IHJlLWRlY2xhcmVkLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0U2F2ZUlubmVyKCkiPnNldFNhdmVJbm5lcjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoaXMgb3B0aW9uIGNvbnRyb2xzIHdoZXRoZXIgc2F2aW5nIGJlZ2lucyBvbiB0aGUgZWxlbWVudCBvciBpdHMgY29udGVudHM8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldFNhdmVOYW1lc3BhY2VzRmlyc3QoKSI+c2V0U2F2ZU5hbWVzcGFjZXNGaXJzdDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoaXMgb3B0aW9uIHdpbGwgY2F1c2UgdGhlIHNhdmVyIHRvIHNhdmUgbmFtZXNwYWNlIGF0dHJpYnV0ZXMgZmlyc3QuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRTYXZlT3V0ZXIoKSI+c2V0U2F2ZU91dGVyPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhpcyBvcHRpb24gY29udHJvbHMgd2hldGhlciBzYXZpbmcgYmVnaW5zIG9uIHRoZSBlbGVtZW50IG9yIGl0cyBjb250ZW50czwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0U2F2ZVByZXR0eVByaW50KCkiPnNldFNhdmVQcmV0dHlQcmludDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoaXMgb3B0aW9uIHdpbGwgY2F1c2UgdGhlIHNhdmVyIHRvIHJlZm9ybWF0IHdoaXRlIHNwYWNlIGZvciBlYXNpZXIgcmVhZGluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldFNhdmVQcmV0dHlQcmludEluZGVudChpbnQpIj5zZXRTYXZlUHJldHR5UHJpbnRJbmRlbnQ8L0E+PC9CPihpbnQmbmJzcDtpbmRlbnQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtXaGVuIHVzZWQgd2l0aCA8Y29kZT5zZXRTYXZlUHJldHR5UHJpbnQ8L2NvZGU+IHRoaXMgc2V0cyB0aGUgaW5kZW50Ci0gYW1vdW50IHRvIHVzZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldFNhdmVQcmV0dHlQcmludE9mZnNldChpbnQpIj5zZXRTYXZlUHJldHR5UHJpbnRPZmZzZXQ8L0E+PC9CPihpbnQmbmJzcDtvZmZzZXQpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtXaGVuIHVzZWQgd2l0aCA8Y29kZT5zZXRTYXZlUHJldHR5UHJpbnQ8L2NvZGU+IHRoaXMgc2V0cyB0aGUgb2Zmc2V0Ci0gYW1vdW50IHRvIHVzZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldFNhdmVTdWdnZXN0ZWRQcmVmaXhlcyhqYXZhLnV0aWwuTWFwKSI+c2V0U2F2ZVN1Z2dlc3RlZFByZWZpeGVzPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9NYXAuaHRtbCI+TWFwPC9BPiZuYnNwO3N1Z2dlc3RlZFByZWZpeGVzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSBtYXAgb2YgaGludHMgdG8gcGFzcyB0byB0aGUgc2F2ZXIgZm9yIHdoaWNoIHByZWZpeGVzIHRvIHVzZQotIGZvciB3aGljaCBuYW1lc3BhY2UgVVJJLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0U2F2ZVN5bnRoZXRpY0RvY3VtZW50RWxlbWVudChqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+c2V0U2F2ZVN5bnRoZXRpY0RvY3VtZW50RWxlbWVudDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhpcyBvcHRpb24gY2F1c2VzIHRoZSBzYXZlciB0byB3cmFwIHRoZSBjdXJyZW50IGZyYWdtZW50IGluCi0gYW4gZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBuYW1lLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0U2F2ZVVzZU9wZW5GcmFnKCkiPnNldFNhdmVVc2VPcGVuRnJhZzwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1doZW4gc2F2aW5nIGEgZnJhZ21lbnQsIHRoaXMgb3B0aW9uIGNoYW5nZXMgdGhlIHFuYW1lIG9mIHRoZSBzeW50aGVzaXplZAotIHJvb3QgZWxlbWVudC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldFVzZURlZmF1bHROYW1lc3BhY2UoKSI+c2V0VXNlRGVmYXVsdE5hbWVzcGFjZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0lmIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIHNhdmVyIHdpbGwgdHJ5IHRvIHVzZSB0aGUgZGVmYXVsdAotIG5hbWVzcGFjZSBmb3IgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCBVUkkuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRWYWxpZGF0ZU9uU2V0KCkiPnNldFZhbGlkYXRlT25TZXQ8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtJZiB0aGlzIG9wdGlvbiBpcyBzZXQgd2hlbiBhbiBpbnN0YW5jZSBpcyBjcmVhdGVkLCB0aGVuIHZhbHVlCi0gZmFjZXRzIHdpbGwgYmUgY2hlY2tlZCBvbiBlYWNoIGNhbGwgdG8gYSBzZXR0ZXIgb3IgZ2V0dGVyCi0gbWV0aG9kIG9uIGluc3RhbmNlcyBvZiBYbWxPYmplY3Qgd2l0aGluIHRoZSBpbnN0YW5jZSBkb2N1bWVudC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldFhxdWVyeUN1cnJlbnROb2RlVmFyKGphdmEubGFuZy5TdHJpbmcpIj5zZXRYcXVlcnlDdXJyZW50Tm9kZVZhcjwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDt2YXJOYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdGhhdCByZXByZXNlbnRzCi0gdGhlIGN1cnJlbnQgbm9kZSBpbiBhIHF1ZXJ5IGV4cHJlc3Npb24uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjY2xvbmUoKSI+Y2xvbmU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZ2V0Q2xhc3MoKSI+Z2V0Q2xhc3M8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJTQVZFX05BTUVTUEFDRVNfRklSU1QiPjwhLS0gLS0+PC9BPjxIMz4KLVNBVkVfTkFNRVNQQUNFU19GSVJTVDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPlNBVkVfTkFNRVNQQUNFU19GSVJTVDwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5TQVZFX05BTUVTUEFDRVNfRklSU1QiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU0FWRV9TWU5USEVUSUNfRE9DVU1FTlRfRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotU0FWRV9TWU5USEVUSUNfRE9DVU1FTlRfRUxFTUVOVDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPlNBVkVfU1lOVEhFVElDX0RPQ1VNRU5UX0VMRU1FTlQ8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMuU0FWRV9TWU5USEVUSUNfRE9DVU1FTlRfRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTQVZFX1BSRVRUWV9QUklOVCI+PCEtLSAtLT48L0E+PEgzPgotU0FWRV9QUkVUVFlfUFJJTlQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5TQVZFX1BSRVRUWV9QUklOVDwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5TQVZFX1BSRVRUWV9QUklOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTQVZFX1BSRVRUWV9QUklOVF9JTkRFTlQiPjwhLS0gLS0+PC9BPjxIMz4KLVNBVkVfUFJFVFRZX1BSSU5UX0lOREVOVDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPlNBVkVfUFJFVFRZX1BSSU5UX0lOREVOVDwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5TQVZFX1BSRVRUWV9QUklOVF9JTkRFTlQiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU0FWRV9QUkVUVFlfUFJJTlRfT0ZGU0VUIj48IS0tIC0tPjwvQT48SDM+Ci1TQVZFX1BSRVRUWV9QUklOVF9PRkZTRVQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5TQVZFX1BSRVRUWV9QUklOVF9PRkZTRVQ8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMuU0FWRV9QUkVUVFlfUFJJTlRfT0ZGU0VUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNBVkVfQUdHUkVTU0lWRV9OQU1FU1BBQ0VTIj48IS0tIC0tPjwvQT48SDM+Ci1TQVZFX0FHR1JFU1NJVkVfTkFNRVNQQUNFUzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPlNBVkVfQUdHUkVTU0lWRV9OQU1FU1BBQ0VTPC9CPjwvUFJFPgotPERMPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zLlNBVkVfQUdHUkVTU0lWRV9OQU1FU1BBQ0VTIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNBVkVfVVNFX0RFRkFVTFRfTkFNRVNQQUNFIj48IS0tIC0tPjwvQT48SDM+Ci1TQVZFX1VTRV9ERUZBVUxUX05BTUVTUEFDRTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPlNBVkVfVVNFX0RFRkFVTFRfTkFNRVNQQUNFPC9CPjwvUFJFPgotPERMPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zLlNBVkVfVVNFX0RFRkFVTFRfTkFNRVNQQUNFIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNBVkVfSU1QTElDSVRfTkFNRVNQQUNFUyI+PCEtLSAtLT48L0E+PEgzPgotU0FWRV9JTVBMSUNJVF9OQU1FU1BBQ0VTPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+U0FWRV9JTVBMSUNJVF9OQU1FU1BBQ0VTPC9CPjwvUFJFPgotPERMPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zLlNBVkVfSU1QTElDSVRfTkFNRVNQQUNFUyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTQVZFX1NVR0dFU1RFRF9QUkVGSVhFUyI+PCEtLSAtLT48L0E+PEgzPgotU0FWRV9TVUdHRVNURURfUFJFRklYRVM8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5TQVZFX1NVR0dFU1RFRF9QUkVGSVhFUzwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5TQVZFX1NVR0dFU1RFRF9QUkVGSVhFUyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTQVZFX0ZJTFRFUl9QUk9DSU5TVCI+PCEtLSAtLT48L0E+PEgzPgotU0FWRV9GSUxURVJfUFJPQ0lOU1Q8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5TQVZFX0ZJTFRFUl9QUk9DSU5TVDwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5TQVZFX0ZJTFRFUl9QUk9DSU5TVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJTQVZFX1VTRV9PUEVOX0ZSQUdNRU5UIj48IS0tIC0tPjwvQT48SDM+Ci1TQVZFX1VTRV9PUEVOX0ZSQUdNRU5UPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+U0FWRV9VU0VfT1BFTl9GUkFHTUVOVDwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5TQVZFX1VTRV9PUEVOX0ZSQUdNRU5UIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlNBVkVfT1VURVIiPjwhLS0gLS0+PC9BPjxIMz4KLVNBVkVfT1VURVI8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5TQVZFX09VVEVSPC9CPjwvUFJFPgotPERMPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zLlNBVkVfT1VURVIiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iU0FWRV9JTk5FUiI+PCEtLSAtLT48L0E+PEgzPgotU0FWRV9JTk5FUjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPlNBVkVfSU5ORVI8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMuU0FWRV9JTk5FUiI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJMT0FEX1JFUExBQ0VfRE9DVU1FTlRfRUxFTUVOVCI+PCEtLSAtLT48L0E+PEgzPgotTE9BRF9SRVBMQUNFX0RPQ1VNRU5UX0VMRU1FTlQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5MT0FEX1JFUExBQ0VfRE9DVU1FTlRfRUxFTUVOVDwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5MT0FEX1JFUExBQ0VfRE9DVU1FTlRfRUxFTUVOVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJMT0FEX1NUUklQX1dISVRFU1BBQ0UiPjwhLS0gLS0+PC9BPjxIMz4KLUxPQURfU1RSSVBfV0hJVEVTUEFDRTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPkxPQURfU1RSSVBfV0hJVEVTUEFDRTwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5MT0FEX1NUUklQX1dISVRFU1BBQ0UiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTE9BRF9TVFJJUF9DT01NRU5UUyI+PCEtLSAtLT48L0E+PEgzPgotTE9BRF9TVFJJUF9DT01NRU5UUzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPkxPQURfU1RSSVBfQ09NTUVOVFM8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMuTE9BRF9TVFJJUF9DT01NRU5UUyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJMT0FEX1NUUklQX1BST0NJTlNUUyI+PCEtLSAtLT48L0E+PEgzPgotTE9BRF9TVFJJUF9QUk9DSU5TVFM8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5MT0FEX1NUUklQX1BST0NJTlNUUzwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5MT0FEX1NUUklQX1BST0NJTlNUUyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJMT0FEX0xJTkVfTlVNQkVSUyI+PCEtLSAtLT48L0E+PEgzPgotTE9BRF9MSU5FX05VTUJFUlM8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5MT0FEX0xJTkVfTlVNQkVSUzwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5MT0FEX0xJTkVfTlVNQkVSUyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJMT0FEX1NVQlNUSVRVVEVfTkFNRVNQQUNFUyI+PCEtLSAtLT48L0E+PEgzPgotTE9BRF9TVUJTVElUVVRFX05BTUVTUEFDRVM8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5MT0FEX1NVQlNUSVRVVEVfTkFNRVNQQUNFUzwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5MT0FEX1NVQlNUSVRVVEVfTkFNRVNQQUNFUyI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJMT0FEX1RSSU1fVEVYVF9CVUZGRVIiPjwhLS0gLS0+PC9BPjxIMz4KLUxPQURfVFJJTV9URVhUX0JVRkZFUjwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPkxPQURfVFJJTV9URVhUX0JVRkZFUjwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5MT0FEX1RSSU1fVEVYVF9CVUZGRVIiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTE9BRF9BRERJVElPTkFMX05BTUVTUEFDRVMiPjwhLS0gLS0+PC9BPjxIMz4KLUxPQURfQURESVRJT05BTF9OQU1FU1BBQ0VTPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+TE9BRF9BRERJVElPTkFMX05BTUVTUEFDRVM8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMuTE9BRF9BRERJVElPTkFMX05BTUVTUEFDRVMiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iTE9BRF9NRVNTQUdFX0RJR0VTVCI+PCEtLSAtLT48L0E+PEgzPgotTE9BRF9NRVNTQUdFX0RJR0VTVDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPkxPQURfTUVTU0FHRV9ESUdFU1Q8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMuTE9BRF9NRVNTQUdFX0RJR0VTVCI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJYUVVFUllfQ1VSUkVOVF9OT0RFX1ZBUiI+PCEtLSAtLT48L0E+PEgzPgotWFFVRVJZX0NVUlJFTlRfTk9ERV9WQVI8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5YUVVFUllfQ1VSUkVOVF9OT0RFX1ZBUjwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5YUVVFUllfQ1VSUkVOVF9OT0RFX1ZBUiI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJDSEFSQUNURVJfRU5DT0RJTkciPjwhLS0gLS0+PC9BPjxIMz4KLUNIQVJBQ1RFUl9FTkNPRElORzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPkNIQVJBQ1RFUl9FTkNPRElORzwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5DSEFSQUNURVJfRU5DT0RJTkciPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iRVJST1JfTElTVEVORVIiPjwhLS0gLS0+PC9BPjxIMz4KLUVSUk9SX0xJU1RFTkVSPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+RVJST1JfTElTVEVORVI8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMuRVJST1JfTElTVEVORVIiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iRE9DVU1FTlRfVFlQRSI+PCEtLSAtLT48L0E+PEgzPgotRE9DVU1FTlRfVFlQRTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPkRPQ1VNRU5UX1RZUEU8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMuRE9DVU1FTlRfVFlQRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJET0NVTUVOVF9TT1VSQ0VfTkFNRSI+PCEtLSAtLT48L0E+PEgzPgotRE9DVU1FTlRfU09VUkNFX05BTUU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5ET0NVTUVOVF9TT1VSQ0VfTkFNRTwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5ET0NVTUVOVF9TT1VSQ0VfTkFNRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJDT01QSUxFX1NVQlNUSVRVVEVfTkFNRVMiPjwhLS0gLS0+PC9BPjxIMz4KLUNPTVBJTEVfU1VCU1RJVFVURV9OQU1FUzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPkNPTVBJTEVfU1VCU1RJVFVURV9OQU1FUzwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5DT01QSUxFX1NVQlNUSVRVVEVfTkFNRVMiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQ09NUElMRV9OT19WQUxJREFUSU9OIj48IS0tIC0tPjwvQT48SDM+Ci1DT01QSUxFX05PX1ZBTElEQVRJT048L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5DT01QSUxFX05PX1ZBTElEQVRJT048L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMuQ09NUElMRV9OT19WQUxJREFUSU9OIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkNPTVBJTEVfTk9fVVBBX1JVTEUiPjwhLS0gLS0+PC9BPjxIMz4KLUNPTVBJTEVfTk9fVVBBX1JVTEU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5DT01QSUxFX05PX1VQQV9SVUxFPC9CPjwvUFJFPgotPERMPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zLkNPTVBJTEVfTk9fVVBBX1JVTEUiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQ09NUElMRV9OT19QVlJfUlVMRSI+PCEtLSAtLT48L0E+PEgzPgotQ09NUElMRV9OT19QVlJfUlVMRTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPkNPTVBJTEVfTk9fUFZSX1JVTEU8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMuQ09NUElMRV9OT19QVlJfUlVMRSI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJDT01QSUxFX0RPV05MT0FEX1VSTFMiPjwhLS0gLS0+PC9BPjxIMz4KLUNPTVBJTEVfRE9XTkxPQURfVVJMUzwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPkNPTVBJTEVfRE9XTkxPQURfVVJMUzwvQj48L1BSRT4KLTxETD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL2NvbnN0YW50LXZhbHVlcy5odG1sI29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucy5DT01QSUxFX0RPV05MT0FEX1VSTFMiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iQ09NUElMRV9NREVGX05BTUVTUEFDRVMiPjwhLS0gLS0+PC9BPjxIMz4KLUNPTVBJTEVfTURFRl9OQU1FU1BBQ0VTPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+Q09NUElMRV9NREVGX05BTUVTUEFDRVM8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMuQ09NUElMRV9NREVGX05BTUVTUEFDRVMiPkNvbnN0YW50IEZpZWxkIFZhbHVlczwvQT48L0RMPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iVkFMSURBVEVfT05fU0VUIj48IS0tIC0tPjwvQT48SDM+Ci1WQUxJREFURV9PTl9TRVQ8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5WQUxJREFURV9PTl9TRVQ8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9jb25zdGFudC12YWx1ZXMuaHRtbCNvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMuVkFMSURBVEVfT05fU0VUIj5Db25zdGFudCBGaWVsZCBWYWx1ZXM8L0E+PC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IkVOVElUWV9SRVNPTFZFUiI+PCEtLSAtLT48L0E+PEgzPgotRU5USVRZX1JFU09MVkVSPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+RU5USVRZX1JFU09MVkVSPC9CPjwvUFJFPgotPERMPgotPERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vY29uc3RhbnQtdmFsdWVzLmh0bWwjb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zLkVOVElUWV9SRVNPTFZFUiI+Q29uc3RhbnQgRmllbGQgVmFsdWVzPC9BPjwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iWG1sT3B0aW9ucygpIj48IS0tIC0tPjwvQT48SDM+Ci1YbWxPcHRpb25zPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+WG1sT3B0aW9uczwvQj4oKTwvUFJFPgotPERMPgotPEREPkNvbnN0cnVjdCBhIG5ldyBibGFuayBYbWxPcHRpb25zLgotPFA+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJYbWxPcHRpb25zKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLVhtbE9wdGlvbnM8L0gzPgotPFBSRT4KLXB1YmxpYyA8Qj5YbWxPcHRpb25zPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvdGhlcik8L1BSRT4KLTxETD4KLTxERD5Db25zdHJ1Y3QgYSBuZXcgWG1sT3B0aW9ucywgY29weWluZyB0aGUgb3B0aW9ucy4KLTxQPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0ic2V0U2F2ZU5hbWVzcGFjZXNGaXJzdCgpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRTYXZlTmFtZXNwYWNlc0ZpcnN0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+IDxCPnNldFNhdmVOYW1lc3BhY2VzRmlyc3Q8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UaGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRoZSBzYXZlciB0byBzYXZlIG5hbWVzcGFjZSBhdHRyaWJ1dGVzIGZpcnN0LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxUb2tlblNvdXJjZS5zYXZlKGphdmEuaW8uRmlsZSwgWG1sT3B0aW9ucyk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxUb2tlblNvdXJjZS54bWxUZXh0KFhtbE9wdGlvbnMpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFNhdmVQcmV0dHlQcmludCgpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRTYXZlUHJldHR5UHJpbnQ8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4gPEI+c2V0U2F2ZVByZXR0eVByaW50PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VGhpcyBvcHRpb24gd2lsbCBjYXVzZSB0aGUgc2F2ZXIgdG8gcmVmb3JtYXQgd2hpdGUgc3BhY2UgZm9yIGVhc2llciByZWFkaW5nLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxUb2tlblNvdXJjZS5zYXZlKGphdmEuaW8uRmlsZSwgWG1sT3B0aW9ucyk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxUb2tlblNvdXJjZS54bWxUZXh0KFhtbE9wdGlvbnMpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFNhdmVQcmV0dHlQcmludEluZGVudChpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRTYXZlUHJldHR5UHJpbnRJbmRlbnQ8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4gPEI+c2V0U2F2ZVByZXR0eVByaW50SW5kZW50PC9CPihpbnQmbmJzcDtpbmRlbnQpPC9QUkU+Ci08REw+Ci08REQ+V2hlbiB1c2VkIHdpdGggPGNvZGU+c2V0U2F2ZVByZXR0eVByaW50PC9jb2RlPiB0aGlzIHNldHMgdGhlIGluZGVudAotIGFtb3VudCB0byB1c2UuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmluZGVudDwvQ09ERT4gLSB0aGUgaW5kZW50IGFtb3VudCB0byB1c2U8RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRTYXZlUHJldHR5UHJpbnQoKSI+PENPREU+c2V0U2F2ZVByZXR0eVByaW50KCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxDT0RFPlhtbFRva2VuU291cmNlLnNhdmUoamF2YS5pby5GaWxlLCBYbWxPcHRpb25zKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxDT0RFPlhtbFRva2VuU291cmNlLnhtbFRleHQoWG1sT3B0aW9ucyk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0U2F2ZVByZXR0eVByaW50T2Zmc2V0KGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldFNhdmVQcmV0dHlQcmludE9mZnNldDwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiA8Qj5zZXRTYXZlUHJldHR5UHJpbnRPZmZzZXQ8L0I+KGludCZuYnNwO29mZnNldCk8L1BSRT4KLTxETD4KLTxERD5XaGVuIHVzZWQgd2l0aCA8Y29kZT5zZXRTYXZlUHJldHR5UHJpbnQ8L2NvZGU+IHRoaXMgc2V0cyB0aGUgb2Zmc2V0Ci0gYW1vdW50IHRvIHVzZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+b2Zmc2V0PC9DT0RFPiAtIHRoZSBvZmZzZXQgYW1vdW50IHRvIHVzZTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldFNhdmVQcmV0dHlQcmludCgpIj48Q09ERT5zZXRTYXZlUHJldHR5UHJpbnQoKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PENPREU+WG1sVG9rZW5Tb3VyY2Uuc2F2ZShqYXZhLmlvLkZpbGUsIFhtbE9wdGlvbnMpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PENPREU+WG1sVG9rZW5Tb3VyY2UueG1sVGV4dChYbWxPcHRpb25zKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRDaGFyYWN0ZXJFbmNvZGluZyhqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0Q2hhcmFjdGVyRW5jb2Rpbmc8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4gPEI+c2V0Q2hhcmFjdGVyRW5jb2Rpbmc8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtlbmNvZGluZyk8L1BSRT4KLTxETD4KLTxERD5XaGVuIHBhcnNpbmcgb3Igd3JpdGluZyBhIGRvY3VtZW50LCB0aGlzIHNldHMgdGhlIGNoYXJhY3RlcgotIGVuY29kaW5nIHRvIHVzZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+ZW5jb2Rpbmc8L0NPREU+IC0gdGhlIGNoYXJhY3RlciBlbmNvZGluZzxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxDT0RFPlhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKGphdmEuaW8uRmlsZSwgWG1sT3B0aW9ucyk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxDT0RFPlhtbFRva2VuU291cmNlLnNhdmUoamF2YS5pby5GaWxlLCBYbWxPcHRpb25zKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXREb2N1bWVudFR5cGUob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0RG9jdW1lbnRUeXBlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+IDxCPnNldERvY3VtZW50VHlwZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+Jm5ic3A7dHlwZSk8L1BSRT4KLTxETD4KLTxERD5XaGVuIHBhcnNpbmcgYSBkb2N1bWVudCwgdGhpcyBzZXRzIHRoZSB0eXBlIG9mIHRoZSByb290Ci0gZWxlbWVudC4gSWYgdGhpcyBpcyBzZXQsIHRoZSBwYXJzZXIgd2lsbCBub3QgdHJ5IHRvIGd1ZXNzCi0gdGhlIHR5cGUgYmFzZWQgb24gdGhlIGRvY3VtZW50J3MgPGNvZGU+UU5hbWU8L2NvZGU+LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT50eXBlPC9DT0RFPiAtIFRoZSByb290IGVsZW1lbnQncyBkb2N1bWVudCB0eXBlLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxDT0RFPlhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKGphdmEuaW8uRmlsZSwgWG1sT3B0aW9ucyk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0RXJyb3JMaXN0ZW5lcihqYXZhLnV0aWwuQ29sbGVjdGlvbikiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEVycm9yTGlzdGVuZXI8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4gPEI+c2V0RXJyb3JMaXN0ZW5lcjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9Db2xsZWN0aW9uLmh0bWwiPkNvbGxlY3Rpb248L0E+Jm5ic3A7Yyk8L1BSRT4KLTxETD4KLTxERD48cD5TZXRzIGEgY29sbGVjdGlvbiBvYmplY3QgZm9yIGNvbGxlY3RpbmcgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj48Q09ERT5YbWxFcnJvcjwvQ09ERT48L0E+IG9iamVjdHMgCi0gZHVyaW5nIHBhcnNpbmcsIHZhbGlkYXRpb24sIGFuZCBjb21waWxhdGlvbi4gV2hlbiBzZXQsIHRoZSBjb2xsZWN0aW9uIAotIHdpbGwgY29udGFpbiBhbGwgdGhlIGVycm9ycyBhZnRlciB0aGUgb3BlcmF0aW9uIHRha2VzIHBsYWNlLiAgTm90aWNlIHRoYXQKLSB0aGUgZXJyb3JzIHdpbGwgb25seSBoYXZlIGxpbmUgbnVtYmVycyBpZiB0aGUgZG9jdW1lbnQgd2FzCi0gbG9hZGVkIHdpdGggbGluZSBudW1iZXJzIGVuYWJsZWQuPC9wPgotIAotIDxwPlRoZSBmb2xsb3dpbmcgc2ltcGxlIGV4YW1wbGUgaWxsdXN0cmF0ZXMgdXNpbmcgYW4gZXJyb3IgbGlzdGVuZXIKLSBkdXJpbmcgdmFsaWRhdGlvbi48L3A+Ci0gCi0gPHByZT4KLSAvLyBDcmVhdGUgYW4gWG1sT3B0aW9ucyBpbnN0YW5jZSBhbmQgc2V0IHRoZSBlcnJvciBsaXN0ZW5lci4KLSBYbWxPcHRpb25zIHZhbGlkYXRlT3B0aW9ucyA9IG5ldyBYbWxPcHRpb25zKCk7Ci0gQXJyYXlMaXN0IGVycm9yTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLSB2YWxpZGF0ZU9wdGlvbnMuc2V0RXJyb3JMaXN0ZW5lcihlcnJvckxpc3QpOwotIAotIC8vIFZhbGlkYXRlIHRoZSBYTUwuCi0gYm9vbGVhbiBpc1ZhbGlkID0gbmV3RW1wLnZhbGlkYXRlKHZhbGlkYXRlT3B0aW9ucyk7Ci0gCi0gLy8gSWYgdGhlIFhNTCBpc24ndCB2YWxpZCwgbG9vcCB0aHJvdWdoIHRoZSBsaXN0ZW5lcidzIGNvbnRlbnRzLAotIC8vIHByaW50aW5nIGNvbnRhaW5lZCBtZXNzYWdlcy4KLSBpZiAoIWlzVmFsaWQpCi0gewotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlcnJvckxpc3Quc2l6ZSgpOyBpKyspCi0gICAgICB7Ci0gICAgICAgICAgWG1sRXJyb3IgZXJyb3IgPSAoWG1sRXJyb3IpZXJyb3JMaXN0LmdldChpKTsKLSAgICAgICAgICAKLSAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlxuIik7Ci0gICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJNZXNzYWdlOiAiICsgZXJyb3IuZ2V0TWVzc2FnZSgpICsgIlxuIik7Ci0gICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMb2NhdGlvbiBvZiBpbnZhbGlkIFhNTDogIiArIAotICAgICAgICAgICAgICBlcnJvci5nZXRDdXJzb3JMb2NhdGlvbigpLnhtbFRleHQoKSArICJcbiIpOwotICAgICAgfQotIH0KLSA8L3ByZT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+YzwvQ09ERT4gLSBBIGNvbGxlY3Rpb24gdGhhdCB3aWxsIGJlIGZpbGxlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+PENPREU+WG1sRXJyb3I8L0NPREU+PC9BPiBvYmplY3RzIAotIHZpYSA8Q09ERT5Db2xsZWN0aW9uLmFkZChqYXZhLmxhbmcuT2JqZWN0KTwvQ09ERT48RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPjxDT0RFPlhtbEVycm9yPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PENPREU+WG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoamF2YS5pby5GaWxlLCBYbWxPcHRpb25zKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PENPREU+WG1sT2JqZWN0LnZhbGlkYXRlKFhtbE9wdGlvbnMpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sI2NvbXBpbGVYc2Qob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3RbXSwgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxCZWFucy5jb21waWxlWHNkKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0W10sIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldExvYWRMaW5lTnVtYmVycygpIj48Q09ERT5zZXRMb2FkTGluZU51bWJlcnMoKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRTYXZlQWdncmVzaXZlTmFtZXNwYWNlcygpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRTYXZlQWdncmVzaXZlTmFtZXNwYWNlczwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiA8Qj5zZXRTYXZlQWdncmVzaXZlTmFtZXNwYWNlczwvQj4oKTwvUFJFPgotPERMPgotPEREPkNhdXNlcyB0aGUgc2F2ZXIgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgbmFtZXNwYWNlIHByZWZpeCBkZWNsYXJhdGlvbnMuCi0gVGhlIHNhdmVyIHdpbGwgZG8gdGhpcyBieSBwYXNzaW5nIG92ZXIgdGhlIGRvY3VtZW50IHR3aWNlLCBmaXJzdCB0bwotIGNvbGxlY3QgdGhlIHNldCBvZiBuZWVkZWQgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucywgYW5kIHRoZW4gc2Vjb25kCi0gdG8gYWN0dWFsbHkgc2F2ZSB0aGUgZG9jdW1lbnQgd2l0aCB0aGUgZGVjbGFyYXRpb25zIGNvbGxlY3RlZAotIGF0IHRoZSByb290LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxUb2tlblNvdXJjZS5zYXZlKGphdmEuaW8uRmlsZSwgWG1sT3B0aW9ucyk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxUb2tlblNvdXJjZS54bWxUZXh0KFhtbE9wdGlvbnMpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFNhdmVTeW50aGV0aWNEb2N1bWVudEVsZW1lbnQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldFNhdmVTeW50aGV0aWNEb2N1bWVudEVsZW1lbnQ8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4gPEI+c2V0U2F2ZVN5bnRoZXRpY0RvY3VtZW50RWxlbWVudDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO25hbWUpPC9QUkU+Ci08REw+Ci08REQ+VGhpcyBvcHRpb24gY2F1c2VzIHRoZSBzYXZlciB0byB3cmFwIHRoZSBjdXJyZW50IGZyYWdtZW50IGluCi0gYW4gZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBuYW1lLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5uYW1lPC9DT0RFPiAtIHRoZSBuYW1lIHRvIHVzZSBmb3IgdGhlIHRvcCBsZXZlbCBlbGVtZW50PERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxUb2tlblNvdXJjZS5zYXZlKGphdmEuaW8uRmlsZSwgWG1sT3B0aW9ucyk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxUb2tlblNvdXJjZS54bWxUZXh0KFhtbE9wdGlvbnMpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFVzZURlZmF1bHROYW1lc3BhY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0VXNlRGVmYXVsdE5hbWVzcGFjZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiA8Qj5zZXRVc2VEZWZhdWx0TmFtZXNwYWNlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+SWYgdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUgc2F2ZXIgd2lsbCB0cnkgdG8gdXNlIHRoZSBkZWZhdWx0Ci0gbmFtZXNwYWNlIGZvciB0aGUgbW9zdCBjb21tb25seSB1c2VkIFVSSS4gSWYgaXQgaXMgbm90IHNldAotIHRoZSBzYXZlciB3aWxsIGFsd2F5cyBjcmVhdGVkIG5hbWVkIHByZWZpeGVzLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxUb2tlblNvdXJjZS5zYXZlKGphdmEuaW8uRmlsZSwgWG1sT3B0aW9ucyk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxUb2tlblNvdXJjZS54bWxUZXh0KFhtbE9wdGlvbnMpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFNhdmVJbXBsaWNpdE5hbWVzcGFjZXMoamF2YS51dGlsLk1hcCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldFNhdmVJbXBsaWNpdE5hbWVzcGFjZXM8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4gPEI+c2V0U2F2ZUltcGxpY2l0TmFtZXNwYWNlczwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9NYXAuaHRtbCI+TWFwPC9BPiZuYnNwO2ltcGxpY2l0TmFtZXNwYWNlcyk8L1BSRT4KLTxETD4KLTxERD5JZiBuYW1lc3BhY2VzIGhhdmUgYWxyZWFkeSBiZWVuIGRlY2xhcmVkIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoZQotIGZyYWdtZW50IGJlaW5nIHNhdmVkLCB0aGlzIGFsbG93cyB0aG9zZSBtYXBwaW5ncyB0byBiZSBwYXNzZWQKLSBkb3duIHRvIHRoZSBzYXZlciwgc28gdGhlIHByZWZpeGVzIGFyZSBub3QgcmUtZGVjbGFyZWQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmltcGxpY2l0TmFtZXNwYWNlczwvQ09ERT4gLSBhIG1hcCBvZiBwcmVmaXhlcyB0byB1cmlzIHRoYXQgY2FuIGJlCi0gIHVzZWQgYnkgdGhlIHNhdmVyIHdpdGhvdXQgYmVpbmcgZGVjbGFyZWQ8RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxDT0RFPlhtbFRva2VuU291cmNlLnNhdmUoamF2YS5pby5GaWxlLCBYbWxPcHRpb25zKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxDT0RFPlhtbFRva2VuU291cmNlLnhtbFRleHQoWG1sT3B0aW9ucyk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0U2F2ZVN1Z2dlc3RlZFByZWZpeGVzKGphdmEudXRpbC5NYXApIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRTYXZlU3VnZ2VzdGVkUHJlZml4ZXM8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4gPEI+c2V0U2F2ZVN1Z2dlc3RlZFByZWZpeGVzPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL01hcC5odG1sIj5NYXA8L0E+Jm5ic3A7c3VnZ2VzdGVkUHJlZml4ZXMpPC9QUkU+Ci08REw+Ci08REQ+QSBtYXAgb2YgaGludHMgdG8gcGFzcyB0byB0aGUgc2F2ZXIgZm9yIHdoaWNoIHByZWZpeGVzIHRvIHVzZQotIGZvciB3aGljaCBuYW1lc3BhY2UgVVJJLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5zdWdnZXN0ZWRQcmVmaXhlczwvQ09ERT4gLSBhIG1hcCBmcm9tIFVSSXMgdG8gcHJlZml4ZXM8RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxDT0RFPlhtbFRva2VuU291cmNlLnNhdmUoamF2YS5pby5GaWxlLCBYbWxPcHRpb25zKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxDT0RFPlhtbFRva2VuU291cmNlLnhtbFRleHQoWG1sT3B0aW9ucyk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0U2F2ZUZpbHRlclByb2NpbnN0KGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRTYXZlRmlsdGVyUHJvY2luc3Q8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4gPEI+c2V0U2F2ZUZpbHRlclByb2NpbnN0PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7ZmlsdGVyUHJvY2luc3QpPC9QUkU+Ci08REw+Ci08REQ+VGhpcyBvcHRpb24gY2F1c2VzIHRoZSBzYXZlciB0byBmaWx0ZXIgYSBQcm9jZXNzaW5nIEluc3RydWN0aW9uCi0gd2l0aCB0aGUgZ2l2ZW4gdGFyZ2V0Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPmZpbHRlclByb2NpbnN0PC9DT0RFPiAtIHRoZSBuYW1lIG9mIGEgUHJvY2Vzc2luZyBJbnN0cnVjdGlvbiB0byBmaWx0ZXIKLSAgIG9uIHNhdmU8RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxDT0RFPlhtbFRva2VuU291cmNlLnNhdmUoamF2YS5pby5GaWxlLCBYbWxPcHRpb25zKTwvQ09ERT48L0E+LCAKLTxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxDT0RFPlhtbFRva2VuU291cmNlLnhtbFRleHQoWG1sT3B0aW9ucyk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0U2F2ZVVzZU9wZW5GcmFnKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldFNhdmVVc2VPcGVuRnJhZzwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiA8Qj5zZXRTYXZlVXNlT3BlbkZyYWc8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5XaGVuIHNhdmluZyBhIGZyYWdtZW50LCB0aGlzIG9wdGlvbiBjaGFuZ2VzIHRoZSBxbmFtZSBvZiB0aGUgc3ludGhlc2l6ZWQKLSByb290IGVsZW1lbnQuICBOb3JtYWxseSAmbHQ7eG1sLWZyYWdtZW50Jmd0OyBpcyB1c2VkLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxUb2tlblNvdXJjZS5zYXZlKGphdmEuaW8uRmlsZSwgWG1sT3B0aW9ucyk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxUb2tlblNvdXJjZS54bWxUZXh0KFhtbE9wdGlvbnMpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFNhdmVPdXRlcigpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRTYXZlT3V0ZXI8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4gPEI+c2V0U2F2ZU91dGVyPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VGhpcyBvcHRpb24gY29udHJvbHMgd2hldGhlciBzYXZpbmcgYmVnaW5zIG9uIHRoZSBlbGVtZW50IG9yIGl0cyBjb250ZW50cwotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxUb2tlblNvdXJjZS5zYXZlKGphdmEuaW8uRmlsZSwgWG1sT3B0aW9ucyk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxUb2tlblNvdXJjZS54bWxUZXh0KFhtbE9wdGlvbnMpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFNhdmVJbm5lcigpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRTYXZlSW5uZXI8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4gPEI+c2V0U2F2ZUlubmVyPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VGhpcyBvcHRpb24gY29udHJvbHMgd2hldGhlciBzYXZpbmcgYmVnaW5zIG9uIHRoZSBlbGVtZW50IG9yIGl0cyBjb250ZW50cwotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxUb2tlblNvdXJjZS5zYXZlKGphdmEuaW8uRmlsZSwgWG1sT3B0aW9ucyk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxUb2tlblNvdXJjZS54bWxUZXh0KFhtbE9wdGlvbnMpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldExvYWRSZXBsYWNlRG9jdW1lbnRFbGVtZW50KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRMb2FkUmVwbGFjZURvY3VtZW50RWxlbWVudDwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiA8Qj5zZXRMb2FkUmVwbGFjZURvY3VtZW50RWxlbWVudDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO3JlcGxhY2VtZW50KTwvUFJFPgotPERMPgotPEREPklmIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIGRvY3VtZW50IGVsZW1lbnQgaXMgcmVwbGFjZWQgd2l0aCB0aGUKLSBnaXZlbiBRTmFtZSB3aGVuIHBhcnNpbmcuICBJZiBudWxsIGlzIHN1cHBsaWVkLCB0aGUgZG9jdW1lbnQgZWxlbWVudAotIGlzIHJlbW92ZWQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxPYmplY3QuRmFjdG9yeS5wYXJzZShqYXZhLmlvLkZpbGUsIFhtbE9wdGlvbnMpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldExvYWRTdHJpcFdoaXRlc3BhY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0TG9hZFN0cmlwV2hpdGVzcGFjZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiA8Qj5zZXRMb2FkU3RyaXBXaGl0ZXNwYWNlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+SWYgdGhpcyBvcHRpb24gaXMgc2V0LCBhbGwgaW5zaWduaWZpY2FudCB3aGl0ZXNwYWNlIGlzIHN0cmlwcGVkCi0gd2hlbiBwYXJzaW5nIGEgZG9jdW1lbnQuICBDYW4gYmUgdXNlZCB0byBzYXZlIG1lbW9yeSBvbiBsYXJnZQotIGRvY3VtZW50cyB3aGVuIHlvdSBrbm93IHRoZXJlIGlzIG5vIG1peGVkIGNvbnRlbnQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxPYmplY3QuRmFjdG9yeS5wYXJzZShqYXZhLmlvLkZpbGUsIFhtbE9wdGlvbnMpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldExvYWRTdHJpcENvbW1lbnRzKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldExvYWRTdHJpcENvbW1lbnRzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+IDxCPnNldExvYWRTdHJpcENvbW1lbnRzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+SWYgdGhpcyBvcHRpb24gaXMgc2V0LCBhbGwgY29tbWVudHMgYXJlIHN0cmlwcGVkIHdoZW4gcGFyc2luZwotIGEgZG9jdW1lbnQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxPYmplY3QuRmFjdG9yeS5wYXJzZShqYXZhLmlvLkZpbGUsIFhtbE9wdGlvbnMpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldExvYWRTdHJpcFByb2NpbnN0cygpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRMb2FkU3RyaXBQcm9jaW5zdHM8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4gPEI+c2V0TG9hZFN0cmlwUHJvY2luc3RzPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+SWYgdGhpcyBvcHRpb24gaXMgc2V0LCBhbGwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMgCi0gYXJlIHN0cmlwcGVkIHdoZW4gcGFyc2luZyBhIGRvY3VtZW50LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PENPREU+WG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoamF2YS5pby5GaWxlLCBYbWxPcHRpb25zKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRMb2FkTGluZU51bWJlcnMoKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0TG9hZExpbmVOdW1iZXJzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+IDxCPnNldExvYWRMaW5lTnVtYmVyczwvQj4oKTwvUFJFPgotPERMPgotPEREPklmIHRoaXMgb3B0aW9uIGlzIHNldCwgbGluZSBudW1iZXIgYW5ub3RhdGlvbnMgYXJlIHBsYWNlZAotIGluIHRoZSBzdG9yZSB3aGVuIHBhcnNpbmcgYSBkb2N1bWVudC4gIFRoaXMgaXMgcGFydGljdWxhcmx5Ci0gdXNlZnVsIHdoZW4geW91IHdhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj48Q09ERT5YbWxFcnJvcjwvQ09ERT48L0E+IG9iamVjdHMgdG8gY29udGFpbgotIGxpbmUgbnVtYmVycy4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxDT0RFPlhtbE9iamVjdC5GYWN0b3J5LnBhcnNlKGphdmEuaW8uRmlsZSwgWG1sT3B0aW9ucyk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPjxDT0RFPlhtbEVycm9yPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldExvYWRTdWJzdGl0dXRlTmFtZXNwYWNlcyhqYXZhLnV0aWwuTWFwKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0TG9hZFN1YnN0aXR1dGVOYW1lc3BhY2VzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+IDxCPnNldExvYWRTdWJzdGl0dXRlTmFtZXNwYWNlczwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9NYXAuaHRtbCI+TWFwPC9BPiZuYnNwO3N1YnN0TmFtZXNwYWNlcyk8L1BSRT4KLTxETD4KLTxERD5UaGlzIG9wdGlvbiBzZXRzIGEgbWFwIG9mIG5hbWVzcGFjZSB1cmkgc3Vic3RpdHV0aW9ucyB0aGF0IGhhcHBlbgotIHdoZW4gcGFyc2luZyBhIGRvY3VtZW50LgotIDxwPgotIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBpZiB5b3UKLSBoYXZlIGRvY3VtZW50cyB0aGF0IHVzZSBubyBuYW1lc3BhY2UsIGJ1dCB5b3Ugd2lzaCB0byBhdm9pZAotIHRoZSBuYW1lIGNvbGxpc2lvbiBwcm9ibGVtcyB0aGF0IG9jY3VyIHdoZW4geW91IGludHJvZHVjZQotIHNjaGVtYSBkZWZpbml0aW9ucyB3aXRob3V0IGEgdGFyZ2V0IG5hbWVzcGFjZS4KLSA8cD4KLSBCeSBtYXBwaW5nIHRoZSBlbXB0eSBzdHJpbmcgIiIgKHRoZSBhYnNlbmNlIG9mIGEgVVJJKSB0byBhIHNwZWNpZmljCi0gbmFtZXNwYWNlLCB5b3UgY2FuIGZvcmNlIHRoZSBwYXJzZXIgdG8gYmVoYXZlIGFzIGlmIGEgbm8tbmFtZXNwYWNlCi0gZG9jdW1lbnQgd2VyZSBhY3R1YWxseSBpbiB0aGUgc3BlY2lmaWVkIG5hbWVzcGFjZS4gVGhpcyBhbGxvd3MgeW91Ci0gdG8gdHlwZSB0aGUgaW5zdGFuY2UgYWNjb3JkaW5nIHRvIGEgc2NoZW1hIGluIGEgbm9uZW1wdHkgbmFtZXNwYWNlLAotIGFuZCB0aGVyZWZvcmUgYXZvaWQgdGhlIHByb2JsZW1hdGljIHByYWN0aWNlIG9mIHVzaW5nIHNjaGVtYQotIGRlZmluaXRpb25zIHdpdGhvdXQgYSB0YXJnZXQgbmFtZXNwYWNlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5zdWJzdE5hbWVzcGFjZXM8L0NPREU+IC0gYSBtYXAgb2YgZG9jdW1lbnQgVVJJcyB0byByZXBsYWNlbWVudCBVUklzPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PENPREU+WG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoamF2YS5pby5GaWxlLCBYbWxPcHRpb25zKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRMb2FkVHJpbVRleHRCdWZmZXIoKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0TG9hZFRyaW1UZXh0QnVmZmVyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+IDxCPnNldExvYWRUcmltVGV4dEJ1ZmZlcjwvQj4oKTwvUFJFPgotPERMPgotPEREPklmIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIHVuZGVybHlpbmcgeG1sIHRleHQgYnVmZmVyIGlzIHRyaW1tZWQKLSBpbW1lZGlhdGVseSBhZnRlciBwYXJzaW5nIGEgZG9jdW1lbnQgcmVzdWx0aW5nIGluIGEgc21hbGxlciBtZW1vcnkKLSBmb290cHJpbnQuICBVc2UgdGhpcyBvcHRpb24gaWYgeW91IGFyZSBsb2FkaW5nIGEgbGFyZ2UgbnVtYmVyCi0gb2YgdW5jaGFuZ2luZyBkb2N1bWVudHMgdGhhdCB3aWxsIHN0YXkgaW4gbWVtb3J5IGZvciBzb21lIHRpbWUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxPYmplY3QuRmFjdG9yeS5wYXJzZShqYXZhLmlvLkZpbGUsIFhtbE9wdGlvbnMpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldExvYWRBZGRpdGlvbmFsTmFtZXNwYWNlcyhqYXZhLnV0aWwuTWFwKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0TG9hZEFkZGl0aW9uYWxOYW1lc3BhY2VzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+IDxCPnNldExvYWRBZGRpdGlvbmFsTmFtZXNwYWNlczwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9NYXAuaHRtbCI+TWFwPC9BPiZuYnNwO25zZXMpPC9QUkU+Ci08REw+Ci08REQ+U2V0IGFkZGl0aW9uYWwgbmFtZXNwYWNlIG1hcHBpbmdzIHRvIGJlIGFkZGVkIHdoZW4gcGFyc2luZwotIGEgZG9jdW1lbnQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm5zZXM8L0NPREU+IC0gYWRkaXRpb25hbCBuYW1lc3BhY2UgbWFwcGluZ3M8RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxPYmplY3QuRmFjdG9yeS5wYXJzZShqYXZhLmlvLkZpbGUsIFhtbE9wdGlvbnMpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldExvYWRNZXNzYWdlRGlnZXN0KCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldExvYWRNZXNzYWdlRGlnZXN0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+IDxCPnNldExvYWRNZXNzYWdlRGlnZXN0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+SWYgdGhpcyBvcHRpb24gaXMgc2V0IHdoZW4gbG9hZGluZyBmcm9tIGFuIElucHV0U3RyZWFtIG9yIEZpbGUsIHRoZW4KLSB0aGUgbG9hZGVyIHdpbGwgY29tcHV0ZSBhIDE2MC1iaXQgU0hBLTEgbWVzc2FnZSBkaWdlc3Qgb2YgdGhlIFhNTAotIGZpbGUgd2hpbGUgbG9hZGluZyBpdCBhbmQgbWFrZSBpdCBhdmFpbGFibGUgdmlhCi0gWG1sT2JqZWN0LmRvY3VtZW50UHJvcGVydGllcygpLmdldE1lc3NhZ2VEaWdlc3QoKTsKLSA8YnI+Ci0gVGhlIHNjaGVtYSBjb21waWxlciB1c2VzIG1lc3NhZ2UgZGlnZXN0cyB0byBkZXRlY3QgYW5kIGVsaW1pbmF0ZQotIGR1cGxpY2F0ZSBpbXBvcnRlZCB4c2QgZmlsZXMuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxPYmplY3QuRmFjdG9yeS5wYXJzZShqYXZhLmlvLkZpbGUsIFhtbE9wdGlvbnMpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFhxdWVyeUN1cnJlbnROb2RlVmFyKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRYcXVlcnlDdXJyZW50Tm9kZVZhcjwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiA8Qj5zZXRYcXVlcnlDdXJyZW50Tm9kZVZhcjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3Zhck5hbWUpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdGhhdCByZXByZXNlbnRzCi0gdGhlIGN1cnJlbnQgbm9kZSBpbiBhIHF1ZXJ5IGV4cHJlc3Npb24uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPnZhck5hbWU8L0NPREU+IC0gVGhlIG5ldyB2YXJpYWJsZSBuYW1lIHRvIHVzZSBmb3IgdGhlIHF1ZXJ5LjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5YbWxPYmplY3QuZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcpPC9DT0RFPjwvQT4sIAotPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZykiPjxDT0RFPlhtbEN1cnNvci5leGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZyk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0RG9jdW1lbnRTb3VyY2VOYW1lKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXREb2N1bWVudFNvdXJjZU5hbWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4gPEI+c2V0RG9jdW1lbnRTb3VyY2VOYW1lPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7ZG9jdW1lbnRTb3VyY2VOYW1lKTwvUFJFPgotPERMPgotPEREPlRoaXMgb3B0aW9uIHNldHMgdGhlIGRvY3VtZW50IHNvdXJjZSBuYW1lIGludG8gdGhlIHhtbCBzdG9yZQotIHdoZW4gcGFyc2luZyBhIGRvY3VtZW50LiAgSWYgYSBkb2N1bWVudCBpcyBwYXJzZWQgZnJvbSBhCi0gRmlsZSBvciBVUkksIGl0IGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIHRoZSBVUkkgb2YgdGhlCi0gc291cmNlOyBvdGhlcndpc2UsIGZvciBleGFtcGxlLCB3aGVuIHBhcnNpbmcgYSBTdHJpbmcsCi0geW91IGNhbiB1c2UgdGhpcyBvcHRpb24gdG8gc3BlY2lmeSB0aGUgc291cmNlIG5hbWUgeW91cnNlbGYuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PENPREU+WG1sT2JqZWN0LkZhY3RvcnkucGFyc2UoamF2YS5sYW5nLlN0cmluZywgWG1sT3B0aW9ucyk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0Q29tcGlsZVN1YnN0aXR1dGVOYW1lcyhqYXZhLnV0aWwuTWFwKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0Q29tcGlsZVN1YnN0aXR1dGVOYW1lczwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiA8Qj5zZXRDb21waWxlU3Vic3RpdHV0ZU5hbWVzPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL01hcC5odG1sIj5NYXA8L0E+Jm5ic3A7bmFtZU1hcCk8L1BSRT4KLTxETD4KLTxERD5UaGlzIG9wdGlvbiBhbGxvd3MgZm9yIDxjb2RlPlFOYW1lPC9jb2RlPiBzdWJzdGl0dXRpb24gZHVyaW5nIHNjaGVtYSBjb21waWxhdGlvbi4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5QYXJhbWV0ZXJzOjwvQj48REQ+PENPREU+bmFtZU1hcDwvQ09ERT4gLSBhIG1hcCBmcm9tIDxjb2RlPlFOYW1lPC9jb2RlPnMgdG8gc3Vic3RpdHV0ZSA8Y29kZT5RTmFtZTwvY29kZT5zLjxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuaHRtbCNjb21waWxlWHNkKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0W10sIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PENPREU+WG1sQmVhbnMuY29tcGlsZVhzZChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdFtdLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0Q29tcGlsZU5vVmFsaWRhdGlvbigpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRDb21waWxlTm9WYWxpZGF0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+IDxCPnNldENvbXBpbGVOb1ZhbGlkYXRpb248L0I+KCk8L1BSRT4KLTxETD4KLTxERD5JZiB0aGlzIG9wdGlvbiBpcyBzZXQsIHZhbGlkYXRpb24gaXMgbm90IGRvbmUgb24gdGhlIFNjaGVtYSBYbWxCZWFucwotIHdoZW4gYnVpbGRpbmcgYSA8Y29kZT5TY2hlbWFUeXBlU3lzdGVtPC9jb2RlPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sI2NvbXBpbGVYc2Qob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3RbXSwgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxCZWFucy5jb21waWxlWHNkKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0W10sIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRDb21waWxlTm9VcGFSdWxlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldENvbXBpbGVOb1VwYVJ1bGU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4gPEI+c2V0Q29tcGlsZU5vVXBhUnVsZTwvQj4oKTwvUFJFPgotPERMPgotPEREPklmIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIHVuaXF1ZSBwYXJ0aWNsZSBhdHRyaWJ1dGlvbiBydWxlIGlzIG5vdAotIGVuZm9yY2VkIHdoZW4gYnVpbGRpbmcgYSA8Y29kZT5TY2hlbWFUeXBlU3lzdGVtPC9jb2RlPi4gU2VlCi0gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0xLyNub24tYW1iaWciPkFwcGVuZGl4IEggb2YgdGhlIFhNTCBTY2hlbWEgc3BlY2lmaWNhdGlvbjwvYT4KLSBmb3IgaW5mb3JtYXRpb24gb24gdGhlIFVQQSBydWxlLgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sI2NvbXBpbGVYc2Qob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3RbXSwgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxCZWFucy5jb21waWxlWHNkKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0W10sIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKTwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRDb21waWxlTm9QdnJSdWxlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldENvbXBpbGVOb1B2clJ1bGU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4gPEI+c2V0Q29tcGlsZU5vUHZyUnVsZTwvQj4oKTwvUFJFPgotPERMPgotPEREPklmIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIHBhcnRpY2xlIHZhbGlkIChyZXN0cmljaXRvbikgcnVsZSBpcyBub3QKLSBlbmZvcmNlZCB3aGVuIGJ1aWxkaW5nIGEgPGNvZGU+U2NoZW1hVHlwZVN5c3RlbTwvY29kZT4uIFNlZQotIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMS8jY29zLXBhcnRpY2xlLXJlc3RyaWN0Ij5TZWN0aW9uIDMuOS42IG9mIHRoZSBYTUwgU2NoZW1hIHNwZWNpZmljYXRpb248L2E+Ci0gZm9yIGluZm9ybWF0aW9uIG9uIHRoZSBQVlIgcnVsZS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuaHRtbCNjb21waWxlWHNkKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0W10sIG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZUxvYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PENPREU+WG1sQmVhbnMuY29tcGlsZVhzZChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdFtdLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyk8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0Q29tcGlsZURvd25sb2FkVXJscygpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRDb21waWxlRG93bmxvYWRVcmxzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+IDxCPnNldENvbXBpbGVEb3dubG9hZFVybHM8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5JZiB0aGlzIG9wdGlvbiBpcyBzZXQsIHRoZW4gdGhlIHNjaGVtYSBjb21waWxlciB3aWxsIHRyeSB0byBkb3dubG9hZAotIHNjaGVtYXMgdGhhdCBhcHBlYXIgaW4gaW1wb3J0cyBhbmQgaW5jbHVkZXMgZnJvbSBuZXR3b3JrIGJhc2VkIFVSTHMuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwjY29tcGlsZVhzZChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdFtdLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxDT0RFPlhtbEJlYW5zLmNvbXBpbGVYc2Qob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3RbXSwgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldENvbXBpbGVNZGVmTmFtZXNwYWNlcyhqYXZhLnV0aWwuU2V0KSI+PCEtLSAtLT48L0E+PEgzPgotc2V0Q29tcGlsZU1kZWZOYW1lc3BhY2VzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+IDxCPnNldENvbXBpbGVNZGVmTmFtZXNwYWNlczwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9TZXQuaHRtbCI+U2V0PC9BPiZuYnNwO21kZWZOYW1lc3BhY2VzKTwvUFJFPgotPERMPgotPEREPklmIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlbiB0aGUgc2NoZW1hIGNvbXBpbGVyIHdpbGwgcGVybWl0IGFuZAotIGlnbm9yZSBtdWx0aXBsZSBkZWZpbml0aW9ucyBvZiB0aGUgc2FtZSBjb21wb25lbnQgKGVsZW1lbnQsIGF0dHJpYnV0ZSwKLSB0eXBlLCBldGMpIG5hbWVzIGluIHRoZSBnaXZlbiBuYW1lc3BhY2VzLiAgSWYgbXVsdGlwbGUgZGVmaW5pdGlvbnMKLSB3aXRoIHRoZSBzYW1lIG5hbWUgYXBwZWFyLCB0aGUgZGVmaW5pdGlvbnMgdGhhdCBoYXBwZW4gdG8gYmUgcHJvY2Vzc2VkCi0gbGFzdCB3aWxsIGJlIGlnbm9yZWQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+UGFyYW1ldGVyczo8L0I+PEREPjxDT0RFPm1kZWZOYW1lc3BhY2VzPC9DT0RFPiAtIGEgc2V0IG9mIG5hbWVzcGFjZSBVUklzIGFzIFN0cmluZ3M8RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwjY29tcGlsZVhzZChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdFtdLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxDT0RFPlhtbEJlYW5zLmNvbXBpbGVYc2Qob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3RbXSwgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFZhbGlkYXRlT25TZXQoKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0VmFsaWRhdGVPblNldDwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiA8Qj5zZXRWYWxpZGF0ZU9uU2V0PC9CPigpPC9QUkU+Ci08REw+Ci08REQ+SWYgdGhpcyBvcHRpb24gaXMgc2V0IHdoZW4gYW4gaW5zdGFuY2UgaXMgY3JlYXRlZCwgdGhlbiB2YWx1ZQotIGZhY2V0cyB3aWxsIGJlIGNoZWNrZWQgb24gZWFjaCBjYWxsIHRvIGEgc2V0dGVyIG9yIGdldHRlcgotIG1ldGhvZCBvbiBpbnN0YW5jZXMgb2YgWG1sT2JqZWN0IHdpdGhpbiB0aGUgaW5zdGFuY2UgZG9jdW1lbnQuCi0gSWYgdGhlIGZhY2V0cyBhcmUgbm90IHNhdGlzZmllZCwgdGhlbiBhbiB1bmNoZWNrZWQgZXhjZXB0aW9uIGlzCi0gdGhyb3duIGltbWVkaWF0ZWx5LiAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIGZvciBmaW5kaW5nIGNvZGUgdGhhdAotIGlzIGludHJvZHVjaW5nIGludmFsaWQgdmFsdWVzIGluIGFuIFhNTCBkb2N1bWVudCwgYnV0IGl0Ci0gc2xvd3MgcGVyZm9ybWFuY2UuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48Q09ERT5YbWxPYmplY3QuRmFjdG9yeS5wYXJzZShqYXZhLmlvLkZpbGUsIFhtbE9wdGlvbnMpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEVudGl0eVJlc29sdmVyKG9yZy54bWwuc2F4LkVudGl0eVJlc29sdmVyKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0RW50aXR5UmVzb2x2ZXI8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4gPEI+c2V0RW50aXR5UmVzb2x2ZXI8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcveG1sL3NheC9FbnRpdHlSZXNvbHZlci5odG1sIj5FbnRpdHlSZXNvbHZlcjwvQT4mbmJzcDtyZXNvbHZlcik8L1BSRT4KLTxETD4KLTxERD5JZiB0aGlzIG9wdGlvbiBpcyBzZXQgd2hlbiBjb21waWxpbmcgYSBzY2hlbWEsIHRoZW4gdGhlIGdpdmVuCi0gRW50aXR5UmVzb2x2ZXIgd2lsbCBiZSBjb25zdWx0ZWQgaW4gb3JkZXIgdG8gcmVzb2x2ZSBhbnkKLSBVUklzIHdoaWxlIGRvd25sb2FkaW5nIGltcG9ydGVkIHNjaGVtYXMuCi0KLSBFbnRpdHlSZXNvbHZlcnMgYXJlIGN1cnJlbnRseSBvbmx5IHVzZWQgYnkgY29tcGlsZVhzZDsgdGhleQotIGFyZSBub3QgY29uc3VsdGVkIGJ5IG90aGVyIGZ1bmN0aW9ucywgZm9yIGV4YW1wbGUsIHBhcnNlLgotIFRoaXMgd2lsbCBsaWtlbHkgY2hhbmdlIGluIHRoZSBmdXR1cmUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJlYW5zLmh0bWwjY29tcGlsZVhzZChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdFtdLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjxDT0RFPlhtbEJlYW5zLmNvbXBpbGVYc2Qob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3RbXSwgb3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im1hc2tOdWxsKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW1hc2tOdWxsPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiA8Qj5tYXNrTnVsbDwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7byk8L1BSRT4KLTxETD4KLTxERD5JZiBwYXNzZWQgbnVsbCwgcmV0dXJucyBhbiBlbXB0eSBvcHRpb25zIG9iamVjdC4gIE90aGVyd2lzZSwgcmV0dXJucyBpdHMgYXJndW1lbnQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InB1dChqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotcHV0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5wdXQ8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvcHRpb24pPC9QUkU+Ci08REw+Ci08REQ+VXNlZCB0byBzZXQgYSBnZW5lcmljIG9wdGlvbgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwdXQoamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLk9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLXB1dDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+cHV0PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b3B0aW9uLAotICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDt2YWx1ZSk8L1BSRT4KLTxETD4KLTxERD5Vc2VkIHRvIHNldCBhIGdlbmVyaWMgb3B0aW9uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InB1dChqYXZhLmxhbmcuT2JqZWN0LCBpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1wdXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnB1dDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29wdGlvbiwKLSAgICAgICAgICAgICAgICBpbnQmbmJzcDt2YWx1ZSk8L1BSRT4KLTxETD4KLTxERD5Vc2VkIHRvIHNldCBhIGdlbmVyaWMgb3B0aW9uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Imhhc09wdGlvbihqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotaGFzT3B0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5oYXNPcHRpb248L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvcHRpb24pPC9QUkU+Ci08REw+Ci08REQ+VXNlZCB0byB0ZXN0IGEgZ2VuZXJpYyBvcHRpb24KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0KGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+IDxCPmdldDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29wdGlvbik8L1BSRT4KLTxETD4KLTxERD5Vc2VkIHRvIGdldCBhIGdlbmVyaWMgb3B0aW9uCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNhZmVHZXQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zLCBqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotc2FmZUdldDwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+IDxCPnNhZmVHZXQ8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO28sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvcHRpb24pPC9QUkU+Ci08REw+Ci08REQ+VXNlZCB0byB0ZXN0IGEgZ2VuZXJpYyBvcHRpb24gb24gYW4gb3B0aW9ucyBvYmplY3QgdGhhdCBtYXkgYmUgbnVsbAotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxPcHRpb25zLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3Jfc3VtbWFyeSI+Q09OU1RSPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzNkYzJjLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NzMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0NzowMSBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5LFhtbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5IGNsYXNzIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBYbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeTwvSDI+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+amF2YS5sYW5nLk9iamVjdDwvQT4KLSAgfAotICArLS08Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5PC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+RW5jbG9zaW5nIGNsYXNzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sUG9zaXRpdmVJbnRlZ2VyPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgPEI+WG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvREw+Ci0KLTxQPgotQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbFBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sUG9zaXRpdmVJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2UoKSI+bmV3SW5zdGFuY2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbFBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbFBvc2l0aXZlSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0luc3RhbmNlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbFBvc2l0aXZlSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI25ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj5uZXdWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxQb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiB2YWx1ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbFBvc2l0aXZlSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxQb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sUG9zaXRpdmVJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxQb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbFBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbFBvc2l0aXZlSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbFBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sUG9zaXRpdmVJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlcikiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sUG9zaXRpdmVJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbFBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbFBvc2l0aXZlSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sUG9zaXRpdmVJbnRlZ2VyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxQb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxQb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxQb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbFBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbFBvc2l0aXZlSW50ZWdlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNjbG9uZSgpIj5jbG9uZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj5lcXVhbHM8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2ZpbmFsaXplKCkiPmZpbmFsaXplPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNnZXRDbGFzcygpIj5nZXRDbGFzczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjaGFzaENvZGUoKSI+aGFzaENvZGU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeSgpIj5ub3RpZnk8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeUFsbCgpIj5ub3RpZnlBbGw8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KCkiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZykiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZywgaW50KSI+d2FpdDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXI8L0E+IDxCPm5ld0luc3RhbmNlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxQb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXI8L0E+IDxCPm5ld0luc3RhbmNlPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbFBvc2l0aXZlSW50ZWdlcjwvQT4gPEI+bmV3VmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gdmFsdWUKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbFBvc2l0aXZlSW50ZWdlcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbFBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsxMjM0NTY3ODkwJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sUG9zaXRpdmVJbnRlZ2VyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbFBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsxMjM0NTY3ODkwJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sUG9zaXRpdmVJbnRlZ2VyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sUG9zaXRpdmVJbnRlZ2VyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbFBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbFBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sUG9zaXRpdmVJbnRlZ2VyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+PENPREU+WG1sUG9zaXRpdmVJbnRlZ2VyPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbFBvc2l0aXZlSW50ZWdlcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbFBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbFBvc2l0aXZlSW50ZWdlcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxQb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlcikiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPlhtbFBvc2l0aXZlSW50ZWdlcjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxQb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sUG9zaXRpdmVJbnRlZ2VyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxQb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sUG9zaXRpdmVJbnRlZ2VyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbFBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbFBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+WG1sUG9zaXRpdmVJbnRlZ2VyPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbFBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXI8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbFBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMzE3MjEuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1OCBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbFBvc2l0aXZlSW50ZWdlciAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxQb3NpdGl2ZUludGVnZXIsWG1sUG9zaXRpdmVJbnRlZ2VyIGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sUG9zaXRpdmVJbnRlZ2VyIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxQb3NpdGl2ZUludGVnZXIuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFhtbFBvc2l0aXZlSW50ZWdlcjwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBpbnRlcmZhY2UgPEI+WG1sUG9zaXRpdmVJbnRlZ2VyPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQT48L0RMPgotCi08UD4KLUNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNwb3NpdGl2ZUludGVnZXIiPnhzOnBvc2l0aXZlSW50ZWdlcjwvYT4gdHlwZS4KLSBPbmUgb2YgdGhlIGRlcml2ZWQgdHlwZXMgYmFzZWQgb24gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkZWNpbWFsIj54czpkZWNpbWFsPC9hPi4KLSA8cD4KLSBWZXJpZmllZCB0byBiZSBwb3NpdGl2ZSB3aGVuIHZhbGlkYXRpbmcuCi0gPHA+Ci0gQ29udmVydGlibGUgdG8gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdJbnRlZ2VyLmh0bWwiPjxDT0RFPkJpZ0ludGVnZXI8L0NPREU+PC9BPi4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5OZXN0ZWQgQ2xhc3MgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2NsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbFBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sTm9uTmVnYXRpdmVJbnRlZ2VyIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxJbnRlZ2VyIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxJbnRlZ2VyLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sRGVjaW1hbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCI+WG1sRGVjaW1hbC5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPlhtbE9iamVjdC5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwjdHlwZSI+dHlwZTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+RmllbGRzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0VRVUFMIj5FUVVBTDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjR1JFQVRFUl9USEFOIj5HUkVBVEVSX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0xFU1NfVEhBTiI+TEVTU19USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNOT1RfRVFVQUwiPk5PVF9FUVVBTDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sSW50ZWdlciI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwjYmlnSW50ZWdlclZhbHVlKCkiPmJpZ0ludGVnZXJWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI2dldEJpZ0ludGVnZXJWYWx1ZSgpIj5nZXRCaWdJbnRlZ2VyVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCNzZXQoamF2YS5tYXRoLkJpZ0ludGVnZXIpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCNzZXRCaWdJbnRlZ2VyVmFsdWUoamF2YS5tYXRoLkJpZ0ludGVnZXIpIj5zZXRCaWdJbnRlZ2VyVmFsdWU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxEZWNpbWFsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCNiaWdEZWNpbWFsVmFsdWUoKSI+YmlnRGVjaW1hbFZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjZ2V0QmlnRGVjaW1hbFZhbHVlKCkiPmdldEJpZ0RlY2ltYWxWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI3NldChqYXZhLm1hdGguQmlnRGVjaW1hbCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI3NldEJpZ0RlY2ltYWxWYWx1ZShqYXZhLm1hdGguQmlnRGVjaW1hbCkiPnNldEJpZ0RlY2ltYWxWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI2dldFN0cmluZ1ZhbHVlKCkiPmdldFN0cmluZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0KGphdmEubGFuZy5TdHJpbmcpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzdHJpbmdWYWx1ZSgpIj5zdHJpbmdWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY2hhbmdlVHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj5jaGFuZ2VUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVG8oamF2YS5sYW5nLk9iamVjdCkiPmNvbXBhcmVUbzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+Y29tcGFyZVZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb3B5KCkiPmNvcHk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc0ltbXV0YWJsZSgpIj5pc0ltbXV0YWJsZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNOaWwoKSI+aXNOaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NjaGVtYVR5cGUoKSI+c2NoZW1hVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldE5pbCgpIj5zZXROaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZSgpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlRXF1YWxzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+dmFsdWVFcXVhbHM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlSGFzaENvZGUoKSI+dmFsdWVIYXNoQ29kZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFRva2VuU291cmNlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNkb2N1bWVudFByb3BlcnRpZXMoKSI+ZG9jdW1lbnRQcm9wZXJ0aWVzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI21vbml0b3IoKSI+bW9uaXRvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdDdXJzb3IoKSI+bmV3Q3Vyc29yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUoKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0oKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKCkiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKCkiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dCgpIj54bWxUZXh0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+eG1sVGV4dDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9InR5cGUiPjwhLS0gLS0+PC9BPjxIMz4KLXR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPnR5cGU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4ZTk5Y2QuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuRmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjczICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDc6MDEgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxRTmFtZS5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFFOYW1lLkZhY3RvcnksWG1sUU5hbWUuRmFjdG9yeSBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sUU5hbWUuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbFFOYW1lLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBYbWxRTmFtZS5GYWN0b3J5PC9IMj4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5qYXZhLmxhbmcuT2JqZWN0PC9BPgotICB8Ci0gICstLTxCPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sUU5hbWUuRmFjdG9yeTwvQj4KLTwvUFJFPgotPERMPgotPERUPjxCPkVuY2xvc2luZyBjbGFzczo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+WG1sUU5hbWU8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyA8Qj5YbWxRTmFtZS5GYWN0b3J5PC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0RMPgotCi08UD4KLUEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPjxDT0RFPlhtbFFOYW1lPC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPlhtbFFOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj5uZXdJbnN0YW5jZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj48Q09ERT5YbWxRTmFtZTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+WG1sUU5hbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0luc3RhbmNlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj48Q09ERT5YbWxRTmFtZTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj5YbWxRTmFtZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPm5ld1ZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+PENPREU+WG1sUU5hbWU8L0NPREU+PC9BPiB2YWx1ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPlhtbFFOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj48Q09ERT5YbWxRTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPlhtbFFOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj48Q09ERT5YbWxRTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPlhtbFFOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+PENPREU+WG1sUU5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPlhtbFFOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+PENPREU+WG1sUU5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPlhtbFFOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPjxDT0RFPlhtbFFOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPlhtbFFOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPjxDT0RFPlhtbFFOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPlhtbFFOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlcikiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj48Q09ERT5YbWxRTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+WG1sUU5hbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPjxDT0RFPlhtbFFOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj5YbWxRTmFtZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPjxDT0RFPlhtbFFOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj5YbWxRTmFtZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPjxDT0RFPlhtbFFOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj5YbWxRTmFtZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj48Q09ERT5YbWxRTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+WG1sUU5hbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+PENPREU+WG1sUU5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPlhtbFFOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+PENPREU+WG1sUU5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPlhtbFFOYW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+PENPREU+WG1sUU5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+WG1sUU5hbWU8L0E+IDxCPm5ld0luc3RhbmNlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPjxDT0RFPlhtbFFOYW1lPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj5YbWxRTmFtZTwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPjxDT0RFPlhtbFFOYW1lPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+WG1sUU5hbWU8L0E+IDxCPm5ld1ZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+PENPREU+WG1sUU5hbWU8L0NPREU+PC9BPiB2YWx1ZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj5YbWxRTmFtZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj48Q09ERT5YbWxRTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCB4bWxuczp4PSJodHRwOi8vb3BlbnVyaS5vcmcvIiZndDt4OnNhbXBsZSZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+WG1sUU5hbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+PENPREU+WG1sUU5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQgeG1sbnM6eD0iaHR0cDovL29wZW51cmkub3JnLyImZ3Q7eDpzYW1wbGUmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPlhtbFFOYW1lPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+PENPREU+WG1sUU5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPlhtbFFOYW1lPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+PENPREU+WG1sUU5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj5YbWxRTmFtZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+PENPREU+WG1sUU5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+WG1sUU5hbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPjxDT0RFPlhtbFFOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+WG1sUU5hbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcykKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj48Q09ERT5YbWxRTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+WG1sUU5hbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj48Q09ERT5YbWxRTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj5YbWxRTmFtZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cikKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj48Q09ERT5YbWxRTmFtZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPlhtbFFOYW1lPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPjxDT0RFPlhtbFFOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+WG1sUU5hbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPjxDT0RFPlhtbFFOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+WG1sUU5hbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPjxDT0RFPlhtbFFOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPlhtbFFOYW1lPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPjxDT0RFPlhtbFFOYW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+WG1sUU5hbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+PENPREU+WG1sUU5hbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sUU5hbWUuRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM0NzlmOC4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDAwICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTggUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxRTmFtZSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxRTmFtZSxYbWxRTmFtZSBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbFFOYW1lIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNheEhhbmRsZXIuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbFFOYW1lLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFhtbFFOYW1lPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlhtbFFOYW1lPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvREw+Ci0KLTxQPgotQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI1FOYW1lIj54czpRTmFtZTwvYT4gdHlwZS4KLSA8cD4KLSBBIFFOYW1lIGlzIHRoZSBsb2dpY2FsIGNvbWJpbmF0aW9uIG9mIGFuIFhNTCBuYW1lc3BhY2UgVVJJIGFuZCBhIGxvY2FsTmFtZS4KLSBBbHRob3VnaCBpbiBhbiBYTUwgaW5zdGFuY2UgZG9jdW1lbnQsIGEgUU5hbWUgYXBwZWFycyBhcyAicHJlZml4OmxvY2FsTmFtZSIsCi0gdGhlIGxvZ2ljYWwgdmFsdWUgb2YgYSBRTmFtZSBkb2VzIE5PVCBjb250YWluIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUKLSBwcmVmaXgsIG9ubHkgdGhlIG5hbWVzcGFjZSBVUkkgdG8gd2hpY2ggdGhlIHByZWZpeCBtYXBzLiAgRm9yIGV4YW1wbGUsCi0gdHdvIFFOYW1lcyAiYTpoZWxsbyIgYW5kICJiOmhlbGxvIiBhcmUgcGVyZmVjdGx5IGVxdWl2YWxlbnQgaWYgImE6IiBpbgotIHRoZSBmaXJzdCBpbnN0YW5jZSBtYXBzIHRvIHRoZSBzYW1lIFVSSSBhcyAiYjoiIGluIHRoZSBzZWNvbmQgaW5zdGFuY2UuCi0gPHA+Ci0gQ29udmVydGlibGUgdG8gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPjxDT0RFPlFOYW1lPC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibmVzdGVkX2NsYXNzX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TmVzdGVkIENsYXNzIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtjbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLkZhY3RvcnkuaHRtbCI+WG1sUU5hbWUuRmFjdG9yeTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj48Q09ERT5YbWxRTmFtZTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+WG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sI3R5cGUiPnR5cGU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9ImZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPkZpZWxkcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNFUVVBTCI+RVFVQUw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0dSRUFURVJfVEhBTiI+R1JFQVRFUl9USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNMRVNTX1RIQU4iPkxFU1NfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTk9UX0VRVUFMIj5OT1RfRVFVQUw8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCNnZXRRTmFtZVZhbHVlKCkiPmdldFFOYW1lVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+PENPREU+UU5hbWU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCNxTmFtZVZhbHVlKCkiPnFOYW1lVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCNnZXRRTmFtZVZhbHVlKCkiPjxDT0RFPmdldFFOYW1lVmFsdWUoKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCNzZXQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSkiPnNldDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJlZS8xLjQvZG9jcy9hcGkvamF2YXgveG1sL25hbWVzcGFjZS9RTmFtZS5odG1sIj5RTmFtZTwvQT4mbmJzcDtuYW1lKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwjc2V0UU5hbWVWYWx1ZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PENPREU+c2V0UU5hbWVWYWx1ZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCNzZXRRTmFtZVZhbHVlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj5zZXRRTmFtZVZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO25hbWUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+PENPREU+UU5hbWU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxBbnlTaW1wbGVUeXBlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNnZXRTdHJpbmdWYWx1ZSgpIj5nZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldChqYXZhLmxhbmcuU3RyaW5nKSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0U3RyaW5nVmFsdWUoamF2YS5sYW5nLlN0cmluZykiPnNldFN0cmluZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc3RyaW5nVmFsdWUoKSI+c3RyaW5nVmFsdWU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NoYW5nZVR5cGUob3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlKSI+Y2hhbmdlVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVRvKGphdmEubGFuZy5PYmplY3QpIj5jb21wYXJlVG88L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPmNvbXBhcmVWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29weSgpIj5jb3B5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZykiPmV4ZWNRdWVyeTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPmV4ZWNRdWVyeTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNJbW11dGFibGUoKSI+aXNJbW11dGFibGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzTmlsKCkiPmlzTmlsPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzY2hlbWFUeXBlKCkiPnNjaGVtYVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0KG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXROaWwoKSI+c2V0TmlsPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUoKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWx1ZUVxdWFscyhvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnZhbHVlRXF1YWxzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWx1ZUhhc2hDb2RlKCkiPnZhbHVlSGFzaENvZGU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxUb2tlblNvdXJjZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjZG9jdW1lbnRQcm9wZXJ0aWVzKCkiPmRvY3VtZW50UHJvcGVydGllczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNtb25pdG9yKCkiPm1vbml0b3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3Q3Vyc29yKCkiPm5ld0N1cnNvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKCkiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0lucHV0U3RyZWFtKCkiPm5ld0lucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0lucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0lucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcigpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdYTUxJbnB1dFN0cmVhbSgpIj5uZXdYTUxJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdYTUxJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdYTUxJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSkiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSkiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uV3JpdGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uV3JpdGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQoKSI+eG1sVGV4dDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnhtbFRleHQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJ0eXBlIj48IS0tIC0tPjwvQT48SDM+Ci10eXBlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIGZpbmFsIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj5TY2hlbWFUeXBlPC9BPiA8Qj50eXBlPC9CPjwvUFJFPgotPERMPgotPEREPlRoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS4KLTxQPgotPERMPgotPC9ETD4KLTwvREw+Ci0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRRTmFtZVZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldFFOYW1lVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+IDxCPmdldFFOYW1lVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+PENPREU+UU5hbWU8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRRTmFtZVZhbHVlKGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRRTmFtZVZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRRTmFtZVZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+Jm5ic3A7bmFtZSk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+PENPREU+UU5hbWU8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJxTmFtZVZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLXFOYW1lVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvMS40L2RvY3MvYXBpL2phdmF4L3htbC9uYW1lc3BhY2UvUU5hbWUuaHRtbCI+UU5hbWU8L0E+IDxCPnFOYW1lVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCNnZXRRTmFtZVZhbHVlKCkiPjxDT0RFPmdldFFOYW1lVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPjxDT0RFPlFOYW1lPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPlFOYW1lPC9BPiZuYnNwO25hbWUpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwjc2V0UU5hbWVWYWx1ZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKSI+PENPREU+c2V0UU5hbWVWYWx1ZShqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlLzEuNC9kb2NzL2FwaS9qYXZheC94bWwvbmFtZXNwYWNlL1FOYW1lLmh0bWwiPjxDT0RFPlFOYW1lPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2F4SGFuZGxlci5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sUU5hbWUuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUnVudGltZUV4Y2VwdGlvbi5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUnVudGltZUV4Y2VwdGlvbi5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzNiNGQ5Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFJ1bnRpbWVFeGNlcHRpb24uaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwMSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ3OjAxIFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sUnVudGltZUV4Y2VwdGlvbiAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxSdW50aW1lRXhjZXB0aW9uLFhtbFJ1bnRpbWVFeGNlcHRpb24gY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbFJ1bnRpbWVFeGNlcHRpb24gKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWE1MU3RyZWFtVmFsaWRhdGlvbkV4Y2VwdGlvbi5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sUnVudGltZUV4Y2VwdGlvbi5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUNsYXNzIFhtbFJ1bnRpbWVFeGNlcHRpb248L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCI+amF2YS5sYW5nLlRocm93YWJsZTwvQT4KLSAgICAgICAgfAotICAgICAgICArLS08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0V4Y2VwdGlvbi5odG1sIj5qYXZhLmxhbmcuRXhjZXB0aW9uPC9BPgotICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgICstLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbi5odG1sIj5qYXZhLmxhbmcuUnVudGltZUV4Y2VwdGlvbjwvQT4KLSAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICAgICAgICArLS08Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFJ1bnRpbWVFeGNlcHRpb248L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5BbGwgSW1wbGVtZW50ZWQgSW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9TZXJpYWxpemFibGUuaHRtbCI+U2VyaWFsaXphYmxlPC9BPjwvREQ+Ci08L0RMPgotPERMPgotPERUPjxCPkRpcmVjdCBLbm93biBTdWJjbGFzc2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sIj5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBjbGFzcyA8Qj5YbWxSdW50aW1lRXhjZXB0aW9uPC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbi5odG1sIj5SdW50aW1lRXhjZXB0aW9uPC9BPjwvREw+Ci0KLTxQPgotQW4gdW5jaGVja2VkIFhNTCBleGNlcHRpb24uCi0gTWF5IGNvbnRhaW4gYW55IG51bWJlciBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPjxDT0RFPlhtbEVycm9yPC9DT0RFPjwvQT4gb2JqZWN0cy4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+PENPREU+WG1sRXJyb3I8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj48Q09ERT5YbWxFeGNlcHRpb248L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9zZXJpYWxpemVkLWZvcm0uaHRtbCIgVEFSR0VUPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFJ1bnRpbWVFeGNlcHRpb24iPlNlcmlhbGl6ZWQgRm9ybTwvQT48L0RMPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0iY29uc3RydWN0b3Jfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUnVudGltZUV4Y2VwdGlvbi5odG1sI1htbFJ1bnRpbWVFeGNlcHRpb24oamF2YS5sYW5nLlN0cmluZykiPlhtbFJ1bnRpbWVFeGNlcHRpb248L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdHMgYW4gWG1sUnVudGltZUV4Y2VwdGlvbiBmcm9tIGEgbWVzc2FnZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUnVudGltZUV4Y2VwdGlvbi5odG1sI1htbFJ1bnRpbWVFeGNlcHRpb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlRocm93YWJsZSkiPlhtbFJ1bnRpbWVFeGNlcHRpb248L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bSwKLSAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCI+VGhyb3dhYmxlPC9BPiZuYnNwO3QpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb25zdHJ1Y3RzIGFuIFhtbFJ1bnRpbWVFeGNlcHRpb24gZnJvbSBhIG1lc3NhZ2UgYW5kIGEgY2F1c2UuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFJ1bnRpbWVFeGNlcHRpb24uaHRtbCNYbWxSdW50aW1lRXhjZXB0aW9uKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5UaHJvd2FibGUsIGphdmEudXRpbC5Db2xsZWN0aW9uKSI+WG1sUnVudGltZUV4Y2VwdGlvbjwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDttLAotICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sIj5UaHJvd2FibGU8L0E+Jm5ic3A7dCwKLSAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9Db2xsZWN0aW9uLmh0bWwiPkNvbGxlY3Rpb248L0E+Jm5ic3A7ZXJyb3JzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29uc3RydWN0cyBhbiBYbWxSdW50aW1lRXhjZXB0aW9uIGZyb20gYSBtZXNzYWdlLCBhIGNhdXNlLCBhbmQgYSBjb2xsZWN0aW9uIG9mIFhtbEVycm9ycy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUnVudGltZUV4Y2VwdGlvbi5odG1sI1htbFJ1bnRpbWVFeGNlcHRpb24oamF2YS5sYW5nLlN0cmluZywgamF2YS5sYW5nLlRocm93YWJsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxFcnJvcikiPlhtbFJ1bnRpbWVFeGNlcHRpb248L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bSwKLSAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCI+VGhyb3dhYmxlPC9BPiZuYnNwO3QsCi0gICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+WG1sRXJyb3I8L0E+Jm5ic3A7ZXJyb3IpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDb25zdHJ1Y3RzIGFuIFhtbFJ1bnRpbWVFeGNlcHRpb24gZnJvbSBhIG1lc3NhZ2UsIGEgY2F1c2UsIGFuZCBhbiBYbWxFcnJvci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUnVudGltZUV4Y2VwdGlvbi5odG1sI1htbFJ1bnRpbWVFeGNlcHRpb24oamF2YS5sYW5nLlRocm93YWJsZSkiPlhtbFJ1bnRpbWVFeGNlcHRpb248L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sIj5UaHJvd2FibGU8L0E+Jm5ic3A7dCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdHMgYW4gWG1sUnVudGltZUV4Y2VwdGlvbiBmcm9tIGEgY2F1c2UuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFJ1bnRpbWVFeGNlcHRpb24uaHRtbCNYbWxSdW50aW1lRXhjZXB0aW9uKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXJyb3IpIj5YbWxSdW50aW1lRXhjZXB0aW9uPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT4mbmJzcDtlcnJvcik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbnN0cnVjdHMgYW4gWG1sUnVudGltZUV4Y2VwdGlvbiBmcm9tIGFuIFhtbEVycm9yLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxSdW50aW1lRXhjZXB0aW9uLmh0bWwjWG1sUnVudGltZUV4Y2VwdGlvbihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbikiPlhtbFJ1bnRpbWVFeGNlcHRpb248L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+Jm5ic3A7eG1sRXhjZXB0aW9uKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29uc3RydWN0cyBhbiBYbWxSdW50aW1lRXhjZXB0aW9uIGZyb20gYW4gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+PENPREU+WG1sRXhjZXB0aW9uPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj5YbWxFcnJvcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxSdW50aW1lRXhjZXB0aW9uLmh0bWwjZ2V0RXJyb3IoKSI+Z2V0RXJyb3I8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBmaXJzdCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPjxDT0RFPlhtbEVycm9yPC9DT0RFPjwvQT4gdGhhdCBjYXVzZWQgdGhpcyBleGNlcHRpb24sIGlmIGFueS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9Db2xsZWN0aW9uLmh0bWwiPkNvbGxlY3Rpb248L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUnVudGltZUV4Y2VwdGlvbi5odG1sI2dldEVycm9ycygpIj5nZXRFcnJvcnM8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+PENPREU+WG1sRXJyb3JzPC9DT0RFPjwvQT4gdGhhdCBjYXVzZWQgdGhpcyBleGNlcHRpb24sIGlmIGFueS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5UaHJvd2FibGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sIj5UaHJvd2FibGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCNmaWxsSW5TdGFja1RyYWNlKCkiPmZpbGxJblN0YWNrVHJhY2U8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sI2dldENhdXNlKCkiPmdldENhdXNlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCNnZXRMb2NhbGl6ZWRNZXNzYWdlKCkiPmdldExvY2FsaXplZE1lc3NhZ2U8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sI2dldE1lc3NhZ2UoKSI+Z2V0TWVzc2FnZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwjZ2V0U3RhY2tUcmFjZSgpIj5nZXRTdGFja1RyYWNlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCNpbml0Q2F1c2UoamF2YS5sYW5nLlRocm93YWJsZSkiPmluaXRDYXVzZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwjcHJpbnRTdGFja1RyYWNlKCkiPnByaW50U3RhY2tUcmFjZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwjcHJpbnRTdGFja1RyYWNlKGphdmEuaW8uUHJpbnRTdHJlYW0pIj5wcmludFN0YWNrVHJhY2U8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sI3ByaW50U3RhY2tUcmFjZShqYXZhLmlvLlByaW50V3JpdGVyKSI+cHJpbnRTdGFja1RyYWNlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCNzZXRTdGFja1RyYWNlKGphdmEubGFuZy5TdGFja1RyYWNlRWxlbWVudFtdKSI+c2V0U3RhY2tUcmFjZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImNvbnN0cnVjdG9yX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5Db25zdHJ1Y3RvciBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iWG1sUnVudGltZUV4Y2VwdGlvbihqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotWG1sUnVudGltZUV4Y2VwdGlvbjwvSDM+Ci08UFJFPgotcHVibGljIDxCPlhtbFJ1bnRpbWVFeGNlcHRpb248L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDttKTwvUFJFPgotPERMPgotPEREPkNvbnN0cnVjdHMgYW4gWG1sUnVudGltZUV4Y2VwdGlvbiBmcm9tIGEgbWVzc2FnZS4KLTxQPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iWG1sUnVudGltZUV4Y2VwdGlvbihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuVGhyb3dhYmxlKSI+PCEtLSAtLT48L0E+PEgzPgotWG1sUnVudGltZUV4Y2VwdGlvbjwvSDM+Ci08UFJFPgotcHVibGljIDxCPlhtbFJ1bnRpbWVFeGNlcHRpb248L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDttLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCI+VGhyb3dhYmxlPC9BPiZuYnNwO3QpPC9QUkU+Ci08REw+Ci08REQ+Q29uc3RydWN0cyBhbiBYbWxSdW50aW1lRXhjZXB0aW9uIGZyb20gYSBtZXNzYWdlIGFuZCBhIGNhdXNlLgotPFA+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJYbWxSdW50aW1lRXhjZXB0aW9uKGphdmEubGFuZy5UaHJvd2FibGUpIj48IS0tIC0tPjwvQT48SDM+Ci1YbWxSdW50aW1lRXhjZXB0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+WG1sUnVudGltZUV4Y2VwdGlvbjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCI+VGhyb3dhYmxlPC9BPiZuYnNwO3QpPC9QUkU+Ci08REw+Ci08REQ+Q29uc3RydWN0cyBhbiBYbWxSdW50aW1lRXhjZXB0aW9uIGZyb20gYSBjYXVzZS4KLTxQPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iWG1sUnVudGltZUV4Y2VwdGlvbihqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuVGhyb3dhYmxlLCBqYXZhLnV0aWwuQ29sbGVjdGlvbikiPjwhLS0gLS0+PC9BPjxIMz4KLVhtbFJ1bnRpbWVFeGNlcHRpb248L0gzPgotPFBSRT4KLXB1YmxpYyA8Qj5YbWxSdW50aW1lRXhjZXB0aW9uPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwiPlRocm93YWJsZTwvQT4mbmJzcDt0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9Db2xsZWN0aW9uLmh0bWwiPkNvbGxlY3Rpb248L0E+Jm5ic3A7ZXJyb3JzKTwvUFJFPgotPERMPgotPEREPkNvbnN0cnVjdHMgYW4gWG1sUnVudGltZUV4Y2VwdGlvbiBmcm9tIGEgbWVzc2FnZSwgYSBjYXVzZSwgYW5kIGEgY29sbGVjdGlvbiBvZiBYbWxFcnJvcnMuCi08UD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlhtbFJ1bnRpbWVFeGNlcHRpb24ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxFcnJvcikiPjwhLS0gLS0+PC9BPjxIMz4KLVhtbFJ1bnRpbWVFeGNlcHRpb248L0gzPgotPFBSRT4KLXB1YmxpYyA8Qj5YbWxSdW50aW1lRXhjZXB0aW9uPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPlhtbEVycm9yPC9BPiZuYnNwO2Vycm9yKTwvUFJFPgotPERMPgotPEREPkNvbnN0cnVjdHMgYW4gWG1sUnVudGltZUV4Y2VwdGlvbiBmcm9tIGFuIFhtbEVycm9yLgotPFA+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJYbWxSdW50aW1lRXhjZXB0aW9uKGphdmEubGFuZy5TdHJpbmcsIGphdmEubGFuZy5UaHJvd2FibGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sRXJyb3IpIj48IS0tIC0tPjwvQT48SDM+Ci1YbWxSdW50aW1lRXhjZXB0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+WG1sUnVudGltZUV4Y2VwdGlvbjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sIj5UaHJvd2FibGU8L0E+Jm5ic3A7dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+WG1sRXJyb3I8L0E+Jm5ic3A7ZXJyb3IpPC9QUkU+Ci08REw+Ci08REQ+Q29uc3RydWN0cyBhbiBYbWxSdW50aW1lRXhjZXB0aW9uIGZyb20gYSBtZXNzYWdlLCBhIGNhdXNlLCBhbmQgYW4gWG1sRXJyb3IuCi08UD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9IlhtbFJ1bnRpbWVFeGNlcHRpb24ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxFeGNlcHRpb24pIj48IS0tIC0tPjwvQT48SDM+Ci1YbWxSdW50aW1lRXhjZXB0aW9uPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEI+WG1sUnVudGltZUV4Y2VwdGlvbjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiZuYnNwO3htbEV4Y2VwdGlvbik8L1BSRT4KLTxETD4KLTxERD5Db25zdHJ1Y3RzIGFuIFhtbFJ1bnRpbWVFeGNlcHRpb24gZnJvbSBhbiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj48Q09ERT5YbWxFeGNlcHRpb248L0NPREU+PC9BPi4KLTxQPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0RXJyb3IoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RXJyb3I8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVycm9yLmh0bWwiPlhtbEVycm9yPC9BPiA8Qj5nZXRFcnJvcjwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGZpcnN0IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+PENPREU+WG1sRXJyb3I8L0NPREU+PC9BPiB0aGF0IGNhdXNlZCB0aGlzIGV4Y2VwdGlvbiwgaWYgYW55LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRFcnJvcnMoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0RXJyb3JzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9Db2xsZWN0aW9uLmh0bWwiPkNvbGxlY3Rpb248L0E+IDxCPmdldEVycm9yczwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFcnJvci5odG1sIj48Q09ERT5YbWxFcnJvcnM8L0NPREU+PC9BPiB0aGF0IGNhdXNlZCB0aGlzIGV4Y2VwdGlvbiwgaWYgYW55LgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YTUxTdHJlYW1WYWxpZGF0aW9uRXhjZXB0aW9uLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxSdW50aW1lRXhjZXB0aW9uLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNheEhhbmRsZXIuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNheEhhbmRsZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjMxNjVmYy4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTYXhIYW5kbGVyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNTQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1OCBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbFNheEhhbmRsZXIgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sU2F4SGFuZGxlcixYbWxTYXhIYW5kbGVyIGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sU2F4SGFuZGxlciAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxTYXhIYW5kbGVyLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFhtbFNheEhhbmRsZXI8L0gyPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBpbnRlcmZhY2UgPEI+WG1sU2F4SGFuZGxlcjwvQj48L0RMPgotCi08UD4KLUEgaG9sZGVyIGZvciBhIFNBWCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3htbC9zYXgvQ29udGVudEhhbmRsZXIuaHRtbCI+PENPREU+Q29udGVudEhhbmRsZXI8L0NPREU+PC9BPiBhbmQgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy94bWwvc2F4L2V4dC9MZXhpY2FsSGFuZGxlci5odG1sIj48Q09ERT5MZXhpY2FsSGFuZGxlcjwvQ09ERT48L0E+IHRoYXQgYXJlCi0gY2FwYWJsZSBvZiBsb2FkaW5nIGFuIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPjxDT0RFPlhtbE9iamVjdDwvQ09ERT48L0E+IGluc3RhbmNlLiAgT25jZSBhbGwgdGhlIFNBWCBldmVudHMgYXJlIHB1c2hlZAotIHRvIHRoZSBoYW5kbGVycywgY2FsbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNheEhhbmRsZXIuaHRtbCNnZXRPYmplY3QoKSI+PENPREU+Z2V0T2JqZWN0KCk8L0NPREU+PC9BPiB0byBnZXQgdGhlIGxvYWRlZCBYbWxPYmplY3QuCi08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwjbmV3WG1sU2F4SGFuZGxlcigpIj48Q09ERT5YbWxPYmplY3QuRmFjdG9yeS5uZXdYbWxTYXhIYW5kbGVyKCk8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXIuaHRtbCNuZXdYbWxTYXhIYW5kbGVyKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PENPREU+U2NoZW1hVHlwZUxvYWRlci5uZXdYbWxTYXhIYW5kbGVyKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKTwvQ09ERT48L0E+PC9ETD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcveG1sL3NheC9Db250ZW50SGFuZGxlci5odG1sIj5Db250ZW50SGFuZGxlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTYXhIYW5kbGVyLmh0bWwjZ2V0Q29udGVudEhhbmRsZXIoKSI+Z2V0Q29udGVudEhhbmRsZXI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgQ29udGVudEhhbmRsZXIgZXhwZWN0aW5nIFNBWCBjb250ZW50IGV2ZW50cy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy94bWwvc2F4L2V4dC9MZXhpY2FsSGFuZGxlci5odG1sIj5MZXhpY2FsSGFuZGxlcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTYXhIYW5kbGVyLmh0bWwjZ2V0TGV4aWNhbEhhbmRsZXIoKSI+Z2V0TGV4aWNhbEhhbmRsZXI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgTGV4aWNhbEhhbmRsZXIgZXhwZWN0aW5nIFNBWCBsZXhpY2FsIGV2ZW50cy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNheEhhbmRsZXIuaHRtbCNnZXRPYmplY3QoKSI+Z2V0T2JqZWN0PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbG9hZGVkIFhtbE9iamVjdCBhZnRlciBhbGwgdGhlIFNBWCBldmVudHMgaGF2ZSBiZWVuIGZpbmlzaGVkPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJnZXRDb250ZW50SGFuZGxlcigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRDb250ZW50SGFuZGxlcjwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcveG1sL3NheC9Db250ZW50SGFuZGxlci5odG1sIj5Db250ZW50SGFuZGxlcjwvQT4gPEI+Z2V0Q29udGVudEhhbmRsZXI8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UaGUgQ29udGVudEhhbmRsZXIgZXhwZWN0aW5nIFNBWCBjb250ZW50IGV2ZW50cy4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcveG1sL3NheC9Db250ZW50SGFuZGxlci5odG1sIj48Q09ERT5Db250ZW50SGFuZGxlcjwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnZXRMZXhpY2FsSGFuZGxlcigpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRMZXhpY2FsSGFuZGxlcjwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcveG1sL3NheC9leHQvTGV4aWNhbEhhbmRsZXIuaHRtbCI+TGV4aWNhbEhhbmRsZXI8L0E+IDxCPmdldExleGljYWxIYW5kbGVyPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VGhlIExleGljYWxIYW5kbGVyIGV4cGVjdGluZyBTQVggbGV4aWNhbCBldmVudHMuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3htbC9zYXgvZXh0L0xleGljYWxIYW5kbGVyLmh0bWwiPjxDT0RFPkxleGljYWxIYW5kbGVyPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldE9iamVjdCgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRPYmplY3Q8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+IDxCPmdldE9iamVjdDwvQj4oKQotICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIGxvYWRlZCBYbWxPYmplY3QgYWZ0ZXIgYWxsIHRoZSBTQVggZXZlbnRzIGhhdmUgYmVlbiBmaW5pc2hlZAotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbFNheEhhbmRsZXIuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuRmFjdG9yeS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmE4ZjgxLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY3MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ3OjAxIFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sU2hvcnQuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxTaG9ydC5GYWN0b3J5LFhtbFNob3J0LkZhY3RvcnkgY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbFNob3J0LkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbFNob3J0LkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBYbWxTaG9ydC5GYWN0b3J5PC9IMj4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5qYXZhLmxhbmcuT2JqZWN0PC9BPgotICB8Ci0gICstLTxCPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sU2hvcnQuRmFjdG9yeTwvQj4KLTwvUFJFPgotPERMPgotPERUPjxCPkVuY2xvc2luZyBjbGFzczo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+WG1sU2hvcnQ8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyA8Qj5YbWxTaG9ydC5GYWN0b3J5PC9CPjxEVD5leHRlbmRzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0RMPgotCi08UD4KLUEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPjxDT0RFPlhtbFNob3J0PC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPlhtbFNob3J0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj5uZXdJbnN0YW5jZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj48Q09ERT5YbWxTaG9ydDwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+WG1sU2hvcnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0luc3RhbmNlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj48Q09ERT5YbWxTaG9ydDwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj5YbWxTaG9ydDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPm5ld1ZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+PENPREU+WG1sU2hvcnQ8L0NPREU+PC9BPiB2YWx1ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPlhtbFNob3J0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj48Q09ERT5YbWxTaG9ydDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPlhtbFNob3J0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj48Q09ERT5YbWxTaG9ydDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPlhtbFNob3J0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+PENPREU+WG1sU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPlhtbFNob3J0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+PENPREU+WG1sU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPlhtbFNob3J0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPjxDT0RFPlhtbFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPlhtbFNob3J0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPjxDT0RFPlhtbFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPlhtbFNob3J0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlcikiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj48Q09ERT5YbWxTaG9ydDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+WG1sU2hvcnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPjxDT0RFPlhtbFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj5YbWxTaG9ydDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPjxDT0RFPlhtbFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj5YbWxTaG9ydDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPjxDT0RFPlhtbFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj5YbWxTaG9ydDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj48Q09ERT5YbWxTaG9ydDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+WG1sU2hvcnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+PENPREU+WG1sU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPlhtbFNob3J0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+PENPREU+WG1sU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPlhtbFNob3J0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+PENPREU+WG1sU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+WG1sU2hvcnQ8L0E+IDxCPm5ld0luc3RhbmNlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPjxDT0RFPlhtbFNob3J0PC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj5YbWxTaG9ydDwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPjxDT0RFPlhtbFNob3J0PC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+WG1sU2hvcnQ8L0E+IDxCPm5ld1ZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+PENPREU+WG1sU2hvcnQ8L0NPREU+PC9BPiB2YWx1ZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj5YbWxTaG9ydDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj48Q09ERT5YbWxTaG9ydDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsxMjM0NSZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+WG1sU2hvcnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+PENPREU+WG1sU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7MTIzNDUmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPlhtbFNob3J0PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+PENPREU+WG1sU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPlhtbFNob3J0PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+PENPREU+WG1sU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj5YbWxTaG9ydDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+PENPREU+WG1sU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+WG1sU2hvcnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPjxDT0RFPlhtbFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+WG1sU2hvcnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcykKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj48Q09ERT5YbWxTaG9ydDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+WG1sU2hvcnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj48Q09ERT5YbWxTaG9ydDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj5YbWxTaG9ydDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cikKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj48Q09ERT5YbWxTaG9ydDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPlhtbFNob3J0PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPjxDT0RFPlhtbFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+WG1sU2hvcnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPjxDT0RFPlhtbFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+WG1sU2hvcnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPjxDT0RFPlhtbFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPlhtbFNob3J0PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPjxDT0RFPlhtbFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+WG1sU2hvcnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+PENPREU+WG1sU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxTaG9ydC5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTE3NDUzLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NjkgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1OCBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbFNob3J0IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFNob3J0LFhtbFNob3J0IGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sU2hvcnQgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNheEhhbmRsZXIuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sU2hvcnQuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1JbnRlcmZhY2UgWG1sU2hvcnQ8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPlhtbEludDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwiPlhtbExvbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvREQ+Ci08L0RMPgotPERMPgotPERUPjxCPkFsbCBLbm93biBTdWJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj5YbWxCeXRlPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBpbnRlcmZhY2UgPEI+WG1sU2hvcnQ8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+WG1sSW50PC9BPjwvREw+Ci0KLTxQPgotQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Nob3J0Ij54czpzaG9ydDwvYT4gdHlwZS4KLSBPbmUgb2YgdGhlIGRlcml2ZWQgdHlwZXMgYmFzZWQgb24gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkZWNpbWFsIj54czpkZWNpbWFsPC9hPi4KLSA8cD4KLSBOYXR1cmFsbHksIGNvbnZlcnRpYmxlIHRvIGEgSmF2YSBzaG9ydC4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5OZXN0ZWQgQ2xhc3MgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2NsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuRmFjdG9yeS5odG1sIj5YbWxTaG9ydC5GYWN0b3J5PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPjxDT0RFPlhtbFNob3J0PC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxJbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPlhtbEludDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5GYWN0b3J5Lmh0bWwiPlhtbEludC5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbExvbmciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj5YbWxMb25nPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5GYWN0b3J5Lmh0bWwiPlhtbExvbmcuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxJbnRlZ2VyIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxJbnRlZ2VyLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sRGVjaW1hbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCI+WG1sRGVjaW1hbC5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPlhtbE9iamVjdC5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCN0eXBlIj50eXBlPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjRVFVQUwiPkVRVUFMPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNHUkVBVEVSX1RIQU4iPkdSRUFURVJfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTEVTU19USEFOIj5MRVNTX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI05PVF9FUVVBTCI+Tk9UX0VRVUFMPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7c2hvcnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sI2dldFNob3J0VmFsdWUoKSI+Z2V0U2hvcnRWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhpcyB2YWx1ZSBhcyBhIHNob3J0PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sI3NldChzaG9ydCkiPnNldDwvQT48L0I+KHNob3J0Jm5ic3A7cyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sI3NldFNob3J0VmFsdWUoc2hvcnQpIj48Q09ERT5zZXRTaG9ydFZhbHVlKHNob3J0KTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCNzZXRTaG9ydFZhbHVlKHNob3J0KSI+c2V0U2hvcnRWYWx1ZTwvQT48L0I+KHNob3J0Jm5ic3A7cyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhpcyB2YWx1ZSBhcyBhIHNob3J0PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3Nob3J0PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCNzaG9ydFZhbHVlKCkiPnNob3J0VmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCNnZXRTaG9ydFZhbHVlKCkiPjxDT0RFPmdldFNob3J0VmFsdWUoKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxJbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPlhtbEludDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sI2dldEludFZhbHVlKCkiPmdldEludFZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCNpbnRWYWx1ZSgpIj5pbnRWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwjc2V0KGludCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwjc2V0SW50VmFsdWUoaW50KSI+c2V0SW50VmFsdWU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxMb25nIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+WG1sTG9uZzwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCNnZXRMb25nVmFsdWUoKSI+Z2V0TG9uZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwjbG9uZ1ZhbHVlKCkiPmxvbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sI3NldChsb25nKSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLmh0bWwjc2V0TG9uZ1ZhbHVlKGxvbmcpIj5zZXRMb25nVmFsdWU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxJbnRlZ2VyIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCNiaWdJbnRlZ2VyVmFsdWUoKSI+YmlnSW50ZWdlclZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwjZ2V0QmlnSW50ZWdlclZhbHVlKCkiPmdldEJpZ0ludGVnZXJWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI3NldChqYXZhLm1hdGguQmlnSW50ZWdlcikiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI3NldEJpZ0ludGVnZXJWYWx1ZShqYXZhLm1hdGguQmlnSW50ZWdlcikiPnNldEJpZ0ludGVnZXJWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERlY2ltYWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI2JpZ0RlY2ltYWxWYWx1ZSgpIj5iaWdEZWNpbWFsVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCNnZXRCaWdEZWNpbWFsVmFsdWUoKSI+Z2V0QmlnRGVjaW1hbFZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjc2V0KGphdmEubWF0aC5CaWdEZWNpbWFsKSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjc2V0QmlnRGVjaW1hbFZhbHVlKGphdmEubWF0aC5CaWdEZWNpbWFsKSI+c2V0QmlnRGVjaW1hbFZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjZ2V0U3RyaW5nVmFsdWUoKSI+Z2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXQoamF2YS5sYW5nLlN0cmluZykiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj5zZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3N0cmluZ1ZhbHVlKCkiPnN0cmluZ1ZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjaGFuZ2VUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPmNoYW5nZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KSI+Y29tcGFyZVRvPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5jb21wYXJlVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvcHkoKSI+Y29weTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzSW1tdXRhYmxlKCkiPmlzSW1tdXRhYmxlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc05pbCgpIj5pc05pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2NoZW1hVHlwZSgpIj5zY2hlbWFUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0TmlsKCkiPnNldE5pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKCkiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVFcXVhbHMob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj52YWx1ZUVxdWFsczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVIYXNoQ29kZSgpIj52YWx1ZUhhc2hDb2RlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVG9rZW5Tb3VyY2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI2RvY3VtZW50UHJvcGVydGllcygpIj5kb2N1bWVudFByb3BlcnRpZXM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbW9uaXRvcigpIj5tb25pdG9yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0N1cnNvcigpIj5uZXdDdXJzb3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZSgpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbSgpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIoKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0oKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0pIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KCkiPnhtbFRleHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj54bWxUZXh0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0idHlwZSI+PCEtLSAtLT48L0E+PEgzPgotdHlwZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+dHlwZTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0U2hvcnRWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTaG9ydFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc2hvcnQgPEI+Z2V0U2hvcnRWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIHNob3J0Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFNob3J0VmFsdWUoc2hvcnQpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRTaG9ydFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRTaG9ydFZhbHVlPC9CPihzaG9ydCZuYnNwO3MpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgc2hvcnQKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2hvcnRWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1zaG9ydFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc2hvcnQgPEI+c2hvcnRWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sI2dldFNob3J0VmFsdWUoKSI+PENPREU+Z2V0U2hvcnRWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSBzaG9ydAotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQoc2hvcnQpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oc2hvcnQmbmJzcDtzKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sI3NldFNob3J0VmFsdWUoc2hvcnQpIj48Q09ERT5zZXRTaG9ydFZhbHVlKHNob3J0KTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgc2hvcnQKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNheEhhbmRsZXIuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sU2hvcnQuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZWZmOGQzLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg3NiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ3OjAxIFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sU2ltcGxlTGlzdCAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxTaW1wbGVMaXN0LFhtbFNpbXBsZUxpc3QgY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbFNpbXBsZUxpc3QgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0LkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxTaW1wbGVMaXN0Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2NvbnN0cnVjdG9yX3N1bW1hcnkiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9kZXRhaWwiPkNPTlNUUjwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sU2ltcGxlTGlzdDwvSDI+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+amF2YS5sYW5nLk9iamVjdDwvQT4KLSAgfAotICArLS08Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFNpbXBsZUxpc3Q8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5BbGwgSW1wbGVtZW50ZWQgSW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NvbGxlY3Rpb24uaHRtbCI+Q29sbGVjdGlvbjwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vU2VyaWFsaXphYmxlLmh0bWwiPlNlcmlhbGl6YWJsZTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgY2xhc3MgPEI+WG1sU2ltcGxlTGlzdDwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PERUPmltcGxlbWVudHMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9TZXJpYWxpemFibGUuaHRtbCI+U2VyaWFsaXphYmxlPC9BPjwvREw+Ci0KLTxQPgotVGhlIGltbXV0YWJsZSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+IHJldHVybmVkIGZvciBYTUwgc2ltcGxlIGxpc3QgdmFsdWVzLgotIAotIFhtbFNpbXBsZUxpc3QgaW1wbGVtZW50cyBhbiBlcXVhbHMoKSBhbmQgaGFzaENvZGUoKSB0aGF0IGNvbXBhcmUgbGlzdAotIGNvbnRlbnRzLCBzbyB0d28gWG1sU2ltcGxlTGlzdHMgYXJlIHRoZSBzYW1lIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZQotIHZhbHVlcyBpbiB0aGUgc2FtZSBvcmRlci4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL3NlcmlhbGl6ZWQtZm9ybS5odG1sIiBUQVJHRVQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sU2ltcGxlTGlzdCI+U2VyaWFsaXplZCBGb3JtPC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwjWG1sU2ltcGxlTGlzdChqYXZhLnV0aWwuTGlzdCkiPlhtbFNpbXBsZUxpc3Q8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT4mbmJzcDtsaXN0KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29uc3RydWN0cyBhbiBpbW11dGFibGUgWG1sU2ltcGxlTGlzdCB0aGF0IHdyYXBzIChkb2VzIG5vdCBjb3B5KQotIHRoZSBnaXZlbiA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwjYWRkKGludCwgamF2YS5sYW5nLk9iamVjdCkiPmFkZDwvQT48L0I+KGludCZuYnNwO2luZGV4LAotICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtlbGVtZW50KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VW5zdXBwb3J0ZWQgYmVjYXVzZSB0aGlzIGxpc3QgaXMgaW1tdXRhYmxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sI2FkZChqYXZhLmxhbmcuT2JqZWN0KSI+YWRkPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO28pPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtVbnN1cHBvcnRlZCBiZWNhdXNlIHRoaXMgbGlzdCBpcyBpbW11dGFibGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwjYWRkQWxsKGphdmEudXRpbC5Db2xsZWN0aW9uKSI+YWRkQWxsPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9Db2xsZWN0aW9uLmh0bWwiPkNvbGxlY3Rpb248L0E+Jm5ic3A7Y29sbCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1Vuc3VwcG9ydGVkIGJlY2F1c2UgdGhpcyBsaXN0IGlzIGltbXV0YWJsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCNhZGRBbGwoaW50LCBqYXZhLnV0aWwuQ29sbGVjdGlvbikiPmFkZEFsbDwvQT48L0I+KGludCZuYnNwO2luZGV4LAotICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ29sbGVjdGlvbi5odG1sIj5Db2xsZWN0aW9uPC9BPiZuYnNwO2MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtVbnN1cHBvcnRlZCBiZWNhdXNlIHRoaXMgbGlzdCBpcyBpbW11dGFibGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwjY2xlYXIoKSI+Y2xlYXI8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtVbnN1cHBvcnRlZCBiZWNhdXNlIHRoaXMgbGlzdCBpcyBpbW11dGFibGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwjY29udGFpbnMoamF2YS5sYW5nLk9iamVjdCkiPmNvbnRhaW5zPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO28pPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoZSBsaXN0IGlzIGNvbnRhaW5zIGFuIG9iamVjdCBlcXVhbCB0byBvLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sI2NvbnRhaW5zQWxsKGphdmEudXRpbC5Db2xsZWN0aW9uKSI+Y29udGFpbnNBbGw8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NvbGxlY3Rpb24uaHRtbCI+Q29sbGVjdGlvbjwvQT4mbmJzcDtjb2xsKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VHJ1ZSBpZiB0aGUgbGlzdCBpcyBjb250YWlucyBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGdpdmVuIGNvbGxlY3Rpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj5lcXVhbHM8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7byk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1R3byBYbWxTaW1wbGVMaXN0cyBhcmUgZXF1YWwgaWYgYWxsIHRoZWlyIGl0ZW1zIGFyZSBlcXVhbC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCNnZXQoaW50KSI+Z2V0PC9BPjwvQj4oaW50Jm5ic3A7aW5kZXgpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBvYmplY3QgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbiBpbiB0aGlzIGxpc3QuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvbWJpbmVzIHRoZSBoYXNoIGNvZGVzIG9mIGFsbCB0aGUgbGlzdCBpdGVtcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sI2luZGV4T2YoamF2YS5sYW5nLk9iamVjdCkiPmluZGV4T2Y8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7byk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgaW5kZXggb2YgdGhlIGZpcnN0IG9jY3VyYW5jZSBvZiBhbiBvYmplY3QgZXF1YWwgdG8gby48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCNpc0VtcHR5KCkiPmlzRW1wdHk8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUcnVlIGlmIHRoZSBsaXN0IGlzIGVtcHR5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0l0ZXJhdG9yLmh0bWwiPkl0ZXJhdG9yPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCNpdGVyYXRvcigpIj5pdGVyYXRvcjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYW4gaXRlcmF0b3Igb3ZlciB0aGUgZWxlbWVudHMgaW4gdGhpcyBsaXN0IGluIHByb3BlciBzZXF1ZW5jZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sI2xhc3RJbmRleE9mKGphdmEubGFuZy5PYmplY3QpIj5sYXN0SW5kZXhPZjwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBpbmRleCBvZiB0aGUgbGFzdCBvY2N1cmFuY2Ugb2YgYW4gb2JqZWN0IGVxdWFsIHRvIG8uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdEl0ZXJhdG9yLmh0bWwiPkxpc3RJdGVyYXRvcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwjbGlzdEl0ZXJhdG9yKCkiPmxpc3RJdGVyYXRvcjwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBsaXN0IGl0ZXJhdG9yIG9mIHRoZSBlbGVtZW50cyBpbiB0aGlzIGxpc3QgaW4gcHJvcGVyIHNlcXVlbmNlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3RJdGVyYXRvci5odG1sIj5MaXN0SXRlcmF0b3I8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sI2xpc3RJdGVyYXRvcihpbnQpIj5saXN0SXRlcmF0b3I8L0E+PC9CPihpbnQmbmJzcDtpbmRleCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBsaXN0IGl0ZXJhdG9yIG9mIHRoZSBlbGVtZW50cyBpbiB0aGlzIGxpc3QgaW4gcHJvcGVyIHNlcXVlbmNlLCBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uIGluIHRoaXMgbGlzdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCNyZW1vdmUoaW50KSI+cmVtb3ZlPC9BPjwvQj4oaW50Jm5ic3A7aW5kZXgpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtVbnN1cHBvcnRlZCBiZWNhdXNlIHRoaXMgbGlzdCBpcyBpbW11dGFibGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2Jvb2xlYW48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwjcmVtb3ZlKGphdmEubGFuZy5PYmplY3QpIj5yZW1vdmU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7byk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1Vuc3VwcG9ydGVkIGJlY2F1c2UgdGhpcyBsaXN0IGlzIGltbXV0YWJsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7Ym9vbGVhbjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCNyZW1vdmVBbGwoamF2YS51dGlsLkNvbGxlY3Rpb24pIj5yZW1vdmVBbGw8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NvbGxlY3Rpb24uaHRtbCI+Q29sbGVjdGlvbjwvQT4mbmJzcDtjb2xsKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VW5zdXBwb3J0ZWQgYmVjYXVzZSB0aGlzIGxpc3QgaXMgaW1tdXRhYmxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtib29sZWFuPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sI3JldGFpbkFsbChqYXZhLnV0aWwuQ29sbGVjdGlvbikiPnJldGFpbkFsbDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ29sbGVjdGlvbi5odG1sIj5Db2xsZWN0aW9uPC9BPiZuYnNwO2NvbGwpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtVbnN1cHBvcnRlZCBiZWNhdXNlIHRoaXMgbGlzdCBpcyBpbW11dGFibGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwjc2V0KGludCwgamF2YS5sYW5nLk9iamVjdCkiPnNldDwvQT48L0I+KGludCZuYnNwO2luZGV4LAotICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtlbGVtZW50KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VW5zdXBwb3J0ZWQgYmVjYXVzZSB0aGlzIGxpc3QgaXMgaW1tdXRhYmxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtpbnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwjc2l6ZSgpIj5zaXplPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoaXMgbGlzdC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sI3N1Ykxpc3QoaW50LCBpbnQpIj5zdWJMaXN0PC9BPjwvQj4oaW50Jm5ic3A7ZnJvbSwKLSAgICAgICAgaW50Jm5ic3A7dG8pPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmlldyBvZiB0aGUgcG9ydGlvbiBvZiB0aGlzIGxpc3QgYmV0d2VlbiB0aGUgc3BlY2lmaWVkIGZyb21JbmRleCwgaW5jbHVzaXZlLCBhbmQgdG9JbmRleCwgZXhjbHVzaXZlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+W108L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwjdG9BcnJheSgpIj50b0FycmF5PC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q29waWVzIHRoZSBjb2xsZWN0aW9uIHRvIGFuIGFycmF5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+W108L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwjdG9BcnJheShqYXZhLmxhbmcuT2JqZWN0W10pIj50b0FycmF5PC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPltdJm5ic3A7YSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NvcGllcyB0aGUgY29sbGVjdGlvbiB0byBhbiBhcnJheSBvZiBhIHNwZWNpZmllZCB0eXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb25zIG9mIGFsbAotIHRoZSBpdGVtcyBpbiB0aGUgbGlzdC48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNjbG9uZSgpIj5jbG9uZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KCkiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZykiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZywgaW50KSI+d2FpdDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0iY29uc3RydWN0b3JfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPkNvbnN0cnVjdG9yIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJYbWxTaW1wbGVMaXN0KGphdmEudXRpbC5MaXN0KSI+PCEtLSAtLT48L0E+PEgzPgotWG1sU2ltcGxlTGlzdDwvSDM+Ci08UFJFPgotcHVibGljIDxCPlhtbFNpbXBsZUxpc3Q8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPiZuYnNwO2xpc3QpPC9QUkU+Ci08REw+Ci08REQ+Q29uc3RydWN0cyBhbiBpbW11dGFibGUgWG1sU2ltcGxlTGlzdCB0aGF0IHdyYXBzIChkb2VzIG5vdCBjb3B5KQotIHRoZSBnaXZlbiA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+LiAgQWxsIG5vbi1tdXRhdGluZyBtZXRob2RzIGRlbGVnYXRlIHRvCi0gdGhlIHVuZGVybHlpbmcgTGlzdCBpbnN0YW5jZS4KLTxQPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0ic2l6ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1zaXplPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPnNpemU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhpcyBsaXN0LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPnNpemU8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpc0VtcHR5KCkiPjwhLS0gLS0+PC9BPjxIMz4KLWlzRW1wdHk8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmlzRW1wdHk8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoZSBsaXN0IGlzIGVtcHR5LgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPmlzRW1wdHk8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjb250YWlucyhqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotY29udGFpbnM8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmNvbnRhaW5zPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7byk8L1BSRT4KLTxETD4KLTxERD5UcnVlIGlmIHRoZSBsaXN0IGlzIGNvbnRhaW5zIGFuIG9iamVjdCBlcXVhbCB0byBvLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPmNvbnRhaW5zPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iY29udGFpbnNBbGwoamF2YS51dGlsLkNvbGxlY3Rpb24pIj48IS0tIC0tPjwvQT48SDM+Ci1jb250YWluc0FsbDwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+Y29udGFpbnNBbGw8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ29sbGVjdGlvbi5odG1sIj5Db2xsZWN0aW9uPC9BPiZuYnNwO2NvbGwpPC9QUkU+Ci08REw+Ci08REQ+VHJ1ZSBpZiB0aGUgbGlzdCBpcyBjb250YWlucyBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGdpdmVuIGNvbGxlY3Rpb24uCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+Y29udGFpbnNBbGw8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ0b0FycmF5KCkiPjwhLS0gLS0+PC9BPjxIMz4KLXRvQXJyYXk8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+W10gPEI+dG9BcnJheTwvQj4oKTwvUFJFPgotPERMPgotPEREPkNvcGllcyB0aGUgY29sbGVjdGlvbiB0byBhbiBhcnJheS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT50b0FycmF5PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0idG9BcnJheShqYXZhLmxhbmcuT2JqZWN0W10pIj48IS0tIC0tPjwvQT48SDM+Ci10b0FycmF5PC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPltdIDxCPnRvQXJyYXk8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT5bXSZuYnNwO2EpPC9QUkU+Ci08REw+Ci08REQ+Q29waWVzIHRoZSBjb2xsZWN0aW9uIHRvIGFuIGFycmF5IG9mIGEgc3BlY2lmaWVkIHR5cGUuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+dG9BcnJheTwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImFkZChqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotYWRkPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5hZGQ8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvKTwvUFJFPgotPERMPgotPEREPlVuc3VwcG9ydGVkIGJlY2F1c2UgdGhpcyBsaXN0IGlzIGltbXV0YWJsZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5hZGQ8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJhZGRBbGwoamF2YS51dGlsLkNvbGxlY3Rpb24pIj48IS0tIC0tPjwvQT48SDM+Ci1hZGRBbGw8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPmFkZEFsbDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9Db2xsZWN0aW9uLmh0bWwiPkNvbGxlY3Rpb248L0E+Jm5ic3A7Y29sbCk8L1BSRT4KLTxETD4KLTxERD5VbnN1cHBvcnRlZCBiZWNhdXNlIHRoaXMgbGlzdCBpcyBpbW11dGFibGUuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+YWRkQWxsPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icmVtb3ZlKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1yZW1vdmU8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPnJlbW92ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO28pPC9QUkU+Ci08REw+Ci08REQ+VW5zdXBwb3J0ZWQgYmVjYXVzZSB0aGlzIGxpc3QgaXMgaW1tdXRhYmxlLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPnJlbW92ZTwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InJlbW92ZUFsbChqYXZhLnV0aWwuQ29sbGVjdGlvbikiPjwhLS0gLS0+PC9BPjxIMz4KLXJlbW92ZUFsbDwvSDM+Ci08UFJFPgotcHVibGljIGJvb2xlYW4gPEI+cmVtb3ZlQWxsPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NvbGxlY3Rpb24uaHRtbCI+Q29sbGVjdGlvbjwvQT4mbmJzcDtjb2xsKTwvUFJFPgotPERMPgotPEREPlVuc3VwcG9ydGVkIGJlY2F1c2UgdGhpcyBsaXN0IGlzIGltbXV0YWJsZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5yZW1vdmVBbGw8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJyZXRhaW5BbGwoamF2YS51dGlsLkNvbGxlY3Rpb24pIj48IS0tIC0tPjwvQT48SDM+Ci1yZXRhaW5BbGw8L0gzPgotPFBSRT4KLXB1YmxpYyBib29sZWFuIDxCPnJldGFpbkFsbDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9Db2xsZWN0aW9uLmh0bWwiPkNvbGxlY3Rpb248L0E+Jm5ic3A7Y29sbCk8L1BSRT4KLTxETD4KLTxERD5VbnN1cHBvcnRlZCBiZWNhdXNlIHRoaXMgbGlzdCBpcyBpbW11dGFibGUuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+cmV0YWluQWxsPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iY2xlYXIoKSI+PCEtLSAtLT48L0E+PEgzPgotY2xlYXI8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPmNsZWFyPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+VW5zdXBwb3J0ZWQgYmVjYXVzZSB0aGlzIGxpc3QgaXMgaW1tdXRhYmxlLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPmNsZWFyPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0iZ2V0KGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldDwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4gPEI+Z2V0PC9CPihpbnQmbmJzcDtpbmRleCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBvYmplY3QgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbiBpbiB0aGlzIGxpc3QuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+Z2V0PC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0KGludCwgamF2YS5sYW5nLk9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4gPEI+c2V0PC9CPihpbnQmbmJzcDtpbmRleCwKLSAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtlbGVtZW50KTwvUFJFPgotPERMPgotPEREPlVuc3VwcG9ydGVkIGJlY2F1c2UgdGhpcyBsaXN0IGlzIGltbXV0YWJsZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5zZXQ8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJhZGQoaW50LCBqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotYWRkPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5hZGQ8L0I+KGludCZuYnNwO2luZGV4LAotICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtlbGVtZW50KTwvUFJFPgotPERMPgotPEREPlVuc3VwcG9ydGVkIGJlY2F1c2UgdGhpcyBsaXN0IGlzIGltbXV0YWJsZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5hZGQ8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJyZW1vdmUoaW50KSI+PCEtLSAtLT48L0E+PEgzPgotcmVtb3ZlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiA8Qj5yZW1vdmU8L0I+KGludCZuYnNwO2luZGV4KTwvUFJFPgotPERMPgotPEREPlVuc3VwcG9ydGVkIGJlY2F1c2UgdGhpcyBsaXN0IGlzIGltbXV0YWJsZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5yZW1vdmU8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJpbmRleE9mKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1pbmRleE9mPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmluZGV4T2Y8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgaW5kZXggb2YgdGhlIGZpcnN0IG9jY3VyYW5jZSBvZiBhbiBvYmplY3QgZXF1YWwgdG8gby4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5pbmRleE9mPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibGFzdEluZGV4T2YoamF2YS5sYW5nLk9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLWxhc3RJbmRleE9mPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmxhc3RJbmRleE9mPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7byk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGluZGV4IG9mIHRoZSBsYXN0IG9jY3VyYW5jZSBvZiBhbiBvYmplY3QgZXF1YWwgdG8gby4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5sYXN0SW5kZXhPZjwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImFkZEFsbChpbnQsIGphdmEudXRpbC5Db2xsZWN0aW9uKSI+PCEtLSAtLT48L0E+PEgzPgotYWRkQWxsPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5hZGRBbGw8L0I+KGludCZuYnNwO2luZGV4LAotICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ29sbGVjdGlvbi5odG1sIj5Db2xsZWN0aW9uPC9BPiZuYnNwO2MpPC9QUkU+Ci08REw+Ci08REQ+VW5zdXBwb3J0ZWQgYmVjYXVzZSB0aGlzIGxpc3QgaXMgaW1tdXRhYmxlLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPmFkZEFsbDwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InN1Ykxpc3QoaW50LCBpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1zdWJMaXN0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+IDxCPnN1Ykxpc3Q8L0I+KGludCZuYnNwO2Zyb20sCi0gICAgICAgICAgICAgICAgICAgIGludCZuYnNwO3RvKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2aWV3IG9mIHRoZSBwb3J0aW9uIG9mIHRoaXMgbGlzdCBiZXR3ZWVuIHRoZSBzcGVjaWZpZWQgZnJvbUluZGV4LCBpbmNsdXNpdmUsIGFuZCB0b0luZGV4LCBleGNsdXNpdmUuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+c3ViTGlzdDwvQ09ERT4gaW4gaW50ZXJmYWNlIDxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Iml0ZXJhdG9yKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWl0ZXJhdG9yPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9JdGVyYXRvci5odG1sIj5JdGVyYXRvcjwvQT4gPEI+aXRlcmF0b3I8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGVsZW1lbnRzIGluIHRoaXMgbGlzdCBpbiBwcm9wZXIgc2VxdWVuY2UuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+aXRlcmF0b3I8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJsaXN0SXRlcmF0b3IoKSI+PCEtLSAtLT48L0E+PEgzPgotbGlzdEl0ZXJhdG9yPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0SXRlcmF0b3IuaHRtbCI+TGlzdEl0ZXJhdG9yPC9BPiA8Qj5saXN0SXRlcmF0b3I8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgbGlzdCBpdGVyYXRvciBvZiB0aGUgZWxlbWVudHMgaW4gdGhpcyBsaXN0IGluIHByb3BlciBzZXF1ZW5jZS4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5saXN0SXRlcmF0b3I8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJsaXN0SXRlcmF0b3IoaW50KSI+PCEtLSAtLT48L0E+PEgzPgotbGlzdEl0ZXJhdG9yPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0SXRlcmF0b3IuaHRtbCI+TGlzdEl0ZXJhdG9yPC9BPiA8Qj5saXN0SXRlcmF0b3I8L0I+KGludCZuYnNwO2luZGV4KTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBsaXN0IGl0ZXJhdG9yIG9mIHRoZSBlbGVtZW50cyBpbiB0aGlzIGxpc3QgaW4gcHJvcGVyIHNlcXVlbmNlLCBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uIGluIHRoaXMgbGlzdC4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TcGVjaWZpZWQgYnk6PC9CPjxERD48Q09ERT5saXN0SXRlcmF0b3I8L0NPREU+IGluIGludGVyZmFjZSA8Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJ0b1N0cmluZygpIj48IS0tIC0tPjwvQT48SDM+Ci10b1N0cmluZzwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+dG9TdHJpbmc8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbnMgb2YgYWxsCi0gdGhlIGl0ZW1zIGluIHRoZSBsaXN0LiAgRm9yIG1vc3QgbGlzdHMsIHRoaXMgaXMgYSB2YWxpZCB4bWwgbGV4aWNhbAotIHZhbHVlIGZvciB0aGUgbGlzdC4gKFRoZSBub3RhYmxlIGV4Y2VwdGlvbiBpcyBhIGxpc3Qgb2YgUU5hbWVzLikKLTxQPgotPEREPjxETD4KLTxEVD48Qj5PdmVycmlkZXM6PC9CPjxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPjwvQ09ERT4gaW4gY2xhc3MgPENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImVxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotZXF1YWxzPC9IMz4KLTxQUkU+Ci1wdWJsaWMgYm9vbGVhbiA8Qj5lcXVhbHM8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvKTwvUFJFPgotPERMPgotPEREPlR3byBYbWxTaW1wbGVMaXN0cyBhcmUgZXF1YWwgaWYgYWxsIHRoZWlyIGl0ZW1zIGFyZSBlcXVhbC4KLSAoVGhleSBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGl0ZW1zLCBhbmQgdGhlIGl0ZW1zIG11c3QgYmUgaW4KLSB0aGUgc2FtZSBvcmRlci4pCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U3BlY2lmaWVkIGJ5OjwvQj48REQ+PENPREU+ZXF1YWxzPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+PC9DT0RFPjxEVD48Qj5PdmVycmlkZXM6PC9CPjxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPjwvQ09ERT4gaW4gY2xhc3MgPENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Imhhc2hDb2RlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWhhc2hDb2RlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmhhc2hDb2RlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+Q29tYmluZXMgdGhlIGhhc2ggY29kZXMgb2YgYWxsIHRoZSBsaXN0IGl0ZW1zLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNwZWNpZmllZCBieTo8L0I+PEREPjxDT0RFPmhhc2hDb2RlPC9DT0RFPiBpbiBpbnRlcmZhY2UgPENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+PC9DT0RFPjxEVD48Qj5PdmVycmlkZXM6PC9CPjxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPjwvQ09ERT4gaW4gY2xhc3MgPENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sU2ltcGxlTGlzdC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNjb25zdHJ1Y3Rvcl9zdW1tYXJ5Ij5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjY29uc3RydWN0b3JfZGV0YWlsIj5DT05TVFI8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA0OTY0Yi4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjczICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDc6MDEgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxTdHJpbmcuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxTdHJpbmcuRmFjdG9yeSxYbWxTdHJpbmcuRmFjdG9yeSBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sU3RyaW5nLkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNpbXBsZUxpc3QuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTwhLS0gPT09PT09PT0gU1RBUlQgT0YgQ0xBU1MgREFUQSA9PT09PT09PSAtLT4KLTxIMj4KLTxGT05UIFNJWkU9Ii0xIj4KLW9yZy5hcGFjaGUueG1sYmVhbnM8L0ZPTlQ+Ci08QlI+Ci1DbGFzcyBYbWxTdHJpbmcuRmFjdG9yeTwvSDI+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+amF2YS5sYW5nLk9iamVjdDwvQT4KLSAgfAotICArLS08Qj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFN0cmluZy5GYWN0b3J5PC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+RW5jbG9zaW5nIGNsYXNzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+WG1sU3RyaW5nPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgPEI+WG1sU3RyaW5nLkZhY3Rvcnk8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvREw+Ci0KLTxQPgotQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPjxDT0RFPlhtbFN0cmluZzwvQ09ERT48L0E+LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+WG1sU3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2UoKSI+bmV3SW5zdGFuY2U8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPjxDT0RFPlhtbFN0cmluZzwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPlhtbFN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0luc3RhbmNlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+PENPREU+WG1sU3RyaW5nPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sI25ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPlhtbFN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sI25ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj5uZXdWYWx1ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj48Q09ERT5YbWxTdHJpbmc8L0NPREU+PC9BPiB2YWx1ZTwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj5YbWxTdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLkZpbGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+PENPREU+WG1sU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPlhtbFN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj48Q09ERT5YbWxTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+WG1sU3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj48Q09ERT5YbWxTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj5YbWxTdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPjxDT0RFPlhtbFN0cmluZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPlhtbFN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPjxDT0RFPlhtbFN0cmluZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+WG1sU3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+PENPREU+WG1sU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj5YbWxTdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlcikiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+PENPREU+WG1sU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+WG1sU3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPjxDT0RFPlhtbFN0cmluZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPlhtbFN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+PENPREU+WG1sU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+WG1sU3RyaW5nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj48Q09ERT5YbWxTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj5YbWxTdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj48Q09ERT5YbWxTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj5YbWxTdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj48Q09ERT5YbWxTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj5YbWxTdHJpbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCNwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPjxDT0RFPlhtbFN0cmluZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPlhtbFN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+PENPREU+WG1sU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX2phdmEubGFuZy5PYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNjbG9uZSgpIj5jbG9uZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZXF1YWxzKGphdmEubGFuZy5PYmplY3QpIj5lcXVhbHM8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2ZpbmFsaXplKCkiPmZpbmFsaXplPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNnZXRDbGFzcygpIj5nZXRDbGFzczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjaGFzaENvZGUoKSI+aGFzaENvZGU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeSgpIj5ub3RpZnk8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI25vdGlmeUFsbCgpIj5ub3RpZnlBbGw8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KCkiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZykiPndhaXQ8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQobG9uZywgaW50KSI+d2FpdDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj5YbWxTdHJpbmc8L0E+IDxCPm5ld0luc3RhbmNlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj48Q09ERT5YbWxTdHJpbmc8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj5YbWxTdHJpbmc8L0E+IDxCPm5ld0luc3RhbmNlPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+PENPREU+WG1sU3RyaW5nPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPlhtbFN0cmluZzwvQT4gPEI+bmV3VmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+PENPREU+WG1sU3RyaW5nPC9DT0RFPjwvQT4gdmFsdWUKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5sYW5nLlN0cmluZykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPlhtbFN0cmluZzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPjxDT0RFPlhtbFN0cmluZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuIEZvciBleGFtcGxlOiAiPGNvZGU+Jmx0O3htbC1mcmFnbWVudCZndDsgYXJiaXRyYXJ5IHN0cmluZyAmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj5YbWxTdHJpbmc8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+PENPREU+WG1sU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OyBhcmJpdHJhcnkgc3RyaW5nICZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPlhtbFN0cmluZzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPjxDT0RFPlhtbFN0cmluZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPlhtbFN0cmluZzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj48Q09ERT5YbWxTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+WG1sU3RyaW5nPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSkKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj48Q09ERT5YbWxTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPlhtbFN0cmluZzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPjxDT0RFPlhtbFN0cmluZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj5YbWxTdHJpbmc8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj48Q09ERT5YbWxTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj5YbWxTdHJpbmc8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+PENPREU+WG1sU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj5YbWxTdHJpbmc8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+PENPREU+WG1sU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPlhtbFN0cmluZzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+PENPREU+WG1sU3RyaW5nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPlhtbFN0cmluZzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSkKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj48Q09ERT5YbWxTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+WG1sU3RyaW5nPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj48Q09ERT5YbWxTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPlhtbFN0cmluZzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj48Q09ERT5YbWxTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+WG1sU3RyaW5nPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj48Q09ERT5YbWxTdHJpbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbFN0cmluZy5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0ZWViMTEuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOTMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1OCBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbFN0cmluZyAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxTdHJpbmcsWG1sU3RyaW5nIGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sU3RyaW5nIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sU3RyaW5nLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBYbWxTdHJpbmc8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvREQ+Ci08L0RMPgotPERMPgotPERUPjxCPkFsbCBLbm93biBTdWJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPlhtbEVOVElUWTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+WG1sSUQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPlhtbElEUkVGPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj5YbWxMYW5ndWFnZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj5YbWxOYW1lPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+WG1sTkNOYW1lPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPlhtbE5NVE9LRU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+WG1sVG9rZW48L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGludGVyZmFjZSA8Qj5YbWxTdHJpbmc8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9ETD4KLQotPFA+Ci1Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jc3RyaW5nIj54czpzdHJpbmc8L2E+IHR5cGUuCi0gPHA+Ci0gQSBiYXNpYyBzdHJpbmcgaW4gWE1MIHNjaGVtYSBpcyBub3Qgd2hpdGVzcGFjZSBub3JtYWxpemVkLiAgSWYgeW91Ci0gd2FudCB5b3VyIHN0cmluZyB0eXBlIHRvIGJlIGluc2Vuc2l0aXZlIHRvIHZhcmlhdGlvbnMgaW4gcnVucyBvZgotIHdoaXRlc3BhY2UsIGNvbnNpZGVyIHVzaW5nIAotIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jdG9rZW4iPnhzOnRva2VuPC9hPgotIChha2EgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Q09ERT5YbWxUb2tlbjwvQ09ERT48L0E+KSBpbnN0ZWFkLgotIFRvIGZvcmJpZCB3aGl0ZXNwYWNlIGFuZCBwZXJtaXQganVzdCBhbHBoYW51bWVyaWMgYW5kIG90aGVyCi0gY29tbW9uIGlkZW50aWZpZXIgY2hhcmFjdGVycyBjb25zaWRlcgotIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jTk1UT0tFTiI+eHM6Tk1UT0tFTjwvYT4KLSAoYWthIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTi5odG1sIj48Q09ERT5YbWxOTVRPS0VOPC9DT0RFPjwvQT4pIGluc3RlYWQuCi0gPHA+Ci0gQ29udmVydGlibGUgdG8gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+PENPREU+U3RyaW5nPC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibmVzdGVkX2NsYXNzX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TmVzdGVkIENsYXNzIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtjbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5GYWN0b3J5Lmh0bWwiPlhtbFN0cmluZy5GYWN0b3J5PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj48Q09ERT5YbWxTdHJpbmc8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPlhtbE9iamVjdC5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwjdHlwZSI+dHlwZTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+RmllbGRzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0VRVUFMIj5FUVVBTDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjR1JFQVRFUl9USEFOIj5HUkVBVEVSX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0xFU1NfVEhBTiI+TEVTU19USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNOT1RfRVFVQUwiPk5PVF9FUVVBTDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjZ2V0U3RyaW5nVmFsdWUoKSI+Z2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXQoamF2YS5sYW5nLlN0cmluZykiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj5zZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3N0cmluZ1ZhbHVlKCkiPnN0cmluZ1ZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjaGFuZ2VUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPmNoYW5nZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KSI+Y29tcGFyZVRvPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5jb21wYXJlVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvcHkoKSI+Y29weTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzSW1tdXRhYmxlKCkiPmlzSW1tdXRhYmxlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc05pbCgpIj5pc05pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2NoZW1hVHlwZSgpIj5zY2hlbWFUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0TmlsKCkiPnNldE5pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKCkiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVFcXVhbHMob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj52YWx1ZUVxdWFsczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVIYXNoQ29kZSgpIj52YWx1ZUhhc2hDb2RlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVG9rZW5Tb3VyY2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI2RvY3VtZW50UHJvcGVydGllcygpIj5kb2N1bWVudFByb3BlcnRpZXM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbW9uaXRvcigpIj5tb25pdG9yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0N1cnNvcigpIj5uZXdDdXJzb3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZSgpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbSgpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIoKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0oKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0pIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KCkiPnhtbFRleHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj54bWxUZXh0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0idHlwZSI+PCEtLSAtLT48L0E+PEgzPgotdHlwZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+dHlwZTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sU3RyaW5nLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLkZhY3RvcnkuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODhmNzVlLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuRmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjczICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDc6MDEgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxUaW1lLkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sVGltZS5GYWN0b3J5LFhtbFRpbWUuRmFjdG9yeSBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sVGltZS5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sVGltZS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sVGltZS5GYWN0b3J5PC9IMj4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5qYXZhLmxhbmcuT2JqZWN0PC9BPgotICB8Ci0gICstLTxCPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sVGltZS5GYWN0b3J5PC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+RW5jbG9zaW5nIGNsYXNzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPlhtbFRpbWU8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyA8Qj5YbWxUaW1lLkZhY3Rvcnk8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvREw+Ci0KLTxQPgotQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj48Q09ERT5YbWxUaW1lPC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+WG1sVGltZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj5uZXdJbnN0YW5jZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPjxDT0RFPlhtbFRpbWU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+WG1sVGltZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnN0YW5jZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj48Q09ERT5YbWxUaW1lPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPlhtbFRpbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPm5ld1ZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj48Q09ERT5YbWxUaW1lPC9DT0RFPjwvQT4gdmFsdWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPlhtbFRpbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7Zik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj48Q09ERT5YbWxUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj5YbWxUaW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+PENPREU+WG1sVGltZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+WG1sVGltZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj48Q09ERT5YbWxUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPlhtbFRpbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+PENPREU+WG1sVGltZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj5YbWxUaW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj48Q09ERT5YbWxUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+WG1sVGltZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+PENPREU+WG1sVGltZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPlhtbFRpbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj48Q09ERT5YbWxUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPlhtbFRpbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj48Q09ERT5YbWxUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPlhtbFRpbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+PENPREU+WG1sVGltZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj5YbWxUaW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPjxDT0RFPlhtbFRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+WG1sVGltZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+PENPREU+WG1sVGltZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj5YbWxUaW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj48Q09ERT5YbWxUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPlhtbFRpbWU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+PENPREU+WG1sVGltZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj5YbWxUaW1lPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPjxDT0RFPlhtbFRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj5YbWxUaW1lPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPjxDT0RFPlhtbFRpbWU8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+WG1sVGltZTwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+PENPREU+WG1sVGltZTwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+WG1sVGltZTwvQT4gPEI+bmV3VmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPjxDT0RFPlhtbFRpbWU8L0NPREU+PC9BPiB2YWx1ZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPlhtbFRpbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPjxDT0RFPlhtbFRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7MTI6MDA6MDAmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+WG1sVGltZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj48Q09ERT5YbWxUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzEyOjAwOjAwJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPlhtbFRpbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZikKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj48Q09ERT5YbWxUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPlhtbFRpbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPjxDT0RFPlhtbFRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPlhtbFRpbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KQotICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPjxDT0RFPlhtbFRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj5YbWxUaW1lPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPjxDT0RFPlhtbFRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPlhtbFRpbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj48Q09ERT5YbWxUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPlhtbFRpbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPjxDT0RFPlhtbFRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlcikiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj5YbWxUaW1lPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKQotICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPjxDT0RFPlhtbFRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPlhtbFRpbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj48Q09ERT5YbWxUaW1lPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj5YbWxUaW1lPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKQotICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+PENPREU+WG1sVGltZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+WG1sVGltZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+PENPREU+WG1sVGltZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPlhtbFRpbWU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+PENPREU+WG1sVGltZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+WG1sVGltZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPjxDT0RFPlhtbFRpbWU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuRmFjdG9yeS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sVGltZS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNjNGE1NS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0OTcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1OCBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbFRpbWUgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sVGltZSxYbWxUaW1lIGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sVGltZSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sVGltZS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBYbWxUaW1lPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlhtbFRpbWU8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9ETD4KLQotPFA+Ci1Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jdGltZSI+eHM6dGltZTwvYT4gdHlwZS4KLSBBIGdEYXkgc3BlY2lmaWVzIG9ubHkgYSBkYXktb2YtbW9udGguCi0gPHA+Ci0gQ29udmVydGlibGUgdG8gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+IG9yIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+PENPREU+R0RhdGU8L0NPREU+PC9BPi4KLTxQPgotCi08UD4KLTxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ2FsZW5kYXIuaHRtbCI+PENPREU+WG1sQ2FsZW5kYXI8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT48L0RMPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLkZhY3RvcnkuaHRtbCI+WG1sVGltZS5GYWN0b3J5PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCI+PENPREU+WG1sVGltZTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+WG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwjdHlwZSI+dHlwZTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+RmllbGRzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0VRVUFMIj5FUVVBTDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjR1JFQVRFUl9USEFOIj5HUkVBVEVSX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0xFU1NfVEhBTiI+TEVTU19USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNOT1RfRVFVQUwiPk5PVF9FUVVBTDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sI2NhbGVuZGFyVmFsdWUoKSI+Y2FsZW5kYXJWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwjZ2V0Q2FsZW5kYXJWYWx1ZSgpIj48Q09ERT5nZXRDYWxlbmRhclZhbHVlKCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwjZ0RhdGVWYWx1ZSgpIj5nRGF0ZVZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCNnZXRHRGF0ZVZhbHVlKCkiPjxDT0RFPmdldEdEYXRlVmFsdWUoKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCNnZXRDYWxlbmRhclZhbHVlKCkiPmdldENhbGVuZGFyVmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwjZ2V0R0RhdGVWYWx1ZSgpIj5nZXRHRGF0ZVZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZTwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwjc2V0KGphdmEudXRpbC5DYWxlbmRhcikiPnNldDwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+Jm5ic3A7Yyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwjc2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpIj48Q09ERT5zZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcik8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZVNwZWNpZmljYXRpb24pIj5zZXQ8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+Jm5ic3A7Z2QpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sI3NldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSkiPjxDT0RFPnNldEdEYXRlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZSk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCNzZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcikiPnNldENhbGVuZGFyVmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiZuYnNwO2MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCNzZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpIj5zZXRHRGF0ZVZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4mbmJzcDtnZCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1NldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPjxDT0RFPkdEYXRlU3BlY2lmaWNhdGlvbjwvQ09ERT48L0E+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI2dldFN0cmluZ1ZhbHVlKCkiPmdldFN0cmluZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0KGphdmEubGFuZy5TdHJpbmcpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzdHJpbmdWYWx1ZSgpIj5zdHJpbmdWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY2hhbmdlVHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj5jaGFuZ2VUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVG8oamF2YS5sYW5nLk9iamVjdCkiPmNvbXBhcmVUbzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+Y29tcGFyZVZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb3B5KCkiPmNvcHk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc0ltbXV0YWJsZSgpIj5pc0ltbXV0YWJsZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNOaWwoKSI+aXNOaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NjaGVtYVR5cGUoKSI+c2NoZW1hVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldE5pbCgpIj5zZXROaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZSgpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlRXF1YWxzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+dmFsdWVFcXVhbHM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlSGFzaENvZGUoKSI+dmFsdWVIYXNoQ29kZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFRva2VuU291cmNlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNkb2N1bWVudFByb3BlcnRpZXMoKSI+ZG9jdW1lbnRQcm9wZXJ0aWVzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI21vbml0b3IoKSI+bW9uaXRvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdDdXJzb3IoKSI+bmV3Q3Vyc29yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUoKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0oKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKCkiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKCkiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dCgpIj54bWxUZXh0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+eG1sVGV4dDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9InR5cGUiPjwhLS0gLS0+PC9BPjxIMz4KLXR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPnR5cGU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9ImdldENhbGVuZGFyVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0Q2FsZW5kYXJWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+Q2FsZW5kYXI8L0E+IDxCPmdldENhbGVuZGFyVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxDT0RFPkNhbGVuZGFyPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRDYWxlbmRhclZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRDYWxlbmRhclZhbHVlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiZuYnNwO2MpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImdldEdEYXRlVmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0R0RhdGVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+R0RhdGU8L0E+IDxCPmdldEdEYXRlVmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxDT0RFPkdEYXRlPC9DT0RFPjwvQT4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0R0RhdGVWYWx1ZShvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlKSI+PCEtLSAtLT48L0E+PEgzPgotc2V0R0RhdGVWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0R0RhdGVWYWx1ZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj5HRGF0ZTwvQT4mbmJzcDtnZCk8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj48Q09ERT5HRGF0ZVNwZWNpZmljYXRpb248L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJjYWxlbmRhclZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWNhbGVuZGFyVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPkNhbGVuZGFyPC9BPiA8Qj5jYWxlbmRhclZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCNnZXRDYWxlbmRhclZhbHVlKCkiPjxDT0RFPmdldENhbGVuZGFyVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Q09ERT5DYWxlbmRhcjwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldChqYXZhLnV0aWwuQ2FsZW5kYXIpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj5DYWxlbmRhcjwvQT4mbmJzcDtjKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwjc2V0Q2FsZW5kYXJWYWx1ZShqYXZhLnV0aWwuQ2FsZW5kYXIpIj48Q09ERT5zZXRDYWxlbmRhclZhbHVlKGphdmEudXRpbC5DYWxlbmRhcik8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvQ2FsZW5kYXIuaHRtbCI+PENPREU+Q2FsZW5kYXI8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJnRGF0ZVZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdEYXRlVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPkdEYXRlPC9BPiA8Qj5nRGF0ZVZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCNnZXRHRGF0ZVZhbHVlKCkiPjxDT0RFPmdldEdEYXRlVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZTwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldChvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlU3BlY2lmaWNhdGlvbikiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+Jm5ic3A7Z2QpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRpbWUuaHRtbCNzZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpIj48Q09ERT5zZXRHRGF0ZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuR0RhdGUpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj48Q09ERT5HRGF0ZVNwZWNpZmljYXRpb248L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sVGltZS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5GYWN0b3J5Lmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5GYWN0b3J5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzYzk1ZDQuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjczICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDc6MDEgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxUb2tlbi5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFRva2VuLkZhY3RvcnksWG1sVG9rZW4uRmFjdG9yeSBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sVG9rZW4uRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sVG9rZW4uRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUNsYXNzIFhtbFRva2VuLkZhY3Rvcnk8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxUb2tlbi5GYWN0b3J5PC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+RW5jbG9zaW5nIGNsYXNzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj5YbWxUb2tlbjwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIDxCPlhtbFRva2VuLkZhY3Rvcnk8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvREw+Ci0KLTxQPgotQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+PENPREU+WG1sVG9rZW48L0NPREU+PC9BPi4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+WG1sVG9rZW48L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPm5ld0luc3RhbmNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPjxDT0RFPlhtbFRva2VuPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj5YbWxUb2tlbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5zdGFuY2U8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPjxDT0RFPlhtbFRva2VuPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPlhtbFRva2VuPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+bmV3VmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Q09ERT5YbWxUb2tlbjwvQ09ERT48L0E+IHZhbHVlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+WG1sVG9rZW48L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPjxDT0RFPlhtbFRva2VuPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+WG1sVG9rZW48L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPjxDT0RFPlhtbFRva2VuPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+WG1sVG9rZW48L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Q09ERT5YbWxUb2tlbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+WG1sVG9rZW48L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Q09ERT5YbWxUb2tlbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+WG1sVG9rZW48L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+PENPREU+WG1sVG9rZW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+WG1sVG9rZW48L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+PENPREU+WG1sVG9rZW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+WG1sVG9rZW48L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPjxDT0RFPlhtbFRva2VuPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj5YbWxUb2tlbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+PENPREU+WG1sVG9rZW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPlhtbFRva2VuPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+PENPREU+WG1sVG9rZW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPlhtbFRva2VuPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+PENPREU+WG1sVG9rZW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPlhtbFRva2VuPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPjxDT0RFPlhtbFRva2VuPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj5YbWxUb2tlbjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Q09ERT5YbWxUb2tlbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+WG1sVG9rZW48L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Q09ERT5YbWxUb2tlbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+WG1sVG9rZW48L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Q09ERT5YbWxUb2tlbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjY2xvbmUoKSI+Y2xvbmU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZ2V0Q2xhc3MoKSI+Z2V0Q2xhc3M8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj5YbWxUb2tlbjwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+PENPREU+WG1sVG9rZW48L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPlhtbFRva2VuPC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+PENPREU+WG1sVG9rZW48L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj5YbWxUb2tlbjwvQT4gPEI+bmV3VmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Q09ERT5YbWxUb2tlbjwvQ09ERT48L0E+IHZhbHVlCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPlhtbFRva2VuPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPjxDT0RFPlhtbFRva2VuPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0O3N0cmluZyB0byBjb2xsYXBzZSZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+WG1sVG9rZW48L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+PENPREU+WG1sVG9rZW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7c3RyaW5nIHRvIGNvbGxhcHNlJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj5YbWxUb2tlbjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPjxDT0RFPlhtbFRva2VuPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj5YbWxUb2tlbjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPjxDT0RFPlhtbFRva2VuPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+WG1sVG9rZW48L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPjxDT0RFPlhtbFRva2VuPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPlhtbFRva2VuPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Q09ERT5YbWxUb2tlbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPlhtbFRva2VuPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+PENPREU+WG1sVG9rZW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPlhtbFRva2VuPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+PENPREU+WG1sVG9rZW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlcikiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+WG1sVG9rZW48L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+PENPREU+WG1sVG9rZW48L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj5YbWxUb2tlbjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Q09ERT5YbWxUb2tlbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPlhtbFRva2VuPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Q09ERT5YbWxUb2tlbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPlhtbFRva2VuPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Q09ERT5YbWxUb2tlbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj5YbWxUb2tlbjwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Q09ERT5YbWxUb2tlbjwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPlhtbFRva2VuPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPjxDT0RFPlhtbFRva2VuPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sVG9rZW4uRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJjNjNhOS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzE1ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTggUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxUb2tlbiAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxUb2tlbixYbWxUb2tlbiBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbFRva2VuIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sVG9rZW4uaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFhtbFRva2VuPC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj5YbWxTdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvREQ+Ci08L0RMPgotPERMPgotPERUPjxCPkFsbCBLbm93biBTdWJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPlhtbEVOVElUWTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+WG1sSUQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGLmh0bWwiPlhtbElEUkVGPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj5YbWxMYW5ndWFnZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj5YbWxOYW1lPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+WG1sTkNOYW1lPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPlhtbE5NVE9LRU48L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGludGVyZmFjZSA8Qj5YbWxUb2tlbjwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZzwvQT48L0RMPgotCi08UD4KLUNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyN0b2tlbiI+eHM6dG9rZW48L2E+IHR5cGUuCi0gT25lIG9mIHRoZSBkZXJpdmVkIHR5cGVzIGJhc2VkIG9uIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jc3RyaW5nIj54czpzdHJpbmc8L2E+LgotIDxwPgotIEEgdG9rZW4gaXMgWE1MJ3MgYmVzdCByZXByZXNlbnRhdGlvbiBmb3IgYSAid2hpdGVzcGFjZSBpbnNlbnNpdGl2ZSBzdHJpbmcuIgotIEFsbCBjYXJyaWFnZSByZXR1cm5zLCBsaW5lZmVlZHMsIGFuZCB0YWJzIGFyZSBjb252ZXJ0ZWQgdG8gb3JkaW5hcnkgc3BhY2UKLSBjaGFyYWN0ZXJzIChhcyB3aXRoIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jbm9ybWFsaXplZFN0cmluZyI+eHM6bm9ybWFsaXplZFN0cmluZzwvYT4pLAotIGFuZCBmdXJ0aGVybW9yZSwgYWxsIGNvbnRpZ3VvdXMgcnVucyBvZiBzcGFjZSBhcmUgY29sbGFwc2VkIHRvIHNpbmdsZSBzcGFjZXMsCi0gYW5kIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBhcmUgdHJpbW1lZC4KLSA8cD4KLSBJZiB5b3Ugd2FudCA8Y29kZT4iJm5ic3A7Jm5ic3A7aGlnaCZuYnNwOyZuYnNwO3ByaW9yaXR5Jm5ic3A7Jm5ic3A7IjwvY29kZT4KLSB0byBiZSBlcXVpdmFsZW50IHRvIDxjb2RlPiJoaWdoIHByaW9yaXR5IjwvY29kZT4sIHlvdSBzaG91bGQgY29uc2lkZXIKLSB1c2luZyB4czp0b2tlbiBvciBhIHN1YnR5cGUgb2YgeHM6dG9rZW4uCi0gPHA+Ci0gV2hlbiB0aGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc3RyaW5nVmFsdWUoKSI+PENPREU+WG1sQW55U2ltcGxlVHlwZS5zdHJpbmdWYWx1ZSgpPC9DT0RFPjwvQT4gaXMgb2J0YWluZWQgZnJvbSBhbiBYbWxUb2tlbiwgdGhlIG5vcm1hbGl6ZWQsCi0gdHJpbW1lZCwgd2hpdGVzcGFjZSBjb2xsYXBzZWQgdmFsdWUgaXMgcmV0dXJuZWQuCi0gPHA+Ci0gQ29udmVydGlibGUgdG8gPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+PENPREU+U3RyaW5nPC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibmVzdGVkX2NsYXNzX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TmVzdGVkIENsYXNzIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtjbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCI+WG1sVG9rZW4uRmFjdG9yeTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Q09ERT5YbWxUb2tlbjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sTm9ybWFsaXplZFN0cmluZyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFN0cmluZyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTdHJpbmcuaHRtbCI+WG1sU3RyaW5nPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sU3RyaW5nLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+WG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sI3R5cGUiPnR5cGU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9ImZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPkZpZWxkcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNFUVVBTCI+RVFVQUw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0dSRUFURVJfVEhBTiI+R1JFQVRFUl9USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNMRVNTX1RIQU4iPkxFU1NfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTk9UX0VRVUFMIj5OT1RfRVFVQUw8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI2dldFN0cmluZ1ZhbHVlKCkiPmdldFN0cmluZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjc2V0KGphdmEubGFuZy5TdHJpbmcpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXRTdHJpbmdWYWx1ZShqYXZhLmxhbmcuU3RyaW5nKSI+c2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzdHJpbmdWYWx1ZSgpIj5zdHJpbmdWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY2hhbmdlVHlwZShvcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGUpIj5jaGFuZ2VUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVG8oamF2YS5sYW5nLk9iamVjdCkiPmNvbXBhcmVUbzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjY29tcGFyZVZhbHVlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+Y29tcGFyZVZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb3B5KCkiPmNvcHk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNleGVjUXVlcnkoamF2YS5sYW5nLlN0cmluZywgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+ZXhlY1F1ZXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc0ltbXV0YWJsZSgpIj5pc0ltbXV0YWJsZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjaXNOaWwoKSI+aXNOaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NjaGVtYVR5cGUoKSI+c2NoZW1hVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+c2VsZWN0UGF0aDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZXQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldE5pbCgpIj5zZXROaWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3RvU3RyaW5nKCkiPnRvU3RyaW5nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZSgpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsaWRhdGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+dmFsaWRhdGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlRXF1YWxzKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0KSI+dmFsdWVFcXVhbHM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbHVlSGFzaENvZGUoKSI+dmFsdWVIYXNoQ29kZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFRva2VuU291cmNlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNkb2N1bWVudFByb3BlcnRpZXMoKSI+ZG9jdW1lbnRQcm9wZXJ0aWVzPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI21vbml0b3IoKSI+bW9uaXRvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdDdXJzb3IoKSI+bmV3Q3Vyc29yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUoKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0RvbU5vZGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0oKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3SW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3UmVhZGVyKCkiPm5ld1JlYWRlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKCkiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1hNTElucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1hNTElucHV0U3RyZWFtPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKGphdmEuaW8uT3V0cHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dCgpIj54bWxUZXh0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+eG1sVGV4dDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+RmllbGQgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9InR5cGUiPjwhLS0gLS0+PC9BPjxIMz4KLXR5cGU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgZmluYWwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+IDxCPnR5cGU8L0I+PC9QUkU+Ci08REw+Ci08REQ+VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLgotPFA+Ci08REw+Ci08L0RMPgotPC9ETD4KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbFRva2VuLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFhM2M4Yi4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODIwICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTggUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxUb2tlblNvdXJjZSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxUb2tlblNvdXJjZSxYbWxUb2tlblNvdXJjZSBpbnRlcmZhY2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbFRva2VuU291cmNlIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxUb2tlblNvdXJjZS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBYbWxUb2tlblNvdXJjZTwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIEtub3duIFN1YmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+WG1sQW55VVJJPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+WG1sQmFzZTY0QmluYXJ5PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPlhtbEJvb2xlYW48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+WG1sQnl0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj5YbWxEYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj5YbWxEYXRlVGltZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+WG1sRG91YmxlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj5YbWxEdXJhdGlvbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+WG1sRU5USVRJRVM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj5YbWxFTlRJVFk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0Lmh0bWwiPlhtbEZsb2F0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPlhtbEdEYXk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj5YbWxHTW9udGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5odG1sIj5YbWxHTW9udGhEYXk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPlhtbEdZZWFyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPlhtbEdZZWFyTW9udGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5odG1sIj5YbWxIZXhCaW5hcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbElELmh0bWwiPlhtbElEPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj5YbWxJRFJFRjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPlhtbElEUkVGUzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPlhtbEludDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj5YbWxMYW5ndWFnZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj5YbWxMb25nPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOYW1lLmh0bWwiPlhtbE5hbWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj5YbWxOQ05hbWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOZWdhdGl2ZUludGVnZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+WG1sTk1UT0tFTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+WG1sTk1UT0tFTlM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuaHRtbCI+WG1sTm9ybWFsaXplZFN0cmluZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+WG1sTk9UQVRJT048L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj5YbWxQb3NpdGl2ZUludGVnZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPlhtbFFOYW1lPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5odG1sIj5YbWxTaG9ydDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPlhtbFN0cmluZzwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj5YbWxUaW1lPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj5YbWxUb2tlbjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPlhtbFVuc2lnbmVkQnl0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj5YbWxVbnNpZ25lZExvbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+WG1sVW5zaWduZWRTaG9ydDwvQT48L0REPgotPC9ETD4KLTxETD4KLTxEVD48Qj5BbGwgS25vd24gSW1wbGVtZW50aW5nIENsYXNzZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBpbnRlcmZhY2UgPEI+WG1sVG9rZW5Tb3VyY2U8L0I+PC9ETD4KLQotPFA+Ci1SZXByZXNlbnRzIGEgaG9sZGVyIG9mIFhNTCB0aGF0IGNhbiByZXR1cm4gYW4gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+PENPREU+WG1sQ3Vyc29yPC9DT0RFPjwvQT4KLSBvciBjb3B5IGl0c2VsZiB0byB2YXJpb3VzIG1lZGlhIHN1Y2ggYXMKLSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9Xcml0ZXIuaHRtbCI+PENPREU+V3JpdGVyczwvQ09ERT48L0E+IG9yIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+PENPREU+RmlsZXM8L0NPREU+PC9BPi4KLSBCb3RoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPjxDT0RFPlhtbE9iamVjdDwvQ09ERT48L0E+Ci0gKGFuZCB0aHVzIGFsbCBYTUwgQmVhbnMpIGFuZCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj48Q09ERT5YbWxDdXJzb3I8L0NPREU+PC9BPiBhcmUKLSBYbWxUb2tlblNvdXJjZSBpbXBsZW1lbnRhdGlvbnMuCi08UD4KLQotPFA+Ci08REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj48Q09ERT5YbWxPYmplY3Q8L0NPREU+PC9BPiwgCi08QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj48Q09ERT5YbWxDdXJzb3I8L0NPREU+PC9BPjwvREw+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5odG1sIj5YbWxEb2N1bWVudFByb3BlcnRpZXM8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNkb2N1bWVudFByb3BlcnRpZXMoKSI+ZG9jdW1lbnRQcm9wZXJ0aWVzPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGUgWG1sRG9jdW1lbnRQcm9wZXJ0aWVzIG9iamVjdCBmb3IgdGhlIGRvY3VtZW50IHRoaXMgdG9rZW4KLSBzb3VyY2UgaXMgYXNzb2NpYXRlZCB3aXRoLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNtb25pdG9yKCkiPm1vbml0b3I8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIHRoZSBzeW5jaHJvbml6YXRpb24gb2JqZWN0IGZvciB0aGUgZG9jdW1lbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0N1cnNvcigpIj5uZXdDdXJzb3I8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IFhNTCBjdXJzb3IuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdEb21Ob2RlKCkiPm5ld0RvbU5vZGU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgVzNDIERPTSBOb2RlIGNvbnRhaW5pbmcgdGhlIFhNTAotIHJlcHJlc2VudGVkIGJ5IHRoaXMgc291cmNlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdEb21Ob2RlPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0p1c3QgbGlrZSBuZXdEb21Ob2RlKCkgYnV0IHdpdGggb3B0aW9ucy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbSgpIj5uZXdJbnB1dFN0cmVhbTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSBuZXcgc3RyZWFtIGNvbnRhaW5pbmcgc3RhbmRhcmQgWE1MIHRleHQsIGVuY29kZWQKLSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGVuY29kaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0lucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld0lucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0p1c3QgbGlrZSBuZXdJbnB1dFN0cmVhbShTdHJpbmcgZW5jb2RpbmcpIGJ1dCB3aXRoIG9wdGlvbnMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIoKSI+bmV3UmVhZGVyPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIG5ldyBjaGFyYWN0ZXIgcmVhZGVyIGNvbnRhaW5pbmcgWE1MIHRleHQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3UmVhZGVyPC9BPjwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0p1c3QgbGlrZSBuZXdSZWFkZXIoKSBidXQgd2l0aCBvcHRpb25zLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0oKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgbmV3IFhtbElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7SnVzdCBsaWtlIG5ld1hNTElucHV0U3RyZWFtKCkgYnV0IHdpdGggYW55IG9mIGEgbnVtYmVyIG9mIG9wdGlvbnMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcikiPnNhdmU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3htbC9zYXgvQ29udGVudEhhbmRsZXIuaHRtbCI+Q29udGVudEhhbmRsZXI8L0E+Jm5ic3A7Y2gsCi0gICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcveG1sL3NheC9leHQvTGV4aWNhbEhhbmRsZXIuaHRtbCI+TGV4aWNhbEhhbmRsZXI8L0E+Jm5ic3A7bGgpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtXcml0ZXMgdGhlIFhNTCByZXByZXNlbnRlZCBieSB0aGlzIHNvdXJjZSB0byB0aGUgZ2l2ZW4gU0FYIGNvbnRlbnQgYW5kCi0gbGV4aWNhbCBoYW5kbGVycy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy94bWwvc2F4L0NvbnRlbnRIYW5kbGVyLmh0bWwiPkNvbnRlbnRIYW5kbGVyPC9BPiZuYnNwO2NoLAotICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3htbC9zYXgvZXh0L0xleGljYWxIYW5kbGVyLmh0bWwiPkxleGljYWxIYW5kbGVyPC9BPiZuYnNwO2xoLAotICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7V3JpdGVzIHRoZSBYTUwgcmVwcmVzZW50ZWQgYnkgdGhpcyBzb3VyY2UgdG8gdGhlIGdpdmVuIFNBWCBjb250ZW50IGFuZAotIGxleGljYWwgaGFuZGxlcnMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlKSI+c2F2ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmaWxlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7V3JpdGVzIHRoZSBYTUwgcmVwcmVzZW50ZWQgYnkgdGhpcyBzb3VyY2UgdG8gdGhlIGdpdmVuIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2ZpbGUsCi0gICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtXcml0ZXMgdGhlIFhNTCByZXByZXNlbnRlZCBieSB0aGlzIHNvdXJjZSB0byB0aGUgZ2l2ZW4gRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSkiPnNhdmU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9PdXRwdXRTdHJlYW0uaHRtbCI+T3V0cHV0U3RyZWFtPC9BPiZuYnNwO29zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7V3JpdGVzIHRoZSBYTUwgcmVwcmVzZW50ZWQgYnkgdGhpcyBzb3VyY2UgdG8gdGhlIGdpdmVuIG91dHB1dCBzdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9PdXRwdXRTdHJlYW0uaHRtbCI+T3V0cHV0U3RyZWFtPC9BPiZuYnNwO29zLAotICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7V3JpdGVzIHRoZSBYTUwgcmVwcmVzZW50ZWQgYnkgdGhpcyBzb3VyY2UgdG8gdGhlIGdpdmVuIG91dHB1dCBzdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5Xcml0ZXIpIj5zYXZlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vV3JpdGVyLmh0bWwiPldyaXRlcjwvQT4mbmJzcDt3KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7V3JpdGVzIHRoZSBYTUwgcmVwcmVzZW50ZWQgYnkgdGhpcyBzb3VyY2UgdG8gdGhlIGdpdmVuIHdyaXRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1dyaXRlci5odG1sIj5Xcml0ZXI8L0E+Jm5ic3A7dywKLSAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1dyaXRlcyB0aGUgWE1MIHJlcHJlc2VudGVkIGJ5IHRoaXMgc291cmNlIHRvIHRoZSBnaXZlbiB3cml0ZXIuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQoKSI+eG1sVGV4dDwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgc3RhbmRhcmQgWE1MIHRleHQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3htbFRleHQob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+eG1sVGV4dDwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtKdXN0IGxpa2UgeG1sVGV4dCgpIGJ1dCB3aXRoIG9wdGlvbnMuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08UD4KLQotPCEtLSA9PT09PT09PT09PT0gRklFTEQgREVUQUlMID09PT09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09IENPTlNUUlVDVE9SIERFVEFJTCA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09PSBNRVRIT0QgREVUQUlMID09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZF9kZXRhaWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIERldGFpbDwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08QSBOQU1FPSJtb25pdG9yKCkiPjwhLS0gLS0+PC9BPjxIMz4KLW1vbml0b3I8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+IDxCPm1vbml0b3I8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoZSBzeW5jaHJvbml6YXRpb24gb2JqZWN0IGZvciB0aGUgZG9jdW1lbnQuICBJZiBjb25jdXJyZW50Ci0gbXVsdGl0aHJlYWRlZCBhY2Nlc3MgdG8gYSBkb2N1bWVudCBpcyByZXF1aXJlZCwgdGhlIGFjY2VzcyBzaG91bGQgc2hvdWxkCi0gYmUgcHJvdGVjdGVkIGJ5IHN5bmNocm9uaXppbmcgb24gdGhpcyBtb25pdG9yKCkgb2JqZWN0LiAgVGhlcmUgaXMgb25lCi0gbW9uaXRvciBwZXIgWE1MIGRvY3VtZW50IHRyZWUuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImRvY3VtZW50UHJvcGVydGllcygpIj48IS0tIC0tPjwvQT48SDM+Ci1kb2N1bWVudFByb3BlcnRpZXM8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5odG1sIj5YbWxEb2N1bWVudFByb3BlcnRpZXM8L0E+IDxCPmRvY3VtZW50UHJvcGVydGllczwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhlIFhtbERvY3VtZW50UHJvcGVydGllcyBvYmplY3QgZm9yIHRoZSBkb2N1bWVudCB0aGlzIHRva2VuCi0gc291cmNlIGlzIGFzc29jaWF0ZWQgd2l0aC4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3Q3Vyc29yKCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0N1cnNvcjwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPlhtbEN1cnNvcjwvQT4gPEI+bmV3Q3Vyc29yPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIG5ldyBYTUwgY3Vyc29yLgotCi0gQSBjdXJzb3IgcHJvdmlkZXMgcmFuZG9tIGFjY2VzcyB0byBhbGwgdGhlIHRva2VucyBpbiB0aGUgWE1MCi0gZGF0YSwgcGx1cyB0aGUgYWJpbGl0eSB0byBleHRyYWN0IHN0cm9uZ2x5LXR5cGVkIFhtbE9iamVjdHMKLSBmb3IgdGhlIGRhdGEuIElmIHRoZSBkYXRhIGlzIG5vdCByZWFkLW9ubHksIHRoZSBYTUwgY3Vyc29yCi0gYWxzbyBhbGxvd3MgbW9kaWZpY2F0aW9ucyB0byB0aGUgZGF0YS4KLQotIFVzaW5nIGEgY3Vyc29yIGZvciB0aGUgZmlyc3QgdGltZSB0eXBpY2FsbHkgZm9yY2VzIHRoZSBYTUwKLSBkb2N1bWVudCBpbnRvIG1lbW9yeS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3WE1MSW5wdXRTdHJlYW0oKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3WE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdYTUxJbnB1dFN0cmVhbTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBuZXcgWG1sSW5wdXRTdHJlYW0uCi0KLSBUaGUgc3RyZWFtIHN0YXJ0cyBhdCB0aGUgY3VycmVudCBiZWdpbi10YWcgb3IgYmVnaW4tZG9jdW1lbnQKLSBwb3NpdGlvbiBhbmQgZW5kcyBhdCB0aGUgbWF0Y2hpbmcgZW5kLXRhZyBvciBlbmQtZG9jdW1lbnQuCi0KLSBUaGlzIGlzIGEgZmFpbC1mYXN0IHN0cmVhbSwgc28gaWYgdGhlIHVuZGVybHlpbmcgZGF0YSBpcyBjaGFuZ2VkCi0gd2hpbGUgdGhlIHN0cmVhbSBpcyBiZWluZyByZWFkLCB0aGUgc3RyZWFtIHRocm93cyBhCi0gQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbi4KLQotIFRocm93cyBhbiBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgdGhlIFhtbFRva2VuU291cmNlIGlzIG5vdAotIHBvc2l0aW9uZWQgYXQgYmVnaW4tdGFnIG9yIGJlZ2luLWRvY3VtZW50IChlLmcuLCBpZiBpdCBpcyBhdAotIGFuIGF0dHJpYnV0ZSkuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InhtbFRleHQoKSI+PCEtLSAtLT48L0E+PEgzPgoteG1sVGV4dDwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+eG1sVGV4dDwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgc3RhbmRhcmQgWE1MIHRleHQuCi0KLSBUaGUgdGV4dCByZXR1cm5lZCByZXByZXNlbnRzIHRoZSBkb2N1bWVudCBjb250ZW50cyBzdGFydGluZyBhdAotIHRoZSBjdXJyZW50IGJlZ2luLXRhZyBvciBiZWdpbi1kb2N1bWVudCBhbmQgZW5kaW5nIGF0IHRoZSBtYXRjaGluZwotIGVuZC10YWcgb3IgZW5kLWRvY3VtZW50LiBUaGlzIGlzIHNhbWUgY29udGVudCBhcyBuZXdSZWFkZXIsIGJ1dAotIGl0IGlzIHJldHVybmVkIGFzIGEgc2luZ2xlIHN0cmluZy4KLQotIFRocm93cyBhbiBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgdGhlIFhtbFRva2VuU291cmNlIGlzIG5vdAotIHBvc2l0aW9uZWQgYXQgYmVnaW4tdGFnIG9yIGJlZ2luLWRvY3VtZW50IChlLmcuLCBpZiBpdCBpcyBhdAotIGFuIGF0dHJpYnV0ZSkuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld0lucHV0U3RyZWFtKCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0lucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+IDxCPm5ld0lucHV0U3RyZWFtPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIG5ldyBzdHJlYW0gY29udGFpbmluZyBzdGFuZGFyZCBYTUwgdGV4dCwgZW5jb2RlZAotIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZW5jb2RpbmcuCi0KLSBUaGUgYnl0ZSBzdHJlYW0gY29udGFpbnMgY29udGVudHMgc3RhcnRpbmcgYXQgdGhlIGN1cnJlbnQKLSBiZWdpbi10YWcgb3IgYmVnaW4tZG9jdW1lbnQgYW5kIGVuZGluZyBhdCB0aGUgbWF0Y2hpbmcKLSBlbmQtdGFnIG9yIGVuZC1kb2N1bWVudC4gIFRoZSBzcGVjaWZpZWQgZW5jb2RpbmcgaXMgdXNlZAotIGFuZCBhbHNvIGVtaXR0ZWQgaW4gYSBQSSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJlYW0uCi0KLSBUaGlzIGlzIGEgZmFpbC1mYXN0IHN0cmVhbSwgc28gaWYgdGhlIHVuZGVybHlpbmcgZGF0YSBpcyBjaGFuZ2VkCi0gd2hpbGUgdGhlIHN0cmVhbSBpcyBiZWluZyByZWFkLCB0aGUgc3RyZWFtIHRocm93cyBhCi0gQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbi4KLQotIFRocm93cyBhbiBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgdGhlIFhtbFRva2VuU291cmNlIGlzIG5vdAotIHBvc2l0aW9uZWQgYXQgYmVnaW4tdGFnIG9yIGJlZ2luLWRvY3VtZW50IChlLmcuLCBpZiBpdCBpcyBhdAotIGFuIGF0dHJpYnV0ZSkuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1JlYWRlcigpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdSZWFkZXI8L0gzPgotPFBSRT4KLXB1YmxpYyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiA8Qj5uZXdSZWFkZXI8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgbmV3IGNoYXJhY3RlciByZWFkZXIgY29udGFpbmluZyBYTUwgdGV4dC4KLQotIFRoZSBjb250ZW50cyBvZiB0aGUgcmVhZGVyIHJlcHJlc2VudHMgdGhlIGRvY3VtZW50IGNvbnRlbnRzCi0gc3RhcnRpbmcgYXQgdGhlIGN1cnJlbnQgYmVnaW4tdGFnIG9yIGJlZ2luLWRvY3VtZW50IGFuZCBlbmRpbmcgYXQKLSB0aGUgbWF0Y2hpbmcgZW5kLXRhZyBvciBlbmQtZG9jdW1lbnQuICBObyBlbmNvZGluZyBhbm5vdGF0aW9uCi0gd2lsbCBiZSBtYWRlIGluIHRoZSB0ZXh0IGl0c2VsZi4KLQotIFRoaXMgaXMgYSBmYWlsLWZhc3QgcmVhZGVyLCBzbyBpZiB0aGUgdW5kZXJseWluZyBkYXRhIGlzIGNoYW5nZWQKLSB3aGlsZSB0aGUgcmVhZGVyIGlzIGJlaW5nIHJlYWQsIHRoZSByZWFkZXIgdGhyb3dzIGEKLSBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uLgotCi0gVGhyb3dzIGFuIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGUgWG1sVG9rZW5Tb3VyY2UgaXMgbm90Ci0gcG9zaXRpb25lZCBhdCBiZWdpbi10YWcgb3IgYmVnaW4tZG9jdW1lbnQgKGUuZy4sIGlmIGl0IGlzIGF0Ci0gYW4gYXR0cmlidXRlKS4KLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3RG9tTm9kZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdEb21Ob2RlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4gPEI+bmV3RG9tTm9kZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSBXM0MgRE9NIE5vZGUgY29udGFpbmluZyB0aGUgWE1MCi0gcmVwcmVzZW50ZWQgYnkgdGhpcyBzb3VyY2UuICBUaGlzIGlzIGEgY29weSBvZiB0aGUgWE1MLCBpdCBpcwotIG5vdCBhIGxpdmUgd2l0aCB0aGUgdW5kZXJseWluZyBzdG9yZSBvZiB0aGlzIHRva2VuIHNvdXJjZS4KLSBJZiB0aGlzIGlzIHRoZSBkb2N1bWVudCBub2RlLCB0aGVuIGEgRG9jdW1lbnQgaXMgcmV0dXJuZWQsIGVsc2UKLSBhIERvY3VtZW50RnJhZ21lbnQgaXMgcmV0dXJuZWQuCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNhdmUob3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIsIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcikiPjwhLS0gLS0+PC9BPjxIMz4KLXNhdmU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNhdmU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcveG1sL3NheC9Db250ZW50SGFuZGxlci5odG1sIj5Db250ZW50SGFuZGxlcjwvQT4mbmJzcDtjaCwKLSAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy94bWwvc2F4L2V4dC9MZXhpY2FsSGFuZGxlci5odG1sIj5MZXhpY2FsSGFuZGxlcjwvQT4mbmJzcDtsaCkKLSAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy94bWwvc2F4L1NBWEV4Y2VwdGlvbi5odG1sIj5TQVhFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+V3JpdGVzIHRoZSBYTUwgcmVwcmVzZW50ZWQgYnkgdGhpcyBzb3VyY2UgdG8gdGhlIGdpdmVuIFNBWCBjb250ZW50IGFuZAotIGxleGljYWwgaGFuZGxlcnMuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3htbC9zYXgvU0FYRXhjZXB0aW9uLmh0bWwiPlNBWEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzYXZlKGphdmEuaW8uRmlsZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXNhdmU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNhdmU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmaWxlKQotICAgICAgICAgIHRocm93cyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5Xcml0ZXMgdGhlIFhNTCByZXByZXNlbnRlZCBieSB0aGlzIHNvdXJjZSB0byB0aGUgZ2l2ZW4gRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1zYXZlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zYXZlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9PdXRwdXRTdHJlYW0uaHRtbCI+T3V0cHV0U3RyZWFtPC9BPiZuYnNwO29zKQotICAgICAgICAgIHRocm93cyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5Xcml0ZXMgdGhlIFhNTCByZXByZXNlbnRlZCBieSB0aGlzIHNvdXJjZSB0byB0aGUgZ2l2ZW4gb3V0cHV0IHN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNhdmUoamF2YS5pby5Xcml0ZXIpIj48IS0tIC0tPjwvQT48SDM+Ci1zYXZlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zYXZlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9Xcml0ZXIuaHRtbCI+V3JpdGVyPC9BPiZuYnNwO3cpCi0gICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPldyaXRlcyB0aGUgWE1MIHJlcHJlc2VudGVkIGJ5IHRoaXMgc291cmNlIHRvIHRoZSBnaXZlbiB3cml0ZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdYTUxJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvUFJFPgotPERMPgotPEREPjxwPkp1c3QgbGlrZSBuZXdYTUxJbnB1dFN0cmVhbSgpIGJ1dCB3aXRoIGFueSBvZiBhIG51bWJlciBvZiBvcHRpb25zLiBVc2UgdGhlIAotIDxlbT5vcHRpb25zPC9lbT4gcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlIGZvbGxvd2luZzo8L3A+Ci0gCi0gPHRhYmxlPgotIDx0cj48dGg+VG8gc3BlY2lmeSB0aGlzPC90aD48dGg+VXNlIHRoaXMgbWV0aG9kPC90aD48L3RyPgotIDx0cj4KLSAgPHRkPlRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgdG8gdXNlIHdoZW4gY29udmVydGluZyB0aGUgY2hhcmFjdGVyCi0gIGRhdGEgaW4gdGhlIFhNTCB0byBieXRlc3MuPC90ZD4KLSAgPHRkPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldENoYXJhY3RlckVuY29kaW5nKGphdmEubGFuZy5TdHJpbmcpIj48Q09ERT5YbWxPcHRpb25zLnNldENoYXJhY3RlckVuY29kaW5nKGphdmEubGFuZy5TdHJpbmcpPC9DT0RFPjwvQT48L3RkPgotIDwvdHI+Ci0gPHRyPgotICA8dGQ+UHJlZml4LXRvLW5hbWVzcGFjZSBtYXBwaW5ncyB0aGF0IHNob3VsZCBiZSBhc3N1bWVkCi0gIHdoZW4gc2F2aW5nIHRoaXMgWE1MLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRoZSByZXN1bHRpbmcKLSAgWE1MIHdpbGwgYmUgcGFydCBvZiBhIGxhcmdlciBYTUwgZG9jdW1lbnQsIGVuc3VyaW5nIHRoYXQgdGhpcyAKLSAgaW5uZXIgZG9jdW1lbnQgd2lsbCB0YWtlIGFkdmFudGFnZSBvZiBuYW1lc3BhY2VzIGRlZmluZWQgaW4gCi0gIHRoZSBvdXRlciBkb2N1bWVudC48L3RkPgotICA8dGQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0U2F2ZUltcGxpY2l0TmFtZXNwYWNlcyhqYXZhLnV0aWwuTWFwKSI+PENPREU+WG1sT3B0aW9ucy5zZXRTYXZlSW1wbGljaXROYW1lc3BhY2VzKGphdmEudXRpbC5NYXApPC9DT0RFPjwvQT48L3RkPgotIDwvdHI+Ci0gPHRyPgotICA8dGQ+U3VnZ2VzdGVkIG5hbWVzcGFjZSBwcmVmaXhlcyB0byB1c2Ugd2hlbiBzYXZpbmcuIFVzZWQgb25seQotICB3aGVuIGEgbmFtZXNwYWNlIGF0dHJpYnV0ZSBuZWVkcyB0byBiZSBzeW50aGVzaXplZC48L3RkPgotICA8dGQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0U2F2ZVN1Z2dlc3RlZFByZWZpeGVzKGphdmEudXRpbC5NYXApIj48Q09ERT5YbWxPcHRpb25zLnNldFNhdmVTdWdnZXN0ZWRQcmVmaXhlcyhqYXZhLnV0aWwuTWFwKTwvQ09ERT48L0E+PC90ZD4KLSA8L3RyPgotIDx0cj4KLSAgPHRkPlRoYXQgbmFtZXNwYWNlIGF0dHJpYnV0ZXMgc2hvdWxkIG9jY3VyIGZpcnN0IGluIGVsZW1lbnRzIHdoZW4KLSB0aGUgWE1MIGlzIHNhdmVkLiBCeSBkZWZhdWx0LCB0aGV5IG9jY3VyIGxhc3QuPC90ZD4KLSAgPHRkPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldFNhdmVOYW1lc3BhY2VzRmlyc3QoKSI+PENPREU+WG1sT3B0aW9ucy5zZXRTYXZlTmFtZXNwYWNlc0ZpcnN0KCk8L0NPREU+PC9BPjwvdGQ+Ci0gPC90cj4KLSA8dHI+Ci0gIDx0ZD5UaGUgWE1MIHNob3VsZCBiZSBwcmV0dHkgcHJpbnRlZCB3aGVuIHNhdmVkLiBOb3RlIHRoYXQgdGhpcyAKLSAgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGVidWdnaW5nLjwvdGQ+Ci0gIDx0ZD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRTYXZlUHJldHR5UHJpbnQoKSI+PENPREU+WG1sT3B0aW9ucy5zZXRTYXZlUHJldHR5UHJpbnQoKTwvQ09ERT48L0E+PC90ZD4KLSA8L3RyPgotIDx0cj4KLSAgPHRkPlRoZSBudW1iZXIgb2Ygc3BhY2VzIHRvIHVzZSB3aGVuIGluZGVudGluZyBmb3IgcHJldHR5IHByaW50aW5nLiAKLSAgVGhlIGRlZmF1bHQgaXMgMi48L3RkPgotICA8dGQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0U2F2ZVByZXR0eVByaW50SW5kZW50KGludCkiPjxDT0RFPlhtbE9wdGlvbnMuc2V0U2F2ZVByZXR0eVByaW50SW5kZW50KGludCk8L0NPREU+PC9BPjwvdGQ+Ci0gPC90cj4KLSA8dHI+Ci0gIDx0ZD5UaGUgYWRkaXRpb25hbCBudW1iZXIgb2Ygc3BhY2VzIGluZGVudGVkIGZyb20gdGhlIGxlZnQKLSAgZm9yIHByZXR0eSBwcmludGVkIFhNTC48L3RkPgotICA8dGQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0U2F2ZVByZXR0eVByaW50T2Zmc2V0KGludCkiPjxDT0RFPlhtbE9wdGlvbnMuc2V0U2F2ZVByZXR0eVByaW50T2Zmc2V0KGludCk8L0NPREU+PC9BPjwvdGQ+Ci0gPC90cj4KLSA8dHI+Ci0gIDx0ZD5UbyBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIG5hbWVzcGFjZSBhdHRyaWJ1dGVzIGdlbmVyYXRlZCBmb3IgdGhlIAotICBzYXZlZCBYTUwuIE5vdGUgdGhhdCB0aGlzIGNhbiByZWR1Y2UgcGVyZm9ybWFuY2Ugc2lnbmlmaWNhbnRseS48L3RkPgotICA8dGQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0U2F2ZUFnZ3Jlc2l2ZU5hbWVzcGFjZXMoKSI+PENPREU+WG1sT3B0aW9ucy5zZXRTYXZlQWdncmVzaXZlTmFtZXNwYWNlcygpPC9DT0RFPjwvQT48L3RkPgotIDwvdHI+Ci0gPHRyPgotICA8dGQ+VG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBzYXZlZCBkb2N1bWVudAotICBieSBhbGxvd2luZyB0aGUgdXNlIG9mIHRoZSBkZWZhdWx0IG5hbWVzcGFjZS4gTm90ZSB0aGF0IHRoaXMgY2FuIAotICBwb3RlbnRpYWxseSBjaGFuZ2UgdGhlIHNlbWFudGljIG1lYW5pbmcgb2YgdGhlIFhNTCBpZiB1bnByZWZpeGVkIFFOYW1lcyBhcmUgCi0gIHByZXNlbnQgYXMgdGhlIHZhbHVlIG9mIGFuIGF0dHJpYnV0ZSBvciBlbGVtZW50LjwvdGQ+Ci0gIDx0ZD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRVc2VEZWZhdWx0TmFtZXNwYWNlKCkiPjxDT0RFPlhtbE9wdGlvbnMuc2V0VXNlRGVmYXVsdE5hbWVzcGFjZSgpPC9DT0RFPjwvQT48L3RkPgotIDwvdHI+Ci0gPHRyPgotICA8dGQ+VG8gZmlsdGVyIG91dCBwcm9jZXNzaW5nIGluc3RydWN0aW9ucyB3aXRoIHRoZSBzcGVjaWZpZWQgdGFyZ2V0IG5hbWUuPC90ZD4KLSAgPHRkPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldFNhdmVGaWx0ZXJQcm9jaW5zdChqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+WG1sT3B0aW9ucy5zZXRTYXZlRmlsdGVyUHJvY2luc3QoamF2YS5sYW5nLlN0cmluZyk8L0NPREU+PC9BPjwvdGQ+Ci0gPC90cj4KLSA8dHI+Ci0gIDx0ZD5DaGFuZ2UgdGhlIFFOYW1lIG9mIHRoZSBzeW50aGVzaXplZCByb290IGVsZW1lbnQgd2hlbiBzYXZpbmcuIFRoaXMgCi0gIHJlcGxhY2VzICJ4bWwtZnJhZ21lbnQiIHdpdGggImZyYWdtZW50IiBpbiB0aGUgbmFtZXNwYWNlIAotICBodHRwOi8vd3d3Lm9wZW51cmkub3JnL2ZyYWdtZW50PC90ZD4KLSAgPHRkPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sI3NldFNhdmVVc2VPcGVuRnJhZygpIj48Q09ERT5YbWxPcHRpb25zLnNldFNhdmVVc2VPcGVuRnJhZygpPC9DT0RFPjwvQT48L3RkPgotIDwvdHI+Ci0gPHRyPgotICA8dGQ+U2F2aW5nIHNob3VsZCBiZWdpbiBvbiB0aGUgZWxlbWVudCdzIGNvbnRlbnRzLjwvdGQ+Ci0gIDx0ZD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRTYXZlSW5uZXIoKSI+PENPREU+WG1sT3B0aW9ucy5zZXRTYXZlSW5uZXIoKTwvQ09ERT48L0E+PC90ZD4KLSA8L3RyPgotIDx0cj4KLSAgPHRkPlNhdmluZyBzaG91bGQgYmVnaW4gb24gdGhlIGVsZW1lbnQsIHJhdGhlciB0aGFuIGl0cyBjb250ZW50cy48L3RkPgotICA8dGQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwjc2V0U2F2ZU91dGVyKCkiPjxDT0RFPlhtbE9wdGlvbnMuc2V0U2F2ZU91dGVyKCk8L0NPREU+PC9BPjwvdGQ+Ci0gPC90cj4KLSA8dHI+Ci0gIDx0ZD5UbyByZW5hbWUgdGhlIGRvY3VtZW50IGVsZW1lbnQsIG9yIHRvIHNwZWNpZnkgdGhlIGRvY3VtZW50IGVsZW1lbnQKLSAgZm9yIHRoaXMgWE1MLjwvdGQ+Ci0gIDx0ZD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCNzZXRTYXZlU3ludGhldGljRG9jdW1lbnRFbGVtZW50KGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWUpIj48Q09ERT5YbWxPcHRpb25zLnNldFNhdmVTeW50aGV0aWNEb2N1bWVudEVsZW1lbnQoamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZSk8L0NPREU+PC9BPjwvdGQ+Ci0gPC90cj4KLSA8L3RhYmxlPgotPFA+Ci08REQ+PERMPgotPERUPjxCPlBhcmFtZXRlcnM6PC9CPjxERD48Q09ERT5vcHRpb25zPC9DT0RFPiAtIEFueSBvZiB0aGUgZGVzY3JpYmVkIG9wdGlvbnMuCi08RFQ+PEI+UmV0dXJuczo8L0I+PEREPkEgbmV3IHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPjxDT0RFPlhtbE9wdGlvbnM8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ieG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci14bWxUZXh0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj54bWxUZXh0PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvUFJFPgotPERMPgotPEREPkp1c3QgbGlrZSB4bWxUZXh0KCkgYnV0IHdpdGggb3B0aW9ucy4KLSBPcHRpb25zIG1hcCBtYXkgYmUgbnVsbC4KLTxQPgotPEREPjxETD4KLTxEVD48Qj5TZWUgQWxzbzo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj48Q09ERT5YbWxPcHRpb25zPC9DT0RFPjwvQT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld0lucHV0U3RyZWFtKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0lucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+IDxCPm5ld0lucHV0U3RyZWFtPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvUFJFPgotPERMPgotPEREPkp1c3QgbGlrZSBuZXdJbnB1dFN0cmVhbShTdHJpbmcgZW5jb2RpbmcpIGJ1dCB3aXRoIG9wdGlvbnMuCi0gT3B0aW9ucyBtYXAgbWF5IGJlIG51bGwuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+PENPREU+WG1sT3B0aW9uczwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdSZWFkZXIob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3UmVhZGVyPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4gPEI+bmV3UmVhZGVyPC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvUFJFPgotPERMPgotPEREPkp1c3QgbGlrZSBuZXdSZWFkZXIoKSBidXQgd2l0aCBvcHRpb25zLgotIE9wdGlvbnMgbWFwIG1heSBiZSBudWxsLgotPFA+Ci08REQ+PERMPgotPERUPjxCPlNlZSBBbHNvOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPjxDT0RFPlhtbE9wdGlvbnM8L0NPREU+PC9BPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3RG9tTm9kZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdEb21Ob2RlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4gPEI+bmV3RG9tTm9kZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L1BSRT4KLTxETD4KLTxERD5KdXN0IGxpa2UgbmV3RG9tTm9kZSgpIGJ1dCB3aXRoIG9wdGlvbnMuCi0gT3B0aW9ucyBtYXAgbWF5IGJlIG51bGwuCi08UD4KLTxERD48REw+Ci08RFQ+PEI+U2VlIEFsc286PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+PENPREU+WG1sT3B0aW9uczwvQ09ERT48L0E+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXNhdmU8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNhdmU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcveG1sL3NheC9Db250ZW50SGFuZGxlci5odG1sIj5Db250ZW50SGFuZGxlcjwvQT4mbmJzcDtjaCwKLSAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy94bWwvc2F4L2V4dC9MZXhpY2FsSGFuZGxlci5odG1sIj5MZXhpY2FsSGFuZGxlcjwvQT4mbmJzcDtsaCwKLSAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy94bWwvc2F4L1NBWEV4Y2VwdGlvbi5odG1sIj5TQVhFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+V3JpdGVzIHRoZSBYTUwgcmVwcmVzZW50ZWQgYnkgdGhpcyBzb3VyY2UgdG8gdGhlIGdpdmVuIFNBWCBjb250ZW50IGFuZAotIGxleGljYWwgaGFuZGxlcnMuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3htbC9zYXgvU0FYRXhjZXB0aW9uLmh0bWwiPlNBWEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzYXZlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotc2F2ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2F2ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2ZpbGUsCi0gICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPldyaXRlcyB0aGUgWE1MIHJlcHJlc2VudGVkIGJ5IHRoaXMgc291cmNlIHRvIHRoZSBnaXZlbiBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2F2ZShqYXZhLmlvLk91dHB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotc2F2ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2F2ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vT3V0cHV0U3RyZWFtLmh0bWwiPk91dHB1dFN0cmVhbTwvQT4mbmJzcDtvcywKLSAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+V3JpdGVzIHRoZSBYTUwgcmVwcmVzZW50ZWQgYnkgdGhpcyBzb3VyY2UgdG8gdGhlIGdpdmVuIG91dHB1dCBzdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzYXZlKGphdmEuaW8uV3JpdGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1zYXZlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zYXZlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9Xcml0ZXIuaHRtbCI+V3JpdGVyPC9BPiZuYnNwO3csCi0gICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPldyaXRlcyB0aGUgWE1MIHJlcHJlc2VudGVkIGJ5IHRoaXMgc291cmNlIHRvIHRoZSBnaXZlbiB3cml0ZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sVG9rZW5Tb3VyY2UuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1YzBhZDcuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY3MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ3OjAxIFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sVW5zaWduZWRCeXRlLkZhY3RvcnksWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkgY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbFVuc2lnbmVkQnl0ZS5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUNsYXNzIFhtbFVuc2lnbmVkQnl0ZS5GYWN0b3J5PC9IMj4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5qYXZhLmxhbmcuT2JqZWN0PC9BPgotICB8Ci0gICstLTxCPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sVW5zaWduZWRCeXRlLkZhY3Rvcnk8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5FbmNsb3NpbmcgY2xhc3M6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj5YbWxVbnNpZ25lZEJ5dGU8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyA8Qj5YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeTwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9ETD4KLQotPFA+Ci1BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+PENPREU+WG1sVW5zaWduZWRCeXRlPC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj5YbWxVbnNpZ25lZEJ5dGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj5uZXdJbnN0YW5jZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+PENPREU+WG1sVW5zaWduZWRCeXRlPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+WG1sVW5zaWduZWRCeXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5zdGFuY2U8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEJ5dGU8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+WG1sVW5zaWduZWRCeXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPm5ld1ZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkQnl0ZTwvQ09ERT48L0E+IHZhbHVlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPlhtbFVuc2lnbmVkQnl0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEJ5dGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+WG1sVW5zaWduZWRCeXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj5YbWxVbnNpZ25lZEJ5dGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPlhtbFVuc2lnbmVkQnl0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+PENPREU+WG1sVW5zaWduZWRCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+WG1sVW5zaWduZWRCeXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+PENPREU+WG1sVW5zaWduZWRCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj5YbWxVbnNpZ25lZEJ5dGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEJ5dGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPlhtbFVuc2lnbmVkQnl0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEJ5dGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj5YbWxVbnNpZ25lZEJ5dGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+PENPREU+WG1sVW5zaWduZWRCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+WG1sVW5zaWduZWRCeXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEJ5dGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj5YbWxVbnNpZ25lZEJ5dGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPlhtbFVuc2lnbmVkQnl0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPlhtbFVuc2lnbmVkQnl0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPlhtbFVuc2lnbmVkQnl0ZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+PENPREU+WG1sVW5zaWduZWRCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+WG1sVW5zaWduZWRCeXRlPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEJ5dGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPlhtbFVuc2lnbmVkQnl0ZTwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkQnl0ZTwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPlhtbFVuc2lnbmVkQnl0ZTwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEJ5dGU8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+WG1sVW5zaWduZWRCeXRlPC9BPiA8Qj5uZXdWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEJ5dGU8L0NPREU+PC9BPiB2YWx1ZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+WG1sVW5zaWduZWRCeXRlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+PENPREU+WG1sVW5zaWduZWRCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzEyMyZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPlhtbFVuc2lnbmVkQnl0ZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEJ5dGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7MTIzJmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+WG1sVW5zaWduZWRCeXRlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+PENPREU+WG1sVW5zaWduZWRCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+WG1sVW5zaWduZWRCeXRlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj5YbWxVbnNpZ25lZEJ5dGU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+WG1sVW5zaWduZWRCeXRlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+PENPREU+WG1sVW5zaWduZWRCeXRlPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPlhtbFVuc2lnbmVkQnl0ZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPlhtbFVuc2lnbmVkQnl0ZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEJ5dGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlcikiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPlhtbFVuc2lnbmVkQnl0ZTwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEJ5dGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+WG1sVW5zaWduZWRCeXRlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEJ5dGU8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+WG1sVW5zaWduZWRCeXRlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj5YbWxVbnNpZ25lZEJ5dGU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+WG1sVW5zaWduZWRCeXRlPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIj5YbWxVbnNpZ25lZEJ5dGU8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkQnl0ZTwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50LkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1ZDkzMzcuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ODYgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1OCBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbFVuc2lnbmVkQnl0ZSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxVbnNpZ25lZEJ5dGUsWG1sVW5zaWduZWRCeXRlIGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sVW5zaWduZWRCeXRlIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbFVuc2lnbmVkQnl0ZS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUludGVyZmFjZSBYbWxVbnNpZ25lZEJ5dGU8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj5YbWxVbnNpZ25lZExvbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+WG1sVW5zaWduZWRTaG9ydDwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlhtbFVuc2lnbmVkQnl0ZTwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+WG1sVW5zaWduZWRTaG9ydDwvQT48L0RMPgotCi08UD4KLUNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyN1bnNpZ25lZEJ5dGUiPnhzOnVuc2lnbmVkQnl0ZTwvYT4gdHlwZS4KLSBPbmUgb2YgdGhlIGRlcml2ZWQgdHlwZXMgYmFzZWQgb24gPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkZWNpbWFsIj54czpkZWNpbWFsPC9hPi4KLSA8cD4KLSBWZXJpZmllZCB0byBiZSBpbiB0aGUgcmFuZ2UgMC4uMjU1IHdoZW4gdmFsaWRhdGluZy4KLSA8cD4KLSBBcyBzdWdnZXN0ZWQgYnkgSkFYQiwgY29udmVydGlibGUgdG8gSmF2YSBzaG9ydC4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi08QSBOQU1FPSJuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5OZXN0ZWQgQ2xhc3MgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwO2NsYXNzPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRCeXRlLkZhY3Rvcnk8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkQnl0ZTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVW5zaWduZWRTaG9ydCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQ8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFVuc2lnbmVkSW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPlhtbFVuc2lnbmVkSW50PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZEludC5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFVuc2lnbmVkTG9uZyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+WG1sVW5zaWduZWRMb25nPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRMb25nLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sTm9uTmVnYXRpdmVJbnRlZ2VyIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxJbnRlZ2VyIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sIj5YbWxJbnRlZ2VyLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sRGVjaW1hbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLkZhY3RvcnkuaHRtbCI+WG1sRGVjaW1hbC5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEFueVNpbXBsZVR5cGUiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPlhtbE9iamVjdC5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0iZmllbGRfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPlNjaGVtYVR5cGU8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwjdHlwZSI+dHlwZTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+RmllbGRzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0VRVUFMIj5FUVVBTDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjR1JFQVRFUl9USEFOIj5HUkVBVEVSX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0xFU1NfVEhBTiI+TEVTU19USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNOT1RfRVFVQUwiPk5PVF9FUVVBTDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3Nob3J0PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwjZ2V0U2hvcnRWYWx1ZSgpIj5nZXRTaG9ydFZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgc2hvcnQ8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sI3NldChzaG9ydCkiPnNldDwvQT48L0I+KHNob3J0Jm5ic3A7cyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCNzZXRTaG9ydFZhbHVlKHNob3J0KSI+PENPREU+c2V0U2hvcnRWYWx1ZShzaG9ydCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5odG1sI3NldFNob3J0VmFsdWUoc2hvcnQpIj5zZXRTaG9ydFZhbHVlPC9BPjwvQj4oc2hvcnQmbmJzcDtzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGlzIHZhbHVlIGFzIGEgc2hvcnQ8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7c2hvcnQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCNzaG9ydFZhbHVlKCkiPnNob3J0VmFsdWU8L0E+PC9CPigpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwjZ2V0U2hvcnRWYWx1ZSgpIj48Q09ERT5nZXRTaG9ydFZhbHVlKCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVW5zaWduZWRTaG9ydCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQ8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwjZ2V0SW50VmFsdWUoKSI+Z2V0SW50VmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCNpbnRWYWx1ZSgpIj5pbnRWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sI3NldChpbnQpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCNzZXRJbnRWYWx1ZShpbnQpIj5zZXRJbnRWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFVuc2lnbmVkSW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPlhtbFVuc2lnbmVkSW50PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCNnZXRMb25nVmFsdWUoKSI+Z2V0TG9uZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sI2xvbmdWYWx1ZSgpIj5sb25nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwjc2V0KGxvbmcpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwjc2V0TG9uZ1ZhbHVlKGxvbmcpIj5zZXRMb25nVmFsdWU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxJbnRlZ2VyIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCNiaWdJbnRlZ2VyVmFsdWUoKSI+YmlnSW50ZWdlclZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwjZ2V0QmlnSW50ZWdlclZhbHVlKCkiPmdldEJpZ0ludGVnZXJWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI3NldChqYXZhLm1hdGguQmlnSW50ZWdlcikiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI3NldEJpZ0ludGVnZXJWYWx1ZShqYXZhLm1hdGguQmlnSW50ZWdlcikiPnNldEJpZ0ludGVnZXJWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERlY2ltYWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI2JpZ0RlY2ltYWxWYWx1ZSgpIj5iaWdEZWNpbWFsVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCNnZXRCaWdEZWNpbWFsVmFsdWUoKSI+Z2V0QmlnRGVjaW1hbFZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjc2V0KGphdmEubWF0aC5CaWdEZWNpbWFsKSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjc2V0QmlnRGVjaW1hbFZhbHVlKGphdmEubWF0aC5CaWdEZWNpbWFsKSI+c2V0QmlnRGVjaW1hbFZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjZ2V0U3RyaW5nVmFsdWUoKSI+Z2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXQoamF2YS5sYW5nLlN0cmluZykiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj5zZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3N0cmluZ1ZhbHVlKCkiPnN0cmluZ1ZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjaGFuZ2VUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPmNoYW5nZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KSI+Y29tcGFyZVRvPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5jb21wYXJlVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvcHkoKSI+Y29weTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzSW1tdXRhYmxlKCkiPmlzSW1tdXRhYmxlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc05pbCgpIj5pc05pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2NoZW1hVHlwZSgpIj5zY2hlbWFUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0TmlsKCkiPnNldE5pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKCkiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVFcXVhbHMob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj52YWx1ZUVxdWFsczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVIYXNoQ29kZSgpIj52YWx1ZUhhc2hDb2RlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVG9rZW5Tb3VyY2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI2RvY3VtZW50UHJvcGVydGllcygpIj5kb2N1bWVudFByb3BlcnRpZXM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbW9uaXRvcigpIj5tb25pdG9yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0N1cnNvcigpIj5uZXdDdXJzb3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZSgpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbSgpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIoKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0oKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0pIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KCkiPnhtbFRleHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj54bWxUZXh0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0idHlwZSI+PCEtLSAtLT48L0E+PEgzPgotdHlwZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+dHlwZTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0U2hvcnRWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1nZXRTaG9ydFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc2hvcnQgPEI+Z2V0U2hvcnRWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPlJldHVybnMgdGhpcyB2YWx1ZSBhcyBhIHNob3J0Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldFNob3J0VmFsdWUoc2hvcnQpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXRTaG9ydFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRTaG9ydFZhbHVlPC9CPihzaG9ydCZuYnNwO3MpPC9QUkU+Ci08REw+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgc2hvcnQKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2hvcnRWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1zaG9ydFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc2hvcnQgPEI+c2hvcnRWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCNnZXRTaG9ydFZhbHVlKCkiPjxDT0RFPmdldFNob3J0VmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgc2hvcnQKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ic2V0KHNob3J0KSI+PCEtLSAtLT48L0E+PEgzPgotc2V0PC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXQ8L0I+KHNob3J0Jm5ic3A7cyk8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwjc2V0U2hvcnRWYWx1ZShzaG9ydCkiPjxDT0RFPnNldFNob3J0VmFsdWUoc2hvcnQpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSBzaG9ydAotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxVbnNpZ25lZEJ5dGUuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTkzNGY1Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50LkZhY3RvcnkuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY3MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ3OjAxIFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sVW5zaWduZWRJbnQuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TUVUQSBOQU1FPSJrZXl3b3JkcyIgQ09OVEVOVD0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxVbnNpZ25lZEludC5GYWN0b3J5LFhtbFVuc2lnbmVkSW50LkZhY3RvcnkgY2xhc3MiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlhtbFVuc2lnbmVkSW50LkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUNsYXNzIFhtbFVuc2lnbmVkSW50LkZhY3Rvcnk8L0gyPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPmphdmEubGFuZy5PYmplY3Q8L0E+Ci0gIHwKLSAgKy0tPEI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxVbnNpZ25lZEludC5GYWN0b3J5PC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+RW5jbG9zaW5nIGNsYXNzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj5YbWxVbnNpZ25lZEludDwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIDxCPlhtbFVuc2lnbmVkSW50LkZhY3Rvcnk8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvREw+Ci0KLTxQPgotQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRJbnQ8L0NPREU+PC9BPi4KLTxQPgotCi08UD4KLTxIUj4KLQotPFA+Ci08IS0tID09PT09PT09IE5FU1RFRCBDTEFTUyBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT0gRklFTEQgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sI25ld0luc3RhbmNlKCkiPm5ld0luc3RhbmNlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkSW50PC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj5YbWxVbnNpZ25lZEludDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5zdGFuY2U8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkSW50PC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50LkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPlhtbFVuc2lnbmVkSW50PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50LkZhY3RvcnkuaHRtbCNuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+bmV3VmFsdWU8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+Jm5ic3A7b2JqKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEludDwvQ09ERT48L0E+IHZhbHVlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRJbnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRJbnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj5YbWxVbnNpZ25lZEludDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRJbnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPlhtbFVuc2lnbmVkSW50PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRJbnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPlhtbFVuc2lnbmVkSW50PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRJbnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPlhtbFVuc2lnbmVkSW50PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj5YbWxVbnNpZ25lZEludDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5uZXQuVVJMLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19qYXZhLmxhbmcuT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBqYXZhLmxhbmcuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjY2xvbmUoKSI+Y2xvbmU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2VxdWFscyhqYXZhLmxhbmcuT2JqZWN0KSI+ZXF1YWxzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNmaW5hbGl6ZSgpIj5maW5hbGl6ZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZ2V0Q2xhc3MoKSI+Z2V0Q2xhc3M8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2hhc2hDb2RlKCkiPmhhc2hDb2RlPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnkoKSI+bm90aWZ5PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNub3RpZnlBbGwoKSI+bm90aWZ5QWxsPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN0b1N0cmluZygpIj50b1N0cmluZzwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdCgpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcpIj53YWl0PC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCN3YWl0KGxvbmcsIGludCkiPndhaXQ8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPFA+Ci0KLTwhLS0gPT09PT09PT09PT09IEZJRUxEIERFVEFJTCA9PT09PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0ibmV3SW5zdGFuY2UoKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3SW5zdGFuY2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj5YbWxVbnNpZ25lZEludDwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRJbnQ8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPlhtbFVuc2lnbmVkSW50PC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRJbnQ8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj5YbWxVbnNpZ25lZEludDwvQT4gPEI+bmV3VmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEludDwvQ09ERT48L0E+IHZhbHVlCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPlhtbFVuc2lnbmVkSW50PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzEyMzQ1NjcmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPlhtbFVuc2lnbmVkSW50PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzEyMzQ1NjcmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLkZpbGUpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPlhtbFVuc2lnbmVkSW50PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRJbnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPlhtbFVuc2lnbmVkSW50PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRJbnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj5YbWxVbnNpZ25lZEludDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRJbnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj5YbWxVbnNpZ25lZEludDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEludDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBSZWFkZXIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uUmVhZGVyLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPlhtbFVuc2lnbmVkSW50PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKG9yZy53M2MuZG9tLk5vZGUsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPlhtbFVuc2lnbmVkSW50PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkSW50PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRJbnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLkZhY3RvcnkuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbFVuc2lnbmVkSW50LkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlZGQ2YTYuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ1MyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ2OjU4IFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sVW5zaWduZWRJbnQgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sVW5zaWduZWRJbnQsWG1sVW5zaWduZWRJbnQgaW50ZXJmYWNlIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxVbnNpZ25lZEludCAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbFVuc2lnbmVkSW50Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFhtbFVuc2lnbmVkSW50PC9IMj4KLTxETD4KLTxEVD48Qj5BbGwgU3VwZXJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPlhtbERlY2ltYWw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj5YbWxVbnNpZ25lZExvbmc8L0E+PC9ERD4KLTwvREw+Ci08REw+Ci08RFQ+PEI+QWxsIEtub3duIFN1YmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+WG1sVW5zaWduZWRCeXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQ8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIGludGVyZmFjZSA8Qj5YbWxVbnNpZ25lZEludDwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj5YbWxVbnNpZ25lZExvbmc8L0E+PC9ETD4KLQotPFA+Ci1Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jdW5zaWduZWRJbnQiPnhzOnVuc2lnbmVkSW50PC9hPiB0eXBlLgotIE9uZSBvZiB0aGUgZGVyaXZlZCB0eXBlcyBiYXNlZCBvbiA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2RlY2ltYWwiPnhzOmRlY2ltYWw8L2E+LgotIDxwPgotIFZlcmlmaWVkIHRvIGJlIGluIHRoZSByYW5nZSAwLi40Mjk0OTY3Mjk1IHdoZW4gdmFsaWRhdGluZy4KLSA8cD4KLSBDb252ZXJ0aWJsZSB0byBKYXZhIGxvbmcuCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibmVzdGVkX2NsYXNzX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TmVzdGVkIENsYXNzIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDtjbGFzczwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50LkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRJbnQuRmFjdG9yeTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZEludDwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVW5zaWduZWRMb25nIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj5YbWxVbnNpZ25lZExvbmc8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZExvbmcuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxOb25OZWdhdGl2ZUludGVnZXIiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEludGVnZXIiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbEludGVnZXIuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxEZWNpbWFsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuRmFjdG9yeS5odG1sIj5YbWxEZWNpbWFsLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+WG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sI3R5cGUiPnR5cGU8L0E+PC9CPjwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7VGhlIGNvbnN0YW50IDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Q09ERT5TY2hlbWFUeXBlPC9DT0RFPjwvQT4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGlzIHNjaGVtYSB0eXBlLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9ImZpZWxkc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPkZpZWxkcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNFUVVBTCI+RVFVQUw8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0dSRUFURVJfVEhBTiI+R1JFQVRFUl9USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNMRVNTX1RIQU4iPkxFU1NfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTk9UX0VRVUFMIj5OT1RfRVFVQUw8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtsb25nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCNnZXRMb25nVmFsdWUoKSI+Z2V0TG9uZ1ZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgbG9uZzwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDtsb25nPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCNsb25nVmFsdWUoKSI+bG9uZ1ZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwjZ2V0TG9uZ1ZhbHVlKCkiPjxDT0RFPmdldExvbmdWYWx1ZSgpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sI3NldChsb25nKSI+c2V0PC9BPjwvQj4obG9uZyZuYnNwO3YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCNzZXRMb25nVmFsdWUobG9uZykiPjxDT0RFPnNldExvbmdWYWx1ZShsb25nKTwvQ09ERT48L0E+PC9JPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT4mbmJzcDt2b2lkPC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCNzZXRMb25nVmFsdWUobG9uZykiPnNldExvbmdWYWx1ZTwvQT48L0I+KGxvbmcmbmJzcDt2KTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7U2V0cyB0aGlzIHZhbHVlIGFzIGEgbG9uZzwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxJbnRlZ2VyIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCNiaWdJbnRlZ2VyVmFsdWUoKSI+YmlnSW50ZWdlclZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwjZ2V0QmlnSW50ZWdlclZhbHVlKCkiPmdldEJpZ0ludGVnZXJWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI3NldChqYXZhLm1hdGguQmlnSW50ZWdlcikiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI3NldEJpZ0ludGVnZXJWYWx1ZShqYXZhLm1hdGguQmlnSW50ZWdlcikiPnNldEJpZ0ludGVnZXJWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERlY2ltYWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI2JpZ0RlY2ltYWxWYWx1ZSgpIj5iaWdEZWNpbWFsVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCNnZXRCaWdEZWNpbWFsVmFsdWUoKSI+Z2V0QmlnRGVjaW1hbFZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjc2V0KGphdmEubWF0aC5CaWdEZWNpbWFsKSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjc2V0QmlnRGVjaW1hbFZhbHVlKGphdmEubWF0aC5CaWdEZWNpbWFsKSI+c2V0QmlnRGVjaW1hbFZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjZ2V0U3RyaW5nVmFsdWUoKSI+Z2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXQoamF2YS5sYW5nLlN0cmluZykiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj5zZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3N0cmluZ1ZhbHVlKCkiPnN0cmluZ1ZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjaGFuZ2VUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPmNoYW5nZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KSI+Y29tcGFyZVRvPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5jb21wYXJlVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvcHkoKSI+Y29weTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzSW1tdXRhYmxlKCkiPmlzSW1tdXRhYmxlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc05pbCgpIj5pc05pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2NoZW1hVHlwZSgpIj5zY2hlbWFUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0TmlsKCkiPnNldE5pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKCkiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVFcXVhbHMob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj52YWx1ZUVxdWFsczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVIYXNoQ29kZSgpIj52YWx1ZUhhc2hDb2RlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVG9rZW5Tb3VyY2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI2RvY3VtZW50UHJvcGVydGllcygpIj5kb2N1bWVudFByb3BlcnRpZXM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbW9uaXRvcigpIj5tb25pdG9yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0N1cnNvcigpIj5uZXdDdXJzb3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZSgpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbSgpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIoKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0oKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0pIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KCkiPnhtbFRleHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj54bWxUZXh0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0idHlwZSI+PCEtLSAtLT48L0E+PEgzPgotdHlwZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+dHlwZTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0TG9uZ1ZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWdldExvbmdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIGxvbmcgPEI+Z2V0TG9uZ1ZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgbG9uZwotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXRMb25nVmFsdWUobG9uZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldExvbmdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0TG9uZ1ZhbHVlPC9CPihsb25nJm5ic3A7dik8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYSBsb25nCi08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImxvbmdWYWx1ZSgpIj48IS0tIC0tPjwvQT48SDM+Ci1sb25nVmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBsb25nIDxCPmxvbmdWYWx1ZTwvQj4oKTwvUFJFPgotPERMPgotPEREPjxCPkRlcHJlY2F0ZWQuPC9CPiZuYnNwOzxJPnJlcGxhY2VkIHdpdGggPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sI2dldExvbmdWYWx1ZSgpIj48Q09ERT5nZXRMb25nVmFsdWUoKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+UmV0dXJucyB0aGlzIHZhbHVlIGFzIGEgbG9uZwotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJzZXQobG9uZykiPjwhLS0gLS0+PC9BPjxIMz4KLXNldDwvSDM+Ci08UFJFPgotcHVibGljIHZvaWQgPEI+c2V0PC9CPihsb25nJm5ic3A7dik8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCNzZXRMb25nVmFsdWUobG9uZykiPjxDT0RFPnNldExvbmdWYWx1ZShsb25nKTwvQ09ERT48L0E+PC9JPgotPFA+Ci08REQ+U2V0cyB0aGlzIHZhbHVlIGFzIGEgbG9uZwotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPCEtLSA9PT09PT09PT0gRU5EIE9GIENMQVNTIERBVEEgPT09PT09PT09IC0tPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+PEI+TkVYVCBDTEFTUzwvQj48L0E+PC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9IlhtbFVuc2lnbmVkSW50Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5GYWN0b3J5Lmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzMyMjM1Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5GYWN0b3J5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NzMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0NzowMSBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbFVuc2lnbmVkTG9uZy5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFVuc2lnbmVkTG9uZy5GYWN0b3J5LFhtbFVuc2lnbmVkTG9uZy5GYWN0b3J5IGNsYXNzIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxVbnNpZ25lZExvbmcuRmFjdG9yeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7TkVTVEVEJm5ic3A7fCZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX3N1bW1hcnkiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPCEtLSA9PT09PT09PSBTVEFSVCBPRiBDTEFTUyBEQVRBID09PT09PT09IC0tPgotPEgyPgotPEZPTlQgU0laRT0iLTEiPgotb3JnLmFwYWNoZS54bWxiZWFuczwvRk9OVD4KLTxCUj4KLUNsYXNzIFhtbFVuc2lnbmVkTG9uZy5GYWN0b3J5PC9IMj4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5qYXZhLmxhbmcuT2JqZWN0PC9BPgotICB8Ci0gICstLTxCPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sVW5zaWduZWRMb25nLkZhY3Rvcnk8L0I+Ci08L1BSRT4KLTxETD4KLTxEVD48Qj5FbmNsb3NpbmcgY2xhc3M6PC9CPjxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj5YbWxVbnNpZ25lZExvbmc8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyA8Qj5YbWxVbnNpZ25lZExvbmcuRmFjdG9yeTwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5PYmplY3Q8L0E+PC9ETD4KLQotPFA+Ci1BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+PENPREU+WG1sVW5zaWduZWRMb25nPC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj5YbWxVbnNpZ25lZExvbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj5uZXdJbnN0YW5jZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+PENPREU+WG1sVW5zaWduZWRMb25nPC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+WG1sVW5zaWduZWRMb25nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5GYWN0b3J5Lmh0bWwjbmV3SW5zdGFuY2Uob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3SW5zdGFuY2U8L0E+PC9CPig8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj48Q09ERT5YbWxVbnNpZ25lZExvbmc8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+WG1sVW5zaWduZWRMb25nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPm5ld1ZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkTG9uZzwvQ09ERT48L0E+IHZhbHVlPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPlhtbFVuc2lnbmVkTG9uZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj48Q09ERT5YbWxVbnNpZ25lZExvbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+WG1sVW5zaWduZWRMb25nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+RmlsZTwvQT4mbmJzcDtmLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj5YbWxVbnNpZ25lZExvbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPlhtbFVuc2lnbmVkTG9uZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSW5wdXRTdHJlYW0uaHRtbCI+SW5wdXRTdHJlYW08L0E+Jm5ic3A7aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+PENPREU+WG1sVW5zaWduZWRMb25nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+WG1sVW5zaWduZWRMb25nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5GYWN0b3J5Lmh0bWwjcGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+PENPREU+WG1sVW5zaWduZWRMb25nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj5YbWxVbnNpZ25lZExvbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj48Q09ERT5YbWxVbnNpZ25lZExvbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRE9NIE5vZGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPlhtbFVuc2lnbmVkTG9uZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uUmVhZGVyKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj48Q09ERT5YbWxVbnNpZ25lZExvbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj5YbWxVbnNpZ25lZExvbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+PENPREU+WG1sVW5zaWduZWRMb25nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+WG1sVW5zaWduZWRMb25nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj48Q09ERT5YbWxVbnNpZ25lZExvbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj5YbWxVbnNpZ25lZExvbmc8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPlhtbFVuc2lnbmVkTG9uZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPlhtbFVuc2lnbmVkTG9uZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPlhtbFVuc2lnbmVkTG9uZzwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+PENPREU+WG1sVW5zaWduZWRMb25nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+WG1sVW5zaWduZWRMb25nPC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj48Q09ERT5YbWxVbnNpZ25lZExvbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPlhtbFVuc2lnbmVkTG9uZzwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkTG9uZzwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPlhtbFVuc2lnbmVkTG9uZzwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj48Q09ERT5YbWxVbnNpZ25lZExvbmc8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWx1ZShqYXZhLmxhbmcuT2JqZWN0KSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+WG1sVW5zaWduZWRMb25nPC9BPiA8Qj5uZXdWYWx1ZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L1BSRT4KLTxETD4KLTxERD5DcmVhdGVzIGFuIGltbXV0YWJsZSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj48Q09ERT5YbWxVbnNpZ25lZExvbmc8L0NPREU+PC9BPiB2YWx1ZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+WG1sVW5zaWduZWRMb25nPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+PENPREU+WG1sVW5zaWduZWRMb25nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzEyMzQ1Njc4OSZsdDsveG1sLWZyYWdtZW50Jmd0OzwvY29kZT4iLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPlhtbFVuc2lnbmVkTG9uZzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj48Q09ERT5YbWxVbnNpZ25lZExvbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7MTIzNDU2Nzg5Jmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+WG1sVW5zaWduZWRMb25nPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+PENPREU+WG1sVW5zaWduZWRMb25nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+WG1sVW5zaWduZWRMb25nPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vRmlsZS5odG1sIj5GaWxlPC9BPiZuYnNwO2YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj5YbWxVbnNpZ25lZExvbmc8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+WG1sVW5zaWduZWRMb25nPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+PENPREU+WG1sVW5zaWduZWRMb25nPC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPlhtbFVuc2lnbmVkTG9uZzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPlhtbFVuc2lnbmVkTG9uZzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lucHV0U3RyZWFtLmh0bWwiPklucHV0U3RyZWFtPC9BPiZuYnNwO2lzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj48Q09ERT5YbWxVbnNpZ25lZExvbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlcikiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPlhtbFVuc2lnbmVkTG9uZzwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj48Q09ERT5YbWxVbnNpZ25lZExvbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+WG1sVW5zaWduZWRMb25nPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj48Q09ERT5YbWxVbnNpZ25lZExvbmc8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+WG1sVW5zaWduZWRMb25nPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj5YbWxVbnNpZ25lZExvbmc8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3czYy9kb20vTm9kZS5odG1sIj5Ob2RlPC9BPiZuYnNwO25vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+WG1sVW5zaWduZWRMb25nPC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj5YbWxVbnNpZ25lZExvbmc8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkTG9uZzwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiA8Qj5uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlJldHVybnMgYSB2YWxpZGF0aW5nIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50LkZhY3RvcnkuaHRtbCI+PEI+UFJFViBDTEFTUzwvQj48L0E+Jm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuRmFjdG9yeS5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sVW5zaWduZWRMb25nLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwO05FU1RFRCZuYnNwO3wmbmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwO0ZJRUxEJm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjbWV0aG9kX2RldGFpbCI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBlNDdhOC4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDMzMSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ2OjU4IFBEVCAyMDAzIC0tPgotPFRJVExFPgotWG1sVW5zaWduZWRMb25nIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFVuc2lnbmVkTG9uZyxYbWxVbnNpZ25lZExvbmcgaW50ZXJmYWNlIj4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSIuLi8uLi8uLi9zdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJYbWxVbnNpZ25lZExvbmcgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPjxCPk5FWFQgQ0xBU1M8L0I+PC9BPjwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxVbnNpZ25lZExvbmcuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFI+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotICBTVU1NQVJZOiZuYnNwOzxBIEhSRUY9IiNuZXN0ZWRfY2xhc3Nfc3VtbWFyeSI+TkVTVEVEPC9BPiZuYnNwO3wmbmJzcDs8QSBIUkVGPSIjZmllbGRfc3VtbWFyeSI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci1ERVRBSUw6Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX2RldGFpbCI+RklFTEQ8L0E+Jm5ic3A7fCZuYnNwO0NPTlNUUiZuYnNwO3wmbmJzcDtNRVRIT0Q8L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFhtbFVuc2lnbmVkTG9uZzwvSDI+Ci08REw+Ci08RFQ+PEI+QWxsIFN1cGVyaW50ZXJmYWNlczo8L0I+IDxERD48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+WG1sQW55U2ltcGxlVHlwZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPlhtbEludGVnZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwiPlhtbFRva2VuU291cmNlPC9BPjwvREQ+Ci08L0RMPgotPERMPgotPERUPjxCPkFsbCBLbm93biBTdWJpbnRlcmZhY2VzOjwvQj4gPEREPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPlhtbFVuc2lnbmVkQnl0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+WG1sVW5zaWduZWRTaG9ydDwvQT48L0REPgotPC9ETD4KLTxIUj4KLTxETD4KLTxEVD5wdWJsaWMgaW50ZXJmYWNlIDxCPlhtbFVuc2lnbmVkTG9uZzwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0E+PC9ETD4KLQotPFA+Ci1Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jdW5zaWduZWRMb25nIj54czp1bnNpZ25lZExvbmc8L2E+IHR5cGUuCi0gT25lIG9mIHRoZSBkZXJpdmVkIHR5cGVzIGJhc2VkIG9uIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZGVjaW1hbCI+eHM6ZGVjaW1hbDwvYT4uCi0gPHA+Ci0gVmVyaWZpZWQgdG8gYmUgaW4gdGhlIHJhbmdlIDAuLjI8c3VwZXI+NjQ8L3N1cGVyPi0xIHdoZW4gdmFsaWRhdGluZy4KLSA8cD4KLSBDb252ZXJ0aWJsZSB0byA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0ludGVnZXIuaHRtbCI+PENPREU+QmlnSW50ZWdlcjwvQ09ERT48L0E+LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZExvbmcuRmFjdG9yeTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtBIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+PENPREU+WG1sVW5zaWduZWRMb25nPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxOb25OZWdhdGl2ZUludGVnZXIiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEludGVnZXIiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbEludGVnZXIuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxEZWNpbWFsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuRmFjdG9yeS5odG1sIj5YbWxEZWNpbWFsLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+WG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCN0eXBlIj50eXBlPC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1RoZSBjb25zdGFudCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IG9iamVjdCByZXByZXNlbnRpbmcgdGhpcyBzY2hlbWEgdHlwZS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJmaWVsZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5GaWVsZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjRVFVQUwiPkVRVUFMPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNHUkVBVEVSX1RIQU4iPkdSRUFURVJfVEhBTjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjTEVTU19USEFOIj5MRVNTX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI05PVF9FUVVBTCI+Tk9UX0VRVUFMPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTwhLS0gPT09PT09PT0gQ09OU1RSVUNUT1IgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT0gTUVUSE9EIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxJbnRlZ2VyIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCNiaWdJbnRlZ2VyVmFsdWUoKSI+YmlnSW50ZWdlclZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwjZ2V0QmlnSW50ZWdlclZhbHVlKCkiPmdldEJpZ0ludGVnZXJWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI3NldChqYXZhLm1hdGguQmlnSW50ZWdlcikiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI3NldEJpZ0ludGVnZXJWYWx1ZShqYXZhLm1hdGguQmlnSW50ZWdlcikiPnNldEJpZ0ludGVnZXJWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERlY2ltYWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI2JpZ0RlY2ltYWxWYWx1ZSgpIj5iaWdEZWNpbWFsVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCNnZXRCaWdEZWNpbWFsVmFsdWUoKSI+Z2V0QmlnRGVjaW1hbFZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjc2V0KGphdmEubWF0aC5CaWdEZWNpbWFsKSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjc2V0QmlnRGVjaW1hbFZhbHVlKGphdmEubWF0aC5CaWdEZWNpbWFsKSI+c2V0QmlnRGVjaW1hbFZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjZ2V0U3RyaW5nVmFsdWUoKSI+Z2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXQoamF2YS5sYW5nLlN0cmluZykiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj5zZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3N0cmluZ1ZhbHVlKCkiPnN0cmluZ1ZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjaGFuZ2VUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPmNoYW5nZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KSI+Y29tcGFyZVRvPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5jb21wYXJlVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvcHkoKSI+Y29weTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzSW1tdXRhYmxlKCkiPmlzSW1tdXRhYmxlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc05pbCgpIj5pc05pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2NoZW1hVHlwZSgpIj5zY2hlbWFUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0TmlsKCkiPnNldE5pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKCkiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVFcXVhbHMob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj52YWx1ZUVxdWFsczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVIYXNoQ29kZSgpIj52YWx1ZUhhc2hDb2RlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVG9rZW5Tb3VyY2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI2RvY3VtZW50UHJvcGVydGllcygpIj5kb2N1bWVudFByb3BlcnRpZXM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbW9uaXRvcigpIj5tb25pdG9yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0N1cnNvcigpIj5uZXdDdXJzb3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZSgpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbSgpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIoKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0oKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0pIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KCkiPnhtbFRleHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj54bWxUZXh0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0idHlwZSI+PCEtLSAtLT48L0E+PEgzPgotdHlwZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+dHlwZTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj48Qj5ORVhUIENMQVNTPC9CPjwvQT48L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sVW5zaWduZWRMb25nLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7TUVUSE9EPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuRmFjdG9yeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODZhODRmLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuRmFjdG9yeS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjczICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDc6MDEgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5LFhtbFVuc2lnbmVkU2hvcnQuRmFjdG9yeSBjbGFzcyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl90b3AiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfdG9wX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwO05FWFQgQ0xBU1M8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotQ2xhc3MgWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5PC9IMj4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj5qYXZhLmxhbmcuT2JqZWN0PC9BPgotICB8Ci0gICstLTxCPm9yZy5hcGFjaGUueG1sYmVhbnMuWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5PC9CPgotPC9QUkU+Ci08REw+Ci08RFQ+PEI+RW5jbG9zaW5nIGNsYXNzOjwvQj48REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQ8L0E+PC9ERD4KLTwvREw+Ci08SFI+Ci08REw+Ci08RFQ+cHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyA8Qj5YbWxVbnNpZ25lZFNob3J0LkZhY3Rvcnk8L0I+PERUPmV4dGVuZHMgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPjwvREw+Ci0KLTxQPgotQSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZFNob3J0PC9DT0RFPjwvQT4uCi08UD4KLQotPFA+Ci08SFI+Ci0KLTxQPgotPCEtLSA9PT09PT09PSBORVNURUQgQ0xBU1MgU1VNTUFSWSA9PT09PT09PSAtLT4KLQotCi08IS0tID09PT09PT09PT09IEZJRUxEIFNVTU1BUlkgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PSBDT05TVFJVQ1RPUiBTVU1NQVJZID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PSBNRVRIT0QgU1VNTUFSWSA9PT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX3N1bW1hcnkiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+TWV0aG9kIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+WG1sVW5zaWduZWRTaG9ydDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZSgpIj5uZXdJbnN0YW5jZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkU2hvcnQ8L0NPREU+PC9BPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+WG1sVW5zaWduZWRTaG9ydDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCNuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnN0YW5jZTwvQT48L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtDcmVhdGVzIGFuIGVtcHR5IGluc3RhbmNlIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZFNob3J0PC9DT0RFPjwvQT48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCNuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5Lmh0bWwjbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtSZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5Lmh0bWwjbmV3VmFsdWUoamF2YS5sYW5nLk9iamVjdCkiPm5ld1ZhbHVlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+T2JqZWN0PC9BPiZuYnNwO29iaik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0NyZWF0ZXMgYW4gaW1tdXRhYmxlIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZFNob3J0PC9DT0RFPjwvQT4gdmFsdWU8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5GaWxlKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7Zik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj5YbWxVbnNpZ25lZFNob3J0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRTaG9ydDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBGaWxlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+WG1sVW5zaWduZWRTaG9ydDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRTaG9ydDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj5YbWxVbnNpZ25lZFNob3J0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuRmFjdG9yeS5odG1sI3BhcnNlKG9yZy53M2MuZG9tLk5vZGUpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIERPTSBOb2RlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+WG1sVW5zaWduZWRTaG9ydDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCNwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRTaG9ydDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1JlYWRlci5odG1sIj5SZWFkZXI8L0E+Jm5ic3A7cik8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5pby5SZWFkZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyLAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5Lmh0bWwjcGFyc2UoamF2YS5sYW5nLlN0cmluZykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRTaG9ydDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBTdHJpbmcuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj5YbWxVbnNpZ25lZFNob3J0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiZuYnNwO3MsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+WG1sVW5zaWduZWRTaG9ydDwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCNwYXJzZShqYXZhLm5ldC5VUkwpIj5wYXJzZTwvQT48L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL25ldC9VUkwuaHRtbCI+VVJMPC9BPiZuYnNwO3UpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRTaG9ydDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBVUkwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj5YbWxVbnNpZ25lZFNob3J0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuRmFjdG9yeS5odG1sI3BhcnNlKGphdmEubmV0LlVSTCwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+cGFyc2U8L0E+PC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1LAotICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucyk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1BhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFVSTC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQ8L0E+PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5Lmh0bWwjcGFyc2Uod2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSkiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtQYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRTaG9ydDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPnN0YXRpYyZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj5YbWxVbnNpZ25lZFNob3J0PC9BPjwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuRmFjdG9yeS5odG1sI3BhcnNlKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnBhcnNlPC9BPjwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3NfamF2YS5sYW5nLk9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gY2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2Nsb25lKCkiPmNsb25lPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNlcXVhbHMoamF2YS5sYW5nLk9iamVjdCkiPmVxdWFsczwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjZmluYWxpemUoKSI+ZmluYWxpemU8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI2dldENsYXNzKCkiPmdldENsYXNzPC9BPiwgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCNoYXNoQ29kZSgpIj5oYXNoQ29kZTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5KCkiPm5vdGlmeTwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjbm90aWZ5QWxsKCkiPm5vdGlmeUFsbDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sI3dhaXQoKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nKSI+d2FpdDwvQT4sIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwjd2FpdChsb25nLCBpbnQpIj53YWl0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT0gQ09OU1RSVUNUT1IgREVUQUlMID09PT09PT09IC0tPgotCi0KLTwhLS0gPT09PT09PT09PT09IE1FVEhPRCBERVRBSUwgPT09PT09PT09PSAtLT4KLQotPEEgTkFNRT0ibWV0aG9kX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgRGV0YWlsPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxBIE5BTUU9Im5ld0luc3RhbmNlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLW5ld0luc3RhbmNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj5YbWxVbnNpZ25lZFNob3J0PC9BPiA8Qj5uZXdJbnN0YW5jZTwvQj4oKTwvUFJFPgotPERMPgotPEREPkNyZWF0ZXMgYW4gZW1wdHkgaW5zdGFuY2Ugb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkU2hvcnQ8L0NPREU+PC9BPgotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdJbnN0YW5jZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdJbnN0YW5jZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+WG1sVW5zaWduZWRTaG9ydDwvQT4gPEI+bmV3SW5zdGFuY2U8L0I+KDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBlbXB0eSBpbnN0YW5jZSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRTaG9ydDwvQ09ERT48L0E+Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9Im5ld1ZhbHVlKGphdmEubGFuZy5PYmplY3QpIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWx1ZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+WG1sVW5zaWduZWRTaG9ydDwvQT4gPEI+bmV3VmFsdWU8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvT2JqZWN0Lmh0bWwiPk9iamVjdDwvQT4mbmJzcDtvYmopPC9QUkU+Ci08REw+Ci08REQ+Q3JlYXRlcyBhbiBpbW11dGFibGUgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkU2hvcnQ8L0NPREU+PC9BPiB2YWx1ZQotPFA+Ci08REQ+PERMPgotPC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+Jm5ic3A7cykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgU3RyaW5nLiBGb3IgZXhhbXBsZTogIjxjb2RlPiZsdDt4bWwtZnJhZ21lbnQmZ3Q7MTIzNDUmbHQ7L3htbC1mcmFnbWVudCZndDs8L2NvZGU+Ii4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+WG1sVW5zaWduZWRTaG9ydDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4mbmJzcDtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFN0cmluZy4gRm9yIGV4YW1wbGU6ICI8Y29kZT4mbHQ7eG1sLWZyYWdtZW50Jmd0OzEyMzQ1Jmx0Oy94bWwtZnJhZ21lbnQmZ3Q7PC9jb2RlPiIuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5GaWxlKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIEZpbGUuCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InBhcnNlKGphdmEuaW8uRmlsZSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9GaWxlLmh0bWwiPkZpbGU8L0E+Jm5ic3A7ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgRmlsZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5uZXQuVVJMKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9uZXQvVVJMLmh0bWwiPlVSTDwvQT4mbmJzcDt1KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLm5ldC5VUkwsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj5YbWxVbnNpZ25lZFNob3J0PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbmV0L1VSTC5odG1sIj5VUkw8L0E+Jm5ic3A7dSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgVVJMLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLklucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhbiBJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2UoamF2YS5pby5JbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JbnB1dFN0cmVhbS5odG1sIj5JbnB1dFN0cmVhbTwvQT4mbmJzcDtpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlcikiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj5YbWxVbnNpZ25lZFNob3J0PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vUmVhZGVyLmh0bWwiPlJlYWRlcjwvQT4mbmJzcDtyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGEgUmVhZGVyLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj5JT0V4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShqYXZhLmlvLlJlYWRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9SZWFkZXIuaHRtbCI+UmVhZGVyPC9BPiZuYnNwO3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+Jm5ic3A7b3B0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPklPRXhjZXB0aW9uPC9BPjwvUFJFPgotPERMPgotPEREPlBhcnNlcyBhIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj48Q09ERT5YbWxVbnNpZ25lZFNob3J0PC9DT0RFPjwvQT4gZnJhZ21lbnQgZnJvbSBhIFJlYWRlci4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vSU9FeGNlcHRpb24uaHRtbCI+SU9FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0icGFyc2Uob3JnLnczYy5kb20uTm9kZSkiPjwhLS0gLS0+PC9BPjxIMz4KLXBhcnNlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sIj5YbWxVbnNpZ25lZFNob3J0PC9BPiA8Qj5wYXJzZTwvQj4oPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy93M2MvZG9tL05vZGUuaHRtbCI+Tm9kZTwvQT4mbmJzcDtub2RlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRTaG9ydDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZShvcmcudzNjLmRvbS5Ob2RlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+WG1sVW5zaWduZWRTaG9ydDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9vcmcvdzNjL2RvbS9Ob2RlLmh0bWwiPk5vZGU8L0E+Jm5ic3A7bm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRTaG9ydDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYSBET00gTm9kZS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtKSI+PCEtLSAtLT48L0E+PEgzPgotcGFyc2U8L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPlhtbFVuc2lnbmVkU2hvcnQ8L0E+IDxCPnBhcnNlPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5QYXJzZXMgYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRTaG9ydDwvQ09ERT48L0E+IGZyYWdtZW50IGZyb20gYW4gWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJwYXJzZSh3ZWJsb2dpYy54bWwuc3RyZWFtLlhNTElucHV0U3RyZWFtLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj48IS0tIC0tPjwvQT48SDM+Ci1wYXJzZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+WG1sVW5zaWduZWRTaG9ydDwvQT4gPEI+cGFyc2U8L0I+KDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+Jm5ic3A7eGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT3B0aW9ucy5odG1sIj5YbWxPcHRpb25zPC9BPiZuYnNwO29wdGlvbnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UGFyc2VzIGEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkU2hvcnQ8L0NPREU+PC9BPiBmcmFnbWVudCBmcm9tIGFuIFhNTElucHV0U3RyZWFtLgotPFA+Ci08REQ+PERMPgotCi08REQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPjwvQ09ERT4KLTxERD48Q09ERT48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9DT0RFPjwvREw+Ci08L0REPgotPC9ETD4KLTxIUj4KLQotPEEgTkFNRT0ibmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtKHdlYmxvZ2ljLnhtbC5zdHJlYW0uWE1MSW5wdXRTdHJlYW0pIj48IS0tIC0tPjwvQT48SDM+Ci1uZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW08L0gzPgotPFBSRT4KLXB1YmxpYyBzdGF0aWMgPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4gPEI+bmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9CPig8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTElucHV0U3RyZWFtLmh0bWwiPlhNTElucHV0U3RyZWFtPC9BPiZuYnNwO3hpcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5YTUxTdHJlYW1FeGNlcHRpb248L0E+PC9QUkU+Ci08REw+Ci08REQ+UmV0dXJucyBhIHZhbGlkYXRpbmcgWE1MSW5wdXRTdHJlYW0uCi08UD4KLTxERD48REw+Ci0KLTxERD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5YbWxFeGNlcHRpb248L0E+PC9DT0RFPgotPEREPjxDT0RFPjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L0NPREU+PC9ETD4KLTwvREQ+Ci08L0RMPgotPEhSPgotCi08QSBOQU1FPSJuZXdWYWxpZGF0aW5nWE1MSW5wdXRTdHJlYW0od2VibG9naWMueG1sLnN0cmVhbS5YTUxJbnB1dFN0cmVhbSwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+PCEtLSAtLT48L0E+PEgzPgotbmV3VmFsaWRhdGluZ1hNTElucHV0U3RyZWFtPC9IMz4KLTxQUkU+Ci1wdWJsaWMgc3RhdGljIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MSW5wdXRTdHJlYW0uaHRtbCI+WE1MSW5wdXRTdHJlYW08L0E+IDxCPm5ld1ZhbGlkYXRpbmdYTUxJbnB1dFN0cmVhbTwvQj4oPEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxJbnB1dFN0cmVhbS5odG1sIj5YTUxJbnB1dFN0cmVhbTwvQT4mbmJzcDt4aXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+WG1sT3B0aW9uczwvQT4mbmJzcDtvcHRpb25zKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+WG1sRXhjZXB0aW9uPC9BPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT48L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS4KLTxQPgotPEREPjxETD4KLQotPEREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0NPREU+Ci08REQ+PENPREU+PEEgSFJFRj0iaHR0cDovL2UtZG9jcy5iZWEuY29tL3dscy9kb2NzODEvamF2YWRvY3Mvd2VibG9naWMveG1sL3N0cmVhbS9YTUxTdHJlYW1FeGNlcHRpb24uaHRtbCI+WE1MU3RyZWFtRXhjZXB0aW9uPC9BPjwvQ09ERT48L0RMPgotPC9ERD4KLTwvREw+Ci08IS0tID09PT09PT09PSBFTkQgT0YgQ0xBU1MgREFUQSA9PT09PT09PT0gLS0+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9vdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPkNsYXNzPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9kZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2hlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwO05FWFQgQ0xBU1M8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDtORVNURUQmbmJzcDt8Jm5ic3A7RklFTEQmbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDtGSUVMRCZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ3MzllNS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NzEgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1OCBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLVhtbFVuc2lnbmVkU2hvcnQgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sVW5zaWduZWRTaG9ydCxYbWxVbnNpZ25lZFNob3J0IGludGVyZmFjZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iWG1sVW5zaWduZWRTaG9ydCAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5DbGFzczwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPjxCPlBSRVYgQ0xBU1M8L0I+PC9BPiZuYnNwOwotJm5ic3A7TkVYVCBDTEFTUzwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJYbWxVbnNpZ25lZFNob3J0Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLSAgU1VNTUFSWTombmJzcDs8QSBIUkVGPSIjbmVzdGVkX2NsYXNzX3N1bW1hcnkiPk5FU1RFRDwvQT4mbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI2ZpZWxkX3N1bW1hcnkiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9zdW1tYXJ5Ij5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08VEQgVkFMSUdOPSJ0b3AiIENMQVNTPSJOYXZCYXJDZWxsMyI+PEZPTlQgU0laRT0iLTIiPgotREVUQUlMOiZuYnNwOzxBIEhSRUY9IiNmaWVsZF9kZXRhaWwiPkZJRUxEPC9BPiZuYnNwO3wmbmJzcDtDT05TVFImbmJzcDt8Jm5ic3A7PEEgSFJFRj0iI21ldGhvZF9kZXRhaWwiPk1FVEhPRDwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci08IS0tID09PT09PT09IFNUQVJUIE9GIENMQVNTIERBVEEgPT09PT09PT0gLS0+Ci08SDI+Ci08Rk9OVCBTSVpFPSItMSI+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zPC9GT05UPgotPEJSPgotSW50ZXJmYWNlIFhtbFVuc2lnbmVkU2hvcnQ8L0gyPgotPERMPgotPERUPjxCPkFsbCBTdXBlcmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj5YbWxUb2tlblNvdXJjZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj5YbWxVbnNpZ25lZExvbmc8L0E+PC9ERD4KLTwvREw+Ci08REw+Ci08RFQ+PEI+QWxsIEtub3duIFN1YmludGVyZmFjZXM6PC9CPiA8REQ+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+WG1sVW5zaWduZWRCeXRlPC9BPjwvREQ+Ci08L0RMPgotPEhSPgotPERMPgotPERUPnB1YmxpYyBpbnRlcmZhY2UgPEI+WG1sVW5zaWduZWRTaG9ydDwvQj48RFQ+ZXh0ZW5kcyA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPlhtbFVuc2lnbmVkSW50PC9BPjwvREw+Ci0KLTxQPgotQ29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Vuc2lnbmVkU2hvcnQiPnhzOnVuc2lnbmVkU2hvcnQ8L2E+IHR5cGUuCi0gT25lIG9mIHRoZSBkZXJpdmVkIHR5cGVzIGJhc2VkIG9uIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZGVjaW1hbCI+eHM6ZGVjaW1hbDwvYT4uCi0gPHA+Ci0gVmVyaWZpZWQgdG8gYmUgaW4gdGhlIHJhbmdlIDAuLjY1NTM1IHdoZW4gdmFsaWRhdGluZy4KLSA8cD4KLSBDb252ZXJ0aWJsZSB0byBhIEphdmEgaW50LgotPFA+Ci0KLTxQPgotPEhSPgotCi08UD4KLTwhLS0gPT09PT09PT0gTkVTVEVEIENMQVNTIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9Im5lc3RlZF9jbGFzc19zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPk5lc3RlZCBDbGFzcyBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+c3RhdGljJm5ic3A7Y2xhc3M8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5PC9BPjwvQj48L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO0EgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRTaG9ydDwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVW5zaWduZWRJbnQiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCI+WG1sVW5zaWduZWRJbnQ8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5GYWN0b3J5Lmh0bWwiPlhtbFVuc2lnbmVkSW50LkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVW5zaWduZWRMb25nIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj5YbWxVbnNpZ25lZExvbmc8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZExvbmcuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxOb25OZWdhdGl2ZUludGVnZXIiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbE5vbk5lZ2F0aXZlSW50ZWdlci5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEludGVnZXIiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5OZXN0ZWQgY2xhc3NlcyBpbmhlcml0ZWQgZnJvbSBjbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj5YbWxJbnRlZ2VyPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbEludGVnZXIuRmFjdG9yeTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibmVzdGVkX2NsYXNzZXNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxEZWNpbWFsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TmVzdGVkIGNsYXNzZXMgaW5oZXJpdGVkIGZyb20gY2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+WG1sRGVjaW1hbDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuRmFjdG9yeS5odG1sIj5YbWxEZWNpbWFsLkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im5lc3RlZF9jbGFzc2VzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLkZhY3RvcnkuaHRtbCI+WG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJuZXN0ZWRfY2xhc3Nlc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk5lc3RlZCBjbGFzc2VzIGluaGVyaXRlZCBmcm9tIGNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotPCEtLSA9PT09PT09PT09PSBGSUVMRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJmaWVsZF9zdW1tYXJ5Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkZpZWxkIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgV0lEVEg9IjElIj48Rk9OVCBTSVpFPSItMSI+Ci08Q09ERT5zdGF0aWMmbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT48L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwjdHlwZSI+dHlwZTwvQT48L0I+PC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtUaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuPC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0iZmllbGRzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+RmllbGRzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPlhtbE9iamVjdDwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0VRVUFMIj5FUVVBTDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjR1JFQVRFUl9USEFOIj5HUkVBVEVSX1RIQU48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI0xFU1NfVEhBTiI+TEVTU19USEFOPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNOT1RfRVFVQUwiPk5PVF9FUVVBTDwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7Ci08IS0tID09PT09PT09IENPTlNUUlVDVE9SIFNVTU1BUlkgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09IE1FVEhPRCBTVU1NQVJZID09PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2Rfc3VtbWFyeSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5NZXRob2QgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO2ludDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCNnZXRJbnRWYWx1ZSgpIj5nZXRJbnRWYWx1ZTwvQT48L0I+KCk8L0NPREU+Ci0KLTxCUj4KLSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1JldHVybnMgdGhpcyB2YWx1ZSBhcyBhbiBpbnQ8L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7aW50PC9DT0RFPjwvRk9OVD48L1REPgotPFREPjxDT0RFPjxCPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sI2ludFZhbHVlKCkiPmludFZhbHVlPC9BPjwvQj4oKTwvQ09ERT4KLQotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCNnZXRJbnRWYWx1ZSgpIj48Q09ERT5nZXRJbnRWYWx1ZSgpPC9DT0RFPjwvQT48L0k+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBXSURUSD0iMSUiPjxGT05UIFNJWkU9Ii0xIj4KLTxDT0RFPiZuYnNwO3ZvaWQ8L0NPREU+PC9GT05UPjwvVEQ+Ci08VEQ+PENPREU+PEI+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwjc2V0KGludCkiPnNldDwvQT48L0I+KGludCZuYnNwO3YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sI3NldEludFZhbHVlKGludCkiPjxDT0RFPnNldEludFZhbHVlKGludCk8L0NPREU+PC9BPjwvST48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFdJRFRIPSIxJSI+PEZPTlQgU0laRT0iLTEiPgotPENPREU+Jm5ic3A7dm9pZDwvQ09ERT48L0ZPTlQ+PC9URD4KLTxURD48Q09ERT48Qj48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCNzZXRJbnRWYWx1ZShpbnQpIj5zZXRJbnRWYWx1ZTwvQT48L0I+KGludCZuYnNwO3YpPC9DT0RFPgotCi08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtTZXRzIHRoaXMgdmFsdWUgYXMgYW4gaW50PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFVuc2lnbmVkSW50Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPlhtbFVuc2lnbmVkSW50PC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuaHRtbCNnZXRMb25nVmFsdWUoKSI+Z2V0TG9uZ1ZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sI2xvbmdWYWx1ZSgpIj5sb25nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwjc2V0KGxvbmcpIj5zZXQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwjc2V0TG9uZ1ZhbHVlKGxvbmcpIj5zZXRMb25nVmFsdWU8L0E+PC9DT0RFPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOzxBIE5BTUU9Im1ldGhvZHNfaW5oZXJpdGVkX2Zyb21fY2xhc3Nfb3JnLmFwYWNoZS54bWxiZWFucy5YbWxJbnRlZ2VyIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCI+WG1sSW50ZWdlcjwvQT48L0I+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURD48Q09ERT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuaHRtbCNiaWdJbnRlZ2VyVmFsdWUoKSI+YmlnSW50ZWdlclZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwjZ2V0QmlnSW50ZWdlclZhbHVlKCkiPmdldEJpZ0ludGVnZXJWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI3NldChqYXZhLm1hdGguQmlnSW50ZWdlcikiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sI3NldEJpZ0ludGVnZXJWYWx1ZShqYXZhLm1hdGguQmlnSW50ZWdlcikiPnNldEJpZ0ludGVnZXJWYWx1ZTwvQT48L0NPREU+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotJm5ic3A7PEEgTkFNRT0ibWV0aG9kc19pbmhlcml0ZWRfZnJvbV9jbGFzc19vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbERlY2ltYWwiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sIj5YbWxEZWNpbWFsPC9BPjwvQj48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREPjxDT0RFPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5odG1sI2JpZ0RlY2ltYWxWYWx1ZSgpIj5iaWdEZWNpbWFsVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCNnZXRCaWdEZWNpbWFsVmFsdWUoKSI+Z2V0QmlnRGVjaW1hbFZhbHVlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjc2V0KGphdmEubWF0aC5CaWdEZWNpbWFsKSI+c2V0PC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwjc2V0QmlnRGVjaW1hbFZhbHVlKGphdmEubWF0aC5CaWdEZWNpbWFsKSI+c2V0QmlnRGVjaW1hbFZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sQW55U2ltcGxlVHlwZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREPjxCPk1ldGhvZHMgaW5oZXJpdGVkIGZyb20gaW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwiPlhtbEFueVNpbXBsZVR5cGU8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlTaW1wbGVUeXBlLmh0bWwjZ2V0U3RyaW5nVmFsdWUoKSI+Z2V0U3RyaW5nVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCNzZXQoamF2YS5sYW5nLlN0cmluZykiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3NldFN0cmluZ1ZhbHVlKGphdmEubGFuZy5TdHJpbmcpIj5zZXRTdHJpbmdWYWx1ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sI3N0cmluZ1ZhbHVlKCkiPnN0cmluZ1ZhbHVlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sT2JqZWN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQ+PEI+TWV0aG9kcyBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjaGFuZ2VUeXBlKG9yZy5hcGFjaGUueG1sYmVhbnMuU2NoZW1hVHlwZSkiPmNoYW5nZVR5cGU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvbXBhcmVUbyhqYXZhLmxhbmcuT2JqZWN0KSI+Y29tcGFyZVRvPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNjb21wYXJlVmFsdWUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj5jb21wYXJlVmFsdWU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2NvcHkoKSI+Y29weTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjZXhlY1F1ZXJ5KGphdmEubGFuZy5TdHJpbmcpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2V4ZWNRdWVyeShqYXZhLmxhbmcuU3RyaW5nLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5leGVjUXVlcnk8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI2lzSW1tdXRhYmxlKCkiPmlzSW1tdXRhYmxlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNpc05pbCgpIj5pc05pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2NoZW1hVHlwZSgpIj5zY2hlbWFUeXBlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcpIj5zZWxlY3RQYXRoPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCNzZWxlY3RQYXRoKGphdmEubGFuZy5TdHJpbmcsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNlbGVjdFBhdGg8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3NldChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9iamVjdCkiPnNldDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2V0TmlsKCkiPnNldE5pbDwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdG9TdHJpbmcoKSI+dG9TdHJpbmc8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sI3ZhbGlkYXRlKCkiPnZhbGlkYXRlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCN2YWxpZGF0ZShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj52YWxpZGF0ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVFcXVhbHMob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPYmplY3QpIj52YWx1ZUVxdWFsczwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjdmFsdWVIYXNoQ29kZSgpIj52YWx1ZUhhc2hDb2RlPC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDs8QSBOQU1FPSJtZXRob2RzX2luaGVyaXRlZF9mcm9tX2NsYXNzX29yZy5hcGFjaGUueG1sYmVhbnMuWG1sVG9rZW5Tb3VyY2UiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURD48Qj5NZXRob2RzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+WG1sVG9rZW5Tb3VyY2U8L0E+PC9CPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQ+PENPREU+PEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI2RvY3VtZW50UHJvcGVydGllcygpIj5kb2N1bWVudFByb3BlcnRpZXM8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbW9uaXRvcigpIj5tb25pdG9yPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0N1cnNvcigpIj5uZXdDdXJzb3I8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3RG9tTm9kZSgpIj5uZXdEb21Ob2RlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld0RvbU5vZGUob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3RG9tTm9kZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbSgpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdJbnB1dFN0cmVhbShvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdJbnB1dFN0cmVhbTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNuZXdSZWFkZXIoKSI+bmV3UmVhZGVyPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI25ld1JlYWRlcihvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5uZXdSZWFkZXI8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0oKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjbmV3WE1MSW5wdXRTdHJlYW0ob3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+bmV3WE1MSW5wdXRTdHJlYW08L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShvcmcueG1sLnNheC5Db250ZW50SGFuZGxlciwgb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCNzYXZlKG9yZy54bWwuc2F4LkNvbnRlbnRIYW5kbGVyLCBvcmcueG1sLnNheC5leHQuTGV4aWNhbEhhbmRsZXIsIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLkZpbGUpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5GaWxlLCBvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0pIj5zYXZlPC9BPiwgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sI3NhdmUoamF2YS5pby5PdXRwdXRTdHJlYW0sIG9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucykiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlcikiPnNhdmU8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjc2F2ZShqYXZhLmlvLldyaXRlciwgb3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zKSI+c2F2ZTwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCN4bWxUZXh0KCkiPnhtbFRleHQ8L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuU291cmNlLmh0bWwjeG1sVGV4dChvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbE9wdGlvbnMpIj54bWxUZXh0PC9BPjwvQ09ERT48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLTxQPgotCi08IS0tID09PT09PT09PT09PSBGSUVMRCBERVRBSUwgPT09PT09PT09PT0gLS0+Ci0KLTxBIE5BTUU9ImZpZWxkX2RldGFpbCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5GaWVsZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0idHlwZSI+PCEtLSAtLT48L0E+PEgzPgotdHlwZTwvSDM+Ci08UFJFPgotcHVibGljIHN0YXRpYyBmaW5hbCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+U2NoZW1hVHlwZTwvQT4gPEI+dHlwZTwvQj48L1BSRT4KLTxETD4KLTxERD5UaGUgY29uc3RhbnQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLmh0bWwiPjxDT0RFPlNjaGVtYVR5cGU8L0NPREU+PC9BPiBvYmplY3QgcmVwcmVzZW50aW5nIHRoaXMgc2NoZW1hIHR5cGUuCi08UD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08IS0tID09PT09PT09PSBDT05TVFJVQ1RPUiBERVRBSUwgPT09PT09PT0gLS0+Ci0KLQotPCEtLSA9PT09PT09PT09PT0gTUVUSE9EIERFVEFJTCA9PT09PT09PT09IC0tPgotCi08QSBOQU1FPSJtZXRob2RfZGV0YWlsIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPk1ldGhvZCBEZXRhaWw8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEEgTkFNRT0iZ2V0SW50VmFsdWUoKSI+PCEtLSAtLT48L0E+PEgzPgotZ2V0SW50VmFsdWU8L0gzPgotPFBSRT4KLXB1YmxpYyBpbnQgPEI+Z2V0SW50VmFsdWU8L0I+KCk8L1BSRT4KLTxETD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYW4gaW50Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldEludFZhbHVlKGludCkiPjwhLS0gLS0+PC9BPjxIMz4KLXNldEludFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgdm9pZCA8Qj5zZXRJbnRWYWx1ZTwvQj4oaW50Jm5ic3A7dik8L1BSRT4KLTxETD4KLTxERD5TZXRzIHRoaXMgdmFsdWUgYXMgYW4gaW50Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9ImludFZhbHVlKCkiPjwhLS0gLS0+PC9BPjxIMz4KLWludFZhbHVlPC9IMz4KLTxQUkU+Ci1wdWJsaWMgaW50IDxCPmludFZhbHVlPC9CPigpPC9QUkU+Ci08REw+Ci08REQ+PEI+RGVwcmVjYXRlZC48L0I+Jm5ic3A7PEk+cmVwbGFjZWQgd2l0aCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCNnZXRJbnRWYWx1ZSgpIj48Q09ERT5nZXRJbnRWYWx1ZSgpPC9DT0RFPjwvQT48L0k+Ci08UD4KLTxERD5SZXR1cm5zIHRoaXMgdmFsdWUgYXMgYW4gaW50Ci08UD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTxERD48REw+Ci08L0RMPgotPC9ERD4KLTwvREw+Ci08SFI+Ci0KLTxBIE5BTUU9InNldChpbnQpIj48IS0tIC0tPjwvQT48SDM+Ci1zZXQ8L0gzPgotPFBSRT4KLXB1YmxpYyB2b2lkIDxCPnNldDwvQj4oaW50Jm5ic3A7dik8L1BSRT4KLTxETD4KLTxERD48Qj5EZXByZWNhdGVkLjwvQj4mbmJzcDs8ST5yZXBsYWNlZCB3aXRoIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRTaG9ydC5odG1sI3NldEludFZhbHVlKGludCkiPjxDT0RFPnNldEludFZhbHVlKGludCk8L0NPREU+PC9BPjwvST4KLTxQPgotPEREPlNldHMgdGhpcyB2YWx1ZSBhcyBhbiBpbnQKLTxQPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPEREPjxETD4KLTwvREw+Ci08L0REPgotPC9ETD4KLTwhLS0gPT09PT09PT09IEVORCBPRiBDTEFTUyBEQVRBID09PT09PT09PSAtLT4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+Q2xhc3M8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkTG9uZy5odG1sIj48Qj5QUkVWIENMQVNTPC9CPjwvQT4mbmJzcDsKLSZuYnNwO05FWFQgQ0xBU1M8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0iWG1sVW5zaWduZWRTaG9ydC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9Ii4uLy4uLy4uL2FsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTxUUj4KLTxURCBWQUxJR049InRvcCIgQ0xBU1M9Ik5hdkJhckNlbGwzIj48Rk9OVCBTSVpFPSItMiI+Ci0gIFNVTU1BUlk6Jm5ic3A7PEEgSFJFRj0iI25lc3RlZF9jbGFzc19zdW1tYXJ5Ij5ORVNURUQ8L0E+Jm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNmaWVsZF9zdW1tYXJ5Ij5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2Rfc3VtbWFyeSI+TUVUSE9EPC9BPjwvRk9OVD48L1REPgotPFREIFZBTElHTj0idG9wIiBDTEFTUz0iTmF2QmFyQ2VsbDMiPjxGT05UIFNJWkU9Ii0yIj4KLURFVEFJTDombmJzcDs8QSBIUkVGPSIjZmllbGRfZGV0YWlsIj5GSUVMRDwvQT4mbmJzcDt8Jm5ic3A7Q09OU1RSJm5ic3A7fCZuYnNwOzxBIEhSRUY9IiNtZXRob2RfZGV0YWlsIj5NRVRIT0Q8L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9wYWNrYWdlLWZyYW1lLmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9wYWNrYWdlLWZyYW1lLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiMDJjYTQuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvcGFja2FnZS1mcmFtZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQ3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTYgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJvcmcuYXBhY2hlLnhtbGJlYW5zIHBhY2thZ2UiPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9Ii4uLy4uLy4uL3N0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9Im9yZy5hcGFjaGUueG1sYmVhbnMgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLTxGT05UIHNpemU9IisxIiBDTEFTUz0iRnJhbWVUaXRsZUZvbnQiPgotPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9wYWNrYWdlLXN1bW1hcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5vcmcuYXBhY2hlLnhtbGJlYW5zPC9BPjwvRk9OVD4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUj4KLTxURCBOT1dSQVA+PEZPTlQgc2l6ZT0iKzEiIENMQVNTPSJGcmFtZUhlYWRpbmdGb250Ij4KLUludGVyZmFjZXM8L0ZPTlQ+Jm5ic3A7Ci08Rk9OVCBDTEFTUz0iRnJhbWVJdGVtRm9udCI+Ci08QlI+Ci08QSBIUkVGPSJHRGF0ZVNwZWNpZmljYXRpb24uaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5HRGF0ZVNwZWNpZmljYXRpb248L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlNjaGVtYUF0dHJpYnV0ZUdyb3VwLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+U2NoZW1hQXR0cmlidXRlR3JvdXA8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5TY2hlbWFBdHRyaWJ1dGVNb2RlbDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJTY2hlbWFDb21wb25lbnQuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5TY2hlbWFDb21wb25lbnQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iU2NoZW1hRmllbGQuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5TY2hlbWFGaWVsZDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJTY2hlbWFHbG9iYWxBdHRyaWJ1dGUuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5TY2hlbWFHbG9iYWxBdHRyaWJ1dGU8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iU2NoZW1hR2xvYmFsRWxlbWVudC5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlNjaGVtYUdsb2JhbEVsZW1lbnQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+U2NoZW1hSWRlbnRpdHlDb25zdHJhaW50PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlNjaGVtYUxvY2FsQXR0cmlidXRlLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+U2NoZW1hTG9jYWxBdHRyaWJ1dGU8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iU2NoZW1hTG9jYWxFbGVtZW50Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+U2NoZW1hTG9jYWxFbGVtZW50PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlNjaGVtYU1vZGVsR3JvdXAuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5TY2hlbWFNb2RlbEdyb3VwPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlNjaGVtYVBhcnRpY2xlLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+U2NoZW1hUGFydGljbGU8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iU2NoZW1hUHJvcGVydHkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5TY2hlbWFQcm9wZXJ0eTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJTY2hlbWFTdHJpbmdFbnVtRW50cnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5TY2hlbWFTdHJpbmdFbnVtRW50cnk8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iU2NoZW1hVHlwZS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlNjaGVtYVR5cGU8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iU2NoZW1hVHlwZUxvYWRlci5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlNjaGVtYVR5cGVMb2FkZXI8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iU2NoZW1hVHlwZVN5c3RlbS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlNjaGVtYVR5cGVTeXN0ZW08L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iU2ltcGxlVmFsdWUuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5TaW1wbGVWYWx1ZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxBbnlTaW1wbGVUeXBlLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sQW55U2ltcGxlVHlwZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxBbnlVUkkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxBbnlVUkk8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sQmFzZTY0QmluYXJ5Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sQmFzZTY0QmluYXJ5PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbEJvb2xlYW4uaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxCb29sZWFuPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbEJ5dGUuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxCeXRlPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbEN1cnNvci5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbEN1cnNvcjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxDdXJzb3IuQ2hhbmdlU3RhbXAuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxDdXJzb3IuQ2hhbmdlU3RhbXA8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sQ3Vyc29yLlhtbE1hcmsuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxDdXJzb3IuWG1sTWFyazwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxEYXRlLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sRGF0ZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxEYXRlVGltZS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbERhdGVUaW1lPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbERlY2ltYWwuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxEZWNpbWFsPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbERvdWJsZS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbERvdWJsZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxEdXJhdGlvbi5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbER1cmF0aW9uPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbEVOVElUSUVTLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sRU5USVRJRVM8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sRU5USVRZLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sRU5USVRZPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbEZhY3RvcnlIb29rLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sRmFjdG9yeUhvb2s8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sRmxvYXQuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxGbG9hdDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxHRGF5Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sR0RheTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxHTW9udGguaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxHTW9udGg8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sR01vbnRoRGF5Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sR01vbnRoRGF5PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbEdZZWFyLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sR1llYXI8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sR1llYXJNb250aC5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbEdZZWFyTW9udGg8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sSGV4QmluYXJ5Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sSGV4QmluYXJ5PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbElELmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sSUQ8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sSURSRUYuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxJRFJFRjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxJRFJFRlMuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxJRFJFRlM8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sSW50Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sSW50PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbEludGVnZXIuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxJbnRlZ2VyPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbExhbmd1YWdlLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sTGFuZ3VhZ2U8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sTG9uZy5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbExvbmc8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sTmFtZS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbE5hbWU8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sTkNOYW1lLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sTkNOYW1lPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbE5lZ2F0aXZlSW50ZWdlci5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbE5lZ2F0aXZlSW50ZWdlcjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxOTVRPS0VOLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sTk1UT0tFTjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxOTVRPS0VOUy5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbE5NVE9LRU5TPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sTk9UQVRJT04uaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxOT1RBVElPTjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxPYmplY3QuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxPYmplY3Q8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sUG9zaXRpdmVJbnRlZ2VyPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbFFOYW1lLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sUU5hbWU8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sU2F4SGFuZGxlci5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbFNheEhhbmRsZXI8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sU2hvcnQuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxTaG9ydDwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxTdHJpbmcuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxTdHJpbmc8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sVGltZS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbFRpbWU8L0k+PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sVG9rZW4uaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj48ST5YbWxUb2tlbjwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxUb2tlblNvdXJjZS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbFRva2VuU291cmNlPC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbFVuc2lnbmVkQnl0ZS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbFVuc2lnbmVkQnl0ZTwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxVbnNpZ25lZEludC5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbFVuc2lnbmVkSW50PC9JPjwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbFVuc2lnbmVkTG9uZy5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPjxJPlhtbFVuc2lnbmVkTG9uZzwvST48L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxVbnNpZ25lZFNob3J0Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+PEk+WG1sVW5zaWduZWRTaG9ydDwvST48L0E+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotCi08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSI+Ci08VFI+Ci08VEQgTk9XUkFQPjxGT05UIHNpemU9IisxIiBDTEFTUz0iRnJhbWVIZWFkaW5nRm9udCI+Ci1DbGFzc2VzPC9GT05UPiZuYnNwOwotPEZPTlQgQ0xBU1M9IkZyYW1lSXRlbUZvbnQiPgotPEJSPgotPEEgSFJFRj0iRmlsdGVyWG1sT2JqZWN0Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+RmlsdGVyWG1sT2JqZWN0PC9BPgotPEJSPgotPEEgSFJFRj0iR0RhdGUuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5HRGF0ZTwvQT4KLTxCUj4KLTxBIEhSRUY9IkdEYXRlQnVpbGRlci5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPkdEYXRlQnVpbGRlcjwvQT4KLTxCUj4KLTxBIEhSRUY9IkdEdXJhdGlvbi5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPkdEdXJhdGlvbjwvQT4KLTxCUj4KLTxBIEhSRUY9IkdEdXJhdGlvbkJ1aWxkZXIuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5HRHVyYXRpb25CdWlsZGVyPC9BPgotPEJSPgotPEEgSFJFRj0iUU5hbWVDYWNoZS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlFOYW1lQ2FjaGU8L0E+Ci08QlI+Ci08QSBIUkVGPSJRTmFtZVNldC5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlFOYW1lU2V0PC9BPgotPEJSPgotPEEgSFJFRj0iUU5hbWVTZXRCdWlsZGVyLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+UU5hbWVTZXRCdWlsZGVyPC9BPgotPEJSPgotPEEgSFJFRj0iU2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+U2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmPC9BPgotPEJSPgotPEEgSFJFRj0iU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlNjaGVtYUNvbXBvbmVudC5SZWY8L0E+Ci08QlI+Ci08QSBIUkVGPSJTY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+U2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZjwvQT4KLTxCUj4KLTxBIEhSRUY9IlNjaGVtYUdsb2JhbEVsZW1lbnQuUmVmLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+U2NoZW1hR2xvYmFsRWxlbWVudC5SZWY8L0E+Ci08QlI+Ci08QSBIUkVGPSJTY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+U2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZjwvQT4KLTxCUj4KLTxBIEhSRUY9IlNjaGVtYU1vZGVsR3JvdXAuUmVmLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+U2NoZW1hTW9kZWxHcm91cC5SZWY8L0E+Ci08QlI+Ci08QSBIUkVGPSJTY2hlbWFUeXBlLlJlZi5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlNjaGVtYVR5cGUuUmVmPC9BPgotPEJSPgotPEEgSFJFRj0iU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlN0cmluZ0VudW1BYnN0cmFjdEJhc2U8L0E+Ci08QlI+Ci08QSBIUkVGPSJTdHJpbmdFbnVtQWJzdHJhY3RCYXNlLlRhYmxlLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+U3RyaW5nRW51bUFic3RyYWN0QmFzZS5UYWJsZTwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbEFueVVSSS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sQW55VVJJLkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxCYXNlNjRCaW5hcnkuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbEJhc2U2NEJpbmFyeS5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sQmVhbnMuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxCZWFuczwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbEJvb2xlYW4uRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbEJvb2xlYW4uRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbEJ5dGUuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbEJ5dGUuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbENhbGVuZGFyLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sQ2FsZW5kYXI8L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxDdXJzb3IuVG9rZW5UeXBlLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sQ3Vyc29yLlRva2VuVHlwZTwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbEN1cnNvci5YbWxCb29rbWFyay5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbEN1cnNvci5YbWxCb29rbWFyazwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbERhdGUuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbERhdGUuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbERhdGVUaW1lLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxEYXRlVGltZS5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sRGVjaW1hbC5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sRG9jdW1lbnRQcm9wZXJ0aWVzLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sRG9jdW1lbnRQcm9wZXJ0aWVzPC9BPgotPEJSPgotPEEgSFJFRj0iWG1sRG91YmxlLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxEb3VibGUuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbER1cmF0aW9uLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxEdXJhdGlvbi5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sRU5USVRJRVMuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbEVOVElUSUVTLkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxFTlRJVFkuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbEVOVElUWS5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sRXJyb3IuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxFcnJvcjwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxGYWN0b3J5SG9vay5UaHJlYWRDb250ZXh0PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sRmxvYXQuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbEZsb2F0LkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxHRGF5LkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxHRGF5LkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxHTW9udGguRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbEdNb250aC5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sR01vbnRoRGF5LkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxHTW9udGhEYXkuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbEdZZWFyLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxHWWVhci5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sR1llYXJNb250aC5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sSGV4QmluYXJ5LkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxIZXhCaW5hcnkuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbElELkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxJRC5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sSURSRUYuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbElEUkVGLkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxJRFJFRlMuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbElEUkVGUy5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sSW50LkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxJbnQuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbEludGVnZXIuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbEludGVnZXIuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbExhbmd1YWdlLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxMYW5ndWFnZS5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sTGluZU51bWJlci5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbExpbmVOdW1iZXI8L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxMb25nLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxMb25nLkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxOYW1lLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxOYW1lLkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxOQ05hbWUuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbE5DTmFtZS5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxOZWdhdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbE5NVE9LRU4uRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbE5NVE9LRU4uRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbE5NVE9LRU5TLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxOTVRPS0VOUy5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxOb25OZWdhdGl2ZUludGVnZXIuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbE5vblBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxOb3JtYWxpemVkU3RyaW5nLkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sTk9UQVRJT04uRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbE9iamVjdC5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxPcHRpb25zLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sT3B0aW9uczwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxRTmFtZS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sUU5hbWUuRmFjdG9yeTwvQT4KLTxCUj4KLTxBIEhSRUY9IlhtbFNob3J0LkZhY3RvcnkuaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5YbWxTaG9ydC5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sU2ltcGxlTGlzdC5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbFNpbXBsZUxpc3Q8L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxTdHJpbmcuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbFN0cmluZy5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sVGltZS5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sVGltZS5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sVG9rZW4uRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbFRva2VuLkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxVbnNpZ25lZEJ5dGUuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbFVuc2lnbmVkQnl0ZS5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbFVuc2lnbmVkSW50LkZhY3Rvcnk8L0E+Ci08QlI+Ci08QSBIUkVGPSJYbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbFVuc2lnbmVkTG9uZy5GYWN0b3J5PC9BPgotPEJSPgotPEEgSFJFRj0iWG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5Lmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5PC9BPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLQotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiPgotPFRSPgotPFREIE5PV1JBUD48Rk9OVCBzaXplPSIrMSIgQ0xBU1M9IkZyYW1lSGVhZGluZ0ZvbnQiPgotRXhjZXB0aW9uczwvRk9OVD4mbmJzcDsKLTxGT05UIENMQVNTPSJGcmFtZUl0ZW1Gb250Ij4KLTxCUj4KLTxBIEhSRUY9IlNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCIgVEFSR0VUPSJjbGFzc0ZyYW1lIj5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uPC9BPgotPEJSPgotPEEgSFJFRj0iWG1sRXhjZXB0aW9uLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WG1sRXhjZXB0aW9uPC9BPgotPEJSPgotPEEgSFJFRj0iWG1sUnVudGltZUV4Y2VwdGlvbi5odG1sIiBUQVJHRVQ9ImNsYXNzRnJhbWUiPlhtbFJ1bnRpbWVFeGNlcHRpb248L0E+Ci08QlI+Ci08QSBIUkVGPSJYTUxTdHJlYW1WYWxpZGF0aW9uRXhjZXB0aW9uLmh0bWwiIFRBUkdFVD0iY2xhc3NGcmFtZSI+WE1MU3RyZWFtVmFsaWRhdGlvbkV4Y2VwdGlvbjwvQT48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL3BhY2thZ2Utc3VtbWFyeS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvcGFja2FnZS1zdW1tYXJ5Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2ZDQ2NjcuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL29yZy9hcGFjaGUveG1sYmVhbnMvcGFja2FnZS1zdW1tYXJ5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5MDUgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NiBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLW9yZy5hcGFjaGUueG1sYmVhbnMgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Im9yZy5hcGFjaGUueG1sYmVhbnMgcGFja2FnZSI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0ib3JnLmFwYWNoZS54bWxiZWFucyAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxCPlBSRVYgUEFDS0FHRTwvQj48L0E+Jm5ic3A7Ci0mbmJzcDtORVhUIFBBQ0tBR0U8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPEgyPgotUGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zCi08L0gyPgotUHJvdmlkZXMgY2xhc3NlcyBmb3IgWE1MIEJlYW5zIHNjaGVtYSwgaW5mb3NldCwgeHBhdGgsIGFuZCB4cXVlcnkgaGFuZGxpbmcuCi08UD4KLTxCPlNlZTo8L0I+Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8QSBIUkVGPSIjcGFja2FnZV9kZXNjcmlwdGlvbiI+PEI+RGVzY3JpcHRpb248L0I+PC9BPgotPFA+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkludGVyZmFjZSBTdW1tYXJ5PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IkdEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj48ST5HRGF0ZVNwZWNpZmljYXRpb248L0k+PC9BPjwvQj48L1REPgotPFREPlJlcHJlc2VudHMgYW4gWE1MIFNjaGVtYS1jb21wYXRpYmxlIEdyZWdvcmlhbiBkYXRlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj48ST5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9JPjwvQT48L0I+PC9URD4KLTxURD5SZXByZXNlbnRzIGFuIFhNTCBTY2hlbWEtY29tcGF0aWJsZSBkdXJhdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlFOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj48ST5RTmFtZVNldFNwZWNpZmljYXRpb248L0k+PC9BPjwvQj48L1REPgotPFREPlJlcHJlc2VudHMgYSBsYXR0aWNlIG9mIGZpbml0ZSBhbmQgaW5maW5pdGUgc2V0cyBvZiBRTmFtZXMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJTY2hlbWFBdHRyaWJ1dGVHcm91cC5odG1sIj48ST5TY2hlbWFBdHRyaWJ1dGVHcm91cDwvST48L0E+PC9CPjwvVEQ+Ci08VEQ+UmVwcmVzZW50cyBhbiBhdHRyaWJ1dGUgZ3JvdXAuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJTY2hlbWFBdHRyaWJ1dGVNb2RlbC5odG1sIj48ST5TY2hlbWFBdHRyaWJ1dGVNb2RlbDwvST48L0E+PC9CPjwvVEQ+Ci08VEQ+UmVwcmVzZW50cyB0aGUgYXR0cmlidXRlIHN0cnVjdHVyZSBhbGxvd2VkIG9uIGEgY29tcGxleCB0eXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iU2NoZW1hQ29tcG9uZW50Lmh0bWwiPjxJPlNjaGVtYUNvbXBvbmVudDwvST48L0E+PC9CPjwvVEQ+Ci08VEQ+UmVwcmVzZW50cyBhIGdsb2JhbCBTY2hlbWEgQ29tcG9uZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iU2NoZW1hRmllbGQuaHRtbCI+PEk+U2NoZW1hRmllbGQ8L0k+PC9BPjwvQj48L1REPgotPFREPlJlcHJlc2VudHMgYW4gZWxlbWVudCBvciBhbiBhdHRyaWJ1dGUgZGVjbGFyYXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJTY2hlbWFHbG9iYWxBdHRyaWJ1dGUuaHRtbCI+PEk+U2NoZW1hR2xvYmFsQXR0cmlidXRlPC9JPjwvQT48L0I+PC9URD4KLTxURD5SZXByZXNlbnRzIGEgZ2xvYmFsIGF0dHJpYnV0ZSBkZWZpbml0aW9uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJTY2hlbWFHbG9iYWxFbGVtZW50Lmh0bWwiPjxJPlNjaGVtYUdsb2JhbEVsZW1lbnQ8L0k+PC9BPjwvQj48L1REPgotPFREPlJlcHJlc2VudHMgYSBnbG9iYWwgZWxlbWVudCBkZWZpbml0aW9uLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Lmh0bWwiPjxJPlNjaGVtYUlkZW50aXR5Q29uc3RyYWludDwvST48L0E+PC9CPjwvVEQ+Ci08VEQ+UmVwcmVzZW50cyBhbiBpZGVudGl0eSBjb25zdHJhaW50IGRlZmluaXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJTY2hlbWFMb2NhbEF0dHJpYnV0ZS5odG1sIj48ST5TY2hlbWFMb2NhbEF0dHJpYnV0ZTwvST48L0E+PC9CPjwvVEQ+Ci08VEQ+UmVwcmVzZW50cyBhIGxvY2FsIG9yIGdsb2JhbCBhdHRyaWJ1dGUgZGVmaW5pdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlNjaGVtYUxvY2FsRWxlbWVudC5odG1sIj48ST5TY2hlbWFMb2NhbEVsZW1lbnQ8L0k+PC9BPjwvQj48L1REPgotPFREPlJlcHJlc2VudHMgYSBsb2NhbCBvciBnbG9iYWwgZWxlbWVudCBkZWZpbml0aW9uLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iU2NoZW1hTW9kZWxHcm91cC5odG1sIj48ST5TY2hlbWFNb2RlbEdyb3VwPC9JPjwvQT48L0I+PC9URD4KLTxURD5SZXByZXNlbnRzIGEgbW9kZWwgZ3JvdXAuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJTY2hlbWFQYXJ0aWNsZS5odG1sIj48ST5TY2hlbWFQYXJ0aWNsZTwvST48L0E+PC9CPjwvVEQ+Ci08VEQ+UmVwcmVzZW50cyBhIFNjaGVtYSBwYXJ0aWNsZSBkZWZpbml0aW9uLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iU2NoZW1hUHJvcGVydHkuaHRtbCI+PEk+U2NoZW1hUHJvcGVydHk8L0k+PC9BPjwvQj48L1REPgotPFREPlJlcHJlc2VudHMgYSBzdW1tYXJ5IG9mIHNpbWlsYXIgU2NoZW1hRmllbGRzIGluIGEgY29tcGxleCB0eXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iU2NoZW1hU3RyaW5nRW51bUVudHJ5Lmh0bWwiPjxJPlNjaGVtYVN0cmluZ0VudW1FbnRyeTwvST48L0E+PC9CPjwvVEQ+Ci08VEQ+RGVzY3JpYmVzIGEgY29kZS1nZW5lcmF0ZWQgc3RyaW5nIGVudW1lcmF0aW9uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJTY2hlbWFUeXBlLmh0bWwiPjxJPlNjaGVtYVR5cGU8L0k+PC9BPjwvQj48L1REPgotPFREPlJlcHJlc2VudHMgYSBzY2hlbWEgdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlNjaGVtYVR5cGVMb2FkZXIuaHRtbCI+PEk+U2NoZW1hVHlwZUxvYWRlcjwvST48L0E+PC9CPjwvVEQ+Ci08VEQ+UmVwcmVzZW50cyBhIHNlYXJjaGFibGUgc2V0IG9mIFhNTCBTY2hlbWEgY29tcG9uZW50IGRlZmluaXRpb25zLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iU2NoZW1hVHlwZVN5c3RlbS5odG1sIj48ST5TY2hlbWFUeXBlU3lzdGVtPC9JPjwvQT48L0I+PC9URD4KLTxURD5BIGZpbml0ZSBzZXQgb2YgWE1MIFNjaGVtYSBjb21wb25lbnQgZGVmaW5pdGlvbnMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJTaW1wbGVWYWx1ZS5odG1sIj48ST5TaW1wbGVWYWx1ZTwvST48L0E+PC9CPjwvVEQ+Ci08VEQ+QWxsIFhtbE9iamVjdCBpbXBsZW1lbnRhdGlvbnMgY2FuIGJlIGNvZXJjZWQgdG8gU2ltcGxlVmFsdWUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxBbnlTaW1wbGVUeXBlLmh0bWwiPjxJPlhtbEFueVNpbXBsZVR5cGU8L0k+PC9BPjwvQj48L1REPgotPFREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIuLi8uLi8uLi9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI1NpbXBsZV9UeXBlX0RlZmluaXRpb24iPnhzOmFueVNpbXBsZVR5cGU8L2E+IHR5cGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxBbnlVUkkuaHRtbCI+PEk+WG1sQW55VVJJPC9JPjwvQT48L0I+PC9URD4KLTxURD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iLi4vLi4vLi4vb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNhbnlVUkkiPnhzOmFueVVSSTwvYT4gdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbEJhc2U2NEJpbmFyeS5odG1sIj48ST5YbWxCYXNlNjRCaW5hcnk8L0k+PC9BPjwvQj48L1REPgotPFREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIuLi8uLi8uLi9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2Jhc2U2NEJpbmFyeSI+eHM6YmFzZTY0QmluYXJ5PC9hPiB0eXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sQm9vbGVhbi5odG1sIj48ST5YbWxCb29sZWFuPC9JPjwvQT48L0I+PC9URD4KLTxURD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iLi4vLi4vLi4vb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNib29sZWFuIj54czpib29sZWFuPC9hPiB0eXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sQnl0ZS5odG1sIj48ST5YbWxCeXRlPC9JPjwvQT48L0I+PC9URD4KLTxURD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iLi4vLi4vLi4vb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNieXRlIj54czpieXRlPC9hPiB0eXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sQ3Vyc29yLmh0bWwiPjxJPlhtbEN1cnNvcjwvST48L0E+PC9CPjwvVEQ+Ci08VEQ+UmVwcmVzZW50cyBhIHBvc2l0aW9uIGJldHdlZW4gdHdvIGxvZ2ljYWwgdG9rZW5zIGluIGFuIFhNTCBkb2N1bWVudC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbEN1cnNvci5DaGFuZ2VTdGFtcC5odG1sIj48ST5YbWxDdXJzb3IuQ2hhbmdlU3RhbXA8L0k+PC9BPjwvQj48L1REPgotPFREPlJlcHJlc2VudHMgdGhlIHN0YXRlIG9mIGEgZGNvdW1lbnQgYXQgYSBwYXJ0aWN1bGFyIHBvaW50Ci0gaW4gdGltZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbEN1cnNvci5YbWxNYXJrLmh0bWwiPjxJPlhtbEN1cnNvci5YbWxNYXJrPC9JPjwvQT48L0I+PC9URD4KLTxURD5BbiBhYnN0cmFjdCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj48Q09ERT5YbWxDdXJzb3I8L0NPREU+PC9BPiBmYWN0b3J5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sRGF0ZS5odG1sIj48ST5YbWxEYXRlPC9JPjwvQT48L0I+PC9URD4KLTxURD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iLi4vLi4vLi4vb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNkYXRlIj54czpkYXRlPC9hPiB0eXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sRGF0ZVRpbWUuaHRtbCI+PEk+WG1sRGF0ZVRpbWU8L0k+PC9BPjwvQj48L1REPgotPFREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIuLi8uLi8uLi9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2RhdGVUaW1lIj54czpkYXRlVGltZTwvYT4gdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbERlY2ltYWwuaHRtbCI+PEk+WG1sRGVjaW1hbDwvST48L0E+PC9CPjwvVEQ+Ci08VEQ+Q29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Ii4uLy4uLy4uL29yZ1xhcGFjaGVceG1sYmVhbnMvX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZGVjaW1hbCI+eHM6ZGVjaW1hbDwvYT4gdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbERvdWJsZS5odG1sIj48ST5YbWxEb3VibGU8L0k+PC9BPjwvQj48L1REPgotPFREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIuLi8uLi8uLi9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2RvdWJsZSI+eHM6ZG91YmxlPC9hPiB0eXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sRHVyYXRpb24uaHRtbCI+PEk+WG1sRHVyYXRpb248L0k+PC9BPjwvQj48L1REPgotPFREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIuLi8uLi8uLi9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2R1cmF0aW9uIj54czpkdXJhdGlvbjwvYT4gdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbEVOVElUSUVTLmh0bWwiPjxJPlhtbEVOVElUSUVTPC9JPjwvQT48L0I+PC9URD4KLTxURD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iLi4vLi4vLi4vb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNFTlRJVElFUyI+eHM6RU5USVRJRVM8L2E+IHR5cGUsCi0gYSBsaXN0IHR5cGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxFTlRJVFkuaHRtbCI+PEk+WG1sRU5USVRZPC9JPjwvQT48L0I+PC9URD4KLTxURD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iLi4vLi4vLi4vb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNFTlRJVFkiPnhzOkVOVElUWTwvYT4gdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbEZhY3RvcnlIb29rLmh0bWwiPjxJPlhtbEZhY3RvcnlIb29rPC9JPjwvQT48L0I+PC9URD4KLTxURD5BIGhvb2sgZm9yIHRoZSBYTUwgQmVhbiBGYWN0b3J5IG1lY2hhbmlzbS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbEZsb2F0Lmh0bWwiPjxJPlhtbEZsb2F0PC9JPjwvQT48L0I+PC9URD4KLTxURD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iLi4vLi4vLi4vb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNmbG9hdCI+eHM6ZmxvYXQ8L2E+IHR5cGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxHRGF5Lmh0bWwiPjxJPlhtbEdEYXk8L0k+PC9BPjwvQj48L1REPgotPFREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIuLi8uLi8uLi9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2dEYXkiPnhzOmdEYXk8L2E+IHR5cGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxHTW9udGguaHRtbCI+PEk+WG1sR01vbnRoPC9JPjwvQT48L0I+PC9URD4KLTxURD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iLi4vLi4vLi4vb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNnTW9udGgiPnhzOmdNb250aDwvYT4gdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbEdNb250aERheS5odG1sIj48ST5YbWxHTW9udGhEYXk8L0k+PC9BPjwvQj48L1REPgotPFREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIuLi8uLi8uLi9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2dNb250aERheSI+eHM6Z01vbnRoRGF5PC9hPiB0eXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sR1llYXIuaHRtbCI+PEk+WG1sR1llYXI8L0k+PC9BPjwvQj48L1REPgotPFREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIuLi8uLi8uLi9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2dZZWFyIj54czpnWWVhcjwvYT4gdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbEdZZWFyTW9udGguaHRtbCI+PEk+WG1sR1llYXJNb250aDwvST48L0E+PC9CPjwvVEQ+Ci08VEQ+Q29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Ii4uLy4uLy4uL29yZ1xhcGFjaGVceG1sYmVhbnMvX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jZ1llYXJNb250aCI+eHM6Z1llYXJNb250aDwvYT4gdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbEhleEJpbmFyeS5odG1sIj48ST5YbWxIZXhCaW5hcnk8L0k+PC9BPjwvQj48L1REPgotPFREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIuLi8uLi8uLi9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2hleEJpbmFyeSI+eHM6aGV4QmluYXJ5PC9hPiB0eXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sSUQuaHRtbCI+PEk+WG1sSUQ8L0k+PC9BPjwvQj48L1REPgotPFREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIuLi8uLi8uLi9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI0lEIj54czpJRDwvYT4gdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbElEUkVGLmh0bWwiPjxJPlhtbElEUkVGPC9JPjwvQT48L0I+PC9URD4KLTxURD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iLi4vLi4vLi4vb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNJRFJFRiI+eHM6SURSRUY8L2E+IHR5cGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxJRFJFRlMuaHRtbCI+PEk+WG1sSURSRUZTPC9JPjwvQT48L0I+PC9URD4KLTxURD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iLi4vLi4vLi4vb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNJRFJFRlMiPnhzOklEUkVGUzwvYT4gdHlwZSwKLSBhIGxpc3QgdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbEludC5odG1sIj48ST5YbWxJbnQ8L0k+PC9BPjwvQj48L1REPgotPFREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIuLi8uLi8uLi9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2ludCI+eHM6aW50PC9hPiB0eXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sSW50ZWdlci5odG1sIj48ST5YbWxJbnRlZ2VyPC9JPjwvQT48L0I+PC9URD4KLTxURD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iLi4vLi4vLi4vb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNpbnRlZ2VyIj54czppbnRlZ2VyPC9hPiB0eXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sTGFuZ3VhZ2UuaHRtbCI+PEk+WG1sTGFuZ3VhZ2U8L0k+PC9BPjwvQj48L1REPgotPFREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIuLi8uLi8uLi9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI2xhbmd1YWdlIj54czpsYW5ndWFnZTwvYT4gdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbExvbmcuaHRtbCI+PEk+WG1sTG9uZzwvST48L0E+PC9CPjwvVEQ+Ci08VEQ+Q29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Ii4uLy4uLy4uL29yZ1xhcGFjaGVceG1sYmVhbnMvX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jbG9uZyI+eHM6bG9uZzwvYT4gdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbE5hbWUuaHRtbCI+PEk+WG1sTmFtZTwvST48L0E+PC9CPjwvVEQ+Ci08VEQ+Q29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Ii4uLy4uLy4uL29yZ1xhcGFjaGVceG1sYmVhbnMvX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jTmFtZSI+eHM6TmFtZTwvYT4gdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbE5DTmFtZS5odG1sIj48ST5YbWxOQ05hbWU8L0k+PC9BPjwvQj48L1REPgotPFREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIuLi8uLi8uLi9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI05hbWUiPnhzOk5hbWU8L2E+IHR5cGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+PEk+WG1sTmVnYXRpdmVJbnRlZ2VyPC9JPjwvQT48L0I+PC9URD4KLTxURD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iLi4vLi4vLi4vb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNuZWdhdGl2ZUludGVnZXIiPnhzOm5lZ2F0aXZlSW50ZWdlcjwvYT4gdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbE5NVE9LRU4uaHRtbCI+PEk+WG1sTk1UT0tFTjwvST48L0E+PC9CPjwvVEQ+Ci08VEQ+Q29ycmVzcG9uZHMgdG8gdGhlIFhNTCBTY2hlbWEKLSA8YSB0YXJnZXQ9Ii4uLy4uLy4uL29yZ1xhcGFjaGVceG1sYmVhbnMvX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jTk1UT0tFTiI+eHM6Tk1UT0tFTjwvYT4gdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbE5NVE9LRU5TLmh0bWwiPjxJPlhtbE5NVE9LRU5TPC9JPjwvQT48L0I+PC9URD4KLTxURD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iLi4vLi4vLi4vb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNOTVRPS0VOUyI+eHM6Tk1UT0tFTlM8L2E+IHR5cGUsCi0gYSBsaXN0IHR5cGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PEk+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9JPjwvQT48L0I+PC9URD4KLTxURD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iLi4vLi4vLi4vb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNub25OZWdhdGl2ZUludGVnZXIiPnhzOm5vbk5lZ2F0aXZlSW50ZWdlcjwvYT4gdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbE5vblBvc2l0aXZlSW50ZWdlci5odG1sIj48ST5YbWxOb25Qb3NpdGl2ZUludGVnZXI8L0k+PC9BPjwvQj48L1REPgotPFREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIuLi8uLi8uLi9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI25vblBvc2l0aXZlSW50ZWdlciI+eHM6bm9uUG9zaXRpdmVJbnRlZ2VyPC9hPiB0eXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj48ST5YbWxOb3JtYWxpemVkU3RyaW5nPC9JPjwvQT48L0I+PC9URD4KLTxURD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iLi4vLi4vLi4vb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNub3JtYWxpemVkU3RyaW5nIj54czpub3JtYWxpemVkU3RyaW5nPC9hPiB0eXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sTk9UQVRJT04uaHRtbCI+PEk+WG1sTk9UQVRJT048L0k+PC9BPjwvQj48L1REPgotPFREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIuLi8uLi8uLi9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI05PVEFUSU9OIj54czpOT1RBVElPTjwvYT4gdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbE9iamVjdC5odG1sIj48ST5YbWxPYmplY3Q8L0k+PC9BPjwvQj48L1REPgotPFREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIuLi8uLi8uLi9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTEvI2tleS11clR5cGUiPnhzOmFueVR5cGU8L2E+LAotIHRoZSBiYXNlIHR5cGUgZm9yIGFsbCBYTUwgQmVhbnMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxQb3NpdGl2ZUludGVnZXIuaHRtbCI+PEk+WG1sUG9zaXRpdmVJbnRlZ2VyPC9JPjwvQT48L0I+PC9URD4KLTxURD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iLi4vLi4vLi4vb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNwb3NpdGl2ZUludGVnZXIiPnhzOnBvc2l0aXZlSW50ZWdlcjwvYT4gdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbFFOYW1lLmh0bWwiPjxJPlhtbFFOYW1lPC9JPjwvQT48L0I+PC9URD4KLTxURD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iLi4vLi4vLi4vb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyNRTmFtZSI+eHM6UU5hbWU8L2E+IHR5cGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxTYXhIYW5kbGVyLmh0bWwiPjxJPlhtbFNheEhhbmRsZXI8L0k+PC9BPjwvQj48L1REPgotPFREPkEgaG9sZGVyIGZvciBhIFNBWCA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvb3JnL3htbC9zYXgvQ29udGVudEhhbmRsZXIuaHRtbCI+PENPREU+Q29udGVudEhhbmRsZXI8L0NPREU+PC9BPiBhbmQgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL29yZy94bWwvc2F4L2V4dC9MZXhpY2FsSGFuZGxlci5odG1sIj48Q09ERT5MZXhpY2FsSGFuZGxlcjwvQ09ERT48L0E+IHRoYXQgYXJlCi0gY2FwYWJsZSBvZiBsb2FkaW5nIGFuIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPjxDT0RFPlhtbE9iamVjdDwvQ09ERT48L0E+IGluc3RhbmNlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sU2hvcnQuaHRtbCI+PEk+WG1sU2hvcnQ8L0k+PC9BPjwvQj48L1REPgotPFREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIuLi8uLi8uLi9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Nob3J0Ij54czpzaG9ydDwvYT4gdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbFN0cmluZy5odG1sIj48ST5YbWxTdHJpbmc8L0k+PC9BPjwvQj48L1REPgotPFREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIuLi8uLi8uLi9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3N0cmluZyI+eHM6c3RyaW5nPC9hPiB0eXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sVGltZS5odG1sIj48ST5YbWxUaW1lPC9JPjwvQT48L0I+PC9URD4KLTxURD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iLi4vLi4vLi4vb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyN0aW1lIj54czp0aW1lPC9hPiB0eXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sVG9rZW4uaHRtbCI+PEk+WG1sVG9rZW48L0k+PC9BPjwvQj48L1REPgotPFREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIuLi8uLi8uLi9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Rva2VuIj54czp0b2tlbjwvYT4gdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbFRva2VuU291cmNlLmh0bWwiPjxJPlhtbFRva2VuU291cmNlPC9JPjwvQT48L0I+PC9URD4KLTxURD5SZXByZXNlbnRzIGEgaG9sZGVyIG9mIFhNTCB0aGF0IGNhbiByZXR1cm4gYW4gPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+PENPREU+WG1sQ3Vyc29yPC9DT0RFPjwvQT4KLSBvciBjb3B5IGl0c2VsZiB0byB2YXJpb3VzIG1lZGlhIHN1Y2ggYXMKLSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9Xcml0ZXIuaHRtbCI+PENPREU+V3JpdGVyczwvQ09ERT48L0E+IG9yIDxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0ZpbGUuaHRtbCI+PENPREU+RmlsZXM8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbFVuc2lnbmVkQnl0ZS5odG1sIj48ST5YbWxVbnNpZ25lZEJ5dGU8L0k+PC9BPjwvQj48L1REPgotPFREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIuLi8uLi8uLi9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Vuc2lnbmVkQnl0ZSI+eHM6dW5zaWduZWRCeXRlPC9hPiB0eXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sVW5zaWduZWRJbnQuaHRtbCI+PEk+WG1sVW5zaWduZWRJbnQ8L0k+PC9BPjwvQj48L1REPgotPFREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIuLi8uLi8uLi9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Vuc2lnbmVkSW50Ij54czp1bnNpZ25lZEludDwvYT4gdHlwZS48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbFVuc2lnbmVkTG9uZy5odG1sIj48ST5YbWxVbnNpZ25lZExvbmc8L0k+PC9BPjwvQj48L1REPgotPFREPkNvcnJlc3BvbmRzIHRvIHRoZSBYTUwgU2NoZW1hCi0gPGEgdGFyZ2V0PSIuLi8uLi8uLi9vcmdcYXBhY2hlXHhtbGJlYW5zL19ibGFuayIgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIveG1sc2NoZW1hLTIvI3Vuc2lnbmVkTG9uZyI+eHM6dW5zaWduZWRMb25nPC9hPiB0eXBlLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sVW5zaWduZWRTaG9ydC5odG1sIj48ST5YbWxVbnNpZ25lZFNob3J0PC9JPjwvQT48L0I+PC9URD4KLTxURD5Db3JyZXNwb25kcyB0byB0aGUgWE1MIFNjaGVtYQotIDxhIHRhcmdldD0iLi4vLi4vLi4vb3JnXGFwYWNoZVx4bWxiZWFucy9fYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL3htbHNjaGVtYS0yLyN1bnNpZ25lZFNob3J0Ij54czp1bnNpZ25lZFNob3J0PC9hPiB0eXBlLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotCi08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+Q2xhc3MgU3VtbWFyeTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJGaWx0ZXJYbWxPYmplY3QuaHRtbCI+RmlsdGVyWG1sT2JqZWN0PC9BPjwvQj48L1REPgotPFREPkEgRmlsdGVyWG1sT2JqZWN0IGRlbGVnYXRlcyB0byBzb21lIG90aGVyIFhtbE9iamVjdCwgd2hpY2ggaXQgY2FuIHVzZSBhcwotIGl0cyBiYXNpYyBzb3VyY2Ugb2YgZGF0YSwgcG9zc2libHkgdHJhbnNmb3JtaW5nIHRoZSBkYXRhIGFsb25nIHRoZSB3YXkgb3IKLSBwcm92aWRpbmcgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iR0RhdGUuaHRtbCI+R0RhdGU8L0E+PC9CPjwvVEQ+Ci08VEQ+UmVwcmVzZW50cyBhbiBYTUwgU2NoZW1hLWNvbXBhdGlibGUgR3JlZ29yaWFuIGRhdGUuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJHRGF0ZUJ1aWxkZXIuaHRtbCI+R0RhdGVCdWlsZGVyPC9BPjwvQj48L1REPgotPFREPlVzZWQgdG8gYnVpbGQgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Q09ERT5HRGF0ZXM8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IkdEdXJhdGlvbi5odG1sIj5HRHVyYXRpb248L0E+PC9CPjwvVEQ+Ci08VEQ+UmVwcmVzZW50cyBhbiBYTUwgU2NoZW1hLWNvbXBhdGlibGUgZHVyYXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJHRHVyYXRpb25CdWlsZGVyLmh0bWwiPkdEdXJhdGlvbkJ1aWxkZXI8L0E+PC9CPjwvVEQ+Ci08VEQ+VXNlZCB0byBidWlsZCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj48Q09ERT5HRHVyYXRpb25zPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJRTmFtZUNhY2hlLmh0bWwiPlFOYW1lQ2FjaGU8L0E+PC9CPjwvVEQ+Ci08VEQ+QSBjYWNoZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHBvb2wgUU5hbWUgaW5zdGFuY2VzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iUU5hbWVTZXQuaHRtbCI+UU5hbWVTZXQ8L0E+PC9CPjwvVEQ+Ci08VEQ+VGhpcyBpbnRlcmZhY2UgcmVwcmVzZW50cyBhIGxhdHRpY2Ugb2YgZmluaXRlIGFuZCBpbmZpbml0ZSBzZXRzIG9mIFFOYW1lcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlFOYW1lU2V0QnVpbGRlci5odG1sIj5RTmFtZVNldEJ1aWxkZXI8L0E+PC9CPjwvVEQ+Ci08VEQ+VXNlZCB0byBidWlsZCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwiPjxDT0RFPlFOYW1lU2V0czwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iU2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmLmh0bWwiPlNjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZjwvQT48L0I+PC9URD4KLTxURD5Vc2VkIHRvIGFsbG93IG9uLWRlbWFuZCBsb2FkaW5nIG9mIGF0dHJpYnV0ZSBncm91cHMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJTY2hlbWFDb21wb25lbnQuUmVmLmh0bWwiPlNjaGVtYUNvbXBvbmVudC5SZWY8L0E+PC9CPjwvVEQ+Ci08VEQ+QSBsYXp5IHJlZmVyZW5jZSB0byBhIGNvbXBvbmVudC48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlNjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWYuaHRtbCI+U2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZjwvQT48L0I+PC9URD4KLTxURD5Vc2VkIHRvIGFsbG93IG9uLWRlbWFuZCBsb2FkaW5nIG9mIGVsZW1lbnRzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iU2NoZW1hR2xvYmFsRWxlbWVudC5SZWYuaHRtbCI+U2NoZW1hR2xvYmFsRWxlbWVudC5SZWY8L0E+PC9CPjwvVEQ+Ci08VEQ+VXNlZCB0byBhbGxvdyBvbi1kZW1hbmQgbG9hZGluZyBvZiBlbGVtZW50cy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlNjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWYuaHRtbCI+U2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZjwvQT48L0I+PC9URD4KLTxURD5Vc2VkIHRvIGFsbG93IG9uLWRlbWFuZCBsb2FkaW5nIG9mIGlkZW50aXR5IGNvbnN0cmFpbnRzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iU2NoZW1hTW9kZWxHcm91cC5SZWYuaHRtbCI+U2NoZW1hTW9kZWxHcm91cC5SZWY8L0E+PC9CPjwvVEQ+Ci08VEQ+VXNlZCB0byBhbGxvdyBvbi1kZW1hbmQgbG9hZGluZyBvZiBtb2RlbCBncm91cHMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJTY2hlbWFUeXBlLlJlZi5odG1sIj5TY2hlbWFUeXBlLlJlZjwvQT48L0I+PC9URD4KLTxURD5Vc2VkIHRvIGFsbG93IG9uLWRlbWFuZCBsb2FkaW5nIG9mIHR5cGVzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sIj5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlPC9BPjwvQj48L1REPgotPFREPlRoZSBiYXNlIGNsYXNzIGZvciBjb2RlLWdlbmVyYXRlZCBzdHJpbmcgZW51bWVyYXRpb24gdmFsdWUgY2xhc3Nlcy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlN0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGUuaHRtbCI+U3RyaW5nRW51bUFic3RyYWN0QmFzZS5UYWJsZTwvQT48L0I+PC9URD4KLTxURD5Vc2VkIHRvIG1hbmFnZSBzaW5nbGV0b24gaW5zdGFuY2VzIG9mIGVudW1lcmF0aW9ucy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeS5odG1sIj5YbWxBbnlTaW1wbGVUeXBlLkZhY3Rvcnk8L0E+PC9CPjwvVEQ+Ci08VEQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj48Q09ERT5YbWxBbnlTaW1wbGVUeXBlPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxBbnlVUkkuRmFjdG9yeS5odG1sIj5YbWxBbnlVUkkuRmFjdG9yeTwvQT48L0I+PC9URD4KLTxURD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+PENPREU+WG1sQW55VVJJPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxCYXNlNjRCaW5hcnkuRmFjdG9yeS5odG1sIj5YbWxCYXNlNjRCaW5hcnkuRmFjdG9yeTwvQT48L0I+PC9URD4KLTxURD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCYXNlNjRCaW5hcnkuaHRtbCI+PENPREU+WG1sQmFzZTY0QmluYXJ5PC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxCZWFucy5odG1sIj5YbWxCZWFuczwvQT48L0I+PC9URD4KLTxURD5Qcm92aWRlcyBhbiBhc3NvcnRtZW50IG9mIHV0aWxpdGllcwotIGZvciBtYW5hZ2luZyBYTUwgQmVhbiB0eXBlcywgdHlwZSBzeXN0ZW1zLCBRTmFtZXMsIHBhdGhzLAotIGFuZCBxdWVyaWVzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sQm9vbGVhbi5GYWN0b3J5Lmh0bWwiPlhtbEJvb2xlYW4uRmFjdG9yeTwvQT48L0I+PC9URD4KLTxURD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPjxDT0RFPlhtbEJvb2xlYW48L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbEJ5dGUuRmFjdG9yeS5odG1sIj5YbWxCeXRlLkZhY3Rvcnk8L0E+PC9CPjwvVEQ+Ci08VEQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Q09ERT5YbWxCeXRlPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxDYWxlbmRhci5odG1sIj5YbWxDYWxlbmRhcjwvQT48L0I+PC9URD4KLTxURD5BbiBYTUwgU2NoZW1hIGNvbXBhdGlibGUgc3ViY2xhc3Mgb2YgPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9HcmVnb3JpYW5DYWxlbmRhci5odG1sIj48Q09ERT5HcmVnb3JpYW5DYWxlbmRhcjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9BPjwvQj48L1REPgotPFREPkFuIGVudW1lcmF0aW9uIHRoYXQgaWRlbnRpZmllcyB0aGUgdHlwZSBvZiBhbiBYTUwgdG9rZW4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxDdXJzb3IuWG1sQm9va21hcmsuaHRtbCI+WG1sQ3Vyc29yLlhtbEJvb2ttYXJrPC9BPjwvQj48L1REPgotPFREPlN1YmNsYXNzZXMgb2YgWG1sQm9va21hcmsgY2FuIGJlIHVzZWQgdG8gYW5ub3RhdGUgYW4gWE1MIGRvY3VtZW50LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sRGF0ZS5GYWN0b3J5Lmh0bWwiPlhtbERhdGUuRmFjdG9yeTwvQT48L0I+PC9URD4KLTxURD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLmh0bWwiPjxDT0RFPlhtbERhdGU8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbERhdGVUaW1lLkZhY3RvcnkuaHRtbCI+WG1sRGF0ZVRpbWUuRmFjdG9yeTwvQT48L0I+PC9URD4KLTxURD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj48Q09ERT5YbWxEYXRlVGltZTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwiPlhtbERlY2ltYWwuRmFjdG9yeTwvQT48L0I+PC9URD4KLTxURD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPjxDT0RFPlhtbERlY2ltYWw8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbERvY3VtZW50UHJvcGVydGllcy5odG1sIj5YbWxEb2N1bWVudFByb3BlcnRpZXM8L0E+PC9CPjwvVEQ+Ci08VEQ+VGhpcyBjbGFzcyBpcyB1c2VkIHRvIGF0dGFjaCBhcmJpdHJhcnkgaW5mb3JtYXRpb24gdG8gYW4gWE1MCi0gZG9jdW1lbnQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxEb3VibGUuRmFjdG9yeS5odG1sIj5YbWxEb3VibGUuRmFjdG9yeTwvQT48L0I+PC9URD4KLTxURD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuaHRtbCI+PENPREU+WG1sRG91YmxlPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxEdXJhdGlvbi5GYWN0b3J5Lmh0bWwiPlhtbER1cmF0aW9uLkZhY3Rvcnk8L0E+PC9CPjwvVEQ+Ci08VEQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+PENPREU+WG1sRHVyYXRpb248L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbEVOVElUSUVTLkZhY3RvcnkuaHRtbCI+WG1sRU5USVRJRVMuRmFjdG9yeTwvQT48L0I+PC9URD4KLTxURD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj48Q09ERT5YbWxFTlRJVElFUzwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sRU5USVRZLkZhY3RvcnkuaHRtbCI+WG1sRU5USVRZLkZhY3Rvcnk8L0E+PC9CPjwvVEQ+Ci08VEQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPjxDT0RFPlhtbEVOVElUWTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sRXJyb3IuaHRtbCI+WG1sRXJyb3I8L0E+PC9CPjwvVEQ+Ci08VEQ+UmVwcmVzZW50cyBhIG1lc3NhZ2UgYXQgYSBzcGVjaWZpYyBYTUwgbG9jYXRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxGYWN0b3J5SG9vay5UaHJlYWRDb250ZXh0Lmh0bWwiPlhtbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQ8L0E+PC9CPjwvVEQ+Ci08VEQ+VXNlZCB0byBtYW5hZ2UgdGhlIFhtbEZhY3RvcnlIb29rIGZvciB0aGUgY3VycmVudCB0aHJlYWQuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxGbG9hdC5GYWN0b3J5Lmh0bWwiPlhtbEZsb2F0LkZhY3Rvcnk8L0E+PC9CPjwvVEQ+Ci08VEQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+PENPREU+WG1sRmxvYXQ8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbEdEYXkuRmFjdG9yeS5odG1sIj5YbWxHRGF5LkZhY3Rvcnk8L0E+PC9CPjwvVEQ+Ci08VEQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj48Q09ERT5YbWxHRGF5PC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxHTW9udGguRmFjdG9yeS5odG1sIj5YbWxHTW9udGguRmFjdG9yeTwvQT48L0I+PC9URD4KLTxURD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguaHRtbCI+PENPREU+WG1sR01vbnRoPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxHTW9udGhEYXkuRmFjdG9yeS5odG1sIj5YbWxHTW9udGhEYXkuRmFjdG9yeTwvQT48L0I+PC9URD4KLTxURD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+PENPREU+WG1sR01vbnRoRGF5PC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxHWWVhci5GYWN0b3J5Lmh0bWwiPlhtbEdZZWFyLkZhY3Rvcnk8L0E+PC9CPjwvVEQ+Ci08VEQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuaHRtbCI+PENPREU+WG1sR1llYXI8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbEdZZWFyTW9udGguRmFjdG9yeS5odG1sIj5YbWxHWWVhck1vbnRoLkZhY3Rvcnk8L0E+PC9CPjwvVEQ+Ci08VEQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5odG1sIj48Q09ERT5YbWxHWWVhck1vbnRoPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxIZXhCaW5hcnkuRmFjdG9yeS5odG1sIj5YbWxIZXhCaW5hcnkuRmFjdG9yeTwvQT48L0I+PC9URD4KLTxURD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+PENPREU+WG1sSGV4QmluYXJ5PC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxJRC5GYWN0b3J5Lmh0bWwiPlhtbElELkZhY3Rvcnk8L0E+PC9CPjwvVEQ+Ci08VEQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+PENPREU+WG1sSUQ8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbElEUkVGLkZhY3RvcnkuaHRtbCI+WG1sSURSRUYuRmFjdG9yeTwvQT48L0I+PC9URD4KLTxURD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj48Q09ERT5YbWxJRFJFRjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sSURSRUZTLkZhY3RvcnkuaHRtbCI+WG1sSURSRUZTLkZhY3Rvcnk8L0E+PC9CPjwvVEQ+Ci08VEQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLmh0bWwiPjxDT0RFPlhtbElEUkVGUzwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sSW50LkZhY3RvcnkuaHRtbCI+WG1sSW50LkZhY3Rvcnk8L0E+PC9CPjwvVEQ+Ci08VEQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPjxDT0RFPlhtbEludDwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbEludGVnZXIuRmFjdG9yeTwvQT48L0I+PC9URD4KLTxURD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbEludGVnZXI8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbExhbmd1YWdlLkZhY3RvcnkuaHRtbCI+WG1sTGFuZ3VhZ2UuRmFjdG9yeTwvQT48L0I+PC9URD4KLTxURD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5odG1sIj48Q09ERT5YbWxMYW5ndWFnZTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sTGluZU51bWJlci5odG1sIj5YbWxMaW5lTnVtYmVyPC9BPjwvQj48L1REPgotPFREPkEgc3ViY2xhc3Mgb2YgWG1sQm9va21hcmsgdGhhdCBob2xkcyBsaW5lIG51bWJlciBpbmZvcm1hdGlvbi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbExvbmcuRmFjdG9yeS5odG1sIj5YbWxMb25nLkZhY3Rvcnk8L0E+PC9CPjwvVEQ+Ci08VEQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj48Q09ERT5YbWxMb25nPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxOYW1lLkZhY3RvcnkuaHRtbCI+WG1sTmFtZS5GYWN0b3J5PC9BPjwvQj48L1REPgotPFREPkEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+PENPREU+WG1sTmFtZTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sTkNOYW1lLkZhY3RvcnkuaHRtbCI+WG1sTkNOYW1lLkZhY3Rvcnk8L0E+PC9CPjwvVEQ+Ci08VEQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTkNOYW1lLmh0bWwiPjxDT0RFPlhtbE5DTmFtZTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+PC9CPjwvVEQ+Ci08VEQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sTk1UT0tFTi5GYWN0b3J5Lmh0bWwiPlhtbE5NVE9LRU4uRmFjdG9yeTwvQT48L0I+PC9URD4KLTxURD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPjxDT0RFPlhtbE5NVE9LRU48L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbE5NVE9LRU5TLkZhY3RvcnkuaHRtbCI+WG1sTk1UT0tFTlMuRmFjdG9yeTwvQT48L0I+PC9URD4KLTxURD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOUy5odG1sIj48Q09ERT5YbWxOTVRPS0VOUzwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+PC9CPjwvVEQ+Ci08VEQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vbk5lZ2F0aXZlSW50ZWdlcjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0E+PC9CPjwvVEQ+Ci08VEQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxDT0RFPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sTm9ybWFsaXplZFN0cmluZy5GYWN0b3J5Lmh0bWwiPlhtbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeTwvQT48L0I+PC9URD4KLTxURD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPjxDT0RFPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbE5PVEFUSU9OLkZhY3RvcnkuaHRtbCI+WG1sTk9UQVRJT04uRmFjdG9yeTwvQT48L0I+PC9URD4KLTxURD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5odG1sIj48Q09ERT5YbWxOT1RBVElPTjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sT2JqZWN0LkZhY3RvcnkuaHRtbCI+WG1sT2JqZWN0LkZhY3Rvcnk8L0E+PC9CPjwvVEQ+Ci08VEQ+U3RhdGljIGZhY3RvcnkgY2xhc3MgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXMuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxPcHRpb25zLmh0bWwiPlhtbE9wdGlvbnM8L0E+PC9CPjwvVEQ+Ci08VEQ+VXNlZCB0byBzdXBwbHkgb3B0aW9ucyBmb3IgbG9hZGluZywgc2F2aW5nLCBhbmQgY29tcGlsaW5nLCBhbmQgdmFsaWRhdGluZy48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5Lmh0bWwiPlhtbFBvc2l0aXZlSW50ZWdlci5GYWN0b3J5PC9BPjwvQj48L1REPgotPFREPkEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj48Q09ERT5YbWxQb3NpdGl2ZUludGVnZXI8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbFFOYW1lLkZhY3RvcnkuaHRtbCI+WG1sUU5hbWUuRmFjdG9yeTwvQT48L0I+PC9URD4KLTxURD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5odG1sIj48Q09ERT5YbWxRTmFtZTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sU2hvcnQuRmFjdG9yeS5odG1sIj5YbWxTaG9ydC5GYWN0b3J5PC9BPjwvQj48L1REPgotPFREPkEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPjxDT0RFPlhtbFNob3J0PC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxTaW1wbGVMaXN0Lmh0bWwiPlhtbFNpbXBsZUxpc3Q8L0E+PC9CPjwvVEQ+Ci08VEQ+VGhlIGltbXV0YWJsZSA8QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+PENPREU+TGlzdDwvQ09ERT48L0E+IHJldHVybmVkIGZvciBYTUwgc2ltcGxlIGxpc3QgdmFsdWVzLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sU3RyaW5nLkZhY3RvcnkuaHRtbCI+WG1sU3RyaW5nLkZhY3Rvcnk8L0E+PC9CPjwvVEQ+Ci08VEQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPjxDT0RFPlhtbFN0cmluZzwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sVGltZS5GYWN0b3J5Lmh0bWwiPlhtbFRpbWUuRmFjdG9yeTwvQT48L0I+PC9URD4KLTxURD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPjxDT0RFPlhtbFRpbWU8L0NPREU+PC9BPi48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIxNSUiPjxCPjxBIEhSRUY9IlhtbFRva2VuLkZhY3RvcnkuaHRtbCI+WG1sVG9rZW4uRmFjdG9yeTwvQT48L0I+PC9URD4KLTxURD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlbi5odG1sIj48Q09ERT5YbWxUb2tlbjwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sVW5zaWduZWRCeXRlLkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRCeXRlLkZhY3Rvcnk8L0E+PC9CPjwvVEQ+Ci08VEQ+QSBjbGFzcyB3aXRoIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGluc3RhbmNlcwotIG9mIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkQnl0ZTwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZEludC5GYWN0b3J5PC9BPjwvQj48L1REPgotPFREPkEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPjxDT0RFPlhtbFVuc2lnbmVkSW50PC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxVbnNpZ25lZExvbmcuRmFjdG9yeS5odG1sIj5YbWxVbnNpZ25lZExvbmcuRmFjdG9yeTwvQT48L0I+PC9URD4KLTxURD5BIGNsYXNzIHdpdGggbWV0aG9kcyBmb3IgY3JlYXRpbmcgaW5zdGFuY2VzCi0gb2YgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+PENPREU+WG1sVW5zaWduZWRMb25nPC9DT0RFPjwvQT4uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCI+WG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5PC9BPjwvQj48L1REPgotPFREPkEgY2xhc3Mgd2l0aCBtZXRob2RzIGZvciBjcmVhdGluZyBpbnN0YW5jZXMKLSBvZiA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+PENPREU+WG1sVW5zaWduZWRTaG9ydDwvQ09ERT48L0E+LjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLSZuYnNwOwotCi08UD4KLQotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+RXhjZXB0aW9uIFN1bW1hcnk8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sIj5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uPC9BPjwvQj48L1REPgotPFREPkFuIGV4Y2VwdGlvbiB0aGF0IGlzIHRocm93biBpZiB0aGVyZSBpcyBjb3JydXB0aW9uIG9yIGEgdmVyc2lvbiBtaXNtYXRjaAotIGluIGEgY29tcGlsZWQgc2NoZW1hIHR5cGUgc3lzdGVtLjwvVEQ+Ci08L1RSPgotPFRSIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iVGFibGVSb3dDb2xvciI+Ci08VEQgV0lEVEg9IjE1JSI+PEI+PEEgSFJFRj0iWG1sRXhjZXB0aW9uLmh0bWwiPlhtbEV4Y2VwdGlvbjwvQT48L0I+PC9URD4KLTxURD5BIGNoZWNrZWQgZXhjZXB0aW9uIHRoYXQgY2FuIGJlIHRocm93biB3aGlsZSBwcm9jZXNzaW5nLAotIHBhcnNpbmcsIG9yIGNvbXBpbGluZyBYTUwuPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYbWxSdW50aW1lRXhjZXB0aW9uLmh0bWwiPlhtbFJ1bnRpbWVFeGNlcHRpb248L0E+PC9CPjwvVEQ+Ci08VEQ+QW4gdW5jaGVja2VkIFhNTCBleGNlcHRpb24uPC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMTUlIj48Qj48QSBIUkVGPSJYTUxTdHJlYW1WYWxpZGF0aW9uRXhjZXB0aW9uLmh0bWwiPlhNTFN0cmVhbVZhbGlkYXRpb25FeGNlcHRpb248L0E+PC9CPjwvVEQ+Ci08VEQ+QW4gZXhjZXB0aW9uIHRocm93biBmcm9tIGEgdmFsaWRhdGluZyBYTUxJbnB1dFN0cmVhbS48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0mbmJzcDsKLQotPFA+Ci08QSBOQU1FPSJwYWNrYWdlX2Rlc2NyaXB0aW9uIj48IS0tIC0tPjwvQT48SDI+Ci1QYWNrYWdlIG9yZy5hcGFjaGUueG1sYmVhbnMgRGVzY3JpcHRpb24KLTwvSDI+Ci0KLTxQPgotUHJvdmlkZXMgY2xhc3NlcyBmb3IgWE1MIEJlYW5zIHNjaGVtYSwgaW5mb3NldCwgeHBhdGgsIGFuZCB4cXVlcnkgaGFuZGxpbmcuCi0KLTxwPgotVGhlIFhNTCBCZWFucyBBUEkgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBYTUwgQmVhbnMgPGVtPnNjaGVtYSBjb21waWxlcjwvZW0+LgotVGhlIHNjaGVtYSBjb21waWxlciBwcm9kdWNlcyBYTUwgQmVhbiBjbGFzc2VzIHRoYXQgZXh0ZW5kIGFuZCBpbnRlcmFjdAotd2l0aCB0aGUgYmFzaWMgWE1MIEJlYW4gY2xhc3NlcyBhbmQgaW50ZXJmYWNlcyBpbiB0aGlzIHBhY2thZ2UuICBJdCBpcwotYWxzbyBwb3NzaWJsZSB0byB1c2UgWE1MIEJlYW5zIHdpdGhvdXQgdGhlIHNjaGVtYSBjb21waWxlciB0byBtYW5pcHVsYXRlCi1hbmQgdmFsaWRhdGUgWE1MIGluIGEgbGF0ZS1ib3VuZCB3YXkgKHdpdGggbm8gdHlwZXMsIG9yIHdpdGgKLXJ1bnRpbWUtbG9hZGVkIHR5cGVzIG9ubHkpLgotCi08cD4KLVRoaXMgcGFja2FnZSBjb250YWluczoKLTxvbD4KLTxsaT5BbGwgdGhlIGJ1aWx0LWluIFhNTCBCZWFuIGNsYXNzZXMgCi1zdWNoIGFzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwiPjxDT0RFPlhtbE9iamVjdDwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+PENPREU+WG1sQW55U2ltcGxlVHlwZTwvQ09ERT48L0E+LCBhbmQKLTxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50Lmh0bWwiPjxDT0RFPlhtbEludDwvQ09ERT48L0E+Ci0ob25lIGZvciBlYWNoIG9mIHRoZSAKLTxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi94bWxzY2hlbWEtMi8jYnVpbHQtaW4tZGF0YXR5cGVzIj40NiBidWlsdC1pbiBYTUwgU2NoZW1hIHR5cGVzPC9hPikuCi08bGk+U3VwcG9ydCBmb3IgZnVsbCBYTUwgaW5mb3NldCwgWFBhdGgsIGFuZCBYUXVlcnkKLSh2aWEgPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+PENPREU+WG1sQ3Vyc29yPC9DT0RFPjwvQT4sIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sT2JqZWN0Lmh0bWwjc2VsZWN0UGF0aChqYXZhLmxhbmcuU3RyaW5nKSI+PENPREU+WG1sT2JqZWN0LnNlbGVjdFBhdGgoamF2YS5sYW5nLlN0cmluZyk8L0NPREU+PC9BPiBhbmQgcmVsYXRlZCBtZXRob2RzKS4KLTxsaT5TdXBwb3J0IGZvciBjb21wdXRhdGlvbiB1c2luZyBYTUwgU2NoZW1hIGRhdGEgdHlwZXMgKHZpYSBkYXRhdHlwZQotY2xhc3NlcyBzdWNoIGFzIDxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwiPjxDT0RFPkdEdXJhdGlvbjwvQ09ERT48L0E+KS4KLTxsaT5TdXBwb3J0IGZvciB3b3JraW5nIHdpdGggWE1MIFNjaGVtYSB0eXBlIG1ldGFkYXRhIGl0c2VsZgotKHZpYSA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+LCA8QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVTeXN0ZW0uaHRtbCI+PENPREU+U2NoZW1hVHlwZVN5c3RlbTwvQ09ERT48L0E+LCBhbmQgcmVsYXRlZCBjbGFzc2VzKS4KLTwvb2w+Ci0KLTxwPgotVGhlIHBsYWNlIHRvIGJlZ2luIHdoZW4gd29ya2luZyB3aXRoIHRoZSBYTUwgQmVhbnMgQVBJIGlzIHRoZSBmb2xsb3dpbmcKLWZ1bmRhbWVudGFsIGNsYXNzZXM6Ci0KLTxvbD4KLTxsaT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj48Q09ERT5YbWxPYmplY3Q8L0NPREU+PC9BPiBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgYWxsIFhNTCBCZWFucy4KLTxsaT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5GYWN0b3J5Lmh0bWwiPjxDT0RFPlhtbE9iamVjdC5GYWN0b3J5PC9DT0RFPjwvQT4gaXMgdXNlZCB0byBsb2FkIGFuZCBjcmVhdGUgWE1MIEJlYW4gaW5zdGFuY2VzLgotRWFjaCBYTUwgQmVhbiBjbGFzcyBoYXMgaXRzIG93biBuZXN0ZWQgZmFjdG9yeSBjbGFzcy4KLTxsaT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEN1cnNvci5odG1sIj48Q09ERT5YbWxDdXJzb3I8L0NPREU+PC9BPiBpcyBhbiBlZmZpY2llbnQgdHJlZXdhbGtpbmcgQVBJIGZvciB0aGUgZnVsbCBYTUwgaW5mb3NldC4KLTxsaT48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGUuaHRtbCI+PENPREU+U2NoZW1hVHlwZTwvQ09ERT48L0E+IGlzIHRoZSB0eXBlIG1ldGFkYXRhIGludGVyZmFjZSBmb3IgWE1MIFNjaGVtYSB0eXBlcwotPGxpPjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmVhbnMuaHRtbCI+PENPREU+WG1sQmVhbnM8L0NPREU+PC9BPiBwcm92aWRlcyBhIGNvbGxlY3Rpb24gb2YgdXRpbGl0eSBmdW5jdGlvbnMuCi08L29sPgotPFA+Ci0KLTxQPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+UGFja2FnZTwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2UtdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPjxCPlBSRVYgUEFDS0FHRTwvQj48L0E+Jm5ic3A7Ci0mbmJzcDtORVhUIFBBQ0tBR0U8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0icGFja2FnZS1zdW1tYXJ5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3JnL2FwYWNoZS94bWxiZWFucy9wYWNrYWdlLXRyZWUuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL3BhY2thZ2UtdHJlZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWU5M2VmLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vcmcvYXBhY2hlL3htbGJlYW5zL3BhY2thZ2UtdHJlZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjIxICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTYgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1vcmcuYXBhY2hlLnhtbGJlYW5zIENsYXNzIEhpZXJhcmNoeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0iLi4vLi4vLi4vc3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0ib3JnLmFwYWNoZS54bWxiZWFucyBDbGFzcyBIaWVyYXJjaHkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJwYWNrYWdlLXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5QYWNrYWdlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+VHJlZTwvQj48L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Ii4uLy4uLy4uL2RlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDs8QSBIUkVGPSIuLi8uLi8uLi9qYXZheC94bWwvc3RyZWFtL3BhY2thZ2UtdHJlZS5odG1sIj48Qj5QUkVWPC9CPjwvQT4mbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9Ii4uLy4uLy4uL2luZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0icGFja2FnZS10cmVlLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iLi4vLi4vLi4vYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPENFTlRFUj4KLTxIMj4KLUhpZXJhcmNoeSBGb3IgUGFja2FnZSBvcmcuYXBhY2hlLnhtbGJlYW5zCi08L0gyPgotPC9DRU5URVI+Ci08REw+Ci08RFQ+PEI+UGFja2FnZSBIaWVyYXJjaGllczo8L0I+PEREPjxBIEhSRUY9Ii4uLy4uLy4uL292ZXJ2aWV3LXRyZWUuaHRtbCI+QWxsIFBhY2thZ2VzPC9BPjwvREw+Ci08SFI+Ci08SDI+Ci1DbGFzcyBIaWVyYXJjaHkKLTwvSDI+Ci08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBqYXZhLmxhbmcuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9PYmplY3QuaHRtbCI+PEI+T2JqZWN0PC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBqYXZhLnV0aWwuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9DYWxlbmRhci5odG1sIj48Qj5DYWxlbmRhcjwvQj48L0E+IChpbXBsZW1lbnRzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL0Nsb25lYWJsZS5odG1sIj5DbG9uZWFibGU8L0E+LCBqYXZhLmlvLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIj5TZXJpYWxpemFibGU8L0E+KQotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+Y2xhc3MgamF2YS51dGlsLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvR3JlZ29yaWFuQ2FsZW5kYXIuaHRtbCI+PEI+R3JlZ29yaWFuQ2FsZW5kYXI8L0I+PC9BPjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sIj48Qj5YbWxDYWxlbmRhcjwvQj48L0E+PC9VTD4KLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvRmlsdGVyWG1sT2JqZWN0Lmh0bWwiPjxCPkZpbHRlclhtbE9iamVjdDwvQj48L0E+IChpbXBsZW1lbnRzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TaW1wbGVWYWx1ZS5odG1sIj5TaW1wbGVWYWx1ZTwvQT4sIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+WG1sT2JqZWN0PC9BPikKLTxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZS5odG1sIj48Qj5HRGF0ZTwvQj48L0E+IChpbXBsZW1lbnRzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZVNwZWNpZmljYXRpb24uaHRtbCI+R0RhdGVTcGVjaWZpY2F0aW9uPC9BPiwgamF2YS5pby48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9TZXJpYWxpemFibGUuaHRtbCI+U2VyaWFsaXphYmxlPC9BPikKLTxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+PEI+R0RhdGVCdWlsZGVyPC9CPjwvQT4gKGltcGxlbWVudHMgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+LCBqYXZhLmlvLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIj5TZXJpYWxpemFibGU8L0E+KQotPExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbi5odG1sIj48Qj5HRHVyYXRpb248L0I+PC9BPiAoaW1wbGVtZW50cyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPiwgamF2YS5pby48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9TZXJpYWxpemFibGUuaHRtbCI+U2VyaWFsaXphYmxlPC9BPikKLTxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwiPjxCPkdEdXJhdGlvbkJ1aWxkZXI8L0I+PC9BPiAoaW1wbGVtZW50cyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9BPiwgamF2YS5pby48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9TZXJpYWxpemFibGUuaHRtbCI+U2VyaWFsaXphYmxlPC9BPikKLTxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZUNhY2hlLmh0bWwiPjxCPlFOYW1lQ2FjaGU8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldC5odG1sIj48Qj5RTmFtZVNldDwvQj48L0E+IChpbXBsZW1lbnRzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldFNwZWNpZmljYXRpb24uaHRtbCI+UU5hbWVTZXRTcGVjaWZpY2F0aW9uPC9BPiwgamF2YS5pby48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9TZXJpYWxpemFibGUuaHRtbCI+U2VyaWFsaXphYmxlPC9BPikKLTxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCI+PEI+UU5hbWVTZXRCdWlsZGVyPC9CPjwvQT4gKGltcGxlbWVudHMgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+LCBqYXZhLmlvLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIj5TZXJpYWxpemFibGU8L0E+KQotPExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5SZWYuaHRtbCI+PEI+U2NoZW1hQ29tcG9uZW50LlJlZjwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZi5odG1sIj48Qj5TY2hlbWFBdHRyaWJ1dGVHcm91cC5SZWY8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuUmVmLmh0bWwiPjxCPlNjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWY8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50LlJlZi5odG1sIj48Qj5TY2hlbWFHbG9iYWxFbGVtZW50LlJlZjwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUlkZW50aXR5Q29uc3RyYWludC5SZWYuaHRtbCI+PEI+U2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZjwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYU1vZGVsR3JvdXAuUmVmLmh0bWwiPjxCPlNjaGVtYU1vZGVsR3JvdXAuUmVmPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5SZWYuaHRtbCI+PEI+U2NoZW1hVHlwZS5SZWY8L0I+PC9BPjwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU3RyaW5nRW51bUFic3RyYWN0QmFzZS5odG1sIj48Qj5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlPC9CPjwvQT4gKGltcGxlbWVudHMgamF2YS5pby48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9TZXJpYWxpemFibGUuaHRtbCI+U2VyaWFsaXphYmxlPC9BPikKLTxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLlRhYmxlLmh0bWwiPjxCPlN0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGU8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sIj48Qj5UaHJvd2FibGU8L0I+PC9BPiAoaW1wbGVtZW50cyBqYXZhLmlvLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIj5TZXJpYWxpemFibGU8L0E+KQotPFVMPgotPExJIFRZUEU9ImNpcmNsZSI+Y2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvRXhjZXB0aW9uLmh0bWwiPjxCPkV4Y2VwdGlvbjwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+Y2xhc3MgamF2YS5pby48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9pby9JT0V4Y2VwdGlvbi5odG1sIj48Qj5JT0V4Y2VwdGlvbjwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgd2VibG9naWMueG1sLnN0cmVhbS48QSBIUkVGPSJodHRwOi8vZS1kb2NzLmJlYS5jb20vd2xzL2RvY3M4MS9qYXZhZG9jcy93ZWJsb2dpYy94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj48Qj5YTUxTdHJlYW1FeGNlcHRpb248L0I+PC9BPiAoaW1wbGVtZW50cyB3ZWJsb2dpYy51dGlscy5OZXN0ZWRUaHJvd2FibGUpCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWE1MU3RyZWFtVmFsaWRhdGlvbkV4Y2VwdGlvbi5odG1sIj48Qj5YTUxTdHJlYW1WYWxpZGF0aW9uRXhjZXB0aW9uPC9CPjwvQT48L1VMPgotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1J1bnRpbWVFeGNlcHRpb24uaHRtbCI+PEI+UnVudGltZUV4Y2VwdGlvbjwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFJ1bnRpbWVFeGNlcHRpb24uaHRtbCI+PEI+WG1sUnVudGltZUV4Y2VwdGlvbjwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb24uaHRtbCI+PEI+U2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbjwvQj48L0E+PC9VTD4KLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXhjZXB0aW9uLmh0bWwiPjxCPlhtbEV4Y2VwdGlvbjwvQj48L0E+PC9VTD4KLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPjxCPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5GYWN0b3J5Lmh0bWwiPjxCPlhtbEFueVVSSS5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCI+PEI+WG1sQmFzZTY0QmluYXJ5LkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sIj48Qj5YbWxCZWFuczwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sIj48Qj5YbWxCb29sZWFuLkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCI+PEI+WG1sQnl0ZS5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj48Qj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbEJvb2ttYXJrLmh0bWwiPjxCPlhtbEN1cnNvci5YbWxCb29rbWFyazwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExpbmVOdW1iZXIuaHRtbCI+PEI+WG1sTGluZU51bWJlcjwvQj48L0E+PC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLkZhY3RvcnkuaHRtbCI+PEI+WG1sRGF0ZS5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sIj48Qj5YbWxEYXRlVGltZS5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwiPjxCPlhtbERlY2ltYWwuRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5odG1sIj48Qj5YbWxEb2N1bWVudFByb3BlcnRpZXM8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuRmFjdG9yeS5odG1sIj48Qj5YbWxEb3VibGUuRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLkZhY3RvcnkuaHRtbCI+PEI+WG1sRHVyYXRpb24uRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLkZhY3RvcnkuaHRtbCI+PEI+WG1sRU5USVRJRVMuRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5GYWN0b3J5Lmh0bWwiPjxCPlhtbEVOVElUWS5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+PEI+WG1sRXJyb3I8L0I+PC9BPiAoaW1wbGVtZW50cyBqYXZhLmlvLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIj5TZXJpYWxpemFibGU8L0E+KQotPExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQuaHRtbCI+PEI+WG1sRmFjdG9yeUhvb2suVGhyZWFkQ29udGV4dDwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LkZhY3RvcnkuaHRtbCI+PEI+WG1sRmxvYXQuRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sIj48Qj5YbWxHRGF5LkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sIj48Qj5YbWxHTW9udGguRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwiPjxCPlhtbEdNb250aERheS5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuRmFjdG9yeS5odG1sIj48Qj5YbWxHWWVhci5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwiPjxCPlhtbEdZZWFyTW9udGguRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwiPjxCPlhtbEhleEJpbmFyeS5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuRmFjdG9yeS5odG1sIj48Qj5YbWxJRC5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sIj48Qj5YbWxJRFJFRi5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLkZhY3RvcnkuaHRtbCI+PEI+WG1sSURSRUZTLkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuRmFjdG9yeS5odG1sIj48Qj5YbWxJbnQuRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sIj48Qj5YbWxJbnRlZ2VyLkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5GYWN0b3J5Lmh0bWwiPjxCPlhtbExhbmd1YWdlLkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCI+PEI+WG1sTG9uZy5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwiPjxCPlhtbE5hbWUuRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5GYWN0b3J5Lmh0bWwiPjxCPlhtbE5DTmFtZS5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+PEI+WG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLkZhY3RvcnkuaHRtbCI+PEI+WG1sTk1UT0tFTi5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuRmFjdG9yeS5odG1sIj48Qj5YbWxOTVRPS0VOUy5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+PEI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj48Qj5YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sIj48Qj5YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwiPjxCPlhtbE5PVEFUSU9OLkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIj48Qj5YbWxPYmplY3QuRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+PEI+WG1sT3B0aW9uczwvQj48L0E+IChpbXBsZW1lbnRzIGphdmEuaW8uPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vU2VyaWFsaXphYmxlLmh0bWwiPlNlcmlhbGl6YWJsZTwvQT4pCi08TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+PEI+WG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwiPjxCPlhtbFFOYW1lLkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5GYWN0b3J5Lmh0bWwiPjxCPlhtbFNob3J0LkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwiPjxCPlhtbFNpbXBsZUxpc3Q8L0I+PC9BPiAoaW1wbGVtZW50cyBqYXZhLnV0aWwuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+LCBqYXZhLmlvLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIj5TZXJpYWxpemFibGU8L0E+KQotPExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5GYWN0b3J5Lmh0bWwiPjxCPlhtbFN0cmluZy5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5GYWN0b3J5Lmh0bWwiPjxCPlhtbFRpbWUuRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCI+PEI+WG1sVG9rZW4uRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwiPjxCPlhtbFVuc2lnbmVkQnl0ZS5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sIj48Qj5YbWxVbnNpZ25lZEludC5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLkZhY3RvcnkuaHRtbCI+PEI+WG1sVW5zaWduZWRMb25nLkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCI+PEI+WG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5PC9CPjwvQT48L1VMPgotPC9VTD4KLTxIMj4KLUludGVyZmFjZSBIaWVyYXJjaHkKLTwvSDI+Ci08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj48Qj5HRGF0ZVNwZWNpZmljYXRpb248L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj48Qj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj48Qj5RTmFtZVNldFNwZWNpZmljYXRpb248L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCI+PEI+U2NoZW1hQXR0cmlidXRlTW9kZWw8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPjxCPlNjaGVtYUNvbXBvbmVudDwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVHcm91cC5odG1sIj48Qj5TY2hlbWFBdHRyaWJ1dGVHcm91cDwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuaHRtbCI+PEI+U2NoZW1hR2xvYmFsQXR0cmlidXRlPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxBdHRyaWJ1dGUuaHRtbCI+U2NoZW1hTG9jYWxBdHRyaWJ1dGU8L0E+KQotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50Lmh0bWwiPjxCPlNjaGVtYUdsb2JhbEVsZW1lbnQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEVsZW1lbnQuaHRtbCI+U2NoZW1hTG9jYWxFbGVtZW50PC9BPikKLTxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Lmh0bWwiPjxCPlNjaGVtYUlkZW50aXR5Q29uc3RyYWludDwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFNb2RlbEdyb3VwLmh0bWwiPjxCPlNjaGVtYU1vZGVsR3JvdXA8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Qj5TY2hlbWFUeXBlPC9CPjwvQT48L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sIj48Qj5TY2hlbWFGaWVsZDwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEF0dHJpYnV0ZS5odG1sIj48Qj5TY2hlbWFMb2NhbEF0dHJpYnV0ZTwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuaHRtbCI+PEI+U2NoZW1hR2xvYmFsQXR0cmlidXRlPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPlNjaGVtYUNvbXBvbmVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEVsZW1lbnQuaHRtbCI+PEI+U2NoZW1hTG9jYWxFbGVtZW50PC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEVsZW1lbnQuaHRtbCI+PEI+U2NoZW1hR2xvYmFsRWxlbWVudDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sIj5TY2hlbWFDb21wb25lbnQ8L0E+KQotPC9VTD4KLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwiPjxCPlNjaGVtYVBhcnRpY2xlPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwiPjxCPlNjaGVtYVByb3BlcnR5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVN0cmluZ0VudW1FbnRyeS5odG1sIj48Qj5TY2hlbWFTdHJpbmdFbnVtRW50cnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sIj48Qj5TY2hlbWFUeXBlTG9hZGVyPC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVTeXN0ZW0uaHRtbCI+PEI+U2NoZW1hVHlwZVN5c3RlbTwvQj48L0E+PC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLkNoYW5nZVN0YW1wLmh0bWwiPjxCPlhtbEN1cnNvci5DaGFuZ2VTdGFtcDwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuWG1sTWFyay5odG1sIj48Qj5YbWxDdXJzb3IuWG1sTWFyazwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxGYWN0b3J5SG9vay5odG1sIj48Qj5YbWxGYWN0b3J5SG9vazwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxTYXhIYW5kbGVyLmh0bWwiPjxCPlhtbFNheEhhbmRsZXI8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW5Tb3VyY2UuaHRtbCI+PEI+WG1sVG9rZW5Tb3VyY2U8L0I+PC9BPjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLmh0bWwiPjxCPlhtbEN1cnNvcjwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuaHRtbCI+PEI+WG1sT2JqZWN0PC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPjxCPlNpbXBsZVZhbHVlPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVNpbXBsZVR5cGUuaHRtbCI+PEI+WG1sQW55U2ltcGxlVHlwZTwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxBbnlVUkkuaHRtbCI+PEI+WG1sQW55VVJJPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJhc2U2NEJpbmFyeS5odG1sIj48Qj5YbWxCYXNlNjRCaW5hcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sQm9vbGVhbi5odG1sIj48Qj5YbWxCb29sZWFuPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGUuaHRtbCI+PEI+WG1sRGF0ZTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlVGltZS5odG1sIj48Qj5YbWxEYXRlVGltZTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxEZWNpbWFsLmh0bWwiPjxCPlhtbERlY2ltYWw8L0I+PC9BPjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSW50ZWdlci5odG1sIj48Qj5YbWxJbnRlZ2VyPC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExvbmcuaHRtbCI+PEI+WG1sTG9uZzwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuaHRtbCI+PEI+WG1sSW50PC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFNob3J0Lmh0bWwiPjxCPlhtbFNob3J0PC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEJ5dGUuaHRtbCI+PEI+WG1sQnl0ZTwvQj48L0E+PC9VTD4KLTwvVUw+Ci08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25OZWdhdGl2ZUludGVnZXIuaHRtbCI+PEI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyPC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFBvc2l0aXZlSW50ZWdlci5odG1sIj48Qj5YbWxQb3NpdGl2ZUludGVnZXI8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLmh0bWwiPjxCPlhtbFVuc2lnbmVkTG9uZzwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEludC5odG1sIj48Qj5YbWxVbnNpZ25lZEludDwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0Lmh0bWwiPjxCPlhtbFVuc2lnbmVkU2hvcnQ8L0I+PC9BPjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRCeXRlLmh0bWwiPjxCPlhtbFVuc2lnbmVkQnl0ZTwvQj48L0E+PC9VTD4KLTwvVUw+Ci08L1VMPgotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxCPlhtbE5vblBvc2l0aXZlSW50ZWdlcjwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOZWdhdGl2ZUludGVnZXIuaHRtbCI+PEI+WG1sTmVnYXRpdmVJbnRlZ2VyPC9CPjwvQT48L1VMPgotPC9VTD4KLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbERvdWJsZS5odG1sIj48Qj5YbWxEb3VibGU8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRHVyYXRpb24uaHRtbCI+PEI+WG1sRHVyYXRpb248L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRJRVMuaHRtbCI+PEI+WG1sRU5USVRJRVM8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sRmxvYXQuaHRtbCI+PEI+WG1sRmxvYXQ8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR0RheS5odG1sIj48Qj5YbWxHRGF5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aC5odG1sIj48Qj5YbWxHTW9udGg8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoRGF5Lmh0bWwiPjxCPlhtbEdNb250aERheTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhci5odG1sIj48Qj5YbWxHWWVhcjwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxHWWVhck1vbnRoLmh0bWwiPjxCPlhtbEdZZWFyTW9udGg8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSGV4QmluYXJ5Lmh0bWwiPjxCPlhtbEhleEJpbmFyeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRlMuaHRtbCI+PEI+WG1sSURSRUZTPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU5TLmh0bWwiPjxCPlhtbE5NVE9LRU5TPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5PVEFUSU9OLmh0bWwiPjxCPlhtbE5PVEFUSU9OPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFFOYW1lLmh0bWwiPjxCPlhtbFFOYW1lPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5odG1sIj48Qj5YbWxTdHJpbmc8L0I+PC9BPjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9ybWFsaXplZFN0cmluZy5odG1sIj48Qj5YbWxOb3JtYWxpemVkU3RyaW5nPC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLmh0bWwiPjxCPlhtbFRva2VuPC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbExhbmd1YWdlLmh0bWwiPjxCPlhtbExhbmd1YWdlPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbE5hbWUuaHRtbCI+PEI+WG1sTmFtZTwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOQ05hbWUuaHRtbCI+PEI+WG1sTkNOYW1lPC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSIuLi8uLi8uLi9vcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5odG1sIj48Qj5YbWxFTlRJVFk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuaHRtbCI+PEI+WG1sSUQ8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuaHRtbCI+PEI+WG1sSURSRUY8L0I+PC9BPjwvVUw+Ci08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0iLi4vLi4vLi4vb3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLmh0bWwiPjxCPlhtbE5NVE9LRU48L0I+PC9BPjwvVUw+Ci08L1VMPgotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Ii4uLy4uLy4uL29yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5odG1sIj48Qj5YbWxUaW1lPC9CPjwvQT48L1VMPgotPC9VTD4KLTwvVUw+Ci08L1VMPgotPEhSPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbV9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vb3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9InBhY2thZ2Utc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlBhY2thZ2U8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5UcmVlPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iLi4vLi4vLi4vZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9pbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSIuLi8uLi8uLi9oZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwOzxBIEhSRUY9Ii4uLy4uLy4uL2phdmF4L3htbC9zdHJlYW0vcGFja2FnZS10cmVlLmh0bWwiPjxCPlBSRVY8L0I+PC9BPiZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iLi4vLi4vLi4vaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJwYWNrYWdlLXRyZWUuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSIuLi8uLi8uLi9hbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vdmVydmlldy1mcmFtZS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL292ZXJ2aWV3LWZyYW1lLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczMWMwOTUuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL292ZXJ2aWV3LWZyYW1lLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iImh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAvbG9vc2UuZHRkIj4KLTwhLS1OZXdQYWdlLS0+Ci08SFRNTD4KLTxIRUFEPgotPCEtLSBHZW5lcmF0ZWQgYnkgamF2YWRvYyBvbiBUaHUgU2VwIDI1IDE2OjQ2OjU2IFBEVCAyMDAzIC0tPgotPFRJVExFPgotT3ZlcnZpZXcgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPE1FVEEgTkFNRT0ia2V5d29yZHMiIENPTlRFTlQ9Ik92ZXJ2aWV3Ij4KLTxMSU5LIFJFTCA9InN0eWxlc2hlZXQiIFRZUEU9InRleHQvY3NzIiBIUkVGPSJzdHlsZXNoZWV0LmNzcyIgVElUTEU9IlN0eWxlIj4KLTwvSEVBRD4KLTxTQ1JJUFQ+Ci1mdW5jdGlvbiBhc2QoKQotewotcGFyZW50LmRvY3VtZW50LnRpdGxlPSJPdmVydmlldyAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSI+Ci08VFI+Ci08VEQgTk9XUkFQPjxGT05UIHNpemU9IisxIiBDTEFTUz0iRnJhbWVUaXRsZUZvbnQiPgotPEI+PC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUj4KLTxURCBOT1dSQVA+PEZPTlQgQ0xBU1M9IkZyYW1lSXRlbUZvbnQiPjxBIEhSRUY9ImFsbGNsYXNzZXMtZnJhbWUuaHRtbCIgVEFSR0VUPSJwYWNrYWdlRnJhbWUiPkFsbCBDbGFzc2VzPC9BPjwvRk9OVD4KLTxQPgotPEZPTlQgc2l6ZT0iKzEiIENMQVNTPSJGcmFtZUhlYWRpbmdGb250Ij4KLVBhY2thZ2VzPC9GT05UPgotPEJSPgotPEZPTlQgQ0xBU1M9IkZyYW1lSXRlbUZvbnQiPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vcGFja2FnZS1mcmFtZS5odG1sIiBUQVJHRVQ9InBhY2thZ2VGcmFtZSI+amF2YXgueG1sLnN0cmVhbTwvQT48L0ZPTlQ+Ci08QlI+Ci08Rk9OVCBDTEFTUz0iRnJhbWVJdGVtRm9udCI+PEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9wYWNrYWdlLWZyYW1lLmh0bWwiIFRBUkdFVD0icGFja2FnZUZyYW1lIj5vcmcuYXBhY2hlLnhtbGJlYW5zPC9BPjwvRk9OVD4KLTxCUj4KLTwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPFA+Ci0mbmJzcDsKLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vdmVydmlldy1zdW1tYXJ5Lmh0bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3ZlcnZpZXctc3VtbWFyeS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDdhZGY5Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9vdmVydmlldy1zdW1tYXJ5Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NiBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLU92ZXJ2aWV3IChYTUxCZWFucyBEb2N1bWVudGF0aW9uKQotPC9USVRMRT4KLTxNRVRBIE5BTUU9ImtleXdvcmRzIiBDT05URU5UPSJPdmVydmlldyI+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0ic3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iT3ZlcnZpZXcgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pIjsKLX0KLTwvU0NSSVBUPgotPEJPRFkgQkdDT0xPUj0id2hpdGUiIG9ubG9hZD0iYXNkKCk7Ij4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX3RvcCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl90b3BfZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNGRkZGRkYiIENMQVNTPSJOYXZCYXJDZWxsMVJldiI+ICZuYnNwOzxGT05UIENMQVNTPSJOYXZCYXJGb250MVJldiI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Im92ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImRlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSJpbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9Im92ZXJ2aWV3LXN1bW1hcnkuaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5OTyBGUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDsKLTxTQ1JJUFQ+Ci0gIDwhLS0KLSAgaWYod2luZG93PT10b3ApIHsKLSAgICBkb2N1bWVudC53cml0ZWxuKCc8QSBIUkVGPSJhbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4nKTsKLSAgfQotICAvLy0tPgotPC9TQ1JJUFQ+Ci08Tk9TQ1JJUFQ+Ci08QSBIUkVGPSJhbGxjbGFzc2VzLW5vZnJhbWUuaHRtbCIgVEFSR0VUPSIiPjxCPkFsbCBDbGFzc2VzPC9CPjwvQT4KLTwvTk9TQ1JJUFQ+Ci08L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotPCEtLSA9PT09PT09PT09PSBFTkQgT0YgTkFWQkFSID09PT09PT09PT09IC0tPgotCi08SFI+Ci0KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPlBhY2thZ2VzPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTxUUiBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9IlRhYmxlUm93Q29sb3IiPgotPFREIFdJRFRIPSIyMCUiPjxCPjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vcGFja2FnZS1zdW1tYXJ5Lmh0bWwiPmphdmF4LnhtbC5zdHJlYW08L0E+PC9CPjwvVEQ+Ci08VEQ+Jm5ic3A7PC9URD4KLTwvVFI+Ci08VFIgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJUYWJsZVJvd0NvbG9yIj4KLTxURCBXSURUSD0iMjAlIj48Qj48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL3BhY2thZ2Utc3VtbWFyeS5odG1sIj5vcmcuYXBhY2hlLnhtbGJlYW5zPC9BPjwvQj48L1REPgotPFREPlByb3ZpZGVzIGNsYXNzZXMgZm9yIFhNTCBCZWFucyBzY2hlbWEsIGluZm9zZXQsIHhwYXRoLCBhbmQgeHF1ZXJ5IGhhbmRsaW5nLjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPFA+Ci0mbmJzcDs8SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJvdmVydmlldy10cmVlLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+VHJlZTwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJkZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImluZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImhlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJvdmVydmlldy1zdW1tYXJ5Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3ZlcnZpZXctdHJlZS5odG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL292ZXJ2aWV3LXRyZWUuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDc0YTNhMi4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvb3ZlcnZpZXctdHJlZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjIyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDY6NTUgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1DbGFzcyBIaWVyYXJjaHkgKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9InN0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IkNsYXNzIEhpZXJhcmNoeSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0ib3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0ZGRkZGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxUmV2Ij4gJm5ic3A7PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxUmV2Ij48Qj5UcmVlPC9CPjwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJpbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJoZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9ImluZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0ib3ZlcnZpZXctdHJlZS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLTxDRU5URVI+Ci08SDI+Ci1IaWVyYXJjaHkgRm9yIEFsbCBQYWNrYWdlczwvSDI+Ci08L0NFTlRFUj4KLTxETD4KLTxEVD48Qj5QYWNrYWdlIEhpZXJhcmNoaWVzOjwvQj48REQ+PEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9wYWNrYWdlLXRyZWUuaHRtbCI+amF2YXgueG1sLnN0cmVhbTwvQT4sIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvcGFja2FnZS10cmVlLmh0bWwiPm9yZy5hcGFjaGUueG1sYmVhbnM8L0E+PC9ETD4KLTxIUj4KLTxIMj4KLUNsYXNzIEhpZXJhcmNoeQotPC9IMj4KLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIGphdmEubGFuZy48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL09iamVjdC5odG1sIj48Qj5PYmplY3Q8L0I+PC9BPjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIGphdmEudXRpbC48QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0NhbGVuZGFyLmh0bWwiPjxCPkNhbGVuZGFyPC9CPjwvQT4gKGltcGxlbWVudHMgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvQ2xvbmVhYmxlLmh0bWwiPkNsb25lYWJsZTwvQT4sIGphdmEuaW8uPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vU2VyaWFsaXphYmxlLmh0bWwiPlNlcmlhbGl6YWJsZTwvQT4pCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBqYXZhLnV0aWwuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9HcmVnb3JpYW5DYWxlbmRhci5odG1sIj48Qj5HcmVnb3JpYW5DYWxlbmRhcjwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbENhbGVuZGFyLmh0bWwiPjxCPlhtbENhbGVuZGFyPC9CPjwvQT48L1VMPgotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9GaWx0ZXJYbWxPYmplY3QuaHRtbCI+PEI+RmlsdGVyWG1sT2JqZWN0PC9CPjwvQT4gKGltcGxlbWVudHMgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NpbXBsZVZhbHVlLmh0bWwiPlNpbXBsZVZhbHVlPC9BPiwgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj5YbWxPYmplY3Q8L0E+KQotPExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlLmh0bWwiPjxCPkdEYXRlPC9CPjwvQT4gKGltcGxlbWVudHMgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj5HRGF0ZVNwZWNpZmljYXRpb248L0E+LCBqYXZhLmlvLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIj5TZXJpYWxpemFibGU8L0E+KQotPExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlQnVpbGRlci5odG1sIj48Qj5HRGF0ZUJ1aWxkZXI8L0I+PC9BPiAoaW1wbGVtZW50cyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGVTcGVjaWZpY2F0aW9uLmh0bWwiPkdEYXRlU3BlY2lmaWNhdGlvbjwvQT4sIGphdmEuaW8uPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vU2VyaWFsaXphYmxlLmh0bWwiPlNlcmlhbGl6YWJsZTwvQT4pCi08TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwiPjxCPkdEdXJhdGlvbjwvQj48L0E+IChpbXBsZW1lbnRzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+LCBqYXZhLmlvLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIj5TZXJpYWxpemFibGU8L0E+KQotPExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEdXJhdGlvbkJ1aWxkZXIuaHRtbCI+PEI+R0R1cmF0aW9uQnVpbGRlcjwvQj48L0E+IChpbXBsZW1lbnRzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25TcGVjaWZpY2F0aW9uLmh0bWwiPkdEdXJhdGlvblNwZWNpZmljYXRpb248L0E+LCBqYXZhLmlvLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIj5TZXJpYWxpemFibGU8L0E+KQotPExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lQ2FjaGUuaHRtbCI+PEI+UU5hbWVDYWNoZTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwiPjxCPlFOYW1lU2V0PC9CPjwvQT4gKGltcGxlbWVudHMgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj5RTmFtZVNldFNwZWNpZmljYXRpb248L0E+LCBqYXZhLmlvLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIj5TZXJpYWxpemFibGU8L0E+KQotPExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0QnVpbGRlci5odG1sIj48Qj5RTmFtZVNldEJ1aWxkZXI8L0I+PC9BPiAoaW1wbGVtZW50cyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvUU5hbWVTZXRTcGVjaWZpY2F0aW9uLmh0bWwiPlFOYW1lU2V0U3BlY2lmaWNhdGlvbjwvQT4sIGphdmEuaW8uPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vU2VyaWFsaXphYmxlLmh0bWwiPlNlcmlhbGl6YWJsZTwvQT4pCi08TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50LlJlZi5odG1sIj48Qj5TY2hlbWFDb21wb25lbnQuUmVmPC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlR3JvdXAuUmVmLmh0bWwiPjxCPlNjaGVtYUF0dHJpYnV0ZUdyb3VwLlJlZjwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEF0dHJpYnV0ZS5SZWYuaHRtbCI+PEI+U2NoZW1hR2xvYmFsQXR0cmlidXRlLlJlZjwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEVsZW1lbnQuUmVmLmh0bWwiPjxCPlNjaGVtYUdsb2JhbEVsZW1lbnQuUmVmPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50LlJlZi5odG1sIj48Qj5TY2hlbWFJZGVudGl0eUNvbnN0cmFpbnQuUmVmPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTW9kZWxHcm91cC5SZWYuaHRtbCI+PEI+U2NoZW1hTW9kZWxHcm91cC5SZWY8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFUeXBlLlJlZi5odG1sIj48Qj5TY2hlbWFUeXBlLlJlZjwvQj48L0E+PC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TdHJpbmdFbnVtQWJzdHJhY3RCYXNlLmh0bWwiPjxCPlN0cmluZ0VudW1BYnN0cmFjdEJhc2U8L0I+PC9BPiAoaW1wbGVtZW50cyBqYXZhLmlvLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIj5TZXJpYWxpemFibGU8L0E+KQotPExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuVGFibGUuaHRtbCI+PEI+U3RyaW5nRW51bUFic3RyYWN0QmFzZS5UYWJsZTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwiPjxCPlRocm93YWJsZTwvQj48L0E+IChpbXBsZW1lbnRzIGphdmEuaW8uPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vU2VyaWFsaXphYmxlLmh0bWwiPlNlcmlhbGl6YWJsZTwvQT4pCi08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBqYXZhLmxhbmcuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9FeGNlcHRpb24uaHRtbCI+PEI+RXhjZXB0aW9uPC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBqYXZhLmlvLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL0lPRXhjZXB0aW9uLmh0bWwiPjxCPklPRXhjZXB0aW9uPC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyB3ZWJsb2dpYy54bWwuc3RyZWFtLjxBIEhSRUY9Imh0dHA6Ly9lLWRvY3MuYmVhLmNvbS93bHMvZG9jczgxL2phdmFkb2NzL3dlYmxvZ2ljL3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPjxCPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQj48L0E+IChpbXBsZW1lbnRzIHdlYmxvZ2ljLnV0aWxzLk5lc3RlZFRocm93YWJsZSkKLTxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YTUxTdHJlYW1WYWxpZGF0aW9uRXhjZXB0aW9uLmh0bWwiPjxCPlhNTFN0cmVhbVZhbGlkYXRpb25FeGNlcHRpb248L0I+PC9BPjwvVUw+Ci08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+Y2xhc3MgamF2YS5sYW5nLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbi5odG1sIj48Qj5SdW50aW1lRXhjZXB0aW9uPC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUnVudGltZUV4Y2VwdGlvbi5odG1sIj48Qj5YbWxSdW50aW1lRXhjZXB0aW9uPC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sIj48Qj5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uPC9CPjwvQT48L1VMPgotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFeGNlcHRpb24uaHRtbCI+PEI+WG1sRXhjZXB0aW9uPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtRXhjZXB0aW9uLmh0bWwiPjxCPlhNTFN0cmVhbUV4Y2VwdGlvbjwvQj48L0E+PC9VTD4KLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5GYWN0b3J5Lmh0bWwiPjxCPlhtbEFueVNpbXBsZVR5cGUuRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5GYWN0b3J5Lmh0bWwiPjxCPlhtbEFueVVSSS5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5LkZhY3RvcnkuaHRtbCI+PEI+WG1sQmFzZTY0QmluYXJ5LkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCZWFucy5odG1sIj48Qj5YbWxCZWFuczwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEJvb2xlYW4uRmFjdG9yeS5odG1sIj48Qj5YbWxCb29sZWFuLkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCeXRlLkZhY3RvcnkuaHRtbCI+PEI+WG1sQnl0ZS5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlRva2VuVHlwZS5odG1sIj48Qj5YbWxDdXJzb3IuVG9rZW5UeXBlPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLlhtbEJvb2ttYXJrLmh0bWwiPjxCPlhtbEN1cnNvci5YbWxCb29rbWFyazwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbExpbmVOdW1iZXIuaHRtbCI+PEI+WG1sTGluZU51bWJlcjwvQj48L0E+PC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEYXRlLkZhY3RvcnkuaHRtbCI+PEI+WG1sRGF0ZS5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZVRpbWUuRmFjdG9yeS5odG1sIj48Qj5YbWxEYXRlVGltZS5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGVjaW1hbC5GYWN0b3J5Lmh0bWwiPjxCPlhtbERlY2ltYWwuRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERvY3VtZW50UHJvcGVydGllcy5odG1sIj48Qj5YbWxEb2N1bWVudFByb3BlcnRpZXM8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEb3VibGUuRmFjdG9yeS5odG1sIj48Qj5YbWxEb3VibGUuRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbER1cmF0aW9uLkZhY3RvcnkuaHRtbCI+PEI+WG1sRHVyYXRpb24uRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUSUVTLkZhY3RvcnkuaHRtbCI+PEI+WG1sRU5USVRJRVMuRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEVOVElUWS5GYWN0b3J5Lmh0bWwiPjxCPlhtbEVOVElUWS5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+PEI+WG1sRXJyb3I8L0I+PC9BPiAoaW1wbGVtZW50cyBqYXZhLmlvLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIj5TZXJpYWxpemFibGU8L0E+KQotPExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZhY3RvcnlIb29rLlRocmVhZENvbnRleHQuaHRtbCI+PEI+WG1sRmFjdG9yeUhvb2suVGhyZWFkQ29udGV4dDwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEZsb2F0LkZhY3RvcnkuaHRtbCI+PEI+WG1sRmxvYXQuRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdEYXkuRmFjdG9yeS5odG1sIj48Qj5YbWxHRGF5LkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGguRmFjdG9yeS5odG1sIj48Qj5YbWxHTW9udGguRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdNb250aERheS5GYWN0b3J5Lmh0bWwiPjxCPlhtbEdNb250aERheS5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXIuRmFjdG9yeS5odG1sIj48Qj5YbWxHWWVhci5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR1llYXJNb250aC5GYWN0b3J5Lmh0bWwiPjxCPlhtbEdZZWFyTW9udGguRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEhleEJpbmFyeS5GYWN0b3J5Lmh0bWwiPjxCPlhtbEhleEJpbmFyeS5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSUQuRmFjdG9yeS5odG1sIj48Qj5YbWxJRC5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUYuRmFjdG9yeS5odG1sIj48Qj5YbWxJRFJFRi5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sSURSRUZTLkZhY3RvcnkuaHRtbCI+PEI+WG1sSURSRUZTLkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnQuRmFjdG9yeS5odG1sIj48Qj5YbWxJbnQuRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludGVnZXIuRmFjdG9yeS5odG1sIj48Qj5YbWxJbnRlZ2VyLkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMYW5ndWFnZS5GYWN0b3J5Lmh0bWwiPjxCPlhtbExhbmd1YWdlLkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxMb25nLkZhY3RvcnkuaHRtbCI+PEI+WG1sTG9uZy5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5GYWN0b3J5Lmh0bWwiPjxCPlhtbE5hbWUuRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5GYWN0b3J5Lmh0bWwiPjxCPlhtbE5DTmFtZS5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+PEI+WG1sTmVnYXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOTVRPS0VOLkZhY3RvcnkuaHRtbCI+PEI+WG1sTk1UT0tFTi5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuRmFjdG9yeS5odG1sIj48Qj5YbWxOTVRPS0VOUy5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+PEI+WG1sTm9uTmVnYXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeS5odG1sIj48Qj5YbWxOb25Qb3NpdGl2ZUludGVnZXIuRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vcm1hbGl6ZWRTdHJpbmcuRmFjdG9yeS5odG1sIj48Qj5YbWxOb3JtYWxpemVkU3RyaW5nLkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOT1RBVElPTi5GYWN0b3J5Lmh0bWwiPjxCPlhtbE5PVEFUSU9OLkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxPYmplY3QuRmFjdG9yeS5odG1sIj48Qj5YbWxPYmplY3QuRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+PEI+WG1sT3B0aW9uczwvQj48L0E+IChpbXBsZW1lbnRzIGphdmEuaW8uPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvaW8vU2VyaWFsaXphYmxlLmh0bWwiPlNlcmlhbGl6YWJsZTwvQT4pCi08TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3RvcnkuaHRtbCI+PEI+WG1sUG9zaXRpdmVJbnRlZ2VyLkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxRTmFtZS5GYWN0b3J5Lmh0bWwiPjxCPlhtbFFOYW1lLkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaG9ydC5GYWN0b3J5Lmh0bWwiPjxCPlhtbFNob3J0LkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTaW1wbGVMaXN0Lmh0bWwiPjxCPlhtbFNpbXBsZUxpc3Q8L0I+PC9BPiAoaW1wbGVtZW50cyBqYXZhLnV0aWwuPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+LCBqYXZhLmlvLjxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2lvL1NlcmlhbGl6YWJsZS5odG1sIj5TZXJpYWxpemFibGU8L0E+KQotPExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFN0cmluZy5GYWN0b3J5Lmh0bWwiPjxCPlhtbFN0cmluZy5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVGltZS5GYWN0b3J5Lmh0bWwiPjxCPlhtbFRpbWUuRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFRva2VuLkZhY3RvcnkuaHRtbCI+PEI+WG1sVG9rZW4uRmFjdG9yeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+Y2xhc3Mgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkQnl0ZS5GYWN0b3J5Lmh0bWwiPjxCPlhtbFVuc2lnbmVkQnl0ZS5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRJbnQuRmFjdG9yeS5odG1sIj48Qj5YbWxVbnNpZ25lZEludC5GYWN0b3J5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5jbGFzcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVW5zaWduZWRMb25nLkZhY3RvcnkuaHRtbCI+PEI+WG1sVW5zaWduZWRMb25nLkZhY3Rvcnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmNsYXNzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZFNob3J0LkZhY3RvcnkuaHRtbCI+PEI+WG1sVW5zaWduZWRTaG9ydC5GYWN0b3J5PC9CPjwvQT48L1VMPgotPC9VTD4KLTxIMj4KLUludGVyZmFjZSBIaWVyYXJjaHkKLTwvSDI+Ci08VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL0dEYXRlU3BlY2lmaWNhdGlvbi5odG1sIj48Qj5HRGF0ZVNwZWNpZmljYXRpb248L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uU3BlY2lmaWNhdGlvbi5odG1sIj48Qj5HRHVyYXRpb25TcGVjaWZpY2F0aW9uPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2UgamF2YXgueG1sLnN0cmVhbS48QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL0xvY2F0aW9uLmh0bWwiPjxCPkxvY2F0aW9uPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0U3BlY2lmaWNhdGlvbi5odG1sIj48Qj5RTmFtZVNldFNwZWNpZmljYXRpb248L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQXR0cmlidXRlTW9kZWwuaHRtbCI+PEI+U2NoZW1hQXR0cmlidXRlTW9kZWw8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPjxCPlNjaGVtYUNvbXBvbmVudDwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFBdHRyaWJ1dGVHcm91cC5odG1sIj48Qj5TY2hlbWFBdHRyaWJ1dGVHcm91cDwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuaHRtbCI+PEI+U2NoZW1hR2xvYmFsQXR0cmlidXRlPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hTG9jYWxBdHRyaWJ1dGUuaHRtbCI+U2NoZW1hTG9jYWxBdHRyaWJ1dGU8L0E+KQotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxFbGVtZW50Lmh0bWwiPjxCPlNjaGVtYUdsb2JhbEVsZW1lbnQ8L0I+PC9BPiAoYWxzbyBleHRlbmRzIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEVsZW1lbnQuaHRtbCI+U2NoZW1hTG9jYWxFbGVtZW50PC9BPikKLTxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hSWRlbnRpdHlDb25zdHJhaW50Lmh0bWwiPjxCPlNjaGVtYUlkZW50aXR5Q29uc3RyYWludDwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFNb2RlbEdyb3VwLmh0bWwiPjxCPlNjaGVtYU1vZGVsR3JvdXA8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZS5odG1sIj48Qj5TY2hlbWFUeXBlPC9CPjwvQT48L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFGaWVsZC5odG1sIj48Qj5TY2hlbWFGaWVsZDwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEF0dHJpYnV0ZS5odG1sIj48Qj5TY2hlbWFMb2NhbEF0dHJpYnV0ZTwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFHbG9iYWxBdHRyaWJ1dGUuaHRtbCI+PEI+U2NoZW1hR2xvYmFsQXR0cmlidXRlPC9CPjwvQT4gKGFsc28gZXh0ZW5kcyBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hQ29tcG9uZW50Lmh0bWwiPlNjaGVtYUNvbXBvbmVudDwvQT4pCi08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9TY2hlbWFMb2NhbEVsZW1lbnQuaHRtbCI+PEI+U2NoZW1hTG9jYWxFbGVtZW50PC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUdsb2JhbEVsZW1lbnQuaHRtbCI+PEI+U2NoZW1hR2xvYmFsRWxlbWVudDwvQj48L0E+IChhbHNvIGV4dGVuZHMgb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYUNvbXBvbmVudC5odG1sIj5TY2hlbWFDb21wb25lbnQ8L0E+KQotPC9VTD4KLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVBhcnRpY2xlLmh0bWwiPjxCPlNjaGVtYVBhcnRpY2xlPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVByb3BlcnR5Lmh0bWwiPjxCPlNjaGVtYVByb3BlcnR5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVN0cmluZ0VudW1FbnRyeS5odG1sIj48Qj5TY2hlbWFTdHJpbmdFbnVtRW50cnk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlci5odG1sIj48Qj5TY2hlbWFUeXBlTG9hZGVyPC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1NjaGVtYVR5cGVTeXN0ZW0uaHRtbCI+PEI+U2NoZW1hVHlwZVN5c3RlbTwvQj48L0E+PC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQ3Vyc29yLkNoYW5nZVN0YW1wLmh0bWwiPjxCPlhtbEN1cnNvci5DaGFuZ2VTdGFtcDwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuWG1sTWFyay5odG1sIj48Qj5YbWxDdXJzb3IuWG1sTWFyazwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGYWN0b3J5SG9vay5odG1sIj48Qj5YbWxGYWN0b3J5SG9vazwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxTYXhIYW5kbGVyLmh0bWwiPjxCPlhtbFNheEhhbmRsZXI8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBqYXZheC54bWwuc3RyZWFtLjxBIEhSRUY9ImphdmF4L3htbC9zdHJlYW0vWE1MU3RyZWFtQ29uc3RhbnRzLmh0bWwiPjxCPlhNTFN0cmVhbUNvbnN0YW50czwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIGphdmF4LnhtbC5zdHJlYW0uPEEgSFJFRj0iamF2YXgveG1sL3N0cmVhbS9YTUxTdHJlYW1SZWFkZXIuaHRtbCI+PEI+WE1MU3RyZWFtUmVhZGVyPC9CPjwvQT48L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUb2tlblNvdXJjZS5odG1sIj48Qj5YbWxUb2tlblNvdXJjZTwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDdXJzb3IuaHRtbCI+PEI+WG1sQ3Vyc29yPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9iamVjdC5odG1sIj48Qj5YbWxPYmplY3Q8L0I+PC9BPjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2ltcGxlVmFsdWUuaHRtbCI+PEI+U2ltcGxlVmFsdWU8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQW55U2ltcGxlVHlwZS5odG1sIj48Qj5YbWxBbnlTaW1wbGVUeXBlPC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEFueVVSSS5odG1sIj48Qj5YbWxBbnlVUkk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQmFzZTY0QmluYXJ5Lmh0bWwiPjxCPlhtbEJhc2U2NEJpbmFyeTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxCb29sZWFuLmh0bWwiPjxCPlhtbEJvb2xlYW48L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRGF0ZS5odG1sIj48Qj5YbWxEYXRlPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERhdGVUaW1lLmh0bWwiPjxCPlhtbERhdGVUaW1lPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbERlY2ltYWwuaHRtbCI+PEI+WG1sRGVjaW1hbDwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJbnRlZ2VyLmh0bWwiPjxCPlhtbEludGVnZXI8L0I+PC9BPjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTG9uZy5odG1sIj48Qj5YbWxMb25nPC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEludC5odG1sIj48Qj5YbWxJbnQ8L0I+PC9BPjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2hvcnQuaHRtbCI+PEI+WG1sU2hvcnQ8L0I+PC9BPjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sQnl0ZS5odG1sIj48Qj5YbWxCeXRlPC9CPjwvQT48L1VMPgotPC9VTD4KLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5vbk5lZ2F0aXZlSW50ZWdlci5odG1sIj48Qj5YbWxOb25OZWdhdGl2ZUludGVnZXI8L0I+PC9BPjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUG9zaXRpdmVJbnRlZ2VyLmh0bWwiPjxCPlhtbFBvc2l0aXZlSW50ZWdlcjwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZExvbmcuaHRtbCI+PEI+WG1sVW5zaWduZWRMb25nPC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkSW50Lmh0bWwiPjxCPlhtbFVuc2lnbmVkSW50PC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFVuc2lnbmVkU2hvcnQuaHRtbCI+PEI+WG1sVW5zaWduZWRTaG9ydDwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxVbnNpZ25lZEJ5dGUuaHRtbCI+PEI+WG1sVW5zaWduZWRCeXRlPC9CPjwvQT48L1VMPgotPC9VTD4KLTwvVUw+Ci08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb25Qb3NpdGl2ZUludGVnZXIuaHRtbCI+PEI+WG1sTm9uUG9zaXRpdmVJbnRlZ2VyPC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5lZ2F0aXZlSW50ZWdlci5odG1sIj48Qj5YbWxOZWdhdGl2ZUludGVnZXI8L0I+PC9BPjwvVUw+Ci08L1VMPgotPC9VTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRG91YmxlLmh0bWwiPjxCPlhtbERvdWJsZTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxEdXJhdGlvbi5odG1sIj48Qj5YbWxEdXJhdGlvbjwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxFTlRJVElFUy5odG1sIj48Qj5YbWxFTlRJVElFUzwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxGbG9hdC5odG1sIj48Qj5YbWxGbG9hdDwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHRGF5Lmh0bWwiPjxCPlhtbEdEYXk8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sR01vbnRoLmh0bWwiPjxCPlhtbEdNb250aDwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxHTW9udGhEYXkuaHRtbCI+PEI+WG1sR01vbnRoRGF5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyLmh0bWwiPjxCPlhtbEdZZWFyPC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEdZZWFyTW9udGguaHRtbCI+PEI+WG1sR1llYXJNb250aDwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxIZXhCaW5hcnkuaHRtbCI+PEI+WG1sSGV4QmluYXJ5PC9CPjwvQT48TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbElEUkVGUy5odG1sIj48Qj5YbWxJRFJFRlM8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk1UT0tFTlMuaHRtbCI+PEI+WG1sTk1UT0tFTlM8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTk9UQVRJT04uaHRtbCI+PEI+WG1sTk9UQVRJT048L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sUU5hbWUuaHRtbCI+PEI+WG1sUU5hbWU8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU3RyaW5nLmh0bWwiPjxCPlhtbFN0cmluZzwvQj48L0E+PFVMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxOb3JtYWxpemVkU3RyaW5nLmh0bWwiPjxCPlhtbE5vcm1hbGl6ZWRTdHJpbmc8L0I+PC9BPjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sVG9rZW4uaHRtbCI+PEI+WG1sVG9rZW48L0I+PC9BPjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTGFuZ3VhZ2UuaHRtbCI+PEI+WG1sTGFuZ3VhZ2U8L0I+PC9BPjxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sTmFtZS5odG1sIj48Qj5YbWxOYW1lPC9CPjwvQT48VUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5DTmFtZS5odG1sIj48Qj5YbWxOQ05hbWU8L0I+PC9BPjxVTD4KLTxMSSBUWVBFPSJjaXJjbGUiPmludGVyZmFjZSBvcmcuYXBhY2hlLnhtbGJlYW5zLjxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRU5USVRZLmh0bWwiPjxCPlhtbEVOVElUWTwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRC5odG1sIj48Qj5YbWxJRDwvQj48L0E+PExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxJRFJFRi5odG1sIj48Qj5YbWxJRFJFRjwvQj48L0E+PC9VTD4KLTwvVUw+Ci08TEkgVFlQRT0iY2lyY2xlIj5pbnRlcmZhY2Ugb3JnLmFwYWNoZS54bWxiZWFucy48QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE5NVE9LRU4uaHRtbCI+PEI+WG1sTk1UT0tFTjwvQj48L0E+PC9VTD4KLTwvVUw+Ci08L1VMPgotPExJIFRZUEU9ImNpcmNsZSI+aW50ZXJmYWNlIG9yZy5hcGFjaGUueG1sYmVhbnMuPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxUaW1lLmh0bWwiPjxCPlhtbFRpbWU8L0I+PC9BPjwvVUw+Ci08L1VMPgotPC9VTD4KLTwvVUw+Ci08SFI+Ci0KLTwhLS0gPT09PT09PT09PSBTVEFSVCBPRiBOQVZCQVIgPT09PT09PT09PSAtLT4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b20iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgV0lEVEg9IjEwMCUiIENFTExQQURESU5HPSIxIiBDRUxMU1BBQ0lORz0iMCI+Ci08VFI+Ci08VEQgQ09MU1BBTj0zIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+Ci08QSBOQU1FPSJuYXZiYXJfYm90dG9tX2ZpcnN0cm93Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIENFTExQQURESU5HPSIwIiBDRUxMU1BBQ0lORz0iMyI+Ci0gIDxUUiBBTElHTj0iY2VudGVyIiBWQUxJR049InRvcCI+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJvdmVydmlldy1zdW1tYXJ5Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+T3ZlcnZpZXc8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5QYWNrYWdlPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPkNsYXNzPC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRkZGRkZGIiBDTEFTUz0iTmF2QmFyQ2VsbDFSZXYiPiAmbmJzcDs8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDFSZXYiPjxCPlRyZWU8L0I+PC9GT05UPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJkZXByZWNhdGVkLWxpc3QuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5EZXByZWNhdGVkPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImluZGV4LWFsbC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkluZGV4PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImhlbHAtZG9jLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SGVscDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDwvVFI+Ci08L1RBQkxFPgotPC9URD4KLTxURCBBTElHTj0icmlnaHQiIFZBTElHTj0idG9wIiBST1dTUEFOPTM+PEVNPgotPC9FTT4KLTwvVEQ+Ci08L1RSPgotCi08VFI+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotJm5ic3A7UFJFViZuYnNwOwotJm5ic3A7TkVYVDwvRk9OVD48L1REPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSAgPEEgSFJFRj0iaW5kZXguaHRtbCIgVEFSR0VUPSJfdG9wIj48Qj5GUkFNRVM8L0I+PC9BPiAgJm5ic3A7Ci0mbmJzcDs8QSBIUkVGPSJvdmVydmlldy10cmVlLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2UvcGFja2FnZS1saXN0IGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL3BhY2thZ2UtbGlzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I1NWQxZS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2UvcGFja2FnZS1saXN0CisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1qYXZheC54bWwuc3RyZWFtCi1vcmcuYXBhY2hlLnhtbGJlYW5zCmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2UvcGFja2FnZXMuaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9wYWNrYWdlcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTRhMzZlLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9wYWNrYWdlcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Ci08IS0tTmV3UGFnZS0tPgotPEhUTUw+Ci08SEVBRD4KLTwhLS0gR2VuZXJhdGVkIGJ5IGphdmFkb2Mgb24gVGh1IFNlcCAyNSAxNjo0Njo1NiBQRFQgMjAwMyAtLT4KLTxUSVRMRT4KLSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikKLTwvVElUTEU+Ci08TElOSyBSRUwgPSJzdHlsZXNoZWV0IiBUWVBFPSJ0ZXh0L2NzcyIgSFJFRj0ic3R5bGVzaGVldC5jc3MiIFRJVExFPSJTdHlsZSI+Ci08L0hFQUQ+Ci08U0NSSVBUPgotZnVuY3Rpb24gYXNkKCkKLXsKLXBhcmVudC5kb2N1bWVudC50aXRsZT0iIChYTUxCZWFucyBEb2N1bWVudGF0aW9uKSI7Ci19Ci08L1NDUklQVD4KLTxCT0RZIEJHQ09MT1I9IndoaXRlIiBvbmxvYWQ9ImFzZCgpOyI+Ci0KLTxCUj4KLQotPEJSPgotCi08QlI+Ci08Q0VOVEVSPgotVGhlIGZyb250IHBhZ2UgaGFzIGJlZW4gcmVsb2NhdGVkLlBsZWFzZSBzZWU6Ci08QlI+Ci0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8QSBIUkVGPSJpbmRleC5odG1sIj5GcmFtZSB2ZXJzaW9uPC9BPgotPEJSPgotJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PEEgSFJFRj0ib3ZlcnZpZXctc3VtbWFyeS5odG1sIj5Ob24tZnJhbWUgdmVyc2lvbi48L0E+PC9DRU5URVI+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9zZXJpYWxpemVkLWZvcm0uaHRtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9zZXJpYWxpemVkLWZvcm0uaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI1Y2I1OS4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQvZG9jcy9yZWZlcmVuY2Uvc2VyaWFsaXplZC1mb3JtLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDI3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgotPCEtLU5ld1BhZ2UtLT4KLTxIVE1MPgotPEhFQUQ+Ci08IS0tIEdlbmVyYXRlZCBieSBqYXZhZG9jIG9uIFRodSBTZXAgMjUgMTY6NDc6MDEgUERUIDIwMDMgLS0+Ci08VElUTEU+Ci1TZXJpYWxpemVkIEZvcm0gKFhNTEJlYW5zIERvY3VtZW50YXRpb24pCi08L1RJVExFPgotPExJTksgUkVMID0ic3R5bGVzaGVldCIgVFlQRT0idGV4dC9jc3MiIEhSRUY9InN0eWxlc2hlZXQuY3NzIiBUSVRMRT0iU3R5bGUiPgotPC9IRUFEPgotPFNDUklQVD4KLWZ1bmN0aW9uIGFzZCgpCi17Ci1wYXJlbnQuZG9jdW1lbnQudGl0bGU9IlNlcmlhbGl6ZWQgRm9ybSAoWE1MQmVhbnMgRG9jdW1lbnRhdGlvbikiOwotfQotPC9TQ1JJUFQ+Ci08Qk9EWSBCR0NPTE9SPSJ3aGl0ZSIgb25sb2FkPSJhc2QoKTsiPgotCi08IS0tID09PT09PT09PT0gU1RBUlQgT0YgTkFWQkFSID09PT09PT09PT0gLS0+Ci08QSBOQU1FPSJuYXZiYXJfdG9wIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjAiIFdJRFRIPSIxMDAlIiBDRUxMUEFERElORz0iMSIgQ0VMTFNQQUNJTkc9IjAiPgotPFRSPgotPFREIENPTFNQQU49MyBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPgotPEEgTkFNRT0ibmF2YmFyX3RvcF9maXJzdHJvdyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBDRUxMUEFERElORz0iMCIgQ0VMTFNQQUNJTkc9IjMiPgotICA8VFIgQUxJR049ImNlbnRlciIgVkFMSUdOPSJ0b3AiPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0ib3ZlcnZpZXctc3VtbWFyeS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPk92ZXJ2aWV3PC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+UGFja2FnZTwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj5DbGFzczwvRk9OVD4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0ib3ZlcnZpZXctdHJlZS5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPlRyZWU8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iZGVwcmVjYXRlZC1saXN0Lmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+RGVwcmVjYXRlZDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJpbmRleC1hbGwuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5JbmRleDwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8QSBIUkVGPSJoZWxwLWRvYy5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkhlbHA8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8L1RSPgotPC9UQUJMRT4KLTwvVEQ+Ci08VEQgQUxJR049InJpZ2h0IiBWQUxJR049InRvcCIgUk9XU1BBTj0zPjxFTT4KLTwvRU0+Ci08L1REPgotPC9UUj4KLQotPFRSPgotPFREIEJHQ09MT1I9IndoaXRlIiBDTEFTUz0iTmF2QmFyQ2VsbDIiPjxGT05UIFNJWkU9Ii0yIj4KLSZuYnNwO1BSRVYmbmJzcDsKLSZuYnNwO05FWFQ8L0ZPTlQ+PC9URD4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0gIDxBIEhSRUY9ImluZGV4Lmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+RlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7PEEgSFJFRj0ic2VyaWFsaXplZC1mb3JtLmh0bWwiIFRBUkdFVD0iX3RvcCI+PEI+Tk8gRlJBTUVTPC9CPjwvQT4gICZuYnNwOwotJm5ic3A7Ci08U0NSSVBUPgotICA8IS0tCi0gIGlmKHdpbmRvdz09dG9wKSB7Ci0gICAgZG9jdW1lbnQud3JpdGVsbignPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Jyk7Ci0gIH0KLSAgLy8tLT4KLTwvU0NSSVBUPgotPE5PU0NSSVBUPgotPEEgSFJFRj0iYWxsY2xhc3Nlcy1ub2ZyYW1lLmh0bWwiIFRBUkdFVD0iIj48Qj5BbGwgQ2xhc3NlczwvQj48L0E+Ci08L05PU0NSSVBUPgotPC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLTwhLS0gPT09PT09PT09PT0gRU5EIE9GIE5BVkJBUiA9PT09PT09PT09PSAtLT4KLQotPEhSPgotPENFTlRFUj4KLTxIMT4KLVNlcmlhbGl6ZWQgRm9ybTwvSDE+Ci08L0NFTlRFUj4KLTxIUiBTSVpFPSI0IiBOT1NIQURFPgotCi08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREIEFMSUdOPSJjZW50ZXIiPjxGT05UIFNJWkU9IisyIj4KLTxCPlBhY2thZ2U8L0I+IDxCPmphdmF4LnhtbC5zdHJlYW08L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPFA+Ci08QSBOQU1FPSJqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbiI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5DbGFzcyA8QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL1hNTFN0cmVhbUV4Y2VwdGlvbi5odG1sIj5qYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbjwvQT4gaW1wbGVtZW50cyBTZXJpYWxpemFibGU8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPFA+Ci08QSBOQU1FPSJzZXJpYWxpemVkRm9ybSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5TZXJpYWxpemVkIEZpZWxkczwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08SDM+Ci1uZXN0ZWQ8L0gzPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvVGhyb3dhYmxlLmh0bWwiPlRocm93YWJsZTwvQT4gPEI+bmVzdGVkPC9CPjwvUFJFPgotPERMPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxIMz4KLWxvY2F0aW9uPC9IMz4KLTxQUkU+Ci08QSBIUkVGPSJqYXZheC94bWwvc3RyZWFtL0xvY2F0aW9uLmh0bWwiPkxvY2F0aW9uPC9BPiA8Qj5sb2NhdGlvbjwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08UD4KLTxIUiBTSVpFPSI0IiBOT1NIQURFPgotCi08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREIEFMSUdOPSJjZW50ZXIiPjxGT05UIFNJWkU9IisyIj4KLTxCPlBhY2thZ2U8L0I+IDxCPm9yZy5hcGFjaGUueG1sYmVhbnM8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPFA+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLkdEYXRlIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkNsYXNzIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0RhdGUuaHRtbCI+b3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZTwvQT4gaW1wbGVtZW50cyBTZXJpYWxpemFibGU8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPFA+Ci08QSBOQU1FPSJzZXJpYWxpemVkRm9ybSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5TZXJpYWxpemVkIEZpZWxkczwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08SDM+Ci1fYml0czwvSDM+Ci08UFJFPgotaW50IDxCPl9iaXRzPC9CPjwvUFJFPgotPERMPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxIMz4KLV9DWTwvSDM+Ci08UFJFPgotaW50IDxCPl9DWTwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08SDM+Ci1fTTwvSDM+Ci08UFJFPgotaW50IDxCPl9NPC9CPjwvUFJFPgotPERMPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxIMz4KLV9EPC9IMz4KLTxQUkU+Ci1pbnQgPEI+X0Q8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEgzPgotX2g8L0gzPgotPFBSRT4KLWludCA8Qj5faDwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08SDM+Ci1fbTwvSDM+Ci08UFJFPgotaW50IDxCPl9tPC9CPjwvUFJFPgotPERMPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxIMz4KLV9zPC9IMz4KLTxQUkU+Ci1pbnQgPEI+X3M8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEgzPgotX2ZzPC9IMz4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT4gPEI+X2ZzPC9CPjwvUFJFPgotPERMPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxIMz4KLV90enNpZ248L0gzPgotPFBSRT4KLWludCA8Qj5fdHpzaWduPC9CPjwvUFJFPgotPERMPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxIMz4KLV90emg8L0gzPgotPFBSRT4KLWludCA8Qj5fdHpoPC9CPjwvUFJFPgotPERMPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxIMz4KLV90em08L0gzPgotPFBSRT4KLWludCA8Qj5fdHptPC9CPjwvUFJFPgotPERMPgotPERMPgotPC9ETD4KLTwvREw+Ci0KLTxQPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZUJ1aWxkZXIiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+Q2xhc3MgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRGF0ZUJ1aWxkZXIuaHRtbCI+b3JnLmFwYWNoZS54bWxiZWFucy5HRGF0ZUJ1aWxkZXI8L0E+IGltcGxlbWVudHMgU2VyaWFsaXphYmxlPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxQPgotPEEgTkFNRT0ic2VyaWFsaXplZEZvcm0iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+U2VyaWFsaXplZCBGaWVsZHM8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEgzPgotX2JpdHM8L0gzPgotPFBSRT4KLWludCA8Qj5fYml0czwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08SDM+Ci1fQ1k8L0gzPgotPFBSRT4KLWludCA8Qj5fQ1k8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEgzPgotX008L0gzPgotPFBSRT4KLWludCA8Qj5fTTwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08SDM+Ci1fRDwvSDM+Ci08UFJFPgotaW50IDxCPl9EPC9CPjwvUFJFPgotPERMPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxIMz4KLV9oPC9IMz4KLTxQUkU+Ci1pbnQgPEI+X2g8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEgzPgotX208L0gzPgotPFBSRT4KLWludCA8Qj5fbTwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08SDM+Ci1fczwvSDM+Ci08UFJFPgotaW50IDxCPl9zPC9CPjwvUFJFPgotPERMPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxIMz4KLV9mczwvSDM+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbWF0aC9CaWdEZWNpbWFsLmh0bWwiPkJpZ0RlY2ltYWw8L0E+IDxCPl9mczwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08SDM+Ci1fdHpzaWduPC9IMz4KLTxQUkU+Ci1pbnQgPEI+X3R6c2lnbjwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08SDM+Ci1fdHpoPC9IMz4KLTxQUkU+Ci1pbnQgPEI+X3R6aDwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08SDM+Ci1fdHptPC9IMz4KLTxQUkU+Ci1pbnQgPEI+X3R6bTwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08UD4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkNsYXNzIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvR0R1cmF0aW9uLmh0bWwiPm9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uPC9BPiBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08UD4KLTxBIE5BTUU9InNlcmlhbGl6ZWRGb3JtIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPlNlcmlhbGl6ZWQgRmllbGRzPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxIMz4KLV9zaWduPC9IMz4KLTxQUkU+Ci1pbnQgPEI+X3NpZ248L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEgzPgotX0NZPC9IMz4KLTxQUkU+Ci1pbnQgPEI+X0NZPC9CPjwvUFJFPgotPERMPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxIMz4KLV9NPC9IMz4KLTxQUkU+Ci1pbnQgPEI+X008L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEgzPgotX0Q8L0gzPgotPFBSRT4KLWludCA8Qj5fRDwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08SDM+Ci1faDwvSDM+Ci08UFJFPgotaW50IDxCPl9oPC9CPjwvUFJFPgotPERMPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxIMz4KLV9tPC9IMz4KLTxQUkU+Ci1pbnQgPEI+X208L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEgzPgotX3M8L0gzPgotPFBSRT4KLWludCA8Qj5fczwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08SDM+Ci1fZnM8L0gzPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL21hdGgvQmlnRGVjaW1hbC5odG1sIj5CaWdEZWNpbWFsPC9BPiA8Qj5fZnM8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08L0RMPgotPC9ETD4KLQotPFA+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLkdEdXJhdGlvbkJ1aWxkZXIiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+Q2xhc3MgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9HRHVyYXRpb25CdWlsZGVyLmh0bWwiPm9yZy5hcGFjaGUueG1sYmVhbnMuR0R1cmF0aW9uQnVpbGRlcjwvQT4gaW1wbGVtZW50cyBTZXJpYWxpemFibGU8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPFA+Ci08QSBOQU1FPSJzZXJpYWxpemVkRm9ybSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5TZXJpYWxpemVkIEZpZWxkczwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08SDM+Ci1fc2lnbjwvSDM+Ci08UFJFPgotaW50IDxCPl9zaWduPC9CPjwvUFJFPgotPERMPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxIMz4KLV9DWTwvSDM+Ci08UFJFPgotaW50IDxCPl9DWTwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08SDM+Ci1fTTwvSDM+Ci08UFJFPgotaW50IDxCPl9NPC9CPjwvUFJFPgotPERMPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxIMz4KLV9EPC9IMz4KLTxQUkU+Ci1pbnQgPEI+X0Q8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEgzPgotX2g8L0gzPgotPFBSRT4KLWludCA8Qj5faDwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08SDM+Ci1fbTwvSDM+Ci08UFJFPgotaW50IDxCPl9tPC9CPjwvUFJFPgotPERMPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxIMz4KLV9zPC9IMz4KLTxQUkU+Ci1pbnQgPEI+X3M8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEgzPgotX2ZzPC9IMz4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9tYXRoL0JpZ0RlY2ltYWwuaHRtbCI+QmlnRGVjaW1hbDwvQT4gPEI+X2ZzPC9CPjwvUFJFPgotPERMPgotPERMPgotPC9ETD4KLTwvREw+Ci0KLTxQPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldCI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5DbGFzcyA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1FOYW1lU2V0Lmh0bWwiPm9yZy5hcGFjaGUueG1sYmVhbnMuUU5hbWVTZXQ8L0E+IGltcGxlbWVudHMgU2VyaWFsaXphYmxlPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxQPgotPEEgTkFNRT0ic2VyaWFsaXplZEZvcm0iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+U2VyaWFsaXplZCBGaWVsZHM8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEgzPgotX2ludmVydGVkPC9IMz4KLTxQUkU+Ci1ib29sZWFuIDxCPl9pbnZlcnRlZDwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08SDM+Ci1faW5jbHVkZWRVUklzPC9IMz4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL1NldC5odG1sIj5TZXQ8L0E+IDxCPl9pbmNsdWRlZFVSSXM8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEgzPgotX2V4Y2x1ZGVkUU5hbWVzPC9IMz4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL1NldC5odG1sIj5TZXQ8L0E+IDxCPl9leGNsdWRlZFFOYW1lczwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08SDM+Ci1faW5jbHVkZWRRTmFtZXM8L0gzPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvU2V0Lmh0bWwiPlNldDwvQT4gPEI+X2luY2x1ZGVkUU5hbWVzPC9CPjwvUFJFPgotPERMPgotPERMPgotPC9ETD4KLTwvREw+Ci0KLTxQPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldEJ1aWxkZXIiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+Q2xhc3MgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9RTmFtZVNldEJ1aWxkZXIuaHRtbCI+b3JnLmFwYWNoZS54bWxiZWFucy5RTmFtZVNldEJ1aWxkZXI8L0E+IGltcGxlbWVudHMgU2VyaWFsaXphYmxlPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxQPgotPEEgTkFNRT0ic2VyaWFsaXplZEZvcm0iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+U2VyaWFsaXplZCBGaWVsZHM8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEgzPgotX2ludmVydGVkPC9IMz4KLTxQUkU+Ci1ib29sZWFuIDxCPl9pbnZlcnRlZDwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08SDM+Ci1faW5jbHVkZWRVUklzPC9IMz4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL1NldC5odG1sIj5TZXQ8L0E+IDxCPl9pbmNsdWRlZFVSSXM8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEgzPgotX2V4Y2x1ZGVkUU5hbWVzPC9IMz4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL1NldC5odG1sIj5TZXQ8L0E+IDxCPl9leGNsdWRlZFFOYW1lczwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08SDM+Ci1faW5jbHVkZWRRTmFtZXM8L0gzPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvU2V0Lmh0bWwiPlNldDwvQT4gPEI+X2luY2x1ZGVkUU5hbWVzPC9CPjwvUFJFPgotPERMPgotPERMPgotPC9ETD4KLTwvREw+Ci0KLTxQPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5TY2hlbWFUeXBlTG9hZGVyRXhjZXB0aW9uIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkNsYXNzIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvU2NoZW1hVHlwZUxvYWRlckV4Y2VwdGlvbi5odG1sIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlNjaGVtYVR5cGVMb2FkZXJFeGNlcHRpb248L0E+IGltcGxlbWVudHMgU2VyaWFsaXphYmxlPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxQPgotPEEgTkFNRT0ic2VyaWFsaXplZEZvcm0iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+U2VyaWFsaXplZCBGaWVsZHM8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEgzPgotX2NvZGU8L0gzPgotPFBSRT4KLWludCA8Qj5fY29kZTwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08UD4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuU3RyaW5nRW51bUFic3RyYWN0QmFzZSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5DbGFzcyA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1N0cmluZ0VudW1BYnN0cmFjdEJhc2UuaHRtbCI+b3JnLmFwYWNoZS54bWxiZWFucy5TdHJpbmdFbnVtQWJzdHJhY3RCYXNlPC9BPiBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08UD4KLTxBIE5BTUU9InNlcmlhbGl6ZWRGb3JtIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPlNlcmlhbGl6ZWQgRmllbGRzPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxIMz4KLV9zdHJpbmc8L0gzPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL2xhbmcvU3RyaW5nLmh0bWwiPlN0cmluZzwvQT4gPEI+X3N0cmluZzwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08SDM+Ci1faW50PC9IMz4KLTxQUkU+Ci1pbnQgPEI+X2ludDwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08UD4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sQ2FsZW5kYXIiPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+Q2xhc3MgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YbWxDYWxlbmRhci5odG1sIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbENhbGVuZGFyPC9BPiBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08UD4KLQotPFA+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEVycm9yIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkNsYXNzIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxFcnJvcjwvQT4gaW1wbGVtZW50cyBTZXJpYWxpemFibGU8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPFA+Ci08QSBOQU1FPSJzZXJpYWxpemVkRm9ybSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5TZXJpYWxpemVkIEZpZWxkczwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08SDM+Ci1fbWVzc2FnZTwvSDM+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvbGFuZy9TdHJpbmcuaHRtbCI+U3RyaW5nPC9BPiA8Qj5fbWVzc2FnZTwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotPEhSPgotCi08SDM+Ci1fc291cmNlPC9IMz4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS9sYW5nL1N0cmluZy5odG1sIj5TdHJpbmc8L0E+IDxCPl9zb3VyY2U8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEgzPgotX3NldmVyaXR5PC9IMz4KLTxQUkU+Ci1pbnQgPEI+X3NldmVyaXR5PC9CPjwvUFJFPgotPERMPgotPERMPgotPC9ETD4KLTwvREw+Ci08SFI+Ci0KLTxIMz4KLV9saW5lPC9IMz4KLTxQUkU+Ci1pbnQgPEI+X2xpbmU8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEgzPgotX2NvbHVtbjwvSDM+Ci08UFJFPgotaW50IDxCPl9jb2x1bW48L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08L0RMPgotPC9ETD4KLTxIUj4KLQotPEgzPgotX29mZnNldDwvSDM+Ci08UFJFPgotaW50IDxCPl9vZmZzZXQ8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08L0RMPgotPC9ETD4KLQotPFA+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbiI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5DbGFzcyA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbEV4Y2VwdGlvbi5odG1sIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbEV4Y2VwdGlvbjwvQT4gaW1wbGVtZW50cyBTZXJpYWxpemFibGU8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPFA+Ci08QSBOQU1FPSJzZXJpYWxpemVkRm9ybSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5TZXJpYWxpemVkIEZpZWxkczwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08SDM+Ci1fZXJyb3JzPC9IMz4KLTxQUkU+Ci08QSBIUkVGPSJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS40LjIvZG9jcy9hcGkvamF2YS91dGlsL0xpc3QuaHRtbCI+TGlzdDwvQT4gPEI+X2Vycm9yczwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08UD4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sT3B0aW9ucyI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5DbGFzcyA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbE9wdGlvbnMuaHRtbCI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxPcHRpb25zPC9BPiBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08UD4KLTxBIE5BTUU9InNlcmlhbGl6ZWRGb3JtIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPlNlcmlhbGl6ZWQgRmllbGRzPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxIMz4KLV9tYXA8L0gzPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTWFwLmh0bWwiPk1hcDwvQT4gPEI+X21hcDwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08UD4KLTxBIE5BTUU9Im9yZy5hcGFjaGUueG1sYmVhbnMuWG1sUnVudGltZUV4Y2VwdGlvbiI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVTdWJIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49Mj48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5DbGFzcyA8QSBIUkVGPSJvcmcvYXBhY2hlL3htbGJlYW5zL1htbFJ1bnRpbWVFeGNlcHRpb24uaHRtbCI+b3JnLmFwYWNoZS54bWxiZWFucy5YbWxSdW50aW1lRXhjZXB0aW9uPC9BPiBpbXBsZW1lbnRzIFNlcmlhbGl6YWJsZTwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08UD4KLTxBIE5BTUU9InNlcmlhbGl6ZWRGb3JtIj48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZUhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0xPjxGT05UIFNJWkU9IisyIj4KLTxCPlNlcmlhbGl6ZWQgRmllbGRzPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxIMz4KLV9lcnJvcnM8L0gzPgotPFBSRT4KLTxBIEhSRUY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvTGlzdC5odG1sIj5MaXN0PC9BPiA8Qj5fZXJyb3JzPC9CPjwvUFJFPgotPERMPgotPERMPgotPC9ETD4KLTwvREw+Ci0KLTxQPgotPEEgTkFNRT0ib3JnLmFwYWNoZS54bWxiZWFucy5YbWxTaW1wbGVMaXN0Ij48IS0tIC0tPjwvQT4KLTxUQUJMRSBCT1JERVI9IjEiIENFTExQQURESU5HPSIzIiBDRUxMU1BBQ0lORz0iMCIgV0lEVEg9IjEwMCUiPgotPFRSIEJHQ09MT1I9IiNDQ0NDRkYiIENMQVNTPSJUYWJsZVN1YkhlYWRpbmdDb2xvciI+Ci08VEQgQ09MU1BBTj0yPjxGT05UIFNJWkU9IisyIj4KLTxCPkNsYXNzIDxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sU2ltcGxlTGlzdC5odG1sIj5vcmcuYXBhY2hlLnhtbGJlYW5zLlhtbFNpbXBsZUxpc3Q8L0E+IGltcGxlbWVudHMgU2VyaWFsaXphYmxlPC9CPjwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci0KLTxQPgotPEEgTkFNRT0ic2VyaWFsaXplZEZvcm0iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTE+PEZPTlQgU0laRT0iKzIiPgotPEI+U2VyaWFsaXplZCBGaWVsZHM8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPEgzPgotdW5kZXJseWluZzwvSDM+Ci08UFJFPgotPEEgSFJFRj0iaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNC4yL2RvY3MvYXBpL2phdmEvdXRpbC9MaXN0Lmh0bWwiPkxpc3Q8L0E+IDxCPnVuZGVybHlpbmc8L0I+PC9QUkU+Ci08REw+Ci08REw+Ci08L0RMPgotPC9ETD4KLQotPFA+Ci08QSBOQU1FPSJvcmcuYXBhY2hlLnhtbGJlYW5zLlhNTFN0cmVhbVZhbGlkYXRpb25FeGNlcHRpb24iPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMSIgQ0VMTFBBRERJTkc9IjMiIENFTExTUEFDSU5HPSIwIiBXSURUSD0iMTAwJSI+Ci08VFIgQkdDT0xPUj0iI0NDQ0NGRiIgQ0xBU1M9IlRhYmxlU3ViSGVhZGluZ0NvbG9yIj4KLTxURCBDT0xTUEFOPTI+PEZPTlQgU0laRT0iKzIiPgotPEI+Q2xhc3MgPEEgSFJFRj0ib3JnL2FwYWNoZS94bWxiZWFucy9YTUxTdHJlYW1WYWxpZGF0aW9uRXhjZXB0aW9uLmh0bWwiPm9yZy5hcGFjaGUueG1sYmVhbnMuWE1MU3RyZWFtVmFsaWRhdGlvbkV4Y2VwdGlvbjwvQT4gaW1wbGVtZW50cyBTZXJpYWxpemFibGU8L0I+PC9GT05UPjwvVEQ+Ci08L1RSPgotPC9UQUJMRT4KLQotPFA+Ci08QSBOQU1FPSJzZXJpYWxpemVkRm9ybSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIxIiBDRUxMUEFERElORz0iMyIgQ0VMTFNQQUNJTkc9IjAiIFdJRFRIPSIxMDAlIj4KLTxUUiBCR0NPTE9SPSIjQ0NDQ0ZGIiBDTEFTUz0iVGFibGVIZWFkaW5nQ29sb3IiPgotPFREIENPTFNQQU49MT48Rk9OVCBTSVpFPSIrMiI+Ci08Qj5TZXJpYWxpemVkIEZpZWxkczwvQj48L0ZPTlQ+PC9URD4KLTwvVFI+Ci08L1RBQkxFPgotCi08SDM+Ci1feG1sRXJyb3I8L0gzPgotPFBSRT4KLTxBIEhSRUY9Im9yZy9hcGFjaGUveG1sYmVhbnMvWG1sRXJyb3IuaHRtbCI+WG1sRXJyb3I8L0E+IDxCPl94bWxFcnJvcjwvQj48L1BSRT4KLTxETD4KLTxETD4KLTwvREw+Ci08L0RMPgotCi08UD4KLTxIUj4KLQotPCEtLSA9PT09PT09PT09IFNUQVJUIE9GIE5BVkJBUiA9PT09PT09PT09IC0tPgotPEEgTkFNRT0ibmF2YmFyX2JvdHRvbSI+PCEtLSAtLT48L0E+Ci08VEFCTEUgQk9SREVSPSIwIiBXSURUSD0iMTAwJSIgQ0VMTFBBRERJTkc9IjEiIENFTExTUEFDSU5HPSIwIj4KLTxUUj4KLTxURCBDT0xTUEFOPTMgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4KLTxBIE5BTUU9Im5hdmJhcl9ib3R0b21fZmlyc3Ryb3ciPjwhLS0gLS0+PC9BPgotPFRBQkxFIEJPUkRFUj0iMCIgQ0VMTFBBRERJTkc9IjAiIENFTExTUEFDSU5HPSIzIj4KLSAgPFRSIEFMSUdOPSJjZW50ZXIiIFZBTElHTj0idG9wIj4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Im92ZXJ2aWV3LXN1bW1hcnkuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5PdmVydmlldzwvQj48L0ZPTlQ+PC9BPiZuYnNwOzwvVEQ+Ci0gIDxURCBCR0NPTE9SPSIjRUVFRUZGIiBDTEFTUz0iTmF2QmFyQ2VsbDEiPiAgICA8Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPlBhY2thZ2U8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+Q2xhc3M8L0ZPTlQ+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9Im92ZXJ2aWV3LXRyZWUuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5UcmVlPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPFREIEJHQ09MT1I9IiNFRUVFRkYiIENMQVNTPSJOYXZCYXJDZWxsMSI+ICAgIDxBIEhSRUY9ImRlcHJlY2F0ZWQtbGlzdC5odG1sIj48Rk9OVCBDTEFTUz0iTmF2QmFyRm9udDEiPjxCPkRlcHJlY2F0ZWQ8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iaW5kZXgtYWxsLmh0bWwiPjxGT05UIENMQVNTPSJOYXZCYXJGb250MSI+PEI+SW5kZXg8L0I+PC9GT05UPjwvQT4mbmJzcDs8L1REPgotICA8VEQgQkdDT0xPUj0iI0VFRUVGRiIgQ0xBU1M9Ik5hdkJhckNlbGwxIj4gICAgPEEgSFJFRj0iaGVscC1kb2MuaHRtbCI+PEZPTlQgQ0xBU1M9Ik5hdkJhckZvbnQxIj48Qj5IZWxwPC9CPjwvRk9OVD48L0E+Jm5ic3A7PC9URD4KLSAgPC9UUj4KLTwvVEFCTEU+Ci08L1REPgotPFREIEFMSUdOPSJyaWdodCIgVkFMSUdOPSJ0b3AiIFJPV1NQQU49Mz48RU0+Ci08L0VNPgotPC9URD4KLTwvVFI+Ci0KLTxUUj4KLTxURCBCR0NPTE9SPSJ3aGl0ZSIgQ0xBU1M9Ik5hdkJhckNlbGwyIj48Rk9OVCBTSVpFPSItMiI+Ci0mbmJzcDtQUkVWJm5ic3A7Ci0mbmJzcDtORVhUPC9GT05UPjwvVEQ+Ci08VEQgQkdDT0xPUj0id2hpdGUiIENMQVNTPSJOYXZCYXJDZWxsMiI+PEZPTlQgU0laRT0iLTIiPgotICA8QSBIUkVGPSJpbmRleC5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPkZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOzxBIEhSRUY9InNlcmlhbGl6ZWQtZm9ybS5odG1sIiBUQVJHRVQ9Il90b3AiPjxCPk5PIEZSQU1FUzwvQj48L0E+ICAmbmJzcDsKLSZuYnNwOwotPFNDUklQVD4KLSAgPCEtLQotICBpZih3aW5kb3c9PXRvcCkgewotICAgIGRvY3VtZW50LndyaXRlbG4oJzxBIEhSRUY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPicpOwotICB9Ci0gIC8vLS0+Ci08L1NDUklQVD4KLTxOT1NDUklQVD4KLTxBIEhSRUY9ImFsbGNsYXNzZXMtbm9mcmFtZS5odG1sIiBUQVJHRVQ9IiI+PEI+QWxsIENsYXNzZXM8L0I+PC9BPgotPC9OT1NDUklQVD4KLTwvRk9OVD48L1REPgotPC9UUj4KLTwvVEFCTEU+Ci08IS0tID09PT09PT09PT09IEVORCBPRiBOQVZCQVIgPT09PT09PT09PT0gLS0+Ci0KLTxIUj4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL3N0eWxlc2hlZXQuY3NzIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MvcmVmZXJlbmNlL3N0eWxlc2hlZXQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDFkODAzLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3JlZmVyZW5jZS9zdHlsZXNoZWV0LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qIEphdmFkb2Mgc3R5bGUgc2hlZXQgKi8KLQotLyogRGVmaW5lIGNvbG9ycywgZm9udHMgYW5kIG90aGVyIHN0eWxlIGF0dHJpYnV0ZXMgaGVyZSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHMgKi8KLQotLyogUGFnZSBiYWNrZ3JvdW5kIGNvbG9yICovCi1ib2R5IHsgCQotCWZvbnQtZmFtaWx5OiBWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOwotCWJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYgCi19Ci0KLWJvZHkgewotLyoJcGFkZGluZzogMHB4IDBweCAwcHggMTVweDsgKi8KLQliYWNrZ3JvdW5kOiAjZmZmZmZmOwotCWNvbG9yOiAjMDAwMDA7Ci0JZm9udC1zaXplOiA4MCU7Ci19Ci0KLS8qIFRhYmxlIGNvbG9ycyAqLwotLlRhYmxlSGVhZGluZ0NvbG9yICAgICB7IGJhY2tncm91bmQ6ICNDQ0NDRkYgfSAvKiBEYXJrIG1hdXZlICovCi0uVGFibGVTdWJIZWFkaW5nQ29sb3IgIHsgYmFja2dyb3VuZDogI0VFRUVGRiB9IC8qIExpZ2h0IG1hdXZlICovCi0uVGFibGVSb3dDb2xvciAgICAgICAgIHsgYmFja2dyb3VuZDogI0ZGRkZGRiB9IC8qIFdoaXRlICovCi0KLS8qIEZvbnQgdXNlZCBpbiBsZWZ0LWhhbmQgZnJhbWUgbGlzdHMgKi8KLS5GcmFtZVRpdGxlRm9udCAgIHsgZm9udC1zaXplOiAxMHB0czsgZm9udC1mYW1pbHk6IEhlbHZldGljYSwgQXJpYWwsIHNhbi1zZXJpZiB9Ci0uRnJhbWVIZWFkaW5nRm9udCB7IGZvbnQtc2l6ZTogMTBwdHM7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2EsIEFyaWFsLCBzYW4tc2VyaWYgfQotLkZyYW1lSXRlbUZvbnQgICAgeyBmb250LXNpemU6IDEwcHRzOyBmb250LWZhbWlseTogSGVsdmV0aWNhLCBBcmlhbCwgc2FuLXNlcmlmIH0KLQotLyogRXhhbXBsZSBvZiBzbWFsbGVyLCBzYW5zLXNlcmlmIGZvbnQgaW4gZnJhbWVzICovCi0vKiAuRnJhbWVJdGVtRm9udCAgeyBmb250LXNpemU6IDEwcHQ7IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmIH0gKi8KLQotLyogTmF2aWdhdGlvbiBiYXIgZm9udHMgYW5kIGNvbG9ycyAqLwotLk5hdkJhckNlbGwxICAgIHsgYmFja2dyb3VuZC1jb2xvcjojRUVFRUZGO30vKiBMaWdodCBtYXV2ZSAqLwotLk5hdkJhckNlbGwxUmV2IHsgYmFja2dyb3VuZC1jb2xvcjojMDAwMDhCO30vKiBEYXJrIEJsdWUgKi8KLS5OYXZCYXJGb250MSAgICB7IGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBjb2xvcjojMDAwMDAwO30KLS5OYXZCYXJGb250MVJldiB7IGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBjb2xvcjojRkZGRkZGO30KLQotLk5hdkJhckNlbGwyICAgIHsgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGJhY2tncm91bmQtY29sb3I6I0ZGRkZGRjt9Ci0uTmF2QmFyQ2VsbDMgICAgeyBmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgYmFja2dyb3VuZC1jb2xvcjojRkZGRkZGO30KLQpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MveG1sYmVhbnMuY3NzIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L2RvY3MveG1sYmVhbnMuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjYyMDYxLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC9kb2NzL3htbGJlYW5zLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDQ4MiArMCwwIEBACi0vKiAgVGhlIHN0eWxlcyBtb3N0IGxpa2VseSB0byBiZSB1c2VkIGFyZToKLQktIFRpdGxlOiBUaGUgdGl0bGUgb2YgdGhlIHRvcGljCi0JLSBoMSwgaDIsIGgzOiBGaXJzdCwgc2Vjb25kLCBhbmQgdGhpcmQtbGV2ZWwgaGVhZGluZ3Mgd2l0aGluIHRoZSBib2R5IG9mIGEgdG9waWMKLQktIHJlbGF0ZWRUb3BpY3M6IFJlbGF0ZWQgVG9waWNzCi0JLSBwcm9jVGl0bGU6IFdpdGhpbiBIb3cgRG8gSTouLi4gdG9waWNzLCBmb3IgaGVhZGluZ3Mgd2l0aGluIHRoZSBib2R5IG9mIGEgdG9waWMgdGhhdCBhcmUgZm9sbG93ZWQgYnkKLQkgIGJ1bGxldGVkIHByb2NlZHVyZXMgKCJUbyBkbyB0aGlzIikuCi0JLSBwcmU6IEZvciBjb2RlIGJsb2NrcwotCS0gbGFuZ2lubGluZTogRm9yIGNvZGUgZnJhZ21lbnRzIHdpdGhpbiBhIChub24tY29kZSkgcmVndWxhciBzZWN0aW9uLgotCS0gbm90ZXBhcmE6IE5vdGVzCSAKLSovCi1oMSwKLWgyLAotaDMsCi1oNCwKLWg1LAotcCwKLXByb2N0aXRsZSwKLXJlbGF0ZWR0b3BpY3MgewotCWZvbnQtZmFtaWx5OiBWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOwotCWNvbG9yOiAjMDAwMDAwOwotfQotCi0vKiBVc2UgaDEgZm9yIGFsbCBmaXJzdC1sZXZlbCBoZWFkaW5ncyB3aXRoaW4gdGhlIGJvZHkgb2YgYSB0b3BpYy4gCi0gICBGb3IgdGhlIHRvcGljIHRpdGxlLCB1c2UgdGhlIFRpdGxlIHN0eWxlLiAqLwotaDEgewotCWZvbnQtc2l6ZTogMTM1JTsKLQltYXJnaW4tdG9wOiAuNWVtOwotCW1hcmdpbi1ib3R0b206IC41ZW07Ci19Ci0KLS8qIFVzZSBoMiBmb3IgYWxsIHNlY29uZC1sZXZlbCBoZWFkaW5ncy4gKi8KLWgyIHsKLQlmb250LXNpemU6IDEyNSU7Ci0JbWFyZ2luLXRvcDogMWVtOwotCW1hcmdpbi1ib3R0b206IC42ZW07Ci19Ci0KLS8qIFVzZSBoMyBmb3IgYWxsIHRoaXJkLWxldmVsIGhlYWRpbmdzLiAqLwotaDMgewotCWZvbnQtc2l6ZTogMTEwJTsKLQltYXJnaW4tdG9wOiAxZW07Ci0JbWFyZ2luLWJvdHRvbTogLjZlbTsKLX0KLQotLyogVXNlIGg0IGZvciBhbGwgZm91cnRoLWxldmVsIGhlYWRpbmdzLiAKLSAgIE5vdGU6IHRoaXMgc3R5bGUgbG9va3MgaWRlbnRpY2FsIHRvIHRoZSByZWxhdGVkdG9waWNzIGFuZCBwcm9jdGl0bGUgc3R5bGVzLiAqLwotaDQgewotCWZvbnQtc2l6ZTogMTA1JTsKLQltYXJnaW4tdG9wOiAxZW07Ci0JbWFyZ2luLWJvdHRvbTogLjZlbTsKLX0KLQotLyogVXNlIGg1IGZvciBhbGwgZmlmdGgtbGV2ZWwgaGVhZGluZy4gIAotICAgQ3VycmVudGx5LCB0aGVyZSBhcmUgbm8gaDVzIGluIHVzZSBpbiB0aGUgZG9jdW1lbnQuKi8KLWg1IHsKLQlmb250LXNpemU6IDEwMCU7Ci0JbWFyZ2luLXRvcDogMWVtOwotCW1hcmdpbi1ib3R0b206IC42ZW07Ci19Ci0KLS8qIFVzZSB0aGUgVGl0bGUgc3R5bGUgZm9yIHRoZSB0aXRsZSBvZiBhIHRvcGljLiAqLwotcC5UaXRsZSB7Ci0JZm9udC13ZWlnaHQ6IGJvbGQ7Ci0JZm9udC1zdHlsZTogbm9ybWFsOwotCWZvbnQtZmFtaWx5OiBWZXJkYW5hLCBzYW5zLXNlcmlmOwotCWZvbnQtc2l6ZTogMTQyJTsKLX0KLQotLyogVGhpcyBkZXByYXRlZCB0YWcgY3JlYXRlcyBhIGRpdiB0aGF0IGRlc2lnbmF0ZXMgdGhlIHRpdGxlLiAqLwotI3RvcGljdGl0bGUgewotfQotCi0vKiBUaGlzIGRlcHJlY2F0ZWQgdGFnIGNyZWF0ZXMgYSBkaXZlIHRoYXQgZGVzaWduYXRlcyBhbGwgYm9keSB0ZXh0LiAqLwotI3RvcGljdGV4dCB7Ci19Ci0KLS8qIFVzZWQgZm9yIGZpZ3VyZSBjYXB0aW9ucy4qLwotcC5hcnR0aXRsZSB7Ci0JZm9udC13ZWlnaHQ6IEJvbGQ7Ci19Ci0gIAotLyogVGhlIGF0dHJpYnV0ZSBzdHlsZSByZXNlbWJsZXMgdGhlIG5hdnRpdGxlIGFuZCBwYXJ0ZGVzYyBzdHlsZXMgaW4gdGhhdCBpdCBrZWVwcyB0aGUgbmV4dCBwYXJhZ3JhcGggCi0gICBmbHVzaCB3aXRoIGl0LiBVc2UgaXQgd2hlbiB5b3UgbGlzdCB0aGUgYXR0cmlidXRlcyBvZiBzeW50YXggaW4gYSByZWZlcmVuY2UgdG9waWMuCi0gICBUaGUgYXJndW1lbnQgc3R5bGUgc2hvdWxkIGFsd2F5cyBiZSBmb2xsb3dlZCBieSB0aGUgcGFydGRlc2Mgc3R5bGUuICovCi1wLmF0dHJpYnV0ZSB7Ci0JbWFyZ2luLXRvcDogLjZlbTsKLQltYXJnaW4tYm90dG9tOiAwcHg7Ci0JZm9udC13ZWlnaHQ6IEJvbGQ7Ci0JCi19Ci0KLS8qIFN0YW5kYXJkIEhUTUwgdGFnLiAqLwotYm9keSB7Ci0JcGFkZGluZzogMHB4IDBweCAwcHggMTVweDsKLQliYWNrZ3JvdW5kOiAjZmZmZmZmOwotCWNvbG9yOiAjMDAwMDA7Ci0JZm9udC1zaXplOiA4MCU7Ci0JZm9udC1mYW1pbHk6IFZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7Ci19Ci0KLS8qIFN0YW5kYXJkIEhUTUwgdGFnLiAqLwotc3Bhbi5ib2xkIHsKLQlmb250LXdlaWdodDogQm9sZDsKLX0KLQotLyogU3RhbmRhcmQgSFRNTCB0YWcuICovCi1ibG9ja3F1b3RlIHsKLQltYXJnaW46IDBlbSAwZW0gMGVtIDJlbTsKLQlwYWRkaW5nOiAwcHg7Ci19Ci0KLS8qIFVzZSB0aGUgZmlsZXBhdGggc3R5bGUgdG8gZGVzaWduYXRlIGZpbGUgcGF0aHMuIEl0IGlzIGN1cnJlbnRseSBhIG1vbm9zcGFjZSBmaWxlLiAqLwotc3Bhbi5maWxlcGF0aCB7Ci0JZm9udDogMTAwJSBDb3VyaWVyIE5ldyBDb3VyaWVyIG1vbm87Ci0JZm9udC1mYW1pbHk6ICJDb3VyaWVyIE5ldyIsIG1vbm9zcGFjZTsKLX0KLQotLyogVGhlIGxhbmdpbmxpbmUgc3R5bGUsIGxpa2UgdXNlcmlucHV0IGFuZCBmaWxlcGF0aCwgYWxzbyByZW5kZXJzIHRleHQgbW9ub3NwYWNlLiBVc2UgdGhpcwotICAgdG8gZGVub3RlIGFueSBpbmRpdmlkdWFsIGluc3RhbmNlIG9mIGNvZGUgaW4gdGhlIGNvbnRleHQgb2Ygbm9uLWNvZGVkIHRleHQuIEZvciBleGFtcGxlLCAKLSAgIHlvdSB3b3VsZCB1c2UgdGhpcyB0byBkZW5vdGUgdGhlIG5hbWUgb2YgYSBjbGFzcyB3aGVuIHlvdSdyZSBkZXNjcmliaW5nIGl0IGluIHRoZSBwYXJhZ3JhcGggdGhhdAotICAgcHJlY2VkZXMgYSBjb2RlIHNhbXBsZS4gVG8gZGVub3RlIGEgY29kZSBzYW1wbGUsIGhvd2V2ZXIsIHVzZSB0aGUgPHByZT4gdGFnLiAqLwotc3Bhbi5sYW5naW5saW5lIHsKLQlmb250OiAxMDAlIENvdXJpZXIgTmV3IENvdXJpZXIgbW9ubzsKLQlmb250LWZhbWlseTogIkNvdXJpZXIgTmV3IiwgbW9ub3NwYWNlOwotfQotCi0vKiBUaGUgbGlzdHBsYWluIHN0eWxlIG5hcnJvd3MgdGhlIG1hcmdpbiBiZXR3ZWVuIHRoZSBmb3JtYXR0ZWQgbGluZSBhbmQgdGhlIG9uZSBiZWZvcmUgaXQuCi0gICBJdCBpcyB0byBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSBzZWNvbmQgcGFyYWdyYXBoIGluIGEgbGlzdCBpdGVtLCBhbG9uZyB3aXRoIHRoZSBpbmRlbnQgYW5kCi0gICB1bmluZGVudCBidXR0b25zIGluIERyZWFtd2VhdmVyLiAqLwotcC5saXN0cGxhaW4gewotCW1hcmdpbi10b3A6IDAuN2VtOwotCW1hcmdpbi1ib3R0b206IDA7Ci0JcGFkZGluZzogMGVtOwotfQotCi0vKiBBbGwgdGV4dCBpbiB0aGUgbmF2dGl0bGUgc3R5bGUgc2hvdWxkIGluY2x1ZGUgYSBsaW5rIHRvIGFub3RoZXIgdG9waWMuCi0gICBUaGUgbmF2dGl0bGUgc3R5bGUgaXMgdXNlZCBpbiBuYXZpZ2F0aW9uYWwgbm9kZSB0b3BpY3MsIGluIENsYXNzIHJlZmVyZW5jZQotICAgdG9waWNzLCBhbmQgaW4gTWV0aG9kIHJlZmVyZW5jZSB0b3BpY3MuIEZvciBleGFtcGxlLCBpbiB0aGUgIlRvcGljcyAKLSAgIEluY2x1ZGVkIGluIHRoaXMgU2VjdGlvbiIgc2VjdGlvbiBvZiBhIG5hdmlnYXRpb24gdG9waWMsIHlvdSBpbmNsdWRlIHRoZSBsaW5rcyB0byBhbGwgb2YgCi0gICB0aGUgdG9waWNzIGluIHRoYXQgY2hhcHRlciwgYWxvbmcgd2l0aCBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHdoYXQgeW91J2xsIGZpbmQgaW4gZWFjaC4gVXNlIHRoZQotICAgbmF2dGl0bGUgc3R5bGUgZm9yIHRoZSBsaW5rZWQgdGV4dC4gSXQgZGlmZmVycyBmcm9tIGEgbm9ybWFsIHBhcmFncmFwaCBzdHlsZSBpbiB0aGF0IGl0IGRvZXMgbm90IAotICAgaW5jbHVkZSBhbiBleHRyYSBwYXJhZ3JhcGggYnJlYWsgYmV0d2VlbiB0aGUgbGluayBhbmQgdGhlIGRlc2NyaXB0aXZlIHRleHQuICovCi1wLm5hdnRpdGxlIHsKLQltYXJnaW4tdG9wOiAuNmVtOwotCW1hcmdpbi1ib3R0b206IDBlbTsKLX0KLQotLyogVGhlIG5hdmRlc2Mgc3R5bGUgaXMgdXNlZCBpbiBuYXZpZ2F0aW9uYWwgbm9kZSB0b3BpY3MsIGluIENsYXNzIHJlZmVyZW5jZQotICAgdG9waWNzLCBhbmQgaW4gTWV0aG9kIHJlZmVyZW5jZSB0b3BpY3MuIEZvciBleGFtcGxlLCBpbiB0aGUgIlRvcGljcyBJbmNsdWRlZCBpbiB0aGlzIFNlY3Rpb24iIAotICAgc2VjdGlvbiBvZiBhIG5hdmlnYXRpb24gdG9waWMsIHlvdSBpbmNsdWRlIHRoZSBsaW5rcyB0byBhbGwgb2YgdGhlIHRvcGljcyBpbiB0aGF0IGNoYXB0ZXIsCi0gICBhbG9uZyB3aXRoIGEgYnJpZWYgZGVzY3JpcHRpb24gb2Ygd2hhdCB5b3UnbGwgZmluZCBpbiBlYWNoLiBVc2UgdGhpcyBzdHlsZSBmb3IgdGhlIGRlc2NyaXB0aXZlIHRleHQuIAotICAgSXQgaW5kZW50cyB0aGUgdGV4dCBvbmUgdGFiIHN0b3AgYW5kIGtlZXBzIHRoZSBtYXJnaW4gYmV0d2VlbiB0aGlzIHN0eWxlIGFuZCB0aGUgbmF2dGl0bGUgc3R5bGUgc21hbGwuICAqLwotcC5uYXZkZXNjIHsKLQltYXJnaW4tYm90dG9tOiAxZW07Ci0JbWFyZ2luLWxlZnQ6IDEuOWVtOwotCW1hcmdpbi10b3A6IDBlbTsKLX0KLQotLyogVGhlIG5vdGVwYXJhIHN0eWxlIGluZGVudHMgeW91ciB0ZXh0IHRvIHRoZSB0YWIgc3RvcCBmb3Igbm90ZQotICAgdGV4dC4gWW91IHNob3VsZCBhbHdheXMgYmVnaW4gTm90ZSB0ZXh0IHdpdGggdGhlIHdvcmQgIk5vdGU6IiBpbgotICAgYm9sZGZhY2UuICovCi1wLm5vdGVwYXJhIHsKLQltYXJnaW4tbGVmdDogMmVtOwotCW1hcmdpbi1yaWdodDogMmVtOwotCW1hcmdpbi1ib3R0b206IDEuNWVtOwotfQotCi0vKiBUaGUgcGFydG5hbWUgc3R5bGUgcmVzZW1ibGVzIHRoZSBuYXZ0aXRsZSBzdHlsZSBpbiB0aGF0IGl0IGtlZXBzIHRoZSBuZXh0IHBhcmFncmFwaCBmbHVzaCB3aXRoIGl0LiAKLSAgIFlvdSB1c2UgaXQgd2hlbiB5b3UgbGlzdCB0aGUgcGFyYW1ldGVycyBpbiBhIHJlZmVyZW5jZSB0b3BpYy4gSXQgaXMgYWxzbyB1c2VkIGN1cnJlbnRseSBpbiB0aGUgCi0gICBnbG9zc2FyeSB0byBkZXNpZ25hdGUgZ2xvc3NhcnkgZW50cmllcy4gSXQgcmVuZGVycyB0ZXh0IGl0YWxpYy4KLSAgIFRoZSBwYXJ0bmFtZSBzdHlsZSBzaG91bGQgYWx3YXlzIGJlIGZvbGxvd2VkIGJ5IHRoZSBwYXJ0ZGVzYyBzdHlsZS4qLwotcC5wYXJ0bmFtZSB7Ci0JbWFyZ2luLXRvcDogLjZlbTsKLQltYXJnaW4tYm90dG9tOiAwcHg7Ci0JZm9udC1zdHlsZTogaXRhbGljOwotfQotCi0vKiBVc2UgdGhlIHBhcnRkZXNjIHN0eWxlIHdoZW4geW91IGRlc2NyaWJlIHRoZSBmdW5jdGlvbiBvZiB0aGUgcHJvcGVydGllcywgcGFyYW1ldGVycywgb3IgZXhjZXB0aW9ucyAKLSAgIGxpc3RlZCBpbiBhIHJlZmVyZW5jZSB0b3BpYy4gSXQgaXMgYWxzbyB1c2VkIGN1cnJlbnRseSBpbiB0aGUgZ2xvc3NhcnkgdG8gZGVzaWduYXRlIGdsb3NzYXJ5IAotICAgZGVmaW5pdGlvbnMuIFRoZSBzdHlsZSBpbmRlbnRzIHRoZSBkZXNjcmlwdGlvbiBzbGlnaHRseS4KLSAgIFRoZSBwYXJ0ZGVzYyBzdHlsZSBzaG91bGQgYWx3YXlzIGZvbGxvdyB0aGUgcGFydG5hbWUgb3IgYXR0cmlidXRlIHN0eWxlLiovCi1wLnBhcnRkZXNjIHsKLQltYXJnaW4tYm90dG9tOiAxZW07Ci0JbWFyZ2luLWxlZnQ6IDEuOWVtOwotCW1hcmdpbi10b3A6IDBlbTsKLQotfQotCi0vKiBUaGUgcG9pbnQgb2YgdGhlIHByb2N0aXRsZSBzdHlsZSBpcyB0aGUgc2FtZSBhcyB0aGUgcG9pbnQgb2YgdGhlIHJlbGF0ZWR0b3BpY3Mgc3R5bGUuICAKLSAgIEl0IGFwcGxpZXMgdG8gYWxsIGhlYWRpbmdzIHRoYXQgYmVnaW4gd2l0aCAiVG8gW2RvIHNvbWV0aGluZ10iLiBJdCBsb29rcyBpZGVudGljYWwgdG8gdGhlIGg0IHN0eWxlLiAgKi8KLXAucHJvY3RpdGxlIHsKLQlmb250LXNpemU6IDExMCU7Ci0JbWFyZ2luLXRvcDogMWVtOwotCW1hcmdpbi1ib3R0b206IC42ZW07Ci0JZm9udC13ZWlnaHQ6IEJvbGQ7Ci0KLX0KLQotLyogVXNlIHRoZSByZWxhdGVkdG9waWNzIHN0eWxlLCBmb3IgdGhlIHdvcmRzICJSZWxhdGVkIFRvcGljcyIgYXQgdGhlIGVuZCBvZiBhIHRvcGljLiAKLSAgIEl0IGxvb2tzIGlkZW50aWNhbCB0byB0aGUgaDQgc3R5bGUuICovCi1wLnJlbGF0ZWR0b3BpY3MgewotCWZvbnQtc2l6ZTogMTIwJTsKLQltYXJnaW4tdG9wOiAxZW07Ci0JbWFyZ2luLWJvdHRvbTogLjZlbTsKLQlmb250LXdlaWdodDogQm9sZDsKLX0KLQotLyogVGhlIHN5bnRheCBzdHlsZSByZW5kZXJzIHRleHQgYm9sZC4gVXNlIGl0IHRvIHN0eWxlIGFsbCBzeW50YXggbGluZXMgdW5kZXIgdGhlCi0gICBTeW50YXggaGVhZGluZyBvZiByZWZlcmVuY2UgdG9waWNzLiAqLwotcC5zeW50YXggewotCWZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Ci0JbGluZS1oZWlnaHQ6IG5vcm1hbDsKLQlmb250LXdlaWdodDogQm9sZDsKLX0KLQotLyogVXNlIHRoZSBzeW50YXhpbmRlbnQgc3R5bGUgdG8gaW5kZW50IHN1Yi1wcm9wZXJ0aWVzIG9mIHN5bnRheCBkZWNsYXJhdGlvbnMuICovCi1wLnN5bnRheGluZGVudCB7Ci0JZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKLQlsaW5lLWhlaWdodDogbm9ybWFsOwotCWZvbnQtd2VpZ2h0OiBCb2xkOwotCW1hcmdpbi1sZWZ0OiAxLjVlbTsKLQltYXJnaW4tdG9wOiAwZW07Ci0JbWFyZ2luLWJvdHRvbTogMHB4OwotfQotCi0KLXAuZmlsZXVybCB7Ci0JZm9udC1zaXplOiA4cHQ7Ci19Ci0KLXAubW9kaWZpZWRkYXRlIHsKLQlmb250LXNpemU6IDhwdDsKLX0KLQotLyogVGhlIHN5bnRheHBhcnRuYW1lIGNoYXJhY3RlciBzdHlsZSByZW5kZXJzIHRleHQgaXRhbGljLiBVc2UgaXQgdG8gZGVzaWduYXRlIAotICAgc3ludGF4IGVsZW1lbnRzIGluIHJlZmVyZW5jZSB0b3BpY3MuKi8KLXNwYW4uc3ludGF4cGFydG5hbWUgewotCWZvbnQtc3R5bGU6IGl0YWxpYzsKLQlmb250LXdlaWdodDogbm9ybWFsOwotfQotCi0vKiBUaGVzZSBzcGVjaWZpY2F0aW9ucyBkaWN0YXRlIHRoZSBtYXJnaW5zIGFuZCB3aWR0aCBvZiB0YWJsZXMuICovCi10YWJsZSB7Ci0Jd2lkdGg6IDkwJTsKLQltYXJnaW4tdG9wOiAuNmVtOwotCW1hcmdpbi1ib3R0b206IC4zZW07Ci19Ci0KLS8qIFRoZSBiYWNrZ3JvdW5kIG9mIGhlYWRlciBjZWxscyBpcyBncmV5LCBhbmQgdGhlIHRleHQgaXMgYm90dG9tLWFsaWduZWQuICovCi10aCB7Ci0JcGFkZGluZy1sZWZ0OiA4cHg7Ci0JcGFkZGluZy1yaWdodDogOHB4OwotCWJhY2tncm91bmQ6ICNjY2NjY2M7Ci0JdGV4dC1hbGlnbjogbGVmdDsKLQlmb250LXNpemU6IDgwJTsKLQlmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsKLQl2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOwotfQotCi0vKiBUaGUgdGV4dCBpbiBub3JtYWwgdGFibGUgY2VsbHMgaXMgdG9wLWFsaWduZWQuICovCi10ZCB7Ci0JcGFkZGluZy1sZWZ0OiA4cHg7Ci0JcGFkZGluZy1yaWdodDogOHB4OwotCWJhY2tncm91bmQ6ICNmZmZmZmY7Ci0JdmVydGljYWwtYWxpZ246IHRvcDsKLQlmb250LXNpemU6IDgwJTsKLQlmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsKLX0KLQotLyogVGhpcyBzdHlsZSBjcmVhdGVzIHNwYWNlIGFib3ZlIGFuZCBiZWxvdyB0YWJsZSB0ZXh0IGJldHdlZW4gcGFyYWdyYXBoIGFuZCB0aGUgdGFibGUgYm9yZGVycy4gKi8KLXAudGFibGV0ZXh0IHsKLQltYXJnaW4tdG9wOiAuNmVtOwotCW1hcmdpbi1ib3R0b206IC42ZW07Ci19Ci0KLS8qIFRoZSBlZGl0b3IgdXNlcyB0aGlzIHN0eWxlIHdoZW4gY3JlYXRpbmcgdGVtcGxhdGUgZ3VpZGVzIHRvIGRlc2lnbmF0ZSBhIHN0eWxlIGFubm90YXRpb24uIAotICAgWW91IHByb2JhYmx5IHdvbid0IHdhbnQgdG8gdXNlIGl0IGFueXdoZXJlIGVsc2UgaW4gdGhlIGd1aWRlLiAqLwotc3Bhbi50ZW1wbGF0ZSB7Ci0JY29sb3I6ICNGRjAwRkY7CQotfQotCi1hLnRvYy1ub2RlIHsKLQlmb250LXNpemU6MTFweDsKLQljb2xvcjowMDAwMDA7Ci0JbWFyZ2luLWxlZnQ6IDBweDsKLQltYXJnaW4tdG9wOiAwcHg7Ci0JbWFyZ2luLWJvdHRvbTogMHB4OwotICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Ci0gICAgZm9udC1mYW1pbHk6IFRhaG9tYTsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiNGRkZGRkY7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7ICAgICAgICAKLX0KLQotLyogVGhlIHVzZXJpbnB1dCBzdHlsZSByZW5kZXJzIHRleHQgbW9ub3NwYWNlLlVzZSB0aGlzIHN0eWxlIHRvIGhpZ2hsaWdodCB0ZXh0IHRoYXQgYSB1c2VyIAotICAgdHlwZXMgaW50byBhIHRleHQgZmllbGQuICAqLwotc3Bhbi51c2VyaW5wdXQgewotCWZvbnQ6IDEwMCUgQ291cmllciBOZXcgQ291cmllciBtb25vOwotCWZvbnQtZmFtaWx5OiAiQ291cmllciBOZXciLCBtb25vc3BhY2U7Ci19Ci0KLS8qIFN0YW5kYXJkIEhUTUwgdGFncy4gKi8KLXVsLAotb2wgewotCWZvbnQtZmFtaWx5OiBWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOwotCWxpc3Qtc3R5bGUtcG9zaXRpb246IG91dHNpZGU7Ci0JbGlzdC1zdHlsZS1pbWFnZTogbm9uZTsKLQltYXJnaW4tdG9wOiAwZW07Ci0JbWFyZ2luLWJvdHRvbTogMGVtOwotfQotCi0vKiBTdGFuZGFyZCBIVE1MIHRhZy4gKi8KLW9sIHsKLQlsaXN0LXN0eWxlLXR5cGU6IDE7Ci0JbWFyZ2luLWxlZnQ6IDJlbTsKLX0KLQotLyogU3RhbmRhcmQgSFRNTCB0YWcuICovCi11bCB7Ci0JbGlzdC1zdHlsZS10eXBlOiBkaXNjOwotCW1hcmdpbi1sZWZ0OiAxLjVlbTsKLX0KLQotLyogU3RhbmRhcmQgSFRNTCB0YWcuICovCi1saSB7Ci0JbWFyZ2luLXRvcDogMS4zZW07IAotCW1hcmdpbi1ib3R0b206IDBlbTsKLX0KLQotYTpsaW5rIHsKLQljb2xvcjogIzMzNjZDQzsKLX0KLWE6aG92ZXIgewotCXgtdGV4dC11bmRlcmxpbmU6IG5vcm1hbDsKLQkvKmJlZ2luIWthZG92e3sqLyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgLyp9fWVuZCFrYWRvdiovIAotfQotCi1hOmFjdGl2ZSB7Ci0JeC10ZXh0LXVuZGVybGluZTogbm9ybWFsOwotCS8qYmVnaW4ha2Fkb3Z7eyovIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyAvKn19ZW5kIWthZG92Ki8gCi19Ci0KLWE6dmlzaXRlZCB7Ci0JY29sb3I6ICM4MDMzODA7Ci19Ci0KLWEgewotCXgtdGV4dC11bmRlcmxpbmU6IG9mZjsKLQl4LXRleHQtb3ZlcmxpbmU6IG9mZjsKLQl4LXRleHQtbGluZS10aHJvdWdoOiBvZmY7Ci0JLypiZWdpbiFrYWRvdnt7Ki8gdGV4dC1kZWNvcmF0aW9uOiBub25lIG5vbmUgbm9uZTsgLyp9fWVuZCFrYWRvdiovIAotfQotYTpsaW5rIHsKLQljb2xvcjogIzMzNjZDQzsKLX0KLQotYTpob3ZlciB7Ci0JeC10ZXh0LXVuZGVybGluZTogbm9ybWFsOwotCS8qYmVnaW4ha2Fkb3Z7eyovIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyAvKn19ZW5kIWthZG92Ki8gCi19Ci0KLWE6YWN0aXZlIHsKLQl4LXRleHQtdW5kZXJsaW5lOiBub3JtYWw7Ci0JLypiZWdpbiFrYWRvdnt7Ki8gdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IC8qfX1lbmQha2Fkb3YqLyAKLX0KLQotYTp2aXNpdGVkIHsKLQljb2xvcjogIzAwMDA2NjsKLX0KLQotZGl2LmZvb3RlciB7Ci19Ci0KLS5idXR0b25jbGFzcwotewotCWZvbnQtc2l6ZToxMHB4OwotCWhlaWdodDoyMHB4OwotfQotCi0uZm9ybWNsYXNzCi17Ci0JZm9udC1zaXplOjEwcHg7Ci0JaGVpZ2h0OjE3cHg7Ci19Ci0KLQotCi0KLS8qREVQUkVDQVRFRCovCi1wLmNvZGVibG9jayB7Ci0JZm9udC1zaXplOiAxMDAlOwotCWZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Ci0JbGluZS1oZWlnaHQ6IDFlbTsKLQl4LXRleHQtdGFiLXN0b3BzOiByZXBlYXQgMWluOwotCXdoaXRlLXNwYWNlOiBub3dyYXA7Ci0JY29sb3I6ICMwMDAwMDA7Ci0JY3Vyc29yOiB0ZXh0OwotCXBhZGRpbmctcmlnaHQ6IDFlbTsKLQlwYWRkaW5nLWxlZnQ6IDFlbTsKLQlwYWRkaW5nLXRvcDogMGVtOwotCXBhZGRpbmctYm90dG9tOiAwZW07Ci0JbWFyZ2luLWJvdHRvbTogMGVtOwotCW1hcmdpbi10b3A6IDBlbTsKLQl4LXRleHQtdW5kZXJsaW5lOiBPZmY7Ci0JLypiZWdpbiFrYWRvdnt7Ki8gdGV4dC1kZWNvcmF0aW9uOiBub25lOyAvKn19ZW5kIWthZG92Ki8gCi19Ci0KLS8qIERFUFJFQ0FURUQgKi8KLXAuYnVsbGV0aW5kZW50MSB7Ci0JbWFyZ2luLWxlZnQ6IDEuNWVtOwotCW1hcmdpbi10b3A6IDA7Ci0JbWFyZ2luLWJvdHRvbTogMDsKLX0KLQotLyogREVQUkVDQVRFRCAqLwotcC5idWxsZXRpbmRlbnQyIHsKLQltYXJnaW4tbGVmdDogNS4xZW07Ci0JbWFyZ2luLXRvcDogMDsKLQltYXJnaW4tYm90dG9tOiAwOwotfQotCi0vKiBERVBSRUNBVEVEICovCi1wLmJ1bGxldGluZGVudDMgewotCW1hcmdpbi1sZWZ0OiA0LjNlbTsKLX0KLQotLyogREVQUkVDQVRFRCAqLwotcC5pbmRlbnQxIHsKLQltYXJnaW4tbGVmdDogMS41ZW07Ci0JbWFyZ2luLXJpZ2h0OiAxLjllbTsKLX0KLQotLyogREVQUkVDQVRFRCAqLwotcC5pbmRlbnQyIHsKLQltYXJnaW4tbGVmdDogMi45ZW07Ci0JbWFyZ2luLXJpZ2h0OiAxLjllbTsKLX0KLQotLyogREVQUkVDQVRFRCAqLwotcC5pbmRlbnQzIHsKLQltYXJnaW4tbGVmdDogNC4zZW07Ci0JbWFyZ2luLXJpZ2h0OiAxLjllbTsKLX0KLQotLyogREVQUkVDQVRFRCAqLwotcC5udW1iZXJlZGluZGVudDEgewotCW1hcmdpbi1sZWZ0OiAyLjJlbTsKLQltYXJnaW4tdG9wOiAwOwotCW1hcmdpbi1ib3R0b206IDA7Ci19Ci0KLS8qIERFUFJFQ0FURUQgKi8KLXAubnVtYmVyZWRpbmRlbnQyIHsKLQltYXJnaW4tbGVmdDogNi4zZW07Ci0JbWFyZ2luLXRvcDogMDsKLQltYXJnaW4tYm90dG9tOiAwOwotfQotCi0vKiBERVBSRUNBVEVEICovCi1wLm51bWJlcmVkaW5kZW50MyB7Ci0JbWFyZ2luLWxlZnQ6IDEwLjVlbTsKLQltYXJnaW4tdG9wOiAwOwotCW1hcmdpbi1ib3R0b206IDA7Ci19CQotCi0vKiBERVBSRUNBVEVEICovCi1wLnRhYmxldGl0bGUgewotCW1hcmdpbi1sZWZ0OiAwOwotCWZvbnQtd2VpZ2h0OiBCb2xkOwotfQotCi0KLS8qIFRoZXNlIHN0eWxlcyBhcmUgdXNlZCBieSB0aGUgc2VhcmNoIHJlc3VsdHMgcGFnZSAqLwotCi0uc2VhcmNoLW5vZGUgewotCWZvbnQtc2l6ZToxMHB4OwotCWNvbG9yOjAwMDAwMDsKLX0KLQotYS5zZWFyY2gtbm9kZSB7Ci0JZm9udC1zaXplOjEwcHg7Ci0JY29sb3I6MDAwMDAwOwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC94ZG9jcy9jb21tdW5pdHkvaW5kZXgueG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L3hkb2NzL2NvbW11bml0eS9pbmRleC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNGQ5NjYuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L3hkb2NzL2NvbW11bml0eS9pbmRleC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBkb2N1bWVudCBQVUJMSUMgIi0vL0FQQUNIRS8vRFREIERvY3VtZW50YXRpb24gVjEuMi8vRU4iICJodHRwOi8vYXBhY2hlLm9yZy9mb3JyZXN0L2R0ZC9kb2N1bWVudC12MTIuZHRkIj4KLTxkb2N1bWVudD4KLQk8aGVhZGVyPgotCQk8dGl0bGU+WE1MQmVhbnMgQ29tbXVuaXR5PC90aXRsZT4KLQk8L2hlYWRlcj4KLQk8Ym9keT4KLQkJPHNlY3Rpb24+Ci0JCQk8dGl0bGU+TWFpbGluZyBMaXN0czwvdGl0bGU+Ci0JCQk8c2VjdGlvbj4KLQkJCQk8dGl0bGU+VXNlciBNYWlsaW5nIExpc3Q8L3RpdGxlPgotCQkJCTxwPkxvdyBUcmFmZmljIDxqdW1wIGhyZWY9ImV4dDptYWlsc3VidXNlciI+U3Vic2NyaWJlPC9qdW1wPiZuYnNwOzxqdW1wIGhyZWY9ImV4dDptYWlsdW5zdWJ1c2VyIj5VbnN1YnNjcmliZTwvanVtcD4KLQkJCQk8L3A+Ci0JCQkJPHA+U2VhcmNoIHRoZSB0aGUgPGp1bXAgaHJlZj0iZXh0OnVzZXJsaXN0YXJjaGl2ZSI+WE1MQmVhbnMgVXNlciBMaXN0IEFyY2hpdmU8L2p1bXA+IGZvciBhbnN3ZXJzIHRvIHlvdXIgcXVlc3Rpb25zIG9uIDxlbT51c2luZzwvZW0+Ci0JCQkJWE1MQmVhbnMuICBQb3N0IHF1ZXN0aW9ucywgaXNzdWVzLCBmZWVkYmFjaywgb24gdGhlIHVzaW5nIFhNTEJlYW5zIHRvIHRoaXMgbGlzdC48L3A+Ci0JCQkJPHA+QXJjaGl2ZXMgb2YgdGhlIFhNTEJlYW5zIFVzZXJzIG1haWxpbmcgbGlzdCBhcmUgYXZhaWxhYmxlIDxqdW1wIGhyZWY9ImV4dDp1c2VybGlzdGFyY2hpdmUiPmhlcmUgaW4gZXlicm93c2U8L2p1bXA+LjwvcD4KLQkJCTwvc2VjdGlvbj4KLQkJCTxzZWN0aW9uPgotCQkJCTx0aXRsZT5EZXZlbG9wZXIgTWFpbGluZyBMaXN0PC90aXRsZT4KLQkJCQk8cD5NZWRpdW0gVHJhZmZpYyA8anVtcCBocmVmPSJleHQ6bWFpbHN1YmRldiI+U3Vic2NyaWJlPC9qdW1wPiZuYnNwOzxqdW1wIGhyZWY9ImV4dDptYWlsdW5zdWJkZXYiPlVuc3Vic2NyaWJlPC9qdW1wPgotCQkJCTwvcD4KLQkJCQk8cD5Vc2UgdGhpcyBtYWlsaW5nIGxpc3QgZm9yIHF1ZXN0aW9ucyBhbmQvb3IgaXNzdWVzIHJlbGF0ZWQgdG8gZGV2ZWxvcG1lbnQgYW5kIGNvZGluZyBvZiBYTUxCZWFucy4gIFlvdSBtYXkgd2FudCB0byAKLQkJCQk8anVtcCBocmVmPSJleHQ6ZGV2bGlzdGFyY2hpdmUiPnNlYXJjaCB0aGUgYXJjaGl2ZTwvanVtcD4gb3IgdGhlIFhNTEJlYW5zIEZBUSBiZWZvcmUgcG9zdGluZyB5b3VyIHF1ZXN0aW9uL2ZlZWRiYWNrLjwvcD4KLQkJCQk8cD5BcmNoaXZlcyBvZiB0aGUgWE1MQmVhbnMgRGV2IG1haWxpbmcgbGlzdCBhcmUgYXZhaWxhYmxlIDxqdW1wIGhyZWY9ImV4dDpkZXZsaXN0YXJjaGl2ZSI+aGVyZSBpbiBleWJyb3dzZTwvanVtcD4uPC9wPgotCQkJPC9zZWN0aW9uPgotCQkJPHNlY3Rpb24+Ci0JCQkJPHRpdGxlPkNWUyBNYWlsaW5nIExpc3Q8L3RpdGxlPgotCQkJCTxwPkxvdy1NZWRpdW0tSElnaCBUcmFmZmljIChqdXN0IGRlcGVuZHMpIDxqdW1wIGhyZWY9ImV4dDptYWlsc3ViY3ZzIj5TdWJzY3JpYmU8L2p1bXA+Jm5ic3A7PGp1bXAgaHJlZj0iZXh0Om1haWx1bnN1YmN2cyI+VW5zdWJzY3JpYmU8L2p1bXA+Ci0JCQkJPC9wPgotCQkJCTxwPlRoaXMgbGlzdCBpcyB1c2VkIGZvciBDVlMgY2hlY2tpbiBlbWFpbHMgYW5kIHNpbWlsYXIgQ1ZTIHR5cGUgaXNzdWVzLjwvcD4KLQkJCQk8cD5BcmNoaXZlcyBvZiB0aGUgWE1MQmVhbnMgQ1ZTIG1haWxpbmcgbGlzdCBhcmUgYXZhaWxhYmxlIDxqdW1wIGhyZWY9ImV4dDpjdnNsaXN0YXJjaGl2ZSI+aGVyZSBpbiBleWJyb3dzZTwvanVtcD4uPC9wPgotCQkJPC9zZWN0aW9uPgotCQk8L3NlY3Rpb24+Ci0JCTxzZWN0aW9uPgotCQkJPHRpdGxlPldobyB3ZSBhcmU8L3RpdGxlPgotCQkJPHA+Ci0JCQkJPHN0cm9uZz5YTUxCZWFucyBTaGVwaGVyZDo8L3N0cm9uZz4mbmJzcDtUZWQgTGV1bmc8L3A+Ci0JCQk8cD4KLQkJCQk8c3Ryb25nPlhNTEJlYW5zIENvbW1pdHRlcnM8L3N0cm9uZz4KLQkJCTwvcD4KLQkJCTx0YWJsZT4KLQkJCQk8dHI+Ci0JCQkJCTx0aD5Db21taXR0ZXI8L3RoPgotCQkJCQk8dGg+RW1haWw8L3RoPgotCQkJCQk8dGg+QmlvPC90aD4KLQkJCQk8L3RyPgotCQkJCTx0cj4KLQkJCQkJPHRkPkNlemFyIEFuZHJlaTwvdGQ+Ci0JCQkJCTx0ZD5jZXphci5hbmRyZWlAbm9zcGFtLmJlYS5jb208L3RkPgotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4KLQkJCQk8L3RyPgotCQkJCTx0cj4KLQkJCQkJPHRkPkRhdmlkIEJhdTwvdGQ+Ci0JCQkJCTx0ZD5kYXZpZC5iYXVAbm9zcGFtLmJlYS5jb208L3RkPgotCQkJCQk8dGQ+Ci0JCQkJCQk8bGluayBocmVmPSJodHRwOi8vbmFnb3lhLmFwYWNoZS5vcmcvZXllYnJvd3NlL1JlYWRNc2c/bGlzdE5hbWU9eG1sYmVhbnMtZGV2QHhtbC5hcGFjaGUub3JnJmFtcDttc2dObz05MyI+YWJvdXQgbWU8L2xpbms+Ci0JCQkJCTwvdGQ+Ci0JCQkJPC90cj4KLQkJCQk8dHI+Ci0JCQkJCTx0ZD5LZW4gS3Jlc3M8L3RkPgotCQkJCQk8dGQ+a2VuQG5vc3BhbS5rcmVzcy5vcmc8L3RkPgotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4KLQkJCQk8L3RyPgotCQkJCTx0cj4KLQkJCQkJPHRkPkxhdXJlbmNlIE1vcm9uZXk8L3RkPgotCQkJCQk8dGQ+bGF1cmVuY2UubW9yb25leUBub3NwYW0ucmV1dGVycy5jb208L3RkPgotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4KLQkJCQk8L3RyPgotCQkJCTx0cj4KLQkJCQkJPHRkPkRhdmlkIFJlbXk8L3RkPgotCQkJCQk8dGQ+ZGF2aWQucmVteUBub3NwYW0uYmVhLmNvbTwvdGQ+Ci0JCQkJCTx0ZD4mbmJzcDs8L3RkPgotCQkJCTwvdHI+Ci0JCQkJPHRyPgotCQkJCQk8dGQ+Q2xpZmYgU2NobWlkdDwvdGQ+Ci0JCQkJCTx0ZD5jbGlmZi5zY2htaWR0QG5vc3BhbS5iZWEuY29tPC90ZD4KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+Ci0JCQkJPC90cj4KLQkJCQk8dHI+Ci0JCQkJCTx0ZD5FcmljIFZhc2lsaWs8L3RkPgotCQkJCQk8dGQ+ZXJpYy52YXNpbGlrQG5vc3BhbS5iZWEuY29tPC90ZD4KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+Ci0JCQkJPC90cj4KLQkJCQk8dHI+Ci0JCQkJCTx0ZD5Sb2JlcnQgV3lyaWNrPC90ZD4KLQkJCQkJPHRkPnJvYkBub3NwYW0ud3lyaWNrLm9yZzwvdGQ+Ci0JCQkJCTx0ZD4mbmJzcDs8L3RkPgotCQkJCTwvdHI+Ci0JCQkJPHRyPgotCQkJCQk8dGQ+U2NvdHQgWmllZ2xlcjwvdGQ+Ci0JCQkJCTx0ZD5zY290dC56aWVnbGVyQG5vc3BhbS5iZWEuY29tPC90ZD4KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+Ci0JCQkJPC90cj4KLQkJCQk8dHI+Ci0JCQkJCTx0ZD5QYXRyaWNrIENhbGFoYW48L3RkPgotCQkJCQk8dGQ+cGNhbEBub3NwYW0uYmVhLmNvbTwvdGQ+Ci0JCQkJCTx0ZD4mbmJzcDs8L3RkPgotCQkJCTwvdHI+Ci0JCQk8L3RhYmxlPgotCQkJPG5vdGUgbGFiZWw9IkVtYWlsaW5nIENvbW1pdHRlcnMiPkl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSB0aGUgbWFpbGluZyBsaXN0cyBhYm92ZSB0byBjb21tdW5pY2F0ZSBhYm91dCB0aGUgWE1MQmVhbnMgcHJvamVjdCByYXRoZXIgdGhhbiBlbWFpbGluZyB0aGUgY29tbWl0dGVycyBkaXJlY3RseS48L25vdGU+Ci0JCQk8bm90ZT5UaGUgbm9zcGFtLiBwcmVmaXggb24gdGhlIGVtYWlsIGFkZHJlc3NlcyBhYm92ZSB3YXMgcHV0IHRoZXJlIGFzIGFuIGF0dGVtcHQgdG8gdGh3YXJ0IGF1dG9tYXRpYyBlbWFpbCBoYXJ2ZXN0aW5nIGJ5IHNwYW1tZXJzLiAgVG8gZW1haWwgc29tZW9uZSBvbiB0aGlzIAotCQkJbGlzdCByZW1vdmUgdGhlIG5vc3BhbSBmcm9tIHRoZSBlbWFpbCBhZGRyZXNzLjwvbm90ZT4KLQkJPC9zZWN0aW9uPgotCTwvYm9keT4KLTwvZG9jdW1lbnQ+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQveGRvY3MvZG9jdW1lbnRhdGlvbi9pbmRleC54bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQveGRvY3MvZG9jdW1lbnRhdGlvbi9pbmRleC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MGEyYzguLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L3hkb2NzL2RvY3VtZW50YXRpb24vaW5kZXgueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBkb2N1bWVudCBQVUJMSUMgIi0vL0FQQUNIRS8vRFREIERvY3VtZW50YXRpb24gVjEuMi8vRU4iICJodHRwOi8vYXBhY2hlLm9yZy9mb3JyZXN0L2R0ZC9kb2N1bWVudC12MTIuZHRkIj4KLTxkb2N1bWVudD4KLQk8aGVhZGVyPgotCQk8dGl0bGU+WE1MQmVhbnMgRG9jdW1lbnRhdGlvbjwvdGl0bGU+Ci0JPC9oZWFkZXI+Ci0JPGJvZHk+Ci0JCTxzZWN0aW9uPgotCQkJPHRpdGxlPlhNTEJlYW5zIEZBUTwvdGl0bGU+Ci0JCQk8cD5Db21pbmcgc29vbiAuLi4gVW50aWwgdGhlbiB5b3UgY2FuIGZpbmQgZG9jdW1lbnRhdGlvbiBpbiB0aGUgQ1ZTIGRvd25sb2FkPC9wPgotCQk8L3NlY3Rpb24+Ci0JCTxzZWN0aW9uPgotCQkJPHRpdGxlPlhNTEJlYW5zIFZlcnNpb24gMSBVc2VyIERvY3VtZW50YXRpb248L3RpdGxlPgotCQkJPHVsPgotCQkJCTxsaT48bGluayBocmVmPSIuLi9kb2NzL2d1aWRlL2NvbkdldHRpbmdTdGFydGVkd2l0aFhNTEJlYW5zLmh0bWwiPkdldHRpbmcgc3RhcnRlZCB3aXRoIFhNTEJlYW5zPC9saW5rPjwvbGk+Ci0JCQkJPGxpPjxsaW5rIGhyZWY9Ii4uL2RvY3MvZ3VpZGUvY29uSW50cm9Ub1RoZVNjaGVtYVR5cGVTeXN0ZW0uaHRtbCI+SW50cm8gdG8gdGhlIFNjaGVtYSBUeXBlIFN5c3RlbTwvbGluaz48L2xpPgotCQkJCTxsaT48bGluayBocmVmPSIuLi9kb2NzL2d1aWRlL2NvbkphdmFUeXBlc0dlbmVyYXRlZEZyb21Vc2VyRGVyaXZlZC5odG1sIj5KYXZhIFR5cGVzIGdlbmVyYXRlZCBmcm9tIFVzZXIgRGVyaXZlZCBUeXBlczwvbGluaz48L2xpPgotCQkJCTxsaT48bGluayBocmVmPSIuLi9kb2NzL2d1aWRlL2Nvbk1ldGhvZHNGb3JHZW5lcmF0ZWRKYXZhVHlwZXMuaHRtbCI+SmF2YSBNZXRob2RzIGZvciBUeXBlcyBnZW5lcmF0ZWQgZnJvbSBTY2hlbWE8L2xpbms+PC9saT4KLQkJCQk8bGk+PGxpbmsgaHJlZj0iLi4vZG9jcy9ndWlkZS9jb25OYXZpZ2F0aW5nWE1Md2l0aEN1cnNvcnMuaHRtbCI+TmF2aWdhdGluZyBYTUwgd2l0aCBYTUxDdXJzb3I8L2xpbms+PC9saT4KLQkJCQk8bGk+PGxpbmsgaHJlZj0iLi4vZG9jcy9ndWlkZS9jb25TZWxlY3RpbmdYTUx3aXRoWFBhdGguaHRtbCI+U2VsZWN0aW5nIFhNTCB3aXRoIFhQYXRoPC9saW5rPjwvbGk+Ci0JCQkJPGxpPjxsaW5rIGhyZWY9Ii4uL2RvY3MvZ3VpZGUvY29uVW5kZXJzdGFuZGluZ1hNTFRva2Vucy5odG1sIj5VbmRlcnN0YW5kaW5nIFhNTCBUb2tlbnM8L2xpbms+PC9saT4KLQkJCQk8bGk+PGxpbmsgaHJlZj0iLi4vZG9jcy9ndWlkZS9jb25Vc2luZ0Jvb2ttYXJrc1RvQW5ub3RhdGVYTUwuaHRtbCI+VXNpbmcgQm9va21hcmtzIHRvIEFubm90YXRlIFhNTDwvbGluaz48L2xpPgotCQkJCTxsaT48bGluayBocmVmPSIuLi9kb2NzL2d1aWRlL2NvblhNTEJlYW5zU3VwcG9ydEJ1aWx0SW5TY2hlbWFUeXBlcy5odG1sIj5YTUxCZWFucyBzdXBwb3J0IGZvciBCdWlsdC1pbiBTY2hlbWEgVHlwZXM8L2xpbms+PC9saT4KLQkJCTwvdWw+Ci0JCTwvc2VjdGlvbj4KLQkJPHNlY3Rpb24+Ci0JCQk8dGl0bGU+WE1MQmVhbnMgVmVyc2lvbiAxIEphdmFEb2M8L3RpdGxlPgotCQkJPHVsPgotCQkJCTxsaT48bGluayBocmVmPSIuLi9kb2NzL3JlZmVyZW5jZS9pbmRleC5odG1sIj5YTUxCZWFucyBKYXZhIERvYzwvbGluaz48L2xpPgotCQkJPC91bD4KLQkJPC9zZWN0aW9uPgotCTwvYm9keT4KLTwvZG9jdW1lbnQ+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQveGRvY3MvaW5kZXgueG1sIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L3hkb2NzL2luZGV4LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc4NDc4OC4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQveGRvY3MvaW5kZXgueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBkb2N1bWVudCBQVUJMSUMgIi0vL0FQQUNIRS8vRFREIERvY3VtZW50YXRpb24gVjEuMi8vRU4iICJkb2N1bWVudC12MTIuZHRkIj4KLTxkb2N1bWVudD4KLQk8aGVhZGVyPgotCQk8dGl0bGU+V2VsY29tZSB0byBYTUxCZWFuczwvdGl0bGU+Ci0JPC9oZWFkZXI+Ci0JPGJvZHk+Ci0JCTxzZWN0aW9uPgotCQkJPHRpdGxlPkludHJvZHVjdGlvbiB0byBYTUxCZWFuczwvdGl0bGU+Ci0JCQk8cD5YTUxCZWFucyBpcyBhIHRvb2wgdGhhdCBhbGxvd3MgeW91IHRvIGFjY2VzcyB0aGUgPGVtPmZ1bGw8L2VtPiBwb3dlciBvZiBYTUwgaW4gYSBKYXZhIGZyaWVuZGx5IHdheS4gIEl0IGlzIGFuIFhNTC1KYXZhIGJpbmRpbmcgdG9vbC4gIFRoZSBpZGVhIGlzIHRoYXQgeW91IGNhbiAKLQkJCXRha2UgYWR2YW50YWdlIHRoZSByaWNobmVzcyBhbmQgZmVhdHVyZXMgb2YgWE1MIGFuZCBYTUwgU2NoZW1hIGFuZCBoYXZlIHRoZXNlIGZlYXR1cmVzIG1hcHBlZCBhcyBuYXR1cmFsbHkgYXMgcG9zc2libGUgdG8gdGhlIGVxdWl2YWxlbnQgSmF2YSBsYW5ndWFnZSBhbmQgdHlwaW5nIAotCQkJY29uc3RydWN0cy4gIFhNTEJlYW5zIHVzZXMgWE1MIFNjaGVtYSB0byA8ZW0+Y29tcGlsZTwvZW0+IEphdmEgaW50ZXJmYWNlcyBhbmQgY2xhc3NlcyB0aGF0IHlvdSBjYW4gdGhlbiB1c2UgdG8gYWNjZXNzIGFuZCBtb2RpZnkgWE1MIGluc3RhbmNlIGRhdGEuICAKLQkJCVVzaW5nIFhNTEJlYW5zIGlzIHNpbWlsYXIgdG8gdXNpbmcgYW55IG90aGVyIEphdmEgaW50ZXJmYWNlL2NsYXNzLCB5b3Ugd2lsbCBzZWUgdGhpbmdzIGxpa2UgPGNvZGU+Z2V0Rm9vPC9jb2RlPiBvciA8Y29kZT5zZXRGb288L2NvZGU+IGp1c3QgYXMgCi0JCQl5b3Ugd291bGQKLQkJCWV4cGVjdCB3aGVuIHdvcmtpbmcgd2l0aCBKYXZhLiAgV2hpbGUgYSBtYWpvciB1c2Ugb2YgWE1MQmVhbnMgaXMgdG8gYWNjZXNzIHlvdXIgWE1MIGluc3RhbmNlIGRhdGEgd2l0aCBzdHJvbmdseSB0eXBlZCBKYXZhIGNsYXNzZXMgdGhlcmUgYXJlIGFsc28KLQkJCUFQSSdzIHRoYXQgYWxsb3cgeW91IGFjY2VzcyB0byB0aGUgZnVsbCBYTUwgaW5mb3NldCAoWE1MQmVhbnMga2VlcHMgZnVsbCBYTUwgSW5mb3NldCBmaWRlbGl0eSkgYXMgd2VsbCBhcyB0byBhbGxvdyB5b3UgdG8gPGVtPnJlZmxlY3Q8L2VtPiBpbnRvIHRoZSBYTUwgc2NoZW1hCi0JCQlpdHNlbGYgdGhyb3VnaCBhbiBYTUwgU2NoZW1hIE9iamVjdCBtb2RlbC48L3A+Ci0JCQk8cD5Gb3IgbW9yZSBkZXRhaWxzIG9uIFhNTEJlYW5zIHNlZSB0aGUgPGxpbmsgaHJlZj0iaHR0cDovL25hZ295YS5hcGFjaGUub3JnL3dpa2kvYXBhY2hld2lraS5jZ2k/WG1sQmVhbnNFeHBsYW5hdGlvbiI+WE1MQmVhbnMgRXhwbGFuYXRpb248L2xpbms+IFdpa2kgcGFnZS4gCi0JCQlBcyB3ZWxsIGFzIHRoZSBYTUxCZWFucyBkb2N1bWVudGF0aW9uIChzZWUgdGhlIERvY3VtZW50YXRpb24gdGFiIG9uIHRoaXMgd2Vic2l0ZSBhcyB3ZWxsIGFzIHRoZSBkb2NzIGRpcmVjdG9yeSBpbiB0aGUgWE1MQmVhbnMgU291cmNlKS48L3A+Ci0JCQk8c2VjdGlvbj4KLQkJCQk8dGl0bGU+V2hhdCBtYWtlcyBYTUxCZWFucyBEaWZmZXJlbnQ8L3RpdGxlPgotCQkJCTxwPlRoZXJlIGFyZSBhdCBsZWFzdCB0d28gbWFqb3IgdGhpbmdzIHRoYXQgbWFrZSBYTUxCZWFucyB1bmlxdWUgZnJvbSBvdGhlciBYTUwtSmF2YSBiaW5kaW5nIG9wdGlvbnMuPC9wPgotCQkJCTxvbD4KLQkJCQkJPGxpPgotCQkJCQkJPHN0cm9uZz5GdWxsIFhNTCBTY2hlbWEgc3VwcG9ydC48L3N0cm9uZz4gWE1MQmVhbnMgZnVsbHkgc3VwcG9ydHMgWE1MIFNjaGVtYSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgamF2YSBjbGFzc2VzIHByb3ZpZGUgY29uc3RydWN0cwotICAgICAgCQkJCQlmb3IgYWxsIG9mIHRoZSBtYWpvciBmdW5jdGlvbmFsaXR5IG9mIFhNTCBTY2hlbWEuICBUaGlzIGlzIGNyaXRpY2FsIHNpbmNlIG9mdGVuIHRpbWVzIHlvdSBkbyBub3QgaGF2ZSBjb250cm9sIG92ZXIgdGhlIGZlYXR1cmVzIG9mIFhNTCBTY2hlbWEKLSAgICAgIAkJCQkJdGhhdCB5b3UgbmVlZCB0byB3b3JrIHdpdGggaW4gSmF2YS4gIEFsc28sIFhNTCBTY2hlbWEgb3JpZW50ZWQgYXBwbGljYXRpb25zIGNhbiB0YWtlIGZ1bGwgYWR2YW50YWdlIG9mIHRoZSBwb3dlciBvZiBYTUwgU2NoZW1hIGFuZCBub3QKLSAgICAgIAkJCQkJaGF2ZSB0byByZXN0cmljdCB0aGVtc2VsdnMgdG8gYSBzdWJzZXQuPC9saT4KLQkJCQkJPGxpPgotCQkJCQkJPHN0cm9uZz5GdWxsIFhNTCBJbmZvc2V0IGZpZGVsaXR5Ljwvc3Ryb25nPldoZW4gdW5tYXJzaGFsbGluZyBhbiBYTUwgaW5zdGFuY2UgdGhlIGZ1bGwgWE1MIGluZm9zZXQgaXMga2VwdCBhbmQgaXMgYXZhaWxhYmxlIHRvIHRoZSBkZXZlbG9wZXIuICBUaGlzIGlzCi0gICAgICAJCQkJCWNyaXRpY2FsIGJlY2F1c2UgYmVjYXVzZSBvZiB0aGUgc3Vic2V0IG9mIFhNTCB0aGF0IGlzIG5vdCBlYXNpbHkgcmVwcmVzZW50ZWQgaW4gamF2YS4gICBGb3IgZXhhbXBsZSwgb3JkZXIgb2YgdGhlIGVsZW1lbnRzIG9yIGNvbW1lbnRzIG1pZ2h0Ci0gICAgICAJCQkJCWJlIG5lZWRlZCBpbiBhIHBhcnRpY3VsYXIgYXBwbGljYXRpb24uPC9saT4KLQkJCQk8L29sPgotCQkJCTxwPkEgbWFqb3Igb2JqZWN0aXZlIG9mIFhNTEJlYW5zIGhhcyBiZWVuIHRvIGJlIGFwcGxpY2FibGUgaW4gPGVtPmFsbDwvZW0+IG5vbi1zdHJlYW1pbmcgKGluIG1lbW9yeSkgWE1MIHByb2dyYW1taW5nIHNpdHVhdGlvbnMuICBZb3Ugc2hvdWxkIGJlCi0gICAgICAJCQkJYWJsZSB0byBjb21waWxlIHlvdXIgWE1MIFNjaGVtYSBpbnRvIGEgc2V0IG9mIGphdmEgY2xhc3NlcyBhbmQga25vdyB0aGF0IDEpIHlvdSB3aWxsIGJlIGFibGUgdG8gdXNlIFhNTEJlYW5zIGZvciBhbGwgb2YgdGhlIHNjaGVtYXMgeW91IGVuY291bnRlcgotICAgICAgCQkJCShldmVuIHRoZSB3YXJwZWQgb25lcykgYW5kIDIpIHRoYXQgeW91IHdpbGwgYmUgYWJsZSB0byBnZXQgdG8gdGhlIFhNTCBhdCB3aGF0ZXZlciBsZXZlbCBpcyBuZWNlc3NhcnkgLSBhbmQgbm90IGhhdmUgdG8gcmVzb3J0IHRvIG11bHRwbGUKLSAgICAgIAkJCQl0b29scyB0byBkbyB0aGlzLjwvcD4KLQkJCQk8cD5UbyBhY2NvbXBsaXNoIHRoaXMgWE1MQmVhbnMgcHJvdmlkZXMgdGhyZWUgbWFqb3IgQVBJczo8L3A+Ci0JCQkJPHVsPgotCQkJCQk8bGk+Ci0JCQkJCQk8c3Ryb25nPlhtbE9iamVjdDwvc3Ryb25nPiAgVGhlIGphdmEgY2xhc3NlcyB0aGF0IGFyZSBnZW5lcmF0ZWQgZnJvbSBhbiBYTUwgU2NoZW1hIGFyZSBhbGwgZGVyaXZlZCBmcm9tIFhtbE9iamVjdC4gIFRoZXNlIHByb3ZpZGUgc3Ryb25nbHkKLSAgICAgIAkJCQkJdHlwZWQgZ2V0dGVycyBhbmQgc2V0dGVycyBmb3IgZWFjaCBvZiB0aGUgZWxlbWVudHMgd2l0aGluIHRoZSBkZWZpbmVkIFhNTC4gIENvbXBsZXggdHlwZXMgYXJlIGluIHR1cm4gWG1sT2JqZWN0cy4gIEZvciBleGFtcGxlIGdldEN1c3RvbWVyCi0gICAgICAJCQkJCW1pZ2h0IHJldHVybiBhIEN1c3RvbWVyVHlwZSAod2hpY2ggaXMgYW4gWG1sT2JqZWN0KS4gIFNpbXBsZSB0eXBlcyB0dXJuIGludG8gc2ltcGxlIGdldHRlcnMgYW5kIHNldHRlcnMgd2l0aCB0aGUgY29ycmVjdCBqYXZhIHR5cGUuICBGb3IKLSAgICAgIAkJCQkJZXhhbXBsZSBnZXROYW1lIG1pZ2h0IHJldHVybiBhIFN0cmluZy48L2xpPgotCQkJCQk8bGk+Ci0JCQkJCQk8c3Ryb25nPlhtbEN1cnNvcjwvc3Ryb25nPiBGcm9tIGFueSBYbWxPYmplY3QgeW91IGNhbiBnZXQgYW4gWG1sQ3Vyc29yLiAgVGhpcyBwcm92aWRlcyBlZmZpY2llbnQsIGxvdyBsZXZlbCBhY2Nlc3MgdG8gdGhlIFhNTCBJbmZvc2V0LiAgQSBjdXJzb3IgCi0gICAgICAJCQkJCXJlcHJlc2VudHMgYSBwb3NpdGlvbiBpbiB0aGUgWE1MIGluc3RhbmNlLiAgWW91IGNhbiBtb3ZlIHRoZSBjdXJzb3IgYXJvdW5kIHRoZSBYTUwgaW5zdGFuY2UgYXQgYW55IGxldmVsIG9mIGdyYW51bGFyaXR5IHlvdSBuZWVkCi0gICAgICAJCQkJCWZyb20gaW5kaXZpZHVhbCBjaGFyYWN0ZXJzIHRvIFRva2Vucy48L2xpPgotCQkJCQk8bGk+Ci0JCQkJCQk8c3Ryb25nPlNjaGVtYVR5cGU8L3N0cm9uZz4gIFhNTEJlYW5zIHByb3ZpZGVzIGEgZnVsbCBYTUwgU2NoZW1hIG9iamVjdCBtb2RlbCB0aGF0IHlvdSBjYW4gdXNlIHRvIHJlZmxlY3Qgb24gdGhlIHVuZGVybHlpbmcgc2NoZW1hIG1ldGEgaW5mb3JtYXRpb24uCi0gICAgICAJCQkJCUZvciBleGFtcGxlLCB5b3UgbWlnaHQgd2FudCB0byBnZW5lcmF0ZSBhIHNhbXBsZSBYTUwgaW5zdGFuY2UgZm9yIGFuIFhNTCBzY2hlbWEgb3IgcGVyaGFwcyBmaW5kIHRoZSBlbnVtZXJhdGlvbnMgZm9yIGFuIGVsZW1lbnQKLSAgICAgIAkJCQkJc28gdGhhdCB5b3UgY2FuIGRpc3BsYXkgdGhlbS48L2xpPgotCQkJCTwvdWw+Ci0JCQkJPHA+QWxsIG9mIHRoaXMgd2FzIGJ1aWx0IHdpdGggcGVyZm9ybWFuY2UgaW4gbWluZC4gICBJbmZvcm1hbCBiZW5jaG1hcmtzIGFuZCB1c2VyIGZlZWRiYWNrIGluZGljYXRlIHRoYXQgWE1MQmVhbnMgaXMgZXh0cmVtZWx5IGZhc3QuPC9wPgotCQkJPC9zZWN0aW9uPgotCQk8L3NlY3Rpb24+Ci0JCTxzZWN0aW9uPgotCQkJPHRpdGxlPkhpc3Rvcnk8L3RpdGxlPgotCQkJPHA+WE1MQmVhbnMgd2FzIHN1Ym1pdHRlZCB0byBBcGFjaGUgYnkgQkVBIFN5c3RlbXMgaW4gU2VwdGVtYmVyIDIwMDMgYW5kIGlzIGN1cnJlbnRseSBpbiB0aGUgQXBhY2hlIGluY3ViYXRpb24gcHJvY2Vzcy4gIAotCQkJWE1MQmVhbnMgd2FzIG9yaWdpbmFsbHkgY3JlYXRlZCBiZWNhdXNlIG9mIHRoZSBuZWVkIHNlZW4gYnkgZGV2ZWxvcGVycywgaW4gcGFydGljdWxhciBEYXZpZCBCYXUgCi0JCQkoPGxpbmsgaHJlZj0iaHR0cDovL25hZ295YS5hcGFjaGUub3JnL2V5ZWJyb3dzZS9SZWFkTXNnP2xpc3ROYW1lPXhtbGJlYW5zLWRldkB4bWwuYXBhY2hlLm9yZyZhbXA7bXNnTm89OTMiPkRhdmlkJ3MgYWJvdXQgbWUgcG9zdDwvbGluaz4pLCAgCi0JCQluZWVkIGZvciBhIG1vcmUgWE1MIGNlbnRyaWMgSmF2YSBiaW5kaW5nIG1vZGVsIHRoYXQgbm90aGluZyBvbiB0aGUgbWFya2V0IG9mZmVyZWQuICAgWE1MQmVhbnMgMS4wIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1c2VkIGFzIGFuIHVuZGVybHlpbmcgdGVjaG5vbG9neSBmb3Igc2V2ZXJhbAotCQkJcHJvZHVjdHMgYXMgd2VsbCBhcyBieSBhIGdyb3dpbmcgbnVtYmVyIG9mIGxhcmdlIHVzZXJzIGluY2x1ZGluZyBzb21lIG9mIHRoZSBsYXJnZXN0IGNvbXBhbmllcyBpbiB0aGUgd29ybGQuPC9wPgotCQk8L3NlY3Rpb24+Ci0JCTxzZWN0aW9uPgotCQkJPHRpdGxlPkZ1dHVyZTwvdGl0bGU+Ci0JCQk8cD5UaGUgZnV0dXJlIG9mIFhNTEJlYW5zIGlzIGV4Y2l0aW5nIGFuZCB5b3UgYXJlIGludml0ZWQgdG8gY29udHJpYnV0ZS4gIFhNTEJlYW5zIFZlcnNpb24gMSBpcyBhIGdyZWF0LCBzdGFibGUgdGVjaG5vbG9neSB0aGF0IHdpbGwgY29udGludWUgdG8gCi0JCQlpbXByb3ZlIGdvaW5nIGZvcndhcmQuICBJdHMgZW1waGFzaXMgb24gZnVsbCBzdXBwb3J0IGZvciBYTUwgU2NoZW1hIGFuZCB0aGUgWE1MIEluZm9zZXQgYWxvbmcgd2l0aCBpdCdzIHBlcmZvcm1hbmNlCi0JCQljaGFyYWN0YXJpc3RpY3MgbWFrZSBpdCBhIGdyZWF0IGNob2ljZSBmb3IgaW4tbWVtb3J5IFhNTC1KYXZhIHByb2dyYW1taW5nLiA8L3A+Ci0JCQk8cD5Xb3JrIGhhcyBiZWd1biBvbiBwbGFubmluZyBYTUxCZWFucyAyLjAuICBBdCB0aGlzIHBvaW50IGl0IGFwcGVhcnMgdGhhdCB0aGUgbWFqb3IgZW1waGFzaXMgZm9yIFhNTEJlYW5zIDIuMCBhcmUgbmV3IHVzZSBjYXNlcyB0aGF0IGV4cGFuZAotCQkJdGhlIGJyZWFkdGggb2YgWE1MQmVhbnMuICBUaGUgb2JzZXJ2YXRpb24gaXMgdGhhdCBYTUwtSmF2YSBiaW5kaW5nIG9jY3VycyBpbiBzaXR1YXRpb25zIHRoYXQgWE1MQmVhbnMgY291bGQgYmUgb3B0aW1pemVkIGZvciwgYXJlYXMKLQkJCXN1Y2ggYXMgV2ViIFNlcnZpY2VzIChYTUxCZWFucyB3b3JrcyB3ZWxsIG5vdyBpbiBtYW55IFdlYiBTZXJ2aWNlcyBzaXR1YXRpb25zKSBhbmQgSmF2YSB0byBYTUwgU2NoZW1hIHNjZW5hcmlvcyAuICAKLQkJCVNlZSB0aGUgPGxpbmsgaHJlZj0iaHR0cDovL25hZ295YS5hcGFjaGUub3JnL3dpa2kvYXBhY2hld2lraS5jZ2k/WG1sQmVhbnNSb2FkTWFwIj5YTUxCZWFucyBSb2FkbWFwPC9saW5rPiBhbmQgdGhlIAotCQkJPGxpbmsgaHJlZj0iaHR0cDovL25hZ295YS5hcGFjaGUub3JnL3dpa2kvYXBhY2hld2lraS5jZ2k/WG1sQmVhbnNGZWF0dXJlUGxhbiI+WE1MQmVhbnMgRmVhdHVyZSBQbGFuPC9saW5rPiB3aWtpIHBhZ2UgZm9yCi0JCQltb3JlIGluZm9ybWF0aW9uLiAgWE1MQmVhbnMgaXMgYWN0aXZlbHkgbG9va2luZyBmb3IgY29udHJpYnV0b3JzIGFuZCBjb21taXR0ZXJzIHNvLCBpZiB5b3UgYXJlIGludGVyZXN0ZWQsIHBsZWFzZSBqb2luIGluLjwvcD4KLQkJPC9zZWN0aW9uPgotCQk8c2VjdGlvbj4KLQkJCTx0aXRsZT5OZXdzIGFuZCBldmVudHM8L3RpdGxlPgotCQkJPHVsPgotCQkJCTxsaT4KLQkJCQkJPGxpbmsgaHJlZj0iaHR0cDovL2FwYWNoZWNvbi5jb20vMjAwMy9VUy9pbmRleC5odG1sIj4KLQkJCQkJCTxpbWcgc3JjPSJodHRwOi8vamFrYXJ0YS5hcGFjaGUub3JnL2ltYWdlcy9sb2dvcy9hYzIwMDMtMTUwLmdpZiIgYWx0PSJhcGFjaGVjb24gMjAwMyBsb2dvIiB3aWR0aD0iMTUwIiBoZWlnaHQ9Ijg2Ii8+Ci0JCQkJCTwvbGluaz4KLQkJCQkJPGxpbmsgaHJlZj0iaHR0cDovL2FwYWNoZWNvbi5jb20vMjAwMy9VUy9pbmRleC5odG1sIj5BcGFjaGVDb24gVVMgMjAwMzwvbGluaz4KLQkJCSAgICAgICAgICAoMTYtMTkgTm92ZW1iZXIgMjAwMykgaXMgbm93IG9wZW4gZm9yIHJlZ2lzdHJhdGlvbi4gQXBhY2hlQ29uIGlzCi0JCQkgICAgICAgICAgdGhlIGNvbmZlcmVuY2UgZm9yIGFsbCB0aGluZ3MgQXBhY2hlLiBDb21lIGFsb25nIGFuZCBsZWFybiBhYm91dAotCQkJICAgICAgICAgIGEgcmFuZ2Ugb2YgbmV3IHRlY2hub2xvZ2llcywgbWVldCBzb21lIEFwYWNoZSBmb2xrcyBhbmQgc2hhcmUKLQkJCSAgICAgICAgICB0aGUga25vd2xlZGdlLiBEYXZpZCBCYXUgaXMgc2NoZWR1bGVkIHRvIHNwZWFrIGFib3V0IFhNTEJlYW5zIAotCQkJICAgICAgICAgIG9uIE1vbmRheSwgTm92IDE3IGZyb20gMjozMCB0byAzOjMwIAotCQkJICAgICAgICAgICg8bGluayBocmVmPSJodHRwOi8vYXBhY2hlY29uLmNvbS8yMDAzL1VTL2h0bWwvc2Vzc2lvbnMuaHRtbCI+QXBhY2hlQ29uIFNjaGVkdWxlPC9saW5rPikuCi0JCQkgICAgICAgIDwvbGk+Ci0JCQk8L3VsPgotCQk8L3NlY3Rpb24+Ci0JPC9ib2R5PgotPC9kb2N1bWVudD4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC94ZG9jcy9wcm9qZWN0TWFuYWdlbWVudC9pbmRleC54bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQveGRvY3MvcHJvamVjdE1hbmFnZW1lbnQvaW5kZXgueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmE2OTdhLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC94ZG9jcy9wcm9qZWN0TWFuYWdlbWVudC9pbmRleC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIGRvY3VtZW50IFBVQkxJQyAiLS8vQVBBQ0hFLy9EVEQgRG9jdW1lbnRhdGlvbiBWMS4yLy9FTiIgImh0dHA6Ly9hcGFjaGUub3JnL2ZvcnJlc3QvZHRkL2RvY3VtZW50LXYxMi5kdGQiPgotPGRvY3VtZW50PgotCTxoZWFkZXI+Ci0JCTx0aXRsZT5YTUxCZWFucyBQcm9qZWN0IE1hbmFnZW1lbnQ8L3RpdGxlPgotCTwvaGVhZGVyPgotCTxib2R5PgotCQk8c2VjdGlvbj4KLQkJCTx0aXRsZT5JbmN1YmF0aW9uIEV4aXQgQ3JpdGVyaWE8L3RpdGxlPgotCQkJPHA+QSBtYWpvciBBcGFjaGUgc3ViIHByb2plY3QgZ29hbCBmb3IgWE1MQmVhbnMgaXMgZXhpdGluZyBmcm9tIGluY3ViYXRpb24uICBIZXJlIGlzIGEgbGluayB0byB0aGUgZXhpdCBjcml0ZXJpYSBwb3N0IG9uIGdlbmVyYWxAaW5jdWJhdG9yLmFwYWNoZS5vcmcKLQkJCSg8bGluayBocmVmPSJodHRwOi8vbmFnb3lhLmFwYWNoZS5vcmcvZXllYnJvd3NlL1JlYWRNc2c/bGlzdE5hbWU9Z2VuZXJhbEBpbmN1YmF0b3IuYXBhY2hlLm9yZyZhbXA7bXNnSWQ9MTA1NTg4OCI+WE1MQmVhbnMgRXhpdCBDcml0ZXJpYTwvbGluaz4pLjwvcD4KLQkJCTxub3RlPk5lZWQgdG8gY2hhbmdlIHRoaXMgbGluayBvdmVyIHRvIGEgV2lraSBwYWdlIHNvIHdlIGNhbiBzaG93L3VwZGF0ZSB0aGUgc3RhdHVzIG9uIGVhY2ggaXRlbS48L25vdGU+Ci0JCTwvc2VjdGlvbj4KLQkJPHNlY3Rpb24+Ci0JCQk8dGl0bGU+WE1MQmVhbnMgVmVyc2lvbiAxIFByb2plY3QgTWFuYWdlbWVudDwvdGl0bGU+Ci0JCQk8cD5YTUxCZWFucyBWZXJzaW9uIDEgaXMgdGhlIGN1cnJlbnQgc3RhYmxlIDxlbT5pbmN1YmF0ZWQ8L2VtPiByZWxlYXNlPC9wPgotCQk8L3NlY3Rpb24+Ci0JCTxzZWN0aW9uPgotCQkJPHRpdGxlPlhNTEJlYW5zIFZlcnNpb24gMiBQcm9qZWN0IE1hbmFnZW1lbnQ8L3RpdGxlPgotCQkJPHA+WW91IGNhbiBmaW5kIGluZm9ybWF0aW9uIGFib3V0IFhNTEJlYW5zIDIuMCBwbGFubmluZyBhdCAgPGxpbmsgaHJlZj0iaHR0cDovL25hZ295YS5hcGFjaGUub3JnL3dpa2kvYXBhY2hld2lraS5jZ2k/WG1sQmVhbnNGZWF0dXJlUGxhbiI+WE1MQmVhbnMgRmVhdHVyZSBQbGFuPC9saW5rPiAKLQkJCWlmIHlvdSB3YW50IHRvIHByb3ZpZGUgaWRlYXMgb3IgZmVlZGJhY2sgb24gdGhpcyBwbGFubmluZyBpdCBpcyBiZXN0IHRvIHBvc3QgaXQgdG8gZWl0aGVyIHhtbGJlYW5zLWRldkB4bWwuYXBhY2hlLm9yZyBvcgotCQkJeG1sYmVhbnMtdXNlckB4bWwuYXBhY2hlLm9yZy48L3A+Ci0JCTwvc2VjdGlvbj4KLQkJPHNlY3Rpb24+Ci0JCQk8dGl0bGU+WE1MQmVhbnMgQnVnIExpc3RzPC90aXRsZT4KLQkJCTxwPk9wZW4gWE1MQmVhbnMgYnVncyAoZnJvbSBCdWd6aWxsYSk6IDxsaW5rIGhyZWY9Imh0dHA6Ly9uYWdveWEuYXBhY2hlLm9yZy9idWd6aWxsYS9idWdsaXN0LmNnaT9idWdfc3RhdHVzPU5FVyZhbXA7YnVnX3N0YXR1cz1BU1NJR05FRCZhbXA7YnVnX3N0YXR1cz1SRU9QRU5FRCZhbXA7ZW1haWwxPSZhbXA7ZW1haWx0eXBlMT1zdWJzdHJpbmcmYW1wO2VtYWlsYXNzaWduZWRfdG8xPTEmYW1wO2VtYWlsMj0mYW1wO2VtYWlsdHlwZTI9c3Vic3RyaW5nJmFtcDtlbWFpbHJlcG9ydGVyMj0xJmFtcDtidWdpZHR5cGU9aW5jbHVkZSZhbXA7YnVnX2lkPSZhbXA7Y2hhbmdlZGluPSZhbXA7dm90ZXM9JmFtcDtjaGZpZWxkZnJvbT0mYW1wO2NoZmllbGR0bz1Ob3cmYW1wO2NoZmllbGR2YWx1ZT0mYW1wO3Byb2R1Y3Q9WE1MQmVhbnMmYW1wO3ZlcnNpb249dW5zcGVjaWZpZWQmYW1wO3Nob3J0X2Rlc2M9JmFtcDtzaG9ydF9kZXNjX3R5cGU9YWxsd29yZHNzdWJzdHImYW1wO2xvbmdfZGVzYz0mYW1wO2xvbmdfZGVzY190eXBlPWFsbHdvcmRzc3Vic3RyJmFtcDtidWdfZmlsZV9sb2M9JmFtcDtidWdfZmlsZV9sb2NfdHlwZT1hbGx3b3Jkc3N1YnN0ciZhbXA7a2V5d29yZHM9JmFtcDtrZXl3b3Jkc190eXBlPWFueXdvcmRzJmFtcDtmaWVsZDAtMC0wPW5vb3AmYW1wO3R5cGUwLTAtMD1ub29wJmFtcDt2YWx1ZTAtMC0wPSZhbXA7Y21kdHlwZT1kb2l0JmFtcDtvcmRlcj0lMjdJbXBvcnRhbmNlJTI3Ij5CdWdaaWxsYTwvbGluaz4KLQkJCTwvcD4KLQkJPC9zZWN0aW9uPgotCTwvYm9keT4KLTwvZG9jdW1lbnQ+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQveGRvY3Mvc2l0ZS54bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQveGRvY3Mvc2l0ZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMWEwZGYuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L3hkb2NzL3NpdGUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IS0tCi1Gb3JyZXN0IHNpdGUueG1sCi0KLVRoaXMgZmlsZSBjb250YWlucyBhbiBvdXRsaW5lIG9mIHRoZSBzaXRlJ3MgaW5mb3JtYXRpb24gY29udGVudC4gIEl0IGlzIHVzZWQgdG86Ci0tIEdlbmVyYXRlIHRoZSB3ZWJzaXRlIG1lbnVzICh0aG91Z2ggdGhlc2UgY2FuIGJlIG92ZXJyaWRkZW4gLSBzZWUgZG9jcykKLS0gUHJvdmlkZSBzZW1hbnRpYywgbG9jYXRpb24taW5kZXBlbmRlbnQgYWxpYXNlcyBmb3IgaW50ZXJuYWwgJ3NpdGU6JyBVUklzLCBlZwotPGxpbmsgaHJlZj0ic2l0ZTpjaGFuZ2VzIj4gbGlua3MgdG8gY2hhbmdlcy5odG1sIChvciAuLi9jaGFuZ2VzLmh0bWwgaWYgaW4KLSAgc3ViZGlyKS4KLS0gUHJvdmlkZSBhbGlhc2VzIGZvciBleHRlcm5hbCBVUkxzIGluIHRoZSBleHRlcm5hbC1yZWZzIHNlY3Rpb24uICBFZywgPGxpbmsKLSAgaHJlZj0iZXh0OmNvY29vbiI+IGxpbmtzIHRvIGh0dHA6Ly94bWwuYXBhY2hlLm9yZy9jb2Nvb24vIAotCi1TZWUgaHR0cDovL3htbC5hcGFjaGUub3JnL2ZvcnJlc3QvbGlua2luZy5odG1sIGZvciBtb3JlIGluZm8KLS0tPgotPHNpdGUgbGFiZWw9IlhNTEJlYW5zIiBocmVmPSIiIHhtbG5zPSJodHRwOi8vYXBhY2hlLm9yZy9mb3JyZXN0L2xpbmttYXAvMS4wIiB0YWI9IiI+Ci0JPGFib3V0IGxhYmVsPSJBYm91dCI+Ci0JCTxpbmRleCBsYWJlbD0iT3ZlcnZpZXciIGhyZWY9ImluZGV4Lmh0bWwiIGRlc2NyaXB0aW9uPSJXZWxjb21lIHRvIFhNTEJlYW5zIi8+Ci0JCTxuZXdzQW5kRXZlbnRzIGxhYmVsPSJOZXdzIGFuZCBFdmVudHMiIGhyZWY9ImluZGV4Lmh0bWwjTmV3cythbmQrZXZlbnRzIiBkZXNjcmlwdGlvbj0iWE1MQmVhbnMgTmV3cyBhbmQgRXZlbnRzIi8+Ci0JCTxwcm9wb3NhbCBsYWJlbD0iUHJvcG9zYWwiIGhyZWY9Imh0dHA6Ly9uYWdveWEuYXBhY2hlLm9yZy93aWtpL2FwYWNoZXdpa2kuY2dpP1htbEJlYW5zUHJvcG9zYWwiIGRlc2NyaXB0aW9uPSJUaGUgb3JpZ2luYWwgWE1MQmVhbnMgUHJvamVjdCBQcm9wb3NhbCIvPgotCQk8dG9kbyBsYWJlbD0iVG8gRG8iIGhyZWY9Imh0dHA6Ly9uYWdveWEuYXBhY2hlLm9yZy93aWtpL2FwYWNoZXdpa2kuY2dpP1hNTEJlYW5zVG9EbyIgZGVzY3JpcHRpb249IkFjdGlvbiBpdGVtcywgbW9zdGx5IHJlZ2FyZGluZyBpbmN1YmF0aW9uIGV4aXQgY3JpdGVyaWEiLz4KLQkJPCEtLQotCQk8YWxsX3NpdGUgbGFiZWw9IkZ1bGwgSFRNTCIgaHJlZj0ic2l0ZS5odG1sIiAvPgotCQk8YWxsX3NpdGVQREYgbGFiZWw9IkZ1bGwgUERGIiBocmVmPSJzaXRlLnBkZiIgLz4KLQkJLS0+Ci0JPC9hYm91dD4KLQk8c291cmNlQW5kQmluYXJpZXMgbGFiZWw9IlNvdXJjZSBhbmQgQmluYXJpZXMiIGhyZWY9InNvdXJjZUFuZEJpbmFyaWVzLyIgdGFiPSJzb3VyY2VBbmRCaW5hcmllcyI+Ci0JCTx2ZXJzaW9uMSBsYWJlbD0iVmVyc2lvbiAxIEJpbmFyaWVzIGFuZCBEZXYgS2l0IiBocmVmPSJpbmRleC5odG1sI1hNTEJlYW5zIFZlcnNpb24gMSBCaW5hcnkgYW5kIERldmVsb3BtZW50IEtpdCIgZGVzY3JpcHRpb249IlhNTEJlYW5zIERldmVsb3BtZW50IEtpdCBwcm92aWRlcyBiaW5hcmllcyBhcyB3ZWxsIGFzIHV0aWxpdGllcyBhbmQgZG9jIi8+Ci0JCTxzb3VyY2UgbGFiZWw9IlNvdXJjZSBBY2Nlc3MiIGhyZWY9ImluZGV4Lmh0bWwjWE1MQmVhbnMrU291cmNlIiBkZXNjcmlwdGlvbj0iSW5mb3JtYXRpb24gb24gZ2V0dGluZyBYTUxCZWFucyBzb3VyY2UiLz4KLQk8L3NvdXJjZUFuZEJpbmFyaWVzPgotCTxkb2N1bWVudGF0aW9uIGxhYmVsPSJEb2N1bWVudGF0aW9uIiBocmVmPSJkb2N1bWVudGF0aW9uLyIgdGFiPSJkb2N1bWVudGF0aW9uIj4KLQkJPGZhcSBsYWJlbD0iWE1MQmVhbnMgRkFRIiBocmVmPSJpbmRleC5odG1sI0ZBUSIgZGVzY3JpcHRpb249IlhNTEJlYW5zIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zIi8+Ci0JCTx1c2VyZG9jIGxhYmVsPSJWZXJzaW9uIDEgVXNlciBEb2N1bWVudGF0aW9uIiBocmVmPSJpbmRleC5odG1sI1hNTEJlYW5zK1ZlcnNpb24rMStVc2VyK0RvY3VtZW50YXRpb24iIGRlc2NyaXB0aW9uPSJYTUxCZWFucyBWZXJzaW9uIDEgVXNlciBEb2N1bWVudGF0aW9uIi8+Ci0JCTx1c2VyZG9jIGxhYmVsPSJWZXJzaW9uIDEgSmF2YURvYyIgaHJlZj0iaW5kZXguaHRtbCNYTUxCZWFucytWZXJzaW9uKzErSmF2YURvYyIgZGVzY3JpcHRpb249IlhNTEJlYW5zIFZlcnNpb24gMSBKYXZhRG9jIi8+Ci0JPC9kb2N1bWVudGF0aW9uPgotCTxjb21tdW5pdHkgbGFiZWw9IkNvbW11bml0eSIgaHJlZj0iY29tbXVuaXR5LyIgdGFiPSJjb21tdW5pdHkiPgotCQk8bWFpbGluZ0xpc3RzIGxhYmVsPSJNYWlsaW5nIExpc3RzIiBocmVmPSJpbmRleC5odG1sI01haWxpbmcrTGlzdHMiIGRlc2NyaXB0aW9uPSJNYWlsaW5nIExpc3QgSW5mb3JtYXRpb24iLz4KLQkJPHdob1dlQXJlIGxhYmVsPSJXaG8gd2UgYXJlIiBocmVmPSJpbmRleC5odG1sI1dobyt3ZSthcmUiIGRlc2NyaXB0aW9uPSJMaXN0IG9mIGNvbW1pdHRlcnMiLz4KLQk8L2NvbW11bml0eT4KLQk8cHJvamVjdE1hbmFnZW1lbnQgbGFiZWw9IlByb2plY3QgTWFuYWdtZW50IiBocmVmPSJwcm9qZWN0TWFuYWdlbWVudC8iIHRhYj0icHJvamVjdE1hbmFnZW1lbnQiPgotCQk8dmVyc2lvbjEgbGFiZWw9IlZlcnNpb24gMSBQcm9qZWN0IE1hbmFnZW1lbnQiIGhyZWY9ImluZGV4Lmh0bWwjWE1MQmVhbnMrVmVyc2lvbisxK1Byb2plY3QrTWFuYWdlbWVudCIgZGVzY3JpcHRpb249IkluZm9ybWF0aW9uIG9uIHRoZSBwcm9ncmVzcyBvZiBYTUxCZWFucyBWZXJzaW9uIDEiLz4KLQkJPHZlcnNpb24yIGxhYmVsPSJWZXJzaW9uIDIgUHJvamVjdCBNYW5hZ2VtZW50IiBocmVmPSJpbmRleC5odG1sI1hNTEJlYW5zK1ZlcnNpb24rMitQcm9qZWN0K01hbmFnZW1lbnQiIGRlc2NyaXB0aW9uPSJJbmZvcm1hdGlvbiBvbiB0aGUgcHJvZ3Jlc3Mgb2YgWE1MQmVhbnMgVmVyc2lvbiAyIi8+Ci0JCTxidWdzIGxhYmVsPSJYTUxCZWFucyBCdWcgVHJhY2tpbmciIGhyZWY9ImluZGV4Lmh0bWwjWE1MQmVhbnMrQnVnK1RyYWNraW5nIiBkZXNjcmlwdGlvbj0iV2hlcmUgdG8gZmluZCBvciBsb2cgYnVncyBmb3IgWE1MQmVhbnMiLz4KLQk8L3Byb2plY3RNYW5hZ2VtZW50PgotCTxhbGw+Ci0JCTx3aG9sZV9zaXRlX2h0bWwgbGFiZWw9Ildob2xlIFNpdGUgSFRNTCIgaHJlZj0ic2l0ZS5odG1sIi8+Ci0JCTx3aG9sZV9zaXRlX2h0bWwgbGFiZWw9Ildob2xlIFNpdGUgUERGIiBocmVmPSJzaXRlLnBkZiIvPgotCTwvYWxsPgotCTxleHRlcm5hbC1yZWZzPgotCQk8eG1sLmFwYWNoZS5vcmcgaHJlZj0iaHR0cDovL3htbC5hcGFjaGUub3JnLyI+Ci0JCQk8Zm9ycmVzdCBocmVmPSJmb3JyZXN0LyI+Ci0JCQkJPHZhbGlkYXRpb24gaHJlZj0idmFsaWRhdGlvbi5odG1sIi8+Ci0JCQkJPHdlYmFwcCBocmVmPSJ5b3VyLXByb2plY3QuaHRtbCN3ZWJhcHAiLz4KLQkJCQk8ZG9jdW1lbnQtdjEyIGhyZWY9ImRvY3VtZW50LXYxMi5odG1sIi8+Ci0JCQk8L2ZvcnJlc3Q+Ci0JCQk8Y29jb29uIGhyZWY9ImNvY29vbi8iLz4KLQkJPC94bWwuYXBhY2hlLm9yZz4KLQkJPG1haWxzdWJ1c2VyIGxhYmVsPSJYbWxCZWFucyBVc2VyIExpc3QgU3Vic2NyaWJlIiBocmVmPSJtYWlsdG86eG1sYmVhbnMtdXNlci1zdWJzY3JpYmVAeG1sLmFwYWNoZS5vcmciLz4KLQkJPG1haWx1bnN1YnVzZXIgbGFiZWw9IlhtbEJlYW5zIFVzZXIgTGlzdCBVblN1YnNjcmliZSIgaHJlZj0ibWFpbHRvOnhtbGJlYW5zLXVzZXItdW5zdWJzY3JpYmVAeG1sLmFwYWNoZS5vcmciLz4KLQkJPG1haWxzdWJkZXYgbGFiZWw9IlhtbEJlYW5zIERldiBMaXN0IFN1YnNjcmliZSIgaHJlZj0ibWFpbHRvOnhtbGJlYW5zLWRldi1zdWJzY3JpYmVAeG1sLmFwYWNoZS5vcmciLz4KLQkJPG1haWx1bnN1YmRldiBsYWJlbD0iWG1sQmVhbnMgRGV2IExpc3QgVW5TdWJzY3JpYmUiIGhyZWY9Im1haWx0bzp4bWxiZWFucy1kZXYtdW5zdWJzY3JpYmVAeG1sLmFwYWNoZS5vcmciLz4KLQkJPG1haWxzdWJjdnMgbGFiZWw9IlhtbEJlYW5zIENWUyBMaXN0IFN1YnNjcmliZSIgaHJlZj0ibWFpbHRvOnhtbGJlYW5zLWN2cy1zdWJzY3JpYmVAeG1sLmFwYWNoZS5vcmciLz4KLQkJPG1haWx1bnN1YmN2cyBsYWJlbD0iWG1sQmVhbnMgQ1ZTIExpc3QgVW5TdWJzY3JpYmUiIGhyZWY9Im1haWx0bzp4bWxiZWFucy1jdnMtdW5zdWJzY3JpYmVAeG1sLmFwYWNoZS5vcmciLz4KLQkJPHVzZXJsaXN0YXJjaGl2ZSBsYWJlbD0iWG1sQmVhbXMgVXNlciBMaXN0IEFyY2hpdmUiIGhyZWY9Imh0dHA6Ly9uYWdveWEuYXBhY2hlLm9yZy9leWVicm93c2UvU3VtbWFyaXplTGlzdD9saXN0SWQ9MTUyIi8+Ci0JCTxkZXZsaXN0YXJjaGl2ZSBsYWJlbD0iWG1sQmVhbnMgRGV2IExpc3QgQXJjaGl2ZSIgaHJlZj0iaHR0cDovL25hZ295YS5hcGFjaGUub3JnL2V5ZWJyb3dzZS9TdW1tYXJpemVMaXN0P2xpc3RJZD0xNTEiLz4KLQkJPGN2c2xpc3RhcmNoaXZlIGxhYmVsPSJYbWxCZWFucyBDVlMgTGlzdCBBcmNoaXZlIiBocmVmPSJodHRwOi8vbmFnb3lhLmFwYWNoZS5vcmcvZXllYnJvd3NlL1N1bW1hcml6ZUxpc3Q/bGlzdElkPTE1MCIvPgotCTwvZXh0ZXJuYWwtcmVmcz4KLTwvc2l0ZT4KZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC94ZG9jcy9zb3VyY2VBbmRCaW5hcmllcy9pbmRleC54bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQveGRvY3Mvc291cmNlQW5kQmluYXJpZXMvaW5kZXgueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTIyMjYxLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vY29udGVudC94ZG9jcy9zb3VyY2VBbmRCaW5hcmllcy9pbmRleC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIGRvY3VtZW50IFBVQkxJQyAiLS8vQVBBQ0hFLy9EVEQgRG9jdW1lbnRhdGlvbiBWMS4yLy9FTiIgImh0dHA6Ly9hcGFjaGUub3JnL2ZvcnJlc3QvZHRkL2RvY3VtZW50LXYxMi5kdGQiPgotPGRvY3VtZW50PgotCTxoZWFkZXI+Ci0JCTx0aXRsZT5YTUxCZWFucyBTb3VyY2UgYW5kIEJpbmFyaWVzPC90aXRsZT4KLQk8L2hlYWRlcj4KLQk8Ym9keT4KLQkJPHNlY3Rpb24+Ci0JCQk8dGl0bGU+WE1MQmVhbnMgVmVyc2lvbiAxIEJpbmFyeSBhbmQgRGV2ZWxvcG1lbnQgS2l0PC90aXRsZT4KLQkJCTxub3RlPkluY3ViYXRlZCBCdWlsZC4gIFhNTEJlYW5zIGlzIGluIHRoZSBpbmN1YmF0aW9uIHByb2Nlc3MgYXQgQXBhY2hlIGFuZCB0aGUgYnVpbGQgcHJvdmlkZWQgaGVyZSBpcyBub3Qgc2FuY3Rpb25lZCBhcyAKLQkJCWFuIG9mZmljaWFsIEFwYWNoZSBSZWxlYXNlLjwvbm90ZT4KLQkJCTxwPkxpbmsgdG8gdGhlIEluY3ViYXRlZCBYTUxCZWFucyBiaW5hcnkgYW5kIGRldmVsb3BtZW50IGtpdCB3aWxsIGdvIGhlcmUgYXMgc29vbiBhcyB3ZSBmaWd1cmUgb3V0IGhvdyB0byBnZXQgaXQgb24gdGhlIG1pcnJvcnM8L3A+Ci0JCTwvc2VjdGlvbj4KLQkJPHNlY3Rpb24+Ci0JCQk8dGl0bGU+WE1MQmVhbnMgU291cmNlPC90aXRsZT4KLQkJCTxzZWN0aW9uPgotCQkJCTx0aXRsZT5Tb3VyY2UgdmlhIENWU1ZpZXc8L3RpdGxlPgotCQkJCTxwPlhNTEJlYW5zIHNvdXJjZSB2aWEgQ1ZTVmlldzogPGxpbmsgaHJlZj0iaHR0cDovL2N2cy5hcGFjaGUub3JnL3ZpZXdjdnMuY2dpL3htbC14bWxiZWFucy8iPkhlcmU8L2xpbms+Ci0JCQkJPC9wPgotCQkJPC9zZWN0aW9uPgotCQkJPHNlY3Rpb24+Ci0JCQkJPHRpdGxlPlNvdXJjZSB2aWEgQ1ZTIGNoZWNrb3V0PC90aXRsZT4KLQkJCQk8cD5JZiB5b3UgaGF2ZSBDVlMgaW5zdGFsbGVkIG9uIHlvdXIgbWFjaGluZSB5b3UgY2FuIGlzc3VlIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgdG8gZ2V0IFhNTCBCZWFucyBzb3VyY2U6PC9wPgotCQkJCTxzb3VyY2U+Ci1jdnMgLWQgOnBzZXJ2ZXI6YW5vbmN2c0BjdnMuYXBhY2hlLm9yZzovaG9tZS9jdnNwdWJsaWMgbG9naW4KLXBhc3N3b3JkOiBhbm9uY3ZzCi0JCQkJPC9zb3VyY2U+Ci0JCQkJPHNvdXJjZT5jdnMgLWQgOnBzZXJ2ZXI6YW5vbmN2c0BjdnMuYXBhY2hlLm9yZzovaG9tZS9jdnNwdWJsaWMgY2hlY2tvdXQgeG1sLXhtbGJlYW5zPC9zb3VyY2U+Ci0JCQk8L3NlY3Rpb24+Ci0JCQk8c2VjdGlvbj4KLQkJCQk8dGl0bGU+QnVpbGRpbmcgWE1MQmVhbnMgVmVyc2lvbiAxLjA8L3RpdGxlPgotCQkJCTxzZWN0aW9uPgotCQkJCQk8dGl0bGU+V2luZG93czwvdGl0bGU+Ci0JCQkJCTxwPkFmdGVyIHRoZSBzdGVwcyBhYm92ZSB5b3Ugc2hvdWxkIHNlZSBhbiB4bWwteG1sYmVhbnMgZGlyZWN0b3J5OjwvcD4KLQkJCQkJPHNvdXJjZT4KLWNkIHhtbC14bWxiZWFuc1x2MQoteGJlYW5lbnYKLWFudAotCQkJCQk8L3NvdXJjZT4KLQkJCQkJPHA+VGhpcyB3aWxsIGNyZWF0ZSBhIGJ1aWxkIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBleGVjdXRhYmxlcy4gIFRoZSA8Y29kZT54YmVhbnMuamFyPC9jb2RlPiBpcyBpbiB0aGUgPGNvZGU+eG1sLWJlYW5zXHYxXGFyPC9jb2RlPiBkaXJlY3RvcnkuICBUcnkKLQkJCQkJPGNvZGU+YW50IC1wcm9qZWN0aGVscDwvY29kZT4gdG8gc2VlIG90aGVyIGJ1aWxkIG9wdGlvbnMuPC9wPgotCQkJCTwvc2VjdGlvbj4KLQkJCQk8c2VjdGlvbj4KLQkJCQkJPHRpdGxlPlVuaXg8L3RpdGxlPgotCQkJCQk8cD5uZWVkIGJsdXJiIGhlcmUgb24gYnVpbGRpbmcgaW4gVW5peCwgdmVyeSBzaW1paWxhciB0byBhYm92ZSBXaW5kb3dzIGJ1aWxkPC9wPgotCQkJCTwvc2VjdGlvbj4KLQkJCTwvc2VjdGlvbj4KLQkJPC9zZWN0aW9uPgotCTwvYm9keT4KLTwvZG9jdW1lbnQ+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQveGRvY3MvdGFicy54bWwgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL2NvbnRlbnQveGRvY3MvdGFicy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhNDU4NGUuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L3hkb2NzL3RhYnMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSB0YWJzIFBVQkxJQyAiLS8vQVBBQ0hFLy9EVEQgQ29jb29uIERvY3VtZW50YXRpb24gVGFiIFYxLjAvL0VOIiAiaHR0cDovL2FwYWNoZS5vcmcvZm9ycmVzdC9kdGQvdGFiLWNvY29vbi12MTAuZHRkIj4KLTx0YWJzIHNvZnR3YXJlPSJNeVByb2oiIHRpdGxlPSJNeVByb2oiIGNvcHlyaWdodD0iRm9vIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+Ci0JPCEtLSBUaGUgcnVsZXMgYXJlOgotICAgIEBkaXIgd2lsbCBhbHdheXMgaGF2ZSAnL0BpbmRleGZpbGUnIGFkZGVkLgotICAgIEBpbmRleGZpbGUgZ2V0cyBhcHBlbmRlZCB0byBAZGlyIGlmIHRoZSB0YWIgaXMgc2VsZWN0ZWQuIERlZmF1bHRzIHRvICdpbmRleC5odG1sJwotICAgIEBocmVmIGlzIG5vdCBtb2RpZmllZCB1bmxlc3MgaXQgaXMgcm9vdC1yZWxhdGl2ZSBhbmQgb2J2aW91c2x5IHNwZWNpZmllcyBhCi0gICAgZGlyZWN0b3J5IChlbmRzIGluICcvJyksIGluIHdoaWNoIGNhc2UgL2luZGV4Lmh0bWwgd2lsbCBiZSBhZGRlZAotICAgIElmIEBpZCdzIGFyZSBwcmVzZW50LCBzaXRlLnhtbCBlbnRyaWVzIHdpdGggYSBtYXRjaGluZyBAdGFiIHdpbGwgYmUgaW4gdGhhdCB0YWIuCi0gICAgIC0tPgotCTx0YWIgaWQ9IiIgbGFiZWw9IkhvbWUiIGRpcj0iIiBpbmRleGZpbGU9ImluZGV4Lmh0bWwiLz4KLQk8dGFiIGlkPSJzb3VyY2VBbmRCaW5hcmllcyIgbGFiZWw9IlNvdXJjZSBhbmQgQmluYXJpZXMiIGRpcj0ic291cmNlQW5kQmluYXJpZXMiLz4KLQk8dGFiIGlkPSJkb2N1bWVudGF0aW9uIiBsYWJlbD0iRG9jdW1lbnRhdGlvbiIgZGlyPSJkb2N1bWVudGF0aW9uIi8+Ci0JPHRhYiBpZD0iY29tbXVuaXR5IiBsYWJlbD0iQ29tbXVuaXR5IiBkaXI9ImNvbW11bml0eSIvPgotCTx0YWIgaWQ9InByb2plY3RNYW5hZ2VtZW50IiBsYWJlbD0iUHJvamVjdCBNYW5hZ2VtZW50IiBkaXI9InByb2plY3RNYW5hZ2VtZW50Ii8+Ci08L3RhYnM+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL3Jlc291cmNlcy9pbWFnZXMvYnVpbHQtd2l0aC1mb3JyZXN0LWJ1dHRvbi5wbmcgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL3Jlc291cmNlcy9pbWFnZXMvYnVpbHQtd2l0aC1mb3JyZXN0LWJ1dHRvbi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhNzg3YWIuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9yZXNvdXJjZXMvaW1hZ2VzL2J1aWx0LXdpdGgtZm9ycmVzdC1idXR0b24ucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9yZXNvdXJjZXMvaW1hZ2VzL2dyb3VwLWxvZ28uZ2lmIGIvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9yZXNvdXJjZXMvaW1hZ2VzL2dyb3VwLWxvZ28uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2U0YjM2Li4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vcmVzb3VyY2VzL2ltYWdlcy9ncm91cC1sb2dvLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vcmVzb3VyY2VzL2ltYWdlcy9ncm91cC5zdmcgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL3Jlc291cmNlcy9pbWFnZXMvZ3JvdXAuc3ZnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDUxNjBmLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vcmVzb3VyY2VzL2ltYWdlcy9ncm91cC5zdmcKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIHN0YW5kYWxvbmU9Im5vIj8+Ci0KLTwhLS0KLSAgICAgICBTVkcgQW50ZWF0ZXIgbG9nbwotICAgICAgICBqZWZmdEBhcGFjaGUub3JnCi0KLVRvIGdldCBzdGFydGVkIHdpdGggU1ZHLCBJJ2QgcmVjb21tZW5kIGdldHRpbmcgdGhlIEFkb2JlIFNWRyBwbHVnaW4sIGFuZCB0aGUKLXhtbC1iYXRpayBDVlMgbW9kdWxlLiBUaGVuIGhhdmUgYSBsb29rIGF0IHRoZSB4bWwtYmF0aWsvc2FtcGxlcyBmaWxlcy4gVXNlIHRoZQotU1ZHIHNwZWMgKGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy8pIGFzIGEgcmVmZXJlbmNlLgotLS0+Ci0KLTwhLS0KLTwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4wLy9FTiIKLSJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy1TVkctMjAwMTA5MDQvRFREL3N2ZzEwLmR0ZCI+Ci0tLT4KLTxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgotICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKLSAgICAgeG1sbnM6Zm9yPSJodHRwOi8veG1sLmFwYWNoZS5vcmcvZm9ycmVzdCIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI2NSIgPgotICA8dGl0bGU+QW50ZWF0ZXIgbG9nbzwvdGl0bGU+Ci0KLSAgPGRlZnM+Ci0KLSAgICA8IS0tCi0gICAgPHJhZGlhbEdyYWRpZW50IGlkPSJyYWRpYWxHcmFkaWVudCI+Ci0gICAgICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjpnb2xkIiBvZmZzZXQ9IjAiLz4KLSAgICAgIDxzdG9wIHN0eWxlPSJzdG9wLWNvbG9yOm9yYW5nZSIgb2Zmc2V0PSIuNSIvPgotICAgICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6Y3JpbXNvbiIgb2Zmc2V0PSIxIi8+Ci0gICAgPC9yYWRpYWxHcmFkaWVudD4KLSAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50Ij4KLSAgICAgIDxzdG9wIHN0eWxlPSJzdG9wLWNvbG9yOmdvbGQiIG9mZnNldD0iMCIvPgotICAgICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6b3JhbmdlIiBvZmZzZXQ9Ii41Ii8+Ci0gICAgICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjpjcmltc29uIiBvZmZzZXQ9IjEiLz4KLSAgICA8L2xpbmVhckdyYWRpZW50PgotICAgIC0tPgotCi0gICAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkaWVudCIgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjEiPgotICAgICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6d2hpdGUiIG9mZnNldD0iMCIvPgotICAgICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6bGlnaHRncmVlbiIgb2Zmc2V0PSIxIi8+Ci0gICAgPC9saW5lYXJHcmFkaWVudD4KLQotICAgIDxmaWx0ZXIgaWQ9InNoYWRvd0ZpbHRlciIgIGZpbHRlclVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCI+Ci0gICAgICA8IS0tIFRha2VzIHRoZSBhbHBoYSBjaGFubmVsIChibGFjayBvdXRsaW5lIG9mIHRoZSB0ZXh0KSwgYmx1cnMgaXQgYW5kIHNhdmVzIGFzICdibHVyJyAtLT4KLSAgICAgIDxmZUdhdXNzaWFuQmx1ciBpbj0iU291cmNlQWxwaGEiIHN0ZERldmlhdGlvbj0iMiAyIiByZXN1bHQ9ImJsdXIiLz4KLSAgICAgIDwhLS0gVGFrZXMgc2F2ZWQgJ2JsdXInIGFuZCBvZmZzZXRzIGl0IGJ5IDQgcGl4ZWxzLCBzYXZlcyBhcyAnb2Zmc2V0Qmx1cicgLS0+Ci0gICAgICA8ZmVPZmZzZXQgaW49ImJsdXIiIGR4PSI0IiBkeT0iNCIgcmVzdWx0PSJvZmZzZXRCbHVyIi8+Ci0gICAgICA8IS0tIE1lcmdlcyBTb3VyY2VHcmFwaGljIChvcmlnaW5hbCBpbWFnZSkgYW5kICdvZmZzZXRCbHVyJywgcHV0dGluZyB0aGUKLSAgICAgIGZvcm1lciAnb3ZlcicgdGhlIGxhdHRlciwgYW5kIHVzaW5nIHRoZSBtZXJnZWQgcmVzdWx0IGFzIHRoZSBmaW5pc2hlZAotICAgICAgaW1hZ2UgLS0+Ci0gICAgICA8ZmVDb21wb3NpdGUgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0ib2Zmc2V0Qmx1ciIgb3BlcmF0b3I9Im92ZXIiLz4KLSAgICA8L2ZpbHRlcj4KLQotICA8L2RlZnM+Ci0KLSAgPGcgZmlsdGVyPSJ1cmwoI3NoYWRvd0ZpbHRlcikiIGZpbGw9InVybCgjZ3JhZGllbnQpIj4KLSAgICA8dGV4dCB4PSI0MCUiIHk9IjYwJSIgc3R5bGU9ImZvbnQtc2l6ZToyNHB0OyBmb250LWZhbWlseTpWZXJkYW5hIDsgdGV4dC1hbmNob3I6IG1pZGRsZSI+Ci0gICAgPGZvcjpncm91cC1uYW1lIC8+Ci0gICAgPC90ZXh0PgotICA8L2c+Ci08L3N2Zz4KLQotCmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL3Jlc291cmNlcy9pbWFnZXMvaWNvbi5wbmcgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL3Jlc291cmNlcy9pbWFnZXMvaWNvbi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZThiYmIuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9yZXNvdXJjZXMvaW1hZ2VzL2ljb24ucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvd2Vic2l0ZS9zcmMvZG9jdW1lbnRhdGlvbi9yZXNvdXJjZXMvaW1hZ2VzL3Byb2plY3QtbG9nby5naWYgYi93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL3Jlc291cmNlcy9pbWFnZXMvcHJvamVjdC1sb2dvLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVhMWYyYi4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL3Jlc291cmNlcy9pbWFnZXMvcHJvamVjdC1sb2dvLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vcmVzb3VyY2VzL2ltYWdlcy9wcm9qZWN0LnN2ZyBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vcmVzb3VyY2VzL2ltYWdlcy9wcm9qZWN0LnN2ZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDJmM2ZlYi4uMDAwMDAwMAotLS0gYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL3Jlc291cmNlcy9pbWFnZXMvcHJvamVjdC5zdmcKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIHN0YW5kYWxvbmU9Im5vIj8+Ci0KLTwhLS0KLSAgICAgICBTVkcgQW50ZWF0ZXIgbG9nbwotICAgICAgICBqZWZmdEBhcGFjaGUub3JnCi0KLVRvIGdldCBzdGFydGVkIHdpdGggU1ZHLCBJJ2QgcmVjb21tZW5kIGdldHRpbmcgdGhlIEFkb2JlIFNWRyBwbHVnaW4sIGFuZCB0aGUKLXhtbC1iYXRpayBDVlMgbW9kdWxlLiBUaGVuIGhhdmUgYSBsb29rIGF0IHRoZSB4bWwtYmF0aWsvc2FtcGxlcyBmaWxlcy4gVXNlIHRoZQotU1ZHIHNwZWMgKGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy8pIGFzIGEgcmVmZXJlbmNlLgotLS0+Ci0KLTwhLS0KLTwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4wLy9FTiIKLSJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy1TVkctMjAwMTA5MDQvRFREL3N2ZzEwLmR0ZCI+Ci0tLT4KLTxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgotICAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKLSAgICAgeG1sbnM6Zm9yPSJodHRwOi8veG1sLmFwYWNoZS5vcmcvZm9ycmVzdCIgd2lkdGg9IjIyMCIgaGVpZ2h0PSI2NSIgPgotICA8dGl0bGU+QW50ZWF0ZXIgbG9nbzwvdGl0bGU+Ci0KLSAgPGRlZnM+Ci0KLSAgICA8IS0tCi0gICAgPHJhZGlhbEdyYWRpZW50IGlkPSJyYWRpYWxHcmFkaWVudCI+Ci0gICAgICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjpnb2xkIiBvZmZzZXQ9IjAiLz4KLSAgICAgIDxzdG9wIHN0eWxlPSJzdG9wLWNvbG9yOm9yYW5nZSIgb2Zmc2V0PSIuNSIvPgotICAgICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6Y3JpbXNvbiIgb2Zmc2V0PSIxIi8+Ci0gICAgPC9yYWRpYWxHcmFkaWVudD4KLSAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhckdyYWRpZW50Ij4KLSAgICAgIDxzdG9wIHN0eWxlPSJzdG9wLWNvbG9yOmdvbGQiIG9mZnNldD0iMCIvPgotICAgICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6b3JhbmdlIiBvZmZzZXQ9Ii41Ii8+Ci0gICAgICA8c3RvcCBzdHlsZT0ic3RvcC1jb2xvcjpjcmltc29uIiBvZmZzZXQ9IjEiLz4KLSAgICA8L2xpbmVhckdyYWRpZW50PgotICAgIC0tPgotCi0gICAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkaWVudCIgeDE9IjAiIHkxPSIwIiB4Mj0iMCIgeTI9IjEiPgotICAgICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6d2hpdGUiIG9mZnNldD0iMCIvPgotICAgICAgPHN0b3Agc3R5bGU9InN0b3AtY29sb3I6bGlnaHRncmVlbiIgb2Zmc2V0PSIxIi8+Ci0gICAgPC9saW5lYXJHcmFkaWVudD4KLQotICAgIDxmaWx0ZXIgaWQ9InNoYWRvd0ZpbHRlciIgIGZpbHRlclVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCI+Ci0gICAgICA8IS0tIFRha2VzIHRoZSBhbHBoYSBjaGFubmVsIChibGFjayBvdXRsaW5lIG9mIHRoZSB0ZXh0KSwgYmx1cnMgaXQgYW5kIHNhdmVzIGFzICdibHVyJyAtLT4KLSAgICAgIDxmZUdhdXNzaWFuQmx1ciBpbj0iU291cmNlQWxwaGEiIHN0ZERldmlhdGlvbj0iMiAyIiByZXN1bHQ9ImJsdXIiLz4KLSAgICAgIDwhLS0gVGFrZXMgc2F2ZWQgJ2JsdXInIGFuZCBvZmZzZXRzIGl0IGJ5IDQgcGl4ZWxzLCBzYXZlcyBhcyAnb2Zmc2V0Qmx1cicgLS0+Ci0gICAgICA8ZmVPZmZzZXQgaW49ImJsdXIiIGR4PSI0IiBkeT0iNCIgcmVzdWx0PSJvZmZzZXRCbHVyIi8+Ci0gICAgICA8IS0tIE1lcmdlcyBTb3VyY2VHcmFwaGljIChvcmlnaW5hbCBpbWFnZSkgYW5kICdvZmZzZXRCbHVyJywgcHV0dGluZyB0aGUKLSAgICAgIGZvcm1lciAnb3ZlcicgdGhlIGxhdHRlciwgYW5kIHVzaW5nIHRoZSBtZXJnZWQgcmVzdWx0IGFzIHRoZSBmaW5pc2hlZAotICAgICAgaW1hZ2UgLS0+Ci0gICAgICA8ZmVDb21wb3NpdGUgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0ib2Zmc2V0Qmx1ciIgb3BlcmF0b3I9Im92ZXIiLz4KLSAgICA8L2ZpbHRlcj4KLQotICA8L2RlZnM+Ci0KLSAgPGcgZmlsdGVyPSJ1cmwoI3NoYWRvd0ZpbHRlcikiIGZpbGw9InVybCgjZ3JhZGllbnQpIj4KLSAgICA8dGV4dCB4PSI1MSUiIHk9Ijc1JSIgc3R5bGU9ImZvbnQtc2l6ZTozMnB0OyBmb250LWZhbWlseTpWZXJkYW5hIDsgdGV4dC1hbmNob3I6IG1pZGRsZSIgPgotICAgIDxmb3I6cHJvamVjdC1uYW1lIC8+Ci0gICAgPC90ZXh0PgotICA8L2c+Ci08L3N2Zz4KLQotCmRpZmYgLS1naXQgYS93ZWJzaXRlL3NyYy9kb2N1bWVudGF0aW9uL3NraW5jb25mLnhtbCBiL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vc2tpbmNvbmYueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2E3NzNjLi4wMDAwMDAwCi0tLSBhL3dlYnNpdGUvc3JjL2RvY3VtZW50YXRpb24vc2tpbmNvbmYueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPCEtLQotU2tpbiBjb25maWd1cmF0aW9uIGZpbGUuIFRoaXMgZmlsZSBjb250YWlucyBkZXRhaWxzIG9mIHlvdXIgcHJvamVjdCwgd2hpY2ggd2lsbAotYmUgdXNlZCB0byBjb25maWd1cmUgdGhlIGNob3NlbiBYTUxCZWFucyBza2luLgotLS0+Ci08IURPQ1RZUEUgc2tpbmNvbmZpZyBbCi0JPCFFTlRJVFkgJSBsaW5rcy5hdHQgJ25hbWUgQ0RBVEEgI1JFUVVJUkVEJz4KLQk8IUVOVElUWSAlIGxpbmsuYXR0ICduYW1lIENEQVRBICNSRVFVSVJFRCBocmVmIENEQVRBICNSRVFVSVJFRCc+Ci0JPCFFTEVNRU5UIHNraW5jb25maWcgKGRpc2FibGUtc2VhcmNoPywgZGlzYWJsZS1wcmludC1saW5rPywgZGlzYWJsZS1wZGYtbGluaz8sIGRpc2FibGUteG1sLWxpbms/LCBkaXNhYmxlLWNvbXBsaWFuY2UtbGlua3M/LCBzZWFyY2hzaXRlLWRvbWFpbj8sIHNlYXJjaHNpdGUtbmFtZT8sIHByb2plY3QtbmFtZSwgcHJvamVjdC11cmwsIHByb2plY3QtbG9nbywgZ3JvdXAtbmFtZT8sIGdyb3VwLXVybD8sIGdyb3VwLWxvZ28/LCBob3N0LXVybD8sIGhvc3QtbG9nbz8sIHllYXI/LCB2ZW5kb3I/LCB0cmFpbD8sIHRvYz8sIGNyZWRpdHM/KSo+Ci0JPCFFTEVNRU5UIGNyZWRpdHMgKGNyZWRpdCopPgotCTwhRUxFTUVOVCBjcmVkaXQgKG5hbWUsIHVybCwgaW1hZ2U/LCB3aWR0aD8sIGhlaWdodD8pPgotCTwhLS0gaWQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgdG9vbCwgYW5kIHJvbGUgaW5kaWNhdGVzIGl0cyBmdW5jdGlvbiAtLT4KLQk8IUFUVExJU1QgY3JlZGl0Ci0JaWQgQ0RBVEEgI0lNUExJRUQKLQkJcm9sZSBDREFUQSAjSU1QTElFRAotPgotCTwhRUxFTUVOVCBkaXNhYmxlLXNlYXJjaCAoI1BDREFUQSk+Ci0JPCFFTEVNRU5UIGRpc2FibGUtcHJpbnQtbGluayAoI1BDREFUQSk+Ci0JPCFFTEVNRU5UIGRpc2FibGUtcGRmLWxpbmsgKCNQQ0RBVEEpPgotCTwhRUxFTUVOVCBkaXNhYmxlLXhtbC1saW5rICgjUENEQVRBKT4KLQk8IUVMRU1FTlQgZGlzYWJsZS1jb21wbGlhbmNlLWxpbmtzICgjUENEQVRBKT4KLQk8IUVMRU1FTlQgc2VhcmNoc2l0ZS1kb21haW4gKCNQQ0RBVEEpPgotCTwhRUxFTUVOVCBzZWFyY2hzaXRlLW5hbWUgKCNQQ0RBVEEpPgotCTwhRUxFTUVOVCBwcm9qZWN0LW5hbWUgKCNQQ0RBVEEpPgotCTwhRUxFTUVOVCBwcm9qZWN0LXVybCAoI1BDREFUQSk+Ci0JPCFFTEVNRU5UIHByb2plY3QtbG9nbyAoI1BDREFUQSk+Ci0JPCFFTEVNRU5UIGdyb3VwLW5hbWUgKCNQQ0RBVEEpPgotCTwhRUxFTUVOVCBncm91cC11cmwgKCNQQ0RBVEEpPgotCTwhRUxFTUVOVCBncm91cC1sb2dvICgjUENEQVRBKT4KLQk8IUVMRU1FTlQgaG9zdC11cmwgKCNQQ0RBVEEpPgotCTwhRUxFTUVOVCBob3N0LWxvZ28gKCNQQ0RBVEEpPgotCTwhRUxFTUVOVCB5ZWFyICgjUENEQVRBKT4KLQk8IUVMRU1FTlQgdmVuZG9yICgjUENEQVRBKT4KLQk8IUVMRU1FTlQgdHJhaWwgKGxpbmsxLCBsaW5rMiwgbGluazMpPgotCTwhRUxFTUVOVCBsaW5rMSBFTVBUWT4KLQk8IS0tIFNlZW1zIHdlIGNhbid0IHVzZSBwYXJhbSBlbnRpdHkgcmVmcyB1bnRpbCB0aGlzIGlzIERURGlmaWVkIC0tPgotCTwhQVRUTElTVCBsaW5rMQotCW5hbWUgQ0RBVEEgI1JFUVVJUkVECi0JCWhyZWYgQ0RBVEEgI0lNUExJRUQKLT4KLQk8IUVMRU1FTlQgbGluazIgRU1QVFk+Ci0JPCFBVFRMSVNUIGxpbmsyCi0JbmFtZSBDREFUQSAjUkVRVUlSRUQKLQkJaHJlZiBDREFUQSAjSU1QTElFRAotPgotCTwhRUxFTUVOVCBsaW5rMyBFTVBUWT4KLQk8IUFUVExJU1QgbGluazMKLQluYW1lIENEQVRBICNSRVFVSVJFRAotCQlocmVmIENEQVRBICNJTVBMSUVECi0+Ci0JPCFFTEVNRU5UIG5hbWUgKCNQQ0RBVEEpPgotCTwhRUxFTUVOVCB1cmwgKCNQQ0RBVEEpPgotCTwhRUxFTUVOVCBpbWFnZSAoI1BDREFUQSk+Ci0JPCFFTEVNRU5UIHdpZHRoICgjUENEQVRBKT4KLQk8IUVMRU1FTlQgaGVpZ2h0ICgjUENEQVRBKT4KLQk8IUVMRU1FTlQgdG9jIEVNUFRZPgotCTwhQVRUTElTVCB0b2MKLQlsZXZlbCBDREFUQSAjSU1QTElFRAotPgotXT4KLTxza2luY29uZmlnPgotCTwhLS0gRG8gd2Ugd2FudCB0byBkaXNhYmxlIHRoZSBHb29nbGUgc2VhcmNoIGJveD8gLS0+Ci0JPGRpc2FibGUtc2VhcmNoPmZhbHNlPC9kaXNhYmxlLXNlYXJjaD4KLQk8IS0tIERvIHdlIHdhbnQgdG8gZGlzYWJsZSB0aGUgcHJpbnQgbGluaz8gLS0+Ci0JPGRpc2FibGUtcHJpbnQtbGluaz50cnVlPC9kaXNhYmxlLXByaW50LWxpbms+Ci0JPCEtLSBEbyB3ZSB3YW50IHRvIGRpc2FibGUgdGhlIFBERiBsaW5rPyAtLT4KLQk8ZGlzYWJsZS1wZGYtbGluaz5mYWxzZTwvZGlzYWJsZS1wZGYtbGluaz4KLQk8IS0tIERvIHdlIHdhbnQgdG8gZGlzYWJsZSB0aGUgeG1sIHNvdXJjZSBsaW5rPyAtLT4KLQk8ZGlzYWJsZS14bWwtbGluaz50cnVlPC9kaXNhYmxlLXhtbC1saW5rPgotCTwhLS0gRG8gd2Ugd2FudCB0byBkaXNhYmxlIHczYyBjb21wbGlhbmNlIGxpbmtzPyAtLT4KLQk8ZGlzYWJsZS1jb21wbGlhbmNlLWxpbmtzPmZhbHNlPC9kaXNhYmxlLWNvbXBsaWFuY2UtbGlua3M+Ci0JPHNlYXJjaHNpdGUtZG9tYWluPnhtbC5hcGFjaGUub3JnPC9zZWFyY2hzaXRlLWRvbWFpbj4KLQk8c2VhcmNoc2l0ZS1uYW1lPkFwYWNoZSBYTUw8L3NlYXJjaHNpdGUtbmFtZT4KLQk8IS0tIG1hbmRhdG9yeSBwcm9qZWN0IGxvZ28KLSAgICAgICBza2luOiBYTUxCZWFucy1zaXRlIHJlbmRlcnMgaXQgYXQgdGhlIHRvcCAtLT4KLQk8cHJvamVjdC1uYW1lPlhNTEJlYW5zPC9wcm9qZWN0LW5hbWU+Ci0JPHByb2plY3QtdXJsPmh0dHA6Ly94bWwuYXBhY2hlLm9yZy94bWxiZWFucy88L3Byb2plY3QtdXJsPgotCTxwcm9qZWN0LWxvZ28+aW1hZ2VzL3Byb2plY3QtbG9nby5naWY8L3Byb2plY3QtbG9nbz4KLQk8IS0tIG9wdGlvbmFsIGdyb3VwIGxvZ28KLSAgICAgICBza2luOiBYTUxCZWFucy1zaXRlIHJlbmRlcnMgaXQgYXQgdGhlIHRvcC1sZWZ0IGNvcm5lciAtLT4KLQk8Z3JvdXAtbmFtZT5BcGFjaGUgWE1MPC9ncm91cC1uYW1lPgotCTxncm91cC11cmw+aHR0cDovL3htbC5hcGFjaGUub3JnLzwvZ3JvdXAtdXJsPgotCTxncm91cC1sb2dvPmltYWdlcy9ncm91cC1sb2dvLmdpZjwvZ3JvdXAtbG9nbz4KLQk8IS0tIG9wdGlvbmFsIGhvc3QgbG9nbyAoZS5nLiBzb3VyY2Vmb3JnZSBsb2dvKQotICAgICAgIHNraW46IFhNTEJlYW5zLXNpdGUgcmVuZGVycyBpdCBhdCB0aGUgYm90dG9tLWxlZnQgY29ybmVyIC0tPgotCTxob3N0LXVybC8+Ci0JPGhvc3QtbG9nby8+Ci0JPCEtLSBUaGUgZm9sbG93aW5nIGFyZSB1c2VkIHRvIGNvbnN0cnVjdCBhIGNvcHlyaWdodCBzdGF0ZW1lbnQgLS0+Ci0JPHllYXI+MjAwMzwveWVhcj4KLQk8dmVuZG9yPlRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi48L3ZlbmRvcj4KLQk8IS0tIFNvbWUgc2tpbnMgdXNlIHRoaXMgdG8gZm9ybSBhICdicmVhZGNydW1iIHRyYWlsJyBvZiBsaW5rcy4gSWYgeW91IGRvbid0Ci0gIHdhbnQgdGhlc2UsIHNldCB0aGUgYXR0cmlidXRlcyB0byBibGFuay4gVGhlIERURCBwdXJwb3NlZnVsbHkgcmVxdWlyZXMgdGhlbS4KLSAgLS0+Ci0JPHRyYWlsPgotCQk8bGluazEgbmFtZT0iYXBhY2hlIiBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvIi8+Ci0JCTxsaW5rMiBuYW1lPSJ4bWwuYXBhY2hlIiBocmVmPSJodHRwOi8veG1sLmFwYWNoZS5vcmcvIi8+Ci0JCTxsaW5rMyBuYW1lPSJ4bWxiZWFucyIgaHJlZj0iaHR0cDovL3htbC5hcGFjaGUub3JnL3htbGJlYW5zIi8+Ci0JPC90cmFpbD4KLQk8IS0tIENvbmZpZ3VyZSBob3cgbWFueSAic2VjdGlvbiIgbGV2ZWxzIG5lZWQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlCi0gIGdlbmVyYXRlZCBUYWJsZSBvZiBDb250ZW50cyAoVE9DKS4gQnkgZGVmYXVsdCwgaWYgbm8gdG9jIGVsZW1lbnQgaXMgcHJvdmlkZWQKLSAgYmVsb3csIHRoZW4gMiBsZXZlbHMgYXJlIGluY2x1ZGVkLiBMZXZlbCAwIGRvZXMgbm90IGdlbmVyYXRlIGFueSBUT0MgYXQgYWxsLgotICAtLT4KLQk8dG9jIGxldmVsPSIyIi8+Ci0JPCEtLSBDcmVkaXRzIGFyZSB0eXBpY2FsbHkgcmVuZGVyZWQgYXMgYSBzZXQgb2Ygc21hbGwgY2xpY2thYmxlIGltYWdlcyBpbiB0aGUKLSAgcGFnZSBmb290ZXIgLS0+Ci0JPGNyZWRpdHM+Ci0JCTxjcmVkaXQ+Ci0JCQk8bmFtZT5CdWlsdCB3aXRoIEZvcnJlc3Q8L25hbWU+Ci0JCQk8dXJsPmh0dHA6Ly94bWwuYXBhY2hlLm9yZy9mb3JyZXN0LzwvdXJsPgotCQkJPGltYWdlPmltYWdlcy9idWlsdC13aXRoLWZvcnJlc3QtYnV0dG9uLnBuZzwvaW1hZ2U+Ci0JCQk8d2lkdGg+ODg8L3dpZHRoPgotCQkJPGhlaWdodD4zMTwvaGVpZ2h0PgotCQk8L2NyZWRpdD4KLQk8L2NyZWRpdHM+Ci08L3NraW5jb25maWc+CmRpZmYgLS1naXQgYS93ZWJzaXRlL3N0YXR1cy54bWwgYi93ZWJzaXRlL3N0YXR1cy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwOThiY2QuLjAwMDAwMDAKLS0tIGEvd2Vic2l0ZS9zdGF0dXMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08c3RhdHVzPgotCi0gIDxkZXZlbG9wZXJzPgotICAgIDxwZXJzb24gbmFtZT0iSm9lIEJsb2dncyIgICAgICBlbWFpbD0iam9lQGpvZXNjb21wYW55Lm9yZyIgICAgICBpZD0iSkIiIC8+Ci0gICAgPCEtLSBBZGQgbW9yZSBwZW9wbGUgaGVyZSAtLT4KLSAgPC9kZXZlbG9wZXJzPgotCi0gIDx0b2RvPgotICAgIDxhY3Rpb25zIHByaW9yaXR5PSJoaWdoIj4KLSAgICAgIDxhY3Rpb24gY29udGV4dD0iZG9jcyIgZGV2PSJKQiI+Ci0gICAgICAgIEN1c3RvbWl6ZSB0aGlzIHRlbXBsYXRlIHByb2plY3Qgd2l0aCB5b3VyIHByb2plY3QncyBkZXRhaWxzLiAgVGhpcwotICAgICAgICBUT0RPIGxpc3QgaXMgZ2VuZXJhdGVkIGZyb20gJ3N0YXR1cy54bWwnLgotICAgICAgPC9hY3Rpb24+Ci0gICAgICA8YWN0aW9uIGNvbnRleHQ9ImRvY3MiIGRldj0iSkIiPgotICAgICAgICBBZGQgbG90cyBvZiBjb250ZW50LiAgWE1MIGNvbnRlbnQgZ29lcyBpbgotICAgICAgICA8Y29kZT5zcmMvZG9jdW1lbnRhdGlvbi9jb250ZW50L3hkb2NzPC9jb2RlPiwgb3Igd2hlcmV2ZXIgdGhlCi0gICAgICAgIDxjb2RlPiR7cHJvamVjdC54ZG9jcy1kaXJ9PC9jb2RlPiBwcm9wZXJ0eSAoc2V0IGluCi0gICAgICAgIDxjb2RlPmZvcnJlc3QucHJvcGVydGllczwvY29kZT4pIHBvaW50cy4KLSAgICAgIDwvYWN0aW9uPgotICAgICAgPGFjdGlvbiBjb250ZXh0PSJmZWVkYmFjayIgZGV2PSJKQiI+Ci0gICAgICAgIE1haWwgPGxpbmsKLSAgICAgICAgICBocmVmPSJtYWlsdG86Zm9ycmVzdC1kZXZAeG1sLmFwYWNoZS5vcmciPmZvcnJlc3QtZGV2QHhtbC5hcGFjaGUub3JnPC9saW5rPgotICAgICAgICB3aXRoIGZlZWRiYWNrLgotICAgICAgPC9hY3Rpb24+Ci0gICAgPC9hY3Rpb25zPgotICAgIDwhLS0gQWRkIHRvZG8gaXRlbXMuIEBjb250ZXh0IGlzIGFuIGFyYml0cmFyeSBzdHJpbmcuIEVnOgotICAgIDxhY3Rpb25zIHByaW9yaXR5PSJoaWdoIj4KLSAgICAgIDxhY3Rpb24gY29udGV4dD0iY29kZSIgZGV2PSJTTiI+Ci0gICAgICA8L2FjdGlvbj4KLSAgICA8L2FjdGlvbnM+Ci0gICAgPGFjdGlvbnMgcHJpb3JpdHk9Im1lZGl1bSI+Ci0gICAgICA8YWN0aW9uIGNvbnRleHQ9ImRvY3MiIGRldj0ib3BlbiI+Ci0gICAgICA8L2FjdGlvbj4KLSAgICA8L2FjdGlvbnM+Ci0gICAgLS0+Ci0gIDwvdG9kbz4KLQotICA8Y2hhbmdlcz4KLSAgICA8IS0tIEFkZCBuZXcgcmVsZWFzZXMgaGVyZSAtLT4KLSAgICA8cmVsZWFzZSB2ZXJzaW9uPSIwLjEiIGRhdGU9IjIwMDIiPgotICAgICAgPCEtLSBTb21lIGFjdGlvbiB0eXBlcyBoYXZlIGFzc29jaWF0ZWQgaW1hZ2VzLiBCeSBkZWZhdWx0LCBpbWFnZXMgYXJlCi0gICAgICBkZWZpbmVkIGZvciAnYWRkJywgJ2ZpeCcsICdyZW1vdmUnIGFuZCAndXBkYXRlJy4gSWYgeW91IGFkZAotICAgICAgc3JjL2RvY3VtZW50YXRpb24vcmVzb3VyY2VzL2ltYWdlcy88Zm9vPi5qcGcgaW1hZ2VzLCB0aGVzZSB3aWxsCi0gICAgICAgIGF1dG9tYXRpY2FsbHkgYmUgdXNlZCBmb3IgZW50cmllcyBvZiB0eXBlIDxmb28+LiAtLT4KLQotICAgICAgICAgIDxhY3Rpb24gZGV2PSJKQiIgdHlwZT0iYWRkIiBjb250ZXh0PSJhZG1pbiI+Ci0gICAgICAgICAgICBJbml0aWFsIEltcG9ydAotICAgICAgICAgIDwvYWN0aW9uPgotICAgICAgICAgIDwhLS0gU2FtcGxlIGFjdGlvbjoKLSAgICAgICAgICA8YWN0aW9uIGRldj0iSkIiIHR5cGU9ImZpeCIgZHVlLXRvPSJKb2UgQ29udHJpYnV0b3IiCi0gICAgICAgICAgICBkdWUtdG8tZW1haWw9ImpvZWNAYXBhY2hlLm9yZyIgZml4ZXMtYnVnPSIxMjMiPgotICAgICAgICAgICAgRml4ZWQgYSBidWcgaW4gdGhlIEZvbyBjbGFzcy4KLSAgICAgICAgICA8L2FjdGlvbj4KLSAgICAgICAgICAtLT4KLSAgICAgICAgPC9yZWxlYXNlPgotICAgICAgPC9jaGFuZ2VzPgotICAgIDwvc3RhdHVzPgo=